Magellan Linux

Contents of /trunk/kernel-alx/patches-5.4/0172-5.4.73-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3635 - (show annotations) (download)
Mon Oct 24 12:34:12 2022 UTC (18 months, 1 week ago) by niro
File size: 449245 byte(s)
-sync kernel patches
1 diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
2 index 13984b6cc3225..988a0d2535b25 100644
3 --- a/Documentation/admin-guide/kernel-parameters.txt
4 +++ b/Documentation/admin-guide/kernel-parameters.txt
5 @@ -567,7 +567,7 @@
6 loops can be debugged more effectively on production
7 systems.
8
9 - clearcpuid=BITNUM [X86]
10 + clearcpuid=BITNUM[,BITNUM...] [X86]
11 Disable CPUID feature X for the kernel. See
12 arch/x86/include/asm/cpufeatures.h for the valid bit
13 numbers. Note the Linux specific bits are not necessarily
14 diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
15 index 8d4ad1d1ae26f..8af3771a3ebf2 100644
16 --- a/Documentation/networking/ip-sysctl.txt
17 +++ b/Documentation/networking/ip-sysctl.txt
18 @@ -1000,12 +1000,14 @@ icmp_ratelimit - INTEGER
19 icmp_msgs_per_sec - INTEGER
20 Limit maximal number of ICMP packets sent per second from this host.
21 Only messages whose type matches icmp_ratemask (see below) are
22 - controlled by this limit.
23 + controlled by this limit. For security reasons, the precise count
24 + of messages per second is randomized.
25 Default: 1000
26
27 icmp_msgs_burst - INTEGER
28 icmp_msgs_per_sec controls number of ICMP packets sent per second,
29 while icmp_msgs_burst controls the burst size of these packets.
30 + For security reasons, the precise burst size is randomized.
31 Default: 50
32
33 icmp_ratemask - INTEGER
34 diff --git a/Makefile b/Makefile
35 index 8db75cc76ed16..f9a8d76a693eb 100644
36 --- a/Makefile
37 +++ b/Makefile
38 @@ -1,7 +1,7 @@
39 # SPDX-License-Identifier: GPL-2.0
40 VERSION = 5
41 PATCHLEVEL = 4
42 -SUBLEVEL = 72
43 +SUBLEVEL = 73
44 EXTRAVERSION =
45 NAME = Kleptomaniac Octopus
46
47 diff --git a/arch/arc/plat-hsdk/Kconfig b/arch/arc/plat-hsdk/Kconfig
48 index ce81018345184..6b5c54576f54d 100644
49 --- a/arch/arc/plat-hsdk/Kconfig
50 +++ b/arch/arc/plat-hsdk/Kconfig
51 @@ -8,5 +8,6 @@ menuconfig ARC_SOC_HSDK
52 select ARC_HAS_ACCL_REGS
53 select ARC_IRQ_NO_AUTOSAVE
54 select CLK_HSDK
55 + select RESET_CONTROLLER
56 select RESET_HSDK
57 select HAVE_PCI
58 diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
59 index 3a96b5538a2a1..540880f0413fd 100644
60 --- a/arch/arm/boot/dts/imx6sl.dtsi
61 +++ b/arch/arm/boot/dts/imx6sl.dtsi
62 @@ -936,8 +936,10 @@
63 };
64
65 rngb: rngb@21b4000 {
66 + compatible = "fsl,imx6sl-rngb", "fsl,imx25-rngb";
67 reg = <0x021b4000 0x4000>;
68 interrupts = <0 5 IRQ_TYPE_LEVEL_HIGH>;
69 + clocks = <&clks IMX6SL_CLK_DUMMY>;
70 };
71
72 weim: weim@21b8000 {
73 diff --git a/arch/arm/boot/dts/meson8.dtsi b/arch/arm/boot/dts/meson8.dtsi
74 index db2033f674c67..3efe9d41c2bb6 100644
75 --- a/arch/arm/boot/dts/meson8.dtsi
76 +++ b/arch/arm/boot/dts/meson8.dtsi
77 @@ -230,8 +230,6 @@
78 <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>,
79 <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>,
80 <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>,
81 - <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>,
82 - <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>,
83 <GIC_SPI 172 IRQ_TYPE_LEVEL_HIGH>,
84 <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>,
85 <GIC_SPI 174 IRQ_TYPE_LEVEL_HIGH>,
86 diff --git a/arch/arm/boot/dts/owl-s500.dtsi b/arch/arm/boot/dts/owl-s500.dtsi
87 index 5ceb6cc4451d2..1dbe4e8b38ac7 100644
88 --- a/arch/arm/boot/dts/owl-s500.dtsi
89 +++ b/arch/arm/boot/dts/owl-s500.dtsi
90 @@ -84,21 +84,21 @@
91 global_timer: timer@b0020200 {
92 compatible = "arm,cortex-a9-global-timer";
93 reg = <0xb0020200 0x100>;
94 - interrupts = <GIC_PPI 0 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>;
95 + interrupts = <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>;
96 status = "disabled";
97 };
98
99 twd_timer: timer@b0020600 {
100 compatible = "arm,cortex-a9-twd-timer";
101 reg = <0xb0020600 0x20>;
102 - interrupts = <GIC_PPI 2 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>;
103 + interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>;
104 status = "disabled";
105 };
106
107 twd_wdt: wdt@b0020620 {
108 compatible = "arm,cortex-a9-twd-wdt";
109 reg = <0xb0020620 0xe0>;
110 - interrupts = <GIC_PPI 3 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>;
111 + interrupts = <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_EDGE_RISING)>;
112 status = "disabled";
113 };
114
115 diff --git a/arch/arm/boot/dts/sun8i-r40-bananapi-m2-ultra.dts b/arch/arm/boot/dts/sun8i-r40-bananapi-m2-ultra.dts
116 index 42d62d1ba1dc7..ea15073f0c79c 100644
117 --- a/arch/arm/boot/dts/sun8i-r40-bananapi-m2-ultra.dts
118 +++ b/arch/arm/boot/dts/sun8i-r40-bananapi-m2-ultra.dts
119 @@ -223,16 +223,16 @@
120 };
121
122 &reg_dc1sw {
123 - regulator-min-microvolt = <3000000>;
124 - regulator-max-microvolt = <3000000>;
125 + regulator-min-microvolt = <3300000>;
126 + regulator-max-microvolt = <3300000>;
127 regulator-name = "vcc-gmac-phy";
128 };
129
130 &reg_dcdc1 {
131 regulator-always-on;
132 - regulator-min-microvolt = <3000000>;
133 - regulator-max-microvolt = <3000000>;
134 - regulator-name = "vcc-3v0";
135 + regulator-min-microvolt = <3300000>;
136 + regulator-max-microvolt = <3300000>;
137 + regulator-name = "vcc-3v3";
138 };
139
140 &reg_dcdc2 {
141 diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
142 index 6bc3000deb86e..676cc2a318f41 100644
143 --- a/arch/arm/mach-at91/pm.c
144 +++ b/arch/arm/mach-at91/pm.c
145 @@ -777,6 +777,7 @@ static void __init at91_pm_init(void (*pm_idle)(void))
146
147 pmc_np = of_find_matching_node_and_match(NULL, atmel_pmc_ids, &of_id);
148 soc_pm.data.pmc = of_iomap(pmc_np, 0);
149 + of_node_put(pmc_np);
150 if (!soc_pm.data.pmc) {
151 pr_err("AT91: PM not supported, PMC not found\n");
152 return;
153 diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
154 index 6f5f89711f256..a92d277f81a08 100644
155 --- a/arch/arm/mach-omap2/cpuidle44xx.c
156 +++ b/arch/arm/mach-omap2/cpuidle44xx.c
157 @@ -174,8 +174,10 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
158 */
159 if (mpuss_can_lose_context) {
160 error = cpu_cluster_pm_enter();
161 - if (error)
162 + if (error) {
163 + omap_set_pwrdm_state(mpu_pd, PWRDM_POWER_ON);
164 goto cpu_cluster_pm_out;
165 + }
166 }
167 }
168
169 diff --git a/arch/arm/mach-s3c24xx/mach-at2440evb.c b/arch/arm/mach-s3c24xx/mach-at2440evb.c
170 index 58c5ef3cf1d7e..2d370f7f75fa2 100644
171 --- a/arch/arm/mach-s3c24xx/mach-at2440evb.c
172 +++ b/arch/arm/mach-s3c24xx/mach-at2440evb.c
173 @@ -143,7 +143,7 @@ static struct gpiod_lookup_table at2440evb_mci_gpio_table = {
174 .dev_id = "s3c2410-sdi",
175 .table = {
176 /* Card detect S3C2410_GPG(10) */
177 - GPIO_LOOKUP("GPG", 10, "cd", GPIO_ACTIVE_LOW),
178 + GPIO_LOOKUP("GPIOG", 10, "cd", GPIO_ACTIVE_LOW),
179 { },
180 },
181 };
182 diff --git a/arch/arm/mach-s3c24xx/mach-h1940.c b/arch/arm/mach-s3c24xx/mach-h1940.c
183 index 74d6b68e91c74..8d9d8e7c71d4c 100644
184 --- a/arch/arm/mach-s3c24xx/mach-h1940.c
185 +++ b/arch/arm/mach-s3c24xx/mach-h1940.c
186 @@ -468,9 +468,9 @@ static struct gpiod_lookup_table h1940_mmc_gpio_table = {
187 .dev_id = "s3c2410-sdi",
188 .table = {
189 /* Card detect S3C2410_GPF(5) */
190 - GPIO_LOOKUP("GPF", 5, "cd", GPIO_ACTIVE_LOW),
191 + GPIO_LOOKUP("GPIOF", 5, "cd", GPIO_ACTIVE_LOW),
192 /* Write protect S3C2410_GPH(8) */
193 - GPIO_LOOKUP("GPH", 8, "wp", GPIO_ACTIVE_LOW),
194 + GPIO_LOOKUP("GPIOH", 8, "wp", GPIO_ACTIVE_LOW),
195 { },
196 },
197 };
198 diff --git a/arch/arm/mach-s3c24xx/mach-mini2440.c b/arch/arm/mach-s3c24xx/mach-mini2440.c
199 index 9035f868fb34e..3a5b1124037b2 100644
200 --- a/arch/arm/mach-s3c24xx/mach-mini2440.c
201 +++ b/arch/arm/mach-s3c24xx/mach-mini2440.c
202 @@ -244,9 +244,9 @@ static struct gpiod_lookup_table mini2440_mmc_gpio_table = {
203 .dev_id = "s3c2410-sdi",
204 .table = {
205 /* Card detect S3C2410_GPG(8) */
206 - GPIO_LOOKUP("GPG", 8, "cd", GPIO_ACTIVE_LOW),
207 + GPIO_LOOKUP("GPIOG", 8, "cd", GPIO_ACTIVE_LOW),
208 /* Write protect S3C2410_GPH(8) */
209 - GPIO_LOOKUP("GPH", 8, "wp", GPIO_ACTIVE_HIGH),
210 + GPIO_LOOKUP("GPIOH", 8, "wp", GPIO_ACTIVE_HIGH),
211 { },
212 },
213 };
214 diff --git a/arch/arm/mach-s3c24xx/mach-n30.c b/arch/arm/mach-s3c24xx/mach-n30.c
215 index d856f23939aff..ffa20f52aa832 100644
216 --- a/arch/arm/mach-s3c24xx/mach-n30.c
217 +++ b/arch/arm/mach-s3c24xx/mach-n30.c
218 @@ -359,9 +359,9 @@ static struct gpiod_lookup_table n30_mci_gpio_table = {
219 .dev_id = "s3c2410-sdi",
220 .table = {
221 /* Card detect S3C2410_GPF(1) */
222 - GPIO_LOOKUP("GPF", 1, "cd", GPIO_ACTIVE_LOW),
223 + GPIO_LOOKUP("GPIOF", 1, "cd", GPIO_ACTIVE_LOW),
224 /* Write protect S3C2410_GPG(10) */
225 - GPIO_LOOKUP("GPG", 10, "wp", GPIO_ACTIVE_LOW),
226 + GPIO_LOOKUP("GPIOG", 10, "wp", GPIO_ACTIVE_LOW),
227 { },
228 },
229 };
230 diff --git a/arch/arm/mach-s3c24xx/mach-rx1950.c b/arch/arm/mach-s3c24xx/mach-rx1950.c
231 index 29f9b345a5311..534e9c1d8161f 100644
232 --- a/arch/arm/mach-s3c24xx/mach-rx1950.c
233 +++ b/arch/arm/mach-s3c24xx/mach-rx1950.c
234 @@ -567,9 +567,9 @@ static struct gpiod_lookup_table rx1950_mmc_gpio_table = {
235 .dev_id = "s3c2410-sdi",
236 .table = {
237 /* Card detect S3C2410_GPF(5) */
238 - GPIO_LOOKUP("GPF", 5, "cd", GPIO_ACTIVE_LOW),
239 + GPIO_LOOKUP("GPIOF", 5, "cd", GPIO_ACTIVE_LOW),
240 /* Write protect S3C2410_GPH(8) */
241 - GPIO_LOOKUP("GPH", 8, "wp", GPIO_ACTIVE_LOW),
242 + GPIO_LOOKUP("GPIOH", 8, "wp", GPIO_ACTIVE_LOW),
243 { },
244 },
245 };
246 diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
247 index 12c26eb88afbc..43d91bfd23600 100644
248 --- a/arch/arm/mm/cache-l2x0.c
249 +++ b/arch/arm/mm/cache-l2x0.c
250 @@ -1249,20 +1249,28 @@ static void __init l2c310_of_parse(const struct device_node *np,
251
252 ret = of_property_read_u32(np, "prefetch-data", &val);
253 if (ret == 0) {
254 - if (val)
255 + if (val) {
256 prefetch |= L310_PREFETCH_CTRL_DATA_PREFETCH;
257 - else
258 + *aux_val |= L310_PREFETCH_CTRL_DATA_PREFETCH;
259 + } else {
260 prefetch &= ~L310_PREFETCH_CTRL_DATA_PREFETCH;
261 + *aux_val &= ~L310_PREFETCH_CTRL_DATA_PREFETCH;
262 + }
263 + *aux_mask &= ~L310_PREFETCH_CTRL_DATA_PREFETCH;
264 } else if (ret != -EINVAL) {
265 pr_err("L2C-310 OF prefetch-data property value is missing\n");
266 }
267
268 ret = of_property_read_u32(np, "prefetch-instr", &val);
269 if (ret == 0) {
270 - if (val)
271 + if (val) {
272 prefetch |= L310_PREFETCH_CTRL_INSTR_PREFETCH;
273 - else
274 + *aux_val |= L310_PREFETCH_CTRL_INSTR_PREFETCH;
275 + } else {
276 prefetch &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH;
277 + *aux_val &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH;
278 + }
279 + *aux_mask &= ~L310_PREFETCH_CTRL_INSTR_PREFETCH;
280 } else if (ret != -EINVAL) {
281 pr_err("L2C-310 OF prefetch-instr property value is missing\n");
282 }
283 diff --git a/arch/arm64/boot/dts/actions/s700.dtsi b/arch/arm64/boot/dts/actions/s700.dtsi
284 index 2006ad5424fa6..f8eb72bb41254 100644
285 --- a/arch/arm64/boot/dts/actions/s700.dtsi
286 +++ b/arch/arm64/boot/dts/actions/s700.dtsi
287 @@ -231,7 +231,7 @@
288
289 pinctrl: pinctrl@e01b0000 {
290 compatible = "actions,s700-pinctrl";
291 - reg = <0x0 0xe01b0000 0x0 0x1000>;
292 + reg = <0x0 0xe01b0000 0x0 0x100>;
293 clocks = <&cmu CLK_GPIO>;
294 gpio-controller;
295 gpio-ranges = <&pinctrl 0 0 136>;
296 diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h5.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h5.dtsi
297 index eaf8f83794fd9..8466d44ee0b15 100644
298 --- a/arch/arm64/boot/dts/allwinner/sun50i-h5.dtsi
299 +++ b/arch/arm64/boot/dts/allwinner/sun50i-h5.dtsi
300 @@ -155,8 +155,7 @@
301 <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>,
302 <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>,
303 <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>,
304 - <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>,
305 - <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
306 + <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
307 interrupt-names = "gp",
308 "gpmmu",
309 "pp",
310 @@ -167,8 +166,7 @@
311 "pp2",
312 "ppmmu2",
313 "pp3",
314 - "ppmmu3",
315 - "pmu";
316 + "ppmmu3";
317 clocks = <&ccu CLK_BUS_GPU>, <&ccu CLK_GPU>;
318 clock-names = "bus", "core";
319 resets = <&ccu RST_BUS_GPU>;
320 diff --git a/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi b/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi
321 index 8647da7d6609b..f6694aad84db3 100644
322 --- a/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi
323 +++ b/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi
324 @@ -43,13 +43,13 @@
325
326 white {
327 label = "vim3:white:sys";
328 - gpios = <&gpio_ao GPIOAO_4 GPIO_ACTIVE_LOW>;
329 + gpios = <&gpio_ao GPIOAO_4 GPIO_ACTIVE_HIGH>;
330 linux,default-trigger = "heartbeat";
331 };
332
333 red {
334 label = "vim3:red";
335 - gpios = <&gpio_expander 5 GPIO_ACTIVE_LOW>;
336 + gpios = <&gpio_expander 5 GPIO_ACTIVE_HIGH>;
337 };
338 };
339
340 diff --git a/arch/arm64/boot/dts/freescale/imx8mq.dtsi b/arch/arm64/boot/dts/freescale/imx8mq.dtsi
341 index bc8540f879654..f1011bcd5ed5a 100644
342 --- a/arch/arm64/boot/dts/freescale/imx8mq.dtsi
343 +++ b/arch/arm64/boot/dts/freescale/imx8mq.dtsi
344 @@ -516,6 +516,7 @@
345 gpc: gpc@303a0000 {
346 compatible = "fsl,imx8mq-gpc";
347 reg = <0x303a0000 0x10000>;
348 + interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
349 interrupt-parent = <&gic>;
350 interrupt-controller;
351 #interrupt-cells = <3>;
352 diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi
353 index 340da154d4e37..d95273af9f1e4 100644
354 --- a/arch/arm64/boot/dts/qcom/msm8916.dtsi
355 +++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi
356 @@ -175,14 +175,14 @@
357 };
358
359 thermal-zones {
360 - cpu0_1-thermal {
361 + cpu0-1-thermal {
362 polling-delay-passive = <250>;
363 polling-delay = <1000>;
364
365 thermal-sensors = <&tsens 4>;
366
367 trips {
368 - cpu0_1_alert0: trip-point@0 {
369 + cpu0_1_alert0: trip-point0 {
370 temperature = <75000>;
371 hysteresis = <2000>;
372 type = "passive";
373 @@ -205,7 +205,7 @@
374 };
375 };
376
377 - cpu2_3-thermal {
378 + cpu2-3-thermal {
379 polling-delay-passive = <250>;
380 polling-delay = <1000>;
381
382 @@ -934,7 +934,7 @@
383 reg-names = "mdp_phys";
384
385 interrupt-parent = <&mdss>;
386 - interrupts = <0 0>;
387 + interrupts = <0>;
388
389 clocks = <&gcc GCC_MDSS_AHB_CLK>,
390 <&gcc GCC_MDSS_AXI_CLK>,
391 @@ -966,7 +966,7 @@
392 reg-names = "dsi_ctrl";
393
394 interrupt-parent = <&mdss>;
395 - interrupts = <4 0>;
396 + interrupts = <4>;
397
398 assigned-clocks = <&gcc BYTE0_CLK_SRC>,
399 <&gcc PCLK0_CLK_SRC>;
400 diff --git a/arch/arm64/boot/dts/qcom/pm8916.dtsi b/arch/arm64/boot/dts/qcom/pm8916.dtsi
401 index 9dd2df1cbf47d..40df4d95a47ac 100644
402 --- a/arch/arm64/boot/dts/qcom/pm8916.dtsi
403 +++ b/arch/arm64/boot/dts/qcom/pm8916.dtsi
404 @@ -113,7 +113,7 @@
405
406 wcd_codec: codec@f000 {
407 compatible = "qcom,pm8916-wcd-analog-codec";
408 - reg = <0xf000 0x200>;
409 + reg = <0xf000>;
410 reg-names = "pmic-codec-core";
411 clocks = <&gcc GCC_CODEC_DIGCODEC_CLK>;
412 clock-names = "mclk";
413 diff --git a/arch/arm64/boot/dts/renesas/r8a774c0.dtsi b/arch/arm64/boot/dts/renesas/r8a774c0.dtsi
414 index a1c2de90e4706..73ded80a79ba0 100644
415 --- a/arch/arm64/boot/dts/renesas/r8a774c0.dtsi
416 +++ b/arch/arm64/boot/dts/renesas/r8a774c0.dtsi
417 @@ -1212,9 +1212,8 @@
418 reg = <0 0xe6ea0000 0 0x0064>;
419 interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
420 clocks = <&cpg CPG_MOD 210>;
421 - dmas = <&dmac1 0x43>, <&dmac1 0x42>,
422 - <&dmac2 0x43>, <&dmac2 0x42>;
423 - dma-names = "tx", "rx", "tx", "rx";
424 + dmas = <&dmac0 0x43>, <&dmac0 0x42>;
425 + dma-names = "tx", "rx";
426 power-domains = <&sysc R8A774C0_PD_ALWAYS_ON>;
427 resets = <&cpg 210>;
428 #address-cells = <1>;
429 diff --git a/arch/arm64/boot/dts/renesas/r8a77990.dtsi b/arch/arm64/boot/dts/renesas/r8a77990.dtsi
430 index 455954c3d98ea..dabee157119f9 100644
431 --- a/arch/arm64/boot/dts/renesas/r8a77990.dtsi
432 +++ b/arch/arm64/boot/dts/renesas/r8a77990.dtsi
433 @@ -1168,9 +1168,8 @@
434 reg = <0 0xe6ea0000 0 0x0064>;
435 interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
436 clocks = <&cpg CPG_MOD 210>;
437 - dmas = <&dmac1 0x43>, <&dmac1 0x42>,
438 - <&dmac2 0x43>, <&dmac2 0x42>;
439 - dma-names = "tx", "rx", "tx", "rx";
440 + dmas = <&dmac0 0x43>, <&dmac0 0x42>;
441 + dma-names = "tx", "rx";
442 power-domains = <&sysc R8A77990_PD_ALWAYS_ON>;
443 resets = <&cpg 210>;
444 #address-cells = <1>;
445 diff --git a/arch/arm64/boot/dts/xilinx/zynqmp.dtsi b/arch/arm64/boot/dts/xilinx/zynqmp.dtsi
446 index 9aa67340a4d8c..a2645262f8623 100644
447 --- a/arch/arm64/boot/dts/xilinx/zynqmp.dtsi
448 +++ b/arch/arm64/boot/dts/xilinx/zynqmp.dtsi
449 @@ -419,7 +419,7 @@
450 };
451
452 i2c0: i2c@ff020000 {
453 - compatible = "cdns,i2c-r1p14", "cdns,i2c-r1p10";
454 + compatible = "cdns,i2c-r1p14";
455 status = "disabled";
456 interrupt-parent = <&gic>;
457 interrupts = <0 17 4>;
458 @@ -429,7 +429,7 @@
459 };
460
461 i2c1: i2c@ff030000 {
462 - compatible = "cdns,i2c-r1p14", "cdns,i2c-r1p10";
463 + compatible = "cdns,i2c-r1p14";
464 status = "disabled";
465 interrupt-parent = <&gic>;
466 interrupts = <0 18 4>;
467 diff --git a/arch/powerpc/include/asm/book3s/64/hash-4k.h b/arch/powerpc/include/asm/book3s/64/hash-4k.h
468 index 3f9ae3585ab98..80c9534148821 100644
469 --- a/arch/powerpc/include/asm/book3s/64/hash-4k.h
470 +++ b/arch/powerpc/include/asm/book3s/64/hash-4k.h
471 @@ -13,20 +13,19 @@
472 */
473 #define MAX_EA_BITS_PER_CONTEXT 46
474
475 -#define REGION_SHIFT (MAX_EA_BITS_PER_CONTEXT - 2)
476
477 /*
478 - * Our page table limit us to 64TB. Hence for the kernel mapping,
479 - * each MAP area is limited to 16 TB.
480 - * The four map areas are: linear mapping, vmap, IO and vmemmap
481 + * Our page table limit us to 64TB. For 64TB physical memory, we only need 64GB
482 + * of vmemmap space. To better support sparse memory layout, we use 61TB
483 + * linear map range, 1TB of vmalloc, 1TB of I/O and 1TB of vmememmap.
484 */
485 +#define REGION_SHIFT (40)
486 #define H_KERN_MAP_SIZE (ASM_CONST(1) << REGION_SHIFT)
487
488 /*
489 - * Define the address range of the kernel non-linear virtual area
490 - * 16TB
491 + * Define the address range of the kernel non-linear virtual area (61TB)
492 */
493 -#define H_KERN_VIRT_START ASM_CONST(0xc000100000000000)
494 +#define H_KERN_VIRT_START ASM_CONST(0xc0003d0000000000)
495
496 #ifndef __ASSEMBLY__
497 #define H_PTE_TABLE_SIZE (sizeof(pte_t) << H_PTE_INDEX_SIZE)
498 diff --git a/arch/powerpc/include/asm/drmem.h b/arch/powerpc/include/asm/drmem.h
499 index 28c3d936fdf32..bea7a2405ba5d 100644
500 --- a/arch/powerpc/include/asm/drmem.h
501 +++ b/arch/powerpc/include/asm/drmem.h
502 @@ -8,14 +8,13 @@
503 #ifndef _ASM_POWERPC_LMB_H
504 #define _ASM_POWERPC_LMB_H
505
506 +#include <linux/sched.h>
507 +
508 struct drmem_lmb {
509 u64 base_addr;
510 u32 drc_index;
511 u32 aa_index;
512 u32 flags;
513 -#ifdef CONFIG_MEMORY_HOTPLUG
514 - int nid;
515 -#endif
516 };
517
518 struct drmem_lmb_info {
519 @@ -26,8 +25,22 @@ struct drmem_lmb_info {
520
521 extern struct drmem_lmb_info *drmem_info;
522
523 +static inline struct drmem_lmb *drmem_lmb_next(struct drmem_lmb *lmb,
524 + const struct drmem_lmb *start)
525 +{
526 + /*
527 + * DLPAR code paths can take several milliseconds per element
528 + * when interacting with firmware. Ensure that we don't
529 + * unfairly monopolize the CPU.
530 + */
531 + if (((++lmb - start) % 16) == 0)
532 + cond_resched();
533 +
534 + return lmb;
535 +}
536 +
537 #define for_each_drmem_lmb_in_range(lmb, start, end) \
538 - for ((lmb) = (start); (lmb) < (end); (lmb)++)
539 + for ((lmb) = (start); (lmb) < (end); lmb = drmem_lmb_next(lmb, start))
540
541 #define for_each_drmem_lmb(lmb) \
542 for_each_drmem_lmb_in_range((lmb), \
543 @@ -103,22 +116,4 @@ static inline void invalidate_lmb_associativity_index(struct drmem_lmb *lmb)
544 lmb->aa_index = 0xffffffff;
545 }
546
547 -#ifdef CONFIG_MEMORY_HOTPLUG
548 -static inline void lmb_set_nid(struct drmem_lmb *lmb)
549 -{
550 - lmb->nid = memory_add_physaddr_to_nid(lmb->base_addr);
551 -}
552 -static inline void lmb_clear_nid(struct drmem_lmb *lmb)
553 -{
554 - lmb->nid = -1;
555 -}
556 -#else
557 -static inline void lmb_set_nid(struct drmem_lmb *lmb)
558 -{
559 -}
560 -static inline void lmb_clear_nid(struct drmem_lmb *lmb)
561 -{
562 -}
563 -#endif
564 -
565 #endif /* _ASM_POWERPC_LMB_H */
566 diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
567 index b3cbb1136bce0..34d08ff21b988 100644
568 --- a/arch/powerpc/include/asm/reg.h
569 +++ b/arch/powerpc/include/asm/reg.h
570 @@ -796,7 +796,7 @@
571 #define THRM1_TIN (1 << 31)
572 #define THRM1_TIV (1 << 30)
573 #define THRM1_THRES(x) ((x&0x7f)<<23)
574 -#define THRM3_SITV(x) ((x&0x3fff)<<1)
575 +#define THRM3_SITV(x) ((x & 0x1fff) << 1)
576 #define THRM1_TID (1<<2)
577 #define THRM1_TIE (1<<1)
578 #define THRM1_V (1<<0)
579 diff --git a/arch/powerpc/include/asm/tlb.h b/arch/powerpc/include/asm/tlb.h
580 index 7f3a8b9023254..02a1c18cdba3d 100644
581 --- a/arch/powerpc/include/asm/tlb.h
582 +++ b/arch/powerpc/include/asm/tlb.h
583 @@ -67,19 +67,6 @@ static inline int mm_is_thread_local(struct mm_struct *mm)
584 return false;
585 return cpumask_test_cpu(smp_processor_id(), mm_cpumask(mm));
586 }
587 -static inline void mm_reset_thread_local(struct mm_struct *mm)
588 -{
589 - WARN_ON(atomic_read(&mm->context.copros) > 0);
590 - /*
591 - * It's possible for mm_access to take a reference on mm_users to
592 - * access the remote mm from another thread, but it's not allowed
593 - * to set mm_cpumask, so mm_users may be > 1 here.
594 - */
595 - WARN_ON(current->mm != mm);
596 - atomic_set(&mm->context.active_cpus, 1);
597 - cpumask_clear(mm_cpumask(mm));
598 - cpumask_set_cpu(smp_processor_id(), mm_cpumask(mm));
599 -}
600 #else /* CONFIG_PPC_BOOK3S_64 */
601 static inline int mm_is_thread_local(struct mm_struct *mm)
602 {
603 diff --git a/arch/powerpc/kernel/tau_6xx.c b/arch/powerpc/kernel/tau_6xx.c
604 index e2ab8a111b693..0b4694b8d2482 100644
605 --- a/arch/powerpc/kernel/tau_6xx.c
606 +++ b/arch/powerpc/kernel/tau_6xx.c
607 @@ -13,13 +13,14 @@
608 */
609
610 #include <linux/errno.h>
611 -#include <linux/jiffies.h>
612 #include <linux/kernel.h>
613 #include <linux/param.h>
614 #include <linux/string.h>
615 #include <linux/mm.h>
616 #include <linux/interrupt.h>
617 #include <linux/init.h>
618 +#include <linux/delay.h>
619 +#include <linux/workqueue.h>
620
621 #include <asm/io.h>
622 #include <asm/reg.h>
623 @@ -39,9 +40,7 @@ static struct tau_temp
624 unsigned char grew;
625 } tau[NR_CPUS];
626
627 -struct timer_list tau_timer;
628 -
629 -#undef DEBUG
630 +static bool tau_int_enable;
631
632 /* TODO: put these in a /proc interface, with some sanity checks, and maybe
633 * dynamic adjustment to minimize # of interrupts */
634 @@ -50,72 +49,49 @@ struct timer_list tau_timer;
635 #define step_size 2 /* step size when temp goes out of range */
636 #define window_expand 1 /* expand the window by this much */
637 /* configurable values for shrinking the window */
638 -#define shrink_timer 2*HZ /* period between shrinking the window */
639 +#define shrink_timer 2000 /* period between shrinking the window */
640 #define min_window 2 /* minimum window size, degrees C */
641
642 static void set_thresholds(unsigned long cpu)
643 {
644 -#ifdef CONFIG_TAU_INT
645 - /*
646 - * setup THRM1,
647 - * threshold, valid bit, enable interrupts, interrupt when below threshold
648 - */
649 - mtspr(SPRN_THRM1, THRM1_THRES(tau[cpu].low) | THRM1_V | THRM1_TIE | THRM1_TID);
650 + u32 maybe_tie = tau_int_enable ? THRM1_TIE : 0;
651
652 - /* setup THRM2,
653 - * threshold, valid bit, enable interrupts, interrupt when above threshold
654 - */
655 - mtspr (SPRN_THRM2, THRM1_THRES(tau[cpu].high) | THRM1_V | THRM1_TIE);
656 -#else
657 - /* same thing but don't enable interrupts */
658 - mtspr(SPRN_THRM1, THRM1_THRES(tau[cpu].low) | THRM1_V | THRM1_TID);
659 - mtspr(SPRN_THRM2, THRM1_THRES(tau[cpu].high) | THRM1_V);
660 -#endif
661 + /* setup THRM1, threshold, valid bit, interrupt when below threshold */
662 + mtspr(SPRN_THRM1, THRM1_THRES(tau[cpu].low) | THRM1_V | maybe_tie | THRM1_TID);
663 +
664 + /* setup THRM2, threshold, valid bit, interrupt when above threshold */
665 + mtspr(SPRN_THRM2, THRM1_THRES(tau[cpu].high) | THRM1_V | maybe_tie);
666 }
667
668 static void TAUupdate(int cpu)
669 {
670 - unsigned thrm;
671 -
672 -#ifdef DEBUG
673 - printk("TAUupdate ");
674 -#endif
675 + u32 thrm;
676 + u32 bits = THRM1_TIV | THRM1_TIN | THRM1_V;
677
678 /* if both thresholds are crossed, the step_sizes cancel out
679 * and the window winds up getting expanded twice. */
680 - if((thrm = mfspr(SPRN_THRM1)) & THRM1_TIV){ /* is valid? */
681 - if(thrm & THRM1_TIN){ /* crossed low threshold */
682 - if (tau[cpu].low >= step_size){
683 - tau[cpu].low -= step_size;
684 - tau[cpu].high -= (step_size - window_expand);
685 - }
686 - tau[cpu].grew = 1;
687 -#ifdef DEBUG
688 - printk("low threshold crossed ");
689 -#endif
690 + thrm = mfspr(SPRN_THRM1);
691 + if ((thrm & bits) == bits) {
692 + mtspr(SPRN_THRM1, 0);
693 +
694 + if (tau[cpu].low >= step_size) {
695 + tau[cpu].low -= step_size;
696 + tau[cpu].high -= (step_size - window_expand);
697 }
698 + tau[cpu].grew = 1;
699 + pr_debug("%s: low threshold crossed\n", __func__);
700 }
701 - if((thrm = mfspr(SPRN_THRM2)) & THRM1_TIV){ /* is valid? */
702 - if(thrm & THRM1_TIN){ /* crossed high threshold */
703 - if (tau[cpu].high <= 127-step_size){
704 - tau[cpu].low += (step_size - window_expand);
705 - tau[cpu].high += step_size;
706 - }
707 - tau[cpu].grew = 1;
708 -#ifdef DEBUG
709 - printk("high threshold crossed ");
710 -#endif
711 + thrm = mfspr(SPRN_THRM2);
712 + if ((thrm & bits) == bits) {
713 + mtspr(SPRN_THRM2, 0);
714 +
715 + if (tau[cpu].high <= 127 - step_size) {
716 + tau[cpu].low += (step_size - window_expand);
717 + tau[cpu].high += step_size;
718 }
719 + tau[cpu].grew = 1;
720 + pr_debug("%s: high threshold crossed\n", __func__);
721 }
722 -
723 -#ifdef DEBUG
724 - printk("grew = %d\n", tau[cpu].grew);
725 -#endif
726 -
727 -#ifndef CONFIG_TAU_INT /* tau_timeout will do this if not using interrupts */
728 - set_thresholds(cpu);
729 -#endif
730 -
731 }
732
733 #ifdef CONFIG_TAU_INT
734 @@ -140,17 +116,16 @@ void TAUException(struct pt_regs * regs)
735 static void tau_timeout(void * info)
736 {
737 int cpu;
738 - unsigned long flags;
739 int size;
740 int shrink;
741
742 - /* disabling interrupts *should* be okay */
743 - local_irq_save(flags);
744 cpu = smp_processor_id();
745
746 -#ifndef CONFIG_TAU_INT
747 - TAUupdate(cpu);
748 -#endif
749 + if (!tau_int_enable)
750 + TAUupdate(cpu);
751 +
752 + /* Stop thermal sensor comparisons and interrupts */
753 + mtspr(SPRN_THRM3, 0);
754
755 size = tau[cpu].high - tau[cpu].low;
756 if (size > min_window && ! tau[cpu].grew) {
757 @@ -173,32 +148,26 @@ static void tau_timeout(void * info)
758
759 set_thresholds(cpu);
760
761 - /*
762 - * Do the enable every time, since otherwise a bunch of (relatively)
763 - * complex sleep code needs to be added. One mtspr every time
764 - * tau_timeout is called is probably not a big deal.
765 - *
766 - * Enable thermal sensor and set up sample interval timer
767 - * need 20 us to do the compare.. until a nice 'cpu_speed' function
768 - * call is implemented, just assume a 500 mhz clock. It doesn't really
769 - * matter if we take too long for a compare since it's all interrupt
770 - * driven anyway.
771 - *
772 - * use a extra long time.. (60 us @ 500 mhz)
773 + /* Restart thermal sensor comparisons and interrupts.
774 + * The "PowerPC 740 and PowerPC 750 Microprocessor Datasheet"
775 + * recommends that "the maximum value be set in THRM3 under all
776 + * conditions."
777 */
778 - mtspr(SPRN_THRM3, THRM3_SITV(500*60) | THRM3_E);
779 -
780 - local_irq_restore(flags);
781 + mtspr(SPRN_THRM3, THRM3_SITV(0x1fff) | THRM3_E);
782 }
783
784 -static void tau_timeout_smp(struct timer_list *unused)
785 -{
786 +static struct workqueue_struct *tau_workq;
787
788 - /* schedule ourselves to be run again */
789 - mod_timer(&tau_timer, jiffies + shrink_timer) ;
790 +static void tau_work_func(struct work_struct *work)
791 +{
792 + msleep(shrink_timer);
793 on_each_cpu(tau_timeout, NULL, 0);
794 + /* schedule ourselves to be run again */
795 + queue_work(tau_workq, work);
796 }
797
798 +DECLARE_WORK(tau_work, tau_work_func);
799 +
800 /*
801 * setup the TAU
802 *
803 @@ -231,21 +200,19 @@ static int __init TAU_init(void)
804 return 1;
805 }
806
807 + tau_int_enable = IS_ENABLED(CONFIG_TAU_INT) &&
808 + !strcmp(cur_cpu_spec->platform, "ppc750");
809
810 - /* first, set up the window shrinking timer */
811 - timer_setup(&tau_timer, tau_timeout_smp, 0);
812 - tau_timer.expires = jiffies + shrink_timer;
813 - add_timer(&tau_timer);
814 + tau_workq = alloc_workqueue("tau", WQ_UNBOUND, 1, 0);
815 + if (!tau_workq)
816 + return -ENOMEM;
817
818 on_each_cpu(TAU_init_smp, NULL, 0);
819
820 - printk("Thermal assist unit ");
821 -#ifdef CONFIG_TAU_INT
822 - printk("using interrupts, ");
823 -#else
824 - printk("using timers, ");
825 -#endif
826 - printk("shrink_timer: %d jiffies\n", shrink_timer);
827 + queue_work(tau_workq, &tau_work);
828 +
829 + pr_info("Thermal assist unit using %s, shrink_timer: %d ms\n",
830 + tau_int_enable ? "interrupts" : "workqueue", shrink_timer);
831 tau_initialized = 1;
832
833 return 0;
834 diff --git a/arch/powerpc/mm/book3s64/radix_tlb.c b/arch/powerpc/mm/book3s64/radix_tlb.c
835 index 67af871190c6d..b0f240afffa22 100644
836 --- a/arch/powerpc/mm/book3s64/radix_tlb.c
837 +++ b/arch/powerpc/mm/book3s64/radix_tlb.c
838 @@ -639,19 +639,29 @@ static void do_exit_flush_lazy_tlb(void *arg)
839 struct mm_struct *mm = arg;
840 unsigned long pid = mm->context.id;
841
842 + /*
843 + * A kthread could have done a mmget_not_zero() after the flushing CPU
844 + * checked mm_is_singlethreaded, and be in the process of
845 + * kthread_use_mm when interrupted here. In that case, current->mm will
846 + * be set to mm, because kthread_use_mm() setting ->mm and switching to
847 + * the mm is done with interrupts off.
848 + */
849 if (current->mm == mm)
850 - return; /* Local CPU */
851 + goto out_flush;
852
853 if (current->active_mm == mm) {
854 - /*
855 - * Must be a kernel thread because sender is single-threaded.
856 - */
857 - BUG_ON(current->mm);
858 + WARN_ON_ONCE(current->mm != NULL);
859 + /* Is a kernel thread and is using mm as the lazy tlb */
860 mmgrab(&init_mm);
861 - switch_mm(mm, &init_mm, current);
862 current->active_mm = &init_mm;
863 + switch_mm_irqs_off(mm, &init_mm, current);
864 mmdrop(mm);
865 }
866 +
867 + atomic_dec(&mm->context.active_cpus);
868 + cpumask_clear_cpu(smp_processor_id(), mm_cpumask(mm));
869 +
870 +out_flush:
871 _tlbiel_pid(pid, RIC_FLUSH_ALL);
872 }
873
874 @@ -666,7 +676,6 @@ static void exit_flush_lazy_tlbs(struct mm_struct *mm)
875 */
876 smp_call_function_many(mm_cpumask(mm), do_exit_flush_lazy_tlb,
877 (void *)mm, 1);
878 - mm_reset_thread_local(mm);
879 }
880
881 void radix__flush_tlb_mm(struct mm_struct *mm)
882 diff --git a/arch/powerpc/mm/drmem.c b/arch/powerpc/mm/drmem.c
883 index 59327cefbc6a6..873fcfc7b8756 100644
884 --- a/arch/powerpc/mm/drmem.c
885 +++ b/arch/powerpc/mm/drmem.c
886 @@ -362,10 +362,8 @@ static void __init init_drmem_v1_lmbs(const __be32 *prop)
887 if (!drmem_info->lmbs)
888 return;
889
890 - for_each_drmem_lmb(lmb) {
891 + for_each_drmem_lmb(lmb)
892 read_drconf_v1_cell(lmb, &prop);
893 - lmb_set_nid(lmb);
894 - }
895 }
896
897 static void __init init_drmem_v2_lmbs(const __be32 *prop)
898 @@ -410,8 +408,6 @@ static void __init init_drmem_v2_lmbs(const __be32 *prop)
899
900 lmb->aa_index = dr_cell.aa_index;
901 lmb->flags = dr_cell.flags;
902 -
903 - lmb_set_nid(lmb);
904 }
905 }
906 }
907 diff --git a/arch/powerpc/perf/hv-gpci-requests.h b/arch/powerpc/perf/hv-gpci-requests.h
908 index e608f9db12ddc..8965b4463d433 100644
909 --- a/arch/powerpc/perf/hv-gpci-requests.h
910 +++ b/arch/powerpc/perf/hv-gpci-requests.h
911 @@ -95,7 +95,7 @@ REQUEST(__field(0, 8, partition_id)
912
913 #define REQUEST_NAME system_performance_capabilities
914 #define REQUEST_NUM 0x40
915 -#define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff"
916 +#define REQUEST_IDX_KIND "starting_index=0xffffffff"
917 #include I(REQUEST_BEGIN)
918 REQUEST(__field(0, 1, perf_collect_privileged)
919 __field(0x1, 1, capability_mask)
920 @@ -223,7 +223,7 @@ REQUEST(__field(0, 2, partition_id)
921
922 #define REQUEST_NAME system_hypervisor_times
923 #define REQUEST_NUM 0xF0
924 -#define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff"
925 +#define REQUEST_IDX_KIND "starting_index=0xffffffff"
926 #include I(REQUEST_BEGIN)
927 REQUEST(__count(0, 8, time_spent_to_dispatch_virtual_processors)
928 __count(0x8, 8, time_spent_processing_virtual_processor_timers)
929 @@ -234,7 +234,7 @@ REQUEST(__count(0, 8, time_spent_to_dispatch_virtual_processors)
930
931 #define REQUEST_NAME system_tlbie_count_and_time
932 #define REQUEST_NUM 0xF4
933 -#define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff"
934 +#define REQUEST_IDX_KIND "starting_index=0xffffffff"
935 #include I(REQUEST_BEGIN)
936 REQUEST(__count(0, 8, tlbie_instructions_issued)
937 /*
938 diff --git a/arch/powerpc/perf/isa207-common.c b/arch/powerpc/perf/isa207-common.c
939 index 4c86da5eb28ab..0b5c8f4fbdbfd 100644
940 --- a/arch/powerpc/perf/isa207-common.c
941 +++ b/arch/powerpc/perf/isa207-common.c
942 @@ -269,6 +269,15 @@ int isa207_get_constraint(u64 event, unsigned long *maskp, unsigned long *valp)
943
944 mask |= CNST_PMC_MASK(pmc);
945 value |= CNST_PMC_VAL(pmc);
946 +
947 + /*
948 + * PMC5 and PMC6 are used to count cycles and instructions and
949 + * they do not support most of the constraint bits. Add a check
950 + * to exclude PMC5/6 from most of the constraints except for
951 + * EBB/BHRB.
952 + */
953 + if (pmc >= 5)
954 + goto ebb_bhrb;
955 }
956
957 if (pmc <= 4) {
958 @@ -335,6 +344,7 @@ int isa207_get_constraint(u64 event, unsigned long *maskp, unsigned long *valp)
959 }
960 }
961
962 +ebb_bhrb:
963 if (!pmc && ebb)
964 /* EBB events must specify the PMC */
965 return -1;
966 diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
967 index d82e3664ffdf8..18792a5b003a0 100644
968 --- a/arch/powerpc/platforms/Kconfig
969 +++ b/arch/powerpc/platforms/Kconfig
970 @@ -219,12 +219,11 @@ config TAU
971 temperature within 2-4 degrees Celsius. This option shows the current
972 on-die temperature in /proc/cpuinfo if the cpu supports it.
973
974 - Unfortunately, on some chip revisions, this sensor is very inaccurate
975 - and in many cases, does not work at all, so don't assume the cpu
976 - temp is actually what /proc/cpuinfo says it is.
977 + Unfortunately, this sensor is very inaccurate when uncalibrated, so
978 + don't assume the cpu temp is actually what /proc/cpuinfo says it is.
979
980 config TAU_INT
981 - bool "Interrupt driven TAU driver (DANGEROUS)"
982 + bool "Interrupt driven TAU driver (EXPERIMENTAL)"
983 depends on TAU
984 ---help---
985 The TAU supports an interrupt driven mode which causes an interrupt
986 @@ -232,12 +231,7 @@ config TAU_INT
987 to get notified the temp has exceeded a range. With this option off,
988 a timer is used to re-check the temperature periodically.
989
990 - However, on some cpus it appears that the TAU interrupt hardware
991 - is buggy and can cause a situation which would lead unexplained hard
992 - lockups.
993 -
994 - Unless you are extending the TAU driver, or enjoy kernel/hardware
995 - debugging, leave this option off.
996 + If in doubt, say N here.
997
998 config TAU_AVERAGE
999 bool "Average high and low temp"
1000 diff --git a/arch/powerpc/platforms/powernv/opal-dump.c b/arch/powerpc/platforms/powernv/opal-dump.c
1001 index 543c816fa99ef..0e6693bacb7e7 100644
1002 --- a/arch/powerpc/platforms/powernv/opal-dump.c
1003 +++ b/arch/powerpc/platforms/powernv/opal-dump.c
1004 @@ -318,15 +318,14 @@ static ssize_t dump_attr_read(struct file *filep, struct kobject *kobj,
1005 return count;
1006 }
1007
1008 -static struct dump_obj *create_dump_obj(uint32_t id, size_t size,
1009 - uint32_t type)
1010 +static void create_dump_obj(uint32_t id, size_t size, uint32_t type)
1011 {
1012 struct dump_obj *dump;
1013 int rc;
1014
1015 dump = kzalloc(sizeof(*dump), GFP_KERNEL);
1016 if (!dump)
1017 - return NULL;
1018 + return;
1019
1020 dump->kobj.kset = dump_kset;
1021
1022 @@ -346,21 +345,39 @@ static struct dump_obj *create_dump_obj(uint32_t id, size_t size,
1023 rc = kobject_add(&dump->kobj, NULL, "0x%x-0x%x", type, id);
1024 if (rc) {
1025 kobject_put(&dump->kobj);
1026 - return NULL;
1027 + return;
1028 }
1029
1030 + /*
1031 + * As soon as the sysfs file for this dump is created/activated there is
1032 + * a chance the opal_errd daemon (or any userspace) might read and
1033 + * acknowledge the dump before kobject_uevent() is called. If that
1034 + * happens then there is a potential race between
1035 + * dump_ack_store->kobject_put() and kobject_uevent() which leads to a
1036 + * use-after-free of a kernfs object resulting in a kernel crash.
1037 + *
1038 + * To avoid that, we need to take a reference on behalf of the bin file,
1039 + * so that our reference remains valid while we call kobject_uevent().
1040 + * We then drop our reference before exiting the function, leaving the
1041 + * bin file to drop the last reference (if it hasn't already).
1042 + */
1043 +
1044 + /* Take a reference for the bin file */
1045 + kobject_get(&dump->kobj);
1046 rc = sysfs_create_bin_file(&dump->kobj, &dump->dump_attr);
1047 - if (rc) {
1048 + if (rc == 0) {
1049 + kobject_uevent(&dump->kobj, KOBJ_ADD);
1050 +
1051 + pr_info("%s: New platform dump. ID = 0x%x Size %u\n",
1052 + __func__, dump->id, dump->size);
1053 + } else {
1054 + /* Drop reference count taken for bin file */
1055 kobject_put(&dump->kobj);
1056 - return NULL;
1057 }
1058
1059 - pr_info("%s: New platform dump. ID = 0x%x Size %u\n",
1060 - __func__, dump->id, dump->size);
1061 -
1062 - kobject_uevent(&dump->kobj, KOBJ_ADD);
1063 -
1064 - return dump;
1065 + /* Drop our reference */
1066 + kobject_put(&dump->kobj);
1067 + return;
1068 }
1069
1070 static irqreturn_t process_dump(int irq, void *data)
1071 diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
1072 index e7d23a933a0d3..66b32f46702de 100644
1073 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
1074 +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
1075 @@ -376,25 +376,32 @@ static int dlpar_add_lmb(struct drmem_lmb *);
1076
1077 static int dlpar_remove_lmb(struct drmem_lmb *lmb)
1078 {
1079 + struct memory_block *mem_block;
1080 unsigned long block_sz;
1081 int rc;
1082
1083 if (!lmb_is_removable(lmb))
1084 return -EINVAL;
1085
1086 + mem_block = lmb_to_memblock(lmb);
1087 + if (mem_block == NULL)
1088 + return -EINVAL;
1089 +
1090 rc = dlpar_offline_lmb(lmb);
1091 - if (rc)
1092 + if (rc) {
1093 + put_device(&mem_block->dev);
1094 return rc;
1095 + }
1096
1097 block_sz = pseries_memory_block_size();
1098
1099 - __remove_memory(lmb->nid, lmb->base_addr, block_sz);
1100 + __remove_memory(mem_block->nid, lmb->base_addr, block_sz);
1101 + put_device(&mem_block->dev);
1102
1103 /* Update memory regions for memory remove */
1104 memblock_remove(lmb->base_addr, block_sz);
1105
1106 invalidate_lmb_associativity_index(lmb);
1107 - lmb_clear_nid(lmb);
1108 lmb->flags &= ~DRCONF_MEM_ASSIGNED;
1109
1110 return 0;
1111 @@ -651,7 +658,7 @@ static int dlpar_memory_remove_by_ic(u32 lmbs_to_remove, u32 drc_index)
1112 static int dlpar_add_lmb(struct drmem_lmb *lmb)
1113 {
1114 unsigned long block_sz;
1115 - int rc;
1116 + int nid, rc;
1117
1118 if (lmb->flags & DRCONF_MEM_ASSIGNED)
1119 return -EINVAL;
1120 @@ -662,11 +669,13 @@ static int dlpar_add_lmb(struct drmem_lmb *lmb)
1121 return rc;
1122 }
1123
1124 - lmb_set_nid(lmb);
1125 block_sz = memory_block_size_bytes();
1126
1127 + /* Find the node id for this address. */
1128 + nid = memory_add_physaddr_to_nid(lmb->base_addr);
1129 +
1130 /* Add the memory */
1131 - rc = __add_memory(lmb->nid, lmb->base_addr, block_sz);
1132 + rc = __add_memory(nid, lmb->base_addr, block_sz);
1133 if (rc) {
1134 invalidate_lmb_associativity_index(lmb);
1135 return rc;
1136 @@ -674,9 +683,8 @@ static int dlpar_add_lmb(struct drmem_lmb *lmb)
1137
1138 rc = dlpar_online_lmb(lmb);
1139 if (rc) {
1140 - __remove_memory(lmb->nid, lmb->base_addr, block_sz);
1141 + __remove_memory(nid, lmb->base_addr, block_sz);
1142 invalidate_lmb_associativity_index(lmb);
1143 - lmb_clear_nid(lmb);
1144 } else {
1145 lmb->flags |= DRCONF_MEM_ASSIGNED;
1146 }
1147 diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
1148 index b3c4848869e52..b658fa627a34b 100644
1149 --- a/arch/powerpc/platforms/pseries/ras.c
1150 +++ b/arch/powerpc/platforms/pseries/ras.c
1151 @@ -494,18 +494,55 @@ int pSeries_system_reset_exception(struct pt_regs *regs)
1152 return 0; /* need to perform reset */
1153 }
1154
1155 +static int mce_handle_err_realmode(int disposition, u8 error_type)
1156 +{
1157 +#ifdef CONFIG_PPC_BOOK3S_64
1158 + if (disposition == RTAS_DISP_NOT_RECOVERED) {
1159 + switch (error_type) {
1160 + case MC_ERROR_TYPE_SLB:
1161 + case MC_ERROR_TYPE_ERAT:
1162 + /*
1163 + * Store the old slb content in paca before flushing.
1164 + * Print this when we go to virtual mode.
1165 + * There are chances that we may hit MCE again if there
1166 + * is a parity error on the SLB entry we trying to read
1167 + * for saving. Hence limit the slb saving to single
1168 + * level of recursion.
1169 + */
1170 + if (local_paca->in_mce == 1)
1171 + slb_save_contents(local_paca->mce_faulty_slbs);
1172 + flush_and_reload_slb();
1173 + disposition = RTAS_DISP_FULLY_RECOVERED;
1174 + break;
1175 + default:
1176 + break;
1177 + }
1178 + } else if (disposition == RTAS_DISP_LIMITED_RECOVERY) {
1179 + /* Platform corrected itself but could be degraded */
1180 + pr_err("MCE: limited recovery, system may be degraded\n");
1181 + disposition = RTAS_DISP_FULLY_RECOVERED;
1182 + }
1183 +#endif
1184 + return disposition;
1185 +}
1186
1187 -static int mce_handle_error(struct pt_regs *regs, struct rtas_error_log *errp)
1188 +static int mce_handle_err_virtmode(struct pt_regs *regs,
1189 + struct rtas_error_log *errp,
1190 + struct pseries_mc_errorlog *mce_log,
1191 + int disposition)
1192 {
1193 struct mce_error_info mce_err = { 0 };
1194 - unsigned long eaddr = 0, paddr = 0;
1195 - struct pseries_errorlog *pseries_log;
1196 - struct pseries_mc_errorlog *mce_log;
1197 - int disposition = rtas_error_disposition(errp);
1198 int initiator = rtas_error_initiator(errp);
1199 int severity = rtas_error_severity(errp);
1200 + unsigned long eaddr = 0, paddr = 0;
1201 u8 error_type, err_sub_type;
1202
1203 + if (!mce_log)
1204 + goto out;
1205 +
1206 + error_type = mce_log->error_type;
1207 + err_sub_type = rtas_mc_error_sub_type(mce_log);
1208 +
1209 if (initiator == RTAS_INITIATOR_UNKNOWN)
1210 mce_err.initiator = MCE_INITIATOR_UNKNOWN;
1211 else if (initiator == RTAS_INITIATOR_CPU)
1212 @@ -544,18 +581,7 @@ static int mce_handle_error(struct pt_regs *regs, struct rtas_error_log *errp)
1213 mce_err.error_type = MCE_ERROR_TYPE_UNKNOWN;
1214 mce_err.error_class = MCE_ECLASS_UNKNOWN;
1215
1216 - if (!rtas_error_extended(errp))
1217 - goto out;
1218 -
1219 - pseries_log = get_pseries_errorlog(errp, PSERIES_ELOG_SECT_ID_MCE);
1220 - if (pseries_log == NULL)
1221 - goto out;
1222 -
1223 - mce_log = (struct pseries_mc_errorlog *)pseries_log->data;
1224 - error_type = mce_log->error_type;
1225 - err_sub_type = rtas_mc_error_sub_type(mce_log);
1226 -
1227 - switch (mce_log->error_type) {
1228 + switch (error_type) {
1229 case MC_ERROR_TYPE_UE:
1230 mce_err.error_type = MCE_ERROR_TYPE_UE;
1231 switch (err_sub_type) {
1232 @@ -652,37 +678,31 @@ static int mce_handle_error(struct pt_regs *regs, struct rtas_error_log *errp)
1233 mce_err.error_type = MCE_ERROR_TYPE_UNKNOWN;
1234 break;
1235 }
1236 +out:
1237 + save_mce_event(regs, disposition == RTAS_DISP_FULLY_RECOVERED,
1238 + &mce_err, regs->nip, eaddr, paddr);
1239 + return disposition;
1240 +}
1241
1242 -#ifdef CONFIG_PPC_BOOK3S_64
1243 - if (disposition == RTAS_DISP_NOT_RECOVERED) {
1244 - switch (error_type) {
1245 - case MC_ERROR_TYPE_SLB:
1246 - case MC_ERROR_TYPE_ERAT:
1247 - /*
1248 - * Store the old slb content in paca before flushing.
1249 - * Print this when we go to virtual mode.
1250 - * There are chances that we may hit MCE again if there
1251 - * is a parity error on the SLB entry we trying to read
1252 - * for saving. Hence limit the slb saving to single
1253 - * level of recursion.
1254 - */
1255 - if (local_paca->in_mce == 1)
1256 - slb_save_contents(local_paca->mce_faulty_slbs);
1257 - flush_and_reload_slb();
1258 - disposition = RTAS_DISP_FULLY_RECOVERED;
1259 - break;
1260 - default:
1261 - break;
1262 - }
1263 - } else if (disposition == RTAS_DISP_LIMITED_RECOVERY) {
1264 - /* Platform corrected itself but could be degraded */
1265 - printk(KERN_ERR "MCE: limited recovery, system may "
1266 - "be degraded\n");
1267 - disposition = RTAS_DISP_FULLY_RECOVERED;
1268 - }
1269 -#endif
1270 +static int mce_handle_error(struct pt_regs *regs, struct rtas_error_log *errp)
1271 +{
1272 + struct pseries_errorlog *pseries_log;
1273 + struct pseries_mc_errorlog *mce_log = NULL;
1274 + int disposition = rtas_error_disposition(errp);
1275 + u8 error_type;
1276 +
1277 + if (!rtas_error_extended(errp))
1278 + goto out;
1279 +
1280 + pseries_log = get_pseries_errorlog(errp, PSERIES_ELOG_SECT_ID_MCE);
1281 + if (!pseries_log)
1282 + goto out;
1283 +
1284 + mce_log = (struct pseries_mc_errorlog *)pseries_log->data;
1285 + error_type = mce_log->error_type;
1286 +
1287 + disposition = mce_handle_err_realmode(disposition, error_type);
1288
1289 -out:
1290 /*
1291 * Enable translation as we will be accessing per-cpu variables
1292 * in save_mce_event() which may fall outside RMO region, also
1293 @@ -693,10 +713,10 @@ out:
1294 * Note: All the realmode handling like flushing SLB entries for
1295 * SLB multihit is done by now.
1296 */
1297 +out:
1298 mtmsr(mfmsr() | MSR_IR | MSR_DR);
1299 - save_mce_event(regs, disposition == RTAS_DISP_FULLY_RECOVERED,
1300 - &mce_err, regs->nip, eaddr, paddr);
1301 -
1302 + disposition = mce_handle_err_virtmode(regs, errp, mce_log,
1303 + disposition);
1304 return disposition;
1305 }
1306
1307 diff --git a/arch/powerpc/platforms/pseries/rng.c b/arch/powerpc/platforms/pseries/rng.c
1308 index bbb97169bf63e..6268545947b83 100644
1309 --- a/arch/powerpc/platforms/pseries/rng.c
1310 +++ b/arch/powerpc/platforms/pseries/rng.c
1311 @@ -36,6 +36,7 @@ static __init int rng_init(void)
1312
1313 ppc_md.get_random_seed = pseries_get_random_long;
1314
1315 + of_node_put(dn);
1316 return 0;
1317 }
1318 machine_subsys_initcall(pseries, rng_init);
1319 diff --git a/arch/powerpc/sysdev/xics/icp-hv.c b/arch/powerpc/sysdev/xics/icp-hv.c
1320 index ad8117148ea3b..21b9d1bf39ff6 100644
1321 --- a/arch/powerpc/sysdev/xics/icp-hv.c
1322 +++ b/arch/powerpc/sysdev/xics/icp-hv.c
1323 @@ -174,6 +174,7 @@ int icp_hv_init(void)
1324
1325 icp_ops = &icp_hv_ops;
1326
1327 + of_node_put(np);
1328 return 0;
1329 }
1330
1331 diff --git a/arch/x86/boot/compressed/pgtable_64.c b/arch/x86/boot/compressed/pgtable_64.c
1332 index c8862696a47b9..7d0394f4ebf97 100644
1333 --- a/arch/x86/boot/compressed/pgtable_64.c
1334 +++ b/arch/x86/boot/compressed/pgtable_64.c
1335 @@ -5,15 +5,6 @@
1336 #include "pgtable.h"
1337 #include "../string.h"
1338
1339 -/*
1340 - * __force_order is used by special_insns.h asm code to force instruction
1341 - * serialization.
1342 - *
1343 - * It is not referenced from the code, but GCC < 5 with -fPIE would fail
1344 - * due to an undefined symbol. Define it to make these ancient GCCs work.
1345 - */
1346 -unsigned long __force_order;
1347 -
1348 #define BIOS_START_MIN 0x20000U /* 128K, less than this is insane */
1349 #define BIOS_START_MAX 0x9f000U /* 640K, absolute maximum */
1350
1351 diff --git a/arch/x86/events/amd/iommu.c b/arch/x86/events/amd/iommu.c
1352 index fb616203ce427..be50ef8572cce 100644
1353 --- a/arch/x86/events/amd/iommu.c
1354 +++ b/arch/x86/events/amd/iommu.c
1355 @@ -379,7 +379,7 @@ static __init int _init_events_attrs(void)
1356 while (amd_iommu_v2_event_descs[i].attr.attr.name)
1357 i++;
1358
1359 - attrs = kcalloc(i + 1, sizeof(struct attribute **), GFP_KERNEL);
1360 + attrs = kcalloc(i + 1, sizeof(*attrs), GFP_KERNEL);
1361 if (!attrs)
1362 return -ENOMEM;
1363
1364 diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c
1365 index e5ad97a823426..1aaba2c8a9ba6 100644
1366 --- a/arch/x86/events/intel/ds.c
1367 +++ b/arch/x86/events/intel/ds.c
1368 @@ -669,9 +669,7 @@ unlock:
1369
1370 static inline void intel_pmu_drain_pebs_buffer(void)
1371 {
1372 - struct pt_regs regs;
1373 -
1374 - x86_pmu.drain_pebs(&regs);
1375 + x86_pmu.drain_pebs(NULL);
1376 }
1377
1378 /*
1379 @@ -1736,6 +1734,7 @@ static void __intel_pmu_pebs_event(struct perf_event *event,
1380 struct x86_perf_regs perf_regs;
1381 struct pt_regs *regs = &perf_regs.regs;
1382 void *at = get_next_pebs_record_by_bit(base, top, bit);
1383 + struct pt_regs dummy_iregs;
1384
1385 if (hwc->flags & PERF_X86_EVENT_AUTO_RELOAD) {
1386 /*
1387 @@ -1748,6 +1747,9 @@ static void __intel_pmu_pebs_event(struct perf_event *event,
1388 } else if (!intel_pmu_save_and_restart(event))
1389 return;
1390
1391 + if (!iregs)
1392 + iregs = &dummy_iregs;
1393 +
1394 while (count > 1) {
1395 setup_sample(event, iregs, at, &data, regs);
1396 perf_event_output(event, &data, regs);
1397 @@ -1757,16 +1759,22 @@ static void __intel_pmu_pebs_event(struct perf_event *event,
1398 }
1399
1400 setup_sample(event, iregs, at, &data, regs);
1401 -
1402 - /*
1403 - * All but the last records are processed.
1404 - * The last one is left to be able to call the overflow handler.
1405 - */
1406 - if (perf_event_overflow(event, &data, regs)) {
1407 - x86_pmu_stop(event, 0);
1408 - return;
1409 + if (iregs == &dummy_iregs) {
1410 + /*
1411 + * The PEBS records may be drained in the non-overflow context,
1412 + * e.g., large PEBS + context switch. Perf should treat the
1413 + * last record the same as other PEBS records, and doesn't
1414 + * invoke the generic overflow handler.
1415 + */
1416 + perf_event_output(event, &data, regs);
1417 + } else {
1418 + /*
1419 + * All but the last records are processed.
1420 + * The last one is left to be able to call the overflow handler.
1421 + */
1422 + if (perf_event_overflow(event, &data, regs))
1423 + x86_pmu_stop(event, 0);
1424 }
1425 -
1426 }
1427
1428 static void intel_pmu_drain_pebs_core(struct pt_regs *iregs)
1429 diff --git a/arch/x86/events/intel/uncore_snb.c b/arch/x86/events/intel/uncore_snb.c
1430 index c37cb12d0ef68..aec6e63c6a04a 100644
1431 --- a/arch/x86/events/intel/uncore_snb.c
1432 +++ b/arch/x86/events/intel/uncore_snb.c
1433 @@ -110,6 +110,10 @@
1434 #define ICL_UNC_CBO_0_PER_CTR0 0x702
1435 #define ICL_UNC_CBO_MSR_OFFSET 0x8
1436
1437 +/* ICL ARB register */
1438 +#define ICL_UNC_ARB_PER_CTR 0x3b1
1439 +#define ICL_UNC_ARB_PERFEVTSEL 0x3b3
1440 +
1441 DEFINE_UNCORE_FORMAT_ATTR(event, event, "config:0-7");
1442 DEFINE_UNCORE_FORMAT_ATTR(umask, umask, "config:8-15");
1443 DEFINE_UNCORE_FORMAT_ATTR(edge, edge, "config:18");
1444 @@ -297,15 +301,21 @@ void skl_uncore_cpu_init(void)
1445 snb_uncore_arb.ops = &skl_uncore_msr_ops;
1446 }
1447
1448 +static struct intel_uncore_ops icl_uncore_msr_ops = {
1449 + .disable_event = snb_uncore_msr_disable_event,
1450 + .enable_event = snb_uncore_msr_enable_event,
1451 + .read_counter = uncore_msr_read_counter,
1452 +};
1453 +
1454 static struct intel_uncore_type icl_uncore_cbox = {
1455 .name = "cbox",
1456 - .num_counters = 4,
1457 + .num_counters = 2,
1458 .perf_ctr_bits = 44,
1459 .perf_ctr = ICL_UNC_CBO_0_PER_CTR0,
1460 .event_ctl = SNB_UNC_CBO_0_PERFEVTSEL0,
1461 .event_mask = SNB_UNC_RAW_EVENT_MASK,
1462 .msr_offset = ICL_UNC_CBO_MSR_OFFSET,
1463 - .ops = &skl_uncore_msr_ops,
1464 + .ops = &icl_uncore_msr_ops,
1465 .format_group = &snb_uncore_format_group,
1466 };
1467
1468 @@ -334,13 +344,25 @@ static struct intel_uncore_type icl_uncore_clockbox = {
1469 .single_fixed = 1,
1470 .event_mask = SNB_UNC_CTL_EV_SEL_MASK,
1471 .format_group = &icl_uncore_clock_format_group,
1472 - .ops = &skl_uncore_msr_ops,
1473 + .ops = &icl_uncore_msr_ops,
1474 .event_descs = icl_uncore_events,
1475 };
1476
1477 +static struct intel_uncore_type icl_uncore_arb = {
1478 + .name = "arb",
1479 + .num_counters = 1,
1480 + .num_boxes = 1,
1481 + .perf_ctr_bits = 44,
1482 + .perf_ctr = ICL_UNC_ARB_PER_CTR,
1483 + .event_ctl = ICL_UNC_ARB_PERFEVTSEL,
1484 + .event_mask = SNB_UNC_RAW_EVENT_MASK,
1485 + .ops = &icl_uncore_msr_ops,
1486 + .format_group = &snb_uncore_format_group,
1487 +};
1488 +
1489 static struct intel_uncore_type *icl_msr_uncores[] = {
1490 &icl_uncore_cbox,
1491 - &snb_uncore_arb,
1492 + &icl_uncore_arb,
1493 &icl_uncore_clockbox,
1494 NULL,
1495 };
1496 @@ -358,7 +380,6 @@ void icl_uncore_cpu_init(void)
1497 {
1498 uncore_msr_uncores = icl_msr_uncores;
1499 icl_uncore_cbox.num_boxes = icl_get_cbox_num();
1500 - snb_uncore_arb.ops = &skl_uncore_msr_ops;
1501 }
1502
1503 enum {
1504 diff --git a/arch/x86/include/asm/special_insns.h b/arch/x86/include/asm/special_insns.h
1505 index 6d37b8fcfc778..2e0cdc64cb50d 100644
1506 --- a/arch/x86/include/asm/special_insns.h
1507 +++ b/arch/x86/include/asm/special_insns.h
1508 @@ -10,45 +10,47 @@
1509 #include <linux/jump_label.h>
1510
1511 /*
1512 - * Volatile isn't enough to prevent the compiler from reordering the
1513 - * read/write functions for the control registers and messing everything up.
1514 - * A memory clobber would solve the problem, but would prevent reordering of
1515 - * all loads stores around it, which can hurt performance. Solution is to
1516 - * use a variable and mimic reads and writes to it to enforce serialization
1517 + * The compiler should not reorder volatile asm statements with respect to each
1518 + * other: they should execute in program order. However GCC 4.9.x and 5.x have
1519 + * a bug (which was fixed in 8.1, 7.3 and 6.5) where they might reorder
1520 + * volatile asm. The write functions are not affected since they have memory
1521 + * clobbers preventing reordering. To prevent reads from being reordered with
1522 + * respect to writes, use a dummy memory operand.
1523 */
1524 -extern unsigned long __force_order;
1525 +
1526 +#define __FORCE_ORDER "m"(*(unsigned int *)0x1000UL)
1527
1528 void native_write_cr0(unsigned long val);
1529
1530 static inline unsigned long native_read_cr0(void)
1531 {
1532 unsigned long val;
1533 - asm volatile("mov %%cr0,%0\n\t" : "=r" (val), "=m" (__force_order));
1534 + asm volatile("mov %%cr0,%0\n\t" : "=r" (val) : __FORCE_ORDER);
1535 return val;
1536 }
1537
1538 static inline unsigned long native_read_cr2(void)
1539 {
1540 unsigned long val;
1541 - asm volatile("mov %%cr2,%0\n\t" : "=r" (val), "=m" (__force_order));
1542 + asm volatile("mov %%cr2,%0\n\t" : "=r" (val) : __FORCE_ORDER);
1543 return val;
1544 }
1545
1546 static inline void native_write_cr2(unsigned long val)
1547 {
1548 - asm volatile("mov %0,%%cr2": : "r" (val), "m" (__force_order));
1549 + asm volatile("mov %0,%%cr2": : "r" (val) : "memory");
1550 }
1551
1552 static inline unsigned long __native_read_cr3(void)
1553 {
1554 unsigned long val;
1555 - asm volatile("mov %%cr3,%0\n\t" : "=r" (val), "=m" (__force_order));
1556 + asm volatile("mov %%cr3,%0\n\t" : "=r" (val) : __FORCE_ORDER);
1557 return val;
1558 }
1559
1560 static inline void native_write_cr3(unsigned long val)
1561 {
1562 - asm volatile("mov %0,%%cr3": : "r" (val), "m" (__force_order));
1563 + asm volatile("mov %0,%%cr3": : "r" (val) : "memory");
1564 }
1565
1566 static inline unsigned long native_read_cr4(void)
1567 @@ -63,10 +65,10 @@ static inline unsigned long native_read_cr4(void)
1568 asm volatile("1: mov %%cr4, %0\n"
1569 "2:\n"
1570 _ASM_EXTABLE(1b, 2b)
1571 - : "=r" (val), "=m" (__force_order) : "0" (0));
1572 + : "=r" (val) : "0" (0), __FORCE_ORDER);
1573 #else
1574 /* CR4 always exists on x86_64. */
1575 - asm volatile("mov %%cr4,%0\n\t" : "=r" (val), "=m" (__force_order));
1576 + asm volatile("mov %%cr4,%0\n\t" : "=r" (val) : __FORCE_ORDER);
1577 #endif
1578 return val;
1579 }
1580 diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
1581 index 9b3f25e146087..8a85c2e144a6f 100644
1582 --- a/arch/x86/kernel/cpu/common.c
1583 +++ b/arch/x86/kernel/cpu/common.c
1584 @@ -377,7 +377,7 @@ void native_write_cr0(unsigned long val)
1585 unsigned long bits_missing = 0;
1586
1587 set_register:
1588 - asm volatile("mov %0,%%cr0": "+r" (val), "+m" (__force_order));
1589 + asm volatile("mov %0,%%cr0": "+r" (val) : : "memory");
1590
1591 if (static_branch_likely(&cr_pinning)) {
1592 if (unlikely((val & X86_CR0_WP) != X86_CR0_WP)) {
1593 @@ -396,7 +396,7 @@ void native_write_cr4(unsigned long val)
1594 unsigned long bits_changed = 0;
1595
1596 set_register:
1597 - asm volatile("mov %0,%%cr4": "+r" (val), "+m" (cr4_pinned_bits));
1598 + asm volatile("mov %0,%%cr4": "+r" (val) : : "memory");
1599
1600 if (static_branch_likely(&cr_pinning)) {
1601 if (unlikely((val & cr4_pinned_mask) != cr4_pinned_bits)) {
1602 diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
1603 index fd76e3733dd3d..92331de16d70e 100644
1604 --- a/arch/x86/kernel/cpu/mce/core.c
1605 +++ b/arch/x86/kernel/cpu/mce/core.c
1606 @@ -388,10 +388,28 @@ static int msr_to_offset(u32 msr)
1607 return -1;
1608 }
1609
1610 +__visible bool ex_handler_rdmsr_fault(const struct exception_table_entry *fixup,
1611 + struct pt_regs *regs, int trapnr,
1612 + unsigned long error_code,
1613 + unsigned long fault_addr)
1614 +{
1615 + pr_emerg("MSR access error: RDMSR from 0x%x at rIP: 0x%lx (%pS)\n",
1616 + (unsigned int)regs->cx, regs->ip, (void *)regs->ip);
1617 +
1618 + show_stack_regs(regs);
1619 +
1620 + panic("MCA architectural violation!\n");
1621 +
1622 + while (true)
1623 + cpu_relax();
1624 +
1625 + return true;
1626 +}
1627 +
1628 /* MSR access wrappers used for error injection */
1629 static u64 mce_rdmsrl(u32 msr)
1630 {
1631 - u64 v;
1632 + DECLARE_ARGS(val, low, high);
1633
1634 if (__this_cpu_read(injectm.finished)) {
1635 int offset = msr_to_offset(msr);
1636 @@ -401,21 +419,43 @@ static u64 mce_rdmsrl(u32 msr)
1637 return *(u64 *)((char *)this_cpu_ptr(&injectm) + offset);
1638 }
1639
1640 - if (rdmsrl_safe(msr, &v)) {
1641 - WARN_ONCE(1, "mce: Unable to read MSR 0x%x!\n", msr);
1642 - /*
1643 - * Return zero in case the access faulted. This should
1644 - * not happen normally but can happen if the CPU does
1645 - * something weird, or if the code is buggy.
1646 - */
1647 - v = 0;
1648 - }
1649 + /*
1650 + * RDMSR on MCA MSRs should not fault. If they do, this is very much an
1651 + * architectural violation and needs to be reported to hw vendor. Panic
1652 + * the box to not allow any further progress.
1653 + */
1654 + asm volatile("1: rdmsr\n"
1655 + "2:\n"
1656 + _ASM_EXTABLE_HANDLE(1b, 2b, ex_handler_rdmsr_fault)
1657 + : EAX_EDX_RET(val, low, high) : "c" (msr));
1658
1659 - return v;
1660 +
1661 + return EAX_EDX_VAL(val, low, high);
1662 +}
1663 +
1664 +__visible bool ex_handler_wrmsr_fault(const struct exception_table_entry *fixup,
1665 + struct pt_regs *regs, int trapnr,
1666 + unsigned long error_code,
1667 + unsigned long fault_addr)
1668 +{
1669 + pr_emerg("MSR access error: WRMSR to 0x%x (tried to write 0x%08x%08x) at rIP: 0x%lx (%pS)\n",
1670 + (unsigned int)regs->cx, (unsigned int)regs->dx, (unsigned int)regs->ax,
1671 + regs->ip, (void *)regs->ip);
1672 +
1673 + show_stack_regs(regs);
1674 +
1675 + panic("MCA architectural violation!\n");
1676 +
1677 + while (true)
1678 + cpu_relax();
1679 +
1680 + return true;
1681 }
1682
1683 static void mce_wrmsrl(u32 msr, u64 v)
1684 {
1685 + u32 low, high;
1686 +
1687 if (__this_cpu_read(injectm.finished)) {
1688 int offset = msr_to_offset(msr);
1689
1690 @@ -423,7 +463,15 @@ static void mce_wrmsrl(u32 msr, u64 v)
1691 *(u64 *)((char *)this_cpu_ptr(&injectm) + offset) = v;
1692 return;
1693 }
1694 - wrmsrl(msr, v);
1695 +
1696 + low = (u32)v;
1697 + high = (u32)(v >> 32);
1698 +
1699 + /* See comment in mce_rdmsrl() */
1700 + asm volatile("1: wrmsr\n"
1701 + "2:\n"
1702 + _ASM_EXTABLE_HANDLE(1b, 2b, ex_handler_wrmsr_fault)
1703 + : : "c" (msr), "a"(low), "d" (high) : "memory");
1704 }
1705
1706 /*
1707 diff --git a/arch/x86/kernel/cpu/mce/internal.h b/arch/x86/kernel/cpu/mce/internal.h
1708 index 43031db429d24..231954fe5b4e6 100644
1709 --- a/arch/x86/kernel/cpu/mce/internal.h
1710 +++ b/arch/x86/kernel/cpu/mce/internal.h
1711 @@ -172,4 +172,14 @@ extern bool amd_filter_mce(struct mce *m);
1712 static inline bool amd_filter_mce(struct mce *m) { return false; };
1713 #endif
1714
1715 +__visible bool ex_handler_rdmsr_fault(const struct exception_table_entry *fixup,
1716 + struct pt_regs *regs, int trapnr,
1717 + unsigned long error_code,
1718 + unsigned long fault_addr);
1719 +
1720 +__visible bool ex_handler_wrmsr_fault(const struct exception_table_entry *fixup,
1721 + struct pt_regs *regs, int trapnr,
1722 + unsigned long error_code,
1723 + unsigned long fault_addr);
1724 +
1725 #endif /* __X86_MCE_INTERNAL_H__ */
1726 diff --git a/arch/x86/kernel/cpu/mce/severity.c b/arch/x86/kernel/cpu/mce/severity.c
1727 index 87bcdc6dc2f0c..0d09eb13743b4 100644
1728 --- a/arch/x86/kernel/cpu/mce/severity.c
1729 +++ b/arch/x86/kernel/cpu/mce/severity.c
1730 @@ -9,9 +9,11 @@
1731 #include <linux/seq_file.h>
1732 #include <linux/init.h>
1733 #include <linux/debugfs.h>
1734 -#include <asm/mce.h>
1735 #include <linux/uaccess.h>
1736
1737 +#include <asm/mce.h>
1738 +#include <asm/intel-family.h>
1739 +
1740 #include "internal.h"
1741
1742 /*
1743 @@ -40,9 +42,14 @@ static struct severity {
1744 unsigned char context;
1745 unsigned char excp;
1746 unsigned char covered;
1747 + unsigned char cpu_model;
1748 + unsigned char cpu_minstepping;
1749 + unsigned char bank_lo, bank_hi;
1750 char *msg;
1751 } severities[] = {
1752 #define MCESEV(s, m, c...) { .sev = MCE_ ## s ## _SEVERITY, .msg = m, ## c }
1753 +#define BANK_RANGE(l, h) .bank_lo = l, .bank_hi = h
1754 +#define MODEL_STEPPING(m, s) .cpu_model = m, .cpu_minstepping = s
1755 #define KERNEL .context = IN_KERNEL
1756 #define USER .context = IN_USER
1757 #define KERNEL_RECOV .context = IN_KERNEL_RECOV
1758 @@ -97,7 +104,6 @@ static struct severity {
1759 KEEP, "Corrected error",
1760 NOSER, BITCLR(MCI_STATUS_UC)
1761 ),
1762 -
1763 /*
1764 * known AO MCACODs reported via MCE or CMC:
1765 *
1766 @@ -113,6 +119,18 @@ static struct severity {
1767 AO, "Action optional: last level cache writeback error",
1768 SER, MASK(MCI_UC_AR|MCACOD, MCI_STATUS_UC|MCACOD_L3WB)
1769 ),
1770 + /*
1771 + * Quirk for Skylake/Cascade Lake. Patrol scrubber may be configured
1772 + * to report uncorrected errors using CMCI with a special signature.
1773 + * UC=0, MSCOD=0x0010, MCACOD=binary(000X 0000 1100 XXXX) reported
1774 + * in one of the memory controller banks.
1775 + * Set severity to "AO" for same action as normal patrol scrub error.
1776 + */
1777 + MCESEV(
1778 + AO, "Uncorrected Patrol Scrub Error",
1779 + SER, MASK(MCI_STATUS_UC|MCI_ADDR|0xffffeff0, MCI_ADDR|0x001000c0),
1780 + MODEL_STEPPING(INTEL_FAM6_SKYLAKE_X, 4), BANK_RANGE(13, 18)
1781 + ),
1782
1783 /* ignore OVER for UCNA */
1784 MCESEV(
1785 @@ -320,6 +338,12 @@ static int mce_severity_intel(struct mce *m, int tolerant, char **msg, bool is_e
1786 continue;
1787 if (s->excp && excp != s->excp)
1788 continue;
1789 + if (s->cpu_model && boot_cpu_data.x86_model != s->cpu_model)
1790 + continue;
1791 + if (s->cpu_minstepping && boot_cpu_data.x86_stepping < s->cpu_minstepping)
1792 + continue;
1793 + if (s->bank_lo && (m->bank < s->bank_lo || m->bank > s->bank_hi))
1794 + continue;
1795 if (msg)
1796 *msg = s->msg;
1797 s->covered = 1;
1798 diff --git a/arch/x86/kernel/fpu/init.c b/arch/x86/kernel/fpu/init.c
1799 index 6ce7e0a23268f..b271da0fa2193 100644
1800 --- a/arch/x86/kernel/fpu/init.c
1801 +++ b/arch/x86/kernel/fpu/init.c
1802 @@ -242,9 +242,9 @@ static void __init fpu__init_system_ctx_switch(void)
1803 */
1804 static void __init fpu__init_parse_early_param(void)
1805 {
1806 - char arg[32];
1807 + char arg[128];
1808 char *argptr = arg;
1809 - int bit;
1810 + int arglen, res, bit;
1811
1812 #ifdef CONFIG_X86_32
1813 if (cmdline_find_option_bool(boot_command_line, "no387"))
1814 @@ -267,12 +267,26 @@ static void __init fpu__init_parse_early_param(void)
1815 if (cmdline_find_option_bool(boot_command_line, "noxsaves"))
1816 setup_clear_cpu_cap(X86_FEATURE_XSAVES);
1817
1818 - if (cmdline_find_option(boot_command_line, "clearcpuid", arg,
1819 - sizeof(arg)) &&
1820 - get_option(&argptr, &bit) &&
1821 - bit >= 0 &&
1822 - bit < NCAPINTS * 32)
1823 - setup_clear_cpu_cap(bit);
1824 + arglen = cmdline_find_option(boot_command_line, "clearcpuid", arg, sizeof(arg));
1825 + if (arglen <= 0)
1826 + return;
1827 +
1828 + pr_info("Clearing CPUID bits:");
1829 + do {
1830 + res = get_option(&argptr, &bit);
1831 + if (res == 0 || res == 3)
1832 + break;
1833 +
1834 + /* If the argument was too long, the last bit may be cut off */
1835 + if (res == 1 && arglen >= sizeof(arg))
1836 + break;
1837 +
1838 + if (bit >= 0 && bit < NCAPINTS * 32) {
1839 + pr_cont(" " X86_CAP_FMT, x86_cap_flag(bit));
1840 + setup_clear_cpu_cap(bit);
1841 + }
1842 + } while (res == 2);
1843 + pr_cont("\n");
1844 }
1845
1846 /*
1847 diff --git a/arch/x86/kernel/nmi.c b/arch/x86/kernel/nmi.c
1848 index 54c21d6abd5ac..5bb001c0c771a 100644
1849 --- a/arch/x86/kernel/nmi.c
1850 +++ b/arch/x86/kernel/nmi.c
1851 @@ -106,7 +106,6 @@ fs_initcall(nmi_warning_debugfs);
1852
1853 static void nmi_check_duration(struct nmiaction *action, u64 duration)
1854 {
1855 - u64 whole_msecs = READ_ONCE(action->max_duration);
1856 int remainder_ns, decimal_msecs;
1857
1858 if (duration < nmi_longest_ns || duration < action->max_duration)
1859 @@ -114,12 +113,12 @@ static void nmi_check_duration(struct nmiaction *action, u64 duration)
1860
1861 action->max_duration = duration;
1862
1863 - remainder_ns = do_div(whole_msecs, (1000 * 1000));
1864 + remainder_ns = do_div(duration, (1000 * 1000));
1865 decimal_msecs = remainder_ns / 1000;
1866
1867 printk_ratelimited(KERN_INFO
1868 "INFO: NMI handler (%ps) took too long to run: %lld.%03d msecs\n",
1869 - action->handler, whole_msecs, decimal_msecs);
1870 + action->handler, duration, decimal_msecs);
1871 }
1872
1873 static int nmi_handle(unsigned int type, struct pt_regs *regs)
1874 diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
1875 index cc7823e7ef96c..484c32b7f79ff 100644
1876 --- a/arch/x86/kvm/emulate.c
1877 +++ b/arch/x86/kvm/emulate.c
1878 @@ -3617,7 +3617,7 @@ static int em_rdpid(struct x86_emulate_ctxt *ctxt)
1879 u64 tsc_aux = 0;
1880
1881 if (ctxt->ops->get_msr(ctxt, MSR_TSC_AUX, &tsc_aux))
1882 - return emulate_gp(ctxt, 0);
1883 + return emulate_ud(ctxt);
1884 ctxt->dst.val = tsc_aux;
1885 return X86EMUL_CONTINUE;
1886 }
1887 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
1888 index bb743f956c232..b90e8fd2f6ced 100644
1889 --- a/arch/x86/kvm/mmu.c
1890 +++ b/arch/x86/kvm/mmu.c
1891 @@ -6453,6 +6453,7 @@ static void kvm_recover_nx_lpages(struct kvm *kvm)
1892 cond_resched_lock(&kvm->mmu_lock);
1893 }
1894 }
1895 + kvm_mmu_commit_zap_page(kvm, &invalid_list);
1896
1897 spin_unlock(&kvm->mmu_lock);
1898 srcu_read_unlock(&kvm->srcu, rcu_idx);
1899 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
1900 index b58495fde2e89..c79c1a07f44b9 100644
1901 --- a/arch/x86/kvm/svm.c
1902 +++ b/arch/x86/kvm/svm.c
1903 @@ -5383,6 +5383,7 @@ static int svm_update_pi_irte(struct kvm *kvm, unsigned int host_irq,
1904 * - Tell IOMMU to use legacy mode for this interrupt.
1905 * - Retrieve ga_tag of prior interrupt remapping data.
1906 */
1907 + pi.prev_ga_tag = 0;
1908 pi.is_guest_mode = false;
1909 ret = irq_set_vcpu_affinity(host_irq, &pi);
1910
1911 diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c
1912 index a460ddf04d60c..08e1e7544f823 100644
1913 --- a/arch/x86/kvm/vmx/nested.c
1914 +++ b/arch/x86/kvm/vmx/nested.c
1915 @@ -2231,6 +2231,8 @@ static void prepare_vmcs02_rare(struct vcpu_vmx *vmx, struct vmcs12 *vmcs12)
1916 vmcs_writel(GUEST_TR_BASE, vmcs12->guest_tr_base);
1917 vmcs_writel(GUEST_GDTR_BASE, vmcs12->guest_gdtr_base);
1918 vmcs_writel(GUEST_IDTR_BASE, vmcs12->guest_idtr_base);
1919 +
1920 + vmx->segment_cache.bitmask = 0;
1921 }
1922
1923 if (!hv_evmcs || !(hv_evmcs->hv_clean_fields &
1924 @@ -3094,8 +3096,10 @@ enum nvmx_vmentry_status nested_vmx_enter_non_root_mode(struct kvm_vcpu *vcpu,
1925 prepare_vmcs02_early(vmx, vmcs12);
1926
1927 if (from_vmentry) {
1928 - if (unlikely(!nested_get_vmcs12_pages(vcpu)))
1929 + if (unlikely(!nested_get_vmcs12_pages(vcpu))) {
1930 + vmx_switch_vmcs(vcpu, &vmx->vmcs01);
1931 return NVMX_VMENTRY_KVM_INTERNAL_ERROR;
1932 + }
1933
1934 if (nested_vmx_check_vmentry_hw(vcpu)) {
1935 vmx_switch_vmcs(vcpu, &vmx->vmcs01);
1936 diff --git a/block/blk-core.c b/block/blk-core.c
1937 index 81aafb601df06..d2213220099d3 100644
1938 --- a/block/blk-core.c
1939 +++ b/block/blk-core.c
1940 @@ -743,11 +743,10 @@ static void handle_bad_sector(struct bio *bio, sector_t maxsector)
1941 {
1942 char b[BDEVNAME_SIZE];
1943
1944 - printk(KERN_INFO "attempt to access beyond end of device\n");
1945 - printk(KERN_INFO "%s: rw=%d, want=%Lu, limit=%Lu\n",
1946 - bio_devname(bio, b), bio->bi_opf,
1947 - (unsigned long long)bio_end_sector(bio),
1948 - (long long)maxsector);
1949 + pr_info_ratelimited("attempt to access beyond end of device\n"
1950 + "%s: rw=%d, want=%llu, limit=%llu\n",
1951 + bio_devname(bio, b), bio->bi_opf,
1952 + bio_end_sector(bio), maxsector);
1953 }
1954
1955 #ifdef CONFIG_FAIL_MAKE_REQUEST
1956 diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c
1957 index a09ab0c3d074d..5dafd7a8ec913 100644
1958 --- a/block/blk-mq-sysfs.c
1959 +++ b/block/blk-mq-sysfs.c
1960 @@ -36,8 +36,6 @@ static void blk_mq_hw_sysfs_release(struct kobject *kobj)
1961 struct blk_mq_hw_ctx *hctx = container_of(kobj, struct blk_mq_hw_ctx,
1962 kobj);
1963
1964 - cancel_delayed_work_sync(&hctx->run_work);
1965 -
1966 if (hctx->flags & BLK_MQ_F_BLOCKING)
1967 cleanup_srcu_struct(hctx->srcu);
1968 blk_free_flush_queue(hctx->fq);
1969 diff --git a/block/blk-sysfs.c b/block/blk-sysfs.c
1970 index 46f5198be0173..bf33570da5ac7 100644
1971 --- a/block/blk-sysfs.c
1972 +++ b/block/blk-sysfs.c
1973 @@ -891,9 +891,16 @@ static void __blk_release_queue(struct work_struct *work)
1974
1975 blk_free_queue_stats(q->stats);
1976
1977 - if (queue_is_mq(q))
1978 + if (queue_is_mq(q)) {
1979 + struct blk_mq_hw_ctx *hctx;
1980 + int i;
1981 +
1982 cancel_delayed_work_sync(&q->requeue_work);
1983
1984 + queue_for_each_hw_ctx(q, hctx, i)
1985 + cancel_delayed_work_sync(&hctx->run_work);
1986 + }
1987 +
1988 blk_exit_queue(q);
1989
1990 blk_queue_free_zone_bitmaps(q);
1991 diff --git a/crypto/algif_aead.c b/crypto/algif_aead.c
1992 index 43c6aa784858b..e62d735ed2660 100644
1993 --- a/crypto/algif_aead.c
1994 +++ b/crypto/algif_aead.c
1995 @@ -78,7 +78,7 @@ static int crypto_aead_copy_sgl(struct crypto_sync_skcipher *null_tfm,
1996 SYNC_SKCIPHER_REQUEST_ON_STACK(skreq, null_tfm);
1997
1998 skcipher_request_set_sync_tfm(skreq, null_tfm);
1999 - skcipher_request_set_callback(skreq, CRYPTO_TFM_REQ_MAY_BACKLOG,
2000 + skcipher_request_set_callback(skreq, CRYPTO_TFM_REQ_MAY_SLEEP,
2001 NULL, NULL);
2002 skcipher_request_set_crypt(skreq, src, dst, len, NULL);
2003
2004 @@ -291,19 +291,20 @@ static int _aead_recvmsg(struct socket *sock, struct msghdr *msg,
2005 areq->outlen = outlen;
2006
2007 aead_request_set_callback(&areq->cra_u.aead_req,
2008 - CRYPTO_TFM_REQ_MAY_BACKLOG,
2009 + CRYPTO_TFM_REQ_MAY_SLEEP,
2010 af_alg_async_cb, areq);
2011 err = ctx->enc ? crypto_aead_encrypt(&areq->cra_u.aead_req) :
2012 crypto_aead_decrypt(&areq->cra_u.aead_req);
2013
2014 /* AIO operation in progress */
2015 - if (err == -EINPROGRESS || err == -EBUSY)
2016 + if (err == -EINPROGRESS)
2017 return -EIOCBQUEUED;
2018
2019 sock_put(sk);
2020 } else {
2021 /* Synchronous operation */
2022 aead_request_set_callback(&areq->cra_u.aead_req,
2023 + CRYPTO_TFM_REQ_MAY_SLEEP |
2024 CRYPTO_TFM_REQ_MAY_BACKLOG,
2025 crypto_req_done, &ctx->wait);
2026 err = crypto_wait_req(ctx->enc ?
2027 diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
2028 index 81c4022285a7c..30069a92a9b22 100644
2029 --- a/crypto/algif_skcipher.c
2030 +++ b/crypto/algif_skcipher.c
2031 @@ -123,7 +123,7 @@ static int _skcipher_recvmsg(struct socket *sock, struct msghdr *msg,
2032 crypto_skcipher_decrypt(&areq->cra_u.skcipher_req);
2033
2034 /* AIO operation in progress */
2035 - if (err == -EINPROGRESS || err == -EBUSY)
2036 + if (err == -EINPROGRESS)
2037 return -EIOCBQUEUED;
2038
2039 sock_put(sk);
2040 diff --git a/drivers/android/binder.c b/drivers/android/binder.c
2041 index 110dd4c2977f5..b62b1ab6bb699 100644
2042 --- a/drivers/android/binder.c
2043 +++ b/drivers/android/binder.c
2044 @@ -227,7 +227,7 @@ static struct binder_transaction_log_entry *binder_transaction_log_add(
2045 struct binder_work {
2046 struct list_head entry;
2047
2048 - enum {
2049 + enum binder_work_type {
2050 BINDER_WORK_TRANSACTION = 1,
2051 BINDER_WORK_TRANSACTION_COMPLETE,
2052 BINDER_WORK_RETURN_ERROR,
2053 @@ -889,27 +889,6 @@ static struct binder_work *binder_dequeue_work_head_ilocked(
2054 return w;
2055 }
2056
2057 -/**
2058 - * binder_dequeue_work_head() - Dequeues the item at head of list
2059 - * @proc: binder_proc associated with list
2060 - * @list: list to dequeue head
2061 - *
2062 - * Removes the head of the list if there are items on the list
2063 - *
2064 - * Return: pointer dequeued binder_work, NULL if list was empty
2065 - */
2066 -static struct binder_work *binder_dequeue_work_head(
2067 - struct binder_proc *proc,
2068 - struct list_head *list)
2069 -{
2070 - struct binder_work *w;
2071 -
2072 - binder_inner_proc_lock(proc);
2073 - w = binder_dequeue_work_head_ilocked(list);
2074 - binder_inner_proc_unlock(proc);
2075 - return w;
2076 -}
2077 -
2078 static void
2079 binder_defer_work(struct binder_proc *proc, enum binder_deferred_state defer);
2080 static void binder_free_thread(struct binder_thread *thread);
2081 @@ -2347,8 +2326,6 @@ static void binder_transaction_buffer_release(struct binder_proc *proc,
2082 * file is done when the transaction is torn
2083 * down.
2084 */
2085 - WARN_ON(failed_at &&
2086 - proc->tsk == current->group_leader);
2087 } break;
2088 case BINDER_TYPE_PTR:
2089 /*
2090 @@ -4591,13 +4568,17 @@ static void binder_release_work(struct binder_proc *proc,
2091 struct list_head *list)
2092 {
2093 struct binder_work *w;
2094 + enum binder_work_type wtype;
2095
2096 while (1) {
2097 - w = binder_dequeue_work_head(proc, list);
2098 + binder_inner_proc_lock(proc);
2099 + w = binder_dequeue_work_head_ilocked(list);
2100 + wtype = w ? w->type : 0;
2101 + binder_inner_proc_unlock(proc);
2102 if (!w)
2103 return;
2104
2105 - switch (w->type) {
2106 + switch (wtype) {
2107 case BINDER_WORK_TRANSACTION: {
2108 struct binder_transaction *t;
2109
2110 @@ -4631,9 +4612,11 @@ static void binder_release_work(struct binder_proc *proc,
2111 kfree(death);
2112 binder_stats_deleted(BINDER_STAT_DEATH);
2113 } break;
2114 + case BINDER_WORK_NODE:
2115 + break;
2116 default:
2117 pr_err("unexpected work type, %d, not freed\n",
2118 - w->type);
2119 + wtype);
2120 break;
2121 }
2122 }
2123 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
2124 index f3f0529564da0..b326eeddaadf0 100644
2125 --- a/drivers/bluetooth/btusb.c
2126 +++ b/drivers/bluetooth/btusb.c
2127 @@ -2664,6 +2664,7 @@ static int btusb_mtk_submit_wmt_recv_urb(struct hci_dev *hdev)
2128 buf = kmalloc(size, GFP_KERNEL);
2129 if (!buf) {
2130 kfree(dr);
2131 + usb_free_urb(urb);
2132 return -ENOMEM;
2133 }
2134
2135 diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
2136 index 85a30fb9177bb..f83d67eafc9f0 100644
2137 --- a/drivers/bluetooth/hci_ldisc.c
2138 +++ b/drivers/bluetooth/hci_ldisc.c
2139 @@ -538,6 +538,7 @@ static void hci_uart_tty_close(struct tty_struct *tty)
2140 clear_bit(HCI_UART_PROTO_READY, &hu->flags);
2141 percpu_up_write(&hu->proto_lock);
2142
2143 + cancel_work_sync(&hu->init_ready);
2144 cancel_work_sync(&hu->write_work);
2145
2146 if (hdev) {
2147 diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c
2148 index ad2f26cb2622e..5b9aa73ff2b7f 100644
2149 --- a/drivers/bluetooth/hci_serdev.c
2150 +++ b/drivers/bluetooth/hci_serdev.c
2151 @@ -357,6 +357,8 @@ void hci_uart_unregister_device(struct hci_uart *hu)
2152 struct hci_dev *hdev = hu->hdev;
2153
2154 clear_bit(HCI_UART_PROTO_READY, &hu->flags);
2155 +
2156 + cancel_work_sync(&hu->init_ready);
2157 if (test_bit(HCI_UART_REGISTERED, &hu->flags))
2158 hci_unregister_dev(hdev);
2159 hci_free_dev(hdev);
2160 diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
2161 index 6b9a0593d2eb7..b6e7df9e88503 100644
2162 --- a/drivers/char/ipmi/ipmi_si_intf.c
2163 +++ b/drivers/char/ipmi/ipmi_si_intf.c
2164 @@ -1977,7 +1977,7 @@ static int try_smi_init(struct smi_info *new_smi)
2165 /* Do this early so it's available for logs. */
2166 if (!new_smi->io.dev) {
2167 pr_err("IPMI interface added with no device\n");
2168 - rv = EIO;
2169 + rv = -EIO;
2170 goto out_err;
2171 }
2172
2173 diff --git a/drivers/clk/at91/clk-main.c b/drivers/clk/at91/clk-main.c
2174 index 37c22667e8319..4313ecb2af5b2 100644
2175 --- a/drivers/clk/at91/clk-main.c
2176 +++ b/drivers/clk/at91/clk-main.c
2177 @@ -437,12 +437,17 @@ static int clk_sam9x5_main_set_parent(struct clk_hw *hw, u8 index)
2178 return -EINVAL;
2179
2180 regmap_read(regmap, AT91_CKGR_MOR, &tmp);
2181 - tmp &= ~MOR_KEY_MASK;
2182
2183 if (index && !(tmp & AT91_PMC_MOSCSEL))
2184 - regmap_write(regmap, AT91_CKGR_MOR, tmp | AT91_PMC_MOSCSEL);
2185 + tmp = AT91_PMC_MOSCSEL;
2186 else if (!index && (tmp & AT91_PMC_MOSCSEL))
2187 - regmap_write(regmap, AT91_CKGR_MOR, tmp & ~AT91_PMC_MOSCSEL);
2188 + tmp = 0;
2189 + else
2190 + return 0;
2191 +
2192 + regmap_update_bits(regmap, AT91_CKGR_MOR,
2193 + AT91_PMC_MOSCSEL | MOR_KEY_MASK,
2194 + tmp | AT91_PMC_KEY);
2195
2196 while (!clk_sam9x5_main_ready(regmap))
2197 cpu_relax();
2198 diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
2199 index 45420b514149f..c5486537b9284 100644
2200 --- a/drivers/clk/bcm/clk-bcm2835.c
2201 +++ b/drivers/clk/bcm/clk-bcm2835.c
2202 @@ -1336,8 +1336,10 @@ static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman,
2203 pll->hw.init = &init;
2204
2205 ret = devm_clk_hw_register(cprman->dev, &pll->hw);
2206 - if (ret)
2207 + if (ret) {
2208 + kfree(pll);
2209 return NULL;
2210 + }
2211 return &pll->hw;
2212 }
2213
2214 diff --git a/drivers/clk/imx/clk-imx8mq.c b/drivers/clk/imx/clk-imx8mq.c
2215 index 41fc9c63356ea..1846bd879dd71 100644
2216 --- a/drivers/clk/imx/clk-imx8mq.c
2217 +++ b/drivers/clk/imx/clk-imx8mq.c
2218 @@ -157,10 +157,10 @@ static const char * const imx8mq_qspi_sels[] = {"osc_25m", "sys1_pll_400m", "sys
2219 "audio_pll2_out", "sys1_pll_266m", "sys3_pll_out", "sys1_pll_100m", };
2220
2221 static const char * const imx8mq_usdhc1_sels[] = {"osc_25m", "sys1_pll_400m", "sys1_pll_800m", "sys2_pll_500m",
2222 - "audio_pll2_out", "sys1_pll_266m", "sys3_pll_out", "sys1_pll_100m", };
2223 + "sys3_pll_out", "sys1_pll_266m", "audio_pll2_out", "sys1_pll_100m", };
2224
2225 static const char * const imx8mq_usdhc2_sels[] = {"osc_25m", "sys1_pll_400m", "sys1_pll_800m", "sys2_pll_500m",
2226 - "audio_pll2_out", "sys1_pll_266m", "sys3_pll_out", "sys1_pll_100m", };
2227 + "sys3_pll_out", "sys1_pll_266m", "audio_pll2_out", "sys1_pll_100m", };
2228
2229 static const char * const imx8mq_i2c1_sels[] = {"osc_25m", "sys1_pll_160m", "sys2_pll_50m", "sys3_pll_out", "audio_pll1_out",
2230 "video_pll1_out", "audio_pll2_out", "sys1_pll_133m", };
2231 diff --git a/drivers/clk/keystone/sci-clk.c b/drivers/clk/keystone/sci-clk.c
2232 index 7edf8c8432b67..64ea895f1a7df 100644
2233 --- a/drivers/clk/keystone/sci-clk.c
2234 +++ b/drivers/clk/keystone/sci-clk.c
2235 @@ -522,7 +522,7 @@ static int ti_sci_scan_clocks_from_dt(struct sci_clk_provider *provider)
2236 np = of_find_node_with_property(np, *clk_name);
2237 if (!np) {
2238 clk_name++;
2239 - break;
2240 + continue;
2241 }
2242
2243 if (!of_device_is_available(np))
2244 diff --git a/drivers/clk/mediatek/clk-mt6779.c b/drivers/clk/mediatek/clk-mt6779.c
2245 index 608a9a6621a37..00920182bbe63 100644
2246 --- a/drivers/clk/mediatek/clk-mt6779.c
2247 +++ b/drivers/clk/mediatek/clk-mt6779.c
2248 @@ -919,6 +919,8 @@ static const struct mtk_gate infra_clks[] = {
2249 "pwm_sel", 19),
2250 GATE_INFRA0(CLK_INFRA_PWM, "infra_pwm",
2251 "pwm_sel", 21),
2252 + GATE_INFRA0(CLK_INFRA_UART0, "infra_uart0",
2253 + "uart_sel", 22),
2254 GATE_INFRA0(CLK_INFRA_UART1, "infra_uart1",
2255 "uart_sel", 23),
2256 GATE_INFRA0(CLK_INFRA_UART2, "infra_uart2",
2257 diff --git a/drivers/clk/meson/g12a.c b/drivers/clk/meson/g12a.c
2258 index d2760a021301d..3143e16065de6 100644
2259 --- a/drivers/clk/meson/g12a.c
2260 +++ b/drivers/clk/meson/g12a.c
2261 @@ -298,6 +298,17 @@ static struct clk_regmap g12a_fclk_div2 = {
2262 &g12a_fclk_div2_div.hw
2263 },
2264 .num_parents = 1,
2265 + /*
2266 + * Similar to fclk_div3, it seems that this clock is used by
2267 + * the resident firmware and is required by the platform to
2268 + * operate correctly.
2269 + * Until the following condition are met, we need this clock to
2270 + * be marked as critical:
2271 + * a) Mark the clock used by a firmware resource, if possible
2272 + * b) CCF has a clock hand-off mechanism to make the sure the
2273 + * clock stays on until the proper driver comes along
2274 + */
2275 + .flags = CLK_IS_CRITICAL,
2276 },
2277 };
2278
2279 diff --git a/drivers/clk/qcom/gcc-sdm660.c b/drivers/clk/qcom/gcc-sdm660.c
2280 index c6fb57cd576f5..aa5c0c6ead017 100644
2281 --- a/drivers/clk/qcom/gcc-sdm660.c
2282 +++ b/drivers/clk/qcom/gcc-sdm660.c
2283 @@ -666,7 +666,7 @@ static struct clk_rcg2 hmss_rbcpr_clk_src = {
2284 .cmd_rcgr = 0x48044,
2285 .mnd_width = 0,
2286 .hid_width = 5,
2287 - .parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
2288 + .parent_map = gcc_parent_map_xo_gpll0,
2289 .freq_tbl = ftbl_hmss_rbcpr_clk_src,
2290 .clkr.hw.init = &(struct clk_init_data){
2291 .name = "hmss_rbcpr_clk_src",
2292 diff --git a/drivers/clk/rockchip/clk-half-divider.c b/drivers/clk/rockchip/clk-half-divider.c
2293 index ba9f00dc9740c..7dd2e0b1a5866 100644
2294 --- a/drivers/clk/rockchip/clk-half-divider.c
2295 +++ b/drivers/clk/rockchip/clk-half-divider.c
2296 @@ -167,7 +167,7 @@ struct clk *rockchip_clk_register_halfdiv(const char *name,
2297 unsigned long flags,
2298 spinlock_t *lock)
2299 {
2300 - struct clk *clk;
2301 + struct clk *clk = ERR_PTR(-ENOMEM);
2302 struct clk_mux *mux = NULL;
2303 struct clk_gate *gate = NULL;
2304 struct clk_divider *div = NULL;
2305 diff --git a/drivers/cpufreq/armada-37xx-cpufreq.c b/drivers/cpufreq/armada-37xx-cpufreq.c
2306 index df1c941260d14..b4af4094309b0 100644
2307 --- a/drivers/cpufreq/armada-37xx-cpufreq.c
2308 +++ b/drivers/cpufreq/armada-37xx-cpufreq.c
2309 @@ -484,6 +484,12 @@ remove_opp:
2310 /* late_initcall, to guarantee the driver is loaded after A37xx clock driver */
2311 late_initcall(armada37xx_cpufreq_driver_init);
2312
2313 +static const struct of_device_id __maybe_unused armada37xx_cpufreq_of_match[] = {
2314 + { .compatible = "marvell,armada-3700-nb-pm" },
2315 + { },
2316 +};
2317 +MODULE_DEVICE_TABLE(of, armada37xx_cpufreq_of_match);
2318 +
2319 MODULE_AUTHOR("Gregory CLEMENT <gregory.clement@free-electrons.com>");
2320 MODULE_DESCRIPTION("Armada 37xx cpufreq driver");
2321 MODULE_LICENSE("GPL");
2322 diff --git a/drivers/cpufreq/powernv-cpufreq.c b/drivers/cpufreq/powernv-cpufreq.c
2323 index 3a2f022f6bde2..bc6ccf2c7aae0 100644
2324 --- a/drivers/cpufreq/powernv-cpufreq.c
2325 +++ b/drivers/cpufreq/powernv-cpufreq.c
2326 @@ -884,12 +884,15 @@ static int powernv_cpufreq_reboot_notifier(struct notifier_block *nb,
2327 unsigned long action, void *unused)
2328 {
2329 int cpu;
2330 - struct cpufreq_policy cpu_policy;
2331 + struct cpufreq_policy *cpu_policy;
2332
2333 rebooting = true;
2334 for_each_online_cpu(cpu) {
2335 - cpufreq_get_policy(&cpu_policy, cpu);
2336 - powernv_cpufreq_target_index(&cpu_policy, get_nominal_index());
2337 + cpu_policy = cpufreq_cpu_get(cpu);
2338 + if (!cpu_policy)
2339 + continue;
2340 + powernv_cpufreq_target_index(cpu_policy, get_nominal_index());
2341 + cpufreq_cpu_put(cpu_policy);
2342 }
2343
2344 return NOTIFY_DONE;
2345 diff --git a/drivers/crypto/caam/Kconfig b/drivers/crypto/caam/Kconfig
2346 index 137ed3df0c74d..9612da122ceba 100644
2347 --- a/drivers/crypto/caam/Kconfig
2348 +++ b/drivers/crypto/caam/Kconfig
2349 @@ -112,6 +112,7 @@ config CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI
2350 select CRYPTO_AUTHENC
2351 select CRYPTO_BLKCIPHER
2352 select CRYPTO_DES
2353 + select CRYPTO_XTS
2354 help
2355 Selecting this will use CAAM Queue Interface (QI) for sending
2356 & receiving crypto jobs to/from CAAM. This gives better performance
2357 diff --git a/drivers/crypto/caam/caamalg_qi.c b/drivers/crypto/caam/caamalg_qi.c
2358 index 8e3449670d2f0..2a605a419df8b 100644
2359 --- a/drivers/crypto/caam/caamalg_qi.c
2360 +++ b/drivers/crypto/caam/caamalg_qi.c
2361 @@ -18,6 +18,7 @@
2362 #include "qi.h"
2363 #include "jr.h"
2364 #include "caamalg_desc.h"
2365 +#include <asm/unaligned.h>
2366
2367 /*
2368 * crypto alg
2369 @@ -67,6 +68,11 @@ struct caam_ctx {
2370 struct device *qidev;
2371 spinlock_t lock; /* Protects multiple init of driver context */
2372 struct caam_drv_ctx *drv_ctx[NUM_OP];
2373 + struct crypto_skcipher *fallback;
2374 +};
2375 +
2376 +struct caam_skcipher_req_ctx {
2377 + struct skcipher_request fallback_req;
2378 };
2379
2380 static int aead_set_sh_desc(struct crypto_aead *aead)
2381 @@ -745,12 +751,17 @@ static int xts_skcipher_setkey(struct crypto_skcipher *skcipher, const u8 *key,
2382 struct caam_ctx *ctx = crypto_skcipher_ctx(skcipher);
2383 struct device *jrdev = ctx->jrdev;
2384 int ret = 0;
2385 + int err;
2386
2387 if (keylen != 2 * AES_MIN_KEY_SIZE && keylen != 2 * AES_MAX_KEY_SIZE) {
2388 dev_err(jrdev, "key size mismatch\n");
2389 goto badkey;
2390 }
2391
2392 + err = crypto_skcipher_setkey(ctx->fallback, key, keylen);
2393 + if (err)
2394 + return err;
2395 +
2396 ctx->cdata.keylen = keylen;
2397 ctx->cdata.key_virt = key;
2398 ctx->cdata.key_inline = true;
2399 @@ -1395,6 +1406,14 @@ static struct skcipher_edesc *skcipher_edesc_alloc(struct skcipher_request *req,
2400 return edesc;
2401 }
2402
2403 +static inline bool xts_skcipher_ivsize(struct skcipher_request *req)
2404 +{
2405 + struct crypto_skcipher *skcipher = crypto_skcipher_reqtfm(req);
2406 + unsigned int ivsize = crypto_skcipher_ivsize(skcipher);
2407 +
2408 + return !!get_unaligned((u64 *)(req->iv + (ivsize / 2)));
2409 +}
2410 +
2411 static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt)
2412 {
2413 struct skcipher_edesc *edesc;
2414 @@ -1405,6 +1424,21 @@ static inline int skcipher_crypt(struct skcipher_request *req, bool encrypt)
2415 if (!req->cryptlen)
2416 return 0;
2417
2418 + if (ctx->fallback && xts_skcipher_ivsize(req)) {
2419 + struct caam_skcipher_req_ctx *rctx = skcipher_request_ctx(req);
2420 +
2421 + skcipher_request_set_tfm(&rctx->fallback_req, ctx->fallback);
2422 + skcipher_request_set_callback(&rctx->fallback_req,
2423 + req->base.flags,
2424 + req->base.complete,
2425 + req->base.data);
2426 + skcipher_request_set_crypt(&rctx->fallback_req, req->src,
2427 + req->dst, req->cryptlen, req->iv);
2428 +
2429 + return encrypt ? crypto_skcipher_encrypt(&rctx->fallback_req) :
2430 + crypto_skcipher_decrypt(&rctx->fallback_req);
2431 + }
2432 +
2433 if (unlikely(caam_congested))
2434 return -EAGAIN;
2435
2436 @@ -1529,6 +1563,7 @@ static struct caam_skcipher_alg driver_algs[] = {
2437 .base = {
2438 .cra_name = "xts(aes)",
2439 .cra_driver_name = "xts-aes-caam-qi",
2440 + .cra_flags = CRYPTO_ALG_NEED_FALLBACK,
2441 .cra_blocksize = AES_BLOCK_SIZE,
2442 },
2443 .setkey = xts_skcipher_setkey,
2444 @@ -2462,9 +2497,32 @@ static int caam_cra_init(struct crypto_skcipher *tfm)
2445 struct skcipher_alg *alg = crypto_skcipher_alg(tfm);
2446 struct caam_skcipher_alg *caam_alg =
2447 container_of(alg, typeof(*caam_alg), skcipher);
2448 + struct caam_ctx *ctx = crypto_skcipher_ctx(tfm);
2449 + u32 alg_aai = caam_alg->caam.class1_alg_type & OP_ALG_AAI_MASK;
2450 + int ret = 0;
2451 +
2452 + if (alg_aai == OP_ALG_AAI_XTS) {
2453 + const char *tfm_name = crypto_tfm_alg_name(&tfm->base);
2454 + struct crypto_skcipher *fallback;
2455 +
2456 + fallback = crypto_alloc_skcipher(tfm_name, 0,
2457 + CRYPTO_ALG_NEED_FALLBACK);
2458 + if (IS_ERR(fallback)) {
2459 + dev_err(ctx->jrdev, "Failed to allocate %s fallback: %ld\n",
2460 + tfm_name, PTR_ERR(fallback));
2461 + return PTR_ERR(fallback);
2462 + }
2463
2464 - return caam_init_common(crypto_skcipher_ctx(tfm), &caam_alg->caam,
2465 - false);
2466 + ctx->fallback = fallback;
2467 + crypto_skcipher_set_reqsize(tfm, sizeof(struct caam_skcipher_req_ctx) +
2468 + crypto_skcipher_reqsize(fallback));
2469 + }
2470 +
2471 + ret = caam_init_common(ctx, &caam_alg->caam, false);
2472 + if (ret && ctx->fallback)
2473 + crypto_free_skcipher(ctx->fallback);
2474 +
2475 + return ret;
2476 }
2477
2478 static int caam_aead_init(struct crypto_aead *tfm)
2479 @@ -2490,7 +2548,11 @@ static void caam_exit_common(struct caam_ctx *ctx)
2480
2481 static void caam_cra_exit(struct crypto_skcipher *tfm)
2482 {
2483 - caam_exit_common(crypto_skcipher_ctx(tfm));
2484 + struct caam_ctx *ctx = crypto_skcipher_ctx(tfm);
2485 +
2486 + if (ctx->fallback)
2487 + crypto_free_skcipher(ctx->fallback);
2488 + caam_exit_common(ctx);
2489 }
2490
2491 static void caam_aead_exit(struct crypto_aead *tfm)
2492 @@ -2524,7 +2586,7 @@ static void caam_skcipher_alg_init(struct caam_skcipher_alg *t_alg)
2493 alg->base.cra_module = THIS_MODULE;
2494 alg->base.cra_priority = CAAM_CRA_PRIORITY;
2495 alg->base.cra_ctxsize = sizeof(struct caam_ctx);
2496 - alg->base.cra_flags = CRYPTO_ALG_ASYNC | CRYPTO_ALG_KERN_DRIVER_ONLY;
2497 + alg->base.cra_flags |= CRYPTO_ALG_ASYNC | CRYPTO_ALG_KERN_DRIVER_ONLY;
2498
2499 alg->init = caam_cra_init;
2500 alg->exit = caam_cra_exit;
2501 diff --git a/drivers/crypto/ccp/ccp-ops.c b/drivers/crypto/ccp/ccp-ops.c
2502 index 64112c736810e..7234b95241e91 100644
2503 --- a/drivers/crypto/ccp/ccp-ops.c
2504 +++ b/drivers/crypto/ccp/ccp-ops.c
2505 @@ -1746,7 +1746,7 @@ ccp_run_sha_cmd(struct ccp_cmd_queue *cmd_q, struct ccp_cmd *cmd)
2506 break;
2507 default:
2508 ret = -EINVAL;
2509 - goto e_ctx;
2510 + goto e_data;
2511 }
2512 } else {
2513 /* Stash the context */
2514 diff --git a/drivers/crypto/chelsio/chtls/chtls_cm.c b/drivers/crypto/chelsio/chtls/chtls_cm.c
2515 index dffa2aa855fdd..9b410ffafc4dd 100644
2516 --- a/drivers/crypto/chelsio/chtls/chtls_cm.c
2517 +++ b/drivers/crypto/chelsio/chtls/chtls_cm.c
2518 @@ -1053,6 +1053,9 @@ static struct sock *chtls_recv_sock(struct sock *lsk,
2519 ndev = n->dev;
2520 if (!ndev)
2521 goto free_dst;
2522 + if (is_vlan_dev(ndev))
2523 + ndev = vlan_dev_real_dev(ndev);
2524 +
2525 port_id = cxgb4_port_idx(ndev);
2526
2527 csk = chtls_sock_create(cdev);
2528 diff --git a/drivers/crypto/chelsio/chtls/chtls_io.c b/drivers/crypto/chelsio/chtls/chtls_io.c
2529 index c403d6b64e087..a5903cfc83523 100644
2530 --- a/drivers/crypto/chelsio/chtls/chtls_io.c
2531 +++ b/drivers/crypto/chelsio/chtls/chtls_io.c
2532 @@ -910,9 +910,9 @@ static int tls_header_read(struct tls_hdr *thdr, struct iov_iter *from)
2533 return (__force int)cpu_to_be16(thdr->length);
2534 }
2535
2536 -static int csk_mem_free(struct chtls_dev *cdev, struct sock *sk)
2537 +static bool csk_mem_free(struct chtls_dev *cdev, struct sock *sk)
2538 {
2539 - return (cdev->max_host_sndbuf - sk->sk_wmem_queued);
2540 + return (cdev->max_host_sndbuf - sk->sk_wmem_queued > 0);
2541 }
2542
2543 static int csk_wait_memory(struct chtls_dev *cdev,
2544 @@ -1210,6 +1210,7 @@ int chtls_sendpage(struct sock *sk, struct page *page,
2545 copied = 0;
2546 csk = rcu_dereference_sk_user_data(sk);
2547 cdev = csk->cdev;
2548 + lock_sock(sk);
2549 timeo = sock_sndtimeo(sk, flags & MSG_DONTWAIT);
2550
2551 err = sk_stream_wait_connect(sk, &timeo);
2552 diff --git a/drivers/crypto/ixp4xx_crypto.c b/drivers/crypto/ixp4xx_crypto.c
2553 index 9181523ba7607..acaa504d5a798 100644
2554 --- a/drivers/crypto/ixp4xx_crypto.c
2555 +++ b/drivers/crypto/ixp4xx_crypto.c
2556 @@ -527,7 +527,7 @@ static void release_ixp_crypto(struct device *dev)
2557
2558 if (crypt_virt) {
2559 dma_free_coherent(dev,
2560 - NPE_QLEN_TOTAL * sizeof( struct crypt_ctl),
2561 + NPE_QLEN * sizeof(struct crypt_ctl),
2562 crypt_virt, crypt_phys);
2563 }
2564 }
2565 diff --git a/drivers/crypto/mediatek/mtk-platform.c b/drivers/crypto/mediatek/mtk-platform.c
2566 index 7e3ad085b5bdd..efce3a83b35a8 100644
2567 --- a/drivers/crypto/mediatek/mtk-platform.c
2568 +++ b/drivers/crypto/mediatek/mtk-platform.c
2569 @@ -442,7 +442,7 @@ static void mtk_desc_dma_free(struct mtk_cryp *cryp)
2570 static int mtk_desc_ring_alloc(struct mtk_cryp *cryp)
2571 {
2572 struct mtk_ring **ring = cryp->ring;
2573 - int i, err = ENOMEM;
2574 + int i;
2575
2576 for (i = 0; i < MTK_RING_MAX; i++) {
2577 ring[i] = kzalloc(sizeof(**ring), GFP_KERNEL);
2578 @@ -469,14 +469,14 @@ static int mtk_desc_ring_alloc(struct mtk_cryp *cryp)
2579 return 0;
2580
2581 err_cleanup:
2582 - for (; i--; ) {
2583 + do {
2584 dma_free_coherent(cryp->dev, MTK_DESC_RING_SZ,
2585 ring[i]->res_base, ring[i]->res_dma);
2586 dma_free_coherent(cryp->dev, MTK_DESC_RING_SZ,
2587 ring[i]->cmd_base, ring[i]->cmd_dma);
2588 kfree(ring[i]);
2589 - }
2590 - return err;
2591 + } while (i--);
2592 + return -ENOMEM;
2593 }
2594
2595 static int mtk_crypto_probe(struct platform_device *pdev)
2596 diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
2597 index aba5db3c0588f..d7c0c982ba433 100644
2598 --- a/drivers/crypto/omap-sham.c
2599 +++ b/drivers/crypto/omap-sham.c
2600 @@ -453,6 +453,9 @@ static void omap_sham_write_ctrl_omap4(struct omap_sham_dev *dd, size_t length,
2601 struct omap_sham_reqctx *ctx = ahash_request_ctx(dd->req);
2602 u32 val, mask;
2603
2604 + if (likely(ctx->digcnt))
2605 + omap_sham_write(dd, SHA_REG_DIGCNT(dd), ctx->digcnt);
2606 +
2607 /*
2608 * Setting ALGO_CONST only for the first iteration and
2609 * CLOSE_HASH only for the last one. Note that flags mode bits
2610 diff --git a/drivers/crypto/picoxcell_crypto.c b/drivers/crypto/picoxcell_crypto.c
2611 index 2680e1525db58..13ecbb0e58528 100644
2612 --- a/drivers/crypto/picoxcell_crypto.c
2613 +++ b/drivers/crypto/picoxcell_crypto.c
2614 @@ -1697,11 +1697,6 @@ static int spacc_probe(struct platform_device *pdev)
2615 goto err_clk_put;
2616 }
2617
2618 - ret = device_create_file(&pdev->dev, &dev_attr_stat_irq_thresh);
2619 - if (ret)
2620 - goto err_clk_disable;
2621 -
2622 -
2623 /*
2624 * Use an IRQ threshold of 50% as a default. This seems to be a
2625 * reasonable trade off of latency against throughput but can be
2626 @@ -1709,6 +1704,10 @@ static int spacc_probe(struct platform_device *pdev)
2627 */
2628 engine->stat_irq_thresh = (engine->fifo_sz / 2);
2629
2630 + ret = device_create_file(&pdev->dev, &dev_attr_stat_irq_thresh);
2631 + if (ret)
2632 + goto err_clk_disable;
2633 +
2634 /*
2635 * Configure the interrupts. We only use the STAT_CNT interrupt as we
2636 * only submit a new packet for processing when we complete another in
2637 diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
2638 index 62d9825a49e9d..238936e2dfe2d 100644
2639 --- a/drivers/dma/dmatest.c
2640 +++ b/drivers/dma/dmatest.c
2641 @@ -1218,15 +1218,14 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp)
2642 add_threaded_test(info);
2643
2644 /* Check if channel was added successfully */
2645 - dtc = list_last_entry(&info->channels, struct dmatest_chan, node);
2646 -
2647 - if (dtc->chan) {
2648 + if (!list_empty(&info->channels)) {
2649 /*
2650 * if new channel was not successfully added, revert the
2651 * "test_channel" string to the name of the last successfully
2652 * added channel. exception for when users issues empty string
2653 * to channel parameter.
2654 */
2655 + dtc = list_last_entry(&info->channels, struct dmatest_chan, node);
2656 if ((strcmp(dma_chan_name(dtc->chan), strim(test_channel)) != 0)
2657 && (strcmp("", strim(test_channel)) != 0)) {
2658 ret = -EINVAL;
2659 diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c
2660 index a1b56f52db2f2..5e7fdc0b6e3db 100644
2661 --- a/drivers/dma/dw/core.c
2662 +++ b/drivers/dma/dw/core.c
2663 @@ -772,6 +772,10 @@ bool dw_dma_filter(struct dma_chan *chan, void *param)
2664 if (dws->dma_dev != chan->device->dev)
2665 return false;
2666
2667 + /* permit channels in accordance with the channels mask */
2668 + if (dws->channels && !(dws->channels & dwc->mask))
2669 + return false;
2670 +
2671 /* We have to copy data since dws can be temporary storage */
2672 memcpy(&dwc->dws, dws, sizeof(struct dw_dma_slave));
2673
2674 diff --git a/drivers/dma/dw/dw.c b/drivers/dma/dw/dw.c
2675 index 7a085b3c1854c..d9810980920a1 100644
2676 --- a/drivers/dma/dw/dw.c
2677 +++ b/drivers/dma/dw/dw.c
2678 @@ -14,7 +14,7 @@
2679 static void dw_dma_initialize_chan(struct dw_dma_chan *dwc)
2680 {
2681 struct dw_dma *dw = to_dw_dma(dwc->chan.device);
2682 - u32 cfghi = DWC_CFGH_FIFO_MODE;
2683 + u32 cfghi = is_slave_direction(dwc->direction) ? 0 : DWC_CFGH_FIFO_MODE;
2684 u32 cfglo = DWC_CFGL_CH_PRIOR(dwc->priority);
2685 bool hs_polarity = dwc->dws.hs_polarity;
2686
2687 diff --git a/drivers/dma/dw/of.c b/drivers/dma/dw/of.c
2688 index 9e27831dee324..43e975fb67142 100644
2689 --- a/drivers/dma/dw/of.c
2690 +++ b/drivers/dma/dw/of.c
2691 @@ -22,18 +22,21 @@ static struct dma_chan *dw_dma_of_xlate(struct of_phandle_args *dma_spec,
2692 };
2693 dma_cap_mask_t cap;
2694
2695 - if (dma_spec->args_count != 3)
2696 + if (dma_spec->args_count < 3 || dma_spec->args_count > 4)
2697 return NULL;
2698
2699 slave.src_id = dma_spec->args[0];
2700 slave.dst_id = dma_spec->args[0];
2701 slave.m_master = dma_spec->args[1];
2702 slave.p_master = dma_spec->args[2];
2703 + if (dma_spec->args_count >= 4)
2704 + slave.channels = dma_spec->args[3];
2705
2706 if (WARN_ON(slave.src_id >= DW_DMA_MAX_NR_REQUESTS ||
2707 slave.dst_id >= DW_DMA_MAX_NR_REQUESTS ||
2708 slave.m_master >= dw->pdata->nr_masters ||
2709 - slave.p_master >= dw->pdata->nr_masters))
2710 + slave.p_master >= dw->pdata->nr_masters ||
2711 + slave.channels >= BIT(dw->pdata->nr_channels)))
2712 return NULL;
2713
2714 dma_cap_zero(cap);
2715 diff --git a/drivers/edac/aspeed_edac.c b/drivers/edac/aspeed_edac.c
2716 index 5634437bb39d2..66669f9d690be 100644
2717 --- a/drivers/edac/aspeed_edac.c
2718 +++ b/drivers/edac/aspeed_edac.c
2719 @@ -209,8 +209,8 @@ static int config_irq(void *ctx, struct platform_device *pdev)
2720 /* register interrupt handler */
2721 irq = platform_get_irq(pdev, 0);
2722 dev_dbg(&pdev->dev, "got irq %d\n", irq);
2723 - if (!irq)
2724 - return -ENODEV;
2725 + if (irq < 0)
2726 + return irq;
2727
2728 rc = devm_request_irq(&pdev->dev, irq, mcr_isr, IRQF_TRIGGER_HIGH,
2729 DRV_NAME, ctx);
2730 diff --git a/drivers/edac/i5100_edac.c b/drivers/edac/i5100_edac.c
2731 index 251f2b692785d..0c72daa519ffa 100644
2732 --- a/drivers/edac/i5100_edac.c
2733 +++ b/drivers/edac/i5100_edac.c
2734 @@ -1074,16 +1074,15 @@ static int i5100_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
2735 PCI_DEVICE_ID_INTEL_5100_19, 0);
2736 if (!einj) {
2737 ret = -ENODEV;
2738 - goto bail_einj;
2739 + goto bail_mc_free;
2740 }
2741
2742 rc = pci_enable_device(einj);
2743 if (rc < 0) {
2744 ret = rc;
2745 - goto bail_disable_einj;
2746 + goto bail_einj;
2747 }
2748
2749 -
2750 mci->pdev = &pdev->dev;
2751
2752 priv = mci->pvt_info;
2753 @@ -1149,14 +1148,14 @@ static int i5100_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
2754 bail_scrub:
2755 priv->scrub_enable = 0;
2756 cancel_delayed_work_sync(&(priv->i5100_scrubbing));
2757 - edac_mc_free(mci);
2758 -
2759 -bail_disable_einj:
2760 pci_disable_device(einj);
2761
2762 bail_einj:
2763 pci_dev_put(einj);
2764
2765 +bail_mc_free:
2766 + edac_mc_free(mci);
2767 +
2768 bail_disable_ch1:
2769 pci_disable_device(ch1mm);
2770
2771 diff --git a/drivers/edac/ti_edac.c b/drivers/edac/ti_edac.c
2772 index 6ac26d1b929f0..3247689467435 100644
2773 --- a/drivers/edac/ti_edac.c
2774 +++ b/drivers/edac/ti_edac.c
2775 @@ -278,7 +278,8 @@ static int ti_edac_probe(struct platform_device *pdev)
2776
2777 /* add EMIF ECC error handler */
2778 error_irq = platform_get_irq(pdev, 0);
2779 - if (!error_irq) {
2780 + if (error_irq < 0) {
2781 + ret = error_irq;
2782 edac_printk(KERN_ERR, EDAC_MOD_NAME,
2783 "EMIF irq number not defined.\n");
2784 goto err;
2785 diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
2786 index 2384aa018993d..7c58085031732 100644
2787 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
2788 +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
2789 @@ -6984,8 +6984,7 @@ static int dm_update_plane_state(struct dc *dc,
2790 dm_old_plane_state->dc_state,
2791 dm_state->context)) {
2792
2793 - ret = EINVAL;
2794 - return ret;
2795 + return -EINVAL;
2796 }
2797
2798
2799 diff --git a/drivers/gpu/drm/drm_debugfs_crc.c b/drivers/gpu/drm/drm_debugfs_crc.c
2800 index 6a626c82e264b..f6598c5a9a879 100644
2801 --- a/drivers/gpu/drm/drm_debugfs_crc.c
2802 +++ b/drivers/gpu/drm/drm_debugfs_crc.c
2803 @@ -144,8 +144,10 @@ static ssize_t crc_control_write(struct file *file, const char __user *ubuf,
2804 source[len - 1] = '\0';
2805
2806 ret = crtc->funcs->verify_crc_source(crtc, source, &values_cnt);
2807 - if (ret)
2808 + if (ret) {
2809 + kfree(source);
2810 return ret;
2811 + }
2812
2813 spin_lock_irq(&crc->lock);
2814
2815 diff --git a/drivers/gpu/drm/gma500/cdv_intel_dp.c b/drivers/gpu/drm/gma500/cdv_intel_dp.c
2816 index 570b59520fd13..2ff4b35151bf8 100644
2817 --- a/drivers/gpu/drm/gma500/cdv_intel_dp.c
2818 +++ b/drivers/gpu/drm/gma500/cdv_intel_dp.c
2819 @@ -2120,7 +2120,7 @@ cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev
2820 intel_dp->dpcd,
2821 sizeof(intel_dp->dpcd));
2822 cdv_intel_edp_panel_vdd_off(gma_encoder);
2823 - if (ret == 0) {
2824 + if (ret <= 0) {
2825 /* if this fails, presume the device is a ghost */
2826 DRM_INFO("failed to retrieve link info, disabling eDP\n");
2827 cdv_intel_dp_encoder_destroy(encoder);
2828 diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c
2829 index 691c1a277d91b..dfcbb2b7cdda3 100644
2830 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c
2831 +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c
2832 @@ -834,7 +834,7 @@ static void a6xx_get_indexed_registers(struct msm_gpu *gpu,
2833 int i;
2834
2835 a6xx_state->indexed_regs = state_kcalloc(a6xx_state, count,
2836 - sizeof(a6xx_state->indexed_regs));
2837 + sizeof(*a6xx_state->indexed_regs));
2838 if (!a6xx_state->indexed_regs)
2839 return;
2840
2841 diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
2842 index 36c85c05b7cf7..4aed5e9a84a45 100644
2843 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
2844 +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
2845 @@ -819,7 +819,7 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc,
2846 struct drm_plane *plane;
2847 struct drm_display_mode *mode;
2848
2849 - int cnt = 0, rc = 0, mixer_width, i, z_pos;
2850 + int cnt = 0, rc = 0, mixer_width = 0, i, z_pos;
2851
2852 struct dpu_multirect_plane_states multirect_plane[DPU_STAGE_MAX * 2];
2853 int multirect_count = 0;
2854 @@ -852,9 +852,11 @@ static int dpu_crtc_atomic_check(struct drm_crtc *crtc,
2855
2856 memset(pipe_staged, 0, sizeof(pipe_staged));
2857
2858 - mixer_width = mode->hdisplay / cstate->num_mixers;
2859 + if (cstate->num_mixers) {
2860 + mixer_width = mode->hdisplay / cstate->num_mixers;
2861
2862 - _dpu_crtc_setup_lm_bounds(crtc, state);
2863 + _dpu_crtc_setup_lm_bounds(crtc, state);
2864 + }
2865
2866 crtc_rect.x2 = mode->hdisplay;
2867 crtc_rect.y2 = mode->vdisplay;
2868 diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
2869 index e8506335cd155..1694a7deb9133 100644
2870 --- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
2871 +++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
2872 @@ -26,6 +26,7 @@
2873 #include <drm/drm_drv.h>
2874 #include <drm/drm_fb_cma_helper.h>
2875 #include <drm/drm_fb_helper.h>
2876 +#include <drm/drm_fourcc.h>
2877 #include <drm/drm_gem_cma_helper.h>
2878 #include <drm/drm_gem_framebuffer_helper.h>
2879 #include <drm/drm_irq.h>
2880 @@ -87,8 +88,26 @@ void mxsfb_disable_axi_clk(struct mxsfb_drm_private *mxsfb)
2881 clk_disable_unprepare(mxsfb->clk_axi);
2882 }
2883
2884 +static struct drm_framebuffer *
2885 +mxsfb_fb_create(struct drm_device *dev, struct drm_file *file_priv,
2886 + const struct drm_mode_fb_cmd2 *mode_cmd)
2887 +{
2888 + const struct drm_format_info *info;
2889 +
2890 + info = drm_get_format_info(dev, mode_cmd);
2891 + if (!info)
2892 + return ERR_PTR(-EINVAL);
2893 +
2894 + if (mode_cmd->width * info->cpp[0] != mode_cmd->pitches[0]) {
2895 + dev_dbg(dev->dev, "Invalid pitch: fb width must match pitch\n");
2896 + return ERR_PTR(-EINVAL);
2897 + }
2898 +
2899 + return drm_gem_fb_create(dev, file_priv, mode_cmd);
2900 +}
2901 +
2902 static const struct drm_mode_config_funcs mxsfb_mode_config_funcs = {
2903 - .fb_create = drm_gem_fb_create,
2904 + .fb_create = mxsfb_fb_create,
2905 .atomic_check = drm_atomic_helper_check,
2906 .atomic_commit = drm_atomic_helper_commit,
2907 };
2908 diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
2909 index 6d9656323a3f4..f0ea782df836d 100644
2910 --- a/drivers/gpu/drm/panel/panel-simple.c
2911 +++ b/drivers/gpu/drm/panel/panel-simple.c
2912 @@ -2382,12 +2382,12 @@ static const struct drm_display_mode ortustech_com43h4m85ulc_mode = {
2913 static const struct panel_desc ortustech_com43h4m85ulc = {
2914 .modes = &ortustech_com43h4m85ulc_mode,
2915 .num_modes = 1,
2916 - .bpc = 8,
2917 + .bpc = 6,
2918 .size = {
2919 .width = 56,
2920 .height = 93,
2921 },
2922 - .bus_format = MEDIA_BUS_FMT_RGB888_1X24,
2923 + .bus_format = MEDIA_BUS_FMT_RGB666_1X18,
2924 .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE,
2925 };
2926
2927 diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c b/drivers/gpu/drm/panfrost/panfrost_gpu.c
2928 index 8822ec13a0d61..0d39a201c7591 100644
2929 --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c
2930 +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c
2931 @@ -75,6 +75,17 @@ int panfrost_gpu_soft_reset(struct panfrost_device *pfdev)
2932 return 0;
2933 }
2934
2935 +void panfrost_gpu_amlogic_quirk(struct panfrost_device *pfdev)
2936 +{
2937 + /*
2938 + * The Amlogic integrated Mali-T820, Mali-G31 & Mali-G52 needs
2939 + * these undocumented bits in GPU_PWR_OVERRIDE1 to be set in order
2940 + * to operate correctly.
2941 + */
2942 + gpu_write(pfdev, GPU_PWR_KEY, GPU_PWR_KEY_UNLOCK);
2943 + gpu_write(pfdev, GPU_PWR_OVERRIDE1, 0xfff | (0x20 << 16));
2944 +}
2945 +
2946 static void panfrost_gpu_init_quirks(struct panfrost_device *pfdev)
2947 {
2948 u32 quirks = 0;
2949 @@ -304,6 +315,8 @@ void panfrost_gpu_power_on(struct panfrost_device *pfdev)
2950 int ret;
2951 u32 val;
2952
2953 + panfrost_gpu_init_quirks(pfdev);
2954 +
2955 /* Just turn on everything for now */
2956 gpu_write(pfdev, L2_PWRON_LO, pfdev->features.l2_present);
2957 ret = readl_relaxed_poll_timeout(pfdev->iomem + L2_READY_LO,
2958 @@ -357,7 +370,6 @@ int panfrost_gpu_init(struct panfrost_device *pfdev)
2959 return err;
2960 }
2961
2962 - panfrost_gpu_init_quirks(pfdev);
2963 panfrost_gpu_power_on(pfdev);
2964
2965 return 0;
2966 diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.h b/drivers/gpu/drm/panfrost/panfrost_gpu.h
2967 index 4112412087b27..468c51e7e46db 100644
2968 --- a/drivers/gpu/drm/panfrost/panfrost_gpu.h
2969 +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.h
2970 @@ -16,4 +16,6 @@ int panfrost_gpu_soft_reset(struct panfrost_device *pfdev);
2971 void panfrost_gpu_power_on(struct panfrost_device *pfdev);
2972 void panfrost_gpu_power_off(struct panfrost_device *pfdev);
2973
2974 +void panfrost_gpu_amlogic_quirk(struct panfrost_device *pfdev);
2975 +
2976 #endif
2977 diff --git a/drivers/gpu/drm/panfrost/panfrost_regs.h b/drivers/gpu/drm/panfrost/panfrost_regs.h
2978 index ea38ac60581c6..eddaa62ad8b0e 100644
2979 --- a/drivers/gpu/drm/panfrost/panfrost_regs.h
2980 +++ b/drivers/gpu/drm/panfrost/panfrost_regs.h
2981 @@ -51,6 +51,10 @@
2982 #define GPU_STATUS 0x34
2983 #define GPU_STATUS_PRFCNT_ACTIVE BIT(2)
2984 #define GPU_LATEST_FLUSH_ID 0x38
2985 +#define GPU_PWR_KEY 0x50 /* (WO) Power manager key register */
2986 +#define GPU_PWR_KEY_UNLOCK 0x2968A819
2987 +#define GPU_PWR_OVERRIDE0 0x54 /* (RW) Power manager override settings */
2988 +#define GPU_PWR_OVERRIDE1 0x58 /* (RW) Power manager override settings */
2989 #define GPU_FAULT_STATUS 0x3C
2990 #define GPU_FAULT_ADDRESS_LO 0x40
2991 #define GPU_FAULT_ADDRESS_HI 0x44
2992 diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c
2993 index c190702fab726..6dcc05ab31eba 100644
2994 --- a/drivers/gpu/drm/virtio/virtgpu_kms.c
2995 +++ b/drivers/gpu/drm/virtio/virtgpu_kms.c
2996 @@ -96,8 +96,10 @@ static void virtio_gpu_get_capsets(struct virtio_gpu_device *vgdev,
2997 vgdev->capsets[i].id > 0, 5 * HZ);
2998 if (ret == 0) {
2999 DRM_ERROR("timed out waiting for cap set %d\n", i);
3000 + spin_lock(&vgdev->display_info_lock);
3001 kfree(vgdev->capsets);
3002 vgdev->capsets = NULL;
3003 + spin_unlock(&vgdev->display_info_lock);
3004 return;
3005 }
3006 DRM_INFO("cap set %d: id %d, max-version %d, max-size %d\n",
3007 diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
3008 index 7ac20490e1b4c..92022a83bbd5e 100644
3009 --- a/drivers/gpu/drm/virtio/virtgpu_vq.c
3010 +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
3011 @@ -572,9 +572,13 @@ static void virtio_gpu_cmd_get_capset_info_cb(struct virtio_gpu_device *vgdev,
3012 int i = le32_to_cpu(cmd->capset_index);
3013
3014 spin_lock(&vgdev->display_info_lock);
3015 - vgdev->capsets[i].id = le32_to_cpu(resp->capset_id);
3016 - vgdev->capsets[i].max_version = le32_to_cpu(resp->capset_max_version);
3017 - vgdev->capsets[i].max_size = le32_to_cpu(resp->capset_max_size);
3018 + if (vgdev->capsets) {
3019 + vgdev->capsets[i].id = le32_to_cpu(resp->capset_id);
3020 + vgdev->capsets[i].max_version = le32_to_cpu(resp->capset_max_version);
3021 + vgdev->capsets[i].max_size = le32_to_cpu(resp->capset_max_size);
3022 + } else {
3023 + DRM_ERROR("invalid capset memory.");
3024 + }
3025 spin_unlock(&vgdev->display_info_lock);
3026 wake_up(&vgdev->resp_wq);
3027 }
3028 diff --git a/drivers/gpu/drm/vkms/vkms_composer.c b/drivers/gpu/drm/vkms/vkms_composer.c
3029 index d5585695c64d1..45d6ebbdbdb22 100644
3030 --- a/drivers/gpu/drm/vkms/vkms_composer.c
3031 +++ b/drivers/gpu/drm/vkms/vkms_composer.c
3032 @@ -33,7 +33,7 @@ static uint32_t compute_crc(void *vaddr_out, struct vkms_composer *composer)
3033 + (i * composer->pitch)
3034 + (j * composer->cpp);
3035 /* XRGB format ignores Alpha channel */
3036 - memset(vaddr_out + src_offset + 24, 0, 8);
3037 + bitmap_clear(vaddr_out + src_offset, 24, 8);
3038 crc = crc32_le(crc, vaddr_out + src_offset,
3039 sizeof(u32));
3040 }
3041 diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
3042 index e03a4d794240c..7363d0b488bd8 100644
3043 --- a/drivers/hid/hid-ids.h
3044 +++ b/drivers/hid/hid-ids.h
3045 @@ -1119,6 +1119,7 @@
3046 #define USB_DEVICE_ID_SYNAPTICS_DELL_K12A 0x2819
3047 #define USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_012 0x2968
3048 #define USB_DEVICE_ID_SYNAPTICS_TP_V103 0x5710
3049 +#define USB_DEVICE_ID_SYNAPTICS_ACER_ONE_S1003 0x73f5
3050 #define USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5 0x81a7
3051
3052 #define USB_VENDOR_ID_TEXAS_INSTRUMENTS 0x2047
3053 diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
3054 index e3d475f4baf66..b2bff932c524f 100644
3055 --- a/drivers/hid/hid-input.c
3056 +++ b/drivers/hid/hid-input.c
3057 @@ -797,7 +797,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
3058 case 0x3b: /* Battery Strength */
3059 hidinput_setup_battery(device, HID_INPUT_REPORT, field);
3060 usage->type = EV_PWR;
3061 - goto ignore;
3062 + return;
3063
3064 case 0x3c: /* Invert */
3065 map_key_clear(BTN_TOOL_RUBBER);
3066 @@ -1059,7 +1059,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
3067 case HID_DC_BATTERYSTRENGTH:
3068 hidinput_setup_battery(device, HID_INPUT_REPORT, field);
3069 usage->type = EV_PWR;
3070 - goto ignore;
3071 + return;
3072 }
3073 goto unknown;
3074
3075 diff --git a/drivers/hid/hid-ite.c b/drivers/hid/hid-ite.c
3076 index 6c55682c59740..044a93f3c1178 100644
3077 --- a/drivers/hid/hid-ite.c
3078 +++ b/drivers/hid/hid-ite.c
3079 @@ -44,6 +44,10 @@ static const struct hid_device_id ite_devices[] = {
3080 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
3081 USB_VENDOR_ID_SYNAPTICS,
3082 USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_012) },
3083 + /* ITE8910 USB kbd ctlr, with Synaptics touchpad connected to it. */
3084 + { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
3085 + USB_VENDOR_ID_SYNAPTICS,
3086 + USB_DEVICE_ID_SYNAPTICS_ACER_ONE_S1003) },
3087 { }
3088 };
3089 MODULE_DEVICE_TABLE(hid, ite_devices);
3090 diff --git a/drivers/hid/hid-roccat-kone.c b/drivers/hid/hid-roccat-kone.c
3091 index 1a6e600197d0b..509b9bb1362cb 100644
3092 --- a/drivers/hid/hid-roccat-kone.c
3093 +++ b/drivers/hid/hid-roccat-kone.c
3094 @@ -294,31 +294,40 @@ static ssize_t kone_sysfs_write_settings(struct file *fp, struct kobject *kobj,
3095 struct kone_device *kone = hid_get_drvdata(dev_get_drvdata(dev));
3096 struct usb_device *usb_dev = interface_to_usbdev(to_usb_interface(dev));
3097 int retval = 0, difference, old_profile;
3098 + struct kone_settings *settings = (struct kone_settings *)buf;
3099
3100 /* I need to get my data in one piece */
3101 if (off != 0 || count != sizeof(struct kone_settings))
3102 return -EINVAL;
3103
3104 mutex_lock(&kone->kone_lock);
3105 - difference = memcmp(buf, &kone->settings, sizeof(struct kone_settings));
3106 + difference = memcmp(settings, &kone->settings,
3107 + sizeof(struct kone_settings));
3108 if (difference) {
3109 - retval = kone_set_settings(usb_dev,
3110 - (struct kone_settings const *)buf);
3111 - if (retval) {
3112 - mutex_unlock(&kone->kone_lock);
3113 - return retval;
3114 + if (settings->startup_profile < 1 ||
3115 + settings->startup_profile > 5) {
3116 + retval = -EINVAL;
3117 + goto unlock;
3118 }
3119
3120 + retval = kone_set_settings(usb_dev, settings);
3121 + if (retval)
3122 + goto unlock;
3123 +
3124 old_profile = kone->settings.startup_profile;
3125 - memcpy(&kone->settings, buf, sizeof(struct kone_settings));
3126 + memcpy(&kone->settings, settings, sizeof(struct kone_settings));
3127
3128 kone_profile_activated(kone, kone->settings.startup_profile);
3129
3130 if (kone->settings.startup_profile != old_profile)
3131 kone_profile_report(kone, kone->settings.startup_profile);
3132 }
3133 +unlock:
3134 mutex_unlock(&kone->kone_lock);
3135
3136 + if (retval)
3137 + return retval;
3138 +
3139 return sizeof(struct kone_settings);
3140 }
3141 static BIN_ATTR(settings, 0660, kone_sysfs_read_settings,
3142 diff --git a/drivers/hwmon/pmbus/max34440.c b/drivers/hwmon/pmbus/max34440.c
3143 index 5c63a66007293..e22617def70bf 100644
3144 --- a/drivers/hwmon/pmbus/max34440.c
3145 +++ b/drivers/hwmon/pmbus/max34440.c
3146 @@ -387,7 +387,6 @@ static struct pmbus_driver_info max34440_info[] = {
3147 .func[18] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP,
3148 .func[19] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP,
3149 .func[20] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP,
3150 - .read_byte_data = max34440_read_byte_data,
3151 .read_word_data = max34440_read_word_data,
3152 .write_word_data = max34440_write_word_data,
3153 },
3154 @@ -418,7 +417,6 @@ static struct pmbus_driver_info max34440_info[] = {
3155 .func[15] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP,
3156 .func[16] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP,
3157 .func[17] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP,
3158 - .read_byte_data = max34440_read_byte_data,
3159 .read_word_data = max34440_read_word_data,
3160 .write_word_data = max34440_write_word_data,
3161 },
3162 @@ -454,7 +452,6 @@ static struct pmbus_driver_info max34440_info[] = {
3163 .func[19] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP,
3164 .func[20] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP,
3165 .func[21] = PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP,
3166 - .read_byte_data = max34440_read_byte_data,
3167 .read_word_data = max34440_read_word_data,
3168 .write_word_data = max34440_write_word_data,
3169 },
3170 diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c b/drivers/hwtracing/coresight/coresight-etm-perf.c
3171 index 84f1dcb698272..9b0c5d719232f 100644
3172 --- a/drivers/hwtracing/coresight/coresight-etm-perf.c
3173 +++ b/drivers/hwtracing/coresight/coresight-etm-perf.c
3174 @@ -126,10 +126,10 @@ static void free_sink_buffer(struct etm_event_data *event_data)
3175 cpumask_t *mask = &event_data->mask;
3176 struct coresight_device *sink;
3177
3178 - if (WARN_ON(cpumask_empty(mask)))
3179 + if (!event_data->snk_config)
3180 return;
3181
3182 - if (!event_data->snk_config)
3183 + if (WARN_ON(cpumask_empty(mask)))
3184 return;
3185
3186 cpu = cpumask_first(mask);
3187 @@ -310,6 +310,16 @@ static void etm_event_start(struct perf_event *event, int flags)
3188 if (!event_data)
3189 goto fail;
3190
3191 + /*
3192 + * Check if this ETM is allowed to trace, as decided
3193 + * at etm_setup_aux(). This could be due to an unreachable
3194 + * sink from this ETM. We can't do much in this case if
3195 + * the sink was specified or hinted to the driver. For
3196 + * now, simply don't record anything on this ETM.
3197 + */
3198 + if (!cpumask_test_cpu(cpu, &event_data->mask))
3199 + goto fail_end_stop;
3200 +
3201 path = etm_event_cpu_path(event_data, cpu);
3202 /* We need a sink, no need to continue without one */
3203 sink = coresight_get_sink(path);
3204 diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
3205 index 146ce40d8e0aa..2d08a8719506c 100644
3206 --- a/drivers/i2c/busses/Kconfig
3207 +++ b/drivers/i2c/busses/Kconfig
3208 @@ -1162,6 +1162,7 @@ config I2C_RCAR
3209 tristate "Renesas R-Car I2C Controller"
3210 depends on ARCH_RENESAS || COMPILE_TEST
3211 select I2C_SLAVE
3212 + select RESET_CONTROLLER if ARCH_RCAR_GEN3
3213 help
3214 If you say yes to this option, support will be included for the
3215 R-Car I2C controller.
3216 diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c
3217 index ce70b5288472c..c70983780ae79 100644
3218 --- a/drivers/i2c/i2c-core-acpi.c
3219 +++ b/drivers/i2c/i2c-core-acpi.c
3220 @@ -264,6 +264,7 @@ static acpi_status i2c_acpi_add_device(acpi_handle handle, u32 level,
3221 void i2c_acpi_register_devices(struct i2c_adapter *adap)
3222 {
3223 acpi_status status;
3224 + acpi_handle handle;
3225
3226 if (!has_acpi_companion(&adap->dev))
3227 return;
3228 @@ -274,6 +275,15 @@ void i2c_acpi_register_devices(struct i2c_adapter *adap)
3229 adap, NULL);
3230 if (ACPI_FAILURE(status))
3231 dev_warn(&adap->dev, "failed to enumerate I2C slaves\n");
3232 +
3233 + if (!adap->dev.parent)
3234 + return;
3235 +
3236 + handle = ACPI_HANDLE(adap->dev.parent);
3237 + if (!handle)
3238 + return;
3239 +
3240 + acpi_walk_dep_device_list(handle);
3241 }
3242
3243 const struct acpi_device_id *
3244 @@ -737,7 +747,6 @@ int i2c_acpi_install_space_handler(struct i2c_adapter *adapter)
3245 return -ENOMEM;
3246 }
3247
3248 - acpi_walk_dep_device_list(handle);
3249 return 0;
3250 }
3251
3252 diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
3253 index 5c051dba32a51..6cc71c90f85ea 100644
3254 --- a/drivers/i3c/master.c
3255 +++ b/drivers/i3c/master.c
3256 @@ -1760,6 +1760,21 @@ static void i3c_master_bus_cleanup(struct i3c_master_controller *master)
3257 i3c_master_detach_free_devs(master);
3258 }
3259
3260 +static void i3c_master_attach_boardinfo(struct i3c_dev_desc *i3cdev)
3261 +{
3262 + struct i3c_master_controller *master = i3cdev->common.master;
3263 + struct i3c_dev_boardinfo *i3cboardinfo;
3264 +
3265 + list_for_each_entry(i3cboardinfo, &master->boardinfo.i3c, node) {
3266 + if (i3cdev->info.pid != i3cboardinfo->pid)
3267 + continue;
3268 +
3269 + i3cdev->boardinfo = i3cboardinfo;
3270 + i3cdev->info.static_addr = i3cboardinfo->static_addr;
3271 + return;
3272 + }
3273 +}
3274 +
3275 static struct i3c_dev_desc *
3276 i3c_master_search_i3c_dev_duplicate(struct i3c_dev_desc *refdev)
3277 {
3278 @@ -1815,10 +1830,10 @@ int i3c_master_add_i3c_dev_locked(struct i3c_master_controller *master,
3279 if (ret)
3280 goto err_detach_dev;
3281
3282 + i3c_master_attach_boardinfo(newdev);
3283 +
3284 olddev = i3c_master_search_i3c_dev_duplicate(newdev);
3285 if (olddev) {
3286 - newdev->boardinfo = olddev->boardinfo;
3287 - newdev->info.static_addr = olddev->info.static_addr;
3288 newdev->dev = olddev->dev;
3289 if (newdev->dev)
3290 newdev->dev->desc = newdev;
3291 diff --git a/drivers/i3c/master/i3c-master-cdns.c b/drivers/i3c/master/i3c-master-cdns.c
3292 index 10db0bf0655a9..6d5719cea9f53 100644
3293 --- a/drivers/i3c/master/i3c-master-cdns.c
3294 +++ b/drivers/i3c/master/i3c-master-cdns.c
3295 @@ -1593,8 +1593,10 @@ static int cdns_i3c_master_probe(struct platform_device *pdev)
3296 master->ibi.slots = devm_kcalloc(&pdev->dev, master->ibi.num_slots,
3297 sizeof(*master->ibi.slots),
3298 GFP_KERNEL);
3299 - if (!master->ibi.slots)
3300 + if (!master->ibi.slots) {
3301 + ret = -ENOMEM;
3302 goto err_disable_sysclk;
3303 + }
3304
3305 writel(IBIR_THR(1), master->regs + CMD_IBI_THR_CTRL);
3306 writel(MST_INT_IBIR_THR, master->regs + MST_IER);
3307 diff --git a/drivers/iio/adc/stm32-adc-core.c b/drivers/iio/adc/stm32-adc-core.c
3308 index 74f3a2be17a64..14d6a537289cb 100644
3309 --- a/drivers/iio/adc/stm32-adc-core.c
3310 +++ b/drivers/iio/adc/stm32-adc-core.c
3311 @@ -780,6 +780,13 @@ static int stm32_adc_core_runtime_resume(struct device *dev)
3312 {
3313 return stm32_adc_core_hw_start(dev);
3314 }
3315 +
3316 +static int stm32_adc_core_runtime_idle(struct device *dev)
3317 +{
3318 + pm_runtime_mark_last_busy(dev);
3319 +
3320 + return 0;
3321 +}
3322 #endif
3323
3324 static const struct dev_pm_ops stm32_adc_core_pm_ops = {
3325 @@ -787,7 +794,7 @@ static const struct dev_pm_ops stm32_adc_core_pm_ops = {
3326 pm_runtime_force_resume)
3327 SET_RUNTIME_PM_OPS(stm32_adc_core_runtime_suspend,
3328 stm32_adc_core_runtime_resume,
3329 - NULL)
3330 + stm32_adc_core_runtime_idle)
3331 };
3332
3333 static const struct stm32_adc_priv_cfg stm32f4_adc_priv_cfg = {
3334 diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
3335 index e3cd9d2b0dd2b..98d2d74b96f78 100644
3336 --- a/drivers/infiniband/core/cma.c
3337 +++ b/drivers/infiniband/core/cma.c
3338 @@ -1803,19 +1803,30 @@ static void cma_release_port(struct rdma_id_private *id_priv)
3339 mutex_unlock(&lock);
3340 }
3341
3342 -static void cma_leave_roce_mc_group(struct rdma_id_private *id_priv,
3343 - struct cma_multicast *mc)
3344 +static void destroy_mc(struct rdma_id_private *id_priv,
3345 + struct cma_multicast *mc)
3346 {
3347 - struct rdma_dev_addr *dev_addr = &id_priv->id.route.addr.dev_addr;
3348 - struct net_device *ndev = NULL;
3349 + if (rdma_cap_ib_mcast(id_priv->id.device, id_priv->id.port_num)) {
3350 + ib_sa_free_multicast(mc->multicast.ib);
3351 + kfree(mc);
3352 + return;
3353 + }
3354
3355 - if (dev_addr->bound_dev_if)
3356 - ndev = dev_get_by_index(dev_addr->net, dev_addr->bound_dev_if);
3357 - if (ndev) {
3358 - cma_igmp_send(ndev, &mc->multicast.ib->rec.mgid, false);
3359 - dev_put(ndev);
3360 + if (rdma_protocol_roce(id_priv->id.device,
3361 + id_priv->id.port_num)) {
3362 + struct rdma_dev_addr *dev_addr =
3363 + &id_priv->id.route.addr.dev_addr;
3364 + struct net_device *ndev = NULL;
3365 +
3366 + if (dev_addr->bound_dev_if)
3367 + ndev = dev_get_by_index(dev_addr->net,
3368 + dev_addr->bound_dev_if);
3369 + if (ndev) {
3370 + cma_igmp_send(ndev, &mc->multicast.ib->rec.mgid, false);
3371 + dev_put(ndev);
3372 + }
3373 + kref_put(&mc->mcref, release_mc);
3374 }
3375 - kref_put(&mc->mcref, release_mc);
3376 }
3377
3378 static void cma_leave_mc_groups(struct rdma_id_private *id_priv)
3379 @@ -1823,16 +1834,10 @@ static void cma_leave_mc_groups(struct rdma_id_private *id_priv)
3380 struct cma_multicast *mc;
3381
3382 while (!list_empty(&id_priv->mc_list)) {
3383 - mc = container_of(id_priv->mc_list.next,
3384 - struct cma_multicast, list);
3385 + mc = list_first_entry(&id_priv->mc_list, struct cma_multicast,
3386 + list);
3387 list_del(&mc->list);
3388 - if (rdma_cap_ib_mcast(id_priv->cma_dev->device,
3389 - id_priv->id.port_num)) {
3390 - ib_sa_free_multicast(mc->multicast.ib);
3391 - kfree(mc);
3392 - } else {
3393 - cma_leave_roce_mc_group(id_priv, mc);
3394 - }
3395 + destroy_mc(id_priv, mc);
3396 }
3397 }
3398
3399 @@ -4182,16 +4187,6 @@ static int cma_ib_mc_handler(int status, struct ib_sa_multicast *multicast)
3400 else
3401 pr_debug_ratelimited("RDMA CM: MULTICAST_ERROR: failed to join multicast. status %d\n",
3402 status);
3403 - mutex_lock(&id_priv->qp_mutex);
3404 - if (!status && id_priv->id.qp) {
3405 - status = ib_attach_mcast(id_priv->id.qp, &multicast->rec.mgid,
3406 - be16_to_cpu(multicast->rec.mlid));
3407 - if (status)
3408 - pr_debug_ratelimited("RDMA CM: MULTICAST_ERROR: failed to attach QP. status %d\n",
3409 - status);
3410 - }
3411 - mutex_unlock(&id_priv->qp_mutex);
3412 -
3413 event.status = status;
3414 event.param.ud.private_data = mc->context;
3415 if (!status) {
3416 @@ -4446,6 +4441,10 @@ int rdma_join_multicast(struct rdma_cm_id *id, struct sockaddr *addr,
3417 struct cma_multicast *mc;
3418 int ret;
3419
3420 + /* Not supported for kernel QPs */
3421 + if (WARN_ON(id->qp))
3422 + return -EINVAL;
3423 +
3424 if (!id->device)
3425 return -EINVAL;
3426
3427 @@ -4496,25 +4495,14 @@ void rdma_leave_multicast(struct rdma_cm_id *id, struct sockaddr *addr)
3428 id_priv = container_of(id, struct rdma_id_private, id);
3429 spin_lock_irq(&id_priv->lock);
3430 list_for_each_entry(mc, &id_priv->mc_list, list) {
3431 - if (!memcmp(&mc->addr, addr, rdma_addr_size(addr))) {
3432 - list_del(&mc->list);
3433 - spin_unlock_irq(&id_priv->lock);
3434 -
3435 - if (id->qp)
3436 - ib_detach_mcast(id->qp,
3437 - &mc->multicast.ib->rec.mgid,
3438 - be16_to_cpu(mc->multicast.ib->rec.mlid));
3439 -
3440 - BUG_ON(id_priv->cma_dev->device != id->device);
3441 -
3442 - if (rdma_cap_ib_mcast(id->device, id->port_num)) {
3443 - ib_sa_free_multicast(mc->multicast.ib);
3444 - kfree(mc);
3445 - } else if (rdma_protocol_roce(id->device, id->port_num)) {
3446 - cma_leave_roce_mc_group(id_priv, mc);
3447 - }
3448 - return;
3449 - }
3450 + if (memcmp(&mc->addr, addr, rdma_addr_size(addr)) != 0)
3451 + continue;
3452 + list_del(&mc->list);
3453 + spin_unlock_irq(&id_priv->lock);
3454 +
3455 + WARN_ON(id_priv->cma_dev->device != id->device);
3456 + destroy_mc(id_priv, mc);
3457 + return;
3458 }
3459 spin_unlock_irq(&id_priv->lock);
3460 }
3461 diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
3462 index f4f79f1292b91..ef4be14af3bb9 100644
3463 --- a/drivers/infiniband/core/ucma.c
3464 +++ b/drivers/infiniband/core/ucma.c
3465 @@ -581,6 +581,7 @@ static int ucma_free_ctx(struct ucma_context *ctx)
3466 list_move_tail(&uevent->list, &list);
3467 }
3468 list_del(&ctx->list);
3469 + events_reported = ctx->events_reported;
3470 mutex_unlock(&ctx->file->mut);
3471
3472 list_for_each_entry_safe(uevent, tmp, &list, list) {
3473 @@ -590,7 +591,6 @@ static int ucma_free_ctx(struct ucma_context *ctx)
3474 kfree(uevent);
3475 }
3476
3477 - events_reported = ctx->events_reported;
3478 mutex_destroy(&ctx->mutex);
3479 kfree(ctx);
3480 return events_reported;
3481 @@ -1473,7 +1473,9 @@ static ssize_t ucma_process_join(struct ucma_file *file,
3482 return 0;
3483
3484 err3:
3485 + mutex_lock(&ctx->mutex);
3486 rdma_leave_multicast(ctx->cm_id, (struct sockaddr *) &mc->addr);
3487 + mutex_unlock(&ctx->mutex);
3488 ucma_cleanup_mc_events(mc);
3489 err2:
3490 xa_erase(&multicast_table, mc->id);
3491 @@ -1639,7 +1641,9 @@ static ssize_t ucma_migrate_id(struct ucma_file *new_file,
3492
3493 cur_file = ctx->file;
3494 if (cur_file == new_file) {
3495 + mutex_lock(&cur_file->mut);
3496 resp.events_reported = ctx->events_reported;
3497 + mutex_unlock(&cur_file->mut);
3498 goto response;
3499 }
3500
3501 diff --git a/drivers/infiniband/core/umem.c b/drivers/infiniband/core/umem.c
3502 index 0d42ba8c0b696..650f71dd4ab93 100644
3503 --- a/drivers/infiniband/core/umem.c
3504 +++ b/drivers/infiniband/core/umem.c
3505 @@ -151,13 +151,24 @@ unsigned long ib_umem_find_best_pgsz(struct ib_umem *umem,
3506 dma_addr_t mask;
3507 int i;
3508
3509 + /* rdma_for_each_block() has a bug if the page size is smaller than the
3510 + * page size used to build the umem. For now prevent smaller page sizes
3511 + * from being returned.
3512 + */
3513 + pgsz_bitmap &= GENMASK(BITS_PER_LONG - 1, PAGE_SHIFT);
3514 +
3515 /* At minimum, drivers must support PAGE_SIZE or smaller */
3516 if (WARN_ON(!(pgsz_bitmap & GENMASK(PAGE_SHIFT, 0))))
3517 return 0;
3518
3519 va = virt;
3520 - /* max page size not to exceed MR length */
3521 - mask = roundup_pow_of_two(umem->length);
3522 + /* The best result is the smallest page size that results in the minimum
3523 + * number of required pages. Compute the largest page size that could
3524 + * work based on VA address bits that don't change.
3525 + */
3526 + mask = pgsz_bitmap &
3527 + GENMASK(BITS_PER_LONG - 1,
3528 + bits_per((umem->length - 1 + virt) ^ virt));
3529 /* offset into first SGL */
3530 pgoff = umem->address & ~PAGE_MASK;
3531
3532 diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
3533 index a79fa67df8715..a405c64d2a82b 100644
3534 --- a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
3535 +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
3536 @@ -271,7 +271,6 @@ static int hns_roce_v1_post_send(struct ib_qp *ibqp,
3537 ps_opcode = HNS_ROCE_WQE_OPCODE_SEND;
3538 break;
3539 case IB_WR_LOCAL_INV:
3540 - break;
3541 case IB_WR_ATOMIC_CMP_AND_SWP:
3542 case IB_WR_ATOMIC_FETCH_AND_ADD:
3543 case IB_WR_LSO:
3544 diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
3545 index 0502c90c83edd..bb75328193957 100644
3546 --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
3547 +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
3548 @@ -4616,7 +4616,9 @@ static int hns_roce_v2_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr,
3549 qp_attr->retry_cnt = roce_get_field(context.byte_212_lsn,
3550 V2_QPC_BYTE_212_RETRY_CNT_M,
3551 V2_QPC_BYTE_212_RETRY_CNT_S);
3552 - qp_attr->rnr_retry = le32_to_cpu(context.rq_rnr_timer);
3553 + qp_attr->rnr_retry = roce_get_field(context.byte_244_rnr_rxack,
3554 + V2_QPC_BYTE_244_RNR_CNT_M,
3555 + V2_QPC_BYTE_244_RNR_CNT_S);
3556
3557 done:
3558 qp_attr->cur_qp_state = qp_attr->qp_state;
3559 @@ -4632,6 +4634,7 @@ done:
3560 }
3561
3562 qp_init_attr->cap = qp_attr->cap;
3563 + qp_init_attr->sq_sig_type = hr_qp->sq_signal_bits;
3564
3565 out:
3566 mutex_unlock(&hr_qp->mutex);
3567 diff --git a/drivers/infiniband/hw/hns/hns_roce_qp.c b/drivers/infiniband/hw/hns/hns_roce_qp.c
3568 index 8dd2d666f6875..730e50c87a760 100644
3569 --- a/drivers/infiniband/hw/hns/hns_roce_qp.c
3570 +++ b/drivers/infiniband/hw/hns/hns_roce_qp.c
3571 @@ -1181,8 +1181,10 @@ int hns_roce_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
3572
3573 mutex_lock(&hr_qp->mutex);
3574
3575 - cur_state = attr_mask & IB_QP_CUR_STATE ?
3576 - attr->cur_qp_state : (enum ib_qp_state)hr_qp->state;
3577 + if (attr_mask & IB_QP_CUR_STATE && attr->cur_qp_state != hr_qp->state)
3578 + goto out;
3579 +
3580 + cur_state = hr_qp->state;
3581 new_state = attr_mask & IB_QP_STATE ? attr->qp_state : cur_state;
3582
3583 if (ibqp->uobject &&
3584 diff --git a/drivers/infiniband/hw/i40iw/i40iw.h b/drivers/infiniband/hw/i40iw/i40iw.h
3585 index 8feec35f95a7c..6d6719fa7e46a 100644
3586 --- a/drivers/infiniband/hw/i40iw/i40iw.h
3587 +++ b/drivers/infiniband/hw/i40iw/i40iw.h
3588 @@ -398,8 +398,8 @@ static inline struct i40iw_qp *to_iwqp(struct ib_qp *ibqp)
3589 }
3590
3591 /* i40iw.c */
3592 -void i40iw_add_ref(struct ib_qp *);
3593 -void i40iw_rem_ref(struct ib_qp *);
3594 +void i40iw_qp_add_ref(struct ib_qp *ibqp);
3595 +void i40iw_qp_rem_ref(struct ib_qp *ibqp);
3596 struct ib_qp *i40iw_get_qp(struct ib_device *, int);
3597
3598 void i40iw_flush_wqes(struct i40iw_device *iwdev,
3599 @@ -543,9 +543,8 @@ enum i40iw_status_code i40iw_manage_qhash(struct i40iw_device *iwdev,
3600 bool wait);
3601 void i40iw_receive_ilq(struct i40iw_sc_vsi *vsi, struct i40iw_puda_buf *rbuf);
3602 void i40iw_free_sqbuf(struct i40iw_sc_vsi *vsi, void *bufp);
3603 -void i40iw_free_qp_resources(struct i40iw_device *iwdev,
3604 - struct i40iw_qp *iwqp,
3605 - u32 qp_num);
3606 +void i40iw_free_qp_resources(struct i40iw_qp *iwqp);
3607 +
3608 enum i40iw_status_code i40iw_obj_aligned_mem(struct i40iw_device *iwdev,
3609 struct i40iw_dma_mem *memptr,
3610 u32 size, u32 mask);
3611 diff --git a/drivers/infiniband/hw/i40iw/i40iw_cm.c b/drivers/infiniband/hw/i40iw/i40iw_cm.c
3612 index fa7a5ff498c73..56c1e9abc52dc 100644
3613 --- a/drivers/infiniband/hw/i40iw/i40iw_cm.c
3614 +++ b/drivers/infiniband/hw/i40iw/i40iw_cm.c
3615 @@ -2322,7 +2322,7 @@ static void i40iw_rem_ref_cm_node(struct i40iw_cm_node *cm_node)
3616 iwqp = cm_node->iwqp;
3617 if (iwqp) {
3618 iwqp->cm_node = NULL;
3619 - i40iw_rem_ref(&iwqp->ibqp);
3620 + i40iw_qp_rem_ref(&iwqp->ibqp);
3621 cm_node->iwqp = NULL;
3622 } else if (cm_node->qhash_set) {
3623 i40iw_get_addr_info(cm_node, &nfo);
3624 @@ -3452,7 +3452,7 @@ void i40iw_cm_disconn(struct i40iw_qp *iwqp)
3625 kfree(work);
3626 return;
3627 }
3628 - i40iw_add_ref(&iwqp->ibqp);
3629 + i40iw_qp_add_ref(&iwqp->ibqp);
3630 spin_unlock_irqrestore(&iwdev->qptable_lock, flags);
3631
3632 work->iwqp = iwqp;
3633 @@ -3623,7 +3623,7 @@ static void i40iw_disconnect_worker(struct work_struct *work)
3634
3635 kfree(dwork);
3636 i40iw_cm_disconn_true(iwqp);
3637 - i40iw_rem_ref(&iwqp->ibqp);
3638 + i40iw_qp_rem_ref(&iwqp->ibqp);
3639 }
3640
3641 /**
3642 @@ -3745,7 +3745,7 @@ int i40iw_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3643 cm_node->lsmm_size = accept.size + conn_param->private_data_len;
3644 i40iw_cm_init_tsa_conn(iwqp, cm_node);
3645 cm_id->add_ref(cm_id);
3646 - i40iw_add_ref(&iwqp->ibqp);
3647 + i40iw_qp_add_ref(&iwqp->ibqp);
3648
3649 attr.qp_state = IB_QPS_RTS;
3650 cm_node->qhash_set = false;
3651 @@ -3908,7 +3908,7 @@ int i40iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3652 iwqp->cm_node = cm_node;
3653 cm_node->iwqp = iwqp;
3654 iwqp->cm_id = cm_id;
3655 - i40iw_add_ref(&iwqp->ibqp);
3656 + i40iw_qp_add_ref(&iwqp->ibqp);
3657
3658 if (cm_node->state != I40IW_CM_STATE_OFFLOADED) {
3659 cm_node->state = I40IW_CM_STATE_SYN_SENT;
3660 diff --git a/drivers/infiniband/hw/i40iw/i40iw_hw.c b/drivers/infiniband/hw/i40iw/i40iw_hw.c
3661 index ae8b97c306657..a7512508f7e60 100644
3662 --- a/drivers/infiniband/hw/i40iw/i40iw_hw.c
3663 +++ b/drivers/infiniband/hw/i40iw/i40iw_hw.c
3664 @@ -313,7 +313,7 @@ void i40iw_process_aeq(struct i40iw_device *iwdev)
3665 __func__, info->qp_cq_id);
3666 continue;
3667 }
3668 - i40iw_add_ref(&iwqp->ibqp);
3669 + i40iw_qp_add_ref(&iwqp->ibqp);
3670 spin_unlock_irqrestore(&iwdev->qptable_lock, flags);
3671 qp = &iwqp->sc_qp;
3672 spin_lock_irqsave(&iwqp->lock, flags);
3673 @@ -427,7 +427,7 @@ void i40iw_process_aeq(struct i40iw_device *iwdev)
3674 break;
3675 }
3676 if (info->qp)
3677 - i40iw_rem_ref(&iwqp->ibqp);
3678 + i40iw_qp_rem_ref(&iwqp->ibqp);
3679 } while (1);
3680
3681 if (aeqcnt)
3682 diff --git a/drivers/infiniband/hw/i40iw/i40iw_utils.c b/drivers/infiniband/hw/i40iw/i40iw_utils.c
3683 index 016524683e17e..72db7c1dc2998 100644
3684 --- a/drivers/infiniband/hw/i40iw/i40iw_utils.c
3685 +++ b/drivers/infiniband/hw/i40iw/i40iw_utils.c
3686 @@ -479,25 +479,6 @@ void i40iw_cleanup_pending_cqp_op(struct i40iw_device *iwdev)
3687 }
3688 }
3689
3690 -/**
3691 - * i40iw_free_qp - callback after destroy cqp completes
3692 - * @cqp_request: cqp request for destroy qp
3693 - * @num: not used
3694 - */
3695 -static void i40iw_free_qp(struct i40iw_cqp_request *cqp_request, u32 num)
3696 -{
3697 - struct i40iw_sc_qp *qp = (struct i40iw_sc_qp *)cqp_request->param;
3698 - struct i40iw_qp *iwqp = (struct i40iw_qp *)qp->back_qp;
3699 - struct i40iw_device *iwdev;
3700 - u32 qp_num = iwqp->ibqp.qp_num;
3701 -
3702 - iwdev = iwqp->iwdev;
3703 -
3704 - i40iw_rem_pdusecount(iwqp->iwpd, iwdev);
3705 - i40iw_free_qp_resources(iwdev, iwqp, qp_num);
3706 - i40iw_rem_devusecount(iwdev);
3707 -}
3708 -
3709 /**
3710 * i40iw_wait_event - wait for completion
3711 * @iwdev: iwarp device
3712 @@ -618,26 +599,23 @@ void i40iw_rem_pdusecount(struct i40iw_pd *iwpd, struct i40iw_device *iwdev)
3713 }
3714
3715 /**
3716 - * i40iw_add_ref - add refcount for qp
3717 + * i40iw_qp_add_ref - add refcount for qp
3718 * @ibqp: iqarp qp
3719 */
3720 -void i40iw_add_ref(struct ib_qp *ibqp)
3721 +void i40iw_qp_add_ref(struct ib_qp *ibqp)
3722 {
3723 struct i40iw_qp *iwqp = (struct i40iw_qp *)ibqp;
3724
3725 - atomic_inc(&iwqp->refcount);
3726 + refcount_inc(&iwqp->refcount);
3727 }
3728
3729 /**
3730 - * i40iw_rem_ref - rem refcount for qp and free if 0
3731 + * i40iw_qp_rem_ref - rem refcount for qp and free if 0
3732 * @ibqp: iqarp qp
3733 */
3734 -void i40iw_rem_ref(struct ib_qp *ibqp)
3735 +void i40iw_qp_rem_ref(struct ib_qp *ibqp)
3736 {
3737 struct i40iw_qp *iwqp;
3738 - enum i40iw_status_code status;
3739 - struct i40iw_cqp_request *cqp_request;
3740 - struct cqp_commands_info *cqp_info;
3741 struct i40iw_device *iwdev;
3742 u32 qp_num;
3743 unsigned long flags;
3744 @@ -645,7 +623,7 @@ void i40iw_rem_ref(struct ib_qp *ibqp)
3745 iwqp = to_iwqp(ibqp);
3746 iwdev = iwqp->iwdev;
3747 spin_lock_irqsave(&iwdev->qptable_lock, flags);
3748 - if (!atomic_dec_and_test(&iwqp->refcount)) {
3749 + if (!refcount_dec_and_test(&iwqp->refcount)) {
3750 spin_unlock_irqrestore(&iwdev->qptable_lock, flags);
3751 return;
3752 }
3753 @@ -653,25 +631,8 @@ void i40iw_rem_ref(struct ib_qp *ibqp)
3754 qp_num = iwqp->ibqp.qp_num;
3755 iwdev->qp_table[qp_num] = NULL;
3756 spin_unlock_irqrestore(&iwdev->qptable_lock, flags);
3757 - cqp_request = i40iw_get_cqp_request(&iwdev->cqp, false);
3758 - if (!cqp_request)
3759 - return;
3760 -
3761 - cqp_request->callback_fcn = i40iw_free_qp;
3762 - cqp_request->param = (void *)&iwqp->sc_qp;
3763 - cqp_info = &cqp_request->info;
3764 - cqp_info->cqp_cmd = OP_QP_DESTROY;
3765 - cqp_info->post_sq = 1;
3766 - cqp_info->in.u.qp_destroy.qp = &iwqp->sc_qp;
3767 - cqp_info->in.u.qp_destroy.scratch = (uintptr_t)cqp_request;
3768 - cqp_info->in.u.qp_destroy.remove_hash_idx = true;
3769 - status = i40iw_handle_cqp_op(iwdev, cqp_request);
3770 - if (!status)
3771 - return;
3772 + complete(&iwqp->free_qp);
3773
3774 - i40iw_rem_pdusecount(iwqp->iwpd, iwdev);
3775 - i40iw_free_qp_resources(iwdev, iwqp, qp_num);
3776 - i40iw_rem_devusecount(iwdev);
3777 }
3778
3779 /**
3780 @@ -938,7 +899,7 @@ static void i40iw_terminate_timeout(struct timer_list *t)
3781 struct i40iw_sc_qp *qp = (struct i40iw_sc_qp *)&iwqp->sc_qp;
3782
3783 i40iw_terminate_done(qp, 1);
3784 - i40iw_rem_ref(&iwqp->ibqp);
3785 + i40iw_qp_rem_ref(&iwqp->ibqp);
3786 }
3787
3788 /**
3789 @@ -950,7 +911,7 @@ void i40iw_terminate_start_timer(struct i40iw_sc_qp *qp)
3790 struct i40iw_qp *iwqp;
3791
3792 iwqp = (struct i40iw_qp *)qp->back_qp;
3793 - i40iw_add_ref(&iwqp->ibqp);
3794 + i40iw_qp_add_ref(&iwqp->ibqp);
3795 timer_setup(&iwqp->terminate_timer, i40iw_terminate_timeout, 0);
3796 iwqp->terminate_timer.expires = jiffies + HZ;
3797 add_timer(&iwqp->terminate_timer);
3798 @@ -966,7 +927,7 @@ void i40iw_terminate_del_timer(struct i40iw_sc_qp *qp)
3799
3800 iwqp = (struct i40iw_qp *)qp->back_qp;
3801 if (del_timer(&iwqp->terminate_timer))
3802 - i40iw_rem_ref(&iwqp->ibqp);
3803 + i40iw_qp_rem_ref(&iwqp->ibqp);
3804 }
3805
3806 /**
3807 diff --git a/drivers/infiniband/hw/i40iw/i40iw_verbs.c b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
3808 index cd9ee1664a69e..22bf4f09c0647 100644
3809 --- a/drivers/infiniband/hw/i40iw/i40iw_verbs.c
3810 +++ b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
3811 @@ -366,11 +366,11 @@ static struct i40iw_pbl *i40iw_get_pbl(unsigned long va,
3812 * @iwqp: qp ptr (user or kernel)
3813 * @qp_num: qp number assigned
3814 */
3815 -void i40iw_free_qp_resources(struct i40iw_device *iwdev,
3816 - struct i40iw_qp *iwqp,
3817 - u32 qp_num)
3818 +void i40iw_free_qp_resources(struct i40iw_qp *iwqp)
3819 {
3820 struct i40iw_pbl *iwpbl = &iwqp->iwpbl;
3821 + struct i40iw_device *iwdev = iwqp->iwdev;
3822 + u32 qp_num = iwqp->ibqp.qp_num;
3823
3824 i40iw_ieq_cleanup_qp(iwdev->vsi.ieq, &iwqp->sc_qp);
3825 i40iw_dealloc_push_page(iwdev, &iwqp->sc_qp);
3826 @@ -404,6 +404,10 @@ static void i40iw_clean_cqes(struct i40iw_qp *iwqp, struct i40iw_cq *iwcq)
3827 static int i40iw_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata)
3828 {
3829 struct i40iw_qp *iwqp = to_iwqp(ibqp);
3830 + struct ib_qp_attr attr;
3831 + struct i40iw_device *iwdev = iwqp->iwdev;
3832 +
3833 + memset(&attr, 0, sizeof(attr));
3834
3835 iwqp->destroyed = 1;
3836
3837 @@ -418,7 +422,15 @@ static int i40iw_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata)
3838 }
3839 }
3840
3841 - i40iw_rem_ref(&iwqp->ibqp);
3842 + attr.qp_state = IB_QPS_ERR;
3843 + i40iw_modify_qp(&iwqp->ibqp, &attr, IB_QP_STATE, NULL);
3844 + i40iw_qp_rem_ref(&iwqp->ibqp);
3845 + wait_for_completion(&iwqp->free_qp);
3846 + i40iw_cqp_qp_destroy_cmd(&iwdev->sc_dev, &iwqp->sc_qp);
3847 + i40iw_rem_pdusecount(iwqp->iwpd, iwdev);
3848 + i40iw_free_qp_resources(iwqp);
3849 + i40iw_rem_devusecount(iwdev);
3850 +
3851 return 0;
3852 }
3853
3854 @@ -579,6 +591,7 @@ static struct ib_qp *i40iw_create_qp(struct ib_pd *ibpd,
3855 qp->back_qp = (void *)iwqp;
3856 qp->push_idx = I40IW_INVALID_PUSH_PAGE_INDEX;
3857
3858 + iwqp->iwdev = iwdev;
3859 iwqp->ctx_info.iwarp_info = &iwqp->iwarp_info;
3860
3861 if (i40iw_allocate_dma_mem(dev->hw,
3862 @@ -603,7 +616,6 @@ static struct ib_qp *i40iw_create_qp(struct ib_pd *ibpd,
3863 goto error;
3864 }
3865
3866 - iwqp->iwdev = iwdev;
3867 iwqp->iwpd = iwpd;
3868 iwqp->ibqp.qp_num = qp_num;
3869 qp = &iwqp->sc_qp;
3870 @@ -717,7 +729,7 @@ static struct ib_qp *i40iw_create_qp(struct ib_pd *ibpd,
3871 goto error;
3872 }
3873
3874 - i40iw_add_ref(&iwqp->ibqp);
3875 + refcount_set(&iwqp->refcount, 1);
3876 spin_lock_init(&iwqp->lock);
3877 iwqp->sig_all = (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR) ? 1 : 0;
3878 iwdev->qp_table[qp_num] = iwqp;
3879 @@ -739,10 +751,11 @@ static struct ib_qp *i40iw_create_qp(struct ib_pd *ibpd,
3880 }
3881 init_completion(&iwqp->sq_drained);
3882 init_completion(&iwqp->rq_drained);
3883 + init_completion(&iwqp->free_qp);
3884
3885 return &iwqp->ibqp;
3886 error:
3887 - i40iw_free_qp_resources(iwdev, iwqp, qp_num);
3888 + i40iw_free_qp_resources(iwqp);
3889 return ERR_PTR(err_code);
3890 }
3891
3892 @@ -2654,13 +2667,13 @@ static const struct ib_device_ops i40iw_dev_ops = {
3893 .get_hw_stats = i40iw_get_hw_stats,
3894 .get_port_immutable = i40iw_port_immutable,
3895 .iw_accept = i40iw_accept,
3896 - .iw_add_ref = i40iw_add_ref,
3897 + .iw_add_ref = i40iw_qp_add_ref,
3898 .iw_connect = i40iw_connect,
3899 .iw_create_listen = i40iw_create_listen,
3900 .iw_destroy_listen = i40iw_destroy_listen,
3901 .iw_get_qp = i40iw_get_qp,
3902 .iw_reject = i40iw_reject,
3903 - .iw_rem_ref = i40iw_rem_ref,
3904 + .iw_rem_ref = i40iw_qp_rem_ref,
3905 .map_mr_sg = i40iw_map_mr_sg,
3906 .mmap = i40iw_mmap,
3907 .modify_qp = i40iw_modify_qp,
3908 diff --git a/drivers/infiniband/hw/i40iw/i40iw_verbs.h b/drivers/infiniband/hw/i40iw/i40iw_verbs.h
3909 index 3a413752ccc38..ad7d81041bc9a 100644
3910 --- a/drivers/infiniband/hw/i40iw/i40iw_verbs.h
3911 +++ b/drivers/infiniband/hw/i40iw/i40iw_verbs.h
3912 @@ -140,7 +140,7 @@ struct i40iw_qp {
3913 struct i40iw_qp_host_ctx_info ctx_info;
3914 struct i40iwarp_offload_info iwarp_info;
3915 void *allocated_buffer;
3916 - atomic_t refcount;
3917 + refcount_t refcount;
3918 struct iw_cm_id *cm_id;
3919 void *cm_node;
3920 struct ib_mr *lsmm_mr;
3921 @@ -175,5 +175,6 @@ struct i40iw_qp {
3922 struct i40iw_dma_mem ietf_mem;
3923 struct completion sq_drained;
3924 struct completion rq_drained;
3925 + struct completion free_qp;
3926 };
3927 #endif
3928 diff --git a/drivers/infiniband/hw/mlx4/cm.c b/drivers/infiniband/hw/mlx4/cm.c
3929 index b591861934b3c..81d6a3460b55d 100644
3930 --- a/drivers/infiniband/hw/mlx4/cm.c
3931 +++ b/drivers/infiniband/hw/mlx4/cm.c
3932 @@ -280,6 +280,9 @@ static void schedule_delayed(struct ib_device *ibdev, struct id_map_entry *id)
3933 if (!sriov->is_going_down && !id->scheduled_delete) {
3934 id->scheduled_delete = 1;
3935 schedule_delayed_work(&id->timeout, CM_CLEANUP_CACHE_TIMEOUT);
3936 + } else if (id->scheduled_delete) {
3937 + /* Adjust timeout if already scheduled */
3938 + mod_delayed_work(system_wq, &id->timeout, CM_CLEANUP_CACHE_TIMEOUT);
3939 }
3940 spin_unlock_irqrestore(&sriov->going_down_lock, flags);
3941 spin_unlock(&sriov->id_map_lock);
3942 diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c
3943 index 57079110af9b5..08eccf2b6967d 100644
3944 --- a/drivers/infiniband/hw/mlx4/mad.c
3945 +++ b/drivers/infiniband/hw/mlx4/mad.c
3946 @@ -1307,6 +1307,18 @@ static void mlx4_ib_tunnel_comp_handler(struct ib_cq *cq, void *arg)
3947 spin_unlock_irqrestore(&dev->sriov.going_down_lock, flags);
3948 }
3949
3950 +static void mlx4_ib_wire_comp_handler(struct ib_cq *cq, void *arg)
3951 +{
3952 + unsigned long flags;
3953 + struct mlx4_ib_demux_pv_ctx *ctx = cq->cq_context;
3954 + struct mlx4_ib_dev *dev = to_mdev(ctx->ib_dev);
3955 +
3956 + spin_lock_irqsave(&dev->sriov.going_down_lock, flags);
3957 + if (!dev->sriov.is_going_down && ctx->state == DEMUX_PV_STATE_ACTIVE)
3958 + queue_work(ctx->wi_wq, &ctx->work);
3959 + spin_unlock_irqrestore(&dev->sriov.going_down_lock, flags);
3960 +}
3961 +
3962 static int mlx4_ib_post_pv_qp_buf(struct mlx4_ib_demux_pv_ctx *ctx,
3963 struct mlx4_ib_demux_pv_qp *tun_qp,
3964 int index)
3965 @@ -2009,7 +2021,8 @@ static int create_pv_resources(struct ib_device *ibdev, int slave, int port,
3966 cq_size *= 2;
3967
3968 cq_attr.cqe = cq_size;
3969 - ctx->cq = ib_create_cq(ctx->ib_dev, mlx4_ib_tunnel_comp_handler,
3970 + ctx->cq = ib_create_cq(ctx->ib_dev,
3971 + create_tun ? mlx4_ib_tunnel_comp_handler : mlx4_ib_wire_comp_handler,
3972 NULL, ctx, &cq_attr);
3973 if (IS_ERR(ctx->cq)) {
3974 ret = PTR_ERR(ctx->cq);
3975 @@ -2046,6 +2059,7 @@ static int create_pv_resources(struct ib_device *ibdev, int slave, int port,
3976 INIT_WORK(&ctx->work, mlx4_ib_sqp_comp_worker);
3977
3978 ctx->wq = to_mdev(ibdev)->sriov.demux[port - 1].wq;
3979 + ctx->wi_wq = to_mdev(ibdev)->sriov.demux[port - 1].wi_wq;
3980
3981 ret = ib_req_notify_cq(ctx->cq, IB_CQ_NEXT_COMP);
3982 if (ret) {
3983 @@ -2189,7 +2203,7 @@ static int mlx4_ib_alloc_demux_ctx(struct mlx4_ib_dev *dev,
3984 goto err_mcg;
3985 }
3986
3987 - snprintf(name, sizeof name, "mlx4_ibt%d", port);
3988 + snprintf(name, sizeof(name), "mlx4_ibt%d", port);
3989 ctx->wq = alloc_ordered_workqueue(name, WQ_MEM_RECLAIM);
3990 if (!ctx->wq) {
3991 pr_err("Failed to create tunnelling WQ for port %d\n", port);
3992 @@ -2197,7 +2211,15 @@ static int mlx4_ib_alloc_demux_ctx(struct mlx4_ib_dev *dev,
3993 goto err_wq;
3994 }
3995
3996 - snprintf(name, sizeof name, "mlx4_ibud%d", port);
3997 + snprintf(name, sizeof(name), "mlx4_ibwi%d", port);
3998 + ctx->wi_wq = alloc_ordered_workqueue(name, WQ_MEM_RECLAIM);
3999 + if (!ctx->wi_wq) {
4000 + pr_err("Failed to create wire WQ for port %d\n", port);
4001 + ret = -ENOMEM;
4002 + goto err_wiwq;
4003 + }
4004 +
4005 + snprintf(name, sizeof(name), "mlx4_ibud%d", port);
4006 ctx->ud_wq = alloc_ordered_workqueue(name, WQ_MEM_RECLAIM);
4007 if (!ctx->ud_wq) {
4008 pr_err("Failed to create up/down WQ for port %d\n", port);
4009 @@ -2208,6 +2230,10 @@ static int mlx4_ib_alloc_demux_ctx(struct mlx4_ib_dev *dev,
4010 return 0;
4011
4012 err_udwq:
4013 + destroy_workqueue(ctx->wi_wq);
4014 + ctx->wi_wq = NULL;
4015 +
4016 +err_wiwq:
4017 destroy_workqueue(ctx->wq);
4018 ctx->wq = NULL;
4019
4020 @@ -2255,12 +2281,14 @@ static void mlx4_ib_free_demux_ctx(struct mlx4_ib_demux_ctx *ctx)
4021 ctx->tun[i]->state = DEMUX_PV_STATE_DOWNING;
4022 }
4023 flush_workqueue(ctx->wq);
4024 + flush_workqueue(ctx->wi_wq);
4025 for (i = 0; i < dev->dev->caps.sqp_demux; i++) {
4026 destroy_pv_resources(dev, i, ctx->port, ctx->tun[i], 0);
4027 free_pv_object(dev, i, ctx->port);
4028 }
4029 kfree(ctx->tun);
4030 destroy_workqueue(ctx->ud_wq);
4031 + destroy_workqueue(ctx->wi_wq);
4032 destroy_workqueue(ctx->wq);
4033 }
4034 }
4035 diff --git a/drivers/infiniband/hw/mlx4/mlx4_ib.h b/drivers/infiniband/hw/mlx4/mlx4_ib.h
4036 index eb53bb4c0c91c..0173e3931cc7f 100644
4037 --- a/drivers/infiniband/hw/mlx4/mlx4_ib.h
4038 +++ b/drivers/infiniband/hw/mlx4/mlx4_ib.h
4039 @@ -459,6 +459,7 @@ struct mlx4_ib_demux_pv_ctx {
4040 struct ib_pd *pd;
4041 struct work_struct work;
4042 struct workqueue_struct *wq;
4043 + struct workqueue_struct *wi_wq;
4044 struct mlx4_ib_demux_pv_qp qp[2];
4045 };
4046
4047 @@ -466,6 +467,7 @@ struct mlx4_ib_demux_ctx {
4048 struct ib_device *ib_dev;
4049 int port;
4050 struct workqueue_struct *wq;
4051 + struct workqueue_struct *wi_wq;
4052 struct workqueue_struct *ud_wq;
4053 spinlock_t ud_lock;
4054 atomic64_t subnet_prefix;
4055 diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c
4056 index ff664355de550..73d5b8dc74d86 100644
4057 --- a/drivers/infiniband/hw/mlx5/cq.c
4058 +++ b/drivers/infiniband/hw/mlx5/cq.c
4059 @@ -167,7 +167,7 @@ static void handle_responder(struct ib_wc *wc, struct mlx5_cqe64 *cqe,
4060 {
4061 enum rdma_link_layer ll = rdma_port_get_link_layer(qp->ibqp.device, 1);
4062 struct mlx5_ib_dev *dev = to_mdev(qp->ibqp.device);
4063 - struct mlx5_ib_srq *srq;
4064 + struct mlx5_ib_srq *srq = NULL;
4065 struct mlx5_ib_wq *wq;
4066 u16 wqe_ctr;
4067 u8 roce_packet_type;
4068 @@ -179,7 +179,8 @@ static void handle_responder(struct ib_wc *wc, struct mlx5_cqe64 *cqe,
4069
4070 if (qp->ibqp.xrcd) {
4071 msrq = mlx5_cmd_get_srq(dev, be32_to_cpu(cqe->srqn));
4072 - srq = to_mibsrq(msrq);
4073 + if (msrq)
4074 + srq = to_mibsrq(msrq);
4075 } else {
4076 srq = to_msrq(qp->ibqp.srq);
4077 }
4078 diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
4079 index b781ad74e6de4..40c1a05c2445d 100644
4080 --- a/drivers/infiniband/hw/mlx5/main.c
4081 +++ b/drivers/infiniband/hw/mlx5/main.c
4082 @@ -888,7 +888,9 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
4083 /* We support 'Gappy' memory registration too */
4084 props->device_cap_flags |= IB_DEVICE_SG_GAPS_REG;
4085 }
4086 - props->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
4087 + /* IB_WR_REG_MR always requires changing the entity size with UMR */
4088 + if (!MLX5_CAP_GEN(dev->mdev, umr_modify_entity_size_disabled))
4089 + props->device_cap_flags |= IB_DEVICE_MEM_MGT_EXTENSIONS;
4090 if (MLX5_CAP_GEN(mdev, sho)) {
4091 props->device_cap_flags |= IB_DEVICE_INTEGRITY_HANDOVER;
4092 /* At this stage no support for signature handover */
4093 diff --git a/drivers/infiniband/hw/qedr/main.c b/drivers/infiniband/hw/qedr/main.c
4094 index 4494dab8c3d83..93040c994e2e3 100644
4095 --- a/drivers/infiniband/hw/qedr/main.c
4096 +++ b/drivers/infiniband/hw/qedr/main.c
4097 @@ -601,7 +601,7 @@ static int qedr_set_device_attr(struct qedr_dev *dev)
4098 qed_attr = dev->ops->rdma_query_device(dev->rdma_ctx);
4099
4100 /* Part 2 - check capabilities */
4101 - page_size = ~dev->attr.page_size_caps + 1;
4102 + page_size = ~qed_attr->page_size_caps + 1;
4103 if (page_size > PAGE_SIZE) {
4104 DP_ERR(dev,
4105 "Kernel PAGE_SIZE is %ld which is smaller than minimum page size (%d) required by qedr\n",
4106 diff --git a/drivers/infiniband/hw/qedr/qedr_iw_cm.c b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
4107 index 6dea49e11f5f0..e521f3c3dbbf1 100644
4108 --- a/drivers/infiniband/hw/qedr/qedr_iw_cm.c
4109 +++ b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
4110 @@ -736,7 +736,7 @@ int qedr_iw_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
4111 struct qedr_dev *dev = ep->dev;
4112 struct qedr_qp *qp;
4113 struct qed_iwarp_accept_in params;
4114 - int rc = 0;
4115 + int rc;
4116
4117 DP_DEBUG(dev, QEDR_MSG_IWARP, "Accept on qpid=%d\n", conn_param->qpn);
4118
4119 @@ -759,8 +759,10 @@ int qedr_iw_accept(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
4120 params.ord = conn_param->ord;
4121
4122 if (test_and_set_bit(QEDR_IWARP_CM_WAIT_FOR_CONNECT,
4123 - &qp->iwarp_cm_flags))
4124 + &qp->iwarp_cm_flags)) {
4125 + rc = -EINVAL;
4126 goto err; /* QP already destroyed */
4127 + }
4128
4129 rc = dev->ops->iwarp_accept(dev->rdma_ctx, &params);
4130 if (rc) {
4131 diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c
4132 index 16a994fd7d0a7..4408d33646647 100644
4133 --- a/drivers/infiniband/hw/qedr/verbs.c
4134 +++ b/drivers/infiniband/hw/qedr/verbs.c
4135 @@ -2405,7 +2405,7 @@ int qedr_query_qp(struct ib_qp *ibqp,
4136 qp_attr->cap.max_recv_wr = qp->rq.max_wr;
4137 qp_attr->cap.max_send_sge = qp->sq.max_sges;
4138 qp_attr->cap.max_recv_sge = qp->rq.max_sges;
4139 - qp_attr->cap.max_inline_data = ROCE_REQ_MAX_INLINE_DATA_SIZE;
4140 + qp_attr->cap.max_inline_data = dev->attr.max_inline;
4141 qp_init_attr->cap = qp_attr->cap;
4142
4143 qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;
4144 @@ -2518,6 +2518,8 @@ int qedr_destroy_qp(struct ib_qp *ibqp, struct ib_udata *udata)
4145
4146 if (rdma_protocol_iwarp(&dev->ibdev, 1))
4147 qedr_iw_qp_rem_ref(&qp->ibqp);
4148 + else
4149 + kfree(qp);
4150
4151 return 0;
4152 }
4153 diff --git a/drivers/infiniband/sw/rdmavt/vt.c b/drivers/infiniband/sw/rdmavt/vt.c
4154 index 18da1e1ea9797..833f3f1b87f5e 100644
4155 --- a/drivers/infiniband/sw/rdmavt/vt.c
4156 +++ b/drivers/infiniband/sw/rdmavt/vt.c
4157 @@ -95,9 +95,7 @@ struct rvt_dev_info *rvt_alloc_device(size_t size, int nports)
4158 if (!rdi)
4159 return rdi;
4160
4161 - rdi->ports = kcalloc(nports,
4162 - sizeof(struct rvt_ibport **),
4163 - GFP_KERNEL);
4164 + rdi->ports = kcalloc(nports, sizeof(*rdi->ports), GFP_KERNEL);
4165 if (!rdi->ports)
4166 ib_dealloc_device(&rdi->ibdev);
4167
4168 diff --git a/drivers/infiniband/sw/rxe/rxe_recv.c b/drivers/infiniband/sw/rxe/rxe_recv.c
4169 index 46e111c218fd4..9bfb98056fc2a 100644
4170 --- a/drivers/infiniband/sw/rxe/rxe_recv.c
4171 +++ b/drivers/infiniband/sw/rxe/rxe_recv.c
4172 @@ -281,6 +281,8 @@ static void rxe_rcv_mcast_pkt(struct rxe_dev *rxe, struct sk_buff *skb)
4173 struct rxe_mc_elem *mce;
4174 struct rxe_qp *qp;
4175 union ib_gid dgid;
4176 + struct sk_buff *per_qp_skb;
4177 + struct rxe_pkt_info *per_qp_pkt;
4178 int err;
4179
4180 if (skb->protocol == htons(ETH_P_IP))
4181 @@ -309,21 +311,29 @@ static void rxe_rcv_mcast_pkt(struct rxe_dev *rxe, struct sk_buff *skb)
4182 if (err)
4183 continue;
4184
4185 - /* if *not* the last qp in the list
4186 - * increase the users of the skb then post to the next qp
4187 + /* for all but the last qp create a new clone of the
4188 + * skb and pass to the qp.
4189 */
4190 if (mce->qp_list.next != &mcg->qp_list)
4191 - skb_get(skb);
4192 + per_qp_skb = skb_clone(skb, GFP_ATOMIC);
4193 + else
4194 + per_qp_skb = skb;
4195 +
4196 + if (unlikely(!per_qp_skb))
4197 + continue;
4198
4199 - pkt->qp = qp;
4200 + per_qp_pkt = SKB_TO_PKT(per_qp_skb);
4201 + per_qp_pkt->qp = qp;
4202 rxe_add_ref(qp);
4203 - rxe_rcv_pkt(pkt, skb);
4204 + rxe_rcv_pkt(per_qp_pkt, per_qp_skb);
4205 }
4206
4207 spin_unlock_bh(&mcg->mcg_lock);
4208
4209 rxe_drop_ref(mcg); /* drop ref from rxe_pool_get_key. */
4210
4211 + return;
4212 +
4213 err1:
4214 kfree_skb(skb);
4215 }
4216 diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
4217 index 044bcacad6e48..69ecf37053a81 100644
4218 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
4219 +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
4220 @@ -2463,6 +2463,8 @@ static struct net_device *ipoib_add_port(const char *format,
4221 /* call event handler to ensure pkey in sync */
4222 queue_work(ipoib_workqueue, &priv->flush_heavy);
4223
4224 + ndev->rtnl_link_ops = ipoib_get_link_ops();
4225 +
4226 result = register_netdev(ndev);
4227 if (result) {
4228 pr_warn("%s: couldn't register ipoib port %d; error %d\n",
4229 diff --git a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
4230 index 38c984d16996d..d5a90a66b45cf 100644
4231 --- a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
4232 +++ b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
4233 @@ -144,6 +144,16 @@ static int ipoib_new_child_link(struct net *src_net, struct net_device *dev,
4234 return 0;
4235 }
4236
4237 +static void ipoib_del_child_link(struct net_device *dev, struct list_head *head)
4238 +{
4239 + struct ipoib_dev_priv *priv = ipoib_priv(dev);
4240 +
4241 + if (!priv->parent)
4242 + return;
4243 +
4244 + unregister_netdevice_queue(dev, head);
4245 +}
4246 +
4247 static size_t ipoib_get_size(const struct net_device *dev)
4248 {
4249 return nla_total_size(2) + /* IFLA_IPOIB_PKEY */
4250 @@ -158,6 +168,7 @@ static struct rtnl_link_ops ipoib_link_ops __read_mostly = {
4251 .priv_size = sizeof(struct ipoib_dev_priv),
4252 .setup = ipoib_setup_common,
4253 .newlink = ipoib_new_child_link,
4254 + .dellink = ipoib_del_child_link,
4255 .changelink = ipoib_changelink,
4256 .get_size = ipoib_get_size,
4257 .fill_info = ipoib_fill_info,
4258 diff --git a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
4259 index 8ac8e18fbe0c3..58ca5e9c6079c 100644
4260 --- a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
4261 +++ b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
4262 @@ -192,6 +192,8 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)
4263 }
4264 priv = ipoib_priv(ndev);
4265
4266 + ndev->rtnl_link_ops = ipoib_get_link_ops();
4267 +
4268 result = __ipoib_vlan_add(ppriv, priv, pkey, IPOIB_LEGACY_CHILD);
4269
4270 if (result && ndev->reg_state == NETREG_UNINITIALIZED)
4271 diff --git a/drivers/input/keyboard/ep93xx_keypad.c b/drivers/input/keyboard/ep93xx_keypad.c
4272 index 7c70492d9d6b5..f831f01501d58 100644
4273 --- a/drivers/input/keyboard/ep93xx_keypad.c
4274 +++ b/drivers/input/keyboard/ep93xx_keypad.c
4275 @@ -250,8 +250,8 @@ static int ep93xx_keypad_probe(struct platform_device *pdev)
4276 }
4277
4278 keypad->irq = platform_get_irq(pdev, 0);
4279 - if (!keypad->irq) {
4280 - err = -ENXIO;
4281 + if (keypad->irq < 0) {
4282 + err = keypad->irq;
4283 goto failed_free;
4284 }
4285
4286 diff --git a/drivers/input/keyboard/omap4-keypad.c b/drivers/input/keyboard/omap4-keypad.c
4287 index 94c94d7f5155f..d6c924032aaa8 100644
4288 --- a/drivers/input/keyboard/omap4-keypad.c
4289 +++ b/drivers/input/keyboard/omap4-keypad.c
4290 @@ -240,10 +240,8 @@ static int omap4_keypad_probe(struct platform_device *pdev)
4291 }
4292
4293 irq = platform_get_irq(pdev, 0);
4294 - if (!irq) {
4295 - dev_err(&pdev->dev, "no keyboard irq assigned\n");
4296 - return -EINVAL;
4297 - }
4298 + if (irq < 0)
4299 + return irq;
4300
4301 keypad_data = kzalloc(sizeof(struct omap4_keypad), GFP_KERNEL);
4302 if (!keypad_data) {
4303 diff --git a/drivers/input/keyboard/twl4030_keypad.c b/drivers/input/keyboard/twl4030_keypad.c
4304 index af3a6824f1a4d..77e0743a3cf85 100644
4305 --- a/drivers/input/keyboard/twl4030_keypad.c
4306 +++ b/drivers/input/keyboard/twl4030_keypad.c
4307 @@ -50,7 +50,7 @@ struct twl4030_keypad {
4308 bool autorepeat;
4309 unsigned int n_rows;
4310 unsigned int n_cols;
4311 - unsigned int irq;
4312 + int irq;
4313
4314 struct device *dbg_dev;
4315 struct input_dev *input;
4316 @@ -376,10 +376,8 @@ static int twl4030_kp_probe(struct platform_device *pdev)
4317 }
4318
4319 kp->irq = platform_get_irq(pdev, 0);
4320 - if (!kp->irq) {
4321 - dev_err(&pdev->dev, "no keyboard irq assigned\n");
4322 - return -EINVAL;
4323 - }
4324 + if (kp->irq < 0)
4325 + return kp->irq;
4326
4327 error = matrix_keypad_build_keymap(keymap_data, NULL,
4328 TWL4030_MAX_ROWS,
4329 diff --git a/drivers/input/serio/sun4i-ps2.c b/drivers/input/serio/sun4i-ps2.c
4330 index a681a2c04e399..f15ed3dcdb9b2 100644
4331 --- a/drivers/input/serio/sun4i-ps2.c
4332 +++ b/drivers/input/serio/sun4i-ps2.c
4333 @@ -211,7 +211,6 @@ static int sun4i_ps2_probe(struct platform_device *pdev)
4334 struct sun4i_ps2data *drvdata;
4335 struct serio *serio;
4336 struct device *dev = &pdev->dev;
4337 - unsigned int irq;
4338 int error;
4339
4340 drvdata = kzalloc(sizeof(struct sun4i_ps2data), GFP_KERNEL);
4341 @@ -264,14 +263,12 @@ static int sun4i_ps2_probe(struct platform_device *pdev)
4342 writel(0, drvdata->reg_base + PS2_REG_GCTL);
4343
4344 /* Get IRQ for the device */
4345 - irq = platform_get_irq(pdev, 0);
4346 - if (!irq) {
4347 - dev_err(dev, "no IRQ found\n");
4348 - error = -ENXIO;
4349 + drvdata->irq = platform_get_irq(pdev, 0);
4350 + if (drvdata->irq < 0) {
4351 + error = drvdata->irq;
4352 goto err_disable_clk;
4353 }
4354
4355 - drvdata->irq = irq;
4356 drvdata->serio = serio;
4357 drvdata->dev = dev;
4358
4359 diff --git a/drivers/input/touchscreen/imx6ul_tsc.c b/drivers/input/touchscreen/imx6ul_tsc.c
4360 index 9ed258854349b..5e6ba5c4eca2a 100644
4361 --- a/drivers/input/touchscreen/imx6ul_tsc.c
4362 +++ b/drivers/input/touchscreen/imx6ul_tsc.c
4363 @@ -530,20 +530,25 @@ static int __maybe_unused imx6ul_tsc_resume(struct device *dev)
4364
4365 mutex_lock(&input_dev->mutex);
4366
4367 - if (input_dev->users) {
4368 - retval = clk_prepare_enable(tsc->adc_clk);
4369 - if (retval)
4370 - goto out;
4371 -
4372 - retval = clk_prepare_enable(tsc->tsc_clk);
4373 - if (retval) {
4374 - clk_disable_unprepare(tsc->adc_clk);
4375 - goto out;
4376 - }
4377 + if (!input_dev->users)
4378 + goto out;
4379
4380 - retval = imx6ul_tsc_init(tsc);
4381 + retval = clk_prepare_enable(tsc->adc_clk);
4382 + if (retval)
4383 + goto out;
4384 +
4385 + retval = clk_prepare_enable(tsc->tsc_clk);
4386 + if (retval) {
4387 + clk_disable_unprepare(tsc->adc_clk);
4388 + goto out;
4389 }
4390
4391 + retval = imx6ul_tsc_init(tsc);
4392 + if (retval) {
4393 + clk_disable_unprepare(tsc->tsc_clk);
4394 + clk_disable_unprepare(tsc->adc_clk);
4395 + goto out;
4396 + }
4397 out:
4398 mutex_unlock(&input_dev->mutex);
4399 return retval;
4400 diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen/stmfts.c
4401 index b6f95f20f9244..cd8805d71d977 100644
4402 --- a/drivers/input/touchscreen/stmfts.c
4403 +++ b/drivers/input/touchscreen/stmfts.c
4404 @@ -479,7 +479,7 @@ static ssize_t stmfts_sysfs_hover_enable_write(struct device *dev,
4405
4406 mutex_lock(&sdata->mutex);
4407
4408 - if (value & sdata->hover_enabled)
4409 + if (value && sdata->hover_enabled)
4410 goto out;
4411
4412 if (sdata->running)
4413 diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
4414 index 7543e395a2c64..a2ebc75af8c79 100644
4415 --- a/drivers/lightnvm/core.c
4416 +++ b/drivers/lightnvm/core.c
4417 @@ -1316,8 +1316,9 @@ static long nvm_ioctl_get_devices(struct file *file, void __user *arg)
4418 strlcpy(info->bmname, "gennvm", sizeof(info->bmname));
4419 i++;
4420
4421 - if (i > 31) {
4422 - pr_err("max 31 devices can be reported.\n");
4423 + if (i >= ARRAY_SIZE(devices->info)) {
4424 + pr_err("max %zd devices can be reported.\n",
4425 + ARRAY_SIZE(devices->info));
4426 break;
4427 }
4428 }
4429 diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
4430 index 0b821a5b2db84..3e7d4b20ab34f 100644
4431 --- a/drivers/mailbox/mailbox.c
4432 +++ b/drivers/mailbox/mailbox.c
4433 @@ -82,9 +82,12 @@ static void msg_submit(struct mbox_chan *chan)
4434 exit:
4435 spin_unlock_irqrestore(&chan->lock, flags);
4436
4437 - if (!err && (chan->txdone_method & TXDONE_BY_POLL))
4438 - /* kick start the timer immediately to avoid delays */
4439 - hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
4440 + /* kick start the timer immediately to avoid delays */
4441 + if (!err && (chan->txdone_method & TXDONE_BY_POLL)) {
4442 + /* but only if not already active */
4443 + if (!hrtimer_active(&chan->mbox->poll_hrt))
4444 + hrtimer_start(&chan->mbox->poll_hrt, 0, HRTIMER_MODE_REL);
4445 + }
4446 }
4447
4448 static void tx_tick(struct mbox_chan *chan, int r)
4449 @@ -122,11 +125,10 @@ static enum hrtimer_restart txdone_hrtimer(struct hrtimer *hrtimer)
4450 struct mbox_chan *chan = &mbox->chans[i];
4451
4452 if (chan->active_req && chan->cl) {
4453 + resched = true;
4454 txdone = chan->mbox->ops->last_tx_done(chan);
4455 if (txdone)
4456 tx_tick(chan, 0);
4457 - else
4458 - resched = true;
4459 }
4460 }
4461
4462 diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c
4463 index 9a6ce9f5a7db5..3c8b365ce635a 100644
4464 --- a/drivers/mailbox/mtk-cmdq-mailbox.c
4465 +++ b/drivers/mailbox/mtk-cmdq-mailbox.c
4466 @@ -70,7 +70,7 @@ struct cmdq_task {
4467 struct cmdq {
4468 struct mbox_controller mbox;
4469 void __iomem *base;
4470 - u32 irq;
4471 + int irq;
4472 u32 thread_nr;
4473 u32 irq_mask;
4474 struct cmdq_thread *thread;
4475 @@ -474,10 +474,8 @@ static int cmdq_probe(struct platform_device *pdev)
4476 }
4477
4478 cmdq->irq = platform_get_irq(pdev, 0);
4479 - if (!cmdq->irq) {
4480 - dev_err(dev, "failed to get irq\n");
4481 - return -EINVAL;
4482 - }
4483 + if (cmdq->irq < 0)
4484 + return cmdq->irq;
4485
4486 cmdq->thread_nr = (u32)(unsigned long)of_device_get_match_data(dev);
4487 cmdq->irq_mask = GENMASK(cmdq->thread_nr - 1, 0);
4488 diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c
4489 index 3ad18246fcb3c..7227d03dbbea7 100644
4490 --- a/drivers/md/md-bitmap.c
4491 +++ b/drivers/md/md-bitmap.c
4492 @@ -1954,6 +1954,7 @@ out:
4493 }
4494 EXPORT_SYMBOL_GPL(md_bitmap_load);
4495
4496 +/* caller need to free returned bitmap with md_bitmap_free() */
4497 struct bitmap *get_bitmap_from_slot(struct mddev *mddev, int slot)
4498 {
4499 int rv = 0;
4500 @@ -2017,6 +2018,7 @@ int md_bitmap_copy_from_slot(struct mddev *mddev, int slot,
4501 md_bitmap_unplug(mddev->bitmap);
4502 *low = lo;
4503 *high = hi;
4504 + md_bitmap_free(bitmap);
4505
4506 return rv;
4507 }
4508 @@ -2620,4 +2622,3 @@ struct attribute_group md_bitmap_group = {
4509 .name = "bitmap",
4510 .attrs = md_bitmap_attrs,
4511 };
4512 -
4513 diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c
4514 index d50737ec40394..afbbc552c3275 100644
4515 --- a/drivers/md/md-cluster.c
4516 +++ b/drivers/md/md-cluster.c
4517 @@ -1166,6 +1166,7 @@ static int resize_bitmaps(struct mddev *mddev, sector_t newsize, sector_t oldsiz
4518 * can't resize bitmap
4519 */
4520 goto out;
4521 + md_bitmap_free(bitmap);
4522 }
4523
4524 return 0;
4525 diff --git a/drivers/media/firewire/firedtv-fw.c b/drivers/media/firewire/firedtv-fw.c
4526 index 3f1ca40b9b987..8a8585261bb80 100644
4527 --- a/drivers/media/firewire/firedtv-fw.c
4528 +++ b/drivers/media/firewire/firedtv-fw.c
4529 @@ -272,8 +272,10 @@ static int node_probe(struct fw_unit *unit, const struct ieee1394_device_id *id)
4530
4531 name_len = fw_csr_string(unit->directory, CSR_MODEL,
4532 name, sizeof(name));
4533 - if (name_len < 0)
4534 - return name_len;
4535 + if (name_len < 0) {
4536 + err = name_len;
4537 + goto fail_free;
4538 + }
4539 for (i = ARRAY_SIZE(model_names); --i; )
4540 if (strlen(model_names[i]) <= name_len &&
4541 strncmp(name, model_names[i], name_len) == 0)
4542 diff --git a/drivers/media/i2c/m5mols/m5mols_core.c b/drivers/media/i2c/m5mols/m5mols_core.c
4543 index de295114ca482..21666d705e372 100644
4544 --- a/drivers/media/i2c/m5mols/m5mols_core.c
4545 +++ b/drivers/media/i2c/m5mols/m5mols_core.c
4546 @@ -764,7 +764,8 @@ static int m5mols_sensor_power(struct m5mols_info *info, bool enable)
4547
4548 ret = regulator_bulk_enable(ARRAY_SIZE(supplies), supplies);
4549 if (ret) {
4550 - info->set_power(&client->dev, 0);
4551 + if (info->set_power)
4552 + info->set_power(&client->dev, 0);
4553 return ret;
4554 }
4555
4556 diff --git a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5640.c
4557 index 266e947572c1e..be6c882dd1d54 100644
4558 --- a/drivers/media/i2c/ov5640.c
4559 +++ b/drivers/media/i2c/ov5640.c
4560 @@ -34,6 +34,8 @@
4561 #define OV5640_REG_SYS_RESET02 0x3002
4562 #define OV5640_REG_SYS_CLOCK_ENABLE02 0x3006
4563 #define OV5640_REG_SYS_CTRL0 0x3008
4564 +#define OV5640_REG_SYS_CTRL0_SW_PWDN 0x42
4565 +#define OV5640_REG_SYS_CTRL0_SW_PWUP 0x02
4566 #define OV5640_REG_CHIP_ID 0x300a
4567 #define OV5640_REG_IO_MIPI_CTRL00 0x300e
4568 #define OV5640_REG_PAD_OUTPUT_ENABLE01 0x3017
4569 @@ -272,8 +274,7 @@ static inline struct v4l2_subdev *ctrl_to_sd(struct v4l2_ctrl *ctrl)
4570 /* YUV422 UYVY VGA@30fps */
4571 static const struct reg_value ov5640_init_setting_30fps_VGA[] = {
4572 {0x3103, 0x11, 0, 0}, {0x3008, 0x82, 0, 5}, {0x3008, 0x42, 0, 0},
4573 - {0x3103, 0x03, 0, 0}, {0x3017, 0x00, 0, 0}, {0x3018, 0x00, 0, 0},
4574 - {0x3630, 0x36, 0, 0},
4575 + {0x3103, 0x03, 0, 0}, {0x3630, 0x36, 0, 0},
4576 {0x3631, 0x0e, 0, 0}, {0x3632, 0xe2, 0, 0}, {0x3633, 0x12, 0, 0},
4577 {0x3621, 0xe0, 0, 0}, {0x3704, 0xa0, 0, 0}, {0x3703, 0x5a, 0, 0},
4578 {0x3715, 0x78, 0, 0}, {0x3717, 0x01, 0, 0}, {0x370b, 0x60, 0, 0},
4579 @@ -740,7 +741,7 @@ static int ov5640_mod_reg(struct ov5640_dev *sensor, u16 reg,
4580 * +->| PLL Root Div | - reg 0x3037, bit 4
4581 * +-+------------+
4582 * | +---------+
4583 - * +->| Bit Div | - reg 0x3035, bits 0-3
4584 + * +->| Bit Div | - reg 0x3034, bits 0-3
4585 * +-+-------+
4586 * | +-------------+
4587 * +->| SCLK Div | - reg 0x3108, bits 0-1
4588 @@ -1109,6 +1110,12 @@ static int ov5640_load_regs(struct ov5640_dev *sensor,
4589 val = regs->val;
4590 mask = regs->mask;
4591
4592 + /* remain in power down mode for DVP */
4593 + if (regs->reg_addr == OV5640_REG_SYS_CTRL0 &&
4594 + val == OV5640_REG_SYS_CTRL0_SW_PWUP &&
4595 + sensor->ep.bus_type != V4L2_MBUS_CSI2_DPHY)
4596 + continue;
4597 +
4598 if (mask)
4599 ret = ov5640_mod_reg(sensor, reg_addr, mask, val);
4600 else
4601 @@ -1264,31 +1271,9 @@ static int ov5640_set_stream_dvp(struct ov5640_dev *sensor, bool on)
4602 if (ret)
4603 return ret;
4604
4605 - /*
4606 - * enable VSYNC/HREF/PCLK DVP control lines
4607 - * & D[9:6] DVP data lines
4608 - *
4609 - * PAD OUTPUT ENABLE 01
4610 - * - 6: VSYNC output enable
4611 - * - 5: HREF output enable
4612 - * - 4: PCLK output enable
4613 - * - [3:0]: D[9:6] output enable
4614 - */
4615 - ret = ov5640_write_reg(sensor,
4616 - OV5640_REG_PAD_OUTPUT_ENABLE01,
4617 - on ? 0x7f : 0);
4618 - if (ret)
4619 - return ret;
4620 -
4621 - /*
4622 - * enable D[5:0] DVP data lines
4623 - *
4624 - * PAD OUTPUT ENABLE 02
4625 - * - [7:2]: D[5:0] output enable
4626 - */
4627 - return ov5640_write_reg(sensor,
4628 - OV5640_REG_PAD_OUTPUT_ENABLE02,
4629 - on ? 0xfc : 0);
4630 + return ov5640_write_reg(sensor, OV5640_REG_SYS_CTRL0, on ?
4631 + OV5640_REG_SYS_CTRL0_SW_PWUP :
4632 + OV5640_REG_SYS_CTRL0_SW_PWDN);
4633 }
4634
4635 static int ov5640_set_stream_mipi(struct ov5640_dev *sensor, bool on)
4636 @@ -1987,6 +1972,95 @@ static void ov5640_set_power_off(struct ov5640_dev *sensor)
4637 clk_disable_unprepare(sensor->xclk);
4638 }
4639
4640 +static int ov5640_set_power_mipi(struct ov5640_dev *sensor, bool on)
4641 +{
4642 + int ret;
4643 +
4644 + if (!on) {
4645 + /* Reset MIPI bus settings to their default values. */
4646 + ov5640_write_reg(sensor, OV5640_REG_IO_MIPI_CTRL00, 0x58);
4647 + ov5640_write_reg(sensor, OV5640_REG_MIPI_CTRL00, 0x04);
4648 + ov5640_write_reg(sensor, OV5640_REG_PAD_OUTPUT00, 0x00);
4649 + return 0;
4650 + }
4651 +
4652 + /*
4653 + * Power up MIPI HS Tx and LS Rx; 2 data lanes mode
4654 + *
4655 + * 0x300e = 0x40
4656 + * [7:5] = 010 : 2 data lanes mode (see FIXME note in
4657 + * "ov5640_set_stream_mipi()")
4658 + * [4] = 0 : Power up MIPI HS Tx
4659 + * [3] = 0 : Power up MIPI LS Rx
4660 + * [2] = 0 : MIPI interface disabled
4661 + */
4662 + ret = ov5640_write_reg(sensor, OV5640_REG_IO_MIPI_CTRL00, 0x40);
4663 + if (ret)
4664 + return ret;
4665 +
4666 + /*
4667 + * Gate clock and set LP11 in 'no packets mode' (idle)
4668 + *
4669 + * 0x4800 = 0x24
4670 + * [5] = 1 : Gate clock when 'no packets'
4671 + * [2] = 1 : MIPI bus in LP11 when 'no packets'
4672 + */
4673 + ret = ov5640_write_reg(sensor, OV5640_REG_MIPI_CTRL00, 0x24);
4674 + if (ret)
4675 + return ret;
4676 +
4677 + /*
4678 + * Set data lanes and clock in LP11 when 'sleeping'
4679 + *
4680 + * 0x3019 = 0x70
4681 + * [6] = 1 : MIPI data lane 2 in LP11 when 'sleeping'
4682 + * [5] = 1 : MIPI data lane 1 in LP11 when 'sleeping'
4683 + * [4] = 1 : MIPI clock lane in LP11 when 'sleeping'
4684 + */
4685 + ret = ov5640_write_reg(sensor, OV5640_REG_PAD_OUTPUT00, 0x70);
4686 + if (ret)
4687 + return ret;
4688 +
4689 + /* Give lanes some time to coax into LP11 state. */
4690 + usleep_range(500, 1000);
4691 +
4692 + return 0;
4693 +}
4694 +
4695 +static int ov5640_set_power_dvp(struct ov5640_dev *sensor, bool on)
4696 +{
4697 + int ret;
4698 +
4699 + if (!on) {
4700 + /* Reset settings to their default values. */
4701 + ov5640_write_reg(sensor, OV5640_REG_PAD_OUTPUT_ENABLE01, 0x00);
4702 + ov5640_write_reg(sensor, OV5640_REG_PAD_OUTPUT_ENABLE02, 0x00);
4703 + return 0;
4704 + }
4705 +
4706 + /*
4707 + * enable VSYNC/HREF/PCLK DVP control lines
4708 + * & D[9:6] DVP data lines
4709 + *
4710 + * PAD OUTPUT ENABLE 01
4711 + * - 6: VSYNC output enable
4712 + * - 5: HREF output enable
4713 + * - 4: PCLK output enable
4714 + * - [3:0]: D[9:6] output enable
4715 + */
4716 + ret = ov5640_write_reg(sensor, OV5640_REG_PAD_OUTPUT_ENABLE01, 0x7f);
4717 + if (ret)
4718 + return ret;
4719 +
4720 + /*
4721 + * enable D[5:0] DVP data lines
4722 + *
4723 + * PAD OUTPUT ENABLE 02
4724 + * - [7:2]: D[5:0] output enable
4725 + */
4726 + return ov5640_write_reg(sensor, OV5640_REG_PAD_OUTPUT_ENABLE02, 0xfc);
4727 +}
4728 +
4729 static int ov5640_set_power(struct ov5640_dev *sensor, bool on)
4730 {
4731 int ret = 0;
4732 @@ -1999,67 +2073,17 @@ static int ov5640_set_power(struct ov5640_dev *sensor, bool on)
4733 ret = ov5640_restore_mode(sensor);
4734 if (ret)
4735 goto power_off;
4736 + }
4737
4738 - /* We're done here for DVP bus, while CSI-2 needs setup. */
4739 - if (sensor->ep.bus_type != V4L2_MBUS_CSI2_DPHY)
4740 - return 0;
4741 -
4742 - /*
4743 - * Power up MIPI HS Tx and LS Rx; 2 data lanes mode
4744 - *
4745 - * 0x300e = 0x40
4746 - * [7:5] = 010 : 2 data lanes mode (see FIXME note in
4747 - * "ov5640_set_stream_mipi()")
4748 - * [4] = 0 : Power up MIPI HS Tx
4749 - * [3] = 0 : Power up MIPI LS Rx
4750 - * [2] = 0 : MIPI interface disabled
4751 - */
4752 - ret = ov5640_write_reg(sensor,
4753 - OV5640_REG_IO_MIPI_CTRL00, 0x40);
4754 - if (ret)
4755 - goto power_off;
4756 -
4757 - /*
4758 - * Gate clock and set LP11 in 'no packets mode' (idle)
4759 - *
4760 - * 0x4800 = 0x24
4761 - * [5] = 1 : Gate clock when 'no packets'
4762 - * [2] = 1 : MIPI bus in LP11 when 'no packets'
4763 - */
4764 - ret = ov5640_write_reg(sensor,
4765 - OV5640_REG_MIPI_CTRL00, 0x24);
4766 - if (ret)
4767 - goto power_off;
4768 -
4769 - /*
4770 - * Set data lanes and clock in LP11 when 'sleeping'
4771 - *
4772 - * 0x3019 = 0x70
4773 - * [6] = 1 : MIPI data lane 2 in LP11 when 'sleeping'
4774 - * [5] = 1 : MIPI data lane 1 in LP11 when 'sleeping'
4775 - * [4] = 1 : MIPI clock lane in LP11 when 'sleeping'
4776 - */
4777 - ret = ov5640_write_reg(sensor,
4778 - OV5640_REG_PAD_OUTPUT00, 0x70);
4779 - if (ret)
4780 - goto power_off;
4781 -
4782 - /* Give lanes some time to coax into LP11 state. */
4783 - usleep_range(500, 1000);
4784 -
4785 - } else {
4786 - if (sensor->ep.bus_type == V4L2_MBUS_CSI2_DPHY) {
4787 - /* Reset MIPI bus settings to their default values. */
4788 - ov5640_write_reg(sensor,
4789 - OV5640_REG_IO_MIPI_CTRL00, 0x58);
4790 - ov5640_write_reg(sensor,
4791 - OV5640_REG_MIPI_CTRL00, 0x04);
4792 - ov5640_write_reg(sensor,
4793 - OV5640_REG_PAD_OUTPUT00, 0x00);
4794 - }
4795 + if (sensor->ep.bus_type == V4L2_MBUS_CSI2_DPHY)
4796 + ret = ov5640_set_power_mipi(sensor, on);
4797 + else
4798 + ret = ov5640_set_power_dvp(sensor, on);
4799 + if (ret)
4800 + goto power_off;
4801
4802 + if (!on)
4803 ov5640_set_power_off(sensor);
4804 - }
4805
4806 return 0;
4807
4808 diff --git a/drivers/media/i2c/tc358743.c b/drivers/media/i2c/tc358743.c
4809 index dbbab75f135ec..cff99cf61ed4d 100644
4810 --- a/drivers/media/i2c/tc358743.c
4811 +++ b/drivers/media/i2c/tc358743.c
4812 @@ -919,8 +919,8 @@ static const struct cec_adap_ops tc358743_cec_adap_ops = {
4813 .adap_monitor_all_enable = tc358743_cec_adap_monitor_all_enable,
4814 };
4815
4816 -static void tc358743_cec_isr(struct v4l2_subdev *sd, u16 intstatus,
4817 - bool *handled)
4818 +static void tc358743_cec_handler(struct v4l2_subdev *sd, u16 intstatus,
4819 + bool *handled)
4820 {
4821 struct tc358743_state *state = to_state(sd);
4822 unsigned int cec_rxint, cec_txint;
4823 @@ -953,7 +953,8 @@ static void tc358743_cec_isr(struct v4l2_subdev *sd, u16 intstatus,
4824 cec_transmit_attempt_done(state->cec_adap,
4825 CEC_TX_STATUS_ERROR);
4826 }
4827 - *handled = true;
4828 + if (handled)
4829 + *handled = true;
4830 }
4831 if ((intstatus & MASK_CEC_RINT) &&
4832 (cec_rxint & MASK_CECRIEND)) {
4833 @@ -968,7 +969,8 @@ static void tc358743_cec_isr(struct v4l2_subdev *sd, u16 intstatus,
4834 msg.msg[i] = v & 0xff;
4835 }
4836 cec_received_msg(state->cec_adap, &msg);
4837 - *handled = true;
4838 + if (handled)
4839 + *handled = true;
4840 }
4841 i2c_wr16(sd, INTSTATUS,
4842 intstatus & (MASK_CEC_RINT | MASK_CEC_TINT));
4843 @@ -1432,7 +1434,7 @@ static int tc358743_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
4844
4845 #ifdef CONFIG_VIDEO_TC358743_CEC
4846 if (intstatus & (MASK_CEC_RINT | MASK_CEC_TINT)) {
4847 - tc358743_cec_isr(sd, intstatus, handled);
4848 + tc358743_cec_handler(sd, intstatus, handled);
4849 i2c_wr16(sd, INTSTATUS,
4850 intstatus & (MASK_CEC_RINT | MASK_CEC_TINT));
4851 intstatus &= ~(MASK_CEC_RINT | MASK_CEC_TINT);
4852 @@ -1461,7 +1463,7 @@ static int tc358743_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
4853 static irqreturn_t tc358743_irq_handler(int irq, void *dev_id)
4854 {
4855 struct tc358743_state *state = dev_id;
4856 - bool handled;
4857 + bool handled = false;
4858
4859 tc358743_isr(&state->sd, 0, &handled);
4860
4861 diff --git a/drivers/media/pci/bt8xx/bttv-driver.c b/drivers/media/pci/bt8xx/bttv-driver.c
4862 index a359da7773a90..ff2962cea6164 100644
4863 --- a/drivers/media/pci/bt8xx/bttv-driver.c
4864 +++ b/drivers/media/pci/bt8xx/bttv-driver.c
4865 @@ -4013,11 +4013,13 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id)
4866 btv->id = dev->device;
4867 if (pci_enable_device(dev)) {
4868 pr_warn("%d: Can't enable device\n", btv->c.nr);
4869 - return -EIO;
4870 + result = -EIO;
4871 + goto free_mem;
4872 }
4873 if (pci_set_dma_mask(dev, DMA_BIT_MASK(32))) {
4874 pr_warn("%d: No suitable DMA available\n", btv->c.nr);
4875 - return -EIO;
4876 + result = -EIO;
4877 + goto free_mem;
4878 }
4879 if (!request_mem_region(pci_resource_start(dev,0),
4880 pci_resource_len(dev,0),
4881 @@ -4025,7 +4027,8 @@ static int bttv_probe(struct pci_dev *dev, const struct pci_device_id *pci_id)
4882 pr_warn("%d: can't request iomem (0x%llx)\n",
4883 btv->c.nr,
4884 (unsigned long long)pci_resource_start(dev, 0));
4885 - return -EBUSY;
4886 + result = -EBUSY;
4887 + goto free_mem;
4888 }
4889 pci_set_master(dev);
4890 pci_set_command(dev);
4891 @@ -4211,6 +4214,10 @@ fail0:
4892 release_mem_region(pci_resource_start(btv->c.pci,0),
4893 pci_resource_len(btv->c.pci,0));
4894 pci_disable_device(btv->c.pci);
4895 +
4896 +free_mem:
4897 + bttvs[btv->c.nr] = NULL;
4898 + kfree(btv);
4899 return result;
4900 }
4901
4902 diff --git a/drivers/media/pci/saa7134/saa7134-tvaudio.c b/drivers/media/pci/saa7134/saa7134-tvaudio.c
4903 index 79e1afb710758..5cc4ef21f9d37 100644
4904 --- a/drivers/media/pci/saa7134/saa7134-tvaudio.c
4905 +++ b/drivers/media/pci/saa7134/saa7134-tvaudio.c
4906 @@ -683,7 +683,8 @@ int saa_dsp_writel(struct saa7134_dev *dev, int reg, u32 value)
4907 {
4908 int err;
4909
4910 - audio_dbg(2, "dsp write reg 0x%x = 0x%06x\n", reg << 2, value);
4911 + audio_dbg(2, "dsp write reg 0x%x = 0x%06x\n",
4912 + (reg << 2) & 0xffffffff, value);
4913 err = saa_dsp_wait_bit(dev,SAA7135_DSP_RWSTATE_WRR);
4914 if (err < 0)
4915 return err;
4916 diff --git a/drivers/media/platform/exynos4-is/fimc-isp.c b/drivers/media/platform/exynos4-is/fimc-isp.c
4917 index cde0d254ec1c4..a77c49b185115 100644
4918 --- a/drivers/media/platform/exynos4-is/fimc-isp.c
4919 +++ b/drivers/media/platform/exynos4-is/fimc-isp.c
4920 @@ -305,8 +305,10 @@ static int fimc_isp_subdev_s_power(struct v4l2_subdev *sd, int on)
4921
4922 if (on) {
4923 ret = pm_runtime_get_sync(&is->pdev->dev);
4924 - if (ret < 0)
4925 + if (ret < 0) {
4926 + pm_runtime_put(&is->pdev->dev);
4927 return ret;
4928 + }
4929 set_bit(IS_ST_PWR_ON, &is->state);
4930
4931 ret = fimc_is_start_firmware(is);
4932 diff --git a/drivers/media/platform/exynos4-is/fimc-lite.c b/drivers/media/platform/exynos4-is/fimc-lite.c
4933 index e87c6a09205bd..efd06621951c7 100644
4934 --- a/drivers/media/platform/exynos4-is/fimc-lite.c
4935 +++ b/drivers/media/platform/exynos4-is/fimc-lite.c
4936 @@ -470,7 +470,7 @@ static int fimc_lite_open(struct file *file)
4937 set_bit(ST_FLITE_IN_USE, &fimc->state);
4938 ret = pm_runtime_get_sync(&fimc->pdev->dev);
4939 if (ret < 0)
4940 - goto unlock;
4941 + goto err_pm;
4942
4943 ret = v4l2_fh_open(file);
4944 if (ret < 0)
4945 diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c
4946 index 9c31d950cddf7..a07d796f63df0 100644
4947 --- a/drivers/media/platform/exynos4-is/media-dev.c
4948 +++ b/drivers/media/platform/exynos4-is/media-dev.c
4949 @@ -484,8 +484,10 @@ static int fimc_md_register_sensor_entities(struct fimc_md *fmd)
4950 return -ENXIO;
4951
4952 ret = pm_runtime_get_sync(fmd->pmf);
4953 - if (ret < 0)
4954 + if (ret < 0) {
4955 + pm_runtime_put(fmd->pmf);
4956 return ret;
4957 + }
4958
4959 fmd->num_sensors = 0;
4960
4961 @@ -1268,11 +1270,9 @@ static int fimc_md_get_pinctrl(struct fimc_md *fmd)
4962 if (IS_ERR(pctl->state_default))
4963 return PTR_ERR(pctl->state_default);
4964
4965 + /* PINCTRL_STATE_IDLE is optional */
4966 pctl->state_idle = pinctrl_lookup_state(pctl->pinctrl,
4967 PINCTRL_STATE_IDLE);
4968 - if (IS_ERR(pctl->state_idle))
4969 - return PTR_ERR(pctl->state_idle);
4970 -
4971 return 0;
4972 }
4973
4974 diff --git a/drivers/media/platform/exynos4-is/mipi-csis.c b/drivers/media/platform/exynos4-is/mipi-csis.c
4975 index 540151bbf58f2..1aac167abb175 100644
4976 --- a/drivers/media/platform/exynos4-is/mipi-csis.c
4977 +++ b/drivers/media/platform/exynos4-is/mipi-csis.c
4978 @@ -510,8 +510,10 @@ static int s5pcsis_s_stream(struct v4l2_subdev *sd, int enable)
4979 if (enable) {
4980 s5pcsis_clear_counters(state);
4981 ret = pm_runtime_get_sync(&state->pdev->dev);
4982 - if (ret && ret != 1)
4983 + if (ret && ret != 1) {
4984 + pm_runtime_put_noidle(&state->pdev->dev);
4985 return ret;
4986 + }
4987 }
4988
4989 mutex_lock(&state->lock);
4990 diff --git a/drivers/media/platform/mx2_emmaprp.c b/drivers/media/platform/mx2_emmaprp.c
4991 index 27779b75df543..ac112cf06ab31 100644
4992 --- a/drivers/media/platform/mx2_emmaprp.c
4993 +++ b/drivers/media/platform/mx2_emmaprp.c
4994 @@ -852,8 +852,11 @@ static int emmaprp_probe(struct platform_device *pdev)
4995 platform_set_drvdata(pdev, pcdev);
4996
4997 irq = platform_get_irq(pdev, 0);
4998 - if (irq < 0)
4999 - return irq;
5000 + if (irq < 0) {
5001 + ret = irq;
5002 + goto rel_vdev;
5003 + }
5004 +
5005 ret = devm_request_irq(&pdev->dev, irq, emmaprp_irq, 0,
5006 dev_name(&pdev->dev), pcdev);
5007 if (ret)
5008 diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c
5009 index 327c5716922ac..dce6b3685e135 100644
5010 --- a/drivers/media/platform/omap3isp/isp.c
5011 +++ b/drivers/media/platform/omap3isp/isp.c
5012 @@ -2330,8 +2330,10 @@ static int isp_probe(struct platform_device *pdev)
5013 mem = platform_get_resource(pdev, IORESOURCE_MEM, i);
5014 isp->mmio_base[map_idx] =
5015 devm_ioremap_resource(isp->dev, mem);
5016 - if (IS_ERR(isp->mmio_base[map_idx]))
5017 - return PTR_ERR(isp->mmio_base[map_idx]);
5018 + if (IS_ERR(isp->mmio_base[map_idx])) {
5019 + ret = PTR_ERR(isp->mmio_base[map_idx]);
5020 + goto error;
5021 + }
5022 }
5023
5024 ret = isp_get_clocks(isp);
5025 diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c
5026 index 008afb85023be..3c5b9082ad723 100644
5027 --- a/drivers/media/platform/qcom/camss/camss-csiphy.c
5028 +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
5029 @@ -176,8 +176,10 @@ static int csiphy_set_power(struct v4l2_subdev *sd, int on)
5030 int ret;
5031
5032 ret = pm_runtime_get_sync(dev);
5033 - if (ret < 0)
5034 + if (ret < 0) {
5035 + pm_runtime_put_sync(dev);
5036 return ret;
5037 + }
5038
5039 ret = csiphy_set_clock_rates(csiphy);
5040 if (ret < 0) {
5041 diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
5042 index 84e982f259a06..bbc430a003443 100644
5043 --- a/drivers/media/platform/qcom/venus/core.c
5044 +++ b/drivers/media/platform/qcom/venus/core.c
5045 @@ -316,8 +316,10 @@ static int venus_probe(struct platform_device *pdev)
5046 goto err_core_deinit;
5047
5048 ret = pm_runtime_put_sync(dev);
5049 - if (ret)
5050 + if (ret) {
5051 + pm_runtime_get_noresume(dev);
5052 goto err_dev_unregister;
5053 + }
5054
5055 return 0;
5056
5057 @@ -328,6 +330,7 @@ err_core_deinit:
5058 err_venus_shutdown:
5059 venus_shutdown(core);
5060 err_runtime_disable:
5061 + pm_runtime_put_noidle(dev);
5062 pm_runtime_set_suspended(dev);
5063 pm_runtime_disable(dev);
5064 hfi_destroy(core);
5065 diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
5066 index 05b80a66e80ed..658825b4c4e8d 100644
5067 --- a/drivers/media/platform/qcom/venus/vdec.c
5068 +++ b/drivers/media/platform/qcom/venus/vdec.c
5069 @@ -993,8 +993,6 @@ static int vdec_stop_capture(struct venus_inst *inst)
5070 break;
5071 }
5072
5073 - INIT_LIST_HEAD(&inst->registeredbufs);
5074 -
5075 return ret;
5076 }
5077
5078 @@ -1091,6 +1089,14 @@ static int vdec_buf_init(struct vb2_buffer *vb)
5079 static void vdec_buf_cleanup(struct vb2_buffer *vb)
5080 {
5081 struct venus_inst *inst = vb2_get_drv_priv(vb->vb2_queue);
5082 + struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
5083 + struct venus_buffer *buf = to_venus_buffer(vbuf);
5084 +
5085 + mutex_lock(&inst->lock);
5086 + if (vb->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
5087 + if (!list_empty(&inst->registeredbufs))
5088 + list_del_init(&buf->reg_list);
5089 + mutex_unlock(&inst->lock);
5090
5091 inst->buf_count--;
5092 if (!inst->buf_count)
5093 diff --git a/drivers/media/platform/rcar-fcp.c b/drivers/media/platform/rcar-fcp.c
5094 index 5c6b00737fe75..05c712e00a2a7 100644
5095 --- a/drivers/media/platform/rcar-fcp.c
5096 +++ b/drivers/media/platform/rcar-fcp.c
5097 @@ -103,8 +103,10 @@ int rcar_fcp_enable(struct rcar_fcp_device *fcp)
5098 return 0;
5099
5100 ret = pm_runtime_get_sync(fcp->dev);
5101 - if (ret < 0)
5102 + if (ret < 0) {
5103 + pm_runtime_put_noidle(fcp->dev);
5104 return ret;
5105 + }
5106
5107 return 0;
5108 }
5109 diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c b/drivers/media/platform/rcar-vin/rcar-csi2.c
5110 index c14af1b929dff..d27eccfa57cae 100644
5111 --- a/drivers/media/platform/rcar-vin/rcar-csi2.c
5112 +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c
5113 @@ -361,7 +361,6 @@ struct rcar_csi2 {
5114 struct media_pad pads[NR_OF_RCAR_CSI2_PAD];
5115
5116 struct v4l2_async_notifier notifier;
5117 - struct v4l2_async_subdev asd;
5118 struct v4l2_subdev *remote;
5119
5120 struct v4l2_mbus_framefmt mf;
5121 @@ -810,6 +809,8 @@ static int rcsi2_parse_v4l2(struct rcar_csi2 *priv,
5122
5123 static int rcsi2_parse_dt(struct rcar_csi2 *priv)
5124 {
5125 + struct v4l2_async_subdev *asd;
5126 + struct fwnode_handle *fwnode;
5127 struct device_node *ep;
5128 struct v4l2_fwnode_endpoint v4l2_ep = { .bus_type = 0 };
5129 int ret;
5130 @@ -833,24 +834,19 @@ static int rcsi2_parse_dt(struct rcar_csi2 *priv)
5131 return ret;
5132 }
5133
5134 - priv->asd.match.fwnode =
5135 - fwnode_graph_get_remote_endpoint(of_fwnode_handle(ep));
5136 - priv->asd.match_type = V4L2_ASYNC_MATCH_FWNODE;
5137 -
5138 + fwnode = fwnode_graph_get_remote_endpoint(of_fwnode_handle(ep));
5139 of_node_put(ep);
5140
5141 - v4l2_async_notifier_init(&priv->notifier);
5142 -
5143 - ret = v4l2_async_notifier_add_subdev(&priv->notifier, &priv->asd);
5144 - if (ret) {
5145 - fwnode_handle_put(priv->asd.match.fwnode);
5146 - return ret;
5147 - }
5148 + dev_dbg(priv->dev, "Found '%pOF'\n", to_of_node(fwnode));
5149
5150 + v4l2_async_notifier_init(&priv->notifier);
5151 priv->notifier.ops = &rcar_csi2_notify_ops;
5152
5153 - dev_dbg(priv->dev, "Found '%pOF'\n",
5154 - to_of_node(priv->asd.match.fwnode));
5155 + asd = v4l2_async_notifier_add_fwnode_subdev(&priv->notifier, fwnode,
5156 + sizeof(*asd));
5157 + fwnode_handle_put(fwnode);
5158 + if (IS_ERR(asd))
5159 + return PTR_ERR(asd);
5160
5161 ret = v4l2_async_subdev_notifier_register(&priv->subdev,
5162 &priv->notifier);
5163 diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c
5164 index 3cb29b2e0b2b1..e5f6360801082 100644
5165 --- a/drivers/media/platform/rcar-vin/rcar-dma.c
5166 +++ b/drivers/media/platform/rcar-vin/rcar-dma.c
5167 @@ -1334,8 +1334,10 @@ int rvin_set_channel_routing(struct rvin_dev *vin, u8 chsel)
5168 int ret;
5169
5170 ret = pm_runtime_get_sync(vin->dev);
5171 - if (ret < 0)
5172 + if (ret < 0) {
5173 + pm_runtime_put_noidle(vin->dev);
5174 return ret;
5175 + }
5176
5177 /* Make register writes take effect immediately. */
5178 vnmc = rvin_read(vin, VNMC_REG);
5179 diff --git a/drivers/media/platform/rcar_drif.c b/drivers/media/platform/rcar_drif.c
5180 index 0f267a237b424..af3c8d405509e 100644
5181 --- a/drivers/media/platform/rcar_drif.c
5182 +++ b/drivers/media/platform/rcar_drif.c
5183 @@ -185,7 +185,6 @@ struct rcar_drif_frame_buf {
5184 /* OF graph endpoint's V4L2 async data */
5185 struct rcar_drif_graph_ep {
5186 struct v4l2_subdev *subdev; /* Async matched subdev */
5187 - struct v4l2_async_subdev asd; /* Async sub-device descriptor */
5188 };
5189
5190 /* DMA buffer */
5191 @@ -1105,12 +1104,6 @@ static int rcar_drif_notify_bound(struct v4l2_async_notifier *notifier,
5192 struct rcar_drif_sdr *sdr =
5193 container_of(notifier, struct rcar_drif_sdr, notifier);
5194
5195 - if (sdr->ep.asd.match.fwnode !=
5196 - of_fwnode_handle(subdev->dev->of_node)) {
5197 - rdrif_err(sdr, "subdev %s cannot bind\n", subdev->name);
5198 - return -EINVAL;
5199 - }
5200 -
5201 v4l2_set_subdev_hostdata(subdev, sdr);
5202 sdr->ep.subdev = subdev;
5203 rdrif_dbg(sdr, "bound asd %s\n", subdev->name);
5204 @@ -1214,7 +1207,7 @@ static int rcar_drif_parse_subdevs(struct rcar_drif_sdr *sdr)
5205 {
5206 struct v4l2_async_notifier *notifier = &sdr->notifier;
5207 struct fwnode_handle *fwnode, *ep;
5208 - int ret;
5209 + struct v4l2_async_subdev *asd;
5210
5211 v4l2_async_notifier_init(notifier);
5212
5213 @@ -1223,26 +1216,21 @@ static int rcar_drif_parse_subdevs(struct rcar_drif_sdr *sdr)
5214 if (!ep)
5215 return 0;
5216
5217 + /* Get the endpoint properties */
5218 + rcar_drif_get_ep_properties(sdr, ep);
5219 +
5220 fwnode = fwnode_graph_get_remote_port_parent(ep);
5221 + fwnode_handle_put(ep);
5222 if (!fwnode) {
5223 dev_warn(sdr->dev, "bad remote port parent\n");
5224 - fwnode_handle_put(ep);
5225 return -EINVAL;
5226 }
5227
5228 - sdr->ep.asd.match.fwnode = fwnode;
5229 - sdr->ep.asd.match_type = V4L2_ASYNC_MATCH_FWNODE;
5230 - ret = v4l2_async_notifier_add_subdev(notifier, &sdr->ep.asd);
5231 - if (ret) {
5232 - fwnode_handle_put(fwnode);
5233 - return ret;
5234 - }
5235 -
5236 - /* Get the endpoint properties */
5237 - rcar_drif_get_ep_properties(sdr, ep);
5238 -
5239 + asd = v4l2_async_notifier_add_fwnode_subdev(notifier, fwnode,
5240 + sizeof(*asd));
5241 fwnode_handle_put(fwnode);
5242 - fwnode_handle_put(ep);
5243 + if (IS_ERR(asd))
5244 + return PTR_ERR(asd);
5245
5246 return 0;
5247 }
5248 diff --git a/drivers/media/platform/rockchip/rga/rga-buf.c b/drivers/media/platform/rockchip/rga/rga-buf.c
5249 index 36b821ccc1dba..bf9a75b75083b 100644
5250 --- a/drivers/media/platform/rockchip/rga/rga-buf.c
5251 +++ b/drivers/media/platform/rockchip/rga/rga-buf.c
5252 @@ -81,6 +81,7 @@ static int rga_buf_start_streaming(struct vb2_queue *q, unsigned int count)
5253
5254 ret = pm_runtime_get_sync(rga->dev);
5255 if (ret < 0) {
5256 + pm_runtime_put_noidle(rga->dev);
5257 rga_buf_return_buffers(q, VB2_BUF_STATE_QUEUED);
5258 return ret;
5259 }
5260 diff --git a/drivers/media/platform/s3c-camif/camif-core.c b/drivers/media/platform/s3c-camif/camif-core.c
5261 index c6fbcd7036d6d..ee624804862e2 100644
5262 --- a/drivers/media/platform/s3c-camif/camif-core.c
5263 +++ b/drivers/media/platform/s3c-camif/camif-core.c
5264 @@ -464,7 +464,7 @@ static int s3c_camif_probe(struct platform_device *pdev)
5265
5266 ret = camif_media_dev_init(camif);
5267 if (ret < 0)
5268 - goto err_alloc;
5269 + goto err_pm;
5270
5271 ret = camif_register_sensor(camif);
5272 if (ret < 0)
5273 @@ -498,10 +498,9 @@ err_sens:
5274 media_device_unregister(&camif->media_dev);
5275 media_device_cleanup(&camif->media_dev);
5276 camif_unregister_media_entities(camif);
5277 -err_alloc:
5278 +err_pm:
5279 pm_runtime_put(dev);
5280 pm_runtime_disable(dev);
5281 -err_pm:
5282 camif_clk_put(camif);
5283 err_clk:
5284 s3c_camif_unregister_subdev(camif);
5285 diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c b/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c
5286 index 7d52431c2c837..62d2320a72186 100644
5287 --- a/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c
5288 +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c
5289 @@ -79,8 +79,10 @@ int s5p_mfc_power_on(void)
5290 int i, ret = 0;
5291
5292 ret = pm_runtime_get_sync(pm->device);
5293 - if (ret < 0)
5294 + if (ret < 0) {
5295 + pm_runtime_put_noidle(pm->device);
5296 return ret;
5297 + }
5298
5299 /* clock control */
5300 for (i = 0; i < pm->num_clocks; i++) {
5301 diff --git a/drivers/media/platform/sti/bdisp/bdisp-v4l2.c b/drivers/media/platform/sti/bdisp/bdisp-v4l2.c
5302 index 675b5f2b4c2ee..a55ddf8d185d5 100644
5303 --- a/drivers/media/platform/sti/bdisp/bdisp-v4l2.c
5304 +++ b/drivers/media/platform/sti/bdisp/bdisp-v4l2.c
5305 @@ -1367,7 +1367,7 @@ static int bdisp_probe(struct platform_device *pdev)
5306 ret = pm_runtime_get_sync(dev);
5307 if (ret < 0) {
5308 dev_err(dev, "failed to set PM\n");
5309 - goto err_dbg;
5310 + goto err_pm;
5311 }
5312
5313 /* Filters */
5314 @@ -1395,7 +1395,6 @@ err_filter:
5315 bdisp_hw_free_filters(bdisp->dev);
5316 err_pm:
5317 pm_runtime_put(dev);
5318 -err_dbg:
5319 bdisp_debugfs_remove(bdisp);
5320 err_v4l2:
5321 v4l2_device_unregister(&bdisp->v4l2_dev);
5322 diff --git a/drivers/media/platform/sti/delta/delta-v4l2.c b/drivers/media/platform/sti/delta/delta-v4l2.c
5323 index 91369fb3ffaa4..2791107e641bc 100644
5324 --- a/drivers/media/platform/sti/delta/delta-v4l2.c
5325 +++ b/drivers/media/platform/sti/delta/delta-v4l2.c
5326 @@ -954,8 +954,10 @@ static void delta_run_work(struct work_struct *work)
5327 /* enable the hardware */
5328 if (!dec->pm) {
5329 ret = delta_get_sync(ctx);
5330 - if (ret)
5331 + if (ret) {
5332 + delta_put_autosuspend(ctx);
5333 goto err;
5334 + }
5335 }
5336
5337 /* decode this access unit */
5338 diff --git a/drivers/media/platform/sti/hva/hva-hw.c b/drivers/media/platform/sti/hva/hva-hw.c
5339 index 401aaafa17109..43f279e2a6a38 100644
5340 --- a/drivers/media/platform/sti/hva/hva-hw.c
5341 +++ b/drivers/media/platform/sti/hva/hva-hw.c
5342 @@ -272,6 +272,7 @@ static unsigned long int hva_hw_get_ip_version(struct hva_dev *hva)
5343
5344 if (pm_runtime_get_sync(dev) < 0) {
5345 dev_err(dev, "%s failed to get pm_runtime\n", HVA_PREFIX);
5346 + pm_runtime_put_noidle(dev);
5347 mutex_unlock(&hva->protect_mutex);
5348 return -EFAULT;
5349 }
5350 @@ -388,7 +389,7 @@ int hva_hw_probe(struct platform_device *pdev, struct hva_dev *hva)
5351 ret = pm_runtime_get_sync(dev);
5352 if (ret < 0) {
5353 dev_err(dev, "%s failed to set PM\n", HVA_PREFIX);
5354 - goto err_clk;
5355 + goto err_pm;
5356 }
5357
5358 /* check IP hardware version */
5359 @@ -553,6 +554,7 @@ void hva_hw_dump_regs(struct hva_dev *hva, struct seq_file *s)
5360
5361 if (pm_runtime_get_sync(dev) < 0) {
5362 seq_puts(s, "Cannot wake up IP\n");
5363 + pm_runtime_put_noidle(dev);
5364 mutex_unlock(&hva->protect_mutex);
5365 return;
5366 }
5367 diff --git a/drivers/media/platform/stm32/stm32-dcmi.c b/drivers/media/platform/stm32/stm32-dcmi.c
5368 index 9392e3409fba0..d41475f56ab54 100644
5369 --- a/drivers/media/platform/stm32/stm32-dcmi.c
5370 +++ b/drivers/media/platform/stm32/stm32-dcmi.c
5371 @@ -733,7 +733,7 @@ static int dcmi_start_streaming(struct vb2_queue *vq, unsigned int count)
5372 if (ret < 0) {
5373 dev_err(dcmi->dev, "%s: Failed to start streaming, cannot get sync (%d)\n",
5374 __func__, ret);
5375 - goto err_release_buffers;
5376 + goto err_pm_put;
5377 }
5378
5379 ret = media_pipeline_start(&dcmi->vdev->entity, &dcmi->pipeline);
5380 @@ -837,8 +837,6 @@ err_media_pipeline_stop:
5381
5382 err_pm_put:
5383 pm_runtime_put(dcmi->dev);
5384 -
5385 -err_release_buffers:
5386 spin_lock_irq(&dcmi->irqlock);
5387 /*
5388 * Return all buffers to vb2 in QUEUED state.
5389 diff --git a/drivers/media/platform/ti-vpe/vpe.c b/drivers/media/platform/ti-vpe/vpe.c
5390 index 8b14ba4a3d9ea..817bd13370eff 100644
5391 --- a/drivers/media/platform/ti-vpe/vpe.c
5392 +++ b/drivers/media/platform/ti-vpe/vpe.c
5393 @@ -2435,6 +2435,8 @@ static int vpe_runtime_get(struct platform_device *pdev)
5394
5395 r = pm_runtime_get_sync(&pdev->dev);
5396 WARN_ON(r < 0);
5397 + if (r)
5398 + pm_runtime_put_noidle(&pdev->dev);
5399 return r < 0 ? r : 0;
5400 }
5401
5402 diff --git a/drivers/media/platform/vsp1/vsp1_drv.c b/drivers/media/platform/vsp1/vsp1_drv.c
5403 index c650e45bb0ad1..dc62533cf32ce 100644
5404 --- a/drivers/media/platform/vsp1/vsp1_drv.c
5405 +++ b/drivers/media/platform/vsp1/vsp1_drv.c
5406 @@ -562,7 +562,12 @@ int vsp1_device_get(struct vsp1_device *vsp1)
5407 int ret;
5408
5409 ret = pm_runtime_get_sync(vsp1->dev);
5410 - return ret < 0 ? ret : 0;
5411 + if (ret < 0) {
5412 + pm_runtime_put_noidle(vsp1->dev);
5413 + return ret;
5414 + }
5415 +
5416 + return 0;
5417 }
5418
5419 /*
5420 @@ -845,12 +850,12 @@ static int vsp1_probe(struct platform_device *pdev)
5421 /* Configure device parameters based on the version register. */
5422 pm_runtime_enable(&pdev->dev);
5423
5424 - ret = pm_runtime_get_sync(&pdev->dev);
5425 + ret = vsp1_device_get(vsp1);
5426 if (ret < 0)
5427 goto done;
5428
5429 vsp1->version = vsp1_read(vsp1, VI6_IP_VERSION);
5430 - pm_runtime_put_sync(&pdev->dev);
5431 + vsp1_device_put(vsp1);
5432
5433 for (i = 0; i < ARRAY_SIZE(vsp1_device_infos); ++i) {
5434 if ((vsp1->version & VI6_IP_VERSION_MODEL_MASK) ==
5435 diff --git a/drivers/media/rc/ati_remote.c b/drivers/media/rc/ati_remote.c
5436 index 9cdef17b4793f..c12dda73cdd53 100644
5437 --- a/drivers/media/rc/ati_remote.c
5438 +++ b/drivers/media/rc/ati_remote.c
5439 @@ -835,6 +835,10 @@ static int ati_remote_probe(struct usb_interface *interface,
5440 err("%s: endpoint_in message size==0? \n", __func__);
5441 return -ENODEV;
5442 }
5443 + if (!usb_endpoint_is_int_out(endpoint_out)) {
5444 + err("%s: Unexpected endpoint_out\n", __func__);
5445 + return -ENODEV;
5446 + }
5447
5448 ati_remote = kzalloc(sizeof (struct ati_remote), GFP_KERNEL);
5449 rc_dev = rc_allocate_device(RC_DRIVER_SCANCODE);
5450 diff --git a/drivers/media/tuners/tuner-simple.c b/drivers/media/tuners/tuner-simple.c
5451 index b6e70fada3fb2..8fb186b25d6af 100644
5452 --- a/drivers/media/tuners/tuner-simple.c
5453 +++ b/drivers/media/tuners/tuner-simple.c
5454 @@ -500,7 +500,7 @@ static int simple_radio_bandswitch(struct dvb_frontend *fe, u8 *buffer)
5455 case TUNER_TENA_9533_DI:
5456 case TUNER_YMEC_TVF_5533MF:
5457 tuner_dbg("This tuner doesn't have FM. Most cards have a TEA5767 for FM\n");
5458 - return 0;
5459 + return -EINVAL;
5460 case TUNER_PHILIPS_FM1216ME_MK3:
5461 case TUNER_PHILIPS_FM1236_MK3:
5462 case TUNER_PHILIPS_FMD1216ME_MK3:
5463 @@ -702,7 +702,8 @@ static int simple_set_radio_freq(struct dvb_frontend *fe,
5464 TUNER_RATIO_SELECT_50; /* 50 kHz step */
5465
5466 /* Bandswitch byte */
5467 - simple_radio_bandswitch(fe, &buffer[0]);
5468 + if (simple_radio_bandswitch(fe, &buffer[0]))
5469 + return 0;
5470
5471 /* Convert from 1/16 kHz V4L steps to 1/20 MHz (=50 kHz) PLL steps
5472 freq * (1 Mhz / 16000 V4L steps) * (20 PLL steps / 1 MHz) =
5473 diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
5474 index e399b9fad7574..a30a8a731eda8 100644
5475 --- a/drivers/media/usb/uvc/uvc_ctrl.c
5476 +++ b/drivers/media/usb/uvc/uvc_ctrl.c
5477 @@ -773,12 +773,16 @@ static s32 uvc_get_le_value(struct uvc_control_mapping *mapping,
5478 offset &= 7;
5479 mask = ((1LL << bits) - 1) << offset;
5480
5481 - for (; bits > 0; data++) {
5482 + while (1) {
5483 u8 byte = *data & mask;
5484 value |= offset > 0 ? (byte >> offset) : (byte << (-offset));
5485 bits -= 8 - (offset > 0 ? offset : 0);
5486 + if (bits <= 0)
5487 + break;
5488 +
5489 offset -= 8;
5490 mask = (1 << bits) - 1;
5491 + data++;
5492 }
5493
5494 /* Sign-extend the value if needed. */
5495 diff --git a/drivers/media/usb/uvc/uvc_entity.c b/drivers/media/usb/uvc/uvc_entity.c
5496 index b4499cddeffe5..ca3a9c2eec271 100644
5497 --- a/drivers/media/usb/uvc/uvc_entity.c
5498 +++ b/drivers/media/usb/uvc/uvc_entity.c
5499 @@ -73,10 +73,45 @@ static int uvc_mc_init_entity(struct uvc_video_chain *chain,
5500 int ret;
5501
5502 if (UVC_ENTITY_TYPE(entity) != UVC_TT_STREAMING) {
5503 + u32 function;
5504 +
5505 v4l2_subdev_init(&entity->subdev, &uvc_subdev_ops);
5506 strscpy(entity->subdev.name, entity->name,
5507 sizeof(entity->subdev.name));
5508
5509 + switch (UVC_ENTITY_TYPE(entity)) {
5510 + case UVC_VC_SELECTOR_UNIT:
5511 + function = MEDIA_ENT_F_VID_MUX;
5512 + break;
5513 + case UVC_VC_PROCESSING_UNIT:
5514 + case UVC_VC_EXTENSION_UNIT:
5515 + /* For lack of a better option. */
5516 + function = MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER;
5517 + break;
5518 + case UVC_COMPOSITE_CONNECTOR:
5519 + case UVC_COMPONENT_CONNECTOR:
5520 + function = MEDIA_ENT_F_CONN_COMPOSITE;
5521 + break;
5522 + case UVC_SVIDEO_CONNECTOR:
5523 + function = MEDIA_ENT_F_CONN_SVIDEO;
5524 + break;
5525 + case UVC_ITT_CAMERA:
5526 + function = MEDIA_ENT_F_CAM_SENSOR;
5527 + break;
5528 + case UVC_TT_VENDOR_SPECIFIC:
5529 + case UVC_ITT_VENDOR_SPECIFIC:
5530 + case UVC_ITT_MEDIA_TRANSPORT_INPUT:
5531 + case UVC_OTT_VENDOR_SPECIFIC:
5532 + case UVC_OTT_DISPLAY:
5533 + case UVC_OTT_MEDIA_TRANSPORT_OUTPUT:
5534 + case UVC_EXTERNAL_VENDOR_SPECIFIC:
5535 + default:
5536 + function = MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN;
5537 + break;
5538 + }
5539 +
5540 + entity->subdev.entity.function = function;
5541 +
5542 ret = media_entity_pads_init(&entity->subdev.entity,
5543 entity->num_pads, entity->pads);
5544
5545 diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
5546 index 0335e69b70abe..5e6f3153b5ff8 100644
5547 --- a/drivers/media/usb/uvc/uvc_v4l2.c
5548 +++ b/drivers/media/usb/uvc/uvc_v4l2.c
5549 @@ -247,11 +247,41 @@ static int uvc_v4l2_try_format(struct uvc_streaming *stream,
5550 if (ret < 0)
5551 goto done;
5552
5553 + /* After the probe, update fmt with the values returned from
5554 + * negotiation with the device.
5555 + */
5556 + for (i = 0; i < stream->nformats; ++i) {
5557 + if (probe->bFormatIndex == stream->format[i].index) {
5558 + format = &stream->format[i];
5559 + break;
5560 + }
5561 + }
5562 +
5563 + if (i == stream->nformats) {
5564 + uvc_trace(UVC_TRACE_FORMAT, "Unknown bFormatIndex %u\n",
5565 + probe->bFormatIndex);
5566 + return -EINVAL;
5567 + }
5568 +
5569 + for (i = 0; i < format->nframes; ++i) {
5570 + if (probe->bFrameIndex == format->frame[i].bFrameIndex) {
5571 + frame = &format->frame[i];
5572 + break;
5573 + }
5574 + }
5575 +
5576 + if (i == format->nframes) {
5577 + uvc_trace(UVC_TRACE_FORMAT, "Unknown bFrameIndex %u\n",
5578 + probe->bFrameIndex);
5579 + return -EINVAL;
5580 + }
5581 +
5582 fmt->fmt.pix.width = frame->wWidth;
5583 fmt->fmt.pix.height = frame->wHeight;
5584 fmt->fmt.pix.field = V4L2_FIELD_NONE;
5585 fmt->fmt.pix.bytesperline = uvc_v4l2_get_bytesperline(format, frame);
5586 fmt->fmt.pix.sizeimage = probe->dwMaxVideoFrameSize;
5587 + fmt->fmt.pix.pixelformat = format->fcc;
5588 fmt->fmt.pix.colorspace = format->colorspace;
5589
5590 if (uvc_format != NULL)
5591 diff --git a/drivers/memory/fsl-corenet-cf.c b/drivers/memory/fsl-corenet-cf.c
5592 index 0b0ed72016da8..0309bd5a18008 100644
5593 --- a/drivers/memory/fsl-corenet-cf.c
5594 +++ b/drivers/memory/fsl-corenet-cf.c
5595 @@ -211,10 +211,8 @@ static int ccf_probe(struct platform_device *pdev)
5596 dev_set_drvdata(&pdev->dev, ccf);
5597
5598 irq = platform_get_irq(pdev, 0);
5599 - if (!irq) {
5600 - dev_err(&pdev->dev, "%s: no irq\n", __func__);
5601 - return -ENXIO;
5602 - }
5603 + if (irq < 0)
5604 + return irq;
5605
5606 ret = devm_request_irq(&pdev->dev, irq, ccf_irq, 0, pdev->name, ccf);
5607 if (ret) {
5608 diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
5609 index eff26c1b13940..27bc417029e11 100644
5610 --- a/drivers/memory/omap-gpmc.c
5611 +++ b/drivers/memory/omap-gpmc.c
5612 @@ -949,7 +949,7 @@ static int gpmc_cs_remap(int cs, u32 base)
5613 int ret;
5614 u32 old_base, size;
5615
5616 - if (cs > gpmc_cs_num) {
5617 + if (cs >= gpmc_cs_num) {
5618 pr_err("%s: requested chip-select is disabled\n", __func__);
5619 return -ENODEV;
5620 }
5621 @@ -984,7 +984,7 @@ int gpmc_cs_request(int cs, unsigned long size, unsigned long *base)
5622 struct resource *res = &gpmc->mem;
5623 int r = -1;
5624
5625 - if (cs > gpmc_cs_num) {
5626 + if (cs >= gpmc_cs_num) {
5627 pr_err("%s: requested chip-select is disabled\n", __func__);
5628 return -ENODEV;
5629 }
5630 @@ -2274,6 +2274,10 @@ static void gpmc_probe_dt_children(struct platform_device *pdev)
5631 }
5632 }
5633 #else
5634 +void gpmc_read_settings_dt(struct device_node *np, struct gpmc_settings *p)
5635 +{
5636 + memset(p, 0, sizeof(*p));
5637 +}
5638 static int gpmc_probe_dt(struct platform_device *pdev)
5639 {
5640 return 0;
5641 diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c
5642 index 154270f8d8d78..bbcde58e2a11e 100644
5643 --- a/drivers/mfd/sm501.c
5644 +++ b/drivers/mfd/sm501.c
5645 @@ -1424,8 +1424,14 @@ static int sm501_plat_probe(struct platform_device *dev)
5646 goto err_claim;
5647 }
5648
5649 - return sm501_init_dev(sm);
5650 + ret = sm501_init_dev(sm);
5651 + if (ret)
5652 + goto err_unmap;
5653 +
5654 + return 0;
5655
5656 + err_unmap:
5657 + iounmap(sm->regs);
5658 err_claim:
5659 release_resource(sm->regs_claim);
5660 kfree(sm->regs_claim);
5661 diff --git a/drivers/misc/cardreader/rtsx_pcr.c b/drivers/misc/cardreader/rtsx_pcr.c
5662 index 1958833b3b74e..4fd57052ddd3d 100644
5663 --- a/drivers/misc/cardreader/rtsx_pcr.c
5664 +++ b/drivers/misc/cardreader/rtsx_pcr.c
5665 @@ -1534,12 +1534,14 @@ static int rtsx_pci_probe(struct pci_dev *pcidev,
5666 ret = mfd_add_devices(&pcidev->dev, pcr->id, rtsx_pcr_cells,
5667 ARRAY_SIZE(rtsx_pcr_cells), NULL, 0, NULL);
5668 if (ret < 0)
5669 - goto disable_irq;
5670 + goto free_slots;
5671
5672 schedule_delayed_work(&pcr->idle_work, msecs_to_jiffies(200));
5673
5674 return 0;
5675
5676 +free_slots:
5677 + kfree(pcr->slots);
5678 disable_irq:
5679 free_irq(pcr->irq, (void *)pcr);
5680 disable_msi:
5681 diff --git a/drivers/misc/eeprom/at25.c b/drivers/misc/eeprom/at25.c
5682 index cde9a2fc13250..490ff49d11ede 100644
5683 --- a/drivers/misc/eeprom/at25.c
5684 +++ b/drivers/misc/eeprom/at25.c
5685 @@ -358,7 +358,7 @@ static int at25_probe(struct spi_device *spi)
5686 at25->nvmem_config.reg_read = at25_ee_read;
5687 at25->nvmem_config.reg_write = at25_ee_write;
5688 at25->nvmem_config.priv = at25;
5689 - at25->nvmem_config.stride = 4;
5690 + at25->nvmem_config.stride = 1;
5691 at25->nvmem_config.word_size = 1;
5692 at25->nvmem_config.size = chip.byte_len;
5693
5694 diff --git a/drivers/misc/mic/scif/scif_rma.c b/drivers/misc/mic/scif/scif_rma.c
5695 index 01e27682ea303..a486c6c7f4077 100644
5696 --- a/drivers/misc/mic/scif/scif_rma.c
5697 +++ b/drivers/misc/mic/scif/scif_rma.c
5698 @@ -1381,6 +1381,8 @@ retry:
5699 (prot & SCIF_PROT_WRITE) ? FOLL_WRITE : 0,
5700 pinned_pages->pages);
5701 if (nr_pages != pinned_pages->nr_pages) {
5702 + if (pinned_pages->nr_pages < 0)
5703 + pinned_pages->nr_pages = 0;
5704 if (try_upgrade) {
5705 if (ulimit)
5706 __scif_dec_pinned_vm_lock(mm, nr_pages);
5707 @@ -1400,7 +1402,6 @@ retry:
5708
5709 if (pinned_pages->nr_pages < nr_pages) {
5710 err = -EFAULT;
5711 - pinned_pages->nr_pages = nr_pages;
5712 goto dec_pinned;
5713 }
5714
5715 @@ -1413,7 +1414,6 @@ dec_pinned:
5716 __scif_dec_pinned_vm_lock(mm, nr_pages);
5717 /* Something went wrong! Rollback */
5718 error_unmap:
5719 - pinned_pages->nr_pages = nr_pages;
5720 scif_destroy_pinned_pages(pinned_pages);
5721 *pages = NULL;
5722 dev_dbg(scif_info.mdev.this_device,
5723 diff --git a/drivers/misc/mic/vop/vop_main.c b/drivers/misc/mic/vop/vop_main.c
5724 index 85942f6717c57..8aadc6055df17 100644
5725 --- a/drivers/misc/mic/vop/vop_main.c
5726 +++ b/drivers/misc/mic/vop/vop_main.c
5727 @@ -320,7 +320,7 @@ static struct virtqueue *vop_find_vq(struct virtio_device *dev,
5728 /* First assign the vring's allocated in host memory */
5729 vqconfig = _vop_vq_config(vdev->desc) + index;
5730 memcpy_fromio(&config, vqconfig, sizeof(config));
5731 - _vr_size = vring_size(le16_to_cpu(config.num), MIC_VIRTIO_RING_ALIGN);
5732 + _vr_size = round_up(vring_size(le16_to_cpu(config.num), MIC_VIRTIO_RING_ALIGN), 4);
5733 vr_size = PAGE_ALIGN(_vr_size + sizeof(struct _mic_vring_info));
5734 va = vpdev->hw_ops->remap(vpdev, le64_to_cpu(config.address), vr_size);
5735 if (!va)
5736 diff --git a/drivers/misc/mic/vop/vop_vringh.c b/drivers/misc/mic/vop/vop_vringh.c
5737 index 30eac172f0170..7014ffe88632e 100644
5738 --- a/drivers/misc/mic/vop/vop_vringh.c
5739 +++ b/drivers/misc/mic/vop/vop_vringh.c
5740 @@ -296,7 +296,7 @@ static int vop_virtio_add_device(struct vop_vdev *vdev,
5741
5742 num = le16_to_cpu(vqconfig[i].num);
5743 mutex_init(&vvr->vr_mutex);
5744 - vr_size = PAGE_ALIGN(vring_size(num, MIC_VIRTIO_RING_ALIGN) +
5745 + vr_size = PAGE_ALIGN(round_up(vring_size(num, MIC_VIRTIO_RING_ALIGN), 4) +
5746 sizeof(struct _mic_vring_info));
5747 vr->va = (void *)
5748 __get_free_pages(GFP_KERNEL | __GFP_ZERO,
5749 @@ -308,7 +308,7 @@ static int vop_virtio_add_device(struct vop_vdev *vdev,
5750 goto err;
5751 }
5752 vr->len = vr_size;
5753 - vr->info = vr->va + vring_size(num, MIC_VIRTIO_RING_ALIGN);
5754 + vr->info = vr->va + round_up(vring_size(num, MIC_VIRTIO_RING_ALIGN), 4);
5755 vr->info->magic = cpu_to_le32(MIC_MAGIC + vdev->virtio_id + i);
5756 vr_addr = dma_map_single(&vpdev->dev, vr->va, vr_size,
5757 DMA_BIDIRECTIONAL);
5758 @@ -602,6 +602,7 @@ static int vop_virtio_copy_from_user(struct vop_vdev *vdev, void __user *ubuf,
5759 size_t partlen;
5760 bool dma = VOP_USE_DMA && vi->dma_ch;
5761 int err = 0;
5762 + size_t offset = 0;
5763
5764 if (dma) {
5765 dma_alignment = 1 << vi->dma_ch->device->copy_align;
5766 @@ -655,13 +656,20 @@ memcpy:
5767 * We are copying to IO below and should ideally use something
5768 * like copy_from_user_toio(..) if it existed.
5769 */
5770 - if (copy_from_user((void __force *)dbuf, ubuf, len)) {
5771 - err = -EFAULT;
5772 - dev_err(vop_dev(vdev), "%s %d err %d\n",
5773 - __func__, __LINE__, err);
5774 - goto err;
5775 + while (len) {
5776 + partlen = min_t(size_t, len, VOP_INT_DMA_BUF_SIZE);
5777 +
5778 + if (copy_from_user(vvr->buf, ubuf + offset, partlen)) {
5779 + err = -EFAULT;
5780 + dev_err(vop_dev(vdev), "%s %d err %d\n",
5781 + __func__, __LINE__, err);
5782 + goto err;
5783 + }
5784 + memcpy_toio(dbuf + offset, vvr->buf, partlen);
5785 + offset += partlen;
5786 + vdev->out_bytes += partlen;
5787 + len -= partlen;
5788 }
5789 - vdev->out_bytes += len;
5790 err = 0;
5791 err:
5792 vpdev->hw_ops->unmap(vpdev, dbuf);
5793 diff --git a/drivers/misc/vmw_vmci/vmci_queue_pair.c b/drivers/misc/vmw_vmci/vmci_queue_pair.c
5794 index 8531ae7811956..c49065887e8f5 100644
5795 --- a/drivers/misc/vmw_vmci/vmci_queue_pair.c
5796 +++ b/drivers/misc/vmw_vmci/vmci_queue_pair.c
5797 @@ -657,8 +657,9 @@ static int qp_host_get_user_memory(u64 produce_uva,
5798 if (retval < (int)produce_q->kernel_if->num_pages) {
5799 pr_debug("get_user_pages_fast(produce) failed (retval=%d)",
5800 retval);
5801 - qp_release_pages(produce_q->kernel_if->u.h.header_page,
5802 - retval, false);
5803 + if (retval > 0)
5804 + qp_release_pages(produce_q->kernel_if->u.h.header_page,
5805 + retval, false);
5806 err = VMCI_ERROR_NO_MEM;
5807 goto out;
5808 }
5809 @@ -670,8 +671,9 @@ static int qp_host_get_user_memory(u64 produce_uva,
5810 if (retval < (int)consume_q->kernel_if->num_pages) {
5811 pr_debug("get_user_pages_fast(consume) failed (retval=%d)",
5812 retval);
5813 - qp_release_pages(consume_q->kernel_if->u.h.header_page,
5814 - retval, false);
5815 + if (retval > 0)
5816 + qp_release_pages(consume_q->kernel_if->u.h.header_page,
5817 + retval, false);
5818 qp_release_pages(produce_q->kernel_if->u.h.header_page,
5819 produce_q->kernel_if->num_pages, false);
5820 err = VMCI_ERROR_NO_MEM;
5821 diff --git a/drivers/mmc/core/sdio_cis.c b/drivers/mmc/core/sdio_cis.c
5822 index e0655278c5c32..3efaa9534a777 100644
5823 --- a/drivers/mmc/core/sdio_cis.c
5824 +++ b/drivers/mmc/core/sdio_cis.c
5825 @@ -26,6 +26,9 @@ static int cistpl_vers_1(struct mmc_card *card, struct sdio_func *func,
5826 unsigned i, nr_strings;
5827 char **buffer, *string;
5828
5829 + if (size < 2)
5830 + return 0;
5831 +
5832 /* Find all null-terminated (including zero length) strings in
5833 the TPLLV1_INFO field. Trailing garbage is ignored. */
5834 buf += 2;
5835 diff --git a/drivers/mtd/lpddr/lpddr2_nvm.c b/drivers/mtd/lpddr/lpddr2_nvm.c
5836 index 0f1547f09d08b..72f5c7b300790 100644
5837 --- a/drivers/mtd/lpddr/lpddr2_nvm.c
5838 +++ b/drivers/mtd/lpddr/lpddr2_nvm.c
5839 @@ -393,6 +393,17 @@ static int lpddr2_nvm_lock(struct mtd_info *mtd, loff_t start_add,
5840 return lpddr2_nvm_do_block_op(mtd, start_add, len, LPDDR2_NVM_LOCK);
5841 }
5842
5843 +static const struct mtd_info lpddr2_nvm_mtd_info = {
5844 + .type = MTD_RAM,
5845 + .writesize = 1,
5846 + .flags = (MTD_CAP_NVRAM | MTD_POWERUP_LOCK),
5847 + ._read = lpddr2_nvm_read,
5848 + ._write = lpddr2_nvm_write,
5849 + ._erase = lpddr2_nvm_erase,
5850 + ._unlock = lpddr2_nvm_unlock,
5851 + ._lock = lpddr2_nvm_lock,
5852 +};
5853 +
5854 /*
5855 * lpddr2_nvm driver probe method
5856 */
5857 @@ -433,6 +444,7 @@ static int lpddr2_nvm_probe(struct platform_device *pdev)
5858 .pfow_base = OW_BASE_ADDRESS,
5859 .fldrv_priv = pcm_data,
5860 };
5861 +
5862 if (IS_ERR(map->virt))
5863 return PTR_ERR(map->virt);
5864
5865 @@ -444,22 +456,13 @@ static int lpddr2_nvm_probe(struct platform_device *pdev)
5866 return PTR_ERR(pcm_data->ctl_regs);
5867
5868 /* Populate mtd_info data structure */
5869 - *mtd = (struct mtd_info) {
5870 - .dev = { .parent = &pdev->dev },
5871 - .name = pdev->dev.init_name,
5872 - .type = MTD_RAM,
5873 - .priv = map,
5874 - .size = resource_size(add_range),
5875 - .erasesize = ERASE_BLOCKSIZE * pcm_data->bus_width,
5876 - .writesize = 1,
5877 - .writebufsize = WRITE_BUFFSIZE * pcm_data->bus_width,
5878 - .flags = (MTD_CAP_NVRAM | MTD_POWERUP_LOCK),
5879 - ._read = lpddr2_nvm_read,
5880 - ._write = lpddr2_nvm_write,
5881 - ._erase = lpddr2_nvm_erase,
5882 - ._unlock = lpddr2_nvm_unlock,
5883 - ._lock = lpddr2_nvm_lock,
5884 - };
5885 + *mtd = lpddr2_nvm_mtd_info;
5886 + mtd->dev.parent = &pdev->dev;
5887 + mtd->name = pdev->dev.init_name;
5888 + mtd->priv = map;
5889 + mtd->size = resource_size(add_range);
5890 + mtd->erasesize = ERASE_BLOCKSIZE * pcm_data->bus_width;
5891 + mtd->writebufsize = WRITE_BUFFSIZE * pcm_data->bus_width;
5892
5893 /* Verify the presence of the device looking for PFOW string */
5894 if (!lpddr2_nvm_pfow_present(map)) {
5895 diff --git a/drivers/mtd/mtdoops.c b/drivers/mtd/mtdoops.c
5896 index 4ced68be7ed7e..774970bfcf859 100644
5897 --- a/drivers/mtd/mtdoops.c
5898 +++ b/drivers/mtd/mtdoops.c
5899 @@ -279,12 +279,13 @@ static void mtdoops_do_dump(struct kmsg_dumper *dumper,
5900 kmsg_dump_get_buffer(dumper, true, cxt->oops_buf + MTDOOPS_HEADER_SIZE,
5901 record_size - MTDOOPS_HEADER_SIZE, NULL);
5902
5903 - /* Panics must be written immediately */
5904 - if (reason != KMSG_DUMP_OOPS)
5905 + if (reason != KMSG_DUMP_OOPS) {
5906 + /* Panics must be written immediately */
5907 mtdoops_write(cxt, 1);
5908 -
5909 - /* For other cases, schedule work to write it "nicely" */
5910 - schedule_work(&cxt->work_write);
5911 + } else {
5912 + /* For other cases, schedule work to write it "nicely" */
5913 + schedule_work(&cxt->work_write);
5914 + }
5915 }
5916
5917 static void mtdoops_notify_add(struct mtd_info *mtd)
5918 diff --git a/drivers/mtd/nand/raw/vf610_nfc.c b/drivers/mtd/nand/raw/vf610_nfc.c
5919 index 6b399a75f9aec..b6f114da57143 100644
5920 --- a/drivers/mtd/nand/raw/vf610_nfc.c
5921 +++ b/drivers/mtd/nand/raw/vf610_nfc.c
5922 @@ -850,8 +850,10 @@ static int vf610_nfc_probe(struct platform_device *pdev)
5923 }
5924
5925 of_id = of_match_device(vf610_nfc_dt_ids, &pdev->dev);
5926 - if (!of_id)
5927 - return -ENODEV;
5928 + if (!of_id) {
5929 + err = -ENODEV;
5930 + goto err_disable_clk;
5931 + }
5932
5933 nfc->variant = (enum vf610_nfc_variant)of_id->data;
5934
5935 diff --git a/drivers/mtd/nand/spi/gigadevice.c b/drivers/mtd/nand/spi/gigadevice.c
5936 index e99d425aa93f5..b13b39763a405 100644
5937 --- a/drivers/mtd/nand/spi/gigadevice.c
5938 +++ b/drivers/mtd/nand/spi/gigadevice.c
5939 @@ -21,7 +21,7 @@
5940 #define GD5FXGQ4UXFXXG_STATUS_ECC_UNCOR_ERROR (7 << 4)
5941
5942 static SPINAND_OP_VARIANTS(read_cache_variants,
5943 - SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0),
5944 + SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 1, NULL, 0),
5945 SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
5946 SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0),
5947 SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0),
5948 @@ -29,7 +29,7 @@ static SPINAND_OP_VARIANTS(read_cache_variants,
5949 SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0));
5950
5951 static SPINAND_OP_VARIANTS(read_cache_variants_f,
5952 - SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0),
5953 + SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 1, NULL, 0),
5954 SPINAND_PAGE_READ_FROM_CACHE_X4_OP_3A(0, 1, NULL, 0),
5955 SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0),
5956 SPINAND_PAGE_READ_FROM_CACHE_X2_OP_3A(0, 1, NULL, 0),
5957 @@ -201,7 +201,7 @@ static const struct spinand_info gigadevice_spinand_table[] = {
5958 SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
5959 &write_cache_variants,
5960 &update_cache_variants),
5961 - 0,
5962 + SPINAND_HAS_QE_BIT,
5963 SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout,
5964 gd5fxgq4xa_ecc_get_status)),
5965 SPINAND_INFO("GD5F2GQ4xA", 0xF2,
5966 @@ -210,7 +210,7 @@ static const struct spinand_info gigadevice_spinand_table[] = {
5967 SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
5968 &write_cache_variants,
5969 &update_cache_variants),
5970 - 0,
5971 + SPINAND_HAS_QE_BIT,
5972 SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout,
5973 gd5fxgq4xa_ecc_get_status)),
5974 SPINAND_INFO("GD5F4GQ4xA", 0xF4,
5975 @@ -219,7 +219,7 @@ static const struct spinand_info gigadevice_spinand_table[] = {
5976 SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
5977 &write_cache_variants,
5978 &update_cache_variants),
5979 - 0,
5980 + SPINAND_HAS_QE_BIT,
5981 SPINAND_ECCINFO(&gd5fxgq4xa_ooblayout,
5982 gd5fxgq4xa_ecc_get_status)),
5983 SPINAND_INFO("GD5F1GQ4UExxG", 0xd1,
5984 @@ -228,7 +228,7 @@ static const struct spinand_info gigadevice_spinand_table[] = {
5985 SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
5986 &write_cache_variants,
5987 &update_cache_variants),
5988 - 0,
5989 + SPINAND_HAS_QE_BIT,
5990 SPINAND_ECCINFO(&gd5fxgq4_variant2_ooblayout,
5991 gd5fxgq4uexxg_ecc_get_status)),
5992 SPINAND_INFO("GD5F1GQ4UFxxG", 0xb148,
5993 @@ -237,7 +237,7 @@ static const struct spinand_info gigadevice_spinand_table[] = {
5994 SPINAND_INFO_OP_VARIANTS(&read_cache_variants_f,
5995 &write_cache_variants,
5996 &update_cache_variants),
5997 - 0,
5998 + SPINAND_HAS_QE_BIT,
5999 SPINAND_ECCINFO(&gd5fxgq4_variant2_ooblayout,
6000 gd5fxgq4ufxxg_ecc_get_status)),
6001 };
6002 diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
6003 index e5c207ad3c77d..aaa7ed1dc97ee 100644
6004 --- a/drivers/net/can/flexcan.c
6005 +++ b/drivers/net/can/flexcan.c
6006 @@ -1232,18 +1232,23 @@ static int flexcan_chip_start(struct net_device *dev)
6007 return err;
6008 }
6009
6010 -/* flexcan_chip_stop
6011 +/* __flexcan_chip_stop
6012 *
6013 - * this functions is entered with clocks enabled
6014 + * this function is entered with clocks enabled
6015 */
6016 -static void flexcan_chip_stop(struct net_device *dev)
6017 +static int __flexcan_chip_stop(struct net_device *dev, bool disable_on_error)
6018 {
6019 struct flexcan_priv *priv = netdev_priv(dev);
6020 struct flexcan_regs __iomem *regs = priv->regs;
6021 + int err;
6022
6023 /* freeze + disable module */
6024 - flexcan_chip_freeze(priv);
6025 - flexcan_chip_disable(priv);
6026 + err = flexcan_chip_freeze(priv);
6027 + if (err && !disable_on_error)
6028 + return err;
6029 + err = flexcan_chip_disable(priv);
6030 + if (err && !disable_on_error)
6031 + goto out_chip_unfreeze;
6032
6033 /* Disable all interrupts */
6034 priv->write(0, &regs->imask2);
6035 @@ -1253,6 +1258,23 @@ static void flexcan_chip_stop(struct net_device *dev)
6036
6037 flexcan_transceiver_disable(priv);
6038 priv->can.state = CAN_STATE_STOPPED;
6039 +
6040 + return 0;
6041 +
6042 + out_chip_unfreeze:
6043 + flexcan_chip_unfreeze(priv);
6044 +
6045 + return err;
6046 +}
6047 +
6048 +static inline int flexcan_chip_stop_disable_on_error(struct net_device *dev)
6049 +{
6050 + return __flexcan_chip_stop(dev, true);
6051 +}
6052 +
6053 +static inline int flexcan_chip_stop(struct net_device *dev)
6054 +{
6055 + return __flexcan_chip_stop(dev, false);
6056 }
6057
6058 static int flexcan_open(struct net_device *dev)
6059 @@ -1341,7 +1363,7 @@ static int flexcan_close(struct net_device *dev)
6060
6061 netif_stop_queue(dev);
6062 can_rx_offload_disable(&priv->offload);
6063 - flexcan_chip_stop(dev);
6064 + flexcan_chip_stop_disable_on_error(dev);
6065
6066 can_rx_offload_del(&priv->offload);
6067 free_irq(dev->irq, dev);
6068 diff --git a/drivers/net/can/m_can/m_can_platform.c b/drivers/net/can/m_can/m_can_platform.c
6069 index 38ea5e600fb84..e6d0cb9ee02f0 100644
6070 --- a/drivers/net/can/m_can/m_can_platform.c
6071 +++ b/drivers/net/can/m_can/m_can_platform.c
6072 @@ -144,8 +144,6 @@ static int __maybe_unused m_can_runtime_suspend(struct device *dev)
6073 struct net_device *ndev = dev_get_drvdata(dev);
6074 struct m_can_classdev *mcan_class = netdev_priv(ndev);
6075
6076 - m_can_class_suspend(dev);
6077 -
6078 clk_disable_unprepare(mcan_class->cclk);
6079 clk_disable_unprepare(mcan_class->hclk);
6080
6081 diff --git a/drivers/net/dsa/realtek-smi-core.h b/drivers/net/dsa/realtek-smi-core.h
6082 index 9a63b51e1d82f..6f2dab7e33d65 100644
6083 --- a/drivers/net/dsa/realtek-smi-core.h
6084 +++ b/drivers/net/dsa/realtek-smi-core.h
6085 @@ -25,6 +25,9 @@ struct rtl8366_mib_counter {
6086 const char *name;
6087 };
6088
6089 +/**
6090 + * struct rtl8366_vlan_mc - Virtual LAN member configuration
6091 + */
6092 struct rtl8366_vlan_mc {
6093 u16 vid;
6094 u16 untag;
6095 @@ -119,7 +122,6 @@ int realtek_smi_setup_mdio(struct realtek_smi *smi);
6096 int rtl8366_mc_is_used(struct realtek_smi *smi, int mc_index, int *used);
6097 int rtl8366_set_vlan(struct realtek_smi *smi, int vid, u32 member,
6098 u32 untag, u32 fid);
6099 -int rtl8366_get_pvid(struct realtek_smi *smi, int port, int *val);
6100 int rtl8366_set_pvid(struct realtek_smi *smi, unsigned int port,
6101 unsigned int vid);
6102 int rtl8366_enable_vlan4k(struct realtek_smi *smi, bool enable);
6103 diff --git a/drivers/net/dsa/rtl8366.c b/drivers/net/dsa/rtl8366.c
6104 index 99cdb2f18fa2f..49c626a336803 100644
6105 --- a/drivers/net/dsa/rtl8366.c
6106 +++ b/drivers/net/dsa/rtl8366.c
6107 @@ -36,12 +36,113 @@ int rtl8366_mc_is_used(struct realtek_smi *smi, int mc_index, int *used)
6108 }
6109 EXPORT_SYMBOL_GPL(rtl8366_mc_is_used);
6110
6111 +/**
6112 + * rtl8366_obtain_mc() - retrieve or allocate a VLAN member configuration
6113 + * @smi: the Realtek SMI device instance
6114 + * @vid: the VLAN ID to look up or allocate
6115 + * @vlanmc: the pointer will be assigned to a pointer to a valid member config
6116 + * if successful
6117 + * @return: index of a new member config or negative error number
6118 + */
6119 +static int rtl8366_obtain_mc(struct realtek_smi *smi, int vid,
6120 + struct rtl8366_vlan_mc *vlanmc)
6121 +{
6122 + struct rtl8366_vlan_4k vlan4k;
6123 + int ret;
6124 + int i;
6125 +
6126 + /* Try to find an existing member config entry for this VID */
6127 + for (i = 0; i < smi->num_vlan_mc; i++) {
6128 + ret = smi->ops->get_vlan_mc(smi, i, vlanmc);
6129 + if (ret) {
6130 + dev_err(smi->dev, "error searching for VLAN MC %d for VID %d\n",
6131 + i, vid);
6132 + return ret;
6133 + }
6134 +
6135 + if (vid == vlanmc->vid)
6136 + return i;
6137 + }
6138 +
6139 + /* We have no MC entry for this VID, try to find an empty one */
6140 + for (i = 0; i < smi->num_vlan_mc; i++) {
6141 + ret = smi->ops->get_vlan_mc(smi, i, vlanmc);
6142 + if (ret) {
6143 + dev_err(smi->dev, "error searching for VLAN MC %d for VID %d\n",
6144 + i, vid);
6145 + return ret;
6146 + }
6147 +
6148 + if (vlanmc->vid == 0 && vlanmc->member == 0) {
6149 + /* Update the entry from the 4K table */
6150 + ret = smi->ops->get_vlan_4k(smi, vid, &vlan4k);
6151 + if (ret) {
6152 + dev_err(smi->dev, "error looking for 4K VLAN MC %d for VID %d\n",
6153 + i, vid);
6154 + return ret;
6155 + }
6156 +
6157 + vlanmc->vid = vid;
6158 + vlanmc->member = vlan4k.member;
6159 + vlanmc->untag = vlan4k.untag;
6160 + vlanmc->fid = vlan4k.fid;
6161 + ret = smi->ops->set_vlan_mc(smi, i, vlanmc);
6162 + if (ret) {
6163 + dev_err(smi->dev, "unable to set/update VLAN MC %d for VID %d\n",
6164 + i, vid);
6165 + return ret;
6166 + }
6167 +
6168 + dev_dbg(smi->dev, "created new MC at index %d for VID %d\n",
6169 + i, vid);
6170 + return i;
6171 + }
6172 + }
6173 +
6174 + /* MC table is full, try to find an unused entry and replace it */
6175 + for (i = 0; i < smi->num_vlan_mc; i++) {
6176 + int used;
6177 +
6178 + ret = rtl8366_mc_is_used(smi, i, &used);
6179 + if (ret)
6180 + return ret;
6181 +
6182 + if (!used) {
6183 + /* Update the entry from the 4K table */
6184 + ret = smi->ops->get_vlan_4k(smi, vid, &vlan4k);
6185 + if (ret)
6186 + return ret;
6187 +
6188 + vlanmc->vid = vid;
6189 + vlanmc->member = vlan4k.member;
6190 + vlanmc->untag = vlan4k.untag;
6191 + vlanmc->fid = vlan4k.fid;
6192 + ret = smi->ops->set_vlan_mc(smi, i, vlanmc);
6193 + if (ret) {
6194 + dev_err(smi->dev, "unable to set/update VLAN MC %d for VID %d\n",
6195 + i, vid);
6196 + return ret;
6197 + }
6198 + dev_dbg(smi->dev, "recycled MC at index %i for VID %d\n",
6199 + i, vid);
6200 + return i;
6201 + }
6202 + }
6203 +
6204 + dev_err(smi->dev, "all VLAN member configurations are in use\n");
6205 + return -ENOSPC;
6206 +}
6207 +
6208 int rtl8366_set_vlan(struct realtek_smi *smi, int vid, u32 member,
6209 u32 untag, u32 fid)
6210 {
6211 + struct rtl8366_vlan_mc vlanmc;
6212 struct rtl8366_vlan_4k vlan4k;
6213 + int mc;
6214 int ret;
6215 - int i;
6216 +
6217 + if (!smi->ops->is_vlan_valid(smi, vid))
6218 + return -EINVAL;
6219
6220 dev_dbg(smi->dev,
6221 "setting VLAN%d 4k members: 0x%02x, untagged: 0x%02x\n",
6222 @@ -63,133 +164,58 @@ int rtl8366_set_vlan(struct realtek_smi *smi, int vid, u32 member,
6223 "resulting VLAN%d 4k members: 0x%02x, untagged: 0x%02x\n",
6224 vid, vlan4k.member, vlan4k.untag);
6225
6226 - /* Try to find an existing MC entry for this VID */
6227 - for (i = 0; i < smi->num_vlan_mc; i++) {
6228 - struct rtl8366_vlan_mc vlanmc;
6229 -
6230 - ret = smi->ops->get_vlan_mc(smi, i, &vlanmc);
6231 - if (ret)
6232 - return ret;
6233 -
6234 - if (vid == vlanmc.vid) {
6235 - /* update the MC entry */
6236 - vlanmc.member |= member;
6237 - vlanmc.untag |= untag;
6238 - vlanmc.fid = fid;
6239 -
6240 - ret = smi->ops->set_vlan_mc(smi, i, &vlanmc);
6241 + /* Find or allocate a member config for this VID */
6242 + ret = rtl8366_obtain_mc(smi, vid, &vlanmc);
6243 + if (ret < 0)
6244 + return ret;
6245 + mc = ret;
6246
6247 - dev_dbg(smi->dev,
6248 - "resulting VLAN%d MC members: 0x%02x, untagged: 0x%02x\n",
6249 - vid, vlanmc.member, vlanmc.untag);
6250 + /* Update the MC entry */
6251 + vlanmc.member |= member;
6252 + vlanmc.untag |= untag;
6253 + vlanmc.fid = fid;
6254
6255 - break;
6256 - }
6257 - }
6258 + /* Commit updates to the MC entry */
6259 + ret = smi->ops->set_vlan_mc(smi, mc, &vlanmc);
6260 + if (ret)
6261 + dev_err(smi->dev, "failed to commit changes to VLAN MC index %d for VID %d\n",
6262 + mc, vid);
6263 + else
6264 + dev_dbg(smi->dev,
6265 + "resulting VLAN%d MC members: 0x%02x, untagged: 0x%02x\n",
6266 + vid, vlanmc.member, vlanmc.untag);
6267
6268 return ret;
6269 }
6270 EXPORT_SYMBOL_GPL(rtl8366_set_vlan);
6271
6272 -int rtl8366_get_pvid(struct realtek_smi *smi, int port, int *val)
6273 -{
6274 - struct rtl8366_vlan_mc vlanmc;
6275 - int ret;
6276 - int index;
6277 -
6278 - ret = smi->ops->get_mc_index(smi, port, &index);
6279 - if (ret)
6280 - return ret;
6281 -
6282 - ret = smi->ops->get_vlan_mc(smi, index, &vlanmc);
6283 - if (ret)
6284 - return ret;
6285 -
6286 - *val = vlanmc.vid;
6287 - return 0;
6288 -}
6289 -EXPORT_SYMBOL_GPL(rtl8366_get_pvid);
6290 -
6291 int rtl8366_set_pvid(struct realtek_smi *smi, unsigned int port,
6292 unsigned int vid)
6293 {
6294 struct rtl8366_vlan_mc vlanmc;
6295 - struct rtl8366_vlan_4k vlan4k;
6296 + int mc;
6297 int ret;
6298 - int i;
6299 -
6300 - /* Try to find an existing MC entry for this VID */
6301 - for (i = 0; i < smi->num_vlan_mc; i++) {
6302 - ret = smi->ops->get_vlan_mc(smi, i, &vlanmc);
6303 - if (ret)
6304 - return ret;
6305 -
6306 - if (vid == vlanmc.vid) {
6307 - ret = smi->ops->set_vlan_mc(smi, i, &vlanmc);
6308 - if (ret)
6309 - return ret;
6310 -
6311 - ret = smi->ops->set_mc_index(smi, port, i);
6312 - return ret;
6313 - }
6314 - }
6315 -
6316 - /* We have no MC entry for this VID, try to find an empty one */
6317 - for (i = 0; i < smi->num_vlan_mc; i++) {
6318 - ret = smi->ops->get_vlan_mc(smi, i, &vlanmc);
6319 - if (ret)
6320 - return ret;
6321 -
6322 - if (vlanmc.vid == 0 && vlanmc.member == 0) {
6323 - /* Update the entry from the 4K table */
6324 - ret = smi->ops->get_vlan_4k(smi, vid, &vlan4k);
6325 - if (ret)
6326 - return ret;
6327
6328 - vlanmc.vid = vid;
6329 - vlanmc.member = vlan4k.member;
6330 - vlanmc.untag = vlan4k.untag;
6331 - vlanmc.fid = vlan4k.fid;
6332 - ret = smi->ops->set_vlan_mc(smi, i, &vlanmc);
6333 - if (ret)
6334 - return ret;
6335 -
6336 - ret = smi->ops->set_mc_index(smi, port, i);
6337 - return ret;
6338 - }
6339 - }
6340 -
6341 - /* MC table is full, try to find an unused entry and replace it */
6342 - for (i = 0; i < smi->num_vlan_mc; i++) {
6343 - int used;
6344 -
6345 - ret = rtl8366_mc_is_used(smi, i, &used);
6346 - if (ret)
6347 - return ret;
6348 -
6349 - if (!used) {
6350 - /* Update the entry from the 4K table */
6351 - ret = smi->ops->get_vlan_4k(smi, vid, &vlan4k);
6352 - if (ret)
6353 - return ret;
6354 + if (!smi->ops->is_vlan_valid(smi, vid))
6355 + return -EINVAL;
6356
6357 - vlanmc.vid = vid;
6358 - vlanmc.member = vlan4k.member;
6359 - vlanmc.untag = vlan4k.untag;
6360 - vlanmc.fid = vlan4k.fid;
6361 - ret = smi->ops->set_vlan_mc(smi, i, &vlanmc);
6362 - if (ret)
6363 - return ret;
6364 + /* Find or allocate a member config for this VID */
6365 + ret = rtl8366_obtain_mc(smi, vid, &vlanmc);
6366 + if (ret < 0)
6367 + return ret;
6368 + mc = ret;
6369
6370 - ret = smi->ops->set_mc_index(smi, port, i);
6371 - return ret;
6372 - }
6373 + ret = smi->ops->set_mc_index(smi, port, mc);
6374 + if (ret) {
6375 + dev_err(smi->dev, "set PVID: failed to set MC index %d for port %d\n",
6376 + mc, port);
6377 + return ret;
6378 }
6379
6380 - dev_err(smi->dev,
6381 - "all VLAN member configurations are in use\n");
6382 + dev_dbg(smi->dev, "set PVID: the PVID for port %d set to %d using existing MC index %d\n",
6383 + port, vid, mc);
6384
6385 - return -ENOSPC;
6386 + return 0;
6387 }
6388 EXPORT_SYMBOL_GPL(rtl8366_set_pvid);
6389
6390 @@ -389,7 +415,8 @@ void rtl8366_vlan_add(struct dsa_switch *ds, int port,
6391 if (!smi->ops->is_vlan_valid(smi, vid))
6392 return;
6393
6394 - dev_info(smi->dev, "add VLAN on port %d, %s, %s\n",
6395 + dev_info(smi->dev, "add VLAN %d on port %d, %s, %s\n",
6396 + vlan->vid_begin,
6397 port,
6398 untagged ? "untagged" : "tagged",
6399 pvid ? " PVID" : "no PVID");
6400 @@ -398,34 +425,29 @@ void rtl8366_vlan_add(struct dsa_switch *ds, int port,
6401 dev_err(smi->dev, "port is DSA or CPU port\n");
6402
6403 for (vid = vlan->vid_begin; vid <= vlan->vid_end; vid++) {
6404 - int pvid_val = 0;
6405 -
6406 - dev_info(smi->dev, "add VLAN %04x\n", vid);
6407 member |= BIT(port);
6408
6409 if (untagged)
6410 untag |= BIT(port);
6411
6412 - /* To ensure that we have a valid MC entry for this VLAN,
6413 - * initialize the port VLAN ID here.
6414 - */
6415 - ret = rtl8366_get_pvid(smi, port, &pvid_val);
6416 - if (ret < 0) {
6417 - dev_err(smi->dev, "could not lookup PVID for port %d\n",
6418 - port);
6419 - return;
6420 - }
6421 - if (pvid_val == 0) {
6422 - ret = rtl8366_set_pvid(smi, port, vid);
6423 - if (ret < 0)
6424 - return;
6425 - }
6426 -
6427 ret = rtl8366_set_vlan(smi, vid, member, untag, 0);
6428 if (ret)
6429 dev_err(smi->dev,
6430 "failed to set up VLAN %04x",
6431 vid);
6432 +
6433 + if (!pvid)
6434 + continue;
6435 +
6436 + ret = rtl8366_set_pvid(smi, port, vid);
6437 + if (ret)
6438 + dev_err(smi->dev,
6439 + "failed to set PVID on port %d to VLAN %04x",
6440 + port, vid);
6441 +
6442 + if (!ret)
6443 + dev_dbg(smi->dev, "VLAN add: added VLAN %d with PVID on port %d\n",
6444 + vid, port);
6445 }
6446 }
6447 EXPORT_SYMBOL_GPL(rtl8366_vlan_add);
6448 diff --git a/drivers/net/dsa/rtl8366rb.c b/drivers/net/dsa/rtl8366rb.c
6449 index f5cc8b0a7c74c..7f731bf369980 100644
6450 --- a/drivers/net/dsa/rtl8366rb.c
6451 +++ b/drivers/net/dsa/rtl8366rb.c
6452 @@ -1269,7 +1269,7 @@ static bool rtl8366rb_is_vlan_valid(struct realtek_smi *smi, unsigned int vlan)
6453 if (smi->vlan4k_enabled)
6454 max = RTL8366RB_NUM_VIDS - 1;
6455
6456 - if (vlan == 0 || vlan >= max)
6457 + if (vlan == 0 || vlan > max)
6458 return false;
6459
6460 return true;
6461 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
6462 index 16a939f9b04d5..22d634111b818 100644
6463 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
6464 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
6465 @@ -60,6 +60,89 @@ static struct ch_tc_pedit_fields pedits[] = {
6466 PEDIT_FIELDS(IP6_, DST_127_96, 4, nat_lip, 12),
6467 };
6468
6469 +static const struct cxgb4_natmode_config cxgb4_natmode_config_array[] = {
6470 + /* Default supported NAT modes */
6471 + {
6472 + .chip = CHELSIO_T5,
6473 + .flags = CXGB4_ACTION_NATMODE_NONE,
6474 + .natmode = NAT_MODE_NONE,
6475 + },
6476 + {
6477 + .chip = CHELSIO_T5,
6478 + .flags = CXGB4_ACTION_NATMODE_DIP,
6479 + .natmode = NAT_MODE_DIP,
6480 + },
6481 + {
6482 + .chip = CHELSIO_T5,
6483 + .flags = CXGB4_ACTION_NATMODE_DIP | CXGB4_ACTION_NATMODE_DPORT,
6484 + .natmode = NAT_MODE_DIP_DP,
6485 + },
6486 + {
6487 + .chip = CHELSIO_T5,
6488 + .flags = CXGB4_ACTION_NATMODE_DIP | CXGB4_ACTION_NATMODE_DPORT |
6489 + CXGB4_ACTION_NATMODE_SIP,
6490 + .natmode = NAT_MODE_DIP_DP_SIP,
6491 + },
6492 + {
6493 + .chip = CHELSIO_T5,
6494 + .flags = CXGB4_ACTION_NATMODE_DIP | CXGB4_ACTION_NATMODE_DPORT |
6495 + CXGB4_ACTION_NATMODE_SPORT,
6496 + .natmode = NAT_MODE_DIP_DP_SP,
6497 + },
6498 + {
6499 + .chip = CHELSIO_T5,
6500 + .flags = CXGB4_ACTION_NATMODE_SIP | CXGB4_ACTION_NATMODE_SPORT,
6501 + .natmode = NAT_MODE_SIP_SP,
6502 + },
6503 + {
6504 + .chip = CHELSIO_T5,
6505 + .flags = CXGB4_ACTION_NATMODE_DIP | CXGB4_ACTION_NATMODE_SIP |
6506 + CXGB4_ACTION_NATMODE_SPORT,
6507 + .natmode = NAT_MODE_DIP_SIP_SP,
6508 + },
6509 + {
6510 + .chip = CHELSIO_T5,
6511 + .flags = CXGB4_ACTION_NATMODE_DIP | CXGB4_ACTION_NATMODE_SIP |
6512 + CXGB4_ACTION_NATMODE_DPORT |
6513 + CXGB4_ACTION_NATMODE_SPORT,
6514 + .natmode = NAT_MODE_ALL,
6515 + },
6516 + /* T6+ can ignore L4 ports when they're disabled. */
6517 + {
6518 + .chip = CHELSIO_T6,
6519 + .flags = CXGB4_ACTION_NATMODE_SIP,
6520 + .natmode = NAT_MODE_SIP_SP,
6521 + },
6522 + {
6523 + .chip = CHELSIO_T6,
6524 + .flags = CXGB4_ACTION_NATMODE_DIP | CXGB4_ACTION_NATMODE_SPORT,
6525 + .natmode = NAT_MODE_DIP_DP_SP,
6526 + },
6527 + {
6528 + .chip = CHELSIO_T6,
6529 + .flags = CXGB4_ACTION_NATMODE_DIP | CXGB4_ACTION_NATMODE_SIP,
6530 + .natmode = NAT_MODE_ALL,
6531 + },
6532 +};
6533 +
6534 +static void cxgb4_action_natmode_tweak(struct ch_filter_specification *fs,
6535 + u8 natmode_flags)
6536 +{
6537 + u8 i = 0;
6538 +
6539 + /* Translate the enabled NAT 4-tuple fields to one of the
6540 + * hardware supported NAT mode configurations. This ensures
6541 + * that we pick a valid combination, where the disabled fields
6542 + * do not get overwritten to 0.
6543 + */
6544 + for (i = 0; i < ARRAY_SIZE(cxgb4_natmode_config_array); i++) {
6545 + if (cxgb4_natmode_config_array[i].flags == natmode_flags) {
6546 + fs->nat_mode = cxgb4_natmode_config_array[i].natmode;
6547 + return;
6548 + }
6549 + }
6550 +}
6551 +
6552 static struct ch_tc_flower_entry *allocate_flower_entry(void)
6553 {
6554 struct ch_tc_flower_entry *new = kzalloc(sizeof(*new), GFP_KERNEL);
6555 @@ -287,7 +370,8 @@ static void offload_pedit(struct ch_filter_specification *fs, u32 val, u32 mask,
6556 }
6557
6558 static void process_pedit_field(struct ch_filter_specification *fs, u32 val,
6559 - u32 mask, u32 offset, u8 htype)
6560 + u32 mask, u32 offset, u8 htype,
6561 + u8 *natmode_flags)
6562 {
6563 switch (htype) {
6564 case FLOW_ACT_MANGLE_HDR_TYPE_ETH:
6565 @@ -312,60 +396,95 @@ static void process_pedit_field(struct ch_filter_specification *fs, u32 val,
6566 switch (offset) {
6567 case PEDIT_IP4_SRC:
6568 offload_pedit(fs, val, mask, IP4_SRC);
6569 + *natmode_flags |= CXGB4_ACTION_NATMODE_SIP;
6570 break;
6571 case PEDIT_IP4_DST:
6572 offload_pedit(fs, val, mask, IP4_DST);
6573 + *natmode_flags |= CXGB4_ACTION_NATMODE_DIP;
6574 }
6575 - fs->nat_mode = NAT_MODE_ALL;
6576 break;
6577 case FLOW_ACT_MANGLE_HDR_TYPE_IP6:
6578 switch (offset) {
6579 case PEDIT_IP6_SRC_31_0:
6580 offload_pedit(fs, val, mask, IP6_SRC_31_0);
6581 + *natmode_flags |= CXGB4_ACTION_NATMODE_SIP;
6582 break;
6583 case PEDIT_IP6_SRC_63_32:
6584 offload_pedit(fs, val, mask, IP6_SRC_63_32);
6585 + *natmode_flags |= CXGB4_ACTION_NATMODE_SIP;
6586 break;
6587 case PEDIT_IP6_SRC_95_64:
6588 offload_pedit(fs, val, mask, IP6_SRC_95_64);
6589 + *natmode_flags |= CXGB4_ACTION_NATMODE_SIP;
6590 break;
6591 case PEDIT_IP6_SRC_127_96:
6592 offload_pedit(fs, val, mask, IP6_SRC_127_96);
6593 + *natmode_flags |= CXGB4_ACTION_NATMODE_SIP;
6594 break;
6595 case PEDIT_IP6_DST_31_0:
6596 offload_pedit(fs, val, mask, IP6_DST_31_0);
6597 + *natmode_flags |= CXGB4_ACTION_NATMODE_DIP;
6598 break;
6599 case PEDIT_IP6_DST_63_32:
6600 offload_pedit(fs, val, mask, IP6_DST_63_32);
6601 + *natmode_flags |= CXGB4_ACTION_NATMODE_DIP;
6602 break;
6603 case PEDIT_IP6_DST_95_64:
6604 offload_pedit(fs, val, mask, IP6_DST_95_64);
6605 + *natmode_flags |= CXGB4_ACTION_NATMODE_DIP;
6606 break;
6607 case PEDIT_IP6_DST_127_96:
6608 offload_pedit(fs, val, mask, IP6_DST_127_96);
6609 + *natmode_flags |= CXGB4_ACTION_NATMODE_DIP;
6610 }
6611 - fs->nat_mode = NAT_MODE_ALL;
6612 break;
6613 case FLOW_ACT_MANGLE_HDR_TYPE_TCP:
6614 switch (offset) {
6615 case PEDIT_TCP_SPORT_DPORT:
6616 - if (~mask & PEDIT_TCP_UDP_SPORT_MASK)
6617 + if (~mask & PEDIT_TCP_UDP_SPORT_MASK) {
6618 fs->nat_fport = val;
6619 - else
6620 + *natmode_flags |= CXGB4_ACTION_NATMODE_SPORT;
6621 + } else {
6622 fs->nat_lport = val >> 16;
6623 + *natmode_flags |= CXGB4_ACTION_NATMODE_DPORT;
6624 + }
6625 }
6626 - fs->nat_mode = NAT_MODE_ALL;
6627 break;
6628 case FLOW_ACT_MANGLE_HDR_TYPE_UDP:
6629 switch (offset) {
6630 case PEDIT_UDP_SPORT_DPORT:
6631 - if (~mask & PEDIT_TCP_UDP_SPORT_MASK)
6632 + if (~mask & PEDIT_TCP_UDP_SPORT_MASK) {
6633 fs->nat_fport = val;
6634 - else
6635 + *natmode_flags |= CXGB4_ACTION_NATMODE_SPORT;
6636 + } else {
6637 fs->nat_lport = val >> 16;
6638 + *natmode_flags |= CXGB4_ACTION_NATMODE_DPORT;
6639 + }
6640 }
6641 - fs->nat_mode = NAT_MODE_ALL;
6642 + break;
6643 + }
6644 +}
6645 +
6646 +static int cxgb4_action_natmode_validate(struct net_device *dev,
6647 + struct adapter *adap, u8 natmode_flags)
6648 +{
6649 + u8 i = 0;
6650 +
6651 + /* Extract the NAT mode to enable based on what 4-tuple fields
6652 + * are enabled to be overwritten. This ensures that the
6653 + * disabled fields don't get overwritten to 0.
6654 + */
6655 + for (i = 0; i < ARRAY_SIZE(cxgb4_natmode_config_array); i++) {
6656 + const struct cxgb4_natmode_config *c;
6657 +
6658 + c = &cxgb4_natmode_config_array[i];
6659 + if (CHELSIO_CHIP_VERSION(adap->params.chip) >= c->chip &&
6660 + natmode_flags == c->flags)
6661 + return 0;
6662 }
6663 + netdev_err(dev, "%s: Unsupported NAT mode 4-tuple combination\n",
6664 + __func__);
6665 + return -EOPNOTSUPP;
6666 }
6667
6668 static void cxgb4_process_flow_actions(struct net_device *in,
6669 @@ -374,6 +493,7 @@ static void cxgb4_process_flow_actions(struct net_device *in,
6670 {
6671 struct flow_rule *rule = flow_cls_offload_flow_rule(cls);
6672 struct flow_action_entry *act;
6673 + u8 natmode_flags = 0;
6674 int i;
6675
6676 flow_action_for_each(i, act, &rule->action) {
6677 @@ -424,13 +544,17 @@ static void cxgb4_process_flow_actions(struct net_device *in,
6678 val = act->mangle.val;
6679 offset = act->mangle.offset;
6680
6681 - process_pedit_field(fs, val, mask, offset, htype);
6682 + process_pedit_field(fs, val, mask, offset, htype,
6683 + &natmode_flags);
6684 }
6685 break;
6686 default:
6687 break;
6688 }
6689 }
6690 + if (natmode_flags)
6691 + cxgb4_action_natmode_tweak(fs, natmode_flags);
6692 +
6693 }
6694
6695 static bool valid_l4_mask(u32 mask)
6696 @@ -447,7 +571,8 @@ static bool valid_l4_mask(u32 mask)
6697 }
6698
6699 static bool valid_pedit_action(struct net_device *dev,
6700 - const struct flow_action_entry *act)
6701 + const struct flow_action_entry *act,
6702 + u8 *natmode_flags)
6703 {
6704 u32 mask, offset;
6705 u8 htype;
6706 @@ -472,7 +597,10 @@ static bool valid_pedit_action(struct net_device *dev,
6707 case FLOW_ACT_MANGLE_HDR_TYPE_IP4:
6708 switch (offset) {
6709 case PEDIT_IP4_SRC:
6710 + *natmode_flags |= CXGB4_ACTION_NATMODE_SIP;
6711 + break;
6712 case PEDIT_IP4_DST:
6713 + *natmode_flags |= CXGB4_ACTION_NATMODE_DIP;
6714 break;
6715 default:
6716 netdev_err(dev, "%s: Unsupported pedit field\n",
6717 @@ -486,10 +614,13 @@ static bool valid_pedit_action(struct net_device *dev,
6718 case PEDIT_IP6_SRC_63_32:
6719 case PEDIT_IP6_SRC_95_64:
6720 case PEDIT_IP6_SRC_127_96:
6721 + *natmode_flags |= CXGB4_ACTION_NATMODE_SIP;
6722 + break;
6723 case PEDIT_IP6_DST_31_0:
6724 case PEDIT_IP6_DST_63_32:
6725 case PEDIT_IP6_DST_95_64:
6726 case PEDIT_IP6_DST_127_96:
6727 + *natmode_flags |= CXGB4_ACTION_NATMODE_DIP;
6728 break;
6729 default:
6730 netdev_err(dev, "%s: Unsupported pedit field\n",
6731 @@ -505,6 +636,10 @@ static bool valid_pedit_action(struct net_device *dev,
6732 __func__);
6733 return false;
6734 }
6735 + if (~mask & PEDIT_TCP_UDP_SPORT_MASK)
6736 + *natmode_flags |= CXGB4_ACTION_NATMODE_SPORT;
6737 + else
6738 + *natmode_flags |= CXGB4_ACTION_NATMODE_DPORT;
6739 break;
6740 default:
6741 netdev_err(dev, "%s: Unsupported pedit field\n",
6742 @@ -520,6 +655,10 @@ static bool valid_pedit_action(struct net_device *dev,
6743 __func__);
6744 return false;
6745 }
6746 + if (~mask & PEDIT_TCP_UDP_SPORT_MASK)
6747 + *natmode_flags |= CXGB4_ACTION_NATMODE_SPORT;
6748 + else
6749 + *natmode_flags |= CXGB4_ACTION_NATMODE_DPORT;
6750 break;
6751 default:
6752 netdev_err(dev, "%s: Unsupported pedit field\n",
6753 @@ -538,10 +677,12 @@ static int cxgb4_validate_flow_actions(struct net_device *dev,
6754 struct flow_cls_offload *cls)
6755 {
6756 struct flow_rule *rule = flow_cls_offload_flow_rule(cls);
6757 + struct adapter *adap = netdev2adap(dev);
6758 struct flow_action_entry *act;
6759 bool act_redir = false;
6760 bool act_pedit = false;
6761 bool act_vlan = false;
6762 + u8 natmode_flags = 0;
6763 int i;
6764
6765 flow_action_for_each(i, act, &rule->action) {
6766 @@ -551,7 +692,6 @@ static int cxgb4_validate_flow_actions(struct net_device *dev,
6767 /* Do nothing */
6768 break;
6769 case FLOW_ACTION_REDIRECT: {
6770 - struct adapter *adap = netdev2adap(dev);
6771 struct net_device *n_dev, *target_dev;
6772 unsigned int i;
6773 bool found = false;
6774 @@ -601,7 +741,8 @@ static int cxgb4_validate_flow_actions(struct net_device *dev,
6775 }
6776 break;
6777 case FLOW_ACTION_MANGLE: {
6778 - bool pedit_valid = valid_pedit_action(dev, act);
6779 + bool pedit_valid = valid_pedit_action(dev, act,
6780 + &natmode_flags);
6781
6782 if (!pedit_valid)
6783 return -EOPNOTSUPP;
6784 @@ -620,6 +761,14 @@ static int cxgb4_validate_flow_actions(struct net_device *dev,
6785 return -EINVAL;
6786 }
6787
6788 + if (act_pedit) {
6789 + int ret;
6790 +
6791 + ret = cxgb4_action_natmode_validate(dev, adap, natmode_flags);
6792 + if (ret)
6793 + return ret;
6794 + }
6795 +
6796 return 0;
6797 }
6798
6799 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.h
6800 index eb4c95248baf6..c905debe6f7ac 100644
6801 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.h
6802 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.h
6803 @@ -108,6 +108,21 @@ struct ch_tc_pedit_fields {
6804 #define PEDIT_TCP_SPORT_DPORT 0x0
6805 #define PEDIT_UDP_SPORT_DPORT 0x0
6806
6807 +enum cxgb4_action_natmode_flags {
6808 + CXGB4_ACTION_NATMODE_NONE = 0,
6809 + CXGB4_ACTION_NATMODE_DIP = (1 << 0),
6810 + CXGB4_ACTION_NATMODE_SIP = (1 << 1),
6811 + CXGB4_ACTION_NATMODE_DPORT = (1 << 2),
6812 + CXGB4_ACTION_NATMODE_SPORT = (1 << 3),
6813 +};
6814 +
6815 +/* TC PEDIT action to NATMODE translation entry */
6816 +struct cxgb4_natmode_config {
6817 + enum chip_type chip;
6818 + u8 flags;
6819 + u8 natmode;
6820 +};
6821 +
6822 int cxgb4_tc_flower_replace(struct net_device *dev,
6823 struct flow_cls_offload *cls);
6824 int cxgb4_tc_flower_destroy(struct net_device *dev,
6825 diff --git a/drivers/net/ethernet/cisco/enic/enic.h b/drivers/net/ethernet/cisco/enic/enic.h
6826 index 0dd64acd2a3fb..08cac1bfacafb 100644
6827 --- a/drivers/net/ethernet/cisco/enic/enic.h
6828 +++ b/drivers/net/ethernet/cisco/enic/enic.h
6829 @@ -171,6 +171,7 @@ struct enic {
6830 u16 num_vfs;
6831 #endif
6832 spinlock_t enic_api_lock;
6833 + bool enic_api_busy;
6834 struct enic_port_profile *pp;
6835
6836 /* work queue cache line section */
6837 diff --git a/drivers/net/ethernet/cisco/enic/enic_api.c b/drivers/net/ethernet/cisco/enic/enic_api.c
6838 index b161f24522b87..b028ea2dec2b9 100644
6839 --- a/drivers/net/ethernet/cisco/enic/enic_api.c
6840 +++ b/drivers/net/ethernet/cisco/enic/enic_api.c
6841 @@ -34,6 +34,12 @@ int enic_api_devcmd_proxy_by_index(struct net_device *netdev, int vf,
6842 struct vnic_dev *vdev = enic->vdev;
6843
6844 spin_lock(&enic->enic_api_lock);
6845 + while (enic->enic_api_busy) {
6846 + spin_unlock(&enic->enic_api_lock);
6847 + cpu_relax();
6848 + spin_lock(&enic->enic_api_lock);
6849 + }
6850 +
6851 spin_lock_bh(&enic->devcmd_lock);
6852
6853 vnic_dev_cmd_proxy_by_index_start(vdev, vf);
6854 diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
6855 index 6e2ab10ad2e6f..8314102002b0f 100644
6856 --- a/drivers/net/ethernet/cisco/enic/enic_main.c
6857 +++ b/drivers/net/ethernet/cisco/enic/enic_main.c
6858 @@ -2142,8 +2142,6 @@ static int enic_dev_wait(struct vnic_dev *vdev,
6859 int done;
6860 int err;
6861
6862 - BUG_ON(in_interrupt());
6863 -
6864 err = start(vdev, arg);
6865 if (err)
6866 return err;
6867 @@ -2331,6 +2329,13 @@ static int enic_set_rss_nic_cfg(struct enic *enic)
6868 rss_hash_bits, rss_base_cpu, rss_enable);
6869 }
6870
6871 +static void enic_set_api_busy(struct enic *enic, bool busy)
6872 +{
6873 + spin_lock(&enic->enic_api_lock);
6874 + enic->enic_api_busy = busy;
6875 + spin_unlock(&enic->enic_api_lock);
6876 +}
6877 +
6878 static void enic_reset(struct work_struct *work)
6879 {
6880 struct enic *enic = container_of(work, struct enic, reset);
6881 @@ -2340,7 +2345,9 @@ static void enic_reset(struct work_struct *work)
6882
6883 rtnl_lock();
6884
6885 - spin_lock(&enic->enic_api_lock);
6886 + /* Stop any activity from infiniband */
6887 + enic_set_api_busy(enic, true);
6888 +
6889 enic_stop(enic->netdev);
6890 enic_dev_soft_reset(enic);
6891 enic_reset_addr_lists(enic);
6892 @@ -2348,7 +2355,10 @@ static void enic_reset(struct work_struct *work)
6893 enic_set_rss_nic_cfg(enic);
6894 enic_dev_set_ig_vlan_rewrite_mode(enic);
6895 enic_open(enic->netdev);
6896 - spin_unlock(&enic->enic_api_lock);
6897 +
6898 + /* Allow infiniband to fiddle with the device again */
6899 + enic_set_api_busy(enic, false);
6900 +
6901 call_netdevice_notifiers(NETDEV_REBOOT, enic->netdev);
6902
6903 rtnl_unlock();
6904 @@ -2360,7 +2370,9 @@ static void enic_tx_hang_reset(struct work_struct *work)
6905
6906 rtnl_lock();
6907
6908 - spin_lock(&enic->enic_api_lock);
6909 + /* Stop any activity from infiniband */
6910 + enic_set_api_busy(enic, true);
6911 +
6912 enic_dev_hang_notify(enic);
6913 enic_stop(enic->netdev);
6914 enic_dev_hang_reset(enic);
6915 @@ -2369,7 +2381,10 @@ static void enic_tx_hang_reset(struct work_struct *work)
6916 enic_set_rss_nic_cfg(enic);
6917 enic_dev_set_ig_vlan_rewrite_mode(enic);
6918 enic_open(enic->netdev);
6919 - spin_unlock(&enic->enic_api_lock);
6920 +
6921 + /* Allow infiniband to fiddle with the device again */
6922 + enic_set_api_busy(enic, false);
6923 +
6924 call_netdevice_notifiers(NETDEV_REBOOT, enic->netdev);
6925
6926 rtnl_unlock();
6927 diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
6928 index 96e9565f1e08a..1fbc243fc3f4c 100644
6929 --- a/drivers/net/ethernet/faraday/ftgmac100.c
6930 +++ b/drivers/net/ethernet/faraday/ftgmac100.c
6931 @@ -1807,6 +1807,11 @@ static int ftgmac100_probe(struct platform_device *pdev)
6932 priv->rxdes0_edorr_mask = BIT(30);
6933 priv->txdes0_edotr_mask = BIT(30);
6934 priv->is_aspeed = true;
6935 + /* Disable ast2600 problematic HW arbitration */
6936 + if (of_device_is_compatible(np, "aspeed,ast2600-mac")) {
6937 + iowrite32(FTGMAC100_TM_DEFAULT,
6938 + priv->base + FTGMAC100_OFFSET_TM);
6939 + }
6940 } else {
6941 priv->rxdes0_edorr_mask = BIT(15);
6942 priv->txdes0_edotr_mask = BIT(15);
6943 diff --git a/drivers/net/ethernet/faraday/ftgmac100.h b/drivers/net/ethernet/faraday/ftgmac100.h
6944 index e5876a3fda91d..63b3e02fab162 100644
6945 --- a/drivers/net/ethernet/faraday/ftgmac100.h
6946 +++ b/drivers/net/ethernet/faraday/ftgmac100.h
6947 @@ -169,6 +169,14 @@
6948 #define FTGMAC100_MACCR_FAST_MODE (1 << 19)
6949 #define FTGMAC100_MACCR_SW_RST (1 << 31)
6950
6951 +/*
6952 + * test mode control register
6953 + */
6954 +#define FTGMAC100_TM_RQ_TX_VALID_DIS (1 << 28)
6955 +#define FTGMAC100_TM_RQ_RR_IDLE_PREV (1 << 27)
6956 +#define FTGMAC100_TM_DEFAULT \
6957 + (FTGMAC100_TM_RQ_TX_VALID_DIS | FTGMAC100_TM_RQ_RR_IDLE_PREV)
6958 +
6959 /*
6960 * PHY control register
6961 */
6962 diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
6963 index a0e4b12ac4ea2..fd7fc6f20c9da 100644
6964 --- a/drivers/net/ethernet/freescale/fec_main.c
6965 +++ b/drivers/net/ethernet/freescale/fec_main.c
6966 @@ -1945,6 +1945,27 @@ out:
6967 return ret;
6968 }
6969
6970 +static void fec_enet_phy_reset_after_clk_enable(struct net_device *ndev)
6971 +{
6972 + struct fec_enet_private *fep = netdev_priv(ndev);
6973 + struct phy_device *phy_dev = ndev->phydev;
6974 +
6975 + if (phy_dev) {
6976 + phy_reset_after_clk_enable(phy_dev);
6977 + } else if (fep->phy_node) {
6978 + /*
6979 + * If the PHY still is not bound to the MAC, but there is
6980 + * OF PHY node and a matching PHY device instance already,
6981 + * use the OF PHY node to obtain the PHY device instance,
6982 + * and then use that PHY device instance when triggering
6983 + * the PHY reset.
6984 + */
6985 + phy_dev = of_phy_find_device(fep->phy_node);
6986 + phy_reset_after_clk_enable(phy_dev);
6987 + put_device(&phy_dev->mdio.dev);
6988 + }
6989 +}
6990 +
6991 static int fec_enet_clk_enable(struct net_device *ndev, bool enable)
6992 {
6993 struct fec_enet_private *fep = netdev_priv(ndev);
6994 @@ -1971,7 +1992,7 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable)
6995 if (ret)
6996 goto failed_clk_ref;
6997
6998 - phy_reset_after_clk_enable(ndev->phydev);
6999 + fec_enet_phy_reset_after_clk_enable(ndev);
7000 } else {
7001 clk_disable_unprepare(fep->clk_enet_out);
7002 if (fep->clk_ptp) {
7003 @@ -2982,16 +3003,16 @@ fec_enet_open(struct net_device *ndev)
7004 /* Init MAC prior to mii bus probe */
7005 fec_restart(ndev);
7006
7007 - /* Probe and connect to PHY when open the interface */
7008 - ret = fec_enet_mii_probe(ndev);
7009 - if (ret)
7010 - goto err_enet_mii_probe;
7011 -
7012 /* Call phy_reset_after_clk_enable() again if it failed during
7013 * phy_reset_after_clk_enable() before because the PHY wasn't probed.
7014 */
7015 if (reset_again)
7016 - phy_reset_after_clk_enable(ndev->phydev);
7017 + fec_enet_phy_reset_after_clk_enable(ndev);
7018 +
7019 + /* Probe and connect to PHY when open the interface */
7020 + ret = fec_enet_mii_probe(ndev);
7021 + if (ret)
7022 + goto err_enet_mii_probe;
7023
7024 if (fep->quirks & FEC_QUIRK_ERR006687)
7025 imx6q_cpuidle_fec_irqs_used();
7026 diff --git a/drivers/net/ethernet/ibm/ibmveth.c b/drivers/net/ethernet/ibm/ibmveth.c
7027 index aa32a5b041129..a20d9147d5f22 100644
7028 --- a/drivers/net/ethernet/ibm/ibmveth.c
7029 +++ b/drivers/net/ethernet/ibm/ibmveth.c
7030 @@ -1317,6 +1317,7 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)
7031 int offset = ibmveth_rxq_frame_offset(adapter);
7032 int csum_good = ibmveth_rxq_csum_good(adapter);
7033 int lrg_pkt = ibmveth_rxq_large_packet(adapter);
7034 + __sum16 iph_check = 0;
7035
7036 skb = ibmveth_rxq_get_buffer(adapter);
7037
7038 @@ -1353,16 +1354,26 @@ static int ibmveth_poll(struct napi_struct *napi, int budget)
7039 skb_put(skb, length);
7040 skb->protocol = eth_type_trans(skb, netdev);
7041
7042 - if (csum_good) {
7043 - skb->ip_summed = CHECKSUM_UNNECESSARY;
7044 - ibmveth_rx_csum_helper(skb, adapter);
7045 + /* PHYP without PLSO support places a -1 in the ip
7046 + * checksum for large send frames.
7047 + */
7048 + if (skb->protocol == cpu_to_be16(ETH_P_IP)) {
7049 + struct iphdr *iph = (struct iphdr *)skb->data;
7050 +
7051 + iph_check = iph->check;
7052 }
7053
7054 - if (length > netdev->mtu + ETH_HLEN) {
7055 + if ((length > netdev->mtu + ETH_HLEN) ||
7056 + lrg_pkt || iph_check == 0xffff) {
7057 ibmveth_rx_mss_helper(skb, mss, lrg_pkt);
7058 adapter->rx_large_packets++;
7059 }
7060
7061 + if (csum_good) {
7062 + skb->ip_summed = CHECKSUM_UNNECESSARY;
7063 + ibmveth_rx_csum_helper(skb, adapter);
7064 + }
7065 +
7066 napi_gro_receive(napi, skb); /* send it up */
7067
7068 netdev->stats.rx_packets++;
7069 diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
7070 index 5329af2337a91..48105a2eebe4d 100644
7071 --- a/drivers/net/ethernet/ibm/ibmvnic.c
7072 +++ b/drivers/net/ethernet/ibm/ibmvnic.c
7073 @@ -4074,8 +4074,13 @@ static int handle_change_mac_rsp(union ibmvnic_crq *crq,
7074 dev_err(dev, "Error %ld in CHANGE_MAC_ADDR_RSP\n", rc);
7075 goto out;
7076 }
7077 + /* crq->change_mac_addr.mac_addr is the requested one
7078 + * crq->change_mac_addr_rsp.mac_addr is the returned valid one.
7079 + */
7080 ether_addr_copy(netdev->dev_addr,
7081 &crq->change_mac_addr_rsp.mac_addr[0]);
7082 + ether_addr_copy(adapter->mac_addr,
7083 + &crq->change_mac_addr_rsp.mac_addr[0]);
7084 out:
7085 complete(&adapter->fw_done);
7086 return rc;
7087 @@ -4472,7 +4477,7 @@ static int handle_query_phys_parms_rsp(union ibmvnic_crq *crq,
7088 case IBMVNIC_1GBPS:
7089 adapter->speed = SPEED_1000;
7090 break;
7091 - case IBMVNIC_10GBP:
7092 + case IBMVNIC_10GBPS:
7093 adapter->speed = SPEED_10000;
7094 break;
7095 case IBMVNIC_25GBPS:
7096 @@ -4487,6 +4492,9 @@ static int handle_query_phys_parms_rsp(union ibmvnic_crq *crq,
7097 case IBMVNIC_100GBPS:
7098 adapter->speed = SPEED_100000;
7099 break;
7100 + case IBMVNIC_200GBPS:
7101 + adapter->speed = SPEED_200000;
7102 + break;
7103 default:
7104 if (netif_carrier_ok(netdev))
7105 netdev_warn(netdev, "Unknown speed 0x%08x\n", rspeed);
7106 diff --git a/drivers/net/ethernet/ibm/ibmvnic.h b/drivers/net/ethernet/ibm/ibmvnic.h
7107 index ebc39248b334a..0da20f19bb17c 100644
7108 --- a/drivers/net/ethernet/ibm/ibmvnic.h
7109 +++ b/drivers/net/ethernet/ibm/ibmvnic.h
7110 @@ -373,7 +373,7 @@ struct ibmvnic_phys_parms {
7111 #define IBMVNIC_10MBPS 0x40000000
7112 #define IBMVNIC_100MBPS 0x20000000
7113 #define IBMVNIC_1GBPS 0x10000000
7114 -#define IBMVNIC_10GBP 0x08000000
7115 +#define IBMVNIC_10GBPS 0x08000000
7116 #define IBMVNIC_40GBPS 0x04000000
7117 #define IBMVNIC_100GBPS 0x02000000
7118 #define IBMVNIC_25GBPS 0x01000000
7119 diff --git a/drivers/net/ethernet/korina.c b/drivers/net/ethernet/korina.c
7120 index ae195f8adff58..993f495e2bf7b 100644
7121 --- a/drivers/net/ethernet/korina.c
7122 +++ b/drivers/net/ethernet/korina.c
7123 @@ -1113,7 +1113,7 @@ out:
7124 return rc;
7125
7126 probe_err_register:
7127 - kfree(lp->td_ring);
7128 + kfree((struct dma_desc *)KSEG0ADDR(lp->td_ring));
7129 probe_err_td_ring:
7130 iounmap(lp->tx_dma_regs);
7131 probe_err_dma_tx:
7132 @@ -1133,6 +1133,7 @@ static int korina_remove(struct platform_device *pdev)
7133 iounmap(lp->eth_regs);
7134 iounmap(lp->rx_dma_regs);
7135 iounmap(lp->tx_dma_regs);
7136 + kfree((struct dma_desc *)KSEG0ADDR(lp->td_ring));
7137
7138 unregister_netdev(bif->dev);
7139 free_netdev(bif->dev);
7140 diff --git a/drivers/net/ethernet/mellanox/mlx4/en_rx.c b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
7141 index db3552f2d0877..f9797e5038841 100644
7142 --- a/drivers/net/ethernet/mellanox/mlx4/en_rx.c
7143 +++ b/drivers/net/ethernet/mellanox/mlx4/en_rx.c
7144 @@ -942,6 +942,9 @@ int mlx4_en_poll_rx_cq(struct napi_struct *napi, int budget)
7145 bool clean_complete = true;
7146 int done;
7147
7148 + if (!budget)
7149 + return 0;
7150 +
7151 if (priv->tx_ring_num[TX_XDP]) {
7152 xdp_tx_cq = priv->tx_cq[TX_XDP][cq->ring];
7153 if (xdp_tx_cq->xdp_busy) {
7154 diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
7155 index a30edb436f4af..191ead7a7fa59 100644
7156 --- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
7157 +++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
7158 @@ -350,7 +350,7 @@ u32 mlx4_en_recycle_tx_desc(struct mlx4_en_priv *priv,
7159 .dma = tx_info->map0_dma,
7160 };
7161
7162 - if (!mlx4_en_rx_recycle(ring->recycle_ring, &frame)) {
7163 + if (!napi_mode || !mlx4_en_rx_recycle(ring->recycle_ring, &frame)) {
7164 dma_unmap_page(priv->ddev, tx_info->map0_dma,
7165 PAGE_SIZE, priv->dma_dir);
7166 put_page(tx_info->page);
7167 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c b/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
7168 index 75fc283cacc36..492ff2ef9a404 100644
7169 --- a/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
7170 +++ b/drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
7171 @@ -498,8 +498,9 @@ static int mlx5_pps_event(struct notifier_block *nb,
7172 switch (clock->ptp_info.pin_config[pin].func) {
7173 case PTP_PF_EXTTS:
7174 ptp_event.index = pin;
7175 - ptp_event.timestamp = timecounter_cyc2time(&clock->tc,
7176 - be64_to_cpu(eqe->data.pps.time_stamp));
7177 + ptp_event.timestamp =
7178 + mlx5_timecounter_cyc2time(clock,
7179 + be64_to_cpu(eqe->data.pps.time_stamp));
7180 if (clock->pps_info.enabled) {
7181 ptp_event.type = PTP_CLOCK_PPSUSR;
7182 ptp_event.pps_times.ts_real =
7183 diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
7184 index 66c97049f52b7..f838abdb35e1d 100644
7185 --- a/drivers/net/ethernet/realtek/r8169_main.c
7186 +++ b/drivers/net/ethernet/realtek/r8169_main.c
7187 @@ -5514,6 +5514,10 @@ static int rtl8169_change_mtu(struct net_device *dev, int new_mtu)
7188 dev->mtu = new_mtu;
7189 netdev_update_features(dev);
7190
7191 + /* Reportedly at least Asus X453MA truncates packets otherwise */
7192 + if (tp->mac_version == RTL_GIGA_MAC_VER_37)
7193 + rtl_init_rxcfg(tp);
7194 +
7195 return 0;
7196 }
7197
7198 @@ -6414,7 +6418,7 @@ static int rtl8169_close(struct net_device *dev)
7199
7200 phy_disconnect(tp->phydev);
7201
7202 - pci_free_irq(pdev, 0, tp);
7203 + free_irq(pci_irq_vector(pdev, 0), tp);
7204
7205 dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
7206 tp->RxPhyAddr);
7207 @@ -6465,8 +6469,8 @@ static int rtl_open(struct net_device *dev)
7208
7209 rtl_request_firmware(tp);
7210
7211 - retval = pci_request_irq(pdev, 0, rtl8169_interrupt, NULL, tp,
7212 - dev->name);
7213 + retval = request_irq(pci_irq_vector(pdev, 0), rtl8169_interrupt,
7214 + IRQF_NO_THREAD | IRQF_SHARED, dev->name, tp);
7215 if (retval < 0)
7216 goto err_release_fw_2;
7217
7218 @@ -6499,7 +6503,7 @@ out:
7219 return retval;
7220
7221 err_free_irq:
7222 - pci_free_irq(pdev, 0, tp);
7223 + free_irq(pci_irq_vector(pdev, 0), tp);
7224 err_release_fw_2:
7225 rtl_release_firmware(tp);
7226 rtl8169_rx_clear(tp);
7227 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
7228 index 982be75fde833..189cdb7633671 100644
7229 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
7230 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
7231 @@ -175,32 +175,6 @@ static void stmmac_enable_all_queues(struct stmmac_priv *priv)
7232 }
7233 }
7234
7235 -/**
7236 - * stmmac_stop_all_queues - Stop all queues
7237 - * @priv: driver private structure
7238 - */
7239 -static void stmmac_stop_all_queues(struct stmmac_priv *priv)
7240 -{
7241 - u32 tx_queues_cnt = priv->plat->tx_queues_to_use;
7242 - u32 queue;
7243 -
7244 - for (queue = 0; queue < tx_queues_cnt; queue++)
7245 - netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue));
7246 -}
7247 -
7248 -/**
7249 - * stmmac_start_all_queues - Start all queues
7250 - * @priv: driver private structure
7251 - */
7252 -static void stmmac_start_all_queues(struct stmmac_priv *priv)
7253 -{
7254 - u32 tx_queues_cnt = priv->plat->tx_queues_to_use;
7255 - u32 queue;
7256 -
7257 - for (queue = 0; queue < tx_queues_cnt; queue++)
7258 - netif_tx_start_queue(netdev_get_tx_queue(priv->dev, queue));
7259 -}
7260 -
7261 static void stmmac_service_event_schedule(struct stmmac_priv *priv)
7262 {
7263 if (!test_bit(STMMAC_DOWN, &priv->state) &&
7264 @@ -2737,7 +2711,7 @@ static int stmmac_open(struct net_device *dev)
7265 }
7266
7267 stmmac_enable_all_queues(priv);
7268 - stmmac_start_all_queues(priv);
7269 + netif_tx_start_all_queues(priv->dev);
7270
7271 return 0;
7272
7273 @@ -2778,8 +2752,6 @@ static int stmmac_release(struct net_device *dev)
7274 phylink_stop(priv->phylink);
7275 phylink_disconnect_phy(priv->phylink);
7276
7277 - stmmac_stop_all_queues(priv);
7278 -
7279 stmmac_disable_all_queues(priv);
7280
7281 for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
7282 @@ -4770,7 +4742,6 @@ int stmmac_suspend(struct device *dev)
7283 mutex_lock(&priv->lock);
7284
7285 netif_device_detach(ndev);
7286 - stmmac_stop_all_queues(priv);
7287
7288 stmmac_disable_all_queues(priv);
7289
7290 @@ -4883,8 +4854,6 @@ int stmmac_resume(struct device *dev)
7291
7292 stmmac_enable_all_queues(priv);
7293
7294 - stmmac_start_all_queues(priv);
7295 -
7296 mutex_unlock(&priv->lock);
7297
7298 if (!device_may_wakeup(priv->device)) {
7299 diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
7300 index e57d59b0a7ae9..21d905d90650b 100644
7301 --- a/drivers/net/usb/qmi_wwan.c
7302 +++ b/drivers/net/usb/qmi_wwan.c
7303 @@ -1375,6 +1375,7 @@ static const struct usb_device_id products[] = {
7304 {QMI_QUIRK_SET_DTR(0x2cb7, 0x0104, 4)}, /* Fibocom NL678 series */
7305 {QMI_FIXED_INTF(0x0489, 0xe0b4, 0)}, /* Foxconn T77W968 LTE */
7306 {QMI_FIXED_INTF(0x0489, 0xe0b5, 0)}, /* Foxconn T77W968 LTE with eSIM support*/
7307 + {QMI_FIXED_INTF(0x2692, 0x9025, 4)}, /* Cellient MPL200 (rebranded Qualcomm 05c6:9025) */
7308
7309 /* 4. Gobi 1000 devices */
7310 {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */
7311 diff --git a/drivers/net/wan/hdlc.c b/drivers/net/wan/hdlc.c
7312 index dfc16770458d8..8b6598a3713d1 100644
7313 --- a/drivers/net/wan/hdlc.c
7314 +++ b/drivers/net/wan/hdlc.c
7315 @@ -46,7 +46,15 @@ static struct hdlc_proto *first_proto;
7316 static int hdlc_rcv(struct sk_buff *skb, struct net_device *dev,
7317 struct packet_type *p, struct net_device *orig_dev)
7318 {
7319 - struct hdlc_device *hdlc = dev_to_hdlc(dev);
7320 + struct hdlc_device *hdlc;
7321 +
7322 + /* First make sure "dev" is an HDLC device */
7323 + if (!(dev->priv_flags & IFF_WAN_HDLC)) {
7324 + kfree_skb(skb);
7325 + return NET_RX_SUCCESS;
7326 + }
7327 +
7328 + hdlc = dev_to_hdlc(dev);
7329
7330 if (!net_eq(dev_net(dev), &init_net)) {
7331 kfree_skb(skb);
7332 diff --git a/drivers/net/wan/hdlc_raw_eth.c b/drivers/net/wan/hdlc_raw_eth.c
7333 index 08e0a46501dec..c70a518b8b478 100644
7334 --- a/drivers/net/wan/hdlc_raw_eth.c
7335 +++ b/drivers/net/wan/hdlc_raw_eth.c
7336 @@ -99,6 +99,7 @@ static int raw_eth_ioctl(struct net_device *dev, struct ifreq *ifr)
7337 old_qlen = dev->tx_queue_len;
7338 ether_setup(dev);
7339 dev->tx_queue_len = old_qlen;
7340 + dev->priv_flags &= ~IFF_TX_SKB_SHARING;
7341 eth_hw_addr_random(dev);
7342 call_netdevice_notifiers(NETDEV_POST_TYPE_CHANGE, dev);
7343 netif_dormant_off(dev);
7344 diff --git a/drivers/net/wireless/ath/ath10k/ce.c b/drivers/net/wireless/ath/ath10k/ce.c
7345 index eca87f7c5b6c1..01e05af5ae085 100644
7346 --- a/drivers/net/wireless/ath/ath10k/ce.c
7347 +++ b/drivers/net/wireless/ath/ath10k/ce.c
7348 @@ -1555,7 +1555,7 @@ ath10k_ce_alloc_src_ring(struct ath10k *ar, unsigned int ce_id,
7349 ret = ath10k_ce_alloc_shadow_base(ar, src_ring, nentries);
7350 if (ret) {
7351 dma_free_coherent(ar->dev,
7352 - (nentries * sizeof(struct ce_desc_64) +
7353 + (nentries * sizeof(struct ce_desc) +
7354 CE_DESC_RING_ALIGN),
7355 src_ring->base_addr_owner_space_unaligned,
7356 base_addr);
7357 diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c
7358 index 9f0e7b4943ec6..8ca0a808a644d 100644
7359 --- a/drivers/net/wireless/ath/ath10k/htt_rx.c
7360 +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c
7361 @@ -142,6 +142,14 @@ static int __ath10k_htt_rx_ring_fill_n(struct ath10k_htt *htt, int num)
7362 BUILD_BUG_ON(HTT_RX_RING_FILL_LEVEL >= HTT_RX_RING_SIZE / 2);
7363
7364 idx = __le32_to_cpu(*htt->rx_ring.alloc_idx.vaddr);
7365 +
7366 + if (idx < 0 || idx >= htt->rx_ring.size) {
7367 + ath10k_err(htt->ar, "rx ring index is not valid, firmware malfunctioning?\n");
7368 + idx &= htt->rx_ring.size_mask;
7369 + ret = -ENOMEM;
7370 + goto fail;
7371 + }
7372 +
7373 while (num > 0) {
7374 skb = dev_alloc_skb(HTT_RX_BUF_SIZE + HTT_RX_DESC_ALIGN);
7375 if (!skb) {
7376 diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
7377 index d373602a80145..915ba2a7f7448 100644
7378 --- a/drivers/net/wireless/ath/ath10k/mac.c
7379 +++ b/drivers/net/wireless/ath/ath10k/mac.c
7380 @@ -7131,7 +7131,7 @@ ath10k_mac_update_bss_chan_survey(struct ath10k *ar,
7381 struct ieee80211_channel *channel)
7382 {
7383 int ret;
7384 - enum wmi_bss_survey_req_type type = WMI_BSS_SURVEY_REQ_TYPE_READ_CLEAR;
7385 + enum wmi_bss_survey_req_type type = WMI_BSS_SURVEY_REQ_TYPE_READ;
7386
7387 lockdep_assert_held(&ar->conf_mutex);
7388
7389 diff --git a/drivers/net/wireless/ath/ath6kl/main.c b/drivers/net/wireless/ath/ath6kl/main.c
7390 index 5e7ea838a9218..814131a0680a4 100644
7391 --- a/drivers/net/wireless/ath/ath6kl/main.c
7392 +++ b/drivers/net/wireless/ath/ath6kl/main.c
7393 @@ -430,6 +430,9 @@ void ath6kl_connect_ap_mode_sta(struct ath6kl_vif *vif, u16 aid, u8 *mac_addr,
7394
7395 ath6kl_dbg(ATH6KL_DBG_TRC, "new station %pM aid=%d\n", mac_addr, aid);
7396
7397 + if (aid < 1 || aid > AP_MAX_NUM_STA)
7398 + return;
7399 +
7400 if (assoc_req_len > sizeof(struct ieee80211_hdr_3addr)) {
7401 struct ieee80211_mgmt *mgmt =
7402 (struct ieee80211_mgmt *) assoc_info;
7403 diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
7404 index 2382c6c46851e..c610fe21c85c0 100644
7405 --- a/drivers/net/wireless/ath/ath6kl/wmi.c
7406 +++ b/drivers/net/wireless/ath/ath6kl/wmi.c
7407 @@ -2645,6 +2645,11 @@ int ath6kl_wmi_delete_pstream_cmd(struct wmi *wmi, u8 if_idx, u8 traffic_class,
7408 return -EINVAL;
7409 }
7410
7411 + if (tsid >= 16) {
7412 + ath6kl_err("invalid tsid: %d\n", tsid);
7413 + return -EINVAL;
7414 + }
7415 +
7416 skb = ath6kl_wmi_get_new_buf(sizeof(*cmd));
7417 if (!skb)
7418 return -ENOMEM;
7419 diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
7420 index 3f563e02d17da..2ed98aaed6fb5 100644
7421 --- a/drivers/net/wireless/ath/ath9k/hif_usb.c
7422 +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
7423 @@ -449,10 +449,19 @@ static void hif_usb_stop(void *hif_handle)
7424 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
7425
7426 /* The pending URBs have to be canceled. */
7427 + spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
7428 list_for_each_entry_safe(tx_buf, tx_buf_tmp,
7429 &hif_dev->tx.tx_pending, list) {
7430 + usb_get_urb(tx_buf->urb);
7431 + spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
7432 usb_kill_urb(tx_buf->urb);
7433 + list_del(&tx_buf->list);
7434 + usb_free_urb(tx_buf->urb);
7435 + kfree(tx_buf->buf);
7436 + kfree(tx_buf);
7437 + spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
7438 }
7439 + spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
7440
7441 usb_kill_anchored_urbs(&hif_dev->mgmt_submitted);
7442 }
7443 @@ -762,27 +771,37 @@ static void ath9k_hif_usb_dealloc_tx_urbs(struct hif_device_usb *hif_dev)
7444 struct tx_buf *tx_buf = NULL, *tx_buf_tmp = NULL;
7445 unsigned long flags;
7446
7447 + spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
7448 list_for_each_entry_safe(tx_buf, tx_buf_tmp,
7449 &hif_dev->tx.tx_buf, list) {
7450 + usb_get_urb(tx_buf->urb);
7451 + spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
7452 usb_kill_urb(tx_buf->urb);
7453 list_del(&tx_buf->list);
7454 usb_free_urb(tx_buf->urb);
7455 kfree(tx_buf->buf);
7456 kfree(tx_buf);
7457 + spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
7458 }
7459 + spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
7460
7461 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
7462 hif_dev->tx.flags |= HIF_USB_TX_FLUSH;
7463 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
7464
7465 + spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
7466 list_for_each_entry_safe(tx_buf, tx_buf_tmp,
7467 &hif_dev->tx.tx_pending, list) {
7468 + usb_get_urb(tx_buf->urb);
7469 + spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
7470 usb_kill_urb(tx_buf->urb);
7471 list_del(&tx_buf->list);
7472 usb_free_urb(tx_buf->urb);
7473 kfree(tx_buf->buf);
7474 kfree(tx_buf);
7475 + spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
7476 }
7477 + spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);
7478
7479 usb_kill_anchored_urbs(&hif_dev->mgmt_submitted);
7480 }
7481 diff --git a/drivers/net/wireless/ath/ath9k/htc_hst.c b/drivers/net/wireless/ath/ath9k/htc_hst.c
7482 index d2e062eaf5614..510e61e97dbcb 100644
7483 --- a/drivers/net/wireless/ath/ath9k/htc_hst.c
7484 +++ b/drivers/net/wireless/ath/ath9k/htc_hst.c
7485 @@ -339,6 +339,8 @@ void ath9k_htc_txcompletion_cb(struct htc_target *htc_handle,
7486
7487 if (skb) {
7488 htc_hdr = (struct htc_frame_hdr *) skb->data;
7489 + if (htc_hdr->endpoint_id >= ARRAY_SIZE(htc_handle->endpoint))
7490 + goto ret;
7491 endpoint = &htc_handle->endpoint[htc_hdr->endpoint_id];
7492 skb_pull(skb, sizeof(struct htc_frame_hdr));
7493
7494 diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
7495 index ad051f34e65b2..46ae4ec4ad47d 100644
7496 --- a/drivers/net/wireless/ath/wcn36xx/main.c
7497 +++ b/drivers/net/wireless/ath/wcn36xx/main.c
7498 @@ -163,7 +163,7 @@ static struct ieee80211_supported_band wcn_band_5ghz = {
7499 .ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
7500 .mcs = {
7501 .rx_mask = { 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
7502 - .rx_highest = cpu_to_le16(72),
7503 + .rx_highest = cpu_to_le16(150),
7504 .tx_params = IEEE80211_HT_MCS_TX_DEFINED,
7505 }
7506 }
7507 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
7508 index 85cf96461ddeb..e9bb8dbdc9aa8 100644
7509 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
7510 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
7511 @@ -483,7 +483,7 @@ static int brcmf_rx_hdrpull(struct brcmf_pub *drvr, struct sk_buff *skb,
7512 ret = brcmf_proto_hdrpull(drvr, true, skb, ifp);
7513
7514 if (ret || !(*ifp) || !(*ifp)->ndev) {
7515 - if (ret != -ENODATA && *ifp)
7516 + if (ret != -ENODATA && *ifp && (*ifp)->ndev)
7517 (*ifp)->ndev->stats.rx_errors++;
7518 brcmu_pkt_buf_free_skb(skb);
7519 return -ENODATA;
7520 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
7521 index e3dd8623be4ec..c2705d7a4247e 100644
7522 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
7523 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
7524 @@ -1619,6 +1619,8 @@ fail:
7525 BRCMF_TX_IOCTL_MAX_MSG_SIZE,
7526 msgbuf->ioctbuf,
7527 msgbuf->ioctbuf_handle);
7528 + if (msgbuf->txflow_wq)
7529 + destroy_workqueue(msgbuf->txflow_wq);
7530 kfree(msgbuf);
7531 }
7532 return -ENOMEM;
7533 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c
7534 index 7ef36234a25dc..66797dc5e90d5 100644
7535 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c
7536 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c
7537 @@ -5065,8 +5065,10 @@ bool wlc_phy_attach_lcnphy(struct brcms_phy *pi)
7538 pi->pi_fptr.radioloftget = wlc_lcnphy_get_radio_loft;
7539 pi->pi_fptr.detach = wlc_phy_detach_lcnphy;
7540
7541 - if (!wlc_phy_txpwr_srom_read_lcnphy(pi))
7542 + if (!wlc_phy_txpwr_srom_read_lcnphy(pi)) {
7543 + kfree(pi->u.pi_lcnphy);
7544 return false;
7545 + }
7546
7547 if (LCNREV_IS(pi->pubpi.phy_rev, 1)) {
7548 if (pi_lcn->lcnphy_tempsense_option == 3) {
7549 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
7550 index ed92a8e8cd519..01b26b3327b01 100644
7551 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
7552 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
7553 @@ -3650,9 +3650,12 @@ static int iwl_mvm_send_aux_roc_cmd(struct iwl_mvm *mvm,
7554 tail->apply_time_max_delay = cpu_to_le32(delay);
7555
7556 IWL_DEBUG_TE(mvm,
7557 - "ROC: Requesting to remain on channel %u for %ums (requested = %ums, max_delay = %ums, dtim_interval = %ums)\n",
7558 - channel->hw_value, req_dur, duration, delay,
7559 - dtim_interval);
7560 + "ROC: Requesting to remain on channel %u for %ums\n",
7561 + channel->hw_value, req_dur);
7562 + IWL_DEBUG_TE(mvm,
7563 + "\t(requested = %ums, max_delay = %ums, dtim_interval = %ums)\n",
7564 + duration, delay, dtim_interval);
7565 +
7566 /* Set the node address */
7567 memcpy(tail->node_addr, vif->addr, ETH_ALEN);
7568
7569 diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c b/drivers/net/wireless/marvell/mwifiex/scan.c
7570 index 59f0651d148bb..629af26675cf1 100644
7571 --- a/drivers/net/wireless/marvell/mwifiex/scan.c
7572 +++ b/drivers/net/wireless/marvell/mwifiex/scan.c
7573 @@ -1891,7 +1891,7 @@ mwifiex_parse_single_response_buf(struct mwifiex_private *priv, u8 **bss_info,
7574 chan, CFG80211_BSS_FTYPE_UNKNOWN,
7575 bssid, timestamp,
7576 cap_info_bitmap, beacon_period,
7577 - ie_buf, ie_len, rssi, GFP_KERNEL);
7578 + ie_buf, ie_len, rssi, GFP_ATOMIC);
7579 if (bss) {
7580 bss_priv = (struct mwifiex_bss_priv *)bss->priv;
7581 bss_priv->band = band;
7582 diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.c b/drivers/net/wireless/marvell/mwifiex/sdio.c
7583 index fec38b6e86ffd..b322c2755e9a4 100644
7584 --- a/drivers/net/wireless/marvell/mwifiex/sdio.c
7585 +++ b/drivers/net/wireless/marvell/mwifiex/sdio.c
7586 @@ -1996,6 +1996,8 @@ error:
7587 kfree(card->mpa_rx.buf);
7588 card->mpa_tx.buf_size = 0;
7589 card->mpa_rx.buf_size = 0;
7590 + card->mpa_tx.buf = NULL;
7591 + card->mpa_rx.buf = NULL;
7592 }
7593
7594 return ret;
7595 diff --git a/drivers/net/wireless/marvell/mwifiex/usb.c b/drivers/net/wireless/marvell/mwifiex/usb.c
7596 index c2365eeb70168..528107d70c1cb 100644
7597 --- a/drivers/net/wireless/marvell/mwifiex/usb.c
7598 +++ b/drivers/net/wireless/marvell/mwifiex/usb.c
7599 @@ -1353,7 +1353,8 @@ static void mwifiex_usb_cleanup_tx_aggr(struct mwifiex_adapter *adapter)
7600 skb_dequeue(&port->tx_aggr.aggr_list)))
7601 mwifiex_write_data_complete(adapter, skb_tmp,
7602 0, -1);
7603 - del_timer_sync(&port->tx_aggr.timer_cnxt.hold_timer);
7604 + if (port->tx_aggr.timer_cnxt.hold_timer.function)
7605 + del_timer_sync(&port->tx_aggr.timer_cnxt.hold_timer);
7606 port->tx_aggr.timer_cnxt.is_hold_timer_set = false;
7607 port->tx_aggr.timer_cnxt.hold_tmo_msecs = 0;
7608 }
7609 diff --git a/drivers/net/wireless/quantenna/qtnfmac/commands.c b/drivers/net/wireless/quantenna/qtnfmac/commands.c
7610 index c0c32805fb8de..106f1a846f499 100644
7611 --- a/drivers/net/wireless/quantenna/qtnfmac/commands.c
7612 +++ b/drivers/net/wireless/quantenna/qtnfmac/commands.c
7613 @@ -834,6 +834,7 @@ int qtnf_cmd_send_del_intf(struct qtnf_vif *vif)
7614 default:
7615 pr_warn("VIF%u.%u: unsupported iftype %d\n", vif->mac->macid,
7616 vif->vifid, vif->wdev.iftype);
7617 + dev_kfree_skb(cmd_skb);
7618 ret = -EINVAL;
7619 goto out;
7620 }
7621 @@ -1996,6 +1997,7 @@ int qtnf_cmd_send_change_sta(struct qtnf_vif *vif, const u8 *mac,
7622 break;
7623 default:
7624 pr_err("unsupported iftype %d\n", vif->wdev.iftype);
7625 + dev_kfree_skb(cmd_skb);
7626 ret = -EINVAL;
7627 goto out;
7628 }
7629 diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
7630 index 3499b211dad51..048984ca81fdb 100644
7631 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
7632 +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
7633 @@ -5447,7 +5447,6 @@ static int rtl8xxxu_submit_int_urb(struct ieee80211_hw *hw)
7634 ret = usb_submit_urb(urb, GFP_KERNEL);
7635 if (ret) {
7636 usb_unanchor_urb(urb);
7637 - usb_free_urb(urb);
7638 goto error;
7639 }
7640
7641 @@ -5456,6 +5455,7 @@ static int rtl8xxxu_submit_int_urb(struct ieee80211_hw *hw)
7642 rtl8xxxu_write32(priv, REG_USB_HIMR, val32);
7643
7644 error:
7645 + usb_free_urb(urb);
7646 return ret;
7647 }
7648
7649 @@ -5781,6 +5781,7 @@ static int rtl8xxxu_start(struct ieee80211_hw *hw)
7650 struct rtl8xxxu_priv *priv = hw->priv;
7651 struct rtl8xxxu_rx_urb *rx_urb;
7652 struct rtl8xxxu_tx_urb *tx_urb;
7653 + struct sk_buff *skb;
7654 unsigned long flags;
7655 int ret, i;
7656
7657 @@ -5831,6 +5832,13 @@ static int rtl8xxxu_start(struct ieee80211_hw *hw)
7658 rx_urb->hw = hw;
7659
7660 ret = rtl8xxxu_submit_rx_urb(priv, rx_urb);
7661 + if (ret) {
7662 + if (ret != -ENOMEM) {
7663 + skb = (struct sk_buff *)rx_urb->urb.context;
7664 + dev_kfree_skb(skb);
7665 + }
7666 + rtl8xxxu_queue_rx_urb(priv, rx_urb);
7667 + }
7668 }
7669 exit:
7670 /*
7671 diff --git a/drivers/net/wireless/realtek/rtw88/pci.h b/drivers/net/wireless/realtek/rtw88/pci.h
7672 index 87824a4caba98..a47d871ae506a 100644
7673 --- a/drivers/net/wireless/realtek/rtw88/pci.h
7674 +++ b/drivers/net/wireless/realtek/rtw88/pci.h
7675 @@ -13,8 +13,8 @@
7676 #define RTK_BEQ_TX_DESC_NUM 256
7677
7678 #define RTK_MAX_RX_DESC_NUM 512
7679 -/* 8K + rx desc size */
7680 -#define RTK_PCI_RX_BUF_SIZE (8192 + 24)
7681 +/* 11K + rx desc size */
7682 +#define RTK_PCI_RX_BUF_SIZE (11454 + 24)
7683
7684 #define RTK_PCI_CTRL 0x300
7685 #define BIT_RST_TRXDMA_INTF BIT(20)
7686 diff --git a/drivers/ntb/hw/amd/ntb_hw_amd.c b/drivers/ntb/hw/amd/ntb_hw_amd.c
7687 index 156c2a18a2394..abb37659de343 100644
7688 --- a/drivers/ntb/hw/amd/ntb_hw_amd.c
7689 +++ b/drivers/ntb/hw/amd/ntb_hw_amd.c
7690 @@ -1036,6 +1036,7 @@ static int amd_ntb_init_pci(struct amd_ntb_dev *ndev,
7691
7692 err_dma_mask:
7693 pci_clear_master(pdev);
7694 + pci_release_regions(pdev);
7695 err_pci_regions:
7696 pci_disable_device(pdev);
7697 err_pci_enable:
7698 diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
7699 index af0b51d1d43e8..f5d12bf109c78 100644
7700 --- a/drivers/nvme/host/pci.c
7701 +++ b/drivers/nvme/host/pci.c
7702 @@ -3110,7 +3110,8 @@ static const struct pci_device_id nvme_id_table[] = {
7703 NVME_QUIRK_DEALLOCATE_ZEROES, },
7704 { PCI_VDEVICE(INTEL, 0xf1a5), /* Intel 600P/P3100 */
7705 .driver_data = NVME_QUIRK_NO_DEEPEST_PS |
7706 - NVME_QUIRK_MEDIUM_PRIO_SQ },
7707 + NVME_QUIRK_MEDIUM_PRIO_SQ |
7708 + NVME_QUIRK_DISABLE_WRITE_ZEROES, },
7709 { PCI_VDEVICE(INTEL, 0xf1a6), /* Intel 760p/Pro 7600p */
7710 .driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN, },
7711 { PCI_VDEVICE(INTEL, 0x5845), /* Qemu emulated controller */
7712 diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
7713 index 7d7176369edf7..6b2f1e290fa73 100644
7714 --- a/drivers/nvme/target/core.c
7715 +++ b/drivers/nvme/target/core.c
7716 @@ -1048,7 +1048,8 @@ static void nvmet_start_ctrl(struct nvmet_ctrl *ctrl)
7717 * in case a host died before it enabled the controller. Hence, simply
7718 * reset the keep alive timer when the controller is enabled.
7719 */
7720 - mod_delayed_work(system_wq, &ctrl->ka_work, ctrl->kato * HZ);
7721 + if (ctrl->kato)
7722 + mod_delayed_work(system_wq, &ctrl->ka_work, ctrl->kato * HZ);
7723 }
7724
7725 static void nvmet_clear_ctrl(struct nvmet_ctrl *ctrl)
7726 diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
7727 index 960542dea5adb..84f4078216a36 100644
7728 --- a/drivers/nvmem/core.c
7729 +++ b/drivers/nvmem/core.c
7730 @@ -130,16 +130,14 @@ static void nvmem_cell_add(struct nvmem_cell *cell)
7731 blocking_notifier_call_chain(&nvmem_notifier, NVMEM_CELL_ADD, cell);
7732 }
7733
7734 -static int nvmem_cell_info_to_nvmem_cell(struct nvmem_device *nvmem,
7735 - const struct nvmem_cell_info *info,
7736 - struct nvmem_cell *cell)
7737 +static int nvmem_cell_info_to_nvmem_cell_nodup(struct nvmem_device *nvmem,
7738 + const struct nvmem_cell_info *info,
7739 + struct nvmem_cell *cell)
7740 {
7741 cell->nvmem = nvmem;
7742 cell->offset = info->offset;
7743 cell->bytes = info->bytes;
7744 - cell->name = kstrdup_const(info->name, GFP_KERNEL);
7745 - if (!cell->name)
7746 - return -ENOMEM;
7747 + cell->name = info->name;
7748
7749 cell->bit_offset = info->bit_offset;
7750 cell->nbits = info->nbits;
7751 @@ -151,13 +149,30 @@ static int nvmem_cell_info_to_nvmem_cell(struct nvmem_device *nvmem,
7752 if (!IS_ALIGNED(cell->offset, nvmem->stride)) {
7753 dev_err(&nvmem->dev,
7754 "cell %s unaligned to nvmem stride %d\n",
7755 - cell->name, nvmem->stride);
7756 + cell->name ?: "<unknown>", nvmem->stride);
7757 return -EINVAL;
7758 }
7759
7760 return 0;
7761 }
7762
7763 +static int nvmem_cell_info_to_nvmem_cell(struct nvmem_device *nvmem,
7764 + const struct nvmem_cell_info *info,
7765 + struct nvmem_cell *cell)
7766 +{
7767 + int err;
7768 +
7769 + err = nvmem_cell_info_to_nvmem_cell_nodup(nvmem, info, cell);
7770 + if (err)
7771 + return err;
7772 +
7773 + cell->name = kstrdup_const(info->name, GFP_KERNEL);
7774 + if (!cell->name)
7775 + return -ENOMEM;
7776 +
7777 + return 0;
7778 +}
7779 +
7780 /**
7781 * nvmem_add_cells() - Add cell information to an nvmem device
7782 *
7783 @@ -1174,7 +1189,7 @@ ssize_t nvmem_device_cell_read(struct nvmem_device *nvmem,
7784 if (!nvmem)
7785 return -EINVAL;
7786
7787 - rc = nvmem_cell_info_to_nvmem_cell(nvmem, info, &cell);
7788 + rc = nvmem_cell_info_to_nvmem_cell_nodup(nvmem, info, &cell);
7789 if (rc)
7790 return rc;
7791
7792 @@ -1204,7 +1219,7 @@ int nvmem_device_cell_write(struct nvmem_device *nvmem,
7793 if (!nvmem)
7794 return -EINVAL;
7795
7796 - rc = nvmem_cell_info_to_nvmem_cell(nvmem, info, &cell);
7797 + rc = nvmem_cell_info_to_nvmem_cell_nodup(nvmem, info, &cell);
7798 if (rc)
7799 return rc;
7800
7801 diff --git a/drivers/opp/core.c b/drivers/opp/core.c
7802 index 29dfaa591f8b0..8867bab72e171 100644
7803 --- a/drivers/opp/core.c
7804 +++ b/drivers/opp/core.c
7805 @@ -1796,6 +1796,9 @@ static void _opp_detach_genpd(struct opp_table *opp_table)
7806 {
7807 int index;
7808
7809 + if (!opp_table->genpd_virt_devs)
7810 + return;
7811 +
7812 for (index = 0; index < opp_table->required_opp_count; index++) {
7813 if (!opp_table->genpd_virt_devs[index])
7814 continue;
7815 @@ -1842,6 +1845,9 @@ struct opp_table *dev_pm_opp_attach_genpd(struct device *dev,
7816 if (!opp_table)
7817 return ERR_PTR(-ENOMEM);
7818
7819 + if (opp_table->genpd_virt_devs)
7820 + return opp_table;
7821 +
7822 /*
7823 * If the genpd's OPP table isn't already initialized, parsing of the
7824 * required-opps fail for dev. We should retry this after genpd's OPP
7825 diff --git a/drivers/pci/controller/pci-aardvark.c b/drivers/pci/controller/pci-aardvark.c
7826 index f2481e80e2723..d0e60441dc8f2 100644
7827 --- a/drivers/pci/controller/pci-aardvark.c
7828 +++ b/drivers/pci/controller/pci-aardvark.c
7829 @@ -503,7 +503,7 @@ static struct pci_bridge_emul_ops advk_pci_bridge_emul_ops = {
7830 * Initialize the configuration space of the PCI-to-PCI bridge
7831 * associated with the given PCIe interface.
7832 */
7833 -static void advk_sw_pci_bridge_init(struct advk_pcie *pcie)
7834 +static int advk_sw_pci_bridge_init(struct advk_pcie *pcie)
7835 {
7836 struct pci_bridge_emul *bridge = &pcie->bridge;
7837
7838 @@ -527,8 +527,7 @@ static void advk_sw_pci_bridge_init(struct advk_pcie *pcie)
7839 bridge->data = pcie;
7840 bridge->ops = &advk_pci_bridge_emul_ops;
7841
7842 - pci_bridge_emul_init(bridge, 0);
7843 -
7844 + return pci_bridge_emul_init(bridge, 0);
7845 }
7846
7847 static bool advk_pcie_valid_device(struct advk_pcie *pcie, struct pci_bus *bus,
7848 @@ -1027,7 +1026,11 @@ static int advk_pcie_probe(struct platform_device *pdev)
7849
7850 advk_pcie_setup_hw(pcie);
7851
7852 - advk_sw_pci_bridge_init(pcie);
7853 + ret = advk_sw_pci_bridge_init(pcie);
7854 + if (ret) {
7855 + dev_err(dev, "Failed to register emulated root PCI bridge\n");
7856 + return ret;
7857 + }
7858
7859 ret = advk_pcie_init_irq_domain(pcie);
7860 if (ret) {
7861 diff --git a/drivers/pci/controller/pcie-iproc-msi.c b/drivers/pci/controller/pcie-iproc-msi.c
7862 index 0a3f61be5625b..a1298f6784ac9 100644
7863 --- a/drivers/pci/controller/pcie-iproc-msi.c
7864 +++ b/drivers/pci/controller/pcie-iproc-msi.c
7865 @@ -209,15 +209,20 @@ static int iproc_msi_irq_set_affinity(struct irq_data *data,
7866 struct iproc_msi *msi = irq_data_get_irq_chip_data(data);
7867 int target_cpu = cpumask_first(mask);
7868 int curr_cpu;
7869 + int ret;
7870
7871 curr_cpu = hwirq_to_cpu(msi, data->hwirq);
7872 if (curr_cpu == target_cpu)
7873 - return IRQ_SET_MASK_OK_DONE;
7874 + ret = IRQ_SET_MASK_OK_DONE;
7875 + else {
7876 + /* steer MSI to the target CPU */
7877 + data->hwirq = hwirq_to_canonical_hwirq(msi, data->hwirq) + target_cpu;
7878 + ret = IRQ_SET_MASK_OK;
7879 + }
7880
7881 - /* steer MSI to the target CPU */
7882 - data->hwirq = hwirq_to_canonical_hwirq(msi, data->hwirq) + target_cpu;
7883 + irq_data_update_effective_affinity(data, cpumask_of(target_cpu));
7884
7885 - return IRQ_SET_MASK_OK;
7886 + return ret;
7887 }
7888
7889 static void iproc_msi_irq_compose_msi_msg(struct irq_data *data,
7890 diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
7891 index 9c116cbaa95d8..e15220385666f 100644
7892 --- a/drivers/pci/iov.c
7893 +++ b/drivers/pci/iov.c
7894 @@ -158,6 +158,7 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
7895 virtfn->device = iov->vf_device;
7896 virtfn->is_virtfn = 1;
7897 virtfn->physfn = pci_dev_get(dev);
7898 + virtfn->no_command_memory = 1;
7899
7900 if (id == 0)
7901 pci_read_vf_config_common(virtfn);
7902 diff --git a/drivers/perf/thunderx2_pmu.c b/drivers/perf/thunderx2_pmu.c
7903 index 9e1c3c7eeba9b..170ccb164c604 100644
7904 --- a/drivers/perf/thunderx2_pmu.c
7905 +++ b/drivers/perf/thunderx2_pmu.c
7906 @@ -627,14 +627,17 @@ static struct tx2_uncore_pmu *tx2_uncore_pmu_init_dev(struct device *dev,
7907 list_for_each_entry(rentry, &list, node) {
7908 if (resource_type(rentry->res) == IORESOURCE_MEM) {
7909 res = *rentry->res;
7910 + rentry = NULL;
7911 break;
7912 }
7913 }
7914 + acpi_dev_free_resource_list(&list);
7915
7916 - if (!rentry->res)
7917 + if (rentry) {
7918 + dev_err(dev, "PMU type %d: Fail to find resource\n", type);
7919 return NULL;
7920 + }
7921
7922 - acpi_dev_free_resource_list(&list);
7923 base = devm_ioremap_resource(dev, &res);
7924 if (IS_ERR(base)) {
7925 dev_err(dev, "PMU type %d: Fail to map resource\n", type);
7926 diff --git a/drivers/perf/xgene_pmu.c b/drivers/perf/xgene_pmu.c
7927 index 328aea9f6be32..50b37f8f5c7ff 100644
7928 --- a/drivers/perf/xgene_pmu.c
7929 +++ b/drivers/perf/xgene_pmu.c
7930 @@ -1459,17 +1459,6 @@ static char *xgene_pmu_dev_name(struct device *dev, u32 type, int id)
7931 }
7932
7933 #if defined(CONFIG_ACPI)
7934 -static int acpi_pmu_dev_add_resource(struct acpi_resource *ares, void *data)
7935 -{
7936 - struct resource *res = data;
7937 -
7938 - if (ares->type == ACPI_RESOURCE_TYPE_FIXED_MEMORY32)
7939 - acpi_dev_resource_memory(ares, res);
7940 -
7941 - /* Always tell the ACPI core to skip this resource */
7942 - return 1;
7943 -}
7944 -
7945 static struct
7946 xgene_pmu_dev_ctx *acpi_get_pmu_hw_inf(struct xgene_pmu *xgene_pmu,
7947 struct acpi_device *adev, u32 type)
7948 @@ -1481,6 +1470,7 @@ xgene_pmu_dev_ctx *acpi_get_pmu_hw_inf(struct xgene_pmu *xgene_pmu,
7949 struct hw_pmu_info *inf;
7950 void __iomem *dev_csr;
7951 struct resource res;
7952 + struct resource_entry *rentry;
7953 int enable_bit;
7954 int rc;
7955
7956 @@ -1489,11 +1479,23 @@ xgene_pmu_dev_ctx *acpi_get_pmu_hw_inf(struct xgene_pmu *xgene_pmu,
7957 return NULL;
7958
7959 INIT_LIST_HEAD(&resource_list);
7960 - rc = acpi_dev_get_resources(adev, &resource_list,
7961 - acpi_pmu_dev_add_resource, &res);
7962 + rc = acpi_dev_get_resources(adev, &resource_list, NULL, NULL);
7963 + if (rc <= 0) {
7964 + dev_err(dev, "PMU type %d: No resources found\n", type);
7965 + return NULL;
7966 + }
7967 +
7968 + list_for_each_entry(rentry, &resource_list, node) {
7969 + if (resource_type(rentry->res) == IORESOURCE_MEM) {
7970 + res = *rentry->res;
7971 + rentry = NULL;
7972 + break;
7973 + }
7974 + }
7975 acpi_dev_free_resource_list(&resource_list);
7976 - if (rc < 0) {
7977 - dev_err(dev, "PMU type %d: No resource address found\n", type);
7978 +
7979 + if (rentry) {
7980 + dev_err(dev, "PMU type %d: No memory resource found\n", type);
7981 return NULL;
7982 }
7983
7984 diff --git a/drivers/pinctrl/bcm/Kconfig b/drivers/pinctrl/bcm/Kconfig
7985 index dcf7df797af75..0ed14de0134cf 100644
7986 --- a/drivers/pinctrl/bcm/Kconfig
7987 +++ b/drivers/pinctrl/bcm/Kconfig
7988 @@ -23,6 +23,7 @@ config PINCTRL_BCM2835
7989 select PINMUX
7990 select PINCONF
7991 select GENERIC_PINCONF
7992 + select GPIOLIB
7993 select GPIOLIB_IRQCHIP
7994 default ARCH_BCM2835 || ARCH_BRCMSTB
7995 help
7996 diff --git a/drivers/pinctrl/pinctrl-mcp23s08.c b/drivers/pinctrl/pinctrl-mcp23s08.c
7997 index 3a235487e38d7..d8bcbefcba890 100644
7998 --- a/drivers/pinctrl/pinctrl-mcp23s08.c
7999 +++ b/drivers/pinctrl/pinctrl-mcp23s08.c
8000 @@ -122,7 +122,7 @@ static const struct regmap_config mcp23x08_regmap = {
8001 .max_register = MCP_OLAT,
8002 };
8003
8004 -static const struct reg_default mcp23x16_defaults[] = {
8005 +static const struct reg_default mcp23x17_defaults[] = {
8006 {.reg = MCP_IODIR << 1, .def = 0xffff},
8007 {.reg = MCP_IPOL << 1, .def = 0x0000},
8008 {.reg = MCP_GPINTEN << 1, .def = 0x0000},
8009 @@ -133,23 +133,23 @@ static const struct reg_default mcp23x16_defaults[] = {
8010 {.reg = MCP_OLAT << 1, .def = 0x0000},
8011 };
8012
8013 -static const struct regmap_range mcp23x16_volatile_range = {
8014 +static const struct regmap_range mcp23x17_volatile_range = {
8015 .range_min = MCP_INTF << 1,
8016 .range_max = MCP_GPIO << 1,
8017 };
8018
8019 -static const struct regmap_access_table mcp23x16_volatile_table = {
8020 - .yes_ranges = &mcp23x16_volatile_range,
8021 +static const struct regmap_access_table mcp23x17_volatile_table = {
8022 + .yes_ranges = &mcp23x17_volatile_range,
8023 .n_yes_ranges = 1,
8024 };
8025
8026 -static const struct regmap_range mcp23x16_precious_range = {
8027 - .range_min = MCP_GPIO << 1,
8028 +static const struct regmap_range mcp23x17_precious_range = {
8029 + .range_min = MCP_INTCAP << 1,
8030 .range_max = MCP_GPIO << 1,
8031 };
8032
8033 -static const struct regmap_access_table mcp23x16_precious_table = {
8034 - .yes_ranges = &mcp23x16_precious_range,
8035 +static const struct regmap_access_table mcp23x17_precious_table = {
8036 + .yes_ranges = &mcp23x17_precious_range,
8037 .n_yes_ranges = 1,
8038 };
8039
8040 @@ -159,10 +159,10 @@ static const struct regmap_config mcp23x17_regmap = {
8041
8042 .reg_stride = 2,
8043 .max_register = MCP_OLAT << 1,
8044 - .volatile_table = &mcp23x16_volatile_table,
8045 - .precious_table = &mcp23x16_precious_table,
8046 - .reg_defaults = mcp23x16_defaults,
8047 - .num_reg_defaults = ARRAY_SIZE(mcp23x16_defaults),
8048 + .volatile_table = &mcp23x17_volatile_table,
8049 + .precious_table = &mcp23x17_precious_table,
8050 + .reg_defaults = mcp23x17_defaults,
8051 + .num_reg_defaults = ARRAY_SIZE(mcp23x17_defaults),
8052 .cache_type = REGCACHE_FLAT,
8053 .val_format_endian = REGMAP_ENDIAN_LITTLE,
8054 };
8055 diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c
8056 index 8fe51e43f1bc1..59b5b7eebb05a 100644
8057 --- a/drivers/platform/x86/mlx-platform.c
8058 +++ b/drivers/platform/x86/mlx-platform.c
8059 @@ -243,15 +243,6 @@ static struct i2c_board_info mlxplat_mlxcpld_psu[] = {
8060 },
8061 };
8062
8063 -static struct i2c_board_info mlxplat_mlxcpld_ng_psu[] = {
8064 - {
8065 - I2C_BOARD_INFO("24c32", 0x51),
8066 - },
8067 - {
8068 - I2C_BOARD_INFO("24c32", 0x50),
8069 - },
8070 -};
8071 -
8072 static struct i2c_board_info mlxplat_mlxcpld_pwr[] = {
8073 {
8074 I2C_BOARD_INFO("dps460", 0x59),
8075 @@ -611,15 +602,13 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_ng_psu_items_data[] = {
8076 .label = "psu1",
8077 .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
8078 .mask = BIT(0),
8079 - .hpdev.brdinfo = &mlxplat_mlxcpld_ng_psu[0],
8080 - .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
8081 + .hpdev.nr = MLXPLAT_CPLD_NR_NONE,
8082 },
8083 {
8084 .label = "psu2",
8085 .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET,
8086 .mask = BIT(1),
8087 - .hpdev.brdinfo = &mlxplat_mlxcpld_ng_psu[1],
8088 - .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR,
8089 + .hpdev.nr = MLXPLAT_CPLD_NR_NONE,
8090 },
8091 };
8092
8093 diff --git a/drivers/pwm/pwm-img.c b/drivers/pwm/pwm-img.c
8094 index 599a0f66a3845..a34d95ed70b20 100644
8095 --- a/drivers/pwm/pwm-img.c
8096 +++ b/drivers/pwm/pwm-img.c
8097 @@ -277,6 +277,8 @@ static int img_pwm_probe(struct platform_device *pdev)
8098 return PTR_ERR(pwm->pwm_clk);
8099 }
8100
8101 + platform_set_drvdata(pdev, pwm);
8102 +
8103 pm_runtime_set_autosuspend_delay(&pdev->dev, IMG_PWM_PM_TIMEOUT);
8104 pm_runtime_use_autosuspend(&pdev->dev);
8105 pm_runtime_enable(&pdev->dev);
8106 @@ -313,7 +315,6 @@ static int img_pwm_probe(struct platform_device *pdev)
8107 goto err_suspend;
8108 }
8109
8110 - platform_set_drvdata(pdev, pwm);
8111 return 0;
8112
8113 err_suspend:
8114 diff --git a/drivers/pwm/pwm-lpss.c b/drivers/pwm/pwm-lpss.c
8115 index 75bbfe5f3bc29..d77cec2769b76 100644
8116 --- a/drivers/pwm/pwm-lpss.c
8117 +++ b/drivers/pwm/pwm-lpss.c
8118 @@ -93,10 +93,12 @@ static void pwm_lpss_prepare(struct pwm_lpss_chip *lpwm, struct pwm_device *pwm,
8119 * The equation is:
8120 * base_unit = round(base_unit_range * freq / c)
8121 */
8122 - base_unit_range = BIT(lpwm->info->base_unit_bits) - 1;
8123 + base_unit_range = BIT(lpwm->info->base_unit_bits);
8124 freq *= base_unit_range;
8125
8126 base_unit = DIV_ROUND_CLOSEST_ULL(freq, c);
8127 + /* base_unit must not be 0 and we also want to avoid overflowing it */
8128 + base_unit = clamp_val(base_unit, 1, base_unit_range - 1);
8129
8130 on_time_div = 255ULL * duty_ns;
8131 do_div(on_time_div, period_ns);
8132 @@ -104,8 +106,7 @@ static void pwm_lpss_prepare(struct pwm_lpss_chip *lpwm, struct pwm_device *pwm,
8133
8134 orig_ctrl = ctrl = pwm_lpss_read(pwm);
8135 ctrl &= ~PWM_ON_TIME_DIV_MASK;
8136 - ctrl &= ~(base_unit_range << PWM_BASE_UNIT_SHIFT);
8137 - base_unit &= base_unit_range;
8138 + ctrl &= ~((base_unit_range - 1) << PWM_BASE_UNIT_SHIFT);
8139 ctrl |= (u32) base_unit << PWM_BASE_UNIT_SHIFT;
8140 ctrl |= on_time_div;
8141
8142 diff --git a/drivers/rapidio/devices/rio_mport_cdev.c b/drivers/rapidio/devices/rio_mport_cdev.c
8143 index 0b85a80ae7ef6..2b08fdeb87c18 100644
8144 --- a/drivers/rapidio/devices/rio_mport_cdev.c
8145 +++ b/drivers/rapidio/devices/rio_mport_cdev.c
8146 @@ -873,15 +873,16 @@ rio_dma_transfer(struct file *filp, u32 transfer_mode,
8147 rmcd_error("get_user_pages_unlocked err=%ld",
8148 pinned);
8149 nr_pages = 0;
8150 - } else
8151 + } else {
8152 rmcd_error("pinned %ld out of %ld pages",
8153 pinned, nr_pages);
8154 + /*
8155 + * Set nr_pages up to mean "how many pages to unpin, in
8156 + * the error handler:
8157 + */
8158 + nr_pages = pinned;
8159 + }
8160 ret = -EFAULT;
8161 - /*
8162 - * Set nr_pages up to mean "how many pages to unpin, in
8163 - * the error handler:
8164 - */
8165 - nr_pages = pinned;
8166 goto err_pg;
8167 }
8168
8169 @@ -1682,6 +1683,7 @@ static int rio_mport_add_riodev(struct mport_cdev_priv *priv,
8170 struct rio_dev *rdev;
8171 struct rio_switch *rswitch = NULL;
8172 struct rio_mport *mport;
8173 + struct device *dev;
8174 size_t size;
8175 u32 rval;
8176 u32 swpinfo = 0;
8177 @@ -1696,8 +1698,10 @@ static int rio_mport_add_riodev(struct mport_cdev_priv *priv,
8178 rmcd_debug(RDEV, "name:%s ct:0x%x did:0x%x hc:0x%x", dev_info.name,
8179 dev_info.comptag, dev_info.destid, dev_info.hopcount);
8180
8181 - if (bus_find_device_by_name(&rio_bus_type, NULL, dev_info.name)) {
8182 + dev = bus_find_device_by_name(&rio_bus_type, NULL, dev_info.name);
8183 + if (dev) {
8184 rmcd_debug(RDEV, "device %s already exists", dev_info.name);
8185 + put_device(dev);
8186 return -EEXIST;
8187 }
8188
8189 diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
8190 index 55fc80de5ef16..ee850cffe1542 100644
8191 --- a/drivers/regulator/core.c
8192 +++ b/drivers/regulator/core.c
8193 @@ -5158,15 +5158,20 @@ regulator_register(const struct regulator_desc *regulator_desc,
8194 else if (regulator_desc->supply_name)
8195 rdev->supply_name = regulator_desc->supply_name;
8196
8197 - /*
8198 - * Attempt to resolve the regulator supply, if specified,
8199 - * but don't return an error if we fail because we will try
8200 - * to resolve it again later as more regulators are added.
8201 - */
8202 - if (regulator_resolve_supply(rdev))
8203 - rdev_dbg(rdev, "unable to resolve supply\n");
8204 -
8205 ret = set_machine_constraints(rdev, constraints);
8206 + if (ret == -EPROBE_DEFER) {
8207 + /* Regulator might be in bypass mode and so needs its supply
8208 + * to set the constraints */
8209 + /* FIXME: this currently triggers a chicken-and-egg problem
8210 + * when creating -SUPPLY symlink in sysfs to a regulator
8211 + * that is just being created */
8212 + ret = regulator_resolve_supply(rdev);
8213 + if (!ret)
8214 + ret = set_machine_constraints(rdev, constraints);
8215 + else
8216 + rdev_dbg(rdev, "unable to resolve supply early: %pe\n",
8217 + ERR_PTR(ret));
8218 + }
8219 if (ret < 0)
8220 goto wash;
8221
8222 diff --git a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c
8223 index 4abbeea782fa4..19903de6268db 100644
8224 --- a/drivers/rpmsg/qcom_smd.c
8225 +++ b/drivers/rpmsg/qcom_smd.c
8226 @@ -1338,7 +1338,7 @@ static int qcom_smd_parse_edge(struct device *dev,
8227 ret = of_property_read_u32(node, key, &edge->edge_id);
8228 if (ret) {
8229 dev_err(dev, "edge missing %s property\n", key);
8230 - return -EINVAL;
8231 + goto put_node;
8232 }
8233
8234 edge->remote_pid = QCOM_SMEM_HOST_ANY;
8235 @@ -1349,32 +1349,37 @@ static int qcom_smd_parse_edge(struct device *dev,
8236 edge->mbox_client.knows_txdone = true;
8237 edge->mbox_chan = mbox_request_channel(&edge->mbox_client, 0);
8238 if (IS_ERR(edge->mbox_chan)) {
8239 - if (PTR_ERR(edge->mbox_chan) != -ENODEV)
8240 - return PTR_ERR(edge->mbox_chan);
8241 + if (PTR_ERR(edge->mbox_chan) != -ENODEV) {
8242 + ret = PTR_ERR(edge->mbox_chan);
8243 + goto put_node;
8244 + }
8245
8246 edge->mbox_chan = NULL;
8247
8248 syscon_np = of_parse_phandle(node, "qcom,ipc", 0);
8249 if (!syscon_np) {
8250 dev_err(dev, "no qcom,ipc node\n");
8251 - return -ENODEV;
8252 + ret = -ENODEV;
8253 + goto put_node;
8254 }
8255
8256 edge->ipc_regmap = syscon_node_to_regmap(syscon_np);
8257 - if (IS_ERR(edge->ipc_regmap))
8258 - return PTR_ERR(edge->ipc_regmap);
8259 + if (IS_ERR(edge->ipc_regmap)) {
8260 + ret = PTR_ERR(edge->ipc_regmap);
8261 + goto put_node;
8262 + }
8263
8264 key = "qcom,ipc";
8265 ret = of_property_read_u32_index(node, key, 1, &edge->ipc_offset);
8266 if (ret < 0) {
8267 dev_err(dev, "no offset in %s\n", key);
8268 - return -EINVAL;
8269 + goto put_node;
8270 }
8271
8272 ret = of_property_read_u32_index(node, key, 2, &edge->ipc_bit);
8273 if (ret < 0) {
8274 dev_err(dev, "no bit in %s\n", key);
8275 - return -EINVAL;
8276 + goto put_node;
8277 }
8278 }
8279
8280 @@ -1385,7 +1390,8 @@ static int qcom_smd_parse_edge(struct device *dev,
8281 irq = irq_of_parse_and_map(node, 0);
8282 if (irq < 0) {
8283 dev_err(dev, "required smd interrupt missing\n");
8284 - return -EINVAL;
8285 + ret = irq;
8286 + goto put_node;
8287 }
8288
8289 ret = devm_request_irq(dev, irq,
8290 @@ -1393,12 +1399,18 @@ static int qcom_smd_parse_edge(struct device *dev,
8291 node->name, edge);
8292 if (ret) {
8293 dev_err(dev, "failed to request smd irq\n");
8294 - return ret;
8295 + goto put_node;
8296 }
8297
8298 edge->irq = irq;
8299
8300 return 0;
8301 +
8302 +put_node:
8303 + of_node_put(node);
8304 + edge->of_node = NULL;
8305 +
8306 + return ret;
8307 }
8308
8309 /*
8310 diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
8311 index 4ce28aa490cdb..8c4613617ef11 100644
8312 --- a/drivers/s390/net/qeth_l2_main.c
8313 +++ b/drivers/s390/net/qeth_l2_main.c
8314 @@ -1168,12 +1168,6 @@ static void qeth_bridge_state_change_worker(struct work_struct *work)
8315 NULL
8316 };
8317
8318 - /* Role should not change by itself, but if it did, */
8319 - /* information from the hardware is authoritative. */
8320 - mutex_lock(&data->card->sbp_lock);
8321 - data->card->options.sbp.role = entry->role;
8322 - mutex_unlock(&data->card->sbp_lock);
8323 -
8324 snprintf(env_locrem, sizeof(env_locrem), "BRIDGEPORT=statechange");
8325 snprintf(env_role, sizeof(env_role), "ROLE=%s",
8326 (entry->role == QETH_SBP_ROLE_NONE) ? "none" :
8327 diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
8328 index 0760d0bd8a10b..0fa455357594e 100644
8329 --- a/drivers/scsi/be2iscsi/be_main.c
8330 +++ b/drivers/scsi/be2iscsi/be_main.c
8331 @@ -3020,6 +3020,7 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba,
8332 goto create_eq_error;
8333 }
8334
8335 + mem->dma = paddr;
8336 mem->va = eq_vaddress;
8337 ret = be_fill_queue(eq, phba->params.num_eq_entries,
8338 sizeof(struct be_eq_entry), eq_vaddress);
8339 @@ -3029,7 +3030,6 @@ static int beiscsi_create_eqs(struct beiscsi_hba *phba,
8340 goto create_eq_error;
8341 }
8342
8343 - mem->dma = paddr;
8344 ret = beiscsi_cmd_eq_create(&phba->ctrl, eq,
8345 BEISCSI_EQ_DELAY_DEF);
8346 if (ret) {
8347 @@ -3086,6 +3086,7 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba,
8348 goto create_cq_error;
8349 }
8350
8351 + mem->dma = paddr;
8352 ret = be_fill_queue(cq, phba->params.num_cq_entries,
8353 sizeof(struct sol_cqe), cq_vaddress);
8354 if (ret) {
8355 @@ -3095,7 +3096,6 @@ static int beiscsi_create_cqs(struct beiscsi_hba *phba,
8356 goto create_cq_error;
8357 }
8358
8359 - mem->dma = paddr;
8360 ret = beiscsi_cmd_cq_create(&phba->ctrl, cq, eq, false,
8361 false, 0);
8362 if (ret) {
8363 diff --git a/drivers/scsi/bfa/bfad.c b/drivers/scsi/bfa/bfad.c
8364 index 2f9213b257a4a..93e4011809919 100644
8365 --- a/drivers/scsi/bfa/bfad.c
8366 +++ b/drivers/scsi/bfa/bfad.c
8367 @@ -749,6 +749,7 @@ bfad_pci_init(struct pci_dev *pdev, struct bfad_s *bfad)
8368
8369 if (bfad->pci_bar0_kva == NULL) {
8370 printk(KERN_ERR "Fail to map bar0\n");
8371 + rc = -ENODEV;
8372 goto out_release_region;
8373 }
8374
8375 diff --git a/drivers/scsi/csiostor/csio_hw.c b/drivers/scsi/csiostor/csio_hw.c
8376 index e519238864758..1b6f9351b43f9 100644
8377 --- a/drivers/scsi/csiostor/csio_hw.c
8378 +++ b/drivers/scsi/csiostor/csio_hw.c
8379 @@ -2384,7 +2384,7 @@ static int csio_hw_prep_fw(struct csio_hw *hw, struct fw_info *fw_info,
8380 FW_HDR_FW_VER_MICRO_G(c), FW_HDR_FW_VER_BUILD_G(c),
8381 FW_HDR_FW_VER_MAJOR_G(k), FW_HDR_FW_VER_MINOR_G(k),
8382 FW_HDR_FW_VER_MICRO_G(k), FW_HDR_FW_VER_BUILD_G(k));
8383 - ret = EINVAL;
8384 + ret = -EINVAL;
8385 goto bye;
8386 }
8387
8388 diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
8389 index df897df5cafee..8a76284b59b08 100644
8390 --- a/drivers/scsi/ibmvscsi/ibmvfc.c
8391 +++ b/drivers/scsi/ibmvscsi/ibmvfc.c
8392 @@ -4788,6 +4788,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const struct vio_device_id *id)
8393 if (IS_ERR(vhost->work_thread)) {
8394 dev_err(dev, "Couldn't create kernel thread: %ld\n",
8395 PTR_ERR(vhost->work_thread));
8396 + rc = PTR_ERR(vhost->work_thread);
8397 goto free_host_mem;
8398 }
8399
8400 diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
8401 index b7e44634d0dc2..3d58d24de6b61 100644
8402 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c
8403 +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
8404 @@ -1708,18 +1708,22 @@ mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc)
8405 /* TMs are on msix_index == 0 */
8406 if (reply_q->msix_index == 0)
8407 continue;
8408 + synchronize_irq(pci_irq_vector(ioc->pdev, reply_q->msix_index));
8409 if (reply_q->irq_poll_scheduled) {
8410 /* Calling irq_poll_disable will wait for any pending
8411 * callbacks to have completed.
8412 */
8413 irq_poll_disable(&reply_q->irqpoll);
8414 irq_poll_enable(&reply_q->irqpoll);
8415 - reply_q->irq_poll_scheduled = false;
8416 - reply_q->irq_line_enable = true;
8417 - enable_irq(reply_q->os_irq);
8418 - continue;
8419 + /* check how the scheduled poll has ended,
8420 + * clean up only if necessary
8421 + */
8422 + if (reply_q->irq_poll_scheduled) {
8423 + reply_q->irq_poll_scheduled = false;
8424 + reply_q->irq_line_enable = true;
8425 + enable_irq(reply_q->os_irq);
8426 + }
8427 }
8428 - synchronize_irq(pci_irq_vector(ioc->pdev, reply_q->msix_index));
8429 }
8430 }
8431
8432 diff --git a/drivers/scsi/mvumi.c b/drivers/scsi/mvumi.c
8433 index 8906aceda4c43..0354898d7cac1 100644
8434 --- a/drivers/scsi/mvumi.c
8435 +++ b/drivers/scsi/mvumi.c
8436 @@ -2425,6 +2425,7 @@ static int mvumi_io_attach(struct mvumi_hba *mhba)
8437 if (IS_ERR(mhba->dm_thread)) {
8438 dev_err(&mhba->pdev->dev,
8439 "failed to create device scan thread\n");
8440 + ret = PTR_ERR(mhba->dm_thread);
8441 mutex_unlock(&mhba->sas_discovery_mutex);
8442 goto fail_create_thread;
8443 }
8444 diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c
8445 index 3d0e345947c1f..9c0955c334e3e 100644
8446 --- a/drivers/scsi/qedf/qedf_main.c
8447 +++ b/drivers/scsi/qedf/qedf_main.c
8448 @@ -668,7 +668,7 @@ static int qedf_eh_abort(struct scsi_cmnd *sc_cmd)
8449 rdata = fcport->rdata;
8450 if (!rdata || !kref_get_unless_zero(&rdata->kref)) {
8451 QEDF_ERR(&qedf->dbg_ctx, "stale rport, sc_cmd=%p\n", sc_cmd);
8452 - rc = 1;
8453 + rc = SUCCESS;
8454 goto out;
8455 }
8456
8457 diff --git a/drivers/scsi/qedi/qedi_fw.c b/drivers/scsi/qedi/qedi_fw.c
8458 index 946cebc4c9322..90aa64604ad78 100644
8459 --- a/drivers/scsi/qedi/qedi_fw.c
8460 +++ b/drivers/scsi/qedi/qedi_fw.c
8461 @@ -59,6 +59,7 @@ static void qedi_process_logout_resp(struct qedi_ctx *qedi,
8462 "Freeing tid=0x%x for cid=0x%x\n",
8463 cmd->task_id, qedi_conn->iscsi_conn_id);
8464
8465 + spin_lock(&qedi_conn->list_lock);
8466 if (likely(cmd->io_cmd_in_list)) {
8467 cmd->io_cmd_in_list = false;
8468 list_del_init(&cmd->io_cmd);
8469 @@ -69,6 +70,7 @@ static void qedi_process_logout_resp(struct qedi_ctx *qedi,
8470 cmd->task_id, qedi_conn->iscsi_conn_id,
8471 &cmd->io_cmd);
8472 }
8473 + spin_unlock(&qedi_conn->list_lock);
8474
8475 cmd->state = RESPONSE_RECEIVED;
8476 qedi_clear_task_idx(qedi, cmd->task_id);
8477 @@ -122,6 +124,7 @@ static void qedi_process_text_resp(struct qedi_ctx *qedi,
8478 "Freeing tid=0x%x for cid=0x%x\n",
8479 cmd->task_id, qedi_conn->iscsi_conn_id);
8480
8481 + spin_lock(&qedi_conn->list_lock);
8482 if (likely(cmd->io_cmd_in_list)) {
8483 cmd->io_cmd_in_list = false;
8484 list_del_init(&cmd->io_cmd);
8485 @@ -132,6 +135,7 @@ static void qedi_process_text_resp(struct qedi_ctx *qedi,
8486 cmd->task_id, qedi_conn->iscsi_conn_id,
8487 &cmd->io_cmd);
8488 }
8489 + spin_unlock(&qedi_conn->list_lock);
8490
8491 cmd->state = RESPONSE_RECEIVED;
8492 qedi_clear_task_idx(qedi, cmd->task_id);
8493 @@ -222,11 +226,13 @@ static void qedi_process_tmf_resp(struct qedi_ctx *qedi,
8494
8495 tmf_hdr = (struct iscsi_tm *)qedi_cmd->task->hdr;
8496
8497 + spin_lock(&qedi_conn->list_lock);
8498 if (likely(qedi_cmd->io_cmd_in_list)) {
8499 qedi_cmd->io_cmd_in_list = false;
8500 list_del_init(&qedi_cmd->io_cmd);
8501 qedi_conn->active_cmd_count--;
8502 }
8503 + spin_unlock(&qedi_conn->list_lock);
8504
8505 if (((tmf_hdr->flags & ISCSI_FLAG_TM_FUNC_MASK) ==
8506 ISCSI_TM_FUNC_LOGICAL_UNIT_RESET) ||
8507 @@ -288,11 +294,13 @@ static void qedi_process_login_resp(struct qedi_ctx *qedi,
8508 ISCSI_LOGIN_RESPONSE_HDR_DATA_SEG_LEN_MASK;
8509 qedi_conn->gen_pdu.resp_wr_ptr = qedi_conn->gen_pdu.resp_buf + pld_len;
8510
8511 + spin_lock(&qedi_conn->list_lock);
8512 if (likely(cmd->io_cmd_in_list)) {
8513 cmd->io_cmd_in_list = false;
8514 list_del_init(&cmd->io_cmd);
8515 qedi_conn->active_cmd_count--;
8516 }
8517 + spin_unlock(&qedi_conn->list_lock);
8518
8519 memset(task_ctx, '\0', sizeof(*task_ctx));
8520
8521 @@ -817,8 +825,11 @@ static void qedi_process_cmd_cleanup_resp(struct qedi_ctx *qedi,
8522 qedi_clear_task_idx(qedi_conn->qedi, rtid);
8523
8524 spin_lock(&qedi_conn->list_lock);
8525 - list_del_init(&dbg_cmd->io_cmd);
8526 - qedi_conn->active_cmd_count--;
8527 + if (likely(dbg_cmd->io_cmd_in_list)) {
8528 + dbg_cmd->io_cmd_in_list = false;
8529 + list_del_init(&dbg_cmd->io_cmd);
8530 + qedi_conn->active_cmd_count--;
8531 + }
8532 spin_unlock(&qedi_conn->list_lock);
8533 qedi_cmd->state = CLEANUP_RECV;
8534 wake_up_interruptible(&qedi_conn->wait_queue);
8535 @@ -1236,6 +1247,7 @@ int qedi_cleanup_all_io(struct qedi_ctx *qedi, struct qedi_conn *qedi_conn,
8536 qedi_conn->cmd_cleanup_req++;
8537 qedi_iscsi_cleanup_task(ctask, true);
8538
8539 + cmd->io_cmd_in_list = false;
8540 list_del_init(&cmd->io_cmd);
8541 qedi_conn->active_cmd_count--;
8542 QEDI_WARN(&qedi->dbg_ctx,
8543 @@ -1447,8 +1459,11 @@ ldel_exit:
8544 spin_unlock_bh(&qedi_conn->tmf_work_lock);
8545
8546 spin_lock(&qedi_conn->list_lock);
8547 - list_del_init(&cmd->io_cmd);
8548 - qedi_conn->active_cmd_count--;
8549 + if (likely(cmd->io_cmd_in_list)) {
8550 + cmd->io_cmd_in_list = false;
8551 + list_del_init(&cmd->io_cmd);
8552 + qedi_conn->active_cmd_count--;
8553 + }
8554 spin_unlock(&qedi_conn->list_lock);
8555
8556 clear_bit(QEDI_CONN_FW_CLEANUP, &qedi_conn->flags);
8557 diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c
8558 index 0f2622a48311c..755f66b1ff9c7 100644
8559 --- a/drivers/scsi/qedi/qedi_iscsi.c
8560 +++ b/drivers/scsi/qedi/qedi_iscsi.c
8561 @@ -972,11 +972,13 @@ static void qedi_cleanup_active_cmd_list(struct qedi_conn *qedi_conn)
8562 {
8563 struct qedi_cmd *cmd, *cmd_tmp;
8564
8565 + spin_lock(&qedi_conn->list_lock);
8566 list_for_each_entry_safe(cmd, cmd_tmp, &qedi_conn->active_cmd_list,
8567 io_cmd) {
8568 list_del_init(&cmd->io_cmd);
8569 qedi_conn->active_cmd_count--;
8570 }
8571 + spin_unlock(&qedi_conn->list_lock);
8572 }
8573
8574 static void qedi_ep_disconnect(struct iscsi_endpoint *ep)
8575 diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
8576 index 62d2ee825c97a..b300e11095828 100644
8577 --- a/drivers/scsi/qla2xxx/qla_init.c
8578 +++ b/drivers/scsi/qla2xxx/qla_init.c
8579 @@ -71,6 +71,16 @@ void qla2x00_sp_free(srb_t *sp)
8580 qla2x00_rel_sp(sp);
8581 }
8582
8583 +void qla2xxx_rel_done_warning(srb_t *sp, int res)
8584 +{
8585 + WARN_ONCE(1, "Calling done() of an already freed srb %p object\n", sp);
8586 +}
8587 +
8588 +void qla2xxx_rel_free_warning(srb_t *sp)
8589 +{
8590 + WARN_ONCE(1, "Calling free() of an already freed srb %p object\n", sp);
8591 +}
8592 +
8593 /* Asynchronous Login/Logout Routines -------------------------------------- */
8594
8595 unsigned long
8596 diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h
8597 index 0c3d907af7692..6dfde42d799b5 100644
8598 --- a/drivers/scsi/qla2xxx/qla_inline.h
8599 +++ b/drivers/scsi/qla2xxx/qla_inline.h
8600 @@ -183,10 +183,15 @@ qla2xxx_get_qpair_sp(scsi_qla_host_t *vha, struct qla_qpair *qpair,
8601 return sp;
8602 }
8603
8604 +void qla2xxx_rel_done_warning(srb_t *sp, int res);
8605 +void qla2xxx_rel_free_warning(srb_t *sp);
8606 +
8607 static inline void
8608 qla2xxx_rel_qpair_sp(struct qla_qpair *qpair, srb_t *sp)
8609 {
8610 sp->qpair = NULL;
8611 + sp->done = qla2xxx_rel_done_warning;
8612 + sp->free = qla2xxx_rel_free_warning;
8613 mempool_free(sp, qpair->srb_mempool);
8614 QLA_QPAIR_MARK_NOT_BUSY(qpair);
8615 }
8616 diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c
8617 index f4815a4084d8c..11656e864fca9 100644
8618 --- a/drivers/scsi/qla2xxx/qla_nvme.c
8619 +++ b/drivers/scsi/qla2xxx/qla_nvme.c
8620 @@ -682,7 +682,7 @@ int qla_nvme_register_hba(struct scsi_qla_host *vha)
8621 struct nvme_fc_port_template *tmpl;
8622 struct qla_hw_data *ha;
8623 struct nvme_fc_port_info pinfo;
8624 - int ret = EINVAL;
8625 + int ret = -EINVAL;
8626
8627 if (!IS_ENABLED(CONFIG_NVME_FC))
8628 return ret;
8629 diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
8630 index a7acc266cec06..d84d95cac2a13 100644
8631 --- a/drivers/scsi/qla2xxx/qla_target.c
8632 +++ b/drivers/scsi/qla2xxx/qla_target.c
8633 @@ -5677,7 +5677,7 @@ static int qlt_chk_unresolv_exchg(struct scsi_qla_host *vha,
8634 /* found existing exchange */
8635 qpair->retry_term_cnt++;
8636 if (qpair->retry_term_cnt >= 5) {
8637 - rc = EIO;
8638 + rc = -EIO;
8639 qpair->retry_term_cnt = 0;
8640 ql_log(ql_log_warn, vha, 0xffff,
8641 "Unable to send ABTS Respond. Dumping firmware.\n");
8642 diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
8643 index 5504ab11decc7..df43cf6405a8e 100644
8644 --- a/drivers/scsi/qla4xxx/ql4_os.c
8645 +++ b/drivers/scsi/qla4xxx/ql4_os.c
8646 @@ -1220,7 +1220,7 @@ static int qla4xxx_get_host_stats(struct Scsi_Host *shost, char *buf, int len)
8647 le64_to_cpu(ql_iscsi_stats->iscsi_sequence_error);
8648 exit_host_stats:
8649 if (ql_iscsi_stats)
8650 - dma_free_coherent(&ha->pdev->dev, host_stats_size,
8651 + dma_free_coherent(&ha->pdev->dev, stats_size,
8652 ql_iscsi_stats, iscsi_stats_dma);
8653
8654 ql4_printk(KERN_INFO, ha, "%s: Get host stats done\n",
8655 diff --git a/drivers/scsi/smartpqi/smartpqi.h b/drivers/scsi/smartpqi/smartpqi.h
8656 index 7a3a942b40df0..dd2175e9bfa17 100644
8657 --- a/drivers/scsi/smartpqi/smartpqi.h
8658 +++ b/drivers/scsi/smartpqi/smartpqi.h
8659 @@ -357,7 +357,7 @@ struct pqi_event_response {
8660 struct pqi_iu_header header;
8661 u8 event_type;
8662 u8 reserved2 : 7;
8663 - u8 request_acknowlege : 1;
8664 + u8 request_acknowledge : 1;
8665 __le16 event_id;
8666 __le32 additional_event_id;
8667 union {
8668 diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c
8669 index 5ae074505386a..093ed5d1eef20 100644
8670 --- a/drivers/scsi/smartpqi/smartpqi_init.c
8671 +++ b/drivers/scsi/smartpqi/smartpqi_init.c
8672 @@ -527,8 +527,7 @@ static int pqi_build_raid_path_request(struct pqi_ctrl_info *ctrl_info,
8673 put_unaligned_be16(cdb_length, &cdb[7]);
8674 break;
8675 default:
8676 - dev_err(&ctrl_info->pci_dev->dev, "unknown command 0x%c\n",
8677 - cmd);
8678 + dev_err(&ctrl_info->pci_dev->dev, "unknown command 0x%c\n", cmd);
8679 break;
8680 }
8681
8682 @@ -2450,7 +2449,6 @@ static int pqi_raid_bypass_submit_scsi_cmd(struct pqi_ctrl_info *ctrl_info,
8683 offload_to_mirror =
8684 (offload_to_mirror >= layout_map_count - 1) ?
8685 0 : offload_to_mirror + 1;
8686 - WARN_ON(offload_to_mirror >= layout_map_count);
8687 device->offload_to_mirror = offload_to_mirror;
8688 /*
8689 * Avoid direct use of device->offload_to_mirror within this
8690 @@ -2903,10 +2901,14 @@ static int pqi_interpret_task_management_response(
8691 return rc;
8692 }
8693
8694 -static unsigned int pqi_process_io_intr(struct pqi_ctrl_info *ctrl_info,
8695 - struct pqi_queue_group *queue_group)
8696 +static inline void pqi_invalid_response(struct pqi_ctrl_info *ctrl_info)
8697 +{
8698 + pqi_take_ctrl_offline(ctrl_info);
8699 +}
8700 +
8701 +static int pqi_process_io_intr(struct pqi_ctrl_info *ctrl_info, struct pqi_queue_group *queue_group)
8702 {
8703 - unsigned int num_responses;
8704 + int num_responses;
8705 pqi_index_t oq_pi;
8706 pqi_index_t oq_ci;
8707 struct pqi_io_request *io_request;
8708 @@ -2918,6 +2920,13 @@ static unsigned int pqi_process_io_intr(struct pqi_ctrl_info *ctrl_info,
8709
8710 while (1) {
8711 oq_pi = readl(queue_group->oq_pi);
8712 + if (oq_pi >= ctrl_info->num_elements_per_oq) {
8713 + pqi_invalid_response(ctrl_info);
8714 + dev_err(&ctrl_info->pci_dev->dev,
8715 + "I/O interrupt: producer index (%u) out of range (0-%u): consumer index: %u\n",
8716 + oq_pi, ctrl_info->num_elements_per_oq - 1, oq_ci);
8717 + return -1;
8718 + }
8719 if (oq_pi == oq_ci)
8720 break;
8721
8722 @@ -2926,10 +2935,22 @@ static unsigned int pqi_process_io_intr(struct pqi_ctrl_info *ctrl_info,
8723 (oq_ci * PQI_OPERATIONAL_OQ_ELEMENT_LENGTH);
8724
8725 request_id = get_unaligned_le16(&response->request_id);
8726 - WARN_ON(request_id >= ctrl_info->max_io_slots);
8727 + if (request_id >= ctrl_info->max_io_slots) {
8728 + pqi_invalid_response(ctrl_info);
8729 + dev_err(&ctrl_info->pci_dev->dev,
8730 + "request ID in response (%u) out of range (0-%u): producer index: %u consumer index: %u\n",
8731 + request_id, ctrl_info->max_io_slots - 1, oq_pi, oq_ci);
8732 + return -1;
8733 + }
8734
8735 io_request = &ctrl_info->io_request_pool[request_id];
8736 - WARN_ON(atomic_read(&io_request->refcount) == 0);
8737 + if (atomic_read(&io_request->refcount) == 0) {
8738 + pqi_invalid_response(ctrl_info);
8739 + dev_err(&ctrl_info->pci_dev->dev,
8740 + "request ID in response (%u) does not match an outstanding I/O request: producer index: %u consumer index: %u\n",
8741 + request_id, oq_pi, oq_ci);
8742 + return -1;
8743 + }
8744
8745 switch (response->header.iu_type) {
8746 case PQI_RESPONSE_IU_RAID_PATH_IO_SUCCESS:
8747 @@ -2959,24 +2980,22 @@ static unsigned int pqi_process_io_intr(struct pqi_ctrl_info *ctrl_info,
8748 io_request->error_info = ctrl_info->error_buffer +
8749 (get_unaligned_le16(&response->error_index) *
8750 PQI_ERROR_BUFFER_ELEMENT_LENGTH);
8751 - pqi_process_io_error(response->header.iu_type,
8752 - io_request);
8753 + pqi_process_io_error(response->header.iu_type, io_request);
8754 break;
8755 default:
8756 + pqi_invalid_response(ctrl_info);
8757 dev_err(&ctrl_info->pci_dev->dev,
8758 - "unexpected IU type: 0x%x\n",
8759 - response->header.iu_type);
8760 - break;
8761 + "unexpected IU type: 0x%x: producer index: %u consumer index: %u\n",
8762 + response->header.iu_type, oq_pi, oq_ci);
8763 + return -1;
8764 }
8765
8766 - io_request->io_complete_callback(io_request,
8767 - io_request->context);
8768 + io_request->io_complete_callback(io_request, io_request->context);
8769
8770 /*
8771 * Note that the I/O request structure CANNOT BE TOUCHED after
8772 * returning from the I/O completion callback!
8773 */
8774 -
8775 oq_ci = (oq_ci + 1) % ctrl_info->num_elements_per_oq;
8776 }
8777
8778 @@ -3289,9 +3308,9 @@ static void pqi_ofa_capture_event_payload(struct pqi_event *event,
8779 }
8780 }
8781
8782 -static unsigned int pqi_process_event_intr(struct pqi_ctrl_info *ctrl_info)
8783 +static int pqi_process_event_intr(struct pqi_ctrl_info *ctrl_info)
8784 {
8785 - unsigned int num_events;
8786 + int num_events;
8787 pqi_index_t oq_pi;
8788 pqi_index_t oq_ci;
8789 struct pqi_event_queue *event_queue;
8790 @@ -3305,26 +3324,31 @@ static unsigned int pqi_process_event_intr(struct pqi_ctrl_info *ctrl_info)
8791
8792 while (1) {
8793 oq_pi = readl(event_queue->oq_pi);
8794 + if (oq_pi >= PQI_NUM_EVENT_QUEUE_ELEMENTS) {
8795 + pqi_invalid_response(ctrl_info);
8796 + dev_err(&ctrl_info->pci_dev->dev,
8797 + "event interrupt: producer index (%u) out of range (0-%u): consumer index: %u\n",
8798 + oq_pi, PQI_NUM_EVENT_QUEUE_ELEMENTS - 1, oq_ci);
8799 + return -1;
8800 + }
8801 +
8802 if (oq_pi == oq_ci)
8803 break;
8804
8805 num_events++;
8806 - response = event_queue->oq_element_array +
8807 - (oq_ci * PQI_EVENT_OQ_ELEMENT_LENGTH);
8808 + response = event_queue->oq_element_array + (oq_ci * PQI_EVENT_OQ_ELEMENT_LENGTH);
8809
8810 event_index =
8811 pqi_event_type_to_event_index(response->event_type);
8812
8813 - if (event_index >= 0) {
8814 - if (response->request_acknowlege) {
8815 - event = &ctrl_info->events[event_index];
8816 - event->pending = true;
8817 - event->event_type = response->event_type;
8818 - event->event_id = response->event_id;
8819 - event->additional_event_id =
8820 - response->additional_event_id;
8821 + if (event_index >= 0 && response->request_acknowledge) {
8822 + event = &ctrl_info->events[event_index];
8823 + event->pending = true;
8824 + event->event_type = response->event_type;
8825 + event->event_id = response->event_id;
8826 + event->additional_event_id = response->additional_event_id;
8827 + if (event->event_type == PQI_EVENT_TYPE_OFA)
8828 pqi_ofa_capture_event_payload(event, response);
8829 - }
8830 }
8831
8832 oq_ci = (oq_ci + 1) % PQI_NUM_EVENT_QUEUE_ELEMENTS;
8833 @@ -3439,7 +3463,8 @@ static irqreturn_t pqi_irq_handler(int irq, void *data)
8834 {
8835 struct pqi_ctrl_info *ctrl_info;
8836 struct pqi_queue_group *queue_group;
8837 - unsigned int num_responses_handled;
8838 + int num_io_responses_handled;
8839 + int num_events_handled;
8840
8841 queue_group = data;
8842 ctrl_info = queue_group->ctrl_info;
8843 @@ -3447,17 +3472,25 @@ static irqreturn_t pqi_irq_handler(int irq, void *data)
8844 if (!pqi_is_valid_irq(ctrl_info))
8845 return IRQ_NONE;
8846
8847 - num_responses_handled = pqi_process_io_intr(ctrl_info, queue_group);
8848 + num_io_responses_handled = pqi_process_io_intr(ctrl_info, queue_group);
8849 + if (num_io_responses_handled < 0)
8850 + goto out;
8851
8852 - if (irq == ctrl_info->event_irq)
8853 - num_responses_handled += pqi_process_event_intr(ctrl_info);
8854 + if (irq == ctrl_info->event_irq) {
8855 + num_events_handled = pqi_process_event_intr(ctrl_info);
8856 + if (num_events_handled < 0)
8857 + goto out;
8858 + } else {
8859 + num_events_handled = 0;
8860 + }
8861
8862 - if (num_responses_handled)
8863 + if (num_io_responses_handled + num_events_handled > 0)
8864 atomic_inc(&ctrl_info->num_interrupts);
8865
8866 pqi_start_io(ctrl_info, queue_group, RAID_PATH, NULL);
8867 pqi_start_io(ctrl_info, queue_group, AIO_PATH, NULL);
8868
8869 +out:
8870 return IRQ_HANDLED;
8871 }
8872
8873 diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
8874 index c49e9f6c46f87..4f066e3b19af1 100644
8875 --- a/drivers/scsi/ufs/ufs-qcom.c
8876 +++ b/drivers/scsi/ufs/ufs-qcom.c
8877 @@ -1492,9 +1492,6 @@ int ufs_qcom_testbus_config(struct ufs_qcom_host *host)
8878 */
8879 }
8880 mask <<= offset;
8881 -
8882 - pm_runtime_get_sync(host->hba->dev);
8883 - ufshcd_hold(host->hba, false);
8884 ufshcd_rmwl(host->hba, TEST_BUS_SEL,
8885 (u32)host->testbus.select_major << 19,
8886 REG_UFS_CFG1);
8887 @@ -1507,8 +1504,6 @@ int ufs_qcom_testbus_config(struct ufs_qcom_host *host)
8888 * committed before returning.
8889 */
8890 mb();
8891 - ufshcd_release(host->hba);
8892 - pm_runtime_put_sync(host->hba->dev);
8893
8894 return 0;
8895 }
8896 diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
8897 index 63ee96eb58c68..130c798921b5d 100644
8898 --- a/drivers/slimbus/core.c
8899 +++ b/drivers/slimbus/core.c
8900 @@ -302,8 +302,6 @@ int slim_unregister_controller(struct slim_controller *ctrl)
8901 {
8902 /* Remove all clients */
8903 device_for_each_child(ctrl->dev, NULL, slim_ctrl_remove_device);
8904 - /* Enter Clock Pause */
8905 - slim_ctrl_clk_pause(ctrl, false, 0);
8906 ida_simple_remove(&ctrl_ida, ctrl->id);
8907
8908 return 0;
8909 @@ -327,8 +325,8 @@ void slim_report_absent(struct slim_device *sbdev)
8910 mutex_lock(&ctrl->lock);
8911 sbdev->is_laddr_valid = false;
8912 mutex_unlock(&ctrl->lock);
8913 -
8914 - ida_simple_remove(&ctrl->laddr_ida, sbdev->laddr);
8915 + if (!ctrl->get_laddr)
8916 + ida_simple_remove(&ctrl->laddr_ida, sbdev->laddr);
8917 slim_device_update_status(sbdev, SLIM_DEVICE_STATUS_DOWN);
8918 }
8919 EXPORT_SYMBOL_GPL(slim_report_absent);
8920 diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctrl.c
8921 index 01a17d84b6064..ce265bf7de868 100644
8922 --- a/drivers/slimbus/qcom-ngd-ctrl.c
8923 +++ b/drivers/slimbus/qcom-ngd-ctrl.c
8924 @@ -1273,9 +1273,13 @@ static void qcom_slim_ngd_qmi_del_server(struct qmi_handle *hdl,
8925 {
8926 struct qcom_slim_ngd_qmi *qmi =
8927 container_of(hdl, struct qcom_slim_ngd_qmi, svc_event_hdl);
8928 + struct qcom_slim_ngd_ctrl *ctrl =
8929 + container_of(qmi, struct qcom_slim_ngd_ctrl, qmi);
8930
8931 qmi->svc_info.sq_node = 0;
8932 qmi->svc_info.sq_port = 0;
8933 +
8934 + qcom_slim_ngd_enable(ctrl, false);
8935 }
8936
8937 static struct qmi_ops qcom_slim_ngd_qmi_svc_event_ops = {
8938 diff --git a/drivers/soc/fsl/qbman/bman.c b/drivers/soc/fsl/qbman/bman.c
8939 index f4fb527d83018..c5dd026fe889f 100644
8940 --- a/drivers/soc/fsl/qbman/bman.c
8941 +++ b/drivers/soc/fsl/qbman/bman.c
8942 @@ -660,7 +660,7 @@ int bm_shutdown_pool(u32 bpid)
8943 }
8944 done:
8945 put_affine_portal();
8946 - return 0;
8947 + return err;
8948 }
8949
8950 struct gen_pool *bm_bpalloc;
8951 diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
8952 index 4433cb4de564e..7646b4b56bed9 100644
8953 --- a/drivers/spi/spi-omap2-mcspi.c
8954 +++ b/drivers/spi/spi-omap2-mcspi.c
8955 @@ -24,7 +24,6 @@
8956 #include <linux/of.h>
8957 #include <linux/of_device.h>
8958 #include <linux/gcd.h>
8959 -#include <linux/iopoll.h>
8960
8961 #include <linux/spi/spi.h>
8962 #include <linux/gpio.h>
8963 @@ -348,9 +347,19 @@ disable_fifo:
8964
8965 static int mcspi_wait_for_reg_bit(void __iomem *reg, unsigned long bit)
8966 {
8967 - u32 val;
8968 -
8969 - return readl_poll_timeout(reg, val, val & bit, 1, MSEC_PER_SEC);
8970 + unsigned long timeout;
8971 +
8972 + timeout = jiffies + msecs_to_jiffies(1000);
8973 + while (!(readl_relaxed(reg) & bit)) {
8974 + if (time_after(jiffies, timeout)) {
8975 + if (!(readl_relaxed(reg) & bit))
8976 + return -ETIMEDOUT;
8977 + else
8978 + return 0;
8979 + }
8980 + cpu_relax();
8981 + }
8982 + return 0;
8983 }
8984
8985 static int mcspi_wait_for_completion(struct omap2_mcspi *mcspi,
8986 diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c
8987 index 7b7151ec14c8a..1d948fee1a039 100644
8988 --- a/drivers/spi/spi-s3c64xx.c
8989 +++ b/drivers/spi/spi-s3c64xx.c
8990 @@ -122,6 +122,7 @@
8991
8992 struct s3c64xx_spi_dma_data {
8993 struct dma_chan *ch;
8994 + dma_cookie_t cookie;
8995 enum dma_transfer_direction direction;
8996 };
8997
8998 @@ -264,12 +265,13 @@ static void s3c64xx_spi_dmacb(void *data)
8999 spin_unlock_irqrestore(&sdd->lock, flags);
9000 }
9001
9002 -static void prepare_dma(struct s3c64xx_spi_dma_data *dma,
9003 +static int prepare_dma(struct s3c64xx_spi_dma_data *dma,
9004 struct sg_table *sgt)
9005 {
9006 struct s3c64xx_spi_driver_data *sdd;
9007 struct dma_slave_config config;
9008 struct dma_async_tx_descriptor *desc;
9009 + int ret;
9010
9011 memset(&config, 0, sizeof(config));
9012
9013 @@ -293,12 +295,24 @@ static void prepare_dma(struct s3c64xx_spi_dma_data *dma,
9014
9015 desc = dmaengine_prep_slave_sg(dma->ch, sgt->sgl, sgt->nents,
9016 dma->direction, DMA_PREP_INTERRUPT);
9017 + if (!desc) {
9018 + dev_err(&sdd->pdev->dev, "unable to prepare %s scatterlist",
9019 + dma->direction == DMA_DEV_TO_MEM ? "rx" : "tx");
9020 + return -ENOMEM;
9021 + }
9022
9023 desc->callback = s3c64xx_spi_dmacb;
9024 desc->callback_param = dma;
9025
9026 - dmaengine_submit(desc);
9027 + dma->cookie = dmaengine_submit(desc);
9028 + ret = dma_submit_error(dma->cookie);
9029 + if (ret) {
9030 + dev_err(&sdd->pdev->dev, "DMA submission failed");
9031 + return -EIO;
9032 + }
9033 +
9034 dma_async_issue_pending(dma->ch);
9035 + return 0;
9036 }
9037
9038 static void s3c64xx_spi_set_cs(struct spi_device *spi, bool enable)
9039 @@ -348,11 +362,12 @@ static bool s3c64xx_spi_can_dma(struct spi_master *master,
9040 return xfer->len > (FIFO_LVL_MASK(sdd) >> 1) + 1;
9041 }
9042
9043 -static void s3c64xx_enable_datapath(struct s3c64xx_spi_driver_data *sdd,
9044 +static int s3c64xx_enable_datapath(struct s3c64xx_spi_driver_data *sdd,
9045 struct spi_transfer *xfer, int dma_mode)
9046 {
9047 void __iomem *regs = sdd->regs;
9048 u32 modecfg, chcfg;
9049 + int ret = 0;
9050
9051 modecfg = readl(regs + S3C64XX_SPI_MODE_CFG);
9052 modecfg &= ~(S3C64XX_SPI_MODE_TXDMA_ON | S3C64XX_SPI_MODE_RXDMA_ON);
9053 @@ -378,7 +393,7 @@ static void s3c64xx_enable_datapath(struct s3c64xx_spi_driver_data *sdd,
9054 chcfg |= S3C64XX_SPI_CH_TXCH_ON;
9055 if (dma_mode) {
9056 modecfg |= S3C64XX_SPI_MODE_TXDMA_ON;
9057 - prepare_dma(&sdd->tx_dma, &xfer->tx_sg);
9058 + ret = prepare_dma(&sdd->tx_dma, &xfer->tx_sg);
9059 } else {
9060 switch (sdd->cur_bpw) {
9061 case 32:
9062 @@ -410,12 +425,17 @@ static void s3c64xx_enable_datapath(struct s3c64xx_spi_driver_data *sdd,
9063 writel(((xfer->len * 8 / sdd->cur_bpw) & 0xffff)
9064 | S3C64XX_SPI_PACKET_CNT_EN,
9065 regs + S3C64XX_SPI_PACKET_CNT);
9066 - prepare_dma(&sdd->rx_dma, &xfer->rx_sg);
9067 + ret = prepare_dma(&sdd->rx_dma, &xfer->rx_sg);
9068 }
9069 }
9070
9071 + if (ret)
9072 + return ret;
9073 +
9074 writel(modecfg, regs + S3C64XX_SPI_MODE_CFG);
9075 writel(chcfg, regs + S3C64XX_SPI_CH_CFG);
9076 +
9077 + return 0;
9078 }
9079
9080 static u32 s3c64xx_spi_wait_for_timeout(struct s3c64xx_spi_driver_data *sdd,
9081 @@ -548,9 +568,10 @@ static int s3c64xx_wait_for_pio(struct s3c64xx_spi_driver_data *sdd,
9082 return 0;
9083 }
9084
9085 -static void s3c64xx_spi_config(struct s3c64xx_spi_driver_data *sdd)
9086 +static int s3c64xx_spi_config(struct s3c64xx_spi_driver_data *sdd)
9087 {
9088 void __iomem *regs = sdd->regs;
9089 + int ret;
9090 u32 val;
9091
9092 /* Disable Clock */
9093 @@ -598,7 +619,9 @@ static void s3c64xx_spi_config(struct s3c64xx_spi_driver_data *sdd)
9094
9095 if (sdd->port_conf->clk_from_cmu) {
9096 /* The src_clk clock is divided internally by 2 */
9097 - clk_set_rate(sdd->src_clk, sdd->cur_speed * 2);
9098 + ret = clk_set_rate(sdd->src_clk, sdd->cur_speed * 2);
9099 + if (ret)
9100 + return ret;
9101 } else {
9102 /* Configure Clock */
9103 val = readl(regs + S3C64XX_SPI_CLK_CFG);
9104 @@ -612,6 +635,8 @@ static void s3c64xx_spi_config(struct s3c64xx_spi_driver_data *sdd)
9105 val |= S3C64XX_SPI_ENCLK_ENABLE;
9106 writel(val, regs + S3C64XX_SPI_CLK_CFG);
9107 }
9108 +
9109 + return 0;
9110 }
9111
9112 #define XFER_DMAADDR_INVALID DMA_BIT_MASK(32)
9113 @@ -654,7 +679,9 @@ static int s3c64xx_spi_transfer_one(struct spi_master *master,
9114 sdd->cur_bpw = bpw;
9115 sdd->cur_speed = speed;
9116 sdd->cur_mode = spi->mode;
9117 - s3c64xx_spi_config(sdd);
9118 + status = s3c64xx_spi_config(sdd);
9119 + if (status)
9120 + return status;
9121 }
9122
9123 if (!is_polling(sdd) && (xfer->len > fifo_len) &&
9124 @@ -678,13 +705,18 @@ static int s3c64xx_spi_transfer_one(struct spi_master *master,
9125 sdd->state &= ~RXBUSY;
9126 sdd->state &= ~TXBUSY;
9127
9128 - s3c64xx_enable_datapath(sdd, xfer, use_dma);
9129 -
9130 /* Start the signals */
9131 s3c64xx_spi_set_cs(spi, true);
9132
9133 + status = s3c64xx_enable_datapath(sdd, xfer, use_dma);
9134 +
9135 spin_unlock_irqrestore(&sdd->lock, flags);
9136
9137 + if (status) {
9138 + dev_err(&spi->dev, "failed to enable data path for transfer: %d\n", status);
9139 + break;
9140 + }
9141 +
9142 if (use_dma)
9143 status = s3c64xx_wait_for_dma(sdd, xfer);
9144 else
9145 diff --git a/drivers/staging/emxx_udc/emxx_udc.c b/drivers/staging/emxx_udc/emxx_udc.c
9146 index 147481bf680c3..a6c893ddbf280 100644
9147 --- a/drivers/staging/emxx_udc/emxx_udc.c
9148 +++ b/drivers/staging/emxx_udc/emxx_udc.c
9149 @@ -2594,7 +2594,7 @@ static int nbu2ss_ep_queue(struct usb_ep *_ep,
9150
9151 if (req->unaligned) {
9152 if (!ep->virt_buf)
9153 - ep->virt_buf = dma_alloc_coherent(NULL, PAGE_SIZE,
9154 + ep->virt_buf = dma_alloc_coherent(udc->dev, PAGE_SIZE,
9155 &ep->phys_buf,
9156 GFP_ATOMIC | GFP_DMA);
9157 if (ep->epnum > 0) {
9158 @@ -3153,7 +3153,7 @@ static int nbu2ss_drv_remove(struct platform_device *pdev)
9159 for (i = 0; i < NUM_ENDPOINTS; i++) {
9160 ep = &udc->ep[i];
9161 if (ep->virt_buf)
9162 - dma_free_coherent(NULL, PAGE_SIZE, (void *)ep->virt_buf,
9163 + dma_free_coherent(udc->dev, PAGE_SIZE, (void *)ep->virt_buf,
9164 ep->phys_buf);
9165 }
9166
9167 diff --git a/drivers/staging/media/ipu3/ipu3-css-params.c b/drivers/staging/media/ipu3/ipu3-css-params.c
9168 index 4533dacad4beb..ef3b5d07137a1 100644
9169 --- a/drivers/staging/media/ipu3/ipu3-css-params.c
9170 +++ b/drivers/staging/media/ipu3/ipu3-css-params.c
9171 @@ -161,7 +161,7 @@ imgu_css_scaler_calc(u32 input_width, u32 input_height, u32 target_width,
9172
9173 memset(&cfg->scaler_coeffs_chroma, 0,
9174 sizeof(cfg->scaler_coeffs_chroma));
9175 - memset(&cfg->scaler_coeffs_luma, 0, sizeof(*cfg->scaler_coeffs_luma));
9176 + memset(&cfg->scaler_coeffs_luma, 0, sizeof(cfg->scaler_coeffs_luma));
9177 do {
9178 phase_step_correction++;
9179
9180 diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
9181 index 5c33bcb0db2ee..00e34c392a388 100644
9182 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
9183 +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c
9184 @@ -585,7 +585,7 @@ static void RxReorderIndicatePacket(struct ieee80211_device *ieee,
9185
9186 prxbIndicateArray = kmalloc_array(REORDER_WIN_SIZE,
9187 sizeof(struct ieee80211_rxb *),
9188 - GFP_KERNEL);
9189 + GFP_ATOMIC);
9190 if (!prxbIndicateArray)
9191 return;
9192
9193 diff --git a/drivers/staging/wilc1000/wilc_mon.c b/drivers/staging/wilc1000/wilc_mon.c
9194 index d6f14f69ad64e..017e8e91334f1 100644
9195 --- a/drivers/staging/wilc1000/wilc_mon.c
9196 +++ b/drivers/staging/wilc1000/wilc_mon.c
9197 @@ -236,11 +236,10 @@ struct net_device *wilc_wfi_init_mon_interface(struct wilc *wl,
9198
9199 if (register_netdevice(wl->monitor_dev)) {
9200 netdev_err(real_dev, "register_netdevice failed\n");
9201 + free_netdev(wl->monitor_dev);
9202 return NULL;
9203 }
9204 priv = netdev_priv(wl->monitor_dev);
9205 - if (!priv)
9206 - return NULL;
9207
9208 priv->real_ndev = real_dev;
9209
9210 diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c
9211 index ea925b102b322..d6634baebb474 100644
9212 --- a/drivers/target/target_core_user.c
9213 +++ b/drivers/target/target_core_user.c
9214 @@ -669,7 +669,7 @@ static void scatter_data_area(struct tcmu_dev *udev,
9215 void *from, *to = NULL;
9216 size_t copy_bytes, to_offset, offset;
9217 struct scatterlist *sg;
9218 - struct page *page;
9219 + struct page *page = NULL;
9220
9221 for_each_sg(data_sg, sg, data_nents, i) {
9222 int sg_remaining = sg->length;
9223 diff --git a/drivers/tty/hvc/hvcs.c b/drivers/tty/hvc/hvcs.c
9224 index ee0604cd9c6b2..0c498b20d8cb5 100644
9225 --- a/drivers/tty/hvc/hvcs.c
9226 +++ b/drivers/tty/hvc/hvcs.c
9227 @@ -1218,13 +1218,6 @@ static void hvcs_close(struct tty_struct *tty, struct file *filp)
9228
9229 tty_wait_until_sent(tty, HVCS_CLOSE_WAIT);
9230
9231 - /*
9232 - * This line is important because it tells hvcs_open that this
9233 - * device needs to be re-configured the next time hvcs_open is
9234 - * called.
9235 - */
9236 - tty->driver_data = NULL;
9237 -
9238 free_irq(irq, hvcsd);
9239 return;
9240 } else if (hvcsd->port.count < 0) {
9241 @@ -1239,6 +1232,13 @@ static void hvcs_cleanup(struct tty_struct * tty)
9242 {
9243 struct hvcs_struct *hvcsd = tty->driver_data;
9244
9245 + /*
9246 + * This line is important because it tells hvcs_open that this
9247 + * device needs to be re-configured the next time hvcs_open is
9248 + * called.
9249 + */
9250 + tty->driver_data = NULL;
9251 +
9252 tty_port_put(&hvcsd->port);
9253 }
9254
9255 diff --git a/drivers/tty/ipwireless/network.c b/drivers/tty/ipwireless/network.c
9256 index cf20616340a1a..fe569f6294a24 100644
9257 --- a/drivers/tty/ipwireless/network.c
9258 +++ b/drivers/tty/ipwireless/network.c
9259 @@ -117,7 +117,7 @@ static int ipwireless_ppp_start_xmit(struct ppp_channel *ppp_channel,
9260 skb->len,
9261 notify_packet_sent,
9262 network);
9263 - if (ret == -1) {
9264 + if (ret < 0) {
9265 skb_pull(skb, 2);
9266 return 0;
9267 }
9268 @@ -134,7 +134,7 @@ static int ipwireless_ppp_start_xmit(struct ppp_channel *ppp_channel,
9269 notify_packet_sent,
9270 network);
9271 kfree(buf);
9272 - if (ret == -1)
9273 + if (ret < 0)
9274 return 0;
9275 }
9276 kfree_skb(skb);
9277 diff --git a/drivers/tty/ipwireless/tty.c b/drivers/tty/ipwireless/tty.c
9278 index fad3401e604d9..23584769fc292 100644
9279 --- a/drivers/tty/ipwireless/tty.c
9280 +++ b/drivers/tty/ipwireless/tty.c
9281 @@ -218,7 +218,7 @@ static int ipw_write(struct tty_struct *linux_tty,
9282 ret = ipwireless_send_packet(tty->hardware, IPW_CHANNEL_RAS,
9283 buf, count,
9284 ipw_write_packet_sent_callback, tty);
9285 - if (ret == -1) {
9286 + if (ret < 0) {
9287 mutex_unlock(&tty->ipw_tty_mutex);
9288 return 0;
9289 }
9290 diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
9291 index 00099a8439d21..c6a1d8c4e6894 100644
9292 --- a/drivers/tty/pty.c
9293 +++ b/drivers/tty/pty.c
9294 @@ -120,10 +120,10 @@ static int pty_write(struct tty_struct *tty, const unsigned char *buf, int c)
9295 spin_lock_irqsave(&to->port->lock, flags);
9296 /* Stuff the data into the input queue of the other end */
9297 c = tty_insert_flip_string(to->port, buf, c);
9298 + spin_unlock_irqrestore(&to->port->lock, flags);
9299 /* And shovel */
9300 if (c)
9301 tty_flip_buffer_push(to->port);
9302 - spin_unlock_irqrestore(&to->port->lock, flags);
9303 }
9304 return c;
9305 }
9306 diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
9307 index 67a9eb3f94cec..a9751a83d5dbb 100644
9308 --- a/drivers/tty/serial/Kconfig
9309 +++ b/drivers/tty/serial/Kconfig
9310 @@ -10,6 +10,7 @@ menu "Serial drivers"
9311
9312 config SERIAL_EARLYCON
9313 bool
9314 + depends on SERIAL_CORE
9315 help
9316 Support for early consoles with the earlycon parameter. This enables
9317 the console before standard serial driver is probed. The console is
9318 diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
9319 index d2fc050a34454..ec8e608b46baa 100644
9320 --- a/drivers/tty/serial/fsl_lpuart.c
9321 +++ b/drivers/tty/serial/fsl_lpuart.c
9322 @@ -635,26 +635,24 @@ static int lpuart32_poll_init(struct uart_port *port)
9323 spin_lock_irqsave(&sport->port.lock, flags);
9324
9325 /* Disable Rx & Tx */
9326 - lpuart32_write(&sport->port, UARTCTRL, 0);
9327 + lpuart32_write(&sport->port, 0, UARTCTRL);
9328
9329 temp = lpuart32_read(&sport->port, UARTFIFO);
9330
9331 /* Enable Rx and Tx FIFO */
9332 - lpuart32_write(&sport->port, UARTFIFO,
9333 - temp | UARTFIFO_RXFE | UARTFIFO_TXFE);
9334 + lpuart32_write(&sport->port, temp | UARTFIFO_RXFE | UARTFIFO_TXFE, UARTFIFO);
9335
9336 /* flush Tx and Rx FIFO */
9337 - lpuart32_write(&sport->port, UARTFIFO,
9338 - UARTFIFO_TXFLUSH | UARTFIFO_RXFLUSH);
9339 + lpuart32_write(&sport->port, UARTFIFO_TXFLUSH | UARTFIFO_RXFLUSH, UARTFIFO);
9340
9341 /* explicitly clear RDRF */
9342 if (lpuart32_read(&sport->port, UARTSTAT) & UARTSTAT_RDRF) {
9343 lpuart32_read(&sport->port, UARTDATA);
9344 - lpuart32_write(&sport->port, UARTFIFO, UARTFIFO_RXUF);
9345 + lpuart32_write(&sport->port, UARTFIFO_RXUF, UARTFIFO);
9346 }
9347
9348 /* Enable Rx and Tx */
9349 - lpuart32_write(&sport->port, UARTCTRL, UARTCTRL_RE | UARTCTRL_TE);
9350 + lpuart32_write(&sport->port, UARTCTRL_RE | UARTCTRL_TE, UARTCTRL);
9351 spin_unlock_irqrestore(&sport->port.lock, flags);
9352
9353 return 0;
9354 @@ -663,12 +661,12 @@ static int lpuart32_poll_init(struct uart_port *port)
9355 static void lpuart32_poll_put_char(struct uart_port *port, unsigned char c)
9356 {
9357 lpuart32_wait_bit_set(port, UARTSTAT, UARTSTAT_TDRE);
9358 - lpuart32_write(port, UARTDATA, c);
9359 + lpuart32_write(port, c, UARTDATA);
9360 }
9361
9362 static int lpuart32_poll_get_char(struct uart_port *port)
9363 {
9364 - if (!(lpuart32_read(port, UARTSTAT) & UARTSTAT_RDRF))
9365 + if (!(lpuart32_read(port, UARTWATER) >> UARTWATER_RXCNT_OFF))
9366 return NO_POLL_CHAR;
9367
9368 return lpuart32_read(port, UARTDATA);
9369 diff --git a/drivers/usb/cdns3/gadget.c b/drivers/usb/cdns3/gadget.c
9370 index 9900888afbcd8..c0c39cf303871 100644
9371 --- a/drivers/usb/cdns3/gadget.c
9372 +++ b/drivers/usb/cdns3/gadget.c
9373 @@ -2545,12 +2545,12 @@ void cdns3_gadget_exit(struct cdns3 *cdns)
9374
9375 priv_dev = cdns->gadget_dev;
9376
9377 - devm_free_irq(cdns->dev, cdns->dev_irq, priv_dev);
9378
9379 pm_runtime_mark_last_busy(cdns->dev);
9380 pm_runtime_put_autosuspend(cdns->dev);
9381
9382 usb_del_gadget_udc(&priv_dev->gadget);
9383 + devm_free_irq(cdns->dev, cdns->dev_irq, priv_dev);
9384
9385 cdns3_free_all_eps(priv_dev);
9386
9387 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
9388 index 7499ba118665a..808722b8294a4 100644
9389 --- a/drivers/usb/class/cdc-acm.c
9390 +++ b/drivers/usb/class/cdc-acm.c
9391 @@ -1243,9 +1243,21 @@ static int acm_probe(struct usb_interface *intf,
9392 }
9393 }
9394 } else {
9395 + int class = -1;
9396 +
9397 data_intf_num = union_header->bSlaveInterface0;
9398 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
9399 data_interface = usb_ifnum_to_if(usb_dev, data_intf_num);
9400 +
9401 + if (control_interface)
9402 + class = control_interface->cur_altsetting->desc.bInterfaceClass;
9403 +
9404 + if (class != USB_CLASS_COMM && class != USB_CLASS_CDC_DATA) {
9405 + dev_dbg(&intf->dev, "Broken union descriptor, assuming single interface\n");
9406 + combined_interfaces = 1;
9407 + control_interface = data_interface = intf;
9408 + goto look_for_collapsed_interface;
9409 + }
9410 }
9411
9412 if (!control_interface || !data_interface) {
9413 @@ -1900,6 +1912,17 @@ static const struct usb_device_id acm_ids[] = {
9414 .driver_info = IGNORE_DEVICE,
9415 },
9416
9417 + /* Exclude ETAS ES58x */
9418 + { USB_DEVICE(0x108c, 0x0159), /* ES581.4 */
9419 + .driver_info = IGNORE_DEVICE,
9420 + },
9421 + { USB_DEVICE(0x108c, 0x0168), /* ES582.1 */
9422 + .driver_info = IGNORE_DEVICE,
9423 + },
9424 + { USB_DEVICE(0x108c, 0x0169), /* ES584.1 */
9425 + .driver_info = IGNORE_DEVICE,
9426 + },
9427 +
9428 { USB_DEVICE(0x1bc7, 0x0021), /* Telit 3G ACM only composition */
9429 .driver_info = SEND_ZERO_PACKET,
9430 },
9431 diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c
9432 index 70afb2ca1eabd..9875e2fe33db2 100644
9433 --- a/drivers/usb/class/cdc-wdm.c
9434 +++ b/drivers/usb/class/cdc-wdm.c
9435 @@ -58,6 +58,9 @@ MODULE_DEVICE_TABLE (usb, wdm_ids);
9436
9437 #define WDM_MAX 16
9438
9439 +/* we cannot wait forever at flush() */
9440 +#define WDM_FLUSH_TIMEOUT (30 * HZ)
9441 +
9442 /* CDC-WMC r1.1 requires wMaxCommand to be "at least 256 decimal (0x100)" */
9443 #define WDM_DEFAULT_BUFSIZE 256
9444
9445 @@ -151,7 +154,7 @@ static void wdm_out_callback(struct urb *urb)
9446 kfree(desc->outbuf);
9447 desc->outbuf = NULL;
9448 clear_bit(WDM_IN_USE, &desc->flags);
9449 - wake_up(&desc->wait);
9450 + wake_up_all(&desc->wait);
9451 }
9452
9453 static void wdm_in_callback(struct urb *urb)
9454 @@ -393,6 +396,9 @@ static ssize_t wdm_write
9455 if (test_bit(WDM_RESETTING, &desc->flags))
9456 r = -EIO;
9457
9458 + if (test_bit(WDM_DISCONNECTING, &desc->flags))
9459 + r = -ENODEV;
9460 +
9461 if (r < 0) {
9462 rv = r;
9463 goto out_free_mem_pm;
9464 @@ -424,6 +430,7 @@ static ssize_t wdm_write
9465 if (rv < 0) {
9466 desc->outbuf = NULL;
9467 clear_bit(WDM_IN_USE, &desc->flags);
9468 + wake_up_all(&desc->wait); /* for wdm_wait_for_response() */
9469 dev_err(&desc->intf->dev, "Tx URB error: %d\n", rv);
9470 rv = usb_translate_errors(rv);
9471 goto out_free_mem_pm;
9472 @@ -583,28 +590,58 @@ err:
9473 return rv;
9474 }
9475
9476 -static int wdm_flush(struct file *file, fl_owner_t id)
9477 +static int wdm_wait_for_response(struct file *file, long timeout)
9478 {
9479 struct wdm_device *desc = file->private_data;
9480 + long rv; /* Use long here because (int) MAX_SCHEDULE_TIMEOUT < 0. */
9481 +
9482 + /*
9483 + * Needs both flags. We cannot do with one because resetting it would
9484 + * cause a race with write() yet we need to signal a disconnect.
9485 + */
9486 + rv = wait_event_interruptible_timeout(desc->wait,
9487 + !test_bit(WDM_IN_USE, &desc->flags) ||
9488 + test_bit(WDM_DISCONNECTING, &desc->flags),
9489 + timeout);
9490
9491 - wait_event(desc->wait,
9492 - /*
9493 - * needs both flags. We cannot do with one
9494 - * because resetting it would cause a race
9495 - * with write() yet we need to signal
9496 - * a disconnect
9497 - */
9498 - !test_bit(WDM_IN_USE, &desc->flags) ||
9499 - test_bit(WDM_DISCONNECTING, &desc->flags));
9500 -
9501 - /* cannot dereference desc->intf if WDM_DISCONNECTING */
9502 + /*
9503 + * To report the correct error. This is best effort.
9504 + * We are inevitably racing with the hardware.
9505 + */
9506 if (test_bit(WDM_DISCONNECTING, &desc->flags))
9507 return -ENODEV;
9508 - if (desc->werr < 0)
9509 - dev_err(&desc->intf->dev, "Error in flush path: %d\n",
9510 - desc->werr);
9511 + if (!rv)
9512 + return -EIO;
9513 + if (rv < 0)
9514 + return -EINTR;
9515 +
9516 + spin_lock_irq(&desc->iuspin);
9517 + rv = desc->werr;
9518 + desc->werr = 0;
9519 + spin_unlock_irq(&desc->iuspin);
9520 +
9521 + return usb_translate_errors(rv);
9522 +
9523 +}
9524 +
9525 +/*
9526 + * You need to send a signal when you react to malicious or defective hardware.
9527 + * Also, don't abort when fsync() returned -EINVAL, for older kernels which do
9528 + * not implement wdm_flush() will return -EINVAL.
9529 + */
9530 +static int wdm_fsync(struct file *file, loff_t start, loff_t end, int datasync)
9531 +{
9532 + return wdm_wait_for_response(file, MAX_SCHEDULE_TIMEOUT);
9533 +}
9534
9535 - return usb_translate_errors(desc->werr);
9536 +/*
9537 + * Same with wdm_fsync(), except it uses finite timeout in order to react to
9538 + * malicious or defective hardware which ceased communication after close() was
9539 + * implicitly called due to process termination.
9540 + */
9541 +static int wdm_flush(struct file *file, fl_owner_t id)
9542 +{
9543 + return wdm_wait_for_response(file, WDM_FLUSH_TIMEOUT);
9544 }
9545
9546 static __poll_t wdm_poll(struct file *file, struct poll_table_struct *wait)
9547 @@ -729,6 +766,7 @@ static const struct file_operations wdm_fops = {
9548 .owner = THIS_MODULE,
9549 .read = wdm_read,
9550 .write = wdm_write,
9551 + .fsync = wdm_fsync,
9552 .open = wdm_open,
9553 .flush = wdm_flush,
9554 .release = wdm_release,
9555 diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
9556 index da923ec176122..31ca5abb4c12a 100644
9557 --- a/drivers/usb/core/urb.c
9558 +++ b/drivers/usb/core/urb.c
9559 @@ -772,11 +772,12 @@ void usb_block_urb(struct urb *urb)
9560 EXPORT_SYMBOL_GPL(usb_block_urb);
9561
9562 /**
9563 - * usb_kill_anchored_urbs - cancel transfer requests en masse
9564 + * usb_kill_anchored_urbs - kill all URBs associated with an anchor
9565 * @anchor: anchor the requests are bound to
9566 *
9567 - * this allows all outstanding URBs to be killed starting
9568 - * from the back of the queue
9569 + * This kills all outstanding URBs starting from the back of the queue,
9570 + * with guarantee that no completer callbacks will take place from the
9571 + * anchor after this function returns.
9572 *
9573 * This routine should not be called by a driver after its disconnect
9574 * method has returned.
9575 @@ -784,20 +785,26 @@ EXPORT_SYMBOL_GPL(usb_block_urb);
9576 void usb_kill_anchored_urbs(struct usb_anchor *anchor)
9577 {
9578 struct urb *victim;
9579 + int surely_empty;
9580
9581 - spin_lock_irq(&anchor->lock);
9582 - while (!list_empty(&anchor->urb_list)) {
9583 - victim = list_entry(anchor->urb_list.prev, struct urb,
9584 - anchor_list);
9585 - /* we must make sure the URB isn't freed before we kill it*/
9586 - usb_get_urb(victim);
9587 - spin_unlock_irq(&anchor->lock);
9588 - /* this will unanchor the URB */
9589 - usb_kill_urb(victim);
9590 - usb_put_urb(victim);
9591 + do {
9592 spin_lock_irq(&anchor->lock);
9593 - }
9594 - spin_unlock_irq(&anchor->lock);
9595 + while (!list_empty(&anchor->urb_list)) {
9596 + victim = list_entry(anchor->urb_list.prev,
9597 + struct urb, anchor_list);
9598 + /* make sure the URB isn't freed before we kill it */
9599 + usb_get_urb(victim);
9600 + spin_unlock_irq(&anchor->lock);
9601 + /* this will unanchor the URB */
9602 + usb_kill_urb(victim);
9603 + usb_put_urb(victim);
9604 + spin_lock_irq(&anchor->lock);
9605 + }
9606 + surely_empty = usb_anchor_check_wakeup(anchor);
9607 +
9608 + spin_unlock_irq(&anchor->lock);
9609 + cpu_relax();
9610 + } while (!surely_empty);
9611 }
9612 EXPORT_SYMBOL_GPL(usb_kill_anchored_urbs);
9613
9614 @@ -816,21 +823,27 @@ EXPORT_SYMBOL_GPL(usb_kill_anchored_urbs);
9615 void usb_poison_anchored_urbs(struct usb_anchor *anchor)
9616 {
9617 struct urb *victim;
9618 + int surely_empty;
9619
9620 - spin_lock_irq(&anchor->lock);
9621 - anchor->poisoned = 1;
9622 - while (!list_empty(&anchor->urb_list)) {
9623 - victim = list_entry(anchor->urb_list.prev, struct urb,
9624 - anchor_list);
9625 - /* we must make sure the URB isn't freed before we kill it*/
9626 - usb_get_urb(victim);
9627 - spin_unlock_irq(&anchor->lock);
9628 - /* this will unanchor the URB */
9629 - usb_poison_urb(victim);
9630 - usb_put_urb(victim);
9631 + do {
9632 spin_lock_irq(&anchor->lock);
9633 - }
9634 - spin_unlock_irq(&anchor->lock);
9635 + anchor->poisoned = 1;
9636 + while (!list_empty(&anchor->urb_list)) {
9637 + victim = list_entry(anchor->urb_list.prev,
9638 + struct urb, anchor_list);
9639 + /* make sure the URB isn't freed before we kill it */
9640 + usb_get_urb(victim);
9641 + spin_unlock_irq(&anchor->lock);
9642 + /* this will unanchor the URB */
9643 + usb_poison_urb(victim);
9644 + usb_put_urb(victim);
9645 + spin_lock_irq(&anchor->lock);
9646 + }
9647 + surely_empty = usb_anchor_check_wakeup(anchor);
9648 +
9649 + spin_unlock_irq(&anchor->lock);
9650 + cpu_relax();
9651 + } while (!surely_empty);
9652 }
9653 EXPORT_SYMBOL_GPL(usb_poison_anchored_urbs);
9654
9655 @@ -970,14 +983,20 @@ void usb_scuttle_anchored_urbs(struct usb_anchor *anchor)
9656 {
9657 struct urb *victim;
9658 unsigned long flags;
9659 + int surely_empty;
9660 +
9661 + do {
9662 + spin_lock_irqsave(&anchor->lock, flags);
9663 + while (!list_empty(&anchor->urb_list)) {
9664 + victim = list_entry(anchor->urb_list.prev,
9665 + struct urb, anchor_list);
9666 + __usb_unanchor_urb(victim, anchor);
9667 + }
9668 + surely_empty = usb_anchor_check_wakeup(anchor);
9669
9670 - spin_lock_irqsave(&anchor->lock, flags);
9671 - while (!list_empty(&anchor->urb_list)) {
9672 - victim = list_entry(anchor->urb_list.prev, struct urb,
9673 - anchor_list);
9674 - __usb_unanchor_urb(victim, anchor);
9675 - }
9676 - spin_unlock_irqrestore(&anchor->lock, flags);
9677 + spin_unlock_irqrestore(&anchor->lock, flags);
9678 + cpu_relax();
9679 + } while (!surely_empty);
9680 }
9681
9682 EXPORT_SYMBOL_GPL(usb_scuttle_anchored_urbs);
9683 diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
9684 index f7528f732b2aa..70ac47a341ac2 100644
9685 --- a/drivers/usb/dwc2/gadget.c
9686 +++ b/drivers/usb/dwc2/gadget.c
9687 @@ -712,8 +712,11 @@ static u32 dwc2_hsotg_read_frameno(struct dwc2_hsotg *hsotg)
9688 */
9689 static unsigned int dwc2_gadget_get_chain_limit(struct dwc2_hsotg_ep *hs_ep)
9690 {
9691 + const struct usb_endpoint_descriptor *ep_desc = hs_ep->ep.desc;
9692 int is_isoc = hs_ep->isochronous;
9693 unsigned int maxsize;
9694 + u32 mps = hs_ep->ep.maxpacket;
9695 + int dir_in = hs_ep->dir_in;
9696
9697 if (is_isoc)
9698 maxsize = (hs_ep->dir_in ? DEV_DMA_ISOC_TX_NBYTES_LIMIT :
9699 @@ -722,6 +725,11 @@ static unsigned int dwc2_gadget_get_chain_limit(struct dwc2_hsotg_ep *hs_ep)
9700 else
9701 maxsize = DEV_DMA_NBYTES_LIMIT * MAX_DMA_DESC_NUM_GENERIC;
9702
9703 + /* Interrupt OUT EP with mps not multiple of 4 */
9704 + if (hs_ep->index)
9705 + if (usb_endpoint_xfer_int(ep_desc) && !dir_in && (mps % 4))
9706 + maxsize = mps * MAX_DMA_DESC_NUM_GENERIC;
9707 +
9708 return maxsize;
9709 }
9710
9711 @@ -737,11 +745,14 @@ static unsigned int dwc2_gadget_get_chain_limit(struct dwc2_hsotg_ep *hs_ep)
9712 * Isochronous - descriptor rx/tx bytes bitfield limit,
9713 * Control In/Bulk/Interrupt - multiple of mps. This will allow to not
9714 * have concatenations from various descriptors within one packet.
9715 + * Interrupt OUT - if mps not multiple of 4 then a single packet corresponds
9716 + * to a single descriptor.
9717 *
9718 * Selects corresponding mask for RX/TX bytes as well.
9719 */
9720 static u32 dwc2_gadget_get_desc_params(struct dwc2_hsotg_ep *hs_ep, u32 *mask)
9721 {
9722 + const struct usb_endpoint_descriptor *ep_desc = hs_ep->ep.desc;
9723 u32 mps = hs_ep->ep.maxpacket;
9724 int dir_in = hs_ep->dir_in;
9725 u32 desc_size = 0;
9726 @@ -765,6 +776,13 @@ static u32 dwc2_gadget_get_desc_params(struct dwc2_hsotg_ep *hs_ep, u32 *mask)
9727 desc_size -= desc_size % mps;
9728 }
9729
9730 + /* Interrupt OUT EP with mps not multiple of 4 */
9731 + if (hs_ep->index)
9732 + if (usb_endpoint_xfer_int(ep_desc) && !dir_in && (mps % 4)) {
9733 + desc_size = mps;
9734 + *mask = DEV_DMA_NBYTES_MASK;
9735 + }
9736 +
9737 return desc_size;
9738 }
9739
9740 @@ -1123,13 +1141,7 @@ static void dwc2_hsotg_start_req(struct dwc2_hsotg *hsotg,
9741 length += (mps - (length % mps));
9742 }
9743
9744 - /*
9745 - * If more data to send, adjust DMA for EP0 out data stage.
9746 - * ureq->dma stays unchanged, hence increment it by already
9747 - * passed passed data count before starting new transaction.
9748 - */
9749 - if (!index && hsotg->ep0_state == DWC2_EP0_DATA_OUT &&
9750 - continuing)
9751 + if (continuing)
9752 offset = ureq->actual;
9753
9754 /* Fill DDMA chain entries */
9755 @@ -2319,22 +2331,36 @@ static void dwc2_hsotg_change_ep_iso_parity(struct dwc2_hsotg *hsotg,
9756 */
9757 static unsigned int dwc2_gadget_get_xfersize_ddma(struct dwc2_hsotg_ep *hs_ep)
9758 {
9759 + const struct usb_endpoint_descriptor *ep_desc = hs_ep->ep.desc;
9760 struct dwc2_hsotg *hsotg = hs_ep->parent;
9761 unsigned int bytes_rem = 0;
9762 + unsigned int bytes_rem_correction = 0;
9763 struct dwc2_dma_desc *desc = hs_ep->desc_list;
9764 int i;
9765 u32 status;
9766 + u32 mps = hs_ep->ep.maxpacket;
9767 + int dir_in = hs_ep->dir_in;
9768
9769 if (!desc)
9770 return -EINVAL;
9771
9772 + /* Interrupt OUT EP with mps not multiple of 4 */
9773 + if (hs_ep->index)
9774 + if (usb_endpoint_xfer_int(ep_desc) && !dir_in && (mps % 4))
9775 + bytes_rem_correction = 4 - (mps % 4);
9776 +
9777 for (i = 0; i < hs_ep->desc_count; ++i) {
9778 status = desc->status;
9779 bytes_rem += status & DEV_DMA_NBYTES_MASK;
9780 + bytes_rem -= bytes_rem_correction;
9781
9782 if (status & DEV_DMA_STS_MASK)
9783 dev_err(hsotg->dev, "descriptor %d closed with %x\n",
9784 i, status & DEV_DMA_STS_MASK);
9785 +
9786 + if (status & DEV_DMA_L)
9787 + break;
9788 +
9789 desc++;
9790 }
9791
9792 diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c
9793 index 31e090ac9f1ec..6d3812678b8c6 100644
9794 --- a/drivers/usb/dwc2/params.c
9795 +++ b/drivers/usb/dwc2/params.c
9796 @@ -846,7 +846,7 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
9797 int dwc2_init_params(struct dwc2_hsotg *hsotg)
9798 {
9799 const struct of_device_id *match;
9800 - void (*set_params)(void *data);
9801 + void (*set_params)(struct dwc2_hsotg *data);
9802
9803 dwc2_set_default_params(hsotg);
9804 dwc2_get_device_properties(hsotg);
9805 diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
9806 index 526c275ad0bc5..4cbf295390062 100644
9807 --- a/drivers/usb/dwc3/core.c
9808 +++ b/drivers/usb/dwc3/core.c
9809 @@ -117,6 +117,7 @@ static void __dwc3_set_mode(struct work_struct *work)
9810 struct dwc3 *dwc = work_to_dwc(work);
9811 unsigned long flags;
9812 int ret;
9813 + u32 reg;
9814
9815 if (dwc->dr_mode != USB_DR_MODE_OTG)
9816 return;
9817 @@ -168,6 +169,11 @@ static void __dwc3_set_mode(struct work_struct *work)
9818 otg_set_vbus(dwc->usb2_phy->otg, true);
9819 phy_set_mode(dwc->usb2_generic_phy, PHY_MODE_USB_HOST);
9820 phy_set_mode(dwc->usb3_generic_phy, PHY_MODE_USB_HOST);
9821 + if (dwc->dis_split_quirk) {
9822 + reg = dwc3_readl(dwc->regs, DWC3_GUCTL3);
9823 + reg |= DWC3_GUCTL3_SPLITDISABLE;
9824 + dwc3_writel(dwc->regs, DWC3_GUCTL3, reg);
9825 + }
9826 }
9827 break;
9828 case DWC3_GCTL_PRTCAP_DEVICE:
9829 @@ -1323,6 +1329,9 @@ static void dwc3_get_properties(struct dwc3 *dwc)
9830 dwc->dis_metastability_quirk = device_property_read_bool(dev,
9831 "snps,dis_metastability_quirk");
9832
9833 + dwc->dis_split_quirk = device_property_read_bool(dev,
9834 + "snps,dis-split-quirk");
9835 +
9836 dwc->lpm_nyet_threshold = lpm_nyet_threshold;
9837 dwc->tx_de_emphasis = tx_de_emphasis;
9838
9839 @@ -1835,10 +1844,26 @@ static int dwc3_resume(struct device *dev)
9840
9841 return 0;
9842 }
9843 +
9844 +static void dwc3_complete(struct device *dev)
9845 +{
9846 + struct dwc3 *dwc = dev_get_drvdata(dev);
9847 + u32 reg;
9848 +
9849 + if (dwc->current_dr_role == DWC3_GCTL_PRTCAP_HOST &&
9850 + dwc->dis_split_quirk) {
9851 + reg = dwc3_readl(dwc->regs, DWC3_GUCTL3);
9852 + reg |= DWC3_GUCTL3_SPLITDISABLE;
9853 + dwc3_writel(dwc->regs, DWC3_GUCTL3, reg);
9854 + }
9855 +}
9856 +#else
9857 +#define dwc3_complete NULL
9858 #endif /* CONFIG_PM_SLEEP */
9859
9860 static const struct dev_pm_ops dwc3_dev_pm_ops = {
9861 SET_SYSTEM_SLEEP_PM_OPS(dwc3_suspend, dwc3_resume)
9862 + .complete = dwc3_complete,
9863 SET_RUNTIME_PM_OPS(dwc3_runtime_suspend, dwc3_runtime_resume,
9864 dwc3_runtime_idle)
9865 };
9866 diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
9867 index ce4acbf7fef90..4dfbffa944de1 100644
9868 --- a/drivers/usb/dwc3/core.h
9869 +++ b/drivers/usb/dwc3/core.h
9870 @@ -136,6 +136,7 @@
9871 #define DWC3_GEVNTCOUNT(n) (0xc40c + ((n) * 0x10))
9872
9873 #define DWC3_GHWPARAMS8 0xc600
9874 +#define DWC3_GUCTL3 0xc60c
9875 #define DWC3_GFLADJ 0xc630
9876
9877 /* Device Registers */
9878 @@ -375,6 +376,9 @@
9879 /* Global User Control Register 2 */
9880 #define DWC3_GUCTL2_RST_ACTBITLATER BIT(14)
9881
9882 +/* Global User Control Register 3 */
9883 +#define DWC3_GUCTL3_SPLITDISABLE BIT(14)
9884 +
9885 /* Device Configuration Register */
9886 #define DWC3_DCFG_DEVADDR(addr) ((addr) << 3)
9887 #define DWC3_DCFG_DEVADDR_MASK DWC3_DCFG_DEVADDR(0x7f)
9888 @@ -1038,6 +1042,7 @@ struct dwc3_scratchpad_array {
9889 * 2 - No de-emphasis
9890 * 3 - Reserved
9891 * @dis_metastability_quirk: set to disable metastability quirk.
9892 + * @dis_split_quirk: set to disable split boundary.
9893 * @imod_interval: set the interrupt moderation interval in 250ns
9894 * increments or 0 to disable.
9895 */
9896 @@ -1229,6 +1234,8 @@ struct dwc3 {
9897
9898 unsigned dis_metastability_quirk:1;
9899
9900 + unsigned dis_split_quirk:1;
9901 +
9902 u16 imod_interval;
9903 };
9904
9905 diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c
9906 index bdac3e7d7b184..d055e00f81808 100644
9907 --- a/drivers/usb/dwc3/dwc3-of-simple.c
9908 +++ b/drivers/usb/dwc3/dwc3-of-simple.c
9909 @@ -183,6 +183,7 @@ static const struct of_device_id of_dwc3_simple_match[] = {
9910 { .compatible = "amlogic,meson-axg-dwc3" },
9911 { .compatible = "amlogic,meson-gxl-dwc3" },
9912 { .compatible = "allwinner,sun50i-h6-dwc3" },
9913 + { .compatible = "hisilicon,hi3670-dwc3" },
9914 { /* Sentinel */ }
9915 };
9916 MODULE_DEVICE_TABLE(of, of_dwc3_simple_match);
9917 diff --git a/drivers/usb/gadget/function/f_ncm.c b/drivers/usb/gadget/function/f_ncm.c
9918 index 1f638759a9533..92a7c3a839454 100644
9919 --- a/drivers/usb/gadget/function/f_ncm.c
9920 +++ b/drivers/usb/gadget/function/f_ncm.c
9921 @@ -85,8 +85,10 @@ static inline struct f_ncm *func_to_ncm(struct usb_function *f)
9922 /* peak (theoretical) bulk transfer rate in bits-per-second */
9923 static inline unsigned ncm_bitrate(struct usb_gadget *g)
9924 {
9925 - if (gadget_is_superspeed(g) && g->speed == USB_SPEED_SUPER)
9926 - return 13 * 1024 * 8 * 1000 * 8;
9927 + if (gadget_is_superspeed(g) && g->speed >= USB_SPEED_SUPER_PLUS)
9928 + return 4250000000U;
9929 + else if (gadget_is_superspeed(g) && g->speed == USB_SPEED_SUPER)
9930 + return 3750000000U;
9931 else if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
9932 return 13 * 512 * 8 * 1000 * 8;
9933 else
9934 @@ -1534,7 +1536,7 @@ static int ncm_bind(struct usb_configuration *c, struct usb_function *f)
9935 fs_ncm_notify_desc.bEndpointAddress;
9936
9937 status = usb_assign_descriptors(f, ncm_fs_function, ncm_hs_function,
9938 - ncm_ss_function, NULL);
9939 + ncm_ss_function, ncm_ss_function);
9940 if (status)
9941 goto fail;
9942
9943 diff --git a/drivers/usb/gadget/function/f_printer.c b/drivers/usb/gadget/function/f_printer.c
9944 index 9c7ed2539ff77..8ed1295d7e350 100644
9945 --- a/drivers/usb/gadget/function/f_printer.c
9946 +++ b/drivers/usb/gadget/function/f_printer.c
9947 @@ -31,6 +31,7 @@
9948 #include <linux/types.h>
9949 #include <linux/ctype.h>
9950 #include <linux/cdev.h>
9951 +#include <linux/kref.h>
9952
9953 #include <asm/byteorder.h>
9954 #include <linux/io.h>
9955 @@ -64,7 +65,7 @@ struct printer_dev {
9956 struct usb_gadget *gadget;
9957 s8 interface;
9958 struct usb_ep *in_ep, *out_ep;
9959 -
9960 + struct kref kref;
9961 struct list_head rx_reqs; /* List of free RX structs */
9962 struct list_head rx_reqs_active; /* List of Active RX xfers */
9963 struct list_head rx_buffers; /* List of completed xfers */
9964 @@ -218,6 +219,13 @@ static inline struct usb_endpoint_descriptor *ep_desc(struct usb_gadget *gadget,
9965
9966 /*-------------------------------------------------------------------------*/
9967
9968 +static void printer_dev_free(struct kref *kref)
9969 +{
9970 + struct printer_dev *dev = container_of(kref, struct printer_dev, kref);
9971 +
9972 + kfree(dev);
9973 +}
9974 +
9975 static struct usb_request *
9976 printer_req_alloc(struct usb_ep *ep, unsigned len, gfp_t gfp_flags)
9977 {
9978 @@ -348,6 +356,7 @@ printer_open(struct inode *inode, struct file *fd)
9979
9980 spin_unlock_irqrestore(&dev->lock, flags);
9981
9982 + kref_get(&dev->kref);
9983 DBG(dev, "printer_open returned %x\n", ret);
9984 return ret;
9985 }
9986 @@ -365,6 +374,7 @@ printer_close(struct inode *inode, struct file *fd)
9987 dev->printer_status &= ~PRINTER_SELECTED;
9988 spin_unlock_irqrestore(&dev->lock, flags);
9989
9990 + kref_put(&dev->kref, printer_dev_free);
9991 DBG(dev, "printer_close\n");
9992
9993 return 0;
9994 @@ -1350,7 +1360,8 @@ static void gprinter_free(struct usb_function *f)
9995 struct f_printer_opts *opts;
9996
9997 opts = container_of(f->fi, struct f_printer_opts, func_inst);
9998 - kfree(dev);
9999 +
10000 + kref_put(&dev->kref, printer_dev_free);
10001 mutex_lock(&opts->lock);
10002 --opts->refcnt;
10003 mutex_unlock(&opts->lock);
10004 @@ -1419,6 +1430,7 @@ static struct usb_function *gprinter_alloc(struct usb_function_instance *fi)
10005 return ERR_PTR(-ENOMEM);
10006 }
10007
10008 + kref_init(&dev->kref);
10009 ++opts->refcnt;
10010 dev->minor = opts->minor;
10011 dev->pnp_string = opts->pnp_string;
10012 diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c
10013 index fbe96ef1ac7a4..891e9f7f40d59 100644
10014 --- a/drivers/usb/gadget/function/u_ether.c
10015 +++ b/drivers/usb/gadget/function/u_ether.c
10016 @@ -93,7 +93,7 @@ struct eth_dev {
10017 static inline int qlen(struct usb_gadget *gadget, unsigned qmult)
10018 {
10019 if (gadget_is_dualspeed(gadget) && (gadget->speed == USB_SPEED_HIGH ||
10020 - gadget->speed == USB_SPEED_SUPER))
10021 + gadget->speed >= USB_SPEED_SUPER))
10022 return qmult * DEFAULT_QLEN;
10023 else
10024 return DEFAULT_QLEN;
10025 diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
10026 index 4de91653a2c7b..5eb62240c7f87 100644
10027 --- a/drivers/usb/host/ohci-hcd.c
10028 +++ b/drivers/usb/host/ohci-hcd.c
10029 @@ -673,20 +673,24 @@ retry:
10030
10031 /* handle root hub init quirks ... */
10032 val = roothub_a (ohci);
10033 - val &= ~(RH_A_PSM | RH_A_OCPM);
10034 + /* Configure for per-port over-current protection by default */
10035 + val &= ~RH_A_NOCP;
10036 + val |= RH_A_OCPM;
10037 if (ohci->flags & OHCI_QUIRK_SUPERIO) {
10038 - /* NSC 87560 and maybe others */
10039 + /* NSC 87560 and maybe others.
10040 + * Ganged power switching, no over-current protection.
10041 + */
10042 val |= RH_A_NOCP;
10043 - val &= ~(RH_A_POTPGT | RH_A_NPS);
10044 - ohci_writel (ohci, val, &ohci->regs->roothub.a);
10045 + val &= ~(RH_A_POTPGT | RH_A_NPS | RH_A_PSM | RH_A_OCPM);
10046 } else if ((ohci->flags & OHCI_QUIRK_AMD756) ||
10047 (ohci->flags & OHCI_QUIRK_HUB_POWER)) {
10048 /* hub power always on; required for AMD-756 and some
10049 - * Mac platforms. ganged overcurrent reporting, if any.
10050 + * Mac platforms.
10051 */
10052 val |= RH_A_NPS;
10053 - ohci_writel (ohci, val, &ohci->regs->roothub.a);
10054 }
10055 + ohci_writel(ohci, val, &ohci->regs->roothub.a);
10056 +
10057 ohci_writel (ohci, RH_HS_LPSC, &ohci->regs->roothub.status);
10058 ohci_writel (ohci, (val & RH_A_NPS) ? 0 : RH_B_PPCM,
10059 &ohci->regs->roothub.b);
10060 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
10061 index bad154f446f8d..0d10ede581cbd 100644
10062 --- a/drivers/usb/host/xhci.c
10063 +++ b/drivers/usb/host/xhci.c
10064 @@ -1915,8 +1915,6 @@ static int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev,
10065 ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index);
10066 trace_xhci_add_endpoint(ep_ctx);
10067
10068 - xhci_debugfs_create_endpoint(xhci, virt_dev, ep_index);
10069 -
10070 xhci_dbg(xhci, "add ep 0x%x, slot id %d, new drop flags = %#x, new add flags = %#x\n",
10071 (unsigned int) ep->desc.bEndpointAddress,
10072 udev->slot_id,
10073 @@ -2949,6 +2947,7 @@ static int xhci_check_bandwidth(struct usb_hcd *hcd, struct usb_device *udev)
10074 xhci_check_bw_drop_ep_streams(xhci, virt_dev, i);
10075 virt_dev->eps[i].ring = virt_dev->eps[i].new_ring;
10076 virt_dev->eps[i].new_ring = NULL;
10077 + xhci_debugfs_create_endpoint(xhci, virt_dev, i);
10078 }
10079 command_cleanup:
10080 kfree(command->completion);
10081 diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci_config.c
10082 index 927b608461c82..bf32997c557ff 100644
10083 --- a/drivers/vfio/pci/vfio_pci_config.c
10084 +++ b/drivers/vfio/pci/vfio_pci_config.c
10085 @@ -406,7 +406,7 @@ bool __vfio_pci_memory_enabled(struct vfio_pci_device *vdev)
10086 * PF SR-IOV capability, there's therefore no need to trigger
10087 * faults based on the virtual value.
10088 */
10089 - return pdev->is_virtfn || (cmd & PCI_COMMAND_MEMORY);
10090 + return pdev->no_command_memory || (cmd & PCI_COMMAND_MEMORY);
10091 }
10092
10093 /*
10094 @@ -518,8 +518,8 @@ static int vfio_basic_config_read(struct vfio_pci_device *vdev, int pos,
10095
10096 count = vfio_default_config_read(vdev, pos, count, perm, offset, val);
10097
10098 - /* Mask in virtual memory enable for SR-IOV devices */
10099 - if (offset == PCI_COMMAND && vdev->pdev->is_virtfn) {
10100 + /* Mask in virtual memory enable */
10101 + if (offset == PCI_COMMAND && vdev->pdev->no_command_memory) {
10102 u16 cmd = le16_to_cpu(*(__le16 *)&vdev->vconfig[PCI_COMMAND]);
10103 u32 tmp_val = le32_to_cpu(*val);
10104
10105 @@ -587,9 +587,11 @@ static int vfio_basic_config_write(struct vfio_pci_device *vdev, int pos,
10106 * shows it disabled (phys_mem/io, then the device has
10107 * undergone some kind of backdoor reset and needs to be
10108 * restored before we allow it to enable the bars.
10109 - * SR-IOV devices will trigger this, but we catch them later
10110 + * SR-IOV devices will trigger this - for mem enable let's
10111 + * catch this now and for io enable it will be caught later
10112 */
10113 - if ((new_mem && virt_mem && !phys_mem) ||
10114 + if ((new_mem && virt_mem && !phys_mem &&
10115 + !pdev->no_command_memory) ||
10116 (new_io && virt_io && !phys_io) ||
10117 vfio_need_bar_restore(vdev))
10118 vfio_bar_restore(vdev);
10119 @@ -1732,12 +1734,14 @@ int vfio_config_init(struct vfio_pci_device *vdev)
10120 vconfig[PCI_INTERRUPT_PIN]);
10121
10122 vconfig[PCI_INTERRUPT_PIN] = 0; /* Gratuitous for good VFs */
10123 -
10124 + }
10125 + if (pdev->no_command_memory) {
10126 /*
10127 - * VFs do no implement the memory enable bit of the COMMAND
10128 - * register therefore we'll not have it set in our initial
10129 - * copy of config space after pci_enable_device(). For
10130 - * consistency with PFs, set the virtual enable bit here.
10131 + * VFs and devices that set pdev->no_command_memory do not
10132 + * implement the memory enable bit of the COMMAND register
10133 + * therefore we'll not have it set in our initial copy of
10134 + * config space after pci_enable_device(). For consistency
10135 + * with PFs, set the virtual enable bit here.
10136 */
10137 *(__le16 *)&vconfig[PCI_COMMAND] |=
10138 cpu_to_le16(PCI_COMMAND_MEMORY);
10139 diff --git a/drivers/vfio/pci/vfio_pci_intrs.c b/drivers/vfio/pci/vfio_pci_intrs.c
10140 index 1d9fb25929459..869dce5f134dd 100644
10141 --- a/drivers/vfio/pci/vfio_pci_intrs.c
10142 +++ b/drivers/vfio/pci/vfio_pci_intrs.c
10143 @@ -352,11 +352,13 @@ static int vfio_msi_set_vector_signal(struct vfio_pci_device *vdev,
10144 vdev->ctx[vector].producer.token = trigger;
10145 vdev->ctx[vector].producer.irq = irq;
10146 ret = irq_bypass_register_producer(&vdev->ctx[vector].producer);
10147 - if (unlikely(ret))
10148 + if (unlikely(ret)) {
10149 dev_info(&pdev->dev,
10150 "irq bypass producer (token %p) registration fails: %d\n",
10151 vdev->ctx[vector].producer.token, ret);
10152
10153 + vdev->ctx[vector].producer.token = NULL;
10154 + }
10155 vdev->ctx[vector].trigger = trigger;
10156
10157 return 0;
10158 diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c
10159 index c6220f57fdf3e..3b31e83a92155 100644
10160 --- a/drivers/vfio/vfio_iommu_type1.c
10161 +++ b/drivers/vfio/vfio_iommu_type1.c
10162 @@ -631,7 +631,8 @@ static int vfio_iommu_type1_pin_pages(void *iommu_data,
10163
10164 ret = vfio_add_to_pfn_list(dma, iova, phys_pfn[i]);
10165 if (ret) {
10166 - vfio_unpin_page_external(dma, iova, do_accounting);
10167 + if (put_pfn(phys_pfn[i], dma->prot) && do_accounting)
10168 + vfio_lock_acct(dma, -1, true);
10169 goto pin_unwind;
10170 }
10171 }
10172 diff --git a/drivers/video/backlight/sky81452-backlight.c b/drivers/video/backlight/sky81452-backlight.c
10173 index 2355f00f57732..1f6301375fd33 100644
10174 --- a/drivers/video/backlight/sky81452-backlight.c
10175 +++ b/drivers/video/backlight/sky81452-backlight.c
10176 @@ -196,6 +196,7 @@ static struct sky81452_bl_platform_data *sky81452_bl_parse_dt(
10177 num_entry);
10178 if (ret < 0) {
10179 dev_err(dev, "led-sources node is invalid.\n");
10180 + of_node_put(np);
10181 return ERR_PTR(-EINVAL);
10182 }
10183
10184 diff --git a/drivers/video/fbdev/aty/radeon_base.c b/drivers/video/fbdev/aty/radeon_base.c
10185 index 4ca07866f2f66..5dda824d0da3f 100644
10186 --- a/drivers/video/fbdev/aty/radeon_base.c
10187 +++ b/drivers/video/fbdev/aty/radeon_base.c
10188 @@ -2323,7 +2323,7 @@ static int radeonfb_pci_register(struct pci_dev *pdev,
10189
10190 ret = radeon_kick_out_firmware_fb(pdev);
10191 if (ret)
10192 - return ret;
10193 + goto err_release_fb;
10194
10195 /* request the mem regions */
10196 ret = pci_request_region(pdev, 0, "radeonfb framebuffer");
10197 diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
10198 index 97abcd497c7e0..bf76dadbed87f 100644
10199 --- a/drivers/video/fbdev/core/fbmem.c
10200 +++ b/drivers/video/fbdev/core/fbmem.c
10201 @@ -1001,6 +1001,10 @@ fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)
10202 return 0;
10203 }
10204
10205 + /* bitfill_aligned() assumes that it's at least 8x8 */
10206 + if (var->xres < 8 || var->yres < 8)
10207 + return -EINVAL;
10208 +
10209 ret = info->fbops->fb_check_var(var, info);
10210
10211 if (ret)
10212 diff --git a/drivers/video/fbdev/sis/init.c b/drivers/video/fbdev/sis/init.c
10213 index dfe3eb769638b..fde27feae5d0c 100644
10214 --- a/drivers/video/fbdev/sis/init.c
10215 +++ b/drivers/video/fbdev/sis/init.c
10216 @@ -2428,6 +2428,11 @@ SiS_SetCRT1FIFO_630(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
10217
10218 i = 0;
10219
10220 + if (SiS_Pr->ChipType == SIS_730)
10221 + queuedata = &FQBQData730[0];
10222 + else
10223 + queuedata = &FQBQData[0];
10224 +
10225 if(ModeNo > 0x13) {
10226
10227 /* Get VCLK */
10228 @@ -2445,12 +2450,6 @@ SiS_SetCRT1FIFO_630(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
10229 /* Get half colordepth */
10230 colorth = colortharray[(SiS_Pr->SiS_ModeType - ModeEGA)];
10231
10232 - if(SiS_Pr->ChipType == SIS_730) {
10233 - queuedata = &FQBQData730[0];
10234 - } else {
10235 - queuedata = &FQBQData[0];
10236 - }
10237 -
10238 do {
10239 templ = SiS_CalcDelay2(SiS_Pr, queuedata[i]) * VCLK * colorth;
10240
10241 diff --git a/drivers/video/fbdev/vga16fb.c b/drivers/video/fbdev/vga16fb.c
10242 index 4b83109202b1c..3c4d20618de4c 100644
10243 --- a/drivers/video/fbdev/vga16fb.c
10244 +++ b/drivers/video/fbdev/vga16fb.c
10245 @@ -243,7 +243,7 @@ static void vga16fb_update_fix(struct fb_info *info)
10246 }
10247
10248 static void vga16fb_clock_chip(struct vga16fb_par *par,
10249 - unsigned int pixclock,
10250 + unsigned int *pixclock,
10251 const struct fb_info *info,
10252 int mul, int div)
10253 {
10254 @@ -259,14 +259,14 @@ static void vga16fb_clock_chip(struct vga16fb_par *par,
10255 { 0 /* bad */, 0x00, 0x00}};
10256 int err;
10257
10258 - pixclock = (pixclock * mul) / div;
10259 + *pixclock = (*pixclock * mul) / div;
10260 best = vgaclocks;
10261 - err = pixclock - best->pixclock;
10262 + err = *pixclock - best->pixclock;
10263 if (err < 0) err = -err;
10264 for (ptr = vgaclocks + 1; ptr->pixclock; ptr++) {
10265 int tmp;
10266
10267 - tmp = pixclock - ptr->pixclock;
10268 + tmp = *pixclock - ptr->pixclock;
10269 if (tmp < 0) tmp = -tmp;
10270 if (tmp < err) {
10271 err = tmp;
10272 @@ -275,7 +275,7 @@ static void vga16fb_clock_chip(struct vga16fb_par *par,
10273 }
10274 par->misc |= best->misc;
10275 par->clkdiv = best->seq_clock_mode;
10276 - pixclock = (best->pixclock * div) / mul;
10277 + *pixclock = (best->pixclock * div) / mul;
10278 }
10279
10280 #define FAIL(X) return -EINVAL
10281 @@ -497,10 +497,10 @@ static int vga16fb_check_var(struct fb_var_screeninfo *var,
10282
10283 if (mode & MODE_8BPP)
10284 /* pixel clock == vga clock / 2 */
10285 - vga16fb_clock_chip(par, var->pixclock, info, 1, 2);
10286 + vga16fb_clock_chip(par, &var->pixclock, info, 1, 2);
10287 else
10288 /* pixel clock == vga clock */
10289 - vga16fb_clock_chip(par, var->pixclock, info, 1, 1);
10290 + vga16fb_clock_chip(par, &var->pixclock, info, 1, 1);
10291
10292 var->red.offset = var->green.offset = var->blue.offset =
10293 var->transp.offset = 0;
10294 diff --git a/drivers/virt/fsl_hypervisor.c b/drivers/virt/fsl_hypervisor.c
10295 index 93d5bebf9572a..fb292f9cf29df 100644
10296 --- a/drivers/virt/fsl_hypervisor.c
10297 +++ b/drivers/virt/fsl_hypervisor.c
10298 @@ -157,7 +157,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
10299
10300 unsigned int i;
10301 long ret = 0;
10302 - int num_pinned; /* return value from get_user_pages() */
10303 + int num_pinned = 0; /* return value from get_user_pages_fast() */
10304 phys_addr_t remote_paddr; /* The next address in the remote buffer */
10305 uint32_t count; /* The number of bytes left to copy */
10306
10307 @@ -174,7 +174,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
10308 return -EINVAL;
10309
10310 /*
10311 - * The array of pages returned by get_user_pages() covers only
10312 + * The array of pages returned by get_user_pages_fast() covers only
10313 * page-aligned memory. Since the user buffer is probably not
10314 * page-aligned, we need to handle the discrepancy.
10315 *
10316 @@ -224,7 +224,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
10317
10318 /*
10319 * 'pages' is an array of struct page pointers that's initialized by
10320 - * get_user_pages().
10321 + * get_user_pages_fast().
10322 */
10323 pages = kcalloc(num_pages, sizeof(struct page *), GFP_KERNEL);
10324 if (!pages) {
10325 @@ -241,7 +241,7 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
10326 if (!sg_list_unaligned) {
10327 pr_debug("fsl-hv: could not allocate S/G list\n");
10328 ret = -ENOMEM;
10329 - goto exit;
10330 + goto free_pages;
10331 }
10332 sg_list = PTR_ALIGN(sg_list_unaligned, sizeof(struct fh_sg_list));
10333
10334 @@ -250,7 +250,6 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
10335 num_pages, param.source != -1 ? FOLL_WRITE : 0, pages);
10336
10337 if (num_pinned != num_pages) {
10338 - /* get_user_pages() failed */
10339 pr_debug("fsl-hv: could not lock source buffer\n");
10340 ret = (num_pinned < 0) ? num_pinned : -EFAULT;
10341 goto exit;
10342 @@ -292,13 +291,13 @@ static long ioctl_memcpy(struct fsl_hv_ioctl_memcpy __user *p)
10343 virt_to_phys(sg_list), num_pages);
10344
10345 exit:
10346 - if (pages) {
10347 - for (i = 0; i < num_pages; i++)
10348 - if (pages[i])
10349 - put_page(pages[i]);
10350 + if (pages && (num_pinned > 0)) {
10351 + for (i = 0; i < num_pinned; i++)
10352 + put_page(pages[i]);
10353 }
10354
10355 kfree(sg_list_unaligned);
10356 +free_pages:
10357 kfree(pages);
10358
10359 if (!ret)
10360 diff --git a/drivers/watchdog/sp5100_tco.h b/drivers/watchdog/sp5100_tco.h
10361 index 87eaf357ae01f..adf015aa4126f 100644
10362 --- a/drivers/watchdog/sp5100_tco.h
10363 +++ b/drivers/watchdog/sp5100_tco.h
10364 @@ -70,7 +70,7 @@
10365 #define EFCH_PM_DECODEEN_WDT_TMREN BIT(7)
10366
10367
10368 -#define EFCH_PM_DECODEEN3 0x00
10369 +#define EFCH_PM_DECODEEN3 0x03
10370 #define EFCH_PM_DECODEEN_SECOND_RES GENMASK(1, 0)
10371 #define EFCH_PM_WATCHDOG_DISABLE ((u8)GENMASK(3, 2))
10372
10373 diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
10374 index 3729f99fd8eca..8494846ccdc5f 100644
10375 --- a/drivers/watchdog/watchdog_dev.c
10376 +++ b/drivers/watchdog/watchdog_dev.c
10377 @@ -971,8 +971,10 @@ static int watchdog_cdev_register(struct watchdog_device *wdd)
10378 wd_data->wdd = wdd;
10379 wdd->wd_data = wd_data;
10380
10381 - if (IS_ERR_OR_NULL(watchdog_kworker))
10382 + if (IS_ERR_OR_NULL(watchdog_kworker)) {
10383 + kfree(wd_data);
10384 return -ENODEV;
10385 + }
10386
10387 device_initialize(&wd_data->dev);
10388 wd_data->dev.devt = MKDEV(MAJOR(watchdog_devt), wdd->id);
10389 @@ -998,7 +1000,7 @@ static int watchdog_cdev_register(struct watchdog_device *wdd)
10390 pr_err("%s: a legacy watchdog module is probably present.\n",
10391 wdd->info->identity);
10392 old_wd_data = NULL;
10393 - kfree(wd_data);
10394 + put_device(&wd_data->dev);
10395 return err;
10396 }
10397 }
10398 diff --git a/fs/cifs/asn1.c b/fs/cifs/asn1.c
10399 index 689162e2e1755..3150c19cdc2fb 100644
10400 --- a/fs/cifs/asn1.c
10401 +++ b/fs/cifs/asn1.c
10402 @@ -530,8 +530,8 @@ decode_negTokenInit(unsigned char *security_blob, int length,
10403 return 0;
10404 } else if ((cls != ASN1_CTX) || (con != ASN1_CON)
10405 || (tag != ASN1_EOC)) {
10406 - cifs_dbg(FYI, "cls = %d con = %d tag = %d end = %p (%d) exit 0\n",
10407 - cls, con, tag, end, *end);
10408 + cifs_dbg(FYI, "cls = %d con = %d tag = %d end = %p exit 0\n",
10409 + cls, con, tag, end);
10410 return 0;
10411 }
10412
10413 @@ -541,8 +541,8 @@ decode_negTokenInit(unsigned char *security_blob, int length,
10414 return 0;
10415 } else if ((cls != ASN1_UNI) || (con != ASN1_CON)
10416 || (tag != ASN1_SEQ)) {
10417 - cifs_dbg(FYI, "cls = %d con = %d tag = %d end = %p (%d) exit 1\n",
10418 - cls, con, tag, end, *end);
10419 + cifs_dbg(FYI, "cls = %d con = %d tag = %d end = %p exit 1\n",
10420 + cls, con, tag, end);
10421 return 0;
10422 }
10423
10424 @@ -552,8 +552,8 @@ decode_negTokenInit(unsigned char *security_blob, int length,
10425 return 0;
10426 } else if ((cls != ASN1_CTX) || (con != ASN1_CON)
10427 || (tag != ASN1_EOC)) {
10428 - cifs_dbg(FYI, "cls = %d con = %d tag = %d end = %p (%d) exit 0\n",
10429 - cls, con, tag, end, *end);
10430 + cifs_dbg(FYI, "cls = %d con = %d tag = %d end = %p exit 0\n",
10431 + cls, con, tag, end);
10432 return 0;
10433 }
10434
10435 @@ -564,8 +564,8 @@ decode_negTokenInit(unsigned char *security_blob, int length,
10436 return 0;
10437 } else if ((cls != ASN1_UNI) || (con != ASN1_CON)
10438 || (tag != ASN1_SEQ)) {
10439 - cifs_dbg(FYI, "cls = %d con = %d tag = %d end = %p (%d) exit 1\n",
10440 - cls, con, tag, end, *end);
10441 + cifs_dbg(FYI, "cls = %d con = %d tag = %d sequence_end = %p exit 1\n",
10442 + cls, con, tag, sequence_end);
10443 return 0;
10444 }
10445
10446 diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
10447 index 9a89e5f7c4da3..776029a57e717 100644
10448 --- a/fs/cifs/smb2ops.c
10449 +++ b/fs/cifs/smb2ops.c
10450 @@ -3707,7 +3707,7 @@ crypt_message(struct TCP_Server_Info *server, int num_rqst,
10451 if (rc) {
10452 cifs_server_dbg(VFS, "%s: Could not get %scryption key\n", __func__,
10453 enc ? "en" : "de");
10454 - return 0;
10455 + return rc;
10456 }
10457
10458 rc = smb3_crypto_aead_allocate(server);
10459 @@ -3886,7 +3886,8 @@ smb3_is_transform_hdr(void *buf)
10460 static int
10461 decrypt_raw_data(struct TCP_Server_Info *server, char *buf,
10462 unsigned int buf_data_size, struct page **pages,
10463 - unsigned int npages, unsigned int page_data_size)
10464 + unsigned int npages, unsigned int page_data_size,
10465 + bool is_offloaded)
10466 {
10467 struct kvec iov[2];
10468 struct smb_rqst rqst = {NULL};
10469 @@ -3912,7 +3913,8 @@ decrypt_raw_data(struct TCP_Server_Info *server, char *buf,
10470
10471 memmove(buf, iov[1].iov_base, buf_data_size);
10472
10473 - server->total_read = buf_data_size + page_data_size;
10474 + if (!is_offloaded)
10475 + server->total_read = buf_data_size + page_data_size;
10476
10477 return rc;
10478 }
10479 @@ -4126,7 +4128,7 @@ static void smb2_decrypt_offload(struct work_struct *work)
10480 struct mid_q_entry *mid;
10481
10482 rc = decrypt_raw_data(dw->server, dw->buf, dw->server->vals->read_rsp_size,
10483 - dw->ppages, dw->npages, dw->len);
10484 + dw->ppages, dw->npages, dw->len, true);
10485 if (rc) {
10486 cifs_dbg(VFS, "error decrypting rc=%d\n", rc);
10487 goto free_pages;
10488 @@ -4232,7 +4234,7 @@ receive_encrypted_read(struct TCP_Server_Info *server, struct mid_q_entry **mid,
10489
10490 non_offloaded_decrypt:
10491 rc = decrypt_raw_data(server, buf, server->vals->read_rsp_size,
10492 - pages, npages, len);
10493 + pages, npages, len, false);
10494 if (rc)
10495 goto free_pages;
10496
10497 @@ -4288,7 +4290,7 @@ receive_encrypted_standard(struct TCP_Server_Info *server,
10498 server->total_read += length;
10499
10500 buf_size = pdu_length - sizeof(struct smb2_transform_hdr);
10501 - length = decrypt_raw_data(server, buf, buf_size, NULL, 0, 0);
10502 + length = decrypt_raw_data(server, buf, buf_size, NULL, 0, 0, false);
10503 if (length)
10504 return length;
10505
10506 diff --git a/fs/d_path.c b/fs/d_path.c
10507 index 0f1fc1743302f..a69e2cd36e6e3 100644
10508 --- a/fs/d_path.c
10509 +++ b/fs/d_path.c
10510 @@ -102,6 +102,8 @@ restart:
10511
10512 if (dentry == vfsmnt->mnt_root || IS_ROOT(dentry)) {
10513 struct mount *parent = READ_ONCE(mnt->mnt_parent);
10514 + struct mnt_namespace *mnt_ns;
10515 +
10516 /* Escaped? */
10517 if (dentry != vfsmnt->mnt_root) {
10518 bptr = *buffer;
10519 @@ -116,7 +118,9 @@ restart:
10520 vfsmnt = &mnt->mnt;
10521 continue;
10522 }
10523 - if (is_mounted(vfsmnt) && !is_anon_ns(mnt->mnt_ns))
10524 + mnt_ns = READ_ONCE(mnt->mnt_ns);
10525 + /* open-coded is_mounted() to use local mnt_ns */
10526 + if (!IS_ERR_OR_NULL(mnt_ns) && !is_anon_ns(mnt_ns))
10527 error = 1; // absolute root
10528 else
10529 error = 2; // detached or not attached yet
10530 diff --git a/fs/dlm/config.c b/fs/dlm/config.c
10531 index 3b21082e1b550..3b1012a3c4396 100644
10532 --- a/fs/dlm/config.c
10533 +++ b/fs/dlm/config.c
10534 @@ -216,6 +216,7 @@ struct dlm_space {
10535 struct list_head members;
10536 struct mutex members_lock;
10537 int members_count;
10538 + struct dlm_nodes *nds;
10539 };
10540
10541 struct dlm_comms {
10542 @@ -424,6 +425,7 @@ static struct config_group *make_space(struct config_group *g, const char *name)
10543 INIT_LIST_HEAD(&sp->members);
10544 mutex_init(&sp->members_lock);
10545 sp->members_count = 0;
10546 + sp->nds = nds;
10547 return &sp->group;
10548
10549 fail:
10550 @@ -445,6 +447,7 @@ static void drop_space(struct config_group *g, struct config_item *i)
10551 static void release_space(struct config_item *i)
10552 {
10553 struct dlm_space *sp = config_item_to_space(i);
10554 + kfree(sp->nds);
10555 kfree(sp);
10556 }
10557
10558 diff --git a/fs/ext4/fsmap.c b/fs/ext4/fsmap.c
10559 index dbccf46f17709..37347ba868b70 100644
10560 --- a/fs/ext4/fsmap.c
10561 +++ b/fs/ext4/fsmap.c
10562 @@ -108,6 +108,9 @@ static int ext4_getfsmap_helper(struct super_block *sb,
10563
10564 /* Are we just counting mappings? */
10565 if (info->gfi_head->fmh_count == 0) {
10566 + if (info->gfi_head->fmh_entries == UINT_MAX)
10567 + return EXT4_QUERY_RANGE_ABORT;
10568 +
10569 if (rec_fsblk > info->gfi_next_fsblk)
10570 info->gfi_head->fmh_entries++;
10571
10572 diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
10573 index 170934430d7d7..029e693e201cf 100644
10574 --- a/fs/f2fs/sysfs.c
10575 +++ b/fs/f2fs/sysfs.c
10576 @@ -788,4 +788,5 @@ void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi)
10577 }
10578 kobject_del(&sbi->s_kobj);
10579 kobject_put(&sbi->s_kobj);
10580 + wait_for_completion(&sbi->s_kobj_unregister);
10581 }
10582 diff --git a/fs/iomap/buffered-io.c b/fs/iomap/buffered-io.c
10583 index a30ea7ecb790a..80867a1a94f26 100644
10584 --- a/fs/iomap/buffered-io.c
10585 +++ b/fs/iomap/buffered-io.c
10586 @@ -559,6 +559,7 @@ __iomap_write_begin(struct inode *inode, loff_t pos, unsigned len,
10587
10588 if (PageUptodate(page))
10589 return 0;
10590 + ClearPageError(page);
10591
10592 do {
10593 iomap_adjust_read_range(inode, iop, &block_start,
10594 diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c
10595 index 7b5f76efef02d..8c98fd92bf665 100644
10596 --- a/fs/iomap/direct-io.c
10597 +++ b/fs/iomap/direct-io.c
10598 @@ -377,6 +377,16 @@ iomap_dio_actor(struct inode *inode, loff_t pos, loff_t length,
10599 return iomap_dio_bio_actor(inode, pos, length, dio, iomap);
10600 case IOMAP_INLINE:
10601 return iomap_dio_inline_actor(inode, pos, length, dio, iomap);
10602 + case IOMAP_DELALLOC:
10603 + /*
10604 + * DIO is not serialised against mmap() access at all, and so
10605 + * if the page_mkwrite occurs between the writeback and the
10606 + * iomap_apply() call in the DIO path, then it will see the
10607 + * DELALLOC block that the page-mkwrite allocated.
10608 + */
10609 + pr_warn_ratelimited("Direct I/O collision with buffered writes! File: %pD4 Comm: %.20s\n",
10610 + dio->iocb->ki_filp, current->comm);
10611 + return -EIO;
10612 default:
10613 WARN_ON_ONCE(1);
10614 return -EIO;
10615 diff --git a/fs/ntfs/inode.c b/fs/ntfs/inode.c
10616 index d4359a1df3d5e..84933a0af49b6 100644
10617 --- a/fs/ntfs/inode.c
10618 +++ b/fs/ntfs/inode.c
10619 @@ -1809,6 +1809,12 @@ int ntfs_read_inode_mount(struct inode *vi)
10620 brelse(bh);
10621 }
10622
10623 + if (le32_to_cpu(m->bytes_allocated) != vol->mft_record_size) {
10624 + ntfs_error(sb, "Incorrect mft record size %u in superblock, should be %u.",
10625 + le32_to_cpu(m->bytes_allocated), vol->mft_record_size);
10626 + goto err_out;
10627 + }
10628 +
10629 /* Apply the mst fixups. */
10630 if (post_read_mst_fixup((NTFS_RECORD*)m, vol->mft_record_size)) {
10631 /* FIXME: Try to use the $MFTMirr now. */
10632 diff --git a/fs/proc/base.c b/fs/proc/base.c
10633 index 529d0c6ec6f9c..b690074e65ffa 100644
10634 --- a/fs/proc/base.c
10635 +++ b/fs/proc/base.c
10636 @@ -1036,7 +1036,6 @@ static ssize_t oom_adj_read(struct file *file, char __user *buf, size_t count,
10637
10638 static int __set_oom_adj(struct file *file, int oom_adj, bool legacy)
10639 {
10640 - static DEFINE_MUTEX(oom_adj_mutex);
10641 struct mm_struct *mm = NULL;
10642 struct task_struct *task;
10643 int err = 0;
10644 @@ -1076,7 +1075,7 @@ static int __set_oom_adj(struct file *file, int oom_adj, bool legacy)
10645 struct task_struct *p = find_lock_task_mm(task);
10646
10647 if (p) {
10648 - if (atomic_read(&p->mm->mm_users) > 1) {
10649 + if (test_bit(MMF_MULTIPROCESS, &p->mm->flags)) {
10650 mm = p->mm;
10651 mmgrab(mm);
10652 }
10653 diff --git a/fs/quota/quota_v2.c b/fs/quota/quota_v2.c
10654 index 53429c29c7842..276c27fb99280 100644
10655 --- a/fs/quota/quota_v2.c
10656 +++ b/fs/quota/quota_v2.c
10657 @@ -284,6 +284,7 @@ static void v2r1_mem2diskdqb(void *dp, struct dquot *dquot)
10658 d->dqb_curspace = cpu_to_le64(m->dqb_curspace);
10659 d->dqb_btime = cpu_to_le64(m->dqb_btime);
10660 d->dqb_id = cpu_to_le32(from_kqid(&init_user_ns, dquot->dq_id));
10661 + d->dqb_pad = 0;
10662 if (qtree_entry_unused(info, dp))
10663 d->dqb_itime = cpu_to_le64(1);
10664 }
10665 diff --git a/fs/ramfs/file-nommu.c b/fs/ramfs/file-nommu.c
10666 index 4146954549560..355523f4a4bf3 100644
10667 --- a/fs/ramfs/file-nommu.c
10668 +++ b/fs/ramfs/file-nommu.c
10669 @@ -224,7 +224,7 @@ static unsigned long ramfs_nommu_get_unmapped_area(struct file *file,
10670 if (!pages)
10671 goto out_free;
10672
10673 - nr = find_get_pages(inode->i_mapping, &pgoff, lpages, pages);
10674 + nr = find_get_pages_contig(inode->i_mapping, pgoff, lpages, pages);
10675 if (nr != lpages)
10676 goto out_free_pages; /* leave if some pages were missing */
10677
10678 diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
10679 index 70387650436cf..ac35ddf0dd603 100644
10680 --- a/fs/reiserfs/inode.c
10681 +++ b/fs/reiserfs/inode.c
10682 @@ -2161,7 +2161,8 @@ out_end_trans:
10683 out_inserted_sd:
10684 clear_nlink(inode);
10685 th->t_trans_id = 0; /* so the caller can't use this handle later */
10686 - unlock_new_inode(inode); /* OK to do even if we hadn't locked it */
10687 + if (inode->i_state & I_NEW)
10688 + unlock_new_inode(inode);
10689 iput(inode);
10690 return err;
10691 }
10692 diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
10693 index a6bce5b1fb1dc..1b9c7a387dc71 100644
10694 --- a/fs/reiserfs/super.c
10695 +++ b/fs/reiserfs/super.c
10696 @@ -1258,6 +1258,10 @@ static int reiserfs_parse_options(struct super_block *s,
10697 "turned on.");
10698 return 0;
10699 }
10700 + if (qf_names[qtype] !=
10701 + REISERFS_SB(s)->s_qf_names[qtype])
10702 + kfree(qf_names[qtype]);
10703 + qf_names[qtype] = NULL;
10704 if (*arg) { /* Some filename specified? */
10705 if (REISERFS_SB(s)->s_qf_names[qtype]
10706 && strcmp(REISERFS_SB(s)->s_qf_names[qtype],
10707 @@ -1287,10 +1291,6 @@ static int reiserfs_parse_options(struct super_block *s,
10708 else
10709 *mount_options |= 1 << REISERFS_GRPQUOTA;
10710 } else {
10711 - if (qf_names[qtype] !=
10712 - REISERFS_SB(s)->s_qf_names[qtype])
10713 - kfree(qf_names[qtype]);
10714 - qf_names[qtype] = NULL;
10715 if (qtype == USRQUOTA)
10716 *mount_options &= ~(1 << REISERFS_USRQUOTA);
10717 else
10718 diff --git a/fs/udf/inode.c b/fs/udf/inode.c
10719 index ea80036d7897b..97a192eb9949c 100644
10720 --- a/fs/udf/inode.c
10721 +++ b/fs/udf/inode.c
10722 @@ -139,21 +139,24 @@ void udf_evict_inode(struct inode *inode)
10723 struct udf_inode_info *iinfo = UDF_I(inode);
10724 int want_delete = 0;
10725
10726 - if (!inode->i_nlink && !is_bad_inode(inode)) {
10727 - want_delete = 1;
10728 - udf_setsize(inode, 0);
10729 - udf_update_inode(inode, IS_SYNC(inode));
10730 + if (!is_bad_inode(inode)) {
10731 + if (!inode->i_nlink) {
10732 + want_delete = 1;
10733 + udf_setsize(inode, 0);
10734 + udf_update_inode(inode, IS_SYNC(inode));
10735 + }
10736 + if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB &&
10737 + inode->i_size != iinfo->i_lenExtents) {
10738 + udf_warn(inode->i_sb,
10739 + "Inode %lu (mode %o) has inode size %llu different from extent length %llu. Filesystem need not be standards compliant.\n",
10740 + inode->i_ino, inode->i_mode,
10741 + (unsigned long long)inode->i_size,
10742 + (unsigned long long)iinfo->i_lenExtents);
10743 + }
10744 }
10745 truncate_inode_pages_final(&inode->i_data);
10746 invalidate_inode_buffers(inode);
10747 clear_inode(inode);
10748 - if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB &&
10749 - inode->i_size != iinfo->i_lenExtents) {
10750 - udf_warn(inode->i_sb, "Inode %lu (mode %o) has inode size %llu different from extent length %llu. Filesystem need not be standards compliant.\n",
10751 - inode->i_ino, inode->i_mode,
10752 - (unsigned long long)inode->i_size,
10753 - (unsigned long long)iinfo->i_lenExtents);
10754 - }
10755 kfree(iinfo->i_ext.i_data);
10756 iinfo->i_ext.i_data = NULL;
10757 udf_clear_extent_cache(inode);
10758 diff --git a/fs/udf/super.c b/fs/udf/super.c
10759 index 4baa1ca91e9be..a0cd766b41cdb 100644
10760 --- a/fs/udf/super.c
10761 +++ b/fs/udf/super.c
10762 @@ -1352,6 +1352,12 @@ static int udf_load_sparable_map(struct super_block *sb,
10763 (int)spm->numSparingTables);
10764 return -EIO;
10765 }
10766 + if (le32_to_cpu(spm->sizeSparingTable) > sb->s_blocksize) {
10767 + udf_err(sb, "error loading logical volume descriptor: "
10768 + "Too big sparing table size (%u)\n",
10769 + le32_to_cpu(spm->sizeSparingTable));
10770 + return -EIO;
10771 + }
10772
10773 for (i = 0; i < spm->numSparingTables; i++) {
10774 loc = le32_to_cpu(spm->locSparingTable[i]);
10775 diff --git a/fs/xfs/libxfs/xfs_rtbitmap.c b/fs/xfs/libxfs/xfs_rtbitmap.c
10776 index 8ea1efc97b41d..42085e70c01ac 100644
10777 --- a/fs/xfs/libxfs/xfs_rtbitmap.c
10778 +++ b/fs/xfs/libxfs/xfs_rtbitmap.c
10779 @@ -1018,7 +1018,6 @@ xfs_rtalloc_query_range(
10780 struct xfs_mount *mp = tp->t_mountp;
10781 xfs_rtblock_t rtstart;
10782 xfs_rtblock_t rtend;
10783 - xfs_rtblock_t rem;
10784 int is_free;
10785 int error = 0;
10786
10787 @@ -1027,13 +1026,12 @@ xfs_rtalloc_query_range(
10788 if (low_rec->ar_startext >= mp->m_sb.sb_rextents ||
10789 low_rec->ar_startext == high_rec->ar_startext)
10790 return 0;
10791 - if (high_rec->ar_startext > mp->m_sb.sb_rextents)
10792 - high_rec->ar_startext = mp->m_sb.sb_rextents;
10793 + high_rec->ar_startext = min(high_rec->ar_startext,
10794 + mp->m_sb.sb_rextents - 1);
10795
10796 /* Iterate the bitmap, looking for discrepancies. */
10797 rtstart = low_rec->ar_startext;
10798 - rem = high_rec->ar_startext - rtstart;
10799 - while (rem) {
10800 + while (rtstart <= high_rec->ar_startext) {
10801 /* Is the first block free? */
10802 error = xfs_rtcheck_range(mp, tp, rtstart, 1, 1, &rtend,
10803 &is_free);
10804 @@ -1042,7 +1040,7 @@ xfs_rtalloc_query_range(
10805
10806 /* How long does the extent go for? */
10807 error = xfs_rtfind_forw(mp, tp, rtstart,
10808 - high_rec->ar_startext - 1, &rtend);
10809 + high_rec->ar_startext, &rtend);
10810 if (error)
10811 break;
10812
10813 @@ -1055,7 +1053,6 @@ xfs_rtalloc_query_range(
10814 break;
10815 }
10816
10817 - rem -= rtend - rtstart + 1;
10818 rtstart = rtend + 1;
10819 }
10820
10821 diff --git a/fs/xfs/xfs_fsmap.c b/fs/xfs/xfs_fsmap.c
10822 index c13754e119be1..01c0933a4d10d 100644
10823 --- a/fs/xfs/xfs_fsmap.c
10824 +++ b/fs/xfs/xfs_fsmap.c
10825 @@ -26,7 +26,7 @@
10826 #include "xfs_rtalloc.h"
10827
10828 /* Convert an xfs_fsmap to an fsmap. */
10829 -void
10830 +static void
10831 xfs_fsmap_from_internal(
10832 struct fsmap *dest,
10833 struct xfs_fsmap *src)
10834 @@ -154,8 +154,7 @@ xfs_fsmap_owner_from_rmap(
10835 /* getfsmap query state */
10836 struct xfs_getfsmap_info {
10837 struct xfs_fsmap_head *head;
10838 - xfs_fsmap_format_t formatter; /* formatting fn */
10839 - void *format_arg; /* format buffer */
10840 + struct fsmap *fsmap_recs; /* mapping records */
10841 struct xfs_buf *agf_bp; /* AGF, for refcount queries */
10842 xfs_daddr_t next_daddr; /* next daddr we expect */
10843 u64 missing_owner; /* owner of holes */
10844 @@ -223,6 +222,20 @@ xfs_getfsmap_is_shared(
10845 return 0;
10846 }
10847
10848 +static inline void
10849 +xfs_getfsmap_format(
10850 + struct xfs_mount *mp,
10851 + struct xfs_fsmap *xfm,
10852 + struct xfs_getfsmap_info *info)
10853 +{
10854 + struct fsmap *rec;
10855 +
10856 + trace_xfs_getfsmap_mapping(mp, xfm);
10857 +
10858 + rec = &info->fsmap_recs[info->head->fmh_entries++];
10859 + xfs_fsmap_from_internal(rec, xfm);
10860 +}
10861 +
10862 /*
10863 * Format a reverse mapping for getfsmap, having translated rm_startblock
10864 * into the appropriate daddr units.
10865 @@ -255,6 +268,9 @@ xfs_getfsmap_helper(
10866
10867 /* Are we just counting mappings? */
10868 if (info->head->fmh_count == 0) {
10869 + if (info->head->fmh_entries == UINT_MAX)
10870 + return -ECANCELED;
10871 +
10872 if (rec_daddr > info->next_daddr)
10873 info->head->fmh_entries++;
10874
10875 @@ -284,10 +300,7 @@ xfs_getfsmap_helper(
10876 fmr.fmr_offset = 0;
10877 fmr.fmr_length = rec_daddr - info->next_daddr;
10878 fmr.fmr_flags = FMR_OF_SPECIAL_OWNER;
10879 - error = info->formatter(&fmr, info->format_arg);
10880 - if (error)
10881 - return error;
10882 - info->head->fmh_entries++;
10883 + xfs_getfsmap_format(mp, &fmr, info);
10884 }
10885
10886 if (info->last)
10887 @@ -319,11 +332,8 @@ xfs_getfsmap_helper(
10888 if (shared)
10889 fmr.fmr_flags |= FMR_OF_SHARED;
10890 }
10891 - error = info->formatter(&fmr, info->format_arg);
10892 - if (error)
10893 - return error;
10894 - info->head->fmh_entries++;
10895
10896 + xfs_getfsmap_format(mp, &fmr, info);
10897 out:
10898 rec_daddr += XFS_FSB_TO_BB(mp, rec->rm_blockcount);
10899 if (info->next_daddr < rec_daddr)
10900 @@ -791,11 +801,11 @@ xfs_getfsmap_check_keys(
10901 #endif /* CONFIG_XFS_RT */
10902
10903 /*
10904 - * Get filesystem's extents as described in head, and format for
10905 - * output. Calls formatter to fill the user's buffer until all
10906 - * extents are mapped, until the passed-in head->fmh_count slots have
10907 - * been filled, or until the formatter short-circuits the loop, if it
10908 - * is tracking filled-in extents on its own.
10909 + * Get filesystem's extents as described in head, and format for output. Fills
10910 + * in the supplied records array until there are no more reverse mappings to
10911 + * return or head.fmh_entries == head.fmh_count. In the second case, this
10912 + * function returns -ECANCELED to indicate that more records would have been
10913 + * returned.
10914 *
10915 * Key to Confusion
10916 * ----------------
10917 @@ -815,8 +825,7 @@ int
10918 xfs_getfsmap(
10919 struct xfs_mount *mp,
10920 struct xfs_fsmap_head *head,
10921 - xfs_fsmap_format_t formatter,
10922 - void *arg)
10923 + struct fsmap *fsmap_recs)
10924 {
10925 struct xfs_trans *tp = NULL;
10926 struct xfs_fsmap dkeys[2]; /* per-dev keys */
10927 @@ -891,8 +900,7 @@ xfs_getfsmap(
10928
10929 info.next_daddr = head->fmh_keys[0].fmr_physical +
10930 head->fmh_keys[0].fmr_length;
10931 - info.formatter = formatter;
10932 - info.format_arg = arg;
10933 + info.fsmap_recs = fsmap_recs;
10934 info.head = head;
10935
10936 /*
10937 diff --git a/fs/xfs/xfs_fsmap.h b/fs/xfs/xfs_fsmap.h
10938 index c6c57739b8626..a0775788e7b13 100644
10939 --- a/fs/xfs/xfs_fsmap.h
10940 +++ b/fs/xfs/xfs_fsmap.h
10941 @@ -27,13 +27,9 @@ struct xfs_fsmap_head {
10942 struct xfs_fsmap fmh_keys[2]; /* low and high keys */
10943 };
10944
10945 -void xfs_fsmap_from_internal(struct fsmap *dest, struct xfs_fsmap *src);
10946 void xfs_fsmap_to_internal(struct xfs_fsmap *dest, struct fsmap *src);
10947
10948 -/* fsmap to userspace formatter - copy to user & advance pointer */
10949 -typedef int (*xfs_fsmap_format_t)(struct xfs_fsmap *, void *);
10950 -
10951 int xfs_getfsmap(struct xfs_mount *mp, struct xfs_fsmap_head *head,
10952 - xfs_fsmap_format_t formatter, void *arg);
10953 + struct fsmap *out_recs);
10954
10955 #endif /* __XFS_FSMAP_H__ */
10956 diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
10957 index 60c4526312771..bf0435dbec436 100644
10958 --- a/fs/xfs/xfs_ioctl.c
10959 +++ b/fs/xfs/xfs_ioctl.c
10960 @@ -1832,39 +1832,17 @@ out_free_buf:
10961 return error;
10962 }
10963
10964 -struct getfsmap_info {
10965 - struct xfs_mount *mp;
10966 - struct fsmap_head __user *data;
10967 - unsigned int idx;
10968 - __u32 last_flags;
10969 -};
10970 -
10971 -STATIC int
10972 -xfs_getfsmap_format(struct xfs_fsmap *xfm, void *priv)
10973 -{
10974 - struct getfsmap_info *info = priv;
10975 - struct fsmap fm;
10976 -
10977 - trace_xfs_getfsmap_mapping(info->mp, xfm);
10978 -
10979 - info->last_flags = xfm->fmr_flags;
10980 - xfs_fsmap_from_internal(&fm, xfm);
10981 - if (copy_to_user(&info->data->fmh_recs[info->idx++], &fm,
10982 - sizeof(struct fsmap)))
10983 - return -EFAULT;
10984 -
10985 - return 0;
10986 -}
10987 -
10988 STATIC int
10989 xfs_ioc_getfsmap(
10990 struct xfs_inode *ip,
10991 struct fsmap_head __user *arg)
10992 {
10993 - struct getfsmap_info info = { NULL };
10994 struct xfs_fsmap_head xhead = {0};
10995 struct fsmap_head head;
10996 - bool aborted = false;
10997 + struct fsmap *recs;
10998 + unsigned int count;
10999 + __u32 last_flags = 0;
11000 + bool done = false;
11001 int error;
11002
11003 if (copy_from_user(&head, arg, sizeof(struct fsmap_head)))
11004 @@ -1876,38 +1854,112 @@ xfs_ioc_getfsmap(
11005 sizeof(head.fmh_keys[1].fmr_reserved)))
11006 return -EINVAL;
11007
11008 + /*
11009 + * Use an internal memory buffer so that we don't have to copy fsmap
11010 + * data to userspace while holding locks. Start by trying to allocate
11011 + * up to 128k for the buffer, but fall back to a single page if needed.
11012 + */
11013 + count = min_t(unsigned int, head.fmh_count,
11014 + 131072 / sizeof(struct fsmap));
11015 + recs = kvzalloc(count * sizeof(struct fsmap), GFP_KERNEL);
11016 + if (!recs) {
11017 + count = min_t(unsigned int, head.fmh_count,
11018 + PAGE_SIZE / sizeof(struct fsmap));
11019 + recs = kvzalloc(count * sizeof(struct fsmap), GFP_KERNEL);
11020 + if (!recs)
11021 + return -ENOMEM;
11022 + }
11023 +
11024 xhead.fmh_iflags = head.fmh_iflags;
11025 - xhead.fmh_count = head.fmh_count;
11026 xfs_fsmap_to_internal(&xhead.fmh_keys[0], &head.fmh_keys[0]);
11027 xfs_fsmap_to_internal(&xhead.fmh_keys[1], &head.fmh_keys[1]);
11028
11029 trace_xfs_getfsmap_low_key(ip->i_mount, &xhead.fmh_keys[0]);
11030 trace_xfs_getfsmap_high_key(ip->i_mount, &xhead.fmh_keys[1]);
11031
11032 - info.mp = ip->i_mount;
11033 - info.data = arg;
11034 - error = xfs_getfsmap(ip->i_mount, &xhead, xfs_getfsmap_format, &info);
11035 - if (error == -ECANCELED) {
11036 - error = 0;
11037 - aborted = true;
11038 - } else if (error)
11039 - return error;
11040 + head.fmh_entries = 0;
11041 + do {
11042 + struct fsmap __user *user_recs;
11043 + struct fsmap *last_rec;
11044 +
11045 + user_recs = &arg->fmh_recs[head.fmh_entries];
11046 + xhead.fmh_entries = 0;
11047 + xhead.fmh_count = min_t(unsigned int, count,
11048 + head.fmh_count - head.fmh_entries);
11049 +
11050 + /* Run query, record how many entries we got. */
11051 + error = xfs_getfsmap(ip->i_mount, &xhead, recs);
11052 + switch (error) {
11053 + case 0:
11054 + /*
11055 + * There are no more records in the result set. Copy
11056 + * whatever we got to userspace and break out.
11057 + */
11058 + done = true;
11059 + break;
11060 + case -ECANCELED:
11061 + /*
11062 + * The internal memory buffer is full. Copy whatever
11063 + * records we got to userspace and go again if we have
11064 + * not yet filled the userspace buffer.
11065 + */
11066 + error = 0;
11067 + break;
11068 + default:
11069 + goto out_free;
11070 + }
11071 + head.fmh_entries += xhead.fmh_entries;
11072 + head.fmh_oflags = xhead.fmh_oflags;
11073
11074 - /* If we didn't abort, set the "last" flag in the last fmx */
11075 - if (!aborted && info.idx) {
11076 - info.last_flags |= FMR_OF_LAST;
11077 - if (copy_to_user(&info.data->fmh_recs[info.idx - 1].fmr_flags,
11078 - &info.last_flags, sizeof(info.last_flags)))
11079 - return -EFAULT;
11080 + /*
11081 + * If the caller wanted a record count or there aren't any
11082 + * new records to return, we're done.
11083 + */
11084 + if (head.fmh_count == 0 || xhead.fmh_entries == 0)
11085 + break;
11086 +
11087 + /* Copy all the records we got out to userspace. */
11088 + if (copy_to_user(user_recs, recs,
11089 + xhead.fmh_entries * sizeof(struct fsmap))) {
11090 + error = -EFAULT;
11091 + goto out_free;
11092 + }
11093 +
11094 + /* Remember the last record flags we copied to userspace. */
11095 + last_rec = &recs[xhead.fmh_entries - 1];
11096 + last_flags = last_rec->fmr_flags;
11097 +
11098 + /* Set up the low key for the next iteration. */
11099 + xfs_fsmap_to_internal(&xhead.fmh_keys[0], last_rec);
11100 + trace_xfs_getfsmap_low_key(ip->i_mount, &xhead.fmh_keys[0]);
11101 + } while (!done && head.fmh_entries < head.fmh_count);
11102 +
11103 + /*
11104 + * If there are no more records in the query result set and we're not
11105 + * in counting mode, mark the last record returned with the LAST flag.
11106 + */
11107 + if (done && head.fmh_count > 0 && head.fmh_entries > 0) {
11108 + struct fsmap __user *user_rec;
11109 +
11110 + last_flags |= FMR_OF_LAST;
11111 + user_rec = &arg->fmh_recs[head.fmh_entries - 1];
11112 +
11113 + if (copy_to_user(&user_rec->fmr_flags, &last_flags,
11114 + sizeof(last_flags))) {
11115 + error = -EFAULT;
11116 + goto out_free;
11117 + }
11118 }
11119
11120 /* copy back header */
11121 - head.fmh_entries = xhead.fmh_entries;
11122 - head.fmh_oflags = xhead.fmh_oflags;
11123 - if (copy_to_user(arg, &head, sizeof(struct fsmap_head)))
11124 - return -EFAULT;
11125 + if (copy_to_user(arg, &head, sizeof(struct fsmap_head))) {
11126 + error = -EFAULT;
11127 + goto out_free;
11128 + }
11129
11130 - return 0;
11131 +out_free:
11132 + kmem_free(recs);
11133 + return error;
11134 }
11135
11136 STATIC int
11137 diff --git a/fs/xfs/xfs_rtalloc.c b/fs/xfs/xfs_rtalloc.c
11138 index 4a48a8c75b4f7..b583669370825 100644
11139 --- a/fs/xfs/xfs_rtalloc.c
11140 +++ b/fs/xfs/xfs_rtalloc.c
11141 @@ -247,6 +247,9 @@ xfs_rtallocate_extent_block(
11142 end = XFS_BLOCKTOBIT(mp, bbno + 1) - 1;
11143 i <= end;
11144 i++) {
11145 + /* Make sure we don't scan off the end of the rt volume. */
11146 + maxlen = min(mp->m_sb.sb_rextents, i + maxlen) - i;
11147 +
11148 /*
11149 * See if there's a free extent of maxlen starting at i.
11150 * If it's not so then next will contain the first non-free.
11151 @@ -442,6 +445,14 @@ xfs_rtallocate_extent_near(
11152 */
11153 if (bno >= mp->m_sb.sb_rextents)
11154 bno = mp->m_sb.sb_rextents - 1;
11155 +
11156 + /* Make sure we don't run off the end of the rt volume. */
11157 + maxlen = min(mp->m_sb.sb_rextents, bno + maxlen) - bno;
11158 + if (maxlen < minlen) {
11159 + *rtblock = NULLRTBLOCK;
11160 + return 0;
11161 + }
11162 +
11163 /*
11164 * Try the exact allocation first.
11165 */
11166 diff --git a/include/linux/bpf_verifier.h b/include/linux/bpf_verifier.h
11167 index 26a6d58ca78cc..81c7ea83e8079 100644
11168 --- a/include/linux/bpf_verifier.h
11169 +++ b/include/linux/bpf_verifier.h
11170 @@ -342,6 +342,7 @@ struct bpf_subprog_info {
11171 u32 start; /* insn idx of function entry point */
11172 u32 linfo_idx; /* The idx to the main_prog->aux->linfo */
11173 u16 stack_depth; /* max. stack depth used by this function */
11174 + bool has_tail_call;
11175 };
11176
11177 /* single container for all structs
11178 diff --git a/include/linux/oom.h b/include/linux/oom.h
11179 index c696c265f0193..b9df34326772c 100644
11180 --- a/include/linux/oom.h
11181 +++ b/include/linux/oom.h
11182 @@ -55,6 +55,7 @@ struct oom_control {
11183 };
11184
11185 extern struct mutex oom_lock;
11186 +extern struct mutex oom_adj_mutex;
11187
11188 static inline void set_current_oom_origin(void)
11189 {
11190 diff --git a/include/linux/overflow.h b/include/linux/overflow.h
11191 index 659045046468f..50c93ca0c3d6f 100644
11192 --- a/include/linux/overflow.h
11193 +++ b/include/linux/overflow.h
11194 @@ -3,6 +3,7 @@
11195 #define __LINUX_OVERFLOW_H
11196
11197 #include <linux/compiler.h>
11198 +#include <linux/limits.h>
11199
11200 /*
11201 * In the fallback code below, we need to compute the minimum and
11202 diff --git a/include/linux/page_owner.h b/include/linux/page_owner.h
11203 index 8679ccd722e89..3468794f83d23 100644
11204 --- a/include/linux/page_owner.h
11205 +++ b/include/linux/page_owner.h
11206 @@ -11,7 +11,7 @@ extern struct page_ext_operations page_owner_ops;
11207 extern void __reset_page_owner(struct page *page, unsigned int order);
11208 extern void __set_page_owner(struct page *page,
11209 unsigned int order, gfp_t gfp_mask);
11210 -extern void __split_page_owner(struct page *page, unsigned int order);
11211 +extern void __split_page_owner(struct page *page, unsigned int nr);
11212 extern void __copy_page_owner(struct page *oldpage, struct page *newpage);
11213 extern void __set_page_owner_migrate_reason(struct page *page, int reason);
11214 extern void __dump_page_owner(struct page *page);
11215 @@ -31,10 +31,10 @@ static inline void set_page_owner(struct page *page,
11216 __set_page_owner(page, order, gfp_mask);
11217 }
11218
11219 -static inline void split_page_owner(struct page *page, unsigned int order)
11220 +static inline void split_page_owner(struct page *page, unsigned int nr)
11221 {
11222 if (static_branch_unlikely(&page_owner_inited))
11223 - __split_page_owner(page, order);
11224 + __split_page_owner(page, nr);
11225 }
11226 static inline void copy_page_owner(struct page *oldpage, struct page *newpage)
11227 {
11228 diff --git a/include/linux/pci.h b/include/linux/pci.h
11229 index e92bd9b32f369..6a6a819c5b49b 100644
11230 --- a/include/linux/pci.h
11231 +++ b/include/linux/pci.h
11232 @@ -423,6 +423,7 @@ struct pci_dev {
11233 unsigned int is_probed:1; /* Device probing in progress */
11234 unsigned int link_active_reporting:1;/* Device capable of reporting link active */
11235 unsigned int no_vf_scan:1; /* Don't scan for VFs after IOV enablement */
11236 + unsigned int no_command_memory:1; /* No PCI_COMMAND_MEMORY */
11237 pci_dev_flags_t dev_flags;
11238 atomic_t enable_cnt; /* pci_enable_device has been called */
11239
11240 diff --git a/include/linux/platform_data/dma-dw.h b/include/linux/platform_data/dma-dw.h
11241 index f3eaf9ec00a1b..70078be166e3c 100644
11242 --- a/include/linux/platform_data/dma-dw.h
11243 +++ b/include/linux/platform_data/dma-dw.h
11244 @@ -21,6 +21,7 @@
11245 * @dst_id: dst request line
11246 * @m_master: memory master for transfers on allocated channel
11247 * @p_master: peripheral master for transfers on allocated channel
11248 + * @channels: mask of the channels permitted for allocation (zero value means any)
11249 * @hs_polarity:set active low polarity of handshake interface
11250 */
11251 struct dw_dma_slave {
11252 @@ -29,6 +30,7 @@ struct dw_dma_slave {
11253 u8 dst_id;
11254 u8 m_master;
11255 u8 p_master;
11256 + u8 channels;
11257 bool hs_polarity;
11258 };
11259
11260 diff --git a/include/linux/sched/coredump.h b/include/linux/sched/coredump.h
11261 index ecdc6542070f1..dfd82eab29025 100644
11262 --- a/include/linux/sched/coredump.h
11263 +++ b/include/linux/sched/coredump.h
11264 @@ -72,6 +72,7 @@ static inline int get_dumpable(struct mm_struct *mm)
11265 #define MMF_DISABLE_THP 24 /* disable THP for all VMAs */
11266 #define MMF_OOM_VICTIM 25 /* mm is the oom victim */
11267 #define MMF_OOM_REAP_QUEUED 26 /* mm was queued for oom_reaper */
11268 +#define MMF_MULTIPROCESS 27 /* mm is shared between processes */
11269 #define MMF_DISABLE_THP_MASK (1 << MMF_DISABLE_THP)
11270
11271 #define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK |\
11272 diff --git a/include/net/ip.h b/include/net/ip.h
11273 index 4b15cc1c224c6..0278d63c15274 100644
11274 --- a/include/net/ip.h
11275 +++ b/include/net/ip.h
11276 @@ -439,12 +439,18 @@ static inline unsigned int ip_dst_mtu_maybe_forward(const struct dst_entry *dst,
11277 bool forwarding)
11278 {
11279 struct net *net = dev_net(dst->dev);
11280 + unsigned int mtu;
11281
11282 if (net->ipv4.sysctl_ip_fwd_use_pmtu ||
11283 ip_mtu_locked(dst) ||
11284 !forwarding)
11285 return dst_mtu(dst);
11286
11287 + /* 'forwarding = true' case should always honour route mtu */
11288 + mtu = dst_metric_raw(dst, RTAX_MTU);
11289 + if (mtu)
11290 + return mtu;
11291 +
11292 return min(READ_ONCE(dst->dev->mtu), IP_MAX_MTU);
11293 }
11294
11295 diff --git a/include/net/netfilter/nf_log.h b/include/net/netfilter/nf_log.h
11296 index 0d3920896d502..716db4a0fed89 100644
11297 --- a/include/net/netfilter/nf_log.h
11298 +++ b/include/net/netfilter/nf_log.h
11299 @@ -108,6 +108,7 @@ int nf_log_dump_tcp_header(struct nf_log_buf *m, const struct sk_buff *skb,
11300 unsigned int logflags);
11301 void nf_log_dump_sk_uid_gid(struct net *net, struct nf_log_buf *m,
11302 struct sock *sk);
11303 +void nf_log_dump_vlan(struct nf_log_buf *m, const struct sk_buff *skb);
11304 void nf_log_dump_packet_common(struct nf_log_buf *m, u_int8_t pf,
11305 unsigned int hooknum, const struct sk_buff *skb,
11306 const struct net_device *in,
11307 diff --git a/include/rdma/ib_umem.h b/include/rdma/ib_umem.h
11308 index a91b2af64ec47..8e94279af47df 100644
11309 --- a/include/rdma/ib_umem.h
11310 +++ b/include/rdma/ib_umem.h
11311 @@ -95,10 +95,11 @@ static inline int ib_umem_copy_from(void *dst, struct ib_umem *umem, size_t offs
11312 size_t length) {
11313 return -EINVAL;
11314 }
11315 -static inline int ib_umem_find_best_pgsz(struct ib_umem *umem,
11316 - unsigned long pgsz_bitmap,
11317 - unsigned long virt) {
11318 - return -EINVAL;
11319 +static inline unsigned long ib_umem_find_best_pgsz(struct ib_umem *umem,
11320 + unsigned long pgsz_bitmap,
11321 + unsigned long virt)
11322 +{
11323 + return 0;
11324 }
11325
11326 #endif /* CONFIG_INFINIBAND_USER_MEM */
11327 diff --git a/include/scsi/scsi_common.h b/include/scsi/scsi_common.h
11328 index 731ac09ed2313..5b567b43e1b16 100644
11329 --- a/include/scsi/scsi_common.h
11330 +++ b/include/scsi/scsi_common.h
11331 @@ -25,6 +25,13 @@ scsi_command_size(const unsigned char *cmnd)
11332 scsi_varlen_cdb_length(cmnd) : COMMAND_SIZE(cmnd[0]);
11333 }
11334
11335 +static inline unsigned char
11336 +scsi_command_control(const unsigned char *cmnd)
11337 +{
11338 + return (cmnd[0] == VARIABLE_LENGTH_CMD) ?
11339 + cmnd[1] : cmnd[COMMAND_SIZE(cmnd[0]) - 1];
11340 +}
11341 +
11342 /* Returns a human-readable name for the device */
11343 extern const char *scsi_device_type(unsigned type);
11344
11345 diff --git a/include/sound/hda_codec.h b/include/sound/hda_codec.h
11346 index 65c056ce91128..8341e2c489824 100644
11347 --- a/include/sound/hda_codec.h
11348 +++ b/include/sound/hda_codec.h
11349 @@ -254,6 +254,7 @@ struct hda_codec {
11350 unsigned int force_pin_prefix:1; /* Add location prefix */
11351 unsigned int link_down_at_suspend:1; /* link down at runtime suspend */
11352 unsigned int relaxed_resume:1; /* don't resume forcibly for jack */
11353 + unsigned int forced_resume:1; /* forced resume for jack */
11354
11355 #ifdef CONFIG_PM
11356 unsigned long power_on_acct;
11357 diff --git a/include/trace/events/target.h b/include/trace/events/target.h
11358 index 914a872dd3435..e87a3716b0ac9 100644
11359 --- a/include/trace/events/target.h
11360 +++ b/include/trace/events/target.h
11361 @@ -140,6 +140,7 @@ TRACE_EVENT(target_sequencer_start,
11362 __field( unsigned int, opcode )
11363 __field( unsigned int, data_length )
11364 __field( unsigned int, task_attribute )
11365 + __field( unsigned char, control )
11366 __array( unsigned char, cdb, TCM_MAX_COMMAND_SIZE )
11367 __string( initiator, cmd->se_sess->se_node_acl->initiatorname )
11368 ),
11369 @@ -149,6 +150,7 @@ TRACE_EVENT(target_sequencer_start,
11370 __entry->opcode = cmd->t_task_cdb[0];
11371 __entry->data_length = cmd->data_length;
11372 __entry->task_attribute = cmd->sam_task_attr;
11373 + __entry->control = scsi_command_control(cmd->t_task_cdb);
11374 memcpy(__entry->cdb, cmd->t_task_cdb, TCM_MAX_COMMAND_SIZE);
11375 __assign_str(initiator, cmd->se_sess->se_node_acl->initiatorname);
11376 ),
11377 @@ -158,9 +160,7 @@ TRACE_EVENT(target_sequencer_start,
11378 show_opcode_name(__entry->opcode),
11379 __entry->data_length, __print_hex(__entry->cdb, 16),
11380 show_task_attribute_name(__entry->task_attribute),
11381 - scsi_command_size(__entry->cdb) <= 16 ?
11382 - __entry->cdb[scsi_command_size(__entry->cdb) - 1] :
11383 - __entry->cdb[1]
11384 + __entry->control
11385 )
11386 );
11387
11388 @@ -175,6 +175,7 @@ TRACE_EVENT(target_cmd_complete,
11389 __field( unsigned int, opcode )
11390 __field( unsigned int, data_length )
11391 __field( unsigned int, task_attribute )
11392 + __field( unsigned char, control )
11393 __field( unsigned char, scsi_status )
11394 __field( unsigned char, sense_length )
11395 __array( unsigned char, cdb, TCM_MAX_COMMAND_SIZE )
11396 @@ -187,6 +188,7 @@ TRACE_EVENT(target_cmd_complete,
11397 __entry->opcode = cmd->t_task_cdb[0];
11398 __entry->data_length = cmd->data_length;
11399 __entry->task_attribute = cmd->sam_task_attr;
11400 + __entry->control = scsi_command_control(cmd->t_task_cdb);
11401 __entry->scsi_status = cmd->scsi_status;
11402 __entry->sense_length = cmd->scsi_status == SAM_STAT_CHECK_CONDITION ?
11403 min(18, ((u8 *) cmd->sense_buffer)[SPC_ADD_SENSE_LEN_OFFSET] + 8) : 0;
11404 @@ -203,9 +205,7 @@ TRACE_EVENT(target_cmd_complete,
11405 show_opcode_name(__entry->opcode),
11406 __entry->data_length, __print_hex(__entry->cdb, 16),
11407 show_task_attribute_name(__entry->task_attribute),
11408 - scsi_command_size(__entry->cdb) <= 16 ?
11409 - __entry->cdb[scsi_command_size(__entry->cdb) - 1] :
11410 - __entry->cdb[1]
11411 + __entry->control
11412 )
11413 );
11414
11415 diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
11416 index bb7b271397a66..ceccd980ffcfe 100644
11417 --- a/include/uapi/linux/perf_event.h
11418 +++ b/include/uapi/linux/perf_event.h
11419 @@ -1131,7 +1131,7 @@ union perf_mem_data_src {
11420
11421 #define PERF_MEM_SNOOPX_FWD 0x01 /* forward */
11422 /* 1 free */
11423 -#define PERF_MEM_SNOOPX_SHIFT 37
11424 +#define PERF_MEM_SNOOPX_SHIFT 38
11425
11426 /* locked instruction */
11427 #define PERF_MEM_LOCK_NA 0x01 /* not available */
11428 diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
11429 index ae27dd77a73cb..507474f79195f 100644
11430 --- a/kernel/bpf/verifier.c
11431 +++ b/kernel/bpf/verifier.c
11432 @@ -1160,6 +1160,10 @@ static int check_subprogs(struct bpf_verifier_env *env)
11433 for (i = 0; i < insn_cnt; i++) {
11434 u8 code = insn[i].code;
11435
11436 + if (code == (BPF_JMP | BPF_CALL) &&
11437 + insn[i].imm == BPF_FUNC_tail_call &&
11438 + insn[i].src_reg != BPF_PSEUDO_CALL)
11439 + subprog[cur_subprog].has_tail_call = true;
11440 if (BPF_CLASS(code) != BPF_JMP && BPF_CLASS(code) != BPF_JMP32)
11441 goto next;
11442 if (BPF_OP(code) == BPF_EXIT || BPF_OP(code) == BPF_CALL)
11443 @@ -2612,6 +2616,31 @@ static int check_max_stack_depth(struct bpf_verifier_env *env)
11444 int ret_prog[MAX_CALL_FRAMES];
11445
11446 process_func:
11447 + /* protect against potential stack overflow that might happen when
11448 + * bpf2bpf calls get combined with tailcalls. Limit the caller's stack
11449 + * depth for such case down to 256 so that the worst case scenario
11450 + * would result in 8k stack size (32 which is tailcall limit * 256 =
11451 + * 8k).
11452 + *
11453 + * To get the idea what might happen, see an example:
11454 + * func1 -> sub rsp, 128
11455 + * subfunc1 -> sub rsp, 256
11456 + * tailcall1 -> add rsp, 256
11457 + * func2 -> sub rsp, 192 (total stack size = 128 + 192 = 320)
11458 + * subfunc2 -> sub rsp, 64
11459 + * subfunc22 -> sub rsp, 128
11460 + * tailcall2 -> add rsp, 128
11461 + * func3 -> sub rsp, 32 (total stack size 128 + 192 + 64 + 32 = 416)
11462 + *
11463 + * tailcall will unwind the current stack frame but it will not get rid
11464 + * of caller's stack as shown on the example above.
11465 + */
11466 + if (idx && subprog[idx].has_tail_call && depth >= 256) {
11467 + verbose(env,
11468 + "tail_calls are not allowed when call stack of previous frames is %d bytes. Too large\n",
11469 + depth);
11470 + return -EACCES;
11471 + }
11472 /* round up to 32-bytes, since this is granularity
11473 * of interpreter stack size
11474 */
11475 diff --git a/kernel/debug/kdb/kdb_io.c b/kernel/debug/kdb/kdb_io.c
11476 index 3a5184eb6977d..46821793637a1 100644
11477 --- a/kernel/debug/kdb/kdb_io.c
11478 +++ b/kernel/debug/kdb/kdb_io.c
11479 @@ -679,12 +679,16 @@ int vkdb_printf(enum kdb_msgsrc src, const char *fmt, va_list ap)
11480 size_avail = sizeof(kdb_buffer) - len;
11481 goto kdb_print_out;
11482 }
11483 - if (kdb_grepping_flag >= KDB_GREPPING_FLAG_SEARCH)
11484 + if (kdb_grepping_flag >= KDB_GREPPING_FLAG_SEARCH) {
11485 /*
11486 * This was a interactive search (using '/' at more
11487 - * prompt) and it has completed. Clear the flag.
11488 + * prompt) and it has completed. Replace the \0 with
11489 + * its original value to ensure multi-line strings
11490 + * are handled properly, and return to normal mode.
11491 */
11492 + *cphold = replaced_byte;
11493 kdb_grepping_flag = 0;
11494 + }
11495 /*
11496 * at this point the string is a full line and
11497 * should be printed, up to the null.
11498 diff --git a/kernel/fork.c b/kernel/fork.c
11499 index 594272569a80f..e3d5963d8c6f5 100644
11500 --- a/kernel/fork.c
11501 +++ b/kernel/fork.c
11502 @@ -1750,6 +1750,25 @@ static __always_inline void delayed_free_task(struct task_struct *tsk)
11503 free_task(tsk);
11504 }
11505
11506 +static void copy_oom_score_adj(u64 clone_flags, struct task_struct *tsk)
11507 +{
11508 + /* Skip if kernel thread */
11509 + if (!tsk->mm)
11510 + return;
11511 +
11512 + /* Skip if spawning a thread or using vfork */
11513 + if ((clone_flags & (CLONE_VM | CLONE_THREAD | CLONE_VFORK)) != CLONE_VM)
11514 + return;
11515 +
11516 + /* We need to synchronize with __set_oom_adj */
11517 + mutex_lock(&oom_adj_mutex);
11518 + set_bit(MMF_MULTIPROCESS, &tsk->mm->flags);
11519 + /* Update the values in case they were changed after copy_signal */
11520 + tsk->signal->oom_score_adj = current->signal->oom_score_adj;
11521 + tsk->signal->oom_score_adj_min = current->signal->oom_score_adj_min;
11522 + mutex_unlock(&oom_adj_mutex);
11523 +}
11524 +
11525 /*
11526 * This creates a new process as a copy of the old one,
11527 * but does not actually start it yet.
11528 @@ -2222,6 +2241,8 @@ static __latent_entropy struct task_struct *copy_process(
11529 trace_task_newtask(p, clone_flags);
11530 uprobe_copy_process(p, clone_flags);
11531
11532 + copy_oom_score_adj(clone_flags, p);
11533 +
11534 return p;
11535
11536 bad_fork_cancel_cgroup:
11537 diff --git a/kernel/module.c b/kernel/module.c
11538 index 819c5d3b4c295..45513909b01d5 100644
11539 --- a/kernel/module.c
11540 +++ b/kernel/module.c
11541 @@ -88,8 +88,9 @@ EXPORT_SYMBOL_GPL(module_mutex);
11542 static LIST_HEAD(modules);
11543
11544 /* Work queue for freeing init sections in success case */
11545 -static struct work_struct init_free_wq;
11546 -static struct llist_head init_free_list;
11547 +static void do_free_init(struct work_struct *w);
11548 +static DECLARE_WORK(init_free_wq, do_free_init);
11549 +static LLIST_HEAD(init_free_list);
11550
11551 #ifdef CONFIG_MODULES_TREE_LOOKUP
11552
11553 @@ -3563,14 +3564,6 @@ static void do_free_init(struct work_struct *w)
11554 }
11555 }
11556
11557 -static int __init modules_wq_init(void)
11558 -{
11559 - INIT_WORK(&init_free_wq, do_free_init);
11560 - init_llist_head(&init_free_list);
11561 - return 0;
11562 -}
11563 -module_init(modules_wq_init);
11564 -
11565 /*
11566 * This is where the real work happens.
11567 *
11568 diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
11569 index b6c5895ced36b..69c4cd472def3 100644
11570 --- a/kernel/power/hibernate.c
11571 +++ b/kernel/power/hibernate.c
11572 @@ -839,17 +839,6 @@ static int software_resume(void)
11573
11574 /* Check if the device is there */
11575 swsusp_resume_device = name_to_dev_t(resume_file);
11576 -
11577 - /*
11578 - * name_to_dev_t is ineffective to verify parition if resume_file is in
11579 - * integer format. (e.g. major:minor)
11580 - */
11581 - if (isdigit(resume_file[0]) && resume_wait) {
11582 - int partno;
11583 - while (!get_gendisk(swsusp_resume_device, &partno))
11584 - msleep(10);
11585 - }
11586 -
11587 if (!swsusp_resume_device) {
11588 /*
11589 * Some device discovery might still be in progress; we need
11590 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
11591 index 79ce22de44095..4511532b08b84 100644
11592 --- a/kernel/sched/core.c
11593 +++ b/kernel/sched/core.c
11594 @@ -36,7 +36,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(sched_overutilized_tp);
11595
11596 DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
11597
11598 -#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_JUMP_LABEL)
11599 +#ifdef CONFIG_SCHED_DEBUG
11600 /*
11601 * Debugging: various feature bits
11602 *
11603 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
11604 index b02a83ff40687..dddaf61378f62 100644
11605 --- a/kernel/sched/fair.c
11606 +++ b/kernel/sched/fair.c
11607 @@ -5936,7 +5936,7 @@ static int select_idle_core(struct task_struct *p, struct sched_domain *sd, int
11608 /*
11609 * Scan the local SMT mask for idle CPUs.
11610 */
11611 -static int select_idle_smt(struct task_struct *p, int target)
11612 +static int select_idle_smt(struct task_struct *p, struct sched_domain *sd, int target)
11613 {
11614 int cpu, si_cpu = -1;
11615
11616 @@ -5944,7 +5944,8 @@ static int select_idle_smt(struct task_struct *p, int target)
11617 return -1;
11618
11619 for_each_cpu(cpu, cpu_smt_mask(target)) {
11620 - if (!cpumask_test_cpu(cpu, p->cpus_ptr))
11621 + if (!cpumask_test_cpu(cpu, p->cpus_ptr) ||
11622 + !cpumask_test_cpu(cpu, sched_domain_span(sd)))
11623 continue;
11624 if (available_idle_cpu(cpu))
11625 return cpu;
11626 @@ -5962,7 +5963,7 @@ static inline int select_idle_core(struct task_struct *p, struct sched_domain *s
11627 return -1;
11628 }
11629
11630 -static inline int select_idle_smt(struct task_struct *p, int target)
11631 +static inline int select_idle_smt(struct task_struct *p, struct sched_domain *sd, int target)
11632 {
11633 return -1;
11634 }
11635 @@ -6072,7 +6073,7 @@ static int select_idle_sibling(struct task_struct *p, int prev, int target)
11636 if ((unsigned)i < nr_cpumask_bits)
11637 return i;
11638
11639 - i = select_idle_smt(p, target);
11640 + i = select_idle_smt(p, sd, target);
11641 if ((unsigned)i < nr_cpumask_bits)
11642 return i;
11643
11644 diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
11645 index 9f2a9e34a78d5..3e7590813844f 100644
11646 --- a/kernel/sched/sched.h
11647 +++ b/kernel/sched/sched.h
11648 @@ -1568,7 +1568,7 @@ enum {
11649
11650 #undef SCHED_FEAT
11651
11652 -#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_JUMP_LABEL)
11653 +#ifdef CONFIG_SCHED_DEBUG
11654
11655 /*
11656 * To support run-time toggling of sched features, all the translation units
11657 @@ -1576,6 +1576,7 @@ enum {
11658 */
11659 extern const_debug unsigned int sysctl_sched_features;
11660
11661 +#ifdef CONFIG_JUMP_LABEL
11662 #define SCHED_FEAT(name, enabled) \
11663 static __always_inline bool static_branch_##name(struct static_key *key) \
11664 { \
11665 @@ -1588,7 +1589,13 @@ static __always_inline bool static_branch_##name(struct static_key *key) \
11666 extern struct static_key sched_feat_keys[__SCHED_FEAT_NR];
11667 #define sched_feat(x) (static_branch_##x(&sched_feat_keys[__SCHED_FEAT_##x]))
11668
11669 -#else /* !(SCHED_DEBUG && CONFIG_JUMP_LABEL) */
11670 +#else /* !CONFIG_JUMP_LABEL */
11671 +
11672 +#define sched_feat(x) (sysctl_sched_features & (1UL << __SCHED_FEAT_##x))
11673 +
11674 +#endif /* CONFIG_JUMP_LABEL */
11675 +
11676 +#else /* !SCHED_DEBUG */
11677
11678 /*
11679 * Each translation unit has its own copy of sysctl_sched_features to allow
11680 @@ -1604,7 +1611,7 @@ static const_debug __maybe_unused unsigned int sysctl_sched_features =
11681
11682 #define sched_feat(x) !!(sysctl_sched_features & (1UL << __SCHED_FEAT_##x))
11683
11684 -#endif /* SCHED_DEBUG && CONFIG_JUMP_LABEL */
11685 +#endif /* SCHED_DEBUG */
11686
11687 extern struct static_key_false sched_numa_balancing;
11688 extern struct static_key_false sched_schedstats;
11689 diff --git a/lib/crc32.c b/lib/crc32.c
11690 index 4a20455d1f61e..bf60ef26a45c2 100644
11691 --- a/lib/crc32.c
11692 +++ b/lib/crc32.c
11693 @@ -331,7 +331,7 @@ static inline u32 __pure crc32_be_generic(u32 crc, unsigned char const *p,
11694 return crc;
11695 }
11696
11697 -#if CRC_LE_BITS == 1
11698 +#if CRC_BE_BITS == 1
11699 u32 __pure crc32_be(u32 crc, unsigned char const *p, size_t len)
11700 {
11701 return crc32_be_generic(crc, p, len, NULL, CRC32_POLY_BE);
11702 diff --git a/lib/idr.c b/lib/idr.c
11703 index c2cf2c52bbde5..4d2eef0259d2c 100644
11704 --- a/lib/idr.c
11705 +++ b/lib/idr.c
11706 @@ -470,6 +470,7 @@ alloc:
11707 goto retry;
11708 nospc:
11709 xas_unlock_irqrestore(&xas, flags);
11710 + kfree(alloc);
11711 return -ENOSPC;
11712 }
11713 EXPORT_SYMBOL(ida_alloc_range);
11714 diff --git a/mm/filemap.c b/mm/filemap.c
11715 index 51b2cb5aa5030..db542b4948838 100644
11716 --- a/mm/filemap.c
11717 +++ b/mm/filemap.c
11718 @@ -847,10 +847,10 @@ int replace_page_cache_page(struct page *old, struct page *new, gfp_t gfp_mask)
11719 }
11720 EXPORT_SYMBOL_GPL(replace_page_cache_page);
11721
11722 -static int __add_to_page_cache_locked(struct page *page,
11723 - struct address_space *mapping,
11724 - pgoff_t offset, gfp_t gfp_mask,
11725 - void **shadowp)
11726 +noinline int __add_to_page_cache_locked(struct page *page,
11727 + struct address_space *mapping,
11728 + pgoff_t offset, gfp_t gfp_mask,
11729 + void **shadowp)
11730 {
11731 XA_STATE(xas, &mapping->i_pages, offset);
11732 int huge = PageHuge(page);
11733 diff --git a/mm/huge_memory.c b/mm/huge_memory.c
11734 index 873de55d93fb2..9295d9d70681e 100644
11735 --- a/mm/huge_memory.c
11736 +++ b/mm/huge_memory.c
11737 @@ -2569,7 +2569,7 @@ static void __split_huge_page(struct page *page, struct list_head *list,
11738
11739 ClearPageCompound(head);
11740
11741 - split_page_owner(head, HPAGE_PMD_ORDER);
11742 + split_page_owner(head, HPAGE_PMD_NR);
11743
11744 /* See comment in __split_huge_page_tail() */
11745 if (PageAnon(head)) {
11746 diff --git a/mm/memcontrol.c b/mm/memcontrol.c
11747 index ca1632850fb76..edf98f8588eeb 100644
11748 --- a/mm/memcontrol.c
11749 +++ b/mm/memcontrol.c
11750 @@ -5398,7 +5398,7 @@ static struct page *mc_handle_swap_pte(struct vm_area_struct *vma,
11751 struct page *page = NULL;
11752 swp_entry_t ent = pte_to_swp_entry(ptent);
11753
11754 - if (!(mc.flags & MOVE_ANON) || non_swap_entry(ent))
11755 + if (!(mc.flags & MOVE_ANON))
11756 return NULL;
11757
11758 /*
11759 @@ -5417,6 +5417,9 @@ static struct page *mc_handle_swap_pte(struct vm_area_struct *vma,
11760 return page;
11761 }
11762
11763 + if (non_swap_entry(ent))
11764 + return NULL;
11765 +
11766 /*
11767 * Because lookup_swap_cache() updates some statistics counter,
11768 * we call find_get_page() with swapper_space directly.
11769 diff --git a/mm/oom_kill.c b/mm/oom_kill.c
11770 index d58c481b3df83..212e718743018 100644
11771 --- a/mm/oom_kill.c
11772 +++ b/mm/oom_kill.c
11773 @@ -63,6 +63,8 @@ int sysctl_oom_dump_tasks = 1;
11774 * and mark_oom_victim
11775 */
11776 DEFINE_MUTEX(oom_lock);
11777 +/* Serializes oom_score_adj and oom_score_adj_min updates */
11778 +DEFINE_MUTEX(oom_adj_mutex);
11779
11780 static inline bool is_memcg_oom(struct oom_control *oc)
11781 {
11782 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
11783 index aff0bb4629bdf..c20e664866c33 100644
11784 --- a/mm/page_alloc.c
11785 +++ b/mm/page_alloc.c
11786 @@ -3130,7 +3130,7 @@ void split_page(struct page *page, unsigned int order)
11787
11788 for (i = 1; i < (1 << order); i++)
11789 set_page_refcounted(page + i);
11790 - split_page_owner(page, order);
11791 + split_page_owner(page, 1 << order);
11792 }
11793 EXPORT_SYMBOL_GPL(split_page);
11794
11795 @@ -3385,7 +3385,7 @@ static inline bool __should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
11796
11797 #endif /* CONFIG_FAIL_PAGE_ALLOC */
11798
11799 -static noinline bool should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
11800 +noinline bool should_fail_alloc_page(gfp_t gfp_mask, unsigned int order)
11801 {
11802 return __should_fail_alloc_page(gfp_mask, order);
11803 }
11804 diff --git a/mm/page_owner.c b/mm/page_owner.c
11805 index 18ecde9f45b24..83d08943bcdee 100644
11806 --- a/mm/page_owner.c
11807 +++ b/mm/page_owner.c
11808 @@ -204,7 +204,7 @@ void __set_page_owner_migrate_reason(struct page *page, int reason)
11809 page_owner->last_migrate_reason = reason;
11810 }
11811
11812 -void __split_page_owner(struct page *page, unsigned int order)
11813 +void __split_page_owner(struct page *page, unsigned int nr)
11814 {
11815 int i;
11816 struct page_ext *page_ext = lookup_page_ext(page);
11817 @@ -213,7 +213,7 @@ void __split_page_owner(struct page *page, unsigned int order)
11818 if (unlikely(!page_ext))
11819 return;
11820
11821 - for (i = 0; i < (1 << order); i++) {
11822 + for (i = 0; i < nr; i++) {
11823 page_owner = get_page_owner(page_ext);
11824 page_owner->order = 0;
11825 page_ext = page_ext_next(page_ext);
11826 diff --git a/mm/swapfile.c b/mm/swapfile.c
11827 index cf62bdb7b3045..ff83ffe7a9108 100644
11828 --- a/mm/swapfile.c
11829 +++ b/mm/swapfile.c
11830 @@ -3284,7 +3284,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
11831 error = inode_drain_writes(inode);
11832 if (error) {
11833 inode->i_flags &= ~S_SWAPFILE;
11834 - goto bad_swap_unlock_inode;
11835 + goto free_swap_address_space;
11836 }
11837
11838 mutex_lock(&swapon_mutex);
11839 @@ -3309,6 +3309,8 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
11840
11841 error = 0;
11842 goto out;
11843 +free_swap_address_space:
11844 + exit_swap_address_space(p->type);
11845 bad_swap_unlock_inode:
11846 inode_unlock(inode);
11847 bad_swap:
11848 diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
11849 index 40e96a610e2b4..8648c5211ebe6 100644
11850 --- a/net/bluetooth/l2cap_sock.c
11851 +++ b/net/bluetooth/l2cap_sock.c
11852 @@ -1344,8 +1344,6 @@ static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
11853
11854 parent = bt_sk(sk)->parent;
11855
11856 - sock_set_flag(sk, SOCK_ZAPPED);
11857 -
11858 switch (chan->state) {
11859 case BT_OPEN:
11860 case BT_BOUND:
11861 @@ -1372,8 +1370,11 @@ static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
11862
11863 break;
11864 }
11865 -
11866 release_sock(sk);
11867 +
11868 + /* Only zap after cleanup to avoid use after free race */
11869 + sock_set_flag(sk, SOCK_ZAPPED);
11870 +
11871 }
11872
11873 static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state,
11874 diff --git a/net/bridge/netfilter/ebt_dnat.c b/net/bridge/netfilter/ebt_dnat.c
11875 index 12a4f4d936810..3fda71a8579d1 100644
11876 --- a/net/bridge/netfilter/ebt_dnat.c
11877 +++ b/net/bridge/netfilter/ebt_dnat.c
11878 @@ -21,7 +21,7 @@ ebt_dnat_tg(struct sk_buff *skb, const struct xt_action_param *par)
11879 {
11880 const struct ebt_nat_info *info = par->targinfo;
11881
11882 - if (skb_ensure_writable(skb, ETH_ALEN))
11883 + if (skb_ensure_writable(skb, 0))
11884 return EBT_DROP;
11885
11886 ether_addr_copy(eth_hdr(skb)->h_dest, info->mac);
11887 diff --git a/net/bridge/netfilter/ebt_redirect.c b/net/bridge/netfilter/ebt_redirect.c
11888 index 0cad62a4052b9..307790562b492 100644
11889 --- a/net/bridge/netfilter/ebt_redirect.c
11890 +++ b/net/bridge/netfilter/ebt_redirect.c
11891 @@ -21,7 +21,7 @@ ebt_redirect_tg(struct sk_buff *skb, const struct xt_action_param *par)
11892 {
11893 const struct ebt_redirect_info *info = par->targinfo;
11894
11895 - if (skb_ensure_writable(skb, ETH_ALEN))
11896 + if (skb_ensure_writable(skb, 0))
11897 return EBT_DROP;
11898
11899 if (xt_hooknum(par) != NF_BR_BROUTING)
11900 diff --git a/net/bridge/netfilter/ebt_snat.c b/net/bridge/netfilter/ebt_snat.c
11901 index 27443bf229a3b..7dfbcdfc30e5d 100644
11902 --- a/net/bridge/netfilter/ebt_snat.c
11903 +++ b/net/bridge/netfilter/ebt_snat.c
11904 @@ -22,7 +22,7 @@ ebt_snat_tg(struct sk_buff *skb, const struct xt_action_param *par)
11905 {
11906 const struct ebt_nat_info *info = par->targinfo;
11907
11908 - if (skb_ensure_writable(skb, ETH_ALEN * 2))
11909 + if (skb_ensure_writable(skb, 0))
11910 return EBT_DROP;
11911
11912 ether_addr_copy(eth_hdr(skb)->h_source, info->mac);
11913 diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
11914 index a8dd956b5e8e1..916fdf2464bc2 100644
11915 --- a/net/can/j1939/transport.c
11916 +++ b/net/can/j1939/transport.c
11917 @@ -580,6 +580,7 @@ sk_buff *j1939_tp_tx_dat_new(struct j1939_priv *priv,
11918 skb->dev = priv->ndev;
11919 can_skb_reserve(skb);
11920 can_skb_prv(skb)->ifindex = priv->ndev->ifindex;
11921 + can_skb_prv(skb)->skbcnt = 0;
11922 /* reserve CAN header */
11923 skb_reserve(skb, offsetof(struct can_frame, data));
11924
11925 @@ -1487,6 +1488,7 @@ j1939_session *j1939_session_fresh_new(struct j1939_priv *priv,
11926 skb->dev = priv->ndev;
11927 can_skb_reserve(skb);
11928 can_skb_prv(skb)->ifindex = priv->ndev->ifindex;
11929 + can_skb_prv(skb)->skbcnt = 0;
11930 skcb = j1939_skb_to_cb(skb);
11931 memcpy(skcb, rel_skcb, sizeof(*skcb));
11932
11933 diff --git a/net/core/filter.c b/net/core/filter.c
11934 index c441f9961e917..b040b7bf28582 100644
11935 --- a/net/core/filter.c
11936 +++ b/net/core/filter.c
11937 @@ -4270,7 +4270,8 @@ BPF_CALL_5(bpf_setsockopt, struct bpf_sock_ops_kern *, bpf_sock,
11938 cmpxchg(&sk->sk_pacing_status,
11939 SK_PACING_NONE,
11940 SK_PACING_NEEDED);
11941 - sk->sk_max_pacing_rate = (val == ~0U) ? ~0UL : val;
11942 + sk->sk_max_pacing_rate = (val == ~0U) ?
11943 + ~0UL : (unsigned int)val;
11944 sk->sk_pacing_rate = min(sk->sk_pacing_rate,
11945 sk->sk_max_pacing_rate);
11946 break;
11947 diff --git a/net/core/sock.c b/net/core/sock.c
11948 index 919f1a1739e90..1b765e62658f0 100644
11949 --- a/net/core/sock.c
11950 +++ b/net/core/sock.c
11951 @@ -928,8 +928,6 @@ set_rcvbuf:
11952 break;
11953
11954 case SO_TIMESTAMPING_NEW:
11955 - sock_set_flag(sk, SOCK_TSTAMP_NEW);
11956 - /* fall through */
11957 case SO_TIMESTAMPING_OLD:
11958 if (val & ~SOF_TIMESTAMPING_MASK) {
11959 ret = -EINVAL;
11960 @@ -958,16 +956,14 @@ set_rcvbuf:
11961 }
11962
11963 sk->sk_tsflags = val;
11964 + sock_valbool_flag(sk, SOCK_TSTAMP_NEW, optname == SO_TIMESTAMPING_NEW);
11965 +
11966 if (val & SOF_TIMESTAMPING_RX_SOFTWARE)
11967 sock_enable_timestamp(sk,
11968 SOCK_TIMESTAMPING_RX_SOFTWARE);
11969 - else {
11970 - if (optname == SO_TIMESTAMPING_NEW)
11971 - sock_reset_flag(sk, SOCK_TSTAMP_NEW);
11972 -
11973 + else
11974 sock_disable_timestamp(sk,
11975 (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE));
11976 - }
11977 break;
11978
11979 case SO_RCVLOWAT:
11980 @@ -1110,7 +1106,7 @@ set_rcvbuf:
11981
11982 case SO_MAX_PACING_RATE:
11983 {
11984 - unsigned long ulval = (val == ~0U) ? ~0UL : val;
11985 + unsigned long ulval = (val == ~0U) ? ~0UL : (unsigned int)val;
11986
11987 if (sizeof(ulval) != sizeof(val) &&
11988 optlen >= sizeof(ulval) &&
11989 diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
11990 index 73f46cb5e51da..d00533aea1f05 100644
11991 --- a/net/ipv4/icmp.c
11992 +++ b/net/ipv4/icmp.c
11993 @@ -239,7 +239,7 @@ static struct {
11994 /**
11995 * icmp_global_allow - Are we allowed to send one more ICMP message ?
11996 *
11997 - * Uses a token bucket to limit our ICMP messages to sysctl_icmp_msgs_per_sec.
11998 + * Uses a token bucket to limit our ICMP messages to ~sysctl_icmp_msgs_per_sec.
11999 * Returns false if we reached the limit and can not send another packet.
12000 * Note: called with BH disabled
12001 */
12002 @@ -267,7 +267,10 @@ bool icmp_global_allow(void)
12003 }
12004 credit = min_t(u32, icmp_global.credit + incr, sysctl_icmp_msgs_burst);
12005 if (credit) {
12006 - credit--;
12007 + /* We want to use a credit of one in average, but need to randomize
12008 + * it for security reasons.
12009 + */
12010 + credit = max_t(int, credit - prandom_u32_max(3), 0);
12011 rc = true;
12012 }
12013 WRITE_ONCE(icmp_global.credit, credit);
12014 diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
12015 index 85ba1453ba5ca..fedad3a3e61b8 100644
12016 --- a/net/ipv4/ip_gre.c
12017 +++ b/net/ipv4/ip_gre.c
12018 @@ -603,9 +603,7 @@ static netdev_tx_t ipgre_xmit(struct sk_buff *skb,
12019 }
12020
12021 if (dev->header_ops) {
12022 - /* Need space for new headers */
12023 - if (skb_cow_head(skb, dev->needed_headroom -
12024 - (tunnel->hlen + sizeof(struct iphdr))))
12025 + if (skb_cow_head(skb, 0))
12026 goto free_skb;
12027
12028 tnl_params = (const struct iphdr *)skb->data;
12029 @@ -723,7 +721,11 @@ static void ipgre_link_update(struct net_device *dev, bool set_mtu)
12030 len = tunnel->tun_hlen - len;
12031 tunnel->hlen = tunnel->hlen + len;
12032
12033 - dev->needed_headroom = dev->needed_headroom + len;
12034 + if (dev->header_ops)
12035 + dev->hard_header_len += len;
12036 + else
12037 + dev->needed_headroom += len;
12038 +
12039 if (set_mtu)
12040 dev->mtu = max_t(int, dev->mtu - len, 68);
12041
12042 @@ -926,6 +928,7 @@ static void __gre_tunnel_init(struct net_device *dev)
12043 tunnel->parms.iph.protocol = IPPROTO_GRE;
12044
12045 tunnel->hlen = tunnel->tun_hlen + tunnel->encap_hlen;
12046 + dev->needed_headroom = tunnel->hlen + sizeof(tunnel->parms.iph);
12047
12048 dev->features |= GRE_FEATURES;
12049 dev->hw_features |= GRE_FEATURES;
12050 @@ -969,10 +972,14 @@ static int ipgre_tunnel_init(struct net_device *dev)
12051 return -EINVAL;
12052 dev->flags = IFF_BROADCAST;
12053 dev->header_ops = &ipgre_header_ops;
12054 + dev->hard_header_len = tunnel->hlen + sizeof(*iph);
12055 + dev->needed_headroom = 0;
12056 }
12057 #endif
12058 } else if (!tunnel->collect_md) {
12059 dev->header_ops = &ipgre_header_ops;
12060 + dev->hard_header_len = tunnel->hlen + sizeof(*iph);
12061 + dev->needed_headroom = 0;
12062 }
12063
12064 return ip_tunnel_init(dev);
12065 diff --git a/net/ipv4/netfilter/nf_log_arp.c b/net/ipv4/netfilter/nf_log_arp.c
12066 index 7a83f881efa9e..136030ad2e546 100644
12067 --- a/net/ipv4/netfilter/nf_log_arp.c
12068 +++ b/net/ipv4/netfilter/nf_log_arp.c
12069 @@ -43,16 +43,31 @@ static void dump_arp_packet(struct nf_log_buf *m,
12070 const struct nf_loginfo *info,
12071 const struct sk_buff *skb, unsigned int nhoff)
12072 {
12073 - const struct arphdr *ah;
12074 - struct arphdr _arph;
12075 const struct arppayload *ap;
12076 struct arppayload _arpp;
12077 + const struct arphdr *ah;
12078 + unsigned int logflags;
12079 + struct arphdr _arph;
12080
12081 ah = skb_header_pointer(skb, 0, sizeof(_arph), &_arph);
12082 if (ah == NULL) {
12083 nf_log_buf_add(m, "TRUNCATED");
12084 return;
12085 }
12086 +
12087 + if (info->type == NF_LOG_TYPE_LOG)
12088 + logflags = info->u.log.logflags;
12089 + else
12090 + logflags = NF_LOG_DEFAULT_MASK;
12091 +
12092 + if (logflags & NF_LOG_MACDECODE) {
12093 + nf_log_buf_add(m, "MACSRC=%pM MACDST=%pM ",
12094 + eth_hdr(skb)->h_source, eth_hdr(skb)->h_dest);
12095 + nf_log_dump_vlan(m, skb);
12096 + nf_log_buf_add(m, "MACPROTO=%04x ",
12097 + ntohs(eth_hdr(skb)->h_proto));
12098 + }
12099 +
12100 nf_log_buf_add(m, "ARP HTYPE=%d PTYPE=0x%04x OPCODE=%d",
12101 ntohs(ah->ar_hrd), ntohs(ah->ar_pro), ntohs(ah->ar_op));
12102
12103 diff --git a/net/ipv4/netfilter/nf_log_ipv4.c b/net/ipv4/netfilter/nf_log_ipv4.c
12104 index 4b2d49cc9f1a1..cb288ffbcfde2 100644
12105 --- a/net/ipv4/netfilter/nf_log_ipv4.c
12106 +++ b/net/ipv4/netfilter/nf_log_ipv4.c
12107 @@ -284,8 +284,10 @@ static void dump_ipv4_mac_header(struct nf_log_buf *m,
12108
12109 switch (dev->type) {
12110 case ARPHRD_ETHER:
12111 - nf_log_buf_add(m, "MACSRC=%pM MACDST=%pM MACPROTO=%04x ",
12112 - eth_hdr(skb)->h_source, eth_hdr(skb)->h_dest,
12113 + nf_log_buf_add(m, "MACSRC=%pM MACDST=%pM ",
12114 + eth_hdr(skb)->h_source, eth_hdr(skb)->h_dest);
12115 + nf_log_dump_vlan(m, skb);
12116 + nf_log_buf_add(m, "MACPROTO=%04x ",
12117 ntohs(eth_hdr(skb)->h_proto));
12118 return;
12119 default:
12120 diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c
12121 index afa2c5049845f..ea32b113089d3 100644
12122 --- a/net/ipv4/nexthop.c
12123 +++ b/net/ipv4/nexthop.c
12124 @@ -763,7 +763,7 @@ static void remove_nexthop_from_groups(struct net *net, struct nexthop *nh,
12125 remove_nh_grp_entry(net, nhge, nlinfo);
12126
12127 /* make sure all see the newly published array before releasing rtnl */
12128 - synchronize_rcu();
12129 + synchronize_net();
12130 }
12131
12132 static void remove_nexthop_group(struct nexthop *nh, struct nl_info *nlinfo)
12133 diff --git a/net/ipv4/route.c b/net/ipv4/route.c
12134 index 7a5f64cf1fdd2..a293d4968d1eb 100644
12135 --- a/net/ipv4/route.c
12136 +++ b/net/ipv4/route.c
12137 @@ -2728,10 +2728,12 @@ struct rtable *ip_route_output_flow(struct net *net, struct flowi4 *flp4,
12138 if (IS_ERR(rt))
12139 return rt;
12140
12141 - if (flp4->flowi4_proto)
12142 + if (flp4->flowi4_proto) {
12143 + flp4->flowi4_oif = rt->dst.dev->ifindex;
12144 rt = (struct rtable *)xfrm_lookup_route(net, &rt->dst,
12145 flowi4_to_flowi(flp4),
12146 sk, 0);
12147 + }
12148
12149 return rt;
12150 }
12151 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
12152 index ab5358281000e..62f8ba4048180 100644
12153 --- a/net/ipv4/tcp_input.c
12154 +++ b/net/ipv4/tcp_input.c
12155 @@ -5696,6 +5696,8 @@ void tcp_rcv_established(struct sock *sk, struct sk_buff *skb)
12156 tcp_data_snd_check(sk);
12157 if (!inet_csk_ack_scheduled(sk))
12158 goto no_ack;
12159 + } else {
12160 + tcp_update_wl(tp, TCP_SKB_CB(skb)->seq);
12161 }
12162
12163 __tcp_ack_snd_check(sk, 0);
12164 diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
12165 index 9ca6c32065ec6..0646fce31b67a 100644
12166 --- a/net/ipv6/ip6_fib.c
12167 +++ b/net/ipv6/ip6_fib.c
12168 @@ -2519,8 +2519,10 @@ static void *ipv6_route_seq_start(struct seq_file *seq, loff_t *pos)
12169 iter->skip = *pos;
12170
12171 if (iter->tbl) {
12172 + loff_t p = 0;
12173 +
12174 ipv6_route_seq_setup_walk(iter, net);
12175 - return ipv6_route_seq_next(seq, NULL, pos);
12176 + return ipv6_route_seq_next(seq, NULL, &p);
12177 } else {
12178 return NULL;
12179 }
12180 diff --git a/net/ipv6/netfilter/nf_log_ipv6.c b/net/ipv6/netfilter/nf_log_ipv6.c
12181 index 22b80db6d8826..5b40258d3a5e9 100644
12182 --- a/net/ipv6/netfilter/nf_log_ipv6.c
12183 +++ b/net/ipv6/netfilter/nf_log_ipv6.c
12184 @@ -297,9 +297,11 @@ static void dump_ipv6_mac_header(struct nf_log_buf *m,
12185
12186 switch (dev->type) {
12187 case ARPHRD_ETHER:
12188 - nf_log_buf_add(m, "MACSRC=%pM MACDST=%pM MACPROTO=%04x ",
12189 - eth_hdr(skb)->h_source, eth_hdr(skb)->h_dest,
12190 - ntohs(eth_hdr(skb)->h_proto));
12191 + nf_log_buf_add(m, "MACSRC=%pM MACDST=%pM ",
12192 + eth_hdr(skb)->h_source, eth_hdr(skb)->h_dest);
12193 + nf_log_dump_vlan(m, skb);
12194 + nf_log_buf_add(m, "MACPROTO=%04x ",
12195 + ntohs(eth_hdr(skb)->h_proto));
12196 return;
12197 default:
12198 break;
12199 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
12200 index a9dda5c228f60..fa293feef935d 100644
12201 --- a/net/mac80211/cfg.c
12202 +++ b/net/mac80211/cfg.c
12203 @@ -698,7 +698,8 @@ void sta_set_rate_info_tx(struct sta_info *sta,
12204 u16 brate;
12205
12206 sband = ieee80211_get_sband(sta->sdata);
12207 - if (sband) {
12208 + WARN_ON_ONCE(sband && !sband->bitrates);
12209 + if (sband && sband->bitrates) {
12210 brate = sband->bitrates[rate->idx].bitrate;
12211 rinfo->legacy = DIV_ROUND_UP(brate, 1 << shift);
12212 }
12213 diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
12214 index f5d96107af6de..4f14d8a06915a 100644
12215 --- a/net/mac80211/sta_info.c
12216 +++ b/net/mac80211/sta_info.c
12217 @@ -2083,6 +2083,10 @@ static void sta_stats_decode_rate(struct ieee80211_local *local, u32 rate,
12218 int rate_idx = STA_STATS_GET(LEGACY_IDX, rate);
12219
12220 sband = local->hw.wiphy->bands[band];
12221 +
12222 + if (WARN_ON_ONCE(!sband->bitrates))
12223 + break;
12224 +
12225 brate = sband->bitrates[rate_idx].bitrate;
12226 if (rinfo->bw == RATE_INFO_BW_5)
12227 shift = 2;
12228 diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
12229 index 3cccc88ef817b..99168af0c28d9 100644
12230 --- a/net/netfilter/ipvs/ip_vs_ctl.c
12231 +++ b/net/netfilter/ipvs/ip_vs_ctl.c
12232 @@ -2465,6 +2465,10 @@ do_ip_vs_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned int len)
12233 /* Set timeout values for (tcp tcpfin udp) */
12234 ret = ip_vs_set_timeout(ipvs, (struct ip_vs_timeout_user *)arg);
12235 goto out_unlock;
12236 + } else if (!len) {
12237 + /* No more commands with len == 0 below */
12238 + ret = -EINVAL;
12239 + goto out_unlock;
12240 }
12241
12242 usvc_compat = (struct ip_vs_service_user *)arg;
12243 @@ -2541,9 +2545,6 @@ do_ip_vs_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned int len)
12244 break;
12245 case IP_VS_SO_SET_DELDEST:
12246 ret = ip_vs_del_dest(svc, &udest);
12247 - break;
12248 - default:
12249 - ret = -EINVAL;
12250 }
12251
12252 out_unlock:
12253 diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c
12254 index c62a131a60948..cefc39878b1a4 100644
12255 --- a/net/netfilter/ipvs/ip_vs_xmit.c
12256 +++ b/net/netfilter/ipvs/ip_vs_xmit.c
12257 @@ -615,6 +615,8 @@ static inline int ip_vs_tunnel_xmit_prepare(struct sk_buff *skb,
12258 if (ret == NF_ACCEPT) {
12259 nf_reset_ct(skb);
12260 skb_forward_csum(skb);
12261 + if (skb->dev)
12262 + skb->tstamp = 0;
12263 }
12264 return ret;
12265 }
12266 @@ -655,6 +657,8 @@ static inline int ip_vs_nat_send_or_cont(int pf, struct sk_buff *skb,
12267
12268 if (!local) {
12269 skb_forward_csum(skb);
12270 + if (skb->dev)
12271 + skb->tstamp = 0;
12272 NF_HOOK(pf, NF_INET_LOCAL_OUT, cp->ipvs->net, NULL, skb,
12273 NULL, skb_dst(skb)->dev, dst_output);
12274 } else
12275 @@ -675,6 +679,8 @@ static inline int ip_vs_send_or_cont(int pf, struct sk_buff *skb,
12276 if (!local) {
12277 ip_vs_drop_early_demux_sk(skb);
12278 skb_forward_csum(skb);
12279 + if (skb->dev)
12280 + skb->tstamp = 0;
12281 NF_HOOK(pf, NF_INET_LOCAL_OUT, cp->ipvs->net, NULL, skb,
12282 NULL, skb_dst(skb)->dev, dst_output);
12283 } else
12284 diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
12285 index 1926fd56df56a..848b137151c26 100644
12286 --- a/net/netfilter/nf_conntrack_proto_tcp.c
12287 +++ b/net/netfilter/nf_conntrack_proto_tcp.c
12288 @@ -541,13 +541,20 @@ static bool tcp_in_window(const struct nf_conn *ct,
12289 swin = win << sender->td_scale;
12290 sender->td_maxwin = (swin == 0 ? 1 : swin);
12291 sender->td_maxend = end + sender->td_maxwin;
12292 - /*
12293 - * We haven't seen traffic in the other direction yet
12294 - * but we have to tweak window tracking to pass III
12295 - * and IV until that happens.
12296 - */
12297 - if (receiver->td_maxwin == 0)
12298 + if (receiver->td_maxwin == 0) {
12299 + /* We haven't seen traffic in the other
12300 + * direction yet but we have to tweak window
12301 + * tracking to pass III and IV until that
12302 + * happens.
12303 + */
12304 receiver->td_end = receiver->td_maxend = sack;
12305 + } else if (sack == receiver->td_end + 1) {
12306 + /* Likely a reply to a keepalive.
12307 + * Needed for III.
12308 + */
12309 + receiver->td_end++;
12310 + }
12311 +
12312 }
12313 } else if (((state->state == TCP_CONNTRACK_SYN_SENT
12314 && dir == IP_CT_DIR_ORIGINAL)
12315 diff --git a/net/netfilter/nf_dup_netdev.c b/net/netfilter/nf_dup_netdev.c
12316 index f108a76925dd8..ec6e7d6860163 100644
12317 --- a/net/netfilter/nf_dup_netdev.c
12318 +++ b/net/netfilter/nf_dup_netdev.c
12319 @@ -19,6 +19,7 @@ static void nf_do_netdev_egress(struct sk_buff *skb, struct net_device *dev)
12320 skb_push(skb, skb->mac_len);
12321
12322 skb->dev = dev;
12323 + skb->tstamp = 0;
12324 dev_queue_xmit(skb);
12325 }
12326
12327 diff --git a/net/netfilter/nf_log_common.c b/net/netfilter/nf_log_common.c
12328 index ae5628ddbe6d7..fd7c5f0f5c25b 100644
12329 --- a/net/netfilter/nf_log_common.c
12330 +++ b/net/netfilter/nf_log_common.c
12331 @@ -171,6 +171,18 @@ nf_log_dump_packet_common(struct nf_log_buf *m, u_int8_t pf,
12332 }
12333 EXPORT_SYMBOL_GPL(nf_log_dump_packet_common);
12334
12335 +void nf_log_dump_vlan(struct nf_log_buf *m, const struct sk_buff *skb)
12336 +{
12337 + u16 vid;
12338 +
12339 + if (!skb_vlan_tag_present(skb))
12340 + return;
12341 +
12342 + vid = skb_vlan_tag_get(skb);
12343 + nf_log_buf_add(m, "VPROTO=%04x VID=%u ", ntohs(skb->vlan_proto), vid);
12344 +}
12345 +EXPORT_SYMBOL_GPL(nf_log_dump_vlan);
12346 +
12347 /* bridge and netdev logging families share this code. */
12348 void nf_log_l2packet(struct net *net, u_int8_t pf,
12349 __be16 protocol,
12350 diff --git a/net/netfilter/nft_fwd_netdev.c b/net/netfilter/nft_fwd_netdev.c
12351 index 3087e23297dbf..b77985986b24e 100644
12352 --- a/net/netfilter/nft_fwd_netdev.c
12353 +++ b/net/netfilter/nft_fwd_netdev.c
12354 @@ -138,6 +138,7 @@ static void nft_fwd_neigh_eval(const struct nft_expr *expr,
12355 return;
12356
12357 skb->dev = dev;
12358 + skb->tstamp = 0;
12359 neigh_xmit(neigh_table, dev, addr, skb);
12360 out:
12361 regs->verdict.code = verdict;
12362 diff --git a/net/nfc/netlink.c b/net/nfc/netlink.c
12363 index 1b261375722e3..4170acc2dc282 100644
12364 --- a/net/nfc/netlink.c
12365 +++ b/net/nfc/netlink.c
12366 @@ -1225,7 +1225,7 @@ static int nfc_genl_fw_download(struct sk_buff *skb, struct genl_info *info)
12367 u32 idx;
12368 char firmware_name[NFC_FIRMWARE_NAME_MAXSIZE + 1];
12369
12370 - if (!info->attrs[NFC_ATTR_DEVICE_INDEX])
12371 + if (!info->attrs[NFC_ATTR_DEVICE_INDEX] || !info->attrs[NFC_ATTR_FIRMWARE_NAME])
12372 return -EINVAL;
12373
12374 idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
12375 diff --git a/net/sched/act_api.c b/net/sched/act_api.c
12376 index 4a5ef2adb2e57..1dc642b11443c 100644
12377 --- a/net/sched/act_api.c
12378 +++ b/net/sched/act_api.c
12379 @@ -706,13 +706,6 @@ int tcf_action_destroy(struct tc_action *actions[], int bind)
12380 return ret;
12381 }
12382
12383 -static int tcf_action_destroy_1(struct tc_action *a, int bind)
12384 -{
12385 - struct tc_action *actions[] = { a, NULL };
12386 -
12387 - return tcf_action_destroy(actions, bind);
12388 -}
12389 -
12390 static int tcf_action_put(struct tc_action *p)
12391 {
12392 return __tcf_action_put(p, false);
12393 @@ -932,13 +925,6 @@ struct tc_action *tcf_action_init_1(struct net *net, struct tcf_proto *tp,
12394 if (err < 0)
12395 goto err_mod;
12396
12397 - if (TC_ACT_EXT_CMP(a->tcfa_action, TC_ACT_GOTO_CHAIN) &&
12398 - !rcu_access_pointer(a->goto_chain)) {
12399 - tcf_action_destroy_1(a, bind);
12400 - NL_SET_ERR_MSG(extack, "can't use goto chain with NULL chain");
12401 - return ERR_PTR(-EINVAL);
12402 - }
12403 -
12404 if (!name && tb[TCA_ACT_COOKIE])
12405 tcf_set_action_cookie(&a->act_cookie, cookie);
12406
12407 diff --git a/net/sched/act_tunnel_key.c b/net/sched/act_tunnel_key.c
12408 index bdaa04a9a7fa4..a5a2bf01eb9bc 100644
12409 --- a/net/sched/act_tunnel_key.c
12410 +++ b/net/sched/act_tunnel_key.c
12411 @@ -315,7 +315,7 @@ static int tunnel_key_init(struct net *net, struct nlattr *nla,
12412
12413 metadata = __ipv6_tun_set_dst(&saddr, &daddr, tos, ttl, dst_port,
12414 0, flags,
12415 - key_id, 0);
12416 + key_id, opts_len);
12417 } else {
12418 NL_SET_ERR_MSG(extack, "Missing either ipv4 or ipv6 src and dst");
12419 ret = -EINVAL;
12420 diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c
12421 index 0c5fcb8ed404d..aeea67f908415 100644
12422 --- a/net/smc/smc_core.c
12423 +++ b/net/smc/smc_core.c
12424 @@ -795,7 +795,7 @@ static struct smc_buf_desc *smcr_new_buf_create(struct smc_link_group *lgr,
12425 return buf_desc;
12426 }
12427
12428 -#define SMCD_DMBE_SIZES 7 /* 0 -> 16KB, 1 -> 32KB, .. 6 -> 1MB */
12429 +#define SMCD_DMBE_SIZES 6 /* 0 -> 16KB, 1 -> 32KB, .. 6 -> 1MB */
12430
12431 static struct smc_buf_desc *smcd_new_buf_create(struct smc_link_group *lgr,
12432 bool is_dmb, int bufsize)
12433 diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c
12434 index 3645cd241d3ea..cf4d6d7e72822 100644
12435 --- a/net/sunrpc/auth_gss/svcauth_gss.c
12436 +++ b/net/sunrpc/auth_gss/svcauth_gss.c
12437 @@ -1095,9 +1095,9 @@ static int gss_read_proxy_verf(struct svc_rqst *rqstp,
12438 struct gssp_in_token *in_token)
12439 {
12440 struct kvec *argv = &rqstp->rq_arg.head[0];
12441 - unsigned int page_base, length;
12442 - int pages, i, res;
12443 - size_t inlen;
12444 + unsigned int length, pgto_offs, pgfrom_offs;
12445 + int pages, i, res, pgto, pgfrom;
12446 + size_t inlen, to_offs, from_offs;
12447
12448 res = gss_read_common_verf(gc, argv, authp, in_handle);
12449 if (res)
12450 @@ -1125,17 +1125,24 @@ static int gss_read_proxy_verf(struct svc_rqst *rqstp,
12451 memcpy(page_address(in_token->pages[0]), argv->iov_base, length);
12452 inlen -= length;
12453
12454 - i = 1;
12455 - page_base = rqstp->rq_arg.page_base;
12456 + to_offs = length;
12457 + from_offs = rqstp->rq_arg.page_base;
12458 while (inlen) {
12459 - length = min_t(unsigned int, inlen, PAGE_SIZE);
12460 - memcpy(page_address(in_token->pages[i]),
12461 - page_address(rqstp->rq_arg.pages[i]) + page_base,
12462 + pgto = to_offs >> PAGE_SHIFT;
12463 + pgfrom = from_offs >> PAGE_SHIFT;
12464 + pgto_offs = to_offs & ~PAGE_MASK;
12465 + pgfrom_offs = from_offs & ~PAGE_MASK;
12466 +
12467 + length = min_t(unsigned int, inlen,
12468 + min_t(unsigned int, PAGE_SIZE - pgto_offs,
12469 + PAGE_SIZE - pgfrom_offs));
12470 + memcpy(page_address(in_token->pages[pgto]) + pgto_offs,
12471 + page_address(rqstp->rq_arg.pages[pgfrom]) + pgfrom_offs,
12472 length);
12473
12474 + to_offs += length;
12475 + from_offs += length;
12476 inlen -= length;
12477 - page_base = 0;
12478 - i++;
12479 }
12480 return 0;
12481 }
12482 diff --git a/net/sunrpc/xprtrdma/svc_rdma_sendto.c b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
12483 index 217106c66a13c..25e8922c10b28 100644
12484 --- a/net/sunrpc/xprtrdma/svc_rdma_sendto.c
12485 +++ b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
12486 @@ -609,10 +609,11 @@ static int svc_rdma_pull_up_reply_msg(struct svcxprt_rdma *rdma,
12487 while (remaining) {
12488 len = min_t(u32, PAGE_SIZE - pageoff, remaining);
12489
12490 - memcpy(dst, page_address(*ppages), len);
12491 + memcpy(dst, page_address(*ppages) + pageoff, len);
12492 remaining -= len;
12493 dst += len;
12494 pageoff = 0;
12495 + ppages++;
12496 }
12497 }
12498
12499 diff --git a/net/tipc/msg.c b/net/tipc/msg.c
12500 index ee4b2261e7957..b0ed3c944b2d1 100644
12501 --- a/net/tipc/msg.c
12502 +++ b/net/tipc/msg.c
12503 @@ -140,7 +140,8 @@ int tipc_buf_append(struct sk_buff **headbuf, struct sk_buff **buf)
12504 if (fragid == FIRST_FRAGMENT) {
12505 if (unlikely(head))
12506 goto err;
12507 - frag = skb_unshare(frag, GFP_ATOMIC);
12508 + if (skb_cloned(frag))
12509 + frag = skb_copy(frag, GFP_ATOMIC);
12510 if (unlikely(!frag))
12511 goto err;
12512 head = *headbuf = frag;
12513 diff --git a/net/tls/tls_device.c b/net/tls/tls_device.c
12514 index 25fca390cdcf5..933a3187d3bf2 100644
12515 --- a/net/tls/tls_device.c
12516 +++ b/net/tls/tls_device.c
12517 @@ -405,14 +405,14 @@ static int tls_push_data(struct sock *sk,
12518 struct tls_context *tls_ctx = tls_get_ctx(sk);
12519 struct tls_prot_info *prot = &tls_ctx->prot_info;
12520 struct tls_offload_context_tx *ctx = tls_offload_ctx_tx(tls_ctx);
12521 - int more = flags & (MSG_SENDPAGE_NOTLAST | MSG_MORE);
12522 struct tls_record_info *record = ctx->open_record;
12523 int tls_push_record_flags;
12524 struct page_frag *pfrag;
12525 size_t orig_size = size;
12526 u32 max_open_record_len;
12527 - int copy, rc = 0;
12528 + bool more = false;
12529 bool done = false;
12530 + int copy, rc = 0;
12531 long timeo;
12532
12533 if (flags &
12534 @@ -480,9 +480,8 @@ handle_error:
12535 if (!size) {
12536 last_record:
12537 tls_push_record_flags = flags;
12538 - if (more) {
12539 - tls_ctx->pending_open_record_frags =
12540 - !!record->num_frags;
12541 + if (flags & (MSG_SENDPAGE_NOTLAST | MSG_MORE)) {
12542 + more = true;
12543 break;
12544 }
12545
12546 @@ -514,6 +513,8 @@ last_record:
12547 }
12548 } while (!done);
12549
12550 + tls_ctx->pending_open_record_frags = more;
12551 +
12552 if (orig_size - size > 0)
12553 rc = orig_size - size;
12554
12555 diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
12556 index 7bc4f37655237..672b70730e898 100644
12557 --- a/net/wireless/nl80211.c
12558 +++ b/net/wireless/nl80211.c
12559 @@ -2227,7 +2227,10 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev,
12560 * case we'll continue with more data in the next round,
12561 * but break unconditionally so unsplit data stops here.
12562 */
12563 - state->split_start++;
12564 + if (state->split)
12565 + state->split_start++;
12566 + else
12567 + state->split_start = 0;
12568 break;
12569 case 9:
12570 if (rdev->wiphy.extended_capabilities &&
12571 @@ -4496,16 +4499,14 @@ static int nl80211_parse_he_obss_pd(struct nlattr *attrs,
12572 if (err)
12573 return err;
12574
12575 - if (!tb[NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET] ||
12576 - !tb[NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET])
12577 - return -EINVAL;
12578 -
12579 - he_obss_pd->min_offset =
12580 - nla_get_u32(tb[NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET]);
12581 - he_obss_pd->max_offset =
12582 - nla_get_u32(tb[NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET]);
12583 + if (tb[NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET])
12584 + he_obss_pd->min_offset =
12585 + nla_get_u8(tb[NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET]);
12586 + if (tb[NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET])
12587 + he_obss_pd->max_offset =
12588 + nla_get_u8(tb[NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET]);
12589
12590 - if (he_obss_pd->min_offset >= he_obss_pd->max_offset)
12591 + if (he_obss_pd->min_offset > he_obss_pd->max_offset)
12592 return -EINVAL;
12593
12594 he_obss_pd->enable = true;
12595 diff --git a/samples/mic/mpssd/mpssd.c b/samples/mic/mpssd/mpssd.c
12596 index a11bf6c5b53b4..cd3f16a6f5caf 100644
12597 --- a/samples/mic/mpssd/mpssd.c
12598 +++ b/samples/mic/mpssd/mpssd.c
12599 @@ -403,9 +403,9 @@ mic_virtio_copy(struct mic_info *mic, int fd,
12600
12601 static inline unsigned _vring_size(unsigned int num, unsigned long align)
12602 {
12603 - return ((sizeof(struct vring_desc) * num + sizeof(__u16) * (3 + num)
12604 + return _ALIGN_UP(((sizeof(struct vring_desc) * num + sizeof(__u16) * (3 + num)
12605 + align - 1) & ~(align - 1))
12606 - + sizeof(__u16) * 3 + sizeof(struct vring_used_elem) * num;
12607 + + sizeof(__u16) * 3 + sizeof(struct vring_used_elem) * num, 4);
12608 }
12609
12610 /*
12611 diff --git a/security/integrity/ima/ima_crypto.c b/security/integrity/ima/ima_crypto.c
12612 index d5ad7b2539c75..d86825261b515 100644
12613 --- a/security/integrity/ima/ima_crypto.c
12614 +++ b/security/integrity/ima/ima_crypto.c
12615 @@ -688,6 +688,8 @@ static int ima_calc_boot_aggregate_tfm(char *digest, u16 alg_id,
12616 /* now accumulate with current aggregate */
12617 rc = crypto_shash_update(shash, d.digest,
12618 crypto_shash_digestsize(tfm));
12619 + if (rc != 0)
12620 + return rc;
12621 }
12622 if (!rc)
12623 crypto_shash_final(shash, digest);
12624 diff --git a/sound/core/seq/oss/seq_oss.c b/sound/core/seq/oss/seq_oss.c
12625 index c8b9c0b315d8f..250a92b187265 100644
12626 --- a/sound/core/seq/oss/seq_oss.c
12627 +++ b/sound/core/seq/oss/seq_oss.c
12628 @@ -174,9 +174,12 @@ odev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
12629 if (snd_BUG_ON(!dp))
12630 return -ENXIO;
12631
12632 - mutex_lock(&register_mutex);
12633 + if (cmd != SNDCTL_SEQ_SYNC &&
12634 + mutex_lock_interruptible(&register_mutex))
12635 + return -ERESTARTSYS;
12636 rc = snd_seq_oss_ioctl(dp, cmd, arg);
12637 - mutex_unlock(&register_mutex);
12638 + if (cmd != SNDCTL_SEQ_SYNC)
12639 + mutex_unlock(&register_mutex);
12640 return rc;
12641 }
12642
12643 diff --git a/sound/firewire/bebob/bebob_hwdep.c b/sound/firewire/bebob/bebob_hwdep.c
12644 index 45b740f44c459..c362eb38ab906 100644
12645 --- a/sound/firewire/bebob/bebob_hwdep.c
12646 +++ b/sound/firewire/bebob/bebob_hwdep.c
12647 @@ -36,12 +36,11 @@ hwdep_read(struct snd_hwdep *hwdep, char __user *buf, long count,
12648 }
12649
12650 memset(&event, 0, sizeof(event));
12651 + count = min_t(long, count, sizeof(event.lock_status));
12652 if (bebob->dev_lock_changed) {
12653 event.lock_status.type = SNDRV_FIREWIRE_EVENT_LOCK_STATUS;
12654 event.lock_status.status = (bebob->dev_lock_count > 0);
12655 bebob->dev_lock_changed = false;
12656 -
12657 - count = min_t(long, count, sizeof(event.lock_status));
12658 }
12659
12660 spin_unlock_irq(&bebob->lock);
12661 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
12662 index 590ea262f2e20..9a1968932b783 100644
12663 --- a/sound/pci/hda/hda_intel.c
12664 +++ b/sound/pci/hda/hda_intel.c
12665 @@ -1001,12 +1001,14 @@ static void __azx_runtime_resume(struct azx *chip, bool from_rt)
12666 azx_init_pci(chip);
12667 hda_intel_init_chip(chip, true);
12668
12669 - if (status && from_rt) {
12670 - list_for_each_codec(codec, &chip->bus)
12671 - if (!codec->relaxed_resume &&
12672 - (status & (1 << codec->addr)))
12673 - schedule_delayed_work(&codec->jackpoll_work,
12674 - codec->jackpoll_interval);
12675 + if (from_rt) {
12676 + list_for_each_codec(codec, &chip->bus) {
12677 + if (codec->relaxed_resume)
12678 + continue;
12679 +
12680 + if (codec->forced_resume || (status & (1 << codec->addr)))
12681 + pm_request_resume(hda_codec_dev(codec));
12682 + }
12683 }
12684
12685 /* power down again for link-controlled chips */
12686 diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c
12687 index 6aa39339db0ab..459aff6c10bc5 100644
12688 --- a/sound/pci/hda/patch_ca0132.c
12689 +++ b/sound/pci/hda/patch_ca0132.c
12690 @@ -1065,6 +1065,7 @@ enum {
12691 QUIRK_R3DI,
12692 QUIRK_R3D,
12693 QUIRK_AE5,
12694 + QUIRK_AE7,
12695 };
12696
12697 #ifdef CONFIG_PCI
12698 @@ -1184,6 +1185,7 @@ static const struct snd_pci_quirk ca0132_quirks[] = {
12699 SND_PCI_QUIRK(0x1102, 0x0013, "Recon3D", QUIRK_R3D),
12700 SND_PCI_QUIRK(0x1102, 0x0018, "Recon3D", QUIRK_R3D),
12701 SND_PCI_QUIRK(0x1102, 0x0051, "Sound Blaster AE-5", QUIRK_AE5),
12702 + SND_PCI_QUIRK(0x1102, 0x0081, "Sound Blaster AE-7", QUIRK_AE7),
12703 {}
12704 };
12705
12706 @@ -4674,6 +4676,15 @@ static int ca0132_alt_select_in(struct hda_codec *codec)
12707 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00);
12708 tmp = FLOAT_THREE;
12709 break;
12710 + case QUIRK_AE7:
12711 + ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00);
12712 + tmp = FLOAT_THREE;
12713 + chipio_set_conn_rate(codec, MEM_CONNID_MICIN2,
12714 + SR_96_000);
12715 + chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2,
12716 + SR_96_000);
12717 + dspio_set_uint_param(codec, 0x80, 0x01, FLOAT_ZERO);
12718 + break;
12719 default:
12720 tmp = FLOAT_ONE;
12721 break;
12722 @@ -4719,6 +4730,14 @@ static int ca0132_alt_select_in(struct hda_codec *codec)
12723 case QUIRK_AE5:
12724 ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00);
12725 break;
12726 + case QUIRK_AE7:
12727 + ca0113_mmio_command_set(codec, 0x30, 0x28, 0x3f);
12728 + chipio_set_conn_rate(codec, MEM_CONNID_MICIN2,
12729 + SR_96_000);
12730 + chipio_set_conn_rate(codec, MEM_CONNID_MICOUT2,
12731 + SR_96_000);
12732 + dspio_set_uint_param(codec, 0x80, 0x01, FLOAT_ZERO);
12733 + break;
12734 default:
12735 break;
12736 }
12737 @@ -4728,7 +4747,10 @@ static int ca0132_alt_select_in(struct hda_codec *codec)
12738 if (ca0132_quirk(spec) == QUIRK_R3DI)
12739 chipio_set_conn_rate(codec, 0x0F, SR_96_000);
12740
12741 - tmp = FLOAT_ZERO;
12742 + if (ca0132_quirk(spec) == QUIRK_AE7)
12743 + tmp = FLOAT_THREE;
12744 + else
12745 + tmp = FLOAT_ZERO;
12746 dspio_set_uint_param(codec, 0x80, 0x00, tmp);
12747
12748 switch (ca0132_quirk(spec)) {
12749 diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
12750 index 51798632d334c..df4771b9eff24 100644
12751 --- a/sound/pci/hda/patch_hdmi.c
12752 +++ b/sound/pci/hda/patch_hdmi.c
12753 @@ -2001,22 +2001,25 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo,
12754 int pinctl;
12755 int err = 0;
12756
12757 + mutex_lock(&spec->pcm_lock);
12758 if (hinfo->nid) {
12759 pcm_idx = hinfo_to_pcm_index(codec, hinfo);
12760 - if (snd_BUG_ON(pcm_idx < 0))
12761 - return -EINVAL;
12762 + if (snd_BUG_ON(pcm_idx < 0)) {
12763 + err = -EINVAL;
12764 + goto unlock;
12765 + }
12766 cvt_idx = cvt_nid_to_cvt_index(codec, hinfo->nid);
12767 - if (snd_BUG_ON(cvt_idx < 0))
12768 - return -EINVAL;
12769 + if (snd_BUG_ON(cvt_idx < 0)) {
12770 + err = -EINVAL;
12771 + goto unlock;
12772 + }
12773 per_cvt = get_cvt(spec, cvt_idx);
12774 -
12775 snd_BUG_ON(!per_cvt->assigned);
12776 per_cvt->assigned = 0;
12777 hinfo->nid = 0;
12778
12779 azx_stream(get_azx_dev(substream))->stripe = 0;
12780
12781 - mutex_lock(&spec->pcm_lock);
12782 snd_hda_spdif_ctls_unassign(codec, pcm_idx);
12783 clear_bit(pcm_idx, &spec->pcm_in_use);
12784 pin_idx = hinfo_to_pin_index(codec, hinfo);
12785 @@ -2044,10 +2047,11 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo,
12786 per_pin->setup = false;
12787 per_pin->channels = 0;
12788 mutex_unlock(&per_pin->lock);
12789 - unlock:
12790 - mutex_unlock(&spec->pcm_lock);
12791 }
12792
12793 +unlock:
12794 + mutex_unlock(&spec->pcm_lock);
12795 +
12796 return err;
12797 }
12798
12799 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
12800 index 4dfd714f718b8..7a24e9f0d2fe7 100644
12801 --- a/sound/pci/hda/patch_realtek.c
12802 +++ b/sound/pci/hda/patch_realtek.c
12803 @@ -1141,6 +1141,7 @@ static int alc_alloc_spec(struct hda_codec *codec, hda_nid_t mixer_nid)
12804 codec->single_adc_amp = 1;
12805 /* FIXME: do we need this for all Realtek codec models? */
12806 codec->spdif_status_reset = 1;
12807 + codec->forced_resume = 1;
12808 codec->patch_ops = alc_patch_ops;
12809
12810 err = alc_codec_rename_from_preset(codec);
12811 @@ -1920,6 +1921,8 @@ enum {
12812 ALC1220_FIXUP_CLEVO_P950,
12813 ALC1220_FIXUP_CLEVO_PB51ED,
12814 ALC1220_FIXUP_CLEVO_PB51ED_PINS,
12815 + ALC887_FIXUP_ASUS_AUDIO,
12816 + ALC887_FIXUP_ASUS_HMIC,
12817 };
12818
12819 static void alc889_fixup_coef(struct hda_codec *codec,
12820 @@ -2132,6 +2135,31 @@ static void alc1220_fixup_clevo_pb51ed(struct hda_codec *codec,
12821 alc_fixup_headset_mode_no_hp_mic(codec, fix, action);
12822 }
12823
12824 +static void alc887_asus_hp_automute_hook(struct hda_codec *codec,
12825 + struct hda_jack_callback *jack)
12826 +{
12827 + struct alc_spec *spec = codec->spec;
12828 + unsigned int vref;
12829 +
12830 + snd_hda_gen_hp_automute(codec, jack);
12831 +
12832 + if (spec->gen.hp_jack_present)
12833 + vref = AC_PINCTL_VREF_80;
12834 + else
12835 + vref = AC_PINCTL_VREF_HIZ;
12836 + snd_hda_set_pin_ctl(codec, 0x19, PIN_HP | vref);
12837 +}
12838 +
12839 +static void alc887_fixup_asus_jack(struct hda_codec *codec,
12840 + const struct hda_fixup *fix, int action)
12841 +{
12842 + struct alc_spec *spec = codec->spec;
12843 + if (action != HDA_FIXUP_ACT_PROBE)
12844 + return;
12845 + snd_hda_set_pin_ctl_cache(codec, 0x1b, PIN_HP);
12846 + spec->gen.hp_automute_hook = alc887_asus_hp_automute_hook;
12847 +}
12848 +
12849 static const struct hda_fixup alc882_fixups[] = {
12850 [ALC882_FIXUP_ABIT_AW9D_MAX] = {
12851 .type = HDA_FIXUP_PINS,
12852 @@ -2389,6 +2417,20 @@ static const struct hda_fixup alc882_fixups[] = {
12853 .chained = true,
12854 .chain_id = ALC1220_FIXUP_CLEVO_PB51ED,
12855 },
12856 + [ALC887_FIXUP_ASUS_AUDIO] = {
12857 + .type = HDA_FIXUP_PINS,
12858 + .v.pins = (const struct hda_pintbl[]) {
12859 + { 0x15, 0x02a14150 }, /* use as headset mic, without its own jack detect */
12860 + { 0x19, 0x22219420 },
12861 + {}
12862 + },
12863 + },
12864 + [ALC887_FIXUP_ASUS_HMIC] = {
12865 + .type = HDA_FIXUP_FUNC,
12866 + .v.func = alc887_fixup_asus_jack,
12867 + .chained = true,
12868 + .chain_id = ALC887_FIXUP_ASUS_AUDIO,
12869 + },
12870 };
12871
12872 static const struct snd_pci_quirk alc882_fixup_tbl[] = {
12873 @@ -2422,6 +2464,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
12874 SND_PCI_QUIRK(0x1043, 0x13c2, "Asus A7M", ALC882_FIXUP_EAPD),
12875 SND_PCI_QUIRK(0x1043, 0x1873, "ASUS W90V", ALC882_FIXUP_ASUS_W90V),
12876 SND_PCI_QUIRK(0x1043, 0x1971, "Asus W2JC", ALC882_FIXUP_ASUS_W2JC),
12877 + SND_PCI_QUIRK(0x1043, 0x2390, "Asus D700SA", ALC887_FIXUP_ASUS_HMIC),
12878 SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_FIXUP_EEE1601),
12879 SND_PCI_QUIRK(0x1043, 0x84bc, "ASUS ET2700", ALC887_FIXUP_ASUS_BASS),
12880 SND_PCI_QUIRK(0x1043, 0x8691, "ASUS ROG Ranger VIII", ALC882_FIXUP_GPIO3),
12881 @@ -6215,6 +6258,7 @@ enum {
12882 ALC269_FIXUP_LEMOTE_A190X,
12883 ALC256_FIXUP_INTEL_NUC8_RUGGED,
12884 ALC255_FIXUP_XIAOMI_HEADSET_MIC,
12885 + ALC274_FIXUP_HP_MIC,
12886 };
12887
12888 static const struct hda_fixup alc269_fixups[] = {
12889 @@ -7594,6 +7638,14 @@ static const struct hda_fixup alc269_fixups[] = {
12890 .chained = true,
12891 .chain_id = ALC289_FIXUP_ASUS_GA401
12892 },
12893 + [ALC274_FIXUP_HP_MIC] = {
12894 + .type = HDA_FIXUP_VERBS,
12895 + .v.verbs = (const struct hda_verb[]) {
12896 + { 0x20, AC_VERB_SET_COEF_INDEX, 0x45 },
12897 + { 0x20, AC_VERB_SET_PROC_COEF, 0x5089 },
12898 + { }
12899 + },
12900 + },
12901 };
12902
12903 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
12904 @@ -7745,6 +7797,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
12905 SND_PCI_QUIRK(0x103c, 0x869d, "HP", ALC236_FIXUP_HP_MUTE_LED),
12906 SND_PCI_QUIRK(0x103c, 0x8729, "HP", ALC285_FIXUP_HP_GPIO_LED),
12907 SND_PCI_QUIRK(0x103c, 0x8736, "HP", ALC285_FIXUP_HP_GPIO_AMP_INIT),
12908 + SND_PCI_QUIRK(0x103c, 0x874e, "HP", ALC274_FIXUP_HP_MIC),
12909 + SND_PCI_QUIRK(0x103c, 0x8760, "HP", ALC285_FIXUP_HP_MUTE_LED),
12910 SND_PCI_QUIRK(0x103c, 0x877a, "HP", ALC285_FIXUP_HP_MUTE_LED),
12911 SND_PCI_QUIRK(0x103c, 0x877d, "HP", ALC236_FIXUP_HP_MUTE_LED),
12912 SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
12913 @@ -8070,6 +8124,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
12914 {.id = ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE, .name = "alc256-medion-headset"},
12915 {.id = ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc298-samsung-headphone"},
12916 {.id = ALC255_FIXUP_XIAOMI_HEADSET_MIC, .name = "alc255-xiaomi-headset"},
12917 + {.id = ALC274_FIXUP_HP_MIC, .name = "alc274-hp-mic-detect"},
12918 {}
12919 };
12920 #define ALC225_STANDARD_PINS \
12921 @@ -9633,6 +9688,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
12922 SND_PCI_QUIRK(0x1028, 0x0698, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
12923 SND_PCI_QUIRK(0x1028, 0x069f, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
12924 SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
12925 + SND_PCI_QUIRK(0x103c, 0x873e, "HP", ALC671_FIXUP_HP_HEADSET_MIC2),
12926 SND_PCI_QUIRK(0x1043, 0x1080, "Asus UX501VW", ALC668_FIXUP_HEADSET_MODE),
12927 SND_PCI_QUIRK(0x1043, 0x11cd, "Asus N550", ALC662_FIXUP_ASUS_Nx50),
12928 SND_PCI_QUIRK(0x1043, 0x13df, "Asus N550JX", ALC662_FIXUP_BASS_1A),
12929 diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c
12930 index 68165de1c8dea..7a1ffbaf48be5 100644
12931 --- a/sound/soc/codecs/tlv320aic32x4.c
12932 +++ b/sound/soc/codecs/tlv320aic32x4.c
12933 @@ -662,7 +662,7 @@ static int aic32x4_set_processing_blocks(struct snd_soc_component *component,
12934 }
12935
12936 static int aic32x4_setup_clocks(struct snd_soc_component *component,
12937 - unsigned int sample_rate)
12938 + unsigned int sample_rate, unsigned int channels)
12939 {
12940 u8 aosr;
12941 u16 dosr;
12942 @@ -750,7 +750,9 @@ static int aic32x4_setup_clocks(struct snd_soc_component *component,
12943 dosr);
12944
12945 clk_set_rate(clocks[5].clk,
12946 - sample_rate * 32);
12947 + sample_rate * 32 *
12948 + channels);
12949 +
12950 return 0;
12951 }
12952 }
12953 @@ -772,7 +774,8 @@ static int aic32x4_hw_params(struct snd_pcm_substream *substream,
12954 u8 iface1_reg = 0;
12955 u8 dacsetup_reg = 0;
12956
12957 - aic32x4_setup_clocks(component, params_rate(params));
12958 + aic32x4_setup_clocks(component, params_rate(params),
12959 + params_channels(params));
12960
12961 switch (params_width(params)) {
12962 case 16:
12963 diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
12964 index 914b75c23d1bf..027259695551c 100644
12965 --- a/sound/soc/fsl/fsl_sai.c
12966 +++ b/sound/soc/fsl/fsl_sai.c
12967 @@ -694,7 +694,7 @@ static int fsl_sai_dai_probe(struct snd_soc_dai *cpu_dai)
12968 return 0;
12969 }
12970
12971 -static struct snd_soc_dai_driver fsl_sai_dai = {
12972 +static struct snd_soc_dai_driver fsl_sai_dai_template = {
12973 .probe = fsl_sai_dai_probe,
12974 .playback = {
12975 .stream_name = "CPU-Playback",
12976 @@ -965,12 +965,15 @@ static int fsl_sai_probe(struct platform_device *pdev)
12977 return ret;
12978 }
12979
12980 + memcpy(&sai->cpu_dai_drv, &fsl_sai_dai_template,
12981 + sizeof(fsl_sai_dai_template));
12982 +
12983 /* Sync Tx with Rx as default by following old DT binding */
12984 sai->synchronous[RX] = true;
12985 sai->synchronous[TX] = false;
12986 - fsl_sai_dai.symmetric_rates = 1;
12987 - fsl_sai_dai.symmetric_channels = 1;
12988 - fsl_sai_dai.symmetric_samplebits = 1;
12989 + sai->cpu_dai_drv.symmetric_rates = 1;
12990 + sai->cpu_dai_drv.symmetric_channels = 1;
12991 + sai->cpu_dai_drv.symmetric_samplebits = 1;
12992
12993 if (of_find_property(np, "fsl,sai-synchronous-rx", NULL) &&
12994 of_find_property(np, "fsl,sai-asynchronous", NULL)) {
12995 @@ -987,9 +990,9 @@ static int fsl_sai_probe(struct platform_device *pdev)
12996 /* Discard all settings for asynchronous mode */
12997 sai->synchronous[RX] = false;
12998 sai->synchronous[TX] = false;
12999 - fsl_sai_dai.symmetric_rates = 0;
13000 - fsl_sai_dai.symmetric_channels = 0;
13001 - fsl_sai_dai.symmetric_samplebits = 0;
13002 + sai->cpu_dai_drv.symmetric_rates = 0;
13003 + sai->cpu_dai_drv.symmetric_channels = 0;
13004 + sai->cpu_dai_drv.symmetric_samplebits = 0;
13005 }
13006
13007 if (of_find_property(np, "fsl,sai-mclk-direction-output", NULL) &&
13008 @@ -1018,7 +1021,7 @@ static int fsl_sai_probe(struct platform_device *pdev)
13009 pm_runtime_enable(&pdev->dev);
13010
13011 ret = devm_snd_soc_register_component(&pdev->dev, &fsl_component,
13012 - &fsl_sai_dai, 1);
13013 + &sai->cpu_dai_drv, 1);
13014 if (ret)
13015 goto err_pm_disable;
13016
13017 diff --git a/sound/soc/fsl/fsl_sai.h b/sound/soc/fsl/fsl_sai.h
13018 index 6aba7d28f5f34..677ecfc1ec68f 100644
13019 --- a/sound/soc/fsl/fsl_sai.h
13020 +++ b/sound/soc/fsl/fsl_sai.h
13021 @@ -180,6 +180,7 @@ struct fsl_sai {
13022 unsigned int bclk_ratio;
13023
13024 const struct fsl_sai_soc_data *soc_data;
13025 + struct snd_soc_dai_driver cpu_dai_drv;
13026 struct snd_dmaengine_dai_dma_data dma_params_rx;
13027 struct snd_dmaengine_dai_dma_data dma_params_tx;
13028 };
13029 diff --git a/sound/soc/fsl/imx-es8328.c b/sound/soc/fsl/imx-es8328.c
13030 index 15a27a2cd0cae..fad1eb6253d53 100644
13031 --- a/sound/soc/fsl/imx-es8328.c
13032 +++ b/sound/soc/fsl/imx-es8328.c
13033 @@ -145,13 +145,13 @@ static int imx_es8328_probe(struct platform_device *pdev)
13034 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
13035 if (!data) {
13036 ret = -ENOMEM;
13037 - goto fail;
13038 + goto put_device;
13039 }
13040
13041 comp = devm_kzalloc(dev, 3 * sizeof(*comp), GFP_KERNEL);
13042 if (!comp) {
13043 ret = -ENOMEM;
13044 - goto fail;
13045 + goto put_device;
13046 }
13047
13048 data->dev = dev;
13049 @@ -182,12 +182,12 @@ static int imx_es8328_probe(struct platform_device *pdev)
13050 ret = snd_soc_of_parse_card_name(&data->card, "model");
13051 if (ret) {
13052 dev_err(dev, "Unable to parse card name\n");
13053 - goto fail;
13054 + goto put_device;
13055 }
13056 ret = snd_soc_of_parse_audio_routing(&data->card, "audio-routing");
13057 if (ret) {
13058 dev_err(dev, "Unable to parse routing: %d\n", ret);
13059 - goto fail;
13060 + goto put_device;
13061 }
13062 data->card.num_links = 1;
13063 data->card.owner = THIS_MODULE;
13064 @@ -196,10 +196,12 @@ static int imx_es8328_probe(struct platform_device *pdev)
13065 ret = snd_soc_register_card(&data->card);
13066 if (ret) {
13067 dev_err(dev, "Unable to register: %d\n", ret);
13068 - goto fail;
13069 + goto put_device;
13070 }
13071
13072 platform_set_drvdata(pdev, data);
13073 +put_device:
13074 + put_device(&ssi_pdev->dev);
13075 fail:
13076 of_node_put(ssi_np);
13077 of_node_put(codec_np);
13078 diff --git a/sound/soc/qcom/lpass-cpu.c b/sound/soc/qcom/lpass-cpu.c
13079 index dbce7e92baf3c..c5d6952a4a33f 100644
13080 --- a/sound/soc/qcom/lpass-cpu.c
13081 +++ b/sound/soc/qcom/lpass-cpu.c
13082 @@ -174,21 +174,6 @@ static int lpass_cpu_daiops_hw_params(struct snd_pcm_substream *substream,
13083 return 0;
13084 }
13085
13086 -static int lpass_cpu_daiops_hw_free(struct snd_pcm_substream *substream,
13087 - struct snd_soc_dai *dai)
13088 -{
13089 - struct lpass_data *drvdata = snd_soc_dai_get_drvdata(dai);
13090 - int ret;
13091 -
13092 - ret = regmap_write(drvdata->lpaif_map,
13093 - LPAIF_I2SCTL_REG(drvdata->variant, dai->driver->id),
13094 - 0);
13095 - if (ret)
13096 - dev_err(dai->dev, "error writing to i2sctl reg: %d\n", ret);
13097 -
13098 - return ret;
13099 -}
13100 -
13101 static int lpass_cpu_daiops_prepare(struct snd_pcm_substream *substream,
13102 struct snd_soc_dai *dai)
13103 {
13104 @@ -269,7 +254,6 @@ const struct snd_soc_dai_ops asoc_qcom_lpass_cpu_dai_ops = {
13105 .startup = lpass_cpu_daiops_startup,
13106 .shutdown = lpass_cpu_daiops_shutdown,
13107 .hw_params = lpass_cpu_daiops_hw_params,
13108 - .hw_free = lpass_cpu_daiops_hw_free,
13109 .prepare = lpass_cpu_daiops_prepare,
13110 .trigger = lpass_cpu_daiops_trigger,
13111 };
13112 diff --git a/sound/soc/qcom/lpass-platform.c b/sound/soc/qcom/lpass-platform.c
13113 index 4c745baa39f73..9acaef81dd74c 100644
13114 --- a/sound/soc/qcom/lpass-platform.c
13115 +++ b/sound/soc/qcom/lpass-platform.c
13116 @@ -61,7 +61,7 @@ static int lpass_platform_pcmops_open(struct snd_pcm_substream *substream)
13117 int ret, dma_ch, dir = substream->stream;
13118 struct lpass_pcm_data *data;
13119
13120 - data = devm_kzalloc(soc_runtime->dev, sizeof(*data), GFP_KERNEL);
13121 + data = kzalloc(sizeof(*data), GFP_KERNEL);
13122 if (!data)
13123 return -ENOMEM;
13124
13125 @@ -119,6 +119,7 @@ static int lpass_platform_pcmops_close(struct snd_pcm_substream *substream)
13126 if (v->free_dma_channel)
13127 v->free_dma_channel(drvdata, data->dma_ch);
13128
13129 + kfree(data);
13130 return 0;
13131 }
13132
13133 diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
13134 index ac2feddc75fdd..ea183922c4ef1 100644
13135 --- a/tools/perf/builtin-stat.c
13136 +++ b/tools/perf/builtin-stat.c
13137 @@ -1671,8 +1671,10 @@ static void setup_system_wide(int forks)
13138 struct evsel *counter;
13139
13140 evlist__for_each_entry(evsel_list, counter) {
13141 - if (!counter->core.system_wide)
13142 + if (!counter->core.system_wide &&
13143 + strcmp(counter->name, "duration_time")) {
13144 return;
13145 + }
13146 }
13147
13148 if (evsel_list->core.nr_entries)
13149 diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
13150 index c5cce3a60476b..8aeaeba48a41f 100644
13151 --- a/tools/perf/util/intel-pt.c
13152 +++ b/tools/perf/util/intel-pt.c
13153 @@ -974,6 +974,8 @@ static void intel_pt_set_pid_tid_cpu(struct intel_pt *pt,
13154
13155 if (queue->tid == -1 || pt->have_sched_switch) {
13156 ptq->tid = machine__get_current_tid(pt->machine, ptq->cpu);
13157 + if (ptq->tid == -1)
13158 + ptq->pid = -1;
13159 thread__zput(ptq->thread);
13160 }
13161
13162 @@ -2488,10 +2490,8 @@ static int intel_pt_context_switch(struct intel_pt *pt, union perf_event *event,
13163 tid = sample->tid;
13164 }
13165
13166 - if (tid == -1) {
13167 - pr_err("context_switch event has no tid\n");
13168 - return -EINVAL;
13169 - }
13170 + if (tid == -1)
13171 + intel_pt_log("context_switch event has no tid\n");
13172
13173 intel_pt_log("context_switch: cpu %d pid %d tid %d time %"PRIu64" tsc %#"PRIx64"\n",
13174 cpu, pid, tid, sample->time, perf_time_to_tsc(sample->time,
13175 diff --git a/tools/testing/radix-tree/idr-test.c b/tools/testing/radix-tree/idr-test.c
13176 index 8995092d541ec..3b796dd5e5772 100644
13177 --- a/tools/testing/radix-tree/idr-test.c
13178 +++ b/tools/testing/radix-tree/idr-test.c
13179 @@ -523,8 +523,27 @@ static void *ida_random_fn(void *arg)
13180 return NULL;
13181 }
13182
13183 +static void *ida_leak_fn(void *arg)
13184 +{
13185 + struct ida *ida = arg;
13186 + time_t s = time(NULL);
13187 + int i, ret;
13188 +
13189 + rcu_register_thread();
13190 +
13191 + do for (i = 0; i < 1000; i++) {
13192 + ret = ida_alloc_range(ida, 128, 128, GFP_KERNEL);
13193 + if (ret >= 0)
13194 + ida_free(ida, 128);
13195 + } while (time(NULL) < s + 2);
13196 +
13197 + rcu_unregister_thread();
13198 + return NULL;
13199 +}
13200 +
13201 void ida_thread_tests(void)
13202 {
13203 + DEFINE_IDA(ida);
13204 pthread_t threads[20];
13205 int i;
13206
13207 @@ -536,6 +555,16 @@ void ida_thread_tests(void)
13208
13209 while (i--)
13210 pthread_join(threads[i], NULL);
13211 +
13212 + for (i = 0; i < ARRAY_SIZE(threads); i++)
13213 + if (pthread_create(&threads[i], NULL, ida_leak_fn, &ida)) {
13214 + perror("creating ida thread");
13215 + exit(1);
13216 + }
13217 +
13218 + while (i--)
13219 + pthread_join(threads[i], NULL);
13220 + assert(ida_is_empty(&ida));
13221 }
13222
13223 void ida_tests(void)
13224 diff --git a/tools/testing/selftests/bpf/progs/test_sysctl_loop1.c b/tools/testing/selftests/bpf/progs/test_sysctl_loop1.c
13225 index d22e438198cf7..9af8822ece477 100644
13226 --- a/tools/testing/selftests/bpf/progs/test_sysctl_loop1.c
13227 +++ b/tools/testing/selftests/bpf/progs/test_sysctl_loop1.c
13228 @@ -18,11 +18,11 @@
13229 #define MAX_ULONG_STR_LEN 7
13230 #define MAX_VALUE_STR_LEN (TCP_MEM_LOOPS * MAX_ULONG_STR_LEN)
13231
13232 +const char tcp_mem_name[] = "net/ipv4/tcp_mem/very_very_very_very_long_pointless_string";
13233 static __always_inline int is_tcp_mem(struct bpf_sysctl *ctx)
13234 {
13235 - volatile char tcp_mem_name[] = "net/ipv4/tcp_mem/very_very_very_very_long_pointless_string";
13236 unsigned char i;
13237 - char name[64];
13238 + char name[sizeof(tcp_mem_name)];
13239 int ret;
13240
13241 memset(name, 0, sizeof(name));
13242 diff --git a/tools/testing/selftests/bpf/progs/test_sysctl_loop2.c b/tools/testing/selftests/bpf/progs/test_sysctl_loop2.c
13243 index cb201cbe11e77..55251046c9b73 100644
13244 --- a/tools/testing/selftests/bpf/progs/test_sysctl_loop2.c
13245 +++ b/tools/testing/selftests/bpf/progs/test_sysctl_loop2.c
13246 @@ -18,11 +18,11 @@
13247 #define MAX_ULONG_STR_LEN 7
13248 #define MAX_VALUE_STR_LEN (TCP_MEM_LOOPS * MAX_ULONG_STR_LEN)
13249
13250 +const char tcp_mem_name[] = "net/ipv4/tcp_mem/very_very_very_very_long_pointless_string_to_stress_byte_loop";
13251 static __attribute__((noinline)) int is_tcp_mem(struct bpf_sysctl *ctx)
13252 {
13253 - volatile char tcp_mem_name[] = "net/ipv4/tcp_mem/very_very_very_very_long_pointless_string_to_stress_byte_loop";
13254 unsigned char i;
13255 - char name[64];
13256 + char name[sizeof(tcp_mem_name)];
13257 int ret;
13258
13259 memset(name, 0, sizeof(name));
13260 diff --git a/tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-inter-event-combined-hist.tc b/tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-inter-event-combined-hist.tc
13261 index f3eb8aacec0e7..a2b0e4eb1fe4c 100644
13262 --- a/tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-inter-event-combined-hist.tc
13263 +++ b/tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-inter-event-combined-hist.tc
13264 @@ -34,12 +34,12 @@ echo 'wakeup_latency u64 lat pid_t pid' >> synthetic_events
13265 echo 'hist:keys=pid:ts1=common_timestamp.usecs if comm=="ping"' >> events/sched/sched_wakeup/trigger
13266 echo 'hist:keys=next_pid:wakeup_lat=common_timestamp.usecs-$ts1:onmatch(sched.sched_wakeup).wakeup_latency($wakeup_lat,next_pid) if next_comm=="ping"' > events/sched/sched_switch/trigger
13267
13268 -echo 'waking+wakeup_latency u64 lat; pid_t pid' >> synthetic_events
13269 -echo 'hist:keys=pid,lat:sort=pid,lat:ww_lat=$waking_lat+$wakeup_lat:onmatch(synthetic.wakeup_latency).waking+wakeup_latency($ww_lat,pid)' >> events/synthetic/wakeup_latency/trigger
13270 -echo 'hist:keys=pid,lat:sort=pid,lat' >> events/synthetic/waking+wakeup_latency/trigger
13271 +echo 'waking_plus_wakeup_latency u64 lat; pid_t pid' >> synthetic_events
13272 +echo 'hist:keys=pid,lat:sort=pid,lat:ww_lat=$waking_lat+$wakeup_lat:onmatch(synthetic.wakeup_latency).waking_plus_wakeup_latency($ww_lat,pid)' >> events/synthetic/wakeup_latency/trigger
13273 +echo 'hist:keys=pid,lat:sort=pid,lat' >> events/synthetic/waking_plus_wakeup_latency/trigger
13274
13275 ping $LOCALHOST -c 3
13276 -if ! grep -q "pid:" events/synthetic/waking+wakeup_latency/hist; then
13277 +if ! grep -q "pid:" events/synthetic/waking_plus_wakeup_latency/hist; then
13278 fail "Failed to create combined histogram"
13279 fi
13280
13281 diff --git a/tools/testing/selftests/net/config b/tools/testing/selftests/net/config
13282 index b8503a8119b07..81fcc25a54db6 100644
13283 --- a/tools/testing/selftests/net/config
13284 +++ b/tools/testing/selftests/net/config
13285 @@ -29,3 +29,4 @@ CONFIG_NET_SCH_FQ=m
13286 CONFIG_NET_SCH_ETF=m
13287 CONFIG_TEST_BLACKHOLE_DEV=m
13288 CONFIG_KALLSYMS=y
13289 +CONFIG_NET_FOU=m
13290 diff --git a/tools/testing/selftests/net/forwarding/vxlan_asymmetric.sh b/tools/testing/selftests/net/forwarding/vxlan_asymmetric.sh
13291 index a0b5f57d6bd31..0727e2012b685 100755
13292 --- a/tools/testing/selftests/net/forwarding/vxlan_asymmetric.sh
13293 +++ b/tools/testing/selftests/net/forwarding/vxlan_asymmetric.sh
13294 @@ -215,10 +215,16 @@ switch_create()
13295
13296 bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10
13297 bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20
13298 +
13299 + sysctl_set net.ipv4.conf.all.rp_filter 0
13300 + sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0
13301 + sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0
13302 }
13303
13304 switch_destroy()
13305 {
13306 + sysctl_restore net.ipv4.conf.all.rp_filter
13307 +
13308 bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 20
13309 bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 10
13310
13311 @@ -359,6 +365,10 @@ ns_switch_create()
13312
13313 bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10
13314 bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20
13315 +
13316 + sysctl_set net.ipv4.conf.all.rp_filter 0
13317 + sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0
13318 + sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0
13319 }
13320 export -f ns_switch_create
13321
13322 diff --git a/tools/testing/selftests/net/forwarding/vxlan_symmetric.sh b/tools/testing/selftests/net/forwarding/vxlan_symmetric.sh
13323 index 1209031bc794d..5d97fa347d75a 100755
13324 --- a/tools/testing/selftests/net/forwarding/vxlan_symmetric.sh
13325 +++ b/tools/testing/selftests/net/forwarding/vxlan_symmetric.sh
13326 @@ -237,10 +237,16 @@ switch_create()
13327
13328 bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10
13329 bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20
13330 +
13331 + sysctl_set net.ipv4.conf.all.rp_filter 0
13332 + sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0
13333 + sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0
13334 }
13335
13336 switch_destroy()
13337 {
13338 + sysctl_restore net.ipv4.conf.all.rp_filter
13339 +
13340 bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 20
13341 bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 10
13342
13343 @@ -402,6 +408,10 @@ ns_switch_create()
13344
13345 bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10
13346 bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20
13347 +
13348 + sysctl_set net.ipv4.conf.all.rp_filter 0
13349 + sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0
13350 + sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0
13351 }
13352 export -f ns_switch_create
13353
13354 diff --git a/tools/testing/selftests/net/rtnetlink.sh b/tools/testing/selftests/net/rtnetlink.sh
13355 index bdbf4b3125b6a..28ea3753da207 100755
13356 --- a/tools/testing/selftests/net/rtnetlink.sh
13357 +++ b/tools/testing/selftests/net/rtnetlink.sh
13358 @@ -521,6 +521,11 @@ kci_test_encap_fou()
13359 return $ksft_skip
13360 fi
13361
13362 + if ! /sbin/modprobe -q -n fou; then
13363 + echo "SKIP: module fou is not found"
13364 + return $ksft_skip
13365 + fi
13366 + /sbin/modprobe -q fou
13367 ip -netns "$testns" fou add port 7777 ipproto 47 2>/dev/null
13368 if [ $? -ne 0 ];then
13369 echo "FAIL: can't add fou port 7777, skipping test"
13370 diff --git a/tools/testing/selftests/powerpc/eeh/eeh-basic.sh b/tools/testing/selftests/powerpc/eeh/eeh-basic.sh
13371 index f988d2f42e8f2..cf001a2c69420 100755
13372 --- a/tools/testing/selftests/powerpc/eeh/eeh-basic.sh
13373 +++ b/tools/testing/selftests/powerpc/eeh/eeh-basic.sh
13374 @@ -1,17 +1,19 @@
13375 #!/bin/sh
13376 # SPDX-License-Identifier: GPL-2.0-only
13377
13378 +KSELFTESTS_SKIP=4
13379 +
13380 . ./eeh-functions.sh
13381
13382 if ! eeh_supported ; then
13383 echo "EEH not supported on this system, skipping"
13384 - exit 0;
13385 + exit $KSELFTESTS_SKIP;
13386 fi
13387
13388 if [ ! -e "/sys/kernel/debug/powerpc/eeh_dev_check" ] && \
13389 [ ! -e "/sys/kernel/debug/powerpc/eeh_dev_break" ] ; then
13390 echo "debugfs EEH testing files are missing. Is debugfs mounted?"
13391 - exit 1;
13392 + exit $KSELFTESTS_SKIP;
13393 fi
13394
13395 pre_lspci=`mktemp`
13396 @@ -79,4 +81,5 @@ echo "$failed devices failed to recover ($dev_count tested)"
13397 lspci | diff -u $pre_lspci -
13398 rm -f $pre_lspci
13399
13400 -exit $failed
13401 +test "$failed" == 0
13402 +exit $?