Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.20/0107-4.20.8-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3284 - (show annotations) (download)
Mon Mar 4 10:35:54 2019 UTC (5 years, 1 month ago) by niro
File size: 390422 byte(s)
linux-4.20.8
1 diff --git a/Makefile b/Makefile
2 index efc46cce5919..d7d190781010 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 20
9 -SUBLEVEL = 7
10 +SUBLEVEL = 8
11 EXTRAVERSION =
12 NAME = Shy Crocodile
13
14 diff --git a/arch/arm/boot/dts/aspeed-bmc-arm-centriq2400-rep.dts b/arch/arm/boot/dts/aspeed-bmc-arm-centriq2400-rep.dts
15 index df1227613d48..c2ece0b91885 100644
16 --- a/arch/arm/boot/dts/aspeed-bmc-arm-centriq2400-rep.dts
17 +++ b/arch/arm/boot/dts/aspeed-bmc-arm-centriq2400-rep.dts
18 @@ -13,7 +13,7 @@
19 bootargs = "console=ttyS4,115200 earlyprintk";
20 };
21
22 - memory {
23 + memory@80000000 {
24 reg = <0x80000000 0x40000000>;
25 };
26
27 diff --git a/arch/arm/boot/dts/aspeed-bmc-intel-s2600wf.dts b/arch/arm/boot/dts/aspeed-bmc-intel-s2600wf.dts
28 index 7a291de02543..22dade6393d0 100644
29 --- a/arch/arm/boot/dts/aspeed-bmc-intel-s2600wf.dts
30 +++ b/arch/arm/boot/dts/aspeed-bmc-intel-s2600wf.dts
31 @@ -13,7 +13,7 @@
32 bootargs = "earlyprintk";
33 };
34
35 - memory {
36 + memory@80000000 {
37 reg = <0x80000000 0x20000000>;
38 };
39
40 diff --git a/arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts b/arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts
41 index d598b6391362..024e52a6cd0f 100644
42 --- a/arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts
43 +++ b/arch/arm/boot/dts/aspeed-bmc-opp-lanyang.dts
44 @@ -14,7 +14,7 @@
45 bootargs = "console=ttyS4,115200 earlyprintk";
46 };
47
48 - memory {
49 + memory@80000000 {
50 reg = <0x80000000 0x40000000>;
51 };
52
53 @@ -322,4 +322,3 @@
54 &adc {
55 status = "okay";
56 };
57 -
58 diff --git a/arch/arm/boot/dts/aspeed-bmc-portwell-neptune.dts b/arch/arm/boot/dts/aspeed-bmc-portwell-neptune.dts
59 index 43ed13963d35..33d704541de6 100644
60 --- a/arch/arm/boot/dts/aspeed-bmc-portwell-neptune.dts
61 +++ b/arch/arm/boot/dts/aspeed-bmc-portwell-neptune.dts
62 @@ -17,7 +17,7 @@
63 bootargs = "console=ttyS4,115200 earlyprintk";
64 };
65
66 - memory {
67 + memory@80000000 {
68 reg = <0x80000000 0x20000000>;
69 };
70
71 diff --git a/arch/arm/boot/dts/gemini-dlink-dir-685.dts b/arch/arm/boot/dts/gemini-dlink-dir-685.dts
72 index 6f258b50eb44..502a361d1fe9 100644
73 --- a/arch/arm/boot/dts/gemini-dlink-dir-685.dts
74 +++ b/arch/arm/boot/dts/gemini-dlink-dir-685.dts
75 @@ -274,20 +274,16 @@
76 read-only;
77 };
78 /*
79 - * Between the boot loader and the rootfs is the kernel
80 - * in a custom Storlink format flashed from the boot
81 - * menu. The rootfs is in squashfs format.
82 + * This firmware image contains the kernel catenated
83 + * with the squashfs root filesystem. For some reason
84 + * this is called "upgrade" on the vendor system.
85 */
86 - partition@1800c0 {
87 - label = "rootfs";
88 - reg = <0x001800c0 0x01dbff40>;
89 - read-only;
90 - };
91 - partition@1f40000 {
92 + partition@40000 {
93 label = "upgrade";
94 - reg = <0x01f40000 0x00040000>;
95 + reg = <0x00040000 0x01f40000>;
96 read-only;
97 };
98 + /* RGDB, Residental Gateway Database? */
99 partition@1f80000 {
100 label = "rgdb";
101 reg = <0x01f80000 0x00040000>;
102 diff --git a/arch/arm/boot/dts/imx51-zii-rdu1.dts b/arch/arm/boot/dts/imx51-zii-rdu1.dts
103 index 69d753cac89a..44985f61c0ba 100644
104 --- a/arch/arm/boot/dts/imx51-zii-rdu1.dts
105 +++ b/arch/arm/boot/dts/imx51-zii-rdu1.dts
106 @@ -477,6 +477,15 @@
107 };
108
109 &gpio1 {
110 + gpio-line-names = "", "", "", "",
111 + "", "", "", "",
112 + "", "hp-amp-shutdown-b", "", "",
113 + "", "", "", "",
114 + "", "", "", "",
115 + "", "", "", "",
116 + "", "", "", "",
117 + "", "", "", "";
118 +
119 unused-sd3-wp-gpio {
120 /*
121 * See pinctrl_esdhc1 below for more details on this
122 @@ -495,9 +504,6 @@
123 hpa1: amp@60 {
124 compatible = "ti,tpa6130a2";
125 reg = <0x60>;
126 - pinctrl-names = "default";
127 - pinctrl-0 = <&pinctrl_ampgpio>;
128 - power-gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>;
129 Vdd-supply = <&reg_3p3v>;
130 };
131
132 @@ -671,7 +677,10 @@
133 };
134
135 &iomuxc {
136 - pinctrl_ampgpio: ampgpiogrp {
137 + pinctrl-names = "default";
138 + pinctrl-0 = <&pinctrl_hog>;
139 +
140 + pinctrl_hog: hoggrp {
141 fsl,pins = <
142 MX51_PAD_GPIO1_9__GPIO1_9 0x5e
143 >;
144 diff --git a/arch/arm/boot/dts/mmp2.dtsi b/arch/arm/boot/dts/mmp2.dtsi
145 index 766bbb8495b6..47e5b63339d1 100644
146 --- a/arch/arm/boot/dts/mmp2.dtsi
147 +++ b/arch/arm/boot/dts/mmp2.dtsi
148 @@ -220,12 +220,15 @@
149 status = "disabled";
150 };
151
152 - twsi2: i2c@d4025000 {
153 + twsi2: i2c@d4031000 {
154 compatible = "mrvl,mmp-twsi";
155 - reg = <0xd4025000 0x1000>;
156 - interrupts = <58>;
157 + reg = <0xd4031000 0x1000>;
158 + interrupt-parent = <&intcmux17>;
159 + interrupts = <0>;
160 clocks = <&soc_clocks MMP2_CLK_TWSI1>;
161 resets = <&soc_clocks MMP2_CLK_TWSI1>;
162 + #address-cells = <1>;
163 + #size-cells = <0>;
164 status = "disabled";
165 };
166
167 diff --git a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts
168 index 490726b52216..9dc7ec7655cb 100644
169 --- a/arch/arm/boot/dts/omap4-sdp.dts
170 +++ b/arch/arm/boot/dts/omap4-sdp.dts
171 @@ -33,6 +33,7 @@
172 gpio = <&gpio2 16 GPIO_ACTIVE_HIGH>; /* gpio line 48 */
173 enable-active-high;
174 regulator-boot-on;
175 + startup-delay-us = <25000>;
176 };
177
178 vbat: fixedregulator-vbat {
179 diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
180 index 12a6172263c0..3bf82232b1be 100644
181 --- a/arch/arm/kernel/smp.c
182 +++ b/arch/arm/kernel/smp.c
183 @@ -724,6 +724,21 @@ void smp_send_stop(void)
184 pr_warn("SMP: failed to stop secondary CPUs\n");
185 }
186
187 +/* In case panic() and panic() called at the same time on CPU1 and CPU2,
188 + * and CPU 1 calls panic_smp_self_stop() before crash_smp_send_stop()
189 + * CPU1 can't receive the ipi irqs from CPU2, CPU1 will be always online,
190 + * kdump fails. So split out the panic_smp_self_stop() and add
191 + * set_cpu_online(smp_processor_id(), false).
192 + */
193 +void panic_smp_self_stop(void)
194 +{
195 + pr_debug("CPU %u will stop doing anything useful since another CPU has paniced\n",
196 + smp_processor_id());
197 + set_cpu_online(smp_processor_id(), false);
198 + while (1)
199 + cpu_relax();
200 +}
201 +
202 /*
203 * not supported here
204 */
205 diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c
206 index 17886744dbe6..55bf73710a59 100644
207 --- a/arch/arm/mach-omap1/board-ams-delta.c
208 +++ b/arch/arm/mach-omap1/board-ams-delta.c
209 @@ -247,8 +247,8 @@ static struct platform_device latch2_gpio_device = {
210 #define LATCH2_PIN_SCARD_CMDVCC 11
211 #define LATCH2_PIN_MODEM_NRESET 12
212 #define LATCH2_PIN_MODEM_CODEC 13
213 -#define LATCH2_PIN_HOOKFLASH1 14
214 -#define LATCH2_PIN_HOOKFLASH2 15
215 +#define LATCH2_PIN_AUDIO_MUTE 14
216 +#define LATCH2_PIN_HOOKFLASH 15
217
218 static struct regulator_consumer_supply modem_nreset_consumers[] = {
219 REGULATOR_SUPPLY("RESET#", "serial8250.1"),
220 @@ -588,6 +588,8 @@ static int gpiochip_match_by_label(struct gpio_chip *chip, void *data)
221 static struct gpiod_hog ams_delta_gpio_hogs[] = {
222 GPIO_HOG(LATCH2_LABEL, LATCH2_PIN_KEYBRD_DATAOUT, "keybrd_dataout",
223 GPIO_ACTIVE_HIGH, GPIOD_OUT_LOW),
224 + GPIO_HOG(LATCH2_LABEL, LATCH2_PIN_AUDIO_MUTE, "audio_mute",
225 + GPIO_ACTIVE_HIGH, GPIOD_OUT_LOW),
226 {},
227 };
228
229 diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
230 index 083dcd9942ce..921c9aaee63f 100644
231 --- a/arch/arm/mach-omap2/omap_hwmod.c
232 +++ b/arch/arm/mach-omap2/omap_hwmod.c
233 @@ -2413,7 +2413,7 @@ static int __init _init(struct omap_hwmod *oh, void *data)
234 * a stub; implementing this properly requires iclk autoidle usecounting in
235 * the clock code. No return value.
236 */
237 -static void __init _setup_iclk_autoidle(struct omap_hwmod *oh)
238 +static void _setup_iclk_autoidle(struct omap_hwmod *oh)
239 {
240 struct omap_hwmod_ocp_if *os;
241
242 @@ -2444,7 +2444,7 @@ static void __init _setup_iclk_autoidle(struct omap_hwmod *oh)
243 * reset. Returns 0 upon success or a negative error code upon
244 * failure.
245 */
246 -static int __init _setup_reset(struct omap_hwmod *oh)
247 +static int _setup_reset(struct omap_hwmod *oh)
248 {
249 int r;
250
251 @@ -2505,7 +2505,7 @@ static int __init _setup_reset(struct omap_hwmod *oh)
252 *
253 * No return value.
254 */
255 -static void __init _setup_postsetup(struct omap_hwmod *oh)
256 +static void _setup_postsetup(struct omap_hwmod *oh)
257 {
258 u8 postsetup_state;
259
260 diff --git a/arch/arm/mach-pxa/cm-x300.c b/arch/arm/mach-pxa/cm-x300.c
261 index c5c0ab8ac9f9..024c1fbcc55a 100644
262 --- a/arch/arm/mach-pxa/cm-x300.c
263 +++ b/arch/arm/mach-pxa/cm-x300.c
264 @@ -558,7 +558,7 @@ static struct pxa3xx_u2d_platform_data cm_x300_u2d_platform_data = {
265 .exit = cm_x300_u2d_exit,
266 };
267
268 -static void cm_x300_init_u2d(void)
269 +static void __init cm_x300_init_u2d(void)
270 {
271 pxa3xx_set_u2d_info(&cm_x300_u2d_platform_data);
272 }
273 diff --git a/arch/arm/mach-pxa/littleton.c b/arch/arm/mach-pxa/littleton.c
274 index 9e132b3e48c6..9960ea158829 100644
275 --- a/arch/arm/mach-pxa/littleton.c
276 +++ b/arch/arm/mach-pxa/littleton.c
277 @@ -184,7 +184,7 @@ static struct pxafb_mach_info littleton_lcd_info = {
278 .lcd_conn = LCD_COLOR_TFT_16BPP,
279 };
280
281 -static void littleton_init_lcd(void)
282 +static void __init littleton_init_lcd(void)
283 {
284 pxa_set_fb_info(NULL, &littleton_lcd_info);
285 }
286 diff --git a/arch/arm/mach-pxa/zeus.c b/arch/arm/mach-pxa/zeus.c
287 index d53ea12fc766..54a32f0433a2 100644
288 --- a/arch/arm/mach-pxa/zeus.c
289 +++ b/arch/arm/mach-pxa/zeus.c
290 @@ -576,7 +576,7 @@ static struct pxaohci_platform_data zeus_ohci_platform_data = {
291 .flags = ENABLE_PORT_ALL | POWER_SENSE_LOW,
292 };
293
294 -static void zeus_register_ohci(void)
295 +static void __init zeus_register_ohci(void)
296 {
297 /* Port 2 is shared between host and client interface. */
298 UP2OCR = UP2OCR_HXOE | UP2OCR_HXS | UP2OCR_DMPDE | UP2OCR_DPPDE;
299 diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-orangepi-win.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-orangepi-win.dts
300 index b0c64f75792c..8974b5a1d3b1 100644
301 --- a/arch/arm64/boot/dts/allwinner/sun50i-a64-orangepi-win.dts
302 +++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-orangepi-win.dts
303 @@ -188,6 +188,7 @@
304 reg = <0x3a3>;
305 interrupt-parent = <&r_intc>;
306 interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
307 + x-powers,drive-vbus-en; /* set N_VBUSEN as output pin */
308 };
309 };
310
311 diff --git a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
312 index df017dbd2e57..b1a42e99cb67 100644
313 --- a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
314 +++ b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
315 @@ -143,7 +143,7 @@
316 compatible = "amlogic,meson-axg-dwmac", "snps,dwmac";
317 reg = <0x0 0xff3f0000 0x0 0x10000
318 0x0 0xff634540 0x0 0x8>;
319 - interrupts = <GIC_SPI 8 IRQ_TYPE_EDGE_RISING>;
320 + interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
321 interrupt-names = "macirq";
322 clocks = <&clkc CLKID_ETH>,
323 <&clkc CLKID_FCLK_DIV2>,
324 diff --git a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
325 index f1e5cdbade5e..58e6bcaac1d8 100644
326 --- a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
327 +++ b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
328 @@ -462,7 +462,7 @@
329 compatible = "amlogic,meson-gx-dwmac", "amlogic,meson-gxbb-dwmac", "snps,dwmac";
330 reg = <0x0 0xc9410000 0x0 0x10000
331 0x0 0xc8834540 0x0 0x4>;
332 - interrupts = <GIC_SPI 8 IRQ_TYPE_EDGE_RISING>;
333 + interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>;
334 interrupt-names = "macirq";
335 status = "disabled";
336 };
337 diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts b/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
338 index 54954b314a45..f8d1cedbe600 100644
339 --- a/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
340 +++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts
341 @@ -143,7 +143,6 @@
342 interrupt-parent = <&gpio_intc>;
343 /* MAC_INTR on GPIOZ_15 */
344 interrupts = <29 IRQ_TYPE_LEVEL_LOW>;
345 - eee-broken-1000t;
346 };
347 };
348 };
349 diff --git a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
350 index 70325b273bd2..ec09bb5792b7 100644
351 --- a/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
352 +++ b/arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi
353 @@ -142,7 +142,6 @@
354 eth_phy0: ethernet-phy@0 {
355 /* Realtek RTL8211F (0x001cc916) */
356 reg = <0>;
357 - eee-broken-1000t;
358 };
359 };
360 };
361 diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dts b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dts
362 index 1d35f5406b5e..5bd4d69914bd 100644
363 --- a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dts
364 +++ b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dts
365 @@ -97,7 +97,7 @@
366 vcc3v3_pcie: vcc3v3-pcie-regulator {
367 compatible = "regulator-fixed";
368 enable-active-high;
369 - gpio = <&gpio1 RK_PC1 GPIO_ACTIVE_HIGH>;
370 + gpio = <&gpio1 RK_PD0 GPIO_ACTIVE_HIGH>;
371 pinctrl-names = "default";
372 pinctrl-0 = <&pcie_pwr_en>;
373 regulator-name = "vcc3v3_pcie";
374 @@ -293,12 +293,12 @@
375 };
376 };
377
378 - vcc2v8_dvp: LDO_REG2 {
379 - regulator-name = "vcc2v8_dvp";
380 + vcc3v0_touch: LDO_REG2 {
381 + regulator-name = "vcc3v0_touch";
382 regulator-always-on;
383 regulator-boot-on;
384 - regulator-min-microvolt = <2800000>;
385 - regulator-max-microvolt = <2800000>;
386 + regulator-min-microvolt = <3000000>;
387 + regulator-max-microvolt = <3000000>;
388 regulator-state-mem {
389 regulator-off-in-suspend;
390 };
391 @@ -397,7 +397,9 @@
392 vdd_cpu_b: regulator@40 {
393 compatible = "silergy,syr827";
394 reg = <0x40>;
395 - fcs,suspend-voltage-selector = <0>;
396 + fcs,suspend-voltage-selector = <1>;
397 + pinctrl-names = "default";
398 + pinctrl-0 = <&vsel1_gpio>;
399 regulator-name = "vdd_cpu_b";
400 regulator-min-microvolt = <712500>;
401 regulator-max-microvolt = <1500000>;
402 @@ -415,6 +417,8 @@
403 compatible = "silergy,syr828";
404 reg = <0x41>;
405 fcs,suspend-voltage-selector = <1>;
406 + pinctrl-names = "default";
407 + pinctrl-0 = <&vsel2_gpio>;
408 regulator-name = "vdd_gpu";
409 regulator-min-microvolt = <712500>;
410 regulator-max-microvolt = <1500000>;
411 @@ -519,7 +523,7 @@
412
413 pcie {
414 pcie_pwr_en: pcie-pwr-en {
415 - rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
416 + rockchip,pins = <1 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>;
417 };
418 };
419
420 @@ -529,7 +533,7 @@
421 };
422
423 vsel1_gpio: vsel1-gpio {
424 - rockchip,pins = <1 RK_PC2 RK_FUNC_GPIO &pcfg_pull_down>;
425 + rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_down>;
426 };
427
428 vsel2_gpio: vsel2-gpio {
429 diff --git a/arch/arm64/include/asm/io.h b/arch/arm64/include/asm/io.h
430 index 9f8b915af3a7..ee723835c1f4 100644
431 --- a/arch/arm64/include/asm/io.h
432 +++ b/arch/arm64/include/asm/io.h
433 @@ -104,7 +104,23 @@ static inline u64 __raw_readq(const volatile void __iomem *addr)
434 }
435
436 /* IO barriers */
437 -#define __iormb() rmb()
438 +#define __iormb(v) \
439 +({ \
440 + unsigned long tmp; \
441 + \
442 + rmb(); \
443 + \
444 + /* \
445 + * Create a dummy control dependency from the IO read to any \
446 + * later instructions. This ensures that a subsequent call to \
447 + * udelay() will be ordered due to the ISB in get_cycles(). \
448 + */ \
449 + asm volatile("eor %0, %1, %1\n" \
450 + "cbnz %0, ." \
451 + : "=r" (tmp) : "r" ((unsigned long)(v)) \
452 + : "memory"); \
453 +})
454 +
455 #define __iowmb() wmb()
456
457 #define mmiowb() do { } while (0)
458 @@ -129,10 +145,10 @@ static inline u64 __raw_readq(const volatile void __iomem *addr)
459 * following Normal memory access. Writes are ordered relative to any prior
460 * Normal memory access.
461 */
462 -#define readb(c) ({ u8 __v = readb_relaxed(c); __iormb(); __v; })
463 -#define readw(c) ({ u16 __v = readw_relaxed(c); __iormb(); __v; })
464 -#define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; })
465 -#define readq(c) ({ u64 __v = readq_relaxed(c); __iormb(); __v; })
466 +#define readb(c) ({ u8 __v = readb_relaxed(c); __iormb(__v); __v; })
467 +#define readw(c) ({ u16 __v = readw_relaxed(c); __iormb(__v); __v; })
468 +#define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(__v); __v; })
469 +#define readq(c) ({ u64 __v = readq_relaxed(c); __iormb(__v); __v; })
470
471 #define writeb(v,c) ({ __iowmb(); writeb_relaxed((v),(c)); })
472 #define writew(v,c) ({ __iowmb(); writew_relaxed((v),(c)); })
473 @@ -183,9 +199,9 @@ extern void __iomem *ioremap_cache(phys_addr_t phys_addr, size_t size);
474 /*
475 * io{read,write}{16,32,64}be() macros
476 */
477 -#define ioread16be(p) ({ __u16 __v = be16_to_cpu((__force __be16)__raw_readw(p)); __iormb(); __v; })
478 -#define ioread32be(p) ({ __u32 __v = be32_to_cpu((__force __be32)__raw_readl(p)); __iormb(); __v; })
479 -#define ioread64be(p) ({ __u64 __v = be64_to_cpu((__force __be64)__raw_readq(p)); __iormb(); __v; })
480 +#define ioread16be(p) ({ __u16 __v = be16_to_cpu((__force __be16)__raw_readw(p)); __iormb(__v); __v; })
481 +#define ioread32be(p) ({ __u32 __v = be32_to_cpu((__force __be32)__raw_readl(p)); __iormb(__v); __v; })
482 +#define ioread64be(p) ({ __u64 __v = be64_to_cpu((__force __be64)__raw_readq(p)); __iormb(__v); __v; })
483
484 #define iowrite16be(v,p) ({ __iowmb(); __raw_writew((__force __u16)cpu_to_be16(v), p); })
485 #define iowrite32be(v,p) ({ __iowmb(); __raw_writel((__force __u32)cpu_to_be32(v), p); })
486 diff --git a/arch/arm64/include/uapi/asm/ptrace.h b/arch/arm64/include/uapi/asm/ptrace.h
487 index a36227fdb084..65ef8b0fdb0e 100644
488 --- a/arch/arm64/include/uapi/asm/ptrace.h
489 +++ b/arch/arm64/include/uapi/asm/ptrace.h
490 @@ -131,7 +131,7 @@ struct user_sve_header {
491
492 /* Offset from the start of struct user_sve_header to the register data */
493 #define SVE_PT_REGS_OFFSET \
494 - ((sizeof(struct sve_context) + (SVE_VQ_BYTES - 1)) \
495 + ((sizeof(struct user_sve_header) + (SVE_VQ_BYTES - 1)) \
496 / SVE_VQ_BYTES * SVE_VQ_BYTES)
497
498 /*
499 diff --git a/arch/arm64/kernel/entry-ftrace.S b/arch/arm64/kernel/entry-ftrace.S
500 index 1175f5827ae1..295951f3172e 100644
501 --- a/arch/arm64/kernel/entry-ftrace.S
502 +++ b/arch/arm64/kernel/entry-ftrace.S
503 @@ -79,7 +79,6 @@
504 .macro mcount_get_lr reg
505 ldr \reg, [x29]
506 ldr \reg, [\reg, #8]
507 - mcount_adjust_addr \reg, \reg
508 .endm
509
510 .macro mcount_get_lr_addr reg
511 diff --git a/arch/mips/boot/dts/img/boston.dts b/arch/mips/boot/dts/img/boston.dts
512 index 65af3f6ba81c..84328afa3a55 100644
513 --- a/arch/mips/boot/dts/img/boston.dts
514 +++ b/arch/mips/boot/dts/img/boston.dts
515 @@ -141,6 +141,12 @@
516 #size-cells = <2>;
517 #interrupt-cells = <1>;
518
519 + eg20t_phub@2,0,0 {
520 + compatible = "pci8086,8801";
521 + reg = <0x00020000 0 0 0 0>;
522 + intel,eg20t-prefetch = <0>;
523 + };
524 +
525 eg20t_mac@2,0,1 {
526 compatible = "pci8086,8802";
527 reg = <0x00020100 0 0 0 0>;
528 diff --git a/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h b/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h
529 index e9cc62cfac99..ff50aeb1a933 100644
530 --- a/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h
531 +++ b/arch/mips/include/asm/mach-jz4740/jz4740_mmc.h
532 @@ -4,8 +4,6 @@
533
534 struct jz4740_mmc_platform_data {
535 int gpio_power;
536 - int gpio_card_detect;
537 - int gpio_read_only;
538 unsigned card_detect_active_low:1;
539 unsigned read_only_active_low:1;
540 unsigned power_active_low:1;
541 diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm/inst.h
542 index c05dcf5ab414..273ef58f4d43 100644
543 --- a/arch/mips/include/uapi/asm/inst.h
544 +++ b/arch/mips/include/uapi/asm/inst.h
545 @@ -369,8 +369,8 @@ enum mm_32a_minor_op {
546 mm_ext_op = 0x02c,
547 mm_pool32axf_op = 0x03c,
548 mm_srl32_op = 0x040,
549 + mm_srlv32_op = 0x050,
550 mm_sra_op = 0x080,
551 - mm_srlv32_op = 0x090,
552 mm_rotr_op = 0x0c0,
553 mm_lwxs_op = 0x118,
554 mm_addu32_op = 0x150,
555 diff --git a/arch/mips/jz4740/board-qi_lb60.c b/arch/mips/jz4740/board-qi_lb60.c
556 index af0c8ace0141..705593d40d12 100644
557 --- a/arch/mips/jz4740/board-qi_lb60.c
558 +++ b/arch/mips/jz4740/board-qi_lb60.c
559 @@ -43,7 +43,6 @@
560 #include "clock.h"
561
562 /* GPIOs */
563 -#define QI_LB60_GPIO_SD_CD JZ_GPIO_PORTD(0)
564 #define QI_LB60_GPIO_SD_VCC_EN_N JZ_GPIO_PORTD(2)
565
566 #define QI_LB60_GPIO_KEYOUT(x) (JZ_GPIO_PORTC(10) + (x))
567 @@ -386,12 +385,18 @@ static struct platform_device qi_lb60_gpio_keys = {
568 };
569
570 static struct jz4740_mmc_platform_data qi_lb60_mmc_pdata = {
571 - .gpio_card_detect = QI_LB60_GPIO_SD_CD,
572 - .gpio_read_only = -1,
573 .gpio_power = QI_LB60_GPIO_SD_VCC_EN_N,
574 .power_active_low = 1,
575 };
576
577 +static struct gpiod_lookup_table qi_lb60_mmc_gpio_table = {
578 + .dev_id = "jz4740-mmc.0",
579 + .table = {
580 + GPIO_LOOKUP("GPIOD", 0, "cd", GPIO_ACTIVE_HIGH),
581 + { },
582 + },
583 +};
584 +
585 /* beeper */
586 static struct pwm_lookup qi_lb60_pwm_lookup[] = {
587 PWM_LOOKUP("jz4740-pwm", 4, "pwm-beeper", NULL, 0,
588 @@ -500,6 +505,7 @@ static int __init qi_lb60_init_platform_devices(void)
589 gpiod_add_lookup_table(&qi_lb60_audio_gpio_table);
590 gpiod_add_lookup_table(&qi_lb60_nand_gpio_table);
591 gpiod_add_lookup_table(&qi_lb60_spigpio_gpio_table);
592 + gpiod_add_lookup_table(&qi_lb60_mmc_gpio_table);
593
594 spi_register_board_info(qi_lb60_spi_board_info,
595 ARRAY_SIZE(qi_lb60_spi_board_info));
596 diff --git a/arch/mips/ralink/Kconfig b/arch/mips/ralink/Kconfig
597 index 1f9cb0e3c79a..613d61763433 100644
598 --- a/arch/mips/ralink/Kconfig
599 +++ b/arch/mips/ralink/Kconfig
600 @@ -38,6 +38,7 @@ choice
601
602 config SOC_MT7620
603 bool "MT7620/8"
604 + select CPU_MIPSR2_IRQ_VI
605 select HW_HAS_PCI
606
607 config SOC_MT7621
608 diff --git a/arch/nds32/mm/Makefile b/arch/nds32/mm/Makefile
609 index 6b6855852223..7c5c15ad854a 100644
610 --- a/arch/nds32/mm/Makefile
611 +++ b/arch/nds32/mm/Makefile
612 @@ -4,4 +4,8 @@ obj-y := extable.o tlb.o \
613
614 obj-$(CONFIG_ALIGNMENT_TRAP) += alignment.o
615 obj-$(CONFIG_HIGHMEM) += highmem.o
616 -CFLAGS_proc-n13.o += -fomit-frame-pointer
617 +
618 +ifdef CONFIG_FUNCTION_TRACER
619 +CFLAGS_REMOVE_proc.o = $(CC_FLAGS_FTRACE)
620 +endif
621 +CFLAGS_proc.o += -fomit-frame-pointer
622 diff --git a/arch/powerpc/include/asm/fadump.h b/arch/powerpc/include/asm/fadump.h
623 index 1e7a33592e29..15bc07a31c46 100644
624 --- a/arch/powerpc/include/asm/fadump.h
625 +++ b/arch/powerpc/include/asm/fadump.h
626 @@ -200,7 +200,7 @@ struct fad_crash_memory_ranges {
627 unsigned long long size;
628 };
629
630 -extern int is_fadump_boot_memory_area(u64 addr, ulong size);
631 +extern int is_fadump_memory_area(u64 addr, ulong size);
632 extern int early_init_dt_scan_fw_dump(unsigned long node,
633 const char *uname, int depth, void *data);
634 extern int fadump_reserve_mem(void);
635 diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h
636 index 15bea9a0f260..ebc0b916dcf9 100644
637 --- a/arch/powerpc/include/asm/uaccess.h
638 +++ b/arch/powerpc/include/asm/uaccess.h
639 @@ -63,7 +63,7 @@ static inline int __access_ok(unsigned long addr, unsigned long size,
640 #endif
641
642 #define access_ok(type, addr, size) \
643 - (__chk_user_ptr(addr), \
644 + (__chk_user_ptr(addr), (void)(type), \
645 __access_ok((__force unsigned long)(addr), (size), get_fs()))
646
647 /*
648 diff --git a/arch/powerpc/kernel/fadump.c b/arch/powerpc/kernel/fadump.c
649 index 761b28b1427d..7fd9b3e1fa39 100644
650 --- a/arch/powerpc/kernel/fadump.c
651 +++ b/arch/powerpc/kernel/fadump.c
652 @@ -118,13 +118,19 @@ int __init early_init_dt_scan_fw_dump(unsigned long node,
653
654 /*
655 * If fadump is registered, check if the memory provided
656 - * falls within boot memory area.
657 + * falls within boot memory area and reserved memory area.
658 */
659 -int is_fadump_boot_memory_area(u64 addr, ulong size)
660 +int is_fadump_memory_area(u64 addr, ulong size)
661 {
662 + u64 d_start = fw_dump.reserve_dump_area_start;
663 + u64 d_end = d_start + fw_dump.reserve_dump_area_size;
664 +
665 if (!fw_dump.dump_registered)
666 return 0;
667
668 + if (((addr + size) > d_start) && (addr <= d_end))
669 + return 1;
670 +
671 return (addr + size) > RMA_START && addr <= fw_dump.boot_memory_size;
672 }
673
674 diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
675 index 434581bcd5b4..1148c3c60c3b 100644
676 --- a/arch/powerpc/kernel/vmlinux.lds.S
677 +++ b/arch/powerpc/kernel/vmlinux.lds.S
678 @@ -308,6 +308,10 @@ SECTIONS
679 #ifdef CONFIG_PPC32
680 .data : AT(ADDR(.data) - LOAD_OFFSET) {
681 DATA_DATA
682 +#ifdef CONFIG_UBSAN
683 + *(.data..Lubsan_data*)
684 + *(.data..Lubsan_type*)
685 +#endif
686 *(.data.rel*)
687 *(SDATA_MAIN)
688 *(.sdata2)
689 diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
690 index 2869a299c4ed..75e2e471442f 100644
691 --- a/arch/powerpc/kvm/powerpc.c
692 +++ b/arch/powerpc/kvm/powerpc.c
693 @@ -543,8 +543,11 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
694 #ifdef CONFIG_PPC_BOOK3S_64
695 case KVM_CAP_SPAPR_TCE:
696 case KVM_CAP_SPAPR_TCE_64:
697 - /* fallthrough */
698 + r = 1;
699 + break;
700 case KVM_CAP_SPAPR_TCE_VFIO:
701 + r = !!cpu_has_feature(CPU_FTR_HVMODE);
702 + break;
703 case KVM_CAP_PPC_RTAS:
704 case KVM_CAP_PPC_FIXUP_HCALL:
705 case KVM_CAP_PPC_ENABLE_HCALL:
706 diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
707 index 1697e903bbf2..50e5c790d11e 100644
708 --- a/arch/powerpc/mm/fault.c
709 +++ b/arch/powerpc/mm/fault.c
710 @@ -226,7 +226,9 @@ static int mm_fault_error(struct pt_regs *regs, unsigned long addr,
711 static bool bad_kernel_fault(bool is_exec, unsigned long error_code,
712 unsigned long address)
713 {
714 - if (is_exec && (error_code & (DSISR_NOEXEC_OR_G | DSISR_KEYFAULT))) {
715 + /* NX faults set DSISR_PROTFAULT on the 8xx, DSISR_NOEXEC_OR_G on others */
716 + if (is_exec && (error_code & (DSISR_NOEXEC_OR_G | DSISR_KEYFAULT |
717 + DSISR_PROTFAULT))) {
718 printk_ratelimited(KERN_CRIT "kernel tried to execute"
719 " exec-protected page (%lx) -"
720 "exploit attempt? (uid: %d)\n",
721 diff --git a/arch/powerpc/perf/isa207-common.c b/arch/powerpc/perf/isa207-common.c
722 index 177de814286f..6a2f65d3d088 100644
723 --- a/arch/powerpc/perf/isa207-common.c
724 +++ b/arch/powerpc/perf/isa207-common.c
725 @@ -226,8 +226,13 @@ void isa207_get_mem_weight(u64 *weight)
726 u64 mmcra = mfspr(SPRN_MMCRA);
727 u64 exp = MMCRA_THR_CTR_EXP(mmcra);
728 u64 mantissa = MMCRA_THR_CTR_MANT(mmcra);
729 + u64 sier = mfspr(SPRN_SIER);
730 + u64 val = (sier & ISA207_SIER_TYPE_MASK) >> ISA207_SIER_TYPE_SHIFT;
731
732 - *weight = mantissa << (2 * exp);
733 + if (val == 0 || val == 7)
734 + *weight = 0;
735 + else
736 + *weight = mantissa << (2 * exp);
737 }
738
739 int isa207_get_constraint(u64 event, unsigned long *maskp, unsigned long *valp)
740 diff --git a/arch/powerpc/platforms/powernv/pci-ioda-tce.c b/arch/powerpc/platforms/powernv/pci-ioda-tce.c
741 index fe9691040f54..7639b2168755 100644
742 --- a/arch/powerpc/platforms/powernv/pci-ioda-tce.c
743 +++ b/arch/powerpc/platforms/powernv/pci-ioda-tce.c
744 @@ -299,7 +299,7 @@ long pnv_pci_ioda2_table_alloc_pages(int nid, __u64 bus_offset,
745 if (alloc_userspace_copy) {
746 offset = 0;
747 uas = pnv_pci_ioda2_table_do_alloc_pages(nid, level_shift,
748 - levels, tce_table_size, &offset,
749 + tmplevels, tce_table_size, &offset,
750 &total_allocated_uas);
751 if (!uas)
752 goto free_tces_exit;
753 diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c
754 index 7625546caefd..17958043e7f7 100644
755 --- a/arch/powerpc/platforms/pseries/dlpar.c
756 +++ b/arch/powerpc/platforms/pseries/dlpar.c
757 @@ -270,6 +270,8 @@ int dlpar_detach_node(struct device_node *dn)
758 if (rc)
759 return rc;
760
761 + of_node_put(dn);
762 +
763 return 0;
764 }
765
766 diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
767 index 2a983b5a52e1..2318ab29d5dd 100644
768 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
769 +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
770 @@ -355,8 +355,11 @@ static bool lmb_is_removable(struct drmem_lmb *lmb)
771 phys_addr = lmb->base_addr;
772
773 #ifdef CONFIG_FA_DUMP
774 - /* Don't hot-remove memory that falls in fadump boot memory area */
775 - if (is_fadump_boot_memory_area(phys_addr, block_sz))
776 + /*
777 + * Don't hot-remove memory that falls in fadump boot memory area
778 + * and memory that is reserved for capturing old kernel memory.
779 + */
780 + if (is_fadump_memory_area(phys_addr, block_sz))
781 return false;
782 #endif
783
784 diff --git a/arch/s390/include/uapi/asm/zcrypt.h b/arch/s390/include/uapi/asm/zcrypt.h
785 index 42c81a95e97b..494c34c50716 100644
786 --- a/arch/s390/include/uapi/asm/zcrypt.h
787 +++ b/arch/s390/include/uapi/asm/zcrypt.h
788 @@ -150,8 +150,8 @@ struct ica_xcRB {
789 * @cprb_len: CPRB header length [0x0020]
790 * @cprb_ver_id: CPRB version id. [0x04]
791 * @pad_000: Alignment pad bytes
792 - * @flags: Admin cmd [0x80] or functional cmd [0x00]
793 - * @func_id: Function id / subtype [0x5434]
794 + * @flags: Admin bit [0x80], Special bit [0x20]
795 + * @func_id: Function id / subtype [0x5434] "T4"
796 * @source_id: Source id [originator id]
797 * @target_id: Target id [usage/ctrl domain id]
798 * @ret_code: Return code
799 diff --git a/arch/sh/boards/mach-kfr2r09/setup.c b/arch/sh/boards/mach-kfr2r09/setup.c
800 index e59c577ed871..c70bc7809dda 100644
801 --- a/arch/sh/boards/mach-kfr2r09/setup.c
802 +++ b/arch/sh/boards/mach-kfr2r09/setup.c
803 @@ -25,7 +25,6 @@
804 #include <linux/memblock.h>
805 #include <linux/mfd/tmio.h>
806 #include <linux/mmc/host.h>
807 -#include <linux/mtd/onenand.h>
808 #include <linux/mtd/physmap.h>
809 #include <linux/platform_data/lv5207lp.h>
810 #include <linux/platform_device.h>
811 diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h
812 index 7485398d0737..9c04562310b3 100644
813 --- a/arch/um/include/asm/pgtable.h
814 +++ b/arch/um/include/asm/pgtable.h
815 @@ -197,12 +197,17 @@ static inline pte_t pte_mkold(pte_t pte)
816
817 static inline pte_t pte_wrprotect(pte_t pte)
818 {
819 - pte_clear_bits(pte, _PAGE_RW);
820 + if (likely(pte_get_bits(pte, _PAGE_RW)))
821 + pte_clear_bits(pte, _PAGE_RW);
822 + else
823 + return pte;
824 return(pte_mknewprot(pte));
825 }
826
827 static inline pte_t pte_mkread(pte_t pte)
828 {
829 + if (unlikely(pte_get_bits(pte, _PAGE_USER)))
830 + return pte;
831 pte_set_bits(pte, _PAGE_USER);
832 return(pte_mknewprot(pte));
833 }
834 @@ -221,6 +226,8 @@ static inline pte_t pte_mkyoung(pte_t pte)
835
836 static inline pte_t pte_mkwrite(pte_t pte)
837 {
838 + if (unlikely(pte_get_bits(pte, _PAGE_RW)))
839 + return pte;
840 pte_set_bits(pte, _PAGE_RW);
841 return(pte_mknewprot(pte));
842 }
843 diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
844 index ecc3e34ca955..90b6718ff861 100644
845 --- a/arch/x86/events/intel/core.c
846 +++ b/arch/x86/events/intel/core.c
847 @@ -3558,6 +3558,14 @@ static void free_excl_cntrs(int cpu)
848 }
849
850 static void intel_pmu_cpu_dying(int cpu)
851 +{
852 + fini_debug_store_on_cpu(cpu);
853 +
854 + if (x86_pmu.counter_freezing)
855 + disable_counter_freeze();
856 +}
857 +
858 +static void intel_pmu_cpu_dead(int cpu)
859 {
860 struct cpu_hw_events *cpuc = &per_cpu(cpu_hw_events, cpu);
861 struct intel_shared_regs *pc;
862 @@ -3570,11 +3578,6 @@ static void intel_pmu_cpu_dying(int cpu)
863 }
864
865 free_excl_cntrs(cpu);
866 -
867 - fini_debug_store_on_cpu(cpu);
868 -
869 - if (x86_pmu.counter_freezing)
870 - disable_counter_freeze();
871 }
872
873 static void intel_pmu_sched_task(struct perf_event_context *ctx,
874 @@ -3663,6 +3666,7 @@ static __initconst const struct x86_pmu core_pmu = {
875 .cpu_prepare = intel_pmu_cpu_prepare,
876 .cpu_starting = intel_pmu_cpu_starting,
877 .cpu_dying = intel_pmu_cpu_dying,
878 + .cpu_dead = intel_pmu_cpu_dead,
879 };
880
881 static struct attribute *intel_pmu_attrs[];
882 @@ -3703,6 +3707,8 @@ static __initconst const struct x86_pmu intel_pmu = {
883 .cpu_prepare = intel_pmu_cpu_prepare,
884 .cpu_starting = intel_pmu_cpu_starting,
885 .cpu_dying = intel_pmu_cpu_dying,
886 + .cpu_dead = intel_pmu_cpu_dead,
887 +
888 .guest_get_msrs = intel_guest_get_msrs,
889 .sched_task = intel_pmu_sched_task,
890 };
891 diff --git a/arch/x86/events/intel/uncore_snbep.c b/arch/x86/events/intel/uncore_snbep.c
892 index c07bee31abe8..b10e04387f38 100644
893 --- a/arch/x86/events/intel/uncore_snbep.c
894 +++ b/arch/x86/events/intel/uncore_snbep.c
895 @@ -1222,6 +1222,8 @@ static struct pci_driver snbep_uncore_pci_driver = {
896 .id_table = snbep_uncore_pci_ids,
897 };
898
899 +#define NODE_ID_MASK 0x7
900 +
901 /*
902 * build pci bus to socket mapping
903 */
904 @@ -1243,7 +1245,7 @@ static int snbep_pci2phy_map_init(int devid, int nodeid_loc, int idmap_loc, bool
905 err = pci_read_config_dword(ubox_dev, nodeid_loc, &config);
906 if (err)
907 break;
908 - nodeid = config;
909 + nodeid = config & NODE_ID_MASK;
910 /* get the Node ID mapping */
911 err = pci_read_config_dword(ubox_dev, idmap_loc, &config);
912 if (err)
913 diff --git a/arch/x86/include/asm/fpu/internal.h b/arch/x86/include/asm/fpu/internal.h
914 index 69dcdf195b61..fa2c93cb42a2 100644
915 --- a/arch/x86/include/asm/fpu/internal.h
916 +++ b/arch/x86/include/asm/fpu/internal.h
917 @@ -106,6 +106,9 @@ extern void fpstate_sanitize_xstate(struct fpu *fpu);
918 #define user_insn(insn, output, input...) \
919 ({ \
920 int err; \
921 + \
922 + might_fault(); \
923 + \
924 asm volatile(ASM_STAC "\n" \
925 "1:" #insn "\n\t" \
926 "2: " ASM_CLAC "\n" \
927 diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
928 index 7b135796813f..d8b0b0e7be32 100644
929 --- a/arch/x86/kernel/cpu/bugs.c
930 +++ b/arch/x86/kernel/cpu/bugs.c
931 @@ -69,7 +69,7 @@ void __init check_bugs(void)
932 * identify_boot_cpu() initialized SMT support information, let the
933 * core code know.
934 */
935 - cpu_smt_check_topology_early();
936 + cpu_smt_check_topology();
937
938 if (!IS_ENABLED(CONFIG_SMP)) {
939 pr_info("CPU: ");
940 diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
941 index 36d2696c9563..84089c2342c0 100644
942 --- a/arch/x86/kernel/cpu/mcheck/mce.c
943 +++ b/arch/x86/kernel/cpu/mcheck/mce.c
944 @@ -786,6 +786,7 @@ static int mce_no_way_out(struct mce *m, char **msg, unsigned long *validp,
945 quirk_no_way_out(i, m, regs);
946
947 if (mce_severity(m, mca_cfg.tolerant, &tmp, true) >= MCE_PANIC_SEVERITY) {
948 + m->bank = i;
949 mce_read_aux(m, i);
950 *msg = tmp;
951 return 1;
952 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
953 index 101f53ccf571..11641d9e7f6f 100644
954 --- a/arch/x86/kvm/svm.c
955 +++ b/arch/x86/kvm/svm.c
956 @@ -5836,6 +5836,13 @@ static bool svm_cpu_has_accelerated_tpr(void)
957
958 static bool svm_has_emulated_msr(int index)
959 {
960 + switch (index) {
961 + case MSR_IA32_MCG_EXT_CTL:
962 + return false;
963 + default:
964 + break;
965 + }
966 +
967 return true;
968 }
969
970 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
971 index 5a2c87552122..4ce6595e454c 100644
972 --- a/arch/x86/kvm/vmx.c
973 +++ b/arch/x86/kvm/vmx.c
974 @@ -28,6 +28,7 @@
975 #include <linux/mm.h>
976 #include <linux/highmem.h>
977 #include <linux/sched.h>
978 +#include <linux/sched/smt.h>
979 #include <linux/moduleparam.h>
980 #include <linux/mod_devicetable.h>
981 #include <linux/trace_events.h>
982 @@ -8509,6 +8510,7 @@ static void free_nested(struct kvm_vcpu *vcpu)
983 if (!vmx->nested.vmxon && !vmx->nested.smm.vmxon)
984 return;
985
986 + hrtimer_cancel(&vmx->nested.preemption_timer);
987 vmx->nested.vmxon = false;
988 vmx->nested.smm.vmxon = false;
989 free_vpid(vmx->nested.vpid02);
990 @@ -11642,7 +11644,7 @@ static int vmx_vm_init(struct kvm *kvm)
991 * Warn upon starting the first VM in a potentially
992 * insecure environment.
993 */
994 - if (cpu_smt_control == CPU_SMT_ENABLED)
995 + if (sched_smt_active())
996 pr_warn_once(L1TF_MSG_SMT);
997 if (l1tf_vmx_mitigation == VMENTER_L1D_FLUSH_NEVER)
998 pr_warn_once(L1TF_MSG_L1D);
999 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
1000 index 4247cb230bd3..6d69503ca43e 100644
1001 --- a/arch/x86/kvm/x86.c
1002 +++ b/arch/x86/kvm/x86.c
1003 @@ -5041,6 +5041,13 @@ int kvm_read_guest_virt(struct kvm_vcpu *vcpu,
1004 {
1005 u32 access = (kvm_x86_ops->get_cpl(vcpu) == 3) ? PFERR_USER_MASK : 0;
1006
1007 + /*
1008 + * FIXME: this should call handle_emulation_failure if X86EMUL_IO_NEEDED
1009 + * is returned, but our callers are not ready for that and they blindly
1010 + * call kvm_inject_page_fault. Ensure that they at least do not leak
1011 + * uninitialized kernel stack memory into cr2 and error code.
1012 + */
1013 + memset(exception, 0, sizeof(*exception));
1014 return kvm_read_guest_virt_helper(addr, val, bytes, vcpu, access,
1015 exception);
1016 }
1017 diff --git a/arch/x86/pci/broadcom_bus.c b/arch/x86/pci/broadcom_bus.c
1018 index 526536c81ddc..ca1e8e6dccc8 100644
1019 --- a/arch/x86/pci/broadcom_bus.c
1020 +++ b/arch/x86/pci/broadcom_bus.c
1021 @@ -50,8 +50,8 @@ static void __init cnb20le_res(u8 bus, u8 slot, u8 func)
1022 word1 = read_pci_config_16(bus, slot, func, 0xc0);
1023 word2 = read_pci_config_16(bus, slot, func, 0xc2);
1024 if (word1 != word2) {
1025 - res.start = (word1 << 16) | 0x0000;
1026 - res.end = (word2 << 16) | 0xffff;
1027 + res.start = ((resource_size_t) word1 << 16) | 0x0000;
1028 + res.end = ((resource_size_t) word2 << 16) | 0xffff;
1029 res.flags = IORESOURCE_MEM;
1030 update_res(info, res.start, res.end, res.flags, 0);
1031 }
1032 diff --git a/arch/xtensa/boot/dts/xtfpga.dtsi b/arch/xtensa/boot/dts/xtfpga.dtsi
1033 index 1090528825ec..e46ae07bab05 100644
1034 --- a/arch/xtensa/boot/dts/xtfpga.dtsi
1035 +++ b/arch/xtensa/boot/dts/xtfpga.dtsi
1036 @@ -103,7 +103,7 @@
1037 };
1038 };
1039
1040 - spi0: spi-master@0d0a0000 {
1041 + spi0: spi@0d0a0000 {
1042 compatible = "cdns,xtfpga-spi";
1043 #address-cells = <1>;
1044 #size-cells = <0>;
1045 diff --git a/crypto/Kconfig b/crypto/Kconfig
1046 index 05c91eb10ca1..4f24acac3d48 100644
1047 --- a/crypto/Kconfig
1048 +++ b/crypto/Kconfig
1049 @@ -1006,7 +1006,8 @@ config CRYPTO_AES_TI
1050 8 for decryption), this implementation only uses just two S-boxes of
1051 256 bytes each, and attempts to eliminate data dependent latencies by
1052 prefetching the entire table into the cache at the start of each
1053 - block.
1054 + block. Interrupts are also disabled to avoid races where cachelines
1055 + are evicted when the CPU is interrupted to do something else.
1056
1057 config CRYPTO_AES_586
1058 tristate "AES cipher algorithms (i586)"
1059 diff --git a/crypto/aes_ti.c b/crypto/aes_ti.c
1060 index 03023b2290e8..1ff9785b30f5 100644
1061 --- a/crypto/aes_ti.c
1062 +++ b/crypto/aes_ti.c
1063 @@ -269,6 +269,7 @@ static void aesti_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
1064 const u32 *rkp = ctx->key_enc + 4;
1065 int rounds = 6 + ctx->key_length / 4;
1066 u32 st0[4], st1[4];
1067 + unsigned long flags;
1068 int round;
1069
1070 st0[0] = ctx->key_enc[0] ^ get_unaligned_le32(in);
1071 @@ -276,6 +277,12 @@ static void aesti_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
1072 st0[2] = ctx->key_enc[2] ^ get_unaligned_le32(in + 8);
1073 st0[3] = ctx->key_enc[3] ^ get_unaligned_le32(in + 12);
1074
1075 + /*
1076 + * Temporarily disable interrupts to avoid races where cachelines are
1077 + * evicted when the CPU is interrupted to do something else.
1078 + */
1079 + local_irq_save(flags);
1080 +
1081 st0[0] ^= __aesti_sbox[ 0] ^ __aesti_sbox[128];
1082 st0[1] ^= __aesti_sbox[32] ^ __aesti_sbox[160];
1083 st0[2] ^= __aesti_sbox[64] ^ __aesti_sbox[192];
1084 @@ -300,6 +307,8 @@ static void aesti_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
1085 put_unaligned_le32(subshift(st1, 1) ^ rkp[5], out + 4);
1086 put_unaligned_le32(subshift(st1, 2) ^ rkp[6], out + 8);
1087 put_unaligned_le32(subshift(st1, 3) ^ rkp[7], out + 12);
1088 +
1089 + local_irq_restore(flags);
1090 }
1091
1092 static void aesti_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
1093 @@ -308,6 +317,7 @@ static void aesti_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
1094 const u32 *rkp = ctx->key_dec + 4;
1095 int rounds = 6 + ctx->key_length / 4;
1096 u32 st0[4], st1[4];
1097 + unsigned long flags;
1098 int round;
1099
1100 st0[0] = ctx->key_dec[0] ^ get_unaligned_le32(in);
1101 @@ -315,6 +325,12 @@ static void aesti_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
1102 st0[2] = ctx->key_dec[2] ^ get_unaligned_le32(in + 8);
1103 st0[3] = ctx->key_dec[3] ^ get_unaligned_le32(in + 12);
1104
1105 + /*
1106 + * Temporarily disable interrupts to avoid races where cachelines are
1107 + * evicted when the CPU is interrupted to do something else.
1108 + */
1109 + local_irq_save(flags);
1110 +
1111 st0[0] ^= __aesti_inv_sbox[ 0] ^ __aesti_inv_sbox[128];
1112 st0[1] ^= __aesti_inv_sbox[32] ^ __aesti_inv_sbox[160];
1113 st0[2] ^= __aesti_inv_sbox[64] ^ __aesti_inv_sbox[192];
1114 @@ -339,6 +355,8 @@ static void aesti_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
1115 put_unaligned_le32(inv_subshift(st1, 1) ^ rkp[5], out + 4);
1116 put_unaligned_le32(inv_subshift(st1, 2) ^ rkp[6], out + 8);
1117 put_unaligned_le32(inv_subshift(st1, 3) ^ rkp[7], out + 12);
1118 +
1119 + local_irq_restore(flags);
1120 }
1121
1122 static struct crypto_alg aes_alg = {
1123 diff --git a/drivers/acpi/apei/ghes.c b/drivers/acpi/apei/ghes.c
1124 index 02c6fd9caff7..f008ba7c9ced 100644
1125 --- a/drivers/acpi/apei/ghes.c
1126 +++ b/drivers/acpi/apei/ghes.c
1127 @@ -691,6 +691,8 @@ static void __ghes_panic(struct ghes *ghes)
1128 {
1129 __ghes_print_estatus(KERN_EMERG, ghes->generic, ghes->estatus);
1130
1131 + ghes_clear_estatus(ghes);
1132 +
1133 /* reboot to log the error! */
1134 if (!panic_timeout)
1135 panic_timeout = ghes_panic_timeout;
1136 diff --git a/drivers/acpi/spcr.c b/drivers/acpi/spcr.c
1137 index 9d52743080a4..c336784d0bcb 100644
1138 --- a/drivers/acpi/spcr.c
1139 +++ b/drivers/acpi/spcr.c
1140 @@ -148,6 +148,13 @@ int __init acpi_parse_spcr(bool enable_earlycon, bool enable_console)
1141 }
1142
1143 switch (table->baud_rate) {
1144 + case 0:
1145 + /*
1146 + * SPCR 1.04 defines 0 as a preconfigured state of UART.
1147 + * Assume firmware or bootloader configures console correctly.
1148 + */
1149 + baud_rate = 0;
1150 + break;
1151 case 3:
1152 baud_rate = 9600;
1153 break;
1154 @@ -196,6 +203,10 @@ int __init acpi_parse_spcr(bool enable_earlycon, bool enable_console)
1155 * UART so don't attempt to change to the baud rate state
1156 * in the table because driver cannot calculate the dividers
1157 */
1158 + baud_rate = 0;
1159 + }
1160 +
1161 + if (!baud_rate) {
1162 snprintf(opts, sizeof(opts), "%s,%s,0x%llx", uart, iotype,
1163 table->serial_port.address);
1164 } else {
1165 diff --git a/drivers/ata/sata_rcar.c b/drivers/ata/sata_rcar.c
1166 index 4b1ff5bc256a..59b2317acea9 100644
1167 --- a/drivers/ata/sata_rcar.c
1168 +++ b/drivers/ata/sata_rcar.c
1169 @@ -891,7 +891,9 @@ static int sata_rcar_probe(struct platform_device *pdev)
1170 int ret = 0;
1171
1172 irq = platform_get_irq(pdev, 0);
1173 - if (irq <= 0)
1174 + if (irq < 0)
1175 + return irq;
1176 + if (!irq)
1177 return -EINVAL;
1178
1179 priv = devm_kzalloc(dev, sizeof(struct sata_rcar_priv), GFP_KERNEL);
1180 diff --git a/drivers/base/bus.c b/drivers/base/bus.c
1181 index 585e2e1c9c8f..e06a57936cc9 100644
1182 --- a/drivers/base/bus.c
1183 +++ b/drivers/base/bus.c
1184 @@ -614,8 +614,10 @@ static void remove_probe_files(struct bus_type *bus)
1185 static ssize_t uevent_store(struct device_driver *drv, const char *buf,
1186 size_t count)
1187 {
1188 - kobject_synth_uevent(&drv->p->kobj, buf, count);
1189 - return count;
1190 + int rc;
1191 +
1192 + rc = kobject_synth_uevent(&drv->p->kobj, buf, count);
1193 + return rc ? rc : count;
1194 }
1195 static DRIVER_ATTR_WO(uevent);
1196
1197 @@ -831,8 +833,10 @@ static void klist_devices_put(struct klist_node *n)
1198 static ssize_t bus_uevent_store(struct bus_type *bus,
1199 const char *buf, size_t count)
1200 {
1201 - kobject_synth_uevent(&bus->p->subsys.kobj, buf, count);
1202 - return count;
1203 + int rc;
1204 +
1205 + rc = kobject_synth_uevent(&bus->p->subsys.kobj, buf, count);
1206 + return rc ? rc : count;
1207 }
1208 static BUS_ATTR(uevent, S_IWUSR, NULL, bus_uevent_store);
1209
1210 diff --git a/drivers/base/cacheinfo.c b/drivers/base/cacheinfo.c
1211 index cf78fa6d470d..a7359535caf5 100644
1212 --- a/drivers/base/cacheinfo.c
1213 +++ b/drivers/base/cacheinfo.c
1214 @@ -79,8 +79,7 @@ static void cache_size(struct cacheinfo *this_leaf, struct device_node *np)
1215 ct_idx = get_cacheinfo_idx(this_leaf->type);
1216 propname = cache_type_info[ct_idx].size_prop;
1217
1218 - if (of_property_read_u32(np, propname, &this_leaf->size))
1219 - this_leaf->size = 0;
1220 + of_property_read_u32(np, propname, &this_leaf->size);
1221 }
1222
1223 /* not cache_line_size() because that's a macro in include/linux/cache.h */
1224 @@ -114,8 +113,7 @@ static void cache_nr_sets(struct cacheinfo *this_leaf, struct device_node *np)
1225 ct_idx = get_cacheinfo_idx(this_leaf->type);
1226 propname = cache_type_info[ct_idx].nr_sets_prop;
1227
1228 - if (of_property_read_u32(np, propname, &this_leaf->number_of_sets))
1229 - this_leaf->number_of_sets = 0;
1230 + of_property_read_u32(np, propname, &this_leaf->number_of_sets);
1231 }
1232
1233 static void cache_associativity(struct cacheinfo *this_leaf)
1234 diff --git a/drivers/base/core.c b/drivers/base/core.c
1235 index 04bbcd779e11..92e2c32c2227 100644
1236 --- a/drivers/base/core.c
1237 +++ b/drivers/base/core.c
1238 @@ -1067,8 +1067,14 @@ out:
1239 static ssize_t uevent_store(struct device *dev, struct device_attribute *attr,
1240 const char *buf, size_t count)
1241 {
1242 - if (kobject_synth_uevent(&dev->kobj, buf, count))
1243 + int rc;
1244 +
1245 + rc = kobject_synth_uevent(&dev->kobj, buf, count);
1246 +
1247 + if (rc) {
1248 dev_err(dev, "uevent: failed to send synthetic uevent\n");
1249 + return rc;
1250 + }
1251
1252 return count;
1253 }
1254 diff --git a/drivers/base/dd.c b/drivers/base/dd.c
1255 index dbba123e058d..9d6604b50d75 100644
1256 --- a/drivers/base/dd.c
1257 +++ b/drivers/base/dd.c
1258 @@ -928,9 +928,6 @@ static void __device_release_driver(struct device *dev, struct device *parent)
1259
1260 drv = dev->driver;
1261 if (drv) {
1262 - if (driver_allows_async_probing(drv))
1263 - async_synchronize_full();
1264 -
1265 while (device_links_busy(dev)) {
1266 device_unlock(dev);
1267 if (parent && dev->bus->need_parent_lock)
1268 @@ -1036,6 +1033,9 @@ void driver_detach(struct device_driver *drv)
1269 struct device_private *dev_prv;
1270 struct device *dev;
1271
1272 + if (driver_allows_async_probing(drv))
1273 + async_synchronize_full();
1274 +
1275 for (;;) {
1276 spin_lock(&drv->p->klist_devices.k_lock);
1277 if (list_empty(&drv->p->klist_devices.k_list)) {
1278 diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
1279 index d15703b1ffe8..714503173150 100644
1280 --- a/drivers/block/drbd/drbd_nl.c
1281 +++ b/drivers/block/drbd/drbd_nl.c
1282 @@ -668,14 +668,15 @@ drbd_set_role(struct drbd_device *const device, enum drbd_role new_role, int for
1283 if (rv == SS_TWO_PRIMARIES) {
1284 /* Maybe the peer is detected as dead very soon...
1285 retry at most once more in this case. */
1286 - int timeo;
1287 - rcu_read_lock();
1288 - nc = rcu_dereference(connection->net_conf);
1289 - timeo = nc ? (nc->ping_timeo + 1) * HZ / 10 : 1;
1290 - rcu_read_unlock();
1291 - schedule_timeout_interruptible(timeo);
1292 - if (try < max_tries)
1293 + if (try < max_tries) {
1294 + int timeo;
1295 try = max_tries - 1;
1296 + rcu_read_lock();
1297 + nc = rcu_dereference(connection->net_conf);
1298 + timeo = nc ? (nc->ping_timeo + 1) * HZ / 10 : 1;
1299 + rcu_read_unlock();
1300 + schedule_timeout_interruptible(timeo);
1301 + }
1302 continue;
1303 }
1304 if (rv < SS_SUCCESS) {
1305 diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
1306 index 61c392752fe4..e3da52b524d3 100644
1307 --- a/drivers/block/drbd/drbd_receiver.c
1308 +++ b/drivers/block/drbd/drbd_receiver.c
1309 @@ -3364,7 +3364,7 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device,
1310 enum drbd_conns rv = C_MASK;
1311 enum drbd_disk_state mydisk;
1312 struct net_conf *nc;
1313 - int hg, rule_nr, rr_conflict, tentative;
1314 + int hg, rule_nr, rr_conflict, tentative, always_asbp;
1315
1316 mydisk = device->state.disk;
1317 if (mydisk == D_NEGOTIATING)
1318 @@ -3415,8 +3415,12 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device,
1319
1320 rcu_read_lock();
1321 nc = rcu_dereference(peer_device->connection->net_conf);
1322 + always_asbp = nc->always_asbp;
1323 + rr_conflict = nc->rr_conflict;
1324 + tentative = nc->tentative;
1325 + rcu_read_unlock();
1326
1327 - if (hg == 100 || (hg == -100 && nc->always_asbp)) {
1328 + if (hg == 100 || (hg == -100 && always_asbp)) {
1329 int pcount = (device->state.role == R_PRIMARY)
1330 + (peer_role == R_PRIMARY);
1331 int forced = (hg == -100);
1332 @@ -3455,9 +3459,6 @@ static enum drbd_conns drbd_sync_handshake(struct drbd_peer_device *peer_device,
1333 "Sync from %s node\n",
1334 (hg < 0) ? "peer" : "this");
1335 }
1336 - rr_conflict = nc->rr_conflict;
1337 - tentative = nc->tentative;
1338 - rcu_read_unlock();
1339
1340 if (hg == -100) {
1341 /* FIXME this log message is not correct if we end up here
1342 @@ -4142,7 +4143,7 @@ static int receive_uuids(struct drbd_connection *connection, struct packet_info
1343 kfree(device->p_uuid);
1344 device->p_uuid = p_uuid;
1345
1346 - if (device->state.conn < C_CONNECTED &&
1347 + if ((device->state.conn < C_CONNECTED || device->state.pdsk == D_DISKLESS) &&
1348 device->state.disk < D_INCONSISTENT &&
1349 device->state.role == R_PRIMARY &&
1350 (device->ed_uuid & ~((u64)1)) != (p_uuid[UI_CURRENT] & ~((u64)1))) {
1351 diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c
1352 index b54fa6726303..6b7b0d8a2acb 100644
1353 --- a/drivers/block/sunvdc.c
1354 +++ b/drivers/block/sunvdc.c
1355 @@ -45,6 +45,8 @@ MODULE_VERSION(DRV_MODULE_VERSION);
1356 #define WAITING_FOR_GEN_CMD 0x04
1357 #define WAITING_FOR_ANY -1
1358
1359 +#define VDC_MAX_RETRIES 10
1360 +
1361 static struct workqueue_struct *sunvdc_wq;
1362
1363 struct vdc_req_entry {
1364 @@ -431,6 +433,7 @@ static int __vdc_tx_trigger(struct vdc_port *port)
1365 .end_idx = dr->prod,
1366 };
1367 int err, delay;
1368 + int retries = 0;
1369
1370 hdr.seq = dr->snd_nxt;
1371 delay = 1;
1372 @@ -443,6 +446,8 @@ static int __vdc_tx_trigger(struct vdc_port *port)
1373 udelay(delay);
1374 if ((delay <<= 1) > 128)
1375 delay = 128;
1376 + if (retries++ > VDC_MAX_RETRIES)
1377 + break;
1378 } while (err == -EAGAIN);
1379
1380 if (err == -ENOTCONN)
1381 diff --git a/drivers/block/swim3.c b/drivers/block/swim3.c
1382 index c1c676a33e4a..1046459f172b 100644
1383 --- a/drivers/block/swim3.c
1384 +++ b/drivers/block/swim3.c
1385 @@ -995,7 +995,11 @@ static void floppy_release(struct gendisk *disk, fmode_t mode)
1386 struct swim3 __iomem *sw = fs->swim3;
1387
1388 mutex_lock(&swim3_mutex);
1389 - if (fs->ref_count > 0 && --fs->ref_count == 0) {
1390 + if (fs->ref_count > 0)
1391 + --fs->ref_count;
1392 + else if (fs->ref_count == -1)
1393 + fs->ref_count = 0;
1394 + if (fs->ref_count == 0) {
1395 swim3_action(fs, MOTOR_OFF);
1396 out_8(&sw->control_bic, 0xff);
1397 swim3_select(fs, RELAX);
1398 @@ -1087,8 +1091,6 @@ static int swim3_add_device(struct macio_dev *mdev, int index)
1399 struct floppy_state *fs = &floppy_states[index];
1400 int rc = -EBUSY;
1401
1402 - /* Do this first for message macros */
1403 - memset(fs, 0, sizeof(*fs));
1404 fs->mdev = mdev;
1405 fs->index = index;
1406
1407 @@ -1188,14 +1190,15 @@ static int swim3_attach(struct macio_dev *mdev,
1408 return rc;
1409 }
1410
1411 - fs = &floppy_states[floppy_count];
1412 -
1413 disk = alloc_disk(1);
1414 if (disk == NULL) {
1415 rc = -ENOMEM;
1416 goto out_unregister;
1417 }
1418
1419 + fs = &floppy_states[floppy_count];
1420 + memset(fs, 0, sizeof(*fs));
1421 +
1422 disk->queue = blk_mq_init_sq_queue(&fs->tag_set, &swim3_mq_ops, 2,
1423 BLK_MQ_F_SHOULD_MERGE);
1424 if (IS_ERR(disk->queue)) {
1425 diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
1426 index 8e6a0db6555f..d1459cc1159f 100644
1427 --- a/drivers/block/zram/zram_drv.c
1428 +++ b/drivers/block/zram/zram_drv.c
1429 @@ -53,6 +53,11 @@ static size_t huge_class_size;
1430
1431 static void zram_free_page(struct zram *zram, size_t index);
1432
1433 +static int zram_slot_trylock(struct zram *zram, u32 index)
1434 +{
1435 + return bit_spin_trylock(ZRAM_LOCK, &zram->table[index].value);
1436 +}
1437 +
1438 static void zram_slot_lock(struct zram *zram, u32 index)
1439 {
1440 bit_spin_lock(ZRAM_LOCK, &zram->table[index].value);
1441 @@ -401,7 +406,6 @@ static ssize_t backing_dev_store(struct device *dev,
1442 goto out;
1443
1444 reset_bdev(zram);
1445 - spin_lock_init(&zram->bitmap_lock);
1446
1447 zram->old_block_size = old_block_size;
1448 zram->bdev = bdev;
1449 @@ -445,29 +449,24 @@ out:
1450
1451 static unsigned long get_entry_bdev(struct zram *zram)
1452 {
1453 - unsigned long entry;
1454 -
1455 - spin_lock(&zram->bitmap_lock);
1456 + unsigned long blk_idx = 1;
1457 +retry:
1458 /* skip 0 bit to confuse zram.handle = 0 */
1459 - entry = find_next_zero_bit(zram->bitmap, zram->nr_pages, 1);
1460 - if (entry == zram->nr_pages) {
1461 - spin_unlock(&zram->bitmap_lock);
1462 + blk_idx = find_next_zero_bit(zram->bitmap, zram->nr_pages, blk_idx);
1463 + if (blk_idx == zram->nr_pages)
1464 return 0;
1465 - }
1466
1467 - set_bit(entry, zram->bitmap);
1468 - spin_unlock(&zram->bitmap_lock);
1469 + if (test_and_set_bit(blk_idx, zram->bitmap))
1470 + goto retry;
1471
1472 - return entry;
1473 + return blk_idx;
1474 }
1475
1476 static void put_entry_bdev(struct zram *zram, unsigned long entry)
1477 {
1478 int was_set;
1479
1480 - spin_lock(&zram->bitmap_lock);
1481 was_set = test_and_clear_bit(entry, zram->bitmap);
1482 - spin_unlock(&zram->bitmap_lock);
1483 WARN_ON_ONCE(!was_set);
1484 }
1485
1486 @@ -888,9 +887,10 @@ static ssize_t debug_stat_show(struct device *dev,
1487
1488 down_read(&zram->init_lock);
1489 ret = scnprintf(buf, PAGE_SIZE,
1490 - "version: %d\n%8llu\n",
1491 + "version: %d\n%8llu %8llu\n",
1492 version,
1493 - (u64)atomic64_read(&zram->stats.writestall));
1494 + (u64)atomic64_read(&zram->stats.writestall),
1495 + (u64)atomic64_read(&zram->stats.miss_free));
1496 up_read(&zram->init_lock);
1497
1498 return ret;
1499 @@ -1402,10 +1402,14 @@ static void zram_slot_free_notify(struct block_device *bdev,
1500
1501 zram = bdev->bd_disk->private_data;
1502
1503 - zram_slot_lock(zram, index);
1504 + atomic64_inc(&zram->stats.notify_free);
1505 + if (!zram_slot_trylock(zram, index)) {
1506 + atomic64_inc(&zram->stats.miss_free);
1507 + return;
1508 + }
1509 +
1510 zram_free_page(zram, index);
1511 zram_slot_unlock(zram, index);
1512 - atomic64_inc(&zram->stats.notify_free);
1513 }
1514
1515 static int zram_rw_page(struct block_device *bdev, sector_t sector,
1516 diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h
1517 index 72c8584b6dff..d1095dfdffa8 100644
1518 --- a/drivers/block/zram/zram_drv.h
1519 +++ b/drivers/block/zram/zram_drv.h
1520 @@ -79,6 +79,7 @@ struct zram_stats {
1521 atomic64_t pages_stored; /* no. of pages currently stored */
1522 atomic_long_t max_used_pages; /* no. of maximum pages stored */
1523 atomic64_t writestall; /* no. of write slow paths */
1524 + atomic64_t miss_free; /* no. of missed free */
1525 };
1526
1527 struct zram {
1528 @@ -110,7 +111,6 @@ struct zram {
1529 unsigned int old_block_size;
1530 unsigned long *bitmap;
1531 unsigned long nr_pages;
1532 - spinlock_t bitmap_lock;
1533 #endif
1534 #ifdef CONFIG_ZRAM_MEMORY_TRACKING
1535 struct dentry *debugfs_dir;
1536 diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c
1537 index ddbd8c6a0ceb..800132369134 100644
1538 --- a/drivers/bluetooth/hci_bcm.c
1539 +++ b/drivers/bluetooth/hci_bcm.c
1540 @@ -907,6 +907,10 @@ static int bcm_get_resources(struct bcm_device *dev)
1541
1542 dev->clk = devm_clk_get(dev->dev, NULL);
1543
1544 + /* Handle deferred probing */
1545 + if (dev->clk == ERR_PTR(-EPROBE_DEFER))
1546 + return PTR_ERR(dev->clk);
1547 +
1548 dev->device_wakeup = devm_gpiod_get_optional(dev->dev, "device-wakeup",
1549 GPIOD_OUT_LOW);
1550 if (IS_ERR(dev->device_wakeup))
1551 diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c
1552 index a5b8afe3609c..f8b7345fe1cb 100644
1553 --- a/drivers/cdrom/gdrom.c
1554 +++ b/drivers/cdrom/gdrom.c
1555 @@ -873,6 +873,7 @@ static void __exit exit_gdrom(void)
1556 platform_device_unregister(pd);
1557 platform_driver_unregister(&gdrom_driver);
1558 kfree(gd.toc);
1559 + kfree(gd.cd_info);
1560 }
1561
1562 module_init(init_gdrom);
1563 diff --git a/drivers/clk/imgtec/clk-boston.c b/drivers/clk/imgtec/clk-boston.c
1564 index 15af423cc0c9..f5d54a64d33c 100644
1565 --- a/drivers/clk/imgtec/clk-boston.c
1566 +++ b/drivers/clk/imgtec/clk-boston.c
1567 @@ -73,27 +73,32 @@ static void __init clk_boston_setup(struct device_node *np)
1568 hw = clk_hw_register_fixed_rate(NULL, "input", NULL, 0, in_freq);
1569 if (IS_ERR(hw)) {
1570 pr_err("failed to register input clock: %ld\n", PTR_ERR(hw));
1571 - return;
1572 + goto error;
1573 }
1574 onecell->hws[BOSTON_CLK_INPUT] = hw;
1575
1576 hw = clk_hw_register_fixed_rate(NULL, "sys", "input", 0, sys_freq);
1577 if (IS_ERR(hw)) {
1578 pr_err("failed to register sys clock: %ld\n", PTR_ERR(hw));
1579 - return;
1580 + goto error;
1581 }
1582 onecell->hws[BOSTON_CLK_SYS] = hw;
1583
1584 hw = clk_hw_register_fixed_rate(NULL, "cpu", "input", 0, cpu_freq);
1585 if (IS_ERR(hw)) {
1586 pr_err("failed to register cpu clock: %ld\n", PTR_ERR(hw));
1587 - return;
1588 + goto error;
1589 }
1590 onecell->hws[BOSTON_CLK_CPU] = hw;
1591
1592 err = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, onecell);
1593 if (err)
1594 pr_err("failed to add DT provider: %d\n", err);
1595 +
1596 + return;
1597 +
1598 +error:
1599 + kfree(onecell);
1600 }
1601
1602 /*
1603 diff --git a/drivers/clk/imx/clk-imx6sl.c b/drivers/clk/imx/clk-imx6sl.c
1604 index 6fcfbbd907a5..e13d8814cfa4 100644
1605 --- a/drivers/clk/imx/clk-imx6sl.c
1606 +++ b/drivers/clk/imx/clk-imx6sl.c
1607 @@ -17,6 +17,8 @@
1608
1609 #include "clk.h"
1610
1611 +#define CCDR 0x4
1612 +#define BM_CCM_CCDR_MMDC_CH0_MASK (1 << 17)
1613 #define CCSR 0xc
1614 #define BM_CCSR_PLL1_SW_CLK_SEL (1 << 2)
1615 #define CACRR 0x10
1616 @@ -411,6 +413,10 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
1617 clks[IMX6SL_CLK_USDHC3] = imx_clk_gate2("usdhc3", "usdhc3_podf", base + 0x80, 6);
1618 clks[IMX6SL_CLK_USDHC4] = imx_clk_gate2("usdhc4", "usdhc4_podf", base + 0x80, 8);
1619
1620 + /* Ensure the MMDC CH0 handshake is bypassed */
1621 + writel_relaxed(readl_relaxed(base + CCDR) |
1622 + BM_CCM_CCDR_MMDC_CH0_MASK, base + CCDR);
1623 +
1624 imx_check_clocks(clks, ARRAY_SIZE(clks));
1625
1626 clk_data.clks = clks;
1627 diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
1628 index 1d39273d7a04..a3a826419c16 100644
1629 --- a/drivers/clk/meson/meson8b.c
1630 +++ b/drivers/clk/meson/meson8b.c
1631 @@ -599,7 +599,7 @@ static struct clk_regmap meson8b_cpu_scale_div = {
1632 .data = &(struct clk_regmap_div_data){
1633 .offset = HHI_SYS_CPU_CLK_CNTL1,
1634 .shift = 20,
1635 - .width = 9,
1636 + .width = 10,
1637 .table = cpu_scale_table,
1638 .flags = CLK_DIVIDER_ALLOW_ZERO,
1639 },
1640 @@ -612,20 +612,27 @@ static struct clk_regmap meson8b_cpu_scale_div = {
1641 },
1642 };
1643
1644 +static u32 mux_table_cpu_scale_out_sel[] = { 0, 1, 3 };
1645 static struct clk_regmap meson8b_cpu_scale_out_sel = {
1646 .data = &(struct clk_regmap_mux_data){
1647 .offset = HHI_SYS_CPU_CLK_CNTL0,
1648 .mask = 0x3,
1649 .shift = 2,
1650 + .table = mux_table_cpu_scale_out_sel,
1651 },
1652 .hw.init = &(struct clk_init_data){
1653 .name = "cpu_scale_out_sel",
1654 .ops = &clk_regmap_mux_ro_ops,
1655 + /*
1656 + * NOTE: We are skipping the parent with value 0x2 (which is
1657 + * "cpu_div3") because it results in a duty cycle of 33% which
1658 + * makes the system unstable and can result in a lockup of the
1659 + * whole system.
1660 + */
1661 .parent_names = (const char *[]) { "cpu_in_sel",
1662 "cpu_div2",
1663 - "cpu_div3",
1664 "cpu_scale_div" },
1665 - .num_parents = 4,
1666 + .num_parents = 3,
1667 .flags = CLK_SET_RATE_PARENT,
1668 },
1669 };
1670 @@ -643,7 +650,8 @@ static struct clk_regmap meson8b_cpu_clk = {
1671 "cpu_scale_out_sel" },
1672 .num_parents = 2,
1673 .flags = (CLK_SET_RATE_PARENT |
1674 - CLK_SET_RATE_NO_REPARENT),
1675 + CLK_SET_RATE_NO_REPARENT |
1676 + CLK_IS_CRITICAL),
1677 },
1678 };
1679
1680 diff --git a/drivers/clk/qcom/gcc-msm8998.c b/drivers/clk/qcom/gcc-msm8998.c
1681 index 9f0ae403d5f5..cb714c3e2924 100644
1682 --- a/drivers/clk/qcom/gcc-msm8998.c
1683 +++ b/drivers/clk/qcom/gcc-msm8998.c
1684 @@ -2042,6 +2042,12 @@ static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1685 .hw.init = &(struct clk_init_data){
1686 .name = "gcc_mmss_noc_cfg_ahb_clk",
1687 .ops = &clk_branch2_ops,
1688 + /*
1689 + * Any access to mmss depends on this clock.
1690 + * Gating this clock has been shown to crash the system
1691 + * when mmssnoc_axi_rpm_clk is inited in rpmcc.
1692 + */
1693 + .flags = CLK_IS_CRITICAL,
1694 },
1695 },
1696 };
1697 diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-h6.c b/drivers/clk/sunxi-ng/ccu-sun50i-h6.c
1698 index 2193e1495086..19ff09f610e4 100644
1699 --- a/drivers/clk/sunxi-ng/ccu-sun50i-h6.c
1700 +++ b/drivers/clk/sunxi-ng/ccu-sun50i-h6.c
1701 @@ -120,6 +120,8 @@ static struct ccu_nm pll_video0_clk = {
1702 .n = _SUNXI_CCU_MULT_MIN(8, 8, 12),
1703 .m = _SUNXI_CCU_DIV(1, 1), /* input divider */
1704 .fixed_post_div = 4,
1705 + .min_rate = 288000000,
1706 + .max_rate = 2400000000UL,
1707 .common = {
1708 .reg = 0x040,
1709 .features = CCU_FEATURE_FIXED_POSTDIV,
1710 @@ -136,6 +138,8 @@ static struct ccu_nm pll_video1_clk = {
1711 .n = _SUNXI_CCU_MULT_MIN(8, 8, 12),
1712 .m = _SUNXI_CCU_DIV(1, 1), /* input divider */
1713 .fixed_post_div = 4,
1714 + .min_rate = 288000000,
1715 + .max_rate = 2400000000UL,
1716 .common = {
1717 .reg = 0x048,
1718 .features = CCU_FEATURE_FIXED_POSTDIV,
1719 diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-a33.c b/drivers/clk/sunxi-ng/ccu-sun8i-a33.c
1720 index 13eb5b23c5e7..c40d572a7602 100644
1721 --- a/drivers/clk/sunxi-ng/ccu-sun8i-a33.c
1722 +++ b/drivers/clk/sunxi-ng/ccu-sun8i-a33.c
1723 @@ -366,10 +366,10 @@ static SUNXI_CCU_MP_WITH_MUX_GATE(spi1_clk, "spi1", mod0_default_parents, 0x0a4,
1724 static const char * const i2s_parents[] = { "pll-audio-8x", "pll-audio-4x",
1725 "pll-audio-2x", "pll-audio" };
1726 static SUNXI_CCU_MUX_WITH_GATE(i2s0_clk, "i2s0", i2s_parents,
1727 - 0x0b0, 16, 2, BIT(31), 0);
1728 + 0x0b0, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
1729
1730 static SUNXI_CCU_MUX_WITH_GATE(i2s1_clk, "i2s1", i2s_parents,
1731 - 0x0b4, 16, 2, BIT(31), 0);
1732 + 0x0b4, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
1733
1734 /* TODO: the parent for most of the USB clocks is not known */
1735 static SUNXI_CCU_GATE(usb_phy0_clk, "usb-phy0", "osc24M",
1736 @@ -446,7 +446,7 @@ static SUNXI_CCU_M_WITH_GATE(ve_clk, "ve", "pll-ve",
1737 static SUNXI_CCU_GATE(ac_dig_clk, "ac-dig", "pll-audio",
1738 0x140, BIT(31), CLK_SET_RATE_PARENT);
1739 static SUNXI_CCU_GATE(ac_dig_4x_clk, "ac-dig-4x", "pll-audio-4x",
1740 - 0x140, BIT(30), 0);
1741 + 0x140, BIT(30), CLK_SET_RATE_PARENT);
1742 static SUNXI_CCU_GATE(avs_clk, "avs", "osc24M",
1743 0x144, BIT(31), 0);
1744
1745 diff --git a/drivers/cpuidle/cpuidle-big_little.c b/drivers/cpuidle/cpuidle-big_little.c
1746 index db2ede565f1a..b44476a1b7ad 100644
1747 --- a/drivers/cpuidle/cpuidle-big_little.c
1748 +++ b/drivers/cpuidle/cpuidle-big_little.c
1749 @@ -167,6 +167,7 @@ static int __init bl_idle_init(void)
1750 {
1751 int ret;
1752 struct device_node *root = of_find_node_by_path("/");
1753 + const struct of_device_id *match_id;
1754
1755 if (!root)
1756 return -ENODEV;
1757 @@ -174,7 +175,11 @@ static int __init bl_idle_init(void)
1758 /*
1759 * Initialize the driver just for a compliant set of machines
1760 */
1761 - if (!of_match_node(compatible_machine_match, root))
1762 + match_id = of_match_node(compatible_machine_match, root);
1763 +
1764 + of_node_put(root);
1765 +
1766 + if (!match_id)
1767 return -ENODEV;
1768
1769 if (!mcpm_is_available())
1770 diff --git a/drivers/crypto/ux500/cryp/cryp_core.c b/drivers/crypto/ux500/cryp/cryp_core.c
1771 index d2663a4e1f5e..a92a66b1ff46 100644
1772 --- a/drivers/crypto/ux500/cryp/cryp_core.c
1773 +++ b/drivers/crypto/ux500/cryp/cryp_core.c
1774 @@ -556,7 +556,7 @@ static int cryp_set_dma_transfer(struct cryp_ctx *ctx,
1775 desc = dmaengine_prep_slave_sg(channel,
1776 ctx->device->dma.sg_src,
1777 ctx->device->dma.sg_src_len,
1778 - direction, DMA_CTRL_ACK);
1779 + DMA_MEM_TO_DEV, DMA_CTRL_ACK);
1780 break;
1781
1782 case DMA_FROM_DEVICE:
1783 @@ -580,7 +580,7 @@ static int cryp_set_dma_transfer(struct cryp_ctx *ctx,
1784 desc = dmaengine_prep_slave_sg(channel,
1785 ctx->device->dma.sg_dst,
1786 ctx->device->dma.sg_dst_len,
1787 - direction,
1788 + DMA_DEV_TO_MEM,
1789 DMA_CTRL_ACK |
1790 DMA_PREP_INTERRUPT);
1791
1792 diff --git a/drivers/crypto/ux500/hash/hash_core.c b/drivers/crypto/ux500/hash/hash_core.c
1793 index 633321a8dd03..a0bb8a6eec3f 100644
1794 --- a/drivers/crypto/ux500/hash/hash_core.c
1795 +++ b/drivers/crypto/ux500/hash/hash_core.c
1796 @@ -166,7 +166,7 @@ static int hash_set_dma_transfer(struct hash_ctx *ctx, struct scatterlist *sg,
1797 __func__);
1798 desc = dmaengine_prep_slave_sg(channel,
1799 ctx->device->dma.sg, ctx->device->dma.sg_len,
1800 - direction, DMA_CTRL_ACK | DMA_PREP_INTERRUPT);
1801 + DMA_MEM_TO_DEV, DMA_CTRL_ACK | DMA_PREP_INTERRUPT);
1802 if (!desc) {
1803 dev_err(ctx->device->dev,
1804 "%s: dmaengine_prep_slave_sg() failed!\n", __func__);
1805 diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c
1806 index cad55ab80d41..15795175160a 100644
1807 --- a/drivers/dma/bcm2835-dma.c
1808 +++ b/drivers/dma/bcm2835-dma.c
1809 @@ -415,38 +415,32 @@ static void bcm2835_dma_fill_cb_chain_with_sg(
1810 }
1811 }
1812
1813 -static int bcm2835_dma_abort(void __iomem *chan_base)
1814 +static int bcm2835_dma_abort(struct bcm2835_chan *c)
1815 {
1816 - unsigned long cs;
1817 + void __iomem *chan_base = c->chan_base;
1818 long int timeout = 10000;
1819
1820 - cs = readl(chan_base + BCM2835_DMA_CS);
1821 - if (!(cs & BCM2835_DMA_ACTIVE))
1822 + /*
1823 + * A zero control block address means the channel is idle.
1824 + * (The ACTIVE flag in the CS register is not a reliable indicator.)
1825 + */
1826 + if (!readl(chan_base + BCM2835_DMA_ADDR))
1827 return 0;
1828
1829 /* Write 0 to the active bit - Pause the DMA */
1830 writel(0, chan_base + BCM2835_DMA_CS);
1831
1832 /* Wait for any current AXI transfer to complete */
1833 - while ((cs & BCM2835_DMA_ISPAUSED) && --timeout) {
1834 + while ((readl(chan_base + BCM2835_DMA_CS) &
1835 + BCM2835_DMA_WAITING_FOR_WRITES) && --timeout)
1836 cpu_relax();
1837 - cs = readl(chan_base + BCM2835_DMA_CS);
1838 - }
1839
1840 - /* We'll un-pause when we set of our next DMA */
1841 + /* Peripheral might be stuck and fail to signal AXI write responses */
1842 if (!timeout)
1843 - return -ETIMEDOUT;
1844 -
1845 - if (!(cs & BCM2835_DMA_ACTIVE))
1846 - return 0;
1847 -
1848 - /* Terminate the control block chain */
1849 - writel(0, chan_base + BCM2835_DMA_NEXTCB);
1850 -
1851 - /* Abort the whole DMA */
1852 - writel(BCM2835_DMA_ABORT | BCM2835_DMA_ACTIVE,
1853 - chan_base + BCM2835_DMA_CS);
1854 + dev_err(c->vc.chan.device->dev,
1855 + "failed to complete outstanding writes\n");
1856
1857 + writel(BCM2835_DMA_RESET, chan_base + BCM2835_DMA_CS);
1858 return 0;
1859 }
1860
1861 @@ -485,8 +479,15 @@ static irqreturn_t bcm2835_dma_callback(int irq, void *data)
1862
1863 spin_lock_irqsave(&c->vc.lock, flags);
1864
1865 - /* Acknowledge interrupt */
1866 - writel(BCM2835_DMA_INT, c->chan_base + BCM2835_DMA_CS);
1867 + /*
1868 + * Clear the INT flag to receive further interrupts. Keep the channel
1869 + * active in case the descriptor is cyclic or in case the client has
1870 + * already terminated the descriptor and issued a new one. (May happen
1871 + * if this IRQ handler is threaded.) If the channel is finished, it
1872 + * will remain idle despite the ACTIVE flag being set.
1873 + */
1874 + writel(BCM2835_DMA_INT | BCM2835_DMA_ACTIVE,
1875 + c->chan_base + BCM2835_DMA_CS);
1876
1877 d = c->desc;
1878
1879 @@ -494,11 +495,7 @@ static irqreturn_t bcm2835_dma_callback(int irq, void *data)
1880 if (d->cyclic) {
1881 /* call the cyclic callback */
1882 vchan_cyclic_callback(&d->vd);
1883 -
1884 - /* Keep the DMA engine running */
1885 - writel(BCM2835_DMA_ACTIVE,
1886 - c->chan_base + BCM2835_DMA_CS);
1887 - } else {
1888 + } else if (!readl(c->chan_base + BCM2835_DMA_ADDR)) {
1889 vchan_cookie_complete(&c->desc->vd);
1890 bcm2835_dma_start_desc(c);
1891 }
1892 @@ -788,7 +785,6 @@ static int bcm2835_dma_terminate_all(struct dma_chan *chan)
1893 struct bcm2835_chan *c = to_bcm2835_dma_chan(chan);
1894 struct bcm2835_dmadev *d = to_bcm2835_dma_dev(c->vc.chan.device);
1895 unsigned long flags;
1896 - int timeout = 10000;
1897 LIST_HEAD(head);
1898
1899 spin_lock_irqsave(&c->vc.lock, flags);
1900 @@ -798,27 +794,11 @@ static int bcm2835_dma_terminate_all(struct dma_chan *chan)
1901 list_del_init(&c->node);
1902 spin_unlock(&d->lock);
1903
1904 - /*
1905 - * Stop DMA activity: we assume the callback will not be called
1906 - * after bcm_dma_abort() returns (even if it does, it will see
1907 - * c->desc is NULL and exit.)
1908 - */
1909 + /* stop DMA activity */
1910 if (c->desc) {
1911 vchan_terminate_vdesc(&c->desc->vd);
1912 c->desc = NULL;
1913 - bcm2835_dma_abort(c->chan_base);
1914 -
1915 - /* Wait for stopping */
1916 - while (--timeout) {
1917 - if (!(readl(c->chan_base + BCM2835_DMA_CS) &
1918 - BCM2835_DMA_ACTIVE))
1919 - break;
1920 -
1921 - cpu_relax();
1922 - }
1923 -
1924 - if (!timeout)
1925 - dev_err(d->ddev.dev, "DMA transfer could not be terminated\n");
1926 + bcm2835_dma_abort(c);
1927 }
1928
1929 vchan_get_all_descriptors(&c->vc, &head);
1930 diff --git a/drivers/dma/imx-dma.c b/drivers/dma/imx-dma.c
1931 index c2fff3f6c9ca..4a09af3cd546 100644
1932 --- a/drivers/dma/imx-dma.c
1933 +++ b/drivers/dma/imx-dma.c
1934 @@ -618,7 +618,7 @@ static void imxdma_tasklet(unsigned long data)
1935 {
1936 struct imxdma_channel *imxdmac = (void *)data;
1937 struct imxdma_engine *imxdma = imxdmac->imxdma;
1938 - struct imxdma_desc *desc;
1939 + struct imxdma_desc *desc, *next_desc;
1940 unsigned long flags;
1941
1942 spin_lock_irqsave(&imxdma->lock, flags);
1943 @@ -648,10 +648,10 @@ static void imxdma_tasklet(unsigned long data)
1944 list_move_tail(imxdmac->ld_active.next, &imxdmac->ld_free);
1945
1946 if (!list_empty(&imxdmac->ld_queue)) {
1947 - desc = list_first_entry(&imxdmac->ld_queue, struct imxdma_desc,
1948 - node);
1949 + next_desc = list_first_entry(&imxdmac->ld_queue,
1950 + struct imxdma_desc, node);
1951 list_move_tail(imxdmac->ld_queue.next, &imxdmac->ld_active);
1952 - if (imxdma_xfer_desc(desc) < 0)
1953 + if (imxdma_xfer_desc(next_desc) < 0)
1954 dev_warn(imxdma->dev, "%s: channel: %d couldn't xfer desc\n",
1955 __func__, imxdmac->channel);
1956 }
1957 diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c
1958 index 38d4e4f07c66..f7da9ab31b7c 100644
1959 --- a/drivers/dma/sprd-dma.c
1960 +++ b/drivers/dma/sprd-dma.c
1961 @@ -450,7 +450,7 @@ static irqreturn_t dma_irq_handle(int irq, void *dev_id)
1962 struct sprd_dma_desc *sdesc;
1963 enum sprd_dma_req_mode req_type;
1964 enum sprd_dma_int_type int_type;
1965 - bool trans_done = false;
1966 + bool trans_done = false, cyclic = false;
1967 u32 i;
1968
1969 while (irq_status) {
1970 @@ -465,13 +465,19 @@ static irqreturn_t dma_irq_handle(int irq, void *dev_id)
1971
1972 sdesc = schan->cur_desc;
1973
1974 - /* Check if the dma request descriptor is done. */
1975 - trans_done = sprd_dma_check_trans_done(sdesc, int_type,
1976 - req_type);
1977 - if (trans_done == true) {
1978 - vchan_cookie_complete(&sdesc->vd);
1979 - schan->cur_desc = NULL;
1980 - sprd_dma_start(schan);
1981 + /* cyclic mode schedule callback */
1982 + cyclic = schan->linklist.phy_addr ? true : false;
1983 + if (cyclic == true) {
1984 + vchan_cyclic_callback(&sdesc->vd);
1985 + } else {
1986 + /* Check if the dma request descriptor is done. */
1987 + trans_done = sprd_dma_check_trans_done(sdesc, int_type,
1988 + req_type);
1989 + if (trans_done == true) {
1990 + vchan_cookie_complete(&sdesc->vd);
1991 + schan->cur_desc = NULL;
1992 + sprd_dma_start(schan);
1993 + }
1994 }
1995 spin_unlock(&schan->vc.lock);
1996 }
1997 @@ -674,9 +680,6 @@ static int sprd_dma_fill_desc(struct dma_chan *chan,
1998
1999 /* link-list configuration */
2000 if (schan->linklist.phy_addr) {
2001 - if (sg_index == sglen - 1)
2002 - hw->frg_len |= SPRD_DMA_LLIST_END;
2003 -
2004 hw->cfg |= SPRD_DMA_LINKLIST_EN;
2005
2006 /* link-list index */
2007 diff --git a/drivers/dma/xilinx/zynqmp_dma.c b/drivers/dma/xilinx/zynqmp_dma.c
2008 index c74a88b65039..73de6a6179fc 100644
2009 --- a/drivers/dma/xilinx/zynqmp_dma.c
2010 +++ b/drivers/dma/xilinx/zynqmp_dma.c
2011 @@ -163,7 +163,7 @@ struct zynqmp_dma_desc_ll {
2012 u32 ctrl;
2013 u64 nxtdscraddr;
2014 u64 rsvd;
2015 -}; __aligned(64)
2016 +};
2017
2018 /**
2019 * struct zynqmp_dma_desc_sw - Per Transaction structure
2020 diff --git a/drivers/firmware/efi/vars.c b/drivers/firmware/efi/vars.c
2021 index 9336ffdf6e2c..fceaafd67ec6 100644
2022 --- a/drivers/firmware/efi/vars.c
2023 +++ b/drivers/firmware/efi/vars.c
2024 @@ -318,7 +318,12 @@ EXPORT_SYMBOL_GPL(efivar_variable_is_removable);
2025 static efi_status_t
2026 check_var_size(u32 attributes, unsigned long size)
2027 {
2028 - const struct efivar_operations *fops = __efivars->ops;
2029 + const struct efivar_operations *fops;
2030 +
2031 + if (!__efivars)
2032 + return EFI_UNSUPPORTED;
2033 +
2034 + fops = __efivars->ops;
2035
2036 if (!fops->query_variable_store)
2037 return EFI_UNSUPPORTED;
2038 @@ -329,7 +334,12 @@ check_var_size(u32 attributes, unsigned long size)
2039 static efi_status_t
2040 check_var_size_nonblocking(u32 attributes, unsigned long size)
2041 {
2042 - const struct efivar_operations *fops = __efivars->ops;
2043 + const struct efivar_operations *fops;
2044 +
2045 + if (!__efivars)
2046 + return EFI_UNSUPPORTED;
2047 +
2048 + fops = __efivars->ops;
2049
2050 if (!fops->query_variable_store)
2051 return EFI_UNSUPPORTED;
2052 @@ -429,13 +439,18 @@ static void dup_variable_bug(efi_char16_t *str16, efi_guid_t *vendor_guid,
2053 int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *),
2054 void *data, bool duplicates, struct list_head *head)
2055 {
2056 - const struct efivar_operations *ops = __efivars->ops;
2057 + const struct efivar_operations *ops;
2058 unsigned long variable_name_size = 1024;
2059 efi_char16_t *variable_name;
2060 efi_status_t status;
2061 efi_guid_t vendor_guid;
2062 int err = 0;
2063
2064 + if (!__efivars)
2065 + return -EFAULT;
2066 +
2067 + ops = __efivars->ops;
2068 +
2069 variable_name = kzalloc(variable_name_size, GFP_KERNEL);
2070 if (!variable_name) {
2071 printk(KERN_ERR "efivars: Memory allocation failed.\n");
2072 @@ -583,12 +598,14 @@ static void efivar_entry_list_del_unlock(struct efivar_entry *entry)
2073 */
2074 int __efivar_entry_delete(struct efivar_entry *entry)
2075 {
2076 - const struct efivar_operations *ops = __efivars->ops;
2077 efi_status_t status;
2078
2079 - status = ops->set_variable(entry->var.VariableName,
2080 - &entry->var.VendorGuid,
2081 - 0, 0, NULL);
2082 + if (!__efivars)
2083 + return -EINVAL;
2084 +
2085 + status = __efivars->ops->set_variable(entry->var.VariableName,
2086 + &entry->var.VendorGuid,
2087 + 0, 0, NULL);
2088
2089 return efi_status_to_err(status);
2090 }
2091 @@ -607,12 +624,17 @@ EXPORT_SYMBOL_GPL(__efivar_entry_delete);
2092 */
2093 int efivar_entry_delete(struct efivar_entry *entry)
2094 {
2095 - const struct efivar_operations *ops = __efivars->ops;
2096 + const struct efivar_operations *ops;
2097 efi_status_t status;
2098
2099 if (down_interruptible(&efivars_lock))
2100 return -EINTR;
2101
2102 + if (!__efivars) {
2103 + up(&efivars_lock);
2104 + return -EINVAL;
2105 + }
2106 + ops = __efivars->ops;
2107 status = ops->set_variable(entry->var.VariableName,
2108 &entry->var.VendorGuid,
2109 0, 0, NULL);
2110 @@ -650,13 +672,19 @@ EXPORT_SYMBOL_GPL(efivar_entry_delete);
2111 int efivar_entry_set(struct efivar_entry *entry, u32 attributes,
2112 unsigned long size, void *data, struct list_head *head)
2113 {
2114 - const struct efivar_operations *ops = __efivars->ops;
2115 + const struct efivar_operations *ops;
2116 efi_status_t status;
2117 efi_char16_t *name = entry->var.VariableName;
2118 efi_guid_t vendor = entry->var.VendorGuid;
2119
2120 if (down_interruptible(&efivars_lock))
2121 return -EINTR;
2122 +
2123 + if (!__efivars) {
2124 + up(&efivars_lock);
2125 + return -EINVAL;
2126 + }
2127 + ops = __efivars->ops;
2128 if (head && efivar_entry_find(name, vendor, head, false)) {
2129 up(&efivars_lock);
2130 return -EEXIST;
2131 @@ -687,12 +715,17 @@ static int
2132 efivar_entry_set_nonblocking(efi_char16_t *name, efi_guid_t vendor,
2133 u32 attributes, unsigned long size, void *data)
2134 {
2135 - const struct efivar_operations *ops = __efivars->ops;
2136 + const struct efivar_operations *ops;
2137 efi_status_t status;
2138
2139 if (down_trylock(&efivars_lock))
2140 return -EBUSY;
2141
2142 + if (!__efivars) {
2143 + up(&efivars_lock);
2144 + return -EINVAL;
2145 + }
2146 +
2147 status = check_var_size_nonblocking(attributes,
2148 size + ucs2_strsize(name, 1024));
2149 if (status != EFI_SUCCESS) {
2150 @@ -700,6 +733,7 @@ efivar_entry_set_nonblocking(efi_char16_t *name, efi_guid_t vendor,
2151 return -ENOSPC;
2152 }
2153
2154 + ops = __efivars->ops;
2155 status = ops->set_variable_nonblocking(name, &vendor, attributes,
2156 size, data);
2157
2158 @@ -727,9 +761,13 @@ efivar_entry_set_nonblocking(efi_char16_t *name, efi_guid_t vendor,
2159 int efivar_entry_set_safe(efi_char16_t *name, efi_guid_t vendor, u32 attributes,
2160 bool block, unsigned long size, void *data)
2161 {
2162 - const struct efivar_operations *ops = __efivars->ops;
2163 + const struct efivar_operations *ops;
2164 efi_status_t status;
2165
2166 + if (!__efivars)
2167 + return -EINVAL;
2168 +
2169 + ops = __efivars->ops;
2170 if (!ops->query_variable_store)
2171 return -ENOSYS;
2172
2173 @@ -829,13 +867,18 @@ EXPORT_SYMBOL_GPL(efivar_entry_find);
2174 */
2175 int efivar_entry_size(struct efivar_entry *entry, unsigned long *size)
2176 {
2177 - const struct efivar_operations *ops = __efivars->ops;
2178 + const struct efivar_operations *ops;
2179 efi_status_t status;
2180
2181 *size = 0;
2182
2183 if (down_interruptible(&efivars_lock))
2184 return -EINTR;
2185 + if (!__efivars) {
2186 + up(&efivars_lock);
2187 + return -EINVAL;
2188 + }
2189 + ops = __efivars->ops;
2190 status = ops->get_variable(entry->var.VariableName,
2191 &entry->var.VendorGuid, NULL, size, NULL);
2192 up(&efivars_lock);
2193 @@ -861,12 +904,14 @@ EXPORT_SYMBOL_GPL(efivar_entry_size);
2194 int __efivar_entry_get(struct efivar_entry *entry, u32 *attributes,
2195 unsigned long *size, void *data)
2196 {
2197 - const struct efivar_operations *ops = __efivars->ops;
2198 efi_status_t status;
2199
2200 - status = ops->get_variable(entry->var.VariableName,
2201 - &entry->var.VendorGuid,
2202 - attributes, size, data);
2203 + if (!__efivars)
2204 + return -EINVAL;
2205 +
2206 + status = __efivars->ops->get_variable(entry->var.VariableName,
2207 + &entry->var.VendorGuid,
2208 + attributes, size, data);
2209
2210 return efi_status_to_err(status);
2211 }
2212 @@ -882,14 +927,19 @@ EXPORT_SYMBOL_GPL(__efivar_entry_get);
2213 int efivar_entry_get(struct efivar_entry *entry, u32 *attributes,
2214 unsigned long *size, void *data)
2215 {
2216 - const struct efivar_operations *ops = __efivars->ops;
2217 efi_status_t status;
2218
2219 if (down_interruptible(&efivars_lock))
2220 return -EINTR;
2221 - status = ops->get_variable(entry->var.VariableName,
2222 - &entry->var.VendorGuid,
2223 - attributes, size, data);
2224 +
2225 + if (!__efivars) {
2226 + up(&efivars_lock);
2227 + return -EINVAL;
2228 + }
2229 +
2230 + status = __efivars->ops->get_variable(entry->var.VariableName,
2231 + &entry->var.VendorGuid,
2232 + attributes, size, data);
2233 up(&efivars_lock);
2234
2235 return efi_status_to_err(status);
2236 @@ -921,7 +971,7 @@ EXPORT_SYMBOL_GPL(efivar_entry_get);
2237 int efivar_entry_set_get_size(struct efivar_entry *entry, u32 attributes,
2238 unsigned long *size, void *data, bool *set)
2239 {
2240 - const struct efivar_operations *ops = __efivars->ops;
2241 + const struct efivar_operations *ops;
2242 efi_char16_t *name = entry->var.VariableName;
2243 efi_guid_t *vendor = &entry->var.VendorGuid;
2244 efi_status_t status;
2245 @@ -940,6 +990,11 @@ int efivar_entry_set_get_size(struct efivar_entry *entry, u32 attributes,
2246 if (down_interruptible(&efivars_lock))
2247 return -EINTR;
2248
2249 + if (!__efivars) {
2250 + err = -EINVAL;
2251 + goto out;
2252 + }
2253 +
2254 /*
2255 * Ensure that the available space hasn't shrunk below the safe level
2256 */
2257 @@ -956,6 +1011,8 @@ int efivar_entry_set_get_size(struct efivar_entry *entry, u32 attributes,
2258 }
2259 }
2260
2261 + ops = __efivars->ops;
2262 +
2263 status = ops->set_variable(name, vendor, attributes, *size, data);
2264 if (status != EFI_SUCCESS) {
2265 err = efi_status_to_err(status);
2266 diff --git a/drivers/fpga/altera-cvp.c b/drivers/fpga/altera-cvp.c
2267 index d9fa7d4bf11f..35c3aa5792e2 100644
2268 --- a/drivers/fpga/altera-cvp.c
2269 +++ b/drivers/fpga/altera-cvp.c
2270 @@ -403,6 +403,7 @@ static int altera_cvp_probe(struct pci_dev *pdev,
2271 struct altera_cvp_conf *conf;
2272 struct fpga_manager *mgr;
2273 u16 cmd, val;
2274 + u32 regval;
2275 int ret;
2276
2277 /*
2278 @@ -416,6 +417,14 @@ static int altera_cvp_probe(struct pci_dev *pdev,
2279 return -ENODEV;
2280 }
2281
2282 + pci_read_config_dword(pdev, VSE_CVP_STATUS, &regval);
2283 + if (!(regval & VSE_CVP_STATUS_CVP_EN)) {
2284 + dev_err(&pdev->dev,
2285 + "CVP is disabled for this device: CVP_STATUS Reg 0x%x\n",
2286 + regval);
2287 + return -ENODEV;
2288 + }
2289 +
2290 conf = devm_kzalloc(&pdev->dev, sizeof(*conf), GFP_KERNEL);
2291 if (!conf)
2292 return -ENOMEM;
2293 @@ -469,7 +478,8 @@ static int altera_cvp_probe(struct pci_dev *pdev,
2294 return 0;
2295
2296 err_unmap:
2297 - pci_iounmap(pdev, conf->map);
2298 + if (conf->map)
2299 + pci_iounmap(pdev, conf->map);
2300 pci_release_region(pdev, CVP_BAR);
2301 err_disable:
2302 cmd &= ~PCI_COMMAND_MEMORY;
2303 @@ -484,7 +494,8 @@ static void altera_cvp_remove(struct pci_dev *pdev)
2304 u16 cmd;
2305
2306 fpga_mgr_unregister(mgr);
2307 - pci_iounmap(pdev, conf->map);
2308 + if (conf->map)
2309 + pci_iounmap(pdev, conf->map);
2310 pci_release_region(pdev, CVP_BAR);
2311 pci_read_config_word(pdev, PCI_COMMAND, &cmd);
2312 cmd &= ~PCI_COMMAND_MEMORY;
2313 diff --git a/drivers/gpio/gpio-mt7621.c b/drivers/gpio/gpio-mt7621.c
2314 index d72af6f6cdbd..00e954f22bc9 100644
2315 --- a/drivers/gpio/gpio-mt7621.c
2316 +++ b/drivers/gpio/gpio-mt7621.c
2317 @@ -244,6 +244,8 @@ mediatek_gpio_bank_probe(struct device *dev,
2318 rg->chip.of_xlate = mediatek_gpio_xlate;
2319 rg->chip.label = devm_kasprintf(dev, GFP_KERNEL, "%s-bank%d",
2320 dev_name(dev), bank);
2321 + if (!rg->chip.label)
2322 + return -ENOMEM;
2323
2324 ret = devm_gpiochip_add_data(dev, &rg->chip, mtk);
2325 if (ret < 0) {
2326 @@ -295,6 +297,7 @@ mediatek_gpio_probe(struct platform_device *pdev)
2327 struct device_node *np = dev->of_node;
2328 struct mtk *mtk;
2329 int i;
2330 + int ret;
2331
2332 mtk = devm_kzalloc(dev, sizeof(*mtk), GFP_KERNEL);
2333 if (!mtk)
2334 @@ -309,8 +312,11 @@ mediatek_gpio_probe(struct platform_device *pdev)
2335 platform_set_drvdata(pdev, mtk);
2336 mediatek_gpio_irq_chip.name = dev_name(dev);
2337
2338 - for (i = 0; i < MTK_BANK_CNT; i++)
2339 - mediatek_gpio_bank_probe(dev, np, i);
2340 + for (i = 0; i < MTK_BANK_CNT; i++) {
2341 + ret = mediatek_gpio_bank_probe(dev, np, i);
2342 + if (ret)
2343 + return ret;
2344 + }
2345
2346 return 0;
2347 }
2348 diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
2349 index 76913e23cf3a..bd44be115cdd 100644
2350 --- a/drivers/gpio/gpiolib.c
2351 +++ b/drivers/gpio/gpiolib.c
2352 @@ -2306,6 +2306,12 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
2353 unsigned long flags;
2354 unsigned offset;
2355
2356 + if (label) {
2357 + label = kstrdup_const(label, GFP_KERNEL);
2358 + if (!label)
2359 + return -ENOMEM;
2360 + }
2361 +
2362 spin_lock_irqsave(&gpio_lock, flags);
2363
2364 /* NOTE: gpio_request() can be called in early boot,
2365 @@ -2316,6 +2322,7 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
2366 desc_set_label(desc, label ? : "?");
2367 status = 0;
2368 } else {
2369 + kfree_const(label);
2370 status = -EBUSY;
2371 goto done;
2372 }
2373 @@ -2332,6 +2339,7 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
2374
2375 if (status < 0) {
2376 desc_set_label(desc, NULL);
2377 + kfree_const(label);
2378 clear_bit(FLAG_REQUESTED, &desc->flags);
2379 goto done;
2380 }
2381 @@ -2427,6 +2435,7 @@ static bool gpiod_free_commit(struct gpio_desc *desc)
2382 chip->free(chip, gpio_chip_hwgpio(desc));
2383 spin_lock_irqsave(&gpio_lock, flags);
2384 }
2385 + kfree_const(desc->label);
2386 desc_set_label(desc, NULL);
2387 clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
2388 clear_bit(FLAG_REQUESTED, &desc->flags);
2389 @@ -3382,11 +3391,19 @@ EXPORT_SYMBOL_GPL(gpiod_cansleep);
2390 * @desc: gpio to set the consumer name on
2391 * @name: the new consumer name
2392 */
2393 -void gpiod_set_consumer_name(struct gpio_desc *desc, const char *name)
2394 +int gpiod_set_consumer_name(struct gpio_desc *desc, const char *name)
2395 {
2396 - VALIDATE_DESC_VOID(desc);
2397 - /* Just overwrite whatever the previous name was */
2398 - desc->label = name;
2399 + VALIDATE_DESC(desc);
2400 + if (name) {
2401 + name = kstrdup_const(name, GFP_KERNEL);
2402 + if (!name)
2403 + return -ENOMEM;
2404 + }
2405 +
2406 + kfree_const(desc->label);
2407 + desc_set_label(desc, name);
2408 +
2409 + return 0;
2410 }
2411 EXPORT_SYMBOL_GPL(gpiod_set_consumer_name);
2412
2413 diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
2414 index 3118ae0e7a87..315a245aedc2 100644
2415 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
2416 +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
2417 @@ -5333,6 +5333,12 @@ enum surface_update_type dm_determine_update_type_for_commit(struct dc *dc, stru
2418 struct dc_stream_update stream_update;
2419 enum surface_update_type update_type = UPDATE_TYPE_FAST;
2420
2421 + if (!updates || !surface) {
2422 + DRM_ERROR("Plane or surface update failed to allocate");
2423 + /* Set type to FULL to avoid crashing in DC*/
2424 + update_type = UPDATE_TYPE_FULL;
2425 + goto ret;
2426 + }
2427
2428 for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
2429 new_dm_crtc_state = to_dm_crtc_state(new_crtc_state);
2430 diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
2431 index 5141c1401889..8b69913b6943 100644
2432 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
2433 +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
2434 @@ -208,6 +208,9 @@ bool dc_link_detect_sink(struct dc_link *link, enum dc_connection_type *type)
2435 return true;
2436 }
2437
2438 + if (link->connector_signal == SIGNAL_TYPE_EDP)
2439 + link->dc->hwss.edp_wait_for_hpd_ready(link, true);
2440 +
2441 /* todo: may need to lock gpio access */
2442 hpd_pin = get_hpd_gpio(link->ctx->dc_bios, link->link_id, link->ctx->gpio_service);
2443 if (hpd_pin == NULL)
2444 @@ -332,7 +335,7 @@ bool dc_link_is_dp_sink_present(struct dc_link *link)
2445 {
2446 enum gpio_result gpio_result;
2447 uint32_t clock_pin = 0;
2448 -
2449 + uint8_t retry = 0;
2450 struct ddc *ddc;
2451
2452 enum connector_id connector_id =
2453 @@ -361,11 +364,22 @@ bool dc_link_is_dp_sink_present(struct dc_link *link)
2454 return present;
2455 }
2456
2457 - /* Read GPIO: DP sink is present if both clock and data pins are zero */
2458 - /* [anaumov] in DAL2, there was no check for GPIO failure */
2459 -
2460 - gpio_result = dal_gpio_get_value(ddc->pin_clock, &clock_pin);
2461 - ASSERT(gpio_result == GPIO_RESULT_OK);
2462 + /*
2463 + * Read GPIO: DP sink is present if both clock and data pins are zero
2464 + *
2465 + * [W/A] plug-unplug DP cable, sometimes customer board has
2466 + * one short pulse on clk_pin(1V, < 1ms). DP will be config to HDMI/DVI
2467 + * then monitor can't br light up. Add retry 3 times
2468 + * But in real passive dongle, it need additional 3ms to detect
2469 + */
2470 + do {
2471 + gpio_result = dal_gpio_get_value(ddc->pin_clock, &clock_pin);
2472 + ASSERT(gpio_result == GPIO_RESULT_OK);
2473 + if (clock_pin)
2474 + udelay(1000);
2475 + else
2476 + break;
2477 + } while (retry++ < 3);
2478
2479 present = (gpio_result == GPIO_RESULT_OK) && !clock_pin;
2480
2481 diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
2482 index d91df5ef0cb3..d33a5ebe990b 100644
2483 --- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
2484 +++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
2485 @@ -2240,7 +2240,8 @@ static void get_active_converter_info(
2486 translate_dpcd_max_bpc(
2487 hdmi_color_caps.bits.MAX_BITS_PER_COLOR_COMPONENT);
2488
2489 - link->dpcd_caps.dongle_caps.extendedCapValid = true;
2490 + if (link->dpcd_caps.dongle_caps.dp_hdmi_max_pixel_clk != 0)
2491 + link->dpcd_caps.dongle_caps.extendedCapValid = true;
2492 }
2493
2494 break;
2495 diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
2496 index b6fe29b9fb65..8bd8f34b979c 100644
2497 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
2498 +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
2499 @@ -2002,6 +2002,8 @@ enum dc_status resource_map_pool_resources(
2500 }
2501 */
2502
2503 + calculate_phy_pix_clks(stream);
2504 +
2505 /* acquire new resources */
2506 pipe_idx = acquire_first_free_pipe(&context->res_ctx, pool, stream);
2507
2508 diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
2509 index a6bcb90e8419..4443a916a0fb 100644
2510 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
2511 +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
2512 @@ -1268,10 +1268,19 @@ static void program_scaler(const struct dc *dc,
2513 pipe_ctx->plane_res.scl_data.lb_params.depth,
2514 &pipe_ctx->stream->bit_depth_params);
2515
2516 - if (pipe_ctx->stream_res.tg->funcs->set_overscan_blank_color)
2517 + if (pipe_ctx->stream_res.tg->funcs->set_overscan_blank_color) {
2518 + /*
2519 + * The way 420 is packed, 2 channels carry Y component, 1 channel
2520 + * alternate between Cb and Cr, so both channels need the pixel
2521 + * value for Y
2522 + */
2523 + if (pipe_ctx->stream->timing.pixel_encoding == PIXEL_ENCODING_YCBCR420)
2524 + color.color_r_cr = color.color_g_y;
2525 +
2526 pipe_ctx->stream_res.tg->funcs->set_overscan_blank_color(
2527 pipe_ctx->stream_res.tg,
2528 &color);
2529 + }
2530
2531 pipe_ctx->plane_res.xfm->funcs->transform_set_scaler(pipe_ctx->plane_res.xfm,
2532 &pipe_ctx->plane_res.scl_data);
2533 diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
2534 index 193184affefb..220ba828748d 100644
2535 --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
2536 +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
2537 @@ -1226,7 +1226,8 @@ static bool dcn10_set_input_transfer_func(struct pipe_ctx *pipe_ctx,
2538 tf = plane_state->in_transfer_func;
2539
2540 if (plane_state->gamma_correction &&
2541 - !plane_state->gamma_correction->is_identity
2542 + !dpp_base->ctx->dc->debug.always_use_regamma
2543 + && !plane_state->gamma_correction->is_identity
2544 && dce_use_lut(plane_state->format))
2545 dpp_base->funcs->dpp_program_input_lut(dpp_base, plane_state->gamma_correction);
2546
2547 @@ -2164,6 +2165,15 @@ static void dcn10_blank_pixel_data(
2548 color_space = stream->output_color_space;
2549 color_space_to_black_color(dc, color_space, &black_color);
2550
2551 + /*
2552 + * The way 420 is packed, 2 channels carry Y component, 1 channel
2553 + * alternate between Cb and Cr, so both channels need the pixel
2554 + * value for Y
2555 + */
2556 + if (stream->timing.pixel_encoding == PIXEL_ENCODING_YCBCR420)
2557 + black_color.color_r_cr = black_color.color_g_y;
2558 +
2559 +
2560 if (stream_res->tg->funcs->set_blank_color)
2561 stream_res->tg->funcs->set_blank_color(
2562 stream_res->tg,
2563 diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
2564 index a1e0ac9ae248..90c1215c6f5e 100644
2565 --- a/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
2566 +++ b/drivers/gpu/drm/amd/powerplay/smumgr/polaris10_smumgr.c
2567 @@ -1529,8 +1529,21 @@ static int polaris10_populate_clock_stretcher_data_table(struct pp_hwmgr *hwmgr)
2568 efuse = efuse >> 24;
2569
2570 if (hwmgr->chip_id == CHIP_POLARIS10) {
2571 - min = 1000;
2572 - max = 2300;
2573 + if (hwmgr->is_kicker) {
2574 + min = 1200;
2575 + max = 2500;
2576 + } else {
2577 + min = 1000;
2578 + max = 2300;
2579 + }
2580 + } else if (hwmgr->chip_id == CHIP_POLARIS11) {
2581 + if (hwmgr->is_kicker) {
2582 + min = 900;
2583 + max = 2100;
2584 + } else {
2585 + min = 1100;
2586 + max = 2100;
2587 + }
2588 } else {
2589 min = 1100;
2590 max = 2100;
2591 diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
2592 index b4e292a56046..df86c2ebfc12 100644
2593 --- a/drivers/gpu/drm/drm_atomic_helper.c
2594 +++ b/drivers/gpu/drm/drm_atomic_helper.c
2595 @@ -3212,7 +3212,7 @@ EXPORT_SYMBOL(drm_atomic_helper_suspend);
2596 int drm_atomic_helper_commit_duplicated_state(struct drm_atomic_state *state,
2597 struct drm_modeset_acquire_ctx *ctx)
2598 {
2599 - int i;
2600 + int i, ret;
2601 struct drm_plane *plane;
2602 struct drm_plane_state *new_plane_state;
2603 struct drm_connector *connector;
2604 @@ -3231,7 +3231,11 @@ int drm_atomic_helper_commit_duplicated_state(struct drm_atomic_state *state,
2605 for_each_new_connector_in_state(state, connector, new_conn_state, i)
2606 state->connectors[i].old_state = connector->state;
2607
2608 - return drm_atomic_commit(state);
2609 + ret = drm_atomic_commit(state);
2610 +
2611 + state->acquire_ctx = NULL;
2612 +
2613 + return ret;
2614 }
2615 EXPORT_SYMBOL(drm_atomic_helper_commit_duplicated_state);
2616
2617 diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c
2618 index 7412acaf3cde..d7d10cabb9bb 100644
2619 --- a/drivers/gpu/drm/drm_bufs.c
2620 +++ b/drivers/gpu/drm/drm_bufs.c
2621 @@ -36,6 +36,8 @@
2622 #include <drm/drmP.h>
2623 #include "drm_legacy.h"
2624
2625 +#include <linux/nospec.h>
2626 +
2627 static struct drm_map_list *drm_find_matching_map(struct drm_device *dev,
2628 struct drm_local_map *map)
2629 {
2630 @@ -1417,6 +1419,7 @@ int drm_legacy_freebufs(struct drm_device *dev, void *data,
2631 idx, dma->buf_count - 1);
2632 return -EINVAL;
2633 }
2634 + idx = array_index_nospec(idx, dma->buf_count);
2635 buf = dma->buflist[idx];
2636 if (buf->file_priv != file_priv) {
2637 DRM_ERROR("Process %d freeing buffer not owned\n",
2638 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c
2639 index 84de385a9f62..60f146f02b77 100644
2640 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c
2641 +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c
2642 @@ -331,7 +331,7 @@ static void dpu_encoder_phys_vid_vblank_irq(void *arg, int irq_idx)
2643 if (hw_ctl && hw_ctl->ops.get_flush_register)
2644 flush_register = hw_ctl->ops.get_flush_register(hw_ctl);
2645
2646 - if (flush_register == 0)
2647 + if (!(flush_register & hw_ctl->ops.get_pending_flush(hw_ctl)))
2648 new_cnt = atomic_add_unless(&phys_enc->pending_kickoff_cnt,
2649 -1, 0);
2650 spin_unlock_irqrestore(phys_enc->enc_spinlock, lock_flags);
2651 diff --git a/drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c b/drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c
2652 index 41bec570c518..31205625c734 100644
2653 --- a/drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c
2654 +++ b/drivers/gpu/drm/msm/dsi/pll/dsi_pll_10nm.c
2655 @@ -17,7 +17,7 @@
2656 * | |
2657 * | |
2658 * +---------+ | +----------+ | +----+
2659 - * dsi0vco_clk ---| out_div |--o--| divl_3_0 |--o--| /8 |-- dsi0pllbyte
2660 + * dsi0vco_clk ---| out_div |--o--| divl_3_0 |--o--| /8 |-- dsi0_phy_pll_out_byteclk
2661 * +---------+ | +----------+ | +----+
2662 * | |
2663 * | | dsi0_pll_by_2_bit_clk
2664 @@ -25,7 +25,7 @@
2665 * | | +----+ | |\ dsi0_pclk_mux
2666 * | |--| /2 |--o--| \ |
2667 * | | +----+ | \ | +---------+
2668 - * | --------------| |--o--| div_7_4 |-- dsi0pll
2669 + * | --------------| |--o--| div_7_4 |-- dsi0_phy_pll_out_dsiclk
2670 * |------------------------------| / +---------+
2671 * | +-----+ | /
2672 * -----------| /4? |--o----------|/
2673 @@ -690,7 +690,7 @@ static int pll_10nm_register(struct dsi_pll_10nm *pll_10nm)
2674
2675 hws[num++] = hw;
2676
2677 - snprintf(clk_name, 32, "dsi%dpllbyte", pll_10nm->id);
2678 + snprintf(clk_name, 32, "dsi%d_phy_pll_out_byteclk", pll_10nm->id);
2679 snprintf(parent, 32, "dsi%d_pll_bit_clk", pll_10nm->id);
2680
2681 /* DSI Byte clock = VCO_CLK / OUT_DIV / BIT_DIV / 8 */
2682 @@ -739,7 +739,7 @@ static int pll_10nm_register(struct dsi_pll_10nm *pll_10nm)
2683
2684 hws[num++] = hw;
2685
2686 - snprintf(clk_name, 32, "dsi%dpll", pll_10nm->id);
2687 + snprintf(clk_name, 32, "dsi%d_phy_pll_out_dsiclk", pll_10nm->id);
2688 snprintf(parent, 32, "dsi%d_pclk_mux", pll_10nm->id);
2689
2690 /* PIX CLK DIV : DIV_CTRL_7_4*/
2691 diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
2692 index 17741843cf51..40a9afe818a8 100644
2693 --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
2694 +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
2695 @@ -226,9 +226,6 @@ static void rcar_du_crtc_set_display_timing(struct rcar_du_crtc *rcrtc)
2696 * system clock, and have no internal clock divider.
2697 */
2698
2699 - if (WARN_ON(!rcrtc->extclock))
2700 - return;
2701 -
2702 /*
2703 * The H3 ES1.x exhibits dot clock duty cycle stability issues.
2704 * We can work around them by configuring the DPLL to twice the
2705 @@ -1113,9 +1110,16 @@ int rcar_du_crtc_create(struct rcar_du_group *rgrp, unsigned int swindex,
2706 clk = devm_clk_get(rcdu->dev, clk_name);
2707 if (!IS_ERR(clk)) {
2708 rcrtc->extclock = clk;
2709 - } else if (PTR_ERR(rcrtc->clock) == -EPROBE_DEFER) {
2710 - dev_info(rcdu->dev, "can't get external clock %u\n", hwindex);
2711 + } else if (PTR_ERR(clk) == -EPROBE_DEFER) {
2712 return -EPROBE_DEFER;
2713 + } else if (rcdu->info->dpll_mask & BIT(hwindex)) {
2714 + /*
2715 + * DU channels that have a display PLL can't use the internal
2716 + * system clock and thus require an external clock.
2717 + */
2718 + ret = PTR_ERR(clk);
2719 + dev_err(rcdu->dev, "can't get dclkin.%u: %d\n", hwindex, ret);
2720 + return ret;
2721 }
2722
2723 init_waitqueue_head(&rcrtc->flip_wait);
2724 diff --git a/drivers/gpu/drm/rockchip/cdn-dp-reg.c b/drivers/gpu/drm/rockchip/cdn-dp-reg.c
2725 index 3105965fc260..5a485489a1e2 100644
2726 --- a/drivers/gpu/drm/rockchip/cdn-dp-reg.c
2727 +++ b/drivers/gpu/drm/rockchip/cdn-dp-reg.c
2728 @@ -147,7 +147,7 @@ static int cdn_dp_mailbox_validate_receive(struct cdn_dp_device *dp,
2729 }
2730
2731 static int cdn_dp_mailbox_read_receive(struct cdn_dp_device *dp,
2732 - u8 *buff, u8 buff_size)
2733 + u8 *buff, u16 buff_size)
2734 {
2735 u32 i;
2736 int ret;
2737 diff --git a/drivers/gpu/drm/sun4i/sun8i_tcon_top.c b/drivers/gpu/drm/sun4i/sun8i_tcon_top.c
2738 index 3040a79f298f..37158548b447 100644
2739 --- a/drivers/gpu/drm/sun4i/sun8i_tcon_top.c
2740 +++ b/drivers/gpu/drm/sun4i/sun8i_tcon_top.c
2741 @@ -167,6 +167,13 @@ static int sun8i_tcon_top_bind(struct device *dev, struct device *master,
2742 goto err_assert_reset;
2743 }
2744
2745 + /*
2746 + * At least on H6, some registers have some bits set by default
2747 + * which may cause issues. Clear them here.
2748 + */
2749 + writel(0, regs + TCON_TOP_PORT_SEL_REG);
2750 + writel(0, regs + TCON_TOP_GATE_SRC_REG);
2751 +
2752 /*
2753 * TCON TOP has two muxes, which select parent clock for each TCON TV
2754 * channel clock. Parent could be either TCON TV or TVE clock. For now
2755 diff --git a/drivers/gpu/drm/v3d/v3d_bo.c b/drivers/gpu/drm/v3d/v3d_bo.c
2756 index 54d96518a131..a08766d39eab 100644
2757 --- a/drivers/gpu/drm/v3d/v3d_bo.c
2758 +++ b/drivers/gpu/drm/v3d/v3d_bo.c
2759 @@ -293,6 +293,7 @@ v3d_prime_import_sg_table(struct drm_device *dev,
2760 bo->resv = attach->dmabuf->resv;
2761
2762 bo->sgt = sgt;
2763 + obj->import_attach = attach;
2764 v3d_bo_get_pages(bo);
2765
2766 v3d_mmu_insert_ptes(bo);
2767 diff --git a/drivers/gpu/drm/v3d/v3d_drv.h b/drivers/gpu/drm/v3d/v3d_drv.h
2768 index e6fed696ad86..cbe5be0c47eb 100644
2769 --- a/drivers/gpu/drm/v3d/v3d_drv.h
2770 +++ b/drivers/gpu/drm/v3d/v3d_drv.h
2771 @@ -198,6 +198,11 @@ struct v3d_exec_info {
2772 */
2773 struct dma_fence *bin_done_fence;
2774
2775 + /* Fence for when the scheduler considers the render to be
2776 + * done, for when the BOs reservations should be complete.
2777 + */
2778 + struct dma_fence *render_done_fence;
2779 +
2780 struct kref refcount;
2781
2782 /* This is the array of BOs that were looked up at the start of exec. */
2783 diff --git a/drivers/gpu/drm/v3d/v3d_gem.c b/drivers/gpu/drm/v3d/v3d_gem.c
2784 index 70c54774400b..2814c72cb090 100644
2785 --- a/drivers/gpu/drm/v3d/v3d_gem.c
2786 +++ b/drivers/gpu/drm/v3d/v3d_gem.c
2787 @@ -209,7 +209,7 @@ v3d_flush_caches(struct v3d_dev *v3d)
2788 static void
2789 v3d_attach_object_fences(struct v3d_exec_info *exec)
2790 {
2791 - struct dma_fence *out_fence = &exec->render.base.s_fence->finished;
2792 + struct dma_fence *out_fence = exec->render_done_fence;
2793 struct v3d_bo *bo;
2794 int i;
2795
2796 @@ -409,6 +409,7 @@ v3d_exec_cleanup(struct kref *ref)
2797 dma_fence_put(exec->render.done_fence);
2798
2799 dma_fence_put(exec->bin_done_fence);
2800 + dma_fence_put(exec->render_done_fence);
2801
2802 for (i = 0; i < exec->bo_count; i++)
2803 drm_gem_object_put_unlocked(&exec->bo[i]->base);
2804 @@ -572,6 +573,9 @@ v3d_submit_cl_ioctl(struct drm_device *dev, void *data,
2805 if (ret)
2806 goto fail_unreserve;
2807
2808 + exec->render_done_fence =
2809 + dma_fence_get(&exec->render.base.s_fence->finished);
2810 +
2811 kref_get(&exec->refcount); /* put by scheduler job completion */
2812 drm_sched_entity_push_job(&exec->render.base,
2813 &v3d_priv->sched_entity[V3D_RENDER]);
2814 @@ -585,7 +589,7 @@ v3d_submit_cl_ioctl(struct drm_device *dev, void *data,
2815 sync_out = drm_syncobj_find(file_priv, args->out_sync);
2816 if (sync_out) {
2817 drm_syncobj_replace_fence(sync_out, 0,
2818 - &exec->render.base.s_fence->finished);
2819 + exec->render_done_fence);
2820 drm_syncobj_put(sync_out);
2821 }
2822
2823 diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c
2824 index ae6254b0b1ae..ed8b0fc170ee 100644
2825 --- a/drivers/gpu/drm/vc4/vc4_plane.c
2826 +++ b/drivers/gpu/drm/vc4/vc4_plane.c
2827 @@ -314,12 +314,14 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)
2828 vc4_get_scaling_mode(vc4_state->src_h[1],
2829 vc4_state->crtc_h);
2830
2831 - /* YUV conversion requires that horizontal scaling be enabled,
2832 - * even on a plane that's otherwise 1:1. Looks like only PPF
2833 - * works in that case, so let's pick that one.
2834 + /* YUV conversion requires that horizontal scaling be enabled
2835 + * on the UV plane even if vc4_get_scaling_mode() returned
2836 + * VC4_SCALING_NONE (which can happen when the down-scaling
2837 + * ratio is 0.5). Let's force it to VC4_SCALING_PPF in this
2838 + * case.
2839 */
2840 - if (vc4_state->is_unity)
2841 - vc4_state->x_scaling[0] = VC4_SCALING_PPF;
2842 + if (vc4_state->x_scaling[1] == VC4_SCALING_NONE)
2843 + vc4_state->x_scaling[1] = VC4_SCALING_PPF;
2844 } else {
2845 vc4_state->is_yuv = false;
2846 vc4_state->x_scaling[1] = VC4_SCALING_NONE;
2847 diff --git a/drivers/gpu/drm/vgem/vgem_drv.c b/drivers/gpu/drm/vgem/vgem_drv.c
2848 index ec6af8b920da..f1f7ab9dcdbf 100644
2849 --- a/drivers/gpu/drm/vgem/vgem_drv.c
2850 +++ b/drivers/gpu/drm/vgem/vgem_drv.c
2851 @@ -471,31 +471,31 @@ static int __init vgem_init(void)
2852 if (!vgem_device)
2853 return -ENOMEM;
2854
2855 - ret = drm_dev_init(&vgem_device->drm, &vgem_driver, NULL);
2856 - if (ret)
2857 - goto out_free;
2858 -
2859 vgem_device->platform =
2860 platform_device_register_simple("vgem", -1, NULL, 0);
2861 if (IS_ERR(vgem_device->platform)) {
2862 ret = PTR_ERR(vgem_device->platform);
2863 - goto out_fini;
2864 + goto out_free;
2865 }
2866
2867 dma_coerce_mask_and_coherent(&vgem_device->platform->dev,
2868 DMA_BIT_MASK(64));
2869 + ret = drm_dev_init(&vgem_device->drm, &vgem_driver,
2870 + &vgem_device->platform->dev);
2871 + if (ret)
2872 + goto out_unregister;
2873
2874 /* Final step: expose the device/driver to userspace */
2875 ret = drm_dev_register(&vgem_device->drm, 0);
2876 if (ret)
2877 - goto out_unregister;
2878 + goto out_fini;
2879
2880 return 0;
2881
2882 -out_unregister:
2883 - platform_device_unregister(vgem_device->platform);
2884 out_fini:
2885 drm_dev_fini(&vgem_device->drm);
2886 +out_unregister:
2887 + platform_device_unregister(vgem_device->platform);
2888 out_free:
2889 kfree(vgem_device);
2890 return ret;
2891 diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c b/drivers/gpu/ipu-v3/ipu-image-convert.c
2892 index f4081962784c..91653adc41cc 100644
2893 --- a/drivers/gpu/ipu-v3/ipu-image-convert.c
2894 +++ b/drivers/gpu/ipu-v3/ipu-image-convert.c
2895 @@ -1524,7 +1524,7 @@ unlock:
2896 EXPORT_SYMBOL_GPL(ipu_image_convert_queue);
2897
2898 /* Abort any active or pending conversions for this context */
2899 -void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx)
2900 +static void __ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx)
2901 {
2902 struct ipu_image_convert_chan *chan = ctx->chan;
2903 struct ipu_image_convert_priv *priv = chan->priv;
2904 @@ -1551,7 +1551,7 @@ void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx)
2905
2906 need_abort = (run_count || active_run);
2907
2908 - ctx->aborting = need_abort;
2909 + ctx->aborting = true;
2910
2911 spin_unlock_irqrestore(&chan->irqlock, flags);
2912
2913 @@ -1572,7 +1572,11 @@ void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx)
2914 dev_warn(priv->ipu->dev, "%s: timeout\n", __func__);
2915 force_abort(ctx);
2916 }
2917 +}
2918
2919 +void ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx)
2920 +{
2921 + __ipu_image_convert_abort(ctx);
2922 ctx->aborting = false;
2923 }
2924 EXPORT_SYMBOL_GPL(ipu_image_convert_abort);
2925 @@ -1586,7 +1590,7 @@ void ipu_image_convert_unprepare(struct ipu_image_convert_ctx *ctx)
2926 bool put_res;
2927
2928 /* make sure no runs are hanging around */
2929 - ipu_image_convert_abort(ctx);
2930 + __ipu_image_convert_abort(ctx);
2931
2932 dev_dbg(priv->ipu->dev, "%s: task %u: removing ctx %p\n", __func__,
2933 chan->ic_task, ctx);
2934 diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c
2935 index b48100236df8..ebc9ffde41e9 100644
2936 --- a/drivers/hid/hid-debug.c
2937 +++ b/drivers/hid/hid-debug.c
2938 @@ -30,6 +30,7 @@
2939
2940 #include <linux/debugfs.h>
2941 #include <linux/seq_file.h>
2942 +#include <linux/kfifo.h>
2943 #include <linux/sched/signal.h>
2944 #include <linux/export.h>
2945 #include <linux/slab.h>
2946 @@ -661,17 +662,12 @@ EXPORT_SYMBOL_GPL(hid_dump_device);
2947 /* enqueue string to 'events' ring buffer */
2948 void hid_debug_event(struct hid_device *hdev, char *buf)
2949 {
2950 - unsigned i;
2951 struct hid_debug_list *list;
2952 unsigned long flags;
2953
2954 spin_lock_irqsave(&hdev->debug_list_lock, flags);
2955 - list_for_each_entry(list, &hdev->debug_list, node) {
2956 - for (i = 0; buf[i]; i++)
2957 - list->hid_debug_buf[(list->tail + i) % HID_DEBUG_BUFSIZE] =
2958 - buf[i];
2959 - list->tail = (list->tail + i) % HID_DEBUG_BUFSIZE;
2960 - }
2961 + list_for_each_entry(list, &hdev->debug_list, node)
2962 + kfifo_in(&list->hid_debug_fifo, buf, strlen(buf));
2963 spin_unlock_irqrestore(&hdev->debug_list_lock, flags);
2964
2965 wake_up_interruptible(&hdev->debug_wait);
2966 @@ -722,8 +718,7 @@ void hid_dump_input(struct hid_device *hdev, struct hid_usage *usage, __s32 valu
2967 hid_debug_event(hdev, buf);
2968
2969 kfree(buf);
2970 - wake_up_interruptible(&hdev->debug_wait);
2971 -
2972 + wake_up_interruptible(&hdev->debug_wait);
2973 }
2974 EXPORT_SYMBOL_GPL(hid_dump_input);
2975
2976 @@ -1088,8 +1083,8 @@ static int hid_debug_events_open(struct inode *inode, struct file *file)
2977 goto out;
2978 }
2979
2980 - if (!(list->hid_debug_buf = kzalloc(HID_DEBUG_BUFSIZE, GFP_KERNEL))) {
2981 - err = -ENOMEM;
2982 + err = kfifo_alloc(&list->hid_debug_fifo, HID_DEBUG_FIFOSIZE, GFP_KERNEL);
2983 + if (err) {
2984 kfree(list);
2985 goto out;
2986 }
2987 @@ -1109,77 +1104,57 @@ static ssize_t hid_debug_events_read(struct file *file, char __user *buffer,
2988 size_t count, loff_t *ppos)
2989 {
2990 struct hid_debug_list *list = file->private_data;
2991 - int ret = 0, len;
2992 + int ret = 0, copied;
2993 DECLARE_WAITQUEUE(wait, current);
2994
2995 mutex_lock(&list->read_mutex);
2996 - while (ret == 0) {
2997 - if (list->head == list->tail) {
2998 - add_wait_queue(&list->hdev->debug_wait, &wait);
2999 - set_current_state(TASK_INTERRUPTIBLE);
3000 -
3001 - while (list->head == list->tail) {
3002 - if (file->f_flags & O_NONBLOCK) {
3003 - ret = -EAGAIN;
3004 - break;
3005 - }
3006 - if (signal_pending(current)) {
3007 - ret = -ERESTARTSYS;
3008 - break;
3009 - }
3010 + if (kfifo_is_empty(&list->hid_debug_fifo)) {
3011 + add_wait_queue(&list->hdev->debug_wait, &wait);
3012 + set_current_state(TASK_INTERRUPTIBLE);
3013 +
3014 + while (kfifo_is_empty(&list->hid_debug_fifo)) {
3015 + if (file->f_flags & O_NONBLOCK) {
3016 + ret = -EAGAIN;
3017 + break;
3018 + }
3019
3020 - if (!list->hdev || !list->hdev->debug) {
3021 - ret = -EIO;
3022 - set_current_state(TASK_RUNNING);
3023 - goto out;
3024 - }
3025 + if (signal_pending(current)) {
3026 + ret = -ERESTARTSYS;
3027 + break;
3028 + }
3029
3030 - /* allow O_NONBLOCK from other threads */
3031 - mutex_unlock(&list->read_mutex);
3032 - schedule();
3033 - mutex_lock(&list->read_mutex);
3034 - set_current_state(TASK_INTERRUPTIBLE);
3035 + /* if list->hdev is NULL we cannot remove_wait_queue().
3036 + * if list->hdev->debug is 0 then hid_debug_unregister()
3037 + * was already called and list->hdev is being destroyed.
3038 + * if we add remove_wait_queue() here we can hit a race.
3039 + */
3040 + if (!list->hdev || !list->hdev->debug) {
3041 + ret = -EIO;
3042 + set_current_state(TASK_RUNNING);
3043 + goto out;
3044 }
3045
3046 - set_current_state(TASK_RUNNING);
3047 - remove_wait_queue(&list->hdev->debug_wait, &wait);
3048 + /* allow O_NONBLOCK from other threads */
3049 + mutex_unlock(&list->read_mutex);
3050 + schedule();
3051 + mutex_lock(&list->read_mutex);
3052 + set_current_state(TASK_INTERRUPTIBLE);
3053 }
3054
3055 - if (ret)
3056 - goto out;
3057 + __set_current_state(TASK_RUNNING);
3058 + remove_wait_queue(&list->hdev->debug_wait, &wait);
3059
3060 - /* pass the ringbuffer contents to userspace */
3061 -copy_rest:
3062 - if (list->tail == list->head)
3063 + if (ret)
3064 goto out;
3065 - if (list->tail > list->head) {
3066 - len = list->tail - list->head;
3067 - if (len > count)
3068 - len = count;
3069 -
3070 - if (copy_to_user(buffer + ret, &list->hid_debug_buf[list->head], len)) {
3071 - ret = -EFAULT;
3072 - goto out;
3073 - }
3074 - ret += len;
3075 - list->head += len;
3076 - } else {
3077 - len = HID_DEBUG_BUFSIZE - list->head;
3078 - if (len > count)
3079 - len = count;
3080 -
3081 - if (copy_to_user(buffer, &list->hid_debug_buf[list->head], len)) {
3082 - ret = -EFAULT;
3083 - goto out;
3084 - }
3085 - list->head = 0;
3086 - ret += len;
3087 - count -= len;
3088 - if (count > 0)
3089 - goto copy_rest;
3090 - }
3091 -
3092 }
3093 +
3094 + /* pass the fifo content to userspace, locking is not needed with only
3095 + * one concurrent reader and one concurrent writer
3096 + */
3097 + ret = kfifo_to_user(&list->hid_debug_fifo, buffer, count, &copied);
3098 + if (ret)
3099 + goto out;
3100 + ret = copied;
3101 out:
3102 mutex_unlock(&list->read_mutex);
3103 return ret;
3104 @@ -1190,7 +1165,7 @@ static __poll_t hid_debug_events_poll(struct file *file, poll_table *wait)
3105 struct hid_debug_list *list = file->private_data;
3106
3107 poll_wait(file, &list->hdev->debug_wait, wait);
3108 - if (list->head != list->tail)
3109 + if (!kfifo_is_empty(&list->hid_debug_fifo))
3110 return EPOLLIN | EPOLLRDNORM;
3111 if (!list->hdev->debug)
3112 return EPOLLERR | EPOLLHUP;
3113 @@ -1205,7 +1180,7 @@ static int hid_debug_events_release(struct inode *inode, struct file *file)
3114 spin_lock_irqsave(&list->hdev->debug_list_lock, flags);
3115 list_del(&list->node);
3116 spin_unlock_irqrestore(&list->hdev->debug_list_lock, flags);
3117 - kfree(list->hid_debug_buf);
3118 + kfifo_free(&list->hid_debug_fifo);
3119 kfree(list);
3120
3121 return 0;
3122 @@ -1256,4 +1231,3 @@ void hid_debug_exit(void)
3123 {
3124 debugfs_remove_recursive(hid_debug_root);
3125 }
3126 -
3127 diff --git a/drivers/hid/hid-lenovo.c b/drivers/hid/hid-lenovo.c
3128 index 643b6eb54442..eacc76d2ab96 100644
3129 --- a/drivers/hid/hid-lenovo.c
3130 +++ b/drivers/hid/hid-lenovo.c
3131 @@ -743,7 +743,9 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev)
3132 data_pointer->led_mute.brightness_get = lenovo_led_brightness_get_tpkbd;
3133 data_pointer->led_mute.brightness_set = lenovo_led_brightness_set_tpkbd;
3134 data_pointer->led_mute.dev = dev;
3135 - led_classdev_register(dev, &data_pointer->led_mute);
3136 + ret = led_classdev_register(dev, &data_pointer->led_mute);
3137 + if (ret < 0)
3138 + goto err;
3139
3140 data_pointer->led_micmute.name = name_micmute;
3141 data_pointer->led_micmute.brightness_get =
3142 @@ -751,7 +753,11 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev)
3143 data_pointer->led_micmute.brightness_set =
3144 lenovo_led_brightness_set_tpkbd;
3145 data_pointer->led_micmute.dev = dev;
3146 - led_classdev_register(dev, &data_pointer->led_micmute);
3147 + ret = led_classdev_register(dev, &data_pointer->led_micmute);
3148 + if (ret < 0) {
3149 + led_classdev_unregister(&data_pointer->led_mute);
3150 + goto err;
3151 + }
3152
3153 lenovo_features_set_tpkbd(hdev);
3154
3155 diff --git a/drivers/hwmon/lm80.c b/drivers/hwmon/lm80.c
3156 index 08e3945a6fbf..0e30fa00204c 100644
3157 --- a/drivers/hwmon/lm80.c
3158 +++ b/drivers/hwmon/lm80.c
3159 @@ -360,9 +360,11 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
3160 struct i2c_client *client = data->client;
3161 unsigned long min, val;
3162 u8 reg;
3163 - int err = kstrtoul(buf, 10, &val);
3164 - if (err < 0)
3165 - return err;
3166 + int rv;
3167 +
3168 + rv = kstrtoul(buf, 10, &val);
3169 + if (rv < 0)
3170 + return rv;
3171
3172 /* Save fan_min */
3173 mutex_lock(&data->update_lock);
3174 @@ -390,8 +392,11 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
3175 return -EINVAL;
3176 }
3177
3178 - reg = (lm80_read_value(client, LM80_REG_FANDIV) &
3179 - ~(3 << (2 * (nr + 1)))) | (data->fan_div[nr] << (2 * (nr + 1)));
3180 + rv = lm80_read_value(client, LM80_REG_FANDIV);
3181 + if (rv < 0)
3182 + return rv;
3183 + reg = (rv & ~(3 << (2 * (nr + 1))))
3184 + | (data->fan_div[nr] << (2 * (nr + 1)));
3185 lm80_write_value(client, LM80_REG_FANDIV, reg);
3186
3187 /* Restore fan_min */
3188 @@ -623,6 +628,7 @@ static int lm80_probe(struct i2c_client *client,
3189 struct device *dev = &client->dev;
3190 struct device *hwmon_dev;
3191 struct lm80_data *data;
3192 + int rv;
3193
3194 data = devm_kzalloc(dev, sizeof(struct lm80_data), GFP_KERNEL);
3195 if (!data)
3196 @@ -635,8 +641,14 @@ static int lm80_probe(struct i2c_client *client,
3197 lm80_init_client(client);
3198
3199 /* A few vars need to be filled upon startup */
3200 - data->fan[f_min][0] = lm80_read_value(client, LM80_REG_FAN_MIN(1));
3201 - data->fan[f_min][1] = lm80_read_value(client, LM80_REG_FAN_MIN(2));
3202 + rv = lm80_read_value(client, LM80_REG_FAN_MIN(1));
3203 + if (rv < 0)
3204 + return rv;
3205 + data->fan[f_min][0] = rv;
3206 + rv = lm80_read_value(client, LM80_REG_FAN_MIN(2));
3207 + if (rv < 0)
3208 + return rv;
3209 + data->fan[f_min][1] = rv;
3210
3211 hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
3212 data, lm80_groups);
3213 diff --git a/drivers/i2c/busses/i2c-axxia.c b/drivers/i2c/busses/i2c-axxia.c
3214 index 51d34959709b..fb5bac079e83 100644
3215 --- a/drivers/i2c/busses/i2c-axxia.c
3216 +++ b/drivers/i2c/busses/i2c-axxia.c
3217 @@ -296,22 +296,7 @@ static irqreturn_t axxia_i2c_isr(int irq, void *_dev)
3218 i2c_int_disable(idev, MST_STATUS_TFL);
3219 }
3220
3221 - if (status & MST_STATUS_SCC) {
3222 - /* Stop completed */
3223 - i2c_int_disable(idev, ~MST_STATUS_TSS);
3224 - complete(&idev->msg_complete);
3225 - } else if (status & MST_STATUS_SNS) {
3226 - /* Transfer done */
3227 - i2c_int_disable(idev, ~MST_STATUS_TSS);
3228 - if (i2c_m_rd(idev->msg) && idev->msg_xfrd < idev->msg->len)
3229 - axxia_i2c_empty_rx_fifo(idev);
3230 - complete(&idev->msg_complete);
3231 - } else if (status & MST_STATUS_TSS) {
3232 - /* Transfer timeout */
3233 - idev->msg_err = -ETIMEDOUT;
3234 - i2c_int_disable(idev, ~MST_STATUS_TSS);
3235 - complete(&idev->msg_complete);
3236 - } else if (unlikely(status & MST_STATUS_ERR)) {
3237 + if (unlikely(status & MST_STATUS_ERR)) {
3238 /* Transfer error */
3239 i2c_int_disable(idev, ~0);
3240 if (status & MST_STATUS_AL)
3241 @@ -328,6 +313,21 @@ static irqreturn_t axxia_i2c_isr(int irq, void *_dev)
3242 readl(idev->base + MST_TX_BYTES_XFRD),
3243 readl(idev->base + MST_TX_XFER));
3244 complete(&idev->msg_complete);
3245 + } else if (status & MST_STATUS_SCC) {
3246 + /* Stop completed */
3247 + i2c_int_disable(idev, ~MST_STATUS_TSS);
3248 + complete(&idev->msg_complete);
3249 + } else if (status & MST_STATUS_SNS) {
3250 + /* Transfer done */
3251 + i2c_int_disable(idev, ~MST_STATUS_TSS);
3252 + if (i2c_m_rd(idev->msg) && idev->msg_xfrd < idev->msg->len)
3253 + axxia_i2c_empty_rx_fifo(idev);
3254 + complete(&idev->msg_complete);
3255 + } else if (status & MST_STATUS_TSS) {
3256 + /* Transfer timeout */
3257 + idev->msg_err = -ETIMEDOUT;
3258 + i2c_int_disable(idev, ~MST_STATUS_TSS);
3259 + complete(&idev->msg_complete);
3260 }
3261
3262 out:
3263 diff --git a/drivers/i2c/busses/i2c-sh_mobile.c b/drivers/i2c/busses/i2c-sh_mobile.c
3264 index a7a7a9c3bc7c..a64f2ff3cb49 100644
3265 --- a/drivers/i2c/busses/i2c-sh_mobile.c
3266 +++ b/drivers/i2c/busses/i2c-sh_mobile.c
3267 @@ -800,6 +800,7 @@ static const struct sh_mobile_dt_config r8a7740_dt_config = {
3268 static const struct of_device_id sh_mobile_i2c_dt_ids[] = {
3269 { .compatible = "renesas,iic-r8a73a4", .data = &fast_clock_dt_config },
3270 { .compatible = "renesas,iic-r8a7740", .data = &r8a7740_dt_config },
3271 + { .compatible = "renesas,iic-r8a774c0", .data = &fast_clock_dt_config },
3272 { .compatible = "renesas,iic-r8a7790", .data = &v2_freq_calc_dt_config },
3273 { .compatible = "renesas,iic-r8a7791", .data = &fast_clock_dt_config },
3274 { .compatible = "renesas,iic-r8a7792", .data = &fast_clock_dt_config },
3275 @@ -808,6 +809,7 @@ static const struct of_device_id sh_mobile_i2c_dt_ids[] = {
3276 { .compatible = "renesas,rcar-gen2-iic", .data = &fast_clock_dt_config },
3277 { .compatible = "renesas,iic-r8a7795", .data = &fast_clock_dt_config },
3278 { .compatible = "renesas,rcar-gen3-iic", .data = &fast_clock_dt_config },
3279 + { .compatible = "renesas,iic-r8a77990", .data = &fast_clock_dt_config },
3280 { .compatible = "renesas,iic-sh73a0", .data = &fast_clock_dt_config },
3281 { .compatible = "renesas,rmobile-iic", .data = &default_dt_config },
3282 {},
3283 diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
3284 index af53a1084ee5..471caa5323e4 100644
3285 --- a/drivers/iio/accel/kxcjk-1013.c
3286 +++ b/drivers/iio/accel/kxcjk-1013.c
3287 @@ -1490,6 +1490,7 @@ static const struct acpi_device_id kx_acpi_match[] = {
3288 {"KXCJ1008", KXCJ91008},
3289 {"KXCJ9000", KXCJ91008},
3290 {"KIOX000A", KXCJ91008},
3291 + {"KIOX010A", KXCJ91008}, /* KXCJ91008 inside the display of a 2-in-1 */
3292 {"KXTJ1009", KXTJ21009},
3293 {"SMO8500", KXCJ91008},
3294 { },
3295 diff --git a/drivers/iio/adc/meson_saradc.c b/drivers/iio/adc/meson_saradc.c
3296 index 028ccd218f82..ba4b42429a2a 100644
3297 --- a/drivers/iio/adc/meson_saradc.c
3298 +++ b/drivers/iio/adc/meson_saradc.c
3299 @@ -587,8 +587,11 @@ static int meson_sar_adc_clk_init(struct iio_dev *indio_dev,
3300 struct clk_init_data init;
3301 const char *clk_parents[1];
3302
3303 - init.name = devm_kasprintf(&indio_dev->dev, GFP_KERNEL, "%pOF#adc_div",
3304 - indio_dev->dev.of_node);
3305 + init.name = devm_kasprintf(&indio_dev->dev, GFP_KERNEL, "%s#adc_div",
3306 + dev_name(indio_dev->dev.parent));
3307 + if (!init.name)
3308 + return -ENOMEM;
3309 +
3310 init.flags = 0;
3311 init.ops = &clk_divider_ops;
3312 clk_parents[0] = __clk_get_name(priv->clkin);
3313 @@ -606,8 +609,11 @@ static int meson_sar_adc_clk_init(struct iio_dev *indio_dev,
3314 if (WARN_ON(IS_ERR(priv->adc_div_clk)))
3315 return PTR_ERR(priv->adc_div_clk);
3316
3317 - init.name = devm_kasprintf(&indio_dev->dev, GFP_KERNEL, "%pOF#adc_en",
3318 - indio_dev->dev.of_node);
3319 + init.name = devm_kasprintf(&indio_dev->dev, GFP_KERNEL, "%s#adc_en",
3320 + dev_name(indio_dev->dev.parent));
3321 + if (!init.name)
3322 + return -ENOMEM;
3323 +
3324 init.flags = CLK_SET_RATE_PARENT;
3325 init.ops = &clk_gate_ops;
3326 clk_parents[0] = __clk_get_name(priv->adc_div_clk);
3327 diff --git a/drivers/infiniband/core/core_priv.h b/drivers/infiniband/core/core_priv.h
3328 index bb9007a0cca7..d97d39a7537c 100644
3329 --- a/drivers/infiniband/core/core_priv.h
3330 +++ b/drivers/infiniband/core/core_priv.h
3331 @@ -296,6 +296,7 @@ static inline int ib_mad_enforce_security(struct ib_mad_agent_private *map,
3332 #endif
3333
3334 struct ib_device *ib_device_get_by_index(u32 ifindex);
3335 +void ib_device_put(struct ib_device *device);
3336 /* RDMA device netlink */
3337 void nldev_init(void);
3338 void nldev_exit(void);
3339 diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
3340 index 87eb4f2cdd7d..0027b0d79b09 100644
3341 --- a/drivers/infiniband/core/device.c
3342 +++ b/drivers/infiniband/core/device.c
3343 @@ -145,7 +145,8 @@ static struct ib_device *__ib_device_get_by_index(u32 index)
3344 }
3345
3346 /*
3347 - * Caller is responsible to return refrerence count by calling put_device()
3348 + * Caller must perform ib_device_put() to return the device reference count
3349 + * when ib_device_get_by_index() returns valid device pointer.
3350 */
3351 struct ib_device *ib_device_get_by_index(u32 index)
3352 {
3353 @@ -153,13 +154,21 @@ struct ib_device *ib_device_get_by_index(u32 index)
3354
3355 down_read(&lists_rwsem);
3356 device = __ib_device_get_by_index(index);
3357 - if (device)
3358 - get_device(&device->dev);
3359 -
3360 + if (device) {
3361 + /* Do not return a device if unregistration has started. */
3362 + if (!refcount_inc_not_zero(&device->refcount))
3363 + device = NULL;
3364 + }
3365 up_read(&lists_rwsem);
3366 return device;
3367 }
3368
3369 +void ib_device_put(struct ib_device *device)
3370 +{
3371 + if (refcount_dec_and_test(&device->refcount))
3372 + complete(&device->unreg_completion);
3373 +}
3374 +
3375 static struct ib_device *__ib_device_get_by_name(const char *name)
3376 {
3377 struct ib_device *device;
3378 @@ -293,6 +302,8 @@ struct ib_device *ib_alloc_device(size_t size)
3379 rwlock_init(&device->client_data_lock);
3380 INIT_LIST_HEAD(&device->client_data_list);
3381 INIT_LIST_HEAD(&device->port_list);
3382 + refcount_set(&device->refcount, 1);
3383 + init_completion(&device->unreg_completion);
3384
3385 return device;
3386 }
3387 @@ -641,6 +652,13 @@ void ib_unregister_device(struct ib_device *device)
3388 struct ib_client_data *context, *tmp;
3389 unsigned long flags;
3390
3391 + /*
3392 + * Wait for all netlink command callers to finish working on the
3393 + * device.
3394 + */
3395 + ib_device_put(device);
3396 + wait_for_completion(&device->unreg_completion);
3397 +
3398 mutex_lock(&device_mutex);
3399
3400 down_write(&lists_rwsem);
3401 diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c
3402 index ff6468e7fe79..77a0f1e1576f 100644
3403 --- a/drivers/infiniband/core/nldev.c
3404 +++ b/drivers/infiniband/core/nldev.c
3405 @@ -632,13 +632,13 @@ static int nldev_get_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
3406
3407 nlmsg_end(msg, nlh);
3408
3409 - put_device(&device->dev);
3410 + ib_device_put(device);
3411 return rdma_nl_unicast(msg, NETLINK_CB(skb).portid);
3412
3413 err_free:
3414 nlmsg_free(msg);
3415 err:
3416 - put_device(&device->dev);
3417 + ib_device_put(device);
3418 return err;
3419 }
3420
3421 @@ -668,7 +668,7 @@ static int nldev_set_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
3422 err = ib_device_rename(device, name);
3423 }
3424
3425 - put_device(&device->dev);
3426 + ib_device_put(device);
3427 return err;
3428 }
3429
3430 @@ -752,14 +752,14 @@ static int nldev_port_get_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
3431 goto err_free;
3432
3433 nlmsg_end(msg, nlh);
3434 - put_device(&device->dev);
3435 + ib_device_put(device);
3436
3437 return rdma_nl_unicast(msg, NETLINK_CB(skb).portid);
3438
3439 err_free:
3440 nlmsg_free(msg);
3441 err:
3442 - put_device(&device->dev);
3443 + ib_device_put(device);
3444 return err;
3445 }
3446
3447 @@ -816,7 +816,7 @@ static int nldev_port_get_dumpit(struct sk_buff *skb,
3448 }
3449
3450 out:
3451 - put_device(&device->dev);
3452 + ib_device_put(device);
3453 cb->args[0] = idx;
3454 return skb->len;
3455 }
3456 @@ -855,13 +855,13 @@ static int nldev_res_get_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
3457 goto err_free;
3458
3459 nlmsg_end(msg, nlh);
3460 - put_device(&device->dev);
3461 + ib_device_put(device);
3462 return rdma_nl_unicast(msg, NETLINK_CB(skb).portid);
3463
3464 err_free:
3465 nlmsg_free(msg);
3466 err:
3467 - put_device(&device->dev);
3468 + ib_device_put(device);
3469 return ret;
3470 }
3471
3472 @@ -1054,7 +1054,7 @@ next: idx++;
3473 if (!filled)
3474 goto err;
3475
3476 - put_device(&device->dev);
3477 + ib_device_put(device);
3478 return skb->len;
3479
3480 res_err:
3481 @@ -1065,7 +1065,7 @@ err:
3482 nlmsg_cancel(skb, nlh);
3483
3484 err_index:
3485 - put_device(&device->dev);
3486 + ib_device_put(device);
3487 return ret;
3488 }
3489
3490 diff --git a/drivers/infiniband/hw/hfi1/rc.c b/drivers/infiniband/hw/hfi1/rc.c
3491 index 188aa4f686a0..ea3aac264df9 100644
3492 --- a/drivers/infiniband/hw/hfi1/rc.c
3493 +++ b/drivers/infiniband/hw/hfi1/rc.c
3494 @@ -1157,6 +1157,7 @@ void hfi1_rc_send_complete(struct rvt_qp *qp, struct hfi1_opa_header *opah)
3495 if (cmp_psn(wqe->lpsn, qp->s_sending_psn) >= 0 &&
3496 cmp_psn(qp->s_sending_psn, qp->s_sending_hpsn) <= 0)
3497 break;
3498 + rvt_qp_wqe_unreserve(qp, wqe);
3499 s_last = qp->s_last;
3500 trace_hfi1_qp_send_completion(qp, wqe, s_last);
3501 if (++s_last >= qp->s_size)
3502 @@ -1209,6 +1210,7 @@ static struct rvt_swqe *do_rc_completion(struct rvt_qp *qp,
3503 u32 s_last;
3504
3505 rvt_put_swqe(wqe);
3506 + rvt_qp_wqe_unreserve(qp, wqe);
3507 s_last = qp->s_last;
3508 trace_hfi1_qp_send_completion(qp, wqe, s_last);
3509 if (++s_last >= qp->s_size)
3510 diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
3511 index 1167ff0416cf..325f3bad118b 100644
3512 --- a/drivers/iommu/amd_iommu.c
3513 +++ b/drivers/iommu/amd_iommu.c
3514 @@ -438,7 +438,14 @@ static int iommu_init_device(struct device *dev)
3515
3516 dev_data->alias = get_alias(dev);
3517
3518 - if (dev_is_pci(dev) && pci_iommuv2_capable(to_pci_dev(dev))) {
3519 + /*
3520 + * By default we use passthrough mode for IOMMUv2 capable device.
3521 + * But if amd_iommu=force_isolation is set (e.g. to debug DMA to
3522 + * invalid address), we ignore the capability for the device so
3523 + * it'll be forced to go into translation mode.
3524 + */
3525 + if ((iommu_pass_through || !amd_iommu_force_isolation) &&
3526 + dev_is_pci(dev) && pci_iommuv2_capable(to_pci_dev(dev))) {
3527 struct amd_iommu *iommu;
3528
3529 iommu = amd_iommu_rlookup_table[dev_data->devid];
3530 diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
3531 index 71eda422c926..11f528e727a1 100644
3532 --- a/drivers/iommu/arm-smmu-v3.c
3533 +++ b/drivers/iommu/arm-smmu-v3.c
3534 @@ -576,7 +576,11 @@ struct arm_smmu_device {
3535
3536 struct arm_smmu_strtab_cfg strtab_cfg;
3537
3538 - u32 sync_count;
3539 + /* Hi16xx adds an extra 32 bits of goodness to its MSI payload */
3540 + union {
3541 + u32 sync_count;
3542 + u64 padding;
3543 + };
3544
3545 /* IOMMU core code handle */
3546 struct iommu_device iommu;
3547 @@ -675,7 +679,13 @@ static void queue_inc_cons(struct arm_smmu_queue *q)
3548 u32 cons = (Q_WRP(q, q->cons) | Q_IDX(q, q->cons)) + 1;
3549
3550 q->cons = Q_OVF(q, q->cons) | Q_WRP(q, cons) | Q_IDX(q, cons);
3551 - writel(q->cons, q->cons_reg);
3552 +
3553 + /*
3554 + * Ensure that all CPU accesses (reads and writes) to the queue
3555 + * are complete before we update the cons pointer.
3556 + */
3557 + mb();
3558 + writel_relaxed(q->cons, q->cons_reg);
3559 }
3560
3561 static int queue_sync_prod(struct arm_smmu_queue *q)
3562 diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
3563 index 5a28ae892504..e23aa7f6c4ad 100644
3564 --- a/drivers/iommu/arm-smmu.c
3565 +++ b/drivers/iommu/arm-smmu.c
3566 @@ -119,6 +119,7 @@ enum arm_smmu_implementation {
3567 GENERIC_SMMU,
3568 ARM_MMU500,
3569 CAVIUM_SMMUV2,
3570 + QCOM_SMMUV2,
3571 };
3572
3573 struct arm_smmu_s2cr {
3574 @@ -1954,6 +1955,7 @@ ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU);
3575 ARM_SMMU_MATCH_DATA(arm_mmu401, ARM_SMMU_V1_64K, GENERIC_SMMU);
3576 ARM_SMMU_MATCH_DATA(arm_mmu500, ARM_SMMU_V2, ARM_MMU500);
3577 ARM_SMMU_MATCH_DATA(cavium_smmuv2, ARM_SMMU_V2, CAVIUM_SMMUV2);
3578 +ARM_SMMU_MATCH_DATA(qcom_smmuv2, ARM_SMMU_V2, QCOM_SMMUV2);
3579
3580 static const struct of_device_id arm_smmu_of_match[] = {
3581 { .compatible = "arm,smmu-v1", .data = &smmu_generic_v1 },
3582 @@ -1962,6 +1964,7 @@ static const struct of_device_id arm_smmu_of_match[] = {
3583 { .compatible = "arm,mmu-401", .data = &arm_mmu401 },
3584 { .compatible = "arm,mmu-500", .data = &arm_mmu500 },
3585 { .compatible = "cavium,smmu-v2", .data = &cavium_smmuv2 },
3586 + { .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 },
3587 { },
3588 };
3589 MODULE_DEVICE_TABLE(of, arm_smmu_of_match);
3590 diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
3591 index 7f2a45445b00..350f999d205b 100644
3592 --- a/drivers/irqchip/irq-gic-v3-its.c
3593 +++ b/drivers/irqchip/irq-gic-v3-its.c
3594 @@ -97,9 +97,14 @@ struct its_device;
3595 * The ITS structure - contains most of the infrastructure, with the
3596 * top-level MSI domain, the command queue, the collections, and the
3597 * list of devices writing to it.
3598 + *
3599 + * dev_alloc_lock has to be taken for device allocations, while the
3600 + * spinlock must be taken to parse data structures such as the device
3601 + * list.
3602 */
3603 struct its_node {
3604 raw_spinlock_t lock;
3605 + struct mutex dev_alloc_lock;
3606 struct list_head entry;
3607 void __iomem *base;
3608 phys_addr_t phys_base;
3609 @@ -156,6 +161,7 @@ struct its_device {
3610 void *itt;
3611 u32 nr_ites;
3612 u32 device_id;
3613 + bool shared;
3614 };
3615
3616 static struct {
3617 @@ -2422,6 +2428,7 @@ static int its_msi_prepare(struct irq_domain *domain, struct device *dev,
3618 struct its_device *its_dev;
3619 struct msi_domain_info *msi_info;
3620 u32 dev_id;
3621 + int err = 0;
3622
3623 /*
3624 * We ignore "dev" entierely, and rely on the dev_id that has
3625 @@ -2444,6 +2451,7 @@ static int its_msi_prepare(struct irq_domain *domain, struct device *dev,
3626 return -EINVAL;
3627 }
3628
3629 + mutex_lock(&its->dev_alloc_lock);
3630 its_dev = its_find_device(its, dev_id);
3631 if (its_dev) {
3632 /*
3633 @@ -2451,18 +2459,22 @@ static int its_msi_prepare(struct irq_domain *domain, struct device *dev,
3634 * another alias (PCI bridge of some sort). No need to
3635 * create the device.
3636 */
3637 + its_dev->shared = true;
3638 pr_debug("Reusing ITT for devID %x\n", dev_id);
3639 goto out;
3640 }
3641
3642 its_dev = its_create_device(its, dev_id, nvec, true);
3643 - if (!its_dev)
3644 - return -ENOMEM;
3645 + if (!its_dev) {
3646 + err = -ENOMEM;
3647 + goto out;
3648 + }
3649
3650 pr_debug("ITT %d entries, %d bits\n", nvec, ilog2(nvec));
3651 out:
3652 + mutex_unlock(&its->dev_alloc_lock);
3653 info->scratchpad[0].ptr = its_dev;
3654 - return 0;
3655 + return err;
3656 }
3657
3658 static struct msi_domain_ops its_msi_domain_ops = {
3659 @@ -2566,6 +2578,7 @@ static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq,
3660 {
3661 struct irq_data *d = irq_domain_get_irq_data(domain, virq);
3662 struct its_device *its_dev = irq_data_get_irq_chip_data(d);
3663 + struct its_node *its = its_dev->its;
3664 int i;
3665
3666 for (i = 0; i < nr_irqs; i++) {
3667 @@ -2580,8 +2593,14 @@ static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq,
3668 irq_domain_reset_irq_data(data);
3669 }
3670
3671 - /* If all interrupts have been freed, start mopping the floor */
3672 - if (bitmap_empty(its_dev->event_map.lpi_map,
3673 + mutex_lock(&its->dev_alloc_lock);
3674 +
3675 + /*
3676 + * If all interrupts have been freed, start mopping the
3677 + * floor. This is conditionned on the device not being shared.
3678 + */
3679 + if (!its_dev->shared &&
3680 + bitmap_empty(its_dev->event_map.lpi_map,
3681 its_dev->event_map.nr_lpis)) {
3682 its_lpi_free(its_dev->event_map.lpi_map,
3683 its_dev->event_map.lpi_base,
3684 @@ -2593,6 +2612,8 @@ static void its_irq_domain_free(struct irq_domain *domain, unsigned int virq,
3685 its_free_device(its_dev);
3686 }
3687
3688 + mutex_unlock(&its->dev_alloc_lock);
3689 +
3690 irq_domain_free_irqs_parent(domain, virq, nr_irqs);
3691 }
3692
3693 @@ -3517,6 +3538,7 @@ static int __init its_probe_one(struct resource *res,
3694 }
3695
3696 raw_spin_lock_init(&its->lock);
3697 + mutex_init(&its->dev_alloc_lock);
3698 INIT_LIST_HEAD(&its->entry);
3699 INIT_LIST_HEAD(&its->its_device_list);
3700 typer = gic_read_typer(its_base + GITS_TYPER);
3701 diff --git a/drivers/isdn/hisax/hfc_pci.c b/drivers/isdn/hisax/hfc_pci.c
3702 index ea0e4c6de3fb..0109e0e8bcb6 100644
3703 --- a/drivers/isdn/hisax/hfc_pci.c
3704 +++ b/drivers/isdn/hisax/hfc_pci.c
3705 @@ -1170,11 +1170,13 @@ HFCPCI_l1hw(struct PStack *st, int pr, void *arg)
3706 if (cs->debug & L1_DEB_LAPD)
3707 debugl1(cs, "-> PH_REQUEST_PULL");
3708 #endif
3709 + spin_lock_irqsave(&cs->lock, flags);
3710 if (!cs->tx_skb) {
3711 test_and_clear_bit(FLG_L1_PULL_REQ, &st->l1.Flags);
3712 st->l1.l1l2(st, PH_PULL | CONFIRM, NULL);
3713 } else
3714 test_and_set_bit(FLG_L1_PULL_REQ, &st->l1.Flags);
3715 + spin_unlock_irqrestore(&cs->lock, flags);
3716 break;
3717 case (HW_RESET | REQUEST):
3718 spin_lock_irqsave(&cs->lock, flags);
3719 diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
3720 index efb976a863d2..73ab3cf26868 100644
3721 --- a/drivers/lightnvm/core.c
3722 +++ b/drivers/lightnvm/core.c
3723 @@ -974,7 +974,7 @@ static int nvm_get_bb_meta(struct nvm_dev *dev, sector_t slba,
3724 struct ppa_addr ppa;
3725 u8 *blks;
3726 int ch, lun, nr_blks;
3727 - int ret;
3728 + int ret = 0;
3729
3730 ppa.ppa = slba;
3731 ppa = dev_to_generic_addr(dev, ppa);
3732 diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c
3733 index 6944aac43b01..247112e1db94 100644
3734 --- a/drivers/lightnvm/pblk-core.c
3735 +++ b/drivers/lightnvm/pblk-core.c
3736 @@ -1295,15 +1295,22 @@ int pblk_line_recov_alloc(struct pblk *pblk, struct pblk_line *line)
3737
3738 ret = pblk_line_alloc_bitmaps(pblk, line);
3739 if (ret)
3740 - return ret;
3741 + goto fail;
3742
3743 if (!pblk_line_init_bb(pblk, line, 0)) {
3744 - list_add(&line->list, &l_mg->free_list);
3745 - return -EINTR;
3746 + ret = -EINTR;
3747 + goto fail;
3748 }
3749
3750 pblk_rl_free_lines_dec(&pblk->rl, line, true);
3751 return 0;
3752 +
3753 +fail:
3754 + spin_lock(&l_mg->free_lock);
3755 + list_add(&line->list, &l_mg->free_list);
3756 + spin_unlock(&l_mg->free_lock);
3757 +
3758 + return ret;
3759 }
3760
3761 void pblk_line_recov_close(struct pblk *pblk, struct pblk_line *line)
3762 diff --git a/drivers/lightnvm/pblk-write.c b/drivers/lightnvm/pblk-write.c
3763 index fa8726493b39..3ddd16f47106 100644
3764 --- a/drivers/lightnvm/pblk-write.c
3765 +++ b/drivers/lightnvm/pblk-write.c
3766 @@ -148,9 +148,11 @@ static void pblk_prepare_resubmit(struct pblk *pblk, unsigned int sentry,
3767 w_ctx = &entry->w_ctx;
3768
3769 /* Check if the lba has been overwritten */
3770 - ppa_l2p = pblk_trans_map_get(pblk, w_ctx->lba);
3771 - if (!pblk_ppa_comp(ppa_l2p, entry->cacheline))
3772 - w_ctx->lba = ADDR_EMPTY;
3773 + if (w_ctx->lba != ADDR_EMPTY) {
3774 + ppa_l2p = pblk_trans_map_get(pblk, w_ctx->lba);
3775 + if (!pblk_ppa_comp(ppa_l2p, entry->cacheline))
3776 + w_ctx->lba = ADDR_EMPTY;
3777 + }
3778
3779 /* Mark up the entry as submittable again */
3780 flags = READ_ONCE(w_ctx->flags);
3781 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
3782 index b98e746e7fc4..12cf8a04e839 100644
3783 --- a/drivers/md/raid10.c
3784 +++ b/drivers/md/raid10.c
3785 @@ -1209,7 +1209,9 @@ static void raid10_read_request(struct mddev *mddev, struct bio *bio,
3786 struct bio *split = bio_split(bio, max_sectors,
3787 gfp, &conf->bio_split);
3788 bio_chain(split, bio);
3789 + allow_barrier(conf);
3790 generic_make_request(bio);
3791 + wait_barrier(conf);
3792 bio = split;
3793 r10_bio->master_bio = bio;
3794 r10_bio->sectors = max_sectors;
3795 @@ -1514,7 +1516,9 @@ retry_write:
3796 struct bio *split = bio_split(bio, r10_bio->sectors,
3797 GFP_NOIO, &conf->bio_split);
3798 bio_chain(split, bio);
3799 + allow_barrier(conf);
3800 generic_make_request(bio);
3801 + wait_barrier(conf);
3802 bio = split;
3803 r10_bio->master_bio = bio;
3804 }
3805 diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
3806 index 704af210e270..421e2fd2481d 100644
3807 --- a/drivers/media/i2c/Kconfig
3808 +++ b/drivers/media/i2c/Kconfig
3809 @@ -61,6 +61,7 @@ config VIDEO_TDA1997X
3810 depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
3811 depends on SND_SOC
3812 select SND_PCM
3813 + select HDMI
3814 ---help---
3815 V4L2 subdevice driver for the NXP TDA1997x HDMI receivers.
3816
3817 @@ -610,6 +611,7 @@ config VIDEO_IMX274
3818 tristate "Sony IMX274 sensor support"
3819 depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
3820 depends on MEDIA_CAMERA_SUPPORT
3821 + select REGMAP_I2C
3822 ---help---
3823 This is a V4L2 sensor driver for the Sony IMX274
3824 CMOS image sensor.
3825 diff --git a/drivers/media/i2c/ad9389b.c b/drivers/media/i2c/ad9389b.c
3826 index 5b008b0002c0..aa8b04cfed0f 100644
3827 --- a/drivers/media/i2c/ad9389b.c
3828 +++ b/drivers/media/i2c/ad9389b.c
3829 @@ -578,7 +578,7 @@ static const struct v4l2_dv_timings_cap ad9389b_timings_cap = {
3830 .type = V4L2_DV_BT_656_1120,
3831 /* keep this initialization for compatibility with GCC < 4.4.6 */
3832 .reserved = { 0 },
3833 - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000,
3834 + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000,
3835 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
3836 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
3837 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
3838 diff --git a/drivers/media/i2c/adv7511.c b/drivers/media/i2c/adv7511.c
3839 index f3899cc84e27..88349b5053cc 100644
3840 --- a/drivers/media/i2c/adv7511.c
3841 +++ b/drivers/media/i2c/adv7511.c
3842 @@ -130,7 +130,7 @@ static const struct v4l2_dv_timings_cap adv7511_timings_cap = {
3843 .type = V4L2_DV_BT_656_1120,
3844 /* keep this initialization for compatibility with GCC < 4.4.6 */
3845 .reserved = { 0 },
3846 - V4L2_INIT_BT_TIMINGS(0, ADV7511_MAX_WIDTH, 0, ADV7511_MAX_HEIGHT,
3847 + V4L2_INIT_BT_TIMINGS(640, ADV7511_MAX_WIDTH, 350, ADV7511_MAX_HEIGHT,
3848 ADV7511_MIN_PIXELCLOCK, ADV7511_MAX_PIXELCLOCK,
3849 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
3850 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
3851 diff --git a/drivers/media/i2c/adv7604.c b/drivers/media/i2c/adv7604.c
3852 index 9eb7c70a7712..ff28f5692986 100644
3853 --- a/drivers/media/i2c/adv7604.c
3854 +++ b/drivers/media/i2c/adv7604.c
3855 @@ -766,7 +766,7 @@ static const struct v4l2_dv_timings_cap adv7604_timings_cap_analog = {
3856 .type = V4L2_DV_BT_656_1120,
3857 /* keep this initialization for compatibility with GCC < 4.4.6 */
3858 .reserved = { 0 },
3859 - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000,
3860 + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000,
3861 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
3862 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
3863 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
3864 @@ -777,7 +777,7 @@ static const struct v4l2_dv_timings_cap adv76xx_timings_cap_digital = {
3865 .type = V4L2_DV_BT_656_1120,
3866 /* keep this initialization for compatibility with GCC < 4.4.6 */
3867 .reserved = { 0 },
3868 - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 225000000,
3869 + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 225000000,
3870 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
3871 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
3872 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
3873 diff --git a/drivers/media/i2c/adv7842.c b/drivers/media/i2c/adv7842.c
3874 index 4721d49dcf0f..5305c3ad80e6 100644
3875 --- a/drivers/media/i2c/adv7842.c
3876 +++ b/drivers/media/i2c/adv7842.c
3877 @@ -663,7 +663,7 @@ static const struct v4l2_dv_timings_cap adv7842_timings_cap_analog = {
3878 .type = V4L2_DV_BT_656_1120,
3879 /* keep this initialization for compatibility with GCC < 4.4.6 */
3880 .reserved = { 0 },
3881 - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 170000000,
3882 + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 170000000,
3883 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
3884 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
3885 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
3886 @@ -674,7 +674,7 @@ static const struct v4l2_dv_timings_cap adv7842_timings_cap_digital = {
3887 .type = V4L2_DV_BT_656_1120,
3888 /* keep this initialization for compatibility with GCC < 4.4.6 */
3889 .reserved = { 0 },
3890 - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1200, 25000000, 225000000,
3891 + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 25000000, 225000000,
3892 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
3893 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
3894 V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
3895 diff --git a/drivers/media/i2c/tc358743.c b/drivers/media/i2c/tc358743.c
3896 index 41d470d9ca94..00dc930e049f 100644
3897 --- a/drivers/media/i2c/tc358743.c
3898 +++ b/drivers/media/i2c/tc358743.c
3899 @@ -59,7 +59,7 @@ static const struct v4l2_dv_timings_cap tc358743_timings_cap = {
3900 /* keep this initialization for compatibility with GCC < 4.4.6 */
3901 .reserved = { 0 },
3902 /* Pixel clock from REF_01 p. 20. Min/max height/width are unknown */
3903 - V4L2_INIT_BT_TIMINGS(1, 10000, 1, 10000, 0, 165000000,
3904 + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1200, 13000000, 165000000,
3905 V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
3906 V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
3907 V4L2_DV_BT_CAP_PROGRESSIVE |
3908 diff --git a/drivers/media/i2c/ths8200.c b/drivers/media/i2c/ths8200.c
3909 index 498ad2368cbc..f5ee28058ea2 100644
3910 --- a/drivers/media/i2c/ths8200.c
3911 +++ b/drivers/media/i2c/ths8200.c
3912 @@ -49,7 +49,7 @@ static const struct v4l2_dv_timings_cap ths8200_timings_cap = {
3913 .type = V4L2_DV_BT_656_1120,
3914 /* keep this initialization for compatibility with GCC < 4.4.6 */
3915 .reserved = { 0 },
3916 - V4L2_INIT_BT_TIMINGS(0, 1920, 0, 1080, 25000000, 148500000,
3917 + V4L2_INIT_BT_TIMINGS(640, 1920, 350, 1080, 25000000, 148500000,
3918 V4L2_DV_BT_STD_CEA861, V4L2_DV_BT_CAP_PROGRESSIVE)
3919 };
3920
3921 diff --git a/drivers/media/i2c/video-i2c.c b/drivers/media/i2c/video-i2c.c
3922 index 4d49af86c15e..ec0758dca2fc 100644
3923 --- a/drivers/media/i2c/video-i2c.c
3924 +++ b/drivers/media/i2c/video-i2c.c
3925 @@ -510,7 +510,12 @@ static const struct v4l2_ioctl_ops video_i2c_ioctl_ops = {
3926
3927 static void video_i2c_release(struct video_device *vdev)
3928 {
3929 - kfree(video_get_drvdata(vdev));
3930 + struct video_i2c_data *data = video_get_drvdata(vdev);
3931 +
3932 + v4l2_device_unregister(&data->v4l2_dev);
3933 + mutex_destroy(&data->lock);
3934 + mutex_destroy(&data->queue_lock);
3935 + kfree(data);
3936 }
3937
3938 static int video_i2c_probe(struct i2c_client *client,
3939 @@ -608,10 +613,6 @@ static int video_i2c_remove(struct i2c_client *client)
3940 struct video_i2c_data *data = i2c_get_clientdata(client);
3941
3942 video_unregister_device(&data->vdev);
3943 - v4l2_device_unregister(&data->v4l2_dev);
3944 -
3945 - mutex_destroy(&data->lock);
3946 - mutex_destroy(&data->queue_lock);
3947
3948 return 0;
3949 }
3950 diff --git a/drivers/media/platform/coda/coda-bit.c b/drivers/media/platform/coda/coda-bit.c
3951 index d26c2d85a009..d20d3df5778b 100644
3952 --- a/drivers/media/platform/coda/coda-bit.c
3953 +++ b/drivers/media/platform/coda/coda-bit.c
3954 @@ -991,16 +991,15 @@ static int coda_start_encoding(struct coda_ctx *ctx)
3955 else
3956 coda_write(dev, CODA_STD_H264,
3957 CODA_CMD_ENC_SEQ_COD_STD);
3958 - if (ctx->params.h264_deblk_enabled) {
3959 - value = ((ctx->params.h264_deblk_alpha &
3960 - CODA_264PARAM_DEBLKFILTEROFFSETALPHA_MASK) <<
3961 - CODA_264PARAM_DEBLKFILTEROFFSETALPHA_OFFSET) |
3962 - ((ctx->params.h264_deblk_beta &
3963 - CODA_264PARAM_DEBLKFILTEROFFSETBETA_MASK) <<
3964 - CODA_264PARAM_DEBLKFILTEROFFSETBETA_OFFSET);
3965 - } else {
3966 - value = 1 << CODA_264PARAM_DISABLEDEBLK_OFFSET;
3967 - }
3968 + value = ((ctx->params.h264_disable_deblocking_filter_idc &
3969 + CODA_264PARAM_DISABLEDEBLK_MASK) <<
3970 + CODA_264PARAM_DISABLEDEBLK_OFFSET) |
3971 + ((ctx->params.h264_slice_alpha_c0_offset_div2 &
3972 + CODA_264PARAM_DEBLKFILTEROFFSETALPHA_MASK) <<
3973 + CODA_264PARAM_DEBLKFILTEROFFSETALPHA_OFFSET) |
3974 + ((ctx->params.h264_slice_beta_offset_div2 &
3975 + CODA_264PARAM_DEBLKFILTEROFFSETBETA_MASK) <<
3976 + CODA_264PARAM_DEBLKFILTEROFFSETBETA_OFFSET);
3977 coda_write(dev, value, CODA_CMD_ENC_SEQ_264_PARA);
3978 break;
3979 case V4L2_PIX_FMT_JPEG:
3980 diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/platform/coda/coda-common.c
3981 index 2848ea5f464d..d0b36d6eb86e 100644
3982 --- a/drivers/media/platform/coda/coda-common.c
3983 +++ b/drivers/media/platform/coda/coda-common.c
3984 @@ -1792,14 +1792,13 @@ static int coda_s_ctrl(struct v4l2_ctrl *ctrl)
3985 ctx->params.h264_max_qp = ctrl->val;
3986 break;
3987 case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA:
3988 - ctx->params.h264_deblk_alpha = ctrl->val;
3989 + ctx->params.h264_slice_alpha_c0_offset_div2 = ctrl->val;
3990 break;
3991 case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA:
3992 - ctx->params.h264_deblk_beta = ctrl->val;
3993 + ctx->params.h264_slice_beta_offset_div2 = ctrl->val;
3994 break;
3995 case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE:
3996 - ctx->params.h264_deblk_enabled = (ctrl->val ==
3997 - V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED);
3998 + ctx->params.h264_disable_deblocking_filter_idc = ctrl->val;
3999 break;
4000 case V4L2_CID_MPEG_VIDEO_H264_PROFILE:
4001 /* TODO: switch between baseline and constrained baseline */
4002 @@ -1881,13 +1880,13 @@ static void coda_encode_ctrls(struct coda_ctx *ctx)
4003 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
4004 V4L2_CID_MPEG_VIDEO_H264_MAX_QP, 0, 51, 1, 51);
4005 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
4006 - V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA, 0, 15, 1, 0);
4007 + V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA, -6, 6, 1, 0);
4008 v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,
4009 - V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA, 0, 15, 1, 0);
4010 + V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA, -6, 6, 1, 0);
4011 v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops,
4012 V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE,
4013 - V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED, 0x0,
4014 - V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED);
4015 + V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY,
4016 + 0x0, V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_ENABLED);
4017 v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops,
4018 V4L2_CID_MPEG_VIDEO_H264_PROFILE,
4019 V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE, 0x0,
4020 diff --git a/drivers/media/platform/coda/coda.h b/drivers/media/platform/coda/coda.h
4021 index 19ac0b9dc6eb..2469ca1dc598 100644
4022 --- a/drivers/media/platform/coda/coda.h
4023 +++ b/drivers/media/platform/coda/coda.h
4024 @@ -115,9 +115,9 @@ struct coda_params {
4025 u8 h264_inter_qp;
4026 u8 h264_min_qp;
4027 u8 h264_max_qp;
4028 - u8 h264_deblk_enabled;
4029 - u8 h264_deblk_alpha;
4030 - u8 h264_deblk_beta;
4031 + u8 h264_disable_deblocking_filter_idc;
4032 + s8 h264_slice_alpha_c0_offset_div2;
4033 + s8 h264_slice_beta_offset_div2;
4034 u8 h264_profile_idc;
4035 u8 h264_level_idc;
4036 u8 mpeg4_intra_qp;
4037 diff --git a/drivers/media/platform/coda/coda_regs.h b/drivers/media/platform/coda/coda_regs.h
4038 index 5e7b00a97671..e675e38f3475 100644
4039 --- a/drivers/media/platform/coda/coda_regs.h
4040 +++ b/drivers/media/platform/coda/coda_regs.h
4041 @@ -292,7 +292,7 @@
4042 #define CODA_264PARAM_DEBLKFILTEROFFSETALPHA_OFFSET 8
4043 #define CODA_264PARAM_DEBLKFILTEROFFSETALPHA_MASK 0x0f
4044 #define CODA_264PARAM_DISABLEDEBLK_OFFSET 6
4045 -#define CODA_264PARAM_DISABLEDEBLK_MASK 0x01
4046 +#define CODA_264PARAM_DISABLEDEBLK_MASK 0x03
4047 #define CODA_264PARAM_CONSTRAINEDINTRAPREDFLAG_OFFSET 5
4048 #define CODA_264PARAM_CONSTRAINEDINTRAPREDFLAG_MASK 0x01
4049 #define CODA_264PARAM_CHROMAQPOFFSET_OFFSET 0
4050 diff --git a/drivers/media/platform/davinci/vpbe.c b/drivers/media/platform/davinci/vpbe.c
4051 index 18c035ef84cf..df1ae6b5c854 100644
4052 --- a/drivers/media/platform/davinci/vpbe.c
4053 +++ b/drivers/media/platform/davinci/vpbe.c
4054 @@ -740,7 +740,7 @@ static int vpbe_initialize(struct device *dev, struct vpbe_device *vpbe_dev)
4055 if (ret) {
4056 v4l2_err(&vpbe_dev->v4l2_dev, "Failed to set default output %s",
4057 def_output);
4058 - return ret;
4059 + goto fail_kfree_amp;
4060 }
4061
4062 printk(KERN_NOTICE "Setting default mode to %s\n", def_mode);
4063 @@ -748,12 +748,15 @@ static int vpbe_initialize(struct device *dev, struct vpbe_device *vpbe_dev)
4064 if (ret) {
4065 v4l2_err(&vpbe_dev->v4l2_dev, "Failed to set default mode %s",
4066 def_mode);
4067 - return ret;
4068 + goto fail_kfree_amp;
4069 }
4070 vpbe_dev->initialized = 1;
4071 /* TBD handling of bootargs for default output and mode */
4072 return 0;
4073
4074 +fail_kfree_amp:
4075 + mutex_lock(&vpbe_dev->lock);
4076 + kfree(vpbe_dev->amp);
4077 fail_kfree_encoders:
4078 kfree(vpbe_dev->encoders);
4079 fail_dev_unregister:
4080 diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c
4081 index 3e73e9db781f..7c025045ea90 100644
4082 --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c
4083 +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc_pm.c
4084 @@ -41,25 +41,27 @@ int mtk_vcodec_init_enc_pm(struct mtk_vcodec_dev *mtkdev)
4085 node = of_parse_phandle(dev->of_node, "mediatek,larb", 0);
4086 if (!node) {
4087 mtk_v4l2_err("no mediatek,larb found");
4088 - return -1;
4089 + return -ENODEV;
4090 }
4091 pdev = of_find_device_by_node(node);
4092 + of_node_put(node);
4093 if (!pdev) {
4094 mtk_v4l2_err("no mediatek,larb device found");
4095 - return -1;
4096 + return -ENODEV;
4097 }
4098 pm->larbvenc = &pdev->dev;
4099
4100 node = of_parse_phandle(dev->of_node, "mediatek,larb", 1);
4101 if (!node) {
4102 mtk_v4l2_err("no mediatek,larb found");
4103 - return -1;
4104 + return -ENODEV;
4105 }
4106
4107 pdev = of_find_device_by_node(node);
4108 + of_node_put(node);
4109 if (!pdev) {
4110 mtk_v4l2_err("no mediatek,larb device found");
4111 - return -1;
4112 + return -ENODEV;
4113 }
4114
4115 pm->larbvenclt = &pdev->dev;
4116 diff --git a/drivers/media/platform/vivid/vivid-core.c b/drivers/media/platform/vivid/vivid-core.c
4117 index 626e2b24a403..ec1b1a8ea775 100644
4118 --- a/drivers/media/platform/vivid/vivid-core.c
4119 +++ b/drivers/media/platform/vivid/vivid-core.c
4120 @@ -669,6 +669,8 @@ static int vivid_create_instance(struct platform_device *pdev, int inst)
4121
4122 /* Initialize media device */
4123 strlcpy(dev->mdev.model, VIVID_MODULE_NAME, sizeof(dev->mdev.model));
4124 + snprintf(dev->mdev.bus_info, sizeof(dev->mdev.bus_info),
4125 + "platform:%s-%03d", VIVID_MODULE_NAME, inst);
4126 dev->mdev.dev = &pdev->dev;
4127 media_device_init(&dev->mdev);
4128 dev->mdev.ops = &vivid_media_ops;
4129 diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c
4130 index 877978dbd409..66a174979b3c 100644
4131 --- a/drivers/media/rc/rc-main.c
4132 +++ b/drivers/media/rc/rc-main.c
4133 @@ -1952,6 +1952,8 @@ void rc_unregister_device(struct rc_dev *dev)
4134 rc_free_rx_device(dev);
4135
4136 mutex_lock(&dev->lock);
4137 + if (dev->users && dev->close)
4138 + dev->close(dev);
4139 dev->registered = false;
4140 mutex_unlock(&dev->lock);
4141
4142 diff --git a/drivers/media/v4l2-core/v4l2-device.c b/drivers/media/v4l2-core/v4l2-device.c
4143 index df0ac38c4050..e0ddb9a52bd1 100644
4144 --- a/drivers/media/v4l2-core/v4l2-device.c
4145 +++ b/drivers/media/v4l2-core/v4l2-device.c
4146 @@ -247,6 +247,7 @@ int v4l2_device_register_subdev_nodes(struct v4l2_device *v4l2_dev)
4147
4148 video_set_drvdata(vdev, sd);
4149 strscpy(vdev->name, sd->name, sizeof(vdev->name));
4150 + vdev->dev_parent = sd->dev;
4151 vdev->v4l2_dev = v4l2_dev;
4152 vdev->fops = &v4l2_subdev_fops;
4153 vdev->release = v4l2_device_release_subdev_node;
4154 diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c
4155 index 76382c858c35..1246d69ba187 100644
4156 --- a/drivers/memstick/core/memstick.c
4157 +++ b/drivers/memstick/core/memstick.c
4158 @@ -18,6 +18,7 @@
4159 #include <linux/delay.h>
4160 #include <linux/slab.h>
4161 #include <linux/module.h>
4162 +#include <linux/pm_runtime.h>
4163
4164 #define DRIVER_NAME "memstick"
4165
4166 @@ -436,6 +437,7 @@ static void memstick_check(struct work_struct *work)
4167 struct memstick_dev *card;
4168
4169 dev_dbg(&host->dev, "memstick_check started\n");
4170 + pm_runtime_get_noresume(host->dev.parent);
4171 mutex_lock(&host->lock);
4172 if (!host->card) {
4173 if (memstick_power_on(host))
4174 @@ -479,6 +481,7 @@ out_power_off:
4175 host->set_param(host, MEMSTICK_POWER, MEMSTICK_POWER_OFF);
4176
4177 mutex_unlock(&host->lock);
4178 + pm_runtime_put(host->dev.parent);
4179 dev_dbg(&host->dev, "memstick_check finished\n");
4180 }
4181
4182 diff --git a/drivers/mmc/host/bcm2835.c b/drivers/mmc/host/bcm2835.c
4183 index 0d3b7473bc21..5301302fb531 100644
4184 --- a/drivers/mmc/host/bcm2835.c
4185 +++ b/drivers/mmc/host/bcm2835.c
4186 @@ -286,6 +286,7 @@ static void bcm2835_reset(struct mmc_host *mmc)
4187
4188 if (host->dma_chan)
4189 dmaengine_terminate_sync(host->dma_chan);
4190 + host->dma_chan = NULL;
4191 bcm2835_reset_internal(host);
4192 }
4193
4194 @@ -772,6 +773,8 @@ static void bcm2835_finish_command(struct bcm2835_host *host)
4195
4196 if (!(sdhsts & SDHSTS_CRC7_ERROR) ||
4197 (host->cmd->opcode != MMC_SEND_OP_COND)) {
4198 + u32 edm, fsm;
4199 +
4200 if (sdhsts & SDHSTS_CMD_TIME_OUT) {
4201 host->cmd->error = -ETIMEDOUT;
4202 } else {
4203 @@ -780,6 +783,13 @@ static void bcm2835_finish_command(struct bcm2835_host *host)
4204 bcm2835_dumpregs(host);
4205 host->cmd->error = -EILSEQ;
4206 }
4207 + edm = readl(host->ioaddr + SDEDM);
4208 + fsm = edm & SDEDM_FSM_MASK;
4209 + if (fsm == SDEDM_FSM_READWAIT ||
4210 + fsm == SDEDM_FSM_WRITESTART1)
4211 + /* Kick the FSM out of its wait */
4212 + writel(edm | SDEDM_FORCE_DATA_MODE,
4213 + host->ioaddr + SDEDM);
4214 bcm2835_finish_request(host);
4215 return;
4216 }
4217 @@ -837,6 +847,8 @@ static void bcm2835_timeout(struct work_struct *work)
4218 dev_err(dev, "timeout waiting for hardware interrupt.\n");
4219 bcm2835_dumpregs(host);
4220
4221 + bcm2835_reset(host->mmc);
4222 +
4223 if (host->data) {
4224 host->data->error = -ETIMEDOUT;
4225 bcm2835_finish_data(host);
4226 diff --git a/drivers/mmc/host/jz4740_mmc.c b/drivers/mmc/host/jz4740_mmc.c
4227 index 0c1efd5100b7..44ea452add8e 100644
4228 --- a/drivers/mmc/host/jz4740_mmc.c
4229 +++ b/drivers/mmc/host/jz4740_mmc.c
4230 @@ -983,17 +983,17 @@ static int jz4740_mmc_request_gpios(struct mmc_host *mmc,
4231 if (!pdata->read_only_active_low)
4232 mmc->caps2 |= MMC_CAP2_RO_ACTIVE_HIGH;
4233
4234 - if (gpio_is_valid(pdata->gpio_card_detect)) {
4235 - ret = mmc_gpio_request_cd(mmc, pdata->gpio_card_detect, 0);
4236 - if (ret)
4237 - return ret;
4238 - }
4239 + /*
4240 + * Get optional card detect and write protect GPIOs,
4241 + * only back out on probe deferral.
4242 + */
4243 + ret = mmc_gpiod_request_cd(mmc, "cd", 0, false, 0, NULL);
4244 + if (ret == -EPROBE_DEFER)
4245 + return ret;
4246
4247 - if (gpio_is_valid(pdata->gpio_read_only)) {
4248 - ret = mmc_gpio_request_ro(mmc, pdata->gpio_read_only);
4249 - if (ret)
4250 - return ret;
4251 - }
4252 + ret = mmc_gpiod_request_ro(mmc, "wp", 0, false, 0, NULL);
4253 + if (ret == -EPROBE_DEFER)
4254 + return ret;
4255
4256 return jz4740_mmc_request_gpio(&pdev->dev, pdata->gpio_power,
4257 "MMC read only", true, pdata->power_active_low);
4258 diff --git a/drivers/mmc/host/meson-mx-sdio.c b/drivers/mmc/host/meson-mx-sdio.c
4259 index abe253c262a2..ec980bda071c 100644
4260 --- a/drivers/mmc/host/meson-mx-sdio.c
4261 +++ b/drivers/mmc/host/meson-mx-sdio.c
4262 @@ -596,6 +596,9 @@ static int meson_mx_mmc_register_clks(struct meson_mx_mmc_host *host)
4263 init.name = devm_kasprintf(host->controller_dev, GFP_KERNEL,
4264 "%s#fixed_factor",
4265 dev_name(host->controller_dev));
4266 + if (!init.name)
4267 + return -ENOMEM;
4268 +
4269 init.ops = &clk_fixed_factor_ops;
4270 init.flags = 0;
4271 init.parent_names = &clk_fixed_factor_parent;
4272 @@ -612,6 +615,9 @@ static int meson_mx_mmc_register_clks(struct meson_mx_mmc_host *host)
4273 clk_div_parent = __clk_get_name(host->fixed_factor_clk);
4274 init.name = devm_kasprintf(host->controller_dev, GFP_KERNEL,
4275 "%s#div", dev_name(host->controller_dev));
4276 + if (!init.name)
4277 + return -ENOMEM;
4278 +
4279 init.ops = &clk_divider_ops;
4280 init.flags = CLK_SET_RATE_PARENT;
4281 init.parent_names = &clk_div_parent;
4282 diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c
4283 index 86fc9f022002..d111bf62acd9 100644
4284 --- a/drivers/mmc/host/sdhci-of-esdhc.c
4285 +++ b/drivers/mmc/host/sdhci-of-esdhc.c
4286 @@ -528,8 +528,12 @@ static void esdhc_clock_enable(struct sdhci_host *host, bool enable)
4287 /* Wait max 20 ms */
4288 timeout = ktime_add_ms(ktime_get(), 20);
4289 val = ESDHC_CLOCK_STABLE;
4290 - while (!(sdhci_readl(host, ESDHC_PRSSTAT) & val)) {
4291 - if (ktime_after(ktime_get(), timeout)) {
4292 + while (1) {
4293 + bool timedout = ktime_after(ktime_get(), timeout);
4294 +
4295 + if (sdhci_readl(host, ESDHC_PRSSTAT) & val)
4296 + break;
4297 + if (timedout) {
4298 pr_err("%s: Internal clock never stabilised.\n",
4299 mmc_hostname(host->mmc));
4300 break;
4301 @@ -594,8 +598,12 @@ static void esdhc_of_set_clock(struct sdhci_host *host, unsigned int clock)
4302
4303 /* Wait max 20 ms */
4304 timeout = ktime_add_ms(ktime_get(), 20);
4305 - while (!(sdhci_readl(host, ESDHC_PRSSTAT) & ESDHC_CLOCK_STABLE)) {
4306 - if (ktime_after(ktime_get(), timeout)) {
4307 + while (1) {
4308 + bool timedout = ktime_after(ktime_get(), timeout);
4309 +
4310 + if (sdhci_readl(host, ESDHC_PRSSTAT) & ESDHC_CLOCK_STABLE)
4311 + break;
4312 + if (timedout) {
4313 pr_err("%s: Internal clock never stabilised.\n",
4314 mmc_hostname(host->mmc));
4315 return;
4316 diff --git a/drivers/mmc/host/sdhci-omap.c b/drivers/mmc/host/sdhci-omap.c
4317 index d264391616f9..d02f5cf76b3d 100644
4318 --- a/drivers/mmc/host/sdhci-omap.c
4319 +++ b/drivers/mmc/host/sdhci-omap.c
4320 @@ -220,8 +220,12 @@ static void sdhci_omap_conf_bus_power(struct sdhci_omap_host *omap_host,
4321
4322 /* wait 1ms */
4323 timeout = ktime_add_ms(ktime_get(), SDHCI_OMAP_TIMEOUT);
4324 - while (!(sdhci_omap_readl(omap_host, SDHCI_OMAP_HCTL) & HCTL_SDBP)) {
4325 - if (WARN_ON(ktime_after(ktime_get(), timeout)))
4326 + while (1) {
4327 + bool timedout = ktime_after(ktime_get(), timeout);
4328 +
4329 + if (sdhci_omap_readl(omap_host, SDHCI_OMAP_HCTL) & HCTL_SDBP)
4330 + break;
4331 + if (WARN_ON(timedout))
4332 return;
4333 usleep_range(5, 10);
4334 }
4335 @@ -653,8 +657,12 @@ static void sdhci_omap_init_74_clocks(struct sdhci_host *host, u8 power_mode)
4336
4337 /* wait 1ms */
4338 timeout = ktime_add_ms(ktime_get(), SDHCI_OMAP_TIMEOUT);
4339 - while (!(sdhci_omap_readl(omap_host, SDHCI_OMAP_STAT) & INT_CC_EN)) {
4340 - if (WARN_ON(ktime_after(ktime_get(), timeout)))
4341 + while (1) {
4342 + bool timedout = ktime_after(ktime_get(), timeout);
4343 +
4344 + if (sdhci_omap_readl(omap_host, SDHCI_OMAP_STAT) & INT_CC_EN)
4345 + break;
4346 + if (WARN_ON(timedout))
4347 return;
4348 usleep_range(5, 10);
4349 }
4350 diff --git a/drivers/mmc/host/sdhci-xenon-phy.c b/drivers/mmc/host/sdhci-xenon-phy.c
4351 index 5956e90380e8..5b5eb53a63d2 100644
4352 --- a/drivers/mmc/host/sdhci-xenon-phy.c
4353 +++ b/drivers/mmc/host/sdhci-xenon-phy.c
4354 @@ -357,9 +357,13 @@ static int xenon_emmc_phy_enable_dll(struct sdhci_host *host)
4355
4356 /* Wait max 32 ms */
4357 timeout = ktime_add_ms(ktime_get(), 32);
4358 - while (!(sdhci_readw(host, XENON_SLOT_EXT_PRESENT_STATE) &
4359 - XENON_DLL_LOCK_STATE)) {
4360 - if (ktime_after(ktime_get(), timeout)) {
4361 + while (1) {
4362 + bool timedout = ktime_after(ktime_get(), timeout);
4363 +
4364 + if (sdhci_readw(host, XENON_SLOT_EXT_PRESENT_STATE) &
4365 + XENON_DLL_LOCK_STATE)
4366 + break;
4367 + if (timedout) {
4368 dev_err(mmc_dev(host->mmc), "Wait for DLL Lock time-out\n");
4369 return -ETIMEDOUT;
4370 }
4371 diff --git a/drivers/mmc/host/sdhci-xenon.c b/drivers/mmc/host/sdhci-xenon.c
4372 index 4d0791f6ec23..a0b5089b3274 100644
4373 --- a/drivers/mmc/host/sdhci-xenon.c
4374 +++ b/drivers/mmc/host/sdhci-xenon.c
4375 @@ -34,9 +34,13 @@ static int xenon_enable_internal_clk(struct sdhci_host *host)
4376 sdhci_writel(host, reg, SDHCI_CLOCK_CONTROL);
4377 /* Wait max 20 ms */
4378 timeout = ktime_add_ms(ktime_get(), 20);
4379 - while (!((reg = sdhci_readw(host, SDHCI_CLOCK_CONTROL))
4380 - & SDHCI_CLOCK_INT_STABLE)) {
4381 - if (ktime_after(ktime_get(), timeout)) {
4382 + while (1) {
4383 + bool timedout = ktime_after(ktime_get(), timeout);
4384 +
4385 + reg = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
4386 + if (reg & SDHCI_CLOCK_INT_STABLE)
4387 + break;
4388 + if (timedout) {
4389 dev_err(mmc_dev(host->mmc), "Internal clock never stabilised.\n");
4390 return -ETIMEDOUT;
4391 }
4392 diff --git a/drivers/net/dsa/b53/b53_srab.c b/drivers/net/dsa/b53/b53_srab.c
4393 index 90f514252987..d9c56a779c08 100644
4394 --- a/drivers/net/dsa/b53/b53_srab.c
4395 +++ b/drivers/net/dsa/b53/b53_srab.c
4396 @@ -511,9 +511,6 @@ static void b53_srab_prepare_irq(struct platform_device *pdev)
4397 /* Clear all pending interrupts */
4398 writel(0xffffffff, priv->regs + B53_SRAB_INTR);
4399
4400 - if (dev->pdata && dev->pdata->chip_id != BCM58XX_DEVICE_ID)
4401 - return;
4402 -
4403 for (i = 0; i < B53_N_PORTS; i++) {
4404 port = &priv->port_intrs[i];
4405
4406 diff --git a/drivers/net/dsa/mv88e6xxx/global1_atu.c b/drivers/net/dsa/mv88e6xxx/global1_atu.c
4407 index 5200e4bdce93..ea243840ee0f 100644
4408 --- a/drivers/net/dsa/mv88e6xxx/global1_atu.c
4409 +++ b/drivers/net/dsa/mv88e6xxx/global1_atu.c
4410 @@ -314,6 +314,7 @@ static irqreturn_t mv88e6xxx_g1_atu_prob_irq_thread_fn(int irq, void *dev_id)
4411 {
4412 struct mv88e6xxx_chip *chip = dev_id;
4413 struct mv88e6xxx_atu_entry entry;
4414 + int spid;
4415 int err;
4416 u16 val;
4417
4418 @@ -336,6 +337,8 @@ static irqreturn_t mv88e6xxx_g1_atu_prob_irq_thread_fn(int irq, void *dev_id)
4419 if (err)
4420 goto out;
4421
4422 + spid = entry.state;
4423 +
4424 if (val & MV88E6XXX_G1_ATU_OP_AGE_OUT_VIOLATION) {
4425 dev_err_ratelimited(chip->dev,
4426 "ATU age out violation for %pM\n",
4427 @@ -344,23 +347,23 @@ static irqreturn_t mv88e6xxx_g1_atu_prob_irq_thread_fn(int irq, void *dev_id)
4428
4429 if (val & MV88E6XXX_G1_ATU_OP_MEMBER_VIOLATION) {
4430 dev_err_ratelimited(chip->dev,
4431 - "ATU member violation for %pM portvec %x\n",
4432 - entry.mac, entry.portvec);
4433 - chip->ports[entry.portvec].atu_member_violation++;
4434 + "ATU member violation for %pM portvec %x spid %d\n",
4435 + entry.mac, entry.portvec, spid);
4436 + chip->ports[spid].atu_member_violation++;
4437 }
4438
4439 if (val & MV88E6XXX_G1_ATU_OP_MISS_VIOLATION) {
4440 dev_err_ratelimited(chip->dev,
4441 - "ATU miss violation for %pM portvec %x\n",
4442 - entry.mac, entry.portvec);
4443 - chip->ports[entry.portvec].atu_miss_violation++;
4444 + "ATU miss violation for %pM portvec %x spid %d\n",
4445 + entry.mac, entry.portvec, spid);
4446 + chip->ports[spid].atu_miss_violation++;
4447 }
4448
4449 if (val & MV88E6XXX_G1_ATU_OP_FULL_VIOLATION) {
4450 dev_err_ratelimited(chip->dev,
4451 - "ATU full violation for %pM portvec %x\n",
4452 - entry.mac, entry.portvec);
4453 - chip->ports[entry.portvec].atu_full_violation++;
4454 + "ATU full violation for %pM portvec %x spid %d\n",
4455 + entry.mac, entry.portvec, spid);
4456 + chip->ports[spid].atu_full_violation++;
4457 }
4458 mutex_unlock(&chip->reg_lock);
4459
4460 diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
4461 index 7def1cb8ab9d..22cbf8dc6fa9 100644
4462 --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
4463 +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
4464 @@ -263,6 +263,8 @@ int hw_atl_utils_soft_reset(struct aq_hw_s *self)
4465 AQ_HW_WAIT_FOR((aq_hw_read_reg(self, HW_ATL_MPI_STATE_ADR) &
4466 HW_ATL_MPI_STATE_MSK) == MPI_DEINIT,
4467 10, 1000U);
4468 + if (err)
4469 + return err;
4470 }
4471
4472 if (self->rbl_enabled)
4473 diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
4474 index 0e2d99c737e3..baa109040b40 100644
4475 --- a/drivers/net/ethernet/broadcom/bcmsysport.c
4476 +++ b/drivers/net/ethernet/broadcom/bcmsysport.c
4477 @@ -520,7 +520,6 @@ static void bcm_sysport_get_wol(struct net_device *dev,
4478 struct ethtool_wolinfo *wol)
4479 {
4480 struct bcm_sysport_priv *priv = netdev_priv(dev);
4481 - u32 reg;
4482
4483 wol->supported = WAKE_MAGIC | WAKE_MAGICSECURE | WAKE_FILTER;
4484 wol->wolopts = priv->wolopts;
4485 @@ -528,11 +527,7 @@ static void bcm_sysport_get_wol(struct net_device *dev,
4486 if (!(priv->wolopts & WAKE_MAGICSECURE))
4487 return;
4488
4489 - /* Return the programmed SecureOn password */
4490 - reg = umac_readl(priv, UMAC_PSW_MS);
4491 - put_unaligned_be16(reg, &wol->sopass[0]);
4492 - reg = umac_readl(priv, UMAC_PSW_LS);
4493 - put_unaligned_be32(reg, &wol->sopass[2]);
4494 + memcpy(wol->sopass, priv->sopass, sizeof(priv->sopass));
4495 }
4496
4497 static int bcm_sysport_set_wol(struct net_device *dev,
4498 @@ -548,13 +543,8 @@ static int bcm_sysport_set_wol(struct net_device *dev,
4499 if (wol->wolopts & ~supported)
4500 return -EINVAL;
4501
4502 - /* Program the SecureOn password */
4503 - if (wol->wolopts & WAKE_MAGICSECURE) {
4504 - umac_writel(priv, get_unaligned_be16(&wol->sopass[0]),
4505 - UMAC_PSW_MS);
4506 - umac_writel(priv, get_unaligned_be32(&wol->sopass[2]),
4507 - UMAC_PSW_LS);
4508 - }
4509 + if (wol->wolopts & WAKE_MAGICSECURE)
4510 + memcpy(priv->sopass, wol->sopass, sizeof(priv->sopass));
4511
4512 /* Flag the device and relevant IRQ as wakeup capable */
4513 if (wol->wolopts) {
4514 @@ -2592,13 +2582,18 @@ static int bcm_sysport_suspend_to_wol(struct bcm_sysport_priv *priv)
4515 unsigned int index, i = 0;
4516 u32 reg;
4517
4518 - /* Password has already been programmed */
4519 reg = umac_readl(priv, UMAC_MPD_CTRL);
4520 if (priv->wolopts & (WAKE_MAGIC | WAKE_MAGICSECURE))
4521 reg |= MPD_EN;
4522 reg &= ~PSW_EN;
4523 - if (priv->wolopts & WAKE_MAGICSECURE)
4524 + if (priv->wolopts & WAKE_MAGICSECURE) {
4525 + /* Program the SecureOn password */
4526 + umac_writel(priv, get_unaligned_be16(&priv->sopass[0]),
4527 + UMAC_PSW_MS);
4528 + umac_writel(priv, get_unaligned_be32(&priv->sopass[2]),
4529 + UMAC_PSW_LS);
4530 reg |= PSW_EN;
4531 + }
4532 umac_writel(priv, reg, UMAC_MPD_CTRL);
4533
4534 if (priv->wolopts & WAKE_FILTER) {
4535 diff --git a/drivers/net/ethernet/broadcom/bcmsysport.h b/drivers/net/ethernet/broadcom/bcmsysport.h
4536 index a7a230884a87..930ab8de3f45 100644
4537 --- a/drivers/net/ethernet/broadcom/bcmsysport.h
4538 +++ b/drivers/net/ethernet/broadcom/bcmsysport.h
4539 @@ -12,6 +12,7 @@
4540 #define __BCM_SYSPORT_H
4541
4542 #include <linux/bitmap.h>
4543 +#include <linux/ethtool.h>
4544 #include <linux/if_vlan.h>
4545 #include <linux/net_dim.h>
4546
4547 @@ -778,6 +779,7 @@ struct bcm_sysport_priv {
4548 unsigned int crc_fwd:1;
4549 u16 rev;
4550 u32 wolopts;
4551 + u8 sopass[SOPASS_MAX];
4552 unsigned int wol_irq_disabled:1;
4553
4554 /* MIB related fields */
4555 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
4556 index 5d21c14853ac..090207817ad8 100644
4557 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
4558 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
4559 @@ -4903,12 +4903,18 @@ static int bnxt_hwrm_ring_alloc(struct bnxt *bp)
4560 struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
4561 struct bnxt_ring_struct *ring = &cpr->cp_ring_struct;
4562 u32 map_idx = ring->map_idx;
4563 + unsigned int vector;
4564
4565 + vector = bp->irq_tbl[map_idx].vector;
4566 + disable_irq_nosync(vector);
4567 rc = hwrm_ring_alloc_send_msg(bp, ring, type, map_idx);
4568 - if (rc)
4569 + if (rc) {
4570 + enable_irq(vector);
4571 goto err_out;
4572 + }
4573 bnxt_set_db(bp, &cpr->cp_db, type, map_idx, ring->fw_ring_id);
4574 bnxt_db_nq(bp, &cpr->cp_db, cpr->cp_raw_cons);
4575 + enable_irq(vector);
4576 bp->grp_info[i].cp_fw_ring_id = ring->fw_ring_id;
4577
4578 if (!i) {
4579 @@ -7203,23 +7209,26 @@ static void bnxt_clear_int_mode(struct bnxt *bp)
4580 int bnxt_reserve_rings(struct bnxt *bp)
4581 {
4582 int tcs = netdev_get_num_tc(bp->dev);
4583 + bool reinit_irq = false;
4584 int rc;
4585
4586 if (!bnxt_need_reserve_rings(bp))
4587 return 0;
4588
4589 - rc = __bnxt_reserve_rings(bp);
4590 - if (rc) {
4591 - netdev_err(bp->dev, "ring reservation failure rc: %d\n", rc);
4592 - return rc;
4593 - }
4594 if (BNXT_NEW_RM(bp) && (bnxt_get_num_msix(bp) != bp->total_irqs)) {
4595 bnxt_ulp_irq_stop(bp);
4596 bnxt_clear_int_mode(bp);
4597 - rc = bnxt_init_int_mode(bp);
4598 + reinit_irq = true;
4599 + }
4600 + rc = __bnxt_reserve_rings(bp);
4601 + if (reinit_irq) {
4602 + if (!rc)
4603 + rc = bnxt_init_int_mode(bp);
4604 bnxt_ulp_irq_restart(bp, rc);
4605 - if (rc)
4606 - return rc;
4607 + }
4608 + if (rc) {
4609 + netdev_err(bp->dev, "ring reservation/IRQ init failure rc: %d\n", rc);
4610 + return rc;
4611 }
4612 if (tcs && (bp->tx_nr_rings_per_tc * tcs != bp->tx_nr_rings)) {
4613 netdev_err(bp->dev, "tx ring reservation failure\n");
4614 diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
4615 index 60641e202534..9a7f70db20c7 100644
4616 --- a/drivers/net/ethernet/cisco/enic/enic_main.c
4617 +++ b/drivers/net/ethernet/cisco/enic/enic_main.c
4618 @@ -1434,7 +1434,8 @@ static void enic_rq_indicate_buf(struct vnic_rq *rq,
4619 * csum is correct or is zero.
4620 */
4621 if ((netdev->features & NETIF_F_RXCSUM) && !csum_not_calc &&
4622 - tcp_udp_csum_ok && ipv4_csum_ok && outer_csum_ok) {
4623 + tcp_udp_csum_ok && outer_csum_ok &&
4624 + (ipv4_csum_ok || ipv6)) {
4625 skb->ip_summed = CHECKSUM_UNNECESSARY;
4626 skb->csum_level = encap;
4627 }
4628 diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
4629 index 84b942b1eccc..9b150db3b510 100644
4630 --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
4631 +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
4632 @@ -140,7 +140,10 @@ static int dpaa2_ptp_probe(struct fsl_mc_device *mc_dev)
4633
4634 err = fsl_mc_portal_allocate(mc_dev, 0, &mc_dev->mc_io);
4635 if (err) {
4636 - dev_err(dev, "fsl_mc_portal_allocate err %d\n", err);
4637 + if (err == -ENXIO)
4638 + err = -EPROBE_DEFER;
4639 + else
4640 + dev_err(dev, "fsl_mc_portal_allocate err %d\n", err);
4641 goto err_exit;
4642 }
4643
4644 diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c
4645 index bc6eb30aa20f..41c6fa200e74 100644
4646 --- a/drivers/net/ethernet/freescale/fman/fman_memac.c
4647 +++ b/drivers/net/ethernet/freescale/fman/fman_memac.c
4648 @@ -928,7 +928,7 @@ int memac_add_hash_mac_address(struct fman_mac *memac, enet_addr_t *eth_addr)
4649 hash = get_mac_addr_hash_code(addr) & HASH_CTRL_ADDR_MASK;
4650
4651 /* Create element to be added to the driver hash table */
4652 - hash_entry = kmalloc(sizeof(*hash_entry), GFP_KERNEL);
4653 + hash_entry = kmalloc(sizeof(*hash_entry), GFP_ATOMIC);
4654 if (!hash_entry)
4655 return -ENOMEM;
4656 hash_entry->addr = addr;
4657 diff --git a/drivers/net/ethernet/freescale/fman/fman_tgec.c b/drivers/net/ethernet/freescale/fman/fman_tgec.c
4658 index 40705938eecc..f75b9c11b2d2 100644
4659 --- a/drivers/net/ethernet/freescale/fman/fman_tgec.c
4660 +++ b/drivers/net/ethernet/freescale/fman/fman_tgec.c
4661 @@ -553,7 +553,7 @@ int tgec_add_hash_mac_address(struct fman_mac *tgec, enet_addr_t *eth_addr)
4662 hash = (crc >> TGEC_HASH_MCAST_SHIFT) & TGEC_HASH_ADR_MSK;
4663
4664 /* Create element to be added to the driver hash table */
4665 - hash_entry = kmalloc(sizeof(*hash_entry), GFP_KERNEL);
4666 + hash_entry = kmalloc(sizeof(*hash_entry), GFP_ATOMIC);
4667 if (!hash_entry)
4668 return -ENOMEM;
4669 hash_entry->addr = addr;
4670 diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
4671 index 20fcf0d1c2ce..d424d5bc0507 100644
4672 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
4673 +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
4674 @@ -2332,9 +2332,16 @@ static bool hns3_parse_vlan_tag(struct hns3_enet_ring *ring,
4675 static void hns3_set_rx_skb_rss_type(struct hns3_enet_ring *ring,
4676 struct sk_buff *skb)
4677 {
4678 - struct hns3_desc *desc = &ring->desc[ring->next_to_clean];
4679 struct hnae3_handle *handle = ring->tqp->handle;
4680 enum pkt_hash_types rss_type;
4681 + struct hns3_desc *desc;
4682 + int last_bd;
4683 +
4684 + /* When driver handle the rss type, ring->next_to_clean indicates the
4685 + * first descriptor of next packet, need -1 here.
4686 + */
4687 + last_bd = (ring->next_to_clean - 1 + ring->desc_num) % ring->desc_num;
4688 + desc = &ring->desc[last_bd];
4689
4690 if (le32_to_cpu(desc->rx.rss_hash))
4691 rss_type = handle->kinfo.rss_type;
4692 @@ -2783,9 +2790,10 @@ err_free_chain:
4693 cur_chain = head->next;
4694 while (cur_chain) {
4695 chain = cur_chain->next;
4696 - devm_kfree(&pdev->dev, chain);
4697 + devm_kfree(&pdev->dev, cur_chain);
4698 cur_chain = chain;
4699 }
4700 + head->next = NULL;
4701
4702 return -ENOMEM;
4703 }
4704 @@ -2876,7 +2884,7 @@ static int hns3_nic_init_vector_data(struct hns3_nic_priv *priv)
4705 ret = hns3_get_vector_ring_chain(tqp_vector,
4706 &vector_ring_chain);
4707 if (ret)
4708 - return ret;
4709 + goto map_ring_fail;
4710
4711 ret = h->ae_algo->ops->map_ring_to_vector(h,
4712 tqp_vector->vector_irq, &vector_ring_chain);
4713 @@ -2901,6 +2909,8 @@ map_ring_fail:
4714
4715 static int hns3_nic_alloc_vector_data(struct hns3_nic_priv *priv)
4716 {
4717 +#define HNS3_VECTOR_PF_MAX_NUM 64
4718 +
4719 struct hnae3_handle *h = priv->ae_handle;
4720 struct hns3_enet_tqp_vector *tqp_vector;
4721 struct hnae3_vector_info *vector;
4722 @@ -2913,6 +2923,8 @@ static int hns3_nic_alloc_vector_data(struct hns3_nic_priv *priv)
4723 /* RSS size, cpu online and vector_num should be the same */
4724 /* Should consider 2p/4p later */
4725 vector_num = min_t(u16, num_online_cpus(), tqp_num);
4726 + vector_num = min_t(u16, vector_num, HNS3_VECTOR_PF_MAX_NUM);
4727 +
4728 vector = devm_kcalloc(&pdev->dev, vector_num, sizeof(*vector),
4729 GFP_KERNEL);
4730 if (!vector)
4731 @@ -2970,12 +2982,12 @@ static int hns3_nic_uninit_vector_data(struct hns3_nic_priv *priv)
4732
4733 hns3_free_vector_ring_chain(tqp_vector, &vector_ring_chain);
4734
4735 - if (priv->tqp_vector[i].irq_init_flag == HNS3_VECTOR_INITED) {
4736 - (void)irq_set_affinity_hint(
4737 - priv->tqp_vector[i].vector_irq,
4738 - NULL);
4739 - free_irq(priv->tqp_vector[i].vector_irq,
4740 - &priv->tqp_vector[i]);
4741 + if (tqp_vector->irq_init_flag == HNS3_VECTOR_INITED) {
4742 + irq_set_affinity_notifier(tqp_vector->vector_irq,
4743 + NULL);
4744 + irq_set_affinity_hint(tqp_vector->vector_irq, NULL);
4745 + free_irq(tqp_vector->vector_irq, tqp_vector);
4746 + tqp_vector->irq_init_flag = HNS3_VECTOR_NOT_INITED;
4747 }
4748
4749 priv->ring_data[i].ring->irq_init_flag = HNS3_VECTOR_NOT_INITED;
4750 diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
4751 index ffdd96020860..a7895aefe291 100644
4752 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
4753 +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
4754 @@ -4339,6 +4339,10 @@ static int hclge_restore_fd_entries(struct hnae3_handle *handle)
4755 if (!hnae3_dev_fd_supported(hdev))
4756 return -EOPNOTSUPP;
4757
4758 + /* if fd is disabled, should not restore it when reset */
4759 + if (!hdev->fd_cfg.fd_en)
4760 + return 0;
4761 +
4762 hlist_for_each_entry_safe(rule, node, &hdev->fd_rule_list, rule_node) {
4763 ret = hclge_config_action(hdev, HCLGE_FD_STAGE_1, rule);
4764 if (!ret)
4765 diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
4766 index 876cac317e79..8245ff12fd64 100644
4767 --- a/drivers/net/ethernet/intel/i40e/i40e.h
4768 +++ b/drivers/net/ethernet/intel/i40e/i40e.h
4769 @@ -122,6 +122,7 @@ enum i40e_state_t {
4770 __I40E_MDD_EVENT_PENDING,
4771 __I40E_VFLR_EVENT_PENDING,
4772 __I40E_RESET_RECOVERY_PENDING,
4773 + __I40E_TIMEOUT_RECOVERY_PENDING,
4774 __I40E_MISC_IRQ_REQUESTED,
4775 __I40E_RESET_INTR_RECEIVED,
4776 __I40E_REINIT_REQUESTED,
4777 diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
4778 index 0e5dc74b4ef2..f97c3d5ab884 100644
4779 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
4780 +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
4781 @@ -338,6 +338,10 @@ static void i40e_tx_timeout(struct net_device *netdev)
4782 (pf->tx_timeout_last_recovery + netdev->watchdog_timeo)))
4783 return; /* don't do any new action before the next timeout */
4784
4785 + /* don't kick off another recovery if one is already pending */
4786 + if (test_and_set_bit(__I40E_TIMEOUT_RECOVERY_PENDING, pf->state))
4787 + return;
4788 +
4789 if (tx_ring) {
4790 head = i40e_get_head(tx_ring);
4791 /* Read interrupt register */
4792 @@ -9632,6 +9636,7 @@ end_core_reset:
4793 clear_bit(__I40E_RESET_FAILED, pf->state);
4794 clear_recovery:
4795 clear_bit(__I40E_RESET_RECOVERY_PENDING, pf->state);
4796 + clear_bit(__I40E_TIMEOUT_RECOVERY_PENDING, pf->state);
4797 }
4798
4799 /**
4800 @@ -12334,6 +12339,9 @@ static int i40e_config_netdev(struct i40e_vsi *vsi)
4801 ether_addr_copy(netdev->dev_addr, mac_addr);
4802 ether_addr_copy(netdev->perm_addr, mac_addr);
4803
4804 + /* i40iw_net_event() reads 16 bytes from neigh->primary_key */
4805 + netdev->neigh_priv_len = sizeof(u32) * 4;
4806 +
4807 netdev->priv_flags |= IFF_UNICAST_FLT;
4808 netdev->priv_flags |= IFF_SUPP_NOFCS;
4809 /* Setup netdev TC information */
4810 diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
4811 index ac5698ed0b11..c41e8ada23d1 100644
4812 --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
4813 +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
4814 @@ -1112,7 +1112,8 @@ static i40e_status i40e_config_vf_promiscuous_mode(struct i40e_vf *vf,
4815 if (!i40e_vc_isvalid_vsi_id(vf, vsi_id) || !vsi)
4816 return I40E_ERR_PARAM;
4817
4818 - if (!test_bit(I40E_VIRTCHNL_VF_CAP_PRIVILEGE, &vf->vf_caps)) {
4819 + if (!test_bit(I40E_VIRTCHNL_VF_CAP_PRIVILEGE, &vf->vf_caps) &&
4820 + (allmulti || alluni)) {
4821 dev_err(&pf->pdev->dev,
4822 "Unprivileged VF %d is attempting to configure promiscuous mode\n",
4823 vf->vf_id);
4824 diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
4825 index 333312a1d595..945000449279 100644
4826 --- a/drivers/net/ethernet/intel/ice/ice_main.c
4827 +++ b/drivers/net/ethernet/intel/ice/ice_main.c
4828 @@ -2563,8 +2563,12 @@ static void ice_napi_enable_all(struct ice_vsi *vsi)
4829 if (!vsi->netdev)
4830 return;
4831
4832 - for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
4833 - napi_enable(&vsi->q_vectors[q_idx]->napi);
4834 + for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) {
4835 + struct ice_q_vector *q_vector = vsi->q_vectors[q_idx];
4836 +
4837 + if (q_vector->rx.ring || q_vector->tx.ring)
4838 + napi_enable(&q_vector->napi);
4839 + }
4840 }
4841
4842 /**
4843 @@ -2931,8 +2935,12 @@ static void ice_napi_disable_all(struct ice_vsi *vsi)
4844 if (!vsi->netdev)
4845 return;
4846
4847 - for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++)
4848 - napi_disable(&vsi->q_vectors[q_idx]->napi);
4849 + for (q_idx = 0; q_idx < vsi->num_q_vectors; q_idx++) {
4850 + struct ice_q_vector *q_vector = vsi->q_vectors[q_idx];
4851 +
4852 + if (q_vector->rx.ring || q_vector->tx.ring)
4853 + napi_disable(&q_vector->napi);
4854 + }
4855 }
4856
4857 /**
4858 diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
4859 index 5df88ad8ac81..93f150784cfc 100644
4860 --- a/drivers/net/ethernet/intel/igb/igb_main.c
4861 +++ b/drivers/net/ethernet/intel/igb/igb_main.c
4862 @@ -8770,9 +8770,11 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
4863 rtnl_unlock();
4864
4865 #ifdef CONFIG_PM
4866 - retval = pci_save_state(pdev);
4867 - if (retval)
4868 - return retval;
4869 + if (!runtime) {
4870 + retval = pci_save_state(pdev);
4871 + if (retval)
4872 + return retval;
4873 + }
4874 #endif
4875
4876 status = rd32(E1000_STATUS);
4877 diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c
4878 index 9c08c3650c02..15dea48e0195 100644
4879 --- a/drivers/net/ethernet/marvell/skge.c
4880 +++ b/drivers/net/ethernet/marvell/skge.c
4881 @@ -152,8 +152,10 @@ static void skge_get_regs(struct net_device *dev, struct ethtool_regs *regs,
4882 memset(p, 0, regs->len);
4883 memcpy_fromio(p, io, B3_RAM_ADDR);
4884
4885 - memcpy_fromio(p + B3_RI_WTO_R1, io + B3_RI_WTO_R1,
4886 - regs->len - B3_RI_WTO_R1);
4887 + if (regs->len > B3_RI_WTO_R1) {
4888 + memcpy_fromio(p + B3_RI_WTO_R1, io + B3_RI_WTO_R1,
4889 + regs->len - B3_RI_WTO_R1);
4890 + }
4891 }
4892
4893 /* Wake on Lan only supported on Yukon chips with rev 1 or above */
4894 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
4895 index b70cb6fd164c..9577d0657839 100644
4896 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
4897 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
4898 @@ -1771,7 +1771,7 @@ static void mlx5e_close_cq(struct mlx5e_cq *cq)
4899
4900 static int mlx5e_get_cpu(struct mlx5e_priv *priv, int ix)
4901 {
4902 - return cpumask_first(priv->mdev->priv.irq_info[ix].mask);
4903 + return cpumask_first(priv->mdev->priv.irq_info[ix + MLX5_EQ_VEC_COMP_BASE].mask);
4904 }
4905
4906 static int mlx5e_open_tx_cqs(struct mlx5e_channel *c,
4907 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
4908 index 0b5ef6d4e815..7185f0dd58eb 100644
4909 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
4910 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
4911 @@ -732,6 +732,8 @@ static u8 get_ip_proto(struct sk_buff *skb, int network_depth, __be16 proto)
4912 ((struct ipv6hdr *)ip_p)->nexthdr;
4913 }
4914
4915 +#define short_frame(size) ((size) <= ETH_ZLEN + ETH_FCS_LEN)
4916 +
4917 static inline void mlx5e_handle_csum(struct net_device *netdev,
4918 struct mlx5_cqe64 *cqe,
4919 struct mlx5e_rq *rq,
4920 @@ -754,6 +756,17 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,
4921 if (unlikely(test_bit(MLX5E_RQ_STATE_NO_CSUM_COMPLETE, &rq->state)))
4922 goto csum_unnecessary;
4923
4924 + /* CQE csum doesn't cover padding octets in short ethernet
4925 + * frames. And the pad field is appended prior to calculating
4926 + * and appending the FCS field.
4927 + *
4928 + * Detecting these padded frames requires to verify and parse
4929 + * IP headers, so we simply force all those small frames to be
4930 + * CHECKSUM_UNNECESSARY even if they are not padded.
4931 + */
4932 + if (short_frame(skb->len))
4933 + goto csum_unnecessary;
4934 +
4935 if (likely(is_last_ethertype_ip(skb, &network_depth, &proto))) {
4936 if (unlikely(get_ip_proto(skb, network_depth, proto) == IPPROTO_SCTP))
4937 goto csum_unnecessary;
4938 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
4939 index 9dabe9d4b279..4e0151918db1 100644
4940 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
4941 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
4942 @@ -2133,6 +2133,7 @@ static bool csum_offload_supported(struct mlx5e_priv *priv,
4943
4944 static bool modify_header_match_supported(struct mlx5_flow_spec *spec,
4945 struct tcf_exts *exts,
4946 + u32 match_actions,
4947 struct netlink_ext_ack *extack)
4948 {
4949 const struct tc_action *a;
4950 @@ -2143,7 +2144,11 @@ static bool modify_header_match_supported(struct mlx5_flow_spec *spec,
4951 u16 ethertype;
4952 int nkeys, i;
4953
4954 - headers_v = MLX5_ADDR_OF(fte_match_param, spec->match_value, outer_headers);
4955 + if (match_actions & MLX5_FLOW_CONTEXT_ACTION_DECAP)
4956 + headers_v = MLX5_ADDR_OF(fte_match_param, spec->match_value, inner_headers);
4957 + else
4958 + headers_v = MLX5_ADDR_OF(fte_match_param, spec->match_value, outer_headers);
4959 +
4960 ethertype = MLX5_GET(fte_match_set_lyr_2_4, headers_v, ethertype);
4961
4962 /* for non-IP we only re-write MACs, so we're okay */
4963 @@ -2200,7 +2205,7 @@ static bool actions_match_supported(struct mlx5e_priv *priv,
4964
4965 if (actions & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)
4966 return modify_header_match_supported(&parse_attr->spec, exts,
4967 - extack);
4968 + actions, extack);
4969
4970 return true;
4971 }
4972 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
4973 index 0d90b1b4a3d3..2d6168ee99e8 100644
4974 --- a/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
4975 +++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
4976 @@ -511,14 +511,14 @@ void mlx5_init_clock(struct mlx5_core_dev *mdev)
4977 ktime_to_ns(ktime_get_real()));
4978
4979 /* Calculate period in seconds to call the overflow watchdog - to make
4980 - * sure counter is checked at least once every wrap around.
4981 + * sure counter is checked at least twice every wrap around.
4982 * The period is calculated as the minimum between max HW cycles count
4983 * (The clock source mask) and max amount of cycles that can be
4984 * multiplied by clock multiplier where the result doesn't exceed
4985 * 64bits.
4986 */
4987 overflow_cycles = div64_u64(~0ULL >> 1, clock->cycles.mult);
4988 - overflow_cycles = min(overflow_cycles, clock->cycles.mask >> 1);
4989 + overflow_cycles = min(overflow_cycles, div_u64(clock->cycles.mask, 3));
4990
4991 ns = cyclecounter_cyc2ns(&clock->cycles, overflow_cycles,
4992 frac, &frac);
4993 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
4994 index 28132c7dc05f..d5cea0a36e6a 100644
4995 --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
4996 +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
4997 @@ -640,18 +640,19 @@ u64 mlx5_read_internal_timer(struct mlx5_core_dev *dev)
4998 static int mlx5_irq_set_affinity_hint(struct mlx5_core_dev *mdev, int i)
4999 {
5000 struct mlx5_priv *priv = &mdev->priv;
5001 - int irq = pci_irq_vector(mdev->pdev, MLX5_EQ_VEC_COMP_BASE + i);
5002 + int vecidx = MLX5_EQ_VEC_COMP_BASE + i;
5003 + int irq = pci_irq_vector(mdev->pdev, vecidx);
5004
5005 - if (!zalloc_cpumask_var(&priv->irq_info[i].mask, GFP_KERNEL)) {
5006 + if (!zalloc_cpumask_var(&priv->irq_info[vecidx].mask, GFP_KERNEL)) {
5007 mlx5_core_warn(mdev, "zalloc_cpumask_var failed");
5008 return -ENOMEM;
5009 }
5010
5011 cpumask_set_cpu(cpumask_local_spread(i, priv->numa_node),
5012 - priv->irq_info[i].mask);
5013 + priv->irq_info[vecidx].mask);
5014
5015 if (IS_ENABLED(CONFIG_SMP) &&
5016 - irq_set_affinity_hint(irq, priv->irq_info[i].mask))
5017 + irq_set_affinity_hint(irq, priv->irq_info[vecidx].mask))
5018 mlx5_core_warn(mdev, "irq_set_affinity_hint failed, irq 0x%.4x", irq);
5019
5020 return 0;
5021 @@ -659,11 +660,12 @@ static int mlx5_irq_set_affinity_hint(struct mlx5_core_dev *mdev, int i)
5022
5023 static void mlx5_irq_clear_affinity_hint(struct mlx5_core_dev *mdev, int i)
5024 {
5025 + int vecidx = MLX5_EQ_VEC_COMP_BASE + i;
5026 struct mlx5_priv *priv = &mdev->priv;
5027 - int irq = pci_irq_vector(mdev->pdev, MLX5_EQ_VEC_COMP_BASE + i);
5028 + int irq = pci_irq_vector(mdev->pdev, vecidx);
5029
5030 irq_set_affinity_hint(irq, NULL);
5031 - free_cpumask_var(priv->irq_info[i].mask);
5032 + free_cpumask_var(priv->irq_info[vecidx].mask);
5033 }
5034
5035 static int mlx5_irq_set_affinity_hints(struct mlx5_core_dev *mdev)
5036 diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
5037 index 124aee09e953..8f1180fff955 100644
5038 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
5039 +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
5040 @@ -4298,6 +4298,25 @@ void mlxsw_sp_port_dev_put(struct mlxsw_sp_port *mlxsw_sp_port)
5041 dev_put(mlxsw_sp_port->dev);
5042 }
5043
5044 +static void
5045 +mlxsw_sp_port_lag_uppers_cleanup(struct mlxsw_sp_port *mlxsw_sp_port,
5046 + struct net_device *lag_dev)
5047 +{
5048 + struct net_device *br_dev = netdev_master_upper_dev_get(lag_dev);
5049 + struct net_device *upper_dev;
5050 + struct list_head *iter;
5051 +
5052 + if (netif_is_bridge_port(lag_dev))
5053 + mlxsw_sp_port_bridge_leave(mlxsw_sp_port, lag_dev, br_dev);
5054 +
5055 + netdev_for_each_upper_dev_rcu(lag_dev, upper_dev, iter) {
5056 + if (!netif_is_bridge_port(upper_dev))
5057 + continue;
5058 + br_dev = netdev_master_upper_dev_get(upper_dev);
5059 + mlxsw_sp_port_bridge_leave(mlxsw_sp_port, upper_dev, br_dev);
5060 + }
5061 +}
5062 +
5063 static int mlxsw_sp_lag_create(struct mlxsw_sp *mlxsw_sp, u16 lag_id)
5064 {
5065 char sldr_pl[MLXSW_REG_SLDR_LEN];
5066 @@ -4490,6 +4509,10 @@ static void mlxsw_sp_port_lag_leave(struct mlxsw_sp_port *mlxsw_sp_port,
5067
5068 /* Any VLANs configured on the port are no longer valid */
5069 mlxsw_sp_port_vlan_flush(mlxsw_sp_port);
5070 + /* Make the LAG and its directly linked uppers leave bridges they
5071 + * are memeber in
5072 + */
5073 + mlxsw_sp_port_lag_uppers_cleanup(mlxsw_sp_port, lag_dev);
5074
5075 if (lag->ref_count == 1)
5076 mlxsw_sp_lag_destroy(mlxsw_sp, lag_id);
5077 diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
5078 index e171513bb32a..30931a2c025b 100644
5079 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
5080 +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
5081 @@ -95,8 +95,9 @@ int mlxsw_sp_acl_tcam_priority_get(struct mlxsw_sp *mlxsw_sp,
5082 if (!MLXSW_CORE_RES_VALID(mlxsw_sp->core, KVD_SIZE))
5083 return -EIO;
5084
5085 - max_priority = MLXSW_CORE_RES_GET(mlxsw_sp->core, KVD_SIZE);
5086 - if (rulei->priority > max_priority)
5087 + /* Priority range is 1..cap_kvd_size-1. */
5088 + max_priority = MLXSW_CORE_RES_GET(mlxsw_sp->core, KVD_SIZE) - 1;
5089 + if (rulei->priority >= max_priority)
5090 return -EINVAL;
5091
5092 /* Unlike in TC, in HW, higher number means higher priority. */
5093 diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
5094 index 69f556ddb934..c514af438fc2 100644
5095 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
5096 +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
5097 @@ -292,30 +292,6 @@ mlxsw_sp_bridge_port_destroy(struct mlxsw_sp_bridge_port *bridge_port)
5098 kfree(bridge_port);
5099 }
5100
5101 -static bool
5102 -mlxsw_sp_bridge_port_should_destroy(const struct mlxsw_sp_bridge_port *
5103 - bridge_port)
5104 -{
5105 - struct net_device *dev = bridge_port->dev;
5106 - struct mlxsw_sp *mlxsw_sp;
5107 -
5108 - if (is_vlan_dev(dev))
5109 - mlxsw_sp = mlxsw_sp_lower_get(vlan_dev_real_dev(dev));
5110 - else
5111 - mlxsw_sp = mlxsw_sp_lower_get(dev);
5112 -
5113 - /* In case ports were pulled from out of a bridged LAG, then
5114 - * it's possible the reference count isn't zero, yet the bridge
5115 - * port should be destroyed, as it's no longer an upper of ours.
5116 - */
5117 - if (!mlxsw_sp && list_empty(&bridge_port->vlans_list))
5118 - return true;
5119 - else if (bridge_port->ref_count == 0)
5120 - return true;
5121 - else
5122 - return false;
5123 -}
5124 -
5125 static struct mlxsw_sp_bridge_port *
5126 mlxsw_sp_bridge_port_get(struct mlxsw_sp_bridge *bridge,
5127 struct net_device *brport_dev)
5128 @@ -353,8 +329,7 @@ static void mlxsw_sp_bridge_port_put(struct mlxsw_sp_bridge *bridge,
5129 {
5130 struct mlxsw_sp_bridge_device *bridge_device;
5131
5132 - bridge_port->ref_count--;
5133 - if (!mlxsw_sp_bridge_port_should_destroy(bridge_port))
5134 + if (--bridge_port->ref_count != 0)
5135 return;
5136 bridge_device = bridge_port->bridge_device;
5137 mlxsw_sp_bridge_port_destroy(bridge_port);
5138 diff --git a/drivers/net/ethernet/sun/niu.c b/drivers/net/ethernet/sun/niu.c
5139 index 9319d84bf49f..d84501441edd 100644
5140 --- a/drivers/net/ethernet/sun/niu.c
5141 +++ b/drivers/net/ethernet/sun/niu.c
5142 @@ -8100,6 +8100,8 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end)
5143 start += 3;
5144
5145 prop_len = niu_pci_eeprom_read(np, start + 4);
5146 + if (prop_len < 0)
5147 + return prop_len;
5148 err = niu_pci_vpd_get_propname(np, start + 5, namebuf, 64);
5149 if (err < 0)
5150 return err;
5151 @@ -8144,8 +8146,12 @@ static int niu_pci_vpd_scan_props(struct niu *np, u32 start, u32 end)
5152 netif_printk(np, probe, KERN_DEBUG, np->dev,
5153 "VPD_SCAN: Reading in property [%s] len[%d]\n",
5154 namebuf, prop_len);
5155 - for (i = 0; i < prop_len; i++)
5156 - *prop_buf++ = niu_pci_eeprom_read(np, off + i);
5157 + for (i = 0; i < prop_len; i++) {
5158 + err = niu_pci_eeprom_read(np, off + i);
5159 + if (err >= 0)
5160 + *prop_buf = err;
5161 + ++prop_buf;
5162 + }
5163 }
5164
5165 start += len;
5166 diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
5167 index edd4d44a386d..d3b36936f81e 100644
5168 --- a/drivers/net/phy/dp83640.c
5169 +++ b/drivers/net/phy/dp83640.c
5170 @@ -898,14 +898,14 @@ static void decode_txts(struct dp83640_private *dp83640,
5171 struct phy_txts *phy_txts)
5172 {
5173 struct skb_shared_hwtstamps shhwtstamps;
5174 + struct dp83640_skb_info *skb_info;
5175 struct sk_buff *skb;
5176 - u64 ns;
5177 u8 overflow;
5178 + u64 ns;
5179
5180 /* We must already have the skb that triggered this. */
5181 -
5182 +again:
5183 skb = skb_dequeue(&dp83640->tx_queue);
5184 -
5185 if (!skb) {
5186 pr_debug("have timestamp but tx_queue empty\n");
5187 return;
5188 @@ -920,6 +920,11 @@ static void decode_txts(struct dp83640_private *dp83640,
5189 }
5190 return;
5191 }
5192 + skb_info = (struct dp83640_skb_info *)skb->cb;
5193 + if (time_after(jiffies, skb_info->tmo)) {
5194 + kfree_skb(skb);
5195 + goto again;
5196 + }
5197
5198 ns = phy2txts(phy_txts);
5199 memset(&shhwtstamps, 0, sizeof(shhwtstamps));
5200 @@ -1472,6 +1477,7 @@ static bool dp83640_rxtstamp(struct phy_device *phydev,
5201 static void dp83640_txtstamp(struct phy_device *phydev,
5202 struct sk_buff *skb, int type)
5203 {
5204 + struct dp83640_skb_info *skb_info = (struct dp83640_skb_info *)skb->cb;
5205 struct dp83640_private *dp83640 = phydev->priv;
5206
5207 switch (dp83640->hwts_tx_en) {
5208 @@ -1484,6 +1490,7 @@ static void dp83640_txtstamp(struct phy_device *phydev,
5209 /* fall through */
5210 case HWTSTAMP_TX_ON:
5211 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
5212 + skb_info->tmo = jiffies + SKB_TIMESTAMP_TIMEOUT;
5213 skb_queue_tail(&dp83640->tx_queue, skb);
5214 break;
5215
5216 diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
5217 index f46da6262abe..f5290adb49f0 100644
5218 --- a/drivers/net/phy/marvell.c
5219 +++ b/drivers/net/phy/marvell.c
5220 @@ -847,8 +847,6 @@ static int m88e1510_config_init(struct phy_device *phydev)
5221
5222 /* SGMII-to-Copper mode initialization */
5223 if (phydev->interface == PHY_INTERFACE_MODE_SGMII) {
5224 - u32 pause;
5225 -
5226 /* Select page 18 */
5227 err = marvell_set_page(phydev, 18);
5228 if (err < 0)
5229 @@ -871,16 +869,6 @@ static int m88e1510_config_init(struct phy_device *phydev)
5230 err = marvell_set_page(phydev, MII_MARVELL_COPPER_PAGE);
5231 if (err < 0)
5232 return err;
5233 -
5234 - /* There appears to be a bug in the 88e1512 when used in
5235 - * SGMII to copper mode, where the AN advertisement register
5236 - * clears the pause bits each time a negotiation occurs.
5237 - * This means we can never be truely sure what was advertised,
5238 - * so disable Pause support.
5239 - */
5240 - pause = SUPPORTED_Pause | SUPPORTED_Asym_Pause;
5241 - phydev->supported &= ~pause;
5242 - phydev->advertising &= ~pause;
5243 }
5244
5245 return m88e1318_config_init(phydev);
5246 diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
5247 index f2d01cb6f958..6e971628bb50 100644
5248 --- a/drivers/net/usb/smsc95xx.c
5249 +++ b/drivers/net/usb/smsc95xx.c
5250 @@ -1295,6 +1295,7 @@ static int smsc95xx_bind(struct usbnet *dev, struct usb_interface *intf)
5251 dev->net->features |= NETIF_F_RXCSUM;
5252
5253 dev->net->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM;
5254 + set_bit(EVENT_NO_IP_ALIGN, &dev->flags);
5255
5256 smsc95xx_init_mac_address(dev);
5257
5258 diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
5259 index da500c77c5b9..f6a69b56f3e3 100644
5260 --- a/drivers/net/virtio_net.c
5261 +++ b/drivers/net/virtio_net.c
5262 @@ -502,6 +502,8 @@ static int virtnet_xdp_xmit(struct net_device *dev,
5263 struct bpf_prog *xdp_prog;
5264 struct send_queue *sq;
5265 unsigned int len;
5266 + int packets = 0;
5267 + int bytes = 0;
5268 int drops = 0;
5269 int kicks = 0;
5270 int ret, err;
5271 @@ -525,10 +527,18 @@ static int virtnet_xdp_xmit(struct net_device *dev,
5272
5273 /* Free up any pending old buffers before queueing new ones. */
5274 while ((ptr = virtqueue_get_buf(sq->vq, &len)) != NULL) {
5275 - if (likely(is_xdp_frame(ptr)))
5276 - xdp_return_frame(ptr_to_xdp(ptr));
5277 - else
5278 - napi_consume_skb(ptr, false);
5279 + if (likely(is_xdp_frame(ptr))) {
5280 + struct xdp_frame *frame = ptr_to_xdp(ptr);
5281 +
5282 + bytes += frame->len;
5283 + xdp_return_frame(frame);
5284 + } else {
5285 + struct sk_buff *skb = ptr;
5286 +
5287 + bytes += skb->len;
5288 + napi_consume_skb(skb, false);
5289 + }
5290 + packets++;
5291 }
5292
5293 for (i = 0; i < n; i++) {
5294 @@ -548,6 +558,8 @@ static int virtnet_xdp_xmit(struct net_device *dev,
5295 }
5296 out:
5297 u64_stats_update_begin(&sq->stats.syncp);
5298 + sq->stats.bytes += bytes;
5299 + sq->stats.packets += packets;
5300 sq->stats.xdp_tx += n;
5301 sq->stats.xdp_tx_drops += drops;
5302 sq->stats.kicks += kicks;
5303 diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
5304 index d210b0ed59be..59fdda67f89f 100644
5305 --- a/drivers/net/wireless/ath/ath10k/core.c
5306 +++ b/drivers/net/wireless/ath/ath10k/core.c
5307 @@ -561,6 +561,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
5308 .hw_ops = &wcn3990_ops,
5309 .decap_align_bytes = 1,
5310 .num_peers = TARGET_HL_10_TLV_NUM_PEERS,
5311 + .n_cipher_suites = 8,
5312 .ast_skid_limit = TARGET_HL_10_TLV_AST_SKID_LIMIT,
5313 .num_wds_entries = TARGET_HL_10_TLV_NUM_WDS_ENTRIES,
5314 .target_64bit = true,
5315 diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
5316 index 7e49342bae38..400495858e4e 100644
5317 --- a/drivers/net/wireless/ath/ath10k/mac.c
5318 +++ b/drivers/net/wireless/ath/ath10k/mac.c
5319 @@ -6293,13 +6293,6 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
5320 ar->num_stations + 1, ar->max_num_stations,
5321 ar->num_peers + 1, ar->max_num_peers);
5322
5323 - if (ath10k_debug_is_extd_tx_stats_enabled(ar)) {
5324 - arsta->tx_stats = kzalloc(sizeof(*arsta->tx_stats),
5325 - GFP_KERNEL);
5326 - if (!arsta->tx_stats)
5327 - goto exit;
5328 - }
5329 -
5330 num_tdls_stations = ath10k_mac_tdls_vif_stations_count(hw, vif);
5331 num_tdls_vifs = ath10k_mac_tdls_vifs_count(hw);
5332
5333 @@ -6321,12 +6314,22 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
5334 goto exit;
5335 }
5336
5337 + if (ath10k_debug_is_extd_tx_stats_enabled(ar)) {
5338 + arsta->tx_stats = kzalloc(sizeof(*arsta->tx_stats),
5339 + GFP_KERNEL);
5340 + if (!arsta->tx_stats) {
5341 + ret = -ENOMEM;
5342 + goto exit;
5343 + }
5344 + }
5345 +
5346 ret = ath10k_peer_create(ar, vif, sta, arvif->vdev_id,
5347 sta->addr, peer_type);
5348 if (ret) {
5349 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
5350 sta->addr, arvif->vdev_id, ret);
5351 ath10k_mac_dec_num_stations(arvif, sta);
5352 + kfree(arsta->tx_stats);
5353 goto exit;
5354 }
5355
5356 @@ -6339,6 +6342,7 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
5357 spin_unlock_bh(&ar->data_lock);
5358 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5359 ath10k_mac_dec_num_stations(arvif, sta);
5360 + kfree(arsta->tx_stats);
5361 ret = -ENOENT;
5362 goto exit;
5363 }
5364 @@ -6359,6 +6363,7 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
5365 ath10k_peer_delete(ar, arvif->vdev_id,
5366 sta->addr);
5367 ath10k_mac_dec_num_stations(arvif, sta);
5368 + kfree(arsta->tx_stats);
5369 goto exit;
5370 }
5371
5372 @@ -6370,6 +6375,7 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
5373 sta->addr, arvif->vdev_id, ret);
5374 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr);
5375 ath10k_mac_dec_num_stations(arvif, sta);
5376 + kfree(arsta->tx_stats);
5377
5378 if (num_tdls_stations != 0)
5379 goto exit;
5380 @@ -6385,9 +6391,6 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
5381 "mac vdev %d peer delete %pM sta %pK (sta gone)\n",
5382 arvif->vdev_id, sta->addr, sta);
5383
5384 - if (ath10k_debug_is_extd_tx_stats_enabled(ar))
5385 - kfree(arsta->tx_stats);
5386 -
5387 if (sta->tdls) {
5388 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id,
5389 sta,
5390 @@ -6427,6 +6430,11 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
5391 }
5392 spin_unlock_bh(&ar->data_lock);
5393
5394 + if (ath10k_debug_is_extd_tx_stats_enabled(ar)) {
5395 + kfree(arsta->tx_stats);
5396 + arsta->tx_stats = NULL;
5397 + }
5398 +
5399 for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
5400 ath10k_mac_txq_unref(ar, sta->txq[i]);
5401
5402 diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
5403 index 21ba20981a80..0fca44e91a71 100644
5404 --- a/drivers/net/wireless/ath/ath9k/ath9k.h
5405 +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
5406 @@ -272,7 +272,7 @@ struct ath_node {
5407 #endif
5408 u8 key_idx[4];
5409
5410 - u32 ackto;
5411 + int ackto;
5412 struct list_head list;
5413 };
5414
5415 diff --git a/drivers/net/wireless/ath/ath9k/dynack.c b/drivers/net/wireless/ath/ath9k/dynack.c
5416 index 7334c9b09e82..6e236a485431 100644
5417 --- a/drivers/net/wireless/ath/ath9k/dynack.c
5418 +++ b/drivers/net/wireless/ath/ath9k/dynack.c
5419 @@ -29,9 +29,13 @@
5420 * ath_dynack_ewma - EWMA (Exponentially Weighted Moving Average) calculation
5421 *
5422 */
5423 -static inline u32 ath_dynack_ewma(u32 old, u32 new)
5424 +static inline int ath_dynack_ewma(int old, int new)
5425 {
5426 - return (new * (EWMA_DIV - EWMA_LEVEL) + old * EWMA_LEVEL) / EWMA_DIV;
5427 + if (old > 0)
5428 + return (new * (EWMA_DIV - EWMA_LEVEL) +
5429 + old * EWMA_LEVEL) / EWMA_DIV;
5430 + else
5431 + return new;
5432 }
5433
5434 /**
5435 @@ -82,10 +86,10 @@ static inline bool ath_dynack_bssidmask(struct ath_hw *ah, const u8 *mac)
5436 */
5437 static void ath_dynack_compute_ackto(struct ath_hw *ah)
5438 {
5439 - struct ath_node *an;
5440 - u32 to = 0;
5441 - struct ath_dynack *da = &ah->dynack;
5442 struct ath_common *common = ath9k_hw_common(ah);
5443 + struct ath_dynack *da = &ah->dynack;
5444 + struct ath_node *an;
5445 + int to = 0;
5446
5447 list_for_each_entry(an, &da->nodes, list)
5448 if (an->ackto > to)
5449 @@ -144,7 +148,8 @@ static void ath_dynack_compute_to(struct ath_hw *ah)
5450 an->ackto = ath_dynack_ewma(an->ackto,
5451 ackto);
5452 ath_dbg(ath9k_hw_common(ah), DYNACK,
5453 - "%pM to %u\n", dst, an->ackto);
5454 + "%pM to %d [%u]\n", dst,
5455 + an->ackto, ackto);
5456 if (time_is_before_jiffies(da->lto)) {
5457 ath_dynack_compute_ackto(ah);
5458 da->lto = jiffies + COMPUTE_TO;
5459 @@ -166,10 +171,12 @@ static void ath_dynack_compute_to(struct ath_hw *ah)
5460 * @ah: ath hw
5461 * @skb: socket buffer
5462 * @ts: tx status info
5463 + * @sta: station pointer
5464 *
5465 */
5466 void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb,
5467 - struct ath_tx_status *ts)
5468 + struct ath_tx_status *ts,
5469 + struct ieee80211_sta *sta)
5470 {
5471 u8 ridx;
5472 struct ieee80211_hdr *hdr;
5473 @@ -177,7 +184,7 @@ void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb,
5474 struct ath_common *common = ath9k_hw_common(ah);
5475 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
5476
5477 - if ((info->flags & IEEE80211_TX_CTL_NO_ACK) || !da->enabled)
5478 + if (!da->enabled || (info->flags & IEEE80211_TX_CTL_NO_ACK))
5479 return;
5480
5481 spin_lock_bh(&da->qlock);
5482 @@ -187,11 +194,19 @@ void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb,
5483 /* late ACK */
5484 if (ts->ts_status & ATH9K_TXERR_XRETRY) {
5485 if (ieee80211_is_assoc_req(hdr->frame_control) ||
5486 - ieee80211_is_assoc_resp(hdr->frame_control)) {
5487 + ieee80211_is_assoc_resp(hdr->frame_control) ||
5488 + ieee80211_is_auth(hdr->frame_control)) {
5489 ath_dbg(common, DYNACK, "late ack\n");
5490 +
5491 ath9k_hw_setslottime(ah, (LATEACK_TO - 3) / 2);
5492 ath9k_hw_set_ack_timeout(ah, LATEACK_TO);
5493 ath9k_hw_set_cts_timeout(ah, LATEACK_TO);
5494 + if (sta) {
5495 + struct ath_node *an;
5496 +
5497 + an = (struct ath_node *)sta->drv_priv;
5498 + an->ackto = -1;
5499 + }
5500 da->lto = jiffies + LATEACK_DELAY;
5501 }
5502
5503 @@ -251,7 +266,7 @@ void ath_dynack_sample_ack_ts(struct ath_hw *ah, struct sk_buff *skb,
5504 struct ath_common *common = ath9k_hw_common(ah);
5505 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
5506
5507 - if (!ath_dynack_bssidmask(ah, hdr->addr1) || !da->enabled)
5508 + if (!da->enabled || !ath_dynack_bssidmask(ah, hdr->addr1))
5509 return;
5510
5511 spin_lock_bh(&da->qlock);
5512 diff --git a/drivers/net/wireless/ath/ath9k/dynack.h b/drivers/net/wireless/ath/ath9k/dynack.h
5513 index 6d7bef976742..cf60224d40df 100644
5514 --- a/drivers/net/wireless/ath/ath9k/dynack.h
5515 +++ b/drivers/net/wireless/ath/ath9k/dynack.h
5516 @@ -86,7 +86,8 @@ void ath_dynack_node_deinit(struct ath_hw *ah, struct ath_node *an);
5517 void ath_dynack_init(struct ath_hw *ah);
5518 void ath_dynack_sample_ack_ts(struct ath_hw *ah, struct sk_buff *skb, u32 ts);
5519 void ath_dynack_sample_tx_ts(struct ath_hw *ah, struct sk_buff *skb,
5520 - struct ath_tx_status *ts);
5521 + struct ath_tx_status *ts,
5522 + struct ieee80211_sta *sta);
5523 #else
5524 static inline void ath_dynack_init(struct ath_hw *ah) {}
5525 static inline void ath_dynack_node_init(struct ath_hw *ah,
5526 @@ -97,7 +98,8 @@ static inline void ath_dynack_sample_ack_ts(struct ath_hw *ah,
5527 struct sk_buff *skb, u32 ts) {}
5528 static inline void ath_dynack_sample_tx_ts(struct ath_hw *ah,
5529 struct sk_buff *skb,
5530 - struct ath_tx_status *ts) {}
5531 + struct ath_tx_status *ts,
5532 + struct ieee80211_sta *sta) {}
5533 #endif
5534
5535 #endif /* DYNACK_H */
5536 diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
5537 index 25b3fc82d4ac..f448d5716639 100644
5538 --- a/drivers/net/wireless/ath/ath9k/xmit.c
5539 +++ b/drivers/net/wireless/ath/ath9k/xmit.c
5540 @@ -629,7 +629,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
5541 if (bf == bf->bf_lastbf)
5542 ath_dynack_sample_tx_ts(sc->sc_ah,
5543 bf->bf_mpdu,
5544 - ts);
5545 + ts, sta);
5546 }
5547
5548 ath_tx_complete_buf(sc, bf, txq, &bf_head, sta, ts,
5549 @@ -773,7 +773,8 @@ static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq,
5550 memcpy(info->control.rates, bf->rates,
5551 sizeof(info->control.rates));
5552 ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok);
5553 - ath_dynack_sample_tx_ts(sc->sc_ah, bf->bf_mpdu, ts);
5554 + ath_dynack_sample_tx_ts(sc->sc_ah, bf->bf_mpdu, ts,
5555 + sta);
5556 }
5557 ath_tx_complete_buf(sc, bf, txq, bf_head, sta, ts, txok);
5558 } else
5559 diff --git a/drivers/net/wireless/ath/wil6210/main.c b/drivers/net/wireless/ath/wil6210/main.c
5560 index 398900a1c29e..c54b008996ee 100644
5561 --- a/drivers/net/wireless/ath/wil6210/main.c
5562 +++ b/drivers/net/wireless/ath/wil6210/main.c
5563 @@ -998,10 +998,13 @@ static int wil_target_reset(struct wil6210_priv *wil, int no_flash)
5564
5565 wil_dbg_misc(wil, "Resetting \"%s\"...\n", wil->hw_name);
5566
5567 - /* Clear MAC link up */
5568 - wil_s(wil, RGF_HP_CTRL, BIT(15));
5569 - wil_s(wil, RGF_USER_CLKS_CTL_SW_RST_MASK_0, BIT_HPAL_PERST_FROM_PAD);
5570 - wil_s(wil, RGF_USER_CLKS_CTL_SW_RST_MASK_0, BIT_CAR_PERST_RST);
5571 + if (wil->hw_version < HW_VER_TALYN) {
5572 + /* Clear MAC link up */
5573 + wil_s(wil, RGF_HP_CTRL, BIT(15));
5574 + wil_s(wil, RGF_USER_CLKS_CTL_SW_RST_MASK_0,
5575 + BIT_HPAL_PERST_FROM_PAD);
5576 + wil_s(wil, RGF_USER_CLKS_CTL_SW_RST_MASK_0, BIT_CAR_PERST_RST);
5577 + }
5578
5579 wil_halt_cpu(wil);
5580
5581 diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c
5582 index cc5f263cc965..005c4ba9e823 100644
5583 --- a/drivers/net/wireless/ath/wil6210/txrx.c
5584 +++ b/drivers/net/wireless/ath/wil6210/txrx.c
5585 @@ -1403,6 +1403,8 @@ found:
5586 wil_dbg_txrx(wil, "BCAST DUP -> ring %d\n", i);
5587 wil_set_da_for_vring(wil, skb2, i);
5588 wil_tx_ring(wil, vif, v2, skb2);
5589 + /* successful call to wil_tx_ring takes skb2 ref */
5590 + dev_kfree_skb_any(skb2);
5591 } else {
5592 wil_err(wil, "skb_copy failed\n");
5593 }
5594 diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/mac.h b/drivers/net/wireless/intel/iwlwifi/fw/api/mac.h
5595 index 1dd23f846fb9..f3ccd7948340 100644
5596 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/mac.h
5597 +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/mac.h
5598 @@ -442,7 +442,7 @@ struct iwl_he_backoff_conf {
5599 * Support for Nss x BW (or RU) matrix:
5600 * (0=SISO, 1=MIMO2) x (0-20MHz, 1-40MHz, 2-80MHz, 3-160MHz)
5601 * Each entry contains 2 QAM thresholds for 8us and 16us:
5602 - * 0=BPSK, 1=QPSK, 2=16QAM, 3=64QAM, 4=256QAM, 5=1024QAM, 6/7=RES
5603 + * 0=BPSK, 1=QPSK, 2=16QAM, 3=64QAM, 4=256QAM, 5=1024QAM, 6=RES, 7=NONE
5604 * i.e. QAM_th1 < QAM_th2 such if TX uses QAM_tx:
5605 * QAM_tx < QAM_th1 --> PPE=0us
5606 * QAM_th1 <= QAM_tx < QAM_th2 --> PPE=8us
5607 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
5608 index 00f831d88366..5a42c617c54c 100644
5609 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
5610 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
5611 @@ -2005,7 +2005,13 @@ static void iwl_mvm_cfg_he_sta(struct iwl_mvm *mvm,
5612 if (sta->he_cap.he_cap_elem.mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_BQR)
5613 sta_ctxt_cmd.htc_flags |= cpu_to_le32(IWL_HE_HTC_BQR_SUPP);
5614
5615 - /* If PPE Thresholds exist, parse them into a FW-familiar format */
5616 + /*
5617 + * Initialize the PPE thresholds to "None" (7), as described in Table
5618 + * 9-262ac of 80211.ax/D3.0.
5619 + */
5620 + memset(&sta_ctxt_cmd.pkt_ext, 7, sizeof(sta_ctxt_cmd.pkt_ext));
5621 +
5622 + /* If PPE Thresholds exist, parse them into a FW-familiar format. */
5623 if (sta->he_cap.he_cap_elem.phy_cap_info[6] &
5624 IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT) {
5625 u8 nss = (sta->he_cap.ppe_thres[0] &
5626 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c
5627 index 7a98e1a1dc40..dabbc04853ac 100644
5628 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c
5629 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c
5630 @@ -98,8 +98,12 @@ static u8 rs_fw_sgi_cw_support(struct ieee80211_sta *sta)
5631 {
5632 struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
5633 struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
5634 + struct ieee80211_sta_he_cap *he_cap = &sta->he_cap;
5635 u8 supp = 0;
5636
5637 + if (he_cap && he_cap->has_he)
5638 + return 0;
5639 +
5640 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20)
5641 supp |= BIT(IWL_TLC_MNG_CH_WIDTH_20MHZ);
5642 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40)
5643 diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/pci_dfs.c b/drivers/net/wireless/mediatek/mt76/mt76x2/pci_dfs.c
5644 index b56febae8945..764528c9f48a 100644
5645 --- a/drivers/net/wireless/mediatek/mt76/mt76x2/pci_dfs.c
5646 +++ b/drivers/net/wireless/mediatek/mt76/mt76x2/pci_dfs.c
5647 @@ -800,7 +800,7 @@ static void mt76x2_dfs_set_bbp_params(struct mt76x02_dev *dev)
5648
5649 /* enable detection*/
5650 mt76_wr(dev, MT_BBP(DFS, 0), MT_DFS_CH_EN << 16);
5651 - mt76_wr(dev, 0x212c, 0x0c350001);
5652 + mt76_wr(dev, MT_BBP(IBI, 11), 0x0c350001);
5653 }
5654
5655 void mt76x2_dfs_adjust_agc(struct mt76x02_dev *dev)
5656 @@ -843,7 +843,11 @@ void mt76x2_dfs_init_params(struct mt76x02_dev *dev)
5657 mt76_wr(dev, MT_BBP(DFS, 0), 0);
5658 /* clear detector status */
5659 mt76_wr(dev, MT_BBP(DFS, 1), 0xf);
5660 - mt76_wr(dev, 0x212c, 0);
5661 + if (mt76_chip(&dev->mt76) == 0x7610 ||
5662 + mt76_chip(&dev->mt76) == 0x7630)
5663 + mt76_wr(dev, MT_BBP(IBI, 11), 0xfde8081);
5664 + else
5665 + mt76_wr(dev, MT_BBP(IBI, 11), 0);
5666
5667 mt76x02_irq_disable(dev, MT_INT_GPTIMER);
5668 mt76_rmw_field(dev, MT_INT_TIMER_EN,
5669 diff --git a/drivers/net/wireless/st/cw1200/scan.c b/drivers/net/wireless/st/cw1200/scan.c
5670 index 67213f11acbd..0a9eac93dd01 100644
5671 --- a/drivers/net/wireless/st/cw1200/scan.c
5672 +++ b/drivers/net/wireless/st/cw1200/scan.c
5673 @@ -78,6 +78,10 @@ int cw1200_hw_scan(struct ieee80211_hw *hw,
5674 if (req->n_ssids > WSM_SCAN_MAX_NUM_OF_SSIDS)
5675 return -EINVAL;
5676
5677 + /* will be unlocked in cw1200_scan_work() */
5678 + down(&priv->scan.lock);
5679 + mutex_lock(&priv->conf_mutex);
5680 +
5681 frame.skb = ieee80211_probereq_get(hw, priv->vif->addr, NULL, 0,
5682 req->ie_len);
5683 if (!frame.skb)
5684 @@ -86,19 +90,15 @@ int cw1200_hw_scan(struct ieee80211_hw *hw,
5685 if (req->ie_len)
5686 skb_put_data(frame.skb, req->ie, req->ie_len);
5687
5688 - /* will be unlocked in cw1200_scan_work() */
5689 - down(&priv->scan.lock);
5690 - mutex_lock(&priv->conf_mutex);
5691 -
5692 ret = wsm_set_template_frame(priv, &frame);
5693 if (!ret) {
5694 /* Host want to be the probe responder. */
5695 ret = wsm_set_probe_responder(priv, true);
5696 }
5697 if (ret) {
5698 + dev_kfree_skb(frame.skb);
5699 mutex_unlock(&priv->conf_mutex);
5700 up(&priv->scan.lock);
5701 - dev_kfree_skb(frame.skb);
5702 return ret;
5703 }
5704
5705 @@ -120,10 +120,9 @@ int cw1200_hw_scan(struct ieee80211_hw *hw,
5706 ++priv->scan.n_ssids;
5707 }
5708
5709 - mutex_unlock(&priv->conf_mutex);
5710 -
5711 if (frame.skb)
5712 dev_kfree_skb(frame.skb);
5713 + mutex_unlock(&priv->conf_mutex);
5714 queue_work(priv->workqueue, &priv->scan.work);
5715 return 0;
5716 }
5717 diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
5718 index a4f3b263cd6c..d64805dc8efb 100644
5719 --- a/drivers/nvme/host/lightnvm.c
5720 +++ b/drivers/nvme/host/lightnvm.c
5721 @@ -577,7 +577,8 @@ static int nvme_nvm_get_chk_meta(struct nvm_dev *ndev,
5722 struct ppa_addr ppa;
5723 size_t left = nchks * sizeof(struct nvme_nvm_chk_meta);
5724 size_t log_pos, offset, len;
5725 - int ret, i, max_len;
5726 + int i, max_len;
5727 + int ret = 0;
5728
5729 /*
5730 * limit requests to maximum 256K to avoid issuing arbitrary large
5731 diff --git a/drivers/opp/core.c b/drivers/opp/core.c
5732 index 9280f51f1ce6..82baed4b80d4 100644
5733 --- a/drivers/opp/core.c
5734 +++ b/drivers/opp/core.c
5735 @@ -196,12 +196,12 @@ unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev)
5736 if (IS_ERR(opp_table))
5737 return 0;
5738
5739 - count = opp_table->regulator_count;
5740 -
5741 /* Regulator may not be required for the device */
5742 - if (!count)
5743 + if (!opp_table->regulators)
5744 goto put_opp_table;
5745
5746 + count = opp_table->regulator_count;
5747 +
5748 uV = kmalloc_array(count, sizeof(*uV), GFP_KERNEL);
5749 if (!uV)
5750 goto put_opp_table;
5751 @@ -1102,6 +1102,9 @@ static bool _opp_supported_by_regulators(struct dev_pm_opp *opp,
5752 struct regulator *reg;
5753 int i;
5754
5755 + if (!opp_table->regulators)
5756 + return true;
5757 +
5758 for (i = 0; i < opp_table->regulator_count; i++) {
5759 reg = opp_table->regulators[i];
5760
5761 @@ -1386,7 +1389,7 @@ static int _allocate_set_opp_data(struct opp_table *opp_table)
5762 struct dev_pm_set_opp_data *data;
5763 int len, count = opp_table->regulator_count;
5764
5765 - if (WARN_ON(!count))
5766 + if (WARN_ON(!opp_table->regulators))
5767 return -EINVAL;
5768
5769 /* space for set_opp_data */
5770 diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c
5771 index 88af6bff945f..6b54528b5f0c 100644
5772 --- a/drivers/pci/controller/dwc/pci-imx6.c
5773 +++ b/drivers/pci/controller/dwc/pci-imx6.c
5774 @@ -67,6 +67,7 @@ struct imx6_pcie {
5775 #define PHY_PLL_LOCK_WAIT_USLEEP_MAX 200
5776
5777 /* PCIe Root Complex registers (memory-mapped) */
5778 +#define PCIE_RC_IMX6_MSI_CAP 0x50
5779 #define PCIE_RC_LCR 0x7c
5780 #define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN1 0x1
5781 #define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN2 0x2
5782 @@ -840,6 +841,7 @@ static int imx6_pcie_probe(struct platform_device *pdev)
5783 struct resource *dbi_base;
5784 struct device_node *node = dev->of_node;
5785 int ret;
5786 + u16 val;
5787
5788 imx6_pcie = devm_kzalloc(dev, sizeof(*imx6_pcie), GFP_KERNEL);
5789 if (!imx6_pcie)
5790 @@ -981,6 +983,14 @@ static int imx6_pcie_probe(struct platform_device *pdev)
5791 if (ret < 0)
5792 return ret;
5793
5794 + if (pci_msi_enabled()) {
5795 + val = dw_pcie_readw_dbi(pci, PCIE_RC_IMX6_MSI_CAP +
5796 + PCI_MSI_FLAGS);
5797 + val |= PCI_MSI_FLAGS_ENABLE;
5798 + dw_pcie_writew_dbi(pci, PCIE_RC_IMX6_MSI_CAP + PCI_MSI_FLAGS,
5799 + val);
5800 + }
5801 +
5802 return 0;
5803 }
5804
5805 diff --git a/drivers/pci/switch/switchtec.c b/drivers/pci/switch/switchtec.c
5806 index 54a8b30dda38..37d0c15c9eeb 100644
5807 --- a/drivers/pci/switch/switchtec.c
5808 +++ b/drivers/pci/switch/switchtec.c
5809 @@ -800,6 +800,7 @@ static int ioctl_event_ctl(struct switchtec_dev *stdev,
5810 {
5811 int ret;
5812 int nr_idxs;
5813 + unsigned int event_flags;
5814 struct switchtec_ioctl_event_ctl ctl;
5815
5816 if (copy_from_user(&ctl, uctl, sizeof(ctl)))
5817 @@ -821,7 +822,9 @@ static int ioctl_event_ctl(struct switchtec_dev *stdev,
5818 else
5819 return -EINVAL;
5820
5821 + event_flags = ctl.flags;
5822 for (ctl.index = 0; ctl.index < nr_idxs; ctl.index++) {
5823 + ctl.flags = event_flags;
5824 ret = event_ctl(stdev, &ctl);
5825 if (ret < 0)
5826 return ret;
5827 diff --git a/drivers/perf/arm_spe_pmu.c b/drivers/perf/arm_spe_pmu.c
5828 index 54ec278d2fc4..e1a77b2de78a 100644
5829 --- a/drivers/perf/arm_spe_pmu.c
5830 +++ b/drivers/perf/arm_spe_pmu.c
5831 @@ -927,6 +927,11 @@ static int arm_spe_pmu_perf_init(struct arm_spe_pmu *spe_pmu)
5832
5833 idx = atomic_inc_return(&pmu_idx);
5834 name = devm_kasprintf(dev, GFP_KERNEL, "%s_%d", PMUNAME, idx);
5835 + if (!name) {
5836 + dev_err(dev, "failed to allocate name for pmu %d\n", idx);
5837 + return -ENOMEM;
5838 + }
5839 +
5840 return perf_pmu_register(&spe_pmu->pmu, name, -1);
5841 }
5842
5843 diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c
5844 index d4dcd39b8d76..881078ff73f6 100644
5845 --- a/drivers/phy/allwinner/phy-sun4i-usb.c
5846 +++ b/drivers/phy/allwinner/phy-sun4i-usb.c
5847 @@ -126,6 +126,7 @@ struct sun4i_usb_phy_cfg {
5848 bool dedicated_clocks;
5849 bool enable_pmu_unk1;
5850 bool phy0_dual_route;
5851 + int missing_phys;
5852 };
5853
5854 struct sun4i_usb_phy_data {
5855 @@ -646,6 +647,9 @@ static struct phy *sun4i_usb_phy_xlate(struct device *dev,
5856 if (args->args[0] >= data->cfg->num_phys)
5857 return ERR_PTR(-ENODEV);
5858
5859 + if (data->cfg->missing_phys & BIT(args->args[0]))
5860 + return ERR_PTR(-ENODEV);
5861 +
5862 return data->phys[args->args[0]].phy;
5863 }
5864
5865 @@ -741,6 +745,9 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
5866 struct sun4i_usb_phy *phy = data->phys + i;
5867 char name[16];
5868
5869 + if (data->cfg->missing_phys & BIT(i))
5870 + continue;
5871 +
5872 snprintf(name, sizeof(name), "usb%d_vbus", i);
5873 phy->vbus = devm_regulator_get_optional(dev, name);
5874 if (IS_ERR(phy->vbus)) {
5875 diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
5876 index fa530913a2c8..08925d24180b 100644
5877 --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
5878 +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
5879 @@ -90,7 +90,7 @@ struct bcm2835_pinctrl {
5880 struct gpio_chip gpio_chip;
5881 struct pinctrl_gpio_range gpio_range;
5882
5883 - spinlock_t irq_lock[BCM2835_NUM_BANKS];
5884 + raw_spinlock_t irq_lock[BCM2835_NUM_BANKS];
5885 };
5886
5887 /* pins are just named GPIO0..GPIO53 */
5888 @@ -461,10 +461,10 @@ static void bcm2835_gpio_irq_enable(struct irq_data *data)
5889 unsigned bank = GPIO_REG_OFFSET(gpio);
5890 unsigned long flags;
5891
5892 - spin_lock_irqsave(&pc->irq_lock[bank], flags);
5893 + raw_spin_lock_irqsave(&pc->irq_lock[bank], flags);
5894 set_bit(offset, &pc->enabled_irq_map[bank]);
5895 bcm2835_gpio_irq_config(pc, gpio, true);
5896 - spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
5897 + raw_spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
5898 }
5899
5900 static void bcm2835_gpio_irq_disable(struct irq_data *data)
5901 @@ -476,12 +476,12 @@ static void bcm2835_gpio_irq_disable(struct irq_data *data)
5902 unsigned bank = GPIO_REG_OFFSET(gpio);
5903 unsigned long flags;
5904
5905 - spin_lock_irqsave(&pc->irq_lock[bank], flags);
5906 + raw_spin_lock_irqsave(&pc->irq_lock[bank], flags);
5907 bcm2835_gpio_irq_config(pc, gpio, false);
5908 /* Clear events that were latched prior to clearing event sources */
5909 bcm2835_gpio_set_bit(pc, GPEDS0, gpio);
5910 clear_bit(offset, &pc->enabled_irq_map[bank]);
5911 - spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
5912 + raw_spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
5913 }
5914
5915 static int __bcm2835_gpio_irq_set_type_disabled(struct bcm2835_pinctrl *pc,
5916 @@ -584,7 +584,7 @@ static int bcm2835_gpio_irq_set_type(struct irq_data *data, unsigned int type)
5917 unsigned long flags;
5918 int ret;
5919
5920 - spin_lock_irqsave(&pc->irq_lock[bank], flags);
5921 + raw_spin_lock_irqsave(&pc->irq_lock[bank], flags);
5922
5923 if (test_bit(offset, &pc->enabled_irq_map[bank]))
5924 ret = __bcm2835_gpio_irq_set_type_enabled(pc, gpio, type);
5925 @@ -596,7 +596,7 @@ static int bcm2835_gpio_irq_set_type(struct irq_data *data, unsigned int type)
5926 else
5927 irq_set_handler_locked(data, handle_level_irq);
5928
5929 - spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
5930 + raw_spin_unlock_irqrestore(&pc->irq_lock[bank], flags);
5931
5932 return ret;
5933 }
5934 @@ -1047,7 +1047,7 @@ static int bcm2835_pinctrl_probe(struct platform_device *pdev)
5935 for_each_set_bit(offset, &events, 32)
5936 bcm2835_gpio_wr(pc, GPEDS0 + i * 4, BIT(offset));
5937
5938 - spin_lock_init(&pc->irq_lock[i]);
5939 + raw_spin_lock_init(&pc->irq_lock[i]);
5940 }
5941
5942 err = gpiochip_add_data(&pc->gpio_chip, pc);
5943 diff --git a/drivers/pinctrl/meson/pinctrl-meson8.c b/drivers/pinctrl/meson/pinctrl-meson8.c
5944 index 86466173114d..e482672e833a 100644
5945 --- a/drivers/pinctrl/meson/pinctrl-meson8.c
5946 +++ b/drivers/pinctrl/meson/pinctrl-meson8.c
5947 @@ -807,7 +807,9 @@ static const char * const gpio_groups[] = {
5948 "BOOT_5", "BOOT_6", "BOOT_7", "BOOT_8", "BOOT_9",
5949 "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14",
5950 "BOOT_15", "BOOT_16", "BOOT_17", "BOOT_18",
5951 +};
5952
5953 +static const char * const gpio_aobus_groups[] = {
5954 "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3",
5955 "GPIOAO_4", "GPIOAO_5", "GPIOAO_6", "GPIOAO_7",
5956 "GPIOAO_8", "GPIOAO_9", "GPIOAO_10", "GPIOAO_11",
5957 @@ -1030,6 +1032,7 @@ static struct meson_pmx_func meson8_cbus_functions[] = {
5958 };
5959
5960 static struct meson_pmx_func meson8_aobus_functions[] = {
5961 + FUNCTION(gpio_aobus),
5962 FUNCTION(uart_ao),
5963 FUNCTION(remote),
5964 FUNCTION(i2c_slave_ao),
5965 diff --git a/drivers/pinctrl/meson/pinctrl-meson8b.c b/drivers/pinctrl/meson/pinctrl-meson8b.c
5966 index 647ad15d5c3c..91cffc051055 100644
5967 --- a/drivers/pinctrl/meson/pinctrl-meson8b.c
5968 +++ b/drivers/pinctrl/meson/pinctrl-meson8b.c
5969 @@ -646,16 +646,18 @@ static const char * const gpio_groups[] = {
5970 "BOOT_10", "BOOT_11", "BOOT_12", "BOOT_13", "BOOT_14",
5971 "BOOT_15", "BOOT_16", "BOOT_17", "BOOT_18",
5972
5973 - "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3",
5974 - "GPIOAO_4", "GPIOAO_5", "GPIOAO_6", "GPIOAO_7",
5975 - "GPIOAO_8", "GPIOAO_9", "GPIOAO_10", "GPIOAO_11",
5976 - "GPIOAO_12", "GPIOAO_13", "GPIO_BSD_EN", "GPIO_TEST_N",
5977 -
5978 "DIF_0_P", "DIF_0_N", "DIF_1_P", "DIF_1_N",
5979 "DIF_2_P", "DIF_2_N", "DIF_3_P", "DIF_3_N",
5980 "DIF_4_P", "DIF_4_N"
5981 };
5982
5983 +static const char * const gpio_aobus_groups[] = {
5984 + "GPIOAO_0", "GPIOAO_1", "GPIOAO_2", "GPIOAO_3",
5985 + "GPIOAO_4", "GPIOAO_5", "GPIOAO_6", "GPIOAO_7",
5986 + "GPIOAO_8", "GPIOAO_9", "GPIOAO_10", "GPIOAO_11",
5987 + "GPIOAO_12", "GPIOAO_13", "GPIO_BSD_EN", "GPIO_TEST_N"
5988 +};
5989 +
5990 static const char * const sd_a_groups[] = {
5991 "sd_d0_a", "sd_d1_a", "sd_d2_a", "sd_d3_a", "sd_clk_a",
5992 "sd_cmd_a"
5993 @@ -871,6 +873,7 @@ static struct meson_pmx_func meson8b_cbus_functions[] = {
5994 };
5995
5996 static struct meson_pmx_func meson8b_aobus_functions[] = {
5997 + FUNCTION(gpio_aobus),
5998 FUNCTION(uart_ao),
5999 FUNCTION(uart_ao_b),
6000 FUNCTION(i2c_slave_ao),
6001 diff --git a/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c b/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c
6002 index 7ad50d9268aa..3bda620d18bb 100644
6003 --- a/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c
6004 +++ b/drivers/pinctrl/nuvoton/pinctrl-npcm7xx.c
6005 @@ -1932,6 +1932,9 @@ static int npcm7xx_gpio_of(struct npcm7xx_pinctrl *pctrl)
6006 pctrl->gpio_bank[id].gc.label =
6007 devm_kasprintf(pctrl->dev, GFP_KERNEL, "%pOF",
6008 np);
6009 + if (pctrl->gpio_bank[id].gc.label == NULL)
6010 + return -ENOMEM;
6011 +
6012 pctrl->gpio_bank[id].gc.dbg_show = npcmgpio_dbg_show;
6013 pctrl->gpio_bank[id].direction_input =
6014 pctrl->gpio_bank[id].gc.direction_input;
6015 diff --git a/drivers/pinctrl/pinctrl-rza1.c b/drivers/pinctrl/pinctrl-rza1.c
6016 index 14eb576c04a2..9cfe9d0520ac 100644
6017 --- a/drivers/pinctrl/pinctrl-rza1.c
6018 +++ b/drivers/pinctrl/pinctrl-rza1.c
6019 @@ -1225,6 +1225,9 @@ static int rza1_parse_gpiochip(struct rza1_pinctrl *rza1_pctl,
6020 chip->base = -1;
6021 chip->label = devm_kasprintf(rza1_pctl->dev, GFP_KERNEL, "%pOFn",
6022 np);
6023 + if (!chip->label)
6024 + return -ENOMEM;
6025 +
6026 chip->ngpio = of_args.args[2];
6027 chip->of_node = np;
6028 chip->parent = rza1_pctl->dev;
6029 @@ -1326,6 +1329,8 @@ static int rza1_pinctrl_register(struct rza1_pinctrl *rza1_pctl)
6030 pins[i].number = i;
6031 pins[i].name = devm_kasprintf(rza1_pctl->dev, GFP_KERNEL,
6032 "P%u-%u", port, pin);
6033 + if (!pins[i].name)
6034 + return -ENOMEM;
6035
6036 if (i % RZA1_PINS_PER_PORT == 0) {
6037 /*
6038 diff --git a/drivers/pinctrl/pinctrl-sx150x.c b/drivers/pinctrl/pinctrl-sx150x.c
6039 index cbf58a10113d..4d87d75b9c6e 100644
6040 --- a/drivers/pinctrl/pinctrl-sx150x.c
6041 +++ b/drivers/pinctrl/pinctrl-sx150x.c
6042 @@ -1166,7 +1166,6 @@ static int sx150x_probe(struct i2c_client *client,
6043 }
6044
6045 /* Register GPIO controller */
6046 - pctl->gpio.label = devm_kstrdup(dev, client->name, GFP_KERNEL);
6047 pctl->gpio.base = -1;
6048 pctl->gpio.ngpio = pctl->data->npins;
6049 pctl->gpio.get_direction = sx150x_gpio_get_direction;
6050 @@ -1180,6 +1179,10 @@ static int sx150x_probe(struct i2c_client *client,
6051 pctl->gpio.of_node = dev->of_node;
6052 #endif
6053 pctl->gpio.can_sleep = true;
6054 + pctl->gpio.label = devm_kstrdup(dev, client->name, GFP_KERNEL);
6055 + if (!pctl->gpio.label)
6056 + return -ENOMEM;
6057 +
6058 /*
6059 * Setting multiple pins is not safe when all pins are not
6060 * handled by the same regmap register. The oscio pin (present
6061 @@ -1200,13 +1203,15 @@ static int sx150x_probe(struct i2c_client *client,
6062
6063 /* Add Interrupt support if an irq is specified */
6064 if (client->irq > 0) {
6065 - pctl->irq_chip.name = devm_kstrdup(dev, client->name,
6066 - GFP_KERNEL);
6067 pctl->irq_chip.irq_mask = sx150x_irq_mask;
6068 pctl->irq_chip.irq_unmask = sx150x_irq_unmask;
6069 pctl->irq_chip.irq_set_type = sx150x_irq_set_type;
6070 pctl->irq_chip.irq_bus_lock = sx150x_irq_bus_lock;
6071 pctl->irq_chip.irq_bus_sync_unlock = sx150x_irq_bus_sync_unlock;
6072 + pctl->irq_chip.name = devm_kstrdup(dev, client->name,
6073 + GFP_KERNEL);
6074 + if (!pctl->irq_chip.name)
6075 + return -ENOMEM;
6076
6077 pctl->irq.masked = ~0;
6078 pctl->irq.sense = 0;
6079 diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
6080 index b6fd4838f60f..e5d5b1adb5a9 100644
6081 --- a/drivers/platform/chrome/cros_ec_proto.c
6082 +++ b/drivers/platform/chrome/cros_ec_proto.c
6083 @@ -575,6 +575,7 @@ static int get_keyboard_state_event(struct cros_ec_device *ec_dev)
6084
6085 int cros_ec_get_next_event(struct cros_ec_device *ec_dev, bool *wake_event)
6086 {
6087 + u8 event_type;
6088 u32 host_event;
6089 int ret;
6090
6091 @@ -594,11 +595,22 @@ int cros_ec_get_next_event(struct cros_ec_device *ec_dev, bool *wake_event)
6092 return ret;
6093
6094 if (wake_event) {
6095 + event_type = ec_dev->event_data.event_type;
6096 host_event = cros_ec_get_host_event(ec_dev);
6097
6098 - /* Consider non-host_event as wake event */
6099 - *wake_event = !host_event ||
6100 - !!(host_event & ec_dev->host_event_wake_mask);
6101 + /*
6102 + * Sensor events need to be parsed by the sensor sub-device.
6103 + * Defer them, and don't report the wakeup here.
6104 + */
6105 + if (event_type == EC_MKBP_EVENT_SENSOR_FIFO)
6106 + *wake_event = false;
6107 + /* Masked host-events should not count as wake events. */
6108 + else if (host_event &&
6109 + !(host_event & ec_dev->host_event_wake_mask))
6110 + *wake_event = false;
6111 + /* Consider all other events as wake events. */
6112 + else
6113 + *wake_event = true;
6114 }
6115
6116 return ret;
6117 diff --git a/drivers/platform/x86/intel_atomisp2_pm.c b/drivers/platform/x86/intel_atomisp2_pm.c
6118 index 9371603a0ac9..2a8c7a4cea35 100644
6119 --- a/drivers/platform/x86/intel_atomisp2_pm.c
6120 +++ b/drivers/platform/x86/intel_atomisp2_pm.c
6121 @@ -33,46 +33,45 @@
6122 #define ISPSSPM0_IUNIT_POWER_ON 0x0
6123 #define ISPSSPM0_IUNIT_POWER_OFF 0x3
6124
6125 -static int isp_probe(struct pci_dev *dev, const struct pci_device_id *id)
6126 +static int isp_set_power(struct pci_dev *dev, bool enable)
6127 {
6128 unsigned long timeout;
6129 - u32 val;
6130 -
6131 - pci_write_config_dword(dev, PCI_INTERRUPT_CTRL, 0);
6132 -
6133 - /*
6134 - * MRFLD IUNIT DPHY is located in an always-power-on island
6135 - * MRFLD HW design need all CSI ports are disabled before
6136 - * powering down the IUNIT.
6137 - */
6138 - pci_read_config_dword(dev, PCI_CSI_CONTROL, &val);
6139 - val |= PCI_CSI_CONTROL_PORTS_OFF_MASK;
6140 - pci_write_config_dword(dev, PCI_CSI_CONTROL, val);
6141 + u32 val = enable ? ISPSSPM0_IUNIT_POWER_ON :
6142 + ISPSSPM0_IUNIT_POWER_OFF;
6143
6144 - /* Write 0x3 to ISPSSPM0 bit[1:0] to power off the IUNIT */
6145 + /* Write to ISPSSPM0 bit[1:0] to power on/off the IUNIT */
6146 iosf_mbi_modify(BT_MBI_UNIT_PMC, MBI_REG_READ, ISPSSPM0,
6147 - ISPSSPM0_IUNIT_POWER_OFF, ISPSSPM0_ISPSSC_MASK);
6148 + val, ISPSSPM0_ISPSSC_MASK);
6149
6150 /*
6151 * There should be no IUNIT access while power-down is
6152 * in progress HW sighting: 4567865
6153 * Wait up to 50 ms for the IUNIT to shut down.
6154 + * And we do the same for power on.
6155 */
6156 timeout = jiffies + msecs_to_jiffies(50);
6157 while (1) {
6158 - /* Wait until ISPSSPM0 bit[25:24] shows 0x3 */
6159 - iosf_mbi_read(BT_MBI_UNIT_PMC, MBI_REG_READ, ISPSSPM0, &val);
6160 - val = (val & ISPSSPM0_ISPSSS_MASK) >> ISPSSPM0_ISPSSS_OFFSET;
6161 - if (val == ISPSSPM0_IUNIT_POWER_OFF)
6162 + u32 tmp;
6163 +
6164 + /* Wait until ISPSSPM0 bit[25:24] shows the right value */
6165 + iosf_mbi_read(BT_MBI_UNIT_PMC, MBI_REG_READ, ISPSSPM0, &tmp);
6166 + tmp = (tmp & ISPSSPM0_ISPSSS_MASK) >> ISPSSPM0_ISPSSS_OFFSET;
6167 + if (tmp == val)
6168 break;
6169
6170 if (time_after(jiffies, timeout)) {
6171 - dev_err(&dev->dev, "IUNIT power-off timeout.\n");
6172 + dev_err(&dev->dev, "IUNIT power-%s timeout.\n",
6173 + enable ? "on" : "off");
6174 return -EBUSY;
6175 }
6176 usleep_range(1000, 2000);
6177 }
6178
6179 + return 0;
6180 +}
6181 +
6182 +static int isp_probe(struct pci_dev *dev, const struct pci_device_id *id)
6183 +{
6184 pm_runtime_allow(&dev->dev);
6185 pm_runtime_put_sync_suspend(&dev->dev);
6186
6187 @@ -87,11 +86,40 @@ static void isp_remove(struct pci_dev *dev)
6188
6189 static int isp_pci_suspend(struct device *dev)
6190 {
6191 + struct pci_dev *pdev = to_pci_dev(dev);
6192 + u32 val;
6193 +
6194 + pci_write_config_dword(pdev, PCI_INTERRUPT_CTRL, 0);
6195 +
6196 + /*
6197 + * MRFLD IUNIT DPHY is located in an always-power-on island
6198 + * MRFLD HW design need all CSI ports are disabled before
6199 + * powering down the IUNIT.
6200 + */
6201 + pci_read_config_dword(pdev, PCI_CSI_CONTROL, &val);
6202 + val |= PCI_CSI_CONTROL_PORTS_OFF_MASK;
6203 + pci_write_config_dword(pdev, PCI_CSI_CONTROL, val);
6204 +
6205 + /*
6206 + * We lose config space access when punit power gates
6207 + * the ISP. Can't use pci_set_power_state() because
6208 + * pmcsr won't actually change when we write to it.
6209 + */
6210 + pci_save_state(pdev);
6211 + pdev->current_state = PCI_D3cold;
6212 + isp_set_power(pdev, false);
6213 +
6214 return 0;
6215 }
6216
6217 static int isp_pci_resume(struct device *dev)
6218 {
6219 + struct pci_dev *pdev = to_pci_dev(dev);
6220 +
6221 + isp_set_power(pdev, true);
6222 + pdev->current_state = PCI_D0;
6223 + pci_restore_state(pdev);
6224 +
6225 return 0;
6226 }
6227
6228 diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c
6229 index c2c3a1a19879..14f88bfabd5d 100644
6230 --- a/drivers/platform/x86/mlx-platform.c
6231 +++ b/drivers/platform/x86/mlx-platform.c
6232 @@ -83,12 +83,12 @@
6233 #define MLXPLAT_CPLD_LPC_REG_TACHO4_OFFSET 0xe7
6234 #define MLXPLAT_CPLD_LPC_REG_TACHO5_OFFSET 0xe8
6235 #define MLXPLAT_CPLD_LPC_REG_TACHO6_OFFSET 0xe9
6236 -#define MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET 0xea
6237 -#define MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET 0xeb
6238 -#define MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET 0xec
6239 -#define MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET 0xed
6240 -#define MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET 0xee
6241 -#define MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET 0xef
6242 +#define MLXPLAT_CPLD_LPC_REG_TACHO7_OFFSET 0xeb
6243 +#define MLXPLAT_CPLD_LPC_REG_TACHO8_OFFSET 0xec
6244 +#define MLXPLAT_CPLD_LPC_REG_TACHO9_OFFSET 0xed
6245 +#define MLXPLAT_CPLD_LPC_REG_TACHO10_OFFSET 0xee
6246 +#define MLXPLAT_CPLD_LPC_REG_TACHO11_OFFSET 0xef
6247 +#define MLXPLAT_CPLD_LPC_REG_TACHO12_OFFSET 0xf0
6248 #define MLXPLAT_CPLD_LPC_IO_RANGE 0x100
6249 #define MLXPLAT_CPLD_LPC_I2C_CH1_OFF 0xdb
6250 #define MLXPLAT_CPLD_LPC_I2C_CH2_OFF 0xda
6251 diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c
6252 index 2012551d93e0..796eeffdf93b 100644
6253 --- a/drivers/ptp/ptp_chardev.c
6254 +++ b/drivers/ptp/ptp_chardev.c
6255 @@ -228,7 +228,9 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)
6256 pct->sec = ts.tv_sec;
6257 pct->nsec = ts.tv_nsec;
6258 pct++;
6259 - ptp->info->gettime64(ptp->info, &ts);
6260 + err = ptp->info->gettime64(ptp->info, &ts);
6261 + if (err)
6262 + goto out;
6263 pct->sec = ts.tv_sec;
6264 pct->nsec = ts.tv_nsec;
6265 pct++;
6266 @@ -281,6 +283,7 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)
6267 break;
6268 }
6269
6270 +out:
6271 kfree(sysoff);
6272 return err;
6273 }
6274 diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c
6275 index 5419a89d300e..9b8aa6718ee7 100644
6276 --- a/drivers/ptp/ptp_clock.c
6277 +++ b/drivers/ptp/ptp_clock.c
6278 @@ -249,8 +249,10 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
6279 ptp->dev = device_create_with_groups(ptp_class, parent, ptp->devid,
6280 ptp, ptp->pin_attr_groups,
6281 "ptp%d", ptp->index);
6282 - if (IS_ERR(ptp->dev))
6283 + if (IS_ERR(ptp->dev)) {
6284 + err = PTR_ERR(ptp->dev);
6285 goto no_device;
6286 + }
6287
6288 /* Register a new PPS source. */
6289 if (info->pps) {
6290 @@ -261,6 +263,7 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
6291 pps.owner = info->owner;
6292 ptp->pps_source = pps_register_source(&pps, PTP_PPS_DEFAULTS);
6293 if (!ptp->pps_source) {
6294 + err = -EINVAL;
6295 pr_err("failed to register pps source\n");
6296 goto no_pps;
6297 }
6298 diff --git a/drivers/s390/crypto/zcrypt_error.h b/drivers/s390/crypto/zcrypt_error.h
6299 index 240b27f3f5f6..f34ee41cbed8 100644
6300 --- a/drivers/s390/crypto/zcrypt_error.h
6301 +++ b/drivers/s390/crypto/zcrypt_error.h
6302 @@ -51,6 +51,7 @@ struct error_hdr {
6303 #define REP82_ERROR_FORMAT_FIELD 0x29
6304 #define REP82_ERROR_INVALID_COMMAND 0x30
6305 #define REP82_ERROR_MALFORMED_MSG 0x40
6306 +#define REP82_ERROR_INVALID_SPECIAL_CMD 0x41
6307 #define REP82_ERROR_INVALID_DOMAIN_PRECHECK 0x42
6308 #define REP82_ERROR_RESERVED_FIELDO 0x50 /* old value */
6309 #define REP82_ERROR_WORD_ALIGNMENT 0x60
6310 @@ -89,6 +90,7 @@ static inline int convert_error(struct zcrypt_queue *zq,
6311 case REP88_ERROR_MESSAGE_MALFORMD:
6312 case REP82_ERROR_INVALID_DOMAIN_PRECHECK:
6313 case REP82_ERROR_INVALID_DOMAIN_PENDING:
6314 + case REP82_ERROR_INVALID_SPECIAL_CMD:
6315 // REP88_ERROR_INVALID_KEY // '82' CEX2A
6316 // REP88_ERROR_OPERAND // '84' CEX2A
6317 // REP88_ERROR_OPERAND_EVEN_MOD // '85' CEX2A
6318 diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h
6319 index 04e294d1d16d..99af1a0a3314 100644
6320 --- a/drivers/s390/net/qeth_core.h
6321 +++ b/drivers/s390/net/qeth_core.h
6322 @@ -665,7 +665,6 @@ struct qeth_card_blkt {
6323
6324 #define QETH_BROADCAST_WITH_ECHO 0x01
6325 #define QETH_BROADCAST_WITHOUT_ECHO 0x02
6326 -#define QETH_LAYER2_MAC_READ 0x01
6327 #define QETH_LAYER2_MAC_REGISTERED 0x02
6328 struct qeth_card_info {
6329 unsigned short unit_addr2;
6330 diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
6331 index 254065271867..0c9a5250dd93 100644
6332 --- a/drivers/s390/net/qeth_core_main.c
6333 +++ b/drivers/s390/net/qeth_core_main.c
6334 @@ -4235,16 +4235,18 @@ static int qeth_setadpparms_change_macaddr_cb(struct qeth_card *card,
6335 struct qeth_reply *reply, unsigned long data)
6336 {
6337 struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
6338 + struct qeth_ipacmd_setadpparms *adp_cmd;
6339
6340 QETH_CARD_TEXT(card, 4, "chgmaccb");
6341 if (qeth_setadpparms_inspect_rc(cmd))
6342 return 0;
6343
6344 - if (IS_LAYER3(card) || !(card->info.mac_bits & QETH_LAYER2_MAC_READ)) {
6345 - ether_addr_copy(card->dev->dev_addr,
6346 - cmd->data.setadapterparms.data.change_addr.addr);
6347 - card->info.mac_bits |= QETH_LAYER2_MAC_READ;
6348 - }
6349 + adp_cmd = &cmd->data.setadapterparms;
6350 + if (IS_LAYER2(card) && IS_OSD(card) && !IS_VM_NIC(card) &&
6351 + !(adp_cmd->hdr.flags & QETH_SETADP_FLAGS_VIRTUAL_MAC))
6352 + return 0;
6353 +
6354 + ether_addr_copy(card->dev->dev_addr, adp_cmd->data.change_addr.addr);
6355 return 0;
6356 }
6357
6358 diff --git a/drivers/s390/net/qeth_core_mpc.h b/drivers/s390/net/qeth_core_mpc.h
6359 index 3e54be201b27..10cc487c16d6 100644
6360 --- a/drivers/s390/net/qeth_core_mpc.h
6361 +++ b/drivers/s390/net/qeth_core_mpc.h
6362 @@ -80,7 +80,9 @@ enum qeth_card_types {
6363 };
6364
6365 #define IS_IQD(card) ((card)->info.type == QETH_CARD_TYPE_IQD)
6366 +#define IS_OSD(card) ((card)->info.type == QETH_CARD_TYPE_OSD)
6367 #define IS_OSN(card) ((card)->info.type == QETH_CARD_TYPE_OSN)
6368 +#define IS_VM_NIC(card) ((card)->info.guestlan)
6369
6370 #define QETH_MPC_DIFINFO_LEN_INDICATES_LINK_TYPE 0x18
6371 /* only the first two bytes are looked at in qeth_get_cardname_short */
6372 @@ -529,17 +531,20 @@ struct qeth_query_switch_attributes {
6373 __u8 reserved3[8];
6374 };
6375
6376 +#define QETH_SETADP_FLAGS_VIRTUAL_MAC 0x80 /* for CHANGE_ADDR_READ_MAC */
6377 +
6378 struct qeth_ipacmd_setadpparms_hdr {
6379 - __u32 supp_hw_cmds;
6380 - __u32 reserved1;
6381 - __u16 cmdlength;
6382 - __u16 reserved2;
6383 - __u32 command_code;
6384 - __u16 return_code;
6385 - __u8 used_total;
6386 - __u8 seq_no;
6387 - __u32 reserved3;
6388 -} __attribute__ ((packed));
6389 + u32 supp_hw_cmds;
6390 + u32 reserved1;
6391 + u16 cmdlength;
6392 + u16 reserved2;
6393 + u32 command_code;
6394 + u16 return_code;
6395 + u8 used_total;
6396 + u8 seq_no;
6397 + u8 flags;
6398 + u8 reserved3[3];
6399 +};
6400
6401 struct qeth_ipacmd_setadpparms {
6402 struct qeth_ipacmd_setadpparms_hdr hdr;
6403 diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
6404 index 2914a1a69f83..8d3601891c62 100644
6405 --- a/drivers/s390/net/qeth_l2_main.c
6406 +++ b/drivers/s390/net/qeth_l2_main.c
6407 @@ -461,12 +461,9 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card)
6408 /* fall back to alternative mechanism: */
6409 }
6410
6411 - if (card->info.type == QETH_CARD_TYPE_IQD ||
6412 - card->info.type == QETH_CARD_TYPE_OSM ||
6413 - card->info.type == QETH_CARD_TYPE_OSX ||
6414 - card->info.guestlan) {
6415 + if (!IS_OSN(card)) {
6416 rc = qeth_setadpparms_change_macaddr(card);
6417 - if (!rc)
6418 + if (!rc && is_valid_ether_addr(card->dev->dev_addr))
6419 goto out;
6420 QETH_DBF_MESSAGE(2, "READ_MAC Assist failed on device %x: %#x\n",
6421 CARD_DEVID(card), rc);
6422 @@ -917,7 +914,8 @@ static int qeth_l2_setup_netdev(struct qeth_card *card, bool carrier_ok)
6423 PAGE_SIZE * (QDIO_MAX_ELEMENTS_PER_BUFFER - 1));
6424 }
6425
6426 - qeth_l2_request_initial_mac(card);
6427 + if (!is_valid_ether_addr(card->dev->dev_addr))
6428 + qeth_l2_request_initial_mac(card);
6429 netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT);
6430 rc = register_netdev(card->dev);
6431 if (!rc && carrier_ok)
6432 diff --git a/drivers/scsi/aic94xx/aic94xx_init.c b/drivers/scsi/aic94xx/aic94xx_init.c
6433 index 41c4d8abdd4a..38e768057129 100644
6434 --- a/drivers/scsi/aic94xx/aic94xx_init.c
6435 +++ b/drivers/scsi/aic94xx/aic94xx_init.c
6436 @@ -281,7 +281,7 @@ static ssize_t asd_show_dev_rev(struct device *dev,
6437 return snprintf(buf, PAGE_SIZE, "%s\n",
6438 asd_dev_rev[asd_ha->revision_id]);
6439 }
6440 -static DEVICE_ATTR(revision, S_IRUGO, asd_show_dev_rev, NULL);
6441 +static DEVICE_ATTR(aic_revision, S_IRUGO, asd_show_dev_rev, NULL);
6442
6443 static ssize_t asd_show_dev_bios_build(struct device *dev,
6444 struct device_attribute *attr,char *buf)
6445 @@ -478,7 +478,7 @@ static int asd_create_dev_attrs(struct asd_ha_struct *asd_ha)
6446 {
6447 int err;
6448
6449 - err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_revision);
6450 + err = device_create_file(&asd_ha->pcidev->dev, &dev_attr_aic_revision);
6451 if (err)
6452 return err;
6453
6454 @@ -500,13 +500,13 @@ err_update_bios:
6455 err_biosb:
6456 device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
6457 err_rev:
6458 - device_remove_file(&asd_ha->pcidev->dev, &dev_attr_revision);
6459 + device_remove_file(&asd_ha->pcidev->dev, &dev_attr_aic_revision);
6460 return err;
6461 }
6462
6463 static void asd_remove_dev_attrs(struct asd_ha_struct *asd_ha)
6464 {
6465 - device_remove_file(&asd_ha->pcidev->dev, &dev_attr_revision);
6466 + device_remove_file(&asd_ha->pcidev->dev, &dev_attr_aic_revision);
6467 device_remove_file(&asd_ha->pcidev->dev, &dev_attr_bios_build);
6468 device_remove_file(&asd_ha->pcidev->dev, &dev_attr_pcba_sn);
6469 device_remove_file(&asd_ha->pcidev->dev, &dev_attr_update_bios);
6470 diff --git a/drivers/scsi/cxgbi/cxgb4i/Kconfig b/drivers/scsi/cxgbi/cxgb4i/Kconfig
6471 index 594f593c8821..f36b76e8e12c 100644
6472 --- a/drivers/scsi/cxgbi/cxgb4i/Kconfig
6473 +++ b/drivers/scsi/cxgbi/cxgb4i/Kconfig
6474 @@ -1,8 +1,8 @@
6475 config SCSI_CXGB4_ISCSI
6476 tristate "Chelsio T4 iSCSI support"
6477 depends on PCI && INET && (IPV6 || IPV6=n)
6478 - select NETDEVICES
6479 - select ETHERNET
6480 + depends on THERMAL || !THERMAL
6481 + depends on ETHERNET
6482 select NET_VENDOR_CHELSIO
6483 select CHELSIO_T4
6484 select CHELSIO_LIB
6485 diff --git a/drivers/scsi/cxlflash/main.c b/drivers/scsi/cxlflash/main.c
6486 index 6637116529aa..f987c40c47a1 100644
6487 --- a/drivers/scsi/cxlflash/main.c
6488 +++ b/drivers/scsi/cxlflash/main.c
6489 @@ -3694,6 +3694,7 @@ static int cxlflash_probe(struct pci_dev *pdev,
6490 host->max_cmd_len = CXLFLASH_MAX_CDB_LEN;
6491
6492 cfg = shost_priv(host);
6493 + cfg->state = STATE_PROBING;
6494 cfg->host = host;
6495 rc = alloc_mem(cfg);
6496 if (rc) {
6497 @@ -3782,6 +3783,7 @@ out:
6498 return rc;
6499
6500 out_remove:
6501 + cfg->state = STATE_PROBED;
6502 cxlflash_remove(pdev);
6503 goto out;
6504 }
6505 diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
6506 index a369450a1fa7..c3e0be90e19f 100644
6507 --- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
6508 +++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
6509 @@ -494,7 +494,7 @@ static void init_reg_v3_hw(struct hisi_hba *hisi_hba)
6510 hisi_sas_phy_write32(hisi_hba, i, PHYCTRL_OOB_RESTART_MSK, 0x1);
6511 hisi_sas_phy_write32(hisi_hba, i, STP_LINK_TIMER, 0x7f7a120);
6512 hisi_sas_phy_write32(hisi_hba, i, CON_CFG_DRIVER, 0x2a0a01);
6513 -
6514 + hisi_sas_phy_write32(hisi_hba, i, SAS_SSP_CON_TIMER_CFG, 0x32);
6515 /* used for 12G negotiate */
6516 hisi_sas_phy_write32(hisi_hba, i, COARSETUNE_TIME, 0x1e);
6517 hisi_sas_phy_write32(hisi_hba, i, AIP_LIMIT, 0x2ffff);
6518 diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c
6519 index f1c1faa74b46..c2dae02f193e 100644
6520 --- a/drivers/scsi/lpfc/lpfc_els.c
6521 +++ b/drivers/scsi/lpfc/lpfc_els.c
6522 @@ -242,6 +242,8 @@ lpfc_prep_els_iocb(struct lpfc_vport *vport, uint8_t expectRsp,
6523 icmd->ulpCommand = CMD_ELS_REQUEST64_CR;
6524 if (elscmd == ELS_CMD_FLOGI)
6525 icmd->ulpTimeout = FF_DEF_RATOV * 2;
6526 + else if (elscmd == ELS_CMD_LOGO)
6527 + icmd->ulpTimeout = phba->fc_ratov;
6528 else
6529 icmd->ulpTimeout = phba->fc_ratov * 2;
6530 } else {
6531 @@ -2682,16 +2684,15 @@ lpfc_cmpl_els_logo(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
6532 goto out;
6533 }
6534
6535 + /* The LOGO will not be retried on failure. A LOGO was
6536 + * issued to the remote rport and a ACC or RJT or no Answer are
6537 + * all acceptable. Note the failure and move forward with
6538 + * discovery. The PLOGI will retry.
6539 + */
6540 if (irsp->ulpStatus) {
6541 - /* Check for retry */
6542 - if (lpfc_els_retry(phba, cmdiocb, rspiocb)) {
6543 - /* ELS command is being retried */
6544 - skip_recovery = 1;
6545 - goto out;
6546 - }
6547 /* LOGO failed */
6548 lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS,
6549 - "2756 LOGO failure DID:%06X Status:x%x/x%x\n",
6550 + "2756 LOGO failure, No Retry DID:%06X Status:x%x/x%x\n",
6551 ndlp->nlp_DID, irsp->ulpStatus,
6552 irsp->un.ulpWord[4]);
6553 /* Do not call DSM for lpfc_els_abort'ed ELS cmds */
6554 @@ -2737,7 +2738,8 @@ out:
6555 * For any other port type, the rpi is unregistered as an implicit
6556 * LOGO.
6557 */
6558 - if ((ndlp->nlp_type & NLP_FCP_TARGET) && (skip_recovery == 0)) {
6559 + if (ndlp->nlp_type & (NLP_FCP_TARGET | NLP_NVME_TARGET) &&
6560 + skip_recovery == 0) {
6561 lpfc_cancel_retry_delay_tmo(vport, ndlp);
6562 spin_lock_irqsave(shost->host_lock, flags);
6563 ndlp->nlp_flag |= NLP_NPR_2B_DISC;
6564 @@ -2770,6 +2772,8 @@ out:
6565 * will be stored into the context1 field of the IOCB for the completion
6566 * callback function to the LOGO ELS command.
6567 *
6568 + * Callers of this routine are expected to unregister the RPI first
6569 + *
6570 * Return code
6571 * 0 - successfully issued logo
6572 * 1 - failed to issue logo
6573 @@ -2811,22 +2815,6 @@ lpfc_issue_els_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
6574 "Issue LOGO: did:x%x",
6575 ndlp->nlp_DID, 0, 0);
6576
6577 - /*
6578 - * If we are issuing a LOGO, we may try to recover the remote NPort
6579 - * by issuing a PLOGI later. Even though we issue ELS cmds by the
6580 - * VPI, if we have a valid RPI, and that RPI gets unreg'ed while
6581 - * that ELS command is in-flight, the HBA returns a IOERR_INVALID_RPI
6582 - * for that ELS cmd. To avoid this situation, lets get rid of the
6583 - * RPI right now, before any ELS cmds are sent.
6584 - */
6585 - spin_lock_irq(shost->host_lock);
6586 - ndlp->nlp_flag |= NLP_ISSUE_LOGO;
6587 - spin_unlock_irq(shost->host_lock);
6588 - if (lpfc_unreg_rpi(vport, ndlp)) {
6589 - lpfc_els_free_iocb(phba, elsiocb);
6590 - return 0;
6591 - }
6592 -
6593 phba->fc_stat.elsXmitLOGO++;
6594 elsiocb->iocb_cmpl = lpfc_cmpl_els_logo;
6595 spin_lock_irq(shost->host_lock);
6596 @@ -2834,7 +2822,6 @@ lpfc_issue_els_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
6597 ndlp->nlp_flag &= ~NLP_ISSUE_LOGO;
6598 spin_unlock_irq(shost->host_lock);
6599 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, elsiocb, 0);
6600 -
6601 if (rc == IOCB_ERROR) {
6602 spin_lock_irq(shost->host_lock);
6603 ndlp->nlp_flag &= ~NLP_LOGO_SND;
6604 @@ -2842,6 +2829,11 @@ lpfc_issue_els_logo(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp,
6605 lpfc_els_free_iocb(phba, elsiocb);
6606 return 1;
6607 }
6608 +
6609 + spin_lock_irq(shost->host_lock);
6610 + ndlp->nlp_prev_state = ndlp->nlp_state;
6611 + spin_unlock_irq(shost->host_lock);
6612 + lpfc_nlp_set_state(vport, ndlp, NLP_STE_LOGO_ISSUE);
6613 return 0;
6614 }
6615
6616 @@ -5701,6 +5693,9 @@ error:
6617 stat = (struct ls_rjt *)(pcmd + sizeof(uint32_t));
6618 stat->un.b.lsRjtRsnCode = LSRJT_UNABLE_TPC;
6619
6620 + if (shdr_add_status == ADD_STATUS_OPERATION_ALREADY_ACTIVE)
6621 + stat->un.b.lsRjtRsnCodeExp = LSEXP_CMD_IN_PROGRESS;
6622 +
6623 elsiocb->iocb_cmpl = lpfc_cmpl_els_rsp;
6624 phba->fc_stat.elsXmitLSRJT++;
6625 rc = lpfc_sli_issue_iocb(phba, LPFC_ELS_RING, elsiocb, 0);
6626 @@ -9505,7 +9500,8 @@ lpfc_sli_abts_recover_port(struct lpfc_vport *vport,
6627 "rport in state 0x%x\n", ndlp->nlp_state);
6628 return;
6629 }
6630 - lpfc_printf_log(phba, KERN_INFO, LOG_SLI,
6631 + lpfc_printf_log(phba, KERN_ERR,
6632 + LOG_ELS | LOG_FCP_ERROR | LOG_NVME_IOERR,
6633 "3094 Start rport recovery on shost id 0x%x "
6634 "fc_id 0x%06x vpi 0x%x rpi 0x%x state 0x%x "
6635 "flags 0x%x\n",
6636 @@ -9518,8 +9514,8 @@ lpfc_sli_abts_recover_port(struct lpfc_vport *vport,
6637 */
6638 spin_lock_irqsave(shost->host_lock, flags);
6639 ndlp->nlp_fcp_info &= ~NLP_FCP_2_DEVICE;
6640 + ndlp->nlp_flag |= NLP_ISSUE_LOGO;
6641 spin_unlock_irqrestore(shost->host_lock, flags);
6642 - lpfc_issue_els_logo(vport, ndlp, 0);
6643 - lpfc_nlp_set_state(vport, ndlp, NLP_STE_LOGO_ISSUE);
6644 + lpfc_unreg_rpi(vport, ndlp);
6645 }
6646
6647 diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c
6648 index 269808e8480f..394ffbe9cb6d 100644
6649 --- a/drivers/scsi/lpfc/lpfc_nportdisc.c
6650 +++ b/drivers/scsi/lpfc/lpfc_nportdisc.c
6651 @@ -836,7 +836,9 @@ lpfc_disc_set_adisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
6652 struct Scsi_Host *shost = lpfc_shost_from_vport(vport);
6653
6654 if (!(ndlp->nlp_flag & NLP_RPI_REGISTERED)) {
6655 + spin_lock_irq(shost->host_lock);
6656 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
6657 + spin_unlock_irq(shost->host_lock);
6658 return 0;
6659 }
6660
6661 @@ -851,7 +853,10 @@ lpfc_disc_set_adisc(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)
6662 return 1;
6663 }
6664 }
6665 +
6666 + spin_lock_irq(shost->host_lock);
6667 ndlp->nlp_flag &= ~NLP_NPR_ADISC;
6668 + spin_unlock_irq(shost->host_lock);
6669 lpfc_unreg_rpi(vport, ndlp);
6670 return 0;
6671 }
6672 diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
6673 index 03c52847ed07..adac18ba84d4 100644
6674 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
6675 +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
6676 @@ -9641,6 +9641,7 @@ static void scsih_remove(struct pci_dev *pdev)
6677
6678 /* release all the volumes */
6679 _scsih_ir_shutdown(ioc);
6680 + sas_remove_host(shost);
6681 list_for_each_entry_safe(raid_device, next, &ioc->raid_device_list,
6682 list) {
6683 if (raid_device->starget) {
6684 @@ -9682,7 +9683,6 @@ static void scsih_remove(struct pci_dev *pdev)
6685 ioc->sas_hba.num_phys = 0;
6686 }
6687
6688 - sas_remove_host(shost);
6689 mpt3sas_base_detach(ioc);
6690 spin_lock(&gioc_lock);
6691 list_del(&ioc->list);
6692 diff --git a/drivers/scsi/mpt3sas/mpt3sas_transport.c b/drivers/scsi/mpt3sas/mpt3sas_transport.c
6693 index 6a8a3c09b4b1..8338b4db0e31 100644
6694 --- a/drivers/scsi/mpt3sas/mpt3sas_transport.c
6695 +++ b/drivers/scsi/mpt3sas/mpt3sas_transport.c
6696 @@ -821,10 +821,13 @@ mpt3sas_transport_port_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
6697 mpt3sas_port->remote_identify.sas_address,
6698 mpt3sas_phy->phy_id);
6699 mpt3sas_phy->phy_belongs_to_port = 0;
6700 - sas_port_delete_phy(mpt3sas_port->port, mpt3sas_phy->phy);
6701 + if (!ioc->remove_host)
6702 + sas_port_delete_phy(mpt3sas_port->port,
6703 + mpt3sas_phy->phy);
6704 list_del(&mpt3sas_phy->port_siblings);
6705 }
6706 - sas_port_delete(mpt3sas_port->port);
6707 + if (!ioc->remove_host)
6708 + sas_port_delete(mpt3sas_port->port);
6709 kfree(mpt3sas_port);
6710 }
6711
6712 diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c
6713 index e06c48c866e4..3f81bab48ac2 100644
6714 --- a/drivers/scsi/sd_zbc.c
6715 +++ b/drivers/scsi/sd_zbc.c
6716 @@ -462,12 +462,16 @@ int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buf)
6717 sdkp->device->use_10_for_rw = 0;
6718
6719 /*
6720 - * If something changed, revalidate the disk zone bitmaps once we have
6721 - * the capacity, that is on the second revalidate execution during disk
6722 - * scan and always during normal revalidate.
6723 + * Revalidate the disk zone bitmaps once the block device capacity is
6724 + * set on the second revalidate execution during disk scan and if
6725 + * something changed when executing a normal revalidate.
6726 */
6727 - if (sdkp->first_scan)
6728 + if (sdkp->first_scan) {
6729 + sdkp->zone_blocks = zone_blocks;
6730 + sdkp->nr_zones = nr_zones;
6731 return 0;
6732 + }
6733 +
6734 if (sdkp->zone_blocks != zone_blocks ||
6735 sdkp->nr_zones != nr_zones ||
6736 disk->queue->nr_zones != nr_zones) {
6737 diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c
6738 index 6f4cb3be97aa..489e5cbbcbba 100644
6739 --- a/drivers/scsi/smartpqi/smartpqi_init.c
6740 +++ b/drivers/scsi/smartpqi/smartpqi_init.c
6741 @@ -640,6 +640,7 @@ struct bmic_host_wellness_driver_version {
6742 u8 driver_version_tag[2];
6743 __le16 driver_version_length;
6744 char driver_version[32];
6745 + u8 dont_write_tag[2];
6746 u8 end_tag[2];
6747 };
6748
6749 @@ -669,6 +670,8 @@ static int pqi_write_driver_version_to_host_wellness(
6750 strncpy(buffer->driver_version, "Linux " DRIVER_VERSION,
6751 sizeof(buffer->driver_version) - 1);
6752 buffer->driver_version[sizeof(buffer->driver_version) - 1] = '\0';
6753 + buffer->dont_write_tag[0] = 'D';
6754 + buffer->dont_write_tag[1] = 'W';
6755 buffer->end_tag[0] = 'Z';
6756 buffer->end_tag[1] = 'Z';
6757
6758 @@ -1165,6 +1168,9 @@ static void pqi_get_volume_status(struct pqi_ctrl_info *ctrl_info,
6759 if (rc)
6760 goto out;
6761
6762 + if (vpd->page_code != CISS_VPD_LV_STATUS)
6763 + goto out;
6764 +
6765 page_length = offsetof(struct ciss_vpd_logical_volume_status,
6766 volume_status) + vpd->page_length;
6767 if (page_length < sizeof(*vpd))
6768 diff --git a/drivers/scsi/smartpqi/smartpqi_sis.c b/drivers/scsi/smartpqi/smartpqi_sis.c
6769 index ea91658c7060..9d3043df22af 100644
6770 --- a/drivers/scsi/smartpqi/smartpqi_sis.c
6771 +++ b/drivers/scsi/smartpqi/smartpqi_sis.c
6772 @@ -59,7 +59,7 @@
6773
6774 #define SIS_CTRL_KERNEL_UP 0x80
6775 #define SIS_CTRL_KERNEL_PANIC 0x100
6776 -#define SIS_CTRL_READY_TIMEOUT_SECS 30
6777 +#define SIS_CTRL_READY_TIMEOUT_SECS 180
6778 #define SIS_CTRL_READY_RESUME_TIMEOUT_SECS 90
6779 #define SIS_CTRL_READY_POLL_INTERVAL_MSECS 10
6780
6781 diff --git a/drivers/soc/bcm/brcmstb/common.c b/drivers/soc/bcm/brcmstb/common.c
6782 index 14185451901d..bf9123f727e8 100644
6783 --- a/drivers/soc/bcm/brcmstb/common.c
6784 +++ b/drivers/soc/bcm/brcmstb/common.c
6785 @@ -31,13 +31,17 @@ static const struct of_device_id brcmstb_machine_match[] = {
6786
6787 bool soc_is_brcmstb(void)
6788 {
6789 + const struct of_device_id *match;
6790 struct device_node *root;
6791
6792 root = of_find_node_by_path("/");
6793 if (!root)
6794 return false;
6795
6796 - return of_match_node(brcmstb_machine_match, root) != NULL;
6797 + match = of_match_node(brcmstb_machine_match, root);
6798 + of_node_put(root);
6799 +
6800 + return match != NULL;
6801 }
6802
6803 u32 brcmstb_get_family_id(void)
6804 diff --git a/drivers/soc/tegra/common.c b/drivers/soc/tegra/common.c
6805 index cd8f41351add..7bfb154d6fa5 100644
6806 --- a/drivers/soc/tegra/common.c
6807 +++ b/drivers/soc/tegra/common.c
6808 @@ -22,11 +22,15 @@ static const struct of_device_id tegra_machine_match[] = {
6809
6810 bool soc_is_tegra(void)
6811 {
6812 + const struct of_device_id *match;
6813 struct device_node *root;
6814
6815 root = of_find_node_by_path("/");
6816 if (!root)
6817 return false;
6818
6819 - return of_match_node(tegra_machine_match, root) != NULL;
6820 + match = of_match_node(tegra_machine_match, root);
6821 + of_node_put(root);
6822 +
6823 + return match != NULL;
6824 }
6825 diff --git a/drivers/spi/spi-at91-usart.c b/drivers/spi/spi-at91-usart.c
6826 index a924657642fa..08bcbd1f9aa2 100644
6827 --- a/drivers/spi/spi-at91-usart.c
6828 +++ b/drivers/spi/spi-at91-usart.c
6829 @@ -12,6 +12,7 @@
6830 #include <linux/kernel.h>
6831 #include <linux/module.h>
6832 #include <linux/of_gpio.h>
6833 +#include <linux/pinctrl/consumer.h>
6834 #include <linux/platform_device.h>
6835
6836 #include <linux/spi/spi.h>
6837 diff --git a/drivers/staging/erofs/internal.h b/drivers/staging/erofs/internal.h
6838 index 57575c7f5635..3ac4599bbe01 100644
6839 --- a/drivers/staging/erofs/internal.h
6840 +++ b/drivers/staging/erofs/internal.h
6841 @@ -39,7 +39,7 @@
6842 #define debugln(x, ...) ((void)0)
6843
6844 #define dbg_might_sleep() ((void)0)
6845 -#define DBG_BUGON(...) ((void)0)
6846 +#define DBG_BUGON(x) ((void)(x))
6847 #endif
6848
6849 enum {
6850 @@ -250,6 +250,7 @@ repeat:
6851 }
6852
6853 #define __erofs_workgroup_get(grp) atomic_inc(&(grp)->refcount)
6854 +#define __erofs_workgroup_put(grp) atomic_dec(&(grp)->refcount)
6855
6856 extern int erofs_workgroup_put(struct erofs_workgroup *grp);
6857
6858 diff --git a/drivers/staging/erofs/utils.c b/drivers/staging/erofs/utils.c
6859 index ea8a962e5c95..d2e3ace91046 100644
6860 --- a/drivers/staging/erofs/utils.c
6861 +++ b/drivers/staging/erofs/utils.c
6862 @@ -83,12 +83,21 @@ int erofs_register_workgroup(struct super_block *sb,
6863
6864 grp = xa_tag_pointer(grp, tag);
6865
6866 - err = radix_tree_insert(&sbi->workstn_tree,
6867 - grp->index, grp);
6868 + /*
6869 + * Bump up reference count before making this workgroup
6870 + * visible to other users in order to avoid potential UAF
6871 + * without serialized by erofs_workstn_lock.
6872 + */
6873 + __erofs_workgroup_get(grp);
6874
6875 - if (!err) {
6876 - __erofs_workgroup_get(grp);
6877 - }
6878 + err = radix_tree_insert(&sbi->workstn_tree,
6879 + grp->index, grp);
6880 + if (unlikely(err))
6881 + /*
6882 + * it's safe to decrease since the workgroup isn't visible
6883 + * and refcount >= 2 (cannot be freezed).
6884 + */
6885 + __erofs_workgroup_put(grp);
6886
6887 erofs_workstn_unlock(sbi);
6888 radix_tree_preload_end();
6889 @@ -97,19 +106,94 @@ int erofs_register_workgroup(struct super_block *sb,
6890
6891 extern void erofs_workgroup_free_rcu(struct erofs_workgroup *grp);
6892
6893 +static void __erofs_workgroup_free(struct erofs_workgroup *grp)
6894 +{
6895 + atomic_long_dec(&erofs_global_shrink_cnt);
6896 + erofs_workgroup_free_rcu(grp);
6897 +}
6898 +
6899 int erofs_workgroup_put(struct erofs_workgroup *grp)
6900 {
6901 int count = atomic_dec_return(&grp->refcount);
6902
6903 if (count == 1)
6904 atomic_long_inc(&erofs_global_shrink_cnt);
6905 - else if (!count) {
6906 - atomic_long_dec(&erofs_global_shrink_cnt);
6907 - erofs_workgroup_free_rcu(grp);
6908 - }
6909 + else if (!count)
6910 + __erofs_workgroup_free(grp);
6911 return count;
6912 }
6913
6914 +#ifdef EROFS_FS_HAS_MANAGED_CACHE
6915 +/* for cache-managed case, customized reclaim paths exist */
6916 +static void erofs_workgroup_unfreeze_final(struct erofs_workgroup *grp)
6917 +{
6918 + erofs_workgroup_unfreeze(grp, 0);
6919 + __erofs_workgroup_free(grp);
6920 +}
6921 +
6922 +bool erofs_try_to_release_workgroup(struct erofs_sb_info *sbi,
6923 + struct erofs_workgroup *grp,
6924 + bool cleanup)
6925 +{
6926 + /*
6927 + * for managed cache enabled, the refcount of workgroups
6928 + * themselves could be < 0 (freezed). So there is no guarantee
6929 + * that all refcount > 0 if managed cache is enabled.
6930 + */
6931 + if (!erofs_workgroup_try_to_freeze(grp, 1))
6932 + return false;
6933 +
6934 + /*
6935 + * note that all cached pages should be unlinked
6936 + * before delete it from the radix tree.
6937 + * Otherwise some cached pages of an orphan old workgroup
6938 + * could be still linked after the new one is available.
6939 + */
6940 + if (erofs_try_to_free_all_cached_pages(sbi, grp)) {
6941 + erofs_workgroup_unfreeze(grp, 1);
6942 + return false;
6943 + }
6944 +
6945 + /*
6946 + * it is impossible to fail after the workgroup is freezed,
6947 + * however in order to avoid some race conditions, add a
6948 + * DBG_BUGON to observe this in advance.
6949 + */
6950 + DBG_BUGON(xa_untag_pointer(radix_tree_delete(&sbi->workstn_tree,
6951 + grp->index)) != grp);
6952 +
6953 + /*
6954 + * if managed cache is enable, the last refcount
6955 + * should indicate the related workstation.
6956 + */
6957 + erofs_workgroup_unfreeze_final(grp);
6958 + return true;
6959 +}
6960 +
6961 +#else
6962 +/* for nocache case, no customized reclaim path at all */
6963 +bool erofs_try_to_release_workgroup(struct erofs_sb_info *sbi,
6964 + struct erofs_workgroup *grp,
6965 + bool cleanup)
6966 +{
6967 + int cnt = atomic_read(&grp->refcount);
6968 +
6969 + DBG_BUGON(cnt <= 0);
6970 + DBG_BUGON(cleanup && cnt != 1);
6971 +
6972 + if (cnt > 1)
6973 + return false;
6974 +
6975 + DBG_BUGON(xa_untag_pointer(radix_tree_delete(&sbi->workstn_tree,
6976 + grp->index)) != grp);
6977 +
6978 + /* (rarely) could be grabbed again when freeing */
6979 + erofs_workgroup_put(grp);
6980 + return true;
6981 +}
6982 +
6983 +#endif
6984 +
6985 unsigned long erofs_shrink_workstation(struct erofs_sb_info *sbi,
6986 unsigned long nr_shrink,
6987 bool cleanup)
6988 @@ -126,42 +210,14 @@ repeat:
6989 batch, first_index, PAGEVEC_SIZE);
6990
6991 for (i = 0; i < found; ++i) {
6992 - int cnt;
6993 struct erofs_workgroup *grp = xa_untag_pointer(batch[i]);
6994
6995 first_index = grp->index + 1;
6996
6997 - cnt = atomic_read(&grp->refcount);
6998 - BUG_ON(cnt <= 0);
6999 -
7000 - if (cleanup)
7001 - BUG_ON(cnt != 1);
7002 -
7003 -#ifndef EROFS_FS_HAS_MANAGED_CACHE
7004 - else if (cnt > 1)
7005 -#else
7006 - if (!erofs_workgroup_try_to_freeze(grp, 1))
7007 -#endif
7008 + /* try to shrink each valid workgroup */
7009 + if (!erofs_try_to_release_workgroup(sbi, grp, cleanup))
7010 continue;
7011
7012 - if (xa_untag_pointer(radix_tree_delete(&sbi->workstn_tree,
7013 - grp->index)) != grp) {
7014 -#ifdef EROFS_FS_HAS_MANAGED_CACHE
7015 -skip:
7016 - erofs_workgroup_unfreeze(grp, 1);
7017 -#endif
7018 - continue;
7019 - }
7020 -
7021 -#ifdef EROFS_FS_HAS_MANAGED_CACHE
7022 - if (erofs_try_to_free_all_cached_pages(sbi, grp))
7023 - goto skip;
7024 -
7025 - erofs_workgroup_unfreeze(grp, 1);
7026 -#endif
7027 - /* (rarely) grabbed again when freeing */
7028 - erofs_workgroup_put(grp);
7029 -
7030 ++freed;
7031 if (unlikely(!--nr_shrink))
7032 break;
7033 diff --git a/drivers/staging/iio/adc/ad7280a.c b/drivers/staging/iio/adc/ad7280a.c
7034 index 58420dcb406d..cbeb52485a31 100644
7035 --- a/drivers/staging/iio/adc/ad7280a.c
7036 +++ b/drivers/staging/iio/adc/ad7280a.c
7037 @@ -256,7 +256,9 @@ static int ad7280_read(struct ad7280_state *st, unsigned int devaddr,
7038 if (ret)
7039 return ret;
7040
7041 - __ad7280_read32(st, &tmp);
7042 + ret = __ad7280_read32(st, &tmp);
7043 + if (ret)
7044 + return ret;
7045
7046 if (ad7280_check_crc(st, tmp))
7047 return -EIO;
7048 @@ -294,7 +296,9 @@ static int ad7280_read_channel(struct ad7280_state *st, unsigned int devaddr,
7049
7050 ad7280_delay(st);
7051
7052 - __ad7280_read32(st, &tmp);
7053 + ret = __ad7280_read32(st, &tmp);
7054 + if (ret)
7055 + return ret;
7056
7057 if (ad7280_check_crc(st, tmp))
7058 return -EIO;
7059 @@ -327,7 +331,9 @@ static int ad7280_read_all_channels(struct ad7280_state *st, unsigned int cnt,
7060 ad7280_delay(st);
7061
7062 for (i = 0; i < cnt; i++) {
7063 - __ad7280_read32(st, &tmp);
7064 + ret = __ad7280_read32(st, &tmp);
7065 + if (ret)
7066 + return ret;
7067
7068 if (ad7280_check_crc(st, tmp))
7069 return -EIO;
7070 @@ -370,7 +376,10 @@ static int ad7280_chain_setup(struct ad7280_state *st)
7071 return ret;
7072
7073 for (n = 0; n <= AD7280A_MAX_CHAIN; n++) {
7074 - __ad7280_read32(st, &val);
7075 + ret = __ad7280_read32(st, &val);
7076 + if (ret)
7077 + return ret;
7078 +
7079 if (val == 0)
7080 return n - 1;
7081
7082 diff --git a/drivers/staging/iio/adc/ad7780.c b/drivers/staging/iio/adc/ad7780.c
7083 index b67412db0318..c7cb05cedbbc 100644
7084 --- a/drivers/staging/iio/adc/ad7780.c
7085 +++ b/drivers/staging/iio/adc/ad7780.c
7086 @@ -87,12 +87,16 @@ static int ad7780_read_raw(struct iio_dev *indio_dev,
7087 long m)
7088 {
7089 struct ad7780_state *st = iio_priv(indio_dev);
7090 + int voltage_uv;
7091
7092 switch (m) {
7093 case IIO_CHAN_INFO_RAW:
7094 return ad_sigma_delta_single_conversion(indio_dev, chan, val);
7095 case IIO_CHAN_INFO_SCALE:
7096 - *val = st->int_vref_mv * st->gain;
7097 + voltage_uv = regulator_get_voltage(st->reg);
7098 + if (voltage_uv < 0)
7099 + return voltage_uv;
7100 + *val = (voltage_uv / 1000) * st->gain;
7101 *val2 = chan->scan_type.realbits - 1;
7102 return IIO_VAL_FRACTIONAL_LOG2;
7103 case IIO_CHAN_INFO_OFFSET:
7104 diff --git a/drivers/staging/iio/resolver/ad2s90.c b/drivers/staging/iio/resolver/ad2s90.c
7105 index 59586947a936..51cda9151412 100644
7106 --- a/drivers/staging/iio/resolver/ad2s90.c
7107 +++ b/drivers/staging/iio/resolver/ad2s90.c
7108 @@ -85,7 +85,12 @@ static int ad2s90_probe(struct spi_device *spi)
7109 /* need 600ns between CS and the first falling edge of SCLK */
7110 spi->max_speed_hz = 830000;
7111 spi->mode = SPI_MODE_3;
7112 - spi_setup(spi);
7113 + ret = spi_setup(spi);
7114 +
7115 + if (ret < 0) {
7116 + dev_err(&spi->dev, "spi_setup failed!\n");
7117 + return ret;
7118 + }
7119
7120 return 0;
7121 }
7122 diff --git a/drivers/staging/pi433/pi433_if.c b/drivers/staging/pi433/pi433_if.c
7123 index c85a805a1243..a497ec197872 100644
7124 --- a/drivers/staging/pi433/pi433_if.c
7125 +++ b/drivers/staging/pi433/pi433_if.c
7126 @@ -1255,6 +1255,10 @@ static int pi433_probe(struct spi_device *spi)
7127
7128 /* create cdev */
7129 device->cdev = cdev_alloc();
7130 + if (!device->cdev) {
7131 + dev_dbg(device->dev, "allocation of cdev failed");
7132 + goto cdev_failed;
7133 + }
7134 device->cdev->owner = THIS_MODULE;
7135 cdev_init(device->cdev, &pi433_fops);
7136 retval = cdev_add(device->cdev, device->devt, 1);
7137 diff --git a/drivers/staging/speakup/spk_ttyio.c b/drivers/staging/speakup/spk_ttyio.c
7138 index 979e3ae249c1..033be0ad03e7 100644
7139 --- a/drivers/staging/speakup/spk_ttyio.c
7140 +++ b/drivers/staging/speakup/spk_ttyio.c
7141 @@ -265,7 +265,8 @@ static void spk_ttyio_send_xchar(char ch)
7142 return;
7143 }
7144
7145 - speakup_tty->ops->send_xchar(speakup_tty, ch);
7146 + if (speakup_tty->ops->send_xchar)
7147 + speakup_tty->ops->send_xchar(speakup_tty, ch);
7148 mutex_unlock(&speakup_tty_mutex);
7149 }
7150
7151 @@ -277,7 +278,8 @@ static void spk_ttyio_tiocmset(unsigned int set, unsigned int clear)
7152 return;
7153 }
7154
7155 - speakup_tty->ops->tiocmset(speakup_tty, set, clear);
7156 + if (speakup_tty->ops->tiocmset)
7157 + speakup_tty->ops->tiocmset(speakup_tty, set, clear);
7158 mutex_unlock(&speakup_tty_mutex);
7159 }
7160
7161 diff --git a/drivers/tee/optee/supp.c b/drivers/tee/optee/supp.c
7162 index df35fc01fd3e..43626e15703a 100644
7163 --- a/drivers/tee/optee/supp.c
7164 +++ b/drivers/tee/optee/supp.c
7165 @@ -19,7 +19,7 @@
7166 struct optee_supp_req {
7167 struct list_head link;
7168
7169 - bool busy;
7170 + bool in_queue;
7171 u32 func;
7172 u32 ret;
7173 size_t num_params;
7174 @@ -54,7 +54,6 @@ void optee_supp_release(struct optee_supp *supp)
7175
7176 /* Abort all request retrieved by supplicant */
7177 idr_for_each_entry(&supp->idr, req, id) {
7178 - req->busy = false;
7179 idr_remove(&supp->idr, id);
7180 req->ret = TEEC_ERROR_COMMUNICATION;
7181 complete(&req->c);
7182 @@ -63,6 +62,7 @@ void optee_supp_release(struct optee_supp *supp)
7183 /* Abort all queued requests */
7184 list_for_each_entry_safe(req, req_tmp, &supp->reqs, link) {
7185 list_del(&req->link);
7186 + req->in_queue = false;
7187 req->ret = TEEC_ERROR_COMMUNICATION;
7188 complete(&req->c);
7189 }
7190 @@ -103,6 +103,7 @@ u32 optee_supp_thrd_req(struct tee_context *ctx, u32 func, size_t num_params,
7191 /* Insert the request in the request list */
7192 mutex_lock(&supp->mutex);
7193 list_add_tail(&req->link, &supp->reqs);
7194 + req->in_queue = true;
7195 mutex_unlock(&supp->mutex);
7196
7197 /* Tell an eventual waiter there's a new request */
7198 @@ -130,9 +131,10 @@ u32 optee_supp_thrd_req(struct tee_context *ctx, u32 func, size_t num_params,
7199 * will serve all requests in a timely manner and
7200 * interrupting then wouldn't make sense.
7201 */
7202 - interruptable = !req->busy;
7203 - if (!req->busy)
7204 + if (req->in_queue) {
7205 list_del(&req->link);
7206 + req->in_queue = false;
7207 + }
7208 }
7209 mutex_unlock(&supp->mutex);
7210
7211 @@ -176,7 +178,7 @@ static struct optee_supp_req *supp_pop_entry(struct optee_supp *supp,
7212 return ERR_PTR(-ENOMEM);
7213
7214 list_del(&req->link);
7215 - req->busy = true;
7216 + req->in_queue = false;
7217
7218 return req;
7219 }
7220 @@ -318,7 +320,6 @@ static struct optee_supp_req *supp_pop_req(struct optee_supp *supp,
7221 if ((num_params - nm) != req->num_params)
7222 return ERR_PTR(-EINVAL);
7223
7224 - req->busy = false;
7225 idr_remove(&supp->idr, id);
7226 supp->req_id = -1;
7227 *num_meta = nm;
7228 diff --git a/drivers/thermal/broadcom/bcm2835_thermal.c b/drivers/thermal/broadcom/bcm2835_thermal.c
7229 index b9d90f0ed504..720760cd493f 100644
7230 --- a/drivers/thermal/broadcom/bcm2835_thermal.c
7231 +++ b/drivers/thermal/broadcom/bcm2835_thermal.c
7232 @@ -18,6 +18,8 @@
7233 #include <linux/platform_device.h>
7234 #include <linux/thermal.h>
7235
7236 +#include "../thermal_hwmon.h"
7237 +
7238 #define BCM2835_TS_TSENSCTL 0x00
7239 #define BCM2835_TS_TSENSSTAT 0x04
7240
7241 @@ -266,6 +268,15 @@ static int bcm2835_thermal_probe(struct platform_device *pdev)
7242
7243 platform_set_drvdata(pdev, tz);
7244
7245 + /*
7246 + * Thermal_zone doesn't enable hwmon as default,
7247 + * enable it here
7248 + */
7249 + tz->tzp->no_hwmon = false;
7250 + err = thermal_add_hwmon_sysfs(tz);
7251 + if (err)
7252 + goto err_tz;
7253 +
7254 bcm2835_thermal_debugfs(pdev);
7255
7256 return 0;
7257 diff --git a/drivers/thermal/qcom/tsens-common.c b/drivers/thermal/qcom/tsens-common.c
7258 index 3be4be2e0465..78652cac7f3d 100644
7259 --- a/drivers/thermal/qcom/tsens-common.c
7260 +++ b/drivers/thermal/qcom/tsens-common.c
7261 @@ -114,6 +114,14 @@ int get_temp_common(struct tsens_device *tmdev, int id, int *temp)
7262 }
7263
7264 static const struct regmap_config tsens_config = {
7265 + .name = "tm",
7266 + .reg_bits = 32,
7267 + .val_bits = 32,
7268 + .reg_stride = 4,
7269 +};
7270 +
7271 +static const struct regmap_config tsens_srot_config = {
7272 + .name = "srot",
7273 .reg_bits = 32,
7274 .val_bits = 32,
7275 .reg_stride = 4,
7276 @@ -139,8 +147,8 @@ int __init init_common(struct tsens_device *tmdev)
7277 if (IS_ERR(srot_base))
7278 return PTR_ERR(srot_base);
7279
7280 - tmdev->srot_map = devm_regmap_init_mmio(tmdev->dev,
7281 - srot_base, &tsens_config);
7282 + tmdev->srot_map = devm_regmap_init_mmio(tmdev->dev, srot_base,
7283 + &tsens_srot_config);
7284 if (IS_ERR(tmdev->srot_map))
7285 return PTR_ERR(tmdev->srot_map);
7286
7287 diff --git a/drivers/thermal/thermal-generic-adc.c b/drivers/thermal/thermal-generic-adc.c
7288 index bf1c628d4a7a..e22fc60ad36d 100644
7289 --- a/drivers/thermal/thermal-generic-adc.c
7290 +++ b/drivers/thermal/thermal-generic-adc.c
7291 @@ -26,7 +26,7 @@ struct gadc_thermal_info {
7292
7293 static int gadc_thermal_adc_to_temp(struct gadc_thermal_info *gti, int val)
7294 {
7295 - int temp, adc_hi, adc_lo;
7296 + int temp, temp_hi, temp_lo, adc_hi, adc_lo;
7297 int i;
7298
7299 for (i = 0; i < gti->nlookup_table; i++) {
7300 @@ -36,13 +36,17 @@ static int gadc_thermal_adc_to_temp(struct gadc_thermal_info *gti, int val)
7301
7302 if (i == 0) {
7303 temp = gti->lookup_table[0];
7304 - } else if (i >= (gti->nlookup_table - 1)) {
7305 + } else if (i >= gti->nlookup_table) {
7306 temp = gti->lookup_table[2 * (gti->nlookup_table - 1)];
7307 } else {
7308 adc_hi = gti->lookup_table[2 * i - 1];
7309 adc_lo = gti->lookup_table[2 * i + 1];
7310 - temp = gti->lookup_table[2 * i];
7311 - temp -= ((val - adc_lo) * 1000) / (adc_hi - adc_lo);
7312 +
7313 + temp_hi = gti->lookup_table[2 * i - 2];
7314 + temp_lo = gti->lookup_table[2 * i];
7315 +
7316 + temp = temp_hi + mult_frac(temp_lo - temp_hi, val - adc_hi,
7317 + adc_lo - adc_hi);
7318 }
7319
7320 return temp;
7321 diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
7322 index d6ebc1cf6aa9..3a014cd8daf0 100644
7323 --- a/drivers/thermal/thermal_core.c
7324 +++ b/drivers/thermal/thermal_core.c
7325 @@ -453,16 +453,20 @@ static void update_temperature(struct thermal_zone_device *tz)
7326 tz->last_temperature, tz->temperature);
7327 }
7328
7329 -static void thermal_zone_device_reset(struct thermal_zone_device *tz)
7330 +static void thermal_zone_device_init(struct thermal_zone_device *tz)
7331 {
7332 struct thermal_instance *pos;
7333 -
7334 tz->temperature = THERMAL_TEMP_INVALID;
7335 - tz->passive = 0;
7336 list_for_each_entry(pos, &tz->thermal_instances, tz_node)
7337 pos->initialized = false;
7338 }
7339
7340 +static void thermal_zone_device_reset(struct thermal_zone_device *tz)
7341 +{
7342 + tz->passive = 0;
7343 + thermal_zone_device_init(tz);
7344 +}
7345 +
7346 void thermal_zone_device_update(struct thermal_zone_device *tz,
7347 enum thermal_notify_event event)
7348 {
7349 @@ -1504,7 +1508,7 @@ static int thermal_pm_notify(struct notifier_block *nb,
7350 case PM_POST_SUSPEND:
7351 atomic_set(&in_suspend, 0);
7352 list_for_each_entry(tz, &thermal_tz_list, node) {
7353 - thermal_zone_device_reset(tz);
7354 + thermal_zone_device_init(tz);
7355 thermal_zone_device_update(tz,
7356 THERMAL_EVENT_UNSPECIFIED);
7357 }
7358 diff --git a/drivers/thermal/thermal_hwmon.h b/drivers/thermal/thermal_hwmon.h
7359 index 019f6f88224e..a160b9d62dd0 100644
7360 --- a/drivers/thermal/thermal_hwmon.h
7361 +++ b/drivers/thermal/thermal_hwmon.h
7362 @@ -19,13 +19,13 @@
7363 int thermal_add_hwmon_sysfs(struct thermal_zone_device *tz);
7364 void thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz);
7365 #else
7366 -static int
7367 +static inline int
7368 thermal_add_hwmon_sysfs(struct thermal_zone_device *tz)
7369 {
7370 return 0;
7371 }
7372
7373 -static void
7374 +static inline void
7375 thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz)
7376 {
7377 }
7378 diff --git a/drivers/thermal/thermal_sysfs.c b/drivers/thermal/thermal_sysfs.c
7379 index 2241ceae7d7f..aa99edb4dff7 100644
7380 --- a/drivers/thermal/thermal_sysfs.c
7381 +++ b/drivers/thermal/thermal_sysfs.c
7382 @@ -712,11 +712,14 @@ cur_state_store(struct device *dev, struct device_attribute *attr,
7383 if ((long)state < 0)
7384 return -EINVAL;
7385
7386 + mutex_lock(&cdev->lock);
7387 +
7388 result = cdev->ops->set_cur_state(cdev, state);
7389 - if (result)
7390 - return result;
7391 - thermal_cooling_device_stats_update(cdev, state);
7392 - return count;
7393 + if (!result)
7394 + thermal_cooling_device_stats_update(cdev, state);
7395 +
7396 + mutex_unlock(&cdev->lock);
7397 + return result ? result : count;
7398 }
7399
7400 static struct device_attribute
7401 diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
7402 index f80a300b5d68..48bd694a5fa1 100644
7403 --- a/drivers/tty/serial/8250/8250_pci.c
7404 +++ b/drivers/tty/serial/8250/8250_pci.c
7405 @@ -3420,6 +3420,11 @@ static int
7406 serial_pci_guess_board(struct pci_dev *dev, struct pciserial_board *board)
7407 {
7408 int num_iomem, num_port, first_port = -1, i;
7409 + int rc;
7410 +
7411 + rc = serial_pci_is_class_communication(dev);
7412 + if (rc)
7413 + return rc;
7414
7415 /*
7416 * Should we try to make guesses for multiport serial devices later?
7417 @@ -3647,10 +3652,6 @@ pciserial_init_one(struct pci_dev *dev, const struct pci_device_id *ent)
7418
7419 board = &pci_boards[ent->driver_data];
7420
7421 - rc = serial_pci_is_class_communication(dev);
7422 - if (rc)
7423 - return rc;
7424 -
7425 rc = serial_pci_is_blacklisted(dev);
7426 if (rc)
7427 return rc;
7428 diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
7429 index 00c220e4f43c..086642ea4b26 100644
7430 --- a/drivers/tty/serial/fsl_lpuart.c
7431 +++ b/drivers/tty/serial/fsl_lpuart.c
7432 @@ -1479,6 +1479,8 @@ lpuart_set_termios(struct uart_port *port, struct ktermios *termios,
7433 else
7434 cr1 &= ~UARTCR1_PT;
7435 }
7436 + } else {
7437 + cr1 &= ~UARTCR1_PE;
7438 }
7439
7440 /* ask the core to calculate the divisor */
7441 @@ -1690,6 +1692,8 @@ lpuart32_set_termios(struct uart_port *port, struct ktermios *termios,
7442 else
7443 ctrl &= ~UARTCTRL_PT;
7444 }
7445 + } else {
7446 + ctrl &= ~UARTCTRL_PE;
7447 }
7448
7449 /* ask the core to calculate the divisor */
7450 diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
7451 index da1bd4bba8a9..2a49b6d876b8 100644
7452 --- a/drivers/tty/serial/samsung.c
7453 +++ b/drivers/tty/serial/samsung.c
7454 @@ -1365,11 +1365,14 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,
7455 wr_regl(port, S3C2410_ULCON, ulcon);
7456 wr_regl(port, S3C2410_UBRDIV, quot);
7457
7458 + port->status &= ~UPSTAT_AUTOCTS;
7459 +
7460 umcon = rd_regl(port, S3C2410_UMCON);
7461 if (termios->c_cflag & CRTSCTS) {
7462 umcon |= S3C2410_UMCOM_AFC;
7463 /* Disable RTS when RX FIFO contains 63 bytes */
7464 umcon &= ~S3C2412_UMCON_AFC_8;
7465 + port->status = UPSTAT_AUTOCTS;
7466 } else {
7467 umcon &= ~S3C2410_UMCOM_AFC;
7468 }
7469 diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
7470 index 5c01bb6d1c24..556f50aa1b58 100644
7471 --- a/drivers/tty/serial/serial_core.c
7472 +++ b/drivers/tty/serial/serial_core.c
7473 @@ -130,6 +130,9 @@ static void uart_start(struct tty_struct *tty)
7474 struct uart_port *port;
7475 unsigned long flags;
7476
7477 + if (!state)
7478 + return;
7479 +
7480 port = uart_port_lock(state, flags);
7481 __uart_start(tty);
7482 uart_port_unlock(port, flags);
7483 @@ -727,6 +730,9 @@ static void uart_unthrottle(struct tty_struct *tty)
7484 upstat_t mask = UPSTAT_SYNC_FIFO;
7485 struct uart_port *port;
7486
7487 + if (!state)
7488 + return;
7489 +
7490 port = uart_port_ref(state);
7491 if (!port)
7492 return;
7493 diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
7494 index cc56cb3b3eca..014944a41613 100644
7495 --- a/drivers/tty/serial/sh-sci.c
7496 +++ b/drivers/tty/serial/sh-sci.c
7497 @@ -1331,7 +1331,7 @@ static void sci_tx_dma_release(struct sci_port *s)
7498 dma_release_channel(chan);
7499 }
7500
7501 -static void sci_submit_rx(struct sci_port *s)
7502 +static int sci_submit_rx(struct sci_port *s, bool port_lock_held)
7503 {
7504 struct dma_chan *chan = s->chan_rx;
7505 struct uart_port *port = &s->port;
7506 @@ -1359,19 +1359,22 @@ static void sci_submit_rx(struct sci_port *s)
7507 s->active_rx = s->cookie_rx[0];
7508
7509 dma_async_issue_pending(chan);
7510 - return;
7511 + return 0;
7512
7513 fail:
7514 + /* Switch to PIO */
7515 + if (!port_lock_held)
7516 + spin_lock_irqsave(&port->lock, flags);
7517 if (i)
7518 dmaengine_terminate_async(chan);
7519 for (i = 0; i < 2; i++)
7520 s->cookie_rx[i] = -EINVAL;
7521 s->active_rx = -EINVAL;
7522 - /* Switch to PIO */
7523 - spin_lock_irqsave(&port->lock, flags);
7524 s->chan_rx = NULL;
7525 sci_start_rx(port);
7526 - spin_unlock_irqrestore(&port->lock, flags);
7527 + if (!port_lock_held)
7528 + spin_unlock_irqrestore(&port->lock, flags);
7529 + return -EAGAIN;
7530 }
7531
7532 static void work_fn_tx(struct work_struct *work)
7533 @@ -1491,7 +1494,7 @@ static enum hrtimer_restart rx_timer_fn(struct hrtimer *t)
7534 }
7535
7536 if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
7537 - sci_submit_rx(s);
7538 + sci_submit_rx(s, true);
7539
7540 /* Direct new serial port interrupts back to CPU */
7541 scr = serial_port_in(port, SCSCR);
7542 @@ -1617,7 +1620,7 @@ static void sci_request_dma(struct uart_port *port)
7543 s->chan_rx_saved = s->chan_rx = chan;
7544
7545 if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
7546 - sci_submit_rx(s);
7547 + sci_submit_rx(s, false);
7548 }
7549 }
7550
7551 @@ -1666,8 +1669,10 @@ static irqreturn_t sci_rx_interrupt(int irq, void *ptr)
7552 disable_irq_nosync(irq);
7553 scr |= SCSCR_RDRQE;
7554 } else {
7555 + if (sci_submit_rx(s, false) < 0)
7556 + goto handle_pio;
7557 +
7558 scr &= ~SCSCR_RIE;
7559 - sci_submit_rx(s);
7560 }
7561 serial_port_out(port, SCSCR, scr);
7562 /* Clear current interrupt */
7563 @@ -1679,6 +1684,8 @@ static irqreturn_t sci_rx_interrupt(int irq, void *ptr)
7564
7565 return IRQ_HANDLED;
7566 }
7567 +
7568 +handle_pio:
7569 #endif
7570
7571 if (s->rx_trigger > 1 && s->rx_fifo_timeout > 0) {
7572 @@ -1914,7 +1921,7 @@ out_nomem:
7573
7574 static void sci_free_irq(struct sci_port *port)
7575 {
7576 - int i;
7577 + int i, j;
7578
7579 /*
7580 * Intentionally in reverse order so we iterate over the muxed
7581 @@ -1930,6 +1937,13 @@ static void sci_free_irq(struct sci_port *port)
7582 if (unlikely(irq < 0))
7583 continue;
7584
7585 + /* Check if already freed (irq was muxed) */
7586 + for (j = 0; j < i; j++)
7587 + if (port->irqs[j] == irq)
7588 + j = i + 1;
7589 + if (j > i)
7590 + continue;
7591 +
7592 free_irq(port->irqs[i], port);
7593 kfree(port->irqstr[i]);
7594
7595 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
7596 index f76b2e0aba9d..1d1e61e980f3 100644
7597 --- a/drivers/usb/core/hub.c
7598 +++ b/drivers/usb/core/hub.c
7599 @@ -1112,6 +1112,16 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type)
7600 USB_PORT_FEAT_ENABLE);
7601 }
7602
7603 + /*
7604 + * Add debounce if USB3 link is in polling/link training state.
7605 + * Link will automatically transition to Enabled state after
7606 + * link training completes.
7607 + */
7608 + if (hub_is_superspeed(hdev) &&
7609 + ((portstatus & USB_PORT_STAT_LINK_STATE) ==
7610 + USB_SS_PORT_LS_POLLING))
7611 + need_debounce_delay = true;
7612 +
7613 /* Clear status-change flags; we'll debounce later */
7614 if (portchange & USB_PORT_STAT_C_CONNECTION) {
7615 need_debounce_delay = true;
7616 diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c
7617 index 38c813b1d203..24ff5f21cb25 100644
7618 --- a/drivers/usb/dwc2/params.c
7619 +++ b/drivers/usb/dwc2/params.c
7620 @@ -71,6 +71,13 @@ static void dwc2_set_his_params(struct dwc2_hsotg *hsotg)
7621 p->power_down = false;
7622 }
7623
7624 +static void dwc2_set_s3c6400_params(struct dwc2_hsotg *hsotg)
7625 +{
7626 + struct dwc2_core_params *p = &hsotg->params;
7627 +
7628 + p->power_down = 0;
7629 +}
7630 +
7631 static void dwc2_set_rk_params(struct dwc2_hsotg *hsotg)
7632 {
7633 struct dwc2_core_params *p = &hsotg->params;
7634 @@ -152,7 +159,8 @@ const struct of_device_id dwc2_of_match_table[] = {
7635 { .compatible = "lantiq,arx100-usb", .data = dwc2_set_ltq_params },
7636 { .compatible = "lantiq,xrx200-usb", .data = dwc2_set_ltq_params },
7637 { .compatible = "snps,dwc2" },
7638 - { .compatible = "samsung,s3c6400-hsotg" },
7639 + { .compatible = "samsung,s3c6400-hsotg",
7640 + .data = dwc2_set_s3c6400_params },
7641 { .compatible = "amlogic,meson8-usb",
7642 .data = dwc2_set_amlogic_params },
7643 { .compatible = "amlogic,meson8b-usb",
7644 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
7645 index 2a4ea9a1b1e3..5a5b37e0a140 100644
7646 --- a/drivers/usb/dwc3/gadget.c
7647 +++ b/drivers/usb/dwc3/gadget.c
7648 @@ -921,8 +921,6 @@ static void __dwc3_prepare_one_trb(struct dwc3_ep *dep, struct dwc3_trb *trb,
7649 struct usb_gadget *gadget = &dwc->gadget;
7650 enum usb_device_speed speed = gadget->speed;
7651
7652 - dwc3_ep_inc_enq(dep);
7653 -
7654 trb->size = DWC3_TRB_SIZE_LENGTH(length);
7655 trb->bpl = lower_32_bits(dma);
7656 trb->bph = upper_32_bits(dma);
7657 @@ -992,16 +990,20 @@ static void __dwc3_prepare_one_trb(struct dwc3_ep *dep, struct dwc3_trb *trb,
7658 usb_endpoint_type(dep->endpoint.desc));
7659 }
7660
7661 - /* always enable Continue on Short Packet */
7662 + /*
7663 + * Enable Continue on Short Packet
7664 + * when endpoint is not a stream capable
7665 + */
7666 if (usb_endpoint_dir_out(dep->endpoint.desc)) {
7667 - trb->ctrl |= DWC3_TRB_CTRL_CSP;
7668 + if (!dep->stream_capable)
7669 + trb->ctrl |= DWC3_TRB_CTRL_CSP;
7670
7671 if (short_not_ok)
7672 trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI;
7673 }
7674
7675 if ((!no_interrupt && !chain) ||
7676 - (dwc3_calc_trbs_left(dep) == 0))
7677 + (dwc3_calc_trbs_left(dep) == 1))
7678 trb->ctrl |= DWC3_TRB_CTRL_IOC;
7679
7680 if (chain)
7681 @@ -1012,6 +1014,8 @@ static void __dwc3_prepare_one_trb(struct dwc3_ep *dep, struct dwc3_trb *trb,
7682
7683 trb->ctrl |= DWC3_TRB_CTRL_HWO;
7684
7685 + dwc3_ep_inc_enq(dep);
7686 +
7687 trace_dwc3_prepare_trb(dep, trb);
7688 }
7689
7690 @@ -1115,7 +1119,7 @@ static void dwc3_prepare_one_trb_linear(struct dwc3_ep *dep,
7691 unsigned int maxp = usb_endpoint_maxp(dep->endpoint.desc);
7692 unsigned int rem = length % maxp;
7693
7694 - if (rem && usb_endpoint_dir_out(dep->endpoint.desc)) {
7695 + if ((!length || rem) && usb_endpoint_dir_out(dep->endpoint.desc)) {
7696 struct dwc3 *dwc = dep->dwc;
7697 struct dwc3_trb *trb;
7698
7699 diff --git a/drivers/usb/dwc3/trace.h b/drivers/usb/dwc3/trace.h
7700 index f22714cce070..f27c5cbe285c 100644
7701 --- a/drivers/usb/dwc3/trace.h
7702 +++ b/drivers/usb/dwc3/trace.h
7703 @@ -251,9 +251,11 @@ DECLARE_EVENT_CLASS(dwc3_log_trb,
7704 s = "2x ";
7705 break;
7706 case 3:
7707 + default:
7708 s = "3x ";
7709 break;
7710 }
7711 + break;
7712 default:
7713 s = "";
7714 } s; }),
7715 diff --git a/drivers/usb/gadget/udc/net2272.c b/drivers/usb/gadget/udc/net2272.c
7716 index 660878a19505..b77f3126580e 100644
7717 --- a/drivers/usb/gadget/udc/net2272.c
7718 +++ b/drivers/usb/gadget/udc/net2272.c
7719 @@ -2083,7 +2083,7 @@ static irqreturn_t net2272_irq(int irq, void *_dev)
7720 #if defined(PLX_PCI_RDK2)
7721 /* see if PCI int for us by checking irqstat */
7722 intcsr = readl(dev->rdk2.fpga_base_addr + RDK2_IRQSTAT);
7723 - if (!intcsr & (1 << NET2272_PCI_IRQ)) {
7724 + if (!(intcsr & (1 << NET2272_PCI_IRQ))) {
7725 spin_unlock(&dev->lock);
7726 return IRQ_NONE;
7727 }
7728 diff --git a/drivers/usb/mtu3/mtu3_core.c b/drivers/usb/mtu3/mtu3_core.c
7729 index ae70b9bfd797..860693520132 100644
7730 --- a/drivers/usb/mtu3/mtu3_core.c
7731 +++ b/drivers/usb/mtu3/mtu3_core.c
7732 @@ -578,8 +578,10 @@ static void mtu3_regs_init(struct mtu3 *mtu)
7733 if (mtu->is_u3_ip) {
7734 /* disable LGO_U1/U2 by default */
7735 mtu3_clrbits(mbase, U3D_LINK_POWER_CONTROL,
7736 - SW_U1_ACCEPT_ENABLE | SW_U2_ACCEPT_ENABLE |
7737 SW_U1_REQUEST_ENABLE | SW_U2_REQUEST_ENABLE);
7738 + /* enable accept LGO_U1/U2 link command from host */
7739 + mtu3_setbits(mbase, U3D_LINK_POWER_CONTROL,
7740 + SW_U1_ACCEPT_ENABLE | SW_U2_ACCEPT_ENABLE);
7741 /* device responses to u3_exit from host automatically */
7742 mtu3_clrbits(mbase, U3D_LTSSM_CTRL, SOFT_U3_EXIT_EN);
7743 /* automatically build U2 link when U3 detect fail */
7744 diff --git a/drivers/usb/mtu3/mtu3_gadget_ep0.c b/drivers/usb/mtu3/mtu3_gadget_ep0.c
7745 index 25216e79cd6e..3c464d8ae023 100644
7746 --- a/drivers/usb/mtu3/mtu3_gadget_ep0.c
7747 +++ b/drivers/usb/mtu3/mtu3_gadget_ep0.c
7748 @@ -336,9 +336,9 @@ static int ep0_handle_feature_dev(struct mtu3 *mtu,
7749
7750 lpc = mtu3_readl(mbase, U3D_LINK_POWER_CONTROL);
7751 if (set)
7752 - lpc |= SW_U1_ACCEPT_ENABLE;
7753 + lpc |= SW_U1_REQUEST_ENABLE;
7754 else
7755 - lpc &= ~SW_U1_ACCEPT_ENABLE;
7756 + lpc &= ~SW_U1_REQUEST_ENABLE;
7757 mtu3_writel(mbase, U3D_LINK_POWER_CONTROL, lpc);
7758
7759 mtu->u1_enable = !!set;
7760 @@ -351,9 +351,9 @@ static int ep0_handle_feature_dev(struct mtu3 *mtu,
7761
7762 lpc = mtu3_readl(mbase, U3D_LINK_POWER_CONTROL);
7763 if (set)
7764 - lpc |= SW_U2_ACCEPT_ENABLE;
7765 + lpc |= SW_U2_REQUEST_ENABLE;
7766 else
7767 - lpc &= ~SW_U2_ACCEPT_ENABLE;
7768 + lpc &= ~SW_U2_REQUEST_ENABLE;
7769 mtu3_writel(mbase, U3D_LINK_POWER_CONTROL, lpc);
7770
7771 mtu->u2_enable = !!set;
7772 diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
7773 index 23a0df79ef21..403eb97915f8 100644
7774 --- a/drivers/usb/musb/musb_dsps.c
7775 +++ b/drivers/usb/musb/musb_dsps.c
7776 @@ -181,9 +181,11 @@ static void dsps_musb_enable(struct musb *musb)
7777
7778 musb_writel(reg_base, wrp->epintr_set, epmask);
7779 musb_writel(reg_base, wrp->coreintr_set, coremask);
7780 - /* start polling for ID change in dual-role idle mode */
7781 - if (musb->xceiv->otg->state == OTG_STATE_B_IDLE &&
7782 - musb->port_mode == MUSB_OTG)
7783 + /*
7784 + * start polling for runtime PM active and idle,
7785 + * and for ID change in dual-role idle mode.
7786 + */
7787 + if (musb->xceiv->otg->state == OTG_STATE_B_IDLE)
7788 dsps_mod_timer(glue, -1);
7789 }
7790
7791 @@ -227,8 +229,13 @@ static int dsps_check_status(struct musb *musb, void *unused)
7792
7793 switch (musb->xceiv->otg->state) {
7794 case OTG_STATE_A_WAIT_VRISE:
7795 - dsps_mod_timer_optional(glue);
7796 - break;
7797 + if (musb->port_mode == MUSB_HOST) {
7798 + musb->xceiv->otg->state = OTG_STATE_A_WAIT_BCON;
7799 + dsps_mod_timer_optional(glue);
7800 + break;
7801 + }
7802 + /* fall through */
7803 +
7804 case OTG_STATE_A_WAIT_BCON:
7805 /* keep VBUS on for host-only mode */
7806 if (musb->port_mode == MUSB_HOST) {
7807 @@ -249,6 +256,10 @@ static int dsps_check_status(struct musb *musb, void *unused)
7808 musb->xceiv->otg->state = OTG_STATE_A_IDLE;
7809 MUSB_HST_MODE(musb);
7810 }
7811 +
7812 + if (musb->port_mode == MUSB_PERIPHERAL)
7813 + skip_session = 1;
7814 +
7815 if (!(devctl & MUSB_DEVCTL_SESSION) && !skip_session)
7816 musb_writeb(mregs, MUSB_DEVCTL,
7817 MUSB_DEVCTL_SESSION);
7818 diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
7819 index eae8b1b1b45b..ffe462a657b1 100644
7820 --- a/drivers/usb/musb/musb_gadget.c
7821 +++ b/drivers/usb/musb/musb_gadget.c
7822 @@ -452,13 +452,10 @@ void musb_g_tx(struct musb *musb, u8 epnum)
7823 }
7824
7825 if (request) {
7826 - u8 is_dma = 0;
7827 - bool short_packet = false;
7828
7829 trace_musb_req_tx(req);
7830
7831 if (dma && (csr & MUSB_TXCSR_DMAENAB)) {
7832 - is_dma = 1;
7833 csr |= MUSB_TXCSR_P_WZC_BITS;
7834 csr &= ~(MUSB_TXCSR_DMAENAB | MUSB_TXCSR_P_UNDERRUN |
7835 MUSB_TXCSR_TXPKTRDY | MUSB_TXCSR_AUTOSET);
7836 @@ -476,16 +473,8 @@ void musb_g_tx(struct musb *musb, u8 epnum)
7837 */
7838 if ((request->zero && request->length)
7839 && (request->length % musb_ep->packet_sz == 0)
7840 - && (request->actual == request->length))
7841 - short_packet = true;
7842 + && (request->actual == request->length)) {
7843
7844 - if ((musb_dma_inventra(musb) || musb_dma_ux500(musb)) &&
7845 - (is_dma && (!dma->desired_mode ||
7846 - (request->actual &
7847 - (musb_ep->packet_sz - 1)))))
7848 - short_packet = true;
7849 -
7850 - if (short_packet) {
7851 /*
7852 * On DMA completion, FIFO may not be
7853 * available yet...
7854 diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c
7855 index a688f7f87829..5fc6825745f2 100644
7856 --- a/drivers/usb/musb/musbhsdma.c
7857 +++ b/drivers/usb/musb/musbhsdma.c
7858 @@ -346,12 +346,10 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data)
7859 channel->status = MUSB_DMA_STATUS_FREE;
7860
7861 /* completed */
7862 - if ((devctl & MUSB_DEVCTL_HM)
7863 - && (musb_channel->transmit)
7864 - && ((channel->desired_mode == 0)
7865 - || (channel->actual_len &
7866 - (musb_channel->max_packet_sz - 1)))
7867 - ) {
7868 + if (musb_channel->transmit &&
7869 + (!channel->desired_mode ||
7870 + (channel->actual_len %
7871 + musb_channel->max_packet_sz))) {
7872 u8 epnum = musb_channel->epnum;
7873 int offset = musb->io.ep_offset(epnum,
7874 MUSB_TXCSR);
7875 @@ -363,11 +361,14 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data)
7876 */
7877 musb_ep_select(mbase, epnum);
7878 txcsr = musb_readw(mbase, offset);
7879 - txcsr &= ~(MUSB_TXCSR_DMAENAB
7880 + if (channel->desired_mode == 1) {
7881 + txcsr &= ~(MUSB_TXCSR_DMAENAB
7882 | MUSB_TXCSR_AUTOSET);
7883 - musb_writew(mbase, offset, txcsr);
7884 - /* Send out the packet */
7885 - txcsr &= ~MUSB_TXCSR_DMAMODE;
7886 + musb_writew(mbase, offset, txcsr);
7887 + /* Send out the packet */
7888 + txcsr &= ~MUSB_TXCSR_DMAMODE;
7889 + txcsr |= MUSB_TXCSR_DMAENAB;
7890 + }
7891 txcsr |= MUSB_TXCSR_TXPKTRDY;
7892 musb_writew(mbase, offset, txcsr);
7893 }
7894 diff --git a/drivers/usb/phy/phy-am335x.c b/drivers/usb/phy/phy-am335x.c
7895 index 27bdb7222527..f5f0568d8533 100644
7896 --- a/drivers/usb/phy/phy-am335x.c
7897 +++ b/drivers/usb/phy/phy-am335x.c
7898 @@ -61,9 +61,6 @@ static int am335x_phy_probe(struct platform_device *pdev)
7899 if (ret)
7900 return ret;
7901
7902 - ret = usb_add_phy_dev(&am_phy->usb_phy_gen.phy);
7903 - if (ret)
7904 - return ret;
7905 am_phy->usb_phy_gen.phy.init = am335x_init;
7906 am_phy->usb_phy_gen.phy.shutdown = am335x_shutdown;
7907
7908 @@ -82,7 +79,7 @@ static int am335x_phy_probe(struct platform_device *pdev)
7909 device_set_wakeup_enable(dev, false);
7910 phy_ctrl_power(am_phy->phy_ctrl, am_phy->id, am_phy->dr_mode, false);
7911
7912 - return 0;
7913 + return usb_add_phy_dev(&am_phy->usb_phy_gen.phy);
7914 }
7915
7916 static int am335x_phy_remove(struct platform_device *pdev)
7917 diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c
7918 index a3e1290d682d..1de333be9353 100644
7919 --- a/drivers/usb/renesas_usbhs/common.c
7920 +++ b/drivers/usb/renesas_usbhs/common.c
7921 @@ -539,6 +539,10 @@ static int usbhsc_drvcllbck_notify_hotplug(struct platform_device *pdev)
7922 * platform functions
7923 */
7924 static const struct of_device_id usbhs_of_match[] = {
7925 + {
7926 + .compatible = "renesas,usbhs-r8a774c0",
7927 + .data = (void *)USBHS_TYPE_RCAR_GEN3_WITH_PLL,
7928 + },
7929 {
7930 .compatible = "renesas,usbhs-r8a7790",
7931 .data = (void *)USBHS_TYPE_RCAR_GEN2,
7932 diff --git a/drivers/video/fbdev/clps711x-fb.c b/drivers/video/fbdev/clps711x-fb.c
7933 index ff561073ee4e..42f909618f04 100644
7934 --- a/drivers/video/fbdev/clps711x-fb.c
7935 +++ b/drivers/video/fbdev/clps711x-fb.c
7936 @@ -287,14 +287,17 @@ static int clps711x_fb_probe(struct platform_device *pdev)
7937 }
7938
7939 ret = of_get_fb_videomode(disp, &cfb->mode, OF_USE_NATIVE_MODE);
7940 - if (ret)
7941 + if (ret) {
7942 + of_node_put(disp);
7943 goto out_fb_release;
7944 + }
7945
7946 of_property_read_u32(disp, "ac-prescale", &cfb->ac_prescale);
7947 cfb->cmap_invert = of_property_read_bool(disp, "cmap-invert");
7948
7949 ret = of_property_read_u32(disp, "bits-per-pixel",
7950 &info->var.bits_per_pixel);
7951 + of_node_put(disp);
7952 if (ret)
7953 goto out_fb_release;
7954
7955 diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
7956 index 8958ccc8b1ac..8976190b6c1f 100644
7957 --- a/drivers/video/fbdev/core/fbcon.c
7958 +++ b/drivers/video/fbdev/core/fbcon.c
7959 @@ -3064,7 +3064,7 @@ static int fbcon_fb_unbind(int idx)
7960 for (i = first_fb_vc; i <= last_fb_vc; i++) {
7961 if (con2fb_map[i] != idx &&
7962 con2fb_map[i] != -1) {
7963 - new_idx = i;
7964 + new_idx = con2fb_map[i];
7965 break;
7966 }
7967 }
7968 diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
7969 index 861bf8081619..7dd6924feaa8 100644
7970 --- a/drivers/video/fbdev/core/fbmem.c
7971 +++ b/drivers/video/fbdev/core/fbmem.c
7972 @@ -436,7 +436,9 @@ static void fb_do_show_logo(struct fb_info *info, struct fb_image *image,
7973 image->dx += image->width + 8;
7974 }
7975 } else if (rotate == FB_ROTATE_UD) {
7976 - for (x = 0; x < num; x++) {
7977 + u32 dx = image->dx;
7978 +
7979 + for (x = 0; x < num && image->dx <= dx; x++) {
7980 info->fbops->fb_imageblit(info, image);
7981 image->dx -= image->width + 8;
7982 }
7983 @@ -448,7 +450,9 @@ static void fb_do_show_logo(struct fb_info *info, struct fb_image *image,
7984 image->dy += image->height + 8;
7985 }
7986 } else if (rotate == FB_ROTATE_CCW) {
7987 - for (x = 0; x < num; x++) {
7988 + u32 dy = image->dy;
7989 +
7990 + for (x = 0; x < num && image->dy <= dy; x++) {
7991 info->fbops->fb_imageblit(info, image);
7992 image->dy -= image->height + 8;
7993 }
7994 diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
7995 index 3093655c7b92..1475ed5ffcde 100644
7996 --- a/drivers/virt/vboxguest/vboxguest_core.c
7997 +++ b/drivers/virt/vboxguest/vboxguest_core.c
7998 @@ -1312,7 +1312,7 @@ static int vbg_ioctl_hgcm_call(struct vbg_dev *gdev,
7999 return -EINVAL;
8000 }
8001
8002 - if (f32bit)
8003 + if (IS_ENABLED(CONFIG_COMPAT) && f32bit)
8004 ret = vbg_hgcm_call32(gdev, client_id,
8005 call->function, call->timeout_ms,
8006 VBG_IOCTL_HGCM_CALL_PARMS32(call),
8007 diff --git a/drivers/watchdog/renesas_wdt.c b/drivers/watchdog/renesas_wdt.c
8008 index 0d74c3e48979..55c9eb6c6e51 100644
8009 --- a/drivers/watchdog/renesas_wdt.c
8010 +++ b/drivers/watchdog/renesas_wdt.c
8011 @@ -74,12 +74,17 @@ static int rwdt_init_timeout(struct watchdog_device *wdev)
8012 static int rwdt_start(struct watchdog_device *wdev)
8013 {
8014 struct rwdt_priv *priv = watchdog_get_drvdata(wdev);
8015 + u8 val;
8016
8017 pm_runtime_get_sync(wdev->parent);
8018
8019 - rwdt_write(priv, 0, RWTCSRB);
8020 - rwdt_write(priv, priv->cks, RWTCSRA);
8021 + /* Stop the timer before we modify any register */
8022 + val = readb_relaxed(priv->base + RWTCSRA) & ~RWTCSRA_TME;
8023 + rwdt_write(priv, val, RWTCSRA);
8024 +
8025 rwdt_init_timeout(wdev);
8026 + rwdt_write(priv, priv->cks, RWTCSRA);
8027 + rwdt_write(priv, 0, RWTCSRB);
8028
8029 while (readb_relaxed(priv->base + RWTCSRA) & RWTCSRA_WRFLG)
8030 cpu_relax();
8031 diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c
8032 index 7cde3f46ad26..d0078cbb718b 100644
8033 --- a/fs/binfmt_script.c
8034 +++ b/fs/binfmt_script.c
8035 @@ -42,10 +42,14 @@ static int load_script(struct linux_binprm *bprm)
8036 fput(bprm->file);
8037 bprm->file = NULL;
8038
8039 - bprm->buf[BINPRM_BUF_SIZE - 1] = '\0';
8040 - if ((cp = strchr(bprm->buf, '\n')) == NULL)
8041 - cp = bprm->buf+BINPRM_BUF_SIZE-1;
8042 + for (cp = bprm->buf+2;; cp++) {
8043 + if (cp >= bprm->buf + BINPRM_BUF_SIZE)
8044 + return -ENOEXEC;
8045 + if (!*cp || (*cp == '\n'))
8046 + break;
8047 + }
8048 *cp = '\0';
8049 +
8050 while (cp > bprm->buf) {
8051 cp--;
8052 if ((*cp == ' ') || (*cp == '\t'))
8053 diff --git a/fs/btrfs/btrfs_inode.h b/fs/btrfs/btrfs_inode.h
8054 index a0e230b31a88..20288b49718f 100644
8055 --- a/fs/btrfs/btrfs_inode.h
8056 +++ b/fs/btrfs/btrfs_inode.h
8057 @@ -29,6 +29,7 @@ enum {
8058 BTRFS_INODE_IN_DELALLOC_LIST,
8059 BTRFS_INODE_READDIO_NEED_LOCK,
8060 BTRFS_INODE_HAS_PROPS,
8061 + BTRFS_INODE_SNAPSHOT_FLUSH,
8062 };
8063
8064 /* in memory btrfs inode */
8065 diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
8066 index 68f322f600a0..131e90aad941 100644
8067 --- a/fs/btrfs/ctree.h
8068 +++ b/fs/btrfs/ctree.h
8069 @@ -3141,7 +3141,7 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
8070 struct inode *inode, u64 new_size,
8071 u32 min_type);
8072
8073 -int btrfs_start_delalloc_inodes(struct btrfs_root *root);
8074 +int btrfs_start_delalloc_snapshot(struct btrfs_root *root);
8075 int btrfs_start_delalloc_roots(struct btrfs_fs_info *fs_info, int nr);
8076 int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end,
8077 unsigned int extra_bits,
8078 diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
8079 index d228f706ff3e..c8e886caacd7 100644
8080 --- a/fs/btrfs/extent_io.c
8081 +++ b/fs/btrfs/extent_io.c
8082 @@ -3934,12 +3934,25 @@ static int extent_write_cache_pages(struct address_space *mapping,
8083 range_whole = 1;
8084 scanned = 1;
8085 }
8086 - if (wbc->sync_mode == WB_SYNC_ALL)
8087 +
8088 + /*
8089 + * We do the tagged writepage as long as the snapshot flush bit is set
8090 + * and we are the first one who do the filemap_flush() on this inode.
8091 + *
8092 + * The nr_to_write == LONG_MAX is needed to make sure other flushers do
8093 + * not race in and drop the bit.
8094 + */
8095 + if (range_whole && wbc->nr_to_write == LONG_MAX &&
8096 + test_and_clear_bit(BTRFS_INODE_SNAPSHOT_FLUSH,
8097 + &BTRFS_I(inode)->runtime_flags))
8098 + wbc->tagged_writepages = 1;
8099 +
8100 + if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
8101 tag = PAGECACHE_TAG_TOWRITE;
8102 else
8103 tag = PAGECACHE_TAG_DIRTY;
8104 retry:
8105 - if (wbc->sync_mode == WB_SYNC_ALL)
8106 + if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
8107 tag_pages_for_writeback(mapping, index, end);
8108 done_index = index;
8109 while (!done && !nr_to_write_done && (index <= end) &&
8110 diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
8111 index 561bffcb56a0..965a64bde6fd 100644
8112 --- a/fs/btrfs/inode.c
8113 +++ b/fs/btrfs/inode.c
8114 @@ -9988,7 +9988,7 @@ static struct btrfs_delalloc_work *btrfs_alloc_delalloc_work(struct inode *inode
8115 * some fairly slow code that needs optimization. This walks the list
8116 * of all the inodes with pending delalloc and forces them to disk.
8117 */
8118 -static int start_delalloc_inodes(struct btrfs_root *root, int nr)
8119 +static int start_delalloc_inodes(struct btrfs_root *root, int nr, bool snapshot)
8120 {
8121 struct btrfs_inode *binode;
8122 struct inode *inode;
8123 @@ -10016,6 +10016,9 @@ static int start_delalloc_inodes(struct btrfs_root *root, int nr)
8124 }
8125 spin_unlock(&root->delalloc_lock);
8126
8127 + if (snapshot)
8128 + set_bit(BTRFS_INODE_SNAPSHOT_FLUSH,
8129 + &binode->runtime_flags);
8130 work = btrfs_alloc_delalloc_work(inode);
8131 if (!work) {
8132 iput(inode);
8133 @@ -10049,7 +10052,7 @@ out:
8134 return ret;
8135 }
8136
8137 -int btrfs_start_delalloc_inodes(struct btrfs_root *root)
8138 +int btrfs_start_delalloc_snapshot(struct btrfs_root *root)
8139 {
8140 struct btrfs_fs_info *fs_info = root->fs_info;
8141 int ret;
8142 @@ -10057,7 +10060,7 @@ int btrfs_start_delalloc_inodes(struct btrfs_root *root)
8143 if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state))
8144 return -EROFS;
8145
8146 - ret = start_delalloc_inodes(root, -1);
8147 + ret = start_delalloc_inodes(root, -1, true);
8148 if (ret > 0)
8149 ret = 0;
8150 return ret;
8151 @@ -10086,7 +10089,7 @@ int btrfs_start_delalloc_roots(struct btrfs_fs_info *fs_info, int nr)
8152 &fs_info->delalloc_roots);
8153 spin_unlock(&fs_info->delalloc_root_lock);
8154
8155 - ret = start_delalloc_inodes(root, nr);
8156 + ret = start_delalloc_inodes(root, nr, false);
8157 btrfs_put_fs_root(root);
8158 if (ret < 0)
8159 goto out;
8160 diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
8161 index 802a628e9f7d..87f4f0f65dbb 100644
8162 --- a/fs/btrfs/ioctl.c
8163 +++ b/fs/btrfs/ioctl.c
8164 @@ -777,7 +777,7 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,
8165 wait_event(root->subv_writers->wait,
8166 percpu_counter_sum(&root->subv_writers->counter) == 0);
8167
8168 - ret = btrfs_start_delalloc_inodes(root);
8169 + ret = btrfs_start_delalloc_snapshot(root);
8170 if (ret)
8171 goto dec_and_free;
8172
8173 diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
8174 index ea5fa9df9405..6f09f6032db3 100644
8175 --- a/fs/btrfs/volumes.c
8176 +++ b/fs/btrfs/volumes.c
8177 @@ -850,6 +850,35 @@ static noinline struct btrfs_device *device_list_add(const char *path,
8178 return ERR_PTR(-EEXIST);
8179 }
8180
8181 + /*
8182 + * We are going to replace the device path for a given devid,
8183 + * make sure it's the same device if the device is mounted
8184 + */
8185 + if (device->bdev) {
8186 + struct block_device *path_bdev;
8187 +
8188 + path_bdev = lookup_bdev(path);
8189 + if (IS_ERR(path_bdev)) {
8190 + mutex_unlock(&fs_devices->device_list_mutex);
8191 + return ERR_CAST(path_bdev);
8192 + }
8193 +
8194 + if (device->bdev != path_bdev) {
8195 + bdput(path_bdev);
8196 + mutex_unlock(&fs_devices->device_list_mutex);
8197 + btrfs_warn_in_rcu(device->fs_info,
8198 + "duplicate device fsid:devid for %pU:%llu old:%s new:%s",
8199 + disk_super->fsid, devid,
8200 + rcu_str_deref(device->name), path);
8201 + return ERR_PTR(-EEXIST);
8202 + }
8203 + bdput(path_bdev);
8204 + btrfs_info_in_rcu(device->fs_info,
8205 + "device fsid %pU devid %llu moved old:%s new:%s",
8206 + disk_super->fsid, devid,
8207 + rcu_str_deref(device->name), path);
8208 + }
8209 +
8210 name = rcu_string_strdup(path, GFP_NOFS);
8211 if (!name) {
8212 mutex_unlock(&fs_devices->device_list_mutex);
8213 diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c
8214 index e169e1a5fd35..3925a7bfc74d 100644
8215 --- a/fs/cifs/readdir.c
8216 +++ b/fs/cifs/readdir.c
8217 @@ -655,7 +655,14 @@ find_cifs_entry(const unsigned int xid, struct cifs_tcon *tcon, loff_t pos,
8218 /* scan and find it */
8219 int i;
8220 char *cur_ent;
8221 - char *end_of_smb = cfile->srch_inf.ntwrk_buf_start +
8222 + char *end_of_smb;
8223 +
8224 + if (cfile->srch_inf.ntwrk_buf_start == NULL) {
8225 + cifs_dbg(VFS, "ntwrk_buf_start is NULL during readdir\n");
8226 + return -EIO;
8227 + }
8228 +
8229 + end_of_smb = cfile->srch_inf.ntwrk_buf_start +
8230 server->ops->calc_smb_size(
8231 cfile->srch_inf.ntwrk_buf_start,
8232 server);
8233 diff --git a/fs/dlm/ast.c b/fs/dlm/ast.c
8234 index 562fa8c3edff..47ee66d70109 100644
8235 --- a/fs/dlm/ast.c
8236 +++ b/fs/dlm/ast.c
8237 @@ -292,6 +292,8 @@ void dlm_callback_suspend(struct dlm_ls *ls)
8238 flush_workqueue(ls->ls_callback_wq);
8239 }
8240
8241 +#define MAX_CB_QUEUE 25
8242 +
8243 void dlm_callback_resume(struct dlm_ls *ls)
8244 {
8245 struct dlm_lkb *lkb, *safe;
8246 @@ -302,15 +304,23 @@ void dlm_callback_resume(struct dlm_ls *ls)
8247 if (!ls->ls_callback_wq)
8248 return;
8249
8250 +more:
8251 mutex_lock(&ls->ls_cb_mutex);
8252 list_for_each_entry_safe(lkb, safe, &ls->ls_cb_delay, lkb_cb_list) {
8253 list_del_init(&lkb->lkb_cb_list);
8254 queue_work(ls->ls_callback_wq, &lkb->lkb_cb_work);
8255 count++;
8256 + if (count == MAX_CB_QUEUE)
8257 + break;
8258 }
8259 mutex_unlock(&ls->ls_cb_mutex);
8260
8261 if (count)
8262 log_rinfo(ls, "dlm_callback_resume %d", count);
8263 + if (count == MAX_CB_QUEUE) {
8264 + count = 0;
8265 + cond_resched();
8266 + goto more;
8267 + }
8268 }
8269
8270 diff --git a/fs/eventpoll.c b/fs/eventpoll.c
8271 index 42bbe6824b4b..58f48ea0db23 100644
8272 --- a/fs/eventpoll.c
8273 +++ b/fs/eventpoll.c
8274 @@ -1154,7 +1154,7 @@ static int ep_poll_callback(wait_queue_entry_t *wait, unsigned mode, int sync, v
8275 * semantics). All the events that happen during that period of time are
8276 * chained in ep->ovflist and requeued later on.
8277 */
8278 - if (unlikely(ep->ovflist != EP_UNACTIVE_PTR)) {
8279 + if (ep->ovflist != EP_UNACTIVE_PTR) {
8280 if (epi->next == EP_UNACTIVE_PTR) {
8281 epi->next = ep->ovflist;
8282 ep->ovflist = epi;
8283 diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c
8284 index fa707cdd4120..22f0d17cde43 100644
8285 --- a/fs/f2fs/acl.c
8286 +++ b/fs/f2fs/acl.c
8287 @@ -352,12 +352,14 @@ static int f2fs_acl_create(struct inode *dir, umode_t *mode,
8288 return PTR_ERR(p);
8289
8290 clone = f2fs_acl_clone(p, GFP_NOFS);
8291 - if (!clone)
8292 - goto no_mem;
8293 + if (!clone) {
8294 + ret = -ENOMEM;
8295 + goto release_acl;
8296 + }
8297
8298 ret = f2fs_acl_create_masq(clone, mode);
8299 if (ret < 0)
8300 - goto no_mem_clone;
8301 + goto release_clone;
8302
8303 if (ret == 0)
8304 posix_acl_release(clone);
8305 @@ -371,11 +373,11 @@ static int f2fs_acl_create(struct inode *dir, umode_t *mode,
8306
8307 return 0;
8308
8309 -no_mem_clone:
8310 +release_clone:
8311 posix_acl_release(clone);
8312 -no_mem:
8313 +release_acl:
8314 posix_acl_release(p);
8315 - return -ENOMEM;
8316 + return ret;
8317 }
8318
8319 int f2fs_init_acl(struct inode *inode, struct inode *dir, struct page *ipage,
8320 diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
8321 index 9c28ea439e0b..e5719fcac47d 100644
8322 --- a/fs/f2fs/checkpoint.c
8323 +++ b/fs/f2fs/checkpoint.c
8324 @@ -1290,11 +1290,12 @@ static void commit_checkpoint(struct f2fs_sb_info *sbi,
8325 struct page *page = f2fs_grab_meta_page(sbi, blk_addr);
8326 int err;
8327
8328 - memcpy(page_address(page), src, PAGE_SIZE);
8329 - set_page_dirty(page);
8330 -
8331 f2fs_wait_on_page_writeback(page, META, true);
8332 f2fs_bug_on(sbi, PageWriteback(page));
8333 +
8334 + memcpy(page_address(page), src, PAGE_SIZE);
8335 +
8336 + set_page_dirty(page);
8337 if (unlikely(!clear_page_dirty_for_io(page)))
8338 f2fs_bug_on(sbi, 1);
8339
8340 diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
8341 index 17049b030b6c..e90ca6aa3a00 100644
8342 --- a/fs/f2fs/data.c
8343 +++ b/fs/f2fs/data.c
8344 @@ -2326,6 +2326,7 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
8345 bool locked = false;
8346 struct extent_info ei = {0,0,0};
8347 int err = 0;
8348 + int flag;
8349
8350 /*
8351 * we already allocated all the blocks, so we don't need to get
8352 @@ -2335,9 +2336,15 @@ static int prepare_write_begin(struct f2fs_sb_info *sbi,
8353 !is_inode_flag_set(inode, FI_NO_PREALLOC))
8354 return 0;
8355
8356 + /* f2fs_lock_op avoids race between write CP and convert_inline_page */
8357 + if (f2fs_has_inline_data(inode) && pos + len > MAX_INLINE_DATA(inode))
8358 + flag = F2FS_GET_BLOCK_DEFAULT;
8359 + else
8360 + flag = F2FS_GET_BLOCK_PRE_AIO;
8361 +
8362 if (f2fs_has_inline_data(inode) ||
8363 (pos & PAGE_MASK) >= i_size_read(inode)) {
8364 - __do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, true);
8365 + __do_map_lock(sbi, flag, true);
8366 locked = true;
8367 }
8368 restart:
8369 @@ -2375,6 +2382,7 @@ restart:
8370 f2fs_put_dnode(&dn);
8371 __do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO,
8372 true);
8373 + WARN_ON(flag != F2FS_GET_BLOCK_PRE_AIO);
8374 locked = true;
8375 goto restart;
8376 }
8377 @@ -2388,7 +2396,7 @@ out:
8378 f2fs_put_dnode(&dn);
8379 unlock_out:
8380 if (locked)
8381 - __do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, false);
8382 + __do_map_lock(sbi, flag, false);
8383 return err;
8384 }
8385
8386 diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
8387 index 1e031971a466..689c10ad57fe 100644
8388 --- a/fs/f2fs/f2fs.h
8389 +++ b/fs/f2fs/f2fs.h
8390 @@ -2672,10 +2672,19 @@ static inline bool is_dot_dotdot(const struct qstr *str)
8391
8392 static inline bool f2fs_may_extent_tree(struct inode *inode)
8393 {
8394 - if (!test_opt(F2FS_I_SB(inode), EXTENT_CACHE) ||
8395 + struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
8396 +
8397 + if (!test_opt(sbi, EXTENT_CACHE) ||
8398 is_inode_flag_set(inode, FI_NO_EXTENT))
8399 return false;
8400
8401 + /*
8402 + * for recovered files during mount do not create extents
8403 + * if shrinker is not registered.
8404 + */
8405 + if (list_empty(&sbi->s_list))
8406 + return false;
8407 +
8408 return S_ISREG(inode->i_mode);
8409 }
8410
8411 diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
8412 index 88b124677189..9eaf07fd8b4c 100644
8413 --- a/fs/f2fs/file.c
8414 +++ b/fs/f2fs/file.c
8415 @@ -216,6 +216,9 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,
8416
8417 trace_f2fs_sync_file_enter(inode);
8418
8419 + if (S_ISDIR(inode->i_mode))
8420 + goto go_write;
8421 +
8422 /* if fdatasync is triggered, let's do in-place-update */
8423 if (datasync || get_dirty_pages(inode) <= SM_I(sbi)->min_fsync_blocks)
8424 set_inode_flag(inode, FI_NEED_IPU);
8425 diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
8426 index a07241fb8537..74f72dccab57 100644
8427 --- a/fs/f2fs/gc.c
8428 +++ b/fs/f2fs/gc.c
8429 @@ -658,6 +658,14 @@ got_it:
8430 fio.page = page;
8431 fio.new_blkaddr = fio.old_blkaddr = dn.data_blkaddr;
8432
8433 + /*
8434 + * don't cache encrypted data into meta inode until previous dirty
8435 + * data were writebacked to avoid racing between GC and flush.
8436 + */
8437 + f2fs_wait_on_page_writeback(page, DATA, true);
8438 +
8439 + f2fs_wait_on_block_writeback(inode, dn.data_blkaddr);
8440 +
8441 fio.encrypted_page = f2fs_pagecache_get_page(META_MAPPING(sbi),
8442 dn.data_blkaddr,
8443 FGP_LOCK | FGP_CREAT, GFP_NOFS);
8444 @@ -745,6 +753,8 @@ static int move_data_block(struct inode *inode, block_t bidx,
8445 */
8446 f2fs_wait_on_page_writeback(page, DATA, true);
8447
8448 + f2fs_wait_on_block_writeback(inode, dn.data_blkaddr);
8449 +
8450 err = f2fs_get_node_info(fio.sbi, dn.nid, &ni);
8451 if (err)
8452 goto put_out;
8453 @@ -802,8 +812,8 @@ static int move_data_block(struct inode *inode, block_t bidx,
8454 }
8455
8456 write_page:
8457 - set_page_dirty(fio.encrypted_page);
8458 f2fs_wait_on_page_writeback(fio.encrypted_page, DATA, true);
8459 + set_page_dirty(fio.encrypted_page);
8460 if (clear_page_dirty_for_io(fio.encrypted_page))
8461 dec_page_count(fio.sbi, F2FS_DIRTY_META);
8462
8463 @@ -897,8 +907,9 @@ static int move_data_page(struct inode *inode, block_t bidx, int gc_type,
8464 bool is_dirty = PageDirty(page);
8465
8466 retry:
8467 - set_page_dirty(page);
8468 f2fs_wait_on_page_writeback(page, DATA, true);
8469 +
8470 + set_page_dirty(page);
8471 if (clear_page_dirty_for_io(page)) {
8472 inode_dec_dirty_pages(inode);
8473 f2fs_remove_dirty_inode(inode);
8474 diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
8475 index 88be946dedd4..33fb3f8aeafa 100644
8476 --- a/fs/f2fs/node.c
8477 +++ b/fs/f2fs/node.c
8478 @@ -1598,10 +1598,11 @@ int f2fs_move_node_page(struct page *node_page, int gc_type)
8479 .for_reclaim = 0,
8480 };
8481
8482 - set_page_dirty(node_page);
8483 f2fs_wait_on_page_writeback(node_page, NODE, true);
8484 -
8485 f2fs_bug_on(F2FS_P_SB(node_page), PageWriteback(node_page));
8486 +
8487 + set_page_dirty(node_page);
8488 +
8489 if (!clear_page_dirty_for_io(node_page)) {
8490 err = -EAGAIN;
8491 goto out_page;
8492 diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
8493 index 6edcf8391dd3..8f3578c5230e 100644
8494 --- a/fs/f2fs/segment.c
8495 +++ b/fs/f2fs/segment.c
8496 @@ -387,8 +387,9 @@ static int __f2fs_commit_inmem_pages(struct inode *inode)
8497 if (page->mapping == inode->i_mapping) {
8498 trace_f2fs_commit_inmem_page(page, INMEM);
8499
8500 - set_page_dirty(page);
8501 f2fs_wait_on_page_writeback(page, DATA, true);
8502 +
8503 + set_page_dirty(page);
8504 if (clear_page_dirty_for_io(page)) {
8505 inode_dec_dirty_pages(inode);
8506 f2fs_remove_dirty_inode(inode);
8507 diff --git a/fs/f2fs/shrinker.c b/fs/f2fs/shrinker.c
8508 index 9e13db994fdf..a467aca29cfe 100644
8509 --- a/fs/f2fs/shrinker.c
8510 +++ b/fs/f2fs/shrinker.c
8511 @@ -135,6 +135,6 @@ void f2fs_leave_shrinker(struct f2fs_sb_info *sbi)
8512 f2fs_shrink_extent_tree(sbi, __count_extent_cache(sbi));
8513
8514 spin_lock(&f2fs_list_lock);
8515 - list_del(&sbi->s_list);
8516 + list_del_init(&sbi->s_list);
8517 spin_unlock(&f2fs_list_lock);
8518 }
8519 diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
8520 index 855a622fb052..a239472f405a 100644
8521 --- a/fs/f2fs/super.c
8522 +++ b/fs/f2fs/super.c
8523 @@ -1058,9 +1058,6 @@ static void f2fs_put_super(struct super_block *sb)
8524 f2fs_write_checkpoint(sbi, &cpc);
8525 }
8526
8527 - /* f2fs_write_checkpoint can update stat informaion */
8528 - f2fs_destroy_stats(sbi);
8529 -
8530 /*
8531 * normally superblock is clean, so we need to release this.
8532 * In addition, EIO will skip do checkpoint, we need this as well.
8533 @@ -1080,6 +1077,12 @@ static void f2fs_put_super(struct super_block *sb)
8534 iput(sbi->node_inode);
8535 iput(sbi->meta_inode);
8536
8537 + /*
8538 + * iput() can update stat information, if f2fs_write_checkpoint()
8539 + * above failed with error.
8540 + */
8541 + f2fs_destroy_stats(sbi);
8542 +
8543 /* destroy f2fs internal modules */
8544 f2fs_destroy_node_manager(sbi);
8545 f2fs_destroy_segment_manager(sbi);
8546 @@ -3256,30 +3259,30 @@ try_onemore:
8547
8548 f2fs_build_gc_manager(sbi);
8549
8550 + err = f2fs_build_stats(sbi);
8551 + if (err)
8552 + goto free_nm;
8553 +
8554 /* get an inode for node space */
8555 sbi->node_inode = f2fs_iget(sb, F2FS_NODE_INO(sbi));
8556 if (IS_ERR(sbi->node_inode)) {
8557 f2fs_msg(sb, KERN_ERR, "Failed to read node inode");
8558 err = PTR_ERR(sbi->node_inode);
8559 - goto free_nm;
8560 + goto free_stats;
8561 }
8562
8563 - err = f2fs_build_stats(sbi);
8564 - if (err)
8565 - goto free_node_inode;
8566 -
8567 /* read root inode and dentry */
8568 root = f2fs_iget(sb, F2FS_ROOT_INO(sbi));
8569 if (IS_ERR(root)) {
8570 f2fs_msg(sb, KERN_ERR, "Failed to read root inode");
8571 err = PTR_ERR(root);
8572 - goto free_stats;
8573 + goto free_node_inode;
8574 }
8575 if (!S_ISDIR(root->i_mode) || !root->i_blocks ||
8576 !root->i_size || !root->i_nlink) {
8577 iput(root);
8578 err = -EINVAL;
8579 - goto free_stats;
8580 + goto free_node_inode;
8581 }
8582
8583 sb->s_root = d_make_root(root); /* allocate root dentry */
8584 @@ -3403,12 +3406,12 @@ free_meta:
8585 free_root_inode:
8586 dput(sb->s_root);
8587 sb->s_root = NULL;
8588 -free_stats:
8589 - f2fs_destroy_stats(sbi);
8590 free_node_inode:
8591 f2fs_release_ino_entry(sbi, true);
8592 truncate_inode_pages_final(NODE_MAPPING(sbi));
8593 iput(sbi->node_inode);
8594 +free_stats:
8595 + f2fs_destroy_stats(sbi);
8596 free_nm:
8597 f2fs_destroy_node_manager(sbi);
8598 free_sm:
8599 diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
8600 index a5e516a40e7a..809c0f2f9942 100644
8601 --- a/fs/fuse/dev.c
8602 +++ b/fs/fuse/dev.c
8603 @@ -1742,7 +1742,6 @@ static int fuse_retrieve(struct fuse_conn *fc, struct inode *inode,
8604 req->in.h.nodeid = outarg->nodeid;
8605 req->in.numargs = 2;
8606 req->in.argpages = 1;
8607 - req->page_descs[0].offset = offset;
8608 req->end = fuse_retrieve_end;
8609
8610 index = outarg->offset >> PAGE_SHIFT;
8611 @@ -1757,6 +1756,7 @@ static int fuse_retrieve(struct fuse_conn *fc, struct inode *inode,
8612
8613 this_num = min_t(unsigned, num, PAGE_SIZE - offset);
8614 req->pages[req->num_pages] = page;
8615 + req->page_descs[req->num_pages].offset = offset;
8616 req->page_descs[req->num_pages].length = this_num;
8617 req->num_pages++;
8618
8619 @@ -2077,8 +2077,10 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe,
8620
8621 ret = fuse_dev_do_write(fud, &cs, len);
8622
8623 + pipe_lock(pipe);
8624 for (idx = 0; idx < nbuf; idx++)
8625 pipe_buf_release(pipe, &bufs[idx]);
8626 + pipe_unlock(pipe);
8627
8628 out:
8629 kvfree(bufs);
8630 diff --git a/fs/fuse/file.c b/fs/fuse/file.c
8631 index ffaffe18352a..a59c16bd90ac 100644
8632 --- a/fs/fuse/file.c
8633 +++ b/fs/fuse/file.c
8634 @@ -1782,7 +1782,7 @@ static bool fuse_writepage_in_flight(struct fuse_req *new_req,
8635 spin_unlock(&fc->lock);
8636
8637 dec_wb_stat(&bdi->wb, WB_WRITEBACK);
8638 - dec_node_page_state(page, NR_WRITEBACK_TEMP);
8639 + dec_node_page_state(new_req->pages[0], NR_WRITEBACK_TEMP);
8640 wb_writeout_inc(&bdi->wb);
8641 fuse_writepage_free(fc, new_req);
8642 fuse_request_free(new_req);
8643 diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
8644 index 568abed20eb2..a7f922a67c69 100644
8645 --- a/fs/fuse/inode.c
8646 +++ b/fs/fuse/inode.c
8647 @@ -628,6 +628,7 @@ void fuse_conn_init(struct fuse_conn *fc, struct user_namespace *user_ns)
8648 get_random_bytes(&fc->scramble_key, sizeof(fc->scramble_key));
8649 fc->pid_ns = get_pid_ns(task_active_pid_ns(current));
8650 fc->user_ns = get_user_ns(user_ns);
8651 + fc->max_pages = FUSE_DEFAULT_MAX_PAGES_PER_REQ;
8652 }
8653 EXPORT_SYMBOL_GPL(fuse_conn_init);
8654
8655 @@ -1162,7 +1163,6 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)
8656 fc->user_id = d.user_id;
8657 fc->group_id = d.group_id;
8658 fc->max_read = max_t(unsigned, 4096, d.max_read);
8659 - fc->max_pages = FUSE_DEFAULT_MAX_PAGES_PER_REQ;
8660
8661 /* Used by get_root_inode() */
8662 sb->s_fs_info = fc;
8663 diff --git a/fs/nfs/super.c b/fs/nfs/super.c
8664 index ac4b2f005778..5ef2c71348bd 100644
8665 --- a/fs/nfs/super.c
8666 +++ b/fs/nfs/super.c
8667 @@ -2409,8 +2409,7 @@ static int nfs_compare_mount_options(const struct super_block *s, const struct n
8668 goto Ebusy;
8669 if (a->acdirmax != b->acdirmax)
8670 goto Ebusy;
8671 - if (b->auth_info.flavor_len > 0 &&
8672 - clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor)
8673 + if (clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor)
8674 goto Ebusy;
8675 return 1;
8676 Ebusy:
8677 diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
8678 index 6384c9b94898..b33f9785b756 100644
8679 --- a/fs/nfsd/nfsctl.c
8680 +++ b/fs/nfsd/nfsctl.c
8681 @@ -1126,6 +1126,8 @@ static ssize_t write_v4_end_grace(struct file *file, char *buf, size_t size)
8682 case 'Y':
8683 case 'y':
8684 case '1':
8685 + if (nn->nfsd_serv)
8686 + return -EBUSY;
8687 nfsd4_end_grace(nn);
8688 break;
8689 default:
8690 diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
8691 index eb67098117b4..6f424e3a3981 100644
8692 --- a/fs/nfsd/vfs.c
8693 +++ b/fs/nfsd/vfs.c
8694 @@ -544,9 +544,11 @@ __be32 nfsd4_clone_file_range(struct file *src, u64 src_pos, struct file *dst,
8695 loff_t cloned;
8696
8697 cloned = vfs_clone_file_range(src, src_pos, dst, dst_pos, count, 0);
8698 + if (cloned < 0)
8699 + return nfserrno(cloned);
8700 if (count && cloned != count)
8701 - cloned = -EINVAL;
8702 - return nfserrno(cloned < 0 ? cloned : 0);
8703 + return nfserrno(-EINVAL);
8704 + return 0;
8705 }
8706
8707 ssize_t nfsd_copy_file_range(struct file *src, u64 src_pos, struct file *dst,
8708 diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
8709 index 99ee093182cb..cc9b32b9db7c 100644
8710 --- a/fs/ocfs2/Makefile
8711 +++ b/fs/ocfs2/Makefile
8712 @@ -1,5 +1,5 @@
8713 # SPDX-License-Identifier: GPL-2.0
8714 -ccflags-y := -Ifs/ocfs2
8715 +ccflags-y := -I$(src)
8716
8717 obj-$(CONFIG_OCFS2_FS) += \
8718 ocfs2.o \
8719 diff --git a/fs/ocfs2/buffer_head_io.c b/fs/ocfs2/buffer_head_io.c
8720 index 4ebbd57cbf84..f9b84f7a3e4b 100644
8721 --- a/fs/ocfs2/buffer_head_io.c
8722 +++ b/fs/ocfs2/buffer_head_io.c
8723 @@ -161,7 +161,6 @@ int ocfs2_read_blocks_sync(struct ocfs2_super *osb, u64 block,
8724 #endif
8725 }
8726
8727 - clear_buffer_uptodate(bh);
8728 get_bh(bh); /* for end_buffer_read_sync() */
8729 bh->b_end_io = end_buffer_read_sync;
8730 submit_bh(REQ_OP_READ, 0, bh);
8731 @@ -341,7 +340,6 @@ int ocfs2_read_blocks(struct ocfs2_caching_info *ci, u64 block, int nr,
8732 continue;
8733 }
8734
8735 - clear_buffer_uptodate(bh);
8736 get_bh(bh); /* for end_buffer_read_sync() */
8737 if (validate)
8738 set_buffer_needs_validate(bh);
8739 diff --git a/fs/ocfs2/dlm/Makefile b/fs/ocfs2/dlm/Makefile
8740 index bd1aab1f49a4..ef2854422a6e 100644
8741 --- a/fs/ocfs2/dlm/Makefile
8742 +++ b/fs/ocfs2/dlm/Makefile
8743 @@ -1,4 +1,4 @@
8744 -ccflags-y := -Ifs/ocfs2
8745 +ccflags-y := -I$(src)/..
8746
8747 obj-$(CONFIG_OCFS2_FS_O2CB) += ocfs2_dlm.o
8748
8749 diff --git a/fs/ocfs2/dlmfs/Makefile b/fs/ocfs2/dlmfs/Makefile
8750 index eed3db8c5b49..33431a0296a3 100644
8751 --- a/fs/ocfs2/dlmfs/Makefile
8752 +++ b/fs/ocfs2/dlmfs/Makefile
8753 @@ -1,4 +1,4 @@
8754 -ccflags-y := -Ifs/ocfs2
8755 +ccflags-y := -I$(src)/..
8756
8757 obj-$(CONFIG_OCFS2_FS) += ocfs2_dlmfs.o
8758
8759 diff --git a/fs/udf/inode.c b/fs/udf/inode.c
8760 index 5df554a9f9c9..ae796e10f68b 100644
8761 --- a/fs/udf/inode.c
8762 +++ b/fs/udf/inode.c
8763 @@ -1357,6 +1357,12 @@ reread:
8764
8765 iinfo->i_alloc_type = le16_to_cpu(fe->icbTag.flags) &
8766 ICBTAG_FLAG_AD_MASK;
8767 + if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_SHORT &&
8768 + iinfo->i_alloc_type != ICBTAG_FLAG_AD_LONG &&
8769 + iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) {
8770 + ret = -EIO;
8771 + goto out;
8772 + }
8773 iinfo->i_unique = 0;
8774 iinfo->i_lenEAttr = 0;
8775 iinfo->i_lenExtents = 0;
8776 diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
8777 index 338b9d9984e0..d9048bcea49c 100644
8778 --- a/fs/xfs/xfs_aops.c
8779 +++ b/fs/xfs/xfs_aops.c
8780 @@ -449,6 +449,7 @@ xfs_map_blocks(
8781 }
8782
8783 wpc->imap = imap;
8784 + xfs_trim_extent_eof(&wpc->imap, ip);
8785 trace_xfs_map_blocks_found(ip, offset, count, wpc->io_type, &imap);
8786 return 0;
8787 allocate_blocks:
8788 @@ -459,6 +460,7 @@ allocate_blocks:
8789 ASSERT(whichfork == XFS_COW_FORK || cow_fsb == NULLFILEOFF ||
8790 imap.br_startoff + imap.br_blockcount <= cow_fsb);
8791 wpc->imap = imap;
8792 + xfs_trim_extent_eof(&wpc->imap, ip);
8793 trace_xfs_map_blocks_alloc(ip, offset, count, wpc->io_type, &imap);
8794 return 0;
8795 }
8796 diff --git a/include/linux/cpu.h b/include/linux/cpu.h
8797 index 218df7f4d3e1..5041357d0297 100644
8798 --- a/include/linux/cpu.h
8799 +++ b/include/linux/cpu.h
8800 @@ -180,12 +180,10 @@ enum cpuhp_smt_control {
8801 #if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT)
8802 extern enum cpuhp_smt_control cpu_smt_control;
8803 extern void cpu_smt_disable(bool force);
8804 -extern void cpu_smt_check_topology_early(void);
8805 extern void cpu_smt_check_topology(void);
8806 #else
8807 # define cpu_smt_control (CPU_SMT_ENABLED)
8808 static inline void cpu_smt_disable(bool force) { }
8809 -static inline void cpu_smt_check_topology_early(void) { }
8810 static inline void cpu_smt_check_topology(void) { }
8811 #endif
8812
8813 diff --git a/include/linux/genl_magic_struct.h b/include/linux/genl_magic_struct.h
8814 index 5972e4969197..eeae59d3ceb7 100644
8815 --- a/include/linux/genl_magic_struct.h
8816 +++ b/include/linux/genl_magic_struct.h
8817 @@ -191,6 +191,7 @@ static inline void ct_assert_unique_operations(void)
8818 {
8819 switch (0) {
8820 #include GENL_MAGIC_INCLUDE_FILE
8821 + case 0:
8822 ;
8823 }
8824 }
8825 @@ -209,6 +210,7 @@ static inline void ct_assert_unique_top_level_attributes(void)
8826 {
8827 switch (0) {
8828 #include GENL_MAGIC_INCLUDE_FILE
8829 + case 0:
8830 ;
8831 }
8832 }
8833 @@ -218,7 +220,8 @@ static inline void ct_assert_unique_top_level_attributes(void)
8834 static inline void ct_assert_unique_ ## s_name ## _attributes(void) \
8835 { \
8836 switch (0) { \
8837 - s_fields \
8838 + s_fields \
8839 + case 0: \
8840 ; \
8841 } \
8842 }
8843 diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h
8844 index f2f887795d43..ed070512b40e 100644
8845 --- a/include/linux/gpio/consumer.h
8846 +++ b/include/linux/gpio/consumer.h
8847 @@ -162,7 +162,7 @@ int gpiod_is_active_low(const struct gpio_desc *desc);
8848 int gpiod_cansleep(const struct gpio_desc *desc);
8849
8850 int gpiod_to_irq(const struct gpio_desc *desc);
8851 -void gpiod_set_consumer_name(struct gpio_desc *desc, const char *name);
8852 +int gpiod_set_consumer_name(struct gpio_desc *desc, const char *name);
8853
8854 /* Convert between the old gpio_ and new gpiod_ interfaces */
8855 struct gpio_desc *gpio_to_desc(unsigned gpio);
8856 @@ -495,10 +495,12 @@ static inline int gpiod_to_irq(const struct gpio_desc *desc)
8857 return -EINVAL;
8858 }
8859
8860 -static inline void gpiod_set_consumer_name(struct gpio_desc *desc, const char *name)
8861 +static inline int gpiod_set_consumer_name(struct gpio_desc *desc,
8862 + const char *name)
8863 {
8864 /* GPIO can never have been requested */
8865 WARN_ON(1);
8866 + return -EINVAL;
8867 }
8868
8869 static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
8870 diff --git a/include/linux/hid-debug.h b/include/linux/hid-debug.h
8871 index 8663f216c563..2d6100edf204 100644
8872 --- a/include/linux/hid-debug.h
8873 +++ b/include/linux/hid-debug.h
8874 @@ -24,7 +24,10 @@
8875
8876 #ifdef CONFIG_DEBUG_FS
8877
8878 +#include <linux/kfifo.h>
8879 +
8880 #define HID_DEBUG_BUFSIZE 512
8881 +#define HID_DEBUG_FIFOSIZE 512
8882
8883 void hid_dump_input(struct hid_device *, struct hid_usage *, __s32);
8884 void hid_dump_report(struct hid_device *, int , u8 *, int);
8885 @@ -37,11 +40,8 @@ void hid_debug_init(void);
8886 void hid_debug_exit(void);
8887 void hid_debug_event(struct hid_device *, char *);
8888
8889 -
8890 struct hid_debug_list {
8891 - char *hid_debug_buf;
8892 - int head;
8893 - int tail;
8894 + DECLARE_KFIFO_PTR(hid_debug_fifo, char);
8895 struct fasync_struct *fasync;
8896 struct hid_device *hdev;
8897 struct list_head node;
8898 @@ -64,4 +64,3 @@ struct hid_debug_list {
8899 #endif
8900
8901 #endif
8902 -
8903 diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
8904 index c926698040e0..a03d5e264e5e 100644
8905 --- a/include/linux/kvm_host.h
8906 +++ b/include/linux/kvm_host.h
8907 @@ -694,7 +694,8 @@ int kvm_write_guest(struct kvm *kvm, gpa_t gpa, const void *data,
8908 int kvm_write_guest_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
8909 void *data, unsigned long len);
8910 int kvm_write_guest_offset_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
8911 - void *data, int offset, unsigned long len);
8912 + void *data, unsigned int offset,
8913 + unsigned long len);
8914 int kvm_gfn_to_hva_cache_init(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
8915 gpa_t gpa, unsigned long len);
8916 int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len);
8917 diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
8918 index aa5963b5d38e..7d4ed995b4ce 100644
8919 --- a/include/linux/mlx5/driver.h
8920 +++ b/include/linux/mlx5/driver.h
8921 @@ -1309,7 +1309,7 @@ enum {
8922 static inline const struct cpumask *
8923 mlx5_get_vector_affinity_hint(struct mlx5_core_dev *dev, int vector)
8924 {
8925 - return dev->priv.irq_info[vector].mask;
8926 + return dev->priv.irq_info[vector + MLX5_EQ_VEC_COMP_BASE].mask;
8927 }
8928
8929 #endif /* MLX5_DRIVER_H */
8930 diff --git a/include/linux/skmsg.h b/include/linux/skmsg.h
8931 index 2a11e9d91dfa..36bd85863081 100644
8932 --- a/include/linux/skmsg.h
8933 +++ b/include/linux/skmsg.h
8934 @@ -416,6 +416,14 @@ static inline void sk_psock_put(struct sock *sk, struct sk_psock *psock)
8935 sk_psock_drop(sk, psock);
8936 }
8937
8938 +static inline void sk_psock_data_ready(struct sock *sk, struct sk_psock *psock)
8939 +{
8940 + if (psock->parser.enabled)
8941 + psock->parser.saved_data_ready(sk);
8942 + else
8943 + sk->sk_data_ready(sk);
8944 +}
8945 +
8946 static inline void psock_set_prog(struct bpf_prog **pprog,
8947 struct bpf_prog *prog)
8948 {
8949 diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
8950 index 9c0c2132a2d6..64626b32107b 100644
8951 --- a/include/rdma/ib_verbs.h
8952 +++ b/include/rdma/ib_verbs.h
8953 @@ -56,7 +56,7 @@
8954 #include <linux/string.h>
8955 #include <linux/slab.h>
8956 #include <linux/netdevice.h>
8957 -
8958 +#include <linux/refcount.h>
8959 #include <linux/if_link.h>
8960 #include <linux/atomic.h>
8961 #include <linux/mmu_notifier.h>
8962 @@ -2605,6 +2605,12 @@ struct ib_device {
8963
8964 const struct uverbs_object_tree_def *const *driver_specs;
8965 enum rdma_driver_id driver_id;
8966 + /*
8967 + * Provides synchronization between device unregistration and netlink
8968 + * commands on a device. To be used only by core.
8969 + */
8970 + refcount_t refcount;
8971 + struct completion unreg_completion;
8972 };
8973
8974 struct ib_client {
8975 diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h
8976 index ea8c93bbb0e0..e87f2d5b3cc6 100644
8977 --- a/include/sound/compress_driver.h
8978 +++ b/include/sound/compress_driver.h
8979 @@ -171,7 +171,11 @@ static inline void snd_compr_drain_notify(struct snd_compr_stream *stream)
8980 if (snd_BUG_ON(!stream))
8981 return;
8982
8983 - stream->runtime->state = SNDRV_PCM_STATE_SETUP;
8984 + if (stream->direction == SND_COMPRESS_PLAYBACK)
8985 + stream->runtime->state = SNDRV_PCM_STATE_SETUP;
8986 + else
8987 + stream->runtime->state = SNDRV_PCM_STATE_PREPARED;
8988 +
8989 wake_up(&stream->runtime->sleep);
8990 }
8991
8992 diff --git a/include/sound/hda_codec.h b/include/sound/hda_codec.h
8993 index 0d98bb9068b1..acacc1900265 100644
8994 --- a/include/sound/hda_codec.h
8995 +++ b/include/sound/hda_codec.h
8996 @@ -68,6 +68,7 @@ struct hda_bus {
8997 unsigned int response_reset:1; /* controller was reset */
8998 unsigned int in_reset:1; /* during reset operation */
8999 unsigned int no_response_fallback:1; /* don't fallback at RIRB error */
9000 + unsigned int bus_probing :1; /* during probing process */
9001
9002 int primary_dig_out_type; /* primary digital out PCM type */
9003 unsigned int mixer_assigned; /* codec addr for mixer name */
9004 diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
9005 index 1f84977fab47..498c6bcf992a 100644
9006 --- a/kernel/cgroup/cgroup.c
9007 +++ b/kernel/cgroup/cgroup.c
9008 @@ -1744,7 +1744,7 @@ static int parse_cgroup_root_flags(char *data, unsigned int *root_flags)
9009
9010 *root_flags = 0;
9011
9012 - if (!data)
9013 + if (!data || *data == '\0')
9014 return 0;
9015
9016 while ((token = strsep(&data, ",")) != NULL) {
9017 diff --git a/kernel/cpu.c b/kernel/cpu.c
9018 index 91d5c38eb7e5..f3b25d945727 100644
9019 --- a/kernel/cpu.c
9020 +++ b/kernel/cpu.c
9021 @@ -376,9 +376,6 @@ void __weak arch_smt_update(void) { }
9022
9023 #ifdef CONFIG_HOTPLUG_SMT
9024 enum cpuhp_smt_control cpu_smt_control __read_mostly = CPU_SMT_ENABLED;
9025 -EXPORT_SYMBOL_GPL(cpu_smt_control);
9026 -
9027 -static bool cpu_smt_available __read_mostly;
9028
9029 void __init cpu_smt_disable(bool force)
9030 {
9031 @@ -397,25 +394,11 @@ void __init cpu_smt_disable(bool force)
9032
9033 /*
9034 * The decision whether SMT is supported can only be done after the full
9035 - * CPU identification. Called from architecture code before non boot CPUs
9036 - * are brought up.
9037 - */
9038 -void __init cpu_smt_check_topology_early(void)
9039 -{
9040 - if (!topology_smt_supported())
9041 - cpu_smt_control = CPU_SMT_NOT_SUPPORTED;
9042 -}
9043 -
9044 -/*
9045 - * If SMT was disabled by BIOS, detect it here, after the CPUs have been
9046 - * brought online. This ensures the smt/l1tf sysfs entries are consistent
9047 - * with reality. cpu_smt_available is set to true during the bringup of non
9048 - * boot CPUs when a SMT sibling is detected. Note, this may overwrite
9049 - * cpu_smt_control's previous setting.
9050 + * CPU identification. Called from architecture code.
9051 */
9052 void __init cpu_smt_check_topology(void)
9053 {
9054 - if (!cpu_smt_available)
9055 + if (!topology_smt_supported())
9056 cpu_smt_control = CPU_SMT_NOT_SUPPORTED;
9057 }
9058
9059 @@ -428,18 +411,10 @@ early_param("nosmt", smt_cmdline_disable);
9060
9061 static inline bool cpu_smt_allowed(unsigned int cpu)
9062 {
9063 - if (topology_is_primary_thread(cpu))
9064 + if (cpu_smt_control == CPU_SMT_ENABLED)
9065 return true;
9066
9067 - /*
9068 - * If the CPU is not a 'primary' thread and the booted_once bit is
9069 - * set then the processor has SMT support. Store this information
9070 - * for the late check of SMT support in cpu_smt_check_topology().
9071 - */
9072 - if (per_cpu(cpuhp_state, cpu).booted_once)
9073 - cpu_smt_available = true;
9074 -
9075 - if (cpu_smt_control == CPU_SMT_ENABLED)
9076 + if (topology_is_primary_thread(cpu))
9077 return true;
9078
9079 /*
9080 diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c
9081 index 65c0f1363788..94aa9ae0007a 100644
9082 --- a/kernel/debug/debug_core.c
9083 +++ b/kernel/debug/debug_core.c
9084 @@ -535,6 +535,8 @@ return_normal:
9085 arch_kgdb_ops.correct_hw_break();
9086 if (trace_on)
9087 tracing_on();
9088 + kgdb_info[cpu].debuggerinfo = NULL;
9089 + kgdb_info[cpu].task = NULL;
9090 kgdb_info[cpu].exception_state &=
9091 ~(DCPU_WANT_MASTER | DCPU_IS_SLAVE);
9092 kgdb_info[cpu].enter_kgdb--;
9093 @@ -667,6 +669,8 @@ kgdb_restore:
9094 if (trace_on)
9095 tracing_on();
9096
9097 + kgdb_info[cpu].debuggerinfo = NULL;
9098 + kgdb_info[cpu].task = NULL;
9099 kgdb_info[cpu].exception_state &=
9100 ~(DCPU_WANT_MASTER | DCPU_IS_SLAVE);
9101 kgdb_info[cpu].enter_kgdb--;
9102 diff --git a/kernel/debug/kdb/kdb_bt.c b/kernel/debug/kdb/kdb_bt.c
9103 index 7921ae4fca8d..7e2379aa0a1e 100644
9104 --- a/kernel/debug/kdb/kdb_bt.c
9105 +++ b/kernel/debug/kdb/kdb_bt.c
9106 @@ -186,7 +186,16 @@ kdb_bt(int argc, const char **argv)
9107 kdb_printf("btc: cpu status: ");
9108 kdb_parse("cpu\n");
9109 for_each_online_cpu(cpu) {
9110 - sprintf(buf, "btt 0x%px\n", KDB_TSK(cpu));
9111 + void *kdb_tsk = KDB_TSK(cpu);
9112 +
9113 + /* If a CPU failed to round up we could be here */
9114 + if (!kdb_tsk) {
9115 + kdb_printf("WARNING: no task for cpu %ld\n",
9116 + cpu);
9117 + continue;
9118 + }
9119 +
9120 + sprintf(buf, "btt 0x%px\n", kdb_tsk);
9121 kdb_parse(buf);
9122 touch_nmi_watchdog();
9123 }
9124 diff --git a/kernel/debug/kdb/kdb_debugger.c b/kernel/debug/kdb/kdb_debugger.c
9125 index 15e1a7af5dd0..53a0df6e4d92 100644
9126 --- a/kernel/debug/kdb/kdb_debugger.c
9127 +++ b/kernel/debug/kdb/kdb_debugger.c
9128 @@ -118,13 +118,6 @@ int kdb_stub(struct kgdb_state *ks)
9129 kdb_bp_remove();
9130 KDB_STATE_CLEAR(DOING_SS);
9131 KDB_STATE_SET(PAGER);
9132 - /* zero out any offline cpu data */
9133 - for_each_present_cpu(i) {
9134 - if (!cpu_online(i)) {
9135 - kgdb_info[i].debuggerinfo = NULL;
9136 - kgdb_info[i].task = NULL;
9137 - }
9138 - }
9139 if (ks->err_code == DIE_OOPS || reason == KDB_REASON_OOPS) {
9140 ks->pass_exception = 1;
9141 KDB_FLAG_SET(CATASTROPHIC);
9142 diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c
9143 index 4a9937076331..309ef5a64af5 100644
9144 --- a/kernel/events/ring_buffer.c
9145 +++ b/kernel/events/ring_buffer.c
9146 @@ -734,6 +734,9 @@ struct ring_buffer *rb_alloc(int nr_pages, long watermark, int cpu, int flags)
9147 size = sizeof(struct ring_buffer);
9148 size += nr_pages * sizeof(void *);
9149
9150 + if (order_base_2(size) >= MAX_ORDER)
9151 + goto fail;
9152 +
9153 rb = kzalloc(size, GFP_KERNEL);
9154 if (!rb)
9155 goto fail;
9156 diff --git a/kernel/futex.c b/kernel/futex.c
9157 index 5cc8083a4c89..4d1b7db04e10 100644
9158 --- a/kernel/futex.c
9159 +++ b/kernel/futex.c
9160 @@ -2850,35 +2850,39 @@ retry_private:
9161 * and BUG when futex_unlock_pi() interleaves with this.
9162 *
9163 * Therefore acquire wait_lock while holding hb->lock, but drop the
9164 - * latter before calling rt_mutex_start_proxy_lock(). This still fully
9165 - * serializes against futex_unlock_pi() as that does the exact same
9166 - * lock handoff sequence.
9167 + * latter before calling __rt_mutex_start_proxy_lock(). This
9168 + * interleaves with futex_unlock_pi() -- which does a similar lock
9169 + * handoff -- such that the latter can observe the futex_q::pi_state
9170 + * before __rt_mutex_start_proxy_lock() is done.
9171 */
9172 raw_spin_lock_irq(&q.pi_state->pi_mutex.wait_lock);
9173 spin_unlock(q.lock_ptr);
9174 + /*
9175 + * __rt_mutex_start_proxy_lock() unconditionally enqueues the @rt_waiter
9176 + * such that futex_unlock_pi() is guaranteed to observe the waiter when
9177 + * it sees the futex_q::pi_state.
9178 + */
9179 ret = __rt_mutex_start_proxy_lock(&q.pi_state->pi_mutex, &rt_waiter, current);
9180 raw_spin_unlock_irq(&q.pi_state->pi_mutex.wait_lock);
9181
9182 if (ret) {
9183 if (ret == 1)
9184 ret = 0;
9185 -
9186 - spin_lock(q.lock_ptr);
9187 - goto no_block;
9188 + goto cleanup;
9189 }
9190
9191 -
9192 if (unlikely(to))
9193 hrtimer_start_expires(&to->timer, HRTIMER_MODE_ABS);
9194
9195 ret = rt_mutex_wait_proxy_lock(&q.pi_state->pi_mutex, to, &rt_waiter);
9196
9197 +cleanup:
9198 spin_lock(q.lock_ptr);
9199 /*
9200 - * If we failed to acquire the lock (signal/timeout), we must
9201 + * If we failed to acquire the lock (deadlock/signal/timeout), we must
9202 * first acquire the hb->lock before removing the lock from the
9203 - * rt_mutex waitqueue, such that we can keep the hb and rt_mutex
9204 - * wait lists consistent.
9205 + * rt_mutex waitqueue, such that we can keep the hb and rt_mutex wait
9206 + * lists consistent.
9207 *
9208 * In particular; it is important that futex_unlock_pi() can not
9209 * observe this inconsistency.
9210 @@ -3002,6 +3006,10 @@ retry:
9211 * there is no point where we hold neither; and therefore
9212 * wake_futex_pi() must observe a state consistent with what we
9213 * observed.
9214 + *
9215 + * In particular; this forces __rt_mutex_start_proxy() to
9216 + * complete such that we're guaranteed to observe the
9217 + * rt_waiter. Also see the WARN in wake_futex_pi().
9218 */
9219 raw_spin_lock_irq(&pi_state->pi_mutex.wait_lock);
9220 spin_unlock(&hb->lock);
9221 diff --git a/kernel/hung_task.c b/kernel/hung_task.c
9222 index cb8e3e8ac7b9..4a9191617076 100644
9223 --- a/kernel/hung_task.c
9224 +++ b/kernel/hung_task.c
9225 @@ -34,7 +34,7 @@ int __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT;
9226 * is disabled during the critical section. It also controls the size of
9227 * the RCU grace period. So it needs to be upper-bound.
9228 */
9229 -#define HUNG_TASK_BATCHING 1024
9230 +#define HUNG_TASK_LOCK_BREAK (HZ / 10)
9231
9232 /*
9233 * Zero means infinite timeout - no checking done:
9234 @@ -112,8 +112,11 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
9235
9236 trace_sched_process_hang(t);
9237
9238 - if (!sysctl_hung_task_warnings && !sysctl_hung_task_panic)
9239 - return;
9240 + if (sysctl_hung_task_panic) {
9241 + console_verbose();
9242 + hung_task_show_lock = true;
9243 + hung_task_call_panic = true;
9244 + }
9245
9246 /*
9247 * Ok, the task did not get scheduled for more than 2 minutes,
9248 @@ -135,11 +138,6 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
9249 }
9250
9251 touch_nmi_watchdog();
9252 -
9253 - if (sysctl_hung_task_panic) {
9254 - hung_task_show_lock = true;
9255 - hung_task_call_panic = true;
9256 - }
9257 }
9258
9259 /*
9260 @@ -173,7 +171,7 @@ static bool rcu_lock_break(struct task_struct *g, struct task_struct *t)
9261 static void check_hung_uninterruptible_tasks(unsigned long timeout)
9262 {
9263 int max_count = sysctl_hung_task_check_count;
9264 - int batch_count = HUNG_TASK_BATCHING;
9265 + unsigned long last_break = jiffies;
9266 struct task_struct *g, *t;
9267
9268 /*
9269 @@ -188,10 +186,10 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout)
9270 for_each_process_thread(g, t) {
9271 if (!max_count--)
9272 goto unlock;
9273 - if (!--batch_count) {
9274 - batch_count = HUNG_TASK_BATCHING;
9275 + if (time_after(jiffies, last_break + HUNG_TASK_LOCK_BREAK)) {
9276 if (!rcu_lock_break(g, t))
9277 goto unlock;
9278 + last_break = jiffies;
9279 }
9280 /* use "==" to skip the TASK_KILLABLE tasks waiting on NFS */
9281 if (t->state == TASK_UNINTERRUPTIBLE)
9282 diff --git a/kernel/irq/affinity.c b/kernel/irq/affinity.c
9283 index f4f29b9d90ee..e12cdf637c71 100644
9284 --- a/kernel/irq/affinity.c
9285 +++ b/kernel/irq/affinity.c
9286 @@ -117,12 +117,11 @@ static int irq_build_affinity_masks(const struct irq_affinity *affd,
9287 */
9288 if (numvecs <= nodes) {
9289 for_each_node_mask(n, nodemsk) {
9290 - cpumask_copy(masks + curvec, node_to_cpumask[n]);
9291 - if (++done == numvecs)
9292 - break;
9293 + cpumask_or(masks + curvec, masks + curvec, node_to_cpumask[n]);
9294 if (++curvec == last_affv)
9295 curvec = affd->pre_vectors;
9296 }
9297 + done = numvecs;
9298 goto out;
9299 }
9300
9301 diff --git a/kernel/kcov.c b/kernel/kcov.c
9302 index 97959d7b77e2..c2277dbdbfb1 100644
9303 --- a/kernel/kcov.c
9304 +++ b/kernel/kcov.c
9305 @@ -112,7 +112,7 @@ void notrace __sanitizer_cov_trace_pc(void)
9306 EXPORT_SYMBOL(__sanitizer_cov_trace_pc);
9307
9308 #ifdef CONFIG_KCOV_ENABLE_COMPARISONS
9309 -static void write_comp_data(u64 type, u64 arg1, u64 arg2, u64 ip)
9310 +static void notrace write_comp_data(u64 type, u64 arg1, u64 arg2, u64 ip)
9311 {
9312 struct task_struct *t;
9313 u64 *area;
9314 diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c
9315 index 581edcc63c26..978d63a8261c 100644
9316 --- a/kernel/locking/rtmutex.c
9317 +++ b/kernel/locking/rtmutex.c
9318 @@ -1726,12 +1726,33 @@ void rt_mutex_proxy_unlock(struct rt_mutex *lock,
9319 rt_mutex_set_owner(lock, NULL);
9320 }
9321
9322 +/**
9323 + * __rt_mutex_start_proxy_lock() - Start lock acquisition for another task
9324 + * @lock: the rt_mutex to take
9325 + * @waiter: the pre-initialized rt_mutex_waiter
9326 + * @task: the task to prepare
9327 + *
9328 + * Starts the rt_mutex acquire; it enqueues the @waiter and does deadlock
9329 + * detection. It does not wait, see rt_mutex_wait_proxy_lock() for that.
9330 + *
9331 + * NOTE: does _NOT_ remove the @waiter on failure; must either call
9332 + * rt_mutex_wait_proxy_lock() or rt_mutex_cleanup_proxy_lock() after this.
9333 + *
9334 + * Returns:
9335 + * 0 - task blocked on lock
9336 + * 1 - acquired the lock for task, caller should wake it up
9337 + * <0 - error
9338 + *
9339 + * Special API call for PI-futex support.
9340 + */
9341 int __rt_mutex_start_proxy_lock(struct rt_mutex *lock,
9342 struct rt_mutex_waiter *waiter,
9343 struct task_struct *task)
9344 {
9345 int ret;
9346
9347 + lockdep_assert_held(&lock->wait_lock);
9348 +
9349 if (try_to_take_rt_mutex(lock, task, NULL))
9350 return 1;
9351
9352 @@ -1749,9 +1770,6 @@ int __rt_mutex_start_proxy_lock(struct rt_mutex *lock,
9353 ret = 0;
9354 }
9355
9356 - if (unlikely(ret))
9357 - remove_waiter(lock, waiter);
9358 -
9359 debug_rt_mutex_print_deadlock(waiter);
9360
9361 return ret;
9362 @@ -1763,12 +1781,18 @@ int __rt_mutex_start_proxy_lock(struct rt_mutex *lock,
9363 * @waiter: the pre-initialized rt_mutex_waiter
9364 * @task: the task to prepare
9365 *
9366 + * Starts the rt_mutex acquire; it enqueues the @waiter and does deadlock
9367 + * detection. It does not wait, see rt_mutex_wait_proxy_lock() for that.
9368 + *
9369 + * NOTE: unlike __rt_mutex_start_proxy_lock this _DOES_ remove the @waiter
9370 + * on failure.
9371 + *
9372 * Returns:
9373 * 0 - task blocked on lock
9374 * 1 - acquired the lock for task, caller should wake it up
9375 * <0 - error
9376 *
9377 - * Special API call for FUTEX_REQUEUE_PI support.
9378 + * Special API call for PI-futex support.
9379 */
9380 int rt_mutex_start_proxy_lock(struct rt_mutex *lock,
9381 struct rt_mutex_waiter *waiter,
9382 @@ -1778,6 +1802,8 @@ int rt_mutex_start_proxy_lock(struct rt_mutex *lock,
9383
9384 raw_spin_lock_irq(&lock->wait_lock);
9385 ret = __rt_mutex_start_proxy_lock(lock, waiter, task);
9386 + if (unlikely(ret))
9387 + remove_waiter(lock, waiter);
9388 raw_spin_unlock_irq(&lock->wait_lock);
9389
9390 return ret;
9391 @@ -1845,7 +1871,8 @@ int rt_mutex_wait_proxy_lock(struct rt_mutex *lock,
9392 * @lock: the rt_mutex we were woken on
9393 * @waiter: the pre-initialized rt_mutex_waiter
9394 *
9395 - * Attempt to clean up after a failed rt_mutex_wait_proxy_lock().
9396 + * Attempt to clean up after a failed __rt_mutex_start_proxy_lock() or
9397 + * rt_mutex_wait_proxy_lock().
9398 *
9399 * Unless we acquired the lock; we're still enqueued on the wait-list and can
9400 * in fact still be granted ownership until we're removed. Therefore we can
9401 diff --git a/kernel/module.c b/kernel/module.c
9402 index 49a405891587..0812a7f80fa7 100644
9403 --- a/kernel/module.c
9404 +++ b/kernel/module.c
9405 @@ -1207,8 +1207,10 @@ static ssize_t store_uevent(struct module_attribute *mattr,
9406 struct module_kobject *mk,
9407 const char *buffer, size_t count)
9408 {
9409 - kobject_synth_uevent(&mk->kobj, buffer, count);
9410 - return count;
9411 + int rc;
9412 +
9413 + rc = kobject_synth_uevent(&mk->kobj, buffer, count);
9414 + return rc ? rc : count;
9415 }
9416
9417 struct module_attribute module_uevent =
9418 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
9419 index e8f191ba3fe5..852c60a69e36 100644
9420 --- a/kernel/sched/fair.c
9421 +++ b/kernel/sched/fair.c
9422 @@ -5934,6 +5934,7 @@ static inline int find_idlest_cpu(struct sched_domain *sd, struct task_struct *p
9423
9424 #ifdef CONFIG_SCHED_SMT
9425 DEFINE_STATIC_KEY_FALSE(sched_smt_present);
9426 +EXPORT_SYMBOL_GPL(sched_smt_present);
9427
9428 static inline void set_idle_cores(int cpu, int val)
9429 {
9430 diff --git a/kernel/smp.c b/kernel/smp.c
9431 index 163c451af42e..f4cf1b0bb3b8 100644
9432 --- a/kernel/smp.c
9433 +++ b/kernel/smp.c
9434 @@ -584,8 +584,6 @@ void __init smp_init(void)
9435 num_nodes, (num_nodes > 1 ? "s" : ""),
9436 num_cpus, (num_cpus > 1 ? "s" : ""));
9437
9438 - /* Final decision about SMT support */
9439 - cpu_smt_check_topology();
9440 /* Any cleanup work */
9441 smp_cpus_done(setup_max_cpus);
9442 }
9443 diff --git a/kernel/sysctl.c b/kernel/sysctl.c
9444 index 5fc724e4e454..9ee261fce89e 100644
9445 --- a/kernel/sysctl.c
9446 +++ b/kernel/sysctl.c
9447 @@ -2779,6 +2779,8 @@ static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table, int
9448 bool neg;
9449
9450 left -= proc_skip_spaces(&p);
9451 + if (!left)
9452 + break;
9453
9454 err = proc_get_long(&p, &left, &val, &neg,
9455 proc_wspace_sep,
9456 diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
9457 index 2d110c948805..6c9493495538 100644
9458 --- a/kernel/time/timekeeping.c
9459 +++ b/kernel/time/timekeeping.c
9460 @@ -50,7 +50,9 @@ enum timekeeping_adv_mode {
9461 static struct {
9462 seqcount_t seq;
9463 struct timekeeper timekeeper;
9464 -} tk_core ____cacheline_aligned;
9465 +} tk_core ____cacheline_aligned = {
9466 + .seq = SEQCNT_ZERO(tk_core.seq),
9467 +};
9468
9469 static DEFINE_RAW_SPINLOCK(timekeeper_lock);
9470 static struct timekeeper shadow_timekeeper;
9471 diff --git a/lib/seq_buf.c b/lib/seq_buf.c
9472 index 11f2ae0f9099..6aabb609dd87 100644
9473 --- a/lib/seq_buf.c
9474 +++ b/lib/seq_buf.c
9475 @@ -144,9 +144,13 @@ int seq_buf_puts(struct seq_buf *s, const char *str)
9476
9477 WARN_ON(s->size == 0);
9478
9479 + /* Add 1 to len for the trailing null byte which must be there */
9480 + len += 1;
9481 +
9482 if (seq_buf_can_fit(s, len)) {
9483 memcpy(s->buffer + s->len, str, len);
9484 - s->len += len;
9485 + /* Don't count the trailing null byte against the capacity */
9486 + s->len += len - 1;
9487 return 0;
9488 }
9489 seq_buf_set_overflow(s);
9490 diff --git a/lib/test_rhashtable.c b/lib/test_rhashtable.c
9491 index 82ac39ce5310..aecc0996628f 100644
9492 --- a/lib/test_rhashtable.c
9493 +++ b/lib/test_rhashtable.c
9494 @@ -541,38 +541,45 @@ static unsigned int __init print_ht(struct rhltable *rhlt)
9495 static int __init test_insert_dup(struct test_obj_rhl *rhl_test_objects,
9496 int cnt, bool slow)
9497 {
9498 - struct rhltable rhlt;
9499 + struct rhltable *rhlt;
9500 unsigned int i, ret;
9501 const char *key;
9502 int err = 0;
9503
9504 - err = rhltable_init(&rhlt, &test_rht_params_dup);
9505 - if (WARN_ON(err))
9506 + rhlt = kmalloc(sizeof(*rhlt), GFP_KERNEL);
9507 + if (WARN_ON(!rhlt))
9508 + return -EINVAL;
9509 +
9510 + err = rhltable_init(rhlt, &test_rht_params_dup);
9511 + if (WARN_ON(err)) {
9512 + kfree(rhlt);
9513 return err;
9514 + }
9515
9516 for (i = 0; i < cnt; i++) {
9517 rhl_test_objects[i].value.tid = i;
9518 - key = rht_obj(&rhlt.ht, &rhl_test_objects[i].list_node.rhead);
9519 + key = rht_obj(&rhlt->ht, &rhl_test_objects[i].list_node.rhead);
9520 key += test_rht_params_dup.key_offset;
9521
9522 if (slow) {
9523 - err = PTR_ERR(rhashtable_insert_slow(&rhlt.ht, key,
9524 + err = PTR_ERR(rhashtable_insert_slow(&rhlt->ht, key,
9525 &rhl_test_objects[i].list_node.rhead));
9526 if (err == -EAGAIN)
9527 err = 0;
9528 } else
9529 - err = rhltable_insert(&rhlt,
9530 + err = rhltable_insert(rhlt,
9531 &rhl_test_objects[i].list_node,
9532 test_rht_params_dup);
9533 if (WARN(err, "error %d on element %d/%d (%s)\n", err, i, cnt, slow? "slow" : "fast"))
9534 goto skip_print;
9535 }
9536
9537 - ret = print_ht(&rhlt);
9538 + ret = print_ht(rhlt);
9539 WARN(ret != cnt, "missing rhltable elements (%d != %d, %s)\n", ret, cnt, slow? "slow" : "fast");
9540
9541 skip_print:
9542 - rhltable_destroy(&rhlt);
9543 + rhltable_destroy(rhlt);
9544 + kfree(rhlt);
9545
9546 return 0;
9547 }
9548 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
9549 index 995d1079f958..a29043ea9212 100644
9550 --- a/mm/page_alloc.c
9551 +++ b/mm/page_alloc.c
9552 @@ -294,6 +294,32 @@ EXPORT_SYMBOL(nr_online_nodes);
9553 int page_group_by_mobility_disabled __read_mostly;
9554
9555 #ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT
9556 +/*
9557 + * During boot we initialize deferred pages on-demand, as needed, but once
9558 + * page_alloc_init_late() has finished, the deferred pages are all initialized,
9559 + * and we can permanently disable that path.
9560 + */
9561 +static DEFINE_STATIC_KEY_TRUE(deferred_pages);
9562 +
9563 +/*
9564 + * Calling kasan_free_pages() only after deferred memory initialization
9565 + * has completed. Poisoning pages during deferred memory init will greatly
9566 + * lengthen the process and cause problem in large memory systems as the
9567 + * deferred pages initialization is done with interrupt disabled.
9568 + *
9569 + * Assuming that there will be no reference to those newly initialized
9570 + * pages before they are ever allocated, this should have no effect on
9571 + * KASAN memory tracking as the poison will be properly inserted at page
9572 + * allocation time. The only corner case is when pages are allocated by
9573 + * on-demand allocation and then freed again before the deferred pages
9574 + * initialization is done, but this is not likely to happen.
9575 + */
9576 +static inline void kasan_free_nondeferred_pages(struct page *page, int order)
9577 +{
9578 + if (!static_branch_unlikely(&deferred_pages))
9579 + kasan_free_pages(page, order);
9580 +}
9581 +
9582 /* Returns true if the struct page for the pfn is uninitialised */
9583 static inline bool __meminit early_page_uninitialised(unsigned long pfn)
9584 {
9585 @@ -335,6 +361,8 @@ defer_init(int nid, unsigned long pfn, unsigned long end_pfn)
9586 return false;
9587 }
9588 #else
9589 +#define kasan_free_nondeferred_pages(p, o) kasan_free_pages(p, o)
9590 +
9591 static inline bool early_page_uninitialised(unsigned long pfn)
9592 {
9593 return false;
9594 @@ -1037,7 +1065,7 @@ static __always_inline bool free_pages_prepare(struct page *page,
9595 arch_free_page(page, order);
9596 kernel_poison_pages(page, 1 << order, 0);
9597 kernel_map_pages(page, 1 << order, 0);
9598 - kasan_free_pages(page, order);
9599 + kasan_free_nondeferred_pages(page, order);
9600
9601 return true;
9602 }
9603 @@ -1605,13 +1633,6 @@ static int __init deferred_init_memmap(void *data)
9604 return 0;
9605 }
9606
9607 -/*
9608 - * During boot we initialize deferred pages on-demand, as needed, but once
9609 - * page_alloc_init_late() has finished, the deferred pages are all initialized,
9610 - * and we can permanently disable that path.
9611 - */
9612 -static DEFINE_STATIC_KEY_TRUE(deferred_pages);
9613 -
9614 /*
9615 * If this zone has deferred pages, try to grow it by initializing enough
9616 * deferred pages to satisfy the allocation specified by order, rounded up to
9617 diff --git a/mm/percpu-km.c b/mm/percpu-km.c
9618 index 38de70ab1a0d..0f643dc2dc65 100644
9619 --- a/mm/percpu-km.c
9620 +++ b/mm/percpu-km.c
9621 @@ -50,6 +50,7 @@ static struct pcpu_chunk *pcpu_create_chunk(gfp_t gfp)
9622 const int nr_pages = pcpu_group_sizes[0] >> PAGE_SHIFT;
9623 struct pcpu_chunk *chunk;
9624 struct page *pages;
9625 + unsigned long flags;
9626 int i;
9627
9628 chunk = pcpu_alloc_chunk(gfp);
9629 @@ -68,9 +69,9 @@ static struct pcpu_chunk *pcpu_create_chunk(gfp_t gfp)
9630 chunk->data = pages;
9631 chunk->base_addr = page_address(pages) - pcpu_group_offsets[0];
9632
9633 - spin_lock_irq(&pcpu_lock);
9634 + spin_lock_irqsave(&pcpu_lock, flags);
9635 pcpu_chunk_populated(chunk, 0, nr_pages, false);
9636 - spin_unlock_irq(&pcpu_lock);
9637 + spin_unlock_irqrestore(&pcpu_lock, flags);
9638
9639 pcpu_stats_chunk_alloc();
9640 trace_percpu_create_chunk(chunk->base_addr);
9641 diff --git a/net/core/skmsg.c b/net/core/skmsg.c
9642 index b7dbb3c976cd..54d854807630 100644
9643 --- a/net/core/skmsg.c
9644 +++ b/net/core/skmsg.c
9645 @@ -406,7 +406,7 @@ static int sk_psock_skb_ingress(struct sk_psock *psock, struct sk_buff *skb)
9646 msg->skb = skb;
9647
9648 sk_psock_queue_msg(psock, msg);
9649 - sk->sk_data_ready(sk);
9650 + sk_psock_data_ready(sk, psock);
9651 return copied;
9652 }
9653
9654 @@ -575,6 +575,7 @@ void sk_psock_drop(struct sock *sk, struct sk_psock *psock)
9655 {
9656 rcu_assign_sk_user_data(sk, NULL);
9657 sk_psock_cork_free(psock);
9658 + sk_psock_zap_ingress(psock);
9659 sk_psock_restore_proto(sk, psock);
9660
9661 write_lock_bh(&sk->sk_callback_lock);
9662 @@ -738,7 +739,7 @@ static int sk_psock_strp_parse(struct strparser *strp, struct sk_buff *skb)
9663 }
9664
9665 /* Called with socket lock held. */
9666 -static void sk_psock_data_ready(struct sock *sk)
9667 +static void sk_psock_strp_data_ready(struct sock *sk)
9668 {
9669 struct sk_psock *psock;
9670
9671 @@ -786,7 +787,7 @@ void sk_psock_start_strp(struct sock *sk, struct sk_psock *psock)
9672 return;
9673
9674 parser->saved_data_ready = sk->sk_data_ready;
9675 - sk->sk_data_ready = sk_psock_data_ready;
9676 + sk->sk_data_ready = sk_psock_strp_data_ready;
9677 sk->sk_write_space = sk_psock_write_space;
9678 parser->enabled = true;
9679 }
9680 diff --git a/net/dccp/ccid.h b/net/dccp/ccid.h
9681 index 6eb837a47b5c..baaaeb2b2c42 100644
9682 --- a/net/dccp/ccid.h
9683 +++ b/net/dccp/ccid.h
9684 @@ -202,7 +202,7 @@ static inline void ccid_hc_tx_packet_recv(struct ccid *ccid, struct sock *sk,
9685 static inline int ccid_hc_tx_parse_options(struct ccid *ccid, struct sock *sk,
9686 u8 pkt, u8 opt, u8 *val, u8 len)
9687 {
9688 - if (ccid->ccid_ops->ccid_hc_tx_parse_options == NULL)
9689 + if (!ccid || !ccid->ccid_ops->ccid_hc_tx_parse_options)
9690 return 0;
9691 return ccid->ccid_ops->ccid_hc_tx_parse_options(sk, pkt, opt, val, len);
9692 }
9693 @@ -214,7 +214,7 @@ static inline int ccid_hc_tx_parse_options(struct ccid *ccid, struct sock *sk,
9694 static inline int ccid_hc_rx_parse_options(struct ccid *ccid, struct sock *sk,
9695 u8 pkt, u8 opt, u8 *val, u8 len)
9696 {
9697 - if (ccid->ccid_ops->ccid_hc_rx_parse_options == NULL)
9698 + if (!ccid || !ccid->ccid_ops->ccid_hc_rx_parse_options)
9699 return 0;
9700 return ccid->ccid_ops->ccid_hc_rx_parse_options(sk, pkt, opt, val, len);
9701 }
9702 diff --git a/net/dsa/master.c b/net/dsa/master.c
9703 index 5e8c9bef78bd..dbfdda5fe8ed 100644
9704 --- a/net/dsa/master.c
9705 +++ b/net/dsa/master.c
9706 @@ -179,6 +179,8 @@ static const struct attribute_group dsa_group = {
9707 .attrs = dsa_slave_attrs,
9708 };
9709
9710 +static struct lock_class_key dsa_master_addr_list_lock_key;
9711 +
9712 int dsa_master_setup(struct net_device *dev, struct dsa_port *cpu_dp)
9713 {
9714 int ret;
9715 @@ -190,6 +192,8 @@ int dsa_master_setup(struct net_device *dev, struct dsa_port *cpu_dp)
9716 wmb();
9717
9718 dev->dsa_ptr = cpu_dp;
9719 + lockdep_set_class(&dev->addr_list_lock,
9720 + &dsa_master_addr_list_lock_key);
9721
9722 ret = dsa_master_ethtool_setup(dev);
9723 if (ret)
9724 diff --git a/net/dsa/slave.c b/net/dsa/slave.c
9725 index aec78f5aca72..a3ddc225f103 100644
9726 --- a/net/dsa/slave.c
9727 +++ b/net/dsa/slave.c
9728 @@ -140,11 +140,14 @@ static int dsa_slave_close(struct net_device *dev)
9729 static void dsa_slave_change_rx_flags(struct net_device *dev, int change)
9730 {
9731 struct net_device *master = dsa_slave_to_master(dev);
9732 -
9733 - if (change & IFF_ALLMULTI)
9734 - dev_set_allmulti(master, dev->flags & IFF_ALLMULTI ? 1 : -1);
9735 - if (change & IFF_PROMISC)
9736 - dev_set_promiscuity(master, dev->flags & IFF_PROMISC ? 1 : -1);
9737 + if (dev->flags & IFF_UP) {
9738 + if (change & IFF_ALLMULTI)
9739 + dev_set_allmulti(master,
9740 + dev->flags & IFF_ALLMULTI ? 1 : -1);
9741 + if (change & IFF_PROMISC)
9742 + dev_set_promiscuity(master,
9743 + dev->flags & IFF_PROMISC ? 1 : -1);
9744 + }
9745 }
9746
9747 static void dsa_slave_set_rx_mode(struct net_device *dev)
9748 @@ -639,7 +642,7 @@ static int dsa_slave_set_eee(struct net_device *dev, struct ethtool_eee *e)
9749 int ret;
9750
9751 /* Port's PHY and MAC both need to be EEE capable */
9752 - if (!dev->phydev && !dp->pl)
9753 + if (!dev->phydev || !dp->pl)
9754 return -ENODEV;
9755
9756 if (!ds->ops->set_mac_eee)
9757 @@ -659,7 +662,7 @@ static int dsa_slave_get_eee(struct net_device *dev, struct ethtool_eee *e)
9758 int ret;
9759
9760 /* Port's PHY and MAC both need to be EEE capable */
9761 - if (!dev->phydev && !dp->pl)
9762 + if (!dev->phydev || !dp->pl)
9763 return -ENODEV;
9764
9765 if (!ds->ops->get_mac_eee)
9766 diff --git a/net/ipv4/tcp_bpf.c b/net/ipv4/tcp_bpf.c
9767 index 3b45fe530f91..2d6bd7a59b2c 100644
9768 --- a/net/ipv4/tcp_bpf.c
9769 +++ b/net/ipv4/tcp_bpf.c
9770 @@ -198,7 +198,7 @@ static int bpf_tcp_ingress(struct sock *sk, struct sk_psock *psock,
9771 msg->sg.start = i;
9772 msg->sg.size -= apply_bytes;
9773 sk_psock_queue_msg(psock, tmp);
9774 - sk->sk_data_ready(sk);
9775 + sk_psock_data_ready(sk, psock);
9776 } else {
9777 sk_msg_free(sk, tmp);
9778 kfree(tmp);
9779 diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
9780 index 03e6b7a2bc53..f5c213001b05 100644
9781 --- a/net/ipv6/tcp_ipv6.c
9782 +++ b/net/ipv6/tcp_ipv6.c
9783 @@ -734,6 +734,7 @@ static void tcp_v6_init_req(struct request_sock *req,
9784 const struct sock *sk_listener,
9785 struct sk_buff *skb)
9786 {
9787 + bool l3_slave = ipv6_l3mdev_skb(TCP_SKB_CB(skb)->header.h6.flags);
9788 struct inet_request_sock *ireq = inet_rsk(req);
9789 const struct ipv6_pinfo *np = inet6_sk(sk_listener);
9790
9791 @@ -741,7 +742,7 @@ static void tcp_v6_init_req(struct request_sock *req,
9792 ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr;
9793
9794 /* So that link locals have meaning */
9795 - if (!sk_listener->sk_bound_dev_if &&
9796 + if ((!sk_listener->sk_bound_dev_if || l3_slave) &&
9797 ipv6_addr_type(&ireq->ir_v6_rmt_addr) & IPV6_ADDR_LINKLOCAL)
9798 ireq->ir_iif = tcp_v6_iif(skb);
9799
9800 diff --git a/net/ipv6/xfrm6_tunnel.c b/net/ipv6/xfrm6_tunnel.c
9801 index 4a46df8441c9..f5b4febeaa25 100644
9802 --- a/net/ipv6/xfrm6_tunnel.c
9803 +++ b/net/ipv6/xfrm6_tunnel.c
9804 @@ -144,6 +144,9 @@ static u32 __xfrm6_tunnel_alloc_spi(struct net *net, xfrm_address_t *saddr)
9805 index = __xfrm6_tunnel_spi_check(net, spi);
9806 if (index >= 0)
9807 goto alloc_spi;
9808 +
9809 + if (spi == XFRM6_TUNNEL_SPI_MAX)
9810 + break;
9811 }
9812 for (spi = XFRM6_TUNNEL_SPI_MIN; spi < xfrm6_tn->spi; spi++) {
9813 index = __xfrm6_tunnel_spi_check(net, spi);
9814 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
9815 index 428f7ad5f9b5..85c365fc7a0c 100644
9816 --- a/net/mac80211/rx.c
9817 +++ b/net/mac80211/rx.c
9818 @@ -143,6 +143,9 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,
9819 /* allocate extra bitmaps */
9820 if (status->chains)
9821 len += 4 * hweight8(status->chains);
9822 + /* vendor presence bitmap */
9823 + if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA)
9824 + len += 4;
9825
9826 if (ieee80211_have_rx_timestamp(status)) {
9827 len = ALIGN(len, 8);
9828 @@ -207,8 +210,6 @@ ieee80211_rx_radiotap_hdrlen(struct ieee80211_local *local,
9829 if (status->flag & RX_FLAG_RADIOTAP_VENDOR_DATA) {
9830 struct ieee80211_vendor_radiotap *rtap = (void *)skb->data;
9831
9832 - /* vendor presence bitmap */
9833 - len += 4;
9834 /* alignment for fixed 6-byte vendor data header */
9835 len = ALIGN(len, 2);
9836 /* vendor data header */
9837 @@ -753,6 +754,7 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
9838 struct ieee80211_sub_if_data *monitor_sdata =
9839 rcu_dereference(local->monitor_sdata);
9840 bool only_monitor = false;
9841 + unsigned int min_head_len;
9842
9843 if (status->flag & RX_FLAG_RADIOTAP_HE)
9844 rtap_space += sizeof(struct ieee80211_radiotap_he);
9845 @@ -766,6 +768,8 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
9846 rtap_space += sizeof(*rtap) + rtap->len + rtap->pad;
9847 }
9848
9849 + min_head_len = rtap_space;
9850 +
9851 /*
9852 * First, we may need to make a copy of the skb because
9853 * (1) we need to modify it for radiotap (if not present), and
9854 @@ -775,18 +779,23 @@ ieee80211_rx_monitor(struct ieee80211_local *local, struct sk_buff *origskb,
9855 * the SKB because it has a bad FCS/PLCP checksum.
9856 */
9857
9858 - if (ieee80211_hw_check(&local->hw, RX_INCLUDES_FCS)) {
9859 - if (unlikely(origskb->len <= FCS_LEN)) {
9860 - /* driver bug */
9861 - WARN_ON(1);
9862 - dev_kfree_skb(origskb);
9863 - return NULL;
9864 + if (!(status->flag & RX_FLAG_NO_PSDU)) {
9865 + if (ieee80211_hw_check(&local->hw, RX_INCLUDES_FCS)) {
9866 + if (unlikely(origskb->len <= FCS_LEN + rtap_space)) {
9867 + /* driver bug */
9868 + WARN_ON(1);
9869 + dev_kfree_skb(origskb);
9870 + return NULL;
9871 + }
9872 + present_fcs_len = FCS_LEN;
9873 }
9874 - present_fcs_len = FCS_LEN;
9875 +
9876 + /* also consider the hdr->frame_control */
9877 + min_head_len += 2;
9878 }
9879
9880 - /* ensure hdr->frame_control and vendor radiotap data are in skb head */
9881 - if (!pskb_may_pull(origskb, 2 + rtap_space)) {
9882 + /* ensure that the expected data elements are in skb head */
9883 + if (!pskb_may_pull(origskb, min_head_len)) {
9884 dev_kfree_skb(origskb);
9885 return NULL;
9886 }
9887 diff --git a/net/mac80211/util.c b/net/mac80211/util.c
9888 index bec424316ea4..dddfff7cf44f 100644
9889 --- a/net/mac80211/util.c
9890 +++ b/net/mac80211/util.c
9891 @@ -299,16 +299,16 @@ out:
9892 spin_unlock_bh(&fq->lock);
9893 }
9894
9895 -void ieee80211_wake_txqs(unsigned long data)
9896 +static void
9897 +__releases(&local->queue_stop_reason_lock)
9898 +__acquires(&local->queue_stop_reason_lock)
9899 +_ieee80211_wake_txqs(struct ieee80211_local *local, unsigned long *flags)
9900 {
9901 - struct ieee80211_local *local = (struct ieee80211_local *)data;
9902 struct ieee80211_sub_if_data *sdata;
9903 int n_acs = IEEE80211_NUM_ACS;
9904 - unsigned long flags;
9905 int i;
9906
9907 rcu_read_lock();
9908 - spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
9909
9910 if (local->hw.queues < IEEE80211_NUM_ACS)
9911 n_acs = 1;
9912 @@ -317,7 +317,7 @@ void ieee80211_wake_txqs(unsigned long data)
9913 if (local->queue_stop_reasons[i])
9914 continue;
9915
9916 - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
9917 + spin_unlock_irqrestore(&local->queue_stop_reason_lock, *flags);
9918 list_for_each_entry_rcu(sdata, &local->interfaces, list) {
9919 int ac;
9920
9921 @@ -329,13 +329,22 @@ void ieee80211_wake_txqs(unsigned long data)
9922 __ieee80211_wake_txqs(sdata, ac);
9923 }
9924 }
9925 - spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
9926 + spin_lock_irqsave(&local->queue_stop_reason_lock, *flags);
9927 }
9928
9929 - spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
9930 rcu_read_unlock();
9931 }
9932
9933 +void ieee80211_wake_txqs(unsigned long data)
9934 +{
9935 + struct ieee80211_local *local = (struct ieee80211_local *)data;
9936 + unsigned long flags;
9937 +
9938 + spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
9939 + _ieee80211_wake_txqs(local, &flags);
9940 + spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
9941 +}
9942 +
9943 void ieee80211_propagate_queue_wake(struct ieee80211_local *local, int queue)
9944 {
9945 struct ieee80211_sub_if_data *sdata;
9946 @@ -371,7 +380,8 @@ void ieee80211_propagate_queue_wake(struct ieee80211_local *local, int queue)
9947
9948 static void __ieee80211_wake_queue(struct ieee80211_hw *hw, int queue,
9949 enum queue_stop_reason reason,
9950 - bool refcounted)
9951 + bool refcounted,
9952 + unsigned long *flags)
9953 {
9954 struct ieee80211_local *local = hw_to_local(hw);
9955
9956 @@ -405,8 +415,19 @@ static void __ieee80211_wake_queue(struct ieee80211_hw *hw, int queue,
9957 } else
9958 tasklet_schedule(&local->tx_pending_tasklet);
9959
9960 - if (local->ops->wake_tx_queue)
9961 - tasklet_schedule(&local->wake_txqs_tasklet);
9962 + /*
9963 + * Calling _ieee80211_wake_txqs here can be a problem because it may
9964 + * release queue_stop_reason_lock which has been taken by
9965 + * __ieee80211_wake_queue's caller. It is certainly not very nice to
9966 + * release someone's lock, but it is fine because all the callers of
9967 + * __ieee80211_wake_queue call it right before releasing the lock.
9968 + */
9969 + if (local->ops->wake_tx_queue) {
9970 + if (reason == IEEE80211_QUEUE_STOP_REASON_DRIVER)
9971 + tasklet_schedule(&local->wake_txqs_tasklet);
9972 + else
9973 + _ieee80211_wake_txqs(local, flags);
9974 + }
9975 }
9976
9977 void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue,
9978 @@ -417,7 +438,7 @@ void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue,
9979 unsigned long flags;
9980
9981 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
9982 - __ieee80211_wake_queue(hw, queue, reason, refcounted);
9983 + __ieee80211_wake_queue(hw, queue, reason, refcounted, &flags);
9984 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
9985 }
9986
9987 @@ -514,7 +535,7 @@ void ieee80211_add_pending_skb(struct ieee80211_local *local,
9988 false);
9989 __skb_queue_tail(&local->pending[queue], skb);
9990 __ieee80211_wake_queue(hw, queue, IEEE80211_QUEUE_STOP_REASON_SKB_ADD,
9991 - false);
9992 + false, &flags);
9993 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
9994 }
9995
9996 @@ -547,7 +568,7 @@ void ieee80211_add_pending_skbs(struct ieee80211_local *local,
9997 for (i = 0; i < hw->queues; i++)
9998 __ieee80211_wake_queue(hw, i,
9999 IEEE80211_QUEUE_STOP_REASON_SKB_ADD,
10000 - false);
10001 + false, &flags);
10002 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
10003 }
10004
10005 @@ -605,7 +626,7 @@ void ieee80211_wake_queues_by_reason(struct ieee80211_hw *hw,
10006 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
10007
10008 for_each_set_bit(i, &queues, hw->queues)
10009 - __ieee80211_wake_queue(hw, i, reason, refcounted);
10010 + __ieee80211_wake_queue(hw, i, reason, refcounted, &flags);
10011
10012 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
10013 }
10014 diff --git a/net/rds/bind.c b/net/rds/bind.c
10015 index 762d2c6788a3..17c9d9f0c848 100644
10016 --- a/net/rds/bind.c
10017 +++ b/net/rds/bind.c
10018 @@ -78,10 +78,10 @@ struct rds_sock *rds_find_bound(const struct in6_addr *addr, __be16 port,
10019 __rds_create_bind_key(key, addr, port, scope_id);
10020 rcu_read_lock();
10021 rs = rhashtable_lookup(&bind_hash_table, key, ht_parms);
10022 - if (rs && !sock_flag(rds_rs_to_sk(rs), SOCK_DEAD))
10023 - rds_sock_addref(rs);
10024 - else
10025 + if (rs && (sock_flag(rds_rs_to_sk(rs), SOCK_DEAD) ||
10026 + !refcount_inc_not_zero(&rds_rs_to_sk(rs)->sk_refcnt)))
10027 rs = NULL;
10028 +
10029 rcu_read_unlock();
10030
10031 rdsdebug("returning rs %p for %pI6c:%u\n", rs, addr,
10032 diff --git a/net/rxrpc/recvmsg.c b/net/rxrpc/recvmsg.c
10033 index eaf19ebaa964..3f7bb11f3290 100644
10034 --- a/net/rxrpc/recvmsg.c
10035 +++ b/net/rxrpc/recvmsg.c
10036 @@ -596,6 +596,7 @@ error_requeue_call:
10037 }
10038 error_no_call:
10039 release_sock(&rx->sk);
10040 +error_trace:
10041 trace_rxrpc_recvmsg(call, rxrpc_recvmsg_return, 0, 0, 0, ret);
10042 return ret;
10043
10044 @@ -604,7 +605,7 @@ wait_interrupted:
10045 wait_error:
10046 finish_wait(sk_sleep(&rx->sk), &wait);
10047 call = NULL;
10048 - goto error_no_call;
10049 + goto error_trace;
10050 }
10051
10052 /**
10053 diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
10054 index 45bc2b72dc1c..2f64e3538127 100644
10055 --- a/net/sched/cls_flower.c
10056 +++ b/net/sched/cls_flower.c
10057 @@ -1257,7 +1257,7 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
10058 if (!tc_skip_hw(fnew->flags)) {
10059 err = fl_hw_replace_filter(tp, fnew, extack);
10060 if (err)
10061 - goto errout_mask;
10062 + goto errout_mask_ht;
10063 }
10064
10065 if (!tc_in_hw(fnew->flags))
10066 @@ -1287,6 +1287,10 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
10067 kfree(mask);
10068 return 0;
10069
10070 +errout_mask_ht:
10071 + rhashtable_remove_fast(&fnew->mask->ht, &fnew->ht_node,
10072 + fnew->mask->filter_ht_params);
10073 +
10074 errout_mask:
10075 fl_mask_put(head, fnew->mask, false);
10076
10077 diff --git a/net/sctp/socket.c b/net/sctp/socket.c
10078 index b8cebd5a87e5..b7a534f6d7c2 100644
10079 --- a/net/sctp/socket.c
10080 +++ b/net/sctp/socket.c
10081 @@ -2027,7 +2027,7 @@ static int sctp_sendmsg(struct sock *sk, struct msghdr *msg, size_t msg_len)
10082 struct sctp_endpoint *ep = sctp_sk(sk)->ep;
10083 struct sctp_transport *transport = NULL;
10084 struct sctp_sndrcvinfo _sinfo, *sinfo;
10085 - struct sctp_association *asoc;
10086 + struct sctp_association *asoc, *tmp;
10087 struct sctp_cmsgs cmsgs;
10088 union sctp_addr *daddr;
10089 bool new = false;
10090 @@ -2053,7 +2053,7 @@ static int sctp_sendmsg(struct sock *sk, struct msghdr *msg, size_t msg_len)
10091
10092 /* SCTP_SENDALL process */
10093 if ((sflags & SCTP_SENDALL) && sctp_style(sk, UDP)) {
10094 - list_for_each_entry(asoc, &ep->asocs, asocs) {
10095 + list_for_each_entry_safe(asoc, tmp, &ep->asocs, asocs) {
10096 err = sctp_sendmsg_check_sflags(asoc, sflags, msg,
10097 msg_len);
10098 if (err == 0)
10099 diff --git a/net/sctp/stream.c b/net/sctp/stream.c
10100 index 80e0ae5534ec..f24633114dfd 100644
10101 --- a/net/sctp/stream.c
10102 +++ b/net/sctp/stream.c
10103 @@ -84,6 +84,19 @@ static void fa_zero(struct flex_array *fa, size_t index, size_t count)
10104 }
10105 }
10106
10107 +static size_t fa_index(struct flex_array *fa, void *elem, size_t count)
10108 +{
10109 + size_t index = 0;
10110 +
10111 + while (count--) {
10112 + if (elem == flex_array_get(fa, index))
10113 + break;
10114 + index++;
10115 + }
10116 +
10117 + return index;
10118 +}
10119 +
10120 /* Migrates chunks from stream queues to new stream queues if needed,
10121 * but not across associations. Also, removes those chunks to streams
10122 * higher than the new max.
10123 @@ -147,6 +160,13 @@ static int sctp_stream_alloc_out(struct sctp_stream *stream, __u16 outcnt,
10124
10125 if (stream->out) {
10126 fa_copy(out, stream->out, 0, min(outcnt, stream->outcnt));
10127 + if (stream->out_curr) {
10128 + size_t index = fa_index(stream->out, stream->out_curr,
10129 + stream->outcnt);
10130 +
10131 + BUG_ON(index == stream->outcnt);
10132 + stream->out_curr = flex_array_get(out, index);
10133 + }
10134 fa_free(stream->out);
10135 }
10136
10137 diff --git a/net/sunrpc/xprtrdma/backchannel.c b/net/sunrpc/xprtrdma/backchannel.c
10138 index e5b367a3e517..88fde80b9347 100644
10139 --- a/net/sunrpc/xprtrdma/backchannel.c
10140 +++ b/net/sunrpc/xprtrdma/backchannel.c
10141 @@ -193,14 +193,15 @@ static int rpcrdma_bc_marshal_reply(struct rpc_rqst *rqst)
10142 */
10143 int xprt_rdma_bc_send_reply(struct rpc_rqst *rqst)
10144 {
10145 - struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(rqst->rq_xprt);
10146 + struct rpc_xprt *xprt = rqst->rq_xprt;
10147 + struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt);
10148 struct rpcrdma_req *req = rpcr_to_rdmar(rqst);
10149 int rc;
10150
10151 - if (!xprt_connected(rqst->rq_xprt))
10152 - goto drop_connection;
10153 + if (!xprt_connected(xprt))
10154 + return -ENOTCONN;
10155
10156 - if (!xprt_request_get_cong(rqst->rq_xprt, rqst))
10157 + if (!xprt_request_get_cong(xprt, rqst))
10158 return -EBADSLT;
10159
10160 rc = rpcrdma_bc_marshal_reply(rqst);
10161 @@ -216,7 +217,7 @@ failed_marshal:
10162 if (rc != -ENOTCONN)
10163 return rc;
10164 drop_connection:
10165 - xprt_disconnect_done(rqst->rq_xprt);
10166 + xprt_rdma_close(xprt);
10167 return -ENOTCONN;
10168 }
10169
10170 @@ -339,7 +340,7 @@ void rpcrdma_bc_receive_call(struct rpcrdma_xprt *r_xprt,
10171
10172 out_overflow:
10173 pr_warn("RPC/RDMA backchannel overflow\n");
10174 - xprt_disconnect_done(xprt);
10175 + xprt_force_disconnect(xprt);
10176 /* This receive buffer gets reposted automatically
10177 * when the connection is re-established.
10178 */
10179 diff --git a/net/sunrpc/xprtrdma/svc_rdma_backchannel.c b/net/sunrpc/xprtrdma/svc_rdma_backchannel.c
10180 index f3c147d70286..b908f2ca08fd 100644
10181 --- a/net/sunrpc/xprtrdma/svc_rdma_backchannel.c
10182 +++ b/net/sunrpc/xprtrdma/svc_rdma_backchannel.c
10183 @@ -200,11 +200,10 @@ rpcrdma_bc_send_request(struct svcxprt_rdma *rdma, struct rpc_rqst *rqst)
10184 svc_rdma_send_ctxt_put(rdma, ctxt);
10185 goto drop_connection;
10186 }
10187 - return rc;
10188 + return 0;
10189
10190 drop_connection:
10191 dprintk("svcrdma: failed to send bc call\n");
10192 - xprt_disconnect_done(xprt);
10193 return -ENOTCONN;
10194 }
10195
10196 @@ -225,8 +224,11 @@ xprt_rdma_bc_send_request(struct rpc_rqst *rqst)
10197
10198 ret = -ENOTCONN;
10199 rdma = container_of(sxprt, struct svcxprt_rdma, sc_xprt);
10200 - if (!test_bit(XPT_DEAD, &sxprt->xpt_flags))
10201 + if (!test_bit(XPT_DEAD, &sxprt->xpt_flags)) {
10202 ret = rpcrdma_bc_send_request(rdma, rqst);
10203 + if (ret == -ENOTCONN)
10204 + svc_close_xprt(sxprt);
10205 + }
10206
10207 mutex_unlock(&sxprt->xpt_mutex);
10208
10209 diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
10210 index ae2a83828953..e7683d3b1e6c 100644
10211 --- a/net/sunrpc/xprtrdma/transport.c
10212 +++ b/net/sunrpc/xprtrdma/transport.c
10213 @@ -437,8 +437,7 @@ out1:
10214 * Caller holds @xprt's send lock to prevent activity on this
10215 * transport while the connection is torn down.
10216 */
10217 -static void
10218 -xprt_rdma_close(struct rpc_xprt *xprt)
10219 +void xprt_rdma_close(struct rpc_xprt *xprt)
10220 {
10221 struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt);
10222 struct rpcrdma_ep *ep = &r_xprt->rx_ep;
10223 @@ -449,13 +448,13 @@ xprt_rdma_close(struct rpc_xprt *xprt)
10224 if (test_and_clear_bit(RPCRDMA_IAF_REMOVING, &ia->ri_flags)) {
10225 xprt_clear_connected(xprt);
10226 rpcrdma_ia_remove(ia);
10227 - return;
10228 + goto out;
10229 }
10230 +
10231 if (ep->rep_connected == -ENODEV)
10232 return;
10233 if (ep->rep_connected > 0)
10234 xprt->reestablish_timeout = 0;
10235 - xprt_disconnect_done(xprt);
10236 rpcrdma_ep_disconnect(ep, ia);
10237
10238 /* Prepare @xprt for the next connection by reinitializing
10239 @@ -463,6 +462,10 @@ xprt_rdma_close(struct rpc_xprt *xprt)
10240 */
10241 r_xprt->rx_buf.rb_credits = 1;
10242 xprt->cwnd = RPC_CWNDSHIFT;
10243 +
10244 +out:
10245 + ++xprt->connect_cookie;
10246 + xprt_disconnect_done(xprt);
10247 }
10248
10249 /**
10250 @@ -713,7 +716,7 @@ xprt_rdma_send_request(struct rpc_rqst *rqst)
10251 #endif /* CONFIG_SUNRPC_BACKCHANNEL */
10252
10253 if (!xprt_connected(xprt))
10254 - goto drop_connection;
10255 + return -ENOTCONN;
10256
10257 if (!xprt_request_get_cong(xprt, rqst))
10258 return -EBADSLT;
10259 @@ -745,8 +748,8 @@ failed_marshal:
10260 if (rc != -ENOTCONN)
10261 return rc;
10262 drop_connection:
10263 - xprt_disconnect_done(xprt);
10264 - return -ENOTCONN; /* implies disconnect */
10265 + xprt_rdma_close(xprt);
10266 + return -ENOTCONN;
10267 }
10268
10269 void xprt_rdma_print_stats(struct rpc_xprt *xprt, struct seq_file *seq)
10270 diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c
10271 index b9bc7f9f6bb9..919fddec0197 100644
10272 --- a/net/sunrpc/xprtrdma/verbs.c
10273 +++ b/net/sunrpc/xprtrdma/verbs.c
10274 @@ -316,7 +316,6 @@ rpcrdma_cm_event_handler(struct rdma_cm_id *id, struct rdma_cm_event *event)
10275 ep->rep_connected = -EAGAIN;
10276 goto disconnected;
10277 case RDMA_CM_EVENT_DISCONNECTED:
10278 - ++xprt->connect_cookie;
10279 ep->rep_connected = -ECONNABORTED;
10280 disconnected:
10281 xprt_force_disconnect(xprt);
10282 diff --git a/net/sunrpc/xprtrdma/xprt_rdma.h b/net/sunrpc/xprtrdma/xprt_rdma.h
10283 index a13ccb643ce0..0af75b1405f8 100644
10284 --- a/net/sunrpc/xprtrdma/xprt_rdma.h
10285 +++ b/net/sunrpc/xprtrdma/xprt_rdma.h
10286 @@ -653,6 +653,7 @@ static inline void rpcrdma_set_xdrlen(struct xdr_buf *xdr, size_t len)
10287 extern unsigned int xprt_rdma_max_inline_read;
10288 void xprt_rdma_format_addresses(struct rpc_xprt *xprt, struct sockaddr *sap);
10289 void xprt_rdma_free_addresses(struct rpc_xprt *xprt);
10290 +void xprt_rdma_close(struct rpc_xprt *xprt);
10291 void xprt_rdma_print_stats(struct rpc_xprt *xprt, struct seq_file *seq);
10292 int xprt_rdma_init(void);
10293 void xprt_rdma_cleanup(void);
10294 diff --git a/net/tipc/node.c b/net/tipc/node.c
10295 index 488019766433..32556f480a60 100644
10296 --- a/net/tipc/node.c
10297 +++ b/net/tipc/node.c
10298 @@ -624,6 +624,12 @@ static void tipc_node_timeout(struct timer_list *t)
10299
10300 __skb_queue_head_init(&xmitq);
10301
10302 + /* Initial node interval to value larger (10 seconds), then it will be
10303 + * recalculated with link lowest tolerance
10304 + */
10305 + tipc_node_read_lock(n);
10306 + n->keepalive_intv = 10000;
10307 + tipc_node_read_unlock(n);
10308 for (bearer_id = 0; remains && (bearer_id < MAX_BEARERS); bearer_id++) {
10309 tipc_node_read_lock(n);
10310 le = &n->links[bearer_id];
10311 diff --git a/samples/livepatch/livepatch-shadow-fix1.c b/samples/livepatch/livepatch-shadow-fix1.c
10312 index 49b13553eaae..e8f1bd6b29b1 100644
10313 --- a/samples/livepatch/livepatch-shadow-fix1.c
10314 +++ b/samples/livepatch/livepatch-shadow-fix1.c
10315 @@ -89,6 +89,11 @@ struct dummy *livepatch_fix1_dummy_alloc(void)
10316 * pointer to handle resource release.
10317 */
10318 leak = kzalloc(sizeof(int), GFP_KERNEL);
10319 + if (!leak) {
10320 + kfree(d);
10321 + return NULL;
10322 + }
10323 +
10324 klp_shadow_alloc(d, SV_LEAK, sizeof(leak), GFP_KERNEL,
10325 shadow_leak_ctor, leak);
10326
10327 diff --git a/samples/livepatch/livepatch-shadow-mod.c b/samples/livepatch/livepatch-shadow-mod.c
10328 index 4c54b250332d..4aa8a88d3cd6 100644
10329 --- a/samples/livepatch/livepatch-shadow-mod.c
10330 +++ b/samples/livepatch/livepatch-shadow-mod.c
10331 @@ -118,6 +118,10 @@ noinline struct dummy *dummy_alloc(void)
10332
10333 /* Oops, forgot to save leak! */
10334 leak = kzalloc(sizeof(int), GFP_KERNEL);
10335 + if (!leak) {
10336 + kfree(d);
10337 + return NULL;
10338 + }
10339
10340 pr_info("%s: dummy @ %p, expires @ %lx\n",
10341 __func__, d, d->jiffies_expire);
10342 diff --git a/scripts/decode_stacktrace.sh b/scripts/decode_stacktrace.sh
10343 index 64220e36ce3b..98a7d63a723e 100755
10344 --- a/scripts/decode_stacktrace.sh
10345 +++ b/scripts/decode_stacktrace.sh
10346 @@ -78,7 +78,7 @@ parse_symbol() {
10347 fi
10348
10349 # Strip out the base of the path
10350 - code=${code//$basepath/""}
10351 + code=${code//^$basepath/""}
10352
10353 # In the case of inlines, move everything to same line
10354 code=${code//$'\n'/' '}
10355 diff --git a/scripts/gdb/linux/proc.py b/scripts/gdb/linux/proc.py
10356 index 086d27223c0c..0aebd7565b03 100644
10357 --- a/scripts/gdb/linux/proc.py
10358 +++ b/scripts/gdb/linux/proc.py
10359 @@ -41,7 +41,7 @@ class LxVersion(gdb.Command):
10360
10361 def invoke(self, arg, from_tty):
10362 # linux_banner should contain a newline
10363 - gdb.write(gdb.parse_and_eval("linux_banner").string())
10364 + gdb.write(gdb.parse_and_eval("(char *)linux_banner").string())
10365
10366 LxVersion()
10367
10368 diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
10369 index 5a5b3780456f..5a77efd39b3f 100644
10370 --- a/scripts/mod/modpost.c
10371 +++ b/scripts/mod/modpost.c
10372 @@ -1204,6 +1204,30 @@ static int secref_whitelist(const struct sectioncheck *mismatch,
10373 return 1;
10374 }
10375
10376 +static inline int is_arm_mapping_symbol(const char *str)
10377 +{
10378 + return str[0] == '$' && strchr("axtd", str[1])
10379 + && (str[2] == '\0' || str[2] == '.');
10380 +}
10381 +
10382 +/*
10383 + * If there's no name there, ignore it; likewise, ignore it if it's
10384 + * one of the magic symbols emitted used by current ARM tools.
10385 + *
10386 + * Otherwise if find_symbols_between() returns those symbols, they'll
10387 + * fail the whitelist tests and cause lots of false alarms ... fixable
10388 + * only by merging __exit and __init sections into __text, bloating
10389 + * the kernel (which is especially evil on embedded platforms).
10390 + */
10391 +static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
10392 +{
10393 + const char *name = elf->strtab + sym->st_name;
10394 +
10395 + if (!name || !strlen(name))
10396 + return 0;
10397 + return !is_arm_mapping_symbol(name);
10398 +}
10399 +
10400 /**
10401 * Find symbol based on relocation record info.
10402 * In some cases the symbol supplied is a valid symbol so
10403 @@ -1229,6 +1253,8 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
10404 continue;
10405 if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
10406 continue;
10407 + if (!is_valid_name(elf, sym))
10408 + continue;
10409 if (sym->st_value == addr)
10410 return sym;
10411 /* Find a symbol nearby - addr are maybe negative */
10412 @@ -1247,30 +1273,6 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
10413 return NULL;
10414 }
10415
10416 -static inline int is_arm_mapping_symbol(const char *str)
10417 -{
10418 - return str[0] == '$' && strchr("axtd", str[1])
10419 - && (str[2] == '\0' || str[2] == '.');
10420 -}
10421 -
10422 -/*
10423 - * If there's no name there, ignore it; likewise, ignore it if it's
10424 - * one of the magic symbols emitted used by current ARM tools.
10425 - *
10426 - * Otherwise if find_symbols_between() returns those symbols, they'll
10427 - * fail the whitelist tests and cause lots of false alarms ... fixable
10428 - * only by merging __exit and __init sections into __text, bloating
10429 - * the kernel (which is especially evil on embedded platforms).
10430 - */
10431 -static inline int is_valid_name(struct elf_info *elf, Elf_Sym *sym)
10432 -{
10433 - const char *name = elf->strtab + sym->st_name;
10434 -
10435 - if (!name || !strlen(name))
10436 - return 0;
10437 - return !is_arm_mapping_symbol(name);
10438 -}
10439 -
10440 /*
10441 * Find symbols before or equal addr and after addr - in the section sec.
10442 * If we find two symbols with equal offset prefer one with a valid name.
10443 diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
10444 index 81fb4c1631e9..cd720c06b78c 100644
10445 --- a/security/smack/smack_lsm.c
10446 +++ b/security/smack/smack_lsm.c
10447 @@ -4333,6 +4333,12 @@ static int smack_key_permission(key_ref_t key_ref,
10448 int request = 0;
10449 int rc;
10450
10451 + /*
10452 + * Validate requested permissions
10453 + */
10454 + if (perm & ~KEY_NEED_ALL)
10455 + return -EINVAL;
10456 +
10457 keyp = key_ref_to_ptr(key_ref);
10458 if (keyp == NULL)
10459 return -EINVAL;
10460 @@ -4356,10 +4362,10 @@ static int smack_key_permission(key_ref_t key_ref,
10461 ad.a.u.key_struct.key = keyp->serial;
10462 ad.a.u.key_struct.key_desc = keyp->description;
10463 #endif
10464 - if (perm & KEY_NEED_READ)
10465 - request = MAY_READ;
10466 + if (perm & (KEY_NEED_READ | KEY_NEED_SEARCH | KEY_NEED_VIEW))
10467 + request |= MAY_READ;
10468 if (perm & (KEY_NEED_WRITE | KEY_NEED_LINK | KEY_NEED_SETATTR))
10469 - request = MAY_WRITE;
10470 + request |= MAY_WRITE;
10471 rc = smk_access(tkp, keyp->security, request, &ad);
10472 rc = smk_bu_note("key access", tkp, keyp->security, request, rc);
10473 return rc;
10474 diff --git a/sound/pci/hda/hda_bind.c b/sound/pci/hda/hda_bind.c
10475 index 9174f1b3a987..1ec706ced75c 100644
10476 --- a/sound/pci/hda/hda_bind.c
10477 +++ b/sound/pci/hda/hda_bind.c
10478 @@ -115,7 +115,8 @@ static int hda_codec_driver_probe(struct device *dev)
10479 err = snd_hda_codec_build_controls(codec);
10480 if (err < 0)
10481 goto error_module;
10482 - if (codec->card->registered) {
10483 + /* only register after the bus probe finished; otherwise it's racy */
10484 + if (!codec->bus->bus_probing && codec->card->registered) {
10485 err = snd_card_register(codec->card);
10486 if (err < 0)
10487 goto error_module;
10488 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
10489 index 76f03abd15ab..356fda583847 100644
10490 --- a/sound/pci/hda/hda_intel.c
10491 +++ b/sound/pci/hda/hda_intel.c
10492 @@ -2228,6 +2228,7 @@ static int azx_probe_continue(struct azx *chip)
10493 int dev = chip->dev_index;
10494 int err;
10495
10496 + to_hda_bus(bus)->bus_probing = 1;
10497 hda->probe_continued = 1;
10498
10499 /* bind with i915 if needed */
10500 @@ -2323,6 +2324,7 @@ i915_power_fail:
10501 if (err < 0)
10502 hda->init_failed = 1;
10503 complete_all(&hda->probe_wait);
10504 + to_hda_bus(bus)->bus_probing = 0;
10505 return err;
10506 }
10507
10508 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
10509 index 0bfd78b7e0ca..c1042df5e346 100644
10510 --- a/sound/pci/hda/patch_realtek.c
10511 +++ b/sound/pci/hda/patch_realtek.c
10512 @@ -515,6 +515,15 @@ static void alc_auto_init_amp(struct hda_codec *codec, int type)
10513 }
10514 }
10515
10516 +/* get a primary headphone pin if available */
10517 +static hda_nid_t alc_get_hp_pin(struct alc_spec *spec)
10518 +{
10519 + if (spec->gen.autocfg.hp_pins[0])
10520 + return spec->gen.autocfg.hp_pins[0];
10521 + if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
10522 + return spec->gen.autocfg.line_out_pins[0];
10523 + return 0;
10524 +}
10525
10526 /*
10527 * Realtek SSID verification
10528 @@ -725,9 +734,7 @@ do_sku:
10529 * 15 : 1 --> enable the function "Mute internal speaker
10530 * when the external headphone out jack is plugged"
10531 */
10532 - if (!spec->gen.autocfg.hp_pins[0] &&
10533 - !(spec->gen.autocfg.line_out_pins[0] &&
10534 - spec->gen.autocfg.line_out_type == AUTO_PIN_HP_OUT)) {
10535 + if (!alc_get_hp_pin(spec)) {
10536 hda_nid_t nid;
10537 tmp = (ass >> 11) & 0x3; /* HP to chassis */
10538 nid = ports[tmp];
10539 @@ -2959,7 +2966,7 @@ static void alc282_restore_default_value(struct hda_codec *codec)
10540 static void alc282_init(struct hda_codec *codec)
10541 {
10542 struct alc_spec *spec = codec->spec;
10543 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10544 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10545 bool hp_pin_sense;
10546 int coef78;
10547
10548 @@ -2996,7 +3003,7 @@ static void alc282_init(struct hda_codec *codec)
10549 static void alc282_shutup(struct hda_codec *codec)
10550 {
10551 struct alc_spec *spec = codec->spec;
10552 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10553 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10554 bool hp_pin_sense;
10555 int coef78;
10556
10557 @@ -3074,14 +3081,9 @@ static void alc283_restore_default_value(struct hda_codec *codec)
10558 static void alc283_init(struct hda_codec *codec)
10559 {
10560 struct alc_spec *spec = codec->spec;
10561 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10562 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10563 bool hp_pin_sense;
10564
10565 - if (!spec->gen.autocfg.hp_outs) {
10566 - if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
10567 - hp_pin = spec->gen.autocfg.line_out_pins[0];
10568 - }
10569 -
10570 alc283_restore_default_value(codec);
10571
10572 if (!hp_pin)
10573 @@ -3115,14 +3117,9 @@ static void alc283_init(struct hda_codec *codec)
10574 static void alc283_shutup(struct hda_codec *codec)
10575 {
10576 struct alc_spec *spec = codec->spec;
10577 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10578 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10579 bool hp_pin_sense;
10580
10581 - if (!spec->gen.autocfg.hp_outs) {
10582 - if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
10583 - hp_pin = spec->gen.autocfg.line_out_pins[0];
10584 - }
10585 -
10586 if (!hp_pin) {
10587 alc269_shutup(codec);
10588 return;
10589 @@ -3156,7 +3153,7 @@ static void alc283_shutup(struct hda_codec *codec)
10590 static void alc256_init(struct hda_codec *codec)
10591 {
10592 struct alc_spec *spec = codec->spec;
10593 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10594 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10595 bool hp_pin_sense;
10596
10597 if (!hp_pin)
10598 @@ -3192,7 +3189,7 @@ static void alc256_init(struct hda_codec *codec)
10599 static void alc256_shutup(struct hda_codec *codec)
10600 {
10601 struct alc_spec *spec = codec->spec;
10602 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10603 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10604 bool hp_pin_sense;
10605
10606 if (!hp_pin) {
10607 @@ -3228,7 +3225,7 @@ static void alc256_shutup(struct hda_codec *codec)
10608 static void alc225_init(struct hda_codec *codec)
10609 {
10610 struct alc_spec *spec = codec->spec;
10611 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10612 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10613 bool hp1_pin_sense, hp2_pin_sense;
10614
10615 if (!hp_pin)
10616 @@ -3271,7 +3268,7 @@ static void alc225_init(struct hda_codec *codec)
10617 static void alc225_shutup(struct hda_codec *codec)
10618 {
10619 struct alc_spec *spec = codec->spec;
10620 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10621 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10622 bool hp1_pin_sense, hp2_pin_sense;
10623
10624 if (!hp_pin) {
10625 @@ -3315,7 +3312,7 @@ static void alc225_shutup(struct hda_codec *codec)
10626 static void alc_default_init(struct hda_codec *codec)
10627 {
10628 struct alc_spec *spec = codec->spec;
10629 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10630 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10631 bool hp_pin_sense;
10632
10633 if (!hp_pin)
10634 @@ -3344,7 +3341,7 @@ static void alc_default_init(struct hda_codec *codec)
10635 static void alc_default_shutup(struct hda_codec *codec)
10636 {
10637 struct alc_spec *spec = codec->spec;
10638 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10639 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10640 bool hp_pin_sense;
10641
10642 if (!hp_pin) {
10643 @@ -3376,7 +3373,7 @@ static void alc_default_shutup(struct hda_codec *codec)
10644 static void alc294_hp_init(struct hda_codec *codec)
10645 {
10646 struct alc_spec *spec = codec->spec;
10647 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10648 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10649 int i, val;
10650
10651 if (!hp_pin)
10652 @@ -4780,7 +4777,7 @@ static void alc_update_headset_mode(struct hda_codec *codec)
10653 struct alc_spec *spec = codec->spec;
10654
10655 hda_nid_t mux_pin = spec->gen.imux_pins[spec->gen.cur_mux[0]];
10656 - hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
10657 + hda_nid_t hp_pin = alc_get_hp_pin(spec);
10658
10659 int new_headset_mode;
10660
10661 @@ -5059,7 +5056,7 @@ static void alc_fixup_tpt470_dock(struct hda_codec *codec,
10662 static void alc_shutup_dell_xps13(struct hda_codec *codec)
10663 {
10664 struct alc_spec *spec = codec->spec;
10665 - int hp_pin = spec->gen.autocfg.hp_pins[0];
10666 + int hp_pin = alc_get_hp_pin(spec);
10667
10668 /* Prevent pop noises when headphones are plugged in */
10669 snd_hda_codec_write(codec, hp_pin, 0,
10670 @@ -5152,7 +5149,7 @@ static void alc271_hp_gate_mic_jack(struct hda_codec *codec,
10671
10672 if (action == HDA_FIXUP_ACT_PROBE) {
10673 int mic_pin = find_ext_mic_pin(codec);
10674 - int hp_pin = spec->gen.autocfg.hp_pins[0];
10675 + int hp_pin = alc_get_hp_pin(spec);
10676
10677 if (snd_BUG_ON(!mic_pin || !hp_pin))
10678 return;
10679 @@ -5575,6 +5572,7 @@ enum {
10680 ALC294_FIXUP_ASUS_MIC,
10681 ALC294_FIXUP_ASUS_HEADSET_MIC,
10682 ALC294_FIXUP_ASUS_SPK,
10683 + ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
10684 };
10685
10686 static const struct hda_fixup alc269_fixups[] = {
10687 @@ -6499,6 +6497,15 @@ static const struct hda_fixup alc269_fixups[] = {
10688 .chained = true,
10689 .chain_id = ALC294_FIXUP_ASUS_HEADSET_MIC
10690 },
10691 + [ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE] = {
10692 + .type = HDA_FIXUP_PINS,
10693 + .v.pins = (const struct hda_pintbl[]) {
10694 + { 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */
10695 + { }
10696 + },
10697 + .chained = true,
10698 + .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
10699 + },
10700 };
10701
10702 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
10703 @@ -6677,6 +6684,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
10704 SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC),
10705 SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC),
10706 SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC),
10707 + SND_PCI_QUIRK(0x1558, 0x1325, "System76 Darter Pro (darp5)", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
10708 SND_PCI_QUIRK(0x17aa, 0x1036, "Lenovo P520", ALC233_FIXUP_LENOVO_MULTI_CODECS),
10709 SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE),
10710 SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE),
10711 diff --git a/sound/soc/fsl/Kconfig b/sound/soc/fsl/Kconfig
10712 index 6ec19fb4a934..2e75b5bc5f1d 100644
10713 --- a/sound/soc/fsl/Kconfig
10714 +++ b/sound/soc/fsl/Kconfig
10715 @@ -221,7 +221,7 @@ config SND_SOC_PHYCORE_AC97
10716
10717 config SND_SOC_EUKREA_TLV320
10718 tristate "Eukrea TLV320"
10719 - depends on ARCH_MXC && I2C
10720 + depends on ARCH_MXC && !ARM64 && I2C
10721 select SND_SOC_TLV320AIC23_I2C
10722 select SND_SOC_IMX_AUDMUX
10723 select SND_SOC_IMX_SSI
10724 diff --git a/sound/soc/intel/atom/sst/sst_loader.c b/sound/soc/intel/atom/sst/sst_loader.c
10725 index 27413ebae956..b8c456753f01 100644
10726 --- a/sound/soc/intel/atom/sst/sst_loader.c
10727 +++ b/sound/soc/intel/atom/sst/sst_loader.c
10728 @@ -354,14 +354,14 @@ static int sst_request_fw(struct intel_sst_drv *sst)
10729 const struct firmware *fw;
10730
10731 retval = request_firmware(&fw, sst->firmware_name, sst->dev);
10732 - if (fw == NULL) {
10733 - dev_err(sst->dev, "fw is returning as null\n");
10734 - return -EINVAL;
10735 - }
10736 if (retval) {
10737 dev_err(sst->dev, "request fw failed %d\n", retval);
10738 return retval;
10739 }
10740 + if (fw == NULL) {
10741 + dev_err(sst->dev, "fw is returning as null\n");
10742 + return -EINVAL;
10743 + }
10744 mutex_lock(&sst->sst_lock);
10745 retval = sst_cache_and_parse_fw(sst, fw);
10746 mutex_unlock(&sst->sst_lock);
10747 diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
10748 index 7e93686a430a..d71e01954975 100644
10749 --- a/sound/usb/quirks.c
10750 +++ b/sound/usb/quirks.c
10751 @@ -1448,6 +1448,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
10752 case 0x20b1: /* XMOS based devices */
10753 case 0x152a: /* Thesycon devices */
10754 case 0x25ce: /* Mytek devices */
10755 + case 0x2ab6: /* T+A devices */
10756 if (fp->dsd_raw)
10757 return SNDRV_PCM_FMTBIT_DSD_U32_BE;
10758 break;
10759 diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c
10760 index 70fd48d79f61..05d715e6b128 100644
10761 --- a/tools/bpf/bpftool/common.c
10762 +++ b/tools/bpf/bpftool/common.c
10763 @@ -58,7 +58,7 @@
10764 #define BPF_FS_MAGIC 0xcafe4a11
10765 #endif
10766
10767 -void p_err(const char *fmt, ...)
10768 +void __printf(1, 2) p_err(const char *fmt, ...)
10769 {
10770 va_list ap;
10771
10772 @@ -76,7 +76,7 @@ void p_err(const char *fmt, ...)
10773 va_end(ap);
10774 }
10775
10776 -void p_info(const char *fmt, ...)
10777 +void __printf(1, 2) p_info(const char *fmt, ...)
10778 {
10779 va_list ap;
10780
10781 diff --git a/tools/bpf/bpftool/json_writer.c b/tools/bpf/bpftool/json_writer.c
10782 index c6eef76322ae..4e4149421d07 100644
10783 --- a/tools/bpf/bpftool/json_writer.c
10784 +++ b/tools/bpf/bpftool/json_writer.c
10785 @@ -19,6 +19,7 @@
10786 #include <malloc.h>
10787 #include <inttypes.h>
10788 #include <stdint.h>
10789 +#include <linux/compiler.h>
10790
10791 #include "json_writer.h"
10792
10793 @@ -156,7 +157,8 @@ void jsonw_name(json_writer_t *self, const char *name)
10794 putc(' ', self->out);
10795 }
10796
10797 -void jsonw_vprintf_enquote(json_writer_t *self, const char *fmt, va_list ap)
10798 +void __printf(2, 0)
10799 +jsonw_vprintf_enquote(json_writer_t *self, const char *fmt, va_list ap)
10800 {
10801 jsonw_eor(self);
10802 putc('"', self->out);
10803 @@ -164,7 +166,7 @@ void jsonw_vprintf_enquote(json_writer_t *self, const char *fmt, va_list ap)
10804 putc('"', self->out);
10805 }
10806
10807 -void jsonw_printf(json_writer_t *self, const char *fmt, ...)
10808 +void __printf(2, 3) jsonw_printf(json_writer_t *self, const char *fmt, ...)
10809 {
10810 va_list ap;
10811
10812 diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c
10813 index 7bf38f0e152e..9988d5c126b6 100644
10814 --- a/tools/bpf/bpftool/map.c
10815 +++ b/tools/bpf/bpftool/map.c
10816 @@ -383,7 +383,10 @@ static void print_entry_plain(struct bpf_map_info *info, unsigned char *key,
10817 printf(single_line ? " " : "\n");
10818
10819 printf("value:%c", break_names ? '\n' : ' ');
10820 - fprint_hex(stdout, value, info->value_size, " ");
10821 + if (value)
10822 + fprint_hex(stdout, value, info->value_size, " ");
10823 + else
10824 + printf("<no entry>");
10825
10826 printf("\n");
10827 } else {
10828 @@ -398,8 +401,11 @@ static void print_entry_plain(struct bpf_map_info *info, unsigned char *key,
10829 for (i = 0; i < n; i++) {
10830 printf("value (CPU %02d):%c",
10831 i, info->value_size > 16 ? '\n' : ' ');
10832 - fprint_hex(stdout, value + i * step,
10833 - info->value_size, " ");
10834 + if (value)
10835 + fprint_hex(stdout, value + i * step,
10836 + info->value_size, " ");
10837 + else
10838 + printf("<no entry>");
10839 printf("\n");
10840 }
10841 }
10842 @@ -731,7 +737,11 @@ static int dump_map_elem(int fd, void *key, void *value,
10843 jsonw_string_field(json_wtr, "error", strerror(lookup_errno));
10844 jsonw_end_object(json_wtr);
10845 } else {
10846 - print_entry_error(map_info, key, strerror(lookup_errno));
10847 + if (errno == ENOENT)
10848 + print_entry_plain(map_info, key, NULL);
10849 + else
10850 + print_entry_error(map_info, key,
10851 + strerror(lookup_errno));
10852 }
10853
10854 return 0;
10855 diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c
10856 index ccee180dfb76..69b01a6158bd 100644
10857 --- a/tools/bpf/bpftool/prog.c
10858 +++ b/tools/bpf/bpftool/prog.c
10859 @@ -84,7 +84,7 @@ static const char * const attach_type_strings[] = {
10860 [__MAX_BPF_ATTACH_TYPE] = NULL,
10861 };
10862
10863 -enum bpf_attach_type parse_attach_type(const char *str)
10864 +static enum bpf_attach_type parse_attach_type(const char *str)
10865 {
10866 enum bpf_attach_type type;
10867
10868 @@ -713,7 +713,7 @@ struct map_replace {
10869 char *name;
10870 };
10871
10872 -int map_replace_compar(const void *p1, const void *p2)
10873 +static int map_replace_compar(const void *p1, const void *p2)
10874 {
10875 const struct map_replace *a = p1, *b = p2;
10876
10877 diff --git a/tools/bpf/bpftool/xlated_dumper.c b/tools/bpf/bpftool/xlated_dumper.c
10878 index 3284759df98a..98083e4dc0f9 100644
10879 --- a/tools/bpf/bpftool/xlated_dumper.c
10880 +++ b/tools/bpf/bpftool/xlated_dumper.c
10881 @@ -114,7 +114,7 @@ struct kernel_sym *kernel_syms_search(struct dump_data *dd,
10882 sizeof(*dd->sym_mapping), kernel_syms_cmp) : NULL;
10883 }
10884
10885 -static void print_insn(void *private_data, const char *fmt, ...)
10886 +static void __printf(2, 3) print_insn(void *private_data, const char *fmt, ...)
10887 {
10888 va_list args;
10889
10890 @@ -123,7 +123,7 @@ static void print_insn(void *private_data, const char *fmt, ...)
10891 va_end(args);
10892 }
10893
10894 -static void
10895 +static void __printf(2, 3)
10896 print_insn_for_graph(void *private_data, const char *fmt, ...)
10897 {
10898 char buf[64], *p;
10899 @@ -154,7 +154,8 @@ print_insn_for_graph(void *private_data, const char *fmt, ...)
10900 printf("%s", buf);
10901 }
10902
10903 -static void print_insn_json(void *private_data, const char *fmt, ...)
10904 +static void __printf(2, 3)
10905 +print_insn_json(void *private_data, const char *fmt, ...)
10906 {
10907 unsigned int l = strlen(fmt);
10908 char chomped_fmt[l];
10909 diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
10910 index d74bb9414d7c..81dda411e9d3 100644
10911 --- a/tools/build/Makefile.feature
10912 +++ b/tools/build/Makefile.feature
10913 @@ -80,8 +80,8 @@ FEATURE_TESTS_EXTRA := \
10914 cplus-demangle \
10915 hello \
10916 libbabeltrace \
10917 - liberty \
10918 - liberty-z \
10919 + libbfd-liberty \
10920 + libbfd-liberty-z \
10921 libunwind-debug-frame \
10922 libunwind-debug-frame-arm \
10923 libunwind-debug-frame-aarch64 \
10924 diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
10925 index 304b984f11b9..912b82d4b70a 100644
10926 --- a/tools/build/feature/Makefile
10927 +++ b/tools/build/feature/Makefile
10928 @@ -16,8 +16,8 @@ FILES= \
10929 test-libbfd.bin \
10930 test-disassembler-four-args.bin \
10931 test-reallocarray.bin \
10932 - test-liberty.bin \
10933 - test-liberty-z.bin \
10934 + test-libbfd-liberty.bin \
10935 + test-libbfd-liberty-z.bin \
10936 test-cplus-demangle.bin \
10937 test-libelf.bin \
10938 test-libelf-getphdrnum.bin \
10939 @@ -204,7 +204,7 @@ $(OUTPUT)test-libpython-version.bin:
10940 $(BUILD)
10941
10942 $(OUTPUT)test-libbfd.bin:
10943 - $(BUILD) -DPACKAGE='"perf"' -lbfd -lz -liberty -ldl
10944 + $(BUILD) -DPACKAGE='"perf"' -lbfd -ldl
10945
10946 $(OUTPUT)test-disassembler-four-args.bin:
10947 $(BUILD) -DPACKAGE='"perf"' -lbfd -lopcodes
10948 @@ -212,10 +212,10 @@ $(OUTPUT)test-disassembler-four-args.bin:
10949 $(OUTPUT)test-reallocarray.bin:
10950 $(BUILD)
10951
10952 -$(OUTPUT)test-liberty.bin:
10953 +$(OUTPUT)test-libbfd-liberty.bin:
10954 $(CC) $(CFLAGS) -Wall -Werror -o $@ test-libbfd.c -DPACKAGE='"perf"' $(LDFLAGS) -lbfd -ldl -liberty
10955
10956 -$(OUTPUT)test-liberty-z.bin:
10957 +$(OUTPUT)test-libbfd-liberty-z.bin:
10958 $(CC) $(CFLAGS) -Wall -Werror -o $@ test-libbfd.c -DPACKAGE='"perf"' $(LDFLAGS) -lbfd -ldl -liberty -lz
10959
10960 $(OUTPUT)test-cplus-demangle.bin:
10961 diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
10962 index bbb2a8ef367c..d7e06fe0270e 100644
10963 --- a/tools/hv/hv_kvp_daemon.c
10964 +++ b/tools/hv/hv_kvp_daemon.c
10965 @@ -1178,6 +1178,7 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val)
10966 FILE *file;
10967 char cmd[PATH_MAX];
10968 char *mac_addr;
10969 + int str_len;
10970
10971 /*
10972 * Set the configuration for the specified interface with
10973 @@ -1301,8 +1302,18 @@ static int kvp_set_ip_info(char *if_name, struct hv_kvp_ipaddr_value *new_val)
10974 * invoke the external script to do its magic.
10975 */
10976
10977 - snprintf(cmd, sizeof(cmd), KVP_SCRIPTS_PATH "%s %s",
10978 - "hv_set_ifconfig", if_file);
10979 + str_len = snprintf(cmd, sizeof(cmd), KVP_SCRIPTS_PATH "%s %s",
10980 + "hv_set_ifconfig", if_file);
10981 + /*
10982 + * This is a little overcautious, but it's necessary to suppress some
10983 + * false warnings from gcc 8.0.1.
10984 + */
10985 + if (str_len <= 0 || (unsigned int)str_len >= sizeof(cmd)) {
10986 + syslog(LOG_ERR, "Cmd '%s' (len=%d) may be too long",
10987 + cmd, str_len);
10988 + return HV_E_FAIL;
10989 + }
10990 +
10991 if (system(cmd)) {
10992 syslog(LOG_ERR, "Failed to execute cmd '%s'; error: %d %s",
10993 cmd, errno, strerror(errno));
10994 diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
10995 index 03f9bcc4ef50..961e1b9fc592 100644
10996 --- a/tools/lib/bpf/bpf.c
10997 +++ b/tools/lib/bpf/bpf.c
10998 @@ -69,6 +69,7 @@ int bpf_create_map_xattr(const struct bpf_create_map_attr *create_attr)
10999 {
11000 __u32 name_len = create_attr->name ? strlen(create_attr->name) : 0;
11001 union bpf_attr attr;
11002 + int ret;
11003
11004 memset(&attr, '\0', sizeof(attr));
11005
11006 @@ -86,7 +87,15 @@ int bpf_create_map_xattr(const struct bpf_create_map_attr *create_attr)
11007 attr.map_ifindex = create_attr->map_ifindex;
11008 attr.inner_map_fd = create_attr->inner_map_fd;
11009
11010 - return sys_bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
11011 + ret = sys_bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
11012 + if (ret < 0 && errno == EINVAL && create_attr->name) {
11013 + /* Retry the same syscall, but without the name.
11014 + * Pre v4.14 kernels don't support map names.
11015 + */
11016 + memset(attr.map_name, 0, sizeof(attr.map_name));
11017 + return sys_bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
11018 + }
11019 + return ret;
11020 }
11021
11022 int bpf_create_map_node(enum bpf_map_type map_type, const char *name,
11023 diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
11024 index acbb657f7ce2..a0f366c7a318 100644
11025 --- a/tools/perf/Makefile.config
11026 +++ b/tools/perf/Makefile.config
11027 @@ -693,18 +693,20 @@ endif
11028
11029 ifeq ($(feature-libbfd), 1)
11030 EXTLIBS += -lbfd
11031 +else
11032 + # we are on a system that requires -liberty and (maybe) -lz
11033 + # to link against -lbfd; test each case individually here
11034
11035 # call all detections now so we get correct
11036 # status in VF output
11037 - $(call feature_check,liberty)
11038 - $(call feature_check,liberty-z)
11039 - $(call feature_check,cplus-demangle)
11040 + $(call feature_check,libbfd-liberty)
11041 + $(call feature_check,libbfd-liberty-z)
11042
11043 - ifeq ($(feature-liberty), 1)
11044 - EXTLIBS += -liberty
11045 + ifeq ($(feature-libbfd-liberty), 1)
11046 + EXTLIBS += -lbfd -liberty
11047 else
11048 - ifeq ($(feature-liberty-z), 1)
11049 - EXTLIBS += -liberty -lz
11050 + ifeq ($(feature-libbfd-liberty-z), 1)
11051 + EXTLIBS += -lbfd -liberty -lz
11052 endif
11053 endif
11054 endif
11055 @@ -714,24 +716,24 @@ ifdef NO_DEMANGLE
11056 else
11057 ifdef HAVE_CPLUS_DEMANGLE_SUPPORT
11058 EXTLIBS += -liberty
11059 - CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
11060 else
11061 - ifneq ($(feature-libbfd), 1)
11062 - ifneq ($(feature-liberty), 1)
11063 - ifneq ($(feature-liberty-z), 1)
11064 - # we dont have neither HAVE_CPLUS_DEMANGLE_SUPPORT
11065 - # or any of 'bfd iberty z' trinity
11066 - ifeq ($(feature-cplus-demangle), 1)
11067 - EXTLIBS += -liberty
11068 - CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
11069 - else
11070 - msg := $(warning No bfd.h/libbfd found, please install binutils-dev[el]/zlib-static/libiberty-dev to gain symbol demangling)
11071 - CFLAGS += -DNO_DEMANGLE
11072 - endif
11073 - endif
11074 + ifeq ($(filter -liberty,$(EXTLIBS)),)
11075 + $(call feature_check,cplus-demangle)
11076 +
11077 + # we dont have neither HAVE_CPLUS_DEMANGLE_SUPPORT
11078 + # or any of 'bfd iberty z' trinity
11079 + ifeq ($(feature-cplus-demangle), 1)
11080 + EXTLIBS += -liberty
11081 + else
11082 + msg := $(warning No bfd.h/libbfd found, please install binutils-dev[el]/zlib-static/libiberty-dev to gain symbol demangling)
11083 + CFLAGS += -DNO_DEMANGLE
11084 endif
11085 endif
11086 endif
11087 +
11088 + ifneq ($(filter -liberty,$(EXTLIBS)),)
11089 + CFLAGS += -DHAVE_CPLUS_DEMANGLE_SUPPORT
11090 + endif
11091 endif
11092
11093 ifneq ($(filter -lbfd,$(EXTLIBS)),)
11094 diff --git a/tools/perf/arch/x86/util/kvm-stat.c b/tools/perf/arch/x86/util/kvm-stat.c
11095 index b32409a0e546..081353d7b095 100644
11096 --- a/tools/perf/arch/x86/util/kvm-stat.c
11097 +++ b/tools/perf/arch/x86/util/kvm-stat.c
11098 @@ -156,7 +156,7 @@ int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid)
11099 if (strstr(cpuid, "Intel")) {
11100 kvm->exit_reasons = vmx_exit_reasons;
11101 kvm->exit_reasons_isa = "VMX";
11102 - } else if (strstr(cpuid, "AMD")) {
11103 + } else if (strstr(cpuid, "AMD") || strstr(cpuid, "Hygon")) {
11104 kvm->exit_reasons = svm_exit_reasons;
11105 kvm->exit_reasons_isa = "SVM";
11106 } else
11107 diff --git a/tools/perf/tests/attr.py b/tools/perf/tests/attr.py
11108 index ff9b60b99f52..44090a9a19f3 100644
11109 --- a/tools/perf/tests/attr.py
11110 +++ b/tools/perf/tests/attr.py
11111 @@ -116,7 +116,7 @@ class Event(dict):
11112 if not self.has_key(t) or not other.has_key(t):
11113 continue
11114 if not data_equal(self[t], other[t]):
11115 - log.warning("expected %s=%s, got %s" % (t, self[t], other[t]))
11116 + log.warning("expected %s=%s, got %s" % (t, self[t], other[t]))
11117
11118 # Test file description needs to have following sections:
11119 # [config]
11120 diff --git a/tools/perf/tests/evsel-tp-sched.c b/tools/perf/tests/evsel-tp-sched.c
11121 index 5f8501c68da4..5cbba70bcdd0 100644
11122 --- a/tools/perf/tests/evsel-tp-sched.c
11123 +++ b/tools/perf/tests/evsel-tp-sched.c
11124 @@ -17,7 +17,7 @@ static int perf_evsel__test_field(struct perf_evsel *evsel, const char *name,
11125 return -1;
11126 }
11127
11128 - is_signed = !!(field->flags | TEP_FIELD_IS_SIGNED);
11129 + is_signed = !!(field->flags & TEP_FIELD_IS_SIGNED);
11130 if (should_be_signed && !is_signed) {
11131 pr_debug("%s: \"%s\" signedness(%d) is wrong, should be %d\n",
11132 evsel->name, name, is_signed, should_be_signed);
11133 diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
11134 index bbed90e5d9bb..cee717a3794f 100644
11135 --- a/tools/perf/util/dso.c
11136 +++ b/tools/perf/util/dso.c
11137 @@ -295,7 +295,7 @@ static int decompress_kmodule(struct dso *dso, const char *name,
11138 unlink(tmpbuf);
11139
11140 if (pathname && (fd >= 0))
11141 - strncpy(pathname, tmpbuf, len);
11142 + strlcpy(pathname, tmpbuf, len);
11143
11144 return fd;
11145 }
11146 diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
11147 index 4fd45be95a43..05f40bb51a88 100644
11148 --- a/tools/perf/util/header.c
11149 +++ b/tools/perf/util/header.c
11150 @@ -2659,6 +2659,7 @@ int perf_header__fprintf_info(struct perf_session *session, FILE *fp, bool full)
11151 struct perf_header *header = &session->header;
11152 int fd = perf_data__fd(session->data);
11153 struct stat st;
11154 + time_t stctime;
11155 int ret, bit;
11156
11157 hd.fp = fp;
11158 @@ -2668,7 +2669,8 @@ int perf_header__fprintf_info(struct perf_session *session, FILE *fp, bool full)
11159 if (ret == -1)
11160 return -1;
11161
11162 - fprintf(fp, "# captured on : %s", ctime(&st.st_ctime));
11163 + stctime = st.st_ctime;
11164 + fprintf(fp, "# captured on : %s", ctime(&stctime));
11165
11166 fprintf(fp, "# header version : %u\n", header->version);
11167 fprintf(fp, "# data offset : %" PRIu64 "\n", header->data_offset);
11168 @@ -3544,7 +3546,7 @@ perf_event__synthesize_event_update_unit(struct perf_tool *tool,
11169 if (ev == NULL)
11170 return -ENOMEM;
11171
11172 - strncpy(ev->data, evsel->unit, size);
11173 + strlcpy(ev->data, evsel->unit, size + 1);
11174 err = process(tool, (union perf_event *)ev, NULL, NULL);
11175 free(ev);
11176 return err;
11177 diff --git a/tools/perf/util/probe-file.c b/tools/perf/util/probe-file.c
11178 index aac7817d9e14..0b1195cad0e5 100644
11179 --- a/tools/perf/util/probe-file.c
11180 +++ b/tools/perf/util/probe-file.c
11181 @@ -424,7 +424,7 @@ static int probe_cache__open(struct probe_cache *pcache, const char *target,
11182
11183 if (target && build_id_cache__cached(target)) {
11184 /* This is a cached buildid */
11185 - strncpy(sbuildid, target, SBUILD_ID_SIZE);
11186 + strlcpy(sbuildid, target, SBUILD_ID_SIZE);
11187 dir_name = build_id_cache__linkname(sbuildid, NULL, 0);
11188 goto found;
11189 }
11190 diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c
11191 index 50150dfc0cdf..4dd8fd05a260 100644
11192 --- a/tools/perf/util/python.c
11193 +++ b/tools/perf/util/python.c
11194 @@ -939,7 +939,8 @@ static PyObject *pyrf_evlist__get_pollfd(struct pyrf_evlist *pevlist,
11195
11196 file = PyFile_FromFile(fp, "perf", "r", NULL);
11197 #else
11198 - file = PyFile_FromFd(evlist->pollfd.entries[i].fd, "perf", "r", -1, NULL, NULL, NULL, 1);
11199 + file = PyFile_FromFd(evlist->pollfd.entries[i].fd, "perf", "r", -1,
11200 + NULL, NULL, NULL, 0);
11201 #endif
11202 if (file == NULL)
11203 goto free_list;
11204 diff --git a/tools/perf/util/s390-cpumsf.c b/tools/perf/util/s390-cpumsf.c
11205 index a2eeebbfb25f..68b2570304ec 100644
11206 --- a/tools/perf/util/s390-cpumsf.c
11207 +++ b/tools/perf/util/s390-cpumsf.c
11208 @@ -506,7 +506,7 @@ static int s390_cpumsf_samples(struct s390_cpumsf_queue *sfq, u64 *ts)
11209 aux_ts = get_trailer_time(buf);
11210 if (!aux_ts) {
11211 pr_err("[%#08" PRIx64 "] Invalid AUX trailer entry TOD clock base\n",
11212 - sfq->buffer->data_offset);
11213 + (s64)sfq->buffer->data_offset);
11214 aux_ts = ~0ULL;
11215 goto out;
11216 }
11217 diff --git a/tools/perf/util/stat-display.c b/tools/perf/util/stat-display.c
11218 index e7b4c44ebb62..665ee374fc01 100644
11219 --- a/tools/perf/util/stat-display.c
11220 +++ b/tools/perf/util/stat-display.c
11221 @@ -59,6 +59,15 @@ static void print_noise(struct perf_stat_config *config,
11222 print_noise_pct(config, stddev_stats(&ps->res_stats[0]), avg);
11223 }
11224
11225 +static void print_cgroup(struct perf_stat_config *config, struct perf_evsel *evsel)
11226 +{
11227 + if (nr_cgroups) {
11228 + const char *cgrp_name = evsel->cgrp ? evsel->cgrp->name : "";
11229 + fprintf(config->output, "%s%s", config->csv_sep, cgrp_name);
11230 + }
11231 +}
11232 +
11233 +
11234 static void aggr_printout(struct perf_stat_config *config,
11235 struct perf_evsel *evsel, int id, int nr)
11236 {
11237 @@ -336,8 +345,7 @@ static void abs_printout(struct perf_stat_config *config,
11238
11239 fprintf(output, "%-*s", config->csv_output ? 0 : 25, perf_evsel__name(evsel));
11240
11241 - if (evsel->cgrp)
11242 - fprintf(output, "%s%s", config->csv_sep, evsel->cgrp->name);
11243 + print_cgroup(config, evsel);
11244 }
11245
11246 static bool is_mixed_hw_group(struct perf_evsel *counter)
11247 @@ -431,9 +439,7 @@ static void printout(struct perf_stat_config *config, int id, int nr,
11248 config->csv_output ? 0 : -25,
11249 perf_evsel__name(counter));
11250
11251 - if (counter->cgrp)
11252 - fprintf(config->output, "%s%s",
11253 - config->csv_sep, counter->cgrp->name);
11254 + print_cgroup(config, counter);
11255
11256 if (!config->csv_output)
11257 pm(config, &os, NULL, NULL, "", 0);
11258 diff --git a/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py b/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py
11259 index 84e2b648e622..2fa3c5757bcb 100755
11260 --- a/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py
11261 +++ b/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py
11262 @@ -585,9 +585,9 @@ current_max_cpu = 0
11263
11264 read_trace_data(filename)
11265
11266 -clear_trace_file()
11267 -# Free the memory
11268 if interval:
11269 + clear_trace_file()
11270 + # Free the memory
11271 free_trace_buffer()
11272
11273 if graph_data_present == False:
11274 diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
11275 index f0017c831e57..a43a07a09a98 100644
11276 --- a/tools/testing/selftests/Makefile
11277 +++ b/tools/testing/selftests/Makefile
11278 @@ -6,6 +6,7 @@ TARGETS += capabilities
11279 TARGETS += cgroup
11280 TARGETS += cpufreq
11281 TARGETS += cpu-hotplug
11282 +TARGETS += drivers/dma-buf
11283 TARGETS += efivarfs
11284 TARGETS += exec
11285 TARGETS += filesystems
11286 diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c
11287 index 2d3c04f45530..6ac7232b0fde 100644
11288 --- a/tools/testing/selftests/bpf/test_progs.c
11289 +++ b/tools/testing/selftests/bpf/test_progs.c
11290 @@ -51,10 +51,10 @@ static struct {
11291 struct iphdr iph;
11292 struct tcphdr tcp;
11293 } __packed pkt_v4 = {
11294 - .eth.h_proto = bpf_htons(ETH_P_IP),
11295 + .eth.h_proto = __bpf_constant_htons(ETH_P_IP),
11296 .iph.ihl = 5,
11297 .iph.protocol = 6,
11298 - .iph.tot_len = bpf_htons(MAGIC_BYTES),
11299 + .iph.tot_len = __bpf_constant_htons(MAGIC_BYTES),
11300 .tcp.urg_ptr = 123,
11301 };
11302
11303 @@ -64,9 +64,9 @@ static struct {
11304 struct ipv6hdr iph;
11305 struct tcphdr tcp;
11306 } __packed pkt_v6 = {
11307 - .eth.h_proto = bpf_htons(ETH_P_IPV6),
11308 + .eth.h_proto = __bpf_constant_htons(ETH_P_IPV6),
11309 .iph.nexthdr = 6,
11310 - .iph.payload_len = bpf_htons(MAGIC_BYTES),
11311 + .iph.payload_len = __bpf_constant_htons(MAGIC_BYTES),
11312 .tcp.urg_ptr = 123,
11313 };
11314
11315 diff --git a/tools/testing/selftests/drivers/dma-buf/Makefile b/tools/testing/selftests/drivers/dma-buf/Makefile
11316 index 4154c3d7aa58..f22c3f7cf612 100644
11317 --- a/tools/testing/selftests/drivers/dma-buf/Makefile
11318 +++ b/tools/testing/selftests/drivers/dma-buf/Makefile
11319 @@ -2,4 +2,6 @@ CFLAGS += -I../../../../../usr/include/
11320
11321 TEST_GEN_PROGS := udmabuf
11322
11323 +top_srcdir ?=../../../../..
11324 +
11325 include ../../lib.mk
11326 diff --git a/tools/testing/selftests/drivers/dma-buf/udmabuf.c b/tools/testing/selftests/drivers/dma-buf/udmabuf.c
11327 index 376b1d6730bd..4de902ea14d8 100644
11328 --- a/tools/testing/selftests/drivers/dma-buf/udmabuf.c
11329 +++ b/tools/testing/selftests/drivers/dma-buf/udmabuf.c
11330 @@ -4,7 +4,7 @@
11331 #include <unistd.h>
11332 #include <string.h>
11333 #include <errno.h>
11334 -#include <fcntl.h>
11335 +#include <linux/fcntl.h>
11336 #include <malloc.h>
11337
11338 #include <sys/ioctl.h>
11339 @@ -33,12 +33,19 @@ int main(int argc, char *argv[])
11340 exit(77);
11341 }
11342
11343 - memfd = memfd_create("udmabuf-test", MFD_CLOEXEC);
11344 + memfd = memfd_create("udmabuf-test", MFD_ALLOW_SEALING);
11345 if (memfd < 0) {
11346 printf("%s: [skip,no-memfd]\n", TEST_PREFIX);
11347 exit(77);
11348 }
11349
11350 + ret = fcntl(memfd, F_ADD_SEALS, F_SEAL_SHRINK);
11351 + if (ret < 0) {
11352 + printf("%s: [skip,fcntl-add-seals]\n", TEST_PREFIX);
11353 + exit(77);
11354 + }
11355 +
11356 +
11357 size = getpagesize() * NUM_PAGES;
11358 ret = ftruncate(memfd, size);
11359 if (ret == -1) {
11360 diff --git a/tools/testing/selftests/kvm/x86_64/evmcs_test.c b/tools/testing/selftests/kvm/x86_64/evmcs_test.c
11361 index 92c2cfd1b182..ea3c73e8f4f6 100644
11362 --- a/tools/testing/selftests/kvm/x86_64/evmcs_test.c
11363 +++ b/tools/testing/selftests/kvm/x86_64/evmcs_test.c
11364 @@ -113,8 +113,8 @@ int main(int argc, char *argv[])
11365 for (stage = 1;; stage++) {
11366 _vcpu_run(vm, VCPU_ID);
11367 TEST_ASSERT(run->exit_reason == KVM_EXIT_IO,
11368 - "Unexpected exit reason: %u (%s),\n",
11369 - run->exit_reason,
11370 + "Stage %d: unexpected exit reason: %u (%s),\n",
11371 + stage, run->exit_reason,
11372 exit_reason_str(run->exit_reason));
11373
11374 memset(&regs1, 0, sizeof(regs1));
11375 diff --git a/tools/testing/selftests/kvm/x86_64/state_test.c b/tools/testing/selftests/kvm/x86_64/state_test.c
11376 index 03da41f0f736..4b3f556265f1 100644
11377 --- a/tools/testing/selftests/kvm/x86_64/state_test.c
11378 +++ b/tools/testing/selftests/kvm/x86_64/state_test.c
11379 @@ -152,8 +152,8 @@ int main(int argc, char *argv[])
11380 for (stage = 1;; stage++) {
11381 _vcpu_run(vm, VCPU_ID);
11382 TEST_ASSERT(run->exit_reason == KVM_EXIT_IO,
11383 - "Unexpected exit reason: %u (%s),\n",
11384 - run->exit_reason,
11385 + "Stage %d: unexpected exit reason: %u (%s),\n",
11386 + stage, run->exit_reason,
11387 exit_reason_str(run->exit_reason));
11388
11389 memset(&regs1, 0, sizeof(regs1));
11390 diff --git a/virt/kvm/arm/mmio.c b/virt/kvm/arm/mmio.c
11391 index dac7ceb1a677..08443a15e6be 100644
11392 --- a/virt/kvm/arm/mmio.c
11393 +++ b/virt/kvm/arm/mmio.c
11394 @@ -117,6 +117,12 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run)
11395 vcpu_set_reg(vcpu, vcpu->arch.mmio_decode.rt, data);
11396 }
11397
11398 + /*
11399 + * The MMIO instruction is emulated and should not be re-executed
11400 + * in the guest.
11401 + */
11402 + kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
11403 +
11404 return 0;
11405 }
11406
11407 @@ -144,11 +150,6 @@ static int decode_hsr(struct kvm_vcpu *vcpu, bool *is_write, int *len)
11408 vcpu->arch.mmio_decode.sign_extend = sign_extend;
11409 vcpu->arch.mmio_decode.rt = rt;
11410
11411 - /*
11412 - * The MMIO instruction is emulated and should not be re-executed
11413 - * in the guest.
11414 - */
11415 - kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
11416 return 0;
11417 }
11418
11419 diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
11420 index 2679e476b6c3..9fa05ed53944 100644
11421 --- a/virt/kvm/kvm_main.c
11422 +++ b/virt/kvm/kvm_main.c
11423 @@ -1965,7 +1965,8 @@ int kvm_gfn_to_hva_cache_init(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
11424 EXPORT_SYMBOL_GPL(kvm_gfn_to_hva_cache_init);
11425
11426 int kvm_write_guest_offset_cached(struct kvm *kvm, struct gfn_to_hva_cache *ghc,
11427 - void *data, int offset, unsigned long len)
11428 + void *data, unsigned int offset,
11429 + unsigned long len)
11430 {
11431 struct kvm_memslots *slots = kvm_memslots(kvm);
11432 int r;
11433 @@ -2918,8 +2919,10 @@ static int kvm_ioctl_create_device(struct kvm *kvm,
11434 if (ops->init)
11435 ops->init(dev);
11436
11437 + kvm_get_kvm(kvm);
11438 ret = anon_inode_getfd(ops->name, &kvm_device_fops, dev, O_RDWR | O_CLOEXEC);
11439 if (ret < 0) {
11440 + kvm_put_kvm(kvm);
11441 mutex_lock(&kvm->lock);
11442 list_del(&dev->vm_node);
11443 mutex_unlock(&kvm->lock);
11444 @@ -2927,7 +2930,6 @@ static int kvm_ioctl_create_device(struct kvm *kvm,
11445 return ret;
11446 }
11447
11448 - kvm_get_kvm(kvm);
11449 cd->fd = ret;
11450 return 0;
11451 }