Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.9/0188-4.9.89-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3165 - (hide annotations) (download)
Wed Aug 8 14:17:22 2018 UTC (5 years, 9 months ago) by niro
File size: 236933 byte(s)
-linux-4.9.89
1 niro 3165 diff --git a/Makefile b/Makefile
2     index 1512ebceffda..16dca98900e7 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 88
9     +SUBLEVEL = 89
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     diff --git a/arch/arm/boot/dts/am335x-pepper.dts b/arch/arm/boot/dts/am335x-pepper.dts
14     index 30e2f8770aaf..42b62f54e4b7 100644
15     --- a/arch/arm/boot/dts/am335x-pepper.dts
16     +++ b/arch/arm/boot/dts/am335x-pepper.dts
17     @@ -139,7 +139,7 @@
18     &audio_codec {
19     status = "okay";
20    
21     - gpio-reset = <&gpio1 16 GPIO_ACTIVE_LOW>;
22     + reset-gpios = <&gpio1 16 GPIO_ACTIVE_LOW>;
23     AVDD-supply = <&ldo3_reg>;
24     IOVDD-supply = <&ldo3_reg>;
25     DRVDD-supply = <&ldo3_reg>;
26     diff --git a/arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi b/arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi
27     index 12c981e51134..9a0599f711ff 100644
28     --- a/arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi
29     +++ b/arch/arm/boot/dts/bcm283x-rpi-smsc9512.dtsi
30     @@ -1,6 +1,6 @@
31     / {
32     aliases {
33     - ethernet = &ethernet;
34     + ethernet0 = &ethernet;
35     };
36     };
37    
38     diff --git a/arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi b/arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi
39     index 3f0a56ebcf1f..dc7ae776db5f 100644
40     --- a/arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi
41     +++ b/arch/arm/boot/dts/bcm283x-rpi-smsc9514.dtsi
42     @@ -1,6 +1,6 @@
43     / {
44     aliases {
45     - ethernet = &ethernet;
46     + ethernet0 = &ethernet;
47     };
48     };
49    
50     diff --git a/arch/arm/boot/dts/exynos4412-trats2.dts b/arch/arm/boot/dts/exynos4412-trats2.dts
51     index 41ecd6d465a7..75a60633efff 100644
52     --- a/arch/arm/boot/dts/exynos4412-trats2.dts
53     +++ b/arch/arm/boot/dts/exynos4412-trats2.dts
54     @@ -408,7 +408,7 @@
55     reg = <0>;
56     vdd3-supply = <&lcd_vdd3_reg>;
57     vci-supply = <&ldo25_reg>;
58     - reset-gpios = <&gpy4 5 GPIO_ACTIVE_HIGH>;
59     + reset-gpios = <&gpf2 1 GPIO_ACTIVE_HIGH>;
60     power-on-delay= <50>;
61     reset-delay = <100>;
62     init-delay = <100>;
63     diff --git a/arch/arm/boot/dts/moxart-uc7112lx.dts b/arch/arm/boot/dts/moxart-uc7112lx.dts
64     index 10d088df0c35..4a962a26482d 100644
65     --- a/arch/arm/boot/dts/moxart-uc7112lx.dts
66     +++ b/arch/arm/boot/dts/moxart-uc7112lx.dts
67     @@ -6,7 +6,7 @@
68     */
69    
70     /dts-v1/;
71     -/include/ "moxart.dtsi"
72     +#include "moxart.dtsi"
73    
74     / {
75     model = "MOXA UC-7112-LX";
76     diff --git a/arch/arm/boot/dts/moxart.dtsi b/arch/arm/boot/dts/moxart.dtsi
77     index 1fd27ed65a01..64f2f44235d0 100644
78     --- a/arch/arm/boot/dts/moxart.dtsi
79     +++ b/arch/arm/boot/dts/moxart.dtsi
80     @@ -6,6 +6,7 @@
81     */
82    
83     /include/ "skeleton.dtsi"
84     +#include <dt-bindings/interrupt-controller/irq.h>
85    
86     / {
87     compatible = "moxa,moxart";
88     @@ -36,8 +37,8 @@
89     ranges;
90    
91     intc: interrupt-controller@98800000 {
92     - compatible = "moxa,moxart-ic";
93     - reg = <0x98800000 0x38>;
94     + compatible = "moxa,moxart-ic", "faraday,ftintc010";
95     + reg = <0x98800000 0x100>;
96     interrupt-controller;
97     #interrupt-cells = <2>;
98     interrupt-mask = <0x00080000>;
99     @@ -59,7 +60,7 @@
100     timer: timer@98400000 {
101     compatible = "moxa,moxart-timer";
102     reg = <0x98400000 0x42>;
103     - interrupts = <19 1>;
104     + interrupts = <19 IRQ_TYPE_EDGE_FALLING>;
105     clocks = <&clk_apb>;
106     };
107    
108     @@ -80,7 +81,7 @@
109     dma: dma@90500000 {
110     compatible = "moxa,moxart-dma";
111     reg = <0x90500080 0x40>;
112     - interrupts = <24 0>;
113     + interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
114     #dma-cells = <1>;
115     };
116    
117     @@ -93,7 +94,7 @@
118     sdhci: sdhci@98e00000 {
119     compatible = "moxa,moxart-sdhci";
120     reg = <0x98e00000 0x5C>;
121     - interrupts = <5 0>;
122     + interrupts = <5 IRQ_TYPE_LEVEL_HIGH>;
123     clocks = <&clk_apb>;
124     dmas = <&dma 5>,
125     <&dma 5>;
126     @@ -120,7 +121,7 @@
127     mac0: mac@90900000 {
128     compatible = "moxa,moxart-mac";
129     reg = <0x90900000 0x90>;
130     - interrupts = <25 0>;
131     + interrupts = <25 IRQ_TYPE_LEVEL_HIGH>;
132     phy-handle = <&ethphy0>;
133     phy-mode = "mii";
134     status = "disabled";
135     @@ -129,7 +130,7 @@
136     mac1: mac@92000000 {
137     compatible = "moxa,moxart-mac";
138     reg = <0x92000000 0x90>;
139     - interrupts = <27 0>;
140     + interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
141     phy-handle = <&ethphy1>;
142     phy-mode = "mii";
143     status = "disabled";
144     @@ -138,7 +139,7 @@
145     uart0: uart@98200000 {
146     compatible = "ns16550a";
147     reg = <0x98200000 0x20>;
148     - interrupts = <31 8>;
149     + interrupts = <31 IRQ_TYPE_LEVEL_HIGH>;
150     reg-shift = <2>;
151     reg-io-width = <4>;
152     clock-frequency = <14745600>;
153     diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts
154     index 4d448f145ed1..6003b29c0fc0 100644
155     --- a/arch/arm/boot/dts/omap3-n900.dts
156     +++ b/arch/arm/boot/dts/omap3-n900.dts
157     @@ -510,7 +510,7 @@
158     tlv320aic3x: tlv320aic3x@18 {
159     compatible = "ti,tlv320aic3x";
160     reg = <0x18>;
161     - gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */
162     + reset-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>; /* 60 */
163     ai3x-gpio-func = <
164     0 /* AIC3X_GPIO1_FUNC_DISABLED */
165     5 /* AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT */
166     @@ -527,7 +527,7 @@
167     tlv320aic3x_aux: tlv320aic3x@19 {
168     compatible = "ti,tlv320aic3x";
169     reg = <0x19>;
170     - gpio-reset = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* 60 */
171     + reset-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>; /* 60 */
172    
173     AVDD-supply = <&vmmc2>;
174     DRVDD-supply = <&vmmc2>;
175     diff --git a/arch/arm/boot/dts/r7s72100.dtsi b/arch/arm/boot/dts/r7s72100.dtsi
176     index fb9ef9ca120e..959e3edf367b 100644
177     --- a/arch/arm/boot/dts/r7s72100.dtsi
178     +++ b/arch/arm/boot/dts/r7s72100.dtsi
179     @@ -112,7 +112,7 @@
180     #clock-cells = <1>;
181     compatible = "renesas,r7s72100-mstp-clocks", "renesas,cpg-mstp-clocks";
182     reg = <0xfcfe0430 4>;
183     - clocks = <&p0_clk>;
184     + clocks = <&b_clk>;
185     clock-indices = <R7S72100_CLK_ETHER>;
186     clock-output-names = "ether";
187     };
188     diff --git a/arch/arm/boot/dts/r8a7790.dtsi b/arch/arm/boot/dts/r8a7790.dtsi
189     index b6c6410ca384..262a51205aee 100644
190     --- a/arch/arm/boot/dts/r8a7790.dtsi
191     +++ b/arch/arm/boot/dts/r8a7790.dtsi
192     @@ -1437,8 +1437,11 @@
193     compatible = "renesas,r8a7790-mstp-clocks", "renesas,cpg-mstp-clocks";
194     reg = <0 0xe6150998 0 4>, <0 0xe61509a8 0 4>;
195     clocks = <&p_clk>,
196     - <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>,
197     - <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>,
198     + <&mstp10_clks R8A7790_CLK_SSI_ALL>, <&mstp10_clks R8A7790_CLK_SSI_ALL>,
199     + <&mstp10_clks R8A7790_CLK_SSI_ALL>, <&mstp10_clks R8A7790_CLK_SSI_ALL>,
200     + <&mstp10_clks R8A7790_CLK_SSI_ALL>, <&mstp10_clks R8A7790_CLK_SSI_ALL>,
201     + <&mstp10_clks R8A7790_CLK_SSI_ALL>, <&mstp10_clks R8A7790_CLK_SSI_ALL>,
202     + <&mstp10_clks R8A7790_CLK_SSI_ALL>, <&mstp10_clks R8A7790_CLK_SSI_ALL>,
203     <&p_clk>,
204     <&mstp10_clks R8A7790_CLK_SCU_ALL>, <&mstp10_clks R8A7790_CLK_SCU_ALL>,
205     <&mstp10_clks R8A7790_CLK_SCU_ALL>, <&mstp10_clks R8A7790_CLK_SCU_ALL>,
206     diff --git a/arch/arm/boot/dts/r8a7791-koelsch.dts b/arch/arm/boot/dts/r8a7791-koelsch.dts
207     index f8a7d090fd01..12841e9bab98 100644
208     --- a/arch/arm/boot/dts/r8a7791-koelsch.dts
209     +++ b/arch/arm/boot/dts/r8a7791-koelsch.dts
210     @@ -279,7 +279,7 @@
211     x2_clk: x2-clock {
212     compatible = "fixed-clock";
213     #clock-cells = <0>;
214     - clock-frequency = <148500000>;
215     + clock-frequency = <74250000>;
216     };
217    
218     x13_clk: x13-clock {
219     diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi
220     index 162b55c665a3..59405ebdce01 100644
221     --- a/arch/arm/boot/dts/r8a7791.dtsi
222     +++ b/arch/arm/boot/dts/r8a7791.dtsi
223     @@ -74,9 +74,8 @@
224     next-level-cache = <&L2_CA15>;
225     };
226    
227     - L2_CA15: cache-controller@0 {
228     + L2_CA15: cache-controller-0 {
229     compatible = "cache";
230     - reg = <0>;
231     power-domains = <&sysc R8A7791_PD_CA15_SCU>;
232     cache-unified;
233     cache-level = <2>;
234     @@ -1438,8 +1437,11 @@
235     compatible = "renesas,r8a7791-mstp-clocks", "renesas,cpg-mstp-clocks";
236     reg = <0 0xe6150998 0 4>, <0 0xe61509a8 0 4>;
237     clocks = <&p_clk>,
238     - <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>,
239     - <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>,
240     + <&mstp10_clks R8A7791_CLK_SSI_ALL>, <&mstp10_clks R8A7791_CLK_SSI_ALL>,
241     + <&mstp10_clks R8A7791_CLK_SSI_ALL>, <&mstp10_clks R8A7791_CLK_SSI_ALL>,
242     + <&mstp10_clks R8A7791_CLK_SSI_ALL>, <&mstp10_clks R8A7791_CLK_SSI_ALL>,
243     + <&mstp10_clks R8A7791_CLK_SSI_ALL>, <&mstp10_clks R8A7791_CLK_SSI_ALL>,
244     + <&mstp10_clks R8A7791_CLK_SSI_ALL>, <&mstp10_clks R8A7791_CLK_SSI_ALL>,
245     <&p_clk>,
246     <&mstp10_clks R8A7791_CLK_SCU_ALL>, <&mstp10_clks R8A7791_CLK_SCU_ALL>,
247     <&mstp10_clks R8A7791_CLK_SCU_ALL>, <&mstp10_clks R8A7791_CLK_SCU_ALL>,
248     diff --git a/arch/arm/boot/dts/r8a7792.dtsi b/arch/arm/boot/dts/r8a7792.dtsi
249     index 713141d38b3e..0b50c6766867 100644
250     --- a/arch/arm/boot/dts/r8a7792.dtsi
251     +++ b/arch/arm/boot/dts/r8a7792.dtsi
252     @@ -58,9 +58,8 @@
253     next-level-cache = <&L2_CA15>;
254     };
255    
256     - L2_CA15: cache-controller@0 {
257     + L2_CA15: cache-controller-0 {
258     compatible = "cache";
259     - reg = <0>;
260     cache-unified;
261     cache-level = <2>;
262     power-domains = <&sysc R8A7792_PD_CA15_SCU>;
263     diff --git a/arch/arm/boot/dts/r8a7793.dtsi b/arch/arm/boot/dts/r8a7793.dtsi
264     index 8d02aacf2892..e9625cb3bbaa 100644
265     --- a/arch/arm/boot/dts/r8a7793.dtsi
266     +++ b/arch/arm/boot/dts/r8a7793.dtsi
267     @@ -65,9 +65,8 @@
268     power-domains = <&sysc R8A7793_PD_CA15_CPU1>;
269     };
270    
271     - L2_CA15: cache-controller@0 {
272     + L2_CA15: cache-controller-0 {
273     compatible = "cache";
274     - reg = <0>;
275     power-domains = <&sysc R8A7793_PD_CA15_SCU>;
276     cache-unified;
277     cache-level = <2>;
278     @@ -1235,8 +1234,11 @@
279     compatible = "renesas,r8a7793-mstp-clocks", "renesas,cpg-mstp-clocks";
280     reg = <0 0xe6150998 0 4>, <0 0xe61509a8 0 4>;
281     clocks = <&p_clk>,
282     - <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>,
283     - <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>,
284     + <&mstp10_clks R8A7793_CLK_SSI_ALL>, <&mstp10_clks R8A7793_CLK_SSI_ALL>,
285     + <&mstp10_clks R8A7793_CLK_SSI_ALL>, <&mstp10_clks R8A7793_CLK_SSI_ALL>,
286     + <&mstp10_clks R8A7793_CLK_SSI_ALL>, <&mstp10_clks R8A7793_CLK_SSI_ALL>,
287     + <&mstp10_clks R8A7793_CLK_SSI_ALL>, <&mstp10_clks R8A7793_CLK_SSI_ALL>,
288     + <&mstp10_clks R8A7793_CLK_SSI_ALL>, <&mstp10_clks R8A7793_CLK_SSI_ALL>,
289     <&p_clk>,
290     <&mstp10_clks R8A7793_CLK_SCU_ALL>, <&mstp10_clks R8A7793_CLK_SCU_ALL>,
291     <&mstp10_clks R8A7793_CLK_SCU_ALL>, <&mstp10_clks R8A7793_CLK_SCU_ALL>,
292     diff --git a/arch/arm/boot/dts/r8a7794-silk.dts b/arch/arm/boot/dts/r8a7794-silk.dts
293     index cf880ac06f4b..8874451fb914 100644
294     --- a/arch/arm/boot/dts/r8a7794-silk.dts
295     +++ b/arch/arm/boot/dts/r8a7794-silk.dts
296     @@ -425,7 +425,7 @@
297     status = "okay";
298    
299     clocks = <&mstp7_clks R8A7794_CLK_DU0>,
300     - <&mstp7_clks R8A7794_CLK_DU0>,
301     + <&mstp7_clks R8A7794_CLK_DU1>,
302     <&x2_clk>, <&x3_clk>;
303     clock-names = "du.0", "du.1", "dclkin.0", "dclkin.1";
304    
305     diff --git a/arch/arm/boot/dts/r8a7794.dtsi b/arch/arm/boot/dts/r8a7794.dtsi
306     index 7e860d3737ff..d8f4ca85ed3f 100644
307     --- a/arch/arm/boot/dts/r8a7794.dtsi
308     +++ b/arch/arm/boot/dts/r8a7794.dtsi
309     @@ -56,9 +56,8 @@
310     next-level-cache = <&L2_CA7>;
311     };
312    
313     - L2_CA7: cache-controller@0 {
314     + L2_CA7: cache-controller-0 {
315     compatible = "cache";
316     - reg = <0>;
317     power-domains = <&sysc R8A7794_PD_CA7_SCU>;
318     cache-unified;
319     cache-level = <2>;
320     @@ -917,7 +916,7 @@
321     interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
322     <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>;
323     clocks = <&mstp7_clks R8A7794_CLK_DU0>,
324     - <&mstp7_clks R8A7794_CLK_DU0>;
325     + <&mstp7_clks R8A7794_CLK_DU1>;
326     clock-names = "du.0", "du.1";
327     status = "disabled";
328    
329     @@ -1262,19 +1261,21 @@
330     clocks = <&mp_clk>, <&hp_clk>,
331     <&zs_clk>, <&p_clk>, <&p_clk>, <&zs_clk>,
332     <&zs_clk>, <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>,
333     - <&zx_clk>;
334     + <&zx_clk>, <&zx_clk>;
335     #clock-cells = <1>;
336     clock-indices = <
337     R8A7794_CLK_EHCI R8A7794_CLK_HSUSB
338     R8A7794_CLK_HSCIF2 R8A7794_CLK_SCIF5
339     R8A7794_CLK_SCIF4 R8A7794_CLK_HSCIF1 R8A7794_CLK_HSCIF0
340     R8A7794_CLK_SCIF3 R8A7794_CLK_SCIF2 R8A7794_CLK_SCIF1
341     - R8A7794_CLK_SCIF0 R8A7794_CLK_DU0
342     + R8A7794_CLK_SCIF0
343     + R8A7794_CLK_DU1 R8A7794_CLK_DU0
344     >;
345     clock-output-names =
346     "ehci", "hsusb",
347     "hscif2", "scif5", "scif4", "hscif1", "hscif0",
348     - "scif3", "scif2", "scif1", "scif0", "du0";
349     + "scif3", "scif2", "scif1", "scif0",
350     + "du1", "du0";
351     };
352     mstp8_clks: mstp8_clks@e6150990 {
353     compatible = "renesas,r8a7794-mstp-clocks", "renesas,cpg-mstp-clocks";
354     diff --git a/arch/arm/configs/bcm2835_defconfig b/arch/arm/configs/bcm2835_defconfig
355     index 79de828e49ad..e32b0550a338 100644
356     --- a/arch/arm/configs/bcm2835_defconfig
357     +++ b/arch/arm/configs/bcm2835_defconfig
358     @@ -1,6 +1,5 @@
359     # CONFIG_LOCALVERSION_AUTO is not set
360     CONFIG_SYSVIPC=y
361     -CONFIG_FHANDLE=y
362     CONFIG_NO_HZ=y
363     CONFIG_HIGH_RES_TIMERS=y
364     CONFIG_BSD_PROCESS_ACCT=y
365     @@ -32,6 +31,7 @@ CONFIG_PREEMPT_VOLUNTARY=y
366     CONFIG_AEABI=y
367     CONFIG_KSM=y
368     CONFIG_CLEANCACHE=y
369     +CONFIG_CMA=y
370     CONFIG_SECCOMP=y
371     CONFIG_KEXEC=y
372     CONFIG_CRASH_DUMP=y
373     @@ -52,6 +52,7 @@ CONFIG_MAC80211=y
374     CONFIG_DEVTMPFS=y
375     CONFIG_DEVTMPFS_MOUNT=y
376     # CONFIG_STANDALONE is not set
377     +CONFIG_DMA_CMA=y
378     CONFIG_SCSI=y
379     CONFIG_BLK_DEV_SD=y
380     CONFIG_SCSI_CONSTANTS=y
381     @@ -62,7 +63,6 @@ CONFIG_USB_NET_SMSC95XX=y
382     CONFIG_ZD1211RW=y
383     CONFIG_INPUT_EVDEV=y
384     # CONFIG_LEGACY_PTYS is not set
385     -# CONFIG_DEVKMEM is not set
386     CONFIG_SERIAL_AMBA_PL011=y
387     CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
388     CONFIG_TTY_PRINTK=y
389     diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
390     index a0e66d8200c5..403db76e3497 100644
391     --- a/arch/arm/mach-bcm/Kconfig
392     +++ b/arch/arm/mach-bcm/Kconfig
393     @@ -199,6 +199,7 @@ config ARCH_BRCMSTB
394     select BRCMSTB_L2_IRQ
395     select BCM7120_L2_IRQ
396     select ARCH_DMA_ADDR_T_64BIT if ARM_LPAE
397     + select ZONE_DMA if ARM_LPAE
398     select SOC_BRCMSTB
399     select SOC_BUS
400     help
401     diff --git a/arch/arm64/boot/dts/renesas/r8a7796.dtsi b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
402     index 9217da983525..53d03cb144e4 100644
403     --- a/arch/arm64/boot/dts/renesas/r8a7796.dtsi
404     +++ b/arch/arm64/boot/dts/renesas/r8a7796.dtsi
405     @@ -36,9 +36,8 @@
406     enable-method = "psci";
407     };
408    
409     - L2_CA57: cache-controller@0 {
410     + L2_CA57: cache-controller-0 {
411     compatible = "cache";
412     - reg = <0>;
413     power-domains = <&sysc R8A7796_PD_CA57_SCU>;
414     cache-unified;
415     cache-level = <2>;
416     diff --git a/arch/mips/kernel/mips-r2-to-r6-emul.c b/arch/mips/kernel/mips-r2-to-r6-emul.c
417     index d8227f289d7f..9a4aed652736 100644
418     --- a/arch/mips/kernel/mips-r2-to-r6-emul.c
419     +++ b/arch/mips/kernel/mips-r2-to-r6-emul.c
420     @@ -1096,10 +1096,20 @@ int mipsr2_decoder(struct pt_regs *regs, u32 inst, unsigned long *fcr31)
421     }
422     break;
423    
424     - case beql_op:
425     - case bnel_op:
426     case blezl_op:
427     case bgtzl_op:
428     + /*
429     + * For BLEZL and BGTZL, rt field must be set to 0. If this
430     + * is not the case, this may be an encoding of a MIPS R6
431     + * instruction, so return to CPU execution if this occurs
432     + */
433     + if (MIPSInst_RT(inst)) {
434     + err = SIGILL;
435     + break;
436     + }
437     + /* fall through */
438     + case beql_op:
439     + case bnel_op:
440     if (delay_slot(regs)) {
441     err = SIGILL;
442     break;
443     @@ -2329,6 +2339,8 @@ static int mipsr2_stats_clear_show(struct seq_file *s, void *unused)
444     __this_cpu_write((mipsr2bremustats).bgezl, 0);
445     __this_cpu_write((mipsr2bremustats).bltzll, 0);
446     __this_cpu_write((mipsr2bremustats).bgezll, 0);
447     + __this_cpu_write((mipsr2bremustats).bltzall, 0);
448     + __this_cpu_write((mipsr2bremustats).bgezall, 0);
449     __this_cpu_write((mipsr2bremustats).bltzal, 0);
450     __this_cpu_write((mipsr2bremustats).bgezal, 0);
451     __this_cpu_write((mipsr2bremustats).beql, 0);
452     diff --git a/arch/mips/net/bpf_jit.c b/arch/mips/net/bpf_jit.c
453     index 49a2e2226fee..248603739198 100644
454     --- a/arch/mips/net/bpf_jit.c
455     +++ b/arch/mips/net/bpf_jit.c
456     @@ -526,7 +526,8 @@ static void save_bpf_jit_regs(struct jit_ctx *ctx, unsigned offset)
457     u32 sflags, tmp_flags;
458    
459     /* Adjust the stack pointer */
460     - emit_stack_offset(-align_sp(offset), ctx);
461     + if (offset)
462     + emit_stack_offset(-align_sp(offset), ctx);
463    
464     tmp_flags = sflags = ctx->flags >> SEEN_SREG_SFT;
465     /* sflags is essentially a bitmap */
466     @@ -578,7 +579,8 @@ static void restore_bpf_jit_regs(struct jit_ctx *ctx,
467     emit_load_stack_reg(r_ra, r_sp, real_off, ctx);
468    
469     /* Restore the sp and discard the scrach memory */
470     - emit_stack_offset(align_sp(offset), ctx);
471     + if (offset)
472     + emit_stack_offset(align_sp(offset), ctx);
473     }
474    
475     static unsigned int get_stack_depth(struct jit_ctx *ctx)
476     @@ -625,8 +627,14 @@ static void build_prologue(struct jit_ctx *ctx)
477     if (ctx->flags & SEEN_X)
478     emit_jit_reg_move(r_X, r_zero, ctx);
479    
480     - /* Do not leak kernel data to userspace */
481     - if (bpf_needs_clear_a(&ctx->skf->insns[0]))
482     + /*
483     + * Do not leak kernel data to userspace, we only need to clear
484     + * r_A if it is ever used. In fact if it is never used, we
485     + * will not save/restore it, so clearing it in this case would
486     + * corrupt the state of the caller.
487     + */
488     + if (bpf_needs_clear_a(&ctx->skf->insns[0]) &&
489     + (ctx->flags & SEEN_A))
490     emit_jit_reg_move(r_A, r_zero, ctx);
491     }
492    
493     diff --git a/arch/mips/net/bpf_jit_asm.S b/arch/mips/net/bpf_jit_asm.S
494     index 5d2e0c8d29c0..88a2075305d1 100644
495     --- a/arch/mips/net/bpf_jit_asm.S
496     +++ b/arch/mips/net/bpf_jit_asm.S
497     @@ -90,18 +90,14 @@ FEXPORT(sk_load_half_positive)
498     is_offset_in_header(2, half)
499     /* Offset within header boundaries */
500     PTR_ADDU t1, $r_skb_data, offset
501     - .set reorder
502     - lh $r_A, 0(t1)
503     - .set noreorder
504     + lhu $r_A, 0(t1)
505     #ifdef CONFIG_CPU_LITTLE_ENDIAN
506     # if defined(__mips_isa_rev) && (__mips_isa_rev >= 2)
507     - wsbh t0, $r_A
508     - seh $r_A, t0
509     + wsbh $r_A, $r_A
510     # else
511     - sll t0, $r_A, 24
512     - andi t1, $r_A, 0xff00
513     - sra t0, t0, 16
514     - srl t1, t1, 8
515     + sll t0, $r_A, 8
516     + srl t1, $r_A, 8
517     + andi t0, t0, 0xff00
518     or $r_A, t0, t1
519     # endif
520     #endif
521     @@ -115,7 +111,7 @@ FEXPORT(sk_load_byte_positive)
522     is_offset_in_header(1, byte)
523     /* Offset within header boundaries */
524     PTR_ADDU t1, $r_skb_data, offset
525     - lb $r_A, 0(t1)
526     + lbu $r_A, 0(t1)
527     jr $r_ra
528     move $r_ret, zero
529     END(sk_load_byte)
530     @@ -139,6 +135,11 @@ FEXPORT(sk_load_byte_positive)
531     * (void *to) is returned in r_s0
532     *
533     */
534     +#ifdef CONFIG_CPU_LITTLE_ENDIAN
535     +#define DS_OFFSET(SIZE) (4 * SZREG)
536     +#else
537     +#define DS_OFFSET(SIZE) ((4 * SZREG) + (4 - SIZE))
538     +#endif
539     #define bpf_slow_path_common(SIZE) \
540     /* Quick check. Are we within reasonable boundaries? */ \
541     LONG_ADDIU $r_s1, $r_skb_len, -SIZE; \
542     @@ -150,7 +151,7 @@ FEXPORT(sk_load_byte_positive)
543     PTR_LA t0, skb_copy_bits; \
544     PTR_S $r_ra, (5 * SZREG)($r_sp); \
545     /* Assign low slot to a2 */ \
546     - move a2, $r_sp; \
547     + PTR_ADDIU a2, $r_sp, DS_OFFSET(SIZE); \
548     jalr t0; \
549     /* Reset our destination slot (DS but it's ok) */ \
550     INT_S zero, (4 * SZREG)($r_sp); \
551     diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
552     index 025afe5f17a7..8a0822125f8b 100644
553     --- a/arch/parisc/kernel/cache.c
554     +++ b/arch/parisc/kernel/cache.c
555     @@ -542,7 +542,8 @@ void flush_cache_mm(struct mm_struct *mm)
556     rp3440, etc. So, avoid it if the mm isn't too big. */
557     if ((!IS_ENABLED(CONFIG_SMP) || !arch_irqs_disabled()) &&
558     mm_total_size(mm) >= parisc_cache_flush_threshold) {
559     - flush_tlb_all();
560     + if (mm->context)
561     + flush_tlb_all();
562     flush_cache_all();
563     return;
564     }
565     @@ -570,6 +571,8 @@ void flush_cache_mm(struct mm_struct *mm)
566     pfn = pte_pfn(*ptep);
567     if (!pfn_valid(pfn))
568     continue;
569     + if (unlikely(mm->context))
570     + flush_tlb_page(vma, addr);
571     __flush_cache_page(vma, addr, PFN_PHYS(pfn));
572     }
573     }
574     @@ -596,26 +599,46 @@ flush_user_icache_range(unsigned long start, unsigned long end)
575     void flush_cache_range(struct vm_area_struct *vma,
576     unsigned long start, unsigned long end)
577     {
578     + pgd_t *pgd;
579     + unsigned long addr;
580     +
581     if ((!IS_ENABLED(CONFIG_SMP) || !arch_irqs_disabled()) &&
582     end - start >= parisc_cache_flush_threshold) {
583     - flush_tlb_range(vma, start, end);
584     + if (vma->vm_mm->context)
585     + flush_tlb_range(vma, start, end);
586     flush_cache_all();
587     return;
588     }
589    
590     - flush_user_dcache_range_asm(start, end);
591     - if (vma->vm_flags & VM_EXEC)
592     - flush_user_icache_range_asm(start, end);
593     - flush_tlb_range(vma, start, end);
594     + if (vma->vm_mm->context == mfsp(3)) {
595     + flush_user_dcache_range_asm(start, end);
596     + if (vma->vm_flags & VM_EXEC)
597     + flush_user_icache_range_asm(start, end);
598     + flush_tlb_range(vma, start, end);
599     + return;
600     + }
601     +
602     + pgd = vma->vm_mm->pgd;
603     + for (addr = vma->vm_start; addr < vma->vm_end; addr += PAGE_SIZE) {
604     + unsigned long pfn;
605     + pte_t *ptep = get_ptep(pgd, addr);
606     + if (!ptep)
607     + continue;
608     + pfn = pte_pfn(*ptep);
609     + if (pfn_valid(pfn)) {
610     + if (unlikely(vma->vm_mm->context))
611     + flush_tlb_page(vma, addr);
612     + __flush_cache_page(vma, addr, PFN_PHYS(pfn));
613     + }
614     + }
615     }
616    
617     void
618     flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long pfn)
619     {
620     - BUG_ON(!vma->vm_mm->context);
621     -
622     if (pfn_valid(pfn)) {
623     - flush_tlb_page(vma, vmaddr);
624     + if (likely(vma->vm_mm->context))
625     + flush_tlb_page(vma, vmaddr);
626     __flush_cache_page(vma, vmaddr, PFN_PHYS(pfn));
627     }
628     }
629     diff --git a/arch/powerpc/include/asm/code-patching.h b/arch/powerpc/include/asm/code-patching.h
630     index 2015b072422c..b4ab1f497335 100644
631     --- a/arch/powerpc/include/asm/code-patching.h
632     +++ b/arch/powerpc/include/asm/code-patching.h
633     @@ -30,6 +30,7 @@ int patch_branch(unsigned int *addr, unsigned long target, int flags);
634     int patch_instruction(unsigned int *addr, unsigned int instr);
635    
636     int instr_is_relative_branch(unsigned int instr);
637     +int instr_is_relative_link_branch(unsigned int instr);
638     int instr_is_branch_to_addr(const unsigned int *instr, unsigned long addr);
639     unsigned long branch_target(const unsigned int *instr);
640     unsigned int translate_branch(const unsigned int *dest,
641     diff --git a/arch/powerpc/kernel/module_64.c b/arch/powerpc/kernel/module_64.c
642     index 183368e008cf..99407cf12ad5 100644
643     --- a/arch/powerpc/kernel/module_64.c
644     +++ b/arch/powerpc/kernel/module_64.c
645     @@ -494,7 +494,17 @@ static bool is_early_mcount_callsite(u32 *instruction)
646     restore r2. */
647     static int restore_r2(u32 *instruction, struct module *me)
648     {
649     - if (is_early_mcount_callsite(instruction - 1))
650     + u32 *prev_insn = instruction - 1;
651     +
652     + if (is_early_mcount_callsite(prev_insn))
653     + return 1;
654     +
655     + /*
656     + * Make sure the branch isn't a sibling call. Sibling calls aren't
657     + * "link" branches and they don't return, so they don't need the r2
658     + * restore afterwards.
659     + */
660     + if (!instr_is_relative_link_branch(*prev_insn))
661     return 1;
662    
663     if (*instruction != PPC_INST_NOP) {
664     diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c
665     index d5edbeb8eb82..753d591f1b52 100644
666     --- a/arch/powerpc/lib/code-patching.c
667     +++ b/arch/powerpc/lib/code-patching.c
668     @@ -95,6 +95,11 @@ int instr_is_relative_branch(unsigned int instr)
669     return instr_is_branch_iform(instr) || instr_is_branch_bform(instr);
670     }
671    
672     +int instr_is_relative_link_branch(unsigned int instr)
673     +{
674     + return instr_is_relative_branch(instr) && (instr & BRANCH_SET_LINK);
675     +}
676     +
677     static unsigned long branch_iform_target(const unsigned int *instr)
678     {
679     signed long imm;
680     diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
681     index d0b137d96df1..9376e8e53bfa 100644
682     --- a/arch/powerpc/mm/fault.c
683     +++ b/arch/powerpc/mm/fault.c
684     @@ -294,7 +294,7 @@ int do_page_fault(struct pt_regs *regs, unsigned long address,
685     * can result in fault, which will cause a deadlock when called with
686     * mmap_sem held
687     */
688     - if (user_mode(regs))
689     + if (!is_exec && user_mode(regs))
690     store_update_sp = store_updates_sp(regs);
691    
692     if (user_mode(regs))
693     diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
694     index a5d3ecdabc44..035dfb65df4b 100644
695     --- a/arch/powerpc/mm/hugetlbpage.c
696     +++ b/arch/powerpc/mm/hugetlbpage.c
697     @@ -765,6 +765,24 @@ static int __init add_huge_page_size(unsigned long long size)
698     if ((mmu_psize = shift_to_mmu_psize(shift)) < 0)
699     return -EINVAL;
700    
701     +#ifdef CONFIG_PPC_BOOK3S_64
702     + /*
703     + * We need to make sure that for different page sizes reported by
704     + * firmware we only add hugetlb support for page sizes that can be
705     + * supported by linux page table layout.
706     + * For now we have
707     + * Radix: 2M
708     + * Hash: 16M and 16G
709     + */
710     + if (radix_enabled()) {
711     + if (mmu_psize != MMU_PAGE_2M)
712     + return -EINVAL;
713     + } else {
714     + if (mmu_psize != MMU_PAGE_16M && mmu_psize != MMU_PAGE_16G)
715     + return -EINVAL;
716     + }
717     +#endif
718     +
719     BUG_ON(mmu_psize_defs[mmu_psize].shift != shift);
720    
721     /* Return if huge page size has already been setup */
722     diff --git a/arch/powerpc/mm/tlb_nohash.c b/arch/powerpc/mm/tlb_nohash.c
723     index 050badc0ebd3..0b50019505a5 100644
724     --- a/arch/powerpc/mm/tlb_nohash.c
725     +++ b/arch/powerpc/mm/tlb_nohash.c
726     @@ -751,7 +751,7 @@ void setup_initial_memory_limit(phys_addr_t first_memblock_base,
727     * avoid going over total available memory just in case...
728     */
729     #ifdef CONFIG_PPC_FSL_BOOK3E
730     - if (mmu_has_feature(MMU_FTR_TYPE_FSL_E)) {
731     + if (early_mmu_has_feature(MMU_FTR_TYPE_FSL_E)) {
732     unsigned long linear_sz;
733     unsigned int num_cams;
734    
735     diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c
736     index 29d87444a655..62578989c74d 100644
737     --- a/arch/s390/kernel/early.c
738     +++ b/arch/s390/kernel/early.c
739     @@ -372,7 +372,7 @@ static int __init topology_setup(char *str)
740    
741     rc = kstrtobool(str, &enabled);
742     if (!rc && !enabled)
743     - S390_lowcore.machine_flags &= ~MACHINE_HAS_TOPOLOGY;
744     + S390_lowcore.machine_flags &= ~MACHINE_FLAG_TOPOLOGY;
745     return rc;
746     }
747     early_param("topology", topology_setup);
748     diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
749     index ed7a1d2c4235..a2485311164b 100644
750     --- a/arch/x86/include/asm/cpufeatures.h
751     +++ b/arch/x86/include/asm/cpufeatures.h
752     @@ -302,6 +302,7 @@
753     /* Intel-defined CPU features, CPUID level 0x00000007:0 (EDX), word 18 */
754     #define X86_FEATURE_AVX512_4VNNIW (18*32+ 2) /* AVX-512 Neural Network Instructions */
755     #define X86_FEATURE_AVX512_4FMAPS (18*32+ 3) /* AVX-512 Multiply Accumulation Single precision */
756     +#define X86_FEATURE_PCONFIG (18*32+18) /* Intel PCONFIG */
757     #define X86_FEATURE_SPEC_CTRL (18*32+26) /* "" Speculation Control (IBRS + IBPB) */
758     #define X86_FEATURE_INTEL_STIBP (18*32+27) /* "" Single Thread Indirect Branch Predictors */
759     #define X86_FEATURE_ARCH_CAPABILITIES (18*32+29) /* IA32_ARCH_CAPABILITIES MSR (Intel) */
760     diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
761     index d0dabeae0505..f928ad9b143f 100644
762     --- a/arch/x86/include/asm/nospec-branch.h
763     +++ b/arch/x86/include/asm/nospec-branch.h
764     @@ -183,7 +183,10 @@
765     * otherwise we'll run out of registers. We don't care about CET
766     * here, anyway.
767     */
768     -# define CALL_NOSPEC ALTERNATIVE("call *%[thunk_target]\n", \
769     +# define CALL_NOSPEC \
770     + ALTERNATIVE( \
771     + ANNOTATE_RETPOLINE_SAFE \
772     + "call *%[thunk_target]\n", \
773     " jmp 904f;\n" \
774     " .align 16\n" \
775     "901: call 903f;\n" \
776     diff --git a/arch/x86/include/asm/reboot.h b/arch/x86/include/asm/reboot.h
777     index 2cb1cc253d51..fc62ba8dce93 100644
778     --- a/arch/x86/include/asm/reboot.h
779     +++ b/arch/x86/include/asm/reboot.h
780     @@ -15,6 +15,7 @@ struct machine_ops {
781     };
782    
783     extern struct machine_ops machine_ops;
784     +extern int crashing_cpu;
785    
786     void native_machine_crash_shutdown(struct pt_regs *regs);
787     void native_machine_shutdown(void);
788     diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
789     index 768042530af2..8fb1d6522f8e 100644
790     --- a/arch/x86/kernel/cpu/intel.c
791     +++ b/arch/x86/kernel/cpu/intel.c
792     @@ -64,7 +64,7 @@ void check_mpx_erratum(struct cpuinfo_x86 *c)
793     /*
794     * Early microcode releases for the Spectre v2 mitigation were broken.
795     * Information taken from;
796     - * - https://newsroom.intel.com/wp-content/uploads/sites/11/2018/01/microcode-update-guidance.pdf
797     + * - https://newsroom.intel.com/wp-content/uploads/sites/11/2018/03/microcode-update-guidance.pdf
798     * - https://kb.vmware.com/s/article/52345
799     * - Microcode revisions observed in the wild
800     * - Release note from 20180108 microcode release
801     @@ -82,7 +82,6 @@ static const struct sku_microcode spectre_bad_microcodes[] = {
802     { INTEL_FAM6_KABYLAKE_MOBILE, 0x09, 0x80 },
803     { INTEL_FAM6_SKYLAKE_X, 0x03, 0x0100013e },
804     { INTEL_FAM6_SKYLAKE_X, 0x04, 0x0200003c },
805     - { INTEL_FAM6_SKYLAKE_DESKTOP, 0x03, 0xc2 },
806     { INTEL_FAM6_BROADWELL_CORE, 0x04, 0x28 },
807     { INTEL_FAM6_BROADWELL_GT3E, 0x01, 0x1b },
808     { INTEL_FAM6_BROADWELL_XEON_D, 0x02, 0x14 },
809     diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
810     index 684d9fd191e0..7bbd50fa72ad 100644
811     --- a/arch/x86/kernel/cpu/mcheck/mce.c
812     +++ b/arch/x86/kernel/cpu/mcheck/mce.c
813     @@ -48,6 +48,7 @@
814     #include <asm/tlbflush.h>
815     #include <asm/mce.h>
816     #include <asm/msr.h>
817     +#include <asm/reboot.h>
818    
819     #include "mce-internal.h"
820    
821     @@ -1081,9 +1082,22 @@ void do_machine_check(struct pt_regs *regs, long error_code)
822     * on Intel.
823     */
824     int lmce = 1;
825     + int cpu = smp_processor_id();
826    
827     - /* If this CPU is offline, just bail out. */
828     - if (cpu_is_offline(smp_processor_id())) {
829     + /*
830     + * Cases where we avoid rendezvous handler timeout:
831     + * 1) If this CPU is offline.
832     + *
833     + * 2) If crashing_cpu was set, e.g. we're entering kdump and we need to
834     + * skip those CPUs which remain looping in the 1st kernel - see
835     + * crash_nmi_callback().
836     + *
837     + * Note: there still is a small window between kexec-ing and the new,
838     + * kdump kernel establishing a new #MC handler where a broadcasted MCE
839     + * might not get handled properly.
840     + */
841     + if (cpu_is_offline(cpu) ||
842     + (crashing_cpu != -1 && crashing_cpu != cpu)) {
843     u64 mcgstatus;
844    
845     mcgstatus = mce_rdmsrl(MSR_IA32_MCG_STATUS);
846     @@ -1681,30 +1695,35 @@ static int __mcheck_cpu_ancient_init(struct cpuinfo_x86 *c)
847     return 0;
848     }
849    
850     -static void __mcheck_cpu_init_vendor(struct cpuinfo_x86 *c)
851     +/*
852     + * Init basic CPU features needed for early decoding of MCEs.
853     + */
854     +static void __mcheck_cpu_init_early(struct cpuinfo_x86 *c)
855     {
856     - switch (c->x86_vendor) {
857     - case X86_VENDOR_INTEL:
858     - mce_intel_feature_init(c);
859     - mce_adjust_timer = cmci_intel_adjust_timer;
860     - break;
861     -
862     - case X86_VENDOR_AMD: {
863     + if (c->x86_vendor == X86_VENDOR_AMD) {
864     mce_flags.overflow_recov = !!cpu_has(c, X86_FEATURE_OVERFLOW_RECOV);
865     mce_flags.succor = !!cpu_has(c, X86_FEATURE_SUCCOR);
866     mce_flags.smca = !!cpu_has(c, X86_FEATURE_SMCA);
867    
868     - /*
869     - * Install proper ops for Scalable MCA enabled processors
870     - */
871     if (mce_flags.smca) {
872     msr_ops.ctl = smca_ctl_reg;
873     msr_ops.status = smca_status_reg;
874     msr_ops.addr = smca_addr_reg;
875     msr_ops.misc = smca_misc_reg;
876     }
877     - mce_amd_feature_init(c);
878     + }
879     +}
880     +
881     +static void __mcheck_cpu_init_vendor(struct cpuinfo_x86 *c)
882     +{
883     + switch (c->x86_vendor) {
884     + case X86_VENDOR_INTEL:
885     + mce_intel_feature_init(c);
886     + mce_adjust_timer = cmci_intel_adjust_timer;
887     + break;
888    
889     + case X86_VENDOR_AMD: {
890     + mce_amd_feature_init(c);
891     break;
892     }
893    
894     @@ -1790,6 +1809,7 @@ void mcheck_cpu_init(struct cpuinfo_x86 *c)
895    
896     machine_check_vector = do_machine_check;
897    
898     + __mcheck_cpu_init_early(c);
899     __mcheck_cpu_init_generic();
900     __mcheck_cpu_init_vendor(c);
901     __mcheck_cpu_init_clear_banks();
902     diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
903     index b55d07b9d530..b8d3f1b60331 100644
904     --- a/arch/x86/kernel/kprobes/core.c
905     +++ b/arch/x86/kernel/kprobes/core.c
906     @@ -199,6 +199,8 @@ int can_boost(kprobe_opcode_t *opcodes, void *addr)
907     return (opcode != 0x62 && opcode != 0x67);
908     case 0x70:
909     return 0; /* can't boost conditional jump */
910     + case 0x90:
911     + return opcode != 0x9a; /* can't boost call far */
912     case 0xc0:
913     /* can't boost software-interruptions */
914     return (0xc1 < opcode && opcode < 0xcc) || opcode == 0xcf;
915     @@ -407,6 +409,8 @@ static int arch_copy_kprobe(struct kprobe *p)
916     {
917     int ret;
918    
919     + set_memory_rw((unsigned long)p->ainsn.insn & PAGE_MASK, 1);
920     +
921     /* Copy an instruction with recovering if other optprobe modifies it.*/
922     ret = __copy_instruction(p->ainsn.insn, p->addr);
923     if (!ret)
924     @@ -421,6 +425,8 @@ static int arch_copy_kprobe(struct kprobe *p)
925     else
926     p->ainsn.boostable = -1;
927    
928     + set_memory_ro((unsigned long)p->ainsn.insn & PAGE_MASK, 1);
929     +
930     /* Check whether the instruction modifies Interrupt Flag or not */
931     p->ainsn.if_modifier = is_IF_modifier(p->ainsn.insn);
932    
933     diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c
934     index dc20da1c78f0..fa671b90c374 100644
935     --- a/arch/x86/kernel/kprobes/opt.c
936     +++ b/arch/x86/kernel/kprobes/opt.c
937     @@ -371,6 +371,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op,
938     }
939    
940     buf = (u8 *)op->optinsn.insn;
941     + set_memory_rw((unsigned long)buf & PAGE_MASK, 1);
942    
943     /* Copy instructions into the out-of-line buffer */
944     ret = copy_optimized_instructions(buf + TMPL_END_IDX, op->kp.addr);
945     @@ -393,6 +394,8 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op,
946     synthesize_reljump(buf + TMPL_END_IDX + op->optinsn.size,
947     (u8 *)op->kp.addr + op->optinsn.size);
948    
949     + set_memory_ro((unsigned long)buf & PAGE_MASK, 1);
950     +
951     flush_icache_range((unsigned long) buf,
952     (unsigned long) buf + TMPL_END_IDX +
953     op->optinsn.size + RELATIVEJUMP_SIZE);
954     diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
955     index ce020a69bba9..03f21dbfaa9d 100644
956     --- a/arch/x86/kernel/reboot.c
957     +++ b/arch/x86/kernel/reboot.c
958     @@ -769,10 +769,11 @@ void machine_crash_shutdown(struct pt_regs *regs)
959     #endif
960    
961    
962     +/* This is the CPU performing the emergency shutdown work. */
963     +int crashing_cpu = -1;
964     +
965     #if defined(CONFIG_SMP)
966    
967     -/* This keeps a track of which one is crashing cpu. */
968     -static int crashing_cpu;
969     static nmi_shootdown_cb shootdown_callback;
970    
971     static atomic_t waiting_for_crash_ipi;
972     diff --git a/arch/x86/kernel/setup_percpu.c b/arch/x86/kernel/setup_percpu.c
973     index 2bbd27f89802..f9da471a7707 100644
974     --- a/arch/x86/kernel/setup_percpu.c
975     +++ b/arch/x86/kernel/setup_percpu.c
976     @@ -287,4 +287,25 @@ void __init setup_per_cpu_areas(void)
977    
978     /* Setup cpu initialized, callin, callout masks */
979     setup_cpu_local_masks();
980     +
981     +#ifdef CONFIG_X86_32
982     + /*
983     + * Sync back kernel address range again. We already did this in
984     + * setup_arch(), but percpu data also needs to be available in
985     + * the smpboot asm. We can't reliably pick up percpu mappings
986     + * using vmalloc_fault(), because exception dispatch needs
987     + * percpu data.
988     + */
989     + clone_pgd_range(initial_page_table + KERNEL_PGD_BOUNDARY,
990     + swapper_pg_dir + KERNEL_PGD_BOUNDARY,
991     + KERNEL_PGD_PTRS);
992     +
993     + /*
994     + * sync back low identity map too. It is used for example
995     + * in the 32-bit EFI stub.
996     + */
997     + clone_pgd_range(initial_page_table,
998     + swapper_pg_dir + KERNEL_PGD_BOUNDARY,
999     + min(KERNEL_PGD_PTRS, KERNEL_PGD_BOUNDARY));
1000     +#endif
1001     }
1002     diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c
1003     index 1119414ab419..1d4e7fd3e66d 100644
1004     --- a/arch/x86/kernel/sys_x86_64.c
1005     +++ b/arch/x86/kernel/sys_x86_64.c
1006     @@ -16,6 +16,7 @@
1007     #include <linux/uaccess.h>
1008     #include <linux/elf.h>
1009    
1010     +#include <asm/compat.h>
1011     #include <asm/ia32.h>
1012     #include <asm/syscalls.h>
1013    
1014     @@ -100,7 +101,7 @@ SYSCALL_DEFINE6(mmap, unsigned long, addr, unsigned long, len,
1015     static void find_start_end(unsigned long flags, unsigned long *begin,
1016     unsigned long *end)
1017     {
1018     - if (!test_thread_flag(TIF_ADDR32) && (flags & MAP_32BIT)) {
1019     + if (!in_compat_syscall() && (flags & MAP_32BIT)) {
1020     /* This is usually used needed to map code in small
1021     model, so it needs to be in the first 31bit. Limit
1022     it to that. This means we need to move the
1023     @@ -175,7 +176,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
1024     return addr;
1025    
1026     /* for MAP_32BIT mappings we force the legacy mmap base */
1027     - if (!test_thread_flag(TIF_ADDR32) && (flags & MAP_32BIT))
1028     + if (!in_compat_syscall() && (flags & MAP_32BIT))
1029     goto bottomup;
1030    
1031     /* requesting a specific address */
1032     diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c
1033     index 8a1d63591399..961831bf74b1 100644
1034     --- a/arch/x86/kernel/vm86_32.c
1035     +++ b/arch/x86/kernel/vm86_32.c
1036     @@ -719,7 +719,8 @@ void handle_vm86_fault(struct kernel_vm86_regs *regs, long error_code)
1037     return;
1038    
1039     check_vip:
1040     - if (VEFLAGS & X86_EFLAGS_VIP) {
1041     + if ((VEFLAGS & (X86_EFLAGS_VIP | X86_EFLAGS_VIF)) ==
1042     + (X86_EFLAGS_VIP | X86_EFLAGS_VIF)) {
1043     save_v86_state(regs, VM86_STI);
1044     return;
1045     }
1046     diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
1047     index 24d2a3ee743f..8c99f2fbae80 100644
1048     --- a/arch/x86/kvm/svm.c
1049     +++ b/arch/x86/kvm/svm.c
1050     @@ -5449,6 +5449,12 @@ static inline void avic_post_state_restore(struct kvm_vcpu *vcpu)
1051     avic_handle_ldr_update(vcpu);
1052     }
1053    
1054     +static void svm_setup_mce(struct kvm_vcpu *vcpu)
1055     +{
1056     + /* [63:9] are reserved. */
1057     + vcpu->arch.mcg_cap &= 0x1ff;
1058     +}
1059     +
1060     static struct kvm_x86_ops svm_x86_ops __ro_after_init = {
1061     .cpu_has_kvm_support = has_svm,
1062     .disabled_by_bios = is_disabled,
1063     @@ -5564,6 +5570,7 @@ static struct kvm_x86_ops svm_x86_ops __ro_after_init = {
1064     .pmu_ops = &amd_pmu_ops,
1065     .deliver_posted_interrupt = svm_deliver_avic_intr,
1066     .update_pi_irte = svm_update_pi_irte,
1067     + .setup_mce = svm_setup_mce,
1068     };
1069    
1070     static int __init svm_init(void)
1071     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
1072     index 4b19ec1da22d..3aaaf305420d 100644
1073     --- a/arch/x86/kvm/x86.c
1074     +++ b/arch/x86/kvm/x86.c
1075     @@ -3070,7 +3070,8 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
1076     return -EINVAL;
1077    
1078     if (events->exception.injected &&
1079     - (events->exception.nr > 31 || events->exception.nr == NMI_VECTOR))
1080     + (events->exception.nr > 31 || events->exception.nr == NMI_VECTOR ||
1081     + is_guest_mode(vcpu)))
1082     return -EINVAL;
1083    
1084     /* INITs are latched while in SMM */
1085     diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
1086     index 74dea7f14c20..ae23c996e3a8 100644
1087     --- a/arch/x86/mm/fault.c
1088     +++ b/arch/x86/mm/fault.c
1089     @@ -343,7 +343,7 @@ static noinline int vmalloc_fault(unsigned long address)
1090     if (!pmd_k)
1091     return -1;
1092    
1093     - if (pmd_huge(*pmd_k))
1094     + if (pmd_large(*pmd_k))
1095     return 0;
1096    
1097     pte_k = pte_offset_kernel(pmd_k, address);
1098     @@ -463,7 +463,7 @@ static noinline int vmalloc_fault(unsigned long address)
1099     if (pud_none(*pud) || pud_pfn(*pud) != pud_pfn(*pud_ref))
1100     BUG();
1101    
1102     - if (pud_huge(*pud))
1103     + if (pud_large(*pud))
1104     return 0;
1105    
1106     pmd = pmd_offset(pud, address);
1107     @@ -474,7 +474,7 @@ static noinline int vmalloc_fault(unsigned long address)
1108     if (pmd_none(*pmd) || pmd_pfn(*pmd) != pmd_pfn(*pmd_ref))
1109     BUG();
1110    
1111     - if (pmd_huge(*pmd))
1112     + if (pmd_large(*pmd))
1113     return 0;
1114    
1115     pte_ref = pte_offset_kernel(pmd_ref, address);
1116     diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
1117     index b08ccbb9393a..6cd839c1f507 100644
1118     --- a/block/blk-cgroup.c
1119     +++ b/block/blk-cgroup.c
1120     @@ -1078,10 +1078,8 @@ int blkcg_init_queue(struct request_queue *q)
1121     if (preloaded)
1122     radix_tree_preload_end();
1123    
1124     - if (IS_ERR(blkg)) {
1125     - blkg_free(new_blkg);
1126     + if (IS_ERR(blkg))
1127     return PTR_ERR(blkg);
1128     - }
1129    
1130     q->root_blkg = blkg;
1131     q->root_rl.blkg = blkg;
1132     diff --git a/block/blk-throttle.c b/block/blk-throttle.c
1133     index a3ea8260c94c..3a4c9a3c1427 100644
1134     --- a/block/blk-throttle.c
1135     +++ b/block/blk-throttle.c
1136     @@ -499,6 +499,17 @@ static void throtl_dequeue_tg(struct throtl_grp *tg)
1137     static void throtl_schedule_pending_timer(struct throtl_service_queue *sq,
1138     unsigned long expires)
1139     {
1140     + unsigned long max_expire = jiffies + 8 * throtl_slice;
1141     +
1142     + /*
1143     + * Since we are adjusting the throttle limit dynamically, the sleep
1144     + * time calculated according to previous limit might be invalid. It's
1145     + * possible the cgroup sleep time is very long and no other cgroups
1146     + * have IO running so notify the limit changes. Make sure the cgroup
1147     + * doesn't sleep too long to avoid the missed notification.
1148     + */
1149     + if (time_after(expires, max_expire))
1150     + expires = max_expire;
1151     mod_timer(&sq->pending_timer, expires);
1152     throtl_log(sq, "schedule timer. delay=%lu jiffies=%lu",
1153     expires - jiffies, jiffies);
1154     diff --git a/drivers/char/agp/intel-gtt.c b/drivers/char/agp/intel-gtt.c
1155     index 0f7d28a98b9a..a7cc5b7be598 100644
1156     --- a/drivers/char/agp/intel-gtt.c
1157     +++ b/drivers/char/agp/intel-gtt.c
1158     @@ -871,6 +871,8 @@ void intel_gtt_insert_sg_entries(struct sg_table *st,
1159     }
1160     }
1161     wmb();
1162     + if (intel_private.driver->chipset_flush)
1163     + intel_private.driver->chipset_flush();
1164     }
1165     EXPORT_SYMBOL(intel_gtt_insert_sg_entries);
1166    
1167     diff --git a/drivers/clk/meson/gxbb.c b/drivers/clk/meson/gxbb.c
1168     index 9d9af446bafc..37e05d6e010a 100644
1169     --- a/drivers/clk/meson/gxbb.c
1170     +++ b/drivers/clk/meson/gxbb.c
1171     @@ -572,7 +572,7 @@ static MESON_GATE(gxbb_pl301, HHI_GCLK_MPEG0, 6);
1172     static MESON_GATE(gxbb_periphs, HHI_GCLK_MPEG0, 7);
1173     static MESON_GATE(gxbb_spicc, HHI_GCLK_MPEG0, 8);
1174     static MESON_GATE(gxbb_i2c, HHI_GCLK_MPEG0, 9);
1175     -static MESON_GATE(gxbb_sar_adc, HHI_GCLK_MPEG0, 10);
1176     +static MESON_GATE(gxbb_sana, HHI_GCLK_MPEG0, 10);
1177     static MESON_GATE(gxbb_smart_card, HHI_GCLK_MPEG0, 11);
1178     static MESON_GATE(gxbb_rng0, HHI_GCLK_MPEG0, 12);
1179     static MESON_GATE(gxbb_uart0, HHI_GCLK_MPEG0, 13);
1180     @@ -623,7 +623,7 @@ static MESON_GATE(gxbb_usb0_ddr_bridge, HHI_GCLK_MPEG2, 9);
1181     static MESON_GATE(gxbb_mmc_pclk, HHI_GCLK_MPEG2, 11);
1182     static MESON_GATE(gxbb_dvin, HHI_GCLK_MPEG2, 12);
1183     static MESON_GATE(gxbb_uart2, HHI_GCLK_MPEG2, 15);
1184     -static MESON_GATE(gxbb_sana, HHI_GCLK_MPEG2, 22);
1185     +static MESON_GATE(gxbb_sar_adc, HHI_GCLK_MPEG2, 22);
1186     static MESON_GATE(gxbb_vpu_intr, HHI_GCLK_MPEG2, 25);
1187     static MESON_GATE(gxbb_sec_ahb_ahb3_bridge, HHI_GCLK_MPEG2, 26);
1188     static MESON_GATE(gxbb_clk81_a53, HHI_GCLK_MPEG2, 29);
1189     diff --git a/drivers/clk/qcom/gcc-msm8916.c b/drivers/clk/qcom/gcc-msm8916.c
1190     index 5c4e193164d4..8dd71345b5d0 100644
1191     --- a/drivers/clk/qcom/gcc-msm8916.c
1192     +++ b/drivers/clk/qcom/gcc-msm8916.c
1193     @@ -1437,6 +1437,7 @@ static const struct freq_tbl ftbl_codec_clk[] = {
1194    
1195     static struct clk_rcg2 codec_digcodec_clk_src = {
1196     .cmd_rcgr = 0x1c09c,
1197     + .mnd_width = 8,
1198     .hid_width = 5,
1199     .parent_map = gcc_xo_gpll1_emclk_sleep_map,
1200     .freq_tbl = ftbl_codec_clk,
1201     diff --git a/drivers/clk/qcom/mmcc-msm8996.c b/drivers/clk/qcom/mmcc-msm8996.c
1202     index ca97e1151797..3b171bef913a 100644
1203     --- a/drivers/clk/qcom/mmcc-msm8996.c
1204     +++ b/drivers/clk/qcom/mmcc-msm8996.c
1205     @@ -2984,7 +2984,7 @@ static struct gdsc vfe1_gdsc = {
1206     .cxcs = (unsigned int []){ 0x36ac },
1207     .cxc_count = 1,
1208     .pd = {
1209     - .name = "vfe0",
1210     + .name = "vfe1",
1211     },
1212     .parent = &camss_gdsc.pd,
1213     .pwrsts = PWRSTS_OFF_ON,
1214     diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
1215     index d1651a50c349..21726a270fc4 100644
1216     --- a/drivers/dma/imx-sdma.c
1217     +++ b/drivers/dma/imx-sdma.c
1218     @@ -937,6 +937,21 @@ static int sdma_disable_channel(struct dma_chan *chan)
1219     return 0;
1220     }
1221    
1222     +static int sdma_disable_channel_with_delay(struct dma_chan *chan)
1223     +{
1224     + sdma_disable_channel(chan);
1225     +
1226     + /*
1227     + * According to NXP R&D team a delay of one BD SDMA cost time
1228     + * (maximum is 1ms) should be added after disable of the channel
1229     + * bit, to ensure SDMA core has really been stopped after SDMA
1230     + * clients call .device_terminate_all.
1231     + */
1232     + mdelay(1);
1233     +
1234     + return 0;
1235     +}
1236     +
1237     static void sdma_set_watermarklevel_for_p2p(struct sdma_channel *sdmac)
1238     {
1239     struct sdma_engine *sdma = sdmac->sdma;
1240     @@ -1828,7 +1843,7 @@ static int sdma_probe(struct platform_device *pdev)
1241     sdma->dma_device.device_prep_slave_sg = sdma_prep_slave_sg;
1242     sdma->dma_device.device_prep_dma_cyclic = sdma_prep_dma_cyclic;
1243     sdma->dma_device.device_config = sdma_config;
1244     - sdma->dma_device.device_terminate_all = sdma_disable_channel;
1245     + sdma->dma_device.device_terminate_all = sdma_disable_channel_with_delay;
1246     sdma->dma_device.src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES);
1247     sdma->dma_device.dst_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES);
1248     sdma->dma_device.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);
1249     diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c
1250     index 58d3e2b39b5b..61262a7a5c3a 100644
1251     --- a/drivers/edac/altera_edac.c
1252     +++ b/drivers/edac/altera_edac.c
1253     @@ -1020,13 +1020,23 @@ altr_init_a10_ecc_block(struct device_node *np, u32 irq_mask,
1254     return ret;
1255     }
1256    
1257     +static int socfpga_is_a10(void)
1258     +{
1259     + return of_machine_is_compatible("altr,socfpga-arria10");
1260     +}
1261     +
1262     static int validate_parent_available(struct device_node *np);
1263     static const struct of_device_id altr_edac_a10_device_of_match[];
1264     static int __init __maybe_unused altr_init_a10_ecc_device_type(char *compat)
1265     {
1266     int irq;
1267     - struct device_node *child, *np = of_find_compatible_node(NULL, NULL,
1268     - "altr,socfpga-a10-ecc-manager");
1269     + struct device_node *child, *np;
1270     +
1271     + if (!socfpga_is_a10())
1272     + return -ENODEV;
1273     +
1274     + np = of_find_compatible_node(NULL, NULL,
1275     + "altr,socfpga-a10-ecc-manager");
1276     if (!np) {
1277     edac_printk(KERN_ERR, EDAC_DEVICE, "ECC Manager not found\n");
1278     return -ENODEV;
1279     @@ -1542,8 +1552,12 @@ static const struct edac_device_prv_data a10_sdmmceccb_data = {
1280     static int __init socfpga_init_sdmmc_ecc(void)
1281     {
1282     int rc = -ENODEV;
1283     - struct device_node *child = of_find_compatible_node(NULL, NULL,
1284     - "altr,socfpga-sdmmc-ecc");
1285     + struct device_node *child;
1286     +
1287     + if (!socfpga_is_a10())
1288     + return -ENODEV;
1289     +
1290     + child = of_find_compatible_node(NULL, NULL, "altr,socfpga-sdmmc-ecc");
1291     if (!child) {
1292     edac_printk(KERN_WARNING, EDAC_DEVICE, "SDMMC node not found\n");
1293     return -ENODEV;
1294     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
1295     index c82b04b24bf9..e9311eb7b8d9 100644
1296     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
1297     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
1298     @@ -69,25 +69,18 @@ void amdgpu_connector_hotplug(struct drm_connector *connector)
1299     /* don't do anything if sink is not display port, i.e.,
1300     * passive dp->(dvi|hdmi) adaptor
1301     */
1302     - if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
1303     - int saved_dpms = connector->dpms;
1304     - /* Only turn off the display if it's physically disconnected */
1305     - if (!amdgpu_display_hpd_sense(adev, amdgpu_connector->hpd.hpd)) {
1306     - drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
1307     - } else if (amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) {
1308     - /* Don't try to start link training before we
1309     - * have the dpcd */
1310     - if (amdgpu_atombios_dp_get_dpcd(amdgpu_connector))
1311     - return;
1312     -
1313     - /* set it to OFF so that drm_helper_connector_dpms()
1314     - * won't return immediately since the current state
1315     - * is ON at this point.
1316     - */
1317     - connector->dpms = DRM_MODE_DPMS_OFF;
1318     - drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
1319     - }
1320     - connector->dpms = saved_dpms;
1321     + if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT &&
1322     + amdgpu_display_hpd_sense(adev, amdgpu_connector->hpd.hpd) &&
1323     + amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) {
1324     + /* Don't start link training before we have the DPCD */
1325     + if (amdgpu_atombios_dp_get_dpcd(amdgpu_connector))
1326     + return;
1327     +
1328     + /* Turn the connector off and back on immediately, which
1329     + * will trigger link training
1330     + */
1331     + drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
1332     + drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
1333     }
1334     }
1335     }
1336     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
1337     index 083e2b429872..15a2d8f3725d 100644
1338     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
1339     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
1340     @@ -533,6 +533,12 @@ amdgpu_user_framebuffer_create(struct drm_device *dev,
1341     return ERR_PTR(-ENOENT);
1342     }
1343    
1344     + /* Handle is imported dma-buf, so cannot be migrated to VRAM for scanout */
1345     + if (obj->import_attach) {
1346     + DRM_DEBUG_KMS("Cannot create framebuffer from imported dma_buf\n");
1347     + return ERR_PTR(-EINVAL);
1348     + }
1349     +
1350     amdgpu_fb = kzalloc(sizeof(*amdgpu_fb), GFP_KERNEL);
1351     if (amdgpu_fb == NULL) {
1352     drm_gem_object_unreference_unlocked(obj);
1353     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
1354     index a7ea9a3b454e..d5e4748e3300 100644
1355     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
1356     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
1357     @@ -36,8 +36,6 @@ void amdgpu_gem_object_free(struct drm_gem_object *gobj)
1358     struct amdgpu_bo *robj = gem_to_amdgpu_bo(gobj);
1359    
1360     if (robj) {
1361     - if (robj->gem_base.import_attach)
1362     - drm_prime_gem_destroy(&robj->gem_base, robj->tbo.sg);
1363     amdgpu_mn_unregister(robj);
1364     amdgpu_bo_unref(&robj);
1365     }
1366     diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
1367     index f3efb1c5dae9..5afe72778518 100644
1368     --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
1369     +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
1370     @@ -94,6 +94,8 @@ static void amdgpu_ttm_bo_destroy(struct ttm_buffer_object *tbo)
1371    
1372     amdgpu_update_memory_usage(bo->adev, &bo->tbo.mem, NULL);
1373    
1374     + if (bo->gem_base.import_attach)
1375     + drm_prime_gem_destroy(&bo->gem_base, bo->tbo.sg);
1376     drm_gem_object_release(&bo->gem_base);
1377     amdgpu_bo_unref(&bo->parent);
1378     if (!list_empty(&bo->shadow_list)) {
1379     diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
1380     index 1e5064749959..8c6e47c5507f 100644
1381     --- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
1382     +++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
1383     @@ -519,11 +519,17 @@ static ssize_t sysprops_show(struct kobject *kobj, struct attribute *attr,
1384     return ret;
1385     }
1386    
1387     +static void kfd_topology_kobj_release(struct kobject *kobj)
1388     +{
1389     + kfree(kobj);
1390     +}
1391     +
1392     static const struct sysfs_ops sysprops_ops = {
1393     .show = sysprops_show,
1394     };
1395    
1396     static struct kobj_type sysprops_type = {
1397     + .release = kfd_topology_kobj_release,
1398     .sysfs_ops = &sysprops_ops,
1399     };
1400    
1401     @@ -559,6 +565,7 @@ static const struct sysfs_ops iolink_ops = {
1402     };
1403    
1404     static struct kobj_type iolink_type = {
1405     + .release = kfd_topology_kobj_release,
1406     .sysfs_ops = &iolink_ops,
1407     };
1408    
1409     @@ -586,6 +593,7 @@ static const struct sysfs_ops mem_ops = {
1410     };
1411    
1412     static struct kobj_type mem_type = {
1413     + .release = kfd_topology_kobj_release,
1414     .sysfs_ops = &mem_ops,
1415     };
1416    
1417     @@ -625,6 +633,7 @@ static const struct sysfs_ops cache_ops = {
1418     };
1419    
1420     static struct kobj_type cache_type = {
1421     + .release = kfd_topology_kobj_release,
1422     .sysfs_ops = &cache_ops,
1423     };
1424    
1425     @@ -747,6 +756,7 @@ static const struct sysfs_ops node_ops = {
1426     };
1427    
1428     static struct kobj_type node_type = {
1429     + .release = kfd_topology_kobj_release,
1430     .sysfs_ops = &node_ops,
1431     };
1432    
1433     diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
1434     index c6b281aa762f..6b31e0474271 100644
1435     --- a/drivers/gpu/drm/drm_edid.c
1436     +++ b/drivers/gpu/drm/drm_edid.c
1437     @@ -3347,8 +3347,7 @@ EXPORT_SYMBOL(drm_edid_get_monitor_name);
1438     * @edid: EDID to parse
1439     *
1440     * Fill the ELD (EDID-Like Data) buffer for passing to the audio driver. The
1441     - * Conn_Type, HDCP and Port_ID ELD fields are left for the graphics driver to
1442     - * fill in.
1443     + * HDCP and Port_ID ELD fields are left for the graphics driver to fill in.
1444     */
1445     void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid)
1446     {
1447     @@ -3426,6 +3425,12 @@ void drm_edid_to_eld(struct drm_connector *connector, struct edid *edid)
1448     }
1449     eld[5] |= total_sad_count << 4;
1450    
1451     + if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
1452     + connector->connector_type == DRM_MODE_CONNECTOR_eDP)
1453     + eld[DRM_ELD_SAD_COUNT_CONN_TYPE] |= DRM_ELD_CONN_TYPE_DP;
1454     + else
1455     + eld[DRM_ELD_SAD_COUNT_CONN_TYPE] |= DRM_ELD_CONN_TYPE_HDMI;
1456     +
1457     eld[DRM_ELD_BASELINE_ELD_LEN] =
1458     DIV_ROUND_UP(drm_eld_calc_baseline_block_size(eld), 4);
1459    
1460     diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
1461     index 48a6167f5e7b..00c815a7c414 100644
1462     --- a/drivers/gpu/drm/drm_irq.c
1463     +++ b/drivers/gpu/drm/drm_irq.c
1464     @@ -1202,9 +1202,9 @@ static void drm_vblank_put(struct drm_device *dev, unsigned int pipe)
1465     if (atomic_dec_and_test(&vblank->refcount)) {
1466     if (drm_vblank_offdelay == 0)
1467     return;
1468     - else if (dev->vblank_disable_immediate || drm_vblank_offdelay < 0)
1469     + else if (drm_vblank_offdelay < 0)
1470     vblank_disable_fn((unsigned long)vblank);
1471     - else
1472     + else if (!dev->vblank_disable_immediate)
1473     mod_timer(&vblank->disable_timer,
1474     jiffies + ((drm_vblank_offdelay * HZ)/1000));
1475     }
1476     @@ -1819,6 +1819,16 @@ bool drm_handle_vblank(struct drm_device *dev, unsigned int pipe)
1477     wake_up(&vblank->queue);
1478     drm_handle_vblank_events(dev, pipe);
1479    
1480     + /* With instant-off, we defer disabling the interrupt until after
1481     + * we finish processing the following vblank. The disable has to
1482     + * be last (after drm_handle_vblank_events) so that the timestamp
1483     + * is always accurate.
1484     + */
1485     + if (dev->vblank_disable_immediate &&
1486     + drm_vblank_offdelay > 0 &&
1487     + !atomic_read(&vblank->refcount))
1488     + vblank_disable_fn((unsigned long)vblank);
1489     +
1490     spin_unlock_irqrestore(&dev->event_lock, irqflags);
1491    
1492     return true;
1493     diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c
1494     index 2cd879a4ae15..cdbb6e625f05 100644
1495     --- a/drivers/gpu/drm/qxl/qxl_fb.c
1496     +++ b/drivers/gpu/drm/qxl/qxl_fb.c
1497     @@ -387,9 +387,11 @@ static const struct drm_fb_helper_funcs qxl_fb_helper_funcs = {
1498    
1499     int qxl_fbdev_init(struct qxl_device *qdev)
1500     {
1501     + int ret = 0;
1502     +
1503     +#ifdef CONFIG_DRM_FBDEV_EMULATION
1504     struct qxl_fbdev *qfbdev;
1505     int bpp_sel = 32; /* TODO: parameter from somewhere? */
1506     - int ret;
1507    
1508     qfbdev = kzalloc(sizeof(struct qxl_fbdev), GFP_KERNEL);
1509     if (!qfbdev)
1510     @@ -423,6 +425,8 @@ int qxl_fbdev_init(struct qxl_device *qdev)
1511     drm_fb_helper_fini(&qfbdev->helper);
1512     free:
1513     kfree(qfbdev);
1514     +#endif
1515     +
1516     return ret;
1517     }
1518    
1519     @@ -438,6 +442,9 @@ void qxl_fbdev_fini(struct qxl_device *qdev)
1520    
1521     void qxl_fbdev_set_suspend(struct qxl_device *qdev, int state)
1522     {
1523     + if (!qdev->mode_info.qfbdev)
1524     + return;
1525     +
1526     drm_fb_helper_set_suspend(&qdev->mode_info.qfbdev->helper, state);
1527     }
1528    
1529     diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
1530     index cdb8cb568c15..ca1caf405832 100644
1531     --- a/drivers/gpu/drm/radeon/radeon_display.c
1532     +++ b/drivers/gpu/drm/radeon/radeon_display.c
1533     @@ -1352,6 +1352,12 @@ radeon_user_framebuffer_create(struct drm_device *dev,
1534     return ERR_PTR(-ENOENT);
1535     }
1536    
1537     + /* Handle is imported dma-buf, so cannot be migrated to VRAM for scanout */
1538     + if (obj->import_attach) {
1539     + DRM_DEBUG_KMS("Cannot create framebuffer from imported dma_buf\n");
1540     + return ERR_PTR(-EINVAL);
1541     + }
1542     +
1543     radeon_fb = kzalloc(sizeof(*radeon_fb), GFP_KERNEL);
1544     if (radeon_fb == NULL) {
1545     drm_gem_object_unreference_unlocked(obj);
1546     diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
1547     index 3322b157106d..1c4d95dea887 100644
1548     --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
1549     +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
1550     @@ -512,6 +512,13 @@ static void rcar_du_crtc_disable(struct drm_crtc *crtc)
1551     rcar_du_crtc_stop(rcrtc);
1552     rcar_du_crtc_put(rcrtc);
1553    
1554     + spin_lock_irq(&crtc->dev->event_lock);
1555     + if (crtc->state->event) {
1556     + drm_crtc_send_vblank_event(crtc, crtc->state->event);
1557     + crtc->state->event = NULL;
1558     + }
1559     + spin_unlock_irq(&crtc->dev->event_lock);
1560     +
1561     rcrtc->outputs = 0;
1562     }
1563    
1564     diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
1565     index c7eba305c488..6e3c4acb16ac 100644
1566     --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
1567     +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
1568     @@ -503,7 +503,7 @@ static int vop_enable(struct drm_crtc *crtc)
1569     ret = pm_runtime_get_sync(vop->dev);
1570     if (ret < 0) {
1571     dev_err(vop->dev, "failed to get pm runtime: %d\n", ret);
1572     - goto err_put_pm_runtime;
1573     + return ret;
1574     }
1575    
1576     ret = clk_enable(vop->hclk);
1577     @@ -1348,10 +1348,16 @@ static int vop_initial(struct vop *vop)
1578     return PTR_ERR(vop->dclk);
1579     }
1580    
1581     + ret = pm_runtime_get_sync(vop->dev);
1582     + if (ret < 0) {
1583     + dev_err(vop->dev, "failed to get pm runtime: %d\n", ret);
1584     + return ret;
1585     + }
1586     +
1587     ret = clk_prepare(vop->dclk);
1588     if (ret < 0) {
1589     dev_err(vop->dev, "failed to prepare dclk\n");
1590     - return ret;
1591     + goto err_put_pm_runtime;
1592     }
1593    
1594     /* Enable both the hclk and aclk to setup the vop */
1595     @@ -1411,6 +1417,8 @@ static int vop_initial(struct vop *vop)
1596    
1597     vop->is_enabled = false;
1598    
1599     + pm_runtime_put_sync(vop->dev);
1600     +
1601     return 0;
1602    
1603     err_disable_aclk:
1604     @@ -1419,6 +1427,8 @@ static int vop_initial(struct vop *vop)
1605     clk_disable_unprepare(vop->hclk);
1606     err_unprepare_dclk:
1607     clk_unprepare(vop->dclk);
1608     +err_put_pm_runtime:
1609     + pm_runtime_put_sync(vop->dev);
1610     return ret;
1611     }
1612    
1613     @@ -1519,12 +1529,6 @@ static int vop_bind(struct device *dev, struct device *master, void *data)
1614     if (!vop->regsbak)
1615     return -ENOMEM;
1616    
1617     - ret = vop_initial(vop);
1618     - if (ret < 0) {
1619     - dev_err(&pdev->dev, "cannot initial vop dev - err %d\n", ret);
1620     - return ret;
1621     - }
1622     -
1623     irq = platform_get_irq(pdev, 0);
1624     if (irq < 0) {
1625     dev_err(dev, "cannot find irq for vop\n");
1626     @@ -1551,8 +1555,17 @@ static int vop_bind(struct device *dev, struct device *master, void *data)
1627    
1628     pm_runtime_enable(&pdev->dev);
1629    
1630     + ret = vop_initial(vop);
1631     + if (ret < 0) {
1632     + dev_err(&pdev->dev, "cannot initial vop dev - err %d\n", ret);
1633     + goto err_disable_pm_runtime;
1634     + }
1635     +
1636     return 0;
1637    
1638     +err_disable_pm_runtime:
1639     + pm_runtime_disable(&pdev->dev);
1640     + vop_destroy_crtc(vop);
1641     err_enable_irq:
1642     enable_irq(vop->irq); /* To balance out the disable_irq above */
1643     return ret;
1644     diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
1645     index 4a192210574f..caba0311c86c 100644
1646     --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
1647     +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
1648     @@ -19,6 +19,7 @@
1649     #include <linux/clk-provider.h>
1650     #include <linux/ioport.h>
1651     #include <linux/of_address.h>
1652     +#include <linux/of_graph.h>
1653     #include <linux/of_irq.h>
1654     #include <linux/regmap.h>
1655    
1656     @@ -136,5 +137,9 @@ struct sun4i_crtc *sun4i_crtc_init(struct drm_device *drm)
1657    
1658     drm_crtc_helper_add(&scrtc->crtc, &sun4i_crtc_helper_funcs);
1659    
1660     + /* Set crtc.port to output port node of the tcon */
1661     + scrtc->crtc.port = of_graph_get_port_by_id(drv->tcon->dev->of_node,
1662     + 1);
1663     +
1664     return scrtc;
1665     }
1666     diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
1667     index 1feec34ca9dd..9e77fc034e0a 100644
1668     --- a/drivers/gpu/drm/sun4i/sun4i_drv.c
1669     +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
1670     @@ -145,7 +145,7 @@ static int sun4i_drv_bind(struct device *dev)
1671     ret = component_bind_all(drm->dev, drm);
1672     if (ret) {
1673     dev_err(drm->dev, "Couldn't bind all pipelines components\n");
1674     - goto free_drm;
1675     + goto cleanup_mode_config;
1676     }
1677    
1678     /* Create our layers */
1679     @@ -153,7 +153,7 @@ static int sun4i_drv_bind(struct device *dev)
1680     if (IS_ERR(drv->layers)) {
1681     dev_err(drm->dev, "Couldn't create the planes\n");
1682     ret = PTR_ERR(drv->layers);
1683     - goto free_drm;
1684     + goto cleanup_mode_config;
1685     }
1686    
1687     /* Create our CRTC */
1688     @@ -161,7 +161,7 @@ static int sun4i_drv_bind(struct device *dev)
1689     if (!drv->crtc) {
1690     dev_err(drm->dev, "Couldn't create the CRTC\n");
1691     ret = -EINVAL;
1692     - goto free_drm;
1693     + goto cleanup_mode_config;
1694     }
1695     drm->irq_enabled = true;
1696    
1697     @@ -173,7 +173,7 @@ static int sun4i_drv_bind(struct device *dev)
1698     if (IS_ERR(drv->fbdev)) {
1699     dev_err(drm->dev, "Couldn't create our framebuffer\n");
1700     ret = PTR_ERR(drv->fbdev);
1701     - goto free_drm;
1702     + goto cleanup_mode_config;
1703     }
1704    
1705     /* Enable connectors polling */
1706     @@ -181,10 +181,16 @@ static int sun4i_drv_bind(struct device *dev)
1707    
1708     ret = drm_dev_register(drm, 0);
1709     if (ret)
1710     - goto free_drm;
1711     + goto finish_poll;
1712    
1713     return 0;
1714    
1715     +finish_poll:
1716     + drm_kms_helper_poll_fini(drm);
1717     + sun4i_framebuffer_free(drm);
1718     +cleanup_mode_config:
1719     + drm_mode_config_cleanup(drm);
1720     + drm_vblank_cleanup(drm);
1721     free_drm:
1722     drm_dev_unref(drm);
1723     return ret;
1724     diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
1725     index c6afb2448655..f2975a1525be 100644
1726     --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
1727     +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
1728     @@ -336,12 +336,11 @@ static int sun4i_tcon_init_clocks(struct device *dev,
1729     }
1730     }
1731    
1732     - return sun4i_dclk_create(dev, tcon);
1733     + return 0;
1734     }
1735    
1736     static void sun4i_tcon_free_clocks(struct sun4i_tcon *tcon)
1737     {
1738     - sun4i_dclk_free(tcon);
1739     clk_disable_unprepare(tcon->clk);
1740     }
1741    
1742     @@ -506,22 +505,28 @@ static int sun4i_tcon_bind(struct device *dev, struct device *master,
1743     return ret;
1744     }
1745    
1746     + ret = sun4i_tcon_init_clocks(dev, tcon);
1747     + if (ret) {
1748     + dev_err(dev, "Couldn't init our TCON clocks\n");
1749     + goto err_assert_reset;
1750     + }
1751     +
1752     ret = sun4i_tcon_init_regmap(dev, tcon);
1753     if (ret) {
1754     dev_err(dev, "Couldn't init our TCON regmap\n");
1755     - goto err_assert_reset;
1756     + goto err_free_clocks;
1757     }
1758    
1759     - ret = sun4i_tcon_init_clocks(dev, tcon);
1760     + ret = sun4i_dclk_create(dev, tcon);
1761     if (ret) {
1762     - dev_err(dev, "Couldn't init our TCON clocks\n");
1763     - goto err_assert_reset;
1764     + dev_err(dev, "Couldn't create our TCON dot clock\n");
1765     + goto err_free_clocks;
1766     }
1767    
1768     ret = sun4i_tcon_init_irq(dev, tcon);
1769     if (ret) {
1770     dev_err(dev, "Couldn't init our TCON interrupts\n");
1771     - goto err_free_clocks;
1772     + goto err_free_dotclock;
1773     }
1774    
1775     ret = sun4i_rgb_init(drm);
1776     @@ -530,6 +535,8 @@ static int sun4i_tcon_bind(struct device *dev, struct device *master,
1777    
1778     return 0;
1779    
1780     +err_free_dotclock:
1781     + sun4i_dclk_free(tcon);
1782     err_free_clocks:
1783     sun4i_tcon_free_clocks(tcon);
1784     err_assert_reset:
1785     @@ -542,6 +549,7 @@ static void sun4i_tcon_unbind(struct device *dev, struct device *master,
1786     {
1787     struct sun4i_tcon *tcon = dev_get_drvdata(dev);
1788    
1789     + sun4i_dclk_free(tcon);
1790     sun4i_tcon_free_clocks(tcon);
1791     }
1792    
1793     diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
1794     index d09276ec7e90..52a2a1a75682 100644
1795     --- a/drivers/gpu/drm/ttm/ttm_bo.c
1796     +++ b/drivers/gpu/drm/ttm/ttm_bo.c
1797     @@ -1209,18 +1209,20 @@ int ttm_bo_init(struct ttm_bo_device *bdev,
1798     if (likely(!ret))
1799     ret = ttm_bo_validate(bo, placement, interruptible, false);
1800    
1801     - if (!resv) {
1802     + if (!resv)
1803     ttm_bo_unreserve(bo);
1804    
1805     - } else if (!(bo->mem.placement & TTM_PL_FLAG_NO_EVICT)) {
1806     + if (unlikely(ret)) {
1807     + ttm_bo_unref(&bo);
1808     + return ret;
1809     + }
1810     +
1811     + if (resv && !(bo->mem.placement & TTM_PL_FLAG_NO_EVICT)) {
1812     spin_lock(&bo->glob->lru_lock);
1813     ttm_bo_add_to_lru(bo);
1814     spin_unlock(&bo->glob->lru_lock);
1815     }
1816    
1817     - if (unlikely(ret))
1818     - ttm_bo_unref(&bo);
1819     -
1820     return ret;
1821     }
1822     EXPORT_SYMBOL(ttm_bo_init);
1823     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
1824     index d2d93959b119..aec6e9eef489 100644
1825     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
1826     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fb.c
1827     @@ -433,7 +433,7 @@ static int vmw_fb_kms_detach(struct vmw_fb_par *par,
1828     set.y = 0;
1829     set.mode = NULL;
1830     set.fb = NULL;
1831     - set.num_connectors = 1;
1832     + set.num_connectors = 0;
1833     set.connectors = &par->con;
1834     ret = drm_mode_set_config_internal(&set);
1835     if (ret) {
1836     @@ -821,7 +821,9 @@ int vmw_fb_off(struct vmw_private *vmw_priv)
1837     flush_delayed_work(&par->local_work);
1838    
1839     mutex_lock(&par->bo_mutex);
1840     + drm_modeset_lock_all(vmw_priv->dev);
1841     (void) vmw_fb_kms_detach(par, true, false);
1842     + drm_modeset_unlock_all(vmw_priv->dev);
1843     mutex_unlock(&par->bo_mutex);
1844    
1845     return 0;
1846     diff --git a/drivers/hid/hid-elo.c b/drivers/hid/hid-elo.c
1847     index 0cd4f7216239..5eea6fe0d7bd 100644
1848     --- a/drivers/hid/hid-elo.c
1849     +++ b/drivers/hid/hid-elo.c
1850     @@ -42,6 +42,12 @@ static int elo_input_configured(struct hid_device *hdev,
1851     {
1852     struct input_dev *input = hidinput->input;
1853    
1854     + /*
1855     + * ELO devices have one Button usage in GenDesk field, which makes
1856     + * hid-input map it to BTN_LEFT; that confuses userspace, which then
1857     + * considers the device to be a mouse/touchpad instead of touchscreen.
1858     + */
1859     + clear_bit(BTN_LEFT, input->keybit);
1860     set_bit(BTN_TOUCH, input->keybit);
1861     set_bit(ABS_PRESSURE, input->absbit);
1862     input_set_abs_params(input, ABS_PRESSURE, 0, 256, 0, 0);
1863     diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
1864     index fb9ace1cef8b..40233315d5f5 100644
1865     --- a/drivers/hid/hid-input.c
1866     +++ b/drivers/hid/hid-input.c
1867     @@ -1149,18 +1149,26 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
1868    
1869     /*
1870     * Ignore out-of-range values as per HID specification,
1871     - * section 5.10 and 6.2.25.
1872     + * section 5.10 and 6.2.25, when NULL state bit is present.
1873     + * When it's not, clamp the value to match Microsoft's input
1874     + * driver as mentioned in "Required HID usages for digitizers":
1875     + * https://msdn.microsoft.com/en-us/library/windows/hardware/dn672278(v=vs.85).asp
1876     *
1877     * The logical_minimum < logical_maximum check is done so that we
1878     * don't unintentionally discard values sent by devices which
1879     * don't specify logical min and max.
1880     */
1881     if ((field->flags & HID_MAIN_ITEM_VARIABLE) &&
1882     - (field->logical_minimum < field->logical_maximum) &&
1883     - (value < field->logical_minimum ||
1884     - value > field->logical_maximum)) {
1885     - dbg_hid("Ignoring out-of-range value %x\n", value);
1886     - return;
1887     + (field->logical_minimum < field->logical_maximum)) {
1888     + if (field->flags & HID_MAIN_ITEM_NULL_STATE &&
1889     + (value < field->logical_minimum ||
1890     + value > field->logical_maximum)) {
1891     + dbg_hid("Ignoring out-of-range value %x\n", value);
1892     + return;
1893     + }
1894     + value = clamp(value,
1895     + field->logical_minimum,
1896     + field->logical_maximum);
1897     }
1898    
1899     /*
1900     diff --git a/drivers/hwmon/pmbus/adm1275.c b/drivers/hwmon/pmbus/adm1275.c
1901     index 3baa4f4a8c5e..d659a02647d4 100644
1902     --- a/drivers/hwmon/pmbus/adm1275.c
1903     +++ b/drivers/hwmon/pmbus/adm1275.c
1904     @@ -101,8 +101,8 @@ static const struct coefficients adm1075_coefficients[] = {
1905     [0] = { 27169, 0, -1 }, /* voltage */
1906     [1] = { 806, 20475, -1 }, /* current, irange25 */
1907     [2] = { 404, 20475, -1 }, /* current, irange50 */
1908     - [3] = { 0, -1, 8549 }, /* power, irange25 */
1909     - [4] = { 0, -1, 4279 }, /* power, irange50 */
1910     + [3] = { 8549, 0, -1 }, /* power, irange25 */
1911     + [4] = { 4279, 0, -1 }, /* power, irange50 */
1912     };
1913    
1914     static const struct coefficients adm1275_coefficients[] = {
1915     diff --git a/drivers/hwtracing/coresight/of_coresight.c b/drivers/hwtracing/coresight/of_coresight.c
1916     index 629e031b7456..09142e99e915 100644
1917     --- a/drivers/hwtracing/coresight/of_coresight.c
1918     +++ b/drivers/hwtracing/coresight/of_coresight.c
1919     @@ -149,7 +149,7 @@ struct coresight_platform_data *of_get_coresight_platform_data(
1920     continue;
1921    
1922     /* The local out port number */
1923     - pdata->outports[i] = endpoint.id;
1924     + pdata->outports[i] = endpoint.port;
1925    
1926     /*
1927     * Get a handle on the remote port and parent
1928     diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c
1929     index 4682909b021b..3be62ef154d1 100644
1930     --- a/drivers/infiniband/hw/hfi1/chip.c
1931     +++ b/drivers/infiniband/hw/hfi1/chip.c
1932     @@ -9489,8 +9489,11 @@ static int test_qsfp_read(struct hfi1_pportdata *ppd)
1933     int ret;
1934     u8 status;
1935    
1936     - /* report success if not a QSFP */
1937     - if (ppd->port_type != PORT_TYPE_QSFP)
1938     + /*
1939     + * Report success if not a QSFP or, if it is a QSFP, but the cable is
1940     + * not present
1941     + */
1942     + if (ppd->port_type != PORT_TYPE_QSFP || !qsfp_mod_present(ppd))
1943     return 0;
1944    
1945     /* read byte 2, the status byte */
1946     diff --git a/drivers/input/keyboard/qt1070.c b/drivers/input/keyboard/qt1070.c
1947     index 5a5778729e37..76bb51309a78 100644
1948     --- a/drivers/input/keyboard/qt1070.c
1949     +++ b/drivers/input/keyboard/qt1070.c
1950     @@ -274,9 +274,18 @@ static const struct i2c_device_id qt1070_id[] = {
1951     };
1952     MODULE_DEVICE_TABLE(i2c, qt1070_id);
1953    
1954     +#ifdef CONFIG_OF
1955     +static const struct of_device_id qt1070_of_match[] = {
1956     + { .compatible = "qt1070", },
1957     + { },
1958     +};
1959     +MODULE_DEVICE_TABLE(of, qt1070_of_match);
1960     +#endif
1961     +
1962     static struct i2c_driver qt1070_driver = {
1963     .driver = {
1964     .name = "qt1070",
1965     + .of_match_table = of_match_ptr(qt1070_of_match),
1966     .pm = &qt1070_pm_ops,
1967     },
1968     .id_table = qt1070_id,
1969     diff --git a/drivers/input/touchscreen/tsc2007.c b/drivers/input/touchscreen/tsc2007.c
1970     index 5d0cd51c6f41..a4b7b4c3d27b 100644
1971     --- a/drivers/input/touchscreen/tsc2007.c
1972     +++ b/drivers/input/touchscreen/tsc2007.c
1973     @@ -455,6 +455,14 @@ static int tsc2007_probe(struct i2c_client *client,
1974    
1975     tsc2007_stop(ts);
1976    
1977     + /* power down the chip (TSC2007_SETUP does not ACK on I2C) */
1978     + err = tsc2007_xfer(ts, PWRDOWN);
1979     + if (err < 0) {
1980     + dev_err(&client->dev,
1981     + "Failed to setup chip: %d\n", err);
1982     + return err; /* usually, chip does not respond */
1983     + }
1984     +
1985     err = input_register_device(input_dev);
1986     if (err) {
1987     dev_err(&client->dev,
1988     diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c
1989     index e23001bfcfee..f106fd9782bf 100644
1990     --- a/drivers/iommu/iova.c
1991     +++ b/drivers/iommu/iova.c
1992     @@ -138,7 +138,7 @@ static int __alloc_and_insert_iova_range(struct iova_domain *iovad,
1993     break; /* found a free slot */
1994     }
1995     adjust_limit_pfn:
1996     - limit_pfn = curr_iova->pfn_lo - 1;
1997     + limit_pfn = curr_iova->pfn_lo ? (curr_iova->pfn_lo - 1) : 0;
1998     move_left:
1999     prev = curr;
2000     curr = rb_prev(curr);
2001     diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
2002     index acb9d250a905..ac15e5d5d9b2 100644
2003     --- a/drivers/irqchip/irq-gic-v3-its.c
2004     +++ b/drivers/irqchip/irq-gic-v3-its.c
2005     @@ -684,7 +684,7 @@ static struct irq_chip its_irq_chip = {
2006     * This gives us (((1UL << id_bits) - 8192) >> 5) possible allocations.
2007     */
2008     #define IRQS_PER_CHUNK_SHIFT 5
2009     -#define IRQS_PER_CHUNK (1 << IRQS_PER_CHUNK_SHIFT)
2010     +#define IRQS_PER_CHUNK (1UL << IRQS_PER_CHUNK_SHIFT)
2011    
2012     static unsigned long *lpi_bitmap;
2013     static u32 lpi_chunks;
2014     @@ -1320,11 +1320,10 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id,
2015    
2016     dev = kzalloc(sizeof(*dev), GFP_KERNEL);
2017     /*
2018     - * At least one bit of EventID is being used, hence a minimum
2019     - * of two entries. No, the architecture doesn't let you
2020     - * express an ITT with a single entry.
2021     + * We allocate at least one chunk worth of LPIs bet device,
2022     + * and thus that many ITEs. The device may require less though.
2023     */
2024     - nr_ites = max(2UL, roundup_pow_of_two(nvecs));
2025     + nr_ites = max(IRQS_PER_CHUNK, roundup_pow_of_two(nvecs));
2026     sz = nr_ites * its->ite_size;
2027     sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1;
2028     itt = kzalloc(sz, GFP_KERNEL);
2029     diff --git a/drivers/leds/leds-pm8058.c b/drivers/leds/leds-pm8058.c
2030     index a52674327857..8988ba3b2d65 100644
2031     --- a/drivers/leds/leds-pm8058.c
2032     +++ b/drivers/leds/leds-pm8058.c
2033     @@ -106,7 +106,7 @@ static int pm8058_led_probe(struct platform_device *pdev)
2034     if (!led)
2035     return -ENOMEM;
2036    
2037     - led->ledtype = (u32)of_device_get_match_data(&pdev->dev);
2038     + led->ledtype = (u32)(unsigned long)of_device_get_match_data(&pdev->dev);
2039    
2040     map = dev_get_regmap(pdev->dev.parent, NULL);
2041     if (!map) {
2042     diff --git a/drivers/md/md.c b/drivers/md/md.c
2043     index 27d8bb21e04f..a7bc70334f0e 100644
2044     --- a/drivers/md/md.c
2045     +++ b/drivers/md/md.c
2046     @@ -4826,8 +4826,10 @@ array_size_store(struct mddev *mddev, const char *buf, size_t len)
2047     return err;
2048    
2049     /* cluster raid doesn't support change array_sectors */
2050     - if (mddev_is_clustered(mddev))
2051     + if (mddev_is_clustered(mddev)) {
2052     + mddev_unlock(mddev);
2053     return -EINVAL;
2054     + }
2055    
2056     if (strncmp(buf, "default", 7) == 0) {
2057     if (mddev->pers)
2058     diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
2059     index 475a7a1bcfe0..4493be50fc6a 100644
2060     --- a/drivers/md/raid5.c
2061     +++ b/drivers/md/raid5.c
2062     @@ -3391,9 +3391,20 @@ static int fetch_block(struct stripe_head *sh, struct stripe_head_state *s,
2063     BUG_ON(test_bit(R5_Wantcompute, &dev->flags));
2064     BUG_ON(test_bit(R5_Wantread, &dev->flags));
2065     BUG_ON(sh->batch_head);
2066     +
2067     + /*
2068     + * In the raid6 case if the only non-uptodate disk is P
2069     + * then we already trusted P to compute the other failed
2070     + * drives. It is safe to compute rather than re-read P.
2071     + * In other cases we only compute blocks from failed
2072     + * devices, otherwise check/repair might fail to detect
2073     + * a real inconsistency.
2074     + */
2075     +
2076     if ((s->uptodate == disks - 1) &&
2077     + ((sh->qd_idx >= 0 && sh->pd_idx == disk_idx) ||
2078     (s->failed && (disk_idx == s->failed_num[0] ||
2079     - disk_idx == s->failed_num[1]))) {
2080     + disk_idx == s->failed_num[1])))) {
2081     /* have disk failed, and we're requested to fetch it;
2082     * do compute it
2083     */
2084     diff --git a/drivers/media/i2c/soc_camera/ov6650.c b/drivers/media/i2c/soc_camera/ov6650.c
2085     index 4bf2995e1cb8..8f85910eda5d 100644
2086     --- a/drivers/media/i2c/soc_camera/ov6650.c
2087     +++ b/drivers/media/i2c/soc_camera/ov6650.c
2088     @@ -1033,7 +1033,7 @@ static int ov6650_probe(struct i2c_client *client,
2089     priv->code = MEDIA_BUS_FMT_YUYV8_2X8;
2090     priv->colorspace = V4L2_COLORSPACE_JPEG;
2091    
2092     - priv->clk = v4l2_clk_get(&client->dev, "mclk");
2093     + priv->clk = v4l2_clk_get(&client->dev, NULL);
2094     if (IS_ERR(priv->clk)) {
2095     ret = PTR_ERR(priv->clk);
2096     goto eclkget;
2097     diff --git a/drivers/media/pci/solo6x10/solo6x10-v4l2.c b/drivers/media/pci/solo6x10/solo6x10-v4l2.c
2098     index b4be47969b6b..e17d6b945c07 100644
2099     --- a/drivers/media/pci/solo6x10/solo6x10-v4l2.c
2100     +++ b/drivers/media/pci/solo6x10/solo6x10-v4l2.c
2101     @@ -341,6 +341,17 @@ static void solo_stop_streaming(struct vb2_queue *q)
2102     struct solo_dev *solo_dev = vb2_get_drv_priv(q);
2103    
2104     solo_stop_thread(solo_dev);
2105     +
2106     + spin_lock(&solo_dev->slock);
2107     + while (!list_empty(&solo_dev->vidq_active)) {
2108     + struct solo_vb2_buf *buf = list_entry(
2109     + solo_dev->vidq_active.next,
2110     + struct solo_vb2_buf, list);
2111     +
2112     + list_del(&buf->list);
2113     + vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
2114     + }
2115     + spin_unlock(&solo_dev->slock);
2116     INIT_LIST_HEAD(&solo_dev->vidq_active);
2117     }
2118    
2119     diff --git a/drivers/media/platform/vsp1/vsp1_drm.c b/drivers/media/platform/vsp1/vsp1_drm.c
2120     index cd209dccff1b..8e2aa3f8e52f 100644
2121     --- a/drivers/media/platform/vsp1/vsp1_drm.c
2122     +++ b/drivers/media/platform/vsp1/vsp1_drm.c
2123     @@ -596,6 +596,7 @@ int vsp1_drm_init(struct vsp1_device *vsp1)
2124     pipe->bru = &vsp1->bru->entity;
2125     pipe->lif = &vsp1->lif->entity;
2126     pipe->output = vsp1->wpf[0];
2127     + pipe->output->pipe = pipe;
2128    
2129     return 0;
2130     }
2131     diff --git a/drivers/media/platform/vsp1/vsp1_drv.c b/drivers/media/platform/vsp1/vsp1_drv.c
2132     index 57c713a4e1df..4ac1ff482a0b 100644
2133     --- a/drivers/media/platform/vsp1/vsp1_drv.c
2134     +++ b/drivers/media/platform/vsp1/vsp1_drv.c
2135     @@ -509,7 +509,13 @@ static int __maybe_unused vsp1_pm_suspend(struct device *dev)
2136     {
2137     struct vsp1_device *vsp1 = dev_get_drvdata(dev);
2138    
2139     - vsp1_pipelines_suspend(vsp1);
2140     + /*
2141     + * When used as part of a display pipeline, the VSP is stopped and
2142     + * restarted explicitly by the DU.
2143     + */
2144     + if (!vsp1->drm)
2145     + vsp1_pipelines_suspend(vsp1);
2146     +
2147     pm_runtime_force_suspend(vsp1->dev);
2148    
2149     return 0;
2150     @@ -520,7 +526,13 @@ static int __maybe_unused vsp1_pm_resume(struct device *dev)
2151     struct vsp1_device *vsp1 = dev_get_drvdata(dev);
2152    
2153     pm_runtime_force_resume(vsp1->dev);
2154     - vsp1_pipelines_resume(vsp1);
2155     +
2156     + /*
2157     + * When used as part of a display pipeline, the VSP is stopped and
2158     + * restarted explicitly by the DU.
2159     + */
2160     + if (!vsp1->drm)
2161     + vsp1_pipelines_resume(vsp1);
2162    
2163     return 0;
2164     }
2165     diff --git a/drivers/media/platform/vsp1/vsp1_video.c b/drivers/media/platform/vsp1/vsp1_video.c
2166     index d351b9c768d2..743aa0febc09 100644
2167     --- a/drivers/media/platform/vsp1/vsp1_video.c
2168     +++ b/drivers/media/platform/vsp1/vsp1_video.c
2169     @@ -792,6 +792,7 @@ static int vsp1_video_start_streaming(struct vb2_queue *vq, unsigned int count)
2170     {
2171     struct vsp1_video *video = vb2_get_drv_priv(vq);
2172     struct vsp1_pipeline *pipe = video->rwpf->pipe;
2173     + bool start_pipeline = false;
2174     unsigned long flags;
2175     int ret;
2176    
2177     @@ -802,11 +803,23 @@ static int vsp1_video_start_streaming(struct vb2_queue *vq, unsigned int count)
2178     mutex_unlock(&pipe->lock);
2179     return ret;
2180     }
2181     +
2182     + start_pipeline = true;
2183     }
2184    
2185     pipe->stream_count++;
2186     mutex_unlock(&pipe->lock);
2187    
2188     + /*
2189     + * vsp1_pipeline_ready() is not sufficient to establish that all streams
2190     + * are prepared and the pipeline is configured, as multiple streams
2191     + * can race through streamon with buffers already queued; Therefore we
2192     + * don't even attempt to start the pipeline until the last stream has
2193     + * called through here.
2194     + */
2195     + if (!start_pipeline)
2196     + return 0;
2197     +
2198     spin_lock_irqsave(&pipe->irqlock, flags);
2199     if (vsp1_pipeline_ready(pipe))
2200     vsp1_video_pipeline_run(pipe);
2201     diff --git a/drivers/media/usb/cpia2/cpia2_v4l.c b/drivers/media/usb/cpia2/cpia2_v4l.c
2202     index 9caea8344547..d793c630f1dd 100644
2203     --- a/drivers/media/usb/cpia2/cpia2_v4l.c
2204     +++ b/drivers/media/usb/cpia2/cpia2_v4l.c
2205     @@ -812,7 +812,7 @@ static int cpia2_querybuf(struct file *file, void *fh, struct v4l2_buffer *buf)
2206     struct camera_data *cam = video_drvdata(file);
2207    
2208     if(buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE ||
2209     - buf->index > cam->num_frames)
2210     + buf->index >= cam->num_frames)
2211     return -EINVAL;
2212    
2213     buf->m.offset = cam->buffers[buf->index].data - cam->frame_buffer;
2214     @@ -863,7 +863,7 @@ static int cpia2_qbuf(struct file *file, void *fh, struct v4l2_buffer *buf)
2215    
2216     if(buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE ||
2217     buf->memory != V4L2_MEMORY_MMAP ||
2218     - buf->index > cam->num_frames)
2219     + buf->index >= cam->num_frames)
2220     return -EINVAL;
2221    
2222     DBG("QBUF #%d\n", buf->index);
2223     diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
2224     index 31983366090a..2bf79ba4a39e 100644
2225     --- a/drivers/misc/Makefile
2226     +++ b/drivers/misc/Makefile
2227     @@ -61,6 +61,8 @@ lkdtm-$(CONFIG_LKDTM) += lkdtm_perms.o
2228     lkdtm-$(CONFIG_LKDTM) += lkdtm_rodata_objcopy.o
2229     lkdtm-$(CONFIG_LKDTM) += lkdtm_usercopy.o
2230    
2231     +KCOV_INSTRUMENT_lkdtm_rodata.o := n
2232     +
2233     OBJCOPYFLAGS :=
2234     OBJCOPYFLAGS_lkdtm_rodata_objcopy.o := \
2235     --set-section-flags .text=alloc,readonly \
2236     diff --git a/drivers/misc/enclosure.c b/drivers/misc/enclosure.c
2237     index cc91f7b3d90c..eb29113e0bac 100644
2238     --- a/drivers/misc/enclosure.c
2239     +++ b/drivers/misc/enclosure.c
2240     @@ -148,7 +148,7 @@ enclosure_register(struct device *dev, const char *name, int components,
2241     for (i = 0; i < components; i++) {
2242     edev->component[i].number = -1;
2243     edev->component[i].slot = -1;
2244     - edev->component[i].power_status = 1;
2245     + edev->component[i].power_status = -1;
2246     }
2247    
2248     mutex_lock(&container_list_lock);
2249     @@ -600,6 +600,11 @@ static ssize_t get_component_power_status(struct device *cdev,
2250    
2251     if (edev->cb->get_power_status)
2252     edev->cb->get_power_status(edev, ecomp);
2253     +
2254     + /* If still uninitialized, the callback failed or does not exist. */
2255     + if (ecomp->power_status == -1)
2256     + return (edev->cb->get_power_status) ? -EIO : -ENOTTY;
2257     +
2258     return snprintf(buf, 40, "%s\n", ecomp->power_status ? "on" : "off");
2259     }
2260    
2261     diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c
2262     index d1570f512f0b..f8f12ccc6471 100644
2263     --- a/drivers/mtd/nand/fsl_ifc_nand.c
2264     +++ b/drivers/mtd/nand/fsl_ifc_nand.c
2265     @@ -907,6 +907,13 @@ static int fsl_ifc_chip_init(struct fsl_ifc_mtd *priv)
2266     if (ctrl->version == FSL_IFC_VERSION_1_1_0)
2267     fsl_ifc_sram_init(priv);
2268    
2269     + /*
2270     + * As IFC version 2.0.0 has 16KB of internal SRAM as compared to older
2271     + * versions which had 8KB. Hence bufnum mask needs to be updated.
2272     + */
2273     + if (ctrl->version >= FSL_IFC_VERSION_2_0_0)
2274     + priv->bufnum_mask = (priv->bufnum_mask * 2) + 1;
2275     +
2276     return 0;
2277     }
2278    
2279     diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
2280     index 21c03086bb7f..a3e86e52640a 100644
2281     --- a/drivers/mtd/nand/nand_base.c
2282     +++ b/drivers/mtd/nand/nand_base.c
2283     @@ -715,7 +715,8 @@ static void nand_command(struct mtd_info *mtd, unsigned int command,
2284     chip->cmd_ctrl(mtd, readcmd, ctrl);
2285     ctrl &= ~NAND_CTRL_CHANGE;
2286     }
2287     - chip->cmd_ctrl(mtd, command, ctrl);
2288     + if (command != NAND_CMD_NONE)
2289     + chip->cmd_ctrl(mtd, command, ctrl);
2290    
2291     /* Address cycle, when necessary */
2292     ctrl = NAND_CTRL_ALE | NAND_CTRL_CHANGE;
2293     @@ -744,6 +745,7 @@ static void nand_command(struct mtd_info *mtd, unsigned int command,
2294     */
2295     switch (command) {
2296    
2297     + case NAND_CMD_NONE:
2298     case NAND_CMD_PAGEPROG:
2299     case NAND_CMD_ERASE1:
2300     case NAND_CMD_ERASE2:
2301     @@ -806,7 +808,9 @@ static void nand_command_lp(struct mtd_info *mtd, unsigned int command,
2302     }
2303    
2304     /* Command latch cycle */
2305     - chip->cmd_ctrl(mtd, command, NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
2306     + if (command != NAND_CMD_NONE)
2307     + chip->cmd_ctrl(mtd, command,
2308     + NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
2309    
2310     if (column != -1 || page_addr != -1) {
2311     int ctrl = NAND_CTRL_CHANGE | NAND_NCE | NAND_ALE;
2312     @@ -842,6 +846,7 @@ static void nand_command_lp(struct mtd_info *mtd, unsigned int command,
2313     */
2314     switch (command) {
2315    
2316     + case NAND_CMD_NONE:
2317     case NAND_CMD_CACHEDPROG:
2318     case NAND_CMD_PAGEPROG:
2319     case NAND_CMD_ERASE1:
2320     diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
2321     index 63d61c084815..c3f3096b24ae 100644
2322     --- a/drivers/net/bonding/bond_main.c
2323     +++ b/drivers/net/bonding/bond_main.c
2324     @@ -371,9 +371,10 @@ int bond_set_carrier(struct bonding *bond)
2325     /* Get link speed and duplex from the slave's base driver
2326     * using ethtool. If for some reason the call fails or the
2327     * values are invalid, set speed and duplex to -1,
2328     - * and return.
2329     + * and return. Return 1 if speed or duplex settings are
2330     + * UNKNOWN; 0 otherwise.
2331     */
2332     -static void bond_update_speed_duplex(struct slave *slave)
2333     +static int bond_update_speed_duplex(struct slave *slave)
2334     {
2335     struct net_device *slave_dev = slave->dev;
2336     struct ethtool_link_ksettings ecmd;
2337     @@ -383,24 +384,27 @@ static void bond_update_speed_duplex(struct slave *slave)
2338     slave->duplex = DUPLEX_UNKNOWN;
2339    
2340     res = __ethtool_get_link_ksettings(slave_dev, &ecmd);
2341     - if (res < 0)
2342     - return;
2343     -
2344     - if (ecmd.base.speed == 0 || ecmd.base.speed == ((__u32)-1))
2345     - return;
2346     -
2347     + if (res < 0) {
2348     + slave->link = BOND_LINK_DOWN;
2349     + return 1;
2350     + }
2351     + if (ecmd.base.speed == 0 || ecmd.base.speed == ((__u32)-1)) {
2352     + slave->link = BOND_LINK_DOWN;
2353     + return 1;
2354     + }
2355     switch (ecmd.base.duplex) {
2356     case DUPLEX_FULL:
2357     case DUPLEX_HALF:
2358     break;
2359     default:
2360     - return;
2361     + slave->link = BOND_LINK_DOWN;
2362     + return 1;
2363     }
2364    
2365     slave->speed = ecmd.base.speed;
2366     slave->duplex = ecmd.base.duplex;
2367    
2368     - return;
2369     + return 0;
2370     }
2371    
2372     const char *bond_slave_link_status(s8 link)
2373     @@ -3327,12 +3331,17 @@ static void bond_fold_stats(struct rtnl_link_stats64 *_res,
2374     for (i = 0; i < sizeof(*_res) / sizeof(u64); i++) {
2375     u64 nv = new[i];
2376     u64 ov = old[i];
2377     + s64 delta = nv - ov;
2378    
2379     /* detects if this particular field is 32bit only */
2380     if (((nv | ov) >> 32) == 0)
2381     - res[i] += (u32)nv - (u32)ov;
2382     - else
2383     - res[i] += nv - ov;
2384     + delta = (s64)(s32)((u32)nv - (u32)ov);
2385     +
2386     + /* filter anomalies, some drivers reset their stats
2387     + * at down/up events.
2388     + */
2389     + if (delta > 0)
2390     + res[i] += delta;
2391     }
2392     }
2393    
2394     diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
2395     index 5390ae89136c..71611bd6384b 100644
2396     --- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
2397     +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
2398     @@ -560,6 +560,7 @@ static void xgene_enet_cle_bypass(struct xgene_enet_pdata *pdata,
2399     xgene_enet_rd_csr(pdata, CLE_BYPASS_REG0_0_ADDR, &cb);
2400     cb |= CFG_CLE_BYPASS_EN0;
2401     CFG_CLE_IP_PROTOCOL0_SET(&cb, 3);
2402     + CFG_CLE_IP_HDR_LEN_SET(&cb, 0);
2403     xgene_enet_wr_csr(pdata, CLE_BYPASS_REG0_0_ADDR, cb);
2404    
2405     xgene_enet_rd_csr(pdata, CLE_BYPASS_REG1_0_ADDR, &cb);
2406     diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h
2407     index 06e598c8bc16..c82faf1a88b8 100644
2408     --- a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h
2409     +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h
2410     @@ -163,6 +163,7 @@ enum xgene_enet_rm {
2411     #define CFG_RXCLK_MUXSEL0_SET(dst, val) xgene_set_bits(dst, val, 26, 3)
2412    
2413     #define CFG_CLE_IP_PROTOCOL0_SET(dst, val) xgene_set_bits(dst, val, 16, 2)
2414     +#define CFG_CLE_IP_HDR_LEN_SET(dst, val) xgene_set_bits(dst, val, 8, 5)
2415     #define CFG_CLE_DSTQID0_SET(dst, val) xgene_set_bits(dst, val, 0, 12)
2416     #define CFG_CLE_FPSEL0_SET(dst, val) xgene_set_bits(dst, val, 16, 4)
2417     #define CFG_MACMODE_SET(dst, val) xgene_set_bits(dst, val, 18, 2)
2418     diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
2419     index 8158d4698734..651f308cdc60 100644
2420     --- a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
2421     +++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
2422     @@ -505,14 +505,24 @@ static netdev_tx_t xgene_enet_start_xmit(struct sk_buff *skb,
2423     return NETDEV_TX_OK;
2424     }
2425    
2426     -static void xgene_enet_skip_csum(struct sk_buff *skb)
2427     +static void xgene_enet_rx_csum(struct sk_buff *skb)
2428     {
2429     + struct net_device *ndev = skb->dev;
2430     struct iphdr *iph = ip_hdr(skb);
2431    
2432     - if (!ip_is_fragment(iph) ||
2433     - (iph->protocol != IPPROTO_TCP && iph->protocol != IPPROTO_UDP)) {
2434     - skb->ip_summed = CHECKSUM_UNNECESSARY;
2435     - }
2436     + if (!(ndev->features & NETIF_F_RXCSUM))
2437     + return;
2438     +
2439     + if (skb->protocol != htons(ETH_P_IP))
2440     + return;
2441     +
2442     + if (ip_is_fragment(iph))
2443     + return;
2444     +
2445     + if (iph->protocol != IPPROTO_TCP && iph->protocol != IPPROTO_UDP)
2446     + return;
2447     +
2448     + skb->ip_summed = CHECKSUM_UNNECESSARY;
2449     }
2450    
2451     static int xgene_enet_rx_frame(struct xgene_enet_desc_ring *rx_ring,
2452     @@ -537,9 +547,9 @@ static int xgene_enet_rx_frame(struct xgene_enet_desc_ring *rx_ring,
2453     buf_pool->rx_skb[skb_index] = NULL;
2454    
2455     /* checking for error */
2456     - status = (GET_VAL(ELERR, le64_to_cpu(raw_desc->m0)) << LERR_LEN) ||
2457     + status = (GET_VAL(ELERR, le64_to_cpu(raw_desc->m0)) << LERR_LEN) |
2458     GET_VAL(LERR, le64_to_cpu(raw_desc->m0));
2459     - if (unlikely(status > 2)) {
2460     + if (unlikely(status)) {
2461     dev_kfree_skb_any(skb);
2462     xgene_enet_parse_error(rx_ring, netdev_priv(rx_ring->ndev),
2463     status);
2464     @@ -555,10 +565,7 @@ static int xgene_enet_rx_frame(struct xgene_enet_desc_ring *rx_ring,
2465    
2466     skb_checksum_none_assert(skb);
2467     skb->protocol = eth_type_trans(skb, ndev);
2468     - if (likely((ndev->features & NETIF_F_IP_CSUM) &&
2469     - skb->protocol == htons(ETH_P_IP))) {
2470     - xgene_enet_skip_csum(skb);
2471     - }
2472     + xgene_enet_rx_csum(skb);
2473    
2474     rx_ring->rx_packets++;
2475     rx_ring->rx_bytes += datalen;
2476     @@ -1725,7 +1732,7 @@ static int xgene_enet_probe(struct platform_device *pdev)
2477     xgene_enet_setup_ops(pdata);
2478    
2479     if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) {
2480     - ndev->features |= NETIF_F_TSO;
2481     + ndev->features |= NETIF_F_TSO | NETIF_F_RXCSUM;
2482     spin_lock_init(&pdata->mss_lock);
2483     }
2484     ndev->hw_features = ndev->features;
2485     diff --git a/drivers/net/ethernet/broadcom/bgmac-bcma.c b/drivers/net/ethernet/broadcom/bgmac-bcma.c
2486     index c16ec3a51876..1ee11b600645 100644
2487     --- a/drivers/net/ethernet/broadcom/bgmac-bcma.c
2488     +++ b/drivers/net/ethernet/broadcom/bgmac-bcma.c
2489     @@ -11,6 +11,7 @@
2490     #include <linux/bcma/bcma.h>
2491     #include <linux/brcmphy.h>
2492     #include <linux/etherdevice.h>
2493     +#include <linux/of_net.h>
2494     #include "bgmac.h"
2495    
2496     static inline bool bgmac_is_bcm4707_family(struct bcma_device *core)
2497     @@ -96,7 +97,7 @@ static int bgmac_probe(struct bcma_device *core)
2498     struct ssb_sprom *sprom = &core->bus->sprom;
2499     struct mii_bus *mii_bus;
2500     struct bgmac *bgmac;
2501     - u8 *mac;
2502     + const u8 *mac = NULL;
2503     int err;
2504    
2505     bgmac = kzalloc(sizeof(*bgmac), GFP_KERNEL);
2506     @@ -110,21 +111,27 @@ static int bgmac_probe(struct bcma_device *core)
2507    
2508     bcma_set_drvdata(core, bgmac);
2509    
2510     - switch (core->core_unit) {
2511     - case 0:
2512     - mac = sprom->et0mac;
2513     - break;
2514     - case 1:
2515     - mac = sprom->et1mac;
2516     - break;
2517     - case 2:
2518     - mac = sprom->et2mac;
2519     - break;
2520     - default:
2521     - dev_err(bgmac->dev, "Unsupported core_unit %d\n",
2522     - core->core_unit);
2523     - err = -ENOTSUPP;
2524     - goto err;
2525     + if (bgmac->dev->of_node)
2526     + mac = of_get_mac_address(bgmac->dev->of_node);
2527     +
2528     + /* If no MAC address assigned via device tree, check SPROM */
2529     + if (!mac) {
2530     + switch (core->core_unit) {
2531     + case 0:
2532     + mac = sprom->et0mac;
2533     + break;
2534     + case 1:
2535     + mac = sprom->et1mac;
2536     + break;
2537     + case 2:
2538     + mac = sprom->et2mac;
2539     + break;
2540     + default:
2541     + dev_err(bgmac->dev, "Unsupported core_unit %d\n",
2542     + core->core_unit);
2543     + err = -ENOTSUPP;
2544     + goto err;
2545     + }
2546     }
2547    
2548     ether_addr_copy(bgmac->mac_addr, mac);
2549     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
2550     index bbb3641eddcb..3aa993bbafd9 100644
2551     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
2552     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
2553     @@ -1498,12 +1498,16 @@ static int bnxt_async_event_process(struct bnxt *bp,
2554    
2555     if (BNXT_VF(bp))
2556     goto async_event_process_exit;
2557     - if (data1 & 0x20000) {
2558     +
2559     + /* print unsupported speed warning in forced speed mode only */
2560     + if (!(link_info->autoneg & BNXT_AUTONEG_SPEED) &&
2561     + (data1 & 0x20000)) {
2562     u16 fw_speed = link_info->force_link_speed;
2563     u32 speed = bnxt_fw_to_ethtool_speed(fw_speed);
2564    
2565     - netdev_warn(bp->dev, "Link speed %d no longer supported\n",
2566     - speed);
2567     + if (speed != SPEED_UNKNOWN)
2568     + netdev_warn(bp->dev, "Link speed %d no longer supported\n",
2569     + speed);
2570     }
2571     set_bit(BNXT_LINK_SPEED_CHNG_SP_EVENT, &bp->sp_event);
2572     /* fall thru */
2573     diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
2574     index 8a37012c9c89..c75d4ea9342b 100644
2575     --- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c
2576     +++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
2577     @@ -1576,6 +1576,11 @@ static int nicvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2578     nic->pdev = pdev;
2579     nic->pnicvf = nic;
2580     nic->max_queues = qcount;
2581     + /* If no of CPUs are too low, there won't be any queues left
2582     + * for XDP_TX, hence double it.
2583     + */
2584     + if (!nic->t88)
2585     + nic->max_queues *= 2;
2586    
2587     /* MAP VF's configuration registers */
2588     nic->reg_base = pcim_iomap(pdev, PCI_CFG_REG_BAR_NUM, 0);
2589     diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
2590     index 262587240c86..0437149f5939 100644
2591     --- a/drivers/net/ethernet/faraday/ftgmac100.c
2592     +++ b/drivers/net/ethernet/faraday/ftgmac100.c
2593     @@ -28,6 +28,7 @@
2594     #include <linux/io.h>
2595     #include <linux/module.h>
2596     #include <linux/netdevice.h>
2597     +#include <linux/of.h>
2598     #include <linux/phy.h>
2599     #include <linux/platform_device.h>
2600     #include <net/ip.h>
2601     diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
2602     index 917091871259..dd6e07c748f5 100644
2603     --- a/drivers/net/ethernet/freescale/fec_main.c
2604     +++ b/drivers/net/ethernet/freescale/fec_main.c
2605     @@ -3209,7 +3209,7 @@ static int fec_enet_init(struct net_device *ndev)
2606     }
2607    
2608     #ifdef CONFIG_OF
2609     -static void fec_reset_phy(struct platform_device *pdev)
2610     +static int fec_reset_phy(struct platform_device *pdev)
2611     {
2612     int err, phy_reset;
2613     bool active_high = false;
2614     @@ -3217,7 +3217,7 @@ static void fec_reset_phy(struct platform_device *pdev)
2615     struct device_node *np = pdev->dev.of_node;
2616    
2617     if (!np)
2618     - return;
2619     + return 0;
2620    
2621     of_property_read_u32(np, "phy-reset-duration", &msec);
2622     /* A sane reset duration should not be longer than 1s */
2623     @@ -3225,8 +3225,10 @@ static void fec_reset_phy(struct platform_device *pdev)
2624     msec = 1;
2625    
2626     phy_reset = of_get_named_gpio(np, "phy-reset-gpios", 0);
2627     - if (!gpio_is_valid(phy_reset))
2628     - return;
2629     + if (phy_reset == -EPROBE_DEFER)
2630     + return phy_reset;
2631     + else if (!gpio_is_valid(phy_reset))
2632     + return 0;
2633    
2634     active_high = of_property_read_bool(np, "phy-reset-active-high");
2635    
2636     @@ -3235,7 +3237,7 @@ static void fec_reset_phy(struct platform_device *pdev)
2637     "phy-reset");
2638     if (err) {
2639     dev_err(&pdev->dev, "failed to get phy-reset-gpios: %d\n", err);
2640     - return;
2641     + return err;
2642     }
2643    
2644     if (msec > 20)
2645     @@ -3244,14 +3246,17 @@ static void fec_reset_phy(struct platform_device *pdev)
2646     usleep_range(msec * 1000, msec * 1000 + 1000);
2647    
2648     gpio_set_value_cansleep(phy_reset, !active_high);
2649     +
2650     + return 0;
2651     }
2652     #else /* CONFIG_OF */
2653     -static void fec_reset_phy(struct platform_device *pdev)
2654     +static int fec_reset_phy(struct platform_device *pdev)
2655     {
2656     /*
2657     * In case of platform probe, the reset has been done
2658     * by machine code.
2659     */
2660     + return 0;
2661     }
2662     #endif /* CONFIG_OF */
2663    
2664     @@ -3422,6 +3427,7 @@ fec_probe(struct platform_device *pdev)
2665     if (ret) {
2666     dev_err(&pdev->dev,
2667     "Failed to enable phy regulator: %d\n", ret);
2668     + clk_disable_unprepare(fep->clk_ipg);
2669     goto failed_regulator;
2670     }
2671     } else {
2672     @@ -3434,7 +3440,9 @@ fec_probe(struct platform_device *pdev)
2673     pm_runtime_set_active(&pdev->dev);
2674     pm_runtime_enable(&pdev->dev);
2675    
2676     - fec_reset_phy(pdev);
2677     + ret = fec_reset_phy(pdev);
2678     + if (ret)
2679     + goto failed_reset;
2680    
2681     if (fep->bufdesc_ex)
2682     fec_ptp_init(pdev);
2683     @@ -3495,8 +3503,10 @@ fec_probe(struct platform_device *pdev)
2684     fec_ptp_stop(pdev);
2685     if (fep->reg_phy)
2686     regulator_disable(fep->reg_phy);
2687     +failed_reset:
2688     + pm_runtime_put(&pdev->dev);
2689     + pm_runtime_disable(&pdev->dev);
2690     failed_regulator:
2691     - clk_disable_unprepare(fep->clk_ipg);
2692     failed_clk_ipg:
2693     fec_enet_clk_enable(ndev, false);
2694     failed_clk:
2695     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
2696     index 2d0cb609adc3..b7c8433a7a37 100644
2697     --- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
2698     +++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
2699     @@ -773,8 +773,9 @@ static int hns_ae_get_rss(struct hnae_handle *handle, u32 *indir, u8 *key,
2700     memcpy(key, ppe_cb->rss_key, HNS_PPEV2_RSS_KEY_SIZE);
2701    
2702     /* update the current hash->queue mappings from the shadow RSS table */
2703     - memcpy(indir, ppe_cb->rss_indir_table,
2704     - HNS_PPEV2_RSS_IND_TBL_SIZE * sizeof(*indir));
2705     + if (indir)
2706     + memcpy(indir, ppe_cb->rss_indir_table,
2707     + HNS_PPEV2_RSS_IND_TBL_SIZE * sizeof(*indir));
2708    
2709     return 0;
2710     }
2711     @@ -785,15 +786,19 @@ static int hns_ae_set_rss(struct hnae_handle *handle, const u32 *indir,
2712     struct hns_ppe_cb *ppe_cb = hns_get_ppe_cb(handle);
2713    
2714     /* set the RSS Hash Key if specififed by the user */
2715     - if (key)
2716     - hns_ppe_set_rss_key(ppe_cb, (u32 *)key);
2717     + if (key) {
2718     + memcpy(ppe_cb->rss_key, key, HNS_PPEV2_RSS_KEY_SIZE);
2719     + hns_ppe_set_rss_key(ppe_cb, ppe_cb->rss_key);
2720     + }
2721    
2722     - /* update the shadow RSS table with user specified qids */
2723     - memcpy(ppe_cb->rss_indir_table, indir,
2724     - HNS_PPEV2_RSS_IND_TBL_SIZE * sizeof(*indir));
2725     + if (indir) {
2726     + /* update the shadow RSS table with user specified qids */
2727     + memcpy(ppe_cb->rss_indir_table, indir,
2728     + HNS_PPEV2_RSS_IND_TBL_SIZE * sizeof(*indir));
2729    
2730     - /* now update the hardware */
2731     - hns_ppe_set_indir_table(ppe_cb, ppe_cb->rss_indir_table);
2732     + /* now update the hardware */
2733     + hns_ppe_set_indir_table(ppe_cb, ppe_cb->rss_indir_table);
2734     + }
2735    
2736     return 0;
2737     }
2738     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
2739     index 1e1eb92998fb..02a03bccde7b 100644
2740     --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
2741     +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
2742     @@ -86,12 +86,11 @@ static void hns_gmac_disable(void *mac_drv, enum mac_commom_mode mode)
2743     dsaf_set_dev_bit(drv, GMAC_PORT_EN_REG, GMAC_PORT_RX_EN_B, 0);
2744     }
2745    
2746     -/**
2747     -*hns_gmac_get_en - get port enable
2748     -*@mac_drv:mac device
2749     -*@rx:rx enable
2750     -*@tx:tx enable
2751     -*/
2752     +/* hns_gmac_get_en - get port enable
2753     + * @mac_drv:mac device
2754     + * @rx:rx enable
2755     + * @tx:tx enable
2756     + */
2757     static void hns_gmac_get_en(void *mac_drv, u32 *rx, u32 *tx)
2758     {
2759     struct mac_driver *drv = (struct mac_driver *)mac_drv;
2760     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.h b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.h
2761     index c494fc52be74..62a12991ce9a 100644
2762     --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.h
2763     +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.h
2764     @@ -70,7 +70,7 @@ enum dsaf_roce_qos_sl {
2765     };
2766    
2767     #define DSAF_STATS_READ(p, offset) (*((u64 *)((u8 *)(p) + (offset))))
2768     -#define HNS_DSAF_IS_DEBUG(dev) (dev->dsaf_mode == DSAF_MODE_DISABLE_SP)
2769     +#define HNS_DSAF_IS_DEBUG(dev) ((dev)->dsaf_mode == DSAF_MODE_DISABLE_SP)
2770    
2771     enum hal_dsaf_mode {
2772     HRD_DSAF_NO_DSAF_MODE = 0x0,
2773     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c
2774     index f0ed80d6ef9c..f3be9ac47bfb 100644
2775     --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c
2776     +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_rcb.c
2777     @@ -430,7 +430,6 @@ static void hns_rcb_ring_pair_get_cfg(struct ring_pair_cb *ring_pair_cb)
2778     static int hns_rcb_get_port_in_comm(
2779     struct rcb_common_cb *rcb_common, int ring_idx)
2780     {
2781     -
2782     return ring_idx / (rcb_common->max_q_per_vf * rcb_common->max_vfn);
2783     }
2784    
2785     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2786     index c06845b7b666..a79e0a1100aa 100644
2787     --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2788     +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
2789     @@ -511,7 +511,8 @@ static void hns_nic_reuse_page(struct sk_buff *skb, int i,
2790     int last_offset;
2791     bool twobufs;
2792    
2793     - twobufs = ((PAGE_SIZE < 8192) && hnae_buf_size(ring) == HNS_BUFFER_SIZE_2048);
2794     + twobufs = ((PAGE_SIZE < 8192) &&
2795     + hnae_buf_size(ring) == HNS_BUFFER_SIZE_2048);
2796    
2797     desc = &ring->desc[ring->next_to_clean];
2798     size = le16_to_cpu(desc->rx.size);
2799     @@ -1700,7 +1701,7 @@ static void hns_nic_reset_subtask(struct hns_nic_priv *priv)
2800     static void hns_nic_service_event_complete(struct hns_nic_priv *priv)
2801     {
2802     WARN_ON(!test_bit(NIC_STATE_SERVICE_SCHED, &priv->state));
2803     -
2804     + /* make sure to commit the things */
2805     smp_mb__before_atomic();
2806     clear_bit(NIC_STATE_SERVICE_SCHED, &priv->state);
2807     }
2808     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
2809     index 87d5c94b2810..86a496d71995 100644
2810     --- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
2811     +++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
2812     @@ -1252,12 +1252,10 @@ hns_set_rss(struct net_device *netdev, const u32 *indir, const u8 *key,
2813    
2814     ops = priv->ae_handle->dev->ops;
2815    
2816     - /* currently hfunc can only be Toeplitz hash */
2817     - if (key ||
2818     - (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP))
2819     + if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP) {
2820     + netdev_err(netdev, "Invalid hfunc!\n");
2821     return -EOPNOTSUPP;
2822     - if (!indir)
2823     - return 0;
2824     + }
2825    
2826     return ops->set_rss(priv->ae_handle, indir, key, hfunc);
2827     }
2828     diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c b/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c
2829     index 5241e0873397..7041d83d48bf 100644
2830     --- a/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c
2831     +++ b/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c
2832     @@ -942,7 +942,7 @@ static void fm10k_self_test(struct net_device *dev,
2833    
2834     memset(data, 0, sizeof(*data) * FM10K_TEST_LEN);
2835    
2836     - if (FM10K_REMOVED(hw)) {
2837     + if (FM10K_REMOVED(hw->hw_addr)) {
2838     netif_err(interface, drv, dev,
2839     "Interface removed - test blocked\n");
2840     eth_test->flags |= ETH_TEST_FL_FAILED;
2841     diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
2842     index 92bc8846f1ba..f4569461dcb8 100644
2843     --- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
2844     +++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c
2845     @@ -1135,6 +1135,11 @@ static int i40e_get_eeprom_len(struct net_device *netdev)
2846     struct i40e_hw *hw = &np->vsi->back->hw;
2847     u32 val;
2848    
2849     +#define X722_EEPROM_SCOPE_LIMIT 0x5B9FFF
2850     + if (hw->mac.type == I40E_MAC_X722) {
2851     + val = X722_EEPROM_SCOPE_LIMIT + 1;
2852     + return val;
2853     + }
2854     val = (rd32(hw, I40E_GLPCI_LBARCTRL)
2855     & I40E_GLPCI_LBARCTRL_FL_SIZE_MASK)
2856     >> I40E_GLPCI_LBARCTRL_FL_SIZE_SHIFT;
2857     diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
2858     index becffd15c092..57c7456a5751 100644
2859     --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
2860     +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
2861     @@ -11142,10 +11142,12 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2862     round_jiffies(jiffies + pf->service_timer_period));
2863    
2864     /* add this PF to client device list and launch a client service task */
2865     - err = i40e_lan_add_device(pf);
2866     - if (err)
2867     - dev_info(&pdev->dev, "Failed to add PF to client API service list: %d\n",
2868     - err);
2869     + if (pf->flags & I40E_FLAG_IWARP_ENABLED) {
2870     + err = i40e_lan_add_device(pf);
2871     + if (err)
2872     + dev_info(&pdev->dev, "Failed to add PF to client API service list: %d\n",
2873     + err);
2874     + }
2875    
2876     #ifdef I40E_FCOE
2877     /* create FCoE interface */
2878     @@ -11323,10 +11325,11 @@ static void i40e_remove(struct pci_dev *pdev)
2879     i40e_vsi_release(pf->vsi[pf->lan_vsi]);
2880    
2881     /* remove attached clients */
2882     - ret_code = i40e_lan_del_device(pf);
2883     - if (ret_code) {
2884     - dev_warn(&pdev->dev, "Failed to delete client device: %d\n",
2885     - ret_code);
2886     + if (pf->flags & I40E_FLAG_IWARP_ENABLED) {
2887     + ret_code = i40e_lan_del_device(pf);
2888     + if (ret_code)
2889     + dev_warn(&pdev->dev, "Failed to delete client device: %d\n",
2890     + ret_code);
2891     }
2892    
2893     /* shutdown and destroy the HMC */
2894     diff --git a/drivers/net/ethernet/intel/i40e/i40e_nvm.c b/drivers/net/ethernet/intel/i40e/i40e_nvm.c
2895     index 954efe3118db..abe290bfc638 100644
2896     --- a/drivers/net/ethernet/intel/i40e/i40e_nvm.c
2897     +++ b/drivers/net/ethernet/intel/i40e/i40e_nvm.c
2898     @@ -292,14 +292,14 @@ i40e_status i40e_read_nvm_word(struct i40e_hw *hw, u16 offset,
2899     {
2900     enum i40e_status_code ret_code = 0;
2901    
2902     - if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) {
2903     - ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
2904     - if (!ret_code) {
2905     + ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
2906     + if (!ret_code) {
2907     + if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) {
2908     ret_code = i40e_read_nvm_word_aq(hw, offset, data);
2909     - i40e_release_nvm(hw);
2910     + } else {
2911     + ret_code = i40e_read_nvm_word_srctl(hw, offset, data);
2912     }
2913     - } else {
2914     - ret_code = i40e_read_nvm_word_srctl(hw, offset, data);
2915     + i40e_release_nvm(hw);
2916     }
2917     return ret_code;
2918     }
2919     diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
2920     index 28b640fa2e35..2e12ccf73dba 100644
2921     --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
2922     +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
2923     @@ -1820,6 +1820,7 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)
2924     */
2925     if (unlikely(i40e_test_staterr(rx_desc, BIT(I40E_RXD_QW1_ERROR_SHIFT)))) {
2926     dev_kfree_skb_any(skb);
2927     + skb = NULL;
2928     continue;
2929     }
2930    
2931     diff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
2932     index 90ebc5ac16fd..7bfed441c466 100644
2933     --- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
2934     +++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
2935     @@ -1262,6 +1262,7 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget)
2936     */
2937     if (unlikely(i40e_test_staterr(rx_desc, BIT(I40E_RXD_QW1_ERROR_SHIFT)))) {
2938     dev_kfree_skb_any(skb);
2939     + skb = NULL;
2940     continue;
2941     }
2942    
2943     diff --git a/drivers/net/ethernet/qlogic/qed/qed_cxt.c b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
2944     index ed014bdbbabd..457e30427535 100644
2945     --- a/drivers/net/ethernet/qlogic/qed/qed_cxt.c
2946     +++ b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
2947     @@ -271,16 +271,34 @@ struct qed_tm_iids {
2948     u32 per_vf_tids;
2949     };
2950    
2951     -static void qed_cxt_tm_iids(struct qed_cxt_mngr *p_mngr,
2952     +static void qed_cxt_tm_iids(struct qed_hwfn *p_hwfn,
2953     + struct qed_cxt_mngr *p_mngr,
2954     struct qed_tm_iids *iids)
2955     {
2956     - u32 i, j;
2957     -
2958     - for (i = 0; i < MAX_CONN_TYPES; i++) {
2959     + bool tm_vf_required = false;
2960     + bool tm_required = false;
2961     + int i, j;
2962     +
2963     + /* Timers is a special case -> we don't count how many cids require
2964     + * timers but what's the max cid that will be used by the timer block.
2965     + * therefore we traverse in reverse order, and once we hit a protocol
2966     + * that requires the timers memory, we'll sum all the protocols up
2967     + * to that one.
2968     + */
2969     + for (i = MAX_CONN_TYPES - 1; i >= 0; i--) {
2970     struct qed_conn_type_cfg *p_cfg = &p_mngr->conn_cfg[i];
2971    
2972     - if (tm_cid_proto(i)) {
2973     + if (tm_cid_proto(i) || tm_required) {
2974     + if (p_cfg->cid_count)
2975     + tm_required = true;
2976     +
2977     iids->pf_cids += p_cfg->cid_count;
2978     + }
2979     +
2980     + if (tm_cid_proto(i) || tm_vf_required) {
2981     + if (p_cfg->cids_per_vf)
2982     + tm_vf_required = true;
2983     +
2984     iids->per_vf_cids += p_cfg->cids_per_vf;
2985     }
2986     }
2987     @@ -696,7 +714,7 @@ int qed_cxt_cfg_ilt_compute(struct qed_hwfn *p_hwfn)
2988    
2989     /* TM PF */
2990     p_cli = &p_mngr->clients[ILT_CLI_TM];
2991     - qed_cxt_tm_iids(p_mngr, &tm_iids);
2992     + qed_cxt_tm_iids(p_hwfn, p_mngr, &tm_iids);
2993     total = tm_iids.pf_cids + tm_iids.pf_tids_total;
2994     if (total) {
2995     p_blk = &p_cli->pf_blks[0];
2996     @@ -1591,7 +1609,7 @@ static void qed_tm_init_pf(struct qed_hwfn *p_hwfn)
2997     u8 i;
2998    
2999     memset(&tm_iids, 0, sizeof(tm_iids));
3000     - qed_cxt_tm_iids(p_mngr, &tm_iids);
3001     + qed_cxt_tm_iids(p_hwfn, p_mngr, &tm_iids);
3002    
3003     /* @@@TBD No pre-scan for now */
3004    
3005     diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c
3006     index 333c7442e48a..dba3fbe4800e 100644
3007     --- a/drivers/net/ethernet/qlogic/qed/qed_main.c
3008     +++ b/drivers/net/ethernet/qlogic/qed/qed_main.c
3009     @@ -711,7 +711,8 @@ static int qed_slowpath_setup_int(struct qed_dev *cdev,
3010     cdev->int_params.fp_msix_cnt = cdev->int_params.out.num_vectors -
3011     cdev->num_hwfns;
3012    
3013     - if (!IS_ENABLED(CONFIG_QED_RDMA))
3014     + if (!IS_ENABLED(CONFIG_QED_RDMA) ||
3015     + QED_LEADING_HWFN(cdev)->hw_info.personality != QED_PCI_ETH_ROCE)
3016     return 0;
3017    
3018     for_each_hwfn(cdev, i)
3019     diff --git a/drivers/net/ethernet/qlogic/qed/qed_sriov.c b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
3020     index d2d6621fe0e5..48bc5c151336 100644
3021     --- a/drivers/net/ethernet/qlogic/qed/qed_sriov.c
3022     +++ b/drivers/net/ethernet/qlogic/qed/qed_sriov.c
3023     @@ -3573,6 +3573,7 @@ static int qed_get_vf_config(struct qed_dev *cdev,
3024    
3025     void qed_inform_vf_link_state(struct qed_hwfn *hwfn)
3026     {
3027     + struct qed_hwfn *lead_hwfn = QED_LEADING_HWFN(hwfn->cdev);
3028     struct qed_mcp_link_capabilities caps;
3029     struct qed_mcp_link_params params;
3030     struct qed_mcp_link_state link;
3031     @@ -3589,9 +3590,15 @@ void qed_inform_vf_link_state(struct qed_hwfn *hwfn)
3032     if (!vf_info)
3033     continue;
3034    
3035     - memcpy(&params, qed_mcp_get_link_params(hwfn), sizeof(params));
3036     - memcpy(&link, qed_mcp_get_link_state(hwfn), sizeof(link));
3037     - memcpy(&caps, qed_mcp_get_link_capabilities(hwfn),
3038     + /* Only hwfn0 is actually interested in the link speed.
3039     + * But since only it would receive an MFW indication of link,
3040     + * need to take configuration from it - otherwise things like
3041     + * rate limiting for hwfn1 VF would not work.
3042     + */
3043     + memcpy(&params, qed_mcp_get_link_params(lead_hwfn),
3044     + sizeof(params));
3045     + memcpy(&link, qed_mcp_get_link_state(lead_hwfn), sizeof(link));
3046     + memcpy(&caps, qed_mcp_get_link_capabilities(lead_hwfn),
3047     sizeof(caps));
3048    
3049     /* Modify link according to the VF's configured link state */
3050     diff --git a/drivers/net/ieee802154/adf7242.c b/drivers/net/ieee802154/adf7242.c
3051     index f355df7cf84a..1b980f12663a 100644
3052     --- a/drivers/net/ieee802154/adf7242.c
3053     +++ b/drivers/net/ieee802154/adf7242.c
3054     @@ -888,7 +888,7 @@ static struct ieee802154_ops adf7242_ops = {
3055     .set_cca_ed_level = adf7242_set_cca_ed_level,
3056     };
3057    
3058     -static void adf7242_debug(u8 irq1)
3059     +static void adf7242_debug(struct adf7242_local *lp, u8 irq1)
3060     {
3061     #ifdef DEBUG
3062     u8 stat;
3063     @@ -932,7 +932,7 @@ static irqreturn_t adf7242_isr(int irq, void *data)
3064     dev_err(&lp->spi->dev, "%s :ERROR IRQ1 = 0x%X\n",
3065     __func__, irq1);
3066    
3067     - adf7242_debug(irq1);
3068     + adf7242_debug(lp, irq1);
3069    
3070     xmit = test_bit(FLAG_XMIT, &lp->flags);
3071    
3072     diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c
3073     index 627eb825eb74..c747ab652665 100644
3074     --- a/drivers/net/ipvlan/ipvlan_core.c
3075     +++ b/drivers/net/ipvlan/ipvlan_core.c
3076     @@ -299,6 +299,10 @@ static int ipvlan_rcv_frame(struct ipvl_addr *addr, struct sk_buff **pskb,
3077     if (dev_forward_skb(ipvlan->dev, skb) == NET_RX_SUCCESS)
3078     success = true;
3079     } else {
3080     + if (!ether_addr_equal_64bits(eth_hdr(skb)->h_dest,
3081     + ipvlan->phy_dev->dev_addr))
3082     + skb->pkt_type = PACKET_OTHERHOST;
3083     +
3084     ret = RX_HANDLER_ANOTHER;
3085     success = true;
3086     }
3087     diff --git a/drivers/net/phy/mdio-xgene.c b/drivers/net/phy/mdio-xgene.c
3088     index 8eb077b677f6..39be3b82608f 100644
3089     --- a/drivers/net/phy/mdio-xgene.c
3090     +++ b/drivers/net/phy/mdio-xgene.c
3091     @@ -232,7 +232,7 @@ static int xgene_xfi_mdio_write(struct mii_bus *bus, int phy_id,
3092    
3093     val = SET_VAL(HSTPHYADX, phy_id) | SET_VAL(HSTREGADX, reg) |
3094     SET_VAL(HSTMIIMWRDAT, data);
3095     - xgene_enet_wr_mdio_csr(addr, MIIM_FIELD_ADDR, data);
3096     + xgene_enet_wr_mdio_csr(addr, MIIM_FIELD_ADDR, val);
3097    
3098     val = HSTLDCMD | SET_VAL(HSTMIIMCMD, MIIM_CMD_LEGACY_WRITE);
3099     xgene_enet_wr_mdio_csr(addr, MIIM_COMMAND_ADDR, val);
3100     diff --git a/drivers/net/veth.c b/drivers/net/veth.c
3101     index fbc853e64531..ee7460ee3d05 100644
3102     --- a/drivers/net/veth.c
3103     +++ b/drivers/net/veth.c
3104     @@ -425,6 +425,9 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
3105     if (ifmp && (dev->ifindex != 0))
3106     peer->ifindex = ifmp->ifi_index;
3107    
3108     + peer->gso_max_size = dev->gso_max_size;
3109     + peer->gso_max_segs = dev->gso_max_segs;
3110     +
3111     err = register_netdevice(peer);
3112     put_net(net);
3113     net = NULL;
3114     diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
3115     index 983e941bdf29..50570d779b01 100644
3116     --- a/drivers/net/vxlan.c
3117     +++ b/drivers/net/vxlan.c
3118     @@ -2912,6 +2912,11 @@ static int vxlan_dev_configure(struct net *src_net, struct net_device *dev,
3119     return -EINVAL;
3120     }
3121    
3122     + if (lowerdev) {
3123     + dev->gso_max_size = lowerdev->gso_max_size;
3124     + dev->gso_max_segs = lowerdev->gso_max_segs;
3125     + }
3126     +
3127     if (conf->mtu) {
3128     err = __vxlan_change_mtu(dev, lowerdev, dst, conf->mtu, false);
3129     if (err)
3130     diff --git a/drivers/net/wireless/ath/ath10k/ce.c b/drivers/net/wireless/ath/ath10k/ce.c
3131     index 0b4d79659884..041ef3be87b9 100644
3132     --- a/drivers/net/wireless/ath/ath10k/ce.c
3133     +++ b/drivers/net/wireless/ath/ath10k/ce.c
3134     @@ -1059,7 +1059,7 @@ int ath10k_ce_alloc_pipe(struct ath10k *ar, int ce_id,
3135     */
3136     BUILD_BUG_ON(2 * TARGET_NUM_MSDU_DESC >
3137     (CE_HTT_H2T_MSG_SRC_NENTRIES - 1));
3138     - BUILD_BUG_ON(2 * TARGET_10X_NUM_MSDU_DESC >
3139     + BUILD_BUG_ON(2 * TARGET_10_4_NUM_MSDU_DESC_PFC >
3140     (CE_HTT_H2T_MSG_SRC_NENTRIES - 1));
3141     BUILD_BUG_ON(2 * TARGET_TLV_NUM_MSDU_DESC >
3142     (CE_HTT_H2T_MSG_SRC_NENTRIES - 1));
3143     diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c
3144     index 82a4c67f3672..6aa2b93497dd 100644
3145     --- a/drivers/net/wireless/ath/ath10k/debug.c
3146     +++ b/drivers/net/wireless/ath/ath10k/debug.c
3147     @@ -1942,6 +1942,15 @@ static ssize_t ath10k_write_simulate_radar(struct file *file,
3148     size_t count, loff_t *ppos)
3149     {
3150     struct ath10k *ar = file->private_data;
3151     + struct ath10k_vif *arvif;
3152     +
3153     + /* Just check for for the first vif alone, as all the vifs will be
3154     + * sharing the same channel and if the channel is disabled, all the
3155     + * vifs will share the same 'is_started' state.
3156     + */
3157     + arvif = list_first_entry(&ar->arvifs, typeof(*arvif), list);
3158     + if (!arvif->is_started)
3159     + return -EINVAL;
3160    
3161     ieee80211_radar_detected(ar->hw);
3162    
3163     diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
3164     index 17ab8efdac35..1e6e63dbd61c 100644
3165     --- a/drivers/net/wireless/ath/ath10k/mac.c
3166     +++ b/drivers/net/wireless/ath/ath10k/mac.c
3167     @@ -6054,6 +6054,16 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
3168     "mac vdev %d peer delete %pM sta %pK (sta gone)\n",
3169     arvif->vdev_id, sta->addr, sta);
3170    
3171     + if (sta->tdls) {
3172     + ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id,
3173     + sta,
3174     + WMI_TDLS_PEER_STATE_TEARDOWN);
3175     + if (ret)
3176     + ath10k_warn(ar, "failed to update tdls peer state for %pM state %d: %i\n",
3177     + sta->addr,
3178     + WMI_TDLS_PEER_STATE_TEARDOWN, ret);
3179     + }
3180     +
3181     ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
3182     if (ret)
3183     ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n",
3184     @@ -7070,7 +7080,7 @@ ath10k_mac_update_rx_channel(struct ath10k *ar,
3185     lockdep_assert_held(&ar->data_lock);
3186    
3187     WARN_ON(ctx && vifs);
3188     - WARN_ON(vifs && n_vifs != 1);
3189     + WARN_ON(vifs && !n_vifs);
3190    
3191     /* FIXME: Sort of an optimization and a workaround. Peers and vifs are
3192     * on a linked list now. Doing a lookup peer -> vif -> chanctx for each
3193     diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
3194     index 54df425bb0fc..e518b640aad0 100644
3195     --- a/drivers/net/wireless/ath/ath10k/wmi.c
3196     +++ b/drivers/net/wireless/ath/ath10k/wmi.c
3197     @@ -3638,6 +3638,11 @@ static void ath10k_dfs_radar_report(struct ath10k *ar,
3198    
3199     spin_lock_bh(&ar->data_lock);
3200     ch = ar->rx_channel;
3201     +
3202     + /* fetch target operating channel during channel change */
3203     + if (!ch)
3204     + ch = ar->tgt_oper_chan;
3205     +
3206     spin_unlock_bh(&ar->data_lock);
3207    
3208     if (!ch) {
3209     diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
3210     index 1b243c899bef..9b8562ff6698 100644
3211     --- a/drivers/net/wireless/ath/ath10k/wmi.h
3212     +++ b/drivers/net/wireless/ath/ath10k/wmi.h
3213     @@ -5017,7 +5017,8 @@ enum wmi_10_4_vdev_param {
3214     #define WMI_VDEV_PARAM_TXBF_MU_TX_BFER BIT(3)
3215    
3216     #define WMI_TXBF_STS_CAP_OFFSET_LSB 4
3217     -#define WMI_TXBF_STS_CAP_OFFSET_MASK 0xf0
3218     +#define WMI_TXBF_STS_CAP_OFFSET_MASK 0x70
3219     +#define WMI_TXBF_CONF_IMPLICIT_BF BIT(7)
3220     #define WMI_BF_SOUND_DIM_OFFSET_LSB 8
3221     #define WMI_BF_SOUND_DIM_OFFSET_MASK 0xf00
3222    
3223     diff --git a/drivers/net/wireless/ath/wil6210/main.c b/drivers/net/wireless/ath/wil6210/main.c
3224     index 24b07a0ce6f7..f8bce58d48cc 100644
3225     --- a/drivers/net/wireless/ath/wil6210/main.c
3226     +++ b/drivers/net/wireless/ath/wil6210/main.c
3227     @@ -129,9 +129,15 @@ void wil_memcpy_fromio_32(void *dst, const volatile void __iomem *src,
3228     u32 *d = dst;
3229     const volatile u32 __iomem *s = src;
3230    
3231     - /* size_t is unsigned, if (count%4 != 0) it will wrap */
3232     - for (count += 4; count > 4; count -= 4)
3233     + for (; count >= 4; count -= 4)
3234     *d++ = __raw_readl(s++);
3235     +
3236     + if (unlikely(count)) {
3237     + /* count can be 1..3 */
3238     + u32 tmp = __raw_readl(s);
3239     +
3240     + memcpy(d, &tmp, count);
3241     + }
3242     }
3243    
3244     void wil_memcpy_fromio_halp_vote(struct wil6210_priv *wil, void *dst,
3245     @@ -148,8 +154,16 @@ void wil_memcpy_toio_32(volatile void __iomem *dst, const void *src,
3246     volatile u32 __iomem *d = dst;
3247     const u32 *s = src;
3248    
3249     - for (count += 4; count > 4; count -= 4)
3250     + for (; count >= 4; count -= 4)
3251     __raw_writel(*s++, d++);
3252     +
3253     + if (unlikely(count)) {
3254     + /* count can be 1..3 */
3255     + u32 tmp = 0;
3256     +
3257     + memcpy(&tmp, s, count);
3258     + __raw_writel(tmp, d);
3259     + }
3260     }
3261    
3262     void wil_memcpy_toio_halp_vote(struct wil6210_priv *wil,
3263     diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
3264     index fae4f1285d08..94a356bbb6b9 100644
3265     --- a/drivers/net/wireless/ath/wil6210/wmi.c
3266     +++ b/drivers/net/wireless/ath/wil6210/wmi.c
3267     @@ -501,16 +501,16 @@ static void wmi_evt_connect(struct wil6210_priv *wil, int id, void *d, int len)
3268     assoc_resp_ielen = 0;
3269     }
3270    
3271     - mutex_lock(&wil->mutex);
3272     if (test_bit(wil_status_resetting, wil->status) ||
3273     !test_bit(wil_status_fwready, wil->status)) {
3274     wil_err(wil, "status_resetting, cancel connect event, CID %d\n",
3275     evt->cid);
3276     - mutex_unlock(&wil->mutex);
3277     /* no need for cleanup, wil_reset will do that */
3278     return;
3279     }
3280    
3281     + mutex_lock(&wil->mutex);
3282     +
3283     if ((wdev->iftype == NL80211_IFTYPE_STATION) ||
3284     (wdev->iftype == NL80211_IFTYPE_P2P_CLIENT)) {
3285     if (!test_bit(wil_status_fwconnecting, wil->status)) {
3286     @@ -608,6 +608,13 @@ static void wmi_evt_disconnect(struct wil6210_priv *wil, int id,
3287    
3288     wil->sinfo_gen++;
3289    
3290     + if (test_bit(wil_status_resetting, wil->status) ||
3291     + !test_bit(wil_status_fwready, wil->status)) {
3292     + wil_err(wil, "status_resetting, cancel disconnect event\n");
3293     + /* no need for cleanup, wil_reset will do that */
3294     + return;
3295     + }
3296     +
3297     mutex_lock(&wil->mutex);
3298     wil6210_disconnect(wil, evt->bssid, reason_code, true);
3299     mutex_unlock(&wil->mutex);
3300     diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
3301     index 227c5ed9cbe6..0aea476ebf50 100644
3302     --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
3303     +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs.c
3304     @@ -1867,12 +1867,10 @@ static int rs_switch_to_column(struct iwl_mvm *mvm,
3305     struct rs_rate *rate = &search_tbl->rate;
3306     const struct rs_tx_column *column = &rs_tx_columns[col_id];
3307     const struct rs_tx_column *curr_column = &rs_tx_columns[tbl->column];
3308     - u32 sz = (sizeof(struct iwl_scale_tbl_info) -
3309     - (sizeof(struct iwl_rate_scale_data) * IWL_RATE_COUNT));
3310     unsigned long rate_mask = 0;
3311     u32 rate_idx = 0;
3312    
3313     - memcpy(search_tbl, tbl, sz);
3314     + memcpy(search_tbl, tbl, offsetof(struct iwl_scale_tbl_info, win));
3315    
3316     rate->sgi = column->sgi;
3317     rate->ant = column->ant;
3318     diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rx.c b/drivers/net/wireless/intel/iwlwifi/mvm/rx.c
3319     index 0e60e38b2acf..b78e60eb600f 100644
3320     --- a/drivers/net/wireless/intel/iwlwifi/mvm/rx.c
3321     +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rx.c
3322     @@ -104,7 +104,20 @@ static void iwl_mvm_pass_packet_to_mac80211(struct iwl_mvm *mvm,
3323     u8 crypt_len,
3324     struct iwl_rx_cmd_buffer *rxb)
3325     {
3326     - unsigned int hdrlen, fraglen;
3327     + unsigned int hdrlen = ieee80211_hdrlen(hdr->frame_control);
3328     + unsigned int fraglen;
3329     +
3330     + /*
3331     + * The 'hdrlen' (plus the 8 bytes for the SNAP and the crypt_len,
3332     + * but those are all multiples of 4 long) all goes away, but we
3333     + * want the *end* of it, which is going to be the start of the IP
3334     + * header, to be aligned when it gets pulled in.
3335     + * The beginning of the skb->data is aligned on at least a 4-byte
3336     + * boundary after allocation. Everything here is aligned at least
3337     + * on a 2-byte boundary so we can just take hdrlen & 3 and pad by
3338     + * the result.
3339     + */
3340     + skb_reserve(skb, hdrlen & 3);
3341    
3342     /* If frame is small enough to fit in skb->head, pull it completely.
3343     * If not, only pull ieee80211_hdr (including crypto if present, and
3344     @@ -118,8 +131,7 @@ static void iwl_mvm_pass_packet_to_mac80211(struct iwl_mvm *mvm,
3345     * If the latter changes (there are efforts in the standards group
3346     * to do so) we should revisit this and ieee80211_data_to_8023().
3347     */
3348     - hdrlen = (len <= skb_tailroom(skb)) ? len :
3349     - sizeof(*hdr) + crypt_len + 8;
3350     + hdrlen = (len <= skb_tailroom(skb)) ? len : hdrlen + crypt_len + 8;
3351    
3352     memcpy(skb_put(skb, hdrlen), hdr, hdrlen);
3353     fraglen = len - hdrlen;
3354     diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
3355     index 61e85eac706a..4182c3775a72 100644
3356     --- a/drivers/net/wireless/mac80211_hwsim.c
3357     +++ b/drivers/net/wireless/mac80211_hwsim.c
3358     @@ -552,8 +552,6 @@ struct mac80211_hwsim_data {
3359     /* wmediumd portid responsible for netgroup of this radio */
3360     u32 wmediumd;
3361    
3362     - int power_level;
3363     -
3364     /* difference between this hw's clock and the real clock, in usecs */
3365     s64 tsf_offset;
3366     s64 bcn_delta;
3367     @@ -730,16 +728,21 @@ static int hwsim_fops_ps_write(void *dat, u64 val)
3368     val != PS_MANUAL_POLL)
3369     return -EINVAL;
3370    
3371     - old_ps = data->ps;
3372     - data->ps = val;
3373     -
3374     - local_bh_disable();
3375     if (val == PS_MANUAL_POLL) {
3376     + if (data->ps != PS_ENABLED)
3377     + return -EINVAL;
3378     + local_bh_disable();
3379     ieee80211_iterate_active_interfaces_atomic(
3380     data->hw, IEEE80211_IFACE_ITER_NORMAL,
3381     hwsim_send_ps_poll, data);
3382     - data->ps_poll_pending = true;
3383     - } else if (old_ps == PS_DISABLED && val != PS_DISABLED) {
3384     + local_bh_enable();
3385     + return 0;
3386     + }
3387     + old_ps = data->ps;
3388     + data->ps = val;
3389     +
3390     + local_bh_disable();
3391     + if (old_ps == PS_DISABLED && val != PS_DISABLED) {
3392     ieee80211_iterate_active_interfaces_atomic(
3393     data->hw, IEEE80211_IFACE_ITER_NORMAL,
3394     hwsim_send_nullfunc_ps, data);
3395     @@ -1208,7 +1211,9 @@ static bool mac80211_hwsim_tx_frame_no_nl(struct ieee80211_hw *hw,
3396     if (info->control.rates[0].flags & IEEE80211_TX_RC_SHORT_GI)
3397     rx_status.flag |= RX_FLAG_SHORT_GI;
3398     /* TODO: simulate real signal strength (and optional packet loss) */
3399     - rx_status.signal = data->power_level - 50;
3400     + rx_status.signal = -50;
3401     + if (info->control.vif)
3402     + rx_status.signal += info->control.vif->bss_conf.txpower;
3403    
3404     if (data->ps != PS_DISABLED)
3405     hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM);
3406     @@ -1607,7 +1612,6 @@ static int mac80211_hwsim_config(struct ieee80211_hw *hw, u32 changed)
3407    
3408     WARN_ON(data->channel && data->use_chanctx);
3409    
3410     - data->power_level = conf->power_level;
3411     if (!data->started || !data->beacon_int)
3412     tasklet_hrtimer_cancel(&data->beacon_timer);
3413     else if (!hrtimer_is_queued(&data->beacon_timer.timer)) {
3414     @@ -2212,7 +2216,6 @@ static const char mac80211_hwsim_gstrings_stats[][ETH_GSTRING_LEN] = {
3415     "d_tx_failed",
3416     "d_ps_mode",
3417     "d_group",
3418     - "d_tx_power",
3419     };
3420    
3421     #define MAC80211_HWSIM_SSTATS_LEN ARRAY_SIZE(mac80211_hwsim_gstrings_stats)
3422     @@ -2249,7 +2252,6 @@ static void mac80211_hwsim_get_et_stats(struct ieee80211_hw *hw,
3423     data[i++] = ar->tx_failed;
3424     data[i++] = ar->ps;
3425     data[i++] = ar->group;
3426     - data[i++] = ar->power_level;
3427    
3428     WARN_ON(i != MAC80211_HWSIM_SSTATS_LEN);
3429     }
3430     diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
3431     index 8677a53ef725..48d51be11f9b 100644
3432     --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
3433     +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
3434     @@ -1109,6 +1109,12 @@ mwifiex_cfg80211_change_virtual_intf(struct wiphy *wiphy,
3435     struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
3436     enum nl80211_iftype curr_iftype = dev->ieee80211_ptr->iftype;
3437    
3438     + if (priv->scan_request) {
3439     + mwifiex_dbg(priv->adapter, ERROR,
3440     + "change virtual interface: scan in process\n");
3441     + return -EBUSY;
3442     + }
3443     +
3444     switch (curr_iftype) {
3445     case NL80211_IFTYPE_ADHOC:
3446     switch (type) {
3447     diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.c b/drivers/net/wireless/marvell/mwifiex/sdio.c
3448     index 8d601dcf2948..486b8c75cd1f 100644
3449     --- a/drivers/net/wireless/marvell/mwifiex/sdio.c
3450     +++ b/drivers/net/wireless/marvell/mwifiex/sdio.c
3451     @@ -1458,7 +1458,7 @@ static int mwifiex_sdio_card_to_host_mp_aggr(struct mwifiex_adapter *adapter,
3452     }
3453    
3454     if (card->mpa_rx.pkt_cnt == 1)
3455     - mport = adapter->ioport + port;
3456     + mport = adapter->ioport + card->mpa_rx.start_port;
3457    
3458     if (mwifiex_read_data_sync(adapter, card->mpa_rx.buf,
3459     card->mpa_rx.buf_len, mport, 1))
3460     @@ -1891,7 +1891,7 @@ static int mwifiex_host_to_card_mp_aggr(struct mwifiex_adapter *adapter,
3461     }
3462    
3463     if (card->mpa_tx.pkt_cnt == 1)
3464     - mport = adapter->ioport + port;
3465     + mport = adapter->ioport + card->mpa_tx.start_port;
3466    
3467     ret = mwifiex_write_data_to_card(adapter, card->mpa_tx.buf,
3468     card->mpa_tx.buf_len, mport);
3469     diff --git a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
3470     index c5effd6c6be9..01ca1d57b3d9 100644
3471     --- a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
3472     +++ b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
3473     @@ -1278,6 +1278,9 @@ static int eject_installer(struct usb_interface *intf)
3474     u8 bulk_out_ep;
3475     int r;
3476    
3477     + if (iface_desc->desc.bNumEndpoints < 2)
3478     + return -ENODEV;
3479     +
3480     /* Find bulk out endpoint */
3481     for (r = 1; r >= 0; r--) {
3482     endpoint = &iface_desc->endpoint[r].desc;
3483     diff --git a/drivers/nfc/nfcmrvl/fw_dnld.c b/drivers/nfc/nfcmrvl/fw_dnld.c
3484     index af62c4c854f3..b4f31dad40d6 100644
3485     --- a/drivers/nfc/nfcmrvl/fw_dnld.c
3486     +++ b/drivers/nfc/nfcmrvl/fw_dnld.c
3487     @@ -17,7 +17,7 @@
3488     */
3489    
3490     #include <linux/module.h>
3491     -#include <linux/unaligned/access_ok.h>
3492     +#include <asm/unaligned.h>
3493     #include <linux/firmware.h>
3494     #include <linux/nfc.h>
3495     #include <net/nfc/nci.h>
3496     diff --git a/drivers/nfc/nfcmrvl/spi.c b/drivers/nfc/nfcmrvl/spi.c
3497     index a7faa0bcc01e..fc8e78a29d77 100644
3498     --- a/drivers/nfc/nfcmrvl/spi.c
3499     +++ b/drivers/nfc/nfcmrvl/spi.c
3500     @@ -96,10 +96,9 @@ static int nfcmrvl_spi_nci_send(struct nfcmrvl_private *priv,
3501     /* Send the SPI packet */
3502     err = nci_spi_send(drv_data->nci_spi, &drv_data->handshake_completion,
3503     skb);
3504     - if (err != 0) {
3505     + if (err)
3506     nfc_err(priv->dev, "spi_send failed %d", err);
3507     - kfree_skb(skb);
3508     - }
3509     +
3510     return err;
3511     }
3512    
3513     diff --git a/drivers/nfc/pn533/i2c.c b/drivers/nfc/pn533/i2c.c
3514     index 1dc89248e58e..11d78b43cf76 100644
3515     --- a/drivers/nfc/pn533/i2c.c
3516     +++ b/drivers/nfc/pn533/i2c.c
3517     @@ -242,10 +242,10 @@ static int pn533_i2c_remove(struct i2c_client *client)
3518    
3519     dev_dbg(&client->dev, "%s\n", __func__);
3520    
3521     - pn533_unregister_device(phy->priv);
3522     -
3523     free_irq(client->irq, phy);
3524    
3525     + pn533_unregister_device(phy->priv);
3526     +
3527     return 0;
3528     }
3529    
3530     diff --git a/drivers/of/device.c b/drivers/of/device.c
3531     index f7a970120055..3cda60c036f9 100644
3532     --- a/drivers/of/device.c
3533     +++ b/drivers/of/device.c
3534     @@ -223,7 +223,7 @@ ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len)
3535     str[i] = '_';
3536     }
3537    
3538     - return tsize;
3539     + return repend;
3540     }
3541     EXPORT_SYMBOL_GPL(of_device_get_modalias);
3542    
3543     diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c
3544     index dafb4cdb2b7f..d392a55ec0a9 100644
3545     --- a/drivers/pci/host/pci-hyperv.c
3546     +++ b/drivers/pci/host/pci-hyperv.c
3547     @@ -351,6 +351,7 @@ enum hv_pcibus_state {
3548     hv_pcibus_init = 0,
3549     hv_pcibus_probed,
3550     hv_pcibus_installed,
3551     + hv_pcibus_removed,
3552     hv_pcibus_maximum
3553     };
3554    
3555     @@ -1205,9 +1206,11 @@ static int create_root_hv_pci_bus(struct hv_pcibus_device *hbus)
3556     hbus->pci_bus->msi = &hbus->msi_chip;
3557     hbus->pci_bus->msi->dev = &hbus->hdev->device;
3558    
3559     + pci_lock_rescan_remove();
3560     pci_scan_child_bus(hbus->pci_bus);
3561     pci_bus_assign_resources(hbus->pci_bus);
3562     pci_bus_add_devices(hbus->pci_bus);
3563     + pci_unlock_rescan_remove();
3564     hbus->state = hv_pcibus_installed;
3565     return 0;
3566     }
3567     @@ -1489,13 +1492,24 @@ static void pci_devices_present_work(struct work_struct *work)
3568     put_pcichild(hpdev, hv_pcidev_ref_initial);
3569     }
3570    
3571     - /* Tell the core to rescan bus because there may have been changes. */
3572     - if (hbus->state == hv_pcibus_installed) {
3573     + switch(hbus->state) {
3574     + case hv_pcibus_installed:
3575     + /*
3576     + * Tell the core to rescan bus
3577     + * because there may have been changes.
3578     + */
3579     pci_lock_rescan_remove();
3580     pci_scan_child_bus(hbus->pci_bus);
3581     pci_unlock_rescan_remove();
3582     - } else {
3583     + break;
3584     +
3585     + case hv_pcibus_init:
3586     + case hv_pcibus_probed:
3587     survey_child_resources(hbus);
3588     + break;
3589     +
3590     + default:
3591     + break;
3592     }
3593    
3594     up(&hbus->enum_sem);
3595     @@ -1585,8 +1599,10 @@ static void hv_eject_device_work(struct work_struct *work)
3596     pdev = pci_get_domain_bus_and_slot(hpdev->hbus->sysdata.domain, 0,
3597     wslot);
3598     if (pdev) {
3599     + pci_lock_rescan_remove();
3600     pci_stop_and_remove_bus_device(pdev);
3601     pci_dev_put(pdev);
3602     + pci_unlock_rescan_remove();
3603     }
3604    
3605     memset(&ctxt, 0, sizeof(ctxt));
3606     @@ -2170,6 +2186,7 @@ static int hv_pci_probe(struct hv_device *hdev,
3607     hbus = kzalloc(sizeof(*hbus), GFP_KERNEL);
3608     if (!hbus)
3609     return -ENOMEM;
3610     + hbus->state = hv_pcibus_init;
3611    
3612     /*
3613     * The PCI bus "domain" is what is called "segment" in ACPI and
3614     @@ -2312,6 +2329,7 @@ static int hv_pci_remove(struct hv_device *hdev)
3615     pci_stop_root_bus(hbus->pci_bus);
3616     pci_remove_root_bus(hbus->pci_bus);
3617     pci_unlock_rescan_remove();
3618     + hbus->state = hv_pcibus_removed;
3619     }
3620    
3621     ret = hv_send_resources_released(hdev);
3622     diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
3623     index 802997e2ddcc..d81ad841dc0c 100644
3624     --- a/drivers/pci/pci-driver.c
3625     +++ b/drivers/pci/pci-driver.c
3626     @@ -463,8 +463,6 @@ static void pci_device_shutdown(struct device *dev)
3627    
3628     if (drv && drv->shutdown)
3629     drv->shutdown(pci_dev);
3630     - pci_msi_shutdown(pci_dev);
3631     - pci_msix_shutdown(pci_dev);
3632    
3633     /*
3634     * If this is a kexec reboot, turn off Bus Master bit on the
3635     diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
3636     index 0c9edc9d7c44..4c9fb8b323e8 100644
3637     --- a/drivers/pci/quirks.c
3638     +++ b/drivers/pci/quirks.c
3639     @@ -4104,6 +4104,9 @@ static int pci_quirk_cavium_acs(struct pci_dev *dev, u16 acs_flags)
3640     */
3641     acs_flags &= ~(PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_SV | PCI_ACS_UF);
3642    
3643     + if (!((dev->device >= 0xa000) && (dev->device <= 0xa0ff)))
3644     + return -ENOTTY;
3645     +
3646     return acs_flags ? 0 : 1;
3647     }
3648    
3649     diff --git a/drivers/perf/arm_pmu.c b/drivers/perf/arm_pmu.c
3650     index b37b57294566..af82edc7fa5c 100644
3651     --- a/drivers/perf/arm_pmu.c
3652     +++ b/drivers/perf/arm_pmu.c
3653     @@ -322,10 +322,16 @@ validate_group(struct perf_event *event)
3654     return 0;
3655     }
3656    
3657     +static struct arm_pmu_platdata *armpmu_get_platdata(struct arm_pmu *armpmu)
3658     +{
3659     + struct platform_device *pdev = armpmu->plat_device;
3660     +
3661     + return pdev ? dev_get_platdata(&pdev->dev) : NULL;
3662     +}
3663     +
3664     static irqreturn_t armpmu_dispatch_irq(int irq, void *dev)
3665     {
3666     struct arm_pmu *armpmu;
3667     - struct platform_device *plat_device;
3668     struct arm_pmu_platdata *plat;
3669     int ret;
3670     u64 start_clock, finish_clock;
3671     @@ -337,8 +343,8 @@ static irqreturn_t armpmu_dispatch_irq(int irq, void *dev)
3672     * dereference.
3673     */
3674     armpmu = *(void **)dev;
3675     - plat_device = armpmu->plat_device;
3676     - plat = dev_get_platdata(&plat_device->dev);
3677     +
3678     + plat = armpmu_get_platdata(armpmu);
3679    
3680     start_clock = sched_clock();
3681     if (plat && plat->handle_irq)
3682     diff --git a/drivers/power/supply/ab8500_charger.c b/drivers/power/supply/ab8500_charger.c
3683     index 5cee9aa87aa3..48a11fd86a7f 100644
3684     --- a/drivers/power/supply/ab8500_charger.c
3685     +++ b/drivers/power/supply/ab8500_charger.c
3686     @@ -3218,11 +3218,13 @@ static int ab8500_charger_init_hw_registers(struct ab8500_charger *di)
3687     }
3688    
3689     /* Enable backup battery charging */
3690     - abx500_mask_and_set_register_interruptible(di->dev,
3691     + ret = abx500_mask_and_set_register_interruptible(di->dev,
3692     AB8500_RTC, AB8500_RTC_CTRL_REG,
3693     RTC_BUP_CH_ENA, RTC_BUP_CH_ENA);
3694     - if (ret < 0)
3695     + if (ret < 0) {
3696     dev_err(di->dev, "%s mask and set failed\n", __func__);
3697     + goto out;
3698     + }
3699    
3700     if (is_ab8540(di->parent)) {
3701     ret = abx500_mask_and_set_register_interruptible(di->dev,
3702     diff --git a/drivers/pwm/pwm-stmpe.c b/drivers/pwm/pwm-stmpe.c
3703     index e464582a390a..3439f1e902cb 100644
3704     --- a/drivers/pwm/pwm-stmpe.c
3705     +++ b/drivers/pwm/pwm-stmpe.c
3706     @@ -145,7 +145,7 @@ static int stmpe_24xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
3707     break;
3708    
3709     case 2:
3710     - offset = STMPE24XX_PWMIC1;
3711     + offset = STMPE24XX_PWMIC2;
3712     break;
3713    
3714     default:
3715     diff --git a/drivers/pwm/pwm-tegra.c b/drivers/pwm/pwm-tegra.c
3716     index e4647840cd6e..7e8906d6ab7a 100644
3717     --- a/drivers/pwm/pwm-tegra.c
3718     +++ b/drivers/pwm/pwm-tegra.c
3719     @@ -76,6 +76,7 @@ static int tegra_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
3720     struct tegra_pwm_chip *pc = to_tegra_pwm_chip(chip);
3721     unsigned long long c = duty_ns;
3722     unsigned long rate, hz;
3723     + unsigned long long ns100 = NSEC_PER_SEC;
3724     u32 val = 0;
3725     int err;
3726    
3727     @@ -95,9 +96,11 @@ static int tegra_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
3728     * cycles at the PWM clock rate will take period_ns nanoseconds.
3729     */
3730     rate = clk_get_rate(pc->clk) >> PWM_DUTY_WIDTH;
3731     - hz = NSEC_PER_SEC / period_ns;
3732    
3733     - rate = (rate + (hz / 2)) / hz;
3734     + /* Consider precision in PWM_SCALE_WIDTH rate calculation */
3735     + ns100 *= 100;
3736     + hz = DIV_ROUND_CLOSEST_ULL(ns100, period_ns);
3737     + rate = DIV_ROUND_CLOSEST(rate * 100, hz);
3738    
3739     /*
3740     * Since the actual PWM divider is the register's frequency divider
3741     diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
3742     index 9403245503de..178fcda12cec 100644
3743     --- a/drivers/regulator/core.c
3744     +++ b/drivers/regulator/core.c
3745     @@ -2465,7 +2465,7 @@ static int _regulator_list_voltage(struct regulator *regulator,
3746     ret = ops->list_voltage(rdev, selector);
3747     if (lock)
3748     mutex_unlock(&rdev->mutex);
3749     - } else if (rdev->supply) {
3750     + } else if (rdev->is_switch && rdev->supply) {
3751     ret = _regulator_list_voltage(rdev->supply, selector, lock);
3752     } else {
3753     return -EINVAL;
3754     @@ -2523,7 +2523,7 @@ int regulator_count_voltages(struct regulator *regulator)
3755     if (rdev->desc->n_voltages)
3756     return rdev->desc->n_voltages;
3757    
3758     - if (!rdev->supply)
3759     + if (!rdev->is_switch || !rdev->supply)
3760     return -EINVAL;
3761    
3762     return regulator_count_voltages(rdev->supply);
3763     @@ -4049,6 +4049,11 @@ regulator_register(const struct regulator_desc *regulator_desc,
3764     mutex_unlock(&regulator_list_mutex);
3765     }
3766    
3767     + if (!rdev->desc->ops->get_voltage &&
3768     + !rdev->desc->ops->list_voltage &&
3769     + !rdev->desc->fixed_uV)
3770     + rdev->is_switch = true;
3771     +
3772     ret = device_register(&rdev->dev);
3773     if (ret != 0) {
3774     put_device(&rdev->dev);
3775     diff --git a/drivers/scsi/be2iscsi/be_cmds.c b/drivers/scsi/be2iscsi/be_cmds.c
3776     index be65da2988fb..838edbba8aec 100644
3777     --- a/drivers/scsi/be2iscsi/be_cmds.c
3778     +++ b/drivers/scsi/be2iscsi/be_cmds.c
3779     @@ -246,6 +246,12 @@ int beiscsi_mccq_compl_wait(struct beiscsi_hba *phba,
3780     {
3781     int rc = 0;
3782    
3783     + if (!tag || tag > MAX_MCC_CMD) {
3784     + __beiscsi_log(phba, KERN_ERR,
3785     + "BC_%d : invalid tag %u\n", tag);
3786     + return -EINVAL;
3787     + }
3788     +
3789     if (beiscsi_hba_in_error(phba)) {
3790     clear_bit(MCC_TAG_STATE_RUNNING,
3791     &phba->ctrl.ptag_state[tag].tag_state);
3792     diff --git a/drivers/scsi/fnic/fnic_scsi.c b/drivers/scsi/fnic/fnic_scsi.c
3793     index 44dd372aa7d3..c056b8111ad2 100644
3794     --- a/drivers/scsi/fnic/fnic_scsi.c
3795     +++ b/drivers/scsi/fnic/fnic_scsi.c
3796     @@ -1127,12 +1127,6 @@ static void fnic_fcpio_itmf_cmpl_handler(struct fnic *fnic,
3797     else
3798     CMD_ABTS_STATUS(sc) = hdr_status;
3799    
3800     - atomic64_dec(&fnic_stats->io_stats.active_ios);
3801     - if (atomic64_read(&fnic->io_cmpl_skip))
3802     - atomic64_dec(&fnic->io_cmpl_skip);
3803     - else
3804     - atomic64_inc(&fnic_stats->io_stats.io_completions);
3805     -
3806     if (!(CMD_FLAGS(sc) & (FNIC_IO_ABORTED | FNIC_IO_DONE)))
3807     atomic64_inc(&misc_stats->no_icmnd_itmf_cmpls);
3808    
3809     @@ -1173,6 +1167,11 @@ static void fnic_fcpio_itmf_cmpl_handler(struct fnic *fnic,
3810     (((u64)CMD_FLAGS(sc) << 32) |
3811     CMD_STATE(sc)));
3812     sc->scsi_done(sc);
3813     + atomic64_dec(&fnic_stats->io_stats.active_ios);
3814     + if (atomic64_read(&fnic->io_cmpl_skip))
3815     + atomic64_dec(&fnic->io_cmpl_skip);
3816     + else
3817     + atomic64_inc(&fnic_stats->io_stats.io_completions);
3818     }
3819     }
3820    
3821     @@ -1962,6 +1961,11 @@ int fnic_abort_cmd(struct scsi_cmnd *sc)
3822     /* Call SCSI completion function to complete the IO */
3823     sc->result = (DID_ABORT << 16);
3824     sc->scsi_done(sc);
3825     + atomic64_dec(&fnic_stats->io_stats.active_ios);
3826     + if (atomic64_read(&fnic->io_cmpl_skip))
3827     + atomic64_dec(&fnic->io_cmpl_skip);
3828     + else
3829     + atomic64_inc(&fnic_stats->io_stats.io_completions);
3830     }
3831    
3832     fnic_abort_cmd_end:
3833     diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
3834     index 532474109624..c5bc41d97f84 100644
3835     --- a/drivers/scsi/ipr.c
3836     +++ b/drivers/scsi/ipr.c
3837     @@ -836,8 +836,10 @@ static void ipr_sata_eh_done(struct ipr_cmnd *ipr_cmd)
3838    
3839     qc->err_mask |= AC_ERR_OTHER;
3840     sata_port->ioasa.status |= ATA_BUSY;
3841     - list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
3842     ata_qc_complete(qc);
3843     + if (ipr_cmd->eh_comp)
3844     + complete(ipr_cmd->eh_comp);
3845     + list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
3846     }
3847    
3848     /**
3849     @@ -5947,8 +5949,10 @@ static void ipr_erp_done(struct ipr_cmnd *ipr_cmd)
3850     res->in_erp = 0;
3851     }
3852     scsi_dma_unmap(ipr_cmd->scsi_cmd);
3853     - list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
3854     scsi_cmd->scsi_done(scsi_cmd);
3855     + if (ipr_cmd->eh_comp)
3856     + complete(ipr_cmd->eh_comp);
3857     + list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
3858     }
3859    
3860     /**
3861     @@ -6338,8 +6342,10 @@ static void ipr_erp_start(struct ipr_ioa_cfg *ioa_cfg,
3862     }
3863    
3864     scsi_dma_unmap(ipr_cmd->scsi_cmd);
3865     - list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
3866     scsi_cmd->scsi_done(scsi_cmd);
3867     + if (ipr_cmd->eh_comp)
3868     + complete(ipr_cmd->eh_comp);
3869     + list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
3870     }
3871    
3872     /**
3873     @@ -6365,8 +6371,10 @@ static void ipr_scsi_done(struct ipr_cmnd *ipr_cmd)
3874     scsi_dma_unmap(scsi_cmd);
3875    
3876     spin_lock_irqsave(ipr_cmd->hrrq->lock, lock_flags);
3877     - list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
3878     scsi_cmd->scsi_done(scsi_cmd);
3879     + if (ipr_cmd->eh_comp)
3880     + complete(ipr_cmd->eh_comp);
3881     + list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_free_q);
3882     spin_unlock_irqrestore(ipr_cmd->hrrq->lock, lock_flags);
3883     } else {
3884     spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
3885     diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
3886     index 94630d4738e6..baccd116f864 100644
3887     --- a/drivers/scsi/qla2xxx/qla_os.c
3888     +++ b/drivers/scsi/qla2xxx/qla_os.c
3889     @@ -1443,7 +1443,7 @@ qla2x00_loop_reset(scsi_qla_host_t *vha)
3890     void
3891     qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res)
3892     {
3893     - int que, cnt;
3894     + int que, cnt, status;
3895     unsigned long flags;
3896     srb_t *sp;
3897     struct qla_hw_data *ha = vha->hw;
3898     @@ -1473,8 +1473,12 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res)
3899     */
3900     sp_get(sp);
3901     spin_unlock_irqrestore(&ha->hardware_lock, flags);
3902     - qla2xxx_eh_abort(GET_CMD_SP(sp));
3903     + status = qla2xxx_eh_abort(GET_CMD_SP(sp));
3904     spin_lock_irqsave(&ha->hardware_lock, flags);
3905     + /* Get rid of extra reference if immediate exit
3906     + * from ql2xxx_eh_abort */
3907     + if (status == FAILED && (qla2x00_isp_reg_stat(ha)))
3908     + atomic_dec(&sp->ref_count);
3909     }
3910     req->outstanding_cmds[cnt] = NULL;
3911     sp->done(vha, sp, res);
3912     diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
3913     index 26e6b05d05fc..43d4b30cbf65 100644
3914     --- a/drivers/scsi/scsi_devinfo.c
3915     +++ b/drivers/scsi/scsi_devinfo.c
3916     @@ -180,7 +180,7 @@ static struct {
3917     {"HITACHI", "6586-", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
3918     {"HITACHI", "6588-", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
3919     {"HP", "A6189A", NULL, BLIST_SPARSELUN | BLIST_LARGELUN}, /* HP VA7400 */
3920     - {"HP", "OPEN-", "*", BLIST_REPORTLUN2}, /* HP XP Arrays */
3921     + {"HP", "OPEN-", "*", BLIST_REPORTLUN2 | BLIST_TRY_VPD_PAGES}, /* HP XP Arrays */
3922     {"HP", "NetRAID-4M", NULL, BLIST_FORCELUN},
3923     {"HP", "HSV100", NULL, BLIST_REPORTLUN2 | BLIST_NOSTARTONADD},
3924     {"HP", "C1557A", NULL, BLIST_FORCELUN},
3925     @@ -596,17 +596,12 @@ int scsi_get_device_flags_keyed(struct scsi_device *sdev,
3926     int key)
3927     {
3928     struct scsi_dev_info_list *devinfo;
3929     - int err;
3930    
3931     devinfo = scsi_dev_info_list_find(vendor, model, key);
3932     if (!IS_ERR(devinfo))
3933     return devinfo->flags;
3934    
3935     - err = PTR_ERR(devinfo);
3936     - if (err != -ENOENT)
3937     - return err;
3938     -
3939     - /* nothing found, return nothing */
3940     + /* key or device not found: return nothing */
3941     if (key != SCSI_DEVINFO_GLOBAL)
3942     return 0;
3943    
3944     diff --git a/drivers/scsi/scsi_dh.c b/drivers/scsi/scsi_dh.c
3945     index 84addee05be6..a5e30e9449ef 100644
3946     --- a/drivers/scsi/scsi_dh.c
3947     +++ b/drivers/scsi/scsi_dh.c
3948     @@ -56,10 +56,13 @@ static const struct scsi_dh_blist scsi_dh_blist[] = {
3949     {"IBM", "1815", "rdac", },
3950     {"IBM", "1818", "rdac", },
3951     {"IBM", "3526", "rdac", },
3952     + {"IBM", "3542", "rdac", },
3953     + {"IBM", "3552", "rdac", },
3954     {"SGI", "TP9", "rdac", },
3955     {"SGI", "IS", "rdac", },
3956     - {"STK", "OPENstorage D280", "rdac", },
3957     + {"STK", "OPENstorage", "rdac", },
3958     {"STK", "FLEXLINE 380", "rdac", },
3959     + {"STK", "BladeCtlr", "rdac", },
3960     {"SUN", "CSM", "rdac", },
3961     {"SUN", "LCSM100", "rdac", },
3962     {"SUN", "STK6580_6780", "rdac", },
3963     diff --git a/drivers/scsi/ses.c b/drivers/scsi/ses.c
3964     index 50adabbb5808..69046d342bc5 100644
3965     --- a/drivers/scsi/ses.c
3966     +++ b/drivers/scsi/ses.c
3967     @@ -548,7 +548,6 @@ static void ses_enclosure_data_process(struct enclosure_device *edev,
3968     ecomp = &edev->component[components++];
3969    
3970     if (!IS_ERR(ecomp)) {
3971     - ses_get_power_status(edev, ecomp);
3972     if (addl_desc_ptr)
3973     ses_process_descriptor(
3974     ecomp,
3975     @@ -579,13 +578,16 @@ static void ses_enclosure_data_process(struct enclosure_device *edev,
3976     }
3977    
3978     static void ses_match_to_enclosure(struct enclosure_device *edev,
3979     - struct scsi_device *sdev)
3980     + struct scsi_device *sdev,
3981     + int refresh)
3982     {
3983     + struct scsi_device *edev_sdev = to_scsi_device(edev->edev.parent);
3984     struct efd efd = {
3985     .addr = 0,
3986     };
3987    
3988     - ses_enclosure_data_process(edev, to_scsi_device(edev->edev.parent), 0);
3989     + if (refresh)
3990     + ses_enclosure_data_process(edev, edev_sdev, 0);
3991    
3992     if (scsi_is_sas_rphy(sdev->sdev_target->dev.parent))
3993     efd.addr = sas_get_address(sdev);
3994     @@ -616,7 +618,7 @@ static int ses_intf_add(struct device *cdev,
3995     struct enclosure_device *prev = NULL;
3996    
3997     while ((edev = enclosure_find(&sdev->host->shost_gendev, prev)) != NULL) {
3998     - ses_match_to_enclosure(edev, sdev);
3999     + ses_match_to_enclosure(edev, sdev, 1);
4000     prev = edev;
4001     }
4002     return -ENODEV;
4003     @@ -728,7 +730,7 @@ static int ses_intf_add(struct device *cdev,
4004     shost_for_each_device(tmp_sdev, sdev->host) {
4005     if (tmp_sdev->lun != 0 || scsi_device_enclosure(tmp_sdev))
4006     continue;
4007     - ses_match_to_enclosure(edev, tmp_sdev);
4008     + ses_match_to_enclosure(edev, tmp_sdev, 0);
4009     }
4010    
4011     return 0;
4012     diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
4013     index cd9537ddc19f..7592ac8514d2 100644
4014     --- a/drivers/scsi/sg.c
4015     +++ b/drivers/scsi/sg.c
4016     @@ -524,6 +524,7 @@ sg_read(struct file *filp, char __user *buf, size_t count, loff_t * ppos)
4017     } else
4018     count = (old_hdr->result == 0) ? 0 : -EIO;
4019     sg_finish_rem_req(srp);
4020     + sg_remove_request(sfp, srp);
4021     retval = count;
4022     free_old_hdr:
4023     kfree(old_hdr);
4024     @@ -564,6 +565,7 @@ sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp)
4025     }
4026     err_out:
4027     err2 = sg_finish_rem_req(srp);
4028     + sg_remove_request(sfp, srp);
4029     return err ? : err2 ? : count;
4030     }
4031    
4032     @@ -663,18 +665,14 @@ sg_write(struct file *filp, const char __user *buf, size_t count, loff_t * ppos)
4033     * is a non-zero input_size, so emit a warning.
4034     */
4035     if (hp->dxfer_direction == SG_DXFER_TO_FROM_DEV) {
4036     - static char cmd[TASK_COMM_LEN];
4037     - if (strcmp(current->comm, cmd)) {
4038     - printk_ratelimited(KERN_WARNING
4039     - "sg_write: data in/out %d/%d bytes "
4040     - "for SCSI command 0x%x-- guessing "
4041     - "data in;\n program %s not setting "
4042     - "count and/or reply_len properly\n",
4043     - old_hdr.reply_len - (int)SZ_SG_HEADER,
4044     - input_size, (unsigned int) cmnd[0],
4045     - current->comm);
4046     - strcpy(cmd, current->comm);
4047     - }
4048     + printk_ratelimited(KERN_WARNING
4049     + "sg_write: data in/out %d/%d bytes "
4050     + "for SCSI command 0x%x-- guessing "
4051     + "data in;\n program %s not setting "
4052     + "count and/or reply_len properly\n",
4053     + old_hdr.reply_len - (int)SZ_SG_HEADER,
4054     + input_size, (unsigned int) cmnd[0],
4055     + current->comm);
4056     }
4057     k = sg_common_write(sfp, srp, cmnd, sfp->timeout, blocking);
4058     return (k < 0) ? k : count;
4059     @@ -773,11 +771,15 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp,
4060     "sg_common_write: scsi opcode=0x%02x, cmd_size=%d\n",
4061     (int) cmnd[0], (int) hp->cmd_len));
4062    
4063     + if (hp->dxfer_len >= SZ_256M)
4064     + return -EINVAL;
4065     +
4066     k = sg_start_req(srp, cmnd);
4067     if (k) {
4068     SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp,
4069     "sg_common_write: start_req err=%d\n", k));
4070     sg_finish_rem_req(srp);
4071     + sg_remove_request(sfp, srp);
4072     return k; /* probably out of space --> ENOMEM */
4073     }
4074     if (atomic_read(&sdp->detaching)) {
4075     @@ -790,6 +792,7 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp,
4076     }
4077    
4078     sg_finish_rem_req(srp);
4079     + sg_remove_request(sfp, srp);
4080     return -ENODEV;
4081     }
4082    
4083     @@ -1280,6 +1283,7 @@ sg_rq_end_io_usercontext(struct work_struct *work)
4084     struct sg_fd *sfp = srp->parentfp;
4085    
4086     sg_finish_rem_req(srp);
4087     + sg_remove_request(sfp, srp);
4088     kref_put(&sfp->f_ref, sg_remove_sfp);
4089     }
4090    
4091     @@ -1824,8 +1828,6 @@ sg_finish_rem_req(Sg_request *srp)
4092     else
4093     sg_remove_scat(sfp, req_schp);
4094    
4095     - sg_remove_request(sfp, srp);
4096     -
4097     return ret;
4098     }
4099    
4100     @@ -2172,12 +2174,17 @@ sg_remove_sfp_usercontext(struct work_struct *work)
4101     struct sg_fd *sfp = container_of(work, struct sg_fd, ew.work);
4102     struct sg_device *sdp = sfp->parentdp;
4103     Sg_request *srp;
4104     + unsigned long iflags;
4105    
4106     /* Cleanup any responses which were never read(). */
4107     + write_lock_irqsave(&sfp->rq_list_lock, iflags);
4108     while (!list_empty(&sfp->rq_list)) {
4109     srp = list_first_entry(&sfp->rq_list, Sg_request, entry);
4110     sg_finish_rem_req(srp);
4111     + list_del(&srp->entry);
4112     + srp->parentfp = NULL;
4113     }
4114     + write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
4115    
4116     if (sfp->reserve.bufflen > 0) {
4117     SCSI_LOG_TIMEOUT(6, sg_printk(KERN_INFO, sdp,
4118     diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
4119     index d5157b2222ce..a47cf638460a 100644
4120     --- a/drivers/spi/spi-omap2-mcspi.c
4121     +++ b/drivers/spi/spi-omap2-mcspi.c
4122     @@ -454,6 +454,8 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
4123     int elements = 0;
4124     int word_len, element_count;
4125     struct omap2_mcspi_cs *cs = spi->controller_state;
4126     + void __iomem *chstat_reg = cs->base + OMAP2_MCSPI_CHSTAT0;
4127     +
4128     mcspi = spi_master_get_devdata(spi->master);
4129     mcspi_dma = &mcspi->dma_channels[spi->chip_select];
4130     count = xfer->len;
4131     @@ -549,8 +551,8 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
4132     if (l & OMAP2_MCSPI_CHCONF_TURBO) {
4133     elements--;
4134    
4135     - if (likely(mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHSTAT0)
4136     - & OMAP2_MCSPI_CHSTAT_RXS)) {
4137     + if (!mcspi_wait_for_reg_bit(chstat_reg,
4138     + OMAP2_MCSPI_CHSTAT_RXS)) {
4139     u32 w;
4140    
4141     w = mcspi_read_cs_reg(spi, OMAP2_MCSPI_RX0);
4142     @@ -568,8 +570,7 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
4143     return count;
4144     }
4145     }
4146     - if (likely(mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHSTAT0)
4147     - & OMAP2_MCSPI_CHSTAT_RXS)) {
4148     + if (!mcspi_wait_for_reg_bit(chstat_reg, OMAP2_MCSPI_CHSTAT_RXS)) {
4149     u32 w;
4150    
4151     w = mcspi_read_cs_reg(spi, OMAP2_MCSPI_RX0);
4152     diff --git a/drivers/spi/spi-sun6i.c b/drivers/spi/spi-sun6i.c
4153     index 9918a57a6a6e..7e7da97982aa 100644
4154     --- a/drivers/spi/spi-sun6i.c
4155     +++ b/drivers/spi/spi-sun6i.c
4156     @@ -464,7 +464,7 @@ static int sun6i_spi_probe(struct platform_device *pdev)
4157    
4158     static int sun6i_spi_remove(struct platform_device *pdev)
4159     {
4160     - pm_runtime_disable(&pdev->dev);
4161     + pm_runtime_force_suspend(&pdev->dev);
4162    
4163     return 0;
4164     }
4165     diff --git a/drivers/staging/speakup/kobjects.c b/drivers/staging/speakup/kobjects.c
4166     index e744aa9730ff..dea018cba094 100644
4167     --- a/drivers/staging/speakup/kobjects.c
4168     +++ b/drivers/staging/speakup/kobjects.c
4169     @@ -834,7 +834,9 @@ static ssize_t message_show(struct kobject *kobj,
4170     struct msg_group_t *group = spk_find_msg_group(attr->attr.name);
4171     unsigned long flags;
4172    
4173     - BUG_ON(!group);
4174     + if (WARN_ON(!group))
4175     + return -EINVAL;
4176     +
4177     spin_lock_irqsave(&speakup_info.spinlock, flags);
4178     retval = message_show_helper(buf, group->start, group->end);
4179     spin_unlock_irqrestore(&speakup_info.spinlock, flags);
4180     @@ -846,7 +848,9 @@ static ssize_t message_store(struct kobject *kobj, struct kobj_attribute *attr,
4181     {
4182     struct msg_group_t *group = spk_find_msg_group(attr->attr.name);
4183    
4184     - BUG_ON(!group);
4185     + if (WARN_ON(!group))
4186     + return -EINVAL;
4187     +
4188     return message_store_helper(buf, count, group);
4189     }
4190    
4191     diff --git a/drivers/staging/wilc1000/host_interface.c b/drivers/staging/wilc1000/host_interface.c
4192     index 6ab7443eabde..6326375b76ab 100644
4193     --- a/drivers/staging/wilc1000/host_interface.c
4194     +++ b/drivers/staging/wilc1000/host_interface.c
4195     @@ -1930,6 +1930,8 @@ static s32 Handle_Get_InActiveTime(struct wilc_vif *vif,
4196     wid.type = WID_STR;
4197     wid.size = ETH_ALEN;
4198     wid.val = kmalloc(wid.size, GFP_KERNEL);
4199     + if (!wid.val)
4200     + return -ENOMEM;
4201    
4202     stamac = wid.val;
4203     memcpy(stamac, strHostIfStaInactiveT->mac, ETH_ALEN);
4204     diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
4205     index e2c33b9528d8..b42d7f1c9089 100644
4206     --- a/drivers/tty/serial/amba-pl011.c
4207     +++ b/drivers/tty/serial/amba-pl011.c
4208     @@ -1302,14 +1302,15 @@ static void pl011_stop_tx(struct uart_port *port)
4209     pl011_dma_tx_stop(uap);
4210     }
4211    
4212     -static void pl011_tx_chars(struct uart_amba_port *uap, bool from_irq);
4213     +static bool pl011_tx_chars(struct uart_amba_port *uap, bool from_irq);
4214    
4215     /* Start TX with programmed I/O only (no DMA) */
4216     static void pl011_start_tx_pio(struct uart_amba_port *uap)
4217     {
4218     - uap->im |= UART011_TXIM;
4219     - pl011_write(uap->im, uap, REG_IMSC);
4220     - pl011_tx_chars(uap, false);
4221     + if (pl011_tx_chars(uap, false)) {
4222     + uap->im |= UART011_TXIM;
4223     + pl011_write(uap->im, uap, REG_IMSC);
4224     + }
4225     }
4226    
4227     static void pl011_start_tx(struct uart_port *port)
4228     @@ -1389,25 +1390,26 @@ static bool pl011_tx_char(struct uart_amba_port *uap, unsigned char c,
4229     return true;
4230     }
4231    
4232     -static void pl011_tx_chars(struct uart_amba_port *uap, bool from_irq)
4233     +/* Returns true if tx interrupts have to be (kept) enabled */
4234     +static bool pl011_tx_chars(struct uart_amba_port *uap, bool from_irq)
4235     {
4236     struct circ_buf *xmit = &uap->port.state->xmit;
4237     int count = uap->fifosize >> 1;
4238    
4239     if (uap->port.x_char) {
4240     if (!pl011_tx_char(uap, uap->port.x_char, from_irq))
4241     - return;
4242     + return true;
4243     uap->port.x_char = 0;
4244     --count;
4245     }
4246     if (uart_circ_empty(xmit) || uart_tx_stopped(&uap->port)) {
4247     pl011_stop_tx(&uap->port);
4248     - return;
4249     + return false;
4250     }
4251    
4252     /* If we are using DMA mode, try to send some characters. */
4253     if (pl011_dma_tx_irq(uap))
4254     - return;
4255     + return true;
4256    
4257     do {
4258     if (likely(from_irq) && count-- == 0)
4259     @@ -1422,8 +1424,11 @@ static void pl011_tx_chars(struct uart_amba_port *uap, bool from_irq)
4260     if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
4261     uart_write_wakeup(&uap->port);
4262    
4263     - if (uart_circ_empty(xmit))
4264     + if (uart_circ_empty(xmit)) {
4265     pl011_stop_tx(&uap->port);
4266     + return false;
4267     + }
4268     + return true;
4269     }
4270    
4271     static void pl011_modem_status(struct uart_amba_port *uap)
4272     diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
4273     index 521a6e450755..f575a33974fa 100644
4274     --- a/drivers/tty/serial/imx.c
4275     +++ b/drivers/tty/serial/imx.c
4276     @@ -1316,19 +1316,10 @@ static int imx_startup(struct uart_port *port)
4277     if (!is_imx1_uart(sport)) {
4278     temp = readl(sport->port.membase + UCR3);
4279    
4280     - /*
4281     - * The effect of RI and DCD differs depending on the UFCR_DCEDTE
4282     - * bit. In DCE mode they control the outputs, in DTE mode they
4283     - * enable the respective irqs. At least the DCD irq cannot be
4284     - * cleared on i.MX25 at least, so it's not usable and must be
4285     - * disabled. I don't have test hardware to check if RI has the
4286     - * same problem but I consider this likely so it's disabled for
4287     - * now, too.
4288     - */
4289     - temp |= IMX21_UCR3_RXDMUXSEL | UCR3_ADNIMP |
4290     - UCR3_DTRDEN | UCR3_RI | UCR3_DCD;
4291     + temp |= UCR3_DTRDEN | UCR3_RI | UCR3_DCD;
4292    
4293     if (sport->dte_mode)
4294     + /* disable broken interrupts */
4295     temp &= ~(UCR3_RI | UCR3_DCD);
4296    
4297     writel(temp, sport->port.membase + UCR3);
4298     @@ -1583,8 +1574,6 @@ imx_set_termios(struct uart_port *port, struct ktermios *termios,
4299    
4300     ufcr = readl(sport->port.membase + UFCR);
4301     ufcr = (ufcr & (~UFCR_RFDIV)) | UFCR_RFDIV_REG(div);
4302     - if (sport->dte_mode)
4303     - ufcr |= UFCR_DCEDTE;
4304     writel(ufcr, sport->port.membase + UFCR);
4305    
4306     writel(num, sport->port.membase + UBIR);
4307     @@ -2149,6 +2138,27 @@ static int serial_imx_probe(struct platform_device *pdev)
4308     UCR1_TXMPTYEN | UCR1_RTSDEN);
4309     writel_relaxed(reg, sport->port.membase + UCR1);
4310    
4311     + if (!is_imx1_uart(sport) && sport->dte_mode) {
4312     + /*
4313     + * The DCEDTE bit changes the direction of DSR, DCD, DTR and RI
4314     + * and influences if UCR3_RI and UCR3_DCD changes the level of RI
4315     + * and DCD (when they are outputs) or enables the respective
4316     + * irqs. So set this bit early, i.e. before requesting irqs.
4317     + */
4318     + writel(UFCR_DCEDTE, sport->port.membase + UFCR);
4319     +
4320     + /*
4321     + * Disable UCR3_RI and UCR3_DCD irqs. They are also not
4322     + * enabled later because they cannot be cleared
4323     + * (confirmed on i.MX25) which makes them unusable.
4324     + */
4325     + writel(IMX21_UCR3_RXDMUXSEL | UCR3_ADNIMP | UCR3_DSR,
4326     + sport->port.membase + UCR3);
4327     +
4328     + } else {
4329     + writel(0, sport->port.membase + UFCR);
4330     + }
4331     +
4332     clk_disable_unprepare(sport->clk_ipg);
4333    
4334     /*
4335     diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
4336     index df5a06578005..dfc0566bb155 100644
4337     --- a/drivers/usb/dwc2/hcd.c
4338     +++ b/drivers/usb/dwc2/hcd.c
4339     @@ -3220,6 +3220,7 @@ static void dwc2_conn_id_status_change(struct work_struct *work)
4340     dwc2_core_init(hsotg, false);
4341     dwc2_enable_global_interrupts(hsotg);
4342     spin_lock_irqsave(&hsotg->lock, flags);
4343     + dwc2_hsotg_disconnect(hsotg);
4344     dwc2_hsotg_core_init_disconnected(hsotg, false);
4345     spin_unlock_irqrestore(&hsotg->lock, flags);
4346     dwc2_hsotg_core_connect(hsotg);
4347     diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
4348     index fea446900cad..a0c2b8b6edd0 100644
4349     --- a/drivers/usb/dwc3/core.c
4350     +++ b/drivers/usb/dwc3/core.c
4351     @@ -463,6 +463,12 @@ static int dwc3_phy_setup(struct dwc3 *dwc)
4352    
4353     reg = dwc3_readl(dwc->regs, DWC3_GUSB3PIPECTL(0));
4354    
4355     + /*
4356     + * Make sure UX_EXIT_PX is cleared as that causes issues with some
4357     + * PHYs. Also, this bit is not supposed to be used in normal operation.
4358     + */
4359     + reg &= ~DWC3_GUSB3PIPECTL_UX_EXIT_PX;
4360     +
4361     /*
4362     * Above 1.94a, it is recommended to set DWC3_GUSB3PIPECTL_SUSPHY
4363     * to '0' during coreConsultant configuration. So default value
4364     diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
4365     index 884c43714456..94d6a3e2ad97 100644
4366     --- a/drivers/usb/dwc3/core.h
4367     +++ b/drivers/usb/dwc3/core.h
4368     @@ -159,13 +159,15 @@
4369     #define DWC3_GDBGFIFOSPACE_TYPE(n) (((n) << 5) & 0x1e0)
4370     #define DWC3_GDBGFIFOSPACE_SPACE_AVAILABLE(n) (((n) >> 16) & 0xffff)
4371    
4372     -#define DWC3_TXFIFOQ 1
4373     -#define DWC3_RXFIFOQ 3
4374     -#define DWC3_TXREQQ 5
4375     -#define DWC3_RXREQQ 7
4376     -#define DWC3_RXINFOQ 9
4377     -#define DWC3_DESCFETCHQ 13
4378     -#define DWC3_EVENTQ 15
4379     +#define DWC3_TXFIFOQ 0
4380     +#define DWC3_RXFIFOQ 1
4381     +#define DWC3_TXREQQ 2
4382     +#define DWC3_RXREQQ 3
4383     +#define DWC3_RXINFOQ 4
4384     +#define DWC3_PSTATQ 5
4385     +#define DWC3_DESCFETCHQ 6
4386     +#define DWC3_EVENTQ 7
4387     +#define DWC3_AUXEVENTQ 8
4388    
4389     /* Global RX Threshold Configuration Register */
4390     #define DWC3_GRXTHRCFG_MAXRXBURSTSIZE(n) (((n) & 0x1f) << 19)
4391     @@ -223,6 +225,7 @@
4392     #define DWC3_GUSB3PIPECTL_PHYSOFTRST (1 << 31)
4393     #define DWC3_GUSB3PIPECTL_U2SSINP3OK (1 << 29)
4394     #define DWC3_GUSB3PIPECTL_DISRXDETINP3 (1 << 28)
4395     +#define DWC3_GUSB3PIPECTL_UX_EXIT_PX (1 << 27)
4396     #define DWC3_GUSB3PIPECTL_REQP1P2P3 (1 << 24)
4397     #define DWC3_GUSB3PIPECTL_DEP1P2P3(n) ((n) << 19)
4398     #define DWC3_GUSB3PIPECTL_DEP1P2P3_MASK DWC3_GUSB3PIPECTL_DEP1P2P3(7)
4399     diff --git a/drivers/usb/gadget/udc/bdc/bdc_core.c b/drivers/usb/gadget/udc/bdc/bdc_core.c
4400     index ccb9c213cc9f..e9bd8d4abca0 100644
4401     --- a/drivers/usb/gadget/udc/bdc/bdc_core.c
4402     +++ b/drivers/usb/gadget/udc/bdc/bdc_core.c
4403     @@ -475,7 +475,7 @@ static int bdc_probe(struct platform_device *pdev)
4404     bdc->dev = dev;
4405     dev_dbg(bdc->dev, "bdc->regs: %p irq=%d\n", bdc->regs, bdc->irq);
4406    
4407     - temp = bdc_readl(bdc->regs, BDC_BDCSC);
4408     + temp = bdc_readl(bdc->regs, BDC_BDCCAP1);
4409     if ((temp & BDC_P64) &&
4410     !dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64))) {
4411     dev_dbg(bdc->dev, "Using 64-bit address\n");
4412     diff --git a/drivers/usb/gadget/udc/bdc/bdc_pci.c b/drivers/usb/gadget/udc/bdc/bdc_pci.c
4413     index 02968842b359..708e36f530d8 100644
4414     --- a/drivers/usb/gadget/udc/bdc/bdc_pci.c
4415     +++ b/drivers/usb/gadget/udc/bdc/bdc_pci.c
4416     @@ -82,6 +82,7 @@ static int bdc_pci_probe(struct pci_dev *pci, const struct pci_device_id *id)
4417     if (ret) {
4418     dev_err(&pci->dev,
4419     "couldn't add resources to bdc device\n");
4420     + platform_device_put(bdc);
4421     return ret;
4422     }
4423    
4424     diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
4425     index b62a3de65075..ff4d6cac7ac0 100644
4426     --- a/drivers/usb/gadget/udc/dummy_hcd.c
4427     +++ b/drivers/usb/gadget/udc/dummy_hcd.c
4428     @@ -2103,16 +2103,13 @@ static int dummy_hub_control(
4429     }
4430     break;
4431     case USB_PORT_FEAT_POWER:
4432     - if (hcd->speed == HCD_USB3) {
4433     - if (dum_hcd->port_status & USB_PORT_STAT_POWER)
4434     - dev_dbg(dummy_dev(dum_hcd),
4435     - "power-off\n");
4436     - } else
4437     - if (dum_hcd->port_status &
4438     - USB_SS_PORT_STAT_POWER)
4439     - dev_dbg(dummy_dev(dum_hcd),
4440     - "power-off\n");
4441     - /* FALLS THROUGH */
4442     + dev_dbg(dummy_dev(dum_hcd), "power-off\n");
4443     + if (hcd->speed == HCD_USB3)
4444     + dum_hcd->port_status &= ~USB_SS_PORT_STAT_POWER;
4445     + else
4446     + dum_hcd->port_status &= ~USB_PORT_STAT_POWER;
4447     + set_link_state(dum_hcd);
4448     + break;
4449     default:
4450     dum_hcd->port_status &= ~(1 << wValue);
4451     set_link_state(dum_hcd);
4452     @@ -2283,14 +2280,13 @@ static int dummy_hub_control(
4453     if ((dum_hcd->port_status &
4454     USB_SS_PORT_STAT_POWER) != 0) {
4455     dum_hcd->port_status |= (1 << wValue);
4456     - set_link_state(dum_hcd);
4457     }
4458     } else
4459     if ((dum_hcd->port_status &
4460     USB_PORT_STAT_POWER) != 0) {
4461     dum_hcd->port_status |= (1 << wValue);
4462     - set_link_state(dum_hcd);
4463     }
4464     + set_link_state(dum_hcd);
4465     }
4466     break;
4467     case GetPortErrorCount:
4468     diff --git a/drivers/usb/misc/lvstest.c b/drivers/usb/misc/lvstest.c
4469     index d3d124753266..bd6e06ef88ac 100644
4470     --- a/drivers/usb/misc/lvstest.c
4471     +++ b/drivers/usb/misc/lvstest.c
4472     @@ -433,6 +433,7 @@ static void lvs_rh_disconnect(struct usb_interface *intf)
4473     struct lvs_rh *lvs = usb_get_intfdata(intf);
4474    
4475     sysfs_remove_group(&intf->dev.kobj, &lvs_attr_group);
4476     + usb_poison_urb(lvs->urb); /* used in scheduled work */
4477     flush_work(&lvs->rh_work);
4478     usb_free_urb(lvs->urb);
4479     }
4480     diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c
4481     index 59b3f62a2d64..70c748a5fbcc 100644
4482     --- a/drivers/vfio/vfio_iommu_spapr_tce.c
4483     +++ b/drivers/vfio/vfio_iommu_spapr_tce.c
4484     @@ -195,6 +195,11 @@ static long tce_iommu_register_pages(struct tce_container *container,
4485     return ret;
4486    
4487     tcemem = kzalloc(sizeof(*tcemem), GFP_KERNEL);
4488     + if (!tcemem) {
4489     + mm_iommu_put(container->mm, mem);
4490     + return -ENOMEM;
4491     + }
4492     +
4493     tcemem->mem = mem;
4494     list_add(&tcemem->next, &container->prereg_list);
4495    
4496     @@ -1332,8 +1337,16 @@ static int tce_iommu_attach_group(void *iommu_data,
4497    
4498     if (!table_group->ops || !table_group->ops->take_ownership ||
4499     !table_group->ops->release_ownership) {
4500     + if (container->v2) {
4501     + ret = -EPERM;
4502     + goto unlock_exit;
4503     + }
4504     ret = tce_iommu_take_ownership(container, table_group);
4505     } else {
4506     + if (!container->v2) {
4507     + ret = -EPERM;
4508     + goto unlock_exit;
4509     + }
4510     ret = tce_iommu_take_ownership_ddw(container, table_group);
4511     if (!tce_groups_attached(container) && !container->tables[0])
4512     container->def_window_pending = true;
4513     diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c
4514     index ec2671d98abc..89880b70cc28 100644
4515     --- a/drivers/video/fbdev/amba-clcd.c
4516     +++ b/drivers/video/fbdev/amba-clcd.c
4517     @@ -892,8 +892,8 @@ static int clcdfb_of_dma_setup(struct clcd_fb *fb)
4518     if (err)
4519     return err;
4520    
4521     - framesize = fb->panel->mode.xres * fb->panel->mode.yres *
4522     - fb->panel->bpp / 8;
4523     + framesize = PAGE_ALIGN(fb->panel->mode.xres * fb->panel->mode.yres *
4524     + fb->panel->bpp / 8);
4525     fb->fb.screen_base = dma_alloc_coherent(&fb->dev->dev, framesize,
4526     &dma, GFP_KERNEL);
4527     if (!fb->fb.screen_base)
4528     diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dss.c b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
4529     index 47d7f69ad9ad..48c6500c24e1 100644
4530     --- a/drivers/video/fbdev/omap2/omapfb/dss/dss.c
4531     +++ b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
4532     @@ -941,11 +941,13 @@ static int dss_init_features(struct platform_device *pdev)
4533     return 0;
4534     }
4535    
4536     +static void dss_uninit_ports(struct platform_device *pdev);
4537     +
4538     static int dss_init_ports(struct platform_device *pdev)
4539     {
4540     struct device_node *parent = pdev->dev.of_node;
4541     struct device_node *port;
4542     - int r;
4543     + int r, ret = 0;
4544    
4545     if (parent == NULL)
4546     return 0;
4547     @@ -972,17 +974,21 @@ static int dss_init_ports(struct platform_device *pdev)
4548    
4549     switch (port_type) {
4550     case OMAP_DISPLAY_TYPE_DPI:
4551     - dpi_init_port(pdev, port);
4552     + ret = dpi_init_port(pdev, port);
4553     break;
4554     case OMAP_DISPLAY_TYPE_SDI:
4555     - sdi_init_port(pdev, port);
4556     + ret = sdi_init_port(pdev, port);
4557     break;
4558     default:
4559     break;
4560     }
4561     - } while ((port = omapdss_of_get_next_port(parent, port)) != NULL);
4562     + } while (!ret &&
4563     + (port = omapdss_of_get_next_port(parent, port)) != NULL);
4564    
4565     - return 0;
4566     + if (ret)
4567     + dss_uninit_ports(pdev);
4568     +
4569     + return ret;
4570     }
4571    
4572     static void dss_uninit_ports(struct platform_device *pdev)
4573     diff --git a/drivers/video/hdmi.c b/drivers/video/hdmi.c
4574     index 162689227a23..b73520aaf697 100644
4575     --- a/drivers/video/hdmi.c
4576     +++ b/drivers/video/hdmi.c
4577     @@ -321,6 +321,17 @@ int hdmi_vendor_infoframe_init(struct hdmi_vendor_infoframe *frame)
4578     }
4579     EXPORT_SYMBOL(hdmi_vendor_infoframe_init);
4580    
4581     +static int hdmi_vendor_infoframe_length(const struct hdmi_vendor_infoframe *frame)
4582     +{
4583     + /* for side by side (half) we also need to provide 3D_Ext_Data */
4584     + if (frame->s3d_struct >= HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF)
4585     + return 6;
4586     + else if (frame->vic != 0 || frame->s3d_struct != HDMI_3D_STRUCTURE_INVALID)
4587     + return 5;
4588     + else
4589     + return 4;
4590     +}
4591     +
4592     /**
4593     * hdmi_vendor_infoframe_pack() - write a HDMI vendor infoframe to binary buffer
4594     * @frame: HDMI infoframe
4595     @@ -341,19 +352,11 @@ ssize_t hdmi_vendor_infoframe_pack(struct hdmi_vendor_infoframe *frame,
4596     u8 *ptr = buffer;
4597     size_t length;
4598    
4599     - /* empty info frame */
4600     - if (frame->vic == 0 && frame->s3d_struct == HDMI_3D_STRUCTURE_INVALID)
4601     - return -EINVAL;
4602     -
4603     /* only one of those can be supplied */
4604     if (frame->vic != 0 && frame->s3d_struct != HDMI_3D_STRUCTURE_INVALID)
4605     return -EINVAL;
4606    
4607     - /* for side by side (half) we also need to provide 3D_Ext_Data */
4608     - if (frame->s3d_struct >= HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF)
4609     - frame->length = 6;
4610     - else
4611     - frame->length = 5;
4612     + frame->length = hdmi_vendor_infoframe_length(frame);
4613    
4614     length = HDMI_INFOFRAME_HEADER_SIZE + frame->length;
4615    
4616     @@ -372,14 +375,16 @@ ssize_t hdmi_vendor_infoframe_pack(struct hdmi_vendor_infoframe *frame,
4617     ptr[5] = 0x0c;
4618     ptr[6] = 0x00;
4619    
4620     - if (frame->vic) {
4621     - ptr[7] = 0x1 << 5; /* video format */
4622     - ptr[8] = frame->vic;
4623     - } else {
4624     + if (frame->s3d_struct != HDMI_3D_STRUCTURE_INVALID) {
4625     ptr[7] = 0x2 << 5; /* video format */
4626     ptr[8] = (frame->s3d_struct & 0xf) << 4;
4627     if (frame->s3d_struct >= HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF)
4628     ptr[9] = (frame->s3d_ext_data & 0xf) << 4;
4629     + } else if (frame->vic) {
4630     + ptr[7] = 0x1 << 5; /* video format */
4631     + ptr[8] = frame->vic;
4632     + } else {
4633     + ptr[7] = 0x0 << 5; /* video format */
4634     }
4635    
4636     hdmi_infoframe_set_checksum(buffer, length);
4637     @@ -1161,7 +1166,7 @@ hdmi_vendor_any_infoframe_unpack(union hdmi_vendor_any_infoframe *frame,
4638    
4639     if (ptr[0] != HDMI_INFOFRAME_TYPE_VENDOR ||
4640     ptr[1] != 1 ||
4641     - (ptr[2] != 5 && ptr[2] != 6))
4642     + (ptr[2] != 4 && ptr[2] != 5 && ptr[2] != 6))
4643     return -EINVAL;
4644    
4645     length = ptr[2];
4646     @@ -1189,16 +1194,22 @@ hdmi_vendor_any_infoframe_unpack(union hdmi_vendor_any_infoframe *frame,
4647    
4648     hvf->length = length;
4649    
4650     - if (hdmi_video_format == 0x1) {
4651     - hvf->vic = ptr[4];
4652     - } else if (hdmi_video_format == 0x2) {
4653     + if (hdmi_video_format == 0x2) {
4654     + if (length != 5 && length != 6)
4655     + return -EINVAL;
4656     hvf->s3d_struct = ptr[4] >> 4;
4657     if (hvf->s3d_struct >= HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF) {
4658     - if (length == 6)
4659     - hvf->s3d_ext_data = ptr[5] >> 4;
4660     - else
4661     + if (length != 6)
4662     return -EINVAL;
4663     + hvf->s3d_ext_data = ptr[5] >> 4;
4664     }
4665     + } else if (hdmi_video_format == 0x1) {
4666     + if (length != 5)
4667     + return -EINVAL;
4668     + hvf->vic = ptr[4];
4669     + } else {
4670     + if (length != 4)
4671     + return -EINVAL;
4672     }
4673    
4674     return 0;
4675     diff --git a/fs/aio.c b/fs/aio.c
4676     index 0fcb49ad67d4..0606f033cd9b 100644
4677     --- a/fs/aio.c
4678     +++ b/fs/aio.c
4679     @@ -68,9 +68,9 @@ struct aio_ring {
4680     #define AIO_RING_PAGES 8
4681    
4682     struct kioctx_table {
4683     - struct rcu_head rcu;
4684     - unsigned nr;
4685     - struct kioctx *table[];
4686     + struct rcu_head rcu;
4687     + unsigned nr;
4688     + struct kioctx __rcu *table[];
4689     };
4690    
4691     struct kioctx_cpu {
4692     @@ -115,7 +115,8 @@ struct kioctx {
4693     struct page **ring_pages;
4694     long nr_pages;
4695    
4696     - struct work_struct free_work;
4697     + struct rcu_head free_rcu;
4698     + struct work_struct free_work; /* see free_ioctx() */
4699    
4700     /*
4701     * signals when all in-flight requests are done
4702     @@ -329,7 +330,7 @@ static int aio_ring_mremap(struct vm_area_struct *vma)
4703     for (i = 0; i < table->nr; i++) {
4704     struct kioctx *ctx;
4705    
4706     - ctx = table->table[i];
4707     + ctx = rcu_dereference(table->table[i]);
4708     if (ctx && ctx->aio_ring_file == file) {
4709     if (!atomic_read(&ctx->dead)) {
4710     ctx->user_id = ctx->mmap_base = vma->vm_start;
4711     @@ -581,6 +582,12 @@ static int kiocb_cancel(struct aio_kiocb *kiocb)
4712     return cancel(&kiocb->common);
4713     }
4714    
4715     +/*
4716     + * free_ioctx() should be RCU delayed to synchronize against the RCU
4717     + * protected lookup_ioctx() and also needs process context to call
4718     + * aio_free_ring(), so the double bouncing through kioctx->free_rcu and
4719     + * ->free_work.
4720     + */
4721     static void free_ioctx(struct work_struct *work)
4722     {
4723     struct kioctx *ctx = container_of(work, struct kioctx, free_work);
4724     @@ -594,6 +601,14 @@ static void free_ioctx(struct work_struct *work)
4725     kmem_cache_free(kioctx_cachep, ctx);
4726     }
4727    
4728     +static void free_ioctx_rcufn(struct rcu_head *head)
4729     +{
4730     + struct kioctx *ctx = container_of(head, struct kioctx, free_rcu);
4731     +
4732     + INIT_WORK(&ctx->free_work, free_ioctx);
4733     + schedule_work(&ctx->free_work);
4734     +}
4735     +
4736     static void free_ioctx_reqs(struct percpu_ref *ref)
4737     {
4738     struct kioctx *ctx = container_of(ref, struct kioctx, reqs);
4739     @@ -602,8 +617,8 @@ static void free_ioctx_reqs(struct percpu_ref *ref)
4740     if (ctx->rq_wait && atomic_dec_and_test(&ctx->rq_wait->count))
4741     complete(&ctx->rq_wait->comp);
4742    
4743     - INIT_WORK(&ctx->free_work, free_ioctx);
4744     - schedule_work(&ctx->free_work);
4745     + /* Synchronize against RCU protected table->table[] dereferences */
4746     + call_rcu(&ctx->free_rcu, free_ioctx_rcufn);
4747     }
4748    
4749     /*
4750     @@ -644,9 +659,9 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
4751     while (1) {
4752     if (table)
4753     for (i = 0; i < table->nr; i++)
4754     - if (!table->table[i]) {
4755     + if (!rcu_access_pointer(table->table[i])) {
4756     ctx->id = i;
4757     - table->table[i] = ctx;
4758     + rcu_assign_pointer(table->table[i], ctx);
4759     spin_unlock(&mm->ioctx_lock);
4760    
4761     /* While kioctx setup is in progress,
4762     @@ -821,11 +836,11 @@ static int kill_ioctx(struct mm_struct *mm, struct kioctx *ctx,
4763     }
4764    
4765     table = rcu_dereference_raw(mm->ioctx_table);
4766     - WARN_ON(ctx != table->table[ctx->id]);
4767     - table->table[ctx->id] = NULL;
4768     + WARN_ON(ctx != rcu_access_pointer(table->table[ctx->id]));
4769     + RCU_INIT_POINTER(table->table[ctx->id], NULL);
4770     spin_unlock(&mm->ioctx_lock);
4771    
4772     - /* percpu_ref_kill() will do the necessary call_rcu() */
4773     + /* free_ioctx_reqs() will do the necessary RCU synchronization */
4774     wake_up_all(&ctx->wait);
4775    
4776     /*
4777     @@ -867,7 +882,8 @@ void exit_aio(struct mm_struct *mm)
4778    
4779     skipped = 0;
4780     for (i = 0; i < table->nr; ++i) {
4781     - struct kioctx *ctx = table->table[i];
4782     + struct kioctx *ctx =
4783     + rcu_dereference_protected(table->table[i], true);
4784    
4785     if (!ctx) {
4786     skipped++;
4787     @@ -1056,7 +1072,7 @@ static struct kioctx *lookup_ioctx(unsigned long ctx_id)
4788     if (!table || id >= table->nr)
4789     goto out;
4790    
4791     - ctx = table->table[id];
4792     + ctx = rcu_dereference(table->table[id]);
4793     if (ctx && ctx->user_id == ctx_id) {
4794     percpu_ref_get(&ctx->users);
4795     ret = ctx;
4796     diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
4797     index 06a77e47957d..5900508ca6ed 100644
4798     --- a/fs/btrfs/volumes.c
4799     +++ b/fs/btrfs/volumes.c
4800     @@ -583,6 +583,7 @@ void btrfs_free_stale_device(struct btrfs_device *cur_dev)
4801     btrfs_sysfs_remove_fsid(fs_devs);
4802     list_del(&fs_devs->list);
4803     free_fs_devices(fs_devs);
4804     + break;
4805     } else {
4806     fs_devs->num_devices--;
4807     list_del(&dev->dev_list);
4808     @@ -4748,10 +4749,13 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
4809     if (devs_max && ndevs > devs_max)
4810     ndevs = devs_max;
4811     /*
4812     - * the primary goal is to maximize the number of stripes, so use as many
4813     - * devices as possible, even if the stripes are not maximum sized.
4814     + * The primary goal is to maximize the number of stripes, so use as
4815     + * many devices as possible, even if the stripes are not maximum sized.
4816     + *
4817     + * The DUP profile stores more than one stripe per device, the
4818     + * max_avail is the total size so we have to adjust.
4819     */
4820     - stripe_size = devices_info[ndevs-1].max_avail;
4821     + stripe_size = div_u64(devices_info[ndevs - 1].max_avail, dev_stripes);
4822     num_stripes = ndevs * dev_stripes;
4823    
4824     /*
4825     @@ -4791,8 +4795,6 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
4826     stripe_size = devices_info[ndevs-1].max_avail;
4827     }
4828    
4829     - stripe_size = div_u64(stripe_size, dev_stripes);
4830     -
4831     /* align to BTRFS_STRIPE_LEN */
4832     stripe_size = div_u64(stripe_size, raid_stripe_len);
4833     stripe_size *= raid_stripe_len;
4834     diff --git a/fs/dcache.c b/fs/dcache.c
4835     index 67957f5b325c..c0c7fa8224ba 100644
4836     --- a/fs/dcache.c
4837     +++ b/fs/dcache.c
4838     @@ -637,11 +637,16 @@ static inline struct dentry *lock_parent(struct dentry *dentry)
4839     spin_unlock(&parent->d_lock);
4840     goto again;
4841     }
4842     - rcu_read_unlock();
4843     - if (parent != dentry)
4844     + if (parent != dentry) {
4845     spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
4846     - else
4847     + if (unlikely(dentry->d_lockref.count < 0)) {
4848     + spin_unlock(&parent->d_lock);
4849     + parent = NULL;
4850     + }
4851     + } else {
4852     parent = NULL;
4853     + }
4854     + rcu_read_unlock();
4855     return parent;
4856     }
4857    
4858     diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
4859     index 34a69e7ed90b..17ab23f64bba 100644
4860     --- a/fs/f2fs/gc.c
4861     +++ b/fs/f2fs/gc.c
4862     @@ -538,8 +538,10 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
4863     get_node_info(sbi, nid, dni);
4864    
4865     if (sum->version != dni->version) {
4866     - f2fs_put_page(node_page, 1);
4867     - return false;
4868     + f2fs_msg(sbi->sb, KERN_WARNING,
4869     + "%s: valid data with mismatched node version.",
4870     + __func__);
4871     + set_sbi_flag(sbi, SBI_NEED_FSCK);
4872     }
4873    
4874     *nofs = ofs_of_node(node_page);
4875     diff --git a/fs/namei.c b/fs/namei.c
4876     index 6cfb45f262aa..891670e0956b 100644
4877     --- a/fs/namei.c
4878     +++ b/fs/namei.c
4879     @@ -578,9 +578,10 @@ static int __nd_alloc_stack(struct nameidata *nd)
4880     static bool path_connected(const struct path *path)
4881     {
4882     struct vfsmount *mnt = path->mnt;
4883     + struct super_block *sb = mnt->mnt_sb;
4884    
4885     - /* Only bind mounts can have disconnected paths */
4886     - if (mnt->mnt_root == mnt->mnt_sb->s_root)
4887     + /* Bind mounts and multi-root filesystems can have disconnected paths */
4888     + if (!(sb->s_iflags & SB_I_MULTIROOT) && (mnt->mnt_root == sb->s_root))
4889     return true;
4890    
4891     return is_subdir(path->dentry, mnt->mnt_root);
4892     @@ -1121,9 +1122,6 @@ static int follow_automount(struct path *path, struct nameidata *nd,
4893     path->dentry->d_inode)
4894     return -EISDIR;
4895    
4896     - if (path->dentry->d_sb->s_user_ns != &init_user_ns)
4897     - return -EACCES;
4898     -
4899     nd->total_link_count++;
4900     if (nd->total_link_count >= 40)
4901     return -ELOOP;
4902     diff --git a/fs/nfs/super.c b/fs/nfs/super.c
4903     index 51bf1f9ab287..2fdb8f5a7b69 100644
4904     --- a/fs/nfs/super.c
4905     +++ b/fs/nfs/super.c
4906     @@ -2613,6 +2613,8 @@ struct dentry *nfs_fs_mount_common(struct nfs_server *server,
4907     /* initial superblock/root creation */
4908     mount_info->fill_super(s, mount_info);
4909     nfs_get_cache_cookie(s, mount_info->parsed, mount_info->cloned);
4910     + if (!(server->flags & NFS_MOUNT_UNSHARED))
4911     + s->s_iflags |= SB_I_MULTIROOT;
4912     }
4913    
4914     mntroot = nfs_get_root(s, mount_info->mntfh, dev_name);
4915     diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c
4916     index bc2dde2423c2..76108185854e 100644
4917     --- a/fs/reiserfs/journal.c
4918     +++ b/fs/reiserfs/journal.c
4919     @@ -1959,7 +1959,7 @@ static int do_journal_release(struct reiserfs_transaction_handle *th,
4920     * will be requeued because superblock is being shutdown and doesn't
4921     * have MS_ACTIVE set.
4922     */
4923     - cancel_delayed_work_sync(&REISERFS_SB(sb)->old_work);
4924     + reiserfs_cancel_old_flush(sb);
4925     /* wait for all commits to finish */
4926     cancel_delayed_work_sync(&SB_JOURNAL(sb)->j_work);
4927    
4928     diff --git a/fs/reiserfs/reiserfs.h b/fs/reiserfs/reiserfs.h
4929     index 5dcf3ab83886..6ca00471afbf 100644
4930     --- a/fs/reiserfs/reiserfs.h
4931     +++ b/fs/reiserfs/reiserfs.h
4932     @@ -2948,6 +2948,7 @@ int reiserfs_allocate_list_bitmaps(struct super_block *s,
4933     struct reiserfs_list_bitmap *, unsigned int);
4934    
4935     void reiserfs_schedule_old_flush(struct super_block *s);
4936     +void reiserfs_cancel_old_flush(struct super_block *s);
4937     void add_save_link(struct reiserfs_transaction_handle *th,
4938     struct inode *inode, int truncate);
4939     int remove_save_link(struct inode *inode, int truncate);
4940     diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
4941     index e101d70d2327..dec6c93044fa 100644
4942     --- a/fs/reiserfs/super.c
4943     +++ b/fs/reiserfs/super.c
4944     @@ -90,7 +90,9 @@ static void flush_old_commits(struct work_struct *work)
4945     s = sbi->s_journal->j_work_sb;
4946    
4947     spin_lock(&sbi->old_work_lock);
4948     - sbi->work_queued = 0;
4949     + /* Avoid clobbering the cancel state... */
4950     + if (sbi->work_queued == 1)
4951     + sbi->work_queued = 0;
4952     spin_unlock(&sbi->old_work_lock);
4953    
4954     reiserfs_sync_fs(s, 1);
4955     @@ -117,21 +119,22 @@ void reiserfs_schedule_old_flush(struct super_block *s)
4956     spin_unlock(&sbi->old_work_lock);
4957     }
4958    
4959     -static void cancel_old_flush(struct super_block *s)
4960     +void reiserfs_cancel_old_flush(struct super_block *s)
4961     {
4962     struct reiserfs_sb_info *sbi = REISERFS_SB(s);
4963    
4964     - cancel_delayed_work_sync(&REISERFS_SB(s)->old_work);
4965     spin_lock(&sbi->old_work_lock);
4966     - sbi->work_queued = 0;
4967     + /* Make sure no new flushes will be queued */
4968     + sbi->work_queued = 2;
4969     spin_unlock(&sbi->old_work_lock);
4970     + cancel_delayed_work_sync(&REISERFS_SB(s)->old_work);
4971     }
4972    
4973     static int reiserfs_freeze(struct super_block *s)
4974     {
4975     struct reiserfs_transaction_handle th;
4976    
4977     - cancel_old_flush(s);
4978     + reiserfs_cancel_old_flush(s);
4979    
4980     reiserfs_write_lock(s);
4981     if (!(s->s_flags & MS_RDONLY)) {
4982     @@ -152,7 +155,13 @@ static int reiserfs_freeze(struct super_block *s)
4983    
4984     static int reiserfs_unfreeze(struct super_block *s)
4985     {
4986     + struct reiserfs_sb_info *sbi = REISERFS_SB(s);
4987     +
4988     reiserfs_allow_writes(s);
4989     + spin_lock(&sbi->old_work_lock);
4990     + /* Allow old_work to run again */
4991     + sbi->work_queued = 0;
4992     + spin_unlock(&sbi->old_work_lock);
4993     return 0;
4994     }
4995    
4996     @@ -2194,7 +2203,7 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent)
4997     if (sbi->commit_wq)
4998     destroy_workqueue(sbi->commit_wq);
4999    
5000     - cancel_delayed_work_sync(&REISERFS_SB(s)->old_work);
5001     + reiserfs_cancel_old_flush(s);
5002    
5003     reiserfs_free_bitmap_cache(s);
5004     if (SB_BUFFER_WITH_SB(s))
5005     diff --git a/include/dt-bindings/clock/r8a7794-clock.h b/include/dt-bindings/clock/r8a7794-clock.h
5006     index 88e64846cf37..cdeafd9cab07 100644
5007     --- a/include/dt-bindings/clock/r8a7794-clock.h
5008     +++ b/include/dt-bindings/clock/r8a7794-clock.h
5009     @@ -81,6 +81,7 @@
5010     #define R8A7794_CLK_SCIF2 19
5011     #define R8A7794_CLK_SCIF1 20
5012     #define R8A7794_CLK_SCIF0 21
5013     +#define R8A7794_CLK_DU1 23
5014     #define R8A7794_CLK_DU0 24
5015    
5016     /* MSTP8 */
5017     diff --git a/include/linux/fs.h b/include/linux/fs.h
5018     index 18552189560b..e9867aff53d8 100644
5019     --- a/include/linux/fs.h
5020     +++ b/include/linux/fs.h
5021     @@ -1319,6 +1319,7 @@ struct mm_struct;
5022     #define SB_I_CGROUPWB 0x00000001 /* cgroup-aware writeback enabled */
5023     #define SB_I_NOEXEC 0x00000002 /* Ignore executables on this fs */
5024     #define SB_I_NODEV 0x00000004 /* Ignore devices on this fs */
5025     +#define SB_I_MULTIROOT 0x00000008 /* Multiple roots to the dentry tree */
5026    
5027     /* sb->s_iflags to limit user namespace mounts */
5028     #define SB_I_USERNS_VISIBLE 0x00000010 /* fstype already mounted */
5029     diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
5030     index 7dbe9148b2f8..35f4c4d9c405 100644
5031     --- a/include/linux/pagemap.h
5032     +++ b/include/linux/pagemap.h
5033     @@ -148,7 +148,7 @@ static inline int page_cache_get_speculative(struct page *page)
5034    
5035     #ifdef CONFIG_TINY_RCU
5036     # ifdef CONFIG_PREEMPT_COUNT
5037     - VM_BUG_ON(!in_atomic());
5038     + VM_BUG_ON(!in_atomic() && !irqs_disabled());
5039     # endif
5040     /*
5041     * Preempt must be disabled here - we rely on rcu_read_lock doing
5042     @@ -186,7 +186,7 @@ static inline int page_cache_add_speculative(struct page *page, int count)
5043    
5044     #if !defined(CONFIG_SMP) && defined(CONFIG_TREE_RCU)
5045     # ifdef CONFIG_PREEMPT_COUNT
5046     - VM_BUG_ON(!in_atomic());
5047     + VM_BUG_ON(!in_atomic() && !irqs_disabled());
5048     # endif
5049     VM_BUG_ON_PAGE(page_count(page) == 0, page);
5050     page_ref_add(page, count);
5051     diff --git a/include/linux/platform_data/isl9305.h b/include/linux/platform_data/isl9305.h
5052     index 1419133fa69e..4ac1a070af0a 100644
5053     --- a/include/linux/platform_data/isl9305.h
5054     +++ b/include/linux/platform_data/isl9305.h
5055     @@ -24,7 +24,7 @@
5056     struct regulator_init_data;
5057    
5058     struct isl9305_pdata {
5059     - struct regulator_init_data *init_data[ISL9305_MAX_REGULATOR];
5060     + struct regulator_init_data *init_data[ISL9305_MAX_REGULATOR + 1];
5061     };
5062    
5063     #endif
5064     diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h
5065     index 37b532410528..3c3786df044c 100644
5066     --- a/include/linux/regulator/driver.h
5067     +++ b/include/linux/regulator/driver.h
5068     @@ -425,6 +425,8 @@ struct regulator_dev {
5069     struct regulator_enable_gpio *ena_pin;
5070     unsigned int ena_gpio_state:1;
5071    
5072     + unsigned int is_switch:1;
5073     +
5074     /* time when this regulator was disabled last time */
5075     unsigned long last_off_jiffy;
5076     };
5077     diff --git a/include/net/tcp.h b/include/net/tcp.h
5078     index caf35e062639..18f029bcb8c7 100644
5079     --- a/include/net/tcp.h
5080     +++ b/include/net/tcp.h
5081     @@ -1265,9 +1265,11 @@ void tcp_select_initial_window(int __space, __u32 mss, __u32 *rcv_wnd,
5082    
5083     static inline int tcp_win_from_space(int space)
5084     {
5085     - return sysctl_tcp_adv_win_scale<=0 ?
5086     - (space>>(-sysctl_tcp_adv_win_scale)) :
5087     - space - (space>>sysctl_tcp_adv_win_scale);
5088     + int tcp_adv_win_scale = sysctl_tcp_adv_win_scale;
5089     +
5090     + return tcp_adv_win_scale <= 0 ?
5091     + (space>>(-tcp_adv_win_scale)) :
5092     + space - (space>>tcp_adv_win_scale);
5093     }
5094    
5095     /* Note: caller must be prepared to deal with negative returns */
5096     diff --git a/include/uapi/linux/eventpoll.h b/include/uapi/linux/eventpoll.h
5097     index bc96b14dfb2c..f4d5c998cc2b 100644
5098     --- a/include/uapi/linux/eventpoll.h
5099     +++ b/include/uapi/linux/eventpoll.h
5100     @@ -40,7 +40,7 @@
5101     #define EPOLLRDHUP 0x00002000
5102    
5103     /* Set exclusive wakeup mode for the target file descriptor */
5104     -#define EPOLLEXCLUSIVE (1 << 28)
5105     +#define EPOLLEXCLUSIVE (1U << 28)
5106    
5107     /*
5108     * Request the handling of system wakeup events so as to prevent system suspends
5109     @@ -52,13 +52,13 @@
5110     *
5111     * Requires CAP_BLOCK_SUSPEND
5112     */
5113     -#define EPOLLWAKEUP (1 << 29)
5114     +#define EPOLLWAKEUP (1U << 29)
5115    
5116     /* Set the One Shot behaviour for the target file descriptor */
5117     -#define EPOLLONESHOT (1 << 30)
5118     +#define EPOLLONESHOT (1U << 30)
5119    
5120     /* Set the Edge Triggered behaviour for the target file descriptor */
5121     -#define EPOLLET (1 << 31)
5122     +#define EPOLLET (1U << 31)
5123    
5124     /*
5125     * On x86-64 make the 64bit structure have the same alignment as the
5126     diff --git a/kernel/locking/locktorture.c b/kernel/locking/locktorture.c
5127     index d3de04b12f8c..babc67cfed69 100644
5128     --- a/kernel/locking/locktorture.c
5129     +++ b/kernel/locking/locktorture.c
5130     @@ -641,8 +641,7 @@ static void __torture_print_stats(char *page,
5131     {
5132     bool fail = 0;
5133     int i, n_stress;
5134     - long max = 0;
5135     - long min = statp[0].n_lock_acquired;
5136     + long max = 0, min = statp ? statp[0].n_lock_acquired : 0;
5137     long long sum = 0;
5138    
5139     n_stress = write ? cxt.nrealwriters_stress : cxt.nrealreaders_stress;
5140     @@ -749,7 +748,7 @@ static void lock_torture_cleanup(void)
5141     * such, only perform the underlying torture-specific cleanups,
5142     * and avoid anything related to locktorture.
5143     */
5144     - if (!cxt.lwsa)
5145     + if (!cxt.lwsa && !cxt.lrsa)
5146     goto end;
5147    
5148     if (writer_tasks) {
5149     @@ -823,6 +822,13 @@ static int __init lock_torture_init(void)
5150     firsterr = -EINVAL;
5151     goto unwind;
5152     }
5153     +
5154     + if (nwriters_stress == 0 && nreaders_stress == 0) {
5155     + pr_alert("lock-torture: must run at least one locking thread\n");
5156     + firsterr = -EINVAL;
5157     + goto unwind;
5158     + }
5159     +
5160     if (cxt.cur_ops->init)
5161     cxt.cur_ops->init();
5162    
5163     @@ -846,17 +852,19 @@ static int __init lock_torture_init(void)
5164     #endif
5165    
5166     /* Initialize the statistics so that each run gets its own numbers. */
5167     + if (nwriters_stress) {
5168     + lock_is_write_held = 0;
5169     + cxt.lwsa = kmalloc(sizeof(*cxt.lwsa) * cxt.nrealwriters_stress, GFP_KERNEL);
5170     + if (cxt.lwsa == NULL) {
5171     + VERBOSE_TOROUT_STRING("cxt.lwsa: Out of memory");
5172     + firsterr = -ENOMEM;
5173     + goto unwind;
5174     + }
5175    
5176     - lock_is_write_held = 0;
5177     - cxt.lwsa = kmalloc(sizeof(*cxt.lwsa) * cxt.nrealwriters_stress, GFP_KERNEL);
5178     - if (cxt.lwsa == NULL) {
5179     - VERBOSE_TOROUT_STRING("cxt.lwsa: Out of memory");
5180     - firsterr = -ENOMEM;
5181     - goto unwind;
5182     - }
5183     - for (i = 0; i < cxt.nrealwriters_stress; i++) {
5184     - cxt.lwsa[i].n_lock_fail = 0;
5185     - cxt.lwsa[i].n_lock_acquired = 0;
5186     + for (i = 0; i < cxt.nrealwriters_stress; i++) {
5187     + cxt.lwsa[i].n_lock_fail = 0;
5188     + cxt.lwsa[i].n_lock_acquired = 0;
5189     + }
5190     }
5191    
5192     if (cxt.cur_ops->readlock) {
5193     @@ -873,19 +881,21 @@ static int __init lock_torture_init(void)
5194     cxt.nrealreaders_stress = cxt.nrealwriters_stress;
5195     }
5196    
5197     - lock_is_read_held = 0;
5198     - cxt.lrsa = kmalloc(sizeof(*cxt.lrsa) * cxt.nrealreaders_stress, GFP_KERNEL);
5199     - if (cxt.lrsa == NULL) {
5200     - VERBOSE_TOROUT_STRING("cxt.lrsa: Out of memory");
5201     - firsterr = -ENOMEM;
5202     - kfree(cxt.lwsa);
5203     - cxt.lwsa = NULL;
5204     - goto unwind;
5205     - }
5206     -
5207     - for (i = 0; i < cxt.nrealreaders_stress; i++) {
5208     - cxt.lrsa[i].n_lock_fail = 0;
5209     - cxt.lrsa[i].n_lock_acquired = 0;
5210     + if (nreaders_stress) {
5211     + lock_is_read_held = 0;
5212     + cxt.lrsa = kmalloc(sizeof(*cxt.lrsa) * cxt.nrealreaders_stress, GFP_KERNEL);
5213     + if (cxt.lrsa == NULL) {
5214     + VERBOSE_TOROUT_STRING("cxt.lrsa: Out of memory");
5215     + firsterr = -ENOMEM;
5216     + kfree(cxt.lwsa);
5217     + cxt.lwsa = NULL;
5218     + goto unwind;
5219     + }
5220     +
5221     + for (i = 0; i < cxt.nrealreaders_stress; i++) {
5222     + cxt.lrsa[i].n_lock_fail = 0;
5223     + cxt.lrsa[i].n_lock_acquired = 0;
5224     + }
5225     }
5226     }
5227    
5228     @@ -915,12 +925,14 @@ static int __init lock_torture_init(void)
5229     goto unwind;
5230     }
5231    
5232     - writer_tasks = kzalloc(cxt.nrealwriters_stress * sizeof(writer_tasks[0]),
5233     - GFP_KERNEL);
5234     - if (writer_tasks == NULL) {
5235     - VERBOSE_TOROUT_ERRSTRING("writer_tasks: Out of memory");
5236     - firsterr = -ENOMEM;
5237     - goto unwind;
5238     + if (nwriters_stress) {
5239     + writer_tasks = kzalloc(cxt.nrealwriters_stress * sizeof(writer_tasks[0]),
5240     + GFP_KERNEL);
5241     + if (writer_tasks == NULL) {
5242     + VERBOSE_TOROUT_ERRSTRING("writer_tasks: Out of memory");
5243     + firsterr = -ENOMEM;
5244     + goto unwind;
5245     + }
5246     }
5247    
5248     if (cxt.cur_ops->readlock) {
5249     diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c
5250     index 2c49d76f96c3..196cc460e38d 100644
5251     --- a/kernel/locking/rtmutex.c
5252     +++ b/kernel/locking/rtmutex.c
5253     @@ -236,8 +236,7 @@ rt_mutex_waiter_less(struct rt_mutex_waiter *left,
5254     * then right waiter has a dl_prio() too.
5255     */
5256     if (dl_prio(left->prio))
5257     - return dl_time_before(left->task->dl.deadline,
5258     - right->task->dl.deadline);
5259     + return dl_time_before(left->deadline, right->deadline);
5260    
5261     return 0;
5262     }
5263     @@ -704,7 +703,26 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task,
5264    
5265     /* [7] Requeue the waiter in the lock waiter tree. */
5266     rt_mutex_dequeue(lock, waiter);
5267     +
5268     + /*
5269     + * Update the waiter prio fields now that we're dequeued.
5270     + *
5271     + * These values can have changed through either:
5272     + *
5273     + * sys_sched_set_scheduler() / sys_sched_setattr()
5274     + *
5275     + * or
5276     + *
5277     + * DL CBS enforcement advancing the effective deadline.
5278     + *
5279     + * Even though pi_waiters also uses these fields, and that tree is only
5280     + * updated in [11], we can do this here, since we hold [L], which
5281     + * serializes all pi_waiters access and rb_erase() does not care about
5282     + * the values of the node being removed.
5283     + */
5284     waiter->prio = task->prio;
5285     + waiter->deadline = task->dl.deadline;
5286     +
5287     rt_mutex_enqueue(lock, waiter);
5288    
5289     /* [8] Release the task */
5290     @@ -831,6 +849,8 @@ static int rt_mutex_adjust_prio_chain(struct task_struct *task,
5291     static int try_to_take_rt_mutex(struct rt_mutex *lock, struct task_struct *task,
5292     struct rt_mutex_waiter *waiter)
5293     {
5294     + lockdep_assert_held(&lock->wait_lock);
5295     +
5296     /*
5297     * Before testing whether we can acquire @lock, we set the
5298     * RT_MUTEX_HAS_WAITERS bit in @lock->owner. This forces all
5299     @@ -958,6 +978,8 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock,
5300     struct rt_mutex *next_lock;
5301     int chain_walk = 0, res;
5302    
5303     + lockdep_assert_held(&lock->wait_lock);
5304     +
5305     /*
5306     * Early deadlock detection. We really don't want the task to
5307     * enqueue on itself just to untangle the mess later. It's not
5308     @@ -975,6 +997,7 @@ static int task_blocks_on_rt_mutex(struct rt_mutex *lock,
5309     waiter->task = task;
5310     waiter->lock = lock;
5311     waiter->prio = task->prio;
5312     + waiter->deadline = task->dl.deadline;
5313    
5314     /* Get the top priority waiter on the lock */
5315     if (rt_mutex_has_waiters(lock))
5316     @@ -1080,6 +1103,8 @@ static void remove_waiter(struct rt_mutex *lock,
5317     struct task_struct *owner = rt_mutex_owner(lock);
5318     struct rt_mutex *next_lock;
5319    
5320     + lockdep_assert_held(&lock->wait_lock);
5321     +
5322     raw_spin_lock(&current->pi_lock);
5323     rt_mutex_dequeue(lock, waiter);
5324     current->pi_blocked_on = NULL;
5325     diff --git a/kernel/locking/rtmutex_common.h b/kernel/locking/rtmutex_common.h
5326     index e317e1cbb3eb..50848b460851 100644
5327     --- a/kernel/locking/rtmutex_common.h
5328     +++ b/kernel/locking/rtmutex_common.h
5329     @@ -33,6 +33,7 @@ struct rt_mutex_waiter {
5330     struct rt_mutex *deadlock_lock;
5331     #endif
5332     int prio;
5333     + u64 deadline;
5334     };
5335    
5336     /*
5337     diff --git a/kernel/printk/braille.c b/kernel/printk/braille.c
5338     index d5760c42f042..61d41ca41844 100644
5339     --- a/kernel/printk/braille.c
5340     +++ b/kernel/printk/braille.c
5341     @@ -2,12 +2,13 @@
5342    
5343     #include <linux/kernel.h>
5344     #include <linux/console.h>
5345     +#include <linux/errno.h>
5346     #include <linux/string.h>
5347    
5348     #include "console_cmdline.h"
5349     #include "braille.h"
5350    
5351     -char *_braille_console_setup(char **str, char **brl_options)
5352     +int _braille_console_setup(char **str, char **brl_options)
5353     {
5354     if (!strncmp(*str, "brl,", 4)) {
5355     *brl_options = "";
5356     @@ -15,14 +16,14 @@ char *_braille_console_setup(char **str, char **brl_options)
5357     } else if (!strncmp(*str, "brl=", 4)) {
5358     *brl_options = *str + 4;
5359     *str = strchr(*brl_options, ',');
5360     - if (!*str)
5361     + if (!*str) {
5362     pr_err("need port name after brl=\n");
5363     - else
5364     - *((*str)++) = 0;
5365     - } else
5366     - return NULL;
5367     + return -EINVAL;
5368     + }
5369     + *((*str)++) = 0;
5370     + }
5371    
5372     - return *str;
5373     + return 0;
5374     }
5375    
5376     int
5377     diff --git a/kernel/printk/braille.h b/kernel/printk/braille.h
5378     index 769d771145c8..749a6756843a 100644
5379     --- a/kernel/printk/braille.h
5380     +++ b/kernel/printk/braille.h
5381     @@ -9,7 +9,14 @@ braille_set_options(struct console_cmdline *c, char *brl_options)
5382     c->brl_options = brl_options;
5383     }
5384    
5385     -char *
5386     +/*
5387     + * Setup console according to braille options.
5388     + * Return -EINVAL on syntax error, 0 on success (or no braille option was
5389     + * actually given).
5390     + * Modifies str to point to the serial options
5391     + * Sets brl_options to the parsed braille options.
5392     + */
5393     +int
5394     _braille_console_setup(char **str, char **brl_options);
5395    
5396     int
5397     @@ -25,10 +32,10 @@ braille_set_options(struct console_cmdline *c, char *brl_options)
5398     {
5399     }
5400    
5401     -static inline char *
5402     +static inline int
5403     _braille_console_setup(char **str, char **brl_options)
5404     {
5405     - return NULL;
5406     + return 0;
5407     }
5408    
5409     static inline int
5410     diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
5411     index 9c5b231684d0..ab6855a4218b 100644
5412     --- a/kernel/printk/printk.c
5413     +++ b/kernel/printk/printk.c
5414     @@ -2342,7 +2342,7 @@ void console_unlock(void)
5415     }
5416    
5417     /*
5418     - * Console drivers are called under logbuf_lock, so
5419     + * Console drivers are called with interrupts disabled, so
5420     * @console_may_schedule should be cleared before; however, we may
5421     * end up dumping a lot of lines, for example, if called from
5422     * console registration path, and should invoke cond_resched()
5423     @@ -2350,11 +2350,15 @@ void console_unlock(void)
5424     * scheduling stall on a slow console leading to RCU stall and
5425     * softlockup warnings which exacerbate the issue with more
5426     * messages practically incapacitating the system.
5427     + *
5428     + * console_trylock() is not able to detect the preemptive
5429     + * context reliably. Therefore the value must be stored before
5430     + * and cleared after the the "again" goto label.
5431     */
5432     do_cond_resched = console_may_schedule;
5433     +again:
5434     console_may_schedule = 0;
5435    
5436     -again:
5437     /*
5438     * We released the console_sem lock, so we need to recheck if
5439     * cpu is online and (if not) is there at least one CON_ANYTIME
5440     diff --git a/kernel/sched/core.c b/kernel/sched/core.c
5441     index bce3a7ad4253..291ea6fa7ee6 100644
5442     --- a/kernel/sched/core.c
5443     +++ b/kernel/sched/core.c
5444     @@ -508,7 +508,8 @@ void resched_cpu(int cpu)
5445     unsigned long flags;
5446    
5447     raw_spin_lock_irqsave(&rq->lock, flags);
5448     - resched_curr(rq);
5449     + if (cpu_online(cpu) || cpu == smp_processor_id())
5450     + resched_curr(rq);
5451     raw_spin_unlock_irqrestore(&rq->lock, flags);
5452     }
5453    
5454     diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
5455     index f6d68ddfa2f3..c7b0d2e7a9aa 100644
5456     --- a/kernel/sched/rt.c
5457     +++ b/kernel/sched/rt.c
5458     @@ -2206,7 +2206,7 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p)
5459     if (tsk_nr_cpus_allowed(p) > 1 && rq->rt.overloaded)
5460     queue_push_tasks(rq);
5461     #endif /* CONFIG_SMP */
5462     - if (p->prio < rq->curr->prio)
5463     + if (p->prio < rq->curr->prio && cpu_online(cpu_of(rq)))
5464     resched_curr(rq);
5465     }
5466     }
5467     diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c
5468     index a26036d37a38..382b159d8592 100644
5469     --- a/kernel/time/sched_clock.c
5470     +++ b/kernel/time/sched_clock.c
5471     @@ -205,6 +205,11 @@ sched_clock_register(u64 (*read)(void), int bits, unsigned long rate)
5472    
5473     update_clock_read_data(&rd);
5474    
5475     + if (sched_clock_timer.function != NULL) {
5476     + /* update timeout for clock wrap */
5477     + hrtimer_start(&sched_clock_timer, cd.wrap_kt, HRTIMER_MODE_REL);
5478     + }
5479     +
5480     r = rate;
5481     if (r >= 4000000) {
5482     r /= 1000000;
5483     diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
5484     index ba7d8b288bb3..ef4f16e81283 100644
5485     --- a/kernel/time/timer_list.c
5486     +++ b/kernel/time/timer_list.c
5487     @@ -16,6 +16,7 @@
5488     #include <linux/sched.h>
5489     #include <linux/seq_file.h>
5490     #include <linux/kallsyms.h>
5491     +#include <linux/nmi.h>
5492    
5493     #include <asm/uaccess.h>
5494    
5495     @@ -96,6 +97,9 @@ print_active_timers(struct seq_file *m, struct hrtimer_clock_base *base,
5496    
5497     next_one:
5498     i = 0;
5499     +
5500     + touch_nmi_watchdog();
5501     +
5502     raw_spin_lock_irqsave(&base->cpu_base->lock, flags);
5503    
5504     curr = timerqueue_getnext(&base->active);
5505     @@ -207,6 +211,8 @@ print_tickdevice(struct seq_file *m, struct tick_device *td, int cpu)
5506     {
5507     struct clock_event_device *dev = td->evtdev;
5508    
5509     + touch_nmi_watchdog();
5510     +
5511     SEQ_printf(m, "Tick Device: mode: %d\n", td->mode);
5512     if (cpu < 0)
5513     SEQ_printf(m, "Broadcast device\n");
5514     diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
5515     index fbfacd51aa34..767144128b95 100644
5516     --- a/net/8021q/vlan_dev.c
5517     +++ b/net/8021q/vlan_dev.c
5518     @@ -562,8 +562,7 @@ static int vlan_dev_init(struct net_device *dev)
5519     NETIF_F_HIGHDMA | NETIF_F_SCTP_CRC |
5520     NETIF_F_ALL_FCOE;
5521    
5522     - dev->features |= real_dev->vlan_features | NETIF_F_LLTX |
5523     - NETIF_F_GSO_SOFTWARE;
5524     + dev->features |= dev->hw_features | NETIF_F_LLTX;
5525     dev->gso_max_size = real_dev->gso_max_size;
5526     dev->gso_max_segs = real_dev->gso_max_segs;
5527     if (dev->features & NETIF_F_VLAN_FEATURES)
5528     diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c
5529     index e7f690b571ea..5419b1214abd 100644
5530     --- a/net/batman-adv/bridge_loop_avoidance.c
5531     +++ b/net/batman-adv/bridge_loop_avoidance.c
5532     @@ -1964,10 +1964,22 @@ bool batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb,
5533     /* if yes, the client has roamed and we have
5534     * to unclaim it.
5535     */
5536     - batadv_handle_unclaim(bat_priv, primary_if,
5537     - primary_if->net_dev->dev_addr,
5538     - ethhdr->h_source, vid);
5539     - goto allow;
5540     + if (batadv_has_timed_out(claim->lasttime, 100)) {
5541     + /* only unclaim if the last claim entry is
5542     + * older than 100 ms to make sure we really
5543     + * have a roaming client here.
5544     + */
5545     + batadv_dbg(BATADV_DBG_BLA, bat_priv, "bla_tx(): Roaming client %pM detected. Unclaim it.\n",
5546     + ethhdr->h_source);
5547     + batadv_handle_unclaim(bat_priv, primary_if,
5548     + primary_if->net_dev->dev_addr,
5549     + ethhdr->h_source, vid);
5550     + goto allow;
5551     + } else {
5552     + batadv_dbg(BATADV_DBG_BLA, bat_priv, "bla_tx(): Race for claim %pM detected. Drop packet.\n",
5553     + ethhdr->h_source);
5554     + goto handled;
5555     + }
5556     }
5557    
5558     /* check if it is a multicast/broadcast frame */
5559     diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
5560     index 1904a93f47d5..de7b82ece499 100644
5561     --- a/net/bluetooth/6lowpan.c
5562     +++ b/net/bluetooth/6lowpan.c
5563     @@ -755,7 +755,8 @@ static void set_ip_addr_bits(u8 addr_type, u8 *addr)
5564     }
5565    
5566     static struct l2cap_chan *add_peer_chan(struct l2cap_chan *chan,
5567     - struct lowpan_btle_dev *dev)
5568     + struct lowpan_btle_dev *dev,
5569     + bool new_netdev)
5570     {
5571     struct lowpan_peer *peer;
5572    
5573     @@ -786,7 +787,8 @@ static struct l2cap_chan *add_peer_chan(struct l2cap_chan *chan,
5574     spin_unlock(&devices_lock);
5575    
5576     /* Notifying peers about us needs to be done without locks held */
5577     - INIT_DELAYED_WORK(&dev->notify_peers, do_notify_peers);
5578     + if (new_netdev)
5579     + INIT_DELAYED_WORK(&dev->notify_peers, do_notify_peers);
5580     schedule_delayed_work(&dev->notify_peers, msecs_to_jiffies(100));
5581    
5582     return peer->chan;
5583     @@ -843,6 +845,7 @@ static int setup_netdev(struct l2cap_chan *chan, struct lowpan_btle_dev **dev)
5584     static inline void chan_ready_cb(struct l2cap_chan *chan)
5585     {
5586     struct lowpan_btle_dev *dev;
5587     + bool new_netdev = false;
5588    
5589     dev = lookup_dev(chan->conn);
5590    
5591     @@ -853,12 +856,13 @@ static inline void chan_ready_cb(struct l2cap_chan *chan)
5592     l2cap_chan_del(chan, -ENOENT);
5593     return;
5594     }
5595     + new_netdev = true;
5596     }
5597    
5598     if (!try_module_get(THIS_MODULE))
5599     return;
5600    
5601     - add_peer_chan(chan, dev);
5602     + add_peer_chan(chan, dev, new_netdev);
5603     ifup(dev->netdev);
5604     }
5605    
5606     diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
5607     index 1aff2da9bc74..5d3698170004 100644
5608     --- a/net/bluetooth/af_bluetooth.c
5609     +++ b/net/bluetooth/af_bluetooth.c
5610     @@ -163,6 +163,9 @@ void bt_accept_enqueue(struct sock *parent, struct sock *sk)
5611     }
5612     EXPORT_SYMBOL(bt_accept_enqueue);
5613    
5614     +/* Calling function must hold the sk lock.
5615     + * bt_sk(sk)->parent must be non-NULL meaning sk is in the parent list.
5616     + */
5617     void bt_accept_unlink(struct sock *sk)
5618     {
5619     BT_DBG("sk %p state %d", sk, sk->sk_state);
5620     @@ -181,11 +184,32 @@ struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock)
5621    
5622     BT_DBG("parent %p", parent);
5623    
5624     +restart:
5625     list_for_each_entry_safe(s, n, &bt_sk(parent)->accept_q, accept_q) {
5626     sk = (struct sock *)s;
5627    
5628     + /* Prevent early freeing of sk due to unlink and sock_kill */
5629     + sock_hold(sk);
5630     lock_sock(sk);
5631    
5632     + /* Check sk has not already been unlinked via
5633     + * bt_accept_unlink() due to serialisation caused by sk locking
5634     + */
5635     + if (!bt_sk(sk)->parent) {
5636     + BT_DBG("sk %p, already unlinked", sk);
5637     + release_sock(sk);
5638     + sock_put(sk);
5639     +
5640     + /* Restart the loop as sk is no longer in the list
5641     + * and also avoid a potential infinite loop because
5642     + * list_for_each_entry_safe() is not thread safe.
5643     + */
5644     + goto restart;
5645     + }
5646     +
5647     + /* sk is safely in the parent list so reduce reference count */
5648     + sock_put(sk);
5649     +
5650     /* FIXME: Is this check still needed */
5651     if (sk->sk_state == BT_CLOSED) {
5652     bt_accept_unlink(sk);
5653     diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
5654     index a7aa54f45e19..fa7d757fef95 100644
5655     --- a/net/mac80211/iface.c
5656     +++ b/net/mac80211/iface.c
5657     @@ -1520,7 +1520,7 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata,
5658     break;
5659     case NL80211_IFTYPE_UNSPECIFIED:
5660     case NUM_NL80211_IFTYPES:
5661     - BUG();
5662     + WARN_ON(1);
5663     break;
5664     }
5665    
5666     diff --git a/net/sched/act_csum.c b/net/sched/act_csum.c
5667     index e0defcef376d..24a0c66394a0 100644
5668     --- a/net/sched/act_csum.c
5669     +++ b/net/sched/act_csum.c
5670     @@ -180,6 +180,9 @@ static int tcf_csum_ipv4_tcp(struct sk_buff *skb, unsigned int ihl,
5671     struct tcphdr *tcph;
5672     const struct iphdr *iph;
5673    
5674     + if (skb_is_gso(skb) && skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4)
5675     + return 1;
5676     +
5677     tcph = tcf_csum_skb_nextlayer(skb, ihl, ipl, sizeof(*tcph));
5678     if (tcph == NULL)
5679     return 0;
5680     @@ -201,6 +204,9 @@ static int tcf_csum_ipv6_tcp(struct sk_buff *skb, unsigned int ihl,
5681     struct tcphdr *tcph;
5682     const struct ipv6hdr *ip6h;
5683    
5684     + if (skb_is_gso(skb) && skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
5685     + return 1;
5686     +
5687     tcph = tcf_csum_skb_nextlayer(skb, ihl, ipl, sizeof(*tcph));
5688     if (tcph == NULL)
5689     return 0;
5690     @@ -224,6 +230,9 @@ static int tcf_csum_ipv4_udp(struct sk_buff *skb, unsigned int ihl,
5691     const struct iphdr *iph;
5692     u16 ul;
5693    
5694     + if (skb_is_gso(skb) && skb_shinfo(skb)->gso_type & SKB_GSO_UDP)
5695     + return 1;
5696     +
5697     /*
5698     * Support both UDP and UDPLITE checksum algorithms, Don't use
5699     * udph->len to get the real length without any protocol check,
5700     @@ -277,6 +286,9 @@ static int tcf_csum_ipv6_udp(struct sk_buff *skb, unsigned int ihl,
5701     const struct ipv6hdr *ip6h;
5702     u16 ul;
5703    
5704     + if (skb_is_gso(skb) && skb_shinfo(skb)->gso_type & SKB_GSO_UDP)
5705     + return 1;
5706     +
5707     /*
5708     * Support both UDP and UDPLITE checksum algorithms, Don't use
5709     * udph->len to get the real length without any protocol check,
5710     diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
5711     index 9f7b380cf0a3..c73d58872cf8 100644
5712     --- a/net/sched/sch_netem.c
5713     +++ b/net/sched/sch_netem.c
5714     @@ -462,7 +462,7 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch,
5715     /* If a delay is expected, orphan the skb. (orphaning usually takes
5716     * place at TX completion time, so _before_ the link transit delay)
5717     */
5718     - if (q->latency || q->jitter)
5719     + if (q->latency || q->jitter || q->rate)
5720     skb_orphan_partial(skb);
5721    
5722     /*
5723     @@ -530,21 +530,31 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch,
5724     now = psched_get_time();
5725    
5726     if (q->rate) {
5727     - struct sk_buff *last;
5728     + struct netem_skb_cb *last = NULL;
5729     +
5730     + if (sch->q.tail)
5731     + last = netem_skb_cb(sch->q.tail);
5732     + if (q->t_root.rb_node) {
5733     + struct sk_buff *t_skb;
5734     + struct netem_skb_cb *t_last;
5735     +
5736     + t_skb = netem_rb_to_skb(rb_last(&q->t_root));
5737     + t_last = netem_skb_cb(t_skb);
5738     + if (!last ||
5739     + t_last->time_to_send > last->time_to_send) {
5740     + last = t_last;
5741     + }
5742     + }
5743    
5744     - if (sch->q.qlen)
5745     - last = sch->q.tail;
5746     - else
5747     - last = netem_rb_to_skb(rb_last(&q->t_root));
5748     if (last) {
5749     /*
5750     * Last packet in queue is reference point (now),
5751     * calculate this time bonus and subtract
5752     * from delay.
5753     */
5754     - delay -= netem_skb_cb(last)->time_to_send - now;
5755     + delay -= last->time_to_send - now;
5756     delay = max_t(psched_tdiff_t, 0, delay);
5757     - now = netem_skb_cb(last)->time_to_send;
5758     + now = last->time_to_send;
5759     }
5760    
5761     delay += packet_len_2_sched_time(qdisc_pkt_len(skb), q);
5762     diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
5763     index 5e89b7461f99..5b8fa6832687 100644
5764     --- a/net/xfrm/xfrm_policy.c
5765     +++ b/net/xfrm/xfrm_policy.c
5766     @@ -1346,7 +1346,7 @@ EXPORT_SYMBOL(xfrm_policy_delete);
5767    
5768     int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol)
5769     {
5770     - struct net *net = xp_net(pol);
5771     + struct net *net = sock_net(sk);
5772     struct xfrm_policy *old_pol;
5773    
5774     #ifdef CONFIG_XFRM_SUB_POLICY
5775     diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
5776     index 419bf5d463bd..13e0611a9085 100644
5777     --- a/net/xfrm/xfrm_state.c
5778     +++ b/net/xfrm/xfrm_state.c
5779     @@ -1883,6 +1883,13 @@ int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen
5780     struct xfrm_mgr *km;
5781     struct xfrm_policy *pol = NULL;
5782    
5783     + if (!optval && !optlen) {
5784     + xfrm_sk_policy_insert(sk, XFRM_POLICY_IN, NULL);
5785     + xfrm_sk_policy_insert(sk, XFRM_POLICY_OUT, NULL);
5786     + __sk_dst_reset(sk);
5787     + return 0;
5788     + }
5789     +
5790     if (optlen <= 0 || optlen > PAGE_SIZE)
5791     return -EMSGSIZE;
5792    
5793     diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
5794     index 7d3a98b2d55a..02cc952b86aa 100644
5795     --- a/security/apparmor/lsm.c
5796     +++ b/security/apparmor/lsm.c
5797     @@ -707,7 +707,7 @@ module_param_named(logsyscall, aa_g_logsyscall, aabool, S_IRUSR | S_IWUSR);
5798    
5799     /* Maximum pathname length before accesses will start getting rejected */
5800     unsigned int aa_g_path_max = 2 * PATH_MAX;
5801     -module_param_named(path_max, aa_g_path_max, aauint, S_IRUSR | S_IWUSR);
5802     +module_param_named(path_max, aa_g_path_max, aauint, S_IRUSR);
5803    
5804     /* Determines how paranoid loading of policy is and how much verification
5805     * on the loaded policy is done.
5806     diff --git a/security/integrity/ima/ima_appraise.c b/security/integrity/ima/ima_appraise.c
5807     index 6830d2427e47..7bf8b005a178 100644
5808     --- a/security/integrity/ima/ima_appraise.c
5809     +++ b/security/integrity/ima/ima_appraise.c
5810     @@ -207,7 +207,8 @@ int ima_appraise_measurement(enum ima_hooks func,
5811     if (opened & FILE_CREATED)
5812     iint->flags |= IMA_NEW_FILE;
5813     if ((iint->flags & IMA_NEW_FILE) &&
5814     - !(iint->flags & IMA_DIGSIG_REQUIRED))
5815     + (!(iint->flags & IMA_DIGSIG_REQUIRED) ||
5816     + (inode->i_size == 0)))
5817     status = INTEGRITY_PASS;
5818     goto out;
5819     }
5820     diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
5821     index c2da45ae5b2a..b8278f3af9da 100644
5822     --- a/security/selinux/hooks.c
5823     +++ b/security/selinux/hooks.c
5824     @@ -4328,10 +4328,18 @@ static int selinux_socket_bind(struct socket *sock, struct sockaddr *address, in
5825     u32 sid, node_perm;
5826    
5827     if (family == PF_INET) {
5828     + if (addrlen < sizeof(struct sockaddr_in)) {
5829     + err = -EINVAL;
5830     + goto out;
5831     + }
5832     addr4 = (struct sockaddr_in *)address;
5833     snum = ntohs(addr4->sin_port);
5834     addrp = (char *)&addr4->sin_addr.s_addr;
5835     } else {
5836     + if (addrlen < SIN6_LEN_RFC2133) {
5837     + err = -EINVAL;
5838     + goto out;
5839     + }
5840     addr6 = (struct sockaddr_in6 *)address;
5841     snum = ntohs(addr6->sin6_port);
5842     addrp = (char *)&addr6->sin6_addr.s6_addr;
5843     diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
5844     index 3321348fd86b..3e7c3573871d 100644
5845     --- a/sound/core/oss/pcm_oss.c
5846     +++ b/sound/core/oss/pcm_oss.c
5847     @@ -1814,10 +1814,9 @@ static int snd_pcm_oss_get_formats(struct snd_pcm_oss_file *pcm_oss_file)
5848     return -ENOMEM;
5849     _snd_pcm_hw_params_any(params);
5850     err = snd_pcm_hw_refine(substream, params);
5851     - format_mask = *hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
5852     - kfree(params);
5853     if (err < 0)
5854     - return err;
5855     + goto error;
5856     + format_mask = *hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
5857     for (fmt = 0; fmt < 32; ++fmt) {
5858     if (snd_mask_test(&format_mask, fmt)) {
5859     int f = snd_pcm_oss_format_to(fmt);
5860     @@ -1825,7 +1824,10 @@ static int snd_pcm_oss_get_formats(struct snd_pcm_oss_file *pcm_oss_file)
5861     formats |= f;
5862     }
5863     }
5864     - return formats;
5865     +
5866     + error:
5867     + kfree(params);
5868     + return err < 0 ? err : formats;
5869     }
5870    
5871     static int snd_pcm_oss_set_format(struct snd_pcm_oss_file *pcm_oss_file, int format)
5872     diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
5873     index 799ad3e1d24b..ecd1c5fc8db8 100644
5874     --- a/sound/core/seq/seq_clientmgr.c
5875     +++ b/sound/core/seq/seq_clientmgr.c
5876     @@ -255,12 +255,12 @@ static int seq_free_client1(struct snd_seq_client *client)
5877    
5878     if (!client)
5879     return 0;
5880     - snd_seq_delete_all_ports(client);
5881     - snd_seq_queue_client_leave(client->number);
5882     spin_lock_irqsave(&clients_lock, flags);
5883     clienttablock[client->number] = 1;
5884     clienttab[client->number] = NULL;
5885     spin_unlock_irqrestore(&clients_lock, flags);
5886     + snd_seq_delete_all_ports(client);
5887     + snd_seq_queue_client_leave(client->number);
5888     snd_use_lock_sync(&client->use_lock);
5889     snd_seq_queue_client_termination(client->number);
5890     if (client->pool)
5891     diff --git a/sound/core/seq/seq_prioq.c b/sound/core/seq/seq_prioq.c
5892     index bc1c8488fc2a..2bc6759e4adc 100644
5893     --- a/sound/core/seq/seq_prioq.c
5894     +++ b/sound/core/seq/seq_prioq.c
5895     @@ -87,7 +87,7 @@ void snd_seq_prioq_delete(struct snd_seq_prioq **fifo)
5896     if (f->cells > 0) {
5897     /* drain prioQ */
5898     while (f->cells > 0)
5899     - snd_seq_cell_free(snd_seq_prioq_cell_out(f));
5900     + snd_seq_cell_free(snd_seq_prioq_cell_out(f, NULL));
5901     }
5902    
5903     kfree(f);
5904     @@ -214,8 +214,18 @@ int snd_seq_prioq_cell_in(struct snd_seq_prioq * f,
5905     return 0;
5906     }
5907    
5908     +/* return 1 if the current time >= event timestamp */
5909     +static int event_is_ready(struct snd_seq_event *ev, void *current_time)
5910     +{
5911     + if ((ev->flags & SNDRV_SEQ_TIME_STAMP_MASK) == SNDRV_SEQ_TIME_STAMP_TICK)
5912     + return snd_seq_compare_tick_time(current_time, &ev->time.tick);
5913     + else
5914     + return snd_seq_compare_real_time(current_time, &ev->time.time);
5915     +}
5916     +
5917     /* dequeue cell from prioq */
5918     -struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f)
5919     +struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f,
5920     + void *current_time)
5921     {
5922     struct snd_seq_event_cell *cell;
5923     unsigned long flags;
5924     @@ -227,6 +237,8 @@ struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f)
5925     spin_lock_irqsave(&f->lock, flags);
5926    
5927     cell = f->head;
5928     + if (cell && current_time && !event_is_ready(&cell->event, current_time))
5929     + cell = NULL;
5930     if (cell) {
5931     f->head = cell->next;
5932    
5933     @@ -252,18 +264,6 @@ int snd_seq_prioq_avail(struct snd_seq_prioq * f)
5934     return f->cells;
5935     }
5936    
5937     -
5938     -/* peek at cell at the head of the prioq */
5939     -struct snd_seq_event_cell *snd_seq_prioq_cell_peek(struct snd_seq_prioq * f)
5940     -{
5941     - if (f == NULL) {
5942     - pr_debug("ALSA: seq: snd_seq_prioq_cell_in() called with NULL prioq\n");
5943     - return NULL;
5944     - }
5945     - return f->head;
5946     -}
5947     -
5948     -
5949     static inline int prioq_match(struct snd_seq_event_cell *cell,
5950     int client, int timestamp)
5951     {
5952     diff --git a/sound/core/seq/seq_prioq.h b/sound/core/seq/seq_prioq.h
5953     index d38bb78d9345..2c315ca10fc4 100644
5954     --- a/sound/core/seq/seq_prioq.h
5955     +++ b/sound/core/seq/seq_prioq.h
5956     @@ -44,14 +44,12 @@ void snd_seq_prioq_delete(struct snd_seq_prioq **fifo);
5957     int snd_seq_prioq_cell_in(struct snd_seq_prioq *f, struct snd_seq_event_cell *cell);
5958    
5959     /* dequeue cell from prioq */
5960     -struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f);
5961     +struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f,
5962     + void *current_time);
5963    
5964     /* return number of events available in prioq */
5965     int snd_seq_prioq_avail(struct snd_seq_prioq *f);
5966    
5967     -/* peek at cell at the head of the prioq */
5968     -struct snd_seq_event_cell *snd_seq_prioq_cell_peek(struct snd_seq_prioq *f);
5969     -
5970     /* client left queue */
5971     void snd_seq_prioq_leave(struct snd_seq_prioq *f, int client, int timestamp);
5972    
5973     diff --git a/sound/core/seq/seq_queue.c b/sound/core/seq/seq_queue.c
5974     index 79e0c5604ef8..1a6dc4ff44a6 100644
5975     --- a/sound/core/seq/seq_queue.c
5976     +++ b/sound/core/seq/seq_queue.c
5977     @@ -277,30 +277,20 @@ void snd_seq_check_queue(struct snd_seq_queue *q, int atomic, int hop)
5978    
5979     __again:
5980     /* Process tick queue... */
5981     - while ((cell = snd_seq_prioq_cell_peek(q->tickq)) != NULL) {
5982     - if (snd_seq_compare_tick_time(&q->timer->tick.cur_tick,
5983     - &cell->event.time.tick)) {
5984     - cell = snd_seq_prioq_cell_out(q->tickq);
5985     - if (cell)
5986     - snd_seq_dispatch_event(cell, atomic, hop);
5987     - } else {
5988     - /* event remains in the queue */
5989     + for (;;) {
5990     + cell = snd_seq_prioq_cell_out(q->tickq,
5991     + &q->timer->tick.cur_tick);
5992     + if (!cell)
5993     break;
5994     - }
5995     + snd_seq_dispatch_event(cell, atomic, hop);
5996     }
5997    
5998     -
5999     /* Process time queue... */
6000     - while ((cell = snd_seq_prioq_cell_peek(q->timeq)) != NULL) {
6001     - if (snd_seq_compare_real_time(&q->timer->cur_time,
6002     - &cell->event.time.time)) {
6003     - cell = snd_seq_prioq_cell_out(q->timeq);
6004     - if (cell)
6005     - snd_seq_dispatch_event(cell, atomic, hop);
6006     - } else {
6007     - /* event remains in the queue */
6008     + for (;;) {
6009     + cell = snd_seq_prioq_cell_out(q->timeq, &q->timer->cur_time);
6010     + if (!cell)
6011     break;
6012     - }
6013     + snd_seq_dispatch_event(cell, atomic, hop);
6014     }
6015    
6016     /* free lock */
6017     diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
6018     index 9741757436be..d0ad61f563e2 100644
6019     --- a/sound/firewire/amdtp-stream.c
6020     +++ b/sound/firewire/amdtp-stream.c
6021     @@ -471,8 +471,9 @@ static int handle_in_packet(struct amdtp_stream *s,
6022     * This module supports 'Two-quadlet CIP header with SYT field'.
6023     * For convenience, also check FMT field is AM824 or not.
6024     */
6025     - if (((cip_header[0] & CIP_EOH_MASK) == CIP_EOH) ||
6026     - ((cip_header[1] & CIP_EOH_MASK) != CIP_EOH)) {
6027     + if ((((cip_header[0] & CIP_EOH_MASK) == CIP_EOH) ||
6028     + ((cip_header[1] & CIP_EOH_MASK) != CIP_EOH)) &&
6029     + (!(s->flags & CIP_HEADER_WITHOUT_EOH))) {
6030     dev_info_ratelimited(&s->unit->device,
6031     "Invalid CIP header for AMDTP: %08X:%08X\n",
6032     cip_header[0], cip_header[1]);
6033     diff --git a/sound/firewire/amdtp-stream.h b/sound/firewire/amdtp-stream.h
6034     index f7c054bc9d92..8136bd20c8b1 100644
6035     --- a/sound/firewire/amdtp-stream.h
6036     +++ b/sound/firewire/amdtp-stream.h
6037     @@ -29,6 +29,8 @@
6038     * @CIP_JUMBO_PAYLOAD: Only for in-stream. The number of data blocks in an
6039     * packet is larger than IEC 61883-6 defines. Current implementation
6040     * allows 5 times as large as IEC 61883-6 defines.
6041     + * @CIP_HEADER_WITHOUT_EOH: Only for in-stream. CIP Header doesn't include
6042     + * valid EOH.
6043     */
6044     enum cip_flags {
6045     CIP_NONBLOCKING = 0x00,
6046     @@ -39,6 +41,7 @@ enum cip_flags {
6047     CIP_SKIP_DBC_ZERO_CHECK = 0x10,
6048     CIP_EMPTY_HAS_WRONG_DBC = 0x20,
6049     CIP_JUMBO_PAYLOAD = 0x40,
6050     + CIP_HEADER_WITHOUT_EOH = 0x80,
6051     };
6052    
6053     /**
6054     diff --git a/sound/firewire/digi00x/amdtp-dot.c b/sound/firewire/digi00x/amdtp-dot.c
6055     index b3cffd01a19f..a4688545339c 100644
6056     --- a/sound/firewire/digi00x/amdtp-dot.c
6057     +++ b/sound/firewire/digi00x/amdtp-dot.c
6058     @@ -28,6 +28,9 @@
6059     */
6060     #define MAX_MIDI_RX_BLOCKS 8
6061    
6062     +/* 3 = MAX(DOT_MIDI_IN_PORTS, DOT_MIDI_OUT_PORTS) + 1. */
6063     +#define MAX_MIDI_PORTS 3
6064     +
6065     /*
6066     * The double-oh-three algorithm was discovered by Robin Gareus and Damien
6067     * Zammit in 2012, with reverse-engineering for Digi 003 Rack.
6068     @@ -42,10 +45,8 @@ struct amdtp_dot {
6069     unsigned int pcm_channels;
6070     struct dot_state state;
6071    
6072     - unsigned int midi_ports;
6073     - /* 2 = MAX(DOT_MIDI_IN_PORTS, DOT_MIDI_OUT_PORTS) */
6074     - struct snd_rawmidi_substream *midi[2];
6075     - int midi_fifo_used[2];
6076     + struct snd_rawmidi_substream *midi[MAX_MIDI_PORTS];
6077     + int midi_fifo_used[MAX_MIDI_PORTS];
6078     int midi_fifo_limit;
6079    
6080     void (*transfer_samples)(struct amdtp_stream *s,
6081     @@ -124,8 +125,8 @@ int amdtp_dot_set_parameters(struct amdtp_stream *s, unsigned int rate,
6082     return -EBUSY;
6083    
6084     /*
6085     - * A first data channel is for MIDI conformant data channel, the rest is
6086     - * Multi Bit Linear Audio data channel.
6087     + * A first data channel is for MIDI messages, the rest is Multi Bit
6088     + * Linear Audio data channel.
6089     */
6090     err = amdtp_stream_set_parameters(s, rate, pcm_channels + 1);
6091     if (err < 0)
6092     @@ -135,11 +136,6 @@ int amdtp_dot_set_parameters(struct amdtp_stream *s, unsigned int rate,
6093    
6094     p->pcm_channels = pcm_channels;
6095    
6096     - if (s->direction == AMDTP_IN_STREAM)
6097     - p->midi_ports = DOT_MIDI_IN_PORTS;
6098     - else
6099     - p->midi_ports = DOT_MIDI_OUT_PORTS;
6100     -
6101     /*
6102     * We do not know the actual MIDI FIFO size of most devices. Just
6103     * assume two bytes, i.e., one byte can be received over the bus while
6104     @@ -281,13 +277,25 @@ static void write_midi_messages(struct amdtp_stream *s, __be32 *buffer,
6105     b = (u8 *)&buffer[0];
6106    
6107     len = 0;
6108     - if (port < p->midi_ports &&
6109     + if (port < MAX_MIDI_PORTS &&
6110     midi_ratelimit_per_packet(s, port) &&
6111     p->midi[port] != NULL)
6112     len = snd_rawmidi_transmit(p->midi[port], b + 1, 2);
6113    
6114     if (len > 0) {
6115     - b[3] = (0x10 << port) | len;
6116     + /*
6117     + * Upper 4 bits of LSB represent port number.
6118     + * - 0000b: physical MIDI port 1.
6119     + * - 0010b: physical MIDI port 2.
6120     + * - 1110b: console MIDI port.
6121     + */
6122     + if (port == 2)
6123     + b[3] = 0xe0;
6124     + else if (port == 1)
6125     + b[3] = 0x20;
6126     + else
6127     + b[3] = 0x00;
6128     + b[3] |= len;
6129     midi_use_bytes(s, port, len);
6130     } else {
6131     b[1] = 0;
6132     @@ -309,11 +317,22 @@ static void read_midi_messages(struct amdtp_stream *s, __be32 *buffer,
6133    
6134     for (f = 0; f < data_blocks; f++) {
6135     b = (u8 *)&buffer[0];
6136     - port = b[3] >> 4;
6137     - len = b[3] & 0x0f;
6138    
6139     - if (port < p->midi_ports && p->midi[port] && len > 0)
6140     - snd_rawmidi_receive(p->midi[port], b + 1, len);
6141     + len = b[3] & 0x0f;
6142     + if (len > 0) {
6143     + /*
6144     + * Upper 4 bits of LSB represent port number.
6145     + * - 0000b: physical MIDI port 1. Use port 0.
6146     + * - 1110b: console MIDI port. Use port 2.
6147     + */
6148     + if (b[3] >> 4 > 0)
6149     + port = 2;
6150     + else
6151     + port = 0;
6152     +
6153     + if (port < MAX_MIDI_PORTS && p->midi[port])
6154     + snd_rawmidi_receive(p->midi[port], b + 1, len);
6155     + }
6156    
6157     buffer += s->data_block_quadlets;
6158     }
6159     @@ -364,7 +383,7 @@ void amdtp_dot_midi_trigger(struct amdtp_stream *s, unsigned int port,
6160     {
6161     struct amdtp_dot *p = s->protocol;
6162    
6163     - if (port < p->midi_ports)
6164     + if (port < MAX_MIDI_PORTS)
6165     ACCESS_ONCE(p->midi[port]) = midi;
6166     }
6167    
6168     diff --git a/sound/firewire/digi00x/digi00x.c b/sound/firewire/digi00x/digi00x.c
6169     index cc4776c6ded3..1f5e1d23f31a 100644
6170     --- a/sound/firewire/digi00x/digi00x.c
6171     +++ b/sound/firewire/digi00x/digi00x.c
6172     @@ -13,7 +13,8 @@ MODULE_AUTHOR("Takashi Sakamoto <o-takashi@sakamocchi.jp>");
6173     MODULE_LICENSE("GPL v2");
6174    
6175     #define VENDOR_DIGIDESIGN 0x00a07e
6176     -#define MODEL_DIGI00X 0x000002
6177     +#define MODEL_CONSOLE 0x000001
6178     +#define MODEL_RACK 0x000002
6179    
6180     static int name_card(struct snd_dg00x *dg00x)
6181     {
6182     @@ -129,6 +130,8 @@ static int snd_dg00x_probe(struct fw_unit *unit,
6183     spin_lock_init(&dg00x->lock);
6184     init_waitqueue_head(&dg00x->hwdep_wait);
6185    
6186     + dg00x->is_console = entry->model_id == MODEL_CONSOLE;
6187     +
6188     /* Allocate and register this sound card later. */
6189     INIT_DEFERRABLE_WORK(&dg00x->dwork, do_registration);
6190     snd_fw_schedule_registration(unit, &dg00x->dwork);
6191     @@ -183,7 +186,13 @@ static const struct ieee1394_device_id snd_dg00x_id_table[] = {
6192     .match_flags = IEEE1394_MATCH_VENDOR_ID |
6193     IEEE1394_MATCH_MODEL_ID,
6194     .vendor_id = VENDOR_DIGIDESIGN,
6195     - .model_id = MODEL_DIGI00X,
6196     + .model_id = MODEL_CONSOLE,
6197     + },
6198     + {
6199     + .match_flags = IEEE1394_MATCH_VENDOR_ID |
6200     + IEEE1394_MATCH_MODEL_ID,
6201     + .vendor_id = VENDOR_DIGIDESIGN,
6202     + .model_id = MODEL_RACK,
6203     },
6204     {}
6205     };
6206     diff --git a/sound/firewire/digi00x/digi00x.h b/sound/firewire/digi00x/digi00x.h
6207     index 2cd465c0caae..43bcb0ce69c0 100644
6208     --- a/sound/firewire/digi00x/digi00x.h
6209     +++ b/sound/firewire/digi00x/digi00x.h
6210     @@ -60,6 +60,7 @@ struct snd_dg00x {
6211     /* For asynchronous MIDI controls. */
6212     struct snd_rawmidi_substream *in_control;
6213     struct snd_fw_async_midi_port out_control;
6214     + bool is_console;
6215     };
6216    
6217     #define DG00X_ADDR_BASE 0xffffe0000000ull
6218     diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
6219     index ceb162a9dcfd..733b3423baa2 100644
6220     --- a/sound/pci/hda/hda_intel.c
6221     +++ b/sound/pci/hda/hda_intel.c
6222     @@ -180,11 +180,15 @@ static const struct kernel_param_ops param_ops_xint = {
6223     };
6224     #define param_check_xint param_check_int
6225    
6226     -static int power_save = -1;
6227     +static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
6228     module_param(power_save, xint, 0644);
6229     MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
6230     "(in second, 0 = disable).");
6231    
6232     +static bool pm_blacklist = true;
6233     +module_param(pm_blacklist, bool, 0644);
6234     +MODULE_PARM_DESC(pm_blacklist, "Enable power-management blacklist");
6235     +
6236     /* reset the HD-audio controller in power save mode.
6237     * this may give more power-saving, but will take longer time to
6238     * wake up.
6239     @@ -369,8 +373,10 @@ enum {
6240     #define IS_KBL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d71)
6241     #define IS_KBL_H(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa2f0)
6242     #define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98)
6243     +#define IS_GLK(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x3198)
6244     #define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci)) || \
6245     - IS_KBL(pci) || IS_KBL_LP(pci) || IS_KBL_H(pci)
6246     + IS_KBL(pci) || IS_KBL_LP(pci) || IS_KBL_H(pci) || \
6247     + IS_GLK(pci)
6248    
6249     static char *driver_short_names[] = {
6250     [AZX_DRIVER_ICH] = "HDA Intel",
6251     @@ -2151,10 +2157,9 @@ static int azx_probe_continue(struct azx *chip)
6252    
6253     val = power_save;
6254     #ifdef CONFIG_PM
6255     - if (val == -1) {
6256     + if (pm_blacklist) {
6257     const struct snd_pci_quirk *q;
6258    
6259     - val = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
6260     q = snd_pci_quirk_lookup(chip->pci, power_save_blacklist);
6261     if (q && val) {
6262     dev_info(chip->card->dev, "device %04x:%04x is on the power_save blacklist, forcing power_save to 0\n",
6263     diff --git a/sound/soc/codecs/rt5677.c b/sound/soc/codecs/rt5677.c
6264     index abc802a5a479..65ac4518ad06 100644
6265     --- a/sound/soc/codecs/rt5677.c
6266     +++ b/sound/soc/codecs/rt5677.c
6267     @@ -5035,6 +5035,12 @@ static const struct i2c_device_id rt5677_i2c_id[] = {
6268     };
6269     MODULE_DEVICE_TABLE(i2c, rt5677_i2c_id);
6270    
6271     +static const struct of_device_id rt5677_of_match[] = {
6272     + { .compatible = "realtek,rt5677", },
6273     + { }
6274     +};
6275     +MODULE_DEVICE_TABLE(of, rt5677_of_match);
6276     +
6277     static const struct acpi_gpio_params plug_det_gpio = { RT5677_GPIO_PLUG_DET, 0, false };
6278     static const struct acpi_gpio_params mic_present_gpio = { RT5677_GPIO_MIC_PRESENT_L, 0, false };
6279     static const struct acpi_gpio_params headphone_enable_gpio = { RT5677_GPIO_HP_AMP_SHDN_L, 0, false };
6280     @@ -5294,6 +5300,7 @@ static int rt5677_i2c_remove(struct i2c_client *i2c)
6281     static struct i2c_driver rt5677_i2c_driver = {
6282     .driver = {
6283     .name = "rt5677",
6284     + .of_match_table = rt5677_of_match,
6285     },
6286     .probe = rt5677_i2c_probe,
6287     .remove = rt5677_i2c_remove,
6288     diff --git a/sound/soc/nuc900/nuc900-ac97.c b/sound/soc/nuc900/nuc900-ac97.c
6289     index b6615affe571..fde974d52bb2 100644
6290     --- a/sound/soc/nuc900/nuc900-ac97.c
6291     +++ b/sound/soc/nuc900/nuc900-ac97.c
6292     @@ -67,7 +67,7 @@ static unsigned short nuc900_ac97_read(struct snd_ac97 *ac97,
6293    
6294     /* polling the AC_R_FINISH */
6295     while (!(AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON) & AC_R_FINISH)
6296     - && timeout--)
6297     + && --timeout)
6298     mdelay(1);
6299    
6300     if (!timeout) {
6301     @@ -121,7 +121,7 @@ static void nuc900_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
6302    
6303     /* polling the AC_W_FINISH */
6304     while ((AUDIO_READ(nuc900_audio->mmio + ACTL_ACCON) & AC_W_FINISH)
6305     - && timeout--)
6306     + && --timeout)
6307     mdelay(1);
6308    
6309     if (!timeout)
6310     diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
6311     index a9a43acce30e..fefa6ad5de8b 100644
6312     --- a/sound/soc/sh/rcar/ssi.c
6313     +++ b/sound/soc/sh/rcar/ssi.c
6314     @@ -232,6 +232,15 @@ static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod,
6315     */
6316     for (j = 0; j < ARRAY_SIZE(ssi_clk_mul_table); j++) {
6317    
6318     + /*
6319     + * It will set SSIWSR.CONT here, but SSICR.CKDV = 000
6320     + * with it is not allowed. (SSIWSR.WS_MODE with
6321     + * SSICR.CKDV = 000 is not allowed either).
6322     + * Skip it. See SSICR.CKDV
6323     + */
6324     + if (j == 0)
6325     + continue;
6326     +
6327     /*
6328     * this driver is assuming that
6329     * system word is 32bit x chan
6330     diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c
6331     index f87996b0cb29..9a250c71840e 100644
6332     --- a/tools/perf/builtin-probe.c
6333     +++ b/tools/perf/builtin-probe.c
6334     @@ -442,9 +442,9 @@ static int perf_del_probe_events(struct strfilter *filter)
6335     }
6336    
6337     if (ret == -ENOENT && ret2 == -ENOENT)
6338     - pr_debug("\"%s\" does not hit any event.\n", str);
6339     - /* Note that this is silently ignored */
6340     - ret = 0;
6341     + pr_warning("\"%s\" does not hit any event.\n", str);
6342     + else
6343     + ret = 0;
6344    
6345     error:
6346     if (kfd >= 0)
6347     diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
6348     index 688dea7cb08f..5b60ec669e73 100644
6349     --- a/tools/perf/builtin-stat.c
6350     +++ b/tools/perf/builtin-stat.c
6351     @@ -146,6 +146,7 @@ static aggr_get_id_t aggr_get_id;
6352     static bool append_file;
6353     static const char *output_name;
6354     static int output_fd;
6355     +static int print_free_counters_hint;
6356    
6357     struct perf_stat {
6358     bool record;
6359     @@ -310,8 +311,12 @@ static int read_counter(struct perf_evsel *counter)
6360     struct perf_counts_values *count;
6361    
6362     count = perf_counts(counter->counts, cpu, thread);
6363     - if (perf_evsel__read(counter, cpu, thread, count))
6364     + if (perf_evsel__read(counter, cpu, thread, count)) {
6365     + counter->counts->scaled = -1;
6366     + perf_counts(counter->counts, cpu, thread)->ena = 0;
6367     + perf_counts(counter->counts, cpu, thread)->run = 0;
6368     return -1;
6369     + }
6370    
6371     if (STAT_RECORD) {
6372     if (perf_evsel__write_stat_event(counter, cpu, thread, count)) {
6373     @@ -336,12 +341,14 @@ static int read_counter(struct perf_evsel *counter)
6374     static void read_counters(void)
6375     {
6376     struct perf_evsel *counter;
6377     + int ret;
6378    
6379     evlist__for_each_entry(evsel_list, counter) {
6380     - if (read_counter(counter))
6381     + ret = read_counter(counter);
6382     + if (ret)
6383     pr_debug("failed to read counter %s\n", counter->name);
6384    
6385     - if (perf_stat_process_counter(&stat_config, counter))
6386     + if (ret == 0 && perf_stat_process_counter(&stat_config, counter))
6387     pr_warning("failed to process counter %s\n", counter->name);
6388     }
6389     }
6390     @@ -1109,6 +1116,9 @@ static void printout(int id, int nr, struct perf_evsel *counter, double uval,
6391     counter->supported ? CNTR_NOT_COUNTED : CNTR_NOT_SUPPORTED,
6392     csv_sep);
6393    
6394     + if (counter->supported)
6395     + print_free_counters_hint = 1;
6396     +
6397     fprintf(stat_config.output, "%-*s%s",
6398     csv_output ? 0 : unit_width,
6399     counter->unit, csv_sep);
6400     @@ -1477,6 +1487,13 @@ static void print_footer(void)
6401     avg_stats(&walltime_nsecs_stats));
6402     }
6403     fprintf(output, "\n\n");
6404     +
6405     + if (print_free_counters_hint)
6406     + fprintf(output,
6407     +"Some events weren't counted. Try disabling the NMI watchdog:\n"
6408     +" echo 0 > /proc/sys/kernel/nmi_watchdog\n"
6409     +" perf stat ...\n"
6410     +" echo 1 > /proc/sys/kernel/nmi_watchdog\n");
6411     }
6412    
6413     static void print_counters(struct timespec *ts, int argc, const char **argv)
6414     diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
6415     index 21f8a81797a0..4c596ba310cb 100644
6416     --- a/tools/perf/builtin-trace.c
6417     +++ b/tools/perf/builtin-trace.c
6418     @@ -822,12 +822,21 @@ struct syscall {
6419     void **arg_parm;
6420     };
6421    
6422     -static size_t fprintf_duration(unsigned long t, FILE *fp)
6423     +/*
6424     + * We need to have this 'calculated' boolean because in some cases we really
6425     + * don't know what is the duration of a syscall, for instance, when we start
6426     + * a session and some threads are waiting for a syscall to finish, say 'poll',
6427     + * in which case all we can do is to print "( ? ) for duration and for the
6428     + * start timestamp.
6429     + */
6430     +static size_t fprintf_duration(unsigned long t, bool calculated, FILE *fp)
6431     {
6432     double duration = (double)t / NSEC_PER_MSEC;
6433     size_t printed = fprintf(fp, "(");
6434    
6435     - if (duration >= 1.0)
6436     + if (!calculated)
6437     + printed += fprintf(fp, " ? ");
6438     + else if (duration >= 1.0)
6439     printed += color_fprintf(fp, PERF_COLOR_RED, "%6.3f ms", duration);
6440     else if (duration >= 0.01)
6441     printed += color_fprintf(fp, PERF_COLOR_YELLOW, "%6.3f ms", duration);
6442     @@ -1030,13 +1039,27 @@ static bool trace__filter_duration(struct trace *trace, double t)
6443     return t < (trace->duration_filter * NSEC_PER_MSEC);
6444     }
6445    
6446     -static size_t trace__fprintf_tstamp(struct trace *trace, u64 tstamp, FILE *fp)
6447     +static size_t __trace__fprintf_tstamp(struct trace *trace, u64 tstamp, FILE *fp)
6448     {
6449     double ts = (double)(tstamp - trace->base_time) / NSEC_PER_MSEC;
6450    
6451     return fprintf(fp, "%10.3f ", ts);
6452     }
6453    
6454     +/*
6455     + * We're handling tstamp=0 as an undefined tstamp, i.e. like when we are
6456     + * using ttrace->entry_time for a thread that receives a sys_exit without
6457     + * first having received a sys_enter ("poll" issued before tracing session
6458     + * starts, lost sys_enter exit due to ring buffer overflow).
6459     + */
6460     +static size_t trace__fprintf_tstamp(struct trace *trace, u64 tstamp, FILE *fp)
6461     +{
6462     + if (tstamp > 0)
6463     + return __trace__fprintf_tstamp(trace, tstamp, fp);
6464     +
6465     + return fprintf(fp, " ? ");
6466     +}
6467     +
6468     static bool done = false;
6469     static bool interrupted = false;
6470    
6471     @@ -1047,10 +1070,10 @@ static void sig_handler(int sig)
6472     }
6473    
6474     static size_t trace__fprintf_entry_head(struct trace *trace, struct thread *thread,
6475     - u64 duration, u64 tstamp, FILE *fp)
6476     + u64 duration, bool duration_calculated, u64 tstamp, FILE *fp)
6477     {
6478     size_t printed = trace__fprintf_tstamp(trace, tstamp, fp);
6479     - printed += fprintf_duration(duration, fp);
6480     + printed += fprintf_duration(duration, duration_calculated, fp);
6481    
6482     if (trace->multiple_threads) {
6483     if (trace->show_comm)
6484     @@ -1452,7 +1475,7 @@ static int trace__printf_interrupted_entry(struct trace *trace, struct perf_samp
6485    
6486     duration = sample->time - ttrace->entry_time;
6487    
6488     - printed = trace__fprintf_entry_head(trace, trace->current, duration, ttrace->entry_time, trace->output);
6489     + printed = trace__fprintf_entry_head(trace, trace->current, duration, true, ttrace->entry_time, trace->output);
6490     printed += fprintf(trace->output, "%-70s) ...\n", ttrace->entry_str);
6491     ttrace->entry_pending = false;
6492    
6493     @@ -1499,7 +1522,7 @@ static int trace__sys_enter(struct trace *trace, struct perf_evsel *evsel,
6494    
6495     if (sc->is_exit) {
6496     if (!(trace->duration_filter || trace->summary_only || trace->min_stack)) {
6497     - trace__fprintf_entry_head(trace, thread, 1, ttrace->entry_time, trace->output);
6498     + trace__fprintf_entry_head(trace, thread, 0, false, ttrace->entry_time, trace->output);
6499     fprintf(trace->output, "%-70s)\n", ttrace->entry_str);
6500     }
6501     } else {
6502     @@ -1547,6 +1570,7 @@ static int trace__sys_exit(struct trace *trace, struct perf_evsel *evsel,
6503     {
6504     long ret;
6505     u64 duration = 0;
6506     + bool duration_calculated = false;
6507     struct thread *thread;
6508     int id = perf_evsel__sc_tp_uint(evsel, id, sample), err = -1, callchain_ret = 0;
6509     struct syscall *sc = trace__syscall_info(trace, evsel, id);
6510     @@ -1577,6 +1601,7 @@ static int trace__sys_exit(struct trace *trace, struct perf_evsel *evsel,
6511     duration = sample->time - ttrace->entry_time;
6512     if (trace__filter_duration(trace, duration))
6513     goto out;
6514     + duration_calculated = true;
6515     } else if (trace->duration_filter)
6516     goto out;
6517    
6518     @@ -1592,7 +1617,7 @@ static int trace__sys_exit(struct trace *trace, struct perf_evsel *evsel,
6519     if (trace->summary_only)
6520     goto out;
6521    
6522     - trace__fprintf_entry_head(trace, thread, duration, ttrace->entry_time, trace->output);
6523     + trace__fprintf_entry_head(trace, thread, duration, duration_calculated, ttrace->entry_time, trace->output);
6524    
6525     if (ttrace->entry_pending) {
6526     fprintf(trace->output, "%-70s", ttrace->entry_str);
6527     @@ -1855,7 +1880,7 @@ static int trace__pgfault(struct trace *trace,
6528     thread__find_addr_location(thread, sample->cpumode, MAP__FUNCTION,
6529     sample->ip, &al);
6530    
6531     - trace__fprintf_entry_head(trace, thread, 0, sample->time, trace->output);
6532     + trace__fprintf_entry_head(trace, thread, 0, true, sample->time, trace->output);
6533    
6534     fprintf(trace->output, "%sfault [",
6535     evsel->attr.config == PERF_COUNT_SW_PAGE_FAULTS_MAJ ?
6536     diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
6537     index 430d039d0079..a38227eb5450 100644
6538     --- a/tools/perf/util/annotate.c
6539     +++ b/tools/perf/util/annotate.c
6540     @@ -1250,6 +1250,7 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
6541     {
6542     char linkname[PATH_MAX];
6543     char *build_id_filename;
6544     + char *build_id_path = NULL;
6545    
6546     if (dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS &&
6547     !dso__is_kcore(dso))
6548     @@ -1265,8 +1266,14 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
6549     goto fallback;
6550     }
6551    
6552     + build_id_path = strdup(filename);
6553     + if (!build_id_path)
6554     + return -1;
6555     +
6556     + dirname(build_id_path);
6557     +
6558     if (dso__is_kcore(dso) ||
6559     - readlink(filename, linkname, sizeof(linkname)) < 0 ||
6560     + readlink(build_id_path, linkname, sizeof(linkname)) < 0 ||
6561     strstr(linkname, DSO__NAME_KALLSYMS) ||
6562     access(filename, R_OK)) {
6563     fallback:
6564     @@ -1278,6 +1285,7 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
6565     __symbol__join_symfs(filename, filename_size, dso->long_name);
6566     }
6567    
6568     + free(build_id_path);
6569     return 0;
6570     }
6571    
6572     diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c
6573     index e528c40739cc..993ef2762508 100644
6574     --- a/tools/perf/util/build-id.c
6575     +++ b/tools/perf/util/build-id.c
6576     @@ -182,13 +182,17 @@ char *build_id_cache__origname(const char *sbuild_id)
6577     char buf[PATH_MAX];
6578     char *ret = NULL, *p;
6579     size_t offs = 5; /* == strlen("../..") */
6580     + ssize_t len;
6581    
6582     linkname = build_id_cache__linkname(sbuild_id, NULL, 0);
6583     if (!linkname)
6584     return NULL;
6585    
6586     - if (readlink(linkname, buf, PATH_MAX) < 0)
6587     + len = readlink(linkname, buf, sizeof(buf) - 1);
6588     + if (len <= 0)
6589     goto out;
6590     + buf[len] = '\0';
6591     +
6592     /* The link should be "../..<origpath>/<sbuild_id>" */
6593     p = strrchr(buf, '/'); /* Cut off the "/<sbuild_id>" */
6594     if (p && (p > buf + offs)) {
6595     diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
6596     index 8ab0d7da956b..663192395780 100644
6597     --- a/tools/perf/util/event.c
6598     +++ b/tools/perf/util/event.c
6599     @@ -255,8 +255,8 @@ int perf_event__synthesize_mmap_events(struct perf_tool *tool,
6600     if (machine__is_default_guest(machine))
6601     return 0;
6602    
6603     - snprintf(filename, sizeof(filename), "%s/proc/%d/maps",
6604     - machine->root_dir, pid);
6605     + snprintf(filename, sizeof(filename), "%s/proc/%d/task/%d/maps",
6606     + machine->root_dir, pid, pid);
6607    
6608     fp = fopen(filename, "r");
6609     if (fp == NULL) {
6610     diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
6611     index 8bc271141d9d..bce80f866dd0 100644
6612     --- a/tools/perf/util/evsel.c
6613     +++ b/tools/perf/util/evsel.c
6614     @@ -1221,7 +1221,7 @@ int perf_evsel__read(struct perf_evsel *evsel, int cpu, int thread,
6615     if (FD(evsel, cpu, thread) < 0)
6616     return -EINVAL;
6617    
6618     - if (readn(FD(evsel, cpu, thread), count, sizeof(*count)) < 0)
6619     + if (readn(FD(evsel, cpu, thread), count, sizeof(*count)) <= 0)
6620     return -errno;
6621    
6622     return 0;
6623     @@ -1239,7 +1239,7 @@ int __perf_evsel__read_on_cpu(struct perf_evsel *evsel,
6624     if (evsel->counts == NULL && perf_evsel__alloc_counts(evsel, cpu + 1, thread + 1) < 0)
6625     return -ENOMEM;
6626    
6627     - if (readn(FD(evsel, cpu, thread), &count, nv * sizeof(u64)) < 0)
6628     + if (readn(FD(evsel, cpu, thread), &count, nv * sizeof(u64)) <= 0)
6629     return -errno;
6630    
6631     perf_evsel__compute_deltas(evsel, cpu, thread, &count);
6632     @@ -2400,11 +2400,17 @@ int perf_evsel__open_strerror(struct perf_evsel *evsel, struct target *target,
6633     int err, char *msg, size_t size)
6634     {
6635     char sbuf[STRERR_BUFSIZE];
6636     + int printed = 0;
6637    
6638     switch (err) {
6639     case EPERM:
6640     case EACCES:
6641     - return scnprintf(msg, size,
6642     + if (err == EPERM)
6643     + printed = scnprintf(msg, size,
6644     + "No permission to enable %s event.\n\n",
6645     + perf_evsel__name(evsel));
6646     +
6647     + return scnprintf(msg + printed, size - printed,
6648     "You may not have permission to collect %sstats.\n\n"
6649     "Consider tweaking /proc/sys/kernel/perf_event_paranoid,\n"
6650     "which controls use of the performance events system by\n"
6651     diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c
6652     index fe84df1875aa..e70e935b1841 100644
6653     --- a/tools/perf/util/ordered-events.c
6654     +++ b/tools/perf/util/ordered-events.c
6655     @@ -79,7 +79,7 @@ static union perf_event *dup_event(struct ordered_events *oe,
6656    
6657     static void free_dup_event(struct ordered_events *oe, union perf_event *event)
6658     {
6659     - if (oe->copy_on_queue) {
6660     + if (event && oe->copy_on_queue) {
6661     oe->cur_alloc_size -= event->header.size;
6662     free(event);
6663     }
6664     @@ -150,6 +150,7 @@ void ordered_events__delete(struct ordered_events *oe, struct ordered_event *eve
6665     list_move(&event->list, &oe->cache);
6666     oe->nr_events--;
6667     free_dup_event(oe, event->event);
6668     + event->event = NULL;
6669     }
6670    
6671     int ordered_events__queue(struct ordered_events *oe, union perf_event *event,
6672     diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
6673     index 6a6f44dd594b..4d2e22f8bd94 100644
6674     --- a/tools/perf/util/probe-event.c
6675     +++ b/tools/perf/util/probe-event.c
6676     @@ -3060,7 +3060,7 @@ concat_probe_trace_events(struct probe_trace_event **tevs, int *ntevs,
6677     struct probe_trace_event *new_tevs;
6678     int ret = 0;
6679    
6680     - if (ntevs == 0) {
6681     + if (*ntevs == 0) {
6682     *tevs = *tevs2;
6683     *ntevs = ntevs2;
6684     *tevs2 = NULL;
6685     diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
6686     index 5d61242a6e64..7e0573e55a35 100644
6687     --- a/tools/perf/util/session.c
6688     +++ b/tools/perf/util/session.c
6689     @@ -139,8 +139,14 @@ struct perf_session *perf_session__new(struct perf_data_file *file,
6690     if (perf_session__open(session) < 0)
6691     goto out_close;
6692    
6693     - perf_session__set_id_hdr_size(session);
6694     - perf_session__set_comm_exec(session);
6695     + /*
6696     + * set session attributes that are present in perf.data
6697     + * but not in pipe-mode.
6698     + */
6699     + if (!file->is_pipe) {
6700     + perf_session__set_id_hdr_size(session);
6701     + perf_session__set_comm_exec(session);
6702     + }
6703     }
6704     } else {
6705     session->machines.host.env = &perf_env;
6706     @@ -155,7 +161,11 @@ struct perf_session *perf_session__new(struct perf_data_file *file,
6707     pr_warning("Cannot read kernel map\n");
6708     }
6709    
6710     - if (tool && tool->ordering_requires_timestamps &&
6711     + /*
6712     + * In pipe-mode, evlist is empty until PERF_RECORD_HEADER_ATTR is
6713     + * processed, so perf_evlist__sample_id_all is not meaningful here.
6714     + */
6715     + if ((!file || !file->is_pipe) && tool && tool->ordering_requires_timestamps &&
6716     tool->ordered_events && !perf_evlist__sample_id_all(session->evlist)) {
6717     dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n");
6718     tool->ordered_events = false;
6719     @@ -1628,6 +1638,7 @@ static int __perf_session__process_pipe_events(struct perf_session *session)
6720     buf = malloc(cur_size);
6721     if (!buf)
6722     return -errno;
6723     + ordered_events__set_copy_on_queue(oe, true);
6724     more:
6725     event = buf;
6726     err = readn(fd, event, sizeof(struct perf_event_header));
6727     diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
6728     index 452e15a10dd2..031e64ce7156 100644
6729     --- a/tools/perf/util/sort.c
6730     +++ b/tools/perf/util/sort.c
6731     @@ -846,6 +846,9 @@ static int hist_entry__mispredict_snprintf(struct hist_entry *he, char *bf,
6732     static int64_t
6733     sort__cycles_cmp(struct hist_entry *left, struct hist_entry *right)
6734     {
6735     + if (!left->branch_info || !right->branch_info)
6736     + return cmp_null(left->branch_info, right->branch_info);
6737     +
6738     return left->branch_info->flags.cycles -
6739     right->branch_info->flags.cycles;
6740     }
6741     @@ -853,6 +856,8 @@ sort__cycles_cmp(struct hist_entry *left, struct hist_entry *right)
6742     static int hist_entry__cycles_snprintf(struct hist_entry *he, char *bf,
6743     size_t size, unsigned int width)
6744     {
6745     + if (!he->branch_info)
6746     + return scnprintf(bf, size, "%-.*s", width, "N/A");
6747     if (he->branch_info->flags.cycles == 0)
6748     return repsep_snprintf(bf, size, "%-*s", width, "-");
6749     return repsep_snprintf(bf, size, "%-*hd", width,
6750     diff --git a/tools/testing/selftests/firmware/fw_filesystem.sh b/tools/testing/selftests/firmware/fw_filesystem.sh
6751     index d8ac9ba67688..17e16fcaa0cc 100755
6752     --- a/tools/testing/selftests/firmware/fw_filesystem.sh
6753     +++ b/tools/testing/selftests/firmware/fw_filesystem.sh
6754     @@ -28,7 +28,10 @@ test_finish()
6755     if [ "$HAS_FW_LOADER_USER_HELPER" = "yes" ]; then
6756     echo "$OLD_TIMEOUT" >/sys/class/firmware/timeout
6757     fi
6758     - echo -n "$OLD_PATH" >/sys/module/firmware_class/parameters/path
6759     + if [ "$OLD_FWPATH" = "" ]; then
6760     + OLD_FWPATH=" "
6761     + fi
6762     + echo -n "$OLD_FWPATH" >/sys/module/firmware_class/parameters/path
6763     rm -f "$FW"
6764     rmdir "$FWPATH"
6765     }
6766     diff --git a/tools/testing/selftests/rcutorture/bin/configinit.sh b/tools/testing/selftests/rcutorture/bin/configinit.sh
6767     index 3f81a1095206..50a6371b2b2e 100755
6768     --- a/tools/testing/selftests/rcutorture/bin/configinit.sh
6769     +++ b/tools/testing/selftests/rcutorture/bin/configinit.sh
6770     @@ -51,7 +51,7 @@ then
6771     mkdir $builddir
6772     fi
6773     else
6774     - echo Bad build directory: \"$builddir\"
6775     + echo Bad build directory: \"$buildloc\"
6776     exit 2
6777     fi
6778     fi
6779     diff --git a/tools/testing/selftests/x86/entry_from_vm86.c b/tools/testing/selftests/x86/entry_from_vm86.c
6780     index d075ea0e5ca1..ade443a88421 100644
6781     --- a/tools/testing/selftests/x86/entry_from_vm86.c
6782     +++ b/tools/testing/selftests/x86/entry_from_vm86.c
6783     @@ -95,6 +95,31 @@ asm (
6784     "int3\n\t"
6785     "vmcode_int80:\n\t"
6786     "int $0x80\n\t"
6787     + "vmcode_popf_hlt:\n\t"
6788     + "push %ax\n\t"
6789     + "popf\n\t"
6790     + "hlt\n\t"
6791     + "vmcode_umip:\n\t"
6792     + /* addressing via displacements */
6793     + "smsw (2052)\n\t"
6794     + "sidt (2054)\n\t"
6795     + "sgdt (2060)\n\t"
6796     + /* addressing via registers */
6797     + "mov $2066, %bx\n\t"
6798     + "smsw (%bx)\n\t"
6799     + "mov $2068, %bx\n\t"
6800     + "sidt (%bx)\n\t"
6801     + "mov $2074, %bx\n\t"
6802     + "sgdt (%bx)\n\t"
6803     + /* register operands, only for smsw */
6804     + "smsw %ax\n\t"
6805     + "mov %ax, (2080)\n\t"
6806     + "int3\n\t"
6807     + "vmcode_umip_str:\n\t"
6808     + "str %eax\n\t"
6809     + "vmcode_umip_sldt:\n\t"
6810     + "sldt %eax\n\t"
6811     + "int3\n\t"
6812     ".size vmcode, . - vmcode\n\t"
6813     "end_vmcode:\n\t"
6814     ".code32\n\t"
6815     @@ -103,7 +128,8 @@ asm (
6816    
6817     extern unsigned char vmcode[], end_vmcode[];
6818     extern unsigned char vmcode_bound[], vmcode_sysenter[], vmcode_syscall[],
6819     - vmcode_sti[], vmcode_int3[], vmcode_int80[];
6820     + vmcode_sti[], vmcode_int3[], vmcode_int80[], vmcode_popf_hlt[],
6821     + vmcode_umip[], vmcode_umip_str[], vmcode_umip_sldt[];
6822    
6823     /* Returns false if the test was skipped. */
6824     static bool do_test(struct vm86plus_struct *v86, unsigned long eip,
6825     @@ -153,13 +179,75 @@ static bool do_test(struct vm86plus_struct *v86, unsigned long eip,
6826     (VM86_TYPE(ret) == rettype && VM86_ARG(ret) == retarg)) {
6827     printf("[OK]\tReturned correctly\n");
6828     } else {
6829     - printf("[FAIL]\tIncorrect return reason\n");
6830     + printf("[FAIL]\tIncorrect return reason (started at eip = 0x%lx, ended at eip = 0x%lx)\n", eip, v86->regs.eip);
6831     nerrs++;
6832     }
6833    
6834     return true;
6835     }
6836    
6837     +void do_umip_tests(struct vm86plus_struct *vm86, unsigned char *test_mem)
6838     +{
6839     + struct table_desc {
6840     + unsigned short limit;
6841     + unsigned long base;
6842     + } __attribute__((packed));
6843     +
6844     + /* Initialize variables with arbitrary values */
6845     + struct table_desc gdt1 = { .base = 0x3c3c3c3c, .limit = 0x9999 };
6846     + struct table_desc gdt2 = { .base = 0x1a1a1a1a, .limit = 0xaeae };
6847     + struct table_desc idt1 = { .base = 0x7b7b7b7b, .limit = 0xf1f1 };
6848     + struct table_desc idt2 = { .base = 0x89898989, .limit = 0x1313 };
6849     + unsigned short msw1 = 0x1414, msw2 = 0x2525, msw3 = 3737;
6850     +
6851     + /* UMIP -- exit with INT3 unless kernel emulation did not trap #GP */
6852     + do_test(vm86, vmcode_umip - vmcode, VM86_TRAP, 3, "UMIP tests");
6853     +
6854     + /* Results from displacement-only addressing */
6855     + msw1 = *(unsigned short *)(test_mem + 2052);
6856     + memcpy(&idt1, test_mem + 2054, sizeof(idt1));
6857     + memcpy(&gdt1, test_mem + 2060, sizeof(gdt1));
6858     +
6859     + /* Results from register-indirect addressing */
6860     + msw2 = *(unsigned short *)(test_mem + 2066);
6861     + memcpy(&idt2, test_mem + 2068, sizeof(idt2));
6862     + memcpy(&gdt2, test_mem + 2074, sizeof(gdt2));
6863     +
6864     + /* Results when using register operands */
6865     + msw3 = *(unsigned short *)(test_mem + 2080);
6866     +
6867     + printf("[INFO]\tResult from SMSW:[0x%04x]\n", msw1);
6868     + printf("[INFO]\tResult from SIDT: limit[0x%04x]base[0x%08lx]\n",
6869     + idt1.limit, idt1.base);
6870     + printf("[INFO]\tResult from SGDT: limit[0x%04x]base[0x%08lx]\n",
6871     + gdt1.limit, gdt1.base);
6872     +
6873     + if (msw1 != msw2 || msw1 != msw3)
6874     + printf("[FAIL]\tAll the results of SMSW should be the same.\n");
6875     + else
6876     + printf("[PASS]\tAll the results from SMSW are identical.\n");
6877     +
6878     + if (memcmp(&gdt1, &gdt2, sizeof(gdt1)))
6879     + printf("[FAIL]\tAll the results of SGDT should be the same.\n");
6880     + else
6881     + printf("[PASS]\tAll the results from SGDT are identical.\n");
6882     +
6883     + if (memcmp(&idt1, &idt2, sizeof(idt1)))
6884     + printf("[FAIL]\tAll the results of SIDT should be the same.\n");
6885     + else
6886     + printf("[PASS]\tAll the results from SIDT are identical.\n");
6887     +
6888     + sethandler(SIGILL, sighandler, 0);
6889     + do_test(vm86, vmcode_umip_str - vmcode, VM86_SIGNAL, 0,
6890     + "STR instruction");
6891     + clearhandler(SIGILL);
6892     +
6893     + sethandler(SIGILL, sighandler, 0);
6894     + do_test(vm86, vmcode_umip_sldt - vmcode, VM86_SIGNAL, 0,
6895     + "SLDT instruction");
6896     + clearhandler(SIGILL);
6897     +}
6898     +
6899     int main(void)
6900     {
6901     struct vm86plus_struct v86;
6902     @@ -180,6 +268,9 @@ int main(void)
6903     v86.regs.ds = load_addr / 16;
6904     v86.regs.es = load_addr / 16;
6905    
6906     + /* Use the end of the page as our stack. */
6907     + v86.regs.esp = 4096;
6908     +
6909     assert((v86.regs.cs & 3) == 0); /* Looks like RPL = 0 */
6910    
6911     /* #BR -- should deliver SIG??? */
6912     @@ -211,6 +302,23 @@ int main(void)
6913     v86.regs.eflags &= ~X86_EFLAGS_IF;
6914     do_test(&v86, vmcode_sti - vmcode, VM86_STI, 0, "STI with VIP set");
6915    
6916     + /* POPF with VIP set but IF clear: should not trap */
6917     + v86.regs.eflags = X86_EFLAGS_VIP;
6918     + v86.regs.eax = 0;
6919     + do_test(&v86, vmcode_popf_hlt - vmcode, VM86_UNKNOWN, 0, "POPF with VIP set and IF clear");
6920     +
6921     + /* POPF with VIP set and IF set: should trap */
6922     + v86.regs.eflags = X86_EFLAGS_VIP;
6923     + v86.regs.eax = X86_EFLAGS_IF;
6924     + do_test(&v86, vmcode_popf_hlt - vmcode, VM86_STI, 0, "POPF with VIP and IF set");
6925     +
6926     + /* POPF with VIP clear and IF set: should not trap */
6927     + v86.regs.eflags = 0;
6928     + v86.regs.eax = X86_EFLAGS_IF;
6929     + do_test(&v86, vmcode_popf_hlt - vmcode, VM86_UNKNOWN, 0, "POPF with VIP clear and IF set");
6930     +
6931     + v86.regs.eflags = 0;
6932     +
6933     /* INT3 -- should cause #BP */
6934     do_test(&v86, vmcode_int3 - vmcode, VM86_TRAP, 3, "INT3");
6935    
6936     @@ -218,6 +326,9 @@ int main(void)
6937     v86.regs.eax = (unsigned int)-1;
6938     do_test(&v86, vmcode_int80 - vmcode, VM86_INTx, 0x80, "int80");
6939    
6940     + /* UMIP -- should exit with INTx 0x80 unless UMIP was not disabled */
6941     + do_umip_tests(&v86, addr);
6942     +
6943     /* Execute a null pointer */
6944     v86.regs.cs = 0;
6945     v86.regs.ss = 0;
6946     @@ -231,7 +342,7 @@ int main(void)
6947     clearhandler(SIGSEGV);
6948    
6949     /* Make sure nothing explodes if we fork. */
6950     - if (fork() > 0)
6951     + if (fork() == 0)
6952     return 0;
6953    
6954     return (nerrs == 0 ? 0 : 1);
6955     diff --git a/tools/usb/usbip/src/usbipd.c b/tools/usb/usbip/src/usbipd.c
6956     index a0972dea9e6c..193556507957 100644
6957     --- a/tools/usb/usbip/src/usbipd.c
6958     +++ b/tools/usb/usbip/src/usbipd.c
6959     @@ -463,7 +463,7 @@ static void set_signal(void)
6960     sigaction(SIGTERM, &act, NULL);
6961     sigaction(SIGINT, &act, NULL);
6962     act.sa_handler = SIG_IGN;
6963     - sigaction(SIGCLD, &act, NULL);
6964     + sigaction(SIGCHLD, &act, NULL);
6965     }
6966    
6967     static const char *pid_file;