Magellan Linux

Contents of /trunk/kernel-alx/patches-5.4/0288-5.4.189-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3635 - (show annotations) (download)
Mon Oct 24 12:34:12 2022 UTC (18 months, 1 week ago) by niro
File size: 504642 byte(s)
-sync kernel patches
1 diff --git a/Documentation/DMA-attributes.txt b/Documentation/DMA-attributes.txt
2 index 8f8d97f65d737..7193505a98cab 100644
3 --- a/Documentation/DMA-attributes.txt
4 +++ b/Documentation/DMA-attributes.txt
5 @@ -156,3 +156,13 @@ accesses to DMA buffers in both privileged "supervisor" and unprivileged
6 subsystem that the buffer is fully accessible at the elevated privilege
7 level (and ideally inaccessible or at least read-only at the
8 lesser-privileged levels).
9 +
10 +DMA_ATTR_PRIVILEGED
11 +-------------------
12 +
13 +Some advanced peripherals such as remote processors and GPUs perform
14 +accesses to DMA buffers in both privileged "supervisor" and unprivileged
15 +"user" modes. This attribute is used to indicate to the DMA-mapping
16 +subsystem that the buffer is fully accessible at the elevated privilege
17 +level (and ideally inaccessible or at least read-only at the
18 +lesser-privileged levels).
19 diff --git a/Documentation/devicetree/bindings/mtd/nand-controller.yaml b/Documentation/devicetree/bindings/mtd/nand-controller.yaml
20 index d261b7096c696..2767f182fd3c5 100644
21 --- a/Documentation/devicetree/bindings/mtd/nand-controller.yaml
22 +++ b/Documentation/devicetree/bindings/mtd/nand-controller.yaml
23 @@ -44,7 +44,7 @@ patternProperties:
24 properties:
25 reg:
26 description:
27 - Contains the native Ready/Busy IDs.
28 + Contains the chip-select IDs.
29
30 nand-ecc-mode:
31 allOf:
32 @@ -139,6 +139,6 @@ examples:
33 nand-ecc-mode = "soft";
34 nand-ecc-algo = "bch";
35
36 - /* controller specific properties */
37 + /* NAND chip specific properties */
38 };
39 };
40 diff --git a/Documentation/devicetree/bindings/spi/spi-mxic.txt b/Documentation/devicetree/bindings/spi/spi-mxic.txt
41 index 529f2dab2648a..7bcbb229b78bb 100644
42 --- a/Documentation/devicetree/bindings/spi/spi-mxic.txt
43 +++ b/Documentation/devicetree/bindings/spi/spi-mxic.txt
44 @@ -8,11 +8,13 @@ Required properties:
45 - reg: should contain 2 entries, one for the registers and one for the direct
46 mapping area
47 - reg-names: should contain "regs" and "dirmap"
48 -- interrupts: interrupt line connected to the SPI controller
49 - clock-names: should contain "ps_clk", "send_clk" and "send_dly_clk"
50 - clocks: should contain 3 entries for the "ps_clk", "send_clk" and
51 "send_dly_clk" clocks
52
53 +Optional properties:
54 +- interrupts: interrupt line connected to the SPI controller
55 +
56 Example:
57
58 spi@43c30000 {
59 diff --git a/Documentation/process/stable-kernel-rules.rst b/Documentation/process/stable-kernel-rules.rst
60 index 06f743b612c48..bb53707f72cc5 100644
61 --- a/Documentation/process/stable-kernel-rules.rst
62 +++ b/Documentation/process/stable-kernel-rules.rst
63 @@ -174,7 +174,16 @@ Trees
64 - The finalized and tagged releases of all stable kernels can be found
65 in separate branches per version at:
66
67 - https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
68 + https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
69 +
70 + - The release candidate of all stable kernel versions can be found at:
71 +
72 + https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git/
73 +
74 + .. warning::
75 + The -stable-rc tree is a snapshot in time of the stable-queue tree and
76 + will change frequently, hence will be rebased often. It should only be
77 + used for testing purposes (e.g. to be consumed by CI systems).
78
79
80 Review committee
81 diff --git a/Documentation/sound/hd-audio/models.rst b/Documentation/sound/hd-audio/models.rst
82 index 0ea967d345838..4c91abad7b35c 100644
83 --- a/Documentation/sound/hd-audio/models.rst
84 +++ b/Documentation/sound/hd-audio/models.rst
85 @@ -261,6 +261,10 @@ alc-sense-combo
86 huawei-mbx-stereo
87 Enable initialization verbs for Huawei MBX stereo speakers;
88 might be risky, try this at your own risk
89 +alc298-samsung-headphone
90 + Samsung laptops with ALC298
91 +alc256-samsung-headphone
92 + Samsung laptops with ALC256
93
94 ALC66x/67x/892
95 ==============
96 diff --git a/Makefile b/Makefile
97 index 8684857148066..cbb71900d3dcf 100644
98 --- a/Makefile
99 +++ b/Makefile
100 @@ -1,7 +1,7 @@
101 # SPDX-License-Identifier: GPL-2.0
102 VERSION = 5
103 PATCHLEVEL = 4
104 -SUBLEVEL = 188
105 +SUBLEVEL = 189
106 EXTRAVERSION =
107 NAME = Kleptomaniac Octopus
108
109 diff --git a/arch/arm/boot/dts/bcm2837.dtsi b/arch/arm/boot/dts/bcm2837.dtsi
110 index beb6c502dadc7..bcad098a7fccb 100644
111 --- a/arch/arm/boot/dts/bcm2837.dtsi
112 +++ b/arch/arm/boot/dts/bcm2837.dtsi
113 @@ -38,12 +38,26 @@
114 #size-cells = <0>;
115 enable-method = "brcm,bcm2836-smp"; // for ARM 32-bit
116
117 + /* Source for d/i-cache-line-size and d/i-cache-sets
118 + * https://developer.arm.com/documentation/ddi0500/e/level-1-memory-system
119 + * /about-the-l1-memory-system?lang=en
120 + *
121 + * Source for d/i-cache-size
122 + * https://magpi.raspberrypi.com/articles/raspberry-pi-3-specs-benchmarks
123 + */
124 cpu0: cpu@0 {
125 device_type = "cpu";
126 compatible = "arm,cortex-a53";
127 reg = <0>;
128 enable-method = "spin-table";
129 cpu-release-addr = <0x0 0x000000d8>;
130 + d-cache-size = <0x8000>;
131 + d-cache-line-size = <64>;
132 + d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
133 + i-cache-size = <0x8000>;
134 + i-cache-line-size = <64>;
135 + i-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set
136 + next-level-cache = <&l2>;
137 };
138
139 cpu1: cpu@1 {
140 @@ -52,6 +66,13 @@
141 reg = <1>;
142 enable-method = "spin-table";
143 cpu-release-addr = <0x0 0x000000e0>;
144 + d-cache-size = <0x8000>;
145 + d-cache-line-size = <64>;
146 + d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
147 + i-cache-size = <0x8000>;
148 + i-cache-line-size = <64>;
149 + i-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set
150 + next-level-cache = <&l2>;
151 };
152
153 cpu2: cpu@2 {
154 @@ -60,6 +81,13 @@
155 reg = <2>;
156 enable-method = "spin-table";
157 cpu-release-addr = <0x0 0x000000e8>;
158 + d-cache-size = <0x8000>;
159 + d-cache-line-size = <64>;
160 + d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
161 + i-cache-size = <0x8000>;
162 + i-cache-line-size = <64>;
163 + i-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set
164 + next-level-cache = <&l2>;
165 };
166
167 cpu3: cpu@3 {
168 @@ -68,6 +96,27 @@
169 reg = <3>;
170 enable-method = "spin-table";
171 cpu-release-addr = <0x0 0x000000f0>;
172 + d-cache-size = <0x8000>;
173 + d-cache-line-size = <64>;
174 + d-cache-sets = <128>; // 32KiB(size)/64(line-size)=512ways/4-way set
175 + i-cache-size = <0x8000>;
176 + i-cache-line-size = <64>;
177 + i-cache-sets = <256>; // 32KiB(size)/64(line-size)=512ways/2-way set
178 + next-level-cache = <&l2>;
179 + };
180 +
181 + /* Source for cache-line-size + cache-sets
182 + * https://developer.arm.com/documentation/ddi0500
183 + * /e/level-2-memory-system/about-the-l2-memory-system?lang=en
184 + * Source for cache-size
185 + * https://datasheets.raspberrypi.com/cm/cm1-and-cm3-datasheet.pdf
186 + */
187 + l2: l2-cache0 {
188 + compatible = "cache";
189 + cache-size = <0x80000>;
190 + cache-line-size = <64>;
191 + cache-sets = <512>; // 512KiB(size)/64(line-size)=8192ways/16-way set
192 + cache-level = <2>;
193 };
194 };
195 };
196 diff --git a/arch/arm/boot/dts/exynos5250-pinctrl.dtsi b/arch/arm/boot/dts/exynos5250-pinctrl.dtsi
197 index d31a68672bfac..d7d756614edd1 100644
198 --- a/arch/arm/boot/dts/exynos5250-pinctrl.dtsi
199 +++ b/arch/arm/boot/dts/exynos5250-pinctrl.dtsi
200 @@ -260,7 +260,7 @@
201 };
202
203 uart3_data: uart3-data {
204 - samsung,pins = "gpa1-4", "gpa1-4";
205 + samsung,pins = "gpa1-4", "gpa1-5";
206 samsung,pin-function = <EXYNOS_PIN_FUNC_2>;
207 samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
208 samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
209 diff --git a/arch/arm/boot/dts/exynos5250-smdk5250.dts b/arch/arm/boot/dts/exynos5250-smdk5250.dts
210 index 70a2b6e2ad3fa..fa5dd992e3273 100644
211 --- a/arch/arm/boot/dts/exynos5250-smdk5250.dts
212 +++ b/arch/arm/boot/dts/exynos5250-smdk5250.dts
213 @@ -117,6 +117,9 @@
214 status = "okay";
215 ddc = <&i2c_2>;
216 hpd-gpios = <&gpx3 7 GPIO_ACTIVE_HIGH>;
217 + vdd-supply = <&ldo8_reg>;
218 + vdd_osc-supply = <&ldo10_reg>;
219 + vdd_pll-supply = <&ldo8_reg>;
220 };
221
222 &i2c_0 {
223 diff --git a/arch/arm/boot/dts/exynos5420-smdk5420.dts b/arch/arm/boot/dts/exynos5420-smdk5420.dts
224 index 8240e51869729..fb92d87d8dedc 100644
225 --- a/arch/arm/boot/dts/exynos5420-smdk5420.dts
226 +++ b/arch/arm/boot/dts/exynos5420-smdk5420.dts
227 @@ -132,6 +132,9 @@
228 hpd-gpios = <&gpx3 7 GPIO_ACTIVE_HIGH>;
229 pinctrl-names = "default";
230 pinctrl-0 = <&hdmi_hpd_irq>;
231 + vdd-supply = <&ldo6_reg>;
232 + vdd_osc-supply = <&ldo7_reg>;
233 + vdd_pll-supply = <&ldo6_reg>;
234 };
235
236 &hsi2c_4 {
237 diff --git a/arch/arm/boot/dts/imx53-m53menlo.dts b/arch/arm/boot/dts/imx53-m53menlo.dts
238 index 03c43c1912a7e..d002c8f738b53 100644
239 --- a/arch/arm/boot/dts/imx53-m53menlo.dts
240 +++ b/arch/arm/boot/dts/imx53-m53menlo.dts
241 @@ -53,6 +53,31 @@
242 };
243 };
244
245 + lvds-decoder {
246 + compatible = "ti,ds90cf364a", "lvds-decoder";
247 +
248 + ports {
249 + #address-cells = <1>;
250 + #size-cells = <0>;
251 +
252 + port@0 {
253 + reg = <0>;
254 +
255 + lvds_decoder_in: endpoint {
256 + remote-endpoint = <&lvds0_out>;
257 + };
258 + };
259 +
260 + port@1 {
261 + reg = <1>;
262 +
263 + lvds_decoder_out: endpoint {
264 + remote-endpoint = <&panel_in>;
265 + };
266 + };
267 + };
268 + };
269 +
270 panel {
271 compatible = "edt,etm0700g0dh6";
272 pinctrl-0 = <&pinctrl_display_gpio>;
273 @@ -61,7 +86,7 @@
274
275 port {
276 panel_in: endpoint {
277 - remote-endpoint = <&lvds0_out>;
278 + remote-endpoint = <&lvds_decoder_out>;
279 };
280 };
281 };
282 @@ -450,7 +475,7 @@
283 reg = <2>;
284
285 lvds0_out: endpoint {
286 - remote-endpoint = <&panel_in>;
287 + remote-endpoint = <&lvds_decoder_in>;
288 };
289 };
290 };
291 diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi
292 index 56f51599852d0..338256c59ca5a 100644
293 --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
294 +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
295 @@ -141,7 +141,8 @@
296 clocks {
297 sleep_clk: sleep_clk {
298 compatible = "fixed-clock";
299 - clock-frequency = <32768>;
300 + clock-frequency = <32000>;
301 + clock-output-names = "gcc_sleep_clk_src";
302 #clock-cells = <0>;
303 };
304
305 diff --git a/arch/arm/boot/dts/qcom-msm8960.dtsi b/arch/arm/boot/dts/qcom-msm8960.dtsi
306 index f2aeaccdc1ad6..15ff0e8fd0d30 100644
307 --- a/arch/arm/boot/dts/qcom-msm8960.dtsi
308 +++ b/arch/arm/boot/dts/qcom-msm8960.dtsi
309 @@ -145,7 +145,9 @@
310 reg = <0x108000 0x1000>;
311 qcom,ipc = <&l2cc 0x8 2>;
312
313 - interrupts = <0 19 0>, <0 21 0>, <0 22 0>;
314 + interrupts = <GIC_SPI 19 IRQ_TYPE_EDGE_RISING>,
315 + <GIC_SPI 21 IRQ_TYPE_EDGE_RISING>,
316 + <GIC_SPI 22 IRQ_TYPE_EDGE_RISING>;
317 interrupt-names = "ack", "err", "wakeup";
318
319 regulators {
320 @@ -191,7 +193,7 @@
321 compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm";
322 reg = <0x16440000 0x1000>,
323 <0x16400000 0x1000>;
324 - interrupts = <0 154 0x0>;
325 + interrupts = <GIC_SPI 154 IRQ_TYPE_LEVEL_HIGH>;
326 clocks = <&gcc GSBI5_UART_CLK>, <&gcc GSBI5_H_CLK>;
327 clock-names = "core", "iface";
328 status = "disabled";
329 @@ -317,7 +319,7 @@
330 #address-cells = <1>;
331 #size-cells = <0>;
332 reg = <0x16080000 0x1000>;
333 - interrupts = <0 147 0>;
334 + interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>;
335 spi-max-frequency = <24000000>;
336 cs-gpios = <&msmgpio 8 0>;
337
338 diff --git a/arch/arm/boot/dts/sama5d2.dtsi b/arch/arm/boot/dts/sama5d2.dtsi
339 index b05bab57f90a3..09816a2ee3670 100644
340 --- a/arch/arm/boot/dts/sama5d2.dtsi
341 +++ b/arch/arm/boot/dts/sama5d2.dtsi
342 @@ -526,7 +526,7 @@
343 pmecc: ecc-engine@f8014070 {
344 compatible = "atmel,sama5d2-pmecc";
345 reg = <0xf8014070 0x490>,
346 - <0xf8014500 0x100>;
347 + <0xf8014500 0x200>;
348 };
349 };
350
351 diff --git a/arch/arm/boot/dts/spear1340.dtsi b/arch/arm/boot/dts/spear1340.dtsi
352 index 1a8f5e8b10e3a..66cd473ecb617 100644
353 --- a/arch/arm/boot/dts/spear1340.dtsi
354 +++ b/arch/arm/boot/dts/spear1340.dtsi
355 @@ -136,9 +136,9 @@
356 reg = <0xb4100000 0x1000>;
357 interrupts = <0 105 0x4>;
358 status = "disabled";
359 - dmas = <&dwdma0 12 0 1>,
360 - <&dwdma0 13 1 0>;
361 - dma-names = "tx", "rx";
362 + dmas = <&dwdma0 13 0 1>,
363 + <&dwdma0 12 1 0>;
364 + dma-names = "rx", "tx";
365 };
366
367 thermal@e07008c4 {
368 diff --git a/arch/arm/boot/dts/spear13xx.dtsi b/arch/arm/boot/dts/spear13xx.dtsi
369 index f187da4485f46..78672db9068be 100644
370 --- a/arch/arm/boot/dts/spear13xx.dtsi
371 +++ b/arch/arm/boot/dts/spear13xx.dtsi
372 @@ -284,9 +284,9 @@
373 #size-cells = <0>;
374 interrupts = <0 31 0x4>;
375 status = "disabled";
376 - dmas = <&dwdma0 4 0 0>,
377 - <&dwdma0 5 0 0>;
378 - dma-names = "tx", "rx";
379 + dmas = <&dwdma0 5 0 0>,
380 + <&dwdma0 4 0 0>;
381 + dma-names = "rx", "tx";
382 };
383
384 rtc@e0580000 {
385 diff --git a/arch/arm/boot/dts/tegra20-tamonten.dtsi b/arch/arm/boot/dts/tegra20-tamonten.dtsi
386 index 394a6b4dc69d5..69cb65d86c467 100644
387 --- a/arch/arm/boot/dts/tegra20-tamonten.dtsi
388 +++ b/arch/arm/boot/dts/tegra20-tamonten.dtsi
389 @@ -183,8 +183,8 @@
390 };
391 conf_ata {
392 nvidia,pins = "ata", "atb", "atc", "atd", "ate",
393 - "cdev1", "cdev2", "dap1", "dtb", "gma",
394 - "gmb", "gmc", "gmd", "gme", "gpu7",
395 + "cdev1", "cdev2", "dap1", "dtb", "dtf",
396 + "gma", "gmb", "gmc", "gmd", "gme", "gpu7",
397 "gpv", "i2cp", "irrx", "irtx", "pta",
398 "rm", "slxa", "slxk", "spia", "spib",
399 "uac";
400 @@ -203,7 +203,7 @@
401 };
402 conf_crtp {
403 nvidia,pins = "crtp", "dap2", "dap3", "dap4",
404 - "dtc", "dte", "dtf", "gpu", "sdio1",
405 + "dtc", "dte", "gpu", "sdio1",
406 "slxc", "slxd", "spdi", "spdo", "spig",
407 "uda";
408 nvidia,pull = <TEGRA_PIN_PULL_NONE>;
409 diff --git a/arch/arm/mach-iop32x/include/mach/entry-macro.S b/arch/arm/mach-iop32x/include/mach/entry-macro.S
410 index 8e6766d4621eb..341e5d9a6616d 100644
411 --- a/arch/arm/mach-iop32x/include/mach/entry-macro.S
412 +++ b/arch/arm/mach-iop32x/include/mach/entry-macro.S
413 @@ -20,7 +20,7 @@
414 mrc p6, 0, \irqstat, c8, c0, 0 @ Read IINTSRC
415 cmp \irqstat, #0
416 clzne \irqnr, \irqstat
417 - rsbne \irqnr, \irqnr, #31
418 + rsbne \irqnr, \irqnr, #32
419 .endm
420
421 .macro arch_ret_to_user, tmp1, tmp2
422 diff --git a/arch/arm/mach-iop32x/include/mach/irqs.h b/arch/arm/mach-iop32x/include/mach/irqs.h
423 index c4e78df428e86..e09ae5f48aec5 100644
424 --- a/arch/arm/mach-iop32x/include/mach/irqs.h
425 +++ b/arch/arm/mach-iop32x/include/mach/irqs.h
426 @@ -9,6 +9,6 @@
427 #ifndef __IRQS_H
428 #define __IRQS_H
429
430 -#define NR_IRQS 32
431 +#define NR_IRQS 33
432
433 #endif
434 diff --git a/arch/arm/mach-iop32x/irq.c b/arch/arm/mach-iop32x/irq.c
435 index 2d48bf1398c10..d1e8824cbd824 100644
436 --- a/arch/arm/mach-iop32x/irq.c
437 +++ b/arch/arm/mach-iop32x/irq.c
438 @@ -32,14 +32,14 @@ static void intstr_write(u32 val)
439 static void
440 iop32x_irq_mask(struct irq_data *d)
441 {
442 - iop32x_mask &= ~(1 << d->irq);
443 + iop32x_mask &= ~(1 << (d->irq - 1));
444 intctl_write(iop32x_mask);
445 }
446
447 static void
448 iop32x_irq_unmask(struct irq_data *d)
449 {
450 - iop32x_mask |= 1 << d->irq;
451 + iop32x_mask |= 1 << (d->irq - 1);
452 intctl_write(iop32x_mask);
453 }
454
455 @@ -65,7 +65,7 @@ void __init iop32x_init_irq(void)
456 machine_is_em7210())
457 *IOP3XX_PCIIRSR = 0x0f;
458
459 - for (i = 0; i < NR_IRQS; i++) {
460 + for (i = 1; i < NR_IRQS; i++) {
461 irq_set_chip_and_handler(i, &ext_chip, handle_level_irq);
462 irq_clear_status_flags(i, IRQ_NOREQUEST | IRQ_NOPROBE);
463 }
464 diff --git a/arch/arm/mach-iop32x/irqs.h b/arch/arm/mach-iop32x/irqs.h
465 index 69858e4e905d1..e1dfc8b4e7d7e 100644
466 --- a/arch/arm/mach-iop32x/irqs.h
467 +++ b/arch/arm/mach-iop32x/irqs.h
468 @@ -7,36 +7,40 @@
469 #ifndef __IOP32X_IRQS_H
470 #define __IOP32X_IRQS_H
471
472 +/* Interrupts in Linux start at 1, hardware starts at 0 */
473 +
474 +#define IOP_IRQ(x) ((x) + 1)
475 +
476 /*
477 * IOP80321 chipset interrupts
478 */
479 -#define IRQ_IOP32X_DMA0_EOT 0
480 -#define IRQ_IOP32X_DMA0_EOC 1
481 -#define IRQ_IOP32X_DMA1_EOT 2
482 -#define IRQ_IOP32X_DMA1_EOC 3
483 -#define IRQ_IOP32X_AA_EOT 6
484 -#define IRQ_IOP32X_AA_EOC 7
485 -#define IRQ_IOP32X_CORE_PMON 8
486 -#define IRQ_IOP32X_TIMER0 9
487 -#define IRQ_IOP32X_TIMER1 10
488 -#define IRQ_IOP32X_I2C_0 11
489 -#define IRQ_IOP32X_I2C_1 12
490 -#define IRQ_IOP32X_MESSAGING 13
491 -#define IRQ_IOP32X_ATU_BIST 14
492 -#define IRQ_IOP32X_PERFMON 15
493 -#define IRQ_IOP32X_CORE_PMU 16
494 -#define IRQ_IOP32X_BIU_ERR 17
495 -#define IRQ_IOP32X_ATU_ERR 18
496 -#define IRQ_IOP32X_MCU_ERR 19
497 -#define IRQ_IOP32X_DMA0_ERR 20
498 -#define IRQ_IOP32X_DMA1_ERR 21
499 -#define IRQ_IOP32X_AA_ERR 23
500 -#define IRQ_IOP32X_MSG_ERR 24
501 -#define IRQ_IOP32X_SSP 25
502 -#define IRQ_IOP32X_XINT0 27
503 -#define IRQ_IOP32X_XINT1 28
504 -#define IRQ_IOP32X_XINT2 29
505 -#define IRQ_IOP32X_XINT3 30
506 -#define IRQ_IOP32X_HPI 31
507 +#define IRQ_IOP32X_DMA0_EOT IOP_IRQ(0)
508 +#define IRQ_IOP32X_DMA0_EOC IOP_IRQ(1)
509 +#define IRQ_IOP32X_DMA1_EOT IOP_IRQ(2)
510 +#define IRQ_IOP32X_DMA1_EOC IOP_IRQ(3)
511 +#define IRQ_IOP32X_AA_EOT IOP_IRQ(6)
512 +#define IRQ_IOP32X_AA_EOC IOP_IRQ(7)
513 +#define IRQ_IOP32X_CORE_PMON IOP_IRQ(8)
514 +#define IRQ_IOP32X_TIMER0 IOP_IRQ(9)
515 +#define IRQ_IOP32X_TIMER1 IOP_IRQ(10)
516 +#define IRQ_IOP32X_I2C_0 IOP_IRQ(11)
517 +#define IRQ_IOP32X_I2C_1 IOP_IRQ(12)
518 +#define IRQ_IOP32X_MESSAGING IOP_IRQ(13)
519 +#define IRQ_IOP32X_ATU_BIST IOP_IRQ(14)
520 +#define IRQ_IOP32X_PERFMON IOP_IRQ(15)
521 +#define IRQ_IOP32X_CORE_PMU IOP_IRQ(16)
522 +#define IRQ_IOP32X_BIU_ERR IOP_IRQ(17)
523 +#define IRQ_IOP32X_ATU_ERR IOP_IRQ(18)
524 +#define IRQ_IOP32X_MCU_ERR IOP_IRQ(19)
525 +#define IRQ_IOP32X_DMA0_ERR IOP_IRQ(20)
526 +#define IRQ_IOP32X_DMA1_ERR IOP_IRQ(21)
527 +#define IRQ_IOP32X_AA_ERR IOP_IRQ(23)
528 +#define IRQ_IOP32X_MSG_ERR IOP_IRQ(24)
529 +#define IRQ_IOP32X_SSP IOP_IRQ(25)
530 +#define IRQ_IOP32X_XINT0 IOP_IRQ(27)
531 +#define IRQ_IOP32X_XINT1 IOP_IRQ(28)
532 +#define IRQ_IOP32X_XINT2 IOP_IRQ(29)
533 +#define IRQ_IOP32X_XINT3 IOP_IRQ(30)
534 +#define IRQ_IOP32X_HPI IOP_IRQ(31)
535
536 #endif
537 diff --git a/arch/arm/mach-mmp/sram.c b/arch/arm/mach-mmp/sram.c
538 index 6794e2db1ad5f..ecc46c31004f6 100644
539 --- a/arch/arm/mach-mmp/sram.c
540 +++ b/arch/arm/mach-mmp/sram.c
541 @@ -72,6 +72,8 @@ static int sram_probe(struct platform_device *pdev)
542 if (!info)
543 return -ENOMEM;
544
545 + platform_set_drvdata(pdev, info);
546 +
547 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
548 if (res == NULL) {
549 dev_err(&pdev->dev, "no memory resource defined\n");
550 @@ -107,8 +109,6 @@ static int sram_probe(struct platform_device *pdev)
551 list_add(&info->node, &sram_bank_list);
552 mutex_unlock(&sram_lock);
553
554 - platform_set_drvdata(pdev, info);
555 -
556 dev_info(&pdev->dev, "initialized\n");
557 return 0;
558
559 @@ -127,17 +127,19 @@ static int sram_remove(struct platform_device *pdev)
560 struct sram_bank_info *info;
561
562 info = platform_get_drvdata(pdev);
563 - if (info == NULL)
564 - return -ENODEV;
565
566 - mutex_lock(&sram_lock);
567 - list_del(&info->node);
568 - mutex_unlock(&sram_lock);
569 + if (info->sram_size) {
570 + mutex_lock(&sram_lock);
571 + list_del(&info->node);
572 + mutex_unlock(&sram_lock);
573 +
574 + gen_pool_destroy(info->gpool);
575 + iounmap(info->sram_virt);
576 + kfree(info->pool_name);
577 + }
578
579 - gen_pool_destroy(info->gpool);
580 - iounmap(info->sram_virt);
581 - kfree(info->pool_name);
582 kfree(info);
583 +
584 return 0;
585 }
586
587 diff --git a/arch/arm/mach-s3c24xx/mach-jive.c b/arch/arm/mach-s3c24xx/mach-jive.c
588 index 885e8f12e4b91..eedc9f8ed2109 100644
589 --- a/arch/arm/mach-s3c24xx/mach-jive.c
590 +++ b/arch/arm/mach-s3c24xx/mach-jive.c
591 @@ -237,11 +237,11 @@ static int __init jive_mtdset(char *options)
592 unsigned long set;
593
594 if (options == NULL || options[0] == '\0')
595 - return 0;
596 + return 1;
597
598 if (kstrtoul(options, 10, &set)) {
599 printk(KERN_ERR "failed to parse mtdset=%s\n", options);
600 - return 0;
601 + return 1;
602 }
603
604 switch (set) {
605 @@ -256,7 +256,7 @@ static int __init jive_mtdset(char *options)
606 "using default.", set);
607 }
608
609 - return 0;
610 + return 1;
611 }
612
613 /* parse the mtdset= option given to the kernel command line */
614 diff --git a/arch/arm64/boot/dts/broadcom/northstar2/ns2-svk.dts b/arch/arm64/boot/dts/broadcom/northstar2/ns2-svk.dts
615 index ec19fbf928a14..12a4b1c03390c 100644
616 --- a/arch/arm64/boot/dts/broadcom/northstar2/ns2-svk.dts
617 +++ b/arch/arm64/boot/dts/broadcom/northstar2/ns2-svk.dts
618 @@ -111,8 +111,8 @@
619 compatible = "silabs,si3226x";
620 reg = <0>;
621 spi-max-frequency = <5000000>;
622 - spi-cpha = <1>;
623 - spi-cpol = <1>;
624 + spi-cpha;
625 + spi-cpol;
626 pl022,hierarchy = <0>;
627 pl022,interface = <0>;
628 pl022,slave-tx-disable = <0>;
629 @@ -135,8 +135,8 @@
630 at25,byte-len = <0x8000>;
631 at25,addr-mode = <2>;
632 at25,page-size = <64>;
633 - spi-cpha = <1>;
634 - spi-cpol = <1>;
635 + spi-cpha;
636 + spi-cpol;
637 pl022,hierarchy = <0>;
638 pl022,interface = <0>;
639 pl022,slave-tx-disable = <0>;
640 diff --git a/arch/arm64/boot/dts/broadcom/northstar2/ns2.dtsi b/arch/arm64/boot/dts/broadcom/northstar2/ns2.dtsi
641 index 39802066232e1..edc1a8a4c4bc0 100644
642 --- a/arch/arm64/boot/dts/broadcom/northstar2/ns2.dtsi
643 +++ b/arch/arm64/boot/dts/broadcom/northstar2/ns2.dtsi
644 @@ -687,7 +687,7 @@
645 };
646 };
647
648 - sata: ahci@663f2000 {
649 + sata: sata@663f2000 {
650 compatible = "brcm,iproc-ahci", "generic-ahci";
651 reg = <0x663f2000 0x1000>;
652 dma-coherent;
653 diff --git a/arch/arm64/boot/dts/qcom/sm8150.dtsi b/arch/arm64/boot/dts/qcom/sm8150.dtsi
654 index 9573da378826b..1954cef8c6f0b 100644
655 --- a/arch/arm64/boot/dts/qcom/sm8150.dtsi
656 +++ b/arch/arm64/boot/dts/qcom/sm8150.dtsi
657 @@ -459,9 +459,9 @@
658 qcom,tcs-offset = <0xd00>;
659 qcom,drv-id = <2>;
660 qcom,tcs-config = <ACTIVE_TCS 2>,
661 - <SLEEP_TCS 1>,
662 - <WAKE_TCS 1>,
663 - <CONTROL_TCS 0>;
664 + <SLEEP_TCS 3>,
665 + <WAKE_TCS 3>,
666 + <CONTROL_TCS 1>;
667
668 rpmhcc: clock-controller {
669 compatible = "qcom,sm8150-rpmh-clk";
670 diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts
671 index 76f5db696009b..5b7e8fbf1ffec 100644
672 --- a/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts
673 +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts
674 @@ -666,8 +666,8 @@
675 sd-uhs-sdr104;
676
677 /* Power supply */
678 - vqmmc-supply = &vcc1v8_s3; /* IO line */
679 - vmmc-supply = &vcc_sdio; /* card's power */
680 + vqmmc-supply = <&vcc1v8_s3>; /* IO line */
681 + vmmc-supply = <&vcc_sdio>; /* card's power */
682
683 #address-cells = <1>;
684 #size-cells = <0>;
685 diff --git a/arch/arm64/include/asm/kvm_mmu.h b/arch/arm64/include/asm/kvm_mmu.h
686 index 78d110667c0c7..ffe0aad96b17b 100644
687 --- a/arch/arm64/include/asm/kvm_mmu.h
688 +++ b/arch/arm64/include/asm/kvm_mmu.h
689 @@ -479,7 +479,8 @@ static inline void *kvm_get_hyp_vector(void)
690 int slot = -1;
691
692 if ((cpus_have_const_cap(ARM64_HARDEN_BRANCH_PREDICTOR) ||
693 - cpus_have_const_cap(ARM64_SPECTRE_BHB)) && data->template_start) {
694 + cpus_have_const_cap(ARM64_SPECTRE_BHB)) &&
695 + data && data->template_start) {
696 vect = kern_hyp_va(kvm_ksym_ref(__bp_harden_hyp_vecs_start));
697 slot = data->hyp_vectors_slot;
698 }
699 diff --git a/arch/arm64/kernel/cpuidle.c b/arch/arm64/kernel/cpuidle.c
700 index e4d6af2fdec71..5397f0d9e5bbb 100644
701 --- a/arch/arm64/kernel/cpuidle.c
702 +++ b/arch/arm64/kernel/cpuidle.c
703 @@ -53,6 +53,9 @@ static int psci_acpi_cpu_init_idle(unsigned int cpu)
704 struct acpi_lpi_state *lpi;
705 struct acpi_processor *pr = per_cpu(processors, cpu);
706
707 + if (unlikely(!pr || !pr->flags.has_lpi))
708 + return -EINVAL;
709 +
710 /*
711 * If the PSCI cpu_suspend function hook has not been initialized
712 * idle states must not be enabled, so bail out
713 @@ -60,9 +63,6 @@ static int psci_acpi_cpu_init_idle(unsigned int cpu)
714 if (!psci_ops.cpu_suspend)
715 return -EOPNOTSUPP;
716
717 - if (unlikely(!pr || !pr->flags.has_lpi))
718 - return -EINVAL;
719 -
720 count = pr->power.count - 1;
721 if (count <= 0)
722 return -ENODEV;
723 diff --git a/arch/arm64/kernel/insn.c b/arch/arm64/kernel/insn.c
724 index 53bcf5386907f..a02c294a47530 100644
725 --- a/arch/arm64/kernel/insn.c
726 +++ b/arch/arm64/kernel/insn.c
727 @@ -207,8 +207,8 @@ static int __kprobes aarch64_insn_patch_text_cb(void *arg)
728 int i, ret = 0;
729 struct aarch64_insn_patch *pp = arg;
730
731 - /* The first CPU becomes master */
732 - if (atomic_inc_return(&pp->cpu_count) == 1) {
733 + /* The last CPU becomes master */
734 + if (atomic_inc_return(&pp->cpu_count) == num_online_cpus()) {
735 for (i = 0; ret == 0 && i < pp->insn_cnt; i++)
736 ret = aarch64_insn_patch_text_nosync(pp->text_addrs[i],
737 pp->new_insns[i]);
738 diff --git a/arch/arm64/kernel/module.lds b/arch/arm64/kernel/module.lds
739 index 09a0eef71d12b..9371abe2f4c2d 100644
740 --- a/arch/arm64/kernel/module.lds
741 +++ b/arch/arm64/kernel/module.lds
742 @@ -1,5 +1,5 @@
743 SECTIONS {
744 - .plt 0 (NOLOAD) : { BYTE(0) }
745 - .init.plt 0 (NOLOAD) : { BYTE(0) }
746 - .text.ftrace_trampoline 0 (NOLOAD) : { BYTE(0) }
747 + .plt 0 : { BYTE(0) }
748 + .init.plt 0 : { BYTE(0) }
749 + .text.ftrace_trampoline 0 : { BYTE(0) }
750 }
751 diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
752 index a343677837c77..17a8d1484f9b9 100644
753 --- a/arch/arm64/net/bpf_jit_comp.c
754 +++ b/arch/arm64/net/bpf_jit_comp.c
755 @@ -909,15 +909,18 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
756 goto out_off;
757 }
758
759 - /* 1. Initial fake pass to compute ctx->idx. */
760 -
761 - /* Fake pass to fill in ctx->offset. */
762 - if (build_body(&ctx, extra_pass)) {
763 + /*
764 + * 1. Initial fake pass to compute ctx->idx and ctx->offset.
765 + *
766 + * BPF line info needs ctx->offset[i] to be the offset of
767 + * instruction[i] in jited image, so build prologue first.
768 + */
769 + if (build_prologue(&ctx, was_classic)) {
770 prog = orig_prog;
771 goto out_off;
772 }
773
774 - if (build_prologue(&ctx, was_classic)) {
775 + if (build_body(&ctx, extra_pass)) {
776 prog = orig_prog;
777 goto out_off;
778 }
779 @@ -983,6 +986,11 @@ skip_init_ctx:
780 prog->jited_len = image_size;
781
782 if (!prog->is_func || extra_pass) {
783 + int i;
784 +
785 + /* offset[prog->len] is the size of program */
786 + for (i = 0; i <= prog->len; i++)
787 + ctx.offset[i] *= AARCH64_INSN_SIZE;
788 bpf_prog_fill_jited_linfo(prog, ctx.offset + 1);
789 out_off:
790 kfree(ctx.offset);
791 diff --git a/arch/microblaze/include/asm/uaccess.h b/arch/microblaze/include/asm/uaccess.h
792 index a1f206b90753a..c8cd66c8d2577 100644
793 --- a/arch/microblaze/include/asm/uaccess.h
794 +++ b/arch/microblaze/include/asm/uaccess.h
795 @@ -171,27 +171,27 @@ extern long __user_bad(void);
796
797 #define __get_user(x, ptr) \
798 ({ \
799 - unsigned long __gu_val = 0; \
800 long __gu_err; \
801 switch (sizeof(*(ptr))) { \
802 case 1: \
803 - __get_user_asm("lbu", (ptr), __gu_val, __gu_err); \
804 + __get_user_asm("lbu", (ptr), x, __gu_err); \
805 break; \
806 case 2: \
807 - __get_user_asm("lhu", (ptr), __gu_val, __gu_err); \
808 + __get_user_asm("lhu", (ptr), x, __gu_err); \
809 break; \
810 case 4: \
811 - __get_user_asm("lw", (ptr), __gu_val, __gu_err); \
812 + __get_user_asm("lw", (ptr), x, __gu_err); \
813 break; \
814 - case 8: \
815 - __gu_err = __copy_from_user(&__gu_val, ptr, 8); \
816 - if (__gu_err) \
817 - __gu_err = -EFAULT; \
818 + case 8: { \
819 + __u64 __x = 0; \
820 + __gu_err = raw_copy_from_user(&__x, ptr, 8) ? \
821 + -EFAULT : 0; \
822 + (x) = (typeof(x))(typeof((x) - (x)))__x; \
823 break; \
824 + } \
825 default: \
826 /* __gu_val = 0; __gu_err = -EINVAL;*/ __gu_err = __user_bad();\
827 } \
828 - x = (__force __typeof__(*(ptr))) __gu_val; \
829 __gu_err; \
830 })
831
832 diff --git a/arch/mips/dec/int-handler.S b/arch/mips/dec/int-handler.S
833 index a25ef822e7250..5ed38e6180190 100644
834 --- a/arch/mips/dec/int-handler.S
835 +++ b/arch/mips/dec/int-handler.S
836 @@ -131,7 +131,7 @@
837 */
838 mfc0 t0,CP0_CAUSE # get pending interrupts
839 mfc0 t1,CP0_STATUS
840 -#ifdef CONFIG_32BIT
841 +#if defined(CONFIG_32BIT) && defined(CONFIG_MIPS_FP_SUPPORT)
842 lw t2,cpu_fpu_mask
843 #endif
844 andi t0,ST0_IM # CAUSE.CE may be non-zero!
845 @@ -139,7 +139,7 @@
846
847 beqz t0,spurious
848
849 -#ifdef CONFIG_32BIT
850 +#if defined(CONFIG_32BIT) && defined(CONFIG_MIPS_FP_SUPPORT)
851 and t2,t0
852 bnez t2,fpu # handle FPU immediately
853 #endif
854 @@ -280,7 +280,7 @@ handle_it:
855 j dec_irq_dispatch
856 nop
857
858 -#ifdef CONFIG_32BIT
859 +#if defined(CONFIG_32BIT) && defined(CONFIG_MIPS_FP_SUPPORT)
860 fpu:
861 lw t0,fpu_kstat_irq
862 nop
863 diff --git a/arch/mips/dec/prom/Makefile b/arch/mips/dec/prom/Makefile
864 index d95016016b42b..2bad87551203b 100644
865 --- a/arch/mips/dec/prom/Makefile
866 +++ b/arch/mips/dec/prom/Makefile
867 @@ -6,4 +6,4 @@
868
869 lib-y += init.o memory.o cmdline.o identify.o console.o
870
871 -lib-$(CONFIG_32BIT) += locore.o
872 +lib-$(CONFIG_CPU_R3000) += locore.o
873 diff --git a/arch/mips/dec/setup.c b/arch/mips/dec/setup.c
874 index 1fc8dffa8d1d0..649b50ae5b1e3 100644
875 --- a/arch/mips/dec/setup.c
876 +++ b/arch/mips/dec/setup.c
877 @@ -766,7 +766,8 @@ void __init arch_init_irq(void)
878 dec_interrupt[DEC_IRQ_HALT] = -1;
879
880 /* Register board interrupts: FPU and cascade. */
881 - if (dec_interrupt[DEC_IRQ_FPU] >= 0 && cpu_has_fpu) {
882 + if (IS_ENABLED(CONFIG_MIPS_FP_SUPPORT) &&
883 + dec_interrupt[DEC_IRQ_FPU] >= 0 && cpu_has_fpu) {
884 struct irq_desc *desc_fpu;
885 int irq_fpu;
886
887 diff --git a/arch/mips/include/asm/dec/prom.h b/arch/mips/include/asm/dec/prom.h
888 index 62c7dfb90e06c..1e1247add1cf8 100644
889 --- a/arch/mips/include/asm/dec/prom.h
890 +++ b/arch/mips/include/asm/dec/prom.h
891 @@ -43,16 +43,11 @@
892 */
893 #define REX_PROM_MAGIC 0x30464354
894
895 -#ifdef CONFIG_64BIT
896 -
897 -#define prom_is_rex(magic) 1 /* KN04 and KN05 are REX PROMs. */
898 -
899 -#else /* !CONFIG_64BIT */
900 -
901 -#define prom_is_rex(magic) ((magic) == REX_PROM_MAGIC)
902 -
903 -#endif /* !CONFIG_64BIT */
904 -
905 +/* KN04 and KN05 are REX PROMs, so only do the check for R3k systems. */
906 +static inline bool prom_is_rex(u32 magic)
907 +{
908 + return !IS_ENABLED(CONFIG_CPU_R3000) || magic == REX_PROM_MAGIC;
909 +}
910
911 /*
912 * 3MIN/MAXINE PROM entry points for DS5000/1xx's, DS5000/xx's and
913 diff --git a/arch/mips/include/asm/setup.h b/arch/mips/include/asm/setup.h
914 index bb36a400203df..8c56b862fd9c2 100644
915 --- a/arch/mips/include/asm/setup.h
916 +++ b/arch/mips/include/asm/setup.h
917 @@ -16,7 +16,7 @@ static inline void setup_8250_early_printk_port(unsigned long base,
918 unsigned int reg_shift, unsigned int timeout) {}
919 #endif
920
921 -extern void set_handler(unsigned long offset, void *addr, unsigned long len);
922 +void set_handler(unsigned long offset, const void *addr, unsigned long len);
923 extern void set_uncached_handler(unsigned long offset, void *addr, unsigned long len);
924
925 typedef void (*vi_handler_t)(void);
926 diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
927 index 8282d0feb0b21..749089c25d5e6 100644
928 --- a/arch/mips/kernel/traps.c
929 +++ b/arch/mips/kernel/traps.c
930 @@ -2020,19 +2020,19 @@ static void *set_vi_srs_handler(int n, vi_handler_t addr, int srs)
931 * If no shadow set is selected then use the default handler
932 * that does normal register saving and standard interrupt exit
933 */
934 - extern char except_vec_vi, except_vec_vi_lui;
935 - extern char except_vec_vi_ori, except_vec_vi_end;
936 - extern char rollback_except_vec_vi;
937 - char *vec_start = using_rollback_handler() ?
938 - &rollback_except_vec_vi : &except_vec_vi;
939 + extern const u8 except_vec_vi[], except_vec_vi_lui[];
940 + extern const u8 except_vec_vi_ori[], except_vec_vi_end[];
941 + extern const u8 rollback_except_vec_vi[];
942 + const u8 *vec_start = using_rollback_handler() ?
943 + rollback_except_vec_vi : except_vec_vi;
944 #if defined(CONFIG_CPU_MICROMIPS) || defined(CONFIG_CPU_BIG_ENDIAN)
945 - const int lui_offset = &except_vec_vi_lui - vec_start + 2;
946 - const int ori_offset = &except_vec_vi_ori - vec_start + 2;
947 + const int lui_offset = except_vec_vi_lui - vec_start + 2;
948 + const int ori_offset = except_vec_vi_ori - vec_start + 2;
949 #else
950 - const int lui_offset = &except_vec_vi_lui - vec_start;
951 - const int ori_offset = &except_vec_vi_ori - vec_start;
952 + const int lui_offset = except_vec_vi_lui - vec_start;
953 + const int ori_offset = except_vec_vi_ori - vec_start;
954 #endif
955 - const int handler_len = &except_vec_vi_end - vec_start;
956 + const int handler_len = except_vec_vi_end - vec_start;
957
958 if (handler_len > VECTORSPACING) {
959 /*
960 @@ -2240,7 +2240,7 @@ void per_cpu_trap_init(bool is_boot_cpu)
961 }
962
963 /* Install CPU exception handler */
964 -void set_handler(unsigned long offset, void *addr, unsigned long size)
965 +void set_handler(unsigned long offset, const void *addr, unsigned long size)
966 {
967 #ifdef CONFIG_CPU_MICROMIPS
968 memcpy((void *)(ebase + offset), ((unsigned char *)addr - 1), size);
969 diff --git a/arch/mips/ralink/ill_acc.c b/arch/mips/ralink/ill_acc.c
970 index 0ddeb31afa93a..45ca2b84f0962 100644
971 --- a/arch/mips/ralink/ill_acc.c
972 +++ b/arch/mips/ralink/ill_acc.c
973 @@ -61,6 +61,7 @@ static int __init ill_acc_of_setup(void)
974 pdev = of_find_device_by_node(np);
975 if (!pdev) {
976 pr_err("%pOFn: failed to lookup pdev\n", np);
977 + of_node_put(np);
978 return -EINVAL;
979 }
980
981 diff --git a/arch/mips/rb532/devices.c b/arch/mips/rb532/devices.c
982 index c9ecf17f86605..74808619fefeb 100644
983 --- a/arch/mips/rb532/devices.c
984 +++ b/arch/mips/rb532/devices.c
985 @@ -310,11 +310,9 @@ static int __init plat_setup_devices(void)
986 static int __init setup_kmac(char *s)
987 {
988 printk(KERN_INFO "korina mac = %s\n", s);
989 - if (!mac_pton(s, korina_dev0_data.mac)) {
990 + if (!mac_pton(s, korina_dev0_data.mac))
991 printk(KERN_ERR "Invalid mac\n");
992 - return -EINVAL;
993 - }
994 - return 0;
995 + return 1;
996 }
997
998 __setup("kmac=", setup_kmac);
999 diff --git a/arch/nios2/include/asm/uaccess.h b/arch/nios2/include/asm/uaccess.h
1000 index e83f831a76f93..6be5e913c42e4 100644
1001 --- a/arch/nios2/include/asm/uaccess.h
1002 +++ b/arch/nios2/include/asm/uaccess.h
1003 @@ -89,6 +89,7 @@ extern __must_check long strnlen_user(const char __user *s, long n);
1004 /* Optimized macros */
1005 #define __get_user_asm(val, insn, addr, err) \
1006 { \
1007 + unsigned long __gu_val; \
1008 __asm__ __volatile__( \
1009 " movi %0, %3\n" \
1010 "1: " insn " %1, 0(%2)\n" \
1011 @@ -97,14 +98,20 @@ extern __must_check long strnlen_user(const char __user *s, long n);
1012 " .section __ex_table,\"a\"\n" \
1013 " .word 1b, 2b\n" \
1014 " .previous" \
1015 - : "=&r" (err), "=r" (val) \
1016 + : "=&r" (err), "=r" (__gu_val) \
1017 : "r" (addr), "i" (-EFAULT)); \
1018 + val = (__force __typeof__(*(addr)))__gu_val; \
1019 }
1020
1021 -#define __get_user_unknown(val, size, ptr, err) do { \
1022 +extern void __get_user_unknown(void);
1023 +
1024 +#define __get_user_8(val, ptr, err) do { \
1025 + u64 __val = 0; \
1026 err = 0; \
1027 - if (__copy_from_user(&(val), ptr, size)) { \
1028 + if (raw_copy_from_user(&(__val), ptr, sizeof(val))) { \
1029 err = -EFAULT; \
1030 + } else { \
1031 + val = (typeof(val))(typeof((val) - (val)))__val; \
1032 } \
1033 } while (0)
1034
1035 @@ -120,8 +127,11 @@ do { \
1036 case 4: \
1037 __get_user_asm(val, "ldw", ptr, err); \
1038 break; \
1039 + case 8: \
1040 + __get_user_8(val, ptr, err); \
1041 + break; \
1042 default: \
1043 - __get_user_unknown(val, size, ptr, err); \
1044 + __get_user_unknown(); \
1045 break; \
1046 } \
1047 } while (0)
1048 @@ -130,9 +140,7 @@ do { \
1049 ({ \
1050 long __gu_err = -EFAULT; \
1051 const __typeof__(*(ptr)) __user *__gu_ptr = (ptr); \
1052 - unsigned long __gu_val = 0; \
1053 - __get_user_common(__gu_val, sizeof(*(ptr)), __gu_ptr, __gu_err);\
1054 - (x) = (__force __typeof__(x))__gu_val; \
1055 + __get_user_common(x, sizeof(*(ptr)), __gu_ptr, __gu_err); \
1056 __gu_err; \
1057 })
1058
1059 @@ -140,11 +148,9 @@ do { \
1060 ({ \
1061 long __gu_err = -EFAULT; \
1062 const __typeof__(*(ptr)) __user *__gu_ptr = (ptr); \
1063 - unsigned long __gu_val = 0; \
1064 if (access_ok( __gu_ptr, sizeof(*__gu_ptr))) \
1065 - __get_user_common(__gu_val, sizeof(*__gu_ptr), \
1066 + __get_user_common(x, sizeof(*__gu_ptr), \
1067 __gu_ptr, __gu_err); \
1068 - (x) = (__force __typeof__(x))__gu_val; \
1069 __gu_err; \
1070 })
1071
1072 diff --git a/arch/parisc/kernel/patch.c b/arch/parisc/kernel/patch.c
1073 index 80a0ab372802d..e59574f65e641 100644
1074 --- a/arch/parisc/kernel/patch.c
1075 +++ b/arch/parisc/kernel/patch.c
1076 @@ -40,10 +40,7 @@ static void __kprobes *patch_map(void *addr, int fixmap, unsigned long *flags,
1077
1078 *need_unmap = 1;
1079 set_fixmap(fixmap, page_to_phys(page));
1080 - if (flags)
1081 - raw_spin_lock_irqsave(&patch_lock, *flags);
1082 - else
1083 - __acquire(&patch_lock);
1084 + raw_spin_lock_irqsave(&patch_lock, *flags);
1085
1086 return (void *) (__fix_to_virt(fixmap) + (uintaddr & ~PAGE_MASK));
1087 }
1088 @@ -52,10 +49,7 @@ static void __kprobes patch_unmap(int fixmap, unsigned long *flags)
1089 {
1090 clear_fixmap(fixmap);
1091
1092 - if (flags)
1093 - raw_spin_unlock_irqrestore(&patch_lock, *flags);
1094 - else
1095 - __release(&patch_lock);
1096 + raw_spin_unlock_irqrestore(&patch_lock, *flags);
1097 }
1098
1099 void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len)
1100 @@ -67,8 +61,9 @@ void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len)
1101 int mapped;
1102
1103 /* Make sure we don't have any aliases in cache */
1104 - flush_kernel_vmap_range(addr, len);
1105 - flush_icache_range(start, end);
1106 + flush_kernel_dcache_range_asm(start, end);
1107 + flush_kernel_icache_range_asm(start, end);
1108 + flush_tlb_kernel_range(start, end);
1109
1110 p = fixmap = patch_map(addr, FIX_TEXT_POKE0, &flags, &mapped);
1111
1112 @@ -81,8 +76,10 @@ void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len)
1113 * We're crossing a page boundary, so
1114 * need to remap
1115 */
1116 - flush_kernel_vmap_range((void *)fixmap,
1117 - (p-fixmap) * sizeof(*p));
1118 + flush_kernel_dcache_range_asm((unsigned long)fixmap,
1119 + (unsigned long)p);
1120 + flush_tlb_kernel_range((unsigned long)fixmap,
1121 + (unsigned long)p);
1122 if (mapped)
1123 patch_unmap(FIX_TEXT_POKE0, &flags);
1124 p = fixmap = patch_map(addr, FIX_TEXT_POKE0, &flags,
1125 @@ -90,10 +87,10 @@ void __kprobes __patch_text_multiple(void *addr, u32 *insn, unsigned int len)
1126 }
1127 }
1128
1129 - flush_kernel_vmap_range((void *)fixmap, (p-fixmap) * sizeof(*p));
1130 + flush_kernel_dcache_range_asm((unsigned long)fixmap, (unsigned long)p);
1131 + flush_tlb_kernel_range((unsigned long)fixmap, (unsigned long)p);
1132 if (mapped)
1133 patch_unmap(FIX_TEXT_POKE0, &flags);
1134 - flush_icache_range(start, end);
1135 }
1136
1137 void __kprobes __patch_text(void *addr, u32 insn)
1138 diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
1139 index 9f73fb6b1cc91..b9d2fcf030d0d 100644
1140 --- a/arch/powerpc/Makefile
1141 +++ b/arch/powerpc/Makefile
1142 @@ -174,7 +174,7 @@ else
1143 CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=power7,$(call cc-option,-mtune=power5))
1144 CFLAGS-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mcpu=power5,-mcpu=power4)
1145 endif
1146 -else
1147 +else ifdef CONFIG_PPC_BOOK3E_64
1148 CFLAGS-$(CONFIG_GENERIC_CPU) += -mcpu=powerpc64
1149 endif
1150
1151 diff --git a/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi b/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi
1152 index 099a598c74c00..bfe1ed5be3374 100644
1153 --- a/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi
1154 +++ b/arch/powerpc/boot/dts/fsl/t104xrdb.dtsi
1155 @@ -139,12 +139,12 @@
1156 fman@400000 {
1157 ethernet@e6000 {
1158 phy-handle = <&phy_rgmii_0>;
1159 - phy-connection-type = "rgmii";
1160 + phy-connection-type = "rgmii-id";
1161 };
1162
1163 ethernet@e8000 {
1164 phy-handle = <&phy_rgmii_1>;
1165 - phy-connection-type = "rgmii";
1166 + phy-connection-type = "rgmii-id";
1167 };
1168
1169 mdio0: mdio@fc000 {
1170 diff --git a/arch/powerpc/include/asm/io.h b/arch/powerpc/include/asm/io.h
1171 index a63ec938636de..daba2d2a02a0b 100644
1172 --- a/arch/powerpc/include/asm/io.h
1173 +++ b/arch/powerpc/include/asm/io.h
1174 @@ -345,25 +345,37 @@ static inline void __raw_writeq_be(unsigned long v, volatile void __iomem *addr)
1175 */
1176 static inline void __raw_rm_writeb(u8 val, volatile void __iomem *paddr)
1177 {
1178 - __asm__ __volatile__("stbcix %0,0,%1"
1179 + __asm__ __volatile__(".machine push; \
1180 + .machine power6; \
1181 + stbcix %0,0,%1; \
1182 + .machine pop;"
1183 : : "r" (val), "r" (paddr) : "memory");
1184 }
1185
1186 static inline void __raw_rm_writew(u16 val, volatile void __iomem *paddr)
1187 {
1188 - __asm__ __volatile__("sthcix %0,0,%1"
1189 + __asm__ __volatile__(".machine push; \
1190 + .machine power6; \
1191 + sthcix %0,0,%1; \
1192 + .machine pop;"
1193 : : "r" (val), "r" (paddr) : "memory");
1194 }
1195
1196 static inline void __raw_rm_writel(u32 val, volatile void __iomem *paddr)
1197 {
1198 - __asm__ __volatile__("stwcix %0,0,%1"
1199 + __asm__ __volatile__(".machine push; \
1200 + .machine power6; \
1201 + stwcix %0,0,%1; \
1202 + .machine pop;"
1203 : : "r" (val), "r" (paddr) : "memory");
1204 }
1205
1206 static inline void __raw_rm_writeq(u64 val, volatile void __iomem *paddr)
1207 {
1208 - __asm__ __volatile__("stdcix %0,0,%1"
1209 + __asm__ __volatile__(".machine push; \
1210 + .machine power6; \
1211 + stdcix %0,0,%1; \
1212 + .machine pop;"
1213 : : "r" (val), "r" (paddr) : "memory");
1214 }
1215
1216 @@ -375,7 +387,10 @@ static inline void __raw_rm_writeq_be(u64 val, volatile void __iomem *paddr)
1217 static inline u8 __raw_rm_readb(volatile void __iomem *paddr)
1218 {
1219 u8 ret;
1220 - __asm__ __volatile__("lbzcix %0,0, %1"
1221 + __asm__ __volatile__(".machine push; \
1222 + .machine power6; \
1223 + lbzcix %0,0, %1; \
1224 + .machine pop;"
1225 : "=r" (ret) : "r" (paddr) : "memory");
1226 return ret;
1227 }
1228 @@ -383,7 +398,10 @@ static inline u8 __raw_rm_readb(volatile void __iomem *paddr)
1229 static inline u16 __raw_rm_readw(volatile void __iomem *paddr)
1230 {
1231 u16 ret;
1232 - __asm__ __volatile__("lhzcix %0,0, %1"
1233 + __asm__ __volatile__(".machine push; \
1234 + .machine power6; \
1235 + lhzcix %0,0, %1; \
1236 + .machine pop;"
1237 : "=r" (ret) : "r" (paddr) : "memory");
1238 return ret;
1239 }
1240 @@ -391,7 +409,10 @@ static inline u16 __raw_rm_readw(volatile void __iomem *paddr)
1241 static inline u32 __raw_rm_readl(volatile void __iomem *paddr)
1242 {
1243 u32 ret;
1244 - __asm__ __volatile__("lwzcix %0,0, %1"
1245 + __asm__ __volatile__(".machine push; \
1246 + .machine power6; \
1247 + lwzcix %0,0, %1; \
1248 + .machine pop;"
1249 : "=r" (ret) : "r" (paddr) : "memory");
1250 return ret;
1251 }
1252 @@ -399,7 +420,10 @@ static inline u32 __raw_rm_readl(volatile void __iomem *paddr)
1253 static inline u64 __raw_rm_readq(volatile void __iomem *paddr)
1254 {
1255 u64 ret;
1256 - __asm__ __volatile__("ldcix %0,0, %1"
1257 + __asm__ __volatile__(".machine push; \
1258 + .machine power6; \
1259 + ldcix %0,0, %1; \
1260 + .machine pop;"
1261 : "=r" (ret) : "r" (paddr) : "memory");
1262 return ret;
1263 }
1264 diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h
1265 index cafad1960e766..a14a32f6c3ccd 100644
1266 --- a/arch/powerpc/include/asm/uaccess.h
1267 +++ b/arch/powerpc/include/asm/uaccess.h
1268 @@ -191,8 +191,11 @@ extern long __get_user_bad(void);
1269 */
1270 #define __get_user_atomic_128_aligned(kaddr, uaddr, err) \
1271 __asm__ __volatile__( \
1272 + ".machine push\n" \
1273 + ".machine altivec\n" \
1274 "1: lvx 0,0,%1 # get user\n" \
1275 " stvx 0,0,%2 # put kernel\n" \
1276 + ".machine pop\n" \
1277 "2:\n" \
1278 ".section .fixup,\"ax\"\n" \
1279 "3: li %0,%3\n" \
1280 diff --git a/arch/powerpc/kernel/kvm.c b/arch/powerpc/kernel/kvm.c
1281 index 617eba82531cb..d89cf802d9aa7 100644
1282 --- a/arch/powerpc/kernel/kvm.c
1283 +++ b/arch/powerpc/kernel/kvm.c
1284 @@ -669,7 +669,7 @@ static void __init kvm_use_magic_page(void)
1285 on_each_cpu(kvm_map_magic_page, &features, 1);
1286
1287 /* Quick self-test to see if the mapping works */
1288 - if (!fault_in_pages_readable((const char *)KVM_MAGIC_PAGE, sizeof(u32))) {
1289 + if (fault_in_pages_readable((const char *)KVM_MAGIC_PAGE, sizeof(u32))) {
1290 kvm_patching_worked = false;
1291 return;
1292 }
1293 diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c
1294 index 7a1c11a7cba5a..716f8bb17461c 100644
1295 --- a/arch/powerpc/kernel/machine_kexec.c
1296 +++ b/arch/powerpc/kernel/machine_kexec.c
1297 @@ -146,11 +146,18 @@ void __init reserve_crashkernel(void)
1298 if (!crashk_res.start) {
1299 #ifdef CONFIG_PPC64
1300 /*
1301 - * On 64bit we split the RMO in half but cap it at half of
1302 - * a small SLB (128MB) since the crash kernel needs to place
1303 - * itself and some stacks to be in the first segment.
1304 + * On the LPAR platform place the crash kernel to mid of
1305 + * RMA size (512MB or more) to ensure the crash kernel
1306 + * gets enough space to place itself and some stack to be
1307 + * in the first segment. At the same time normal kernel
1308 + * also get enough space to allocate memory for essential
1309 + * system resource in the first segment. Keep the crash
1310 + * kernel starts at 128MB offset on other platforms.
1311 */
1312 - crashk_res.start = min(0x8000000ULL, (ppc64_rma_size / 2));
1313 + if (firmware_has_feature(FW_FEATURE_LPAR))
1314 + crashk_res.start = ppc64_rma_size / 2;
1315 + else
1316 + crashk_res.start = min(0x8000000ULL, (ppc64_rma_size / 2));
1317 #else
1318 crashk_res.start = KDUMP_KERNELBASE;
1319 #endif
1320 diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
1321 index c1e2e351ebff8..9392661ac8a87 100644
1322 --- a/arch/powerpc/kernel/rtas.c
1323 +++ b/arch/powerpc/kernel/rtas.c
1324 @@ -1244,6 +1244,12 @@ int __init early_init_dt_scan_rtas(unsigned long node,
1325 entryp = of_get_flat_dt_prop(node, "linux,rtas-entry", NULL);
1326 sizep = of_get_flat_dt_prop(node, "rtas-size", NULL);
1327
1328 +#ifdef CONFIG_PPC64
1329 + /* need this feature to decide the crashkernel offset */
1330 + if (of_get_flat_dt_prop(node, "ibm,hypertas-functions", NULL))
1331 + powerpc_firmware_features |= FW_FEATURE_LPAR;
1332 +#endif
1333 +
1334 if (basep && entryp && sizep) {
1335 rtas.base = *basep;
1336 rtas.entry = *entryp;
1337 diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
1338 index 8dd4d2b83677b..eb8c72846b7fc 100644
1339 --- a/arch/powerpc/kvm/powerpc.c
1340 +++ b/arch/powerpc/kvm/powerpc.c
1341 @@ -1495,7 +1495,7 @@ int kvmppc_handle_vmx_load(struct kvm_run *run, struct kvm_vcpu *vcpu,
1342 {
1343 enum emulation_result emulated = EMULATE_DONE;
1344
1345 - if (vcpu->arch.mmio_vsx_copy_nums > 2)
1346 + if (vcpu->arch.mmio_vmx_copy_nums > 2)
1347 return EMULATE_FAIL;
1348
1349 while (vcpu->arch.mmio_vmx_copy_nums) {
1350 @@ -1592,7 +1592,7 @@ int kvmppc_handle_vmx_store(struct kvm_run *run, struct kvm_vcpu *vcpu,
1351 unsigned int index = rs & KVM_MMIO_REG_MASK;
1352 enum emulation_result emulated = EMULATE_DONE;
1353
1354 - if (vcpu->arch.mmio_vsx_copy_nums > 2)
1355 + if (vcpu->arch.mmio_vmx_copy_nums > 2)
1356 return EMULATE_FAIL;
1357
1358 vcpu->arch.io_gpr = rs;
1359 diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
1360 index dc6728dacbc6b..27650cd5857f9 100644
1361 --- a/arch/powerpc/lib/sstep.c
1362 +++ b/arch/powerpc/lib/sstep.c
1363 @@ -906,7 +906,10 @@ NOKPROBE_SYMBOL(emulate_dcbz);
1364
1365 #define __put_user_asmx(x, addr, err, op, cr) \
1366 __asm__ __volatile__( \
1367 + ".machine push\n" \
1368 + ".machine power8\n" \
1369 "1: " op " %2,0,%3\n" \
1370 + ".machine pop\n" \
1371 " mfcr %1\n" \
1372 "2:\n" \
1373 ".section .fixup,\"ax\"\n" \
1374 @@ -919,7 +922,10 @@ NOKPROBE_SYMBOL(emulate_dcbz);
1375
1376 #define __get_user_asmx(x, addr, err, op) \
1377 __asm__ __volatile__( \
1378 + ".machine push\n" \
1379 + ".machine power8\n" \
1380 "1: "op" %1,0,%2\n" \
1381 + ".machine pop\n" \
1382 "2:\n" \
1383 ".section .fixup,\"ax\"\n" \
1384 "3: li %0,%3\n" \
1385 @@ -2912,7 +2918,7 @@ int emulate_loadstore(struct pt_regs *regs, struct instruction_op *op)
1386 __put_user_asmx(op->val, ea, err, "stbcx.", cr);
1387 break;
1388 case 2:
1389 - __put_user_asmx(op->val, ea, err, "stbcx.", cr);
1390 + __put_user_asmx(op->val, ea, err, "sthcx.", cr);
1391 break;
1392 #endif
1393 case 4:
1394 diff --git a/arch/powerpc/mm/kasan/kasan_init_32.c b/arch/powerpc/mm/kasan/kasan_init_32.c
1395 index 1cfe57b51d7e3..3f78007a72822 100644
1396 --- a/arch/powerpc/mm/kasan/kasan_init_32.c
1397 +++ b/arch/powerpc/mm/kasan/kasan_init_32.c
1398 @@ -121,7 +121,7 @@ static void __init kasan_remap_early_shadow_ro(void)
1399 pmd_t *pmd = pmd_offset(pud_offset(pgd_offset_k(k_cur), k_cur), k_cur);
1400 pte_t *ptep = pte_offset_kernel(pmd, k_cur);
1401
1402 - if ((pte_val(*ptep) & PTE_RPN_MASK) != pa)
1403 + if (pte_page(*ptep) != virt_to_page(lm_alias(kasan_early_shadow_page)))
1404 continue;
1405
1406 __set_pte_at(&init_mm, k_cur, ptep, pfn_pte(PHYS_PFN(pa), prot), 0);
1407 diff --git a/arch/powerpc/perf/imc-pmu.c b/arch/powerpc/perf/imc-pmu.c
1408 index eb82dda884e51..d76e800a1f337 100644
1409 --- a/arch/powerpc/perf/imc-pmu.c
1410 +++ b/arch/powerpc/perf/imc-pmu.c
1411 @@ -1441,7 +1441,11 @@ static int trace_imc_event_init(struct perf_event *event)
1412 event->hw.idx = -1;
1413 target = event->hw.target;
1414
1415 - event->pmu->task_ctx_nr = perf_hw_context;
1416 + /*
1417 + * There can only be a single PMU for perf_hw_context events which is assigned to
1418 + * core PMU. Hence use "perf_sw_context" for trace_imc.
1419 + */
1420 + event->pmu->task_ctx_nr = perf_sw_context;
1421 event->destroy = reset_global_refc;
1422 return 0;
1423 }
1424 diff --git a/arch/powerpc/platforms/8xx/pic.c b/arch/powerpc/platforms/8xx/pic.c
1425 index e9617d35fd1f6..209b12323aa4c 100644
1426 --- a/arch/powerpc/platforms/8xx/pic.c
1427 +++ b/arch/powerpc/platforms/8xx/pic.c
1428 @@ -153,6 +153,7 @@ int mpc8xx_pic_init(void)
1429 if (mpc8xx_pic_host == NULL) {
1430 printk(KERN_ERR "MPC8xx PIC: failed to allocate irq host!\n");
1431 ret = -ENOMEM;
1432 + goto out;
1433 }
1434
1435 ret = 0;
1436 diff --git a/arch/powerpc/platforms/powernv/rng.c b/arch/powerpc/platforms/powernv/rng.c
1437 index 8035caf6e297d..1c31863a9be6c 100644
1438 --- a/arch/powerpc/platforms/powernv/rng.c
1439 +++ b/arch/powerpc/platforms/powernv/rng.c
1440 @@ -43,7 +43,11 @@ static unsigned long rng_whiten(struct powernv_rng *rng, unsigned long val)
1441 unsigned long parity;
1442
1443 /* Calculate the parity of the value */
1444 - asm ("popcntd %0,%1" : "=r" (parity) : "r" (val));
1445 + asm (".machine push; \
1446 + .machine power7; \
1447 + popcntd %0,%1; \
1448 + .machine pop;"
1449 + : "=r" (parity) : "r" (val));
1450
1451 /* xor our value with the previous mask */
1452 val ^= rng->mask;
1453 diff --git a/arch/powerpc/sysdev/fsl_gtm.c b/arch/powerpc/sysdev/fsl_gtm.c
1454 index 8963eaffb1b7b..39186ad6b3c3a 100644
1455 --- a/arch/powerpc/sysdev/fsl_gtm.c
1456 +++ b/arch/powerpc/sysdev/fsl_gtm.c
1457 @@ -86,7 +86,7 @@ static LIST_HEAD(gtms);
1458 */
1459 struct gtm_timer *gtm_get_timer16(void)
1460 {
1461 - struct gtm *gtm = NULL;
1462 + struct gtm *gtm;
1463 int i;
1464
1465 list_for_each_entry(gtm, &gtms, list_node) {
1466 @@ -103,7 +103,7 @@ struct gtm_timer *gtm_get_timer16(void)
1467 spin_unlock_irq(&gtm->lock);
1468 }
1469
1470 - if (gtm)
1471 + if (!list_empty(&gtms))
1472 return ERR_PTR(-EBUSY);
1473 return ERR_PTR(-ENODEV);
1474 }
1475 diff --git a/arch/riscv/kernel/module.lds b/arch/riscv/kernel/module.lds
1476 index 295ecfb341a29..18ec719899e28 100644
1477 --- a/arch/riscv/kernel/module.lds
1478 +++ b/arch/riscv/kernel/module.lds
1479 @@ -2,7 +2,7 @@
1480 /* Copyright (C) 2017 Andes Technology Corporation */
1481
1482 SECTIONS {
1483 - .plt (NOLOAD) : { BYTE(0) }
1484 - .got (NOLOAD) : { BYTE(0) }
1485 - .got.plt (NOLOAD) : { BYTE(0) }
1486 + .plt : { BYTE(0) }
1487 + .got : { BYTE(0) }
1488 + .got.plt : { BYTE(0) }
1489 }
1490 diff --git a/arch/riscv/kernel/perf_callchain.c b/arch/riscv/kernel/perf_callchain.c
1491 index 22a93009362d7..1de5991916eb9 100644
1492 --- a/arch/riscv/kernel/perf_callchain.c
1493 +++ b/arch/riscv/kernel/perf_callchain.c
1494 @@ -77,7 +77,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry,
1495
1496 bool fill_callchain(unsigned long pc, void *entry)
1497 {
1498 - return perf_callchain_store(entry, pc);
1499 + return perf_callchain_store(entry, pc) == 0;
1500 }
1501
1502 void notrace walk_stackframe(struct task_struct *task,
1503 diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c
1504 index 0117489e9b30a..750acc1344328 100644
1505 --- a/arch/um/drivers/mconsole_kern.c
1506 +++ b/arch/um/drivers/mconsole_kern.c
1507 @@ -217,7 +217,7 @@ void mconsole_go(struct mc_request *req)
1508
1509 void mconsole_stop(struct mc_request *req)
1510 {
1511 - deactivate_fd(req->originating_fd, MCONSOLE_IRQ);
1512 + block_signals();
1513 os_set_fd_block(req->originating_fd, 1);
1514 mconsole_reply(req, "stopped", 0, 0);
1515 for (;;) {
1516 @@ -240,6 +240,7 @@ void mconsole_stop(struct mc_request *req)
1517 }
1518 os_set_fd_block(req->originating_fd, 0);
1519 mconsole_reply(req, "", 0, 0);
1520 + unblock_signals();
1521 }
1522
1523 static DEFINE_SPINLOCK(mc_devices_lock);
1524 diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c
1525 index da289a44d5116..f4d2322f4c629 100644
1526 --- a/arch/x86/events/intel/pt.c
1527 +++ b/arch/x86/events/intel/pt.c
1528 @@ -460,7 +460,7 @@ static u64 pt_config_filters(struct perf_event *event)
1529 pt->filters.filter[range].msr_b = filter->msr_b;
1530 }
1531
1532 - rtit_ctl |= filter->config << pt_address_ranges[range].reg_off;
1533 + rtit_ctl |= (u64)filter->config << pt_address_ranges[range].reg_off;
1534 }
1535
1536 return rtit_ctl;
1537 diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
1538 index 6ff2c7cac4c46..408b51aba2930 100644
1539 --- a/arch/x86/kernel/kvm.c
1540 +++ b/arch/x86/kernel/kvm.c
1541 @@ -487,7 +487,7 @@ static void __send_ipi_mask(const struct cpumask *mask, int vector)
1542 } else if (apic_id < min && max - apic_id < KVM_IPI_CLUSTER_SIZE) {
1543 ipi_bitmap <<= min - apic_id;
1544 min = apic_id;
1545 - } else if (apic_id < min + KVM_IPI_CLUSTER_SIZE) {
1546 + } else if (apic_id > min && apic_id < min + KVM_IPI_CLUSTER_SIZE) {
1547 max = apic_id < max ? max : apic_id;
1548 } else {
1549 ret = kvm_hypercall4(KVM_HC_SEND_IPI, (unsigned long)ipi_bitmap,
1550 diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
1551 index 60c8dcb907a50..ea48a2fb1677d 100644
1552 --- a/arch/x86/kvm/emulate.c
1553 +++ b/arch/x86/kvm/emulate.c
1554 @@ -1714,11 +1714,6 @@ static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt,
1555 goto exception;
1556 }
1557
1558 - if (!seg_desc.p) {
1559 - err_vec = (seg == VCPU_SREG_SS) ? SS_VECTOR : NP_VECTOR;
1560 - goto exception;
1561 - }
1562 -
1563 dpl = seg_desc.dpl;
1564
1565 switch (seg) {
1566 @@ -1758,6 +1753,10 @@ static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt,
1567 case VCPU_SREG_TR:
1568 if (seg_desc.s || (seg_desc.type != 1 && seg_desc.type != 9))
1569 goto exception;
1570 + if (!seg_desc.p) {
1571 + err_vec = NP_VECTOR;
1572 + goto exception;
1573 + }
1574 old_desc = seg_desc;
1575 seg_desc.type |= 2; /* busy */
1576 ret = ctxt->ops->cmpxchg_emulated(ctxt, desc_addr, &old_desc, &seg_desc,
1577 @@ -1782,6 +1781,11 @@ static int __load_segment_descriptor(struct x86_emulate_ctxt *ctxt,
1578 break;
1579 }
1580
1581 + if (!seg_desc.p) {
1582 + err_vec = (seg == VCPU_SREG_SS) ? SS_VECTOR : NP_VECTOR;
1583 + goto exception;
1584 + }
1585 +
1586 if (seg_desc.s) {
1587 /* mark segment as accessed */
1588 if (!(seg_desc.type & 1)) {
1589 diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c
1590 index be92e8dccda3d..ca66459a2e895 100644
1591 --- a/arch/x86/kvm/hyperv.c
1592 +++ b/arch/x86/kvm/hyperv.c
1593 @@ -205,7 +205,7 @@ static int synic_set_msr(struct kvm_vcpu_hv_synic *synic,
1594 struct kvm_vcpu *vcpu = synic_to_vcpu(synic);
1595 int ret;
1596
1597 - if (!synic->active && !host)
1598 + if (!synic->active && (!host || data))
1599 return 1;
1600
1601 trace_kvm_hv_synic_set_msr(vcpu->vcpu_id, msr, data, host);
1602 @@ -251,6 +251,9 @@ static int synic_set_msr(struct kvm_vcpu_hv_synic *synic,
1603 case HV_X64_MSR_EOM: {
1604 int i;
1605
1606 + if (!synic->active)
1607 + break;
1608 +
1609 for (i = 0; i < ARRAY_SIZE(synic->sint); i++)
1610 kvm_hv_notify_acked_sint(vcpu, i);
1611 break;
1612 @@ -514,6 +517,11 @@ static int stimer_set_config(struct kvm_vcpu_hv_stimer *stimer, u64 config,
1613 {
1614 union hv_stimer_config new_config = {.as_uint64 = config},
1615 old_config = {.as_uint64 = stimer->config.as_uint64};
1616 + struct kvm_vcpu *vcpu = stimer_to_vcpu(stimer);
1617 + struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu);
1618 +
1619 + if (!synic->active && (!host || config))
1620 + return 1;
1621
1622 trace_kvm_hv_stimer_set_config(stimer_to_vcpu(stimer)->vcpu_id,
1623 stimer->index, config, host);
1624 @@ -533,6 +541,12 @@ static int stimer_set_config(struct kvm_vcpu_hv_stimer *stimer, u64 config,
1625 static int stimer_set_count(struct kvm_vcpu_hv_stimer *stimer, u64 count,
1626 bool host)
1627 {
1628 + struct kvm_vcpu *vcpu = stimer_to_vcpu(stimer);
1629 + struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu);
1630 +
1631 + if (!synic->active && (!host || count))
1632 + return 1;
1633 +
1634 trace_kvm_hv_stimer_set_count(stimer_to_vcpu(stimer)->vcpu_id,
1635 stimer->index, count, host);
1636
1637 diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
1638 index eea2d6f10f59a..afe3b8e615146 100644
1639 --- a/arch/x86/kvm/lapic.c
1640 +++ b/arch/x86/kvm/lapic.c
1641 @@ -2099,10 +2099,7 @@ void kvm_set_lapic_tscdeadline_msr(struct kvm_vcpu *vcpu, u64 data)
1642
1643 void kvm_lapic_set_tpr(struct kvm_vcpu *vcpu, unsigned long cr8)
1644 {
1645 - struct kvm_lapic *apic = vcpu->arch.apic;
1646 -
1647 - apic_set_tpr(apic, ((cr8 & 0x0f) << 4)
1648 - | (kvm_lapic_get_reg(apic, APIC_TASKPRI) & 4));
1649 + apic_set_tpr(vcpu->arch.apic, (cr8 & 0x0f) << 4);
1650 }
1651
1652 u64 kvm_lapic_get_cr8(struct kvm_vcpu *vcpu)
1653 diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
1654 index d4a8ad6c6a4bb..1a1d2b5e7b357 100644
1655 --- a/arch/x86/kvm/paging_tmpl.h
1656 +++ b/arch/x86/kvm/paging_tmpl.h
1657 @@ -34,9 +34,8 @@
1658 #define PT_HAVE_ACCESSED_DIRTY(mmu) true
1659 #ifdef CONFIG_X86_64
1660 #define PT_MAX_FULL_LEVELS PT64_ROOT_MAX_LEVEL
1661 - #define CMPXCHG cmpxchg
1662 + #define CMPXCHG "cmpxchgq"
1663 #else
1664 - #define CMPXCHG cmpxchg64
1665 #define PT_MAX_FULL_LEVELS 2
1666 #endif
1667 #elif PTTYPE == 32
1668 @@ -52,7 +51,7 @@
1669 #define PT_GUEST_DIRTY_SHIFT PT_DIRTY_SHIFT
1670 #define PT_GUEST_ACCESSED_SHIFT PT_ACCESSED_SHIFT
1671 #define PT_HAVE_ACCESSED_DIRTY(mmu) true
1672 - #define CMPXCHG cmpxchg
1673 + #define CMPXCHG "cmpxchgl"
1674 #elif PTTYPE == PTTYPE_EPT
1675 #define pt_element_t u64
1676 #define guest_walker guest_walkerEPT
1677 @@ -65,8 +64,10 @@
1678 #define PT_GUEST_DIRTY_SHIFT 9
1679 #define PT_GUEST_ACCESSED_SHIFT 8
1680 #define PT_HAVE_ACCESSED_DIRTY(mmu) ((mmu)->ept_ad)
1681 - #define CMPXCHG cmpxchg64
1682 #define PT_MAX_FULL_LEVELS 4
1683 + #ifdef CONFIG_X86_64
1684 + #define CMPXCHG "cmpxchgq"
1685 + #endif
1686 #else
1687 #error Invalid PTTYPE value
1688 #endif
1689 @@ -132,43 +133,39 @@ static int FNAME(cmpxchg_gpte)(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
1690 pt_element_t __user *ptep_user, unsigned index,
1691 pt_element_t orig_pte, pt_element_t new_pte)
1692 {
1693 - int npages;
1694 - pt_element_t ret;
1695 - pt_element_t *table;
1696 - struct page *page;
1697 -
1698 - npages = get_user_pages_fast((unsigned long)ptep_user, 1, FOLL_WRITE, &page);
1699 - if (likely(npages == 1)) {
1700 - table = kmap_atomic(page);
1701 - ret = CMPXCHG(&table[index], orig_pte, new_pte);
1702 - kunmap_atomic(table);
1703 -
1704 - kvm_release_page_dirty(page);
1705 - } else {
1706 - struct vm_area_struct *vma;
1707 - unsigned long vaddr = (unsigned long)ptep_user & PAGE_MASK;
1708 - unsigned long pfn;
1709 - unsigned long paddr;
1710 -
1711 - down_read(&current->mm->mmap_sem);
1712 - vma = find_vma_intersection(current->mm, vaddr, vaddr + PAGE_SIZE);
1713 - if (!vma || !(vma->vm_flags & VM_PFNMAP)) {
1714 - up_read(&current->mm->mmap_sem);
1715 - return -EFAULT;
1716 - }
1717 - pfn = ((vaddr - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
1718 - paddr = pfn << PAGE_SHIFT;
1719 - table = memremap(paddr, PAGE_SIZE, MEMREMAP_WB);
1720 - if (!table) {
1721 - up_read(&current->mm->mmap_sem);
1722 - return -EFAULT;
1723 - }
1724 - ret = CMPXCHG(&table[index], orig_pte, new_pte);
1725 - memunmap(table);
1726 - up_read(&current->mm->mmap_sem);
1727 - }
1728 + int r = -EFAULT;
1729 +
1730 + if (!user_access_begin(ptep_user, sizeof(pt_element_t)))
1731 + return -EFAULT;
1732 +
1733 +#ifdef CMPXCHG
1734 + asm volatile("1:" LOCK_PREFIX CMPXCHG " %[new], %[ptr]\n"
1735 + "mov $0, %[r]\n"
1736 + "setnz %b[r]\n"
1737 + "2:"
1738 + _ASM_EXTABLE_UA(1b, 2b)
1739 + : [ptr] "+m" (*ptep_user),
1740 + [old] "+a" (orig_pte),
1741 + [r] "+q" (r)
1742 + : [new] "r" (new_pte)
1743 + : "memory");
1744 +#else
1745 + asm volatile("1:" LOCK_PREFIX "cmpxchg8b %[ptr]\n"
1746 + "movl $0, %[r]\n"
1747 + "jz 2f\n"
1748 + "incl %[r]\n"
1749 + "2:"
1750 + _ASM_EXTABLE_UA(1b, 2b)
1751 + : [ptr] "+m" (*ptep_user),
1752 + [old] "+A" (orig_pte),
1753 + [r] "+rm" (r)
1754 + : [new_lo] "b" ((u32)new_pte),
1755 + [new_hi] "c" ((u32)(new_pte >> 32))
1756 + : "memory");
1757 +#endif
1758
1759 - return (ret != orig_pte);
1760 + user_access_end();
1761 + return r;
1762 }
1763
1764 static bool FNAME(prefetch_invalid_gpte)(struct kvm_vcpu *vcpu,
1765 diff --git a/arch/x86/kvm/pmu_amd.c b/arch/x86/kvm/pmu_amd.c
1766 index d9990951fd0ac..6bc656abbe66d 100644
1767 --- a/arch/x86/kvm/pmu_amd.c
1768 +++ b/arch/x86/kvm/pmu_amd.c
1769 @@ -245,12 +245,10 @@ static int amd_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
1770 /* MSR_EVNTSELn */
1771 pmc = get_gp_pmc_amd(pmu, msr, PMU_TYPE_EVNTSEL);
1772 if (pmc) {
1773 - if (data == pmc->eventsel)
1774 - return 0;
1775 - if (!(data & pmu->reserved_bits)) {
1776 + data &= ~pmu->reserved_bits;
1777 + if (data != pmc->eventsel)
1778 reprogram_gp_counter(pmc, data);
1779 - return 0;
1780 - }
1781 + return 0;
1782 }
1783
1784 return 1;
1785 diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
1786 index 915bb16397632..1bff0f68f0273 100644
1787 --- a/arch/x86/power/cpu.c
1788 +++ b/arch/x86/power/cpu.c
1789 @@ -40,7 +40,8 @@ static void msr_save_context(struct saved_context *ctxt)
1790 struct saved_msr *end = msr + ctxt->saved_msrs.num;
1791
1792 while (msr < end) {
1793 - msr->valid = !rdmsrl_safe(msr->info.msr_no, &msr->info.reg.q);
1794 + if (msr->valid)
1795 + rdmsrl(msr->info.msr_no, msr->info.reg.q);
1796 msr++;
1797 }
1798 }
1799 @@ -421,8 +422,10 @@ static int msr_build_context(const u32 *msr_id, const int num)
1800 }
1801
1802 for (i = saved_msrs->num, j = 0; i < total_num; i++, j++) {
1803 + u64 dummy;
1804 +
1805 msr_array[i].info.msr_no = msr_id[j];
1806 - msr_array[i].valid = false;
1807 + msr_array[i].valid = !rdmsrl_safe(msr_id[j], &dummy);
1808 msr_array[i].info.reg.q = 0;
1809 }
1810 saved_msrs->num = total_num;
1811 @@ -509,10 +512,24 @@ static int pm_cpu_check(const struct x86_cpu_id *c)
1812 return ret;
1813 }
1814
1815 +static void pm_save_spec_msr(void)
1816 +{
1817 + u32 spec_msr_id[] = {
1818 + MSR_IA32_SPEC_CTRL,
1819 + MSR_IA32_TSX_CTRL,
1820 + MSR_TSX_FORCE_ABORT,
1821 + MSR_IA32_MCU_OPT_CTRL,
1822 + MSR_AMD64_LS_CFG,
1823 + };
1824 +
1825 + msr_build_context(spec_msr_id, ARRAY_SIZE(spec_msr_id));
1826 +}
1827 +
1828 static int pm_check_save_msr(void)
1829 {
1830 dmi_check_system(msr_save_dmi_table);
1831 pm_cpu_check(msr_save_cpu_table);
1832 + pm_save_spec_msr();
1833
1834 return 0;
1835 }
1836 diff --git a/arch/x86/xen/pmu.c b/arch/x86/xen/pmu.c
1837 index e13b0b49fcdfc..d7249f4c90f1b 100644
1838 --- a/arch/x86/xen/pmu.c
1839 +++ b/arch/x86/xen/pmu.c
1840 @@ -512,10 +512,7 @@ irqreturn_t xen_pmu_irq_handler(int irq, void *dev_id)
1841 return ret;
1842 }
1843
1844 -bool is_xen_pmu(int cpu)
1845 -{
1846 - return (get_xenpmu_data() != NULL);
1847 -}
1848 +bool is_xen_pmu;
1849
1850 void xen_pmu_init(int cpu)
1851 {
1852 @@ -526,7 +523,7 @@ void xen_pmu_init(int cpu)
1853
1854 BUILD_BUG_ON(sizeof(struct xen_pmu_data) > PAGE_SIZE);
1855
1856 - if (xen_hvm_domain())
1857 + if (xen_hvm_domain() || (cpu != 0 && !is_xen_pmu))
1858 return;
1859
1860 xenpmu_data = (struct xen_pmu_data *)get_zeroed_page(GFP_KERNEL);
1861 @@ -547,7 +544,8 @@ void xen_pmu_init(int cpu)
1862 per_cpu(xenpmu_shared, cpu).xenpmu_data = xenpmu_data;
1863 per_cpu(xenpmu_shared, cpu).flags = 0;
1864
1865 - if (cpu == 0) {
1866 + if (!is_xen_pmu) {
1867 + is_xen_pmu = true;
1868 perf_register_guest_info_callbacks(&xen_guest_cbs);
1869 xen_pmu_arch_init();
1870 }
1871 diff --git a/arch/x86/xen/pmu.h b/arch/x86/xen/pmu.h
1872 index 0e83a160589bc..65c58894fc79f 100644
1873 --- a/arch/x86/xen/pmu.h
1874 +++ b/arch/x86/xen/pmu.h
1875 @@ -4,6 +4,8 @@
1876
1877 #include <xen/interface/xenpmu.h>
1878
1879 +extern bool is_xen_pmu;
1880 +
1881 irqreturn_t xen_pmu_irq_handler(int irq, void *dev_id);
1882 #ifdef CONFIG_XEN_HAVE_VPMU
1883 void xen_pmu_init(int cpu);
1884 @@ -12,7 +14,6 @@ void xen_pmu_finish(int cpu);
1885 static inline void xen_pmu_init(int cpu) {}
1886 static inline void xen_pmu_finish(int cpu) {}
1887 #endif
1888 -bool is_xen_pmu(int cpu);
1889 bool pmu_msr_read(unsigned int msr, uint64_t *val, int *err);
1890 bool pmu_msr_write(unsigned int msr, uint32_t low, uint32_t high, int *err);
1891 int pmu_apic_update(uint32_t reg);
1892 diff --git a/arch/x86/xen/smp_hvm.c b/arch/x86/xen/smp_hvm.c
1893 index f8d39440b2923..e5bd9eb421915 100644
1894 --- a/arch/x86/xen/smp_hvm.c
1895 +++ b/arch/x86/xen/smp_hvm.c
1896 @@ -18,6 +18,12 @@ static void __init xen_hvm_smp_prepare_boot_cpu(void)
1897 */
1898 xen_vcpu_setup(0);
1899
1900 + /*
1901 + * Called again in case the kernel boots on vcpu >= MAX_VIRT_CPUS.
1902 + * Refer to comments in xen_hvm_init_time_ops().
1903 + */
1904 + xen_hvm_init_time_ops();
1905 +
1906 /*
1907 * The alternative logic (which patches the unlock/lock) runs before
1908 * the smp bootup up code is activated. Hence we need to set this up
1909 diff --git a/arch/x86/xen/smp_pv.c b/arch/x86/xen/smp_pv.c
1910 index 0cebe5db691d9..64e6ec2c32a76 100644
1911 --- a/arch/x86/xen/smp_pv.c
1912 +++ b/arch/x86/xen/smp_pv.c
1913 @@ -129,7 +129,7 @@ int xen_smp_intr_init_pv(unsigned int cpu)
1914 per_cpu(xen_irq_work, cpu).irq = rc;
1915 per_cpu(xen_irq_work, cpu).name = callfunc_name;
1916
1917 - if (is_xen_pmu(cpu)) {
1918 + if (is_xen_pmu) {
1919 pmu_name = kasprintf(GFP_KERNEL, "pmu%d", cpu);
1920 rc = bind_virq_to_irqhandler(VIRQ_XENPMU, cpu,
1921 xen_pmu_irq_handler,
1922 diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c
1923 index befbdd8b17f01..4ec6c80f76872 100644
1924 --- a/arch/x86/xen/time.c
1925 +++ b/arch/x86/xen/time.c
1926 @@ -547,6 +547,11 @@ static void xen_hvm_setup_cpu_clockevents(void)
1927
1928 void __init xen_hvm_init_time_ops(void)
1929 {
1930 + static bool hvm_time_initialized;
1931 +
1932 + if (hvm_time_initialized)
1933 + return;
1934 +
1935 /*
1936 * vector callback is needed otherwise we cannot receive interrupts
1937 * on cpu > 0 and at this point we don't know how many cpus are
1938 @@ -556,7 +561,22 @@ void __init xen_hvm_init_time_ops(void)
1939 return;
1940
1941 if (!xen_feature(XENFEAT_hvm_safe_pvclock)) {
1942 - pr_info("Xen doesn't support pvclock on HVM, disable pv timer");
1943 + pr_info_once("Xen doesn't support pvclock on HVM, disable pv timer");
1944 + return;
1945 + }
1946 +
1947 + /*
1948 + * Only MAX_VIRT_CPUS 'vcpu_info' are embedded inside 'shared_info'.
1949 + * The __this_cpu_read(xen_vcpu) is still NULL when Xen HVM guest
1950 + * boots on vcpu >= MAX_VIRT_CPUS (e.g., kexec), To access
1951 + * __this_cpu_read(xen_vcpu) via xen_clocksource_read() will panic.
1952 + *
1953 + * The xen_hvm_init_time_ops() should be called again later after
1954 + * __this_cpu_read(xen_vcpu) is available.
1955 + */
1956 + if (!__this_cpu_read(xen_vcpu)) {
1957 + pr_info("Delay xen_init_time_common() as kernel is running on vcpu=%d\n",
1958 + xen_vcpu_nr(0));
1959 return;
1960 }
1961
1962 @@ -568,6 +588,8 @@ void __init xen_hvm_init_time_ops(void)
1963 x86_platform.calibrate_tsc = xen_tsc_khz;
1964 x86_platform.get_wallclock = xen_get_wallclock;
1965 x86_platform.set_wallclock = xen_set_wallclock;
1966 +
1967 + hvm_time_initialized = true;
1968 }
1969 #endif
1970
1971 diff --git a/arch/xtensa/boot/dts/xtfpga-flash-128m.dtsi b/arch/xtensa/boot/dts/xtfpga-flash-128m.dtsi
1972 index 9bf8bad1dd18a..c33932568aa73 100644
1973 --- a/arch/xtensa/boot/dts/xtfpga-flash-128m.dtsi
1974 +++ b/arch/xtensa/boot/dts/xtfpga-flash-128m.dtsi
1975 @@ -8,19 +8,19 @@
1976 reg = <0x00000000 0x08000000>;
1977 bank-width = <2>;
1978 device-width = <2>;
1979 - partition@0x0 {
1980 + partition@0 {
1981 label = "data";
1982 reg = <0x00000000 0x06000000>;
1983 };
1984 - partition@0x6000000 {
1985 + partition@6000000 {
1986 label = "boot loader area";
1987 reg = <0x06000000 0x00800000>;
1988 };
1989 - partition@0x6800000 {
1990 + partition@6800000 {
1991 label = "kernel image";
1992 reg = <0x06800000 0x017e0000>;
1993 };
1994 - partition@0x7fe0000 {
1995 + partition@7fe0000 {
1996 label = "boot environment";
1997 reg = <0x07fe0000 0x00020000>;
1998 };
1999 diff --git a/arch/xtensa/boot/dts/xtfpga-flash-16m.dtsi b/arch/xtensa/boot/dts/xtfpga-flash-16m.dtsi
2000 index 40c2f81f7cb66..7bde2ab2d6fb5 100644
2001 --- a/arch/xtensa/boot/dts/xtfpga-flash-16m.dtsi
2002 +++ b/arch/xtensa/boot/dts/xtfpga-flash-16m.dtsi
2003 @@ -8,19 +8,19 @@
2004 reg = <0x08000000 0x01000000>;
2005 bank-width = <2>;
2006 device-width = <2>;
2007 - partition@0x0 {
2008 + partition@0 {
2009 label = "boot loader area";
2010 reg = <0x00000000 0x00400000>;
2011 };
2012 - partition@0x400000 {
2013 + partition@400000 {
2014 label = "kernel image";
2015 reg = <0x00400000 0x00600000>;
2016 };
2017 - partition@0xa00000 {
2018 + partition@a00000 {
2019 label = "data";
2020 reg = <0x00a00000 0x005e0000>;
2021 };
2022 - partition@0xfe0000 {
2023 + partition@fe0000 {
2024 label = "boot environment";
2025 reg = <0x00fe0000 0x00020000>;
2026 };
2027 diff --git a/arch/xtensa/boot/dts/xtfpga-flash-4m.dtsi b/arch/xtensa/boot/dts/xtfpga-flash-4m.dtsi
2028 index fb8d3a9f33c23..0655b868749a4 100644
2029 --- a/arch/xtensa/boot/dts/xtfpga-flash-4m.dtsi
2030 +++ b/arch/xtensa/boot/dts/xtfpga-flash-4m.dtsi
2031 @@ -8,11 +8,11 @@
2032 reg = <0x08000000 0x00400000>;
2033 bank-width = <2>;
2034 device-width = <2>;
2035 - partition@0x0 {
2036 + partition@0 {
2037 label = "boot loader area";
2038 reg = <0x00000000 0x003f0000>;
2039 };
2040 - partition@0x3f0000 {
2041 + partition@3f0000 {
2042 label = "boot environment";
2043 reg = <0x003f0000 0x00010000>;
2044 };
2045 diff --git a/arch/xtensa/include/asm/processor.h b/arch/xtensa/include/asm/processor.h
2046 index 7495520d7a3e9..fd1161de45356 100644
2047 --- a/arch/xtensa/include/asm/processor.h
2048 +++ b/arch/xtensa/include/asm/processor.h
2049 @@ -225,8 +225,8 @@ extern unsigned long get_wchan(struct task_struct *p);
2050
2051 #define xtensa_set_sr(x, sr) \
2052 ({ \
2053 - unsigned int v = (unsigned int)(x); \
2054 - __asm__ __volatile__ ("wsr %0, "__stringify(sr) :: "a"(v)); \
2055 + __asm__ __volatile__ ("wsr %0, "__stringify(sr) :: \
2056 + "a"((unsigned int)(x))); \
2057 })
2058
2059 #define xtensa_get_sr(sr) \
2060 diff --git a/arch/xtensa/kernel/jump_label.c b/arch/xtensa/kernel/jump_label.c
2061 index 61cf6497a646b..0dde21e0d3de4 100644
2062 --- a/arch/xtensa/kernel/jump_label.c
2063 +++ b/arch/xtensa/kernel/jump_label.c
2064 @@ -61,7 +61,7 @@ static void patch_text(unsigned long addr, const void *data, size_t sz)
2065 .data = data,
2066 };
2067 stop_machine_cpuslocked(patch_text_stop_machine,
2068 - &patch, NULL);
2069 + &patch, cpu_online_mask);
2070 } else {
2071 unsigned long flags;
2072
2073 diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c
2074 index 342a1cfa48c57..c17eb794f0aef 100644
2075 --- a/block/bfq-cgroup.c
2076 +++ b/block/bfq-cgroup.c
2077 @@ -625,6 +625,12 @@ void bfq_bfqq_move(struct bfq_data *bfqd, struct bfq_queue *bfqq,
2078 {
2079 struct bfq_entity *entity = &bfqq->entity;
2080
2081 + /*
2082 + * oom_bfqq is not allowed to move, oom_bfqq will hold ref to root_group
2083 + * until elevator exit.
2084 + */
2085 + if (bfqq == &bfqd->oom_bfqq)
2086 + return;
2087 /*
2088 * Get extra reference to prevent bfqq from being freed in
2089 * next possible expire or deactivate.
2090 diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
2091 index 1a0c581512f28..1d443d17cf7c5 100644
2092 --- a/block/bfq-iosched.c
2093 +++ b/block/bfq-iosched.c
2094 @@ -2523,6 +2523,15 @@ bfq_setup_merge(struct bfq_queue *bfqq, struct bfq_queue *new_bfqq)
2095 * are likely to increase the throughput.
2096 */
2097 bfqq->new_bfqq = new_bfqq;
2098 + /*
2099 + * The above assignment schedules the following redirections:
2100 + * each time some I/O for bfqq arrives, the process that
2101 + * generated that I/O is disassociated from bfqq and
2102 + * associated with new_bfqq. Here we increases new_bfqq->ref
2103 + * in advance, adding the number of processes that are
2104 + * expected to be associated with new_bfqq as they happen to
2105 + * issue I/O.
2106 + */
2107 new_bfqq->ref += process_refs;
2108 return new_bfqq;
2109 }
2110 @@ -2582,6 +2591,10 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq,
2111 {
2112 struct bfq_queue *in_service_bfqq, *new_bfqq;
2113
2114 + /* if a merge has already been setup, then proceed with that first */
2115 + if (bfqq->new_bfqq)
2116 + return bfqq->new_bfqq;
2117 +
2118 /*
2119 * Do not perform queue merging if the device is non
2120 * rotational and performs internal queueing. In fact, such a
2121 @@ -2636,9 +2649,6 @@ bfq_setup_cooperator(struct bfq_data *bfqd, struct bfq_queue *bfqq,
2122 if (bfq_too_late_for_merging(bfqq))
2123 return NULL;
2124
2125 - if (bfqq->new_bfqq)
2126 - return bfqq->new_bfqq;
2127 -
2128 if (!io_struct || unlikely(bfqq == &bfqd->oom_bfqq))
2129 return NULL;
2130
2131 @@ -4793,7 +4803,7 @@ static struct request *bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
2132 struct bfq_data *bfqd = hctx->queue->elevator->elevator_data;
2133 struct request *rq;
2134 struct bfq_queue *in_serv_queue;
2135 - bool waiting_rq, idle_timer_disabled;
2136 + bool waiting_rq, idle_timer_disabled = false;
2137
2138 spin_lock_irq(&bfqd->lock);
2139
2140 @@ -4801,14 +4811,15 @@ static struct request *bfq_dispatch_request(struct blk_mq_hw_ctx *hctx)
2141 waiting_rq = in_serv_queue && bfq_bfqq_wait_request(in_serv_queue);
2142
2143 rq = __bfq_dispatch_request(hctx);
2144 -
2145 - idle_timer_disabled =
2146 - waiting_rq && !bfq_bfqq_wait_request(in_serv_queue);
2147 + if (in_serv_queue == bfqd->in_service_queue) {
2148 + idle_timer_disabled =
2149 + waiting_rq && !bfq_bfqq_wait_request(in_serv_queue);
2150 + }
2151
2152 spin_unlock_irq(&bfqd->lock);
2153 -
2154 - bfq_update_dispatch_stats(hctx->queue, rq, in_serv_queue,
2155 - idle_timer_disabled);
2156 + bfq_update_dispatch_stats(hctx->queue, rq,
2157 + idle_timer_disabled ? in_serv_queue : NULL,
2158 + idle_timer_disabled);
2159
2160 return rq;
2161 }
2162 diff --git a/block/blk-merge.c b/block/blk-merge.c
2163 index 4b022f0c49d20..a62692d135660 100644
2164 --- a/block/blk-merge.c
2165 +++ b/block/blk-merge.c
2166 @@ -7,6 +7,7 @@
2167 #include <linux/bio.h>
2168 #include <linux/blkdev.h>
2169 #include <linux/scatterlist.h>
2170 +#include <linux/blk-cgroup.h>
2171
2172 #include <trace/events/block.h>
2173
2174 @@ -571,6 +572,9 @@ static inline unsigned int blk_rq_get_max_segments(struct request *rq)
2175 static inline int ll_new_hw_segment(struct request *req, struct bio *bio,
2176 unsigned int nr_phys_segs)
2177 {
2178 + if (!blk_cgroup_mergeable(req, bio))
2179 + goto no_merge;
2180 +
2181 if (blk_integrity_merge_bio(req->q, req, bio) == false)
2182 goto no_merge;
2183
2184 @@ -662,6 +666,9 @@ static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
2185 if (total_phys_segments > blk_rq_get_max_segments(req))
2186 return 0;
2187
2188 + if (!blk_cgroup_mergeable(req, next->bio))
2189 + return 0;
2190 +
2191 if (blk_integrity_merge_rq(q, req, next) == false)
2192 return 0;
2193
2194 @@ -885,6 +892,10 @@ bool blk_rq_merge_ok(struct request *rq, struct bio *bio)
2195 if (rq->rq_disk != bio->bi_disk)
2196 return false;
2197
2198 + /* don't merge across cgroup boundaries */
2199 + if (!blk_cgroup_mergeable(rq, bio))
2200 + return false;
2201 +
2202 /* only merge integrity protected bio into ditto rq */
2203 if (blk_integrity_merge_bio(rq->q, rq, bio) == false)
2204 return false;
2205 diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
2206 index bf33570da5ac7..3fb37135264b2 100644
2207 --- a/block/blk-sysfs.c
2208 +++ b/block/blk-sysfs.c
2209 @@ -1060,15 +1060,17 @@ void blk_unregister_queue(struct gendisk *disk)
2210 */
2211 if (queue_is_mq(q))
2212 blk_mq_unregister_dev(disk_to_dev(disk), q);
2213 -
2214 - kobject_uevent(&q->kobj, KOBJ_REMOVE);
2215 - kobject_del(&q->kobj);
2216 blk_trace_remove_sysfs(disk_to_dev(disk));
2217
2218 mutex_lock(&q->sysfs_lock);
2219 if (q->elevator)
2220 elv_unregister_queue(q);
2221 mutex_unlock(&q->sysfs_lock);
2222 +
2223 + /* Now that we've deleted all child objects, we can delete the queue. */
2224 + kobject_uevent(&q->kobj, KOBJ_REMOVE);
2225 + kobject_del(&q->kobj);
2226 +
2227 mutex_unlock(&q->sysfs_dir_lock);
2228
2229 kobject_put(&disk_to_dev(disk)->kobj);
2230 diff --git a/crypto/authenc.c b/crypto/authenc.c
2231 index 3f0ed94025820..321da90389957 100644
2232 --- a/crypto/authenc.c
2233 +++ b/crypto/authenc.c
2234 @@ -263,7 +263,7 @@ static int crypto_authenc_decrypt_tail(struct aead_request *req,
2235 dst = scatterwalk_ffwd(areq_ctx->dst, req->dst, req->assoclen);
2236
2237 skcipher_request_set_tfm(skreq, ctx->enc);
2238 - skcipher_request_set_callback(skreq, aead_request_flags(req),
2239 + skcipher_request_set_callback(skreq, flags,
2240 req->base.complete, req->base.data);
2241 skcipher_request_set_crypt(skreq, src, dst,
2242 req->cryptlen - authsize, req->iv);
2243 diff --git a/crypto/rsa-pkcs1pad.c b/crypto/rsa-pkcs1pad.c
2244 index 0aa489711ec49..9cbafaf6dd851 100644
2245 --- a/crypto/rsa-pkcs1pad.c
2246 +++ b/crypto/rsa-pkcs1pad.c
2247 @@ -475,6 +475,8 @@ static int pkcs1pad_verify_complete(struct akcipher_request *req, int err)
2248 pos++;
2249
2250 if (digest_info) {
2251 + if (digest_info->size > dst_len - pos)
2252 + goto done;
2253 if (crypto_memneq(out_buf + pos, digest_info->data,
2254 digest_info->size))
2255 goto done;
2256 @@ -494,7 +496,7 @@ static int pkcs1pad_verify_complete(struct akcipher_request *req, int err)
2257 sg_nents_for_len(req->src,
2258 req->src_len + req->dst_len),
2259 req_ctx->out_buf + ctx->key_size,
2260 - req->dst_len, ctx->key_size);
2261 + req->dst_len, req->src_len);
2262 /* Do the actual verification step. */
2263 if (memcmp(req_ctx->out_buf + ctx->key_size, out_buf + pos,
2264 req->dst_len) != 0)
2265 @@ -537,7 +539,7 @@ static int pkcs1pad_verify(struct akcipher_request *req)
2266
2267 if (WARN_ON(req->dst) ||
2268 WARN_ON(!req->dst_len) ||
2269 - !ctx->key_size || req->src_len < ctx->key_size)
2270 + !ctx->key_size || req->src_len != ctx->key_size)
2271 return -EINVAL;
2272
2273 req_ctx->out_buf = kmalloc(ctx->key_size + req->dst_len, GFP_KERNEL);
2274 diff --git a/drivers/acpi/acpica/nswalk.c b/drivers/acpi/acpica/nswalk.c
2275 index ceea6af79d121..bf4eb642f4232 100644
2276 --- a/drivers/acpi/acpica/nswalk.c
2277 +++ b/drivers/acpi/acpica/nswalk.c
2278 @@ -169,6 +169,9 @@ acpi_ns_walk_namespace(acpi_object_type type,
2279
2280 if (start_node == ACPI_ROOT_OBJECT) {
2281 start_node = acpi_gbl_root_node;
2282 + if (!start_node) {
2283 + return_ACPI_STATUS(AE_NO_NAMESPACE);
2284 + }
2285 }
2286
2287 /* Null child means "get first node" */
2288 diff --git a/drivers/acpi/apei/bert.c b/drivers/acpi/apei/bert.c
2289 index 1155fb9dcc3ad..76b7539a37a93 100644
2290 --- a/drivers/acpi/apei/bert.c
2291 +++ b/drivers/acpi/apei/bert.c
2292 @@ -29,6 +29,7 @@
2293
2294 #undef pr_fmt
2295 #define pr_fmt(fmt) "BERT: " fmt
2296 +#define ACPI_BERT_PRINT_MAX_LEN 1024
2297
2298 static int bert_disable;
2299
2300 @@ -58,8 +59,11 @@ static void __init bert_print_all(struct acpi_bert_region *region,
2301 }
2302
2303 pr_info_once("Error records from previous boot:\n");
2304 -
2305 - cper_estatus_print(KERN_INFO HW_ERR, estatus);
2306 + if (region_len < ACPI_BERT_PRINT_MAX_LEN)
2307 + cper_estatus_print(KERN_INFO HW_ERR, estatus);
2308 + else
2309 + pr_info_once("Max print length exceeded, table data is available at:\n"
2310 + "/sys/firmware/acpi/tables/data/BERT");
2311
2312 /*
2313 * Because the boot error source is "one-time polled" type,
2314 @@ -77,7 +81,7 @@ static int __init setup_bert_disable(char *str)
2315 {
2316 bert_disable = 1;
2317
2318 - return 0;
2319 + return 1;
2320 }
2321 __setup("bert_disable", setup_bert_disable);
2322
2323 diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c
2324 index 2015a0967cbbf..5ee3cb7fcd906 100644
2325 --- a/drivers/acpi/apei/erst.c
2326 +++ b/drivers/acpi/apei/erst.c
2327 @@ -891,7 +891,7 @@ EXPORT_SYMBOL_GPL(erst_clear);
2328 static int __init setup_erst_disable(char *str)
2329 {
2330 erst_disable = 1;
2331 - return 0;
2332 + return 1;
2333 }
2334
2335 __setup("erst_disable", setup_erst_disable);
2336 diff --git a/drivers/acpi/apei/hest.c b/drivers/acpi/apei/hest.c
2337 index 267bdbf6a7bf0..add6416e78f23 100644
2338 --- a/drivers/acpi/apei/hest.c
2339 +++ b/drivers/acpi/apei/hest.c
2340 @@ -219,7 +219,7 @@ err:
2341 static int __init setup_hest_disable(char *str)
2342 {
2343 hest_disable = HEST_DISABLED;
2344 - return 0;
2345 + return 1;
2346 }
2347
2348 __setup("hest_disable", setup_hest_disable);
2349 diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
2350 index 2826bd45c61a1..0521b1d4c2fd0 100644
2351 --- a/drivers/acpi/cppc_acpi.c
2352 +++ b/drivers/acpi/cppc_acpi.c
2353 @@ -738,6 +738,11 @@ int acpi_cppc_processor_probe(struct acpi_processor *pr)
2354 cpc_obj = &out_obj->package.elements[0];
2355 if (cpc_obj->type == ACPI_TYPE_INTEGER) {
2356 num_ent = cpc_obj->integer.value;
2357 + if (num_ent <= 1) {
2358 + pr_debug("Unexpected _CPC NumEntries value (%d) for CPU:%d\n",
2359 + num_ent, pr->id);
2360 + goto out_free;
2361 + }
2362 } else {
2363 pr_debug("Unexpected entry type(%d) for NumEntries\n",
2364 cpc_obj->type);
2365 diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
2366 index 53ae679c00f01..0ea5e677f00ee 100644
2367 --- a/drivers/acpi/processor_idle.c
2368 +++ b/drivers/acpi/processor_idle.c
2369 @@ -1201,6 +1201,11 @@ static int flatten_lpi_states(struct acpi_processor *pr,
2370 return 0;
2371 }
2372
2373 +int __weak acpi_processor_ffh_lpi_probe(unsigned int cpu)
2374 +{
2375 + return -EOPNOTSUPP;
2376 +}
2377 +
2378 static int acpi_processor_get_lpi_info(struct acpi_processor *pr)
2379 {
2380 int ret, i;
2381 @@ -1209,6 +1214,11 @@ static int acpi_processor_get_lpi_info(struct acpi_processor *pr)
2382 struct acpi_device *d = NULL;
2383 struct acpi_lpi_states_array info[2], *tmp, *prev, *curr;
2384
2385 + /* make sure our architecture has support */
2386 + ret = acpi_processor_ffh_lpi_probe(pr->id);
2387 + if (ret == -EOPNOTSUPP)
2388 + return ret;
2389 +
2390 if (!osc_pc_lpi_support_confirmed)
2391 return -EOPNOTSUPP;
2392
2393 @@ -1260,11 +1270,6 @@ static int acpi_processor_get_lpi_info(struct acpi_processor *pr)
2394 return 0;
2395 }
2396
2397 -int __weak acpi_processor_ffh_lpi_probe(unsigned int cpu)
2398 -{
2399 - return -ENODEV;
2400 -}
2401 -
2402 int __weak acpi_processor_ffh_lpi_enter(struct acpi_lpi_state *lpi)
2403 {
2404 return -ENODEV;
2405 diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
2406 index a08e3eb2a6f9f..a4b7cdd0c8446 100644
2407 --- a/drivers/acpi/property.c
2408 +++ b/drivers/acpi/property.c
2409 @@ -692,7 +692,7 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
2410 */
2411 if (obj->type == ACPI_TYPE_LOCAL_REFERENCE) {
2412 if (index)
2413 - return -EINVAL;
2414 + return -ENOENT;
2415
2416 ret = acpi_bus_get_device(obj->reference.handle, &device);
2417 if (ret)
2418 diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
2419 index 982fe91125322..464260f668708 100644
2420 --- a/drivers/ata/sata_dwc_460ex.c
2421 +++ b/drivers/ata/sata_dwc_460ex.c
2422 @@ -145,7 +145,11 @@ struct sata_dwc_device {
2423 #endif
2424 };
2425
2426 -#define SATA_DWC_QCMD_MAX 32
2427 +/*
2428 + * Allow one extra special slot for commands and DMA management
2429 + * to account for libata internal commands.
2430 + */
2431 +#define SATA_DWC_QCMD_MAX (ATA_MAX_QUEUE + 1)
2432
2433 struct sata_dwc_device_port {
2434 struct sata_dwc_device *hsdev;
2435 diff --git a/drivers/base/dd.c b/drivers/base/dd.c
2436 index cf7e5b4afc1be..26cd4ce3ac75f 100644
2437 --- a/drivers/base/dd.c
2438 +++ b/drivers/base/dd.c
2439 @@ -747,7 +747,7 @@ static int __init save_async_options(char *buf)
2440 "Too long list of driver names for 'driver_async_probe'!\n");
2441
2442 strlcpy(async_probe_drv_names, buf, ASYNC_DRV_NAMES_MAX_LEN);
2443 - return 0;
2444 + return 1;
2445 }
2446 __setup("driver_async_probe=", save_async_options);
2447
2448 diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
2449 index 23af545120534..ae382c4018fd8 100644
2450 --- a/drivers/base/power/main.c
2451 +++ b/drivers/base/power/main.c
2452 @@ -2121,7 +2121,9 @@ static bool pm_ops_is_empty(const struct dev_pm_ops *ops)
2453
2454 void device_pm_check_callbacks(struct device *dev)
2455 {
2456 - spin_lock_irq(&dev->power.lock);
2457 + unsigned long flags;
2458 +
2459 + spin_lock_irqsave(&dev->power.lock, flags);
2460 dev->power.no_pm_callbacks =
2461 (!dev->bus || (pm_ops_is_empty(dev->bus->pm) &&
2462 !dev->bus->suspend && !dev->bus->resume)) &&
2463 @@ -2130,7 +2132,7 @@ void device_pm_check_callbacks(struct device *dev)
2464 (!dev->pm_domain || pm_ops_is_empty(&dev->pm_domain->ops)) &&
2465 (!dev->driver || (pm_ops_is_empty(dev->driver->pm) &&
2466 !dev->driver->suspend && !dev->driver->resume));
2467 - spin_unlock_irq(&dev->power.lock);
2468 + spin_unlock_irqrestore(&dev->power.lock, flags);
2469 }
2470
2471 bool dev_pm_smart_suspend_and_suspended(struct device *dev)
2472 diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
2473 index ddbf56014c51a..6da7f5749a7c4 100644
2474 --- a/drivers/block/drbd/drbd_int.h
2475 +++ b/drivers/block/drbd/drbd_int.h
2476 @@ -1673,22 +1673,22 @@ struct sib_info {
2477 };
2478 void drbd_bcast_event(struct drbd_device *device, const struct sib_info *sib);
2479
2480 -extern void notify_resource_state(struct sk_buff *,
2481 +extern int notify_resource_state(struct sk_buff *,
2482 unsigned int,
2483 struct drbd_resource *,
2484 struct resource_info *,
2485 enum drbd_notification_type);
2486 -extern void notify_device_state(struct sk_buff *,
2487 +extern int notify_device_state(struct sk_buff *,
2488 unsigned int,
2489 struct drbd_device *,
2490 struct device_info *,
2491 enum drbd_notification_type);
2492 -extern void notify_connection_state(struct sk_buff *,
2493 +extern int notify_connection_state(struct sk_buff *,
2494 unsigned int,
2495 struct drbd_connection *,
2496 struct connection_info *,
2497 enum drbd_notification_type);
2498 -extern void notify_peer_device_state(struct sk_buff *,
2499 +extern int notify_peer_device_state(struct sk_buff *,
2500 unsigned int,
2501 struct drbd_peer_device *,
2502 struct peer_device_info *,
2503 diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
2504 index 5d52a2d321559..bfb00d3b091f1 100644
2505 --- a/drivers/block/drbd/drbd_nl.c
2506 +++ b/drivers/block/drbd/drbd_nl.c
2507 @@ -4630,7 +4630,7 @@ static int nla_put_notification_header(struct sk_buff *msg,
2508 return drbd_notification_header_to_skb(msg, &nh, true);
2509 }
2510
2511 -void notify_resource_state(struct sk_buff *skb,
2512 +int notify_resource_state(struct sk_buff *skb,
2513 unsigned int seq,
2514 struct drbd_resource *resource,
2515 struct resource_info *resource_info,
2516 @@ -4672,16 +4672,17 @@ void notify_resource_state(struct sk_buff *skb,
2517 if (err && err != -ESRCH)
2518 goto failed;
2519 }
2520 - return;
2521 + return 0;
2522
2523 nla_put_failure:
2524 nlmsg_free(skb);
2525 failed:
2526 drbd_err(resource, "Error %d while broadcasting event. Event seq:%u\n",
2527 err, seq);
2528 + return err;
2529 }
2530
2531 -void notify_device_state(struct sk_buff *skb,
2532 +int notify_device_state(struct sk_buff *skb,
2533 unsigned int seq,
2534 struct drbd_device *device,
2535 struct device_info *device_info,
2536 @@ -4721,16 +4722,17 @@ void notify_device_state(struct sk_buff *skb,
2537 if (err && err != -ESRCH)
2538 goto failed;
2539 }
2540 - return;
2541 + return 0;
2542
2543 nla_put_failure:
2544 nlmsg_free(skb);
2545 failed:
2546 drbd_err(device, "Error %d while broadcasting event. Event seq:%u\n",
2547 err, seq);
2548 + return err;
2549 }
2550
2551 -void notify_connection_state(struct sk_buff *skb,
2552 +int notify_connection_state(struct sk_buff *skb,
2553 unsigned int seq,
2554 struct drbd_connection *connection,
2555 struct connection_info *connection_info,
2556 @@ -4770,16 +4772,17 @@ void notify_connection_state(struct sk_buff *skb,
2557 if (err && err != -ESRCH)
2558 goto failed;
2559 }
2560 - return;
2561 + return 0;
2562
2563 nla_put_failure:
2564 nlmsg_free(skb);
2565 failed:
2566 drbd_err(connection, "Error %d while broadcasting event. Event seq:%u\n",
2567 err, seq);
2568 + return err;
2569 }
2570
2571 -void notify_peer_device_state(struct sk_buff *skb,
2572 +int notify_peer_device_state(struct sk_buff *skb,
2573 unsigned int seq,
2574 struct drbd_peer_device *peer_device,
2575 struct peer_device_info *peer_device_info,
2576 @@ -4820,13 +4823,14 @@ void notify_peer_device_state(struct sk_buff *skb,
2577 if (err && err != -ESRCH)
2578 goto failed;
2579 }
2580 - return;
2581 + return 0;
2582
2583 nla_put_failure:
2584 nlmsg_free(skb);
2585 failed:
2586 drbd_err(peer_device, "Error %d while broadcasting event. Event seq:%u\n",
2587 err, seq);
2588 + return err;
2589 }
2590
2591 void notify_helper(enum drbd_notification_type type,
2592 @@ -4877,7 +4881,7 @@ fail:
2593 err, seq);
2594 }
2595
2596 -static void notify_initial_state_done(struct sk_buff *skb, unsigned int seq)
2597 +static int notify_initial_state_done(struct sk_buff *skb, unsigned int seq)
2598 {
2599 struct drbd_genlmsghdr *dh;
2600 int err;
2601 @@ -4891,11 +4895,12 @@ static void notify_initial_state_done(struct sk_buff *skb, unsigned int seq)
2602 if (nla_put_notification_header(skb, NOTIFY_EXISTS))
2603 goto nla_put_failure;
2604 genlmsg_end(skb, dh);
2605 - return;
2606 + return 0;
2607
2608 nla_put_failure:
2609 nlmsg_free(skb);
2610 pr_err("Error %d sending event. Event seq:%u\n", err, seq);
2611 + return err;
2612 }
2613
2614 static void free_state_changes(struct list_head *list)
2615 @@ -4922,6 +4927,7 @@ static int get_initial_state(struct sk_buff *skb, struct netlink_callback *cb)
2616 unsigned int seq = cb->args[2];
2617 unsigned int n;
2618 enum drbd_notification_type flags = 0;
2619 + int err = 0;
2620
2621 /* There is no need for taking notification_mutex here: it doesn't
2622 matter if the initial state events mix with later state chage
2623 @@ -4930,32 +4936,32 @@ static int get_initial_state(struct sk_buff *skb, struct netlink_callback *cb)
2624
2625 cb->args[5]--;
2626 if (cb->args[5] == 1) {
2627 - notify_initial_state_done(skb, seq);
2628 + err = notify_initial_state_done(skb, seq);
2629 goto out;
2630 }
2631 n = cb->args[4]++;
2632 if (cb->args[4] < cb->args[3])
2633 flags |= NOTIFY_CONTINUES;
2634 if (n < 1) {
2635 - notify_resource_state_change(skb, seq, state_change->resource,
2636 + err = notify_resource_state_change(skb, seq, state_change->resource,
2637 NOTIFY_EXISTS | flags);
2638 goto next;
2639 }
2640 n--;
2641 if (n < state_change->n_connections) {
2642 - notify_connection_state_change(skb, seq, &state_change->connections[n],
2643 + err = notify_connection_state_change(skb, seq, &state_change->connections[n],
2644 NOTIFY_EXISTS | flags);
2645 goto next;
2646 }
2647 n -= state_change->n_connections;
2648 if (n < state_change->n_devices) {
2649 - notify_device_state_change(skb, seq, &state_change->devices[n],
2650 + err = notify_device_state_change(skb, seq, &state_change->devices[n],
2651 NOTIFY_EXISTS | flags);
2652 goto next;
2653 }
2654 n -= state_change->n_devices;
2655 if (n < state_change->n_devices * state_change->n_connections) {
2656 - notify_peer_device_state_change(skb, seq, &state_change->peer_devices[n],
2657 + err = notify_peer_device_state_change(skb, seq, &state_change->peer_devices[n],
2658 NOTIFY_EXISTS | flags);
2659 goto next;
2660 }
2661 @@ -4970,7 +4976,10 @@ next:
2662 cb->args[4] = 0;
2663 }
2664 out:
2665 - return skb->len;
2666 + if (err)
2667 + return err;
2668 + else
2669 + return skb->len;
2670 }
2671
2672 int drbd_adm_get_initial_state(struct sk_buff *skb, struct netlink_callback *cb)
2673 diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c
2674 index f86cea4c0f8df..5e92632881d81 100644
2675 --- a/drivers/block/drbd/drbd_req.c
2676 +++ b/drivers/block/drbd/drbd_req.c
2677 @@ -195,7 +195,8 @@ void start_new_tl_epoch(struct drbd_connection *connection)
2678 void complete_master_bio(struct drbd_device *device,
2679 struct bio_and_error *m)
2680 {
2681 - m->bio->bi_status = errno_to_blk_status(m->error);
2682 + if (unlikely(m->error))
2683 + m->bio->bi_status = errno_to_blk_status(m->error);
2684 bio_endio(m->bio);
2685 dec_ap_bio(device);
2686 }
2687 diff --git a/drivers/block/drbd/drbd_state.c b/drivers/block/drbd/drbd_state.c
2688 index eeaa3b49b2649..4dad4dd0ceb66 100644
2689 --- a/drivers/block/drbd/drbd_state.c
2690 +++ b/drivers/block/drbd/drbd_state.c
2691 @@ -1537,7 +1537,7 @@ int drbd_bitmap_io_from_worker(struct drbd_device *device,
2692 return rv;
2693 }
2694
2695 -void notify_resource_state_change(struct sk_buff *skb,
2696 +int notify_resource_state_change(struct sk_buff *skb,
2697 unsigned int seq,
2698 struct drbd_resource_state_change *resource_state_change,
2699 enum drbd_notification_type type)
2700 @@ -1550,10 +1550,10 @@ void notify_resource_state_change(struct sk_buff *skb,
2701 .res_susp_fen = resource_state_change->susp_fen[NEW],
2702 };
2703
2704 - notify_resource_state(skb, seq, resource, &resource_info, type);
2705 + return notify_resource_state(skb, seq, resource, &resource_info, type);
2706 }
2707
2708 -void notify_connection_state_change(struct sk_buff *skb,
2709 +int notify_connection_state_change(struct sk_buff *skb,
2710 unsigned int seq,
2711 struct drbd_connection_state_change *connection_state_change,
2712 enum drbd_notification_type type)
2713 @@ -1564,10 +1564,10 @@ void notify_connection_state_change(struct sk_buff *skb,
2714 .conn_role = connection_state_change->peer_role[NEW],
2715 };
2716
2717 - notify_connection_state(skb, seq, connection, &connection_info, type);
2718 + return notify_connection_state(skb, seq, connection, &connection_info, type);
2719 }
2720
2721 -void notify_device_state_change(struct sk_buff *skb,
2722 +int notify_device_state_change(struct sk_buff *skb,
2723 unsigned int seq,
2724 struct drbd_device_state_change *device_state_change,
2725 enum drbd_notification_type type)
2726 @@ -1577,10 +1577,10 @@ void notify_device_state_change(struct sk_buff *skb,
2727 .dev_disk_state = device_state_change->disk_state[NEW],
2728 };
2729
2730 - notify_device_state(skb, seq, device, &device_info, type);
2731 + return notify_device_state(skb, seq, device, &device_info, type);
2732 }
2733
2734 -void notify_peer_device_state_change(struct sk_buff *skb,
2735 +int notify_peer_device_state_change(struct sk_buff *skb,
2736 unsigned int seq,
2737 struct drbd_peer_device_state_change *p,
2738 enum drbd_notification_type type)
2739 @@ -1594,7 +1594,7 @@ void notify_peer_device_state_change(struct sk_buff *skb,
2740 .peer_resync_susp_dependency = p->resync_susp_dependency[NEW],
2741 };
2742
2743 - notify_peer_device_state(skb, seq, peer_device, &peer_device_info, type);
2744 + return notify_peer_device_state(skb, seq, peer_device, &peer_device_info, type);
2745 }
2746
2747 static void broadcast_state_change(struct drbd_state_change *state_change)
2748 @@ -1602,7 +1602,7 @@ static void broadcast_state_change(struct drbd_state_change *state_change)
2749 struct drbd_resource_state_change *resource_state_change = &state_change->resource[0];
2750 bool resource_state_has_changed;
2751 unsigned int n_device, n_connection, n_peer_device, n_peer_devices;
2752 - void (*last_func)(struct sk_buff *, unsigned int, void *,
2753 + int (*last_func)(struct sk_buff *, unsigned int, void *,
2754 enum drbd_notification_type) = NULL;
2755 void *uninitialized_var(last_arg);
2756
2757 diff --git a/drivers/block/drbd/drbd_state_change.h b/drivers/block/drbd/drbd_state_change.h
2758 index ba80f612d6abb..d5b0479bc9a66 100644
2759 --- a/drivers/block/drbd/drbd_state_change.h
2760 +++ b/drivers/block/drbd/drbd_state_change.h
2761 @@ -44,19 +44,19 @@ extern struct drbd_state_change *remember_old_state(struct drbd_resource *, gfp_
2762 extern void copy_old_to_new_state_change(struct drbd_state_change *);
2763 extern void forget_state_change(struct drbd_state_change *);
2764
2765 -extern void notify_resource_state_change(struct sk_buff *,
2766 +extern int notify_resource_state_change(struct sk_buff *,
2767 unsigned int,
2768 struct drbd_resource_state_change *,
2769 enum drbd_notification_type type);
2770 -extern void notify_connection_state_change(struct sk_buff *,
2771 +extern int notify_connection_state_change(struct sk_buff *,
2772 unsigned int,
2773 struct drbd_connection_state_change *,
2774 enum drbd_notification_type type);
2775 -extern void notify_device_state_change(struct sk_buff *,
2776 +extern int notify_device_state_change(struct sk_buff *,
2777 unsigned int,
2778 struct drbd_device_state_change *,
2779 enum drbd_notification_type type);
2780 -extern void notify_peer_device_state_change(struct sk_buff *,
2781 +extern int notify_peer_device_state_change(struct sk_buff *,
2782 unsigned int,
2783 struct drbd_peer_device_state_change *,
2784 enum drbd_notification_type type);
2785 diff --git a/drivers/block/loop.c b/drivers/block/loop.c
2786 index ffbe792410d1c..6b3e27b8cd245 100644
2787 --- a/drivers/block/loop.c
2788 +++ b/drivers/block/loop.c
2789 @@ -794,33 +794,33 @@ static ssize_t loop_attr_backing_file_show(struct loop_device *lo, char *buf)
2790
2791 static ssize_t loop_attr_offset_show(struct loop_device *lo, char *buf)
2792 {
2793 - return sprintf(buf, "%llu\n", (unsigned long long)lo->lo_offset);
2794 + return sysfs_emit(buf, "%llu\n", (unsigned long long)lo->lo_offset);
2795 }
2796
2797 static ssize_t loop_attr_sizelimit_show(struct loop_device *lo, char *buf)
2798 {
2799 - return sprintf(buf, "%llu\n", (unsigned long long)lo->lo_sizelimit);
2800 + return sysfs_emit(buf, "%llu\n", (unsigned long long)lo->lo_sizelimit);
2801 }
2802
2803 static ssize_t loop_attr_autoclear_show(struct loop_device *lo, char *buf)
2804 {
2805 int autoclear = (lo->lo_flags & LO_FLAGS_AUTOCLEAR);
2806
2807 - return sprintf(buf, "%s\n", autoclear ? "1" : "0");
2808 + return sysfs_emit(buf, "%s\n", autoclear ? "1" : "0");
2809 }
2810
2811 static ssize_t loop_attr_partscan_show(struct loop_device *lo, char *buf)
2812 {
2813 int partscan = (lo->lo_flags & LO_FLAGS_PARTSCAN);
2814
2815 - return sprintf(buf, "%s\n", partscan ? "1" : "0");
2816 + return sysfs_emit(buf, "%s\n", partscan ? "1" : "0");
2817 }
2818
2819 static ssize_t loop_attr_dio_show(struct loop_device *lo, char *buf)
2820 {
2821 int dio = (lo->lo_flags & LO_FLAGS_DIRECT_IO);
2822
2823 - return sprintf(buf, "%s\n", dio ? "1" : "0");
2824 + return sysfs_emit(buf, "%s\n", dio ? "1" : "0");
2825 }
2826
2827 LOOP_ATTR_RO(backing_file);
2828 diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
2829 index 4b3645e648ee9..2a5cd502feae7 100644
2830 --- a/drivers/block/virtio_blk.c
2831 +++ b/drivers/block/virtio_blk.c
2832 @@ -936,9 +936,17 @@ static int virtblk_probe(struct virtio_device *vdev)
2833 err = virtio_cread_feature(vdev, VIRTIO_BLK_F_BLK_SIZE,
2834 struct virtio_blk_config, blk_size,
2835 &blk_size);
2836 - if (!err)
2837 + if (!err) {
2838 + err = blk_validate_block_size(blk_size);
2839 + if (err) {
2840 + dev_err(&vdev->dev,
2841 + "virtio_blk: invalid block size: 0x%x\n",
2842 + blk_size);
2843 + goto out_free_tags;
2844 + }
2845 +
2846 blk_queue_logical_block_size(q, blk_size);
2847 - else
2848 + } else
2849 blk_size = queue_logical_block_size(q);
2850
2851 /* Use topology information if available */
2852 diff --git a/drivers/bluetooth/btmtksdio.c b/drivers/bluetooth/btmtksdio.c
2853 index c2eb64bcd5d5d..0e7f44461946e 100644
2854 --- a/drivers/bluetooth/btmtksdio.c
2855 +++ b/drivers/bluetooth/btmtksdio.c
2856 @@ -980,6 +980,8 @@ static int btmtksdio_probe(struct sdio_func *func,
2857 hdev->manufacturer = 70;
2858 set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
2859
2860 + sdio_set_drvdata(func, bdev);
2861 +
2862 err = hci_register_dev(hdev);
2863 if (err < 0) {
2864 dev_err(&func->dev, "Can't register HCI device\n");
2865 @@ -987,8 +989,6 @@ static int btmtksdio_probe(struct sdio_func *func,
2866 return err;
2867 }
2868
2869 - sdio_set_drvdata(func, bdev);
2870 -
2871 /* pm_runtime_enable would be done after the firmware is being
2872 * downloaded because the core layer probably already enables
2873 * runtime PM for this func such as the case host->caps &
2874 diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c
2875 index 1b4ad231e6ed3..fd081bdd2dd8a 100644
2876 --- a/drivers/bluetooth/hci_serdev.c
2877 +++ b/drivers/bluetooth/hci_serdev.c
2878 @@ -279,6 +279,8 @@ int hci_uart_register_device(struct hci_uart *hu,
2879 if (err)
2880 return err;
2881
2882 + percpu_init_rwsem(&hu->proto_lock);
2883 +
2884 err = p->open(hu);
2885 if (err)
2886 goto err_open;
2887 @@ -301,7 +303,6 @@ int hci_uart_register_device(struct hci_uart *hu,
2888
2889 INIT_WORK(&hu->init_ready, hci_uart_init_work);
2890 INIT_WORK(&hu->write_work, hci_uart_write_work);
2891 - percpu_init_rwsem(&hu->proto_lock);
2892
2893 /* Only when vendor specific setup callback is provided, consider
2894 * the manufacturer information valid. This avoids filling in the
2895 diff --git a/drivers/char/hw_random/atmel-rng.c b/drivers/char/hw_random/atmel-rng.c
2896 index e55705745d5e4..f4c94f8acfe0d 100644
2897 --- a/drivers/char/hw_random/atmel-rng.c
2898 +++ b/drivers/char/hw_random/atmel-rng.c
2899 @@ -96,6 +96,7 @@ static int atmel_trng_probe(struct platform_device *pdev)
2900
2901 err_register:
2902 clk_disable_unprepare(trng->clk);
2903 + atmel_trng_disable(trng);
2904 return ret;
2905 }
2906
2907 diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c
2908 index 1838039b03333..17fbd7f7a2954 100644
2909 --- a/drivers/char/tpm/tpm-chip.c
2910 +++ b/drivers/char/tpm/tpm-chip.c
2911 @@ -274,14 +274,6 @@ static void tpm_dev_release(struct device *dev)
2912 kfree(chip);
2913 }
2914
2915 -static void tpm_devs_release(struct device *dev)
2916 -{
2917 - struct tpm_chip *chip = container_of(dev, struct tpm_chip, devs);
2918 -
2919 - /* release the master device reference */
2920 - put_device(&chip->dev);
2921 -}
2922 -
2923 /**
2924 * tpm_class_shutdown() - prepare the TPM device for loss of power.
2925 * @dev: device to which the chip is associated.
2926 @@ -344,7 +336,6 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
2927 chip->dev_num = rc;
2928
2929 device_initialize(&chip->dev);
2930 - device_initialize(&chip->devs);
2931
2932 chip->dev.class = tpm_class;
2933 chip->dev.class->shutdown_pre = tpm_class_shutdown;
2934 @@ -352,29 +343,12 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
2935 chip->dev.parent = pdev;
2936 chip->dev.groups = chip->groups;
2937
2938 - chip->devs.parent = pdev;
2939 - chip->devs.class = tpmrm_class;
2940 - chip->devs.release = tpm_devs_release;
2941 - /* get extra reference on main device to hold on
2942 - * behalf of devs. This holds the chip structure
2943 - * while cdevs is in use. The corresponding put
2944 - * is in the tpm_devs_release (TPM2 only)
2945 - */
2946 - if (chip->flags & TPM_CHIP_FLAG_TPM2)
2947 - get_device(&chip->dev);
2948 -
2949 if (chip->dev_num == 0)
2950 chip->dev.devt = MKDEV(MISC_MAJOR, TPM_MINOR);
2951 else
2952 chip->dev.devt = MKDEV(MAJOR(tpm_devt), chip->dev_num);
2953
2954 - chip->devs.devt =
2955 - MKDEV(MAJOR(tpm_devt), chip->dev_num + TPM_NUM_DEVICES);
2956 -
2957 rc = dev_set_name(&chip->dev, "tpm%d", chip->dev_num);
2958 - if (rc)
2959 - goto out;
2960 - rc = dev_set_name(&chip->devs, "tpmrm%d", chip->dev_num);
2961 if (rc)
2962 goto out;
2963
2964 @@ -382,9 +356,7 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
2965 chip->flags |= TPM_CHIP_FLAG_VIRTUAL;
2966
2967 cdev_init(&chip->cdev, &tpm_fops);
2968 - cdev_init(&chip->cdevs, &tpmrm_fops);
2969 chip->cdev.owner = THIS_MODULE;
2970 - chip->cdevs.owner = THIS_MODULE;
2971
2972 rc = tpm2_init_space(&chip->work_space, TPM2_SPACE_BUFFER_SIZE);
2973 if (rc) {
2974 @@ -396,7 +368,6 @@ struct tpm_chip *tpm_chip_alloc(struct device *pdev,
2975 return chip;
2976
2977 out:
2978 - put_device(&chip->devs);
2979 put_device(&chip->dev);
2980 return ERR_PTR(rc);
2981 }
2982 @@ -445,14 +416,9 @@ static int tpm_add_char_device(struct tpm_chip *chip)
2983 }
2984
2985 if (chip->flags & TPM_CHIP_FLAG_TPM2) {
2986 - rc = cdev_device_add(&chip->cdevs, &chip->devs);
2987 - if (rc) {
2988 - dev_err(&chip->devs,
2989 - "unable to cdev_device_add() %s, major %d, minor %d, err=%d\n",
2990 - dev_name(&chip->devs), MAJOR(chip->devs.devt),
2991 - MINOR(chip->devs.devt), rc);
2992 - return rc;
2993 - }
2994 + rc = tpm_devs_add(chip);
2995 + if (rc)
2996 + goto err_del_cdev;
2997 }
2998
2999 /* Make the chip available. */
3000 @@ -460,6 +426,10 @@ static int tpm_add_char_device(struct tpm_chip *chip)
3001 idr_replace(&dev_nums_idr, chip, chip->dev_num);
3002 mutex_unlock(&idr_lock);
3003
3004 + return 0;
3005 +
3006 +err_del_cdev:
3007 + cdev_device_del(&chip->cdev, &chip->dev);
3008 return rc;
3009 }
3010
3011 @@ -641,7 +611,7 @@ void tpm_chip_unregister(struct tpm_chip *chip)
3012 hwrng_unregister(&chip->hwrng);
3013 tpm_bios_log_teardown(chip);
3014 if (chip->flags & TPM_CHIP_FLAG_TPM2)
3015 - cdev_device_del(&chip->cdevs, &chip->devs);
3016 + tpm_devs_remove(chip);
3017 tpm_del_char_device(chip);
3018 }
3019 EXPORT_SYMBOL_GPL(tpm_chip_unregister);
3020 diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
3021 index 37f010421a369..58312062d435c 100644
3022 --- a/drivers/char/tpm/tpm.h
3023 +++ b/drivers/char/tpm/tpm.h
3024 @@ -466,6 +466,8 @@ int tpm2_prepare_space(struct tpm_chip *chip, struct tpm_space *space, u8 *cmd,
3025 size_t cmdsiz);
3026 int tpm2_commit_space(struct tpm_chip *chip, struct tpm_space *space, void *buf,
3027 size_t *bufsiz);
3028 +int tpm_devs_add(struct tpm_chip *chip);
3029 +void tpm_devs_remove(struct tpm_chip *chip);
3030
3031 void tpm_bios_log_setup(struct tpm_chip *chip);
3032 void tpm_bios_log_teardown(struct tpm_chip *chip);
3033 diff --git a/drivers/char/tpm/tpm2-space.c b/drivers/char/tpm/tpm2-space.c
3034 index d2225020e4d2c..ffb35f0154c16 100644
3035 --- a/drivers/char/tpm/tpm2-space.c
3036 +++ b/drivers/char/tpm/tpm2-space.c
3037 @@ -574,3 +574,68 @@ out:
3038 dev_err(&chip->dev, "%s: error %d\n", __func__, rc);
3039 return rc;
3040 }
3041 +
3042 +/*
3043 + * Put the reference to the main device.
3044 + */
3045 +static void tpm_devs_release(struct device *dev)
3046 +{
3047 + struct tpm_chip *chip = container_of(dev, struct tpm_chip, devs);
3048 +
3049 + /* release the master device reference */
3050 + put_device(&chip->dev);
3051 +}
3052 +
3053 +/*
3054 + * Remove the device file for exposed TPM spaces and release the device
3055 + * reference. This may also release the reference to the master device.
3056 + */
3057 +void tpm_devs_remove(struct tpm_chip *chip)
3058 +{
3059 + cdev_device_del(&chip->cdevs, &chip->devs);
3060 + put_device(&chip->devs);
3061 +}
3062 +
3063 +/*
3064 + * Add a device file to expose TPM spaces. Also take a reference to the
3065 + * main device.
3066 + */
3067 +int tpm_devs_add(struct tpm_chip *chip)
3068 +{
3069 + int rc;
3070 +
3071 + device_initialize(&chip->devs);
3072 + chip->devs.parent = chip->dev.parent;
3073 + chip->devs.class = tpmrm_class;
3074 +
3075 + /*
3076 + * Get extra reference on main device to hold on behalf of devs.
3077 + * This holds the chip structure while cdevs is in use. The
3078 + * corresponding put is in the tpm_devs_release.
3079 + */
3080 + get_device(&chip->dev);
3081 + chip->devs.release = tpm_devs_release;
3082 + chip->devs.devt = MKDEV(MAJOR(tpm_devt), chip->dev_num + TPM_NUM_DEVICES);
3083 + cdev_init(&chip->cdevs, &tpmrm_fops);
3084 + chip->cdevs.owner = THIS_MODULE;
3085 +
3086 + rc = dev_set_name(&chip->devs, "tpmrm%d", chip->dev_num);
3087 + if (rc)
3088 + goto err_put_devs;
3089 +
3090 + rc = cdev_device_add(&chip->cdevs, &chip->devs);
3091 + if (rc) {
3092 + dev_err(&chip->devs,
3093 + "unable to cdev_device_add() %s, major %d, minor %d, err=%d\n",
3094 + dev_name(&chip->devs), MAJOR(chip->devs.devt),
3095 + MINOR(chip->devs.devt), rc);
3096 + goto err_put_devs;
3097 + }
3098 +
3099 + return 0;
3100 +
3101 +err_put_devs:
3102 + put_device(&chip->devs);
3103 +
3104 + return rc;
3105 +}
3106 diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
3107 index b453029487a12..c736adef9d3c8 100644
3108 --- a/drivers/char/virtio_console.c
3109 +++ b/drivers/char/virtio_console.c
3110 @@ -1961,6 +1961,13 @@ static void virtcons_remove(struct virtio_device *vdev)
3111 list_del(&portdev->list);
3112 spin_unlock_irq(&pdrvdata_lock);
3113
3114 + /* Device is going away, exit any polling for buffers */
3115 + virtio_break_device(vdev);
3116 + if (use_multiport(portdev))
3117 + flush_work(&portdev->control_work);
3118 + else
3119 + flush_work(&portdev->config_work);
3120 +
3121 /* Disable interrupts for vqs */
3122 vdev->config->reset(vdev);
3123 /* Finish up work that's lined up */
3124 @@ -2234,7 +2241,7 @@ static struct virtio_driver virtio_rproc_serial = {
3125 .remove = virtcons_remove,
3126 };
3127
3128 -static int __init init(void)
3129 +static int __init virtio_console_init(void)
3130 {
3131 int err;
3132
3133 @@ -2271,7 +2278,7 @@ free:
3134 return err;
3135 }
3136
3137 -static void __exit fini(void)
3138 +static void __exit virtio_console_fini(void)
3139 {
3140 reclaim_dma_bufs();
3141
3142 @@ -2281,8 +2288,8 @@ static void __exit fini(void)
3143 class_destroy(pdrvdata.class);
3144 debugfs_remove_recursive(pdrvdata.debugfs_dir);
3145 }
3146 -module_init(init);
3147 -module_exit(fini);
3148 +module_init(virtio_console_init);
3149 +module_exit(virtio_console_fini);
3150
3151 MODULE_DESCRIPTION("Virtio console driver");
3152 MODULE_LICENSE("GPL");
3153 diff --git a/drivers/clk/actions/owl-s700.c b/drivers/clk/actions/owl-s700.c
3154 index a2f34d13fb543..6ea7da1d6d755 100644
3155 --- a/drivers/clk/actions/owl-s700.c
3156 +++ b/drivers/clk/actions/owl-s700.c
3157 @@ -162,6 +162,7 @@ static struct clk_div_table hdmia_div_table[] = {
3158
3159 static struct clk_div_table rmii_div_table[] = {
3160 {0, 4}, {1, 10},
3161 + {0, 0}
3162 };
3163
3164 /* divider clocks */
3165 diff --git a/drivers/clk/actions/owl-s900.c b/drivers/clk/actions/owl-s900.c
3166 index 790890978424a..5144ada2c7e1a 100644
3167 --- a/drivers/clk/actions/owl-s900.c
3168 +++ b/drivers/clk/actions/owl-s900.c
3169 @@ -140,7 +140,7 @@ static struct clk_div_table rmii_ref_div_table[] = {
3170
3171 static struct clk_div_table usb3_mac_div_table[] = {
3172 { 1, 2 }, { 2, 3 }, { 3, 4 },
3173 - { 0, 8 },
3174 + { 0, 0 }
3175 };
3176
3177 static struct clk_div_table i2s_div_table[] = {
3178 diff --git a/drivers/clk/clk-clps711x.c b/drivers/clk/clk-clps711x.c
3179 index a2c6486ef1708..f8417ee2961aa 100644
3180 --- a/drivers/clk/clk-clps711x.c
3181 +++ b/drivers/clk/clk-clps711x.c
3182 @@ -28,11 +28,13 @@ static const struct clk_div_table spi_div_table[] = {
3183 { .val = 1, .div = 8, },
3184 { .val = 2, .div = 2, },
3185 { .val = 3, .div = 1, },
3186 + { /* sentinel */ }
3187 };
3188
3189 static const struct clk_div_table timer_div_table[] = {
3190 { .val = 0, .div = 256, },
3191 { .val = 1, .div = 1, },
3192 + { /* sentinel */ }
3193 };
3194
3195 struct clps711x_clk {
3196 diff --git a/drivers/clk/clk-si5341.c b/drivers/clk/clk-si5341.c
3197 index 20ed0955416a3..07ef9995b3cb1 100644
3198 --- a/drivers/clk/clk-si5341.c
3199 +++ b/drivers/clk/clk-si5341.c
3200 @@ -638,6 +638,15 @@ static unsigned long si5341_output_clk_recalc_rate(struct clk_hw *hw,
3201 u32 r_divider;
3202 u8 r[3];
3203
3204 + err = regmap_read(output->data->regmap,
3205 + SI5341_OUT_CONFIG(output), &val);
3206 + if (err < 0)
3207 + return err;
3208 +
3209 + /* If SI5341_OUT_CFG_RDIV_FORCE2 is set, r_divider is 2 */
3210 + if (val & SI5341_OUT_CFG_RDIV_FORCE2)
3211 + return parent_rate / 2;
3212 +
3213 err = regmap_bulk_read(output->data->regmap,
3214 SI5341_OUT_R_REG(output), r, 3);
3215 if (err < 0)
3216 @@ -654,13 +663,6 @@ static unsigned long si5341_output_clk_recalc_rate(struct clk_hw *hw,
3217 r_divider += 1;
3218 r_divider <<= 1;
3219
3220 - err = regmap_read(output->data->regmap,
3221 - SI5341_OUT_CONFIG(output), &val);
3222 - if (err < 0)
3223 - return err;
3224 -
3225 - if (val & SI5341_OUT_CFG_RDIV_FORCE2)
3226 - r_divider = 2;
3227
3228 return parent_rate / r_divider;
3229 }
3230 diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
3231 index e4e1b4e94a67b..13332f89e034b 100644
3232 --- a/drivers/clk/clk.c
3233 +++ b/drivers/clk/clk.c
3234 @@ -637,6 +637,24 @@ static void clk_core_get_boundaries(struct clk_core *core,
3235 *max_rate = min(*max_rate, clk_user->max_rate);
3236 }
3237
3238 +static bool clk_core_check_boundaries(struct clk_core *core,
3239 + unsigned long min_rate,
3240 + unsigned long max_rate)
3241 +{
3242 + struct clk *user;
3243 +
3244 + lockdep_assert_held(&prepare_lock);
3245 +
3246 + if (min_rate > core->max_rate || max_rate < core->min_rate)
3247 + return false;
3248 +
3249 + hlist_for_each_entry(user, &core->clks, clks_node)
3250 + if (min_rate > user->max_rate || max_rate < user->min_rate)
3251 + return false;
3252 +
3253 + return true;
3254 +}
3255 +
3256 void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate,
3257 unsigned long max_rate)
3258 {
3259 @@ -2306,6 +2324,11 @@ int clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max)
3260 clk->min_rate = min;
3261 clk->max_rate = max;
3262
3263 + if (!clk_core_check_boundaries(clk->core, min, max)) {
3264 + ret = -EINVAL;
3265 + goto out;
3266 + }
3267 +
3268 rate = clk_core_get_rate_nolock(clk->core);
3269 if (rate < min || rate > max) {
3270 /*
3271 @@ -2334,6 +2357,7 @@ int clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max)
3272 }
3273 }
3274
3275 +out:
3276 if (clk->exclusive_count)
3277 clk_core_rate_protect(clk->core);
3278
3279 @@ -3278,6 +3302,19 @@ static void clk_core_reparent_orphans_nolock(void)
3280 __clk_set_parent_after(orphan, parent, NULL);
3281 __clk_recalc_accuracies(orphan);
3282 __clk_recalc_rates(orphan, 0);
3283 +
3284 + /*
3285 + * __clk_init_parent() will set the initial req_rate to
3286 + * 0 if the clock doesn't have clk_ops::recalc_rate and
3287 + * is an orphan when it's registered.
3288 + *
3289 + * 'req_rate' is used by clk_set_rate_range() and
3290 + * clk_put() to trigger a clk_set_rate() call whenever
3291 + * the boundaries are modified. Let's make sure
3292 + * 'req_rate' is set to something non-zero so that
3293 + * clk_set_rate_range() doesn't drop the frequency.
3294 + */
3295 + orphan->req_rate = orphan->rate;
3296 }
3297 }
3298 }
3299 diff --git a/drivers/clk/imx/clk-imx7d.c b/drivers/clk/imx/clk-imx7d.c
3300 index fbea774ef6877..58577548fe212 100644
3301 --- a/drivers/clk/imx/clk-imx7d.c
3302 +++ b/drivers/clk/imx/clk-imx7d.c
3303 @@ -859,7 +859,6 @@ static void __init imx7d_clocks_init(struct device_node *ccm_node)
3304 hws[IMX7D_WDOG4_ROOT_CLK] = imx_clk_hw_gate4("wdog4_root_clk", "wdog_post_div", base + 0x49f0, 0);
3305 hws[IMX7D_KPP_ROOT_CLK] = imx_clk_hw_gate4("kpp_root_clk", "ipg_root_clk", base + 0x4aa0, 0);
3306 hws[IMX7D_CSI_MCLK_ROOT_CLK] = imx_clk_hw_gate4("csi_mclk_root_clk", "csi_mclk_post_div", base + 0x4490, 0);
3307 - hws[IMX7D_AUDIO_MCLK_ROOT_CLK] = imx_clk_hw_gate4("audio_mclk_root_clk", "audio_mclk_post_div", base + 0x4790, 0);
3308 hws[IMX7D_WRCLK_ROOT_CLK] = imx_clk_hw_gate4("wrclk_root_clk", "wrclk_post_div", base + 0x47a0, 0);
3309 hws[IMX7D_USB_CTRL_CLK] = imx_clk_hw_gate4("usb_ctrl_clk", "ahb_root_clk", base + 0x4680, 0);
3310 hws[IMX7D_USB_PHY1_CLK] = imx_clk_hw_gate4("usb_phy1_clk", "pll_usb1_main_clk", base + 0x46a0, 0);
3311 diff --git a/drivers/clk/loongson1/clk-loongson1c.c b/drivers/clk/loongson1/clk-loongson1c.c
3312 index 703f87622cf5f..1ebf740380efb 100644
3313 --- a/drivers/clk/loongson1/clk-loongson1c.c
3314 +++ b/drivers/clk/loongson1/clk-loongson1c.c
3315 @@ -37,6 +37,7 @@ static const struct clk_div_table ahb_div_table[] = {
3316 [1] = { .val = 1, .div = 4 },
3317 [2] = { .val = 2, .div = 3 },
3318 [3] = { .val = 3, .div = 3 },
3319 + [4] = { /* sentinel */ }
3320 };
3321
3322 void __init ls1x_clk_init(void)
3323 diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c
3324 index a88101480e337..89c1adeb84d44 100644
3325 --- a/drivers/clk/qcom/clk-rcg2.c
3326 +++ b/drivers/clk/qcom/clk-rcg2.c
3327 @@ -263,7 +263,7 @@ static int clk_rcg2_determine_floor_rate(struct clk_hw *hw,
3328
3329 static int __clk_rcg2_configure(struct clk_rcg2 *rcg, const struct freq_tbl *f)
3330 {
3331 - u32 cfg, mask;
3332 + u32 cfg, mask, d_val, not2d_val, n_minus_m;
3333 struct clk_hw *hw = &rcg->clkr.hw;
3334 int ret, index = qcom_find_src_index(hw, rcg->parent_map, f->src);
3335
3336 @@ -282,8 +282,17 @@ static int __clk_rcg2_configure(struct clk_rcg2 *rcg, const struct freq_tbl *f)
3337 if (ret)
3338 return ret;
3339
3340 + /* Calculate 2d value */
3341 + d_val = f->n;
3342 +
3343 + n_minus_m = f->n - f->m;
3344 + n_minus_m *= 2;
3345 +
3346 + d_val = clamp_t(u32, d_val, f->m, n_minus_m);
3347 + not2d_val = ~d_val & mask;
3348 +
3349 ret = regmap_update_bits(rcg->clkr.regmap,
3350 - RCG_D_OFFSET(rcg), mask, ~f->n);
3351 + RCG_D_OFFSET(rcg), mask, not2d_val);
3352 if (ret)
3353 return ret;
3354 }
3355 @@ -638,6 +647,7 @@ static const struct frac_entry frac_table_pixel[] = {
3356 { 2, 9 },
3357 { 4, 9 },
3358 { 1, 1 },
3359 + { 2, 3 },
3360 { }
3361 };
3362
3363 diff --git a/drivers/clk/qcom/gcc-ipq8074.c b/drivers/clk/qcom/gcc-ipq8074.c
3364 index e01f5f591d1e2..de48ba7eba3a1 100644
3365 --- a/drivers/clk/qcom/gcc-ipq8074.c
3366 +++ b/drivers/clk/qcom/gcc-ipq8074.c
3367 @@ -1074,7 +1074,7 @@ static struct clk_rcg2 sdcc1_apps_clk_src = {
3368 .name = "sdcc1_apps_clk_src",
3369 .parent_names = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
3370 .num_parents = 4,
3371 - .ops = &clk_rcg2_ops,
3372 + .ops = &clk_rcg2_floor_ops,
3373 },
3374 };
3375
3376 diff --git a/drivers/clk/qcom/gcc-msm8994.c b/drivers/clk/qcom/gcc-msm8994.c
3377 index b7fc8c7ba1957..14f0d5d840802 100644
3378 --- a/drivers/clk/qcom/gcc-msm8994.c
3379 +++ b/drivers/clk/qcom/gcc-msm8994.c
3380 @@ -107,6 +107,7 @@ static struct clk_alpha_pll gpll4_early = {
3381
3382 static struct clk_alpha_pll_postdiv gpll4 = {
3383 .offset = 0x1dc0,
3384 + .width = 4,
3385 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
3386 .clkr.hw.init = &(struct clk_init_data)
3387 {
3388 diff --git a/drivers/clk/tegra/clk-emc.c b/drivers/clk/tegra/clk-emc.c
3389 index ea39caf3d7622..0c1b83bedb73d 100644
3390 --- a/drivers/clk/tegra/clk-emc.c
3391 +++ b/drivers/clk/tegra/clk-emc.c
3392 @@ -191,6 +191,7 @@ static struct tegra_emc *emc_ensure_emc_driver(struct tegra_clk_emc *tegra)
3393
3394 tegra->emc = platform_get_drvdata(pdev);
3395 if (!tegra->emc) {
3396 + put_device(&pdev->dev);
3397 pr_err("%s: cannot find EMC driver\n", __func__);
3398 return NULL;
3399 }
3400 diff --git a/drivers/clk/uniphier/clk-uniphier-fixed-rate.c b/drivers/clk/uniphier/clk-uniphier-fixed-rate.c
3401 index 5319cd3804801..3bc55ab75314b 100644
3402 --- a/drivers/clk/uniphier/clk-uniphier-fixed-rate.c
3403 +++ b/drivers/clk/uniphier/clk-uniphier-fixed-rate.c
3404 @@ -24,6 +24,7 @@ struct clk_hw *uniphier_clk_register_fixed_rate(struct device *dev,
3405
3406 init.name = name;
3407 init.ops = &clk_fixed_rate_ops;
3408 + init.flags = 0;
3409 init.parent_names = NULL;
3410 init.num_parents = 0;
3411
3412 diff --git a/drivers/clocksource/acpi_pm.c b/drivers/clocksource/acpi_pm.c
3413 index eb596ff9e7bb3..279ddff81ab49 100644
3414 --- a/drivers/clocksource/acpi_pm.c
3415 +++ b/drivers/clocksource/acpi_pm.c
3416 @@ -229,8 +229,10 @@ static int __init parse_pmtmr(char *arg)
3417 int ret;
3418
3419 ret = kstrtouint(arg, 16, &base);
3420 - if (ret)
3421 - return ret;
3422 + if (ret) {
3423 + pr_warn("PMTMR: invalid 'pmtmr=' value: '%s'\n", arg);
3424 + return 1;
3425 + }
3426
3427 pr_info("PMTMR IOPort override: 0x%04x -> 0x%04x\n", pmtmr_ioport,
3428 base);
3429 diff --git a/drivers/clocksource/timer-of.c b/drivers/clocksource/timer-of.c
3430 index a3c73e972fce1..bf2a6f64ba0c5 100644
3431 --- a/drivers/clocksource/timer-of.c
3432 +++ b/drivers/clocksource/timer-of.c
3433 @@ -157,9 +157,9 @@ static __init int timer_of_base_init(struct device_node *np,
3434 of_base->base = of_base->name ?
3435 of_io_request_and_map(np, of_base->index, of_base->name) :
3436 of_iomap(np, of_base->index);
3437 - if (IS_ERR(of_base->base)) {
3438 - pr_err("Failed to iomap (%s)\n", of_base->name);
3439 - return PTR_ERR(of_base->base);
3440 + if (IS_ERR_OR_NULL(of_base->base)) {
3441 + pr_err("Failed to iomap (%s:%s)\n", np->name, of_base->name);
3442 + return of_base->base ? PTR_ERR(of_base->base) : -ENOMEM;
3443 }
3444
3445 return 0;
3446 diff --git a/drivers/crypto/ccp/ccp-dmaengine.c b/drivers/crypto/ccp/ccp-dmaengine.c
3447 index 0770a83bf1a57..b3eea329f840f 100644
3448 --- a/drivers/crypto/ccp/ccp-dmaengine.c
3449 +++ b/drivers/crypto/ccp/ccp-dmaengine.c
3450 @@ -633,6 +633,20 @@ static int ccp_terminate_all(struct dma_chan *dma_chan)
3451 return 0;
3452 }
3453
3454 +static void ccp_dma_release(struct ccp_device *ccp)
3455 +{
3456 + struct ccp_dma_chan *chan;
3457 + struct dma_chan *dma_chan;
3458 + unsigned int i;
3459 +
3460 + for (i = 0; i < ccp->cmd_q_count; i++) {
3461 + chan = ccp->ccp_dma_chan + i;
3462 + dma_chan = &chan->dma_chan;
3463 + tasklet_kill(&chan->cleanup_tasklet);
3464 + list_del_rcu(&dma_chan->device_node);
3465 + }
3466 +}
3467 +
3468 int ccp_dmaengine_register(struct ccp_device *ccp)
3469 {
3470 struct ccp_dma_chan *chan;
3471 @@ -737,6 +751,7 @@ int ccp_dmaengine_register(struct ccp_device *ccp)
3472 return 0;
3473
3474 err_reg:
3475 + ccp_dma_release(ccp);
3476 kmem_cache_destroy(ccp->dma_desc_cache);
3477
3478 err_cache:
3479 @@ -753,6 +768,7 @@ void ccp_dmaengine_unregister(struct ccp_device *ccp)
3480 return;
3481
3482 dma_async_device_unregister(dma_dev);
3483 + ccp_dma_release(ccp);
3484
3485 kmem_cache_destroy(ccp->dma_desc_cache);
3486 kmem_cache_destroy(ccp->dma_cmd_cache);
3487 diff --git a/drivers/crypto/ccree/cc_buffer_mgr.c b/drivers/crypto/ccree/cc_buffer_mgr.c
3488 index 954f14bddf1d7..dce30ae2b7040 100644
3489 --- a/drivers/crypto/ccree/cc_buffer_mgr.c
3490 +++ b/drivers/crypto/ccree/cc_buffer_mgr.c
3491 @@ -295,6 +295,13 @@ static int cc_map_sg(struct device *dev, struct scatterlist *sg,
3492 {
3493 int ret = 0;
3494
3495 + if (!nbytes) {
3496 + *mapped_nents = 0;
3497 + *lbytes = 0;
3498 + *nents = 0;
3499 + return 0;
3500 + }
3501 +
3502 *nents = cc_get_sgl_nents(dev, sg, nbytes, lbytes);
3503 if (*nents > max_sg_nents) {
3504 *nents = 0;
3505 diff --git a/drivers/crypto/mxs-dcp.c b/drivers/crypto/mxs-dcp.c
3506 index 5471110792071..9443f31acd27b 100644
3507 --- a/drivers/crypto/mxs-dcp.c
3508 +++ b/drivers/crypto/mxs-dcp.c
3509 @@ -329,7 +329,7 @@ static int mxs_dcp_aes_block_crypt(struct crypto_async_request *arq)
3510 memset(key + AES_KEYSIZE_128, 0, AES_KEYSIZE_128);
3511 }
3512
3513 - for_each_sg(req->src, src, sg_nents(src), i) {
3514 + for_each_sg(req->src, src, sg_nents(req->src), i) {
3515 src_buf = sg_virt(src);
3516 len = sg_dma_len(src);
3517 tlen += len;
3518 diff --git a/drivers/crypto/vmx/Kconfig b/drivers/crypto/vmx/Kconfig
3519 index c85fab7ef0bdd..b2c28b87f14b3 100644
3520 --- a/drivers/crypto/vmx/Kconfig
3521 +++ b/drivers/crypto/vmx/Kconfig
3522 @@ -2,7 +2,11 @@
3523 config CRYPTO_DEV_VMX_ENCRYPT
3524 tristate "Encryption acceleration support on P8 CPU"
3525 depends on CRYPTO_DEV_VMX
3526 + select CRYPTO_AES
3527 + select CRYPTO_CBC
3528 + select CRYPTO_CTR
3529 select CRYPTO_GHASH
3530 + select CRYPTO_XTS
3531 default m
3532 help
3533 Support for VMX cryptographic acceleration instructions on Power8 CPU.
3534 diff --git a/drivers/dax/super.c b/drivers/dax/super.c
3535 index 8074e5de815b9..5005b92b197d7 100644
3536 --- a/drivers/dax/super.c
3537 +++ b/drivers/dax/super.c
3538 @@ -691,6 +691,7 @@ static int dax_fs_init(void)
3539 static void dax_fs_exit(void)
3540 {
3541 kern_unmount(dax_mnt);
3542 + rcu_barrier();
3543 kmem_cache_destroy(dax_cache);
3544 }
3545
3546 diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c
3547 index 9635897458a09..e553c6a937f69 100644
3548 --- a/drivers/dma-buf/udmabuf.c
3549 +++ b/drivers/dma-buf/udmabuf.c
3550 @@ -145,6 +145,10 @@ static long udmabuf_create(const struct udmabuf_create_list *head,
3551 if (ubuf->pagecount > pglimit)
3552 goto err;
3553 }
3554 +
3555 + if (!ubuf->pagecount)
3556 + goto err;
3557 +
3558 ubuf->pages = kmalloc_array(ubuf->pagecount, sizeof(*ubuf->pages),
3559 GFP_KERNEL);
3560 if (!ubuf->pages) {
3561 diff --git a/drivers/dma/sh/shdma-base.c b/drivers/dma/sh/shdma-base.c
3562 index 19eee3d0900b0..c51de498b5b4b 100644
3563 --- a/drivers/dma/sh/shdma-base.c
3564 +++ b/drivers/dma/sh/shdma-base.c
3565 @@ -115,10 +115,8 @@ static dma_cookie_t shdma_tx_submit(struct dma_async_tx_descriptor *tx)
3566 ret = pm_runtime_get(schan->dev);
3567
3568 spin_unlock_irq(&schan->chan_lock);
3569 - if (ret < 0) {
3570 + if (ret < 0)
3571 dev_err(schan->dev, "%s(): GET = %d\n", __func__, ret);
3572 - pm_runtime_put(schan->dev);
3573 - }
3574
3575 pm_runtime_barrier(schan->dev);
3576
3577 diff --git a/drivers/firmware/google/Kconfig b/drivers/firmware/google/Kconfig
3578 index 2fba0aa7fc54d..20dfe39a0537a 100644
3579 --- a/drivers/firmware/google/Kconfig
3580 +++ b/drivers/firmware/google/Kconfig
3581 @@ -21,7 +21,7 @@ config GOOGLE_SMI
3582
3583 config GOOGLE_COREBOOT_TABLE
3584 tristate "Coreboot Table Access"
3585 - depends on ACPI || OF
3586 + depends on HAS_IOMEM && (ACPI || OF)
3587 help
3588 This option enables the coreboot_table module, which provides other
3589 firmware modules access to the coreboot table. The coreboot table
3590 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
3591 index ce30d4e8bf25f..f7c4337c1ffe6 100644
3592 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
3593 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
3594 @@ -165,7 +165,7 @@ static const struct kfd2kgd_calls kfd2kgd = {
3595 .get_tile_config = amdgpu_amdkfd_get_tile_config,
3596 };
3597
3598 -struct kfd2kgd_calls *amdgpu_amdkfd_gfx_10_0_get_functions()
3599 +struct kfd2kgd_calls *amdgpu_amdkfd_gfx_10_0_get_functions(void)
3600 {
3601 return (struct kfd2kgd_calls *)&kfd2kgd;
3602 }
3603 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
3604 index 82823d9a8ba88..fddeea2b17e50 100644
3605 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
3606 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
3607 @@ -1542,6 +1542,7 @@ int amdgpu_cs_fence_to_handle_ioctl(struct drm_device *dev, void *data,
3608 return 0;
3609
3610 default:
3611 + dma_fence_put(fence);
3612 return -EINVAL;
3613 }
3614 }
3615 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
3616 index f9bef3154b998..2659202f2026b 100644
3617 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
3618 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
3619 @@ -263,7 +263,7 @@ static int amdgpu_gfx_kiq_acquire(struct amdgpu_device *adev,
3620 * adev->gfx.mec.num_pipe_per_mec
3621 * adev->gfx.mec.num_queue_per_pipe;
3622
3623 - while (queue_bit-- >= 0) {
3624 + while (--queue_bit >= 0) {
3625 if (test_bit(queue_bit, adev->gfx.mec.queue_bitmap))
3626 continue;
3627
3628 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
3629 index 532d1842f6a30..4cc0dd494a42b 100644
3630 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
3631 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
3632 @@ -1305,7 +1305,8 @@ void amdgpu_bo_release_notify(struct ttm_buffer_object *bo)
3633 !(abo->flags & AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE))
3634 return;
3635
3636 - dma_resv_lock(bo->base.resv, NULL);
3637 + if (WARN_ON_ONCE(!dma_resv_trylock(bo->base.resv)))
3638 + return;
3639
3640 r = amdgpu_fill_buffer(abo, AMDGPU_POISON, bo->base.resv, &fence);
3641 if (!WARN_ON(r)) {
3642 diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
3643 index 66387caf966e2..3685e89415d5c 100644
3644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
3645 +++ b/drivers/gpu/drm/amd/amdkfd/kfd_crat.c
3646 @@ -758,7 +758,7 @@ int kfd_create_crat_image_acpi(void **crat_image, size_t *size)
3647 /* Fetch the CRAT table from ACPI */
3648 status = acpi_get_table(CRAT_SIGNATURE, 0, &crat_table);
3649 if (status == AE_NOT_FOUND) {
3650 - pr_warn("CRAT table not found\n");
3651 + pr_info("CRAT table not found\n");
3652 return -ENODATA;
3653 } else if (ACPI_FAILURE(status)) {
3654 const char *err = acpi_format_exception(status);
3655 diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_module.c b/drivers/gpu/drm/amd/amdkfd/kfd_module.c
3656 index 986ff52d5750c..f4b7f7e6c40e4 100644
3657 --- a/drivers/gpu/drm/amd/amdkfd/kfd_module.c
3658 +++ b/drivers/gpu/drm/amd/amdkfd/kfd_module.c
3659 @@ -82,7 +82,7 @@ static void kfd_exit(void)
3660 kfd_chardev_exit();
3661 }
3662
3663 -int kgd2kfd_init()
3664 +int kgd2kfd_init(void)
3665 {
3666 return kfd_init();
3667 }
3668 diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
3669 index 8e4d863c7570b..c5231c50c4126 100644
3670 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
3671 +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
3672 @@ -5013,6 +5013,9 @@ static void amdgpu_dm_connector_add_common_modes(struct drm_encoder *encoder,
3673 mode = amdgpu_dm_create_common_mode(encoder,
3674 common_modes[i].name, common_modes[i].w,
3675 common_modes[i].h);
3676 + if (!mode)
3677 + continue;
3678 +
3679 drm_mode_probed_add(connector, mode);
3680 amdgpu_dm_connector->num_modes++;
3681 }
3682 @@ -7265,10 +7268,13 @@ cleanup:
3683 static int add_affected_mst_dsc_crtcs(struct drm_atomic_state *state, struct drm_crtc *crtc)
3684 {
3685 struct drm_connector *connector;
3686 - struct drm_connector_state *conn_state;
3687 + struct drm_connector_state *conn_state, *old_conn_state;
3688 struct amdgpu_dm_connector *aconnector = NULL;
3689 int i;
3690 - for_each_new_connector_in_state(state, connector, conn_state, i) {
3691 + for_each_oldnew_connector_in_state(state, connector, old_conn_state, conn_state, i) {
3692 + if (!conn_state->crtc)
3693 + conn_state = old_conn_state;
3694 +
3695 if (conn_state->crtc != crtc)
3696 continue;
3697
3698 diff --git a/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c b/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c
3699 index 623455cd75203..d6f988403941b 100644
3700 --- a/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c
3701 +++ b/drivers/gpu/drm/amd/display/dc/irq/dcn21/irq_service_dcn21.c
3702 @@ -227,14 +227,6 @@ static const struct irq_source_info_funcs vupdate_no_lock_irq_info_funcs = {
3703 .funcs = &pflip_irq_info_funcs\
3704 }
3705
3706 -#define vupdate_int_entry(reg_num)\
3707 - [DC_IRQ_SOURCE_VUPDATE1 + reg_num] = {\
3708 - IRQ_REG_ENTRY(OTG, reg_num,\
3709 - OTG_GLOBAL_SYNC_STATUS, VUPDATE_INT_EN,\
3710 - OTG_GLOBAL_SYNC_STATUS, VUPDATE_EVENT_CLEAR),\
3711 - .funcs = &vblank_irq_info_funcs\
3712 - }
3713 -
3714 /* vupdate_no_lock_int_entry maps to DC_IRQ_SOURCE_VUPDATEx, to match semantic
3715 * of DCE's DC_IRQ_SOURCE_VUPDATEx.
3716 */
3717 @@ -348,12 +340,6 @@ irq_source_info_dcn21[DAL_IRQ_SOURCES_NUMBER] = {
3718 dc_underflow_int_entry(6),
3719 [DC_IRQ_SOURCE_DMCU_SCP] = dummy_irq_entry(),
3720 [DC_IRQ_SOURCE_VBIOS_SW] = dummy_irq_entry(),
3721 - vupdate_int_entry(0),
3722 - vupdate_int_entry(1),
3723 - vupdate_int_entry(2),
3724 - vupdate_int_entry(3),
3725 - vupdate_int_entry(4),
3726 - vupdate_int_entry(5),
3727 vupdate_no_lock_int_entry(0),
3728 vupdate_no_lock_int_entry(1),
3729 vupdate_no_lock_int_entry(2),
3730 diff --git a/drivers/gpu/drm/bridge/cdns-dsi.c b/drivers/gpu/drm/bridge/cdns-dsi.c
3731 index 0cb9dd6986ec3..9c3f9110895e8 100644
3732 --- a/drivers/gpu/drm/bridge/cdns-dsi.c
3733 +++ b/drivers/gpu/drm/bridge/cdns-dsi.c
3734 @@ -1284,6 +1284,7 @@ static const struct of_device_id cdns_dsi_of_match[] = {
3735 { .compatible = "cdns,dsi" },
3736 { },
3737 };
3738 +MODULE_DEVICE_TABLE(of, cdns_dsi_of_match);
3739
3740 static struct platform_driver cdns_dsi_platform_driver = {
3741 .probe = cdns_dsi_drm_probe,
3742 diff --git a/drivers/gpu/drm/bridge/sil-sii8620.c b/drivers/gpu/drm/bridge/sil-sii8620.c
3743 index 04431dbac4a4f..fb0b64c965b74 100644
3744 --- a/drivers/gpu/drm/bridge/sil-sii8620.c
3745 +++ b/drivers/gpu/drm/bridge/sil-sii8620.c
3746 @@ -2118,7 +2118,7 @@ static void sii8620_init_rcp_input_dev(struct sii8620 *ctx)
3747 if (ret) {
3748 dev_err(ctx->dev, "Failed to register RC device\n");
3749 ctx->error = ret;
3750 - rc_free_device(ctx->rc_dev);
3751 + rc_free_device(rc_dev);
3752 return;
3753 }
3754 ctx->rc_dev = rc_dev;
3755 diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
3756 index 77384c49fb8dd..2fc27931d3b56 100644
3757 --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
3758 +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi.c
3759 @@ -1057,6 +1057,7 @@ __dw_mipi_dsi_probe(struct platform_device *pdev,
3760 ret = mipi_dsi_host_register(&dsi->dsi_host);
3761 if (ret) {
3762 dev_err(dev, "Failed to register MIPI host: %d\n", ret);
3763 + pm_runtime_disable(dev);
3764 dw_mipi_dsi_debugfs_remove(dsi);
3765 return ERR_PTR(ret);
3766 }
3767 diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
3768 index 3f0a798906004..aeeab1b57aad3 100644
3769 --- a/drivers/gpu/drm/drm_edid.c
3770 +++ b/drivers/gpu/drm/drm_edid.c
3771 @@ -4380,7 +4380,8 @@ bool drm_detect_monitor_audio(struct edid *edid)
3772 if (!edid_ext)
3773 goto end;
3774
3775 - has_audio = ((edid_ext[3] & EDID_BASIC_AUDIO) != 0);
3776 + has_audio = (edid_ext[0] == CEA_EXT &&
3777 + (edid_ext[3] & EDID_BASIC_AUDIO) != 0);
3778
3779 if (has_audio) {
3780 DRM_DEBUG_KMS("Monitor has basic audio support\n");
3781 @@ -4533,16 +4534,8 @@ static void drm_parse_hdmi_deep_color_info(struct drm_connector *connector,
3782 connector->name, dc_bpc);
3783 info->bpc = dc_bpc;
3784
3785 - /*
3786 - * Deep color support mandates RGB444 support for all video
3787 - * modes and forbids YCRCB422 support for all video modes per
3788 - * HDMI 1.3 spec.
3789 - */
3790 - info->color_formats = DRM_COLOR_FORMAT_RGB444;
3791 -
3792 /* YCRCB444 is optional according to spec. */
3793 if (hdmi[6] & DRM_EDID_HDMI_DC_Y444) {
3794 - info->color_formats |= DRM_COLOR_FORMAT_YCRCB444;
3795 DRM_DEBUG("%s: HDMI sink does YCRCB444 in deep color.\n",
3796 connector->name);
3797 }
3798 diff --git a/drivers/gpu/drm/drm_panel_orientation_quirks.c b/drivers/gpu/drm/drm_panel_orientation_quirks.c
3799 index 448c2f2d803a6..f5ab891731d0b 100644
3800 --- a/drivers/gpu/drm/drm_panel_orientation_quirks.c
3801 +++ b/drivers/gpu/drm/drm_panel_orientation_quirks.c
3802 @@ -166,6 +166,12 @@ static const struct dmi_system_id orientation_data[] = {
3803 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "MicroPC"),
3804 },
3805 .driver_data = (void *)&lcd720x1280_rightside_up,
3806 + }, { /* GPD Win Max */
3807 + .matches = {
3808 + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "GPD"),
3809 + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "G1619-01"),
3810 + },
3811 + .driver_data = (void *)&lcd800x1280_rightside_up,
3812 }, { /*
3813 * GPD Pocket, note that the the DMI data is less generic then
3814 * it seems, devices with a board-vendor of "AMI Corporation"
3815 diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c
3816 index be55548f352af..e24272428744c 100644
3817 --- a/drivers/gpu/drm/imx/parallel-display.c
3818 +++ b/drivers/gpu/drm/imx/parallel-display.c
3819 @@ -68,8 +68,10 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)
3820 ret = of_get_drm_display_mode(np, &imxpd->mode,
3821 &imxpd->bus_flags,
3822 OF_USE_NATIVE_MODE);
3823 - if (ret)
3824 + if (ret) {
3825 + drm_mode_destroy(connector->dev, mode);
3826 return ret;
3827 + }
3828
3829 drm_mode_copy(mode, &imxpd->mode);
3830 mode->type |= DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED,
3831 diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c
3832 index a5d47e301c5f7..13413d2b26028 100644
3833 --- a/drivers/gpu/drm/tegra/dsi.c
3834 +++ b/drivers/gpu/drm/tegra/dsi.c
3835 @@ -1455,8 +1455,10 @@ static int tegra_dsi_ganged_probe(struct tegra_dsi *dsi)
3836 dsi->slave = platform_get_drvdata(gangster);
3837 of_node_put(np);
3838
3839 - if (!dsi->slave)
3840 + if (!dsi->slave) {
3841 + put_device(&gangster->dev);
3842 return -EPROBE_DEFER;
3843 + }
3844
3845 dsi->slave->master = dsi;
3846 }
3847 diff --git a/drivers/greybus/svc.c b/drivers/greybus/svc.c
3848 index ce7740ef449ba..51d0875a34800 100644
3849 --- a/drivers/greybus/svc.c
3850 +++ b/drivers/greybus/svc.c
3851 @@ -866,8 +866,14 @@ static int gb_svc_hello(struct gb_operation *op)
3852
3853 gb_svc_debugfs_init(svc);
3854
3855 - return gb_svc_queue_deferred_request(op);
3856 + ret = gb_svc_queue_deferred_request(op);
3857 + if (ret)
3858 + goto err_remove_debugfs;
3859 +
3860 + return 0;
3861
3862 +err_remove_debugfs:
3863 + gb_svc_debugfs_exit(svc);
3864 err_unregister_device:
3865 gb_svc_watchdog_destroy(svc);
3866 device_del(&svc->dev);
3867 diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
3868 index 4267e2f2e70f4..a663cbb7b6832 100644
3869 --- a/drivers/hid/hid-logitech-dj.c
3870 +++ b/drivers/hid/hid-logitech-dj.c
3871 @@ -1000,6 +1000,7 @@ static void logi_hidpp_recv_queue_notif(struct hid_device *hdev,
3872 workitem.reports_supported |= STD_KEYBOARD;
3873 break;
3874 case 0x0f:
3875 + case 0x11:
3876 device_type = "eQUAD Lightspeed 1.2";
3877 logi_hidpp_dev_conn_notif_equad(hdev, hidpp_report, &workitem);
3878 workitem.reports_supported |= STD_KEYBOARD;
3879 diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c
3880 index ac076ac73de5d..1547b0ec6a113 100644
3881 --- a/drivers/hid/i2c-hid/i2c-hid-core.c
3882 +++ b/drivers/hid/i2c-hid/i2c-hid-core.c
3883 @@ -622,6 +622,17 @@ static int i2c_hid_get_raw_report(struct hid_device *hid,
3884 if (report_type == HID_OUTPUT_REPORT)
3885 return -EINVAL;
3886
3887 + /*
3888 + * In case of unnumbered reports the response from the device will
3889 + * not have the report ID that the upper layers expect, so we need
3890 + * to stash it the buffer ourselves and adjust the data size.
3891 + */
3892 + if (!report_number) {
3893 + buf[0] = 0;
3894 + buf++;
3895 + count--;
3896 + }
3897 +
3898 /* +2 bytes to include the size of the reply in the query buffer */
3899 ask_count = min(count + 2, (size_t)ihid->bufsize);
3900
3901 @@ -643,6 +654,9 @@ static int i2c_hid_get_raw_report(struct hid_device *hid,
3902 count = min(count, ret_count - 2);
3903 memcpy(buf, ihid->rawbuf + 2, count);
3904
3905 + if (!report_number)
3906 + count++;
3907 +
3908 return count;
3909 }
3910
3911 @@ -659,17 +673,19 @@ static int i2c_hid_output_raw_report(struct hid_device *hid, __u8 *buf,
3912
3913 mutex_lock(&ihid->reset_lock);
3914
3915 - if (report_id) {
3916 - buf++;
3917 - count--;
3918 - }
3919 -
3920 + /*
3921 + * Note that both numbered and unnumbered reports passed here
3922 + * are supposed to have report ID stored in the 1st byte of the
3923 + * buffer, so we strip it off unconditionally before passing payload
3924 + * to i2c_hid_set_or_send_report which takes care of encoding
3925 + * everything properly.
3926 + */
3927 ret = i2c_hid_set_or_send_report(client,
3928 report_type == HID_FEATURE_REPORT ? 0x03 : 0x02,
3929 - report_id, buf, count, use_data);
3930 + report_id, buf + 1, count - 1, use_data);
3931
3932 - if (report_id && ret >= 0)
3933 - ret++; /* add report_id to the number of transfered bytes */
3934 + if (ret >= 0)
3935 + ret++; /* add report_id to the number of transferred bytes */
3936
3937 mutex_unlock(&ihid->reset_lock);
3938
3939 diff --git a/drivers/hid/intel-ish-hid/ishtp-fw-loader.c b/drivers/hid/intel-ish-hid/ishtp-fw-loader.c
3940 index 6cf59fd26ad78..b6d6d119035ca 100644
3941 --- a/drivers/hid/intel-ish-hid/ishtp-fw-loader.c
3942 +++ b/drivers/hid/intel-ish-hid/ishtp-fw-loader.c
3943 @@ -656,21 +656,12 @@ static int ish_fw_xfer_direct_dma(struct ishtp_cl_data *client_data,
3944 */
3945 payload_max_size &= ~(L1_CACHE_BYTES - 1);
3946
3947 - dma_buf = kmalloc(payload_max_size, GFP_KERNEL | GFP_DMA32);
3948 + dma_buf = dma_alloc_coherent(devc, payload_max_size, &dma_buf_phy, GFP_KERNEL);
3949 if (!dma_buf) {
3950 client_data->flag_retry = true;
3951 return -ENOMEM;
3952 }
3953
3954 - dma_buf_phy = dma_map_single(devc, dma_buf, payload_max_size,
3955 - DMA_TO_DEVICE);
3956 - if (dma_mapping_error(devc, dma_buf_phy)) {
3957 - dev_err(cl_data_to_dev(client_data), "DMA map failed\n");
3958 - client_data->flag_retry = true;
3959 - rv = -ENOMEM;
3960 - goto end_err_dma_buf_release;
3961 - }
3962 -
3963 ldr_xfer_dma_frag.fragment.hdr.command = LOADER_CMD_XFER_FRAGMENT;
3964 ldr_xfer_dma_frag.fragment.xfer_mode = LOADER_XFER_MODE_DIRECT_DMA;
3965 ldr_xfer_dma_frag.ddr_phys_addr = (u64)dma_buf_phy;
3966 @@ -690,14 +681,7 @@ static int ish_fw_xfer_direct_dma(struct ishtp_cl_data *client_data,
3967 ldr_xfer_dma_frag.fragment.size = fragment_size;
3968 memcpy(dma_buf, &fw->data[fragment_offset], fragment_size);
3969
3970 - dma_sync_single_for_device(devc, dma_buf_phy,
3971 - payload_max_size,
3972 - DMA_TO_DEVICE);
3973 -
3974 - /*
3975 - * Flush cache here because the dma_sync_single_for_device()
3976 - * does not do for x86.
3977 - */
3978 + /* Flush cache to be sure the data is in main memory. */
3979 clflush_cache_range(dma_buf, payload_max_size);
3980
3981 dev_dbg(cl_data_to_dev(client_data),
3982 @@ -720,15 +704,8 @@ static int ish_fw_xfer_direct_dma(struct ishtp_cl_data *client_data,
3983 fragment_offset += fragment_size;
3984 }
3985
3986 - dma_unmap_single(devc, dma_buf_phy, payload_max_size, DMA_TO_DEVICE);
3987 - kfree(dma_buf);
3988 - return 0;
3989 -
3990 end_err_resp_buf_release:
3991 - /* Free ISH buffer if not done already, in error case */
3992 - dma_unmap_single(devc, dma_buf_phy, payload_max_size, DMA_TO_DEVICE);
3993 -end_err_dma_buf_release:
3994 - kfree(dma_buf);
3995 + dma_free_coherent(devc, payload_max_size, dma_buf, dma_buf_phy);
3996 return rv;
3997 }
3998
3999 diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c
4000 index bd4e72f6dfd49..44d6de6fc03da 100644
4001 --- a/drivers/hv/hv_balloon.c
4002 +++ b/drivers/hv/hv_balloon.c
4003 @@ -1550,7 +1550,7 @@ static void balloon_onchannelcallback(void *context)
4004 break;
4005
4006 default:
4007 - pr_warn("Unhandled message: type: %d\n", dm_hdr->type);
4008 + pr_warn_ratelimited("Unhandled message: type: %d\n", dm_hdr->type);
4009
4010 }
4011 }
4012 diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
4013 index 6b7ab8f234e87..943654ded73d0 100644
4014 --- a/drivers/hv/vmbus_drv.c
4015 +++ b/drivers/hv/vmbus_drv.c
4016 @@ -2493,10 +2493,15 @@ static void __exit vmbus_exit(void)
4017 if (ms_hyperv.misc_features & HV_FEATURE_GUEST_CRASH_MSR_AVAILABLE) {
4018 kmsg_dump_unregister(&hv_kmsg_dumper);
4019 unregister_die_notifier(&hyperv_die_block);
4020 - atomic_notifier_chain_unregister(&panic_notifier_list,
4021 - &hyperv_panic_block);
4022 }
4023
4024 + /*
4025 + * The panic notifier is always registered, hence we should
4026 + * also unconditionally unregister it here as well.
4027 + */
4028 + atomic_notifier_chain_unregister(&panic_notifier_list,
4029 + &hyperv_panic_block);
4030 +
4031 free_page((unsigned long)hv_panic_page);
4032 unregister_sysctl_table(hv_ctl_table_hdr);
4033 hv_ctl_table_hdr = NULL;
4034 diff --git a/drivers/hwmon/pmbus/pmbus.h b/drivers/hwmon/pmbus/pmbus.h
4035 index d198af3a92b6f..9731f1f830b16 100644
4036 --- a/drivers/hwmon/pmbus/pmbus.h
4037 +++ b/drivers/hwmon/pmbus/pmbus.h
4038 @@ -292,6 +292,7 @@ enum pmbus_fan_mode { percent = 0, rpm };
4039 /*
4040 * STATUS_VOUT, STATUS_INPUT
4041 */
4042 +#define PB_VOLTAGE_VIN_OFF BIT(3)
4043 #define PB_VOLTAGE_UV_FAULT BIT(4)
4044 #define PB_VOLTAGE_UV_WARNING BIT(5)
4045 #define PB_VOLTAGE_OV_WARNING BIT(6)
4046 diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c
4047 index 8470097907bc2..beb443d020c20 100644
4048 --- a/drivers/hwmon/pmbus/pmbus_core.c
4049 +++ b/drivers/hwmon/pmbus/pmbus_core.c
4050 @@ -1324,7 +1324,7 @@ static const struct pmbus_limit_attr vin_limit_attrs[] = {
4051 .reg = PMBUS_VIN_UV_FAULT_LIMIT,
4052 .attr = "lcrit",
4053 .alarm = "lcrit_alarm",
4054 - .sbit = PB_VOLTAGE_UV_FAULT,
4055 + .sbit = PB_VOLTAGE_UV_FAULT | PB_VOLTAGE_VIN_OFF,
4056 }, {
4057 .reg = PMBUS_VIN_OV_WARN_LIMIT,
4058 .attr = "max",
4059 @@ -2174,10 +2174,14 @@ static int pmbus_regulator_is_enabled(struct regulator_dev *rdev)
4060 {
4061 struct device *dev = rdev_get_dev(rdev);
4062 struct i2c_client *client = to_i2c_client(dev->parent);
4063 + struct pmbus_data *data = i2c_get_clientdata(client);
4064 u8 page = rdev_get_id(rdev);
4065 int ret;
4066
4067 + mutex_lock(&data->update_lock);
4068 ret = pmbus_read_byte_data(client, page, PMBUS_OPERATION);
4069 + mutex_unlock(&data->update_lock);
4070 +
4071 if (ret < 0)
4072 return ret;
4073
4074 @@ -2188,11 +2192,17 @@ static int _pmbus_regulator_on_off(struct regulator_dev *rdev, bool enable)
4075 {
4076 struct device *dev = rdev_get_dev(rdev);
4077 struct i2c_client *client = to_i2c_client(dev->parent);
4078 + struct pmbus_data *data = i2c_get_clientdata(client);
4079 u8 page = rdev_get_id(rdev);
4080 + int ret;
4081
4082 - return pmbus_update_byte_data(client, page, PMBUS_OPERATION,
4083 - PB_OPERATION_CONTROL_ON,
4084 - enable ? PB_OPERATION_CONTROL_ON : 0);
4085 + mutex_lock(&data->update_lock);
4086 + ret = pmbus_update_byte_data(client, page, PMBUS_OPERATION,
4087 + PB_OPERATION_CONTROL_ON,
4088 + enable ? PB_OPERATION_CONTROL_ON : 0);
4089 + mutex_unlock(&data->update_lock);
4090 +
4091 + return ret;
4092 }
4093
4094 static int pmbus_regulator_enable(struct regulator_dev *rdev)
4095 diff --git a/drivers/hwmon/sch56xx-common.c b/drivers/hwmon/sch56xx-common.c
4096 index 6c84780e358e8..066b12990fbfb 100644
4097 --- a/drivers/hwmon/sch56xx-common.c
4098 +++ b/drivers/hwmon/sch56xx-common.c
4099 @@ -424,7 +424,7 @@ struct sch56xx_watchdog_data *sch56xx_watchdog_register(struct device *parent,
4100 if (nowayout)
4101 set_bit(WDOG_NO_WAY_OUT, &data->wddev.status);
4102 if (output_enable & SCH56XX_WDOG_OUTPUT_ENABLE)
4103 - set_bit(WDOG_ACTIVE, &data->wddev.status);
4104 + set_bit(WDOG_HW_RUNNING, &data->wddev.status);
4105
4106 /* Since the watchdog uses a downcounter there is no register to read
4107 the BIOS set timeout from (if any was set at all) ->
4108 diff --git a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
4109 index ee44640edeb52..4c9e2fc533529 100644
4110 --- a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
4111 +++ b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
4112 @@ -364,8 +364,12 @@ static ssize_t mode_store(struct device *dev,
4113 mode = ETM_MODE_QELEM(config->mode);
4114 /* start by clearing QE bits */
4115 config->cfg &= ~(BIT(13) | BIT(14));
4116 - /* if supported, Q elements with instruction counts are enabled */
4117 - if ((mode & BIT(0)) && (drvdata->q_support & BIT(0)))
4118 + /*
4119 + * if supported, Q elements with instruction counts are enabled.
4120 + * Always set the low bit for any requested mode. Valid combos are
4121 + * 0b00, 0b01 and 0b11.
4122 + */
4123 + if (mode && drvdata->q_support)
4124 config->cfg |= BIT(13);
4125 /*
4126 * if supported, Q elements with and without instruction
4127 diff --git a/drivers/i2c/busses/i2c-xiic.c b/drivers/i2c/busses/i2c-xiic.c
4128 index 37b3b9307d076..a48bee59dcdec 100644
4129 --- a/drivers/i2c/busses/i2c-xiic.c
4130 +++ b/drivers/i2c/busses/i2c-xiic.c
4131 @@ -715,7 +715,6 @@ static const struct i2c_adapter_quirks xiic_quirks = {
4132
4133 static const struct i2c_adapter xiic_adapter = {
4134 .owner = THIS_MODULE,
4135 - .name = DRIVER_NAME,
4136 .class = I2C_CLASS_DEPRECATED,
4137 .algo = &xiic_algorithm,
4138 .quirks = &xiic_quirks,
4139 @@ -752,6 +751,8 @@ static int xiic_i2c_probe(struct platform_device *pdev)
4140 i2c_set_adapdata(&i2c->adap, i2c);
4141 i2c->adap.dev.parent = &pdev->dev;
4142 i2c->adap.dev.of_node = pdev->dev.of_node;
4143 + snprintf(i2c->adap.name, sizeof(i2c->adap.name),
4144 + DRIVER_NAME " %s", pdev->name);
4145
4146 mutex_init(&i2c->lock);
4147 init_waitqueue_head(&i2c->wait);
4148 diff --git a/drivers/i2c/muxes/i2c-demux-pinctrl.c b/drivers/i2c/muxes/i2c-demux-pinctrl.c
4149 index 5365199a31f41..f7a7405d4350a 100644
4150 --- a/drivers/i2c/muxes/i2c-demux-pinctrl.c
4151 +++ b/drivers/i2c/muxes/i2c-demux-pinctrl.c
4152 @@ -261,7 +261,7 @@ static int i2c_demux_pinctrl_probe(struct platform_device *pdev)
4153
4154 err = device_create_file(&pdev->dev, &dev_attr_available_masters);
4155 if (err)
4156 - goto err_rollback;
4157 + goto err_rollback_activation;
4158
4159 err = device_create_file(&pdev->dev, &dev_attr_current_master);
4160 if (err)
4161 @@ -271,8 +271,9 @@ static int i2c_demux_pinctrl_probe(struct platform_device *pdev)
4162
4163 err_rollback_available:
4164 device_remove_file(&pdev->dev, &dev_attr_available_masters);
4165 -err_rollback:
4166 +err_rollback_activation:
4167 i2c_demux_deactivate_master(priv);
4168 +err_rollback:
4169 for (j = 0; j < i; j++) {
4170 of_node_put(priv->chan[j].parent_np);
4171 of_changeset_destroy(&priv->chan[j].chgset);
4172 diff --git a/drivers/iio/adc/twl6030-gpadc.c b/drivers/iio/adc/twl6030-gpadc.c
4173 index f24148bd15de4..fb77c3ff5a3e4 100644
4174 --- a/drivers/iio/adc/twl6030-gpadc.c
4175 +++ b/drivers/iio/adc/twl6030-gpadc.c
4176 @@ -911,6 +911,8 @@ static int twl6030_gpadc_probe(struct platform_device *pdev)
4177 ret = devm_request_threaded_irq(dev, irq, NULL,
4178 twl6030_gpadc_irq_handler,
4179 IRQF_ONESHOT, "twl6030_gpadc", indio_dev);
4180 + if (ret)
4181 + return ret;
4182
4183 ret = twl6030_gpadc_enable_irq(TWL6030_GPADC_RT_SW1_EOC_MASK);
4184 if (ret < 0) {
4185 diff --git a/drivers/iio/afe/iio-rescale.c b/drivers/iio/afe/iio-rescale.c
4186 index e9ceee66d1e7c..d9c41db8155f9 100644
4187 --- a/drivers/iio/afe/iio-rescale.c
4188 +++ b/drivers/iio/afe/iio-rescale.c
4189 @@ -38,7 +38,7 @@ static int rescale_read_raw(struct iio_dev *indio_dev,
4190 int *val, int *val2, long mask)
4191 {
4192 struct rescale *rescale = iio_priv(indio_dev);
4193 - unsigned long long tmp;
4194 + s64 tmp;
4195 int ret;
4196
4197 switch (mask) {
4198 @@ -59,10 +59,10 @@ static int rescale_read_raw(struct iio_dev *indio_dev,
4199 *val2 = rescale->denominator;
4200 return IIO_VAL_FRACTIONAL;
4201 case IIO_VAL_FRACTIONAL_LOG2:
4202 - tmp = *val * 1000000000LL;
4203 - do_div(tmp, rescale->denominator);
4204 + tmp = (s64)*val * 1000000000LL;
4205 + tmp = div_s64(tmp, rescale->denominator);
4206 tmp *= rescale->numerator;
4207 - do_div(tmp, 1000000000LL);
4208 + tmp = div_s64(tmp, 1000000000LL);
4209 *val = tmp;
4210 return ret;
4211 default:
4212 diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
4213 index 5a8351c9a4265..ca0fe902a7db4 100644
4214 --- a/drivers/iio/inkern.c
4215 +++ b/drivers/iio/inkern.c
4216 @@ -588,28 +588,50 @@ EXPORT_SYMBOL_GPL(iio_read_channel_average_raw);
4217 static int iio_convert_raw_to_processed_unlocked(struct iio_channel *chan,
4218 int raw, int *processed, unsigned int scale)
4219 {
4220 - int scale_type, scale_val, scale_val2, offset;
4221 + int scale_type, scale_val, scale_val2;
4222 + int offset_type, offset_val, offset_val2;
4223 s64 raw64 = raw;
4224 - int ret;
4225
4226 - ret = iio_channel_read(chan, &offset, NULL, IIO_CHAN_INFO_OFFSET);
4227 - if (ret >= 0)
4228 - raw64 += offset;
4229 + offset_type = iio_channel_read(chan, &offset_val, &offset_val2,
4230 + IIO_CHAN_INFO_OFFSET);
4231 + if (offset_type >= 0) {
4232 + switch (offset_type) {
4233 + case IIO_VAL_INT:
4234 + break;
4235 + case IIO_VAL_INT_PLUS_MICRO:
4236 + case IIO_VAL_INT_PLUS_NANO:
4237 + /*
4238 + * Both IIO_VAL_INT_PLUS_MICRO and IIO_VAL_INT_PLUS_NANO
4239 + * implicitely truncate the offset to it's integer form.
4240 + */
4241 + break;
4242 + case IIO_VAL_FRACTIONAL:
4243 + offset_val /= offset_val2;
4244 + break;
4245 + case IIO_VAL_FRACTIONAL_LOG2:
4246 + offset_val >>= offset_val2;
4247 + break;
4248 + default:
4249 + return -EINVAL;
4250 + }
4251 +
4252 + raw64 += offset_val;
4253 + }
4254
4255 scale_type = iio_channel_read(chan, &scale_val, &scale_val2,
4256 IIO_CHAN_INFO_SCALE);
4257 if (scale_type < 0) {
4258 /*
4259 - * Just pass raw values as processed if no scaling is
4260 - * available.
4261 + * If no channel scaling is available apply consumer scale to
4262 + * raw value and return.
4263 */
4264 - *processed = raw;
4265 + *processed = raw * scale;
4266 return 0;
4267 }
4268
4269 switch (scale_type) {
4270 case IIO_VAL_INT:
4271 - *processed = raw64 * scale_val;
4272 + *processed = raw64 * scale_val * scale;
4273 break;
4274 case IIO_VAL_INT_PLUS_MICRO:
4275 if (scale_val2 < 0)
4276 diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
4277 index 5e2b688e36fca..de7df5ab06f3b 100644
4278 --- a/drivers/infiniband/core/cma.c
4279 +++ b/drivers/infiniband/core/cma.c
4280 @@ -2559,7 +2559,7 @@ int rdma_set_ack_timeout(struct rdma_cm_id *id, u8 timeout)
4281 {
4282 struct rdma_id_private *id_priv;
4283
4284 - if (id->qp_type != IB_QPT_RC)
4285 + if (id->qp_type != IB_QPT_RC && id->qp_type != IB_QPT_XRC_INI)
4286 return -EINVAL;
4287
4288 id_priv = container_of(id, struct rdma_id_private, id);
4289 diff --git a/drivers/infiniband/hw/mlx5/devx.c b/drivers/infiniband/hw/mlx5/devx.c
4290 index 664e0f374ac00..747f42855b7bd 100644
4291 --- a/drivers/infiniband/hw/mlx5/devx.c
4292 +++ b/drivers/infiniband/hw/mlx5/devx.c
4293 @@ -1844,8 +1844,10 @@ subscribe_event_xa_alloc(struct mlx5_devx_event_table *devx_event_table,
4294 key_level2,
4295 obj_event,
4296 GFP_KERNEL);
4297 - if (err)
4298 + if (err) {
4299 + kfree(obj_event);
4300 return err;
4301 + }
4302 INIT_LIST_HEAD(&obj_event->obj_sub_list);
4303 }
4304
4305 diff --git a/drivers/infiniband/sw/rdmavt/qp.c b/drivers/infiniband/sw/rdmavt/qp.c
4306 index a5152f097cb7a..48e8612c1bc8d 100644
4307 --- a/drivers/infiniband/sw/rdmavt/qp.c
4308 +++ b/drivers/infiniband/sw/rdmavt/qp.c
4309 @@ -3227,7 +3227,11 @@ serr_no_r_lock:
4310 spin_lock_irqsave(&sqp->s_lock, flags);
4311 rvt_send_complete(sqp, wqe, send_status);
4312 if (sqp->ibqp.qp_type == IB_QPT_RC) {
4313 - int lastwqe = rvt_error_qp(sqp, IB_WC_WR_FLUSH_ERR);
4314 + int lastwqe;
4315 +
4316 + spin_lock(&sqp->r_lock);
4317 + lastwqe = rvt_error_qp(sqp, IB_WC_WR_FLUSH_ERR);
4318 + spin_unlock(&sqp->r_lock);
4319
4320 sqp->s_flags &= ~RVT_S_BUSY;
4321 spin_unlock_irqrestore(&sqp->s_lock, flags);
4322 diff --git a/drivers/input/input.c b/drivers/input/input.c
4323 index f7398b996bacf..e2eb9b9b8363d 100644
4324 --- a/drivers/input/input.c
4325 +++ b/drivers/input/input.c
4326 @@ -2181,12 +2181,6 @@ int input_register_device(struct input_dev *dev)
4327 /* KEY_RESERVED is not supposed to be transmitted to userspace. */
4328 __clear_bit(KEY_RESERVED, dev->keybit);
4329
4330 - /* Buttonpads should not map BTN_RIGHT and/or BTN_MIDDLE. */
4331 - if (test_bit(INPUT_PROP_BUTTONPAD, dev->propbit)) {
4332 - __clear_bit(BTN_RIGHT, dev->keybit);
4333 - __clear_bit(BTN_MIDDLE, dev->keybit);
4334 - }
4335 -
4336 /* Make sure that bitmasks not mentioned in dev->evbit are clean. */
4337 input_cleanse_bitmasks(dev);
4338
4339 diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
4340 index ef6af714a7e64..02c2fb551f381 100644
4341 --- a/drivers/iommu/arm-smmu-v3.c
4342 +++ b/drivers/iommu/arm-smmu-v3.c
4343 @@ -1708,6 +1708,7 @@ static irqreturn_t arm_smmu_evtq_thread(int irq, void *dev)
4344 dev_info(smmu->dev, "\t0x%016llx\n",
4345 (unsigned long long)evt[i]);
4346
4347 + cond_resched();
4348 }
4349
4350 /*
4351 diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c
4352 index 906582a21124d..628a586be6959 100644
4353 --- a/drivers/iommu/iova.c
4354 +++ b/drivers/iommu/iova.c
4355 @@ -138,10 +138,11 @@ __cached_rbnode_delete_update(struct iova_domain *iovad, struct iova *free)
4356 cached_iova = rb_entry(iovad->cached32_node, struct iova, node);
4357 if (free == cached_iova ||
4358 (free->pfn_hi < iovad->dma_32bit_pfn &&
4359 - free->pfn_lo >= cached_iova->pfn_lo)) {
4360 + free->pfn_lo >= cached_iova->pfn_lo))
4361 iovad->cached32_node = rb_next(&free->node);
4362 +
4363 + if (free->pfn_lo < iovad->dma_32bit_pfn)
4364 iovad->max32_alloc_size = iovad->dma_32bit_pfn;
4365 - }
4366
4367 cached_iova = rb_entry(iovad->cached_node, struct iova, node);
4368 if (free->pfn_lo >= cached_iova->pfn_lo)
4369 diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c
4370 index 2639fc7181171..584eefab1dbcd 100644
4371 --- a/drivers/iommu/ipmmu-vmsa.c
4372 +++ b/drivers/iommu/ipmmu-vmsa.c
4373 @@ -1061,7 +1061,9 @@ static int ipmmu_probe(struct platform_device *pdev)
4374 bitmap_zero(mmu->ctx, IPMMU_CTX_MAX);
4375 mmu->features = of_device_get_match_data(&pdev->dev);
4376 memset(mmu->utlb_ctx, IPMMU_CTX_INVALID, mmu->features->num_utlbs);
4377 - dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(40));
4378 + ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(40));
4379 + if (ret)
4380 + return ret;
4381
4382 /* Map I/O memory and request IRQ. */
4383 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
4384 diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
4385 index 9d0b42cb9903e..f589ca2480a1d 100644
4386 --- a/drivers/irqchip/irq-gic-v3.c
4387 +++ b/drivers/irqchip/irq-gic-v3.c
4388 @@ -162,11 +162,11 @@ static inline void __iomem *gic_dist_base(struct irq_data *d)
4389 }
4390 }
4391
4392 -static void gic_do_wait_for_rwp(void __iomem *base)
4393 +static void gic_do_wait_for_rwp(void __iomem *base, u32 bit)
4394 {
4395 u32 count = 1000000; /* 1s! */
4396
4397 - while (readl_relaxed(base + GICD_CTLR) & GICD_CTLR_RWP) {
4398 + while (readl_relaxed(base + GICD_CTLR) & bit) {
4399 count--;
4400 if (!count) {
4401 pr_err_ratelimited("RWP timeout, gone fishing\n");
4402 @@ -180,13 +180,13 @@ static void gic_do_wait_for_rwp(void __iomem *base)
4403 /* Wait for completion of a distributor change */
4404 static void gic_dist_wait_for_rwp(void)
4405 {
4406 - gic_do_wait_for_rwp(gic_data.dist_base);
4407 + gic_do_wait_for_rwp(gic_data.dist_base, GICD_CTLR_RWP);
4408 }
4409
4410 /* Wait for completion of a redistributor change */
4411 static void gic_redist_wait_for_rwp(void)
4412 {
4413 - gic_do_wait_for_rwp(gic_data_rdist_rd_base());
4414 + gic_do_wait_for_rwp(gic_data_rdist_rd_base(), GICR_CTLR_RWP);
4415 }
4416
4417 #ifdef CONFIG_ARM64
4418 diff --git a/drivers/irqchip/irq-nvic.c b/drivers/irqchip/irq-nvic.c
4419 index 160b39b5cd108..128a26d219e2c 100644
4420 --- a/drivers/irqchip/irq-nvic.c
4421 +++ b/drivers/irqchip/irq-nvic.c
4422 @@ -105,6 +105,7 @@ static int __init nvic_of_init(struct device_node *node,
4423
4424 if (!nvic_irq_domain) {
4425 pr_warn("Failed to allocate irq domain\n");
4426 + iounmap(nvic_base);
4427 return -ENOMEM;
4428 }
4429
4430 @@ -114,6 +115,7 @@ static int __init nvic_of_init(struct device_node *node,
4431 if (ret) {
4432 pr_warn("Failed to allocate irq chips\n");
4433 irq_domain_remove(nvic_irq_domain);
4434 + iounmap(nvic_base);
4435 return ret;
4436 }
4437
4438 diff --git a/drivers/irqchip/qcom-pdc.c b/drivers/irqchip/qcom-pdc.c
4439 index faa7d61b9d6c4..239a889df6080 100644
4440 --- a/drivers/irqchip/qcom-pdc.c
4441 +++ b/drivers/irqchip/qcom-pdc.c
4442 @@ -50,17 +50,18 @@ static u32 pdc_reg_read(int reg, u32 i)
4443 static void pdc_enable_intr(struct irq_data *d, bool on)
4444 {
4445 int pin_out = d->hwirq;
4446 + unsigned long flags;
4447 u32 index, mask;
4448 u32 enable;
4449
4450 index = pin_out / 32;
4451 mask = pin_out % 32;
4452
4453 - raw_spin_lock(&pdc_lock);
4454 + raw_spin_lock_irqsave(&pdc_lock, flags);
4455 enable = pdc_reg_read(IRQ_ENABLE_BANK, index);
4456 enable = on ? ENABLE_INTR(enable, mask) : CLEAR_INTR(enable, mask);
4457 pdc_reg_write(IRQ_ENABLE_BANK, index, enable);
4458 - raw_spin_unlock(&pdc_lock);
4459 + raw_spin_unlock_irqrestore(&pdc_lock, flags);
4460 }
4461
4462 static void qcom_pdc_gic_mask(struct irq_data *d)
4463 diff --git a/drivers/mailbox/tegra-hsp.c b/drivers/mailbox/tegra-hsp.c
4464 index 834b35dc3b137..e9b392dc09bc2 100644
4465 --- a/drivers/mailbox/tegra-hsp.c
4466 +++ b/drivers/mailbox/tegra-hsp.c
4467 @@ -403,6 +403,11 @@ static int tegra_hsp_mailbox_flush(struct mbox_chan *chan,
4468 value = tegra_hsp_channel_readl(ch, HSP_SM_SHRD_MBOX);
4469 if ((value & HSP_SM_SHRD_MBOX_FULL) == 0) {
4470 mbox_chan_txdone(chan, 0);
4471 +
4472 + /* Wait until channel is empty */
4473 + if (chan->active_req != NULL)
4474 + continue;
4475 +
4476 return 0;
4477 }
4478
4479 diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
4480 index 571c04e70343a..3ed8ca47bc6e6 100644
4481 --- a/drivers/md/dm-crypt.c
4482 +++ b/drivers/md/dm-crypt.c
4483 @@ -2010,7 +2010,7 @@ static int crypt_set_keyring_key(struct crypt_config *cc, const char *key_string
4484
4485 static int get_key_size(char **key_string)
4486 {
4487 - return (*key_string[0] == ':') ? -EINVAL : strlen(*key_string) >> 1;
4488 + return (*key_string[0] == ':') ? -EINVAL : (int)(strlen(*key_string) >> 1);
4489 }
4490
4491 #endif
4492 diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
4493 index 3f15d8dc2b71f..7a73f2fa0ad72 100644
4494 --- a/drivers/md/dm-ioctl.c
4495 +++ b/drivers/md/dm-ioctl.c
4496 @@ -17,6 +17,7 @@
4497 #include <linux/dm-ioctl.h>
4498 #include <linux/hdreg.h>
4499 #include <linux/compat.h>
4500 +#include <linux/nospec.h>
4501
4502 #include <linux/uaccess.h>
4503
4504 @@ -1696,6 +1697,7 @@ static ioctl_fn lookup_ioctl(unsigned int cmd, int *ioctl_flags)
4505 if (unlikely(cmd >= ARRAY_SIZE(_ioctls)))
4506 return NULL;
4507
4508 + cmd = array_index_nospec(cmd, ARRAY_SIZE(_ioctls));
4509 *ioctl_flags = _ioctls[cmd].flags;
4510 return _ioctls[cmd].fn;
4511 }
4512 diff --git a/drivers/media/i2c/adv7511-v4l2.c b/drivers/media/i2c/adv7511-v4l2.c
4513 index 809fa44ed9880..86267e01c2511 100644
4514 --- a/drivers/media/i2c/adv7511-v4l2.c
4515 +++ b/drivers/media/i2c/adv7511-v4l2.c
4516 @@ -555,7 +555,7 @@ static void log_infoframe(struct v4l2_subdev *sd, const struct adv7511_cfg_read_
4517 buffer[3] = 0;
4518 buffer[3] = hdmi_infoframe_checksum(buffer, len + 4);
4519
4520 - if (hdmi_infoframe_unpack(&frame, buffer, sizeof(buffer)) < 0) {
4521 + if (hdmi_infoframe_unpack(&frame, buffer, len + 4) < 0) {
4522 v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
4523 return;
4524 }
4525 diff --git a/drivers/media/i2c/adv7604.c b/drivers/media/i2c/adv7604.c
4526 index b887299ac195f..1cee69919e1b9 100644
4527 --- a/drivers/media/i2c/adv7604.c
4528 +++ b/drivers/media/i2c/adv7604.c
4529 @@ -2444,7 +2444,7 @@ static int adv76xx_read_infoframe(struct v4l2_subdev *sd, int index,
4530 buffer[i + 3] = infoframe_read(sd,
4531 adv76xx_cri[index].payload_addr + i);
4532
4533 - if (hdmi_infoframe_unpack(frame, buffer, sizeof(buffer)) < 0) {
4534 + if (hdmi_infoframe_unpack(frame, buffer, len + 3) < 0) {
4535 v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__,
4536 adv76xx_cri[index].desc);
4537 return -ENOENT;
4538 diff --git a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/adv7842.c
4539 index 02cbab826d0b6..a581e822ce6f5 100644
4540 --- a/drivers/media/i2c/adv7842.c
4541 +++ b/drivers/media/i2c/adv7842.c
4542 @@ -2574,7 +2574,7 @@ static void log_infoframe(struct v4l2_subdev *sd, struct adv7842_cfg_read_infofr
4543 for (i = 0; i < len; i++)
4544 buffer[i + 3] = infoframe_read(sd, cri->payload_addr + i);
4545
4546 - if (hdmi_infoframe_unpack(&frame, buffer, sizeof(buffer)) < 0) {
4547 + if (hdmi_infoframe_unpack(&frame, buffer, len + 3) < 0) {
4548 v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
4549 return;
4550 }
4551 diff --git a/drivers/media/pci/bt8xx/bttv-driver.c b/drivers/media/pci/bt8xx/bttv-driver.c
4552 index 570530d976d21..6441e7d63d971 100644
4553 --- a/drivers/media/pci/bt8xx/bttv-driver.c
4554 +++ b/drivers/media/pci/bt8xx/bttv-driver.c
4555 @@ -3898,7 +3898,7 @@ static int bttv_register_video(struct bttv *btv)
4556
4557 /* video */
4558 vdev_init(btv, &btv->video_dev, &bttv_video_template, "video");
4559 - btv->video_dev.device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER |
4560 + btv->video_dev.device_caps = V4L2_CAP_VIDEO_CAPTURE |
4561 V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
4562 if (btv->tuner_type != TUNER_ABSENT)
4563 btv->video_dev.device_caps |= V4L2_CAP_TUNER;
4564 @@ -3919,7 +3919,7 @@ static int bttv_register_video(struct bttv *btv)
4565 /* vbi */
4566 vdev_init(btv, &btv->vbi_dev, &bttv_video_template, "vbi");
4567 btv->vbi_dev.device_caps = V4L2_CAP_VBI_CAPTURE | V4L2_CAP_READWRITE |
4568 - V4L2_CAP_STREAMING | V4L2_CAP_TUNER;
4569 + V4L2_CAP_STREAMING;
4570 if (btv->tuner_type != TUNER_ABSENT)
4571 btv->vbi_dev.device_caps |= V4L2_CAP_TUNER;
4572
4573 diff --git a/drivers/media/pci/cx88/cx88-mpeg.c b/drivers/media/pci/cx88/cx88-mpeg.c
4574 index a57c991b165b1..10d2971ef0624 100644
4575 --- a/drivers/media/pci/cx88/cx88-mpeg.c
4576 +++ b/drivers/media/pci/cx88/cx88-mpeg.c
4577 @@ -162,6 +162,9 @@ int cx8802_start_dma(struct cx8802_dev *dev,
4578 cx_write(MO_TS_GPCNTRL, GP_COUNT_CONTROL_RESET);
4579 q->count = 0;
4580
4581 + /* clear interrupt status register */
4582 + cx_write(MO_TS_INTSTAT, 0x1f1111);
4583 +
4584 /* enable irqs */
4585 dprintk(1, "setting the interrupt mask\n");
4586 cx_set(MO_PCI_INTMSK, core->pci_irqmask | PCI_INT_TSINT);
4587 diff --git a/drivers/media/pci/ivtv/ivtv-driver.h b/drivers/media/pci/ivtv/ivtv-driver.h
4588 index cafba6b1055df..90f38552bd362 100644
4589 --- a/drivers/media/pci/ivtv/ivtv-driver.h
4590 +++ b/drivers/media/pci/ivtv/ivtv-driver.h
4591 @@ -333,7 +333,6 @@ struct ivtv_stream {
4592 struct ivtv *itv; /* for ease of use */
4593 const char *name; /* name of the stream */
4594 int type; /* stream type */
4595 - u32 caps; /* V4L2 capabilities */
4596
4597 struct v4l2_fh *fh; /* pointer to the streaming filehandle */
4598 spinlock_t qlock; /* locks access to the queues */
4599 diff --git a/drivers/media/pci/ivtv/ivtv-ioctl.c b/drivers/media/pci/ivtv/ivtv-ioctl.c
4600 index 137853944e461..396cc931f41a2 100644
4601 --- a/drivers/media/pci/ivtv/ivtv-ioctl.c
4602 +++ b/drivers/media/pci/ivtv/ivtv-ioctl.c
4603 @@ -443,7 +443,7 @@ static int ivtv_g_fmt_vid_out_overlay(struct file *file, void *fh, struct v4l2_f
4604 struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
4605 struct v4l2_window *winfmt = &fmt->fmt.win;
4606
4607 - if (!(s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
4608 + if (!(s->vdev.device_caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
4609 return -EINVAL;
4610 if (!itv->osd_video_pbase)
4611 return -EINVAL;
4612 @@ -554,7 +554,7 @@ static int ivtv_try_fmt_vid_out_overlay(struct file *file, void *fh, struct v4l2
4613 u32 chromakey = fmt->fmt.win.chromakey;
4614 u8 global_alpha = fmt->fmt.win.global_alpha;
4615
4616 - if (!(s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
4617 + if (!(s->vdev.device_caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
4618 return -EINVAL;
4619 if (!itv->osd_video_pbase)
4620 return -EINVAL;
4621 @@ -1386,7 +1386,7 @@ static int ivtv_g_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *fb)
4622 0,
4623 };
4624
4625 - if (!(s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
4626 + if (!(s->vdev.device_caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
4627 return -ENOTTY;
4628 if (!itv->osd_video_pbase)
4629 return -ENOTTY;
4630 @@ -1453,7 +1453,7 @@ static int ivtv_s_fbuf(struct file *file, void *fh, const struct v4l2_framebuffe
4631 struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
4632 struct yuv_playback_info *yi = &itv->yuv_info;
4633
4634 - if (!(s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
4635 + if (!(s->vdev.device_caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
4636 return -ENOTTY;
4637 if (!itv->osd_video_pbase)
4638 return -ENOTTY;
4639 @@ -1473,7 +1473,7 @@ static int ivtv_overlay(struct file *file, void *fh, unsigned int on)
4640 struct ivtv *itv = id->itv;
4641 struct ivtv_stream *s = &itv->streams[fh2id(fh)->type];
4642
4643 - if (!(s->caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
4644 + if (!(s->vdev.device_caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY))
4645 return -ENOTTY;
4646 if (!itv->osd_video_pbase)
4647 return -ENOTTY;
4648 diff --git a/drivers/media/pci/ivtv/ivtv-streams.c b/drivers/media/pci/ivtv/ivtv-streams.c
4649 index f7de9118f609d..200d2100dbffd 100644
4650 --- a/drivers/media/pci/ivtv/ivtv-streams.c
4651 +++ b/drivers/media/pci/ivtv/ivtv-streams.c
4652 @@ -176,7 +176,7 @@ static void ivtv_stream_init(struct ivtv *itv, int type)
4653 s->itv = itv;
4654 s->type = type;
4655 s->name = ivtv_stream_info[type].name;
4656 - s->caps = ivtv_stream_info[type].v4l2_caps;
4657 + s->vdev.device_caps = ivtv_stream_info[type].v4l2_caps;
4658
4659 if (ivtv_stream_info[type].pio)
4660 s->dma = PCI_DMA_NONE;
4661 @@ -299,12 +299,9 @@ static int ivtv_reg_dev(struct ivtv *itv, int type)
4662 if (s_mpg->vdev.v4l2_dev)
4663 num = s_mpg->vdev.num + ivtv_stream_info[type].num_offset;
4664 }
4665 - s->vdev.device_caps = s->caps;
4666 - if (itv->osd_video_pbase) {
4667 - itv->streams[IVTV_DEC_STREAM_TYPE_YUV].vdev.device_caps |=
4668 - V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
4669 - itv->streams[IVTV_DEC_STREAM_TYPE_MPG].vdev.device_caps |=
4670 - V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
4671 + if (itv->osd_video_pbase && (type == IVTV_DEC_STREAM_TYPE_YUV ||
4672 + type == IVTV_DEC_STREAM_TYPE_MPG)) {
4673 + s->vdev.device_caps |= V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
4674 itv->v4l2_cap |= V4L2_CAP_VIDEO_OUTPUT_OVERLAY;
4675 }
4676 video_set_drvdata(&s->vdev, s);
4677 diff --git a/drivers/media/platform/aspeed-video.c b/drivers/media/platform/aspeed-video.c
4678 index 1e0867016bf37..c87eddb1c93f7 100644
4679 --- a/drivers/media/platform/aspeed-video.c
4680 +++ b/drivers/media/platform/aspeed-video.c
4681 @@ -151,7 +151,7 @@
4682 #define VE_SRC_TB_EDGE_DET_BOT GENMASK(28, VE_SRC_TB_EDGE_DET_BOT_SHF)
4683
4684 #define VE_MODE_DETECT_STATUS 0x098
4685 -#define VE_MODE_DETECT_H_PIXELS GENMASK(11, 0)
4686 +#define VE_MODE_DETECT_H_PERIOD GENMASK(11, 0)
4687 #define VE_MODE_DETECT_V_LINES_SHF 16
4688 #define VE_MODE_DETECT_V_LINES GENMASK(27, VE_MODE_DETECT_V_LINES_SHF)
4689 #define VE_MODE_DETECT_STATUS_VSYNC BIT(28)
4690 @@ -162,6 +162,8 @@
4691 #define VE_SYNC_STATUS_VSYNC_SHF 16
4692 #define VE_SYNC_STATUS_VSYNC GENMASK(27, VE_SYNC_STATUS_VSYNC_SHF)
4693
4694 +#define VE_H_TOTAL_PIXELS 0x0A0
4695 +
4696 #define VE_INTERRUPT_CTRL 0x304
4697 #define VE_INTERRUPT_STATUS 0x308
4698 #define VE_INTERRUPT_MODE_DETECT_WD BIT(0)
4699 @@ -743,6 +745,7 @@ static void aspeed_video_get_resolution(struct aspeed_video *video)
4700 u32 src_lr_edge;
4701 u32 src_tb_edge;
4702 u32 sync;
4703 + u32 htotal;
4704 struct v4l2_bt_timings *det = &video->detected_timings;
4705
4706 det->width = MIN_WIDTH;
4707 @@ -787,6 +790,7 @@ static void aspeed_video_get_resolution(struct aspeed_video *video)
4708 src_tb_edge = aspeed_video_read(video, VE_SRC_TB_EDGE_DET);
4709 mds = aspeed_video_read(video, VE_MODE_DETECT_STATUS);
4710 sync = aspeed_video_read(video, VE_SYNC_STATUS);
4711 + htotal = aspeed_video_read(video, VE_H_TOTAL_PIXELS);
4712
4713 video->frame_bottom = (src_tb_edge & VE_SRC_TB_EDGE_DET_BOT) >>
4714 VE_SRC_TB_EDGE_DET_BOT_SHF;
4715 @@ -803,8 +807,7 @@ static void aspeed_video_get_resolution(struct aspeed_video *video)
4716 VE_SRC_LR_EDGE_DET_RT_SHF;
4717 video->frame_left = src_lr_edge & VE_SRC_LR_EDGE_DET_LEFT;
4718 det->hfrontporch = video->frame_left;
4719 - det->hbackporch = (mds & VE_MODE_DETECT_H_PIXELS) -
4720 - video->frame_right;
4721 + det->hbackporch = htotal - video->frame_right;
4722 det->hsync = sync & VE_SYNC_STATUS_HSYNC;
4723 if (video->frame_left > video->frame_right)
4724 continue;
4725 diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/platform/coda/coda-common.c
4726 index 834f11fe9dc29..0adc54832657b 100644
4727 --- a/drivers/media/platform/coda/coda-common.c
4728 +++ b/drivers/media/platform/coda/coda-common.c
4729 @@ -372,6 +372,7 @@ static struct vdoa_data *coda_get_vdoa_data(void)
4730 if (!vdoa_data)
4731 vdoa_data = ERR_PTR(-EPROBE_DEFER);
4732
4733 + put_device(&vdoa_pdev->dev);
4734 out:
4735 of_node_put(vdoa_node);
4736
4737 diff --git a/drivers/media/platform/davinci/vpif.c b/drivers/media/platform/davinci/vpif.c
4738 index df66461f5d4f1..e7e8eba048acf 100644
4739 --- a/drivers/media/platform/davinci/vpif.c
4740 +++ b/drivers/media/platform/davinci/vpif.c
4741 @@ -496,6 +496,7 @@ static int vpif_probe(struct platform_device *pdev)
4742
4743 static int vpif_remove(struct platform_device *pdev)
4744 {
4745 + pm_runtime_put(&pdev->dev);
4746 pm_runtime_disable(&pdev->dev);
4747 return 0;
4748 }
4749 diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c
4750 index bfca9d0a1fe15..5ae13ee9272d5 100644
4751 --- a/drivers/media/usb/em28xx/em28xx-cards.c
4752 +++ b/drivers/media/usb/em28xx/em28xx-cards.c
4753 @@ -3821,6 +3821,8 @@ static int em28xx_usb_probe(struct usb_interface *intf,
4754 goto err_free;
4755 }
4756
4757 + kref_init(&dev->ref);
4758 +
4759 dev->devno = nr;
4760 dev->model = id->driver_info;
4761 dev->alt = -1;
4762 @@ -3921,6 +3923,8 @@ static int em28xx_usb_probe(struct usb_interface *intf,
4763 }
4764
4765 if (dev->board.has_dual_ts && em28xx_duplicate_dev(dev) == 0) {
4766 + kref_init(&dev->dev_next->ref);
4767 +
4768 dev->dev_next->ts = SECONDARY_TS;
4769 dev->dev_next->alt = -1;
4770 dev->dev_next->is_audio_only = has_vendor_audio &&
4771 @@ -3975,12 +3979,8 @@ static int em28xx_usb_probe(struct usb_interface *intf,
4772 em28xx_write_reg(dev, 0x0b, 0x82);
4773 mdelay(100);
4774 }
4775 -
4776 - kref_init(&dev->dev_next->ref);
4777 }
4778
4779 - kref_init(&dev->ref);
4780 -
4781 request_modules(dev);
4782
4783 /*
4784 @@ -4035,11 +4035,8 @@ static void em28xx_usb_disconnect(struct usb_interface *intf)
4785
4786 em28xx_close_extension(dev);
4787
4788 - if (dev->dev_next) {
4789 - em28xx_close_extension(dev->dev_next);
4790 + if (dev->dev_next)
4791 em28xx_release_resources(dev->dev_next);
4792 - }
4793 -
4794 em28xx_release_resources(dev);
4795
4796 if (dev->dev_next) {
4797 diff --git a/drivers/media/usb/go7007/s2250-board.c b/drivers/media/usb/go7007/s2250-board.c
4798 index 49e75a1a1f3f8..af3b18c6d9e17 100644
4799 --- a/drivers/media/usb/go7007/s2250-board.c
4800 +++ b/drivers/media/usb/go7007/s2250-board.c
4801 @@ -504,6 +504,7 @@ static int s2250_probe(struct i2c_client *client,
4802 u8 *data;
4803 struct go7007 *go = i2c_get_adapdata(adapter);
4804 struct go7007_usb *usb = go->hpi_context;
4805 + int err = -EIO;
4806
4807 audio = i2c_new_dummy_device(adapter, TLV320_ADDRESS >> 1);
4808 if (IS_ERR(audio))
4809 @@ -532,11 +533,8 @@ static int s2250_probe(struct i2c_client *client,
4810 V4L2_CID_HUE, -512, 511, 1, 0);
4811 sd->ctrl_handler = &state->hdl;
4812 if (state->hdl.error) {
4813 - int err = state->hdl.error;
4814 -
4815 - v4l2_ctrl_handler_free(&state->hdl);
4816 - kfree(state);
4817 - return err;
4818 + err = state->hdl.error;
4819 + goto fail;
4820 }
4821
4822 state->std = V4L2_STD_NTSC;
4823 @@ -600,7 +598,7 @@ fail:
4824 i2c_unregister_device(audio);
4825 v4l2_ctrl_handler_free(&state->hdl);
4826 kfree(state);
4827 - return -EIO;
4828 + return err;
4829 }
4830
4831 static int s2250_remove(struct i2c_client *client)
4832 diff --git a/drivers/media/usb/hdpvr/hdpvr-video.c b/drivers/media/usb/hdpvr/hdpvr-video.c
4833 index bad71d863d395..7849f1fbbcc4d 100644
4834 --- a/drivers/media/usb/hdpvr/hdpvr-video.c
4835 +++ b/drivers/media/usb/hdpvr/hdpvr-video.c
4836 @@ -308,7 +308,6 @@ static int hdpvr_start_streaming(struct hdpvr_device *dev)
4837
4838 dev->status = STATUS_STREAMING;
4839
4840 - INIT_WORK(&dev->worker, hdpvr_transmit_buffers);
4841 schedule_work(&dev->worker);
4842
4843 v4l2_dbg(MSG_BUFFER, hdpvr_debug, &dev->v4l2_dev,
4844 @@ -1165,6 +1164,9 @@ int hdpvr_register_videodev(struct hdpvr_device *dev, struct device *parent,
4845 bool ac3 = dev->flags & HDPVR_FLAG_AC3_CAP;
4846 int res;
4847
4848 + // initialize dev->worker
4849 + INIT_WORK(&dev->worker, hdpvr_transmit_buffers);
4850 +
4851 dev->cur_std = V4L2_STD_525_60;
4852 dev->width = 720;
4853 dev->height = 480;
4854 diff --git a/drivers/media/usb/stk1160/stk1160-core.c b/drivers/media/usb/stk1160/stk1160-core.c
4855 index 4e1698f788187..ce717502ea4c3 100644
4856 --- a/drivers/media/usb/stk1160/stk1160-core.c
4857 +++ b/drivers/media/usb/stk1160/stk1160-core.c
4858 @@ -403,7 +403,7 @@ static void stk1160_disconnect(struct usb_interface *interface)
4859 /* Here is the only place where isoc get released */
4860 stk1160_uninit_isoc(dev);
4861
4862 - stk1160_clear_queue(dev);
4863 + stk1160_clear_queue(dev, VB2_BUF_STATE_ERROR);
4864
4865 video_unregister_device(&dev->vdev);
4866 v4l2_device_disconnect(&dev->v4l2_dev);
4867 diff --git a/drivers/media/usb/stk1160/stk1160-v4l.c b/drivers/media/usb/stk1160/stk1160-v4l.c
4868 index bcd14c66e8dfa..a307807571ab9 100644
4869 --- a/drivers/media/usb/stk1160/stk1160-v4l.c
4870 +++ b/drivers/media/usb/stk1160/stk1160-v4l.c
4871 @@ -258,7 +258,7 @@ out_uninit:
4872 stk1160_uninit_isoc(dev);
4873 out_stop_hw:
4874 usb_set_interface(dev->udev, 0, 0);
4875 - stk1160_clear_queue(dev);
4876 + stk1160_clear_queue(dev, VB2_BUF_STATE_QUEUED);
4877
4878 mutex_unlock(&dev->v4l_lock);
4879
4880 @@ -306,7 +306,7 @@ static int stk1160_stop_streaming(struct stk1160 *dev)
4881
4882 stk1160_stop_hw(dev);
4883
4884 - stk1160_clear_queue(dev);
4885 + stk1160_clear_queue(dev, VB2_BUF_STATE_ERROR);
4886
4887 stk1160_dbg("streaming stopped\n");
4888
4889 @@ -745,7 +745,7 @@ static const struct video_device v4l_template = {
4890 /********************************************************************/
4891
4892 /* Must be called with both v4l_lock and vb_queue_lock hold */
4893 -void stk1160_clear_queue(struct stk1160 *dev)
4894 +void stk1160_clear_queue(struct stk1160 *dev, enum vb2_buffer_state vb2_state)
4895 {
4896 struct stk1160_buffer *buf;
4897 unsigned long flags;
4898 @@ -756,7 +756,7 @@ void stk1160_clear_queue(struct stk1160 *dev)
4899 buf = list_first_entry(&dev->avail_bufs,
4900 struct stk1160_buffer, list);
4901 list_del(&buf->list);
4902 - vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
4903 + vb2_buffer_done(&buf->vb.vb2_buf, vb2_state);
4904 stk1160_dbg("buffer [%p/%d] aborted\n",
4905 buf, buf->vb.vb2_buf.index);
4906 }
4907 @@ -766,7 +766,7 @@ void stk1160_clear_queue(struct stk1160 *dev)
4908 buf = dev->isoc_ctl.buf;
4909 dev->isoc_ctl.buf = NULL;
4910
4911 - vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
4912 + vb2_buffer_done(&buf->vb.vb2_buf, vb2_state);
4913 stk1160_dbg("buffer [%p/%d] aborted\n",
4914 buf, buf->vb.vb2_buf.index);
4915 }
4916 diff --git a/drivers/media/usb/stk1160/stk1160.h b/drivers/media/usb/stk1160/stk1160.h
4917 index a31ea1c80f255..a70963ce87533 100644
4918 --- a/drivers/media/usb/stk1160/stk1160.h
4919 +++ b/drivers/media/usb/stk1160/stk1160.h
4920 @@ -166,7 +166,7 @@ struct regval {
4921 int stk1160_vb2_setup(struct stk1160 *dev);
4922 int stk1160_video_register(struct stk1160 *dev);
4923 void stk1160_video_unregister(struct stk1160 *dev);
4924 -void stk1160_clear_queue(struct stk1160 *dev);
4925 +void stk1160_clear_queue(struct stk1160 *dev, enum vb2_buffer_state vb2_state);
4926
4927 /* Provided by stk1160-video.c */
4928 int stk1160_alloc_isoc(struct stk1160 *dev);
4929 diff --git a/drivers/memory/emif.c b/drivers/memory/emif.c
4930 index af296b6fcbbdc..9c4c668f9a88a 100644
4931 --- a/drivers/memory/emif.c
4932 +++ b/drivers/memory/emif.c
4933 @@ -1423,7 +1423,7 @@ static struct emif_data *__init_or_module get_device_details(
4934 temp = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL);
4935 dev_info = devm_kzalloc(dev, sizeof(*dev_info), GFP_KERNEL);
4936
4937 - if (!emif || !pd || !dev_info) {
4938 + if (!emif || !temp || !dev_info) {
4939 dev_err(dev, "%s:%d: allocation error\n", __func__, __LINE__);
4940 goto error;
4941 }
4942 @@ -1515,7 +1515,7 @@ static int __init_or_module emif_probe(struct platform_device *pdev)
4943 {
4944 struct emif_data *emif;
4945 struct resource *res;
4946 - int irq;
4947 + int irq, ret;
4948
4949 if (pdev->dev.of_node)
4950 emif = of_get_memory_device_details(pdev->dev.of_node, &pdev->dev);
4951 @@ -1549,7 +1549,9 @@ static int __init_or_module emif_probe(struct platform_device *pdev)
4952 emif_onetime_settings(emif);
4953 emif_debugfs_init(emif);
4954 disable_and_clear_all_interrupts(emif);
4955 - setup_interrupts(emif, irq);
4956 + ret = setup_interrupts(emif, irq);
4957 + if (ret)
4958 + goto error;
4959
4960 /* One-time actions taken on probing the first device */
4961 if (!emif1) {
4962 diff --git a/drivers/mfd/asic3.c b/drivers/mfd/asic3.c
4963 index a6bd2134cea2a..14e4bbe6a9da3 100644
4964 --- a/drivers/mfd/asic3.c
4965 +++ b/drivers/mfd/asic3.c
4966 @@ -914,14 +914,14 @@ static int __init asic3_mfd_probe(struct platform_device *pdev,
4967 ret = mfd_add_devices(&pdev->dev, pdev->id,
4968 &asic3_cell_ds1wm, 1, mem, asic->irq_base, NULL);
4969 if (ret < 0)
4970 - goto out;
4971 + goto out_unmap;
4972 }
4973
4974 if (mem_sdio && (irq >= 0)) {
4975 ret = mfd_add_devices(&pdev->dev, pdev->id,
4976 &asic3_cell_mmc, 1, mem_sdio, irq, NULL);
4977 if (ret < 0)
4978 - goto out;
4979 + goto out_unmap;
4980 }
4981
4982 ret = 0;
4983 @@ -935,8 +935,12 @@ static int __init asic3_mfd_probe(struct platform_device *pdev,
4984 ret = mfd_add_devices(&pdev->dev, 0,
4985 asic3_cell_leds, ASIC3_NUM_LEDS, NULL, 0, NULL);
4986 }
4987 + return ret;
4988
4989 - out:
4990 +out_unmap:
4991 + if (asic->tmio_cnf)
4992 + iounmap(asic->tmio_cnf);
4993 +out:
4994 return ret;
4995 }
4996
4997 diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c
4998 index 1abe7432aad82..e281a9202f110 100644
4999 --- a/drivers/mfd/mc13xxx-core.c
5000 +++ b/drivers/mfd/mc13xxx-core.c
5001 @@ -323,8 +323,10 @@ int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx, unsigned int mode,
5002 adc1 |= MC13783_ADC1_ATOX;
5003
5004 dev_dbg(mc13xxx->dev, "%s: request irq\n", __func__);
5005 - mc13xxx_irq_request(mc13xxx, MC13XXX_IRQ_ADCDONE,
5006 + ret = mc13xxx_irq_request(mc13xxx, MC13XXX_IRQ_ADCDONE,
5007 mc13xxx_handler_adcdone, __func__, &adcdone_data);
5008 + if (ret)
5009 + goto out;
5010
5011 mc13xxx_reg_write(mc13xxx, MC13XXX_ADC0, adc0);
5012 mc13xxx_reg_write(mc13xxx, MC13XXX_ADC1, adc1);
5013 diff --git a/drivers/misc/cardreader/alcor_pci.c b/drivers/misc/cardreader/alcor_pci.c
5014 index 1fadb95b85b09..ba5d5c102b3cc 100644
5015 --- a/drivers/misc/cardreader/alcor_pci.c
5016 +++ b/drivers/misc/cardreader/alcor_pci.c
5017 @@ -260,7 +260,7 @@ static int alcor_pci_probe(struct pci_dev *pdev,
5018 if (!priv)
5019 return -ENOMEM;
5020
5021 - ret = ida_simple_get(&alcor_pci_idr, 0, 0, GFP_KERNEL);
5022 + ret = ida_alloc(&alcor_pci_idr, GFP_KERNEL);
5023 if (ret < 0)
5024 return ret;
5025 priv->id = ret;
5026 @@ -274,7 +274,8 @@ static int alcor_pci_probe(struct pci_dev *pdev,
5027 ret = pci_request_regions(pdev, DRV_NAME_ALCOR_PCI);
5028 if (ret) {
5029 dev_err(&pdev->dev, "Cannot request region\n");
5030 - return -ENOMEM;
5031 + ret = -ENOMEM;
5032 + goto error_free_ida;
5033 }
5034
5035 if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM)) {
5036 @@ -318,6 +319,8 @@ static int alcor_pci_probe(struct pci_dev *pdev,
5037
5038 error_release_regions:
5039 pci_release_regions(pdev);
5040 +error_free_ida:
5041 + ida_free(&alcor_pci_idr, priv->id);
5042 return ret;
5043 }
5044
5045 @@ -331,7 +334,7 @@ static void alcor_pci_remove(struct pci_dev *pdev)
5046
5047 mfd_remove_devices(&pdev->dev);
5048
5049 - ida_simple_remove(&alcor_pci_idr, priv->id);
5050 + ida_free(&alcor_pci_idr, priv->id);
5051
5052 pci_release_regions(pdev);
5053 pci_set_drvdata(pdev, NULL);
5054 diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c
5055 index 8d18f19c99c4b..2f88581057335 100644
5056 --- a/drivers/misc/kgdbts.c
5057 +++ b/drivers/misc/kgdbts.c
5058 @@ -1060,10 +1060,10 @@ static int kgdbts_option_setup(char *opt)
5059 {
5060 if (strlen(opt) >= MAX_CONFIG_LEN) {
5061 printk(KERN_ERR "kgdbts: config string too long\n");
5062 - return -ENOSPC;
5063 + return 1;
5064 }
5065 strcpy(config, opt);
5066 - return 0;
5067 + return 1;
5068 }
5069
5070 __setup("kgdbts=", kgdbts_option_setup);
5071 diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
5072 index e955f1ef25643..32801639e0be5 100644
5073 --- a/drivers/mmc/core/host.c
5074 +++ b/drivers/mmc/core/host.c
5075 @@ -497,6 +497,16 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
5076
5077 EXPORT_SYMBOL(mmc_alloc_host);
5078
5079 +static int mmc_validate_host_caps(struct mmc_host *host)
5080 +{
5081 + if (host->caps & MMC_CAP_SDIO_IRQ && !host->ops->enable_sdio_irq) {
5082 + dev_warn(host->parent, "missing ->enable_sdio_irq() ops\n");
5083 + return -EINVAL;
5084 + }
5085 +
5086 + return 0;
5087 +}
5088 +
5089 /**
5090 * mmc_add_host - initialise host hardware
5091 * @host: mmc host
5092 @@ -509,8 +519,9 @@ int mmc_add_host(struct mmc_host *host)
5093 {
5094 int err;
5095
5096 - WARN_ON((host->caps & MMC_CAP_SDIO_IRQ) &&
5097 - !host->ops->enable_sdio_irq);
5098 + err = mmc_validate_host_caps(host);
5099 + if (err)
5100 + return err;
5101
5102 err = device_add(&host->class_dev);
5103 if (err)
5104 diff --git a/drivers/mmc/host/davinci_mmc.c b/drivers/mmc/host/davinci_mmc.c
5105 index ebfaeb33bc8c0..ade7c022a33c0 100644
5106 --- a/drivers/mmc/host/davinci_mmc.c
5107 +++ b/drivers/mmc/host/davinci_mmc.c
5108 @@ -1376,8 +1376,12 @@ static int davinci_mmcsd_suspend(struct device *dev)
5109 static int davinci_mmcsd_resume(struct device *dev)
5110 {
5111 struct mmc_davinci_host *host = dev_get_drvdata(dev);
5112 + int ret;
5113 +
5114 + ret = clk_enable(host->clk);
5115 + if (ret)
5116 + return ret;
5117
5118 - clk_enable(host->clk);
5119 mmc_davinci_reset_ctrl(host, 0);
5120
5121 return 0;
5122 diff --git a/drivers/mmc/host/mmci_stm32_sdmmc.c b/drivers/mmc/host/mmci_stm32_sdmmc.c
5123 index 0953bd8a4f79d..3bb59d670220f 100644
5124 --- a/drivers/mmc/host/mmci_stm32_sdmmc.c
5125 +++ b/drivers/mmc/host/mmci_stm32_sdmmc.c
5126 @@ -36,8 +36,8 @@ int sdmmc_idma_validate_data(struct mmci_host *host,
5127 * excepted the last element which has no constraint on idmasize
5128 */
5129 for_each_sg(data->sg, sg, data->sg_len - 1, i) {
5130 - if (!IS_ALIGNED(sg_dma_address(data->sg), sizeof(u32)) ||
5131 - !IS_ALIGNED(sg_dma_len(data->sg), SDMMC_IDMA_BURST)) {
5132 + if (!IS_ALIGNED(sg->offset, sizeof(u32)) ||
5133 + !IS_ALIGNED(sg->length, SDMMC_IDMA_BURST)) {
5134 dev_err(mmc_dev(host->mmc),
5135 "unaligned scatterlist: ofst:%x length:%d\n",
5136 data->sg->offset, data->sg->length);
5137 @@ -45,7 +45,7 @@ int sdmmc_idma_validate_data(struct mmci_host *host,
5138 }
5139 }
5140
5141 - if (!IS_ALIGNED(sg_dma_address(data->sg), sizeof(u32))) {
5142 + if (!IS_ALIGNED(sg->offset, sizeof(u32))) {
5143 dev_err(mmc_dev(host->mmc),
5144 "unaligned last scatterlist: ofst:%x length:%d\n",
5145 data->sg->offset, data->sg->length);
5146 diff --git a/drivers/mmc/host/renesas_sdhi_core.c b/drivers/mmc/host/renesas_sdhi_core.c
5147 index 689eb119d44fc..23fd93407eced 100644
5148 --- a/drivers/mmc/host/renesas_sdhi_core.c
5149 +++ b/drivers/mmc/host/renesas_sdhi_core.c
5150 @@ -349,10 +349,10 @@ static void renesas_sdhi_hs400_complete(struct tmio_mmc_host *host)
5151 SH_MOBILE_SDHI_SCC_TMPPORT2_HS400OSEL) |
5152 sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2));
5153
5154 - /* Set the sampling clock selection range of HS400 mode */
5155 sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_DTCNTL,
5156 SH_MOBILE_SDHI_SCC_DTCNTL_TAPEN |
5157 - 0x4 << SH_MOBILE_SDHI_SCC_DTCNTL_TAPNUM_SHIFT);
5158 + sd_scc_read32(host, priv,
5159 + SH_MOBILE_SDHI_SCC_DTCNTL));
5160
5161
5162 if (host->pdata->flags & TMIO_MMC_HAVE_4TAP_HS400)
5163 diff --git a/drivers/mmc/host/sdhci-xenon.c b/drivers/mmc/host/sdhci-xenon.c
5164 index 5f57e78e5f13f..6f6fb4c4448f0 100644
5165 --- a/drivers/mmc/host/sdhci-xenon.c
5166 +++ b/drivers/mmc/host/sdhci-xenon.c
5167 @@ -240,16 +240,6 @@ static void xenon_voltage_switch(struct sdhci_host *host)
5168 {
5169 /* Wait for 5ms after set 1.8V signal enable bit */
5170 usleep_range(5000, 5500);
5171 -
5172 - /*
5173 - * For some reason the controller's Host Control2 register reports
5174 - * the bit representing 1.8V signaling as 0 when read after it was
5175 - * written as 1. Subsequent read reports 1.
5176 - *
5177 - * Since this may cause some issues, do an empty read of the Host
5178 - * Control2 register here to circumvent this.
5179 - */
5180 - sdhci_readw(host, SDHCI_HOST_CONTROL2);
5181 }
5182
5183 static const struct sdhci_ops sdhci_xenon_ops = {
5184 diff --git a/drivers/mtd/nand/onenand/generic.c b/drivers/mtd/nand/onenand/generic.c
5185 index 8b6f4da5d7201..a4b8b65fe15f5 100644
5186 --- a/drivers/mtd/nand/onenand/generic.c
5187 +++ b/drivers/mtd/nand/onenand/generic.c
5188 @@ -53,7 +53,12 @@ static int generic_onenand_probe(struct platform_device *pdev)
5189 }
5190
5191 info->onenand.mmcontrol = pdata ? pdata->mmcontrol : NULL;
5192 - info->onenand.irq = platform_get_irq(pdev, 0);
5193 +
5194 + err = platform_get_irq(pdev, 0);
5195 + if (err < 0)
5196 + goto out_iounmap;
5197 +
5198 + info->onenand.irq = err;
5199
5200 info->mtd.dev.parent = &pdev->dev;
5201 info->mtd.priv = &info->onenand;
5202 diff --git a/drivers/mtd/nand/raw/atmel/nand-controller.c b/drivers/mtd/nand/raw/atmel/nand-controller.c
5203 index 23d11e8b56441..17c751f359d3d 100644
5204 --- a/drivers/mtd/nand/raw/atmel/nand-controller.c
5205 +++ b/drivers/mtd/nand/raw/atmel/nand-controller.c
5206 @@ -2004,13 +2004,15 @@ static int atmel_nand_controller_init(struct atmel_nand_controller *nc,
5207 nc->mck = of_clk_get(dev->parent->of_node, 0);
5208 if (IS_ERR(nc->mck)) {
5209 dev_err(dev, "Failed to retrieve MCK clk\n");
5210 - return PTR_ERR(nc->mck);
5211 + ret = PTR_ERR(nc->mck);
5212 + goto out_release_dma;
5213 }
5214
5215 np = of_parse_phandle(dev->parent->of_node, "atmel,smc", 0);
5216 if (!np) {
5217 dev_err(dev, "Missing or invalid atmel,smc property\n");
5218 - return -EINVAL;
5219 + ret = -EINVAL;
5220 + goto out_release_dma;
5221 }
5222
5223 nc->smc = syscon_node_to_regmap(np);
5224 @@ -2018,10 +2020,16 @@ static int atmel_nand_controller_init(struct atmel_nand_controller *nc,
5225 if (IS_ERR(nc->smc)) {
5226 ret = PTR_ERR(nc->smc);
5227 dev_err(dev, "Could not get SMC regmap (err = %d)\n", ret);
5228 - return ret;
5229 + goto out_release_dma;
5230 }
5231
5232 return 0;
5233 +
5234 +out_release_dma:
5235 + if (nc->dmac)
5236 + dma_release_channel(nc->dmac);
5237 +
5238 + return ret;
5239 }
5240
5241 static int
5242 diff --git a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
5243 index ab2f824abf549..02218c3b548f9 100644
5244 --- a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
5245 +++ b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
5246 @@ -645,6 +645,7 @@ static void gpmi_nfc_compute_timings(struct gpmi_nand_data *this,
5247 const struct nand_sdr_timings *sdr)
5248 {
5249 struct gpmi_nfc_hardware_timing *hw = &this->hw;
5250 + struct resources *r = &this->resources;
5251 unsigned int dll_threshold_ps = this->devdata->max_chain_delay;
5252 unsigned int period_ps, reference_period_ps;
5253 unsigned int data_setup_cycles, data_hold_cycles, addr_setup_cycles;
5254 @@ -668,6 +669,8 @@ static void gpmi_nfc_compute_timings(struct gpmi_nand_data *this,
5255 wrn_dly_sel = BV_GPMI_CTRL1_WRN_DLY_SEL_NO_DELAY;
5256 }
5257
5258 + hw->clk_rate = clk_round_rate(r->clock[0], hw->clk_rate);
5259 +
5260 /* SDR core timings are given in picoseconds */
5261 period_ps = div_u64((u64)NSEC_PER_SEC * 1000, hw->clk_rate);
5262
5263 diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
5264 index d636bbe214cb9..df521ff0b3280 100644
5265 --- a/drivers/mtd/ubi/build.c
5266 +++ b/drivers/mtd/ubi/build.c
5267 @@ -350,9 +350,6 @@ static ssize_t dev_attribute_show(struct device *dev,
5268 * we still can use 'ubi->ubi_num'.
5269 */
5270 ubi = container_of(dev, struct ubi_device, dev);
5271 - ubi = ubi_get_device(ubi->ubi_num);
5272 - if (!ubi)
5273 - return -ENODEV;
5274
5275 if (attr == &dev_eraseblock_size)
5276 ret = sprintf(buf, "%d\n", ubi->leb_size);
5277 @@ -381,7 +378,6 @@ static ssize_t dev_attribute_show(struct device *dev,
5278 else
5279 ret = -EINVAL;
5280
5281 - ubi_put_device(ubi);
5282 return ret;
5283 }
5284
5285 @@ -956,9 +952,6 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
5286 goto out_detach;
5287 }
5288
5289 - /* Make device "available" before it becomes accessible via sysfs */
5290 - ubi_devices[ubi_num] = ubi;
5291 -
5292 err = uif_init(ubi);
5293 if (err)
5294 goto out_detach;
5295 @@ -1003,6 +996,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
5296 wake_up_process(ubi->bgt_thread);
5297 spin_unlock(&ubi->wl_lock);
5298
5299 + ubi_devices[ubi_num] = ubi;
5300 ubi_notify_all(ubi, UBI_VOLUME_ADDED, NULL);
5301 return ubi_num;
5302
5303 @@ -1011,7 +1005,6 @@ out_debugfs:
5304 out_uif:
5305 uif_close(ubi);
5306 out_detach:
5307 - ubi_devices[ubi_num] = NULL;
5308 ubi_wl_close(ubi);
5309 ubi_free_internal_volumes(ubi);
5310 vfree(ubi->vtbl);
5311 diff --git a/drivers/mtd/ubi/fastmap.c b/drivers/mtd/ubi/fastmap.c
5312 index 53f448e7433a9..6e95c4b1473e6 100644
5313 --- a/drivers/mtd/ubi/fastmap.c
5314 +++ b/drivers/mtd/ubi/fastmap.c
5315 @@ -468,7 +468,9 @@ static int scan_pool(struct ubi_device *ubi, struct ubi_attach_info *ai,
5316 if (err == UBI_IO_FF_BITFLIPS)
5317 scrub = 1;
5318
5319 - add_aeb(ai, free, pnum, ec, scrub);
5320 + ret = add_aeb(ai, free, pnum, ec, scrub);
5321 + if (ret)
5322 + goto out;
5323 continue;
5324 } else if (err == 0 || err == UBI_IO_BITFLIPS) {
5325 dbg_bld("Found non empty PEB:%i in pool", pnum);
5326 @@ -638,8 +640,10 @@ static int ubi_attach_fastmap(struct ubi_device *ubi,
5327 if (fm_pos >= fm_size)
5328 goto fail_bad;
5329
5330 - add_aeb(ai, &ai->free, be32_to_cpu(fmec->pnum),
5331 - be32_to_cpu(fmec->ec), 0);
5332 + ret = add_aeb(ai, &ai->free, be32_to_cpu(fmec->pnum),
5333 + be32_to_cpu(fmec->ec), 0);
5334 + if (ret)
5335 + goto fail;
5336 }
5337
5338 /* read EC values from used list */
5339 @@ -649,8 +653,10 @@ static int ubi_attach_fastmap(struct ubi_device *ubi,
5340 if (fm_pos >= fm_size)
5341 goto fail_bad;
5342
5343 - add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
5344 - be32_to_cpu(fmec->ec), 0);
5345 + ret = add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
5346 + be32_to_cpu(fmec->ec), 0);
5347 + if (ret)
5348 + goto fail;
5349 }
5350
5351 /* read EC values from scrub list */
5352 @@ -660,8 +666,10 @@ static int ubi_attach_fastmap(struct ubi_device *ubi,
5353 if (fm_pos >= fm_size)
5354 goto fail_bad;
5355
5356 - add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
5357 - be32_to_cpu(fmec->ec), 1);
5358 + ret = add_aeb(ai, &used, be32_to_cpu(fmec->pnum),
5359 + be32_to_cpu(fmec->ec), 1);
5360 + if (ret)
5361 + goto fail;
5362 }
5363
5364 /* read EC values from erase list */
5365 @@ -671,8 +679,10 @@ static int ubi_attach_fastmap(struct ubi_device *ubi,
5366 if (fm_pos >= fm_size)
5367 goto fail_bad;
5368
5369 - add_aeb(ai, &ai->erase, be32_to_cpu(fmec->pnum),
5370 - be32_to_cpu(fmec->ec), 1);
5371 + ret = add_aeb(ai, &ai->erase, be32_to_cpu(fmec->pnum),
5372 + be32_to_cpu(fmec->ec), 1);
5373 + if (ret)
5374 + goto fail;
5375 }
5376
5377 ai->mean_ec = div_u64(ai->ec_sum, ai->ec_count);
5378 diff --git a/drivers/mtd/ubi/vmt.c b/drivers/mtd/ubi/vmt.c
5379 index 139ee132bfbcf..1bc7b3a056046 100644
5380 --- a/drivers/mtd/ubi/vmt.c
5381 +++ b/drivers/mtd/ubi/vmt.c
5382 @@ -56,16 +56,11 @@ static ssize_t vol_attribute_show(struct device *dev,
5383 {
5384 int ret;
5385 struct ubi_volume *vol = container_of(dev, struct ubi_volume, dev);
5386 - struct ubi_device *ubi;
5387 -
5388 - ubi = ubi_get_device(vol->ubi->ubi_num);
5389 - if (!ubi)
5390 - return -ENODEV;
5391 + struct ubi_device *ubi = vol->ubi;
5392
5393 spin_lock(&ubi->volumes_lock);
5394 if (!ubi->volumes[vol->vol_id]) {
5395 spin_unlock(&ubi->volumes_lock);
5396 - ubi_put_device(ubi);
5397 return -ENODEV;
5398 }
5399 /* Take a reference to prevent volume removal */
5400 @@ -103,7 +98,6 @@ static ssize_t vol_attribute_show(struct device *dev,
5401 vol->ref_count -= 1;
5402 ubi_assert(vol->ref_count >= 0);
5403 spin_unlock(&ubi->volumes_lock);
5404 - ubi_put_device(ubi);
5405 return ret;
5406 }
5407
5408 diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c
5409 index 249d2fba28c7f..6458da9c13b95 100644
5410 --- a/drivers/net/can/usb/ems_usb.c
5411 +++ b/drivers/net/can/usb/ems_usb.c
5412 @@ -823,7 +823,6 @@ static netdev_tx_t ems_usb_start_xmit(struct sk_buff *skb, struct net_device *ne
5413
5414 usb_unanchor_urb(urb);
5415 usb_free_coherent(dev->udev, size, buf, urb->transfer_dma);
5416 - dev_kfree_skb(skb);
5417
5418 atomic_dec(&dev->active_tx_urbs);
5419
5420 diff --git a/drivers/net/can/usb/mcba_usb.c b/drivers/net/can/usb/mcba_usb.c
5421 index 41eee6f0491c6..957e51a77d4d1 100644
5422 --- a/drivers/net/can/usb/mcba_usb.c
5423 +++ b/drivers/net/can/usb/mcba_usb.c
5424 @@ -33,10 +33,6 @@
5425 #define MCBA_USB_RX_BUFF_SIZE 64
5426 #define MCBA_USB_TX_BUFF_SIZE (sizeof(struct mcba_usb_msg))
5427
5428 -/* MCBA endpoint numbers */
5429 -#define MCBA_USB_EP_IN 1
5430 -#define MCBA_USB_EP_OUT 1
5431 -
5432 /* Microchip command id */
5433 #define MBCA_CMD_RECEIVE_MESSAGE 0xE3
5434 #define MBCA_CMD_I_AM_ALIVE_FROM_CAN 0xF5
5435 @@ -84,6 +80,8 @@ struct mcba_priv {
5436 atomic_t free_ctx_cnt;
5437 void *rxbuf[MCBA_MAX_RX_URBS];
5438 dma_addr_t rxbuf_dma[MCBA_MAX_RX_URBS];
5439 + int rx_pipe;
5440 + int tx_pipe;
5441 };
5442
5443 /* CAN frame */
5444 @@ -272,10 +270,8 @@ static netdev_tx_t mcba_usb_xmit(struct mcba_priv *priv,
5445
5446 memcpy(buf, usb_msg, MCBA_USB_TX_BUFF_SIZE);
5447
5448 - usb_fill_bulk_urb(urb, priv->udev,
5449 - usb_sndbulkpipe(priv->udev, MCBA_USB_EP_OUT), buf,
5450 - MCBA_USB_TX_BUFF_SIZE, mcba_usb_write_bulk_callback,
5451 - ctx);
5452 + usb_fill_bulk_urb(urb, priv->udev, priv->tx_pipe, buf, MCBA_USB_TX_BUFF_SIZE,
5453 + mcba_usb_write_bulk_callback, ctx);
5454
5455 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
5456 usb_anchor_urb(urb, &priv->tx_submitted);
5457 @@ -368,7 +364,6 @@ static netdev_tx_t mcba_usb_start_xmit(struct sk_buff *skb,
5458 xmit_failed:
5459 can_free_echo_skb(priv->netdev, ctx->ndx);
5460 mcba_usb_free_ctx(ctx);
5461 - dev_kfree_skb(skb);
5462 stats->tx_dropped++;
5463
5464 return NETDEV_TX_OK;
5465 @@ -611,7 +606,7 @@ static void mcba_usb_read_bulk_callback(struct urb *urb)
5466 resubmit_urb:
5467
5468 usb_fill_bulk_urb(urb, priv->udev,
5469 - usb_rcvbulkpipe(priv->udev, MCBA_USB_EP_OUT),
5470 + priv->rx_pipe,
5471 urb->transfer_buffer, MCBA_USB_RX_BUFF_SIZE,
5472 mcba_usb_read_bulk_callback, priv);
5473
5474 @@ -656,7 +651,7 @@ static int mcba_usb_start(struct mcba_priv *priv)
5475 urb->transfer_dma = buf_dma;
5476
5477 usb_fill_bulk_urb(urb, priv->udev,
5478 - usb_rcvbulkpipe(priv->udev, MCBA_USB_EP_IN),
5479 + priv->rx_pipe,
5480 buf, MCBA_USB_RX_BUFF_SIZE,
5481 mcba_usb_read_bulk_callback, priv);
5482 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
5483 @@ -810,6 +805,13 @@ static int mcba_usb_probe(struct usb_interface *intf,
5484 struct mcba_priv *priv;
5485 int err = -ENOMEM;
5486 struct usb_device *usbdev = interface_to_usbdev(intf);
5487 + struct usb_endpoint_descriptor *in, *out;
5488 +
5489 + err = usb_find_common_endpoints(intf->cur_altsetting, &in, &out, NULL, NULL);
5490 + if (err) {
5491 + dev_err(&intf->dev, "Can't find endpoints\n");
5492 + return err;
5493 + }
5494
5495 netdev = alloc_candev(sizeof(struct mcba_priv), MCBA_MAX_TX_URBS);
5496 if (!netdev) {
5497 @@ -855,6 +857,9 @@ static int mcba_usb_probe(struct usb_interface *intf,
5498 goto cleanup_free_candev;
5499 }
5500
5501 + priv->rx_pipe = usb_rcvbulkpipe(priv->udev, in->bEndpointAddress);
5502 + priv->tx_pipe = usb_sndbulkpipe(priv->udev, out->bEndpointAddress);
5503 +
5504 devm_can_led_init(netdev);
5505
5506 /* Start USB dev only if we have successfully registered CAN device */
5507 diff --git a/drivers/net/can/vxcan.c b/drivers/net/can/vxcan.c
5508 index 7000c6cd1e48b..282c53ef76d23 100644
5509 --- a/drivers/net/can/vxcan.c
5510 +++ b/drivers/net/can/vxcan.c
5511 @@ -148,7 +148,7 @@ static void vxcan_setup(struct net_device *dev)
5512 dev->hard_header_len = 0;
5513 dev->addr_len = 0;
5514 dev->tx_queue_len = 0;
5515 - dev->flags = (IFF_NOARP|IFF_ECHO);
5516 + dev->flags = IFF_NOARP;
5517 dev->netdev_ops = &vxcan_netdev_ops;
5518 dev->needs_free_netdev = true;
5519
5520 diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c
5521 index e15d18bb981e9..5cc31118b97e9 100644
5522 --- a/drivers/net/dsa/bcm_sf2_cfp.c
5523 +++ b/drivers/net/dsa/bcm_sf2_cfp.c
5524 @@ -542,14 +542,14 @@ static void bcm_sf2_cfp_slice_ipv6(struct bcm_sf2_priv *priv,
5525 static struct cfp_rule *bcm_sf2_cfp_rule_find(struct bcm_sf2_priv *priv,
5526 int port, u32 location)
5527 {
5528 - struct cfp_rule *rule = NULL;
5529 + struct cfp_rule *rule;
5530
5531 list_for_each_entry(rule, &priv->cfp.rules_list, next) {
5532 if (rule->port == port && rule->fs.location == location)
5533 - break;
5534 + return rule;
5535 }
5536
5537 - return rule;
5538 + return NULL;
5539 }
5540
5541 static int bcm_sf2_cfp_rule_cmp(struct bcm_sf2_priv *priv, int port,
5542 diff --git a/drivers/net/dsa/microchip/ksz8795_spi.c b/drivers/net/dsa/microchip/ksz8795_spi.c
5543 index 8b00f8e6c02f4..5639c5c59e255 100644
5544 --- a/drivers/net/dsa/microchip/ksz8795_spi.c
5545 +++ b/drivers/net/dsa/microchip/ksz8795_spi.c
5546 @@ -86,12 +86,23 @@ static const struct of_device_id ksz8795_dt_ids[] = {
5547 };
5548 MODULE_DEVICE_TABLE(of, ksz8795_dt_ids);
5549
5550 +static const struct spi_device_id ksz8795_spi_ids[] = {
5551 + { "ksz8765" },
5552 + { "ksz8794" },
5553 + { "ksz8795" },
5554 + { "ksz8863" },
5555 + { "ksz8873" },
5556 + { },
5557 +};
5558 +MODULE_DEVICE_TABLE(spi, ksz8795_spi_ids);
5559 +
5560 static struct spi_driver ksz8795_spi_driver = {
5561 .driver = {
5562 .name = "ksz8795-switch",
5563 .owner = THIS_MODULE,
5564 .of_match_table = of_match_ptr(ksz8795_dt_ids),
5565 },
5566 + .id_table = ksz8795_spi_ids,
5567 .probe = ksz8795_spi_probe,
5568 .remove = ksz8795_spi_remove,
5569 .shutdown = ksz8795_spi_shutdown,
5570 diff --git a/drivers/net/dsa/microchip/ksz9477_spi.c b/drivers/net/dsa/microchip/ksz9477_spi.c
5571 index 1142768969c20..9bda83d063e8e 100644
5572 --- a/drivers/net/dsa/microchip/ksz9477_spi.c
5573 +++ b/drivers/net/dsa/microchip/ksz9477_spi.c
5574 @@ -88,12 +88,24 @@ static const struct of_device_id ksz9477_dt_ids[] = {
5575 };
5576 MODULE_DEVICE_TABLE(of, ksz9477_dt_ids);
5577
5578 +static const struct spi_device_id ksz9477_spi_ids[] = {
5579 + { "ksz9477" },
5580 + { "ksz9897" },
5581 + { "ksz9893" },
5582 + { "ksz9563" },
5583 + { "ksz8563" },
5584 + { "ksz9567" },
5585 + { },
5586 +};
5587 +MODULE_DEVICE_TABLE(spi, ksz9477_spi_ids);
5588 +
5589 static struct spi_driver ksz9477_spi_driver = {
5590 .driver = {
5591 .name = "ksz9477-switch",
5592 .owner = THIS_MODULE,
5593 .of_match_table = of_match_ptr(ksz9477_dt_ids),
5594 },
5595 + .id_table = ksz9477_spi_ids,
5596 .probe = ksz9477_spi_probe,
5597 .remove = ksz9477_spi_remove,
5598 .shutdown = ksz9477_spi_shutdown,
5599 diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
5600 index 40b105daaf9e7..87d28ef82559e 100644
5601 --- a/drivers/net/dsa/mv88e6xxx/chip.c
5602 +++ b/drivers/net/dsa/mv88e6xxx/chip.c
5603 @@ -3062,6 +3062,7 @@ static const struct mv88e6xxx_ops mv88e6097_ops = {
5604 .port_set_duplex = mv88e6xxx_port_set_duplex,
5605 .port_set_speed = mv88e6185_port_set_speed,
5606 .port_tag_remap = mv88e6095_port_tag_remap,
5607 + .port_set_policy = mv88e6352_port_set_policy,
5608 .port_set_frame_mode = mv88e6351_port_set_frame_mode,
5609 .port_set_egress_floods = mv88e6352_port_set_egress_floods,
5610 .port_set_ether_type = mv88e6351_port_set_ether_type,
5611 diff --git a/drivers/net/ethernet/8390/mcf8390.c b/drivers/net/ethernet/8390/mcf8390.c
5612 index 4ad8031ab6695..065fdbe66c425 100644
5613 --- a/drivers/net/ethernet/8390/mcf8390.c
5614 +++ b/drivers/net/ethernet/8390/mcf8390.c
5615 @@ -406,12 +406,12 @@ static int mcf8390_init(struct net_device *dev)
5616 static int mcf8390_probe(struct platform_device *pdev)
5617 {
5618 struct net_device *dev;
5619 - struct resource *mem, *irq;
5620 + struct resource *mem;
5621 resource_size_t msize;
5622 - int ret;
5623 + int ret, irq;
5624
5625 - irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
5626 - if (irq == NULL) {
5627 + irq = platform_get_irq(pdev, 0);
5628 + if (irq < 0) {
5629 dev_err(&pdev->dev, "no IRQ specified?\n");
5630 return -ENXIO;
5631 }
5632 @@ -434,7 +434,7 @@ static int mcf8390_probe(struct platform_device *pdev)
5633 SET_NETDEV_DEV(dev, &pdev->dev);
5634 platform_set_drvdata(pdev, dev);
5635
5636 - dev->irq = irq->start;
5637 + dev->irq = irq;
5638 dev->base_addr = mem->start;
5639
5640 ret = mcf8390_init(dev);
5641 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
5642 index 8ba369c0100b4..9e8a0c772ca93 100644
5643 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
5644 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
5645 @@ -559,7 +559,8 @@ struct nqe_cn {
5646 #define BNXT_MAX_MTU 9500
5647 #define BNXT_MAX_PAGE_MODE_MTU \
5648 ((unsigned int)PAGE_SIZE - VLAN_ETH_HLEN - NET_IP_ALIGN - \
5649 - XDP_PACKET_HEADROOM)
5650 + XDP_PACKET_HEADROOM - \
5651 + SKB_DATA_ALIGN((unsigned int)sizeof(struct skb_shared_info)))
5652
5653 #define BNXT_MIN_PKT_SIZE 52
5654
5655 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
5656 index 97aff84fd1d17..d74c6a34b936a 100644
5657 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
5658 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
5659 @@ -1673,9 +1673,7 @@ static int bnxt_set_pauseparam(struct net_device *dev,
5660 }
5661
5662 link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
5663 - if (bp->hwrm_spec_code >= 0x10201)
5664 - link_info->req_flow_ctrl =
5665 - PORT_PHY_CFG_REQ_AUTO_PAUSE_AUTONEG_PAUSE;
5666 + link_info->req_flow_ctrl = 0;
5667 } else {
5668 /* when transition from auto pause to force pause,
5669 * force a link change
5670 diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
5671 index 6437fe6b9abf0..a6b8f573ab5b5 100644
5672 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
5673 +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
5674 @@ -148,7 +148,7 @@ static int dpaa2_ptp_probe(struct fsl_mc_device *mc_dev)
5675 base = of_iomap(node, 0);
5676 if (!base) {
5677 err = -ENOMEM;
5678 - goto err_close;
5679 + goto err_put;
5680 }
5681
5682 err = fsl_mc_allocate_irqs(mc_dev);
5683 @@ -191,6 +191,8 @@ err_free_mc_irq:
5684 fsl_mc_free_irqs(mc_dev);
5685 err_unmap:
5686 iounmap(base);
5687 +err_put:
5688 + of_node_put(node);
5689 err_close:
5690 dprtc_close(mc_dev->mc_io, 0, mc_dev->mc_handle);
5691 err_free_mcp:
5692 diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
5693 index 8ecfabaefa85b..d58abdfdb9b7b 100644
5694 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
5695 +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
5696 @@ -8344,11 +8344,11 @@ int hclge_set_vlan_filter(struct hnae3_handle *handle, __be16 proto,
5697 }
5698
5699 if (!ret) {
5700 - if (is_kill)
5701 - hclge_rm_vport_vlan_table(vport, vlan_id, false);
5702 - else
5703 + if (!is_kill)
5704 hclge_add_vport_vlan_table(vport, vlan_id,
5705 writen_to_tbl);
5706 + else if (is_kill && vlan_id != 0)
5707 + hclge_rm_vport_vlan_table(vport, vlan_id, false);
5708 } else if (is_kill) {
5709 /* when remove hw vlan filter failed, record the vlan id,
5710 * and try to remove it from hw later, to be consistence
5711 diff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.c b/drivers/net/ethernet/intel/i40e/i40e_xsk.c
5712 index a9ad788c4913d..fd2da58c71401 100644
5713 --- a/drivers/net/ethernet/intel/i40e/i40e_xsk.c
5714 +++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.c
5715 @@ -505,13 +505,11 @@ static struct sk_buff *i40e_construct_skb_zc(struct i40e_ring *rx_ring,
5716 struct sk_buff *skb;
5717
5718 /* allocate a skb to store the frags */
5719 - skb = __napi_alloc_skb(&rx_ring->q_vector->napi,
5720 - xdp->data_end - xdp->data_hard_start,
5721 + skb = __napi_alloc_skb(&rx_ring->q_vector->napi, datasize,
5722 GFP_ATOMIC | __GFP_NOWARN);
5723 if (unlikely(!skb))
5724 return NULL;
5725
5726 - skb_reserve(skb, xdp->data - xdp->data_hard_start);
5727 memcpy(__skb_put(skb, datasize), xdp->data, datasize);
5728 if (metasize)
5729 skb_metadata_set(skb, metasize);
5730 diff --git a/drivers/net/ethernet/qlogic/qed/qed_sriov.c b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
5731 index 5e8f8eb916e64..20f840ea05030 100644
5732 --- a/drivers/net/ethernet/qlogic/qed/qed_sriov.c
5733 +++ b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
5734 @@ -3003,12 +3003,16 @@ static int qed_iov_pre_update_vport(struct qed_hwfn *hwfn,
5735 u8 mask = QED_ACCEPT_UCAST_UNMATCHED | QED_ACCEPT_MCAST_UNMATCHED;
5736 struct qed_filter_accept_flags *flags = &params->accept_flags;
5737 struct qed_public_vf_info *vf_info;
5738 + u16 tlv_mask;
5739 +
5740 + tlv_mask = BIT(QED_IOV_VP_UPDATE_ACCEPT_PARAM) |
5741 + BIT(QED_IOV_VP_UPDATE_ACCEPT_ANY_VLAN);
5742
5743 /* Untrusted VFs can't even be trusted to know that fact.
5744 * Simply indicate everything is configured fine, and trace
5745 * configuration 'behind their back'.
5746 */
5747 - if (!(*tlvs & BIT(QED_IOV_VP_UPDATE_ACCEPT_PARAM)))
5748 + if (!(*tlvs & tlv_mask))
5749 return 0;
5750
5751 vf_info = qed_iov_get_public_vf_info(hwfn, vfid, true);
5752 @@ -3025,6 +3029,13 @@ static int qed_iov_pre_update_vport(struct qed_hwfn *hwfn,
5753 flags->tx_accept_filter &= ~mask;
5754 }
5755
5756 + if (params->update_accept_any_vlan_flg) {
5757 + vf_info->accept_any_vlan = params->accept_any_vlan;
5758 +
5759 + if (vf_info->forced_vlan && !vf_info->is_trusted_configured)
5760 + params->accept_any_vlan = false;
5761 + }
5762 +
5763 return 0;
5764 }
5765
5766 @@ -4717,6 +4728,7 @@ static int qed_get_vf_config(struct qed_dev *cdev,
5767 tx_rate = vf_info->tx_rate;
5768 ivi->max_tx_rate = tx_rate ? tx_rate : link.speed;
5769 ivi->min_tx_rate = qed_iov_get_vf_min_rate(hwfn, vf_id);
5770 + ivi->trusted = vf_info->is_trusted_request;
5771
5772 return 0;
5773 }
5774 @@ -5147,6 +5159,12 @@ static void qed_iov_handle_trust_change(struct qed_hwfn *hwfn)
5775
5776 params.update_ctl_frame_check = 1;
5777 params.mac_chk_en = !vf_info->is_trusted_configured;
5778 + params.update_accept_any_vlan_flg = 0;
5779 +
5780 + if (vf_info->accept_any_vlan && vf_info->forced_vlan) {
5781 + params.update_accept_any_vlan_flg = 1;
5782 + params.accept_any_vlan = vf_info->accept_any_vlan;
5783 + }
5784
5785 if (vf_info->rx_accept_mode & mask) {
5786 flags->update_rx_mode_config = 1;
5787 @@ -5162,13 +5180,20 @@ static void qed_iov_handle_trust_change(struct qed_hwfn *hwfn)
5788 if (!vf_info->is_trusted_configured) {
5789 flags->rx_accept_filter &= ~mask;
5790 flags->tx_accept_filter &= ~mask;
5791 + params.accept_any_vlan = false;
5792 }
5793
5794 if (flags->update_rx_mode_config ||
5795 flags->update_tx_mode_config ||
5796 - params.update_ctl_frame_check)
5797 + params.update_ctl_frame_check ||
5798 + params.update_accept_any_vlan_flg) {
5799 + DP_VERBOSE(hwfn, QED_MSG_IOV,
5800 + "vport update config for %s VF[abs 0x%x rel 0x%x]\n",
5801 + vf_info->is_trusted_configured ? "trusted" : "untrusted",
5802 + vf->abs_vf_id, vf->relative_vf_id);
5803 qed_sp_vport_update(hwfn, &params,
5804 QED_SPQ_MODE_EBLOCK, NULL);
5805 + }
5806 }
5807 }
5808
5809 diff --git a/drivers/net/ethernet/qlogic/qed/qed_sriov.h b/drivers/net/ethernet/qlogic/qed/qed_sriov.h
5810 index 9a8fd79611f24..853be06bccdf6 100644
5811 --- a/drivers/net/ethernet/qlogic/qed/qed_sriov.h
5812 +++ b/drivers/net/ethernet/qlogic/qed/qed_sriov.h
5813 @@ -88,6 +88,7 @@ struct qed_public_vf_info {
5814 bool is_trusted_request;
5815 u8 rx_accept_mode;
5816 u8 tx_accept_mode;
5817 + bool accept_any_vlan;
5818 };
5819
5820 struct qed_iov_vf_init_params {
5821 diff --git a/drivers/net/ethernet/qlogic/qede/qede_fp.c b/drivers/net/ethernet/qlogic/qede/qede_fp.c
5822 index b81579afa361d..f16032635ba73 100644
5823 --- a/drivers/net/ethernet/qlogic/qede/qede_fp.c
5824 +++ b/drivers/net/ethernet/qlogic/qede/qede_fp.c
5825 @@ -723,6 +723,9 @@ qede_build_skb(struct qede_rx_queue *rxq,
5826 buf = page_address(bd->data) + bd->page_offset;
5827 skb = build_skb(buf, rxq->rx_buf_seg_size);
5828
5829 + if (unlikely(!skb))
5830 + return NULL;
5831 +
5832 skb_reserve(skb, pad);
5833 skb_put(skb, len);
5834
5835 diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h
5836 index f4aa6331b367b..0a9d24e86715d 100644
5837 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h
5838 +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h
5839 @@ -52,7 +52,7 @@ static inline int qlcnic_dcb_get_hw_capability(struct qlcnic_dcb *dcb)
5840 if (dcb && dcb->ops->get_hw_capability)
5841 return dcb->ops->get_hw_capability(dcb);
5842
5843 - return 0;
5844 + return -EOPNOTSUPP;
5845 }
5846
5847 static inline void qlcnic_dcb_free(struct qlcnic_dcb *dcb)
5848 @@ -66,7 +66,7 @@ static inline int qlcnic_dcb_attach(struct qlcnic_dcb *dcb)
5849 if (dcb && dcb->ops->attach)
5850 return dcb->ops->attach(dcb);
5851
5852 - return 0;
5853 + return -EOPNOTSUPP;
5854 }
5855
5856 static inline int
5857 @@ -75,7 +75,7 @@ qlcnic_dcb_query_hw_capability(struct qlcnic_dcb *dcb, char *buf)
5858 if (dcb && dcb->ops->query_hw_capability)
5859 return dcb->ops->query_hw_capability(dcb, buf);
5860
5861 - return 0;
5862 + return -EOPNOTSUPP;
5863 }
5864
5865 static inline void qlcnic_dcb_get_info(struct qlcnic_dcb *dcb)
5866 @@ -90,7 +90,7 @@ qlcnic_dcb_query_cee_param(struct qlcnic_dcb *dcb, char *buf, u8 type)
5867 if (dcb && dcb->ops->query_cee_param)
5868 return dcb->ops->query_cee_param(dcb, buf, type);
5869
5870 - return 0;
5871 + return -EOPNOTSUPP;
5872 }
5873
5874 static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb *dcb)
5875 @@ -98,7 +98,7 @@ static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb *dcb)
5876 if (dcb && dcb->ops->get_cee_cfg)
5877 return dcb->ops->get_cee_cfg(dcb);
5878
5879 - return 0;
5880 + return -EOPNOTSUPP;
5881 }
5882
5883 static inline void qlcnic_dcb_aen_handler(struct qlcnic_dcb *dcb, void *msg)
5884 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
5885 index a46fea472bc46..70cbf48c2c038 100644
5886 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
5887 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
5888 @@ -428,8 +428,7 @@ stmmac_probe_config_dt(struct platform_device *pdev, const char **mac)
5889 plat->phylink_node = np;
5890
5891 /* Get max speed of operation from device tree */
5892 - if (of_property_read_u32(np, "max-speed", &plat->max_speed))
5893 - plat->max_speed = -1;
5894 + of_property_read_u32(np, "max-speed", &plat->max_speed);
5895
5896 plat->bus_id = of_alias_get_id(np, "ethernet");
5897 if (plat->bus_id < 0)
5898 diff --git a/drivers/net/ethernet/sun/sunhme.c b/drivers/net/ethernet/sun/sunhme.c
5899 index d007dfeba5c35..3133f903279ce 100644
5900 --- a/drivers/net/ethernet/sun/sunhme.c
5901 +++ b/drivers/net/ethernet/sun/sunhme.c
5902 @@ -3164,7 +3164,7 @@ static int happy_meal_pci_probe(struct pci_dev *pdev,
5903 if (err) {
5904 printk(KERN_ERR "happymeal(PCI): Cannot register net device, "
5905 "aborting.\n");
5906 - goto err_out_iounmap;
5907 + goto err_out_free_coherent;
5908 }
5909
5910 pci_set_drvdata(pdev, hp);
5911 @@ -3197,6 +3197,10 @@ static int happy_meal_pci_probe(struct pci_dev *pdev,
5912
5913 return 0;
5914
5915 +err_out_free_coherent:
5916 + dma_free_coherent(hp->dma_dev, PAGE_SIZE,
5917 + hp->happy_block, hp->hblock_dvma);
5918 +
5919 err_out_iounmap:
5920 iounmap(hp->gregs);
5921
5922 diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c
5923 index bd0beb16d68a9..02d6f3ad9aca8 100644
5924 --- a/drivers/net/hamradio/6pack.c
5925 +++ b/drivers/net/hamradio/6pack.c
5926 @@ -674,14 +674,14 @@ static void sixpack_close(struct tty_struct *tty)
5927 */
5928 netif_stop_queue(sp->dev);
5929
5930 + unregister_netdev(sp->dev);
5931 +
5932 del_timer_sync(&sp->tx_t);
5933 del_timer_sync(&sp->resync_t);
5934
5935 /* Free all 6pack frame buffers. */
5936 kfree(sp->rbuff);
5937 kfree(sp->xbuff);
5938 -
5939 - unregister_netdev(sp->dev);
5940 }
5941
5942 /* Perform I/O control on an active 6pack channel. */
5943 diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
5944 index 694e2f5dbbe59..39801c31e5071 100644
5945 --- a/drivers/net/macvtap.c
5946 +++ b/drivers/net/macvtap.c
5947 @@ -133,11 +133,17 @@ static void macvtap_setup(struct net_device *dev)
5948 dev->tx_queue_len = TUN_READQ_SIZE;
5949 }
5950
5951 +static struct net *macvtap_link_net(const struct net_device *dev)
5952 +{
5953 + return dev_net(macvlan_dev_real_dev(dev));
5954 +}
5955 +
5956 static struct rtnl_link_ops macvtap_link_ops __read_mostly = {
5957 .kind = "macvtap",
5958 .setup = macvtap_setup,
5959 .newlink = macvtap_newlink,
5960 .dellink = macvtap_dellink,
5961 + .get_link_net = macvtap_link_net,
5962 .priv_size = sizeof(struct macvtap_dev),
5963 };
5964
5965 diff --git a/drivers/net/phy/broadcom.c b/drivers/net/phy/broadcom.c
5966 index c23fec34b50e9..7be75a611e9e8 100644
5967 --- a/drivers/net/phy/broadcom.c
5968 +++ b/drivers/net/phy/broadcom.c
5969 @@ -11,6 +11,7 @@
5970 */
5971
5972 #include "bcm-phy-lib.h"
5973 +#include <linux/delay.h>
5974 #include <linux/module.h>
5975 #include <linux/phy.h>
5976 #include <linux/brcmphy.h>
5977 @@ -479,6 +480,26 @@ static int brcm_fet_config_init(struct phy_device *phydev)
5978 if (err < 0)
5979 return err;
5980
5981 + /* The datasheet indicates the PHY needs up to 1us to complete a reset,
5982 + * build some slack here.
5983 + */
5984 + usleep_range(1000, 2000);
5985 +
5986 + /* The PHY requires 65 MDC clock cycles to complete a write operation
5987 + * and turnaround the line properly.
5988 + *
5989 + * We ignore -EIO here as the MDIO controller (e.g.: mdio-bcm-unimac)
5990 + * may flag the lack of turn-around as a read failure. This is
5991 + * particularly true with this combination since the MDIO controller
5992 + * only used 64 MDC cycles. This is not a critical failure in this
5993 + * specific case and it has no functional impact otherwise, so we let
5994 + * that one go through. If there is a genuine bus error, the next read
5995 + * of MII_BRCM_FET_INTREG will error out.
5996 + */
5997 + err = phy_read(phydev, MII_BMCR);
5998 + if (err < 0 && err != -EIO)
5999 + return err;
6000 +
6001 reg = phy_read(phydev, MII_BRCM_FET_INTREG);
6002 if (reg < 0)
6003 return reg;
6004 diff --git a/drivers/net/tap.c b/drivers/net/tap.c
6005 index f285422a80717..f870d08bb1f86 100644
6006 --- a/drivers/net/tap.c
6007 +++ b/drivers/net/tap.c
6008 @@ -1214,7 +1214,8 @@ static int tap_sendmsg(struct socket *sock, struct msghdr *m,
6009 struct xdp_buff *xdp;
6010 int i;
6011
6012 - if (ctl && (ctl->type == TUN_MSG_PTR)) {
6013 + if (m->msg_controllen == sizeof(struct tun_msg_ctl) &&
6014 + ctl && ctl->type == TUN_MSG_PTR) {
6015 for (i = 0; i < ctl->num; i++) {
6016 xdp = &((struct xdp_buff *)ctl->ptr)[i];
6017 tap_get_user_xdp(q, xdp);
6018 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
6019 index 10211ea605140..d9993884a97d9 100644
6020 --- a/drivers/net/tun.c
6021 +++ b/drivers/net/tun.c
6022 @@ -2561,7 +2561,8 @@ static int tun_sendmsg(struct socket *sock, struct msghdr *m, size_t total_len)
6023 if (!tun)
6024 return -EBADFD;
6025
6026 - if (ctl && (ctl->type == TUN_MSG_PTR)) {
6027 + if (m->msg_controllen == sizeof(struct tun_msg_ctl) &&
6028 + ctl && ctl->type == TUN_MSG_PTR) {
6029 struct tun_page tpage;
6030 int n = ctl->num;
6031 int flush = 0;
6032 diff --git a/drivers/net/wireless/ath/ath10k/wow.c b/drivers/net/wireless/ath/ath10k/wow.c
6033 index 8c26adddd034e..b4f54ca127561 100644
6034 --- a/drivers/net/wireless/ath/ath10k/wow.c
6035 +++ b/drivers/net/wireless/ath/ath10k/wow.c
6036 @@ -337,14 +337,15 @@ static int ath10k_vif_wow_set_wakeups(struct ath10k_vif *arvif,
6037 if (patterns[i].mask[j / 8] & BIT(j % 8))
6038 bitmask[j] = 0xff;
6039 old_pattern.mask = bitmask;
6040 - new_pattern = old_pattern;
6041
6042 if (ar->wmi.rx_decap_mode == ATH10K_HW_TXRX_NATIVE_WIFI) {
6043 - if (patterns[i].pkt_offset < ETH_HLEN)
6044 + if (patterns[i].pkt_offset < ETH_HLEN) {
6045 ath10k_wow_convert_8023_to_80211(&new_pattern,
6046 &old_pattern);
6047 - else
6048 + } else {
6049 + new_pattern = old_pattern;
6050 new_pattern.pkt_offset += WOW_HDR_LEN - ETH_HLEN;
6051 + }
6052 }
6053
6054 if (WARN_ON(new_pattern.pattern_len > WOW_MAX_PATTERN_SIZE))
6055 diff --git a/drivers/net/wireless/ath/ath5k/eeprom.c b/drivers/net/wireless/ath/ath5k/eeprom.c
6056 index 94d34ee02265d..01163b3339451 100644
6057 --- a/drivers/net/wireless/ath/ath5k/eeprom.c
6058 +++ b/drivers/net/wireless/ath/ath5k/eeprom.c
6059 @@ -746,6 +746,9 @@ ath5k_eeprom_convert_pcal_info_5111(struct ath5k_hw *ah, int mode,
6060 }
6061 }
6062
6063 + if (idx == AR5K_EEPROM_N_PD_CURVES)
6064 + goto err_out;
6065 +
6066 ee->ee_pd_gains[mode] = 1;
6067
6068 pd = &chinfo[pier].pd_curves[idx];
6069 diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c
6070 index 510e61e97dbcb..994ec48b2f669 100644
6071 --- a/drivers/net/wireless/ath/ath9k/htc_hst.c
6072 +++ b/drivers/net/wireless/ath/ath9k/htc_hst.c
6073 @@ -30,6 +30,7 @@ static int htc_issue_send(struct htc_target *target, struct sk_buff* skb,
6074 hdr->endpoint_id = epid;
6075 hdr->flags = flags;
6076 hdr->payload_len = cpu_to_be16(len);
6077 + memset(hdr->control, 0, sizeof(hdr->control));
6078
6079 status = target->hif->send(target->hif_dev, endpoint->ul_pipeid, skb);
6080
6081 @@ -272,6 +273,10 @@ int htc_connect_service(struct htc_target *target,
6082 conn_msg->dl_pipeid = endpoint->dl_pipeid;
6083 conn_msg->ul_pipeid = endpoint->ul_pipeid;
6084
6085 + /* To prevent infoleak */
6086 + conn_msg->svc_meta_len = 0;
6087 + conn_msg->pad = 0;
6088 +
6089 ret = htc_issue_send(target, skb, skb->len, 0, ENDPOINT0);
6090 if (ret)
6091 goto err;
6092 diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c
6093 index 21ca62b06214a..8d708e7588bcb 100644
6094 --- a/drivers/net/wireless/ath/carl9170/main.c
6095 +++ b/drivers/net/wireless/ath/carl9170/main.c
6096 @@ -1917,7 +1917,7 @@ static int carl9170_parse_eeprom(struct ar9170 *ar)
6097 WARN_ON(!(tx_streams >= 1 && tx_streams <=
6098 IEEE80211_HT_MCS_TX_MAX_STREAMS));
6099
6100 - tx_params = (tx_streams - 1) <<
6101 + tx_params |= (tx_streams - 1) <<
6102 IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT;
6103
6104 carl9170_band_2GHz.ht_cap.mcs.tx_params |= tx_params;
6105 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
6106 index 3aed4c4b887aa..544ad80629a99 100644
6107 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
6108 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
6109 @@ -207,6 +207,8 @@ static int brcmf_init_nvram_parser(struct nvram_parser *nvp,
6110 size = BRCMF_FW_MAX_NVRAM_SIZE;
6111 else
6112 size = data_len;
6113 + /* Add space for properties we may add */
6114 + size += strlen(BRCMF_FW_DEFAULT_BOARDREV) + 1;
6115 /* Alloc for extra 0 byte + roundup by 4 + length field */
6116 size += 1 + 3 + sizeof(u32);
6117 nvp->nvram = kzalloc(size, GFP_KERNEL);
6118 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
6119 index e6001f0a81a3a..b5d2e5b9f67cc 100644
6120 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
6121 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
6122 @@ -12,6 +12,7 @@
6123 #include <linux/interrupt.h>
6124 #include <linux/bcma/bcma.h>
6125 #include <linux/sched.h>
6126 +#include <linux/io.h>
6127 #include <asm/unaligned.h>
6128
6129 #include <soc.h>
6130 @@ -444,47 +445,6 @@ brcmf_pcie_write_ram32(struct brcmf_pciedev_info *devinfo, u32 mem_offset,
6131 }
6132
6133
6134 -static void
6135 -brcmf_pcie_copy_mem_todev(struct brcmf_pciedev_info *devinfo, u32 mem_offset,
6136 - void *srcaddr, u32 len)
6137 -{
6138 - void __iomem *address = devinfo->tcm + mem_offset;
6139 - __le32 *src32;
6140 - __le16 *src16;
6141 - u8 *src8;
6142 -
6143 - if (((ulong)address & 4) || ((ulong)srcaddr & 4) || (len & 4)) {
6144 - if (((ulong)address & 2) || ((ulong)srcaddr & 2) || (len & 2)) {
6145 - src8 = (u8 *)srcaddr;
6146 - while (len) {
6147 - iowrite8(*src8, address);
6148 - address++;
6149 - src8++;
6150 - len--;
6151 - }
6152 - } else {
6153 - len = len / 2;
6154 - src16 = (__le16 *)srcaddr;
6155 - while (len) {
6156 - iowrite16(le16_to_cpu(*src16), address);
6157 - address += 2;
6158 - src16++;
6159 - len--;
6160 - }
6161 - }
6162 - } else {
6163 - len = len / 4;
6164 - src32 = (__le32 *)srcaddr;
6165 - while (len) {
6166 - iowrite32(le32_to_cpu(*src32), address);
6167 - address += 4;
6168 - src32++;
6169 - len--;
6170 - }
6171 - }
6172 -}
6173 -
6174 -
6175 static void
6176 brcmf_pcie_copy_dev_tomem(struct brcmf_pciedev_info *devinfo, u32 mem_offset,
6177 void *dstaddr, u32 len)
6178 @@ -1346,6 +1306,18 @@ static void brcmf_pcie_down(struct device *dev)
6179 {
6180 }
6181
6182 +static int brcmf_pcie_preinit(struct device *dev)
6183 +{
6184 + struct brcmf_bus *bus_if = dev_get_drvdata(dev);
6185 + struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie;
6186 +
6187 + brcmf_dbg(PCIE, "Enter\n");
6188 +
6189 + brcmf_pcie_intr_enable(buspub->devinfo);
6190 + brcmf_pcie_hostready(buspub->devinfo);
6191 +
6192 + return 0;
6193 +}
6194
6195 static int brcmf_pcie_tx(struct device *dev, struct sk_buff *skb)
6196 {
6197 @@ -1454,6 +1426,7 @@ static int brcmf_pcie_reset(struct device *dev)
6198 }
6199
6200 static const struct brcmf_bus_ops brcmf_pcie_bus_ops = {
6201 + .preinit = brcmf_pcie_preinit,
6202 .txdata = brcmf_pcie_tx,
6203 .stop = brcmf_pcie_down,
6204 .txctl = brcmf_pcie_tx_ctlpkt,
6205 @@ -1561,8 +1534,8 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo,
6206 return err;
6207
6208 brcmf_dbg(PCIE, "Download FW %s\n", devinfo->fw_name);
6209 - brcmf_pcie_copy_mem_todev(devinfo, devinfo->ci->rambase,
6210 - (void *)fw->data, fw->size);
6211 + memcpy_toio(devinfo->tcm + devinfo->ci->rambase,
6212 + (void *)fw->data, fw->size);
6213
6214 resetintr = get_unaligned_le32(fw->data);
6215 release_firmware(fw);
6216 @@ -1576,7 +1549,7 @@ static int brcmf_pcie_download_fw_nvram(struct brcmf_pciedev_info *devinfo,
6217 brcmf_dbg(PCIE, "Download NVRAM %s\n", devinfo->nvram_name);
6218 address = devinfo->ci->rambase + devinfo->ci->ramsize -
6219 nvram_len;
6220 - brcmf_pcie_copy_mem_todev(devinfo, address, nvram, nvram_len);
6221 + memcpy_toio(devinfo->tcm + address, nvram, nvram_len);
6222 brcmf_fw_nvram_free(nvram);
6223 } else {
6224 brcmf_dbg(PCIE, "No matching NVRAM file found %s\n",
6225 @@ -1775,6 +1748,8 @@ static void brcmf_pcie_setup(struct device *dev, int ret,
6226 ret = brcmf_chip_get_raminfo(devinfo->ci);
6227 if (ret) {
6228 brcmf_err(bus, "Failed to get RAM info\n");
6229 + release_firmware(fw);
6230 + brcmf_fw_nvram_free(nvram);
6231 goto fail;
6232 }
6233
6234 @@ -1824,9 +1799,6 @@ static void brcmf_pcie_setup(struct device *dev, int ret,
6235
6236 init_waitqueue_head(&devinfo->mbdata_resp_wait);
6237
6238 - brcmf_pcie_intr_enable(devinfo);
6239 - brcmf_pcie_hostready(devinfo);
6240 -
6241 ret = brcmf_attach(&devinfo->pdev->dev);
6242 if (ret)
6243 goto fail;
6244 diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
6245 index 6512d25e35630..f3bb1f91b5878 100644
6246 --- a/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
6247 +++ b/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
6248 @@ -303,7 +303,7 @@ static int iwlagn_mac_start(struct ieee80211_hw *hw)
6249
6250 priv->is_open = 1;
6251 IWL_DEBUG_MAC80211(priv, "leave\n");
6252 - return 0;
6253 + return ret;
6254 }
6255
6256 static void iwlagn_mac_stop(struct ieee80211_hw *hw)
6257 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
6258 index 7272d8522a9e9..c5b08a68f6fa1 100644
6259 --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
6260 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c
6261 @@ -1417,8 +1417,10 @@ int iwl_mvm_up(struct iwl_mvm *mvm)
6262 while (!sband && i < NUM_NL80211_BANDS)
6263 sband = mvm->hw->wiphy->bands[i++];
6264
6265 - if (WARN_ON_ONCE(!sband))
6266 + if (WARN_ON_ONCE(!sband)) {
6267 + ret = -ENODEV;
6268 goto error;
6269 + }
6270
6271 chan = &sband->channels[0];
6272
6273 diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/main.c b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
6274 index 0a5695c3d9241..625492284389c 100644
6275 --- a/drivers/net/wireless/mediatek/mt76/mt7603/main.c
6276 +++ b/drivers/net/wireless/mediatek/mt76/mt7603/main.c
6277 @@ -605,6 +605,9 @@ mt7603_sta_rate_tbl_update(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
6278 struct ieee80211_sta_rates *sta_rates = rcu_dereference(sta->rates);
6279 int i;
6280
6281 + if (!sta_rates)
6282 + return;
6283 +
6284 spin_lock_bh(&dev->mt76.lock);
6285 for (i = 0; i < ARRAY_SIZE(msta->rates); i++) {
6286 msta->rates[i].idx = sta_rates->rate[i].idx;
6287 diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
6288 index 38183aef0eb92..5ad8b0afa41f0 100644
6289 --- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c
6290 +++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
6291 @@ -385,6 +385,9 @@ static void mt7615_sta_rate_tbl_update(struct ieee80211_hw *hw,
6292 struct ieee80211_sta_rates *sta_rates = rcu_dereference(sta->rates);
6293 int i;
6294
6295 + if (!sta_rates)
6296 + return;
6297 +
6298 spin_lock_bh(&dev->mt76.lock);
6299 for (i = 0; i < ARRAY_SIZE(msta->rates); i++) {
6300 msta->rates[i].idx = sta_rates->rate[i].idx;
6301 diff --git a/drivers/net/wireless/ray_cs.c b/drivers/net/wireless/ray_cs.c
6302 index cf372684b6812..3836d6ac53049 100644
6303 --- a/drivers/net/wireless/ray_cs.c
6304 +++ b/drivers/net/wireless/ray_cs.c
6305 @@ -382,6 +382,8 @@ static int ray_config(struct pcmcia_device *link)
6306 goto failed;
6307 local->sram = ioremap(link->resource[2]->start,
6308 resource_size(link->resource[2]));
6309 + if (!local->sram)
6310 + goto failed;
6311
6312 /*** Set up 16k window for shared memory (receive buffer) ***************/
6313 link->resource[3]->flags |=
6314 @@ -396,6 +398,8 @@ static int ray_config(struct pcmcia_device *link)
6315 goto failed;
6316 local->rmem = ioremap(link->resource[3]->start,
6317 resource_size(link->resource[3]));
6318 + if (!local->rmem)
6319 + goto failed;
6320
6321 /*** Set up window for attribute memory ***********************************/
6322 link->resource[4]->flags |=
6323 @@ -410,6 +414,8 @@ static int ray_config(struct pcmcia_device *link)
6324 goto failed;
6325 local->amem = ioremap(link->resource[4]->start,
6326 resource_size(link->resource[4]));
6327 + if (!local->amem)
6328 + goto failed;
6329
6330 dev_dbg(&link->dev, "ray_config sram=%p\n", local->sram);
6331 dev_dbg(&link->dev, "ray_config rmem=%p\n", local->rmem);
6332 diff --git a/drivers/parisc/dino.c b/drivers/parisc/dino.c
6333 index 544287e9f449b..f4de8be05c614 100644
6334 --- a/drivers/parisc/dino.c
6335 +++ b/drivers/parisc/dino.c
6336 @@ -142,9 +142,8 @@ struct dino_device
6337 {
6338 struct pci_hba_data hba; /* 'C' inheritance - must be first */
6339 spinlock_t dinosaur_pen;
6340 - unsigned long txn_addr; /* EIR addr to generate interrupt */
6341 - u32 txn_data; /* EIR data assign to each dino */
6342 u32 imr; /* IRQ's which are enabled */
6343 + struct gsc_irq gsc_irq;
6344 int global_irq[DINO_LOCAL_IRQS]; /* map IMR bit to global irq */
6345 #ifdef DINO_DEBUG
6346 unsigned int dino_irr0; /* save most recent IRQ line stat */
6347 @@ -339,14 +338,43 @@ static void dino_unmask_irq(struct irq_data *d)
6348 if (tmp & DINO_MASK_IRQ(local_irq)) {
6349 DBG(KERN_WARNING "%s(): IRQ asserted! (ILR 0x%x)\n",
6350 __func__, tmp);
6351 - gsc_writel(dino_dev->txn_data, dino_dev->txn_addr);
6352 + gsc_writel(dino_dev->gsc_irq.txn_data, dino_dev->gsc_irq.txn_addr);
6353 }
6354 }
6355
6356 +#ifdef CONFIG_SMP
6357 +static int dino_set_affinity_irq(struct irq_data *d, const struct cpumask *dest,
6358 + bool force)
6359 +{
6360 + struct dino_device *dino_dev = irq_data_get_irq_chip_data(d);
6361 + struct cpumask tmask;
6362 + int cpu_irq;
6363 + u32 eim;
6364 +
6365 + if (!cpumask_and(&tmask, dest, cpu_online_mask))
6366 + return -EINVAL;
6367 +
6368 + cpu_irq = cpu_check_affinity(d, &tmask);
6369 + if (cpu_irq < 0)
6370 + return cpu_irq;
6371 +
6372 + dino_dev->gsc_irq.txn_addr = txn_affinity_addr(d->irq, cpu_irq);
6373 + eim = ((u32) dino_dev->gsc_irq.txn_addr) | dino_dev->gsc_irq.txn_data;
6374 + __raw_writel(eim, dino_dev->hba.base_addr+DINO_IAR0);
6375 +
6376 + irq_data_update_effective_affinity(d, &tmask);
6377 +
6378 + return IRQ_SET_MASK_OK;
6379 +}
6380 +#endif
6381 +
6382 static struct irq_chip dino_interrupt_type = {
6383 .name = "GSC-PCI",
6384 .irq_unmask = dino_unmask_irq,
6385 .irq_mask = dino_mask_irq,
6386 +#ifdef CONFIG_SMP
6387 + .irq_set_affinity = dino_set_affinity_irq,
6388 +#endif
6389 };
6390
6391
6392 @@ -806,7 +834,6 @@ static int __init dino_common_init(struct parisc_device *dev,
6393 {
6394 int status;
6395 u32 eim;
6396 - struct gsc_irq gsc_irq;
6397 struct resource *res;
6398
6399 pcibios_register_hba(&dino_dev->hba);
6400 @@ -821,10 +848,8 @@ static int __init dino_common_init(struct parisc_device *dev,
6401 ** still only has 11 IRQ input lines - just map some of them
6402 ** to a different processor.
6403 */
6404 - dev->irq = gsc_alloc_irq(&gsc_irq);
6405 - dino_dev->txn_addr = gsc_irq.txn_addr;
6406 - dino_dev->txn_data = gsc_irq.txn_data;
6407 - eim = ((u32) gsc_irq.txn_addr) | gsc_irq.txn_data;
6408 + dev->irq = gsc_alloc_irq(&dino_dev->gsc_irq);
6409 + eim = ((u32) dino_dev->gsc_irq.txn_addr) | dino_dev->gsc_irq.txn_data;
6410
6411 /*
6412 ** Dino needs a PA "IRQ" to get a processor's attention.
6413 diff --git a/drivers/parisc/gsc.c b/drivers/parisc/gsc.c
6414 index ed9371acf37eb..ec175ae998733 100644
6415 --- a/drivers/parisc/gsc.c
6416 +++ b/drivers/parisc/gsc.c
6417 @@ -135,10 +135,41 @@ static void gsc_asic_unmask_irq(struct irq_data *d)
6418 */
6419 }
6420
6421 +#ifdef CONFIG_SMP
6422 +static int gsc_set_affinity_irq(struct irq_data *d, const struct cpumask *dest,
6423 + bool force)
6424 +{
6425 + struct gsc_asic *gsc_dev = irq_data_get_irq_chip_data(d);
6426 + struct cpumask tmask;
6427 + int cpu_irq;
6428 +
6429 + if (!cpumask_and(&tmask, dest, cpu_online_mask))
6430 + return -EINVAL;
6431 +
6432 + cpu_irq = cpu_check_affinity(d, &tmask);
6433 + if (cpu_irq < 0)
6434 + return cpu_irq;
6435 +
6436 + gsc_dev->gsc_irq.txn_addr = txn_affinity_addr(d->irq, cpu_irq);
6437 + gsc_dev->eim = ((u32) gsc_dev->gsc_irq.txn_addr) | gsc_dev->gsc_irq.txn_data;
6438 +
6439 + /* switch IRQ's for devices below LASI/WAX to other CPU */
6440 + gsc_writel(gsc_dev->eim, gsc_dev->hpa + OFFSET_IAR);
6441 +
6442 + irq_data_update_effective_affinity(d, &tmask);
6443 +
6444 + return IRQ_SET_MASK_OK;
6445 +}
6446 +#endif
6447 +
6448 +
6449 static struct irq_chip gsc_asic_interrupt_type = {
6450 .name = "GSC-ASIC",
6451 .irq_unmask = gsc_asic_unmask_irq,
6452 .irq_mask = gsc_asic_mask_irq,
6453 +#ifdef CONFIG_SMP
6454 + .irq_set_affinity = gsc_set_affinity_irq,
6455 +#endif
6456 };
6457
6458 int gsc_assign_irq(struct irq_chip *type, void *data)
6459 diff --git a/drivers/parisc/gsc.h b/drivers/parisc/gsc.h
6460 index 86abad3fa2150..73cbd0bb1975a 100644
6461 --- a/drivers/parisc/gsc.h
6462 +++ b/drivers/parisc/gsc.h
6463 @@ -31,6 +31,7 @@ struct gsc_asic {
6464 int version;
6465 int type;
6466 int eim;
6467 + struct gsc_irq gsc_irq;
6468 int global_irq[32];
6469 };
6470
6471 diff --git a/drivers/parisc/lasi.c b/drivers/parisc/lasi.c
6472 index 4e4fd12c2112e..6ef621adb63a8 100644
6473 --- a/drivers/parisc/lasi.c
6474 +++ b/drivers/parisc/lasi.c
6475 @@ -163,7 +163,6 @@ static int __init lasi_init_chip(struct parisc_device *dev)
6476 {
6477 extern void (*chassis_power_off)(void);
6478 struct gsc_asic *lasi;
6479 - struct gsc_irq gsc_irq;
6480 int ret;
6481
6482 lasi = kzalloc(sizeof(*lasi), GFP_KERNEL);
6483 @@ -185,7 +184,7 @@ static int __init lasi_init_chip(struct parisc_device *dev)
6484 lasi_init_irq(lasi);
6485
6486 /* the IRQ lasi should use */
6487 - dev->irq = gsc_alloc_irq(&gsc_irq);
6488 + dev->irq = gsc_alloc_irq(&lasi->gsc_irq);
6489 if (dev->irq < 0) {
6490 printk(KERN_ERR "%s(): cannot get GSC irq\n",
6491 __func__);
6492 @@ -193,9 +192,9 @@ static int __init lasi_init_chip(struct parisc_device *dev)
6493 return -EBUSY;
6494 }
6495
6496 - lasi->eim = ((u32) gsc_irq.txn_addr) | gsc_irq.txn_data;
6497 + lasi->eim = ((u32) lasi->gsc_irq.txn_addr) | lasi->gsc_irq.txn_data;
6498
6499 - ret = request_irq(gsc_irq.irq, gsc_asic_intr, 0, "lasi", lasi);
6500 + ret = request_irq(lasi->gsc_irq.irq, gsc_asic_intr, 0, "lasi", lasi);
6501 if (ret < 0) {
6502 kfree(lasi);
6503 return ret;
6504 diff --git a/drivers/parisc/wax.c b/drivers/parisc/wax.c
6505 index 5b6df15162354..73a2b01f8d9ca 100644
6506 --- a/drivers/parisc/wax.c
6507 +++ b/drivers/parisc/wax.c
6508 @@ -68,7 +68,6 @@ static int __init wax_init_chip(struct parisc_device *dev)
6509 {
6510 struct gsc_asic *wax;
6511 struct parisc_device *parent;
6512 - struct gsc_irq gsc_irq;
6513 int ret;
6514
6515 wax = kzalloc(sizeof(*wax), GFP_KERNEL);
6516 @@ -85,7 +84,7 @@ static int __init wax_init_chip(struct parisc_device *dev)
6517 wax_init_irq(wax);
6518
6519 /* the IRQ wax should use */
6520 - dev->irq = gsc_claim_irq(&gsc_irq, WAX_GSC_IRQ);
6521 + dev->irq = gsc_claim_irq(&wax->gsc_irq, WAX_GSC_IRQ);
6522 if (dev->irq < 0) {
6523 printk(KERN_ERR "%s(): cannot get GSC irq\n",
6524 __func__);
6525 @@ -93,9 +92,9 @@ static int __init wax_init_chip(struct parisc_device *dev)
6526 return -EBUSY;
6527 }
6528
6529 - wax->eim = ((u32) gsc_irq.txn_addr) | gsc_irq.txn_data;
6530 + wax->eim = ((u32) wax->gsc_irq.txn_addr) | wax->gsc_irq.txn_data;
6531
6532 - ret = request_irq(gsc_irq.irq, gsc_asic_intr, 0, "wax", wax);
6533 + ret = request_irq(wax->gsc_irq.irq, gsc_asic_intr, 0, "wax", wax);
6534 if (ret < 0) {
6535 kfree(wax);
6536 return ret;
6537 diff --git a/drivers/pci/access.c b/drivers/pci/access.c
6538 index 0914ddeae17f4..c909c66a63e2d 100644
6539 --- a/drivers/pci/access.c
6540 +++ b/drivers/pci/access.c
6541 @@ -160,9 +160,12 @@ int pci_generic_config_write32(struct pci_bus *bus, unsigned int devfn,
6542 * write happen to have any RW1C (write-one-to-clear) bits set, we
6543 * just inadvertently cleared something we shouldn't have.
6544 */
6545 - dev_warn_ratelimited(&bus->dev, "%d-byte config write to %04x:%02x:%02x.%d offset %#x may corrupt adjacent RW1C bits\n",
6546 - size, pci_domain_nr(bus), bus->number,
6547 - PCI_SLOT(devfn), PCI_FUNC(devfn), where);
6548 + if (!bus->unsafe_warn) {
6549 + dev_warn(&bus->dev, "%d-byte config write to %04x:%02x:%02x.%d offset %#x may corrupt adjacent RW1C bits\n",
6550 + size, pci_domain_nr(bus), bus->number,
6551 + PCI_SLOT(devfn), PCI_FUNC(devfn), where);
6552 + bus->unsafe_warn = 1;
6553 + }
6554
6555 mask = ~(((1 << (size * 8)) - 1) << ((where & 0x3) * 8));
6556 tmp = readl(addr) & mask;
6557 diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c
6558 index d2f8cd3a9568b..721d2652319ce 100644
6559 --- a/drivers/pci/controller/pci-aardvark.c
6560 +++ b/drivers/pci/controller/pci-aardvark.c
6561 @@ -835,7 +835,9 @@ advk_pci_bridge_emul_pcie_conf_read(struct pci_bridge_emul *bridge,
6562 case PCI_EXP_RTSTA: {
6563 u32 isr0 = advk_readl(pcie, PCIE_ISR0_REG);
6564 u32 msglog = advk_readl(pcie, PCIE_MSG_LOG_REG);
6565 - *value = (isr0 & PCIE_MSG_PM_PME_MASK) << 16 | (msglog >> 16);
6566 + *value = msglog >> 16;
6567 + if (isr0 & PCIE_MSG_PM_PME_MASK)
6568 + *value |= PCI_EXP_RTSTA_PME;
6569 return PCI_BRIDGE_EMUL_HANDLED;
6570 }
6571
6572 @@ -1168,7 +1170,7 @@ static void advk_msi_irq_compose_msi_msg(struct irq_data *data,
6573
6574 msg->address_lo = lower_32_bits(msi_msg);
6575 msg->address_hi = upper_32_bits(msi_msg);
6576 - msg->data = data->irq;
6577 + msg->data = data->hwirq;
6578 }
6579
6580 static int advk_msi_set_affinity(struct irq_data *irq_data,
6581 @@ -1185,15 +1187,11 @@ static int advk_msi_irq_domain_alloc(struct irq_domain *domain,
6582 int hwirq, i;
6583
6584 mutex_lock(&pcie->msi_used_lock);
6585 - hwirq = bitmap_find_next_zero_area(pcie->msi_used, MSI_IRQ_NUM,
6586 - 0, nr_irqs, 0);
6587 - if (hwirq >= MSI_IRQ_NUM) {
6588 - mutex_unlock(&pcie->msi_used_lock);
6589 - return -ENOSPC;
6590 - }
6591 -
6592 - bitmap_set(pcie->msi_used, hwirq, nr_irqs);
6593 + hwirq = bitmap_find_free_region(pcie->msi_used, MSI_IRQ_NUM,
6594 + order_base_2(nr_irqs));
6595 mutex_unlock(&pcie->msi_used_lock);
6596 + if (hwirq < 0)
6597 + return -ENOSPC;
6598
6599 for (i = 0; i < nr_irqs; i++)
6600 irq_domain_set_info(domain, virq + i, hwirq + i,
6601 @@ -1211,7 +1209,7 @@ static void advk_msi_irq_domain_free(struct irq_domain *domain,
6602 struct advk_pcie *pcie = domain->host_data;
6603
6604 mutex_lock(&pcie->msi_used_lock);
6605 - bitmap_clear(pcie->msi_used, d->hwirq, nr_irqs);
6606 + bitmap_release_region(pcie->msi_used, d->hwirq, order_base_2(nr_irqs));
6607 mutex_unlock(&pcie->msi_used_lock);
6608 }
6609
6610 diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
6611 index 907b8be86ce04..13f3bc239c660 100644
6612 --- a/drivers/pci/hotplug/pciehp_hpc.c
6613 +++ b/drivers/pci/hotplug/pciehp_hpc.c
6614 @@ -79,6 +79,8 @@ static int pcie_poll_cmd(struct controller *ctrl, int timeout)
6615 if (slot_status & PCI_EXP_SLTSTA_CC) {
6616 pcie_capability_write_word(pdev, PCI_EXP_SLTSTA,
6617 PCI_EXP_SLTSTA_CC);
6618 + ctrl->cmd_busy = 0;
6619 + smp_mb();
6620 return 1;
6621 }
6622 if (timeout < 0)
6623 @@ -957,6 +959,8 @@ static void quirk_cmd_compl(struct pci_dev *pdev)
6624 }
6625 DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_INTEL, PCI_ANY_ID,
6626 PCI_CLASS_BRIDGE_PCI, 8, quirk_cmd_compl);
6627 +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_QCOM, 0x0110,
6628 + PCI_CLASS_BRIDGE_PCI, 8, quirk_cmd_compl);
6629 DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_QCOM, 0x0400,
6630 PCI_CLASS_BRIDGE_PCI, 8, quirk_cmd_compl);
6631 DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_QCOM, 0x0401,
6632 diff --git a/drivers/perf/qcom_l2_pmu.c b/drivers/perf/qcom_l2_pmu.c
6633 index 4da37f650f983..7018eb21d1892 100644
6634 --- a/drivers/perf/qcom_l2_pmu.c
6635 +++ b/drivers/perf/qcom_l2_pmu.c
6636 @@ -781,7 +781,7 @@ static struct cluster_pmu *l2_cache_associate_cpu_with_cluster(
6637 {
6638 u64 mpidr;
6639 int cpu_cluster_id;
6640 - struct cluster_pmu *cluster = NULL;
6641 + struct cluster_pmu *cluster;
6642
6643 /*
6644 * This assumes that the cluster_id is in MPIDR[aff1] for
6645 @@ -803,10 +803,10 @@ static struct cluster_pmu *l2_cache_associate_cpu_with_cluster(
6646 cluster->cluster_id);
6647 cpumask_set_cpu(cpu, &cluster->cluster_cpus);
6648 *per_cpu_ptr(l2cache_pmu->pmu_cluster, cpu) = cluster;
6649 - break;
6650 + return cluster;
6651 }
6652
6653 - return cluster;
6654 + return NULL;
6655 }
6656
6657 static int l2cache_pmu_online_cpu(unsigned int cpu, struct hlist_node *node)
6658 diff --git a/drivers/phy/phy-core-mipi-dphy.c b/drivers/phy/phy-core-mipi-dphy.c
6659 index 14e0551cd3190..0aa740b73d0db 100644
6660 --- a/drivers/phy/phy-core-mipi-dphy.c
6661 +++ b/drivers/phy/phy-core-mipi-dphy.c
6662 @@ -66,10 +66,10 @@ int phy_mipi_dphy_get_default_config(unsigned long pixel_clock,
6663 cfg->hs_trail = max(4 * 8 * ui, 60000 + 4 * 4 * ui);
6664
6665 cfg->init = 100;
6666 - cfg->lpx = 60000;
6667 + cfg->lpx = 50000;
6668 cfg->ta_get = 5 * cfg->lpx;
6669 cfg->ta_go = 4 * cfg->lpx;
6670 - cfg->ta_sure = 2 * cfg->lpx;
6671 + cfg->ta_sure = cfg->lpx;
6672 cfg->wakeup = 1000;
6673
6674 cfg->hs_clk_rate = hs_clk_rate;
6675 diff --git a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
6676 index 53f52b9a0acdc..c2df70712ca22 100644
6677 --- a/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
6678 +++ b/drivers/pinctrl/mediatek/pinctrl-mtk-common.c
6679 @@ -1038,6 +1038,7 @@ int mtk_pctrl_init(struct platform_device *pdev,
6680 node = of_parse_phandle(np, "mediatek,pctl-regmap", 0);
6681 if (node) {
6682 pctl->regmap1 = syscon_node_to_regmap(node);
6683 + of_node_put(node);
6684 if (IS_ERR(pctl->regmap1))
6685 return PTR_ERR(pctl->regmap1);
6686 } else if (regmap) {
6687 @@ -1051,6 +1052,7 @@ int mtk_pctrl_init(struct platform_device *pdev,
6688 node = of_parse_phandle(np, "mediatek,pctl-regmap", 1);
6689 if (node) {
6690 pctl->regmap2 = syscon_node_to_regmap(node);
6691 + of_node_put(node);
6692 if (IS_ERR(pctl->regmap2))
6693 return PTR_ERR(pctl->regmap2);
6694 }
6695 diff --git a/drivers/pinctrl/mediatek/pinctrl-paris.c b/drivers/pinctrl/mediatek/pinctrl-paris.c
6696 index 923264d0e9ef2..31449514a8c0c 100644
6697 --- a/drivers/pinctrl/mediatek/pinctrl-paris.c
6698 +++ b/drivers/pinctrl/mediatek/pinctrl-paris.c
6699 @@ -198,8 +198,7 @@ static int mtk_pinconf_get(struct pinctrl_dev *pctldev,
6700 }
6701
6702 static int mtk_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
6703 - enum pin_config_param param,
6704 - enum pin_config_param arg)
6705 + enum pin_config_param param, u32 arg)
6706 {
6707 struct mtk_pinctrl *hw = pinctrl_dev_get_drvdata(pctldev);
6708 const struct mtk_pin_desc *desc;
6709 @@ -647,10 +646,10 @@ static int mtk_pconf_group_get(struct pinctrl_dev *pctldev, unsigned group,
6710 unsigned long *config)
6711 {
6712 struct mtk_pinctrl *hw = pinctrl_dev_get_drvdata(pctldev);
6713 + struct mtk_pinctrl_group *grp = &hw->groups[group];
6714
6715 - *config = hw->groups[group].config;
6716 -
6717 - return 0;
6718 + /* One pin per group only */
6719 + return mtk_pinconf_get(pctldev, grp->pin, config);
6720 }
6721
6722 static int mtk_pconf_group_set(struct pinctrl_dev *pctldev, unsigned group,
6723 @@ -666,8 +665,6 @@ static int mtk_pconf_group_set(struct pinctrl_dev *pctldev, unsigned group,
6724 pinconf_to_config_argument(configs[i]));
6725 if (ret < 0)
6726 return ret;
6727 -
6728 - grp->config = configs[i];
6729 }
6730
6731 return 0;
6732 diff --git a/drivers/pinctrl/nomadik/pinctrl-nomadik.c b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
6733 index 2a8190b11d104..9f00adfefba8e 100644
6734 --- a/drivers/pinctrl/nomadik/pinctrl-nomadik.c
6735 +++ b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
6736 @@ -1923,8 +1923,10 @@ static int nmk_pinctrl_probe(struct platform_device *pdev)
6737 }
6738
6739 prcm_np = of_parse_phandle(np, "prcm", 0);
6740 - if (prcm_np)
6741 + if (prcm_np) {
6742 npct->prcm_base = of_iomap(prcm_np, 0);
6743 + of_node_put(prcm_np);
6744 + }
6745 if (!npct->prcm_base) {
6746 if (version == PINCTRL_NMK_STN8815) {
6747 dev_info(&pdev->dev,
6748 diff --git a/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c b/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c
6749 index 17f909d8b63a9..2dccd24c65557 100644
6750 --- a/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c
6751 +++ b/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c
6752 @@ -78,7 +78,6 @@ struct npcm7xx_gpio {
6753 struct gpio_chip gc;
6754 int irqbase;
6755 int irq;
6756 - void *priv;
6757 struct irq_chip irq_chip;
6758 u32 pinctrl_id;
6759 int (*direction_input)(struct gpio_chip *chip, unsigned offset);
6760 @@ -226,7 +225,7 @@ static void npcmgpio_irq_handler(struct irq_desc *desc)
6761 chained_irq_enter(chip, desc);
6762 sts = ioread32(bank->base + NPCM7XX_GP_N_EVST);
6763 en = ioread32(bank->base + NPCM7XX_GP_N_EVEN);
6764 - dev_dbg(chip->parent_device, "==> got irq sts %.8x %.8x\n", sts,
6765 + dev_dbg(bank->gc.parent, "==> got irq sts %.8x %.8x\n", sts,
6766 en);
6767
6768 sts &= en;
6769 @@ -241,33 +240,33 @@ static int npcmgpio_set_irq_type(struct irq_data *d, unsigned int type)
6770 gpiochip_get_data(irq_data_get_irq_chip_data(d));
6771 unsigned int gpio = BIT(d->hwirq);
6772
6773 - dev_dbg(d->chip->parent_device, "setirqtype: %u.%u = %u\n", gpio,
6774 + dev_dbg(bank->gc.parent, "setirqtype: %u.%u = %u\n", gpio,
6775 d->irq, type);
6776 switch (type) {
6777 case IRQ_TYPE_EDGE_RISING:
6778 - dev_dbg(d->chip->parent_device, "edge.rising\n");
6779 + dev_dbg(bank->gc.parent, "edge.rising\n");
6780 npcm_gpio_clr(&bank->gc, bank->base + NPCM7XX_GP_N_EVBE, gpio);
6781 npcm_gpio_clr(&bank->gc, bank->base + NPCM7XX_GP_N_POL, gpio);
6782 break;
6783 case IRQ_TYPE_EDGE_FALLING:
6784 - dev_dbg(d->chip->parent_device, "edge.falling\n");
6785 + dev_dbg(bank->gc.parent, "edge.falling\n");
6786 npcm_gpio_clr(&bank->gc, bank->base + NPCM7XX_GP_N_EVBE, gpio);
6787 npcm_gpio_set(&bank->gc, bank->base + NPCM7XX_GP_N_POL, gpio);
6788 break;
6789 case IRQ_TYPE_EDGE_BOTH:
6790 - dev_dbg(d->chip->parent_device, "edge.both\n");
6791 + dev_dbg(bank->gc.parent, "edge.both\n");
6792 npcm_gpio_set(&bank->gc, bank->base + NPCM7XX_GP_N_EVBE, gpio);
6793 break;
6794 case IRQ_TYPE_LEVEL_LOW:
6795 - dev_dbg(d->chip->parent_device, "level.low\n");
6796 + dev_dbg(bank->gc.parent, "level.low\n");
6797 npcm_gpio_set(&bank->gc, bank->base + NPCM7XX_GP_N_POL, gpio);
6798 break;
6799 case IRQ_TYPE_LEVEL_HIGH:
6800 - dev_dbg(d->chip->parent_device, "level.high\n");
6801 + dev_dbg(bank->gc.parent, "level.high\n");
6802 npcm_gpio_clr(&bank->gc, bank->base + NPCM7XX_GP_N_POL, gpio);
6803 break;
6804 default:
6805 - dev_dbg(d->chip->parent_device, "invalid irq type\n");
6806 + dev_dbg(bank->gc.parent, "invalid irq type\n");
6807 return -EINVAL;
6808 }
6809
6810 @@ -289,7 +288,7 @@ static void npcmgpio_irq_ack(struct irq_data *d)
6811 gpiochip_get_data(irq_data_get_irq_chip_data(d));
6812 unsigned int gpio = d->hwirq;
6813
6814 - dev_dbg(d->chip->parent_device, "irq_ack: %u.%u\n", gpio, d->irq);
6815 + dev_dbg(bank->gc.parent, "irq_ack: %u.%u\n", gpio, d->irq);
6816 iowrite32(BIT(gpio), bank->base + NPCM7XX_GP_N_EVST);
6817 }
6818
6819 @@ -301,7 +300,7 @@ static void npcmgpio_irq_mask(struct irq_data *d)
6820 unsigned int gpio = d->hwirq;
6821
6822 /* Clear events */
6823 - dev_dbg(d->chip->parent_device, "irq_mask: %u.%u\n", gpio, d->irq);
6824 + dev_dbg(bank->gc.parent, "irq_mask: %u.%u\n", gpio, d->irq);
6825 iowrite32(BIT(gpio), bank->base + NPCM7XX_GP_N_EVENC);
6826 }
6827
6828 @@ -313,7 +312,7 @@ static void npcmgpio_irq_unmask(struct irq_data *d)
6829 unsigned int gpio = d->hwirq;
6830
6831 /* Enable events */
6832 - dev_dbg(d->chip->parent_device, "irq_unmask: %u.%u\n", gpio, d->irq);
6833 + dev_dbg(bank->gc.parent, "irq_unmask: %u.%u\n", gpio, d->irq);
6834 iowrite32(BIT(gpio), bank->base + NPCM7XX_GP_N_EVENS);
6835 }
6836
6837 @@ -323,7 +322,7 @@ static unsigned int npcmgpio_irq_startup(struct irq_data *d)
6838 unsigned int gpio = d->hwirq;
6839
6840 /* active-high, input, clear interrupt, enable interrupt */
6841 - dev_dbg(d->chip->parent_device, "startup: %u.%u\n", gpio, d->irq);
6842 + dev_dbg(gc->parent, "startup: %u.%u\n", gpio, d->irq);
6843 npcmgpio_direction_input(gc, gpio);
6844 npcmgpio_irq_ack(d);
6845 npcmgpio_irq_unmask(d);
6846 @@ -905,7 +904,7 @@ static struct npcm7xx_func npcm7xx_funcs[] = {
6847 #define DRIVE_STRENGTH_HI_SHIFT 12
6848 #define DRIVE_STRENGTH_MASK 0x0000FF00
6849
6850 -#define DS(lo, hi) (((lo) << DRIVE_STRENGTH_LO_SHIFT) | \
6851 +#define DSTR(lo, hi) (((lo) << DRIVE_STRENGTH_LO_SHIFT) | \
6852 ((hi) << DRIVE_STRENGTH_HI_SHIFT))
6853 #define DSLO(x) (((x) >> DRIVE_STRENGTH_LO_SHIFT) & 0xF)
6854 #define DSHI(x) (((x) >> DRIVE_STRENGTH_HI_SHIFT) & 0xF)
6855 @@ -925,31 +924,31 @@ struct npcm7xx_pincfg {
6856 static const struct npcm7xx_pincfg pincfg[] = {
6857 /* PIN FUNCTION 1 FUNCTION 2 FUNCTION 3 FLAGS */
6858 NPCM7XX_PINCFG(0, iox1, MFSEL1, 30, none, NONE, 0, none, NONE, 0, 0),
6859 - NPCM7XX_PINCFG(1, iox1, MFSEL1, 30, none, NONE, 0, none, NONE, 0, DS(8, 12)),
6860 - NPCM7XX_PINCFG(2, iox1, MFSEL1, 30, none, NONE, 0, none, NONE, 0, DS(8, 12)),
6861 + NPCM7XX_PINCFG(1, iox1, MFSEL1, 30, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
6862 + NPCM7XX_PINCFG(2, iox1, MFSEL1, 30, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
6863 NPCM7XX_PINCFG(3, iox1, MFSEL1, 30, none, NONE, 0, none, NONE, 0, 0),
6864 NPCM7XX_PINCFG(4, iox2, MFSEL3, 14, smb1d, I2CSEGSEL, 7, none, NONE, 0, SLEW),
6865 NPCM7XX_PINCFG(5, iox2, MFSEL3, 14, smb1d, I2CSEGSEL, 7, none, NONE, 0, SLEW),
6866 NPCM7XX_PINCFG(6, iox2, MFSEL3, 14, smb2d, I2CSEGSEL, 10, none, NONE, 0, SLEW),
6867 NPCM7XX_PINCFG(7, iox2, MFSEL3, 14, smb2d, I2CSEGSEL, 10, none, NONE, 0, SLEW),
6868 - NPCM7XX_PINCFG(8, lkgpo1, FLOCKR1, 4, none, NONE, 0, none, NONE, 0, DS(8, 12)),
6869 - NPCM7XX_PINCFG(9, lkgpo2, FLOCKR1, 8, none, NONE, 0, none, NONE, 0, DS(8, 12)),
6870 - NPCM7XX_PINCFG(10, ioxh, MFSEL3, 18, none, NONE, 0, none, NONE, 0, DS(8, 12)),
6871 - NPCM7XX_PINCFG(11, ioxh, MFSEL3, 18, none, NONE, 0, none, NONE, 0, DS(8, 12)),
6872 + NPCM7XX_PINCFG(8, lkgpo1, FLOCKR1, 4, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
6873 + NPCM7XX_PINCFG(9, lkgpo2, FLOCKR1, 8, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
6874 + NPCM7XX_PINCFG(10, ioxh, MFSEL3, 18, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
6875 + NPCM7XX_PINCFG(11, ioxh, MFSEL3, 18, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
6876 NPCM7XX_PINCFG(12, gspi, MFSEL1, 24, smb5b, I2CSEGSEL, 19, none, NONE, 0, SLEW),
6877 NPCM7XX_PINCFG(13, gspi, MFSEL1, 24, smb5b, I2CSEGSEL, 19, none, NONE, 0, SLEW),
6878 NPCM7XX_PINCFG(14, gspi, MFSEL1, 24, smb5c, I2CSEGSEL, 20, none, NONE, 0, SLEW),
6879 NPCM7XX_PINCFG(15, gspi, MFSEL1, 24, smb5c, I2CSEGSEL, 20, none, NONE, 0, SLEW),
6880 - NPCM7XX_PINCFG(16, lkgpo0, FLOCKR1, 0, none, NONE, 0, none, NONE, 0, DS(8, 12)),
6881 - NPCM7XX_PINCFG(17, pspi2, MFSEL3, 13, smb4den, I2CSEGSEL, 23, none, NONE, 0, DS(8, 12)),
6882 - NPCM7XX_PINCFG(18, pspi2, MFSEL3, 13, smb4b, I2CSEGSEL, 14, none, NONE, 0, DS(8, 12)),
6883 - NPCM7XX_PINCFG(19, pspi2, MFSEL3, 13, smb4b, I2CSEGSEL, 14, none, NONE, 0, DS(8, 12)),
6884 + NPCM7XX_PINCFG(16, lkgpo0, FLOCKR1, 0, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
6885 + NPCM7XX_PINCFG(17, pspi2, MFSEL3, 13, smb4den, I2CSEGSEL, 23, none, NONE, 0, DSTR(8, 12)),
6886 + NPCM7XX_PINCFG(18, pspi2, MFSEL3, 13, smb4b, I2CSEGSEL, 14, none, NONE, 0, DSTR(8, 12)),
6887 + NPCM7XX_PINCFG(19, pspi2, MFSEL3, 13, smb4b, I2CSEGSEL, 14, none, NONE, 0, DSTR(8, 12)),
6888 NPCM7XX_PINCFG(20, smb4c, I2CSEGSEL, 15, smb15, MFSEL3, 8, none, NONE, 0, 0),
6889 NPCM7XX_PINCFG(21, smb4c, I2CSEGSEL, 15, smb15, MFSEL3, 8, none, NONE, 0, 0),
6890 NPCM7XX_PINCFG(22, smb4d, I2CSEGSEL, 16, smb14, MFSEL3, 7, none, NONE, 0, 0),
6891 NPCM7XX_PINCFG(23, smb4d, I2CSEGSEL, 16, smb14, MFSEL3, 7, none, NONE, 0, 0),
6892 - NPCM7XX_PINCFG(24, ioxh, MFSEL3, 18, none, NONE, 0, none, NONE, 0, DS(8, 12)),
6893 - NPCM7XX_PINCFG(25, ioxh, MFSEL3, 18, none, NONE, 0, none, NONE, 0, DS(8, 12)),
6894 + NPCM7XX_PINCFG(24, ioxh, MFSEL3, 18, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
6895 + NPCM7XX_PINCFG(25, ioxh, MFSEL3, 18, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
6896 NPCM7XX_PINCFG(26, smb5, MFSEL1, 2, none, NONE, 0, none, NONE, 0, 0),
6897 NPCM7XX_PINCFG(27, smb5, MFSEL1, 2, none, NONE, 0, none, NONE, 0, 0),
6898 NPCM7XX_PINCFG(28, smb4, MFSEL1, 1, none, NONE, 0, none, NONE, 0, 0),
6899 @@ -965,12 +964,12 @@ static const struct npcm7xx_pincfg pincfg[] = {
6900 NPCM7XX_PINCFG(39, smb3b, I2CSEGSEL, 11, none, NONE, 0, none, NONE, 0, SLEW),
6901 NPCM7XX_PINCFG(40, smb3b, I2CSEGSEL, 11, none, NONE, 0, none, NONE, 0, SLEW),
6902 NPCM7XX_PINCFG(41, bmcuart0a, MFSEL1, 9, none, NONE, 0, none, NONE, 0, 0),
6903 - NPCM7XX_PINCFG(42, bmcuart0a, MFSEL1, 9, none, NONE, 0, none, NONE, 0, DS(2, 4) | GPO),
6904 + NPCM7XX_PINCFG(42, bmcuart0a, MFSEL1, 9, none, NONE, 0, none, NONE, 0, DSTR(2, 4) | GPO),
6905 NPCM7XX_PINCFG(43, uart1, MFSEL1, 10, jtag2, MFSEL4, 0, bmcuart1, MFSEL3, 24, 0),
6906 NPCM7XX_PINCFG(44, uart1, MFSEL1, 10, jtag2, MFSEL4, 0, bmcuart1, MFSEL3, 24, 0),
6907 NPCM7XX_PINCFG(45, uart1, MFSEL1, 10, jtag2, MFSEL4, 0, none, NONE, 0, 0),
6908 - NPCM7XX_PINCFG(46, uart1, MFSEL1, 10, jtag2, MFSEL4, 0, none, NONE, 0, DS(2, 8)),
6909 - NPCM7XX_PINCFG(47, uart1, MFSEL1, 10, jtag2, MFSEL4, 0, none, NONE, 0, DS(2, 8)),
6910 + NPCM7XX_PINCFG(46, uart1, MFSEL1, 10, jtag2, MFSEL4, 0, none, NONE, 0, DSTR(2, 8)),
6911 + NPCM7XX_PINCFG(47, uart1, MFSEL1, 10, jtag2, MFSEL4, 0, none, NONE, 0, DSTR(2, 8)),
6912 NPCM7XX_PINCFG(48, uart2, MFSEL1, 11, bmcuart0b, MFSEL4, 1, none, NONE, 0, GPO),
6913 NPCM7XX_PINCFG(49, uart2, MFSEL1, 11, bmcuart0b, MFSEL4, 1, none, NONE, 0, 0),
6914 NPCM7XX_PINCFG(50, uart2, MFSEL1, 11, none, NONE, 0, none, NONE, 0, 0),
6915 @@ -980,8 +979,8 @@ static const struct npcm7xx_pincfg pincfg[] = {
6916 NPCM7XX_PINCFG(54, uart2, MFSEL1, 11, none, NONE, 0, none, NONE, 0, 0),
6917 NPCM7XX_PINCFG(55, uart2, MFSEL1, 11, none, NONE, 0, none, NONE, 0, 0),
6918 NPCM7XX_PINCFG(56, r1err, MFSEL1, 12, none, NONE, 0, none, NONE, 0, 0),
6919 - NPCM7XX_PINCFG(57, r1md, MFSEL1, 13, none, NONE, 0, none, NONE, 0, DS(2, 4)),
6920 - NPCM7XX_PINCFG(58, r1md, MFSEL1, 13, none, NONE, 0, none, NONE, 0, DS(2, 4)),
6921 + NPCM7XX_PINCFG(57, r1md, MFSEL1, 13, none, NONE, 0, none, NONE, 0, DSTR(2, 4)),
6922 + NPCM7XX_PINCFG(58, r1md, MFSEL1, 13, none, NONE, 0, none, NONE, 0, DSTR(2, 4)),
6923 NPCM7XX_PINCFG(59, smb3d, I2CSEGSEL, 13, none, NONE, 0, none, NONE, 0, 0),
6924 NPCM7XX_PINCFG(60, smb3d, I2CSEGSEL, 13, none, NONE, 0, none, NONE, 0, 0),
6925 NPCM7XX_PINCFG(61, uart1, MFSEL1, 10, none, NONE, 0, none, NONE, 0, GPO),
6926 @@ -1004,19 +1003,19 @@ static const struct npcm7xx_pincfg pincfg[] = {
6927 NPCM7XX_PINCFG(77, fanin13, MFSEL2, 13, none, NONE, 0, none, NONE, 0, 0),
6928 NPCM7XX_PINCFG(78, fanin14, MFSEL2, 14, none, NONE, 0, none, NONE, 0, 0),
6929 NPCM7XX_PINCFG(79, fanin15, MFSEL2, 15, none, NONE, 0, none, NONE, 0, 0),
6930 - NPCM7XX_PINCFG(80, pwm0, MFSEL2, 16, none, NONE, 0, none, NONE, 0, DS(4, 8)),
6931 - NPCM7XX_PINCFG(81, pwm1, MFSEL2, 17, none, NONE, 0, none, NONE, 0, DS(4, 8)),
6932 - NPCM7XX_PINCFG(82, pwm2, MFSEL2, 18, none, NONE, 0, none, NONE, 0, DS(4, 8)),
6933 - NPCM7XX_PINCFG(83, pwm3, MFSEL2, 19, none, NONE, 0, none, NONE, 0, DS(4, 8)),
6934 - NPCM7XX_PINCFG(84, r2, MFSEL1, 14, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6935 - NPCM7XX_PINCFG(85, r2, MFSEL1, 14, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6936 - NPCM7XX_PINCFG(86, r2, MFSEL1, 14, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6937 + NPCM7XX_PINCFG(80, pwm0, MFSEL2, 16, none, NONE, 0, none, NONE, 0, DSTR(4, 8)),
6938 + NPCM7XX_PINCFG(81, pwm1, MFSEL2, 17, none, NONE, 0, none, NONE, 0, DSTR(4, 8)),
6939 + NPCM7XX_PINCFG(82, pwm2, MFSEL2, 18, none, NONE, 0, none, NONE, 0, DSTR(4, 8)),
6940 + NPCM7XX_PINCFG(83, pwm3, MFSEL2, 19, none, NONE, 0, none, NONE, 0, DSTR(4, 8)),
6941 + NPCM7XX_PINCFG(84, r2, MFSEL1, 14, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6942 + NPCM7XX_PINCFG(85, r2, MFSEL1, 14, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6943 + NPCM7XX_PINCFG(86, r2, MFSEL1, 14, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6944 NPCM7XX_PINCFG(87, r2, MFSEL1, 14, none, NONE, 0, none, NONE, 0, 0),
6945 NPCM7XX_PINCFG(88, r2, MFSEL1, 14, none, NONE, 0, none, NONE, 0, 0),
6946 NPCM7XX_PINCFG(89, r2, MFSEL1, 14, none, NONE, 0, none, NONE, 0, 0),
6947 NPCM7XX_PINCFG(90, r2err, MFSEL1, 15, none, NONE, 0, none, NONE, 0, 0),
6948 - NPCM7XX_PINCFG(91, r2md, MFSEL1, 16, none, NONE, 0, none, NONE, 0, DS(2, 4)),
6949 - NPCM7XX_PINCFG(92, r2md, MFSEL1, 16, none, NONE, 0, none, NONE, 0, DS(2, 4)),
6950 + NPCM7XX_PINCFG(91, r2md, MFSEL1, 16, none, NONE, 0, none, NONE, 0, DSTR(2, 4)),
6951 + NPCM7XX_PINCFG(92, r2md, MFSEL1, 16, none, NONE, 0, none, NONE, 0, DSTR(2, 4)),
6952 NPCM7XX_PINCFG(93, ga20kbc, MFSEL1, 17, smb5d, I2CSEGSEL, 21, none, NONE, 0, 0),
6953 NPCM7XX_PINCFG(94, ga20kbc, MFSEL1, 17, smb5d, I2CSEGSEL, 21, none, NONE, 0, 0),
6954 NPCM7XX_PINCFG(95, lpc, NONE, 0, espi, MFSEL4, 8, gpio, MFSEL1, 26, 0),
6955 @@ -1062,34 +1061,34 @@ static const struct npcm7xx_pincfg pincfg[] = {
6956 NPCM7XX_PINCFG(133, smb10, MFSEL4, 13, none, NONE, 0, none, NONE, 0, 0),
6957 NPCM7XX_PINCFG(134, smb11, MFSEL4, 14, none, NONE, 0, none, NONE, 0, 0),
6958 NPCM7XX_PINCFG(135, smb11, MFSEL4, 14, none, NONE, 0, none, NONE, 0, 0),
6959 - NPCM7XX_PINCFG(136, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6960 - NPCM7XX_PINCFG(137, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6961 - NPCM7XX_PINCFG(138, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6962 - NPCM7XX_PINCFG(139, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6963 - NPCM7XX_PINCFG(140, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6964 + NPCM7XX_PINCFG(136, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6965 + NPCM7XX_PINCFG(137, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6966 + NPCM7XX_PINCFG(138, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6967 + NPCM7XX_PINCFG(139, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6968 + NPCM7XX_PINCFG(140, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6969 NPCM7XX_PINCFG(141, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, 0),
6970 - NPCM7XX_PINCFG(142, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6971 + NPCM7XX_PINCFG(142, sd1, MFSEL3, 12, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6972 NPCM7XX_PINCFG(143, sd1, MFSEL3, 12, sd1pwr, MFSEL4, 5, none, NONE, 0, 0),
6973 - NPCM7XX_PINCFG(144, pwm4, MFSEL2, 20, none, NONE, 0, none, NONE, 0, DS(4, 8)),
6974 - NPCM7XX_PINCFG(145, pwm5, MFSEL2, 21, none, NONE, 0, none, NONE, 0, DS(4, 8)),
6975 - NPCM7XX_PINCFG(146, pwm6, MFSEL2, 22, none, NONE, 0, none, NONE, 0, DS(4, 8)),
6976 - NPCM7XX_PINCFG(147, pwm7, MFSEL2, 23, none, NONE, 0, none, NONE, 0, DS(4, 8)),
6977 - NPCM7XX_PINCFG(148, mmc8, MFSEL3, 11, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6978 - NPCM7XX_PINCFG(149, mmc8, MFSEL3, 11, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6979 - NPCM7XX_PINCFG(150, mmc8, MFSEL3, 11, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6980 - NPCM7XX_PINCFG(151, mmc8, MFSEL3, 11, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6981 - NPCM7XX_PINCFG(152, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6982 + NPCM7XX_PINCFG(144, pwm4, MFSEL2, 20, none, NONE, 0, none, NONE, 0, DSTR(4, 8)),
6983 + NPCM7XX_PINCFG(145, pwm5, MFSEL2, 21, none, NONE, 0, none, NONE, 0, DSTR(4, 8)),
6984 + NPCM7XX_PINCFG(146, pwm6, MFSEL2, 22, none, NONE, 0, none, NONE, 0, DSTR(4, 8)),
6985 + NPCM7XX_PINCFG(147, pwm7, MFSEL2, 23, none, NONE, 0, none, NONE, 0, DSTR(4, 8)),
6986 + NPCM7XX_PINCFG(148, mmc8, MFSEL3, 11, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6987 + NPCM7XX_PINCFG(149, mmc8, MFSEL3, 11, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6988 + NPCM7XX_PINCFG(150, mmc8, MFSEL3, 11, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6989 + NPCM7XX_PINCFG(151, mmc8, MFSEL3, 11, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6990 + NPCM7XX_PINCFG(152, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6991 NPCM7XX_PINCFG(153, mmcwp, FLOCKR1, 24, none, NONE, 0, none, NONE, 0, 0), /* Z1/A1 */
6992 - NPCM7XX_PINCFG(154, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6993 + NPCM7XX_PINCFG(154, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
6994 NPCM7XX_PINCFG(155, mmccd, MFSEL3, 25, mmcrst, MFSEL4, 6, none, NONE, 0, 0), /* Z1/A1 */
6995 - NPCM7XX_PINCFG(156, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6996 - NPCM7XX_PINCFG(157, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6997 - NPCM7XX_PINCFG(158, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6998 - NPCM7XX_PINCFG(159, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
6999 -
7000 - NPCM7XX_PINCFG(160, clkout, MFSEL1, 21, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
7001 - NPCM7XX_PINCFG(161, lpc, NONE, 0, espi, MFSEL4, 8, gpio, MFSEL1, 26, DS(8, 12)),
7002 - NPCM7XX_PINCFG(162, serirq, NONE, 0, gpio, MFSEL1, 31, none, NONE, 0, DS(8, 12)),
7003 + NPCM7XX_PINCFG(156, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7004 + NPCM7XX_PINCFG(157, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7005 + NPCM7XX_PINCFG(158, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7006 + NPCM7XX_PINCFG(159, mmc, MFSEL3, 10, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7007 +
7008 + NPCM7XX_PINCFG(160, clkout, MFSEL1, 21, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7009 + NPCM7XX_PINCFG(161, lpc, NONE, 0, espi, MFSEL4, 8, gpio, MFSEL1, 26, DSTR(8, 12)),
7010 + NPCM7XX_PINCFG(162, serirq, NONE, 0, gpio, MFSEL1, 31, none, NONE, 0, DSTR(8, 12)),
7011 NPCM7XX_PINCFG(163, lpc, NONE, 0, espi, MFSEL4, 8, gpio, MFSEL1, 26, 0),
7012 NPCM7XX_PINCFG(164, lpc, NONE, 0, espi, MFSEL4, 8, gpio, MFSEL1, 26, SLEWLPC),
7013 NPCM7XX_PINCFG(165, lpc, NONE, 0, espi, MFSEL4, 8, gpio, MFSEL1, 26, SLEWLPC),
7014 @@ -1102,25 +1101,25 @@ static const struct npcm7xx_pincfg pincfg[] = {
7015 NPCM7XX_PINCFG(172, smb6, MFSEL3, 1, none, NONE, 0, none, NONE, 0, 0),
7016 NPCM7XX_PINCFG(173, smb7, MFSEL3, 2, none, NONE, 0, none, NONE, 0, 0),
7017 NPCM7XX_PINCFG(174, smb7, MFSEL3, 2, none, NONE, 0, none, NONE, 0, 0),
7018 - NPCM7XX_PINCFG(175, pspi1, MFSEL3, 4, faninx, MFSEL3, 3, none, NONE, 0, DS(8, 12)),
7019 - NPCM7XX_PINCFG(176, pspi1, MFSEL3, 4, faninx, MFSEL3, 3, none, NONE, 0, DS(8, 12)),
7020 - NPCM7XX_PINCFG(177, pspi1, MFSEL3, 4, faninx, MFSEL3, 3, none, NONE, 0, DS(8, 12)),
7021 - NPCM7XX_PINCFG(178, r1, MFSEL3, 9, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
7022 - NPCM7XX_PINCFG(179, r1, MFSEL3, 9, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
7023 - NPCM7XX_PINCFG(180, r1, MFSEL3, 9, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
7024 + NPCM7XX_PINCFG(175, pspi1, MFSEL3, 4, faninx, MFSEL3, 3, none, NONE, 0, DSTR(8, 12)),
7025 + NPCM7XX_PINCFG(176, pspi1, MFSEL3, 4, faninx, MFSEL3, 3, none, NONE, 0, DSTR(8, 12)),
7026 + NPCM7XX_PINCFG(177, pspi1, MFSEL3, 4, faninx, MFSEL3, 3, none, NONE, 0, DSTR(8, 12)),
7027 + NPCM7XX_PINCFG(178, r1, MFSEL3, 9, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7028 + NPCM7XX_PINCFG(179, r1, MFSEL3, 9, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7029 + NPCM7XX_PINCFG(180, r1, MFSEL3, 9, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7030 NPCM7XX_PINCFG(181, r1, MFSEL3, 9, none, NONE, 0, none, NONE, 0, 0),
7031 NPCM7XX_PINCFG(182, r1, MFSEL3, 9, none, NONE, 0, none, NONE, 0, 0),
7032 - NPCM7XX_PINCFG(183, spi3, MFSEL4, 16, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
7033 - NPCM7XX_PINCFG(184, spi3, MFSEL4, 16, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW | GPO),
7034 - NPCM7XX_PINCFG(185, spi3, MFSEL4, 16, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW | GPO),
7035 - NPCM7XX_PINCFG(186, spi3, MFSEL4, 16, none, NONE, 0, none, NONE, 0, DS(8, 12)),
7036 - NPCM7XX_PINCFG(187, spi3cs1, MFSEL4, 17, none, NONE, 0, none, NONE, 0, DS(8, 12)),
7037 - NPCM7XX_PINCFG(188, spi3quad, MFSEL4, 20, spi3cs2, MFSEL4, 18, none, NONE, 0, DS(8, 12) | SLEW),
7038 - NPCM7XX_PINCFG(189, spi3quad, MFSEL4, 20, spi3cs3, MFSEL4, 19, none, NONE, 0, DS(8, 12) | SLEW),
7039 - NPCM7XX_PINCFG(190, gpio, FLOCKR1, 20, nprd_smi, NONE, 0, none, NONE, 0, DS(2, 4)),
7040 - NPCM7XX_PINCFG(191, none, NONE, 0, none, NONE, 0, none, NONE, 0, DS(8, 12)), /* XX */
7041 -
7042 - NPCM7XX_PINCFG(192, none, NONE, 0, none, NONE, 0, none, NONE, 0, DS(8, 12)), /* XX */
7043 + NPCM7XX_PINCFG(183, spi3, MFSEL4, 16, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7044 + NPCM7XX_PINCFG(184, spi3, MFSEL4, 16, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW | GPO),
7045 + NPCM7XX_PINCFG(185, spi3, MFSEL4, 16, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW | GPO),
7046 + NPCM7XX_PINCFG(186, spi3, MFSEL4, 16, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
7047 + NPCM7XX_PINCFG(187, spi3cs1, MFSEL4, 17, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
7048 + NPCM7XX_PINCFG(188, spi3quad, MFSEL4, 20, spi3cs2, MFSEL4, 18, none, NONE, 0, DSTR(8, 12) | SLEW),
7049 + NPCM7XX_PINCFG(189, spi3quad, MFSEL4, 20, spi3cs3, MFSEL4, 19, none, NONE, 0, DSTR(8, 12) | SLEW),
7050 + NPCM7XX_PINCFG(190, gpio, FLOCKR1, 20, nprd_smi, NONE, 0, none, NONE, 0, DSTR(2, 4)),
7051 + NPCM7XX_PINCFG(191, none, NONE, 0, none, NONE, 0, none, NONE, 0, DSTR(8, 12)), /* XX */
7052 +
7053 + NPCM7XX_PINCFG(192, none, NONE, 0, none, NONE, 0, none, NONE, 0, DSTR(8, 12)), /* XX */
7054 NPCM7XX_PINCFG(193, r1, MFSEL3, 9, none, NONE, 0, none, NONE, 0, 0),
7055 NPCM7XX_PINCFG(194, smb0b, I2CSEGSEL, 0, none, NONE, 0, none, NONE, 0, 0),
7056 NPCM7XX_PINCFG(195, smb0b, I2CSEGSEL, 0, none, NONE, 0, none, NONE, 0, 0),
7057 @@ -1131,11 +1130,11 @@ static const struct npcm7xx_pincfg pincfg[] = {
7058 NPCM7XX_PINCFG(200, r2, MFSEL1, 14, none, NONE, 0, none, NONE, 0, 0),
7059 NPCM7XX_PINCFG(201, r1, MFSEL3, 9, none, NONE, 0, none, NONE, 0, 0),
7060 NPCM7XX_PINCFG(202, smb0c, I2CSEGSEL, 1, none, NONE, 0, none, NONE, 0, 0),
7061 - NPCM7XX_PINCFG(203, faninx, MFSEL3, 3, none, NONE, 0, none, NONE, 0, DS(8, 12)),
7062 + NPCM7XX_PINCFG(203, faninx, MFSEL3, 3, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
7063 NPCM7XX_PINCFG(204, ddc, NONE, 0, gpio, MFSEL3, 22, none, NONE, 0, SLEW),
7064 NPCM7XX_PINCFG(205, ddc, NONE, 0, gpio, MFSEL3, 22, none, NONE, 0, SLEW),
7065 - NPCM7XX_PINCFG(206, ddc, NONE, 0, gpio, MFSEL3, 22, none, NONE, 0, DS(4, 8)),
7066 - NPCM7XX_PINCFG(207, ddc, NONE, 0, gpio, MFSEL3, 22, none, NONE, 0, DS(4, 8)),
7067 + NPCM7XX_PINCFG(206, ddc, NONE, 0, gpio, MFSEL3, 22, none, NONE, 0, DSTR(4, 8)),
7068 + NPCM7XX_PINCFG(207, ddc, NONE, 0, gpio, MFSEL3, 22, none, NONE, 0, DSTR(4, 8)),
7069 NPCM7XX_PINCFG(208, rg2, MFSEL4, 24, ddr, MFSEL3, 26, none, NONE, 0, 0),
7070 NPCM7XX_PINCFG(209, rg2, MFSEL4, 24, ddr, MFSEL3, 26, none, NONE, 0, 0),
7071 NPCM7XX_PINCFG(210, rg2, MFSEL4, 24, ddr, MFSEL3, 26, none, NONE, 0, 0),
7072 @@ -1147,20 +1146,20 @@ static const struct npcm7xx_pincfg pincfg[] = {
7073 NPCM7XX_PINCFG(216, rg2mdio, MFSEL4, 23, ddr, MFSEL3, 26, none, NONE, 0, 0),
7074 NPCM7XX_PINCFG(217, rg2mdio, MFSEL4, 23, ddr, MFSEL3, 26, none, NONE, 0, 0),
7075 NPCM7XX_PINCFG(218, wdog1, MFSEL3, 19, none, NONE, 0, none, NONE, 0, 0),
7076 - NPCM7XX_PINCFG(219, wdog2, MFSEL3, 20, none, NONE, 0, none, NONE, 0, DS(4, 8)),
7077 + NPCM7XX_PINCFG(219, wdog2, MFSEL3, 20, none, NONE, 0, none, NONE, 0, DSTR(4, 8)),
7078 NPCM7XX_PINCFG(220, smb12, MFSEL3, 5, none, NONE, 0, none, NONE, 0, 0),
7079 NPCM7XX_PINCFG(221, smb12, MFSEL3, 5, none, NONE, 0, none, NONE, 0, 0),
7080 NPCM7XX_PINCFG(222, smb13, MFSEL3, 6, none, NONE, 0, none, NONE, 0, 0),
7081 NPCM7XX_PINCFG(223, smb13, MFSEL3, 6, none, NONE, 0, none, NONE, 0, 0),
7082
7083 NPCM7XX_PINCFG(224, spix, MFSEL4, 27, none, NONE, 0, none, NONE, 0, SLEW),
7084 - NPCM7XX_PINCFG(225, spix, MFSEL4, 27, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW | GPO),
7085 - NPCM7XX_PINCFG(226, spix, MFSEL4, 27, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW | GPO),
7086 - NPCM7XX_PINCFG(227, spix, MFSEL4, 27, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
7087 - NPCM7XX_PINCFG(228, spixcs1, MFSEL4, 28, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
7088 - NPCM7XX_PINCFG(229, spix, MFSEL4, 27, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
7089 - NPCM7XX_PINCFG(230, spix, MFSEL4, 27, none, NONE, 0, none, NONE, 0, DS(8, 12) | SLEW),
7090 - NPCM7XX_PINCFG(231, clkreq, MFSEL4, 9, none, NONE, 0, none, NONE, 0, DS(8, 12)),
7091 + NPCM7XX_PINCFG(225, spix, MFSEL4, 27, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW | GPO),
7092 + NPCM7XX_PINCFG(226, spix, MFSEL4, 27, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW | GPO),
7093 + NPCM7XX_PINCFG(227, spix, MFSEL4, 27, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7094 + NPCM7XX_PINCFG(228, spixcs1, MFSEL4, 28, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7095 + NPCM7XX_PINCFG(229, spix, MFSEL4, 27, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7096 + NPCM7XX_PINCFG(230, spix, MFSEL4, 27, none, NONE, 0, none, NONE, 0, DSTR(8, 12) | SLEW),
7097 + NPCM7XX_PINCFG(231, clkreq, MFSEL4, 9, none, NONE, 0, none, NONE, 0, DSTR(8, 12)),
7098 NPCM7XX_PINCFG(253, none, NONE, 0, none, NONE, 0, none, NONE, 0, GPI), /* SDHC1 power */
7099 NPCM7XX_PINCFG(254, none, NONE, 0, none, NONE, 0, none, NONE, 0, GPI), /* SDHC2 power */
7100 NPCM7XX_PINCFG(255, none, NONE, 0, none, NONE, 0, none, NONE, 0, GPI), /* DACOSEL */
7101 @@ -1561,7 +1560,7 @@ static int npcm7xx_get_groups_count(struct pinctrl_dev *pctldev)
7102 {
7103 struct npcm7xx_pinctrl *npcm = pinctrl_dev_get_drvdata(pctldev);
7104
7105 - dev_dbg(npcm->dev, "group size: %d\n", ARRAY_SIZE(npcm7xx_groups));
7106 + dev_dbg(npcm->dev, "group size: %zu\n", ARRAY_SIZE(npcm7xx_groups));
7107 return ARRAY_SIZE(npcm7xx_groups);
7108 }
7109
7110 diff --git a/drivers/pinctrl/pinconf-generic.c b/drivers/pinctrl/pinconf-generic.c
7111 index 9eb86309c70bf..355bc4c748e26 100644
7112 --- a/drivers/pinctrl/pinconf-generic.c
7113 +++ b/drivers/pinctrl/pinconf-generic.c
7114 @@ -30,10 +30,10 @@ static const struct pin_config_item conf_items[] = {
7115 PCONFDUMP(PIN_CONFIG_BIAS_BUS_HOLD, "input bias bus hold", NULL, false),
7116 PCONFDUMP(PIN_CONFIG_BIAS_DISABLE, "input bias disabled", NULL, false),
7117 PCONFDUMP(PIN_CONFIG_BIAS_HIGH_IMPEDANCE, "input bias high impedance", NULL, false),
7118 - PCONFDUMP(PIN_CONFIG_BIAS_PULL_DOWN, "input bias pull down", NULL, false),
7119 + PCONFDUMP(PIN_CONFIG_BIAS_PULL_DOWN, "input bias pull down", "ohms", true),
7120 PCONFDUMP(PIN_CONFIG_BIAS_PULL_PIN_DEFAULT,
7121 - "input bias pull to pin specific state", NULL, false),
7122 - PCONFDUMP(PIN_CONFIG_BIAS_PULL_UP, "input bias pull up", NULL, false),
7123 + "input bias pull to pin specific state", "ohms", true),
7124 + PCONFDUMP(PIN_CONFIG_BIAS_PULL_UP, "input bias pull up", "ohms", true),
7125 PCONFDUMP(PIN_CONFIG_DRIVE_OPEN_DRAIN, "output drive open drain", NULL, false),
7126 PCONFDUMP(PIN_CONFIG_DRIVE_OPEN_SOURCE, "output drive open source", NULL, false),
7127 PCONFDUMP(PIN_CONFIG_DRIVE_PUSH_PULL, "output drive push pull", NULL, false),
7128 diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
7129 index 59fe3204e965d..4b972be3487f9 100644
7130 --- a/drivers/pinctrl/pinctrl-rockchip.c
7131 +++ b/drivers/pinctrl/pinctrl-rockchip.c
7132 @@ -3433,6 +3433,7 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev)
7133 node = of_parse_phandle(np, "rockchip,grf", 0);
7134 if (node) {
7135 info->regmap_base = syscon_node_to_regmap(node);
7136 + of_node_put(node);
7137 if (IS_ERR(info->regmap_base))
7138 return PTR_ERR(info->regmap_base);
7139 } else {
7140 @@ -3469,6 +3470,7 @@ static int rockchip_pinctrl_probe(struct platform_device *pdev)
7141 node = of_parse_phandle(np, "rockchip,pmu", 0);
7142 if (node) {
7143 info->regmap_pmu = syscon_node_to_regmap(node);
7144 + of_node_put(node);
7145 if (IS_ERR(info->regmap_pmu))
7146 return PTR_ERR(info->regmap_pmu);
7147 }
7148 diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.c b/drivers/pinctrl/samsung/pinctrl-samsung.c
7149 index 601fffeba39fe..131fa7958f754 100644
7150 --- a/drivers/pinctrl/samsung/pinctrl-samsung.c
7151 +++ b/drivers/pinctrl/samsung/pinctrl-samsung.c
7152 @@ -1002,6 +1002,16 @@ samsung_pinctrl_get_soc_data_for_of_alias(struct platform_device *pdev)
7153 return &(of_data->ctrl[id]);
7154 }
7155
7156 +static void samsung_banks_of_node_put(struct samsung_pinctrl_drv_data *d)
7157 +{
7158 + struct samsung_pin_bank *bank;
7159 + unsigned int i;
7160 +
7161 + bank = d->pin_banks;
7162 + for (i = 0; i < d->nr_banks; ++i, ++bank)
7163 + of_node_put(bank->of_node);
7164 +}
7165 +
7166 /* retrieve the soc specific data */
7167 static const struct samsung_pin_ctrl *
7168 samsung_pinctrl_get_soc_data(struct samsung_pinctrl_drv_data *d,
7169 @@ -1116,19 +1126,19 @@ static int samsung_pinctrl_probe(struct platform_device *pdev)
7170 if (ctrl->retention_data) {
7171 drvdata->retention_ctrl = ctrl->retention_data->init(drvdata,
7172 ctrl->retention_data);
7173 - if (IS_ERR(drvdata->retention_ctrl))
7174 - return PTR_ERR(drvdata->retention_ctrl);
7175 + if (IS_ERR(drvdata->retention_ctrl)) {
7176 + ret = PTR_ERR(drvdata->retention_ctrl);
7177 + goto err_put_banks;
7178 + }
7179 }
7180
7181 ret = samsung_pinctrl_register(pdev, drvdata);
7182 if (ret)
7183 - return ret;
7184 + goto err_put_banks;
7185
7186 ret = samsung_gpiolib_register(pdev, drvdata);
7187 - if (ret) {
7188 - samsung_pinctrl_unregister(pdev, drvdata);
7189 - return ret;
7190 - }
7191 + if (ret)
7192 + goto err_unregister;
7193
7194 if (ctrl->eint_gpio_init)
7195 ctrl->eint_gpio_init(drvdata);
7196 @@ -1138,6 +1148,12 @@ static int samsung_pinctrl_probe(struct platform_device *pdev)
7197 platform_set_drvdata(pdev, drvdata);
7198
7199 return 0;
7200 +
7201 +err_unregister:
7202 + samsung_pinctrl_unregister(pdev, drvdata);
7203 +err_put_banks:
7204 + samsung_banks_of_node_put(drvdata);
7205 + return ret;
7206 }
7207
7208 /**
7209 diff --git a/drivers/pinctrl/sh-pfc/pfc-r8a77470.c b/drivers/pinctrl/sh-pfc/pfc-r8a77470.c
7210 index b3b116da1bb0d..14005725a726b 100644
7211 --- a/drivers/pinctrl/sh-pfc/pfc-r8a77470.c
7212 +++ b/drivers/pinctrl/sh-pfc/pfc-r8a77470.c
7213 @@ -2121,7 +2121,7 @@ static const unsigned int vin0_clk_mux[] = {
7214 VI0_CLK_MARK,
7215 };
7216 /* - VIN1 ------------------------------------------------------------------- */
7217 -static const union vin_data vin1_data_pins = {
7218 +static const union vin_data12 vin1_data_pins = {
7219 .data12 = {
7220 RCAR_GP_PIN(3, 1), RCAR_GP_PIN(3, 2),
7221 RCAR_GP_PIN(3, 3), RCAR_GP_PIN(3, 4),
7222 @@ -2131,7 +2131,7 @@ static const union vin_data vin1_data_pins = {
7223 RCAR_GP_PIN(3, 15), RCAR_GP_PIN(3, 16),
7224 },
7225 };
7226 -static const union vin_data vin1_data_mux = {
7227 +static const union vin_data12 vin1_data_mux = {
7228 .data12 = {
7229 VI1_DATA0_MARK, VI1_DATA1_MARK,
7230 VI1_DATA2_MARK, VI1_DATA3_MARK,
7231 diff --git a/drivers/power/reset/gemini-poweroff.c b/drivers/power/reset/gemini-poweroff.c
7232 index 90e35c07240ae..b7f7a8225f22e 100644
7233 --- a/drivers/power/reset/gemini-poweroff.c
7234 +++ b/drivers/power/reset/gemini-poweroff.c
7235 @@ -107,8 +107,8 @@ static int gemini_poweroff_probe(struct platform_device *pdev)
7236 return PTR_ERR(gpw->base);
7237
7238 irq = platform_get_irq(pdev, 0);
7239 - if (!irq)
7240 - return -EINVAL;
7241 + if (irq < 0)
7242 + return irq;
7243
7244 gpw->dev = dev;
7245
7246 diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c
7247 index 69452fc085b99..4c229e6fb750a 100644
7248 --- a/drivers/power/supply/ab8500_fg.c
7249 +++ b/drivers/power/supply/ab8500_fg.c
7250 @@ -2541,8 +2541,10 @@ static int ab8500_fg_sysfs_init(struct ab8500_fg *di)
7251 ret = kobject_init_and_add(&di->fg_kobject,
7252 &ab8500_fg_ktype,
7253 NULL, "battery");
7254 - if (ret < 0)
7255 + if (ret < 0) {
7256 + kobject_put(&di->fg_kobject);
7257 dev_err(di->dev, "failed to create sysfs entry\n");
7258 + }
7259
7260 return ret;
7261 }
7262 diff --git a/drivers/power/supply/axp20x_battery.c b/drivers/power/supply/axp20x_battery.c
7263 index e84b6e4da14a8..9fda98b950bab 100644
7264 --- a/drivers/power/supply/axp20x_battery.c
7265 +++ b/drivers/power/supply/axp20x_battery.c
7266 @@ -185,7 +185,6 @@ static int axp20x_battery_get_prop(struct power_supply *psy,
7267 union power_supply_propval *val)
7268 {
7269 struct axp20x_batt_ps *axp20x_batt = power_supply_get_drvdata(psy);
7270 - struct iio_channel *chan;
7271 int ret = 0, reg, val1;
7272
7273 switch (psp) {
7274 @@ -265,12 +264,12 @@ static int axp20x_battery_get_prop(struct power_supply *psy,
7275 if (ret)
7276 return ret;
7277
7278 - if (reg & AXP20X_PWR_STATUS_BAT_CHARGING)
7279 - chan = axp20x_batt->batt_chrg_i;
7280 - else
7281 - chan = axp20x_batt->batt_dischrg_i;
7282 -
7283 - ret = iio_read_channel_processed(chan, &val->intval);
7284 + if (reg & AXP20X_PWR_STATUS_BAT_CHARGING) {
7285 + ret = iio_read_channel_processed(axp20x_batt->batt_chrg_i, &val->intval);
7286 + } else {
7287 + ret = iio_read_channel_processed(axp20x_batt->batt_dischrg_i, &val1);
7288 + val->intval = -val1;
7289 + }
7290 if (ret)
7291 return ret;
7292
7293 diff --git a/drivers/power/supply/axp288_charger.c b/drivers/power/supply/axp288_charger.c
7294 index 7d09e49f04d3b..2ee6bb7c08045 100644
7295 --- a/drivers/power/supply/axp288_charger.c
7296 +++ b/drivers/power/supply/axp288_charger.c
7297 @@ -41,11 +41,11 @@
7298 #define VBUS_ISPOUT_CUR_LIM_1500MA 0x1 /* 1500mA */
7299 #define VBUS_ISPOUT_CUR_LIM_2000MA 0x2 /* 2000mA */
7300 #define VBUS_ISPOUT_CUR_NO_LIM 0x3 /* 2500mA */
7301 -#define VBUS_ISPOUT_VHOLD_SET_MASK 0x31
7302 +#define VBUS_ISPOUT_VHOLD_SET_MASK 0x38
7303 #define VBUS_ISPOUT_VHOLD_SET_BIT_POS 0x3
7304 #define VBUS_ISPOUT_VHOLD_SET_OFFSET 4000 /* 4000mV */
7305 #define VBUS_ISPOUT_VHOLD_SET_LSB_RES 100 /* 100mV */
7306 -#define VBUS_ISPOUT_VHOLD_SET_4300MV 0x3 /* 4300mV */
7307 +#define VBUS_ISPOUT_VHOLD_SET_4400MV 0x4 /* 4400mV */
7308 #define VBUS_ISPOUT_VBUS_PATH_DIS BIT(7)
7309
7310 #define CHRG_CCCV_CC_MASK 0xf /* 4 bits */
7311 @@ -744,6 +744,16 @@ static int charger_init_hw_regs(struct axp288_chrg_info *info)
7312 ret = axp288_charger_vbus_path_select(info, true);
7313 if (ret < 0)
7314 return ret;
7315 + } else {
7316 + /* Set Vhold to the factory default / recommended 4.4V */
7317 + val = VBUS_ISPOUT_VHOLD_SET_4400MV << VBUS_ISPOUT_VHOLD_SET_BIT_POS;
7318 + ret = regmap_update_bits(info->regmap, AXP20X_VBUS_IPSOUT_MGMT,
7319 + VBUS_ISPOUT_VHOLD_SET_MASK, val);
7320 + if (ret < 0) {
7321 + dev_err(&info->pdev->dev, "register(%x) write error(%d)\n",
7322 + AXP20X_VBUS_IPSOUT_MGMT, ret);
7323 + return ret;
7324 + }
7325 }
7326
7327 /* Read current charge voltage and current limit */
7328 diff --git a/drivers/power/supply/bq24190_charger.c b/drivers/power/supply/bq24190_charger.c
7329 index 1ae5d6d42c9e3..64d87dccea82c 100644
7330 --- a/drivers/power/supply/bq24190_charger.c
7331 +++ b/drivers/power/supply/bq24190_charger.c
7332 @@ -41,6 +41,7 @@
7333 #define BQ24190_REG_POC_CHG_CONFIG_DISABLE 0x0
7334 #define BQ24190_REG_POC_CHG_CONFIG_CHARGE 0x1
7335 #define BQ24190_REG_POC_CHG_CONFIG_OTG 0x2
7336 +#define BQ24190_REG_POC_CHG_CONFIG_OTG_ALT 0x3
7337 #define BQ24190_REG_POC_SYS_MIN_MASK (BIT(3) | BIT(2) | BIT(1))
7338 #define BQ24190_REG_POC_SYS_MIN_SHIFT 1
7339 #define BQ24190_REG_POC_SYS_MIN_MIN 3000
7340 @@ -550,7 +551,11 @@ static int bq24190_vbus_is_enabled(struct regulator_dev *dev)
7341 pm_runtime_mark_last_busy(bdi->dev);
7342 pm_runtime_put_autosuspend(bdi->dev);
7343
7344 - return ret ? ret : val == BQ24190_REG_POC_CHG_CONFIG_OTG;
7345 + if (ret)
7346 + return ret;
7347 +
7348 + return (val == BQ24190_REG_POC_CHG_CONFIG_OTG ||
7349 + val == BQ24190_REG_POC_CHG_CONFIG_OTG_ALT);
7350 }
7351
7352 static const struct regulator_ops bq24190_vbus_ops = {
7353 diff --git a/drivers/power/supply/wm8350_power.c b/drivers/power/supply/wm8350_power.c
7354 index 26923af574f43..4fe9ea9721b39 100644
7355 --- a/drivers/power/supply/wm8350_power.c
7356 +++ b/drivers/power/supply/wm8350_power.c
7357 @@ -408,44 +408,112 @@ static const struct power_supply_desc wm8350_usb_desc = {
7358 * Initialisation
7359 *********************************************************************/
7360
7361 -static void wm8350_init_charger(struct wm8350 *wm8350)
7362 +static int wm8350_init_charger(struct wm8350 *wm8350)
7363 {
7364 + int ret;
7365 +
7366 /* register our interest in charger events */
7367 - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT,
7368 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT,
7369 wm8350_charger_handler, 0, "Battery hot", wm8350);
7370 - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD,
7371 + if (ret)
7372 + goto err;
7373 +
7374 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD,
7375 wm8350_charger_handler, 0, "Battery cold", wm8350);
7376 - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL,
7377 + if (ret)
7378 + goto free_chg_bat_hot;
7379 +
7380 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL,
7381 wm8350_charger_handler, 0, "Battery fail", wm8350);
7382 - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_TO,
7383 + if (ret)
7384 + goto free_chg_bat_cold;
7385 +
7386 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_TO,
7387 wm8350_charger_handler, 0,
7388 "Charger timeout", wm8350);
7389 - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_END,
7390 + if (ret)
7391 + goto free_chg_bat_fail;
7392 +
7393 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_END,
7394 wm8350_charger_handler, 0,
7395 "Charge end", wm8350);
7396 - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_START,
7397 + if (ret)
7398 + goto free_chg_to;
7399 +
7400 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_START,
7401 wm8350_charger_handler, 0,
7402 "Charge start", wm8350);
7403 - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY,
7404 + if (ret)
7405 + goto free_chg_end;
7406 +
7407 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY,
7408 wm8350_charger_handler, 0,
7409 "Fast charge ready", wm8350);
7410 - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9,
7411 + if (ret)
7412 + goto free_chg_start;
7413 +
7414 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9,
7415 wm8350_charger_handler, 0,
7416 "Battery <3.9V", wm8350);
7417 - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1,
7418 + if (ret)
7419 + goto free_chg_fast_rdy;
7420 +
7421 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1,
7422 wm8350_charger_handler, 0,
7423 "Battery <3.1V", wm8350);
7424 - wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85,
7425 + if (ret)
7426 + goto free_chg_vbatt_lt_3p9;
7427 +
7428 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85,
7429 wm8350_charger_handler, 0,
7430 "Battery <2.85V", wm8350);
7431 + if (ret)
7432 + goto free_chg_vbatt_lt_3p1;
7433
7434 /* and supply change events */
7435 - wm8350_register_irq(wm8350, WM8350_IRQ_EXT_USB_FB,
7436 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_USB_FB,
7437 wm8350_charger_handler, 0, "USB", wm8350);
7438 - wm8350_register_irq(wm8350, WM8350_IRQ_EXT_WALL_FB,
7439 + if (ret)
7440 + goto free_chg_vbatt_lt_2p85;
7441 +
7442 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_WALL_FB,
7443 wm8350_charger_handler, 0, "Wall", wm8350);
7444 - wm8350_register_irq(wm8350, WM8350_IRQ_EXT_BAT_FB,
7445 + if (ret)
7446 + goto free_ext_usb_fb;
7447 +
7448 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_BAT_FB,
7449 wm8350_charger_handler, 0, "Battery", wm8350);
7450 + if (ret)
7451 + goto free_ext_wall_fb;
7452 +
7453 + return 0;
7454 +
7455 +free_ext_wall_fb:
7456 + wm8350_free_irq(wm8350, WM8350_IRQ_EXT_WALL_FB, wm8350);
7457 +free_ext_usb_fb:
7458 + wm8350_free_irq(wm8350, WM8350_IRQ_EXT_USB_FB, wm8350);
7459 +free_chg_vbatt_lt_2p85:
7460 + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85, wm8350);
7461 +free_chg_vbatt_lt_3p1:
7462 + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1, wm8350);
7463 +free_chg_vbatt_lt_3p9:
7464 + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9, wm8350);
7465 +free_chg_fast_rdy:
7466 + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY, wm8350);
7467 +free_chg_start:
7468 + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_START, wm8350);
7469 +free_chg_end:
7470 + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_END, wm8350);
7471 +free_chg_to:
7472 + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_TO, wm8350);
7473 +free_chg_bat_fail:
7474 + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL, wm8350);
7475 +free_chg_bat_cold:
7476 + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD, wm8350);
7477 +free_chg_bat_hot:
7478 + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT, wm8350);
7479 +err:
7480 + return ret;
7481 }
7482
7483 static void free_charger_irq(struct wm8350 *wm8350)
7484 @@ -456,6 +524,7 @@ static void free_charger_irq(struct wm8350 *wm8350)
7485 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_TO, wm8350);
7486 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_END, wm8350);
7487 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_START, wm8350);
7488 + wm8350_free_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY, wm8350);
7489 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9, wm8350);
7490 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1, wm8350);
7491 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85, wm8350);
7492 diff --git a/drivers/ptp/ptp_sysfs.c b/drivers/ptp/ptp_sysfs.c
7493 index be076a91e20e6..8cd59e8481631 100644
7494 --- a/drivers/ptp/ptp_sysfs.c
7495 +++ b/drivers/ptp/ptp_sysfs.c
7496 @@ -13,7 +13,7 @@ static ssize_t clock_name_show(struct device *dev,
7497 struct device_attribute *attr, char *page)
7498 {
7499 struct ptp_clock *ptp = dev_get_drvdata(dev);
7500 - return snprintf(page, PAGE_SIZE-1, "%s\n", ptp->info->name);
7501 + return sysfs_emit(page, "%s\n", ptp->info->name);
7502 }
7503 static DEVICE_ATTR_RO(clock_name);
7504
7505 @@ -227,7 +227,7 @@ static ssize_t ptp_pin_show(struct device *dev, struct device_attribute *attr,
7506
7507 mutex_unlock(&ptp->pincfg_mux);
7508
7509 - return snprintf(page, PAGE_SIZE, "%u %u\n", func, chan);
7510 + return sysfs_emit(page, "%u %u\n", func, chan);
7511 }
7512
7513 static ssize_t ptp_pin_store(struct device *dev, struct device_attribute *attr,
7514 diff --git a/drivers/pwm/pwm-lpc18xx-sct.c b/drivers/pwm/pwm-lpc18xx-sct.c
7515 index 5ff11145c1a30..9b15b6a79082a 100644
7516 --- a/drivers/pwm/pwm-lpc18xx-sct.c
7517 +++ b/drivers/pwm/pwm-lpc18xx-sct.c
7518 @@ -400,12 +400,6 @@ static int lpc18xx_pwm_probe(struct platform_device *pdev)
7519 lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_LIMIT,
7520 BIT(lpc18xx_pwm->period_event));
7521
7522 - ret = pwmchip_add(&lpc18xx_pwm->chip);
7523 - if (ret < 0) {
7524 - dev_err(&pdev->dev, "pwmchip_add failed: %d\n", ret);
7525 - goto disable_pwmclk;
7526 - }
7527 -
7528 for (i = 0; i < lpc18xx_pwm->chip.npwm; i++) {
7529 struct lpc18xx_pwm_data *data;
7530
7531 @@ -415,14 +409,12 @@ static int lpc18xx_pwm_probe(struct platform_device *pdev)
7532 GFP_KERNEL);
7533 if (!data) {
7534 ret = -ENOMEM;
7535 - goto remove_pwmchip;
7536 + goto disable_pwmclk;
7537 }
7538
7539 pwm_set_chip_data(pwm, data);
7540 }
7541
7542 - platform_set_drvdata(pdev, lpc18xx_pwm);
7543 -
7544 val = lpc18xx_pwm_readl(lpc18xx_pwm, LPC18XX_PWM_CTRL);
7545 val &= ~LPC18XX_PWM_BIDIR;
7546 val &= ~LPC18XX_PWM_CTRL_HALT;
7547 @@ -430,10 +422,16 @@ static int lpc18xx_pwm_probe(struct platform_device *pdev)
7548 val |= LPC18XX_PWM_PRE(0);
7549 lpc18xx_pwm_writel(lpc18xx_pwm, LPC18XX_PWM_CTRL, val);
7550
7551 + ret = pwmchip_add(&lpc18xx_pwm->chip);
7552 + if (ret < 0) {
7553 + dev_err(&pdev->dev, "pwmchip_add failed: %d\n", ret);
7554 + goto disable_pwmclk;
7555 + }
7556 +
7557 + platform_set_drvdata(pdev, lpc18xx_pwm);
7558 +
7559 return 0;
7560
7561 -remove_pwmchip:
7562 - pwmchip_remove(&lpc18xx_pwm->chip);
7563 disable_pwmclk:
7564 clk_disable_unprepare(lpc18xx_pwm->pwm_clk);
7565 return ret;
7566 diff --git a/drivers/regulator/qcom_smd-regulator.c b/drivers/regulator/qcom_smd-regulator.c
7567 index e6601c28ab431..a4c82f5e2dae7 100644
7568 --- a/drivers/regulator/qcom_smd-regulator.c
7569 +++ b/drivers/regulator/qcom_smd-regulator.c
7570 @@ -854,8 +854,10 @@ static int rpm_reg_probe(struct platform_device *pdev)
7571
7572 for_each_available_child_of_node(dev->of_node, node) {
7573 vreg = devm_kzalloc(&pdev->dev, sizeof(*vreg), GFP_KERNEL);
7574 - if (!vreg)
7575 + if (!vreg) {
7576 + of_node_put(node);
7577 return -ENOMEM;
7578 + }
7579
7580 ret = rpm_regulator_init_vreg(vreg, dev, node, rpm, vreg_data);
7581
7582 diff --git a/drivers/remoteproc/qcom_q6v5_adsp.c b/drivers/remoteproc/qcom_q6v5_adsp.c
7583 index 24e8b7e271773..6b131a490ebf8 100644
7584 --- a/drivers/remoteproc/qcom_q6v5_adsp.c
7585 +++ b/drivers/remoteproc/qcom_q6v5_adsp.c
7586 @@ -389,6 +389,7 @@ static int adsp_alloc_memory_region(struct qcom_adsp *adsp)
7587 }
7588
7589 ret = of_address_to_resource(node, 0, &r);
7590 + of_node_put(node);
7591 if (ret)
7592 return ret;
7593
7594 diff --git a/drivers/remoteproc/qcom_wcnss.c b/drivers/remoteproc/qcom_wcnss.c
7595 index dc135754bb9c5..c72f1b3b60858 100644
7596 --- a/drivers/remoteproc/qcom_wcnss.c
7597 +++ b/drivers/remoteproc/qcom_wcnss.c
7598 @@ -440,6 +440,7 @@ static int wcnss_alloc_memory_region(struct qcom_wcnss *wcnss)
7599 }
7600
7601 ret = of_address_to_resource(node, 0, &r);
7602 + of_node_put(node);
7603 if (ret)
7604 return ret;
7605
7606 diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c
7607 index 5c1378d2fab3d..ba345a379e262 100644
7608 --- a/drivers/rtc/interface.c
7609 +++ b/drivers/rtc/interface.c
7610 @@ -793,9 +793,13 @@ static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
7611 struct timerqueue_node *next = timerqueue_getnext(&rtc->timerqueue);
7612 struct rtc_time tm;
7613 ktime_t now;
7614 + int err;
7615 +
7616 + err = __rtc_read_time(rtc, &tm);
7617 + if (err)
7618 + return err;
7619
7620 timer->enabled = 1;
7621 - __rtc_read_time(rtc, &tm);
7622 now = rtc_tm_to_ktime(tm);
7623
7624 /* Skip over expired timers */
7625 @@ -809,7 +813,6 @@ static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
7626 trace_rtc_timer_enqueue(timer);
7627 if (!next || ktime_before(timer->node.expires, next->expires)) {
7628 struct rtc_wkalrm alarm;
7629 - int err;
7630
7631 alarm.time = rtc_ktime_to_tm(timer->node.expires);
7632 alarm.enabled = 1;
7633 diff --git a/drivers/rtc/rtc-wm8350.c b/drivers/rtc/rtc-wm8350.c
7634 index 2018614f258f6..6eaa9321c0741 100644
7635 --- a/drivers/rtc/rtc-wm8350.c
7636 +++ b/drivers/rtc/rtc-wm8350.c
7637 @@ -432,14 +432,21 @@ static int wm8350_rtc_probe(struct platform_device *pdev)
7638 return ret;
7639 }
7640
7641 - wm8350_register_irq(wm8350, WM8350_IRQ_RTC_SEC,
7642 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_RTC_SEC,
7643 wm8350_rtc_update_handler, 0,
7644 "RTC Seconds", wm8350);
7645 + if (ret)
7646 + return ret;
7647 +
7648 wm8350_mask_irq(wm8350, WM8350_IRQ_RTC_SEC);
7649
7650 - wm8350_register_irq(wm8350, WM8350_IRQ_RTC_ALM,
7651 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_RTC_ALM,
7652 wm8350_rtc_alarm_handler, 0,
7653 "RTC Alarm", wm8350);
7654 + if (ret) {
7655 + wm8350_free_irq(wm8350, WM8350_IRQ_RTC_SEC, wm8350);
7656 + return ret;
7657 + }
7658
7659 return 0;
7660 }
7661 diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c
7662 index eb466c2e1839e..fdd9f1a5100c7 100644
7663 --- a/drivers/scsi/aha152x.c
7664 +++ b/drivers/scsi/aha152x.c
7665 @@ -3368,13 +3368,11 @@ static int __init aha152x_setup(char *str)
7666 setup[setup_count].synchronous = ints[0] >= 6 ? ints[6] : 1;
7667 setup[setup_count].delay = ints[0] >= 7 ? ints[7] : DELAY_DEFAULT;
7668 setup[setup_count].ext_trans = ints[0] >= 8 ? ints[8] : 0;
7669 - if (ints[0] > 8) { /*}*/
7670 + if (ints[0] > 8)
7671 printk(KERN_NOTICE "aha152x: usage: aha152x=<IOBASE>[,<IRQ>[,<SCSI ID>"
7672 "[,<RECONNECT>[,<PARITY>[,<SYNCHRONOUS>[,<DELAY>[,<EXT_TRANS>]]]]]]]\n");
7673 - } else {
7674 + else
7675 setup_count++;
7676 - return 0;
7677 - }
7678
7679 return 1;
7680 }
7681 diff --git a/drivers/scsi/bfa/bfad_attr.c b/drivers/scsi/bfa/bfad_attr.c
7682 index fbfce02e5b935..c285f401ff7b5 100644
7683 --- a/drivers/scsi/bfa/bfad_attr.c
7684 +++ b/drivers/scsi/bfa/bfad_attr.c
7685 @@ -711,7 +711,7 @@ bfad_im_serial_num_show(struct device *dev, struct device_attribute *attr,
7686 char serial_num[BFA_ADAPTER_SERIAL_NUM_LEN];
7687
7688 bfa_get_adapter_serial_num(&bfad->bfa, serial_num);
7689 - return snprintf(buf, PAGE_SIZE, "%s\n", serial_num);
7690 + return sysfs_emit(buf, "%s\n", serial_num);
7691 }
7692
7693 static ssize_t
7694 @@ -725,7 +725,7 @@ bfad_im_model_show(struct device *dev, struct device_attribute *attr,
7695 char model[BFA_ADAPTER_MODEL_NAME_LEN];
7696
7697 bfa_get_adapter_model(&bfad->bfa, model);
7698 - return snprintf(buf, PAGE_SIZE, "%s\n", model);
7699 + return sysfs_emit(buf, "%s\n", model);
7700 }
7701
7702 static ssize_t
7703 @@ -805,7 +805,7 @@ bfad_im_model_desc_show(struct device *dev, struct device_attribute *attr,
7704 snprintf(model_descr, BFA_ADAPTER_MODEL_DESCR_LEN,
7705 "Invalid Model");
7706
7707 - return snprintf(buf, PAGE_SIZE, "%s\n", model_descr);
7708 + return sysfs_emit(buf, "%s\n", model_descr);
7709 }
7710
7711 static ssize_t
7712 @@ -819,7 +819,7 @@ bfad_im_node_name_show(struct device *dev, struct device_attribute *attr,
7713 u64 nwwn;
7714
7715 nwwn = bfa_fcs_lport_get_nwwn(port->fcs_port);
7716 - return snprintf(buf, PAGE_SIZE, "0x%llx\n", cpu_to_be64(nwwn));
7717 + return sysfs_emit(buf, "0x%llx\n", cpu_to_be64(nwwn));
7718 }
7719
7720 static ssize_t
7721 @@ -836,7 +836,7 @@ bfad_im_symbolic_name_show(struct device *dev, struct device_attribute *attr,
7722 bfa_fcs_lport_get_attr(&bfad->bfa_fcs.fabric.bport, &port_attr);
7723 strlcpy(symname, port_attr.port_cfg.sym_name.symname,
7724 BFA_SYMNAME_MAXLEN);
7725 - return snprintf(buf, PAGE_SIZE, "%s\n", symname);
7726 + return sysfs_emit(buf, "%s\n", symname);
7727 }
7728
7729 static ssize_t
7730 @@ -850,14 +850,14 @@ bfad_im_hw_version_show(struct device *dev, struct device_attribute *attr,
7731 char hw_ver[BFA_VERSION_LEN];
7732
7733 bfa_get_pci_chip_rev(&bfad->bfa, hw_ver);
7734 - return snprintf(buf, PAGE_SIZE, "%s\n", hw_ver);
7735 + return sysfs_emit(buf, "%s\n", hw_ver);
7736 }
7737
7738 static ssize_t
7739 bfad_im_drv_version_show(struct device *dev, struct device_attribute *attr,
7740 char *buf)
7741 {
7742 - return snprintf(buf, PAGE_SIZE, "%s\n", BFAD_DRIVER_VERSION);
7743 + return sysfs_emit(buf, "%s\n", BFAD_DRIVER_VERSION);
7744 }
7745
7746 static ssize_t
7747 @@ -871,7 +871,7 @@ bfad_im_optionrom_version_show(struct device *dev,
7748 char optrom_ver[BFA_VERSION_LEN];
7749
7750 bfa_get_adapter_optrom_ver(&bfad->bfa, optrom_ver);
7751 - return snprintf(buf, PAGE_SIZE, "%s\n", optrom_ver);
7752 + return sysfs_emit(buf, "%s\n", optrom_ver);
7753 }
7754
7755 static ssize_t
7756 @@ -885,7 +885,7 @@ bfad_im_fw_version_show(struct device *dev, struct device_attribute *attr,
7757 char fw_ver[BFA_VERSION_LEN];
7758
7759 bfa_get_adapter_fw_ver(&bfad->bfa, fw_ver);
7760 - return snprintf(buf, PAGE_SIZE, "%s\n", fw_ver);
7761 + return sysfs_emit(buf, "%s\n", fw_ver);
7762 }
7763
7764 static ssize_t
7765 @@ -897,7 +897,7 @@ bfad_im_num_of_ports_show(struct device *dev, struct device_attribute *attr,
7766 (struct bfad_im_port_s *) shost->hostdata[0];
7767 struct bfad_s *bfad = im_port->bfad;
7768
7769 - return snprintf(buf, PAGE_SIZE, "%d\n",
7770 + return sysfs_emit(buf, "%d\n",
7771 bfa_get_nports(&bfad->bfa));
7772 }
7773
7774 @@ -905,7 +905,7 @@ static ssize_t
7775 bfad_im_drv_name_show(struct device *dev, struct device_attribute *attr,
7776 char *buf)
7777 {
7778 - return snprintf(buf, PAGE_SIZE, "%s\n", BFAD_DRIVER_NAME);
7779 + return sysfs_emit(buf, "%s\n", BFAD_DRIVER_NAME);
7780 }
7781
7782 static ssize_t
7783 @@ -924,14 +924,14 @@ bfad_im_num_of_discovered_ports_show(struct device *dev,
7784 rports = kcalloc(nrports, sizeof(struct bfa_rport_qualifier_s),
7785 GFP_ATOMIC);
7786 if (rports == NULL)
7787 - return snprintf(buf, PAGE_SIZE, "Failed\n");
7788 + return sysfs_emit(buf, "Failed\n");
7789
7790 spin_lock_irqsave(&bfad->bfad_lock, flags);
7791 bfa_fcs_lport_get_rport_quals(port->fcs_port, rports, &nrports);
7792 spin_unlock_irqrestore(&bfad->bfad_lock, flags);
7793 kfree(rports);
7794
7795 - return snprintf(buf, PAGE_SIZE, "%d\n", nrports);
7796 + return sysfs_emit(buf, "%d\n", nrports);
7797 }
7798
7799 static DEVICE_ATTR(serial_number, S_IRUGO,
7800 diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
7801 index 13f314fa757e8..a86aae52d94f4 100644
7802 --- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
7803 +++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
7804 @@ -504,7 +504,7 @@ MODULE_PARM_DESC(intr_conv, "interrupt converge enable (0-1)");
7805
7806 /* permit overriding the host protection capabilities mask (EEDP/T10 PI) */
7807 static int prot_mask;
7808 -module_param(prot_mask, int, 0);
7809 +module_param(prot_mask, int, 0444);
7810 MODULE_PARM_DESC(prot_mask, " host protection capabilities mask, def=0x0 ");
7811
7812 static bool auto_affine_msi_experimental;
7813 diff --git a/drivers/scsi/libfc/fc_exch.c b/drivers/scsi/libfc/fc_exch.c
7814 index e5b18e5d46dac..6e2a36eeb12a7 100644
7815 --- a/drivers/scsi/libfc/fc_exch.c
7816 +++ b/drivers/scsi/libfc/fc_exch.c
7817 @@ -1697,6 +1697,7 @@ static void fc_exch_abts_resp(struct fc_exch *ep, struct fc_frame *fp)
7818 if (cancel_delayed_work_sync(&ep->timeout_work)) {
7819 FC_EXCH_DBG(ep, "Exchange timer canceled due to ABTS response\n");
7820 fc_exch_release(ep); /* release from pending timer hold */
7821 + return;
7822 }
7823
7824 spin_lock_bh(&ep->ex_lock);
7825 diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
7826 index 5d28bb7f2ca40..5c801705c4700 100644
7827 --- a/drivers/scsi/libsas/sas_ata.c
7828 +++ b/drivers/scsi/libsas/sas_ata.c
7829 @@ -201,7 +201,7 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
7830 task->total_xfer_len = qc->nbytes;
7831 task->num_scatter = qc->n_elem;
7832 task->data_dir = qc->dma_dir;
7833 - } else if (qc->tf.protocol == ATA_PROT_NODATA) {
7834 + } else if (!ata_is_data(qc->tf.protocol)) {
7835 task->data_dir = DMA_NONE;
7836 } else {
7837 for_each_sg(qc->sg, sg, qc->n_elem, si)
7838 diff --git a/drivers/scsi/mvsas/mv_init.c b/drivers/scsi/mvsas/mv_init.c
7839 index 52405ce58ade8..c16d7fb0fdcbb 100644
7840 --- a/drivers/scsi/mvsas/mv_init.c
7841 +++ b/drivers/scsi/mvsas/mv_init.c
7842 @@ -697,7 +697,7 @@ static ssize_t
7843 mvs_show_driver_version(struct device *cdev,
7844 struct device_attribute *attr, char *buffer)
7845 {
7846 - return snprintf(buffer, PAGE_SIZE, "%s\n", DRV_VERSION);
7847 + return sysfs_emit(buffer, "%s\n", DRV_VERSION);
7848 }
7849
7850 static DEVICE_ATTR(driver_version,
7851 @@ -749,7 +749,7 @@ mvs_store_interrupt_coalescing(struct device *cdev,
7852 static ssize_t mvs_show_interrupt_coalescing(struct device *cdev,
7853 struct device_attribute *attr, char *buffer)
7854 {
7855 - return snprintf(buffer, PAGE_SIZE, "%d\n", interrupt_coalescing);
7856 + return sysfs_emit(buffer, "%d\n", interrupt_coalescing);
7857 }
7858
7859 static DEVICE_ATTR(interrupt_coalescing,
7860 diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c
7861 index 68a8217032d0f..fec653b54307a 100644
7862 --- a/drivers/scsi/pm8001/pm8001_hwi.c
7863 +++ b/drivers/scsi/pm8001/pm8001_hwi.c
7864 @@ -1750,6 +1750,7 @@ static void pm8001_send_abort_all(struct pm8001_hba_info *pm8001_ha,
7865 ccb->device = pm8001_ha_dev;
7866 ccb->ccb_tag = ccb_tag;
7867 ccb->task = task;
7868 + ccb->n_elem = 0;
7869
7870 circularQ = &pm8001_ha->inbnd_q_tbl[0];
7871
7872 @@ -1812,6 +1813,7 @@ static void pm8001_send_read_log(struct pm8001_hba_info *pm8001_ha,
7873 ccb->device = pm8001_ha_dev;
7874 ccb->ccb_tag = ccb_tag;
7875 ccb->task = task;
7876 + ccb->n_elem = 0;
7877 pm8001_ha_dev->id |= NCQ_READ_LOG_FLAG;
7878 pm8001_ha_dev->id |= NCQ_2ND_RLE_FLAG;
7879
7880 @@ -1828,7 +1830,7 @@ static void pm8001_send_read_log(struct pm8001_hba_info *pm8001_ha,
7881
7882 sata_cmd.tag = cpu_to_le32(ccb_tag);
7883 sata_cmd.device_id = cpu_to_le32(pm8001_ha_dev->device_id);
7884 - sata_cmd.ncqtag_atap_dir_m |= ((0x1 << 7) | (0x5 << 9));
7885 + sata_cmd.ncqtag_atap_dir_m = cpu_to_le32((0x1 << 7) | (0x5 << 9));
7886 memcpy(&sata_cmd.sata_fis, &fis, sizeof(struct host_to_dev_fis));
7887
7888 res = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &sata_cmd, 0);
7889 @@ -3773,12 +3775,11 @@ int pm8001_mpi_task_abort_resp(struct pm8001_hba_info *pm8001_ha, void *piomb)
7890 mb();
7891
7892 if (pm8001_dev->id & NCQ_ABORT_ALL_FLAG) {
7893 - pm8001_tag_free(pm8001_ha, tag);
7894 sas_free_task(t);
7895 - /* clear the flag */
7896 - pm8001_dev->id &= 0xBFFFFFFF;
7897 - } else
7898 + pm8001_dev->id &= ~NCQ_ABORT_ALL_FLAG;
7899 + } else {
7900 t->task_done(t);
7901 + }
7902
7903 return 0;
7904 }
7905 @@ -4727,7 +4728,7 @@ int pm8001_chip_ssp_tm_req(struct pm8001_hba_info *pm8001_ha,
7906 memcpy(sspTMCmd.lun, task->ssp_task.LUN, 8);
7907 sspTMCmd.tag = cpu_to_le32(ccb->ccb_tag);
7908 if (pm8001_ha->chip_id != chip_8001)
7909 - sspTMCmd.ds_ads_m = 0x08;
7910 + sspTMCmd.ds_ads_m = cpu_to_le32(0x08);
7911 circularQ = &pm8001_ha->inbnd_q_tbl[0];
7912 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &sspTMCmd, 0);
7913 return ret;
7914 diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c
7915 index 161bf4760eac7..ce67965a504fa 100644
7916 --- a/drivers/scsi/pm8001/pm80xx_hwi.c
7917 +++ b/drivers/scsi/pm8001/pm80xx_hwi.c
7918 @@ -881,9 +881,11 @@ pm80xx_set_thermal_config(struct pm8001_hba_info *pm8001_ha)
7919 else
7920 page_code = THERMAL_PAGE_CODE_8H;
7921
7922 - payload.cfg_pg[0] = (THERMAL_LOG_ENABLE << 9) |
7923 - (THERMAL_ENABLE << 8) | page_code;
7924 - payload.cfg_pg[1] = (LTEMPHIL << 24) | (RTEMPHIL << 8);
7925 + payload.cfg_pg[0] =
7926 + cpu_to_le32((THERMAL_LOG_ENABLE << 9) |
7927 + (THERMAL_ENABLE << 8) | page_code);
7928 + payload.cfg_pg[1] =
7929 + cpu_to_le32((LTEMPHIL << 24) | (RTEMPHIL << 8));
7930
7931 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0);
7932 if (rc)
7933 @@ -1435,6 +1437,7 @@ static void pm80xx_send_abort_all(struct pm8001_hba_info *pm8001_ha,
7934 ccb->device = pm8001_ha_dev;
7935 ccb->ccb_tag = ccb_tag;
7936 ccb->task = task;
7937 + ccb->n_elem = 0;
7938
7939 circularQ = &pm8001_ha->inbnd_q_tbl[0];
7940
7941 @@ -1516,7 +1519,7 @@ static void pm80xx_send_read_log(struct pm8001_hba_info *pm8001_ha,
7942
7943 sata_cmd.tag = cpu_to_le32(ccb_tag);
7944 sata_cmd.device_id = cpu_to_le32(pm8001_ha_dev->device_id);
7945 - sata_cmd.ncqtag_atap_dir_m_dad |= ((0x1 << 7) | (0x5 << 9));
7946 + sata_cmd.ncqtag_atap_dir_m_dad = cpu_to_le32(((0x1 << 7) | (0x5 << 9)));
7947 memcpy(&sata_cmd.sata_fis, &fis, sizeof(struct host_to_dev_fis));
7948
7949 res = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &sata_cmd, 0);
7950 diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
7951 index 8f85ca0112961..59f5dc9876cc5 100644
7952 --- a/drivers/scsi/qla2xxx/qla_attr.c
7953 +++ b/drivers/scsi/qla2xxx/qla_attr.c
7954 @@ -527,7 +527,7 @@ qla2x00_sysfs_read_vpd(struct file *filp, struct kobject *kobj,
7955 if (!capable(CAP_SYS_ADMIN))
7956 return -EINVAL;
7957
7958 - if (IS_NOCACHE_VPD_TYPE(ha))
7959 + if (!IS_NOCACHE_VPD_TYPE(ha))
7960 goto skip;
7961
7962 faddr = ha->flt_region_vpd << 2;
7963 @@ -710,7 +710,7 @@ qla2x00_sysfs_write_reset(struct file *filp, struct kobject *kobj,
7964 ql_log(ql_log_info, vha, 0x706f,
7965 "Issuing MPI reset.\n");
7966
7967 - if (IS_QLA83XX(ha) || IS_QLA27XX(ha) || IS_QLA28XX(ha)) {
7968 + if (IS_QLA83XX(ha)) {
7969 uint32_t idc_control;
7970
7971 qla83xx_idc_lock(vha, 0);
7972 @@ -1020,9 +1020,6 @@ qla2x00_free_sysfs_attr(scsi_qla_host_t *vha, bool stop_beacon)
7973 continue;
7974 if (iter->type == 3 && !(IS_CNA_CAPABLE(ha)))
7975 continue;
7976 - if (iter->type == 0x27 &&
7977 - (!IS_QLA27XX(ha) || !IS_QLA28XX(ha)))
7978 - continue;
7979
7980 sysfs_remove_bin_file(&host->shost_gendev.kobj,
7981 iter->attr);
7982 diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h
7983 index 7c22f8eea3ead..caf28c5281aa5 100644
7984 --- a/drivers/scsi/qla2xxx/qla_def.h
7985 +++ b/drivers/scsi/qla2xxx/qla_def.h
7986 @@ -2725,7 +2725,11 @@ struct ct_fdmiv2_hba_attributes {
7987 #define FDMI_PORT_SPEED_8GB 0x10
7988 #define FDMI_PORT_SPEED_16GB 0x20
7989 #define FDMI_PORT_SPEED_32GB 0x40
7990 -#define FDMI_PORT_SPEED_64GB 0x80
7991 +#define FDMI_PORT_SPEED_20GB 0x80
7992 +#define FDMI_PORT_SPEED_40GB 0x100
7993 +#define FDMI_PORT_SPEED_128GB 0x200
7994 +#define FDMI_PORT_SPEED_64GB 0x400
7995 +#define FDMI_PORT_SPEED_256GB 0x800
7996 #define FDMI_PORT_SPEED_UNKNOWN 0x8000
7997
7998 #define FC_CLASS_2 0x04
7999 @@ -4866,4 +4870,8 @@ struct sff_8247_a0 {
8000 #include "qla_gbl.h"
8001 #include "qla_dbg.h"
8002 #include "qla_inline.h"
8003 +
8004 +#define IS_SESSION_DELETED(_fcport) (_fcport->disc_state == DSC_DELETE_PEND || \
8005 + _fcport->disc_state == DSC_DELETED)
8006 +
8007 #endif
8008 diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c
8009 index d9b5ea77fde99..e9f03370afba3 100644
8010 --- a/drivers/scsi/qla2xxx/qla_gs.c
8011 +++ b/drivers/scsi/qla2xxx/qla_gs.c
8012 @@ -675,8 +675,7 @@ qla2x00_rff_id(scsi_qla_host_t *vha, u8 type)
8013 return (QLA_SUCCESS);
8014 }
8015
8016 - return qla_async_rffid(vha, &vha->d_id, qlt_rff_id(vha),
8017 - FC4_TYPE_FCP_SCSI);
8018 + return qla_async_rffid(vha, &vha->d_id, qlt_rff_id(vha), type);
8019 }
8020
8021 static int qla_async_rffid(scsi_qla_host_t *vha, port_id_t *d_id,
8022 @@ -726,7 +725,7 @@ static int qla_async_rffid(scsi_qla_host_t *vha, port_id_t *d_id,
8023 /* Prepare CT arguments -- port_id, FC-4 feature, FC-4 type */
8024 ct_req->req.rff_id.port_id = port_id_to_be_id(*d_id);
8025 ct_req->req.rff_id.fc4_feature = fc4feature;
8026 - ct_req->req.rff_id.fc4_type = fc4type; /* SCSI - FCP */
8027 + ct_req->req.rff_id.fc4_type = fc4type; /* SCSI-FCP or FC-NVMe */
8028
8029 sp->u.iocb_cmd.u.ctarg.req_size = RFF_ID_REQ_SIZE;
8030 sp->u.iocb_cmd.u.ctarg.rsp_size = RFF_ID_RSP_SIZE;
8031 diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
8032 index 37c1f27a76cf6..a6e24cef89a0b 100644
8033 --- a/drivers/scsi/qla2xxx/qla_init.c
8034 +++ b/drivers/scsi/qla2xxx/qla_init.c
8035 @@ -572,6 +572,14 @@ qla2x00_async_adisc(struct scsi_qla_host *vha, fc_port_t *fcport,
8036 struct srb_iocb *lio;
8037 int rval = QLA_FUNCTION_FAILED;
8038
8039 + if (IS_SESSION_DELETED(fcport)) {
8040 + ql_log(ql_log_warn, vha, 0xffff,
8041 + "%s: %8phC is being delete - not sending command.\n",
8042 + __func__, fcport->port_name);
8043 + fcport->flags &= ~FCF_ASYNC_ACTIVE;
8044 + return rval;
8045 + }
8046 +
8047 if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT))
8048 return rval;
8049
8050 @@ -955,6 +963,9 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha,
8051 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
8052 }
8053 break;
8054 + case ISP_CFG_NL:
8055 + qla24xx_fcport_handle_login(vha, fcport);
8056 + break;
8057 default:
8058 break;
8059 }
8060 @@ -1311,14 +1322,21 @@ int qla24xx_async_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport, u8 opt)
8061 struct port_database_24xx *pd;
8062 struct qla_hw_data *ha = vha->hw;
8063
8064 - if (!vha->flags.online || (fcport->flags & FCF_ASYNC_SENT) ||
8065 - fcport->loop_id == FC_NO_LOOP_ID) {
8066 + if (IS_SESSION_DELETED(fcport)) {
8067 ql_log(ql_log_warn, vha, 0xffff,
8068 - "%s: %8phC - not sending command.\n",
8069 - __func__, fcport->port_name);
8070 + "%s: %8phC is being delete - not sending command.\n",
8071 + __func__, fcport->port_name);
8072 + fcport->flags &= ~FCF_ASYNC_ACTIVE;
8073 return rval;
8074 }
8075
8076 + if (!vha->flags.online || fcport->flags & FCF_ASYNC_SENT) {
8077 + ql_log(ql_log_warn, vha, 0xffff,
8078 + "%s: %8phC online %d flags %x - not sending command.\n",
8079 + __func__, fcport->port_name, vha->flags.online, fcport->flags);
8080 + goto done;
8081 + }
8082 +
8083 sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL);
8084 if (!sp)
8085 goto done;
8086 @@ -1477,6 +1495,11 @@ static void qla_chk_n2n_b4_login(struct scsi_qla_host *vha, fc_port_t *fcport)
8087 u8 login = 0;
8088 int rc;
8089
8090 + ql_dbg(ql_dbg_disc, vha, 0x307b,
8091 + "%s %8phC DS %d LS %d lid %d retries=%d\n",
8092 + __func__, fcport->port_name, fcport->disc_state,
8093 + fcport->fw_login_state, fcport->loop_id, fcport->login_retry);
8094 +
8095 if (qla_tgt_mode_enabled(vha))
8096 return;
8097
8098 @@ -1534,7 +1557,8 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
8099 fcport->conflict, fcport->last_rscn_gen, fcport->rscn_gen,
8100 fcport->login_gen, fcport->loop_id, fcport->scan_state);
8101
8102 - if (fcport->scan_state != QLA_FCPORT_FOUND)
8103 + if (fcport->scan_state != QLA_FCPORT_FOUND ||
8104 + fcport->disc_state == DSC_DELETE_PEND)
8105 return 0;
8106
8107 if ((fcport->loop_id != FC_NO_LOOP_ID) &&
8108 @@ -1555,7 +1579,7 @@ int qla24xx_fcport_handle_login(struct scsi_qla_host *vha, fc_port_t *fcport)
8109 if (vha->host->active_mode == MODE_TARGET)
8110 return 0;
8111
8112 - if (fcport->flags & FCF_ASYNC_SENT) {
8113 + if (fcport->flags & (FCF_ASYNC_SENT | FCF_ASYNC_ACTIVE)) {
8114 set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
8115 return 0;
8116 }
8117 @@ -3223,6 +3247,14 @@ qla2x00_alloc_fw_dump(scsi_qla_host_t *vha)
8118 struct rsp_que *rsp = ha->rsp_q_map[0];
8119 struct qla2xxx_fw_dump *fw_dump;
8120
8121 + if (ha->fw_dump) {
8122 + ql_dbg(ql_dbg_init, vha, 0x00bd,
8123 + "Firmware dump already allocated.\n");
8124 + return;
8125 + }
8126 +
8127 + ha->fw_dumped = 0;
8128 + ha->fw_dump_cap_flags = 0;
8129 dump_size = fixed_size = mem_size = eft_size = fce_size = mq_size = 0;
8130 req_q_size = rsp_q_size = 0;
8131
8132 @@ -3233,7 +3265,7 @@ qla2x00_alloc_fw_dump(scsi_qla_host_t *vha)
8133 mem_size = (ha->fw_memory_size - 0x11000 + 1) *
8134 sizeof(uint16_t);
8135 } else if (IS_FWI2_CAPABLE(ha)) {
8136 - if (IS_QLA83XX(ha) || IS_QLA27XX(ha) || IS_QLA28XX(ha))
8137 + if (IS_QLA83XX(ha))
8138 fixed_size = offsetof(struct qla83xx_fw_dump, ext_mem);
8139 else if (IS_QLA81XX(ha))
8140 fixed_size = offsetof(struct qla81xx_fw_dump, ext_mem);
8141 @@ -3245,8 +3277,7 @@ qla2x00_alloc_fw_dump(scsi_qla_host_t *vha)
8142 mem_size = (ha->fw_memory_size - 0x100000 + 1) *
8143 sizeof(uint32_t);
8144 if (ha->mqenable) {
8145 - if (!IS_QLA83XX(ha) && !IS_QLA27XX(ha) &&
8146 - !IS_QLA28XX(ha))
8147 + if (!IS_QLA83XX(ha))
8148 mq_size = sizeof(struct qla2xxx_mq_chain);
8149 /*
8150 * Allocate maximum buffer size for all queues - Q0.
8151 @@ -3743,8 +3774,7 @@ enable_82xx_npiv:
8152 ha->fw_major_version, ha->fw_minor_version,
8153 ha->fw_subminor_version);
8154
8155 - if (IS_QLA83XX(ha) || IS_QLA27XX(ha) ||
8156 - IS_QLA28XX(ha)) {
8157 + if (IS_QLA83XX(ha)) {
8158 ha->flags.fac_supported = 0;
8159 rval = QLA_SUCCESS;
8160 }
8161 @@ -5217,6 +5247,13 @@ skip_login:
8162 memcpy(fcport->node_name, new_fcport->node_name,
8163 WWN_SIZE);
8164 fcport->scan_state = QLA_FCPORT_FOUND;
8165 + if (fcport->login_retry == 0) {
8166 + fcport->login_retry = vha->hw->login_retry_count;
8167 + ql_dbg(ql_dbg_disc, vha, 0x2135,
8168 + "Port login retry %8phN, lid 0x%04x retry cnt=%d.\n",
8169 + fcport->port_name, fcport->loop_id,
8170 + fcport->login_retry);
8171 + }
8172 found++;
8173 break;
8174 }
8175 @@ -5351,6 +5388,8 @@ qla2x00_reg_remote_port(scsi_qla_host_t *vha, fc_port_t *fcport)
8176 if (atomic_read(&fcport->state) == FCS_ONLINE)
8177 return;
8178
8179 + qla2x00_set_fcport_state(fcport, FCS_ONLINE);
8180 +
8181 rport_ids.node_name = wwn_to_u64(fcport->node_name);
8182 rport_ids.port_name = wwn_to_u64(fcport->port_name);
8183 rport_ids.port_id = fcport->d_id.b.domain << 16 |
8184 @@ -5446,6 +5485,7 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
8185 qla2x00_reg_remote_port(vha, fcport);
8186 break;
8187 case MODE_TARGET:
8188 + qla2x00_set_fcport_state(fcport, FCS_ONLINE);
8189 if (!vha->vha_tgt.qla_tgt->tgt_stop &&
8190 !vha->vha_tgt.qla_tgt->tgt_stopped)
8191 qlt_fc_port_added(vha, fcport);
8192 @@ -5460,8 +5500,6 @@ qla2x00_update_fcport(scsi_qla_host_t *vha, fc_port_t *fcport)
8193 break;
8194 }
8195
8196 - qla2x00_set_fcport_state(fcport, FCS_ONLINE);
8197 -
8198 if (IS_IIDMA_CAPABLE(vha->hw) && vha->hw->flags.gpsc_supported) {
8199 if (fcport->id_changed) {
8200 fcport->id_changed = 0;
8201 @@ -9001,7 +9039,7 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos,
8202 qpair->rsp->req = qpair->req;
8203 qpair->rsp->qpair = qpair;
8204 /* init qpair to this cpu. Will adjust at run time. */
8205 - qla_cpu_update(qpair, smp_processor_id());
8206 + qla_cpu_update(qpair, raw_smp_processor_id());
8207
8208 if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif) {
8209 if (ha->fw_attributes & BIT_4)
8210 diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c
8211 index 936103604d02d..103288b0377e0 100644
8212 --- a/drivers/scsi/qla2xxx/qla_iocb.c
8213 +++ b/drivers/scsi/qla2xxx/qla_iocb.c
8214 @@ -2859,6 +2859,7 @@ static void qla2x00_els_dcmd2_sp_done(srb_t *sp, int res)
8215 set_bit(ISP_ABORT_NEEDED,
8216 &vha->dpc_flags);
8217 qla2xxx_wake_dpc(vha);
8218 + break;
8219 }
8220 /* fall through */
8221 default:
8222 @@ -2868,9 +2869,7 @@ static void qla2x00_els_dcmd2_sp_done(srb_t *sp, int res)
8223 fw_status[0], fw_status[1], fw_status[2]);
8224
8225 fcport->flags &= ~FCF_ASYNC_SENT;
8226 - qla2x00_set_fcport_disc_state(fcport,
8227 - DSC_LOGIN_FAILED);
8228 - set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
8229 + qlt_schedule_sess_for_deletion(fcport);
8230 break;
8231 }
8232 break;
8233 @@ -2882,8 +2881,7 @@ static void qla2x00_els_dcmd2_sp_done(srb_t *sp, int res)
8234 fw_status[0], fw_status[1], fw_status[2]);
8235
8236 sp->fcport->flags &= ~FCF_ASYNC_SENT;
8237 - qla2x00_set_fcport_disc_state(fcport, DSC_LOGIN_FAILED);
8238 - set_bit(RELOGIN_NEEDED, &vha->dpc_flags);
8239 + qlt_schedule_sess_for_deletion(fcport);
8240 break;
8241 }
8242
8243 diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
8244 index 3e9c5768815e5..d7cf7f9570874 100644
8245 --- a/drivers/scsi/qla2xxx/qla_isr.c
8246 +++ b/drivers/scsi/qla2xxx/qla_isr.c
8247 @@ -1839,6 +1839,7 @@ qla24xx_tm_iocb_entry(scsi_qla_host_t *vha, struct req_que *req, void *tsk)
8248 iocb->u.tmf.data = QLA_FUNCTION_FAILED;
8249 } else if ((le16_to_cpu(sts->scsi_status) &
8250 SS_RESPONSE_INFO_LEN_VALID)) {
8251 + host_to_fcp_swap(sts->data, sizeof(sts->data));
8252 if (le32_to_cpu(sts->rsp_data_len) < 4) {
8253 ql_log(ql_log_warn, fcport->vha, 0x503b,
8254 "Async-%s error - hdl=%x not enough response(%d).\n",
8255 diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
8256 index 098388a12febc..29f2730fbf66a 100644
8257 --- a/drivers/scsi/qla2xxx/qla_mbx.c
8258 +++ b/drivers/scsi/qla2xxx/qla_mbx.c
8259 @@ -10,6 +10,12 @@
8260 #include <linux/delay.h>
8261 #include <linux/gfp.h>
8262
8263 +#ifdef CONFIG_PPC
8264 +#define IS_PPCARCH true
8265 +#else
8266 +#define IS_PPCARCH false
8267 +#endif
8268 +
8269 static struct mb_cmd_name {
8270 uint16_t cmd;
8271 const char *str;
8272 @@ -731,6 +737,9 @@ qla2x00_execute_fw(scsi_qla_host_t *vha, uint32_t risc_addr)
8273 vha->min_supported_speed =
8274 nv->min_supported_speed;
8275 }
8276 +
8277 + if (IS_PPCARCH)
8278 + mcp->mb[11] |= BIT_4;
8279 }
8280
8281 if (ha->flags.exlogins_enabled)
8282 @@ -2897,8 +2906,7 @@ qla2x00_get_resource_cnts(scsi_qla_host_t *vha)
8283 ha->orig_fw_iocb_count = mcp->mb[10];
8284 if (ha->flags.npiv_supported)
8285 ha->max_npiv_vports = mcp->mb[11];
8286 - if (IS_QLA81XX(ha) || IS_QLA83XX(ha) || IS_QLA27XX(ha) ||
8287 - IS_QLA28XX(ha))
8288 + if (IS_QLA81XX(ha) || IS_QLA83XX(ha))
8289 ha->fw_max_fcf_count = mcp->mb[12];
8290 }
8291
8292 @@ -5391,7 +5399,7 @@ qla2x00_get_data_rate(scsi_qla_host_t *vha)
8293 mcp->out_mb = MBX_1|MBX_0;
8294 mcp->in_mb = MBX_2|MBX_1|MBX_0;
8295 if (IS_QLA83XX(ha) || IS_QLA27XX(ha) || IS_QLA28XX(ha))
8296 - mcp->in_mb |= MBX_3;
8297 + mcp->in_mb |= MBX_4|MBX_3;
8298 mcp->tov = MBX_TOV_SECONDS;
8299 mcp->flags = 0;
8300 rval = qla2x00_mailbox_command(vha, mcp);
8301 diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
8302 index 97453c12b7358..a15af048cd820 100644
8303 --- a/drivers/scsi/qla2xxx/qla_nvme.c
8304 +++ b/drivers/scsi/qla2xxx/qla_nvme.c
8305 @@ -36,6 +36,11 @@ int qla_nvme_register_remote(struct scsi_qla_host *vha, struct fc_port *fcport)
8306 (fcport->nvme_flag & NVME_FLAG_REGISTERED))
8307 return 0;
8308
8309 + if (atomic_read(&fcport->state) == FCS_ONLINE)
8310 + return 0;
8311 +
8312 + qla2x00_set_fcport_state(fcport, FCS_ONLINE);
8313 +
8314 fcport->nvme_flag &= ~NVME_FLAG_RESETTING;
8315
8316 memset(&req, 0, sizeof(struct nvme_fc_port_info));
8317 @@ -152,6 +157,18 @@ out:
8318 qla2xxx_rel_qpair_sp(sp->qpair, sp);
8319 }
8320
8321 +static void qla_nvme_ls_unmap(struct srb *sp, struct nvmefc_ls_req *fd)
8322 +{
8323 + if (sp->flags & SRB_DMA_VALID) {
8324 + struct srb_iocb *nvme = &sp->u.iocb_cmd;
8325 + struct qla_hw_data *ha = sp->fcport->vha->hw;
8326 +
8327 + dma_unmap_single(&ha->pdev->dev, nvme->u.nvme.cmd_dma,
8328 + fd->rqstlen, DMA_TO_DEVICE);
8329 + sp->flags &= ~SRB_DMA_VALID;
8330 + }
8331 +}
8332 +
8333 static void qla_nvme_release_ls_cmd_kref(struct kref *kref)
8334 {
8335 struct srb *sp = container_of(kref, struct srb, cmd_kref);
8336 @@ -168,6 +185,8 @@ static void qla_nvme_release_ls_cmd_kref(struct kref *kref)
8337 spin_unlock_irqrestore(&priv->cmd_lock, flags);
8338
8339 fd = priv->fd;
8340 +
8341 + qla_nvme_ls_unmap(sp, fd);
8342 fd->done(fd, priv->comp_status);
8343 out:
8344 qla2x00_rel_sp(sp);
8345 @@ -314,6 +333,8 @@ static int qla_nvme_ls_req(struct nvme_fc_local_port *lport,
8346 dma_sync_single_for_device(&ha->pdev->dev, nvme->u.nvme.cmd_dma,
8347 fd->rqstlen, DMA_TO_DEVICE);
8348
8349 + sp->flags |= SRB_DMA_VALID;
8350 +
8351 rval = qla2x00_start_sp(sp);
8352 if (rval != QLA_SUCCESS) {
8353 ql_log(ql_log_warn, vha, 0x700e,
8354 @@ -321,6 +342,7 @@ static int qla_nvme_ls_req(struct nvme_fc_local_port *lport,
8355 wake_up(&sp->nvme_ls_waitq);
8356 sp->priv = NULL;
8357 priv->sp = NULL;
8358 + qla_nvme_ls_unmap(sp, fd);
8359 qla2x00_rel_sp(sp);
8360 return rval;
8361 }
8362 diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
8363 index c1d4c964b0dd4..a5dbaa3491f82 100644
8364 --- a/drivers/scsi/qla2xxx/qla_os.c
8365 +++ b/drivers/scsi/qla2xxx/qla_os.c
8366 @@ -3627,8 +3627,7 @@ qla2x00_unmap_iobases(struct qla_hw_data *ha)
8367 if (ha->mqiobase)
8368 iounmap(ha->mqiobase);
8369
8370 - if ((IS_QLA83XX(ha) || IS_QLA27XX(ha) || IS_QLA28XX(ha)) &&
8371 - ha->msixbase)
8372 + if (ha->msixbase)
8373 iounmap(ha->msixbase);
8374 }
8375 }
8376 @@ -5348,6 +5347,11 @@ void qla2x00_relogin(struct scsi_qla_host *vha)
8377 memset(&ea, 0, sizeof(ea));
8378 ea.fcport = fcport;
8379 qla24xx_handle_relogin_event(vha, &ea);
8380 + } else if (vha->hw->current_topology ==
8381 + ISP_CFG_NL &&
8382 + IS_QLA2XXX_MIDTYPE(vha->hw)) {
8383 + (void)qla24xx_fcport_handle_login(vha,
8384 + fcport);
8385 } else if (vha->hw->current_topology ==
8386 ISP_CFG_NL) {
8387 fcport->login_retry--;
8388 diff --git a/drivers/scsi/qla2xxx/qla_sup.c b/drivers/scsi/qla2xxx/qla_sup.c
8389 index bbe90354f49b0..d306f3ca0f3bf 100644
8390 --- a/drivers/scsi/qla2xxx/qla_sup.c
8391 +++ b/drivers/scsi/qla2xxx/qla_sup.c
8392 @@ -843,7 +843,7 @@ qla2xxx_get_flt_info(scsi_qla_host_t *vha, uint32_t flt_addr)
8393 ha->flt_region_nvram = start;
8394 break;
8395 case FLT_REG_IMG_PRI_27XX:
8396 - if (IS_QLA27XX(ha) && !IS_QLA28XX(ha))
8397 + if (IS_QLA27XX(ha) || IS_QLA28XX(ha))
8398 ha->flt_region_img_status_pri = start;
8399 break;
8400 case FLT_REG_IMG_SEC_27XX:
8401 @@ -1355,7 +1355,7 @@ next:
8402 flash_data_addr(ha, faddr), cpu_to_le32(*dwptr));
8403 if (ret) {
8404 ql_dbg(ql_dbg_user, vha, 0x7006,
8405 - "Failed slopw write %x (%x)\n", faddr, *dwptr);
8406 + "Failed slow write %x (%x)\n", faddr, *dwptr);
8407 break;
8408 }
8409 }
8410 diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
8411 index 0111c543f0e64..df598c377161d 100644
8412 --- a/drivers/scsi/qla2xxx/qla_target.c
8413 +++ b/drivers/scsi/qla2xxx/qla_target.c
8414 @@ -3251,6 +3251,7 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type,
8415 "RESET-RSP online/active/old-count/new-count = %d/%d/%d/%d.\n",
8416 vha->flags.online, qla2x00_reset_active(vha),
8417 cmd->reset_count, qpair->chip_reset);
8418 + res = 0;
8419 goto out_unmap_unlock;
8420 }
8421
8422 @@ -7083,8 +7084,7 @@ qlt_probe_one_stage1(struct scsi_qla_host *base_vha, struct qla_hw_data *ha)
8423 if (!QLA_TGT_MODE_ENABLED())
8424 return;
8425
8426 - if ((ql2xenablemsix == 0) || IS_QLA83XX(ha) || IS_QLA27XX(ha) ||
8427 - IS_QLA28XX(ha)) {
8428 + if (ha->mqenable || IS_QLA83XX(ha) || IS_QLA27XX(ha) || IS_QLA28XX(ha)) {
8429 ISP_ATIO_Q_IN(base_vha) = &ha->mqiobase->isp25mq.atio_q_in;
8430 ISP_ATIO_Q_OUT(base_vha) = &ha->mqiobase->isp25mq.atio_q_out;
8431 } else {
8432 diff --git a/drivers/scsi/zorro7xx.c b/drivers/scsi/zorro7xx.c
8433 index 27b9e2baab1a6..7acf9193a9e80 100644
8434 --- a/drivers/scsi/zorro7xx.c
8435 +++ b/drivers/scsi/zorro7xx.c
8436 @@ -159,6 +159,8 @@ static void zorro7xx_remove_one(struct zorro_dev *z)
8437 scsi_remove_host(host);
8438
8439 NCR_700_release(host);
8440 + if (host->base > 0x01000000)
8441 + iounmap(hostdata->base);
8442 kfree(hostdata);
8443 free_irq(host->irq, host);
8444 zorro_release_device(z);
8445 diff --git a/drivers/soc/qcom/qcom_aoss.c b/drivers/soc/qcom/qcom_aoss.c
8446 index 45c5aa712edac..f16d6ec780644 100644
8447 --- a/drivers/soc/qcom/qcom_aoss.c
8448 +++ b/drivers/soc/qcom/qcom_aoss.c
8449 @@ -544,7 +544,7 @@ static int qmp_probe(struct platform_device *pdev)
8450 }
8451
8452 irq = platform_get_irq(pdev, 0);
8453 - ret = devm_request_irq(&pdev->dev, irq, qmp_intr, IRQF_ONESHOT,
8454 + ret = devm_request_irq(&pdev->dev, irq, qmp_intr, 0,
8455 "aoss-qmp", qmp);
8456 if (ret < 0) {
8457 dev_err(&pdev->dev, "failed to request interrupt\n");
8458 diff --git a/drivers/soc/qcom/rpmpd.c b/drivers/soc/qcom/rpmpd.c
8459 index 3c1a55cf25d62..4715acfecff49 100644
8460 --- a/drivers/soc/qcom/rpmpd.c
8461 +++ b/drivers/soc/qcom/rpmpd.c
8462 @@ -362,6 +362,9 @@ static int rpmpd_probe(struct platform_device *pdev)
8463
8464 data->domains = devm_kcalloc(&pdev->dev, num, sizeof(*data->domains),
8465 GFP_KERNEL);
8466 + if (!data->domains)
8467 + return -ENOMEM;
8468 +
8469 data->num_domains = num;
8470
8471 for (i = 0; i < num; i++) {
8472 diff --git a/drivers/soc/ti/wkup_m3_ipc.c b/drivers/soc/ti/wkup_m3_ipc.c
8473 index e9ece45d7a333..ef3f95fefab58 100644
8474 --- a/drivers/soc/ti/wkup_m3_ipc.c
8475 +++ b/drivers/soc/ti/wkup_m3_ipc.c
8476 @@ -447,9 +447,9 @@ static int wkup_m3_ipc_probe(struct platform_device *pdev)
8477 }
8478
8479 irq = platform_get_irq(pdev, 0);
8480 - if (!irq) {
8481 + if (irq < 0) {
8482 dev_err(&pdev->dev, "no irq resource\n");
8483 - return -ENXIO;
8484 + return irq;
8485 }
8486
8487 ret = devm_request_irq(dev, irq, wkup_m3_txev_handler,
8488 diff --git a/drivers/spi/spi-bcm-qspi.c b/drivers/spi/spi-bcm-qspi.c
8489 index 3755be04346a6..d933a6eda5fdc 100644
8490 --- a/drivers/spi/spi-bcm-qspi.c
8491 +++ b/drivers/spi/spi-bcm-qspi.c
8492 @@ -960,7 +960,7 @@ static int bcm_qspi_exec_mem_op(struct spi_mem *mem,
8493 addr = op->addr.val;
8494 len = op->data.nbytes;
8495
8496 - if (bcm_qspi_bspi_ver_three(qspi) == true) {
8497 + if (has_bspi(qspi) && bcm_qspi_bspi_ver_three(qspi) == true) {
8498 /*
8499 * The address coming into this function is a raw flash offset.
8500 * But for BSPI <= V3, we need to convert it to a remapped BSPI
8501 @@ -979,7 +979,7 @@ static int bcm_qspi_exec_mem_op(struct spi_mem *mem,
8502 len < 4)
8503 mspi_read = true;
8504
8505 - if (mspi_read)
8506 + if (!has_bspi(qspi) || mspi_read)
8507 return bcm_qspi_mspi_exec_mem_op(spi, op);
8508
8509 ret = bcm_qspi_bspi_set_mode(qspi, op, 0);
8510 diff --git a/drivers/spi/spi-mxic.c b/drivers/spi/spi-mxic.c
8511 index eba706d5671e2..d0b5db88cd164 100644
8512 --- a/drivers/spi/spi-mxic.c
8513 +++ b/drivers/spi/spi-mxic.c
8514 @@ -304,25 +304,21 @@ static int mxic_spi_data_xfer(struct mxic_spi *mxic, const void *txbuf,
8515
8516 writel(data, mxic->regs + TXD(nbytes % 4));
8517
8518 + ret = readl_poll_timeout(mxic->regs + INT_STS, sts,
8519 + sts & INT_TX_EMPTY, 0, USEC_PER_SEC);
8520 + if (ret)
8521 + return ret;
8522 +
8523 + ret = readl_poll_timeout(mxic->regs + INT_STS, sts,
8524 + sts & INT_RX_NOT_EMPTY, 0,
8525 + USEC_PER_SEC);
8526 + if (ret)
8527 + return ret;
8528 +
8529 + data = readl(mxic->regs + RXD);
8530 if (rxbuf) {
8531 - ret = readl_poll_timeout(mxic->regs + INT_STS, sts,
8532 - sts & INT_TX_EMPTY, 0,
8533 - USEC_PER_SEC);
8534 - if (ret)
8535 - return ret;
8536 -
8537 - ret = readl_poll_timeout(mxic->regs + INT_STS, sts,
8538 - sts & INT_RX_NOT_EMPTY, 0,
8539 - USEC_PER_SEC);
8540 - if (ret)
8541 - return ret;
8542 -
8543 - data = readl(mxic->regs + RXD);
8544 data >>= (8 * (4 - nbytes));
8545 memcpy(rxbuf + pos, &data, nbytes);
8546 - WARN_ON(readl(mxic->regs + INT_STS) & INT_RX_NOT_EMPTY);
8547 - } else {
8548 - readl(mxic->regs + RXD);
8549 }
8550 WARN_ON(readl(mxic->regs + INT_STS) & INT_RX_NOT_EMPTY);
8551
8552 diff --git a/drivers/spi/spi-pxa2xx-pci.c b/drivers/spi/spi-pxa2xx-pci.c
8553 index aafac128bb5f1..4eb979a096c78 100644
8554 --- a/drivers/spi/spi-pxa2xx-pci.c
8555 +++ b/drivers/spi/spi-pxa2xx-pci.c
8556 @@ -74,14 +74,23 @@ static bool lpss_dma_filter(struct dma_chan *chan, void *param)
8557 return true;
8558 }
8559
8560 +static void lpss_dma_put_device(void *dma_dev)
8561 +{
8562 + pci_dev_put(dma_dev);
8563 +}
8564 +
8565 static int lpss_spi_setup(struct pci_dev *dev, struct pxa_spi_info *c)
8566 {
8567 struct pci_dev *dma_dev;
8568 + int ret;
8569
8570 c->num_chipselect = 1;
8571 c->max_clk_rate = 50000000;
8572
8573 dma_dev = pci_get_slot(dev->bus, PCI_DEVFN(PCI_SLOT(dev->devfn), 0));
8574 + ret = devm_add_action_or_reset(&dev->dev, lpss_dma_put_device, dma_dev);
8575 + if (ret)
8576 + return ret;
8577
8578 if (c->tx_param) {
8579 struct dw_dma_slave *slave = c->tx_param;
8580 @@ -105,8 +114,9 @@ static int lpss_spi_setup(struct pci_dev *dev, struct pxa_spi_info *c)
8581
8582 static int mrfld_spi_setup(struct pci_dev *dev, struct pxa_spi_info *c)
8583 {
8584 - struct pci_dev *dma_dev = pci_get_slot(dev->bus, PCI_DEVFN(21, 0));
8585 struct dw_dma_slave *tx, *rx;
8586 + struct pci_dev *dma_dev;
8587 + int ret;
8588
8589 switch (PCI_FUNC(dev->devfn)) {
8590 case 0:
8591 @@ -131,6 +141,11 @@ static int mrfld_spi_setup(struct pci_dev *dev, struct pxa_spi_info *c)
8592 return -ENODEV;
8593 }
8594
8595 + dma_dev = pci_get_slot(dev->bus, PCI_DEVFN(21, 0));
8596 + ret = devm_add_action_or_reset(&dev->dev, lpss_dma_put_device, dma_dev);
8597 + if (ret)
8598 + return ret;
8599 +
8600 tx = c->tx_param;
8601 tx->dma_dev = &dma_dev->dev;
8602
8603 diff --git a/drivers/spi/spi-tegra114.c b/drivers/spi/spi-tegra114.c
8604 index 594905bf89aa8..3f7a64b2a5d06 100644
8605 --- a/drivers/spi/spi-tegra114.c
8606 +++ b/drivers/spi/spi-tegra114.c
8607 @@ -1352,6 +1352,10 @@ static int tegra_spi_probe(struct platform_device *pdev)
8608 tspi->phys = r->start;
8609
8610 spi_irq = platform_get_irq(pdev, 0);
8611 + if (spi_irq < 0) {
8612 + ret = spi_irq;
8613 + goto exit_free_master;
8614 + }
8615 tspi->irq = spi_irq;
8616
8617 tspi->clk = devm_clk_get(&pdev->dev, "spi");
8618 diff --git a/drivers/spi/spi-tegra20-slink.c b/drivers/spi/spi-tegra20-slink.c
8619 index 9b59539c87359..e6b12f78c8f01 100644
8620 --- a/drivers/spi/spi-tegra20-slink.c
8621 +++ b/drivers/spi/spi-tegra20-slink.c
8622 @@ -1011,14 +1011,8 @@ static int tegra_slink_probe(struct platform_device *pdev)
8623 struct resource *r;
8624 int ret, spi_irq;
8625 const struct tegra_slink_chip_data *cdata = NULL;
8626 - const struct of_device_id *match;
8627
8628 - match = of_match_device(tegra_slink_of_match, &pdev->dev);
8629 - if (!match) {
8630 - dev_err(&pdev->dev, "Error: No device match found\n");
8631 - return -ENODEV;
8632 - }
8633 - cdata = match->data;
8634 + cdata = of_device_get_match_data(&pdev->dev);
8635
8636 master = spi_alloc_master(&pdev->dev, sizeof(*tspi));
8637 if (!master) {
8638 diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
8639 index ac05c9c864884..b18ae50db1f52 100644
8640 --- a/drivers/spi/spi.c
8641 +++ b/drivers/spi/spi.c
8642 @@ -844,10 +844,10 @@ int spi_map_buf(struct spi_controller *ctlr, struct device *dev,
8643 int i, ret;
8644
8645 if (vmalloced_buf || kmap_buf) {
8646 - desc_len = min_t(int, max_seg_size, PAGE_SIZE);
8647 + desc_len = min_t(unsigned long, max_seg_size, PAGE_SIZE);
8648 sgs = DIV_ROUND_UP(len + offset_in_page(buf), desc_len);
8649 } else if (virt_addr_valid(buf)) {
8650 - desc_len = min_t(int, max_seg_size, ctlr->max_dma_len);
8651 + desc_len = min_t(size_t, max_seg_size, ctlr->max_dma_len);
8652 sgs = DIV_ROUND_UP(len, desc_len);
8653 } else {
8654 return -EINVAL;
8655 diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c
8656 index 19a5f244dcae2..d8886c5c0d1f2 100644
8657 --- a/drivers/staging/iio/adc/ad7280a.c
8658 +++ b/drivers/staging/iio/adc/ad7280a.c
8659 @@ -107,9 +107,9 @@
8660 static unsigned int ad7280a_devaddr(unsigned int addr)
8661 {
8662 return ((addr & 0x1) << 4) |
8663 - ((addr & 0x2) << 3) |
8664 + ((addr & 0x2) << 2) |
8665 (addr & 0x4) |
8666 - ((addr & 0x8) >> 3) |
8667 + ((addr & 0x8) >> 2) |
8668 ((addr & 0x10) >> 4);
8669 }
8670
8671 diff --git a/drivers/staging/media/hantro/hantro_h1_jpeg_enc.c b/drivers/staging/media/hantro/hantro_h1_jpeg_enc.c
8672 index 8b76f1f13b062..e81a354b88720 100644
8673 --- a/drivers/staging/media/hantro/hantro_h1_jpeg_enc.c
8674 +++ b/drivers/staging/media/hantro/hantro_h1_jpeg_enc.c
8675 @@ -23,7 +23,7 @@ static void hantro_h1_set_src_img_ctrl(struct hantro_dev *vpu,
8676
8677 reg = H1_REG_IN_IMG_CTRL_ROW_LEN(pix_fmt->width)
8678 | H1_REG_IN_IMG_CTRL_OVRFLR_D4(0)
8679 - | H1_REG_IN_IMG_CTRL_OVRFLB_D4(0)
8680 + | H1_REG_IN_IMG_CTRL_OVRFLB(0)
8681 | H1_REG_IN_IMG_CTRL_FMT(ctx->vpu_src_fmt->enc_fmt);
8682 vepu_write_relaxed(vpu, reg, H1_REG_IN_IMG_CTRL);
8683 }
8684 diff --git a/drivers/staging/media/hantro/hantro_h1_regs.h b/drivers/staging/media/hantro/hantro_h1_regs.h
8685 index d6e9825bb5c7b..30e7e7b920b55 100644
8686 --- a/drivers/staging/media/hantro/hantro_h1_regs.h
8687 +++ b/drivers/staging/media/hantro/hantro_h1_regs.h
8688 @@ -47,7 +47,7 @@
8689 #define H1_REG_IN_IMG_CTRL 0x03c
8690 #define H1_REG_IN_IMG_CTRL_ROW_LEN(x) ((x) << 12)
8691 #define H1_REG_IN_IMG_CTRL_OVRFLR_D4(x) ((x) << 10)
8692 -#define H1_REG_IN_IMG_CTRL_OVRFLB_D4(x) ((x) << 6)
8693 +#define H1_REG_IN_IMG_CTRL_OVRFLB(x) ((x) << 6)
8694 #define H1_REG_IN_IMG_CTRL_FMT(x) ((x) << 2)
8695 #define H1_REG_ENC_CTRL0 0x040
8696 #define H1_REG_ENC_CTRL0_INIT_QP(x) ((x) << 26)
8697 diff --git a/drivers/staging/mt7621-dts/gbpc1.dts b/drivers/staging/mt7621-dts/gbpc1.dts
8698 index 1fb560ff059c8..1713283e60d4e 100644
8699 --- a/drivers/staging/mt7621-dts/gbpc1.dts
8700 +++ b/drivers/staging/mt7621-dts/gbpc1.dts
8701 @@ -11,7 +11,8 @@
8702
8703 memory@0 {
8704 device_type = "memory";
8705 - reg = <0x0 0x1c000000>, <0x20000000 0x4000000>;
8706 + reg = <0x00000000 0x1c000000>,
8707 + <0x20000000 0x04000000>;
8708 };
8709
8710 chosen {
8711 @@ -37,24 +38,16 @@
8712 gpio-leds {
8713 compatible = "gpio-leds";
8714
8715 - system {
8716 - label = "gb-pc1:green:system";
8717 + power {
8718 + label = "green:power";
8719 gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
8720 + linux,default-trigger = "default-on";
8721 };
8722
8723 - status {
8724 - label = "gb-pc1:green:status";
8725 + system {
8726 + label = "green:system";
8727 gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
8728 - };
8729 -
8730 - lan1 {
8731 - label = "gb-pc1:green:lan1";
8732 - gpios = <&gpio 24 GPIO_ACTIVE_LOW>;
8733 - };
8734 -
8735 - lan2 {
8736 - label = "gb-pc1:green:lan2";
8737 - gpios = <&gpio 25 GPIO_ACTIVE_LOW>;
8738 + linux,default-trigger = "disk-activity";
8739 };
8740 };
8741 };
8742 @@ -94,9 +87,8 @@
8743
8744 partition@50000 {
8745 label = "firmware";
8746 - reg = <0x50000 0x1FB0000>;
8747 + reg = <0x50000 0x1fb0000>;
8748 };
8749 -
8750 };
8751 };
8752
8753 @@ -118,9 +110,12 @@
8754 };
8755
8756 &pinctrl {
8757 - state_default: pinctrl0 {
8758 - default_gpio: gpio {
8759 - groups = "wdt", "rgmii2", "uart3";
8760 + pinctrl-names = "default";
8761 + pinctrl-0 = <&state_default>;
8762 +
8763 + state_default: state-default {
8764 + gpio-pinmux {
8765 + groups = "rgmii2", "uart3", "wdt";
8766 function = "gpio";
8767 };
8768 };
8769 @@ -129,12 +124,13 @@
8770 &switch0 {
8771 ports {
8772 port@0 {
8773 + status = "okay";
8774 label = "ethblack";
8775 - status = "ok";
8776 };
8777 +
8778 port@4 {
8779 + status = "okay";
8780 label = "ethblue";
8781 - status = "ok";
8782 };
8783 };
8784 };
8785 diff --git a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
8786 index a31163547fbaa..3a1a28a79d463 100644
8787 --- a/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
8788 +++ b/drivers/thermal/intel/int340x_thermal/int3400_thermal.c
8789 @@ -49,7 +49,7 @@ struct int3400_thermal_priv {
8790 struct art *arts;
8791 int trt_count;
8792 struct trt *trts;
8793 - u8 uuid_bitmap;
8794 + u32 uuid_bitmap;
8795 int rel_misc_dev_res;
8796 int current_uuid_index;
8797 };
8798 diff --git a/drivers/tty/hvc/hvc_iucv.c b/drivers/tty/hvc/hvc_iucv.c
8799 index 2af1e5751bd63..796fbff623f6e 100644
8800 --- a/drivers/tty/hvc/hvc_iucv.c
8801 +++ b/drivers/tty/hvc/hvc_iucv.c
8802 @@ -1470,7 +1470,9 @@ out_error:
8803 */
8804 static int __init hvc_iucv_config(char *val)
8805 {
8806 - return kstrtoul(val, 10, &hvc_iucv_devices);
8807 + if (kstrtoul(val, 10, &hvc_iucv_devices))
8808 + pr_warn("hvc_iucv= invalid parameter value '%s'\n", val);
8809 + return 1;
8810 }
8811
8812
8813 diff --git a/drivers/tty/mxser.c b/drivers/tty/mxser.c
8814 index 9d00ff5ef9611..085dc8dd1327b 100644
8815 --- a/drivers/tty/mxser.c
8816 +++ b/drivers/tty/mxser.c
8817 @@ -861,6 +861,7 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty)
8818 struct mxser_port *info = container_of(port, struct mxser_port, port);
8819 unsigned long page;
8820 unsigned long flags;
8821 + int ret;
8822
8823 page = __get_free_page(GFP_KERNEL);
8824 if (!page)
8825 @@ -870,9 +871,9 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty)
8826
8827 if (!info->ioaddr || !info->type) {
8828 set_bit(TTY_IO_ERROR, &tty->flags);
8829 - free_page(page);
8830 spin_unlock_irqrestore(&info->slock, flags);
8831 - return 0;
8832 + ret = 0;
8833 + goto err_free_xmit;
8834 }
8835 info->port.xmit_buf = (unsigned char *) page;
8836
8837 @@ -898,8 +899,10 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty)
8838 if (capable(CAP_SYS_ADMIN)) {
8839 set_bit(TTY_IO_ERROR, &tty->flags);
8840 return 0;
8841 - } else
8842 - return -ENODEV;
8843 + }
8844 +
8845 + ret = -ENODEV;
8846 + goto err_free_xmit;
8847 }
8848
8849 /*
8850 @@ -944,6 +947,10 @@ static int mxser_activate(struct tty_port *port, struct tty_struct *tty)
8851 spin_unlock_irqrestore(&info->slock, flags);
8852
8853 return 0;
8854 +err_free_xmit:
8855 + free_page(page);
8856 + info->port.xmit_buf = NULL;
8857 + return ret;
8858 }
8859
8860 /*
8861 diff --git a/drivers/tty/serial/8250/8250_mid.c b/drivers/tty/serial/8250/8250_mid.c
8862 index efa0515139f8e..e6c1791609ddf 100644
8863 --- a/drivers/tty/serial/8250/8250_mid.c
8864 +++ b/drivers/tty/serial/8250/8250_mid.c
8865 @@ -73,6 +73,11 @@ static int pnw_setup(struct mid8250 *mid, struct uart_port *p)
8866 return 0;
8867 }
8868
8869 +static void pnw_exit(struct mid8250 *mid)
8870 +{
8871 + pci_dev_put(mid->dma_dev);
8872 +}
8873 +
8874 static int tng_handle_irq(struct uart_port *p)
8875 {
8876 struct mid8250 *mid = p->private_data;
8877 @@ -124,6 +129,11 @@ static int tng_setup(struct mid8250 *mid, struct uart_port *p)
8878 return 0;
8879 }
8880
8881 +static void tng_exit(struct mid8250 *mid)
8882 +{
8883 + pci_dev_put(mid->dma_dev);
8884 +}
8885 +
8886 static int dnv_handle_irq(struct uart_port *p)
8887 {
8888 struct mid8250 *mid = p->private_data;
8889 @@ -330,9 +340,9 @@ static int mid8250_probe(struct pci_dev *pdev, const struct pci_device_id *id)
8890
8891 pci_set_drvdata(pdev, mid);
8892 return 0;
8893 +
8894 err:
8895 - if (mid->board->exit)
8896 - mid->board->exit(mid);
8897 + mid->board->exit(mid);
8898 return ret;
8899 }
8900
8901 @@ -342,8 +352,7 @@ static void mid8250_remove(struct pci_dev *pdev)
8902
8903 serial8250_unregister_port(mid->line);
8904
8905 - if (mid->board->exit)
8906 - mid->board->exit(mid);
8907 + mid->board->exit(mid);
8908 }
8909
8910 static const struct mid8250_board pnw_board = {
8911 @@ -351,6 +360,7 @@ static const struct mid8250_board pnw_board = {
8912 .freq = 50000000,
8913 .base_baud = 115200,
8914 .setup = pnw_setup,
8915 + .exit = pnw_exit,
8916 };
8917
8918 static const struct mid8250_board tng_board = {
8919 @@ -358,6 +368,7 @@ static const struct mid8250_board tng_board = {
8920 .freq = 38400000,
8921 .base_baud = 1843200,
8922 .setup = tng_setup,
8923 + .exit = tng_exit,
8924 };
8925
8926 static const struct mid8250_board dnv_board = {
8927 diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
8928 index 777ef1a9591c0..87567515591e1 100644
8929 --- a/drivers/tty/serial/8250/8250_port.c
8930 +++ b/drivers/tty/serial/8250/8250_port.c
8931 @@ -1545,6 +1545,18 @@ static inline void start_tx_rs485(struct uart_port *port)
8932 if (!(up->port.rs485.flags & SER_RS485_RX_DURING_TX))
8933 serial8250_stop_rx(&up->port);
8934
8935 + /*
8936 + * While serial8250_em485_handle_stop_tx() is a noop if
8937 + * em485->active_timer != &em485->stop_tx_timer, it might happen that
8938 + * the timer is still armed and triggers only after the current bunch of
8939 + * chars is send and em485->active_timer == &em485->stop_tx_timer again.
8940 + * So cancel the timer. There is still a theoretical race condition if
8941 + * the timer is already running and only comes around to check for
8942 + * em485->active_timer when &em485->stop_tx_timer is armed again.
8943 + */
8944 + if (em485->active_timer == &em485->stop_tx_timer)
8945 + hrtimer_try_to_cancel(&em485->stop_tx_timer);
8946 +
8947 em485->active_timer = NULL;
8948
8949 mcr = serial8250_in_MCR(up);
8950 diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c
8951 index f5608ad68ae1a..6d4792ec9e5fa 100644
8952 --- a/drivers/tty/serial/kgdboc.c
8953 +++ b/drivers/tty/serial/kgdboc.c
8954 @@ -391,16 +391,16 @@ static int kgdboc_option_setup(char *opt)
8955 {
8956 if (!opt) {
8957 pr_err("config string not provided\n");
8958 - return -EINVAL;
8959 + return 1;
8960 }
8961
8962 if (strlen(opt) >= MAX_CONFIG_LEN) {
8963 pr_err("config string too long\n");
8964 - return -ENOSPC;
8965 + return 1;
8966 }
8967 strcpy(config, opt);
8968
8969 - return 0;
8970 + return 1;
8971 }
8972
8973 __setup("kgdboc=", kgdboc_option_setup);
8974 diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
8975 index c7683beb3412a..6040d5a6139ab 100644
8976 --- a/drivers/tty/serial/samsung.c
8977 +++ b/drivers/tty/serial/samsung.c
8978 @@ -761,11 +761,8 @@ static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)
8979 goto out;
8980 }
8981
8982 - if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) {
8983 - spin_unlock(&port->lock);
8984 + if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
8985 uart_write_wakeup(port);
8986 - spin_lock(&port->lock);
8987 - }
8988
8989 if (uart_circ_empty(xmit))
8990 s3c24xx_serial_stop_tx(port);
8991 diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
8992 index e8acad49a53a8..81ee1cd794f7d 100644
8993 --- a/drivers/usb/dwc3/dwc3-omap.c
8994 +++ b/drivers/usb/dwc3/dwc3-omap.c
8995 @@ -242,7 +242,7 @@ static void dwc3_omap_set_mailbox(struct dwc3_omap *omap,
8996 break;
8997
8998 case OMAP_DWC3_ID_FLOAT:
8999 - if (omap->vbus_reg)
9000 + if (omap->vbus_reg && regulator_is_enabled(omap->vbus_reg))
9001 regulator_disable(omap->vbus_reg);
9002 val = dwc3_omap_read_utmi_ctrl(omap);
9003 val |= USBOTGSS_UTMI_OTG_CTRL_IDDIG;
9004 diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
9005 index 774ccaa5aceea..1962140a59f20 100644
9006 --- a/drivers/usb/host/ehci-pci.c
9007 +++ b/drivers/usb/host/ehci-pci.c
9008 @@ -21,6 +21,9 @@ static const char hcd_name[] = "ehci-pci";
9009 /* defined here to avoid adding to pci_ids.h for single instance use */
9010 #define PCI_DEVICE_ID_INTEL_CE4100_USB 0x2e70
9011
9012 +#define PCI_VENDOR_ID_ASPEED 0x1a03
9013 +#define PCI_DEVICE_ID_ASPEED_EHCI 0x2603
9014 +
9015 /*-------------------------------------------------------------------------*/
9016 #define PCI_DEVICE_ID_INTEL_QUARK_X1000_SOC 0x0939
9017 static inline bool is_intel_quark_x1000(struct pci_dev *pdev)
9018 @@ -223,6 +226,12 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
9019 ehci->has_synopsys_hc_bug = 1;
9020 }
9021 break;
9022 + case PCI_VENDOR_ID_ASPEED:
9023 + if (pdev->device == PCI_DEVICE_ID_ASPEED_EHCI) {
9024 + ehci_info(ehci, "applying Aspeed HC workaround\n");
9025 + ehci->is_aspeed = 1;
9026 + }
9027 + break;
9028 }
9029
9030 /* optional debug port, normally in the first BAR */
9031 diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
9032 index 48832f7f2fc3c..db65e1ad00deb 100644
9033 --- a/drivers/usb/host/xhci-hub.c
9034 +++ b/drivers/usb/host/xhci-hub.c
9035 @@ -674,7 +674,7 @@ static int xhci_exit_test_mode(struct xhci_hcd *xhci)
9036 }
9037 pm_runtime_allow(xhci_to_hcd(xhci)->self.controller);
9038 xhci->test_mode = 0;
9039 - return xhci_reset(xhci);
9040 + return xhci_reset(xhci, XHCI_RESET_SHORT_USEC);
9041 }
9042
9043 void xhci_set_link_state(struct xhci_hcd *xhci, struct xhci_port *port,
9044 @@ -1000,6 +1000,9 @@ static void xhci_get_usb2_port_status(struct xhci_port *port, u32 *status,
9045 if (link_state == XDEV_U2)
9046 *status |= USB_PORT_STAT_L1;
9047 if (link_state == XDEV_U0) {
9048 + if (bus_state->resume_done[portnum])
9049 + usb_hcd_end_port_resume(&port->rhub->hcd->self,
9050 + portnum);
9051 bus_state->resume_done[portnum] = 0;
9052 clear_bit(portnum, &bus_state->resuming_ports);
9053 if (bus_state->suspended_ports & (1 << portnum)) {
9054 diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
9055 index 160caef09c5ea..ef23a69c6553a 100644
9056 --- a/drivers/usb/host/xhci-mem.c
9057 +++ b/drivers/usb/host/xhci-mem.c
9058 @@ -2583,7 +2583,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
9059
9060 fail:
9061 xhci_halt(xhci);
9062 - xhci_reset(xhci);
9063 + xhci_reset(xhci, XHCI_RESET_SHORT_USEC);
9064 xhci_mem_cleanup(xhci);
9065 return -ENOMEM;
9066 }
9067 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
9068 index 8f029d44e9c9e..476dc6abd5a21 100644
9069 --- a/drivers/usb/host/xhci.c
9070 +++ b/drivers/usb/host/xhci.c
9071 @@ -66,7 +66,7 @@ static bool td_on_ring(struct xhci_td *td, struct xhci_ring *ring)
9072 * handshake done). There are two failure modes: "usec" have passed (major
9073 * hardware flakeout), or the register reads as all-ones (hardware removed).
9074 */
9075 -int xhci_handshake(void __iomem *ptr, u32 mask, u32 done, int usec)
9076 +int xhci_handshake(void __iomem *ptr, u32 mask, u32 done, u64 timeout_us)
9077 {
9078 u32 result;
9079 int ret;
9080 @@ -74,7 +74,7 @@ int xhci_handshake(void __iomem *ptr, u32 mask, u32 done, int usec)
9081 ret = readl_poll_timeout_atomic(ptr, result,
9082 (result & mask) == done ||
9083 result == U32_MAX,
9084 - 1, usec);
9085 + 1, timeout_us);
9086 if (result == U32_MAX) /* card removed */
9087 return -ENODEV;
9088
9089 @@ -163,7 +163,7 @@ int xhci_start(struct xhci_hcd *xhci)
9090 * Transactions will be terminated immediately, and operational registers
9091 * will be set to their defaults.
9092 */
9093 -int xhci_reset(struct xhci_hcd *xhci)
9094 +int xhci_reset(struct xhci_hcd *xhci, u64 timeout_us)
9095 {
9096 u32 command;
9097 u32 state;
9098 @@ -196,8 +196,7 @@ int xhci_reset(struct xhci_hcd *xhci)
9099 if (xhci->quirks & XHCI_INTEL_HOST)
9100 udelay(1000);
9101
9102 - ret = xhci_handshake(&xhci->op_regs->command,
9103 - CMD_RESET, 0, 10 * 1000 * 1000);
9104 + ret = xhci_handshake(&xhci->op_regs->command, CMD_RESET, 0, timeout_us);
9105 if (ret)
9106 return ret;
9107
9108 @@ -210,8 +209,7 @@ int xhci_reset(struct xhci_hcd *xhci)
9109 * xHCI cannot write to any doorbells or operational registers other
9110 * than status until the "Controller Not Ready" flag is cleared.
9111 */
9112 - ret = xhci_handshake(&xhci->op_regs->status,
9113 - STS_CNR, 0, 10 * 1000 * 1000);
9114 + ret = xhci_handshake(&xhci->op_regs->status, STS_CNR, 0, timeout_us);
9115
9116 xhci->usb2_rhub.bus_state.port_c_suspend = 0;
9117 xhci->usb2_rhub.bus_state.suspended_ports = 0;
9118 @@ -732,7 +730,7 @@ static void xhci_stop(struct usb_hcd *hcd)
9119 xhci->xhc_state |= XHCI_STATE_HALTED;
9120 xhci->cmd_ring_state = CMD_RING_STATE_STOPPED;
9121 xhci_halt(xhci);
9122 - xhci_reset(xhci);
9123 + xhci_reset(xhci, XHCI_RESET_SHORT_USEC);
9124 spin_unlock_irq(&xhci->lock);
9125
9126 xhci_cleanup_msix(xhci);
9127 @@ -785,7 +783,7 @@ void xhci_shutdown(struct usb_hcd *hcd)
9128 xhci_halt(xhci);
9129 /* Workaround for spurious wakeups at shutdown with HSW */
9130 if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
9131 - xhci_reset(xhci);
9132 + xhci_reset(xhci, XHCI_RESET_SHORT_USEC);
9133 spin_unlock_irq(&xhci->lock);
9134
9135 xhci_cleanup_msix(xhci);
9136 @@ -1170,7 +1168,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated)
9137 xhci_dbg(xhci, "Stop HCD\n");
9138 xhci_halt(xhci);
9139 xhci_zero_64b_regs(xhci);
9140 - retval = xhci_reset(xhci);
9141 + retval = xhci_reset(xhci, XHCI_RESET_LONG_USEC);
9142 spin_unlock_irq(&xhci->lock);
9143 if (retval)
9144 return retval;
9145 @@ -5272,7 +5270,7 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
9146
9147 xhci_dbg(xhci, "Resetting HCD\n");
9148 /* Reset the internal HC memory state and registers. */
9149 - retval = xhci_reset(xhci);
9150 + retval = xhci_reset(xhci, XHCI_RESET_LONG_USEC);
9151 if (retval)
9152 return retval;
9153 xhci_dbg(xhci, "Reset complete\n");
9154 diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
9155 index 02df309e44093..4b05d767e08f7 100644
9156 --- a/drivers/usb/host/xhci.h
9157 +++ b/drivers/usb/host/xhci.h
9158 @@ -229,6 +229,9 @@ struct xhci_op_regs {
9159 #define CMD_ETE (1 << 14)
9160 /* bits 15:31 are reserved (and should be preserved on writes). */
9161
9162 +#define XHCI_RESET_LONG_USEC (10 * 1000 * 1000)
9163 +#define XHCI_RESET_SHORT_USEC (250 * 1000)
9164 +
9165 /* IMAN - Interrupt Management Register */
9166 #define IMAN_IE (1 << 1)
9167 #define IMAN_IP (1 << 0)
9168 @@ -2061,11 +2064,11 @@ void xhci_free_container_ctx(struct xhci_hcd *xhci,
9169
9170 /* xHCI host controller glue */
9171 typedef void (*xhci_get_quirks_t)(struct device *, struct xhci_hcd *);
9172 -int xhci_handshake(void __iomem *ptr, u32 mask, u32 done, int usec);
9173 +int xhci_handshake(void __iomem *ptr, u32 mask, u32 done, u64 timeout_us);
9174 void xhci_quiesce(struct xhci_hcd *xhci);
9175 int xhci_halt(struct xhci_hcd *xhci);
9176 int xhci_start(struct xhci_hcd *xhci);
9177 -int xhci_reset(struct xhci_hcd *xhci);
9178 +int xhci_reset(struct xhci_hcd *xhci, u64 timeout_us);
9179 int xhci_run(struct usb_hcd *hcd);
9180 int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks);
9181 void xhci_shutdown(struct usb_hcd *hcd);
9182 @@ -2449,6 +2452,8 @@ static inline const char *xhci_decode_ctrl_ctx(unsigned long drop,
9183 unsigned int bit;
9184 int ret = 0;
9185
9186 + str[0] = '\0';
9187 +
9188 if (drop) {
9189 ret = sprintf(str, "Drop:");
9190 for_each_set_bit(bit, &drop, 32)
9191 diff --git a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
9192 index 67279c6bce338..31ad8682ad9b8 100644
9193 --- a/drivers/usb/serial/Kconfig
9194 +++ b/drivers/usb/serial/Kconfig
9195 @@ -66,6 +66,7 @@ config USB_SERIAL_SIMPLE
9196 - Libtransistor USB console
9197 - a number of Motorola phones
9198 - Motorola Tetra devices
9199 + - Nokia mobile phones
9200 - Novatel Wireless GPS receivers
9201 - Siemens USB/MPI adapter.
9202 - ViVOtech ViVOpay USB device.
9203 diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
9204 index 9600cee957697..2a91219dee7e6 100644
9205 --- a/drivers/usb/serial/pl2303.c
9206 +++ b/drivers/usb/serial/pl2303.c
9207 @@ -110,6 +110,7 @@ static const struct usb_device_id id_table[] = {
9208 { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530GC_PRODUCT_ID) },
9209 { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) },
9210 { USB_DEVICE(AT_VENDOR_ID, AT_VTKIT3_PRODUCT_ID) },
9211 + { USB_DEVICE(IBM_VENDOR_ID, IBM_PRODUCT_ID) },
9212 { } /* Terminating entry */
9213 };
9214
9215 diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h
9216 index 3e5442573fe4e..15f746e977a71 100644
9217 --- a/drivers/usb/serial/pl2303.h
9218 +++ b/drivers/usb/serial/pl2303.h
9219 @@ -29,6 +29,9 @@
9220 #define ATEN_PRODUCT_UC232B 0x2022
9221 #define ATEN_PRODUCT_ID2 0x2118
9222
9223 +#define IBM_VENDOR_ID 0x04b3
9224 +#define IBM_PRODUCT_ID 0x4016
9225 +
9226 #define IODATA_VENDOR_ID 0x04bb
9227 #define IODATA_PRODUCT_ID 0x0a03
9228 #define IODATA_PRODUCT_ID_RSAQ5 0x0a0e
9229 diff --git a/drivers/usb/serial/usb-serial-simple.c b/drivers/usb/serial/usb-serial-simple.c
9230 index bd23a7cb1be2b..4c6747889a194 100644
9231 --- a/drivers/usb/serial/usb-serial-simple.c
9232 +++ b/drivers/usb/serial/usb-serial-simple.c
9233 @@ -91,6 +91,11 @@ DEVICE(moto_modem, MOTO_IDS);
9234 { USB_DEVICE(0x0cad, 0x9016) } /* TPG2200 */
9235 DEVICE(motorola_tetra, MOTOROLA_TETRA_IDS);
9236
9237 +/* Nokia mobile phone driver */
9238 +#define NOKIA_IDS() \
9239 + { USB_DEVICE(0x0421, 0x069a) } /* Nokia 130 (RM-1035) */
9240 +DEVICE(nokia, NOKIA_IDS);
9241 +
9242 /* Novatel Wireless GPS driver */
9243 #define NOVATEL_IDS() \
9244 { USB_DEVICE(0x09d7, 0x0100) } /* NovAtel FlexPack GPS */
9245 @@ -123,6 +128,7 @@ static struct usb_serial_driver * const serial_drivers[] = {
9246 &vivopay_device,
9247 &moto_modem_device,
9248 &motorola_tetra_device,
9249 + &nokia_device,
9250 &novatel_gps_device,
9251 &hp4x_device,
9252 &suunto_device,
9253 @@ -140,6 +146,7 @@ static const struct usb_device_id id_table[] = {
9254 VIVOPAY_IDS(),
9255 MOTO_IDS(),
9256 MOTOROLA_TETRA_IDS(),
9257 + NOKIA_IDS(),
9258 NOVATEL_IDS(),
9259 HP4X_IDS(),
9260 SUUNTO_IDS(),
9261 diff --git a/drivers/usb/storage/ene_ub6250.c b/drivers/usb/storage/ene_ub6250.c
9262 index 8b1b730654218..9c984f3c7248a 100644
9263 --- a/drivers/usb/storage/ene_ub6250.c
9264 +++ b/drivers/usb/storage/ene_ub6250.c
9265 @@ -237,36 +237,33 @@ static struct us_unusual_dev ene_ub6250_unusual_dev_list[] = {
9266 #define memstick_logaddr(logadr1, logadr0) ((((u16)(logadr1)) << 8) | (logadr0))
9267
9268
9269 -struct SD_STATUS {
9270 - u8 Insert:1;
9271 - u8 Ready:1;
9272 - u8 MediaChange:1;
9273 - u8 IsMMC:1;
9274 - u8 HiCapacity:1;
9275 - u8 HiSpeed:1;
9276 - u8 WtP:1;
9277 - u8 Reserved:1;
9278 -};
9279 -
9280 -struct MS_STATUS {
9281 - u8 Insert:1;
9282 - u8 Ready:1;
9283 - u8 MediaChange:1;
9284 - u8 IsMSPro:1;
9285 - u8 IsMSPHG:1;
9286 - u8 Reserved1:1;
9287 - u8 WtP:1;
9288 - u8 Reserved2:1;
9289 -};
9290 -
9291 -struct SM_STATUS {
9292 - u8 Insert:1;
9293 - u8 Ready:1;
9294 - u8 MediaChange:1;
9295 - u8 Reserved:3;
9296 - u8 WtP:1;
9297 - u8 IsMS:1;
9298 -};
9299 +/* SD_STATUS bits */
9300 +#define SD_Insert BIT(0)
9301 +#define SD_Ready BIT(1)
9302 +#define SD_MediaChange BIT(2)
9303 +#define SD_IsMMC BIT(3)
9304 +#define SD_HiCapacity BIT(4)
9305 +#define SD_HiSpeed BIT(5)
9306 +#define SD_WtP BIT(6)
9307 + /* Bit 7 reserved */
9308 +
9309 +/* MS_STATUS bits */
9310 +#define MS_Insert BIT(0)
9311 +#define MS_Ready BIT(1)
9312 +#define MS_MediaChange BIT(2)
9313 +#define MS_IsMSPro BIT(3)
9314 +#define MS_IsMSPHG BIT(4)
9315 + /* Bit 5 reserved */
9316 +#define MS_WtP BIT(6)
9317 + /* Bit 7 reserved */
9318 +
9319 +/* SM_STATUS bits */
9320 +#define SM_Insert BIT(0)
9321 +#define SM_Ready BIT(1)
9322 +#define SM_MediaChange BIT(2)
9323 + /* Bits 3-5 reserved */
9324 +#define SM_WtP BIT(6)
9325 +#define SM_IsMS BIT(7)
9326
9327 struct ms_bootblock_cis {
9328 u8 bCistplDEVICE[6]; /* 0 */
9329 @@ -437,9 +434,9 @@ struct ene_ub6250_info {
9330 u8 *bbuf;
9331
9332 /* for 6250 code */
9333 - struct SD_STATUS SD_Status;
9334 - struct MS_STATUS MS_Status;
9335 - struct SM_STATUS SM_Status;
9336 + u8 SD_Status;
9337 + u8 MS_Status;
9338 + u8 SM_Status;
9339
9340 /* ----- SD Control Data ---------------- */
9341 /*SD_REGISTER SD_Regs; */
9342 @@ -602,7 +599,7 @@ static int sd_scsi_test_unit_ready(struct us_data *us, struct scsi_cmnd *srb)
9343 {
9344 struct ene_ub6250_info *info = (struct ene_ub6250_info *) us->extra;
9345
9346 - if (info->SD_Status.Insert && info->SD_Status.Ready)
9347 + if ((info->SD_Status & SD_Insert) && (info->SD_Status & SD_Ready))
9348 return USB_STOR_TRANSPORT_GOOD;
9349 else {
9350 ene_sd_init(us);
9351 @@ -622,7 +619,7 @@ static int sd_scsi_mode_sense(struct us_data *us, struct scsi_cmnd *srb)
9352 0x0b, 0x00, 0x80, 0x08, 0x00, 0x00,
9353 0x71, 0xc0, 0x00, 0x00, 0x02, 0x00 };
9354
9355 - if (info->SD_Status.WtP)
9356 + if (info->SD_Status & SD_WtP)
9357 usb_stor_set_xfer_buf(mediaWP, 12, srb);
9358 else
9359 usb_stor_set_xfer_buf(mediaNoWP, 12, srb);
9360 @@ -641,9 +638,9 @@ static int sd_scsi_read_capacity(struct us_data *us, struct scsi_cmnd *srb)
9361 struct ene_ub6250_info *info = (struct ene_ub6250_info *) us->extra;
9362
9363 usb_stor_dbg(us, "sd_scsi_read_capacity\n");
9364 - if (info->SD_Status.HiCapacity) {
9365 + if (info->SD_Status & SD_HiCapacity) {
9366 bl_len = 0x200;
9367 - if (info->SD_Status.IsMMC)
9368 + if (info->SD_Status & SD_IsMMC)
9369 bl_num = info->HC_C_SIZE-1;
9370 else
9371 bl_num = (info->HC_C_SIZE + 1) * 1024 - 1;
9372 @@ -693,7 +690,7 @@ static int sd_scsi_read(struct us_data *us, struct scsi_cmnd *srb)
9373 return USB_STOR_TRANSPORT_ERROR;
9374 }
9375
9376 - if (info->SD_Status.HiCapacity)
9377 + if (info->SD_Status & SD_HiCapacity)
9378 bnByte = bn;
9379
9380 /* set up the command wrapper */
9381 @@ -733,7 +730,7 @@ static int sd_scsi_write(struct us_data *us, struct scsi_cmnd *srb)
9382 return USB_STOR_TRANSPORT_ERROR;
9383 }
9384
9385 - if (info->SD_Status.HiCapacity)
9386 + if (info->SD_Status & SD_HiCapacity)
9387 bnByte = bn;
9388
9389 /* set up the command wrapper */
9390 @@ -1455,7 +1452,7 @@ static int ms_scsi_test_unit_ready(struct us_data *us, struct scsi_cmnd *srb)
9391 struct ene_ub6250_info *info = (struct ene_ub6250_info *)(us->extra);
9392
9393 /* pr_info("MS_SCSI_Test_Unit_Ready\n"); */
9394 - if (info->MS_Status.Insert && info->MS_Status.Ready) {
9395 + if ((info->MS_Status & MS_Insert) && (info->MS_Status & MS_Ready)) {
9396 return USB_STOR_TRANSPORT_GOOD;
9397 } else {
9398 ene_ms_init(us);
9399 @@ -1475,7 +1472,7 @@ static int ms_scsi_mode_sense(struct us_data *us, struct scsi_cmnd *srb)
9400 0x0b, 0x00, 0x80, 0x08, 0x00, 0x00,
9401 0x71, 0xc0, 0x00, 0x00, 0x02, 0x00 };
9402
9403 - if (info->MS_Status.WtP)
9404 + if (info->MS_Status & MS_WtP)
9405 usb_stor_set_xfer_buf(mediaWP, 12, srb);
9406 else
9407 usb_stor_set_xfer_buf(mediaNoWP, 12, srb);
9408 @@ -1494,7 +1491,7 @@ static int ms_scsi_read_capacity(struct us_data *us, struct scsi_cmnd *srb)
9409
9410 usb_stor_dbg(us, "ms_scsi_read_capacity\n");
9411 bl_len = 0x200;
9412 - if (info->MS_Status.IsMSPro)
9413 + if (info->MS_Status & MS_IsMSPro)
9414 bl_num = info->MSP_TotalBlock - 1;
9415 else
9416 bl_num = info->MS_Lib.NumberOfLogBlock * info->MS_Lib.blockSize * 2 - 1;
9417 @@ -1649,7 +1646,7 @@ static int ms_scsi_read(struct us_data *us, struct scsi_cmnd *srb)
9418 if (bn > info->bl_num)
9419 return USB_STOR_TRANSPORT_ERROR;
9420
9421 - if (info->MS_Status.IsMSPro) {
9422 + if (info->MS_Status & MS_IsMSPro) {
9423 result = ene_load_bincode(us, MSP_RW_PATTERN);
9424 if (result != USB_STOR_XFER_GOOD) {
9425 usb_stor_dbg(us, "Load MPS RW pattern Fail !!\n");
9426 @@ -1750,7 +1747,7 @@ static int ms_scsi_write(struct us_data *us, struct scsi_cmnd *srb)
9427 if (bn > info->bl_num)
9428 return USB_STOR_TRANSPORT_ERROR;
9429
9430 - if (info->MS_Status.IsMSPro) {
9431 + if (info->MS_Status & MS_IsMSPro) {
9432 result = ene_load_bincode(us, MSP_RW_PATTERN);
9433 if (result != USB_STOR_XFER_GOOD) {
9434 pr_info("Load MSP RW pattern Fail !!\n");
9435 @@ -1858,12 +1855,12 @@ static int ene_get_card_status(struct us_data *us, u8 *buf)
9436
9437 tmpreg = (u16) reg4b;
9438 reg4b = *(u32 *)(&buf[0x14]);
9439 - if (info->SD_Status.HiCapacity && !info->SD_Status.IsMMC)
9440 + if ((info->SD_Status & SD_HiCapacity) && !(info->SD_Status & SD_IsMMC))
9441 info->HC_C_SIZE = (reg4b >> 8) & 0x3fffff;
9442
9443 info->SD_C_SIZE = ((tmpreg & 0x03) << 10) | (u16)(reg4b >> 22);
9444 info->SD_C_SIZE_MULT = (u8)(reg4b >> 7) & 0x07;
9445 - if (info->SD_Status.HiCapacity && info->SD_Status.IsMMC)
9446 + if ((info->SD_Status & SD_HiCapacity) && (info->SD_Status & SD_IsMMC))
9447 info->HC_C_SIZE = *(u32 *)(&buf[0x100]);
9448
9449 if (info->SD_READ_BL_LEN > SD_BLOCK_LEN) {
9450 @@ -2075,6 +2072,7 @@ static int ene_ms_init(struct us_data *us)
9451 u16 MSP_BlockSize, MSP_UserAreaBlocks;
9452 struct ene_ub6250_info *info = (struct ene_ub6250_info *) us->extra;
9453 u8 *bbuf = info->bbuf;
9454 + unsigned int s;
9455
9456 printk(KERN_INFO "transport --- ENE_MSInit\n");
9457
9458 @@ -2099,15 +2097,16 @@ static int ene_ms_init(struct us_data *us)
9459 return USB_STOR_TRANSPORT_ERROR;
9460 }
9461 /* the same part to test ENE */
9462 - info->MS_Status = *(struct MS_STATUS *) bbuf;
9463 -
9464 - if (info->MS_Status.Insert && info->MS_Status.Ready) {
9465 - printk(KERN_INFO "Insert = %x\n", info->MS_Status.Insert);
9466 - printk(KERN_INFO "Ready = %x\n", info->MS_Status.Ready);
9467 - printk(KERN_INFO "IsMSPro = %x\n", info->MS_Status.IsMSPro);
9468 - printk(KERN_INFO "IsMSPHG = %x\n", info->MS_Status.IsMSPHG);
9469 - printk(KERN_INFO "WtP= %x\n", info->MS_Status.WtP);
9470 - if (info->MS_Status.IsMSPro) {
9471 + info->MS_Status = bbuf[0];
9472 +
9473 + s = info->MS_Status;
9474 + if ((s & MS_Insert) && (s & MS_Ready)) {
9475 + printk(KERN_INFO "Insert = %x\n", !!(s & MS_Insert));
9476 + printk(KERN_INFO "Ready = %x\n", !!(s & MS_Ready));
9477 + printk(KERN_INFO "IsMSPro = %x\n", !!(s & MS_IsMSPro));
9478 + printk(KERN_INFO "IsMSPHG = %x\n", !!(s & MS_IsMSPHG));
9479 + printk(KERN_INFO "WtP= %x\n", !!(s & MS_WtP));
9480 + if (s & MS_IsMSPro) {
9481 MSP_BlockSize = (bbuf[6] << 8) | bbuf[7];
9482 MSP_UserAreaBlocks = (bbuf[10] << 8) | bbuf[11];
9483 info->MSP_TotalBlock = MSP_BlockSize * MSP_UserAreaBlocks;
9484 @@ -2168,17 +2167,17 @@ static int ene_sd_init(struct us_data *us)
9485 return USB_STOR_TRANSPORT_ERROR;
9486 }
9487
9488 - info->SD_Status = *(struct SD_STATUS *) bbuf;
9489 - if (info->SD_Status.Insert && info->SD_Status.Ready) {
9490 - struct SD_STATUS *s = &info->SD_Status;
9491 + info->SD_Status = bbuf[0];
9492 + if ((info->SD_Status & SD_Insert) && (info->SD_Status & SD_Ready)) {
9493 + unsigned int s = info->SD_Status;
9494
9495 ene_get_card_status(us, bbuf);
9496 - usb_stor_dbg(us, "Insert = %x\n", s->Insert);
9497 - usb_stor_dbg(us, "Ready = %x\n", s->Ready);
9498 - usb_stor_dbg(us, "IsMMC = %x\n", s->IsMMC);
9499 - usb_stor_dbg(us, "HiCapacity = %x\n", s->HiCapacity);
9500 - usb_stor_dbg(us, "HiSpeed = %x\n", s->HiSpeed);
9501 - usb_stor_dbg(us, "WtP = %x\n", s->WtP);
9502 + usb_stor_dbg(us, "Insert = %x\n", !!(s & SD_Insert));
9503 + usb_stor_dbg(us, "Ready = %x\n", !!(s & SD_Ready));
9504 + usb_stor_dbg(us, "IsMMC = %x\n", !!(s & SD_IsMMC));
9505 + usb_stor_dbg(us, "HiCapacity = %x\n", !!(s & SD_HiCapacity));
9506 + usb_stor_dbg(us, "HiSpeed = %x\n", !!(s & SD_HiSpeed));
9507 + usb_stor_dbg(us, "WtP = %x\n", !!(s & SD_WtP));
9508 } else {
9509 usb_stor_dbg(us, "SD Card Not Ready --- %x\n", bbuf[0]);
9510 return USB_STOR_TRANSPORT_ERROR;
9511 @@ -2200,14 +2199,14 @@ static int ene_init(struct us_data *us)
9512
9513 misc_reg03 = bbuf[0];
9514 if (misc_reg03 & 0x01) {
9515 - if (!info->SD_Status.Ready) {
9516 + if (!(info->SD_Status & SD_Ready)) {
9517 result = ene_sd_init(us);
9518 if (result != USB_STOR_XFER_GOOD)
9519 return USB_STOR_TRANSPORT_ERROR;
9520 }
9521 }
9522 if (misc_reg03 & 0x02) {
9523 - if (!info->MS_Status.Ready) {
9524 + if (!(info->MS_Status & MS_Ready)) {
9525 result = ene_ms_init(us);
9526 if (result != USB_STOR_XFER_GOOD)
9527 return USB_STOR_TRANSPORT_ERROR;
9528 @@ -2306,14 +2305,14 @@ static int ene_transport(struct scsi_cmnd *srb, struct us_data *us)
9529
9530 /*US_DEBUG(usb_stor_show_command(us, srb)); */
9531 scsi_set_resid(srb, 0);
9532 - if (unlikely(!(info->SD_Status.Ready || info->MS_Status.Ready)))
9533 + if (unlikely(!(info->SD_Status & SD_Ready) || (info->MS_Status & MS_Ready)))
9534 result = ene_init(us);
9535 if (result == USB_STOR_XFER_GOOD) {
9536 result = USB_STOR_TRANSPORT_ERROR;
9537 - if (info->SD_Status.Ready)
9538 + if (info->SD_Status & SD_Ready)
9539 result = sd_scsi_irp(us, srb);
9540
9541 - if (info->MS_Status.Ready)
9542 + if (info->MS_Status & MS_Ready)
9543 result = ms_scsi_irp(us, srb);
9544 }
9545 return result;
9546 @@ -2377,7 +2376,6 @@ static int ene_ub6250_probe(struct usb_interface *intf,
9547
9548 static int ene_ub6250_resume(struct usb_interface *iface)
9549 {
9550 - u8 tmp = 0;
9551 struct us_data *us = usb_get_intfdata(iface);
9552 struct ene_ub6250_info *info = (struct ene_ub6250_info *)(us->extra);
9553
9554 @@ -2389,17 +2387,16 @@ static int ene_ub6250_resume(struct usb_interface *iface)
9555 mutex_unlock(&us->dev_mutex);
9556
9557 info->Power_IsResum = true;
9558 - /*info->SD_Status.Ready = 0; */
9559 - info->SD_Status = *(struct SD_STATUS *)&tmp;
9560 - info->MS_Status = *(struct MS_STATUS *)&tmp;
9561 - info->SM_Status = *(struct SM_STATUS *)&tmp;
9562 + /* info->SD_Status &= ~SD_Ready; */
9563 + info->SD_Status = 0;
9564 + info->MS_Status = 0;
9565 + info->SM_Status = 0;
9566
9567 return 0;
9568 }
9569
9570 static int ene_ub6250_reset_resume(struct usb_interface *iface)
9571 {
9572 - u8 tmp = 0;
9573 struct us_data *us = usb_get_intfdata(iface);
9574 struct ene_ub6250_info *info = (struct ene_ub6250_info *)(us->extra);
9575
9576 @@ -2411,10 +2408,10 @@ static int ene_ub6250_reset_resume(struct usb_interface *iface)
9577 * the device
9578 */
9579 info->Power_IsResum = true;
9580 - /*info->SD_Status.Ready = 0; */
9581 - info->SD_Status = *(struct SD_STATUS *)&tmp;
9582 - info->MS_Status = *(struct MS_STATUS *)&tmp;
9583 - info->SM_Status = *(struct SM_STATUS *)&tmp;
9584 + /* info->SD_Status &= ~SD_Ready; */
9585 + info->SD_Status = 0;
9586 + info->MS_Status = 0;
9587 + info->SM_Status = 0;
9588
9589 return 0;
9590 }
9591 diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
9592 index 3789698d9d3c6..0c423916d7bfa 100644
9593 --- a/drivers/usb/storage/realtek_cr.c
9594 +++ b/drivers/usb/storage/realtek_cr.c
9595 @@ -365,7 +365,7 @@ static int rts51x_read_mem(struct us_data *us, u16 addr, u8 *data, u16 len)
9596
9597 buf = kmalloc(len, GFP_NOIO);
9598 if (buf == NULL)
9599 - return USB_STOR_TRANSPORT_ERROR;
9600 + return -ENOMEM;
9601
9602 usb_stor_dbg(us, "addr = 0x%x, len = %d\n", addr, len);
9603
9604 diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
9605 index cec9173aac6f5..1058aba8d5734 100644
9606 --- a/drivers/vhost/net.c
9607 +++ b/drivers/vhost/net.c
9608 @@ -472,6 +472,7 @@ static void vhost_tx_batch(struct vhost_net *net,
9609 goto signal_used;
9610
9611 msghdr->msg_control = &ctl;
9612 + msghdr->msg_controllen = sizeof(ctl);
9613 err = sock->ops->sendmsg(sock, msghdr, 0);
9614 if (unlikely(err < 0)) {
9615 vq_err(&nvq->vq, "Fail to batch sending packets\n");
9616 diff --git a/drivers/video/fbdev/atafb.c b/drivers/video/fbdev/atafb.c
9617 index 51f5d1c56fd9c..c1ee817d7dcc5 100644
9618 --- a/drivers/video/fbdev/atafb.c
9619 +++ b/drivers/video/fbdev/atafb.c
9620 @@ -1692,9 +1692,9 @@ static int falcon_setcolreg(unsigned int regno, unsigned int red,
9621 ((blue & 0xfc00) >> 8));
9622 if (regno < 16) {
9623 shifter_tt.color_reg[regno] =
9624 - (((red & 0xe000) >> 13) | ((red & 0x1000) >> 12) << 8) |
9625 - (((green & 0xe000) >> 13) | ((green & 0x1000) >> 12) << 4) |
9626 - ((blue & 0xe000) >> 13) | ((blue & 0x1000) >> 12);
9627 + ((((red & 0xe000) >> 13) | ((red & 0x1000) >> 12)) << 8) |
9628 + ((((green & 0xe000) >> 13) | ((green & 0x1000) >> 12)) << 4) |
9629 + ((blue & 0xe000) >> 13) | ((blue & 0x1000) >> 12);
9630 ((u32 *)info->pseudo_palette)[regno] = ((red & 0xf800) |
9631 ((green & 0xfc00) >> 5) |
9632 ((blue & 0xf800) >> 11));
9633 @@ -1980,9 +1980,9 @@ static int stste_setcolreg(unsigned int regno, unsigned int red,
9634 green >>= 12;
9635 if (ATARIHW_PRESENT(EXTD_SHIFTER))
9636 shifter_tt.color_reg[regno] =
9637 - (((red & 0xe) >> 1) | ((red & 1) << 3) << 8) |
9638 - (((green & 0xe) >> 1) | ((green & 1) << 3) << 4) |
9639 - ((blue & 0xe) >> 1) | ((blue & 1) << 3);
9640 + ((((red & 0xe) >> 1) | ((red & 1) << 3)) << 8) |
9641 + ((((green & 0xe) >> 1) | ((green & 1) << 3)) << 4) |
9642 + ((blue & 0xe) >> 1) | ((blue & 1) << 3);
9643 else
9644 shifter_tt.color_reg[regno] =
9645 ((red & 0xe) << 7) |
9646 diff --git a/drivers/video/fbdev/atmel_lcdfb.c b/drivers/video/fbdev/atmel_lcdfb.c
9647 index cf2bfff2efbf1..b91919861075b 100644
9648 --- a/drivers/video/fbdev/atmel_lcdfb.c
9649 +++ b/drivers/video/fbdev/atmel_lcdfb.c
9650 @@ -1062,15 +1062,16 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev)
9651
9652 INIT_LIST_HEAD(&info->modelist);
9653
9654 - if (pdev->dev.of_node) {
9655 - ret = atmel_lcdfb_of_init(sinfo);
9656 - if (ret)
9657 - goto free_info;
9658 - } else {
9659 + if (!pdev->dev.of_node) {
9660 dev_err(dev, "cannot get default configuration\n");
9661 goto free_info;
9662 }
9663
9664 + ret = atmel_lcdfb_of_init(sinfo);
9665 + if (ret)
9666 + goto free_info;
9667 +
9668 + ret = -ENODEV;
9669 if (!sinfo->config)
9670 goto free_info;
9671
9672 diff --git a/drivers/video/fbdev/cirrusfb.c b/drivers/video/fbdev/cirrusfb.c
9673 index e4ce5667b1251..1b0a58f96af25 100644
9674 --- a/drivers/video/fbdev/cirrusfb.c
9675 +++ b/drivers/video/fbdev/cirrusfb.c
9676 @@ -470,7 +470,7 @@ static int cirrusfb_check_mclk(struct fb_info *info, long freq)
9677 return 0;
9678 }
9679
9680 -static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var,
9681 +static int cirrusfb_check_pixclock(struct fb_var_screeninfo *var,
9682 struct fb_info *info)
9683 {
9684 long freq;
9685 @@ -479,9 +479,7 @@ static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var,
9686 unsigned maxclockidx = var->bits_per_pixel >> 3;
9687
9688 /* convert from ps to kHz */
9689 - freq = PICOS2KHZ(var->pixclock);
9690 -
9691 - dev_dbg(info->device, "desired pixclock: %ld kHz\n", freq);
9692 + freq = PICOS2KHZ(var->pixclock ? : 1);
9693
9694 maxclock = cirrusfb_board_info[cinfo->btype].maxclock[maxclockidx];
9695 cinfo->multiplexing = 0;
9696 @@ -489,11 +487,13 @@ static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var,
9697 /* If the frequency is greater than we can support, we might be able
9698 * to use multiplexing for the video mode */
9699 if (freq > maxclock) {
9700 - dev_err(info->device,
9701 - "Frequency greater than maxclock (%ld kHz)\n",
9702 - maxclock);
9703 - return -EINVAL;
9704 + var->pixclock = KHZ2PICOS(maxclock);
9705 +
9706 + while ((freq = PICOS2KHZ(var->pixclock)) > maxclock)
9707 + var->pixclock++;
9708 }
9709 + dev_dbg(info->device, "desired pixclock: %ld kHz\n", freq);
9710 +
9711 /*
9712 * Additional constraint: 8bpp uses DAC clock doubling to allow maximum
9713 * pixel clock
9714 diff --git a/drivers/video/fbdev/core/fbcvt.c b/drivers/video/fbdev/core/fbcvt.c
9715 index 55d2bd0ce5c02..64843464c6613 100644
9716 --- a/drivers/video/fbdev/core/fbcvt.c
9717 +++ b/drivers/video/fbdev/core/fbcvt.c
9718 @@ -214,9 +214,11 @@ static u32 fb_cvt_aspect_ratio(struct fb_cvt_data *cvt)
9719 static void fb_cvt_print_name(struct fb_cvt_data *cvt)
9720 {
9721 u32 pixcount, pixcount_mod;
9722 - int cnt = 255, offset = 0, read = 0;
9723 - u8 *buf = kzalloc(256, GFP_KERNEL);
9724 + int size = 256;
9725 + int off = 0;
9726 + u8 *buf;
9727
9728 + buf = kzalloc(size, GFP_KERNEL);
9729 if (!buf)
9730 return;
9731
9732 @@ -224,43 +226,30 @@ static void fb_cvt_print_name(struct fb_cvt_data *cvt)
9733 pixcount_mod = (cvt->xres * (cvt->yres/cvt->interlace)) % 1000000;
9734 pixcount_mod /= 1000;
9735
9736 - read = snprintf(buf+offset, cnt, "fbcvt: %dx%d@%d: CVT Name - ",
9737 - cvt->xres, cvt->yres, cvt->refresh);
9738 - offset += read;
9739 - cnt -= read;
9740 + off += scnprintf(buf + off, size - off, "fbcvt: %dx%d@%d: CVT Name - ",
9741 + cvt->xres, cvt->yres, cvt->refresh);
9742
9743 - if (cvt->status)
9744 - snprintf(buf+offset, cnt, "Not a CVT standard - %d.%03d Mega "
9745 - "Pixel Image\n", pixcount, pixcount_mod);
9746 - else {
9747 - if (pixcount) {
9748 - read = snprintf(buf+offset, cnt, "%d", pixcount);
9749 - cnt -= read;
9750 - offset += read;
9751 - }
9752 + if (cvt->status) {
9753 + off += scnprintf(buf + off, size - off,
9754 + "Not a CVT standard - %d.%03d Mega Pixel Image\n",
9755 + pixcount, pixcount_mod);
9756 + } else {
9757 + if (pixcount)
9758 + off += scnprintf(buf + off, size - off, "%d", pixcount);
9759
9760 - read = snprintf(buf+offset, cnt, ".%03dM", pixcount_mod);
9761 - cnt -= read;
9762 - offset += read;
9763 + off += scnprintf(buf + off, size - off, ".%03dM", pixcount_mod);
9764
9765 if (cvt->aspect_ratio == 0)
9766 - read = snprintf(buf+offset, cnt, "3");
9767 + off += scnprintf(buf + off, size - off, "3");
9768 else if (cvt->aspect_ratio == 3)
9769 - read = snprintf(buf+offset, cnt, "4");
9770 + off += scnprintf(buf + off, size - off, "4");
9771 else if (cvt->aspect_ratio == 1 || cvt->aspect_ratio == 4)
9772 - read = snprintf(buf+offset, cnt, "9");
9773 + off += scnprintf(buf + off, size - off, "9");
9774 else if (cvt->aspect_ratio == 2)
9775 - read = snprintf(buf+offset, cnt, "A");
9776 - else
9777 - read = 0;
9778 - cnt -= read;
9779 - offset += read;
9780 -
9781 - if (cvt->flags & FB_CVT_FLAG_REDUCED_BLANK) {
9782 - read = snprintf(buf+offset, cnt, "-R");
9783 - cnt -= read;
9784 - offset += read;
9785 - }
9786 + off += scnprintf(buf + off, size - off, "A");
9787 +
9788 + if (cvt->flags & FB_CVT_FLAG_REDUCED_BLANK)
9789 + off += scnprintf(buf + off, size - off, "-R");
9790 }
9791
9792 printk(KERN_INFO "%s\n", buf);
9793 diff --git a/drivers/video/fbdev/nvidia/nv_i2c.c b/drivers/video/fbdev/nvidia/nv_i2c.c
9794 index d7994a1732459..0b48965a6420c 100644
9795 --- a/drivers/video/fbdev/nvidia/nv_i2c.c
9796 +++ b/drivers/video/fbdev/nvidia/nv_i2c.c
9797 @@ -86,7 +86,7 @@ static int nvidia_setup_i2c_bus(struct nvidia_i2c_chan *chan, const char *name,
9798 {
9799 int rc;
9800
9801 - strcpy(chan->adapter.name, name);
9802 + strscpy(chan->adapter.name, name, sizeof(chan->adapter.name));
9803 chan->adapter.owner = THIS_MODULE;
9804 chan->adapter.class = i2c_class;
9805 chan->adapter.algo_data = &chan->algo;
9806 diff --git a/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c b/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c
9807 index b4a1aefff7661..777f6d66c28c3 100644
9808 --- a/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c
9809 +++ b/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c
9810 @@ -251,6 +251,7 @@ static int dvic_probe_of(struct platform_device *pdev)
9811 adapter_node = of_parse_phandle(node, "ddc-i2c-bus", 0);
9812 if (adapter_node) {
9813 adapter = of_get_i2c_adapter_by_node(adapter_node);
9814 + of_node_put(adapter_node);
9815 if (adapter == NULL) {
9816 dev_err(&pdev->dev, "failed to parse ddc-i2c-bus\n");
9817 omap_dss_put_device(ddata->in);
9818 diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c
9819 index 4b0793abdd84b..a2c7c5cb15234 100644
9820 --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c
9821 +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c
9822 @@ -409,7 +409,7 @@ static ssize_t dsicm_num_errors_show(struct device *dev,
9823 if (r)
9824 return r;
9825
9826 - return snprintf(buf, PAGE_SIZE, "%d\n", errors);
9827 + return sysfs_emit(buf, "%d\n", errors);
9828 }
9829
9830 static ssize_t dsicm_hw_revision_show(struct device *dev,
9831 @@ -439,7 +439,7 @@ static ssize_t dsicm_hw_revision_show(struct device *dev,
9832 if (r)
9833 return r;
9834
9835 - return snprintf(buf, PAGE_SIZE, "%02x.%02x.%02x\n", id1, id2, id3);
9836 + return sysfs_emit(buf, "%02x.%02x.%02x\n", id1, id2, id3);
9837 }
9838
9839 static ssize_t dsicm_store_ulps(struct device *dev,
9840 @@ -487,7 +487,7 @@ static ssize_t dsicm_show_ulps(struct device *dev,
9841 t = ddata->ulps_enabled;
9842 mutex_unlock(&ddata->lock);
9843
9844 - return snprintf(buf, PAGE_SIZE, "%u\n", t);
9845 + return sysfs_emit(buf, "%u\n", t);
9846 }
9847
9848 static ssize_t dsicm_store_ulps_timeout(struct device *dev,
9849 @@ -532,7 +532,7 @@ static ssize_t dsicm_show_ulps_timeout(struct device *dev,
9850 t = ddata->ulps_timeout;
9851 mutex_unlock(&ddata->lock);
9852
9853 - return snprintf(buf, PAGE_SIZE, "%u\n", t);
9854 + return sysfs_emit(buf, "%u\n", t);
9855 }
9856
9857 static DEVICE_ATTR(num_dsi_errors, S_IRUGO, dsicm_num_errors_show, NULL);
9858 diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c
9859 index 1293515e4b169..0cbc5b9183f89 100644
9860 --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c
9861 +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c
9862 @@ -476,7 +476,7 @@ static ssize_t show_cabc_available_modes(struct device *dev,
9863 int i;
9864
9865 if (!ddata->has_cabc)
9866 - return snprintf(buf, PAGE_SIZE, "%s\n", cabc_modes[0]);
9867 + return sysfs_emit(buf, "%s\n", cabc_modes[0]);
9868
9869 for (i = 0, len = 0;
9870 len < PAGE_SIZE && i < ARRAY_SIZE(cabc_modes); i++)
9871 diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c
9872 index bb85b21f07248..9f6ef9e04d9ce 100644
9873 --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c
9874 +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c
9875 @@ -169,7 +169,7 @@ static ssize_t tpo_td043_vmirror_show(struct device *dev,
9876 {
9877 struct panel_drv_data *ddata = dev_get_drvdata(dev);
9878
9879 - return snprintf(buf, PAGE_SIZE, "%d\n", ddata->vmirror);
9880 + return sysfs_emit(buf, "%d\n", ddata->vmirror);
9881 }
9882
9883 static ssize_t tpo_td043_vmirror_store(struct device *dev,
9884 @@ -199,7 +199,7 @@ static ssize_t tpo_td043_mode_show(struct device *dev,
9885 {
9886 struct panel_drv_data *ddata = dev_get_drvdata(dev);
9887
9888 - return snprintf(buf, PAGE_SIZE, "%d\n", ddata->mode);
9889 + return sysfs_emit(buf, "%d\n", ddata->mode);
9890 }
9891
9892 static ssize_t tpo_td043_mode_store(struct device *dev,
9893 diff --git a/drivers/video/fbdev/sm712fb.c b/drivers/video/fbdev/sm712fb.c
9894 index 2466814145779..83d05600360dd 100644
9895 --- a/drivers/video/fbdev/sm712fb.c
9896 +++ b/drivers/video/fbdev/sm712fb.c
9897 @@ -1047,7 +1047,7 @@ static ssize_t smtcfb_read(struct fb_info *info, char __user *buf,
9898 if (count + p > total_size)
9899 count = total_size - p;
9900
9901 - buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
9902 + buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);
9903 if (!buffer)
9904 return -ENOMEM;
9905
9906 @@ -1059,25 +1059,14 @@ static ssize_t smtcfb_read(struct fb_info *info, char __user *buf,
9907 while (count) {
9908 c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
9909 dst = buffer;
9910 - for (i = c >> 2; i--;) {
9911 - *dst = fb_readl(src++);
9912 - *dst = big_swap(*dst);
9913 + for (i = (c + 3) >> 2; i--;) {
9914 + u32 val;
9915 +
9916 + val = fb_readl(src);
9917 + *dst = big_swap(val);
9918 + src++;
9919 dst++;
9920 }
9921 - if (c & 3) {
9922 - u8 *dst8 = (u8 *)dst;
9923 - u8 __iomem *src8 = (u8 __iomem *)src;
9924 -
9925 - for (i = c & 3; i--;) {
9926 - if (i & 1) {
9927 - *dst8++ = fb_readb(++src8);
9928 - } else {
9929 - *dst8++ = fb_readb(--src8);
9930 - src8 += 2;
9931 - }
9932 - }
9933 - src = (u32 __iomem *)src8;
9934 - }
9935
9936 if (copy_to_user(buf, buffer, c)) {
9937 err = -EFAULT;
9938 @@ -1130,7 +1119,7 @@ static ssize_t smtcfb_write(struct fb_info *info, const char __user *buf,
9939 count = total_size - p;
9940 }
9941
9942 - buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
9943 + buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);
9944 if (!buffer)
9945 return -ENOMEM;
9946
9947 @@ -1148,24 +1137,11 @@ static ssize_t smtcfb_write(struct fb_info *info, const char __user *buf,
9948 break;
9949 }
9950
9951 - for (i = c >> 2; i--;) {
9952 - fb_writel(big_swap(*src), dst++);
9953 + for (i = (c + 3) >> 2; i--;) {
9954 + fb_writel(big_swap(*src), dst);
9955 + dst++;
9956 src++;
9957 }
9958 - if (c & 3) {
9959 - u8 *src8 = (u8 *)src;
9960 - u8 __iomem *dst8 = (u8 __iomem *)dst;
9961 -
9962 - for (i = c & 3; i--;) {
9963 - if (i & 1) {
9964 - fb_writeb(*src8++, ++dst8);
9965 - } else {
9966 - fb_writeb(*src8++, --dst8);
9967 - dst8 += 2;
9968 - }
9969 - }
9970 - dst = (u32 __iomem *)dst8;
9971 - }
9972
9973 *ppos += c;
9974 buf += c;
9975 diff --git a/drivers/video/fbdev/smscufx.c b/drivers/video/fbdev/smscufx.c
9976 index 0e0f5bbfc5efc..ad60f739c6a19 100644
9977 --- a/drivers/video/fbdev/smscufx.c
9978 +++ b/drivers/video/fbdev/smscufx.c
9979 @@ -1657,6 +1657,7 @@ static int ufx_usb_probe(struct usb_interface *interface,
9980 info->par = dev;
9981 info->pseudo_palette = dev->pseudo_palette;
9982 info->fbops = &ufx_ops;
9983 + INIT_LIST_HEAD(&info->modelist);
9984
9985 retval = fb_alloc_cmap(&info->cmap, 256, 0);
9986 if (retval < 0) {
9987 @@ -1667,8 +1668,6 @@ static int ufx_usb_probe(struct usb_interface *interface,
9988 INIT_DELAYED_WORK(&dev->free_framebuffer_work,
9989 ufx_free_framebuffer_work);
9990
9991 - INIT_LIST_HEAD(&info->modelist);
9992 -
9993 retval = ufx_reg_read(dev, 0x3000, &id_rev);
9994 check_warn_goto_error(retval, "error %d reading 0x3000 register from device", retval);
9995 dev_dbg(dev->gdev, "ID_REV register value 0x%08x", id_rev);
9996 diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c
9997 index ecbfbbf1c1a79..e269b1391e146 100644
9998 --- a/drivers/video/fbdev/udlfb.c
9999 +++ b/drivers/video/fbdev/udlfb.c
10000 @@ -1427,7 +1427,7 @@ static ssize_t metrics_bytes_rendered_show(struct device *fbdev,
10001 struct device_attribute *a, char *buf) {
10002 struct fb_info *fb_info = dev_get_drvdata(fbdev);
10003 struct dlfb_data *dlfb = fb_info->par;
10004 - return snprintf(buf, PAGE_SIZE, "%u\n",
10005 + return sysfs_emit(buf, "%u\n",
10006 atomic_read(&dlfb->bytes_rendered));
10007 }
10008
10009 @@ -1435,7 +1435,7 @@ static ssize_t metrics_bytes_identical_show(struct device *fbdev,
10010 struct device_attribute *a, char *buf) {
10011 struct fb_info *fb_info = dev_get_drvdata(fbdev);
10012 struct dlfb_data *dlfb = fb_info->par;
10013 - return snprintf(buf, PAGE_SIZE, "%u\n",
10014 + return sysfs_emit(buf, "%u\n",
10015 atomic_read(&dlfb->bytes_identical));
10016 }
10017
10018 @@ -1443,7 +1443,7 @@ static ssize_t metrics_bytes_sent_show(struct device *fbdev,
10019 struct device_attribute *a, char *buf) {
10020 struct fb_info *fb_info = dev_get_drvdata(fbdev);
10021 struct dlfb_data *dlfb = fb_info->par;
10022 - return snprintf(buf, PAGE_SIZE, "%u\n",
10023 + return sysfs_emit(buf, "%u\n",
10024 atomic_read(&dlfb->bytes_sent));
10025 }
10026
10027 @@ -1451,7 +1451,7 @@ static ssize_t metrics_cpu_kcycles_used_show(struct device *fbdev,
10028 struct device_attribute *a, char *buf) {
10029 struct fb_info *fb_info = dev_get_drvdata(fbdev);
10030 struct dlfb_data *dlfb = fb_info->par;
10031 - return snprintf(buf, PAGE_SIZE, "%u\n",
10032 + return sysfs_emit(buf, "%u\n",
10033 atomic_read(&dlfb->cpu_kcycles_used));
10034 }
10035
10036 diff --git a/drivers/video/fbdev/w100fb.c b/drivers/video/fbdev/w100fb.c
10037 index e30f9427b3355..52ec80bbfe5ea 100644
10038 --- a/drivers/video/fbdev/w100fb.c
10039 +++ b/drivers/video/fbdev/w100fb.c
10040 @@ -770,12 +770,18 @@ out:
10041 fb_dealloc_cmap(&info->cmap);
10042 kfree(info->pseudo_palette);
10043 }
10044 - if (remapped_fbuf != NULL)
10045 + if (remapped_fbuf != NULL) {
10046 iounmap(remapped_fbuf);
10047 - if (remapped_regs != NULL)
10048 + remapped_fbuf = NULL;
10049 + }
10050 + if (remapped_regs != NULL) {
10051 iounmap(remapped_regs);
10052 - if (remapped_base != NULL)
10053 + remapped_regs = NULL;
10054 + }
10055 + if (remapped_base != NULL) {
10056 iounmap(remapped_base);
10057 + remapped_base = NULL;
10058 + }
10059 if (info)
10060 framebuffer_release(info);
10061 return err;
10062 @@ -795,8 +801,11 @@ static int w100fb_remove(struct platform_device *pdev)
10063 fb_dealloc_cmap(&info->cmap);
10064
10065 iounmap(remapped_base);
10066 + remapped_base = NULL;
10067 iounmap(remapped_regs);
10068 + remapped_regs = NULL;
10069 iounmap(remapped_fbuf);
10070 + remapped_fbuf = NULL;
10071
10072 framebuffer_release(info);
10073
10074 diff --git a/drivers/w1/slaves/w1_therm.c b/drivers/w1/slaves/w1_therm.c
10075 index e028e00927991..cf1e01f0dede3 100644
10076 --- a/drivers/w1/slaves/w1_therm.c
10077 +++ b/drivers/w1/slaves/w1_therm.c
10078 @@ -679,16 +679,20 @@ static ssize_t w1_seq_show(struct device *device,
10079 if (sl->reg_num.id == reg_num->id)
10080 seq = i;
10081
10082 + if (w1_reset_bus(sl->master))
10083 + goto error;
10084 +
10085 + /* Put the device into chain DONE state */
10086 + w1_write_8(sl->master, W1_MATCH_ROM);
10087 + w1_write_block(sl->master, (u8 *)&rn, 8);
10088 w1_write_8(sl->master, W1_42_CHAIN);
10089 w1_write_8(sl->master, W1_42_CHAIN_DONE);
10090 w1_write_8(sl->master, W1_42_CHAIN_DONE_INV);
10091 - w1_read_block(sl->master, &ack, sizeof(ack));
10092
10093 /* check for acknowledgment */
10094 ack = w1_read_8(sl->master);
10095 if (ack != W1_42_SUCCESS_CONFIRM_BYTE)
10096 goto error;
10097 -
10098 }
10099
10100 /* Exit from CHAIN state */
10101 diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
10102 index fcf1807cc8dd7..c8def2bdf2474 100644
10103 --- a/fs/btrfs/extent_io.h
10104 +++ b/fs/btrfs/extent_io.h
10105 @@ -202,7 +202,7 @@ struct extent_buffer {
10106 */
10107 struct extent_changeset {
10108 /* How many bytes are set/cleared in this operation */
10109 - unsigned int bytes_changed;
10110 + u64 bytes_changed;
10111
10112 /* Changed ranges */
10113 struct ulist range_changed;
10114 diff --git a/fs/ext2/super.c b/fs/ext2/super.c
10115 index 065cd2d1bdc68..db403c01d4d5c 100644
10116 --- a/fs/ext2/super.c
10117 +++ b/fs/ext2/super.c
10118 @@ -770,8 +770,12 @@ static loff_t ext2_max_size(int bits)
10119 res += 1LL << (bits-2);
10120 res += 1LL << (2*(bits-2));
10121 res += 1LL << (3*(bits-2));
10122 + /* Compute how many metadata blocks are needed */
10123 + meta_blocks = 1;
10124 + meta_blocks += 1 + ppb;
10125 + meta_blocks += 1 + ppb + ppb * ppb;
10126 /* Does block tree limit file size? */
10127 - if (res < upper_limit)
10128 + if (res + meta_blocks <= upper_limit)
10129 goto check_lfs;
10130
10131 res = upper_limit;
10132 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
10133 index dcbd8ac8d4711..0d62f05f89256 100644
10134 --- a/fs/ext4/inode.c
10135 +++ b/fs/ext4/inode.c
10136 @@ -2161,6 +2161,15 @@ static int ext4_writepage(struct page *page,
10137 else
10138 len = PAGE_SIZE;
10139
10140 + /* Should never happen but for bugs in other kernel subsystems */
10141 + if (!page_has_buffers(page)) {
10142 + ext4_warning_inode(inode,
10143 + "page %lu does not have buffers attached", page->index);
10144 + ClearPageDirty(page);
10145 + unlock_page(page);
10146 + return 0;
10147 + }
10148 +
10149 page_bufs = page_buffers(page);
10150 /*
10151 * We cannot do block allocation or other extent handling in this
10152 @@ -2710,6 +2719,22 @@ static int mpage_prepare_extent_to_map(struct mpage_da_data *mpd)
10153 wait_on_page_writeback(page);
10154 BUG_ON(PageWriteback(page));
10155
10156 + /*
10157 + * Should never happen but for buggy code in
10158 + * other subsystems that call
10159 + * set_page_dirty() without properly warning
10160 + * the file system first. See [1] for more
10161 + * information.
10162 + *
10163 + * [1] https://lore.kernel.org/linux-mm/20180103100430.GE4911@quack2.suse.cz
10164 + */
10165 + if (!page_has_buffers(page)) {
10166 + ext4_warning_inode(mpd->inode, "page %lu does not have buffers attached", page->index);
10167 + ClearPageDirty(page);
10168 + unlock_page(page);
10169 + continue;
10170 + }
10171 +
10172 if (mpd->map.m_len == 0)
10173 mpd->first_page = page->index;
10174 mpd->next_page = page->index + 1;
10175 diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
10176 index 03dce3980d90a..54f0d2c4c7d87 100644
10177 --- a/fs/f2fs/checkpoint.c
10178 +++ b/fs/f2fs/checkpoint.c
10179 @@ -848,6 +848,7 @@ static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
10180 struct page *cp_page_1 = NULL, *cp_page_2 = NULL;
10181 struct f2fs_checkpoint *cp_block = NULL;
10182 unsigned long long cur_version = 0, pre_version = 0;
10183 + unsigned int cp_blocks;
10184 int err;
10185
10186 err = get_checkpoint_version(sbi, cp_addr, &cp_block,
10187 @@ -855,15 +856,16 @@ static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
10188 if (err)
10189 return NULL;
10190
10191 - if (le32_to_cpu(cp_block->cp_pack_total_block_count) >
10192 - sbi->blocks_per_seg) {
10193 + cp_blocks = le32_to_cpu(cp_block->cp_pack_total_block_count);
10194 +
10195 + if (cp_blocks > sbi->blocks_per_seg || cp_blocks <= F2FS_CP_PACKS) {
10196 f2fs_warn(sbi, "invalid cp_pack_total_block_count:%u",
10197 le32_to_cpu(cp_block->cp_pack_total_block_count));
10198 goto invalid_cp;
10199 }
10200 pre_version = *version;
10201
10202 - cp_addr += le32_to_cpu(cp_block->cp_pack_total_block_count) - 1;
10203 + cp_addr += cp_blocks - 1;
10204 err = get_checkpoint_version(sbi, cp_addr, &cp_block,
10205 &cp_page_2, version);
10206 if (err)
10207 diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
10208 index 1679f9c0b63b3..773028921c481 100644
10209 --- a/fs/f2fs/data.c
10210 +++ b/fs/f2fs/data.c
10211 @@ -2467,8 +2467,12 @@ static int __f2fs_write_data_pages(struct address_space *mapping,
10212 /* to avoid spliting IOs due to mixed WB_SYNC_ALL and WB_SYNC_NONE */
10213 if (wbc->sync_mode == WB_SYNC_ALL)
10214 atomic_inc(&sbi->wb_sync_req[DATA]);
10215 - else if (atomic_read(&sbi->wb_sync_req[DATA]))
10216 + else if (atomic_read(&sbi->wb_sync_req[DATA])) {
10217 + /* to avoid potential deadlock */
10218 + if (current->plug)
10219 + blk_finish_plug(current->plug);
10220 goto skip_write;
10221 + }
10222
10223 if (__should_serialize_io(inode, wbc)) {
10224 mutex_lock(&sbi->writepages);
10225 diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
10226 index 16abb017e497f..68d5c73c5ed1f 100644
10227 --- a/fs/f2fs/gc.c
10228 +++ b/fs/f2fs/gc.c
10229 @@ -633,8 +633,10 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
10230 set_sbi_flag(sbi, SBI_NEED_FSCK);
10231 }
10232
10233 - if (f2fs_check_nid_range(sbi, dni->ino))
10234 + if (f2fs_check_nid_range(sbi, dni->ino)) {
10235 + f2fs_put_page(node_page, 1);
10236 return false;
10237 + }
10238
10239 *nofs = ofs_of_node(node_page);
10240 source_blkaddr = datablock_addr(NULL, node_page, ofs_in_node);
10241 diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
10242 index 2383d52b1f424..264c19e177797 100644
10243 --- a/fs/f2fs/inode.c
10244 +++ b/fs/f2fs/inode.c
10245 @@ -777,6 +777,7 @@ void f2fs_handle_failed_inode(struct inode *inode)
10246 err = f2fs_get_node_info(sbi, inode->i_ino, &ni);
10247 if (err) {
10248 set_sbi_flag(sbi, SBI_NEED_FSCK);
10249 + set_inode_flag(inode, FI_FREE_NID);
10250 f2fs_warn(sbi, "May loss orphan inode, run fsck to fix.");
10251 goto out;
10252 }
10253 diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
10254 index 0cd1d51dde06d..3dc7cc3d6ac69 100644
10255 --- a/fs/f2fs/node.c
10256 +++ b/fs/f2fs/node.c
10257 @@ -1995,8 +1995,12 @@ static int f2fs_write_node_pages(struct address_space *mapping,
10258
10259 if (wbc->sync_mode == WB_SYNC_ALL)
10260 atomic_inc(&sbi->wb_sync_req[NODE]);
10261 - else if (atomic_read(&sbi->wb_sync_req[NODE]))
10262 + else if (atomic_read(&sbi->wb_sync_req[NODE])) {
10263 + /* to avoid potential deadlock */
10264 + if (current->plug)
10265 + blk_finish_plug(current->plug);
10266 goto skip_write;
10267 + }
10268
10269 trace_f2fs_writepages(mapping->host, wbc, NODE);
10270
10271 diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
10272 index a6c9c9fdf21d1..6bd8a944902ef 100644
10273 --- a/fs/f2fs/super.c
10274 +++ b/fs/f2fs/super.c
10275 @@ -2066,7 +2066,7 @@ int f2fs_quota_sync(struct super_block *sb, int type)
10276 struct f2fs_sb_info *sbi = F2FS_SB(sb);
10277 struct quota_info *dqopt = sb_dqopt(sb);
10278 int cnt;
10279 - int ret;
10280 + int ret = 0;
10281
10282 /*
10283 * Now when everything is written we can discard the pagecache so
10284 @@ -2077,8 +2077,8 @@ int f2fs_quota_sync(struct super_block *sb, int type)
10285 if (type != -1 && cnt != type)
10286 continue;
10287
10288 - if (!sb_has_quota_active(sb, type))
10289 - return 0;
10290 + if (!sb_has_quota_active(sb, cnt))
10291 + continue;
10292
10293 inode_lock(dqopt->files[cnt]);
10294
10295 diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
10296 index c056ed5c6df30..d7ec0ac87fc03 100644
10297 --- a/fs/gfs2/rgrp.c
10298 +++ b/fs/gfs2/rgrp.c
10299 @@ -1429,7 +1429,8 @@ int gfs2_fitrim(struct file *filp, void __user *argp)
10300
10301 start = r.start >> bs_shift;
10302 end = start + (r.len >> bs_shift);
10303 - minlen = max_t(u64, r.minlen,
10304 + minlen = max_t(u64, r.minlen, sdp->sd_sb.sb_bsize);
10305 + minlen = max_t(u64, minlen,
10306 q->limits.discard_granularity) >> bs_shift;
10307
10308 if (end <= start || minlen > sdp->sd_max_rg_data)
10309 diff --git a/fs/io_uring.c b/fs/io_uring.c
10310 index 478df7e10767a..e73969fa96bcb 100644
10311 --- a/fs/io_uring.c
10312 +++ b/fs/io_uring.c
10313 @@ -438,6 +438,22 @@ static struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p)
10314 return ctx;
10315 }
10316
10317 +static void io_req_put_fs(struct io_kiocb *req)
10318 +{
10319 + struct fs_struct *fs = req->fs;
10320 +
10321 + if (!fs)
10322 + return;
10323 +
10324 + spin_lock(&req->fs->lock);
10325 + if (--fs->users)
10326 + fs = NULL;
10327 + spin_unlock(&req->fs->lock);
10328 + if (fs)
10329 + free_fs_struct(fs);
10330 + req->fs = NULL;
10331 +}
10332 +
10333 static inline bool __io_sequence_defer(struct io_ring_ctx *ctx,
10334 struct io_kiocb *req)
10335 {
10336 @@ -695,6 +711,7 @@ static void io_free_req_many(struct io_ring_ctx *ctx, void **reqs, int *nr)
10337
10338 static void __io_free_req(struct io_kiocb *req)
10339 {
10340 + io_req_put_fs(req);
10341 if (req->file && !(req->flags & REQ_F_FIXED_FILE))
10342 fput(req->file);
10343 percpu_ref_put(&req->ctx->refs);
10344 @@ -1701,16 +1718,7 @@ static int io_send_recvmsg(struct io_kiocb *req, const struct io_uring_sqe *sqe,
10345 ret = -EINTR;
10346 }
10347
10348 - if (req->fs) {
10349 - struct fs_struct *fs = req->fs;
10350 -
10351 - spin_lock(&req->fs->lock);
10352 - if (--fs->users)
10353 - fs = NULL;
10354 - spin_unlock(&req->fs->lock);
10355 - if (fs)
10356 - free_fs_struct(fs);
10357 - }
10358 + io_req_put_fs(req);
10359 io_cqring_add_event(req->ctx, sqe->user_data, ret);
10360 io_put_req(req);
10361 return 0;
10362 diff --git a/fs/jffs2/build.c b/fs/jffs2/build.c
10363 index b288c8ae1236b..837cd55fd4c5e 100644
10364 --- a/fs/jffs2/build.c
10365 +++ b/fs/jffs2/build.c
10366 @@ -415,13 +415,15 @@ int jffs2_do_mount_fs(struct jffs2_sb_info *c)
10367 jffs2_free_ino_caches(c);
10368 jffs2_free_raw_node_refs(c);
10369 ret = -EIO;
10370 - goto out_free;
10371 + goto out_sum_exit;
10372 }
10373
10374 jffs2_calc_trigger_levels(c);
10375
10376 return 0;
10377
10378 + out_sum_exit:
10379 + jffs2_sum_exit(c);
10380 out_free:
10381 kvfree(c->blocks);
10382
10383 diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c
10384 index ab8cdd9e93259..ad1eba809e7e1 100644
10385 --- a/fs/jffs2/fs.c
10386 +++ b/fs/jffs2/fs.c
10387 @@ -602,8 +602,8 @@ out_root:
10388 jffs2_free_ino_caches(c);
10389 jffs2_free_raw_node_refs(c);
10390 kvfree(c->blocks);
10391 - out_inohash:
10392 jffs2_clear_xattr_subsystem(c);
10393 + out_inohash:
10394 kfree(c->inocache_list);
10395 out_wbuf:
10396 jffs2_flash_cleanup(c);
10397 diff --git a/fs/jffs2/scan.c b/fs/jffs2/scan.c
10398 index 0b1a7f68b7122..f73904c08b39c 100644
10399 --- a/fs/jffs2/scan.c
10400 +++ b/fs/jffs2/scan.c
10401 @@ -136,7 +136,7 @@ int jffs2_scan_medium(struct jffs2_sb_info *c)
10402 if (!s) {
10403 JFFS2_WARNING("Can't allocate memory for summary\n");
10404 ret = -ENOMEM;
10405 - goto out;
10406 + goto out_buf;
10407 }
10408 }
10409
10410 @@ -274,13 +274,15 @@ int jffs2_scan_medium(struct jffs2_sb_info *c)
10411 }
10412 ret = 0;
10413 out:
10414 + jffs2_sum_reset_collected(s);
10415 + kfree(s);
10416 + out_buf:
10417 if (buf_size)
10418 kfree(flashbuf);
10419 #ifndef __ECOS
10420 else
10421 mtd_unpoint(c->mtd, 0, c->mtd->size);
10422 #endif
10423 - kfree(s);
10424 return ret;
10425 }
10426
10427 diff --git a/fs/jfs/inode.c b/fs/jfs/inode.c
10428 index d862cfc3d3a83..62c4a5450cda2 100644
10429 --- a/fs/jfs/inode.c
10430 +++ b/fs/jfs/inode.c
10431 @@ -146,12 +146,13 @@ void jfs_evict_inode(struct inode *inode)
10432 dquot_initialize(inode);
10433
10434 if (JFS_IP(inode)->fileset == FILESYSTEM_I) {
10435 + struct inode *ipimap = JFS_SBI(inode->i_sb)->ipimap;
10436 truncate_inode_pages_final(&inode->i_data);
10437
10438 if (test_cflag(COMMIT_Freewmap, inode))
10439 jfs_free_zero_link(inode);
10440
10441 - if (JFS_SBI(inode->i_sb)->ipimap)
10442 + if (ipimap && JFS_IP(ipimap)->i_imap)
10443 diFree(inode);
10444
10445 /*
10446 diff --git a/fs/jfs/jfs_dmap.c b/fs/jfs/jfs_dmap.c
10447 index 6fe82ce8663ef..79f3440e204b6 100644
10448 --- a/fs/jfs/jfs_dmap.c
10449 +++ b/fs/jfs/jfs_dmap.c
10450 @@ -148,6 +148,7 @@ static const s8 budtab[256] = {
10451 * 0 - success
10452 * -ENOMEM - insufficient memory
10453 * -EIO - i/o error
10454 + * -EINVAL - wrong bmap data
10455 */
10456 int dbMount(struct inode *ipbmap)
10457 {
10458 @@ -179,6 +180,12 @@ int dbMount(struct inode *ipbmap)
10459 bmp->db_nfree = le64_to_cpu(dbmp_le->dn_nfree);
10460 bmp->db_l2nbperpage = le32_to_cpu(dbmp_le->dn_l2nbperpage);
10461 bmp->db_numag = le32_to_cpu(dbmp_le->dn_numag);
10462 + if (!bmp->db_numag) {
10463 + release_metapage(mp);
10464 + kfree(bmp);
10465 + return -EINVAL;
10466 + }
10467 +
10468 bmp->db_maxlevel = le32_to_cpu(dbmp_le->dn_maxlevel);
10469 bmp->db_maxag = le32_to_cpu(dbmp_le->dn_maxag);
10470 bmp->db_agpref = le32_to_cpu(dbmp_le->dn_agpref);
10471 diff --git a/fs/minix/inode.c b/fs/minix/inode.c
10472 index 7b09a9158e401..3fffc709afd43 100644
10473 --- a/fs/minix/inode.c
10474 +++ b/fs/minix/inode.c
10475 @@ -447,7 +447,8 @@ static const struct address_space_operations minix_aops = {
10476 .writepage = minix_writepage,
10477 .write_begin = minix_write_begin,
10478 .write_end = generic_write_end,
10479 - .bmap = minix_bmap
10480 + .bmap = minix_bmap,
10481 + .direct_IO = noop_direct_IO
10482 };
10483
10484 static const struct inode_operations minix_symlink_inode_operations = {
10485 diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c
10486 index b8a7b223b5b18..31922657e836e 100644
10487 --- a/fs/nfs/callback_proc.c
10488 +++ b/fs/nfs/callback_proc.c
10489 @@ -364,12 +364,11 @@ __be32 nfs4_callback_devicenotify(void *argp, void *resp,
10490 struct cb_process_state *cps)
10491 {
10492 struct cb_devicenotifyargs *args = argp;
10493 + const struct pnfs_layoutdriver_type *ld = NULL;
10494 uint32_t i;
10495 __be32 res = 0;
10496 - struct nfs_client *clp = cps->clp;
10497 - struct nfs_server *server = NULL;
10498
10499 - if (!clp) {
10500 + if (!cps->clp) {
10501 res = cpu_to_be32(NFS4ERR_OP_NOT_IN_SESSION);
10502 goto out;
10503 }
10504 @@ -377,23 +376,15 @@ __be32 nfs4_callback_devicenotify(void *argp, void *resp,
10505 for (i = 0; i < args->ndevs; i++) {
10506 struct cb_devicenotifyitem *dev = &args->devs[i];
10507
10508 - if (!server ||
10509 - server->pnfs_curr_ld->id != dev->cbd_layout_type) {
10510 - rcu_read_lock();
10511 - list_for_each_entry_rcu(server, &clp->cl_superblocks, client_link)
10512 - if (server->pnfs_curr_ld &&
10513 - server->pnfs_curr_ld->id == dev->cbd_layout_type) {
10514 - rcu_read_unlock();
10515 - goto found;
10516 - }
10517 - rcu_read_unlock();
10518 - continue;
10519 + if (!ld || ld->id != dev->cbd_layout_type) {
10520 + pnfs_put_layoutdriver(ld);
10521 + ld = pnfs_find_layoutdriver(dev->cbd_layout_type);
10522 + if (!ld)
10523 + continue;
10524 }
10525 -
10526 - found:
10527 - nfs4_delete_deviceid(server->pnfs_curr_ld, clp, &dev->cbd_dev_id);
10528 + nfs4_delete_deviceid(ld, cps->clp, &dev->cbd_dev_id);
10529 }
10530 -
10531 + pnfs_put_layoutdriver(ld);
10532 out:
10533 kfree(args->devs);
10534 return res;
10535 diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c
10536 index 90b5511c4c440..04d27f0ed39ac 100644
10537 --- a/fs/nfs/callback_xdr.c
10538 +++ b/fs/nfs/callback_xdr.c
10539 @@ -271,10 +271,6 @@ __be32 decode_devicenotify_args(struct svc_rqst *rqstp,
10540 n = ntohl(*p++);
10541 if (n == 0)
10542 goto out;
10543 - if (n > ULONG_MAX / sizeof(*args->devs)) {
10544 - status = htonl(NFS4ERR_BADXDR);
10545 - goto out;
10546 - }
10547
10548 args->devs = kmalloc_array(n, sizeof(*args->devs), GFP_KERNEL);
10549 if (!args->devs) {
10550 diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
10551 index 6b0bf4ebd8124..0682037f972be 100644
10552 --- a/fs/nfs/direct.c
10553 +++ b/fs/nfs/direct.c
10554 @@ -272,8 +272,8 @@ ssize_t nfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
10555 VM_BUG_ON(iov_iter_count(iter) != PAGE_SIZE);
10556
10557 if (iov_iter_rw(iter) == READ)
10558 - return nfs_file_direct_read(iocb, iter);
10559 - return nfs_file_direct_write(iocb, iter);
10560 + return nfs_file_direct_read(iocb, iter, true);
10561 + return nfs_file_direct_write(iocb, iter, true);
10562 }
10563
10564 static void nfs_direct_release_pages(struct page **pages, unsigned int npages)
10565 @@ -524,6 +524,7 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
10566 * nfs_file_direct_read - file direct read operation for NFS files
10567 * @iocb: target I/O control block
10568 * @iter: vector of user buffers into which to read data
10569 + * @swap: flag indicating this is swap IO, not O_DIRECT IO
10570 *
10571 * We use this function for direct reads instead of calling
10572 * generic_file_aio_read() in order to avoid gfar's check to see if
10573 @@ -539,7 +540,8 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,
10574 * client must read the updated atime from the server back into its
10575 * cache.
10576 */
10577 -ssize_t nfs_file_direct_read(struct kiocb *iocb, struct iov_iter *iter)
10578 +ssize_t nfs_file_direct_read(struct kiocb *iocb, struct iov_iter *iter,
10579 + bool swap)
10580 {
10581 struct file *file = iocb->ki_filp;
10582 struct address_space *mapping = file->f_mapping;
10583 @@ -581,12 +583,14 @@ ssize_t nfs_file_direct_read(struct kiocb *iocb, struct iov_iter *iter)
10584 if (iter_is_iovec(iter))
10585 dreq->flags = NFS_ODIRECT_SHOULD_DIRTY;
10586
10587 - nfs_start_io_direct(inode);
10588 + if (!swap)
10589 + nfs_start_io_direct(inode);
10590
10591 NFS_I(inode)->read_io += count;
10592 requested = nfs_direct_read_schedule_iovec(dreq, iter, iocb->ki_pos);
10593
10594 - nfs_end_io_direct(inode);
10595 + if (!swap)
10596 + nfs_end_io_direct(inode);
10597
10598 if (requested > 0) {
10599 result = nfs_direct_wait(dreq);
10600 @@ -851,7 +855,7 @@ static const struct nfs_pgio_completion_ops nfs_direct_write_completion_ops = {
10601 */
10602 static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
10603 struct iov_iter *iter,
10604 - loff_t pos)
10605 + loff_t pos, int ioflags)
10606 {
10607 struct nfs_pageio_descriptor desc;
10608 struct inode *inode = dreq->inode;
10609 @@ -859,7 +863,7 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
10610 size_t requested_bytes = 0;
10611 size_t wsize = max_t(size_t, NFS_SERVER(inode)->wsize, PAGE_SIZE);
10612
10613 - nfs_pageio_init_write(&desc, inode, FLUSH_COND_STABLE, false,
10614 + nfs_pageio_init_write(&desc, inode, ioflags, false,
10615 &nfs_direct_write_completion_ops);
10616 desc.pg_dreq = dreq;
10617 get_dreq(dreq);
10618 @@ -937,6 +941,7 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
10619 * nfs_file_direct_write - file direct write operation for NFS files
10620 * @iocb: target I/O control block
10621 * @iter: vector of user buffers from which to write data
10622 + * @swap: flag indicating this is swap IO, not O_DIRECT IO
10623 *
10624 * We use this function for direct writes instead of calling
10625 * generic_file_aio_write() in order to avoid taking the inode
10626 @@ -953,7 +958,8 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,
10627 * Note that O_APPEND is not supported for NFS direct writes, as there
10628 * is no atomic O_APPEND write facility in the NFS protocol.
10629 */
10630 -ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
10631 +ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter,
10632 + bool swap)
10633 {
10634 ssize_t result = -EINVAL, requested;
10635 size_t count;
10636 @@ -967,7 +973,11 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
10637 dfprintk(FILE, "NFS: direct write(%pD2, %zd@%Ld)\n",
10638 file, iov_iter_count(iter), (long long) iocb->ki_pos);
10639
10640 - result = generic_write_checks(iocb, iter);
10641 + if (swap)
10642 + /* bypass generic checks */
10643 + result = iov_iter_count(iter);
10644 + else
10645 + result = generic_write_checks(iocb, iter);
10646 if (result <= 0)
10647 return result;
10648 count = result;
10649 @@ -997,16 +1007,22 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
10650 if (!is_sync_kiocb(iocb))
10651 dreq->iocb = iocb;
10652
10653 - nfs_start_io_direct(inode);
10654 + if (swap) {
10655 + requested = nfs_direct_write_schedule_iovec(dreq, iter, pos,
10656 + FLUSH_STABLE);
10657 + } else {
10658 + nfs_start_io_direct(inode);
10659
10660 - requested = nfs_direct_write_schedule_iovec(dreq, iter, pos);
10661 + requested = nfs_direct_write_schedule_iovec(dreq, iter, pos,
10662 + FLUSH_COND_STABLE);
10663
10664 - if (mapping->nrpages) {
10665 - invalidate_inode_pages2_range(mapping,
10666 - pos >> PAGE_SHIFT, end);
10667 - }
10668 + if (mapping->nrpages) {
10669 + invalidate_inode_pages2_range(mapping,
10670 + pos >> PAGE_SHIFT, end);
10671 + }
10672
10673 - nfs_end_io_direct(inode);
10674 + nfs_end_io_direct(inode);
10675 + }
10676
10677 if (requested > 0) {
10678 result = nfs_direct_wait(dreq);
10679 diff --git a/fs/nfs/file.c b/fs/nfs/file.c
10680 index 387a2cfa7e172..73415970af381 100644
10681 --- a/fs/nfs/file.c
10682 +++ b/fs/nfs/file.c
10683 @@ -161,7 +161,7 @@ nfs_file_read(struct kiocb *iocb, struct iov_iter *to)
10684 ssize_t result;
10685
10686 if (iocb->ki_flags & IOCB_DIRECT)
10687 - return nfs_file_direct_read(iocb, to);
10688 + return nfs_file_direct_read(iocb, to, false);
10689
10690 dprintk("NFS: read(%pD2, %zu@%lu)\n",
10691 iocb->ki_filp,
10692 @@ -609,7 +609,7 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from)
10693 return result;
10694
10695 if (iocb->ki_flags & IOCB_DIRECT)
10696 - return nfs_file_direct_write(iocb, from);
10697 + return nfs_file_direct_write(iocb, from, false);
10698
10699 dprintk("NFS: write(%pD2, %zu@%Ld)\n",
10700 file, iov_iter_count(from), (long long) iocb->ki_pos);
10701 diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c
10702 index 887f9136a9db3..af557dc2cfe1d 100644
10703 --- a/fs/nfs/nfs2xdr.c
10704 +++ b/fs/nfs/nfs2xdr.c
10705 @@ -953,7 +953,7 @@ int nfs2_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
10706
10707 error = decode_filename_inline(xdr, &entry->name, &entry->len);
10708 if (unlikely(error))
10709 - return error;
10710 + return -EAGAIN;
10711
10712 /*
10713 * The type (size and byte order) of nfscookie isn't defined in
10714 diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c
10715 index 23d75cddbb2ee..84369d51353a5 100644
10716 --- a/fs/nfs/nfs3xdr.c
10717 +++ b/fs/nfs/nfs3xdr.c
10718 @@ -1968,7 +1968,6 @@ int nfs3_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
10719 bool plus)
10720 {
10721 struct user_namespace *userns = rpc_userns(entry->server->client);
10722 - struct nfs_entry old = *entry;
10723 __be32 *p;
10724 int error;
10725 u64 new_cookie;
10726 @@ -1988,15 +1987,15 @@ int nfs3_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
10727
10728 error = decode_fileid3(xdr, &entry->ino);
10729 if (unlikely(error))
10730 - return error;
10731 + return -EAGAIN;
10732
10733 error = decode_inline_filename3(xdr, &entry->name, &entry->len);
10734 if (unlikely(error))
10735 - return error;
10736 + return -EAGAIN;
10737
10738 error = decode_cookie3(xdr, &new_cookie);
10739 if (unlikely(error))
10740 - return error;
10741 + return -EAGAIN;
10742
10743 entry->d_type = DT_UNKNOWN;
10744
10745 @@ -2004,7 +2003,7 @@ int nfs3_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
10746 entry->fattr->valid = 0;
10747 error = decode_post_op_attr(xdr, entry->fattr, userns);
10748 if (unlikely(error))
10749 - return error;
10750 + return -EAGAIN;
10751 if (entry->fattr->valid & NFS_ATTR_FATTR_V3)
10752 entry->d_type = nfs_umode_to_dtype(entry->fattr->mode);
10753
10754 @@ -2019,11 +2018,8 @@ int nfs3_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
10755 return -EAGAIN;
10756 if (*p != xdr_zero) {
10757 error = decode_nfs_fh3(xdr, entry->fh);
10758 - if (unlikely(error)) {
10759 - if (error == -E2BIG)
10760 - goto out_truncated;
10761 - return error;
10762 - }
10763 + if (unlikely(error))
10764 + return -EAGAIN;
10765 } else
10766 zero_nfs_fh3(entry->fh);
10767 }
10768 @@ -2032,11 +2028,6 @@ int nfs3_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
10769 entry->cookie = new_cookie;
10770
10771 return 0;
10772 -
10773 -out_truncated:
10774 - dprintk("NFS: directory entry contains invalid file handle\n");
10775 - *entry = old;
10776 - return -EAGAIN;
10777 }
10778
10779 /*
10780 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
10781 index fb3d1532f11dd..76baf7b441f3c 100644
10782 --- a/fs/nfs/nfs4proc.c
10783 +++ b/fs/nfs/nfs4proc.c
10784 @@ -7918,6 +7918,7 @@ nfs4_bind_one_conn_to_session_done(struct rpc_task *task, void *calldata)
10785 case -NFS4ERR_DEADSESSION:
10786 nfs4_schedule_session_recovery(clp->cl_session,
10787 task->tk_status);
10788 + return;
10789 }
10790 if (args->dir == NFS4_CDFC4_FORE_OR_BOTH &&
10791 res->dir != NFS4_CDFS4_BOTH) {
10792 diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
10793 index aa2caba38a014..1d2b81a233bbb 100644
10794 --- a/fs/nfs/nfs4state.c
10795 +++ b/fs/nfs/nfs4state.c
10796 @@ -49,6 +49,7 @@
10797 #include <linux/workqueue.h>
10798 #include <linux/bitops.h>
10799 #include <linux/jiffies.h>
10800 +#include <linux/sched/mm.h>
10801
10802 #include <linux/sunrpc/clnt.h>
10803
10804 @@ -2504,9 +2505,17 @@ static int nfs4_bind_conn_to_session(struct nfs_client *clp)
10805
10806 static void nfs4_state_manager(struct nfs_client *clp)
10807 {
10808 + unsigned int memflags;
10809 int status = 0;
10810 const char *section = "", *section_sep = "";
10811
10812 + /*
10813 + * State recovery can deadlock if the direct reclaim code tries
10814 + * start NFS writeback. So ensure memory allocations are all
10815 + * GFP_NOFS.
10816 + */
10817 + memflags = memalloc_nofs_save();
10818 +
10819 /* Ensure exclusive access to NFSv4 state */
10820 do {
10821 clear_bit(NFS4CLNT_RUN_MANAGER, &clp->cl_state);
10822 @@ -2600,6 +2609,7 @@ static void nfs4_state_manager(struct nfs_client *clp)
10823 clear_bit(NFS4CLNT_RECLAIM_NOGRACE, &clp->cl_state);
10824 }
10825
10826 + memalloc_nofs_restore(memflags);
10827 nfs4_end_drain_session(clp);
10828 nfs4_clear_state_manager_bit(clp);
10829
10830 @@ -2616,6 +2626,7 @@ static void nfs4_state_manager(struct nfs_client *clp)
10831 return;
10832 if (test_and_set_bit(NFS4CLNT_MANAGER_RUNNING, &clp->cl_state) != 0)
10833 return;
10834 + memflags = memalloc_nofs_save();
10835 } while (refcount_read(&clp->cl_count) > 1 && !signalled());
10836 goto out_drain;
10837
10838 @@ -2627,6 +2638,7 @@ out_error:
10839 clp->cl_hostname, -status);
10840 ssleep(1);
10841 out_drain:
10842 + memalloc_nofs_restore(memflags);
10843 nfs4_end_drain_session(clp);
10844 nfs4_clear_state_manager_bit(clp);
10845 }
10846 diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
10847 index 1b512df1003f9..0471b6e0da16f 100644
10848 --- a/fs/nfs/pnfs.c
10849 +++ b/fs/nfs/pnfs.c
10850 @@ -92,6 +92,17 @@ find_pnfs_driver(u32 id)
10851 return local;
10852 }
10853
10854 +const struct pnfs_layoutdriver_type *pnfs_find_layoutdriver(u32 id)
10855 +{
10856 + return find_pnfs_driver(id);
10857 +}
10858 +
10859 +void pnfs_put_layoutdriver(const struct pnfs_layoutdriver_type *ld)
10860 +{
10861 + if (ld)
10862 + module_put(ld->owner);
10863 +}
10864 +
10865 void
10866 unset_pnfs_layoutdriver(struct nfs_server *nfss)
10867 {
10868 diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
10869 index 3d55edd6b25ad..68339680bb7d1 100644
10870 --- a/fs/nfs/pnfs.h
10871 +++ b/fs/nfs/pnfs.h
10872 @@ -226,6 +226,8 @@ struct pnfs_devicelist {
10873
10874 extern int pnfs_register_layoutdriver(struct pnfs_layoutdriver_type *);
10875 extern void pnfs_unregister_layoutdriver(struct pnfs_layoutdriver_type *);
10876 +extern const struct pnfs_layoutdriver_type *pnfs_find_layoutdriver(u32 id);
10877 +extern void pnfs_put_layoutdriver(const struct pnfs_layoutdriver_type *ld);
10878
10879 /* nfs4proc.c */
10880 extern size_t max_response_pages(struct nfs_server *server);
10881 diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c
10882 index 754c763374dd5..4aca93e11af77 100644
10883 --- a/fs/nfsd/nfsproc.c
10884 +++ b/fs/nfsd/nfsproc.c
10885 @@ -230,7 +230,7 @@ nfsd_proc_write(struct svc_rqst *rqstp)
10886 unsigned long cnt = argp->len;
10887 unsigned int nvecs;
10888
10889 - dprintk("nfsd: WRITE %s %d bytes at %d\n",
10890 + dprintk("nfsd: WRITE %s %u bytes at %d\n",
10891 SVCFH_fmt(&argp->fh),
10892 argp->len, argp->offset);
10893
10894 diff --git a/fs/nfsd/xdr.h b/fs/nfsd/xdr.h
10895 index ea7cca3a64b76..6251d8754c82b 100644
10896 --- a/fs/nfsd/xdr.h
10897 +++ b/fs/nfsd/xdr.h
10898 @@ -33,7 +33,7 @@ struct nfsd_readargs {
10899 struct nfsd_writeargs {
10900 svc_fh fh;
10901 __u32 offset;
10902 - int len;
10903 + __u32 len;
10904 struct kvec first;
10905 };
10906
10907 diff --git a/fs/ntfs/inode.c b/fs/ntfs/inode.c
10908 index ea18e4a2a691d..cf222c9225d6d 100644
10909 --- a/fs/ntfs/inode.c
10910 +++ b/fs/ntfs/inode.c
10911 @@ -1881,6 +1881,10 @@ int ntfs_read_inode_mount(struct inode *vi)
10912 }
10913 /* Now allocate memory for the attribute list. */
10914 ni->attr_list_size = (u32)ntfs_attr_size(a);
10915 + if (!ni->attr_list_size) {
10916 + ntfs_error(sb, "Attr_list_size is zero");
10917 + goto put_err_out;
10918 + }
10919 ni->attr_list = ntfs_malloc_nofs(ni->attr_list_size);
10920 if (!ni->attr_list) {
10921 ntfs_error(sb, "Not enough memory to allocate buffer "
10922 diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
10923 index eeb93f009b282..83a173feb6989 100644
10924 --- a/fs/ubifs/dir.c
10925 +++ b/fs/ubifs/dir.c
10926 @@ -361,15 +361,18 @@ static int do_tmpfile(struct inode *dir, struct dentry *dentry,
10927 {
10928 struct inode *inode;
10929 struct ubifs_info *c = dir->i_sb->s_fs_info;
10930 - struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1};
10931 + struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1,
10932 + .dirtied_ino = 1};
10933 struct ubifs_budget_req ino_req = { .dirtied_ino = 1 };
10934 struct ubifs_inode *ui, *dir_ui = ubifs_inode(dir);
10935 int err, instantiated = 0;
10936 struct fscrypt_name nm;
10937
10938 /*
10939 - * Budget request settings: new dirty inode, new direntry,
10940 - * budget for dirtied inode will be released via writeback.
10941 + * Budget request settings: new inode, new direntry, changing the
10942 + * parent directory inode.
10943 + * Allocate budget separately for new dirtied inode, the budget will
10944 + * be released via writeback.
10945 */
10946
10947 dbg_gen("dent '%pd', mode %#hx in dir ino %lu",
10948 @@ -439,6 +442,8 @@ out_inode:
10949 make_bad_inode(inode);
10950 if (!instantiated)
10951 iput(inode);
10952 + else if (whiteout)
10953 + iput(*whiteout);
10954 out_budg:
10955 ubifs_release_budget(c, &req);
10956 if (!instantiated)
10957 @@ -955,7 +960,8 @@ static int ubifs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
10958 struct ubifs_inode *dir_ui = ubifs_inode(dir);
10959 struct ubifs_info *c = dir->i_sb->s_fs_info;
10960 int err, sz_change;
10961 - struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1 };
10962 + struct ubifs_budget_req req = { .new_ino = 1, .new_dent = 1,
10963 + .dirtied_ino = 1};
10964 struct fscrypt_name nm;
10965
10966 /*
10967 @@ -1330,6 +1336,7 @@ static int do_rename(struct inode *old_dir, struct dentry *old_dentry,
10968
10969 if (flags & RENAME_WHITEOUT) {
10970 union ubifs_dev_desc *dev = NULL;
10971 + struct ubifs_budget_req wht_req;
10972
10973 dev = kmalloc(sizeof(union ubifs_dev_desc), GFP_NOFS);
10974 if (!dev) {
10975 @@ -1351,6 +1358,23 @@ static int do_rename(struct inode *old_dir, struct dentry *old_dentry,
10976 whiteout_ui->data = dev;
10977 whiteout_ui->data_len = ubifs_encode_dev(dev, MKDEV(0, 0));
10978 ubifs_assert(c, !whiteout_ui->dirty);
10979 +
10980 + memset(&wht_req, 0, sizeof(struct ubifs_budget_req));
10981 + wht_req.dirtied_ino = 1;
10982 + wht_req.dirtied_ino_d = ALIGN(whiteout_ui->data_len, 8);
10983 + /*
10984 + * To avoid deadlock between space budget (holds ui_mutex and
10985 + * waits wb work) and writeback work(waits ui_mutex), do space
10986 + * budget before ubifs inodes locked.
10987 + */
10988 + err = ubifs_budget_space(c, &wht_req);
10989 + if (err) {
10990 + iput(whiteout);
10991 + goto out_release;
10992 + }
10993 +
10994 + /* Add the old_dentry size to the old_dir size. */
10995 + old_sz -= CALC_DENT_SIZE(fname_len(&old_nm));
10996 }
10997
10998 lock_4_inodes(old_dir, new_dir, new_inode, whiteout);
10999 @@ -1425,18 +1449,6 @@ static int do_rename(struct inode *old_dir, struct dentry *old_dentry,
11000 }
11001
11002 if (whiteout) {
11003 - struct ubifs_budget_req wht_req = { .dirtied_ino = 1,
11004 - .dirtied_ino_d = \
11005 - ALIGN(ubifs_inode(whiteout)->data_len, 8) };
11006 -
11007 - err = ubifs_budget_space(c, &wht_req);
11008 - if (err) {
11009 - kfree(whiteout_ui->data);
11010 - whiteout_ui->data_len = 0;
11011 - iput(whiteout);
11012 - goto out_release;
11013 - }
11014 -
11015 inc_nlink(whiteout);
11016 mark_inode_dirty(whiteout);
11017
11018 diff --git a/fs/ubifs/io.c b/fs/ubifs/io.c
11019 index eae9cf5a57b05..89b671ad0f9aa 100644
11020 --- a/fs/ubifs/io.c
11021 +++ b/fs/ubifs/io.c
11022 @@ -846,16 +846,42 @@ int ubifs_wbuf_write_nolock(struct ubifs_wbuf *wbuf, void *buf, int len)
11023 */
11024 n = aligned_len >> c->max_write_shift;
11025 if (n) {
11026 - n <<= c->max_write_shift;
11027 + int m = n - 1;
11028 +
11029 dbg_io("write %d bytes to LEB %d:%d", n, wbuf->lnum,
11030 wbuf->offs);
11031 - err = ubifs_leb_write(c, wbuf->lnum, buf + written,
11032 - wbuf->offs, n);
11033 +
11034 + if (m) {
11035 + /* '(n-1)<<c->max_write_shift < len' is always true. */
11036 + m <<= c->max_write_shift;
11037 + err = ubifs_leb_write(c, wbuf->lnum, buf + written,
11038 + wbuf->offs, m);
11039 + if (err)
11040 + goto out;
11041 + wbuf->offs += m;
11042 + aligned_len -= m;
11043 + len -= m;
11044 + written += m;
11045 + }
11046 +
11047 + /*
11048 + * The non-written len of buf may be less than 'n' because
11049 + * parameter 'len' is not 8 bytes aligned, so here we read
11050 + * min(len, n) bytes from buf.
11051 + */
11052 + n = 1 << c->max_write_shift;
11053 + memcpy(wbuf->buf, buf + written, min(len, n));
11054 + if (n > len) {
11055 + ubifs_assert(c, n - len < 8);
11056 + ubifs_pad(c, wbuf->buf + len, n - len);
11057 + }
11058 +
11059 + err = ubifs_leb_write(c, wbuf->lnum, wbuf->buf, wbuf->offs, n);
11060 if (err)
11061 goto out;
11062 wbuf->offs += n;
11063 aligned_len -= n;
11064 - len -= n;
11065 + len -= min(len, n);
11066 written += n;
11067 }
11068
11069 diff --git a/fs/ubifs/ioctl.c b/fs/ubifs/ioctl.c
11070 index eeb1be2598881..2923d5a6a7c0b 100644
11071 --- a/fs/ubifs/ioctl.c
11072 +++ b/fs/ubifs/ioctl.c
11073 @@ -101,7 +101,7 @@ static int setflags(struct inode *inode, int flags)
11074 struct ubifs_inode *ui = ubifs_inode(inode);
11075 struct ubifs_info *c = inode->i_sb->s_fs_info;
11076 struct ubifs_budget_req req = { .dirtied_ino = 1,
11077 - .dirtied_ino_d = ui->data_len };
11078 + .dirtied_ino_d = ALIGN(ui->data_len, 8) };
11079
11080 err = ubifs_budget_space(c, &req);
11081 if (err)
11082 diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h
11083 index bed9e43f94260..46139c0f510fa 100644
11084 --- a/include/linux/blk-cgroup.h
11085 +++ b/include/linux/blk-cgroup.h
11086 @@ -22,6 +22,7 @@
11087 #include <linux/atomic.h>
11088 #include <linux/kthread.h>
11089 #include <linux/fs.h>
11090 +#include <linux/blkdev.h>
11091
11092 /* percpu_counter batch for blkg_[rw]stats, per-cpu drift doesn't matter */
11093 #define BLKG_STAT_CPU_BATCH (INT_MAX / 2)
11094 @@ -768,6 +769,21 @@ static inline void blkcg_use_delay(struct blkcg_gq *blkg)
11095 atomic_inc(&blkg->blkcg->css.cgroup->congestion_count);
11096 }
11097
11098 +/**
11099 + * blk_cgroup_mergeable - Determine whether to allow or disallow merges
11100 + * @rq: request to merge into
11101 + * @bio: bio to merge
11102 + *
11103 + * @bio and @rq should belong to the same cgroup and their issue_as_root should
11104 + * match. The latter is necessary as we don't want to throttle e.g. a metadata
11105 + * update because it happens to be next to a regular IO.
11106 + */
11107 +static inline bool blk_cgroup_mergeable(struct request *rq, struct bio *bio)
11108 +{
11109 + return rq->bio->bi_blkg == bio->bi_blkg &&
11110 + bio_issue_as_root_blkg(rq->bio) == bio_issue_as_root_blkg(bio);
11111 +}
11112 +
11113 static inline int blkcg_unuse_delay(struct blkcg_gq *blkg)
11114 {
11115 int old = atomic_read(&blkg->use_delay);
11116 @@ -868,6 +884,7 @@ static inline bool blkcg_punt_bio_submit(struct bio *bio) { return false; }
11117 static inline void blkcg_bio_issue_init(struct bio *bio) { }
11118 static inline bool blkcg_bio_issue_check(struct request_queue *q,
11119 struct bio *bio) { return true; }
11120 +static inline bool blk_cgroup_mergeable(struct request *rq, struct bio *bio) { return true; }
11121
11122 #define blk_queue_for_each_rl(rl, q) \
11123 for ((rl) = &(q)->root_rl; (rl); (rl) = NULL)
11124 diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
11125 index d5338b9ee5502..8cc766743270f 100644
11126 --- a/include/linux/blkdev.h
11127 +++ b/include/linux/blkdev.h
11128 @@ -59,6 +59,14 @@ struct blk_stat_callback;
11129 */
11130 #define BLKCG_MAX_POLS 5
11131
11132 +static inline int blk_validate_block_size(unsigned int bsize)
11133 +{
11134 + if (bsize < 512 || bsize > PAGE_SIZE || !is_power_of_2(bsize))
11135 + return -EINVAL;
11136 +
11137 + return 0;
11138 +}
11139 +
11140 typedef void (rq_end_io_fn)(struct request *, blk_status_t);
11141
11142 /*
11143 diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
11144 index 4d450672b7d66..da90f20e11c1c 100644
11145 --- a/include/linux/dma-mapping.h
11146 +++ b/include/linux/dma-mapping.h
11147 @@ -70,6 +70,14 @@
11148 */
11149 #define DMA_ATTR_PRIVILEGED (1UL << 9)
11150
11151 +/*
11152 + * This is a hint to the DMA-mapping subsystem that the device is expected
11153 + * to overwrite the entire mapped size, thus the caller does not require any
11154 + * of the previous buffer contents to be preserved. This allows
11155 + * bounce-buffering implementations to optimise DMA_FROM_DEVICE transfers.
11156 + */
11157 +#define DMA_ATTR_OVERWRITE (1UL << 10)
11158 +
11159 /*
11160 * A dma_addr_t can hold any valid DMA or bus address for the platform.
11161 * It can be given to a device to use as a DMA source or target. A CPU cannot
11162 diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
11163 index bbe297bbbca52..d5c507311efb1 100644
11164 --- a/include/linux/ipv6.h
11165 +++ b/include/linux/ipv6.h
11166 @@ -50,7 +50,7 @@ struct ipv6_devconf {
11167 __s32 use_optimistic;
11168 #endif
11169 #ifdef CONFIG_IPV6_MROUTE
11170 - __s32 mc_forwarding;
11171 + atomic_t mc_forwarding;
11172 #endif
11173 __s32 disable_ipv6;
11174 __s32 drop_unicast_in_l2_multicast;
11175 diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
11176 index bc8a70a7c5a13..e4f9df955040f 100644
11177 --- a/include/linux/mmzone.h
11178 +++ b/include/linux/mmzone.h
11179 @@ -1250,13 +1250,16 @@ static inline unsigned long *section_to_usemap(struct mem_section *ms)
11180
11181 static inline struct mem_section *__nr_to_section(unsigned long nr)
11182 {
11183 + unsigned long root = SECTION_NR_TO_ROOT(nr);
11184 +
11185 + if (unlikely(root >= NR_SECTION_ROOTS))
11186 + return NULL;
11187 +
11188 #ifdef CONFIG_SPARSEMEM_EXTREME
11189 - if (!mem_section)
11190 + if (!mem_section || !mem_section[root])
11191 return NULL;
11192 #endif
11193 - if (!mem_section[SECTION_NR_TO_ROOT(nr)])
11194 - return NULL;
11195 - return &mem_section[SECTION_NR_TO_ROOT(nr)][nr & SECTION_ROOT_MASK];
11196 + return &mem_section[root][nr & SECTION_ROOT_MASK];
11197 }
11198 extern unsigned long __section_nr(struct mem_section *ms);
11199 extern size_t mem_section_usage_size(void);
11200 diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
11201 index 288a586782563..c70b79dba1dc1 100644
11202 --- a/include/linux/netdevice.h
11203 +++ b/include/linux/netdevice.h
11204 @@ -3777,7 +3777,8 @@ void netdev_run_todo(void);
11205 */
11206 static inline void dev_put(struct net_device *dev)
11207 {
11208 - this_cpu_dec(*dev->pcpu_refcnt);
11209 + if (dev)
11210 + this_cpu_dec(*dev->pcpu_refcnt);
11211 }
11212
11213 /**
11214 @@ -3788,7 +3789,8 @@ static inline void dev_put(struct net_device *dev)
11215 */
11216 static inline void dev_hold(struct net_device *dev)
11217 {
11218 - this_cpu_inc(*dev->pcpu_refcnt);
11219 + if (dev)
11220 + this_cpu_inc(*dev->pcpu_refcnt);
11221 }
11222
11223 /* Carrier loss detection, dial on demand. The functions netif_carrier_on
11224 diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
11225 index 978ef674f0388..49cf5c855cbe5 100644
11226 --- a/include/linux/nfs_fs.h
11227 +++ b/include/linux/nfs_fs.h
11228 @@ -480,10 +480,10 @@ static inline const struct cred *nfs_file_cred(struct file *file)
11229 * linux/fs/nfs/direct.c
11230 */
11231 extern ssize_t nfs_direct_IO(struct kiocb *, struct iov_iter *);
11232 -extern ssize_t nfs_file_direct_read(struct kiocb *iocb,
11233 - struct iov_iter *iter);
11234 -extern ssize_t nfs_file_direct_write(struct kiocb *iocb,
11235 - struct iov_iter *iter);
11236 +ssize_t nfs_file_direct_read(struct kiocb *iocb,
11237 + struct iov_iter *iter, bool swap);
11238 +ssize_t nfs_file_direct_write(struct kiocb *iocb,
11239 + struct iov_iter *iter, bool swap);
11240
11241 /*
11242 * linux/fs/nfs/dir.c
11243 diff --git a/include/linux/pci.h b/include/linux/pci.h
11244 index bc35b15efadd0..fc343d123127b 100644
11245 --- a/include/linux/pci.h
11246 +++ b/include/linux/pci.h
11247 @@ -604,6 +604,7 @@ struct pci_bus {
11248 struct bin_attribute *legacy_io; /* Legacy I/O for this bus */
11249 struct bin_attribute *legacy_mem; /* Legacy mem */
11250 unsigned int is_added:1;
11251 + unsigned int unsafe_warn:1; /* warned about RW1C config write */
11252 };
11253
11254 #define to_pci_bus(n) container_of(n, struct pci_bus, dev)
11255 diff --git a/include/linux/sunrpc/xdr.h b/include/linux/sunrpc/xdr.h
11256 index a8d68c5a4ca61..fb0a6d6c91e48 100644
11257 --- a/include/linux/sunrpc/xdr.h
11258 +++ b/include/linux/sunrpc/xdr.h
11259 @@ -536,6 +536,8 @@ xdr_stream_decode_uint32_array(struct xdr_stream *xdr,
11260
11261 if (unlikely(xdr_stream_decode_u32(xdr, &len) < 0))
11262 return -EBADMSG;
11263 + if (len > SIZE_MAX / sizeof(*p))
11264 + return -EBADMSG;
11265 p = xdr_inline_decode(xdr, len * sizeof(*p));
11266 if (unlikely(!p))
11267 return -EBADMSG;
11268 diff --git a/include/net/arp.h b/include/net/arp.h
11269 index 4950191f6b2bf..4a23a97195f33 100644
11270 --- a/include/net/arp.h
11271 +++ b/include/net/arp.h
11272 @@ -71,6 +71,7 @@ void arp_send(int type, int ptype, __be32 dest_ip,
11273 const unsigned char *src_hw, const unsigned char *th);
11274 int arp_mc_map(__be32 addr, u8 *haddr, struct net_device *dev, int dir);
11275 void arp_ifdown(struct net_device *dev);
11276 +int arp_invalidate(struct net_device *dev, __be32 ip, bool force);
11277
11278 struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip,
11279 struct net_device *dev, __be32 src_ip,
11280 diff --git a/include/net/udp.h b/include/net/udp.h
11281 index d9d39cc20a847..9787a42f7ed3e 100644
11282 --- a/include/net/udp.h
11283 +++ b/include/net/udp.h
11284 @@ -459,6 +459,7 @@ void udp_init(void);
11285
11286 DECLARE_STATIC_KEY_FALSE(udp_encap_needed_key);
11287 void udp_encap_enable(void);
11288 +void udp_encap_disable(void);
11289 #if IS_ENABLED(CONFIG_IPV6)
11290 DECLARE_STATIC_KEY_FALSE(udpv6_encap_needed_key);
11291 void udpv6_encap_enable(void);
11292 diff --git a/include/net/udp_tunnel.h b/include/net/udp_tunnel.h
11293 index 4b1f95e083070..27bf9f4dd1d45 100644
11294 --- a/include/net/udp_tunnel.h
11295 +++ b/include/net/udp_tunnel.h
11296 @@ -178,9 +178,8 @@ static inline void udp_tunnel_encap_enable(struct socket *sock)
11297 #if IS_ENABLED(CONFIG_IPV6)
11298 if (sock->sk->sk_family == PF_INET6)
11299 ipv6_stub->udpv6_encap_enable();
11300 - else
11301 #endif
11302 - udp_encap_enable();
11303 + udp_encap_enable();
11304 }
11305
11306 #endif
11307 diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
11308 index 63038eb23560b..cb0631098f918 100644
11309 --- a/include/uapi/linux/bpf.h
11310 +++ b/include/uapi/linux/bpf.h
11311 @@ -1294,8 +1294,8 @@ union bpf_attr {
11312 * Return
11313 * The return value depends on the result of the test, and can be:
11314 *
11315 - * * 0, if current task belongs to the cgroup2.
11316 - * * 1, if current task does not belong to the cgroup2.
11317 + * * 1, if current task belongs to the cgroup2.
11318 + * * 0, if current task does not belong to the cgroup2.
11319 * * A negative error code, if an error occurred.
11320 *
11321 * int bpf_skb_change_tail(struct sk_buff *skb, u32 len, u64 flags)
11322 @@ -3068,7 +3068,8 @@ struct bpf_sock {
11323 __u32 src_ip4;
11324 __u32 src_ip6[4];
11325 __u32 src_port; /* host byte order */
11326 - __u32 dst_port; /* network byte order */
11327 + __be16 dst_port; /* network byte order */
11328 + __u16 :16; /* zero padding */
11329 __u32 dst_ip4;
11330 __u32 dst_ip6[4];
11331 __u32 state;
11332 diff --git a/init/main.c b/init/main.c
11333 index e6a1fb14f3085..d292daabd9a22 100644
11334 --- a/init/main.c
11335 +++ b/init/main.c
11336 @@ -831,7 +831,7 @@ static int __init initcall_blacklist(char *str)
11337 }
11338 } while (str_entry);
11339
11340 - return 0;
11341 + return 1;
11342 }
11343
11344 static bool __init_or_module initcall_blacklisted(initcall_t fn)
11345 @@ -1072,7 +1072,9 @@ static noinline void __init kernel_init_freeable(void);
11346 bool rodata_enabled __ro_after_init = true;
11347 static int __init set_debug_rodata(char *str)
11348 {
11349 - return strtobool(str, &rodata_enabled);
11350 + if (strtobool(str, &rodata_enabled))
11351 + pr_warn("Invalid option string for rodata: '%s'\n", str);
11352 + return 1;
11353 }
11354 __setup("rodata=", set_debug_rodata);
11355 #endif
11356 diff --git a/kernel/audit.h b/kernel/audit.h
11357 index ddc22878433d0..fed8e93ce1699 100644
11358 --- a/kernel/audit.h
11359 +++ b/kernel/audit.h
11360 @@ -191,6 +191,10 @@ struct audit_context {
11361 struct {
11362 char *name;
11363 } module;
11364 + struct {
11365 + struct audit_ntp_data ntp_data;
11366 + struct timespec64 tk_injoffset;
11367 + } time;
11368 };
11369 int fds[2];
11370 struct audit_proctitle proctitle;
11371 diff --git a/kernel/auditsc.c b/kernel/auditsc.c
11372 index d33c5dccde1c7..e8e90c0c49367 100644
11373 --- a/kernel/auditsc.c
11374 +++ b/kernel/auditsc.c
11375 @@ -1185,6 +1185,53 @@ static void audit_log_fcaps(struct audit_buffer *ab, struct audit_names *name)
11376 from_kuid(&init_user_ns, name->fcap.rootid));
11377 }
11378
11379 +static void audit_log_time(struct audit_context *context, struct audit_buffer **ab)
11380 +{
11381 + const struct audit_ntp_data *ntp = &context->time.ntp_data;
11382 + const struct timespec64 *tk = &context->time.tk_injoffset;
11383 + static const char * const ntp_name[] = {
11384 + "offset",
11385 + "freq",
11386 + "status",
11387 + "tai",
11388 + "tick",
11389 + "adjust",
11390 + };
11391 + int type;
11392 +
11393 + if (context->type == AUDIT_TIME_ADJNTPVAL) {
11394 + for (type = 0; type < AUDIT_NTP_NVALS; type++) {
11395 + if (ntp->vals[type].newval != ntp->vals[type].oldval) {
11396 + if (!*ab) {
11397 + *ab = audit_log_start(context,
11398 + GFP_KERNEL,
11399 + AUDIT_TIME_ADJNTPVAL);
11400 + if (!*ab)
11401 + return;
11402 + }
11403 + audit_log_format(*ab, "op=%s old=%lli new=%lli",
11404 + ntp_name[type],
11405 + ntp->vals[type].oldval,
11406 + ntp->vals[type].newval);
11407 + audit_log_end(*ab);
11408 + *ab = NULL;
11409 + }
11410 + }
11411 + }
11412 + if (tk->tv_sec != 0 || tk->tv_nsec != 0) {
11413 + if (!*ab) {
11414 + *ab = audit_log_start(context, GFP_KERNEL,
11415 + AUDIT_TIME_INJOFFSET);
11416 + if (!*ab)
11417 + return;
11418 + }
11419 + audit_log_format(*ab, "sec=%lli nsec=%li",
11420 + (long long)tk->tv_sec, tk->tv_nsec);
11421 + audit_log_end(*ab);
11422 + *ab = NULL;
11423 + }
11424 +}
11425 +
11426 static void show_special(struct audit_context *context, int *call_panic)
11427 {
11428 struct audit_buffer *ab;
11429 @@ -1290,6 +1337,11 @@ static void show_special(struct audit_context *context, int *call_panic)
11430 audit_log_format(ab, "(null)");
11431
11432 break;
11433 + case AUDIT_TIME_ADJNTPVAL:
11434 + case AUDIT_TIME_INJOFFSET:
11435 + /* this call deviates from the rest, eating the buffer */
11436 + audit_log_time(context, &ab);
11437 + break;
11438 }
11439 audit_log_end(ab);
11440 }
11441 @@ -2518,31 +2570,26 @@ void __audit_fanotify(unsigned int response)
11442
11443 void __audit_tk_injoffset(struct timespec64 offset)
11444 {
11445 - audit_log(audit_context(), GFP_KERNEL, AUDIT_TIME_INJOFFSET,
11446 - "sec=%lli nsec=%li",
11447 - (long long)offset.tv_sec, offset.tv_nsec);
11448 -}
11449 -
11450 -static void audit_log_ntp_val(const struct audit_ntp_data *ad,
11451 - const char *op, enum audit_ntp_type type)
11452 -{
11453 - const struct audit_ntp_val *val = &ad->vals[type];
11454 -
11455 - if (val->newval == val->oldval)
11456 - return;
11457 + struct audit_context *context = audit_context();
11458
11459 - audit_log(audit_context(), GFP_KERNEL, AUDIT_TIME_ADJNTPVAL,
11460 - "op=%s old=%lli new=%lli", op, val->oldval, val->newval);
11461 + /* only set type if not already set by NTP */
11462 + if (!context->type)
11463 + context->type = AUDIT_TIME_INJOFFSET;
11464 + memcpy(&context->time.tk_injoffset, &offset, sizeof(offset));
11465 }
11466
11467 void __audit_ntp_log(const struct audit_ntp_data *ad)
11468 {
11469 - audit_log_ntp_val(ad, "offset", AUDIT_NTP_OFFSET);
11470 - audit_log_ntp_val(ad, "freq", AUDIT_NTP_FREQ);
11471 - audit_log_ntp_val(ad, "status", AUDIT_NTP_STATUS);
11472 - audit_log_ntp_val(ad, "tai", AUDIT_NTP_TAI);
11473 - audit_log_ntp_val(ad, "tick", AUDIT_NTP_TICK);
11474 - audit_log_ntp_val(ad, "adjust", AUDIT_NTP_ADJUST);
11475 + struct audit_context *context = audit_context();
11476 + int type;
11477 +
11478 + for (type = 0; type < AUDIT_NTP_NVALS; type++)
11479 + if (ad->vals[type].newval != ad->vals[type].oldval) {
11480 + /* unconditionally set type, overwriting TK */
11481 + context->type = AUDIT_TIME_ADJNTPVAL;
11482 + memcpy(&context->time.ntp_data, ad, sizeof(*ad));
11483 + break;
11484 + }
11485 }
11486
11487 static void audit_log_task(struct audit_buffer *ab)
11488 diff --git a/kernel/cgroup/cgroup-internal.h b/kernel/cgroup/cgroup-internal.h
11489 index 809e34a3c0172..236f290224aae 100644
11490 --- a/kernel/cgroup/cgroup-internal.h
11491 +++ b/kernel/cgroup/cgroup-internal.h
11492 @@ -65,6 +65,25 @@ static inline struct cgroup_fs_context *cgroup_fc2context(struct fs_context *fc)
11493 return container_of(kfc, struct cgroup_fs_context, kfc);
11494 }
11495
11496 +struct cgroup_pidlist;
11497 +
11498 +struct cgroup_file_ctx {
11499 + struct cgroup_namespace *ns;
11500 +
11501 + struct {
11502 + void *trigger;
11503 + } psi;
11504 +
11505 + struct {
11506 + bool started;
11507 + struct css_task_iter iter;
11508 + } procs;
11509 +
11510 + struct {
11511 + struct cgroup_pidlist *pidlist;
11512 + } procs1;
11513 +};
11514 +
11515 /*
11516 * A cgroup can be associated with multiple css_sets as different tasks may
11517 * belong to different cgroups on different hierarchies. In the other
11518 diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
11519 index 5e465c4b1e64c..117d70098cd49 100644
11520 --- a/kernel/cgroup/cgroup-v1.c
11521 +++ b/kernel/cgroup/cgroup-v1.c
11522 @@ -398,6 +398,7 @@ static void *cgroup_pidlist_start(struct seq_file *s, loff_t *pos)
11523 * next pid to display, if any
11524 */
11525 struct kernfs_open_file *of = s->private;
11526 + struct cgroup_file_ctx *ctx = of->priv;
11527 struct cgroup *cgrp = seq_css(s)->cgroup;
11528 struct cgroup_pidlist *l;
11529 enum cgroup_filetype type = seq_cft(s)->private;
11530 @@ -407,25 +408,24 @@ static void *cgroup_pidlist_start(struct seq_file *s, loff_t *pos)
11531 mutex_lock(&cgrp->pidlist_mutex);
11532
11533 /*
11534 - * !NULL @of->priv indicates that this isn't the first start()
11535 - * after open. If the matching pidlist is around, we can use that.
11536 - * Look for it. Note that @of->priv can't be used directly. It
11537 - * could already have been destroyed.
11538 + * !NULL @ctx->procs1.pidlist indicates that this isn't the first
11539 + * start() after open. If the matching pidlist is around, we can use
11540 + * that. Look for it. Note that @ctx->procs1.pidlist can't be used
11541 + * directly. It could already have been destroyed.
11542 */
11543 - if (of->priv)
11544 - of->priv = cgroup_pidlist_find(cgrp, type);
11545 + if (ctx->procs1.pidlist)
11546 + ctx->procs1.pidlist = cgroup_pidlist_find(cgrp, type);
11547
11548 /*
11549 * Either this is the first start() after open or the matching
11550 * pidlist has been destroyed inbetween. Create a new one.
11551 */
11552 - if (!of->priv) {
11553 - ret = pidlist_array_load(cgrp, type,
11554 - (struct cgroup_pidlist **)&of->priv);
11555 + if (!ctx->procs1.pidlist) {
11556 + ret = pidlist_array_load(cgrp, type, &ctx->procs1.pidlist);
11557 if (ret)
11558 return ERR_PTR(ret);
11559 }
11560 - l = of->priv;
11561 + l = ctx->procs1.pidlist;
11562
11563 if (pid) {
11564 int end = l->length;
11565 @@ -453,7 +453,8 @@ static void *cgroup_pidlist_start(struct seq_file *s, loff_t *pos)
11566 static void cgroup_pidlist_stop(struct seq_file *s, void *v)
11567 {
11568 struct kernfs_open_file *of = s->private;
11569 - struct cgroup_pidlist *l = of->priv;
11570 + struct cgroup_file_ctx *ctx = of->priv;
11571 + struct cgroup_pidlist *l = ctx->procs1.pidlist;
11572
11573 if (l)
11574 mod_delayed_work(cgroup_pidlist_destroy_wq, &l->destroy_dwork,
11575 @@ -464,7 +465,8 @@ static void cgroup_pidlist_stop(struct seq_file *s, void *v)
11576 static void *cgroup_pidlist_next(struct seq_file *s, void *v, loff_t *pos)
11577 {
11578 struct kernfs_open_file *of = s->private;
11579 - struct cgroup_pidlist *l = of->priv;
11580 + struct cgroup_file_ctx *ctx = of->priv;
11581 + struct cgroup_pidlist *l = ctx->procs1.pidlist;
11582 pid_t *p = v;
11583 pid_t *end = l->list + l->length;
11584 /*
11585 @@ -507,10 +509,11 @@ static ssize_t __cgroup1_procs_write(struct kernfs_open_file *of,
11586 goto out_unlock;
11587
11588 /*
11589 - * Even if we're attaching all tasks in the thread group, we only
11590 - * need to check permissions on one of them.
11591 + * Even if we're attaching all tasks in the thread group, we only need
11592 + * to check permissions on one of them. Check permissions using the
11593 + * credentials from file open to protect against inherited fd attacks.
11594 */
11595 - cred = current_cred();
11596 + cred = of->file->f_cred;
11597 tcred = get_task_cred(task);
11598 if (!uid_eq(cred->euid, GLOBAL_ROOT_UID) &&
11599 !uid_eq(cred->euid, tcred->uid) &&
11600 diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
11601 index ce1745ac7b8c0..177d57ce90164 100644
11602 --- a/kernel/cgroup/cgroup.c
11603 +++ b/kernel/cgroup/cgroup.c
11604 @@ -3648,6 +3648,7 @@ static int cgroup_cpu_pressure_show(struct seq_file *seq, void *v)
11605 static ssize_t cgroup_pressure_write(struct kernfs_open_file *of, char *buf,
11606 size_t nbytes, enum psi_res res)
11607 {
11608 + struct cgroup_file_ctx *ctx = of->priv;
11609 struct psi_trigger *new;
11610 struct cgroup *cgrp;
11611 struct psi_group *psi;
11612 @@ -3660,7 +3661,7 @@ static ssize_t cgroup_pressure_write(struct kernfs_open_file *of, char *buf,
11613 cgroup_kn_unlock(of->kn);
11614
11615 /* Allow only one trigger per file descriptor */
11616 - if (of->priv) {
11617 + if (ctx->psi.trigger) {
11618 cgroup_put(cgrp);
11619 return -EBUSY;
11620 }
11621 @@ -3672,7 +3673,7 @@ static ssize_t cgroup_pressure_write(struct kernfs_open_file *of, char *buf,
11622 return PTR_ERR(new);
11623 }
11624
11625 - smp_store_release(&of->priv, new);
11626 + smp_store_release(&ctx->psi.trigger, new);
11627 cgroup_put(cgrp);
11628
11629 return nbytes;
11630 @@ -3702,12 +3703,15 @@ static ssize_t cgroup_cpu_pressure_write(struct kernfs_open_file *of,
11631 static __poll_t cgroup_pressure_poll(struct kernfs_open_file *of,
11632 poll_table *pt)
11633 {
11634 - return psi_trigger_poll(&of->priv, of->file, pt);
11635 + struct cgroup_file_ctx *ctx = of->priv;
11636 + return psi_trigger_poll(&ctx->psi.trigger, of->file, pt);
11637 }
11638
11639 static void cgroup_pressure_release(struct kernfs_open_file *of)
11640 {
11641 - psi_trigger_destroy(of->priv);
11642 + struct cgroup_file_ctx *ctx = of->priv;
11643 +
11644 + psi_trigger_destroy(ctx->psi.trigger);
11645 }
11646 #endif /* CONFIG_PSI */
11647
11648 @@ -3748,24 +3752,43 @@ static ssize_t cgroup_freeze_write(struct kernfs_open_file *of,
11649 static int cgroup_file_open(struct kernfs_open_file *of)
11650 {
11651 struct cftype *cft = of->kn->priv;
11652 + struct cgroup_file_ctx *ctx;
11653 + int ret;
11654
11655 - if (cft->open)
11656 - return cft->open(of);
11657 - return 0;
11658 + ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
11659 + if (!ctx)
11660 + return -ENOMEM;
11661 +
11662 + ctx->ns = current->nsproxy->cgroup_ns;
11663 + get_cgroup_ns(ctx->ns);
11664 + of->priv = ctx;
11665 +
11666 + if (!cft->open)
11667 + return 0;
11668 +
11669 + ret = cft->open(of);
11670 + if (ret) {
11671 + put_cgroup_ns(ctx->ns);
11672 + kfree(ctx);
11673 + }
11674 + return ret;
11675 }
11676
11677 static void cgroup_file_release(struct kernfs_open_file *of)
11678 {
11679 struct cftype *cft = of->kn->priv;
11680 + struct cgroup_file_ctx *ctx = of->priv;
11681
11682 if (cft->release)
11683 cft->release(of);
11684 + put_cgroup_ns(ctx->ns);
11685 + kfree(ctx);
11686 }
11687
11688 static ssize_t cgroup_file_write(struct kernfs_open_file *of, char *buf,
11689 size_t nbytes, loff_t off)
11690 {
11691 - struct cgroup_namespace *ns = current->nsproxy->cgroup_ns;
11692 + struct cgroup_file_ctx *ctx = of->priv;
11693 struct cgroup *cgrp = of->kn->parent->priv;
11694 struct cftype *cft = of->kn->priv;
11695 struct cgroup_subsys_state *css;
11696 @@ -3779,7 +3802,7 @@ static ssize_t cgroup_file_write(struct kernfs_open_file *of, char *buf,
11697 */
11698 if ((cgrp->root->flags & CGRP_ROOT_NS_DELEGATE) &&
11699 !(cft->flags & CFTYPE_NS_DELEGATABLE) &&
11700 - ns != &init_cgroup_ns && ns->root_cset->dfl_cgrp == cgrp)
11701 + ctx->ns != &init_cgroup_ns && ctx->ns->root_cset->dfl_cgrp == cgrp)
11702 return -EPERM;
11703
11704 if (cft->write)
11705 @@ -4687,21 +4710,21 @@ void css_task_iter_end(struct css_task_iter *it)
11706
11707 static void cgroup_procs_release(struct kernfs_open_file *of)
11708 {
11709 - if (of->priv) {
11710 - css_task_iter_end(of->priv);
11711 - kfree(of->priv);
11712 - }
11713 + struct cgroup_file_ctx *ctx = of->priv;
11714 +
11715 + if (ctx->procs.started)
11716 + css_task_iter_end(&ctx->procs.iter);
11717 }
11718
11719 static void *cgroup_procs_next(struct seq_file *s, void *v, loff_t *pos)
11720 {
11721 struct kernfs_open_file *of = s->private;
11722 - struct css_task_iter *it = of->priv;
11723 + struct cgroup_file_ctx *ctx = of->priv;
11724
11725 if (pos)
11726 (*pos)++;
11727
11728 - return css_task_iter_next(it);
11729 + return css_task_iter_next(&ctx->procs.iter);
11730 }
11731
11732 static void *__cgroup_procs_start(struct seq_file *s, loff_t *pos,
11733 @@ -4709,21 +4732,18 @@ static void *__cgroup_procs_start(struct seq_file *s, loff_t *pos,
11734 {
11735 struct kernfs_open_file *of = s->private;
11736 struct cgroup *cgrp = seq_css(s)->cgroup;
11737 - struct css_task_iter *it = of->priv;
11738 + struct cgroup_file_ctx *ctx = of->priv;
11739 + struct css_task_iter *it = &ctx->procs.iter;
11740
11741 /*
11742 * When a seq_file is seeked, it's always traversed sequentially
11743 * from position 0, so we can simply keep iterating on !0 *pos.
11744 */
11745 - if (!it) {
11746 + if (!ctx->procs.started) {
11747 if (WARN_ON_ONCE((*pos)))
11748 return ERR_PTR(-EINVAL);
11749 -
11750 - it = kzalloc(sizeof(*it), GFP_KERNEL);
11751 - if (!it)
11752 - return ERR_PTR(-ENOMEM);
11753 - of->priv = it;
11754 css_task_iter_start(&cgrp->self, iter_flags, it);
11755 + ctx->procs.started = true;
11756 } else if (!(*pos)) {
11757 css_task_iter_end(it);
11758 css_task_iter_start(&cgrp->self, iter_flags, it);
11759 @@ -4758,9 +4778,9 @@ static int cgroup_procs_show(struct seq_file *s, void *v)
11760
11761 static int cgroup_procs_write_permission(struct cgroup *src_cgrp,
11762 struct cgroup *dst_cgrp,
11763 - struct super_block *sb)
11764 + struct super_block *sb,
11765 + struct cgroup_namespace *ns)
11766 {
11767 - struct cgroup_namespace *ns = current->nsproxy->cgroup_ns;
11768 struct cgroup *com_cgrp = src_cgrp;
11769 struct inode *inode;
11770 int ret;
11771 @@ -4796,8 +4816,10 @@ static int cgroup_procs_write_permission(struct cgroup *src_cgrp,
11772 static ssize_t cgroup_procs_write(struct kernfs_open_file *of,
11773 char *buf, size_t nbytes, loff_t off)
11774 {
11775 + struct cgroup_file_ctx *ctx = of->priv;
11776 struct cgroup *src_cgrp, *dst_cgrp;
11777 struct task_struct *task;
11778 + const struct cred *saved_cred;
11779 ssize_t ret;
11780
11781 dst_cgrp = cgroup_kn_lock_live(of->kn, false);
11782 @@ -4814,8 +4836,16 @@ static ssize_t cgroup_procs_write(struct kernfs_open_file *of,
11783 src_cgrp = task_cgroup_from_root(task, &cgrp_dfl_root);
11784 spin_unlock_irq(&css_set_lock);
11785
11786 + /*
11787 + * Process and thread migrations follow same delegation rule. Check
11788 + * permissions using the credentials from file open to protect against
11789 + * inherited fd attacks.
11790 + */
11791 + saved_cred = override_creds(of->file->f_cred);
11792 ret = cgroup_procs_write_permission(src_cgrp, dst_cgrp,
11793 - of->file->f_path.dentry->d_sb);
11794 + of->file->f_path.dentry->d_sb,
11795 + ctx->ns);
11796 + revert_creds(saved_cred);
11797 if (ret)
11798 goto out_finish;
11799
11800 @@ -4837,8 +4867,10 @@ static void *cgroup_threads_start(struct seq_file *s, loff_t *pos)
11801 static ssize_t cgroup_threads_write(struct kernfs_open_file *of,
11802 char *buf, size_t nbytes, loff_t off)
11803 {
11804 + struct cgroup_file_ctx *ctx = of->priv;
11805 struct cgroup *src_cgrp, *dst_cgrp;
11806 struct task_struct *task;
11807 + const struct cred *saved_cred;
11808 ssize_t ret;
11809
11810 buf = strstrip(buf);
11811 @@ -4857,9 +4889,16 @@ static ssize_t cgroup_threads_write(struct kernfs_open_file *of,
11812 src_cgrp = task_cgroup_from_root(task, &cgrp_dfl_root);
11813 spin_unlock_irq(&css_set_lock);
11814
11815 - /* thread migrations follow the cgroup.procs delegation rule */
11816 + /*
11817 + * Process and thread migrations follow same delegation rule. Check
11818 + * permissions using the credentials from file open to protect against
11819 + * inherited fd attacks.
11820 + */
11821 + saved_cred = override_creds(of->file->f_cred);
11822 ret = cgroup_procs_write_permission(src_cgrp, dst_cgrp,
11823 - of->file->f_path.dentry->d_sb);
11824 + of->file->f_path.dentry->d_sb,
11825 + ctx->ns);
11826 + revert_creds(saved_cred);
11827 if (ret)
11828 goto out_finish;
11829
11830 diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
11831 index b28665f4d8c7a..4dc3bbfd3e3f3 100644
11832 --- a/kernel/dma/debug.c
11833 +++ b/kernel/dma/debug.c
11834 @@ -980,7 +980,7 @@ static __init int dma_debug_cmdline(char *str)
11835 global_disable = true;
11836 }
11837
11838 - return 0;
11839 + return 1;
11840 }
11841
11842 static __init int dma_debug_entries_cmdline(char *str)
11843 @@ -989,7 +989,7 @@ static __init int dma_debug_entries_cmdline(char *str)
11844 return -EINVAL;
11845 if (!get_option(&str, &nr_prealloc_entries))
11846 nr_prealloc_entries = PREALLOC_DMA_DEBUG_ENTRIES;
11847 - return 0;
11848 + return 1;
11849 }
11850
11851 __setup("dma_debug=", dma_debug_cmdline);
11852 diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
11853 index f99b79d7e1235..f17b771856d1c 100644
11854 --- a/kernel/dma/swiotlb.c
11855 +++ b/kernel/dma/swiotlb.c
11856 @@ -572,7 +572,8 @@ found:
11857 for (i = 0; i < nslots; i++)
11858 io_tlb_orig_addr[index+i] = orig_addr + (i << IO_TLB_SHIFT);
11859 if (!(attrs & DMA_ATTR_SKIP_CPU_SYNC) &&
11860 - (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL))
11861 + (!(attrs & DMA_ATTR_OVERWRITE) || dir == DMA_TO_DEVICE ||
11862 + dir == DMA_BIDIRECTIONAL))
11863 swiotlb_bounce(orig_addr, tlb_addr, mapping_size, DMA_TO_DEVICE);
11864
11865 return tlb_addr;
11866 diff --git a/kernel/events/core.c b/kernel/events/core.c
11867 index f720a40ccaf5f..52f4a9e467040 100644
11868 --- a/kernel/events/core.c
11869 +++ b/kernel/events/core.c
11870 @@ -9490,8 +9490,11 @@ perf_event_parse_addr_filter(struct perf_event *event, char *fstr,
11871 }
11872
11873 /* ready to consume more filters */
11874 + kfree(filename);
11875 + filename = NULL;
11876 state = IF_STATE_ACTION;
11877 filter = NULL;
11878 + kernel = 0;
11879 }
11880 }
11881
11882 diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
11883 index 6cafb2e910a11..406b4cbbec5e7 100644
11884 --- a/kernel/power/hibernate.c
11885 +++ b/kernel/power/hibernate.c
11886 @@ -1216,7 +1216,7 @@ static int __init resumedelay_setup(char *str)
11887 int rc = kstrtouint(str, 0, &resume_delay);
11888
11889 if (rc)
11890 - return rc;
11891 + pr_warn("resumedelay: bad option string '%s'\n", str);
11892 return 1;
11893 }
11894
11895 diff --git a/kernel/power/suspend_test.c b/kernel/power/suspend_test.c
11896 index 60564b58de077..bfd2a96c695ca 100644
11897 --- a/kernel/power/suspend_test.c
11898 +++ b/kernel/power/suspend_test.c
11899 @@ -157,22 +157,22 @@ static int __init setup_test_suspend(char *value)
11900 value++;
11901 suspend_type = strsep(&value, ",");
11902 if (!suspend_type)
11903 - return 0;
11904 + return 1;
11905
11906 repeat = strsep(&value, ",");
11907 if (repeat) {
11908 if (kstrtou32(repeat, 0, &test_repeat_count_max))
11909 - return 0;
11910 + return 1;
11911 }
11912
11913 for (i = PM_SUSPEND_MIN; i < PM_SUSPEND_MAX; i++)
11914 if (!strcmp(pm_labels[i], suspend_type)) {
11915 test_state_label = pm_labels[i];
11916 - return 0;
11917 + return 1;
11918 }
11919
11920 printk(warn_bad_state, suspend_type);
11921 - return 0;
11922 + return 1;
11923 }
11924 __setup("test_suspend", setup_test_suspend);
11925
11926 diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
11927 index 23e26a203a9e9..bb2198b40756d 100644
11928 --- a/kernel/printk/printk.c
11929 +++ b/kernel/printk/printk.c
11930 @@ -146,8 +146,10 @@ static int __control_devkmsg(char *str)
11931
11932 static int __init control_devkmsg(char *str)
11933 {
11934 - if (__control_devkmsg(str) < 0)
11935 + if (__control_devkmsg(str) < 0) {
11936 + pr_warn("printk.devkmsg: bad option string '%s'\n", str);
11937 return 1;
11938 + }
11939
11940 /*
11941 * Set sysctl string accordingly:
11942 @@ -166,7 +168,7 @@ static int __init control_devkmsg(char *str)
11943 */
11944 devkmsg_log |= DEVKMSG_LOG_MASK_LOCK;
11945
11946 - return 0;
11947 + return 1;
11948 }
11949 __setup("printk.devkmsg=", control_devkmsg);
11950
11951 diff --git a/kernel/ptrace.c b/kernel/ptrace.c
11952 index eb4d04cb3aaf5..d99f73f83bf5f 100644
11953 --- a/kernel/ptrace.c
11954 +++ b/kernel/ptrace.c
11955 @@ -370,6 +370,26 @@ bool ptrace_may_access(struct task_struct *task, unsigned int mode)
11956 return !err;
11957 }
11958
11959 +static int check_ptrace_options(unsigned long data)
11960 +{
11961 + if (data & ~(unsigned long)PTRACE_O_MASK)
11962 + return -EINVAL;
11963 +
11964 + if (unlikely(data & PTRACE_O_SUSPEND_SECCOMP)) {
11965 + if (!IS_ENABLED(CONFIG_CHECKPOINT_RESTORE) ||
11966 + !IS_ENABLED(CONFIG_SECCOMP))
11967 + return -EINVAL;
11968 +
11969 + if (!capable(CAP_SYS_ADMIN))
11970 + return -EPERM;
11971 +
11972 + if (seccomp_mode(&current->seccomp) != SECCOMP_MODE_DISABLED ||
11973 + current->ptrace & PT_SUSPEND_SECCOMP)
11974 + return -EPERM;
11975 + }
11976 + return 0;
11977 +}
11978 +
11979 static int ptrace_attach(struct task_struct *task, long request,
11980 unsigned long addr,
11981 unsigned long flags)
11982 @@ -381,8 +401,16 @@ static int ptrace_attach(struct task_struct *task, long request,
11983 if (seize) {
11984 if (addr != 0)
11985 goto out;
11986 + /*
11987 + * This duplicates the check in check_ptrace_options() because
11988 + * ptrace_attach() and ptrace_setoptions() have historically
11989 + * used different error codes for unknown ptrace options.
11990 + */
11991 if (flags & ~(unsigned long)PTRACE_O_MASK)
11992 goto out;
11993 + retval = check_ptrace_options(flags);
11994 + if (retval)
11995 + return retval;
11996 flags = PT_PTRACED | PT_SEIZED | (flags << PT_OPT_FLAG_SHIFT);
11997 } else {
11998 flags = PT_PTRACED;
11999 @@ -655,22 +683,11 @@ int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long ds
12000 static int ptrace_setoptions(struct task_struct *child, unsigned long data)
12001 {
12002 unsigned flags;
12003 + int ret;
12004
12005 - if (data & ~(unsigned long)PTRACE_O_MASK)
12006 - return -EINVAL;
12007 -
12008 - if (unlikely(data & PTRACE_O_SUSPEND_SECCOMP)) {
12009 - if (!IS_ENABLED(CONFIG_CHECKPOINT_RESTORE) ||
12010 - !IS_ENABLED(CONFIG_SECCOMP))
12011 - return -EINVAL;
12012 -
12013 - if (!capable(CAP_SYS_ADMIN))
12014 - return -EPERM;
12015 -
12016 - if (seccomp_mode(&current->seccomp) != SECCOMP_MODE_DISABLED ||
12017 - current->ptrace & PT_SUSPEND_SECCOMP)
12018 - return -EPERM;
12019 - }
12020 + ret = check_ptrace_options(data);
12021 + if (ret)
12022 + return ret;
12023
12024 /* Avoid intermediate state when all opts are cleared */
12025 flags = child->ptrace;
12026 diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
12027 index faada713cfae8..d5f7fc7099bc4 100644
12028 --- a/kernel/sched/debug.c
12029 +++ b/kernel/sched/debug.c
12030 @@ -847,25 +847,15 @@ void print_numa_stats(struct seq_file *m, int node, unsigned long tsf,
12031 static void sched_show_numa(struct task_struct *p, struct seq_file *m)
12032 {
12033 #ifdef CONFIG_NUMA_BALANCING
12034 - struct mempolicy *pol;
12035 -
12036 if (p->mm)
12037 P(mm->numa_scan_seq);
12038
12039 - task_lock(p);
12040 - pol = p->mempolicy;
12041 - if (pol && !(pol->flags & MPOL_F_MORON))
12042 - pol = NULL;
12043 - mpol_get(pol);
12044 - task_unlock(p);
12045 -
12046 P(numa_pages_migrated);
12047 P(numa_preferred_nid);
12048 P(total_numa_faults);
12049 SEQ_printf(m, "current_node=%d, numa_group_id=%d\n",
12050 task_node(p), task_numa_group_id(p));
12051 show_numa_stats(p, m);
12052 - mpol_put(pol);
12053 #endif
12054 }
12055
12056 diff --git a/lib/lz4/lz4_decompress.c b/lib/lz4/lz4_decompress.c
12057 index 4d0b59fa5550f..46f24b7a32217 100644
12058 --- a/lib/lz4/lz4_decompress.c
12059 +++ b/lib/lz4/lz4_decompress.c
12060 @@ -268,8 +268,12 @@ static FORCE_INLINE int LZ4_decompress_generic(
12061 ip += length;
12062 op += length;
12063
12064 - /* Necessarily EOF, due to parsing restrictions */
12065 - if (!partialDecoding || (cpy == oend))
12066 + /* Necessarily EOF when !partialDecoding.
12067 + * When partialDecoding, it is EOF if we've either
12068 + * filled the output buffer or
12069 + * can't proceed with reading an offset for following match.
12070 + */
12071 + if (!partialDecoding || (cpy == oend) || (ip >= (iend - 2)))
12072 break;
12073 } else {
12074 /* may overwrite up to WILDCOPYLENGTH beyond cpy */
12075 diff --git a/lib/raid6/test/Makefile b/lib/raid6/test/Makefile
12076 index b9e6c3648be1a..98b9fd0354dd1 100644
12077 --- a/lib/raid6/test/Makefile
12078 +++ b/lib/raid6/test/Makefile
12079 @@ -4,6 +4,8 @@
12080 # from userspace.
12081 #
12082
12083 +pound := \#
12084 +
12085 CC = gcc
12086 OPTFLAGS = -O2 # Adjust as desired
12087 CFLAGS = -I.. -I ../../../include -g $(OPTFLAGS)
12088 @@ -47,7 +49,7 @@ else ifeq ($(HAS_NEON),yes)
12089 OBJS += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
12090 CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1
12091 else
12092 - HAS_ALTIVEC := $(shell printf '\#include <altivec.h>\nvector int a;\n' |\
12093 + HAS_ALTIVEC := $(shell printf '$(pound)include <altivec.h>\nvector int a;\n' |\
12094 gcc -c -x c - >/dev/null && rm ./-.o && echo yes)
12095 ifeq ($(HAS_ALTIVEC),yes)
12096 CFLAGS += -I../../../arch/powerpc/include
12097 diff --git a/lib/raid6/test/test.c b/lib/raid6/test/test.c
12098 index a3cf071941ab4..841a55242abaa 100644
12099 --- a/lib/raid6/test/test.c
12100 +++ b/lib/raid6/test/test.c
12101 @@ -19,7 +19,6 @@
12102 #define NDISKS 16 /* Including P and Q */
12103
12104 const char raid6_empty_zero_page[PAGE_SIZE] __attribute__((aligned(PAGE_SIZE)));
12105 -struct raid6_calls raid6_call;
12106
12107 char *dataptrs[NDISKS];
12108 char data[NDISKS][PAGE_SIZE] __attribute__((aligned(PAGE_SIZE)));
12109 diff --git a/lib/test_kmod.c b/lib/test_kmod.c
12110 index 87a0cc750ea23..6813b183aa348 100644
12111 --- a/lib/test_kmod.c
12112 +++ b/lib/test_kmod.c
12113 @@ -1155,6 +1155,7 @@ static struct kmod_test_device *register_test_dev_kmod(void)
12114 if (ret) {
12115 pr_err("could not register misc device: %d\n", ret);
12116 free_test_dev_kmod(test_dev);
12117 + test_dev = NULL;
12118 goto out;
12119 }
12120
12121 diff --git a/lib/test_xarray.c b/lib/test_xarray.c
12122 index 8262c3f05a5d3..aefa377c9c26a 100644
12123 --- a/lib/test_xarray.c
12124 +++ b/lib/test_xarray.c
12125 @@ -1438,6 +1438,25 @@ unlock:
12126 XA_BUG_ON(xa, !xa_empty(xa));
12127 }
12128
12129 +static noinline void check_create_range_5(struct xarray *xa,
12130 + unsigned long index, unsigned int order)
12131 +{
12132 + XA_STATE_ORDER(xas, xa, index, order);
12133 + unsigned int i;
12134 +
12135 + xa_store_order(xa, index, order, xa_mk_index(index), GFP_KERNEL);
12136 +
12137 + for (i = 0; i < order + 10; i++) {
12138 + do {
12139 + xas_lock(&xas);
12140 + xas_create_range(&xas);
12141 + xas_unlock(&xas);
12142 + } while (xas_nomem(&xas, GFP_KERNEL));
12143 + }
12144 +
12145 + xa_destroy(xa);
12146 +}
12147 +
12148 static noinline void check_create_range(struct xarray *xa)
12149 {
12150 unsigned int order;
12151 @@ -1465,6 +1484,9 @@ static noinline void check_create_range(struct xarray *xa)
12152 check_create_range_4(xa, (3U << order) + 1, order);
12153 check_create_range_4(xa, (3U << order) - 1, order);
12154 check_create_range_4(xa, (1U << 24) + 1, order);
12155 +
12156 + check_create_range_5(xa, 0, order);
12157 + check_create_range_5(xa, (1U << order), order);
12158 }
12159
12160 check_create_range_3();
12161 diff --git a/lib/xarray.c b/lib/xarray.c
12162 index 7d22b30591275..61464c52c20e6 100644
12163 --- a/lib/xarray.c
12164 +++ b/lib/xarray.c
12165 @@ -722,6 +722,8 @@ void xas_create_range(struct xa_state *xas)
12166
12167 for (;;) {
12168 struct xa_node *node = xas->xa_node;
12169 + if (node->shift >= shift)
12170 + break;
12171 xas->xa_node = xa_parent_locked(xas->xa, node);
12172 xas->xa_offset = node->offset - 1;
12173 if (node->offset != 0)
12174 @@ -1078,6 +1080,7 @@ void xas_split(struct xa_state *xas, void *entry, unsigned int order)
12175 xa_mk_node(child));
12176 if (xa_is_value(curr))
12177 values--;
12178 + xas_update(xas, child);
12179 } else {
12180 unsigned int canon = offset - xas->xa_sibs;
12181
12182 @@ -1092,6 +1095,7 @@ void xas_split(struct xa_state *xas, void *entry, unsigned int order)
12183 } while (offset-- > xas->xa_offset);
12184
12185 node->nr_values += values;
12186 + xas_update(xas, node);
12187 }
12188 EXPORT_SYMBOL_GPL(xas_split);
12189 #endif
12190 diff --git a/mm/kmemleak.c b/mm/kmemleak.c
12191 index 4a669c81f4e22..d8cde7292bf92 100644
12192 --- a/mm/kmemleak.c
12193 +++ b/mm/kmemleak.c
12194 @@ -787,6 +787,8 @@ static void add_scan_area(unsigned long ptr, size_t size, gfp_t gfp)
12195 unsigned long flags;
12196 struct kmemleak_object *object;
12197 struct kmemleak_scan_area *area = NULL;
12198 + unsigned long untagged_ptr;
12199 + unsigned long untagged_objp;
12200
12201 object = find_and_get_object(ptr, 1);
12202 if (!object) {
12203 @@ -795,6 +797,9 @@ static void add_scan_area(unsigned long ptr, size_t size, gfp_t gfp)
12204 return;
12205 }
12206
12207 + untagged_ptr = (unsigned long)kasan_reset_tag((void *)ptr);
12208 + untagged_objp = (unsigned long)kasan_reset_tag((void *)object->pointer);
12209 +
12210 if (scan_area_cache)
12211 area = kmem_cache_alloc(scan_area_cache, gfp_kmemleak_mask(gfp));
12212
12213 @@ -806,8 +811,8 @@ static void add_scan_area(unsigned long ptr, size_t size, gfp_t gfp)
12214 goto out_unlock;
12215 }
12216 if (size == SIZE_MAX) {
12217 - size = object->pointer + object->size - ptr;
12218 - } else if (ptr + size > object->pointer + object->size) {
12219 + size = untagged_objp + object->size - untagged_ptr;
12220 + } else if (untagged_ptr + size > untagged_objp + object->size) {
12221 kmemleak_warn("Scan area larger than object 0x%08lx\n", ptr);
12222 dump_object_info(object);
12223 kmem_cache_free(scan_area_cache, area);
12224 diff --git a/mm/memcontrol.c b/mm/memcontrol.c
12225 index 6d7fe3589e4a0..8fc6635454987 100644
12226 --- a/mm/memcontrol.c
12227 +++ b/mm/memcontrol.c
12228 @@ -6973,7 +6973,7 @@ static int __init cgroup_memory(char *s)
12229 if (!strcmp(token, "nokmem"))
12230 cgroup_memory_nokmem = true;
12231 }
12232 - return 0;
12233 + return 1;
12234 }
12235 __setup("cgroup.memory=", cgroup_memory);
12236
12237 diff --git a/mm/memory.c b/mm/memory.c
12238 index 4bb7c6a364c81..8a72fd3e73bf1 100644
12239 --- a/mm/memory.c
12240 +++ b/mm/memory.c
12241 @@ -1013,6 +1013,17 @@ int copy_page_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
12242 return ret;
12243 }
12244
12245 +/* Whether we should zap all COWed (private) pages too */
12246 +static inline bool should_zap_cows(struct zap_details *details)
12247 +{
12248 + /* By default, zap all pages */
12249 + if (!details)
12250 + return true;
12251 +
12252 + /* Or, we zap COWed pages only if the caller wants to */
12253 + return !details->check_mapping;
12254 +}
12255 +
12256 static unsigned long zap_pte_range(struct mmu_gather *tlb,
12257 struct vm_area_struct *vma, pmd_t *pmd,
12258 unsigned long addr, unsigned long end,
12259 @@ -1104,16 +1115,18 @@ again:
12260 continue;
12261 }
12262
12263 - /* If details->check_mapping, we leave swap entries. */
12264 - if (unlikely(details))
12265 - continue;
12266 -
12267 - if (!non_swap_entry(entry))
12268 + if (!non_swap_entry(entry)) {
12269 + /* Genuine swap entry, hence a private anon page */
12270 + if (!should_zap_cows(details))
12271 + continue;
12272 rss[MM_SWAPENTS]--;
12273 - else if (is_migration_entry(entry)) {
12274 + } else if (is_migration_entry(entry)) {
12275 struct page *page;
12276
12277 page = migration_entry_to_page(entry);
12278 + if (details && details->check_mapping &&
12279 + details->check_mapping != page_rmapping(page))
12280 + continue;
12281 rss[mm_counter(page)]--;
12282 }
12283 if (unlikely(!free_swap_and_cache(entry)))
12284 @@ -3245,11 +3258,20 @@ static vm_fault_t __do_fault(struct vm_fault *vmf)
12285 return ret;
12286
12287 if (unlikely(PageHWPoison(vmf->page))) {
12288 - if (ret & VM_FAULT_LOCKED)
12289 - unlock_page(vmf->page);
12290 - put_page(vmf->page);
12291 + struct page *page = vmf->page;
12292 + vm_fault_t poisonret = VM_FAULT_HWPOISON;
12293 + if (ret & VM_FAULT_LOCKED) {
12294 + if (page_mapped(page))
12295 + unmap_mapping_pages(page_mapping(page),
12296 + page->index, 1, false);
12297 + /* Retry if a clean page was removed from the cache. */
12298 + if (invalidate_inode_page(page))
12299 + poisonret = VM_FAULT_NOPAGE;
12300 + unlock_page(page);
12301 + }
12302 + put_page(page);
12303 vmf->page = NULL;
12304 - return VM_FAULT_HWPOISON;
12305 + return poisonret;
12306 }
12307
12308 if (unlikely(!(ret & VM_FAULT_LOCKED)))
12309 diff --git a/mm/mempolicy.c b/mm/mempolicy.c
12310 index 2c4082f71d258..d79ab5116a7be 100644
12311 --- a/mm/mempolicy.c
12312 +++ b/mm/mempolicy.c
12313 @@ -731,7 +731,6 @@ static int vma_replace_policy(struct vm_area_struct *vma,
12314 static int mbind_range(struct mm_struct *mm, unsigned long start,
12315 unsigned long end, struct mempolicy *new_pol)
12316 {
12317 - struct vm_area_struct *next;
12318 struct vm_area_struct *prev;
12319 struct vm_area_struct *vma;
12320 int err = 0;
12321 @@ -747,8 +746,7 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
12322 if (start > vma->vm_start)
12323 prev = vma;
12324
12325 - for (; vma && vma->vm_start < end; prev = vma, vma = next) {
12326 - next = vma->vm_next;
12327 + for (; vma && vma->vm_start < end; prev = vma, vma = vma->vm_next) {
12328 vmstart = max(start, vma->vm_start);
12329 vmend = min(end, vma->vm_end);
12330
12331 @@ -762,10 +760,6 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
12332 new_pol, vma->vm_userfaultfd_ctx);
12333 if (prev) {
12334 vma = prev;
12335 - next = vma->vm_next;
12336 - if (mpol_equal(vma_policy(vma), new_pol))
12337 - continue;
12338 - /* vma_merge() joined vma && vma->next, case 8 */
12339 goto replace;
12340 }
12341 if (vma->vm_start != vmstart) {
12342 @@ -2565,6 +2559,7 @@ alloc_new:
12343 mpol_new = kmem_cache_alloc(policy_cache, GFP_KERNEL);
12344 if (!mpol_new)
12345 goto err_out;
12346 + atomic_set(&mpol_new->refcnt, 1);
12347 goto restart;
12348 }
12349
12350 diff --git a/mm/mmap.c b/mm/mmap.c
12351 index ba78f1f1b1bd1..58cfd5b1e0b16 100644
12352 --- a/mm/mmap.c
12353 +++ b/mm/mmap.c
12354 @@ -2515,7 +2515,7 @@ static int __init cmdline_parse_stack_guard_gap(char *p)
12355 if (!*endptr)
12356 stack_guard_gap = val << PAGE_SHIFT;
12357
12358 - return 0;
12359 + return 1;
12360 }
12361 __setup("stack_guard_gap=", cmdline_parse_stack_guard_gap);
12362
12363 diff --git a/mm/mremap.c b/mm/mremap.c
12364 index 8005d0b2b8438..8ce1b7632fbb8 100644
12365 --- a/mm/mremap.c
12366 +++ b/mm/mremap.c
12367 @@ -246,6 +246,9 @@ unsigned long move_page_tables(struct vm_area_struct *vma,
12368 struct mmu_notifier_range range;
12369 pmd_t *old_pmd, *new_pmd;
12370
12371 + if (!len)
12372 + return 0;
12373 +
12374 old_end = old_addr + len;
12375 flush_cache_range(vma, old_addr, old_end);
12376
12377 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
12378 index c3835915d1157..5038611563dfb 100644
12379 --- a/mm/page_alloc.c
12380 +++ b/mm/page_alloc.c
12381 @@ -7326,10 +7326,17 @@ restart:
12382
12383 out2:
12384 /* Align start of ZONE_MOVABLE on all nids to MAX_ORDER_NR_PAGES */
12385 - for (nid = 0; nid < MAX_NUMNODES; nid++)
12386 + for (nid = 0; nid < MAX_NUMNODES; nid++) {
12387 + unsigned long start_pfn, end_pfn;
12388 +
12389 zone_movable_pfn[nid] =
12390 roundup(zone_movable_pfn[nid], MAX_ORDER_NR_PAGES);
12391
12392 + get_pfn_range_for_nid(nid, &start_pfn, &end_pfn);
12393 + if (zone_movable_pfn[nid] >= end_pfn)
12394 + zone_movable_pfn[nid] = 0;
12395 + }
12396 +
12397 out:
12398 /* restore the node_state */
12399 node_states[N_MEMORY] = saved_node_state;
12400 diff --git a/mm/rmap.c b/mm/rmap.c
12401 index 45f2106852e84..6d80e92688fe7 100644
12402 --- a/mm/rmap.c
12403 +++ b/mm/rmap.c
12404 @@ -1602,7 +1602,30 @@ static bool try_to_unmap_one(struct page *page, struct vm_area_struct *vma,
12405
12406 /* MADV_FREE page check */
12407 if (!PageSwapBacked(page)) {
12408 - if (!PageDirty(page)) {
12409 + int ref_count, map_count;
12410 +
12411 + /*
12412 + * Synchronize with gup_pte_range():
12413 + * - clear PTE; barrier; read refcount
12414 + * - inc refcount; barrier; read PTE
12415 + */
12416 + smp_mb();
12417 +
12418 + ref_count = page_ref_count(page);
12419 + map_count = page_mapcount(page);
12420 +
12421 + /*
12422 + * Order reads for page refcount and dirty flag
12423 + * (see comments in __remove_mapping()).
12424 + */
12425 + smp_rmb();
12426 +
12427 + /*
12428 + * The only page refs must be one from isolation
12429 + * plus the rmap(s) (dropped by discard:).
12430 + */
12431 + if (ref_count == 1 + map_count &&
12432 + !PageDirty(page)) {
12433 /* Invalidate as we cleared the pte */
12434 mmu_notifier_invalidate_range(mm,
12435 address, address + PAGE_SIZE);
12436 diff --git a/mm/usercopy.c b/mm/usercopy.c
12437 index 660717a1ea5cd..f70455bad7f32 100644
12438 --- a/mm/usercopy.c
12439 +++ b/mm/usercopy.c
12440 @@ -294,7 +294,10 @@ static bool enable_checks __initdata = true;
12441
12442 static int __init parse_hardened_usercopy(char *str)
12443 {
12444 - return strtobool(str, &enable_checks);
12445 + if (strtobool(str, &enable_checks))
12446 + pr_warn("Invalid option string for hardened_usercopy: '%s'\n",
12447 + str);
12448 + return 1;
12449 }
12450
12451 __setup("hardened_usercopy=", parse_hardened_usercopy);
12452 diff --git a/net/batman-adv/multicast.c b/net/batman-adv/multicast.c
12453 index 09d81f9c2a649..6f0a9f4392333 100644
12454 --- a/net/batman-adv/multicast.c
12455 +++ b/net/batman-adv/multicast.c
12456 @@ -136,7 +136,7 @@ static u8 batadv_mcast_mla_rtr_flags_softif_get_ipv6(struct net_device *dev)
12457 {
12458 struct inet6_dev *in6_dev = __in6_dev_get(dev);
12459
12460 - if (in6_dev && in6_dev->cnf.mc_forwarding)
12461 + if (in6_dev && atomic_read(&in6_dev->cnf.mc_forwarding))
12462 return BATADV_NO_FLAGS;
12463 else
12464 return BATADV_MCAST_WANT_NO_RTR6;
12465 diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
12466 index 082a262ab49c3..ff6625493c9f8 100644
12467 --- a/net/bluetooth/hci_event.c
12468 +++ b/net/bluetooth/hci_event.c
12469 @@ -4911,8 +4911,9 @@ static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
12470 hci_dev_lock(hdev);
12471
12472 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
12473 - if (hcon) {
12474 + if (hcon && hcon->type == AMP_LINK) {
12475 hcon->state = BT_CLOSED;
12476 + hci_disconn_cfm(hcon, ev->reason);
12477 hci_conn_del(hcon);
12478 }
12479
12480 diff --git a/net/core/filter.c b/net/core/filter.c
12481 index d39518f691b4b..e16b2b5cda981 100644
12482 --- a/net/core/filter.c
12483 +++ b/net/core/filter.c
12484 @@ -5824,24 +5824,33 @@ BPF_CALL_5(bpf_tcp_check_syncookie, struct sock *, sk, void *, iph, u32, iph_len
12485 if (!th->ack || th->rst || th->syn)
12486 return -ENOENT;
12487
12488 + if (unlikely(iph_len < sizeof(struct iphdr)))
12489 + return -EINVAL;
12490 +
12491 if (tcp_synq_no_recent_overflow(sk))
12492 return -ENOENT;
12493
12494 cookie = ntohl(th->ack_seq) - 1;
12495
12496 - switch (sk->sk_family) {
12497 - case AF_INET:
12498 - if (unlikely(iph_len < sizeof(struct iphdr)))
12499 + /* Both struct iphdr and struct ipv6hdr have the version field at the
12500 + * same offset so we can cast to the shorter header (struct iphdr).
12501 + */
12502 + switch (((struct iphdr *)iph)->version) {
12503 + case 4:
12504 + if (sk->sk_family == AF_INET6 && ipv6_only_sock(sk))
12505 return -EINVAL;
12506
12507 ret = __cookie_v4_check((struct iphdr *)iph, th, cookie);
12508 break;
12509
12510 #if IS_BUILTIN(CONFIG_IPV6)
12511 - case AF_INET6:
12512 + case 6:
12513 if (unlikely(iph_len < sizeof(struct ipv6hdr)))
12514 return -EINVAL;
12515
12516 + if (sk->sk_family != AF_INET6)
12517 + return -EINVAL;
12518 +
12519 ret = __cookie_v6_check((struct ipv6hdr *)iph, th, cookie);
12520 break;
12521 #endif /* CONFIG_IPV6 */
12522 @@ -6708,6 +6717,7 @@ bool bpf_sock_is_valid_access(int off, int size, enum bpf_access_type type,
12523 struct bpf_insn_access_aux *info)
12524 {
12525 const int size_default = sizeof(__u32);
12526 + int field_size;
12527
12528 if (off < 0 || off >= sizeof(struct bpf_sock))
12529 return false;
12530 @@ -6719,7 +6729,6 @@ bool bpf_sock_is_valid_access(int off, int size, enum bpf_access_type type,
12531 case offsetof(struct bpf_sock, family):
12532 case offsetof(struct bpf_sock, type):
12533 case offsetof(struct bpf_sock, protocol):
12534 - case offsetof(struct bpf_sock, dst_port):
12535 case offsetof(struct bpf_sock, src_port):
12536 case bpf_ctx_range(struct bpf_sock, src_ip4):
12537 case bpf_ctx_range_till(struct bpf_sock, src_ip6[0], src_ip6[3]):
12538 @@ -6727,6 +6736,14 @@ bool bpf_sock_is_valid_access(int off, int size, enum bpf_access_type type,
12539 case bpf_ctx_range_till(struct bpf_sock, dst_ip6[0], dst_ip6[3]):
12540 bpf_ctx_record_field_size(info, size_default);
12541 return bpf_ctx_narrow_access_ok(off, size, size_default);
12542 + case bpf_ctx_range(struct bpf_sock, dst_port):
12543 + field_size = size == size_default ?
12544 + size_default : sizeof_field(struct bpf_sock, dst_port);
12545 + bpf_ctx_record_field_size(info, field_size);
12546 + return bpf_ctx_narrow_access_ok(off, size, field_size);
12547 + case offsetofend(struct bpf_sock, dst_port) ...
12548 + offsetof(struct bpf_sock, dst_ip4) - 1:
12549 + return false;
12550 }
12551
12552 return size == size_default;
12553 diff --git a/net/core/skmsg.c b/net/core/skmsg.c
12554 index 17cc1edd149cb..a606ad8e8be25 100644
12555 --- a/net/core/skmsg.c
12556 +++ b/net/core/skmsg.c
12557 @@ -27,6 +27,7 @@ int sk_msg_alloc(struct sock *sk, struct sk_msg *msg, int len,
12558 int elem_first_coalesce)
12559 {
12560 struct page_frag *pfrag = sk_page_frag(sk);
12561 + u32 osize = msg->sg.size;
12562 int ret = 0;
12563
12564 len -= msg->sg.size;
12565 @@ -35,13 +36,17 @@ int sk_msg_alloc(struct sock *sk, struct sk_msg *msg, int len,
12566 u32 orig_offset;
12567 int use, i;
12568
12569 - if (!sk_page_frag_refill(sk, pfrag))
12570 - return -ENOMEM;
12571 + if (!sk_page_frag_refill(sk, pfrag)) {
12572 + ret = -ENOMEM;
12573 + goto msg_trim;
12574 + }
12575
12576 orig_offset = pfrag->offset;
12577 use = min_t(int, len, pfrag->size - orig_offset);
12578 - if (!sk_wmem_schedule(sk, use))
12579 - return -ENOMEM;
12580 + if (!sk_wmem_schedule(sk, use)) {
12581 + ret = -ENOMEM;
12582 + goto msg_trim;
12583 + }
12584
12585 i = msg->sg.end;
12586 sk_msg_iter_var_prev(i);
12587 @@ -71,6 +76,10 @@ int sk_msg_alloc(struct sock *sk, struct sk_msg *msg, int len,
12588 }
12589
12590 return ret;
12591 +
12592 +msg_trim:
12593 + sk_msg_trim(sk, msg, osize);
12594 + return ret;
12595 }
12596 EXPORT_SYMBOL_GPL(sk_msg_alloc);
12597
12598 diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
12599 index 7b951992c372b..b8fe943ae89d0 100644
12600 --- a/net/ipv4/arp.c
12601 +++ b/net/ipv4/arp.c
12602 @@ -1116,13 +1116,18 @@ static int arp_req_get(struct arpreq *r, struct net_device *dev)
12603 return err;
12604 }
12605
12606 -static int arp_invalidate(struct net_device *dev, __be32 ip)
12607 +int arp_invalidate(struct net_device *dev, __be32 ip, bool force)
12608 {
12609 struct neighbour *neigh = neigh_lookup(&arp_tbl, &ip, dev);
12610 int err = -ENXIO;
12611 struct neigh_table *tbl = &arp_tbl;
12612
12613 if (neigh) {
12614 + if ((neigh->nud_state & NUD_VALID) && !force) {
12615 + neigh_release(neigh);
12616 + return 0;
12617 + }
12618 +
12619 if (neigh->nud_state & ~NUD_NOARP)
12620 err = neigh_update(neigh, NULL, NUD_FAILED,
12621 NEIGH_UPDATE_F_OVERRIDE|
12622 @@ -1169,7 +1174,7 @@ static int arp_req_delete(struct net *net, struct arpreq *r,
12623 if (!dev)
12624 return -EINVAL;
12625 }
12626 - return arp_invalidate(dev, ip);
12627 + return arp_invalidate(dev, ip, true);
12628 }
12629
12630 /*
12631 diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
12632 index a95102fe66371..ef3e7a3e3a29e 100644
12633 --- a/net/ipv4/fib_frontend.c
12634 +++ b/net/ipv4/fib_frontend.c
12635 @@ -1122,9 +1122,11 @@ void fib_add_ifaddr(struct in_ifaddr *ifa)
12636 return;
12637
12638 /* Add broadcast address, if it is explicitly assigned. */
12639 - if (ifa->ifa_broadcast && ifa->ifa_broadcast != htonl(0xFFFFFFFF))
12640 + if (ifa->ifa_broadcast && ifa->ifa_broadcast != htonl(0xFFFFFFFF)) {
12641 fib_magic(RTM_NEWROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32,
12642 prim, 0);
12643 + arp_invalidate(dev, ifa->ifa_broadcast, false);
12644 + }
12645
12646 if (!ipv4_is_zeronet(prefix) && !(ifa->ifa_flags & IFA_F_SECONDARY) &&
12647 (prefix != addr || ifa->ifa_prefixlen < 32)) {
12648 @@ -1140,6 +1142,7 @@ void fib_add_ifaddr(struct in_ifaddr *ifa)
12649 prim, 0);
12650 fib_magic(RTM_NEWROUTE, RTN_BROADCAST, prefix | ~mask,
12651 32, prim, 0);
12652 + arp_invalidate(dev, prefix | ~mask, false);
12653 }
12654 }
12655 }
12656 diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
12657 index 692ba6d6180f8..f99ad4a98907d 100644
12658 --- a/net/ipv4/fib_semantics.c
12659 +++ b/net/ipv4/fib_semantics.c
12660 @@ -876,8 +876,13 @@ int fib_nh_match(struct fib_config *cfg, struct fib_info *fi,
12661 }
12662
12663 if (cfg->fc_oif || cfg->fc_gw_family) {
12664 - struct fib_nh *nh = fib_info_nh(fi, 0);
12665 + struct fib_nh *nh;
12666 +
12667 + /* cannot match on nexthop object attributes */
12668 + if (fi->nh)
12669 + return 1;
12670
12671 + nh = fib_info_nh(fi, 0);
12672 if (cfg->fc_encap) {
12673 if (fib_encap_match(cfg->fc_encap_type, cfg->fc_encap,
12674 nh, cfg, extack))
12675 diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c
12676 index 7df7ec74807ac..bcc13368c8363 100644
12677 --- a/net/ipv4/tcp_bpf.c
12678 +++ b/net/ipv4/tcp_bpf.c
12679 @@ -296,10 +296,9 @@ int tcp_bpf_sendmsg_redir(struct sock *sk, struct sk_msg *msg,
12680 struct sk_psock *psock = sk_psock_get(sk);
12681 int ret;
12682
12683 - if (unlikely(!psock)) {
12684 - sk_msg_free(sk, msg);
12685 - return 0;
12686 - }
12687 + if (unlikely(!psock))
12688 + return -EPIPE;
12689 +
12690 ret = ingress ? bpf_tcp_ingress(sk, psock, msg, bytes, flags) :
12691 tcp_bpf_push_locked(sk, msg, bytes, flags, false);
12692 sk_psock_put(sk, psock);
12693 @@ -367,7 +366,7 @@ more_data:
12694 cork = true;
12695 psock->cork = NULL;
12696 }
12697 - sk_msg_return(sk, msg, tosend);
12698 + sk_msg_return(sk, msg, msg->sg.size);
12699 release_sock(sk);
12700
12701 ret = tcp_bpf_sendmsg_redir(sk_redir, msg, tosend, flags);
12702 @@ -407,8 +406,11 @@ more_data:
12703 }
12704 if (msg &&
12705 msg->sg.data[msg->sg.start].page_link &&
12706 - msg->sg.data[msg->sg.start].length)
12707 + msg->sg.data[msg->sg.start].length) {
12708 + if (eval == __SK_REDIRECT)
12709 + sk_mem_charge(sk, msg->sg.size);
12710 goto more_data;
12711 + }
12712 }
12713 return ret;
12714 }
12715 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
12716 index 638d7b49ad716..139e962d1aef3 100644
12717 --- a/net/ipv4/tcp_output.c
12718 +++ b/net/ipv4/tcp_output.c
12719 @@ -3492,6 +3492,7 @@ static void tcp_connect_queue_skb(struct sock *sk, struct sk_buff *skb)
12720 */
12721 static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
12722 {
12723 + struct inet_connection_sock *icsk = inet_csk(sk);
12724 struct tcp_sock *tp = tcp_sk(sk);
12725 struct tcp_fastopen_request *fo = tp->fastopen_req;
12726 int space, err = 0;
12727 @@ -3506,8 +3507,10 @@ static int tcp_send_syn_data(struct sock *sk, struct sk_buff *syn)
12728 * private TCP options. The cost is reduced data space in SYN :(
12729 */
12730 tp->rx_opt.mss_clamp = tcp_mss_clamp(tp, tp->rx_opt.mss_clamp);
12731 + /* Sync mss_cache after updating the mss_clamp */
12732 + tcp_sync_mss(sk, icsk->icsk_pmtu_cookie);
12733
12734 - space = __tcp_mtu_to_mss(sk, inet_csk(sk)->icsk_pmtu_cookie) -
12735 + space = __tcp_mtu_to_mss(sk, icsk->icsk_pmtu_cookie) -
12736 MAX_TCP_OPTION_SPACE;
12737
12738 space = min_t(size_t, space, fo->size);
12739 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
12740 index 3cdf011a8dd8d..83fd4fa40d5e6 100644
12741 --- a/net/ipv4/udp.c
12742 +++ b/net/ipv4/udp.c
12743 @@ -544,6 +544,12 @@ void udp_encap_enable(void)
12744 }
12745 EXPORT_SYMBOL(udp_encap_enable);
12746
12747 +void udp_encap_disable(void)
12748 +{
12749 + static_branch_dec(&udp_encap_needed_key);
12750 +}
12751 +EXPORT_SYMBOL(udp_encap_disable);
12752 +
12753 /* Handler for tunnels with arbitrary destination ports: no socket lookup, go
12754 * through error handlers in encapsulations looking for a match.
12755 */
12756 diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
12757 index 60d070b254846..69aef71f32ea7 100644
12758 --- a/net/ipv6/addrconf.c
12759 +++ b/net/ipv6/addrconf.c
12760 @@ -542,7 +542,7 @@ static int inet6_netconf_fill_devconf(struct sk_buff *skb, int ifindex,
12761 #ifdef CONFIG_IPV6_MROUTE
12762 if ((all || type == NETCONFA_MC_FORWARDING) &&
12763 nla_put_s32(skb, NETCONFA_MC_FORWARDING,
12764 - devconf->mc_forwarding) < 0)
12765 + atomic_read(&devconf->mc_forwarding)) < 0)
12766 goto nla_put_failure;
12767 #endif
12768 if ((all || type == NETCONFA_PROXY_NEIGH) &&
12769 @@ -5460,7 +5460,7 @@ static inline void ipv6_store_devconf(struct ipv6_devconf *cnf,
12770 array[DEVCONF_USE_OPTIMISTIC] = cnf->use_optimistic;
12771 #endif
12772 #ifdef CONFIG_IPV6_MROUTE
12773 - array[DEVCONF_MC_FORWARDING] = cnf->mc_forwarding;
12774 + array[DEVCONF_MC_FORWARDING] = atomic_read(&cnf->mc_forwarding);
12775 #endif
12776 array[DEVCONF_DISABLE_IPV6] = cnf->disable_ipv6;
12777 array[DEVCONF_ACCEPT_DAD] = cnf->accept_dad;
12778 diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c
12779 index 7e5df23cbe7bf..e6c4966aa956c 100644
12780 --- a/net/ipv6/ip6_input.c
12781 +++ b/net/ipv6/ip6_input.c
12782 @@ -485,7 +485,7 @@ int ip6_mc_input(struct sk_buff *skb)
12783 /*
12784 * IPv6 multicast router mode is now supported ;)
12785 */
12786 - if (dev_net(skb->dev)->ipv6.devconf_all->mc_forwarding &&
12787 + if (atomic_read(&dev_net(skb->dev)->ipv6.devconf_all->mc_forwarding) &&
12788 !(ipv6_addr_type(&hdr->daddr) &
12789 (IPV6_ADDR_LOOPBACK|IPV6_ADDR_LINKLOCAL)) &&
12790 likely(!(IP6CB(skb)->flags & IP6SKB_FORWARDED))) {
12791 diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
12792 index aee1f6bc039ab..6248e00c2bf72 100644
12793 --- a/net/ipv6/ip6mr.c
12794 +++ b/net/ipv6/ip6mr.c
12795 @@ -736,7 +736,7 @@ static int mif6_delete(struct mr_table *mrt, int vifi, int notify,
12796
12797 in6_dev = __in6_dev_get(dev);
12798 if (in6_dev) {
12799 - in6_dev->cnf.mc_forwarding--;
12800 + atomic_dec(&in6_dev->cnf.mc_forwarding);
12801 inet6_netconf_notify_devconf(dev_net(dev), RTM_NEWNETCONF,
12802 NETCONFA_MC_FORWARDING,
12803 dev->ifindex, &in6_dev->cnf);
12804 @@ -904,7 +904,7 @@ static int mif6_add(struct net *net, struct mr_table *mrt,
12805
12806 in6_dev = __in6_dev_get(dev);
12807 if (in6_dev) {
12808 - in6_dev->cnf.mc_forwarding++;
12809 + atomic_inc(&in6_dev->cnf.mc_forwarding);
12810 inet6_netconf_notify_devconf(dev_net(dev), RTM_NEWNETCONF,
12811 NETCONFA_MC_FORWARDING,
12812 dev->ifindex, &in6_dev->cnf);
12813 @@ -1553,7 +1553,7 @@ static int ip6mr_sk_init(struct mr_table *mrt, struct sock *sk)
12814 } else {
12815 rcu_assign_pointer(mrt->mroute_sk, sk);
12816 sock_set_flag(sk, SOCK_RCU_FREE);
12817 - net->ipv6.devconf_all->mc_forwarding++;
12818 + atomic_inc(&net->ipv6.devconf_all->mc_forwarding);
12819 }
12820 write_unlock_bh(&mrt_lock);
12821
12822 @@ -1586,7 +1586,7 @@ int ip6mr_sk_done(struct sock *sk)
12823 * so the RCU grace period before sk freeing
12824 * is guaranteed by sk_destruct()
12825 */
12826 - net->ipv6.devconf_all->mc_forwarding--;
12827 + atomic_dec(&net->ipv6.devconf_all->mc_forwarding);
12828 write_unlock_bh(&mrt_lock);
12829 inet6_netconf_notify_devconf(net, RTM_NEWNETCONF,
12830 NETCONFA_MC_FORWARDING,
12831 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
12832 index 2a13394ab8541..619d9dffa9e44 100644
12833 --- a/net/ipv6/route.c
12834 +++ b/net/ipv6/route.c
12835 @@ -4403,7 +4403,7 @@ static int ip6_pkt_drop(struct sk_buff *skb, u8 code, int ipstats_mib_noroutes)
12836 struct inet6_dev *idev;
12837 int type;
12838
12839 - if (netif_is_l3_master(skb->dev) &&
12840 + if (netif_is_l3_master(skb->dev) ||
12841 dst->dev == net->loopback_dev)
12842 idev = __in6_dev_get_safely(dev_get_by_index_rcu(net, IP6CB(skb)->iif));
12843 else
12844 diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
12845 index a71bfa5b02770..040869f45682d 100644
12846 --- a/net/ipv6/udp.c
12847 +++ b/net/ipv6/udp.c
12848 @@ -1553,8 +1553,10 @@ void udpv6_destroy_sock(struct sock *sk)
12849 if (encap_destroy)
12850 encap_destroy(sk);
12851 }
12852 - if (up->encap_enabled)
12853 + if (up->encap_enabled) {
12854 static_branch_dec(&udpv6_encap_needed_key);
12855 + udp_encap_disable();
12856 + }
12857 }
12858
12859 inet6_destroy_sock(sk);
12860 diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c
12861 index 6b0ed6c593e2b..a6f13fab963f7 100644
12862 --- a/net/ipv6/xfrm6_output.c
12863 +++ b/net/ipv6/xfrm6_output.c
12864 @@ -140,6 +140,19 @@ static int __xfrm6_output_finish(struct net *net, struct sock *sk, struct sk_buf
12865 return __xfrm6_output_state_finish(x, sk, skb);
12866 }
12867
12868 +static int xfrm6_noneed_fragment(struct sk_buff *skb)
12869 +{
12870 + struct frag_hdr *fh;
12871 + u8 prevhdr = ipv6_hdr(skb)->nexthdr;
12872 +
12873 + if (prevhdr != NEXTHDR_FRAGMENT)
12874 + return 0;
12875 + fh = (struct frag_hdr *)(skb->data + sizeof(struct ipv6hdr));
12876 + if (fh->nexthdr == NEXTHDR_ESP || fh->nexthdr == NEXTHDR_AUTH)
12877 + return 1;
12878 + return 0;
12879 +}
12880 +
12881 static int __xfrm6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
12882 {
12883 struct dst_entry *dst = skb_dst(skb);
12884 @@ -168,6 +181,9 @@ static int __xfrm6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
12885 xfrm6_local_rxpmtu(skb, mtu);
12886 kfree_skb(skb);
12887 return -EMSGSIZE;
12888 + } else if (toobig && xfrm6_noneed_fragment(skb)) {
12889 + skb->ignore_df = 1;
12890 + goto skip_frag;
12891 } else if (!skb->ignore_df && toobig && skb->sk) {
12892 xfrm_local_error(skb, mtu);
12893 kfree_skb(skb);
12894 diff --git a/net/key/af_key.c b/net/key/af_key.c
12895 index 406e13478b01b..2ac9560020f91 100644
12896 --- a/net/key/af_key.c
12897 +++ b/net/key/af_key.c
12898 @@ -1703,7 +1703,7 @@ static int pfkey_register(struct sock *sk, struct sk_buff *skb, const struct sad
12899
12900 xfrm_probe_algs();
12901
12902 - supp_skb = compose_sadb_supported(hdr, GFP_KERNEL);
12903 + supp_skb = compose_sadb_supported(hdr, GFP_KERNEL | __GFP_ZERO);
12904 if (!supp_skb) {
12905 if (hdr->sadb_msg_satype != SADB_SATYPE_UNSPEC)
12906 pfk->registered &= ~(1<<hdr->sadb_msg_satype);
12907 diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
12908 index 848b137151c26..b8cc3339a2495 100644
12909 --- a/net/netfilter/nf_conntrack_proto_tcp.c
12910 +++ b/net/netfilter/nf_conntrack_proto_tcp.c
12911 @@ -354,8 +354,8 @@ static void tcp_options(const struct sk_buff *skb,
12912 length, buff);
12913 BUG_ON(ptr == NULL);
12914
12915 - state->td_scale =
12916 - state->flags = 0;
12917 + state->td_scale = 0;
12918 + state->flags &= IP_CT_TCP_FLAG_BE_LIBERAL;
12919
12920 while (length > 0) {
12921 int opcode=*ptr++;
12922 @@ -840,6 +840,16 @@ static bool nf_conntrack_tcp_established(const struct nf_conn *ct)
12923 test_bit(IPS_ASSURED_BIT, &ct->status);
12924 }
12925
12926 +static void nf_ct_tcp_state_reset(struct ip_ct_tcp_state *state)
12927 +{
12928 + state->td_end = 0;
12929 + state->td_maxend = 0;
12930 + state->td_maxwin = 0;
12931 + state->td_maxack = 0;
12932 + state->td_scale = 0;
12933 + state->flags &= IP_CT_TCP_FLAG_BE_LIBERAL;
12934 +}
12935 +
12936 /* Returns verdict for packet, or -1 for invalid. */
12937 int nf_conntrack_tcp_packet(struct nf_conn *ct,
12938 struct sk_buff *skb,
12939 @@ -946,8 +956,7 @@ int nf_conntrack_tcp_packet(struct nf_conn *ct,
12940 ct->proto.tcp.last_flags &= ~IP_CT_EXP_CHALLENGE_ACK;
12941 ct->proto.tcp.seen[ct->proto.tcp.last_dir].flags =
12942 ct->proto.tcp.last_flags;
12943 - memset(&ct->proto.tcp.seen[dir], 0,
12944 - sizeof(struct ip_ct_tcp_state));
12945 + nf_ct_tcp_state_reset(&ct->proto.tcp.seen[dir]);
12946 break;
12947 }
12948 ct->proto.tcp.last_index = index;
12949 diff --git a/net/netlabel/netlabel_kapi.c b/net/netlabel/netlabel_kapi.c
12950 index 5e1239cef0005..91b35b7c80d82 100644
12951 --- a/net/netlabel/netlabel_kapi.c
12952 +++ b/net/netlabel/netlabel_kapi.c
12953 @@ -885,6 +885,8 @@ int netlbl_bitmap_walk(const unsigned char *bitmap, u32 bitmap_len,
12954 unsigned char bitmask;
12955 unsigned char byte;
12956
12957 + if (offset >= bitmap_len)
12958 + return -1;
12959 byte_offset = offset / 8;
12960 byte = bitmap[byte_offset];
12961 bit_spot = offset;
12962 diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
12963 index 891e029ad0f89..fb28969899af0 100644
12964 --- a/net/netlink/af_netlink.c
12965 +++ b/net/netlink/af_netlink.c
12966 @@ -148,6 +148,8 @@ static const struct rhashtable_params netlink_rhashtable_params;
12967
12968 static inline u32 netlink_group_mask(u32 group)
12969 {
12970 + if (group > 32)
12971 + return 0;
12972 return group ? 1 << (group - 1) : 0;
12973 }
12974
12975 diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
12976 index 2c0f8cbc5c43b..ae40593daf214 100644
12977 --- a/net/openvswitch/actions.c
12978 +++ b/net/openvswitch/actions.c
12979 @@ -1037,7 +1037,7 @@ static int clone(struct datapath *dp, struct sk_buff *skb,
12980 int rem = nla_len(attr);
12981 bool dont_clone_flow_key;
12982
12983 - /* The first action is always 'OVS_CLONE_ATTR_ARG'. */
12984 + /* The first action is always 'OVS_CLONE_ATTR_EXEC'. */
12985 clone_arg = nla_data(attr);
12986 dont_clone_flow_key = nla_get_u32(clone_arg);
12987 actions = nla_next(clone_arg, &rem);
12988 diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
12989 index b6f98eba71f1b..816036b9c223a 100644
12990 --- a/net/openvswitch/conntrack.c
12991 +++ b/net/openvswitch/conntrack.c
12992 @@ -730,6 +730,57 @@ static bool skb_nfct_cached(struct net *net,
12993 }
12994
12995 #if IS_ENABLED(CONFIG_NF_NAT)
12996 +static void ovs_nat_update_key(struct sw_flow_key *key,
12997 + const struct sk_buff *skb,
12998 + enum nf_nat_manip_type maniptype)
12999 +{
13000 + if (maniptype == NF_NAT_MANIP_SRC) {
13001 + __be16 src;
13002 +
13003 + key->ct_state |= OVS_CS_F_SRC_NAT;
13004 + if (key->eth.type == htons(ETH_P_IP))
13005 + key->ipv4.addr.src = ip_hdr(skb)->saddr;
13006 + else if (key->eth.type == htons(ETH_P_IPV6))
13007 + memcpy(&key->ipv6.addr.src, &ipv6_hdr(skb)->saddr,
13008 + sizeof(key->ipv6.addr.src));
13009 + else
13010 + return;
13011 +
13012 + if (key->ip.proto == IPPROTO_UDP)
13013 + src = udp_hdr(skb)->source;
13014 + else if (key->ip.proto == IPPROTO_TCP)
13015 + src = tcp_hdr(skb)->source;
13016 + else if (key->ip.proto == IPPROTO_SCTP)
13017 + src = sctp_hdr(skb)->source;
13018 + else
13019 + return;
13020 +
13021 + key->tp.src = src;
13022 + } else {
13023 + __be16 dst;
13024 +
13025 + key->ct_state |= OVS_CS_F_DST_NAT;
13026 + if (key->eth.type == htons(ETH_P_IP))
13027 + key->ipv4.addr.dst = ip_hdr(skb)->daddr;
13028 + else if (key->eth.type == htons(ETH_P_IPV6))
13029 + memcpy(&key->ipv6.addr.dst, &ipv6_hdr(skb)->daddr,
13030 + sizeof(key->ipv6.addr.dst));
13031 + else
13032 + return;
13033 +
13034 + if (key->ip.proto == IPPROTO_UDP)
13035 + dst = udp_hdr(skb)->dest;
13036 + else if (key->ip.proto == IPPROTO_TCP)
13037 + dst = tcp_hdr(skb)->dest;
13038 + else if (key->ip.proto == IPPROTO_SCTP)
13039 + dst = sctp_hdr(skb)->dest;
13040 + else
13041 + return;
13042 +
13043 + key->tp.dst = dst;
13044 + }
13045 +}
13046 +
13047 /* Modelled after nf_nat_ipv[46]_fn().
13048 * range is only used for new, uninitialized NAT state.
13049 * Returns either NF_ACCEPT or NF_DROP.
13050 @@ -737,7 +788,7 @@ static bool skb_nfct_cached(struct net *net,
13051 static int ovs_ct_nat_execute(struct sk_buff *skb, struct nf_conn *ct,
13052 enum ip_conntrack_info ctinfo,
13053 const struct nf_nat_range2 *range,
13054 - enum nf_nat_manip_type maniptype)
13055 + enum nf_nat_manip_type maniptype, struct sw_flow_key *key)
13056 {
13057 int hooknum, nh_off, err = NF_ACCEPT;
13058
13059 @@ -810,58 +861,11 @@ push:
13060 skb_push(skb, nh_off);
13061 skb_postpush_rcsum(skb, skb->data, nh_off);
13062
13063 - return err;
13064 -}
13065 -
13066 -static void ovs_nat_update_key(struct sw_flow_key *key,
13067 - const struct sk_buff *skb,
13068 - enum nf_nat_manip_type maniptype)
13069 -{
13070 - if (maniptype == NF_NAT_MANIP_SRC) {
13071 - __be16 src;
13072 -
13073 - key->ct_state |= OVS_CS_F_SRC_NAT;
13074 - if (key->eth.type == htons(ETH_P_IP))
13075 - key->ipv4.addr.src = ip_hdr(skb)->saddr;
13076 - else if (key->eth.type == htons(ETH_P_IPV6))
13077 - memcpy(&key->ipv6.addr.src, &ipv6_hdr(skb)->saddr,
13078 - sizeof(key->ipv6.addr.src));
13079 - else
13080 - return;
13081 -
13082 - if (key->ip.proto == IPPROTO_UDP)
13083 - src = udp_hdr(skb)->source;
13084 - else if (key->ip.proto == IPPROTO_TCP)
13085 - src = tcp_hdr(skb)->source;
13086 - else if (key->ip.proto == IPPROTO_SCTP)
13087 - src = sctp_hdr(skb)->source;
13088 - else
13089 - return;
13090 -
13091 - key->tp.src = src;
13092 - } else {
13093 - __be16 dst;
13094 -
13095 - key->ct_state |= OVS_CS_F_DST_NAT;
13096 - if (key->eth.type == htons(ETH_P_IP))
13097 - key->ipv4.addr.dst = ip_hdr(skb)->daddr;
13098 - else if (key->eth.type == htons(ETH_P_IPV6))
13099 - memcpy(&key->ipv6.addr.dst, &ipv6_hdr(skb)->daddr,
13100 - sizeof(key->ipv6.addr.dst));
13101 - else
13102 - return;
13103 -
13104 - if (key->ip.proto == IPPROTO_UDP)
13105 - dst = udp_hdr(skb)->dest;
13106 - else if (key->ip.proto == IPPROTO_TCP)
13107 - dst = tcp_hdr(skb)->dest;
13108 - else if (key->ip.proto == IPPROTO_SCTP)
13109 - dst = sctp_hdr(skb)->dest;
13110 - else
13111 - return;
13112 + /* Update the flow key if NAT successful. */
13113 + if (err == NF_ACCEPT)
13114 + ovs_nat_update_key(key, skb, maniptype);
13115
13116 - key->tp.dst = dst;
13117 - }
13118 + return err;
13119 }
13120
13121 /* Returns NF_DROP if the packet should be dropped, NF_ACCEPT otherwise. */
13122 @@ -903,7 +907,7 @@ static int ovs_ct_nat(struct net *net, struct sw_flow_key *key,
13123 } else {
13124 return NF_ACCEPT; /* Connection is not NATed. */
13125 }
13126 - err = ovs_ct_nat_execute(skb, ct, ctinfo, &info->range, maniptype);
13127 + err = ovs_ct_nat_execute(skb, ct, ctinfo, &info->range, maniptype, key);
13128
13129 if (err == NF_ACCEPT && ct->status & IPS_DST_NAT) {
13130 if (ct->status & IPS_SRC_NAT) {
13131 @@ -913,17 +917,13 @@ static int ovs_ct_nat(struct net *net, struct sw_flow_key *key,
13132 maniptype = NF_NAT_MANIP_SRC;
13133
13134 err = ovs_ct_nat_execute(skb, ct, ctinfo, &info->range,
13135 - maniptype);
13136 + maniptype, key);
13137 } else if (CTINFO2DIR(ctinfo) == IP_CT_DIR_ORIGINAL) {
13138 err = ovs_ct_nat_execute(skb, ct, ctinfo, NULL,
13139 - NF_NAT_MANIP_SRC);
13140 + NF_NAT_MANIP_SRC, key);
13141 }
13142 }
13143
13144 - /* Mark NAT done if successful and update the flow key. */
13145 - if (err == NF_ACCEPT)
13146 - ovs_nat_update_key(key, skb, maniptype);
13147 -
13148 return err;
13149 }
13150 #else /* !CONFIG_NF_NAT */
13151 diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c
13152 index d7559c64795dc..d3f068ad154cb 100644
13153 --- a/net/openvswitch/flow_netlink.c
13154 +++ b/net/openvswitch/flow_netlink.c
13155 @@ -2179,8 +2179,8 @@ static int __ovs_nla_put_key(const struct sw_flow_key *swkey,
13156 icmpv6_key->icmpv6_type = ntohs(output->tp.src);
13157 icmpv6_key->icmpv6_code = ntohs(output->tp.dst);
13158
13159 - if (icmpv6_key->icmpv6_type == NDISC_NEIGHBOUR_SOLICITATION ||
13160 - icmpv6_key->icmpv6_type == NDISC_NEIGHBOUR_ADVERTISEMENT) {
13161 + if (swkey->tp.src == htons(NDISC_NEIGHBOUR_SOLICITATION) ||
13162 + swkey->tp.src == htons(NDISC_NEIGHBOUR_ADVERTISEMENT)) {
13163 struct ovs_key_nd *nd_key;
13164
13165 nla = nla_reserve(skb, OVS_KEY_ATTR_ND, sizeof(*nd_key));
13166 @@ -3284,7 +3284,9 @@ static int clone_action_to_attr(const struct nlattr *attr,
13167 if (!start)
13168 return -EMSGSIZE;
13169
13170 - err = ovs_nla_put_actions(nla_data(attr), rem, skb);
13171 + /* Skipping the OVS_CLONE_ATTR_EXEC that is always the first attribute. */
13172 + attr = nla_next(nla_data(attr), &rem);
13173 + err = ovs_nla_put_actions(attr, rem, skb);
13174
13175 if (err)
13176 nla_nest_cancel(skb, start);
13177 diff --git a/net/rxrpc/net_ns.c b/net/rxrpc/net_ns.c
13178 index b312aab80fed6..9a76b74af37bc 100644
13179 --- a/net/rxrpc/net_ns.c
13180 +++ b/net/rxrpc/net_ns.c
13181 @@ -116,8 +116,8 @@ static __net_exit void rxrpc_exit_net(struct net *net)
13182 struct rxrpc_net *rxnet = rxrpc_net(net);
13183
13184 rxnet->live = false;
13185 - del_timer_sync(&rxnet->peer_keepalive_timer);
13186 cancel_work_sync(&rxnet->peer_keepalive_work);
13187 + del_timer_sync(&rxnet->peer_keepalive_timer);
13188 rxrpc_destroy_all_calls(rxnet);
13189 rxrpc_destroy_all_connections(rxnet);
13190 rxrpc_destroy_all_peers(rxnet);
13191 diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c
13192 index 12672019f76c5..66cdfd5725acf 100644
13193 --- a/net/smc/smc_core.c
13194 +++ b/net/smc/smc_core.c
13195 @@ -734,7 +734,7 @@ static struct smc_buf_desc *smc_buf_get_slot(int compressed_bufsize,
13196 */
13197 static inline int smc_rmb_wnd_update_limit(int rmbe_size)
13198 {
13199 - return min_t(int, rmbe_size / 10, SOCK_MIN_SNDBUF / 2);
13200 + return max_t(int, rmbe_size / 10, SOCK_MIN_SNDBUF / 2);
13201 }
13202
13203 static struct smc_buf_desc *smcr_new_buf_create(struct smc_link_group *lgr,
13204 diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
13205 index b6039642df67e..08e1ccc01e983 100644
13206 --- a/net/sunrpc/clnt.c
13207 +++ b/net/sunrpc/clnt.c
13208 @@ -2223,6 +2223,7 @@ call_transmit_status(struct rpc_task *task)
13209 * socket just returned a connection error,
13210 * then hold onto the transport lock.
13211 */
13212 + case -ENOMEM:
13213 case -ENOBUFS:
13214 rpc_delay(task, HZ>>2);
13215 /* fall through */
13216 @@ -2308,6 +2309,7 @@ call_bc_transmit_status(struct rpc_task *task)
13217 case -ENOTCONN:
13218 case -EPIPE:
13219 break;
13220 + case -ENOMEM:
13221 case -ENOBUFS:
13222 rpc_delay(task, HZ>>2);
13223 /* fall through */
13224 @@ -2392,6 +2394,11 @@ call_status(struct rpc_task *task)
13225 case -EPIPE:
13226 case -EAGAIN:
13227 break;
13228 + case -ENFILE:
13229 + case -ENOBUFS:
13230 + case -ENOMEM:
13231 + rpc_delay(task, HZ>>2);
13232 + break;
13233 case -EIO:
13234 /* shutdown or soft timeout */
13235 goto out_exit;
13236 diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
13237 index 8fc4a6b3422f4..32ffa801a5b97 100644
13238 --- a/net/sunrpc/sched.c
13239 +++ b/net/sunrpc/sched.c
13240 @@ -1039,8 +1039,10 @@ int rpc_malloc(struct rpc_task *task)
13241 struct rpc_buffer *buf;
13242 gfp_t gfp = GFP_NOFS;
13243
13244 + if (RPC_IS_ASYNC(task))
13245 + gfp = GFP_NOWAIT | __GFP_NOWARN;
13246 if (RPC_IS_SWAPPER(task))
13247 - gfp = __GFP_MEMALLOC | GFP_NOWAIT | __GFP_NOWARN;
13248 + gfp |= __GFP_MEMALLOC;
13249
13250 size += sizeof(struct rpc_buffer);
13251 if (size <= RPC_BUFFER_MAXSIZE)
13252 diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c
13253 index 93b6afd28405e..8ac579778e487 100644
13254 --- a/net/sunrpc/xprt.c
13255 +++ b/net/sunrpc/xprt.c
13256 @@ -2006,7 +2006,14 @@ static void xprt_destroy(struct rpc_xprt *xprt)
13257 */
13258 wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_UNINTERRUPTIBLE);
13259
13260 + /*
13261 + * xprt_schedule_autodisconnect() can run after XPRT_LOCKED
13262 + * is cleared. We use ->transport_lock to ensure the mod_timer()
13263 + * can only run *before* del_time_sync(), never after.
13264 + */
13265 + spin_lock(&xprt->transport_lock);
13266 del_timer_sync(&xprt->timer);
13267 + spin_unlock(&xprt->transport_lock);
13268
13269 /*
13270 * Destroy sockets etc from the system workqueue so they can
13271 diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
13272 index 2f21e3c52bfc1..866bcd99bdc0e 100644
13273 --- a/net/sunrpc/xprtrdma/transport.c
13274 +++ b/net/sunrpc/xprtrdma/transport.c
13275 @@ -626,8 +626,10 @@ xprt_rdma_allocate(struct rpc_task *task)
13276 gfp_t flags;
13277
13278 flags = RPCRDMA_DEF_GFP;
13279 + if (RPC_IS_ASYNC(task))
13280 + flags = GFP_NOWAIT | __GFP_NOWARN;
13281 if (RPC_IS_SWAPPER(task))
13282 - flags = __GFP_MEMALLOC | GFP_NOWAIT | __GFP_NOWARN;
13283 + flags |= __GFP_MEMALLOC;
13284
13285 if (!rpcrdma_check_regbuf(r_xprt, req->rl_sendbuf, rqst->rq_callsize,
13286 flags))
13287 diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
13288 index 8ffc54b6661f8..480e879e74ae5 100644
13289 --- a/net/sunrpc/xprtsock.c
13290 +++ b/net/sunrpc/xprtsock.c
13291 @@ -872,12 +872,12 @@ out:
13292 /**
13293 * xs_nospace - handle transmit was incomplete
13294 * @req: pointer to RPC request
13295 + * @transport: pointer to struct sock_xprt
13296 *
13297 */
13298 -static int xs_nospace(struct rpc_rqst *req)
13299 +static int xs_nospace(struct rpc_rqst *req, struct sock_xprt *transport)
13300 {
13301 - struct rpc_xprt *xprt = req->rq_xprt;
13302 - struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
13303 + struct rpc_xprt *xprt = &transport->xprt;
13304 struct sock *sk = transport->inet;
13305 int ret = -EAGAIN;
13306
13307 @@ -891,25 +891,49 @@ static int xs_nospace(struct rpc_rqst *req)
13308
13309 /* Don't race with disconnect */
13310 if (xprt_connected(xprt)) {
13311 + struct socket_wq *wq;
13312 +
13313 + rcu_read_lock();
13314 + wq = rcu_dereference(sk->sk_wq);
13315 + set_bit(SOCKWQ_ASYNC_NOSPACE, &wq->flags);
13316 + rcu_read_unlock();
13317 +
13318 /* wait for more buffer space */
13319 + set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
13320 sk->sk_write_pending++;
13321 xprt_wait_for_buffer_space(xprt);
13322 } else
13323 ret = -ENOTCONN;
13324
13325 spin_unlock(&xprt->transport_lock);
13326 + return ret;
13327 +}
13328
13329 - /* Race breaker in case memory is freed before above code is called */
13330 - if (ret == -EAGAIN) {
13331 - struct socket_wq *wq;
13332 +static int xs_sock_nospace(struct rpc_rqst *req)
13333 +{
13334 + struct sock_xprt *transport =
13335 + container_of(req->rq_xprt, struct sock_xprt, xprt);
13336 + struct sock *sk = transport->inet;
13337 + int ret = -EAGAIN;
13338
13339 - rcu_read_lock();
13340 - wq = rcu_dereference(sk->sk_wq);
13341 - set_bit(SOCKWQ_ASYNC_NOSPACE, &wq->flags);
13342 - rcu_read_unlock();
13343 + lock_sock(sk);
13344 + if (!sock_writeable(sk))
13345 + ret = xs_nospace(req, transport);
13346 + release_sock(sk);
13347 + return ret;
13348 +}
13349
13350 - sk->sk_write_space(sk);
13351 - }
13352 +static int xs_stream_nospace(struct rpc_rqst *req)
13353 +{
13354 + struct sock_xprt *transport =
13355 + container_of(req->rq_xprt, struct sock_xprt, xprt);
13356 + struct sock *sk = transport->inet;
13357 + int ret = -EAGAIN;
13358 +
13359 + lock_sock(sk);
13360 + if (!sk_stream_memory_free(sk))
13361 + ret = xs_nospace(req, transport);
13362 + release_sock(sk);
13363 return ret;
13364 }
13365
13366 @@ -996,7 +1020,7 @@ static int xs_local_send_request(struct rpc_rqst *req)
13367 case -ENOBUFS:
13368 break;
13369 case -EAGAIN:
13370 - status = xs_nospace(req);
13371 + status = xs_stream_nospace(req);
13372 break;
13373 default:
13374 dprintk("RPC: sendmsg returned unrecognized error %d\n",
13375 @@ -1068,7 +1092,7 @@ process_status:
13376 /* Should we call xs_close() here? */
13377 break;
13378 case -EAGAIN:
13379 - status = xs_nospace(req);
13380 + status = xs_sock_nospace(req);
13381 break;
13382 case -ENETUNREACH:
13383 case -ENOBUFS:
13384 @@ -1181,7 +1205,7 @@ static int xs_tcp_send_request(struct rpc_rqst *req)
13385 /* Should we call xs_close() here? */
13386 break;
13387 case -EAGAIN:
13388 - status = xs_nospace(req);
13389 + status = xs_stream_nospace(req);
13390 break;
13391 case -ECONNRESET:
13392 case -ECONNREFUSED:
13393 diff --git a/net/tipc/socket.c b/net/tipc/socket.c
13394 index f4217673eee70..d543c4556df20 100644
13395 --- a/net/tipc/socket.c
13396 +++ b/net/tipc/socket.c
13397 @@ -2698,7 +2698,8 @@ static void tipc_sk_retry_connect(struct sock *sk, struct sk_buff_head *list)
13398
13399 /* Try again later if dest link is congested */
13400 if (tsk->cong_link_cnt) {
13401 - sk_reset_timer(sk, &sk->sk_timer, msecs_to_jiffies(100));
13402 + sk_reset_timer(sk, &sk->sk_timer,
13403 + jiffies + msecs_to_jiffies(100));
13404 return;
13405 }
13406 /* Prepare SYN for retransmit */
13407 diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
13408 index 1436a36c1934a..af3be9a29d6db 100644
13409 --- a/net/tls/tls_sw.c
13410 +++ b/net/tls/tls_sw.c
13411 @@ -1479,7 +1479,7 @@ static int decrypt_internal(struct sock *sk, struct sk_buff *skb,
13412 }
13413 if (prot->version == TLS_1_3_VERSION)
13414 memcpy(iv + iv_offset, tls_ctx->rx.iv,
13415 - crypto_aead_ivsize(ctx->aead_recv));
13416 + prot->iv_size + prot->salt_size);
13417 else
13418 memcpy(iv + iv_offset, tls_ctx->rx.iv, prot->salt_size);
13419
13420 diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
13421 index d8d603aa48875..c94aa587e0c92 100644
13422 --- a/net/x25/af_x25.c
13423 +++ b/net/x25/af_x25.c
13424 @@ -1767,10 +1767,15 @@ void x25_kill_by_neigh(struct x25_neigh *nb)
13425
13426 write_lock_bh(&x25_list_lock);
13427
13428 - sk_for_each(s, &x25_list)
13429 - if (x25_sk(s)->neighbour == nb)
13430 + sk_for_each(s, &x25_list) {
13431 + if (x25_sk(s)->neighbour == nb) {
13432 + write_unlock_bh(&x25_list_lock);
13433 + lock_sock(s);
13434 x25_disconnect(s, ENETUNREACH, 0, 0);
13435 -
13436 + release_sock(s);
13437 + write_lock_bh(&x25_list_lock);
13438 + }
13439 + }
13440 write_unlock_bh(&x25_list_lock);
13441
13442 /* Remove any related forwards */
13443 diff --git a/net/xfrm/xfrm_interface.c b/net/xfrm/xfrm_interface.c
13444 index 3932d3aaff270..4cfa79e04e3d1 100644
13445 --- a/net/xfrm/xfrm_interface.c
13446 +++ b/net/xfrm/xfrm_interface.c
13447 @@ -300,7 +300,10 @@ xfrmi_xmit2(struct sk_buff *skb, struct net_device *dev, struct flowi *fl)
13448 if (mtu < IPV6_MIN_MTU)
13449 mtu = IPV6_MIN_MTU;
13450
13451 - icmpv6_ndo_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
13452 + if (skb->len > 1280)
13453 + icmpv6_ndo_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
13454 + else
13455 + goto xmit;
13456 } else {
13457 if (!(ip_hdr(skb)->frag_off & htons(IP_DF)))
13458 goto xmit;
13459 diff --git a/scripts/gcc-plugins/stackleak_plugin.c b/scripts/gcc-plugins/stackleak_plugin.c
13460 index dbd37460c573e..f46abb315010d 100644
13461 --- a/scripts/gcc-plugins/stackleak_plugin.c
13462 +++ b/scripts/gcc-plugins/stackleak_plugin.c
13463 @@ -262,6 +262,23 @@ static unsigned int stackleak_cleanup_execute(void)
13464 return 0;
13465 }
13466
13467 +/*
13468 + * STRING_CST may or may not be NUL terminated:
13469 + * https://gcc.gnu.org/onlinedocs/gccint/Constant-expressions.html
13470 + */
13471 +static inline bool string_equal(tree node, const char *string, int length)
13472 +{
13473 + if (TREE_STRING_LENGTH(node) < length)
13474 + return false;
13475 + if (TREE_STRING_LENGTH(node) > length + 1)
13476 + return false;
13477 + if (TREE_STRING_LENGTH(node) == length + 1 &&
13478 + TREE_STRING_POINTER(node)[length] != '\0')
13479 + return false;
13480 + return !memcmp(TREE_STRING_POINTER(node), string, length);
13481 +}
13482 +#define STRING_EQUAL(node, str) string_equal(node, str, strlen(str))
13483 +
13484 static bool stackleak_gate(void)
13485 {
13486 tree section;
13487 @@ -271,13 +288,13 @@ static bool stackleak_gate(void)
13488 if (section && TREE_VALUE(section)) {
13489 section = TREE_VALUE(TREE_VALUE(section));
13490
13491 - if (!strncmp(TREE_STRING_POINTER(section), ".init.text", 10))
13492 + if (STRING_EQUAL(section, ".init.text"))
13493 return false;
13494 - if (!strncmp(TREE_STRING_POINTER(section), ".devinit.text", 13))
13495 + if (STRING_EQUAL(section, ".devinit.text"))
13496 return false;
13497 - if (!strncmp(TREE_STRING_POINTER(section), ".cpuinit.text", 13))
13498 + if (STRING_EQUAL(section, ".cpuinit.text"))
13499 return false;
13500 - if (!strncmp(TREE_STRING_POINTER(section), ".meminit.text", 13))
13501 + if (STRING_EQUAL(section, ".meminit.text"))
13502 return false;
13503 }
13504
13505 diff --git a/security/keys/keyctl_pkey.c b/security/keys/keyctl_pkey.c
13506 index 931d8dfb4a7f4..63e5c646f7620 100644
13507 --- a/security/keys/keyctl_pkey.c
13508 +++ b/security/keys/keyctl_pkey.c
13509 @@ -135,15 +135,23 @@ static int keyctl_pkey_params_get_2(const struct keyctl_pkey_params __user *_par
13510
13511 switch (op) {
13512 case KEYCTL_PKEY_ENCRYPT:
13513 + if (uparams.in_len > info.max_dec_size ||
13514 + uparams.out_len > info.max_enc_size)
13515 + return -EINVAL;
13516 + break;
13517 case KEYCTL_PKEY_DECRYPT:
13518 if (uparams.in_len > info.max_enc_size ||
13519 uparams.out_len > info.max_dec_size)
13520 return -EINVAL;
13521 break;
13522 case KEYCTL_PKEY_SIGN:
13523 + if (uparams.in_len > info.max_data_size ||
13524 + uparams.out_len > info.max_sig_size)
13525 + return -EINVAL;
13526 + break;
13527 case KEYCTL_PKEY_VERIFY:
13528 - if (uparams.in_len > info.max_sig_size ||
13529 - uparams.out_len > info.max_data_size)
13530 + if (uparams.in_len > info.max_data_size ||
13531 + uparams.in2_len > info.max_sig_size)
13532 return -EINVAL;
13533 break;
13534 default:
13535 @@ -151,7 +159,7 @@ static int keyctl_pkey_params_get_2(const struct keyctl_pkey_params __user *_par
13536 }
13537
13538 params->in_len = uparams.in_len;
13539 - params->out_len = uparams.out_len;
13540 + params->out_len = uparams.out_len; /* Note: same as in2_len */
13541 return 0;
13542 }
13543
13544 diff --git a/security/security.c b/security/security.c
13545 index c34ec4c7d98cc..f633717311a34 100644
13546 --- a/security/security.c
13547 +++ b/security/security.c
13548 @@ -802,9 +802,22 @@ int security_fs_context_dup(struct fs_context *fc, struct fs_context *src_fc)
13549 return call_int_hook(fs_context_dup, 0, fc, src_fc);
13550 }
13551
13552 -int security_fs_context_parse_param(struct fs_context *fc, struct fs_parameter *param)
13553 +int security_fs_context_parse_param(struct fs_context *fc,
13554 + struct fs_parameter *param)
13555 {
13556 - return call_int_hook(fs_context_parse_param, -ENOPARAM, fc, param);
13557 + struct security_hook_list *hp;
13558 + int trc;
13559 + int rc = -ENOPARAM;
13560 +
13561 + hlist_for_each_entry(hp, &security_hook_heads.fs_context_parse_param,
13562 + list) {
13563 + trc = hp->hook.fs_context_parse_param(fc, param);
13564 + if (trc == 0)
13565 + rc = 0;
13566 + else if (trc != -ENOPARAM)
13567 + return trc;
13568 + }
13569 + return rc;
13570 }
13571
13572 int security_sb_alloc(struct super_block *sb)
13573 diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
13574 index 56418cf72069d..d9f15c84aab7d 100644
13575 --- a/security/selinux/hooks.c
13576 +++ b/security/selinux/hooks.c
13577 @@ -2855,10 +2855,9 @@ static int selinux_fs_context_parse_param(struct fs_context *fc,
13578 return opt;
13579
13580 rc = selinux_add_opt(opt, param->string, &fc->security);
13581 - if (!rc) {
13582 + if (!rc)
13583 param->string = NULL;
13584 - rc = 1;
13585 - }
13586 +
13587 return rc;
13588 }
13589
13590 diff --git a/security/selinux/xfrm.c b/security/selinux/xfrm.c
13591 index 7314196185d15..00e95f8bd7c73 100644
13592 --- a/security/selinux/xfrm.c
13593 +++ b/security/selinux/xfrm.c
13594 @@ -346,7 +346,7 @@ int selinux_xfrm_state_alloc_acquire(struct xfrm_state *x,
13595 int rc;
13596 struct xfrm_sec_ctx *ctx;
13597 char *ctx_str = NULL;
13598 - int str_len;
13599 + u32 str_len;
13600
13601 if (!polsec)
13602 return 0;
13603 diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
13604 index 12c0fa85d9f82..0253cd2e2358a 100644
13605 --- a/security/smack/smack_lsm.c
13606 +++ b/security/smack/smack_lsm.c
13607 @@ -2501,7 +2501,7 @@ static int smk_ipv6_check(struct smack_known *subject,
13608 #ifdef CONFIG_AUDIT
13609 smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
13610 ad.a.u.net->family = PF_INET6;
13611 - ad.a.u.net->dport = ntohs(address->sin6_port);
13612 + ad.a.u.net->dport = address->sin6_port;
13613 if (act == SMK_RECEIVING)
13614 ad.a.u.net->v6info.saddr = address->sin6_addr;
13615 else
13616 diff --git a/security/tomoyo/load_policy.c b/security/tomoyo/load_policy.c
13617 index 3445ae6fd4794..363b65be87ab7 100644
13618 --- a/security/tomoyo/load_policy.c
13619 +++ b/security/tomoyo/load_policy.c
13620 @@ -24,7 +24,7 @@ static const char *tomoyo_loader;
13621 static int __init tomoyo_loader_setup(char *str)
13622 {
13623 tomoyo_loader = str;
13624 - return 0;
13625 + return 1;
13626 }
13627
13628 __setup("TOMOYO_loader=", tomoyo_loader_setup);
13629 @@ -64,7 +64,7 @@ static const char *tomoyo_trigger;
13630 static int __init tomoyo_trigger_setup(char *str)
13631 {
13632 tomoyo_trigger = str;
13633 - return 0;
13634 + return 1;
13635 }
13636
13637 __setup("TOMOYO_trigger=", tomoyo_trigger_setup);
13638 diff --git a/sound/firewire/fcp.c b/sound/firewire/fcp.c
13639 index bbfbebf4affbc..df44dd5dc4b22 100644
13640 --- a/sound/firewire/fcp.c
13641 +++ b/sound/firewire/fcp.c
13642 @@ -240,9 +240,7 @@ int fcp_avc_transaction(struct fw_unit *unit,
13643 t.response_match_bytes = response_match_bytes;
13644 t.state = STATE_PENDING;
13645 init_waitqueue_head(&t.wait);
13646 -
13647 - if (*(const u8 *)command == 0x00 || *(const u8 *)command == 0x03)
13648 - t.deferrable = true;
13649 + t.deferrable = (*(const u8 *)command == 0x00 || *(const u8 *)command == 0x03);
13650
13651 spin_lock_irq(&transactions_lock);
13652 list_add_tail(&t.list, &transactions);
13653 diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c
13654 index fa3c39cff5f85..9ee3a312c6793 100644
13655 --- a/sound/isa/cs423x/cs4236.c
13656 +++ b/sound/isa/cs423x/cs4236.c
13657 @@ -544,7 +544,7 @@ static int snd_cs423x_pnpbios_detect(struct pnp_dev *pdev,
13658 static int dev;
13659 int err;
13660 struct snd_card *card;
13661 - struct pnp_dev *cdev;
13662 + struct pnp_dev *cdev, *iter;
13663 char cid[PNP_ID_LEN];
13664
13665 if (pnp_device_is_isapnp(pdev))
13666 @@ -560,9 +560,11 @@ static int snd_cs423x_pnpbios_detect(struct pnp_dev *pdev,
13667 strcpy(cid, pdev->id[0].id);
13668 cid[5] = '1';
13669 cdev = NULL;
13670 - list_for_each_entry(cdev, &(pdev->protocol->devices), protocol_list) {
13671 - if (!strcmp(cdev->id[0].id, cid))
13672 + list_for_each_entry(iter, &(pdev->protocol->devices), protocol_list) {
13673 + if (!strcmp(iter->id[0].id, cid)) {
13674 + cdev = iter;
13675 break;
13676 + }
13677 }
13678 err = snd_cs423x_card_new(&pdev->dev, dev, &card);
13679 if (err < 0)
13680 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
13681 index d201043d661c1..05ca4196cb0fd 100644
13682 --- a/sound/pci/hda/patch_realtek.c
13683 +++ b/sound/pci/hda/patch_realtek.c
13684 @@ -3557,8 +3557,8 @@ static void alc256_shutup(struct hda_codec *codec)
13685 /* If disable 3k pulldown control for alc257, the Mic detection will not work correctly
13686 * when booting with headset plugged. So skip setting it for the codec alc257
13687 */
13688 - if (spec->codec_variant != ALC269_TYPE_ALC257 &&
13689 - spec->codec_variant != ALC269_TYPE_ALC256)
13690 + if (codec->core.vendor_id != 0x10ec0236 &&
13691 + codec->core.vendor_id != 0x10ec0257)
13692 alc_update_coef_idx(codec, 0x46, 0, 3 << 12);
13693
13694 if (!spec->no_shutup_pins)
13695 @@ -6456,6 +6456,7 @@ enum {
13696 ALC285_FIXUP_HP_MUTE_LED,
13697 ALC236_FIXUP_HP_MUTE_LED,
13698 ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
13699 + ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
13700 ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
13701 ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS,
13702 ALC269VC_FIXUP_ACER_HEADSET_MIC,
13703 @@ -7740,6 +7741,14 @@ static const struct hda_fixup alc269_fixups[] = {
13704 { }
13705 },
13706 },
13707 + [ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET] = {
13708 + .type = HDA_FIXUP_VERBS,
13709 + .v.verbs = (const struct hda_verb[]) {
13710 + { 0x20, AC_VERB_SET_COEF_INDEX, 0x08},
13711 + { 0x20, AC_VERB_SET_PROC_COEF, 0x2fcf},
13712 + { }
13713 + },
13714 + },
13715 [ALC295_FIXUP_ASUS_MIC_NO_PRESENCE] = {
13716 .type = HDA_FIXUP_PINS,
13717 .v.pins = (const struct hda_pintbl[]) {
13718 @@ -8217,6 +8226,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
13719 SND_PCI_QUIRK(0x144d, 0xc740, "Samsung Ativ book 8 (NP870Z5G)", ALC269_FIXUP_ATIV_BOOK_8),
13720 SND_PCI_QUIRK(0x144d, 0xc812, "Samsung Notebook Pen S (NT950SBE-X58)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
13721 SND_PCI_QUIRK(0x144d, 0xc830, "Samsung Galaxy Book Ion (NT950XCJ-X716A)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
13722 + SND_PCI_QUIRK(0x144d, 0xc832, "Samsung Galaxy Book Flex Alpha (NP730QCJ)", ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
13723 SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC),
13724 SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC),
13725 SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC),
13726 @@ -8540,6 +8550,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
13727 {.id = ALC298_FIXUP_HUAWEI_MBX_STEREO, .name = "huawei-mbx-stereo"},
13728 {.id = ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE, .name = "alc256-medion-headset"},
13729 {.id = ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc298-samsung-headphone"},
13730 + {.id = ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc256-samsung-headphone"},
13731 {.id = ALC255_FIXUP_XIAOMI_HEADSET_MIC, .name = "alc255-xiaomi-headset"},
13732 {.id = ALC274_FIXUP_HP_MIC, .name = "alc274-hp-mic-detect"},
13733 {.id = ALC295_FIXUP_HP_OMEN, .name = "alc295-hp-omen"},
13734 diff --git a/sound/soc/atmel/atmel_ssc_dai.c b/sound/soc/atmel/atmel_ssc_dai.c
13735 index ca603397651c0..1e0973322cd00 100644
13736 --- a/sound/soc/atmel/atmel_ssc_dai.c
13737 +++ b/sound/soc/atmel/atmel_ssc_dai.c
13738 @@ -280,7 +280,10 @@ static int atmel_ssc_startup(struct snd_pcm_substream *substream,
13739
13740 /* Enable PMC peripheral clock for this SSC */
13741 pr_debug("atmel_ssc_dai: Starting clock\n");
13742 - clk_enable(ssc_p->ssc->clk);
13743 + ret = clk_enable(ssc_p->ssc->clk);
13744 + if (ret)
13745 + return ret;
13746 +
13747 ssc_p->mck_rate = clk_get_rate(ssc_p->ssc->clk);
13748
13749 /* Reset the SSC unless initialized to keep it in a clean state */
13750 diff --git a/sound/soc/atmel/sam9g20_wm8731.c b/sound/soc/atmel/sam9g20_wm8731.c
13751 index b1bef2bf142dc..05277a88e20d8 100644
13752 --- a/sound/soc/atmel/sam9g20_wm8731.c
13753 +++ b/sound/soc/atmel/sam9g20_wm8731.c
13754 @@ -214,6 +214,7 @@ static int at91sam9g20ek_audio_probe(struct platform_device *pdev)
13755 cpu_np = of_parse_phandle(np, "atmel,ssc-controller", 0);
13756 if (!cpu_np) {
13757 dev_err(&pdev->dev, "dai and pcm info missing\n");
13758 + of_node_put(codec_np);
13759 return -EINVAL;
13760 }
13761 at91sam9g20ek_dai.cpus->of_node = cpu_np;
13762 diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
13763 index 229cc89f8c5a5..466dc67799f4c 100644
13764 --- a/sound/soc/codecs/Kconfig
13765 +++ b/sound/soc/codecs/Kconfig
13766 @@ -586,21 +586,26 @@ config SND_SOC_CS4349
13767
13768 config SND_SOC_CS47L15
13769 tristate
13770 + depends on MFD_CS47L15
13771
13772 config SND_SOC_CS47L24
13773 tristate
13774
13775 config SND_SOC_CS47L35
13776 tristate
13777 + depends on MFD_CS47L35
13778
13779 config SND_SOC_CS47L85
13780 tristate
13781 + depends on MFD_CS47L85
13782
13783 config SND_SOC_CS47L90
13784 tristate
13785 + depends on MFD_CS47L90
13786
13787 config SND_SOC_CS47L92
13788 tristate
13789 + depends on MFD_CS47L92
13790
13791 # Cirrus Logic Quad-Channel ADC
13792 config SND_SOC_CS53L30
13793 diff --git a/sound/soc/codecs/msm8916-wcd-analog.c b/sound/soc/codecs/msm8916-wcd-analog.c
13794 index 337bddb7c2a49..5a8eedea6be03 100644
13795 --- a/sound/soc/codecs/msm8916-wcd-analog.c
13796 +++ b/sound/soc/codecs/msm8916-wcd-analog.c
13797 @@ -1195,8 +1195,10 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev)
13798 }
13799
13800 irq = platform_get_irq_byname(pdev, "mbhc_switch_int");
13801 - if (irq < 0)
13802 - return irq;
13803 + if (irq < 0) {
13804 + ret = irq;
13805 + goto err_disable_clk;
13806 + }
13807
13808 ret = devm_request_threaded_irq(dev, irq, NULL,
13809 pm8916_mbhc_switch_irq_handler,
13810 @@ -1208,8 +1210,10 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev)
13811
13812 if (priv->mbhc_btn_enabled) {
13813 irq = platform_get_irq_byname(pdev, "mbhc_but_press_det");
13814 - if (irq < 0)
13815 - return irq;
13816 + if (irq < 0) {
13817 + ret = irq;
13818 + goto err_disable_clk;
13819 + }
13820
13821 ret = devm_request_threaded_irq(dev, irq, NULL,
13822 mbhc_btn_press_irq_handler,
13823 @@ -1220,8 +1224,10 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev)
13824 dev_err(dev, "cannot request mbhc button press irq\n");
13825
13826 irq = platform_get_irq_byname(pdev, "mbhc_but_rel_det");
13827 - if (irq < 0)
13828 - return irq;
13829 + if (irq < 0) {
13830 + ret = irq;
13831 + goto err_disable_clk;
13832 + }
13833
13834 ret = devm_request_threaded_irq(dev, irq, NULL,
13835 mbhc_btn_release_irq_handler,
13836 @@ -1238,6 +1244,10 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev)
13837 return devm_snd_soc_register_component(dev, &pm8916_wcd_analog,
13838 pm8916_wcd_analog_dai,
13839 ARRAY_SIZE(pm8916_wcd_analog_dai));
13840 +
13841 +err_disable_clk:
13842 + clk_disable_unprepare(priv->mclk);
13843 + return ret;
13844 }
13845
13846 static int pm8916_wcd_analog_spmi_remove(struct platform_device *pdev)
13847 diff --git a/sound/soc/codecs/msm8916-wcd-digital.c b/sound/soc/codecs/msm8916-wcd-digital.c
13848 index 09fccacadd6b1..d5269ab5f91c5 100644
13849 --- a/sound/soc/codecs/msm8916-wcd-digital.c
13850 +++ b/sound/soc/codecs/msm8916-wcd-digital.c
13851 @@ -1201,7 +1201,7 @@ static int msm8916_wcd_digital_probe(struct platform_device *pdev)
13852 ret = clk_prepare_enable(priv->mclk);
13853 if (ret < 0) {
13854 dev_err(dev, "failed to enable mclk %d\n", ret);
13855 - return ret;
13856 + goto err_clk;
13857 }
13858
13859 dev_set_drvdata(dev, priv);
13860 @@ -1209,6 +1209,9 @@ static int msm8916_wcd_digital_probe(struct platform_device *pdev)
13861 return devm_snd_soc_register_component(dev, &msm8916_wcd_digital,
13862 msm8916_wcd_digital_dai,
13863 ARRAY_SIZE(msm8916_wcd_digital_dai));
13864 +err_clk:
13865 + clk_disable_unprepare(priv->ahbclk);
13866 + return ret;
13867 }
13868
13869 static int msm8916_wcd_digital_remove(struct platform_device *pdev)
13870 diff --git a/sound/soc/codecs/mt6358.c b/sound/soc/codecs/mt6358.c
13871 index bb737fd678cc6..494ba0eeb4336 100644
13872 --- a/sound/soc/codecs/mt6358.c
13873 +++ b/sound/soc/codecs/mt6358.c
13874 @@ -103,6 +103,7 @@ int mt6358_set_mtkaif_protocol(struct snd_soc_component *cmpnt,
13875 priv->mtkaif_protocol = mtkaif_protocol;
13876 return 0;
13877 }
13878 +EXPORT_SYMBOL_GPL(mt6358_set_mtkaif_protocol);
13879
13880 static void playback_gpio_set(struct mt6358_priv *priv)
13881 {
13882 @@ -269,6 +270,7 @@ int mt6358_mtkaif_calibration_enable(struct snd_soc_component *cmpnt)
13883 1 << RG_AUD_PAD_TOP_DAT_MISO_LOOPBACK_SFT);
13884 return 0;
13885 }
13886 +EXPORT_SYMBOL_GPL(mt6358_mtkaif_calibration_enable);
13887
13888 int mt6358_mtkaif_calibration_disable(struct snd_soc_component *cmpnt)
13889 {
13890 @@ -292,6 +294,7 @@ int mt6358_mtkaif_calibration_disable(struct snd_soc_component *cmpnt)
13891 capture_gpio_reset(priv);
13892 return 0;
13893 }
13894 +EXPORT_SYMBOL_GPL(mt6358_mtkaif_calibration_disable);
13895
13896 int mt6358_set_mtkaif_calibration_phase(struct snd_soc_component *cmpnt,
13897 int phase_1, int phase_2)
13898 @@ -306,6 +309,7 @@ int mt6358_set_mtkaif_calibration_phase(struct snd_soc_component *cmpnt,
13899 phase_2 << RG_AUD_PAD_TOP_PHASE_MODE2_SFT);
13900 return 0;
13901 }
13902 +EXPORT_SYMBOL_GPL(mt6358_set_mtkaif_calibration_phase);
13903
13904 /* dl pga gain */
13905 enum {
13906 diff --git a/sound/soc/codecs/rt5663.c b/sound/soc/codecs/rt5663.c
13907 index 3610be1590fcc..19e2f622718d6 100644
13908 --- a/sound/soc/codecs/rt5663.c
13909 +++ b/sound/soc/codecs/rt5663.c
13910 @@ -3478,6 +3478,8 @@ static int rt5663_parse_dp(struct rt5663_priv *rt5663, struct device *dev)
13911 table_size = sizeof(struct impedance_mapping_table) *
13912 rt5663->pdata.impedance_sensing_num;
13913 rt5663->imp_table = devm_kzalloc(dev, table_size, GFP_KERNEL);
13914 + if (!rt5663->imp_table)
13915 + return -ENOMEM;
13916 ret = device_property_read_u32_array(dev,
13917 "realtek,impedance_sensing_table",
13918 (u32 *)rt5663->imp_table, table_size);
13919 diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c
13920 index fe99584c917f8..9cd91bb0a9022 100644
13921 --- a/sound/soc/codecs/wm8350.c
13922 +++ b/sound/soc/codecs/wm8350.c
13923 @@ -1535,18 +1535,38 @@ static int wm8350_component_probe(struct snd_soc_component *component)
13924 wm8350_clear_bits(wm8350, WM8350_JACK_DETECT,
13925 WM8350_JDL_ENA | WM8350_JDR_ENA);
13926
13927 - wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_L,
13928 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_L,
13929 wm8350_hpl_jack_handler, 0, "Left jack detect",
13930 priv);
13931 - wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_R,
13932 + if (ret != 0)
13933 + goto err;
13934 +
13935 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_R,
13936 wm8350_hpr_jack_handler, 0, "Right jack detect",
13937 priv);
13938 - wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_MICSCD,
13939 + if (ret != 0)
13940 + goto free_jck_det_l;
13941 +
13942 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_MICSCD,
13943 wm8350_mic_handler, 0, "Microphone short", priv);
13944 - wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_MICD,
13945 + if (ret != 0)
13946 + goto free_jck_det_r;
13947 +
13948 + ret = wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_MICD,
13949 wm8350_mic_handler, 0, "Microphone detect", priv);
13950 + if (ret != 0)
13951 + goto free_micscd;
13952
13953 return 0;
13954 +
13955 +free_micscd:
13956 + wm8350_free_irq(wm8350, WM8350_IRQ_CODEC_MICSCD, priv);
13957 +free_jck_det_r:
13958 + wm8350_free_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_R, priv);
13959 +free_jck_det_l:
13960 + wm8350_free_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_L, priv);
13961 +err:
13962 + return ret;
13963 }
13964
13965 static void wm8350_component_remove(struct snd_soc_component *component)
13966 diff --git a/sound/soc/fsl/imx-es8328.c b/sound/soc/fsl/imx-es8328.c
13967 index fad1eb6253d53..9e602c3456196 100644
13968 --- a/sound/soc/fsl/imx-es8328.c
13969 +++ b/sound/soc/fsl/imx-es8328.c
13970 @@ -87,6 +87,7 @@ static int imx_es8328_probe(struct platform_device *pdev)
13971 if (int_port > MUX_PORT_MAX || int_port == 0) {
13972 dev_err(dev, "mux-int-port: hardware only has %d mux ports\n",
13973 MUX_PORT_MAX);
13974 + ret = -EINVAL;
13975 goto fail;
13976 }
13977
13978 diff --git a/sound/soc/mxs/mxs-saif.c b/sound/soc/mxs/mxs-saif.c
13979 index 1e38ce8583262..cb1b525cbe9de 100644
13980 --- a/sound/soc/mxs/mxs-saif.c
13981 +++ b/sound/soc/mxs/mxs-saif.c
13982 @@ -455,7 +455,10 @@ static int mxs_saif_hw_params(struct snd_pcm_substream *substream,
13983 * basic clock which should be fast enough for the internal
13984 * logic.
13985 */
13986 - clk_enable(saif->clk);
13987 + ret = clk_enable(saif->clk);
13988 + if (ret)
13989 + return ret;
13990 +
13991 ret = clk_set_rate(saif->clk, 24000000);
13992 clk_disable(saif->clk);
13993 if (ret)
13994 diff --git a/sound/soc/mxs/mxs-sgtl5000.c b/sound/soc/mxs/mxs-sgtl5000.c
13995 index 9841e1da97826..8282fe6d00dd4 100644
13996 --- a/sound/soc/mxs/mxs-sgtl5000.c
13997 +++ b/sound/soc/mxs/mxs-sgtl5000.c
13998 @@ -118,6 +118,9 @@ static int mxs_sgtl5000_probe(struct platform_device *pdev)
13999 codec_np = of_parse_phandle(np, "audio-codec", 0);
14000 if (!saif_np[0] || !saif_np[1] || !codec_np) {
14001 dev_err(&pdev->dev, "phandle missing or invalid\n");
14002 + of_node_put(codec_np);
14003 + of_node_put(saif_np[0]);
14004 + of_node_put(saif_np[1]);
14005 return -EINVAL;
14006 }
14007
14008 diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
14009 index 3447dbdba1f17..6ac7df30a2890 100644
14010 --- a/sound/soc/sh/fsi.c
14011 +++ b/sound/soc/sh/fsi.c
14012 @@ -816,14 +816,27 @@ static int fsi_clk_enable(struct device *dev,
14013 return ret;
14014 }
14015
14016 - clk_enable(clock->xck);
14017 - clk_enable(clock->ick);
14018 - clk_enable(clock->div);
14019 + ret = clk_enable(clock->xck);
14020 + if (ret)
14021 + goto err;
14022 + ret = clk_enable(clock->ick);
14023 + if (ret)
14024 + goto disable_xck;
14025 + ret = clk_enable(clock->div);
14026 + if (ret)
14027 + goto disable_ick;
14028
14029 clock->count++;
14030 }
14031
14032 return ret;
14033 +
14034 +disable_ick:
14035 + clk_disable(clock->ick);
14036 +disable_xck:
14037 + clk_disable(clock->xck);
14038 +err:
14039 + return ret;
14040 }
14041
14042 static int fsi_clk_disable(struct device *dev,
14043 diff --git a/sound/soc/soc-compress.c b/sound/soc/soc-compress.c
14044 index 9e54d8ae6d2cf..da6e40aef7b6e 100644
14045 --- a/sound/soc/soc-compress.c
14046 +++ b/sound/soc/soc-compress.c
14047 @@ -871,6 +871,11 @@ int snd_soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num)
14048 return -EINVAL;
14049 }
14050
14051 + if (!codec_dai) {
14052 + dev_err(rtd->card->dev, "Missing codec\n");
14053 + return -EINVAL;
14054 + }
14055 +
14056 /* check client and interface hw capabilities */
14057 if (snd_soc_dai_stream_valid(codec_dai, SNDRV_PCM_STREAM_PLAYBACK) &&
14058 snd_soc_dai_stream_valid(cpu_dai, SNDRV_PCM_STREAM_PLAYBACK))
14059 diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
14060 index c0e03cc8ea822..093ab32ea2c3a 100644
14061 --- a/sound/soc/soc-core.c
14062 +++ b/sound/soc/soc-core.c
14063 @@ -3362,7 +3362,7 @@ int snd_soc_get_dai_name(struct of_phandle_args *args,
14064 for_each_component(pos) {
14065 component_of_node = soc_component_to_node(pos);
14066
14067 - if (component_of_node != args->np)
14068 + if (component_of_node != args->np || !pos->num_dai)
14069 continue;
14070
14071 ret = snd_soc_component_of_xlate_dai_name(pos, args, dai_name);
14072 diff --git a/sound/soc/soc-generic-dmaengine-pcm.c b/sound/soc/soc-generic-dmaengine-pcm.c
14073 index 5552c66ca6422..ca4b17bd95d14 100644
14074 --- a/sound/soc/soc-generic-dmaengine-pcm.c
14075 +++ b/sound/soc/soc-generic-dmaengine-pcm.c
14076 @@ -91,10 +91,10 @@ static int dmaengine_pcm_hw_params(struct snd_pcm_substream *substream,
14077
14078 memset(&slave_config, 0, sizeof(slave_config));
14079
14080 - if (!pcm->config)
14081 - prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config;
14082 - else
14083 + if (pcm->config && pcm->config->prepare_slave_config)
14084 prepare_slave_config = pcm->config->prepare_slave_config;
14085 + else
14086 + prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config;
14087
14088 if (prepare_slave_config) {
14089 ret = prepare_slave_config(substream, params, &slave_config);
14090 diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
14091 index 21f859e56b700..870b002293535 100644
14092 --- a/sound/soc/soc-topology.c
14093 +++ b/sound/soc/soc-topology.c
14094 @@ -587,7 +587,8 @@ static int soc_tplg_kcontrol_bind_io(struct snd_soc_tplg_ctl_hdr *hdr,
14095
14096 if (le32_to_cpu(hdr->ops.info) == SND_SOC_TPLG_CTL_BYTES
14097 && k->iface & SNDRV_CTL_ELEM_IFACE_MIXER
14098 - && k->access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE
14099 + && (k->access & SNDRV_CTL_ELEM_ACCESS_TLV_READ
14100 + || k->access & SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
14101 && k->access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) {
14102 struct soc_bytes_ext *sbe;
14103 struct snd_soc_tplg_bytes_control *be;
14104 diff --git a/sound/soc/sof/intel/hda-loader.c b/sound/soc/sof/intel/hda-loader.c
14105 index 356bb134ae93a..7573f3f9f0f21 100644
14106 --- a/sound/soc/sof/intel/hda-loader.c
14107 +++ b/sound/soc/sof/intel/hda-loader.c
14108 @@ -50,7 +50,7 @@ static int cl_stream_prepare(struct snd_sof_dev *sdev, unsigned int format,
14109 ret = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV_SG, &pci->dev, size, dmab);
14110 if (ret < 0) {
14111 dev_err(sdev->dev, "error: memory alloc failed: %x\n", ret);
14112 - goto error;
14113 + goto out_put;
14114 }
14115
14116 hstream->period_bytes = 0;/* initialize period_bytes */
14117 @@ -60,16 +60,17 @@ static int cl_stream_prepare(struct snd_sof_dev *sdev, unsigned int format,
14118 ret = hda_dsp_stream_hw_params(sdev, dsp_stream, dmab, NULL);
14119 if (ret < 0) {
14120 dev_err(sdev->dev, "error: hdac prepare failed: %x\n", ret);
14121 - goto error;
14122 + goto out_free;
14123 }
14124
14125 hda_dsp_stream_spib_config(sdev, dsp_stream, HDA_DSP_SPIB_ENABLE, size);
14126
14127 return hstream->stream_tag;
14128
14129 -error:
14130 - hda_dsp_stream_put(sdev, direction, hstream->stream_tag);
14131 +out_free:
14132 snd_dma_free_pages(dmab);
14133 +out_put:
14134 + hda_dsp_stream_put(sdev, direction, hstream->stream_tag);
14135 return ret;
14136 }
14137
14138 diff --git a/sound/soc/ti/davinci-i2s.c b/sound/soc/ti/davinci-i2s.c
14139 index d89b5c928c4d7..b2b2dcdb05d4c 100644
14140 --- a/sound/soc/ti/davinci-i2s.c
14141 +++ b/sound/soc/ti/davinci-i2s.c
14142 @@ -708,7 +708,9 @@ static int davinci_i2s_probe(struct platform_device *pdev)
14143 dev->clk = clk_get(&pdev->dev, NULL);
14144 if (IS_ERR(dev->clk))
14145 return -ENODEV;
14146 - clk_enable(dev->clk);
14147 + ret = clk_enable(dev->clk);
14148 + if (ret)
14149 + goto err_put_clk;
14150
14151 dev->dev = &pdev->dev;
14152 dev_set_drvdata(&pdev->dev, dev);
14153 @@ -730,6 +732,7 @@ err_unregister_component:
14154 snd_soc_unregister_component(&pdev->dev);
14155 err_release_clk:
14156 clk_disable(dev->clk);
14157 +err_put_clk:
14158 clk_put(dev->clk);
14159 return ret;
14160 }
14161 diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c
14162 index 4de1ba9a418d9..6e5d315bab59b 100644
14163 --- a/sound/spi/at73c213.c
14164 +++ b/sound/spi/at73c213.c
14165 @@ -218,7 +218,9 @@ static int snd_at73c213_pcm_open(struct snd_pcm_substream *substream)
14166 runtime->hw = snd_at73c213_playback_hw;
14167 chip->substream = substream;
14168
14169 - clk_enable(chip->ssc->clk);
14170 + err = clk_enable(chip->ssc->clk);
14171 + if (err)
14172 + return err;
14173
14174 return 0;
14175 }
14176 @@ -784,7 +786,9 @@ static int snd_at73c213_chip_init(struct snd_at73c213 *chip)
14177 goto out;
14178
14179 /* Enable DAC master clock. */
14180 - clk_enable(chip->board->dac_clk);
14181 + retval = clk_enable(chip->board->dac_clk);
14182 + if (retval)
14183 + goto out;
14184
14185 /* Initialize at73c213 on SPI bus. */
14186 retval = snd_at73c213_write_reg(chip, DAC_RST, 0x04);
14187 @@ -897,7 +901,9 @@ static int snd_at73c213_dev_init(struct snd_card *card,
14188 chip->card = card;
14189 chip->irq = -1;
14190
14191 - clk_enable(chip->ssc->clk);
14192 + retval = clk_enable(chip->ssc->clk);
14193 + if (retval)
14194 + return retval;
14195
14196 retval = request_irq(irq, snd_at73c213_interrupt, 0, "at73c213", chip);
14197 if (retval) {
14198 @@ -1016,7 +1022,9 @@ static int snd_at73c213_remove(struct spi_device *spi)
14199 int retval;
14200
14201 /* Stop playback. */
14202 - clk_enable(chip->ssc->clk);
14203 + retval = clk_enable(chip->ssc->clk);
14204 + if (retval)
14205 + goto out;
14206 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXDIS));
14207 clk_disable(chip->ssc->clk);
14208
14209 @@ -1096,9 +1104,16 @@ static int snd_at73c213_resume(struct device *dev)
14210 {
14211 struct snd_card *card = dev_get_drvdata(dev);
14212 struct snd_at73c213 *chip = card->private_data;
14213 + int retval;
14214
14215 - clk_enable(chip->board->dac_clk);
14216 - clk_enable(chip->ssc->clk);
14217 + retval = clk_enable(chip->board->dac_clk);
14218 + if (retval)
14219 + return retval;
14220 + retval = clk_enable(chip->ssc->clk);
14221 + if (retval) {
14222 + clk_disable(chip->board->dac_clk);
14223 + return retval;
14224 + }
14225 ssc_writel(chip->ssc->regs, CR, SSC_BIT(CR_TXEN));
14226
14227 return 0;
14228 diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
14229 index 2a261b909dd8d..88392219d425e 100644
14230 --- a/tools/build/feature/Makefile
14231 +++ b/tools/build/feature/Makefile
14232 @@ -204,9 +204,16 @@ strip-libs = $(filter-out -l%,$(1))
14233 PERL_EMBED_LDOPTS = $(shell perl -MExtUtils::Embed -e ldopts 2>/dev/null)
14234 PERL_EMBED_LDFLAGS = $(call strip-libs,$(PERL_EMBED_LDOPTS))
14235 PERL_EMBED_LIBADD = $(call grep-libs,$(PERL_EMBED_LDOPTS))
14236 -PERL_EMBED_CCOPTS = `perl -MExtUtils::Embed -e ccopts 2>/dev/null`
14237 +PERL_EMBED_CCOPTS = $(shell perl -MExtUtils::Embed -e ccopts 2>/dev/null)
14238 FLAGS_PERL_EMBED=$(PERL_EMBED_CCOPTS) $(PERL_EMBED_LDOPTS)
14239
14240 +ifeq ($(CC_NO_CLANG), 0)
14241 + PERL_EMBED_LDOPTS := $(filter-out -specs=%,$(PERL_EMBED_LDOPTS))
14242 + PERL_EMBED_CCOPTS := $(filter-out -flto=auto -ffat-lto-objects, $(PERL_EMBED_CCOPTS))
14243 + PERL_EMBED_CCOPTS := $(filter-out -specs=%,$(PERL_EMBED_CCOPTS))
14244 + FLAGS_PERL_EMBED += -Wno-compound-token-split-by-macro
14245 +endif
14246 +
14247 $(OUTPUT)test-libperl.bin:
14248 $(BUILD) $(FLAGS_PERL_EMBED)
14249
14250 diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
14251 index 63038eb23560b..0bfad86ec960a 100644
14252 --- a/tools/include/uapi/linux/bpf.h
14253 +++ b/tools/include/uapi/linux/bpf.h
14254 @@ -1294,8 +1294,8 @@ union bpf_attr {
14255 * Return
14256 * The return value depends on the result of the test, and can be:
14257 *
14258 - * * 0, if current task belongs to the cgroup2.
14259 - * * 1, if current task does not belong to the cgroup2.
14260 + * * 1, if current task belongs to the cgroup2.
14261 + * * 0, if current task does not belong to the cgroup2.
14262 * * A negative error code, if an error occurred.
14263 *
14264 * int bpf_skb_change_tail(struct sk_buff *skb, u32 len, u64 flags)
14265 diff --git a/tools/lib/bpf/btf_dump.c b/tools/lib/bpf/btf_dump.c
14266 index b2fc452504501..a1176a9e8430a 100644
14267 --- a/tools/lib/bpf/btf_dump.c
14268 +++ b/tools/lib/bpf/btf_dump.c
14269 @@ -1366,6 +1366,11 @@ static const char *btf_dump_resolve_name(struct btf_dump *d, __u32 id,
14270 if (s->name_resolved)
14271 return *cached_name ? *cached_name : orig_name;
14272
14273 + if (btf_is_fwd(t) || (btf_is_enum(t) && btf_vlen(t) == 0)) {
14274 + s->name_resolved = 1;
14275 + return orig_name;
14276 + }
14277 +
14278 dup_cnt = btf_dump_name_dups(d, name_map, orig_name);
14279 if (dup_cnt > 1) {
14280 const size_t max_len = 256;
14281 diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
14282 index 7578af2504549..b94d9afad3f79 100644
14283 --- a/tools/perf/Makefile.config
14284 +++ b/tools/perf/Makefile.config
14285 @@ -706,6 +706,9 @@ else
14286 LDFLAGS += $(PERL_EMBED_LDFLAGS)
14287 EXTLIBS += $(PERL_EMBED_LIBADD)
14288 CFLAGS += -DHAVE_LIBPERL_SUPPORT
14289 + ifeq ($(CC_NO_CLANG), 0)
14290 + CFLAGS += -Wno-compound-token-split-by-macro
14291 + endif
14292 $(call detected,CONFIG_LIBPERL)
14293 endif
14294 endif
14295 diff --git a/tools/perf/perf.c b/tools/perf/perf.c
14296 index 27f94b0bb8747..505e2a2f1872b 100644
14297 --- a/tools/perf/perf.c
14298 +++ b/tools/perf/perf.c
14299 @@ -433,7 +433,7 @@ void pthread__unblock_sigwinch(void)
14300 static int libperf_print(enum libperf_print_level level,
14301 const char *fmt, va_list ap)
14302 {
14303 - return eprintf(level, verbose, fmt, ap);
14304 + return veprintf(level, verbose, fmt, ap);
14305 }
14306
14307 int main(int argc, const char **argv)
14308 diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
14309 index 8ff2c98e90322..01e15b445cb58 100644
14310 --- a/tools/perf/util/session.c
14311 +++ b/tools/perf/util/session.c
14312 @@ -1960,6 +1960,7 @@ prefetch_event(char *buf, u64 head, size_t mmap_size,
14313 bool needs_swap, union perf_event *error)
14314 {
14315 union perf_event *event;
14316 + u16 event_size;
14317
14318 /*
14319 * Ensure we have enough space remaining to read
14320 @@ -1972,15 +1973,23 @@ prefetch_event(char *buf, u64 head, size_t mmap_size,
14321 if (needs_swap)
14322 perf_event_header__bswap(&event->header);
14323
14324 - if (head + event->header.size <= mmap_size)
14325 + event_size = event->header.size;
14326 + if (head + event_size <= mmap_size)
14327 return event;
14328
14329 /* We're not fetching the event so swap back again */
14330 if (needs_swap)
14331 perf_event_header__bswap(&event->header);
14332
14333 - pr_debug("%s: head=%#" PRIx64 " event->header_size=%#x, mmap_size=%#zx:"
14334 - " fuzzed or compressed perf.data?\n",__func__, head, event->header.size, mmap_size);
14335 + /* Check if the event fits into the next mmapped buf. */
14336 + if (event_size <= mmap_size - head % page_size) {
14337 + /* Remap buf and fetch again. */
14338 + return NULL;
14339 + }
14340 +
14341 + /* Invalid input. Event size should never exceed mmap_size. */
14342 + pr_debug("%s: head=%#" PRIx64 " event->header.size=%#x, mmap_size=%#zx:"
14343 + " fuzzed or compressed perf.data?\n", __func__, head, event_size, mmap_size);
14344
14345 return error;
14346 }
14347 diff --git a/tools/testing/selftests/bpf/test_lirc_mode2.sh b/tools/testing/selftests/bpf/test_lirc_mode2.sh
14348 index ec4e15948e406..5252b91f48a18 100755
14349 --- a/tools/testing/selftests/bpf/test_lirc_mode2.sh
14350 +++ b/tools/testing/selftests/bpf/test_lirc_mode2.sh
14351 @@ -3,6 +3,7 @@
14352
14353 # Kselftest framework requirement - SKIP code is 4.
14354 ksft_skip=4
14355 +ret=$ksft_skip
14356
14357 msg="skip all tests:"
14358 if [ $UID != 0 ]; then
14359 @@ -25,7 +26,7 @@ do
14360 fi
14361 done
14362
14363 -if [ -n $LIRCDEV ];
14364 +if [ -n "$LIRCDEV" ];
14365 then
14366 TYPE=lirc_mode2
14367 ./test_lirc_mode2_user $LIRCDEV $INPUTDEV
14368 @@ -36,3 +37,5 @@ then
14369 echo -e ${GREEN}"PASS: $TYPE"${NC}
14370 fi
14371 fi
14372 +
14373 +exit $ret
14374 diff --git a/tools/testing/selftests/bpf/test_lwt_ip_encap.sh b/tools/testing/selftests/bpf/test_lwt_ip_encap.sh
14375 index b497bb85b667f..6c69c42b1d607 100755
14376 --- a/tools/testing/selftests/bpf/test_lwt_ip_encap.sh
14377 +++ b/tools/testing/selftests/bpf/test_lwt_ip_encap.sh
14378 @@ -120,6 +120,14 @@ setup()
14379 ip netns exec ${NS2} sysctl -wq net.ipv4.conf.default.rp_filter=0
14380 ip netns exec ${NS3} sysctl -wq net.ipv4.conf.default.rp_filter=0
14381
14382 + # disable IPv6 DAD because it sometimes takes too long and fails tests
14383 + ip netns exec ${NS1} sysctl -wq net.ipv6.conf.all.accept_dad=0
14384 + ip netns exec ${NS2} sysctl -wq net.ipv6.conf.all.accept_dad=0
14385 + ip netns exec ${NS3} sysctl -wq net.ipv6.conf.all.accept_dad=0
14386 + ip netns exec ${NS1} sysctl -wq net.ipv6.conf.default.accept_dad=0
14387 + ip netns exec ${NS2} sysctl -wq net.ipv6.conf.default.accept_dad=0
14388 + ip netns exec ${NS3} sysctl -wq net.ipv6.conf.default.accept_dad=0
14389 +
14390 ip link add veth1 type veth peer name veth2
14391 ip link add veth3 type veth peer name veth4
14392 ip link add veth5 type veth peer name veth6
14393 @@ -289,7 +297,7 @@ test_ping()
14394 ip netns exec ${NS1} ping -c 1 -W 1 -I veth1 ${IPv4_DST} 2>&1 > /dev/null
14395 RET=$?
14396 elif [ "${PROTO}" == "IPv6" ] ; then
14397 - ip netns exec ${NS1} ping6 -c 1 -W 6 -I veth1 ${IPv6_DST} 2>&1 > /dev/null
14398 + ip netns exec ${NS1} ping6 -c 1 -W 1 -I veth1 ${IPv6_DST} 2>&1 > /dev/null
14399 RET=$?
14400 else
14401 echo " test_ping: unknown PROTO: ${PROTO}"
14402 diff --git a/tools/testing/selftests/cgroup/cgroup_util.c b/tools/testing/selftests/cgroup/cgroup_util.c
14403 index 5e939ff1e3f95..819f3480a6f71 100644
14404 --- a/tools/testing/selftests/cgroup/cgroup_util.c
14405 +++ b/tools/testing/selftests/cgroup/cgroup_util.c
14406 @@ -202,7 +202,7 @@ int cg_find_unified_root(char *root, size_t len)
14407
14408 int cg_create(const char *cgroup)
14409 {
14410 - return mkdir(cgroup, 0644);
14411 + return mkdir(cgroup, 0755);
14412 }
14413
14414 int cg_wait_for_proc_count(const char *cgroup, int count)
14415 diff --git a/tools/testing/selftests/cgroup/test_core.c b/tools/testing/selftests/cgroup/test_core.c
14416 index 79053a4f47838..599234c5e496c 100644
14417 --- a/tools/testing/selftests/cgroup/test_core.c
14418 +++ b/tools/testing/selftests/cgroup/test_core.c
14419 @@ -1,8 +1,13 @@
14420 /* SPDX-License-Identifier: GPL-2.0 */
14421
14422 +#define _GNU_SOURCE
14423 #include <linux/limits.h>
14424 +#include <linux/sched.h>
14425 #include <sys/types.h>
14426 +#include <sys/wait.h>
14427 #include <unistd.h>
14428 +#include <fcntl.h>
14429 +#include <sched.h>
14430 #include <stdio.h>
14431 #include <errno.h>
14432
14433 @@ -354,6 +359,166 @@ cleanup:
14434 return ret;
14435 }
14436
14437 +/*
14438 + * cgroup migration permission check should be performed based on the
14439 + * credentials at the time of open instead of write.
14440 + */
14441 +static int test_cgcore_lesser_euid_open(const char *root)
14442 +{
14443 + const uid_t test_euid = 65534; /* usually nobody, any !root is fine */
14444 + int ret = KSFT_FAIL;
14445 + char *cg_test_a = NULL, *cg_test_b = NULL;
14446 + char *cg_test_a_procs = NULL, *cg_test_b_procs = NULL;
14447 + int cg_test_b_procs_fd = -1;
14448 + uid_t saved_uid;
14449 +
14450 + cg_test_a = cg_name(root, "cg_test_a");
14451 + cg_test_b = cg_name(root, "cg_test_b");
14452 +
14453 + if (!cg_test_a || !cg_test_b)
14454 + goto cleanup;
14455 +
14456 + cg_test_a_procs = cg_name(cg_test_a, "cgroup.procs");
14457 + cg_test_b_procs = cg_name(cg_test_b, "cgroup.procs");
14458 +
14459 + if (!cg_test_a_procs || !cg_test_b_procs)
14460 + goto cleanup;
14461 +
14462 + if (cg_create(cg_test_a) || cg_create(cg_test_b))
14463 + goto cleanup;
14464 +
14465 + if (cg_enter_current(cg_test_a))
14466 + goto cleanup;
14467 +
14468 + if (chown(cg_test_a_procs, test_euid, -1) ||
14469 + chown(cg_test_b_procs, test_euid, -1))
14470 + goto cleanup;
14471 +
14472 + saved_uid = geteuid();
14473 + if (seteuid(test_euid))
14474 + goto cleanup;
14475 +
14476 + cg_test_b_procs_fd = open(cg_test_b_procs, O_RDWR);
14477 +
14478 + if (seteuid(saved_uid))
14479 + goto cleanup;
14480 +
14481 + if (cg_test_b_procs_fd < 0)
14482 + goto cleanup;
14483 +
14484 + if (write(cg_test_b_procs_fd, "0", 1) >= 0 || errno != EACCES)
14485 + goto cleanup;
14486 +
14487 + ret = KSFT_PASS;
14488 +
14489 +cleanup:
14490 + cg_enter_current(root);
14491 + if (cg_test_b_procs_fd >= 0)
14492 + close(cg_test_b_procs_fd);
14493 + if (cg_test_b)
14494 + cg_destroy(cg_test_b);
14495 + if (cg_test_a)
14496 + cg_destroy(cg_test_a);
14497 + free(cg_test_b_procs);
14498 + free(cg_test_a_procs);
14499 + free(cg_test_b);
14500 + free(cg_test_a);
14501 + return ret;
14502 +}
14503 +
14504 +struct lesser_ns_open_thread_arg {
14505 + const char *path;
14506 + int fd;
14507 + int err;
14508 +};
14509 +
14510 +static int lesser_ns_open_thread_fn(void *arg)
14511 +{
14512 + struct lesser_ns_open_thread_arg *targ = arg;
14513 +
14514 + targ->fd = open(targ->path, O_RDWR);
14515 + targ->err = errno;
14516 + return 0;
14517 +}
14518 +
14519 +/*
14520 + * cgroup migration permission check should be performed based on the cgroup
14521 + * namespace at the time of open instead of write.
14522 + */
14523 +static int test_cgcore_lesser_ns_open(const char *root)
14524 +{
14525 + static char stack[65536];
14526 + const uid_t test_euid = 65534; /* usually nobody, any !root is fine */
14527 + int ret = KSFT_FAIL;
14528 + char *cg_test_a = NULL, *cg_test_b = NULL;
14529 + char *cg_test_a_procs = NULL, *cg_test_b_procs = NULL;
14530 + int cg_test_b_procs_fd = -1;
14531 + struct lesser_ns_open_thread_arg targ = { .fd = -1 };
14532 + pid_t pid;
14533 + int status;
14534 +
14535 + cg_test_a = cg_name(root, "cg_test_a");
14536 + cg_test_b = cg_name(root, "cg_test_b");
14537 +
14538 + if (!cg_test_a || !cg_test_b)
14539 + goto cleanup;
14540 +
14541 + cg_test_a_procs = cg_name(cg_test_a, "cgroup.procs");
14542 + cg_test_b_procs = cg_name(cg_test_b, "cgroup.procs");
14543 +
14544 + if (!cg_test_a_procs || !cg_test_b_procs)
14545 + goto cleanup;
14546 +
14547 + if (cg_create(cg_test_a) || cg_create(cg_test_b))
14548 + goto cleanup;
14549 +
14550 + if (cg_enter_current(cg_test_b))
14551 + goto cleanup;
14552 +
14553 + if (chown(cg_test_a_procs, test_euid, -1) ||
14554 + chown(cg_test_b_procs, test_euid, -1))
14555 + goto cleanup;
14556 +
14557 + targ.path = cg_test_b_procs;
14558 + pid = clone(lesser_ns_open_thread_fn, stack + sizeof(stack),
14559 + CLONE_NEWCGROUP | CLONE_FILES | CLONE_VM | SIGCHLD,
14560 + &targ);
14561 + if (pid < 0)
14562 + goto cleanup;
14563 +
14564 + if (waitpid(pid, &status, 0) < 0)
14565 + goto cleanup;
14566 +
14567 + if (!WIFEXITED(status))
14568 + goto cleanup;
14569 +
14570 + cg_test_b_procs_fd = targ.fd;
14571 + if (cg_test_b_procs_fd < 0)
14572 + goto cleanup;
14573 +
14574 + if (cg_enter_current(cg_test_a))
14575 + goto cleanup;
14576 +
14577 + if ((status = write(cg_test_b_procs_fd, "0", 1)) >= 0 || errno != ENOENT)
14578 + goto cleanup;
14579 +
14580 + ret = KSFT_PASS;
14581 +
14582 +cleanup:
14583 + cg_enter_current(root);
14584 + if (cg_test_b_procs_fd >= 0)
14585 + close(cg_test_b_procs_fd);
14586 + if (cg_test_b)
14587 + cg_destroy(cg_test_b);
14588 + if (cg_test_a)
14589 + cg_destroy(cg_test_a);
14590 + free(cg_test_b_procs);
14591 + free(cg_test_a_procs);
14592 + free(cg_test_b);
14593 + free(cg_test_a);
14594 + return ret;
14595 +}
14596 +
14597 #define T(x) { x, #x }
14598 struct corecg_test {
14599 int (*fn)(const char *root);
14600 @@ -366,6 +531,8 @@ struct corecg_test {
14601 T(test_cgcore_parent_becomes_threaded),
14602 T(test_cgcore_invalid_domain),
14603 T(test_cgcore_populated),
14604 + T(test_cgcore_lesser_euid_open),
14605 + T(test_cgcore_lesser_ns_open),
14606 };
14607 #undef T
14608
14609 diff --git a/tools/testing/selftests/net/test_vxlan_under_vrf.sh b/tools/testing/selftests/net/test_vxlan_under_vrf.sh
14610 index 09f9ed92cbe4c..a44b9aca74272 100755
14611 --- a/tools/testing/selftests/net/test_vxlan_under_vrf.sh
14612 +++ b/tools/testing/selftests/net/test_vxlan_under_vrf.sh
14613 @@ -118,11 +118,11 @@ echo "[ OK ]"
14614
14615 # Move the underlay to a non-default VRF
14616 ip -netns hv-1 link set veth0 vrf vrf-underlay
14617 -ip -netns hv-1 link set veth0 down
14618 -ip -netns hv-1 link set veth0 up
14619 +ip -netns hv-1 link set vxlan0 down
14620 +ip -netns hv-1 link set vxlan0 up
14621 ip -netns hv-2 link set veth0 vrf vrf-underlay
14622 -ip -netns hv-2 link set veth0 down
14623 -ip -netns hv-2 link set veth0 up
14624 +ip -netns hv-2 link set vxlan0 down
14625 +ip -netns hv-2 link set vxlan0 up
14626
14627 echo -n "Check VM connectivity through VXLAN (underlay in a VRF) "
14628 ip netns exec vm-1 ping -c 1 -W 1 10.0.0.2 &> /dev/null || (echo "[FAIL]"; false)
14629 diff --git a/tools/testing/selftests/x86/check_cc.sh b/tools/testing/selftests/x86/check_cc.sh
14630 index 3e2089c8cf549..8c669c0d662ee 100755
14631 --- a/tools/testing/selftests/x86/check_cc.sh
14632 +++ b/tools/testing/selftests/x86/check_cc.sh
14633 @@ -7,7 +7,7 @@ CC="$1"
14634 TESTPROG="$2"
14635 shift 2
14636
14637 -if "$CC" -o /dev/null "$TESTPROG" -O0 "$@" 2>/dev/null; then
14638 +if [ -n "$CC" ] && $CC -o /dev/null "$TESTPROG" -O0 "$@" 2>/dev/null; then
14639 echo 1
14640 else
14641 echo 0
14642 diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
14643 index f31976010622f..287444e52ccf8 100644
14644 --- a/virt/kvm/kvm_main.c
14645 +++ b/virt/kvm/kvm_main.c
14646 @@ -115,6 +115,8 @@ EXPORT_SYMBOL_GPL(kvm_debugfs_dir);
14647 static int kvm_debugfs_num_entries;
14648 static const struct file_operations *stat_fops_per_vm[];
14649
14650 +static struct file_operations kvm_chardev_ops;
14651 +
14652 static long kvm_vcpu_ioctl(struct file *file, unsigned int ioctl,
14653 unsigned long arg);
14654 #ifdef CONFIG_KVM_COMPAT
14655 @@ -766,6 +768,16 @@ static struct kvm *kvm_create_vm(unsigned long type)
14656
14657 preempt_notifier_inc();
14658
14659 + /*
14660 + * When the fd passed to this ioctl() is opened it pins the module,
14661 + * but try_module_get() also prevents getting a reference if the module
14662 + * is in MODULE_STATE_GOING (e.g. if someone ran "rmmod --wait").
14663 + */
14664 + if (!try_module_get(kvm_chardev_ops.owner)) {
14665 + r = -ENODEV;
14666 + goto out_err;
14667 + }
14668 +
14669 return kvm;
14670
14671 out_err:
14672 @@ -844,6 +856,7 @@ static void kvm_destroy_vm(struct kvm *kvm)
14673 preempt_notifier_dec();
14674 hardware_disable_all();
14675 mmdrop(mm);
14676 + module_put(kvm_chardev_ops.owner);
14677 }
14678
14679 void kvm_get_kvm(struct kvm *kvm)