Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.9/0235-4.9.136-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3245 - (hide annotations) (download)
Mon Nov 12 12:10:50 2018 UTC (5 years, 6 months ago) by niro
File size: 182625 byte(s)
-linux-4.9.136
1 niro 3245 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
2     index f9f67be8d3c3..c708a50b060e 100644
3     --- a/Documentation/kernel-parameters.txt
4     +++ b/Documentation/kernel-parameters.txt
5     @@ -313,7 +313,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
6     This facility can be used to prevent such uncontrolled
7     GPE floodings.
8     Format: <int>
9     - Support masking of GPEs numbered from 0x00 to 0x7f.
10    
11     acpi_no_auto_serialize [HW,ACPI]
12     Disable auto-serialization of AML methods
13     diff --git a/Makefile b/Makefile
14     index 3678e4d19ebc..79b8f3a44f74 100644
15     --- a/Makefile
16     +++ b/Makefile
17     @@ -1,6 +1,6 @@
18     VERSION = 4
19     PATCHLEVEL = 9
20     -SUBLEVEL = 135
21     +SUBLEVEL = 136
22     EXTRAVERSION =
23     NAME = Roaring Lionus
24    
25     diff --git a/arch/arm/boot/compressed/efi-header.S b/arch/arm/boot/compressed/efi-header.S
26     index 9d5dc4fda3c1..3f7d1b74c5e0 100644
27     --- a/arch/arm/boot/compressed/efi-header.S
28     +++ b/arch/arm/boot/compressed/efi-header.S
29     @@ -17,14 +17,12 @@
30     @ there.
31     .inst 'M' | ('Z' << 8) | (0x1310 << 16) @ tstne r0, #0x4d000
32     #else
33     - mov r0, r0
34     + W(mov) r0, r0
35     #endif
36     .endm
37    
38     .macro __EFI_HEADER
39     #ifdef CONFIG_EFI_STUB
40     - b __efi_start
41     -
42     .set start_offset, __efi_start - start
43     .org start + 0x3c
44     @
45     diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
46     index fc6d541549a2..2d7f2bb0d66a 100644
47     --- a/arch/arm/boot/compressed/head.S
48     +++ b/arch/arm/boot/compressed/head.S
49     @@ -130,19 +130,22 @@ start:
50     .rept 7
51     __nop
52     .endr
53     - ARM( mov r0, r0 )
54     - ARM( b 1f )
55     - THUMB( badr r12, 1f )
56     - THUMB( bx r12 )
57     +#ifndef CONFIG_THUMB2_KERNEL
58     + mov r0, r0
59     +#else
60     + AR_CLASS( sub pc, pc, #3 ) @ A/R: switch to Thumb2 mode
61     + M_CLASS( nop.w ) @ M: already in Thumb2 mode
62     + .thumb
63     +#endif
64     + W(b) 1f
65    
66     .word _magic_sig @ Magic numbers to help the loader
67     .word _magic_start @ absolute load/run zImage address
68     .word _magic_end @ zImage end address
69     .word 0x04030201 @ endianness flag
70    
71     - THUMB( .thumb )
72     -1: __EFI_HEADER
73     -
74     + __EFI_HEADER
75     +1:
76     ARM_BE8( setend be ) @ go BE8 if compiled for BE8
77     AR_CLASS( mrs r9, cpsr )
78     #ifdef CONFIG_ARM_VIRT_EXT
79     diff --git a/arch/arm/boot/dts/bcm283x.dtsi b/arch/arm/boot/dts/bcm283x.dtsi
80     index c51b88ee3cec..31563007772c 100644
81     --- a/arch/arm/boot/dts/bcm283x.dtsi
82     +++ b/arch/arm/boot/dts/bcm283x.dtsi
83     @@ -3,6 +3,11 @@
84     #include <dt-bindings/clock/bcm2835-aux.h>
85     #include <dt-bindings/gpio/gpio.h>
86    
87     +/* firmware-provided startup stubs live here, where the secondary CPUs are
88     + * spinning.
89     + */
90     +/memreserve/ 0x00000000 0x00001000;
91     +
92     /* This include file covers the common peripherals and configuration between
93     * bcm2835 and bcm2836 implementations, leaving the CPU configuration to
94     * bcm2835.dtsi and bcm2836.dtsi.
95     diff --git a/arch/arm/boot/dts/bcm63138.dtsi b/arch/arm/boot/dts/bcm63138.dtsi
96     index d0560e8cd6de..547369c69e96 100644
97     --- a/arch/arm/boot/dts/bcm63138.dtsi
98     +++ b/arch/arm/boot/dts/bcm63138.dtsi
99     @@ -105,21 +105,23 @@
100     global_timer: timer@1e200 {
101     compatible = "arm,cortex-a9-global-timer";
102     reg = <0x1e200 0x20>;
103     - interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
104     + interrupts = <GIC_PPI 11 IRQ_TYPE_EDGE_RISING>;
105     clocks = <&axi_clk>;
106     };
107    
108     local_timer: local-timer@1e600 {
109     compatible = "arm,cortex-a9-twd-timer";
110     reg = <0x1e600 0x20>;
111     - interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>;
112     + interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) |
113     + IRQ_TYPE_EDGE_RISING)>;
114     clocks = <&axi_clk>;
115     };
116    
117     twd_watchdog: watchdog@1e620 {
118     compatible = "arm,cortex-a9-twd-wdt";
119     reg = <0x1e620 0x20>;
120     - interrupts = <GIC_PPI 14 IRQ_TYPE_LEVEL_HIGH>;
121     + interrupts = <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) |
122     + IRQ_TYPE_LEVEL_HIGH)>;
123     };
124    
125     armpll: armpll {
126     @@ -157,7 +159,7 @@
127     serial0: serial@600 {
128     compatible = "brcm,bcm6345-uart";
129     reg = <0x600 0x1b>;
130     - interrupts = <GIC_SPI 32 0>;
131     + interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
132     clocks = <&periph_clk>;
133     clock-names = "periph";
134     status = "disabled";
135     @@ -166,7 +168,7 @@
136     serial1: serial@620 {
137     compatible = "brcm,bcm6345-uart";
138     reg = <0x620 0x1b>;
139     - interrupts = <GIC_SPI 33 0>;
140     + interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
141     clocks = <&periph_clk>;
142     clock-names = "periph";
143     status = "disabled";
144     @@ -179,7 +181,7 @@
145     reg = <0x2000 0x600>, <0xf0 0x10>;
146     reg-names = "nand", "nand-int-base";
147     status = "disabled";
148     - interrupts = <GIC_SPI 38 0>;
149     + interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
150     interrupt-names = "nand";
151     };
152    
153     diff --git a/arch/arm/boot/dts/imx53-qsb-common.dtsi b/arch/arm/boot/dts/imx53-qsb-common.dtsi
154     index c05e7cfd0cbc..c8a6a6868c46 100644
155     --- a/arch/arm/boot/dts/imx53-qsb-common.dtsi
156     +++ b/arch/arm/boot/dts/imx53-qsb-common.dtsi
157     @@ -130,6 +130,17 @@
158     };
159     };
160    
161     +&cpu0 {
162     + /* CPU rated to 1GHz, not 1.2GHz as per the default settings */
163     + operating-points = <
164     + /* kHz uV */
165     + 166666 850000
166     + 400000 900000
167     + 800000 1050000
168     + 1000000 1200000
169     + >;
170     +};
171     +
172     &esdhc1 {
173     pinctrl-names = "default";
174     pinctrl-0 = <&pinctrl_esdhc1>;
175     diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
176     index ff0eed23ddf1..66e5d8765601 100644
177     --- a/arch/arm/mm/ioremap.c
178     +++ b/arch/arm/mm/ioremap.c
179     @@ -473,7 +473,7 @@ void pci_ioremap_set_mem_type(int mem_type)
180    
181     int pci_ioremap_io(unsigned int offset, phys_addr_t phys_addr)
182     {
183     - BUG_ON(offset + SZ_64K > IO_SPACE_LIMIT);
184     + BUG_ON(offset + SZ_64K - 1 > IO_SPACE_LIMIT);
185    
186     return ioremap_page_range(PCI_IO_VIRT_BASE + offset,
187     PCI_IO_VIRT_BASE + offset + SZ_64K,
188     diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm/inst.h
189     index 77429d1622b3..711d9b8465b8 100644
190     --- a/arch/mips/include/uapi/asm/inst.h
191     +++ b/arch/mips/include/uapi/asm/inst.h
192     @@ -964,7 +964,7 @@ struct mm16_r3_format { /* Load from global pointer format */
193     struct mm16_r5_format { /* Load/store from stack pointer format */
194     __BITFIELD_FIELD(unsigned int opcode : 6,
195     __BITFIELD_FIELD(unsigned int rt : 5,
196     - __BITFIELD_FIELD(signed int simmediate : 5,
197     + __BITFIELD_FIELD(unsigned int imm : 5,
198     __BITFIELD_FIELD(unsigned int : 16, /* Ignored */
199     ;))))
200     };
201     diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
202     index ba315e523b33..1cc133e7026f 100644
203     --- a/arch/mips/kernel/process.c
204     +++ b/arch/mips/kernel/process.c
205     @@ -212,7 +212,7 @@ static inline int is_ra_save_ins(union mips_instruction *ip, int *poff)
206     if (ip->mm16_r5_format.rt != 31)
207     return 0;
208    
209     - *poff = ip->mm16_r5_format.simmediate;
210     + *poff = ip->mm16_r5_format.imm;
211     *poff = (*poff << 2) / sizeof(ulong);
212     return 1;
213    
214     @@ -346,6 +346,7 @@ static int get_frame_info(struct mips_frame_info *info)
215     bool is_mmips = IS_ENABLED(CONFIG_CPU_MICROMIPS);
216     union mips_instruction insn, *ip, *ip_end;
217     const unsigned int max_insns = 128;
218     + unsigned int last_insn_size = 0;
219     unsigned int i;
220    
221     info->pc_offset = -1;
222     @@ -357,15 +358,19 @@ static int get_frame_info(struct mips_frame_info *info)
223    
224     ip_end = (void *)ip + info->func_size;
225    
226     - for (i = 0; i < max_insns && ip < ip_end; i++, ip++) {
227     + for (i = 0; i < max_insns && ip < ip_end; i++) {
228     + ip = (void *)ip + last_insn_size;
229     if (is_mmips && mm_insn_16bit(ip->halfword[0])) {
230     insn.halfword[0] = 0;
231     insn.halfword[1] = ip->halfword[0];
232     + last_insn_size = 2;
233     } else if (is_mmips) {
234     insn.halfword[0] = ip->halfword[1];
235     insn.halfword[1] = ip->halfword[0];
236     + last_insn_size = 4;
237     } else {
238     insn.word = ip->word;
239     + last_insn_size = 4;
240     }
241    
242     if (is_jump_ins(&insn))
243     @@ -387,8 +392,6 @@ static int get_frame_info(struct mips_frame_info *info)
244     tmp = (ip->halfword[0] >> 1);
245     info->frame_size = -(signed short)(tmp & 0xf);
246     }
247     - ip = (void *) &ip->halfword[1];
248     - ip--;
249     } else
250     #endif
251     info->frame_size = - ip->i_format.simmediate;
252     diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig
253     index 8b4152f3a764..cef42d4be292 100644
254     --- a/arch/sparc/Kconfig
255     +++ b/arch/sparc/Kconfig
256     @@ -290,9 +290,13 @@ config NUMA
257     depends on SPARC64 && SMP
258    
259     config NODES_SHIFT
260     - int
261     - default "4"
262     + int "Maximum NUMA Nodes (as a power of 2)"
263     + range 4 5 if SPARC64
264     + default "5"
265     depends on NEED_MULTIPLE_NODES
266     + help
267     + Specify the maximum number of NUMA Nodes available on the target
268     + system. Increases memory reserved to accommodate various tables.
269    
270     # Some NUMA nodes have memory ranges that span
271     # other nodes. Even though a pfn is valid and
272     diff --git a/arch/sparc/mm/tlb.c b/arch/sparc/mm/tlb.c
273     index b2722ed31053..349cb83f7b5f 100644
274     --- a/arch/sparc/mm/tlb.c
275     +++ b/arch/sparc/mm/tlb.c
276     @@ -163,13 +163,10 @@ static void tlb_batch_pmd_scan(struct mm_struct *mm, unsigned long vaddr,
277     pte_unmap(pte);
278     }
279    
280     -void set_pmd_at(struct mm_struct *mm, unsigned long addr,
281     - pmd_t *pmdp, pmd_t pmd)
282     -{
283     - pmd_t orig = *pmdp;
284     -
285     - *pmdp = pmd;
286    
287     +static void __set_pmd_acct(struct mm_struct *mm, unsigned long addr,
288     + pmd_t orig, pmd_t pmd)
289     +{
290     if (mm == &init_mm)
291     return;
292    
293     @@ -219,6 +216,15 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr,
294     }
295     }
296    
297     +void set_pmd_at(struct mm_struct *mm, unsigned long addr,
298     + pmd_t *pmdp, pmd_t pmd)
299     +{
300     + pmd_t orig = *pmdp;
301     +
302     + *pmdp = pmd;
303     + __set_pmd_acct(mm, addr, orig, pmd);
304     +}
305     +
306     static inline pmd_t pmdp_establish(struct vm_area_struct *vma,
307     unsigned long address, pmd_t *pmdp, pmd_t pmd)
308     {
309     @@ -227,6 +233,7 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,
310     do {
311     old = *pmdp;
312     } while (cmpxchg64(&pmdp->pmd, old.pmd, pmd.pmd) != old.pmd);
313     + __set_pmd_acct(vma->vm_mm, address, old, pmd);
314    
315     return old;
316     }
317     diff --git a/arch/x86/events/intel/uncore_snbep.c b/arch/x86/events/intel/uncore_snbep.c
318     index 6bc36944a8c1..8c2a9fa0caf3 100644
319     --- a/arch/x86/events/intel/uncore_snbep.c
320     +++ b/arch/x86/events/intel/uncore_snbep.c
321     @@ -3767,16 +3767,16 @@ static const struct pci_device_id skx_uncore_pci_ids[] = {
322     .driver_data = UNCORE_PCI_DEV_FULL_DATA(21, 5, SKX_PCI_UNCORE_M2PCIE, 3),
323     },
324     { /* M3UPI0 Link 0 */
325     - PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204C),
326     - .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 0, SKX_PCI_UNCORE_M3UPI, 0),
327     + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204D),
328     + .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 1, SKX_PCI_UNCORE_M3UPI, 0),
329     },
330     { /* M3UPI0 Link 1 */
331     - PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204D),
332     - .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 1, SKX_PCI_UNCORE_M3UPI, 1),
333     + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204E),
334     + .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 2, SKX_PCI_UNCORE_M3UPI, 1),
335     },
336     { /* M3UPI1 Link 2 */
337     - PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204C),
338     - .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 4, SKX_PCI_UNCORE_M3UPI, 2),
339     + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204D),
340     + .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 5, SKX_PCI_UNCORE_M3UPI, 2),
341     },
342     { /* end: all zeroes */ }
343     };
344     diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h
345     index 25152843dd1f..8554f960e21b 100644
346     --- a/arch/x86/include/asm/fixmap.h
347     +++ b/arch/x86/include/asm/fixmap.h
348     @@ -14,16 +14,6 @@
349     #ifndef _ASM_X86_FIXMAP_H
350     #define _ASM_X86_FIXMAP_H
351    
352     -/*
353     - * Exposed to assembly code for setting up initial page tables. Cannot be
354     - * calculated in assembly code (fixmap entries are an enum), but is sanity
355     - * checked in the actual fixmap C code to make sure that the fixmap is
356     - * covered fully.
357     - */
358     -#define FIXMAP_PMD_NUM 2
359     -/* fixmap starts downwards from the 507th entry in level2_fixmap_pgt */
360     -#define FIXMAP_PMD_TOP 507
361     -
362     #ifndef __ASSEMBLY__
363     #include <linux/kernel.h>
364     #include <asm/acpi.h>
365     diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h
366     index 84f58de08c2b..2cb5d0f13641 100644
367     --- a/arch/x86/include/asm/percpu.h
368     +++ b/arch/x86/include/asm/percpu.h
369     @@ -184,22 +184,22 @@ do { \
370     typeof(var) pfo_ret__; \
371     switch (sizeof(var)) { \
372     case 1: \
373     - asm(op "b "__percpu_arg(1)",%0" \
374     + asm volatile(op "b "__percpu_arg(1)",%0"\
375     : "=q" (pfo_ret__) \
376     : "m" (var)); \
377     break; \
378     case 2: \
379     - asm(op "w "__percpu_arg(1)",%0" \
380     + asm volatile(op "w "__percpu_arg(1)",%0"\
381     : "=r" (pfo_ret__) \
382     : "m" (var)); \
383     break; \
384     case 4: \
385     - asm(op "l "__percpu_arg(1)",%0" \
386     + asm volatile(op "l "__percpu_arg(1)",%0"\
387     : "=r" (pfo_ret__) \
388     : "m" (var)); \
389     break; \
390     case 8: \
391     - asm(op "q "__percpu_arg(1)",%0" \
392     + asm volatile(op "q "__percpu_arg(1)",%0"\
393     : "=r" (pfo_ret__) \
394     : "m" (var)); \
395     break; \
396     diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h
397     index d5c4df98aac3..221a32ed1372 100644
398     --- a/arch/x86/include/asm/pgtable_64.h
399     +++ b/arch/x86/include/asm/pgtable_64.h
400     @@ -13,14 +13,13 @@
401     #include <asm/processor.h>
402     #include <linux/bitops.h>
403     #include <linux/threads.h>
404     -#include <asm/fixmap.h>
405    
406     extern pud_t level3_kernel_pgt[512];
407     extern pud_t level3_ident_pgt[512];
408     extern pmd_t level2_kernel_pgt[512];
409     extern pmd_t level2_fixmap_pgt[512];
410     extern pmd_t level2_ident_pgt[512];
411     -extern pte_t level1_fixmap_pgt[512 * FIXMAP_PMD_NUM];
412     +extern pte_t level1_fixmap_pgt[512];
413     extern pgd_t init_level4_pgt[];
414    
415     #define swapper_pg_dir init_level4_pgt
416     diff --git a/arch/x86/kernel/cpu/cyrix.c b/arch/x86/kernel/cpu/cyrix.c
417     index 455d8ada9b9a..d39cfb2c6b63 100644
418     --- a/arch/x86/kernel/cpu/cyrix.c
419     +++ b/arch/x86/kernel/cpu/cyrix.c
420     @@ -253,6 +253,7 @@ static void init_cyrix(struct cpuinfo_x86 *c)
421     break;
422    
423     case 4: /* MediaGX/GXm or Geode GXM/GXLV/GX1 */
424     + case 11: /* GX1 with inverted Device ID */
425     #ifdef CONFIG_PCI
426     {
427     u32 vendor, device;
428     diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
429     index b0d6697ab153..9d72cf547c88 100644
430     --- a/arch/x86/kernel/head_64.S
431     +++ b/arch/x86/kernel/head_64.S
432     @@ -23,7 +23,6 @@
433     #include "../entry/calling.h"
434     #include <asm/export.h>
435     #include <asm/nospec-branch.h>
436     -#include <asm/fixmap.h>
437    
438     #ifdef CONFIG_PARAVIRT
439     #include <asm/asm-offsets.h>
440     @@ -494,20 +493,13 @@ NEXT_PAGE(level2_kernel_pgt)
441     KERNEL_IMAGE_SIZE/PMD_SIZE)
442    
443     NEXT_PAGE(level2_fixmap_pgt)
444     - .fill (512 - 4 - FIXMAP_PMD_NUM),8,0
445     - pgtno = 0
446     - .rept (FIXMAP_PMD_NUM)
447     - .quad level1_fixmap_pgt + (pgtno << PAGE_SHIFT) - __START_KERNEL_map \
448     - + _PAGE_TABLE;
449     - pgtno = pgtno + 1
450     - .endr
451     - /* 6 MB reserved space + a 2MB hole */
452     - .fill 4,8,0
453     + .fill 506,8,0
454     + .quad level1_fixmap_pgt - __START_KERNEL_map + _PAGE_TABLE
455     + /* 8MB reserved for vsyscalls + a 2MB hole = 4 + 1 entries */
456     + .fill 5,8,0
457    
458     NEXT_PAGE(level1_fixmap_pgt)
459     - .rept (FIXMAP_PMD_NUM)
460     .fill 512,8,0
461     - .endr
462    
463     #undef PMDS
464    
465     diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
466     index 29d465627919..bf9552bebb3c 100644
467     --- a/arch/x86/kernel/paravirt.c
468     +++ b/arch/x86/kernel/paravirt.c
469     @@ -90,7 +90,7 @@ unsigned paravirt_patch_call(void *insnbuf,
470    
471     if (len < 5) {
472     #ifdef CONFIG_RETPOLINE
473     - WARN_ONCE("Failing to patch indirect CALL in %ps\n", (void *)addr);
474     + WARN_ONCE(1, "Failing to patch indirect CALL in %ps\n", (void *)addr);
475     #endif
476     return len; /* call too long for patch site */
477     }
478     @@ -110,7 +110,7 @@ unsigned paravirt_patch_jmp(void *insnbuf, const void *target,
479    
480     if (len < 5) {
481     #ifdef CONFIG_RETPOLINE
482     - WARN_ONCE("Failing to patch indirect JMP in %ps\n", (void *)addr);
483     + WARN_ONCE(1, "Failing to patch indirect JMP in %ps\n", (void *)addr);
484     #endif
485     return len; /* call too long for patch site */
486     }
487     diff --git a/arch/x86/kernel/time.c b/arch/x86/kernel/time.c
488     index f8a0518d2810..89d1190b9d94 100644
489     --- a/arch/x86/kernel/time.c
490     +++ b/arch/x86/kernel/time.c
491     @@ -24,7 +24,7 @@
492     #include <asm/time.h>
493    
494     #ifdef CONFIG_X86_64
495     -__visible volatile unsigned long jiffies __cacheline_aligned = INITIAL_JIFFIES;
496     +__visible volatile unsigned long jiffies __cacheline_aligned_in_smp = INITIAL_JIFFIES;
497     #endif
498    
499     unsigned long profile_pc(struct pt_regs *regs)
500     diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
501     index 8cbed30feb67..e30baa8ad94f 100644
502     --- a/arch/x86/mm/pgtable.c
503     +++ b/arch/x86/mm/pgtable.c
504     @@ -536,15 +536,6 @@ void __native_set_fixmap(enum fixed_addresses idx, pte_t pte)
505     {
506     unsigned long address = __fix_to_virt(idx);
507    
508     -#ifdef CONFIG_X86_64
509     - /*
510     - * Ensure that the static initial page tables are covering the
511     - * fixmap completely.
512     - */
513     - BUILD_BUG_ON(__end_of_permanent_fixed_addresses >
514     - (FIXMAP_PMD_NUM * PTRS_PER_PTE));
515     -#endif
516     -
517     if (idx >= __end_of_fixed_addresses) {
518     BUG();
519     return;
520     diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
521     index ebceaba20ad1..c92f75f7ae33 100644
522     --- a/arch/x86/xen/mmu.c
523     +++ b/arch/x86/xen/mmu.c
524     @@ -1936,7 +1936,7 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
525     * L3_k[511] -> level2_fixmap_pgt */
526     convert_pfn_mfn(level3_kernel_pgt);
527    
528     - /* L3_k[511][508-FIXMAP_PMD_NUM ... 507] -> level1_fixmap_pgt */
529     + /* L3_k[511][506] -> level1_fixmap_pgt */
530     convert_pfn_mfn(level2_fixmap_pgt);
531     }
532     /* We get [511][511] and have Xen's version of level2_kernel_pgt */
533     @@ -1970,11 +1970,7 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
534     set_page_prot(level2_ident_pgt, PAGE_KERNEL_RO);
535     set_page_prot(level2_kernel_pgt, PAGE_KERNEL_RO);
536     set_page_prot(level2_fixmap_pgt, PAGE_KERNEL_RO);
537     -
538     - for (i = 0; i < FIXMAP_PMD_NUM; i++) {
539     - set_page_prot(level1_fixmap_pgt + i * PTRS_PER_PTE,
540     - PAGE_KERNEL_RO);
541     - }
542     + set_page_prot(level1_fixmap_pgt, PAGE_KERNEL_RO);
543    
544     /* Pin down new L4 */
545     pin_pagetable_pfn(MMUEXT_PIN_L4_TABLE,
546     diff --git a/crypto/shash.c b/crypto/shash.c
547     index d5bd2f05d036..4f047c7eeca7 100644
548     --- a/crypto/shash.c
549     +++ b/crypto/shash.c
550     @@ -41,7 +41,7 @@ static int shash_setkey_unaligned(struct crypto_shash *tfm, const u8 *key,
551     int err;
552    
553     absize = keylen + (alignmask & ~(crypto_tfm_ctx_alignment() - 1));
554     - buffer = kmalloc(absize, GFP_KERNEL);
555     + buffer = kmalloc(absize, GFP_ATOMIC);
556     if (!buffer)
557     return -ENOMEM;
558    
559     diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
560     index cf05ae973381..a36d0739dbfe 100644
561     --- a/drivers/acpi/sysfs.c
562     +++ b/drivers/acpi/sysfs.c
563     @@ -724,14 +724,8 @@ end:
564     * interface:
565     * echo unmask > /sys/firmware/acpi/interrupts/gpe00
566     */
567     -
568     -/*
569     - * Currently, the GPE flooding prevention only supports to mask the GPEs
570     - * numbered from 00 to 7f.
571     - */
572     -#define ACPI_MASKABLE_GPE_MAX 0x80
573     -
574     -static u64 __initdata acpi_masked_gpes;
575     +#define ACPI_MASKABLE_GPE_MAX 0xFF
576     +static DECLARE_BITMAP(acpi_masked_gpes_map, ACPI_MASKABLE_GPE_MAX) __initdata;
577    
578     static int __init acpi_gpe_set_masked_gpes(char *val)
579     {
580     @@ -739,7 +733,7 @@ static int __init acpi_gpe_set_masked_gpes(char *val)
581    
582     if (kstrtou8(val, 0, &gpe) || gpe > ACPI_MASKABLE_GPE_MAX)
583     return -EINVAL;
584     - acpi_masked_gpes |= ((u64)1<<gpe);
585     + set_bit(gpe, acpi_masked_gpes_map);
586    
587     return 1;
588     }
589     @@ -751,15 +745,11 @@ void __init acpi_gpe_apply_masked_gpes(void)
590     acpi_status status;
591     u8 gpe;
592    
593     - for (gpe = 0;
594     - gpe < min_t(u8, ACPI_MASKABLE_GPE_MAX, acpi_current_gpe_count);
595     - gpe++) {
596     - if (acpi_masked_gpes & ((u64)1<<gpe)) {
597     - status = acpi_get_gpe_device(gpe, &handle);
598     - if (ACPI_SUCCESS(status)) {
599     - pr_info("Masking GPE 0x%x.\n", gpe);
600     - (void)acpi_mask_gpe(handle, gpe, TRUE);
601     - }
602     + for_each_set_bit(gpe, acpi_masked_gpes_map, ACPI_MASKABLE_GPE_MAX) {
603     + status = acpi_get_gpe_device(gpe, &handle);
604     + if (ACPI_SUCCESS(status)) {
605     + pr_info("Masking GPE 0x%x.\n", gpe);
606     + (void)acpi_mask_gpe(handle, gpe, TRUE);
607     }
608     }
609     }
610     diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
611     index faa91f8a17a5..5408a292078b 100644
612     --- a/drivers/ata/ahci.c
613     +++ b/drivers/ata/ahci.c
614     @@ -624,8 +624,11 @@ static void ahci_pci_save_initial_config(struct pci_dev *pdev,
615     static int ahci_pci_reset_controller(struct ata_host *host)
616     {
617     struct pci_dev *pdev = to_pci_dev(host->dev);
618     + int rc;
619    
620     - ahci_reset_controller(host);
621     + rc = ahci_reset_controller(host);
622     + if (rc)
623     + return rc;
624    
625     if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
626     struct ahci_host_priv *hpriv = host->private_data;
627     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
628     index 73d636d35961..a166359ad5d4 100644
629     --- a/drivers/ata/libata-core.c
630     +++ b/drivers/ata/libata-core.c
631     @@ -6781,7 +6781,7 @@ static int __init ata_parse_force_one(char **cur,
632     }
633    
634     force_ent->port = simple_strtoul(id, &endp, 10);
635     - if (p == endp || *endp != '\0') {
636     + if (id == endp || *endp != '\0') {
637     *reason = "invalid port/link";
638     return -EINVAL;
639     }
640     diff --git a/drivers/ata/sata_rcar.c b/drivers/ata/sata_rcar.c
641     index f72d601e300a..e83a3d3421b9 100644
642     --- a/drivers/ata/sata_rcar.c
643     +++ b/drivers/ata/sata_rcar.c
644     @@ -890,7 +890,10 @@ static int sata_rcar_probe(struct platform_device *pdev)
645     dev_err(&pdev->dev, "failed to get access to sata clock\n");
646     return PTR_ERR(priv->clk);
647     }
648     - clk_prepare_enable(priv->clk);
649     +
650     + ret = clk_prepare_enable(priv->clk);
651     + if (ret)
652     + return ret;
653    
654     host = ata_host_alloc(&pdev->dev, 1);
655     if (!host) {
656     @@ -970,8 +973,11 @@ static int sata_rcar_resume(struct device *dev)
657     struct ata_host *host = dev_get_drvdata(dev);
658     struct sata_rcar_priv *priv = host->private_data;
659     void __iomem *base = priv->base;
660     + int ret;
661    
662     - clk_prepare_enable(priv->clk);
663     + ret = clk_prepare_enable(priv->clk);
664     + if (ret)
665     + return ret;
666    
667     /* ack and mask */
668     iowrite32(0, base + SATAINTSTAT_REG);
669     @@ -988,8 +994,11 @@ static int sata_rcar_restore(struct device *dev)
670     {
671     struct ata_host *host = dev_get_drvdata(dev);
672     struct sata_rcar_priv *priv = host->private_data;
673     + int ret;
674    
675     - clk_prepare_enable(priv->clk);
676     + ret = clk_prepare_enable(priv->clk);
677     + if (ret)
678     + return ret;
679    
680     sata_rcar_setup_port(host);
681    
682     diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
683     index 4d30da269060..42a53956aefe 100644
684     --- a/drivers/block/nbd.c
685     +++ b/drivers/block/nbd.c
686     @@ -269,7 +269,7 @@ static inline int sock_send_bvec(struct nbd_device *nbd, struct bio_vec *bvec,
687     static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd)
688     {
689     struct request *req = blk_mq_rq_from_pdu(cmd);
690     - int result, flags;
691     + int result;
692     struct nbd_request request;
693     unsigned long size = blk_rq_bytes(req);
694     struct bio *bio;
695     @@ -309,7 +309,6 @@ static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd)
696     if (type != NBD_CMD_WRITE)
697     return 0;
698    
699     - flags = 0;
700     bio = req->bio;
701     while (bio) {
702     struct bio *next = bio->bi_next;
703     @@ -318,9 +317,8 @@ static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd)
704    
705     bio_for_each_segment(bvec, bio, iter) {
706     bool is_last = !next && bio_iter_last(bvec, iter);
707     + int flags = is_last ? 0 : MSG_MORE;
708    
709     - if (is_last)
710     - flags = MSG_MORE;
711     dev_dbg(nbd_to_dev(nbd), "request %p: sending %d bytes data\n",
712     cmd, bvec.bv_len);
713     result = sock_send_bvec(nbd, &bvec, flags);
714     diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
715     index cdc092a1d9ef..07fb667e258f 100644
716     --- a/drivers/clk/samsung/clk-exynos5420.c
717     +++ b/drivers/clk/samsung/clk-exynos5420.c
718     @@ -987,7 +987,7 @@ static const struct samsung_gate_clock exynos5x_gate_clks[] __initconst = {
719     GATE(0, "aclk400_isp", "mout_user_aclk400_isp",
720     GATE_BUS_TOP, 16, 0, 0),
721     GATE(0, "aclk400_mscl", "mout_user_aclk400_mscl",
722     - GATE_BUS_TOP, 17, 0, 0),
723     + GATE_BUS_TOP, 17, CLK_IS_CRITICAL, 0),
724     GATE(0, "aclk200_disp1", "mout_user_aclk200_disp1",
725     GATE_BUS_TOP, 18, CLK_IS_CRITICAL, 0),
726     GATE(CLK_SCLK_MPHY_IXTAL24, "sclk_mphy_ixtal24", "mphy_refclk_ixtal24",
727     diff --git a/drivers/gpio/gpio-mxs.c b/drivers/gpio/gpio-mxs.c
728     index ee1724806f46..ab8dcfea0680 100644
729     --- a/drivers/gpio/gpio-mxs.c
730     +++ b/drivers/gpio/gpio-mxs.c
731     @@ -32,8 +32,6 @@
732     #include <linux/platform_device.h>
733     #include <linux/slab.h>
734     #include <linux/gpio/driver.h>
735     -/* FIXME: for gpio_get_value(), replace this by direct register read */
736     -#include <linux/gpio.h>
737     #include <linux/module.h>
738    
739     #define MXS_SET 0x4
740     @@ -94,7 +92,7 @@ static int mxs_gpio_set_irq_type(struct irq_data *d, unsigned int type)
741     port->both_edges &= ~pin_mask;
742     switch (type) {
743     case IRQ_TYPE_EDGE_BOTH:
744     - val = gpio_get_value(port->gc.base + d->hwirq);
745     + val = port->gc.get(&port->gc, d->hwirq);
746     if (val)
747     edge = GPIO_INT_FALL_EDGE;
748     else
749     diff --git a/drivers/gpu/drm/bochs/bochs_fbdev.c b/drivers/gpu/drm/bochs/bochs_fbdev.c
750     index e1ec498a6b6e..35f40255644d 100644
751     --- a/drivers/gpu/drm/bochs/bochs_fbdev.c
752     +++ b/drivers/gpu/drm/bochs/bochs_fbdev.c
753     @@ -138,6 +138,7 @@ static int bochsfb_create(struct drm_fb_helper *helper,
754     info->fix.smem_start = 0;
755     info->fix.smem_len = size;
756    
757     + bochs->fb.initialized = true;
758     return 0;
759     }
760    
761     @@ -155,7 +156,6 @@ static int bochs_fbdev_destroy(struct bochs_device *bochs)
762     gfb->obj = NULL;
763     }
764    
765     - drm_fb_helper_fini(&bochs->fb.helper);
766     drm_framebuffer_unregister_private(&gfb->base);
767     drm_framebuffer_cleanup(&gfb->base);
768    
769     @@ -188,7 +188,6 @@ int bochs_fbdev_init(struct bochs_device *bochs)
770     if (ret)
771     goto fini;
772    
773     - bochs->fb.initialized = true;
774     return 0;
775    
776     fini:
777     @@ -198,9 +197,9 @@ fini:
778    
779     void bochs_fbdev_fini(struct bochs_device *bochs)
780     {
781     - if (!bochs->fb.initialized)
782     - return;
783     + if (bochs->fb.initialized)
784     + bochs_fbdev_destroy(bochs);
785    
786     - bochs_fbdev_destroy(bochs);
787     + drm_fb_helper_fini(&bochs->fb.helper);
788     bochs->fb.initialized = false;
789     }
790     diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
791     index 37ba5f51378e..83d2f43b5a2f 100644
792     --- a/drivers/gpu/drm/drm_edid.c
793     +++ b/drivers/gpu/drm/drm_edid.c
794     @@ -107,6 +107,9 @@ static const struct edid_quirk {
795     /* AEO model 0 reports 8 bpc, but is a 6 bpc panel */
796     { "AEO", 0, EDID_QUIRK_FORCE_6BPC },
797    
798     + /* BOE model on HP Pavilion 15-n233sl reports 8 bpc, but is a 6 bpc panel */
799     + { "BOE", 0x78b, EDID_QUIRK_FORCE_6BPC },
800     +
801     /* CPT panel of Asus UX303LA reports 8 bpc, but is a 6 bpc panel */
802     { "CPT", 0x17df, EDID_QUIRK_FORCE_6BPC },
803    
804     diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
805     index 7145127513c4..795660e29b2c 100644
806     --- a/drivers/gpu/drm/msm/msm_gem.c
807     +++ b/drivers/gpu/drm/msm/msm_gem.c
808     @@ -118,17 +118,19 @@ static void put_pages(struct drm_gem_object *obj)
809     struct msm_gem_object *msm_obj = to_msm_bo(obj);
810    
811     if (msm_obj->pages) {
812     - /* For non-cached buffers, ensure the new pages are clean
813     - * because display controller, GPU, etc. are not coherent:
814     - */
815     - if (msm_obj->flags & (MSM_BO_WC|MSM_BO_UNCACHED))
816     - dma_unmap_sg(obj->dev->dev, msm_obj->sgt->sgl,
817     - msm_obj->sgt->nents, DMA_BIDIRECTIONAL);
818     + if (msm_obj->sgt) {
819     + /* For non-cached buffers, ensure the new
820     + * pages are clean because display controller,
821     + * GPU, etc. are not coherent:
822     + */
823     + if (msm_obj->flags & (MSM_BO_WC|MSM_BO_UNCACHED))
824     + dma_unmap_sg(obj->dev->dev, msm_obj->sgt->sgl,
825     + msm_obj->sgt->nents,
826     + DMA_BIDIRECTIONAL);
827    
828     - if (msm_obj->sgt)
829     sg_free_table(msm_obj->sgt);
830     -
831     - kfree(msm_obj->sgt);
832     + kfree(msm_obj->sgt);
833     + }
834    
835     if (use_pages(obj))
836     drm_gem_put_pages(obj, msm_obj->pages, true, false);
837     diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c
838     index b9539f7c5e9a..99c813a4ec1f 100644
839     --- a/drivers/gpu/ipu-v3/ipu-common.c
840     +++ b/drivers/gpu/ipu-v3/ipu-common.c
841     @@ -715,15 +715,16 @@ void ipu_set_ic_src_mux(struct ipu_soc *ipu, int csi_id, bool vdi)
842     spin_lock_irqsave(&ipu->lock, flags);
843    
844     val = ipu_cm_read(ipu, IPU_CONF);
845     - if (vdi) {
846     + if (vdi)
847     val |= IPU_CONF_IC_INPUT;
848     - } else {
849     + else
850     val &= ~IPU_CONF_IC_INPUT;
851     - if (csi_id == 1)
852     - val |= IPU_CONF_CSI_SEL;
853     - else
854     - val &= ~IPU_CONF_CSI_SEL;
855     - }
856     +
857     + if (csi_id == 1)
858     + val |= IPU_CONF_CSI_SEL;
859     + else
860     + val &= ~IPU_CONF_CSI_SEL;
861     +
862     ipu_cm_write(ipu, val, IPU_CONF);
863    
864     spin_unlock_irqrestore(&ipu->lock, flags);
865     diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c
866     index f283b714aa79..7ed09865cb4b 100644
867     --- a/drivers/i2c/busses/i2c-bcm2835.c
868     +++ b/drivers/i2c/busses/i2c-bcm2835.c
869     @@ -128,7 +128,9 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data)
870     }
871    
872     if (val & BCM2835_I2C_S_DONE) {
873     - if (i2c_dev->curr_msg->flags & I2C_M_RD) {
874     + if (!i2c_dev->curr_msg) {
875     + dev_err(i2c_dev->dev, "Got unexpected interrupt (from firmware?)\n");
876     + } else if (i2c_dev->curr_msg->flags & I2C_M_RD) {
877     bcm2835_drain_rxfifo(i2c_dev);
878     val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S);
879     }
880     diff --git a/drivers/iio/adc/axp288_adc.c b/drivers/iio/adc/axp288_adc.c
881     index 64799ad7ebad..7fd24949c0c1 100644
882     --- a/drivers/iio/adc/axp288_adc.c
883     +++ b/drivers/iio/adc/axp288_adc.c
884     @@ -28,6 +28,8 @@
885     #include <linux/iio/driver.h>
886    
887     #define AXP288_ADC_EN_MASK 0xF1
888     +#define AXP288_ADC_TS_PIN_GPADC 0xF2
889     +#define AXP288_ADC_TS_PIN_ON 0xF3
890    
891     enum axp288_adc_id {
892     AXP288_ADC_TS,
893     @@ -121,6 +123,16 @@ static int axp288_adc_read_channel(int *val, unsigned long address,
894     return IIO_VAL_INT;
895     }
896    
897     +static int axp288_adc_set_ts(struct regmap *regmap, unsigned int mode,
898     + unsigned long address)
899     +{
900     + /* channels other than GPADC do not need to switch TS pin */
901     + if (address != AXP288_GP_ADC_H)
902     + return 0;
903     +
904     + return regmap_write(regmap, AXP288_ADC_TS_PIN_CTRL, mode);
905     +}
906     +
907     static int axp288_adc_read_raw(struct iio_dev *indio_dev,
908     struct iio_chan_spec const *chan,
909     int *val, int *val2, long mask)
910     @@ -131,7 +143,16 @@ static int axp288_adc_read_raw(struct iio_dev *indio_dev,
911     mutex_lock(&indio_dev->mlock);
912     switch (mask) {
913     case IIO_CHAN_INFO_RAW:
914     + if (axp288_adc_set_ts(info->regmap, AXP288_ADC_TS_PIN_GPADC,
915     + chan->address)) {
916     + dev_err(&indio_dev->dev, "GPADC mode\n");
917     + ret = -EINVAL;
918     + break;
919     + }
920     ret = axp288_adc_read_channel(val, chan->address, info->regmap);
921     + if (axp288_adc_set_ts(info->regmap, AXP288_ADC_TS_PIN_ON,
922     + chan->address))
923     + dev_err(&indio_dev->dev, "TS pin restore\n");
924     break;
925     default:
926     ret = -EINVAL;
927     @@ -141,6 +162,15 @@ static int axp288_adc_read_raw(struct iio_dev *indio_dev,
928     return ret;
929     }
930    
931     +static int axp288_adc_set_state(struct regmap *regmap)
932     +{
933     + /* ADC should be always enabled for internal FG to function */
934     + if (regmap_write(regmap, AXP288_ADC_TS_PIN_CTRL, AXP288_ADC_TS_PIN_ON))
935     + return -EIO;
936     +
937     + return regmap_write(regmap, AXP20X_ADC_EN1, AXP288_ADC_EN_MASK);
938     +}
939     +
940     static const struct iio_info axp288_adc_iio_info = {
941     .read_raw = &axp288_adc_read_raw,
942     .driver_module = THIS_MODULE,
943     @@ -169,7 +199,7 @@ static int axp288_adc_probe(struct platform_device *pdev)
944     * Set ADC to enabled state at all time, including system suspend.
945     * otherwise internal fuel gauge functionality may be affected.
946     */
947     - ret = regmap_write(info->regmap, AXP20X_ADC_EN1, AXP288_ADC_EN_MASK);
948     + ret = axp288_adc_set_state(axp20x->regmap);
949     if (ret) {
950     dev_err(&pdev->dev, "unable to enable ADC device\n");
951     return ret;
952     diff --git a/drivers/iio/pressure/zpa2326.c b/drivers/iio/pressure/zpa2326.c
953     index 2a4a62ebfd8d..cc002b958f7e 100644
954     --- a/drivers/iio/pressure/zpa2326.c
955     +++ b/drivers/iio/pressure/zpa2326.c
956     @@ -869,7 +869,6 @@ complete:
957     static int zpa2326_wait_oneshot_completion(const struct iio_dev *indio_dev,
958     struct zpa2326_private *private)
959     {
960     - int ret;
961     unsigned int val;
962     long timeout;
963    
964     @@ -891,14 +890,11 @@ static int zpa2326_wait_oneshot_completion(const struct iio_dev *indio_dev,
965     /* Timed out. */
966     zpa2326_warn(indio_dev, "no one shot interrupt occurred (%ld)",
967     timeout);
968     - ret = -ETIME;
969     - } else if (timeout < 0) {
970     - zpa2326_warn(indio_dev,
971     - "wait for one shot interrupt cancelled");
972     - ret = -ERESTARTSYS;
973     + return -ETIME;
974     }
975    
976     - return ret;
977     + zpa2326_warn(indio_dev, "wait for one shot interrupt cancelled");
978     + return -ERESTARTSYS;
979     }
980    
981     static int zpa2326_init_managed_irq(struct device *parent,
982     diff --git a/drivers/infiniband/core/ucm.c b/drivers/infiniband/core/ucm.c
983     index 7713ef089c3c..85be45e75710 100644
984     --- a/drivers/infiniband/core/ucm.c
985     +++ b/drivers/infiniband/core/ucm.c
986     @@ -46,6 +46,8 @@
987     #include <linux/mutex.h>
988     #include <linux/slab.h>
989    
990     +#include <linux/nospec.h>
991     +
992     #include <asm/uaccess.h>
993    
994     #include <rdma/ib.h>
995     @@ -1115,6 +1117,7 @@ static ssize_t ib_ucm_write(struct file *filp, const char __user *buf,
996    
997     if (hdr.cmd >= ARRAY_SIZE(ucm_cmd_table))
998     return -EINVAL;
999     + hdr.cmd = array_index_nospec(hdr.cmd, ARRAY_SIZE(ucm_cmd_table));
1000    
1001     if (hdr.in + sizeof(hdr) > len)
1002     return -EINVAL;
1003     diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
1004     index fa9ef8ed5712..a4f4cd493265 100644
1005     --- a/drivers/infiniband/core/ucma.c
1006     +++ b/drivers/infiniband/core/ucma.c
1007     @@ -44,6 +44,8 @@
1008     #include <linux/module.h>
1009     #include <linux/nsproxy.h>
1010    
1011     +#include <linux/nospec.h>
1012     +
1013     #include <rdma/rdma_user_cm.h>
1014     #include <rdma/ib_marshall.h>
1015     #include <rdma/rdma_cm.h>
1016     @@ -1637,6 +1639,7 @@ static ssize_t ucma_write(struct file *filp, const char __user *buf,
1017    
1018     if (hdr.cmd >= ARRAY_SIZE(ucma_cmd_table))
1019     return -EINVAL;
1020     + hdr.cmd = array_index_nospec(hdr.cmd, ARRAY_SIZE(ucma_cmd_table));
1021    
1022     if (hdr.in + sizeof(hdr) > len)
1023     return -EINVAL;
1024     diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
1025     index 0e64b52af5b2..d28c4cf7c1ee 100644
1026     --- a/drivers/infiniband/core/verbs.c
1027     +++ b/drivers/infiniband/core/verbs.c
1028     @@ -1510,6 +1510,44 @@ EXPORT_SYMBOL(ib_dealloc_fmr);
1029    
1030     /* Multicast groups */
1031    
1032     +static bool is_valid_mcast_lid(struct ib_qp *qp, u16 lid)
1033     +{
1034     + struct ib_qp_init_attr init_attr = {};
1035     + struct ib_qp_attr attr = {};
1036     + int num_eth_ports = 0;
1037     + int port;
1038     +
1039     + /* If QP state >= init, it is assigned to a port and we can check this
1040     + * port only.
1041     + */
1042     + if (!ib_query_qp(qp, &attr, IB_QP_STATE | IB_QP_PORT, &init_attr)) {
1043     + if (attr.qp_state >= IB_QPS_INIT) {
1044     + if (qp->device->get_link_layer(qp->device, attr.port_num) !=
1045     + IB_LINK_LAYER_INFINIBAND)
1046     + return true;
1047     + goto lid_check;
1048     + }
1049     + }
1050     +
1051     + /* Can't get a quick answer, iterate over all ports */
1052     + for (port = 0; port < qp->device->phys_port_cnt; port++)
1053     + if (qp->device->get_link_layer(qp->device, port) !=
1054     + IB_LINK_LAYER_INFINIBAND)
1055     + num_eth_ports++;
1056     +
1057     + /* If we have at lease one Ethernet port, RoCE annex declares that
1058     + * multicast LID should be ignored. We can't tell at this step if the
1059     + * QP belongs to an IB or Ethernet port.
1060     + */
1061     + if (num_eth_ports)
1062     + return true;
1063     +
1064     + /* If all the ports are IB, we can check according to IB spec. */
1065     +lid_check:
1066     + return !(lid < be16_to_cpu(IB_MULTICAST_LID_BASE) ||
1067     + lid == be16_to_cpu(IB_LID_PERMISSIVE));
1068     +}
1069     +
1070     int ib_attach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid)
1071     {
1072     int ret;
1073     @@ -1517,8 +1555,7 @@ int ib_attach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid)
1074     if (!qp->device->attach_mcast)
1075     return -ENOSYS;
1076     if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD ||
1077     - lid < be16_to_cpu(IB_MULTICAST_LID_BASE) ||
1078     - lid == be16_to_cpu(IB_LID_PERMISSIVE))
1079     + !is_valid_mcast_lid(qp, lid))
1080     return -EINVAL;
1081    
1082     ret = qp->device->attach_mcast(qp, gid, lid);
1083     @@ -1535,8 +1572,7 @@ int ib_detach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid)
1084     if (!qp->device->detach_mcast)
1085     return -ENOSYS;
1086     if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD ||
1087     - lid < be16_to_cpu(IB_MULTICAST_LID_BASE) ||
1088     - lid == be16_to_cpu(IB_LID_PERMISSIVE))
1089     + !is_valid_mcast_lid(qp, lid))
1090     return -EINVAL;
1091    
1092     ret = qp->device->detach_mcast(qp, gid, lid);
1093     diff --git a/drivers/infiniband/hw/mlx4/mr.c b/drivers/infiniband/hw/mlx4/mr.c
1094     index 0d4878efd643..ddd3182138ac 100644
1095     --- a/drivers/infiniband/hw/mlx4/mr.c
1096     +++ b/drivers/infiniband/hw/mlx4/mr.c
1097     @@ -247,8 +247,11 @@ int mlx4_ib_rereg_user_mr(struct ib_mr *mr, int flags,
1098     }
1099    
1100     if (flags & IB_MR_REREG_ACCESS) {
1101     - if (ib_access_writable(mr_access_flags) && !mmr->umem->writable)
1102     - return -EPERM;
1103     + if (ib_access_writable(mr_access_flags) &&
1104     + !mmr->umem->writable) {
1105     + err = -EPERM;
1106     + goto release_mpt_entry;
1107     + }
1108    
1109     err = mlx4_mr_hw_change_access(dev->dev, *pmpt_entry,
1110     convert_access(mr_access_flags));
1111     diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
1112     index abb47e780070..f8f7a2191b98 100644
1113     --- a/drivers/infiniband/hw/mlx5/qp.c
1114     +++ b/drivers/infiniband/hw/mlx5/qp.c
1115     @@ -1523,6 +1523,7 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
1116     u32 uidx = MLX5_IB_DEFAULT_UIDX;
1117     struct mlx5_ib_create_qp ucmd;
1118     struct mlx5_ib_qp_base *base;
1119     + int mlx5_st;
1120     void *qpc;
1121     u32 *in;
1122     int err;
1123     @@ -1538,6 +1539,10 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
1124     spin_lock_init(&qp->sq.lock);
1125     spin_lock_init(&qp->rq.lock);
1126    
1127     + mlx5_st = to_mlx5_st(init_attr->qp_type);
1128     + if (mlx5_st < 0)
1129     + return -EINVAL;
1130     +
1131     if (init_attr->rwq_ind_tbl) {
1132     if (!udata)
1133     return -ENOSYS;
1134     @@ -1665,7 +1670,7 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
1135    
1136     qpc = MLX5_ADDR_OF(create_qp_in, in, qpc);
1137    
1138     - MLX5_SET(qpc, qpc, st, to_mlx5_st(init_attr->qp_type));
1139     + MLX5_SET(qpc, qpc, st, mlx5_st);
1140     MLX5_SET(qpc, qpc, pm_state, MLX5_QP_PM_MIGRATED);
1141    
1142     if (init_attr->qp_type != MLX5_IB_QPT_REG_UMR)
1143     diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c
1144     index 1c4e5b2e6835..527ca662da69 100644
1145     --- a/drivers/infiniband/sw/rxe/rxe_pool.c
1146     +++ b/drivers/infiniband/sw/rxe/rxe_pool.c
1147     @@ -402,23 +402,25 @@ void *rxe_alloc(struct rxe_pool *pool)
1148    
1149     kref_get(&pool->rxe->ref_cnt);
1150    
1151     - if (atomic_inc_return(&pool->num_elem) > pool->max_elem) {
1152     - atomic_dec(&pool->num_elem);
1153     - rxe_dev_put(pool->rxe);
1154     - rxe_pool_put(pool);
1155     - return NULL;
1156     - }
1157     + if (atomic_inc_return(&pool->num_elem) > pool->max_elem)
1158     + goto out_put_pool;
1159    
1160     elem = kmem_cache_zalloc(pool_cache(pool),
1161     (pool->flags & RXE_POOL_ATOMIC) ?
1162     GFP_ATOMIC : GFP_KERNEL);
1163     if (!elem)
1164     - return NULL;
1165     + goto out_put_pool;
1166    
1167     elem->pool = pool;
1168     kref_init(&elem->ref_cnt);
1169    
1170     return elem;
1171     +
1172     +out_put_pool:
1173     + atomic_dec(&pool->num_elem);
1174     + rxe_dev_put(pool->rxe);
1175     + rxe_pool_put(pool);
1176     + return NULL;
1177     }
1178    
1179     void rxe_elem_release(struct kref *kref)
1180     diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
1181     index ced416f5dffb..ef13082d6ca1 100644
1182     --- a/drivers/infiniband/sw/rxe/rxe_verbs.c
1183     +++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
1184     @@ -729,13 +729,8 @@ static int init_send_wqe(struct rxe_qp *qp, struct ib_send_wr *ibwr,
1185    
1186     sge = ibwr->sg_list;
1187     for (i = 0; i < num_sge; i++, sge++) {
1188     - if (qp->is_user && copy_from_user(p, (__user void *)
1189     - (uintptr_t)sge->addr, sge->length))
1190     - return -EFAULT;
1191     -
1192     - else if (!qp->is_user)
1193     - memcpy(p, (void *)(uintptr_t)sge->addr,
1194     - sge->length);
1195     + memcpy(p, (void *)(uintptr_t)sge->addr,
1196     + sge->length);
1197    
1198     p += sge->length;
1199     }
1200     diff --git a/drivers/infiniband/ulp/ipoib/ipoib_fs.c b/drivers/infiniband/ulp/ipoib/ipoib_fs.c
1201     index 09396bd7b02d..63be3bcdc0e3 100644
1202     --- a/drivers/infiniband/ulp/ipoib/ipoib_fs.c
1203     +++ b/drivers/infiniband/ulp/ipoib/ipoib_fs.c
1204     @@ -281,8 +281,6 @@ void ipoib_delete_debug_files(struct net_device *dev)
1205     {
1206     struct ipoib_dev_priv *priv = netdev_priv(dev);
1207    
1208     - WARN_ONCE(!priv->mcg_dentry, "null mcg debug file\n");
1209     - WARN_ONCE(!priv->path_dentry, "null path debug file\n");
1210     debugfs_remove(priv->mcg_dentry);
1211     debugfs_remove(priv->path_dentry);
1212     priv->mcg_dentry = priv->path_dentry = NULL;
1213     diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
1214     index 34122c96522b..ad3089c23e18 100644
1215     --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
1216     +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
1217     @@ -974,19 +974,6 @@ static inline int update_parent_pkey(struct ipoib_dev_priv *priv)
1218     */
1219     priv->dev->broadcast[8] = priv->pkey >> 8;
1220     priv->dev->broadcast[9] = priv->pkey & 0xff;
1221     -
1222     - /*
1223     - * Update the broadcast address in the priv->broadcast object,
1224     - * in case it already exists, otherwise no one will do that.
1225     - */
1226     - if (priv->broadcast) {
1227     - spin_lock_irq(&priv->lock);
1228     - memcpy(priv->broadcast->mcmember.mgid.raw,
1229     - priv->dev->broadcast + 4,
1230     - sizeof(union ib_gid));
1231     - spin_unlock_irq(&priv->lock);
1232     - }
1233     -
1234     return 0;
1235     }
1236    
1237     @@ -1190,13 +1177,10 @@ static void __ipoib_ib_dev_flush(struct ipoib_dev_priv *priv,
1238     ipoib_ib_dev_down(dev);
1239    
1240     if (level == IPOIB_FLUSH_HEAVY) {
1241     - rtnl_lock();
1242     if (test_bit(IPOIB_FLAG_INITIALIZED, &priv->flags))
1243     ipoib_ib_dev_stop(dev);
1244    
1245     - result = ipoib_ib_dev_open(dev);
1246     - rtnl_unlock();
1247     - if (result)
1248     + if (ipoib_ib_dev_open(dev))
1249     return;
1250    
1251     if (netif_queue_stopped(dev))
1252     @@ -1236,7 +1220,9 @@ void ipoib_ib_dev_flush_heavy(struct work_struct *work)
1253     struct ipoib_dev_priv *priv =
1254     container_of(work, struct ipoib_dev_priv, flush_heavy);
1255    
1256     + rtnl_lock();
1257     __ipoib_ib_dev_flush(priv, IPOIB_FLUSH_HEAVY, 0);
1258     + rtnl_unlock();
1259     }
1260    
1261     void ipoib_ib_dev_cleanup(struct net_device *dev)
1262     diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
1263     index a716482774db..b3119589a444 100644
1264     --- a/drivers/input/mouse/elan_i2c_core.c
1265     +++ b/drivers/input/mouse/elan_i2c_core.c
1266     @@ -1251,6 +1251,7 @@ static const struct acpi_device_id elan_acpi_id[] = {
1267     { "ELAN0611", 0 },
1268     { "ELAN0612", 0 },
1269     { "ELAN0618", 0 },
1270     + { "ELAN061C", 0 },
1271     { "ELAN061D", 0 },
1272     { "ELAN0622", 0 },
1273     { "ELAN1000", 0 },
1274     diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
1275     index 21dde5249085..c42523b7d5ed 100644
1276     --- a/drivers/mtd/spi-nor/spi-nor.c
1277     +++ b/drivers/mtd/spi-nor/spi-nor.c
1278     @@ -858,6 +858,12 @@ static const struct flash_info spi_nor_ids[] = {
1279    
1280     /* ISSI */
1281     { "is25cd512", INFO(0x7f9d20, 0, 32 * 1024, 2, SECT_4K) },
1282     + { "is25wp032", INFO(0x9d7016, 0, 64 * 1024, 64,
1283     + SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1284     + { "is25wp064", INFO(0x9d7017, 0, 64 * 1024, 128,
1285     + SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1286     + { "is25wp128", INFO(0x9d7018, 0, 64 * 1024, 256,
1287     + SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1288    
1289     /* Macronix */
1290     { "mx25l512e", INFO(0xc22010, 0, 64 * 1024, 1, SECT_4K) },
1291     diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
1292     index b1ea29d8ad1a..389d1db69a32 100644
1293     --- a/drivers/net/bonding/bond_main.c
1294     +++ b/drivers/net/bonding/bond_main.c
1295     @@ -2132,9 +2132,10 @@ static void bond_miimon_commit(struct bonding *bond)
1296     if (bond_update_speed_duplex(slave) &&
1297     bond_needs_speed_duplex(bond)) {
1298     slave->link = BOND_LINK_DOWN;
1299     - netdev_warn(bond->dev,
1300     - "failed to get link speed/duplex for %s\n",
1301     - slave->dev->name);
1302     + if (net_ratelimit())
1303     + netdev_warn(bond->dev,
1304     + "failed to get link speed/duplex for %s\n",
1305     + slave->dev->name);
1306     continue;
1307     }
1308     bond_set_slave_link_state(slave, BOND_LINK_UP,
1309     diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
1310     index b8df0f5e8c25..3f320f470345 100644
1311     --- a/drivers/net/bonding/bond_netlink.c
1312     +++ b/drivers/net/bonding/bond_netlink.c
1313     @@ -628,8 +628,7 @@ static int bond_fill_info(struct sk_buff *skb,
1314     goto nla_put_failure;
1315    
1316     if (nla_put(skb, IFLA_BOND_AD_ACTOR_SYSTEM,
1317     - sizeof(bond->params.ad_actor_system),
1318     - &bond->params.ad_actor_system))
1319     + ETH_ALEN, &bond->params.ad_actor_system))
1320     goto nla_put_failure;
1321     }
1322     if (!bond_3ad_get_active_agg_info(bond, &info)) {
1323     diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
1324     index 1d92e034febc..0c298878bf46 100644
1325     --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
1326     +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
1327     @@ -1482,8 +1482,6 @@ static int ena_up_complete(struct ena_adapter *adapter)
1328     if (rc)
1329     return rc;
1330    
1331     - ena_init_napi(adapter);
1332     -
1333     ena_change_mtu(adapter->netdev, adapter->netdev->mtu);
1334    
1335     ena_refill_all_rx_bufs(adapter);
1336     @@ -1643,6 +1641,13 @@ static int ena_up(struct ena_adapter *adapter)
1337    
1338     ena_setup_io_intr(adapter);
1339    
1340     + /* napi poll functions should be initialized before running
1341     + * request_irq(), to handle a rare condition where there is a pending
1342     + * interrupt, causing the ISR to fire immediately while the poll
1343     + * function wasn't set yet, causing a null dereference
1344     + */
1345     + ena_init_napi(adapter);
1346     +
1347     rc = ena_request_io_irq(adapter);
1348     if (rc)
1349     goto err_req_irq;
1350     diff --git a/drivers/net/ethernet/amd/declance.c b/drivers/net/ethernet/amd/declance.c
1351     index b799c7ac899b..9e80a76c3dfe 100644
1352     --- a/drivers/net/ethernet/amd/declance.c
1353     +++ b/drivers/net/ethernet/amd/declance.c
1354     @@ -1030,6 +1030,7 @@ static int dec_lance_probe(struct device *bdev, const int type)
1355     int i, ret;
1356     unsigned long esar_base;
1357     unsigned char *esar;
1358     + const char *desc;
1359    
1360     if (dec_lance_debug && version_printed++ == 0)
1361     printk(version);
1362     @@ -1215,19 +1216,20 @@ static int dec_lance_probe(struct device *bdev, const int type)
1363     */
1364     switch (type) {
1365     case ASIC_LANCE:
1366     - printk("%s: IOASIC onboard LANCE", name);
1367     + desc = "IOASIC onboard LANCE";
1368     break;
1369     case PMAD_LANCE:
1370     - printk("%s: PMAD-AA", name);
1371     + desc = "PMAD-AA";
1372     break;
1373     case PMAX_LANCE:
1374     - printk("%s: PMAX onboard LANCE", name);
1375     + desc = "PMAX onboard LANCE";
1376     break;
1377     }
1378     for (i = 0; i < 6; i++)
1379     dev->dev_addr[i] = esar[i * 4];
1380    
1381     - printk(", addr = %pM, irq = %d\n", dev->dev_addr, dev->irq);
1382     + printk("%s: %s, addr = %pM, irq = %d\n",
1383     + name, desc, dev->dev_addr, dev->irq);
1384    
1385     dev->netdev_ops = &lance_netdev_ops;
1386     dev->watchdog_timeo = 5*HZ;
1387     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1388     index 208e9dacfd34..a036f7039d76 100644
1389     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1390     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1391     @@ -5580,7 +5580,9 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
1392     }
1393    
1394     if (link_re_init) {
1395     + mutex_lock(&bp->link_lock);
1396     rc = bnxt_update_phy_setting(bp);
1397     + mutex_unlock(&bp->link_lock);
1398     if (rc)
1399     netdev_warn(bp->dev, "failed to update phy settings\n");
1400     }
1401     @@ -6230,30 +6232,28 @@ static void bnxt_sp_task(struct work_struct *work)
1402     if (test_and_clear_bit(BNXT_PERIODIC_STATS_SP_EVENT, &bp->sp_event))
1403     bnxt_hwrm_port_qstats(bp);
1404    
1405     - /* These functions below will clear BNXT_STATE_IN_SP_TASK. They
1406     - * must be the last functions to be called before exiting.
1407     - */
1408     if (test_and_clear_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event)) {
1409     - int rc = 0;
1410     + int rc;
1411    
1412     + mutex_lock(&bp->link_lock);
1413     if (test_and_clear_bit(BNXT_LINK_SPEED_CHNG_SP_EVENT,
1414     &bp->sp_event))
1415     bnxt_hwrm_phy_qcaps(bp);
1416    
1417     - bnxt_rtnl_lock_sp(bp);
1418     - if (test_bit(BNXT_STATE_OPEN, &bp->state))
1419     - rc = bnxt_update_link(bp, true);
1420     - bnxt_rtnl_unlock_sp(bp);
1421     + rc = bnxt_update_link(bp, true);
1422     + mutex_unlock(&bp->link_lock);
1423     if (rc)
1424     netdev_err(bp->dev, "SP task can't update link (rc: %x)\n",
1425     rc);
1426     }
1427     if (test_and_clear_bit(BNXT_HWRM_PORT_MODULE_SP_EVENT, &bp->sp_event)) {
1428     - bnxt_rtnl_lock_sp(bp);
1429     - if (test_bit(BNXT_STATE_OPEN, &bp->state))
1430     - bnxt_get_port_module_status(bp);
1431     - bnxt_rtnl_unlock_sp(bp);
1432     + mutex_lock(&bp->link_lock);
1433     + bnxt_get_port_module_status(bp);
1434     + mutex_unlock(&bp->link_lock);
1435     }
1436     + /* These functions below will clear BNXT_STATE_IN_SP_TASK. They
1437     + * must be the last functions to be called before exiting.
1438     + */
1439     if (test_and_clear_bit(BNXT_RESET_TASK_SP_EVENT, &bp->sp_event))
1440     bnxt_reset(bp, false);
1441    
1442     @@ -6788,6 +6788,7 @@ static int bnxt_probe_phy(struct bnxt *bp)
1443     rc);
1444     return rc;
1445     }
1446     + mutex_init(&bp->link_lock);
1447    
1448     rc = bnxt_update_link(bp, false);
1449     if (rc) {
1450     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
1451     index 666bc0608ed7..017c10c53715 100644
1452     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
1453     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
1454     @@ -1109,6 +1109,10 @@ struct bnxt {
1455     unsigned long *ntp_fltr_bmap;
1456     int ntp_fltr_count;
1457    
1458     + /* To protect link related settings during link changes and
1459     + * ethtool settings changes.
1460     + */
1461     + struct mutex link_lock;
1462     struct bnxt_link_info link_info;
1463     struct ethtool_eee eee;
1464     u32 lpi_tmr_lo;
1465     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
1466     index cde4b96f3153..3a352f76e633 100644
1467     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
1468     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
1469     @@ -793,6 +793,7 @@ static int bnxt_get_link_ksettings(struct net_device *dev,
1470     u32 ethtool_speed;
1471    
1472     ethtool_link_ksettings_zero_link_mode(lk_ksettings, supported);
1473     + mutex_lock(&bp->link_lock);
1474     bnxt_fw_to_ethtool_support_spds(link_info, lk_ksettings);
1475    
1476     ethtool_link_ksettings_zero_link_mode(lk_ksettings, advertising);
1477     @@ -840,6 +841,7 @@ static int bnxt_get_link_ksettings(struct net_device *dev,
1478     base->port = PORT_FIBRE;
1479     }
1480     base->phy_address = link_info->phy_addr;
1481     + mutex_unlock(&bp->link_lock);
1482    
1483     return 0;
1484     }
1485     @@ -926,6 +928,7 @@ static int bnxt_set_link_ksettings(struct net_device *dev,
1486     if (!BNXT_SINGLE_PF(bp))
1487     return -EOPNOTSUPP;
1488    
1489     + mutex_lock(&bp->link_lock);
1490     if (base->autoneg == AUTONEG_ENABLE) {
1491     BNXT_ETHTOOL_TO_FW_SPDS(fw_advertising, lk_ksettings,
1492     advertising);
1493     @@ -970,6 +973,7 @@ static int bnxt_set_link_ksettings(struct net_device *dev,
1494     rc = bnxt_hwrm_set_link_setting(bp, set_pause, false);
1495    
1496     set_setting_exit:
1497     + mutex_unlock(&bp->link_lock);
1498     return rc;
1499     }
1500    
1501     diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
1502     index 8f55c23e9821..a0d640243df2 100644
1503     --- a/drivers/net/ethernet/cadence/macb.c
1504     +++ b/drivers/net/ethernet/cadence/macb.c
1505     @@ -1737,6 +1737,7 @@ static void macb_configure_dma(struct macb *bp)
1506     else
1507     dmacfg &= ~GEM_BIT(TXCOEN);
1508    
1509     + dmacfg &= ~GEM_BIT(ADDR64);
1510     #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
1511     dmacfg |= GEM_BIT(ADDR64);
1512     #endif
1513     diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
1514     index dc0efbd91c32..ddd1ec8f7bd0 100644
1515     --- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
1516     +++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
1517     @@ -2150,6 +2150,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1518     return -EPERM;
1519     if (copy_from_user(&t, useraddr, sizeof(t)))
1520     return -EFAULT;
1521     + if (t.cmd != CHELSIO_SET_QSET_PARAMS)
1522     + return -EINVAL;
1523     if (t.qset_idx >= SGE_QSETS)
1524     return -EINVAL;
1525     if (!in_range(t.intr_lat, 0, M_NEWTIMER) ||
1526     @@ -2249,6 +2251,9 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1527     if (copy_from_user(&t, useraddr, sizeof(t)))
1528     return -EFAULT;
1529    
1530     + if (t.cmd != CHELSIO_GET_QSET_PARAMS)
1531     + return -EINVAL;
1532     +
1533     /* Display qsets for all ports when offload enabled */
1534     if (test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) {
1535     q1 = 0;
1536     @@ -2294,6 +2299,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1537     return -EBUSY;
1538     if (copy_from_user(&edata, useraddr, sizeof(edata)))
1539     return -EFAULT;
1540     + if (edata.cmd != CHELSIO_SET_QSET_NUM)
1541     + return -EINVAL;
1542     if (edata.val < 1 ||
1543     (edata.val > 1 && !(adapter->flags & USING_MSIX)))
1544     return -EINVAL;
1545     @@ -2334,6 +2341,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1546     return -EPERM;
1547     if (copy_from_user(&t, useraddr, sizeof(t)))
1548     return -EFAULT;
1549     + if (t.cmd != CHELSIO_LOAD_FW)
1550     + return -EINVAL;
1551     /* Check t.len sanity ? */
1552     fw_data = memdup_user(useraddr + sizeof(t), t.len);
1553     if (IS_ERR(fw_data))
1554     @@ -2357,6 +2366,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1555     return -EBUSY;
1556     if (copy_from_user(&m, useraddr, sizeof(m)))
1557     return -EFAULT;
1558     + if (m.cmd != CHELSIO_SETMTUTAB)
1559     + return -EINVAL;
1560     if (m.nmtus != NMTUS)
1561     return -EINVAL;
1562     if (m.mtus[0] < 81) /* accommodate SACK */
1563     @@ -2398,6 +2409,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1564     return -EBUSY;
1565     if (copy_from_user(&m, useraddr, sizeof(m)))
1566     return -EFAULT;
1567     + if (m.cmd != CHELSIO_SET_PM)
1568     + return -EINVAL;
1569     if (!is_power_of_2(m.rx_pg_sz) ||
1570     !is_power_of_2(m.tx_pg_sz))
1571     return -EINVAL; /* not power of 2 */
1572     @@ -2431,6 +2444,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1573     return -EIO; /* need the memory controllers */
1574     if (copy_from_user(&t, useraddr, sizeof(t)))
1575     return -EFAULT;
1576     + if (t.cmd != CHELSIO_GET_MEM)
1577     + return -EINVAL;
1578     if ((t.addr & 7) || (t.len & 7))
1579     return -EINVAL;
1580     if (t.mem_id == MEM_CM)
1581     @@ -2483,6 +2498,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1582     return -EAGAIN;
1583     if (copy_from_user(&t, useraddr, sizeof(t)))
1584     return -EFAULT;
1585     + if (t.cmd != CHELSIO_SET_TRACE_FILTER)
1586     + return -EINVAL;
1587    
1588     tp = (const struct trace_params *)&t.sip;
1589     if (t.config_tx)
1590     diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
1591     index f314be07ec58..07282eb76867 100644
1592     --- a/drivers/net/ethernet/cisco/enic/enic_main.c
1593     +++ b/drivers/net/ethernet/cisco/enic/enic_main.c
1594     @@ -1708,7 +1708,7 @@ static int enic_open(struct net_device *netdev)
1595     {
1596     struct enic *enic = netdev_priv(netdev);
1597     unsigned int i;
1598     - int err;
1599     + int err, ret;
1600    
1601     err = enic_request_intr(enic);
1602     if (err) {
1603     @@ -1766,10 +1766,9 @@ static int enic_open(struct net_device *netdev)
1604    
1605     err_out_free_rq:
1606     for (i = 0; i < enic->rq_count; i++) {
1607     - err = vnic_rq_disable(&enic->rq[i]);
1608     - if (err)
1609     - return err;
1610     - vnic_rq_clean(&enic->rq[i], enic_free_rq_buf);
1611     + ret = vnic_rq_disable(&enic->rq[i]);
1612     + if (!ret)
1613     + vnic_rq_clean(&enic->rq[i], enic_free_rq_buf);
1614     }
1615     enic_dev_notify_unset(enic);
1616     err_out_free_intr:
1617     diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
1618     index fe00f71bc6b4..051ecc76a7ef 100644
1619     --- a/drivers/net/ethernet/freescale/fec_main.c
1620     +++ b/drivers/net/ethernet/freescale/fec_main.c
1621     @@ -1152,7 +1152,7 @@ static void fec_enet_timeout_work(struct work_struct *work)
1622     napi_disable(&fep->napi);
1623     netif_tx_lock_bh(ndev);
1624     fec_restart(ndev);
1625     - netif_wake_queue(ndev);
1626     + netif_tx_wake_all_queues(ndev);
1627     netif_tx_unlock_bh(ndev);
1628     napi_enable(&fep->napi);
1629     }
1630     @@ -1267,7 +1267,7 @@ skb_done:
1631    
1632     /* Since we have freed up a buffer, the ring is no longer full
1633     */
1634     - if (netif_queue_stopped(ndev)) {
1635     + if (netif_tx_queue_stopped(nq)) {
1636     entries_free = fec_enet_get_free_txdesc_num(txq);
1637     if (entries_free >= txq->tx_wake_threshold)
1638     netif_tx_wake_queue(nq);
1639     @@ -1744,7 +1744,7 @@ static void fec_enet_adjust_link(struct net_device *ndev)
1640     napi_disable(&fep->napi);
1641     netif_tx_lock_bh(ndev);
1642     fec_restart(ndev);
1643     - netif_wake_queue(ndev);
1644     + netif_tx_wake_all_queues(ndev);
1645     netif_tx_unlock_bh(ndev);
1646     napi_enable(&fep->napi);
1647     }
1648     @@ -2247,7 +2247,7 @@ static int fec_enet_set_pauseparam(struct net_device *ndev,
1649     napi_disable(&fep->napi);
1650     netif_tx_lock_bh(ndev);
1651     fec_restart(ndev);
1652     - netif_wake_queue(ndev);
1653     + netif_tx_wake_all_queues(ndev);
1654     netif_tx_unlock_bh(ndev);
1655     napi_enable(&fep->napi);
1656     }
1657     diff --git a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
1658     index 4b86260584a0..8b66551511f5 100644
1659     --- a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
1660     +++ b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
1661     @@ -613,9 +613,11 @@ static int fs_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
1662     return NETDEV_TX_OK;
1663     }
1664    
1665     -static void fs_timeout(struct net_device *dev)
1666     +static void fs_timeout_work(struct work_struct *work)
1667     {
1668     - struct fs_enet_private *fep = netdev_priv(dev);
1669     + struct fs_enet_private *fep = container_of(work, struct fs_enet_private,
1670     + timeout_work);
1671     + struct net_device *dev = fep->ndev;
1672     unsigned long flags;
1673     int wake = 0;
1674    
1675     @@ -627,7 +629,6 @@ static void fs_timeout(struct net_device *dev)
1676     phy_stop(dev->phydev);
1677     (*fep->ops->stop)(dev);
1678     (*fep->ops->restart)(dev);
1679     - phy_start(dev->phydev);
1680     }
1681    
1682     phy_start(dev->phydev);
1683     @@ -639,6 +640,13 @@ static void fs_timeout(struct net_device *dev)
1684     netif_wake_queue(dev);
1685     }
1686    
1687     +static void fs_timeout(struct net_device *dev)
1688     +{
1689     + struct fs_enet_private *fep = netdev_priv(dev);
1690     +
1691     + schedule_work(&fep->timeout_work);
1692     +}
1693     +
1694     /*-----------------------------------------------------------------------------
1695     * generic link-change handler - should be sufficient for most cases
1696     *-----------------------------------------------------------------------------*/
1697     @@ -759,6 +767,7 @@ static int fs_enet_close(struct net_device *dev)
1698     netif_stop_queue(dev);
1699     netif_carrier_off(dev);
1700     napi_disable(&fep->napi);
1701     + cancel_work_sync(&fep->timeout_work);
1702     phy_stop(dev->phydev);
1703    
1704     spin_lock_irqsave(&fep->lock, flags);
1705     @@ -1033,6 +1042,7 @@ static int fs_enet_probe(struct platform_device *ofdev)
1706    
1707     ndev->netdev_ops = &fs_enet_netdev_ops;
1708     ndev->watchdog_timeo = 2 * HZ;
1709     + INIT_WORK(&fep->timeout_work, fs_timeout_work);
1710     netif_napi_add(ndev, &fep->napi, fs_enet_napi, fpi->napi_weight);
1711    
1712     ndev->ethtool_ops = &fs_ethtool_ops;
1713     diff --git a/drivers/net/ethernet/freescale/fs_enet/fs_enet.h b/drivers/net/ethernet/freescale/fs_enet/fs_enet.h
1714     index fee24c822fad..0e4e024449ec 100644
1715     --- a/drivers/net/ethernet/freescale/fs_enet/fs_enet.h
1716     +++ b/drivers/net/ethernet/freescale/fs_enet/fs_enet.h
1717     @@ -124,6 +124,7 @@ struct fs_enet_private {
1718     spinlock_t lock; /* during all ops except TX pckt processing */
1719     spinlock_t tx_lock; /* during fs_start_xmit and fs_tx */
1720     struct fs_platform_info *fpi;
1721     + struct work_struct timeout_work;
1722     const struct fs_ops *ops;
1723     int rx_ring, tx_ring;
1724     dma_addr_t ring_mem_addr;
1725     diff --git a/drivers/net/ethernet/intel/i40e/i40e_nvm.c b/drivers/net/ethernet/intel/i40e/i40e_nvm.c
1726     index abe290bfc638..8408682efd86 100644
1727     --- a/drivers/net/ethernet/intel/i40e/i40e_nvm.c
1728     +++ b/drivers/net/ethernet/intel/i40e/i40e_nvm.c
1729     @@ -266,7 +266,7 @@ static i40e_status i40e_read_nvm_aq(struct i40e_hw *hw, u8 module_pointer,
1730     * @offset: offset of the Shadow RAM word to read (0x000000 - 0x001FFF)
1731     * @data: word read from the Shadow RAM
1732     *
1733     - * Reads one 16 bit word from the Shadow RAM using the GLNVM_SRCTL register.
1734     + * Reads one 16 bit word from the Shadow RAM using the AdminQ
1735     **/
1736     static i40e_status i40e_read_nvm_word_aq(struct i40e_hw *hw, u16 offset,
1737     u16 *data)
1738     @@ -280,27 +280,49 @@ static i40e_status i40e_read_nvm_word_aq(struct i40e_hw *hw, u16 offset,
1739     }
1740    
1741     /**
1742     - * i40e_read_nvm_word - Reads Shadow RAM
1743     + * __i40e_read_nvm_word - Reads nvm word, assumes called does the locking
1744     * @hw: pointer to the HW structure
1745     * @offset: offset of the Shadow RAM word to read (0x000000 - 0x001FFF)
1746     * @data: word read from the Shadow RAM
1747     *
1748     - * Reads one 16 bit word from the Shadow RAM using the GLNVM_SRCTL register.
1749     + * Reads one 16 bit word from the Shadow RAM.
1750     + *
1751     + * Do not use this function except in cases where the nvm lock is already
1752     + * taken via i40e_acquire_nvm().
1753     + **/
1754     +static i40e_status __i40e_read_nvm_word(struct i40e_hw *hw,
1755     + u16 offset, u16 *data)
1756     +{
1757     + i40e_status ret_code = 0;
1758     +
1759     + if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE)
1760     + ret_code = i40e_read_nvm_word_aq(hw, offset, data);
1761     + else
1762     + ret_code = i40e_read_nvm_word_srctl(hw, offset, data);
1763     + return ret_code;
1764     +}
1765     +
1766     +/**
1767     + * i40e_read_nvm_word - Reads nvm word and acquire lock if necessary
1768     + * @hw: pointer to the HW structure
1769     + * @offset: offset of the Shadow RAM word to read (0x000000 - 0x001FFF)
1770     + * @data: word read from the Shadow RAM
1771     + *
1772     + * Reads one 16 bit word from the Shadow RAM.
1773     **/
1774     i40e_status i40e_read_nvm_word(struct i40e_hw *hw, u16 offset,
1775     u16 *data)
1776     {
1777     - enum i40e_status_code ret_code = 0;
1778     + i40e_status ret_code = 0;
1779    
1780     ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
1781     - if (!ret_code) {
1782     - if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) {
1783     - ret_code = i40e_read_nvm_word_aq(hw, offset, data);
1784     - } else {
1785     - ret_code = i40e_read_nvm_word_srctl(hw, offset, data);
1786     - }
1787     - i40e_release_nvm(hw);
1788     - }
1789     + if (ret_code)
1790     + return ret_code;
1791     +
1792     + ret_code = __i40e_read_nvm_word(hw, offset, data);
1793     +
1794     + i40e_release_nvm(hw);
1795     +
1796     return ret_code;
1797     }
1798    
1799     @@ -393,31 +415,25 @@ read_nvm_buffer_aq_exit:
1800     }
1801    
1802     /**
1803     - * i40e_read_nvm_buffer - Reads Shadow RAM buffer
1804     + * __i40e_read_nvm_buffer - Reads nvm buffer, caller must acquire lock
1805     * @hw: pointer to the HW structure
1806     * @offset: offset of the Shadow RAM word to read (0x000000 - 0x001FFF).
1807     * @words: (in) number of words to read; (out) number of words actually read
1808     * @data: words read from the Shadow RAM
1809     *
1810     * Reads 16 bit words (data buffer) from the SR using the i40e_read_nvm_srrd()
1811     - * method. The buffer read is preceded by the NVM ownership take
1812     - * and followed by the release.
1813     + * method.
1814     **/
1815     -i40e_status i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset,
1816     - u16 *words, u16 *data)
1817     +static i40e_status __i40e_read_nvm_buffer(struct i40e_hw *hw,
1818     + u16 offset, u16 *words,
1819     + u16 *data)
1820     {
1821     - enum i40e_status_code ret_code = 0;
1822     + i40e_status ret_code = 0;
1823    
1824     - if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE) {
1825     - ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
1826     - if (!ret_code) {
1827     - ret_code = i40e_read_nvm_buffer_aq(hw, offset, words,
1828     - data);
1829     - i40e_release_nvm(hw);
1830     - }
1831     - } else {
1832     + if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE)
1833     + ret_code = i40e_read_nvm_buffer_aq(hw, offset, words, data);
1834     + else
1835     ret_code = i40e_read_nvm_buffer_srctl(hw, offset, words, data);
1836     - }
1837     return ret_code;
1838     }
1839    
1840     @@ -499,15 +515,15 @@ static i40e_status i40e_calc_nvm_checksum(struct i40e_hw *hw,
1841     data = (u16 *)vmem.va;
1842    
1843     /* read pointer to VPD area */
1844     - ret_code = i40e_read_nvm_word(hw, I40E_SR_VPD_PTR, &vpd_module);
1845     + ret_code = __i40e_read_nvm_word(hw, I40E_SR_VPD_PTR, &vpd_module);
1846     if (ret_code) {
1847     ret_code = I40E_ERR_NVM_CHECKSUM;
1848     goto i40e_calc_nvm_checksum_exit;
1849     }
1850    
1851     /* read pointer to PCIe Alt Auto-load module */
1852     - ret_code = i40e_read_nvm_word(hw, I40E_SR_PCIE_ALT_AUTO_LOAD_PTR,
1853     - &pcie_alt_module);
1854     + ret_code = __i40e_read_nvm_word(hw, I40E_SR_PCIE_ALT_AUTO_LOAD_PTR,
1855     + &pcie_alt_module);
1856     if (ret_code) {
1857     ret_code = I40E_ERR_NVM_CHECKSUM;
1858     goto i40e_calc_nvm_checksum_exit;
1859     @@ -521,7 +537,7 @@ static i40e_status i40e_calc_nvm_checksum(struct i40e_hw *hw,
1860     if ((i % I40E_SR_SECTOR_SIZE_IN_WORDS) == 0) {
1861     u16 words = I40E_SR_SECTOR_SIZE_IN_WORDS;
1862    
1863     - ret_code = i40e_read_nvm_buffer(hw, i, &words, data);
1864     + ret_code = __i40e_read_nvm_buffer(hw, i, &words, data);
1865     if (ret_code) {
1866     ret_code = I40E_ERR_NVM_CHECKSUM;
1867     goto i40e_calc_nvm_checksum_exit;
1868     @@ -593,14 +609,19 @@ i40e_status i40e_validate_nvm_checksum(struct i40e_hw *hw,
1869     u16 checksum_sr = 0;
1870     u16 checksum_local = 0;
1871    
1872     + /* We must acquire the NVM lock in order to correctly synchronize the
1873     + * NVM accesses across multiple PFs. Without doing so it is possible
1874     + * for one of the PFs to read invalid data potentially indicating that
1875     + * the checksum is invalid.
1876     + */
1877     + ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
1878     + if (ret_code)
1879     + return ret_code;
1880     ret_code = i40e_calc_nvm_checksum(hw, &checksum_local);
1881     + __i40e_read_nvm_word(hw, I40E_SR_SW_CHECKSUM_WORD, &checksum_sr);
1882     + i40e_release_nvm(hw);
1883     if (ret_code)
1884     - goto i40e_validate_nvm_checksum_exit;
1885     -
1886     - /* Do not use i40e_read_nvm_word() because we do not want to take
1887     - * the synchronization semaphores twice here.
1888     - */
1889     - i40e_read_nvm_word(hw, I40E_SR_SW_CHECKSUM_WORD, &checksum_sr);
1890     + return ret_code;
1891    
1892     /* Verify read checksum from EEPROM is the same as
1893     * calculated checksum
1894     @@ -612,7 +633,6 @@ i40e_status i40e_validate_nvm_checksum(struct i40e_hw *hw,
1895     if (checksum)
1896     *checksum = checksum_local;
1897    
1898     -i40e_validate_nvm_checksum_exit:
1899     return ret_code;
1900     }
1901    
1902     @@ -986,6 +1006,7 @@ retry:
1903     break;
1904    
1905     case I40E_NVMUPD_CSUM_CON:
1906     + /* Assumes the caller has acquired the nvm */
1907     status = i40e_update_nvm_checksum(hw);
1908     if (status) {
1909     *perrno = hw->aq.asq_last_status ?
1910     @@ -1000,6 +1021,7 @@ retry:
1911     break;
1912    
1913     case I40E_NVMUPD_CSUM_LCB:
1914     + /* Assumes the caller has acquired the nvm */
1915     status = i40e_update_nvm_checksum(hw);
1916     if (status) {
1917     *perrno = hw->aq.asq_last_status ?
1918     diff --git a/drivers/net/ethernet/intel/i40e/i40e_prototype.h b/drivers/net/ethernet/intel/i40e/i40e_prototype.h
1919     index 4660c5abc855..6b364118badd 100644
1920     --- a/drivers/net/ethernet/intel/i40e/i40e_prototype.h
1921     +++ b/drivers/net/ethernet/intel/i40e/i40e_prototype.h
1922     @@ -311,8 +311,6 @@ i40e_status i40e_acquire_nvm(struct i40e_hw *hw,
1923     void i40e_release_nvm(struct i40e_hw *hw);
1924     i40e_status i40e_read_nvm_word(struct i40e_hw *hw, u16 offset,
1925     u16 *data);
1926     -i40e_status i40e_read_nvm_buffer(struct i40e_hw *hw, u16 offset,
1927     - u16 *words, u16 *data);
1928     i40e_status i40e_update_nvm_checksum(struct i40e_hw *hw);
1929     i40e_status i40e_validate_nvm_checksum(struct i40e_hw *hw,
1930     u16 *checksum);
1931     diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c
1932     index 4a50870e0fa7..a61447fd778e 100644
1933     --- a/drivers/net/ethernet/intel/igb/e1000_82575.c
1934     +++ b/drivers/net/ethernet/intel/igb/e1000_82575.c
1935     @@ -245,19 +245,7 @@ static s32 igb_init_phy_params_82575(struct e1000_hw *hw)
1936     hw->bus.func = (rd32(E1000_STATUS) & E1000_STATUS_FUNC_MASK) >>
1937     E1000_STATUS_FUNC_SHIFT;
1938    
1939     - /* Make sure the PHY is in a good state. Several people have reported
1940     - * firmware leaving the PHY's page select register set to something
1941     - * other than the default of zero, which causes the PHY ID read to
1942     - * access something other than the intended register.
1943     - */
1944     - ret_val = hw->phy.ops.reset(hw);
1945     - if (ret_val) {
1946     - hw_dbg("Error resetting the PHY.\n");
1947     - goto out;
1948     - }
1949     -
1950     /* Set phy->phy_addr and phy->id. */
1951     - igb_write_phy_reg_82580(hw, I347AT4_PAGE_SELECT, 0);
1952     ret_val = igb_get_phy_id_82575(hw);
1953     if (ret_val)
1954     return ret_val;
1955     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
1956     index 9680c8805178..1d5263c46eee 100644
1957     --- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
1958     +++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
1959     @@ -965,7 +965,7 @@ static int mlx5_cmd_invoke(struct mlx5_core_dev *dev, struct mlx5_cmd_msg *in,
1960    
1961     err = wait_func(dev, ent);
1962     if (err == -ETIMEDOUT)
1963     - goto out_free;
1964     + goto out;
1965    
1966     ds = ent->ts2 - ent->ts1;
1967     op = MLX5_GET(mbox_in, in->first.data, opcode);
1968     @@ -1428,6 +1428,7 @@ void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec, bool forced)
1969     mlx5_core_err(dev, "Command completion arrived after timeout (entry idx = %d).\n",
1970     ent->idx);
1971     free_ent(cmd, ent->idx);
1972     + free_cmd(ent);
1973     }
1974     continue;
1975     }
1976     @@ -1486,7 +1487,8 @@ void mlx5_cmd_comp_handler(struct mlx5_core_dev *dev, u64 vec, bool forced)
1977     free_msg(dev, ent->in);
1978    
1979     err = err ? err : ent->status;
1980     - free_cmd(ent);
1981     + if (!forced)
1982     + free_cmd(ent);
1983     callback(err, context);
1984     } else {
1985     complete(&ent->done);
1986     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c
1987     index 23ccec4cb7f5..a1f3556307c7 100644
1988     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c
1989     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c
1990     @@ -197,9 +197,15 @@ static int mlx5e_am_stats_compare(struct mlx5e_rx_am_stats *curr,
1991     return (curr->bpms > prev->bpms) ? MLX5E_AM_STATS_BETTER :
1992     MLX5E_AM_STATS_WORSE;
1993    
1994     + if (!prev->ppms)
1995     + return curr->ppms ? MLX5E_AM_STATS_BETTER :
1996     + MLX5E_AM_STATS_SAME;
1997     +
1998     if (IS_SIGNIFICANT_DIFF(curr->ppms, prev->ppms))
1999     return (curr->ppms > prev->ppms) ? MLX5E_AM_STATS_BETTER :
2000     MLX5E_AM_STATS_WORSE;
2001     + if (!prev->epms)
2002     + return MLX5E_AM_STATS_SAME;
2003    
2004     if (IS_SIGNIFICANT_DIFF(curr->epms, prev->epms))
2005     return (curr->epms < prev->epms) ? MLX5E_AM_STATS_BETTER :
2006     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/health.c b/drivers/net/ethernet/mellanox/mlx5/core/health.c
2007     index 448e71e07668..264f51b3409d 100644
2008     --- a/drivers/net/ethernet/mellanox/mlx5/core/health.c
2009     +++ b/drivers/net/ethernet/mellanox/mlx5/core/health.c
2010     @@ -369,10 +369,11 @@ void mlx5_drain_health_wq(struct mlx5_core_dev *dev)
2011     void mlx5_drain_health_recovery(struct mlx5_core_dev *dev)
2012     {
2013     struct mlx5_core_health *health = &dev->priv.health;
2014     + unsigned long flags;
2015    
2016     - spin_lock(&health->wq_lock);
2017     + spin_lock_irqsave(&health->wq_lock, flags);
2018     set_bit(MLX5_DROP_NEW_RECOVERY_WORK, &health->flags);
2019     - spin_unlock(&health->wq_lock);
2020     + spin_unlock_irqrestore(&health->wq_lock, flags);
2021     cancel_delayed_work_sync(&dev->priv.health.recover_work);
2022     }
2023    
2024     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
2025     index 6698a3a07406..d676088512cf 100644
2026     --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
2027     +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
2028     @@ -957,7 +957,7 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv,
2029     if (err) {
2030     dev_err(&dev->pdev->dev, "Firmware over %d MS in pre-initializing state, aborting\n",
2031     FW_PRE_INIT_TIMEOUT_MILI);
2032     - goto out;
2033     + goto out_err;
2034     }
2035    
2036     err = mlx5_cmd_init(dev);
2037     diff --git a/drivers/net/ethernet/qlogic/qed/qed_hw.c b/drivers/net/ethernet/qlogic/qed/qed_hw.c
2038     index 6e4fae9b1430..944749cfe092 100644
2039     --- a/drivers/net/ethernet/qlogic/qed/qed_hw.c
2040     +++ b/drivers/net/ethernet/qlogic/qed/qed_hw.c
2041     @@ -34,6 +34,7 @@ struct qed_ptt {
2042     struct list_head list_entry;
2043     unsigned int idx;
2044     struct pxp_ptt_entry pxp;
2045     + u8 hwfn_id;
2046     };
2047    
2048     struct qed_ptt_pool {
2049     @@ -55,6 +56,7 @@ int qed_ptt_pool_alloc(struct qed_hwfn *p_hwfn)
2050     p_pool->ptts[i].idx = i;
2051     p_pool->ptts[i].pxp.offset = QED_BAR_INVALID_OFFSET;
2052     p_pool->ptts[i].pxp.pretend.control = 0;
2053     + p_pool->ptts[i].hwfn_id = p_hwfn->my_id;
2054     if (i >= RESERVED_PTT_MAX)
2055     list_add(&p_pool->ptts[i].list_entry,
2056     &p_pool->free_list);
2057     @@ -169,6 +171,11 @@ static u32 qed_set_ptt(struct qed_hwfn *p_hwfn,
2058    
2059     offset = hw_addr - win_hw_addr;
2060    
2061     + if (p_ptt->hwfn_id != p_hwfn->my_id)
2062     + DP_NOTICE(p_hwfn,
2063     + "ptt[%d] of hwfn[%02x] is used by hwfn[%02x]!\n",
2064     + p_ptt->idx, p_ptt->hwfn_id, p_hwfn->my_id);
2065     +
2066     /* Verify the address is within the window */
2067     if (hw_addr < win_hw_addr ||
2068     offset >= PXP_EXTERNAL_BAR_PF_WINDOW_SINGLE_SIZE) {
2069     diff --git a/drivers/net/ethernet/qlogic/qed/qed_roce.c b/drivers/net/ethernet/qlogic/qed/qed_roce.c
2070     index d9dcb0d1714c..07783d13df71 100644
2071     --- a/drivers/net/ethernet/qlogic/qed/qed_roce.c
2072     +++ b/drivers/net/ethernet/qlogic/qed/qed_roce.c
2073     @@ -1059,23 +1059,16 @@ static void qed_rdma_copy_gids(struct qed_rdma_qp *qp, __le32 *src_gid,
2074    
2075     static enum roce_flavor qed_roce_mode_to_flavor(enum roce_mode roce_mode)
2076     {
2077     - enum roce_flavor flavor;
2078     -
2079     switch (roce_mode) {
2080     case ROCE_V1:
2081     - flavor = PLAIN_ROCE;
2082     - break;
2083     + return PLAIN_ROCE;
2084     case ROCE_V2_IPV4:
2085     - flavor = RROCE_IPV4;
2086     - break;
2087     + return RROCE_IPV4;
2088     case ROCE_V2_IPV6:
2089     - flavor = ROCE_V2_IPV6;
2090     - break;
2091     + return RROCE_IPV6;
2092     default:
2093     - flavor = MAX_ROCE_MODE;
2094     - break;
2095     + return MAX_ROCE_FLAVOR;
2096     }
2097     - return flavor;
2098     }
2099    
2100     static int qed_roce_alloc_cid(struct qed_hwfn *p_hwfn, u16 *cid)
2101     diff --git a/drivers/net/ethernet/qlogic/qed/qed_vf.c b/drivers/net/ethernet/qlogic/qed/qed_vf.c
2102     index faf8215872de..9cc02b94328a 100644
2103     --- a/drivers/net/ethernet/qlogic/qed/qed_vf.c
2104     +++ b/drivers/net/ethernet/qlogic/qed/qed_vf.c
2105     @@ -295,7 +295,6 @@ static int qed_vf_pf_acquire(struct qed_hwfn *p_hwfn)
2106     }
2107    
2108     if (!p_iov->b_pre_fp_hsi &&
2109     - ETH_HSI_VER_MINOR &&
2110     (resp->pfdev_info.minor_fp_hsi < ETH_HSI_VER_MINOR)) {
2111     DP_INFO(p_hwfn,
2112     "PF is using older fastpath HSI; %02x.%02x is configured\n",
2113     diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
2114     index 5ddadcd0c8db..f1242ab32ca6 100644
2115     --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
2116     +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
2117     @@ -1825,22 +1825,44 @@ struct qlcnic_hardware_ops {
2118     u32 (*get_cap_size)(void *, int);
2119     void (*set_sys_info)(void *, int, u32);
2120     void (*store_cap_mask)(void *, u32);
2121     + bool (*encap_rx_offload) (struct qlcnic_adapter *adapter);
2122     + bool (*encap_tx_offload) (struct qlcnic_adapter *adapter);
2123     };
2124    
2125     extern struct qlcnic_nic_template qlcnic_vf_ops;
2126    
2127     -static inline bool qlcnic_encap_tx_offload(struct qlcnic_adapter *adapter)
2128     +static inline bool qlcnic_83xx_encap_tx_offload(struct qlcnic_adapter *adapter)
2129     {
2130     return adapter->ahw->extra_capability[0] &
2131     QLCNIC_83XX_FW_CAPAB_ENCAP_TX_OFFLOAD;
2132     }
2133    
2134     -static inline bool qlcnic_encap_rx_offload(struct qlcnic_adapter *adapter)
2135     +static inline bool qlcnic_83xx_encap_rx_offload(struct qlcnic_adapter *adapter)
2136     {
2137     return adapter->ahw->extra_capability[0] &
2138     QLCNIC_83XX_FW_CAPAB_ENCAP_RX_OFFLOAD;
2139     }
2140    
2141     +static inline bool qlcnic_82xx_encap_tx_offload(struct qlcnic_adapter *adapter)
2142     +{
2143     + return false;
2144     +}
2145     +
2146     +static inline bool qlcnic_82xx_encap_rx_offload(struct qlcnic_adapter *adapter)
2147     +{
2148     + return false;
2149     +}
2150     +
2151     +static inline bool qlcnic_encap_rx_offload(struct qlcnic_adapter *adapter)
2152     +{
2153     + return adapter->ahw->hw_ops->encap_rx_offload(adapter);
2154     +}
2155     +
2156     +static inline bool qlcnic_encap_tx_offload(struct qlcnic_adapter *adapter)
2157     +{
2158     + return adapter->ahw->hw_ops->encap_tx_offload(adapter);
2159     +}
2160     +
2161     static inline int qlcnic_start_firmware(struct qlcnic_adapter *adapter)
2162     {
2163     return adapter->nic_ops->start_firmware(adapter);
2164     diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
2165     index 05d32e86bcf7..35c5ac41c0a1 100644
2166     --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
2167     +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
2168     @@ -242,6 +242,8 @@ static struct qlcnic_hardware_ops qlcnic_83xx_hw_ops = {
2169     .get_cap_size = qlcnic_83xx_get_cap_size,
2170     .set_sys_info = qlcnic_83xx_set_sys_info,
2171     .store_cap_mask = qlcnic_83xx_store_cap_mask,
2172     + .encap_rx_offload = qlcnic_83xx_encap_rx_offload,
2173     + .encap_tx_offload = qlcnic_83xx_encap_tx_offload,
2174     };
2175    
2176     static struct qlcnic_nic_template qlcnic_83xx_ops = {
2177     diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
2178     index 3ae3968b0edf..ebf5ead16939 100644
2179     --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
2180     +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
2181     @@ -632,6 +632,8 @@ static struct qlcnic_hardware_ops qlcnic_hw_ops = {
2182     .get_cap_size = qlcnic_82xx_get_cap_size,
2183     .set_sys_info = qlcnic_82xx_set_sys_info,
2184     .store_cap_mask = qlcnic_82xx_store_cap_mask,
2185     + .encap_rx_offload = qlcnic_82xx_encap_rx_offload,
2186     + .encap_tx_offload = qlcnic_82xx_encap_tx_offload,
2187     };
2188    
2189     static int qlcnic_check_multi_tx_capability(struct qlcnic_adapter *adapter)
2190     diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
2191     index 2f656f395f39..c58180f40844 100644
2192     --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
2193     +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c
2194     @@ -77,6 +77,8 @@ static struct qlcnic_hardware_ops qlcnic_sriov_vf_hw_ops = {
2195     .free_mac_list = qlcnic_sriov_vf_free_mac_list,
2196     .enable_sds_intr = qlcnic_83xx_enable_sds_intr,
2197     .disable_sds_intr = qlcnic_83xx_disable_sds_intr,
2198     + .encap_rx_offload = qlcnic_83xx_encap_rx_offload,
2199     + .encap_tx_offload = qlcnic_83xx_encap_tx_offload,
2200     };
2201    
2202     static struct qlcnic_nic_template qlcnic_sriov_vf_ops = {
2203     diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
2204     index 20f5c0cabc89..24754d3fb0ac 100644
2205     --- a/drivers/net/ethernet/realtek/r8169.c
2206     +++ b/drivers/net/ethernet/realtek/r8169.c
2207     @@ -7559,17 +7559,15 @@ static int rtl8169_poll(struct napi_struct *napi, int budget)
2208     struct rtl8169_private *tp = container_of(napi, struct rtl8169_private, napi);
2209     struct net_device *dev = tp->dev;
2210     u16 enable_mask = RTL_EVENT_NAPI | tp->event_slow;
2211     - int work_done= 0;
2212     + int work_done;
2213     u16 status;
2214    
2215     status = rtl_get_events(tp);
2216     rtl_ack_events(tp, status & ~tp->event_slow);
2217    
2218     - if (status & RTL_EVENT_NAPI_RX)
2219     - work_done = rtl_rx(dev, tp, (u32) budget);
2220     + work_done = rtl_rx(dev, tp, (u32) budget);
2221    
2222     - if (status & RTL_EVENT_NAPI_TX)
2223     - rtl_tx(dev, tp);
2224     + rtl_tx(dev, tp);
2225    
2226     if (status & tp->event_slow) {
2227     enable_mask &= ~tp->event_slow;
2228     diff --git a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c
2229     index 489ef146201e..6a9c954492f2 100644
2230     --- a/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c
2231     +++ b/drivers/net/ethernet/stmicro/stmmac/altr_tse_pcs.c
2232     @@ -37,6 +37,7 @@
2233     #define TSE_PCS_CONTROL_AN_EN_MASK BIT(12)
2234     #define TSE_PCS_CONTROL_REG 0x00
2235     #define TSE_PCS_CONTROL_RESTART_AN_MASK BIT(9)
2236     +#define TSE_PCS_CTRL_AUTONEG_SGMII 0x1140
2237     #define TSE_PCS_IF_MODE_REG 0x28
2238     #define TSE_PCS_LINK_TIMER_0_REG 0x24
2239     #define TSE_PCS_LINK_TIMER_1_REG 0x26
2240     @@ -65,6 +66,7 @@
2241     #define TSE_PCS_SW_RESET_TIMEOUT 100
2242     #define TSE_PCS_USE_SGMII_AN_MASK BIT(1)
2243     #define TSE_PCS_USE_SGMII_ENA BIT(0)
2244     +#define TSE_PCS_IF_USE_SGMII 0x03
2245    
2246     #define SGMII_ADAPTER_CTRL_REG 0x00
2247     #define SGMII_ADAPTER_DISABLE 0x0001
2248     @@ -101,7 +103,9 @@ int tse_pcs_init(void __iomem *base, struct tse_pcs *pcs)
2249     {
2250     int ret = 0;
2251    
2252     - writew(TSE_PCS_USE_SGMII_ENA, base + TSE_PCS_IF_MODE_REG);
2253     + writew(TSE_PCS_IF_USE_SGMII, base + TSE_PCS_IF_MODE_REG);
2254     +
2255     + writew(TSE_PCS_CTRL_AUTONEG_SGMII, base + TSE_PCS_CONTROL_REG);
2256    
2257     writew(TSE_PCS_SGMII_LINK_TIMER_0, base + TSE_PCS_LINK_TIMER_0_REG);
2258     writew(TSE_PCS_SGMII_LINK_TIMER_1, base + TSE_PCS_LINK_TIMER_1_REG);
2259     diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2260     index 0df71865fab1..65ed02bc3ea3 100644
2261     --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2262     +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
2263     @@ -2199,7 +2199,8 @@ static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
2264     unsigned int nopaged_len = skb_headlen(skb);
2265     int i, csum_insertion = 0, is_jumbo = 0;
2266     int nfrags = skb_shinfo(skb)->nr_frags;
2267     - unsigned int entry, first_entry;
2268     + int entry;
2269     + unsigned int first_entry;
2270     struct dma_desc *desc, *first;
2271     unsigned int enh_desc;
2272     unsigned int des;
2273     diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
2274     index ec295851812b..2abeba41c0af 100644
2275     --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
2276     +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
2277     @@ -216,7 +216,7 @@ static int stmmac_mdio_write_gmac4(struct mii_bus *bus, int phyaddr, int phyreg,
2278     */
2279     int stmmac_mdio_reset(struct mii_bus *bus)
2280     {
2281     -#if defined(CONFIG_STMMAC_PLATFORM)
2282     +#if IS_ENABLED(CONFIG_STMMAC_PLATFORM)
2283     struct net_device *ndev = bus->priv;
2284     struct stmmac_priv *priv = netdev_priv(ndev);
2285     unsigned int mii_address = priv->hw->mii.addr;
2286     diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
2287     index 365a48cfcbbf..653f0b185a68 100644
2288     --- a/drivers/net/macsec.c
2289     +++ b/drivers/net/macsec.c
2290     @@ -744,6 +744,7 @@ static struct sk_buff *macsec_encrypt(struct sk_buff *skb,
2291     sg_init_table(sg, ret);
2292     ret = skb_to_sgvec(skb, sg, 0, skb->len);
2293     if (unlikely(ret < 0)) {
2294     + aead_request_free(req);
2295     macsec_txsa_put(tx_sa);
2296     kfree_skb(skb);
2297     return ERR_PTR(ret);
2298     @@ -956,6 +957,7 @@ static struct sk_buff *macsec_decrypt(struct sk_buff *skb,
2299     sg_init_table(sg, ret);
2300     ret = skb_to_sgvec(skb, sg, 0, skb->len);
2301     if (unlikely(ret < 0)) {
2302     + aead_request_free(req);
2303     kfree_skb(skb);
2304     return ERR_PTR(ret);
2305     }
2306     diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
2307     index c60c147708c4..520352327104 100644
2308     --- a/drivers/net/phy/marvell.c
2309     +++ b/drivers/net/phy/marvell.c
2310     @@ -1610,7 +1610,7 @@ static struct phy_driver marvell_drivers[] = {
2311     .flags = PHY_HAS_INTERRUPT,
2312     .probe = marvell_probe,
2313     .config_init = &m88e1145_config_init,
2314     - .config_aneg = &marvell_config_aneg,
2315     + .config_aneg = &m88e1101_config_aneg,
2316     .read_status = &genphy_read_status,
2317     .ack_interrupt = &marvell_ack_interrupt,
2318     .config_intr = &marvell_config_intr,
2319     diff --git a/drivers/net/usb/asix_common.c b/drivers/net/usb/asix_common.c
2320     index 125cff57c759..3dbb0646b024 100644
2321     --- a/drivers/net/usb/asix_common.c
2322     +++ b/drivers/net/usb/asix_common.c
2323     @@ -575,6 +575,9 @@ int asix_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
2324     struct usbnet *dev = netdev_priv(net);
2325     u8 opt = 0;
2326    
2327     + if (wolinfo->wolopts & ~(WAKE_PHY | WAKE_MAGIC))
2328     + return -EINVAL;
2329     +
2330     if (wolinfo->wolopts & WAKE_PHY)
2331     opt |= AX_MONITOR_LINK;
2332     if (wolinfo->wolopts & WAKE_MAGIC)
2333     diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
2334     index 8a6675d92b98..559af8e6ad90 100644
2335     --- a/drivers/net/usb/ax88179_178a.c
2336     +++ b/drivers/net/usb/ax88179_178a.c
2337     @@ -566,6 +566,9 @@ ax88179_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
2338     struct usbnet *dev = netdev_priv(net);
2339     u8 opt = 0;
2340    
2341     + if (wolinfo->wolopts & ~(WAKE_PHY | WAKE_MAGIC))
2342     + return -EINVAL;
2343     +
2344     if (wolinfo->wolopts & WAKE_PHY)
2345     opt |= AX_MONITOR_MODE_RWLC;
2346     if (wolinfo->wolopts & WAKE_MAGIC)
2347     diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
2348     index 3086cae62fdc..7b158674ceed 100644
2349     --- a/drivers/net/usb/cdc_ncm.c
2350     +++ b/drivers/net/usb/cdc_ncm.c
2351     @@ -772,7 +772,7 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
2352     int err;
2353     u8 iface_no;
2354     struct usb_cdc_parsed_header hdr;
2355     - u16 curr_ntb_format;
2356     + __le16 curr_ntb_format;
2357    
2358     ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
2359     if (!ctx)
2360     @@ -890,7 +890,7 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
2361     goto error2;
2362     }
2363    
2364     - if (curr_ntb_format == USB_CDC_NCM_NTB32_FORMAT) {
2365     + if (curr_ntb_format == cpu_to_le16(USB_CDC_NCM_NTB32_FORMAT)) {
2366     dev_info(&intf->dev, "resetting NTB format to 16-bit");
2367     err = usbnet_write_cmd(dev, USB_CDC_SET_NTB_FORMAT,
2368     USB_TYPE_CLASS | USB_DIR_OUT
2369     diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
2370     index c5e04d1ad73a..0cbcd3f77341 100644
2371     --- a/drivers/net/usb/lan78xx.c
2372     +++ b/drivers/net/usb/lan78xx.c
2373     @@ -1311,19 +1311,10 @@ static int lan78xx_set_wol(struct net_device *netdev,
2374     if (ret < 0)
2375     return ret;
2376    
2377     - pdata->wol = 0;
2378     - if (wol->wolopts & WAKE_UCAST)
2379     - pdata->wol |= WAKE_UCAST;
2380     - if (wol->wolopts & WAKE_MCAST)
2381     - pdata->wol |= WAKE_MCAST;
2382     - if (wol->wolopts & WAKE_BCAST)
2383     - pdata->wol |= WAKE_BCAST;
2384     - if (wol->wolopts & WAKE_MAGIC)
2385     - pdata->wol |= WAKE_MAGIC;
2386     - if (wol->wolopts & WAKE_PHY)
2387     - pdata->wol |= WAKE_PHY;
2388     - if (wol->wolopts & WAKE_ARP)
2389     - pdata->wol |= WAKE_ARP;
2390     + if (wol->wolopts & ~WAKE_ALL)
2391     + return -EINVAL;
2392     +
2393     + pdata->wol = wol->wolopts;
2394    
2395     device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts);
2396    
2397     diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
2398     index 5988674818ed..02e29562d254 100644
2399     --- a/drivers/net/usb/r8152.c
2400     +++ b/drivers/net/usb/r8152.c
2401     @@ -3776,6 +3776,9 @@ static int rtl8152_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
2402     if (!rtl_can_wakeup(tp))
2403     return -EOPNOTSUPP;
2404    
2405     + if (wol->wolopts & ~WAKE_ANY)
2406     + return -EINVAL;
2407     +
2408     ret = usb_autopm_get_interface(tp->intf);
2409     if (ret < 0)
2410     goto out_set_wol;
2411     diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
2412     index 8d3f938c6a51..977d9c772554 100644
2413     --- a/drivers/net/usb/smsc75xx.c
2414     +++ b/drivers/net/usb/smsc75xx.c
2415     @@ -731,6 +731,9 @@ static int smsc75xx_ethtool_set_wol(struct net_device *net,
2416     struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]);
2417     int ret;
2418    
2419     + if (wolinfo->wolopts & ~SUPPORTED_WAKE)
2420     + return -EINVAL;
2421     +
2422     pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE;
2423    
2424     ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts);
2425     diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
2426     index 831aa33d078a..a167116ceeee 100644
2427     --- a/drivers/net/usb/smsc95xx.c
2428     +++ b/drivers/net/usb/smsc95xx.c
2429     @@ -775,6 +775,9 @@ static int smsc95xx_ethtool_set_wol(struct net_device *net,
2430     struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
2431     int ret;
2432    
2433     + if (wolinfo->wolopts & ~SUPPORTED_WAKE)
2434     + return -EINVAL;
2435     +
2436     pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE;
2437    
2438     ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts);
2439     diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
2440     index a50df0d8fb9a..004c955c1fd1 100644
2441     --- a/drivers/net/usb/sr9800.c
2442     +++ b/drivers/net/usb/sr9800.c
2443     @@ -421,6 +421,9 @@ sr_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
2444     struct usbnet *dev = netdev_priv(net);
2445     u8 opt = 0;
2446    
2447     + if (wolinfo->wolopts & ~(WAKE_PHY | WAKE_MAGIC))
2448     + return -EINVAL;
2449     +
2450     if (wolinfo->wolopts & WAKE_PHY)
2451     opt |= SR_MONITOR_LINK;
2452     if (wolinfo->wolopts & WAKE_MAGIC)
2453     diff --git a/drivers/net/wireless/ath/ath10k/ahb.c b/drivers/net/wireless/ath/ath10k/ahb.c
2454     index 45226dbee5ce..da770af83036 100644
2455     --- a/drivers/net/wireless/ath/ath10k/ahb.c
2456     +++ b/drivers/net/wireless/ath/ath10k/ahb.c
2457     @@ -640,6 +640,7 @@ static int ath10k_ahb_hif_start(struct ath10k *ar)
2458     {
2459     ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot ahb hif start\n");
2460    
2461     + napi_enable(&ar->napi);
2462     ath10k_ce_enable_interrupts(ar);
2463     ath10k_pci_enable_legacy_irq(ar);
2464    
2465     @@ -692,7 +693,6 @@ static int ath10k_ahb_hif_power_up(struct ath10k *ar)
2466     ath10k_err(ar, "could not wake up target CPU: %d\n", ret);
2467     goto err_ce_deinit;
2468     }
2469     - napi_enable(&ar->napi);
2470    
2471     return 0;
2472    
2473     diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
2474     index 65ad7a130ca1..1e41d6c6de36 100644
2475     --- a/drivers/net/wireless/ath/ath10k/core.c
2476     +++ b/drivers/net/wireless/ath/ath10k/core.c
2477     @@ -698,7 +698,8 @@ static int ath10k_core_get_board_id_from_otp(struct ath10k *ar)
2478    
2479     if ((result & ATH10K_BMI_BOARD_ID_STATUS_MASK) != 0 ||
2480     (board_id == 0)) {
2481     - ath10k_warn(ar, "board id is not exist in otp, ignore it\n");
2482     + ath10k_dbg(ar, ATH10K_DBG_BOOT,
2483     + "board id does not exist in otp, ignore it\n");
2484     return -EOPNOTSUPP;
2485     }
2486    
2487     diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
2488     index 4bb36dc73433..cbb3e902e347 100644
2489     --- a/drivers/net/wireless/mac80211_hwsim.c
2490     +++ b/drivers/net/wireless/mac80211_hwsim.c
2491     @@ -2665,8 +2665,7 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
2492     list_add_tail(&data->list, &hwsim_radios);
2493     spin_unlock_bh(&hwsim_radio_lock);
2494    
2495     - if (idx > 0)
2496     - hwsim_mcast_new_radio(idx, info, param);
2497     + hwsim_mcast_new_radio(idx, info, param);
2498    
2499     return idx;
2500    
2501     diff --git a/drivers/net/wireless/marvell/libertas/if_sdio.c b/drivers/net/wireless/marvell/libertas/if_sdio.c
2502     index a0ae8d8763bb..06a57c708992 100644
2503     --- a/drivers/net/wireless/marvell/libertas/if_sdio.c
2504     +++ b/drivers/net/wireless/marvell/libertas/if_sdio.c
2505     @@ -1368,6 +1368,10 @@ static int if_sdio_suspend(struct device *dev)
2506     if (priv->wol_criteria == EHS_REMOVE_WAKEUP) {
2507     dev_info(dev, "Suspend without wake params -- powering down card\n");
2508     if (priv->fw_ready) {
2509     + ret = lbs_suspend(priv);
2510     + if (ret)
2511     + return ret;
2512     +
2513     priv->power_up_on_resume = true;
2514     if_sdio_power_off(card);
2515     }
2516     diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
2517     index 3c1adb38412b..aceae791baf3 100644
2518     --- a/drivers/net/xen-netfront.c
2519     +++ b/drivers/net/xen-netfront.c
2520     @@ -1848,7 +1848,7 @@ static int talk_to_netback(struct xenbus_device *dev,
2521     err = xen_net_read_mac(dev, info->netdev->dev_addr);
2522     if (err) {
2523     xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename);
2524     - goto out;
2525     + goto out_unlocked;
2526     }
2527    
2528     rtnl_lock();
2529     @@ -1963,6 +1963,7 @@ abort_transaction_no_dev_fatal:
2530     xennet_destroy_queues(info);
2531     out:
2532     rtnl_unlock();
2533     +out_unlocked:
2534     device_unregister(&dev->dev);
2535     return err;
2536     }
2537     @@ -1994,10 +1995,6 @@ static int xennet_connect(struct net_device *dev)
2538     /* talk_to_netback() sets the correct number of queues */
2539     num_queues = dev->real_num_tx_queues;
2540    
2541     - rtnl_lock();
2542     - netdev_update_features(dev);
2543     - rtnl_unlock();
2544     -
2545     if (dev->reg_state == NETREG_UNINITIALIZED) {
2546     err = register_netdev(dev);
2547     if (err) {
2548     @@ -2007,6 +2004,10 @@ static int xennet_connect(struct net_device *dev)
2549     }
2550     }
2551    
2552     + rtnl_lock();
2553     + netdev_update_features(dev);
2554     + rtnl_unlock();
2555     +
2556     /*
2557     * All public and private state should now be sane. Get
2558     * ready to start sending and receiving packets and give the driver
2559     diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
2560     index fadf151ce830..1ac4cec5f4f7 100644
2561     --- a/drivers/nvme/host/pci.c
2562     +++ b/drivers/nvme/host/pci.c
2563     @@ -1393,11 +1393,9 @@ static inline void nvme_release_cmb(struct nvme_dev *dev)
2564     if (dev->cmb) {
2565     iounmap(dev->cmb);
2566     dev->cmb = NULL;
2567     - if (dev->cmbsz) {
2568     - sysfs_remove_file_from_group(&dev->ctrl.device->kobj,
2569     - &dev_attr_cmb.attr, NULL);
2570     - dev->cmbsz = 0;
2571     - }
2572     + sysfs_remove_file_from_group(&dev->ctrl.device->kobj,
2573     + &dev_attr_cmb.attr, NULL);
2574     + dev->cmbsz = 0;
2575     }
2576     }
2577    
2578     @@ -1632,16 +1630,14 @@ static int nvme_pci_enable(struct nvme_dev *dev)
2579    
2580     /*
2581     * CMBs can currently only exist on >=1.2 PCIe devices. We only
2582     - * populate sysfs if a CMB is implemented. Note that we add the
2583     - * CMB attribute to the nvme_ctrl kobj which removes the need to remove
2584     - * it on exit. Since nvme_dev_attrs_group has no name we can pass
2585     - * NULL as final argument to sysfs_add_file_to_group.
2586     + * populate sysfs if a CMB is implemented. Since nvme_dev_attrs_group
2587     + * has no name we can pass NULL as final argument to
2588     + * sysfs_add_file_to_group.
2589     */
2590    
2591     if (readl(dev->bar + NVME_REG_VS) >= NVME_VS(1, 2, 0)) {
2592     dev->cmb = nvme_map_cmb(dev);
2593     -
2594     - if (dev->cmbsz) {
2595     + if (dev->cmb) {
2596     if (sysfs_add_file_to_group(&dev->ctrl.device->kobj,
2597     &dev_attr_cmb.attr, NULL))
2598     dev_warn(dev->dev,
2599     diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c
2600     index 2caed285fd7b..cdb7752dcbb7 100644
2601     --- a/drivers/nvme/target/admin-cmd.c
2602     +++ b/drivers/nvme/target/admin-cmd.c
2603     @@ -192,6 +192,7 @@ static void nvmet_execute_identify_ctrl(struct nvmet_req *req)
2604     id->vid = 0;
2605     id->ssvid = 0;
2606    
2607     + memset(id->sn, ' ', sizeof(id->sn));
2608     bin2hex(id->sn, &ctrl->subsys->serial,
2609     min(sizeof(ctrl->subsys->serial), sizeof(id->sn) / 2));
2610     copy_and_pad(id->mn, sizeof(id->mn), model, sizeof(model) - 1);
2611     diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
2612     index c7a695c2303a..2250f0d33481 100644
2613     --- a/drivers/pci/quirks.c
2614     +++ b/drivers/pci/quirks.c
2615     @@ -1634,8 +1634,8 @@ static void quirk_pcie_mch(struct pci_dev *pdev)
2616     DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, quirk_pcie_mch);
2617     DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7320_MCH, quirk_pcie_mch);
2618     DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7525_MCH, quirk_pcie_mch);
2619     -DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0x1610, quirk_pcie_mch);
2620    
2621     +DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_HUAWEI, 0x1610, PCI_CLASS_BRIDGE_PCI, 8, quirk_pcie_mch);
2622    
2623     /*
2624     * It's possible for the MSI to get corrupted if shpc and acpi
2625     diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
2626     index c29b9b611ab2..1515c9480f89 100644
2627     --- a/drivers/platform/x86/acer-wmi.c
2628     +++ b/drivers/platform/x86/acer-wmi.c
2629     @@ -1856,7 +1856,7 @@ static acpi_status __init acer_wmi_get_handle_cb(acpi_handle ah, u32 level,
2630     if (!strcmp(ctx, "SENR")) {
2631     if (acpi_bus_get_device(ah, &dev))
2632     return AE_OK;
2633     - if (!strcmp(ACER_WMID_ACCEL_HID, acpi_device_hid(dev)))
2634     + if (strcmp(ACER_WMID_ACCEL_HID, acpi_device_hid(dev)))
2635     return AE_OK;
2636     } else
2637     return AE_OK;
2638     @@ -1877,8 +1877,7 @@ static int __init acer_wmi_get_handle(const char *name, const char *prop,
2639     handle = NULL;
2640     status = acpi_get_devices(prop, acer_wmi_get_handle_cb,
2641     (void *)name, &handle);
2642     -
2643     - if (ACPI_SUCCESS(status)) {
2644     + if (ACPI_SUCCESS(status) && handle) {
2645     *ah = handle;
2646     return 0;
2647     } else {
2648     @@ -2247,8 +2246,8 @@ static int __init acer_wmi_init(void)
2649     if (err)
2650     return err;
2651     err = acer_wmi_accel_setup();
2652     - if (err)
2653     - return err;
2654     + if (err && err != -ENODEV)
2655     + pr_warn("Cannot enable accelerometer\n");
2656     }
2657    
2658     err = platform_driver_register(&acer_platform_driver);
2659     diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c
2660     index 51364621f77c..a421d6c551b6 100644
2661     --- a/drivers/ptp/ptp_chardev.c
2662     +++ b/drivers/ptp/ptp_chardev.c
2663     @@ -24,6 +24,8 @@
2664     #include <linux/slab.h>
2665     #include <linux/timekeeping.h>
2666    
2667     +#include <linux/nospec.h>
2668     +
2669     #include "ptp_private.h"
2670    
2671     static int ptp_disable_pinfunc(struct ptp_clock_info *ops,
2672     @@ -248,6 +250,7 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)
2673     err = -EINVAL;
2674     break;
2675     }
2676     + pin_index = array_index_nospec(pin_index, ops->n_pins);
2677     if (mutex_lock_interruptible(&ptp->pincfg_mux))
2678     return -ERESTARTSYS;
2679     pd = ops->pin_config[pin_index];
2680     @@ -266,6 +269,7 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg)
2681     err = -EINVAL;
2682     break;
2683     }
2684     + pin_index = array_index_nospec(pin_index, ops->n_pins);
2685     if (mutex_lock_interruptible(&ptp->pincfg_mux))
2686     return -ERESTARTSYS;
2687     err = ptp_set_pinfunc(ptp, pin_index, pd.func, pd.chan);
2688     diff --git a/drivers/reset/hisilicon/hi6220_reset.c b/drivers/reset/hisilicon/hi6220_reset.c
2689     index 35ce53edabf9..d5e5229308f2 100644
2690     --- a/drivers/reset/hisilicon/hi6220_reset.c
2691     +++ b/drivers/reset/hisilicon/hi6220_reset.c
2692     @@ -155,3 +155,5 @@ static int __init hi6220_reset_init(void)
2693     }
2694    
2695     postcore_initcall(hi6220_reset_init);
2696     +
2697     +MODULE_LICENSE("GPL v2");
2698     diff --git a/drivers/scsi/aacraid/src.c b/drivers/scsi/aacraid/src.c
2699     index 7b178d765726..c0592fda409e 100644
2700     --- a/drivers/scsi/aacraid/src.c
2701     +++ b/drivers/scsi/aacraid/src.c
2702     @@ -445,7 +445,7 @@ err_out:
2703     return -1;
2704    
2705     err_blink:
2706     - return (status > 16) & 0xFF;
2707     + return (status >> 16) & 0xFF;
2708     }
2709    
2710     /**
2711     diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
2712     index 5f66b6da65f2..b6d9e3104b89 100644
2713     --- a/drivers/scsi/qla2xxx/qla_init.c
2714     +++ b/drivers/scsi/qla2xxx/qla_init.c
2715     @@ -368,8 +368,8 @@ qla24xx_abort_sp_done(void *data, void *ptr, int res)
2716     srb_t *sp = (srb_t *)ptr;
2717     struct srb_iocb *abt = &sp->u.iocb_cmd;
2718    
2719     - del_timer(&sp->u.iocb_cmd.timer);
2720     - complete(&abt->u.abt.comp);
2721     + if (del_timer(&sp->u.iocb_cmd.timer))
2722     + complete(&abt->u.abt.comp);
2723     }
2724    
2725     static int
2726     diff --git a/drivers/soc/fsl/qbman/qman.c b/drivers/soc/fsl/qbman/qman.c
2727     index 2caacd9d2526..2cc82ed6433a 100644
2728     --- a/drivers/soc/fsl/qbman/qman.c
2729     +++ b/drivers/soc/fsl/qbman/qman.c
2730     @@ -2713,6 +2713,9 @@ static int qman_alloc_range(struct gen_pool *p, u32 *result, u32 cnt)
2731     {
2732     unsigned long addr;
2733    
2734     + if (!p)
2735     + return -ENODEV;
2736     +
2737     addr = gen_pool_alloc(p, cnt);
2738     if (!addr)
2739     return -ENOMEM;
2740     diff --git a/drivers/soc/fsl/qe/ucc.c b/drivers/soc/fsl/qe/ucc.c
2741     index c646d8713861..681f7d4b7724 100644
2742     --- a/drivers/soc/fsl/qe/ucc.c
2743     +++ b/drivers/soc/fsl/qe/ucc.c
2744     @@ -626,7 +626,7 @@ static u32 ucc_get_tdm_sync_shift(enum comm_dir mode, u32 tdm_num)
2745     {
2746     u32 shift;
2747    
2748     - shift = (mode == COMM_DIR_RX) ? RX_SYNC_SHIFT_BASE : RX_SYNC_SHIFT_BASE;
2749     + shift = (mode == COMM_DIR_RX) ? RX_SYNC_SHIFT_BASE : TX_SYNC_SHIFT_BASE;
2750     shift -= tdm_num * 2;
2751    
2752     return shift;
2753     diff --git a/drivers/staging/wilc1000/linux_wlan.c b/drivers/staging/wilc1000/linux_wlan.c
2754     index 07d6e4824a9d..2e5e3b368532 100644
2755     --- a/drivers/staging/wilc1000/linux_wlan.c
2756     +++ b/drivers/staging/wilc1000/linux_wlan.c
2757     @@ -1260,11 +1260,12 @@ int wilc_netdev_init(struct wilc **wilc, struct device *dev, int io_type,
2758     else
2759     strcpy(ndev->name, "p2p%d");
2760    
2761     - vif->idx = wl->vif_num;
2762     vif->wilc = *wilc;
2763     vif->ndev = ndev;
2764     wl->vif[i] = vif;
2765     wl->vif_num = i;
2766     + vif->idx = wl->vif_num;
2767     +
2768     ndev->netdev_ops = &wilc_netdev_ops;
2769    
2770     {
2771     diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
2772     index 25ae9b9895a9..dbe44e890c99 100644
2773     --- a/drivers/usb/class/cdc-acm.c
2774     +++ b/drivers/usb/class/cdc-acm.c
2775     @@ -333,17 +333,17 @@ static void acm_ctrl_irq(struct urb *urb)
2776    
2777     if (difference & ACM_CTRL_DSR)
2778     acm->iocount.dsr++;
2779     - if (difference & ACM_CTRL_BRK)
2780     - acm->iocount.brk++;
2781     - if (difference & ACM_CTRL_RI)
2782     - acm->iocount.rng++;
2783     if (difference & ACM_CTRL_DCD)
2784     acm->iocount.dcd++;
2785     - if (difference & ACM_CTRL_FRAMING)
2786     + if (newctrl & ACM_CTRL_BRK)
2787     + acm->iocount.brk++;
2788     + if (newctrl & ACM_CTRL_RI)
2789     + acm->iocount.rng++;
2790     + if (newctrl & ACM_CTRL_FRAMING)
2791     acm->iocount.frame++;
2792     - if (difference & ACM_CTRL_PARITY)
2793     + if (newctrl & ACM_CTRL_PARITY)
2794     acm->iocount.parity++;
2795     - if (difference & ACM_CTRL_OVERRUN)
2796     + if (newctrl & ACM_CTRL_OVERRUN)
2797     acm->iocount.overrun++;
2798     spin_unlock(&acm->read_lock);
2799    
2800     diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
2801     index 988240e3cb58..52fc2084b310 100644
2802     --- a/drivers/usb/core/devio.c
2803     +++ b/drivers/usb/core/devio.c
2804     @@ -1490,8 +1490,6 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
2805     u = 0;
2806     switch (uurb->type) {
2807     case USBDEVFS_URB_TYPE_CONTROL:
2808     - if (is_in)
2809     - allow_short = true;
2810     if (!usb_endpoint_xfer_control(&ep->desc))
2811     return -EINVAL;
2812     /* min 8 byte setup packet */
2813     @@ -1521,6 +1519,8 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
2814     is_in = 0;
2815     uurb->endpoint &= ~USB_DIR_IN;
2816     }
2817     + if (is_in)
2818     + allow_short = true;
2819     snoop(&ps->dev->dev, "control urb: bRequestType=%02x "
2820     "bRequest=%02x wValue=%04x "
2821     "wIndex=%04x wLength=%04x\n",
2822     diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
2823     index f221cb479e14..8e69150776f5 100644
2824     --- a/drivers/usb/dwc3/dwc3-omap.c
2825     +++ b/drivers/usb/dwc3/dwc3-omap.c
2826     @@ -512,15 +512,6 @@ static int dwc3_omap_probe(struct platform_device *pdev)
2827    
2828     /* check the DMA Status */
2829     reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG);
2830     - irq_set_status_flags(omap->irq, IRQ_NOAUTOEN);
2831     - ret = devm_request_threaded_irq(dev, omap->irq, dwc3_omap_interrupt,
2832     - dwc3_omap_interrupt_thread, IRQF_SHARED,
2833     - "dwc3-omap", omap);
2834     - if (ret) {
2835     - dev_err(dev, "failed to request IRQ #%d --> %d\n",
2836     - omap->irq, ret);
2837     - goto err1;
2838     - }
2839    
2840     ret = dwc3_omap_extcon_register(omap);
2841     if (ret < 0)
2842     @@ -532,8 +523,15 @@ static int dwc3_omap_probe(struct platform_device *pdev)
2843     goto err2;
2844     }
2845    
2846     + ret = devm_request_threaded_irq(dev, omap->irq, dwc3_omap_interrupt,
2847     + dwc3_omap_interrupt_thread, IRQF_SHARED,
2848     + "dwc3-omap", omap);
2849     + if (ret) {
2850     + dev_err(dev, "failed to request IRQ #%d --> %d\n",
2851     + omap->irq, ret);
2852     + goto err1;
2853     + }
2854     dwc3_omap_enable_irqs(omap);
2855     - enable_irq(omap->irq);
2856     return 0;
2857    
2858     err2:
2859     diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
2860     index d2fc237cd87a..fac9424940d4 100644
2861     --- a/drivers/usb/gadget/function/f_mass_storage.c
2862     +++ b/drivers/usb/gadget/function/f_mass_storage.c
2863     @@ -220,6 +220,8 @@
2864     #include <linux/usb/gadget.h>
2865     #include <linux/usb/composite.h>
2866    
2867     +#include <linux/nospec.h>
2868     +
2869     #include "configfs.h"
2870    
2871    
2872     @@ -3260,6 +3262,7 @@ static struct config_group *fsg_lun_make(struct config_group *group,
2873     fsg_opts = to_fsg_opts(&group->cg_item);
2874     if (num >= FSG_MAX_LUNS)
2875     return ERR_PTR(-ERANGE);
2876     + num = array_index_nospec(num, FSG_MAX_LUNS);
2877    
2878     mutex_lock(&fsg_opts->lock);
2879     if (fsg_opts->refcnt || fsg_opts->common->luns[num]) {
2880     diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
2881     index 45a03eff4db1..0f09ab5399f4 100644
2882     --- a/drivers/usb/host/xhci-hub.c
2883     +++ b/drivers/usb/host/xhci-hub.c
2884     @@ -366,7 +366,7 @@ int xhci_find_slot_id_by_port(struct usb_hcd *hcd, struct xhci_hcd *xhci,
2885    
2886     slot_id = 0;
2887     for (i = 0; i < MAX_HC_SLOTS; i++) {
2888     - if (!xhci->devs[i])
2889     + if (!xhci->devs[i] || !xhci->devs[i]->udev)
2890     continue;
2891     speed = xhci->devs[i]->udev->speed;
2892     if (((speed >= USB_SPEED_SUPER) == (hcd->speed >= HCD_USB3))
2893     diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c
2894     index 93fba9033b00..5984fb134cf4 100644
2895     --- a/drivers/usb/renesas_usbhs/mod_gadget.c
2896     +++ b/drivers/usb/renesas_usbhs/mod_gadget.c
2897     @@ -639,14 +639,11 @@ static int usbhsg_ep_disable(struct usb_ep *ep)
2898     struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
2899     struct usbhs_pipe *pipe;
2900     unsigned long flags;
2901     - int ret = 0;
2902    
2903     spin_lock_irqsave(&uep->lock, flags);
2904     pipe = usbhsg_uep_to_pipe(uep);
2905     - if (!pipe) {
2906     - ret = -EINVAL;
2907     + if (!pipe)
2908     goto out;
2909     - }
2910    
2911     usbhsg_pipe_disable(uep);
2912     usbhs_pipe_free(pipe);
2913     @@ -1085,7 +1082,6 @@ int usbhs_mod_gadget_probe(struct usbhs_priv *priv)
2914     ret = -ENOMEM;
2915     goto usbhs_mod_gadget_probe_err_gpriv;
2916     }
2917     - spin_lock_init(&uep->lock);
2918    
2919     gpriv->transceiver = usb_get_phy(USB_PHY_TYPE_UNDEFINED);
2920     dev_info(dev, "%stransceiver found\n",
2921     @@ -1135,6 +1131,7 @@ int usbhs_mod_gadget_probe(struct usbhs_priv *priv)
2922     uep->ep.name = uep->ep_name;
2923     uep->ep.ops = &usbhsg_ep_ops;
2924     INIT_LIST_HEAD(&uep->ep.ep_list);
2925     + spin_lock_init(&uep->lock);
2926    
2927     /* init DCP */
2928     if (usbhsg_is_dcp(uep)) {
2929     diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
2930     index c569b6454a9d..4c5625cb540c 100644
2931     --- a/drivers/vhost/vhost.c
2932     +++ b/drivers/vhost/vhost.c
2933     @@ -28,6 +28,7 @@
2934     #include <linux/module.h>
2935     #include <linux/sort.h>
2936     #include <linux/interval_tree_generic.h>
2937     +#include <linux/nospec.h>
2938    
2939     #include "vhost.h"
2940    
2941     @@ -1289,6 +1290,7 @@ long vhost_vring_ioctl(struct vhost_dev *d, int ioctl, void __user *argp)
2942     if (idx >= d->nvqs)
2943     return -ENOBUFS;
2944    
2945     + idx = array_index_nospec(idx, d->nvqs);
2946     vq = d->vqs[idx];
2947    
2948     mutex_lock(&vq->mutex);
2949     diff --git a/drivers/video/fbdev/efifb.c b/drivers/video/fbdev/efifb.c
2950     index 6f2e729a308f..f4b6d063a4b7 100644
2951     --- a/drivers/video/fbdev/efifb.c
2952     +++ b/drivers/video/fbdev/efifb.c
2953     @@ -375,7 +375,7 @@ static void efifb_fixup_resources(struct pci_dev *dev)
2954     if (!base)
2955     return;
2956    
2957     - for (i = 0; i < PCI_STD_RESOURCE_END; i++) {
2958     + for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
2959     struct resource *res = &dev->resource[i];
2960    
2961     if (!(res->flags & IORESOURCE_MEM))
2962     diff --git a/drivers/video/fbdev/pxa168fb.c b/drivers/video/fbdev/pxa168fb.c
2963     index def3a501acd6..d059d04c63ac 100644
2964     --- a/drivers/video/fbdev/pxa168fb.c
2965     +++ b/drivers/video/fbdev/pxa168fb.c
2966     @@ -712,7 +712,7 @@ static int pxa168fb_probe(struct platform_device *pdev)
2967     /*
2968     * enable controller clock
2969     */
2970     - clk_enable(fbi->clk);
2971     + clk_prepare_enable(fbi->clk);
2972    
2973     pxa168fb_set_par(info);
2974    
2975     @@ -767,7 +767,7 @@ static int pxa168fb_probe(struct platform_device *pdev)
2976     failed_free_cmap:
2977     fb_dealloc_cmap(&info->cmap);
2978     failed_free_clk:
2979     - clk_disable(fbi->clk);
2980     + clk_disable_unprepare(fbi->clk);
2981     failed_free_fbmem:
2982     dma_free_coherent(fbi->dev, info->fix.smem_len,
2983     info->screen_base, fbi->fb_start_dma);
2984     @@ -807,7 +807,7 @@ static int pxa168fb_remove(struct platform_device *pdev)
2985     dma_free_wc(fbi->dev, PAGE_ALIGN(info->fix.smem_len),
2986     info->screen_base, info->fix.smem_start);
2987    
2988     - clk_disable(fbi->clk);
2989     + clk_disable_unprepare(fbi->clk);
2990    
2991     framebuffer_release(info);
2992    
2993     diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
2994     index 2b96ca68dc10..5feaef9bcbda 100644
2995     --- a/fs/btrfs/extent_io.c
2996     +++ b/fs/btrfs/extent_io.c
2997     @@ -4377,6 +4377,123 @@ static struct extent_map *get_extent_skip_holes(struct inode *inode,
2998     return NULL;
2999     }
3000    
3001     +/*
3002     + * To cache previous fiemap extent
3003     + *
3004     + * Will be used for merging fiemap extent
3005     + */
3006     +struct fiemap_cache {
3007     + u64 offset;
3008     + u64 phys;
3009     + u64 len;
3010     + u32 flags;
3011     + bool cached;
3012     +};
3013     +
3014     +/*
3015     + * Helper to submit fiemap extent.
3016     + *
3017     + * Will try to merge current fiemap extent specified by @offset, @phys,
3018     + * @len and @flags with cached one.
3019     + * And only when we fails to merge, cached one will be submitted as
3020     + * fiemap extent.
3021     + *
3022     + * Return value is the same as fiemap_fill_next_extent().
3023     + */
3024     +static int emit_fiemap_extent(struct fiemap_extent_info *fieinfo,
3025     + struct fiemap_cache *cache,
3026     + u64 offset, u64 phys, u64 len, u32 flags)
3027     +{
3028     + int ret = 0;
3029     +
3030     + if (!cache->cached)
3031     + goto assign;
3032     +
3033     + /*
3034     + * Sanity check, extent_fiemap() should have ensured that new
3035     + * fiemap extent won't overlap with cahced one.
3036     + * Not recoverable.
3037     + *
3038     + * NOTE: Physical address can overlap, due to compression
3039     + */
3040     + if (cache->offset + cache->len > offset) {
3041     + WARN_ON(1);
3042     + return -EINVAL;
3043     + }
3044     +
3045     + /*
3046     + * Only merges fiemap extents if
3047     + * 1) Their logical addresses are continuous
3048     + *
3049     + * 2) Their physical addresses are continuous
3050     + * So truly compressed (physical size smaller than logical size)
3051     + * extents won't get merged with each other
3052     + *
3053     + * 3) Share same flags except FIEMAP_EXTENT_LAST
3054     + * So regular extent won't get merged with prealloc extent
3055     + */
3056     + if (cache->offset + cache->len == offset &&
3057     + cache->phys + cache->len == phys &&
3058     + (cache->flags & ~FIEMAP_EXTENT_LAST) ==
3059     + (flags & ~FIEMAP_EXTENT_LAST)) {
3060     + cache->len += len;
3061     + cache->flags |= flags;
3062     + goto try_submit_last;
3063     + }
3064     +
3065     + /* Not mergeable, need to submit cached one */
3066     + ret = fiemap_fill_next_extent(fieinfo, cache->offset, cache->phys,
3067     + cache->len, cache->flags);
3068     + cache->cached = false;
3069     + if (ret)
3070     + return ret;
3071     +assign:
3072     + cache->cached = true;
3073     + cache->offset = offset;
3074     + cache->phys = phys;
3075     + cache->len = len;
3076     + cache->flags = flags;
3077     +try_submit_last:
3078     + if (cache->flags & FIEMAP_EXTENT_LAST) {
3079     + ret = fiemap_fill_next_extent(fieinfo, cache->offset,
3080     + cache->phys, cache->len, cache->flags);
3081     + cache->cached = false;
3082     + }
3083     + return ret;
3084     +}
3085     +
3086     +/*
3087     + * Sanity check for fiemap cache
3088     + *
3089     + * All fiemap cache should be submitted by emit_fiemap_extent()
3090     + * Iteration should be terminated either by last fiemap extent or
3091     + * fieinfo->fi_extents_max.
3092     + * So no cached fiemap should exist.
3093     + */
3094     +static int check_fiemap_cache(struct btrfs_fs_info *fs_info,
3095     + struct fiemap_extent_info *fieinfo,
3096     + struct fiemap_cache *cache)
3097     +{
3098     + int ret;
3099     +
3100     + if (!cache->cached)
3101     + return 0;
3102     +
3103     + /* Small and recoverbale problem, only to info developer */
3104     +#ifdef CONFIG_BTRFS_DEBUG
3105     + WARN_ON(1);
3106     +#endif
3107     + btrfs_warn(fs_info,
3108     + "unhandled fiemap cache detected: offset=%llu phys=%llu len=%llu flags=0x%x",
3109     + cache->offset, cache->phys, cache->len, cache->flags);
3110     + ret = fiemap_fill_next_extent(fieinfo, cache->offset, cache->phys,
3111     + cache->len, cache->flags);
3112     + cache->cached = false;
3113     + if (ret > 0)
3114     + ret = 0;
3115     + return ret;
3116     +}
3117     +
3118     int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
3119     __u64 start, __u64 len, get_extent_t *get_extent)
3120     {
3121     @@ -4394,6 +4511,7 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
3122     struct extent_state *cached_state = NULL;
3123     struct btrfs_path *path;
3124     struct btrfs_root *root = BTRFS_I(inode)->root;
3125     + struct fiemap_cache cache = { 0 };
3126     int end = 0;
3127     u64 em_start = 0;
3128     u64 em_len = 0;
3129     @@ -4573,8 +4691,8 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
3130     flags |= FIEMAP_EXTENT_LAST;
3131     end = 1;
3132     }
3133     - ret = fiemap_fill_next_extent(fieinfo, em_start, disko,
3134     - em_len, flags);
3135     + ret = emit_fiemap_extent(fieinfo, &cache, em_start, disko,
3136     + em_len, flags);
3137     if (ret) {
3138     if (ret == 1)
3139     ret = 0;
3140     @@ -4582,6 +4700,8 @@ int extent_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
3141     }
3142     }
3143     out_free:
3144     + if (!ret)
3145     + ret = check_fiemap_cache(root->fs_info, fieinfo, &cache);
3146     free_extent_map(em);
3147     out:
3148     btrfs_free_path(path);
3149     diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
3150     index bd036557c6bc..5ebdb58079e1 100644
3151     --- a/fs/btrfs/inode.c
3152     +++ b/fs/btrfs/inode.c
3153     @@ -2966,7 +2966,7 @@ static int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent)
3154    
3155     ret = test_range_bit(io_tree, ordered_extent->file_offset,
3156     ordered_extent->file_offset + ordered_extent->len - 1,
3157     - EXTENT_DEFRAG, 1, cached_state);
3158     + EXTENT_DEFRAG, 0, cached_state);
3159     if (ret) {
3160     u64 last_snapshot = btrfs_root_last_snapshot(&root->root_item);
3161     if (0 && last_snapshot >= BTRFS_I(inode)->generation)
3162     diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
3163     index c8d2eec6596b..79dc3ee1de58 100644
3164     --- a/fs/btrfs/send.c
3165     +++ b/fs/btrfs/send.c
3166     @@ -5165,15 +5165,12 @@ static int is_extent_unchanged(struct send_ctx *sctx,
3167     goto out;
3168     }
3169    
3170     - right_disknr = btrfs_file_extent_disk_bytenr(eb, ei);
3171     if (right_type == BTRFS_FILE_EXTENT_INLINE) {
3172     right_len = btrfs_file_extent_inline_len(eb, slot, ei);
3173     right_len = PAGE_ALIGN(right_len);
3174     } else {
3175     right_len = btrfs_file_extent_num_bytes(eb, ei);
3176     }
3177     - right_offset = btrfs_file_extent_offset(eb, ei);
3178     - right_gen = btrfs_file_extent_generation(eb, ei);
3179    
3180     /*
3181     * Are we at extent 8? If yes, we know the extent is changed.
3182     @@ -5198,6 +5195,10 @@ static int is_extent_unchanged(struct send_ctx *sctx,
3183     goto out;
3184     }
3185    
3186     + right_disknr = btrfs_file_extent_disk_bytenr(eb, ei);
3187     + right_offset = btrfs_file_extent_offset(eb, ei);
3188     + right_gen = btrfs_file_extent_generation(eb, ei);
3189     +
3190     left_offset_fixed = left_offset;
3191     if (key.offset < ekey->offset) {
3192     /* Fix the right offset for 2a and 7. */
3193     diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
3194     index 2026885702a2..3fb95e3d20d6 100644
3195     --- a/fs/cachefiles/namei.c
3196     +++ b/fs/cachefiles/namei.c
3197     @@ -340,7 +340,7 @@ try_again:
3198     trap = lock_rename(cache->graveyard, dir);
3199    
3200     /* do some checks before getting the grave dentry */
3201     - if (rep->d_parent != dir) {
3202     + if (rep->d_parent != dir || IS_DEADDIR(d_inode(rep))) {
3203     /* the entry was probably culled when we dropped the parent dir
3204     * lock */
3205     unlock_rename(cache->graveyard, dir);
3206     diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
3207     index a012f70bba5c..77a18fe10805 100644
3208     --- a/fs/cifs/inode.c
3209     +++ b/fs/cifs/inode.c
3210     @@ -704,7 +704,7 @@ cgfi_exit:
3211     /* Simple function to return a 64 bit hash of string. Rarely called */
3212     static __u64 simple_hashstr(const char *str)
3213     {
3214     - const __u64 hash_mult = 1125899906842597L; /* a big enough prime */
3215     + const __u64 hash_mult = 1125899906842597ULL; /* a big enough prime */
3216     __u64 hash = 0;
3217    
3218     while (*str)
3219     diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
3220     index 8add4e8bab99..af719d93507e 100644
3221     --- a/fs/f2fs/dir.c
3222     +++ b/fs/f2fs/dir.c
3223     @@ -212,13 +212,9 @@ static struct f2fs_dir_entry *find_in_level(struct inode *dir,
3224     f2fs_put_page(dentry_page, 0);
3225     }
3226    
3227     - /* This is to increase the speed of f2fs_create */
3228     - if (!de && room) {
3229     - F2FS_I(dir)->task = current;
3230     - if (F2FS_I(dir)->chash != namehash) {
3231     - F2FS_I(dir)->chash = namehash;
3232     - F2FS_I(dir)->clevel = level;
3233     - }
3234     + if (!de && room && F2FS_I(dir)->chash != namehash) {
3235     + F2FS_I(dir)->chash = namehash;
3236     + F2FS_I(dir)->clevel = level;
3237     }
3238    
3239     return de;
3240     @@ -259,6 +255,9 @@ struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
3241     break;
3242     }
3243     out:
3244     + /* This is to increase the speed of f2fs_create */
3245     + if (!de)
3246     + F2FS_I(dir)->task = current;
3247     return de;
3248     }
3249    
3250     diff --git a/fs/fat/fatent.c b/fs/fat/fatent.c
3251     index 3b7644e43796..a9cad9b60790 100644
3252     --- a/fs/fat/fatent.c
3253     +++ b/fs/fat/fatent.c
3254     @@ -681,6 +681,7 @@ int fat_count_free_clusters(struct super_block *sb)
3255     if (ops->ent_get(&fatent) == FAT_ENT_FREE)
3256     free++;
3257     } while (fat_ent_next(sbi, &fatent));
3258     + cond_resched();
3259     }
3260     sbi->free_clusters = free;
3261     sbi->free_clus_valid = 1;
3262     diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
3263     index 785fcc29d85d..5729d55da67d 100644
3264     --- a/fs/ocfs2/dlmglue.c
3265     +++ b/fs/ocfs2/dlmglue.c
3266     @@ -2599,6 +2599,10 @@ void ocfs2_inode_unlock_tracker(struct inode *inode,
3267     struct ocfs2_lock_res *lockres;
3268    
3269     lockres = &OCFS2_I(inode)->ip_inode_lockres;
3270     + /* had_lock means that the currect process already takes the cluster
3271     + * lock previously. If had_lock is 1, we have nothing to do here, and
3272     + * it will get unlocked where we got the lock.
3273     + */
3274     if (!had_lock) {
3275     ocfs2_remove_holder(lockres, oh);
3276     ocfs2_inode_unlock(inode, ex);
3277     diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
3278     index 03f6ff249edb..01932763b4d1 100644
3279     --- a/fs/ocfs2/xattr.c
3280     +++ b/fs/ocfs2/xattr.c
3281     @@ -1330,20 +1330,21 @@ static int ocfs2_xattr_get(struct inode *inode,
3282     void *buffer,
3283     size_t buffer_size)
3284     {
3285     - int ret;
3286     + int ret, had_lock;
3287     struct buffer_head *di_bh = NULL;
3288     + struct ocfs2_lock_holder oh;
3289    
3290     - ret = ocfs2_inode_lock(inode, &di_bh, 0);
3291     - if (ret < 0) {
3292     - mlog_errno(ret);
3293     - return ret;
3294     + had_lock = ocfs2_inode_lock_tracker(inode, &di_bh, 0, &oh);
3295     + if (had_lock < 0) {
3296     + mlog_errno(had_lock);
3297     + return had_lock;
3298     }
3299     down_read(&OCFS2_I(inode)->ip_xattr_sem);
3300     ret = ocfs2_xattr_get_nolock(inode, di_bh, name_index,
3301     name, buffer, buffer_size);
3302     up_read(&OCFS2_I(inode)->ip_xattr_sem);
3303    
3304     - ocfs2_inode_unlock(inode, 0);
3305     + ocfs2_inode_unlock_tracker(inode, 0, &oh, had_lock);
3306    
3307     brelse(di_bh);
3308    
3309     @@ -3539,11 +3540,12 @@ int ocfs2_xattr_set(struct inode *inode,
3310     {
3311     struct buffer_head *di_bh = NULL;
3312     struct ocfs2_dinode *di;
3313     - int ret, credits, ref_meta = 0, ref_credits = 0;
3314     + int ret, credits, had_lock, ref_meta = 0, ref_credits = 0;
3315     struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
3316     struct inode *tl_inode = osb->osb_tl_inode;
3317     struct ocfs2_xattr_set_ctxt ctxt = { NULL, NULL, NULL, };
3318     struct ocfs2_refcount_tree *ref_tree = NULL;
3319     + struct ocfs2_lock_holder oh;
3320    
3321     struct ocfs2_xattr_info xi = {
3322     .xi_name_index = name_index,
3323     @@ -3574,8 +3576,9 @@ int ocfs2_xattr_set(struct inode *inode,
3324     return -ENOMEM;
3325     }
3326    
3327     - ret = ocfs2_inode_lock(inode, &di_bh, 1);
3328     - if (ret < 0) {
3329     + had_lock = ocfs2_inode_lock_tracker(inode, &di_bh, 1, &oh);
3330     + if (had_lock < 0) {
3331     + ret = had_lock;
3332     mlog_errno(ret);
3333     goto cleanup_nolock;
3334     }
3335     @@ -3672,7 +3675,7 @@ cleanup:
3336     if (ret)
3337     mlog_errno(ret);
3338     }
3339     - ocfs2_inode_unlock(inode, 1);
3340     + ocfs2_inode_unlock_tracker(inode, 1, &oh, had_lock);
3341     cleanup_nolock:
3342     brelse(di_bh);
3343     brelse(xbs.xattr_bh);
3344     diff --git a/fs/orangefs/xattr.c b/fs/orangefs/xattr.c
3345     index 237c9c04dc3b..a34b25be39c5 100644
3346     --- a/fs/orangefs/xattr.c
3347     +++ b/fs/orangefs/xattr.c
3348     @@ -76,7 +76,7 @@ ssize_t orangefs_inode_getxattr(struct inode *inode, const char *name,
3349     if (S_ISLNK(inode->i_mode))
3350     return -EOPNOTSUPP;
3351    
3352     - if (strlen(name) > ORANGEFS_MAX_XATTR_NAMELEN)
3353     + if (strlen(name) >= ORANGEFS_MAX_XATTR_NAMELEN)
3354     return -EINVAL;
3355    
3356     fsuid = from_kuid(&init_user_ns, current_fsuid());
3357     @@ -169,7 +169,7 @@ static int orangefs_inode_removexattr(struct inode *inode, const char *name,
3358     struct orangefs_kernel_op_s *new_op = NULL;
3359     int ret = -ENOMEM;
3360    
3361     - if (strlen(name) > ORANGEFS_MAX_XATTR_NAMELEN)
3362     + if (strlen(name) >= ORANGEFS_MAX_XATTR_NAMELEN)
3363     return -EINVAL;
3364    
3365     down_write(&orangefs_inode->xattr_sem);
3366     @@ -233,7 +233,7 @@ int orangefs_inode_setxattr(struct inode *inode, const char *name,
3367    
3368     if (size > ORANGEFS_MAX_XATTR_VALUELEN)
3369     return -EINVAL;
3370     - if (strlen(name) > ORANGEFS_MAX_XATTR_NAMELEN)
3371     + if (strlen(name) >= ORANGEFS_MAX_XATTR_NAMELEN)
3372     return -EINVAL;
3373    
3374     internal_flag = convert_to_internal_xattr_flags(flags);
3375     diff --git a/fs/ufs/inode.c b/fs/ufs/inode.c
3376     index a2760a2869f4..0f22c036699a 100644
3377     --- a/fs/ufs/inode.c
3378     +++ b/fs/ufs/inode.c
3379     @@ -846,6 +846,7 @@ void ufs_evict_inode(struct inode * inode)
3380     inode->i_size = 0;
3381     if (inode->i_blocks)
3382     ufs_truncate_blocks(inode);
3383     + ufs_update_inode(inode, inode_needs_sync(inode));
3384     }
3385    
3386     invalidate_inode_buffers(inode);
3387     diff --git a/fs/xfs/libxfs/xfs_trans_resv.c b/fs/xfs/libxfs/xfs_trans_resv.c
3388     index b456cca1bfb2..c0ecdec8e0a9 100644
3389     --- a/fs/xfs/libxfs/xfs_trans_resv.c
3390     +++ b/fs/xfs/libxfs/xfs_trans_resv.c
3391     @@ -232,8 +232,6 @@ xfs_calc_write_reservation(
3392     * the super block to reflect the freed blocks: sector size
3393     * worst case split in allocation btrees per extent assuming 4 extents:
3394     * 4 exts * 2 trees * (2 * max depth - 1) * block size
3395     - * the inode btree: max depth * blocksize
3396     - * the allocation btrees: 2 trees * (max depth - 1) * block size
3397     */
3398     STATIC uint
3399     xfs_calc_itruncate_reservation(
3400     @@ -245,12 +243,7 @@ xfs_calc_itruncate_reservation(
3401     XFS_FSB_TO_B(mp, 1))),
3402     (xfs_calc_buf_res(9, mp->m_sb.sb_sectsize) +
3403     xfs_calc_buf_res(xfs_allocfree_log_count(mp, 4),
3404     - XFS_FSB_TO_B(mp, 1)) +
3405     - xfs_calc_buf_res(5, 0) +
3406     - xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1),
3407     - XFS_FSB_TO_B(mp, 1)) +
3408     - xfs_calc_buf_res(2 + mp->m_ialloc_blks +
3409     - mp->m_in_maxlevels, 0)));
3410     + XFS_FSB_TO_B(mp, 1))));
3411     }
3412    
3413     /*
3414     diff --git a/include/linux/elevator.h b/include/linux/elevator.h
3415     index e7f358d2e5fc..eaa58c0f894b 100644
3416     --- a/include/linux/elevator.h
3417     +++ b/include/linux/elevator.h
3418     @@ -102,7 +102,7 @@ struct elevator_type
3419     struct module *elevator_owner;
3420    
3421     /* managed by elevator core */
3422     - char icq_cache_name[ELV_NAME_MAX + 5]; /* elvname + "_io_cq" */
3423     + char icq_cache_name[ELV_NAME_MAX + 6]; /* elvname + "_io_cq" */
3424     struct list_head list;
3425     };
3426    
3427     diff --git a/include/linux/iio/buffer-dma.h b/include/linux/iio/buffer-dma.h
3428     index 767467d886de..67c75372b691 100644
3429     --- a/include/linux/iio/buffer-dma.h
3430     +++ b/include/linux/iio/buffer-dma.h
3431     @@ -141,7 +141,7 @@ int iio_dma_buffer_read(struct iio_buffer *buffer, size_t n,
3432     char __user *user_buffer);
3433     size_t iio_dma_buffer_data_available(struct iio_buffer *buffer);
3434     int iio_dma_buffer_set_bytes_per_datum(struct iio_buffer *buffer, size_t bpd);
3435     -int iio_dma_buffer_set_length(struct iio_buffer *buffer, int length);
3436     +int iio_dma_buffer_set_length(struct iio_buffer *buffer, unsigned int length);
3437     int iio_dma_buffer_request_update(struct iio_buffer *buffer);
3438    
3439     int iio_dma_buffer_init(struct iio_dma_buffer_queue *queue,
3440     diff --git a/include/linux/posix-timers.h b/include/linux/posix-timers.h
3441     index 62d44c176071..e4b8678183f5 100644
3442     --- a/include/linux/posix-timers.h
3443     +++ b/include/linux/posix-timers.h
3444     @@ -65,8 +65,8 @@ struct k_itimer {
3445     spinlock_t it_lock;
3446     clockid_t it_clock; /* which timer type */
3447     timer_t it_id; /* timer id */
3448     - int it_overrun; /* overrun on pending signal */
3449     - int it_overrun_last; /* overrun on last delivered signal */
3450     + s64 it_overrun; /* overrun on pending signal */
3451     + s64 it_overrun_last; /* overrun on last delivered signal */
3452     int it_requeue_pending; /* waiting to requeue this timer */
3453     #define REQUEUE_PENDING 1
3454     int it_sigev_notify; /* notify word of sigevent struct */
3455     diff --git a/init/main.c b/init/main.c
3456     index 4313772d634a..3c7f71d8e704 100644
3457     --- a/init/main.c
3458     +++ b/init/main.c
3459     @@ -915,7 +915,7 @@ static int try_to_run_init_process(const char *init_filename)
3460    
3461     static noinline void __init kernel_init_freeable(void);
3462    
3463     -#if defined(CONFIG_DEBUG_RODATA) || defined(CONFIG_SET_MODULE_RONX)
3464     +#if defined(CONFIG_DEBUG_RODATA) || defined(CONFIG_DEBUG_SET_MODULE_RONX)
3465     bool rodata_enabled __ro_after_init = true;
3466     static int __init set_debug_rodata(char *str)
3467     {
3468     diff --git a/kernel/events/core.c b/kernel/events/core.c
3469     index 95bd00d9f2c3..1af0bbf20984 100644
3470     --- a/kernel/events/core.c
3471     +++ b/kernel/events/core.c
3472     @@ -4331,7 +4331,9 @@ EXPORT_SYMBOL_GPL(perf_event_read_value);
3473     static int __perf_read_group_add(struct perf_event *leader,
3474     u64 read_format, u64 *values)
3475     {
3476     + struct perf_event_context *ctx = leader->ctx;
3477     struct perf_event *sub;
3478     + unsigned long flags;
3479     int n = 1; /* skip @nr */
3480     int ret;
3481    
3482     @@ -4361,12 +4363,15 @@ static int __perf_read_group_add(struct perf_event *leader,
3483     if (read_format & PERF_FORMAT_ID)
3484     values[n++] = primary_event_id(leader);
3485    
3486     + raw_spin_lock_irqsave(&ctx->lock, flags);
3487     +
3488     list_for_each_entry(sub, &leader->sibling_list, group_entry) {
3489     values[n++] += perf_event_count(sub);
3490     if (read_format & PERF_FORMAT_ID)
3491     values[n++] = primary_event_id(sub);
3492     }
3493    
3494     + raw_spin_unlock_irqrestore(&ctx->lock, flags);
3495     return 0;
3496     }
3497    
3498     @@ -7737,6 +7742,8 @@ void perf_tp_event(u16 event_type, u64 count, void *record, int entry_size,
3499     goto unlock;
3500    
3501     list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
3502     + if (event->cpu != smp_processor_id())
3503     + continue;
3504     if (event->attr.type != PERF_TYPE_TRACEPOINT)
3505     continue;
3506     if (event->attr.config != entry->type)
3507     diff --git a/kernel/futex.c b/kernel/futex.c
3508     index c3ea6f2a6997..053d7be08be5 100644
3509     --- a/kernel/futex.c
3510     +++ b/kernel/futex.c
3511     @@ -1467,8 +1467,16 @@ static int futex_atomic_op_inuser(unsigned int encoded_op, u32 __user *uaddr)
3512     int oldval, ret;
3513    
3514     if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) {
3515     - if (oparg < 0 || oparg > 31)
3516     - return -EINVAL;
3517     + if (oparg < 0 || oparg > 31) {
3518     + char comm[sizeof(current->comm)];
3519     + /*
3520     + * kill this print and return -EINVAL when userspace
3521     + * is sane again
3522     + */
3523     + pr_info_ratelimited("futex_wake_op: %s tries to shift op by %d; fix this program\n",
3524     + get_task_comm(comm, current), oparg);
3525     + oparg &= 31;
3526     + }
3527     oparg = 1 << oparg;
3528     }
3529    
3530     diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
3531     index f81adb476c03..5ad109ccec35 100644
3532     --- a/kernel/sched/fair.c
3533     +++ b/kernel/sched/fair.c
3534     @@ -3976,9 +3976,13 @@ static void throttle_cfs_rq(struct cfs_rq *cfs_rq)
3535    
3536     /*
3537     * Add to the _head_ of the list, so that an already-started
3538     - * distribute_cfs_runtime will not see us
3539     + * distribute_cfs_runtime will not see us. If disribute_cfs_runtime is
3540     + * not running add to the tail so that later runqueues don't get starved.
3541     */
3542     - list_add_rcu(&cfs_rq->throttled_list, &cfs_b->throttled_cfs_rq);
3543     + if (cfs_b->distribute_running)
3544     + list_add_rcu(&cfs_rq->throttled_list, &cfs_b->throttled_cfs_rq);
3545     + else
3546     + list_add_tail_rcu(&cfs_rq->throttled_list, &cfs_b->throttled_cfs_rq);
3547    
3548     /*
3549     * If we're the first throttled task, make sure the bandwidth
3550     @@ -4121,14 +4125,16 @@ static int do_sched_cfs_period_timer(struct cfs_bandwidth *cfs_b, int overrun)
3551     * in us over-using our runtime if it is all used during this loop, but
3552     * only by limited amounts in that extreme case.
3553     */
3554     - while (throttled && cfs_b->runtime > 0) {
3555     + while (throttled && cfs_b->runtime > 0 && !cfs_b->distribute_running) {
3556     runtime = cfs_b->runtime;
3557     + cfs_b->distribute_running = 1;
3558     raw_spin_unlock(&cfs_b->lock);
3559     /* we can't nest cfs_b->lock while distributing bandwidth */
3560     runtime = distribute_cfs_runtime(cfs_b, runtime,
3561     runtime_expires);
3562     raw_spin_lock(&cfs_b->lock);
3563    
3564     + cfs_b->distribute_running = 0;
3565     throttled = !list_empty(&cfs_b->throttled_cfs_rq);
3566    
3567     cfs_b->runtime -= min(runtime, cfs_b->runtime);
3568     @@ -4239,6 +4245,11 @@ static void do_sched_cfs_slack_timer(struct cfs_bandwidth *cfs_b)
3569    
3570     /* confirm we're still not at a refresh boundary */
3571     raw_spin_lock(&cfs_b->lock);
3572     + if (cfs_b->distribute_running) {
3573     + raw_spin_unlock(&cfs_b->lock);
3574     + return;
3575     + }
3576     +
3577     if (runtime_refresh_within(cfs_b, min_bandwidth_expiration)) {
3578     raw_spin_unlock(&cfs_b->lock);
3579     return;
3580     @@ -4248,6 +4259,9 @@ static void do_sched_cfs_slack_timer(struct cfs_bandwidth *cfs_b)
3581     runtime = cfs_b->runtime;
3582    
3583     expires = cfs_b->runtime_expires;
3584     + if (runtime)
3585     + cfs_b->distribute_running = 1;
3586     +
3587     raw_spin_unlock(&cfs_b->lock);
3588    
3589     if (!runtime)
3590     @@ -4258,6 +4272,7 @@ static void do_sched_cfs_slack_timer(struct cfs_bandwidth *cfs_b)
3591     raw_spin_lock(&cfs_b->lock);
3592     if (expires == cfs_b->runtime_expires)
3593     cfs_b->runtime -= min(runtime, cfs_b->runtime);
3594     + cfs_b->distribute_running = 0;
3595     raw_spin_unlock(&cfs_b->lock);
3596     }
3597    
3598     @@ -4366,6 +4381,7 @@ void init_cfs_bandwidth(struct cfs_bandwidth *cfs_b)
3599     cfs_b->period_timer.function = sched_cfs_period_timer;
3600     hrtimer_init(&cfs_b->slack_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
3601     cfs_b->slack_timer.function = sched_cfs_slack_timer;
3602     + cfs_b->distribute_running = 0;
3603     }
3604    
3605     static void init_cfs_rq_runtime(struct cfs_rq *cfs_rq)
3606     diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
3607     index 923cc35e8490..ec6e838e991a 100644
3608     --- a/kernel/sched/sched.h
3609     +++ b/kernel/sched/sched.h
3610     @@ -255,6 +255,8 @@ struct cfs_bandwidth {
3611     /* statistics */
3612     int nr_periods, nr_throttled;
3613     u64 throttled_time;
3614     +
3615     + bool distribute_running;
3616     #endif
3617     };
3618    
3619     diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
3620     index 39008d78927a..21a27bb73587 100644
3621     --- a/kernel/time/posix-cpu-timers.c
3622     +++ b/kernel/time/posix-cpu-timers.c
3623     @@ -103,7 +103,7 @@ static void bump_cpu_timer(struct k_itimer *timer,
3624     continue;
3625    
3626     timer->it.cpu.expires += incr;
3627     - timer->it_overrun += 1 << i;
3628     + timer->it_overrun += 1LL << i;
3629     delta -= incr;
3630     }
3631     }
3632     diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
3633     index fc7c37ad90a0..0e6ed2e7d066 100644
3634     --- a/kernel/time/posix-timers.c
3635     +++ b/kernel/time/posix-timers.c
3636     @@ -355,6 +355,17 @@ static __init int init_posix_timers(void)
3637    
3638     __initcall(init_posix_timers);
3639    
3640     +/*
3641     + * The siginfo si_overrun field and the return value of timer_getoverrun(2)
3642     + * are of type int. Clamp the overrun value to INT_MAX
3643     + */
3644     +static inline int timer_overrun_to_int(struct k_itimer *timr, int baseval)
3645     +{
3646     + s64 sum = timr->it_overrun_last + (s64)baseval;
3647     +
3648     + return sum > (s64)INT_MAX ? INT_MAX : (int)sum;
3649     +}
3650     +
3651     static void schedule_next_timer(struct k_itimer *timr)
3652     {
3653     struct hrtimer *timer = &timr->it.real.timer;
3654     @@ -362,12 +373,11 @@ static void schedule_next_timer(struct k_itimer *timr)
3655     if (timr->it.real.interval.tv64 == 0)
3656     return;
3657    
3658     - timr->it_overrun += (unsigned int) hrtimer_forward(timer,
3659     - timer->base->get_time(),
3660     - timr->it.real.interval);
3661     + timr->it_overrun += hrtimer_forward(timer, timer->base->get_time(),
3662     + timr->it.real.interval);
3663    
3664     timr->it_overrun_last = timr->it_overrun;
3665     - timr->it_overrun = -1;
3666     + timr->it_overrun = -1LL;
3667     ++timr->it_requeue_pending;
3668     hrtimer_restart(timer);
3669     }
3670     @@ -396,7 +406,7 @@ void do_schedule_next_timer(struct siginfo *info)
3671     else
3672     schedule_next_timer(timr);
3673    
3674     - info->si_overrun += timr->it_overrun_last;
3675     + info->si_overrun = timer_overrun_to_int(timr, info->si_overrun);
3676     }
3677    
3678     if (timr)
3679     @@ -491,8 +501,7 @@ static enum hrtimer_restart posix_timer_fn(struct hrtimer *timer)
3680     now = ktime_add(now, kj);
3681     }
3682     #endif
3683     - timr->it_overrun += (unsigned int)
3684     - hrtimer_forward(timer, now,
3685     + timr->it_overrun += hrtimer_forward(timer, now,
3686     timr->it.real.interval);
3687     ret = HRTIMER_RESTART;
3688     ++timr->it_requeue_pending;
3689     @@ -633,7 +642,7 @@ SYSCALL_DEFINE3(timer_create, const clockid_t, which_clock,
3690     it_id_set = IT_ID_SET;
3691     new_timer->it_id = (timer_t) new_timer_id;
3692     new_timer->it_clock = which_clock;
3693     - new_timer->it_overrun = -1;
3694     + new_timer->it_overrun = -1LL;
3695    
3696     if (timer_event_spec) {
3697     if (copy_from_user(&event, timer_event_spec, sizeof (event))) {
3698     @@ -762,7 +771,7 @@ common_timer_get(struct k_itimer *timr, struct itimerspec *cur_setting)
3699     */
3700     if (iv.tv64 && (timr->it_requeue_pending & REQUEUE_PENDING ||
3701     timr->it_sigev_notify == SIGEV_NONE))
3702     - timr->it_overrun += (unsigned int) hrtimer_forward(timer, now, iv);
3703     + timr->it_overrun += hrtimer_forward(timer, now, iv);
3704    
3705     remaining = __hrtimer_expires_remaining_adjusted(timer, now);
3706     /* Return 0 only, when the timer is expired and not pending */
3707     @@ -824,7 +833,7 @@ SYSCALL_DEFINE1(timer_getoverrun, timer_t, timer_id)
3708     if (!timr)
3709     return -EINVAL;
3710    
3711     - overrun = timr->it_overrun_last;
3712     + overrun = timer_overrun_to_int(timr, 0);
3713     unlock_timer(timr, flags);
3714    
3715     return overrun;
3716     diff --git a/lib/test_bpf.c b/lib/test_bpf.c
3717     index 1586dfdea809..960d4d627361 100644
3718     --- a/lib/test_bpf.c
3719     +++ b/lib/test_bpf.c
3720     @@ -4874,7 +4874,7 @@ static struct bpf_test tests[] = {
3721     {
3722     "BPF_MAXINSNS: Jump, gap, jump, ...",
3723     { },
3724     -#ifdef CONFIG_BPF_JIT_ALWAYS_ON
3725     +#if defined(CONFIG_BPF_JIT_ALWAYS_ON) && defined(CONFIG_X86)
3726     CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
3727     #else
3728     CLASSIC | FLAG_NO_DATA,
3729     diff --git a/mm/frame_vector.c b/mm/frame_vector.c
3730     index 375a103d7a56..d73eed0443f6 100644
3731     --- a/mm/frame_vector.c
3732     +++ b/mm/frame_vector.c
3733     @@ -61,8 +61,10 @@ int get_vaddr_frames(unsigned long start, unsigned int nr_frames,
3734     * get_user_pages_longterm() and disallow it for filesystem-dax
3735     * mappings.
3736     */
3737     - if (vma_is_fsdax(vma))
3738     - return -EOPNOTSUPP;
3739     + if (vma_is_fsdax(vma)) {
3740     + ret = -EOPNOTSUPP;
3741     + goto out;
3742     + }
3743    
3744     if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) {
3745     vec->got_ref = true;
3746     diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
3747     index c9f715b2917f..0f962cc3f1bf 100644
3748     --- a/mm/memory_hotplug.c
3749     +++ b/mm/memory_hotplug.c
3750     @@ -1508,7 +1508,7 @@ int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn,
3751     while ((i < MAX_ORDER_NR_PAGES) &&
3752     !pfn_valid_within(pfn + i))
3753     i++;
3754     - if (i == MAX_ORDER_NR_PAGES)
3755     + if (i == MAX_ORDER_NR_PAGES || pfn + i >= end_pfn)
3756     continue;
3757     page = pfn_to_page(pfn + i);
3758     if (zone && page_zone(page) != zone)
3759     @@ -1522,7 +1522,7 @@ int test_pages_in_a_zone(unsigned long start_pfn, unsigned long end_pfn,
3760    
3761     if (zone) {
3762     *valid_start = start;
3763     - *valid_end = end;
3764     + *valid_end = min(end, end_pfn);
3765     return 1;
3766     } else {
3767     return 0;
3768     diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
3769     index 1fba2a03f8ae..ba24f613c0fc 100644
3770     --- a/net/bluetooth/mgmt.c
3771     +++ b/net/bluetooth/mgmt.c
3772     @@ -2298,9 +2298,8 @@ static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
3773     /* LE address type */
3774     addr_type = le_addr_type(cp->addr.type);
3775    
3776     - hci_remove_irk(hdev, &cp->addr.bdaddr, addr_type);
3777     -
3778     - err = hci_remove_ltk(hdev, &cp->addr.bdaddr, addr_type);
3779     + /* Abort any ongoing SMP pairing. Removes ltk and irk if they exist. */
3780     + err = smp_cancel_and_remove_pairing(hdev, &cp->addr.bdaddr, addr_type);
3781     if (err < 0) {
3782     err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
3783     MGMT_STATUS_NOT_PAIRED, &rp,
3784     @@ -2314,8 +2313,6 @@ static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
3785     goto done;
3786     }
3787    
3788     - /* Abort any ongoing SMP pairing */
3789     - smp_cancel_pairing(conn);
3790    
3791     /* Defer clearing up the connection parameters until closing to
3792     * give a chance of keeping them if a repairing happens.
3793     diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
3794     index ead4d1baeaa6..1abfbcd8090a 100644
3795     --- a/net/bluetooth/smp.c
3796     +++ b/net/bluetooth/smp.c
3797     @@ -2353,30 +2353,51 @@ unlock:
3798     return ret;
3799     }
3800    
3801     -void smp_cancel_pairing(struct hci_conn *hcon)
3802     +int smp_cancel_and_remove_pairing(struct hci_dev *hdev, bdaddr_t *bdaddr,
3803     + u8 addr_type)
3804     {
3805     - struct l2cap_conn *conn = hcon->l2cap_data;
3806     + struct hci_conn *hcon;
3807     + struct l2cap_conn *conn;
3808     struct l2cap_chan *chan;
3809     struct smp_chan *smp;
3810     + int err;
3811     +
3812     + err = hci_remove_ltk(hdev, bdaddr, addr_type);
3813     + hci_remove_irk(hdev, bdaddr, addr_type);
3814     +
3815     + hcon = hci_conn_hash_lookup_le(hdev, bdaddr, addr_type);
3816     + if (!hcon)
3817     + goto done;
3818    
3819     + conn = hcon->l2cap_data;
3820     if (!conn)
3821     - return;
3822     + goto done;
3823    
3824     chan = conn->smp;
3825     if (!chan)
3826     - return;
3827     + goto done;
3828    
3829     l2cap_chan_lock(chan);
3830    
3831     smp = chan->data;
3832     if (smp) {
3833     + /* Set keys to NULL to make sure smp_failure() does not try to
3834     + * remove and free already invalidated rcu list entries. */
3835     + smp->ltk = NULL;
3836     + smp->slave_ltk = NULL;
3837     + smp->remote_irk = NULL;
3838     +
3839     if (test_bit(SMP_FLAG_COMPLETE, &smp->flags))
3840     smp_failure(conn, 0);
3841     else
3842     smp_failure(conn, SMP_UNSPECIFIED);
3843     + err = 0;
3844     }
3845    
3846     l2cap_chan_unlock(chan);
3847     +
3848     +done:
3849     + return err;
3850     }
3851    
3852     static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
3853     diff --git a/net/bluetooth/smp.h b/net/bluetooth/smp.h
3854     index ffcc70b6b199..993cbd7bcfe7 100644
3855     --- a/net/bluetooth/smp.h
3856     +++ b/net/bluetooth/smp.h
3857     @@ -180,7 +180,8 @@ enum smp_key_pref {
3858     };
3859    
3860     /* SMP Commands */
3861     -void smp_cancel_pairing(struct hci_conn *hcon);
3862     +int smp_cancel_and_remove_pairing(struct hci_dev *hdev, bdaddr_t *bdaddr,
3863     + u8 addr_type);
3864     bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
3865     enum smp_key_pref key_pref);
3866     int smp_conn_security(struct hci_conn *hcon, __u8 sec_level);
3867     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
3868     index 2136e45f5277..4bd57507b9a4 100644
3869     --- a/net/bridge/br_multicast.c
3870     +++ b/net/bridge/br_multicast.c
3871     @@ -1287,7 +1287,14 @@ static void br_multicast_query_received(struct net_bridge *br,
3872     return;
3873    
3874     br_multicast_update_query_timer(br, query, max_delay);
3875     - br_multicast_mark_router(br, port);
3876     +
3877     + /* Based on RFC4541, section 2.1.1 IGMP Forwarding Rules,
3878     + * the arrival port for IGMP Queries where the source address
3879     + * is 0.0.0.0 should not be added to router port list.
3880     + */
3881     + if ((saddr->proto == htons(ETH_P_IP) && saddr->u.ip4) ||
3882     + saddr->proto == htons(ETH_P_IPV6))
3883     + br_multicast_mark_router(br, port);
3884     }
3885    
3886     static int br_ip4_multicast_query(struct net_bridge *br,
3887     diff --git a/net/core/datagram.c b/net/core/datagram.c
3888     index 4fa4011feec1..146502f310ce 100644
3889     --- a/net/core/datagram.c
3890     +++ b/net/core/datagram.c
3891     @@ -754,8 +754,9 @@ int skb_copy_and_csum_datagram_msg(struct sk_buff *skb,
3892     return -EINVAL;
3893     }
3894    
3895     - if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
3896     - netdev_rx_csum_fault(skb->dev);
3897     + if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE) &&
3898     + !skb->csum_complete_sw)
3899     + netdev_rx_csum_fault(NULL);
3900     }
3901     return 0;
3902     fault:
3903     diff --git a/net/core/ethtool.c b/net/core/ethtool.c
3904     index 7913771ec474..a8a9938aeceb 100644
3905     --- a/net/core/ethtool.c
3906     +++ b/net/core/ethtool.c
3907     @@ -2397,13 +2397,17 @@ roll_back:
3908     return ret;
3909     }
3910    
3911     -static int ethtool_set_per_queue(struct net_device *dev, void __user *useraddr)
3912     +static int ethtool_set_per_queue(struct net_device *dev,
3913     + void __user *useraddr, u32 sub_cmd)
3914     {
3915     struct ethtool_per_queue_op per_queue_opt;
3916    
3917     if (copy_from_user(&per_queue_opt, useraddr, sizeof(per_queue_opt)))
3918     return -EFAULT;
3919    
3920     + if (per_queue_opt.sub_command != sub_cmd)
3921     + return -EINVAL;
3922     +
3923     switch (per_queue_opt.sub_command) {
3924     case ETHTOOL_GCOALESCE:
3925     return ethtool_get_per_queue_coalesce(dev, useraddr, &per_queue_opt);
3926     @@ -2669,7 +2673,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
3927     rc = ethtool_get_phy_stats(dev, useraddr);
3928     break;
3929     case ETHTOOL_PERQUEUE:
3930     - rc = ethtool_set_per_queue(dev, useraddr);
3931     + rc = ethtool_set_per_queue(dev, useraddr, sub_cmd);
3932     break;
3933     case ETHTOOL_GLINKSETTINGS:
3934     rc = ethtool_get_link_ksettings(dev, useraddr);
3935     diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
3936     index 189082dc288d..928a0b84469d 100644
3937     --- a/net/core/rtnetlink.c
3938     +++ b/net/core/rtnetlink.c
3939     @@ -2987,6 +2987,11 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)
3940     return -EINVAL;
3941     }
3942    
3943     + if (dev->type != ARPHRD_ETHER) {
3944     + pr_info("PF_BRIDGE: FDB add only supported for Ethernet devices");
3945     + return -EINVAL;
3946     + }
3947     +
3948     addr = nla_data(tb[NDA_LLADDR]);
3949    
3950     err = fdb_vid_parse(tb[NDA_VLAN], &vid);
3951     @@ -3090,6 +3095,11 @@ static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh)
3952     return -EINVAL;
3953     }
3954    
3955     + if (dev->type != ARPHRD_ETHER) {
3956     + pr_info("PF_BRIDGE: FDB delete only supported for Ethernet devices");
3957     + return -EINVAL;
3958     + }
3959     +
3960     addr = nla_data(tb[NDA_LLADDR]);
3961    
3962     err = fdb_vid_parse(tb[NDA_VLAN], &vid);
3963     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
3964     index 038ec74fa131..68ecb7d71c2b 100644
3965     --- a/net/core/skbuff.c
3966     +++ b/net/core/skbuff.c
3967     @@ -1585,8 +1585,9 @@ int pskb_trim_rcsum_slow(struct sk_buff *skb, unsigned int len)
3968     if (skb->ip_summed == CHECKSUM_COMPLETE) {
3969     int delta = skb->len - len;
3970    
3971     - skb->csum = csum_sub(skb->csum,
3972     - skb_checksum(skb, len, delta, 0));
3973     + skb->csum = csum_block_sub(skb->csum,
3974     + skb_checksum(skb, len, delta, 0),
3975     + len);
3976     }
3977     return __pskb_trim(skb, len);
3978     }
3979     diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
3980     index cc8c6ac84d08..80e48f40c3a8 100644
3981     --- a/net/ipv4/ip_fragment.c
3982     +++ b/net/ipv4/ip_fragment.c
3983     @@ -718,10 +718,14 @@ struct sk_buff *ip_check_defrag(struct net *net, struct sk_buff *skb, u32 user)
3984     if (ip_is_fragment(&iph)) {
3985     skb = skb_share_check(skb, GFP_ATOMIC);
3986     if (skb) {
3987     - if (!pskb_may_pull(skb, netoff + iph.ihl * 4))
3988     - return skb;
3989     - if (pskb_trim_rcsum(skb, netoff + len))
3990     - return skb;
3991     + if (!pskb_may_pull(skb, netoff + iph.ihl * 4)) {
3992     + kfree_skb(skb);
3993     + return NULL;
3994     + }
3995     + if (pskb_trim_rcsum(skb, netoff + len)) {
3996     + kfree_skb(skb);
3997     + return NULL;
3998     + }
3999     memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));
4000     if (ip_defrag(net, skb, user))
4001     return NULL;
4002     diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
4003     index b9b2a9828d98..5d4b5e0f6b5e 100644
4004     --- a/net/ipv4/udp.c
4005     +++ b/net/ipv4/udp.c
4006     @@ -1726,8 +1726,24 @@ static inline int udp4_csum_init(struct sk_buff *skb, struct udphdr *uh,
4007     /* Note, we are only interested in != 0 or == 0, thus the
4008     * force to int.
4009     */
4010     - return (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
4011     - inet_compute_pseudo);
4012     + err = (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
4013     + inet_compute_pseudo);
4014     + if (err)
4015     + return err;
4016     +
4017     + if (skb->ip_summed == CHECKSUM_COMPLETE && !skb->csum_valid) {
4018     + /* If SW calculated the value, we know it's bad */
4019     + if (skb->csum_complete_sw)
4020     + return 1;
4021     +
4022     + /* HW says the value is bad. Let's validate that.
4023     + * skb->csum is no longer the full packet checksum,
4024     + * so don't treat it as such.
4025     + */
4026     + skb_checksum_complete_unset(skb);
4027     + }
4028     +
4029     + return 0;
4030     }
4031    
4032     /* wrapper for udp_queue_rcv_skb tacking care of csum conversion and
4033     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
4034     index bc532206077f..8f79f0414bc3 100644
4035     --- a/net/ipv6/addrconf.c
4036     +++ b/net/ipv6/addrconf.c
4037     @@ -4721,8 +4721,8 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb,
4038    
4039     /* unicast address incl. temp addr */
4040     list_for_each_entry(ifa, &idev->addr_list, if_list) {
4041     - if (++ip_idx < s_ip_idx)
4042     - continue;
4043     + if (ip_idx < s_ip_idx)
4044     + goto next;
4045     err = inet6_fill_ifaddr(skb, ifa,
4046     NETLINK_CB(cb->skb).portid,
4047     cb->nlh->nlmsg_seq,
4048     @@ -4731,6 +4731,8 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb,
4049     if (err < 0)
4050     break;
4051     nl_dump_check_consistent(cb, nlmsg_hdr(skb));
4052     +next:
4053     + ip_idx++;
4054     }
4055     break;
4056     }
4057     diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
4058     index 421379014995..f7b425615c12 100644
4059     --- a/net/ipv6/af_inet6.c
4060     +++ b/net/ipv6/af_inet6.c
4061     @@ -1045,11 +1045,11 @@ netfilter_fail:
4062     igmp_fail:
4063     ndisc_cleanup();
4064     ndisc_fail:
4065     - ip6_mr_cleanup();
4066     + icmpv6_cleanup();
4067     icmp_fail:
4068     - unregister_pernet_subsys(&inet6_net_ops);
4069     + ip6_mr_cleanup();
4070     ipmr_fail:
4071     - icmpv6_cleanup();
4072     + unregister_pernet_subsys(&inet6_net_ops);
4073     register_pernet_fail:
4074     sock_unregister(PF_INET6);
4075     rtnl_unregister_all(PF_INET6);
4076     diff --git a/net/ipv6/ip6_checksum.c b/net/ipv6/ip6_checksum.c
4077     index 1dc023ca98fd..9d9a16e219d6 100644
4078     --- a/net/ipv6/ip6_checksum.c
4079     +++ b/net/ipv6/ip6_checksum.c
4080     @@ -87,8 +87,24 @@ int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh, int proto)
4081     * Note, we are only interested in != 0 or == 0, thus the
4082     * force to int.
4083     */
4084     - return (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
4085     - ip6_compute_pseudo);
4086     + err = (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
4087     + ip6_compute_pseudo);
4088     + if (err)
4089     + return err;
4090     +
4091     + if (skb->ip_summed == CHECKSUM_COMPLETE && !skb->csum_valid) {
4092     + /* If SW calculated the value, we know it's bad */
4093     + if (skb->csum_complete_sw)
4094     + return 1;
4095     +
4096     + /* HW says the value is bad. Let's validate that.
4097     + * skb->csum is no longer the full packet checksum,
4098     + * so don't treat is as such.
4099     + */
4100     + skb_checksum_complete_unset(skb);
4101     + }
4102     +
4103     + return 0;
4104     }
4105     EXPORT_SYMBOL(udp6_csum_init);
4106    
4107     diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
4108     index fd081a14064e..9c5afa5153ce 100644
4109     --- a/net/ipv6/ip6_tunnel.c
4110     +++ b/net/ipv6/ip6_tunnel.c
4111     @@ -1185,11 +1185,6 @@ route_lookup:
4112     }
4113     skb_dst_set(skb, dst);
4114    
4115     - if (encap_limit >= 0) {
4116     - init_tel_txopt(&opt, encap_limit);
4117     - ipv6_push_nfrag_opts(skb, &opt.ops, &proto, NULL);
4118     - }
4119     -
4120     /* Calculate max headroom for all the headers and adjust
4121     * needed_headroom if necessary.
4122     */
4123     @@ -1202,6 +1197,11 @@ route_lookup:
4124     if (err)
4125     return err;
4126    
4127     + if (encap_limit >= 0) {
4128     + init_tel_txopt(&opt, encap_limit);
4129     + ipv6_push_nfrag_opts(skb, &opt.ops, &proto, NULL);
4130     + }
4131     +
4132     skb_push(skb, sizeof(struct ipv6hdr));
4133     skb_reset_network_header(skb);
4134     ipv6h = ipv6_hdr(skb);
4135     @@ -1258,7 +1258,7 @@ ip4ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
4136     fl6.flowi6_proto = IPPROTO_IPIP;
4137     fl6.daddr = key->u.ipv6.dst;
4138     fl6.flowlabel = key->label;
4139     - dsfield = ip6_tclass(key->label);
4140     + dsfield = key->tos;
4141     } else {
4142     if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT))
4143     encap_limit = t->parms.encap_limit;
4144     @@ -1329,7 +1329,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev)
4145     fl6.flowi6_proto = IPPROTO_IPV6;
4146     fl6.daddr = key->u.ipv6.dst;
4147     fl6.flowlabel = key->label;
4148     - dsfield = ip6_tclass(key->label);
4149     + dsfield = key->tos;
4150     } else {
4151     offset = ip6_tnl_parse_tlv_enc_lim(skb, skb_network_header(skb));
4152     /* ip6_tnl_parse_tlv_enc_lim() might have reallocated skb->head */
4153     diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
4154     index 6c54c76847bf..40262abb15db 100644
4155     --- a/net/ipv6/mcast.c
4156     +++ b/net/ipv6/mcast.c
4157     @@ -2413,17 +2413,17 @@ static int ip6_mc_leave_src(struct sock *sk, struct ipv6_mc_socklist *iml,
4158     {
4159     int err;
4160    
4161     - /* callers have the socket lock and rtnl lock
4162     - * so no other readers or writers of iml or its sflist
4163     - */
4164     + write_lock_bh(&iml->sflock);
4165     if (!iml->sflist) {
4166     /* any-source empty exclude case */
4167     - return ip6_mc_del_src(idev, &iml->addr, iml->sfmode, 0, NULL, 0);
4168     + err = ip6_mc_del_src(idev, &iml->addr, iml->sfmode, 0, NULL, 0);
4169     + } else {
4170     + err = ip6_mc_del_src(idev, &iml->addr, iml->sfmode,
4171     + iml->sflist->sl_count, iml->sflist->sl_addr, 0);
4172     + sock_kfree_s(sk, iml->sflist, IP6_SFLSIZE(iml->sflist->sl_max));
4173     + iml->sflist = NULL;
4174     }
4175     - err = ip6_mc_del_src(idev, &iml->addr, iml->sfmode,
4176     - iml->sflist->sl_count, iml->sflist->sl_addr, 0);
4177     - sock_kfree_s(sk, iml->sflist, IP6_SFLSIZE(iml->sflist->sl_max));
4178     - iml->sflist = NULL;
4179     + write_unlock_bh(&iml->sflock);
4180     return err;
4181     }
4182    
4183     diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
4184     index 21f3bf2125f4..505d048ffff5 100644
4185     --- a/net/ipv6/ndisc.c
4186     +++ b/net/ipv6/ndisc.c
4187     @@ -1692,10 +1692,9 @@ int ndisc_rcv(struct sk_buff *skb)
4188     return 0;
4189     }
4190    
4191     - memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb));
4192     -
4193     switch (msg->icmph.icmp6_type) {
4194     case NDISC_NEIGHBOUR_SOLICITATION:
4195     + memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb));
4196     ndisc_recv_ns(skb);
4197     break;
4198    
4199     diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c
4200     index b9147558a8f2..e46185377981 100644
4201     --- a/net/ipv6/netfilter/nf_conntrack_reasm.c
4202     +++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
4203     @@ -597,8 +597,6 @@ int nf_ct_frag6_gather(struct net *net, struct sk_buff *skb, u32 user)
4204     fq->q.meat == fq->q.len &&
4205     nf_ct_frag6_reasm(fq, skb, dev))
4206     ret = 0;
4207     - else
4208     - skb_dst_drop(skb);
4209    
4210     out_unlock:
4211     spin_unlock_bh(&fq->q.lock);
4212     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
4213     index 70fa31e37360..4cc12eeca7ab 100644
4214     --- a/net/ipv6/route.c
4215     +++ b/net/ipv6/route.c
4216     @@ -2289,6 +2289,7 @@ static void rt6_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_bu
4217     if (on_link)
4218     nrt->rt6i_flags &= ~RTF_GATEWAY;
4219    
4220     + nrt->rt6i_protocol = RTPROT_REDIRECT;
4221     nrt->rt6i_gateway = *(struct in6_addr *)neigh->primary_key;
4222    
4223     if (ip6_ins_rt(nrt))
4224     @@ -2393,6 +2394,7 @@ static struct rt6_info *rt6_add_route_info(struct net *net,
4225     .fc_dst_len = prefixlen,
4226     .fc_flags = RTF_GATEWAY | RTF_ADDRCONF | RTF_ROUTEINFO |
4227     RTF_UP | RTF_PREF(pref),
4228     + .fc_protocol = RTPROT_RA,
4229     .fc_nlinfo.portid = 0,
4230     .fc_nlinfo.nlh = NULL,
4231     .fc_nlinfo.nl_net = net,
4232     @@ -2445,6 +2447,7 @@ struct rt6_info *rt6_add_dflt_router(const struct in6_addr *gwaddr,
4233     .fc_ifindex = dev->ifindex,
4234     .fc_flags = RTF_GATEWAY | RTF_ADDRCONF | RTF_DEFAULT |
4235     RTF_UP | RTF_EXPIRES | RTF_PREF(pref),
4236     + .fc_protocol = RTPROT_RA,
4237     .fc_nlinfo.portid = 0,
4238     .fc_nlinfo.nlh = NULL,
4239     .fc_nlinfo.nl_net = dev_net(dev),
4240     @@ -3241,14 +3244,6 @@ static int rt6_fill_node(struct net *net,
4241     }
4242     rtm->rtm_scope = RT_SCOPE_UNIVERSE;
4243     rtm->rtm_protocol = rt->rt6i_protocol;
4244     - if (rt->rt6i_flags & RTF_DYNAMIC)
4245     - rtm->rtm_protocol = RTPROT_REDIRECT;
4246     - else if (rt->rt6i_flags & RTF_ADDRCONF) {
4247     - if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ROUTEINFO))
4248     - rtm->rtm_protocol = RTPROT_RA;
4249     - else
4250     - rtm->rtm_protocol = RTPROT_KERNEL;
4251     - }
4252    
4253     if (rt->rt6i_flags & RTF_CACHE)
4254     rtm->rtm_flags |= RTM_F_CLONED;
4255     diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c
4256     index 4d09ce6fa90e..64862c5084ee 100644
4257     --- a/net/ipv6/xfrm6_output.c
4258     +++ b/net/ipv6/xfrm6_output.c
4259     @@ -165,9 +165,11 @@ static int __xfrm6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
4260    
4261     if (toobig && xfrm6_local_dontfrag(skb)) {
4262     xfrm6_local_rxpmtu(skb, mtu);
4263     + kfree_skb(skb);
4264     return -EMSGSIZE;
4265     } else if (!skb->ignore_df && toobig && skb->sk) {
4266     xfrm_local_error(skb, mtu);
4267     + kfree_skb(skb);
4268     return -EMSGSIZE;
4269     }
4270    
4271     diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
4272     index a5333f6cb65a..b96dbe38ecad 100644
4273     --- a/net/l2tp/l2tp_core.c
4274     +++ b/net/l2tp/l2tp_core.c
4275     @@ -845,10 +845,8 @@ void l2tp_recv_common(struct l2tp_session *session, struct sk_buff *skb,
4276     }
4277     }
4278    
4279     - /* Session data offset is handled differently for L2TPv2 and
4280     - * L2TPv3. For L2TPv2, there is an optional 16-bit value in
4281     - * the header. For L2TPv3, the offset is negotiated using AVPs
4282     - * in the session setup control protocol.
4283     + /* Session data offset is defined only for L2TPv2 and is
4284     + * indicated by an optional 16-bit value in the header.
4285     */
4286     if (tunnel->version == L2TP_HDR_VER_2) {
4287     /* If offset bit set, skip it. */
4288     @@ -856,8 +854,7 @@ void l2tp_recv_common(struct l2tp_session *session, struct sk_buff *skb,
4289     offset = ntohs(*(__be16 *)ptr);
4290     ptr += 2 + offset;
4291     }
4292     - } else
4293     - ptr += session->offset;
4294     + }
4295    
4296     offset = ptr - optr;
4297     if (!pskb_may_pull(skb, offset))
4298     @@ -1141,8 +1138,6 @@ static int l2tp_build_l2tpv3_header(struct l2tp_session *session, void *buf)
4299     }
4300     bufp += session->l2specific_len;
4301     }
4302     - if (session->offset)
4303     - bufp += session->offset;
4304    
4305     return bufp - optr;
4306     }
4307     @@ -1827,7 +1822,7 @@ void l2tp_session_set_header_len(struct l2tp_session *session, int version)
4308     if (session->send_seq)
4309     session->hdr_len += 4;
4310     } else {
4311     - session->hdr_len = 4 + session->cookie_len + session->l2specific_len + session->offset;
4312     + session->hdr_len = 4 + session->cookie_len + session->l2specific_len;
4313     if (session->tunnel->encap == L2TP_ENCAPTYPE_UDP)
4314     session->hdr_len += 4;
4315     }
4316     @@ -1878,7 +1873,6 @@ struct l2tp_session *l2tp_session_create(int priv_size, struct l2tp_tunnel *tunn
4317     session->recv_seq = cfg->recv_seq;
4318     session->lns_mode = cfg->lns_mode;
4319     session->reorder_timeout = cfg->reorder_timeout;
4320     - session->offset = cfg->offset;
4321     session->l2specific_type = cfg->l2specific_type;
4322     session->l2specific_len = cfg->l2specific_len;
4323     session->cookie_len = cfg->cookie_len;
4324     diff --git a/net/l2tp/l2tp_core.h b/net/l2tp/l2tp_core.h
4325     index 42419f1c24cf..86356a23a0a7 100644
4326     --- a/net/l2tp/l2tp_core.h
4327     +++ b/net/l2tp/l2tp_core.h
4328     @@ -68,7 +68,6 @@ struct l2tp_session_cfg {
4329     int debug; /* bitmask of debug message
4330     * categories */
4331     u16 vlan_id; /* VLAN pseudowire only */
4332     - u16 offset; /* offset to payload */
4333     u16 l2specific_len; /* Layer 2 specific length */
4334     u16 l2specific_type; /* Layer 2 specific type */
4335     u8 cookie[8]; /* optional cookie */
4336     @@ -94,8 +93,6 @@ struct l2tp_session {
4337     int cookie_len;
4338     u8 peer_cookie[8];
4339     int peer_cookie_len;
4340     - u16 offset; /* offset from end of L2TP header
4341     - to beginning of data */
4342     u16 l2specific_len;
4343     u16 l2specific_type;
4344     u16 hdr_len;
4345     diff --git a/net/l2tp/l2tp_debugfs.c b/net/l2tp/l2tp_debugfs.c
4346     index d100aed3d06f..2d2a73280ec2 100644
4347     --- a/net/l2tp/l2tp_debugfs.c
4348     +++ b/net/l2tp/l2tp_debugfs.c
4349     @@ -181,8 +181,8 @@ static void l2tp_dfs_seq_session_show(struct seq_file *m, void *v)
4350     session->lns_mode ? "LNS" : "LAC",
4351     session->debug,
4352     jiffies_to_msecs(session->reorder_timeout));
4353     - seq_printf(m, " offset %hu l2specific %hu/%hu\n",
4354     - session->offset, session->l2specific_type, session->l2specific_len);
4355     + seq_printf(m, " offset 0 l2specific %hu/%hu\n",
4356     + session->l2specific_type, session->l2specific_len);
4357     if (session->cookie_len) {
4358     seq_printf(m, " cookie %02x%02x%02x%02x",
4359     session->cookie[0], session->cookie[1],
4360     diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c
4361     index ee03bc866d1b..d6fccfdca201 100644
4362     --- a/net/l2tp/l2tp_netlink.c
4363     +++ b/net/l2tp/l2tp_netlink.c
4364     @@ -536,9 +536,6 @@ static int l2tp_nl_cmd_session_create(struct sk_buff *skb, struct genl_info *inf
4365     }
4366    
4367     if (tunnel->version > 2) {
4368     - if (info->attrs[L2TP_ATTR_OFFSET])
4369     - cfg.offset = nla_get_u16(info->attrs[L2TP_ATTR_OFFSET]);
4370     -
4371     if (info->attrs[L2TP_ATTR_DATA_SEQ])
4372     cfg.data_seq = nla_get_u8(info->attrs[L2TP_ATTR_DATA_SEQ]);
4373    
4374     diff --git a/net/llc/llc_conn.c b/net/llc/llc_conn.c
4375     index 79c346fd859b..b9290a183a2f 100644
4376     --- a/net/llc/llc_conn.c
4377     +++ b/net/llc/llc_conn.c
4378     @@ -734,6 +734,7 @@ void llc_sap_add_socket(struct llc_sap *sap, struct sock *sk)
4379     llc_sk(sk)->sap = sap;
4380    
4381     spin_lock_bh(&sap->sk_lock);
4382     + sock_set_flag(sk, SOCK_RCU_FREE);
4383     sap->sk_count++;
4384     sk_nulls_add_node_rcu(sk, laddr_hb);
4385     hlist_add_head(&llc->dev_hash_node, dev_hb);
4386     diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
4387     index 45319cc01121..80c45567ee3a 100644
4388     --- a/net/mac80211/agg-tx.c
4389     +++ b/net/mac80211/agg-tx.c
4390     @@ -7,7 +7,7 @@
4391     * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
4392     * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
4393     * Copyright 2007-2010, Intel Corporation
4394     - * Copyright(c) 2015 Intel Deutschland GmbH
4395     + * Copyright(c) 2015-2017 Intel Deutschland GmbH
4396     *
4397     * This program is free software; you can redistribute it and/or modify
4398     * it under the terms of the GNU General Public License version 2 as
4399     @@ -741,46 +741,43 @@ static void ieee80211_agg_tx_operational(struct ieee80211_local *local,
4400     ieee80211_agg_start_txq(sta, tid, true);
4401     }
4402    
4403     -void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid)
4404     +void ieee80211_start_tx_ba_cb(struct sta_info *sta, int tid,
4405     + struct tid_ampdu_tx *tid_tx)
4406     {
4407     - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
4408     + struct ieee80211_sub_if_data *sdata = sta->sdata;
4409     struct ieee80211_local *local = sdata->local;
4410     - struct sta_info *sta;
4411     - struct tid_ampdu_tx *tid_tx;
4412    
4413     - trace_api_start_tx_ba_cb(sdata, ra, tid);
4414     + if (WARN_ON(test_and_set_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state)))
4415     + return;
4416     +
4417     + if (test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state))
4418     + ieee80211_agg_tx_operational(local, sta, tid);
4419     +}
4420     +
4421     +static struct tid_ampdu_tx *
4422     +ieee80211_lookup_tid_tx(struct ieee80211_sub_if_data *sdata,
4423     + const u8 *ra, u16 tid, struct sta_info **sta)
4424     +{
4425     + struct tid_ampdu_tx *tid_tx;
4426    
4427     if (tid >= IEEE80211_NUM_TIDS) {
4428     ht_dbg(sdata, "Bad TID value: tid = %d (>= %d)\n",
4429     tid, IEEE80211_NUM_TIDS);
4430     - return;
4431     + return NULL;
4432     }
4433    
4434     - mutex_lock(&local->sta_mtx);
4435     - sta = sta_info_get_bss(sdata, ra);
4436     - if (!sta) {
4437     - mutex_unlock(&local->sta_mtx);
4438     + *sta = sta_info_get_bss(sdata, ra);
4439     + if (!*sta) {
4440     ht_dbg(sdata, "Could not find station: %pM\n", ra);
4441     - return;
4442     + return NULL;
4443     }
4444    
4445     - mutex_lock(&sta->ampdu_mlme.mtx);
4446     - tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
4447     + tid_tx = rcu_dereference((*sta)->ampdu_mlme.tid_tx[tid]);
4448    
4449     - if (WARN_ON(!tid_tx)) {
4450     + if (WARN_ON(!tid_tx))
4451     ht_dbg(sdata, "addBA was not requested!\n");
4452     - goto unlock;
4453     - }
4454    
4455     - if (WARN_ON(test_and_set_bit(HT_AGG_STATE_DRV_READY, &tid_tx->state)))
4456     - goto unlock;
4457     -
4458     - if (test_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state))
4459     - ieee80211_agg_tx_operational(local, sta, tid);
4460     -
4461     - unlock:
4462     - mutex_unlock(&sta->ampdu_mlme.mtx);
4463     - mutex_unlock(&local->sta_mtx);
4464     + return tid_tx;
4465     }
4466    
4467     void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif,
4468     @@ -788,19 +785,20 @@ void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif,
4469     {
4470     struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
4471     struct ieee80211_local *local = sdata->local;
4472     - struct ieee80211_ra_tid *ra_tid;
4473     - struct sk_buff *skb = dev_alloc_skb(0);
4474     + struct sta_info *sta;
4475     + struct tid_ampdu_tx *tid_tx;
4476    
4477     - if (unlikely(!skb))
4478     - return;
4479     + trace_api_start_tx_ba_cb(sdata, ra, tid);
4480    
4481     - ra_tid = (struct ieee80211_ra_tid *) &skb->cb;
4482     - memcpy(&ra_tid->ra, ra, ETH_ALEN);
4483     - ra_tid->tid = tid;
4484     + rcu_read_lock();
4485     + tid_tx = ieee80211_lookup_tid_tx(sdata, ra, tid, &sta);
4486     + if (!tid_tx)
4487     + goto out;
4488    
4489     - skb->pkt_type = IEEE80211_SDATA_QUEUE_AGG_START;
4490     - skb_queue_tail(&sdata->skb_queue, skb);
4491     - ieee80211_queue_work(&local->hw, &sdata->work);
4492     + set_bit(HT_AGG_STATE_START_CB, &tid_tx->state);
4493     + ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work);
4494     + out:
4495     + rcu_read_unlock();
4496     }
4497     EXPORT_SYMBOL(ieee80211_start_tx_ba_cb_irqsafe);
4498    
4499     @@ -860,37 +858,18 @@ int ieee80211_stop_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid)
4500     }
4501     EXPORT_SYMBOL(ieee80211_stop_tx_ba_session);
4502    
4503     -void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid)
4504     +void ieee80211_stop_tx_ba_cb(struct sta_info *sta, int tid,
4505     + struct tid_ampdu_tx *tid_tx)
4506     {
4507     - struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
4508     - struct ieee80211_local *local = sdata->local;
4509     - struct sta_info *sta;
4510     - struct tid_ampdu_tx *tid_tx;
4511     + struct ieee80211_sub_if_data *sdata = sta->sdata;
4512     bool send_delba = false;
4513    
4514     - trace_api_stop_tx_ba_cb(sdata, ra, tid);
4515     -
4516     - if (tid >= IEEE80211_NUM_TIDS) {
4517     - ht_dbg(sdata, "Bad TID value: tid = %d (>= %d)\n",
4518     - tid, IEEE80211_NUM_TIDS);
4519     - return;
4520     - }
4521     -
4522     - ht_dbg(sdata, "Stopping Tx BA session for %pM tid %d\n", ra, tid);
4523     -
4524     - mutex_lock(&local->sta_mtx);
4525     -
4526     - sta = sta_info_get_bss(sdata, ra);
4527     - if (!sta) {
4528     - ht_dbg(sdata, "Could not find station: %pM\n", ra);
4529     - goto unlock;
4530     - }
4531     + ht_dbg(sdata, "Stopping Tx BA session for %pM tid %d\n",
4532     + sta->sta.addr, tid);
4533    
4534     - mutex_lock(&sta->ampdu_mlme.mtx);
4535     spin_lock_bh(&sta->lock);
4536     - tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
4537    
4538     - if (!tid_tx || !test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) {
4539     + if (!test_bit(HT_AGG_STATE_STOPPING, &tid_tx->state)) {
4540     ht_dbg(sdata,
4541     "unexpected callback to A-MPDU stop for %pM tid %d\n",
4542     sta->sta.addr, tid);
4543     @@ -906,12 +885,8 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid)
4544     spin_unlock_bh(&sta->lock);
4545    
4546     if (send_delba)
4547     - ieee80211_send_delba(sdata, ra, tid,
4548     + ieee80211_send_delba(sdata, sta->sta.addr, tid,
4549     WLAN_BACK_INITIATOR, WLAN_REASON_QSTA_NOT_USE);
4550     -
4551     - mutex_unlock(&sta->ampdu_mlme.mtx);
4552     - unlock:
4553     - mutex_unlock(&local->sta_mtx);
4554     }
4555    
4556     void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif,
4557     @@ -919,19 +894,20 @@ void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif,
4558     {
4559     struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
4560     struct ieee80211_local *local = sdata->local;
4561     - struct ieee80211_ra_tid *ra_tid;
4562     - struct sk_buff *skb = dev_alloc_skb(0);
4563     + struct sta_info *sta;
4564     + struct tid_ampdu_tx *tid_tx;
4565    
4566     - if (unlikely(!skb))
4567     - return;
4568     + trace_api_stop_tx_ba_cb(sdata, ra, tid);
4569    
4570     - ra_tid = (struct ieee80211_ra_tid *) &skb->cb;
4571     - memcpy(&ra_tid->ra, ra, ETH_ALEN);
4572     - ra_tid->tid = tid;
4573     + rcu_read_lock();
4574     + tid_tx = ieee80211_lookup_tid_tx(sdata, ra, tid, &sta);
4575     + if (!tid_tx)
4576     + goto out;
4577    
4578     - skb->pkt_type = IEEE80211_SDATA_QUEUE_AGG_STOP;
4579     - skb_queue_tail(&sdata->skb_queue, skb);
4580     - ieee80211_queue_work(&local->hw, &sdata->work);
4581     + set_bit(HT_AGG_STATE_STOP_CB, &tid_tx->state);
4582     + ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work);
4583     + out:
4584     + rcu_read_unlock();
4585     }
4586     EXPORT_SYMBOL(ieee80211_stop_tx_ba_cb_irqsafe);
4587    
4588     diff --git a/net/mac80211/ht.c b/net/mac80211/ht.c
4589     index f4a528773563..6ca5442b1e03 100644
4590     --- a/net/mac80211/ht.c
4591     +++ b/net/mac80211/ht.c
4592     @@ -7,6 +7,7 @@
4593     * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
4594     * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
4595     * Copyright 2007-2010, Intel Corporation
4596     + * Copyright 2017 Intel Deutschland GmbH
4597     *
4598     * This program is free software; you can redistribute it and/or modify
4599     * it under the terms of the GNU General Public License version 2 as
4600     @@ -289,8 +290,6 @@ void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta,
4601     {
4602     int i;
4603    
4604     - cancel_work_sync(&sta->ampdu_mlme.work);
4605     -
4606     for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
4607     __ieee80211_stop_tx_ba_session(sta, i, reason);
4608     __ieee80211_stop_rx_ba_session(sta, i, WLAN_BACK_RECIPIENT,
4609     @@ -298,6 +297,9 @@ void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta,
4610     reason != AGG_STOP_DESTROY_STA &&
4611     reason != AGG_STOP_PEER_REQUEST);
4612     }
4613     +
4614     + /* stopping might queue the work again - so cancel only afterwards */
4615     + cancel_work_sync(&sta->ampdu_mlme.work);
4616     }
4617    
4618     void ieee80211_ba_session_work(struct work_struct *work)
4619     @@ -352,10 +354,16 @@ void ieee80211_ba_session_work(struct work_struct *work)
4620     spin_unlock_bh(&sta->lock);
4621    
4622     tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
4623     - if (tid_tx && test_and_clear_bit(HT_AGG_STATE_WANT_STOP,
4624     - &tid_tx->state))
4625     + if (!tid_tx)
4626     + continue;
4627     +
4628     + if (test_and_clear_bit(HT_AGG_STATE_START_CB, &tid_tx->state))
4629     + ieee80211_start_tx_ba_cb(sta, tid, tid_tx);
4630     + if (test_and_clear_bit(HT_AGG_STATE_WANT_STOP, &tid_tx->state))
4631     ___ieee80211_stop_tx_ba_session(sta, tid,
4632     AGG_STOP_LOCAL_REQUEST);
4633     + if (test_and_clear_bit(HT_AGG_STATE_STOP_CB, &tid_tx->state))
4634     + ieee80211_stop_tx_ba_cb(sta, tid, tid_tx);
4635     }
4636     mutex_unlock(&sta->ampdu_mlme.mtx);
4637     }
4638     diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
4639     index 7fd544d970d9..8a690ebd7374 100644
4640     --- a/net/mac80211/ieee80211_i.h
4641     +++ b/net/mac80211/ieee80211_i.h
4642     @@ -1026,8 +1026,6 @@ struct ieee80211_rx_agg {
4643    
4644     enum sdata_queue_type {
4645     IEEE80211_SDATA_QUEUE_TYPE_FRAME = 0,
4646     - IEEE80211_SDATA_QUEUE_AGG_START = 1,
4647     - IEEE80211_SDATA_QUEUE_AGG_STOP = 2,
4648     IEEE80211_SDATA_QUEUE_RX_AGG_START = 3,
4649     IEEE80211_SDATA_QUEUE_RX_AGG_STOP = 4,
4650     };
4651     @@ -1416,12 +1414,6 @@ ieee80211_get_sband(struct ieee80211_sub_if_data *sdata)
4652     return local->hw.wiphy->bands[band];
4653     }
4654    
4655     -/* this struct represents 802.11n's RA/TID combination */
4656     -struct ieee80211_ra_tid {
4657     - u8 ra[ETH_ALEN];
4658     - u16 tid;
4659     -};
4660     -
4661     /* this struct holds the value parsing from channel switch IE */
4662     struct ieee80211_csa_ie {
4663     struct cfg80211_chan_def chandef;
4664     @@ -1765,8 +1757,10 @@ int __ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
4665     enum ieee80211_agg_stop_reason reason);
4666     int ___ieee80211_stop_tx_ba_session(struct sta_info *sta, u16 tid,
4667     enum ieee80211_agg_stop_reason reason);
4668     -void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid);
4669     -void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid);
4670     +void ieee80211_start_tx_ba_cb(struct sta_info *sta, int tid,
4671     + struct tid_ampdu_tx *tid_tx);
4672     +void ieee80211_stop_tx_ba_cb(struct sta_info *sta, int tid,
4673     + struct tid_ampdu_tx *tid_tx);
4674     void ieee80211_ba_session_work(struct work_struct *work);
4675     void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid);
4676     void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid);
4677     diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
4678     index fa7d757fef95..760ba8ec2944 100644
4679     --- a/net/mac80211/iface.c
4680     +++ b/net/mac80211/iface.c
4681     @@ -1248,7 +1248,6 @@ static void ieee80211_iface_work(struct work_struct *work)
4682     struct ieee80211_local *local = sdata->local;
4683     struct sk_buff *skb;
4684     struct sta_info *sta;
4685     - struct ieee80211_ra_tid *ra_tid;
4686     struct ieee80211_rx_agg *rx_agg;
4687    
4688     if (!ieee80211_sdata_running(sdata))
4689     @@ -1264,15 +1263,7 @@ static void ieee80211_iface_work(struct work_struct *work)
4690     while ((skb = skb_dequeue(&sdata->skb_queue))) {
4691     struct ieee80211_mgmt *mgmt = (void *)skb->data;
4692    
4693     - if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_START) {
4694     - ra_tid = (void *)&skb->cb;
4695     - ieee80211_start_tx_ba_cb(&sdata->vif, ra_tid->ra,
4696     - ra_tid->tid);
4697     - } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_AGG_STOP) {
4698     - ra_tid = (void *)&skb->cb;
4699     - ieee80211_stop_tx_ba_cb(&sdata->vif, ra_tid->ra,
4700     - ra_tid->tid);
4701     - } else if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_START) {
4702     + if (skb->pkt_type == IEEE80211_SDATA_QUEUE_RX_AGG_START) {
4703     rx_agg = (void *)&skb->cb;
4704     mutex_lock(&local->sta_mtx);
4705     sta = sta_info_get_bss(sdata, rx_agg->addr);
4706     diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
4707     index 15599c70a38f..cc808ac783e5 100644
4708     --- a/net/mac80211/sta_info.h
4709     +++ b/net/mac80211/sta_info.h
4710     @@ -115,6 +115,8 @@ enum ieee80211_sta_info_flags {
4711     #define HT_AGG_STATE_STOPPING 3
4712     #define HT_AGG_STATE_WANT_START 4
4713     #define HT_AGG_STATE_WANT_STOP 5
4714     +#define HT_AGG_STATE_START_CB 6
4715     +#define HT_AGG_STATE_STOP_CB 7
4716    
4717     enum ieee80211_agg_stop_reason {
4718     AGG_STOP_DECLINED,
4719     diff --git a/net/mac80211/status.c b/net/mac80211/status.c
4720     index 72fe9bc7a1f9..7892bac21eac 100644
4721     --- a/net/mac80211/status.c
4722     +++ b/net/mac80211/status.c
4723     @@ -472,11 +472,6 @@ static void ieee80211_report_ack_skb(struct ieee80211_local *local,
4724     if (!skb)
4725     return;
4726    
4727     - if (dropped) {
4728     - dev_kfree_skb_any(skb);
4729     - return;
4730     - }
4731     -
4732     if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) {
4733     u64 cookie = IEEE80211_SKB_CB(skb)->ack.cookie;
4734     struct ieee80211_sub_if_data *sdata;
4735     @@ -497,6 +492,8 @@ static void ieee80211_report_ack_skb(struct ieee80211_local *local,
4736     }
4737     rcu_read_unlock();
4738    
4739     + dev_kfree_skb_any(skb);
4740     + } else if (dropped) {
4741     dev_kfree_skb_any(skb);
4742     } else {
4743     /* consumes skb */
4744     diff --git a/net/mac80211/tdls.c b/net/mac80211/tdls.c
4745     index f20dcf1b1830..c64ae68ae4f8 100644
4746     --- a/net/mac80211/tdls.c
4747     +++ b/net/mac80211/tdls.c
4748     @@ -16,6 +16,7 @@
4749     #include "ieee80211_i.h"
4750     #include "driver-ops.h"
4751     #include "rate.h"
4752     +#include "wme.h"
4753    
4754     /* give usermode some time for retries in setting up the TDLS session */
4755     #define TDLS_PEER_SETUP_TIMEOUT (15 * HZ)
4756     @@ -1019,14 +1020,13 @@ ieee80211_tdls_prep_mgmt_packet(struct wiphy *wiphy, struct net_device *dev,
4757     switch (action_code) {
4758     case WLAN_TDLS_SETUP_REQUEST:
4759     case WLAN_TDLS_SETUP_RESPONSE:
4760     - skb_set_queue_mapping(skb, IEEE80211_AC_BK);
4761     - skb->priority = 2;
4762     + skb->priority = 256 + 2;
4763     break;
4764     default:
4765     - skb_set_queue_mapping(skb, IEEE80211_AC_VI);
4766     - skb->priority = 5;
4767     + skb->priority = 256 + 5;
4768     break;
4769     }
4770     + skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, skb));
4771    
4772     /*
4773     * Set the WLAN_TDLS_TEARDOWN flag to indicate a teardown in progress.
4774     diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
4775     index 84582998f65f..58fba4e569e6 100644
4776     --- a/net/mac80211/tx.c
4777     +++ b/net/mac80211/tx.c
4778     @@ -1833,7 +1833,7 @@ static bool ieee80211_tx(struct ieee80211_sub_if_data *sdata,
4779     sdata->vif.hw_queue[skb_get_queue_mapping(skb)];
4780    
4781     if (invoke_tx_handlers_early(&tx))
4782     - return false;
4783     + return true;
4784    
4785     if (ieee80211_queue_skb(local, sdata, tx.sta, tx.skb))
4786     return true;
4787     diff --git a/net/rds/ib_cm.c b/net/rds/ib_cm.c
4788     index 169156cfd4c8..96e61eab19bc 100644
4789     --- a/net/rds/ib_cm.c
4790     +++ b/net/rds/ib_cm.c
4791     @@ -505,7 +505,7 @@ static int rds_ib_setup_qp(struct rds_connection *conn)
4792     rdsdebug("conn %p pd %p cq %p %p\n", conn, ic->i_pd,
4793     ic->i_send_cq, ic->i_recv_cq);
4794    
4795     - return ret;
4796     + goto out;
4797    
4798     sends_out:
4799     vfree(ic->i_sends);
4800     @@ -530,6 +530,7 @@ send_cq_out:
4801     ic->i_send_cq = NULL;
4802     rds_ibdev_out:
4803     rds_ib_remove_conn(rds_ibdev, conn);
4804     +out:
4805     rds_ib_dev_put(rds_ibdev);
4806    
4807     return ret;
4808     diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
4809     index f3ac85a285a2..a4380e182e6c 100644
4810     --- a/net/rxrpc/input.c
4811     +++ b/net/rxrpc/input.c
4812     @@ -216,10 +216,11 @@ static void rxrpc_send_ping(struct rxrpc_call *call, struct sk_buff *skb,
4813     /*
4814     * Apply a hard ACK by advancing the Tx window.
4815     */
4816     -static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to,
4817     +static bool rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to,
4818     struct rxrpc_ack_summary *summary)
4819     {
4820     struct sk_buff *skb, *list = NULL;
4821     + bool rot_last = false;
4822     int ix;
4823     u8 annotation;
4824    
4825     @@ -243,15 +244,17 @@ static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to,
4826     skb->next = list;
4827     list = skb;
4828    
4829     - if (annotation & RXRPC_TX_ANNO_LAST)
4830     + if (annotation & RXRPC_TX_ANNO_LAST) {
4831     set_bit(RXRPC_CALL_TX_LAST, &call->flags);
4832     + rot_last = true;
4833     + }
4834     if ((annotation & RXRPC_TX_ANNO_MASK) != RXRPC_TX_ANNO_ACK)
4835     summary->nr_rot_new_acks++;
4836     }
4837    
4838     spin_unlock(&call->lock);
4839    
4840     - trace_rxrpc_transmit(call, (test_bit(RXRPC_CALL_TX_LAST, &call->flags) ?
4841     + trace_rxrpc_transmit(call, (rot_last ?
4842     rxrpc_transmit_rotate_last :
4843     rxrpc_transmit_rotate));
4844     wake_up(&call->waitq);
4845     @@ -262,6 +265,8 @@ static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to,
4846     skb->next = NULL;
4847     rxrpc_free_skb(skb, rxrpc_skb_tx_freed);
4848     }
4849     +
4850     + return rot_last;
4851     }
4852    
4853     /*
4854     @@ -332,11 +337,11 @@ static bool rxrpc_receiving_reply(struct rxrpc_call *call)
4855     ktime_get_real());
4856     }
4857    
4858     - if (!test_bit(RXRPC_CALL_TX_LAST, &call->flags))
4859     - rxrpc_rotate_tx_window(call, top, &summary);
4860     if (!test_bit(RXRPC_CALL_TX_LAST, &call->flags)) {
4861     - rxrpc_proto_abort("TXL", call, top);
4862     - return false;
4863     + if (!rxrpc_rotate_tx_window(call, top, &summary)) {
4864     + rxrpc_proto_abort("TXL", call, top);
4865     + return false;
4866     + }
4867     }
4868     if (!rxrpc_end_tx_phase(call, true, "ETD"))
4869     return false;
4870     @@ -803,6 +808,16 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
4871     rxrpc_propose_ack_respond_to_ack);
4872     }
4873    
4874     + /* Discard any out-of-order or duplicate ACKs. */
4875     + if (before_eq(sp->hdr.serial, call->acks_latest)) {
4876     + _debug("discard ACK %d <= %d",
4877     + sp->hdr.serial, call->acks_latest);
4878     + return;
4879     + }
4880     + call->acks_latest_ts = skb->tstamp;
4881     + call->acks_latest = sp->hdr.serial;
4882     +
4883     + /* Parse rwind and mtu sizes if provided. */
4884     ioffset = offset + nr_acks + 3;
4885     if (skb->len >= ioffset + sizeof(buf.info)) {
4886     if (skb_copy_bits(skb, ioffset, &buf.info, sizeof(buf.info)) < 0)
4887     @@ -824,23 +839,18 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
4888     return;
4889     }
4890    
4891     - /* Discard any out-of-order or duplicate ACKs. */
4892     - if (before_eq(sp->hdr.serial, call->acks_latest)) {
4893     - _debug("discard ACK %d <= %d",
4894     - sp->hdr.serial, call->acks_latest);
4895     - return;
4896     - }
4897     - call->acks_latest_ts = skb->tstamp;
4898     - call->acks_latest = sp->hdr.serial;
4899     -
4900     if (before(hard_ack, call->tx_hard_ack) ||
4901     after(hard_ack, call->tx_top))
4902     return rxrpc_proto_abort("AKW", call, 0);
4903     if (nr_acks > call->tx_top - hard_ack)
4904     return rxrpc_proto_abort("AKN", call, 0);
4905    
4906     - if (after(hard_ack, call->tx_hard_ack))
4907     - rxrpc_rotate_tx_window(call, hard_ack, &summary);
4908     + if (after(hard_ack, call->tx_hard_ack)) {
4909     + if (rxrpc_rotate_tx_window(call, hard_ack, &summary)) {
4910     + rxrpc_end_tx_phase(call, false, "ETA");
4911     + return;
4912     + }
4913     + }
4914    
4915     if (nr_acks > 0) {
4916     if (skb_copy_bits(skb, offset, buf.acks, nr_acks) < 0)
4917     @@ -849,11 +859,6 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
4918     &summary);
4919     }
4920    
4921     - if (test_bit(RXRPC_CALL_TX_LAST, &call->flags)) {
4922     - rxrpc_end_tx_phase(call, false, "ETA");
4923     - return;
4924     - }
4925     -
4926     if (call->rxtx_annotations[call->tx_top & RXRPC_RXTX_BUFF_MASK] &
4927     RXRPC_TX_ANNO_LAST &&
4928     summary.nr_acks == call->tx_top - hard_ack &&
4929     @@ -875,8 +880,7 @@ static void rxrpc_input_ackall(struct rxrpc_call *call, struct sk_buff *skb)
4930    
4931     _proto("Rx ACKALL %%%u", sp->hdr.serial);
4932    
4933     - rxrpc_rotate_tx_window(call, call->tx_top, &summary);
4934     - if (test_bit(RXRPC_CALL_TX_LAST, &call->flags))
4935     + if (rxrpc_rotate_tx_window(call, call->tx_top, &summary))
4936     rxrpc_end_tx_phase(call, false, "ETL");
4937     }
4938    
4939     diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c
4940     index 44941e25f3ad..729c0e4eca21 100644
4941     --- a/net/sched/sch_gred.c
4942     +++ b/net/sched/sch_gred.c
4943     @@ -411,7 +411,7 @@ static int gred_change(struct Qdisc *sch, struct nlattr *opt)
4944     if (tb[TCA_GRED_PARMS] == NULL && tb[TCA_GRED_STAB] == NULL) {
4945     if (tb[TCA_GRED_LIMIT] != NULL)
4946     sch->limit = nla_get_u32(tb[TCA_GRED_LIMIT]);
4947     - return gred_change_table_def(sch, opt);
4948     + return gred_change_table_def(sch, tb[TCA_GRED_DPS]);
4949     }
4950    
4951     if (tb[TCA_GRED_PARMS] == NULL ||
4952     diff --git a/net/sctp/socket.c b/net/sctp/socket.c
4953     index 64d2d9ea2f8c..9827ba4b9f74 100644
4954     --- a/net/sctp/socket.c
4955     +++ b/net/sctp/socket.c
4956     @@ -185,13 +185,13 @@ static void sctp_for_each_tx_datachunk(struct sctp_association *asoc,
4957     list_for_each_entry(chunk, &t->transmitted, transmitted_list)
4958     cb(chunk);
4959    
4960     - list_for_each_entry(chunk, &q->retransmit, list)
4961     + list_for_each_entry(chunk, &q->retransmit, transmitted_list)
4962     cb(chunk);
4963    
4964     - list_for_each_entry(chunk, &q->sacked, list)
4965     + list_for_each_entry(chunk, &q->sacked, transmitted_list)
4966     cb(chunk);
4967    
4968     - list_for_each_entry(chunk, &q->abandoned, list)
4969     + list_for_each_entry(chunk, &q->abandoned, transmitted_list)
4970     cb(chunk);
4971    
4972     list_for_each_entry(chunk, &q->out_chunk_list, list)
4973     @@ -248,11 +248,10 @@ struct sctp_association *sctp_id2assoc(struct sock *sk, sctp_assoc_t id)
4974    
4975     spin_lock_bh(&sctp_assocs_id_lock);
4976     asoc = (struct sctp_association *)idr_find(&sctp_assocs_id, (int)id);
4977     + if (asoc && (asoc->base.sk != sk || asoc->base.dead))
4978     + asoc = NULL;
4979     spin_unlock_bh(&sctp_assocs_id_lock);
4980    
4981     - if (!asoc || (asoc->base.sk != sk) || asoc->base.dead)
4982     - return NULL;
4983     -
4984     return asoc;
4985     }
4986    
4987     diff --git a/net/socket.c b/net/socket.c
4988     index 35fa349ba274..d9e2989c10c4 100644
4989     --- a/net/socket.c
4990     +++ b/net/socket.c
4991     @@ -2774,9 +2774,14 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32)
4992     copy_in_user(&rxnfc->fs.ring_cookie,
4993     &compat_rxnfc->fs.ring_cookie,
4994     (void __user *)(&rxnfc->fs.location + 1) -
4995     - (void __user *)&rxnfc->fs.ring_cookie) ||
4996     - copy_in_user(&rxnfc->rule_cnt, &compat_rxnfc->rule_cnt,
4997     - sizeof(rxnfc->rule_cnt)))
4998     + (void __user *)&rxnfc->fs.ring_cookie))
4999     + return -EFAULT;
5000     + if (ethcmd == ETHTOOL_GRXCLSRLALL) {
5001     + if (put_user(rule_cnt, &rxnfc->rule_cnt))
5002     + return -EFAULT;
5003     + } else if (copy_in_user(&rxnfc->rule_cnt,
5004     + &compat_rxnfc->rule_cnt,
5005     + sizeof(rxnfc->rule_cnt)))
5006     return -EFAULT;
5007     }
5008    
5009     diff --git a/net/tipc/socket.c b/net/tipc/socket.c
5010     index 25bc5c30d7fb..9d3f047305ce 100644
5011     --- a/net/tipc/socket.c
5012     +++ b/net/tipc/socket.c
5013     @@ -2277,8 +2277,8 @@ void tipc_sk_reinit(struct net *net)
5014    
5015     do {
5016     tsk = ERR_PTR(rhashtable_walk_start(&iter));
5017     - if (tsk)
5018     - continue;
5019     + if (IS_ERR(tsk))
5020     + goto walk_stop;
5021    
5022     while ((tsk = rhashtable_walk_next(&iter)) && !IS_ERR(tsk)) {
5023     spin_lock_bh(&tsk->sk.sk_lock.slock);
5024     @@ -2287,7 +2287,7 @@ void tipc_sk_reinit(struct net *net)
5025     msg_set_orignode(msg, tn->own_addr);
5026     spin_unlock_bh(&tsk->sk.sk_lock.slock);
5027     }
5028     -
5029     +walk_stop:
5030     rhashtable_walk_stop(&iter);
5031     } while (tsk == ERR_PTR(-EAGAIN));
5032     }
5033     diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
5034     index 271cd66e4b3b..c2646446e157 100644
5035     --- a/net/tipc/subscr.c
5036     +++ b/net/tipc/subscr.c
5037     @@ -256,7 +256,9 @@ static void tipc_subscrp_delete(struct tipc_subscription *sub)
5038     static void tipc_subscrp_cancel(struct tipc_subscr *s,
5039     struct tipc_subscriber *subscriber)
5040     {
5041     + tipc_subscrb_get(subscriber);
5042     tipc_subscrb_subscrp_delete(subscriber, s);
5043     + tipc_subscrb_put(subscriber);
5044     }
5045    
5046     static struct tipc_subscription *tipc_subscrp_create(struct net *net,
5047     diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
5048     index 0e91ec49d3da..549d0a4083b3 100644
5049     --- a/net/wireless/nl80211.c
5050     +++ b/net/wireless/nl80211.c
5051     @@ -3422,6 +3422,7 @@ static bool ht_rateset_to_mask(struct ieee80211_supported_band *sband,
5052     return false;
5053    
5054     /* check availability */
5055     + ridx = array_index_nospec(ridx, IEEE80211_HT_MCS_MASK_LEN);
5056     if (sband->ht_cap.mcs.rx_mask[ridx] & rbit)
5057     mcs[ridx] |= rbit;
5058     else
5059     diff --git a/net/wireless/reg.c b/net/wireless/reg.c
5060     index 5dbac3749738..36d1d25082e3 100644
5061     --- a/net/wireless/reg.c
5062     +++ b/net/wireless/reg.c
5063     @@ -2298,6 +2298,7 @@ static int regulatory_hint_core(const char *alpha2)
5064     request->alpha2[0] = alpha2[0];
5065     request->alpha2[1] = alpha2[1];
5066     request->initiator = NL80211_REGDOM_SET_BY_CORE;
5067     + request->wiphy_idx = WIPHY_IDX_INVALID;
5068    
5069     queue_regulatory_request(request);
5070    
5071     diff --git a/net/wireless/scan.c b/net/wireless/scan.c
5072     index 35ad69fd0838..435f904c1be5 100644
5073     --- a/net/wireless/scan.c
5074     +++ b/net/wireless/scan.c
5075     @@ -978,13 +978,23 @@ cfg80211_bss_update(struct cfg80211_registered_device *rdev,
5076     return NULL;
5077     }
5078    
5079     +/*
5080     + * Update RX channel information based on the available frame payload
5081     + * information. This is mainly for the 2.4 GHz band where frames can be received
5082     + * from neighboring channels and the Beacon frames use the DSSS Parameter Set
5083     + * element to indicate the current (transmitting) channel, but this might also
5084     + * be needed on other bands if RX frequency does not match with the actual
5085     + * operating channel of a BSS.
5086     + */
5087     static struct ieee80211_channel *
5088     cfg80211_get_bss_channel(struct wiphy *wiphy, const u8 *ie, size_t ielen,
5089     - struct ieee80211_channel *channel)
5090     + struct ieee80211_channel *channel,
5091     + enum nl80211_bss_scan_width scan_width)
5092     {
5093     const u8 *tmp;
5094     u32 freq;
5095     int channel_number = -1;
5096     + struct ieee80211_channel *alt_channel;
5097    
5098     tmp = cfg80211_find_ie(WLAN_EID_DS_PARAMS, ie, ielen);
5099     if (tmp && tmp[1] == 1) {
5100     @@ -998,16 +1008,45 @@ cfg80211_get_bss_channel(struct wiphy *wiphy, const u8 *ie, size_t ielen,
5101     }
5102     }
5103    
5104     - if (channel_number < 0)
5105     + if (channel_number < 0) {
5106     + /* No channel information in frame payload */
5107     return channel;
5108     + }
5109    
5110     freq = ieee80211_channel_to_frequency(channel_number, channel->band);
5111     - channel = ieee80211_get_channel(wiphy, freq);
5112     - if (!channel)
5113     - return NULL;
5114     - if (channel->flags & IEEE80211_CHAN_DISABLED)
5115     + alt_channel = ieee80211_get_channel(wiphy, freq);
5116     + if (!alt_channel) {
5117     + if (channel->band == NL80211_BAND_2GHZ) {
5118     + /*
5119     + * Better not allow unexpected channels when that could
5120     + * be going beyond the 1-11 range (e.g., discovering
5121     + * BSS on channel 12 when radio is configured for
5122     + * channel 11.
5123     + */
5124     + return NULL;
5125     + }
5126     +
5127     + /* No match for the payload channel number - ignore it */
5128     + return channel;
5129     + }
5130     +
5131     + if (scan_width == NL80211_BSS_CHAN_WIDTH_10 ||
5132     + scan_width == NL80211_BSS_CHAN_WIDTH_5) {
5133     + /*
5134     + * Ignore channel number in 5 and 10 MHz channels where there
5135     + * may not be an n:1 or 1:n mapping between frequencies and
5136     + * channel numbers.
5137     + */
5138     + return channel;
5139     + }
5140     +
5141     + /*
5142     + * Use the channel determined through the payload channel number
5143     + * instead of the RX channel reported by the driver.
5144     + */
5145     + if (alt_channel->flags & IEEE80211_CHAN_DISABLED)
5146     return NULL;
5147     - return channel;
5148     + return alt_channel;
5149     }
5150    
5151     /* Returned bss is reference counted and must be cleaned up appropriately. */
5152     @@ -1032,7 +1071,8 @@ cfg80211_inform_bss_data(struct wiphy *wiphy,
5153     (data->signal < 0 || data->signal > 100)))
5154     return NULL;
5155    
5156     - channel = cfg80211_get_bss_channel(wiphy, ie, ielen, data->chan);
5157     + channel = cfg80211_get_bss_channel(wiphy, ie, ielen, data->chan,
5158     + data->scan_width);
5159     if (!channel)
5160     return NULL;
5161    
5162     @@ -1130,7 +1170,7 @@ cfg80211_inform_bss_frame_data(struct wiphy *wiphy,
5163     return NULL;
5164    
5165     channel = cfg80211_get_bss_channel(wiphy, mgmt->u.beacon.variable,
5166     - ielen, data->chan);
5167     + ielen, data->chan, data->scan_width);
5168     if (!channel)
5169     return NULL;
5170    
5171     diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
5172     index 6e768093d7c8..026770884d46 100644
5173     --- a/net/xfrm/xfrm_user.c
5174     +++ b/net/xfrm/xfrm_user.c
5175     @@ -151,10 +151,16 @@ static int verify_newsa_info(struct xfrm_usersa_info *p,
5176     err = -EINVAL;
5177     switch (p->family) {
5178     case AF_INET:
5179     + if (p->sel.prefixlen_d > 32 || p->sel.prefixlen_s > 32)
5180     + goto out;
5181     +
5182     break;
5183    
5184     case AF_INET6:
5185     #if IS_ENABLED(CONFIG_IPV6)
5186     + if (p->sel.prefixlen_d > 128 || p->sel.prefixlen_s > 128)
5187     + goto out;
5188     +
5189     break;
5190     #else
5191     err = -EAFNOSUPPORT;
5192     @@ -1316,10 +1322,16 @@ static int verify_newpolicy_info(struct xfrm_userpolicy_info *p)
5193    
5194     switch (p->sel.family) {
5195     case AF_INET:
5196     + if (p->sel.prefixlen_d > 32 || p->sel.prefixlen_s > 32)
5197     + return -EINVAL;
5198     +
5199     break;
5200    
5201     case AF_INET6:
5202     #if IS_ENABLED(CONFIG_IPV6)
5203     + if (p->sel.prefixlen_d > 128 || p->sel.prefixlen_s > 128)
5204     + return -EINVAL;
5205     +
5206     break;
5207     #else
5208     return -EAFNOSUPPORT;
5209     @@ -1400,6 +1412,9 @@ static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
5210     (ut[i].family != prev_family))
5211     return -EINVAL;
5212    
5213     + if (ut[i].mode >= XFRM_MODE_MAX)
5214     + return -EINVAL;
5215     +
5216     prev_family = ut[i].family;
5217    
5218     switch (ut[i].family) {
5219     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
5220     index ca2945711dbe..cc48800f95e0 100644
5221     --- a/sound/pci/hda/patch_realtek.c
5222     +++ b/sound/pci/hda/patch_realtek.c
5223     @@ -3499,7 +3499,7 @@ static void alc280_fixup_hp_gpio4(struct hda_codec *codec,
5224     }
5225     }
5226    
5227     -#if IS_REACHABLE(INPUT)
5228     +#if IS_REACHABLE(CONFIG_INPUT)
5229     static void gpio2_mic_hotkey_event(struct hda_codec *codec,
5230     struct hda_jack_callback *event)
5231     {
5232     @@ -6392,8 +6392,11 @@ static int patch_alc269(struct hda_codec *codec)
5233     break;
5234     case 0x10ec0225:
5235     case 0x10ec0295:
5236     + spec->codec_variant = ALC269_TYPE_ALC225;
5237     + break;
5238     case 0x10ec0299:
5239     spec->codec_variant = ALC269_TYPE_ALC225;
5240     + spec->gen.mixer_nid = 0; /* no loopback on ALC299 */
5241     break;
5242     case 0x10ec0234:
5243     case 0x10ec0274:
5244     diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c
5245     index bef8a4546c12..b0c154d5924b 100644
5246     --- a/sound/soc/intel/skylake/skl-topology.c
5247     +++ b/sound/soc/intel/skylake/skl-topology.c
5248     @@ -2325,7 +2325,7 @@ static int skl_tplg_get_manifest_tkn(struct device *dev,
5249    
5250     if (ret < 0)
5251     return ret;
5252     - tkn_count += ret;
5253     + tkn_count = ret;
5254    
5255     tuple_size += tkn_count *
5256     sizeof(struct snd_soc_tplg_vendor_string_elem);
5257     diff --git a/tools/perf/Makefile b/tools/perf/Makefile
5258     index 32a64e619028..cd86fd7b35c4 100644
5259     --- a/tools/perf/Makefile
5260     +++ b/tools/perf/Makefile
5261     @@ -83,10 +83,10 @@ endif # has_clean
5262     endif # MAKECMDGOALS
5263    
5264     #
5265     -# The clean target is not really parallel, don't print the jobs info:
5266     +# Explicitly disable parallelism for the clean target.
5267     #
5268     clean:
5269     - $(make)
5270     + $(make) -j1
5271    
5272     #
5273     # The build-test target is not really parallel, don't print the jobs info,
5274     diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
5275     index ade7213943ad..03239956987f 100644
5276     --- a/tools/perf/tests/builtin-test.c
5277     +++ b/tools/perf/tests/builtin-test.c
5278     @@ -335,7 +335,7 @@ static int test_and_print(struct test *t, bool force_skip, int subtest)
5279     if (!t->subtest.get_nr)
5280     pr_debug("%s:", t->desc);
5281     else
5282     - pr_debug("%s subtest %d:", t->desc, subtest);
5283     + pr_debug("%s subtest %d:", t->desc, subtest + 1);
5284    
5285     switch (err) {
5286     case TEST_OK:
5287     @@ -413,7 +413,7 @@ static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)
5288     for (subi = 0; subi < subn; subi++) {
5289     pr_info("%2d.%1d: %-*s:", i, subi + 1, subw,
5290     t->subtest.get_desc(subi));
5291     - err = test_and_print(t, skip, subi + 1);
5292     + err = test_and_print(t, skip, subi);
5293     if (err != TEST_OK && t->subtest.skip_if_fail)
5294     skip = true;
5295     }
5296     diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c
5297     index 01a5ba2788c6..b0d005d295a9 100644
5298     --- a/tools/perf/tests/task-exit.c
5299     +++ b/tools/perf/tests/task-exit.c
5300     @@ -82,7 +82,7 @@ int test__task_exit(int subtest __maybe_unused)
5301    
5302     evsel = perf_evlist__first(evlist);
5303     evsel->attr.task = 1;
5304     - evsel->attr.sample_freq = 0;
5305     + evsel->attr.sample_freq = 1;
5306     evsel->attr.inherit = 0;
5307     evsel->attr.watermark = 0;
5308     evsel->attr.wakeup_events = 1;
5309     diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
5310     index a38227eb5450..3336cbc6ec48 100644
5311     --- a/tools/perf/util/annotate.c
5312     +++ b/tools/perf/util/annotate.c
5313     @@ -495,9 +495,19 @@ static struct ins *ins__find(const char *name)
5314     int symbol__alloc_hist(struct symbol *sym)
5315     {
5316     struct annotation *notes = symbol__annotation(sym);
5317     - const size_t size = symbol__size(sym);
5318     + size_t size = symbol__size(sym);
5319     size_t sizeof_sym_hist;
5320    
5321     + /*
5322     + * Add buffer of one element for zero length symbol.
5323     + * When sample is taken from first instruction of
5324     + * zero length symbol, perf still resolves it and
5325     + * shows symbol name in perf report and allows to
5326     + * annotate it.
5327     + */
5328     + if (size == 0)
5329     + size = 1;
5330     +
5331     /* Check for overflow when calculating sizeof_sym_hist */
5332     if (size > (SIZE_MAX - sizeof(struct sym_hist)) / sizeof(u64))
5333     return -1;
5334     diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
5335     index 3be8c489884e..f7128c2a6386 100644
5336     --- a/tools/perf/util/evsel.c
5337     +++ b/tools/perf/util/evsel.c
5338     @@ -263,8 +263,20 @@ struct perf_evsel *perf_evsel__new_cycles(void)
5339     struct perf_evsel *evsel;
5340    
5341     event_attr_init(&attr);
5342     + /*
5343     + * Unnamed union member, not supported as struct member named
5344     + * initializer in older compilers such as gcc 4.4.7
5345     + *
5346     + * Just for probing the precise_ip:
5347     + */
5348     + attr.sample_period = 1;
5349    
5350     perf_event_attr__set_max_precise_ip(&attr);
5351     + /*
5352     + * Now let the usual logic to set up the perf_event_attr defaults
5353     + * to kick in when we return and before perf_evsel__open() is called.
5354     + */
5355     + attr.sample_period = 0;
5356    
5357     evsel = perf_evsel__new(&attr);
5358     if (evsel == NULL)
5359     diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
5360     index c93daccec755..a7452fd3b6ee 100644
5361     --- a/tools/perf/util/probe-event.c
5362     +++ b/tools/perf/util/probe-event.c
5363     @@ -615,7 +615,7 @@ static int post_process_probe_trace_point(struct probe_trace_point *tp,
5364     struct map *map, unsigned long offs)
5365     {
5366     struct symbol *sym;
5367     - u64 addr = tp->address + tp->offset - offs;
5368     + u64 addr = tp->address - offs;
5369    
5370     sym = map__find_symbol(map, addr);
5371     if (!sym)
5372     diff --git a/tools/virtio/ringtest/ptr_ring.c b/tools/virtio/ringtest/ptr_ring.c
5373     index 635b07b4fdd3..b4a2e6af515f 100644
5374     --- a/tools/virtio/ringtest/ptr_ring.c
5375     +++ b/tools/virtio/ringtest/ptr_ring.c
5376     @@ -15,24 +15,41 @@
5377     #define unlikely(x) (__builtin_expect(!!(x), 0))
5378     #define likely(x) (__builtin_expect(!!(x), 1))
5379     #define ALIGN(x, a) (((x) + (a) - 1) / (a) * (a))
5380     +#define SIZE_MAX (~(size_t)0)
5381     +
5382     typedef pthread_spinlock_t spinlock_t;
5383    
5384     typedef int gfp_t;
5385     -static void *kmalloc(unsigned size, gfp_t gfp)
5386     -{
5387     - return memalign(64, size);
5388     -}
5389     +#define __GFP_ZERO 0x1
5390    
5391     -static void *kzalloc(unsigned size, gfp_t gfp)
5392     +static void *kmalloc(unsigned size, gfp_t gfp)
5393     {
5394     void *p = memalign(64, size);
5395     if (!p)
5396     return p;
5397     - memset(p, 0, size);
5398    
5399     + if (gfp & __GFP_ZERO)
5400     + memset(p, 0, size);
5401     return p;
5402     }
5403    
5404     +static inline void *kzalloc(unsigned size, gfp_t flags)
5405     +{
5406     + return kmalloc(size, flags | __GFP_ZERO);
5407     +}
5408     +
5409     +static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags)
5410     +{
5411     + if (size != 0 && n > SIZE_MAX / size)
5412     + return NULL;
5413     + return kmalloc(n * size, flags);
5414     +}
5415     +
5416     +static inline void *kcalloc(size_t n, size_t size, gfp_t flags)
5417     +{
5418     + return kmalloc_array(n, size, flags | __GFP_ZERO);
5419     +}
5420     +
5421     static void kfree(void *p)
5422     {
5423     if (p)