Magellan Linux

Contents of /trunk/kernel-alx/patches-4.14/0121-4.14.22-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (show annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 5 months ago) by niro
File size: 165170 byte(s)
-added up to patches-4.14.79
1 diff --git a/Makefile b/Makefile
2 index 68d70485b088..03d41143900c 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 14
9 -SUBLEVEL = 21
10 +SUBLEVEL = 22
11 EXTRAVERSION =
12 NAME = Petit Gorille
13
14 diff --git a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi
15 index e5b061469bf8..4714a59fd86d 100644
16 --- a/arch/arm/boot/dts/am4372.dtsi
17 +++ b/arch/arm/boot/dts/am4372.dtsi
18 @@ -927,7 +927,8 @@
19 reg = <0x48038000 0x2000>,
20 <0x46000000 0x400000>;
21 reg-names = "mpu", "dat";
22 - interrupts = <80>, <81>;
23 + interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>,
24 + <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>;
25 interrupt-names = "tx", "rx";
26 status = "disabled";
27 dmas = <&edma 8 2>,
28 @@ -941,7 +942,8 @@
29 reg = <0x4803C000 0x2000>,
30 <0x46400000 0x400000>;
31 reg-names = "mpu", "dat";
32 - interrupts = <82>, <83>;
33 + interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>,
34 + <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>;
35 interrupt-names = "tx", "rx";
36 status = "disabled";
37 dmas = <&edma 10 2>,
38 diff --git a/arch/arm/boot/dts/am437x-cm-t43.dts b/arch/arm/boot/dts/am437x-cm-t43.dts
39 index 9e92d480576b..3b9a94c274a7 100644
40 --- a/arch/arm/boot/dts/am437x-cm-t43.dts
41 +++ b/arch/arm/boot/dts/am437x-cm-t43.dts
42 @@ -301,8 +301,8 @@
43 status = "okay";
44 pinctrl-names = "default";
45 pinctrl-0 = <&spi0_pins>;
46 - dmas = <&edma 16
47 - &edma 17>;
48 + dmas = <&edma 16 0
49 + &edma 17 0>;
50 dma-names = "tx0", "rx0";
51
52 flash: w25q64cvzpig@0 {
53 diff --git a/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts b/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts
54 index 38faa90007d7..2fa5eb4bd402 100644
55 --- a/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts
56 +++ b/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts
57 @@ -72,7 +72,8 @@
58 };
59
60 &gpmc {
61 - ranges = <1 0 0x08000000 0x1000000>; /* CS1: 16MB for LAN9221 */
62 + ranges = <0 0 0x30000000 0x1000000 /* CS0: 16MB for NAND */
63 + 1 0 0x2c000000 0x1000000>; /* CS1: 16MB for LAN9221 */
64
65 ethernet@gpmc {
66 pinctrl-names = "default";
67 diff --git a/arch/arm/boot/dts/logicpd-som-lv.dtsi b/arch/arm/boot/dts/logicpd-som-lv.dtsi
68 index 26cce4d18405..4f2c5ec75714 100644
69 --- a/arch/arm/boot/dts/logicpd-som-lv.dtsi
70 +++ b/arch/arm/boot/dts/logicpd-som-lv.dtsi
71 @@ -37,7 +37,7 @@
72 };
73
74 &gpmc {
75 - ranges = <0 0 0x00000000 0x1000000>; /* CS0: 16MB for NAND */
76 + ranges = <0 0 0x30000000 0x1000000>; /* CS0: 16MB for NAND */
77
78 nand@0,0 {
79 compatible = "ti,omap2-nand";
80 @@ -121,7 +121,7 @@
81
82 &mmc3 {
83 interrupts-extended = <&intc 94 &omap3_pmx_core2 0x46>;
84 - pinctrl-0 = <&mmc3_pins>;
85 + pinctrl-0 = <&mmc3_pins &wl127x_gpio>;
86 pinctrl-names = "default";
87 vmmc-supply = <&wl12xx_vmmc>;
88 non-removable;
89 @@ -132,8 +132,8 @@
90 wlcore: wlcore@2 {
91 compatible = "ti,wl1273";
92 reg = <2>;
93 - interrupt-parent = <&gpio5>;
94 - interrupts = <24 IRQ_TYPE_LEVEL_HIGH>; /* gpio 152 */
95 + interrupt-parent = <&gpio1>;
96 + interrupts = <2 IRQ_TYPE_LEVEL_HIGH>; /* gpio 2 */
97 ref-clock-frequency = <26000000>;
98 };
99 };
100 @@ -157,8 +157,6 @@
101 OMAP3_CORE1_IOPAD(0x2166, PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc2_dat5.sdmmc3_dat1 */
102 OMAP3_CORE1_IOPAD(0x2168, PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc2_dat6.sdmmc3_dat2 */
103 OMAP3_CORE1_IOPAD(0x216a, PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc2_dat6.sdmmc3_dat3 */
104 - OMAP3_CORE1_IOPAD(0x2184, PIN_INPUT_PULLUP | MUX_MODE4) /* mcbsp4_clkx.gpio_152 */
105 - OMAP3_CORE1_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4) /* sys_boot1.gpio_3 */
106 OMAP3_CORE1_IOPAD(0x21d0, PIN_INPUT_PULLUP | MUX_MODE3) /* mcspi1_cs1.sdmmc3_cmd */
107 OMAP3_CORE1_IOPAD(0x21d2, PIN_INPUT_PULLUP | MUX_MODE3) /* mcspi1_cs2.sdmmc_clk */
108 >;
109 @@ -228,6 +226,12 @@
110 OMAP3_WKUP_IOPAD(0x2a0e, PIN_OUTPUT | MUX_MODE4) /* sys_boot2.gpio_4 */
111 >;
112 };
113 + wl127x_gpio: pinmux_wl127x_gpio_pin {
114 + pinctrl-single,pins = <
115 + OMAP3_WKUP_IOPAD(0x2a0c, PIN_INPUT | MUX_MODE4) /* sys_boot0.gpio_2 */
116 + OMAP3_WKUP_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4) /* sys_boot1.gpio_3 */
117 + >;
118 + };
119 };
120
121 &omap3_pmx_core2 {
122 diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
123 index 64d00f5893a6..28d10abd8b04 100644
124 --- a/arch/arm/boot/dts/omap4.dtsi
125 +++ b/arch/arm/boot/dts/omap4.dtsi
126 @@ -354,7 +354,7 @@
127 elm: elm@48078000 {
128 compatible = "ti,am3352-elm";
129 reg = <0x48078000 0x2000>;
130 - interrupts = <4>;
131 + interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>;
132 ti,hwmods = "elm";
133 status = "disabled";
134 };
135 @@ -861,14 +861,12 @@
136 usbhsohci: ohci@4a064800 {
137 compatible = "ti,ohci-omap3";
138 reg = <0x4a064800 0x400>;
139 - interrupt-parent = <&gic>;
140 interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
141 };
142
143 usbhsehci: ehci@4a064c00 {
144 compatible = "ti,ehci-omap";
145 reg = <0x4a064c00 0x400>;
146 - interrupt-parent = <&gic>;
147 interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
148 };
149 };
150 diff --git a/arch/arm/common/bL_switcher_dummy_if.c b/arch/arm/common/bL_switcher_dummy_if.c
151 index 4c10c6452678..f4dc1714a79e 100644
152 --- a/arch/arm/common/bL_switcher_dummy_if.c
153 +++ b/arch/arm/common/bL_switcher_dummy_if.c
154 @@ -57,3 +57,7 @@ static struct miscdevice bL_switcher_device = {
155 &bL_switcher_fops
156 };
157 module_misc_device(bL_switcher_device);
158 +
159 +MODULE_AUTHOR("Nicolas Pitre <nico@linaro.org>");
160 +MODULE_LICENSE("GPL v2");
161 +MODULE_DESCRIPTION("big.LITTLE switcher dummy user interface");
162 diff --git a/arch/arm/mach-omap2/omap-secure.c b/arch/arm/mach-omap2/omap-secure.c
163 index 5ac122e88f67..9ff92050053c 100644
164 --- a/arch/arm/mach-omap2/omap-secure.c
165 +++ b/arch/arm/mach-omap2/omap-secure.c
166 @@ -73,6 +73,25 @@ phys_addr_t omap_secure_ram_mempool_base(void)
167 return omap_secure_memblock_base;
168 }
169
170 +u32 omap3_save_secure_ram(void __iomem *addr, int size)
171 +{
172 + u32 ret;
173 + u32 param[5];
174 +
175 + if (size != OMAP3_SAVE_SECURE_RAM_SZ)
176 + return OMAP3_SAVE_SECURE_RAM_SZ;
177 +
178 + param[0] = 4; /* Number of arguments */
179 + param[1] = __pa(addr); /* Physical address for saving */
180 + param[2] = 0;
181 + param[3] = 1;
182 + param[4] = 1;
183 +
184 + ret = save_secure_ram_context(__pa(param));
185 +
186 + return ret;
187 +}
188 +
189 /**
190 * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls
191 * @idx: The PPA API index
192 diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
193 index bae263fba640..c509cde71f93 100644
194 --- a/arch/arm/mach-omap2/omap-secure.h
195 +++ b/arch/arm/mach-omap2/omap-secure.h
196 @@ -31,6 +31,8 @@
197 /* Maximum Secure memory storage size */
198 #define OMAP_SECURE_RAM_STORAGE (88 * SZ_1K)
199
200 +#define OMAP3_SAVE_SECURE_RAM_SZ 0x803F
201 +
202 /* Secure low power HAL API index */
203 #define OMAP4_HAL_SAVESECURERAM_INDEX 0x1a
204 #define OMAP4_HAL_SAVEHW_INDEX 0x1b
205 @@ -65,6 +67,8 @@ extern u32 omap_smc2(u32 id, u32 falg, u32 pargs);
206 extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs);
207 extern phys_addr_t omap_secure_ram_mempool_base(void);
208 extern int omap_secure_ram_reserve_memblock(void);
209 +extern u32 save_secure_ram_context(u32 args_pa);
210 +extern u32 omap3_save_secure_ram(void __iomem *save_regs, int size);
211
212 extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
213 u32 arg1, u32 arg2, u32 arg3, u32 arg4);
214 diff --git a/arch/arm/mach-omap2/pm.h b/arch/arm/mach-omap2/pm.h
215 index b668719b9b25..8e30772cfe32 100644
216 --- a/arch/arm/mach-omap2/pm.h
217 +++ b/arch/arm/mach-omap2/pm.h
218 @@ -81,10 +81,6 @@ extern unsigned int omap3_do_wfi_sz;
219 /* ... and its pointer from SRAM after copy */
220 extern void (*omap3_do_wfi_sram)(void);
221
222 -/* save_secure_ram_context function pointer and size, for copy to SRAM */
223 -extern int save_secure_ram_context(u32 *addr);
224 -extern unsigned int save_secure_ram_context_sz;
225 -
226 extern void omap3_save_scratchpad_contents(void);
227
228 #define PM_RTA_ERRATUM_i608 (1 << 0)
229 diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
230 index 841ba19d64a6..36c55547137c 100644
231 --- a/arch/arm/mach-omap2/pm34xx.c
232 +++ b/arch/arm/mach-omap2/pm34xx.c
233 @@ -48,6 +48,7 @@
234 #include "prm3xxx.h"
235 #include "pm.h"
236 #include "sdrc.h"
237 +#include "omap-secure.h"
238 #include "sram.h"
239 #include "control.h"
240 #include "vc.h"
241 @@ -66,7 +67,6 @@ struct power_state {
242
243 static LIST_HEAD(pwrst_list);
244
245 -static int (*_omap_save_secure_sram)(u32 *addr);
246 void (*omap3_do_wfi_sram)(void);
247
248 static struct powerdomain *mpu_pwrdm, *neon_pwrdm;
249 @@ -121,8 +121,8 @@ static void omap3_save_secure_ram_context(void)
250 * will hang the system.
251 */
252 pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON);
253 - ret = _omap_save_secure_sram((u32 *)(unsigned long)
254 - __pa(omap3_secure_ram_storage));
255 + ret = omap3_save_secure_ram(omap3_secure_ram_storage,
256 + OMAP3_SAVE_SECURE_RAM_SZ);
257 pwrdm_set_next_pwrst(mpu_pwrdm, mpu_next_state);
258 /* Following is for error tracking, it should not happen */
259 if (ret) {
260 @@ -434,15 +434,10 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
261 *
262 * The minimum set of functions is pushed to SRAM for execution:
263 * - omap3_do_wfi for erratum i581 WA,
264 - * - save_secure_ram_context for security extensions.
265 */
266 void omap_push_sram_idle(void)
267 {
268 omap3_do_wfi_sram = omap_sram_push(omap3_do_wfi, omap3_do_wfi_sz);
269 -
270 - if (omap_type() != OMAP2_DEVICE_TYPE_GP)
271 - _omap_save_secure_sram = omap_sram_push(save_secure_ram_context,
272 - save_secure_ram_context_sz);
273 }
274
275 static void __init pm_errata_configure(void)
276 @@ -553,7 +548,7 @@ int __init omap3_pm_init(void)
277 clkdm_add_wkdep(neon_clkdm, mpu_clkdm);
278 if (omap_type() != OMAP2_DEVICE_TYPE_GP) {
279 omap3_secure_ram_storage =
280 - kmalloc(0x803F, GFP_KERNEL);
281 + kmalloc(OMAP3_SAVE_SECURE_RAM_SZ, GFP_KERNEL);
282 if (!omap3_secure_ram_storage)
283 pr_err("Memory allocation failed when allocating for secure sram context\n");
284
285 diff --git a/arch/arm/mach-omap2/prm33xx.c b/arch/arm/mach-omap2/prm33xx.c
286 index d2c5bcabdbeb..ebaf80d72a10 100644
287 --- a/arch/arm/mach-omap2/prm33xx.c
288 +++ b/arch/arm/mach-omap2/prm33xx.c
289 @@ -176,17 +176,6 @@ static int am33xx_pwrdm_read_pwrst(struct powerdomain *pwrdm)
290 return v;
291 }
292
293 -static int am33xx_pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
294 -{
295 - u32 v;
296 -
297 - v = am33xx_prm_read_reg(pwrdm->prcm_offs, pwrdm->pwrstst_offs);
298 - v &= AM33XX_LASTPOWERSTATEENTERED_MASK;
299 - v >>= AM33XX_LASTPOWERSTATEENTERED_SHIFT;
300 -
301 - return v;
302 -}
303 -
304 static int am33xx_pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
305 {
306 am33xx_prm_rmw_reg_bits(AM33XX_LOWPOWERSTATECHANGE_MASK,
307 @@ -357,7 +346,6 @@ struct pwrdm_ops am33xx_pwrdm_operations = {
308 .pwrdm_set_next_pwrst = am33xx_pwrdm_set_next_pwrst,
309 .pwrdm_read_next_pwrst = am33xx_pwrdm_read_next_pwrst,
310 .pwrdm_read_pwrst = am33xx_pwrdm_read_pwrst,
311 - .pwrdm_read_prev_pwrst = am33xx_pwrdm_read_prev_pwrst,
312 .pwrdm_set_logic_retst = am33xx_pwrdm_set_logic_retst,
313 .pwrdm_read_logic_pwrst = am33xx_pwrdm_read_logic_pwrst,
314 .pwrdm_read_logic_retst = am33xx_pwrdm_read_logic_retst,
315 diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S
316 index fa5fd24f524c..22daf4efed68 100644
317 --- a/arch/arm/mach-omap2/sleep34xx.S
318 +++ b/arch/arm/mach-omap2/sleep34xx.S
319 @@ -93,20 +93,13 @@ ENTRY(enable_omap3630_toggle_l2_on_restore)
320 ENDPROC(enable_omap3630_toggle_l2_on_restore)
321
322 /*
323 - * Function to call rom code to save secure ram context. This gets
324 - * relocated to SRAM, so it can be all in .data section. Otherwise
325 - * we need to initialize api_params separately.
326 + * Function to call rom code to save secure ram context.
327 + *
328 + * r0 = physical address of the parameters
329 */
330 - .data
331 - .align 3
332 ENTRY(save_secure_ram_context)
333 stmfd sp!, {r4 - r11, lr} @ save registers on stack
334 - adr r3, api_params @ r3 points to parameters
335 - str r0, [r3,#0x4] @ r0 has sdram address
336 - ldr r12, high_mask
337 - and r3, r3, r12
338 - ldr r12, sram_phy_addr_mask
339 - orr r3, r3, r12
340 + mov r3, r0 @ physical address of parameters
341 mov r0, #25 @ set service ID for PPA
342 mov r12, r0 @ copy secure service ID in r12
343 mov r1, #0 @ set task id for ROM code in r1
344 @@ -120,18 +113,7 @@ ENTRY(save_secure_ram_context)
345 nop
346 nop
347 ldmfd sp!, {r4 - r11, pc}
348 - .align
349 -sram_phy_addr_mask:
350 - .word SRAM_BASE_P
351 -high_mask:
352 - .word 0xffff
353 -api_params:
354 - .word 0x4, 0x0, 0x0, 0x1, 0x1
355 ENDPROC(save_secure_ram_context)
356 -ENTRY(save_secure_ram_context_sz)
357 - .word . - save_secure_ram_context
358 -
359 - .text
360
361 /*
362 * ======================
363 diff --git a/arch/arm64/boot/dts/mediatek/mt8173.dtsi b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
364 index b99a27372965..da64e1cab233 100644
365 --- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi
366 +++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
367 @@ -81,6 +81,7 @@
368 reg = <0x000>;
369 enable-method = "psci";
370 cpu-idle-states = <&CPU_SLEEP_0>;
371 + #cooling-cells = <2>;
372 };
373
374 cpu1: cpu@1 {
375 @@ -97,6 +98,7 @@
376 reg = <0x100>;
377 enable-method = "psci";
378 cpu-idle-states = <&CPU_SLEEP_0>;
379 + #cooling-cells = <2>;
380 };
381
382 cpu3: cpu@101 {
383 diff --git a/arch/m68k/kernel/vmlinux-nommu.lds b/arch/m68k/kernel/vmlinux-nommu.lds
384 index 3aa571a513b5..cf6edda38971 100644
385 --- a/arch/m68k/kernel/vmlinux-nommu.lds
386 +++ b/arch/m68k/kernel/vmlinux-nommu.lds
387 @@ -45,6 +45,8 @@ SECTIONS {
388 .text : {
389 HEAD_TEXT
390 TEXT_TEXT
391 + IRQENTRY_TEXT
392 + SOFTIRQENTRY_TEXT
393 SCHED_TEXT
394 CPUIDLE_TEXT
395 LOCK_TEXT
396 diff --git a/arch/m68k/kernel/vmlinux-std.lds b/arch/m68k/kernel/vmlinux-std.lds
397 index 89172b8974b9..625a5785804f 100644
398 --- a/arch/m68k/kernel/vmlinux-std.lds
399 +++ b/arch/m68k/kernel/vmlinux-std.lds
400 @@ -16,6 +16,8 @@ SECTIONS
401 .text : {
402 HEAD_TEXT
403 TEXT_TEXT
404 + IRQENTRY_TEXT
405 + SOFTIRQENTRY_TEXT
406 SCHED_TEXT
407 CPUIDLE_TEXT
408 LOCK_TEXT
409 diff --git a/arch/m68k/kernel/vmlinux-sun3.lds b/arch/m68k/kernel/vmlinux-sun3.lds
410 index 293990efc917..9868270b0984 100644
411 --- a/arch/m68k/kernel/vmlinux-sun3.lds
412 +++ b/arch/m68k/kernel/vmlinux-sun3.lds
413 @@ -16,6 +16,8 @@ SECTIONS
414 .text : {
415 HEAD_TEXT
416 TEXT_TEXT
417 + IRQENTRY_TEXT
418 + SOFTIRQENTRY_TEXT
419 SCHED_TEXT
420 CPUIDLE_TEXT
421 LOCK_TEXT
422 diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
423 index b4209a68b85d..fce545774d50 100644
424 --- a/arch/powerpc/perf/core-book3s.c
425 +++ b/arch/powerpc/perf/core-book3s.c
426 @@ -1419,7 +1419,7 @@ static int collect_events(struct perf_event *group, int max_count,
427 int n = 0;
428 struct perf_event *event;
429
430 - if (!is_software_event(group)) {
431 + if (group->pmu->task_ctx_nr == perf_hw_context) {
432 if (n >= max_count)
433 return -1;
434 ctrs[n] = group;
435 @@ -1427,7 +1427,7 @@ static int collect_events(struct perf_event *group, int max_count,
436 events[n++] = group->hw.config;
437 }
438 list_for_each_entry(event, &group->sibling_list, group_entry) {
439 - if (!is_software_event(event) &&
440 + if (event->pmu->task_ctx_nr == perf_hw_context &&
441 event->state != PERF_EVENT_STATE_OFF) {
442 if (n >= max_count)
443 return -1;
444 diff --git a/arch/powerpc/perf/imc-pmu.c b/arch/powerpc/perf/imc-pmu.c
445 index cf64e16f92c2..da6ba9ba73ed 100644
446 --- a/arch/powerpc/perf/imc-pmu.c
447 +++ b/arch/powerpc/perf/imc-pmu.c
448 @@ -308,6 +308,19 @@ static int ppc_nest_imc_cpu_offline(unsigned int cpu)
449 if (!cpumask_test_and_clear_cpu(cpu, &nest_imc_cpumask))
450 return 0;
451
452 + /*
453 + * Check whether nest_imc is registered. We could end up here if the
454 + * cpuhotplug callback registration fails. i.e, callback invokes the
455 + * offline path for all successfully registered nodes. At this stage,
456 + * nest_imc pmu will not be registered and we should return here.
457 + *
458 + * We return with a zero since this is not an offline failure. And
459 + * cpuhp_setup_state() returns the actual failure reason to the caller,
460 + * which in turn will call the cleanup routine.
461 + */
462 + if (!nest_pmus)
463 + return 0;
464 +
465 /*
466 * Now that this cpu is one of the designated,
467 * find a next cpu a) which is online and b) in same chip.
468 diff --git a/arch/s390/include/uapi/asm/virtio-ccw.h b/arch/s390/include/uapi/asm/virtio-ccw.h
469 index 967aad390105..9e62587d9472 100644
470 --- a/arch/s390/include/uapi/asm/virtio-ccw.h
471 +++ b/arch/s390/include/uapi/asm/virtio-ccw.h
472 @@ -1,4 +1,4 @@
473 -/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
474 +/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
475 /*
476 * Definitions for virtio-ccw devices.
477 *
478 diff --git a/arch/x86/crypto/twofish-x86_64-asm_64-3way.S b/arch/x86/crypto/twofish-x86_64-asm_64-3way.S
479 index 1c3b7ceb36d2..e7273a606a07 100644
480 --- a/arch/x86/crypto/twofish-x86_64-asm_64-3way.S
481 +++ b/arch/x86/crypto/twofish-x86_64-asm_64-3way.S
482 @@ -55,29 +55,31 @@
483 #define RAB1bl %bl
484 #define RAB2bl %cl
485
486 +#define CD0 0x0(%rsp)
487 +#define CD1 0x8(%rsp)
488 +#define CD2 0x10(%rsp)
489 +
490 +# used only before/after all rounds
491 #define RCD0 %r8
492 #define RCD1 %r9
493 #define RCD2 %r10
494
495 -#define RCD0d %r8d
496 -#define RCD1d %r9d
497 -#define RCD2d %r10d
498 -
499 -#define RX0 %rbp
500 -#define RX1 %r11
501 -#define RX2 %r12
502 +# used only during rounds
503 +#define RX0 %r8
504 +#define RX1 %r9
505 +#define RX2 %r10
506
507 -#define RX0d %ebp
508 -#define RX1d %r11d
509 -#define RX2d %r12d
510 +#define RX0d %r8d
511 +#define RX1d %r9d
512 +#define RX2d %r10d
513
514 -#define RY0 %r13
515 -#define RY1 %r14
516 -#define RY2 %r15
517 +#define RY0 %r11
518 +#define RY1 %r12
519 +#define RY2 %r13
520
521 -#define RY0d %r13d
522 -#define RY1d %r14d
523 -#define RY2d %r15d
524 +#define RY0d %r11d
525 +#define RY1d %r12d
526 +#define RY2d %r13d
527
528 #define RT0 %rdx
529 #define RT1 %rsi
530 @@ -85,6 +87,8 @@
531 #define RT0d %edx
532 #define RT1d %esi
533
534 +#define RT1bl %sil
535 +
536 #define do16bit_ror(rot, op1, op2, T0, T1, tmp1, tmp2, ab, dst) \
537 movzbl ab ## bl, tmp2 ## d; \
538 movzbl ab ## bh, tmp1 ## d; \
539 @@ -92,6 +96,11 @@
540 op1##l T0(CTX, tmp2, 4), dst ## d; \
541 op2##l T1(CTX, tmp1, 4), dst ## d;
542
543 +#define swap_ab_with_cd(ab, cd, tmp) \
544 + movq cd, tmp; \
545 + movq ab, cd; \
546 + movq tmp, ab;
547 +
548 /*
549 * Combined G1 & G2 function. Reordered with help of rotates to have moves
550 * at begining.
551 @@ -110,15 +119,15 @@
552 /* G1,2 && G2,2 */ \
553 do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 0, x ## 0); \
554 do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 0, y ## 0); \
555 - xchgq cd ## 0, ab ## 0; \
556 + swap_ab_with_cd(ab ## 0, cd ## 0, RT0); \
557 \
558 do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 1, x ## 1); \
559 do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 1, y ## 1); \
560 - xchgq cd ## 1, ab ## 1; \
561 + swap_ab_with_cd(ab ## 1, cd ## 1, RT0); \
562 \
563 do16bit_ror(32, xor, xor, Tx2, Tx3, RT0, RT1, ab ## 2, x ## 2); \
564 do16bit_ror(16, xor, xor, Ty3, Ty0, RT0, RT1, ab ## 2, y ## 2); \
565 - xchgq cd ## 2, ab ## 2;
566 + swap_ab_with_cd(ab ## 2, cd ## 2, RT0);
567
568 #define enc_round_end(ab, x, y, n) \
569 addl y ## d, x ## d; \
570 @@ -168,6 +177,16 @@
571 decrypt_round3(ba, dc, (n*2)+1); \
572 decrypt_round3(ba, dc, (n*2));
573
574 +#define push_cd() \
575 + pushq RCD2; \
576 + pushq RCD1; \
577 + pushq RCD0;
578 +
579 +#define pop_cd() \
580 + popq RCD0; \
581 + popq RCD1; \
582 + popq RCD2;
583 +
584 #define inpack3(in, n, xy, m) \
585 movq 4*(n)(in), xy ## 0; \
586 xorq w+4*m(CTX), xy ## 0; \
587 @@ -223,11 +242,8 @@ ENTRY(__twofish_enc_blk_3way)
588 * %rdx: src, RIO
589 * %rcx: bool, if true: xor output
590 */
591 - pushq %r15;
592 - pushq %r14;
593 pushq %r13;
594 pushq %r12;
595 - pushq %rbp;
596 pushq %rbx;
597
598 pushq %rcx; /* bool xor */
599 @@ -235,40 +251,36 @@ ENTRY(__twofish_enc_blk_3way)
600
601 inpack_enc3();
602
603 - encrypt_cycle3(RAB, RCD, 0);
604 - encrypt_cycle3(RAB, RCD, 1);
605 - encrypt_cycle3(RAB, RCD, 2);
606 - encrypt_cycle3(RAB, RCD, 3);
607 - encrypt_cycle3(RAB, RCD, 4);
608 - encrypt_cycle3(RAB, RCD, 5);
609 - encrypt_cycle3(RAB, RCD, 6);
610 - encrypt_cycle3(RAB, RCD, 7);
611 + push_cd();
612 + encrypt_cycle3(RAB, CD, 0);
613 + encrypt_cycle3(RAB, CD, 1);
614 + encrypt_cycle3(RAB, CD, 2);
615 + encrypt_cycle3(RAB, CD, 3);
616 + encrypt_cycle3(RAB, CD, 4);
617 + encrypt_cycle3(RAB, CD, 5);
618 + encrypt_cycle3(RAB, CD, 6);
619 + encrypt_cycle3(RAB, CD, 7);
620 + pop_cd();
621
622 popq RIO; /* dst */
623 - popq %rbp; /* bool xor */
624 + popq RT1; /* bool xor */
625
626 - testb %bpl, %bpl;
627 + testb RT1bl, RT1bl;
628 jnz .L__enc_xor3;
629
630 outunpack_enc3(mov);
631
632 popq %rbx;
633 - popq %rbp;
634 popq %r12;
635 popq %r13;
636 - popq %r14;
637 - popq %r15;
638 ret;
639
640 .L__enc_xor3:
641 outunpack_enc3(xor);
642
643 popq %rbx;
644 - popq %rbp;
645 popq %r12;
646 popq %r13;
647 - popq %r14;
648 - popq %r15;
649 ret;
650 ENDPROC(__twofish_enc_blk_3way)
651
652 @@ -278,35 +290,31 @@ ENTRY(twofish_dec_blk_3way)
653 * %rsi: dst
654 * %rdx: src, RIO
655 */
656 - pushq %r15;
657 - pushq %r14;
658 pushq %r13;
659 pushq %r12;
660 - pushq %rbp;
661 pushq %rbx;
662
663 pushq %rsi; /* dst */
664
665 inpack_dec3();
666
667 - decrypt_cycle3(RAB, RCD, 7);
668 - decrypt_cycle3(RAB, RCD, 6);
669 - decrypt_cycle3(RAB, RCD, 5);
670 - decrypt_cycle3(RAB, RCD, 4);
671 - decrypt_cycle3(RAB, RCD, 3);
672 - decrypt_cycle3(RAB, RCD, 2);
673 - decrypt_cycle3(RAB, RCD, 1);
674 - decrypt_cycle3(RAB, RCD, 0);
675 + push_cd();
676 + decrypt_cycle3(RAB, CD, 7);
677 + decrypt_cycle3(RAB, CD, 6);
678 + decrypt_cycle3(RAB, CD, 5);
679 + decrypt_cycle3(RAB, CD, 4);
680 + decrypt_cycle3(RAB, CD, 3);
681 + decrypt_cycle3(RAB, CD, 2);
682 + decrypt_cycle3(RAB, CD, 1);
683 + decrypt_cycle3(RAB, CD, 0);
684 + pop_cd();
685
686 popq RIO; /* dst */
687
688 outunpack_dec3();
689
690 popq %rbx;
691 - popq %rbp;
692 popq %r12;
693 popq %r13;
694 - popq %r14;
695 - popq %r15;
696 ret;
697 ENDPROC(twofish_dec_blk_3way)
698 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
699 index dd35c6c50516..5ffde16253cb 100644
700 --- a/arch/x86/kvm/vmx.c
701 +++ b/arch/x86/kvm/vmx.c
702 @@ -6950,7 +6950,6 @@ static __init int hardware_setup(void)
703 goto out;
704 }
705
706 - vmx_io_bitmap_b = (unsigned long *)__get_free_page(GFP_KERNEL);
707 memset(vmx_vmread_bitmap, 0xff, PAGE_SIZE);
708 memset(vmx_vmwrite_bitmap, 0xff, PAGE_SIZE);
709
710 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
711 index f97358423f9c..0dcd7bf45dc1 100644
712 --- a/arch/x86/kvm/x86.c
713 +++ b/arch/x86/kvm/x86.c
714 @@ -2926,6 +2926,12 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
715 kvm_x86_ops->vcpu_put(vcpu);
716 kvm_put_guest_fpu(vcpu);
717 vcpu->arch.last_host_tsc = rdtsc();
718 + /*
719 + * If userspace has set any breakpoints or watchpoints, dr6 is restored
720 + * on every vmexit, but if not, we might have a stale dr6 from the
721 + * guest. do_debug expects dr6 to be cleared after it runs, do the same.
722 + */
723 + set_debugreg(0, 6);
724 }
725
726 static int kvm_vcpu_ioctl_get_lapic(struct kvm_vcpu *vcpu,
727 @@ -7474,6 +7480,29 @@ int kvm_task_switch(struct kvm_vcpu *vcpu, u16 tss_selector, int idt_index,
728 }
729 EXPORT_SYMBOL_GPL(kvm_task_switch);
730
731 +int kvm_valid_sregs(struct kvm_vcpu *vcpu, struct kvm_sregs *sregs)
732 +{
733 + if ((sregs->efer & EFER_LME) && (sregs->cr0 & X86_CR0_PG_BIT)) {
734 + /*
735 + * When EFER.LME and CR0.PG are set, the processor is in
736 + * 64-bit mode (though maybe in a 32-bit code segment).
737 + * CR4.PAE and EFER.LMA must be set.
738 + */
739 + if (!(sregs->cr4 & X86_CR4_PAE_BIT)
740 + || !(sregs->efer & EFER_LMA))
741 + return -EINVAL;
742 + } else {
743 + /*
744 + * Not in 64-bit mode: EFER.LMA is clear and the code
745 + * segment cannot be 64-bit.
746 + */
747 + if (sregs->efer & EFER_LMA || sregs->cs.l)
748 + return -EINVAL;
749 + }
750 +
751 + return 0;
752 +}
753 +
754 int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
755 struct kvm_sregs *sregs)
756 {
757 @@ -7486,6 +7515,9 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
758 (sregs->cr4 & X86_CR4_OSXSAVE))
759 return -EINVAL;
760
761 + if (kvm_valid_sregs(vcpu, sregs))
762 + return -EINVAL;
763 +
764 apic_base_msr.data = sregs->apic_base;
765 apic_base_msr.host_initiated = true;
766 if (kvm_set_apic_base(vcpu, &apic_base_msr))
767 diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
768 index bb120e59c597..7bebdd0273d3 100644
769 --- a/arch/x86/mm/ioremap.c
770 +++ b/arch/x86/mm/ioremap.c
771 @@ -349,11 +349,11 @@ void iounmap(volatile void __iomem *addr)
772 return;
773 }
774
775 + mmiotrace_iounmap(addr);
776 +
777 addr = (volatile void __iomem *)
778 (PAGE_MASK & (unsigned long __force)addr);
779
780 - mmiotrace_iounmap(addr);
781 -
782 /* Use the vm area unlocked, assuming the caller
783 ensures there isn't another iounmap for the same address
784 in parallel. Reuse of the virtual address is prevented by
785 diff --git a/arch/x86/mm/kmmio.c b/arch/x86/mm/kmmio.c
786 index aa44c3aa4cd5..7c8686709636 100644
787 --- a/arch/x86/mm/kmmio.c
788 +++ b/arch/x86/mm/kmmio.c
789 @@ -435,17 +435,18 @@ int register_kmmio_probe(struct kmmio_probe *p)
790 unsigned long flags;
791 int ret = 0;
792 unsigned long size = 0;
793 + unsigned long addr = p->addr & PAGE_MASK;
794 const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK);
795 unsigned int l;
796 pte_t *pte;
797
798 spin_lock_irqsave(&kmmio_lock, flags);
799 - if (get_kmmio_probe(p->addr)) {
800 + if (get_kmmio_probe(addr)) {
801 ret = -EEXIST;
802 goto out;
803 }
804
805 - pte = lookup_address(p->addr, &l);
806 + pte = lookup_address(addr, &l);
807 if (!pte) {
808 ret = -EINVAL;
809 goto out;
810 @@ -454,7 +455,7 @@ int register_kmmio_probe(struct kmmio_probe *p)
811 kmmio_count++;
812 list_add_rcu(&p->list, &kmmio_probes);
813 while (size < size_lim) {
814 - if (add_kmmio_fault_page(p->addr + size))
815 + if (add_kmmio_fault_page(addr + size))
816 pr_err("Unable to set page fault.\n");
817 size += page_level_size(l);
818 }
819 @@ -528,19 +529,20 @@ void unregister_kmmio_probe(struct kmmio_probe *p)
820 {
821 unsigned long flags;
822 unsigned long size = 0;
823 + unsigned long addr = p->addr & PAGE_MASK;
824 const unsigned long size_lim = p->len + (p->addr & ~PAGE_MASK);
825 struct kmmio_fault_page *release_list = NULL;
826 struct kmmio_delayed_release *drelease;
827 unsigned int l;
828 pte_t *pte;
829
830 - pte = lookup_address(p->addr, &l);
831 + pte = lookup_address(addr, &l);
832 if (!pte)
833 return;
834
835 spin_lock_irqsave(&kmmio_lock, flags);
836 while (size < size_lim) {
837 - release_kmmio_fault_page(p->addr + size, &release_list);
838 + release_kmmio_fault_page(addr + size, &release_list);
839 size += page_level_size(l);
840 }
841 list_del_rcu(&p->list);
842 diff --git a/block/blk-map.c b/block/blk-map.c
843 index 368daa02714e..e31be14da8ea 100644
844 --- a/block/blk-map.c
845 +++ b/block/blk-map.c
846 @@ -126,7 +126,7 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq,
847 unsigned long align = q->dma_pad_mask | queue_dma_alignment(q);
848 struct bio *bio = NULL;
849 struct iov_iter i;
850 - int ret;
851 + int ret = -EINVAL;
852
853 if (!iter_is_iovec(iter))
854 goto fail;
855 @@ -155,7 +155,7 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq,
856 __blk_rq_unmap_user(bio);
857 fail:
858 rq->bio = NULL;
859 - return -EINVAL;
860 + return ret;
861 }
862 EXPORT_SYMBOL(blk_rq_map_user_iov);
863
864 diff --git a/drivers/Makefile b/drivers/Makefile
865 index d242d3514d30..5f5ccdbad21a 100644
866 --- a/drivers/Makefile
867 +++ b/drivers/Makefile
868 @@ -105,6 +105,7 @@ obj-$(CONFIG_TC) += tc/
869 obj-$(CONFIG_UWB) += uwb/
870 obj-$(CONFIG_USB_PHY) += usb/
871 obj-$(CONFIG_USB) += usb/
872 +obj-$(CONFIG_USB_SUPPORT) += usb/
873 obj-$(CONFIG_PCI) += usb/
874 obj-$(CONFIG_USB_GADGET) += usb/
875 obj-$(CONFIG_OF) += usb/
876 diff --git a/drivers/android/binder.c b/drivers/android/binder.c
877 index 2ef8bd29e188..b7efdc8badee 100644
878 --- a/drivers/android/binder.c
879 +++ b/drivers/android/binder.c
880 @@ -1933,8 +1933,14 @@ static void binder_send_failed_reply(struct binder_transaction *t,
881 &target_thread->todo);
882 wake_up_interruptible(&target_thread->wait);
883 } else {
884 - WARN(1, "Unexpected reply error: %u\n",
885 - target_thread->reply_error.cmd);
886 + /*
887 + * Cannot get here for normal operation, but
888 + * we can if multiple synchronous transactions
889 + * are sent without blocking for responses.
890 + * Just ignore the 2nd error in this case.
891 + */
892 + pr_warn("Unexpected reply error: %u\n",
893 + target_thread->reply_error.cmd);
894 }
895 binder_inner_proc_unlock(target_thread->proc);
896 binder_thread_dec_tmpref(target_thread);
897 @@ -2135,7 +2141,7 @@ static void binder_transaction_buffer_release(struct binder_proc *proc,
898 int debug_id = buffer->debug_id;
899
900 binder_debug(BINDER_DEBUG_TRANSACTION,
901 - "%d buffer release %d, size %zd-%zd, failed at %p\n",
902 + "%d buffer release %d, size %zd-%zd, failed at %pK\n",
903 proc->pid, buffer->debug_id,
904 buffer->data_size, buffer->offsets_size, failed_at);
905
906 @@ -3647,7 +3653,7 @@ static int binder_thread_write(struct binder_proc *proc,
907 }
908 }
909 binder_debug(BINDER_DEBUG_DEAD_BINDER,
910 - "%d:%d BC_DEAD_BINDER_DONE %016llx found %p\n",
911 + "%d:%d BC_DEAD_BINDER_DONE %016llx found %pK\n",
912 proc->pid, thread->pid, (u64)cookie,
913 death);
914 if (death == NULL) {
915 @@ -4316,6 +4322,15 @@ static int binder_thread_release(struct binder_proc *proc,
916
917 binder_inner_proc_unlock(thread->proc);
918
919 + /*
920 + * This is needed to avoid races between wake_up_poll() above and
921 + * and ep_remove_waitqueue() called for other reasons (eg the epoll file
922 + * descriptor being closed); ep_remove_waitqueue() holds an RCU read
923 + * lock, so we can be sure it's done after calling synchronize_rcu().
924 + */
925 + if (thread->looper & BINDER_LOOPER_STATE_POLL)
926 + synchronize_rcu();
927 +
928 if (send_reply)
929 binder_send_failed_reply(send_reply, BR_DEAD_REPLY);
930 binder_release_work(proc, &thread->todo);
931 @@ -4331,6 +4346,8 @@ static unsigned int binder_poll(struct file *filp,
932 bool wait_for_proc_work;
933
934 thread = binder_get_thread(proc);
935 + if (!thread)
936 + return POLLERR;
937
938 binder_inner_proc_lock(thread->proc);
939 thread->looper |= BINDER_LOOPER_STATE_POLL;
940 @@ -4974,7 +4991,7 @@ static void print_binder_transaction_ilocked(struct seq_file *m,
941 spin_lock(&t->lock);
942 to_proc = t->to_proc;
943 seq_printf(m,
944 - "%s %d: %p from %d:%d to %d:%d code %x flags %x pri %ld r%d",
945 + "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %ld r%d",
946 prefix, t->debug_id, t,
947 t->from ? t->from->proc->pid : 0,
948 t->from ? t->from->pid : 0,
949 @@ -4998,7 +5015,7 @@ static void print_binder_transaction_ilocked(struct seq_file *m,
950 }
951 if (buffer->target_node)
952 seq_printf(m, " node %d", buffer->target_node->debug_id);
953 - seq_printf(m, " size %zd:%zd data %p\n",
954 + seq_printf(m, " size %zd:%zd data %pK\n",
955 buffer->data_size, buffer->offsets_size,
956 buffer->data);
957 }
958 diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
959 index 7bcf80fa9ada..b2b1eece0db1 100644
960 --- a/drivers/base/power/runtime.c
961 +++ b/drivers/base/power/runtime.c
962 @@ -276,7 +276,8 @@ static int rpm_get_suppliers(struct device *dev)
963 continue;
964
965 retval = pm_runtime_get_sync(link->supplier);
966 - if (retval < 0) {
967 + /* Ignore suppliers with disabled runtime PM. */
968 + if (retval < 0 && retval != -EACCES) {
969 pm_runtime_put_noidle(link->supplier);
970 return retval;
971 }
972 diff --git a/drivers/crypto/s5p-sss.c b/drivers/crypto/s5p-sss.c
973 index 7ac657f46d15..aec66159566d 100644
974 --- a/drivers/crypto/s5p-sss.c
975 +++ b/drivers/crypto/s5p-sss.c
976 @@ -601,15 +601,21 @@ static void s5p_aes_crypt_start(struct s5p_aes_dev *dev, unsigned long mode)
977 uint32_t aes_control;
978 unsigned long flags;
979 int err;
980 + u8 *iv;
981
982 aes_control = SSS_AES_KEY_CHANGE_MODE;
983 if (mode & FLAGS_AES_DECRYPT)
984 aes_control |= SSS_AES_MODE_DECRYPT;
985
986 - if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CBC)
987 + if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CBC) {
988 aes_control |= SSS_AES_CHAIN_MODE_CBC;
989 - else if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CTR)
990 + iv = req->info;
991 + } else if ((mode & FLAGS_AES_MODE_MASK) == FLAGS_AES_CTR) {
992 aes_control |= SSS_AES_CHAIN_MODE_CTR;
993 + iv = req->info;
994 + } else {
995 + iv = NULL; /* AES_ECB */
996 + }
997
998 if (dev->ctx->keylen == AES_KEYSIZE_192)
999 aes_control |= SSS_AES_KEY_SIZE_192;
1000 @@ -640,7 +646,7 @@ static void s5p_aes_crypt_start(struct s5p_aes_dev *dev, unsigned long mode)
1001 goto outdata_error;
1002
1003 SSS_AES_WRITE(dev, AES_CONTROL, aes_control);
1004 - s5p_set_aes(dev, dev->ctx->aes_key, req->info, dev->ctx->keylen);
1005 + s5p_set_aes(dev, dev->ctx->aes_key, iv, dev->ctx->keylen);
1006
1007 s5p_set_dma_indata(dev, dev->sg_src);
1008 s5p_set_dma_outdata(dev, dev->sg_dst);
1009 diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
1010 index a19b5d0300a9..ceae25112acd 100644
1011 --- a/drivers/crypto/talitos.c
1012 +++ b/drivers/crypto/talitos.c
1013 @@ -1124,6 +1124,11 @@ int talitos_sg_map(struct device *dev, struct scatterlist *src,
1014 struct talitos_private *priv = dev_get_drvdata(dev);
1015 bool is_sec1 = has_ftr_sec1(priv);
1016
1017 + if (!src) {
1018 + *ptr = zero_entry;
1019 + return 1;
1020 + }
1021 +
1022 to_talitos_ptr_len(ptr, len, is_sec1);
1023 to_talitos_ptr_ext_set(ptr, 0, is_sec1);
1024
1025 diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c
1026 index fbab271b3bf9..a861b5b4d443 100644
1027 --- a/drivers/dma/at_hdmac.c
1028 +++ b/drivers/dma/at_hdmac.c
1029 @@ -708,7 +708,7 @@ atc_prep_dma_interleaved(struct dma_chan *chan,
1030 unsigned long flags)
1031 {
1032 struct at_dma_chan *atchan = to_at_dma_chan(chan);
1033 - struct data_chunk *first = xt->sgl;
1034 + struct data_chunk *first;
1035 struct at_desc *desc = NULL;
1036 size_t xfer_count;
1037 unsigned int dwidth;
1038 @@ -720,6 +720,8 @@ atc_prep_dma_interleaved(struct dma_chan *chan,
1039 if (unlikely(!xt || xt->numf != 1 || !xt->frame_size))
1040 return NULL;
1041
1042 + first = xt->sgl;
1043 +
1044 dev_info(chan2dev(chan),
1045 "%s: src=%pad, dest=%pad, numf=%d, frame_size=%d, flags=0x%lx\n",
1046 __func__, &xt->src_start, &xt->dst_start, xt->numf,
1047 diff --git a/drivers/dma/dma-jz4740.c b/drivers/dma/dma-jz4740.c
1048 index d50273fed715..afd5e10f8927 100644
1049 --- a/drivers/dma/dma-jz4740.c
1050 +++ b/drivers/dma/dma-jz4740.c
1051 @@ -555,7 +555,7 @@ static int jz4740_dma_probe(struct platform_device *pdev)
1052
1053 ret = dma_async_device_register(dd);
1054 if (ret)
1055 - return ret;
1056 + goto err_clk;
1057
1058 irq = platform_get_irq(pdev, 0);
1059 ret = request_irq(irq, jz4740_dma_irq, 0, dev_name(&pdev->dev), dmadev);
1060 @@ -568,6 +568,8 @@ static int jz4740_dma_probe(struct platform_device *pdev)
1061
1062 err_unregister:
1063 dma_async_device_unregister(dd);
1064 +err_clk:
1065 + clk_disable_unprepare(dmadev->clk);
1066 return ret;
1067 }
1068
1069 diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c
1070 index 93e006c3441d..854deb0da07c 100644
1071 --- a/drivers/dma/ioat/init.c
1072 +++ b/drivers/dma/ioat/init.c
1073 @@ -390,7 +390,7 @@ static int ioat_dma_self_test(struct ioatdma_device *ioat_dma)
1074 if (memcmp(src, dest, IOAT_TEST_SIZE)) {
1075 dev_err(dev, "Self-test copy failed compare, disabling\n");
1076 err = -ENODEV;
1077 - goto free_resources;
1078 + goto unmap_dma;
1079 }
1080
1081 unmap_dma:
1082 diff --git a/drivers/gpio/gpio-74x164.c b/drivers/gpio/gpio-74x164.c
1083 index 6b535ec858cc..15a1f4b348c4 100644
1084 --- a/drivers/gpio/gpio-74x164.c
1085 +++ b/drivers/gpio/gpio-74x164.c
1086 @@ -23,6 +23,7 @@
1087 struct gen_74x164_chip {
1088 struct gpio_chip gpio_chip;
1089 struct mutex lock;
1090 + struct gpio_desc *gpiod_oe;
1091 u32 registers;
1092 /*
1093 * Since the registers are chained, every byte sent will make
1094 @@ -31,8 +32,7 @@ struct gen_74x164_chip {
1095 * register at the end of the transfer. So, to have a logical
1096 * numbering, store the bytes in reverse order.
1097 */
1098 - u8 buffer[0];
1099 - struct gpio_desc *gpiod_oe;
1100 + u8 buffer[];
1101 };
1102
1103 static int __gen_74x164_write_config(struct gen_74x164_chip *chip)
1104 diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
1105 index f75d8443ecaf..e4b3d7db68c9 100644
1106 --- a/drivers/gpio/gpio-davinci.c
1107 +++ b/drivers/gpio/gpio-davinci.c
1108 @@ -383,7 +383,7 @@ static int gpio_irq_type_unbanked(struct irq_data *data, unsigned trigger)
1109 u32 mask;
1110
1111 d = (struct davinci_gpio_controller *)irq_data_get_irq_handler_data(data);
1112 - g = (struct davinci_gpio_regs __iomem *)d->regs;
1113 + g = (struct davinci_gpio_regs __iomem *)d->regs[0];
1114 mask = __gpio_mask(data->irq - d->base_irq);
1115
1116 if (trigger & ~(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING))
1117 diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
1118 index 2a4d163ac76f..79ce877bf45f 100644
1119 --- a/drivers/gpu/drm/armada/armada_crtc.c
1120 +++ b/drivers/gpu/drm/armada/armada_crtc.c
1121 @@ -1225,17 +1225,13 @@ static int armada_drm_crtc_create(struct drm_device *drm, struct device *dev,
1122
1123 ret = devm_request_irq(dev, irq, armada_drm_irq, 0, "armada_drm_crtc",
1124 dcrtc);
1125 - if (ret < 0) {
1126 - kfree(dcrtc);
1127 - return ret;
1128 - }
1129 + if (ret < 0)
1130 + goto err_crtc;
1131
1132 if (dcrtc->variant->init) {
1133 ret = dcrtc->variant->init(dcrtc, dev);
1134 - if (ret) {
1135 - kfree(dcrtc);
1136 - return ret;
1137 - }
1138 + if (ret)
1139 + goto err_crtc;
1140 }
1141
1142 /* Ensure AXI pipeline is enabled */
1143 @@ -1246,13 +1242,15 @@ static int armada_drm_crtc_create(struct drm_device *drm, struct device *dev,
1144 dcrtc->crtc.port = port;
1145
1146 primary = kzalloc(sizeof(*primary), GFP_KERNEL);
1147 - if (!primary)
1148 - return -ENOMEM;
1149 + if (!primary) {
1150 + ret = -ENOMEM;
1151 + goto err_crtc;
1152 + }
1153
1154 ret = armada_drm_plane_init(primary);
1155 if (ret) {
1156 kfree(primary);
1157 - return ret;
1158 + goto err_crtc;
1159 }
1160
1161 ret = drm_universal_plane_init(drm, &primary->base, 0,
1162 @@ -1263,7 +1261,7 @@ static int armada_drm_crtc_create(struct drm_device *drm, struct device *dev,
1163 DRM_PLANE_TYPE_PRIMARY, NULL);
1164 if (ret) {
1165 kfree(primary);
1166 - return ret;
1167 + goto err_crtc;
1168 }
1169
1170 ret = drm_crtc_init_with_planes(drm, &dcrtc->crtc, &primary->base, NULL,
1171 @@ -1282,6 +1280,9 @@ static int armada_drm_crtc_create(struct drm_device *drm, struct device *dev,
1172
1173 err_crtc_init:
1174 primary->base.funcs->destroy(&primary->base);
1175 +err_crtc:
1176 + kfree(dcrtc);
1177 +
1178 return ret;
1179 }
1180
1181 diff --git a/drivers/gpu/drm/drm_modeset_lock.c b/drivers/gpu/drm/drm_modeset_lock.c
1182 index af4e906c630d..56b9f9b1c3ae 100644
1183 --- a/drivers/gpu/drm/drm_modeset_lock.c
1184 +++ b/drivers/gpu/drm/drm_modeset_lock.c
1185 @@ -88,7 +88,7 @@ void drm_modeset_lock_all(struct drm_device *dev)
1186 struct drm_modeset_acquire_ctx *ctx;
1187 int ret;
1188
1189 - ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
1190 + ctx = kzalloc(sizeof(*ctx), GFP_KERNEL | __GFP_NOFAIL);
1191 if (WARN_ON(!ctx))
1192 return;
1193
1194 diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
1195 index 10ae9681f02d..589905aab185 100644
1196 --- a/drivers/gpu/drm/i915/intel_drv.h
1197 +++ b/drivers/gpu/drm/i915/intel_drv.h
1198 @@ -1708,7 +1708,7 @@ extern struct drm_display_mode *intel_find_panel_downclock(
1199 int intel_backlight_device_register(struct intel_connector *connector);
1200 void intel_backlight_device_unregister(struct intel_connector *connector);
1201 #else /* CONFIG_BACKLIGHT_CLASS_DEVICE */
1202 -static int intel_backlight_device_register(struct intel_connector *connector)
1203 +static inline int intel_backlight_device_register(struct intel_connector *connector)
1204 {
1205 return 0;
1206 }
1207 diff --git a/drivers/gpu/drm/vc4/vc4_gem.c b/drivers/gpu/drm/vc4/vc4_gem.c
1208 index c50debb1986f..d31b3d0c9955 100644
1209 --- a/drivers/gpu/drm/vc4/vc4_gem.c
1210 +++ b/drivers/gpu/drm/vc4/vc4_gem.c
1211 @@ -829,8 +829,10 @@ vc4_complete_exec(struct drm_device *dev, struct vc4_exec_info *exec)
1212 /* If we got force-completed because of GPU reset rather than
1213 * through our IRQ handler, signal the fence now.
1214 */
1215 - if (exec->fence)
1216 + if (exec->fence) {
1217 dma_fence_signal(exec->fence);
1218 + dma_fence_put(exec->fence);
1219 + }
1220
1221 if (exec->bo) {
1222 for (i = 0; i < exec->bo_count; i++)
1223 diff --git a/drivers/gpu/drm/vc4/vc4_irq.c b/drivers/gpu/drm/vc4/vc4_irq.c
1224 index 521addec831e..3dd62d75f531 100644
1225 --- a/drivers/gpu/drm/vc4/vc4_irq.c
1226 +++ b/drivers/gpu/drm/vc4/vc4_irq.c
1227 @@ -139,6 +139,7 @@ vc4_irq_finish_render_job(struct drm_device *dev)
1228 list_move_tail(&exec->head, &vc4->job_done_list);
1229 if (exec->fence) {
1230 dma_fence_signal_locked(exec->fence);
1231 + dma_fence_put(exec->fence);
1232 exec->fence = NULL;
1233 }
1234 vc4_submit_next_render_job(dev);
1235 diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
1236 index a47428b4d31b..e565fd4fc414 100644
1237 --- a/drivers/iio/industrialio-core.c
1238 +++ b/drivers/iio/industrialio-core.c
1239 @@ -631,7 +631,7 @@ static ssize_t __iio_format_value(char *buf, size_t len, unsigned int type,
1240 * iio_format_value() - Formats a IIO value into its string representation
1241 * @buf: The buffer to which the formatted value gets written
1242 * which is assumed to be big enough (i.e. PAGE_SIZE).
1243 - * @type: One of the IIO_VAL_... constants. This decides how the val
1244 + * @type: One of the IIO_VAL_* constants. This decides how the val
1245 * and val2 parameters are formatted.
1246 * @size: Number of IIO value entries contained in vals
1247 * @vals: Pointer to the values, exact meaning depends on the
1248 @@ -639,7 +639,7 @@ static ssize_t __iio_format_value(char *buf, size_t len, unsigned int type,
1249 *
1250 * Return: 0 by default, a negative number on failure or the
1251 * total number of characters written for a type that belongs
1252 - * to the IIO_VAL_... constant.
1253 + * to the IIO_VAL_* constant.
1254 */
1255 ssize_t iio_format_value(char *buf, unsigned int type, int size, int *vals)
1256 {
1257 diff --git a/drivers/iio/proximity/sx9500.c b/drivers/iio/proximity/sx9500.c
1258 index f42b3a1c75ff..dba796c06ba6 100644
1259 --- a/drivers/iio/proximity/sx9500.c
1260 +++ b/drivers/iio/proximity/sx9500.c
1261 @@ -871,6 +871,7 @@ static int sx9500_init_device(struct iio_dev *indio_dev)
1262 static void sx9500_gpio_probe(struct i2c_client *client,
1263 struct sx9500_data *data)
1264 {
1265 + struct gpio_desc *gpiod_int;
1266 struct device *dev;
1267
1268 if (!client)
1269 @@ -878,6 +879,14 @@ static void sx9500_gpio_probe(struct i2c_client *client,
1270
1271 dev = &client->dev;
1272
1273 + if (client->irq <= 0) {
1274 + gpiod_int = devm_gpiod_get(dev, SX9500_GPIO_INT, GPIOD_IN);
1275 + if (IS_ERR(gpiod_int))
1276 + dev_err(dev, "gpio get irq failed\n");
1277 + else
1278 + client->irq = gpiod_to_irq(gpiod_int);
1279 + }
1280 +
1281 data->gpiod_rst = devm_gpiod_get(dev, SX9500_GPIO_RESET, GPIOD_OUT_HIGH);
1282 if (IS_ERR(data->gpiod_rst)) {
1283 dev_warn(dev, "gpio get reset pin failed\n");
1284 diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
1285 index fa79c7076ccd..e457dface2d2 100644
1286 --- a/drivers/infiniband/core/cma.c
1287 +++ b/drivers/infiniband/core/cma.c
1288 @@ -801,6 +801,7 @@ struct rdma_cm_id *rdma_create_id(struct net *net,
1289 INIT_LIST_HEAD(&id_priv->mc_list);
1290 get_random_bytes(&id_priv->seq_num, sizeof id_priv->seq_num);
1291 id_priv->id.route.addr.dev_addr.net = get_net(net);
1292 + id_priv->seq_num &= 0x00ffffff;
1293
1294 return &id_priv->id;
1295 }
1296 @@ -4461,7 +4462,7 @@ static int cma_get_id_stats(struct sk_buff *skb, struct netlink_callback *cb)
1297 return skb->len;
1298 }
1299
1300 -static const struct rdma_nl_cbs cma_cb_table[] = {
1301 +static const struct rdma_nl_cbs cma_cb_table[RDMA_NL_RDMA_CM_NUM_OPS] = {
1302 [RDMA_NL_RDMA_CM_ID_STATS] = { .dump = cma_get_id_stats},
1303 };
1304
1305 diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
1306 index ebfdb5503701..b4b28ff8b7dc 100644
1307 --- a/drivers/infiniband/core/device.c
1308 +++ b/drivers/infiniband/core/device.c
1309 @@ -1154,7 +1154,7 @@ struct net_device *ib_get_net_dev_by_params(struct ib_device *dev,
1310 }
1311 EXPORT_SYMBOL(ib_get_net_dev_by_params);
1312
1313 -static const struct rdma_nl_cbs ibnl_ls_cb_table[] = {
1314 +static const struct rdma_nl_cbs ibnl_ls_cb_table[RDMA_NL_LS_NUM_OPS] = {
1315 [RDMA_NL_LS_OP_RESOLVE] = {
1316 .doit = ib_nl_handle_resolve_resp,
1317 .flags = RDMA_NL_ADMIN_PERM,
1318 @@ -1261,5 +1261,5 @@ static void __exit ib_core_cleanup(void)
1319
1320 MODULE_ALIAS_RDMA_NETLINK(RDMA_NL_LS, 4);
1321
1322 -module_init(ib_core_init);
1323 +subsys_initcall(ib_core_init);
1324 module_exit(ib_core_cleanup);
1325 diff --git a/drivers/infiniband/core/iwcm.c b/drivers/infiniband/core/iwcm.c
1326 index fcf42f6bb82a..30d7277249b8 100644
1327 --- a/drivers/infiniband/core/iwcm.c
1328 +++ b/drivers/infiniband/core/iwcm.c
1329 @@ -80,7 +80,7 @@ const char *__attribute_const__ iwcm_reject_msg(int reason)
1330 }
1331 EXPORT_SYMBOL(iwcm_reject_msg);
1332
1333 -static struct rdma_nl_cbs iwcm_nl_cb_table[] = {
1334 +static struct rdma_nl_cbs iwcm_nl_cb_table[RDMA_NL_IWPM_NUM_OPS] = {
1335 [RDMA_NL_IWPM_REG_PID] = {.dump = iwpm_register_pid_cb},
1336 [RDMA_NL_IWPM_ADD_MAPPING] = {.dump = iwpm_add_mapping_cb},
1337 [RDMA_NL_IWPM_QUERY_MAPPING] = {.dump = iwpm_add_and_query_mapping_cb},
1338 diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c
1339 index 2fae850a3eff..9a05245a1acf 100644
1340 --- a/drivers/infiniband/core/nldev.c
1341 +++ b/drivers/infiniband/core/nldev.c
1342 @@ -303,7 +303,7 @@ out: cb->args[0] = idx;
1343 return skb->len;
1344 }
1345
1346 -static const struct rdma_nl_cbs nldev_cb_table[] = {
1347 +static const struct rdma_nl_cbs nldev_cb_table[RDMA_NLDEV_NUM_OPS] = {
1348 [RDMA_NLDEV_CMD_GET] = {
1349 .doit = nldev_get_doit,
1350 .dump = nldev_get_dumpit,
1351 diff --git a/drivers/infiniband/hw/hfi1/rc.c b/drivers/infiniband/hw/hfi1/rc.c
1352 index e1cf0c08ca6f..84c6a6ff4a67 100644
1353 --- a/drivers/infiniband/hw/hfi1/rc.c
1354 +++ b/drivers/infiniband/hw/hfi1/rc.c
1355 @@ -815,7 +815,7 @@ static inline void hfi1_make_rc_ack_16B(struct rvt_qp *qp,
1356 struct hfi1_pportdata *ppd = ppd_from_ibp(ibp);
1357 struct hfi1_16b_header *hdr = &opa_hdr->opah;
1358 struct ib_other_headers *ohdr;
1359 - u32 bth0, bth1;
1360 + u32 bth0, bth1 = 0;
1361 u16 len, pkey;
1362 u8 becn = !!is_fecn;
1363 u8 l4 = OPA_16B_L4_IB_LOCAL;
1364 diff --git a/drivers/infiniband/hw/i40iw/i40iw_cm.c b/drivers/infiniband/hw/i40iw/i40iw_cm.c
1365 index 5230dd3c938c..d6a1a308c6a0 100644
1366 --- a/drivers/infiniband/hw/i40iw/i40iw_cm.c
1367 +++ b/drivers/infiniband/hw/i40iw/i40iw_cm.c
1368 @@ -1043,7 +1043,7 @@ static int i40iw_parse_mpa(struct i40iw_cm_node *cm_node, u8 *buffer, u32 *type,
1369 * i40iw_schedule_cm_timer
1370 * @@cm_node: connection's node
1371 * @sqbuf: buffer to send
1372 - * @type: if it es send ot close
1373 + * @type: if it is send or close
1374 * @send_retrans: if rexmits to be done
1375 * @close_when_complete: is cm_node to be removed
1376 *
1377 @@ -1067,7 +1067,8 @@ int i40iw_schedule_cm_timer(struct i40iw_cm_node *cm_node,
1378
1379 new_send = kzalloc(sizeof(*new_send), GFP_ATOMIC);
1380 if (!new_send) {
1381 - i40iw_free_sqbuf(vsi, (void *)sqbuf);
1382 + if (type != I40IW_TIMER_TYPE_CLOSE)
1383 + i40iw_free_sqbuf(vsi, (void *)sqbuf);
1384 return -ENOMEM;
1385 }
1386 new_send->retrycount = I40IW_DEFAULT_RETRYS;
1387 @@ -1082,7 +1083,6 @@ int i40iw_schedule_cm_timer(struct i40iw_cm_node *cm_node,
1388 new_send->timetosend += (HZ / 10);
1389 if (cm_node->close_entry) {
1390 kfree(new_send);
1391 - i40iw_free_sqbuf(vsi, (void *)sqbuf);
1392 i40iw_pr_err("already close entry\n");
1393 return -EINVAL;
1394 }
1395 diff --git a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
1396 index 42ca5346777d..d86f3e670804 100644
1397 --- a/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
1398 +++ b/drivers/infiniband/hw/i40iw/i40iw_ctrl.c
1399 @@ -506,7 +506,7 @@ static enum i40iw_status_code i40iw_sc_cqp_create(struct i40iw_sc_cqp *cqp,
1400
1401 ret_code = i40iw_allocate_dma_mem(cqp->dev->hw,
1402 &cqp->sdbuf,
1403 - 128,
1404 + I40IW_UPDATE_SD_BUF_SIZE * cqp->sq_size,
1405 I40IW_SD_BUF_ALIGNMENT);
1406
1407 if (ret_code)
1408 @@ -589,14 +589,15 @@ void i40iw_sc_cqp_post_sq(struct i40iw_sc_cqp *cqp)
1409 }
1410
1411 /**
1412 - * i40iw_sc_cqp_get_next_send_wqe - get next wqe on cqp sq
1413 - * @cqp: struct for cqp hw
1414 - * @wqe_idx: we index of cqp ring
1415 + * i40iw_sc_cqp_get_next_send_wqe_idx - get next WQE on CQP SQ and pass back the index
1416 + * @cqp: pointer to CQP structure
1417 + * @scratch: private data for CQP WQE
1418 + * @wqe_idx: WQE index for next WQE on CQP SQ
1419 */
1420 -u64 *i40iw_sc_cqp_get_next_send_wqe(struct i40iw_sc_cqp *cqp, u64 scratch)
1421 +static u64 *i40iw_sc_cqp_get_next_send_wqe_idx(struct i40iw_sc_cqp *cqp,
1422 + u64 scratch, u32 *wqe_idx)
1423 {
1424 u64 *wqe = NULL;
1425 - u32 wqe_idx;
1426 enum i40iw_status_code ret_code;
1427
1428 if (I40IW_RING_FULL_ERR(cqp->sq_ring)) {
1429 @@ -609,20 +610,32 @@ u64 *i40iw_sc_cqp_get_next_send_wqe(struct i40iw_sc_cqp *cqp, u64 scratch)
1430 cqp->sq_ring.size);
1431 return NULL;
1432 }
1433 - I40IW_ATOMIC_RING_MOVE_HEAD(cqp->sq_ring, wqe_idx, ret_code);
1434 + I40IW_ATOMIC_RING_MOVE_HEAD(cqp->sq_ring, *wqe_idx, ret_code);
1435 cqp->dev->cqp_cmd_stats[OP_REQUESTED_COMMANDS]++;
1436 if (ret_code)
1437 return NULL;
1438 - if (!wqe_idx)
1439 + if (!*wqe_idx)
1440 cqp->polarity = !cqp->polarity;
1441
1442 - wqe = cqp->sq_base[wqe_idx].elem;
1443 - cqp->scratch_array[wqe_idx] = scratch;
1444 + wqe = cqp->sq_base[*wqe_idx].elem;
1445 + cqp->scratch_array[*wqe_idx] = scratch;
1446 I40IW_CQP_INIT_WQE(wqe);
1447
1448 return wqe;
1449 }
1450
1451 +/**
1452 + * i40iw_sc_cqp_get_next_send_wqe - get next wqe on cqp sq
1453 + * @cqp: struct for cqp hw
1454 + * @scratch: private data for CQP WQE
1455 + */
1456 +u64 *i40iw_sc_cqp_get_next_send_wqe(struct i40iw_sc_cqp *cqp, u64 scratch)
1457 +{
1458 + u32 wqe_idx;
1459 +
1460 + return i40iw_sc_cqp_get_next_send_wqe_idx(cqp, scratch, &wqe_idx);
1461 +}
1462 +
1463 /**
1464 * i40iw_sc_cqp_destroy - destroy cqp during close
1465 * @cqp: struct for cqp hw
1466 @@ -3534,8 +3547,10 @@ static enum i40iw_status_code cqp_sds_wqe_fill(struct i40iw_sc_cqp *cqp,
1467 u64 *wqe;
1468 int mem_entries, wqe_entries;
1469 struct i40iw_dma_mem *sdbuf = &cqp->sdbuf;
1470 + u64 offset;
1471 + u32 wqe_idx;
1472
1473 - wqe = i40iw_sc_cqp_get_next_send_wqe(cqp, scratch);
1474 + wqe = i40iw_sc_cqp_get_next_send_wqe_idx(cqp, scratch, &wqe_idx);
1475 if (!wqe)
1476 return I40IW_ERR_RING_FULL;
1477
1478 @@ -3548,8 +3563,10 @@ static enum i40iw_status_code cqp_sds_wqe_fill(struct i40iw_sc_cqp *cqp,
1479 LS_64(mem_entries, I40IW_CQPSQ_UPESD_ENTRY_COUNT);
1480
1481 if (mem_entries) {
1482 - memcpy(sdbuf->va, &info->entry[3], (mem_entries << 4));
1483 - data = sdbuf->pa;
1484 + offset = wqe_idx * I40IW_UPDATE_SD_BUF_SIZE;
1485 + memcpy((char *)sdbuf->va + offset, &info->entry[3],
1486 + mem_entries << 4);
1487 + data = (u64)sdbuf->pa + offset;
1488 } else {
1489 data = 0;
1490 }
1491 diff --git a/drivers/infiniband/hw/i40iw/i40iw_d.h b/drivers/infiniband/hw/i40iw/i40iw_d.h
1492 index 2ebaadbed379..24eabcad5e40 100644
1493 --- a/drivers/infiniband/hw/i40iw/i40iw_d.h
1494 +++ b/drivers/infiniband/hw/i40iw/i40iw_d.h
1495 @@ -1109,7 +1109,7 @@
1496 #define I40IWQPC_VLANTAG_MASK (0xffffULL << I40IWQPC_VLANTAG_SHIFT)
1497
1498 #define I40IWQPC_ARPIDX_SHIFT 48
1499 -#define I40IWQPC_ARPIDX_MASK (0xfffULL << I40IWQPC_ARPIDX_SHIFT)
1500 +#define I40IWQPC_ARPIDX_MASK (0xffffULL << I40IWQPC_ARPIDX_SHIFT)
1501
1502 #define I40IWQPC_FLOWLABEL_SHIFT 0
1503 #define I40IWQPC_FLOWLABEL_MASK (0xfffffUL << I40IWQPC_FLOWLABEL_SHIFT)
1504 @@ -1516,7 +1516,7 @@ enum i40iw_alignment {
1505 I40IW_AEQ_ALIGNMENT = 0x100,
1506 I40IW_CEQ_ALIGNMENT = 0x100,
1507 I40IW_CQ0_ALIGNMENT = 0x100,
1508 - I40IW_SD_BUF_ALIGNMENT = 0x100
1509 + I40IW_SD_BUF_ALIGNMENT = 0x80
1510 };
1511
1512 #define I40IW_WQE_SIZE_64 64
1513 @@ -1524,6 +1524,8 @@ enum i40iw_alignment {
1514 #define I40IW_QP_WQE_MIN_SIZE 32
1515 #define I40IW_QP_WQE_MAX_SIZE 128
1516
1517 +#define I40IW_UPDATE_SD_BUF_SIZE 128
1518 +
1519 #define I40IW_CQE_QTYPE_RQ 0
1520 #define I40IW_CQE_QTYPE_SQ 1
1521
1522 diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c
1523 index fcfa08747899..9354fec8efe7 100644
1524 --- a/drivers/infiniband/hw/mlx4/qp.c
1525 +++ b/drivers/infiniband/hw/mlx4/qp.c
1526 @@ -666,6 +666,19 @@ static int set_qp_rss(struct mlx4_ib_dev *dev, struct mlx4_ib_rss *rss_ctx,
1527 return (-EOPNOTSUPP);
1528 }
1529
1530 + if (ucmd->rx_hash_fields_mask & ~(MLX4_IB_RX_HASH_SRC_IPV4 |
1531 + MLX4_IB_RX_HASH_DST_IPV4 |
1532 + MLX4_IB_RX_HASH_SRC_IPV6 |
1533 + MLX4_IB_RX_HASH_DST_IPV6 |
1534 + MLX4_IB_RX_HASH_SRC_PORT_TCP |
1535 + MLX4_IB_RX_HASH_DST_PORT_TCP |
1536 + MLX4_IB_RX_HASH_SRC_PORT_UDP |
1537 + MLX4_IB_RX_HASH_DST_PORT_UDP)) {
1538 + pr_debug("RX Hash fields_mask has unsupported mask (0x%llx)\n",
1539 + ucmd->rx_hash_fields_mask);
1540 + return (-EOPNOTSUPP);
1541 + }
1542 +
1543 if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_IPV4) &&
1544 (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_IPV4)) {
1545 rss_ctx->flags = MLX4_RSS_IPV4;
1546 @@ -691,11 +704,11 @@ static int set_qp_rss(struct mlx4_ib_dev *dev, struct mlx4_ib_rss *rss_ctx,
1547 return (-EOPNOTSUPP);
1548 }
1549
1550 - if (rss_ctx->flags & MLX4_RSS_IPV4) {
1551 + if (rss_ctx->flags & MLX4_RSS_IPV4)
1552 rss_ctx->flags |= MLX4_RSS_UDP_IPV4;
1553 - } else if (rss_ctx->flags & MLX4_RSS_IPV6) {
1554 + if (rss_ctx->flags & MLX4_RSS_IPV6)
1555 rss_ctx->flags |= MLX4_RSS_UDP_IPV6;
1556 - } else {
1557 + if (!(rss_ctx->flags & (MLX4_RSS_IPV6 | MLX4_RSS_IPV4))) {
1558 pr_debug("RX Hash fields_mask is not supported - UDP must be set with IPv4 or IPv6\n");
1559 return (-EOPNOTSUPP);
1560 }
1561 @@ -707,15 +720,14 @@ static int set_qp_rss(struct mlx4_ib_dev *dev, struct mlx4_ib_rss *rss_ctx,
1562
1563 if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_PORT_TCP) &&
1564 (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_PORT_TCP)) {
1565 - if (rss_ctx->flags & MLX4_RSS_IPV4) {
1566 + if (rss_ctx->flags & MLX4_RSS_IPV4)
1567 rss_ctx->flags |= MLX4_RSS_TCP_IPV4;
1568 - } else if (rss_ctx->flags & MLX4_RSS_IPV6) {
1569 + if (rss_ctx->flags & MLX4_RSS_IPV6)
1570 rss_ctx->flags |= MLX4_RSS_TCP_IPV6;
1571 - } else {
1572 + if (!(rss_ctx->flags & (MLX4_RSS_IPV6 | MLX4_RSS_IPV4))) {
1573 pr_debug("RX Hash fields_mask is not supported - TCP must be set with IPv4 or IPv6\n");
1574 return (-EOPNOTSUPP);
1575 }
1576 -
1577 } else if ((ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_SRC_PORT_TCP) ||
1578 (ucmd->rx_hash_fields_mask & MLX4_IB_RX_HASH_DST_PORT_TCP)) {
1579 pr_debug("RX Hash fields_mask is not supported - both TCP SRC and DST must be set\n");
1580 diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
1581 index 5a8216b50e38..788fc0800465 100644
1582 --- a/drivers/md/raid1.c
1583 +++ b/drivers/md/raid1.c
1584 @@ -810,11 +810,15 @@ static void flush_pending_writes(struct r1conf *conf)
1585 spin_lock_irq(&conf->device_lock);
1586
1587 if (conf->pending_bio_list.head) {
1588 + struct blk_plug plug;
1589 struct bio *bio;
1590 +
1591 bio = bio_list_get(&conf->pending_bio_list);
1592 conf->pending_count = 0;
1593 spin_unlock_irq(&conf->device_lock);
1594 + blk_start_plug(&plug);
1595 flush_bio_list(conf, bio);
1596 + blk_finish_plug(&plug);
1597 } else
1598 spin_unlock_irq(&conf->device_lock);
1599 }
1600 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
1601 index 374df5796649..0d18d3b95201 100644
1602 --- a/drivers/md/raid10.c
1603 +++ b/drivers/md/raid10.c
1604 @@ -890,10 +890,13 @@ static void flush_pending_writes(struct r10conf *conf)
1605 spin_lock_irq(&conf->device_lock);
1606
1607 if (conf->pending_bio_list.head) {
1608 + struct blk_plug plug;
1609 struct bio *bio;
1610 +
1611 bio = bio_list_get(&conf->pending_bio_list);
1612 conf->pending_count = 0;
1613 spin_unlock_irq(&conf->device_lock);
1614 + blk_start_plug(&plug);
1615 /* flush any pending bitmap writes to disk
1616 * before proceeding w/ I/O */
1617 bitmap_unplug(conf->mddev->bitmap);
1618 @@ -914,6 +917,7 @@ static void flush_pending_writes(struct r10conf *conf)
1619 generic_make_request(bio);
1620 bio = next;
1621 }
1622 + blk_finish_plug(&plug);
1623 } else
1624 spin_unlock_irq(&conf->device_lock);
1625 }
1626 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
1627 index c406f16f5295..7ec822ced80b 100644
1628 --- a/drivers/md/raid5.c
1629 +++ b/drivers/md/raid5.c
1630 @@ -2678,13 +2678,13 @@ static void raid5_error(struct mddev *mddev, struct md_rdev *rdev)
1631 pr_debug("raid456: error called\n");
1632
1633 spin_lock_irqsave(&conf->device_lock, flags);
1634 + set_bit(Faulty, &rdev->flags);
1635 clear_bit(In_sync, &rdev->flags);
1636 mddev->degraded = raid5_calc_degraded(conf);
1637 spin_unlock_irqrestore(&conf->device_lock, flags);
1638 set_bit(MD_RECOVERY_INTR, &mddev->recovery);
1639
1640 set_bit(Blocked, &rdev->flags);
1641 - set_bit(Faulty, &rdev->flags);
1642 set_mask_bits(&mddev->sb_flags, 0,
1643 BIT(MD_SB_CHANGE_DEVS) | BIT(MD_SB_CHANGE_PENDING));
1644 pr_crit("md/raid:%s: Disk failure on %s, disabling device.\n"
1645 diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
1646 index 94153895fcd4..3bdc34deae7b 100644
1647 --- a/drivers/media/i2c/Kconfig
1648 +++ b/drivers/media/i2c/Kconfig
1649 @@ -660,6 +660,7 @@ config VIDEO_OV13858
1650 tristate "OmniVision OV13858 sensor support"
1651 depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
1652 depends on MEDIA_CAMERA_SUPPORT
1653 + select V4L2_FWNODE
1654 ---help---
1655 This is a Video4Linux2 sensor-level driver for the OmniVision
1656 OV13858 camera.
1657 diff --git a/drivers/media/i2c/s5k6aa.c b/drivers/media/i2c/s5k6aa.c
1658 index 9fd254a8e20d..13c10b5e2b45 100644
1659 --- a/drivers/media/i2c/s5k6aa.c
1660 +++ b/drivers/media/i2c/s5k6aa.c
1661 @@ -421,6 +421,7 @@ static int s5k6aa_set_ahb_address(struct i2c_client *client)
1662
1663 /**
1664 * s5k6aa_configure_pixel_clock - apply ISP main clock/PLL configuration
1665 + * @s5k6aa: pointer to &struct s5k6aa describing the device
1666 *
1667 * Configure the internal ISP PLL for the required output frequency.
1668 * Locking: called with s5k6aa.lock mutex held.
1669 @@ -669,6 +670,7 @@ static int s5k6aa_set_input_params(struct s5k6aa *s5k6aa)
1670
1671 /**
1672 * s5k6aa_configure_video_bus - configure the video output interface
1673 + * @s5k6aa: pointer to &struct s5k6aa describing the device
1674 * @bus_type: video bus type: parallel or MIPI-CSI
1675 * @nlanes: number of MIPI lanes to be used (MIPI-CSI only)
1676 *
1677 @@ -724,6 +726,8 @@ static int s5k6aa_new_config_sync(struct i2c_client *client, int timeout,
1678
1679 /**
1680 * s5k6aa_set_prev_config - write user preview register set
1681 + * @s5k6aa: pointer to &struct s5k6aa describing the device
1682 + * @preset: s5kaa preset to be applied
1683 *
1684 * Configure output resolution and color fromat, pixel clock
1685 * frequency range, device frame rate type and frame period range.
1686 @@ -777,6 +781,7 @@ static int s5k6aa_set_prev_config(struct s5k6aa *s5k6aa,
1687
1688 /**
1689 * s5k6aa_initialize_isp - basic ISP MCU initialization
1690 + * @sd: pointer to V4L2 sub-device descriptor
1691 *
1692 * Configure AHB addresses for registers read/write; configure PLLs for
1693 * required output pixel clock. The ISP power supply needs to be already
1694 diff --git a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
1695 index ad5b25b89699..44975061b953 100644
1696 --- a/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
1697 +++ b/drivers/media/usb/pvrusb2/pvrusb2-hdw.c
1698 @@ -3642,6 +3642,12 @@ static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
1699 hdw);
1700 hdw->ctl_write_urb->actual_length = 0;
1701 hdw->ctl_write_pend_flag = !0;
1702 + if (usb_urb_ep_type_check(hdw->ctl_write_urb)) {
1703 + pvr2_trace(
1704 + PVR2_TRACE_ERROR_LEGS,
1705 + "Invalid write control endpoint");
1706 + return -EINVAL;
1707 + }
1708 status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL);
1709 if (status < 0) {
1710 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1711 @@ -3666,6 +3672,12 @@ status);
1712 hdw);
1713 hdw->ctl_read_urb->actual_length = 0;
1714 hdw->ctl_read_pend_flag = !0;
1715 + if (usb_urb_ep_type_check(hdw->ctl_read_urb)) {
1716 + pvr2_trace(
1717 + PVR2_TRACE_ERROR_LEGS,
1718 + "Invalid read control endpoint");
1719 + return -EINVAL;
1720 + }
1721 status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL);
1722 if (status < 0) {
1723 pvr2_trace(PVR2_TRACE_ERROR_LEGS,
1724 diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h
1725 index 0ccccbaf530d..e4b10b2d1a08 100644
1726 --- a/drivers/misc/mei/hw-me-regs.h
1727 +++ b/drivers/misc/mei/hw-me-regs.h
1728 @@ -132,6 +132,11 @@
1729 #define MEI_DEV_ID_KBP 0xA2BA /* Kaby Point */
1730 #define MEI_DEV_ID_KBP_2 0xA2BB /* Kaby Point 2 */
1731
1732 +#define MEI_DEV_ID_CNP_LP 0x9DE0 /* Cannon Point LP */
1733 +#define MEI_DEV_ID_CNP_LP_4 0x9DE4 /* Cannon Point LP 4 (iTouch) */
1734 +#define MEI_DEV_ID_CNP_H 0xA360 /* Cannon Point H */
1735 +#define MEI_DEV_ID_CNP_H_4 0xA364 /* Cannon Point H 4 (iTouch) */
1736 +
1737 /*
1738 * MEI HW Section
1739 */
1740 diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
1741 index d46cb1f0868f..c77e08cbbfd1 100644
1742 --- a/drivers/misc/mei/pci-me.c
1743 +++ b/drivers/misc/mei/pci-me.c
1744 @@ -98,6 +98,11 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
1745 {MEI_PCI_DEVICE(MEI_DEV_ID_KBP, MEI_ME_PCH8_CFG)},
1746 {MEI_PCI_DEVICE(MEI_DEV_ID_KBP_2, MEI_ME_PCH8_CFG)},
1747
1748 + {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_LP, MEI_ME_PCH8_CFG)},
1749 + {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_LP_4, MEI_ME_PCH8_CFG)},
1750 + {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_H, MEI_ME_PCH8_CFG)},
1751 + {MEI_PCI_DEVICE(MEI_DEV_ID_CNP_H_4, MEI_ME_PCH8_CFG)},
1752 +
1753 /* required last entry */
1754 {0, }
1755 };
1756 diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
1757 index d74c7335c512..eebda5ec9676 100644
1758 --- a/drivers/net/dsa/mv88e6xxx/chip.c
1759 +++ b/drivers/net/dsa/mv88e6xxx/chip.c
1760 @@ -339,7 +339,7 @@ static void mv88e6xxx_g1_irq_free(struct mv88e6xxx_chip *chip)
1761 u16 mask;
1762
1763 mv88e6xxx_g1_read(chip, MV88E6XXX_G1_CTL1, &mask);
1764 - mask |= GENMASK(chip->g1_irq.nirqs, 0);
1765 + mask &= ~GENMASK(chip->g1_irq.nirqs, 0);
1766 mv88e6xxx_g1_write(chip, MV88E6XXX_G1_CTL1, mask);
1767
1768 free_irq(chip->irq, chip);
1769 @@ -395,7 +395,7 @@ static int mv88e6xxx_g1_irq_setup(struct mv88e6xxx_chip *chip)
1770 return 0;
1771
1772 out_disable:
1773 - mask |= GENMASK(chip->g1_irq.nirqs, 0);
1774 + mask &= ~GENMASK(chip->g1_irq.nirqs, 0);
1775 mv88e6xxx_g1_write(chip, MV88E6XXX_G1_CTL1, mask);
1776
1777 out_mapping:
1778 @@ -2153,6 +2153,19 @@ static const struct of_device_id mv88e6xxx_mdio_external_match[] = {
1779 { },
1780 };
1781
1782 +static void mv88e6xxx_mdios_unregister(struct mv88e6xxx_chip *chip)
1783 +
1784 +{
1785 + struct mv88e6xxx_mdio_bus *mdio_bus;
1786 + struct mii_bus *bus;
1787 +
1788 + list_for_each_entry(mdio_bus, &chip->mdios, list) {
1789 + bus = mdio_bus->bus;
1790 +
1791 + mdiobus_unregister(bus);
1792 + }
1793 +}
1794 +
1795 static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip,
1796 struct device_node *np)
1797 {
1798 @@ -2177,27 +2190,16 @@ static int mv88e6xxx_mdios_register(struct mv88e6xxx_chip *chip,
1799 match = of_match_node(mv88e6xxx_mdio_external_match, child);
1800 if (match) {
1801 err = mv88e6xxx_mdio_register(chip, child, true);
1802 - if (err)
1803 + if (err) {
1804 + mv88e6xxx_mdios_unregister(chip);
1805 return err;
1806 + }
1807 }
1808 }
1809
1810 return 0;
1811 }
1812
1813 -static void mv88e6xxx_mdios_unregister(struct mv88e6xxx_chip *chip)
1814 -
1815 -{
1816 - struct mv88e6xxx_mdio_bus *mdio_bus;
1817 - struct mii_bus *bus;
1818 -
1819 - list_for_each_entry(mdio_bus, &chip->mdios, list) {
1820 - bus = mdio_bus->bus;
1821 -
1822 - mdiobus_unregister(bus);
1823 - }
1824 -}
1825 -
1826 static int mv88e6xxx_get_eeprom_len(struct dsa_switch *ds)
1827 {
1828 struct mv88e6xxx_chip *chip = ds->priv;
1829 diff --git a/drivers/net/ethernet/arc/emac_rockchip.c b/drivers/net/ethernet/arc/emac_rockchip.c
1830 index e278e3d96ee0..c6163874e4e7 100644
1831 --- a/drivers/net/ethernet/arc/emac_rockchip.c
1832 +++ b/drivers/net/ethernet/arc/emac_rockchip.c
1833 @@ -220,9 +220,11 @@ static int emac_rockchip_probe(struct platform_device *pdev)
1834
1835 /* RMII TX/RX needs always a rate of 25MHz */
1836 err = clk_set_rate(priv->macclk, 25000000);
1837 - if (err)
1838 + if (err) {
1839 dev_err(dev,
1840 "failed to change mac clock rate (%d)\n", err);
1841 + goto out_clk_disable_macclk;
1842 + }
1843 }
1844
1845 err = arc_emac_probe(ndev, interface);
1846 @@ -232,7 +234,8 @@ static int emac_rockchip_probe(struct platform_device *pdev)
1847 }
1848
1849 return 0;
1850 -
1851 +out_clk_disable_macclk:
1852 + clk_disable_unprepare(priv->macclk);
1853 out_regulator_disable:
1854 if (priv->regulator)
1855 regulator_disable(priv->regulator);
1856 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1857 index aa764c5e3c6b..b66689a6eac0 100644
1858 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1859 +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1860 @@ -8218,8 +8218,9 @@ static void bnxt_shutdown(struct pci_dev *pdev)
1861 if (netif_running(dev))
1862 dev_close(dev);
1863
1864 + bnxt_ulp_shutdown(bp);
1865 +
1866 if (system_state == SYSTEM_POWER_OFF) {
1867 - bnxt_ulp_shutdown(bp);
1868 bnxt_clear_int_mode(bp);
1869 pci_wake_from_d3(pdev, bp->wol);
1870 pci_set_power_state(pdev, PCI_D3hot);
1871 diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
1872 index 5be52d89b182..7f837006bb6a 100644
1873 --- a/drivers/net/ethernet/freescale/gianfar.c
1874 +++ b/drivers/net/ethernet/freescale/gianfar.c
1875 @@ -1378,9 +1378,11 @@ static int gfar_probe(struct platform_device *ofdev)
1876
1877 gfar_init_addr_hash_table(priv);
1878
1879 - /* Insert receive time stamps into padding alignment bytes */
1880 + /* Insert receive time stamps into padding alignment bytes, and
1881 + * plus 2 bytes padding to ensure the cpu alignment.
1882 + */
1883 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)
1884 - priv->padding = 8;
1885 + priv->padding = 8 + DEFAULT_PADDING;
1886
1887 if (dev->features & NETIF_F_IP_CSUM ||
1888 priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)
1889 @@ -1790,6 +1792,7 @@ static int init_phy(struct net_device *dev)
1890 GFAR_SUPPORTED_GBIT : 0;
1891 phy_interface_t interface;
1892 struct phy_device *phydev;
1893 + struct ethtool_eee edata;
1894
1895 priv->oldlink = 0;
1896 priv->oldspeed = 0;
1897 @@ -1814,6 +1817,10 @@ static int init_phy(struct net_device *dev)
1898 /* Add support for flow control, but don't advertise it by default */
1899 phydev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause);
1900
1901 + /* disable EEE autoneg, EEE not supported by eTSEC */
1902 + memset(&edata, 0, sizeof(struct ethtool_eee));
1903 + phy_ethtool_set_eee(phydev, &edata);
1904 +
1905 return 0;
1906 }
1907
1908 diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
1909 index 06f3fe429d82..529be74f609d 100644
1910 --- a/drivers/net/ethernet/marvell/mvpp2.c
1911 +++ b/drivers/net/ethernet/marvell/mvpp2.c
1912 @@ -5399,7 +5399,7 @@ static int mvpp2_aggr_txq_init(struct platform_device *pdev,
1913 u32 txq_dma;
1914
1915 /* Allocate memory for TX descriptors */
1916 - aggr_txq->descs = dma_alloc_coherent(&pdev->dev,
1917 + aggr_txq->descs = dma_zalloc_coherent(&pdev->dev,
1918 MVPP2_AGGR_TXQ_SIZE * MVPP2_DESC_ALIGNED_SIZE,
1919 &aggr_txq->descs_dma, GFP_KERNEL);
1920 if (!aggr_txq->descs)
1921 diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
1922 index 1c43aca8162d..9a7655560629 100644
1923 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
1924 +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
1925 @@ -84,16 +84,13 @@ nfp_repr_phy_port_get_stats64(struct nfp_port *port,
1926 {
1927 u8 __iomem *mem = port->eth_stats;
1928
1929 - /* TX and RX stats are flipped as we are returning the stats as seen
1930 - * at the switch port corresponding to the phys port.
1931 - */
1932 - stats->tx_packets = readq(mem + NFP_MAC_STATS_RX_FRAMES_RECEIVED_OK);
1933 - stats->tx_bytes = readq(mem + NFP_MAC_STATS_RX_IN_OCTETS);
1934 - stats->tx_dropped = readq(mem + NFP_MAC_STATS_RX_IN_ERRORS);
1935 + stats->tx_packets = readq(mem + NFP_MAC_STATS_TX_FRAMES_TRANSMITTED_OK);
1936 + stats->tx_bytes = readq(mem + NFP_MAC_STATS_TX_OUT_OCTETS);
1937 + stats->tx_dropped = readq(mem + NFP_MAC_STATS_TX_OUT_ERRORS);
1938
1939 - stats->rx_packets = readq(mem + NFP_MAC_STATS_TX_FRAMES_TRANSMITTED_OK);
1940 - stats->rx_bytes = readq(mem + NFP_MAC_STATS_TX_OUT_OCTETS);
1941 - stats->rx_dropped = readq(mem + NFP_MAC_STATS_TX_OUT_ERRORS);
1942 + stats->rx_packets = readq(mem + NFP_MAC_STATS_RX_FRAMES_RECEIVED_OK);
1943 + stats->rx_bytes = readq(mem + NFP_MAC_STATS_RX_IN_OCTETS);
1944 + stats->rx_dropped = readq(mem + NFP_MAC_STATS_RX_IN_ERRORS);
1945 }
1946
1947 static void
1948 diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
1949 index 540c7622dcb1..929fb8d96ec0 100644
1950 --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
1951 +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
1952 @@ -166,12 +166,12 @@ static int rmnet_map_egress_handler(struct sk_buff *skb,
1953
1954 if (skb_headroom(skb) < required_headroom) {
1955 if (pskb_expand_head(skb, required_headroom, 0, GFP_KERNEL))
1956 - return RMNET_MAP_CONSUMED;
1957 + goto fail;
1958 }
1959
1960 map_header = rmnet_map_add_map_header(skb, additional_header_len, 0);
1961 if (!map_header)
1962 - return RMNET_MAP_CONSUMED;
1963 + goto fail;
1964
1965 if (port->egress_data_format & RMNET_EGRESS_FORMAT_MUXING) {
1966 if (ep->mux_id == 0xff)
1967 @@ -183,6 +183,10 @@ static int rmnet_map_egress_handler(struct sk_buff *skb,
1968 skb->protocol = htons(ETH_P_MAP);
1969
1970 return RMNET_MAP_SUCCESS;
1971 +
1972 +fail:
1973 + kfree_skb(skb);
1974 + return RMNET_MAP_CONSUMED;
1975 }
1976
1977 /* Ingress / Egress Entry Points */
1978 diff --git a/drivers/net/hippi/rrunner.c b/drivers/net/hippi/rrunner.c
1979 index 71ddadbf2368..d7ba2b813eff 100644
1980 --- a/drivers/net/hippi/rrunner.c
1981 +++ b/drivers/net/hippi/rrunner.c
1982 @@ -1381,8 +1381,8 @@ static int rr_close(struct net_device *dev)
1983 rrpriv->info_dma);
1984 rrpriv->info = NULL;
1985
1986 - free_irq(pdev->irq, dev);
1987 spin_unlock_irqrestore(&rrpriv->lock, flags);
1988 + free_irq(pdev->irq, dev);
1989
1990 return 0;
1991 }
1992 diff --git a/drivers/net/ipvlan/ipvlan_core.c b/drivers/net/ipvlan/ipvlan_core.c
1993 index 8feb84fd4ca7..c23dea48ad0f 100644
1994 --- a/drivers/net/ipvlan/ipvlan_core.c
1995 +++ b/drivers/net/ipvlan/ipvlan_core.c
1996 @@ -375,6 +375,7 @@ static int ipvlan_process_v4_outbound(struct sk_buff *skb)
1997 .flowi4_oif = dev->ifindex,
1998 .flowi4_tos = RT_TOS(ip4h->tos),
1999 .flowi4_flags = FLOWI_FLAG_ANYSRC,
2000 + .flowi4_mark = skb->mark,
2001 .daddr = ip4h->daddr,
2002 .saddr = ip4h->saddr,
2003 };
2004 diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
2005 index cb85307f125b..1b2fe74a44ea 100644
2006 --- a/drivers/net/phy/phylink.c
2007 +++ b/drivers/net/phy/phylink.c
2008 @@ -772,6 +772,7 @@ void phylink_stop(struct phylink *pl)
2009 sfp_upstream_stop(pl->sfp_bus);
2010
2011 set_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state);
2012 + queue_work(system_power_efficient_wq, &pl->resolve);
2013 flush_work(&pl->resolve);
2014 }
2015 EXPORT_SYMBOL_GPL(phylink_stop);
2016 diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c
2017 index baee371bf767..8bf10aba7452 100644
2018 --- a/drivers/net/phy/sfp.c
2019 +++ b/drivers/net/phy/sfp.c
2020 @@ -358,7 +358,7 @@ static void sfp_sm_link_check_los(struct sfp *sfp)
2021 * SFP_OPTIONS_LOS_NORMAL are set? For now, we assume
2022 * the same as SFP_OPTIONS_LOS_NORMAL set.
2023 */
2024 - if (sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED)
2025 + if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED))
2026 los ^= SFP_F_LOS;
2027
2028 if (los)
2029 @@ -583,7 +583,8 @@ static void sfp_sm_event(struct sfp *sfp, unsigned int event)
2030 if (event == SFP_E_TX_FAULT)
2031 sfp_sm_fault(sfp, true);
2032 else if (event ==
2033 - (sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED ?
2034 + (sfp->id.ext.options &
2035 + cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) ?
2036 SFP_E_LOS_HIGH : SFP_E_LOS_LOW))
2037 sfp_sm_link_up(sfp);
2038 break;
2039 @@ -593,7 +594,8 @@ static void sfp_sm_event(struct sfp *sfp, unsigned int event)
2040 sfp_sm_link_down(sfp);
2041 sfp_sm_fault(sfp, true);
2042 } else if (event ==
2043 - (sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED ?
2044 + (sfp->id.ext.options &
2045 + cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) ?
2046 SFP_E_LOS_LOW : SFP_E_LOS_HIGH)) {
2047 sfp_sm_link_down(sfp);
2048 sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
2049 diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
2050 index 511f8339fa96..7927e28f5336 100644
2051 --- a/drivers/net/virtio_net.c
2052 +++ b/drivers/net/virtio_net.c
2053 @@ -714,7 +714,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev,
2054 int num_skb_frags;
2055
2056 buf = virtqueue_get_buf_ctx(rq->vq, &len, &ctx);
2057 - if (unlikely(!ctx)) {
2058 + if (unlikely(!buf)) {
2059 pr_debug("%s: rx error: %d buffers out of %d missing\n",
2060 dev->name, num_buf,
2061 virtio16_to_cpu(vi->vdev,
2062 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
2063 index b3fa8ae80465..eccd25febfe6 100644
2064 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
2065 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
2066 @@ -2064,7 +2064,7 @@ static int brcmf_sdio_txpkt_hdalign(struct brcmf_sdio *bus, struct sk_buff *pkt)
2067 return head_pad;
2068 }
2069
2070 -/**
2071 +/*
2072 * struct brcmf_skbuff_cb reserves first two bytes in sk_buff::cb for
2073 * bus layer usage.
2074 */
2075 diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
2076 index a59b54328c07..052e67bce6b3 100644
2077 --- a/drivers/net/wireless/mac80211_hwsim.c
2078 +++ b/drivers/net/wireless/mac80211_hwsim.c
2079 @@ -3119,6 +3119,11 @@ static int hwsim_new_radio_nl(struct sk_buff *msg, struct genl_info *info)
2080 if (info->attrs[HWSIM_ATTR_CHANNELS])
2081 param.channels = nla_get_u32(info->attrs[HWSIM_ATTR_CHANNELS]);
2082
2083 + if (param.channels > CFG80211_MAX_NUM_DIFFERENT_CHANNELS) {
2084 + GENL_SET_ERR_MSG(info, "too many channels specified");
2085 + return -EINVAL;
2086 + }
2087 +
2088 if (info->attrs[HWSIM_ATTR_NO_VIF])
2089 param.no_vif = true;
2090
2091 diff --git a/drivers/pci/host/pcie-rcar.c b/drivers/pci/host/pcie-rcar.c
2092 index 4e0b25d09b0c..f09ff4789bb5 100644
2093 --- a/drivers/pci/host/pcie-rcar.c
2094 +++ b/drivers/pci/host/pcie-rcar.c
2095 @@ -1146,12 +1146,12 @@ static int rcar_pcie_probe(struct platform_device *pdev)
2096 err = rcar_pcie_get_resources(pcie);
2097 if (err < 0) {
2098 dev_err(dev, "failed to request resources: %d\n", err);
2099 - goto err_free_bridge;
2100 + goto err_free_resource_list;
2101 }
2102
2103 err = rcar_pcie_parse_map_dma_ranges(pcie, dev->of_node);
2104 if (err)
2105 - goto err_free_bridge;
2106 + goto err_free_resource_list;
2107
2108 pm_runtime_enable(dev);
2109 err = pm_runtime_get_sync(dev);
2110 @@ -1194,9 +1194,9 @@ static int rcar_pcie_probe(struct platform_device *pdev)
2111 err_pm_disable:
2112 pm_runtime_disable(dev);
2113
2114 -err_free_bridge:
2115 - pci_free_host_bridge(bridge);
2116 +err_free_resource_list:
2117 pci_free_resource_list(&pcie->resources);
2118 + pci_free_host_bridge(bridge);
2119
2120 return err;
2121 }
2122 diff --git a/drivers/pinctrl/intel/pinctrl-denverton.c b/drivers/pinctrl/intel/pinctrl-denverton.c
2123 index 4500880240f2..6572550cfe78 100644
2124 --- a/drivers/pinctrl/intel/pinctrl-denverton.c
2125 +++ b/drivers/pinctrl/intel/pinctrl-denverton.c
2126 @@ -207,7 +207,7 @@ static const unsigned int dnv_uart0_pins[] = { 60, 61, 64, 65 };
2127 static const unsigned int dnv_uart0_modes[] = { 2, 3, 1, 1 };
2128 static const unsigned int dnv_uart1_pins[] = { 94, 95, 96, 97 };
2129 static const unsigned int dnv_uart2_pins[] = { 60, 61, 62, 63 };
2130 -static const unsigned int dnv_uart2_modes[] = { 1, 1, 2, 2 };
2131 +static const unsigned int dnv_uart2_modes[] = { 1, 2, 2, 2 };
2132 static const unsigned int dnv_emmc_pins[] = {
2133 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
2134 };
2135 diff --git a/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c
2136 index 4f2a726bbaeb..f5f77432ce6f 100644
2137 --- a/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c
2138 +++ b/drivers/pinctrl/sunxi/pinctrl-sun50i-a64.c
2139 @@ -428,7 +428,7 @@ static const struct sunxi_desc_pin a64_pins[] = {
2140 SUNXI_FUNCTION(0x0, "gpio_in"),
2141 SUNXI_FUNCTION(0x1, "gpio_out"),
2142 SUNXI_FUNCTION(0x2, "mmc0"), /* D3 */
2143 - SUNXI_FUNCTION(0x4, "uart0")), /* RX */
2144 + SUNXI_FUNCTION(0x3, "uart0")), /* RX */
2145 SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
2146 SUNXI_FUNCTION(0x0, "gpio_in"),
2147 SUNXI_FUNCTION(0x1, "gpio_out"),
2148 diff --git a/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c b/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c
2149 index bc14e954d7a2..b7ca9a40cc66 100644
2150 --- a/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c
2151 +++ b/drivers/pinctrl/sunxi/pinctrl-sun9i-a80.c
2152 @@ -145,19 +145,19 @@ static const struct sunxi_desc_pin sun9i_a80_pins[] = {
2153 SUNXI_FUNCTION(0x0, "gpio_in"),
2154 SUNXI_FUNCTION(0x1, "gpio_out"),
2155 SUNXI_FUNCTION(0x3, "mcsi"), /* MCLK */
2156 - SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 14)), /* PB_EINT14 */
2157 + SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 14)), /* PB_EINT14 */
2158 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 15),
2159 SUNXI_FUNCTION(0x0, "gpio_in"),
2160 SUNXI_FUNCTION(0x1, "gpio_out"),
2161 SUNXI_FUNCTION(0x3, "mcsi"), /* SCK */
2162 SUNXI_FUNCTION(0x4, "i2c4"), /* SCK */
2163 - SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 15)), /* PB_EINT15 */
2164 + SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 15)), /* PB_EINT15 */
2165 SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 16),
2166 SUNXI_FUNCTION(0x0, "gpio_in"),
2167 SUNXI_FUNCTION(0x1, "gpio_out"),
2168 SUNXI_FUNCTION(0x3, "mcsi"), /* SDA */
2169 SUNXI_FUNCTION(0x4, "i2c4"), /* SDA */
2170 - SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 16)), /* PB_EINT16 */
2171 + SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 16)), /* PB_EINT16 */
2172
2173 /* Hole */
2174 SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
2175 diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
2176 index f42159fd2031..7424e53157b0 100644
2177 --- a/drivers/platform/x86/dell-laptop.c
2178 +++ b/drivers/platform/x86/dell-laptop.c
2179 @@ -49,6 +49,7 @@
2180
2181 struct quirk_entry {
2182 u8 touchpad_led;
2183 + u8 kbd_led_levels_off_1;
2184
2185 int needs_kbd_timeouts;
2186 /*
2187 @@ -79,6 +80,10 @@ static struct quirk_entry quirk_dell_xps13_9333 = {
2188 .kbd_timeouts = { 0, 5, 15, 60, 5 * 60, 15 * 60, -1 },
2189 };
2190
2191 +static struct quirk_entry quirk_dell_latitude_e6410 = {
2192 + .kbd_led_levels_off_1 = 1,
2193 +};
2194 +
2195 static struct platform_driver platform_driver = {
2196 .driver = {
2197 .name = "dell-laptop",
2198 @@ -280,6 +285,15 @@ static const struct dmi_system_id dell_quirks[] __initconst = {
2199 },
2200 .driver_data = &quirk_dell_xps13_9333,
2201 },
2202 + {
2203 + .callback = dmi_matched,
2204 + .ident = "Dell Latitude E6410",
2205 + .matches = {
2206 + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
2207 + DMI_MATCH(DMI_PRODUCT_NAME, "Latitude E6410"),
2208 + },
2209 + .driver_data = &quirk_dell_latitude_e6410,
2210 + },
2211 { }
2212 };
2213
2214 @@ -1200,6 +1214,9 @@ static int kbd_get_info(struct kbd_info *info)
2215 units = (buffer->output[2] >> 8) & 0xFF;
2216 info->levels = (buffer->output[2] >> 16) & 0xFF;
2217
2218 + if (quirks && quirks->kbd_led_levels_off_1 && info->levels)
2219 + info->levels--;
2220 +
2221 if (units & BIT(0))
2222 info->seconds = (buffer->output[3] >> 0) & 0xFF;
2223 if (units & BIT(1))
2224 diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
2225 index 8eafcd5fa004..5ede251c52ca 100644
2226 --- a/drivers/s390/block/dasd_eckd.c
2227 +++ b/drivers/s390/block/dasd_eckd.c
2228 @@ -530,10 +530,12 @@ static int prefix_LRE(struct ccw1 *ccw, struct PFX_eckd_data *pfxdata,
2229 pfxdata->validity.define_extent = 1;
2230
2231 /* private uid is kept up to date, conf_data may be outdated */
2232 - if (startpriv->uid.type != UA_BASE_DEVICE) {
2233 + if (startpriv->uid.type == UA_BASE_PAV_ALIAS)
2234 pfxdata->validity.verify_base = 1;
2235 - if (startpriv->uid.type == UA_HYPER_PAV_ALIAS)
2236 - pfxdata->validity.hyper_pav = 1;
2237 +
2238 + if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) {
2239 + pfxdata->validity.verify_base = 1;
2240 + pfxdata->validity.hyper_pav = 1;
2241 }
2242
2243 rc = define_extent(NULL, dedata, trk, totrk, cmd, basedev, blksize);
2244 @@ -3414,10 +3416,12 @@ static int prepare_itcw(struct itcw *itcw,
2245 pfxdata.validity.define_extent = 1;
2246
2247 /* private uid is kept up to date, conf_data may be outdated */
2248 - if (startpriv->uid.type != UA_BASE_DEVICE) {
2249 + if (startpriv->uid.type == UA_BASE_PAV_ALIAS)
2250 + pfxdata.validity.verify_base = 1;
2251 +
2252 + if (startpriv->uid.type == UA_HYPER_PAV_ALIAS) {
2253 pfxdata.validity.verify_base = 1;
2254 - if (startpriv->uid.type == UA_HYPER_PAV_ALIAS)
2255 - pfxdata.validity.hyper_pav = 1;
2256 + pfxdata.validity.hyper_pav = 1;
2257 }
2258
2259 switch (cmd) {
2260 diff --git a/drivers/scsi/bfa/bfad_bsg.c b/drivers/scsi/bfa/bfad_bsg.c
2261 index b2e8c0dfc79c..1aa46d0763a0 100644
2262 --- a/drivers/scsi/bfa/bfad_bsg.c
2263 +++ b/drivers/scsi/bfa/bfad_bsg.c
2264 @@ -3135,7 +3135,8 @@ bfad_im_bsg_vendor_request(struct bsg_job *job)
2265 struct fc_bsg_request *bsg_request = job->request;
2266 struct fc_bsg_reply *bsg_reply = job->reply;
2267 uint32_t vendor_cmd = bsg_request->rqst_data.h_vendor.vendor_cmd[0];
2268 - struct bfad_im_port_s *im_port = shost_priv(fc_bsg_to_shost(job));
2269 + struct Scsi_Host *shost = fc_bsg_to_shost(job);
2270 + struct bfad_im_port_s *im_port = bfad_get_im_port(shost);
2271 struct bfad_s *bfad = im_port->bfad;
2272 struct request_queue *request_q = job->req->q;
2273 void *payload_kbuf;
2274 @@ -3357,7 +3358,8 @@ int
2275 bfad_im_bsg_els_ct_request(struct bsg_job *job)
2276 {
2277 struct bfa_bsg_data *bsg_data;
2278 - struct bfad_im_port_s *im_port = shost_priv(fc_bsg_to_shost(job));
2279 + struct Scsi_Host *shost = fc_bsg_to_shost(job);
2280 + struct bfad_im_port_s *im_port = bfad_get_im_port(shost);
2281 struct bfad_s *bfad = im_port->bfad;
2282 bfa_bsg_fcpt_t *bsg_fcpt;
2283 struct bfad_fcxp *drv_fcxp;
2284 diff --git a/drivers/scsi/bfa/bfad_im.c b/drivers/scsi/bfa/bfad_im.c
2285 index 24e657a4ec80..c05d6e91e4bd 100644
2286 --- a/drivers/scsi/bfa/bfad_im.c
2287 +++ b/drivers/scsi/bfa/bfad_im.c
2288 @@ -546,6 +546,7 @@ int
2289 bfad_im_scsi_host_alloc(struct bfad_s *bfad, struct bfad_im_port_s *im_port,
2290 struct device *dev)
2291 {
2292 + struct bfad_im_port_pointer *im_portp;
2293 int error = 1;
2294
2295 mutex_lock(&bfad_mutex);
2296 @@ -564,7 +565,8 @@ bfad_im_scsi_host_alloc(struct bfad_s *bfad, struct bfad_im_port_s *im_port,
2297 goto out_free_idr;
2298 }
2299
2300 - im_port->shost->hostdata[0] = (unsigned long)im_port;
2301 + im_portp = shost_priv(im_port->shost);
2302 + im_portp->p = im_port;
2303 im_port->shost->unique_id = im_port->idr_id;
2304 im_port->shost->this_id = -1;
2305 im_port->shost->max_id = MAX_FCP_TARGET;
2306 @@ -748,7 +750,7 @@ bfad_scsi_host_alloc(struct bfad_im_port_s *im_port, struct bfad_s *bfad)
2307
2308 sht->sg_tablesize = bfad->cfg_data.io_max_sge;
2309
2310 - return scsi_host_alloc(sht, sizeof(unsigned long));
2311 + return scsi_host_alloc(sht, sizeof(struct bfad_im_port_pointer));
2312 }
2313
2314 void
2315 diff --git a/drivers/scsi/bfa/bfad_im.h b/drivers/scsi/bfa/bfad_im.h
2316 index c81ec2a77ef5..06ce4ba2b7bc 100644
2317 --- a/drivers/scsi/bfa/bfad_im.h
2318 +++ b/drivers/scsi/bfa/bfad_im.h
2319 @@ -69,6 +69,16 @@ struct bfad_im_port_s {
2320 struct fc_vport *fc_vport;
2321 };
2322
2323 +struct bfad_im_port_pointer {
2324 + struct bfad_im_port_s *p;
2325 +};
2326 +
2327 +static inline struct bfad_im_port_s *bfad_get_im_port(struct Scsi_Host *host)
2328 +{
2329 + struct bfad_im_port_pointer *im_portp = shost_priv(host);
2330 + return im_portp->p;
2331 +}
2332 +
2333 enum bfad_itnim_state {
2334 ITNIM_STATE_NONE,
2335 ITNIM_STATE_ONLINE,
2336 diff --git a/drivers/scsi/lpfc/lpfc_mem.c b/drivers/scsi/lpfc/lpfc_mem.c
2337 index 56faeb049b4a..87c08ff37ddd 100644
2338 --- a/drivers/scsi/lpfc/lpfc_mem.c
2339 +++ b/drivers/scsi/lpfc/lpfc_mem.c
2340 @@ -753,12 +753,12 @@ lpfc_rq_buf_free(struct lpfc_hba *phba, struct lpfc_dmabuf *mp)
2341 drqe.address_hi = putPaddrHigh(rqb_entry->dbuf.phys);
2342 rc = lpfc_sli4_rq_put(rqb_entry->hrq, rqb_entry->drq, &hrqe, &drqe);
2343 if (rc < 0) {
2344 - (rqbp->rqb_free_buffer)(phba, rqb_entry);
2345 lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
2346 "6409 Cannot post to RQ %d: %x %x\n",
2347 rqb_entry->hrq->queue_id,
2348 rqb_entry->hrq->host_index,
2349 rqb_entry->hrq->hba_index);
2350 + (rqbp->rqb_free_buffer)(phba, rqb_entry);
2351 } else {
2352 list_add_tail(&rqb_entry->hbuf.list, &rqbp->rqb_buffer_list);
2353 rqbp->buffer_count++;
2354 diff --git a/drivers/soc/amlogic/meson-gx-socinfo.c b/drivers/soc/amlogic/meson-gx-socinfo.c
2355 index 89f4cf507be6..f2d8c3c53ea4 100644
2356 --- a/drivers/soc/amlogic/meson-gx-socinfo.c
2357 +++ b/drivers/soc/amlogic/meson-gx-socinfo.c
2358 @@ -20,8 +20,8 @@
2359 #define AO_SEC_SOCINFO_OFFSET AO_SEC_SD_CFG8
2360
2361 #define SOCINFO_MAJOR GENMASK(31, 24)
2362 -#define SOCINFO_MINOR GENMASK(23, 16)
2363 -#define SOCINFO_PACK GENMASK(15, 8)
2364 +#define SOCINFO_PACK GENMASK(23, 16)
2365 +#define SOCINFO_MINOR GENMASK(15, 8)
2366 #define SOCINFO_MISC GENMASK(7, 0)
2367
2368 static const struct meson_gx_soc_id {
2369 diff --git a/drivers/spi/spi-sun4i.c b/drivers/spi/spi-sun4i.c
2370 index c5cd635c28f3..41410031f8e9 100644
2371 --- a/drivers/spi/spi-sun4i.c
2372 +++ b/drivers/spi/spi-sun4i.c
2373 @@ -525,7 +525,7 @@ static int sun4i_spi_probe(struct platform_device *pdev)
2374
2375 static int sun4i_spi_remove(struct platform_device *pdev)
2376 {
2377 - pm_runtime_disable(&pdev->dev);
2378 + pm_runtime_force_suspend(&pdev->dev);
2379
2380 return 0;
2381 }
2382 diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c
2383 index 372ce9913e6d..e7541dc90473 100644
2384 --- a/drivers/staging/android/ashmem.c
2385 +++ b/drivers/staging/android/ashmem.c
2386 @@ -710,30 +710,32 @@ static int ashmem_pin_unpin(struct ashmem_area *asma, unsigned long cmd,
2387 size_t pgstart, pgend;
2388 int ret = -EINVAL;
2389
2390 + mutex_lock(&ashmem_mutex);
2391 +
2392 if (unlikely(!asma->file))
2393 - return -EINVAL;
2394 + goto out_unlock;
2395
2396 - if (unlikely(copy_from_user(&pin, p, sizeof(pin))))
2397 - return -EFAULT;
2398 + if (unlikely(copy_from_user(&pin, p, sizeof(pin)))) {
2399 + ret = -EFAULT;
2400 + goto out_unlock;
2401 + }
2402
2403 /* per custom, you can pass zero for len to mean "everything onward" */
2404 if (!pin.len)
2405 pin.len = PAGE_ALIGN(asma->size) - pin.offset;
2406
2407 if (unlikely((pin.offset | pin.len) & ~PAGE_MASK))
2408 - return -EINVAL;
2409 + goto out_unlock;
2410
2411 if (unlikely(((__u32)-1) - pin.offset < pin.len))
2412 - return -EINVAL;
2413 + goto out_unlock;
2414
2415 if (unlikely(PAGE_ALIGN(asma->size) < pin.offset + pin.len))
2416 - return -EINVAL;
2417 + goto out_unlock;
2418
2419 pgstart = pin.offset / PAGE_SIZE;
2420 pgend = pgstart + (pin.len / PAGE_SIZE) - 1;
2421
2422 - mutex_lock(&ashmem_mutex);
2423 -
2424 switch (cmd) {
2425 case ASHMEM_PIN:
2426 ret = ashmem_pin(asma, pgstart, pgend);
2427 @@ -746,6 +748,7 @@ static int ashmem_pin_unpin(struct ashmem_area *asma, unsigned long cmd,
2428 break;
2429 }
2430
2431 +out_unlock:
2432 mutex_unlock(&ashmem_mutex);
2433
2434 return ret;
2435 diff --git a/drivers/staging/android/ion/ion-ioctl.c b/drivers/staging/android/ion/ion-ioctl.c
2436 index d9f8b1424da1..021a956db1a8 100644
2437 --- a/drivers/staging/android/ion/ion-ioctl.c
2438 +++ b/drivers/staging/android/ion/ion-ioctl.c
2439 @@ -71,8 +71,10 @@ long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
2440 return -EFAULT;
2441
2442 ret = validate_ioctl_arg(cmd, &data);
2443 - if (WARN_ON_ONCE(ret))
2444 + if (ret) {
2445 + pr_warn_once("%s: ioctl validate failed\n", __func__);
2446 return ret;
2447 + }
2448
2449 if (!(dir & _IOC_WRITE))
2450 memset(&data, 0, sizeof(data));
2451 diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c
2452 index 4dc5d7a589c2..b6ece18e6a88 100644
2453 --- a/drivers/staging/android/ion/ion_system_heap.c
2454 +++ b/drivers/staging/android/ion/ion_system_heap.c
2455 @@ -371,7 +371,7 @@ static int ion_system_contig_heap_allocate(struct ion_heap *heap,
2456 unsigned long i;
2457 int ret;
2458
2459 - page = alloc_pages(low_order_gfp_flags, order);
2460 + page = alloc_pages(low_order_gfp_flags | __GFP_NOWARN, order);
2461 if (!page)
2462 return -ENOMEM;
2463
2464 diff --git a/drivers/staging/ccree/ssi_hash.c b/drivers/staging/ccree/ssi_hash.c
2465 index f72ca485c86f..e266a70a1b32 100644
2466 --- a/drivers/staging/ccree/ssi_hash.c
2467 +++ b/drivers/staging/ccree/ssi_hash.c
2468 @@ -1781,7 +1781,7 @@ static int ssi_ahash_import(struct ahash_request *req, const void *in)
2469 struct device *dev = &ctx->drvdata->plat_dev->dev;
2470 struct ahash_req_ctx *state = ahash_request_ctx(req);
2471 u32 tmp;
2472 - int rc;
2473 + int rc = 0;
2474
2475 memcpy(&tmp, in, sizeof(u32));
2476 if (tmp != CC_EXPORT_MAGIC) {
2477 diff --git a/drivers/staging/fsl-mc/bus/Kconfig b/drivers/staging/fsl-mc/bus/Kconfig
2478 index 504c987447f2..eee1c1b277fa 100644
2479 --- a/drivers/staging/fsl-mc/bus/Kconfig
2480 +++ b/drivers/staging/fsl-mc/bus/Kconfig
2481 @@ -8,7 +8,7 @@
2482
2483 config FSL_MC_BUS
2484 bool "QorIQ DPAA2 fsl-mc bus driver"
2485 - depends on OF && (ARCH_LAYERSCAPE || (COMPILE_TEST && (ARM || ARM64 || X86 || PPC)))
2486 + depends on OF && (ARCH_LAYERSCAPE || (COMPILE_TEST && (ARM || ARM64 || X86_LOCAL_APIC || PPC)))
2487 select GENERIC_MSI_IRQ_DOMAIN
2488 help
2489 Driver to enable the bus infrastructure for the QorIQ DPAA2
2490 diff --git a/drivers/staging/iio/adc/ad7192.c b/drivers/staging/iio/adc/ad7192.c
2491 index 6150d2780e22..31a195d1bf05 100644
2492 --- a/drivers/staging/iio/adc/ad7192.c
2493 +++ b/drivers/staging/iio/adc/ad7192.c
2494 @@ -141,6 +141,8 @@
2495 #define AD7192_GPOCON_P1DAT BIT(1) /* P1 state */
2496 #define AD7192_GPOCON_P0DAT BIT(0) /* P0 state */
2497
2498 +#define AD7192_EXT_FREQ_MHZ_MIN 2457600
2499 +#define AD7192_EXT_FREQ_MHZ_MAX 5120000
2500 #define AD7192_INT_FREQ_MHZ 4915200
2501
2502 /* NOTE:
2503 @@ -217,6 +219,12 @@ static int ad7192_calibrate_all(struct ad7192_state *st)
2504 ARRAY_SIZE(ad7192_calib_arr));
2505 }
2506
2507 +static inline bool ad7192_valid_external_frequency(u32 freq)
2508 +{
2509 + return (freq >= AD7192_EXT_FREQ_MHZ_MIN &&
2510 + freq <= AD7192_EXT_FREQ_MHZ_MAX);
2511 +}
2512 +
2513 static int ad7192_setup(struct ad7192_state *st,
2514 const struct ad7192_platform_data *pdata)
2515 {
2516 @@ -242,17 +250,20 @@ static int ad7192_setup(struct ad7192_state *st,
2517 id);
2518
2519 switch (pdata->clock_source_sel) {
2520 - case AD7192_CLK_EXT_MCLK1_2:
2521 - case AD7192_CLK_EXT_MCLK2:
2522 - st->mclk = AD7192_INT_FREQ_MHZ;
2523 - break;
2524 case AD7192_CLK_INT:
2525 case AD7192_CLK_INT_CO:
2526 - if (pdata->ext_clk_hz)
2527 - st->mclk = pdata->ext_clk_hz;
2528 - else
2529 - st->mclk = AD7192_INT_FREQ_MHZ;
2530 + st->mclk = AD7192_INT_FREQ_MHZ;
2531 break;
2532 + case AD7192_CLK_EXT_MCLK1_2:
2533 + case AD7192_CLK_EXT_MCLK2:
2534 + if (ad7192_valid_external_frequency(pdata->ext_clk_hz)) {
2535 + st->mclk = pdata->ext_clk_hz;
2536 + break;
2537 + }
2538 + dev_err(&st->sd.spi->dev, "Invalid frequency setting %u\n",
2539 + pdata->ext_clk_hz);
2540 + ret = -EINVAL;
2541 + goto out;
2542 default:
2543 ret = -EINVAL;
2544 goto out;
2545 diff --git a/drivers/staging/iio/impedance-analyzer/ad5933.c b/drivers/staging/iio/impedance-analyzer/ad5933.c
2546 index 3d539eeb0e26..6d31001d1825 100644
2547 --- a/drivers/staging/iio/impedance-analyzer/ad5933.c
2548 +++ b/drivers/staging/iio/impedance-analyzer/ad5933.c
2549 @@ -649,8 +649,6 @@ static int ad5933_register_ring_funcs_and_init(struct iio_dev *indio_dev)
2550 /* Ring buffer functions - here trigger setup related */
2551 indio_dev->setup_ops = &ad5933_ring_setup_ops;
2552
2553 - indio_dev->modes |= INDIO_BUFFER_HARDWARE;
2554 -
2555 return 0;
2556 }
2557
2558 @@ -763,7 +761,7 @@ static int ad5933_probe(struct i2c_client *client,
2559 indio_dev->dev.parent = &client->dev;
2560 indio_dev->info = &ad5933_info;
2561 indio_dev->name = id->name;
2562 - indio_dev->modes = INDIO_DIRECT_MODE;
2563 + indio_dev->modes = (INDIO_BUFFER_SOFTWARE | INDIO_DIRECT_MODE);
2564 indio_dev->channels = ad5933_channels;
2565 indio_dev->num_channels = ARRAY_SIZE(ad5933_channels);
2566
2567 diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
2568 index 47903d510955..8b800e34407b 100644
2569 --- a/drivers/usb/core/urb.c
2570 +++ b/drivers/usb/core/urb.c
2571 @@ -187,6 +187,31 @@ EXPORT_SYMBOL_GPL(usb_unanchor_urb);
2572
2573 /*-------------------------------------------------------------------*/
2574
2575 +static const int pipetypes[4] = {
2576 + PIPE_CONTROL, PIPE_ISOCHRONOUS, PIPE_BULK, PIPE_INTERRUPT
2577 +};
2578 +
2579 +/**
2580 + * usb_urb_ep_type_check - sanity check of endpoint in the given urb
2581 + * @urb: urb to be checked
2582 + *
2583 + * This performs a light-weight sanity check for the endpoint in the
2584 + * given urb. It returns 0 if the urb contains a valid endpoint, otherwise
2585 + * a negative error code.
2586 + */
2587 +int usb_urb_ep_type_check(const struct urb *urb)
2588 +{
2589 + const struct usb_host_endpoint *ep;
2590 +
2591 + ep = usb_pipe_endpoint(urb->dev, urb->pipe);
2592 + if (!ep)
2593 + return -EINVAL;
2594 + if (usb_pipetype(urb->pipe) != pipetypes[usb_endpoint_type(&ep->desc)])
2595 + return -EINVAL;
2596 + return 0;
2597 +}
2598 +EXPORT_SYMBOL_GPL(usb_urb_ep_type_check);
2599 +
2600 /**
2601 * usb_submit_urb - issue an asynchronous transfer request for an endpoint
2602 * @urb: pointer to the urb describing the request
2603 @@ -326,9 +351,6 @@ EXPORT_SYMBOL_GPL(usb_unanchor_urb);
2604 */
2605 int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
2606 {
2607 - static int pipetypes[4] = {
2608 - PIPE_CONTROL, PIPE_ISOCHRONOUS, PIPE_BULK, PIPE_INTERRUPT
2609 - };
2610 int xfertype, max;
2611 struct usb_device *dev;
2612 struct usb_host_endpoint *ep;
2613 @@ -444,7 +466,7 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
2614 */
2615
2616 /* Check that the pipe's type matches the endpoint's type */
2617 - if (usb_pipetype(urb->pipe) != pipetypes[xfertype])
2618 + if (usb_urb_ep_type_check(urb))
2619 dev_WARN(&dev->dev, "BOGUS urb xfer, pipe %x != type %x\n",
2620 usb_pipetype(urb->pipe), pipetypes[xfertype]);
2621
2622 diff --git a/drivers/usb/dwc3/dwc3-of-simple.c b/drivers/usb/dwc3/dwc3-of-simple.c
2623 index a26d1fde0f5e..fbfc09ebd2ec 100644
2624 --- a/drivers/usb/dwc3/dwc3-of-simple.c
2625 +++ b/drivers/usb/dwc3/dwc3-of-simple.c
2626 @@ -57,8 +57,10 @@ static int dwc3_of_simple_clk_init(struct dwc3_of_simple *simple, int count)
2627
2628 clk = of_clk_get(np, i);
2629 if (IS_ERR(clk)) {
2630 - while (--i >= 0)
2631 + while (--i >= 0) {
2632 + clk_disable_unprepare(simple->clks[i]);
2633 clk_put(simple->clks[i]);
2634 + }
2635 return PTR_ERR(clk);
2636 }
2637
2638 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
2639 index f064f1549333..97e52c0d1a72 100644
2640 --- a/drivers/usb/dwc3/gadget.c
2641 +++ b/drivers/usb/dwc3/gadget.c
2642 @@ -267,7 +267,7 @@ int dwc3_send_gadget_ep_cmd(struct dwc3_ep *dep, unsigned cmd,
2643 {
2644 const struct usb_endpoint_descriptor *desc = dep->endpoint.desc;
2645 struct dwc3 *dwc = dep->dwc;
2646 - u32 timeout = 500;
2647 + u32 timeout = 1000;
2648 u32 reg;
2649
2650 int cmd_status = 0;
2651 diff --git a/drivers/usb/usbip/stub_dev.c b/drivers/usb/usbip/stub_dev.c
2652 index 720408d39f11..b8915513fc84 100644
2653 --- a/drivers/usb/usbip/stub_dev.c
2654 +++ b/drivers/usb/usbip/stub_dev.c
2655 @@ -87,6 +87,7 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
2656 goto err;
2657
2658 sdev->ud.tcp_socket = socket;
2659 + sdev->ud.sockfd = sockfd;
2660
2661 spin_unlock_irq(&sdev->ud.lock);
2662
2663 @@ -186,6 +187,7 @@ static void stub_shutdown_connection(struct usbip_device *ud)
2664 if (ud->tcp_socket) {
2665 sockfd_put(ud->tcp_socket);
2666 ud->tcp_socket = NULL;
2667 + ud->sockfd = -1;
2668 }
2669
2670 /* 3. free used data */
2671 @@ -280,6 +282,7 @@ static struct stub_device *stub_device_alloc(struct usb_device *udev)
2672 sdev->ud.status = SDEV_ST_AVAILABLE;
2673 spin_lock_init(&sdev->ud.lock);
2674 sdev->ud.tcp_socket = NULL;
2675 + sdev->ud.sockfd = -1;
2676
2677 INIT_LIST_HEAD(&sdev->priv_init);
2678 INIT_LIST_HEAD(&sdev->priv_tx);
2679 diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
2680 index 692cfdef667e..89858aeed647 100644
2681 --- a/drivers/usb/usbip/vhci_hcd.c
2682 +++ b/drivers/usb/usbip/vhci_hcd.c
2683 @@ -998,6 +998,7 @@ static void vhci_shutdown_connection(struct usbip_device *ud)
2684 if (vdev->ud.tcp_socket) {
2685 sockfd_put(vdev->ud.tcp_socket);
2686 vdev->ud.tcp_socket = NULL;
2687 + vdev->ud.sockfd = -1;
2688 }
2689 pr_info("release socket\n");
2690
2691 @@ -1044,6 +1045,7 @@ static void vhci_device_reset(struct usbip_device *ud)
2692 if (ud->tcp_socket) {
2693 sockfd_put(ud->tcp_socket);
2694 ud->tcp_socket = NULL;
2695 + ud->sockfd = -1;
2696 }
2697 ud->status = VDEV_ST_NULL;
2698
2699 diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
2700 index d6dbb28245e6..a827c1a684a9 100644
2701 --- a/drivers/vhost/vhost.c
2702 +++ b/drivers/vhost/vhost.c
2703 @@ -904,7 +904,7 @@ static void vhost_dev_lock_vqs(struct vhost_dev *d)
2704 {
2705 int i = 0;
2706 for (i = 0; i < d->nvqs; ++i)
2707 - mutex_lock(&d->vqs[i]->mutex);
2708 + mutex_lock_nested(&d->vqs[i]->mutex, i);
2709 }
2710
2711 static void vhost_dev_unlock_vqs(struct vhost_dev *d)
2712 diff --git a/drivers/video/fbdev/mmp/core.c b/drivers/video/fbdev/mmp/core.c
2713 index a0f496049db7..3a6bb6561ba0 100644
2714 --- a/drivers/video/fbdev/mmp/core.c
2715 +++ b/drivers/video/fbdev/mmp/core.c
2716 @@ -23,6 +23,7 @@
2717 #include <linux/slab.h>
2718 #include <linux/dma-mapping.h>
2719 #include <linux/export.h>
2720 +#include <linux/module.h>
2721 #include <video/mmp_disp.h>
2722
2723 static struct mmp_overlay *path_get_overlay(struct mmp_path *path,
2724 @@ -249,3 +250,7 @@ void mmp_unregister_path(struct mmp_path *path)
2725 mutex_unlock(&disp_lock);
2726 }
2727 EXPORT_SYMBOL_GPL(mmp_unregister_path);
2728 +
2729 +MODULE_AUTHOR("Zhou Zhu <zzhu3@marvell.com>");
2730 +MODULE_DESCRIPTION("Marvell MMP display framework");
2731 +MODULE_LICENSE("GPL");
2732 diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig
2733 index 4545561954ee..30187b86729b 100644
2734 --- a/drivers/xen/Kconfig
2735 +++ b/drivers/xen/Kconfig
2736 @@ -258,7 +258,7 @@ config XEN_ACPI_HOTPLUG_CPU
2737
2738 config XEN_ACPI_PROCESSOR
2739 tristate "Xen ACPI processor"
2740 - depends on XEN && X86 && ACPI_PROCESSOR && CPU_FREQ
2741 + depends on XEN && XEN_DOM0 && X86 && ACPI_PROCESSOR && CPU_FREQ
2742 default m
2743 help
2744 This ACPI processor uploads Power Management information to the Xen
2745 diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
2746 index dfdab849037b..167ce43cabe8 100644
2747 --- a/fs/btrfs/disk-io.c
2748 +++ b/fs/btrfs/disk-io.c
2749 @@ -3391,6 +3391,7 @@ static int write_dev_supers(struct btrfs_device *device,
2750 int errors = 0;
2751 u32 crc;
2752 u64 bytenr;
2753 + int op_flags;
2754
2755 if (max_mirrors == 0)
2756 max_mirrors = BTRFS_SUPER_MIRROR_MAX;
2757 @@ -3433,13 +3434,10 @@ static int write_dev_supers(struct btrfs_device *device,
2758 * we fua the first super. The others we allow
2759 * to go down lazy.
2760 */
2761 - if (i == 0) {
2762 - ret = btrfsic_submit_bh(REQ_OP_WRITE,
2763 - REQ_SYNC | REQ_FUA | REQ_META | REQ_PRIO, bh);
2764 - } else {
2765 - ret = btrfsic_submit_bh(REQ_OP_WRITE,
2766 - REQ_SYNC | REQ_META | REQ_PRIO, bh);
2767 - }
2768 + op_flags = REQ_SYNC | REQ_META | REQ_PRIO;
2769 + if (i == 0 && !btrfs_test_opt(device->fs_info, NOBARRIER))
2770 + op_flags |= REQ_FUA;
2771 + ret = btrfsic_submit_bh(REQ_OP_WRITE, op_flags, bh);
2772 if (ret)
2773 errors++;
2774 }
2775 diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
2776 index 1ae61f82e54b..59a01a0844c9 100644
2777 --- a/fs/btrfs/inode.c
2778 +++ b/fs/btrfs/inode.c
2779 @@ -3016,6 +3016,8 @@ static int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent)
2780 compress_type = ordered_extent->compress_type;
2781 if (test_bit(BTRFS_ORDERED_PREALLOC, &ordered_extent->flags)) {
2782 BUG_ON(compress_type);
2783 + btrfs_qgroup_free_data(inode, NULL, ordered_extent->file_offset,
2784 + ordered_extent->len);
2785 ret = btrfs_mark_extent_written(trans, BTRFS_I(inode),
2786 ordered_extent->file_offset,
2787 ordered_extent->file_offset +
2788 diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
2789 index 1f1338d52303..2763f3184ac5 100644
2790 --- a/fs/btrfs/ioctl.c
2791 +++ b/fs/btrfs/ioctl.c
2792 @@ -2221,7 +2221,7 @@ static noinline int btrfs_search_path_in_tree(struct btrfs_fs_info *info,
2793 if (!path)
2794 return -ENOMEM;
2795
2796 - ptr = &name[BTRFS_INO_LOOKUP_PATH_MAX];
2797 + ptr = &name[BTRFS_INO_LOOKUP_PATH_MAX - 1];
2798
2799 key.objectid = tree_id;
2800 key.type = BTRFS_ROOT_ITEM_KEY;
2801 diff --git a/fs/notify/dnotify/dnotify.c b/fs/notify/dnotify/dnotify.c
2802 index cba328315929..63a1ca4b9dee 100644
2803 --- a/fs/notify/dnotify/dnotify.c
2804 +++ b/fs/notify/dnotify/dnotify.c
2805 @@ -319,7 +319,11 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg)
2806 dn_mark = container_of(fsn_mark, struct dnotify_mark, fsn_mark);
2807 spin_lock(&fsn_mark->lock);
2808 } else {
2809 - fsnotify_add_mark_locked(new_fsn_mark, inode, NULL, 0);
2810 + error = fsnotify_add_mark_locked(new_fsn_mark, inode, NULL, 0);
2811 + if (error) {
2812 + mutex_unlock(&dnotify_group->mark_mutex);
2813 + goto out_err;
2814 + }
2815 spin_lock(&new_fsn_mark->lock);
2816 fsn_mark = new_fsn_mark;
2817 dn_mark = new_dn_mark;
2818 @@ -345,6 +349,7 @@ int fcntl_dirnotify(int fd, struct file *filp, unsigned long arg)
2819 */
2820 if (dn_mark == new_dn_mark)
2821 destroy = 1;
2822 + error = 0;
2823 goto out;
2824 }
2825
2826 diff --git a/include/linux/ptr_ring.h b/include/linux/ptr_ring.h
2827 index 6866df4f31b5..35d125569e68 100644
2828 --- a/include/linux/ptr_ring.h
2829 +++ b/include/linux/ptr_ring.h
2830 @@ -445,9 +445,14 @@ static inline int ptr_ring_consume_batched_bh(struct ptr_ring *r,
2831 __PTR_RING_PEEK_CALL_v; \
2832 })
2833
2834 +/* Not all gfp_t flags (besides GFP_KERNEL) are allowed. See
2835 + * documentation for vmalloc for which of them are legal.
2836 + */
2837 static inline void **__ptr_ring_init_queue_alloc(unsigned int size, gfp_t gfp)
2838 {
2839 - return kcalloc(size, sizeof(void *), gfp);
2840 + if (size * sizeof(void *) > KMALLOC_MAX_SIZE)
2841 + return NULL;
2842 + return kvmalloc_array(size, sizeof(void *), gfp | __GFP_ZERO);
2843 }
2844
2845 static inline void __ptr_ring_set_size(struct ptr_ring *r, int size)
2846 @@ -580,7 +585,7 @@ static inline int ptr_ring_resize(struct ptr_ring *r, int size, gfp_t gfp,
2847 spin_unlock(&(r)->producer_lock);
2848 spin_unlock_irqrestore(&(r)->consumer_lock, flags);
2849
2850 - kfree(old);
2851 + kvfree(old);
2852
2853 return 0;
2854 }
2855 @@ -620,7 +625,7 @@ static inline int ptr_ring_resize_multiple(struct ptr_ring **rings,
2856 }
2857
2858 for (i = 0; i < nrings; ++i)
2859 - kfree(queues[i]);
2860 + kvfree(queues[i]);
2861
2862 kfree(queues);
2863
2864 @@ -628,7 +633,7 @@ static inline int ptr_ring_resize_multiple(struct ptr_ring **rings,
2865
2866 nomem:
2867 while (--i >= 0)
2868 - kfree(queues[i]);
2869 + kvfree(queues[i]);
2870
2871 kfree(queues);
2872
2873 @@ -643,7 +648,7 @@ static inline void ptr_ring_cleanup(struct ptr_ring *r, void (*destroy)(void *))
2874 if (destroy)
2875 while ((ptr = ptr_ring_consume(r)))
2876 destroy(ptr);
2877 - kfree(r->queue);
2878 + kvfree(r->queue);
2879 }
2880
2881 #endif /* _LINUX_PTR_RING_H */
2882 diff --git a/include/linux/serdev.h b/include/linux/serdev.h
2883 index e69402d4a8ae..d609e6dc5bad 100644
2884 --- a/include/linux/serdev.h
2885 +++ b/include/linux/serdev.h
2886 @@ -184,7 +184,7 @@ static inline int serdev_controller_receive_buf(struct serdev_controller *ctrl,
2887 struct serdev_device *serdev = ctrl->serdev;
2888
2889 if (!serdev || !serdev->ops->receive_buf)
2890 - return -EINVAL;
2891 + return 0;
2892
2893 return serdev->ops->receive_buf(serdev, data, count);
2894 }
2895 diff --git a/include/linux/usb.h b/include/linux/usb.h
2896 index 9c63792a8134..4192a1755ccb 100644
2897 --- a/include/linux/usb.h
2898 +++ b/include/linux/usb.h
2899 @@ -1729,6 +1729,8 @@ static inline int usb_urb_dir_out(struct urb *urb)
2900 return (urb->transfer_flags & URB_DIR_MASK) == URB_DIR_OUT;
2901 }
2902
2903 +int usb_urb_ep_type_check(const struct urb *urb);
2904 +
2905 void *usb_alloc_coherent(struct usb_device *dev, size_t size,
2906 gfp_t mem_flags, dma_addr_t *dma);
2907 void usb_free_coherent(struct usb_device *dev, size_t size,
2908 diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
2909 index f12fa5245a45..ea0ed58db97e 100644
2910 --- a/include/net/cfg80211.h
2911 +++ b/include/net/cfg80211.h
2912 @@ -815,6 +815,8 @@ struct cfg80211_csa_settings {
2913 u8 count;
2914 };
2915
2916 +#define CFG80211_MAX_NUM_DIFFERENT_CHANNELS 10
2917 +
2918 /**
2919 * struct iface_combination_params - input parameters for interface combinations
2920 *
2921 diff --git a/include/net/red.h b/include/net/red.h
2922 index 9a9347710701..9665582c4687 100644
2923 --- a/include/net/red.h
2924 +++ b/include/net/red.h
2925 @@ -168,6 +168,17 @@ static inline void red_set_vars(struct red_vars *v)
2926 v->qcount = -1;
2927 }
2928
2929 +static inline bool red_check_params(u32 qth_min, u32 qth_max, u8 Wlog)
2930 +{
2931 + if (fls(qth_min) + Wlog > 32)
2932 + return false;
2933 + if (fls(qth_max) + Wlog > 32)
2934 + return false;
2935 + if (qth_max < qth_min)
2936 + return false;
2937 + return true;
2938 +}
2939 +
2940 static inline void red_set_parms(struct red_parms *p,
2941 u32 qth_min, u32 qth_max, u8 Wlog, u8 Plog,
2942 u8 Scell_log, u8 *stab, u32 max_P)
2943 @@ -179,7 +190,7 @@ static inline void red_set_parms(struct red_parms *p,
2944 p->qth_max = qth_max << Wlog;
2945 p->Wlog = Wlog;
2946 p->Plog = Plog;
2947 - if (delta < 0)
2948 + if (delta <= 0)
2949 delta = 1;
2950 p->qth_delta = delta;
2951 if (!max_P) {
2952 diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
2953 index d7d8cba01469..749a42882437 100644
2954 --- a/include/net/sctp/sctp.h
2955 +++ b/include/net/sctp/sctp.h
2956 @@ -444,7 +444,8 @@ static inline int sctp_frag_point(const struct sctp_association *asoc, int pmtu)
2957 if (asoc->user_frag)
2958 frag = min_t(int, frag, asoc->user_frag);
2959
2960 - frag = SCTP_TRUNC4(min_t(int, frag, SCTP_MAX_CHUNK_LEN));
2961 + frag = SCTP_TRUNC4(min_t(int, frag, SCTP_MAX_CHUNK_LEN -
2962 + sizeof(struct sctp_data_chunk)));
2963
2964 return frag;
2965 }
2966 diff --git a/include/trace/events/clk.h b/include/trace/events/clk.h
2967 index 758607226bfd..2cd449328aee 100644
2968 --- a/include/trace/events/clk.h
2969 +++ b/include/trace/events/clk.h
2970 @@ -134,12 +134,12 @@ DECLARE_EVENT_CLASS(clk_parent,
2971
2972 TP_STRUCT__entry(
2973 __string( name, core->name )
2974 - __string( pname, parent->name )
2975 + __string( pname, parent ? parent->name : "none" )
2976 ),
2977
2978 TP_fast_assign(
2979 __assign_str(name, core->name);
2980 - __assign_str(pname, parent->name);
2981 + __assign_str(pname, parent ? parent->name : "none");
2982 ),
2983
2984 TP_printk("%s %s", __get_str(name), __get_str(pname))
2985 diff --git a/include/trace/events/xdp.h b/include/trace/events/xdp.h
2986 index 810e94160c12..f7c73ae62b7a 100644
2987 --- a/include/trace/events/xdp.h
2988 +++ b/include/trace/events/xdp.h
2989 @@ -8,6 +8,7 @@
2990 #include <linux/netdevice.h>
2991 #include <linux/filter.h>
2992 #include <linux/tracepoint.h>
2993 +#include <linux/bpf.h>
2994
2995 #define __XDP_ACT_MAP(FN) \
2996 FN(ABORTED) \
2997 diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
2998 index f9339c3219bc..b5ae6488b890 100644
2999 --- a/kernel/bpf/verifier.c
3000 +++ b/kernel/bpf/verifier.c
3001 @@ -1865,15 +1865,13 @@ static int adjust_ptr_min_max_vals(struct bpf_verifier_env *env,
3002
3003 dst_reg = &regs[dst];
3004
3005 - if (WARN_ON_ONCE(known && (smin_val != smax_val))) {
3006 - print_verifier_state(&env->cur_state);
3007 - verbose("verifier internal error: known but bad sbounds\n");
3008 - return -EINVAL;
3009 - }
3010 - if (WARN_ON_ONCE(known && (umin_val != umax_val))) {
3011 - print_verifier_state(&env->cur_state);
3012 - verbose("verifier internal error: known but bad ubounds\n");
3013 - return -EINVAL;
3014 + if ((known && (smin_val != smax_val || umin_val != umax_val)) ||
3015 + smin_val > smax_val || umin_val > umax_val) {
3016 + /* Taint dst register if offset had invalid bounds derived from
3017 + * e.g. dead branches.
3018 + */
3019 + __mark_reg_unknown(dst_reg);
3020 + return 0;
3021 }
3022
3023 if (BPF_CLASS(insn->code) != BPF_ALU64) {
3024 @@ -2075,6 +2073,15 @@ static int adjust_scalar_min_max_vals(struct bpf_verifier_env *env,
3025 src_known = tnum_is_const(src_reg.var_off);
3026 dst_known = tnum_is_const(dst_reg->var_off);
3027
3028 + if ((src_known && (smin_val != smax_val || umin_val != umax_val)) ||
3029 + smin_val > smax_val || umin_val > umax_val) {
3030 + /* Taint dst register if offset had invalid bounds derived from
3031 + * e.g. dead branches.
3032 + */
3033 + __mark_reg_unknown(dst_reg);
3034 + return 0;
3035 + }
3036 +
3037 if (!src_known &&
3038 opcode != BPF_ADD && opcode != BPF_SUB && opcode != BPF_AND) {
3039 __mark_reg_unknown(dst_reg);
3040 diff --git a/kernel/events/core.c b/kernel/events/core.c
3041 index 8c20af8738ac..f42f7c7a8f84 100644
3042 --- a/kernel/events/core.c
3043 +++ b/kernel/events/core.c
3044 @@ -6719,6 +6719,7 @@ static void perf_event_namespaces_output(struct perf_event *event,
3045 struct perf_namespaces_event *namespaces_event = data;
3046 struct perf_output_handle handle;
3047 struct perf_sample_data sample;
3048 + u16 header_size = namespaces_event->event_id.header.size;
3049 int ret;
3050
3051 if (!perf_event_namespaces_match(event))
3052 @@ -6729,7 +6730,7 @@ static void perf_event_namespaces_output(struct perf_event *event,
3053 ret = perf_output_begin(&handle, event,
3054 namespaces_event->event_id.header.size);
3055 if (ret)
3056 - return;
3057 + goto out;
3058
3059 namespaces_event->event_id.pid = perf_event_pid(event,
3060 namespaces_event->task);
3061 @@ -6741,6 +6742,8 @@ static void perf_event_namespaces_output(struct perf_event *event,
3062 perf_event__output_id_sample(event, &handle, &sample);
3063
3064 perf_output_end(&handle);
3065 +out:
3066 + namespaces_event->event_id.header.size = header_size;
3067 }
3068
3069 static void perf_fill_ns_link_info(struct perf_ns_link_info *ns_link_info,
3070 diff --git a/kernel/kcov.c b/kernel/kcov.c
3071 index fc6af9e1308b..b11ef6e51f7e 100644
3072 --- a/kernel/kcov.c
3073 +++ b/kernel/kcov.c
3074 @@ -225,9 +225,9 @@ static int kcov_ioctl_locked(struct kcov *kcov, unsigned int cmd,
3075 if (unused != 0 || kcov->mode == KCOV_MODE_DISABLED ||
3076 kcov->area == NULL)
3077 return -EINVAL;
3078 - if (kcov->t != NULL)
3079 - return -EBUSY;
3080 t = current;
3081 + if (kcov->t != NULL || t->kcov != NULL)
3082 + return -EBUSY;
3083 /* Cache in task struct for performance. */
3084 t->kcov_size = kcov->size;
3085 t->kcov_area = kcov->area;
3086 diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
3087 index 4d362d3e4571..2f0f5720b123 100644
3088 --- a/kernel/locking/lockdep.c
3089 +++ b/kernel/locking/lockdep.c
3090 @@ -4777,7 +4777,8 @@ void lockdep_invariant_state(bool force)
3091 * Verify the former, enforce the latter.
3092 */
3093 WARN_ON_ONCE(!force && current->lockdep_depth);
3094 - invalidate_xhlock(&xhlock(current->xhlock_idx));
3095 + if (current->xhlocks)
3096 + invalidate_xhlock(&xhlock(current->xhlock_idx));
3097 }
3098
3099 static int cross_lock(struct lockdep_map *lock)
3100 diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
3101 index 45a3928544ce..e73dcab8e9f0 100644
3102 --- a/kernel/trace/blktrace.c
3103 +++ b/kernel/trace/blktrace.c
3104 @@ -66,7 +66,8 @@ static struct tracer_flags blk_tracer_flags = {
3105 };
3106
3107 /* Global reference count of probes */
3108 -static atomic_t blk_probes_ref = ATOMIC_INIT(0);
3109 +static DEFINE_MUTEX(blk_probe_mutex);
3110 +static int blk_probes_ref;
3111
3112 static void blk_register_tracepoints(void);
3113 static void blk_unregister_tracepoints(void);
3114 @@ -329,11 +330,26 @@ static void blk_trace_free(struct blk_trace *bt)
3115 kfree(bt);
3116 }
3117
3118 +static void get_probe_ref(void)
3119 +{
3120 + mutex_lock(&blk_probe_mutex);
3121 + if (++blk_probes_ref == 1)
3122 + blk_register_tracepoints();
3123 + mutex_unlock(&blk_probe_mutex);
3124 +}
3125 +
3126 +static void put_probe_ref(void)
3127 +{
3128 + mutex_lock(&blk_probe_mutex);
3129 + if (!--blk_probes_ref)
3130 + blk_unregister_tracepoints();
3131 + mutex_unlock(&blk_probe_mutex);
3132 +}
3133 +
3134 static void blk_trace_cleanup(struct blk_trace *bt)
3135 {
3136 blk_trace_free(bt);
3137 - if (atomic_dec_and_test(&blk_probes_ref))
3138 - blk_unregister_tracepoints();
3139 + put_probe_ref();
3140 }
3141
3142 int blk_trace_remove(struct request_queue *q)
3143 @@ -538,8 +554,7 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
3144 if (cmpxchg(&q->blk_trace, NULL, bt))
3145 goto err;
3146
3147 - if (atomic_inc_return(&blk_probes_ref) == 1)
3148 - blk_register_tracepoints();
3149 + get_probe_ref();
3150
3151 ret = 0;
3152 err:
3153 @@ -1558,9 +1573,7 @@ static int blk_trace_remove_queue(struct request_queue *q)
3154 if (bt == NULL)
3155 return -EINVAL;
3156
3157 - if (atomic_dec_and_test(&blk_probes_ref))
3158 - blk_unregister_tracepoints();
3159 -
3160 + put_probe_ref();
3161 blk_trace_free(bt);
3162 return 0;
3163 }
3164 @@ -1591,8 +1604,7 @@ static int blk_trace_setup_queue(struct request_queue *q,
3165 if (cmpxchg(&q->blk_trace, NULL, bt))
3166 goto free_bt;
3167
3168 - if (atomic_inc_return(&blk_probes_ref) == 1)
3169 - blk_register_tracepoints();
3170 + get_probe_ref();
3171 return 0;
3172
3173 free_bt:
3174 diff --git a/lib/oid_registry.c b/lib/oid_registry.c
3175 index 41b9e50711a7..b5f7d9986be1 100644
3176 --- a/lib/oid_registry.c
3177 +++ b/lib/oid_registry.c
3178 @@ -116,7 +116,7 @@ int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize)
3179 int count;
3180
3181 if (v >= end)
3182 - return -EBADMSG;
3183 + goto bad;
3184
3185 n = *v++;
3186 ret = count = snprintf(buffer, bufsize, "%u.%u", n / 40, n % 40);
3187 @@ -134,7 +134,7 @@ int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize)
3188 num = n & 0x7f;
3189 do {
3190 if (v >= end)
3191 - return -EBADMSG;
3192 + goto bad;
3193 n = *v++;
3194 num <<= 7;
3195 num |= n & 0x7f;
3196 @@ -148,6 +148,10 @@ int sprint_oid(const void *data, size_t datasize, char *buffer, size_t bufsize)
3197 }
3198
3199 return ret;
3200 +
3201 +bad:
3202 + snprintf(buffer, bufsize, "(bad)");
3203 + return -EBADMSG;
3204 }
3205 EXPORT_SYMBOL_GPL(sprint_oid);
3206
3207 diff --git a/mm/early_ioremap.c b/mm/early_ioremap.c
3208 index d04ac1ec0559..1826f191e72c 100644
3209 --- a/mm/early_ioremap.c
3210 +++ b/mm/early_ioremap.c
3211 @@ -111,7 +111,7 @@ __early_ioremap(resource_size_t phys_addr, unsigned long size, pgprot_t prot)
3212 enum fixed_addresses idx;
3213 int i, slot;
3214
3215 - WARN_ON(system_state != SYSTEM_BOOTING);
3216 + WARN_ON(system_state >= SYSTEM_RUNNING);
3217
3218 slot = -1;
3219 for (i = 0; i < FIX_BTMAPS_SLOTS; i++) {
3220 diff --git a/mm/vmalloc.c b/mm/vmalloc.c
3221 index 673942094328..ebff729cc956 100644
3222 --- a/mm/vmalloc.c
3223 +++ b/mm/vmalloc.c
3224 @@ -1943,11 +1943,15 @@ void *vmalloc_exec(unsigned long size)
3225 }
3226
3227 #if defined(CONFIG_64BIT) && defined(CONFIG_ZONE_DMA32)
3228 -#define GFP_VMALLOC32 GFP_DMA32 | GFP_KERNEL
3229 +#define GFP_VMALLOC32 (GFP_DMA32 | GFP_KERNEL)
3230 #elif defined(CONFIG_64BIT) && defined(CONFIG_ZONE_DMA)
3231 -#define GFP_VMALLOC32 GFP_DMA | GFP_KERNEL
3232 +#define GFP_VMALLOC32 (GFP_DMA | GFP_KERNEL)
3233 #else
3234 -#define GFP_VMALLOC32 GFP_KERNEL
3235 +/*
3236 + * 64b systems should always have either DMA or DMA32 zones. For others
3237 + * GFP_DMA32 should do the right thing and use the normal zone.
3238 + */
3239 +#define GFP_VMALLOC32 GFP_DMA32 | GFP_KERNEL
3240 #endif
3241
3242 /**
3243 diff --git a/mm/vmscan.c b/mm/vmscan.c
3244 index eb2f0315b8c0..441f346fb5e2 100644
3245 --- a/mm/vmscan.c
3246 +++ b/mm/vmscan.c
3247 @@ -297,10 +297,13 @@ EXPORT_SYMBOL(register_shrinker);
3248 */
3249 void unregister_shrinker(struct shrinker *shrinker)
3250 {
3251 + if (!shrinker->nr_deferred)
3252 + return;
3253 down_write(&shrinker_rwsem);
3254 list_del(&shrinker->list);
3255 up_write(&shrinker_rwsem);
3256 kfree(shrinker->nr_deferred);
3257 + shrinker->nr_deferred = NULL;
3258 }
3259 EXPORT_SYMBOL(unregister_shrinker);
3260
3261 diff --git a/net/core/dev.c b/net/core/dev.c
3262 index ffee085f0357..d33bbed640b1 100644
3263 --- a/net/core/dev.c
3264 +++ b/net/core/dev.c
3265 @@ -2792,7 +2792,7 @@ struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
3266
3267 segs = skb_mac_gso_segment(skb, features);
3268
3269 - if (unlikely(skb_needs_check(skb, tx_path)))
3270 + if (unlikely(skb_needs_check(skb, tx_path) && !IS_ERR(segs)))
3271 skb_warn_bad_offload(skb);
3272
3273 return segs;
3274 diff --git a/net/core/gen_estimator.c b/net/core/gen_estimator.c
3275 index 7c1ffd6f9501..00ecec4891f3 100644
3276 --- a/net/core/gen_estimator.c
3277 +++ b/net/core/gen_estimator.c
3278 @@ -159,7 +159,11 @@ int gen_new_estimator(struct gnet_stats_basic_packed *bstats,
3279 est->intvl_log = intvl_log;
3280 est->cpu_bstats = cpu_bstats;
3281
3282 + if (stats_lock)
3283 + local_bh_disable();
3284 est_fetch_counters(est, &b);
3285 + if (stats_lock)
3286 + local_bh_enable();
3287 est->last_bytes = b.bytes;
3288 est->last_packets = b.packets;
3289 old = rcu_dereference_protected(*rate_est, 1);
3290 diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c
3291 index 73a0399dc7a2..8dbfcd388633 100644
3292 --- a/net/decnet/af_decnet.c
3293 +++ b/net/decnet/af_decnet.c
3294 @@ -1339,6 +1339,12 @@ static int dn_setsockopt(struct socket *sock, int level, int optname, char __use
3295 lock_sock(sk);
3296 err = __dn_setsockopt(sock, level, optname, optval, optlen, 0);
3297 release_sock(sk);
3298 +#ifdef CONFIG_NETFILTER
3299 + /* we need to exclude all possible ENOPROTOOPTs except default case */
3300 + if (err == -ENOPROTOOPT && optname != DSO_LINKINFO &&
3301 + optname != DSO_STREAM && optname != DSO_SEQPACKET)
3302 + err = nf_setsockopt(sk, PF_DECnet, optname, optval, optlen);
3303 +#endif
3304
3305 return err;
3306 }
3307 @@ -1446,15 +1452,6 @@ static int __dn_setsockopt(struct socket *sock, int level,int optname, char __us
3308 dn_nsp_send_disc(sk, 0x38, 0, sk->sk_allocation);
3309 break;
3310
3311 - default:
3312 -#ifdef CONFIG_NETFILTER
3313 - return nf_setsockopt(sk, PF_DECnet, optname, optval, optlen);
3314 -#endif
3315 - case DSO_LINKINFO:
3316 - case DSO_STREAM:
3317 - case DSO_SEQPACKET:
3318 - return -ENOPROTOOPT;
3319 -
3320 case DSO_MAXWINDOW:
3321 if (optlen != sizeof(unsigned long))
3322 return -EINVAL;
3323 @@ -1502,6 +1499,12 @@ static int __dn_setsockopt(struct socket *sock, int level,int optname, char __us
3324 return -EINVAL;
3325 scp->info_loc = u.info;
3326 break;
3327 +
3328 + case DSO_LINKINFO:
3329 + case DSO_STREAM:
3330 + case DSO_SEQPACKET:
3331 + default:
3332 + return -ENOPROTOOPT;
3333 }
3334
3335 return 0;
3336 @@ -1515,6 +1518,20 @@ static int dn_getsockopt(struct socket *sock, int level, int optname, char __use
3337 lock_sock(sk);
3338 err = __dn_getsockopt(sock, level, optname, optval, optlen, 0);
3339 release_sock(sk);
3340 +#ifdef CONFIG_NETFILTER
3341 + if (err == -ENOPROTOOPT && optname != DSO_STREAM &&
3342 + optname != DSO_SEQPACKET && optname != DSO_CONACCEPT &&
3343 + optname != DSO_CONREJECT) {
3344 + int len;
3345 +
3346 + if (get_user(len, optlen))
3347 + return -EFAULT;
3348 +
3349 + err = nf_getsockopt(sk, PF_DECnet, optname, optval, &len);
3350 + if (err >= 0)
3351 + err = put_user(len, optlen);
3352 + }
3353 +#endif
3354
3355 return err;
3356 }
3357 @@ -1580,26 +1597,6 @@ static int __dn_getsockopt(struct socket *sock, int level,int optname, char __us
3358 r_data = &link;
3359 break;
3360
3361 - default:
3362 -#ifdef CONFIG_NETFILTER
3363 - {
3364 - int ret, len;
3365 -
3366 - if (get_user(len, optlen))
3367 - return -EFAULT;
3368 -
3369 - ret = nf_getsockopt(sk, PF_DECnet, optname, optval, &len);
3370 - if (ret >= 0)
3371 - ret = put_user(len, optlen);
3372 - return ret;
3373 - }
3374 -#endif
3375 - case DSO_STREAM:
3376 - case DSO_SEQPACKET:
3377 - case DSO_CONACCEPT:
3378 - case DSO_CONREJECT:
3379 - return -ENOPROTOOPT;
3380 -
3381 case DSO_MAXWINDOW:
3382 if (r_len > sizeof(unsigned long))
3383 r_len = sizeof(unsigned long);
3384 @@ -1631,6 +1628,13 @@ static int __dn_getsockopt(struct socket *sock, int level,int optname, char __us
3385 r_len = sizeof(unsigned char);
3386 r_data = &scp->info_rem;
3387 break;
3388 +
3389 + case DSO_STREAM:
3390 + case DSO_SEQPACKET:
3391 + case DSO_CONACCEPT:
3392 + case DSO_CONREJECT:
3393 + default:
3394 + return -ENOPROTOOPT;
3395 }
3396
3397 if (r_data) {
3398 diff --git a/net/ipv4/esp4_offload.c b/net/ipv4/esp4_offload.c
3399 index 56c49623bb9d..29b333a62ab0 100644
3400 --- a/net/ipv4/esp4_offload.c
3401 +++ b/net/ipv4/esp4_offload.c
3402 @@ -38,7 +38,8 @@ static struct sk_buff **esp4_gro_receive(struct sk_buff **head,
3403 __be32 spi;
3404 int err;
3405
3406 - skb_pull(skb, offset);
3407 + if (!pskb_pull(skb, offset))
3408 + return NULL;
3409
3410 if ((err = xfrm_parse_spi(skb, IPPROTO_ESP, &spi, &seq)) != 0)
3411 goto out;
3412 diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
3413 index 60fb1eb7d7d8..c7df4969f80a 100644
3414 --- a/net/ipv4/ip_sockglue.c
3415 +++ b/net/ipv4/ip_sockglue.c
3416 @@ -1251,11 +1251,8 @@ int ip_setsockopt(struct sock *sk, int level,
3417 if (err == -ENOPROTOOPT && optname != IP_HDRINCL &&
3418 optname != IP_IPSEC_POLICY &&
3419 optname != IP_XFRM_POLICY &&
3420 - !ip_mroute_opt(optname)) {
3421 - lock_sock(sk);
3422 + !ip_mroute_opt(optname))
3423 err = nf_setsockopt(sk, PF_INET, optname, optval, optlen);
3424 - release_sock(sk);
3425 - }
3426 #endif
3427 return err;
3428 }
3429 @@ -1280,12 +1277,9 @@ int compat_ip_setsockopt(struct sock *sk, int level, int optname,
3430 if (err == -ENOPROTOOPT && optname != IP_HDRINCL &&
3431 optname != IP_IPSEC_POLICY &&
3432 optname != IP_XFRM_POLICY &&
3433 - !ip_mroute_opt(optname)) {
3434 - lock_sock(sk);
3435 - err = compat_nf_setsockopt(sk, PF_INET, optname,
3436 - optval, optlen);
3437 - release_sock(sk);
3438 - }
3439 + !ip_mroute_opt(optname))
3440 + err = compat_nf_setsockopt(sk, PF_INET, optname, optval,
3441 + optlen);
3442 #endif
3443 return err;
3444 }
3445 diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
3446 index 17b4ca562944..24a8c2e63e3d 100644
3447 --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
3448 +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
3449 @@ -431,7 +431,7 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par)
3450 struct ipt_clusterip_tgt_info *cipinfo = par->targinfo;
3451 const struct ipt_entry *e = par->entryinfo;
3452 struct clusterip_config *config;
3453 - int ret;
3454 + int ret, i;
3455
3456 if (par->nft_compat) {
3457 pr_err("cannot use CLUSTERIP target from nftables compat\n");
3458 @@ -450,8 +450,18 @@ static int clusterip_tg_check(const struct xt_tgchk_param *par)
3459 pr_info("Please specify destination IP\n");
3460 return -EINVAL;
3461 }
3462 -
3463 - /* FIXME: further sanity checks */
3464 + if (cipinfo->num_local_nodes > ARRAY_SIZE(cipinfo->local_nodes)) {
3465 + pr_info("bad num_local_nodes %u\n", cipinfo->num_local_nodes);
3466 + return -EINVAL;
3467 + }
3468 + for (i = 0; i < cipinfo->num_local_nodes; i++) {
3469 + if (cipinfo->local_nodes[i] - 1 >=
3470 + sizeof(config->local_nodes) * 8) {
3471 + pr_info("bad local_nodes[%d] %u\n",
3472 + i, cipinfo->local_nodes[i]);
3473 + return -EINVAL;
3474 + }
3475 + }
3476
3477 config = clusterip_config_find_get(par->net, e->ip.dst.s_addr, 1);
3478 if (!config) {
3479 diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
3480 index fe374da4bc13..997a96896f1a 100644
3481 --- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
3482 +++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c
3483 @@ -218,15 +218,19 @@ getorigdst(struct sock *sk, int optval, void __user *user, int *len)
3484 struct nf_conntrack_tuple tuple;
3485
3486 memset(&tuple, 0, sizeof(tuple));
3487 +
3488 + lock_sock(sk);
3489 tuple.src.u3.ip = inet->inet_rcv_saddr;
3490 tuple.src.u.tcp.port = inet->inet_sport;
3491 tuple.dst.u3.ip = inet->inet_daddr;
3492 tuple.dst.u.tcp.port = inet->inet_dport;
3493 tuple.src.l3num = PF_INET;
3494 tuple.dst.protonum = sk->sk_protocol;
3495 + release_sock(sk);
3496
3497 /* We only do TCP and SCTP at the moment: is there a better way? */
3498 - if (sk->sk_protocol != IPPROTO_TCP && sk->sk_protocol != IPPROTO_SCTP) {
3499 + if (tuple.dst.protonum != IPPROTO_TCP &&
3500 + tuple.dst.protonum != IPPROTO_SCTP) {
3501 pr_debug("SO_ORIGINAL_DST: Not a TCP/SCTP socket\n");
3502 return -ENOPROTOOPT;
3503 }
3504 diff --git a/net/ipv6/esp6_offload.c b/net/ipv6/esp6_offload.c
3505 index 1ea9d794447e..f52c314d4c97 100644
3506 --- a/net/ipv6/esp6_offload.c
3507 +++ b/net/ipv6/esp6_offload.c
3508 @@ -60,7 +60,8 @@ static struct sk_buff **esp6_gro_receive(struct sk_buff **head,
3509 int nhoff;
3510 int err;
3511
3512 - skb_pull(skb, offset);
3513 + if (!pskb_pull(skb, offset))
3514 + return NULL;
3515
3516 if ((err = xfrm_parse_spi(skb, IPPROTO_ESP, &spi, &seq)) != 0)
3517 goto out;
3518 diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
3519 index 3b251760cb8c..24b69384bdbf 100644
3520 --- a/net/ipv6/ipv6_sockglue.c
3521 +++ b/net/ipv6/ipv6_sockglue.c
3522 @@ -915,12 +915,8 @@ int ipv6_setsockopt(struct sock *sk, int level, int optname,
3523 #ifdef CONFIG_NETFILTER
3524 /* we need to exclude all possible ENOPROTOOPTs except default case */
3525 if (err == -ENOPROTOOPT && optname != IPV6_IPSEC_POLICY &&
3526 - optname != IPV6_XFRM_POLICY) {
3527 - lock_sock(sk);
3528 - err = nf_setsockopt(sk, PF_INET6, optname, optval,
3529 - optlen);
3530 - release_sock(sk);
3531 - }
3532 + optname != IPV6_XFRM_POLICY)
3533 + err = nf_setsockopt(sk, PF_INET6, optname, optval, optlen);
3534 #endif
3535 return err;
3536 }
3537 @@ -950,12 +946,9 @@ int compat_ipv6_setsockopt(struct sock *sk, int level, int optname,
3538 #ifdef CONFIG_NETFILTER
3539 /* we need to exclude all possible ENOPROTOOPTs except default case */
3540 if (err == -ENOPROTOOPT && optname != IPV6_IPSEC_POLICY &&
3541 - optname != IPV6_XFRM_POLICY) {
3542 - lock_sock(sk);
3543 - err = compat_nf_setsockopt(sk, PF_INET6, optname,
3544 - optval, optlen);
3545 - release_sock(sk);
3546 - }
3547 + optname != IPV6_XFRM_POLICY)
3548 + err = compat_nf_setsockopt(sk, PF_INET6, optname, optval,
3549 + optlen);
3550 #endif
3551 return err;
3552 }
3553 diff --git a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
3554 index fe01dc953c56..b807478c4f7f 100644
3555 --- a/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
3556 +++ b/net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c
3557 @@ -226,20 +226,27 @@ static const struct nf_hook_ops ipv6_conntrack_ops[] = {
3558 static int
3559 ipv6_getorigdst(struct sock *sk, int optval, void __user *user, int *len)
3560 {
3561 - const struct inet_sock *inet = inet_sk(sk);
3562 + struct nf_conntrack_tuple tuple = { .src.l3num = NFPROTO_IPV6 };
3563 const struct ipv6_pinfo *inet6 = inet6_sk(sk);
3564 + const struct inet_sock *inet = inet_sk(sk);
3565 const struct nf_conntrack_tuple_hash *h;
3566 struct sockaddr_in6 sin6;
3567 - struct nf_conntrack_tuple tuple = { .src.l3num = NFPROTO_IPV6 };
3568 struct nf_conn *ct;
3569 + __be32 flow_label;
3570 + int bound_dev_if;
3571
3572 + lock_sock(sk);
3573 tuple.src.u3.in6 = sk->sk_v6_rcv_saddr;
3574 tuple.src.u.tcp.port = inet->inet_sport;
3575 tuple.dst.u3.in6 = sk->sk_v6_daddr;
3576 tuple.dst.u.tcp.port = inet->inet_dport;
3577 tuple.dst.protonum = sk->sk_protocol;
3578 + bound_dev_if = sk->sk_bound_dev_if;
3579 + flow_label = inet6->flow_label;
3580 + release_sock(sk);
3581
3582 - if (sk->sk_protocol != IPPROTO_TCP && sk->sk_protocol != IPPROTO_SCTP)
3583 + if (tuple.dst.protonum != IPPROTO_TCP &&
3584 + tuple.dst.protonum != IPPROTO_SCTP)
3585 return -ENOPROTOOPT;
3586
3587 if (*len < 0 || (unsigned int) *len < sizeof(sin6))
3588 @@ -257,14 +264,13 @@ ipv6_getorigdst(struct sock *sk, int optval, void __user *user, int *len)
3589
3590 sin6.sin6_family = AF_INET6;
3591 sin6.sin6_port = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u.tcp.port;
3592 - sin6.sin6_flowinfo = inet6->flow_label & IPV6_FLOWINFO_MASK;
3593 + sin6.sin6_flowinfo = flow_label & IPV6_FLOWINFO_MASK;
3594 memcpy(&sin6.sin6_addr,
3595 &ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.in6,
3596 sizeof(sin6.sin6_addr));
3597
3598 nf_ct_put(ct);
3599 - sin6.sin6_scope_id = ipv6_iface_scope_id(&sin6.sin6_addr,
3600 - sk->sk_bound_dev_if);
3601 + sin6.sin6_scope_id = ipv6_iface_scope_id(&sin6.sin6_addr, bound_dev_if);
3602 return copy_to_user(user, &sin6, sizeof(sin6)) ? -EFAULT : 0;
3603 }
3604
3605 diff --git a/net/kcm/kcmsock.c b/net/kcm/kcmsock.c
3606 index c5fa634e63ca..58d53b907d53 100644
3607 --- a/net/kcm/kcmsock.c
3608 +++ b/net/kcm/kcmsock.c
3609 @@ -1387,8 +1387,13 @@ static int kcm_attach(struct socket *sock, struct socket *csock,
3610 if (!csk)
3611 return -EINVAL;
3612
3613 - /* We must prevent loops or risk deadlock ! */
3614 - if (csk->sk_family == PF_KCM)
3615 + /* Only allow TCP sockets to be attached for now */
3616 + if ((csk->sk_family != AF_INET && csk->sk_family != AF_INET6) ||
3617 + csk->sk_protocol != IPPROTO_TCP)
3618 + return -EOPNOTSUPP;
3619 +
3620 + /* Don't allow listeners or closed sockets */
3621 + if (csk->sk_state == TCP_LISTEN || csk->sk_state == TCP_CLOSE)
3622 return -EOPNOTSUPP;
3623
3624 psock = kmem_cache_zalloc(kcm_psockp, GFP_KERNEL);
3625 @@ -1405,9 +1410,18 @@ static int kcm_attach(struct socket *sock, struct socket *csock,
3626 return err;
3627 }
3628
3629 - sock_hold(csk);
3630 -
3631 write_lock_bh(&csk->sk_callback_lock);
3632 +
3633 + /* Check if sk_user_data is aready by KCM or someone else.
3634 + * Must be done under lock to prevent race conditions.
3635 + */
3636 + if (csk->sk_user_data) {
3637 + write_unlock_bh(&csk->sk_callback_lock);
3638 + strp_done(&psock->strp);
3639 + kmem_cache_free(kcm_psockp, psock);
3640 + return -EALREADY;
3641 + }
3642 +
3643 psock->save_data_ready = csk->sk_data_ready;
3644 psock->save_write_space = csk->sk_write_space;
3645 psock->save_state_change = csk->sk_state_change;
3646 @@ -1415,8 +1429,11 @@ static int kcm_attach(struct socket *sock, struct socket *csock,
3647 csk->sk_data_ready = psock_data_ready;
3648 csk->sk_write_space = psock_write_space;
3649 csk->sk_state_change = psock_state_change;
3650 +
3651 write_unlock_bh(&csk->sk_callback_lock);
3652
3653 + sock_hold(csk);
3654 +
3655 /* Finished initialization, now add the psock to the MUX. */
3656 spin_lock_bh(&mux->lock);
3657 head = &mux->psocks;
3658 diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
3659 index d8571f414208..60c92158a2cd 100644
3660 --- a/net/netfilter/x_tables.c
3661 +++ b/net/netfilter/x_tables.c
3662 @@ -39,7 +39,6 @@ MODULE_LICENSE("GPL");
3663 MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
3664 MODULE_DESCRIPTION("{ip,ip6,arp,eb}_tables backend module");
3665
3666 -#define SMP_ALIGN(x) (((x) + SMP_CACHE_BYTES-1) & ~(SMP_CACHE_BYTES-1))
3667 #define XT_PCPU_BLOCK_SIZE 4096
3668
3669 struct compat_delta {
3670 @@ -210,6 +209,9 @@ xt_request_find_match(uint8_t nfproto, const char *name, uint8_t revision)
3671 {
3672 struct xt_match *match;
3673
3674 + if (strnlen(name, XT_EXTENSION_MAXNAMELEN) == XT_EXTENSION_MAXNAMELEN)
3675 + return ERR_PTR(-EINVAL);
3676 +
3677 match = xt_find_match(nfproto, name, revision);
3678 if (IS_ERR(match)) {
3679 request_module("%st_%s", xt_prefix[nfproto], name);
3680 @@ -252,6 +254,9 @@ struct xt_target *xt_request_find_target(u8 af, const char *name, u8 revision)
3681 {
3682 struct xt_target *target;
3683
3684 + if (strnlen(name, XT_EXTENSION_MAXNAMELEN) == XT_EXTENSION_MAXNAMELEN)
3685 + return ERR_PTR(-EINVAL);
3686 +
3687 target = xt_find_target(af, name, revision);
3688 if (IS_ERR(target)) {
3689 request_module("%st_%s", xt_prefix[af], name);
3690 @@ -1000,7 +1005,7 @@ struct xt_table_info *xt_alloc_table_info(unsigned int size)
3691 return NULL;
3692
3693 /* Pedantry: prevent them from hitting BUG() in vmalloc.c --RR */
3694 - if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages)
3695 + if ((size >> PAGE_SHIFT) + 2 > totalram_pages)
3696 return NULL;
3697
3698 info = kvmalloc(sz, GFP_KERNEL);
3699 diff --git a/net/netfilter/xt_RATEEST.c b/net/netfilter/xt_RATEEST.c
3700 index 498b54fd04d7..141c295191f6 100644
3701 --- a/net/netfilter/xt_RATEEST.c
3702 +++ b/net/netfilter/xt_RATEEST.c
3703 @@ -39,23 +39,31 @@ static void xt_rateest_hash_insert(struct xt_rateest *est)
3704 hlist_add_head(&est->list, &rateest_hash[h]);
3705 }
3706
3707 -struct xt_rateest *xt_rateest_lookup(const char *name)
3708 +static struct xt_rateest *__xt_rateest_lookup(const char *name)
3709 {
3710 struct xt_rateest *est;
3711 unsigned int h;
3712
3713 h = xt_rateest_hash(name);
3714 - mutex_lock(&xt_rateest_mutex);
3715 hlist_for_each_entry(est, &rateest_hash[h], list) {
3716 if (strcmp(est->name, name) == 0) {
3717 est->refcnt++;
3718 - mutex_unlock(&xt_rateest_mutex);
3719 return est;
3720 }
3721 }
3722 - mutex_unlock(&xt_rateest_mutex);
3723 +
3724 return NULL;
3725 }
3726 +
3727 +struct xt_rateest *xt_rateest_lookup(const char *name)
3728 +{
3729 + struct xt_rateest *est;
3730 +
3731 + mutex_lock(&xt_rateest_mutex);
3732 + est = __xt_rateest_lookup(name);
3733 + mutex_unlock(&xt_rateest_mutex);
3734 + return est;
3735 +}
3736 EXPORT_SYMBOL_GPL(xt_rateest_lookup);
3737
3738 void xt_rateest_put(struct xt_rateest *est)
3739 @@ -100,8 +108,10 @@ static int xt_rateest_tg_checkentry(const struct xt_tgchk_param *par)
3740
3741 net_get_random_once(&jhash_rnd, sizeof(jhash_rnd));
3742
3743 - est = xt_rateest_lookup(info->name);
3744 + mutex_lock(&xt_rateest_mutex);
3745 + est = __xt_rateest_lookup(info->name);
3746 if (est) {
3747 + mutex_unlock(&xt_rateest_mutex);
3748 /*
3749 * If estimator parameters are specified, they must match the
3750 * existing estimator.
3751 @@ -139,11 +149,13 @@ static int xt_rateest_tg_checkentry(const struct xt_tgchk_param *par)
3752
3753 info->est = est;
3754 xt_rateest_hash_insert(est);
3755 + mutex_unlock(&xt_rateest_mutex);
3756 return 0;
3757
3758 err2:
3759 kfree(est);
3760 err1:
3761 + mutex_unlock(&xt_rateest_mutex);
3762 return ret;
3763 }
3764
3765 diff --git a/net/netfilter/xt_bpf.c b/net/netfilter/xt_bpf.c
3766 index 29123934887b..5185ff0f8f58 100644
3767 --- a/net/netfilter/xt_bpf.c
3768 +++ b/net/netfilter/xt_bpf.c
3769 @@ -27,6 +27,9 @@ static int __bpf_mt_check_bytecode(struct sock_filter *insns, __u16 len,
3770 {
3771 struct sock_fprog_kern program;
3772
3773 + if (len > XT_BPF_MAX_NUM_INSTR)
3774 + return -EINVAL;
3775 +
3776 program.len = len;
3777 program.filter = insns;
3778
3779 @@ -55,6 +58,9 @@ static int __bpf_mt_check_path(const char *path, struct bpf_prog **ret)
3780 mm_segment_t oldfs = get_fs();
3781 int retval, fd;
3782
3783 + if (strnlen(path, XT_BPF_PATH_MAX) == XT_BPF_PATH_MAX)
3784 + return -EINVAL;
3785 +
3786 set_fs(KERNEL_DS);
3787 fd = bpf_obj_get_user(path);
3788 set_fs(oldfs);
3789 diff --git a/net/netfilter/xt_cgroup.c b/net/netfilter/xt_cgroup.c
3790 index 1db1ce59079f..891f4e7e8ea7 100644
3791 --- a/net/netfilter/xt_cgroup.c
3792 +++ b/net/netfilter/xt_cgroup.c
3793 @@ -52,6 +52,7 @@ static int cgroup_mt_check_v1(const struct xt_mtchk_param *par)
3794 return -EINVAL;
3795 }
3796
3797 + info->priv = NULL;
3798 if (info->has_path) {
3799 cgrp = cgroup_get_from_path(info->path);
3800 if (IS_ERR(cgrp)) {
3801 diff --git a/net/rds/connection.c b/net/rds/connection.c
3802 index 7ee2d5d68b78..9efc82c665b5 100644
3803 --- a/net/rds/connection.c
3804 +++ b/net/rds/connection.c
3805 @@ -366,6 +366,8 @@ void rds_conn_shutdown(struct rds_conn_path *cp)
3806 * to the conn hash, so we never trigger a reconnect on this
3807 * conn - the reconnect is always triggered by the active peer. */
3808 cancel_delayed_work_sync(&cp->cp_conn_w);
3809 + if (conn->c_destroy_in_prog)
3810 + return;
3811 rcu_read_lock();
3812 if (!hlist_unhashed(&conn->c_hash_node)) {
3813 rcu_read_unlock();
3814 @@ -445,7 +447,6 @@ void rds_conn_destroy(struct rds_connection *conn)
3815 */
3816 rds_cong_remove_conn(conn);
3817
3818 - put_net(conn->c_net);
3819 kfree(conn->c_path);
3820 kmem_cache_free(rds_conn_slab, conn);
3821
3822 diff --git a/net/rds/rds.h b/net/rds/rds.h
3823 index c349c71babff..d09f6c1facb4 100644
3824 --- a/net/rds/rds.h
3825 +++ b/net/rds/rds.h
3826 @@ -150,7 +150,7 @@ struct rds_connection {
3827
3828 /* Protocol version */
3829 unsigned int c_version;
3830 - struct net *c_net;
3831 + possible_net_t c_net;
3832
3833 struct list_head c_map_item;
3834 unsigned long c_map_queued;
3835 @@ -165,13 +165,13 @@ struct rds_connection {
3836 static inline
3837 struct net *rds_conn_net(struct rds_connection *conn)
3838 {
3839 - return conn->c_net;
3840 + return read_pnet(&conn->c_net);
3841 }
3842
3843 static inline
3844 void rds_conn_net_set(struct rds_connection *conn, struct net *net)
3845 {
3846 - conn->c_net = get_net(net);
3847 + write_pnet(&conn->c_net, net);
3848 }
3849
3850 #define RDS_FLAG_CONG_BITMAP 0x01
3851 diff --git a/net/rds/tcp.c b/net/rds/tcp.c
3852 index 6b7ee71f40c6..2a08bf75d008 100644
3853 --- a/net/rds/tcp.c
3854 +++ b/net/rds/tcp.c
3855 @@ -306,7 +306,8 @@ static void rds_tcp_conn_free(void *arg)
3856 rdsdebug("freeing tc %p\n", tc);
3857
3858 spin_lock_irqsave(&rds_tcp_conn_lock, flags);
3859 - list_del(&tc->t_tcp_node);
3860 + if (!tc->t_tcp_node_detached)
3861 + list_del(&tc->t_tcp_node);
3862 spin_unlock_irqrestore(&rds_tcp_conn_lock, flags);
3863
3864 kmem_cache_free(rds_tcp_conn_slab, tc);
3865 @@ -527,12 +528,16 @@ static void rds_tcp_kill_sock(struct net *net)
3866 rds_tcp_listen_stop(lsock, &rtn->rds_tcp_accept_w);
3867 spin_lock_irq(&rds_tcp_conn_lock);
3868 list_for_each_entry_safe(tc, _tc, &rds_tcp_conn_list, t_tcp_node) {
3869 - struct net *c_net = tc->t_cpath->cp_conn->c_net;
3870 + struct net *c_net = read_pnet(&tc->t_cpath->cp_conn->c_net);
3871
3872 if (net != c_net || !tc->t_sock)
3873 continue;
3874 - if (!list_has_conn(&tmp_list, tc->t_cpath->cp_conn))
3875 + if (!list_has_conn(&tmp_list, tc->t_cpath->cp_conn)) {
3876 list_move_tail(&tc->t_tcp_node, &tmp_list);
3877 + } else {
3878 + list_del(&tc->t_tcp_node);
3879 + tc->t_tcp_node_detached = true;
3880 + }
3881 }
3882 spin_unlock_irq(&rds_tcp_conn_lock);
3883 list_for_each_entry_safe(tc, _tc, &tmp_list, t_tcp_node) {
3884 @@ -586,7 +591,7 @@ static void rds_tcp_sysctl_reset(struct net *net)
3885
3886 spin_lock_irq(&rds_tcp_conn_lock);
3887 list_for_each_entry_safe(tc, _tc, &rds_tcp_conn_list, t_tcp_node) {
3888 - struct net *c_net = tc->t_cpath->cp_conn->c_net;
3889 + struct net *c_net = read_pnet(&tc->t_cpath->cp_conn->c_net);
3890
3891 if (net != c_net || !tc->t_sock)
3892 continue;
3893 diff --git a/net/rds/tcp.h b/net/rds/tcp.h
3894 index 1aafbf7c3011..e7858ee8ed8b 100644
3895 --- a/net/rds/tcp.h
3896 +++ b/net/rds/tcp.h
3897 @@ -12,6 +12,7 @@ struct rds_tcp_incoming {
3898 struct rds_tcp_connection {
3899
3900 struct list_head t_tcp_node;
3901 + bool t_tcp_node_detached;
3902 struct rds_conn_path *t_cpath;
3903 /* t_conn_path_lock synchronizes the connection establishment between
3904 * rds_tcp_accept_one and rds_tcp_conn_path_connect
3905 diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c
3906 index b30a2c70bd48..531250fceb9e 100644
3907 --- a/net/sched/sch_choke.c
3908 +++ b/net/sched/sch_choke.c
3909 @@ -369,6 +369,9 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)
3910
3911 ctl = nla_data(tb[TCA_CHOKE_PARMS]);
3912
3913 + if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog))
3914 + return -EINVAL;
3915 +
3916 if (ctl->limit > CHOKE_MAX_QUEUE)
3917 return -EINVAL;
3918
3919 diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c
3920 index 17c7130454bd..bc30f9186ac6 100644
3921 --- a/net/sched/sch_gred.c
3922 +++ b/net/sched/sch_gred.c
3923 @@ -356,6 +356,9 @@ static inline int gred_change_vq(struct Qdisc *sch, int dp,
3924 struct gred_sched *table = qdisc_priv(sch);
3925 struct gred_sched_data *q = table->tab[dp];
3926
3927 + if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog))
3928 + return -EINVAL;
3929 +
3930 if (!q) {
3931 table->tab[dp] = q = *prealloc;
3932 *prealloc = NULL;
3933 diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c
3934 index 93b9d70a9b28..d87c41e82917 100644
3935 --- a/net/sched/sch_red.c
3936 +++ b/net/sched/sch_red.c
3937 @@ -184,6 +184,8 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt)
3938 max_P = tb[TCA_RED_MAX_P] ? nla_get_u32(tb[TCA_RED_MAX_P]) : 0;
3939
3940 ctl = nla_data(tb[TCA_RED_PARMS]);
3941 + if (!red_check_params(ctl->qth_min, ctl->qth_max, ctl->Wlog))
3942 + return -EINVAL;
3943
3944 if (ctl->limit > 0) {
3945 child = fifo_create_dflt(sch, &bfifo_qdisc_ops, ctl->limit);
3946 diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
3947 index 74ea863b8240..3fbf20126045 100644
3948 --- a/net/sched/sch_sfq.c
3949 +++ b/net/sched/sch_sfq.c
3950 @@ -637,6 +637,9 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
3951 if (ctl->divisor &&
3952 (!is_power_of_2(ctl->divisor) || ctl->divisor > 65536))
3953 return -EINVAL;
3954 + if (ctl_v1 && !red_check_params(ctl_v1->qth_min, ctl_v1->qth_max,
3955 + ctl_v1->Wlog))
3956 + return -EINVAL;
3957 if (ctl_v1 && ctl_v1->qth_min) {
3958 p = kmalloc(sizeof(*p), GFP_KERNEL);
3959 if (!p)
3960 diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c
3961 index 2966ff400755..39ac91060bc2 100644
3962 --- a/net/sctp/outqueue.c
3963 +++ b/net/sctp/outqueue.c
3964 @@ -368,7 +368,8 @@ static int sctp_prsctp_prune_sent(struct sctp_association *asoc,
3965 asoc->abandoned_sent[SCTP_PR_INDEX(PRIO)]++;
3966 streamout->abandoned_sent[SCTP_PR_INDEX(PRIO)]++;
3967
3968 - if (!chk->tsn_gap_acked) {
3969 + if (queue != &asoc->outqueue.retransmit &&
3970 + !chk->tsn_gap_acked) {
3971 if (chk->transport)
3972 chk->transport->flight_size -=
3973 sctp_data_size(chk);
3974 @@ -1429,7 +1430,8 @@ static void sctp_check_transmitted(struct sctp_outq *q,
3975 /* If this chunk has not been acked, stop
3976 * considering it as 'outstanding'.
3977 */
3978 - if (!tchunk->tsn_gap_acked) {
3979 + if (transmitted_queue != &q->retransmit &&
3980 + !tchunk->tsn_gap_acked) {
3981 if (tchunk->transport)
3982 tchunk->transport->flight_size -=
3983 sctp_data_size(tchunk);
3984 diff --git a/net/sctp/socket.c b/net/sctp/socket.c
3985 index 1c08d86efe94..3c8b92667866 100644
3986 --- a/net/sctp/socket.c
3987 +++ b/net/sctp/socket.c
3988 @@ -3136,9 +3136,9 @@ static int sctp_setsockopt_mappedv4(struct sock *sk, char __user *optval, unsign
3989 */
3990 static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, unsigned int optlen)
3991 {
3992 + struct sctp_sock *sp = sctp_sk(sk);
3993 struct sctp_assoc_value params;
3994 struct sctp_association *asoc;
3995 - struct sctp_sock *sp = sctp_sk(sk);
3996 int val;
3997
3998 if (optlen == sizeof(int)) {
3999 @@ -3154,26 +3154,35 @@ static int sctp_setsockopt_maxseg(struct sock *sk, char __user *optval, unsigned
4000 if (copy_from_user(&params, optval, optlen))
4001 return -EFAULT;
4002 val = params.assoc_value;
4003 - } else
4004 + } else {
4005 return -EINVAL;
4006 + }
4007
4008 - if ((val != 0) && ((val < 8) || (val > SCTP_MAX_CHUNK_LEN)))
4009 - return -EINVAL;
4010 + if (val) {
4011 + int min_len, max_len;
4012
4013 - asoc = sctp_id2assoc(sk, params.assoc_id);
4014 - if (!asoc && params.assoc_id && sctp_style(sk, UDP))
4015 - return -EINVAL;
4016 + min_len = SCTP_DEFAULT_MINSEGMENT - sp->pf->af->net_header_len;
4017 + min_len -= sizeof(struct sctphdr) +
4018 + sizeof(struct sctp_data_chunk);
4019 +
4020 + max_len = SCTP_MAX_CHUNK_LEN - sizeof(struct sctp_data_chunk);
4021
4022 + if (val < min_len || val > max_len)
4023 + return -EINVAL;
4024 + }
4025 +
4026 + asoc = sctp_id2assoc(sk, params.assoc_id);
4027 if (asoc) {
4028 if (val == 0) {
4029 - val = asoc->pathmtu;
4030 - val -= sp->pf->af->net_header_len;
4031 + val = asoc->pathmtu - sp->pf->af->net_header_len;
4032 val -= sizeof(struct sctphdr) +
4033 - sizeof(struct sctp_data_chunk);
4034 + sizeof(struct sctp_data_chunk);
4035 }
4036 asoc->user_frag = val;
4037 asoc->frag_point = sctp_frag_point(asoc, asoc->pathmtu);
4038 } else {
4039 + if (params.assoc_id && sctp_style(sk, UDP))
4040 + return -EINVAL;
4041 sp->user_frag = val;
4042 }
4043
4044 diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transport.c
4045 index e21991fe883a..2c63f7b169b5 100644
4046 --- a/net/vmw_vsock/hyperv_transport.c
4047 +++ b/net/vmw_vsock/hyperv_transport.c
4048 @@ -488,7 +488,7 @@ static void hvs_release(struct vsock_sock *vsk)
4049
4050 lock_sock(sk);
4051
4052 - sk->sk_state = SS_DISCONNECTING;
4053 + sk->sk_state = TCP_CLOSING;
4054 vsock_remove_sock(vsk);
4055
4056 release_sock(sk);
4057 diff --git a/net/wireless/core.c b/net/wireless/core.c
4058 index 7b33e8c366bc..33ce0484b2a0 100644
4059 --- a/net/wireless/core.c
4060 +++ b/net/wireless/core.c
4061 @@ -439,6 +439,8 @@ struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
4062 if (rv)
4063 goto use_default_name;
4064 } else {
4065 + int rv;
4066 +
4067 use_default_name:
4068 /* NOTE: This is *probably* safe w/out holding rtnl because of
4069 * the restrictions on phy names. Probably this call could
4070 @@ -446,7 +448,11 @@ struct wiphy *wiphy_new_nm(const struct cfg80211_ops *ops, int sizeof_priv,
4071 * phyX. But, might should add some locking and check return
4072 * value, and use a different name if this one exists?
4073 */
4074 - dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
4075 + rv = dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
4076 + if (rv < 0) {
4077 + kfree(rdev);
4078 + return NULL;
4079 + }
4080 }
4081
4082 INIT_LIST_HEAD(&rdev->wiphy.wdev_list);
4083 diff --git a/net/wireless/core.h b/net/wireless/core.h
4084 index 705835047f98..90f90c7d8bf9 100644
4085 --- a/net/wireless/core.h
4086 +++ b/net/wireless/core.h
4087 @@ -502,8 +502,6 @@ void cfg80211_stop_p2p_device(struct cfg80211_registered_device *rdev,
4088 void cfg80211_stop_nan(struct cfg80211_registered_device *rdev,
4089 struct wireless_dev *wdev);
4090
4091 -#define CFG80211_MAX_NUM_DIFFERENT_CHANNELS 10
4092 -
4093 #ifdef CONFIG_CFG80211_DEVELOPER_WARNINGS
4094 #define CFG80211_DEV_WARN_ON(cond) WARN_ON(cond)
4095 #else
4096 diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
4097 index 347ab31574d5..da6447389ffb 100644
4098 --- a/net/xfrm/xfrm_input.c
4099 +++ b/net/xfrm/xfrm_input.c
4100 @@ -207,7 +207,7 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
4101 xfrm_address_t *daddr;
4102 struct xfrm_mode *inner_mode;
4103 u32 mark = skb->mark;
4104 - unsigned int family;
4105 + unsigned int family = AF_UNSPEC;
4106 int decaps = 0;
4107 int async = 0;
4108 bool xfrm_gro = false;
4109 @@ -216,6 +216,16 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
4110
4111 if (encap_type < 0) {
4112 x = xfrm_input_state(skb);
4113 +
4114 + if (unlikely(x->km.state != XFRM_STATE_VALID)) {
4115 + if (x->km.state == XFRM_STATE_ACQ)
4116 + XFRM_INC_STATS(net, LINUX_MIB_XFRMACQUIREERROR);
4117 + else
4118 + XFRM_INC_STATS(net,
4119 + LINUX_MIB_XFRMINSTATEINVALID);
4120 + goto drop;
4121 + }
4122 +
4123 family = x->outer_mode->afinfo->family;
4124
4125 /* An encap_type of -1 indicates async resumption. */
4126 diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
4127 index 688ed34f0671..22f5da66357b 100644
4128 --- a/net/xfrm/xfrm_policy.c
4129 +++ b/net/xfrm/xfrm_policy.c
4130 @@ -610,7 +610,8 @@ static void xfrm_hash_rebuild(struct work_struct *work)
4131
4132 /* re-insert all policies by order of creation */
4133 list_for_each_entry_reverse(policy, &net->xfrm.policy_all, walk.all) {
4134 - if (xfrm_policy_id2dir(policy->index) >= XFRM_POLICY_MAX) {
4135 + if (policy->walk.dead ||
4136 + xfrm_policy_id2dir(policy->index) >= XFRM_POLICY_MAX) {
4137 /* skip socket policies */
4138 continue;
4139 }
4140 @@ -975,8 +976,6 @@ int xfrm_policy_flush(struct net *net, u8 type, bool task_valid)
4141 }
4142 if (!cnt)
4143 err = -ESRCH;
4144 - else
4145 - xfrm_policy_cache_flush();
4146 out:
4147 spin_unlock_bh(&net->xfrm.xfrm_policy_lock);
4148 return err;
4149 @@ -1169,9 +1168,15 @@ static struct xfrm_policy *xfrm_sk_policy_lookup(const struct sock *sk, int dir,
4150 again:
4151 pol = rcu_dereference(sk->sk_policy[dir]);
4152 if (pol != NULL) {
4153 - bool match = xfrm_selector_match(&pol->selector, fl, family);
4154 + bool match;
4155 int err = 0;
4156
4157 + if (pol->family != family) {
4158 + pol = NULL;
4159 + goto out;
4160 + }
4161 +
4162 + match = xfrm_selector_match(&pol->selector, fl, family);
4163 if (match) {
4164 if ((sk->sk_mark & pol->mark.m) != pol->mark.v) {
4165 pol = NULL;
4166 @@ -1738,6 +1743,8 @@ void xfrm_policy_cache_flush(void)
4167 bool found = 0;
4168 int cpu;
4169
4170 + might_sleep();
4171 +
4172 local_bh_disable();
4173 rcu_read_lock();
4174 for_each_possible_cpu(cpu) {
4175 diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
4176 index 1f5cee2269af..58be0e7f4c7d 100644
4177 --- a/net/xfrm/xfrm_state.c
4178 +++ b/net/xfrm/xfrm_state.c
4179 @@ -313,13 +313,14 @@ xfrm_get_type_offload(u8 proto, unsigned short family, bool try_load)
4180 if ((type && !try_module_get(type->owner)))
4181 type = NULL;
4182
4183 + rcu_read_unlock();
4184 +
4185 if (!type && try_load) {
4186 request_module("xfrm-offload-%d-%d", family, proto);
4187 try_load = 0;
4188 goto retry;
4189 }
4190
4191 - rcu_read_unlock();
4192 return type;
4193 }
4194
4195 diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
4196 index e44a0fed48dd..0edf38d2afd9 100644
4197 --- a/net/xfrm/xfrm_user.c
4198 +++ b/net/xfrm/xfrm_user.c
4199 @@ -1417,11 +1417,14 @@ static void copy_templates(struct xfrm_policy *xp, struct xfrm_user_tmpl *ut,
4200
4201 static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
4202 {
4203 + u16 prev_family;
4204 int i;
4205
4206 if (nr > XFRM_MAX_DEPTH)
4207 return -EINVAL;
4208
4209 + prev_family = family;
4210 +
4211 for (i = 0; i < nr; i++) {
4212 /* We never validated the ut->family value, so many
4213 * applications simply leave it at zero. The check was
4214 @@ -1433,6 +1436,12 @@ static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
4215 if (!ut[i].family)
4216 ut[i].family = family;
4217
4218 + if ((ut[i].mode == XFRM_MODE_TRANSPORT) &&
4219 + (ut[i].family != prev_family))
4220 + return -EINVAL;
4221 +
4222 + prev_family = ut[i].family;
4223 +
4224 switch (ut[i].family) {
4225 case AF_INET:
4226 break;
4227 @@ -1443,6 +1452,21 @@ static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
4228 default:
4229 return -EINVAL;
4230 }
4231 +
4232 + switch (ut[i].id.proto) {
4233 + case IPPROTO_AH:
4234 + case IPPROTO_ESP:
4235 + case IPPROTO_COMP:
4236 +#if IS_ENABLED(CONFIG_IPV6)
4237 + case IPPROTO_ROUTING:
4238 + case IPPROTO_DSTOPTS:
4239 +#endif
4240 + case IPSEC_PROTO_ANY:
4241 + break;
4242 + default:
4243 + return -EINVAL;
4244 + }
4245 +
4246 }
4247
4248 return 0;
4249 diff --git a/scripts/kernel-doc b/scripts/kernel-doc
4250 index 8323ff9dec71..8bcf90407929 100755
4251 --- a/scripts/kernel-doc
4252 +++ b/scripts/kernel-doc
4253 @@ -3216,4 +3216,4 @@ if ($verbose && $warnings) {
4254 print STDERR "$warnings warnings\n";
4255 }
4256
4257 -exit($errors);
4258 +exit($output_mode eq "none" ? 0 : $errors);
4259 diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c
4260 index e4a1c0dc561a..c9c031e3d1ae 100644
4261 --- a/security/selinux/ss/services.c
4262 +++ b/security/selinux/ss/services.c
4263 @@ -867,6 +867,9 @@ int security_bounded_transition(u32 old_sid, u32 new_sid)
4264 int index;
4265 int rc;
4266
4267 + if (!ss_initialized)
4268 + return 0;
4269 +
4270 read_lock(&policy_rwlock);
4271
4272 rc = -EINVAL;
4273 @@ -1413,27 +1416,25 @@ static int security_context_to_sid_core(const char *scontext, u32 scontext_len,
4274 if (!scontext_len)
4275 return -EINVAL;
4276
4277 + /* Copy the string to allow changes and ensure a NUL terminator */
4278 + scontext2 = kmemdup_nul(scontext, scontext_len, gfp_flags);
4279 + if (!scontext2)
4280 + return -ENOMEM;
4281 +
4282 if (!ss_initialized) {
4283 int i;
4284
4285 for (i = 1; i < SECINITSID_NUM; i++) {
4286 - if (!strcmp(initial_sid_to_string[i], scontext)) {
4287 + if (!strcmp(initial_sid_to_string[i], scontext2)) {
4288 *sid = i;
4289 - return 0;
4290 + goto out;
4291 }
4292 }
4293 *sid = SECINITSID_KERNEL;
4294 - return 0;
4295 + goto out;
4296 }
4297 *sid = SECSID_NULL;
4298
4299 - /* Copy the string so that we can modify the copy as we parse it. */
4300 - scontext2 = kmalloc(scontext_len + 1, gfp_flags);
4301 - if (!scontext2)
4302 - return -ENOMEM;
4303 - memcpy(scontext2, scontext, scontext_len);
4304 - scontext2[scontext_len] = 0;
4305 -
4306 if (force) {
4307 /* Save another copy for storing in uninterpreted form */
4308 rc = -ENOMEM;
4309 diff --git a/sound/soc/rockchip/rockchip_spdif.c b/sound/soc/rockchip/rockchip_spdif.c
4310 index ee5055d47d13..a89fe9b6463b 100644
4311 --- a/sound/soc/rockchip/rockchip_spdif.c
4312 +++ b/sound/soc/rockchip/rockchip_spdif.c
4313 @@ -322,26 +322,30 @@ static int rk_spdif_probe(struct platform_device *pdev)
4314 spdif->mclk = devm_clk_get(&pdev->dev, "mclk");
4315 if (IS_ERR(spdif->mclk)) {
4316 dev_err(&pdev->dev, "Can't retrieve rk_spdif master clock\n");
4317 - return PTR_ERR(spdif->mclk);
4318 + ret = PTR_ERR(spdif->mclk);
4319 + goto err_disable_hclk;
4320 }
4321
4322 ret = clk_prepare_enable(spdif->mclk);
4323 if (ret) {
4324 dev_err(spdif->dev, "clock enable failed %d\n", ret);
4325 - return ret;
4326 + goto err_disable_clocks;
4327 }
4328
4329 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
4330 regs = devm_ioremap_resource(&pdev->dev, res);
4331 - if (IS_ERR(regs))
4332 - return PTR_ERR(regs);
4333 + if (IS_ERR(regs)) {
4334 + ret = PTR_ERR(regs);
4335 + goto err_disable_clocks;
4336 + }
4337
4338 spdif->regmap = devm_regmap_init_mmio_clk(&pdev->dev, "hclk", regs,
4339 &rk_spdif_regmap_config);
4340 if (IS_ERR(spdif->regmap)) {
4341 dev_err(&pdev->dev,
4342 "Failed to initialise managed register map\n");
4343 - return PTR_ERR(spdif->regmap);
4344 + ret = PTR_ERR(spdif->regmap);
4345 + goto err_disable_clocks;
4346 }
4347
4348 spdif->playback_dma_data.addr = res->start + SPDIF_SMPDR;
4349 @@ -373,6 +377,10 @@ static int rk_spdif_probe(struct platform_device *pdev)
4350
4351 err_pm_runtime:
4352 pm_runtime_disable(&pdev->dev);
4353 +err_disable_clocks:
4354 + clk_disable_unprepare(spdif->mclk);
4355 +err_disable_hclk:
4356 + clk_disable_unprepare(spdif->hclk);
4357
4358 return ret;
4359 }
4360 diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
4361 index 2aef7c00cca1..f0fb85fda42d 100644
4362 --- a/sound/soc/sh/rcar/ssi.c
4363 +++ b/sound/soc/sh/rcar/ssi.c
4364 @@ -449,25 +449,29 @@ static bool rsnd_ssi_pointer_update(struct rsnd_mod *mod,
4365 int byte)
4366 {
4367 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
4368 + bool ret = false;
4369 + int byte_pos;
4370
4371 - ssi->byte_pos += byte;
4372 + byte_pos = ssi->byte_pos + byte;
4373
4374 - if (ssi->byte_pos >= ssi->next_period_byte) {
4375 + if (byte_pos >= ssi->next_period_byte) {
4376 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
4377
4378 ssi->period_pos++;
4379 ssi->next_period_byte += ssi->byte_per_period;
4380
4381 if (ssi->period_pos >= runtime->periods) {
4382 - ssi->byte_pos = 0;
4383 + byte_pos = 0;
4384 ssi->period_pos = 0;
4385 ssi->next_period_byte = ssi->byte_per_period;
4386 }
4387
4388 - return true;
4389 + ret = true;
4390 }
4391
4392 - return false;
4393 + WRITE_ONCE(ssi->byte_pos, byte_pos);
4394 +
4395 + return ret;
4396 }
4397
4398 /*
4399 @@ -838,7 +842,7 @@ static int rsnd_ssi_pointer(struct rsnd_mod *mod,
4400 struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
4401 struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
4402
4403 - *pointer = bytes_to_frames(runtime, ssi->byte_pos);
4404 + *pointer = bytes_to_frames(runtime, READ_ONCE(ssi->byte_pos));
4405
4406 return 0;
4407 }
4408 diff --git a/sound/soc/ux500/mop500.c b/sound/soc/ux500/mop500.c
4409 index 070a6880980e..c60a57797640 100644
4410 --- a/sound/soc/ux500/mop500.c
4411 +++ b/sound/soc/ux500/mop500.c
4412 @@ -163,3 +163,7 @@ static struct platform_driver snd_soc_mop500_driver = {
4413 };
4414
4415 module_platform_driver(snd_soc_mop500_driver);
4416 +
4417 +MODULE_LICENSE("GPL v2");
4418 +MODULE_DESCRIPTION("ASoC MOP500 board driver");
4419 +MODULE_AUTHOR("Ola Lilja");
4420 diff --git a/sound/soc/ux500/ux500_pcm.c b/sound/soc/ux500/ux500_pcm.c
4421 index f12c01dddc8d..d35ba7700f46 100644
4422 --- a/sound/soc/ux500/ux500_pcm.c
4423 +++ b/sound/soc/ux500/ux500_pcm.c
4424 @@ -165,3 +165,8 @@ int ux500_pcm_unregister_platform(struct platform_device *pdev)
4425 return 0;
4426 }
4427 EXPORT_SYMBOL_GPL(ux500_pcm_unregister_platform);
4428 +
4429 +MODULE_AUTHOR("Ola Lilja");
4430 +MODULE_AUTHOR("Roger Nilsson");
4431 +MODULE_DESCRIPTION("ASoC UX500 driver");
4432 +MODULE_LICENSE("GPL v2");
4433 diff --git a/sound/usb/bcd2000/bcd2000.c b/sound/usb/bcd2000/bcd2000.c
4434 index 7371e5b06035..a6408209d7f1 100644
4435 --- a/sound/usb/bcd2000/bcd2000.c
4436 +++ b/sound/usb/bcd2000/bcd2000.c
4437 @@ -342,6 +342,13 @@ static int bcd2000_init_midi(struct bcd2000 *bcd2k)
4438 bcd2k->midi_out_buf, BUFSIZE,
4439 bcd2000_output_complete, bcd2k, 1);
4440
4441 + /* sanity checks of EPs before actually submitting */
4442 + if (usb_urb_ep_type_check(bcd2k->midi_in_urb) ||
4443 + usb_urb_ep_type_check(bcd2k->midi_out_urb)) {
4444 + dev_err(&bcd2k->dev->dev, "invalid MIDI EP\n");
4445 + return -EINVAL;
4446 + }
4447 +
4448 bcd2000_init_device(bcd2k);
4449
4450 return 0;
4451 diff --git a/sound/usb/caiaq/device.c b/sound/usb/caiaq/device.c
4452 index d8409d9ae55b..d55ca48de3ea 100644
4453 --- a/sound/usb/caiaq/device.c
4454 +++ b/sound/usb/caiaq/device.c
4455 @@ -461,6 +461,13 @@ static int init_card(struct snd_usb_caiaqdev *cdev)
4456 cdev->midi_out_buf, EP1_BUFSIZE,
4457 snd_usb_caiaq_midi_output_done, cdev);
4458
4459 + /* sanity checks of EPs before actually submitting */
4460 + if (usb_urb_ep_type_check(&cdev->ep1_in_urb) ||
4461 + usb_urb_ep_type_check(&cdev->midi_out_urb)) {
4462 + dev_err(dev, "invalid EPs\n");
4463 + return -EINVAL;
4464 + }
4465 +
4466 init_waitqueue_head(&cdev->ep1_wait_queue);
4467 init_waitqueue_head(&cdev->prepare_wait_queue);
4468
4469 diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c
4470 index c8f723c3a033..167aebf8276e 100644
4471 --- a/sound/usb/line6/driver.c
4472 +++ b/sound/usb/line6/driver.c
4473 @@ -78,6 +78,13 @@ static int line6_start_listen(struct usb_line6 *line6)
4474 line6->buffer_listen, LINE6_BUFSIZE_LISTEN,
4475 line6_data_received, line6);
4476 }
4477 +
4478 + /* sanity checks of EP before actually submitting */
4479 + if (usb_urb_ep_type_check(line6->urb_listen)) {
4480 + dev_err(line6->ifcdev, "invalid control EP\n");
4481 + return -EINVAL;
4482 + }
4483 +
4484 line6->urb_listen->actual_length = 0;
4485 err = usb_submit_urb(line6->urb_listen, GFP_ATOMIC);
4486 return err;
4487 diff --git a/tools/perf/bench/numa.c b/tools/perf/bench/numa.c
4488 index d95fdcc26f4b..944070e98a2c 100644
4489 --- a/tools/perf/bench/numa.c
4490 +++ b/tools/perf/bench/numa.c
4491 @@ -216,6 +216,47 @@ static const char * const numa_usage[] = {
4492 NULL
4493 };
4494
4495 +/*
4496 + * To get number of numa nodes present.
4497 + */
4498 +static int nr_numa_nodes(void)
4499 +{
4500 + int i, nr_nodes = 0;
4501 +
4502 + for (i = 0; i < g->p.nr_nodes; i++) {
4503 + if (numa_bitmask_isbitset(numa_nodes_ptr, i))
4504 + nr_nodes++;
4505 + }
4506 +
4507 + return nr_nodes;
4508 +}
4509 +
4510 +/*
4511 + * To check if given numa node is present.
4512 + */
4513 +static int is_node_present(int node)
4514 +{
4515 + return numa_bitmask_isbitset(numa_nodes_ptr, node);
4516 +}
4517 +
4518 +/*
4519 + * To check given numa node has cpus.
4520 + */
4521 +static bool node_has_cpus(int node)
4522 +{
4523 + struct bitmask *cpu = numa_allocate_cpumask();
4524 + unsigned int i;
4525 +
4526 + if (cpu && !numa_node_to_cpus(node, cpu)) {
4527 + for (i = 0; i < cpu->size; i++) {
4528 + if (numa_bitmask_isbitset(cpu, i))
4529 + return true;
4530 + }
4531 + }
4532 +
4533 + return false; /* lets fall back to nocpus safely */
4534 +}
4535 +
4536 static cpu_set_t bind_to_cpu(int target_cpu)
4537 {
4538 cpu_set_t orig_mask, mask;
4539 @@ -244,12 +285,12 @@ static cpu_set_t bind_to_cpu(int target_cpu)
4540
4541 static cpu_set_t bind_to_node(int target_node)
4542 {
4543 - int cpus_per_node = g->p.nr_cpus/g->p.nr_nodes;
4544 + int cpus_per_node = g->p.nr_cpus / nr_numa_nodes();
4545 cpu_set_t orig_mask, mask;
4546 int cpu;
4547 int ret;
4548
4549 - BUG_ON(cpus_per_node*g->p.nr_nodes != g->p.nr_cpus);
4550 + BUG_ON(cpus_per_node * nr_numa_nodes() != g->p.nr_cpus);
4551 BUG_ON(!cpus_per_node);
4552
4553 ret = sched_getaffinity(0, sizeof(orig_mask), &orig_mask);
4554 @@ -649,7 +690,7 @@ static int parse_setup_node_list(void)
4555 int i;
4556
4557 for (i = 0; i < mul; i++) {
4558 - if (t >= g->p.nr_tasks) {
4559 + if (t >= g->p.nr_tasks || !node_has_cpus(bind_node)) {
4560 printf("\n# NOTE: ignoring bind NODEs starting at NODE#%d\n", bind_node);
4561 goto out;
4562 }
4563 @@ -964,6 +1005,8 @@ static void calc_convergence(double runtime_ns_max, double *convergence)
4564 sum = 0;
4565
4566 for (node = 0; node < g->p.nr_nodes; node++) {
4567 + if (!is_node_present(node))
4568 + continue;
4569 nr = nodes[node];
4570 nr_min = min(nr, nr_min);
4571 nr_max = max(nr, nr_max);
4572 @@ -984,8 +1027,11 @@ static void calc_convergence(double runtime_ns_max, double *convergence)
4573 process_groups = 0;
4574
4575 for (node = 0; node < g->p.nr_nodes; node++) {
4576 - int processes = count_node_processes(node);
4577 + int processes;
4578
4579 + if (!is_node_present(node))
4580 + continue;
4581 + processes = count_node_processes(node);
4582 nr = nodes[node];
4583 tprintf(" %2d/%-2d", nr, processes);
4584
4585 @@ -1291,7 +1337,7 @@ static void print_summary(void)
4586
4587 printf("\n ###\n");
4588 printf(" # %d %s will execute (on %d nodes, %d CPUs):\n",
4589 - g->p.nr_tasks, g->p.nr_tasks == 1 ? "task" : "tasks", g->p.nr_nodes, g->p.nr_cpus);
4590 + g->p.nr_tasks, g->p.nr_tasks == 1 ? "task" : "tasks", nr_numa_nodes(), g->p.nr_cpus);
4591 printf(" # %5dx %5ldMB global shared mem operations\n",
4592 g->p.nr_loops, g->p.bytes_global/1024/1024);
4593 printf(" # %5dx %5ldMB process shared mem operations\n",
4594 diff --git a/tools/perf/builtin-help.c b/tools/perf/builtin-help.c
4595 index bd1fedef3d1c..a0f7ed2b869b 100644
4596 --- a/tools/perf/builtin-help.c
4597 +++ b/tools/perf/builtin-help.c
4598 @@ -284,7 +284,7 @@ static int perf_help_config(const char *var, const char *value, void *cb)
4599 add_man_viewer(value);
4600 return 0;
4601 }
4602 - if (!strstarts(var, "man."))
4603 + if (strstarts(var, "man."))
4604 return add_man_viewer_info(var, value);
4605
4606 return 0;
4607 @@ -314,7 +314,7 @@ static const char *cmd_to_page(const char *perf_cmd)
4608
4609 if (!perf_cmd)
4610 return "perf";
4611 - else if (!strstarts(perf_cmd, "perf"))
4612 + else if (strstarts(perf_cmd, "perf"))
4613 return perf_cmd;
4614
4615 return asprintf(&s, "perf-%s", perf_cmd) < 0 ? NULL : s;
4616 diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
4617 index ee954bde7e3e..dd57978b2096 100644
4618 --- a/tools/perf/builtin-top.c
4619 +++ b/tools/perf/builtin-top.c
4620 @@ -77,6 +77,7 @@
4621 #include "sane_ctype.h"
4622
4623 static volatile int done;
4624 +static volatile int resize;
4625
4626 #define HEADER_LINE_NR 5
4627
4628 @@ -86,10 +87,13 @@ static void perf_top__update_print_entries(struct perf_top *top)
4629 }
4630
4631 static void perf_top__sig_winch(int sig __maybe_unused,
4632 - siginfo_t *info __maybe_unused, void *arg)
4633 + siginfo_t *info __maybe_unused, void *arg __maybe_unused)
4634 {
4635 - struct perf_top *top = arg;
4636 + resize = 1;
4637 +}
4638
4639 +static void perf_top__resize(struct perf_top *top)
4640 +{
4641 get_term_dimensions(&top->winsize);
4642 perf_top__update_print_entries(top);
4643 }
4644 @@ -477,7 +481,7 @@ static bool perf_top__handle_keypress(struct perf_top *top, int c)
4645 .sa_sigaction = perf_top__sig_winch,
4646 .sa_flags = SA_SIGINFO,
4647 };
4648 - perf_top__sig_winch(SIGWINCH, NULL, top);
4649 + perf_top__resize(top);
4650 sigaction(SIGWINCH, &act, NULL);
4651 } else {
4652 signal(SIGWINCH, SIG_DFL);
4653 @@ -1022,6 +1026,11 @@ static int __cmd_top(struct perf_top *top)
4654
4655 if (hits == top->samples)
4656 ret = perf_evlist__poll(top->evlist, 100);
4657 +
4658 + if (resize) {
4659 + perf_top__resize(top);
4660 + resize = 0;
4661 + }
4662 }
4663
4664 ret = 0;
4665 diff --git a/tools/perf/tests/shell/trace+probe_vfs_getname.sh b/tools/perf/tests/shell/trace+probe_vfs_getname.sh
4666 index 2e68c5f120da..2a9ef080efd0 100755
4667 --- a/tools/perf/tests/shell/trace+probe_vfs_getname.sh
4668 +++ b/tools/perf/tests/shell/trace+probe_vfs_getname.sh
4669 @@ -17,8 +17,10 @@ skip_if_no_perf_probe || exit 2
4670 file=$(mktemp /tmp/temporary_file.XXXXX)
4671
4672 trace_open_vfs_getname() {
4673 - perf trace -e open touch $file 2>&1 | \
4674 - egrep " +[0-9]+\.[0-9]+ +\( +[0-9]+\.[0-9]+ ms\): +touch\/[0-9]+ open\(filename: +${file}, +flags: CREAT\|NOCTTY\|NONBLOCK\|WRONLY, +mode: +IRUGO\|IWUGO\) += +[0-9]+$"
4675 + test "$(uname -m)" = s390x && { svc="openat"; txt="dfd: +CWD, +"; }
4676 +
4677 + perf trace -e ${svc:-open} touch $file 2>&1 | \
4678 + egrep " +[0-9]+\.[0-9]+ +\( +[0-9]+\.[0-9]+ ms\): +touch\/[0-9]+ ${svc:-open}\(${txt}filename: +${file}, +flags: CREAT\|NOCTTY\|NONBLOCK\|WRONLY, +mode: +IRUGO\|IWUGO\) += +[0-9]+$"
4679 }
4680
4681
4682 diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c
4683 index bc4a7344e274..89c8e1604ca7 100644
4684 --- a/tools/perf/tests/task-exit.c
4685 +++ b/tools/perf/tests/task-exit.c
4686 @@ -84,7 +84,11 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused
4687
4688 evsel = perf_evlist__first(evlist);
4689 evsel->attr.task = 1;
4690 +#ifdef __s390x__
4691 + evsel->attr.sample_freq = 1000000;
4692 +#else
4693 evsel->attr.sample_freq = 1;
4694 +#endif
4695 evsel->attr.inherit = 0;
4696 evsel->attr.watermark = 0;
4697 evsel->attr.wakeup_events = 1;
4698 diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
4699 index aa66791b1bfc..41d415707264 100644
4700 --- a/tools/perf/util/annotate.c
4701 +++ b/tools/perf/util/annotate.c
4702 @@ -166,7 +166,7 @@ static void ins__delete(struct ins_operands *ops)
4703 static int ins__raw_scnprintf(struct ins *ins, char *bf, size_t size,
4704 struct ins_operands *ops)
4705 {
4706 - return scnprintf(bf, size, "%-6.6s %s", ins->name, ops->raw);
4707 + return scnprintf(bf, size, "%-6s %s", ins->name, ops->raw);
4708 }
4709
4710 int ins__scnprintf(struct ins *ins, char *bf, size_t size,
4711 @@ -231,12 +231,12 @@ static int call__scnprintf(struct ins *ins, char *bf, size_t size,
4712 struct ins_operands *ops)
4713 {
4714 if (ops->target.name)
4715 - return scnprintf(bf, size, "%-6.6s %s", ins->name, ops->target.name);
4716 + return scnprintf(bf, size, "%-6s %s", ins->name, ops->target.name);
4717
4718 if (ops->target.addr == 0)
4719 return ins__raw_scnprintf(ins, bf, size, ops);
4720
4721 - return scnprintf(bf, size, "%-6.6s *%" PRIx64, ins->name, ops->target.addr);
4722 + return scnprintf(bf, size, "%-6s *%" PRIx64, ins->name, ops->target.addr);
4723 }
4724
4725 static struct ins_ops call_ops = {
4726 @@ -300,7 +300,7 @@ static int jump__scnprintf(struct ins *ins, char *bf, size_t size,
4727 c++;
4728 }
4729
4730 - return scnprintf(bf, size, "%-6.6s %.*s%" PRIx64,
4731 + return scnprintf(bf, size, "%-6s %.*s%" PRIx64,
4732 ins->name, c ? c - ops->raw : 0, ops->raw,
4733 ops->target.offset);
4734 }
4735 @@ -373,7 +373,7 @@ static int lock__scnprintf(struct ins *ins, char *bf, size_t size,
4736 if (ops->locked.ins.ops == NULL)
4737 return ins__raw_scnprintf(ins, bf, size, ops);
4738
4739 - printed = scnprintf(bf, size, "%-6.6s ", ins->name);
4740 + printed = scnprintf(bf, size, "%-6s ", ins->name);
4741 return printed + ins__scnprintf(&ops->locked.ins, bf + printed,
4742 size - printed, ops->locked.ops);
4743 }
4744 @@ -449,7 +449,7 @@ static int mov__parse(struct arch *arch, struct ins_operands *ops, struct map *m
4745 static int mov__scnprintf(struct ins *ins, char *bf, size_t size,
4746 struct ins_operands *ops)
4747 {
4748 - return scnprintf(bf, size, "%-6.6s %s,%s", ins->name,
4749 + return scnprintf(bf, size, "%-6s %s,%s", ins->name,
4750 ops->source.name ?: ops->source.raw,
4751 ops->target.name ?: ops->target.raw);
4752 }
4753 @@ -489,7 +489,7 @@ static int dec__parse(struct arch *arch __maybe_unused, struct ins_operands *ops
4754 static int dec__scnprintf(struct ins *ins, char *bf, size_t size,
4755 struct ins_operands *ops)
4756 {
4757 - return scnprintf(bf, size, "%-6.6s %s", ins->name,
4758 + return scnprintf(bf, size, "%-6s %s", ins->name,
4759 ops->target.name ?: ops->target.raw);
4760 }
4761
4762 @@ -501,7 +501,7 @@ static struct ins_ops dec_ops = {
4763 static int nop__scnprintf(struct ins *ins __maybe_unused, char *bf, size_t size,
4764 struct ins_operands *ops __maybe_unused)
4765 {
4766 - return scnprintf(bf, size, "%-6.6s", "nop");
4767 + return scnprintf(bf, size, "%-6s", "nop");
4768 }
4769
4770 static struct ins_ops nop_ops = {
4771 @@ -925,7 +925,7 @@ void disasm_line__free(struct disasm_line *dl)
4772 int disasm_line__scnprintf(struct disasm_line *dl, char *bf, size_t size, bool raw)
4773 {
4774 if (raw || !dl->ins.ops)
4775 - return scnprintf(bf, size, "%-6.6s %s", dl->ins.name, dl->ops.raw);
4776 + return scnprintf(bf, size, "%-6s %s", dl->ins.name, dl->ops.raw);
4777
4778 return ins__scnprintf(&dl->ins, bf, size, &dl->ops);
4779 }
4780 diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
4781 index 0dccdb89572c..1f6beb3d0c68 100644
4782 --- a/tools/perf/util/evsel.c
4783 +++ b/tools/perf/util/evsel.c
4784 @@ -733,12 +733,16 @@ static void apply_config_terms(struct perf_evsel *evsel,
4785 list_for_each_entry(term, config_terms, list) {
4786 switch (term->type) {
4787 case PERF_EVSEL__CONFIG_TERM_PERIOD:
4788 - attr->sample_period = term->val.period;
4789 - attr->freq = 0;
4790 + if (!(term->weak && opts->user_interval != ULLONG_MAX)) {
4791 + attr->sample_period = term->val.period;
4792 + attr->freq = 0;
4793 + }
4794 break;
4795 case PERF_EVSEL__CONFIG_TERM_FREQ:
4796 - attr->sample_freq = term->val.freq;
4797 - attr->freq = 1;
4798 + if (!(term->weak && opts->user_freq != UINT_MAX)) {
4799 + attr->sample_freq = term->val.freq;
4800 + attr->freq = 1;
4801 + }
4802 break;
4803 case PERF_EVSEL__CONFIG_TERM_TIME:
4804 if (term->val.time)
4805 diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
4806 index b4df79d72329..3ed0e9b42378 100644
4807 --- a/tools/perf/util/evsel.h
4808 +++ b/tools/perf/util/evsel.h
4809 @@ -67,6 +67,7 @@ struct perf_evsel_config_term {
4810 bool overwrite;
4811 char *branch;
4812 } val;
4813 + bool weak;
4814 };
4815
4816 /** struct perf_evsel - event selector
4817 diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
4818 index 56694e3409ea..b25635e945f3 100644
4819 --- a/tools/perf/util/parse-events.c
4820 +++ b/tools/perf/util/parse-events.c
4821 @@ -1115,6 +1115,7 @@ do { \
4822 INIT_LIST_HEAD(&__t->list); \
4823 __t->type = PERF_EVSEL__CONFIG_TERM_ ## __type; \
4824 __t->val.__name = __val; \
4825 + __t->weak = term->weak; \
4826 list_add_tail(&__t->list, head_terms); \
4827 } while (0)
4828
4829 @@ -2395,6 +2396,7 @@ static int new_term(struct parse_events_term **_term,
4830
4831 *term = *temp;
4832 INIT_LIST_HEAD(&term->list);
4833 + term->weak = false;
4834
4835 switch (term->type_val) {
4836 case PARSE_EVENTS__TERM_TYPE_NUM:
4837 diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h
4838 index eed50b54bab3..458b72225a0a 100644
4839 --- a/tools/perf/util/parse-events.h
4840 +++ b/tools/perf/util/parse-events.h
4841 @@ -101,6 +101,9 @@ struct parse_events_term {
4842 /* error string indexes for within parsed string */
4843 int err_term;
4844 int err_val;
4845 +
4846 + /* Coming from implicit alias */
4847 + bool weak;
4848 };
4849
4850 struct parse_events_error {
4851 diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
4852 index b10b35a63138..9dff41bcc776 100644
4853 --- a/tools/perf/util/pmu.c
4854 +++ b/tools/perf/util/pmu.c
4855 @@ -404,6 +404,11 @@ static int pmu_alias_terms(struct perf_pmu_alias *alias,
4856 parse_events_terms__purge(&list);
4857 return ret;
4858 }
4859 + /*
4860 + * Weak terms don't override command line options,
4861 + * which we don't want for implicit terms in aliases.
4862 + */
4863 + cloned->weak = true;
4864 list_add_tail(&cloned->list, &list);
4865 }
4866 list_splice(&list, terms);
4867 diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c
4868 index 16299939d3ff..c55d265489ca 100644
4869 --- a/tools/testing/selftests/bpf/test_verifier.c
4870 +++ b/tools/testing/selftests/bpf/test_verifier.c
4871 @@ -6534,7 +6534,7 @@ static struct bpf_test tests[] = {
4872 BPF_JMP_IMM(BPF_JA, 0, 0, -7),
4873 },
4874 .fixup_map1 = { 4 },
4875 - .errstr = "unbounded min value",
4876 + .errstr = "R0 invalid mem access 'inv'",
4877 .result = REJECT,
4878 },
4879 {
4880 @@ -7714,6 +7714,127 @@ static struct bpf_test tests[] = {
4881 .result = REJECT,
4882 .prog_type = BPF_PROG_TYPE_XDP,
4883 },
4884 + {
4885 + "check deducing bounds from const, 1",
4886 + .insns = {
4887 + BPF_MOV64_IMM(BPF_REG_0, 1),
4888 + BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 1, 0),
4889 + BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
4890 + BPF_EXIT_INSN(),
4891 + },
4892 + .result = REJECT,
4893 + .errstr = "R0 tried to subtract pointer from scalar",
4894 + },
4895 + {
4896 + "check deducing bounds from const, 2",
4897 + .insns = {
4898 + BPF_MOV64_IMM(BPF_REG_0, 1),
4899 + BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 1, 1),
4900 + BPF_EXIT_INSN(),
4901 + BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 1, 1),
4902 + BPF_EXIT_INSN(),
4903 + BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
4904 + BPF_EXIT_INSN(),
4905 + },
4906 + .result = ACCEPT,
4907 + },
4908 + {
4909 + "check deducing bounds from const, 3",
4910 + .insns = {
4911 + BPF_MOV64_IMM(BPF_REG_0, 0),
4912 + BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 0),
4913 + BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
4914 + BPF_EXIT_INSN(),
4915 + },
4916 + .result = REJECT,
4917 + .errstr = "R0 tried to subtract pointer from scalar",
4918 + },
4919 + {
4920 + "check deducing bounds from const, 4",
4921 + .insns = {
4922 + BPF_MOV64_IMM(BPF_REG_0, 0),
4923 + BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 1),
4924 + BPF_EXIT_INSN(),
4925 + BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
4926 + BPF_EXIT_INSN(),
4927 + BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
4928 + BPF_EXIT_INSN(),
4929 + },
4930 + .result = ACCEPT,
4931 + },
4932 + {
4933 + "check deducing bounds from const, 5",
4934 + .insns = {
4935 + BPF_MOV64_IMM(BPF_REG_0, 0),
4936 + BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
4937 + BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
4938 + BPF_EXIT_INSN(),
4939 + },
4940 + .result = REJECT,
4941 + .errstr = "R0 tried to subtract pointer from scalar",
4942 + },
4943 + {
4944 + "check deducing bounds from const, 6",
4945 + .insns = {
4946 + BPF_MOV64_IMM(BPF_REG_0, 0),
4947 + BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
4948 + BPF_EXIT_INSN(),
4949 + BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
4950 + BPF_EXIT_INSN(),
4951 + },
4952 + .result = REJECT,
4953 + .errstr = "R0 tried to subtract pointer from scalar",
4954 + },
4955 + {
4956 + "check deducing bounds from const, 7",
4957 + .insns = {
4958 + BPF_MOV64_IMM(BPF_REG_0, ~0),
4959 + BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 0),
4960 + BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
4961 + BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
4962 + offsetof(struct __sk_buff, mark)),
4963 + BPF_EXIT_INSN(),
4964 + },
4965 + .result = REJECT,
4966 + .errstr = "dereference of modified ctx ptr",
4967 + },
4968 + {
4969 + "check deducing bounds from const, 8",
4970 + .insns = {
4971 + BPF_MOV64_IMM(BPF_REG_0, ~0),
4972 + BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
4973 + BPF_ALU64_REG(BPF_ADD, BPF_REG_1, BPF_REG_0),
4974 + BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
4975 + offsetof(struct __sk_buff, mark)),
4976 + BPF_EXIT_INSN(),
4977 + },
4978 + .result = REJECT,
4979 + .errstr = "dereference of modified ctx ptr",
4980 + },
4981 + {
4982 + "check deducing bounds from const, 9",
4983 + .insns = {
4984 + BPF_MOV64_IMM(BPF_REG_0, 0),
4985 + BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 0),
4986 + BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
4987 + BPF_EXIT_INSN(),
4988 + },
4989 + .result = REJECT,
4990 + .errstr = "R0 tried to subtract pointer from scalar",
4991 + },
4992 + {
4993 + "check deducing bounds from const, 10",
4994 + .insns = {
4995 + BPF_MOV64_IMM(BPF_REG_0, 0),
4996 + BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 0),
4997 + /* Marks reg as unknown. */
4998 + BPF_ALU64_IMM(BPF_NEG, BPF_REG_0, 0),
4999 + BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
5000 + BPF_EXIT_INSN(),
5001 + },
5002 + .result = REJECT,
5003 + .errstr = "math between ctx pointer and register with unbounded min value is not allowed",
5004 + },
5005 {
5006 "XDP pkt read, pkt_end <= pkt_data', bad access 2",
5007 .insns = {
5008 diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c
5009 index 8b6c42dc1aa9..1366462a3ab2 100644
5010 --- a/virt/kvm/arm/arm.c
5011 +++ b/virt/kvm/arm/arm.c
5012 @@ -1453,7 +1453,7 @@ int kvm_arch_init(void *opaque)
5013 bool in_hyp_mode;
5014
5015 if (!is_hyp_mode_available()) {
5016 - kvm_err("HYP mode not available\n");
5017 + kvm_info("HYP mode not available\n");
5018 return -ENODEV;
5019 }
5020
5021 diff --git a/virt/kvm/arm/vgic/vgic.c b/virt/kvm/arm/vgic/vgic.c
5022 index fed717e07938..da53c6e7d688 100644
5023 --- a/virt/kvm/arm/vgic/vgic.c
5024 +++ b/virt/kvm/arm/vgic/vgic.c
5025 @@ -454,6 +454,7 @@ int kvm_vgic_unmap_phys_irq(struct kvm_vcpu *vcpu, unsigned int virt_irq)
5026 int kvm_vgic_set_owner(struct kvm_vcpu *vcpu, unsigned int intid, void *owner)
5027 {
5028 struct vgic_irq *irq;
5029 + unsigned long flags;
5030 int ret = 0;
5031
5032 if (!vgic_initialized(vcpu->kvm))
5033 @@ -464,12 +465,12 @@ int kvm_vgic_set_owner(struct kvm_vcpu *vcpu, unsigned int intid, void *owner)
5034 return -EINVAL;
5035
5036 irq = vgic_get_irq(vcpu->kvm, vcpu, intid);
5037 - spin_lock(&irq->irq_lock);
5038 + spin_lock_irqsave(&irq->irq_lock, flags);
5039 if (irq->owner && irq->owner != owner)
5040 ret = -EEXIST;
5041 else
5042 irq->owner = owner;
5043 - spin_unlock(&irq->irq_lock);
5044 + spin_unlock_irqrestore(&irq->irq_lock, flags);
5045
5046 return ret;
5047 }