Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.14/0123-4.14.24-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (hide annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 7 months ago) by niro
File size: 142003 byte(s)
-added up to patches-4.14.79
1 niro 3238 diff --git a/Makefile b/Makefile
2     index 169f3199274f..38acc6047d7d 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,7 +1,7 @@
6     # SPDX-License-Identifier: GPL-2.0
7     VERSION = 4
8     PATCHLEVEL = 14
9     -SUBLEVEL = 23
10     +SUBLEVEL = 24
11     EXTRAVERSION =
12     NAME = Petit Gorille
13    
14     diff --git a/arch/arm/boot/dts/ls1021a-qds.dts b/arch/arm/boot/dts/ls1021a-qds.dts
15     index 940875316d0f..67b4de0e3439 100644
16     --- a/arch/arm/boot/dts/ls1021a-qds.dts
17     +++ b/arch/arm/boot/dts/ls1021a-qds.dts
18     @@ -215,7 +215,7 @@
19     reg = <0x2a>;
20     VDDA-supply = <&reg_3p3v>;
21     VDDIO-supply = <&reg_3p3v>;
22     - clocks = <&sys_mclk 1>;
23     + clocks = <&sys_mclk>;
24     };
25     };
26     };
27     diff --git a/arch/arm/boot/dts/ls1021a-twr.dts b/arch/arm/boot/dts/ls1021a-twr.dts
28     index a8b148ad1dd2..44715c8ef756 100644
29     --- a/arch/arm/boot/dts/ls1021a-twr.dts
30     +++ b/arch/arm/boot/dts/ls1021a-twr.dts
31     @@ -187,7 +187,7 @@
32     reg = <0x0a>;
33     VDDA-supply = <&reg_3p3v>;
34     VDDIO-supply = <&reg_3p3v>;
35     - clocks = <&sys_mclk 1>;
36     + clocks = <&sys_mclk>;
37     };
38     };
39    
40     diff --git a/arch/arm/lib/csumpartialcopyuser.S b/arch/arm/lib/csumpartialcopyuser.S
41     index 1712f132b80d..b83fdc06286a 100644
42     --- a/arch/arm/lib/csumpartialcopyuser.S
43     +++ b/arch/arm/lib/csumpartialcopyuser.S
44     @@ -85,7 +85,11 @@
45     .pushsection .text.fixup,"ax"
46     .align 4
47     9001: mov r4, #-EFAULT
48     +#ifdef CONFIG_CPU_SW_DOMAIN_PAN
49     + ldr r5, [sp, #9*4] @ *err_ptr
50     +#else
51     ldr r5, [sp, #8*4] @ *err_ptr
52     +#endif
53     str r4, [r5]
54     ldmia sp, {r1, r2} @ retrieve dst, len
55     add r2, r2, r1
56     diff --git a/arch/arm64/boot/dts/marvell/armada-8040-mcbin.dts b/arch/arm64/boot/dts/marvell/armada-8040-mcbin.dts
57     index 2b6b792dab93..e6ee7443b530 100644
58     --- a/arch/arm64/boot/dts/marvell/armada-8040-mcbin.dts
59     +++ b/arch/arm64/boot/dts/marvell/armada-8040-mcbin.dts
60     @@ -228,8 +228,11 @@
61    
62     &cpm_eth0 {
63     status = "okay";
64     + /* Network PHY */
65     phy = <&phy0>;
66     phy-mode = "10gbase-kr";
67     + /* Generic PHY, providing serdes lanes */
68     + phys = <&cpm_comphy4 0>;
69     };
70    
71     &cpm_sata0 {
72     @@ -263,15 +266,21 @@
73    
74     &cps_eth0 {
75     status = "okay";
76     + /* Network PHY */
77     phy = <&phy8>;
78     phy-mode = "10gbase-kr";
79     + /* Generic PHY, providing serdes lanes */
80     + phys = <&cps_comphy4 0>;
81     };
82    
83     &cps_eth1 {
84     /* CPS Lane 0 - J5 (Gigabit RJ45) */
85     status = "okay";
86     + /* Network PHY */
87     phy = <&ge_phy>;
88     phy-mode = "sgmii";
89     + /* Generic PHY, providing serdes lanes */
90     + phys = <&cps_comphy0 1>;
91     };
92    
93     &cps_pinctrl {
94     diff --git a/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi b/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
95     index 32690107c1cc..9a7b63cd63a3 100644
96     --- a/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
97     +++ b/arch/arm64/boot/dts/marvell/armada-cp110-master.dtsi
98     @@ -111,6 +111,44 @@
99     };
100     };
101    
102     + cpm_comphy: phy@120000 {
103     + compatible = "marvell,comphy-cp110";
104     + reg = <0x120000 0x6000>;
105     + marvell,system-controller = <&cpm_syscon0>;
106     + #address-cells = <1>;
107     + #size-cells = <0>;
108     +
109     + cpm_comphy0: phy@0 {
110     + reg = <0>;
111     + #phy-cells = <1>;
112     + };
113     +
114     + cpm_comphy1: phy@1 {
115     + reg = <1>;
116     + #phy-cells = <1>;
117     + };
118     +
119     + cpm_comphy2: phy@2 {
120     + reg = <2>;
121     + #phy-cells = <1>;
122     + };
123     +
124     + cpm_comphy3: phy@3 {
125     + reg = <3>;
126     + #phy-cells = <1>;
127     + };
128     +
129     + cpm_comphy4: phy@4 {
130     + reg = <4>;
131     + #phy-cells = <1>;
132     + };
133     +
134     + cpm_comphy5: phy@5 {
135     + reg = <5>;
136     + #phy-cells = <1>;
137     + };
138     + };
139     +
140     cpm_mdio: mdio@12a200 {
141     #address-cells = <1>;
142     #size-cells = <0>;
143     diff --git a/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi b/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi
144     index 14e47c5c3816..faf28633a309 100644
145     --- a/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi
146     +++ b/arch/arm64/boot/dts/marvell/armada-cp110-slave.dtsi
147     @@ -111,6 +111,44 @@
148     };
149     };
150    
151     + cps_comphy: phy@120000 {
152     + compatible = "marvell,comphy-cp110";
153     + reg = <0x120000 0x6000>;
154     + marvell,system-controller = <&cps_syscon0>;
155     + #address-cells = <1>;
156     + #size-cells = <0>;
157     +
158     + cps_comphy0: phy@0 {
159     + reg = <0>;
160     + #phy-cells = <1>;
161     + };
162     +
163     + cps_comphy1: phy@1 {
164     + reg = <1>;
165     + #phy-cells = <1>;
166     + };
167     +
168     + cps_comphy2: phy@2 {
169     + reg = <2>;
170     + #phy-cells = <1>;
171     + };
172     +
173     + cps_comphy3: phy@3 {
174     + reg = <3>;
175     + #phy-cells = <1>;
176     + };
177     +
178     + cps_comphy4: phy@4 {
179     + reg = <4>;
180     + #phy-cells = <1>;
181     + };
182     +
183     + cps_comphy5: phy@5 {
184     + reg = <5>;
185     + #phy-cells = <1>;
186     + };
187     + };
188     +
189     cps_mdio: mdio@12a200 {
190     #address-cells = <1>;
191     #size-cells = <0>;
192     diff --git a/arch/arm64/boot/dts/renesas/ulcb.dtsi b/arch/arm64/boot/dts/renesas/ulcb.dtsi
193     index 1b868df2393f..e95d99265af9 100644
194     --- a/arch/arm64/boot/dts/renesas/ulcb.dtsi
195     +++ b/arch/arm64/boot/dts/renesas/ulcb.dtsi
196     @@ -145,7 +145,6 @@
197     &avb {
198     pinctrl-0 = <&avb_pins>;
199     pinctrl-names = "default";
200     - renesas,no-ether-link;
201     phy-handle = <&phy0>;
202     status = "okay";
203    
204     diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c
205     index aa7be020a904..c954523d00fe 100644
206     --- a/arch/ia64/kernel/time.c
207     +++ b/arch/ia64/kernel/time.c
208     @@ -88,7 +88,7 @@ void vtime_flush(struct task_struct *tsk)
209     }
210    
211     if (ti->softirq_time) {
212     - delta = cycle_to_nsec(ti->softirq_time));
213     + delta = cycle_to_nsec(ti->softirq_time);
214     account_system_index_time(tsk, delta, CPUTIME_SOFTIRQ);
215     }
216    
217     diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile
218     index 78c2affeabf8..e84e12655fa8 100644
219     --- a/arch/mips/lib/Makefile
220     +++ b/arch/mips/lib/Makefile
221     @@ -16,4 +16,5 @@ obj-$(CONFIG_CPU_R3000) += r3k_dump_tlb.o
222     obj-$(CONFIG_CPU_TX39XX) += r3k_dump_tlb.o
223    
224     # libgcc-style stuff needed in the kernel
225     -obj-y += ashldi3.o ashrdi3.o bswapsi.o bswapdi.o cmpdi2.o lshrdi3.o ucmpdi2.o
226     +obj-y += ashldi3.o ashrdi3.o bswapsi.o bswapdi.o cmpdi2.o lshrdi3.o multi3.o \
227     + ucmpdi2.o
228     diff --git a/arch/mips/lib/libgcc.h b/arch/mips/lib/libgcc.h
229     index 28002ed90c2c..199a7f96282f 100644
230     --- a/arch/mips/lib/libgcc.h
231     +++ b/arch/mips/lib/libgcc.h
232     @@ -10,10 +10,18 @@ typedef int word_type __attribute__ ((mode (__word__)));
233     struct DWstruct {
234     int high, low;
235     };
236     +
237     +struct TWstruct {
238     + long long high, low;
239     +};
240     #elif defined(__LITTLE_ENDIAN)
241     struct DWstruct {
242     int low, high;
243     };
244     +
245     +struct TWstruct {
246     + long long low, high;
247     +};
248     #else
249     #error I feel sick.
250     #endif
251     @@ -23,4 +31,13 @@ typedef union {
252     long long ll;
253     } DWunion;
254    
255     +#if defined(CONFIG_64BIT) && defined(CONFIG_CPU_MIPSR6)
256     +typedef int ti_type __attribute__((mode(TI)));
257     +
258     +typedef union {
259     + struct TWstruct s;
260     + ti_type ti;
261     +} TWunion;
262     +#endif
263     +
264     #endif /* __ASM_LIBGCC_H */
265     diff --git a/arch/mips/lib/multi3.c b/arch/mips/lib/multi3.c
266     new file mode 100644
267     index 000000000000..111ad475aa0c
268     --- /dev/null
269     +++ b/arch/mips/lib/multi3.c
270     @@ -0,0 +1,54 @@
271     +// SPDX-License-Identifier: GPL-2.0
272     +#include <linux/export.h>
273     +
274     +#include "libgcc.h"
275     +
276     +/*
277     + * GCC 7 suboptimally generates __multi3 calls for mips64r6, so for that
278     + * specific case only we'll implement it here.
279     + *
280     + * See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82981
281     + */
282     +#if defined(CONFIG_64BIT) && defined(CONFIG_CPU_MIPSR6) && (__GNUC__ == 7)
283     +
284     +/* multiply 64-bit values, low 64-bits returned */
285     +static inline long long notrace dmulu(long long a, long long b)
286     +{
287     + long long res;
288     +
289     + asm ("dmulu %0,%1,%2" : "=r" (res) : "r" (a), "r" (b));
290     + return res;
291     +}
292     +
293     +/* multiply 64-bit unsigned values, high 64-bits of 128-bit result returned */
294     +static inline long long notrace dmuhu(long long a, long long b)
295     +{
296     + long long res;
297     +
298     + asm ("dmuhu %0,%1,%2" : "=r" (res) : "r" (a), "r" (b));
299     + return res;
300     +}
301     +
302     +/* multiply 128-bit values, low 128-bits returned */
303     +ti_type notrace __multi3(ti_type a, ti_type b)
304     +{
305     + TWunion res, aa, bb;
306     +
307     + aa.ti = a;
308     + bb.ti = b;
309     +
310     + /*
311     + * a * b = (a.lo * b.lo)
312     + * + 2^64 * (a.hi * b.lo + a.lo * b.hi)
313     + * [+ 2^128 * (a.hi * b.hi)]
314     + */
315     + res.s.low = dmulu(aa.s.low, bb.s.low);
316     + res.s.high = dmuhu(aa.s.low, bb.s.low);
317     + res.s.high += dmulu(aa.s.high, bb.s.low);
318     + res.s.high += dmulu(aa.s.low, bb.s.high);
319     +
320     + return res.ti;
321     +}
322     +EXPORT_SYMBOL(__multi3);
323     +
324     +#endif /* 64BIT && CPU_MIPSR6 && GCC7 */
325     diff --git a/arch/parisc/include/asm/thread_info.h b/arch/parisc/include/asm/thread_info.h
326     index c980a02a52bc..598c8d60fa5e 100644
327     --- a/arch/parisc/include/asm/thread_info.h
328     +++ b/arch/parisc/include/asm/thread_info.h
329     @@ -35,7 +35,12 @@ struct thread_info {
330    
331     /* thread information allocation */
332    
333     +#ifdef CONFIG_IRQSTACKS
334     +#define THREAD_SIZE_ORDER 2 /* PA-RISC requires at least 16k stack */
335     +#else
336     #define THREAD_SIZE_ORDER 3 /* PA-RISC requires at least 32k stack */
337     +#endif
338     +
339     /* Be sure to hunt all references to this down when you change the size of
340     * the kernel stack */
341     #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
342     diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c
343     index e45b5f10645a..e9149d05d30b 100644
344     --- a/arch/powerpc/platforms/pseries/dlpar.c
345     +++ b/arch/powerpc/platforms/pseries/dlpar.c
346     @@ -586,11 +586,26 @@ static ssize_t dlpar_show(struct class *class, struct class_attribute *attr,
347    
348     static CLASS_ATTR_RW(dlpar);
349    
350     -static int __init pseries_dlpar_init(void)
351     +int __init dlpar_workqueue_init(void)
352     {
353     + if (pseries_hp_wq)
354     + return 0;
355     +
356     pseries_hp_wq = alloc_workqueue("pseries hotplug workqueue",
357     - WQ_UNBOUND, 1);
358     + WQ_UNBOUND, 1);
359     +
360     + return pseries_hp_wq ? 0 : -ENOMEM;
361     +}
362     +
363     +static int __init dlpar_sysfs_init(void)
364     +{
365     + int rc;
366     +
367     + rc = dlpar_workqueue_init();
368     + if (rc)
369     + return rc;
370     +
371     return sysfs_create_file(kernel_kobj, &class_attr_dlpar.attr);
372     }
373     -machine_device_initcall(pseries, pseries_dlpar_init);
374     +machine_device_initcall(pseries, dlpar_sysfs_init);
375    
376     diff --git a/arch/powerpc/platforms/pseries/pseries.h b/arch/powerpc/platforms/pseries/pseries.h
377     index 4470a3194311..1ae1d9f4dbe9 100644
378     --- a/arch/powerpc/platforms/pseries/pseries.h
379     +++ b/arch/powerpc/platforms/pseries/pseries.h
380     @@ -98,4 +98,6 @@ static inline unsigned long cmo_get_page_size(void)
381     return CMO_PageSize;
382     }
383    
384     +int dlpar_workqueue_init(void);
385     +
386     #endif /* _PSERIES_PSERIES_H */
387     diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
388     index 4923ffe230cf..5e1ef9150182 100644
389     --- a/arch/powerpc/platforms/pseries/ras.c
390     +++ b/arch/powerpc/platforms/pseries/ras.c
391     @@ -48,6 +48,28 @@ static irqreturn_t ras_epow_interrupt(int irq, void *dev_id);
392     static irqreturn_t ras_error_interrupt(int irq, void *dev_id);
393    
394    
395     +/*
396     + * Enable the hotplug interrupt late because processing them may touch other
397     + * devices or systems (e.g. hugepages) that have not been initialized at the
398     + * subsys stage.
399     + */
400     +int __init init_ras_hotplug_IRQ(void)
401     +{
402     + struct device_node *np;
403     +
404     + /* Hotplug Events */
405     + np = of_find_node_by_path("/event-sources/hot-plug-events");
406     + if (np != NULL) {
407     + if (dlpar_workqueue_init() == 0)
408     + request_event_sources_irqs(np, ras_hotplug_interrupt,
409     + "RAS_HOTPLUG");
410     + of_node_put(np);
411     + }
412     +
413     + return 0;
414     +}
415     +machine_late_initcall(pseries, init_ras_hotplug_IRQ);
416     +
417     /*
418     * Initialize handlers for the set of interrupts caused by hardware errors
419     * and power system events.
420     @@ -66,14 +88,6 @@ static int __init init_ras_IRQ(void)
421     of_node_put(np);
422     }
423    
424     - /* Hotplug Events */
425     - np = of_find_node_by_path("/event-sources/hot-plug-events");
426     - if (np != NULL) {
427     - request_event_sources_irqs(np, ras_hotplug_interrupt,
428     - "RAS_HOTPLUG");
429     - of_node_put(np);
430     - }
431     -
432     /* EPOW Events */
433     np = of_find_node_by_path("/event-sources/epow-events");
434     if (np != NULL) {
435     diff --git a/arch/sh/boards/mach-se/770x/setup.c b/arch/sh/boards/mach-se/770x/setup.c
436     index 77c35350ee77..b7fa7a87e946 100644
437     --- a/arch/sh/boards/mach-se/770x/setup.c
438     +++ b/arch/sh/boards/mach-se/770x/setup.c
439     @@ -9,6 +9,7 @@
440     */
441     #include <linux/init.h>
442     #include <linux/platform_device.h>
443     +#include <linux/sh_eth.h>
444     #include <mach-se/mach/se.h>
445     #include <mach-se/mach/mrshpc.h>
446     #include <asm/machvec.h>
447     @@ -115,6 +116,11 @@ static struct platform_device heartbeat_device = {
448     #if defined(CONFIG_CPU_SUBTYPE_SH7710) ||\
449     defined(CONFIG_CPU_SUBTYPE_SH7712)
450     /* SH771X Ethernet driver */
451     +static struct sh_eth_plat_data sh_eth_plat = {
452     + .phy = PHY_ID,
453     + .phy_interface = PHY_INTERFACE_MODE_MII,
454     +};
455     +
456     static struct resource sh_eth0_resources[] = {
457     [0] = {
458     .start = SH_ETH0_BASE,
459     @@ -132,7 +138,7 @@ static struct platform_device sh_eth0_device = {
460     .name = "sh771x-ether",
461     .id = 0,
462     .dev = {
463     - .platform_data = PHY_ID,
464     + .platform_data = &sh_eth_plat,
465     },
466     .num_resources = ARRAY_SIZE(sh_eth0_resources),
467     .resource = sh_eth0_resources,
468     @@ -155,7 +161,7 @@ static struct platform_device sh_eth1_device = {
469     .name = "sh771x-ether",
470     .id = 1,
471     .dev = {
472     - .platform_data = PHY_ID,
473     + .platform_data = &sh_eth_plat,
474     },
475     .num_resources = ARRAY_SIZE(sh_eth1_resources),
476     .resource = sh_eth1_resources,
477     diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
478     index 1c2558430cf0..56457cb73448 100644
479     --- a/arch/x86/events/intel/core.c
480     +++ b/arch/x86/events/intel/core.c
481     @@ -3847,6 +3847,8 @@ static struct attribute *intel_pmu_attrs[] = {
482    
483     __init int intel_pmu_init(void)
484     {
485     + struct attribute **extra_attr = NULL;
486     + struct attribute **to_free = NULL;
487     union cpuid10_edx edx;
488     union cpuid10_eax eax;
489     union cpuid10_ebx ebx;
490     @@ -3854,7 +3856,6 @@ __init int intel_pmu_init(void)
491     unsigned int unused;
492     struct extra_reg *er;
493     int version, i;
494     - struct attribute **extra_attr = NULL;
495     char *name;
496    
497     if (!cpu_has(&boot_cpu_data, X86_FEATURE_ARCH_PERFMON)) {
498     @@ -4294,6 +4295,7 @@ __init int intel_pmu_init(void)
499     extra_attr = boot_cpu_has(X86_FEATURE_RTM) ?
500     hsw_format_attr : nhm_format_attr;
501     extra_attr = merge_attr(extra_attr, skl_format_attr);
502     + to_free = extra_attr;
503     x86_pmu.cpu_events = get_hsw_events_attrs();
504     intel_pmu_pebs_data_source_skl(
505     boot_cpu_data.x86_model == INTEL_FAM6_SKYLAKE_X);
506     @@ -4401,6 +4403,7 @@ __init int intel_pmu_init(void)
507     pr_cont("full-width counters, ");
508     }
509    
510     + kfree(to_free);
511     return 0;
512     }
513    
514     diff --git a/arch/x86/include/asm/asm.h b/arch/x86/include/asm/asm.h
515     index 219faaec51df..386a6900e206 100644
516     --- a/arch/x86/include/asm/asm.h
517     +++ b/arch/x86/include/asm/asm.h
518     @@ -136,6 +136,7 @@
519     #endif
520    
521     #ifndef __ASSEMBLY__
522     +#ifndef __BPF__
523     /*
524     * This output constraint should be used for any inline asm which has a "call"
525     * instruction. Otherwise the asm may be inserted before the frame pointer
526     @@ -145,5 +146,6 @@
527     register unsigned long current_stack_pointer asm(_ASM_SP);
528     #define ASM_CALL_CONSTRAINT "+r" (current_stack_pointer)
529     #endif
530     +#endif
531    
532     #endif /* _ASM_X86_ASM_H */
533     diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
534     index e84cb4c75cd0..c54361a22f59 100644
535     --- a/arch/x86/kernel/setup.c
536     +++ b/arch/x86/kernel/setup.c
537     @@ -928,9 +928,6 @@ void __init setup_arch(char **cmdline_p)
538     set_bit(EFI_BOOT, &efi.flags);
539     set_bit(EFI_64BIT, &efi.flags);
540     }
541     -
542     - if (efi_enabled(EFI_BOOT))
543     - efi_memblock_x86_reserve_range();
544     #endif
545    
546     x86_init.oem.arch_setup();
547     @@ -984,6 +981,8 @@ void __init setup_arch(char **cmdline_p)
548    
549     parse_early_param();
550    
551     + if (efi_enabled(EFI_BOOT))
552     + efi_memblock_x86_reserve_range();
553     #ifdef CONFIG_MEMORY_HOTPLUG
554     /*
555     * Memory used by the kernel cannot be hot-removed because Linux
556     diff --git a/arch/x86/kernel/stacktrace.c b/arch/x86/kernel/stacktrace.c
557     index 60244bfaf88f..4565f31bd398 100644
558     --- a/arch/x86/kernel/stacktrace.c
559     +++ b/arch/x86/kernel/stacktrace.c
560     @@ -160,8 +160,12 @@ int save_stack_trace_tsk_reliable(struct task_struct *tsk,
561     {
562     int ret;
563    
564     + /*
565     + * If the task doesn't have a stack (e.g., a zombie), the stack is
566     + * "reliably" empty.
567     + */
568     if (!try_get_task_stack(tsk))
569     - return -EINVAL;
570     + return 0;
571    
572     ret = __save_stack_trace_reliable(trace, tsk);
573    
574     diff --git a/arch/x86/platform/intel-mid/device_libs/platform_bt.c b/arch/x86/platform/intel-mid/device_libs/platform_bt.c
575     index dc036e511f48..5a0483e7bf66 100644
576     --- a/arch/x86/platform/intel-mid/device_libs/platform_bt.c
577     +++ b/arch/x86/platform/intel-mid/device_libs/platform_bt.c
578     @@ -60,7 +60,7 @@ static int __init tng_bt_sfi_setup(struct bt_sfi_data *ddata)
579     return 0;
580     }
581    
582     -static const struct bt_sfi_data tng_bt_sfi_data __initdata = {
583     +static struct bt_sfi_data tng_bt_sfi_data __initdata = {
584     .setup = tng_bt_sfi_setup,
585     };
586    
587     diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
588     index d669e9d89001..c9081c6671f0 100644
589     --- a/arch/x86/xen/enlighten.c
590     +++ b/arch/x86/xen/enlighten.c
591     @@ -1,8 +1,12 @@
592     +#ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG
593     +#include <linux/bootmem.h>
594     +#endif
595     #include <linux/cpu.h>
596     #include <linux/kexec.h>
597    
598     #include <xen/features.h>
599     #include <xen/page.h>
600     +#include <xen/interface/memory.h>
601    
602     #include <asm/xen/hypercall.h>
603     #include <asm/xen/hypervisor.h>
604     @@ -331,3 +335,80 @@ void xen_arch_unregister_cpu(int num)
605     }
606     EXPORT_SYMBOL(xen_arch_unregister_cpu);
607     #endif
608     +
609     +#ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG
610     +void __init arch_xen_balloon_init(struct resource *hostmem_resource)
611     +{
612     + struct xen_memory_map memmap;
613     + int rc;
614     + unsigned int i, last_guest_ram;
615     + phys_addr_t max_addr = PFN_PHYS(max_pfn);
616     + struct e820_table *xen_e820_table;
617     + const struct e820_entry *entry;
618     + struct resource *res;
619     +
620     + if (!xen_initial_domain())
621     + return;
622     +
623     + xen_e820_table = kmalloc(sizeof(*xen_e820_table), GFP_KERNEL);
624     + if (!xen_e820_table)
625     + return;
626     +
627     + memmap.nr_entries = ARRAY_SIZE(xen_e820_table->entries);
628     + set_xen_guest_handle(memmap.buffer, xen_e820_table->entries);
629     + rc = HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap);
630     + if (rc) {
631     + pr_warn("%s: Can't read host e820 (%d)\n", __func__, rc);
632     + goto out;
633     + }
634     +
635     + last_guest_ram = 0;
636     + for (i = 0; i < memmap.nr_entries; i++) {
637     + if (xen_e820_table->entries[i].addr >= max_addr)
638     + break;
639     + if (xen_e820_table->entries[i].type == E820_TYPE_RAM)
640     + last_guest_ram = i;
641     + }
642     +
643     + entry = &xen_e820_table->entries[last_guest_ram];
644     + if (max_addr >= entry->addr + entry->size)
645     + goto out; /* No unallocated host RAM. */
646     +
647     + hostmem_resource->start = max_addr;
648     + hostmem_resource->end = entry->addr + entry->size;
649     +
650     + /*
651     + * Mark non-RAM regions between the end of dom0 RAM and end of host RAM
652     + * as unavailable. The rest of that region can be used for hotplug-based
653     + * ballooning.
654     + */
655     + for (; i < memmap.nr_entries; i++) {
656     + entry = &xen_e820_table->entries[i];
657     +
658     + if (entry->type == E820_TYPE_RAM)
659     + continue;
660     +
661     + if (entry->addr >= hostmem_resource->end)
662     + break;
663     +
664     + res = kzalloc(sizeof(*res), GFP_KERNEL);
665     + if (!res)
666     + goto out;
667     +
668     + res->name = "Unavailable host RAM";
669     + res->start = entry->addr;
670     + res->end = (entry->addr + entry->size < hostmem_resource->end) ?
671     + entry->addr + entry->size : hostmem_resource->end;
672     + rc = insert_resource(hostmem_resource, res);
673     + if (rc) {
674     + pr_warn("%s: Can't insert [%llx - %llx) (%d)\n",
675     + __func__, res->start, res->end, rc);
676     + kfree(res);
677     + goto out;
678     + }
679     + }
680     +
681     + out:
682     + kfree(xen_e820_table);
683     +}
684     +#endif /* CONFIG_XEN_BALLOON_MEMORY_HOTPLUG */
685     diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c
686     index 899a22a02e95..f896c2975545 100644
687     --- a/arch/x86/xen/enlighten_pv.c
688     +++ b/arch/x86/xen/enlighten_pv.c
689     @@ -88,6 +88,8 @@
690     #include "multicalls.h"
691     #include "pmu.h"
692    
693     +#include "../kernel/cpu/cpu.h" /* get_cpu_cap() */
694     +
695     void *xen_initial_gdt;
696    
697     static int xen_cpu_up_prepare_pv(unsigned int cpu);
698     @@ -1257,6 +1259,7 @@ asmlinkage __visible void __init xen_start_kernel(void)
699     __userpte_alloc_gfp &= ~__GFP_HIGHMEM;
700    
701     /* Work out if we support NX */
702     + get_cpu_cap(&boot_cpu_data);
703     x86_configure_nx();
704    
705     /* Get mfn list */
706     diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c
707     index d0b943a6b117..042e9c422b21 100644
708     --- a/arch/x86/xen/mmu_pv.c
709     +++ b/arch/x86/xen/mmu_pv.c
710     @@ -1902,6 +1902,18 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
711     /* Graft it onto L4[511][510] */
712     copy_page(level2_kernel_pgt, l2);
713    
714     + /*
715     + * Zap execute permission from the ident map. Due to the sharing of
716     + * L1 entries we need to do this in the L2.
717     + */
718     + if (__supported_pte_mask & _PAGE_NX) {
719     + for (i = 0; i < PTRS_PER_PMD; ++i) {
720     + if (pmd_none(level2_ident_pgt[i]))
721     + continue;
722     + level2_ident_pgt[i] = pmd_set_flags(level2_ident_pgt[i], _PAGE_NX);
723     + }
724     + }
725     +
726     /* Copy the initial P->M table mappings if necessary. */
727     i = pgd_index(xen_start_info->mfn_list);
728     if (i && i < pgd_index(__START_KERNEL_map))
729     diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
730     index c114ca767b3b..6e0d2086eacb 100644
731     --- a/arch/x86/xen/setup.c
732     +++ b/arch/x86/xen/setup.c
733     @@ -808,7 +808,6 @@ char * __init xen_memory_setup(void)
734     addr = xen_e820_table.entries[0].addr;
735     size = xen_e820_table.entries[0].size;
736     while (i < xen_e820_table.nr_entries) {
737     - bool discard = false;
738    
739     chunk_size = size;
740     type = xen_e820_table.entries[i].type;
741     @@ -824,11 +823,10 @@ char * __init xen_memory_setup(void)
742     xen_add_extra_mem(pfn_s, n_pfns);
743     xen_max_p2m_pfn = pfn_s + n_pfns;
744     } else
745     - discard = true;
746     + type = E820_TYPE_UNUSABLE;
747     }
748    
749     - if (!discard)
750     - xen_align_and_add_e820_region(addr, chunk_size, type);
751     + xen_align_and_add_e820_region(addr, chunk_size, type);
752    
753     addr += chunk_size;
754     size -= chunk_size;
755     diff --git a/block/blk-core.c b/block/blk-core.c
756     index f3750389e351..95b7ea996ac2 100644
757     --- a/block/blk-core.c
758     +++ b/block/blk-core.c
759     @@ -531,6 +531,13 @@ static void __blk_drain_queue(struct request_queue *q, bool drain_all)
760     }
761     }
762    
763     +void blk_drain_queue(struct request_queue *q)
764     +{
765     + spin_lock_irq(q->queue_lock);
766     + __blk_drain_queue(q, true);
767     + spin_unlock_irq(q->queue_lock);
768     +}
769     +
770     /**
771     * blk_queue_bypass_start - enter queue bypass mode
772     * @q: queue of interest
773     @@ -655,8 +662,6 @@ void blk_cleanup_queue(struct request_queue *q)
774     */
775     blk_freeze_queue(q);
776     spin_lock_irq(lock);
777     - if (!q->mq_ops)
778     - __blk_drain_queue(q, true);
779     queue_flag_set(QUEUE_FLAG_DEAD, q);
780     spin_unlock_irq(lock);
781    
782     diff --git a/block/blk-mq.c b/block/blk-mq.c
783     index 98a18609755e..b60798a30ea2 100644
784     --- a/block/blk-mq.c
785     +++ b/block/blk-mq.c
786     @@ -159,6 +159,8 @@ void blk_freeze_queue(struct request_queue *q)
787     * exported to drivers as the only user for unfreeze is blk_mq.
788     */
789     blk_freeze_queue_start(q);
790     + if (!q->mq_ops)
791     + blk_drain_queue(q);
792     blk_mq_freeze_queue_wait(q);
793     }
794    
795     diff --git a/block/blk.h b/block/blk.h
796     index 85be8b232b37..b2c287c2c6a3 100644
797     --- a/block/blk.h
798     +++ b/block/blk.h
799     @@ -362,4 +362,6 @@ static inline void blk_queue_bounce(struct request_queue *q, struct bio **bio)
800     }
801     #endif /* CONFIG_BOUNCE */
802    
803     +extern void blk_drain_queue(struct request_queue *q);
804     +
805     #endif /* BLK_INTERNAL_H */
806     diff --git a/crypto/af_alg.c b/crypto/af_alg.c
807     index 53b7fa4cf4ab..4e4640bb82b9 100644
808     --- a/crypto/af_alg.c
809     +++ b/crypto/af_alg.c
810     @@ -693,7 +693,7 @@ void af_alg_free_areq_sgls(struct af_alg_async_req *areq)
811     unsigned int i;
812    
813     list_for_each_entry_safe(rsgl, tmp, &areq->rsgl_list, list) {
814     - ctx->rcvused -= rsgl->sg_num_bytes;
815     + atomic_sub(rsgl->sg_num_bytes, &ctx->rcvused);
816     af_alg_free_sg(&rsgl->sgl);
817     list_del(&rsgl->list);
818     if (rsgl != &areq->first_rsgl)
819     @@ -1192,7 +1192,7 @@ int af_alg_get_rsgl(struct sock *sk, struct msghdr *msg, int flags,
820    
821     areq->last_rsgl = rsgl;
822     len += err;
823     - ctx->rcvused += err;
824     + atomic_add(err, &ctx->rcvused);
825     rsgl->sg_num_bytes = err;
826     iov_iter_advance(&msg->msg_iter, err);
827     }
828     diff --git a/crypto/algif_aead.c b/crypto/algif_aead.c
829     index 782cb8fec323..f138af18b500 100644
830     --- a/crypto/algif_aead.c
831     +++ b/crypto/algif_aead.c
832     @@ -571,7 +571,7 @@ static int aead_accept_parent_nokey(void *private, struct sock *sk)
833     INIT_LIST_HEAD(&ctx->tsgl_list);
834     ctx->len = len;
835     ctx->used = 0;
836     - ctx->rcvused = 0;
837     + atomic_set(&ctx->rcvused, 0);
838     ctx->more = 0;
839     ctx->merge = 0;
840     ctx->enc = 0;
841     diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
842     index 7a3e663d54d5..90bc4e0f0785 100644
843     --- a/crypto/algif_skcipher.c
844     +++ b/crypto/algif_skcipher.c
845     @@ -391,7 +391,7 @@ static int skcipher_accept_parent_nokey(void *private, struct sock *sk)
846     INIT_LIST_HEAD(&ctx->tsgl_list);
847     ctx->len = len;
848     ctx->used = 0;
849     - ctx->rcvused = 0;
850     + atomic_set(&ctx->rcvused, 0);
851     ctx->more = 0;
852     ctx->merge = 0;
853     ctx->enc = 0;
854     diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c
855     index 89ba9e85c0f3..4bcef78a08aa 100644
856     --- a/drivers/crypto/inside-secure/safexcel.c
857     +++ b/drivers/crypto/inside-secure/safexcel.c
858     @@ -607,6 +607,7 @@ static inline void safexcel_handle_result_descriptor(struct safexcel_crypto_priv
859     ndesc = ctx->handle_result(priv, ring, sreq->req,
860     &should_complete, &ret);
861     if (ndesc < 0) {
862     + kfree(sreq);
863     dev_err(priv->dev, "failed to handle result (%d)", ndesc);
864     return;
865     }
866     diff --git a/drivers/crypto/inside-secure/safexcel_cipher.c b/drivers/crypto/inside-secure/safexcel_cipher.c
867     index 5438552bc6d7..fcc0a606d748 100644
868     --- a/drivers/crypto/inside-secure/safexcel_cipher.c
869     +++ b/drivers/crypto/inside-secure/safexcel_cipher.c
870     @@ -14,6 +14,7 @@
871    
872     #include <crypto/aes.h>
873     #include <crypto/skcipher.h>
874     +#include <crypto/internal/skcipher.h>
875    
876     #include "safexcel.h"
877    
878     @@ -33,6 +34,10 @@ struct safexcel_cipher_ctx {
879     unsigned int key_len;
880     };
881    
882     +struct safexcel_cipher_req {
883     + bool needs_inv;
884     +};
885     +
886     static void safexcel_cipher_token(struct safexcel_cipher_ctx *ctx,
887     struct crypto_async_request *async,
888     struct safexcel_command_desc *cdesc,
889     @@ -126,9 +131,9 @@ static int safexcel_context_control(struct safexcel_cipher_ctx *ctx,
890     return 0;
891     }
892    
893     -static int safexcel_handle_result(struct safexcel_crypto_priv *priv, int ring,
894     - struct crypto_async_request *async,
895     - bool *should_complete, int *ret)
896     +static int safexcel_handle_req_result(struct safexcel_crypto_priv *priv, int ring,
897     + struct crypto_async_request *async,
898     + bool *should_complete, int *ret)
899     {
900     struct skcipher_request *req = skcipher_request_cast(async);
901     struct safexcel_result_desc *rdesc;
902     @@ -265,7 +270,6 @@ static int safexcel_aes_send(struct crypto_async_request *async,
903     spin_unlock_bh(&priv->ring[ring].egress_lock);
904    
905     request->req = &req->base;
906     - ctx->base.handle_result = safexcel_handle_result;
907    
908     *commands = n_cdesc;
909     *results = n_rdesc;
910     @@ -341,8 +345,6 @@ static int safexcel_handle_inv_result(struct safexcel_crypto_priv *priv,
911    
912     ring = safexcel_select_ring(priv);
913     ctx->base.ring = ring;
914     - ctx->base.needs_inv = false;
915     - ctx->base.send = safexcel_aes_send;
916    
917     spin_lock_bh(&priv->ring[ring].queue_lock);
918     enq_ret = crypto_enqueue_request(&priv->ring[ring].queue, async);
919     @@ -359,6 +361,26 @@ static int safexcel_handle_inv_result(struct safexcel_crypto_priv *priv,
920     return ndesc;
921     }
922    
923     +static int safexcel_handle_result(struct safexcel_crypto_priv *priv, int ring,
924     + struct crypto_async_request *async,
925     + bool *should_complete, int *ret)
926     +{
927     + struct skcipher_request *req = skcipher_request_cast(async);
928     + struct safexcel_cipher_req *sreq = skcipher_request_ctx(req);
929     + int err;
930     +
931     + if (sreq->needs_inv) {
932     + sreq->needs_inv = false;
933     + err = safexcel_handle_inv_result(priv, ring, async,
934     + should_complete, ret);
935     + } else {
936     + err = safexcel_handle_req_result(priv, ring, async,
937     + should_complete, ret);
938     + }
939     +
940     + return err;
941     +}
942     +
943     static int safexcel_cipher_send_inv(struct crypto_async_request *async,
944     int ring, struct safexcel_request *request,
945     int *commands, int *results)
946     @@ -368,8 +390,6 @@ static int safexcel_cipher_send_inv(struct crypto_async_request *async,
947     struct safexcel_crypto_priv *priv = ctx->priv;
948     int ret;
949    
950     - ctx->base.handle_result = safexcel_handle_inv_result;
951     -
952     ret = safexcel_invalidate_cache(async, &ctx->base, priv,
953     ctx->base.ctxr_dma, ring, request);
954     if (unlikely(ret))
955     @@ -381,28 +401,46 @@ static int safexcel_cipher_send_inv(struct crypto_async_request *async,
956     return 0;
957     }
958    
959     +static int safexcel_send(struct crypto_async_request *async,
960     + int ring, struct safexcel_request *request,
961     + int *commands, int *results)
962     +{
963     + struct skcipher_request *req = skcipher_request_cast(async);
964     + struct safexcel_cipher_req *sreq = skcipher_request_ctx(req);
965     + int ret;
966     +
967     + if (sreq->needs_inv)
968     + ret = safexcel_cipher_send_inv(async, ring, request,
969     + commands, results);
970     + else
971     + ret = safexcel_aes_send(async, ring, request,
972     + commands, results);
973     + return ret;
974     +}
975     +
976     static int safexcel_cipher_exit_inv(struct crypto_tfm *tfm)
977     {
978     struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm);
979     struct safexcel_crypto_priv *priv = ctx->priv;
980     - struct skcipher_request req;
981     + SKCIPHER_REQUEST_ON_STACK(req, __crypto_skcipher_cast(tfm));
982     + struct safexcel_cipher_req *sreq = skcipher_request_ctx(req);
983     struct safexcel_inv_result result = {};
984     int ring = ctx->base.ring;
985    
986     - memset(&req, 0, sizeof(struct skcipher_request));
987     + memset(req, 0, sizeof(struct skcipher_request));
988    
989     /* create invalidation request */
990     init_completion(&result.completion);
991     - skcipher_request_set_callback(&req, CRYPTO_TFM_REQ_MAY_BACKLOG,
992     - safexcel_inv_complete, &result);
993     + skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
994     + safexcel_inv_complete, &result);
995    
996     - skcipher_request_set_tfm(&req, __crypto_skcipher_cast(tfm));
997     - ctx = crypto_tfm_ctx(req.base.tfm);
998     + skcipher_request_set_tfm(req, __crypto_skcipher_cast(tfm));
999     + ctx = crypto_tfm_ctx(req->base.tfm);
1000     ctx->base.exit_inv = true;
1001     - ctx->base.send = safexcel_cipher_send_inv;
1002     + sreq->needs_inv = true;
1003    
1004     spin_lock_bh(&priv->ring[ring].queue_lock);
1005     - crypto_enqueue_request(&priv->ring[ring].queue, &req.base);
1006     + crypto_enqueue_request(&priv->ring[ring].queue, &req->base);
1007     spin_unlock_bh(&priv->ring[ring].queue_lock);
1008    
1009     if (!priv->ring[ring].need_dequeue)
1010     @@ -424,19 +462,21 @@ static int safexcel_aes(struct skcipher_request *req,
1011     enum safexcel_cipher_direction dir, u32 mode)
1012     {
1013     struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
1014     + struct safexcel_cipher_req *sreq = skcipher_request_ctx(req);
1015     struct safexcel_crypto_priv *priv = ctx->priv;
1016     int ret, ring;
1017    
1018     + sreq->needs_inv = false;
1019     ctx->direction = dir;
1020     ctx->mode = mode;
1021    
1022     if (ctx->base.ctxr) {
1023     - if (ctx->base.needs_inv)
1024     - ctx->base.send = safexcel_cipher_send_inv;
1025     + if (ctx->base.needs_inv) {
1026     + sreq->needs_inv = true;
1027     + ctx->base.needs_inv = false;
1028     + }
1029     } else {
1030     ctx->base.ring = safexcel_select_ring(priv);
1031     - ctx->base.send = safexcel_aes_send;
1032     -
1033     ctx->base.ctxr = dma_pool_zalloc(priv->context_pool,
1034     EIP197_GFP_FLAGS(req->base),
1035     &ctx->base.ctxr_dma);
1036     @@ -476,6 +516,11 @@ static int safexcel_skcipher_cra_init(struct crypto_tfm *tfm)
1037     alg.skcipher.base);
1038    
1039     ctx->priv = tmpl->priv;
1040     + ctx->base.send = safexcel_send;
1041     + ctx->base.handle_result = safexcel_handle_result;
1042     +
1043     + crypto_skcipher_set_reqsize(__crypto_skcipher_cast(tfm),
1044     + sizeof(struct safexcel_cipher_req));
1045    
1046     return 0;
1047     }
1048     diff --git a/drivers/crypto/inside-secure/safexcel_hash.c b/drivers/crypto/inside-secure/safexcel_hash.c
1049     index 0626b33d2886..d626aa485a76 100644
1050     --- a/drivers/crypto/inside-secure/safexcel_hash.c
1051     +++ b/drivers/crypto/inside-secure/safexcel_hash.c
1052     @@ -32,6 +32,7 @@ struct safexcel_ahash_req {
1053     bool last_req;
1054     bool finish;
1055     bool hmac;
1056     + bool needs_inv;
1057    
1058     int nents;
1059    
1060     @@ -121,9 +122,9 @@ static void safexcel_context_control(struct safexcel_ahash_ctx *ctx,
1061     }
1062     }
1063    
1064     -static int safexcel_handle_result(struct safexcel_crypto_priv *priv, int ring,
1065     - struct crypto_async_request *async,
1066     - bool *should_complete, int *ret)
1067     +static int safexcel_handle_req_result(struct safexcel_crypto_priv *priv, int ring,
1068     + struct crypto_async_request *async,
1069     + bool *should_complete, int *ret)
1070     {
1071     struct safexcel_result_desc *rdesc;
1072     struct ahash_request *areq = ahash_request_cast(async);
1073     @@ -169,9 +170,9 @@ static int safexcel_handle_result(struct safexcel_crypto_priv *priv, int ring,
1074     return 1;
1075     }
1076    
1077     -static int safexcel_ahash_send(struct crypto_async_request *async, int ring,
1078     - struct safexcel_request *request, int *commands,
1079     - int *results)
1080     +static int safexcel_ahash_send_req(struct crypto_async_request *async, int ring,
1081     + struct safexcel_request *request,
1082     + int *commands, int *results)
1083     {
1084     struct ahash_request *areq = ahash_request_cast(async);
1085     struct crypto_ahash *ahash = crypto_ahash_reqtfm(areq);
1086     @@ -310,7 +311,6 @@ static int safexcel_ahash_send(struct crypto_async_request *async, int ring,
1087    
1088     req->processed += len;
1089     request->req = &areq->base;
1090     - ctx->base.handle_result = safexcel_handle_result;
1091    
1092     *commands = n_cdesc;
1093     *results = 1;
1094     @@ -394,8 +394,6 @@ static int safexcel_handle_inv_result(struct safexcel_crypto_priv *priv,
1095    
1096     ring = safexcel_select_ring(priv);
1097     ctx->base.ring = ring;
1098     - ctx->base.needs_inv = false;
1099     - ctx->base.send = safexcel_ahash_send;
1100    
1101     spin_lock_bh(&priv->ring[ring].queue_lock);
1102     enq_ret = crypto_enqueue_request(&priv->ring[ring].queue, async);
1103     @@ -412,6 +410,26 @@ static int safexcel_handle_inv_result(struct safexcel_crypto_priv *priv,
1104     return 1;
1105     }
1106    
1107     +static int safexcel_handle_result(struct safexcel_crypto_priv *priv, int ring,
1108     + struct crypto_async_request *async,
1109     + bool *should_complete, int *ret)
1110     +{
1111     + struct ahash_request *areq = ahash_request_cast(async);
1112     + struct safexcel_ahash_req *req = ahash_request_ctx(areq);
1113     + int err;
1114     +
1115     + if (req->needs_inv) {
1116     + req->needs_inv = false;
1117     + err = safexcel_handle_inv_result(priv, ring, async,
1118     + should_complete, ret);
1119     + } else {
1120     + err = safexcel_handle_req_result(priv, ring, async,
1121     + should_complete, ret);
1122     + }
1123     +
1124     + return err;
1125     +}
1126     +
1127     static int safexcel_ahash_send_inv(struct crypto_async_request *async,
1128     int ring, struct safexcel_request *request,
1129     int *commands, int *results)
1130     @@ -420,7 +438,6 @@ static int safexcel_ahash_send_inv(struct crypto_async_request *async,
1131     struct safexcel_ahash_ctx *ctx = crypto_ahash_ctx(crypto_ahash_reqtfm(areq));
1132     int ret;
1133    
1134     - ctx->base.handle_result = safexcel_handle_inv_result;
1135     ret = safexcel_invalidate_cache(async, &ctx->base, ctx->priv,
1136     ctx->base.ctxr_dma, ring, request);
1137     if (unlikely(ret))
1138     @@ -432,28 +449,46 @@ static int safexcel_ahash_send_inv(struct crypto_async_request *async,
1139     return 0;
1140     }
1141    
1142     +static int safexcel_ahash_send(struct crypto_async_request *async,
1143     + int ring, struct safexcel_request *request,
1144     + int *commands, int *results)
1145     +{
1146     + struct ahash_request *areq = ahash_request_cast(async);
1147     + struct safexcel_ahash_req *req = ahash_request_ctx(areq);
1148     + int ret;
1149     +
1150     + if (req->needs_inv)
1151     + ret = safexcel_ahash_send_inv(async, ring, request,
1152     + commands, results);
1153     + else
1154     + ret = safexcel_ahash_send_req(async, ring, request,
1155     + commands, results);
1156     + return ret;
1157     +}
1158     +
1159     static int safexcel_ahash_exit_inv(struct crypto_tfm *tfm)
1160     {
1161     struct safexcel_ahash_ctx *ctx = crypto_tfm_ctx(tfm);
1162     struct safexcel_crypto_priv *priv = ctx->priv;
1163     - struct ahash_request req;
1164     + AHASH_REQUEST_ON_STACK(req, __crypto_ahash_cast(tfm));
1165     + struct safexcel_ahash_req *rctx = ahash_request_ctx(req);
1166     struct safexcel_inv_result result = {};
1167     int ring = ctx->base.ring;
1168    
1169     - memset(&req, 0, sizeof(struct ahash_request));
1170     + memset(req, 0, sizeof(struct ahash_request));
1171    
1172     /* create invalidation request */
1173     init_completion(&result.completion);
1174     - ahash_request_set_callback(&req, CRYPTO_TFM_REQ_MAY_BACKLOG,
1175     + ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
1176     safexcel_inv_complete, &result);
1177    
1178     - ahash_request_set_tfm(&req, __crypto_ahash_cast(tfm));
1179     - ctx = crypto_tfm_ctx(req.base.tfm);
1180     + ahash_request_set_tfm(req, __crypto_ahash_cast(tfm));
1181     + ctx = crypto_tfm_ctx(req->base.tfm);
1182     ctx->base.exit_inv = true;
1183     - ctx->base.send = safexcel_ahash_send_inv;
1184     + rctx->needs_inv = true;
1185    
1186     spin_lock_bh(&priv->ring[ring].queue_lock);
1187     - crypto_enqueue_request(&priv->ring[ring].queue, &req.base);
1188     + crypto_enqueue_request(&priv->ring[ring].queue, &req->base);
1189     spin_unlock_bh(&priv->ring[ring].queue_lock);
1190    
1191     if (!priv->ring[ring].need_dequeue)
1192     @@ -501,14 +536,16 @@ static int safexcel_ahash_enqueue(struct ahash_request *areq)
1193     struct safexcel_crypto_priv *priv = ctx->priv;
1194     int ret, ring;
1195    
1196     - ctx->base.send = safexcel_ahash_send;
1197     + req->needs_inv = false;
1198    
1199     if (req->processed && ctx->digest == CONTEXT_CONTROL_DIGEST_PRECOMPUTED)
1200     ctx->base.needs_inv = safexcel_ahash_needs_inv_get(areq);
1201    
1202     if (ctx->base.ctxr) {
1203     - if (ctx->base.needs_inv)
1204     - ctx->base.send = safexcel_ahash_send_inv;
1205     + if (ctx->base.needs_inv) {
1206     + ctx->base.needs_inv = false;
1207     + req->needs_inv = true;
1208     + }
1209     } else {
1210     ctx->base.ring = safexcel_select_ring(priv);
1211     ctx->base.ctxr = dma_pool_zalloc(priv->context_pool,
1212     @@ -642,6 +679,8 @@ static int safexcel_ahash_cra_init(struct crypto_tfm *tfm)
1213     struct safexcel_alg_template, alg.ahash);
1214    
1215     ctx->priv = tmpl->priv;
1216     + ctx->base.send = safexcel_ahash_send;
1217     + ctx->base.handle_result = safexcel_handle_result;
1218    
1219     crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm),
1220     sizeof(struct safexcel_ahash_req));
1221     diff --git a/drivers/dma/fsl-edma.c b/drivers/dma/fsl-edma.c
1222     index 6775f2c74e25..c7568869284e 100644
1223     --- a/drivers/dma/fsl-edma.c
1224     +++ b/drivers/dma/fsl-edma.c
1225     @@ -863,11 +863,11 @@ static void fsl_edma_irq_exit(
1226     }
1227     }
1228    
1229     -static void fsl_disable_clocks(struct fsl_edma_engine *fsl_edma)
1230     +static void fsl_disable_clocks(struct fsl_edma_engine *fsl_edma, int nr_clocks)
1231     {
1232     int i;
1233    
1234     - for (i = 0; i < DMAMUX_NR; i++)
1235     + for (i = 0; i < nr_clocks; i++)
1236     clk_disable_unprepare(fsl_edma->muxclk[i]);
1237     }
1238    
1239     @@ -904,25 +904,25 @@ static int fsl_edma_probe(struct platform_device *pdev)
1240    
1241     res = platform_get_resource(pdev, IORESOURCE_MEM, 1 + i);
1242     fsl_edma->muxbase[i] = devm_ioremap_resource(&pdev->dev, res);
1243     - if (IS_ERR(fsl_edma->muxbase[i]))
1244     + if (IS_ERR(fsl_edma->muxbase[i])) {
1245     + /* on error: disable all previously enabled clks */
1246     + fsl_disable_clocks(fsl_edma, i);
1247     return PTR_ERR(fsl_edma->muxbase[i]);
1248     + }
1249    
1250     sprintf(clkname, "dmamux%d", i);
1251     fsl_edma->muxclk[i] = devm_clk_get(&pdev->dev, clkname);
1252     if (IS_ERR(fsl_edma->muxclk[i])) {
1253     dev_err(&pdev->dev, "Missing DMAMUX block clock.\n");
1254     + /* on error: disable all previously enabled clks */
1255     + fsl_disable_clocks(fsl_edma, i);
1256     return PTR_ERR(fsl_edma->muxclk[i]);
1257     }
1258    
1259     ret = clk_prepare_enable(fsl_edma->muxclk[i]);
1260     - if (ret) {
1261     - /* disable only clks which were enabled on error */
1262     - for (; i >= 0; i--)
1263     - clk_disable_unprepare(fsl_edma->muxclk[i]);
1264     -
1265     - dev_err(&pdev->dev, "DMAMUX clk block failed.\n");
1266     - return ret;
1267     - }
1268     + if (ret)
1269     + /* on error: disable all previously enabled clks */
1270     + fsl_disable_clocks(fsl_edma, i);
1271    
1272     }
1273    
1274     @@ -976,7 +976,7 @@ static int fsl_edma_probe(struct platform_device *pdev)
1275     if (ret) {
1276     dev_err(&pdev->dev,
1277     "Can't register Freescale eDMA engine. (%d)\n", ret);
1278     - fsl_disable_clocks(fsl_edma);
1279     + fsl_disable_clocks(fsl_edma, DMAMUX_NR);
1280     return ret;
1281     }
1282    
1283     @@ -985,7 +985,7 @@ static int fsl_edma_probe(struct platform_device *pdev)
1284     dev_err(&pdev->dev,
1285     "Can't register Freescale eDMA of_dma. (%d)\n", ret);
1286     dma_async_device_unregister(&fsl_edma->dma_dev);
1287     - fsl_disable_clocks(fsl_edma);
1288     + fsl_disable_clocks(fsl_edma, DMAMUX_NR);
1289     return ret;
1290     }
1291    
1292     @@ -1015,7 +1015,7 @@ static int fsl_edma_remove(struct platform_device *pdev)
1293     fsl_edma_cleanup_vchan(&fsl_edma->dma_dev);
1294     of_dma_controller_free(np);
1295     dma_async_device_unregister(&fsl_edma->dma_dev);
1296     - fsl_disable_clocks(fsl_edma);
1297     + fsl_disable_clocks(fsl_edma, DMAMUX_NR);
1298    
1299     return 0;
1300     }
1301     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
1302     index 46485692db48..059db50109bc 100644
1303     --- a/drivers/gpu/drm/i915/intel_display.c
1304     +++ b/drivers/gpu/drm/i915/intel_display.c
1305     @@ -13240,7 +13240,7 @@ intel_primary_plane_create(struct drm_i915_private *dev_priv, enum pipe pipe)
1306     primary->frontbuffer_bit = INTEL_FRONTBUFFER_PRIMARY(pipe);
1307     primary->check_plane = intel_check_primary_plane;
1308    
1309     - if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) {
1310     + if (INTEL_GEN(dev_priv) >= 10) {
1311     intel_primary_formats = skl_primary_formats;
1312     num_formats = ARRAY_SIZE(skl_primary_formats);
1313     modifiers = skl_format_modifiers_ccs;
1314     diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
1315     index a4cb82495cee..245c946ea661 100644
1316     --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
1317     +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c
1318     @@ -136,6 +136,13 @@ nvkm_pci_init(struct nvkm_subdev *subdev)
1319     return ret;
1320    
1321     pci->irq = pdev->irq;
1322     +
1323     + /* Ensure MSI interrupts are armed, for the case where there are
1324     + * already interrupts pending (for whatever reason) at load time.
1325     + */
1326     + if (pci->msi)
1327     + pci->func->msi_rearm(pci);
1328     +
1329     return ret;
1330     }
1331    
1332     diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
1333     index 871599826773..91f9263f3c3b 100644
1334     --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
1335     +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
1336     @@ -821,6 +821,8 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
1337     pr_info("Initializing pool allocator\n");
1338    
1339     _manager = kzalloc(sizeof(*_manager), GFP_KERNEL);
1340     + if (!_manager)
1341     + return -ENOMEM;
1342    
1343     ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc");
1344    
1345     diff --git a/drivers/infiniband/core/core_priv.h b/drivers/infiniband/core/core_priv.h
1346     index a1d687a664f8..66f0268f37a6 100644
1347     --- a/drivers/infiniband/core/core_priv.h
1348     +++ b/drivers/infiniband/core/core_priv.h
1349     @@ -314,7 +314,7 @@ static inline int ib_mad_enforce_security(struct ib_mad_agent_private *map,
1350     }
1351     #endif
1352    
1353     -struct ib_device *__ib_device_get_by_index(u32 ifindex);
1354     +struct ib_device *ib_device_get_by_index(u32 ifindex);
1355     /* RDMA device netlink */
1356     void nldev_init(void);
1357     void nldev_exit(void);
1358     diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
1359     index b4b28ff8b7dc..d7d042a20ab4 100644
1360     --- a/drivers/infiniband/core/device.c
1361     +++ b/drivers/infiniband/core/device.c
1362     @@ -134,7 +134,7 @@ static int ib_device_check_mandatory(struct ib_device *device)
1363     return 0;
1364     }
1365    
1366     -struct ib_device *__ib_device_get_by_index(u32 index)
1367     +static struct ib_device *__ib_device_get_by_index(u32 index)
1368     {
1369     struct ib_device *device;
1370    
1371     @@ -145,6 +145,22 @@ struct ib_device *__ib_device_get_by_index(u32 index)
1372     return NULL;
1373     }
1374    
1375     +/*
1376     + * Caller is responsible to return refrerence count by calling put_device()
1377     + */
1378     +struct ib_device *ib_device_get_by_index(u32 index)
1379     +{
1380     + struct ib_device *device;
1381     +
1382     + down_read(&lists_rwsem);
1383     + device = __ib_device_get_by_index(index);
1384     + if (device)
1385     + get_device(&device->dev);
1386     +
1387     + up_read(&lists_rwsem);
1388     + return device;
1389     +}
1390     +
1391     static struct ib_device *__ib_device_get_by_name(const char *name)
1392     {
1393     struct ib_device *device;
1394     diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c
1395     index 9a05245a1acf..0dcd1aa6f683 100644
1396     --- a/drivers/infiniband/core/nldev.c
1397     +++ b/drivers/infiniband/core/nldev.c
1398     @@ -142,27 +142,34 @@ static int nldev_get_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
1399    
1400     index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
1401    
1402     - device = __ib_device_get_by_index(index);
1403     + device = ib_device_get_by_index(index);
1404     if (!device)
1405     return -EINVAL;
1406    
1407     msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
1408     - if (!msg)
1409     - return -ENOMEM;
1410     + if (!msg) {
1411     + err = -ENOMEM;
1412     + goto err;
1413     + }
1414    
1415     nlh = nlmsg_put(msg, NETLINK_CB(skb).portid, nlh->nlmsg_seq,
1416     RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_GET),
1417     0, 0);
1418    
1419     err = fill_dev_info(msg, device);
1420     - if (err) {
1421     - nlmsg_free(msg);
1422     - return err;
1423     - }
1424     + if (err)
1425     + goto err_free;
1426    
1427     nlmsg_end(msg, nlh);
1428    
1429     + put_device(&device->dev);
1430     return rdma_nl_unicast(msg, NETLINK_CB(skb).portid);
1431     +
1432     +err_free:
1433     + nlmsg_free(msg);
1434     +err:
1435     + put_device(&device->dev);
1436     + return err;
1437     }
1438    
1439     static int _nldev_get_dumpit(struct ib_device *device,
1440     @@ -220,31 +227,40 @@ static int nldev_port_get_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
1441     return -EINVAL;
1442    
1443     index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
1444     - device = __ib_device_get_by_index(index);
1445     + device = ib_device_get_by_index(index);
1446     if (!device)
1447     return -EINVAL;
1448    
1449     port = nla_get_u32(tb[RDMA_NLDEV_ATTR_PORT_INDEX]);
1450     - if (!rdma_is_port_valid(device, port))
1451     - return -EINVAL;
1452     + if (!rdma_is_port_valid(device, port)) {
1453     + err = -EINVAL;
1454     + goto err;
1455     + }
1456    
1457     msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
1458     - if (!msg)
1459     - return -ENOMEM;
1460     + if (!msg) {
1461     + err = -ENOMEM;
1462     + goto err;
1463     + }
1464    
1465     nlh = nlmsg_put(msg, NETLINK_CB(skb).portid, nlh->nlmsg_seq,
1466     RDMA_NL_GET_TYPE(RDMA_NL_NLDEV, RDMA_NLDEV_CMD_GET),
1467     0, 0);
1468    
1469     err = fill_port_info(msg, device, port);
1470     - if (err) {
1471     - nlmsg_free(msg);
1472     - return err;
1473     - }
1474     + if (err)
1475     + goto err_free;
1476    
1477     nlmsg_end(msg, nlh);
1478     + put_device(&device->dev);
1479    
1480     return rdma_nl_unicast(msg, NETLINK_CB(skb).portid);
1481     +
1482     +err_free:
1483     + nlmsg_free(msg);
1484     +err:
1485     + put_device(&device->dev);
1486     + return err;
1487     }
1488    
1489     static int nldev_port_get_dumpit(struct sk_buff *skb,
1490     @@ -265,7 +281,7 @@ static int nldev_port_get_dumpit(struct sk_buff *skb,
1491     return -EINVAL;
1492    
1493     ifindex = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]);
1494     - device = __ib_device_get_by_index(ifindex);
1495     + device = ib_device_get_by_index(ifindex);
1496     if (!device)
1497     return -EINVAL;
1498    
1499     @@ -299,7 +315,9 @@ static int nldev_port_get_dumpit(struct sk_buff *skb,
1500     nlmsg_end(skb, nlh);
1501     }
1502    
1503     -out: cb->args[0] = idx;
1504     +out:
1505     + put_device(&device->dev);
1506     + cb->args[0] = idx;
1507     return skb->len;
1508     }
1509    
1510     diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c
1511     index e6f77f63da75..e80a7f764a74 100644
1512     --- a/drivers/infiniband/hw/mlx4/mr.c
1513     +++ b/drivers/infiniband/hw/mlx4/mr.c
1514     @@ -406,7 +406,6 @@ struct ib_mr *mlx4_ib_alloc_mr(struct ib_pd *pd,
1515     goto err_free_mr;
1516    
1517     mr->max_pages = max_num_sg;
1518     -
1519     err = mlx4_mr_enable(dev->dev, &mr->mmr);
1520     if (err)
1521     goto err_free_pl;
1522     @@ -417,6 +416,7 @@ struct ib_mr *mlx4_ib_alloc_mr(struct ib_pd *pd,
1523     return &mr->ibmr;
1524    
1525     err_free_pl:
1526     + mr->ibmr.device = pd->device;
1527     mlx4_free_priv_pages(mr);
1528     err_free_mr:
1529     (void) mlx4_mr_free(dev->dev, &mr->mmr);
1530     diff --git a/drivers/infiniband/hw/mlx5/mr.c b/drivers/infiniband/hw/mlx5/mr.c
1531     index 37bbc543847a..231b043e2806 100644
1532     --- a/drivers/infiniband/hw/mlx5/mr.c
1533     +++ b/drivers/infiniband/hw/mlx5/mr.c
1534     @@ -1637,6 +1637,7 @@ struct ib_mr *mlx5_ib_alloc_mr(struct ib_pd *pd,
1535     MLX5_SET(mkc, mkc, access_mode, mr->access_mode);
1536     MLX5_SET(mkc, mkc, umr_en, 1);
1537    
1538     + mr->ibmr.device = pd->device;
1539     err = mlx5_core_create_mkey(dev->mdev, &mr->mmkey, in, inlen);
1540     if (err)
1541     goto err_destroy_psv;
1542     diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c
1543     index ed34d5a581fa..d7162f2b7979 100644
1544     --- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c
1545     +++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c
1546     @@ -406,6 +406,13 @@ static void pvrdma_free_qp(struct pvrdma_qp *qp)
1547     atomic_dec(&qp->refcnt);
1548     wait_event(qp->wait, !atomic_read(&qp->refcnt));
1549    
1550     + if (!qp->is_kernel) {
1551     + if (qp->rumem)
1552     + ib_umem_release(qp->rumem);
1553     + if (qp->sumem)
1554     + ib_umem_release(qp->sumem);
1555     + }
1556     +
1557     pvrdma_page_dir_cleanup(dev, &qp->pdir);
1558    
1559     kfree(qp);
1560     diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
1561     index dcc77014018d..f6935811ef3f 100644
1562     --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
1563     +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
1564     @@ -903,8 +903,8 @@ static int path_rec_start(struct net_device *dev,
1565     return 0;
1566     }
1567    
1568     -static void neigh_add_path(struct sk_buff *skb, u8 *daddr,
1569     - struct net_device *dev)
1570     +static struct ipoib_neigh *neigh_add_path(struct sk_buff *skb, u8 *daddr,
1571     + struct net_device *dev)
1572     {
1573     struct ipoib_dev_priv *priv = ipoib_priv(dev);
1574     struct rdma_netdev *rn = netdev_priv(dev);
1575     @@ -918,7 +918,15 @@ static void neigh_add_path(struct sk_buff *skb, u8 *daddr,
1576     spin_unlock_irqrestore(&priv->lock, flags);
1577     ++dev->stats.tx_dropped;
1578     dev_kfree_skb_any(skb);
1579     - return;
1580     + return NULL;
1581     + }
1582     +
1583     + /* To avoid race condition, make sure that the
1584     + * neigh will be added only once.
1585     + */
1586     + if (unlikely(!list_empty(&neigh->list))) {
1587     + spin_unlock_irqrestore(&priv->lock, flags);
1588     + return neigh;
1589     }
1590    
1591     path = __path_find(dev, daddr + 4);
1592     @@ -957,7 +965,7 @@ static void neigh_add_path(struct sk_buff *skb, u8 *daddr,
1593     path->ah->last_send = rn->send(dev, skb, path->ah->ah,
1594     IPOIB_QPN(daddr));
1595     ipoib_neigh_put(neigh);
1596     - return;
1597     + return NULL;
1598     }
1599     } else {
1600     neigh->ah = NULL;
1601     @@ -974,7 +982,7 @@ static void neigh_add_path(struct sk_buff *skb, u8 *daddr,
1602    
1603     spin_unlock_irqrestore(&priv->lock, flags);
1604     ipoib_neigh_put(neigh);
1605     - return;
1606     + return NULL;
1607    
1608     err_path:
1609     ipoib_neigh_free(neigh);
1610     @@ -984,6 +992,8 @@ static void neigh_add_path(struct sk_buff *skb, u8 *daddr,
1611    
1612     spin_unlock_irqrestore(&priv->lock, flags);
1613     ipoib_neigh_put(neigh);
1614     +
1615     + return NULL;
1616     }
1617    
1618     static void unicast_arp_send(struct sk_buff *skb, struct net_device *dev,
1619     @@ -1092,8 +1102,9 @@ static int ipoib_start_xmit(struct sk_buff *skb, struct net_device *dev)
1620     case htons(ETH_P_TIPC):
1621     neigh = ipoib_neigh_get(dev, phdr->hwaddr);
1622     if (unlikely(!neigh)) {
1623     - neigh_add_path(skb, phdr->hwaddr, dev);
1624     - return NETDEV_TX_OK;
1625     + neigh = neigh_add_path(skb, phdr->hwaddr, dev);
1626     + if (likely(!neigh))
1627     + return NETDEV_TX_OK;
1628     }
1629     break;
1630     case htons(ETH_P_ARP):
1631     diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
1632     index 93e149efc1f5..9b3f47ae2016 100644
1633     --- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
1634     +++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
1635     @@ -816,7 +816,10 @@ void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb)
1636     spin_lock_irqsave(&priv->lock, flags);
1637     if (!neigh) {
1638     neigh = ipoib_neigh_alloc(daddr, dev);
1639     - if (neigh) {
1640     + /* Make sure that the neigh will be added only
1641     + * once to mcast list.
1642     + */
1643     + if (neigh && list_empty(&neigh->list)) {
1644     kref_get(&mcast->ah->ref);
1645     neigh->ah = mcast->ah;
1646     list_add_tail(&neigh->list, &mcast->neigh_list);
1647     diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
1648     index 6bf56bb5f8d9..d91f3b1c5375 100644
1649     --- a/drivers/input/misc/xen-kbdfront.c
1650     +++ b/drivers/input/misc/xen-kbdfront.c
1651     @@ -326,8 +326,6 @@ static int xenkbd_probe(struct xenbus_device *dev,
1652     0, width, 0, 0);
1653     input_set_abs_params(mtouch, ABS_MT_POSITION_Y,
1654     0, height, 0, 0);
1655     - input_set_abs_params(mtouch, ABS_MT_PRESSURE,
1656     - 0, 255, 0, 0);
1657    
1658     ret = input_mt_init_slots(mtouch, num_cont, INPUT_MT_DIRECT);
1659     if (ret) {
1660     diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c
1661     index ef1360445413..9ce6b32f52a1 100644
1662     --- a/drivers/leds/led-core.c
1663     +++ b/drivers/leds/led-core.c
1664     @@ -189,6 +189,7 @@ void led_blink_set(struct led_classdev *led_cdev,
1665     {
1666     del_timer_sync(&led_cdev->blink_timer);
1667    
1668     + clear_bit(LED_BLINK_SW, &led_cdev->work_flags);
1669     clear_bit(LED_BLINK_ONESHOT, &led_cdev->work_flags);
1670     clear_bit(LED_BLINK_ONESHOT_STOP, &led_cdev->work_flags);
1671    
1672     diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c
1673     index edf24c148fa6..2a978d9832a7 100644
1674     --- a/drivers/mtd/nand/brcmnand/brcmnand.c
1675     +++ b/drivers/mtd/nand/brcmnand/brcmnand.c
1676     @@ -1763,7 +1763,7 @@ static int brcmnand_read(struct mtd_info *mtd, struct nand_chip *chip,
1677     err = brcmstb_nand_verify_erased_page(mtd, chip, buf,
1678     addr);
1679     /* erased page bitflips corrected */
1680     - if (err > 0)
1681     + if (err >= 0)
1682     return err;
1683     }
1684    
1685     diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
1686     index 50f8d4a1b983..d4d824ef64e9 100644
1687     --- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
1688     +++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
1689     @@ -1067,9 +1067,6 @@ static int gpmi_ecc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
1690     return ret;
1691     }
1692    
1693     - /* handle the block mark swapping */
1694     - block_mark_swapping(this, payload_virt, auxiliary_virt);
1695     -
1696     /* Loop over status bytes, accumulating ECC status. */
1697     status = auxiliary_virt + nfc_geo->auxiliary_status_offset;
1698    
1699     @@ -1158,6 +1155,9 @@ static int gpmi_ecc_read_page(struct mtd_info *mtd, struct nand_chip *chip,
1700     max_bitflips = max_t(unsigned int, max_bitflips, *status);
1701     }
1702    
1703     + /* handle the block mark swapping */
1704     + block_mark_swapping(this, buf, auxiliary_virt);
1705     +
1706     if (oob_required) {
1707     /*
1708     * It's time to deliver the OOB bytes. See gpmi_ecc_read_oob()
1709     diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
1710     index c4d1140116ea..ed8a2a7ce500 100644
1711     --- a/drivers/net/can/flexcan.c
1712     +++ b/drivers/net/can/flexcan.c
1713     @@ -526,7 +526,7 @@ static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev)
1714     data = be32_to_cpup((__be32 *)&cf->data[0]);
1715     flexcan_write(data, &priv->tx_mb->data[0]);
1716     }
1717     - if (cf->can_dlc > 3) {
1718     + if (cf->can_dlc > 4) {
1719     data = be32_to_cpup((__be32 *)&cf->data[4]);
1720     flexcan_write(data, &priv->tx_mb->data[1]);
1721     }
1722     diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
1723     index c6bd5e24005d..67df5053dc30 100644
1724     --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
1725     +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
1726     @@ -1565,7 +1565,7 @@ static int ena_rss_configure(struct ena_adapter *adapter)
1727    
1728     static int ena_up_complete(struct ena_adapter *adapter)
1729     {
1730     - int rc, i;
1731     + int rc;
1732    
1733     rc = ena_rss_configure(adapter);
1734     if (rc)
1735     @@ -1584,17 +1584,6 @@ static int ena_up_complete(struct ena_adapter *adapter)
1736    
1737     ena_napi_enable_all(adapter);
1738    
1739     - /* Enable completion queues interrupt */
1740     - for (i = 0; i < adapter->num_queues; i++)
1741     - ena_unmask_interrupt(&adapter->tx_ring[i],
1742     - &adapter->rx_ring[i]);
1743     -
1744     - /* schedule napi in case we had pending packets
1745     - * from the last time we disable napi
1746     - */
1747     - for (i = 0; i < adapter->num_queues; i++)
1748     - napi_schedule(&adapter->ena_napi[i].napi);
1749     -
1750     return 0;
1751     }
1752    
1753     @@ -1731,7 +1720,7 @@ static int ena_create_all_io_rx_queues(struct ena_adapter *adapter)
1754    
1755     static int ena_up(struct ena_adapter *adapter)
1756     {
1757     - int rc;
1758     + int rc, i;
1759    
1760     netdev_dbg(adapter->netdev, "%s\n", __func__);
1761    
1762     @@ -1774,6 +1763,17 @@ static int ena_up(struct ena_adapter *adapter)
1763    
1764     set_bit(ENA_FLAG_DEV_UP, &adapter->flags);
1765    
1766     + /* Enable completion queues interrupt */
1767     + for (i = 0; i < adapter->num_queues; i++)
1768     + ena_unmask_interrupt(&adapter->tx_ring[i],
1769     + &adapter->rx_ring[i]);
1770     +
1771     + /* schedule napi in case we had pending packets
1772     + * from the last time we disable napi
1773     + */
1774     + for (i = 0; i < adapter->num_queues; i++)
1775     + napi_schedule(&adapter->ena_napi[i].napi);
1776     +
1777     return rc;
1778    
1779     err_up:
1780     diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_hw.h b/drivers/net/ethernet/aquantia/atlantic/aq_hw.h
1781     index 0207927dc8a6..4ebd53b3c7da 100644
1782     --- a/drivers/net/ethernet/aquantia/atlantic/aq_hw.h
1783     +++ b/drivers/net/ethernet/aquantia/atlantic/aq_hw.h
1784     @@ -85,7 +85,9 @@ struct aq_hw_ops {
1785     void (*destroy)(struct aq_hw_s *self);
1786    
1787     int (*get_hw_caps)(struct aq_hw_s *self,
1788     - struct aq_hw_caps_s *aq_hw_caps);
1789     + struct aq_hw_caps_s *aq_hw_caps,
1790     + unsigned short device,
1791     + unsigned short subsystem_device);
1792    
1793     int (*hw_ring_tx_xmit)(struct aq_hw_s *self, struct aq_ring_s *aq_ring,
1794     unsigned int frags);
1795     diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
1796     index 483e97691eea..c93e5613d4cc 100644
1797     --- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
1798     +++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c
1799     @@ -222,7 +222,7 @@ static struct net_device *aq_nic_ndev_alloc(void)
1800    
1801     struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops,
1802     const struct ethtool_ops *et_ops,
1803     - struct device *dev,
1804     + struct pci_dev *pdev,
1805     struct aq_pci_func_s *aq_pci_func,
1806     unsigned int port,
1807     const struct aq_hw_ops *aq_hw_ops)
1808     @@ -242,7 +242,7 @@ struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops,
1809     ndev->netdev_ops = ndev_ops;
1810     ndev->ethtool_ops = et_ops;
1811    
1812     - SET_NETDEV_DEV(ndev, dev);
1813     + SET_NETDEV_DEV(ndev, &pdev->dev);
1814    
1815     ndev->if_port = port;
1816     self->ndev = ndev;
1817     @@ -254,7 +254,8 @@ struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops,
1818    
1819     self->aq_hw = self->aq_hw_ops.create(aq_pci_func, self->port,
1820     &self->aq_hw_ops);
1821     - err = self->aq_hw_ops.get_hw_caps(self->aq_hw, &self->aq_hw_caps);
1822     + err = self->aq_hw_ops.get_hw_caps(self->aq_hw, &self->aq_hw_caps,
1823     + pdev->device, pdev->subsystem_device);
1824     if (err < 0)
1825     goto err_exit;
1826    
1827     diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
1828     index 4309983acdd6..3c9f8db03d5f 100644
1829     --- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
1830     +++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
1831     @@ -71,7 +71,7 @@ struct aq_nic_cfg_s {
1832    
1833     struct aq_nic_s *aq_nic_alloc_cold(const struct net_device_ops *ndev_ops,
1834     const struct ethtool_ops *et_ops,
1835     - struct device *dev,
1836     + struct pci_dev *pdev,
1837     struct aq_pci_func_s *aq_pci_func,
1838     unsigned int port,
1839     const struct aq_hw_ops *aq_hw_ops);
1840     diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c b/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
1841     index cadaa646c89f..58c29d04b186 100644
1842     --- a/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
1843     +++ b/drivers/net/ethernet/aquantia/atlantic/aq_pci_func.c
1844     @@ -51,7 +51,8 @@ struct aq_pci_func_s *aq_pci_func_alloc(struct aq_hw_ops *aq_hw_ops,
1845     pci_set_drvdata(pdev, self);
1846     self->pdev = pdev;
1847    
1848     - err = aq_hw_ops->get_hw_caps(NULL, &self->aq_hw_caps);
1849     + err = aq_hw_ops->get_hw_caps(NULL, &self->aq_hw_caps, pdev->device,
1850     + pdev->subsystem_device);
1851     if (err < 0)
1852     goto err_exit;
1853    
1854     @@ -59,7 +60,7 @@ struct aq_pci_func_s *aq_pci_func_alloc(struct aq_hw_ops *aq_hw_ops,
1855    
1856     for (port = 0; port < self->ports; ++port) {
1857     struct aq_nic_s *aq_nic = aq_nic_alloc_cold(ndev_ops, eth_ops,
1858     - &pdev->dev, self,
1859     + pdev, self,
1860     port, aq_hw_ops);
1861    
1862     if (!aq_nic) {
1863     diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c
1864     index 07b3c49a16a4..b0abd187cead 100644
1865     --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c
1866     +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_a0.c
1867     @@ -18,9 +18,20 @@
1868     #include "hw_atl_a0_internal.h"
1869    
1870     static int hw_atl_a0_get_hw_caps(struct aq_hw_s *self,
1871     - struct aq_hw_caps_s *aq_hw_caps)
1872     + struct aq_hw_caps_s *aq_hw_caps,
1873     + unsigned short device,
1874     + unsigned short subsystem_device)
1875     {
1876     memcpy(aq_hw_caps, &hw_atl_a0_hw_caps_, sizeof(*aq_hw_caps));
1877     +
1878     + if (device == HW_ATL_DEVICE_ID_D108 && subsystem_device == 0x0001)
1879     + aq_hw_caps->link_speed_msk &= ~HW_ATL_A0_RATE_10G;
1880     +
1881     + if (device == HW_ATL_DEVICE_ID_D109 && subsystem_device == 0x0001) {
1882     + aq_hw_caps->link_speed_msk &= ~HW_ATL_A0_RATE_10G;
1883     + aq_hw_caps->link_speed_msk &= ~HW_ATL_A0_RATE_5G;
1884     + }
1885     +
1886     return 0;
1887     }
1888    
1889     diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
1890     index ec68c20efcbd..36fddb199160 100644
1891     --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
1892     +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c
1893     @@ -16,11 +16,23 @@
1894     #include "hw_atl_utils.h"
1895     #include "hw_atl_llh.h"
1896     #include "hw_atl_b0_internal.h"
1897     +#include "hw_atl_llh_internal.h"
1898    
1899     static int hw_atl_b0_get_hw_caps(struct aq_hw_s *self,
1900     - struct aq_hw_caps_s *aq_hw_caps)
1901     + struct aq_hw_caps_s *aq_hw_caps,
1902     + unsigned short device,
1903     + unsigned short subsystem_device)
1904     {
1905     memcpy(aq_hw_caps, &hw_atl_b0_hw_caps_, sizeof(*aq_hw_caps));
1906     +
1907     + if (device == HW_ATL_DEVICE_ID_D108 && subsystem_device == 0x0001)
1908     + aq_hw_caps->link_speed_msk &= ~HW_ATL_B0_RATE_10G;
1909     +
1910     + if (device == HW_ATL_DEVICE_ID_D109 && subsystem_device == 0x0001) {
1911     + aq_hw_caps->link_speed_msk &= ~HW_ATL_B0_RATE_10G;
1912     + aq_hw_caps->link_speed_msk &= ~HW_ATL_B0_RATE_5G;
1913     + }
1914     +
1915     return 0;
1916     }
1917    
1918     @@ -357,6 +369,7 @@ static int hw_atl_b0_hw_init(struct aq_hw_s *self,
1919     };
1920    
1921     int err = 0;
1922     + u32 val;
1923    
1924     self->aq_nic_cfg = aq_nic_cfg;
1925    
1926     @@ -374,6 +387,16 @@ static int hw_atl_b0_hw_init(struct aq_hw_s *self,
1927     hw_atl_b0_hw_rss_set(self, &aq_nic_cfg->aq_rss);
1928     hw_atl_b0_hw_rss_hash_set(self, &aq_nic_cfg->aq_rss);
1929    
1930     + /* Force limit MRRS on RDM/TDM to 2K */
1931     + val = aq_hw_read_reg(self, pci_reg_control6_adr);
1932     + aq_hw_write_reg(self, pci_reg_control6_adr, (val & ~0x707) | 0x404);
1933     +
1934     + /* TX DMA total request limit. B0 hardware is not capable to
1935     + * handle more than (8K-MRRS) incoming DMA data.
1936     + * Value 24 in 256byte units
1937     + */
1938     + aq_hw_write_reg(self, tx_dma_total_req_limit_adr, 24);
1939     +
1940     err = aq_hw_err_from_flags(self);
1941     if (err < 0)
1942     goto err_exit;
1943     diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
1944     index 5527fc0e5942..93450ec930e8 100644
1945     --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
1946     +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
1947     @@ -2343,6 +2343,9 @@
1948     #define tx_dma_desc_base_addrmsw_adr(descriptor) \
1949     (0x00007c04u + (descriptor) * 0x40)
1950    
1951     +/* tx dma total request limit */
1952     +#define tx_dma_total_req_limit_adr 0x00007b20u
1953     +
1954     /* tx interrupt moderation control register definitions
1955     * Preprocessor definitions for TX Interrupt Moderation Control Register
1956     * Base Address: 0x00008980
1957     @@ -2369,6 +2372,9 @@
1958     /* default value of bitfield reg_res_dsbl */
1959     #define pci_reg_res_dsbl_default 0x1
1960    
1961     +/* PCI core control register */
1962     +#define pci_reg_control6_adr 0x1014u
1963     +
1964     /* global microprocessor scratch pad definitions */
1965     #define glb_cpu_scratch_scp_adr(scratch_scp) (0x00000300u + (scratch_scp) * 0x4)
1966    
1967     diff --git a/drivers/net/ethernet/arc/emac_main.c b/drivers/net/ethernet/arc/emac_main.c
1968     index 3241af1ce718..5b422be56165 100644
1969     --- a/drivers/net/ethernet/arc/emac_main.c
1970     +++ b/drivers/net/ethernet/arc/emac_main.c
1971     @@ -210,39 +210,48 @@ static int arc_emac_rx(struct net_device *ndev, int budget)
1972     continue;
1973     }
1974    
1975     - pktlen = info & LEN_MASK;
1976     - stats->rx_packets++;
1977     - stats->rx_bytes += pktlen;
1978     - skb = rx_buff->skb;
1979     - skb_put(skb, pktlen);
1980     - skb->dev = ndev;
1981     - skb->protocol = eth_type_trans(skb, ndev);
1982     -
1983     - dma_unmap_single(&ndev->dev, dma_unmap_addr(rx_buff, addr),
1984     - dma_unmap_len(rx_buff, len), DMA_FROM_DEVICE);
1985     -
1986     - /* Prepare the BD for next cycle */
1987     - rx_buff->skb = netdev_alloc_skb_ip_align(ndev,
1988     - EMAC_BUFFER_SIZE);
1989     - if (unlikely(!rx_buff->skb)) {
1990     + /* Prepare the BD for next cycle. netif_receive_skb()
1991     + * only if new skb was allocated and mapped to avoid holes
1992     + * in the RX fifo.
1993     + */
1994     + skb = netdev_alloc_skb_ip_align(ndev, EMAC_BUFFER_SIZE);
1995     + if (unlikely(!skb)) {
1996     + if (net_ratelimit())
1997     + netdev_err(ndev, "cannot allocate skb\n");
1998     + /* Return ownership to EMAC */
1999     + rxbd->info = cpu_to_le32(FOR_EMAC | EMAC_BUFFER_SIZE);
2000     stats->rx_errors++;
2001     - /* Because receive_skb is below, increment rx_dropped */
2002     stats->rx_dropped++;
2003     continue;
2004     }
2005    
2006     - /* receive_skb only if new skb was allocated to avoid holes */
2007     - netif_receive_skb(skb);
2008     -
2009     - addr = dma_map_single(&ndev->dev, (void *)rx_buff->skb->data,
2010     + addr = dma_map_single(&ndev->dev, (void *)skb->data,
2011     EMAC_BUFFER_SIZE, DMA_FROM_DEVICE);
2012     if (dma_mapping_error(&ndev->dev, addr)) {
2013     if (net_ratelimit())
2014     - netdev_err(ndev, "cannot dma map\n");
2015     - dev_kfree_skb(rx_buff->skb);
2016     + netdev_err(ndev, "cannot map dma buffer\n");
2017     + dev_kfree_skb(skb);
2018     + /* Return ownership to EMAC */
2019     + rxbd->info = cpu_to_le32(FOR_EMAC | EMAC_BUFFER_SIZE);
2020     stats->rx_errors++;
2021     + stats->rx_dropped++;
2022     continue;
2023     }
2024     +
2025     + /* unmap previosly mapped skb */
2026     + dma_unmap_single(&ndev->dev, dma_unmap_addr(rx_buff, addr),
2027     + dma_unmap_len(rx_buff, len), DMA_FROM_DEVICE);
2028     +
2029     + pktlen = info & LEN_MASK;
2030     + stats->rx_packets++;
2031     + stats->rx_bytes += pktlen;
2032     + skb_put(rx_buff->skb, pktlen);
2033     + rx_buff->skb->dev = ndev;
2034     + rx_buff->skb->protocol = eth_type_trans(rx_buff->skb, ndev);
2035     +
2036     + netif_receive_skb(rx_buff->skb);
2037     +
2038     + rx_buff->skb = skb;
2039     dma_unmap_addr_set(rx_buff, addr, addr);
2040     dma_unmap_len_set(rx_buff, len, EMAC_BUFFER_SIZE);
2041    
2042     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
2043     index 1216c1f1e052..6465414dad74 100644
2044     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
2045     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
2046     @@ -3030,7 +3030,7 @@ int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode, bool keep_link)
2047    
2048     del_timer_sync(&bp->timer);
2049    
2050     - if (IS_PF(bp)) {
2051     + if (IS_PF(bp) && !BP_NOMCP(bp)) {
2052     /* Set ALWAYS_ALIVE bit in shmem */
2053     bp->fw_drv_pulse_wr_seq |= DRV_PULSE_ALWAYS_ALIVE;
2054     bnx2x_drv_pulse(bp);
2055     @@ -3116,7 +3116,7 @@ int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode, bool keep_link)
2056     bp->cnic_loaded = false;
2057    
2058     /* Clear driver version indication in shmem */
2059     - if (IS_PF(bp))
2060     + if (IS_PF(bp) && !BP_NOMCP(bp))
2061     bnx2x_update_mng_version(bp);
2062    
2063     /* Check if there are pending parity attentions. If there are - set
2064     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
2065     index c12b4d3e946e..e855a271db48 100644
2066     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
2067     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
2068     @@ -9578,6 +9578,15 @@ static int bnx2x_init_shmem(struct bnx2x *bp)
2069    
2070     do {
2071     bp->common.shmem_base = REG_RD(bp, MISC_REG_SHARED_MEM_ADDR);
2072     +
2073     + /* If we read all 0xFFs, means we are in PCI error state and
2074     + * should bail out to avoid crashes on adapter's FW reads.
2075     + */
2076     + if (bp->common.shmem_base == 0xFFFFFFFF) {
2077     + bp->flags |= NO_MCP_FLAG;
2078     + return -ENODEV;
2079     + }
2080     +
2081     if (bp->common.shmem_base) {
2082     val = SHMEM_RD(bp, validity_map[BP_PORT(bp)]);
2083     if (val & SHR_MEM_VALIDITY_MB)
2084     @@ -14315,7 +14324,10 @@ static pci_ers_result_t bnx2x_io_slot_reset(struct pci_dev *pdev)
2085     BNX2X_ERR("IO slot reset --> driver unload\n");
2086    
2087     /* MCP should have been reset; Need to wait for validity */
2088     - bnx2x_init_shmem(bp);
2089     + if (bnx2x_init_shmem(bp)) {
2090     + rtnl_unlock();
2091     + return PCI_ERS_RESULT_DISCONNECT;
2092     + }
2093    
2094     if (IS_PF(bp) && SHMEM2_HAS(bp, drv_capabilities_flag)) {
2095     u32 v;
2096     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
2097     index 5ee18660bc33..c9617675f934 100644
2098     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
2099     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
2100     @@ -70,7 +70,7 @@ static int bnxt_vf_ndo_prep(struct bnxt *bp, int vf_id)
2101     netdev_err(bp->dev, "vf ndo called though sriov is disabled\n");
2102     return -EINVAL;
2103     }
2104     - if (vf_id >= bp->pf.max_vfs) {
2105     + if (vf_id >= bp->pf.active_vfs) {
2106     netdev_err(bp->dev, "Invalid VF id %d\n", vf_id);
2107     return -EINVAL;
2108     }
2109     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
2110     index 7dd3d131043a..6a185344b378 100644
2111     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
2112     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
2113     @@ -327,7 +327,7 @@ static int bnxt_hwrm_cfa_flow_alloc(struct bnxt *bp, struct bnxt_tc_flow *flow,
2114     }
2115    
2116     /* If all IP and L4 fields are wildcarded then this is an L2 flow */
2117     - if (is_wildcard(&l3_mask, sizeof(l3_mask)) &&
2118     + if (is_wildcard(l3_mask, sizeof(*l3_mask)) &&
2119     is_wildcard(&flow->l4_mask, sizeof(flow->l4_mask))) {
2120     flow_flags |= CFA_FLOW_ALLOC_REQ_FLAGS_FLOWTYPE_L2;
2121     } else {
2122     diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
2123     index aef3fcf2f5b9..48738eb27806 100644
2124     --- a/drivers/net/ethernet/broadcom/tg3.c
2125     +++ b/drivers/net/ethernet/broadcom/tg3.c
2126     @@ -10052,6 +10052,16 @@ static int tg3_reset_hw(struct tg3 *tp, bool reset_phy)
2127    
2128     tw32(GRC_MODE, tp->grc_mode | val);
2129    
2130     + /* On one of the AMD platform, MRRS is restricted to 4000 because of
2131     + * south bridge limitation. As a workaround, Driver is setting MRRS
2132     + * to 2048 instead of default 4096.
2133     + */
2134     + if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
2135     + tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) {
2136     + val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK;
2137     + tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048);
2138     + }
2139     +
2140     /* Setup the timer prescalar register. Clock is always 66Mhz. */
2141     val = tr32(GRC_MISC_CFG);
2142     val &= ~0xff;
2143     @@ -14229,7 +14239,8 @@ static int tg3_change_mtu(struct net_device *dev, int new_mtu)
2144     */
2145     if (tg3_asic_rev(tp) == ASIC_REV_57766 ||
2146     tg3_asic_rev(tp) == ASIC_REV_5717 ||
2147     - tg3_asic_rev(tp) == ASIC_REV_5719)
2148     + tg3_asic_rev(tp) == ASIC_REV_5719 ||
2149     + tg3_asic_rev(tp) == ASIC_REV_5720)
2150     reset_phy = true;
2151    
2152     err = tg3_restart_hw(tp, reset_phy);
2153     diff --git a/drivers/net/ethernet/broadcom/tg3.h b/drivers/net/ethernet/broadcom/tg3.h
2154     index c2d02d02d1e6..b057f71aed48 100644
2155     --- a/drivers/net/ethernet/broadcom/tg3.h
2156     +++ b/drivers/net/ethernet/broadcom/tg3.h
2157     @@ -96,6 +96,7 @@
2158     #define TG3PCI_SUBDEVICE_ID_DELL_JAGUAR 0x0106
2159     #define TG3PCI_SUBDEVICE_ID_DELL_MERLOT 0x0109
2160     #define TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT 0x010a
2161     +#define TG3PCI_SUBDEVICE_ID_DELL_5762 0x07f0
2162     #define TG3PCI_SUBVENDOR_ID_COMPAQ PCI_VENDOR_ID_COMPAQ
2163     #define TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE 0x007c
2164     #define TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2 0x009a
2165     @@ -281,6 +282,9 @@
2166     #define TG3PCI_STD_RING_PROD_IDX 0x00000098 /* 64-bit */
2167     #define TG3PCI_RCV_RET_RING_CON_IDX 0x000000a0 /* 64-bit */
2168     /* 0xa8 --> 0xb8 unused */
2169     +#define TG3PCI_DEV_STATUS_CTRL 0x000000b4
2170     +#define MAX_READ_REQ_SIZE_2048 0x00004000
2171     +#define MAX_READ_REQ_MASK 0x00007000
2172     #define TG3PCI_DUAL_MAC_CTRL 0x000000b8
2173     #define DUAL_MAC_CTRL_CH_MASK 0x00000003
2174     #define DUAL_MAC_CTRL_ID 0x00000004
2175     diff --git a/drivers/net/ethernet/freescale/gianfar_ptp.c b/drivers/net/ethernet/freescale/gianfar_ptp.c
2176     index 544114281ea7..9f8d4f8e57e3 100644
2177     --- a/drivers/net/ethernet/freescale/gianfar_ptp.c
2178     +++ b/drivers/net/ethernet/freescale/gianfar_ptp.c
2179     @@ -319,11 +319,10 @@ static int ptp_gianfar_adjtime(struct ptp_clock_info *ptp, s64 delta)
2180     now = tmr_cnt_read(etsects);
2181     now += delta;
2182     tmr_cnt_write(etsects, now);
2183     + set_fipers(etsects);
2184    
2185     spin_unlock_irqrestore(&etsects->lock, flags);
2186    
2187     - set_fipers(etsects);
2188     -
2189     return 0;
2190     }
2191    
2192     diff --git a/drivers/net/ethernet/intel/e1000/e1000.h b/drivers/net/ethernet/intel/e1000/e1000.h
2193     index d7bdea79e9fa..8fd2458060a0 100644
2194     --- a/drivers/net/ethernet/intel/e1000/e1000.h
2195     +++ b/drivers/net/ethernet/intel/e1000/e1000.h
2196     @@ -331,7 +331,8 @@ struct e1000_adapter {
2197     enum e1000_state_t {
2198     __E1000_TESTING,
2199     __E1000_RESETTING,
2200     - __E1000_DOWN
2201     + __E1000_DOWN,
2202     + __E1000_DISABLED
2203     };
2204    
2205     #undef pr_fmt
2206     diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
2207     index 1982f7917a8d..3dd4aeb2706d 100644
2208     --- a/drivers/net/ethernet/intel/e1000/e1000_main.c
2209     +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
2210     @@ -945,7 +945,7 @@ static int e1000_init_hw_struct(struct e1000_adapter *adapter,
2211     static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2212     {
2213     struct net_device *netdev;
2214     - struct e1000_adapter *adapter;
2215     + struct e1000_adapter *adapter = NULL;
2216     struct e1000_hw *hw;
2217    
2218     static int cards_found;
2219     @@ -955,6 +955,7 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2220     u16 tmp = 0;
2221     u16 eeprom_apme_mask = E1000_EEPROM_APME;
2222     int bars, need_ioport;
2223     + bool disable_dev = false;
2224    
2225     /* do not allocate ioport bars when not needed */
2226     need_ioport = e1000_is_need_ioport(pdev);
2227     @@ -1259,11 +1260,13 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
2228     iounmap(hw->ce4100_gbe_mdio_base_virt);
2229     iounmap(hw->hw_addr);
2230     err_ioremap:
2231     + disable_dev = !test_and_set_bit(__E1000_DISABLED, &adapter->flags);
2232     free_netdev(netdev);
2233     err_alloc_etherdev:
2234     pci_release_selected_regions(pdev, bars);
2235     err_pci_reg:
2236     - pci_disable_device(pdev);
2237     + if (!adapter || disable_dev)
2238     + pci_disable_device(pdev);
2239     return err;
2240     }
2241    
2242     @@ -1281,6 +1284,7 @@ static void e1000_remove(struct pci_dev *pdev)
2243     struct net_device *netdev = pci_get_drvdata(pdev);
2244     struct e1000_adapter *adapter = netdev_priv(netdev);
2245     struct e1000_hw *hw = &adapter->hw;
2246     + bool disable_dev;
2247    
2248     e1000_down_and_stop(adapter);
2249     e1000_release_manageability(adapter);
2250     @@ -1299,9 +1303,11 @@ static void e1000_remove(struct pci_dev *pdev)
2251     iounmap(hw->flash_address);
2252     pci_release_selected_regions(pdev, adapter->bars);
2253    
2254     + disable_dev = !test_and_set_bit(__E1000_DISABLED, &adapter->flags);
2255     free_netdev(netdev);
2256    
2257     - pci_disable_device(pdev);
2258     + if (disable_dev)
2259     + pci_disable_device(pdev);
2260     }
2261    
2262     /**
2263     @@ -5156,7 +5162,8 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
2264     if (netif_running(netdev))
2265     e1000_free_irq(adapter);
2266    
2267     - pci_disable_device(pdev);
2268     + if (!test_and_set_bit(__E1000_DISABLED, &adapter->flags))
2269     + pci_disable_device(pdev);
2270    
2271     return 0;
2272     }
2273     @@ -5200,6 +5207,10 @@ static int e1000_resume(struct pci_dev *pdev)
2274     pr_err("Cannot enable PCI device from suspend\n");
2275     return err;
2276     }
2277     +
2278     + /* flush memory to make sure state is correct */
2279     + smp_mb__before_atomic();
2280     + clear_bit(__E1000_DISABLED, &adapter->flags);
2281     pci_set_master(pdev);
2282    
2283     pci_enable_wake(pdev, PCI_D3hot, 0);
2284     @@ -5274,7 +5285,9 @@ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
2285    
2286     if (netif_running(netdev))
2287     e1000_down(adapter);
2288     - pci_disable_device(pdev);
2289     +
2290     + if (!test_and_set_bit(__E1000_DISABLED, &adapter->flags))
2291     + pci_disable_device(pdev);
2292    
2293     /* Request a slot slot reset. */
2294     return PCI_ERS_RESULT_NEED_RESET;
2295     @@ -5302,6 +5315,10 @@ static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)
2296     pr_err("Cannot re-enable PCI device after reset.\n");
2297     return PCI_ERS_RESULT_DISCONNECT;
2298     }
2299     +
2300     + /* flush memory to make sure state is correct */
2301     + smp_mb__before_atomic();
2302     + clear_bit(__E1000_DISABLED, &adapter->flags);
2303     pci_set_master(pdev);
2304    
2305     pci_enable_wake(pdev, PCI_D3hot, 0);
2306     diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
2307     index b2cde9b16d82..b1cde1b051a4 100644
2308     --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
2309     +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
2310     @@ -1553,11 +1553,18 @@ static int i40e_set_mac(struct net_device *netdev, void *p)
2311     else
2312     netdev_info(netdev, "set new mac address %pM\n", addr->sa_data);
2313    
2314     + /* Copy the address first, so that we avoid a possible race with
2315     + * .set_rx_mode(). If we copy after changing the address in the filter
2316     + * list, we might open ourselves to a narrow race window where
2317     + * .set_rx_mode could delete our dev_addr filter and prevent traffic
2318     + * from passing.
2319     + */
2320     + ether_addr_copy(netdev->dev_addr, addr->sa_data);
2321     +
2322     spin_lock_bh(&vsi->mac_filter_hash_lock);
2323     i40e_del_mac_filter(vsi, netdev->dev_addr);
2324     i40e_add_mac_filter(vsi, addr->sa_data);
2325     spin_unlock_bh(&vsi->mac_filter_hash_lock);
2326     - ether_addr_copy(netdev->dev_addr, addr->sa_data);
2327     if (vsi->type == I40E_VSI_MAIN) {
2328     i40e_status ret;
2329    
2330     @@ -1739,6 +1746,14 @@ static int i40e_addr_unsync(struct net_device *netdev, const u8 *addr)
2331     struct i40e_netdev_priv *np = netdev_priv(netdev);
2332     struct i40e_vsi *vsi = np->vsi;
2333    
2334     + /* Under some circumstances, we might receive a request to delete
2335     + * our own device address from our uc list. Because we store the
2336     + * device address in the VSI's MAC/VLAN filter list, we need to ignore
2337     + * such requests and not delete our device address from this list.
2338     + */
2339     + if (ether_addr_equal(addr, netdev->dev_addr))
2340     + return 0;
2341     +
2342     i40e_del_mac_filter(vsi, addr);
2343    
2344     return 0;
2345     diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
2346     index 3c07ff171ddc..542c00b1c823 100644
2347     --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
2348     +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
2349     @@ -3048,10 +3048,30 @@ bool __i40e_chk_linearize(struct sk_buff *skb)
2350     /* Walk through fragments adding latest fragment, testing it, and
2351     * then removing stale fragments from the sum.
2352     */
2353     - stale = &skb_shinfo(skb)->frags[0];
2354     - for (;;) {
2355     + for (stale = &skb_shinfo(skb)->frags[0];; stale++) {
2356     + int stale_size = skb_frag_size(stale);
2357     +
2358     sum += skb_frag_size(frag++);
2359    
2360     + /* The stale fragment may present us with a smaller
2361     + * descriptor than the actual fragment size. To account
2362     + * for that we need to remove all the data on the front and
2363     + * figure out what the remainder would be in the last
2364     + * descriptor associated with the fragment.
2365     + */
2366     + if (stale_size > I40E_MAX_DATA_PER_TXD) {
2367     + int align_pad = -(stale->page_offset) &
2368     + (I40E_MAX_READ_REQ_SIZE - 1);
2369     +
2370     + sum -= align_pad;
2371     + stale_size -= align_pad;
2372     +
2373     + do {
2374     + sum -= I40E_MAX_DATA_PER_TXD_ALIGNED;
2375     + stale_size -= I40E_MAX_DATA_PER_TXD_ALIGNED;
2376     + } while (stale_size > I40E_MAX_DATA_PER_TXD);
2377     + }
2378     +
2379     /* if sum is negative we failed to make sufficient progress */
2380     if (sum < 0)
2381     return true;
2382     @@ -3059,7 +3079,7 @@ bool __i40e_chk_linearize(struct sk_buff *skb)
2383     if (!nr_frags--)
2384     break;
2385    
2386     - sum -= skb_frag_size(stale++);
2387     + sum -= stale_size;
2388     }
2389    
2390     return false;
2391     diff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
2392     index 07a4e6e13925..7368b0dc3af8 100644
2393     --- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
2394     +++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
2395     @@ -2014,10 +2014,30 @@ bool __i40evf_chk_linearize(struct sk_buff *skb)
2396     /* Walk through fragments adding latest fragment, testing it, and
2397     * then removing stale fragments from the sum.
2398     */
2399     - stale = &skb_shinfo(skb)->frags[0];
2400     - for (;;) {
2401     + for (stale = &skb_shinfo(skb)->frags[0];; stale++) {
2402     + int stale_size = skb_frag_size(stale);
2403     +
2404     sum += skb_frag_size(frag++);
2405    
2406     + /* The stale fragment may present us with a smaller
2407     + * descriptor than the actual fragment size. To account
2408     + * for that we need to remove all the data on the front and
2409     + * figure out what the remainder would be in the last
2410     + * descriptor associated with the fragment.
2411     + */
2412     + if (stale_size > I40E_MAX_DATA_PER_TXD) {
2413     + int align_pad = -(stale->page_offset) &
2414     + (I40E_MAX_READ_REQ_SIZE - 1);
2415     +
2416     + sum -= align_pad;
2417     + stale_size -= align_pad;
2418     +
2419     + do {
2420     + sum -= I40E_MAX_DATA_PER_TXD_ALIGNED;
2421     + stale_size -= I40E_MAX_DATA_PER_TXD_ALIGNED;
2422     + } while (stale_size > I40E_MAX_DATA_PER_TXD);
2423     + }
2424     +
2425     /* if sum is negative we failed to make sufficient progress */
2426     if (sum < 0)
2427     return true;
2428     @@ -2025,7 +2045,7 @@ bool __i40evf_chk_linearize(struct sk_buff *skb)
2429     if (!nr_frags--)
2430     break;
2431    
2432     - sum -= skb_frag_size(stale++);
2433     + sum -= stale_size;
2434     }
2435    
2436     return false;
2437     diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
2438     index 5e81a7263654..3fd71cf5cd60 100644
2439     --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
2440     +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
2441     @@ -1959,11 +1959,12 @@ static int mtk_hw_init(struct mtk_eth *eth)
2442     /* set GE2 TUNE */
2443     regmap_write(eth->pctl, GPIO_BIAS_CTRL, 0x0);
2444    
2445     - /* GE1, Force 1000M/FD, FC ON */
2446     - mtk_w32(eth, MAC_MCR_FIXED_LINK, MTK_MAC_MCR(0));
2447     -
2448     - /* GE2, Force 1000M/FD, FC ON */
2449     - mtk_w32(eth, MAC_MCR_FIXED_LINK, MTK_MAC_MCR(1));
2450     + /* Set linkdown as the default for each GMAC. Its own MCR would be set
2451     + * up with the more appropriate value when mtk_phy_link_adjust call is
2452     + * being invoked.
2453     + */
2454     + for (i = 0; i < MTK_MAC_COUNT; i++)
2455     + mtk_w32(eth, 0, MTK_MAC_MCR(i));
2456    
2457     /* Indicates CDM to parse the MTK special tag from CPU
2458     * which also is working out for untag packets.
2459     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c b/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c
2460     index 51c4cc00a186..9d64d0759ee9 100644
2461     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c
2462     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c
2463     @@ -259,6 +259,7 @@ int mlx5e_dcbnl_ieee_setets_core(struct mlx5e_priv *priv, struct ieee_ets *ets)
2464     static int mlx5e_dbcnl_validate_ets(struct net_device *netdev,
2465     struct ieee_ets *ets)
2466     {
2467     + bool have_ets_tc = false;
2468     int bw_sum = 0;
2469     int i;
2470    
2471     @@ -273,11 +274,14 @@ static int mlx5e_dbcnl_validate_ets(struct net_device *netdev,
2472     }
2473    
2474     /* Validate Bandwidth Sum */
2475     - for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++)
2476     - if (ets->tc_tsa[i] == IEEE_8021QAZ_TSA_ETS)
2477     + for (i = 0; i < IEEE_8021QAZ_MAX_TCS; i++) {
2478     + if (ets->tc_tsa[i] == IEEE_8021QAZ_TSA_ETS) {
2479     + have_ets_tc = true;
2480     bw_sum += ets->tc_tx_bw[i];
2481     + }
2482     + }
2483    
2484     - if (bw_sum != 0 && bw_sum != 100) {
2485     + if (have_ets_tc && bw_sum != 100) {
2486     netdev_err(netdev,
2487     "Failed to validate ETS: BW sum is illegal\n");
2488     return -EINVAL;
2489     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eq.c b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
2490     index fc606bfd1d6e..eb91de86202b 100644
2491     --- a/drivers/net/ethernet/mellanox/mlx5/core/eq.c
2492     +++ b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
2493     @@ -776,7 +776,7 @@ int mlx5_start_eqs(struct mlx5_core_dev *dev)
2494     return err;
2495     }
2496    
2497     -int mlx5_stop_eqs(struct mlx5_core_dev *dev)
2498     +void mlx5_stop_eqs(struct mlx5_core_dev *dev)
2499     {
2500     struct mlx5_eq_table *table = &dev->priv.eq_table;
2501     int err;
2502     @@ -785,22 +785,26 @@ int mlx5_stop_eqs(struct mlx5_core_dev *dev)
2503     if (MLX5_CAP_GEN(dev, pg)) {
2504     err = mlx5_destroy_unmap_eq(dev, &table->pfault_eq);
2505     if (err)
2506     - return err;
2507     + mlx5_core_err(dev, "failed to destroy page fault eq, err(%d)\n",
2508     + err);
2509     }
2510     #endif
2511    
2512     err = mlx5_destroy_unmap_eq(dev, &table->pages_eq);
2513     if (err)
2514     - return err;
2515     + mlx5_core_err(dev, "failed to destroy pages eq, err(%d)\n",
2516     + err);
2517    
2518     - mlx5_destroy_unmap_eq(dev, &table->async_eq);
2519     + err = mlx5_destroy_unmap_eq(dev, &table->async_eq);
2520     + if (err)
2521     + mlx5_core_err(dev, "failed to destroy async eq, err(%d)\n",
2522     + err);
2523     mlx5_cmd_use_polling(dev);
2524    
2525     err = mlx5_destroy_unmap_eq(dev, &table->cmd_eq);
2526     if (err)
2527     - mlx5_cmd_use_events(dev);
2528     -
2529     - return err;
2530     + mlx5_core_err(dev, "failed to destroy command eq, err(%d)\n",
2531     + err);
2532     }
2533    
2534     int mlx5_core_eq_query(struct mlx5_core_dev *dev, struct mlx5_eq *eq,
2535     diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c
2536     index 23f7d828cf67..6ef20e5cc77d 100644
2537     --- a/drivers/net/ethernet/mellanox/mlxsw/pci.c
2538     +++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c
2539     @@ -1643,7 +1643,12 @@ static int mlxsw_pci_sw_reset(struct mlxsw_pci *mlxsw_pci,
2540     return 0;
2541     }
2542    
2543     - wmb(); /* reset needs to be written before we read control register */
2544     + /* Reset needs to be written before we read control register, and
2545     + * we must wait for the HW to become responsive once again
2546     + */
2547     + wmb();
2548     + msleep(MLXSW_PCI_SW_RESET_WAIT_MSECS);
2549     +
2550     end = jiffies + msecs_to_jiffies(MLXSW_PCI_SW_RESET_TIMEOUT_MSECS);
2551     do {
2552     u32 val = mlxsw_pci_read32(mlxsw_pci, FW_READY);
2553     diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci_hw.h b/drivers/net/ethernet/mellanox/mlxsw/pci_hw.h
2554     index a6441208e9d9..fb082ad21b00 100644
2555     --- a/drivers/net/ethernet/mellanox/mlxsw/pci_hw.h
2556     +++ b/drivers/net/ethernet/mellanox/mlxsw/pci_hw.h
2557     @@ -59,6 +59,7 @@
2558     #define MLXSW_PCI_SW_RESET 0xF0010
2559     #define MLXSW_PCI_SW_RESET_RST_BIT BIT(0)
2560     #define MLXSW_PCI_SW_RESET_TIMEOUT_MSECS 5000
2561     +#define MLXSW_PCI_SW_RESET_WAIT_MSECS 100
2562     #define MLXSW_PCI_FW_READY 0xA1844
2563     #define MLXSW_PCI_FW_READY_MASK 0xFFFF
2564     #define MLXSW_PCI_FW_READY_MAGIC 0x5E
2565     diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
2566     index e118b5f23996..8d53a593fb27 100644
2567     --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
2568     +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
2569     @@ -568,6 +568,7 @@ nfp_net_aux_irq_request(struct nfp_net *nn, u32 ctrl_offset,
2570     return err;
2571     }
2572     nn_writeb(nn, ctrl_offset, entry->entry);
2573     + nfp_net_irq_unmask(nn, entry->entry);
2574    
2575     return 0;
2576     }
2577     @@ -582,6 +583,7 @@ static void nfp_net_aux_irq_free(struct nfp_net *nn, u32 ctrl_offset,
2578     unsigned int vector_idx)
2579     {
2580     nn_writeb(nn, ctrl_offset, 0xff);
2581     + nn_pci_flush(nn);
2582     free_irq(nn->irq_entries[vector_idx].vector, nn);
2583     }
2584    
2585     diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h
2586     index e82b4b70b7be..627fec210e2f 100644
2587     --- a/drivers/net/ethernet/stmicro/stmmac/common.h
2588     +++ b/drivers/net/ethernet/stmicro/stmmac/common.h
2589     @@ -409,7 +409,7 @@ struct stmmac_desc_ops {
2590     /* get timestamp value */
2591     u64(*get_timestamp) (void *desc, u32 ats);
2592     /* get rx timestamp status */
2593     - int (*get_rx_timestamp_status) (void *desc, u32 ats);
2594     + int (*get_rx_timestamp_status)(void *desc, void *next_desc, u32 ats);
2595     /* Display ring */
2596     void (*display_ring)(void *head, unsigned int size, bool rx);
2597     /* set MSS via context descriptor */
2598     diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
2599     index 4b286e27c4ca..7e089bf906b4 100644
2600     --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
2601     +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_descs.c
2602     @@ -258,7 +258,8 @@ static int dwmac4_rx_check_timestamp(void *desc)
2603     return ret;
2604     }
2605    
2606     -static int dwmac4_wrback_get_rx_timestamp_status(void *desc, u32 ats)
2607     +static int dwmac4_wrback_get_rx_timestamp_status(void *desc, void *next_desc,
2608     + u32 ats)
2609     {
2610     struct dma_desc *p = (struct dma_desc *)desc;
2611     int ret = -EINVAL;
2612     @@ -270,7 +271,7 @@ static int dwmac4_wrback_get_rx_timestamp_status(void *desc, u32 ats)
2613    
2614     /* Check if timestamp is OK from context descriptor */
2615     do {
2616     - ret = dwmac4_rx_check_timestamp(desc);
2617     + ret = dwmac4_rx_check_timestamp(next_desc);
2618     if (ret < 0)
2619     goto exit;
2620     i++;
2621     diff --git a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
2622     index 7546b3664113..2a828a312814 100644
2623     --- a/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
2624     +++ b/drivers/net/ethernet/stmicro/stmmac/enh_desc.c
2625     @@ -400,7 +400,8 @@ static u64 enh_desc_get_timestamp(void *desc, u32 ats)
2626     return ns;
2627     }
2628    
2629     -static int enh_desc_get_rx_timestamp_status(void *desc, u32 ats)
2630     +static int enh_desc_get_rx_timestamp_status(void *desc, void *next_desc,
2631     + u32 ats)
2632     {
2633     if (ats) {
2634     struct dma_extended_desc *p = (struct dma_extended_desc *)desc;
2635     diff --git a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
2636     index f817f8f36569..db4cee57bb24 100644
2637     --- a/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
2638     +++ b/drivers/net/ethernet/stmicro/stmmac/norm_desc.c
2639     @@ -265,7 +265,7 @@ static u64 ndesc_get_timestamp(void *desc, u32 ats)
2640     return ns;
2641     }
2642    
2643     -static int ndesc_get_rx_timestamp_status(void *desc, u32 ats)
2644     +static int ndesc_get_rx_timestamp_status(void *desc, void *next_desc, u32 ats)
2645     {
2646     struct dma_desc *p = (struct dma_desc *)desc;
2647    
2648     diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
2649     index 721b61655261..08c19ebd5306 100644
2650     --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
2651     +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
2652     @@ -34,6 +34,7 @@ static u32 stmmac_config_sub_second_increment(void __iomem *ioaddr,
2653     {
2654     u32 value = readl(ioaddr + PTP_TCR);
2655     unsigned long data;
2656     + u32 reg_value;
2657    
2658     /* For GMAC3.x, 4.x versions, convert the ptp_clock to nano second
2659     * formula = (1/ptp_clock) * 1000000000
2660     @@ -50,10 +51,11 @@ static u32 stmmac_config_sub_second_increment(void __iomem *ioaddr,
2661    
2662     data &= PTP_SSIR_SSINC_MASK;
2663    
2664     + reg_value = data;
2665     if (gmac4)
2666     - data = data << GMAC4_PTP_SSIR_SSINC_SHIFT;
2667     + reg_value <<= GMAC4_PTP_SSIR_SSINC_SHIFT;
2668    
2669     - writel(data, ioaddr + PTP_SSIR);
2670     + writel(reg_value, ioaddr + PTP_SSIR);
2671    
2672     return data;
2673     }
2674     diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2675     index 0ad12c81a9e4..d0cc73795056 100644
2676     --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2677     +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2678     @@ -489,7 +489,7 @@ static void stmmac_get_rx_hwtstamp(struct stmmac_priv *priv, struct dma_desc *p,
2679     desc = np;
2680    
2681     /* Check if timestamp is available */
2682     - if (priv->hw->desc->get_rx_timestamp_status(desc, priv->adv_ts)) {
2683     + if (priv->hw->desc->get_rx_timestamp_status(p, np, priv->adv_ts)) {
2684     ns = priv->hw->desc->get_timestamp(desc, priv->adv_ts);
2685     netdev_dbg(priv->dev, "get valid RX hw timestamp %llu\n", ns);
2686     shhwtstamp = skb_hwtstamps(skb);
2687     diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
2688     index fb1c9e095d0c..176fc0906bfe 100644
2689     --- a/drivers/net/macvlan.c
2690     +++ b/drivers/net/macvlan.c
2691     @@ -1441,9 +1441,14 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
2692     return 0;
2693    
2694     unregister_netdev:
2695     + /* macvlan_uninit would free the macvlan port */
2696     unregister_netdevice(dev);
2697     + return err;
2698     destroy_macvlan_port:
2699     - if (create)
2700     + /* the macvlan port may be freed by macvlan_uninit when fail to register.
2701     + * so we destroy the macvlan port only when it's valid.
2702     + */
2703     + if (create && macvlan_port_get_rtnl(dev))
2704     macvlan_port_destroy(port->dev);
2705     return err;
2706     }
2707     diff --git a/drivers/net/phy/mdio-sun4i.c b/drivers/net/phy/mdio-sun4i.c
2708     index 135296508a7e..6425ce04d3f9 100644
2709     --- a/drivers/net/phy/mdio-sun4i.c
2710     +++ b/drivers/net/phy/mdio-sun4i.c
2711     @@ -118,8 +118,10 @@ static int sun4i_mdio_probe(struct platform_device *pdev)
2712    
2713     data->regulator = devm_regulator_get(&pdev->dev, "phy");
2714     if (IS_ERR(data->regulator)) {
2715     - if (PTR_ERR(data->regulator) == -EPROBE_DEFER)
2716     - return -EPROBE_DEFER;
2717     + if (PTR_ERR(data->regulator) == -EPROBE_DEFER) {
2718     + ret = -EPROBE_DEFER;
2719     + goto err_out_free_mdiobus;
2720     + }
2721    
2722     dev_info(&pdev->dev, "no regulator found\n");
2723     data->regulator = NULL;
2724     diff --git a/drivers/net/phy/mdio-xgene.c b/drivers/net/phy/mdio-xgene.c
2725     index bfd3090fb055..07c6048200c6 100644
2726     --- a/drivers/net/phy/mdio-xgene.c
2727     +++ b/drivers/net/phy/mdio-xgene.c
2728     @@ -194,8 +194,11 @@ static int xgene_mdio_reset(struct xgene_mdio_pdata *pdata)
2729     }
2730    
2731     ret = xgene_enet_ecc_init(pdata);
2732     - if (ret)
2733     + if (ret) {
2734     + if (pdata->dev->of_node)
2735     + clk_disable_unprepare(pdata->clk);
2736     return ret;
2737     + }
2738     xgene_gmac_reset(pdata);
2739    
2740     return 0;
2741     @@ -388,8 +391,10 @@ static int xgene_mdio_probe(struct platform_device *pdev)
2742     return ret;
2743    
2744     mdio_bus = mdiobus_alloc();
2745     - if (!mdio_bus)
2746     - return -ENOMEM;
2747     + if (!mdio_bus) {
2748     + ret = -ENOMEM;
2749     + goto out_clk;
2750     + }
2751    
2752     mdio_bus->name = "APM X-Gene MDIO bus";
2753    
2754     @@ -418,7 +423,7 @@ static int xgene_mdio_probe(struct platform_device *pdev)
2755     mdio_bus->phy_mask = ~0;
2756     ret = mdiobus_register(mdio_bus);
2757     if (ret)
2758     - goto out;
2759     + goto out_mdiobus;
2760    
2761     acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_HANDLE(dev), 1,
2762     acpi_register_phy, NULL, mdio_bus, NULL);
2763     @@ -426,16 +431,20 @@ static int xgene_mdio_probe(struct platform_device *pdev)
2764     }
2765    
2766     if (ret)
2767     - goto out;
2768     + goto out_mdiobus;
2769    
2770     pdata->mdio_bus = mdio_bus;
2771     xgene_mdio_status = true;
2772    
2773     return 0;
2774    
2775     -out:
2776     +out_mdiobus:
2777     mdiobus_free(mdio_bus);
2778    
2779     +out_clk:
2780     + if (dev->of_node)
2781     + clk_disable_unprepare(pdata->clk);
2782     +
2783     return ret;
2784     }
2785    
2786     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
2787     index 8d9f02b7a71f..b1632294174f 100644
2788     --- a/drivers/net/usb/qmi_wwan.c
2789     +++ b/drivers/net/usb/qmi_wwan.c
2790     @@ -1100,6 +1100,7 @@ static const struct usb_device_id products[] = {
2791     {QMI_FIXED_INTF(0x05c6, 0x9084, 4)},
2792     {QMI_FIXED_INTF(0x05c6, 0x920d, 0)},
2793     {QMI_FIXED_INTF(0x05c6, 0x920d, 5)},
2794     + {QMI_QUIRK_SET_DTR(0x05c6, 0x9625, 4)}, /* YUGA CLM920-NC5 */
2795     {QMI_FIXED_INTF(0x0846, 0x68a2, 8)},
2796     {QMI_FIXED_INTF(0x12d1, 0x140c, 1)}, /* Huawei E173 */
2797     {QMI_FIXED_INTF(0x12d1, 0x14ac, 1)}, /* Huawei E1820 */
2798     @@ -1211,6 +1212,7 @@ static const struct usb_device_id products[] = {
2799     {QMI_FIXED_INTF(0x2357, 0x9000, 4)}, /* TP-LINK MA260 */
2800     {QMI_QUIRK_SET_DTR(0x1bc7, 0x1040, 2)}, /* Telit LE922A */
2801     {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */
2802     + {QMI_FIXED_INTF(0x1bc7, 0x1101, 3)}, /* Telit ME910 dual modem */
2803     {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */
2804     {QMI_QUIRK_SET_DTR(0x1bc7, 0x1201, 2)}, /* Telit LE920, LE920A4 */
2805     {QMI_FIXED_INTF(0x1c9e, 0x9801, 3)}, /* Telewell TW-3G HSPA+ */
2806     diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
2807     index 9e9202b50e73..bb44f0c6891f 100644
2808     --- a/drivers/net/vxlan.c
2809     +++ b/drivers/net/vxlan.c
2810     @@ -2155,6 +2155,13 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
2811     }
2812    
2813     ndst = &rt->dst;
2814     + if (skb_dst(skb)) {
2815     + int mtu = dst_mtu(ndst) - VXLAN_HEADROOM;
2816     +
2817     + skb_dst(skb)->ops->update_pmtu(skb_dst(skb), NULL,
2818     + skb, mtu);
2819     + }
2820     +
2821     tos = ip_tunnel_ecn_encap(tos, old_iph, skb);
2822     ttl = ttl ? : ip4_dst_hoplimit(&rt->dst);
2823     err = vxlan_build_skb(skb, ndst, sizeof(struct iphdr),
2824     @@ -2190,6 +2197,13 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
2825     goto out_unlock;
2826     }
2827    
2828     + if (skb_dst(skb)) {
2829     + int mtu = dst_mtu(ndst) - VXLAN6_HEADROOM;
2830     +
2831     + skb_dst(skb)->ops->update_pmtu(skb_dst(skb), NULL,
2832     + skb, mtu);
2833     + }
2834     +
2835     tos = ip_tunnel_ecn_encap(tos, old_iph, skb);
2836     ttl = ttl ? : ip6_dst_hoplimit(ndst);
2837     skb_scrub_packet(skb, xnet);
2838     diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
2839     index b83f01d6e3dd..af37c19dbfd7 100644
2840     --- a/drivers/net/wireless/ath/wcn36xx/main.c
2841     +++ b/drivers/net/wireless/ath/wcn36xx/main.c
2842     @@ -384,6 +384,18 @@ static int wcn36xx_config(struct ieee80211_hw *hw, u32 changed)
2843     }
2844     }
2845    
2846     + if (changed & IEEE80211_CONF_CHANGE_PS) {
2847     + list_for_each_entry(tmp, &wcn->vif_list, list) {
2848     + vif = wcn36xx_priv_to_vif(tmp);
2849     + if (hw->conf.flags & IEEE80211_CONF_PS) {
2850     + if (vif->bss_conf.ps) /* ps allowed ? */
2851     + wcn36xx_pmc_enter_bmps_state(wcn, vif);
2852     + } else {
2853     + wcn36xx_pmc_exit_bmps_state(wcn, vif);
2854     + }
2855     + }
2856     + }
2857     +
2858     mutex_unlock(&wcn->conf_mutex);
2859    
2860     return 0;
2861     @@ -747,17 +759,6 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,
2862     vif_priv->dtim_period = bss_conf->dtim_period;
2863     }
2864    
2865     - if (changed & BSS_CHANGED_PS) {
2866     - wcn36xx_dbg(WCN36XX_DBG_MAC,
2867     - "mac bss PS set %d\n",
2868     - bss_conf->ps);
2869     - if (bss_conf->ps) {
2870     - wcn36xx_pmc_enter_bmps_state(wcn, vif);
2871     - } else {
2872     - wcn36xx_pmc_exit_bmps_state(wcn, vif);
2873     - }
2874     - }
2875     -
2876     if (changed & BSS_CHANGED_BSSID) {
2877     wcn36xx_dbg(WCN36XX_DBG_MAC, "mac bss changed_bssid %pM\n",
2878     bss_conf->bssid);
2879     diff --git a/drivers/net/wireless/ath/wcn36xx/pmc.c b/drivers/net/wireless/ath/wcn36xx/pmc.c
2880     index 589fe5f70971..1976b80c235f 100644
2881     --- a/drivers/net/wireless/ath/wcn36xx/pmc.c
2882     +++ b/drivers/net/wireless/ath/wcn36xx/pmc.c
2883     @@ -45,8 +45,10 @@ int wcn36xx_pmc_exit_bmps_state(struct wcn36xx *wcn,
2884     struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif);
2885    
2886     if (WCN36XX_BMPS != vif_priv->pw_state) {
2887     - wcn36xx_err("Not in BMPS mode, no need to exit from BMPS mode!\n");
2888     - return -EINVAL;
2889     + /* Unbalanced call or last BMPS enter failed */
2890     + wcn36xx_dbg(WCN36XX_DBG_PMC,
2891     + "Not in BMPS mode, no need to exit\n");
2892     + return -EALREADY;
2893     }
2894     wcn36xx_smd_exit_bmps(wcn, vif);
2895     vif_priv->pw_state = WCN36XX_FULL_POWER;
2896     diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
2897     index 052e67bce6b3..710efe7b65f9 100644
2898     --- a/drivers/net/wireless/mac80211_hwsim.c
2899     +++ b/drivers/net/wireless/mac80211_hwsim.c
2900     @@ -3220,7 +3220,7 @@ static int hwsim_get_radio_nl(struct sk_buff *msg, struct genl_info *info)
2901     if (!net_eq(wiphy_net(data->hw->wiphy), genl_info_net(info)))
2902     continue;
2903    
2904     - skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
2905     + skb = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
2906     if (!skb) {
2907     res = -ENOMEM;
2908     goto out_err;
2909     diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
2910     index 391432e2725d..c980cdbd6e53 100644
2911     --- a/drivers/net/xen-netfront.c
2912     +++ b/drivers/net/xen-netfront.c
2913     @@ -1326,6 +1326,7 @@ static struct net_device *xennet_create_dev(struct xenbus_device *dev)
2914    
2915     netif_carrier_off(netdev);
2916    
2917     + xenbus_switch_state(dev, XenbusStateInitialising);
2918     return netdev;
2919    
2920     exit:
2921     diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
2922     index 0655f45643d9..dd956311a85a 100644
2923     --- a/drivers/nvme/host/core.c
2924     +++ b/drivers/nvme/host/core.c
2925     @@ -1515,7 +1515,8 @@ static void nvme_set_queue_limits(struct nvme_ctrl *ctrl,
2926     blk_queue_max_hw_sectors(q, ctrl->max_hw_sectors);
2927     blk_queue_max_segments(q, min_t(u32, max_segments, USHRT_MAX));
2928     }
2929     - if (ctrl->quirks & NVME_QUIRK_STRIPE_SIZE)
2930     + if ((ctrl->quirks & NVME_QUIRK_STRIPE_SIZE) &&
2931     + is_power_of_2(ctrl->max_hw_sectors))
2932     blk_queue_chunk_sectors(q, ctrl->max_hw_sectors);
2933     blk_queue_virt_boundary(q, ctrl->page_size - 1);
2934     if (ctrl->vwc & NVME_CTRL_VWC_PRESENT)
2935     diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c
2936     index 555c976cc2ee..8cd42544c90e 100644
2937     --- a/drivers/nvme/host/fabrics.c
2938     +++ b/drivers/nvme/host/fabrics.c
2939     @@ -74,6 +74,7 @@ static struct nvmf_host *nvmf_host_default(void)
2940     return NULL;
2941    
2942     kref_init(&host->ref);
2943     + uuid_gen(&host->id);
2944     snprintf(host->nqn, NVMF_NQN_SIZE,
2945     "nqn.2014-08.org.nvmexpress:uuid:%pUb", &host->id);
2946    
2947     diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
2948     index 3148d760d825..7deb7b5d8683 100644
2949     --- a/drivers/nvme/host/fc.c
2950     +++ b/drivers/nvme/host/fc.c
2951     @@ -2876,7 +2876,6 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
2952    
2953     /* initiate nvme ctrl ref counting teardown */
2954     nvme_uninit_ctrl(&ctrl->ctrl);
2955     - nvme_put_ctrl(&ctrl->ctrl);
2956    
2957     /* Remove core ctrl ref. */
2958     nvme_put_ctrl(&ctrl->ctrl);
2959     diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
2960     index 98258583abb0..8c1819230ed2 100644
2961     --- a/drivers/of/of_mdio.c
2962     +++ b/drivers/of/of_mdio.c
2963     @@ -228,7 +228,12 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
2964     rc = of_mdiobus_register_phy(mdio, child, addr);
2965     else
2966     rc = of_mdiobus_register_device(mdio, child, addr);
2967     - if (rc)
2968     +
2969     + if (rc == -ENODEV)
2970     + dev_err(&mdio->dev,
2971     + "MDIO device at address %d is missing.\n",
2972     + addr);
2973     + else if (rc)
2974     goto unregister;
2975     }
2976    
2977     @@ -252,7 +257,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
2978    
2979     if (of_mdiobus_child_is_phy(child)) {
2980     rc = of_mdiobus_register_phy(mdio, child, addr);
2981     - if (rc)
2982     + if (rc && rc != -ENODEV)
2983     goto unregister;
2984     }
2985     }
2986     diff --git a/drivers/phy/motorola/phy-cpcap-usb.c b/drivers/phy/motorola/phy-cpcap-usb.c
2987     index accaaaccb662..6601ad0dfb3a 100644
2988     --- a/drivers/phy/motorola/phy-cpcap-usb.c
2989     +++ b/drivers/phy/motorola/phy-cpcap-usb.c
2990     @@ -310,7 +310,7 @@ static int cpcap_usb_init_irq(struct platform_device *pdev,
2991     int irq, error;
2992    
2993     irq = platform_get_irq_byname(pdev, name);
2994     - if (!irq)
2995     + if (irq < 0)
2996     return -ENODEV;
2997    
2998     error = devm_request_threaded_irq(ddata->dev, irq, NULL,
2999     diff --git a/drivers/s390/block/dasd_3990_erp.c b/drivers/s390/block/dasd_3990_erp.c
3000     index c94b606e0df8..ee14d8e45c97 100644
3001     --- a/drivers/s390/block/dasd_3990_erp.c
3002     +++ b/drivers/s390/block/dasd_3990_erp.c
3003     @@ -2803,6 +2803,16 @@ dasd_3990_erp_action(struct dasd_ccw_req * cqr)
3004     erp = dasd_3990_erp_handle_match_erp(cqr, erp);
3005     }
3006    
3007     +
3008     + /*
3009     + * For path verification work we need to stick with the path that was
3010     + * originally chosen so that the per path configuration data is
3011     + * assigned correctly.
3012     + */
3013     + if (test_bit(DASD_CQR_VERIFY_PATH, &erp->flags) && cqr->lpm) {
3014     + erp->lpm = cqr->lpm;
3015     + }
3016     +
3017     if (device->features & DASD_FEATURE_ERPLOG) {
3018     /* print current erp_chain */
3019     dev_err(&device->cdev->dev,
3020     diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
3021     index 403a639574e5..b0b290f7b8dc 100644
3022     --- a/drivers/scsi/aacraid/aacraid.h
3023     +++ b/drivers/scsi/aacraid/aacraid.h
3024     @@ -1724,6 +1724,7 @@ struct aac_dev
3025     #define FIB_CONTEXT_FLAG_NATIVE_HBA (0x00000010)
3026     #define FIB_CONTEXT_FLAG_NATIVE_HBA_TMF (0x00000020)
3027     #define FIB_CONTEXT_FLAG_SCSI_CMD (0x00000040)
3028     +#define FIB_CONTEXT_FLAG_EH_RESET (0x00000080)
3029    
3030     /*
3031     * Define the command values
3032     diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
3033     index c9252b138c1f..509fe23fafe1 100644
3034     --- a/drivers/scsi/aacraid/linit.c
3035     +++ b/drivers/scsi/aacraid/linit.c
3036     @@ -1037,7 +1037,7 @@ static int aac_eh_bus_reset(struct scsi_cmnd* cmd)
3037     info = &aac->hba_map[bus][cid];
3038     if (bus >= AAC_MAX_BUSES || cid >= AAC_MAX_TARGETS ||
3039     info->devtype != AAC_DEVTYPE_NATIVE_RAW) {
3040     - fib->flags |= FIB_CONTEXT_FLAG_TIMED_OUT;
3041     + fib->flags |= FIB_CONTEXT_FLAG_EH_RESET;
3042     cmd->SCp.phase = AAC_OWNER_ERROR_HANDLER;
3043     }
3044     }
3045     diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
3046     index c17ccb913fde..a3e480e7a257 100644
3047     --- a/drivers/scsi/storvsc_drv.c
3048     +++ b/drivers/scsi/storvsc_drv.c
3049     @@ -952,10 +952,11 @@ static void storvsc_handle_error(struct vmscsi_request *vm_srb,
3050     case TEST_UNIT_READY:
3051     break;
3052     default:
3053     - set_host_byte(scmnd, DID_TARGET_FAILURE);
3054     + set_host_byte(scmnd, DID_ERROR);
3055     }
3056     break;
3057     case SRB_STATUS_INVALID_LUN:
3058     + set_host_byte(scmnd, DID_NO_CONNECT);
3059     do_work = true;
3060     process_err_fn = storvsc_remove_lun;
3061     break;
3062     diff --git a/drivers/spi/spi-atmel.c b/drivers/spi/spi-atmel.c
3063     index f95da364c283..669470971023 100644
3064     --- a/drivers/spi/spi-atmel.c
3065     +++ b/drivers/spi/spi-atmel.c
3066     @@ -1661,12 +1661,12 @@ static int atmel_spi_remove(struct platform_device *pdev)
3067     pm_runtime_get_sync(&pdev->dev);
3068    
3069     /* reset the hardware and block queue progress */
3070     - spin_lock_irq(&as->lock);
3071     if (as->use_dma) {
3072     atmel_spi_stop_dma(master);
3073     atmel_spi_release_dma(master);
3074     }
3075    
3076     + spin_lock_irq(&as->lock);
3077     spi_writel(as, CR, SPI_BIT(SWRST));
3078     spi_writel(as, CR, SPI_BIT(SWRST)); /* AT91SAM9263 Rev B workaround */
3079     spi_readl(as, SR);
3080     diff --git a/drivers/staging/android/ion/Kconfig b/drivers/staging/android/ion/Kconfig
3081     index a517b2d29f1b..8f6494158d3d 100644
3082     --- a/drivers/staging/android/ion/Kconfig
3083     +++ b/drivers/staging/android/ion/Kconfig
3084     @@ -37,7 +37,7 @@ config ION_CHUNK_HEAP
3085    
3086     config ION_CMA_HEAP
3087     bool "Ion CMA heap support"
3088     - depends on ION && CMA
3089     + depends on ION && DMA_CMA
3090     help
3091     Choose this option to enable CMA heaps with Ion. This heap is backed
3092     by the Contiguous Memory Allocator (CMA). If your system has these
3093     diff --git a/drivers/staging/android/ion/ion_cma_heap.c b/drivers/staging/android/ion/ion_cma_heap.c
3094     index dd5545d9990a..86196ffd2faf 100644
3095     --- a/drivers/staging/android/ion/ion_cma_heap.c
3096     +++ b/drivers/staging/android/ion/ion_cma_heap.c
3097     @@ -39,9 +39,15 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
3098     struct ion_cma_heap *cma_heap = to_cma_heap(heap);
3099     struct sg_table *table;
3100     struct page *pages;
3101     + unsigned long size = PAGE_ALIGN(len);
3102     + unsigned long nr_pages = size >> PAGE_SHIFT;
3103     + unsigned long align = get_order(size);
3104     int ret;
3105    
3106     - pages = cma_alloc(cma_heap->cma, len, 0, GFP_KERNEL);
3107     + if (align > CONFIG_CMA_ALIGNMENT)
3108     + align = CONFIG_CMA_ALIGNMENT;
3109     +
3110     + pages = cma_alloc(cma_heap->cma, nr_pages, align, GFP_KERNEL);
3111     if (!pages)
3112     return -ENOMEM;
3113    
3114     @@ -53,7 +59,7 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
3115     if (ret)
3116     goto free_mem;
3117    
3118     - sg_set_page(table->sgl, pages, len, 0);
3119     + sg_set_page(table->sgl, pages, size, 0);
3120    
3121     buffer->priv_virt = pages;
3122     buffer->sg_table = table;
3123     @@ -62,7 +68,7 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
3124     free_mem:
3125     kfree(table);
3126     err:
3127     - cma_release(cma_heap->cma, pages, buffer->size);
3128     + cma_release(cma_heap->cma, pages, nr_pages);
3129     return -ENOMEM;
3130     }
3131    
3132     @@ -70,9 +76,10 @@ static void ion_cma_free(struct ion_buffer *buffer)
3133     {
3134     struct ion_cma_heap *cma_heap = to_cma_heap(buffer->heap);
3135     struct page *pages = buffer->priv_virt;
3136     + unsigned long nr_pages = PAGE_ALIGN(buffer->size) >> PAGE_SHIFT;
3137    
3138     /* release memory */
3139     - cma_release(cma_heap->cma, pages, buffer->size);
3140     + cma_release(cma_heap->cma, pages, nr_pages);
3141     /* release sg table */
3142     sg_free_table(buffer->sg_table);
3143     kfree(buffer->sg_table);
3144     diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
3145     index f77e499afddd..065f0b607373 100644
3146     --- a/drivers/xen/balloon.c
3147     +++ b/drivers/xen/balloon.c
3148     @@ -257,10 +257,25 @@ static void release_memory_resource(struct resource *resource)
3149     kfree(resource);
3150     }
3151    
3152     +/*
3153     + * Host memory not allocated to dom0. We can use this range for hotplug-based
3154     + * ballooning.
3155     + *
3156     + * It's a type-less resource. Setting IORESOURCE_MEM will make resource
3157     + * management algorithms (arch_remove_reservations()) look into guest e820,
3158     + * which we don't want.
3159     + */
3160     +static struct resource hostmem_resource = {
3161     + .name = "Host RAM",
3162     +};
3163     +
3164     +void __attribute__((weak)) __init arch_xen_balloon_init(struct resource *res)
3165     +{}
3166     +
3167     static struct resource *additional_memory_resource(phys_addr_t size)
3168     {
3169     - struct resource *res;
3170     - int ret;
3171     + struct resource *res, *res_hostmem;
3172     + int ret = -ENOMEM;
3173    
3174     res = kzalloc(sizeof(*res), GFP_KERNEL);
3175     if (!res)
3176     @@ -269,13 +284,42 @@ static struct resource *additional_memory_resource(phys_addr_t size)
3177     res->name = "System RAM";
3178     res->flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
3179    
3180     - ret = allocate_resource(&iomem_resource, res,
3181     - size, 0, -1,
3182     - PAGES_PER_SECTION * PAGE_SIZE, NULL, NULL);
3183     - if (ret < 0) {
3184     - pr_err("Cannot allocate new System RAM resource\n");
3185     - kfree(res);
3186     - return NULL;
3187     + res_hostmem = kzalloc(sizeof(*res), GFP_KERNEL);
3188     + if (res_hostmem) {
3189     + /* Try to grab a range from hostmem */
3190     + res_hostmem->name = "Host memory";
3191     + ret = allocate_resource(&hostmem_resource, res_hostmem,
3192     + size, 0, -1,
3193     + PAGES_PER_SECTION * PAGE_SIZE, NULL, NULL);
3194     + }
3195     +
3196     + if (!ret) {
3197     + /*
3198     + * Insert this resource into iomem. Because hostmem_resource
3199     + * tracks portion of guest e820 marked as UNUSABLE noone else
3200     + * should try to use it.
3201     + */
3202     + res->start = res_hostmem->start;
3203     + res->end = res_hostmem->end;
3204     + ret = insert_resource(&iomem_resource, res);
3205     + if (ret < 0) {
3206     + pr_err("Can't insert iomem_resource [%llx - %llx]\n",
3207     + res->start, res->end);
3208     + release_memory_resource(res_hostmem);
3209     + res_hostmem = NULL;
3210     + res->start = res->end = 0;
3211     + }
3212     + }
3213     +
3214     + if (ret) {
3215     + ret = allocate_resource(&iomem_resource, res,
3216     + size, 0, -1,
3217     + PAGES_PER_SECTION * PAGE_SIZE, NULL, NULL);
3218     + if (ret < 0) {
3219     + pr_err("Cannot allocate new System RAM resource\n");
3220     + kfree(res);
3221     + return NULL;
3222     + }
3223     }
3224    
3225     #ifdef CONFIG_SPARSEMEM
3226     @@ -287,6 +331,7 @@ static struct resource *additional_memory_resource(phys_addr_t size)
3227     pr_err("New System RAM resource outside addressable RAM (%lu > %lu)\n",
3228     pfn, limit);
3229     release_memory_resource(res);
3230     + release_memory_resource(res_hostmem);
3231     return NULL;
3232     }
3233     }
3234     @@ -765,6 +810,8 @@ static int __init balloon_init(void)
3235     set_online_page_callback(&xen_online_page);
3236     register_memory_notifier(&xen_memory_nb);
3237     register_sysctl_table(xen_root);
3238     +
3239     + arch_xen_balloon_init(&hostmem_resource);
3240     #endif
3241    
3242     #ifdef CONFIG_XEN_PV
3243     diff --git a/drivers/xen/gntdev.c b/drivers/xen/gntdev.c
3244     index 57efbd3b053b..bd56653b9bbc 100644
3245     --- a/drivers/xen/gntdev.c
3246     +++ b/drivers/xen/gntdev.c
3247     @@ -380,10 +380,8 @@ static int unmap_grant_pages(struct grant_map *map, int offset, int pages)
3248     }
3249     range = 0;
3250     while (range < pages) {
3251     - if (map->unmap_ops[offset+range].handle == -1) {
3252     - range--;
3253     + if (map->unmap_ops[offset+range].handle == -1)
3254     break;
3255     - }
3256     range++;
3257     }
3258     err = __unmap_grant_pages(map, offset, range);
3259     @@ -1073,8 +1071,10 @@ static int gntdev_mmap(struct file *flip, struct vm_area_struct *vma)
3260     out_unlock_put:
3261     mutex_unlock(&priv->lock);
3262     out_put_map:
3263     - if (use_ptemod)
3264     + if (use_ptemod) {
3265     map->vma = NULL;
3266     + unmap_grant_pages(map, 0, map->count);
3267     + }
3268     gntdev_put_map(priv, map);
3269     return err;
3270     }
3271     diff --git a/fs/afs/write.c b/fs/afs/write.c
3272     index 106e43db1115..926d4d68f791 100644
3273     --- a/fs/afs/write.c
3274     +++ b/fs/afs/write.c
3275     @@ -282,7 +282,7 @@ int afs_write_end(struct file *file, struct address_space *mapping,
3276     ret = afs_fill_page(vnode, key, pos + copied,
3277     len - copied, page);
3278     if (ret < 0)
3279     - return ret;
3280     + goto out;
3281     }
3282     SetPageUptodate(page);
3283     }
3284     @@ -290,10 +290,12 @@ int afs_write_end(struct file *file, struct address_space *mapping,
3285     set_page_dirty(page);
3286     if (PageDirty(page))
3287     _debug("dirtied");
3288     + ret = copied;
3289     +
3290     +out:
3291     unlock_page(page);
3292     put_page(page);
3293     -
3294     - return copied;
3295     + return ret;
3296     }
3297    
3298     /*
3299     diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
3300     index 4006b2a1233d..bc534fafacf9 100644
3301     --- a/fs/btrfs/volumes.c
3302     +++ b/fs/btrfs/volumes.c
3303     @@ -236,7 +236,6 @@ static struct btrfs_device *__alloc_device(void)
3304     kfree(dev);
3305     return ERR_PTR(-ENOMEM);
3306     }
3307     - bio_get(dev->flush_bio);
3308    
3309     INIT_LIST_HEAD(&dev->dev_list);
3310     INIT_LIST_HEAD(&dev->dev_alloc_list);
3311     diff --git a/fs/exec.c b/fs/exec.c
3312     index acec119fcc31..0da4d748b4e6 100644
3313     --- a/fs/exec.c
3314     +++ b/fs/exec.c
3315     @@ -1216,15 +1216,14 @@ static int de_thread(struct task_struct *tsk)
3316     return -EAGAIN;
3317     }
3318    
3319     -char *get_task_comm(char *buf, struct task_struct *tsk)
3320     +char *__get_task_comm(char *buf, size_t buf_size, struct task_struct *tsk)
3321     {
3322     - /* buf must be at least sizeof(tsk->comm) in size */
3323     task_lock(tsk);
3324     - strncpy(buf, tsk->comm, sizeof(tsk->comm));
3325     + strncpy(buf, tsk->comm, buf_size);
3326     task_unlock(tsk);
3327     return buf;
3328     }
3329     -EXPORT_SYMBOL_GPL(get_task_comm);
3330     +EXPORT_SYMBOL_GPL(__get_task_comm);
3331    
3332     /*
3333     * These functions flushes out all traces of the currently running executable
3334     diff --git a/fs/super.c b/fs/super.c
3335     index 994db21f59bf..79d7fc5e0ddd 100644
3336     --- a/fs/super.c
3337     +++ b/fs/super.c
3338     @@ -522,7 +522,11 @@ struct super_block *sget_userns(struct file_system_type *type,
3339     hlist_add_head(&s->s_instances, &type->fs_supers);
3340     spin_unlock(&sb_lock);
3341     get_filesystem(type);
3342     - register_shrinker(&s->s_shrink);
3343     + err = register_shrinker(&s->s_shrink);
3344     + if (err) {
3345     + deactivate_locked_super(s);
3346     + s = ERR_PTR(err);
3347     + }
3348     return s;
3349     }
3350    
3351     diff --git a/fs/xfs/xfs_qm.c b/fs/xfs/xfs_qm.c
3352     index 010a13a201aa..659ed6f8c484 100644
3353     --- a/fs/xfs/xfs_qm.c
3354     +++ b/fs/xfs/xfs_qm.c
3355     @@ -48,7 +48,7 @@
3356     STATIC int xfs_qm_init_quotainos(xfs_mount_t *);
3357     STATIC int xfs_qm_init_quotainfo(xfs_mount_t *);
3358    
3359     -
3360     +STATIC void xfs_qm_destroy_quotainos(xfs_quotainfo_t *qi);
3361     STATIC void xfs_qm_dqfree_one(struct xfs_dquot *dqp);
3362     /*
3363     * We use the batch lookup interface to iterate over the dquots as it
3364     @@ -695,9 +695,17 @@ xfs_qm_init_quotainfo(
3365     qinf->qi_shrinker.scan_objects = xfs_qm_shrink_scan;
3366     qinf->qi_shrinker.seeks = DEFAULT_SEEKS;
3367     qinf->qi_shrinker.flags = SHRINKER_NUMA_AWARE;
3368     - register_shrinker(&qinf->qi_shrinker);
3369     +
3370     + error = register_shrinker(&qinf->qi_shrinker);
3371     + if (error)
3372     + goto out_free_inos;
3373     +
3374     return 0;
3375    
3376     +out_free_inos:
3377     + mutex_destroy(&qinf->qi_quotaofflock);
3378     + mutex_destroy(&qinf->qi_tree_lock);
3379     + xfs_qm_destroy_quotainos(qinf);
3380     out_free_lru:
3381     list_lru_destroy(&qinf->qi_lru);
3382     out_free_qinf:
3383     @@ -706,7 +714,6 @@ xfs_qm_init_quotainfo(
3384     return error;
3385     }
3386    
3387     -
3388     /*
3389     * Gets called when unmounting a filesystem or when all quotas get
3390     * turned off.
3391     @@ -723,19 +730,8 @@ xfs_qm_destroy_quotainfo(
3392    
3393     unregister_shrinker(&qi->qi_shrinker);
3394     list_lru_destroy(&qi->qi_lru);
3395     -
3396     - if (qi->qi_uquotaip) {
3397     - IRELE(qi->qi_uquotaip);
3398     - qi->qi_uquotaip = NULL; /* paranoia */
3399     - }
3400     - if (qi->qi_gquotaip) {
3401     - IRELE(qi->qi_gquotaip);
3402     - qi->qi_gquotaip = NULL;
3403     - }
3404     - if (qi->qi_pquotaip) {
3405     - IRELE(qi->qi_pquotaip);
3406     - qi->qi_pquotaip = NULL;
3407     - }
3408     + xfs_qm_destroy_quotainos(qi);
3409     + mutex_destroy(&qi->qi_tree_lock);
3410     mutex_destroy(&qi->qi_quotaofflock);
3411     kmem_free(qi);
3412     mp->m_quotainfo = NULL;
3413     @@ -1599,6 +1595,24 @@ xfs_qm_init_quotainos(
3414     return error;
3415     }
3416    
3417     +STATIC void
3418     +xfs_qm_destroy_quotainos(
3419     + xfs_quotainfo_t *qi)
3420     +{
3421     + if (qi->qi_uquotaip) {
3422     + IRELE(qi->qi_uquotaip);
3423     + qi->qi_uquotaip = NULL; /* paranoia */
3424     + }
3425     + if (qi->qi_gquotaip) {
3426     + IRELE(qi->qi_gquotaip);
3427     + qi->qi_gquotaip = NULL;
3428     + }
3429     + if (qi->qi_pquotaip) {
3430     + IRELE(qi->qi_pquotaip);
3431     + qi->qi_pquotaip = NULL;
3432     + }
3433     +}
3434     +
3435     STATIC void
3436     xfs_qm_dqfree_one(
3437     struct xfs_dquot *dqp)
3438     diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h
3439     index aeec003a566b..ac0eae8372ab 100644
3440     --- a/include/crypto/if_alg.h
3441     +++ b/include/crypto/if_alg.h
3442     @@ -18,6 +18,7 @@
3443     #include <linux/if_alg.h>
3444     #include <linux/scatterlist.h>
3445     #include <linux/types.h>
3446     +#include <linux/atomic.h>
3447     #include <net/sock.h>
3448    
3449     #include <crypto/aead.h>
3450     @@ -155,7 +156,7 @@ struct af_alg_ctx {
3451     struct af_alg_completion completion;
3452    
3453     size_t used;
3454     - size_t rcvused;
3455     + atomic_t rcvused;
3456    
3457     bool more;
3458     bool merge;
3459     @@ -228,7 +229,7 @@ static inline int af_alg_rcvbuf(struct sock *sk)
3460     struct af_alg_ctx *ctx = ask->private;
3461    
3462     return max_t(int, max_t(int, sk->sk_rcvbuf & PAGE_MASK, PAGE_SIZE) -
3463     - ctx->rcvused, 0);
3464     + atomic_read(&ctx->rcvused), 0);
3465     }
3466    
3467     /**
3468     diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
3469     index ae15864c8708..8f9fc6e5539a 100644
3470     --- a/include/linux/mlx5/driver.h
3471     +++ b/include/linux/mlx5/driver.h
3472     @@ -1017,7 +1017,7 @@ int mlx5_create_map_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq, u8 vecidx,
3473     enum mlx5_eq_type type);
3474     int mlx5_destroy_unmap_eq(struct mlx5_core_dev *dev, struct mlx5_eq *eq);
3475     int mlx5_start_eqs(struct mlx5_core_dev *dev);
3476     -int mlx5_stop_eqs(struct mlx5_core_dev *dev);
3477     +void mlx5_stop_eqs(struct mlx5_core_dev *dev);
3478     int mlx5_vector2eqn(struct mlx5_core_dev *dev, int vector, int *eqn,
3479     unsigned int *irqn);
3480     int mlx5_core_attach_mcg(struct mlx5_core_dev *dev, union ib_gid *mgid, u32 qpn);
3481     diff --git a/include/linux/sched.h b/include/linux/sched.h
3482     index fdf74f27acf1..41354690e4e3 100644
3483     --- a/include/linux/sched.h
3484     +++ b/include/linux/sched.h
3485     @@ -1502,7 +1502,11 @@ static inline void set_task_comm(struct task_struct *tsk, const char *from)
3486     __set_task_comm(tsk, from, false);
3487     }
3488    
3489     -extern char *get_task_comm(char *to, struct task_struct *tsk);
3490     +extern char *__get_task_comm(char *to, size_t len, struct task_struct *tsk);
3491     +#define get_task_comm(buf, tsk) ({ \
3492     + BUILD_BUG_ON(sizeof(buf) != TASK_COMM_LEN); \
3493     + __get_task_comm(buf, sizeof(buf), tsk); \
3494     +})
3495    
3496     #ifdef CONFIG_SMP
3497     void scheduler_ipi(void);
3498     diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
3499     index 236bfe5b2ffe..6073e8bae025 100644
3500     --- a/include/net/sch_generic.h
3501     +++ b/include/net/sch_generic.h
3502     @@ -273,7 +273,6 @@ struct tcf_chain {
3503    
3504     struct tcf_block {
3505     struct list_head chain_list;
3506     - struct work_struct work;
3507     };
3508    
3509     static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz)
3510     diff --git a/include/net/xfrm.h b/include/net/xfrm.h
3511     index e015e164bac0..db99efb2d1d0 100644
3512     --- a/include/net/xfrm.h
3513     +++ b/include/net/xfrm.h
3514     @@ -1570,6 +1570,9 @@ int xfrm_init_state(struct xfrm_state *x);
3515     int xfrm_prepare_input(struct xfrm_state *x, struct sk_buff *skb);
3516     int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type);
3517     int xfrm_input_resume(struct sk_buff *skb, int nexthdr);
3518     +int xfrm_trans_queue(struct sk_buff *skb,
3519     + int (*finish)(struct net *, struct sock *,
3520     + struct sk_buff *));
3521     int xfrm_output_resume(struct sk_buff *skb, int err);
3522     int xfrm_output(struct sock *sk, struct sk_buff *skb);
3523     int xfrm_inner_extract_output(struct xfrm_state *x, struct sk_buff *skb);
3524     diff --git a/include/uapi/linux/libc-compat.h b/include/uapi/linux/libc-compat.h
3525     index 282875cf8056..8254c937c9f4 100644
3526     --- a/include/uapi/linux/libc-compat.h
3527     +++ b/include/uapi/linux/libc-compat.h
3528     @@ -168,46 +168,99 @@
3529    
3530     /* If we did not see any headers from any supported C libraries,
3531     * or we are being included in the kernel, then define everything
3532     - * that we need. */
3533     + * that we need. Check for previous __UAPI_* definitions to give
3534     + * unsupported C libraries a way to opt out of any kernel definition. */
3535     #else /* !defined(__GLIBC__) */
3536    
3537     /* Definitions for if.h */
3538     +#ifndef __UAPI_DEF_IF_IFCONF
3539     #define __UAPI_DEF_IF_IFCONF 1
3540     +#endif
3541     +#ifndef __UAPI_DEF_IF_IFMAP
3542     #define __UAPI_DEF_IF_IFMAP 1
3543     +#endif
3544     +#ifndef __UAPI_DEF_IF_IFNAMSIZ
3545     #define __UAPI_DEF_IF_IFNAMSIZ 1
3546     +#endif
3547     +#ifndef __UAPI_DEF_IF_IFREQ
3548     #define __UAPI_DEF_IF_IFREQ 1
3549     +#endif
3550     /* Everything up to IFF_DYNAMIC, matches net/if.h until glibc 2.23 */
3551     +#ifndef __UAPI_DEF_IF_NET_DEVICE_FLAGS
3552     #define __UAPI_DEF_IF_NET_DEVICE_FLAGS 1
3553     +#endif
3554     /* For the future if glibc adds IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO */
3555     +#ifndef __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO
3556     #define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 1
3557     +#endif
3558    
3559     /* Definitions for in.h */
3560     +#ifndef __UAPI_DEF_IN_ADDR
3561     #define __UAPI_DEF_IN_ADDR 1
3562     +#endif
3563     +#ifndef __UAPI_DEF_IN_IPPROTO
3564     #define __UAPI_DEF_IN_IPPROTO 1
3565     +#endif
3566     +#ifndef __UAPI_DEF_IN_PKTINFO
3567     #define __UAPI_DEF_IN_PKTINFO 1
3568     +#endif
3569     +#ifndef __UAPI_DEF_IP_MREQ
3570     #define __UAPI_DEF_IP_MREQ 1
3571     +#endif
3572     +#ifndef __UAPI_DEF_SOCKADDR_IN
3573     #define __UAPI_DEF_SOCKADDR_IN 1
3574     +#endif
3575     +#ifndef __UAPI_DEF_IN_CLASS
3576     #define __UAPI_DEF_IN_CLASS 1
3577     +#endif
3578    
3579     /* Definitions for in6.h */
3580     +#ifndef __UAPI_DEF_IN6_ADDR
3581     #define __UAPI_DEF_IN6_ADDR 1
3582     +#endif
3583     +#ifndef __UAPI_DEF_IN6_ADDR_ALT
3584     #define __UAPI_DEF_IN6_ADDR_ALT 1
3585     +#endif
3586     +#ifndef __UAPI_DEF_SOCKADDR_IN6
3587     #define __UAPI_DEF_SOCKADDR_IN6 1
3588     +#endif
3589     +#ifndef __UAPI_DEF_IPV6_MREQ
3590     #define __UAPI_DEF_IPV6_MREQ 1
3591     +#endif
3592     +#ifndef __UAPI_DEF_IPPROTO_V6
3593     #define __UAPI_DEF_IPPROTO_V6 1
3594     +#endif
3595     +#ifndef __UAPI_DEF_IPV6_OPTIONS
3596     #define __UAPI_DEF_IPV6_OPTIONS 1
3597     +#endif
3598     +#ifndef __UAPI_DEF_IN6_PKTINFO
3599     #define __UAPI_DEF_IN6_PKTINFO 1
3600     +#endif
3601     +#ifndef __UAPI_DEF_IP6_MTUINFO
3602     #define __UAPI_DEF_IP6_MTUINFO 1
3603     +#endif
3604    
3605     /* Definitions for ipx.h */
3606     +#ifndef __UAPI_DEF_SOCKADDR_IPX
3607     #define __UAPI_DEF_SOCKADDR_IPX 1
3608     +#endif
3609     +#ifndef __UAPI_DEF_IPX_ROUTE_DEFINITION
3610     #define __UAPI_DEF_IPX_ROUTE_DEFINITION 1
3611     +#endif
3612     +#ifndef __UAPI_DEF_IPX_INTERFACE_DEFINITION
3613     #define __UAPI_DEF_IPX_INTERFACE_DEFINITION 1
3614     +#endif
3615     +#ifndef __UAPI_DEF_IPX_CONFIG_DATA
3616     #define __UAPI_DEF_IPX_CONFIG_DATA 1
3617     +#endif
3618     +#ifndef __UAPI_DEF_IPX_ROUTE_DEF
3619     #define __UAPI_DEF_IPX_ROUTE_DEF 1
3620     +#endif
3621    
3622     /* Definitions for xattr.h */
3623     +#ifndef __UAPI_DEF_XATTR
3624     #define __UAPI_DEF_XATTR 1
3625     +#endif
3626    
3627     #endif /* __GLIBC__ */
3628    
3629     diff --git a/include/uapi/linux/netfilter/nf_conntrack_common.h b/include/uapi/linux/netfilter/nf_conntrack_common.h
3630     index 3fea7709a441..57ccfb32e87f 100644
3631     --- a/include/uapi/linux/netfilter/nf_conntrack_common.h
3632     +++ b/include/uapi/linux/netfilter/nf_conntrack_common.h
3633     @@ -36,7 +36,7 @@ enum ip_conntrack_info {
3634    
3635     #define NF_CT_STATE_INVALID_BIT (1 << 0)
3636     #define NF_CT_STATE_BIT(ctinfo) (1 << ((ctinfo) % IP_CT_IS_REPLY + 1))
3637     -#define NF_CT_STATE_UNTRACKED_BIT (1 << (IP_CT_UNTRACKED + 1))
3638     +#define NF_CT_STATE_UNTRACKED_BIT (1 << 6)
3639    
3640     /* Bitset representing status of connection. */
3641     enum ip_conntrack_status {
3642     diff --git a/include/xen/balloon.h b/include/xen/balloon.h
3643     index 4914b93a23f2..61f410fd74e4 100644
3644     --- a/include/xen/balloon.h
3645     +++ b/include/xen/balloon.h
3646     @@ -44,3 +44,8 @@ static inline void xen_balloon_init(void)
3647     {
3648     }
3649     #endif
3650     +
3651     +#ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG
3652     +struct resource;
3653     +void arch_xen_balloon_init(struct resource *hostmem_resource);
3654     +#endif
3655     diff --git a/kernel/bpf/sockmap.c b/kernel/bpf/sockmap.c
3656     index dbd7b322a86b..1890be7ea9cd 100644
3657     --- a/kernel/bpf/sockmap.c
3658     +++ b/kernel/bpf/sockmap.c
3659     @@ -588,8 +588,15 @@ static void sock_map_free(struct bpf_map *map)
3660    
3661     write_lock_bh(&sock->sk_callback_lock);
3662     psock = smap_psock_sk(sock);
3663     - smap_list_remove(psock, &stab->sock_map[i]);
3664     - smap_release_sock(psock, sock);
3665     + /* This check handles a racing sock event that can get the
3666     + * sk_callback_lock before this case but after xchg happens
3667     + * causing the refcnt to hit zero and sock user data (psock)
3668     + * to be null and queued for garbage collection.
3669     + */
3670     + if (likely(psock)) {
3671     + smap_list_remove(psock, &stab->sock_map[i]);
3672     + smap_release_sock(psock, sock);
3673     + }
3674     write_unlock_bh(&sock->sk_callback_lock);
3675     }
3676     rcu_read_unlock();
3677     diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
3678     index 024085daab1a..a2c05d2476ac 100644
3679     --- a/kernel/cgroup/cgroup-v1.c
3680     +++ b/kernel/cgroup/cgroup-v1.c
3681     @@ -123,7 +123,11 @@ int cgroup_transfer_tasks(struct cgroup *to, struct cgroup *from)
3682     */
3683     do {
3684     css_task_iter_start(&from->self, 0, &it);
3685     - task = css_task_iter_next(&it);
3686     +
3687     + do {
3688     + task = css_task_iter_next(&it);
3689     + } while (task && (task->flags & PF_EXITING));
3690     +
3691     if (task)
3692     get_task_struct(task);
3693     css_task_iter_end(&it);
3694     diff --git a/kernel/irq/debug.h b/kernel/irq/debug.h
3695     index 17f05ef8f575..e4d3819a91cc 100644
3696     --- a/kernel/irq/debug.h
3697     +++ b/kernel/irq/debug.h
3698     @@ -12,6 +12,11 @@
3699    
3700     static inline void print_irq_desc(unsigned int irq, struct irq_desc *desc)
3701     {
3702     + static DEFINE_RATELIMIT_STATE(ratelimit, 5 * HZ, 5);
3703     +
3704     + if (!__ratelimit(&ratelimit))
3705     + return;
3706     +
3707     printk("irq %d, desc: %p, depth: %d, count: %d, unhandled: %d\n",
3708     irq, desc, desc->depth, desc->irq_count, desc->irqs_unhandled);
3709     printk("->handle_irq(): %p, ", desc->handle_irq);
3710     diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
3711     index 052773df9f03..d00e85ac10d6 100644
3712     --- a/kernel/time/hrtimer.c
3713     +++ b/kernel/time/hrtimer.c
3714     @@ -1106,7 +1106,12 @@ static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
3715    
3716     cpu_base = raw_cpu_ptr(&hrtimer_bases);
3717    
3718     - if (clock_id == CLOCK_REALTIME && mode != HRTIMER_MODE_ABS)
3719     + /*
3720     + * POSIX magic: Relative CLOCK_REALTIME timers are not affected by
3721     + * clock modifications, so they needs to become CLOCK_MONOTONIC to
3722     + * ensure POSIX compliance.
3723     + */
3724     + if (clock_id == CLOCK_REALTIME && mode & HRTIMER_MODE_REL)
3725     clock_id = CLOCK_MONOTONIC;
3726    
3727     base = hrtimer_clockid_to_base(clock_id);
3728     diff --git a/lib/mpi/longlong.h b/lib/mpi/longlong.h
3729     index 57fd45ab7af1..08c60d10747f 100644
3730     --- a/lib/mpi/longlong.h
3731     +++ b/lib/mpi/longlong.h
3732     @@ -671,7 +671,23 @@ do { \
3733     ************** MIPS/64 **************
3734     ***************************************/
3735     #if (defined(__mips) && __mips >= 3) && W_TYPE_SIZE == 64
3736     -#if (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4)
3737     +#if defined(__mips_isa_rev) && __mips_isa_rev >= 6
3738     +/*
3739     + * GCC ends up emitting a __multi3 intrinsic call for MIPS64r6 with the plain C
3740     + * code below, so we special case MIPS64r6 until the compiler can do better.
3741     + */
3742     +#define umul_ppmm(w1, w0, u, v) \
3743     +do { \
3744     + __asm__ ("dmulu %0,%1,%2" \
3745     + : "=d" ((UDItype)(w0)) \
3746     + : "d" ((UDItype)(u)), \
3747     + "d" ((UDItype)(v))); \
3748     + __asm__ ("dmuhu %0,%1,%2" \
3749     + : "=d" ((UDItype)(w1)) \
3750     + : "d" ((UDItype)(u)), \
3751     + "d" ((UDItype)(v))); \
3752     +} while (0)
3753     +#elif (__GNUC__ >= 5) || (__GNUC__ >= 4 && __GNUC_MINOR__ >= 4)
3754     #define umul_ppmm(w1, w0, u, v) \
3755     do { \
3756     typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \
3757     diff --git a/mm/frame_vector.c b/mm/frame_vector.c
3758     index 297c7238f7d4..c64dca6e27c2 100644
3759     --- a/mm/frame_vector.c
3760     +++ b/mm/frame_vector.c
3761     @@ -62,8 +62,10 @@ int get_vaddr_frames(unsigned long start, unsigned int nr_frames,
3762     * get_user_pages_longterm() and disallow it for filesystem-dax
3763     * mappings.
3764     */
3765     - if (vma_is_fsdax(vma))
3766     - return -EOPNOTSUPP;
3767     + if (vma_is_fsdax(vma)) {
3768     + ret = -EOPNOTSUPP;
3769     + goto out;
3770     + }
3771    
3772     if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) {
3773     vec->got_ref = true;
3774     diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
3775     index 045331204097..1933654007c4 100644
3776     --- a/net/ipv4/ip_gre.c
3777     +++ b/net/ipv4/ip_gre.c
3778     @@ -1274,6 +1274,7 @@ static const struct net_device_ops erspan_netdev_ops = {
3779     static void ipgre_tap_setup(struct net_device *dev)
3780     {
3781     ether_setup(dev);
3782     + dev->max_mtu = 0;
3783     dev->netdev_ops = &gre_tap_netdev_ops;
3784     dev->priv_flags &= ~IFF_TX_SKB_SHARING;
3785     dev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
3786     diff --git a/net/ipv4/xfrm4_input.c b/net/ipv4/xfrm4_input.c
3787     index e50b7fea57ee..bcfc00e88756 100644
3788     --- a/net/ipv4/xfrm4_input.c
3789     +++ b/net/ipv4/xfrm4_input.c
3790     @@ -23,6 +23,12 @@ int xfrm4_extract_input(struct xfrm_state *x, struct sk_buff *skb)
3791     return xfrm4_extract_header(skb);
3792     }
3793    
3794     +static int xfrm4_rcv_encap_finish2(struct net *net, struct sock *sk,
3795     + struct sk_buff *skb)
3796     +{
3797     + return dst_input(skb);
3798     +}
3799     +
3800     static inline int xfrm4_rcv_encap_finish(struct net *net, struct sock *sk,
3801     struct sk_buff *skb)
3802     {
3803     @@ -33,7 +39,11 @@ static inline int xfrm4_rcv_encap_finish(struct net *net, struct sock *sk,
3804     iph->tos, skb->dev))
3805     goto drop;
3806     }
3807     - return dst_input(skb);
3808     +
3809     + if (xfrm_trans_queue(skb, xfrm4_rcv_encap_finish2))
3810     + goto drop;
3811     +
3812     + return 0;
3813     drop:
3814     kfree_skb(skb);
3815     return NET_RX_DROP;
3816     diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
3817     index 5b4870caf268..e8ab306794d8 100644
3818     --- a/net/ipv6/ip6_gre.c
3819     +++ b/net/ipv6/ip6_gre.c
3820     @@ -1335,6 +1335,7 @@ static void ip6gre_tap_setup(struct net_device *dev)
3821    
3822     ether_setup(dev);
3823    
3824     + dev->max_mtu = 0;
3825     dev->netdev_ops = &ip6gre_tap_netdev_ops;
3826     dev->needs_free_netdev = true;
3827     dev->priv_destructor = ip6gre_dev_free;
3828     diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
3829     index 3f46121ad139..1161fd5630c1 100644
3830     --- a/net/ipv6/ip6_tunnel.c
3831     +++ b/net/ipv6/ip6_tunnel.c
3832     @@ -1131,8 +1131,13 @@ int ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev, __u8 dsfield,
3833     max_headroom += 8;
3834     mtu -= 8;
3835     }
3836     - if (mtu < IPV6_MIN_MTU)
3837     - mtu = IPV6_MIN_MTU;
3838     + if (skb->protocol == htons(ETH_P_IPV6)) {
3839     + if (mtu < IPV6_MIN_MTU)
3840     + mtu = IPV6_MIN_MTU;
3841     + } else if (mtu < 576) {
3842     + mtu = 576;
3843     + }
3844     +
3845     if (skb_dst(skb) && !t->parms.collect_md)
3846     skb_dst(skb)->ops->update_pmtu(skb_dst(skb), NULL, skb, mtu);
3847     if (skb->len - t->tun_hlen - eth_hlen > mtu && !skb_is_gso(skb)) {
3848     @@ -1679,11 +1684,11 @@ int ip6_tnl_change_mtu(struct net_device *dev, int new_mtu)
3849     {
3850     struct ip6_tnl *tnl = netdev_priv(dev);
3851    
3852     - if (tnl->parms.proto == IPPROTO_IPIP) {
3853     - if (new_mtu < ETH_MIN_MTU)
3854     + if (tnl->parms.proto == IPPROTO_IPV6) {
3855     + if (new_mtu < IPV6_MIN_MTU)
3856     return -EINVAL;
3857     } else {
3858     - if (new_mtu < IPV6_MIN_MTU)
3859     + if (new_mtu < ETH_MIN_MTU)
3860     return -EINVAL;
3861     }
3862     if (new_mtu > 0xFFF8 - dev->hard_header_len)
3863     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
3864     index ca8d3266e92e..a4a865c8a23c 100644
3865     --- a/net/ipv6/route.c
3866     +++ b/net/ipv6/route.c
3867     @@ -1755,6 +1755,7 @@ struct dst_entry *icmp6_dst_alloc(struct net_device *dev,
3868     }
3869    
3870     rt->dst.flags |= DST_HOST;
3871     + rt->dst.input = ip6_input;
3872     rt->dst.output = ip6_output;
3873     rt->rt6i_gateway = fl6->daddr;
3874     rt->rt6i_dst.addr = fl6->daddr;
3875     diff --git a/net/ipv6/xfrm6_input.c b/net/ipv6/xfrm6_input.c
3876     index fe04e23af986..841f4a07438e 100644
3877     --- a/net/ipv6/xfrm6_input.c
3878     +++ b/net/ipv6/xfrm6_input.c
3879     @@ -32,6 +32,14 @@ int xfrm6_rcv_spi(struct sk_buff *skb, int nexthdr, __be32 spi,
3880     }
3881     EXPORT_SYMBOL(xfrm6_rcv_spi);
3882    
3883     +static int xfrm6_transport_finish2(struct net *net, struct sock *sk,
3884     + struct sk_buff *skb)
3885     +{
3886     + if (xfrm_trans_queue(skb, ip6_rcv_finish))
3887     + __kfree_skb(skb);
3888     + return -1;
3889     +}
3890     +
3891     int xfrm6_transport_finish(struct sk_buff *skb, int async)
3892     {
3893     struct xfrm_offload *xo = xfrm_offload(skb);
3894     @@ -56,7 +64,7 @@ int xfrm6_transport_finish(struct sk_buff *skb, int async)
3895    
3896     NF_HOOK(NFPROTO_IPV6, NF_INET_PRE_ROUTING,
3897     dev_net(skb->dev), NULL, skb, skb->dev, NULL,
3898     - ip6_rcv_finish);
3899     + xfrm6_transport_finish2);
3900     return -1;
3901     }
3902    
3903     diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
3904     index 70e9d2ca8bbe..4daafb07602f 100644
3905     --- a/net/mac80211/rx.c
3906     +++ b/net/mac80211/rx.c
3907     @@ -3632,6 +3632,8 @@ static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx)
3908     }
3909     return true;
3910     case NL80211_IFTYPE_MESH_POINT:
3911     + if (ether_addr_equal(sdata->vif.addr, hdr->addr2))
3912     + return false;
3913     if (multicast)
3914     return true;
3915     return ether_addr_equal(sdata->vif.addr, hdr->addr1);
3916     diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
3917     index 64e1ee091225..5b504aa653f5 100644
3918     --- a/net/netfilter/nf_tables_api.c
3919     +++ b/net/netfilter/nf_tables_api.c
3920     @@ -2072,7 +2072,7 @@ static int nf_tables_dump_rules(struct sk_buff *skb,
3921     continue;
3922    
3923     list_for_each_entry_rcu(chain, &table->chains, list) {
3924     - if (ctx && ctx->chain[0] &&
3925     + if (ctx && ctx->chain &&
3926     strcmp(ctx->chain, chain->name) != 0)
3927     continue;
3928    
3929     @@ -4596,8 +4596,10 @@ static int nf_tables_dump_obj_done(struct netlink_callback *cb)
3930     {
3931     struct nft_obj_filter *filter = cb->data;
3932    
3933     - kfree(filter->table);
3934     - kfree(filter);
3935     + if (filter) {
3936     + kfree(filter->table);
3937     + kfree(filter);
3938     + }
3939    
3940     return 0;
3941     }
3942     diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
3943     index ecbb019efcbd..934c239cf98d 100644
3944     --- a/net/sched/cls_api.c
3945     +++ b/net/sched/cls_api.c
3946     @@ -197,21 +197,26 @@ static struct tcf_chain *tcf_chain_create(struct tcf_block *block,
3947    
3948     static void tcf_chain_flush(struct tcf_chain *chain)
3949     {
3950     - struct tcf_proto *tp;
3951     + struct tcf_proto *tp = rtnl_dereference(chain->filter_chain);
3952    
3953     if (chain->p_filter_chain)
3954     RCU_INIT_POINTER(*chain->p_filter_chain, NULL);
3955     - while ((tp = rtnl_dereference(chain->filter_chain)) != NULL) {
3956     + while (tp) {
3957     RCU_INIT_POINTER(chain->filter_chain, tp->next);
3958     - tcf_chain_put(chain);
3959     tcf_proto_destroy(tp);
3960     + tp = rtnl_dereference(chain->filter_chain);
3961     + tcf_chain_put(chain);
3962     }
3963     }
3964    
3965     static void tcf_chain_destroy(struct tcf_chain *chain)
3966     {
3967     + struct tcf_block *block = chain->block;
3968     +
3969     list_del(&chain->list);
3970     kfree(chain);
3971     + if (list_empty(&block->chain_list))
3972     + kfree(block);
3973     }
3974    
3975     static void tcf_chain_hold(struct tcf_chain *chain)
3976     @@ -275,22 +280,8 @@ int tcf_block_get(struct tcf_block **p_block,
3977     }
3978     EXPORT_SYMBOL(tcf_block_get);
3979    
3980     -static void tcf_block_put_final(struct work_struct *work)
3981     -{
3982     - struct tcf_block *block = container_of(work, struct tcf_block, work);
3983     - struct tcf_chain *chain, *tmp;
3984     -
3985     - rtnl_lock();
3986     - /* Only chain 0 should be still here. */
3987     - list_for_each_entry_safe(chain, tmp, &block->chain_list, list)
3988     - tcf_chain_put(chain);
3989     - rtnl_unlock();
3990     - kfree(block);
3991     -}
3992     -
3993     /* XXX: Standalone actions are not allowed to jump to any chain, and bound
3994     - * actions should be all removed after flushing. However, filters are now
3995     - * destroyed in tc filter workqueue with RTNL lock, they can not race here.
3996     + * actions should be all removed after flushing.
3997     */
3998     void tcf_block_put(struct tcf_block *block)
3999     {
4000     @@ -299,15 +290,22 @@ void tcf_block_put(struct tcf_block *block)
4001     if (!block)
4002     return;
4003    
4004     - list_for_each_entry_safe(chain, tmp, &block->chain_list, list)
4005     + /* Hold a refcnt for all chains, so that they don't disappear
4006     + * while we are iterating.
4007     + */
4008     + list_for_each_entry(chain, &block->chain_list, list)
4009     + tcf_chain_hold(chain);
4010     +
4011     + list_for_each_entry(chain, &block->chain_list, list)
4012     tcf_chain_flush(chain);
4013    
4014     - INIT_WORK(&block->work, tcf_block_put_final);
4015     - /* Wait for RCU callbacks to release the reference count and make
4016     - * sure their works have been queued before this.
4017     - */
4018     - rcu_barrier();
4019     - tcf_queue_work(&block->work);
4020     + /* At this point, all the chains should have refcnt >= 1. */
4021     + list_for_each_entry_safe(chain, tmp, &block->chain_list, list)
4022     + tcf_chain_put(chain);
4023     +
4024     + /* Finally, put chain 0 and allow block to be freed. */
4025     + chain = list_first_entry(&block->chain_list, struct tcf_chain, list);
4026     + tcf_chain_put(chain);
4027     }
4028     EXPORT_SYMBOL(tcf_block_put);
4029    
4030     diff --git a/net/sctp/socket.c b/net/sctp/socket.c
4031     index 3c8b92667866..6b3a862706de 100644
4032     --- a/net/sctp/socket.c
4033     +++ b/net/sctp/socket.c
4034     @@ -3494,6 +3494,8 @@ static int sctp_setsockopt_hmac_ident(struct sock *sk,
4035    
4036     if (optlen < sizeof(struct sctp_hmacalgo))
4037     return -EINVAL;
4038     + optlen = min_t(unsigned int, optlen, sizeof(struct sctp_hmacalgo) +
4039     + SCTP_AUTH_NUM_HMACS * sizeof(u16));
4040    
4041     hmacs = memdup_user(optval, optlen);
4042     if (IS_ERR(hmacs))
4043     @@ -3532,6 +3534,11 @@ static int sctp_setsockopt_auth_key(struct sock *sk,
4044    
4045     if (optlen <= sizeof(struct sctp_authkey))
4046     return -EINVAL;
4047     + /* authkey->sca_keylength is u16, so optlen can't be bigger than
4048     + * this.
4049     + */
4050     + optlen = min_t(unsigned int, optlen, USHRT_MAX +
4051     + sizeof(struct sctp_authkey));
4052    
4053     authkey = memdup_user(optval, optlen);
4054     if (IS_ERR(authkey))
4055     @@ -3889,6 +3896,9 @@ static int sctp_setsockopt_reset_streams(struct sock *sk,
4056    
4057     if (optlen < sizeof(*params))
4058     return -EINVAL;
4059     + /* srs_number_streams is u16, so optlen can't be bigger than this. */
4060     + optlen = min_t(unsigned int, optlen, USHRT_MAX +
4061     + sizeof(__u16) * sizeof(*params));
4062    
4063     params = memdup_user(optval, optlen);
4064     if (IS_ERR(params))
4065     @@ -4947,7 +4957,7 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv
4066     len = sizeof(int);
4067     if (put_user(len, optlen))
4068     return -EFAULT;
4069     - if (copy_to_user(optval, &sctp_sk(sk)->autoclose, sizeof(int)))
4070     + if (copy_to_user(optval, &sctp_sk(sk)->autoclose, len))
4071     return -EFAULT;
4072     return 0;
4073     }
4074     @@ -5578,6 +5588,9 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len,
4075     err = -EFAULT;
4076     goto out;
4077     }
4078     + /* XXX: We should have accounted for sizeof(struct sctp_getaddrs) too,
4079     + * but we can't change it anymore.
4080     + */
4081     if (put_user(bytes_copied, optlen))
4082     err = -EFAULT;
4083     out:
4084     @@ -6014,7 +6027,7 @@ static int sctp_getsockopt_maxseg(struct sock *sk, int len,
4085     params.assoc_id = 0;
4086     } else if (len >= sizeof(struct sctp_assoc_value)) {
4087     len = sizeof(struct sctp_assoc_value);
4088     - if (copy_from_user(&params, optval, sizeof(params)))
4089     + if (copy_from_user(&params, optval, len))
4090     return -EFAULT;
4091     } else
4092     return -EINVAL;
4093     @@ -6184,7 +6197,9 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len,
4094    
4095     if (len < sizeof(struct sctp_authkeyid))
4096     return -EINVAL;
4097     - if (copy_from_user(&val, optval, sizeof(struct sctp_authkeyid)))
4098     +
4099     + len = sizeof(struct sctp_authkeyid);
4100     + if (copy_from_user(&val, optval, len))
4101     return -EFAULT;
4102    
4103     asoc = sctp_id2assoc(sk, val.scact_assoc_id);
4104     @@ -6196,7 +6211,6 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len,
4105     else
4106     val.scact_keynumber = ep->active_key_id;
4107    
4108     - len = sizeof(struct sctp_authkeyid);
4109     if (put_user(len, optlen))
4110     return -EFAULT;
4111     if (copy_to_user(optval, &val, len))
4112     @@ -6222,7 +6236,7 @@ static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len,
4113     if (len < sizeof(struct sctp_authchunks))
4114     return -EINVAL;
4115    
4116     - if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks)))
4117     + if (copy_from_user(&val, optval, sizeof(val)))
4118     return -EFAULT;
4119    
4120     to = p->gauth_chunks;
4121     @@ -6267,7 +6281,7 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len,
4122     if (len < sizeof(struct sctp_authchunks))
4123     return -EINVAL;
4124    
4125     - if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks)))
4126     + if (copy_from_user(&val, optval, sizeof(val)))
4127     return -EFAULT;
4128    
4129     to = p->gauth_chunks;
4130     diff --git a/net/sctp/ulpqueue.c b/net/sctp/ulpqueue.c
4131     index a71be33f3afe..e36ec5dd64c6 100644
4132     --- a/net/sctp/ulpqueue.c
4133     +++ b/net/sctp/ulpqueue.c
4134     @@ -1084,29 +1084,21 @@ void sctp_ulpq_partial_delivery(struct sctp_ulpq *ulpq,
4135     void sctp_ulpq_renege(struct sctp_ulpq *ulpq, struct sctp_chunk *chunk,
4136     gfp_t gfp)
4137     {
4138     - struct sctp_association *asoc;
4139     - __u16 needed, freed;
4140     -
4141     - asoc = ulpq->asoc;
4142     + struct sctp_association *asoc = ulpq->asoc;
4143     + __u32 freed = 0;
4144     + __u16 needed;
4145    
4146     - if (chunk) {
4147     - needed = ntohs(chunk->chunk_hdr->length);
4148     - needed -= sizeof(struct sctp_data_chunk);
4149     - } else
4150     - needed = SCTP_DEFAULT_MAXWINDOW;
4151     -
4152     - freed = 0;
4153     + needed = ntohs(chunk->chunk_hdr->length) -
4154     + sizeof(struct sctp_data_chunk);
4155    
4156     if (skb_queue_empty(&asoc->base.sk->sk_receive_queue)) {
4157     freed = sctp_ulpq_renege_order(ulpq, needed);
4158     - if (freed < needed) {
4159     + if (freed < needed)
4160     freed += sctp_ulpq_renege_frags(ulpq, needed - freed);
4161     - }
4162     }
4163     /* If able to free enough room, accept this chunk. */
4164     - if (chunk && (freed >= needed)) {
4165     - int retval;
4166     - retval = sctp_ulpq_tail_data(ulpq, chunk, gfp);
4167     + if (freed >= needed) {
4168     + int retval = sctp_ulpq_tail_data(ulpq, chunk, gfp);
4169     /*
4170     * Enter partial delivery if chunk has not been
4171     * delivered; otherwise, drain the reassembly queue.
4172     diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
4173     index 47ec121574ce..c8001471da6c 100644
4174     --- a/net/tipc/bearer.c
4175     +++ b/net/tipc/bearer.c
4176     @@ -324,6 +324,7 @@ static int tipc_enable_bearer(struct net *net, const char *name,
4177     if (res) {
4178     pr_warn("Bearer <%s> rejected, enable failure (%d)\n",
4179     name, -res);
4180     + kfree(b);
4181     return -EINVAL;
4182     }
4183    
4184     @@ -347,8 +348,10 @@ static int tipc_enable_bearer(struct net *net, const char *name,
4185     if (skb)
4186     tipc_bearer_xmit_skb(net, bearer_id, skb, &b->bcast_addr);
4187    
4188     - if (tipc_mon_create(net, bearer_id))
4189     + if (tipc_mon_create(net, bearer_id)) {
4190     + bearer_disable(net, b);
4191     return -ENOMEM;
4192     + }
4193    
4194     pr_info("Enabled bearer <%s>, discovery domain %s, priority %u\n",
4195     name,
4196     diff --git a/net/tipc/monitor.c b/net/tipc/monitor.c
4197     index 9e109bb1a207..0fcfb3916dcf 100644
4198     --- a/net/tipc/monitor.c
4199     +++ b/net/tipc/monitor.c
4200     @@ -633,9 +633,13 @@ void tipc_mon_delete(struct net *net, int bearer_id)
4201     {
4202     struct tipc_net *tn = tipc_net(net);
4203     struct tipc_monitor *mon = tipc_monitor(net, bearer_id);
4204     - struct tipc_peer *self = get_self(net, bearer_id);
4205     + struct tipc_peer *self;
4206     struct tipc_peer *peer, *tmp;
4207    
4208     + if (!mon)
4209     + return;
4210     +
4211     + self = get_self(net, bearer_id);
4212     write_lock_bh(&mon->lock);
4213     tn->monitors[bearer_id] = NULL;
4214     list_for_each_entry_safe(peer, tmp, &self->list, list) {
4215     diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
4216     index 81bef0676e1d..ea28aa505302 100644
4217     --- a/net/wireless/nl80211.c
4218     +++ b/net/wireless/nl80211.c
4219     @@ -11301,7 +11301,8 @@ static int nl80211_nan_add_func(struct sk_buff *skb,
4220     break;
4221     case NL80211_NAN_FUNC_FOLLOW_UP:
4222     if (!tb[NL80211_NAN_FUNC_FOLLOW_UP_ID] ||
4223     - !tb[NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID]) {
4224     + !tb[NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID] ||
4225     + !tb[NL80211_NAN_FUNC_FOLLOW_UP_DEST]) {
4226     err = -EINVAL;
4227     goto out;
4228     }
4229     diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
4230     index da6447389ffb..3f6f6f8c9fa5 100644
4231     --- a/net/xfrm/xfrm_input.c
4232     +++ b/net/xfrm/xfrm_input.c
4233     @@ -8,15 +8,29 @@
4234     *
4235     */
4236    
4237     +#include <linux/bottom_half.h>
4238     +#include <linux/interrupt.h>
4239     #include <linux/slab.h>
4240     #include <linux/module.h>
4241     #include <linux/netdevice.h>
4242     +#include <linux/percpu.h>
4243     #include <net/dst.h>
4244     #include <net/ip.h>
4245     #include <net/xfrm.h>
4246     #include <net/ip_tunnels.h>
4247     #include <net/ip6_tunnel.h>
4248    
4249     +struct xfrm_trans_tasklet {
4250     + struct tasklet_struct tasklet;
4251     + struct sk_buff_head queue;
4252     +};
4253     +
4254     +struct xfrm_trans_cb {
4255     + int (*finish)(struct net *net, struct sock *sk, struct sk_buff *skb);
4256     +};
4257     +
4258     +#define XFRM_TRANS_SKB_CB(__skb) ((struct xfrm_trans_cb *)&((__skb)->cb[0]))
4259     +
4260     static struct kmem_cache *secpath_cachep __read_mostly;
4261    
4262     static DEFINE_SPINLOCK(xfrm_input_afinfo_lock);
4263     @@ -25,6 +39,8 @@ static struct xfrm_input_afinfo const __rcu *xfrm_input_afinfo[AF_INET6 + 1];
4264     static struct gro_cells gro_cells;
4265     static struct net_device xfrm_napi_dev;
4266    
4267     +static DEFINE_PER_CPU(struct xfrm_trans_tasklet, xfrm_trans_tasklet);
4268     +
4269     int xfrm_input_register_afinfo(const struct xfrm_input_afinfo *afinfo)
4270     {
4271     int err = 0;
4272     @@ -477,9 +493,41 @@ int xfrm_input_resume(struct sk_buff *skb, int nexthdr)
4273     }
4274     EXPORT_SYMBOL(xfrm_input_resume);
4275    
4276     +static void xfrm_trans_reinject(unsigned long data)
4277     +{
4278     + struct xfrm_trans_tasklet *trans = (void *)data;
4279     + struct sk_buff_head queue;
4280     + struct sk_buff *skb;
4281     +
4282     + __skb_queue_head_init(&queue);
4283     + skb_queue_splice_init(&trans->queue, &queue);
4284     +
4285     + while ((skb = __skb_dequeue(&queue)))
4286     + XFRM_TRANS_SKB_CB(skb)->finish(dev_net(skb->dev), NULL, skb);
4287     +}
4288     +
4289     +int xfrm_trans_queue(struct sk_buff *skb,
4290     + int (*finish)(struct net *, struct sock *,
4291     + struct sk_buff *))
4292     +{
4293     + struct xfrm_trans_tasklet *trans;
4294     +
4295     + trans = this_cpu_ptr(&xfrm_trans_tasklet);
4296     +
4297     + if (skb_queue_len(&trans->queue) >= netdev_max_backlog)
4298     + return -ENOBUFS;
4299     +
4300     + XFRM_TRANS_SKB_CB(skb)->finish = finish;
4301     + skb_queue_tail(&trans->queue, skb);
4302     + tasklet_schedule(&trans->tasklet);
4303     + return 0;
4304     +}
4305     +EXPORT_SYMBOL(xfrm_trans_queue);
4306     +
4307     void __init xfrm_input_init(void)
4308     {
4309     int err;
4310     + int i;
4311    
4312     init_dummy_netdev(&xfrm_napi_dev);
4313     err = gro_cells_init(&gro_cells, &xfrm_napi_dev);
4314     @@ -490,4 +538,13 @@ void __init xfrm_input_init(void)
4315     sizeof(struct sec_path),
4316     0, SLAB_HWCACHE_ALIGN|SLAB_PANIC,
4317     NULL);
4318     +
4319     + for_each_possible_cpu(i) {
4320     + struct xfrm_trans_tasklet *trans;
4321     +
4322     + trans = &per_cpu(xfrm_trans_tasklet, i);
4323     + __skb_queue_head_init(&trans->queue);
4324     + tasklet_init(&trans->tasklet, xfrm_trans_reinject,
4325     + (unsigned long)trans);
4326     + }
4327     }
4328     diff --git a/sound/soc/codecs/nau8825.c b/sound/soc/codecs/nau8825.c
4329     index 714ce17da717..e853a6dfd33b 100644
4330     --- a/sound/soc/codecs/nau8825.c
4331     +++ b/sound/soc/codecs/nau8825.c
4332     @@ -905,6 +905,7 @@ static int nau8825_adc_event(struct snd_soc_dapm_widget *w,
4333    
4334     switch (event) {
4335     case SND_SOC_DAPM_POST_PMU:
4336     + msleep(125);
4337     regmap_update_bits(nau8825->regmap, NAU8825_REG_ENA_CTRL,
4338     NAU8825_ENABLE_ADC, NAU8825_ENABLE_ADC);
4339     break;
4340     diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c
4341     index 938baff86ef2..2684a2ba33cd 100644
4342     --- a/sound/soc/sh/rcar/adg.c
4343     +++ b/sound/soc/sh/rcar/adg.c
4344     @@ -216,7 +216,7 @@ int rsnd_adg_set_cmd_timsel_gen2(struct rsnd_mod *cmd_mod,
4345     NULL, &val, NULL);
4346    
4347     val = val << shift;
4348     - mask = 0xffff << shift;
4349     + mask = 0x0f1f << shift;
4350    
4351     rsnd_mod_bset(adg_mod, CMDOUT_TIMSEL, mask, val);
4352    
4353     @@ -244,7 +244,7 @@ int rsnd_adg_set_src_timesel_gen2(struct rsnd_mod *src_mod,
4354    
4355     in = in << shift;
4356     out = out << shift;
4357     - mask = 0xffff << shift;
4358     + mask = 0x0f1f << shift;
4359    
4360     switch (id / 2) {
4361     case 0:
4362     @@ -374,7 +374,7 @@ int rsnd_adg_ssi_clk_try_start(struct rsnd_mod *ssi_mod, unsigned int rate)
4363     ckr = 0x80000000;
4364     }
4365    
4366     - rsnd_mod_bset(adg_mod, BRGCKR, 0x80FF0000, adg->ckr | ckr);
4367     + rsnd_mod_bset(adg_mod, BRGCKR, 0x80770000, adg->ckr | ckr);
4368     rsnd_mod_write(adg_mod, BRRA, adg->rbga);
4369     rsnd_mod_write(adg_mod, BRRB, adg->rbgb);
4370