Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0306-4.9.207-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3581 - (show annotations) (download)
Thu Aug 13 10:21:22 2020 UTC (3 years, 8 months ago) by niro
File size: 200238 byte(s)
linux-207
1 diff --git a/Documentation/devicetree/bindings/rtc/abracon,abx80x.txt b/Documentation/devicetree/bindings/rtc/abracon,abx80x.txt
2 index be789685a1c2..18b892d010d8 100644
3 --- a/Documentation/devicetree/bindings/rtc/abracon,abx80x.txt
4 +++ b/Documentation/devicetree/bindings/rtc/abracon,abx80x.txt
5 @@ -27,4 +27,4 @@ and valid to enable charging:
6
7 - "abracon,tc-diode": should be "standard" (0.6V) or "schottky" (0.3V)
8 - "abracon,tc-resistor": should be <0>, <3>, <6> or <11>. 0 disables the output
9 - resistor, the other values are in ohm.
10 + resistor, the other values are in kOhm.
11 diff --git a/Makefile b/Makefile
12 index 55a91bc3d8f9..aa8e52a3b73d 100644
13 --- a/Makefile
14 +++ b/Makefile
15 @@ -1,6 +1,6 @@
16 VERSION = 4
17 PATCHLEVEL = 9
18 -SUBLEVEL = 206
19 +SUBLEVEL = 207
20 EXTRAVERSION =
21 NAME = Roaring Lionus
22
23 @@ -1521,9 +1521,6 @@ else # KBUILD_EXTMOD
24
25 # We are always building modules
26 KBUILD_MODULES := 1
27 -PHONY += crmodverdir
28 -crmodverdir:
29 - $(cmd_crmodverdir)
30
31 PHONY += $(objtree)/Module.symvers
32 $(objtree)/Module.symvers:
33 @@ -1535,7 +1532,7 @@ $(objtree)/Module.symvers:
34
35 module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD))
36 PHONY += $(module-dirs) modules
37 -$(module-dirs): crmodverdir $(objtree)/Module.symvers
38 +$(module-dirs): prepare $(objtree)/Module.symvers
39 $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
40
41 modules: $(module-dirs)
42 @@ -1576,7 +1573,8 @@ help:
43
44 # Dummies...
45 PHONY += prepare scripts
46 -prepare: ;
47 +prepare:
48 + $(cmd_crmodverdir)
49 scripts: ;
50 endif # KBUILD_EXTMOD
51
52 @@ -1701,17 +1699,14 @@ endif
53
54 # Modules
55 /: prepare scripts FORCE
56 - $(cmd_crmodverdir)
57 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
58 $(build)=$(build-dir)
59 # Make sure the latest headers are built for Documentation
60 Documentation/ samples/: headers_install
61 %/: prepare scripts FORCE
62 - $(cmd_crmodverdir)
63 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
64 $(build)=$(build-dir)
65 %.ko: prepare scripts FORCE
66 - $(cmd_crmodverdir)
67 $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
68 $(build)=$(build-dir) $(@:.ko=.o)
69 $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
70 diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
71 index a5625430bef6..bb8f39fe3a22 100644
72 --- a/arch/arm/Kconfig.debug
73 +++ b/arch/arm/Kconfig.debug
74 @@ -987,14 +987,21 @@ choice
75 Say Y here if you want kernel low-level debugging support
76 on SOCFPGA(Cyclone 5 and Arria 5) based platforms.
77
78 - config DEBUG_SOCFPGA_UART1
79 + config DEBUG_SOCFPGA_ARRIA10_UART1
80 depends on ARCH_SOCFPGA
81 - bool "Use SOCFPGA UART1 for low-level debug"
82 + bool "Use SOCFPGA Arria10 UART1 for low-level debug"
83 select DEBUG_UART_8250
84 help
85 Say Y here if you want kernel low-level debugging support
86 on SOCFPGA(Arria 10) based platforms.
87
88 + config DEBUG_SOCFPGA_CYCLONE5_UART1
89 + depends on ARCH_SOCFPGA
90 + bool "Use SOCFPGA Cyclone 5 UART1 for low-level debug"
91 + select DEBUG_UART_8250
92 + help
93 + Say Y here if you want kernel low-level debugging support
94 + on SOCFPGA(Cyclone 5 and Arria 5) based platforms.
95
96 config DEBUG_SUN9I_UART0
97 bool "Kernel low-level debugging messages via sun9i UART0"
98 @@ -1534,7 +1541,8 @@ config DEBUG_UART_PHYS
99 default 0xfe800000 if ARCH_IOP32X
100 default 0xff690000 if DEBUG_RK32_UART2
101 default 0xffc02000 if DEBUG_SOCFPGA_UART0
102 - default 0xffc02100 if DEBUG_SOCFPGA_UART1
103 + default 0xffc02100 if DEBUG_SOCFPGA_ARRIA10_UART1
104 + default 0xffc03000 if DEBUG_SOCFPGA_CYCLONE5_UART1
105 default 0xffd82340 if ARCH_IOP13XX
106 default 0xffe40000 if DEBUG_RCAR_GEN1_SCIF0
107 default 0xffe42000 if DEBUG_RCAR_GEN1_SCIF2
108 @@ -1624,7 +1632,8 @@ config DEBUG_UART_VIRT
109 default 0xfeb30c00 if DEBUG_KEYSTONE_UART0
110 default 0xfeb31000 if DEBUG_KEYSTONE_UART1
111 default 0xfec02000 if DEBUG_SOCFPGA_UART0
112 - default 0xfec02100 if DEBUG_SOCFPGA_UART1
113 + default 0xfec02100 if DEBUG_SOCFPGA_ARRIA10_UART1
114 + default 0xfec03000 if DEBUG_SOCFPGA_CYCLONE5_UART1
115 default 0xfec12000 if (DEBUG_MVEBU_UART0 || DEBUG_MVEBU_UART0_ALTERNATE) && ARCH_MVEBU
116 default 0xfec12100 if DEBUG_MVEBU_UART1_ALTERNATE
117 default 0xfec10000 if DEBUG_SIRFATLAS7_UART0
118 @@ -1672,9 +1681,9 @@ config DEBUG_UART_8250_WORD
119 depends on DEBUG_LL_UART_8250 || DEBUG_UART_8250
120 depends on DEBUG_UART_8250_SHIFT >= 2
121 default y if DEBUG_PICOXCELL_UART || \
122 - DEBUG_SOCFPGA_UART0 || DEBUG_SOCFPGA_UART1 || \
123 - DEBUG_KEYSTONE_UART0 || DEBUG_KEYSTONE_UART1 || \
124 - DEBUG_ALPINE_UART0 || \
125 + DEBUG_SOCFPGA_UART0 || DEBUG_SOCFPGA_ARRIA10_UART1 || \
126 + DEBUG_SOCFPGA_CYCLONE5_UART1 || DEBUG_KEYSTONE_UART0 || \
127 + DEBUG_KEYSTONE_UART1 || DEBUG_ALPINE_UART0 || \
128 DEBUG_DAVINCI_DMx_UART0 || DEBUG_DAVINCI_DA8XX_UART1 || \
129 DEBUG_DAVINCI_DA8XX_UART2 || \
130 DEBUG_BCM_KONA_UART || DEBUG_RK32_UART2
131 diff --git a/arch/arm/boot/dts/arm-realview-pb1176.dts b/arch/arm/boot/dts/arm-realview-pb1176.dts
132 index c1fd5615ddfe..939c108c24a6 100644
133 --- a/arch/arm/boot/dts/arm-realview-pb1176.dts
134 +++ b/arch/arm/boot/dts/arm-realview-pb1176.dts
135 @@ -45,7 +45,7 @@
136 };
137
138 /* The voltage to the MMC card is hardwired at 3.3V */
139 - vmmc: fixedregulator@0 {
140 + vmmc: regulator-vmmc {
141 compatible = "regulator-fixed";
142 regulator-name = "vmmc";
143 regulator-min-microvolt = <3300000>;
144 @@ -53,7 +53,7 @@
145 regulator-boot-on;
146 };
147
148 - veth: fixedregulator@0 {
149 + veth: regulator-veth {
150 compatible = "regulator-fixed";
151 regulator-name = "veth";
152 regulator-min-microvolt = <3300000>;
153 diff --git a/arch/arm/boot/dts/arm-realview-pb11mp.dts b/arch/arm/boot/dts/arm-realview-pb11mp.dts
154 index e306f1cceb4e..95037c48182d 100644
155 --- a/arch/arm/boot/dts/arm-realview-pb11mp.dts
156 +++ b/arch/arm/boot/dts/arm-realview-pb11mp.dts
157 @@ -145,7 +145,7 @@
158 };
159
160 /* The voltage to the MMC card is hardwired at 3.3V */
161 - vmmc: fixedregulator@0 {
162 + vmmc: regulator-vmmc {
163 compatible = "regulator-fixed";
164 regulator-name = "vmmc";
165 regulator-min-microvolt = <3300000>;
166 @@ -153,7 +153,7 @@
167 regulator-boot-on;
168 };
169
170 - veth: fixedregulator@0 {
171 + veth: regulator-veth {
172 compatible = "regulator-fixed";
173 regulator-name = "veth";
174 regulator-min-microvolt = <3300000>;
175 diff --git a/arch/arm/boot/dts/arm-realview-pbx.dtsi b/arch/arm/boot/dts/arm-realview-pbx.dtsi
176 index 2bf3958b2e6b..068293254fbb 100644
177 --- a/arch/arm/boot/dts/arm-realview-pbx.dtsi
178 +++ b/arch/arm/boot/dts/arm-realview-pbx.dtsi
179 @@ -43,7 +43,7 @@
180 };
181
182 /* The voltage to the MMC card is hardwired at 3.3V */
183 - vmmc: fixedregulator@0 {
184 + vmmc: regulator-vmmc {
185 compatible = "regulator-fixed";
186 regulator-name = "vmmc";
187 regulator-min-microvolt = <3300000>;
188 @@ -51,7 +51,7 @@
189 regulator-boot-on;
190 };
191
192 - veth: fixedregulator@0 {
193 + veth: regulator-veth {
194 compatible = "regulator-fixed";
195 regulator-name = "veth";
196 regulator-min-microvolt = <3300000>;
197 @@ -539,4 +539,3 @@
198 };
199 };
200 };
201 -
202 diff --git a/arch/arm/boot/dts/exynos3250.dtsi b/arch/arm/boot/dts/exynos3250.dtsi
203 index 51dbd8cb91cb..99b3d2331971 100644
204 --- a/arch/arm/boot/dts/exynos3250.dtsi
205 +++ b/arch/arm/boot/dts/exynos3250.dtsi
206 @@ -345,7 +345,7 @@
207 };
208
209 hsotg: hsotg@12480000 {
210 - compatible = "snps,dwc2";
211 + compatible = "samsung,s3c6400-hsotg", "snps,dwc2";
212 reg = <0x12480000 0x20000>;
213 interrupts = <0 141 0>;
214 clocks = <&cmu CLK_USBOTG>;
215 diff --git a/arch/arm/boot/dts/mmp2.dtsi b/arch/arm/boot/dts/mmp2.dtsi
216 index 47e5b63339d1..e95deed6a797 100644
217 --- a/arch/arm/boot/dts/mmp2.dtsi
218 +++ b/arch/arm/boot/dts/mmp2.dtsi
219 @@ -180,7 +180,7 @@
220 clocks = <&soc_clocks MMP2_CLK_GPIO>;
221 resets = <&soc_clocks MMP2_CLK_GPIO>;
222 interrupt-controller;
223 - #interrupt-cells = <1>;
224 + #interrupt-cells = <2>;
225 ranges;
226
227 gcb0: gpio@d4019000 {
228 diff --git a/arch/arm/boot/dts/omap3-pandora-common.dtsi b/arch/arm/boot/dts/omap3-pandora-common.dtsi
229 index 53e007abdc71..964240a0f4a9 100644
230 --- a/arch/arm/boot/dts/omap3-pandora-common.dtsi
231 +++ b/arch/arm/boot/dts/omap3-pandora-common.dtsi
232 @@ -221,6 +221,17 @@
233 gpio = <&gpio6 4 GPIO_ACTIVE_HIGH>; /* GPIO_164 */
234 };
235
236 + /* wl1251 wifi+bt module */
237 + wlan_en: fixed-regulator-wg7210_en {
238 + compatible = "regulator-fixed";
239 + regulator-name = "vwlan";
240 + regulator-min-microvolt = <1800000>;
241 + regulator-max-microvolt = <1800000>;
242 + startup-delay-us = <50000>;
243 + enable-active-high;
244 + gpio = <&gpio1 23 GPIO_ACTIVE_HIGH>;
245 + };
246 +
247 /* wg7210 (wifi+bt module) 32k clock buffer */
248 wg7210_32k: fixed-regulator-wg7210_32k {
249 compatible = "regulator-fixed";
250 @@ -514,9 +525,30 @@
251 /*wp-gpios = <&gpio4 31 GPIO_ACTIVE_HIGH>;*/ /* GPIO_127 */
252 };
253
254 -/* mmc3 is probed using pdata-quirks to pass wl1251 card data */
255 &mmc3 {
256 - status = "disabled";
257 + vmmc-supply = <&wlan_en>;
258 +
259 + bus-width = <4>;
260 + non-removable;
261 + ti,non-removable;
262 + cap-power-off-card;
263 +
264 + pinctrl-names = "default";
265 + pinctrl-0 = <&mmc3_pins>;
266 +
267 + #address-cells = <1>;
268 + #size-cells = <0>;
269 +
270 + wlan: wifi@1 {
271 + compatible = "ti,wl1251";
272 +
273 + reg = <1>;
274 +
275 + interrupt-parent = <&gpio1>;
276 + interrupts = <21 IRQ_TYPE_LEVEL_HIGH>; /* GPIO_21 */
277 +
278 + ti,wl1251-has-eeprom;
279 + };
280 };
281
282 /* bluetooth*/
283 diff --git a/arch/arm/boot/dts/omap3-tao3530.dtsi b/arch/arm/boot/dts/omap3-tao3530.dtsi
284 index dc80886b5329..e3dfba8b3efe 100644
285 --- a/arch/arm/boot/dts/omap3-tao3530.dtsi
286 +++ b/arch/arm/boot/dts/omap3-tao3530.dtsi
287 @@ -225,7 +225,7 @@
288 pinctrl-0 = <&mmc1_pins>;
289 vmmc-supply = <&vmmc1>;
290 vmmc_aux-supply = <&vsim>;
291 - cd-gpios = <&twl_gpio 0 GPIO_ACTIVE_HIGH>;
292 + cd-gpios = <&twl_gpio 0 GPIO_ACTIVE_LOW>;
293 bus-width = <8>;
294 };
295
296 diff --git a/arch/arm/boot/dts/pxa27x.dtsi b/arch/arm/boot/dts/pxa27x.dtsi
297 index 0e1320afa156..d629948000db 100644
298 --- a/arch/arm/boot/dts/pxa27x.dtsi
299 +++ b/arch/arm/boot/dts/pxa27x.dtsi
300 @@ -34,7 +34,7 @@
301 clocks = <&clks CLK_NONE>;
302 };
303
304 - pxa27x_ohci: usb@4c000000 {
305 + usb0: usb@4c000000 {
306 compatible = "marvell,pxa-ohci";
307 reg = <0x4c000000 0x10000>;
308 interrupts = <3>;
309 diff --git a/arch/arm/boot/dts/pxa2xx.dtsi b/arch/arm/boot/dts/pxa2xx.dtsi
310 index 3ff077ca4400..5a6f4ed92dac 100644
311 --- a/arch/arm/boot/dts/pxa2xx.dtsi
312 +++ b/arch/arm/boot/dts/pxa2xx.dtsi
313 @@ -117,13 +117,6 @@
314 status = "disabled";
315 };
316
317 - usb0: ohci@4c000000 {
318 - compatible = "marvell,pxa-ohci";
319 - reg = <0x4c000000 0x10000>;
320 - interrupts = <3>;
321 - status = "disabled";
322 - };
323 -
324 mmc0: mmc@41100000 {
325 compatible = "marvell,pxa-mmc";
326 reg = <0x41100000 0x1000>;
327 diff --git a/arch/arm/boot/dts/pxa3xx.dtsi b/arch/arm/boot/dts/pxa3xx.dtsi
328 index 9d6f3aacedb7..4aee15062690 100644
329 --- a/arch/arm/boot/dts/pxa3xx.dtsi
330 +++ b/arch/arm/boot/dts/pxa3xx.dtsi
331 @@ -187,7 +187,7 @@
332 status = "disabled";
333 };
334
335 - pxa3xx_ohci: usb@4c000000 {
336 + usb0: usb@4c000000 {
337 compatible = "marvell,pxa-ohci";
338 reg = <0x4c000000 0x10000>;
339 interrupts = <3>;
340 diff --git a/arch/arm/boot/dts/rk3288-rock2-som.dtsi b/arch/arm/boot/dts/rk3288-rock2-som.dtsi
341 index bb1f01e037ba..c1c576875bc8 100644
342 --- a/arch/arm/boot/dts/rk3288-rock2-som.dtsi
343 +++ b/arch/arm/boot/dts/rk3288-rock2-som.dtsi
344 @@ -63,7 +63,7 @@
345
346 vcc_flash: flash-regulator {
347 compatible = "regulator-fixed";
348 - regulator-name = "vcc_sys";
349 + regulator-name = "vcc_flash";
350 regulator-min-microvolt = <1800000>;
351 regulator-max-microvolt = <1800000>;
352 startup-delay-us = <150>;
353 diff --git a/arch/arm/boot/dts/s3c6410-mini6410.dts b/arch/arm/boot/dts/s3c6410-mini6410.dts
354 index f4afda3594f8..de04d8764b0f 100644
355 --- a/arch/arm/boot/dts/s3c6410-mini6410.dts
356 +++ b/arch/arm/boot/dts/s3c6410-mini6410.dts
357 @@ -167,6 +167,10 @@
358 };
359 };
360
361 +&clocks {
362 + clocks = <&fin_pll>;
363 +};
364 +
365 &sdhci0 {
366 pinctrl-names = "default";
367 pinctrl-0 = <&sd0_clk>, <&sd0_cmd>, <&sd0_cd>, <&sd0_bus4>;
368 diff --git a/arch/arm/boot/dts/s3c6410-smdk6410.dts b/arch/arm/boot/dts/s3c6410-smdk6410.dts
369 index ecf35ec466f7..7ade1a0686d2 100644
370 --- a/arch/arm/boot/dts/s3c6410-smdk6410.dts
371 +++ b/arch/arm/boot/dts/s3c6410-smdk6410.dts
372 @@ -71,6 +71,10 @@
373 };
374 };
375
376 +&clocks {
377 + clocks = <&fin_pll>;
378 +};
379 +
380 &sdhci0 {
381 pinctrl-names = "default";
382 pinctrl-0 = <&sd0_clk>, <&sd0_cmd>, <&sd0_cd>, <&sd0_bus4>;
383 diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi
384 index ce1960453a0b..3bfa79717dfa 100644
385 --- a/arch/arm/boot/dts/sun6i-a31.dtsi
386 +++ b/arch/arm/boot/dts/sun6i-a31.dtsi
387 @@ -174,7 +174,7 @@
388 };
389
390 pmu {
391 - compatible = "arm,cortex-a7-pmu", "arm,cortex-a15-pmu";
392 + compatible = "arm,cortex-a7-pmu";
393 interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
394 <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
395 <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
396 diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
397 index 94cf5a1c7172..db5d30598ad6 100644
398 --- a/arch/arm/boot/dts/sun7i-a20.dtsi
399 +++ b/arch/arm/boot/dts/sun7i-a20.dtsi
400 @@ -172,7 +172,7 @@
401 };
402
403 pmu {
404 - compatible = "arm,cortex-a7-pmu", "arm,cortex-a15-pmu";
405 + compatible = "arm,cortex-a7-pmu";
406 interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>,
407 <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
408 };
409 diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h
410 index 0f6c6b873bc5..e05c31af48d1 100644
411 --- a/arch/arm/include/asm/uaccess.h
412 +++ b/arch/arm/include/asm/uaccess.h
413 @@ -379,6 +379,13 @@ do { \
414 #define __get_user_asm_byte(x, addr, err) \
415 __get_user_asm(x, addr, err, ldrb)
416
417 +#if __LINUX_ARM_ARCH__ >= 6
418 +
419 +#define __get_user_asm_half(x, addr, err) \
420 + __get_user_asm(x, addr, err, ldrh)
421 +
422 +#else
423 +
424 #ifndef __ARMEB__
425 #define __get_user_asm_half(x, __gu_addr, err) \
426 ({ \
427 @@ -397,6 +404,8 @@ do { \
428 })
429 #endif
430
431 +#endif /* __LINUX_ARM_ARCH__ >= 6 */
432 +
433 #define __get_user_asm_word(x, addr, err) \
434 __get_user_asm(x, addr, err, ldr)
435 #endif
436 @@ -472,6 +481,13 @@ do { \
437 #define __put_user_asm_byte(x, __pu_addr, err) \
438 __put_user_asm(x, __pu_addr, err, strb)
439
440 +#if __LINUX_ARM_ARCH__ >= 6
441 +
442 +#define __put_user_asm_half(x, __pu_addr, err) \
443 + __put_user_asm(x, __pu_addr, err, strh)
444 +
445 +#else
446 +
447 #ifndef __ARMEB__
448 #define __put_user_asm_half(x, __pu_addr, err) \
449 ({ \
450 @@ -488,6 +504,8 @@ do { \
451 })
452 #endif
453
454 +#endif /* __LINUX_ARM_ARCH__ >= 6 */
455 +
456 #define __put_user_asm_word(x, __pu_addr, err) \
457 __put_user_asm(x, __pu_addr, err, str)
458
459 diff --git a/arch/arm/lib/getuser.S b/arch/arm/lib/getuser.S
460 index 746e7801dcdf..b2e4bc3a635e 100644
461 --- a/arch/arm/lib/getuser.S
462 +++ b/arch/arm/lib/getuser.S
463 @@ -42,6 +42,12 @@ _ASM_NOKPROBE(__get_user_1)
464
465 ENTRY(__get_user_2)
466 check_uaccess r0, 2, r1, r2, __get_user_bad
467 +#if __LINUX_ARM_ARCH__ >= 6
468 +
469 +2: TUSER(ldrh) r2, [r0]
470 +
471 +#else
472 +
473 #ifdef CONFIG_CPU_USE_DOMAINS
474 rb .req ip
475 2: ldrbt r2, [r0], #1
476 @@ -56,6 +62,9 @@ rb .req r0
477 #else
478 orr r2, rb, r2, lsl #8
479 #endif
480 +
481 +#endif /* __LINUX_ARM_ARCH__ >= 6 */
482 +
483 mov r0, #0
484 ret lr
485 ENDPROC(__get_user_2)
486 @@ -145,7 +154,9 @@ _ASM_NOKPROBE(__get_user_bad8)
487 .pushsection __ex_table, "a"
488 .long 1b, __get_user_bad
489 .long 2b, __get_user_bad
490 +#if __LINUX_ARM_ARCH__ < 6
491 .long 3b, __get_user_bad
492 +#endif
493 .long 4b, __get_user_bad
494 .long 5b, __get_user_bad8
495 .long 6b, __get_user_bad8
496 diff --git a/arch/arm/lib/putuser.S b/arch/arm/lib/putuser.S
497 index 38d660d3705f..515eeaa9975c 100644
498 --- a/arch/arm/lib/putuser.S
499 +++ b/arch/arm/lib/putuser.S
500 @@ -41,16 +41,13 @@ ENDPROC(__put_user_1)
501
502 ENTRY(__put_user_2)
503 check_uaccess r0, 2, r1, ip, __put_user_bad
504 - mov ip, r2, lsr #8
505 -#ifdef CONFIG_THUMB2_KERNEL
506 -#ifndef __ARMEB__
507 -2: TUSER(strb) r2, [r0]
508 -3: TUSER(strb) ip, [r0, #1]
509 +#if __LINUX_ARM_ARCH__ >= 6
510 +
511 +2: TUSER(strh) r2, [r0]
512 +
513 #else
514 -2: TUSER(strb) ip, [r0]
515 -3: TUSER(strb) r2, [r0, #1]
516 -#endif
517 -#else /* !CONFIG_THUMB2_KERNEL */
518 +
519 + mov ip, r2, lsr #8
520 #ifndef __ARMEB__
521 2: TUSER(strb) r2, [r0], #1
522 3: TUSER(strb) ip, [r0]
523 @@ -58,7 +55,8 @@ ENTRY(__put_user_2)
524 2: TUSER(strb) ip, [r0], #1
525 3: TUSER(strb) r2, [r0]
526 #endif
527 -#endif /* CONFIG_THUMB2_KERNEL */
528 +
529 +#endif /* __LINUX_ARM_ARCH__ >= 6 */
530 mov r0, #0
531 ret lr
532 ENDPROC(__put_user_2)
533 @@ -91,7 +89,9 @@ ENDPROC(__put_user_bad)
534 .pushsection __ex_table, "a"
535 .long 1b, __put_user_bad
536 .long 2b, __put_user_bad
537 +#if __LINUX_ARM_ARCH__ < 6
538 .long 3b, __put_user_bad
539 +#endif
540 .long 4b, __put_user_bad
541 .long 5b, __put_user_bad
542 .long 6b, __put_user_bad
543 diff --git a/arch/arm/mach-omap1/id.c b/arch/arm/mach-omap1/id.c
544 index 52de382fc804..7e49dfda3d2f 100644
545 --- a/arch/arm/mach-omap1/id.c
546 +++ b/arch/arm/mach-omap1/id.c
547 @@ -200,10 +200,10 @@ void __init omap_check_revision(void)
548 printk(KERN_INFO "Unknown OMAP cpu type: 0x%02x\n", cpu_type);
549 }
550
551 - printk(KERN_INFO "OMAP%04x", omap_revision >> 16);
552 + pr_info("OMAP%04x", omap_revision >> 16);
553 if ((omap_revision >> 8) & 0xff)
554 - printk(KERN_INFO "%x", (omap_revision >> 8) & 0xff);
555 - printk(KERN_INFO " revision %i handled as %02xxx id: %08x%08x\n",
556 + pr_cont("%x", (omap_revision >> 8) & 0xff);
557 + pr_cont(" revision %i handled as %02xxx id: %08x%08x\n",
558 die_rev, omap_revision & 0xff, system_serial_low,
559 system_serial_high);
560 }
561 diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
562 index cc6d9fa60924..9d942f022f2f 100644
563 --- a/arch/arm/mach-omap2/id.c
564 +++ b/arch/arm/mach-omap2/id.c
565 @@ -199,8 +199,8 @@ void __init omap2xxx_check_revision(void)
566
567 pr_info("%s", soc_name);
568 if ((omap_rev() >> 8) & 0x0f)
569 - pr_info("%s", soc_rev);
570 - pr_info("\n");
571 + pr_cont("%s", soc_rev);
572 + pr_cont("\n");
573 }
574
575 #define OMAP3_SHOW_FEATURE(feat) \
576 diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c
577 index 88676fe9b119..c3b3972c301a 100644
578 --- a/arch/arm/mach-omap2/pdata-quirks.c
579 +++ b/arch/arm/mach-omap2/pdata-quirks.c
580 @@ -308,108 +308,15 @@ static void __init omap3_logicpd_torpedo_init(void)
581 }
582
583 /* omap3pandora legacy devices */
584 -#define PANDORA_WIFI_IRQ_GPIO 21
585 -#define PANDORA_WIFI_NRESET_GPIO 23
586
587 static struct platform_device pandora_backlight = {
588 .name = "pandora-backlight",
589 .id = -1,
590 };
591
592 -static struct regulator_consumer_supply pandora_vmmc3_supply[] = {
593 - REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2"),
594 -};
595 -
596 -static struct regulator_init_data pandora_vmmc3 = {
597 - .constraints = {
598 - .valid_ops_mask = REGULATOR_CHANGE_STATUS,
599 - },
600 - .num_consumer_supplies = ARRAY_SIZE(pandora_vmmc3_supply),
601 - .consumer_supplies = pandora_vmmc3_supply,
602 -};
603 -
604 -static struct fixed_voltage_config pandora_vwlan = {
605 - .supply_name = "vwlan",
606 - .microvolts = 1800000, /* 1.8V */
607 - .gpio = PANDORA_WIFI_NRESET_GPIO,
608 - .startup_delay = 50000, /* 50ms */
609 - .enable_high = 1,
610 - .init_data = &pandora_vmmc3,
611 -};
612 -
613 -static struct platform_device pandora_vwlan_device = {
614 - .name = "reg-fixed-voltage",
615 - .id = 1,
616 - .dev = {
617 - .platform_data = &pandora_vwlan,
618 - },
619 -};
620 -
621 -static void pandora_wl1251_init_card(struct mmc_card *card)
622 -{
623 - /*
624 - * We have TI wl1251 attached to MMC3. Pass this information to
625 - * SDIO core because it can't be probed by normal methods.
626 - */
627 - if (card->type == MMC_TYPE_SDIO || card->type == MMC_TYPE_SD_COMBO) {
628 - card->quirks |= MMC_QUIRK_NONSTD_SDIO;
629 - card->cccr.wide_bus = 1;
630 - card->cis.vendor = 0x104c;
631 - card->cis.device = 0x9066;
632 - card->cis.blksize = 512;
633 - card->cis.max_dtr = 24000000;
634 - card->ocr = 0x80;
635 - }
636 -}
637 -
638 -static struct omap2_hsmmc_info pandora_mmc3[] = {
639 - {
640 - .mmc = 3,
641 - .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
642 - .gpio_cd = -EINVAL,
643 - .gpio_wp = -EINVAL,
644 - .init_card = pandora_wl1251_init_card,
645 - },
646 - {} /* Terminator */
647 -};
648 -
649 -static void __init pandora_wl1251_init(void)
650 -{
651 - struct wl1251_platform_data pandora_wl1251_pdata;
652 - int ret;
653 -
654 - memset(&pandora_wl1251_pdata, 0, sizeof(pandora_wl1251_pdata));
655 -
656 - pandora_wl1251_pdata.power_gpio = -1;
657 -
658 - ret = gpio_request_one(PANDORA_WIFI_IRQ_GPIO, GPIOF_IN, "wl1251 irq");
659 - if (ret < 0)
660 - goto fail;
661 -
662 - pandora_wl1251_pdata.irq = gpio_to_irq(PANDORA_WIFI_IRQ_GPIO);
663 - if (pandora_wl1251_pdata.irq < 0)
664 - goto fail_irq;
665 -
666 - pandora_wl1251_pdata.use_eeprom = true;
667 - ret = wl1251_set_platform_data(&pandora_wl1251_pdata);
668 - if (ret < 0)
669 - goto fail_irq;
670 -
671 - return;
672 -
673 -fail_irq:
674 - gpio_free(PANDORA_WIFI_IRQ_GPIO);
675 -fail:
676 - pr_err("wl1251 board initialisation failed\n");
677 -}
678 -
679 static void __init omap3_pandora_legacy_init(void)
680 {
681 platform_device_register(&pandora_backlight);
682 - platform_device_register(&pandora_vwlan_device);
683 - omap_hsmmc_init(pandora_mmc3);
684 - omap_hsmmc_late_init(pandora_mmc3);
685 - pandora_wl1251_init();
686 }
687 #endif /* CONFIG_ARCH_OMAP3 */
688
689 diff --git a/arch/arm/mach-tegra/reset-handler.S b/arch/arm/mach-tegra/reset-handler.S
690 index e3070fdab80b..3fe4ae654047 100644
691 --- a/arch/arm/mach-tegra/reset-handler.S
692 +++ b/arch/arm/mach-tegra/reset-handler.S
693 @@ -56,16 +56,16 @@ ENTRY(tegra_resume)
694 cmp r6, #TEGRA20
695 beq 1f @ Yes
696 /* Clear the flow controller flags for this CPU. */
697 - cpu_to_csr_reg r1, r0
698 + cpu_to_csr_reg r3, r0
699 mov32 r2, TEGRA_FLOW_CTRL_BASE
700 - ldr r1, [r2, r1]
701 + ldr r1, [r2, r3]
702 /* Clear event & intr flag */
703 orr r1, r1, \
704 #FLOW_CTRL_CSR_INTR_FLAG | FLOW_CTRL_CSR_EVENT_FLAG
705 movw r0, #0x3FFD @ enable, cluster_switch, immed, bitmaps
706 @ & ext flags for CPU power mgnt
707 bic r1, r1, r0
708 - str r1, [r2]
709 + str r1, [r2, r3]
710 1:
711
712 mov32 r9, 0xc09
713 diff --git a/arch/arm64/boot/dts/nvidia/tegra210-p2597.dtsi b/arch/arm64/boot/dts/nvidia/tegra210-p2597.dtsi
714 index e5fc67bf46c2..a88afb6a9c0c 100644
715 --- a/arch/arm64/boot/dts/nvidia/tegra210-p2597.dtsi
716 +++ b/arch/arm64/boot/dts/nvidia/tegra210-p2597.dtsi
717 @@ -1583,7 +1583,7 @@
718 regulator-name = "VDD_HDMI_5V0";
719 regulator-min-microvolt = <5000000>;
720 regulator-max-microvolt = <5000000>;
721 - gpio = <&exp1 12 GPIO_ACTIVE_LOW>;
722 + gpio = <&exp1 12 GPIO_ACTIVE_HIGH>;
723 enable-active-high;
724 vin-supply = <&vdd_5v0_sys>;
725 };
726 diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
727 index 92bcde046b6b..f8a529c85279 100644
728 --- a/arch/mips/Kconfig
729 +++ b/arch/mips/Kconfig
730 @@ -804,6 +804,7 @@ config SIBYTE_LITTLESUR
731 select SYS_SUPPORTS_BIG_ENDIAN
732 select SYS_SUPPORTS_HIGHMEM
733 select SYS_SUPPORTS_LITTLE_ENDIAN
734 + select ZONE_DMA32 if 64BIT
735
736 config SIBYTE_SENTOSA
737 bool "Sibyte BCM91250E-Sentosa"
738 diff --git a/arch/mips/cavium-octeon/executive/cvmx-cmd-queue.c b/arch/mips/cavium-octeon/executive/cvmx-cmd-queue.c
739 index 8241fc6aa17d..3839feba68f2 100644
740 --- a/arch/mips/cavium-octeon/executive/cvmx-cmd-queue.c
741 +++ b/arch/mips/cavium-octeon/executive/cvmx-cmd-queue.c
742 @@ -266,7 +266,7 @@ int cvmx_cmd_queue_length(cvmx_cmd_queue_id_t queue_id)
743 } else {
744 union cvmx_pko_mem_debug8 debug8;
745 debug8.u64 = cvmx_read_csr(CVMX_PKO_MEM_DEBUG8);
746 - return debug8.cn58xx.doorbell;
747 + return debug8.cn50xx.doorbell;
748 }
749 case CVMX_CMD_QUEUE_ZIP:
750 case CVMX_CMD_QUEUE_DFA:
751 diff --git a/arch/mips/cavium-octeon/octeon-platform.c b/arch/mips/cavium-octeon/octeon-platform.c
752 index 1ba6bcf98570..2ecc8d1b0539 100644
753 --- a/arch/mips/cavium-octeon/octeon-platform.c
754 +++ b/arch/mips/cavium-octeon/octeon-platform.c
755 @@ -502,7 +502,7 @@ static void __init octeon_fdt_set_phy(int eth, int phy_addr)
756 if (phy_addr >= 256 && alt_phy > 0) {
757 const struct fdt_property *phy_prop;
758 struct fdt_property *alt_prop;
759 - u32 phy_handle_name;
760 + fdt32_t phy_handle_name;
761
762 /* Use the alt phy node instead.*/
763 phy_prop = fdt_get_property(initial_boot_params, eth, "phy-handle", NULL);
764 diff --git a/arch/mips/include/asm/octeon/cvmx-pko.h b/arch/mips/include/asm/octeon/cvmx-pko.h
765 index 5f47f76ed510..20eb9c46a75a 100644
766 --- a/arch/mips/include/asm/octeon/cvmx-pko.h
767 +++ b/arch/mips/include/asm/octeon/cvmx-pko.h
768 @@ -611,7 +611,7 @@ static inline void cvmx_pko_get_port_status(uint64_t port_num, uint64_t clear,
769 pko_reg_read_idx.s.index = cvmx_pko_get_base_queue(port_num);
770 cvmx_write_csr(CVMX_PKO_REG_READ_IDX, pko_reg_read_idx.u64);
771 debug8.u64 = cvmx_read_csr(CVMX_PKO_MEM_DEBUG8);
772 - status->doorbell = debug8.cn58xx.doorbell;
773 + status->doorbell = debug8.cn50xx.doorbell;
774 }
775 }
776
777 diff --git a/arch/powerpc/include/asm/sfp-machine.h b/arch/powerpc/include/asm/sfp-machine.h
778 index d89beaba26ff..8b957aabb826 100644
779 --- a/arch/powerpc/include/asm/sfp-machine.h
780 +++ b/arch/powerpc/include/asm/sfp-machine.h
781 @@ -213,30 +213,18 @@
782 * respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow
783 * (i.e. carry out) is not stored anywhere, and is lost.
784 */
785 -#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
786 +#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
787 do { \
788 if (__builtin_constant_p (bh) && (bh) == 0) \
789 - __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \
790 - : "=r" ((USItype)(sh)), \
791 - "=&r" ((USItype)(sl)) \
792 - : "%r" ((USItype)(ah)), \
793 - "%r" ((USItype)(al)), \
794 - "rI" ((USItype)(bl))); \
795 - else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \
796 - __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \
797 - : "=r" ((USItype)(sh)), \
798 - "=&r" ((USItype)(sl)) \
799 - : "%r" ((USItype)(ah)), \
800 - "%r" ((USItype)(al)), \
801 - "rI" ((USItype)(bl))); \
802 + __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2" \
803 + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
804 + else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \
805 + __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2" \
806 + : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
807 else \
808 - __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \
809 - : "=r" ((USItype)(sh)), \
810 - "=&r" ((USItype)(sl)) \
811 - : "%r" ((USItype)(ah)), \
812 - "r" ((USItype)(bh)), \
813 - "%r" ((USItype)(al)), \
814 - "rI" ((USItype)(bl))); \
815 + __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3" \
816 + : "=r" (sh), "=&r" (sl) \
817 + : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \
818 } while (0)
819
820 /* sub_ddmmss is used in op-2.h and udivmodti4.c and should be equivalent to
821 @@ -248,44 +236,24 @@
822 * and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere,
823 * and is lost.
824 */
825 -#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
826 +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
827 do { \
828 if (__builtin_constant_p (ah) && (ah) == 0) \
829 - __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \
830 - : "=r" ((USItype)(sh)), \
831 - "=&r" ((USItype)(sl)) \
832 - : "r" ((USItype)(bh)), \
833 - "rI" ((USItype)(al)), \
834 - "r" ((USItype)(bl))); \
835 - else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0) \
836 - __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \
837 - : "=r" ((USItype)(sh)), \
838 - "=&r" ((USItype)(sl)) \
839 - : "r" ((USItype)(bh)), \
840 - "rI" ((USItype)(al)), \
841 - "r" ((USItype)(bl))); \
842 + __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \
843 + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
844 + else if (__builtin_constant_p (ah) && (ah) == ~(USItype) 0) \
845 + __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \
846 + : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
847 else if (__builtin_constant_p (bh) && (bh) == 0) \
848 - __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \
849 - : "=r" ((USItype)(sh)), \
850 - "=&r" ((USItype)(sl)) \
851 - : "r" ((USItype)(ah)), \
852 - "rI" ((USItype)(al)), \
853 - "r" ((USItype)(bl))); \
854 - else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \
855 - __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \
856 - : "=r" ((USItype)(sh)), \
857 - "=&r" ((USItype)(sl)) \
858 - : "r" ((USItype)(ah)), \
859 - "rI" ((USItype)(al)), \
860 - "r" ((USItype)(bl))); \
861 + __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \
862 + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
863 + else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \
864 + __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \
865 + : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
866 else \
867 - __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \
868 - : "=r" ((USItype)(sh)), \
869 - "=&r" ((USItype)(sl)) \
870 - : "r" ((USItype)(ah)), \
871 - "r" ((USItype)(bh)), \
872 - "rI" ((USItype)(al)), \
873 - "r" ((USItype)(bl))); \
874 + __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \
875 + : "=r" (sh), "=&r" (sl) \
876 + : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \
877 } while (0)
878
879 /* asm fragments for mul and div */
880 @@ -294,13 +262,10 @@
881 * UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype
882 * word product in HIGH_PROD and LOW_PROD.
883 */
884 -#define umul_ppmm(ph, pl, m0, m1) \
885 +#define umul_ppmm(ph, pl, m0, m1) \
886 do { \
887 USItype __m0 = (m0), __m1 = (m1); \
888 - __asm__ ("mulhwu %0,%1,%2" \
889 - : "=r" ((USItype)(ph)) \
890 - : "%r" (__m0), \
891 - "r" (__m1)); \
892 + __asm__ ("mulhwu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
893 (pl) = __m0 * __m1; \
894 } while (0)
895
896 @@ -312,9 +277,10 @@
897 * significant bit of DENOMINATOR must be 1, then the pre-processor symbol
898 * UDIV_NEEDS_NORMALIZATION is defined to 1.
899 */
900 -#define udiv_qrnnd(q, r, n1, n0, d) \
901 +#define udiv_qrnnd(q, r, n1, n0, d) \
902 do { \
903 - UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m; \
904 + UWtype __d1, __d0, __q1, __q0; \
905 + UWtype __r1, __r0, __m; \
906 __d1 = __ll_highpart (d); \
907 __d0 = __ll_lowpart (d); \
908 \
909 @@ -325,7 +291,7 @@
910 if (__r1 < __m) \
911 { \
912 __q1--, __r1 += (d); \
913 - if (__r1 >= (d)) /* we didn't get carry when adding to __r1 */ \
914 + if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
915 if (__r1 < __m) \
916 __q1--, __r1 += (d); \
917 } \
918 diff --git a/arch/powerpc/include/asm/vdso_datapage.h b/arch/powerpc/include/asm/vdso_datapage.h
919 index 1afe90ade595..674c03350cd1 100644
920 --- a/arch/powerpc/include/asm/vdso_datapage.h
921 +++ b/arch/powerpc/include/asm/vdso_datapage.h
922 @@ -86,6 +86,7 @@ struct vdso_data {
923 __s32 wtom_clock_nsec;
924 struct timespec stamp_xtime; /* xtime as at tb_orig_stamp */
925 __u32 stamp_sec_fraction; /* fractional seconds of stamp_xtime */
926 + __u32 hrtimer_res; /* hrtimer resolution */
927 __u32 syscall_map_64[SYSCALL_MAP_SIZE]; /* map of syscalls */
928 __u32 syscall_map_32[SYSCALL_MAP_SIZE]; /* map of syscalls */
929 };
930 @@ -107,6 +108,7 @@ struct vdso_data {
931 __s32 wtom_clock_nsec;
932 struct timespec stamp_xtime; /* xtime as at tb_orig_stamp */
933 __u32 stamp_sec_fraction; /* fractional seconds of stamp_xtime */
934 + __u32 hrtimer_res; /* hrtimer resolution */
935 __u32 syscall_map_32[SYSCALL_MAP_SIZE]; /* map of syscalls */
936 __u32 dcache_block_size; /* L1 d-cache block size */
937 __u32 icache_block_size; /* L1 i-cache block size */
938 diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
939 index 14fbbd9035ca..dfcf28be12ba 100644
940 --- a/arch/powerpc/kernel/asm-offsets.c
941 +++ b/arch/powerpc/kernel/asm-offsets.c
942 @@ -383,6 +383,7 @@ int main(void)
943 DEFINE(WTOM_CLOCK_NSEC, offsetof(struct vdso_data, wtom_clock_nsec));
944 DEFINE(STAMP_XTIME, offsetof(struct vdso_data, stamp_xtime));
945 DEFINE(STAMP_SEC_FRAC, offsetof(struct vdso_data, stamp_sec_fraction));
946 + DEFINE(CLOCK_HRTIMER_RES, offsetof(struct vdso_data, hrtimer_res));
947 DEFINE(CFG_ICACHE_BLOCKSZ, offsetof(struct vdso_data, icache_block_size));
948 DEFINE(CFG_DCACHE_BLOCKSZ, offsetof(struct vdso_data, dcache_block_size));
949 DEFINE(CFG_ICACHE_LOGBLOCKSZ, offsetof(struct vdso_data, icache_log_block_size));
950 @@ -411,7 +412,6 @@ int main(void)
951 DEFINE(CLOCK_REALTIME, CLOCK_REALTIME);
952 DEFINE(CLOCK_MONOTONIC, CLOCK_MONOTONIC);
953 DEFINE(NSEC_PER_SEC, NSEC_PER_SEC);
954 - DEFINE(CLOCK_REALTIME_RES, MONOTONIC_RES_NSEC);
955
956 #ifdef CONFIG_BUG
957 DEFINE(BUG_ENTRY_SIZE, sizeof(struct bug_entry));
958 diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
959 index ab7b661b6da3..3c6258a1656b 100644
960 --- a/arch/powerpc/kernel/time.c
961 +++ b/arch/powerpc/kernel/time.c
962 @@ -862,6 +862,7 @@ void update_vsyscall_old(struct timespec *wall_time, struct timespec *wtm,
963 vdso_data->wtom_clock_nsec = wtm->tv_nsec;
964 vdso_data->stamp_xtime = *wall_time;
965 vdso_data->stamp_sec_fraction = frac_sec;
966 + vdso_data->hrtimer_res = hrtimer_resolution;
967 smp_wmb();
968 ++(vdso_data->tb_update_count);
969 }
970 diff --git a/arch/powerpc/kernel/vdso32/gettimeofday.S b/arch/powerpc/kernel/vdso32/gettimeofday.S
971 index 7b341b86216c..9b24466570c8 100644
972 --- a/arch/powerpc/kernel/vdso32/gettimeofday.S
973 +++ b/arch/powerpc/kernel/vdso32/gettimeofday.S
974 @@ -160,12 +160,15 @@ V_FUNCTION_BEGIN(__kernel_clock_getres)
975 cror cr0*4+eq,cr0*4+eq,cr1*4+eq
976 bne cr0,99f
977
978 + mflr r12
979 + .cfi_register lr,r12
980 + bl __get_datapage@local /* get data page */
981 + lwz r5, CLOCK_HRTIMER_RES(r3)
982 + mtlr r12
983 li r3,0
984 cmpli cr0,r4,0
985 crclr cr0*4+so
986 beqlr
987 - lis r5,CLOCK_REALTIME_RES@h
988 - ori r5,r5,CLOCK_REALTIME_RES@l
989 stw r3,TSPC32_TV_SEC(r4)
990 stw r5,TSPC32_TV_NSEC(r4)
991 blr
992 diff --git a/arch/powerpc/kernel/vdso64/cacheflush.S b/arch/powerpc/kernel/vdso64/cacheflush.S
993 index 69c5af2b3c96..228a4a2383d6 100644
994 --- a/arch/powerpc/kernel/vdso64/cacheflush.S
995 +++ b/arch/powerpc/kernel/vdso64/cacheflush.S
996 @@ -39,7 +39,7 @@ V_FUNCTION_BEGIN(__kernel_sync_dicache)
997 subf r8,r6,r4 /* compute length */
998 add r8,r8,r5 /* ensure we get enough */
999 lwz r9,CFG_DCACHE_LOGBLOCKSZ(r10)
1000 - srw. r8,r8,r9 /* compute line count */
1001 + srd. r8,r8,r9 /* compute line count */
1002 crclr cr0*4+so
1003 beqlr /* nothing to do? */
1004 mtctr r8
1005 @@ -56,7 +56,7 @@ V_FUNCTION_BEGIN(__kernel_sync_dicache)
1006 subf r8,r6,r4 /* compute length */
1007 add r8,r8,r5
1008 lwz r9,CFG_ICACHE_LOGBLOCKSZ(r10)
1009 - srw. r8,r8,r9 /* compute line count */
1010 + srd. r8,r8,r9 /* compute line count */
1011 crclr cr0*4+so
1012 beqlr /* nothing to do? */
1013 mtctr r8
1014 diff --git a/arch/powerpc/kernel/vdso64/gettimeofday.S b/arch/powerpc/kernel/vdso64/gettimeofday.S
1015 index 09b2a49f6dd5..c973378e1f2b 100644
1016 --- a/arch/powerpc/kernel/vdso64/gettimeofday.S
1017 +++ b/arch/powerpc/kernel/vdso64/gettimeofday.S
1018 @@ -145,12 +145,15 @@ V_FUNCTION_BEGIN(__kernel_clock_getres)
1019 cror cr0*4+eq,cr0*4+eq,cr1*4+eq
1020 bne cr0,99f
1021
1022 + mflr r12
1023 + .cfi_register lr,r12
1024 + bl V_LOCAL_FUNC(__get_datapage)
1025 + lwz r5, CLOCK_HRTIMER_RES(r3)
1026 + mtlr r12
1027 li r3,0
1028 cmpldi cr0,r4,0
1029 crclr cr0*4+so
1030 beqlr
1031 - lis r5,CLOCK_REALTIME_RES@h
1032 - ori r5,r5,CLOCK_REALTIME_RES@l
1033 std r3,TSPC64_TV_SEC(r4)
1034 std r5,TSPC64_TV_NSEC(r4)
1035 blr
1036 diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
1037 index e348bee411e3..d3b2c5b25c9c 100644
1038 --- a/arch/x86/kernel/cpu/mcheck/mce.c
1039 +++ b/arch/x86/kernel/cpu/mcheck/mce.c
1040 @@ -1648,36 +1648,6 @@ static int __mcheck_cpu_apply_quirks(struct cpuinfo_x86 *c)
1041 if (c->x86 == 0x15 && c->x86_model <= 0xf)
1042 mce_flags.overflow_recov = 1;
1043
1044 - /*
1045 - * Turn off MC4_MISC thresholding banks on those models since
1046 - * they're not supported there.
1047 - */
1048 - if (c->x86 == 0x15 &&
1049 - (c->x86_model >= 0x10 && c->x86_model <= 0x1f)) {
1050 - int i;
1051 - u64 hwcr;
1052 - bool need_toggle;
1053 - u32 msrs[] = {
1054 - 0x00000413, /* MC4_MISC0 */
1055 - 0xc0000408, /* MC4_MISC1 */
1056 - };
1057 -
1058 - rdmsrl(MSR_K7_HWCR, hwcr);
1059 -
1060 - /* McStatusWrEn has to be set */
1061 - need_toggle = !(hwcr & BIT(18));
1062 -
1063 - if (need_toggle)
1064 - wrmsrl(MSR_K7_HWCR, hwcr | BIT(18));
1065 -
1066 - /* Clear CntP bit safely */
1067 - for (i = 0; i < ARRAY_SIZE(msrs); i++)
1068 - msr_clear_bit(msrs[i], 62);
1069 -
1070 - /* restore old settings */
1071 - if (need_toggle)
1072 - wrmsrl(MSR_K7_HWCR, hwcr);
1073 - }
1074 }
1075
1076 if (c->x86_vendor == X86_VENDOR_INTEL) {
1077 diff --git a/arch/x86/kernel/cpu/mcheck/mce_amd.c b/arch/x86/kernel/cpu/mcheck/mce_amd.c
1078 index 39526e1e3132..2a473cda3977 100644
1079 --- a/arch/x86/kernel/cpu/mcheck/mce_amd.c
1080 +++ b/arch/x86/kernel/cpu/mcheck/mce_amd.c
1081 @@ -499,6 +499,40 @@ out:
1082 return offset;
1083 }
1084
1085 +/*
1086 + * Turn off MC4_MISC thresholding banks on all family 0x15 models since
1087 + * they're not supported there.
1088 + */
1089 +void disable_err_thresholding(struct cpuinfo_x86 *c)
1090 +{
1091 + int i;
1092 + u64 hwcr;
1093 + bool need_toggle;
1094 + u32 msrs[] = {
1095 + 0x00000413, /* MC4_MISC0 */
1096 + 0xc0000408, /* MC4_MISC1 */
1097 + };
1098 +
1099 + if (c->x86 != 0x15)
1100 + return;
1101 +
1102 + rdmsrl(MSR_K7_HWCR, hwcr);
1103 +
1104 + /* McStatusWrEn has to be set */
1105 + need_toggle = !(hwcr & BIT(18));
1106 +
1107 + if (need_toggle)
1108 + wrmsrl(MSR_K7_HWCR, hwcr | BIT(18));
1109 +
1110 + /* Clear CntP bit safely */
1111 + for (i = 0; i < ARRAY_SIZE(msrs); i++)
1112 + msr_clear_bit(msrs[i], 62);
1113 +
1114 + /* restore old settings */
1115 + if (need_toggle)
1116 + wrmsrl(MSR_K7_HWCR, hwcr);
1117 +}
1118 +
1119 /* cpu init entry point, called from mce.c with preempt off */
1120 void mce_amd_feature_init(struct cpuinfo_x86 *c)
1121 {
1122 @@ -506,6 +540,8 @@ void mce_amd_feature_init(struct cpuinfo_x86 *c)
1123 unsigned int bank, block, cpu = smp_processor_id();
1124 int offset = -1;
1125
1126 + disable_err_thresholding(c);
1127 +
1128 for (bank = 0; bank < mca_cfg.banks; ++bank) {
1129 if (mce_flags.smca)
1130 get_smca_bank_info(bank);
1131 diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
1132 index 18c5b4920e92..242ad06fbe1a 100644
1133 --- a/arch/x86/kvm/cpuid.c
1134 +++ b/arch/x86/kvm/cpuid.c
1135 @@ -389,7 +389,7 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
1136
1137 r = -E2BIG;
1138
1139 - if (*nent >= maxnent)
1140 + if (WARN_ON(*nent >= maxnent))
1141 goto out;
1142
1143 do_cpuid_1_ent(entry, function, index);
1144 @@ -691,6 +691,9 @@ out:
1145 static int do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 func,
1146 u32 idx, int *nent, int maxnent, unsigned int type)
1147 {
1148 + if (*nent >= maxnent)
1149 + return -E2BIG;
1150 +
1151 if (type == KVM_GET_EMULATED_CPUID)
1152 return __do_cpuid_ent_emulated(entry, func, idx, nent, maxnent);
1153
1154 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
1155 index 06cd710e1d45..c9c533370e88 100644
1156 --- a/arch/x86/kvm/x86.c
1157 +++ b/arch/x86/kvm/x86.c
1158 @@ -273,13 +273,14 @@ int kvm_set_shared_msr(unsigned slot, u64 value, u64 mask)
1159 struct kvm_shared_msrs *smsr = per_cpu_ptr(shared_msrs, cpu);
1160 int err;
1161
1162 - if (((value ^ smsr->values[slot].curr) & mask) == 0)
1163 + value = (value & mask) | (smsr->values[slot].host & ~mask);
1164 + if (value == smsr->values[slot].curr)
1165 return 0;
1166 - smsr->values[slot].curr = value;
1167 err = wrmsrl_safe(shared_msrs_global.msrs[slot], value);
1168 if (err)
1169 return 1;
1170
1171 + smsr->values[slot].curr = value;
1172 if (!smsr->registered) {
1173 smsr->urn.on_user_return = kvm_on_user_return;
1174 user_return_notifier_register(&smsr->urn);
1175 @@ -1074,10 +1075,15 @@ u64 kvm_get_arch_capabilities(void)
1176 * If TSX is disabled on the system, guests are also mitigated against
1177 * TAA and clear CPU buffer mitigation is not required for guests.
1178 */
1179 - if (boot_cpu_has_bug(X86_BUG_TAA) && boot_cpu_has(X86_FEATURE_RTM) &&
1180 - (data & ARCH_CAP_TSX_CTRL_MSR))
1181 + if (!boot_cpu_has(X86_FEATURE_RTM))
1182 + data &= ~ARCH_CAP_TAA_NO;
1183 + else if (!boot_cpu_has_bug(X86_BUG_TAA))
1184 + data |= ARCH_CAP_TAA_NO;
1185 + else if (data & ARCH_CAP_TSX_CTRL_MSR)
1186 data &= ~ARCH_CAP_MDS_NO;
1187
1188 + /* KVM does not emulate MSR_IA32_TSX_CTRL. */
1189 + data &= ~ARCH_CAP_TSX_CTRL_MSR;
1190 return data;
1191 }
1192
1193 diff --git a/arch/x86/pci/fixup.c b/arch/x86/pci/fixup.c
1194 index 20fa7c84109d..62950ef7f84e 100644
1195 --- a/arch/x86/pci/fixup.c
1196 +++ b/arch/x86/pci/fixup.c
1197 @@ -572,6 +572,17 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6f60, pci_invalid_bar);
1198 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6fa0, pci_invalid_bar);
1199 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x6fc0, pci_invalid_bar);
1200
1201 +/*
1202 + * Device [1022:7914]
1203 + * When in D0, PME# doesn't get asserted when plugging USB 2.0 device.
1204 + */
1205 +static void pci_fixup_amd_fch_xhci_pme(struct pci_dev *dev)
1206 +{
1207 + dev_info(&dev->dev, "PME# does not work under D0, disabling it\n");
1208 + dev->pme_support &= ~(PCI_PM_CAP_PME_D0 >> PCI_PM_CAP_PME_SHIFT);
1209 +}
1210 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x7914, pci_fixup_amd_fch_xhci_pme);
1211 +
1212 /*
1213 * Apple MacBook Pro: Avoid [mem 0x7fa00000-0x7fbfffff]
1214 *
1215 diff --git a/arch/xtensa/mm/tlb.c b/arch/xtensa/mm/tlb.c
1216 index 35c822286bbe..3ce5ccdb054d 100644
1217 --- a/arch/xtensa/mm/tlb.c
1218 +++ b/arch/xtensa/mm/tlb.c
1219 @@ -218,6 +218,8 @@ static int check_tlb_entry(unsigned w, unsigned e, bool dtlb)
1220 unsigned tlbidx = w | (e << PAGE_SHIFT);
1221 unsigned r0 = dtlb ?
1222 read_dtlb_virtual(tlbidx) : read_itlb_virtual(tlbidx);
1223 + unsigned r1 = dtlb ?
1224 + read_dtlb_translation(tlbidx) : read_itlb_translation(tlbidx);
1225 unsigned vpn = (r0 & PAGE_MASK) | (e << PAGE_SHIFT);
1226 unsigned pte = get_pte_for_vaddr(vpn);
1227 unsigned mm_asid = (get_rasid_register() >> 8) & ASID_MASK;
1228 @@ -233,8 +235,6 @@ static int check_tlb_entry(unsigned w, unsigned e, bool dtlb)
1229 }
1230
1231 if (tlb_asid == mm_asid) {
1232 - unsigned r1 = dtlb ? read_dtlb_translation(tlbidx) :
1233 - read_itlb_translation(tlbidx);
1234 if ((pte ^ r1) & PAGE_MASK) {
1235 pr_err("%cTLB: way: %u, entry: %u, mapping: %08x->%08x, PTE: %08x\n",
1236 dtlb ? 'D' : 'I', w, e, r0, r1, pte);
1237 diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c
1238 index 8c0894e0713b..5b64d9d7d147 100644
1239 --- a/block/blk-mq-sysfs.c
1240 +++ b/block/blk-mq-sysfs.c
1241 @@ -243,20 +243,25 @@ static ssize_t blk_mq_hw_sysfs_active_show(struct blk_mq_hw_ctx *hctx, char *pag
1242
1243 static ssize_t blk_mq_hw_sysfs_cpus_show(struct blk_mq_hw_ctx *hctx, char *page)
1244 {
1245 + const size_t size = PAGE_SIZE - 1;
1246 unsigned int i, first = 1;
1247 - ssize_t ret = 0;
1248 + int ret = 0, pos = 0;
1249
1250 for_each_cpu(i, hctx->cpumask) {
1251 if (first)
1252 - ret += sprintf(ret + page, "%u", i);
1253 + ret = snprintf(pos + page, size - pos, "%u", i);
1254 else
1255 - ret += sprintf(ret + page, ", %u", i);
1256 + ret = snprintf(pos + page, size - pos, ", %u", i);
1257 +
1258 + if (ret >= size - pos)
1259 + break;
1260
1261 first = 0;
1262 + pos += ret;
1263 }
1264
1265 - ret += sprintf(ret + page, "\n");
1266 - return ret;
1267 + ret = snprintf(pos + page, size + 1 - pos, "\n");
1268 + return pos + ret;
1269 }
1270
1271 static struct blk_mq_ctx_sysfs_entry blk_mq_sysfs_dispatched = {
1272 diff --git a/crypto/crypto_user.c b/crypto/crypto_user.c
1273 index 60cf7d163731..810be7a9e3c4 100644
1274 --- a/crypto/crypto_user.c
1275 +++ b/crypto/crypto_user.c
1276 @@ -269,8 +269,10 @@ static int crypto_report(struct sk_buff *in_skb, struct nlmsghdr *in_nlh,
1277 drop_alg:
1278 crypto_mod_put(alg);
1279
1280 - if (err)
1281 + if (err) {
1282 + kfree_skb(skb);
1283 return err;
1284 + }
1285
1286 return nlmsg_unicast(crypto_nlsk, skb, NETLINK_CB(in_skb).portid);
1287 }
1288 diff --git a/crypto/ecc.c b/crypto/ecc.c
1289 index 414c78a9c214..7cf6c3e4825c 100644
1290 --- a/crypto/ecc.c
1291 +++ b/crypto/ecc.c
1292 @@ -897,10 +897,11 @@ static void ecc_point_mult(struct ecc_point *result,
1293 static inline void ecc_swap_digits(const u64 *in, u64 *out,
1294 unsigned int ndigits)
1295 {
1296 + const __be64 *src = (__force __be64 *)in;
1297 int i;
1298
1299 for (i = 0; i < ndigits; i++)
1300 - out[i] = __swab64(in[ndigits - 1 - i]);
1301 + out[i] = be64_to_cpu(src[ndigits - 1 - i]);
1302 }
1303
1304 int ecc_is_key_valid(unsigned int curve_id, unsigned int ndigits,
1305 diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
1306 index 0a3ca20f99af..6b2c9d68d810 100644
1307 --- a/drivers/acpi/bus.c
1308 +++ b/drivers/acpi/bus.c
1309 @@ -158,7 +158,7 @@ int acpi_bus_get_private_data(acpi_handle handle, void **data)
1310 {
1311 acpi_status status;
1312
1313 - if (!*data)
1314 + if (!data)
1315 return -EINVAL;
1316
1317 status = acpi_get_data(handle, acpi_bus_private_data_handler, data);
1318 diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
1319 index 993fd31394c8..c76e4527620c 100644
1320 --- a/drivers/acpi/device_pm.c
1321 +++ b/drivers/acpi/device_pm.c
1322 @@ -1096,9 +1096,19 @@ static void acpi_dev_pm_detach(struct device *dev, bool power_off)
1323 */
1324 int acpi_dev_pm_attach(struct device *dev, bool power_on)
1325 {
1326 + /*
1327 + * Skip devices whose ACPI companions match the device IDs below,
1328 + * because they require special power management handling incompatible
1329 + * with the generic ACPI PM domain.
1330 + */
1331 + static const struct acpi_device_id special_pm_ids[] = {
1332 + {"PNP0C0B", }, /* Generic ACPI fan */
1333 + {"INT3404", }, /* Fan */
1334 + {}
1335 + };
1336 struct acpi_device *adev = ACPI_COMPANION(dev);
1337
1338 - if (!adev)
1339 + if (!adev || !acpi_match_device_ids(adev, special_pm_ids))
1340 return -ENODEV;
1341
1342 if (dev->pm_domain)
1343 diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
1344 index b9fade7a3bcf..c6c7e4287c4d 100644
1345 --- a/drivers/acpi/osl.c
1346 +++ b/drivers/acpi/osl.c
1347 @@ -375,19 +375,21 @@ void *__ref acpi_os_map_memory(acpi_physical_address phys, acpi_size size)
1348 }
1349 EXPORT_SYMBOL_GPL(acpi_os_map_memory);
1350
1351 -static void acpi_os_drop_map_ref(struct acpi_ioremap *map)
1352 +/* Must be called with mutex_lock(&acpi_ioremap_lock) */
1353 +static unsigned long acpi_os_drop_map_ref(struct acpi_ioremap *map)
1354 {
1355 - if (!--map->refcount)
1356 + unsigned long refcount = --map->refcount;
1357 +
1358 + if (!refcount)
1359 list_del_rcu(&map->list);
1360 + return refcount;
1361 }
1362
1363 static void acpi_os_map_cleanup(struct acpi_ioremap *map)
1364 {
1365 - if (!map->refcount) {
1366 - synchronize_rcu_expedited();
1367 - acpi_unmap(map->phys, map->virt);
1368 - kfree(map);
1369 - }
1370 + synchronize_rcu_expedited();
1371 + acpi_unmap(map->phys, map->virt);
1372 + kfree(map);
1373 }
1374
1375 /**
1376 @@ -407,6 +409,7 @@ static void acpi_os_map_cleanup(struct acpi_ioremap *map)
1377 void __ref acpi_os_unmap_iomem(void __iomem *virt, acpi_size size)
1378 {
1379 struct acpi_ioremap *map;
1380 + unsigned long refcount;
1381
1382 if (!acpi_gbl_permanent_mmap) {
1383 __acpi_unmap_table(virt, size);
1384 @@ -420,10 +423,11 @@ void __ref acpi_os_unmap_iomem(void __iomem *virt, acpi_size size)
1385 WARN(true, PREFIX "%s: bad address %p\n", __func__, virt);
1386 return;
1387 }
1388 - acpi_os_drop_map_ref(map);
1389 + refcount = acpi_os_drop_map_ref(map);
1390 mutex_unlock(&acpi_ioremap_lock);
1391
1392 - acpi_os_map_cleanup(map);
1393 + if (!refcount)
1394 + acpi_os_map_cleanup(map);
1395 }
1396 EXPORT_SYMBOL_GPL(acpi_os_unmap_iomem);
1397
1398 @@ -464,6 +468,7 @@ void acpi_os_unmap_generic_address(struct acpi_generic_address *gas)
1399 {
1400 u64 addr;
1401 struct acpi_ioremap *map;
1402 + unsigned long refcount;
1403
1404 if (gas->space_id != ACPI_ADR_SPACE_SYSTEM_MEMORY)
1405 return;
1406 @@ -479,10 +484,11 @@ void acpi_os_unmap_generic_address(struct acpi_generic_address *gas)
1407 mutex_unlock(&acpi_ioremap_lock);
1408 return;
1409 }
1410 - acpi_os_drop_map_ref(map);
1411 + refcount = acpi_os_drop_map_ref(map);
1412 mutex_unlock(&acpi_ioremap_lock);
1413
1414 - acpi_os_map_cleanup(map);
1415 + if (!refcount)
1416 + acpi_os_map_cleanup(map);
1417 }
1418 EXPORT_SYMBOL(acpi_os_unmap_generic_address);
1419
1420 diff --git a/drivers/block/rsxx/core.c b/drivers/block/rsxx/core.c
1421 index 34997df132e2..6beafaa335c7 100644
1422 --- a/drivers/block/rsxx/core.c
1423 +++ b/drivers/block/rsxx/core.c
1424 @@ -1025,8 +1025,10 @@ static void rsxx_pci_remove(struct pci_dev *dev)
1425
1426 cancel_work_sync(&card->event_work);
1427
1428 + destroy_workqueue(card->event_wq);
1429 rsxx_destroy_dev(card);
1430 rsxx_dma_destroy(card);
1431 + destroy_workqueue(card->creg_ctrl.creg_wq);
1432
1433 spin_lock_irqsave(&card->irq_lock, flags);
1434 rsxx_disable_ier_and_isr(card, CR_INTR_ALL);
1435 diff --git a/drivers/char/ppdev.c b/drivers/char/ppdev.c
1436 index 336d02a488cc..3648727dfe83 100644
1437 --- a/drivers/char/ppdev.c
1438 +++ b/drivers/char/ppdev.c
1439 @@ -624,20 +624,27 @@ static int pp_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1440 if (copy_from_user(time32, argp, sizeof(time32)))
1441 return -EFAULT;
1442
1443 + if ((time32[0] < 0) || (time32[1] < 0))
1444 + return -EINVAL;
1445 +
1446 return pp_set_timeout(pp->pdev, time32[0], time32[1]);
1447
1448 case PPSETTIME64:
1449 if (copy_from_user(time64, argp, sizeof(time64)))
1450 return -EFAULT;
1451
1452 + if ((time64[0] < 0) || (time64[1] < 0))
1453 + return -EINVAL;
1454 +
1455 + if (IS_ENABLED(CONFIG_SPARC64) && !in_compat_syscall())
1456 + time64[1] >>= 32;
1457 +
1458 return pp_set_timeout(pp->pdev, time64[0], time64[1]);
1459
1460 case PPGETTIME32:
1461 jiffies_to_timespec64(pp->pdev->timeout, &ts);
1462 time32[0] = ts.tv_sec;
1463 time32[1] = ts.tv_nsec / NSEC_PER_USEC;
1464 - if ((time32[0] < 0) || (time32[1] < 0))
1465 - return -EINVAL;
1466
1467 if (copy_to_user(argp, time32, sizeof(time32)))
1468 return -EFAULT;
1469 @@ -648,8 +655,9 @@ static int pp_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1470 jiffies_to_timespec64(pp->pdev->timeout, &ts);
1471 time64[0] = ts.tv_sec;
1472 time64[1] = ts.tv_nsec / NSEC_PER_USEC;
1473 - if ((time64[0] < 0) || (time64[1] < 0))
1474 - return -EINVAL;
1475 +
1476 + if (IS_ENABLED(CONFIG_SPARC64) && !in_compat_syscall())
1477 + time64[1] <<= 32;
1478
1479 if (copy_to_user(argp, time64, sizeof(time64)))
1480 return -EFAULT;
1481 diff --git a/drivers/clk/rockchip/clk-rk3188.c b/drivers/clk/rockchip/clk-rk3188.c
1482 index 523378d1396e..d62031eedbe6 100644
1483 --- a/drivers/clk/rockchip/clk-rk3188.c
1484 +++ b/drivers/clk/rockchip/clk-rk3188.c
1485 @@ -361,8 +361,8 @@ static struct rockchip_clk_branch common_clk_branches[] __initdata = {
1486 RK2928_CLKGATE_CON(2), 5, GFLAGS),
1487 MUX(SCLK_MAC, "sclk_macref", mux_sclk_macref_p, CLK_SET_RATE_PARENT,
1488 RK2928_CLKSEL_CON(21), 4, 1, MFLAGS),
1489 - GATE(0, "sclk_mac_lbtest", "sclk_macref",
1490 - RK2928_CLKGATE_CON(2), 12, 0, GFLAGS),
1491 + GATE(0, "sclk_mac_lbtest", "sclk_macref", 0,
1492 + RK2928_CLKGATE_CON(2), 12, GFLAGS),
1493
1494 COMPOSITE(0, "hsadc_src", mux_pll_src_gpll_cpll_p, 0,
1495 RK2928_CLKSEL_CON(22), 0, 1, MFLAGS, 8, 8, DFLAGS,
1496 @@ -390,8 +390,8 @@ static struct rockchip_clk_branch common_clk_branches[] __initdata = {
1497 * Clock-Architecture Diagram 4
1498 */
1499
1500 - GATE(SCLK_SMC, "sclk_smc", "hclk_peri",
1501 - RK2928_CLKGATE_CON(2), 4, 0, GFLAGS),
1502 + GATE(SCLK_SMC, "sclk_smc", "hclk_peri", 0,
1503 + RK2928_CLKGATE_CON(2), 4, GFLAGS),
1504
1505 COMPOSITE_NOMUX(SCLK_SPI0, "sclk_spi0", "pclk_peri", 0,
1506 RK2928_CLKSEL_CON(25), 0, 7, DFLAGS,
1507 diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-h3.c b/drivers/clk/sunxi-ng/ccu-sun8i-h3.c
1508 index a26c8a19fe93..9dd6daaa1336 100644
1509 --- a/drivers/clk/sunxi-ng/ccu-sun8i-h3.c
1510 +++ b/drivers/clk/sunxi-ng/ccu-sun8i-h3.c
1511 @@ -458,7 +458,7 @@ static const char * const csi_sclk_parents[] = { "pll-periph0", "pll-periph1" };
1512 static SUNXI_CCU_M_WITH_MUX_GATE(csi_sclk_clk, "csi-sclk", csi_sclk_parents,
1513 0x134, 16, 4, 24, 3, BIT(31), 0);
1514
1515 -static const char * const csi_mclk_parents[] = { "osc24M", "pll-video", "pll-periph0" };
1516 +static const char * const csi_mclk_parents[] = { "osc24M", "pll-video", "pll-periph1" };
1517 static SUNXI_CCU_M_WITH_MUX_GATE(csi_mclk_clk, "csi-mclk", csi_mclk_parents,
1518 0x134, 0, 5, 8, 3, BIT(15), 0);
1519
1520 diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c
1521 index ab264d393233..3780e1aa6807 100644
1522 --- a/drivers/cpuidle/driver.c
1523 +++ b/drivers/cpuidle/driver.c
1524 @@ -61,24 +61,23 @@ static inline void __cpuidle_unset_driver(struct cpuidle_driver *drv)
1525 * __cpuidle_set_driver - set per CPU driver variables for the given driver.
1526 * @drv: a valid pointer to a struct cpuidle_driver
1527 *
1528 - * For each CPU in the driver's cpumask, unset the registered driver per CPU
1529 - * to @drv.
1530 - *
1531 - * Returns 0 on success, -EBUSY if the CPUs have driver(s) already.
1532 + * Returns 0 on success, -EBUSY if any CPU in the cpumask have a driver
1533 + * different from drv already.
1534 */
1535 static inline int __cpuidle_set_driver(struct cpuidle_driver *drv)
1536 {
1537 int cpu;
1538
1539 for_each_cpu(cpu, drv->cpumask) {
1540 + struct cpuidle_driver *old_drv;
1541
1542 - if (__cpuidle_get_cpu_driver(cpu)) {
1543 - __cpuidle_unset_driver(drv);
1544 + old_drv = __cpuidle_get_cpu_driver(cpu);
1545 + if (old_drv && old_drv != drv)
1546 return -EBUSY;
1547 - }
1548 + }
1549
1550 + for_each_cpu(cpu, drv->cpumask)
1551 per_cpu(cpuidle_drivers, cpu) = drv;
1552 - }
1553
1554 return 0;
1555 }
1556 diff --git a/drivers/crypto/amcc/crypto4xx_core.c b/drivers/crypto/amcc/crypto4xx_core.c
1557 index 7d066fa9f2ad..e5e83c6de536 100644
1558 --- a/drivers/crypto/amcc/crypto4xx_core.c
1559 +++ b/drivers/crypto/amcc/crypto4xx_core.c
1560 @@ -400,12 +400,8 @@ static u32 crypto4xx_build_sdr(struct crypto4xx_device *dev)
1561 dma_alloc_coherent(dev->core_dev->device,
1562 dev->scatter_buffer_size * PPC4XX_NUM_SD,
1563 &dev->scatter_buffer_pa, GFP_ATOMIC);
1564 - if (!dev->scatter_buffer_va) {
1565 - dma_free_coherent(dev->core_dev->device,
1566 - sizeof(struct ce_sd) * PPC4XX_NUM_SD,
1567 - dev->sdr, dev->sdr_pa);
1568 + if (!dev->scatter_buffer_va)
1569 return -ENOMEM;
1570 - }
1571
1572 sd_array = dev->sdr;
1573
1574 diff --git a/drivers/crypto/ccp/ccp-dmaengine.c b/drivers/crypto/ccp/ccp-dmaengine.c
1575 index 8d0eeb46d4a2..c4581510c3a1 100644
1576 --- a/drivers/crypto/ccp/ccp-dmaengine.c
1577 +++ b/drivers/crypto/ccp/ccp-dmaengine.c
1578 @@ -309,6 +309,7 @@ static struct ccp_dma_desc *ccp_alloc_dma_desc(struct ccp_dma_chan *chan,
1579 desc->tx_desc.flags = flags;
1580 desc->tx_desc.tx_submit = ccp_tx_submit;
1581 desc->ccp = chan->ccp;
1582 + INIT_LIST_HEAD(&desc->entry);
1583 INIT_LIST_HEAD(&desc->pending);
1584 INIT_LIST_HEAD(&desc->active);
1585 desc->status = DMA_IN_PROGRESS;
1586 diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
1587 index db70cee71caa..df62e38de5f5 100644
1588 --- a/drivers/devfreq/devfreq.c
1589 +++ b/drivers/devfreq/devfreq.c
1590 @@ -135,6 +135,7 @@ int devfreq_update_status(struct devfreq *devfreq, unsigned long freq)
1591 int lev, prev_lev, ret = 0;
1592 unsigned long cur_time;
1593
1594 + lockdep_assert_held(&devfreq->lock);
1595 cur_time = jiffies;
1596
1597 /* Immediately exit if previous_freq is not initialized yet. */
1598 @@ -1170,12 +1171,17 @@ static ssize_t trans_stat_show(struct device *dev,
1599 int i, j;
1600 unsigned int max_state = devfreq->profile->max_state;
1601
1602 - if (!devfreq->stop_polling &&
1603 - devfreq_update_status(devfreq, devfreq->previous_freq))
1604 - return 0;
1605 if (max_state == 0)
1606 return sprintf(buf, "Not Supported.\n");
1607
1608 + mutex_lock(&devfreq->lock);
1609 + if (!devfreq->stop_polling &&
1610 + devfreq_update_status(devfreq, devfreq->previous_freq)) {
1611 + mutex_unlock(&devfreq->lock);
1612 + return 0;
1613 + }
1614 + mutex_unlock(&devfreq->lock);
1615 +
1616 len = sprintf(buf, " From : To\n");
1617 len += sprintf(buf + len, " :");
1618 for (i = 0; i < max_state; i++)
1619 diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c
1620 index f0c374d6ab40..05d66d4fc31d 100644
1621 --- a/drivers/dma-buf/sync_file.c
1622 +++ b/drivers/dma-buf/sync_file.c
1623 @@ -204,7 +204,7 @@ static struct sync_file *sync_file_merge(const char *name, struct sync_file *a,
1624 a_fences = get_fences(a, &a_num_fences);
1625 b_fences = get_fences(b, &b_num_fences);
1626 if (a_num_fences > INT_MAX - b_num_fences)
1627 - return NULL;
1628 + goto err;
1629
1630 num_fences = a_num_fences + b_num_fences;
1631
1632 diff --git a/drivers/dma/coh901318.c b/drivers/dma/coh901318.c
1633 index 74794c9859f6..6d7d2d54eacf 100644
1634 --- a/drivers/dma/coh901318.c
1635 +++ b/drivers/dma/coh901318.c
1636 @@ -1797,13 +1797,10 @@ static struct dma_chan *coh901318_xlate(struct of_phandle_args *dma_spec,
1637 static int coh901318_config(struct coh901318_chan *cohc,
1638 struct coh901318_params *param)
1639 {
1640 - unsigned long flags;
1641 const struct coh901318_params *p;
1642 int channel = cohc->id;
1643 void __iomem *virtbase = cohc->base->virtbase;
1644
1645 - spin_lock_irqsave(&cohc->lock, flags);
1646 -
1647 if (param)
1648 p = param;
1649 else
1650 @@ -1823,8 +1820,6 @@ static int coh901318_config(struct coh901318_chan *cohc,
1651 coh901318_set_conf(cohc, p->config);
1652 coh901318_set_ctrl(cohc, p->ctrl_lli_last);
1653
1654 - spin_unlock_irqrestore(&cohc->lock, flags);
1655 -
1656 return 0;
1657 }
1658
1659 diff --git a/drivers/extcon/extcon-max8997.c b/drivers/extcon/extcon-max8997.c
1660 index 4a0612fb9c07..b9b48d45a6dc 100644
1661 --- a/drivers/extcon/extcon-max8997.c
1662 +++ b/drivers/extcon/extcon-max8997.c
1663 @@ -321,12 +321,10 @@ static int max8997_muic_handle_usb(struct max8997_muic_info *info,
1664 {
1665 int ret = 0;
1666
1667 - if (usb_type == MAX8997_USB_HOST) {
1668 - ret = max8997_muic_set_path(info, info->path_usb, attached);
1669 - if (ret < 0) {
1670 - dev_err(info->dev, "failed to update muic register\n");
1671 - return ret;
1672 - }
1673 + ret = max8997_muic_set_path(info, info->path_usb, attached);
1674 + if (ret < 0) {
1675 + dev_err(info->dev, "failed to update muic register\n");
1676 + return ret;
1677 }
1678
1679 switch (usb_type) {
1680 diff --git a/drivers/firmware/qcom_scm-64.c b/drivers/firmware/qcom_scm-64.c
1681 index 1e2e5198db53..7c31d27649fe 100644
1682 --- a/drivers/firmware/qcom_scm-64.c
1683 +++ b/drivers/firmware/qcom_scm-64.c
1684 @@ -158,7 +158,7 @@ static int qcom_scm_call(struct device *dev, u32 svc_id, u32 cmd_id,
1685 kfree(args_virt);
1686 }
1687
1688 - if (res->a0 < 0)
1689 + if ((long)res->a0 < 0)
1690 return qcom_scm_remap_error(res->a0);
1691
1692 return 0;
1693 diff --git a/drivers/gpu/drm/i810/i810_dma.c b/drivers/gpu/drm/i810/i810_dma.c
1694 index d91856779beb..70de29f4e2b4 100644
1695 --- a/drivers/gpu/drm/i810/i810_dma.c
1696 +++ b/drivers/gpu/drm/i810/i810_dma.c
1697 @@ -723,7 +723,7 @@ static void i810_dma_dispatch_vertex(struct drm_device *dev,
1698 if (nbox > I810_NR_SAREA_CLIPRECTS)
1699 nbox = I810_NR_SAREA_CLIPRECTS;
1700
1701 - if (used > 4 * 1024)
1702 + if (used < 0 || used > 4 * 1024)
1703 used = 0;
1704
1705 if (sarea_priv->dirty)
1706 @@ -1043,7 +1043,7 @@ static void i810_dma_dispatch_mc(struct drm_device *dev, struct drm_buf *buf, in
1707 if (u != I810_BUF_CLIENT)
1708 DRM_DEBUG("MC found buffer that isn't mine!\n");
1709
1710 - if (used > 4 * 1024)
1711 + if (used < 0 || used > 4 * 1024)
1712 used = 0;
1713
1714 sarea_priv->dirty = 0x7f;
1715 diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
1716 index f5e84f4b58e6..c99a97608798 100644
1717 --- a/drivers/gpu/drm/radeon/r100.c
1718 +++ b/drivers/gpu/drm/radeon/r100.c
1719 @@ -1824,8 +1824,8 @@ static int r100_packet0_check(struct radeon_cs_parser *p,
1720 track->textures[i].use_pitch = 1;
1721 } else {
1722 track->textures[i].use_pitch = 0;
1723 - track->textures[i].width = 1 << ((idx_value >> RADEON_TXFORMAT_WIDTH_SHIFT) & RADEON_TXFORMAT_WIDTH_MASK);
1724 - track->textures[i].height = 1 << ((idx_value >> RADEON_TXFORMAT_HEIGHT_SHIFT) & RADEON_TXFORMAT_HEIGHT_MASK);
1725 + track->textures[i].width = 1 << ((idx_value & RADEON_TXFORMAT_WIDTH_MASK) >> RADEON_TXFORMAT_WIDTH_SHIFT);
1726 + track->textures[i].height = 1 << ((idx_value & RADEON_TXFORMAT_HEIGHT_MASK) >> RADEON_TXFORMAT_HEIGHT_SHIFT);
1727 }
1728 if (idx_value & RADEON_TXFORMAT_CUBIC_MAP_ENABLE)
1729 track->textures[i].tex_coord_type = 2;
1730 diff --git a/drivers/gpu/drm/radeon/r200.c b/drivers/gpu/drm/radeon/r200.c
1731 index c70e6d5bcd19..8aa3772e935f 100644
1732 --- a/drivers/gpu/drm/radeon/r200.c
1733 +++ b/drivers/gpu/drm/radeon/r200.c
1734 @@ -476,8 +476,8 @@ int r200_packet0_check(struct radeon_cs_parser *p,
1735 track->textures[i].use_pitch = 1;
1736 } else {
1737 track->textures[i].use_pitch = 0;
1738 - track->textures[i].width = 1 << ((idx_value >> RADEON_TXFORMAT_WIDTH_SHIFT) & RADEON_TXFORMAT_WIDTH_MASK);
1739 - track->textures[i].height = 1 << ((idx_value >> RADEON_TXFORMAT_HEIGHT_SHIFT) & RADEON_TXFORMAT_HEIGHT_MASK);
1740 + track->textures[i].width = 1 << ((idx_value & RADEON_TXFORMAT_WIDTH_MASK) >> RADEON_TXFORMAT_WIDTH_SHIFT);
1741 + track->textures[i].height = 1 << ((idx_value & RADEON_TXFORMAT_HEIGHT_MASK) >> RADEON_TXFORMAT_HEIGHT_SHIFT);
1742 }
1743 if (idx_value & R200_TXFORMAT_LOOKUP_DISABLE)
1744 track->textures[i].lookup_disable = true;
1745 diff --git a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
1746 index b9b1e9c8f4c4..00904c6b5b5e 100644
1747 --- a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
1748 +++ b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
1749 @@ -667,10 +667,13 @@ static ssize_t cyc_threshold_store(struct device *dev,
1750
1751 if (kstrtoul(buf, 16, &val))
1752 return -EINVAL;
1753 +
1754 + /* mask off max threshold before checking min value */
1755 + val &= ETM_CYC_THRESHOLD_MASK;
1756 if (val < drvdata->ccitmin)
1757 return -EINVAL;
1758
1759 - config->ccctlr = val & ETM_CYC_THRESHOLD_MASK;
1760 + config->ccctlr = val;
1761 return size;
1762 }
1763 static DEVICE_ATTR_RW(cyc_threshold);
1764 @@ -701,14 +704,16 @@ static ssize_t bb_ctrl_store(struct device *dev,
1765 return -EINVAL;
1766 if (!drvdata->nr_addr_cmp)
1767 return -EINVAL;
1768 +
1769 /*
1770 - * Bit[7:0] selects which address range comparator is used for
1771 - * branch broadcast control.
1772 + * Bit[8] controls include(1) / exclude(0), bits[0-7] select
1773 + * individual range comparators. If include then at least 1
1774 + * range must be selected.
1775 */
1776 - if (BMVAL(val, 0, 7) > drvdata->nr_addr_cmp)
1777 + if ((val & BIT(8)) && (BMVAL(val, 0, 7) == 0))
1778 return -EINVAL;
1779
1780 - config->bb_ctrl = val;
1781 + config->bb_ctrl = val & GENMASK(8, 0);
1782 return size;
1783 }
1784 static DEVICE_ATTR_RW(bb_ctrl);
1785 @@ -1341,8 +1346,8 @@ static ssize_t seq_event_store(struct device *dev,
1786
1787 spin_lock(&drvdata->spinlock);
1788 idx = config->seq_idx;
1789 - /* RST, bits[7:0] */
1790 - config->seq_ctrl[idx] = val & 0xFF;
1791 + /* Seq control has two masks B[15:8] F[7:0] */
1792 + config->seq_ctrl[idx] = val & 0xFFFF;
1793 spin_unlock(&drvdata->spinlock);
1794 return size;
1795 }
1796 @@ -1597,7 +1602,7 @@ static ssize_t res_ctrl_store(struct device *dev,
1797 if (idx % 2 != 0)
1798 /* PAIRINV, bit[21] */
1799 val &= ~BIT(21);
1800 - config->res_ctrl[idx] = val;
1801 + config->res_ctrl[idx] = val & GENMASK(21, 0);
1802 spin_unlock(&drvdata->spinlock);
1803 return size;
1804 }
1805 diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
1806 index c4188308cefa..9c1be9378dfd 100644
1807 --- a/drivers/i2c/busses/i2c-imx.c
1808 +++ b/drivers/i2c/busses/i2c-imx.c
1809 @@ -1088,7 +1088,8 @@ static int i2c_imx_probe(struct platform_device *pdev)
1810 /* Get I2C clock */
1811 i2c_imx->clk = devm_clk_get(&pdev->dev, NULL);
1812 if (IS_ERR(i2c_imx->clk)) {
1813 - dev_err(&pdev->dev, "can't get I2C clock\n");
1814 + if (PTR_ERR(i2c_imx->clk) != -EPROBE_DEFER)
1815 + dev_err(&pdev->dev, "can't get I2C clock\n");
1816 return PTR_ERR(i2c_imx->clk);
1817 }
1818
1819 diff --git a/drivers/iio/humidity/hdc100x.c b/drivers/iio/humidity/hdc100x.c
1820 index e0c9c70c2a4a..c0e2e78c5c62 100644
1821 --- a/drivers/iio/humidity/hdc100x.c
1822 +++ b/drivers/iio/humidity/hdc100x.c
1823 @@ -202,7 +202,7 @@ static int hdc100x_read_raw(struct iio_dev *indio_dev,
1824 *val2 = 65536;
1825 return IIO_VAL_FRACTIONAL;
1826 } else {
1827 - *val = 100;
1828 + *val = 100000;
1829 *val2 = 65536;
1830 return IIO_VAL_FRACTIONAL;
1831 }
1832 diff --git a/drivers/iio/imu/adis16480.c b/drivers/iio/imu/adis16480.c
1833 index 6f975538996c..c950aa10d0ae 100644
1834 --- a/drivers/iio/imu/adis16480.c
1835 +++ b/drivers/iio/imu/adis16480.c
1836 @@ -724,6 +724,7 @@ static const struct iio_info adis16480_info = {
1837 .write_raw = &adis16480_write_raw,
1838 .update_scan_mode = adis_update_scan_mode,
1839 .driver_module = THIS_MODULE,
1840 + .debugfs_reg_access = adis_debugfs_reg_access,
1841 };
1842
1843 static int adis16480_stop_device(struct iio_dev *indio_dev)
1844 diff --git a/drivers/infiniband/hw/hns/hns_roce_hem.h b/drivers/infiniband/hw/hns/hns_roce_hem.h
1845 index 435748858252..8e8917ebb013 100644
1846 --- a/drivers/infiniband/hw/hns/hns_roce_hem.h
1847 +++ b/drivers/infiniband/hw/hns/hns_roce_hem.h
1848 @@ -52,7 +52,7 @@ enum {
1849
1850 #define HNS_ROCE_HEM_CHUNK_LEN \
1851 ((256 - sizeof(struct list_head) - 2 * sizeof(int)) / \
1852 - (sizeof(struct scatterlist)))
1853 + (sizeof(struct scatterlist) + sizeof(void *)))
1854
1855 enum {
1856 HNS_ROCE_HEM_PAGE_SHIFT = 12,
1857 diff --git a/drivers/infiniband/hw/mlx4/sysfs.c b/drivers/infiniband/hw/mlx4/sysfs.c
1858 index 69fb5ba94d0f..19caacd26f61 100644
1859 --- a/drivers/infiniband/hw/mlx4/sysfs.c
1860 +++ b/drivers/infiniband/hw/mlx4/sysfs.c
1861 @@ -352,16 +352,12 @@ err:
1862
1863 static void get_name(struct mlx4_ib_dev *dev, char *name, int i, int max)
1864 {
1865 - char base_name[9];
1866 -
1867 - /* pci_name format is: bus:dev:func -> xxxx:yy:zz.n */
1868 - strlcpy(name, pci_name(dev->dev->persist->pdev), max);
1869 - strncpy(base_name, name, 8); /*till xxxx:yy:*/
1870 - base_name[8] = '\0';
1871 - /* with no ARI only 3 last bits are used so when the fn is higher than 8
1872 + /* pci_name format is: bus:dev:func -> xxxx:yy:zz.n
1873 + * with no ARI only 3 last bits are used so when the fn is higher than 8
1874 * need to add it to the dev num, so count in the last number will be
1875 * modulo 8 */
1876 - sprintf(name, "%s%.2d.%d", base_name, (i/8), (i%8));
1877 + snprintf(name, max, "%.8s%.2d.%d", pci_name(dev->dev->persist->pdev),
1878 + i / 8, i % 8);
1879 }
1880
1881 struct mlx4_port {
1882 diff --git a/drivers/infiniband/hw/qib/qib_sysfs.c b/drivers/infiniband/hw/qib/qib_sysfs.c
1883 index fe4cf5e4acec..8ce0f6eef89e 100644
1884 --- a/drivers/infiniband/hw/qib/qib_sysfs.c
1885 +++ b/drivers/infiniband/hw/qib/qib_sysfs.c
1886 @@ -301,6 +301,9 @@ static ssize_t qib_portattr_show(struct kobject *kobj,
1887 struct qib_pportdata *ppd =
1888 container_of(kobj, struct qib_pportdata, pport_kobj);
1889
1890 + if (!pattr->show)
1891 + return -EIO;
1892 +
1893 return pattr->show(ppd, buf);
1894 }
1895
1896 @@ -312,6 +315,9 @@ static ssize_t qib_portattr_store(struct kobject *kobj,
1897 struct qib_pportdata *ppd =
1898 container_of(kobj, struct qib_pportdata, pport_kobj);
1899
1900 + if (!pattr->store)
1901 + return -EIO;
1902 +
1903 return pattr->store(ppd, buf, len);
1904 }
1905
1906 diff --git a/drivers/input/touchscreen/cyttsp4_core.c b/drivers/input/touchscreen/cyttsp4_core.c
1907 index 44deca88c579..c1c29d7487bf 100644
1908 --- a/drivers/input/touchscreen/cyttsp4_core.c
1909 +++ b/drivers/input/touchscreen/cyttsp4_core.c
1910 @@ -1972,11 +1972,6 @@ static int cyttsp4_mt_probe(struct cyttsp4 *cd)
1911
1912 /* get sysinfo */
1913 md->si = &cd->sysinfo;
1914 - if (!md->si) {
1915 - dev_err(dev, "%s: Fail get sysinfo pointer from core p=%p\n",
1916 - __func__, md->si);
1917 - goto error_get_sysinfo;
1918 - }
1919
1920 rc = cyttsp4_setup_input_device(cd);
1921 if (rc)
1922 @@ -1986,8 +1981,6 @@ static int cyttsp4_mt_probe(struct cyttsp4 *cd)
1923
1924 error_init_input:
1925 input_free_device(md->input);
1926 -error_get_sysinfo:
1927 - input_set_drvdata(md->input, NULL);
1928 error_alloc_failed:
1929 dev_err(dev, "%s failed.\n", __func__);
1930 return rc;
1931 diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c
1932 index c599b5a2373b..6a02e7301297 100644
1933 --- a/drivers/input/touchscreen/goodix.c
1934 +++ b/drivers/input/touchscreen/goodix.c
1935 @@ -89,6 +89,15 @@ static const unsigned long goodix_irq_flags[] = {
1936 */
1937 static const struct dmi_system_id rotated_screen[] = {
1938 #if defined(CONFIG_DMI) && defined(CONFIG_X86)
1939 + {
1940 + .ident = "Teclast X89",
1941 + .matches = {
1942 + /* tPAD is too generic, also match on bios date */
1943 + DMI_MATCH(DMI_BOARD_VENDOR, "TECLAST"),
1944 + DMI_MATCH(DMI_BOARD_NAME, "tPAD"),
1945 + DMI_MATCH(DMI_BIOS_DATE, "12/19/2014"),
1946 + },
1947 + },
1948 {
1949 .ident = "WinBook TW100",
1950 .matches = {
1951 diff --git a/drivers/isdn/gigaset/usb-gigaset.c b/drivers/isdn/gigaset/usb-gigaset.c
1952 index 5f306e2eece5..aee4880f972f 100644
1953 --- a/drivers/isdn/gigaset/usb-gigaset.c
1954 +++ b/drivers/isdn/gigaset/usb-gigaset.c
1955 @@ -574,8 +574,7 @@ static int gigaset_initcshw(struct cardstate *cs)
1956 {
1957 struct usb_cardstate *ucs;
1958
1959 - cs->hw.usb = ucs =
1960 - kmalloc(sizeof(struct usb_cardstate), GFP_KERNEL);
1961 + cs->hw.usb = ucs = kzalloc(sizeof(struct usb_cardstate), GFP_KERNEL);
1962 if (!ucs) {
1963 pr_err("out of memory\n");
1964 return -ENOMEM;
1965 @@ -587,9 +586,6 @@ static int gigaset_initcshw(struct cardstate *cs)
1966 ucs->bchars[3] = 0;
1967 ucs->bchars[4] = 0x11;
1968 ucs->bchars[5] = 0x13;
1969 - ucs->bulk_out_buffer = NULL;
1970 - ucs->bulk_out_urb = NULL;
1971 - ucs->read_urb = NULL;
1972 tasklet_init(&cs->write_tasklet,
1973 gigaset_modem_fill, (unsigned long) cs);
1974
1975 @@ -688,6 +684,11 @@ static int gigaset_probe(struct usb_interface *interface,
1976 return -ENODEV;
1977 }
1978
1979 + if (hostif->desc.bNumEndpoints < 2) {
1980 + dev_err(&interface->dev, "missing endpoints\n");
1981 + return -ENODEV;
1982 + }
1983 +
1984 dev_info(&udev->dev, "%s: Device matched ... !\n", __func__);
1985
1986 /* allocate memory for our device state and initialize it */
1987 @@ -707,6 +708,12 @@ static int gigaset_probe(struct usb_interface *interface,
1988
1989 endpoint = &hostif->endpoint[0].desc;
1990
1991 + if (!usb_endpoint_is_bulk_out(endpoint)) {
1992 + dev_err(&interface->dev, "missing bulk-out endpoint\n");
1993 + retval = -ENODEV;
1994 + goto error;
1995 + }
1996 +
1997 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
1998 ucs->bulk_out_size = buffer_size;
1999 ucs->bulk_out_epnum = usb_endpoint_num(endpoint);
2000 @@ -726,6 +733,12 @@ static int gigaset_probe(struct usb_interface *interface,
2001
2002 endpoint = &hostif->endpoint[1].desc;
2003
2004 + if (!usb_endpoint_is_int_in(endpoint)) {
2005 + dev_err(&interface->dev, "missing int-in endpoint\n");
2006 + retval = -ENODEV;
2007 + goto error;
2008 + }
2009 +
2010 ucs->busy = 0;
2011
2012 ucs->read_urb = usb_alloc_urb(0, GFP_KERNEL);
2013 diff --git a/drivers/md/persistent-data/dm-btree-remove.c b/drivers/md/persistent-data/dm-btree-remove.c
2014 index 21ea537bd55e..eff04fa23dfa 100644
2015 --- a/drivers/md/persistent-data/dm-btree-remove.c
2016 +++ b/drivers/md/persistent-data/dm-btree-remove.c
2017 @@ -203,7 +203,13 @@ static void __rebalance2(struct dm_btree_info *info, struct btree_node *parent,
2018 struct btree_node *right = r->n;
2019 uint32_t nr_left = le32_to_cpu(left->header.nr_entries);
2020 uint32_t nr_right = le32_to_cpu(right->header.nr_entries);
2021 - unsigned threshold = 2 * merge_threshold(left) + 1;
2022 + /*
2023 + * Ensure the number of entries in each child will be greater
2024 + * than or equal to (max_entries / 3 + 1), so no matter which
2025 + * child is used for removal, the number will still be not
2026 + * less than (max_entries / 3).
2027 + */
2028 + unsigned int threshold = 2 * (merge_threshold(left) + 1);
2029
2030 if (nr_left + nr_right < threshold) {
2031 /*
2032 diff --git a/drivers/media/platform/sti/bdisp/bdisp-v4l2.c b/drivers/media/platform/sti/bdisp/bdisp-v4l2.c
2033 index 45f82b5ddd77..d88c9ba401b5 100644
2034 --- a/drivers/media/platform/sti/bdisp/bdisp-v4l2.c
2035 +++ b/drivers/media/platform/sti/bdisp/bdisp-v4l2.c
2036 @@ -651,8 +651,7 @@ static int bdisp_release(struct file *file)
2037
2038 dev_dbg(bdisp->dev, "%s\n", __func__);
2039
2040 - if (mutex_lock_interruptible(&bdisp->lock))
2041 - return -ERESTARTSYS;
2042 + mutex_lock(&bdisp->lock);
2043
2044 v4l2_m2m_ctx_release(ctx->fh.m2m_ctx);
2045
2046 diff --git a/drivers/media/radio/radio-wl1273.c b/drivers/media/radio/radio-wl1273.c
2047 index a93f681aa9d6..6426b07510a7 100644
2048 --- a/drivers/media/radio/radio-wl1273.c
2049 +++ b/drivers/media/radio/radio-wl1273.c
2050 @@ -1149,8 +1149,7 @@ static int wl1273_fm_fops_release(struct file *file)
2051 if (radio->rds_users > 0) {
2052 radio->rds_users--;
2053 if (radio->rds_users == 0) {
2054 - if (mutex_lock_interruptible(&core->lock))
2055 - return -EINTR;
2056 + mutex_lock(&core->lock);
2057
2058 radio->irq_flags &= ~WL1273_RDS_EVENT;
2059
2060 diff --git a/drivers/media/usb/stkwebcam/stk-webcam.c b/drivers/media/usb/stkwebcam/stk-webcam.c
2061 index 7297fd261df9..f9844f87467b 100644
2062 --- a/drivers/media/usb/stkwebcam/stk-webcam.c
2063 +++ b/drivers/media/usb/stkwebcam/stk-webcam.c
2064 @@ -166,7 +166,11 @@ int stk_camera_read_reg(struct stk_camera *dev, u16 index, u8 *value)
2065 *value = *buf;
2066
2067 kfree(buf);
2068 - return ret;
2069 +
2070 + if (ret < 0)
2071 + return ret;
2072 + else
2073 + return 0;
2074 }
2075
2076 static int stk_start_stream(struct stk_camera *dev)
2077 diff --git a/drivers/misc/altera-stapl/altera.c b/drivers/misc/altera-stapl/altera.c
2078 index f53e217e963f..494e263daa74 100644
2079 --- a/drivers/misc/altera-stapl/altera.c
2080 +++ b/drivers/misc/altera-stapl/altera.c
2081 @@ -2176,8 +2176,7 @@ static int altera_get_note(u8 *p, s32 program_size,
2082 key_ptr = &p[note_strings +
2083 get_unaligned_be32(
2084 &p[note_table + (8 * i)])];
2085 - if ((strncasecmp(key, key_ptr, strlen(key_ptr)) == 0) &&
2086 - (key != NULL)) {
2087 + if (key && !strncasecmp(key, key_ptr, strlen(key_ptr))) {
2088 status = 0;
2089
2090 value_ptr = &p[note_strings +
2091 diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
2092 index 009242bcc7be..65c0742356b9 100644
2093 --- a/drivers/mmc/host/omap_hsmmc.c
2094 +++ b/drivers/mmc/host/omap_hsmmc.c
2095 @@ -1700,6 +1700,36 @@ static void omap_hsmmc_init_card(struct mmc_host *mmc, struct mmc_card *card)
2096
2097 if (mmc_pdata(host)->init_card)
2098 mmc_pdata(host)->init_card(card);
2099 + else if (card->type == MMC_TYPE_SDIO ||
2100 + card->type == MMC_TYPE_SD_COMBO) {
2101 + struct device_node *np = mmc_dev(mmc)->of_node;
2102 +
2103 + /*
2104 + * REVISIT: should be moved to sdio core and made more
2105 + * general e.g. by expanding the DT bindings of child nodes
2106 + * to provide a mechanism to provide this information:
2107 + * Documentation/devicetree/bindings/mmc/mmc-card.txt
2108 + */
2109 +
2110 + np = of_get_compatible_child(np, "ti,wl1251");
2111 + if (np) {
2112 + /*
2113 + * We have TI wl1251 attached to MMC3. Pass this
2114 + * information to the SDIO core because it can't be
2115 + * probed by normal methods.
2116 + */
2117 +
2118 + dev_info(host->dev, "found wl1251\n");
2119 + card->quirks |= MMC_QUIRK_NONSTD_SDIO;
2120 + card->cccr.wide_bus = 1;
2121 + card->cis.vendor = 0x104c;
2122 + card->cis.device = 0x9066;
2123 + card->cis.blksize = 512;
2124 + card->cis.max_dtr = 24000000;
2125 + card->ocr = 0x80;
2126 + of_node_put(np);
2127 + }
2128 + }
2129 }
2130
2131 static void omap_hsmmc_enable_sdio_irq(struct mmc_host *mmc, int enable)
2132 diff --git a/drivers/mtd/devices/spear_smi.c b/drivers/mtd/devices/spear_smi.c
2133 index dd5069876537..4a7da5fde714 100644
2134 --- a/drivers/mtd/devices/spear_smi.c
2135 +++ b/drivers/mtd/devices/spear_smi.c
2136 @@ -595,6 +595,26 @@ static int spear_mtd_read(struct mtd_info *mtd, loff_t from, size_t len,
2137 return 0;
2138 }
2139
2140 +/*
2141 + * The purpose of this function is to ensure a memcpy_toio() with byte writes
2142 + * only. Its structure is inspired from the ARM implementation of _memcpy_toio()
2143 + * which also does single byte writes but cannot be used here as this is just an
2144 + * implementation detail and not part of the API. Not mentioning the comment
2145 + * stating that _memcpy_toio() should be optimized.
2146 + */
2147 +static void spear_smi_memcpy_toio_b(volatile void __iomem *dest,
2148 + const void *src, size_t len)
2149 +{
2150 + const unsigned char *from = src;
2151 +
2152 + while (len) {
2153 + len--;
2154 + writeb(*from, dest);
2155 + from++;
2156 + dest++;
2157 + }
2158 +}
2159 +
2160 static inline int spear_smi_cpy_toio(struct spear_smi *dev, u32 bank,
2161 void __iomem *dest, const void *src, size_t len)
2162 {
2163 @@ -617,7 +637,23 @@ static inline int spear_smi_cpy_toio(struct spear_smi *dev, u32 bank,
2164 ctrlreg1 = readl(dev->io_base + SMI_CR1);
2165 writel((ctrlreg1 | WB_MODE) & ~SW_MODE, dev->io_base + SMI_CR1);
2166
2167 - memcpy_toio(dest, src, len);
2168 + /*
2169 + * In Write Burst mode (WB_MODE), the specs states that writes must be:
2170 + * - incremental
2171 + * - of the same size
2172 + * The ARM implementation of memcpy_toio() will optimize the number of
2173 + * I/O by using as much 4-byte writes as possible, surrounded by
2174 + * 2-byte/1-byte access if:
2175 + * - the destination is not 4-byte aligned
2176 + * - the length is not a multiple of 4-byte.
2177 + * Avoid this alternance of write access size by using our own 'byte
2178 + * access' helper if at least one of the two conditions above is true.
2179 + */
2180 + if (IS_ALIGNED(len, sizeof(u32)) &&
2181 + IS_ALIGNED((uintptr_t)dest, sizeof(u32)))
2182 + memcpy_toio(dest, src, len);
2183 + else
2184 + spear_smi_memcpy_toio_b(dest, src, len);
2185
2186 writel(ctrlreg1, dev->io_base + SMI_CR1);
2187
2188 diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c
2189 index a2c4048c07be..020437900fce 100644
2190 --- a/drivers/net/can/slcan.c
2191 +++ b/drivers/net/can/slcan.c
2192 @@ -613,6 +613,7 @@ err_free_chan:
2193 sl->tty = NULL;
2194 tty->disc_data = NULL;
2195 clear_bit(SLF_INUSE, &sl->flags);
2196 + slc_free_netdev(sl->dev);
2197 free_netdev(sl->dev);
2198
2199 err_exit:
2200 diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
2201 index a37481c04a87..9eb3071b69a4 100644
2202 --- a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
2203 +++ b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
2204 @@ -718,6 +718,10 @@ static int adapter_up(struct adapter *adapter)
2205
2206 if (adapter->flags & USING_MSIX)
2207 name_msix_vecs(adapter);
2208 +
2209 + /* Initialize hash mac addr list*/
2210 + INIT_LIST_HEAD(&adapter->mac_hlist);
2211 +
2212 adapter->flags |= FULL_INIT_DONE;
2213 }
2214
2215 @@ -743,8 +747,6 @@ static int adapter_up(struct adapter *adapter)
2216 enable_rx(adapter);
2217 t4vf_sge_start(adapter);
2218
2219 - /* Initialize hash mac addr list*/
2220 - INIT_LIST_HEAD(&adapter->mac_hlist);
2221 return 0;
2222 }
2223
2224 diff --git a/drivers/net/ethernet/cirrus/ep93xx_eth.c b/drivers/net/ethernet/cirrus/ep93xx_eth.c
2225 index 9a161e981529..24f69034f52c 100644
2226 --- a/drivers/net/ethernet/cirrus/ep93xx_eth.c
2227 +++ b/drivers/net/ethernet/cirrus/ep93xx_eth.c
2228 @@ -780,6 +780,7 @@ static int ep93xx_eth_remove(struct platform_device *pdev)
2229 {
2230 struct net_device *dev;
2231 struct ep93xx_priv *ep;
2232 + struct resource *mem;
2233
2234 dev = platform_get_drvdata(pdev);
2235 if (dev == NULL)
2236 @@ -795,8 +796,8 @@ static int ep93xx_eth_remove(struct platform_device *pdev)
2237 iounmap(ep->base_addr);
2238
2239 if (ep->res != NULL) {
2240 - release_resource(ep->res);
2241 - kfree(ep->res);
2242 + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2243 + release_mem_region(mem->start, resource_size(mem));
2244 }
2245
2246 free_netdev(dev);
2247 diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c
2248 index 068789e694c9..93c29094ceff 100644
2249 --- a/drivers/net/ethernet/intel/e100.c
2250 +++ b/drivers/net/ethernet/intel/e100.c
2251 @@ -1370,8 +1370,8 @@ static inline int e100_load_ucode_wait(struct nic *nic)
2252
2253 fw = e100_request_firmware(nic);
2254 /* If it's NULL, then no ucode is required */
2255 - if (!fw || IS_ERR(fw))
2256 - return PTR_ERR(fw);
2257 + if (IS_ERR_OR_NULL(fw))
2258 + return PTR_ERR_OR_ZERO(fw);
2259
2260 if ((err = e100_exec_cb(nic, (void *)fw, e100_setup_ucode)))
2261 netif_err(nic, probe, nic->netdev,
2262 diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
2263 index cb7c3ef97134..781642d47133 100644
2264 --- a/drivers/net/ethernet/mellanox/mlx4/main.c
2265 +++ b/drivers/net/ethernet/mellanox/mlx4/main.c
2266 @@ -198,7 +198,7 @@ int mlx4_check_port_params(struct mlx4_dev *dev,
2267 for (i = 0; i < dev->caps.num_ports - 1; i++) {
2268 if (port_type[i] != port_type[i + 1]) {
2269 mlx4_err(dev, "Only same port types supported on this HCA, aborting\n");
2270 - return -EINVAL;
2271 + return -EOPNOTSUPP;
2272 }
2273 }
2274 }
2275 @@ -207,7 +207,7 @@ int mlx4_check_port_params(struct mlx4_dev *dev,
2276 if (!(port_type[i] & dev->caps.supported_type[i+1])) {
2277 mlx4_err(dev, "Requested port type for port %d is not supported on this HCA\n",
2278 i + 1);
2279 - return -EINVAL;
2280 + return -EOPNOTSUPP;
2281 }
2282 }
2283 return 0;
2284 @@ -1122,8 +1122,7 @@ static int __set_port_type(struct mlx4_port_info *info,
2285 mlx4_err(mdev,
2286 "Requested port type for port %d is not supported on this HCA\n",
2287 info->port);
2288 - err = -EINVAL;
2289 - goto err_sup;
2290 + return -EOPNOTSUPP;
2291 }
2292
2293 mlx4_stop_sense(mdev);
2294 @@ -1145,7 +1144,7 @@ static int __set_port_type(struct mlx4_port_info *info,
2295 for (i = 1; i <= mdev->caps.num_ports; i++) {
2296 if (mdev->caps.possible_type[i] == MLX4_PORT_TYPE_AUTO) {
2297 mdev->caps.possible_type[i] = mdev->caps.port_type[i];
2298 - err = -EINVAL;
2299 + err = -EOPNOTSUPP;
2300 }
2301 }
2302 }
2303 @@ -1171,7 +1170,7 @@ static int __set_port_type(struct mlx4_port_info *info,
2304 out:
2305 mlx4_start_sense(mdev);
2306 mutex_unlock(&priv->port_mutex);
2307 -err_sup:
2308 +
2309 return err;
2310 }
2311
2312 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
2313 index e42ece20cd0b..e13a6cd5163f 100644
2314 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
2315 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
2316 @@ -1368,7 +1368,7 @@ static int mlx5e_get_module_info(struct net_device *netdev,
2317 break;
2318 case MLX5_MODULE_ID_SFP:
2319 modinfo->type = ETH_MODULE_SFF_8472;
2320 - modinfo->eeprom_len = MLX5_EEPROM_PAGE_LENGTH;
2321 + modinfo->eeprom_len = ETH_MODULE_SFF_8472_LEN;
2322 break;
2323 default:
2324 netdev_err(priv->netdev, "%s: cable type not recognized:0x%x\n",
2325 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/qp.c b/drivers/net/ethernet/mellanox/mlx5/core/qp.c
2326 index 9346f3985edf..354338c8a510 100644
2327 --- a/drivers/net/ethernet/mellanox/mlx5/core/qp.c
2328 +++ b/drivers/net/ethernet/mellanox/mlx5/core/qp.c
2329 @@ -125,7 +125,7 @@ void mlx5_rsc_event(struct mlx5_core_dev *dev, u32 rsn, int event_type)
2330 if (!is_event_type_allowed((rsn >> MLX5_USER_INDEX_LEN), event_type)) {
2331 mlx5_core_warn(dev, "event 0x%.2x is not allowed on resource 0x%.8x\n",
2332 event_type, rsn);
2333 - return;
2334 + goto out;
2335 }
2336
2337 switch (common->res) {
2338 @@ -139,7 +139,7 @@ void mlx5_rsc_event(struct mlx5_core_dev *dev, u32 rsn, int event_type)
2339 default:
2340 mlx5_core_warn(dev, "invalid resource type for 0x%x\n", rsn);
2341 }
2342 -
2343 +out:
2344 mlx5_core_put_rsc(common);
2345 }
2346
2347 diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h
2348 index 6d2de4e01f6d..e11920d12774 100644
2349 --- a/drivers/net/ethernet/stmicro/stmmac/common.h
2350 +++ b/drivers/net/ethernet/stmicro/stmmac/common.h
2351 @@ -354,7 +354,7 @@ struct dma_features {
2352 struct stmmac_desc_ops {
2353 /* DMA RX descriptor ring initialization */
2354 void (*init_rx_desc) (struct dma_desc *p, int disable_rx_ic, int mode,
2355 - int end);
2356 + int end, int bfsize);
2357 /* DMA TX descriptor ring initialization */
2358 void (*init_tx_desc) (struct dma_desc *p, int mode, int end);
2359
2360 diff --git a/drivers/net/ethernet/stmicro/stmmac/descs_com.h b/drivers/net/ethernet/stmicro/stmmac/descs_com.h
2361 index 1d181e205d6e..f9cbba2d2cc0 100644
2362 --- a/drivers/net/ethernet/stmicro/stmmac/descs_com.h
2363 +++ b/drivers/net/ethernet/stmicro/stmmac/descs_com.h
2364 @@ -33,11 +33,14 @@
2365 /* Specific functions used for Ring mode */
2366
2367 /* Enhanced descriptors */
2368 -static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end)
2369 +static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end,
2370 + int bfsize)
2371 {
2372 - p->des1 |= cpu_to_le32(((BUF_SIZE_8KiB - 1)
2373 - << ERDES1_BUFFER2_SIZE_SHIFT)
2374 - & ERDES1_BUFFER2_SIZE_MASK);
2375 + if (bfsize == BUF_SIZE_16KiB)
2376 + p->des1 |= cpu_to_le32((BUF_SIZE_8KiB
2377 + << ERDES1_BUFFER2_SIZE_SHIFT)
2378 + & ERDES1_BUFFER2_SIZE_MASK);
2379 +
2380
2381 if (end)
2382 p->des1 |= cpu_to_le32(ERDES1_END_RING);
2383 @@ -63,11 +66,15 @@ static inline void enh_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
2384 }
2385
2386 /* Normal descriptors */
2387 -static inline void ndesc_rx_set_on_ring(struct dma_desc *p, int end)
2388 +static inline void ndesc_rx_set_on_ring(struct dma_desc *p, int end, int bfsize)
2389 {
2390 - p->des1 |= cpu_to_le32(((BUF_SIZE_2KiB - 1)
2391 - << RDES1_BUFFER2_SIZE_SHIFT)
2392 - & RDES1_BUFFER2_SIZE_MASK);
2393 + if (bfsize >= BUF_SIZE_2KiB) {
2394 + int bfsize2;
2395 +
2396 + bfsize2 = min(bfsize - BUF_SIZE_2KiB + 1, BUF_SIZE_2KiB - 1);
2397 + p->des1 |= cpu_to_le32((bfsize2 << RDES1_BUFFER2_SIZE_SHIFT)
2398 + & RDES1_BUFFER2_SIZE_MASK);
2399 + }
2400
2401 if (end)
2402 p->des1 |= cpu_to_le32(RDES1_END_RING);
2403 diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
2404 index 3f5056858535..a90b02926e4d 100644
2405 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
2406 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
2407 @@ -289,7 +289,7 @@ exit:
2408 }
2409
2410 static void dwmac4_rd_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
2411 - int mode, int end)
2412 + int mode, int end, int bfsize)
2413 {
2414 p->des3 = cpu_to_le32(RDES3_OWN | RDES3_BUFFER1_VALID_ADDR);
2415
2416 diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
2417 index 77dc5842bd0b..47f4fe50c848 100644
2418 --- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
2419 +++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
2420 @@ -269,15 +269,19 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
2421 }
2422
2423 static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
2424 - int mode, int end)
2425 + int mode, int end, int bfsize)
2426 {
2427 + int bfsize1;
2428 +
2429 p->des0 |= cpu_to_le32(RDES0_OWN);
2430 - p->des1 |= cpu_to_le32((BUF_SIZE_8KiB - 1) & ERDES1_BUFFER1_SIZE_MASK);
2431 +
2432 + bfsize1 = min(bfsize, BUF_SIZE_8KiB);
2433 + p->des1 |= cpu_to_le32(bfsize1 & ERDES1_BUFFER1_SIZE_MASK);
2434
2435 if (mode == STMMAC_CHAIN_MODE)
2436 ehn_desc_rx_set_on_chain(p);
2437 else
2438 - ehn_desc_rx_set_on_ring(p, end);
2439 + ehn_desc_rx_set_on_ring(p, end, bfsize);
2440
2441 if (disable_rx_ic)
2442 p->des1 |= cpu_to_le32(ERDES1_DISABLE_IC);
2443 diff --git a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
2444 index 01f8f2e94c0f..5a06a5a1f6ea 100644
2445 --- a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
2446 +++ b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
2447 @@ -137,15 +137,19 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x,
2448 }
2449
2450 static void ndesc_init_rx_desc(struct dma_desc *p, int disable_rx_ic, int mode,
2451 - int end)
2452 + int end, int bfsize)
2453 {
2454 + int bfsize1;
2455 +
2456 p->des0 |= cpu_to_le32(RDES0_OWN);
2457 - p->des1 |= cpu_to_le32((BUF_SIZE_2KiB - 1) & RDES1_BUFFER1_SIZE_MASK);
2458 +
2459 + bfsize1 = min(bfsize, BUF_SIZE_2KiB - 1);
2460 + p->des1 |= cpu_to_le32(bfsize1 & RDES1_BUFFER1_SIZE_MASK);
2461
2462 if (mode == STMMAC_CHAIN_MODE)
2463 ndesc_rx_set_on_chain(p, end);
2464 else
2465 - ndesc_rx_set_on_ring(p, end);
2466 + ndesc_rx_set_on_ring(p, end, bfsize);
2467
2468 if (disable_rx_ic)
2469 p->des1 |= cpu_to_le32(RDES1_DISABLE_IC);
2470 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2471 index 2c04a0739fd6..5ac48a594951 100644
2472 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2473 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2474 @@ -956,11 +956,11 @@ static void stmmac_clear_descriptors(struct stmmac_priv *priv)
2475 if (priv->extend_desc)
2476 priv->hw->desc->init_rx_desc(&priv->dma_erx[i].basic,
2477 priv->use_riwt, priv->mode,
2478 - (i == DMA_RX_SIZE - 1));
2479 + (i == DMA_RX_SIZE - 1), priv->dma_buf_sz);
2480 else
2481 priv->hw->desc->init_rx_desc(&priv->dma_rx[i],
2482 priv->use_riwt, priv->mode,
2483 - (i == DMA_RX_SIZE - 1));
2484 + (i == DMA_RX_SIZE - 1), priv->dma_buf_sz);
2485 for (i = 0; i < DMA_TX_SIZE; i++)
2486 if (priv->extend_desc)
2487 priv->hw->desc->init_tx_desc(&priv->dma_etx[i].basic,
2488 @@ -2479,7 +2479,7 @@ static inline void stmmac_rx_refill(struct stmmac_priv *priv)
2489 wmb();
2490
2491 if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00))
2492 - priv->hw->desc->init_rx_desc(p, priv->use_riwt, 0, 0);
2493 + priv->hw->desc->init_rx_desc(p, priv->use_riwt, 0, 0, priv->dma_buf_sz);
2494 else
2495 priv->hw->desc->set_rx_owner(p);
2496
2497 @@ -2499,8 +2499,7 @@ static inline void stmmac_rx_refill(struct stmmac_priv *priv)
2498 */
2499 static int stmmac_rx(struct stmmac_priv *priv, int limit)
2500 {
2501 - unsigned int entry = priv->cur_rx;
2502 - unsigned int next_entry;
2503 + unsigned int next_entry = priv->cur_rx;
2504 unsigned int count = 0;
2505 int coe = priv->hw->rx_csum;
2506
2507 @@ -2516,10 +2515,12 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
2508 priv->hw->desc->display_ring(rx_head, DMA_RX_SIZE, true);
2509 }
2510 while (count < limit) {
2511 - int status;
2512 + int entry, status;
2513 struct dma_desc *p;
2514 struct dma_desc *np;
2515
2516 + entry = next_entry;
2517 +
2518 if (priv->extend_desc)
2519 p = (struct dma_desc *)(priv->dma_erx + entry);
2520 else
2521 @@ -2584,7 +2585,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
2522 priv->dev->name, frame_len,
2523 priv->dma_buf_sz);
2524 priv->dev->stats.rx_length_errors++;
2525 - break;
2526 + continue;
2527 }
2528
2529 /* ACS is set; GMAC core strips PAD/FCS for IEEE 802.3
2530 @@ -2615,7 +2616,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
2531 dev_warn(priv->device,
2532 "packet dropped\n");
2533 priv->dev->stats.rx_dropped++;
2534 - break;
2535 + continue;
2536 }
2537
2538 dma_sync_single_for_cpu(priv->device,
2539 @@ -2638,7 +2639,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
2540 pr_err("%s: Inconsistent Rx chain\n",
2541 priv->dev->name);
2542 priv->dev->stats.rx_dropped++;
2543 - break;
2544 + continue;
2545 }
2546 prefetch(skb->data - NET_IP_ALIGN);
2547 priv->rx_skbuff[entry] = NULL;
2548 @@ -2672,7 +2673,6 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit)
2549 priv->dev->stats.rx_packets++;
2550 priv->dev->stats.rx_bytes += frame_len;
2551 }
2552 - entry = next_entry;
2553 }
2554
2555 stmmac_rx_refill(priv);
2556 diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
2557 index 892b06852e15..687f0c20b47f 100644
2558 --- a/drivers/net/ethernet/ti/cpsw.c
2559 +++ b/drivers/net/ethernet/ti/cpsw.c
2560 @@ -773,8 +773,8 @@ static irqreturn_t cpsw_rx_interrupt(int irq, void *dev_id)
2561 {
2562 struct cpsw_common *cpsw = dev_id;
2563
2564 - cpdma_ctlr_eoi(cpsw->dma, CPDMA_EOI_RX);
2565 writel(0, &cpsw->wr_regs->rx_en);
2566 + cpdma_ctlr_eoi(cpsw->dma, CPDMA_EOI_RX);
2567
2568 if (cpsw->quirk_irq) {
2569 disable_irq_nosync(cpsw->irqs_table[0]);
2570 diff --git a/drivers/net/wireless/ath/ar5523/ar5523.c b/drivers/net/wireless/ath/ar5523/ar5523.c
2571 index 7a60d2e652da..e492c7f0d311 100644
2572 --- a/drivers/net/wireless/ath/ar5523/ar5523.c
2573 +++ b/drivers/net/wireless/ath/ar5523/ar5523.c
2574 @@ -255,7 +255,8 @@ static int ar5523_cmd(struct ar5523 *ar, u32 code, const void *idata,
2575
2576 if (flags & AR5523_CMD_FLAG_MAGIC)
2577 hdr->magic = cpu_to_be32(1 << 24);
2578 - memcpy(hdr + 1, idata, ilen);
2579 + if (ilen)
2580 + memcpy(hdr + 1, idata, ilen);
2581
2582 cmd->odata = odata;
2583 cmd->olen = olen;
2584 diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
2585 index d84a362a084a..d96e062647fd 100644
2586 --- a/drivers/net/wireless/ath/ath10k/pci.c
2587 +++ b/drivers/net/wireless/ath/ath10k/pci.c
2588 @@ -1765,6 +1765,11 @@ static void ath10k_pci_hif_stop(struct ath10k *ar)
2589
2590 ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot hif stop\n");
2591
2592 + ath10k_pci_irq_disable(ar);
2593 + ath10k_pci_irq_sync(ar);
2594 + napi_synchronize(&ar->napi);
2595 + napi_disable(&ar->napi);
2596 +
2597 /* Most likely the device has HTT Rx ring configured. The only way to
2598 * prevent the device from accessing (and possible corrupting) host
2599 * memory is to reset the chip now.
2600 @@ -1778,10 +1783,6 @@ static void ath10k_pci_hif_stop(struct ath10k *ar)
2601 */
2602 ath10k_pci_safe_chip_reset(ar);
2603
2604 - ath10k_pci_irq_disable(ar);
2605 - ath10k_pci_irq_sync(ar);
2606 - napi_synchronize(&ar->napi);
2607 - napi_disable(&ar->napi);
2608 ath10k_pci_flush(ar);
2609
2610 spin_lock_irqsave(&ar_pci->ps_lock, flags);
2611 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
2612 index 92557cd31a39..d91ab2b8d667 100644
2613 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
2614 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
2615 @@ -805,6 +805,21 @@ static void iwl_mvm_mac_tx(struct ieee80211_hw *hw,
2616 !ieee80211_is_action(hdr->frame_control)))
2617 sta = NULL;
2618
2619 + /* If there is no sta, and it's not offchannel - send through AP */
2620 + if (info->control.vif->type == NL80211_IFTYPE_STATION &&
2621 + info->hw_queue != IWL_MVM_OFFCHANNEL_QUEUE && !sta) {
2622 + struct iwl_mvm_vif *mvmvif =
2623 + iwl_mvm_vif_from_mac80211(info->control.vif);
2624 + u8 ap_sta_id = READ_ONCE(mvmvif->ap_sta_id);
2625 +
2626 + if (ap_sta_id < IWL_MVM_STATION_COUNT) {
2627 + /* mac80211 holds rcu read lock */
2628 + sta = rcu_dereference(mvm->fw_id_to_mac_id[ap_sta_id]);
2629 + if (IS_ERR_OR_NULL(sta))
2630 + goto drop;
2631 + }
2632 + }
2633 +
2634 if (sta) {
2635 if (iwl_mvm_defer_tx(mvm, sta, skb))
2636 return;
2637 diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
2638 index d91f8bbfe7a0..2c23c9edab5c 100644
2639 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
2640 +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
2641 @@ -1209,6 +1209,7 @@ void rtl92de_enable_interrupt(struct ieee80211_hw *hw)
2642
2643 rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF);
2644 rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF);
2645 + rtlpci->irq_enabled = true;
2646 }
2647
2648 void rtl92de_disable_interrupt(struct ieee80211_hw *hw)
2649 @@ -1218,7 +1219,7 @@ void rtl92de_disable_interrupt(struct ieee80211_hw *hw)
2650
2651 rtl_write_dword(rtlpriv, REG_HIMR, IMR8190_DISABLED);
2652 rtl_write_dword(rtlpriv, REG_HIMRE, IMR8190_DISABLED);
2653 - synchronize_irq(rtlpci->pdev->irq);
2654 + rtlpci->irq_enabled = false;
2655 }
2656
2657 static void _rtl92de_poweroff_adapter(struct ieee80211_hw *hw)
2658 @@ -1389,7 +1390,7 @@ void rtl92de_set_beacon_related_registers(struct ieee80211_hw *hw)
2659
2660 bcn_interval = mac->beacon_interval;
2661 atim_window = 2;
2662 - /*rtl92de_disable_interrupt(hw); */
2663 + rtl92de_disable_interrupt(hw);
2664 rtl_write_word(rtlpriv, REG_ATIMWND, atim_window);
2665 rtl_write_word(rtlpriv, REG_BCN_INTERVAL, bcn_interval);
2666 rtl_write_word(rtlpriv, REG_BCNTCFG, 0x660f);
2667 @@ -1409,9 +1410,9 @@ void rtl92de_set_beacon_interval(struct ieee80211_hw *hw)
2668
2669 RT_TRACE(rtlpriv, COMP_BEACON, DBG_DMESG,
2670 "beacon_interval:%d\n", bcn_interval);
2671 - /* rtl92de_disable_interrupt(hw); */
2672 + rtl92de_disable_interrupt(hw);
2673 rtl_write_word(rtlpriv, REG_BCN_INTERVAL, bcn_interval);
2674 - /* rtl92de_enable_interrupt(hw); */
2675 + rtl92de_enable_interrupt(hw);
2676 }
2677
2678 void rtl92de_update_interrupt_mask(struct ieee80211_hw *hw,
2679 diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
2680 index 1ebfee18882f..63cad2f875b8 100644
2681 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
2682 +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
2683 @@ -243,6 +243,7 @@ static struct rtl_hal_ops rtl8192de_hal_ops = {
2684 .led_control = rtl92de_led_control,
2685 .set_desc = rtl92de_set_desc,
2686 .get_desc = rtl92de_get_desc,
2687 + .is_tx_desc_closed = rtl92de_is_tx_desc_closed,
2688 .tx_polling = rtl92de_tx_polling,
2689 .enable_hw_sec = rtl92de_enable_hw_security_config,
2690 .set_key = rtl92de_set_key,
2691 diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
2692 index e998e98d74cb..bddf57cb47f0 100644
2693 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
2694 +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
2695 @@ -843,13 +843,15 @@ u32 rtl92de_get_desc(u8 *p_desc, bool istx, u8 desc_name)
2696 break;
2697 }
2698 } else {
2699 - struct rx_desc_92c *pdesc = (struct rx_desc_92c *)p_desc;
2700 switch (desc_name) {
2701 case HW_DESC_OWN:
2702 - ret = GET_RX_DESC_OWN(pdesc);
2703 + ret = GET_RX_DESC_OWN(p_desc);
2704 break;
2705 case HW_DESC_RXPKT_LEN:
2706 - ret = GET_RX_DESC_PKT_LEN(pdesc);
2707 + ret = GET_RX_DESC_PKT_LEN(p_desc);
2708 + break;
2709 + case HW_DESC_RXBUFF_ADDR:
2710 + ret = GET_RX_DESC_BUFF_ADDR(p_desc);
2711 break;
2712 default:
2713 RT_ASSERT(false, "ERR rxdesc :%d not process\n",
2714 @@ -860,6 +862,23 @@ u32 rtl92de_get_desc(u8 *p_desc, bool istx, u8 desc_name)
2715 return ret;
2716 }
2717
2718 +bool rtl92de_is_tx_desc_closed(struct ieee80211_hw *hw,
2719 + u8 hw_queue, u16 index)
2720 +{
2721 + struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
2722 + struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[hw_queue];
2723 + u8 *entry = (u8 *)(&ring->desc[ring->idx]);
2724 + u8 own = (u8)rtl92de_get_desc(entry, true, HW_DESC_OWN);
2725 +
2726 + /* a beacon packet will only use the first
2727 + * descriptor by defaut, and the own bit may not
2728 + * be cleared by the hardware
2729 + */
2730 + if (own)
2731 + return false;
2732 + return true;
2733 +}
2734 +
2735 void rtl92de_tx_polling(struct ieee80211_hw *hw, u8 hw_queue)
2736 {
2737 struct rtl_priv *rtlpriv = rtl_priv(hw);
2738 diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h
2739 index 194d99f8bacf..d061f33b9f68 100644
2740 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h
2741 +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h
2742 @@ -740,6 +740,8 @@ bool rtl92de_rx_query_desc(struct ieee80211_hw *hw,
2743 void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
2744 u8 desc_name, u8 *val);
2745 u32 rtl92de_get_desc(u8 *pdesc, bool istx, u8 desc_name);
2746 +bool rtl92de_is_tx_desc_closed(struct ieee80211_hw *hw,
2747 + u8 hw_queue, u16 index);
2748 void rtl92de_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
2749 void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
2750 bool b_firstseg, bool b_lastseg,
2751 diff --git a/drivers/nfc/nxp-nci/i2c.c b/drivers/nfc/nxp-nci/i2c.c
2752 index 06a157c63416..7eab97585f22 100644
2753 --- a/drivers/nfc/nxp-nci/i2c.c
2754 +++ b/drivers/nfc/nxp-nci/i2c.c
2755 @@ -238,8 +238,10 @@ static irqreturn_t nxp_nci_i2c_irq_thread_fn(int irq, void *phy_id)
2756
2757 if (r == -EREMOTEIO) {
2758 phy->hard_fault = r;
2759 - skb = NULL;
2760 - } else if (r < 0) {
2761 + if (info->mode == NXP_NCI_MODE_FW)
2762 + nxp_nci_fw_recv_frame(phy->ndev, NULL);
2763 + }
2764 + if (r < 0) {
2765 nfc_err(&client->dev, "Read failed with error %d\n", r);
2766 goto exit_irq_handled;
2767 }
2768 diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
2769 index 8705bfe7bb73..9561a247d0dc 100644
2770 --- a/drivers/nvme/host/core.c
2771 +++ b/drivers/nvme/host/core.c
2772 @@ -1043,7 +1043,7 @@ static int nvme_pr_reserve(struct block_device *bdev, u64 key,
2773 static int nvme_pr_preempt(struct block_device *bdev, u64 old, u64 new,
2774 enum pr_type type, bool abort)
2775 {
2776 - u32 cdw10 = nvme_pr_type(type) << 8 | abort ? 2 : 1;
2777 + u32 cdw10 = nvme_pr_type(type) << 8 | (abort ? 2 : 1);
2778 return nvme_pr_command(bdev, cdw10, old, new, nvme_cmd_resv_acquire);
2779 }
2780
2781 @@ -1055,7 +1055,7 @@ static int nvme_pr_clear(struct block_device *bdev, u64 key)
2782
2783 static int nvme_pr_release(struct block_device *bdev, u64 key, enum pr_type type)
2784 {
2785 - u32 cdw10 = nvme_pr_type(type) << 8 | key ? 1 << 3 : 0;
2786 + u32 cdw10 = nvme_pr_type(type) << 8 | (key ? 1 << 3 : 0);
2787 return nvme_pr_command(bdev, cdw10, key, 0, nvme_cmd_resv_release);
2788 }
2789
2790 diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
2791 index 37f393f27efc..55ca14fbdd2a 100644
2792 --- a/drivers/pci/msi.c
2793 +++ b/drivers/pci/msi.c
2794 @@ -230,7 +230,7 @@ u32 __pci_msix_desc_mask_irq(struct msi_desc *desc, u32 flag)
2795 return 0;
2796
2797 mask_bits &= ~PCI_MSIX_ENTRY_CTRL_MASKBIT;
2798 - if (flag)
2799 + if (flag & PCI_MSIX_ENTRY_CTRL_MASKBIT)
2800 mask_bits |= PCI_MSIX_ENTRY_CTRL_MASKBIT;
2801 writel(mask_bits, pci_msix_desc_addr(desc) + PCI_MSIX_ENTRY_VECTOR_CTRL);
2802
2803 diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
2804 index f474899073e0..496296bc3581 100644
2805 --- a/drivers/pci/quirks.c
2806 +++ b/drivers/pci/quirks.c
2807 @@ -4446,7 +4446,7 @@ int pci_dev_specific_acs_enabled(struct pci_dev *dev, u16 acs_flags)
2808 #define INTEL_BSPR_REG_BPPD (1 << 9)
2809
2810 /* Upstream Peer Decode Configuration Register */
2811 -#define INTEL_UPDCR_REG 0x1114
2812 +#define INTEL_UPDCR_REG 0x1014
2813 /* 5:0 Peer Decode Enable bits */
2814 #define INTEL_UPDCR_REG_MASK 0x3f
2815
2816 diff --git a/drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c b/drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c
2817 index e86c4de2f6db..92855f45bc53 100644
2818 --- a/drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c
2819 +++ b/drivers/pinctrl/qcom/pinctrl-ssbi-gpio.c
2820 @@ -762,12 +762,23 @@ static int pm8xxx_gpio_probe(struct platform_device *pdev)
2821 return ret;
2822 }
2823
2824 - ret = gpiochip_add_pin_range(&pctrl->chip,
2825 - dev_name(pctrl->dev),
2826 - 0, 0, pctrl->chip.ngpio);
2827 - if (ret) {
2828 - dev_err(pctrl->dev, "failed to add pin range\n");
2829 - goto unregister_gpiochip;
2830 + /*
2831 + * For DeviceTree-supported systems, the gpio core checks the
2832 + * pinctrl's device node for the "gpio-ranges" property.
2833 + * If it is present, it takes care of adding the pin ranges
2834 + * for the driver. In this case the driver can skip ahead.
2835 + *
2836 + * In order to remain compatible with older, existing DeviceTree
2837 + * files which don't set the "gpio-ranges" property or systems that
2838 + * utilize ACPI the driver has to call gpiochip_add_pin_range().
2839 + */
2840 + if (!of_property_read_bool(pctrl->dev->of_node, "gpio-ranges")) {
2841 + ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev),
2842 + 0, 0, pctrl->chip.ngpio);
2843 + if (ret) {
2844 + dev_err(pctrl->dev, "failed to add pin range\n");
2845 + goto unregister_gpiochip;
2846 + }
2847 }
2848
2849 platform_set_drvdata(pdev, pctrl);
2850 diff --git a/drivers/pinctrl/samsung/pinctrl-s3c24xx.c b/drivers/pinctrl/samsung/pinctrl-s3c24xx.c
2851 index 3d92f827da7a..0839b70a30ee 100644
2852 --- a/drivers/pinctrl/samsung/pinctrl-s3c24xx.c
2853 +++ b/drivers/pinctrl/samsung/pinctrl-s3c24xx.c
2854 @@ -495,8 +495,10 @@ static int s3c24xx_eint_init(struct samsung_pinctrl_drv_data *d)
2855 return -ENODEV;
2856
2857 eint_data = devm_kzalloc(dev, sizeof(*eint_data), GFP_KERNEL);
2858 - if (!eint_data)
2859 + if (!eint_data) {
2860 + of_node_put(eint_np);
2861 return -ENOMEM;
2862 + }
2863
2864 eint_data->drvdata = d;
2865
2866 @@ -508,12 +510,14 @@ static int s3c24xx_eint_init(struct samsung_pinctrl_drv_data *d)
2867 irq = irq_of_parse_and_map(eint_np, i);
2868 if (!irq) {
2869 dev_err(dev, "failed to get wakeup EINT IRQ %d\n", i);
2870 + of_node_put(eint_np);
2871 return -ENXIO;
2872 }
2873
2874 eint_data->parents[i] = irq;
2875 irq_set_chained_handler_and_data(irq, handlers[i], eint_data);
2876 }
2877 + of_node_put(eint_np);
2878
2879 bank = d->pin_banks;
2880 for (i = 0; i < d->nr_banks; ++i, ++bank) {
2881 diff --git a/drivers/pinctrl/samsung/pinctrl-s3c64xx.c b/drivers/pinctrl/samsung/pinctrl-s3c64xx.c
2882 index 43407ab248f5..0cd9f3a7bb11 100644
2883 --- a/drivers/pinctrl/samsung/pinctrl-s3c64xx.c
2884 +++ b/drivers/pinctrl/samsung/pinctrl-s3c64xx.c
2885 @@ -713,6 +713,7 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d)
2886 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
2887 if (!data) {
2888 dev_err(dev, "could not allocate memory for wkup eint data\n");
2889 + of_node_put(eint0_np);
2890 return -ENOMEM;
2891 }
2892 data->drvdata = d;
2893 @@ -723,6 +724,7 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d)
2894 irq = irq_of_parse_and_map(eint0_np, i);
2895 if (!irq) {
2896 dev_err(dev, "failed to get wakeup EINT IRQ %d\n", i);
2897 + of_node_put(eint0_np);
2898 return -ENXIO;
2899 }
2900
2901 @@ -730,6 +732,7 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d)
2902 s3c64xx_eint0_handlers[i],
2903 data);
2904 }
2905 + of_node_put(eint0_np);
2906
2907 bank = d->pin_banks;
2908 for (i = 0; i < d->nr_banks; ++i, ++bank) {
2909 diff --git a/drivers/pinctrl/samsung/pinctrl-samsung.c b/drivers/pinctrl/samsung/pinctrl-samsung.c
2910 index 620727fabe64..6b77a1bb5b20 100644
2911 --- a/drivers/pinctrl/samsung/pinctrl-samsung.c
2912 +++ b/drivers/pinctrl/samsung/pinctrl-samsung.c
2913 @@ -281,6 +281,7 @@ static int samsung_dt_node_to_map(struct pinctrl_dev *pctldev,
2914 &reserved_maps, num_maps);
2915 if (ret < 0) {
2916 samsung_dt_free_map(pctldev, *map, *num_maps);
2917 + of_node_put(np);
2918 return ret;
2919 }
2920 }
2921 @@ -770,8 +771,10 @@ static struct samsung_pmx_func *samsung_pinctrl_create_functions(
2922 if (!of_get_child_count(cfg_np)) {
2923 ret = samsung_pinctrl_create_function(dev, drvdata,
2924 cfg_np, func);
2925 - if (ret < 0)
2926 + if (ret < 0) {
2927 + of_node_put(cfg_np);
2928 return ERR_PTR(ret);
2929 + }
2930 if (ret > 0) {
2931 ++func;
2932 ++func_cnt;
2933 @@ -782,8 +785,11 @@ static struct samsung_pmx_func *samsung_pinctrl_create_functions(
2934 for_each_child_of_node(cfg_np, func_np) {
2935 ret = samsung_pinctrl_create_function(dev, drvdata,
2936 func_np, func);
2937 - if (ret < 0)
2938 + if (ret < 0) {
2939 + of_node_put(func_np);
2940 + of_node_put(cfg_np);
2941 return ERR_PTR(ret);
2942 + }
2943 if (ret > 0) {
2944 ++func;
2945 ++func_cnt;
2946 diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
2947 index 47e6c8acd5e2..18d57c0efe9f 100644
2948 --- a/drivers/regulator/core.c
2949 +++ b/drivers/regulator/core.c
2950 @@ -4452,7 +4452,7 @@ static int __init regulator_init(void)
2951 /* init early to allow our consumers to complete system booting */
2952 core_initcall(regulator_init);
2953
2954 -static int regulator_late_cleanup(struct device *dev, void *data)
2955 +static int __init regulator_late_cleanup(struct device *dev, void *data)
2956 {
2957 struct regulator_dev *rdev = dev_to_rdev(dev);
2958 const struct regulator_ops *ops = rdev->desc->ops;
2959 @@ -4501,8 +4501,17 @@ unlock:
2960 return 0;
2961 }
2962
2963 -static void regulator_init_complete_work_function(struct work_struct *work)
2964 +static int __init regulator_init_complete(void)
2965 {
2966 + /*
2967 + * Since DT doesn't provide an idiomatic mechanism for
2968 + * enabling full constraints and since it's much more natural
2969 + * with DT to provide them just assume that a DT enabled
2970 + * system has full constraints.
2971 + */
2972 + if (of_have_populated_dt())
2973 + has_full_constraints = true;
2974 +
2975 /*
2976 * Regulators may had failed to resolve their input supplies
2977 * when were registered, either because the input supply was
2978 @@ -4520,35 +4529,6 @@ static void regulator_init_complete_work_function(struct work_struct *work)
2979 */
2980 class_for_each_device(&regulator_class, NULL, NULL,
2981 regulator_late_cleanup);
2982 -}
2983 -
2984 -static DECLARE_DELAYED_WORK(regulator_init_complete_work,
2985 - regulator_init_complete_work_function);
2986 -
2987 -static int __init regulator_init_complete(void)
2988 -{
2989 - /*
2990 - * Since DT doesn't provide an idiomatic mechanism for
2991 - * enabling full constraints and since it's much more natural
2992 - * with DT to provide them just assume that a DT enabled
2993 - * system has full constraints.
2994 - */
2995 - if (of_have_populated_dt())
2996 - has_full_constraints = true;
2997 -
2998 - /*
2999 - * We punt completion for an arbitrary amount of time since
3000 - * systems like distros will load many drivers from userspace
3001 - * so consumers might not always be ready yet, this is
3002 - * particularly an issue with laptops where this might bounce
3003 - * the display off then on. Ideally we'd get a notification
3004 - * from userspace when this happens but we don't so just wait
3005 - * a bit and hope we waited long enough. It'd be better if
3006 - * we'd only do this on systems that need it, and a kernel
3007 - * command line option might be useful.
3008 - */
3009 - schedule_delayed_work(&regulator_init_complete_work,
3010 - msecs_to_jiffies(30000));
3011
3012 return 0;
3013 }
3014 diff --git a/drivers/rtc/rtc-max8997.c b/drivers/rtc/rtc-max8997.c
3015 index db984d4bf952..4cce5bd448f6 100644
3016 --- a/drivers/rtc/rtc-max8997.c
3017 +++ b/drivers/rtc/rtc-max8997.c
3018 @@ -221,7 +221,7 @@ static int max8997_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
3019
3020 out:
3021 mutex_unlock(&info->lock);
3022 - return 0;
3023 + return ret;
3024 }
3025
3026 static int max8997_rtc_stop_alarm(struct max8997_rtc_info *info)
3027 diff --git a/drivers/s390/scsi/zfcp_dbf.c b/drivers/s390/scsi/zfcp_dbf.c
3028 index b6caad0fee24..c53ea0ac5f46 100644
3029 --- a/drivers/s390/scsi/zfcp_dbf.c
3030 +++ b/drivers/s390/scsi/zfcp_dbf.c
3031 @@ -93,11 +93,9 @@ void zfcp_dbf_hba_fsf_res(char *tag, int level, struct zfcp_fsf_req *req)
3032 memcpy(rec->u.res.fsf_status_qual, &q_head->fsf_status_qual,
3033 FSF_STATUS_QUALIFIER_SIZE);
3034
3035 - if (req->fsf_command != FSF_QTCB_FCP_CMND) {
3036 - rec->pl_len = q_head->log_length;
3037 - zfcp_dbf_pl_write(dbf, (char *)q_pref + q_head->log_start,
3038 - rec->pl_len, "fsf_res", req->req_id);
3039 - }
3040 + rec->pl_len = q_head->log_length;
3041 + zfcp_dbf_pl_write(dbf, (char *)q_pref + q_head->log_start,
3042 + rec->pl_len, "fsf_res", req->req_id);
3043
3044 debug_event(dbf->hba, level, rec, sizeof(*rec));
3045 spin_unlock_irqrestore(&dbf->hba_lock, flags);
3046 diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c
3047 index cc62d8cc8cfd..d5214c4eb9dd 100644
3048 --- a/drivers/s390/scsi/zfcp_erp.c
3049 +++ b/drivers/s390/scsi/zfcp_erp.c
3050 @@ -178,9 +178,6 @@ static int zfcp_erp_handle_failed(int want, struct zfcp_adapter *adapter,
3051 adapter, ZFCP_STATUS_COMMON_ERP_FAILED);
3052 }
3053 break;
3054 - default:
3055 - need = 0;
3056 - break;
3057 }
3058
3059 return need;
3060 diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
3061 index 2ffe10453e30..c4336b01db23 100644
3062 --- a/drivers/scsi/libiscsi.c
3063 +++ b/drivers/scsi/libiscsi.c
3064 @@ -1982,7 +1982,7 @@ static enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc)
3065
3066 ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc);
3067
3068 - spin_lock(&session->frwd_lock);
3069 + spin_lock_bh(&session->frwd_lock);
3070 task = (struct iscsi_task *)sc->SCp.ptr;
3071 if (!task) {
3072 /*
3073 @@ -2109,7 +2109,7 @@ static enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc)
3074 done:
3075 if (task)
3076 task->last_timeout = jiffies;
3077 - spin_unlock(&session->frwd_lock);
3078 + spin_unlock_bh(&session->frwd_lock);
3079 ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ?
3080 "timer reset" : "shutdown or nh");
3081 return rc;
3082 diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
3083 index b484859464f6..f0f6d71d28b8 100644
3084 --- a/drivers/scsi/lpfc/lpfc.h
3085 +++ b/drivers/scsi/lpfc/lpfc.h
3086 @@ -878,7 +878,8 @@ struct lpfc_hba {
3087 struct list_head port_list;
3088 struct lpfc_vport *pport; /* physical lpfc_vport pointer */
3089 uint16_t max_vpi; /* Maximum virtual nports */
3090 -#define LPFC_MAX_VPI 0xFFFF /* Max number of VPI supported */
3091 +#define LPFC_MAX_VPI 0xFF /* Max number VPI supported 0 - 0xff */
3092 +#define LPFC_MAX_VPORTS 0x100 /* Max vports per port, with pport */
3093 uint16_t max_vports; /*
3094 * For IOV HBAs max_vpi can change
3095 * after a reset. max_vports is max
3096 diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c
3097 index cf15b9754402..aa0435b1ea1e 100644
3098 --- a/drivers/scsi/lpfc/lpfc_attr.c
3099 +++ b/drivers/scsi/lpfc/lpfc_attr.c
3100 @@ -1214,6 +1214,9 @@ lpfc_get_hba_info(struct lpfc_hba *phba,
3101 max_vpi = (bf_get(lpfc_mbx_rd_conf_vpi_count, rd_config) > 0) ?
3102 (bf_get(lpfc_mbx_rd_conf_vpi_count, rd_config) - 1) : 0;
3103
3104 + /* Limit the max we support */
3105 + if (max_vpi > LPFC_MAX_VPI)
3106 + max_vpi = LPFC_MAX_VPI;
3107 if (mvpi)
3108 *mvpi = max_vpi;
3109 if (avpi)
3110 @@ -1229,8 +1232,13 @@ lpfc_get_hba_info(struct lpfc_hba *phba,
3111 *axri = pmb->un.varRdConfig.avail_xri;
3112 if (mvpi)
3113 *mvpi = pmb->un.varRdConfig.max_vpi;
3114 - if (avpi)
3115 - *avpi = pmb->un.varRdConfig.avail_vpi;
3116 + if (avpi) {
3117 + /* avail_vpi is only valid if link is up and ready */
3118 + if (phba->link_state == LPFC_HBA_READY)
3119 + *avpi = pmb->un.varRdConfig.avail_vpi;
3120 + else
3121 + *avpi = pmb->un.varRdConfig.max_vpi;
3122 + }
3123 }
3124
3125 mempool_free(pmboxq, phba->mbox_mem_pool);
3126 diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
3127 index 2f80b2c0409e..8c640bcf107b 100644
3128 --- a/drivers/scsi/lpfc/lpfc_init.c
3129 +++ b/drivers/scsi/lpfc/lpfc_init.c
3130 @@ -6973,6 +6973,9 @@ lpfc_sli4_read_config(struct lpfc_hba *phba)
3131 bf_get(lpfc_mbx_rd_conf_xri_base, rd_config);
3132 phba->sli4_hba.max_cfg_param.max_vpi =
3133 bf_get(lpfc_mbx_rd_conf_vpi_count, rd_config);
3134 + /* Limit the max we support */
3135 + if (phba->sli4_hba.max_cfg_param.max_vpi > LPFC_MAX_VPORTS)
3136 + phba->sli4_hba.max_cfg_param.max_vpi = LPFC_MAX_VPORTS;
3137 phba->sli4_hba.max_cfg_param.vpi_base =
3138 bf_get(lpfc_mbx_rd_conf_vpi_base, rd_config);
3139 phba->sli4_hba.max_cfg_param.max_rpi =
3140 diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
3141 index 5c3dfd92ea02..33f4181ba9f7 100644
3142 --- a/drivers/scsi/qla2xxx/qla_attr.c
3143 +++ b/drivers/scsi/qla2xxx/qla_attr.c
3144 @@ -682,7 +682,8 @@ qla2x00_sysfs_write_reset(struct file *filp, struct kobject *kobj,
3145 break;
3146 } else {
3147 /* Make sure FC side is not in reset */
3148 - qla2x00_wait_for_hba_online(vha);
3149 + WARN_ON_ONCE(qla2x00_wait_for_hba_online(vha) !=
3150 + QLA_SUCCESS);
3151
3152 /* Issue MPI reset */
3153 scsi_block_requests(vha->host);
3154 diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c
3155 index 33e4dceb895f..09f7a8cfed4d 100644
3156 --- a/drivers/scsi/qla2xxx/qla_bsg.c
3157 +++ b/drivers/scsi/qla2xxx/qla_bsg.c
3158 @@ -336,6 +336,8 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
3159 dma_map_sg(&ha->pdev->dev, bsg_job->request_payload.sg_list,
3160 bsg_job->request_payload.sg_cnt, DMA_TO_DEVICE);
3161 if (!req_sg_cnt) {
3162 + dma_unmap_sg(&ha->pdev->dev, bsg_job->request_payload.sg_list,
3163 + bsg_job->request_payload.sg_cnt, DMA_TO_DEVICE);
3164 rval = -ENOMEM;
3165 goto done_free_fcport;
3166 }
3167 @@ -343,6 +345,8 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
3168 rsp_sg_cnt = dma_map_sg(&ha->pdev->dev, bsg_job->reply_payload.sg_list,
3169 bsg_job->reply_payload.sg_cnt, DMA_FROM_DEVICE);
3170 if (!rsp_sg_cnt) {
3171 + dma_unmap_sg(&ha->pdev->dev, bsg_job->reply_payload.sg_list,
3172 + bsg_job->reply_payload.sg_cnt, DMA_FROM_DEVICE);
3173 rval = -ENOMEM;
3174 goto done_free_fcport;
3175 }
3176 @@ -1740,8 +1744,8 @@ qla24xx_process_bidir_cmd(struct fc_bsg_job *bsg_job)
3177 uint16_t nextlid = 0;
3178 uint32_t tot_dsds;
3179 srb_t *sp = NULL;
3180 - uint32_t req_data_len = 0;
3181 - uint32_t rsp_data_len = 0;
3182 + uint32_t req_data_len;
3183 + uint32_t rsp_data_len;
3184
3185 /* Check the type of the adapter */
3186 if (!IS_BIDI_CAPABLE(ha)) {
3187 @@ -1846,6 +1850,9 @@ qla24xx_process_bidir_cmd(struct fc_bsg_job *bsg_job)
3188 goto done_unmap_sg;
3189 }
3190
3191 + req_data_len = bsg_job->request_payload.payload_len;
3192 + rsp_data_len = bsg_job->reply_payload.payload_len;
3193 +
3194 if (req_data_len != rsp_data_len) {
3195 rval = EXT_STATUS_BUSY;
3196 ql_log(ql_log_warn, vha, 0x70aa,
3197 @@ -1853,10 +1860,6 @@ qla24xx_process_bidir_cmd(struct fc_bsg_job *bsg_job)
3198 goto done_unmap_sg;
3199 }
3200
3201 - req_data_len = bsg_job->request_payload.payload_len;
3202 - rsp_data_len = bsg_job->reply_payload.payload_len;
3203 -
3204 -
3205 /* Alloc SRB structure */
3206 sp = qla2x00_get_sp(vha, &(vha->bidir_fcport), GFP_KERNEL);
3207 if (!sp) {
3208 diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
3209 index d13e91e16425..b889caa556a0 100644
3210 --- a/drivers/scsi/qla2xxx/qla_target.c
3211 +++ b/drivers/scsi/qla2xxx/qla_target.c
3212 @@ -5893,7 +5893,6 @@ static void qlt_abort_work(struct qla_tgt *tgt,
3213 struct qla_hw_data *ha = vha->hw;
3214 struct qla_tgt_sess *sess = NULL;
3215 unsigned long flags = 0, flags2 = 0;
3216 - uint32_t be_s_id;
3217 uint8_t s_id[3];
3218 int rc;
3219
3220 @@ -5906,8 +5905,7 @@ static void qlt_abort_work(struct qla_tgt *tgt,
3221 s_id[1] = prm->abts.fcp_hdr_le.s_id[1];
3222 s_id[2] = prm->abts.fcp_hdr_le.s_id[0];
3223
3224 - sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha,
3225 - (unsigned char *)&be_s_id);
3226 + sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id);
3227 if (!sess) {
3228 spin_unlock_irqrestore(&ha->tgt.sess_lock, flags2);
3229
3230 @@ -6343,7 +6341,8 @@ qlt_enable_vha(struct scsi_qla_host *vha)
3231
3232 set_bit(ISP_ABORT_NEEDED, &base_vha->dpc_flags);
3233 qla2xxx_wake_dpc(base_vha);
3234 - qla2x00_wait_for_hba_online(base_vha);
3235 + WARN_ON_ONCE(qla2x00_wait_for_hba_online(base_vha) !=
3236 + QLA_SUCCESS);
3237 }
3238 }
3239 EXPORT_SYMBOL(qlt_enable_vha);
3240 @@ -6373,7 +6372,9 @@ static void qlt_disable_vha(struct scsi_qla_host *vha)
3241
3242 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags);
3243 qla2xxx_wake_dpc(vha);
3244 - qla2x00_wait_for_hba_online(vha);
3245 + if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS)
3246 + ql_dbg(ql_dbg_tgt, vha, 0xe081,
3247 + "qla2x00_wait_for_hba_online() failed\n");
3248 }
3249
3250 /*
3251 diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c
3252 index 44be6b593b30..691c04b3e5b6 100644
3253 --- a/drivers/spi/spi-atmel.c
3254 +++ b/drivers/spi/spi-atmel.c
3255 @@ -1209,10 +1209,8 @@ static int atmel_spi_setup(struct spi_device *spi)
3256 as = spi_master_get_devdata(spi->master);
3257
3258 /* see notes above re chipselect */
3259 - if (!atmel_spi_is_v2(as)
3260 - && spi->chip_select == 0
3261 - && (spi->mode & SPI_CS_HIGH)) {
3262 - dev_dbg(&spi->dev, "setup: can't be active-high\n");
3263 + if (!as->use_cs_gpios && (spi->mode & SPI_CS_HIGH)) {
3264 + dev_warn(&spi->dev, "setup: non GPIO CS can't be active-high\n");
3265 return -EINVAL;
3266 }
3267
3268 diff --git a/drivers/staging/iio/addac/adt7316-i2c.c b/drivers/staging/iio/addac/adt7316-i2c.c
3269 index 0ccf192b9a03..5950225e45d1 100644
3270 --- a/drivers/staging/iio/addac/adt7316-i2c.c
3271 +++ b/drivers/staging/iio/addac/adt7316-i2c.c
3272 @@ -35,6 +35,8 @@ static int adt7316_i2c_read(void *client, u8 reg, u8 *data)
3273 return ret;
3274 }
3275
3276 + *data = ret;
3277 +
3278 return 0;
3279 }
3280
3281 diff --git a/drivers/staging/media/pulse8-cec/pulse8-cec.c b/drivers/staging/media/pulse8-cec/pulse8-cec.c
3282 index 1732c3857b8e..2785cc03c529 100644
3283 --- a/drivers/staging/media/pulse8-cec/pulse8-cec.c
3284 +++ b/drivers/staging/media/pulse8-cec/pulse8-cec.c
3285 @@ -580,7 +580,7 @@ unlock:
3286 else
3287 pulse8->config_pending = true;
3288 mutex_unlock(&pulse8->config_lock);
3289 - return err;
3290 + return log_addr == CEC_LOG_ADDR_INVALID ? 0 : err;
3291 }
3292
3293 static int pulse8_cec_adap_transmit(struct cec_adapter *adap, u8 attempts,
3294 diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c
3295 index d4a7d740fc62..bfcf9e55f3c6 100644
3296 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c
3297 +++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c
3298 @@ -78,7 +78,7 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf)
3299 phost_conf = pusbd->actconfig;
3300 pconf_desc = &phost_conf->desc;
3301
3302 - phost_iface = &usb_intf->altsetting[0];
3303 + phost_iface = usb_intf->cur_altsetting;
3304 piface_desc = &phost_iface->desc;
3305
3306 pdvobjpriv->NumInterfaces = pconf_desc->bNumInterfaces;
3307 diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c
3308 index 897d4621a5ce..d0ba42dfafeb 100644
3309 --- a/drivers/staging/rtl8712/usb_intf.c
3310 +++ b/drivers/staging/rtl8712/usb_intf.c
3311 @@ -275,7 +275,7 @@ static uint r8712_usb_dvobj_init(struct _adapter *padapter)
3312
3313 pdvobjpriv->padapter = padapter;
3314 padapter->EepromAddressSize = 6;
3315 - phost_iface = &pintf->altsetting[0];
3316 + phost_iface = pintf->cur_altsetting;
3317 piface_desc = &phost_iface->desc;
3318 pdvobjpriv->nr_endpoint = piface_desc->bNumEndpoints;
3319 if (pusbd->speed == USB_SPEED_HIGH) {
3320 diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
3321 index 57603be42c50..90c033b4ec98 100644
3322 --- a/drivers/thermal/thermal_core.c
3323 +++ b/drivers/thermal/thermal_core.c
3324 @@ -402,7 +402,7 @@ static void thermal_zone_device_set_polling(struct thermal_zone_device *tz,
3325 mod_delayed_work(system_freezable_wq, &tz->poll_queue,
3326 msecs_to_jiffies(delay));
3327 else
3328 - cancel_delayed_work_sync(&tz->poll_queue);
3329 + cancel_delayed_work(&tz->poll_queue);
3330 }
3331
3332 static void monitor_thermal_zone(struct thermal_zone_device *tz)
3333 @@ -2073,7 +2073,7 @@ void thermal_zone_device_unregister(struct thermal_zone_device *tz)
3334
3335 mutex_unlock(&thermal_list_lock);
3336
3337 - thermal_zone_device_set_polling(tz, 0);
3338 + cancel_delayed_work_sync(&tz->poll_queue);
3339
3340 if (tz->type[0])
3341 device_remove_file(&tz->device, &dev_attr_type);
3342 diff --git a/drivers/tty/n_hdlc.c b/drivers/tty/n_hdlc.c
3343 index 8d6253903f24..0c12dec110bc 100644
3344 --- a/drivers/tty/n_hdlc.c
3345 +++ b/drivers/tty/n_hdlc.c
3346 @@ -614,7 +614,7 @@ static ssize_t n_hdlc_tty_read(struct tty_struct *tty, struct file *file,
3347 }
3348
3349 /* no data */
3350 - if (file->f_flags & O_NONBLOCK) {
3351 + if (tty_io_nonblock(tty, file)) {
3352 ret = -EAGAIN;
3353 break;
3354 }
3355 @@ -681,7 +681,7 @@ static ssize_t n_hdlc_tty_write(struct tty_struct *tty, struct file *file,
3356 if (tbuf)
3357 break;
3358
3359 - if (file->f_flags & O_NONBLOCK) {
3360 + if (tty_io_nonblock(tty, file)) {
3361 error = -EAGAIN;
3362 break;
3363 }
3364 diff --git a/drivers/tty/n_r3964.c b/drivers/tty/n_r3964.c
3365 index 345111467b85..ee0e07b4a13d 100644
3366 --- a/drivers/tty/n_r3964.c
3367 +++ b/drivers/tty/n_r3964.c
3368 @@ -1080,7 +1080,7 @@ static ssize_t r3964_read(struct tty_struct *tty, struct file *file,
3369 pMsg = remove_msg(pInfo, pClient);
3370 if (pMsg == NULL) {
3371 /* no messages available. */
3372 - if (file->f_flags & O_NONBLOCK) {
3373 + if (tty_io_nonblock(tty, file)) {
3374 ret = -EAGAIN;
3375 goto unlock;
3376 }
3377 diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
3378 index 904fc9c37fde..8214b0326b3a 100644
3379 --- a/drivers/tty/n_tty.c
3380 +++ b/drivers/tty/n_tty.c
3381 @@ -1704,7 +1704,7 @@ n_tty_receive_buf_common(struct tty_struct *tty, const unsigned char *cp,
3382
3383 down_read(&tty->termios_rwsem);
3384
3385 - while (1) {
3386 + do {
3387 /*
3388 * When PARMRK is set, each input char may take up to 3 chars
3389 * in the read buf; reduce the buffer space avail by 3x
3390 @@ -1746,7 +1746,7 @@ n_tty_receive_buf_common(struct tty_struct *tty, const unsigned char *cp,
3391 fp += n;
3392 count -= n;
3393 rcvd += n;
3394 - }
3395 + } while (!test_bit(TTY_LDISC_CHANGING, &tty->flags));
3396
3397 tty->receive_room = room;
3398
3399 @@ -2213,7 +2213,7 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
3400 break;
3401 if (!timeout)
3402 break;
3403 - if (file->f_flags & O_NONBLOCK) {
3404 + if (tty_io_nonblock(tty, file)) {
3405 retval = -EAGAIN;
3406 break;
3407 }
3408 @@ -2367,7 +2367,7 @@ static ssize_t n_tty_write(struct tty_struct *tty, struct file *file,
3409 }
3410 if (!nr)
3411 break;
3412 - if (file->f_flags & O_NONBLOCK) {
3413 + if (tty_io_nonblock(tty, file)) {
3414 retval = -EAGAIN;
3415 break;
3416 }
3417 diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
3418 index 2d8089fc2139..f6586a8681b9 100644
3419 --- a/drivers/tty/serial/amba-pl011.c
3420 +++ b/drivers/tty/serial/amba-pl011.c
3421 @@ -811,10 +811,8 @@ __acquires(&uap->port.lock)
3422 if (!uap->using_tx_dma)
3423 return;
3424
3425 - /* Avoid deadlock with the DMA engine callback */
3426 - spin_unlock(&uap->port.lock);
3427 - dmaengine_terminate_all(uap->dmatx.chan);
3428 - spin_lock(&uap->port.lock);
3429 + dmaengine_terminate_async(uap->dmatx.chan);
3430 +
3431 if (uap->dmatx.queued) {
3432 dma_unmap_sg(uap->dmatx.chan->device->dev, &uap->dmatx.sg, 1,
3433 DMA_TO_DEVICE);
3434 diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
3435 index 800996522fdc..5b6093dc3ff2 100644
3436 --- a/drivers/tty/serial/fsl_lpuart.c
3437 +++ b/drivers/tty/serial/fsl_lpuart.c
3438 @@ -346,8 +346,8 @@ static void lpuart_dma_tx(struct lpuart_port *sport)
3439 }
3440
3441 sport->dma_tx_desc = dmaengine_prep_slave_sg(sport->dma_tx_chan, sgl,
3442 - sport->dma_tx_nents,
3443 - DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
3444 + ret, DMA_MEM_TO_DEV,
3445 + DMA_PREP_INTERRUPT);
3446 if (!sport->dma_tx_desc) {
3447 dma_unmap_sg(dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE);
3448 dev_err(dev, "Cannot prepare TX slave DMA!\n");
3449 diff --git a/drivers/tty/serial/ifx6x60.c b/drivers/tty/serial/ifx6x60.c
3450 index 91d2ddd6ef88..180b77334fdd 100644
3451 --- a/drivers/tty/serial/ifx6x60.c
3452 +++ b/drivers/tty/serial/ifx6x60.c
3453 @@ -1244,6 +1244,9 @@ static int ifx_spi_spi_remove(struct spi_device *spi)
3454 struct ifx_spi_device *ifx_dev = spi_get_drvdata(spi);
3455 /* stop activity */
3456 tasklet_kill(&ifx_dev->io_work_tasklet);
3457 +
3458 + pm_runtime_disable(&spi->dev);
3459 +
3460 /* free irq */
3461 free_irq(gpio_to_irq(ifx_dev->gpio.reset_out), ifx_dev);
3462 free_irq(gpio_to_irq(ifx_dev->gpio.srdy), ifx_dev);
3463 diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
3464 index 0d82be145c68..6d596c635159 100644
3465 --- a/drivers/tty/serial/imx.c
3466 +++ b/drivers/tty/serial/imx.c
3467 @@ -1943,7 +1943,7 @@ imx_console_setup(struct console *co, char *options)
3468
3469 retval = clk_prepare(sport->clk_per);
3470 if (retval)
3471 - clk_disable_unprepare(sport->clk_ipg);
3472 + clk_unprepare(sport->clk_ipg);
3473
3474 error_console:
3475 return retval;
3476 diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
3477 index 9027455c6be1..2ed219c837c9 100644
3478 --- a/drivers/tty/serial/msm_serial.c
3479 +++ b/drivers/tty/serial/msm_serial.c
3480 @@ -988,6 +988,7 @@ static unsigned int msm_get_mctrl(struct uart_port *port)
3481 static void msm_reset(struct uart_port *port)
3482 {
3483 struct msm_port *msm_port = UART_TO_MSM(port);
3484 + unsigned int mr;
3485
3486 /* reset everything */
3487 msm_write(port, UART_CR_CMD_RESET_RX, UART_CR);
3488 @@ -995,7 +996,10 @@ static void msm_reset(struct uart_port *port)
3489 msm_write(port, UART_CR_CMD_RESET_ERR, UART_CR);
3490 msm_write(port, UART_CR_CMD_RESET_BREAK_INT, UART_CR);
3491 msm_write(port, UART_CR_CMD_RESET_CTS, UART_CR);
3492 - msm_write(port, UART_CR_CMD_SET_RFR, UART_CR);
3493 + msm_write(port, UART_CR_CMD_RESET_RFR, UART_CR);
3494 + mr = msm_read(port, UART_MR1);
3495 + mr &= ~UART_MR1_RX_RDY_CTL;
3496 + msm_write(port, mr, UART_MR1);
3497
3498 /* Disable DM modes */
3499 if (msm_port->is_uartdm)
3500 diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
3501 index 04c023f7f633..ae118e68b406 100644
3502 --- a/drivers/tty/serial/serial_core.c
3503 +++ b/drivers/tty/serial/serial_core.c
3504 @@ -1106,7 +1106,7 @@ static int uart_break_ctl(struct tty_struct *tty, int break_state)
3505 if (!uport)
3506 goto out;
3507
3508 - if (uport->type != PORT_UNKNOWN)
3509 + if (uport->type != PORT_UNKNOWN && uport->ops->break_ctl)
3510 uport->ops->break_ctl(uport, break_state);
3511 ret = 0;
3512 out:
3513 diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
3514 index 3eb3f2a03bbb..706faca834f2 100644
3515 --- a/drivers/tty/tty_ldisc.c
3516 +++ b/drivers/tty/tty_ldisc.c
3517 @@ -348,6 +348,11 @@ int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout)
3518 {
3519 int ret;
3520
3521 + /* Kindly asking blocked readers to release the read side */
3522 + set_bit(TTY_LDISC_CHANGING, &tty->flags);
3523 + wake_up_interruptible_all(&tty->read_wait);
3524 + wake_up_interruptible_all(&tty->write_wait);
3525 +
3526 ret = __tty_ldisc_lock(tty, timeout);
3527 if (!ret)
3528 return -EBUSY;
3529 @@ -358,6 +363,8 @@ int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout)
3530 void tty_ldisc_unlock(struct tty_struct *tty)
3531 {
3532 clear_bit(TTY_LDISC_HALTED, &tty->flags);
3533 + /* Can be cleared here - ldisc_unlock will wake up writers firstly */
3534 + clear_bit(TTY_LDISC_CHANGING, &tty->flags);
3535 __tty_ldisc_unlock(tty);
3536 }
3537
3538 diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c
3539 index e8a917a23ed9..b4e7a7317713 100644
3540 --- a/drivers/tty/vt/keyboard.c
3541 +++ b/drivers/tty/vt/keyboard.c
3542 @@ -1460,7 +1460,7 @@ static void kbd_event(struct input_handle *handle, unsigned int event_type,
3543
3544 if (event_type == EV_MSC && event_code == MSC_RAW && HW_RAW(handle->dev))
3545 kbd_rawcode(value);
3546 - if (event_type == EV_KEY)
3547 + if (event_type == EV_KEY && event_code <= KEY_MAX)
3548 kbd_keycode(event_code, value, HW_RAW(handle->dev));
3549
3550 spin_unlock(&kbd_event_lock);
3551 diff --git a/drivers/usb/atm/ueagle-atm.c b/drivers/usb/atm/ueagle-atm.c
3552 index df67815f74e6..127fcaf13856 100644
3553 --- a/drivers/usb/atm/ueagle-atm.c
3554 +++ b/drivers/usb/atm/ueagle-atm.c
3555 @@ -2167,10 +2167,11 @@ resubmit:
3556 /*
3557 * Start the modem : init the data and start kernel thread
3558 */
3559 -static int uea_boot(struct uea_softc *sc)
3560 +static int uea_boot(struct uea_softc *sc, struct usb_interface *intf)
3561 {
3562 - int ret, size;
3563 struct intr_pkt *intr;
3564 + int ret = -ENOMEM;
3565 + int size;
3566
3567 uea_enters(INS_TO_USBDEV(sc));
3568
3569 @@ -2195,6 +2196,11 @@ static int uea_boot(struct uea_softc *sc)
3570 if (UEA_CHIP_VERSION(sc) == ADI930)
3571 load_XILINX_firmware(sc);
3572
3573 + if (intf->cur_altsetting->desc.bNumEndpoints < 1) {
3574 + ret = -ENODEV;
3575 + goto err0;
3576 + }
3577 +
3578 intr = kmalloc(size, GFP_KERNEL);
3579 if (!intr)
3580 goto err0;
3581 @@ -2206,8 +2212,7 @@ static int uea_boot(struct uea_softc *sc)
3582 usb_fill_int_urb(sc->urb_int, sc->usb_dev,
3583 usb_rcvintpipe(sc->usb_dev, UEA_INTR_PIPE),
3584 intr, size, uea_intr, sc,
3585 - sc->usb_dev->actconfig->interface[0]->altsetting[0].
3586 - endpoint[0].desc.bInterval);
3587 + intf->cur_altsetting->endpoint[0].desc.bInterval);
3588
3589 ret = usb_submit_urb(sc->urb_int, GFP_KERNEL);
3590 if (ret < 0) {
3591 @@ -2222,6 +2227,7 @@ static int uea_boot(struct uea_softc *sc)
3592 sc->kthread = kthread_create(uea_kthread, sc, "ueagle-atm");
3593 if (IS_ERR(sc->kthread)) {
3594 uea_err(INS_TO_USBDEV(sc), "failed to create thread\n");
3595 + ret = PTR_ERR(sc->kthread);
3596 goto err2;
3597 }
3598
3599 @@ -2236,7 +2242,7 @@ err1:
3600 kfree(intr);
3601 err0:
3602 uea_leaves(INS_TO_USBDEV(sc));
3603 - return -ENOMEM;
3604 + return ret;
3605 }
3606
3607 /*
3608 @@ -2597,7 +2603,7 @@ static int uea_bind(struct usbatm_data *usbatm, struct usb_interface *intf,
3609 if (ret < 0)
3610 goto error;
3611
3612 - ret = uea_boot(sc);
3613 + ret = uea_boot(sc, intf);
3614 if (ret < 0)
3615 goto error_rm_grp;
3616
3617 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
3618 index 4a87cc478340..acf4752302a6 100644
3619 --- a/drivers/usb/core/hub.c
3620 +++ b/drivers/usb/core/hub.c
3621 @@ -5620,7 +5620,7 @@ re_enumerate_no_bos:
3622
3623 /**
3624 * usb_reset_device - warn interface drivers and perform a USB port reset
3625 - * @udev: device to reset (not in SUSPENDED or NOTATTACHED state)
3626 + * @udev: device to reset (not in NOTATTACHED state)
3627 *
3628 * Warns all drivers bound to registered interfaces (using their pre_reset
3629 * method), performs the port reset, and then lets the drivers know that
3630 @@ -5648,8 +5648,7 @@ int usb_reset_device(struct usb_device *udev)
3631 struct usb_host_config *config = udev->actconfig;
3632 struct usb_hub *hub = usb_hub_to_struct_hub(udev->parent);
3633
3634 - if (udev->state == USB_STATE_NOTATTACHED ||
3635 - udev->state == USB_STATE_SUSPENDED) {
3636 + if (udev->state == USB_STATE_NOTATTACHED) {
3637 dev_dbg(&udev->dev, "device reset not allowed in state %d\n",
3638 udev->state);
3639 return -EINVAL;
3640 diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
3641 index 5133ab965229..7b81bcfa19cb 100644
3642 --- a/drivers/usb/core/urb.c
3643 +++ b/drivers/usb/core/urb.c
3644 @@ -40,6 +40,7 @@ void usb_init_urb(struct urb *urb)
3645 if (urb) {
3646 memset(urb, 0, sizeof(*urb));
3647 kref_init(&urb->kref);
3648 + INIT_LIST_HEAD(&urb->urb_list);
3649 INIT_LIST_HEAD(&urb->anchor_list);
3650 }
3651 }
3652 diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
3653 index 7154a93f0114..30bc5996a2f2 100644
3654 --- a/drivers/usb/dwc3/core.c
3655 +++ b/drivers/usb/dwc3/core.c
3656 @@ -1102,7 +1102,8 @@ static int dwc3_probe(struct platform_device *pdev)
3657
3658 ret = dwc3_core_init(dwc);
3659 if (ret) {
3660 - dev_err(dev, "failed to initialize core\n");
3661 + if (ret != -EPROBE_DEFER)
3662 + dev_err(dev, "failed to initialize core: %d\n", ret);
3663 goto err4;
3664 }
3665
3666 diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
3667 index b5315a47f0b9..3f1662b64bab 100644
3668 --- a/drivers/usb/gadget/configfs.c
3669 +++ b/drivers/usb/gadget/configfs.c
3670 @@ -1541,6 +1541,7 @@ static struct config_group *gadgets_make(
3671 gi->composite.resume = NULL;
3672 gi->composite.max_speed = USB_SPEED_SUPER;
3673
3674 + spin_lock_init(&gi->spinlock);
3675 mutex_init(&gi->lock);
3676 INIT_LIST_HEAD(&gi->string_list);
3677 INIT_LIST_HEAD(&gi->available_func);
3678 diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c
3679 index 2f151e0aa6da..510a54f88963 100644
3680 --- a/drivers/usb/gadget/function/u_serial.c
3681 +++ b/drivers/usb/gadget/function/u_serial.c
3682 @@ -1391,8 +1391,10 @@ int gserial_alloc_line(unsigned char *line_num)
3683 __func__, port_num, PTR_ERR(tty_dev));
3684
3685 ret = PTR_ERR(tty_dev);
3686 + mutex_lock(&ports[port_num].lock);
3687 port = ports[port_num].port;
3688 ports[port_num].port = NULL;
3689 + mutex_unlock(&ports[port_num].lock);
3690 gserial_free_port(port);
3691 goto err;
3692 }
3693 diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
3694 index 39e2d3271035..5cf5f3d9c1e5 100644
3695 --- a/drivers/usb/host/xhci-hub.c
3696 +++ b/drivers/usb/host/xhci-hub.c
3697 @@ -728,7 +728,7 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
3698 struct xhci_bus_state *bus_state,
3699 __le32 __iomem **port_array,
3700 u16 wIndex, u32 raw_port_status,
3701 - unsigned long flags)
3702 + unsigned long *flags)
3703 __releases(&xhci->lock)
3704 __acquires(&xhci->lock)
3705 {
3706 @@ -760,6 +760,14 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
3707 status |= USB_PORT_STAT_C_BH_RESET << 16;
3708 if ((raw_port_status & PORT_CEC))
3709 status |= USB_PORT_STAT_C_CONFIG_ERROR << 16;
3710 +
3711 + /* USB3 remote wake resume signaling completed */
3712 + if (bus_state->port_remote_wakeup & (1 << wIndex) &&
3713 + (raw_port_status & PORT_PLS_MASK) != XDEV_RESUME &&
3714 + (raw_port_status & PORT_PLS_MASK) != XDEV_RECOVERY) {
3715 + bus_state->port_remote_wakeup &= ~(1 << wIndex);
3716 + usb_hcd_end_port_resume(&hcd->self, wIndex);
3717 + }
3718 }
3719
3720 if (hcd->speed < HCD_USB3) {
3721 @@ -810,12 +818,12 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
3722 xhci_set_link_state(xhci, port_array, wIndex,
3723 XDEV_U0);
3724
3725 - spin_unlock_irqrestore(&xhci->lock, flags);
3726 + spin_unlock_irqrestore(&xhci->lock, *flags);
3727 time_left = wait_for_completion_timeout(
3728 &bus_state->rexit_done[wIndex],
3729 msecs_to_jiffies(
3730 XHCI_MAX_REXIT_TIMEOUT_MS));
3731 - spin_lock_irqsave(&xhci->lock, flags);
3732 + spin_lock_irqsave(&xhci->lock, *flags);
3733
3734 if (time_left) {
3735 slot_id = xhci_find_slot_id_by_port(hcd,
3736 @@ -961,7 +969,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
3737 break;
3738 }
3739 status = xhci_get_port_status(hcd, bus_state, port_array,
3740 - wIndex, temp, flags);
3741 + wIndex, temp, &flags);
3742 if (status == 0xffffffff)
3743 goto error;
3744
3745 diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
3746 index 7199e400fbac..aad64a26a767 100644
3747 --- a/drivers/usb/host/xhci-mem.c
3748 +++ b/drivers/usb/host/xhci-mem.c
3749 @@ -1940,10 +1940,14 @@ no_bw:
3750 kfree(xhci->port_array);
3751 kfree(xhci->rh_bw);
3752 kfree(xhci->ext_caps);
3753 + kfree(xhci->usb2_rhub.psi);
3754 + kfree(xhci->usb3_rhub.psi);
3755
3756 xhci->usb2_ports = NULL;
3757 xhci->usb3_ports = NULL;
3758 xhci->port_array = NULL;
3759 + xhci->usb2_rhub.psi = NULL;
3760 + xhci->usb3_rhub.psi = NULL;
3761 xhci->rh_bw = NULL;
3762 xhci->ext_caps = NULL;
3763
3764 diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
3765 index b5140555a8d5..99bef8518fd2 100644
3766 --- a/drivers/usb/host/xhci-pci.c
3767 +++ b/drivers/usb/host/xhci-pci.c
3768 @@ -470,6 +470,18 @@ static int xhci_pci_resume(struct usb_hcd *hcd, bool hibernated)
3769 }
3770 #endif /* CONFIG_PM */
3771
3772 +static void xhci_pci_shutdown(struct usb_hcd *hcd)
3773 +{
3774 + struct xhci_hcd *xhci = hcd_to_xhci(hcd);
3775 + struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
3776 +
3777 + xhci_shutdown(hcd);
3778 +
3779 + /* Yet another workaround for spurious wakeups at shutdown with HSW */
3780 + if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
3781 + pci_set_power_state(pdev, PCI_D3hot);
3782 +}
3783 +
3784 /*-------------------------------------------------------------------------*/
3785
3786 /* PCI driver selection metadata; PCI hotplugging uses this */
3787 @@ -505,6 +517,7 @@ static int __init xhci_pci_init(void)
3788 #ifdef CONFIG_PM
3789 xhci_pci_hc_driver.pci_suspend = xhci_pci_suspend;
3790 xhci_pci_hc_driver.pci_resume = xhci_pci_resume;
3791 + xhci_pci_hc_driver.shutdown = xhci_pci_shutdown;
3792 #endif
3793 return pci_register_driver(&xhci_pci_driver);
3794 }
3795 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
3796 index 69ad9817076a..b426c83ecb9b 100644
3797 --- a/drivers/usb/host/xhci-ring.c
3798 +++ b/drivers/usb/host/xhci-ring.c
3799 @@ -1609,9 +1609,6 @@ static void handle_port_status(struct xhci_hcd *xhci,
3800 usb_hcd_resume_root_hub(hcd);
3801 }
3802
3803 - if (hcd->speed >= HCD_USB3 && (temp & PORT_PLS_MASK) == XDEV_INACTIVE)
3804 - bus_state->port_remote_wakeup &= ~(1 << faked_port_index);
3805 -
3806 if ((temp & PORT_PLC) && (temp & PORT_PLS_MASK) == XDEV_RESUME) {
3807 xhci_dbg(xhci, "port resume event for port %d\n", port_id);
3808
3809 @@ -1630,6 +1627,7 @@ static void handle_port_status(struct xhci_hcd *xhci,
3810 bus_state->port_remote_wakeup |= 1 << faked_port_index;
3811 xhci_test_and_clear_bit(xhci, port_array,
3812 faked_port_index, PORT_PLC);
3813 + usb_hcd_start_port_resume(&hcd->self, faked_port_index);
3814 xhci_set_link_state(xhci, port_array, faked_port_index,
3815 XDEV_U0);
3816 /* Need to wait until the next link state change
3817 @@ -1667,8 +1665,6 @@ static void handle_port_status(struct xhci_hcd *xhci,
3818 if (slot_id && xhci->devs[slot_id])
3819 xhci_ring_device(xhci, slot_id);
3820 if (bus_state->port_remote_wakeup & (1 << faked_port_index)) {
3821 - bus_state->port_remote_wakeup &=
3822 - ~(1 << faked_port_index);
3823 xhci_test_and_clear_bit(xhci, port_array,
3824 faked_port_index, PORT_PLC);
3825 usb_wakeup_notification(hcd->self.root_hub,
3826 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
3827 index 755016729f12..baacc442ec6a 100644
3828 --- a/drivers/usb/host/xhci.c
3829 +++ b/drivers/usb/host/xhci.c
3830 @@ -758,11 +758,8 @@ void xhci_shutdown(struct usb_hcd *hcd)
3831 xhci_dbg_trace(xhci, trace_xhci_dbg_init,
3832 "xhci_shutdown completed - status = %x",
3833 readl(&xhci->op_regs->status));
3834 -
3835 - /* Yet another workaround for spurious wakeups at shutdown with HSW */
3836 - if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
3837 - pci_set_power_state(to_pci_dev(hcd->self.controller), PCI_D3hot);
3838 }
3839 +EXPORT_SYMBOL_GPL(xhci_shutdown);
3840
3841 #ifdef CONFIG_PM
3842 static void xhci_save_registers(struct xhci_hcd *xhci)
3843 @@ -933,7 +930,7 @@ static bool xhci_pending_portevent(struct xhci_hcd *xhci)
3844 int xhci_suspend(struct xhci_hcd *xhci, bool do_wakeup)
3845 {
3846 int rc = 0;
3847 - unsigned int delay = XHCI_MAX_HALT_USEC;
3848 + unsigned int delay = XHCI_MAX_HALT_USEC * 2;
3849 struct usb_hcd *hcd = xhci_to_hcd(xhci);
3850 u32 command;
3851
3852 diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
3853 index de4771ce0df6..2b603ef5c10c 100644
3854 --- a/drivers/usb/host/xhci.h
3855 +++ b/drivers/usb/host/xhci.h
3856 @@ -316,6 +316,7 @@ struct xhci_op_regs {
3857 #define XDEV_U3 (0x3 << 5)
3858 #define XDEV_INACTIVE (0x6 << 5)
3859 #define XDEV_POLLING (0x7 << 5)
3860 +#define XDEV_RECOVERY (0x8 << 5)
3861 #define XDEV_COMP_MODE (0xa << 5)
3862 #define XDEV_RESUME (0xf << 5)
3863 /* true: port has power (see HCC_PPC) */
3864 @@ -1865,6 +1866,7 @@ int xhci_run(struct usb_hcd *hcd);
3865 void xhci_stop(struct usb_hcd *hcd);
3866 void xhci_shutdown(struct usb_hcd *hcd);
3867 int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks);
3868 +void xhci_shutdown(struct usb_hcd *hcd);
3869 void xhci_init_driver(struct hc_driver *drv,
3870 const struct xhci_driver_overrides *over);
3871
3872 diff --git a/drivers/usb/misc/adutux.c b/drivers/usb/misc/adutux.c
3873 index f0c071da68d1..7fb0590187d4 100644
3874 --- a/drivers/usb/misc/adutux.c
3875 +++ b/drivers/usb/misc/adutux.c
3876 @@ -685,7 +685,7 @@ static int adu_probe(struct usb_interface *interface,
3877 init_waitqueue_head(&dev->read_wait);
3878 init_waitqueue_head(&dev->write_wait);
3879
3880 - iface_desc = &interface->altsetting[0];
3881 + iface_desc = &interface->cur_altsetting[0];
3882
3883 /* set up the endpoint information */
3884 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
3885 diff --git a/drivers/usb/misc/idmouse.c b/drivers/usb/misc/idmouse.c
3886 index 9a67ae39185b..9cf8a9b16336 100644
3887 --- a/drivers/usb/misc/idmouse.c
3888 +++ b/drivers/usb/misc/idmouse.c
3889 @@ -342,7 +342,7 @@ static int idmouse_probe(struct usb_interface *interface,
3890 int result;
3891
3892 /* check if we have gotten the data or the hid interface */
3893 - iface_desc = &interface->altsetting[0];
3894 + iface_desc = interface->cur_altsetting;
3895 if (iface_desc->desc.bInterfaceClass != 0x0A)
3896 return -ENODEV;
3897
3898 diff --git a/drivers/usb/mon/mon_bin.c b/drivers/usb/mon/mon_bin.c
3899 index 80b37d214beb..bd1a8dc285f5 100644
3900 --- a/drivers/usb/mon/mon_bin.c
3901 +++ b/drivers/usb/mon/mon_bin.c
3902 @@ -1036,12 +1036,18 @@ static long mon_bin_ioctl(struct file *file, unsigned int cmd, unsigned long arg
3903
3904 mutex_lock(&rp->fetch_lock);
3905 spin_lock_irqsave(&rp->b_lock, flags);
3906 - mon_free_buff(rp->b_vec, rp->b_size/CHUNK_SIZE);
3907 - kfree(rp->b_vec);
3908 - rp->b_vec = vec;
3909 - rp->b_size = size;
3910 - rp->b_read = rp->b_in = rp->b_out = rp->b_cnt = 0;
3911 - rp->cnt_lost = 0;
3912 + if (rp->mmap_active) {
3913 + mon_free_buff(vec, size/CHUNK_SIZE);
3914 + kfree(vec);
3915 + ret = -EBUSY;
3916 + } else {
3917 + mon_free_buff(rp->b_vec, rp->b_size/CHUNK_SIZE);
3918 + kfree(rp->b_vec);
3919 + rp->b_vec = vec;
3920 + rp->b_size = size;
3921 + rp->b_read = rp->b_in = rp->b_out = rp->b_cnt = 0;
3922 + rp->cnt_lost = 0;
3923 + }
3924 spin_unlock_irqrestore(&rp->b_lock, flags);
3925 mutex_unlock(&rp->fetch_lock);
3926 }
3927 @@ -1213,13 +1219,21 @@ mon_bin_poll(struct file *file, struct poll_table_struct *wait)
3928 static void mon_bin_vma_open(struct vm_area_struct *vma)
3929 {
3930 struct mon_reader_bin *rp = vma->vm_private_data;
3931 + unsigned long flags;
3932 +
3933 + spin_lock_irqsave(&rp->b_lock, flags);
3934 rp->mmap_active++;
3935 + spin_unlock_irqrestore(&rp->b_lock, flags);
3936 }
3937
3938 static void mon_bin_vma_close(struct vm_area_struct *vma)
3939 {
3940 + unsigned long flags;
3941 +
3942 struct mon_reader_bin *rp = vma->vm_private_data;
3943 + spin_lock_irqsave(&rp->b_lock, flags);
3944 rp->mmap_active--;
3945 + spin_unlock_irqrestore(&rp->b_lock, flags);
3946 }
3947
3948 /*
3949 @@ -1231,16 +1245,12 @@ static int mon_bin_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
3950 unsigned long offset, chunk_idx;
3951 struct page *pageptr;
3952
3953 - mutex_lock(&rp->fetch_lock);
3954 offset = vmf->pgoff << PAGE_SHIFT;
3955 - if (offset >= rp->b_size) {
3956 - mutex_unlock(&rp->fetch_lock);
3957 + if (offset >= rp->b_size)
3958 return VM_FAULT_SIGBUS;
3959 - }
3960 chunk_idx = offset / CHUNK_SIZE;
3961 pageptr = rp->b_vec[chunk_idx].pg;
3962 get_page(pageptr);
3963 - mutex_unlock(&rp->fetch_lock);
3964 vmf->page = pageptr;
3965 return 0;
3966 }
3967 diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
3968 index de61271f2ba3..e5649adcc84c 100644
3969 --- a/drivers/usb/serial/io_edgeport.c
3970 +++ b/drivers/usb/serial/io_edgeport.c
3971 @@ -2852,16 +2852,18 @@ static int edge_startup(struct usb_serial *serial)
3972 response = 0;
3973
3974 if (edge_serial->is_epic) {
3975 + struct usb_host_interface *alt;
3976 +
3977 + alt = serial->interface->cur_altsetting;
3978 +
3979 /* EPIC thing, set up our interrupt polling now and our read
3980 * urb, so that the device knows it really is connected. */
3981 interrupt_in_found = bulk_in_found = bulk_out_found = false;
3982 - for (i = 0; i < serial->interface->altsetting[0]
3983 - .desc.bNumEndpoints; ++i) {
3984 + for (i = 0; i < alt->desc.bNumEndpoints; ++i) {
3985 struct usb_endpoint_descriptor *endpoint;
3986 int buffer_size;
3987
3988 - endpoint = &serial->interface->altsetting[0].
3989 - endpoint[i].desc;
3990 + endpoint = &alt->endpoint[i].desc;
3991 buffer_size = usb_endpoint_maxp(endpoint);
3992 if (!interrupt_in_found &&
3993 (usb_endpoint_is_int_in(endpoint))) {
3994 diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
3995 index 597bc550034f..a6999042e7ad 100644
3996 --- a/drivers/usb/storage/uas.c
3997 +++ b/drivers/usb/storage/uas.c
3998 @@ -832,6 +832,10 @@ static int uas_slave_configure(struct scsi_device *sdev)
3999 sdev->wce_default_on = 1;
4000 }
4001
4002 + /* Some disks cannot handle READ_CAPACITY_16 */
4003 + if (devinfo->flags & US_FL_NO_READ_CAPACITY_16)
4004 + sdev->no_read_capacity_16 = 1;
4005 +
4006 /*
4007 * Some disks return the total number of blocks in response
4008 * to READ CAPACITY rather than the highest block number.
4009 @@ -840,6 +844,12 @@ static int uas_slave_configure(struct scsi_device *sdev)
4010 if (devinfo->flags & US_FL_FIX_CAPACITY)
4011 sdev->fix_capacity = 1;
4012
4013 + /*
4014 + * in some cases we have to guess
4015 + */
4016 + if (devinfo->flags & US_FL_CAPACITY_HEURISTICS)
4017 + sdev->guess_capacity = 1;
4018 +
4019 /*
4020 * Some devices don't like MODE SENSE with page=0x3f,
4021 * which is the command used for checking if a device
4022 diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c
4023 index 1c46045b0e7f..94594dc63c41 100644
4024 --- a/drivers/vfio/pci/vfio_pci_intrs.c
4025 +++ b/drivers/vfio/pci/vfio_pci_intrs.c
4026 @@ -297,8 +297,8 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev,
4027 irq = pci_irq_vector(pdev, vector);
4028
4029 if (vdev->ctx[vector].trigger) {
4030 - free_irq(irq, vdev->ctx[vector].trigger);
4031 irq_bypass_unregister_producer(&vdev->ctx[vector].producer);
4032 + free_irq(irq, vdev->ctx[vector].trigger);
4033 kfree(vdev->ctx[vector].name);
4034 eventfd_ctx_put(vdev->ctx[vector].trigger);
4035 vdev->ctx[vector].trigger = NULL;
4036 diff --git a/drivers/video/hdmi.c b/drivers/video/hdmi.c
4037 index b73520aaf697..2e325fea4446 100644
4038 --- a/drivers/video/hdmi.c
4039 +++ b/drivers/video/hdmi.c
4040 @@ -1032,12 +1032,12 @@ static int hdmi_avi_infoframe_unpack(struct hdmi_avi_infoframe *frame,
4041 if (ptr[0] & 0x10)
4042 frame->active_aspect = ptr[1] & 0xf;
4043 if (ptr[0] & 0x8) {
4044 - frame->top_bar = (ptr[5] << 8) + ptr[6];
4045 - frame->bottom_bar = (ptr[7] << 8) + ptr[8];
4046 + frame->top_bar = (ptr[6] << 8) | ptr[5];
4047 + frame->bottom_bar = (ptr[8] << 8) | ptr[7];
4048 }
4049 if (ptr[0] & 0x4) {
4050 - frame->left_bar = (ptr[9] << 8) + ptr[10];
4051 - frame->right_bar = (ptr[11] << 8) + ptr[12];
4052 + frame->left_bar = (ptr[10] << 8) | ptr[9];
4053 + frame->right_bar = (ptr[12] << 8) | ptr[11];
4054 }
4055 frame->scan_mode = ptr[0] & 0x3;
4056
4057 diff --git a/drivers/virtio/virtio_balloon.c b/drivers/virtio/virtio_balloon.c
4058 index 30076956a096..4e64a3befa35 100644
4059 --- a/drivers/virtio/virtio_balloon.c
4060 +++ b/drivers/virtio/virtio_balloon.c
4061 @@ -482,6 +482,17 @@ static int virtballoon_migratepage(struct balloon_dev_info *vb_dev_info,
4062
4063 get_page(newpage); /* balloon reference */
4064
4065 + /*
4066 + * When we migrate a page to a different zone and adjusted the
4067 + * managed page count when inflating, we have to fixup the count of
4068 + * both involved zones.
4069 + */
4070 + if (!virtio_has_feature(vb->vdev, VIRTIO_BALLOON_F_DEFLATE_ON_OOM) &&
4071 + page_zone(page) != page_zone(newpage)) {
4072 + adjust_managed_page_count(page, 1);
4073 + adjust_managed_page_count(newpage, -1);
4074 + }
4075 +
4076 /* balloon's page migration 1st step -- inflate "newpage" */
4077 spin_lock_irqsave(&vb_dev_info->pages_lock, flags);
4078 balloon_page_insert(vb_dev_info, newpage);
4079 diff --git a/fs/autofs4/expire.c b/fs/autofs4/expire.c
4080 index 2e1f50e467f1..02f0d373adbf 100644
4081 --- a/fs/autofs4/expire.c
4082 +++ b/fs/autofs4/expire.c
4083 @@ -469,9 +469,10 @@ struct dentry *autofs4_expire_indirect(struct super_block *sb,
4084 */
4085 flags &= ~AUTOFS_EXP_LEAVES;
4086 found = should_expire(expired, mnt, timeout, how);
4087 - if (!found || found != expired)
4088 - /* Something has changed, continue */
4089 + if (found != expired) { // something has changed, continue
4090 + dput(found);
4091 goto next;
4092 + }
4093
4094 if (expired != dentry)
4095 dput(dentry);
4096 diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
4097 index 6cdf27325576..03661b744eaf 100644
4098 --- a/fs/btrfs/file.c
4099 +++ b/fs/btrfs/file.c
4100 @@ -1555,6 +1555,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
4101 break;
4102 }
4103
4104 + only_release_metadata = false;
4105 sector_offset = pos & (root->sectorsize - 1);
4106 reserve_bytes = round_up(write_bytes + sector_offset,
4107 root->sectorsize);
4108 @@ -1704,7 +1705,6 @@ again:
4109 set_extent_bit(&BTRFS_I(inode)->io_tree, lockstart,
4110 lockend, EXTENT_NORESERVE, NULL,
4111 NULL, GFP_NOFS);
4112 - only_release_metadata = false;
4113 }
4114
4115 btrfs_drop_pages(pages, num_pages);
4116 diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
4117 index 69a3c11af9d4..a84a1ceb260a 100644
4118 --- a/fs/btrfs/free-space-cache.c
4119 +++ b/fs/btrfs/free-space-cache.c
4120 @@ -391,6 +391,12 @@ static int io_ctl_prepare_pages(struct btrfs_io_ctl *io_ctl, struct inode *inode
4121 if (uptodate && !PageUptodate(page)) {
4122 btrfs_readpage(NULL, page);
4123 lock_page(page);
4124 + if (page->mapping != inode->i_mapping) {
4125 + btrfs_err(BTRFS_I(inode)->root->fs_info,
4126 + "free space cache page truncated");
4127 + io_ctl_drop_pages(io_ctl);
4128 + return -EIO;
4129 + }
4130 if (!PageUptodate(page)) {
4131 btrfs_err(BTRFS_I(inode)->root->fs_info,
4132 "error reading free space cache");
4133 diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
4134 index 1b1a9e35e082..80937c5ca477 100644
4135 --- a/fs/btrfs/inode.c
4136 +++ b/fs/btrfs/inode.c
4137 @@ -9616,6 +9616,9 @@ static int btrfs_rename_exchange(struct inode *old_dir,
4138 goto out_notrans;
4139 }
4140
4141 + if (dest != root)
4142 + btrfs_record_root_in_trans(trans, dest);
4143 +
4144 /*
4145 * We need to find a free sequence number both in the source and
4146 * in the destination directory for the exchange.
4147 diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
4148 index d9e49705a289..edfc7ba38b33 100644
4149 --- a/fs/btrfs/send.c
4150 +++ b/fs/btrfs/send.c
4151 @@ -36,6 +36,14 @@
4152 #include "transaction.h"
4153 #include "compression.h"
4154
4155 +/*
4156 + * Maximum number of references an extent can have in order for us to attempt to
4157 + * issue clone operations instead of write operations. This currently exists to
4158 + * avoid hitting limitations of the backreference walking code (taking a lot of
4159 + * time and using too much memory for extents with large number of references).
4160 + */
4161 +#define SEND_MAX_EXTENT_REFS 64
4162 +
4163 /*
4164 * A fs_path is a helper to dynamically build path names with unknown size.
4165 * It reallocates the internal buffer on demand.
4166 @@ -1327,6 +1335,7 @@ static int find_extent_clone(struct send_ctx *sctx,
4167 struct clone_root *cur_clone_root;
4168 struct btrfs_key found_key;
4169 struct btrfs_path *tmp_path;
4170 + struct btrfs_extent_item *ei;
4171 int compressed;
4172 u32 i;
4173
4174 @@ -1376,7 +1385,6 @@ static int find_extent_clone(struct send_ctx *sctx,
4175 ret = extent_from_logical(fs_info, disk_byte, tmp_path,
4176 &found_key, &flags);
4177 up_read(&fs_info->commit_root_sem);
4178 - btrfs_release_path(tmp_path);
4179
4180 if (ret < 0)
4181 goto out;
4182 @@ -1385,6 +1393,21 @@ static int find_extent_clone(struct send_ctx *sctx,
4183 goto out;
4184 }
4185
4186 + ei = btrfs_item_ptr(tmp_path->nodes[0], tmp_path->slots[0],
4187 + struct btrfs_extent_item);
4188 + /*
4189 + * Backreference walking (iterate_extent_inodes() below) is currently
4190 + * too expensive when an extent has a large number of references, both
4191 + * in time spent and used memory. So for now just fallback to write
4192 + * operations instead of clone operations when an extent has more than
4193 + * a certain amount of references.
4194 + */
4195 + if (btrfs_extent_refs(tmp_path->nodes[0], ei) > SEND_MAX_EXTENT_REFS) {
4196 + ret = -ENOENT;
4197 + goto out;
4198 + }
4199 + btrfs_release_path(tmp_path);
4200 +
4201 /*
4202 * Setup the clone roots.
4203 */
4204 diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h
4205 index 663d66828cca..96c1b847def6 100644
4206 --- a/fs/btrfs/volumes.h
4207 +++ b/fs/btrfs/volumes.h
4208 @@ -312,7 +312,6 @@ struct btrfs_bio {
4209 u64 map_type; /* get from map_lookup->type */
4210 bio_end_io_t *end_io;
4211 struct bio *orig_bio;
4212 - unsigned long flags;
4213 void *private;
4214 atomic_t error;
4215 int max_errors;
4216 diff --git a/fs/cifs/file.c b/fs/cifs/file.c
4217 index 1c3f262d9c4d..09d83275c20b 100644
4218 --- a/fs/cifs/file.c
4219 +++ b/fs/cifs/file.c
4220 @@ -312,9 +312,6 @@ cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
4221 INIT_LIST_HEAD(&fdlocks->locks);
4222 fdlocks->cfile = cfile;
4223 cfile->llist = fdlocks;
4224 - cifs_down_write(&cinode->lock_sem);
4225 - list_add(&fdlocks->llist, &cinode->llist);
4226 - up_write(&cinode->lock_sem);
4227
4228 cfile->count = 1;
4229 cfile->pid = current->tgid;
4230 @@ -338,6 +335,10 @@ cifs_new_fileinfo(struct cifs_fid *fid, struct file *file,
4231 oplock = 0;
4232 }
4233
4234 + cifs_down_write(&cinode->lock_sem);
4235 + list_add(&fdlocks->llist, &cinode->llist);
4236 + up_write(&cinode->lock_sem);
4237 +
4238 spin_lock(&tcon->open_file_lock);
4239 if (fid->pending_open->oplock != CIFS_OPLOCK_NO_CHANGE && oplock)
4240 oplock = fid->pending_open->oplock;
4241 @@ -721,6 +722,13 @@ cifs_reopen_file(struct cifsFileInfo *cfile, bool can_flush)
4242 if (backup_cred(cifs_sb))
4243 create_options |= CREATE_OPEN_BACKUP_INTENT;
4244
4245 + /* O_SYNC also has bit for O_DSYNC so following check picks up either */
4246 + if (cfile->f_flags & O_SYNC)
4247 + create_options |= CREATE_WRITE_THROUGH;
4248 +
4249 + if (cfile->f_flags & O_DIRECT)
4250 + create_options |= CREATE_NO_BUFFER;
4251 +
4252 if (server->ops->get_lease_key)
4253 server->ops->get_lease_key(inode, &cfile->fid);
4254
4255 diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
4256 index 9994d15a32fc..7b7b47e26dbd 100644
4257 --- a/fs/cifs/smb2misc.c
4258 +++ b/fs/cifs/smb2misc.c
4259 @@ -617,10 +617,10 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
4260 spin_lock(&cifs_tcp_ses_lock);
4261 list_for_each(tmp, &server->smb_ses_list) {
4262 ses = list_entry(tmp, struct cifs_ses, smb_ses_list);
4263 +
4264 list_for_each(tmp1, &ses->tcon_list) {
4265 tcon = list_entry(tmp1, struct cifs_tcon, tcon_list);
4266
4267 - cifs_stats_inc(&tcon->stats.cifs_stats.num_oplock_brks);
4268 spin_lock(&tcon->open_file_lock);
4269 list_for_each(tmp2, &tcon->openFileList) {
4270 cfile = list_entry(tmp2, struct cifsFileInfo,
4271 @@ -632,6 +632,8 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
4272 continue;
4273
4274 cifs_dbg(FYI, "file id match, oplock break\n");
4275 + cifs_stats_inc(
4276 + &tcon->stats.cifs_stats.num_oplock_brks);
4277 cinode = CIFS_I(d_inode(cfile->dentry));
4278 spin_lock(&cfile->file_info_lock);
4279 if (!CIFS_CACHE_WRITE(cinode) &&
4280 @@ -664,9 +666,6 @@ smb2_is_valid_oplock_break(char *buffer, struct TCP_Server_Info *server)
4281 return true;
4282 }
4283 spin_unlock(&tcon->open_file_lock);
4284 - spin_unlock(&cifs_tcp_ses_lock);
4285 - cifs_dbg(FYI, "No matching file for oplock break\n");
4286 - return true;
4287 }
4288 }
4289 spin_unlock(&cifs_tcp_ses_lock);
4290 diff --git a/fs/dlm/lockspace.c b/fs/dlm/lockspace.c
4291 index 30e4e01db35a..b14bb2c46042 100644
4292 --- a/fs/dlm/lockspace.c
4293 +++ b/fs/dlm/lockspace.c
4294 @@ -800,6 +800,7 @@ static int release_lockspace(struct dlm_ls *ls, int force)
4295
4296 dlm_delete_debug_file(ls);
4297
4298 + idr_destroy(&ls->ls_recover_idr);
4299 kfree(ls->ls_recover_buf);
4300
4301 /*
4302 diff --git a/fs/dlm/memory.c b/fs/dlm/memory.c
4303 index 7cd24bccd4fe..37be29f21d04 100644
4304 --- a/fs/dlm/memory.c
4305 +++ b/fs/dlm/memory.c
4306 @@ -38,10 +38,8 @@ int __init dlm_memory_init(void)
4307
4308 void dlm_memory_exit(void)
4309 {
4310 - if (lkb_cache)
4311 - kmem_cache_destroy(lkb_cache);
4312 - if (rsb_cache)
4313 - kmem_cache_destroy(rsb_cache);
4314 + kmem_cache_destroy(lkb_cache);
4315 + kmem_cache_destroy(rsb_cache);
4316 }
4317
4318 char *dlm_allocate_lvb(struct dlm_ls *ls)
4319 @@ -86,8 +84,7 @@ void dlm_free_lkb(struct dlm_lkb *lkb)
4320 struct dlm_user_args *ua;
4321 ua = lkb->lkb_ua;
4322 if (ua) {
4323 - if (ua->lksb.sb_lvbptr)
4324 - kfree(ua->lksb.sb_lvbptr);
4325 + kfree(ua->lksb.sb_lvbptr);
4326 kfree(ua);
4327 }
4328 }
4329 diff --git a/fs/dlm/user.c b/fs/dlm/user.c
4330 index 57f2aacec97f..bb0d307deadd 100644
4331 --- a/fs/dlm/user.c
4332 +++ b/fs/dlm/user.c
4333 @@ -25,6 +25,7 @@
4334 #include "lvb_table.h"
4335 #include "user.h"
4336 #include "ast.h"
4337 +#include "config.h"
4338
4339 static const char name_prefix[] = "dlm";
4340 static const struct file_operations device_fops;
4341 @@ -402,7 +403,7 @@ static int device_create_lockspace(struct dlm_lspace_params *params)
4342 if (!capable(CAP_SYS_ADMIN))
4343 return -EPERM;
4344
4345 - error = dlm_new_lockspace(params->name, NULL, params->flags,
4346 + error = dlm_new_lockspace(params->name, dlm_config.ci_cluster_name, params->flags,
4347 DLM_USER_LVB_LEN, NULL, NULL, NULL,
4348 &lockspace);
4349 if (error)
4350 diff --git a/fs/exportfs/expfs.c b/fs/exportfs/expfs.c
4351 index 7a7bba7c2328..3706939e5dd5 100644
4352 --- a/fs/exportfs/expfs.c
4353 +++ b/fs/exportfs/expfs.c
4354 @@ -506,26 +506,33 @@ struct dentry *exportfs_decode_fh(struct vfsmount *mnt, struct fid *fid,
4355 * inode is actually connected to the parent.
4356 */
4357 err = exportfs_get_name(mnt, target_dir, nbuf, result);
4358 - if (!err) {
4359 - inode_lock(target_dir->d_inode);
4360 - nresult = lookup_one_len(nbuf, target_dir,
4361 - strlen(nbuf));
4362 - inode_unlock(target_dir->d_inode);
4363 - if (!IS_ERR(nresult)) {
4364 - if (nresult->d_inode) {
4365 - dput(result);
4366 - result = nresult;
4367 - } else
4368 - dput(nresult);
4369 - }
4370 + if (err) {
4371 + dput(target_dir);
4372 + goto err_result;
4373 }
4374
4375 + inode_lock(target_dir->d_inode);
4376 + nresult = lookup_one_len(nbuf, target_dir, strlen(nbuf));
4377 + if (!IS_ERR(nresult)) {
4378 + if (unlikely(nresult->d_inode != result->d_inode)) {
4379 + dput(nresult);
4380 + nresult = ERR_PTR(-ESTALE);
4381 + }
4382 + }
4383 + inode_unlock(target_dir->d_inode);
4384 /*
4385 * At this point we are done with the parent, but it's pinned
4386 * by the child dentry anyway.
4387 */
4388 dput(target_dir);
4389
4390 + if (IS_ERR(nresult)) {
4391 + err = PTR_ERR(nresult);
4392 + goto err_result;
4393 + }
4394 + dput(result);
4395 + result = nresult;
4396 +
4397 /*
4398 * And finally make sure the dentry is actually acceptable
4399 * to NFSD.
4400 diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c
4401 index 85449a6ddc56..fe664949d442 100644
4402 --- a/fs/ext2/inode.c
4403 +++ b/fs/ext2/inode.c
4404 @@ -697,10 +697,13 @@ static int ext2_get_blocks(struct inode *inode,
4405 if (!partial) {
4406 count++;
4407 mutex_unlock(&ei->truncate_mutex);
4408 - if (err)
4409 - goto cleanup;
4410 goto got_it;
4411 }
4412 +
4413 + if (err) {
4414 + mutex_unlock(&ei->truncate_mutex);
4415 + goto cleanup;
4416 + }
4417 }
4418
4419 /*
4420 diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
4421 index a73056e06bde..00c320e2ba1e 100644
4422 --- a/fs/ext4/inode.c
4423 +++ b/fs/ext4/inode.c
4424 @@ -5080,11 +5080,15 @@ static void ext4_wait_for_tail_page_commit(struct inode *inode)
4425
4426 offset = inode->i_size & (PAGE_SIZE - 1);
4427 /*
4428 - * All buffers in the last page remain valid? Then there's nothing to
4429 - * do. We do the check mainly to optimize the common PAGE_SIZE ==
4430 - * blocksize case
4431 + * If the page is fully truncated, we don't need to wait for any commit
4432 + * (and we even should not as __ext4_journalled_invalidatepage() may
4433 + * strip all buffers from the page but keep the page dirty which can then
4434 + * confuse e.g. concurrent ext4_writepage() seeing dirty page without
4435 + * buffers). Also we don't need to wait for any commit if all buffers in
4436 + * the page remain valid. This is most beneficial for the common case of
4437 + * blocksize == PAGESIZE.
4438 */
4439 - if (offset > PAGE_SIZE - i_blocksize(inode))
4440 + if (!offset || offset > (PAGE_SIZE - i_blocksize(inode)))
4441 return;
4442 while (1) {
4443 page = find_lock_page(inode->i_mapping,
4444 diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
4445 index 1d9fec9c714b..9af23f436558 100644
4446 --- a/fs/fuse/dir.c
4447 +++ b/fs/fuse/dir.c
4448 @@ -234,7 +234,8 @@ static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags)
4449 kfree(forget);
4450 if (ret == -ENOMEM)
4451 goto out;
4452 - if (ret || (outarg.attr.mode ^ inode->i_mode) & S_IFMT)
4453 + if (ret || fuse_invalid_attr(&outarg.attr) ||
4454 + (outarg.attr.mode ^ inode->i_mode) & S_IFMT)
4455 goto invalid;
4456
4457 forget_all_cached_acls(inode);
4458 @@ -297,6 +298,12 @@ int fuse_valid_type(int m)
4459 S_ISBLK(m) || S_ISFIFO(m) || S_ISSOCK(m);
4460 }
4461
4462 +bool fuse_invalid_attr(struct fuse_attr *attr)
4463 +{
4464 + return !fuse_valid_type(attr->mode) ||
4465 + attr->size > LLONG_MAX;
4466 +}
4467 +
4468 int fuse_lookup_name(struct super_block *sb, u64 nodeid, const struct qstr *name,
4469 struct fuse_entry_out *outarg, struct inode **inode)
4470 {
4471 @@ -328,7 +335,7 @@ int fuse_lookup_name(struct super_block *sb, u64 nodeid, const struct qstr *name
4472 err = -EIO;
4473 if (!outarg->nodeid)
4474 goto out_put_forget;
4475 - if (!fuse_valid_type(outarg->attr.mode))
4476 + if (fuse_invalid_attr(&outarg->attr))
4477 goto out_put_forget;
4478
4479 *inode = fuse_iget(sb, outarg->nodeid, outarg->generation,
4480 @@ -451,7 +458,8 @@ static int fuse_create_open(struct inode *dir, struct dentry *entry,
4481 goto out_free_ff;
4482
4483 err = -EIO;
4484 - if (!S_ISREG(outentry.attr.mode) || invalid_nodeid(outentry.nodeid))
4485 + if (!S_ISREG(outentry.attr.mode) || invalid_nodeid(outentry.nodeid) ||
4486 + fuse_invalid_attr(&outentry.attr))
4487 goto out_free_ff;
4488
4489 ff->fh = outopen.fh;
4490 @@ -557,7 +565,7 @@ static int create_new_entry(struct fuse_conn *fc, struct fuse_args *args,
4491 goto out_put_forget_req;
4492
4493 err = -EIO;
4494 - if (invalid_nodeid(outarg.nodeid))
4495 + if (invalid_nodeid(outarg.nodeid) || fuse_invalid_attr(&outarg.attr))
4496 goto out_put_forget_req;
4497
4498 if ((outarg.attr.mode ^ mode) & S_IFMT)
4499 @@ -830,7 +838,8 @@ static int fuse_link(struct dentry *entry, struct inode *newdir,
4500
4501 spin_lock(&fc->lock);
4502 fi->attr_version = ++fc->attr_version;
4503 - inc_nlink(inode);
4504 + if (likely(inode->i_nlink < UINT_MAX))
4505 + inc_nlink(inode);
4506 spin_unlock(&fc->lock);
4507 fuse_invalidate_attr(inode);
4508 fuse_update_ctime(inode);
4509 @@ -910,7 +919,8 @@ static int fuse_do_getattr(struct inode *inode, struct kstat *stat,
4510 args.out.args[0].value = &outarg;
4511 err = fuse_simple_request(fc, &args);
4512 if (!err) {
4513 - if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
4514 + if (fuse_invalid_attr(&outarg.attr) ||
4515 + (inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
4516 make_bad_inode(inode);
4517 err = -EIO;
4518 } else {
4519 @@ -1218,7 +1228,7 @@ static int fuse_direntplus_link(struct file *file,
4520
4521 if (invalid_nodeid(o->nodeid))
4522 return -EIO;
4523 - if (!fuse_valid_type(o->attr.mode))
4524 + if (fuse_invalid_attr(&o->attr))
4525 return -EIO;
4526
4527 fc = get_fuse_conn(dir);
4528 @@ -1695,7 +1705,8 @@ int fuse_do_setattr(struct dentry *dentry, struct iattr *attr,
4529 goto error;
4530 }
4531
4532 - if ((inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
4533 + if (fuse_invalid_attr(&outarg.attr) ||
4534 + (inode->i_mode ^ outarg.attr.mode) & S_IFMT) {
4535 make_bad_inode(inode);
4536 err = -EIO;
4537 goto error;
4538 diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
4539 index 1c905c7666de..f84dd6d87d90 100644
4540 --- a/fs/fuse/fuse_i.h
4541 +++ b/fs/fuse/fuse_i.h
4542 @@ -898,6 +898,8 @@ void fuse_ctl_remove_conn(struct fuse_conn *fc);
4543 */
4544 int fuse_valid_type(int m);
4545
4546 +bool fuse_invalid_attr(struct fuse_attr *attr);
4547 +
4548 /**
4549 * Is current process allowed to perform filesystem operation?
4550 */
4551 diff --git a/fs/nfsd/nfs4recover.c b/fs/nfsd/nfs4recover.c
4552 index 66eaeb1e8c2c..dc9586feab31 100644
4553 --- a/fs/nfsd/nfs4recover.c
4554 +++ b/fs/nfsd/nfs4recover.c
4555 @@ -661,7 +661,7 @@ struct cld_net {
4556 struct cld_upcall {
4557 struct list_head cu_list;
4558 struct cld_net *cu_net;
4559 - struct task_struct *cu_task;
4560 + struct completion cu_done;
4561 struct cld_msg cu_msg;
4562 };
4563
4564 @@ -670,23 +670,18 @@ __cld_pipe_upcall(struct rpc_pipe *pipe, struct cld_msg *cmsg)
4565 {
4566 int ret;
4567 struct rpc_pipe_msg msg;
4568 + struct cld_upcall *cup = container_of(cmsg, struct cld_upcall, cu_msg);
4569
4570 memset(&msg, 0, sizeof(msg));
4571 msg.data = cmsg;
4572 msg.len = sizeof(*cmsg);
4573
4574 - /*
4575 - * Set task state before we queue the upcall. That prevents
4576 - * wake_up_process in the downcall from racing with schedule.
4577 - */
4578 - set_current_state(TASK_UNINTERRUPTIBLE);
4579 ret = rpc_queue_upcall(pipe, &msg);
4580 if (ret < 0) {
4581 - set_current_state(TASK_RUNNING);
4582 goto out;
4583 }
4584
4585 - schedule();
4586 + wait_for_completion(&cup->cu_done);
4587
4588 if (msg.errno < 0)
4589 ret = msg.errno;
4590 @@ -753,7 +748,7 @@ cld_pipe_downcall(struct file *filp, const char __user *src, size_t mlen)
4591 if (copy_from_user(&cup->cu_msg, src, mlen) != 0)
4592 return -EFAULT;
4593
4594 - wake_up_process(cup->cu_task);
4595 + complete(&cup->cu_done);
4596 return mlen;
4597 }
4598
4599 @@ -768,7 +763,7 @@ cld_pipe_destroy_msg(struct rpc_pipe_msg *msg)
4600 if (msg->errno >= 0)
4601 return;
4602
4603 - wake_up_process(cup->cu_task);
4604 + complete(&cup->cu_done);
4605 }
4606
4607 static const struct rpc_pipe_ops cld_upcall_ops = {
4608 @@ -899,7 +894,7 @@ restart_search:
4609 goto restart_search;
4610 }
4611 }
4612 - new->cu_task = current;
4613 + init_completion(&new->cu_done);
4614 new->cu_msg.cm_vers = CLD_UPCALL_VERSION;
4615 put_unaligned(cn->cn_xid++, &new->cu_msg.cm_xid);
4616 new->cu_net = cn;
4617 diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
4618 index 8f0b19a3ca81..b8cd100cfcd6 100644
4619 --- a/fs/nfsd/vfs.c
4620 +++ b/fs/nfsd/vfs.c
4621 @@ -395,10 +395,23 @@ nfsd_setattr(struct svc_rqst *rqstp, struct svc_fh *fhp, struct iattr *iap,
4622 bool get_write_count;
4623 bool size_change = (iap->ia_valid & ATTR_SIZE);
4624
4625 - if (iap->ia_valid & (ATTR_ATIME | ATTR_MTIME | ATTR_SIZE))
4626 + if (iap->ia_valid & ATTR_SIZE) {
4627 accmode |= NFSD_MAY_WRITE|NFSD_MAY_OWNER_OVERRIDE;
4628 - if (iap->ia_valid & ATTR_SIZE)
4629 ftype = S_IFREG;
4630 + }
4631 +
4632 + /*
4633 + * If utimes(2) and friends are called with times not NULL, we should
4634 + * not set NFSD_MAY_WRITE bit. Otherwise fh_verify->nfsd_permission
4635 + * will return EACCESS, when the caller's effective UID does not match
4636 + * the owner of the file, and the caller is not privileged. In this
4637 + * situation, we should return EPERM(notify_change will return this).
4638 + */
4639 + if (iap->ia_valid & (ATTR_ATIME | ATTR_MTIME)) {
4640 + accmode |= NFSD_MAY_OWNER_OVERRIDE;
4641 + if (!(iap->ia_valid & (ATTR_ATIME_SET | ATTR_MTIME_SET)))
4642 + accmode |= NFSD_MAY_WRITE;
4643 + }
4644
4645 /* Callers that do fh_verify should do the fh_want_write: */
4646 get_write_count = !fhp->fh_dentry;
4647 diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
4648 index 87e577a49b0d..542fa21aeaa9 100644
4649 --- a/fs/ocfs2/quota_global.c
4650 +++ b/fs/ocfs2/quota_global.c
4651 @@ -714,7 +714,7 @@ static int ocfs2_release_dquot(struct dquot *dquot)
4652
4653 mutex_lock(&dquot->dq_lock);
4654 /* Check whether we are not racing with some other dqget() */
4655 - if (atomic_read(&dquot->dq_count) > 1)
4656 + if (dquot_is_busy(dquot))
4657 goto out;
4658 /* Running from downconvert thread? Postpone quota processing to wq */
4659 if (current == osb->dc_task) {
4660 diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
4661 index f9246ac4eef8..a7c6611e0056 100644
4662 --- a/fs/quota/dquot.c
4663 +++ b/fs/quota/dquot.c
4664 @@ -479,7 +479,7 @@ int dquot_release(struct dquot *dquot)
4665
4666 mutex_lock(&dquot->dq_lock);
4667 /* Check whether we are not racing with some other dqget() */
4668 - if (atomic_read(&dquot->dq_count) > 1)
4669 + if (dquot_is_busy(dquot))
4670 goto out_dqlock;
4671 mutex_lock(&dqopt->dqio_mutex);
4672 if (dqopt->ops[dquot->dq_id.type]->release_dqblk) {
4673 @@ -611,7 +611,7 @@ EXPORT_SYMBOL(dquot_scan_active);
4674 /* Write all dquot structures to quota files */
4675 int dquot_writeback_dquots(struct super_block *sb, int type)
4676 {
4677 - struct list_head *dirty;
4678 + struct list_head dirty;
4679 struct dquot *dquot;
4680 struct quota_info *dqopt = sb_dqopt(sb);
4681 int cnt;
4682 @@ -624,9 +624,10 @@ int dquot_writeback_dquots(struct super_block *sb, int type)
4683 if (!sb_has_quota_active(sb, cnt))
4684 continue;
4685 spin_lock(&dq_list_lock);
4686 - dirty = &dqopt->info[cnt].dqi_dirty_list;
4687 - while (!list_empty(dirty)) {
4688 - dquot = list_first_entry(dirty, struct dquot,
4689 + /* Move list away to avoid livelock. */
4690 + list_replace_init(&dqopt->info[cnt].dqi_dirty_list, &dirty);
4691 + while (!list_empty(&dirty)) {
4692 + dquot = list_first_entry(&dirty, struct dquot,
4693 dq_dirty);
4694 /* Dirty and inactive can be only bad dquot... */
4695 if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
4696 diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
4697 index bd4c727f4610..9531b6c18ac7 100644
4698 --- a/fs/reiserfs/inode.c
4699 +++ b/fs/reiserfs/inode.c
4700 @@ -2102,6 +2102,15 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
4701 goto out_inserted_sd;
4702 }
4703
4704 + /*
4705 + * Mark it private if we're creating the privroot
4706 + * or something under it.
4707 + */
4708 + if (IS_PRIVATE(dir) || dentry == REISERFS_SB(sb)->priv_root) {
4709 + inode->i_flags |= S_PRIVATE;
4710 + inode->i_opflags &= ~IOP_XATTR;
4711 + }
4712 +
4713 if (reiserfs_posixacl(inode->i_sb)) {
4714 reiserfs_write_unlock(inode->i_sb);
4715 retval = reiserfs_inherit_default_acl(th, dir, dentry, inode);
4716 @@ -2116,8 +2125,7 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
4717 reiserfs_warning(inode->i_sb, "jdm-13090",
4718 "ACLs aren't enabled in the fs, "
4719 "but vfs thinks they are!");
4720 - } else if (IS_PRIVATE(dir))
4721 - inode->i_flags |= S_PRIVATE;
4722 + }
4723
4724 if (security->name) {
4725 reiserfs_write_unlock(inode->i_sb);
4726 diff --git a/fs/reiserfs/namei.c b/fs/reiserfs/namei.c
4727 index 1ec728cf82d1..1c900f322089 100644
4728 --- a/fs/reiserfs/namei.c
4729 +++ b/fs/reiserfs/namei.c
4730 @@ -377,10 +377,13 @@ static struct dentry *reiserfs_lookup(struct inode *dir, struct dentry *dentry,
4731
4732 /*
4733 * Propagate the private flag so we know we're
4734 - * in the priv tree
4735 + * in the priv tree. Also clear IOP_XATTR
4736 + * since we don't have xattrs on xattr files.
4737 */
4738 - if (IS_PRIVATE(dir))
4739 + if (IS_PRIVATE(dir)) {
4740 inode->i_flags |= S_PRIVATE;
4741 + inode->i_opflags &= ~IOP_XATTR;
4742 + }
4743 }
4744 reiserfs_write_unlock(dir->i_sb);
4745 if (retval == IO_ERROR) {
4746 diff --git a/fs/reiserfs/reiserfs.h b/fs/reiserfs/reiserfs.h
4747 index d920a646b578..3e78a394fdb8 100644
4748 --- a/fs/reiserfs/reiserfs.h
4749 +++ b/fs/reiserfs/reiserfs.h
4750 @@ -1167,6 +1167,8 @@ static inline int bmap_would_wrap(unsigned bmap_nr)
4751 return bmap_nr > ((1LL << 16) - 1);
4752 }
4753
4754 +extern const struct xattr_handler *reiserfs_xattr_handlers[];
4755 +
4756 /*
4757 * this says about version of key of all items (but stat data) the
4758 * object consists of
4759 diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
4760 index dec6c93044fa..cd2d555b3a6d 100644
4761 --- a/fs/reiserfs/super.c
4762 +++ b/fs/reiserfs/super.c
4763 @@ -2026,6 +2026,8 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent)
4764 if (replay_only(s))
4765 goto error_unlocked;
4766
4767 + s->s_xattr = reiserfs_xattr_handlers;
4768 +
4769 if (bdev_read_only(s->s_bdev) && !(s->s_flags & MS_RDONLY)) {
4770 SWARN(silent, s, "clm-7000",
4771 "Detected readonly device, marking FS readonly");
4772 diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c
4773 index 9e313fc7fdc7..dbc2ada9884f 100644
4774 --- a/fs/reiserfs/xattr.c
4775 +++ b/fs/reiserfs/xattr.c
4776 @@ -121,13 +121,13 @@ static struct dentry *open_xa_root(struct super_block *sb, int flags)
4777 struct dentry *xaroot;
4778
4779 if (d_really_is_negative(privroot))
4780 - return ERR_PTR(-ENODATA);
4781 + return ERR_PTR(-EOPNOTSUPP);
4782
4783 inode_lock_nested(d_inode(privroot), I_MUTEX_XATTR);
4784
4785 xaroot = dget(REISERFS_SB(sb)->xattr_root);
4786 if (!xaroot)
4787 - xaroot = ERR_PTR(-ENODATA);
4788 + xaroot = ERR_PTR(-EOPNOTSUPP);
4789 else if (d_really_is_negative(xaroot)) {
4790 int err = -ENODATA;
4791
4792 @@ -609,6 +609,10 @@ int reiserfs_xattr_set(struct inode *inode, const char *name,
4793 int error, error2;
4794 size_t jbegin_count = reiserfs_xattr_nblocks(inode, buffer_size);
4795
4796 + /* Check before we start a transaction and then do nothing. */
4797 + if (!d_really_is_positive(REISERFS_SB(inode->i_sb)->priv_root))
4798 + return -EOPNOTSUPP;
4799 +
4800 if (!(flags & XATTR_REPLACE))
4801 jbegin_count += reiserfs_xattr_jcreate_nblocks(inode);
4802
4803 @@ -831,8 +835,7 @@ ssize_t reiserfs_listxattr(struct dentry * dentry, char *buffer, size_t size)
4804 if (d_really_is_negative(dentry))
4805 return -EINVAL;
4806
4807 - if (!dentry->d_sb->s_xattr ||
4808 - get_inode_sd_version(d_inode(dentry)) == STAT_DATA_V1)
4809 + if (get_inode_sd_version(d_inode(dentry)) == STAT_DATA_V1)
4810 return -EOPNOTSUPP;
4811
4812 dir = open_xa_dir(d_inode(dentry), XATTR_REPLACE);
4813 @@ -872,6 +875,7 @@ static int create_privroot(struct dentry *dentry)
4814 }
4815
4816 d_inode(dentry)->i_flags |= S_PRIVATE;
4817 + d_inode(dentry)->i_opflags &= ~IOP_XATTR;
4818 reiserfs_info(dentry->d_sb, "Created %s - reserved for xattr "
4819 "storage.\n", PRIVROOT_NAME);
4820
4821 @@ -885,7 +889,7 @@ static int create_privroot(struct dentry *dentry) { return 0; }
4822 #endif
4823
4824 /* Actual operations that are exported to VFS-land */
4825 -static const struct xattr_handler *reiserfs_xattr_handlers[] = {
4826 +const struct xattr_handler *reiserfs_xattr_handlers[] = {
4827 #ifdef CONFIG_REISERFS_FS_XATTR
4828 &reiserfs_xattr_user_handler,
4829 &reiserfs_xattr_trusted_handler,
4830 @@ -956,8 +960,10 @@ int reiserfs_lookup_privroot(struct super_block *s)
4831 if (!IS_ERR(dentry)) {
4832 REISERFS_SB(s)->priv_root = dentry;
4833 d_set_d_op(dentry, &xattr_lookup_poison_ops);
4834 - if (d_really_is_positive(dentry))
4835 + if (d_really_is_positive(dentry)) {
4836 d_inode(dentry)->i_flags |= S_PRIVATE;
4837 + d_inode(dentry)->i_opflags &= ~IOP_XATTR;
4838 + }
4839 } else
4840 err = PTR_ERR(dentry);
4841 inode_unlock(d_inode(s->s_root));
4842 @@ -986,7 +992,6 @@ int reiserfs_xattr_init(struct super_block *s, int mount_flags)
4843 }
4844
4845 if (d_really_is_positive(privroot)) {
4846 - s->s_xattr = reiserfs_xattr_handlers;
4847 inode_lock(d_inode(privroot));
4848 if (!REISERFS_SB(s)->xattr_root) {
4849 struct dentry *dentry;
4850 diff --git a/fs/reiserfs/xattr_acl.c b/fs/reiserfs/xattr_acl.c
4851 index d92a1dc6ee70..1f1fdfd3bc5c 100644
4852 --- a/fs/reiserfs/xattr_acl.c
4853 +++ b/fs/reiserfs/xattr_acl.c
4854 @@ -316,10 +316,8 @@ reiserfs_inherit_default_acl(struct reiserfs_transaction_handle *th,
4855 * would be useless since permissions are ignored, and a pain because
4856 * it introduces locking cycles
4857 */
4858 - if (IS_PRIVATE(dir)) {
4859 - inode->i_flags |= S_PRIVATE;
4860 + if (IS_PRIVATE(inode))
4861 goto apply_umask;
4862 - }
4863
4864 err = posix_acl_create(dir, &inode->i_mode, &default_acl, &acl);
4865 if (err)
4866 diff --git a/include/linux/acpi.h b/include/linux/acpi.h
4867 index 719eb97217a3..5670bb9788bb 100644
4868 --- a/include/linux/acpi.h
4869 +++ b/include/linux/acpi.h
4870 @@ -77,7 +77,7 @@ static inline bool has_acpi_companion(struct device *dev)
4871 static inline void acpi_preset_companion(struct device *dev,
4872 struct acpi_device *parent, u64 addr)
4873 {
4874 - ACPI_COMPANION_SET(dev, acpi_find_child_device(parent, addr, NULL));
4875 + ACPI_COMPANION_SET(dev, acpi_find_child_device(parent, addr, false));
4876 }
4877
4878 static inline const char *acpi_dev_name(struct acpi_device *adev)
4879 diff --git a/include/linux/atalk.h b/include/linux/atalk.h
4880 index af43ed404ff4..4be0e14b38fc 100644
4881 --- a/include/linux/atalk.h
4882 +++ b/include/linux/atalk.h
4883 @@ -107,7 +107,7 @@ static __inline__ struct elapaarp *aarp_hdr(struct sk_buff *skb)
4884 #define AARP_RESOLVE_TIME (10 * HZ)
4885
4886 extern struct datalink_proto *ddp_dl, *aarp_dl;
4887 -extern void aarp_proto_init(void);
4888 +extern int aarp_proto_init(void);
4889
4890 /* Inter module exports */
4891
4892 diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
4893 index 704caae69c42..97f817f4eb78 100644
4894 --- a/include/linux/dma-mapping.h
4895 +++ b/include/linux/dma-mapping.h
4896 @@ -618,8 +618,7 @@ static inline unsigned int dma_get_max_seg_size(struct device *dev)
4897 return SZ_64K;
4898 }
4899
4900 -static inline unsigned int dma_set_max_seg_size(struct device *dev,
4901 - unsigned int size)
4902 +static inline int dma_set_max_seg_size(struct device *dev, unsigned int size)
4903 {
4904 if (dev->dma_parms) {
4905 dev->dma_parms->max_segment_size = size;
4906 diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h
4907 index d073470cb342..344eb873f6f5 100644
4908 --- a/include/linux/jbd2.h
4909 +++ b/include/linux/jbd2.h
4910 @@ -1560,7 +1560,7 @@ static inline int jbd2_space_needed(journal_t *journal)
4911 static inline unsigned long jbd2_log_space_left(journal_t *journal)
4912 {
4913 /* Allow for rounding errors */
4914 - unsigned long free = journal->j_free - 32;
4915 + long free = journal->j_free - 32;
4916
4917 if (journal->j_committing_transaction) {
4918 unsigned long committing = atomic_read(&journal->
4919 @@ -1569,7 +1569,7 @@ static inline unsigned long jbd2_log_space_left(journal_t *journal)
4920 /* Transaction + control blocks */
4921 free -= committing + (committing >> JBD2_CONTROL_BLOCKS_SHIFT);
4922 }
4923 - return free;
4924 + return max_t(long, free, 0);
4925 }
4926
4927 /*
4928 diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
4929 index 13f8052b9ff9..13ddba5e531d 100644
4930 --- a/include/linux/mtd/mtd.h
4931 +++ b/include/linux/mtd/mtd.h
4932 @@ -392,7 +392,7 @@ static inline struct device_node *mtd_get_of_node(struct mtd_info *mtd)
4933 return mtd->dev.of_node;
4934 }
4935
4936 -static inline int mtd_oobavail(struct mtd_info *mtd, struct mtd_oob_ops *ops)
4937 +static inline u32 mtd_oobavail(struct mtd_info *mtd, struct mtd_oob_ops *ops)
4938 {
4939 return ops->mode == MTD_OPS_AUTO_OOB ? mtd->oobavail : mtd->oobsize;
4940 }
4941 diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
4942 index 29ed5977ac04..81c85ba6e2b8 100644
4943 --- a/include/linux/netdevice.h
4944 +++ b/include/linux/netdevice.h
4945 @@ -1730,6 +1730,11 @@ struct net_device {
4946 unsigned char if_port;
4947 unsigned char dma;
4948
4949 + /* Note : dev->mtu is often read without holding a lock.
4950 + * Writers usually hold RTNL.
4951 + * It is recommended to use READ_ONCE() to annotate the reads,
4952 + * and to use WRITE_ONCE() to annotate the writes.
4953 + */
4954 unsigned int mtu;
4955 unsigned short type;
4956 unsigned short hard_header_len;
4957 diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h
4958 index 87733344768c..0a60fe354bc5 100644
4959 --- a/include/linux/quotaops.h
4960 +++ b/include/linux/quotaops.h
4961 @@ -54,6 +54,16 @@ static inline struct dquot *dqgrab(struct dquot *dquot)
4962 atomic_inc(&dquot->dq_count);
4963 return dquot;
4964 }
4965 +
4966 +static inline bool dquot_is_busy(struct dquot *dquot)
4967 +{
4968 + if (test_bit(DQ_MOD_B, &dquot->dq_flags))
4969 + return true;
4970 + if (atomic_read(&dquot->dq_count) > 1)
4971 + return true;
4972 + return false;
4973 +}
4974 +
4975 void dqput(struct dquot *dquot);
4976 int dquot_scan_active(struct super_block *sb,
4977 int (*fn)(struct dquot *dquot, unsigned long priv),
4978 diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h
4979 index 692108222271..bab9236e4367 100644
4980 --- a/include/linux/regulator/consumer.h
4981 +++ b/include/linux/regulator/consumer.h
4982 @@ -479,7 +479,7 @@ static inline unsigned int regulator_get_mode(struct regulator *regulator)
4983
4984 static inline int regulator_set_load(struct regulator *regulator, int load_uA)
4985 {
4986 - return REGULATOR_MODE_NORMAL;
4987 + return 0;
4988 }
4989
4990 static inline int regulator_allow_bypass(struct regulator *regulator,
4991 diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
4992 index eb4f6456521e..cd95b5e395a3 100644
4993 --- a/include/linux/serial_core.h
4994 +++ b/include/linux/serial_core.h
4995 @@ -161,6 +161,7 @@ struct uart_port {
4996 struct console *cons; /* struct console, if any */
4997 #if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(SUPPORT_SYSRQ)
4998 unsigned long sysrq; /* sysrq timeout */
4999 + unsigned int sysrq_ch; /* char for sysrq */
5000 #endif
5001
5002 /* flags must be updated while holding port mutex */
5003 @@ -470,8 +471,42 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch)
5004 }
5005 return 0;
5006 }
5007 +static inline int
5008 +uart_prepare_sysrq_char(struct uart_port *port, unsigned int ch)
5009 +{
5010 + if (port->sysrq) {
5011 + if (ch && time_before(jiffies, port->sysrq)) {
5012 + port->sysrq_ch = ch;
5013 + port->sysrq = 0;
5014 + return 1;
5015 + }
5016 + port->sysrq = 0;
5017 + }
5018 + return 0;
5019 +}
5020 +static inline void
5021 +uart_unlock_and_check_sysrq(struct uart_port *port, unsigned long irqflags)
5022 +{
5023 + int sysrq_ch;
5024 +
5025 + sysrq_ch = port->sysrq_ch;
5026 + port->sysrq_ch = 0;
5027 +
5028 + spin_unlock_irqrestore(&port->lock, irqflags);
5029 +
5030 + if (sysrq_ch)
5031 + handle_sysrq(sysrq_ch);
5032 +}
5033 #else
5034 -#define uart_handle_sysrq_char(port,ch) ({ (void)port; 0; })
5035 +static inline int
5036 +uart_handle_sysrq_char(struct uart_port *port, unsigned int ch) { return 0; }
5037 +static inline int
5038 +uart_prepare_sysrq_char(struct uart_port *port, unsigned int ch) { return 0; }
5039 +static inline void
5040 +uart_unlock_and_check_sysrq(struct uart_port *port, unsigned long irqflags)
5041 +{
5042 + spin_unlock_irqrestore(&port->lock, irqflags);
5043 +}
5044 #endif
5045
5046 /*
5047 diff --git a/include/linux/time.h b/include/linux/time.h
5048 index 4cea09d94208..60fd50559241 100644
5049 --- a/include/linux/time.h
5050 +++ b/include/linux/time.h
5051 @@ -275,4 +275,16 @@ static __always_inline void timespec_add_ns(struct timespec *a, u64 ns)
5052 a->tv_nsec = ns;
5053 }
5054
5055 +/**
5056 + * time_between32 - check if a 32-bit timestamp is within a given time range
5057 + * @t: the time which may be within [l,h]
5058 + * @l: the lower bound of the range
5059 + * @h: the higher bound of the range
5060 + *
5061 + * time_before32(t, l, h) returns true if @l <= @t <= @h. All operands are
5062 + * treated as 32-bit integers.
5063 + *
5064 + * Equivalent to !(time_before32(@t, @l) || time_after32(@t, @h)).
5065 + */
5066 +#define time_between32(t, l, h) ((u32)(h) - (u32)(l) >= (u32)(t) - (u32)(l))
5067 #endif
5068 diff --git a/include/linux/tty.h b/include/linux/tty.h
5069 index fe1b8623a3a1..fe483976b119 100644
5070 --- a/include/linux/tty.h
5071 +++ b/include/linux/tty.h
5072 @@ -356,6 +356,7 @@ struct tty_file_private {
5073 #define TTY_NO_WRITE_SPLIT 17 /* Preserve write boundaries to driver */
5074 #define TTY_HUPPED 18 /* Post driver->hangup() */
5075 #define TTY_HUPPING 19 /* Hangup in progress */
5076 +#define TTY_LDISC_CHANGING 20 /* Change pending - non-block IO */
5077 #define TTY_LDISC_HALTED 22 /* Line discipline is halted */
5078
5079 /* Values for tty->flow_change */
5080 @@ -373,6 +374,12 @@ static inline void tty_set_flow_change(struct tty_struct *tty, int val)
5081 smp_mb();
5082 }
5083
5084 +static inline bool tty_io_nonblock(struct tty_struct *tty, struct file *file)
5085 +{
5086 + return file->f_flags & O_NONBLOCK ||
5087 + test_bit(TTY_LDISC_CHANGING, &tty->flags);
5088 +}
5089 +
5090 static inline bool tty_io_error(struct tty_struct *tty)
5091 {
5092 return test_bit(TTY_IO_ERROR, &tty->flags);
5093 diff --git a/include/math-emu/soft-fp.h b/include/math-emu/soft-fp.h
5094 index 3f284bc03180..5650c1628383 100644
5095 --- a/include/math-emu/soft-fp.h
5096 +++ b/include/math-emu/soft-fp.h
5097 @@ -138,7 +138,7 @@ do { \
5098 _FP_FRAC_ADDI_##wc(X, _FP_WORK_ROUND); \
5099 } while (0)
5100
5101 -#define _FP_ROUND_ZERO(wc, X) 0
5102 +#define _FP_ROUND_ZERO(wc, X) (void)0
5103
5104 #define _FP_ROUND_PINF(wc, X) \
5105 do { \
5106 diff --git a/include/net/ip.h b/include/net/ip.h
5107 index a3c1b9dfc9a1..d577fb5647c5 100644
5108 --- a/include/net/ip.h
5109 +++ b/include/net/ip.h
5110 @@ -620,4 +620,9 @@ extern int sysctl_icmp_msgs_burst;
5111 int ip_misc_proc_init(void);
5112 #endif
5113
5114 +static inline bool inetdev_valid_mtu(unsigned int mtu)
5115 +{
5116 + return likely(mtu >= IPV4_MIN_MTU);
5117 +}
5118 +
5119 #endif /* _IP_H */
5120 diff --git a/include/net/tcp.h b/include/net/tcp.h
5121 index 23814d997e86..0e3a88f808c6 100644
5122 --- a/include/net/tcp.h
5123 +++ b/include/net/tcp.h
5124 @@ -494,19 +494,27 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb);
5125 */
5126 static inline void tcp_synq_overflow(const struct sock *sk)
5127 {
5128 - unsigned long last_overflow = tcp_sk(sk)->rx_opt.ts_recent_stamp;
5129 + unsigned long last_overflow = READ_ONCE(tcp_sk(sk)->rx_opt.ts_recent_stamp);
5130 unsigned long now = jiffies;
5131
5132 - if (time_after(now, last_overflow + HZ))
5133 - tcp_sk(sk)->rx_opt.ts_recent_stamp = now;
5134 + if (!time_between32(now, last_overflow, last_overflow + HZ))
5135 + WRITE_ONCE(tcp_sk(sk)->rx_opt.ts_recent_stamp, now);
5136 }
5137
5138 /* syncookies: no recent synqueue overflow on this listening socket? */
5139 static inline bool tcp_synq_no_recent_overflow(const struct sock *sk)
5140 {
5141 - unsigned long last_overflow = tcp_sk(sk)->rx_opt.ts_recent_stamp;
5142 + unsigned long last_overflow = READ_ONCE(tcp_sk(sk)->rx_opt.ts_recent_stamp);
5143
5144 - return time_after(jiffies, last_overflow + TCP_SYNCOOKIE_VALID);
5145 + /* If last_overflow <= jiffies <= last_overflow + TCP_SYNCOOKIE_VALID,
5146 + * then we're under synflood. However, we have to use
5147 + * 'last_overflow - HZ' as lower bound. That's because a concurrent
5148 + * tcp_synq_overflow() could update .ts_recent_stamp after we read
5149 + * jiffies but before we store .ts_recent_stamp into last_overflow,
5150 + * which could lead to rejecting a valid syncookie.
5151 + */
5152 + return !time_between32(jiffies, last_overflow - HZ,
5153 + last_overflow + TCP_SYNCOOKIE_VALID);
5154 }
5155
5156 static inline u32 tcp_cookie_time(void)
5157 diff --git a/kernel/audit_watch.c b/kernel/audit_watch.c
5158 index f036b6ada6ef..712469a3103a 100644
5159 --- a/kernel/audit_watch.c
5160 +++ b/kernel/audit_watch.c
5161 @@ -365,12 +365,12 @@ static int audit_get_nd(struct audit_watch *watch, struct path *parent)
5162 struct dentry *d = kern_path_locked(watch->path, parent);
5163 if (IS_ERR(d))
5164 return PTR_ERR(d);
5165 - inode_unlock(d_backing_inode(parent->dentry));
5166 if (d_is_positive(d)) {
5167 /* update watch filter fields */
5168 watch->dev = d->d_sb->s_dev;
5169 watch->ino = d_backing_inode(d)->i_ino;
5170 }
5171 + inode_unlock(d_backing_inode(parent->dentry));
5172 dput(d);
5173 return 0;
5174 }
5175 diff --git a/kernel/cgroup_pids.c b/kernel/cgroup_pids.c
5176 index a57242e0d5a6..b8b898e21c19 100644
5177 --- a/kernel/cgroup_pids.c
5178 +++ b/kernel/cgroup_pids.c
5179 @@ -48,7 +48,7 @@ struct pids_cgroup {
5180 * %PIDS_MAX = (%PID_MAX_LIMIT + 1).
5181 */
5182 atomic64_t counter;
5183 - int64_t limit;
5184 + atomic64_t limit;
5185
5186 /* Handle for "pids.events" */
5187 struct cgroup_file events_file;
5188 @@ -76,8 +76,8 @@ pids_css_alloc(struct cgroup_subsys_state *parent)
5189 if (!pids)
5190 return ERR_PTR(-ENOMEM);
5191
5192 - pids->limit = PIDS_MAX;
5193 atomic64_set(&pids->counter, 0);
5194 + atomic64_set(&pids->limit, PIDS_MAX);
5195 atomic64_set(&pids->events_limit, 0);
5196 return &pids->css;
5197 }
5198 @@ -149,13 +149,14 @@ static int pids_try_charge(struct pids_cgroup *pids, int num)
5199
5200 for (p = pids; parent_pids(p); p = parent_pids(p)) {
5201 int64_t new = atomic64_add_return(num, &p->counter);
5202 + int64_t limit = atomic64_read(&p->limit);
5203
5204 /*
5205 * Since new is capped to the maximum number of pid_t, if
5206 * p->limit is %PIDS_MAX then we know that this test will never
5207 * fail.
5208 */
5209 - if (new > p->limit)
5210 + if (new > limit)
5211 goto revert;
5212 }
5213
5214 @@ -280,7 +281,7 @@ set_limit:
5215 * Limit updates don't need to be mutex'd, since it isn't
5216 * critical that any racing fork()s follow the new limit.
5217 */
5218 - pids->limit = limit;
5219 + atomic64_set(&pids->limit, limit);
5220 return nbytes;
5221 }
5222
5223 @@ -288,7 +289,7 @@ static int pids_max_show(struct seq_file *sf, void *v)
5224 {
5225 struct cgroup_subsys_state *css = seq_css(sf);
5226 struct pids_cgroup *pids = css_pids(css);
5227 - int64_t limit = pids->limit;
5228 + int64_t limit = atomic64_read(&pids->limit);
5229
5230 if (limit >= PIDS_MAX)
5231 seq_printf(sf, "%s\n", PIDS_MAX_STR);
5232 diff --git a/kernel/module.c b/kernel/module.c
5233 index fb9e07aec49e..9cb1437151ae 100644
5234 --- a/kernel/module.c
5235 +++ b/kernel/module.c
5236 @@ -995,6 +995,8 @@ SYSCALL_DEFINE2(delete_module, const char __user *, name_user,
5237 strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module));
5238
5239 free_module(mod);
5240 + /* someone could wait for the module in add_unformed_module() */
5241 + wake_up_all(&module_wq);
5242 return 0;
5243 out:
5244 mutex_unlock(&module_mutex);
5245 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
5246 index b765a58cf20f..5e65c7eea872 100644
5247 --- a/kernel/sched/fair.c
5248 +++ b/kernel/sched/fair.c
5249 @@ -4391,20 +4391,28 @@ static enum hrtimer_restart sched_cfs_period_timer(struct hrtimer *timer)
5250 if (++count > 3) {
5251 u64 new, old = ktime_to_ns(cfs_b->period);
5252
5253 - new = (old * 147) / 128; /* ~115% */
5254 - new = min(new, max_cfs_quota_period);
5255 -
5256 - cfs_b->period = ns_to_ktime(new);
5257 -
5258 - /* since max is 1s, this is limited to 1e9^2, which fits in u64 */
5259 - cfs_b->quota *= new;
5260 - cfs_b->quota = div64_u64(cfs_b->quota, old);
5261 -
5262 - pr_warn_ratelimited(
5263 - "cfs_period_timer[cpu%d]: period too short, scaling up (new cfs_period_us %lld, cfs_quota_us = %lld)\n",
5264 - smp_processor_id(),
5265 - div_u64(new, NSEC_PER_USEC),
5266 - div_u64(cfs_b->quota, NSEC_PER_USEC));
5267 + /*
5268 + * Grow period by a factor of 2 to avoid losing precision.
5269 + * Precision loss in the quota/period ratio can cause __cfs_schedulable
5270 + * to fail.
5271 + */
5272 + new = old * 2;
5273 + if (new < max_cfs_quota_period) {
5274 + cfs_b->period = ns_to_ktime(new);
5275 + cfs_b->quota *= 2;
5276 +
5277 + pr_warn_ratelimited(
5278 + "cfs_period_timer[cpu%d]: period too short, scaling up (new cfs_period_us = %lld, cfs_quota_us = %lld)\n",
5279 + smp_processor_id(),
5280 + div_u64(new, NSEC_PER_USEC),
5281 + div_u64(cfs_b->quota, NSEC_PER_USEC));
5282 + } else {
5283 + pr_warn_ratelimited(
5284 + "cfs_period_timer[cpu%d]: period too short, but cannot scale up without losing precision (cfs_period_us = %lld, cfs_quota_us = %lld)\n",
5285 + smp_processor_id(),
5286 + div_u64(old, NSEC_PER_USEC),
5287 + div_u64(cfs_b->quota, NSEC_PER_USEC));
5288 + }
5289
5290 /* reset count so we don't come right back in here */
5291 count = 0;
5292 diff --git a/kernel/workqueue.c b/kernel/workqueue.c
5293 index 1961dd408bc5..7d970b565c4d 100644
5294 --- a/kernel/workqueue.c
5295 +++ b/kernel/workqueue.c
5296 @@ -2344,8 +2344,14 @@ repeat:
5297 */
5298 if (need_to_create_worker(pool)) {
5299 spin_lock(&wq_mayday_lock);
5300 - get_pwq(pwq);
5301 - list_move_tail(&pwq->mayday_node, &wq->maydays);
5302 + /*
5303 + * Queue iff we aren't racing destruction
5304 + * and somebody else hasn't queued it already.
5305 + */
5306 + if (wq->rescuer && list_empty(&pwq->mayday_node)) {
5307 + get_pwq(pwq);
5308 + list_add_tail(&pwq->mayday_node, &wq->maydays);
5309 + }
5310 spin_unlock(&wq_mayday_lock);
5311 }
5312 }
5313 @@ -4031,9 +4037,29 @@ void destroy_workqueue(struct workqueue_struct *wq)
5314 struct pool_workqueue *pwq;
5315 int node;
5316
5317 + /*
5318 + * Remove it from sysfs first so that sanity check failure doesn't
5319 + * lead to sysfs name conflicts.
5320 + */
5321 + workqueue_sysfs_unregister(wq);
5322 +
5323 /* drain it before proceeding with destruction */
5324 drain_workqueue(wq);
5325
5326 + /* kill rescuer, if sanity checks fail, leave it w/o rescuer */
5327 + if (wq->rescuer) {
5328 + struct worker *rescuer = wq->rescuer;
5329 +
5330 + /* this prevents new queueing */
5331 + spin_lock_irq(&wq_mayday_lock);
5332 + wq->rescuer = NULL;
5333 + spin_unlock_irq(&wq_mayday_lock);
5334 +
5335 + /* rescuer will empty maydays list before exiting */
5336 + kthread_stop(rescuer->task);
5337 + kfree(rescuer);
5338 + }
5339 +
5340 /* sanity checks */
5341 mutex_lock(&wq->mutex);
5342 for_each_pwq(pwq, wq) {
5343 @@ -4063,11 +4089,6 @@ void destroy_workqueue(struct workqueue_struct *wq)
5344 list_del_rcu(&wq->list);
5345 mutex_unlock(&wq_pool_mutex);
5346
5347 - workqueue_sysfs_unregister(wq);
5348 -
5349 - if (wq->rescuer)
5350 - kthread_stop(wq->rescuer->task);
5351 -
5352 if (!(wq->flags & WQ_UNBOUND)) {
5353 /*
5354 * The base ref is never dropped on per-cpu pwqs. Directly
5355 @@ -4344,7 +4365,8 @@ static void show_pwq(struct pool_workqueue *pwq)
5356 pr_info(" pwq %d:", pool->id);
5357 pr_cont_pool_info(pool);
5358
5359 - pr_cont(" active=%d/%d%s\n", pwq->nr_active, pwq->max_active,
5360 + pr_cont(" active=%d/%d refcnt=%d%s\n",
5361 + pwq->nr_active, pwq->max_active, pwq->refcnt,
5362 !list_empty(&pwq->mayday_node) ? " MAYDAY" : "");
5363
5364 hash_for_each(pool->busy_hash, bkt, worker, hentry) {
5365 diff --git a/lib/raid6/unroll.awk b/lib/raid6/unroll.awk
5366 index c6aa03631df8..0809805a7e23 100644
5367 --- a/lib/raid6/unroll.awk
5368 +++ b/lib/raid6/unroll.awk
5369 @@ -13,7 +13,7 @@ BEGIN {
5370 for (i = 0; i < rep; ++i) {
5371 tmp = $0
5372 gsub(/\$\$/, i, tmp)
5373 - gsub(/\$\#/, n, tmp)
5374 + gsub(/\$#/, n, tmp)
5375 gsub(/\$\*/, "$", tmp)
5376 print tmp
5377 }
5378 diff --git a/mm/shmem.c b/mm/shmem.c
5379 index 6266a7d1ba00..90ccbb35458b 100644
5380 --- a/mm/shmem.c
5381 +++ b/mm/shmem.c
5382 @@ -2695,7 +2695,7 @@ static long shmem_fallocate(struct file *file, int mode, loff_t offset,
5383 }
5384
5385 shmem_falloc.waitq = &shmem_falloc_waitq;
5386 - shmem_falloc.start = unmap_start >> PAGE_SHIFT;
5387 + shmem_falloc.start = (u64)unmap_start >> PAGE_SHIFT;
5388 shmem_falloc.next = (unmap_end + 1) >> PAGE_SHIFT;
5389 spin_lock(&inode->i_lock);
5390 inode->i_private = &shmem_falloc;
5391 diff --git a/net/appletalk/aarp.c b/net/appletalk/aarp.c
5392 index 8ad3ec2610b6..b9e85a4751a6 100644
5393 --- a/net/appletalk/aarp.c
5394 +++ b/net/appletalk/aarp.c
5395 @@ -879,15 +879,24 @@ static struct notifier_block aarp_notifier = {
5396
5397 static unsigned char aarp_snap_id[] = { 0x00, 0x00, 0x00, 0x80, 0xF3 };
5398
5399 -void __init aarp_proto_init(void)
5400 +int __init aarp_proto_init(void)
5401 {
5402 + int rc;
5403 +
5404 aarp_dl = register_snap_client(aarp_snap_id, aarp_rcv);
5405 - if (!aarp_dl)
5406 + if (!aarp_dl) {
5407 printk(KERN_CRIT "Unable to register AARP with SNAP.\n");
5408 + return -ENOMEM;
5409 + }
5410 setup_timer(&aarp_timer, aarp_expire_timeout, 0);
5411 aarp_timer.expires = jiffies + sysctl_aarp_expiry_time;
5412 add_timer(&aarp_timer);
5413 - register_netdevice_notifier(&aarp_notifier);
5414 + rc = register_netdevice_notifier(&aarp_notifier);
5415 + if (rc) {
5416 + del_timer_sync(&aarp_timer);
5417 + unregister_snap_client(aarp_dl);
5418 + }
5419 + return rc;
5420 }
5421
5422 /* Remove the AARP entries associated with a device. */
5423 diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
5424 index d74092cc639a..93209c009df5 100644
5425 --- a/net/appletalk/ddp.c
5426 +++ b/net/appletalk/ddp.c
5427 @@ -1911,9 +1911,6 @@ static unsigned char ddp_snap_id[] = { 0x08, 0x00, 0x07, 0x80, 0x9B };
5428 EXPORT_SYMBOL(atrtr_get_dev);
5429 EXPORT_SYMBOL(atalk_find_dev_addr);
5430
5431 -static const char atalk_err_snap[] __initconst =
5432 - KERN_CRIT "Unable to register DDP with SNAP.\n";
5433 -
5434 /* Called by proto.c on kernel start up */
5435 static int __init atalk_init(void)
5436 {
5437 @@ -1928,17 +1925,23 @@ static int __init atalk_init(void)
5438 goto out_proto;
5439
5440 ddp_dl = register_snap_client(ddp_snap_id, atalk_rcv);
5441 - if (!ddp_dl)
5442 - printk(atalk_err_snap);
5443 + if (!ddp_dl) {
5444 + pr_crit("Unable to register DDP with SNAP.\n");
5445 + rc = -ENOMEM;
5446 + goto out_sock;
5447 + }
5448
5449 dev_add_pack(&ltalk_packet_type);
5450 dev_add_pack(&ppptalk_packet_type);
5451
5452 rc = register_netdevice_notifier(&ddp_notifier);
5453 if (rc)
5454 - goto out_sock;
5455 + goto out_snap;
5456 +
5457 + rc = aarp_proto_init();
5458 + if (rc)
5459 + goto out_dev;
5460
5461 - aarp_proto_init();
5462 rc = atalk_proc_init();
5463 if (rc)
5464 goto out_aarp;
5465 @@ -1952,11 +1955,13 @@ out_proc:
5466 atalk_proc_exit();
5467 out_aarp:
5468 aarp_cleanup_module();
5469 +out_dev:
5470 unregister_netdevice_notifier(&ddp_notifier);
5471 -out_sock:
5472 +out_snap:
5473 dev_remove_pack(&ppptalk_packet_type);
5474 dev_remove_pack(&ltalk_packet_type);
5475 unregister_snap_client(ddp_dl);
5476 +out_sock:
5477 sock_unregister(PF_APPLETALK);
5478 out_proto:
5479 proto_unregister(&ddp_proto);
5480 diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
5481 index 5f5e28f210e0..928bd5515f02 100644
5482 --- a/net/bridge/br_device.c
5483 +++ b/net/bridge/br_device.c
5484 @@ -210,6 +210,12 @@ static int br_set_mac_address(struct net_device *dev, void *p)
5485 if (!is_valid_ether_addr(addr->sa_data))
5486 return -EADDRNOTAVAIL;
5487
5488 + /* dev_set_mac_addr() can be called by a master device on bridge's
5489 + * NETDEV_UNREGISTER, but since it's being destroyed do nothing
5490 + */
5491 + if (dev->reg_state != NETREG_REGISTERED)
5492 + return -EBUSY;
5493 +
5494 spin_lock_bh(&br->lock);
5495 if (!ether_addr_equal(dev->dev_addr, addr->sa_data)) {
5496 /* Mac address will be changed in br_stp_change_bridge_id(). */
5497 diff --git a/net/core/dev.c b/net/core/dev.c
5498 index c6fb7e61cb40..842654302110 100644
5499 --- a/net/core/dev.c
5500 +++ b/net/core/dev.c
5501 @@ -6584,7 +6584,8 @@ static int __dev_set_mtu(struct net_device *dev, int new_mtu)
5502 if (ops->ndo_change_mtu)
5503 return ops->ndo_change_mtu(dev, new_mtu);
5504
5505 - dev->mtu = new_mtu;
5506 + /* Pairs with all the lockless reads of dev->mtu in the stack */
5507 + WRITE_ONCE(dev->mtu, new_mtu);
5508 return 0;
5509 }
5510
5511 diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
5512 index 93438113d136..6c873cb829ca 100644
5513 --- a/net/ipv4/devinet.c
5514 +++ b/net/ipv4/devinet.c
5515 @@ -1386,11 +1386,6 @@ skip:
5516 }
5517 }
5518
5519 -static bool inetdev_valid_mtu(unsigned int mtu)
5520 -{
5521 - return mtu >= IPV4_MIN_MTU;
5522 -}
5523 -
5524 static void inetdev_send_gratuitous_arp(struct net_device *dev,
5525 struct in_device *in_dev)
5526
5527 diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
5528 index 7f1a85c6a614..4f3decbe6a3a 100644
5529 --- a/net/ipv4/ip_output.c
5530 +++ b/net/ipv4/ip_output.c
5531 @@ -1159,13 +1159,17 @@ static int ip_setup_cork(struct sock *sk, struct inet_cork *cork,
5532 rt = *rtp;
5533 if (unlikely(!rt))
5534 return -EFAULT;
5535 - /*
5536 - * We steal reference to this route, caller should not release it
5537 - */
5538 - *rtp = NULL;
5539 +
5540 cork->fragsize = ip_sk_use_pmtu(sk) ?
5541 - dst_mtu(&rt->dst) : rt->dst.dev->mtu;
5542 + dst_mtu(&rt->dst) : READ_ONCE(rt->dst.dev->mtu);
5543 +
5544 + if (!inetdev_valid_mtu(cork->fragsize))
5545 + return -ENETUNREACH;
5546 +
5547 cork->dst = &rt->dst;
5548 + /* We stole this route, caller should not release it. */
5549 + *rtp = NULL;
5550 +
5551 cork->length = 0;
5552 cork->ttl = ipc->ttl;
5553 cork->tos = ipc->tos;
5554 diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
5555 index 2e77e78ab226..73766c9c485d 100644
5556 --- a/net/ipv4/tcp_output.c
5557 +++ b/net/ipv4/tcp_output.c
5558 @@ -707,8 +707,9 @@ static unsigned int tcp_established_options(struct sock *sk, struct sk_buff *skb
5559 min_t(unsigned int, eff_sacks,
5560 (remaining - TCPOLEN_SACK_BASE_ALIGNED) /
5561 TCPOLEN_SACK_PERBLOCK);
5562 - size += TCPOLEN_SACK_BASE_ALIGNED +
5563 - opts->num_sack_blocks * TCPOLEN_SACK_PERBLOCK;
5564 + if (likely(opts->num_sack_blocks))
5565 + size += TCPOLEN_SACK_BASE_ALIGNED +
5566 + opts->num_sack_blocks * TCPOLEN_SACK_PERBLOCK;
5567 }
5568
5569 return size;
5570 diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
5571 index d9e364c4863a..761a198ed5f3 100644
5572 --- a/net/ipv4/tcp_timer.c
5573 +++ b/net/ipv4/tcp_timer.c
5574 @@ -372,7 +372,7 @@ static void tcp_probe_timer(struct sock *sk)
5575 return;
5576 }
5577
5578 - if (icsk->icsk_probes_out > max_probes) {
5579 + if (icsk->icsk_probes_out >= max_probes) {
5580 abort: tcp_write_err(sk);
5581 } else {
5582 /* Only send another probe if we didn't close things up. */
5583 @@ -478,11 +478,12 @@ void tcp_retransmit_timer(struct sock *sk)
5584 goto out_reset_timer;
5585 }
5586
5587 + __NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPTIMEOUTS);
5588 if (tcp_write_timeout(sk))
5589 goto out;
5590
5591 if (icsk->icsk_retransmits == 0) {
5592 - int mib_idx;
5593 + int mib_idx = 0;
5594
5595 if (icsk->icsk_ca_state == TCP_CA_Recovery) {
5596 if (tcp_is_sack(tp))
5597 @@ -497,10 +498,9 @@ void tcp_retransmit_timer(struct sock *sk)
5598 mib_idx = LINUX_MIB_TCPSACKFAILURES;
5599 else
5600 mib_idx = LINUX_MIB_TCPRENOFAILURES;
5601 - } else {
5602 - mib_idx = LINUX_MIB_TCPTIMEOUTS;
5603 }
5604 - __NET_INC_STATS(sock_net(sk), mib_idx);
5605 + if (mib_idx)
5606 + __NET_INC_STATS(sock_net(sk), mib_idx);
5607 }
5608
5609 tcp_enter_loss(sk);
5610 diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
5611 index 02d6f38f7869..beb2897d8ddf 100644
5612 --- a/net/openvswitch/conntrack.c
5613 +++ b/net/openvswitch/conntrack.c
5614 @@ -709,6 +709,17 @@ static int ovs_ct_nat(struct net *net, struct sw_flow_key *key,
5615 }
5616 err = ovs_ct_nat_execute(skb, ct, ctinfo, &info->range, maniptype);
5617
5618 + if (err == NF_ACCEPT &&
5619 + ct->status & IPS_SRC_NAT && ct->status & IPS_DST_NAT) {
5620 + if (maniptype == NF_NAT_MANIP_SRC)
5621 + maniptype = NF_NAT_MANIP_DST;
5622 + else
5623 + maniptype = NF_NAT_MANIP_SRC;
5624 +
5625 + err = ovs_ct_nat_execute(skb, ct, ctinfo, &info->range,
5626 + maniptype);
5627 + }
5628 +
5629 /* Mark NAT done if successful and update the flow key. */
5630 if (err == NF_ACCEPT)
5631 ovs_nat_update_key(key, skb, maniptype);
5632 diff --git a/net/sunrpc/cache.c b/net/sunrpc/cache.c
5633 index cdcc0fea9f5a..24e42919a480 100644
5634 --- a/net/sunrpc/cache.c
5635 +++ b/net/sunrpc/cache.c
5636 @@ -54,9 +54,6 @@ static void cache_init(struct cache_head *h, struct cache_detail *detail)
5637 h->last_refresh = now;
5638 }
5639
5640 -static inline int cache_is_valid(struct cache_head *h);
5641 -static void cache_fresh_locked(struct cache_head *head, time_t expiry,
5642 - struct cache_detail *detail);
5643 static void cache_fresh_unlocked(struct cache_head *head,
5644 struct cache_detail *detail);
5645
5646 @@ -101,9 +98,6 @@ struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail,
5647 if (cache_is_expired(detail, tmp)) {
5648 hlist_del_init(&tmp->cache_list);
5649 detail->entries --;
5650 - if (cache_is_valid(tmp) == -EAGAIN)
5651 - set_bit(CACHE_NEGATIVE, &tmp->flags);
5652 - cache_fresh_locked(tmp, 0, detail);
5653 freeme = tmp;
5654 break;
5655 }
5656 diff --git a/net/tipc/core.c b/net/tipc/core.c
5657 index 59980dea2ad7..799900c0f2c9 100644
5658 --- a/net/tipc/core.c
5659 +++ b/net/tipc/core.c
5660 @@ -116,14 +116,6 @@ static int __init tipc_init(void)
5661 sysctl_tipc_rmem[1] = RCVBUF_DEF;
5662 sysctl_tipc_rmem[2] = RCVBUF_MAX;
5663
5664 - err = tipc_netlink_start();
5665 - if (err)
5666 - goto out_netlink;
5667 -
5668 - err = tipc_netlink_compat_start();
5669 - if (err)
5670 - goto out_netlink_compat;
5671 -
5672 err = tipc_register_sysctl();
5673 if (err)
5674 goto out_sysctl;
5675 @@ -144,8 +136,21 @@ static int __init tipc_init(void)
5676 if (err)
5677 goto out_bearer;
5678
5679 + err = tipc_netlink_start();
5680 + if (err)
5681 + goto out_netlink;
5682 +
5683 + err = tipc_netlink_compat_start();
5684 + if (err)
5685 + goto out_netlink_compat;
5686 +
5687 pr_info("Started in single node mode\n");
5688 return 0;
5689 +
5690 +out_netlink_compat:
5691 + tipc_netlink_stop();
5692 +out_netlink:
5693 + tipc_bearer_cleanup();
5694 out_bearer:
5695 unregister_pernet_device(&tipc_topsrv_net_ops);
5696 out_pernet_topsrv:
5697 @@ -155,22 +160,18 @@ out_socket:
5698 out_pernet:
5699 tipc_unregister_sysctl();
5700 out_sysctl:
5701 - tipc_netlink_compat_stop();
5702 -out_netlink_compat:
5703 - tipc_netlink_stop();
5704 -out_netlink:
5705 pr_err("Unable to start in single node mode\n");
5706 return err;
5707 }
5708
5709 static void __exit tipc_exit(void)
5710 {
5711 + tipc_netlink_compat_stop();
5712 + tipc_netlink_stop();
5713 tipc_bearer_cleanup();
5714 unregister_pernet_device(&tipc_topsrv_net_ops);
5715 tipc_socket_stop();
5716 unregister_pernet_device(&tipc_net_ops);
5717 - tipc_netlink_stop();
5718 - tipc_netlink_compat_stop();
5719 tipc_unregister_sysctl();
5720
5721 pr_info("Deactivated\n");
5722 diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
5723 index 770ababb8f92..6c2560f3f95b 100644
5724 --- a/net/x25/af_x25.c
5725 +++ b/net/x25/af_x25.c
5726 @@ -100,7 +100,7 @@ int x25_parse_address_block(struct sk_buff *skb,
5727 }
5728
5729 len = *skb->data;
5730 - needed = 1 + (len >> 4) + (len & 0x0f);
5731 + needed = 1 + ((len >> 4) + (len & 0x0f) + 1) / 2;
5732
5733 if (!pskb_may_pull(skb, needed)) {
5734 /* packet is too short to hold the addresses it claims
5735 @@ -288,7 +288,7 @@ static struct sock *x25_find_listener(struct x25_address *addr,
5736 sk_for_each(s, &x25_list)
5737 if ((!strcmp(addr->x25_addr,
5738 x25_sk(s)->source_addr.x25_addr) ||
5739 - !strcmp(addr->x25_addr,
5740 + !strcmp(x25_sk(s)->source_addr.x25_addr,
5741 null_x25_address.x25_addr)) &&
5742 s->sk_state == TCP_LISTEN) {
5743 /*
5744 @@ -684,11 +684,15 @@ static int x25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
5745 goto out;
5746 }
5747
5748 - len = strlen(addr->sx25_addr.x25_addr);
5749 - for (i = 0; i < len; i++) {
5750 - if (!isdigit(addr->sx25_addr.x25_addr[i])) {
5751 - rc = -EINVAL;
5752 - goto out;
5753 + /* check for the null_x25_address */
5754 + if (strcmp(addr->sx25_addr.x25_addr, null_x25_address.x25_addr)) {
5755 +
5756 + len = strlen(addr->sx25_addr.x25_addr);
5757 + for (i = 0; i < len; i++) {
5758 + if (!isdigit(addr->sx25_addr.x25_addr[i])) {
5759 + rc = -EINVAL;
5760 + goto out;
5761 + }
5762 }
5763 }
5764
5765 diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
5766 index fdf5bbfd00cd..9abcdf2e8dfe 100644
5767 --- a/scripts/mod/modpost.c
5768 +++ b/scripts/mod/modpost.c
5769 @@ -1157,6 +1157,14 @@ static const struct sectioncheck *section_mismatch(
5770 * fromsec = text section
5771 * refsymname = *.constprop.*
5772 *
5773 + * Pattern 6:
5774 + * Hide section mismatch warnings for ELF local symbols. The goal
5775 + * is to eliminate false positive modpost warnings caused by
5776 + * compiler-generated ELF local symbol names such as ".LANCHOR1".
5777 + * Autogenerated symbol names bypass modpost's "Pattern 2"
5778 + * whitelisting, which relies on pattern-matching against symbol
5779 + * names to work. (One situation where gcc can autogenerate ELF
5780 + * local symbols is when "-fsection-anchors" is used.)
5781 **/
5782 static int secref_whitelist(const struct sectioncheck *mismatch,
5783 const char *fromsec, const char *fromsym,
5784 @@ -1195,6 +1203,10 @@ static int secref_whitelist(const struct sectioncheck *mismatch,
5785 match(fromsym, optim_symbols))
5786 return 0;
5787
5788 + /* Check for pattern 6 */
5789 + if (strstarts(fromsym, ".L"))
5790 + return 0;
5791 +
5792 return 1;
5793 }
5794
5795 diff --git a/sound/core/oss/linear.c b/sound/core/oss/linear.c
5796 index 2045697f449d..797d838a2f9e 100644
5797 --- a/sound/core/oss/linear.c
5798 +++ b/sound/core/oss/linear.c
5799 @@ -107,6 +107,8 @@ static snd_pcm_sframes_t linear_transfer(struct snd_pcm_plugin *plugin,
5800 }
5801 }
5802 #endif
5803 + if (frames > dst_channels[0].frames)
5804 + frames = dst_channels[0].frames;
5805 convert(plugin, src_channels, dst_channels, frames);
5806 return frames;
5807 }
5808 diff --git a/sound/core/oss/mulaw.c b/sound/core/oss/mulaw.c
5809 index 7915564bd394..3788906421a7 100644
5810 --- a/sound/core/oss/mulaw.c
5811 +++ b/sound/core/oss/mulaw.c
5812 @@ -269,6 +269,8 @@ static snd_pcm_sframes_t mulaw_transfer(struct snd_pcm_plugin *plugin,
5813 }
5814 }
5815 #endif
5816 + if (frames > dst_channels[0].frames)
5817 + frames = dst_channels[0].frames;
5818 data = (struct mulaw_priv *)plugin->extra_data;
5819 data->func(plugin, src_channels, dst_channels, frames);
5820 return frames;
5821 diff --git a/sound/core/oss/route.c b/sound/core/oss/route.c
5822 index c8171f5783c8..72dea04197ef 100644
5823 --- a/sound/core/oss/route.c
5824 +++ b/sound/core/oss/route.c
5825 @@ -57,6 +57,8 @@ static snd_pcm_sframes_t route_transfer(struct snd_pcm_plugin *plugin,
5826 return -ENXIO;
5827 if (frames == 0)
5828 return 0;
5829 + if (frames > dst_channels[0].frames)
5830 + frames = dst_channels[0].frames;
5831
5832 nsrcs = plugin->src_format.channels;
5833 ndsts = plugin->dst_format.channels;
5834 diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
5835 index 3acb373674c3..f09ae7efc695 100644
5836 --- a/sound/core/pcm_lib.c
5837 +++ b/sound/core/pcm_lib.c
5838 @@ -1877,11 +1877,14 @@ void snd_pcm_period_elapsed(struct snd_pcm_substream *substream)
5839 struct snd_pcm_runtime *runtime;
5840 unsigned long flags;
5841
5842 - if (PCM_RUNTIME_CHECK(substream))
5843 + if (snd_BUG_ON(!substream))
5844 return;
5845 - runtime = substream->runtime;
5846
5847 snd_pcm_stream_lock_irqsave(substream, flags);
5848 + if (PCM_RUNTIME_CHECK(substream))
5849 + goto _unlock;
5850 + runtime = substream->runtime;
5851 +
5852 if (!snd_pcm_running(substream) ||
5853 snd_pcm_update_hw_ptr0(substream, 1) < 0)
5854 goto _end;
5855 @@ -1892,6 +1895,7 @@ void snd_pcm_period_elapsed(struct snd_pcm_substream *substream)
5856 #endif
5857 _end:
5858 kill_fasync(&runtime->fasync, SIGIO, POLL_IN);
5859 + _unlock:
5860 snd_pcm_stream_unlock_irqrestore(substream, flags);
5861 }
5862
5863 diff --git a/sound/pci/hda/hda_bind.c b/sound/pci/hda/hda_bind.c
5864 index 7ea201c05e5d..d0d6dfbfcfdf 100644
5865 --- a/sound/pci/hda/hda_bind.c
5866 +++ b/sound/pci/hda/hda_bind.c
5867 @@ -42,6 +42,10 @@ static void hda_codec_unsol_event(struct hdac_device *dev, unsigned int ev)
5868 {
5869 struct hda_codec *codec = container_of(dev, struct hda_codec, core);
5870
5871 + /* ignore unsol events during shutdown */
5872 + if (codec->bus->shutdown)
5873 + return;
5874 +
5875 if (codec->patch_ops.unsol_event)
5876 codec->patch_ops.unsol_event(codec, ev);
5877 }
5878 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
5879 index f2f1d9fd848c..3234e9ca02ce 100644
5880 --- a/sound/pci/hda/hda_intel.c
5881 +++ b/sound/pci/hda/hda_intel.c
5882 @@ -1275,8 +1275,11 @@ static int azx_free(struct azx *chip)
5883 static int azx_dev_disconnect(struct snd_device *device)
5884 {
5885 struct azx *chip = device->device_data;
5886 + struct hdac_bus *bus = azx_bus(chip);
5887
5888 chip->bus.shutdown = 1;
5889 + cancel_work_sync(&bus->unsol_work);
5890 +
5891 return 0;
5892 }
5893
5894 diff --git a/sound/soc/soc-jack.c b/sound/soc/soc-jack.c
5895 index fbaa1bb41102..00d7902ad427 100644
5896 --- a/sound/soc/soc-jack.c
5897 +++ b/sound/soc/soc-jack.c
5898 @@ -80,10 +80,9 @@ void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask)
5899 unsigned int sync = 0;
5900 int enable;
5901
5902 - trace_snd_soc_jack_report(jack, mask, status);
5903 -
5904 if (!jack)
5905 return;
5906 + trace_snd_soc_jack_report(jack, mask, status);
5907
5908 dapm = &jack->card->dapm;
5909