Magellan Linux

Contents of /trunk/kernel-alx/patches-4.19/0140-4.19.41-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3419 - (show annotations) (download)
Fri Aug 2 11:47:49 2019 UTC (4 years, 9 months ago) by niro
File size: 119836 byte(s)
-linux-4.19.41
1 diff --git a/Documentation/driver-api/usb/power-management.rst b/Documentation/driver-api/usb/power-management.rst
2 index 79beb807996b..4a74cf6f2797 100644
3 --- a/Documentation/driver-api/usb/power-management.rst
4 +++ b/Documentation/driver-api/usb/power-management.rst
5 @@ -370,11 +370,15 @@ autosuspend the interface's device. When the usage counter is = 0
6 then the interface is considered to be idle, and the kernel may
7 autosuspend the device.
8
9 -Drivers need not be concerned about balancing changes to the usage
10 -counter; the USB core will undo any remaining "get"s when a driver
11 -is unbound from its interface. As a corollary, drivers must not call
12 -any of the ``usb_autopm_*`` functions after their ``disconnect``
13 -routine has returned.
14 +Drivers must be careful to balance their overall changes to the usage
15 +counter. Unbalanced "get"s will remain in effect when a driver is
16 +unbound from its interface, preventing the device from going into
17 +runtime suspend should the interface be bound to a driver again. On
18 +the other hand, drivers are allowed to achieve this balance by calling
19 +the ``usb_autopm_*`` functions even after their ``disconnect`` routine
20 +has returned -- say from within a work-queue routine -- provided they
21 +retain an active reference to the interface (via ``usb_get_intf`` and
22 +``usb_put_intf``).
23
24 Drivers using the async routines are responsible for their own
25 synchronization and mutual exclusion.
26 diff --git a/Makefile b/Makefile
27 index 3822720a8a1c..ba3b8504b689 100644
28 --- a/Makefile
29 +++ b/Makefile
30 @@ -1,7 +1,7 @@
31 # SPDX-License-Identifier: GPL-2.0
32 VERSION = 4
33 PATCHLEVEL = 19
34 -SUBLEVEL = 40
35 +SUBLEVEL = 41
36 EXTRAVERSION =
37 NAME = "People's Front"
38
39 diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi
40 index e6a36a792bae..c706adf4aed2 100644
41 --- a/arch/arm/boot/dts/rk3288.dtsi
42 +++ b/arch/arm/boot/dts/rk3288.dtsi
43 @@ -1261,27 +1261,27 @@
44 gpu_opp_table: gpu-opp-table {
45 compatible = "operating-points-v2";
46
47 - opp@100000000 {
48 + opp-100000000 {
49 opp-hz = /bits/ 64 <100000000>;
50 opp-microvolt = <950000>;
51 };
52 - opp@200000000 {
53 + opp-200000000 {
54 opp-hz = /bits/ 64 <200000000>;
55 opp-microvolt = <950000>;
56 };
57 - opp@300000000 {
58 + opp-300000000 {
59 opp-hz = /bits/ 64 <300000000>;
60 opp-microvolt = <1000000>;
61 };
62 - opp@400000000 {
63 + opp-400000000 {
64 opp-hz = /bits/ 64 <400000000>;
65 opp-microvolt = <1100000>;
66 };
67 - opp@500000000 {
68 + opp-500000000 {
69 opp-hz = /bits/ 64 <500000000>;
70 opp-microvolt = <1200000>;
71 };
72 - opp@600000000 {
73 + opp-600000000 {
74 opp-hz = /bits/ 64 <600000000>;
75 opp-microvolt = <1250000>;
76 };
77 diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
78 index 32fae4dbd63b..0921e2c10edf 100644
79 --- a/arch/arm/mach-at91/pm.c
80 +++ b/arch/arm/mach-at91/pm.c
81 @@ -594,13 +594,13 @@ static int __init at91_pm_backup_init(void)
82
83 np = of_find_compatible_node(NULL, NULL, "atmel,sama5d2-securam");
84 if (!np)
85 - goto securam_fail;
86 + goto securam_fail_no_ref_dev;
87
88 pdev = of_find_device_by_node(np);
89 of_node_put(np);
90 if (!pdev) {
91 pr_warn("%s: failed to find securam device!\n", __func__);
92 - goto securam_fail;
93 + goto securam_fail_no_ref_dev;
94 }
95
96 sram_pool = gen_pool_get(&pdev->dev, NULL);
97 @@ -623,6 +623,8 @@ static int __init at91_pm_backup_init(void)
98 return 0;
99
100 securam_fail:
101 + put_device(&pdev->dev);
102 +securam_fail_no_ref_dev:
103 iounmap(pm_data.sfrbu);
104 pm_data.sfrbu = NULL;
105 return ret;
106 diff --git a/arch/arm/mach-iop13xx/setup.c b/arch/arm/mach-iop13xx/setup.c
107 index 53c316f7301e..fe4932fda01d 100644
108 --- a/arch/arm/mach-iop13xx/setup.c
109 +++ b/arch/arm/mach-iop13xx/setup.c
110 @@ -300,7 +300,7 @@ static struct resource iop13xx_adma_2_resources[] = {
111 }
112 };
113
114 -static u64 iop13xx_adma_dmamask = DMA_BIT_MASK(64);
115 +static u64 iop13xx_adma_dmamask = DMA_BIT_MASK(32);
116 static struct iop_adma_platform_data iop13xx_adma_0_data = {
117 .hw_id = 0,
118 .pool_size = PAGE_SIZE,
119 @@ -324,7 +324,7 @@ static struct platform_device iop13xx_adma_0_channel = {
120 .resource = iop13xx_adma_0_resources,
121 .dev = {
122 .dma_mask = &iop13xx_adma_dmamask,
123 - .coherent_dma_mask = DMA_BIT_MASK(64),
124 + .coherent_dma_mask = DMA_BIT_MASK(32),
125 .platform_data = (void *) &iop13xx_adma_0_data,
126 },
127 };
128 @@ -336,7 +336,7 @@ static struct platform_device iop13xx_adma_1_channel = {
129 .resource = iop13xx_adma_1_resources,
130 .dev = {
131 .dma_mask = &iop13xx_adma_dmamask,
132 - .coherent_dma_mask = DMA_BIT_MASK(64),
133 + .coherent_dma_mask = DMA_BIT_MASK(32),
134 .platform_data = (void *) &iop13xx_adma_1_data,
135 },
136 };
137 @@ -348,7 +348,7 @@ static struct platform_device iop13xx_adma_2_channel = {
138 .resource = iop13xx_adma_2_resources,
139 .dev = {
140 .dma_mask = &iop13xx_adma_dmamask,
141 - .coherent_dma_mask = DMA_BIT_MASK(64),
142 + .coherent_dma_mask = DMA_BIT_MASK(32),
143 .platform_data = (void *) &iop13xx_adma_2_data,
144 },
145 };
146 diff --git a/arch/arm/mach-iop13xx/tpmi.c b/arch/arm/mach-iop13xx/tpmi.c
147 index db511ec2b1df..116feb6b261e 100644
148 --- a/arch/arm/mach-iop13xx/tpmi.c
149 +++ b/arch/arm/mach-iop13xx/tpmi.c
150 @@ -152,7 +152,7 @@ static struct resource iop13xx_tpmi_3_resources[] = {
151 }
152 };
153
154 -u64 iop13xx_tpmi_mask = DMA_BIT_MASK(64);
155 +u64 iop13xx_tpmi_mask = DMA_BIT_MASK(32);
156 static struct platform_device iop13xx_tpmi_0_device = {
157 .name = "iop-tpmi",
158 .id = 0,
159 @@ -160,7 +160,7 @@ static struct platform_device iop13xx_tpmi_0_device = {
160 .resource = iop13xx_tpmi_0_resources,
161 .dev = {
162 .dma_mask = &iop13xx_tpmi_mask,
163 - .coherent_dma_mask = DMA_BIT_MASK(64),
164 + .coherent_dma_mask = DMA_BIT_MASK(32),
165 },
166 };
167
168 @@ -171,7 +171,7 @@ static struct platform_device iop13xx_tpmi_1_device = {
169 .resource = iop13xx_tpmi_1_resources,
170 .dev = {
171 .dma_mask = &iop13xx_tpmi_mask,
172 - .coherent_dma_mask = DMA_BIT_MASK(64),
173 + .coherent_dma_mask = DMA_BIT_MASK(32),
174 },
175 };
176
177 @@ -182,7 +182,7 @@ static struct platform_device iop13xx_tpmi_2_device = {
178 .resource = iop13xx_tpmi_2_resources,
179 .dev = {
180 .dma_mask = &iop13xx_tpmi_mask,
181 - .coherent_dma_mask = DMA_BIT_MASK(64),
182 + .coherent_dma_mask = DMA_BIT_MASK(32),
183 },
184 };
185
186 @@ -193,7 +193,7 @@ static struct platform_device iop13xx_tpmi_3_device = {
187 .resource = iop13xx_tpmi_3_resources,
188 .dev = {
189 .dma_mask = &iop13xx_tpmi_mask,
190 - .coherent_dma_mask = DMA_BIT_MASK(64),
191 + .coherent_dma_mask = DMA_BIT_MASK(32),
192 },
193 };
194
195 diff --git a/arch/arm/plat-iop/adma.c b/arch/arm/plat-iop/adma.c
196 index a4d1f8de3b5b..d9612221e484 100644
197 --- a/arch/arm/plat-iop/adma.c
198 +++ b/arch/arm/plat-iop/adma.c
199 @@ -143,7 +143,7 @@ struct platform_device iop3xx_dma_0_channel = {
200 .resource = iop3xx_dma_0_resources,
201 .dev = {
202 .dma_mask = &iop3xx_adma_dmamask,
203 - .coherent_dma_mask = DMA_BIT_MASK(64),
204 + .coherent_dma_mask = DMA_BIT_MASK(32),
205 .platform_data = (void *) &iop3xx_dma_0_data,
206 },
207 };
208 @@ -155,7 +155,7 @@ struct platform_device iop3xx_dma_1_channel = {
209 .resource = iop3xx_dma_1_resources,
210 .dev = {
211 .dma_mask = &iop3xx_adma_dmamask,
212 - .coherent_dma_mask = DMA_BIT_MASK(64),
213 + .coherent_dma_mask = DMA_BIT_MASK(32),
214 .platform_data = (void *) &iop3xx_dma_1_data,
215 },
216 };
217 @@ -167,7 +167,7 @@ struct platform_device iop3xx_aau_channel = {
218 .resource = iop3xx_aau_resources,
219 .dev = {
220 .dma_mask = &iop3xx_adma_dmamask,
221 - .coherent_dma_mask = DMA_BIT_MASK(64),
222 + .coherent_dma_mask = DMA_BIT_MASK(32),
223 .platform_data = (void *) &iop3xx_aau_data,
224 },
225 };
226 diff --git a/arch/arm/plat-orion/common.c b/arch/arm/plat-orion/common.c
227 index a2399fd66e97..1e970873439c 100644
228 --- a/arch/arm/plat-orion/common.c
229 +++ b/arch/arm/plat-orion/common.c
230 @@ -622,7 +622,7 @@ static struct platform_device orion_xor0_shared = {
231 .resource = orion_xor0_shared_resources,
232 .dev = {
233 .dma_mask = &orion_xor_dmamask,
234 - .coherent_dma_mask = DMA_BIT_MASK(64),
235 + .coherent_dma_mask = DMA_BIT_MASK(32),
236 .platform_data = &orion_xor0_pdata,
237 },
238 };
239 @@ -683,7 +683,7 @@ static struct platform_device orion_xor1_shared = {
240 .resource = orion_xor1_shared_resources,
241 .dev = {
242 .dma_mask = &orion_xor_dmamask,
243 - .coherent_dma_mask = DMA_BIT_MASK(64),
244 + .coherent_dma_mask = DMA_BIT_MASK(32),
245 .platform_data = &orion_xor1_pdata,
246 },
247 };
248 diff --git a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
249 index 246c317f6a68..91061d9cf78b 100644
250 --- a/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
251 +++ b/arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts
252 @@ -94,8 +94,8 @@
253 snps,reset-gpio = <&gpio1 RK_PC2 GPIO_ACTIVE_LOW>;
254 snps,reset-active-low;
255 snps,reset-delays-us = <0 10000 50000>;
256 - tx_delay = <0x25>;
257 - rx_delay = <0x11>;
258 + tx_delay = <0x24>;
259 + rx_delay = <0x18>;
260 status = "okay";
261 };
262
263 diff --git a/arch/arm64/kernel/sdei.c b/arch/arm64/kernel/sdei.c
264 index 5ba4465e44f0..ea94cf8f9dc6 100644
265 --- a/arch/arm64/kernel/sdei.c
266 +++ b/arch/arm64/kernel/sdei.c
267 @@ -94,6 +94,9 @@ static bool on_sdei_normal_stack(unsigned long sp, struct stack_info *info)
268 unsigned long low = (unsigned long)raw_cpu_read(sdei_stack_normal_ptr);
269 unsigned long high = low + SDEI_STACK_SIZE;
270
271 + if (!low)
272 + return false;
273 +
274 if (sp < low || sp >= high)
275 return false;
276
277 @@ -111,6 +114,9 @@ static bool on_sdei_critical_stack(unsigned long sp, struct stack_info *info)
278 unsigned long low = (unsigned long)raw_cpu_read(sdei_stack_critical_ptr);
279 unsigned long high = low + SDEI_STACK_SIZE;
280
281 + if (!low)
282 + return false;
283 +
284 if (sp < low || sp >= high)
285 return false;
286
287 diff --git a/arch/powerpc/kernel/kvm.c b/arch/powerpc/kernel/kvm.c
288 index 683b5b3805bd..cd381e2291df 100644
289 --- a/arch/powerpc/kernel/kvm.c
290 +++ b/arch/powerpc/kernel/kvm.c
291 @@ -22,6 +22,7 @@
292 #include <linux/kvm_host.h>
293 #include <linux/init.h>
294 #include <linux/export.h>
295 +#include <linux/kmemleak.h>
296 #include <linux/kvm_para.h>
297 #include <linux/slab.h>
298 #include <linux/of.h>
299 @@ -712,6 +713,12 @@ static void kvm_use_magic_page(void)
300
301 static __init void kvm_free_tmp(void)
302 {
303 + /*
304 + * Inform kmemleak about the hole in the .bss section since the
305 + * corresponding pages will be unmapped with DEBUG_PAGEALLOC=y.
306 + */
307 + kmemleak_free_part(&kvm_tmp[kvm_tmp_index],
308 + ARRAY_SIZE(kvm_tmp) - kvm_tmp_index);
309 free_reserved_area(&kvm_tmp[kvm_tmp_index],
310 &kvm_tmp[ARRAY_SIZE(kvm_tmp)], -1, NULL);
311 }
312 diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
313 index 4f213ba33491..53e9b58e83c2 100644
314 --- a/arch/powerpc/mm/slice.c
315 +++ b/arch/powerpc/mm/slice.c
316 @@ -31,6 +31,7 @@
317 #include <linux/spinlock.h>
318 #include <linux/export.h>
319 #include <linux/hugetlb.h>
320 +#include <linux/security.h>
321 #include <asm/mman.h>
322 #include <asm/mmu.h>
323 #include <asm/copro.h>
324 @@ -376,6 +377,7 @@ static unsigned long slice_find_area_topdown(struct mm_struct *mm,
325 int pshift = max_t(int, mmu_psize_defs[psize].shift, PAGE_SHIFT);
326 unsigned long addr, found, prev;
327 struct vm_unmapped_area_info info;
328 + unsigned long min_addr = max(PAGE_SIZE, mmap_min_addr);
329
330 info.flags = VM_UNMAPPED_AREA_TOPDOWN;
331 info.length = len;
332 @@ -392,7 +394,7 @@ static unsigned long slice_find_area_topdown(struct mm_struct *mm,
333 if (high_limit > DEFAULT_MAP_WINDOW)
334 addr += mm->context.slb_addr_limit - DEFAULT_MAP_WINDOW;
335
336 - while (addr > PAGE_SIZE) {
337 + while (addr > min_addr) {
338 info.high_limit = addr;
339 if (!slice_scan_available(addr - 1, available, 0, &addr))
340 continue;
341 @@ -404,8 +406,8 @@ static unsigned long slice_find_area_topdown(struct mm_struct *mm,
342 * Check if we need to reduce the range, or if we can
343 * extend it to cover the previous available slice.
344 */
345 - if (addr < PAGE_SIZE)
346 - addr = PAGE_SIZE;
347 + if (addr < min_addr)
348 + addr = min_addr;
349 else if (slice_scan_available(addr - 1, available, 0, &prev)) {
350 addr = prev;
351 goto prev_slice;
352 @@ -527,7 +529,7 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
353 addr = _ALIGN_UP(addr, page_size);
354 slice_dbg(" aligned addr=%lx\n", addr);
355 /* Ignore hint if it's too large or overlaps a VMA */
356 - if (addr > high_limit - len ||
357 + if (addr > high_limit - len || addr < mmap_min_addr ||
358 !slice_area_is_free(mm, addr, len))
359 addr = 0;
360 }
361 diff --git a/arch/riscv/include/asm/uaccess.h b/arch/riscv/include/asm/uaccess.h
362 index 8c3e3e3c8be1..f0ea3156192d 100644
363 --- a/arch/riscv/include/asm/uaccess.h
364 +++ b/arch/riscv/include/asm/uaccess.h
365 @@ -307,7 +307,7 @@ do { \
366 " .balign 4\n" \
367 "4:\n" \
368 " li %0, %6\n" \
369 - " jump 2b, %1\n" \
370 + " jump 3b, %1\n" \
371 " .previous\n" \
372 " .section __ex_table,\"a\"\n" \
373 " .balign " RISCV_SZPTR "\n" \
374 diff --git a/arch/sh/boards/of-generic.c b/arch/sh/boards/of-generic.c
375 index 26789ad28193..cb99df514a1c 100644
376 --- a/arch/sh/boards/of-generic.c
377 +++ b/arch/sh/boards/of-generic.c
378 @@ -175,10 +175,10 @@ static struct sh_machine_vector __initmv sh_of_generic_mv = {
379
380 struct sh_clk_ops;
381
382 -void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)
383 +void __init __weak arch_init_clk_ops(struct sh_clk_ops **ops, int idx)
384 {
385 }
386
387 -void __init plat_irq_setup(void)
388 +void __init __weak plat_irq_setup(void)
389 {
390 }
391 diff --git a/arch/x86/events/amd/core.c b/arch/x86/events/amd/core.c
392 index 263af6312329..27ade3cb6482 100644
393 --- a/arch/x86/events/amd/core.c
394 +++ b/arch/x86/events/amd/core.c
395 @@ -116,6 +116,110 @@ static __initconst const u64 amd_hw_cache_event_ids
396 },
397 };
398
399 +static __initconst const u64 amd_hw_cache_event_ids_f17h
400 + [PERF_COUNT_HW_CACHE_MAX]
401 + [PERF_COUNT_HW_CACHE_OP_MAX]
402 + [PERF_COUNT_HW_CACHE_RESULT_MAX] = {
403 +[C(L1D)] = {
404 + [C(OP_READ)] = {
405 + [C(RESULT_ACCESS)] = 0x0040, /* Data Cache Accesses */
406 + [C(RESULT_MISS)] = 0xc860, /* L2$ access from DC Miss */
407 + },
408 + [C(OP_WRITE)] = {
409 + [C(RESULT_ACCESS)] = 0,
410 + [C(RESULT_MISS)] = 0,
411 + },
412 + [C(OP_PREFETCH)] = {
413 + [C(RESULT_ACCESS)] = 0xff5a, /* h/w prefetch DC Fills */
414 + [C(RESULT_MISS)] = 0,
415 + },
416 +},
417 +[C(L1I)] = {
418 + [C(OP_READ)] = {
419 + [C(RESULT_ACCESS)] = 0x0080, /* Instruction cache fetches */
420 + [C(RESULT_MISS)] = 0x0081, /* Instruction cache misses */
421 + },
422 + [C(OP_WRITE)] = {
423 + [C(RESULT_ACCESS)] = -1,
424 + [C(RESULT_MISS)] = -1,
425 + },
426 + [C(OP_PREFETCH)] = {
427 + [C(RESULT_ACCESS)] = 0,
428 + [C(RESULT_MISS)] = 0,
429 + },
430 +},
431 +[C(LL)] = {
432 + [C(OP_READ)] = {
433 + [C(RESULT_ACCESS)] = 0,
434 + [C(RESULT_MISS)] = 0,
435 + },
436 + [C(OP_WRITE)] = {
437 + [C(RESULT_ACCESS)] = 0,
438 + [C(RESULT_MISS)] = 0,
439 + },
440 + [C(OP_PREFETCH)] = {
441 + [C(RESULT_ACCESS)] = 0,
442 + [C(RESULT_MISS)] = 0,
443 + },
444 +},
445 +[C(DTLB)] = {
446 + [C(OP_READ)] = {
447 + [C(RESULT_ACCESS)] = 0xff45, /* All L2 DTLB accesses */
448 + [C(RESULT_MISS)] = 0xf045, /* L2 DTLB misses (PT walks) */
449 + },
450 + [C(OP_WRITE)] = {
451 + [C(RESULT_ACCESS)] = 0,
452 + [C(RESULT_MISS)] = 0,
453 + },
454 + [C(OP_PREFETCH)] = {
455 + [C(RESULT_ACCESS)] = 0,
456 + [C(RESULT_MISS)] = 0,
457 + },
458 +},
459 +[C(ITLB)] = {
460 + [C(OP_READ)] = {
461 + [C(RESULT_ACCESS)] = 0x0084, /* L1 ITLB misses, L2 ITLB hits */
462 + [C(RESULT_MISS)] = 0xff85, /* L1 ITLB misses, L2 misses */
463 + },
464 + [C(OP_WRITE)] = {
465 + [C(RESULT_ACCESS)] = -1,
466 + [C(RESULT_MISS)] = -1,
467 + },
468 + [C(OP_PREFETCH)] = {
469 + [C(RESULT_ACCESS)] = -1,
470 + [C(RESULT_MISS)] = -1,
471 + },
472 +},
473 +[C(BPU)] = {
474 + [C(OP_READ)] = {
475 + [C(RESULT_ACCESS)] = 0x00c2, /* Retired Branch Instr. */
476 + [C(RESULT_MISS)] = 0x00c3, /* Retired Mispredicted BI */
477 + },
478 + [C(OP_WRITE)] = {
479 + [C(RESULT_ACCESS)] = -1,
480 + [C(RESULT_MISS)] = -1,
481 + },
482 + [C(OP_PREFETCH)] = {
483 + [C(RESULT_ACCESS)] = -1,
484 + [C(RESULT_MISS)] = -1,
485 + },
486 +},
487 +[C(NODE)] = {
488 + [C(OP_READ)] = {
489 + [C(RESULT_ACCESS)] = 0,
490 + [C(RESULT_MISS)] = 0,
491 + },
492 + [C(OP_WRITE)] = {
493 + [C(RESULT_ACCESS)] = -1,
494 + [C(RESULT_MISS)] = -1,
495 + },
496 + [C(OP_PREFETCH)] = {
497 + [C(RESULT_ACCESS)] = -1,
498 + [C(RESULT_MISS)] = -1,
499 + },
500 +},
501 +};
502 +
503 /*
504 * AMD Performance Monitor K7 and later, up to and including Family 16h:
505 */
506 @@ -861,9 +965,10 @@ __init int amd_pmu_init(void)
507 x86_pmu.amd_nb_constraints = 0;
508 }
509
510 - /* Events are common for all AMDs */
511 - memcpy(hw_cache_event_ids, amd_hw_cache_event_ids,
512 - sizeof(hw_cache_event_ids));
513 + if (boot_cpu_data.x86 >= 0x17)
514 + memcpy(hw_cache_event_ids, amd_hw_cache_event_ids_f17h, sizeof(hw_cache_event_ids));
515 + else
516 + memcpy(hw_cache_event_ids, amd_hw_cache_event_ids, sizeof(hw_cache_event_ids));
517
518 return 0;
519 }
520 diff --git a/arch/x86/kernel/cpu/mcheck/mce-severity.c b/arch/x86/kernel/cpu/mcheck/mce-severity.c
521 index f34d89c01edc..06f7c04a44e2 100644
522 --- a/arch/x86/kernel/cpu/mcheck/mce-severity.c
523 +++ b/arch/x86/kernel/cpu/mcheck/mce-severity.c
524 @@ -165,6 +165,11 @@ static struct severity {
525 SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR|MCI_ADDR|MCACOD, MCI_UC_SAR|MCI_ADDR|MCACOD_DATA),
526 KERNEL
527 ),
528 + MCESEV(
529 + PANIC, "Instruction fetch error in kernel",
530 + SER, MASK(MCI_STATUS_OVER|MCI_UC_SAR|MCI_ADDR|MCACOD, MCI_UC_SAR|MCI_ADDR|MCACOD_INSTR),
531 + KERNEL
532 + ),
533 #endif
534 MCESEV(
535 PANIC, "Action required: unknown MCACOD",
536 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
537 index 813cb60eb401..8dd9208ae4de 100644
538 --- a/arch/x86/kvm/svm.c
539 +++ b/arch/x86/kvm/svm.c
540 @@ -6789,7 +6789,8 @@ static int sev_dbg_crypt(struct kvm *kvm, struct kvm_sev_cmd *argp, bool dec)
541 struct page **src_p, **dst_p;
542 struct kvm_sev_dbg debug;
543 unsigned long n;
544 - int ret, size;
545 + unsigned int size;
546 + int ret;
547
548 if (!sev_guest(kvm))
549 return -ENOTTY;
550 @@ -6797,6 +6798,11 @@ static int sev_dbg_crypt(struct kvm *kvm, struct kvm_sev_cmd *argp, bool dec)
551 if (copy_from_user(&debug, (void __user *)(uintptr_t)argp->data, sizeof(debug)))
552 return -EFAULT;
553
554 + if (!debug.len || debug.src_uaddr + debug.len < debug.src_uaddr)
555 + return -EINVAL;
556 + if (!debug.dst_uaddr)
557 + return -EINVAL;
558 +
559 vaddr = debug.src_uaddr;
560 size = debug.len;
561 vaddr_end = vaddr + size;
562 @@ -6847,8 +6853,8 @@ static int sev_dbg_crypt(struct kvm *kvm, struct kvm_sev_cmd *argp, bool dec)
563 dst_vaddr,
564 len, &argp->error);
565
566 - sev_unpin_memory(kvm, src_p, 1);
567 - sev_unpin_memory(kvm, dst_p, 1);
568 + sev_unpin_memory(kvm, src_p, n);
569 + sev_unpin_memory(kvm, dst_p, n);
570
571 if (ret)
572 goto err;
573 diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
574 index d883869437b5..fb5f29c60019 100644
575 --- a/arch/x86/mm/init.c
576 +++ b/arch/x86/mm/init.c
577 @@ -6,6 +6,7 @@
578 #include <linux/bootmem.h> /* for max_low_pfn */
579 #include <linux/swapfile.h>
580 #include <linux/swapops.h>
581 +#include <linux/kmemleak.h>
582
583 #include <asm/set_memory.h>
584 #include <asm/e820/api.h>
585 @@ -767,6 +768,11 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end)
586 if (debug_pagealloc_enabled()) {
587 pr_info("debug: unmapping init [mem %#010lx-%#010lx]\n",
588 begin, end - 1);
589 + /*
590 + * Inform kmemleak about the hole in the memory since the
591 + * corresponding pages will be unmapped.
592 + */
593 + kmemleak_free_part((void *)begin, end - begin);
594 set_memory_np(begin, (end - begin) >> PAGE_SHIFT);
595 } else {
596 /*
597 diff --git a/arch/x86/mm/kaslr.c b/arch/x86/mm/kaslr.c
598 index 61db77b0eda9..0988971069c9 100644
599 --- a/arch/x86/mm/kaslr.c
600 +++ b/arch/x86/mm/kaslr.c
601 @@ -93,7 +93,7 @@ void __init kernel_randomize_memory(void)
602 if (!kaslr_memory_enabled())
603 return;
604
605 - kaslr_regions[0].size_tb = 1 << (__PHYSICAL_MASK_SHIFT - TB_SHIFT);
606 + kaslr_regions[0].size_tb = 1 << (MAX_PHYSMEM_BITS - TB_SHIFT);
607 kaslr_regions[1].size_tb = VMALLOC_SIZE_TB;
608
609 /*
610 diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
611 index a6d1b0241aea..a6836ab0fcc7 100644
612 --- a/arch/x86/mm/tlb.c
613 +++ b/arch/x86/mm/tlb.c
614 @@ -694,7 +694,7 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
615 {
616 int cpu;
617
618 - struct flush_tlb_info info __aligned(SMP_CACHE_BYTES) = {
619 + struct flush_tlb_info info = {
620 .mm = mm,
621 };
622
623 diff --git a/block/blk-core.c b/block/blk-core.c
624 index eb8b52241453..33488b1426b7 100644
625 --- a/block/blk-core.c
626 +++ b/block/blk-core.c
627 @@ -980,6 +980,10 @@ static void blk_rq_timed_out_timer(struct timer_list *t)
628 kblockd_schedule_work(&q->timeout_work);
629 }
630
631 +static void blk_timeout_work_dummy(struct work_struct *work)
632 +{
633 +}
634 +
635 /**
636 * blk_alloc_queue_node - allocate a request queue
637 * @gfp_mask: memory allocation flags
638 @@ -1034,7 +1038,7 @@ struct request_queue *blk_alloc_queue_node(gfp_t gfp_mask, int node_id,
639 timer_setup(&q->backing_dev_info->laptop_mode_wb_timer,
640 laptop_mode_timer_fn, 0);
641 timer_setup(&q->timeout, blk_rq_timed_out_timer, 0);
642 - INIT_WORK(&q->timeout_work, NULL);
643 + INIT_WORK(&q->timeout_work, blk_timeout_work_dummy);
644 INIT_LIST_HEAD(&q->timeout_list);
645 INIT_LIST_HEAD(&q->icq_list);
646 #ifdef CONFIG_BLK_CGROUP
647 diff --git a/block/blk-mq.c b/block/blk-mq.c
648 index 7d53f2314d7c..414656796ecf 100644
649 --- a/block/blk-mq.c
650 +++ b/block/blk-mq.c
651 @@ -2236,7 +2236,7 @@ static int blk_mq_init_hctx(struct request_queue *q,
652 return 0;
653
654 free_fq:
655 - kfree(hctx->fq);
656 + blk_free_flush_queue(hctx->fq);
657 exit_hctx:
658 if (set->ops->exit_hctx)
659 set->ops->exit_hctx(hctx, hctx_idx);
660 diff --git a/drivers/block/xsysace.c b/drivers/block/xsysace.c
661 index c24589414c75..0f36db0cf74a 100644
662 --- a/drivers/block/xsysace.c
663 +++ b/drivers/block/xsysace.c
664 @@ -1063,6 +1063,8 @@ static int ace_setup(struct ace_device *ace)
665 return 0;
666
667 err_read:
668 + /* prevent double queue cleanup */
669 + ace->gd->queue = NULL;
670 put_disk(ace->gd);
671 err_alloc_disk:
672 blk_cleanup_queue(ace->queue);
673 diff --git a/drivers/bluetooth/btmtkuart.c b/drivers/bluetooth/btmtkuart.c
674 index 4593baff2bc9..19eecf198321 100644
675 --- a/drivers/bluetooth/btmtkuart.c
676 +++ b/drivers/bluetooth/btmtkuart.c
677 @@ -115,11 +115,13 @@ static int mtk_hci_wmt_sync(struct hci_dev *hdev, u8 op, u8 flag, u16 plen,
678 TASK_INTERRUPTIBLE, HCI_INIT_TIMEOUT);
679 if (err == -EINTR) {
680 bt_dev_err(hdev, "Execution of wmt command interrupted");
681 + clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
682 return err;
683 }
684
685 if (err) {
686 bt_dev_err(hdev, "Execution of wmt command timed out");
687 + clear_bit(BTMTKUART_TX_WAIT_VND_EVT, &bdev->tx_state);
688 return -ETIMEDOUT;
689 }
690
691 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
692 index 77b67a5f21ee..40a4f95f6178 100644
693 --- a/drivers/bluetooth/btusb.c
694 +++ b/drivers/bluetooth/btusb.c
695 @@ -2888,6 +2888,7 @@ static int btusb_config_oob_wake(struct hci_dev *hdev)
696 return 0;
697 }
698
699 + irq_set_status_flags(irq, IRQ_NOAUTOEN);
700 ret = devm_request_irq(&hdev->dev, irq, btusb_oob_wake_handler,
701 0, "OOB Wake-on-BT", data);
702 if (ret) {
703 @@ -2902,7 +2903,6 @@ static int btusb_config_oob_wake(struct hci_dev *hdev)
704 }
705
706 data->oob_wake_irq = irq;
707 - disable_irq(irq);
708 bt_dev_info(hdev, "OOB Wake-on-BT configured at IRQ %u", irq);
709 return 0;
710 }
711 diff --git a/drivers/clk/qcom/gcc-msm8998.c b/drivers/clk/qcom/gcc-msm8998.c
712 index 9f0ae403d5f5..cd937ce6aaaf 100644
713 --- a/drivers/clk/qcom/gcc-msm8998.c
714 +++ b/drivers/clk/qcom/gcc-msm8998.c
715 @@ -1101,6 +1101,7 @@ static struct clk_rcg2 ufs_axi_clk_src = {
716
717 static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
718 F(19200000, P_XO, 1, 0, 0),
719 + F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
720 F(120000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
721 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
722 { }
723 diff --git a/drivers/clk/x86/clk-pmc-atom.c b/drivers/clk/x86/clk-pmc-atom.c
724 index d977193842df..19174835693b 100644
725 --- a/drivers/clk/x86/clk-pmc-atom.c
726 +++ b/drivers/clk/x86/clk-pmc-atom.c
727 @@ -165,7 +165,7 @@ static const struct clk_ops plt_clk_ops = {
728 };
729
730 static struct clk_plt *plt_clk_register(struct platform_device *pdev, int id,
731 - void __iomem *base,
732 + const struct pmc_clk_data *pmc_data,
733 const char **parent_names,
734 int num_parents)
735 {
736 @@ -184,9 +184,17 @@ static struct clk_plt *plt_clk_register(struct platform_device *pdev, int id,
737 init.num_parents = num_parents;
738
739 pclk->hw.init = &init;
740 - pclk->reg = base + PMC_CLK_CTL_OFFSET + id * PMC_CLK_CTL_SIZE;
741 + pclk->reg = pmc_data->base + PMC_CLK_CTL_OFFSET + id * PMC_CLK_CTL_SIZE;
742 spin_lock_init(&pclk->lock);
743
744 + /*
745 + * On some systems, the pmc_plt_clocks already enabled by the
746 + * firmware are being marked as critical to avoid them being
747 + * gated by the clock framework.
748 + */
749 + if (pmc_data->critical && plt_clk_is_enabled(&pclk->hw))
750 + init.flags |= CLK_IS_CRITICAL;
751 +
752 ret = devm_clk_hw_register(&pdev->dev, &pclk->hw);
753 if (ret) {
754 pclk = ERR_PTR(ret);
755 @@ -332,7 +340,7 @@ static int plt_clk_probe(struct platform_device *pdev)
756 return PTR_ERR(parent_names);
757
758 for (i = 0; i < PMC_CLK_NUM; i++) {
759 - data->clks[i] = plt_clk_register(pdev, i, pmc_data->base,
760 + data->clks[i] = plt_clk_register(pdev, i, pmc_data,
761 parent_names, data->nparents);
762 if (IS_ERR(data->clks[i])) {
763 err = PTR_ERR(data->clks[i]);
764 diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c
765 index b0aeffd4e269..1606abead22c 100644
766 --- a/drivers/firmware/efi/runtime-wrappers.c
767 +++ b/drivers/firmware/efi/runtime-wrappers.c
768 @@ -95,7 +95,7 @@ struct efi_runtime_work {
769 efi_rts_work.status = EFI_ABORTED; \
770 \
771 init_completion(&efi_rts_work.efi_rts_comp); \
772 - INIT_WORK_ONSTACK(&efi_rts_work.work, efi_call_rts); \
773 + INIT_WORK(&efi_rts_work.work, efi_call_rts); \
774 efi_rts_work.arg1 = _arg1; \
775 efi_rts_work.arg2 = _arg2; \
776 efi_rts_work.arg3 = _arg3; \
777 diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c
778 index 2d1dfa1e0745..e86e61dda4b7 100644
779 --- a/drivers/gpio/gpio-mxc.c
780 +++ b/drivers/gpio/gpio-mxc.c
781 @@ -438,8 +438,11 @@ static int mxc_gpio_probe(struct platform_device *pdev)
782
783 /* the controller clock is optional */
784 port->clk = devm_clk_get(&pdev->dev, NULL);
785 - if (IS_ERR(port->clk))
786 + if (IS_ERR(port->clk)) {
787 + if (PTR_ERR(port->clk) == -EPROBE_DEFER)
788 + return -EPROBE_DEFER;
789 port->clk = NULL;
790 + }
791
792 err = clk_prepare_enable(port->clk);
793 if (err) {
794 diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c
795 index ebc9ffde41e9..a353a011fbdf 100644
796 --- a/drivers/hid/hid-debug.c
797 +++ b/drivers/hid/hid-debug.c
798 @@ -1060,10 +1060,15 @@ static int hid_debug_rdesc_show(struct seq_file *f, void *p)
799 seq_printf(f, "\n\n");
800
801 /* dump parsed data and input mappings */
802 + if (down_interruptible(&hdev->driver_input_lock))
803 + return 0;
804 +
805 hid_dump_device(hdev, f);
806 seq_printf(f, "\n");
807 hid_dump_input_mapping(hdev, f);
808
809 + up(&hdev->driver_input_lock);
810 +
811 return 0;
812 }
813
814 diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
815 index a3916e58dbf5..e649940e065d 100644
816 --- a/drivers/hid/hid-input.c
817 +++ b/drivers/hid/hid-input.c
818 @@ -982,6 +982,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
819 case 0x1b8: map_key_clear(KEY_VIDEO); break;
820 case 0x1bc: map_key_clear(KEY_MESSENGER); break;
821 case 0x1bd: map_key_clear(KEY_INFO); break;
822 + case 0x1cb: map_key_clear(KEY_ASSISTANT); break;
823 case 0x201: map_key_clear(KEY_NEW); break;
824 case 0x202: map_key_clear(KEY_OPEN); break;
825 case 0x203: map_key_clear(KEY_CLOSE); break;
826 diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
827 index 19cc980eebce..8425d3548a41 100644
828 --- a/drivers/hid/hid-logitech-hidpp.c
829 +++ b/drivers/hid/hid-logitech-hidpp.c
830 @@ -1907,6 +1907,13 @@ static int hidpp_ff_init(struct hidpp_device *hidpp, u8 feature_index)
831 kfree(data);
832 return -ENOMEM;
833 }
834 + data->wq = create_singlethread_workqueue("hidpp-ff-sendqueue");
835 + if (!data->wq) {
836 + kfree(data->effect_ids);
837 + kfree(data);
838 + return -ENOMEM;
839 + }
840 +
841 data->hidpp = hidpp;
842 data->feature_index = feature_index;
843 data->version = version;
844 @@ -1951,7 +1958,6 @@ static int hidpp_ff_init(struct hidpp_device *hidpp, u8 feature_index)
845 /* ignore boost value at response.fap.params[2] */
846
847 /* init the hardware command queue */
848 - data->wq = create_singlethread_workqueue("hidpp-ff-sendqueue");
849 atomic_set(&data->workqueue_size, 0);
850
851 /* initialize with zero autocenter to get wheel in usable state */
852 diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
853 index 94088c0ed68a..e24790c988c0 100644
854 --- a/drivers/hid/hid-quirks.c
855 +++ b/drivers/hid/hid-quirks.c
856 @@ -744,7 +744,6 @@ static const struct hid_device_id hid_ignore_list[] = {
857 { HID_USB_DEVICE(USB_VENDOR_ID_DEALEXTREAME, USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701) },
858 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE) },
859 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20) },
860 - { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, 0x0400) },
861 { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) },
862 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC5UH) },
863 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC4UM) },
864 @@ -1025,6 +1024,10 @@ bool hid_ignore(struct hid_device *hdev)
865 if (hdev->product == 0x0401 &&
866 strncmp(hdev->name, "ELAN0800", 8) != 0)
867 return true;
868 + /* Same with product id 0x0400 */
869 + if (hdev->product == 0x0400 &&
870 + strncmp(hdev->name, "QTEC0001", 8) != 0)
871 + return true;
872 break;
873 }
874
875 diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
876 index c406700789e1..7bd409eaf0ac 100644
877 --- a/drivers/i2c/busses/i2c-imx.c
878 +++ b/drivers/i2c/busses/i2c-imx.c
879 @@ -510,9 +510,9 @@ static int i2c_imx_clk_notifier_call(struct notifier_block *nb,
880 unsigned long action, void *data)
881 {
882 struct clk_notifier_data *ndata = data;
883 - struct imx_i2c_struct *i2c_imx = container_of(&ndata->clk,
884 + struct imx_i2c_struct *i2c_imx = container_of(nb,
885 struct imx_i2c_struct,
886 - clk);
887 + clk_change_nb);
888
889 if (action & POST_RATE_CHANGE)
890 i2c_imx_set_clk(i2c_imx, ndata->new_rate);
891 diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c
892 index 62d023e737d9..a492da9fd0d3 100644
893 --- a/drivers/i2c/busses/i2c-stm32f7.c
894 +++ b/drivers/i2c/busses/i2c-stm32f7.c
895 @@ -424,7 +424,7 @@ static int stm32f7_i2c_compute_timing(struct stm32f7_i2c_dev *i2c_dev,
896 STM32F7_I2C_ANALOG_FILTER_DELAY_MAX : 0);
897 dnf_delay = setup->dnf * i2cclk;
898
899 - sdadel_min = setup->fall_time - i2c_specs[setup->speed].hddat_min -
900 + sdadel_min = i2c_specs[setup->speed].hddat_min + setup->fall_time -
901 af_delay_min - (setup->dnf + 3) * i2cclk;
902
903 sdadel_max = i2c_specs[setup->speed].vddat_max - setup->rise_time -
904 diff --git a/drivers/i2c/busses/i2c-synquacer.c b/drivers/i2c/busses/i2c-synquacer.c
905 index 915f5edbab33..e6c554e6ba58 100644
906 --- a/drivers/i2c/busses/i2c-synquacer.c
907 +++ b/drivers/i2c/busses/i2c-synquacer.c
908 @@ -602,6 +602,8 @@ static int synquacer_i2c_probe(struct platform_device *pdev)
909 i2c->adapter = synquacer_i2c_ops;
910 i2c_set_adapdata(&i2c->adapter, i2c);
911 i2c->adapter.dev.parent = &pdev->dev;
912 + i2c->adapter.dev.of_node = pdev->dev.of_node;
913 + ACPI_COMPANION_SET(&i2c->adapter.dev, ACPI_COMPANION(&pdev->dev));
914 i2c->adapter.nr = pdev->id;
915 init_completion(&i2c->completion);
916
917 diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
918 index 9200e349f29e..5b0e1d9e5adc 100644
919 --- a/drivers/i2c/i2c-core-base.c
920 +++ b/drivers/i2c/i2c-core-base.c
921 @@ -306,10 +306,7 @@ static int i2c_smbus_host_notify_to_irq(const struct i2c_client *client)
922 if (client->flags & I2C_CLIENT_TEN)
923 return -EINVAL;
924
925 - irq = irq_find_mapping(adap->host_notify_domain, client->addr);
926 - if (!irq)
927 - irq = irq_create_mapping(adap->host_notify_domain,
928 - client->addr);
929 + irq = irq_create_mapping(adap->host_notify_domain, client->addr);
930
931 return irq > 0 ? irq : -ENXIO;
932 }
933 @@ -330,6 +327,8 @@ static int i2c_device_probe(struct device *dev)
934
935 if (client->flags & I2C_CLIENT_HOST_NOTIFY) {
936 dev_dbg(dev, "Using Host Notify IRQ\n");
937 + /* Keep adapter active when Host Notify is required */
938 + pm_runtime_get_sync(&client->adapter->dev);
939 irq = i2c_smbus_host_notify_to_irq(client);
940 } else if (dev->of_node) {
941 irq = of_irq_get_byname(dev->of_node, "irq");
942 @@ -433,6 +432,10 @@ static int i2c_device_remove(struct device *dev)
943 dev_pm_clear_wake_irq(&client->dev);
944 device_init_wakeup(&client->dev, false);
945
946 + client->irq = client->init_irq;
947 + if (client->flags & I2C_CLIENT_HOST_NOTIFY)
948 + pm_runtime_put(&client->adapter->dev);
949 +
950 return status;
951 }
952
953 @@ -742,10 +745,11 @@ i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
954 client->flags = info->flags;
955 client->addr = info->addr;
956
957 - client->irq = info->irq;
958 - if (!client->irq)
959 - client->irq = i2c_dev_irq_from_resources(info->resources,
960 + client->init_irq = info->irq;
961 + if (!client->init_irq)
962 + client->init_irq = i2c_dev_irq_from_resources(info->resources,
963 info->num_resources);
964 + client->irq = client->init_irq;
965
966 strlcpy(client->name, info->type, sizeof(client->name));
967
968 diff --git a/drivers/infiniband/core/security.c b/drivers/infiniband/core/security.c
969 index 9b0bea8303e0..b79b61bd6ee4 100644
970 --- a/drivers/infiniband/core/security.c
971 +++ b/drivers/infiniband/core/security.c
972 @@ -711,16 +711,20 @@ int ib_mad_agent_security_setup(struct ib_mad_agent *agent,
973 agent->device->name,
974 agent->port_num);
975 if (ret)
976 - return ret;
977 + goto free_security;
978
979 agent->lsm_nb.notifier_call = ib_mad_agent_security_change;
980 ret = register_lsm_notifier(&agent->lsm_nb);
981 if (ret)
982 - return ret;
983 + goto free_security;
984
985 agent->smp_allowed = true;
986 agent->lsm_nb_reg = true;
987 return 0;
988 +
989 +free_security:
990 + security_ib_free_security(agent->security);
991 + return ret;
992 }
993
994 void ib_mad_agent_security_cleanup(struct ib_mad_agent *agent)
995 @@ -728,9 +732,10 @@ void ib_mad_agent_security_cleanup(struct ib_mad_agent *agent)
996 if (!rdma_protocol_ib(agent->device, agent->port_num))
997 return;
998
999 - security_ib_free_security(agent->security);
1000 if (agent->lsm_nb_reg)
1001 unregister_lsm_notifier(&agent->lsm_nb);
1002 +
1003 + security_ib_free_security(agent->security);
1004 }
1005
1006 int ib_mad_enforce_security(struct ib_mad_agent_private *map, u16 pkey_index)
1007 diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
1008 index 6ee03d6089eb..82f309fb3ce5 100644
1009 --- a/drivers/infiniband/core/verbs.c
1010 +++ b/drivers/infiniband/core/verbs.c
1011 @@ -1087,8 +1087,8 @@ struct ib_qp *ib_open_qp(struct ib_xrcd *xrcd,
1012 }
1013 EXPORT_SYMBOL(ib_open_qp);
1014
1015 -static struct ib_qp *ib_create_xrc_qp(struct ib_qp *qp,
1016 - struct ib_qp_init_attr *qp_init_attr)
1017 +static struct ib_qp *create_xrc_qp(struct ib_qp *qp,
1018 + struct ib_qp_init_attr *qp_init_attr)
1019 {
1020 struct ib_qp *real_qp = qp;
1021
1022 @@ -1103,10 +1103,10 @@ static struct ib_qp *ib_create_xrc_qp(struct ib_qp *qp,
1023
1024 qp = __ib_open_qp(real_qp, qp_init_attr->event_handler,
1025 qp_init_attr->qp_context);
1026 - if (!IS_ERR(qp))
1027 - __ib_insert_xrcd_qp(qp_init_attr->xrcd, real_qp);
1028 - else
1029 - real_qp->device->destroy_qp(real_qp);
1030 + if (IS_ERR(qp))
1031 + return qp;
1032 +
1033 + __ib_insert_xrcd_qp(qp_init_attr->xrcd, real_qp);
1034 return qp;
1035 }
1036
1037 @@ -1137,10 +1137,8 @@ struct ib_qp *ib_create_qp(struct ib_pd *pd,
1038 return qp;
1039
1040 ret = ib_create_qp_security(qp, device);
1041 - if (ret) {
1042 - ib_destroy_qp(qp);
1043 - return ERR_PTR(ret);
1044 - }
1045 + if (ret)
1046 + goto err;
1047
1048 qp->real_qp = qp;
1049 qp->qp_type = qp_init_attr->qp_type;
1050 @@ -1153,8 +1151,15 @@ struct ib_qp *ib_create_qp(struct ib_pd *pd,
1051 INIT_LIST_HEAD(&qp->sig_mrs);
1052 qp->port = 0;
1053
1054 - if (qp_init_attr->qp_type == IB_QPT_XRC_TGT)
1055 - return ib_create_xrc_qp(qp, qp_init_attr);
1056 + if (qp_init_attr->qp_type == IB_QPT_XRC_TGT) {
1057 + struct ib_qp *xrc_qp = create_xrc_qp(qp, qp_init_attr);
1058 +
1059 + if (IS_ERR(xrc_qp)) {
1060 + ret = PTR_ERR(xrc_qp);
1061 + goto err;
1062 + }
1063 + return xrc_qp;
1064 + }
1065
1066 qp->event_handler = qp_init_attr->event_handler;
1067 qp->qp_context = qp_init_attr->qp_context;
1068 @@ -1181,11 +1186,8 @@ struct ib_qp *ib_create_qp(struct ib_pd *pd,
1069
1070 if (qp_init_attr->cap.max_rdma_ctxs) {
1071 ret = rdma_rw_init_mrs(qp, qp_init_attr);
1072 - if (ret) {
1073 - pr_err("failed to init MR pool ret= %d\n", ret);
1074 - ib_destroy_qp(qp);
1075 - return ERR_PTR(ret);
1076 - }
1077 + if (ret)
1078 + goto err;
1079 }
1080
1081 /*
1082 @@ -1198,6 +1200,11 @@ struct ib_qp *ib_create_qp(struct ib_pd *pd,
1083 device->attrs.max_sge_rd);
1084
1085 return qp;
1086 +
1087 +err:
1088 + ib_destroy_qp(qp);
1089 + return ERR_PTR(ret);
1090 +
1091 }
1092 EXPORT_SYMBOL(ib_create_qp);
1093
1094 diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c
1095 index f4bce5aa0ff8..ea4afdeb06a4 100644
1096 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c
1097 +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
1098 @@ -2793,8 +2793,19 @@ static void srpt_queue_tm_rsp(struct se_cmd *cmd)
1099 srpt_queue_response(cmd);
1100 }
1101
1102 +/*
1103 + * This function is called for aborted commands if no response is sent to the
1104 + * initiator. Make sure that the credits freed by aborting a command are
1105 + * returned to the initiator the next time a response is sent by incrementing
1106 + * ch->req_lim_delta.
1107 + */
1108 static void srpt_aborted_task(struct se_cmd *cmd)
1109 {
1110 + struct srpt_send_ioctx *ioctx = container_of(cmd,
1111 + struct srpt_send_ioctx, cmd);
1112 + struct srpt_rdma_ch *ch = ioctx->ch;
1113 +
1114 + atomic_inc(&ch->req_lim_delta);
1115 }
1116
1117 static int srpt_queue_status(struct se_cmd *cmd)
1118 diff --git a/drivers/input/keyboard/snvs_pwrkey.c b/drivers/input/keyboard/snvs_pwrkey.c
1119 index effb63205d3d..4c67cf30a5d9 100644
1120 --- a/drivers/input/keyboard/snvs_pwrkey.c
1121 +++ b/drivers/input/keyboard/snvs_pwrkey.c
1122 @@ -148,6 +148,9 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev)
1123 return error;
1124 }
1125
1126 + pdata->input = input;
1127 + platform_set_drvdata(pdev, pdata);
1128 +
1129 error = devm_request_irq(&pdev->dev, pdata->irq,
1130 imx_snvs_pwrkey_interrupt,
1131 0, pdev->name, pdev);
1132 @@ -163,9 +166,6 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev)
1133 return error;
1134 }
1135
1136 - pdata->input = input;
1137 - platform_set_drvdata(pdev, pdata);
1138 -
1139 device_init_wakeup(&pdev->dev, pdata->wakeup);
1140
1141 return 0;
1142 diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen/stmfts.c
1143 index 704e99046916..b6f95f20f924 100644
1144 --- a/drivers/input/touchscreen/stmfts.c
1145 +++ b/drivers/input/touchscreen/stmfts.c
1146 @@ -106,27 +106,29 @@ struct stmfts_data {
1147 bool running;
1148 };
1149
1150 -static void stmfts_brightness_set(struct led_classdev *led_cdev,
1151 +static int stmfts_brightness_set(struct led_classdev *led_cdev,
1152 enum led_brightness value)
1153 {
1154 struct stmfts_data *sdata = container_of(led_cdev,
1155 struct stmfts_data, led_cdev);
1156 int err;
1157
1158 - if (value == sdata->led_status || !sdata->ledvdd)
1159 - return;
1160 -
1161 - if (!value) {
1162 - regulator_disable(sdata->ledvdd);
1163 - } else {
1164 - err = regulator_enable(sdata->ledvdd);
1165 - if (err)
1166 - dev_warn(&sdata->client->dev,
1167 - "failed to disable ledvdd regulator: %d\n",
1168 - err);
1169 + if (value != sdata->led_status && sdata->ledvdd) {
1170 + if (!value) {
1171 + regulator_disable(sdata->ledvdd);
1172 + } else {
1173 + err = regulator_enable(sdata->ledvdd);
1174 + if (err) {
1175 + dev_warn(&sdata->client->dev,
1176 + "failed to disable ledvdd regulator: %d\n",
1177 + err);
1178 + return err;
1179 + }
1180 + }
1181 + sdata->led_status = value;
1182 }
1183
1184 - sdata->led_status = value;
1185 + return 0;
1186 }
1187
1188 static enum led_brightness stmfts_brightness_get(struct led_classdev *led_cdev)
1189 @@ -608,7 +610,7 @@ static int stmfts_enable_led(struct stmfts_data *sdata)
1190 sdata->led_cdev.name = STMFTS_DEV_NAME;
1191 sdata->led_cdev.max_brightness = LED_ON;
1192 sdata->led_cdev.brightness = LED_OFF;
1193 - sdata->led_cdev.brightness_set = stmfts_brightness_set;
1194 + sdata->led_cdev.brightness_set_blocking = stmfts_brightness_set;
1195 sdata->led_cdev.brightness_get = stmfts_brightness_get;
1196
1197 err = devm_led_classdev_register(&sdata->client->dev, &sdata->led_cdev);
1198 diff --git a/drivers/media/i2c/ov7670.c b/drivers/media/i2c/ov7670.c
1199 index 64d1402882c8..1f71c14c8aab 100644
1200 --- a/drivers/media/i2c/ov7670.c
1201 +++ b/drivers/media/i2c/ov7670.c
1202 @@ -159,10 +159,10 @@ MODULE_PARM_DESC(debug, "Debug level (0-1)");
1203 #define REG_GFIX 0x69 /* Fix gain control */
1204
1205 #define REG_DBLV 0x6b /* PLL control an debugging */
1206 -#define DBLV_BYPASS 0x00 /* Bypass PLL */
1207 -#define DBLV_X4 0x01 /* clock x4 */
1208 -#define DBLV_X6 0x10 /* clock x6 */
1209 -#define DBLV_X8 0x11 /* clock x8 */
1210 +#define DBLV_BYPASS 0x0a /* Bypass PLL */
1211 +#define DBLV_X4 0x4a /* clock x4 */
1212 +#define DBLV_X6 0x8a /* clock x6 */
1213 +#define DBLV_X8 0xca /* clock x8 */
1214
1215 #define REG_SCALING_XSC 0x70 /* Test pattern and horizontal scale factor */
1216 #define TEST_PATTTERN_0 0x80
1217 @@ -862,7 +862,7 @@ static int ov7675_set_framerate(struct v4l2_subdev *sd,
1218 if (ret < 0)
1219 return ret;
1220
1221 - return ov7670_write(sd, REG_DBLV, DBLV_X4);
1222 + return 0;
1223 }
1224
1225 static void ov7670_get_framerate_legacy(struct v4l2_subdev *sd,
1226 @@ -1797,11 +1797,7 @@ static int ov7670_probe(struct i2c_client *client,
1227 if (config->clock_speed)
1228 info->clock_speed = config->clock_speed;
1229
1230 - /*
1231 - * It should be allowed for ov7670 too when it is migrated to
1232 - * the new frame rate formula.
1233 - */
1234 - if (config->pll_bypass && id->driver_data != MODEL_OV7670)
1235 + if (config->pll_bypass)
1236 info->pll_bypass = true;
1237
1238 if (config->pclk_hb_disable)
1239 diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
1240 index 299016bc46d9..104477b512a2 100644
1241 --- a/drivers/mfd/twl-core.c
1242 +++ b/drivers/mfd/twl-core.c
1243 @@ -1245,6 +1245,28 @@ free:
1244 return status;
1245 }
1246
1247 +static int __maybe_unused twl_suspend(struct device *dev)
1248 +{
1249 + struct i2c_client *client = to_i2c_client(dev);
1250 +
1251 + if (client->irq)
1252 + disable_irq(client->irq);
1253 +
1254 + return 0;
1255 +}
1256 +
1257 +static int __maybe_unused twl_resume(struct device *dev)
1258 +{
1259 + struct i2c_client *client = to_i2c_client(dev);
1260 +
1261 + if (client->irq)
1262 + enable_irq(client->irq);
1263 +
1264 + return 0;
1265 +}
1266 +
1267 +static SIMPLE_DEV_PM_OPS(twl_dev_pm_ops, twl_suspend, twl_resume);
1268 +
1269 static const struct i2c_device_id twl_ids[] = {
1270 { "twl4030", TWL4030_VAUX2 }, /* "Triton 2" */
1271 { "twl5030", 0 }, /* T2 updated */
1272 @@ -1262,6 +1284,7 @@ static const struct i2c_device_id twl_ids[] = {
1273 /* One Client Driver , 4 Clients */
1274 static struct i2c_driver twl_driver = {
1275 .driver.name = DRIVER_NAME,
1276 + .driver.pm = &twl_dev_pm_ops,
1277 .id_table = twl_ids,
1278 .probe = twl_probe,
1279 .remove = twl_remove,
1280 diff --git a/drivers/net/bonding/bond_sysfs_slave.c b/drivers/net/bonding/bond_sysfs_slave.c
1281 index 2f120b2ffef0..4985268e2273 100644
1282 --- a/drivers/net/bonding/bond_sysfs_slave.c
1283 +++ b/drivers/net/bonding/bond_sysfs_slave.c
1284 @@ -55,7 +55,9 @@ static SLAVE_ATTR_RO(link_failure_count);
1285
1286 static ssize_t perm_hwaddr_show(struct slave *slave, char *buf)
1287 {
1288 - return sprintf(buf, "%pM\n", slave->perm_hwaddr);
1289 + return sprintf(buf, "%*phC\n",
1290 + slave->dev->addr_len,
1291 + slave->perm_hwaddr);
1292 }
1293 static SLAVE_ATTR_RO(perm_hwaddr);
1294
1295 diff --git a/drivers/net/ethernet/chelsio/libcxgb/libcxgb_ppm.c b/drivers/net/ethernet/chelsio/libcxgb/libcxgb_ppm.c
1296 index 74849be5f004..e2919005ead3 100644
1297 --- a/drivers/net/ethernet/chelsio/libcxgb/libcxgb_ppm.c
1298 +++ b/drivers/net/ethernet/chelsio/libcxgb/libcxgb_ppm.c
1299 @@ -354,7 +354,10 @@ static struct cxgbi_ppm_pool *ppm_alloc_cpu_pool(unsigned int *total,
1300 ppmax = max;
1301
1302 /* pool size must be multiple of unsigned long */
1303 - bmap = BITS_TO_LONGS(ppmax);
1304 + bmap = ppmax / BITS_PER_TYPE(unsigned long);
1305 + if (!bmap)
1306 + return NULL;
1307 +
1308 ppmax = (bmap * sizeof(unsigned long)) << 3;
1309
1310 alloc_sz = sizeof(*pools) + sizeof(unsigned long) * bmap;
1311 @@ -402,6 +405,10 @@ int cxgbi_ppm_init(void **ppm_pp, struct net_device *ndev,
1312 if (reserve_factor) {
1313 ppmax_pool = ppmax / reserve_factor;
1314 pool = ppm_alloc_cpu_pool(&ppmax_pool, &pool_index_max);
1315 + if (!pool) {
1316 + ppmax_pool = 0;
1317 + reserve_factor = 0;
1318 + }
1319
1320 pr_debug("%s: ppmax %u, cpu total %u, per cpu %u.\n",
1321 ndev->name, ppmax, ppmax_pool, pool_index_max);
1322 diff --git a/drivers/net/ethernet/hisilicon/hns/hnae.c b/drivers/net/ethernet/hisilicon/hns/hnae.c
1323 index 79d03f8ee7b1..c7fa97a7e1f4 100644
1324 --- a/drivers/net/ethernet/hisilicon/hns/hnae.c
1325 +++ b/drivers/net/ethernet/hisilicon/hns/hnae.c
1326 @@ -150,7 +150,6 @@ out_buffer_fail:
1327 /* free desc along with its attached buffer */
1328 static void hnae_free_desc(struct hnae_ring *ring)
1329 {
1330 - hnae_free_buffers(ring);
1331 dma_unmap_single(ring_to_dev(ring), ring->desc_dma_addr,
1332 ring->desc_num * sizeof(ring->desc[0]),
1333 ring_to_dma_dir(ring));
1334 @@ -183,6 +182,9 @@ static int hnae_alloc_desc(struct hnae_ring *ring)
1335 /* fini ring, also free the buffer for the ring */
1336 static void hnae_fini_ring(struct hnae_ring *ring)
1337 {
1338 + if (is_rx_ring(ring))
1339 + hnae_free_buffers(ring);
1340 +
1341 hnae_free_desc(ring);
1342 kfree(ring->desc_cb);
1343 ring->desc_cb = NULL;
1344 diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1345 index b8155f5e71b4..fdff5526d2e8 100644
1346 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1347 +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
1348 @@ -2750,6 +2750,17 @@ int hns_dsaf_get_regs_count(void)
1349 return DSAF_DUMP_REGS_NUM;
1350 }
1351
1352 +static int hns_dsaf_get_port_id(u8 port)
1353 +{
1354 + if (port < DSAF_SERVICE_NW_NUM)
1355 + return port;
1356 +
1357 + if (port >= DSAF_BASE_INNER_PORT_NUM)
1358 + return port - DSAF_BASE_INNER_PORT_NUM + DSAF_SERVICE_NW_NUM;
1359 +
1360 + return -EINVAL;
1361 +}
1362 +
1363 static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port)
1364 {
1365 struct dsaf_tbl_tcam_ucast_cfg tbl_tcam_ucast = {0, 1, 0, 0, 0x80};
1366 @@ -2815,23 +2826,33 @@ static void set_promisc_tcam_enable(struct dsaf_device *dsaf_dev, u32 port)
1367 memset(&temp_key, 0x0, sizeof(temp_key));
1368 mask_entry.addr[0] = 0x01;
1369 hns_dsaf_set_mac_key(dsaf_dev, &mask_key, mask_entry.in_vlan_id,
1370 - port, mask_entry.addr);
1371 + 0xf, mask_entry.addr);
1372 tbl_tcam_mcast.tbl_mcast_item_vld = 1;
1373 tbl_tcam_mcast.tbl_mcast_old_en = 0;
1374
1375 - if (port < DSAF_SERVICE_NW_NUM) {
1376 - mskid = port;
1377 - } else if (port >= DSAF_BASE_INNER_PORT_NUM) {
1378 - mskid = port - DSAF_BASE_INNER_PORT_NUM + DSAF_SERVICE_NW_NUM;
1379 - } else {
1380 + /* set MAC port to handle multicast */
1381 + mskid = hns_dsaf_get_port_id(port);
1382 + if (mskid == -EINVAL) {
1383 dev_err(dsaf_dev->dev, "%s,pnum(%d)error,key(%#x:%#x)\n",
1384 dsaf_dev->ae_dev.name, port,
1385 mask_key.high.val, mask_key.low.val);
1386 return;
1387 }
1388 + dsaf_set_bit(tbl_tcam_mcast.tbl_mcast_port_msk[mskid / 32],
1389 + mskid % 32, 1);
1390
1391 + /* set pool bit map to handle multicast */
1392 + mskid = hns_dsaf_get_port_id(port_num);
1393 + if (mskid == -EINVAL) {
1394 + dev_err(dsaf_dev->dev,
1395 + "%s, pool bit map pnum(%d)error,key(%#x:%#x)\n",
1396 + dsaf_dev->ae_dev.name, port_num,
1397 + mask_key.high.val, mask_key.low.val);
1398 + return;
1399 + }
1400 dsaf_set_bit(tbl_tcam_mcast.tbl_mcast_port_msk[mskid / 32],
1401 mskid % 32, 1);
1402 +
1403 memcpy(&temp_key, &mask_key, sizeof(mask_key));
1404 hns_dsaf_tcam_mc_cfg_vague(dsaf_dev, entry_index, &tbl_tcam_data_mc,
1405 (struct dsaf_tbl_tcam_data *)(&mask_key),
1406 diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_xgmac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_xgmac.c
1407 index ba4316910dea..a60f207768fc 100644
1408 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_xgmac.c
1409 +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_xgmac.c
1410 @@ -129,7 +129,7 @@ static void hns_xgmac_lf_rf_control_init(struct mac_driver *mac_drv)
1411 dsaf_set_bit(val, XGMAC_UNIDIR_EN_B, 0);
1412 dsaf_set_bit(val, XGMAC_RF_TX_EN_B, 1);
1413 dsaf_set_field(val, XGMAC_LF_RF_INSERT_M, XGMAC_LF_RF_INSERT_S, 0);
1414 - dsaf_write_reg(mac_drv, XGMAC_MAC_TX_LF_RF_CONTROL_REG, val);
1415 + dsaf_write_dev(mac_drv, XGMAC_MAC_TX_LF_RF_CONTROL_REG, val);
1416 }
1417
1418 /**
1419 diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1420 index cc84133c184d..1c70f9aa0aa7 100644
1421 --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1422 +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1423 @@ -29,9 +29,6 @@
1424
1425 #define SERVICE_TIMER_HZ (1 * HZ)
1426
1427 -#define NIC_TX_CLEAN_MAX_NUM 256
1428 -#define NIC_RX_CLEAN_MAX_NUM 64
1429 -
1430 #define RCB_IRQ_NOT_INITED 0
1431 #define RCB_IRQ_INITED 1
1432 #define HNS_BUFFER_SIZE_2048 2048
1433 @@ -376,8 +373,6 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev,
1434 wmb(); /* commit all data before submit */
1435 assert(skb->queue_mapping < priv->ae_handle->q_num);
1436 hnae_queue_xmit(priv->ae_handle->qs[skb->queue_mapping], buf_num);
1437 - ring->stats.tx_pkts++;
1438 - ring->stats.tx_bytes += skb->len;
1439
1440 return NETDEV_TX_OK;
1441
1442 @@ -999,6 +994,9 @@ static int hns_nic_tx_poll_one(struct hns_nic_ring_data *ring_data,
1443 /* issue prefetch for next Tx descriptor */
1444 prefetch(&ring->desc_cb[ring->next_to_clean]);
1445 }
1446 + /* update tx ring statistics. */
1447 + ring->stats.tx_pkts += pkts;
1448 + ring->stats.tx_bytes += bytes;
1449
1450 NETIF_TX_UNLOCK(ring);
1451
1452 @@ -2150,7 +2148,7 @@ static int hns_nic_init_ring_data(struct hns_nic_priv *priv)
1453 hns_nic_tx_fini_pro_v2;
1454
1455 netif_napi_add(priv->netdev, &rd->napi,
1456 - hns_nic_common_poll, NIC_TX_CLEAN_MAX_NUM);
1457 + hns_nic_common_poll, NAPI_POLL_WEIGHT);
1458 rd->ring->irq_init_flag = RCB_IRQ_NOT_INITED;
1459 }
1460 for (i = h->q_num; i < h->q_num * 2; i++) {
1461 @@ -2163,7 +2161,7 @@ static int hns_nic_init_ring_data(struct hns_nic_priv *priv)
1462 hns_nic_rx_fini_pro_v2;
1463
1464 netif_napi_add(priv->netdev, &rd->napi,
1465 - hns_nic_common_poll, NIC_RX_CLEAN_MAX_NUM);
1466 + hns_nic_common_poll, NAPI_POLL_WEIGHT);
1467 rd->ring->irq_init_flag = RCB_IRQ_NOT_INITED;
1468 }
1469
1470 diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/Makefile b/drivers/net/ethernet/hisilicon/hns3/hns3pf/Makefile
1471 index cb8ddd043476..d278fc7ea3ed 100644
1472 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/Makefile
1473 +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/Makefile
1474 @@ -3,7 +3,7 @@
1475 # Makefile for the HISILICON network device drivers.
1476 #
1477
1478 -ccflags-y := -Idrivers/net/ethernet/hisilicon/hns3
1479 +ccflags-y := -I $(srctree)/drivers/net/ethernet/hisilicon/hns3
1480
1481 obj-$(CONFIG_HNS3_HCLGE) += hclge.o
1482 hclge-objs = hclge_main.o hclge_cmd.o hclge_mdio.o hclge_tm.o hclge_mbx.o
1483 diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/Makefile b/drivers/net/ethernet/hisilicon/hns3/hns3vf/Makefile
1484 index fb93bbd35845..6193f8fa7cf3 100644
1485 --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/Makefile
1486 +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/Makefile
1487 @@ -3,7 +3,7 @@
1488 # Makefile for the HISILICON network device drivers.
1489 #
1490
1491 -ccflags-y := -Idrivers/net/ethernet/hisilicon/hns3
1492 +ccflags-y := -I $(srctree)/drivers/net/ethernet/hisilicon/hns3
1493
1494 obj-$(CONFIG_HNS3_HCLGEVF) += hclgevf.o
1495 hclgevf-objs = hclgevf_main.o hclgevf_cmd.o hclgevf_mbx.o
1496 \ No newline at end of file
1497 diff --git a/drivers/net/ethernet/intel/igb/e1000_defines.h b/drivers/net/ethernet/intel/igb/e1000_defines.h
1498 index 8a28f3388f69..dca671591ef6 100644
1499 --- a/drivers/net/ethernet/intel/igb/e1000_defines.h
1500 +++ b/drivers/net/ethernet/intel/igb/e1000_defines.h
1501 @@ -194,6 +194,8 @@
1502 /* enable link status from external LINK_0 and LINK_1 pins */
1503 #define E1000_CTRL_SWDPIN0 0x00040000 /* SWDPIN 0 value */
1504 #define E1000_CTRL_SWDPIN1 0x00080000 /* SWDPIN 1 value */
1505 +#define E1000_CTRL_ADVD3WUC 0x00100000 /* D3 WUC */
1506 +#define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000 /* PHY PM enable */
1507 #define E1000_CTRL_SDP0_DIR 0x00400000 /* SDP0 Data direction */
1508 #define E1000_CTRL_SDP1_DIR 0x00800000 /* SDP1 Data direction */
1509 #define E1000_CTRL_RST 0x04000000 /* Global reset */
1510 diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
1511 index ffaa6e031632..aa39a068858e 100644
1512 --- a/drivers/net/ethernet/intel/igb/igb_main.c
1513 +++ b/drivers/net/ethernet/intel/igb/igb_main.c
1514 @@ -8754,9 +8754,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
1515 struct e1000_hw *hw = &adapter->hw;
1516 u32 ctrl, rctl, status;
1517 u32 wufc = runtime ? E1000_WUFC_LNKC : adapter->wol;
1518 -#ifdef CONFIG_PM
1519 - int retval = 0;
1520 -#endif
1521 + bool wake;
1522
1523 rtnl_lock();
1524 netif_device_detach(netdev);
1525 @@ -8769,14 +8767,6 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
1526 igb_clear_interrupt_scheme(adapter);
1527 rtnl_unlock();
1528
1529 -#ifdef CONFIG_PM
1530 - if (!runtime) {
1531 - retval = pci_save_state(pdev);
1532 - if (retval)
1533 - return retval;
1534 - }
1535 -#endif
1536 -
1537 status = rd32(E1000_STATUS);
1538 if (status & E1000_STATUS_LU)
1539 wufc &= ~E1000_WUFC_LNKC;
1540 @@ -8793,10 +8783,6 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
1541 }
1542
1543 ctrl = rd32(E1000_CTRL);
1544 - /* advertise wake from D3Cold */
1545 - #define E1000_CTRL_ADVD3WUC 0x00100000
1546 - /* phy power management enable */
1547 - #define E1000_CTRL_EN_PHY_PWR_MGMT 0x00200000
1548 ctrl |= E1000_CTRL_ADVD3WUC;
1549 wr32(E1000_CTRL, ctrl);
1550
1551 @@ -8810,12 +8796,15 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,
1552 wr32(E1000_WUFC, 0);
1553 }
1554
1555 - *enable_wake = wufc || adapter->en_mng_pt;
1556 - if (!*enable_wake)
1557 + wake = wufc || adapter->en_mng_pt;
1558 + if (!wake)
1559 igb_power_down_link(adapter);
1560 else
1561 igb_power_up_link(adapter);
1562
1563 + if (enable_wake)
1564 + *enable_wake = wake;
1565 +
1566 /* Release control of h/w to f/w. If f/w is AMT enabled, this
1567 * would have already happened in close and is redundant.
1568 */
1569 @@ -8858,22 +8847,7 @@ static void igb_deliver_wake_packet(struct net_device *netdev)
1570
1571 static int __maybe_unused igb_suspend(struct device *dev)
1572 {
1573 - int retval;
1574 - bool wake;
1575 - struct pci_dev *pdev = to_pci_dev(dev);
1576 -
1577 - retval = __igb_shutdown(pdev, &wake, 0);
1578 - if (retval)
1579 - return retval;
1580 -
1581 - if (wake) {
1582 - pci_prepare_to_sleep(pdev);
1583 - } else {
1584 - pci_wake_from_d3(pdev, false);
1585 - pci_set_power_state(pdev, PCI_D3hot);
1586 - }
1587 -
1588 - return 0;
1589 + return __igb_shutdown(to_pci_dev(dev), NULL, 0);
1590 }
1591
1592 static int __maybe_unused igb_resume(struct device *dev)
1593 @@ -8944,22 +8918,7 @@ static int __maybe_unused igb_runtime_idle(struct device *dev)
1594
1595 static int __maybe_unused igb_runtime_suspend(struct device *dev)
1596 {
1597 - struct pci_dev *pdev = to_pci_dev(dev);
1598 - int retval;
1599 - bool wake;
1600 -
1601 - retval = __igb_shutdown(pdev, &wake, 1);
1602 - if (retval)
1603 - return retval;
1604 -
1605 - if (wake) {
1606 - pci_prepare_to_sleep(pdev);
1607 - } else {
1608 - pci_wake_from_d3(pdev, false);
1609 - pci_set_power_state(pdev, PCI_D3hot);
1610 - }
1611 -
1612 - return 0;
1613 + return __igb_shutdown(to_pci_dev(dev), NULL, 1);
1614 }
1615
1616 static int __maybe_unused igb_runtime_resume(struct device *dev)
1617 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
1618 index 26c9f9421901..55ccd90beeb0 100644
1619 --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
1620 +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
1621 @@ -80,8 +80,7 @@ static int arm_vport_context_events_cmd(struct mlx5_core_dev *dev, u16 vport,
1622 opcode, MLX5_CMD_OP_MODIFY_NIC_VPORT_CONTEXT);
1623 MLX5_SET(modify_nic_vport_context_in, in, field_select.change_event, 1);
1624 MLX5_SET(modify_nic_vport_context_in, in, vport_number, vport);
1625 - if (vport)
1626 - MLX5_SET(modify_nic_vport_context_in, in, other_vport, 1);
1627 + MLX5_SET(modify_nic_vport_context_in, in, other_vport, 1);
1628 nic_vport_ctx = MLX5_ADDR_OF(modify_nic_vport_context_in,
1629 in, nic_vport_context);
1630
1631 @@ -109,8 +108,7 @@ static int modify_esw_vport_context_cmd(struct mlx5_core_dev *dev, u16 vport,
1632 MLX5_SET(modify_esw_vport_context_in, in, opcode,
1633 MLX5_CMD_OP_MODIFY_ESW_VPORT_CONTEXT);
1634 MLX5_SET(modify_esw_vport_context_in, in, vport_number, vport);
1635 - if (vport)
1636 - MLX5_SET(modify_esw_vport_context_in, in, other_vport, 1);
1637 + MLX5_SET(modify_esw_vport_context_in, in, other_vport, 1);
1638 return mlx5_cmd_exec(dev, in, inlen, out, sizeof(out));
1639 }
1640
1641 diff --git a/drivers/net/ethernet/stmicro/stmmac/descs_com.h b/drivers/net/ethernet/stmicro/stmmac/descs_com.h
1642 index 40d6356a7e73..3dfb07a78952 100644
1643 --- a/drivers/net/ethernet/stmicro/stmmac/descs_com.h
1644 +++ b/drivers/net/ethernet/stmicro/stmmac/descs_com.h
1645 @@ -29,11 +29,13 @@
1646 /* Specific functions used for Ring mode */
1647
1648 /* Enhanced descriptors */
1649 -static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end)
1650 +static inline void ehn_desc_rx_set_on_ring(struct dma_desc *p, int end,
1651 + int bfsize)
1652 {
1653 - p->des1 |= cpu_to_le32((BUF_SIZE_8KiB
1654 - << ERDES1_BUFFER2_SIZE_SHIFT)
1655 - & ERDES1_BUFFER2_SIZE_MASK);
1656 + if (bfsize == BUF_SIZE_16KiB)
1657 + p->des1 |= cpu_to_le32((BUF_SIZE_8KiB
1658 + << ERDES1_BUFFER2_SIZE_SHIFT)
1659 + & ERDES1_BUFFER2_SIZE_MASK);
1660
1661 if (end)
1662 p->des1 |= cpu_to_le32(ERDES1_END_RING);
1663 @@ -59,11 +61,15 @@ static inline void enh_set_tx_desc_len_on_ring(struct dma_desc *p, int len)
1664 }
1665
1666 /* Normal descriptors */
1667 -static inline void ndesc_rx_set_on_ring(struct dma_desc *p, int end)
1668 +static inline void ndesc_rx_set_on_ring(struct dma_desc *p, int end, int bfsize)
1669 {
1670 - p->des1 |= cpu_to_le32(((BUF_SIZE_2KiB - 1)
1671 - << RDES1_BUFFER2_SIZE_SHIFT)
1672 - & RDES1_BUFFER2_SIZE_MASK);
1673 + if (bfsize >= BUF_SIZE_2KiB) {
1674 + int bfsize2;
1675 +
1676 + bfsize2 = min(bfsize - BUF_SIZE_2KiB + 1, BUF_SIZE_2KiB - 1);
1677 + p->des1 |= cpu_to_le32((bfsize2 << RDES1_BUFFER2_SIZE_SHIFT)
1678 + & RDES1_BUFFER2_SIZE_MASK);
1679 + }
1680
1681 if (end)
1682 p->des1 |= cpu_to_le32(RDES1_END_RING);
1683 diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
1684 index 736e29635b77..313a58b68fee 100644
1685 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
1686 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
1687 @@ -296,7 +296,7 @@ exit:
1688 }
1689
1690 static void dwmac4_rd_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
1691 - int mode, int end)
1692 + int mode, int end, int bfsize)
1693 {
1694 dwmac4_set_rx_owner(p, disable_rx_ic);
1695 }
1696 diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_descs.c b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_descs.c
1697 index 1d858fdec997..98fa471da7c0 100644
1698 --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_descs.c
1699 +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_descs.c
1700 @@ -123,7 +123,7 @@ static int dwxgmac2_get_rx_timestamp_status(void *desc, void *next_desc,
1701 }
1702
1703 static void dwxgmac2_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
1704 - int mode, int end)
1705 + int mode, int end, int bfsize)
1706 {
1707 dwxgmac2_set_rx_owner(p, disable_rx_ic);
1708 }
1709 diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
1710 index 5ef91a790f9d..5202d6ad7919 100644
1711 --- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
1712 +++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
1713 @@ -201,6 +201,11 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
1714 if (unlikely(rdes0 & RDES0_OWN))
1715 return dma_own;
1716
1717 + if (unlikely(!(rdes0 & RDES0_LAST_DESCRIPTOR))) {
1718 + stats->rx_length_errors++;
1719 + return discard_frame;
1720 + }
1721 +
1722 if (unlikely(rdes0 & RDES0_ERROR_SUMMARY)) {
1723 if (unlikely(rdes0 & RDES0_DESCRIPTOR_ERROR)) {
1724 x->rx_desc++;
1725 @@ -231,9 +236,10 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
1726 * It doesn't match with the information reported into the databook.
1727 * At any rate, we need to understand if the CSUM hw computation is ok
1728 * and report this info to the upper layers. */
1729 - ret = enh_desc_coe_rdes0(!!(rdes0 & RDES0_IPC_CSUM_ERROR),
1730 - !!(rdes0 & RDES0_FRAME_TYPE),
1731 - !!(rdes0 & ERDES0_RX_MAC_ADDR));
1732 + if (likely(ret == good_frame))
1733 + ret = enh_desc_coe_rdes0(!!(rdes0 & RDES0_IPC_CSUM_ERROR),
1734 + !!(rdes0 & RDES0_FRAME_TYPE),
1735 + !!(rdes0 & ERDES0_RX_MAC_ADDR));
1736
1737 if (unlikely(rdes0 & RDES0_DRIBBLING))
1738 x->dribbling_bit++;
1739 @@ -259,15 +265,19 @@ static int enh_desc_get_rx_status(void *data, struct stmmac_extra_stats *x,
1740 }
1741
1742 static void enh_desc_init_rx_desc(struct dma_desc *p, int disable_rx_ic,
1743 - int mode, int end)
1744 + int mode, int end, int bfsize)
1745 {
1746 + int bfsize1;
1747 +
1748 p->des0 |= cpu_to_le32(RDES0_OWN);
1749 - p->des1 |= cpu_to_le32(BUF_SIZE_8KiB & ERDES1_BUFFER1_SIZE_MASK);
1750 +
1751 + bfsize1 = min(bfsize, BUF_SIZE_8KiB);
1752 + p->des1 |= cpu_to_le32(bfsize1 & ERDES1_BUFFER1_SIZE_MASK);
1753
1754 if (mode == STMMAC_CHAIN_MODE)
1755 ehn_desc_rx_set_on_chain(p);
1756 else
1757 - ehn_desc_rx_set_on_ring(p, end);
1758 + ehn_desc_rx_set_on_ring(p, end, bfsize);
1759
1760 if (disable_rx_ic)
1761 p->des1 |= cpu_to_le32(ERDES1_DISABLE_IC);
1762 diff --git a/drivers/net/ethernet/stmicro/stmmac/hwif.h b/drivers/net/ethernet/stmicro/stmmac/hwif.h
1763 index 92b8944f26e3..5bb00234d961 100644
1764 --- a/drivers/net/ethernet/stmicro/stmmac/hwif.h
1765 +++ b/drivers/net/ethernet/stmicro/stmmac/hwif.h
1766 @@ -33,7 +33,7 @@ struct dma_extended_desc;
1767 struct stmmac_desc_ops {
1768 /* DMA RX descriptor ring initialization */
1769 void (*init_rx_desc)(struct dma_desc *p, int disable_rx_ic, int mode,
1770 - int end);
1771 + int end, int bfsize);
1772 /* DMA TX descriptor ring initialization */
1773 void (*init_tx_desc)(struct dma_desc *p, int mode, int end);
1774 /* Invoked by the xmit function to prepare the tx descriptor */
1775 diff --git a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
1776 index de65bb29feba..b7dd4e3c760d 100644
1777 --- a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
1778 +++ b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
1779 @@ -91,8 +91,6 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x,
1780 return dma_own;
1781
1782 if (unlikely(!(rdes0 & RDES0_LAST_DESCRIPTOR))) {
1783 - pr_warn("%s: Oversized frame spanned multiple buffers\n",
1784 - __func__);
1785 stats->rx_length_errors++;
1786 return discard_frame;
1787 }
1788 @@ -135,15 +133,19 @@ static int ndesc_get_rx_status(void *data, struct stmmac_extra_stats *x,
1789 }
1790
1791 static void ndesc_init_rx_desc(struct dma_desc *p, int disable_rx_ic, int mode,
1792 - int end)
1793 + int end, int bfsize)
1794 {
1795 + int bfsize1;
1796 +
1797 p->des0 |= cpu_to_le32(RDES0_OWN);
1798 - p->des1 |= cpu_to_le32((BUF_SIZE_2KiB - 1) & RDES1_BUFFER1_SIZE_MASK);
1799 +
1800 + bfsize1 = min(bfsize, BUF_SIZE_2KiB - 1);
1801 + p->des1 |= cpu_to_le32(bfsize & RDES1_BUFFER1_SIZE_MASK);
1802
1803 if (mode == STMMAC_CHAIN_MODE)
1804 ndesc_rx_set_on_chain(p, end);
1805 else
1806 - ndesc_rx_set_on_ring(p, end);
1807 + ndesc_rx_set_on_ring(p, end, bfsize);
1808
1809 if (disable_rx_ic)
1810 p->des1 |= cpu_to_le32(RDES1_DISABLE_IC);
1811 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1812 index 39c105092214..5debe93ea4eb 100644
1813 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1814 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1815 @@ -1111,11 +1111,13 @@ static void stmmac_clear_rx_descriptors(struct stmmac_priv *priv, u32 queue)
1816 if (priv->extend_desc)
1817 stmmac_init_rx_desc(priv, &rx_q->dma_erx[i].basic,
1818 priv->use_riwt, priv->mode,
1819 - (i == DMA_RX_SIZE - 1));
1820 + (i == DMA_RX_SIZE - 1),
1821 + priv->dma_buf_sz);
1822 else
1823 stmmac_init_rx_desc(priv, &rx_q->dma_rx[i],
1824 priv->use_riwt, priv->mode,
1825 - (i == DMA_RX_SIZE - 1));
1826 + (i == DMA_RX_SIZE - 1),
1827 + priv->dma_buf_sz);
1828 }
1829
1830 /**
1831 @@ -3331,9 +3333,8 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
1832 {
1833 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1834 struct stmmac_channel *ch = &priv->channel[queue];
1835 - unsigned int entry = rx_q->cur_rx;
1836 + unsigned int next_entry = rx_q->cur_rx;
1837 int coe = priv->hw->rx_csum;
1838 - unsigned int next_entry;
1839 unsigned int count = 0;
1840 bool xmac;
1841
1842 @@ -3351,10 +3352,12 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
1843 stmmac_display_ring(priv, rx_head, DMA_RX_SIZE, true);
1844 }
1845 while (count < limit) {
1846 - int status;
1847 + int entry, status;
1848 struct dma_desc *p;
1849 struct dma_desc *np;
1850
1851 + entry = next_entry;
1852 +
1853 if (priv->extend_desc)
1854 p = (struct dma_desc *)(rx_q->dma_erx + entry);
1855 else
1856 @@ -3410,11 +3413,12 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
1857 * ignored
1858 */
1859 if (frame_len > priv->dma_buf_sz) {
1860 - netdev_err(priv->dev,
1861 - "len %d larger than size (%d)\n",
1862 - frame_len, priv->dma_buf_sz);
1863 + if (net_ratelimit())
1864 + netdev_err(priv->dev,
1865 + "len %d larger than size (%d)\n",
1866 + frame_len, priv->dma_buf_sz);
1867 priv->dev->stats.rx_length_errors++;
1868 - break;
1869 + continue;
1870 }
1871
1872 /* ACS is set; GMAC core strips PAD/FCS for IEEE 802.3
1873 @@ -3449,7 +3453,7 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
1874 dev_warn(priv->device,
1875 "packet dropped\n");
1876 priv->dev->stats.rx_dropped++;
1877 - break;
1878 + continue;
1879 }
1880
1881 dma_sync_single_for_cpu(priv->device,
1882 @@ -3469,11 +3473,12 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
1883 } else {
1884 skb = rx_q->rx_skbuff[entry];
1885 if (unlikely(!skb)) {
1886 - netdev_err(priv->dev,
1887 - "%s: Inconsistent Rx chain\n",
1888 - priv->dev->name);
1889 + if (net_ratelimit())
1890 + netdev_err(priv->dev,
1891 + "%s: Inconsistent Rx chain\n",
1892 + priv->dev->name);
1893 priv->dev->stats.rx_dropped++;
1894 - break;
1895 + continue;
1896 }
1897 prefetch(skb->data - NET_IP_ALIGN);
1898 rx_q->rx_skbuff[entry] = NULL;
1899 @@ -3508,7 +3513,6 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
1900 priv->dev->stats.rx_packets++;
1901 priv->dev->stats.rx_bytes += frame_len;
1902 }
1903 - entry = next_entry;
1904 }
1905
1906 stmmac_rx_refill(priv, queue);
1907 diff --git a/drivers/net/wireless/intel/iwlwifi/cfg/5000.c b/drivers/net/wireless/intel/iwlwifi/cfg/5000.c
1908 index 36151e61a26f..c04d934b23b4 100644
1909 --- a/drivers/net/wireless/intel/iwlwifi/cfg/5000.c
1910 +++ b/drivers/net/wireless/intel/iwlwifi/cfg/5000.c
1911 @@ -1,7 +1,7 @@
1912 /******************************************************************************
1913 *
1914 * Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved.
1915 - * Copyright(c) 2018 Intel Corporation
1916 + * Copyright(c) 2018 - 2019 Intel Corporation
1917 *
1918 * This program is free software; you can redistribute it and/or modify it
1919 * under the terms of version 2 of the GNU General Public License as
1920 @@ -140,6 +140,7 @@ const struct iwl_cfg iwl5350_agn_cfg = {
1921 .ht_params = &iwl5000_ht_params,
1922 .led_mode = IWL_LED_BLINK,
1923 .internal_wimax_coex = true,
1924 + .csr = &iwl_csr_v1,
1925 };
1926
1927 #define IWL_DEVICE_5150 \
1928 diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.c b/drivers/net/wireless/marvell/mwifiex/sdio.c
1929 index d49fbd58afa7..bfbe3aa058d9 100644
1930 --- a/drivers/net/wireless/marvell/mwifiex/sdio.c
1931 +++ b/drivers/net/wireless/marvell/mwifiex/sdio.c
1932 @@ -181,7 +181,7 @@ static int mwifiex_sdio_resume(struct device *dev)
1933
1934 adapter = card->adapter;
1935
1936 - if (test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
1937 + if (!test_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags)) {
1938 mwifiex_dbg(adapter, WARN,
1939 "device already resumed\n");
1940 return 0;
1941 diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
1942 index b5ec96abd048..776b7e9e23b9 100644
1943 --- a/drivers/nvme/target/core.c
1944 +++ b/drivers/nvme/target/core.c
1945 @@ -921,6 +921,15 @@ bool nvmet_host_allowed(struct nvmet_req *req, struct nvmet_subsys *subsys,
1946 return __nvmet_host_allowed(subsys, hostnqn);
1947 }
1948
1949 +static void nvmet_fatal_error_handler(struct work_struct *work)
1950 +{
1951 + struct nvmet_ctrl *ctrl =
1952 + container_of(work, struct nvmet_ctrl, fatal_err_work);
1953 +
1954 + pr_err("ctrl %d fatal error occurred!\n", ctrl->cntlid);
1955 + ctrl->ops->delete_ctrl(ctrl);
1956 +}
1957 +
1958 u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn,
1959 struct nvmet_req *req, u32 kato, struct nvmet_ctrl **ctrlp)
1960 {
1961 @@ -962,6 +971,7 @@ u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn,
1962
1963 INIT_WORK(&ctrl->async_event_work, nvmet_async_event_work);
1964 INIT_LIST_HEAD(&ctrl->async_events);
1965 + INIT_WORK(&ctrl->fatal_err_work, nvmet_fatal_error_handler);
1966
1967 memcpy(ctrl->subsysnqn, subsysnqn, NVMF_NQN_SIZE);
1968 memcpy(ctrl->hostnqn, hostnqn, NVMF_NQN_SIZE);
1969 @@ -1076,21 +1086,11 @@ void nvmet_ctrl_put(struct nvmet_ctrl *ctrl)
1970 kref_put(&ctrl->ref, nvmet_ctrl_free);
1971 }
1972
1973 -static void nvmet_fatal_error_handler(struct work_struct *work)
1974 -{
1975 - struct nvmet_ctrl *ctrl =
1976 - container_of(work, struct nvmet_ctrl, fatal_err_work);
1977 -
1978 - pr_err("ctrl %d fatal error occurred!\n", ctrl->cntlid);
1979 - ctrl->ops->delete_ctrl(ctrl);
1980 -}
1981 -
1982 void nvmet_ctrl_fatal_error(struct nvmet_ctrl *ctrl)
1983 {
1984 mutex_lock(&ctrl->lock);
1985 if (!(ctrl->csts & NVME_CSTS_CFS)) {
1986 ctrl->csts |= NVME_CSTS_CFS;
1987 - INIT_WORK(&ctrl->fatal_err_work, nvmet_fatal_error_handler);
1988 schedule_work(&ctrl->fatal_err_work);
1989 }
1990 mutex_unlock(&ctrl->lock);
1991 diff --git a/drivers/platform/x86/intel_pmc_core.c b/drivers/platform/x86/intel_pmc_core.c
1992 index e0dcdb3cc070..088d1c2047e6 100644
1993 --- a/drivers/platform/x86/intel_pmc_core.c
1994 +++ b/drivers/platform/x86/intel_pmc_core.c
1995 @@ -185,7 +185,7 @@ static const struct pmc_bit_map cnp_pfear_map[] = {
1996 {"CNVI", BIT(3)},
1997 {"UFS0", BIT(4)},
1998 {"EMMC", BIT(5)},
1999 - {"Res_6", BIT(6)},
2000 + {"SPF", BIT(6)},
2001 {"SBR6", BIT(7)},
2002
2003 {"SBR7", BIT(0)},
2004 @@ -682,7 +682,7 @@ static int __init pmc_core_probe(void)
2005 * Sunrisepoint PCH regmap can't be used. Use Cannonlake PCH regmap
2006 * in this case.
2007 */
2008 - if (!pci_dev_present(pmc_pci_ids))
2009 + if (pmcdev->map == &spt_reg_map && !pci_dev_present(pmc_pci_ids))
2010 pmcdev->map = &cnp_reg_map;
2011
2012 if (lpit_read_residency_count_address(&slp_s0_addr))
2013 diff --git a/drivers/platform/x86/pmc_atom.c b/drivers/platform/x86/pmc_atom.c
2014 index 8f018b3f3cd4..eaec2d306481 100644
2015 --- a/drivers/platform/x86/pmc_atom.c
2016 +++ b/drivers/platform/x86/pmc_atom.c
2017 @@ -17,6 +17,7 @@
2018
2019 #include <linux/debugfs.h>
2020 #include <linux/device.h>
2021 +#include <linux/dmi.h>
2022 #include <linux/init.h>
2023 #include <linux/io.h>
2024 #include <linux/platform_data/x86/clk-pmc-atom.h>
2025 @@ -391,11 +392,27 @@ static int pmc_dbgfs_register(struct pmc_dev *pmc)
2026 }
2027 #endif /* CONFIG_DEBUG_FS */
2028
2029 +/*
2030 + * Some systems need one or more of their pmc_plt_clks to be
2031 + * marked as critical.
2032 + */
2033 +static const struct dmi_system_id critclk_systems[] __initconst = {
2034 + {
2035 + .ident = "MPL CEC1x",
2036 + .matches = {
2037 + DMI_MATCH(DMI_SYS_VENDOR, "MPL AG"),
2038 + DMI_MATCH(DMI_PRODUCT_NAME, "CEC10 Family"),
2039 + },
2040 + },
2041 + { /*sentinel*/ }
2042 +};
2043 +
2044 static int pmc_setup_clks(struct pci_dev *pdev, void __iomem *pmc_regmap,
2045 const struct pmc_data *pmc_data)
2046 {
2047 struct platform_device *clkdev;
2048 struct pmc_clk_data *clk_data;
2049 + const struct dmi_system_id *d = dmi_first_match(critclk_systems);
2050
2051 clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
2052 if (!clk_data)
2053 @@ -403,6 +420,10 @@ static int pmc_setup_clks(struct pci_dev *pdev, void __iomem *pmc_regmap,
2054
2055 clk_data->base = pmc_regmap; /* offset is added by client */
2056 clk_data->clks = pmc_data->clks;
2057 + if (d) {
2058 + clk_data->critical = true;
2059 + pr_info("%s critclks quirk enabled\n", d->ident);
2060 + }
2061
2062 clkdev = platform_device_register_data(&pdev->dev, "clk-pmc-atom",
2063 PLATFORM_DEVID_NONE,
2064 diff --git a/drivers/reset/reset-meson-audio-arb.c b/drivers/reset/reset-meson-audio-arb.c
2065 index 91751617b37a..c53a2185a039 100644
2066 --- a/drivers/reset/reset-meson-audio-arb.c
2067 +++ b/drivers/reset/reset-meson-audio-arb.c
2068 @@ -130,6 +130,7 @@ static int meson_audio_arb_probe(struct platform_device *pdev)
2069 arb->rstc.nr_resets = ARRAY_SIZE(axg_audio_arb_reset_bits);
2070 arb->rstc.ops = &meson_audio_arb_rstc_ops;
2071 arb->rstc.of_node = dev->of_node;
2072 + arb->rstc.owner = THIS_MODULE;
2073
2074 /*
2075 * Enable general :
2076 diff --git a/drivers/rtc/rtc-cros-ec.c b/drivers/rtc/rtc-cros-ec.c
2077 index e5444296075e..4d6bf9304ceb 100644
2078 --- a/drivers/rtc/rtc-cros-ec.c
2079 +++ b/drivers/rtc/rtc-cros-ec.c
2080 @@ -298,7 +298,7 @@ static int cros_ec_rtc_suspend(struct device *dev)
2081 struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(&pdev->dev);
2082
2083 if (device_may_wakeup(dev))
2084 - enable_irq_wake(cros_ec_rtc->cros_ec->irq);
2085 + return enable_irq_wake(cros_ec_rtc->cros_ec->irq);
2086
2087 return 0;
2088 }
2089 @@ -309,7 +309,7 @@ static int cros_ec_rtc_resume(struct device *dev)
2090 struct cros_ec_rtc *cros_ec_rtc = dev_get_drvdata(&pdev->dev);
2091
2092 if (device_may_wakeup(dev))
2093 - disable_irq_wake(cros_ec_rtc->cros_ec->irq);
2094 + return disable_irq_wake(cros_ec_rtc->cros_ec->irq);
2095
2096 return 0;
2097 }
2098 diff --git a/drivers/rtc/rtc-da9063.c b/drivers/rtc/rtc-da9063.c
2099 index b4e054c64bad..69b54e5556c0 100644
2100 --- a/drivers/rtc/rtc-da9063.c
2101 +++ b/drivers/rtc/rtc-da9063.c
2102 @@ -480,6 +480,13 @@ static int da9063_rtc_probe(struct platform_device *pdev)
2103 da9063_data_to_tm(data, &rtc->alarm_time, rtc);
2104 rtc->rtc_sync = false;
2105
2106 + /*
2107 + * TODO: some models have alarms on a minute boundary but still support
2108 + * real hardware interrupts. Add this once the core supports it.
2109 + */
2110 + if (config->rtc_data_start != RTC_SEC)
2111 + rtc->rtc_dev->uie_unsupported = 1;
2112 +
2113 irq_alarm = platform_get_irq_byname(pdev, "ALARM");
2114 ret = devm_request_threaded_irq(&pdev->dev, irq_alarm, NULL,
2115 da9063_alarm_event,
2116 diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c
2117 index 51ba414798a8..3d7414e5ed35 100644
2118 --- a/drivers/rtc/rtc-sh.c
2119 +++ b/drivers/rtc/rtc-sh.c
2120 @@ -377,7 +377,7 @@ static int sh_rtc_set_time(struct device *dev, struct rtc_time *tm)
2121 static inline int sh_rtc_read_alarm_value(struct sh_rtc *rtc, int reg_off)
2122 {
2123 unsigned int byte;
2124 - int value = 0xff; /* return 0xff for ignored values */
2125 + int value = -1; /* return -1 for ignored values */
2126
2127 byte = readb(rtc->regbase + reg_off);
2128 if (byte & AR_ENB) {
2129 diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c
2130 index c4cbfd07b916..a08ff3bd6310 100644
2131 --- a/drivers/scsi/scsi_devinfo.c
2132 +++ b/drivers/scsi/scsi_devinfo.c
2133 @@ -238,6 +238,7 @@ static struct {
2134 {"NETAPP", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
2135 {"LSI", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
2136 {"ENGENIO", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
2137 + {"LENOVO", "Universal Xport", "*", BLIST_NO_ULD_ATTACH},
2138 {"SMSC", "USB 2 HS-CF", NULL, BLIST_SPARSELUN | BLIST_INQUIRY_36},
2139 {"SONY", "CD-ROM CDU-8001", NULL, BLIST_BORKEN},
2140 {"SONY", "TSL", NULL, BLIST_FORCELUN}, /* DDS3 & DDS4 autoloaders */
2141 diff --git a/drivers/scsi/scsi_dh.c b/drivers/scsi/scsi_dh.c
2142 index 5a58cbf3a75d..c14006ac98f9 100644
2143 --- a/drivers/scsi/scsi_dh.c
2144 +++ b/drivers/scsi/scsi_dh.c
2145 @@ -75,6 +75,7 @@ static const struct scsi_dh_blist scsi_dh_blist[] = {
2146 {"NETAPP", "INF-01-00", "rdac", },
2147 {"LSI", "INF-01-00", "rdac", },
2148 {"ENGENIO", "INF-01-00", "rdac", },
2149 + {"LENOVO", "DE_Series", "rdac", },
2150 {NULL, NULL, NULL },
2151 };
2152
2153 diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
2154 index f03dc03a42c3..0c2ba075bc71 100644
2155 --- a/drivers/scsi/storvsc_drv.c
2156 +++ b/drivers/scsi/storvsc_drv.c
2157 @@ -664,13 +664,22 @@ static void handle_sc_creation(struct vmbus_channel *new_sc)
2158 static void handle_multichannel_storage(struct hv_device *device, int max_chns)
2159 {
2160 struct storvsc_device *stor_device;
2161 - int num_cpus = num_online_cpus();
2162 int num_sc;
2163 struct storvsc_cmd_request *request;
2164 struct vstor_packet *vstor_packet;
2165 int ret, t;
2166
2167 - num_sc = ((max_chns > num_cpus) ? num_cpus : max_chns);
2168 + /*
2169 + * If the number of CPUs is artificially restricted, such as
2170 + * with maxcpus=1 on the kernel boot line, Hyper-V could offer
2171 + * sub-channels >= the number of CPUs. These sub-channels
2172 + * should not be created. The primary channel is already created
2173 + * and assigned to one CPU, so check against # CPUs - 1.
2174 + */
2175 + num_sc = min((int)(num_online_cpus() - 1), max_chns);
2176 + if (!num_sc)
2177 + return;
2178 +
2179 stor_device = get_out_stor_device(device);
2180 if (!stor_device)
2181 return;
2182 diff --git a/drivers/staging/iio/addac/adt7316.c b/drivers/staging/iio/addac/adt7316.c
2183 index 3f22d1088713..68866f552290 100644
2184 --- a/drivers/staging/iio/addac/adt7316.c
2185 +++ b/drivers/staging/iio/addac/adt7316.c
2186 @@ -47,6 +47,8 @@
2187 #define ADT7516_MSB_AIN3 0xA
2188 #define ADT7516_MSB_AIN4 0xB
2189 #define ADT7316_DA_DATA_BASE 0x10
2190 +#define ADT7316_DA_10_BIT_LSB_SHIFT 6
2191 +#define ADT7316_DA_12_BIT_LSB_SHIFT 4
2192 #define ADT7316_DA_MSB_DATA_REGS 4
2193 #define ADT7316_LSB_DAC_A 0x10
2194 #define ADT7316_MSB_DAC_A 0x11
2195 @@ -1086,7 +1088,7 @@ static ssize_t adt7316_store_DAC_internal_Vref(struct device *dev,
2196 ldac_config = chip->ldac_config & (~ADT7516_DAC_IN_VREF_MASK);
2197 if (data & 0x1)
2198 ldac_config |= ADT7516_DAC_AB_IN_VREF;
2199 - else if (data & 0x2)
2200 + if (data & 0x2)
2201 ldac_config |= ADT7516_DAC_CD_IN_VREF;
2202 } else {
2203 ret = kstrtou8(buf, 16, &data);
2204 @@ -1408,7 +1410,7 @@ static IIO_DEVICE_ATTR(ex_analog_temp_offset, 0644,
2205 static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
2206 int channel, char *buf)
2207 {
2208 - u16 data;
2209 + u16 data = 0;
2210 u8 msb, lsb, offset;
2211 int ret;
2212
2213 @@ -1433,7 +1435,11 @@ static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
2214 if (ret)
2215 return -EIO;
2216
2217 - data = (msb << offset) + (lsb & ((1 << offset) - 1));
2218 + if (chip->dac_bits == 12)
2219 + data = lsb >> ADT7316_DA_12_BIT_LSB_SHIFT;
2220 + else if (chip->dac_bits == 10)
2221 + data = lsb >> ADT7316_DA_10_BIT_LSB_SHIFT;
2222 + data |= msb << offset;
2223
2224 return sprintf(buf, "%d\n", data);
2225 }
2226 @@ -1441,7 +1447,7 @@ static ssize_t adt7316_show_DAC(struct adt7316_chip_info *chip,
2227 static ssize_t adt7316_store_DAC(struct adt7316_chip_info *chip,
2228 int channel, const char *buf, size_t len)
2229 {
2230 - u8 msb, lsb, offset;
2231 + u8 msb, lsb, lsb_reg, offset;
2232 u16 data;
2233 int ret;
2234
2235 @@ -1459,9 +1465,13 @@ static ssize_t adt7316_store_DAC(struct adt7316_chip_info *chip,
2236 return -EINVAL;
2237
2238 if (chip->dac_bits > 8) {
2239 - lsb = data & (1 << offset);
2240 + lsb = data & ((1 << offset) - 1);
2241 + if (chip->dac_bits == 12)
2242 + lsb_reg = lsb << ADT7316_DA_12_BIT_LSB_SHIFT;
2243 + else
2244 + lsb_reg = lsb << ADT7316_DA_10_BIT_LSB_SHIFT;
2245 ret = chip->bus.write(chip->bus.client,
2246 - ADT7316_DA_DATA_BASE + channel * 2, lsb);
2247 + ADT7316_DA_DATA_BASE + channel * 2, lsb_reg);
2248 if (ret)
2249 return -EIO;
2250 }
2251 diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
2252 index ef47c226e1d2..3255b2bb0fd5 100644
2253 --- a/drivers/usb/core/driver.c
2254 +++ b/drivers/usb/core/driver.c
2255 @@ -473,11 +473,6 @@ static int usb_unbind_interface(struct device *dev)
2256 pm_runtime_disable(dev);
2257 pm_runtime_set_suspended(dev);
2258
2259 - /* Undo any residual pm_autopm_get_interface_* calls */
2260 - for (r = atomic_read(&intf->pm_usage_cnt); r > 0; --r)
2261 - usb_autopm_put_interface_no_suspend(intf);
2262 - atomic_set(&intf->pm_usage_cnt, 0);
2263 -
2264 if (!error)
2265 usb_autosuspend_device(udev);
2266
2267 @@ -1636,7 +1631,6 @@ void usb_autopm_put_interface(struct usb_interface *intf)
2268 int status;
2269
2270 usb_mark_last_busy(udev);
2271 - atomic_dec(&intf->pm_usage_cnt);
2272 status = pm_runtime_put_sync(&intf->dev);
2273 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
2274 __func__, atomic_read(&intf->dev.power.usage_count),
2275 @@ -1665,7 +1659,6 @@ void usb_autopm_put_interface_async(struct usb_interface *intf)
2276 int status;
2277
2278 usb_mark_last_busy(udev);
2279 - atomic_dec(&intf->pm_usage_cnt);
2280 status = pm_runtime_put(&intf->dev);
2281 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
2282 __func__, atomic_read(&intf->dev.power.usage_count),
2283 @@ -1687,7 +1680,6 @@ void usb_autopm_put_interface_no_suspend(struct usb_interface *intf)
2284 struct usb_device *udev = interface_to_usbdev(intf);
2285
2286 usb_mark_last_busy(udev);
2287 - atomic_dec(&intf->pm_usage_cnt);
2288 pm_runtime_put_noidle(&intf->dev);
2289 }
2290 EXPORT_SYMBOL_GPL(usb_autopm_put_interface_no_suspend);
2291 @@ -1718,8 +1710,6 @@ int usb_autopm_get_interface(struct usb_interface *intf)
2292 status = pm_runtime_get_sync(&intf->dev);
2293 if (status < 0)
2294 pm_runtime_put_sync(&intf->dev);
2295 - else
2296 - atomic_inc(&intf->pm_usage_cnt);
2297 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
2298 __func__, atomic_read(&intf->dev.power.usage_count),
2299 status);
2300 @@ -1753,8 +1743,6 @@ int usb_autopm_get_interface_async(struct usb_interface *intf)
2301 status = pm_runtime_get(&intf->dev);
2302 if (status < 0 && status != -EINPROGRESS)
2303 pm_runtime_put_noidle(&intf->dev);
2304 - else
2305 - atomic_inc(&intf->pm_usage_cnt);
2306 dev_vdbg(&intf->dev, "%s: cnt %d -> %d\n",
2307 __func__, atomic_read(&intf->dev.power.usage_count),
2308 status);
2309 @@ -1778,7 +1766,6 @@ void usb_autopm_get_interface_no_resume(struct usb_interface *intf)
2310 struct usb_device *udev = interface_to_usbdev(intf);
2311
2312 usb_mark_last_busy(udev);
2313 - atomic_inc(&intf->pm_usage_cnt);
2314 pm_runtime_get_noresume(&intf->dev);
2315 }
2316 EXPORT_SYMBOL_GPL(usb_autopm_get_interface_no_resume);
2317 diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
2318 index 4f33eb632a88..4020ce8db6ce 100644
2319 --- a/drivers/usb/core/message.c
2320 +++ b/drivers/usb/core/message.c
2321 @@ -820,9 +820,11 @@ int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
2322
2323 if (dev->state == USB_STATE_SUSPENDED)
2324 return -EHOSTUNREACH;
2325 - if (size <= 0 || !buf || !index)
2326 + if (size <= 0 || !buf)
2327 return -EINVAL;
2328 buf[0] = 0;
2329 + if (index <= 0 || index >= 256)
2330 + return -EINVAL;
2331 tbuf = kmalloc(256, GFP_NOIO);
2332 if (!tbuf)
2333 return -ENOMEM;
2334 diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
2335 index baf72f95f0f1..213b52508621 100644
2336 --- a/drivers/usb/gadget/udc/dummy_hcd.c
2337 +++ b/drivers/usb/gadget/udc/dummy_hcd.c
2338 @@ -979,8 +979,18 @@ static int dummy_udc_start(struct usb_gadget *g,
2339 struct dummy_hcd *dum_hcd = gadget_to_dummy_hcd(g);
2340 struct dummy *dum = dum_hcd->dum;
2341
2342 - if (driver->max_speed == USB_SPEED_UNKNOWN)
2343 + switch (g->speed) {
2344 + /* All the speeds we support */
2345 + case USB_SPEED_LOW:
2346 + case USB_SPEED_FULL:
2347 + case USB_SPEED_HIGH:
2348 + case USB_SPEED_SUPER:
2349 + break;
2350 + default:
2351 + dev_err(dummy_dev(dum_hcd), "Unsupported driver max speed %d\n",
2352 + driver->max_speed);
2353 return -EINVAL;
2354 + }
2355
2356 /*
2357 * SLAVE side init ... the layer above hardware, which
2358 @@ -1784,9 +1794,10 @@ static void dummy_timer(struct timer_list *t)
2359 /* Bus speed is 500000 bytes/ms, so use a little less */
2360 total = 490000;
2361 break;
2362 - default:
2363 + default: /* Can't happen */
2364 dev_err(dummy_dev(dum_hcd), "bogus device speed\n");
2365 - return;
2366 + total = 0;
2367 + break;
2368 }
2369
2370 /* FIXME if HZ != 1000 this will probably misbehave ... */
2371 @@ -1828,7 +1839,7 @@ restart:
2372
2373 /* Used up this frame's bandwidth? */
2374 if (total <= 0)
2375 - break;
2376 + continue;
2377
2378 /* find the gadget's ep for this request (if configured) */
2379 address = usb_pipeendpoint (urb->pipe);
2380 diff --git a/drivers/usb/misc/yurex.c b/drivers/usb/misc/yurex.c
2381 index 6d9fd5f64903..7b306aa22d25 100644
2382 --- a/drivers/usb/misc/yurex.c
2383 +++ b/drivers/usb/misc/yurex.c
2384 @@ -314,6 +314,7 @@ static void yurex_disconnect(struct usb_interface *interface)
2385 usb_deregister_dev(interface, &yurex_class);
2386
2387 /* prevent more I/O from starting */
2388 + usb_poison_urb(dev->urb);
2389 mutex_lock(&dev->io_mutex);
2390 dev->interface = NULL;
2391 mutex_unlock(&dev->io_mutex);
2392 diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
2393 index 31b024441938..cc794e25a0b6 100644
2394 --- a/drivers/usb/storage/realtek_cr.c
2395 +++ b/drivers/usb/storage/realtek_cr.c
2396 @@ -763,18 +763,16 @@ static void rts51x_suspend_timer_fn(struct timer_list *t)
2397 break;
2398 case RTS51X_STAT_IDLE:
2399 case RTS51X_STAT_SS:
2400 - usb_stor_dbg(us, "RTS51X_STAT_SS, intf->pm_usage_cnt:%d, power.usage:%d\n",
2401 - atomic_read(&us->pusb_intf->pm_usage_cnt),
2402 + usb_stor_dbg(us, "RTS51X_STAT_SS, power.usage:%d\n",
2403 atomic_read(&us->pusb_intf->dev.power.usage_count));
2404
2405 - if (atomic_read(&us->pusb_intf->pm_usage_cnt) > 0) {
2406 + if (atomic_read(&us->pusb_intf->dev.power.usage_count) > 0) {
2407 usb_stor_dbg(us, "Ready to enter SS state\n");
2408 rts51x_set_stat(chip, RTS51X_STAT_SS);
2409 /* ignore mass storage interface's children */
2410 pm_suspend_ignore_children(&us->pusb_intf->dev, true);
2411 usb_autopm_put_interface_async(us->pusb_intf);
2412 - usb_stor_dbg(us, "RTS51X_STAT_SS 01, intf->pm_usage_cnt:%d, power.usage:%d\n",
2413 - atomic_read(&us->pusb_intf->pm_usage_cnt),
2414 + usb_stor_dbg(us, "RTS51X_STAT_SS 01, power.usage:%d\n",
2415 atomic_read(&us->pusb_intf->dev.power.usage_count));
2416 }
2417 break;
2418 @@ -807,11 +805,10 @@ static void rts51x_invoke_transport(struct scsi_cmnd *srb, struct us_data *us)
2419 int ret;
2420
2421 if (working_scsi(srb)) {
2422 - usb_stor_dbg(us, "working scsi, intf->pm_usage_cnt:%d, power.usage:%d\n",
2423 - atomic_read(&us->pusb_intf->pm_usage_cnt),
2424 + usb_stor_dbg(us, "working scsi, power.usage:%d\n",
2425 atomic_read(&us->pusb_intf->dev.power.usage_count));
2426
2427 - if (atomic_read(&us->pusb_intf->pm_usage_cnt) <= 0) {
2428 + if (atomic_read(&us->pusb_intf->dev.power.usage_count) <= 0) {
2429 ret = usb_autopm_get_interface(us->pusb_intf);
2430 usb_stor_dbg(us, "working scsi, ret=%d\n", ret);
2431 }
2432 diff --git a/drivers/usb/usbip/stub_rx.c b/drivers/usb/usbip/stub_rx.c
2433 index 97b09a42a10c..dbfb2f24d71e 100644
2434 --- a/drivers/usb/usbip/stub_rx.c
2435 +++ b/drivers/usb/usbip/stub_rx.c
2436 @@ -361,16 +361,10 @@ static int get_pipe(struct stub_device *sdev, struct usbip_header *pdu)
2437 }
2438
2439 if (usb_endpoint_xfer_isoc(epd)) {
2440 - /* validate packet size and number of packets */
2441 - unsigned int maxp, packets, bytes;
2442 -
2443 - maxp = usb_endpoint_maxp(epd);
2444 - maxp *= usb_endpoint_maxp_mult(epd);
2445 - bytes = pdu->u.cmd_submit.transfer_buffer_length;
2446 - packets = DIV_ROUND_UP(bytes, maxp);
2447 -
2448 + /* validate number of packets */
2449 if (pdu->u.cmd_submit.number_of_packets < 0 ||
2450 - pdu->u.cmd_submit.number_of_packets > packets) {
2451 + pdu->u.cmd_submit.number_of_packets >
2452 + USBIP_MAX_ISO_PACKETS) {
2453 dev_err(&sdev->udev->dev,
2454 "CMD_SUBMIT: isoc invalid num packets %d\n",
2455 pdu->u.cmd_submit.number_of_packets);
2456 diff --git a/drivers/usb/usbip/usbip_common.h b/drivers/usb/usbip/usbip_common.h
2457 index bf8afe9b5883..8be857a4fa13 100644
2458 --- a/drivers/usb/usbip/usbip_common.h
2459 +++ b/drivers/usb/usbip/usbip_common.h
2460 @@ -121,6 +121,13 @@ extern struct device_attribute dev_attr_usbip_debug;
2461 #define USBIP_DIR_OUT 0x00
2462 #define USBIP_DIR_IN 0x01
2463
2464 +/*
2465 + * Arbitrary limit for the maximum number of isochronous packets in an URB,
2466 + * compare for example the uhci_submit_isochronous function in
2467 + * drivers/usb/host/uhci-q.c
2468 + */
2469 +#define USBIP_MAX_ISO_PACKETS 1024
2470 +
2471 /**
2472 * struct usbip_header_basic - data pertinent to every request
2473 * @command: the usbip request type
2474 diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c
2475 index cddb453a1ba5..6cf00d9f512b 100644
2476 --- a/drivers/vfio/pci/vfio_pci.c
2477 +++ b/drivers/vfio/pci/vfio_pci.c
2478 @@ -1443,11 +1443,11 @@ static void __init vfio_pci_fill_ids(void)
2479 rc = pci_add_dynid(&vfio_pci_driver, vendor, device,
2480 subvendor, subdevice, class, class_mask, 0);
2481 if (rc)
2482 - pr_warn("failed to add dynamic id [%04hx:%04hx[%04hx:%04hx]] class %#08x/%08x (%d)\n",
2483 + pr_warn("failed to add dynamic id [%04x:%04x[%04x:%04x]] class %#08x/%08x (%d)\n",
2484 vendor, device, subvendor, subdevice,
2485 class, class_mask, rc);
2486 else
2487 - pr_info("add [%04hx:%04hx[%04hx:%04hx]] class %#08x/%08x\n",
2488 + pr_info("add [%04x:%04x[%04x:%04x]] class %#08x/%08x\n",
2489 vendor, device, subvendor, subdevice,
2490 class, class_mask);
2491 }
2492 diff --git a/drivers/w1/masters/ds2490.c b/drivers/w1/masters/ds2490.c
2493 index 0f4ecfcdb549..a9fb77585272 100644
2494 --- a/drivers/w1/masters/ds2490.c
2495 +++ b/drivers/w1/masters/ds2490.c
2496 @@ -1016,15 +1016,15 @@ static int ds_probe(struct usb_interface *intf,
2497 /* alternative 3, 1ms interrupt (greatly speeds search), 64 byte bulk */
2498 alt = 3;
2499 err = usb_set_interface(dev->udev,
2500 - intf->altsetting[alt].desc.bInterfaceNumber, alt);
2501 + intf->cur_altsetting->desc.bInterfaceNumber, alt);
2502 if (err) {
2503 dev_err(&dev->udev->dev, "Failed to set alternative setting %d "
2504 "for %d interface: err=%d.\n", alt,
2505 - intf->altsetting[alt].desc.bInterfaceNumber, err);
2506 + intf->cur_altsetting->desc.bInterfaceNumber, err);
2507 goto err_out_clear;
2508 }
2509
2510 - iface_desc = &intf->altsetting[alt];
2511 + iface_desc = intf->cur_altsetting;
2512 if (iface_desc->desc.bNumEndpoints != NUM_EP-1) {
2513 pr_info("Num endpoints=%d. It is not DS9490R.\n",
2514 iface_desc->desc.bNumEndpoints);
2515 diff --git a/drivers/xen/xenbus/xenbus_dev_frontend.c b/drivers/xen/xenbus/xenbus_dev_frontend.c
2516 index c3e201025ef0..0782ff3c2273 100644
2517 --- a/drivers/xen/xenbus/xenbus_dev_frontend.c
2518 +++ b/drivers/xen/xenbus/xenbus_dev_frontend.c
2519 @@ -622,9 +622,7 @@ static int xenbus_file_open(struct inode *inode, struct file *filp)
2520 if (xen_store_evtchn == 0)
2521 return -ENOENT;
2522
2523 - nonseekable_open(inode, filp);
2524 -
2525 - filp->f_mode &= ~FMODE_ATOMIC_POS; /* cdev-style semantics */
2526 + stream_open(inode, filp);
2527
2528 u = kzalloc(sizeof(*u), GFP_KERNEL);
2529 if (u == NULL)
2530 diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
2531 index 41ef452c1fcf..e5126fad57c5 100644
2532 --- a/fs/debugfs/inode.c
2533 +++ b/fs/debugfs/inode.c
2534 @@ -163,19 +163,24 @@ static int debugfs_show_options(struct seq_file *m, struct dentry *root)
2535 return 0;
2536 }
2537
2538 -static void debugfs_evict_inode(struct inode *inode)
2539 +static void debugfs_i_callback(struct rcu_head *head)
2540 {
2541 - truncate_inode_pages_final(&inode->i_data);
2542 - clear_inode(inode);
2543 + struct inode *inode = container_of(head, struct inode, i_rcu);
2544 if (S_ISLNK(inode->i_mode))
2545 kfree(inode->i_link);
2546 + free_inode_nonrcu(inode);
2547 +}
2548 +
2549 +static void debugfs_destroy_inode(struct inode *inode)
2550 +{
2551 + call_rcu(&inode->i_rcu, debugfs_i_callback);
2552 }
2553
2554 static const struct super_operations debugfs_super_operations = {
2555 .statfs = simple_statfs,
2556 .remount_fs = debugfs_remount,
2557 .show_options = debugfs_show_options,
2558 - .evict_inode = debugfs_evict_inode,
2559 + .destroy_inode = debugfs_destroy_inode,
2560 };
2561
2562 static void debugfs_release_dentry(struct dentry *dentry)
2563 diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
2564 index a7fa037b876b..a3a3d256fb0e 100644
2565 --- a/fs/hugetlbfs/inode.c
2566 +++ b/fs/hugetlbfs/inode.c
2567 @@ -741,11 +741,17 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb,
2568 umode_t mode, dev_t dev)
2569 {
2570 struct inode *inode;
2571 - struct resv_map *resv_map;
2572 + struct resv_map *resv_map = NULL;
2573
2574 - resv_map = resv_map_alloc();
2575 - if (!resv_map)
2576 - return NULL;
2577 + /*
2578 + * Reserve maps are only needed for inodes that can have associated
2579 + * page allocations.
2580 + */
2581 + if (S_ISREG(mode) || S_ISLNK(mode)) {
2582 + resv_map = resv_map_alloc();
2583 + if (!resv_map)
2584 + return NULL;
2585 + }
2586
2587 inode = new_inode(sb);
2588 if (inode) {
2589 @@ -780,8 +786,10 @@ static struct inode *hugetlbfs_get_inode(struct super_block *sb,
2590 break;
2591 }
2592 lockdep_annotate_inode_mutex_key(inode);
2593 - } else
2594 - kref_put(&resv_map->refs, resv_map_release);
2595 + } else {
2596 + if (resv_map)
2597 + kref_put(&resv_map->refs, resv_map_release);
2598 + }
2599
2600 return inode;
2601 }
2602 diff --git a/fs/jffs2/readinode.c b/fs/jffs2/readinode.c
2603 index 389ea53ea487..bccfc40b3a74 100644
2604 --- a/fs/jffs2/readinode.c
2605 +++ b/fs/jffs2/readinode.c
2606 @@ -1414,11 +1414,6 @@ void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f)
2607
2608 jffs2_kill_fragtree(&f->fragtree, deleted?c:NULL);
2609
2610 - if (f->target) {
2611 - kfree(f->target);
2612 - f->target = NULL;
2613 - }
2614 -
2615 fds = f->dents;
2616 while(fds) {
2617 fd = fds;
2618 diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
2619 index bb6ae387469f..05d892c79339 100644
2620 --- a/fs/jffs2/super.c
2621 +++ b/fs/jffs2/super.c
2622 @@ -47,7 +47,10 @@ static struct inode *jffs2_alloc_inode(struct super_block *sb)
2623 static void jffs2_i_callback(struct rcu_head *head)
2624 {
2625 struct inode *inode = container_of(head, struct inode, i_rcu);
2626 - kmem_cache_free(jffs2_inode_cachep, JFFS2_INODE_INFO(inode));
2627 + struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
2628 +
2629 + kfree(f->target);
2630 + kmem_cache_free(jffs2_inode_cachep, f);
2631 }
2632
2633 static void jffs2_destroy_inode(struct inode *inode)
2634 diff --git a/fs/open.c b/fs/open.c
2635 index f1c2f855fd43..a00350018a47 100644
2636 --- a/fs/open.c
2637 +++ b/fs/open.c
2638 @@ -1215,3 +1215,21 @@ int nonseekable_open(struct inode *inode, struct file *filp)
2639 }
2640
2641 EXPORT_SYMBOL(nonseekable_open);
2642 +
2643 +/*
2644 + * stream_open is used by subsystems that want stream-like file descriptors.
2645 + * Such file descriptors are not seekable and don't have notion of position
2646 + * (file.f_pos is always 0). Contrary to file descriptors of other regular
2647 + * files, .read() and .write() can run simultaneously.
2648 + *
2649 + * stream_open never fails and is marked to return int so that it could be
2650 + * directly used as file_operations.open .
2651 + */
2652 +int stream_open(struct inode *inode, struct file *filp)
2653 +{
2654 + filp->f_mode &= ~(FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE | FMODE_ATOMIC_POS);
2655 + filp->f_mode |= FMODE_STREAM;
2656 + return 0;
2657 +}
2658 +
2659 +EXPORT_SYMBOL(stream_open);
2660 diff --git a/fs/read_write.c b/fs/read_write.c
2661 index 562974a0616c..85fd7a8ee29e 100644
2662 --- a/fs/read_write.c
2663 +++ b/fs/read_write.c
2664 @@ -560,12 +560,13 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_
2665
2666 static inline loff_t file_pos_read(struct file *file)
2667 {
2668 - return file->f_pos;
2669 + return file->f_mode & FMODE_STREAM ? 0 : file->f_pos;
2670 }
2671
2672 static inline void file_pos_write(struct file *file, loff_t pos)
2673 {
2674 - file->f_pos = pos;
2675 + if ((file->f_mode & FMODE_STREAM) == 0)
2676 + file->f_pos = pos;
2677 }
2678
2679 ssize_t ksys_read(unsigned int fd, char __user *buf, size_t count)
2680 diff --git a/include/linux/fs.h b/include/linux/fs.h
2681 index 111c94c4baa1..d4e1b43a53c3 100644
2682 --- a/include/linux/fs.h
2683 +++ b/include/linux/fs.h
2684 @@ -153,6 +153,9 @@ typedef int (dio_iodone_t)(struct kiocb *iocb, loff_t offset,
2685 #define FMODE_OPENED ((__force fmode_t)0x80000)
2686 #define FMODE_CREATED ((__force fmode_t)0x100000)
2687
2688 +/* File is stream-like */
2689 +#define FMODE_STREAM ((__force fmode_t)0x200000)
2690 +
2691 /* File was opened by fanotify and shouldn't generate fanotify events */
2692 #define FMODE_NONOTIFY ((__force fmode_t)0x4000000)
2693
2694 @@ -3019,6 +3022,7 @@ extern loff_t no_seek_end_llseek_size(struct file *, loff_t, int, loff_t);
2695 extern loff_t no_seek_end_llseek(struct file *, loff_t, int);
2696 extern int generic_file_open(struct inode * inode, struct file * filp);
2697 extern int nonseekable_open(struct inode * inode, struct file * filp);
2698 +extern int stream_open(struct inode * inode, struct file * filp);
2699
2700 #ifdef CONFIG_BLOCK
2701 typedef void (dio_submit_t)(struct bio *bio, struct inode *inode,
2702 diff --git a/include/linux/i2c.h b/include/linux/i2c.h
2703 index 65b4eaed1d96..7e748648c7d3 100644
2704 --- a/include/linux/i2c.h
2705 +++ b/include/linux/i2c.h
2706 @@ -333,6 +333,7 @@ struct i2c_client {
2707 char name[I2C_NAME_SIZE];
2708 struct i2c_adapter *adapter; /* the adapter we sit on */
2709 struct device dev; /* the device structure */
2710 + int init_irq; /* irq set at initialization */
2711 int irq; /* irq issued by device */
2712 struct list_head detected;
2713 #if IS_ENABLED(CONFIG_I2C_SLAVE)
2714 diff --git a/include/linux/platform_data/x86/clk-pmc-atom.h b/include/linux/platform_data/x86/clk-pmc-atom.h
2715 index 3ab892208343..7a37ac27d0fb 100644
2716 --- a/include/linux/platform_data/x86/clk-pmc-atom.h
2717 +++ b/include/linux/platform_data/x86/clk-pmc-atom.h
2718 @@ -35,10 +35,13 @@ struct pmc_clk {
2719 *
2720 * @base: PMC clock register base offset
2721 * @clks: pointer to set of registered clocks, typically 0..5
2722 + * @critical: flag to indicate if firmware enabled pmc_plt_clks
2723 + * should be marked as critial or not
2724 */
2725 struct pmc_clk_data {
2726 void __iomem *base;
2727 const struct pmc_clk *clks;
2728 + bool critical;
2729 };
2730
2731 #endif /* __PLATFORM_DATA_X86_CLK_PMC_ATOM_H */
2732 diff --git a/include/linux/usb.h b/include/linux/usb.h
2733 index 5e49e82c4368..ff010d1fd1c7 100644
2734 --- a/include/linux/usb.h
2735 +++ b/include/linux/usb.h
2736 @@ -200,7 +200,6 @@ usb_find_last_int_out_endpoint(struct usb_host_interface *alt,
2737 * @dev: driver model's view of this device
2738 * @usb_dev: if an interface is bound to the USB major, this will point
2739 * to the sysfs representation for that device.
2740 - * @pm_usage_cnt: PM usage counter for this interface
2741 * @reset_ws: Used for scheduling resets from atomic context.
2742 * @resetting_device: USB core reset the device, so use alt setting 0 as
2743 * current; needs bandwidth alloc after reset.
2744 @@ -257,7 +256,6 @@ struct usb_interface {
2745
2746 struct device dev; /* interface specific device info */
2747 struct device *usb_dev;
2748 - atomic_t pm_usage_cnt; /* usage counter for autosuspend */
2749 struct work_struct reset_ws; /* for resets in atomic context */
2750 };
2751 #define to_usb_interface(d) container_of(d, struct usb_interface, dev)
2752 diff --git a/mm/kmemleak.c b/mm/kmemleak.c
2753 index 17dd883198ae..72e3fb3bb037 100644
2754 --- a/mm/kmemleak.c
2755 +++ b/mm/kmemleak.c
2756 @@ -1373,6 +1373,7 @@ static void scan_block(void *_start, void *_end,
2757 /*
2758 * Scan a large memory block in MAX_SCAN_SIZE chunks to reduce the latency.
2759 */
2760 +#ifdef CONFIG_SMP
2761 static void scan_large_block(void *start, void *end)
2762 {
2763 void *next;
2764 @@ -1384,6 +1385,7 @@ static void scan_large_block(void *start, void *end)
2765 cond_resched();
2766 }
2767 }
2768 +#endif
2769
2770 /*
2771 * Scan a memory block corresponding to a kmemleak_object. A condition is
2772 @@ -1501,11 +1503,6 @@ static void kmemleak_scan(void)
2773 }
2774 rcu_read_unlock();
2775
2776 - /* data/bss scanning */
2777 - scan_large_block(_sdata, _edata);
2778 - scan_large_block(__bss_start, __bss_stop);
2779 - scan_large_block(__start_ro_after_init, __end_ro_after_init);
2780 -
2781 #ifdef CONFIG_SMP
2782 /* per-cpu sections scanning */
2783 for_each_possible_cpu(i)
2784 @@ -2036,6 +2033,17 @@ void __init kmemleak_init(void)
2785 }
2786 local_irq_restore(flags);
2787
2788 + /* register the data/bss sections */
2789 + create_object((unsigned long)_sdata, _edata - _sdata,
2790 + KMEMLEAK_GREY, GFP_ATOMIC);
2791 + create_object((unsigned long)__bss_start, __bss_stop - __bss_start,
2792 + KMEMLEAK_GREY, GFP_ATOMIC);
2793 + /* only register .data..ro_after_init if not within .data */
2794 + if (__start_ro_after_init < _sdata || __end_ro_after_init > _edata)
2795 + create_object((unsigned long)__start_ro_after_init,
2796 + __end_ro_after_init - __start_ro_after_init,
2797 + KMEMLEAK_GREY, GFP_ATOMIC);
2798 +
2799 /*
2800 * This is the point where tracking allocations is safe. Automatic
2801 * scanning is started during the late initcall. Add the early logged
2802 diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c
2803 index ef0dec20c7d8..5da183b2f4c9 100644
2804 --- a/net/batman-adv/bat_v_elp.c
2805 +++ b/net/batman-adv/bat_v_elp.c
2806 @@ -104,8 +104,10 @@ static u32 batadv_v_elp_get_throughput(struct batadv_hardif_neigh_node *neigh)
2807
2808 ret = cfg80211_get_station(real_netdev, neigh->addr, &sinfo);
2809
2810 - /* free the TID stats immediately */
2811 - cfg80211_sinfo_release_content(&sinfo);
2812 + if (!ret) {
2813 + /* free the TID stats immediately */
2814 + cfg80211_sinfo_release_content(&sinfo);
2815 + }
2816
2817 dev_put(real_netdev);
2818 if (ret == -ENOENT) {
2819 diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c
2820 index 5f1aeeded0e3..85faf25c2912 100644
2821 --- a/net/batman-adv/bridge_loop_avoidance.c
2822 +++ b/net/batman-adv/bridge_loop_avoidance.c
2823 @@ -803,6 +803,8 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv,
2824 const u8 *mac, const unsigned short vid)
2825 {
2826 struct batadv_bla_claim search_claim, *claim;
2827 + struct batadv_bla_claim *claim_removed_entry;
2828 + struct hlist_node *claim_removed_node;
2829
2830 ether_addr_copy(search_claim.addr, mac);
2831 search_claim.vid = vid;
2832 @@ -813,10 +815,18 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv,
2833 batadv_dbg(BATADV_DBG_BLA, bat_priv, "%s(): %pM, vid %d\n", __func__,
2834 mac, batadv_print_vid(vid));
2835
2836 - batadv_hash_remove(bat_priv->bla.claim_hash, batadv_compare_claim,
2837 - batadv_choose_claim, claim);
2838 - batadv_claim_put(claim); /* reference from the hash is gone */
2839 + claim_removed_node = batadv_hash_remove(bat_priv->bla.claim_hash,
2840 + batadv_compare_claim,
2841 + batadv_choose_claim, claim);
2842 + if (!claim_removed_node)
2843 + goto free_claim;
2844
2845 + /* reference from the hash is gone */
2846 + claim_removed_entry = hlist_entry(claim_removed_node,
2847 + struct batadv_bla_claim, hash_entry);
2848 + batadv_claim_put(claim_removed_entry);
2849 +
2850 +free_claim:
2851 /* don't need the reference from hash_find() anymore */
2852 batadv_claim_put(claim);
2853 }
2854 diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
2855 index d21624c44665..359ec1a6e822 100644
2856 --- a/net/batman-adv/translation-table.c
2857 +++ b/net/batman-adv/translation-table.c
2858 @@ -616,14 +616,26 @@ static void batadv_tt_global_free(struct batadv_priv *bat_priv,
2859 struct batadv_tt_global_entry *tt_global,
2860 const char *message)
2861 {
2862 + struct batadv_tt_global_entry *tt_removed_entry;
2863 + struct hlist_node *tt_removed_node;
2864 +
2865 batadv_dbg(BATADV_DBG_TT, bat_priv,
2866 "Deleting global tt entry %pM (vid: %d): %s\n",
2867 tt_global->common.addr,
2868 batadv_print_vid(tt_global->common.vid), message);
2869
2870 - batadv_hash_remove(bat_priv->tt.global_hash, batadv_compare_tt,
2871 - batadv_choose_tt, &tt_global->common);
2872 - batadv_tt_global_entry_put(tt_global);
2873 + tt_removed_node = batadv_hash_remove(bat_priv->tt.global_hash,
2874 + batadv_compare_tt,
2875 + batadv_choose_tt,
2876 + &tt_global->common);
2877 + if (!tt_removed_node)
2878 + return;
2879 +
2880 + /* drop reference of remove hash entry */
2881 + tt_removed_entry = hlist_entry(tt_removed_node,
2882 + struct batadv_tt_global_entry,
2883 + common.hash_entry);
2884 + batadv_tt_global_entry_put(tt_removed_entry);
2885 }
2886
2887 /**
2888 @@ -1332,9 +1344,10 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr,
2889 unsigned short vid, const char *message,
2890 bool roaming)
2891 {
2892 + struct batadv_tt_local_entry *tt_removed_entry;
2893 struct batadv_tt_local_entry *tt_local_entry;
2894 u16 flags, curr_flags = BATADV_NO_FLAGS;
2895 - void *tt_entry_exists;
2896 + struct hlist_node *tt_removed_node;
2897
2898 tt_local_entry = batadv_tt_local_hash_find(bat_priv, addr, vid);
2899 if (!tt_local_entry)
2900 @@ -1363,15 +1376,18 @@ u16 batadv_tt_local_remove(struct batadv_priv *bat_priv, const u8 *addr,
2901 */
2902 batadv_tt_local_event(bat_priv, tt_local_entry, BATADV_TT_CLIENT_DEL);
2903
2904 - tt_entry_exists = batadv_hash_remove(bat_priv->tt.local_hash,
2905 + tt_removed_node = batadv_hash_remove(bat_priv->tt.local_hash,
2906 batadv_compare_tt,
2907 batadv_choose_tt,
2908 &tt_local_entry->common);
2909 - if (!tt_entry_exists)
2910 + if (!tt_removed_node)
2911 goto out;
2912
2913 - /* extra call to free the local tt entry */
2914 - batadv_tt_local_entry_put(tt_local_entry);
2915 + /* drop reference of remove hash entry */
2916 + tt_removed_entry = hlist_entry(tt_removed_node,
2917 + struct batadv_tt_local_entry,
2918 + common.hash_entry);
2919 + batadv_tt_local_entry_put(tt_removed_entry);
2920
2921 out:
2922 if (tt_local_entry)
2923 diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
2924 index c813207bb123..d37d4acafebf 100644
2925 --- a/net/mac80211/debugfs_netdev.c
2926 +++ b/net/mac80211/debugfs_netdev.c
2927 @@ -838,7 +838,7 @@ void ieee80211_debugfs_rename_netdev(struct ieee80211_sub_if_data *sdata)
2928
2929 dir = sdata->vif.debugfs_dir;
2930
2931 - if (!dir)
2932 + if (IS_ERR_OR_NULL(dir))
2933 return;
2934
2935 sprintf(buf, "netdev:%s", sdata->name);
2936 diff --git a/net/mac80211/key.c b/net/mac80211/key.c
2937 index c054ac85793c..f20bb39f492d 100644
2938 --- a/net/mac80211/key.c
2939 +++ b/net/mac80211/key.c
2940 @@ -167,8 +167,10 @@ static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key)
2941 * The driver doesn't know anything about VLAN interfaces.
2942 * Hence, don't send GTKs for VLAN interfaces to the driver.
2943 */
2944 - if (!(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE))
2945 + if (!(key->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
2946 + ret = 1;
2947 goto out_unsupported;
2948 + }
2949 }
2950
2951 ret = drv_set_key(key->local, SET_KEY, sdata,
2952 @@ -213,11 +215,8 @@ static int ieee80211_key_enable_hw_accel(struct ieee80211_key *key)
2953 /* all of these we can do in software - if driver can */
2954 if (ret == 1)
2955 return 0;
2956 - if (ieee80211_hw_check(&key->local->hw, SW_CRYPTO_CONTROL)) {
2957 - if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
2958 - return 0;
2959 + if (ieee80211_hw_check(&key->local->hw, SW_CRYPTO_CONTROL))
2960 return -EINVAL;
2961 - }
2962 return 0;
2963 default:
2964 return -EINVAL;
2965 diff --git a/scripts/coccinelle/api/stream_open.cocci b/scripts/coccinelle/api/stream_open.cocci
2966 new file mode 100644
2967 index 000000000000..350145da7669
2968 --- /dev/null
2969 +++ b/scripts/coccinelle/api/stream_open.cocci
2970 @@ -0,0 +1,363 @@
2971 +// SPDX-License-Identifier: GPL-2.0
2972 +// Author: Kirill Smelkov (kirr@nexedi.com)
2973 +//
2974 +// Search for stream-like files that are using nonseekable_open and convert
2975 +// them to stream_open. A stream-like file is a file that does not use ppos in
2976 +// its read and write. Rationale for the conversion is to avoid deadlock in
2977 +// between read and write.
2978 +
2979 +virtual report
2980 +virtual patch
2981 +virtual explain // explain decisions in the patch (SPFLAGS="-D explain")
2982 +
2983 +// stream-like reader & writer - ones that do not depend on f_pos.
2984 +@ stream_reader @
2985 +identifier readstream, ppos;
2986 +identifier f, buf, len;
2987 +type loff_t;
2988 +@@
2989 + ssize_t readstream(struct file *f, char *buf, size_t len, loff_t *ppos)
2990 + {
2991 + ... when != ppos
2992 + }
2993 +
2994 +@ stream_writer @
2995 +identifier writestream, ppos;
2996 +identifier f, buf, len;
2997 +type loff_t;
2998 +@@
2999 + ssize_t writestream(struct file *f, const char *buf, size_t len, loff_t *ppos)
3000 + {
3001 + ... when != ppos
3002 + }
3003 +
3004 +
3005 +// a function that blocks
3006 +@ blocks @
3007 +identifier block_f;
3008 +identifier wait_event =~ "^wait_event_.*";
3009 +@@
3010 + block_f(...) {
3011 + ... when exists
3012 + wait_event(...)
3013 + ... when exists
3014 + }
3015 +
3016 +// stream_reader that can block inside.
3017 +//
3018 +// XXX wait_* can be called not directly from current function (e.g. func -> f -> g -> wait())
3019 +// XXX currently reader_blocks supports only direct and 1-level indirect cases.
3020 +@ reader_blocks_direct @
3021 +identifier stream_reader.readstream;
3022 +identifier wait_event =~ "^wait_event_.*";
3023 +@@
3024 + readstream(...)
3025 + {
3026 + ... when exists
3027 + wait_event(...)
3028 + ... when exists
3029 + }
3030 +
3031 +@ reader_blocks_1 @
3032 +identifier stream_reader.readstream;
3033 +identifier blocks.block_f;
3034 +@@
3035 + readstream(...)
3036 + {
3037 + ... when exists
3038 + block_f(...)
3039 + ... when exists
3040 + }
3041 +
3042 +@ reader_blocks depends on reader_blocks_direct || reader_blocks_1 @
3043 +identifier stream_reader.readstream;
3044 +@@
3045 + readstream(...) {
3046 + ...
3047 + }
3048 +
3049 +
3050 +// file_operations + whether they have _any_ .read, .write, .llseek ... at all.
3051 +//
3052 +// XXX add support for file_operations xxx[N] = ... (sound/core/pcm_native.c)
3053 +@ fops0 @
3054 +identifier fops;
3055 +@@
3056 + struct file_operations fops = {
3057 + ...
3058 + };
3059 +
3060 +@ has_read @
3061 +identifier fops0.fops;
3062 +identifier read_f;
3063 +@@
3064 + struct file_operations fops = {
3065 + .read = read_f,
3066 + };
3067 +
3068 +@ has_read_iter @
3069 +identifier fops0.fops;
3070 +identifier read_iter_f;
3071 +@@
3072 + struct file_operations fops = {
3073 + .read_iter = read_iter_f,
3074 + };
3075 +
3076 +@ has_write @
3077 +identifier fops0.fops;
3078 +identifier write_f;
3079 +@@
3080 + struct file_operations fops = {
3081 + .write = write_f,
3082 + };
3083 +
3084 +@ has_write_iter @
3085 +identifier fops0.fops;
3086 +identifier write_iter_f;
3087 +@@
3088 + struct file_operations fops = {
3089 + .write_iter = write_iter_f,
3090 + };
3091 +
3092 +@ has_llseek @
3093 +identifier fops0.fops;
3094 +identifier llseek_f;
3095 +@@
3096 + struct file_operations fops = {
3097 + .llseek = llseek_f,
3098 + };
3099 +
3100 +@ has_no_llseek @
3101 +identifier fops0.fops;
3102 +@@
3103 + struct file_operations fops = {
3104 + .llseek = no_llseek,
3105 + };
3106 +
3107 +@ has_mmap @
3108 +identifier fops0.fops;
3109 +identifier mmap_f;
3110 +@@
3111 + struct file_operations fops = {
3112 + .mmap = mmap_f,
3113 + };
3114 +
3115 +@ has_copy_file_range @
3116 +identifier fops0.fops;
3117 +identifier copy_file_range_f;
3118 +@@
3119 + struct file_operations fops = {
3120 + .copy_file_range = copy_file_range_f,
3121 + };
3122 +
3123 +@ has_remap_file_range @
3124 +identifier fops0.fops;
3125 +identifier remap_file_range_f;
3126 +@@
3127 + struct file_operations fops = {
3128 + .remap_file_range = remap_file_range_f,
3129 + };
3130 +
3131 +@ has_splice_read @
3132 +identifier fops0.fops;
3133 +identifier splice_read_f;
3134 +@@
3135 + struct file_operations fops = {
3136 + .splice_read = splice_read_f,
3137 + };
3138 +
3139 +@ has_splice_write @
3140 +identifier fops0.fops;
3141 +identifier splice_write_f;
3142 +@@
3143 + struct file_operations fops = {
3144 + .splice_write = splice_write_f,
3145 + };
3146 +
3147 +
3148 +// file_operations that is candidate for stream_open conversion - it does not
3149 +// use mmap and other methods that assume @offset access to file.
3150 +//
3151 +// XXX for simplicity require no .{read/write}_iter and no .splice_{read/write} for now.
3152 +// XXX maybe_steam.fops cannot be used in other rules - it gives "bad rule maybe_stream or bad variable fops".
3153 +@ maybe_stream depends on (!has_llseek || has_no_llseek) && !has_mmap && !has_copy_file_range && !has_remap_file_range && !has_read_iter && !has_write_iter && !has_splice_read && !has_splice_write @
3154 +identifier fops0.fops;
3155 +@@
3156 + struct file_operations fops = {
3157 + };
3158 +
3159 +
3160 +// ---- conversions ----
3161 +
3162 +// XXX .open = nonseekable_open -> .open = stream_open
3163 +// XXX .open = func -> openfunc -> nonseekable_open
3164 +
3165 +// read & write
3166 +//
3167 +// if both are used in the same file_operations together with an opener -
3168 +// under that conditions we can use stream_open instead of nonseekable_open.
3169 +@ fops_rw depends on maybe_stream @
3170 +identifier fops0.fops, openfunc;
3171 +identifier stream_reader.readstream;
3172 +identifier stream_writer.writestream;
3173 +@@
3174 + struct file_operations fops = {
3175 + .open = openfunc,
3176 + .read = readstream,
3177 + .write = writestream,
3178 + };
3179 +
3180 +@ report_rw depends on report @
3181 +identifier fops_rw.openfunc;
3182 +position p1;
3183 +@@
3184 + openfunc(...) {
3185 + <...
3186 + nonseekable_open@p1
3187 + ...>
3188 + }
3189 +
3190 +@ script:python depends on report && reader_blocks @
3191 +fops << fops0.fops;
3192 +p << report_rw.p1;
3193 +@@
3194 +coccilib.report.print_report(p[0],
3195 + "ERROR: %s: .read() can deadlock .write(); change nonseekable_open -> stream_open to fix." % (fops,))
3196 +
3197 +@ script:python depends on report && !reader_blocks @
3198 +fops << fops0.fops;
3199 +p << report_rw.p1;
3200 +@@
3201 +coccilib.report.print_report(p[0],
3202 + "WARNING: %s: .read() and .write() have stream semantic; safe to change nonseekable_open -> stream_open." % (fops,))
3203 +
3204 +
3205 +@ explain_rw_deadlocked depends on explain && reader_blocks @
3206 +identifier fops_rw.openfunc;
3207 +@@
3208 + openfunc(...) {
3209 + <...
3210 +- nonseekable_open
3211 ++ nonseekable_open /* read & write (was deadlock) */
3212 + ...>
3213 + }
3214 +
3215 +
3216 +@ explain_rw_nodeadlock depends on explain && !reader_blocks @
3217 +identifier fops_rw.openfunc;
3218 +@@
3219 + openfunc(...) {
3220 + <...
3221 +- nonseekable_open
3222 ++ nonseekable_open /* read & write (no direct deadlock) */
3223 + ...>
3224 + }
3225 +
3226 +@ patch_rw depends on patch @
3227 +identifier fops_rw.openfunc;
3228 +@@
3229 + openfunc(...) {
3230 + <...
3231 +- nonseekable_open
3232 ++ stream_open
3233 + ...>
3234 + }
3235 +
3236 +
3237 +// read, but not write
3238 +@ fops_r depends on maybe_stream && !has_write @
3239 +identifier fops0.fops, openfunc;
3240 +identifier stream_reader.readstream;
3241 +@@
3242 + struct file_operations fops = {
3243 + .open = openfunc,
3244 + .read = readstream,
3245 + };
3246 +
3247 +@ report_r depends on report @
3248 +identifier fops_r.openfunc;
3249 +position p1;
3250 +@@
3251 + openfunc(...) {
3252 + <...
3253 + nonseekable_open@p1
3254 + ...>
3255 + }
3256 +
3257 +@ script:python depends on report @
3258 +fops << fops0.fops;
3259 +p << report_r.p1;
3260 +@@
3261 +coccilib.report.print_report(p[0],
3262 + "WARNING: %s: .read() has stream semantic; safe to change nonseekable_open -> stream_open." % (fops,))
3263 +
3264 +@ explain_r depends on explain @
3265 +identifier fops_r.openfunc;
3266 +@@
3267 + openfunc(...) {
3268 + <...
3269 +- nonseekable_open
3270 ++ nonseekable_open /* read only */
3271 + ...>
3272 + }
3273 +
3274 +@ patch_r depends on patch @
3275 +identifier fops_r.openfunc;
3276 +@@
3277 + openfunc(...) {
3278 + <...
3279 +- nonseekable_open
3280 ++ stream_open
3281 + ...>
3282 + }
3283 +
3284 +
3285 +// write, but not read
3286 +@ fops_w depends on maybe_stream && !has_read @
3287 +identifier fops0.fops, openfunc;
3288 +identifier stream_writer.writestream;
3289 +@@
3290 + struct file_operations fops = {
3291 + .open = openfunc,
3292 + .write = writestream,
3293 + };
3294 +
3295 +@ report_w depends on report @
3296 +identifier fops_w.openfunc;
3297 +position p1;
3298 +@@
3299 + openfunc(...) {
3300 + <...
3301 + nonseekable_open@p1
3302 + ...>
3303 + }
3304 +
3305 +@ script:python depends on report @
3306 +fops << fops0.fops;
3307 +p << report_w.p1;
3308 +@@
3309 +coccilib.report.print_report(p[0],
3310 + "WARNING: %s: .write() has stream semantic; safe to change nonseekable_open -> stream_open." % (fops,))
3311 +
3312 +@ explain_w depends on explain @
3313 +identifier fops_w.openfunc;
3314 +@@
3315 + openfunc(...) {
3316 + <...
3317 +- nonseekable_open
3318 ++ nonseekable_open /* write only */
3319 + ...>
3320 + }
3321 +
3322 +@ patch_w depends on patch @
3323 +identifier fops_w.openfunc;
3324 +@@
3325 + openfunc(...) {
3326 + <...
3327 +- nonseekable_open
3328 ++ stream_open
3329 + ...>
3330 + }
3331 +
3332 +
3333 +// no read, no write - don't change anything
3334 diff --git a/security/selinux/avc.c b/security/selinux/avc.c
3335 index 635e5c1e3e48..5de18a6d5c3f 100644
3336 --- a/security/selinux/avc.c
3337 +++ b/security/selinux/avc.c
3338 @@ -838,6 +838,7 @@ out:
3339 * @ssid,@tsid,@tclass : identifier of an AVC entry
3340 * @seqno : sequence number when decision was made
3341 * @xpd: extended_perms_decision to be added to the node
3342 + * @flags: the AVC_* flags, e.g. AVC_NONBLOCKING, AVC_EXTENDED_PERMS, or 0.
3343 *
3344 * if a valid AVC entry doesn't exist,this function returns -ENOENT.
3345 * if kmalloc() called internal returns NULL, this function returns -ENOMEM.
3346 @@ -856,6 +857,23 @@ static int avc_update_node(struct selinux_avc *avc,
3347 struct hlist_head *head;
3348 spinlock_t *lock;
3349
3350 + /*
3351 + * If we are in a non-blocking code path, e.g. VFS RCU walk,
3352 + * then we must not add permissions to a cache entry
3353 + * because we cannot safely audit the denial. Otherwise,
3354 + * during the subsequent blocking retry (e.g. VFS ref walk), we
3355 + * will find the permissions already granted in the cache entry
3356 + * and won't audit anything at all, leading to silent denials in
3357 + * permissive mode that only appear when in enforcing mode.
3358 + *
3359 + * See the corresponding handling in slow_avc_audit(), and the
3360 + * logic in selinux_inode_follow_link and selinux_inode_permission
3361 + * for the VFS MAY_NOT_BLOCK flag, which is transliterated into
3362 + * AVC_NONBLOCKING for avc_has_perm_noaudit().
3363 + */
3364 + if (flags & AVC_NONBLOCKING)
3365 + return 0;
3366 +
3367 node = avc_alloc_node(avc);
3368 if (!node) {
3369 rc = -ENOMEM;
3370 @@ -1115,7 +1133,7 @@ decision:
3371 * @tsid: target security identifier
3372 * @tclass: target security class
3373 * @requested: requested permissions, interpreted based on @tclass
3374 - * @flags: AVC_STRICT or 0
3375 + * @flags: AVC_STRICT, AVC_NONBLOCKING, or 0
3376 * @avd: access vector decisions
3377 *
3378 * Check the AVC to determine whether the @requested permissions are granted
3379 @@ -1199,7 +1217,8 @@ int avc_has_perm_flags(struct selinux_state *state,
3380 struct av_decision avd;
3381 int rc, rc2;
3382
3383 - rc = avc_has_perm_noaudit(state, ssid, tsid, tclass, requested, 0,
3384 + rc = avc_has_perm_noaudit(state, ssid, tsid, tclass, requested,
3385 + (flags & MAY_NOT_BLOCK) ? AVC_NONBLOCKING : 0,
3386 &avd);
3387
3388 rc2 = avc_audit(state, ssid, tsid, tclass, requested, &avd, rc,
3389 diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
3390 index 4337b6d9369e..cba19b8c3e51 100644
3391 --- a/security/selinux/hooks.c
3392 +++ b/security/selinux/hooks.c
3393 @@ -497,16 +497,10 @@ static int may_context_mount_inode_relabel(u32 sid,
3394 return rc;
3395 }
3396
3397 -static int selinux_is_sblabel_mnt(struct super_block *sb)
3398 +static int selinux_is_genfs_special_handling(struct super_block *sb)
3399 {
3400 - struct superblock_security_struct *sbsec = sb->s_security;
3401 -
3402 - return sbsec->behavior == SECURITY_FS_USE_XATTR ||
3403 - sbsec->behavior == SECURITY_FS_USE_TRANS ||
3404 - sbsec->behavior == SECURITY_FS_USE_TASK ||
3405 - sbsec->behavior == SECURITY_FS_USE_NATIVE ||
3406 - /* Special handling. Genfs but also in-core setxattr handler */
3407 - !strcmp(sb->s_type->name, "sysfs") ||
3408 + /* Special handling. Genfs but also in-core setxattr handler */
3409 + return !strcmp(sb->s_type->name, "sysfs") ||
3410 !strcmp(sb->s_type->name, "pstore") ||
3411 !strcmp(sb->s_type->name, "debugfs") ||
3412 !strcmp(sb->s_type->name, "tracefs") ||
3413 @@ -516,6 +510,34 @@ static int selinux_is_sblabel_mnt(struct super_block *sb)
3414 !strcmp(sb->s_type->name, "cgroup2")));
3415 }
3416
3417 +static int selinux_is_sblabel_mnt(struct super_block *sb)
3418 +{
3419 + struct superblock_security_struct *sbsec = sb->s_security;
3420 +
3421 + /*
3422 + * IMPORTANT: Double-check logic in this function when adding a new
3423 + * SECURITY_FS_USE_* definition!
3424 + */
3425 + BUILD_BUG_ON(SECURITY_FS_USE_MAX != 7);
3426 +
3427 + switch (sbsec->behavior) {
3428 + case SECURITY_FS_USE_XATTR:
3429 + case SECURITY_FS_USE_TRANS:
3430 + case SECURITY_FS_USE_TASK:
3431 + case SECURITY_FS_USE_NATIVE:
3432 + return 1;
3433 +
3434 + case SECURITY_FS_USE_GENFS:
3435 + return selinux_is_genfs_special_handling(sb);
3436 +
3437 + /* Never allow relabeling on context mounts */
3438 + case SECURITY_FS_USE_MNTPOINT:
3439 + case SECURITY_FS_USE_NONE:
3440 + default:
3441 + return 0;
3442 + }
3443 +}
3444 +
3445 static int sb_finish_set_opts(struct super_block *sb)
3446 {
3447 struct superblock_security_struct *sbsec = sb->s_security;
3448 @@ -3199,7 +3221,9 @@ static int selinux_inode_permission(struct inode *inode, int mask)
3449 return PTR_ERR(isec);
3450
3451 rc = avc_has_perm_noaudit(&selinux_state,
3452 - sid, isec->sid, isec->sclass, perms, 0, &avd);
3453 + sid, isec->sid, isec->sclass, perms,
3454 + (flags & MAY_NOT_BLOCK) ? AVC_NONBLOCKING : 0,
3455 + &avd);
3456 audited = avc_audit_required(perms, &avd, rc,
3457 from_access ? FILE__AUDIT_ACCESS : 0,
3458 &denied);
3459 diff --git a/security/selinux/include/avc.h b/security/selinux/include/avc.h
3460 index ef899bcfd2cb..74ea50977c20 100644
3461 --- a/security/selinux/include/avc.h
3462 +++ b/security/selinux/include/avc.h
3463 @@ -142,6 +142,7 @@ static inline int avc_audit(struct selinux_state *state,
3464
3465 #define AVC_STRICT 1 /* Ignore permissive mode. */
3466 #define AVC_EXTENDED_PERMS 2 /* update extended permissions */
3467 +#define AVC_NONBLOCKING 4 /* non blocking */
3468 int avc_has_perm_noaudit(struct selinux_state *state,
3469 u32 ssid, u32 tsid,
3470 u16 tclass, u32 requested,
3471 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
3472 index 0a745d677b1c..75a0be2aa9c2 100644
3473 --- a/sound/pci/hda/patch_realtek.c
3474 +++ b/sound/pci/hda/patch_realtek.c
3475 @@ -5448,6 +5448,8 @@ static void alc274_fixup_bind_dacs(struct hda_codec *codec,
3476 return;
3477
3478 spec->gen.preferred_dacs = preferred_pairs;
3479 + spec->gen.auto_mute_via_amp = 1;
3480 + codec->power_save_node = 0;
3481 }
3482
3483 /* The DAC of NID 0x3 will introduce click/pop noise on headphones, so invalidate it */
3484 @@ -7172,6 +7174,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
3485 {0x21, 0x02211020}),
3486 SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
3487 {0x21, 0x02211020}),
3488 + SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
3489 + {0x12, 0x40000000},
3490 + {0x14, 0x90170110},
3491 + {0x21, 0x02211020}),
3492 SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE,
3493 {0x14, 0x90170110},
3494 {0x21, 0x02211020}),
3495 @@ -7445,6 +7451,13 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
3496 {0x12, 0x90a60130},
3497 {0x17, 0x90170110},
3498 {0x21, 0x04211020}),
3499 + SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC294_FIXUP_ASUS_SPK,
3500 + {0x12, 0x90a60130},
3501 + {0x17, 0x90170110},
3502 + {0x21, 0x03211020}),
3503 + SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
3504 + {0x14, 0x90170110},
3505 + {0x21, 0x04211020}),
3506 SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
3507 ALC295_STANDARD_PINS,
3508 {0x17, 0x21014020},
3509 diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
3510 index 4d3ec295679d..a651fed62a27 100644
3511 --- a/sound/soc/codecs/wm_adsp.c
3512 +++ b/sound/soc/codecs/wm_adsp.c
3513 @@ -3441,8 +3441,6 @@ int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd)
3514 }
3515 }
3516
3517 - wm_adsp_buffer_clear(compr->buf);
3518 -
3519 /* Trigger the IRQ at one fragment of data */
3520 ret = wm_adsp_buffer_write(compr->buf,
3521 HOST_BUFFER_FIELD(high_water_mark),
3522 @@ -3454,6 +3452,8 @@ int wm_adsp_compr_trigger(struct snd_compr_stream *stream, int cmd)
3523 }
3524 break;
3525 case SNDRV_PCM_TRIGGER_STOP:
3526 + if (wm_adsp_compr_attached(compr))
3527 + wm_adsp_buffer_clear(compr->buf);
3528 break;
3529 default:
3530 ret = -EINVAL;
3531 diff --git a/sound/soc/intel/boards/bytcr_rt5651.c b/sound/soc/intel/boards/bytcr_rt5651.c
3532 index f8a68bdb3885..b74bbee111c6 100644
3533 --- a/sound/soc/intel/boards/bytcr_rt5651.c
3534 +++ b/sound/soc/intel/boards/bytcr_rt5651.c
3535 @@ -267,7 +267,7 @@ static const struct snd_soc_dapm_route byt_rt5651_audio_map[] = {
3536 static const struct snd_soc_dapm_route byt_rt5651_intmic_dmic_map[] = {
3537 {"DMIC L1", NULL, "Internal Mic"},
3538 {"DMIC R1", NULL, "Internal Mic"},
3539 - {"IN3P", NULL, "Headset Mic"},
3540 + {"IN2P", NULL, "Headset Mic"},
3541 };
3542
3543 static const struct snd_soc_dapm_route byt_rt5651_intmic_in1_map[] = {
3544 diff --git a/sound/soc/stm/stm32_sai_sub.c b/sound/soc/stm/stm32_sai_sub.c
3545 index 06fba9650ac4..85c4b6d8e89d 100644
3546 --- a/sound/soc/stm/stm32_sai_sub.c
3547 +++ b/sound/soc/stm/stm32_sai_sub.c
3548 @@ -1194,7 +1194,6 @@ static int stm32_sai_sub_dais_init(struct platform_device *pdev,
3549 if (!sai->cpu_dai_drv)
3550 return -ENOMEM;
3551
3552 - sai->cpu_dai_drv->name = dev_name(&pdev->dev);
3553 if (STM_SAI_IS_PLAYBACK(sai)) {
3554 memcpy(sai->cpu_dai_drv, &stm32_sai_playback_dai,
3555 sizeof(stm32_sai_playback_dai));
3556 @@ -1204,6 +1203,7 @@ static int stm32_sai_sub_dais_init(struct platform_device *pdev,
3557 sizeof(stm32_sai_capture_dai));
3558 sai->cpu_dai_drv->capture.stream_name = sai->cpu_dai_drv->name;
3559 }
3560 + sai->cpu_dai_drv->name = dev_name(&pdev->dev);
3561
3562 return 0;
3563 }