Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3635 - (hide annotations) (download)
Mon Oct 24 12:34:12 2022 UTC (20 months ago) by niro
File size: 504642 byte(s)
-sync kernel patches
1 niro 3635 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)