Magellan Linux

Contents of /trunk/kernel-alx/patches-4.14/0178-4.14.79-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (show annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 6 months ago) by niro
File size: 154860 byte(s)
-added up to patches-4.14.79
1 diff --git a/Makefile b/Makefile
2 index 89574ee68d6b..57a007bf1181 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 14
9 -SUBLEVEL = 78
10 +SUBLEVEL = 79
11 EXTRAVERSION =
12 NAME = Petit Gorille
13
14 @@ -487,6 +487,8 @@ CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN)
15 endif
16 KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
17 KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC)
18 +KBUILD_CFLAGS += $(call cc-option, -no-integrated-as)
19 +KBUILD_AFLAGS += $(call cc-option, -no-integrated-as)
20 endif
21
22 RETPOLINE_CFLAGS_GCC := -mindirect-branch=thunk-extern -mindirect-branch-register
23 @@ -721,8 +723,6 @@ KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
24 # See modpost pattern 2
25 KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
26 KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
27 -KBUILD_CFLAGS += $(call cc-option, -no-integrated-as)
28 -KBUILD_AFLAGS += $(call cc-option, -no-integrated-as)
29 else
30
31 # These warnings generated too much noise in a regular build.
32 diff --git a/arch/Kconfig b/arch/Kconfig
33 index 40dc31fea90c..77b3e21c4844 100644
34 --- a/arch/Kconfig
35 +++ b/arch/Kconfig
36 @@ -965,4 +965,12 @@ config REFCOUNT_FULL
37 against various use-after-free conditions that can be used in
38 security flaw exploits.
39
40 +config HAVE_ARCH_COMPILER_H
41 + bool
42 + help
43 + An architecture can select this if it provides an
44 + asm/compiler.h header that should be included after
45 + linux/compiler-*.h in order to override macro definitions that those
46 + headers generally provide.
47 +
48 source "kernel/gcov/Kconfig"
49 diff --git a/arch/arm/boot/dts/bcm63138.dtsi b/arch/arm/boot/dts/bcm63138.dtsi
50 index 43ee992ccdcf..6df61518776f 100644
51 --- a/arch/arm/boot/dts/bcm63138.dtsi
52 +++ b/arch/arm/boot/dts/bcm63138.dtsi
53 @@ -106,21 +106,23 @@
54 global_timer: timer@1e200 {
55 compatible = "arm,cortex-a9-global-timer";
56 reg = <0x1e200 0x20>;
57 - interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
58 + interrupts = <GIC_PPI 11 IRQ_TYPE_EDGE_RISING>;
59 clocks = <&axi_clk>;
60 };
61
62 local_timer: local-timer@1e600 {
63 compatible = "arm,cortex-a9-twd-timer";
64 reg = <0x1e600 0x20>;
65 - interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>;
66 + interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) |
67 + IRQ_TYPE_EDGE_RISING)>;
68 clocks = <&axi_clk>;
69 };
70
71 twd_watchdog: watchdog@1e620 {
72 compatible = "arm,cortex-a9-twd-wdt";
73 reg = <0x1e620 0x20>;
74 - interrupts = <GIC_PPI 14 IRQ_TYPE_LEVEL_HIGH>;
75 + interrupts = <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) |
76 + IRQ_TYPE_LEVEL_HIGH)>;
77 };
78
79 armpll: armpll {
80 @@ -158,7 +160,7 @@
81 serial0: serial@600 {
82 compatible = "brcm,bcm6345-uart";
83 reg = <0x600 0x1b>;
84 - interrupts = <GIC_SPI 32 0>;
85 + interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
86 clocks = <&periph_clk>;
87 clock-names = "periph";
88 status = "disabled";
89 @@ -167,7 +169,7 @@
90 serial1: serial@620 {
91 compatible = "brcm,bcm6345-uart";
92 reg = <0x620 0x1b>;
93 - interrupts = <GIC_SPI 33 0>;
94 + interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
95 clocks = <&periph_clk>;
96 clock-names = "periph";
97 status = "disabled";
98 @@ -180,7 +182,7 @@
99 reg = <0x2000 0x600>, <0xf0 0x10>;
100 reg-names = "nand", "nand-int-base";
101 status = "disabled";
102 - interrupts = <GIC_SPI 38 0>;
103 + interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
104 interrupt-names = "nand";
105 };
106
107 diff --git a/arch/arm/boot/dts/imx53-qsb-common.dtsi b/arch/arm/boot/dts/imx53-qsb-common.dtsi
108 index 683dcbe27cbd..8c11190c5218 100644
109 --- a/arch/arm/boot/dts/imx53-qsb-common.dtsi
110 +++ b/arch/arm/boot/dts/imx53-qsb-common.dtsi
111 @@ -130,6 +130,17 @@
112 };
113 };
114
115 +&cpu0 {
116 + /* CPU rated to 1GHz, not 1.2GHz as per the default settings */
117 + operating-points = <
118 + /* kHz uV */
119 + 166666 850000
120 + 400000 900000
121 + 800000 1050000
122 + 1000000 1200000
123 + >;
124 +};
125 +
126 &esdhc1 {
127 pinctrl-names = "default";
128 pinctrl-0 = <&pinctrl_esdhc1>;
129 diff --git a/arch/arm/boot/dts/r8a7790.dtsi b/arch/arm/boot/dts/r8a7790.dtsi
130 index 16358bf8d1db..97e8b9b0b750 100644
131 --- a/arch/arm/boot/dts/r8a7790.dtsi
132 +++ b/arch/arm/boot/dts/r8a7790.dtsi
133 @@ -153,7 +153,7 @@
134
135 trips {
136 cpu-crit {
137 - temperature = <115000>;
138 + temperature = <95000>;
139 hysteresis = <0>;
140 type = "critical";
141 };
142 diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi
143 index 914f59166a99..2780e68a853b 100644
144 --- a/arch/arm/boot/dts/tegra20.dtsi
145 +++ b/arch/arm/boot/dts/tegra20.dtsi
146 @@ -706,7 +706,7 @@
147 phy_type = "ulpi";
148 clocks = <&tegra_car TEGRA20_CLK_USB2>,
149 <&tegra_car TEGRA20_CLK_PLL_U>,
150 - <&tegra_car TEGRA20_CLK_CDEV2>;
151 + <&tegra_car TEGRA20_CLK_PLL_P_OUT4>;
152 clock-names = "reg", "pll_u", "ulpi-link";
153 resets = <&tegra_car 58>, <&tegra_car 22>;
154 reset-names = "usb", "utmi-pads";
155 diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
156 index fc91205ff46c..5bf9443cfbaa 100644
157 --- a/arch/arm/mm/ioremap.c
158 +++ b/arch/arm/mm/ioremap.c
159 @@ -473,7 +473,7 @@ void pci_ioremap_set_mem_type(int mem_type)
160
161 int pci_ioremap_io(unsigned int offset, phys_addr_t phys_addr)
162 {
163 - BUG_ON(offset + SZ_64K > IO_SPACE_LIMIT);
164 + BUG_ON(offset + SZ_64K - 1 > IO_SPACE_LIMIT);
165
166 return ioremap_page_range(PCI_IO_VIRT_BASE + offset,
167 PCI_IO_VIRT_BASE + offset + SZ_64K,
168 diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
169 index 6cb0fa92a651..9f6ae9686dac 100644
170 --- a/arch/arm64/mm/hugetlbpage.c
171 +++ b/arch/arm64/mm/hugetlbpage.c
172 @@ -118,11 +118,14 @@ static pte_t get_clear_flush(struct mm_struct *mm,
173
174 /*
175 * If HW_AFDBM is enabled, then the HW could turn on
176 - * the dirty bit for any page in the set, so check
177 - * them all. All hugetlb entries are already young.
178 + * the dirty or accessed bit for any page in the set,
179 + * so check them all.
180 */
181 if (pte_dirty(pte))
182 orig_pte = pte_mkdirty(orig_pte);
183 +
184 + if (pte_young(pte))
185 + orig_pte = pte_mkyoung(orig_pte);
186 }
187
188 if (valid)
189 @@ -347,10 +350,13 @@ int huge_ptep_set_access_flags(struct vm_area_struct *vma,
190 if (!pte_same(orig_pte, pte))
191 changed = 1;
192
193 - /* Make sure we don't lose the dirty state */
194 + /* Make sure we don't lose the dirty or young state */
195 if (pte_dirty(orig_pte))
196 pte = pte_mkdirty(pte);
197
198 + if (pte_young(orig_pte))
199 + pte = pte_mkyoung(pte);
200 +
201 hugeprot = pte_pgprot(pte);
202 for (i = 0; i < ncontig; i++, ptep++, addr += pgsize, pfn += dpfn)
203 set_pte_at(vma->vm_mm, addr, ptep, pfn_pte(pfn, hugeprot));
204 diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
205 index c82457b0e733..23e3d3e0ee5b 100644
206 --- a/arch/mips/Kconfig
207 +++ b/arch/mips/Kconfig
208 @@ -29,6 +29,7 @@ config MIPS
209 select GENERIC_SMP_IDLE_THREAD
210 select GENERIC_TIME_VSYSCALL
211 select HANDLE_DOMAIN_IRQ
212 + select HAVE_ARCH_COMPILER_H
213 select HAVE_ARCH_JUMP_LABEL
214 select HAVE_ARCH_KGDB
215 select HAVE_ARCH_MMAP_RND_BITS if MMU
216 diff --git a/arch/mips/include/asm/compiler.h b/arch/mips/include/asm/compiler.h
217 index e081a265f422..cc2eb1b06050 100644
218 --- a/arch/mips/include/asm/compiler.h
219 +++ b/arch/mips/include/asm/compiler.h
220 @@ -8,6 +8,41 @@
221 #ifndef _ASM_COMPILER_H
222 #define _ASM_COMPILER_H
223
224 +/*
225 + * With GCC 4.5 onwards we can use __builtin_unreachable to indicate to the
226 + * compiler that a particular code path will never be hit. This allows it to be
227 + * optimised out of the generated binary.
228 + *
229 + * Unfortunately at least GCC 4.6.3 through 7.3.0 inclusive suffer from a bug
230 + * that can lead to instructions from beyond an unreachable statement being
231 + * incorrectly reordered into earlier delay slots if the unreachable statement
232 + * is the only content of a case in a switch statement. This can lead to
233 + * seemingly random behaviour, such as invalid memory accesses from incorrectly
234 + * reordered loads or stores. See this potential GCC fix for details:
235 + *
236 + * https://gcc.gnu.org/ml/gcc-patches/2015-09/msg00360.html
237 + *
238 + * It is unclear whether GCC 8 onwards suffer from the same issue - nothing
239 + * relevant is mentioned in GCC 8 release notes and nothing obviously relevant
240 + * stands out in GCC commit logs, but these newer GCC versions generate very
241 + * different code for the testcase which doesn't exhibit the bug.
242 + *
243 + * GCC also handles stack allocation suboptimally when calling noreturn
244 + * functions or calling __builtin_unreachable():
245 + *
246 + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82365
247 + *
248 + * We work around both of these issues by placing a volatile asm statement,
249 + * which GCC is prevented from reordering past, prior to __builtin_unreachable
250 + * calls.
251 + *
252 + * The .insn statement is required to ensure that any branches to the
253 + * statement, which sadly must be kept due to the asm statement, are known to
254 + * be branches to code and satisfy linker requirements for microMIPS kernels.
255 + */
256 +#undef barrier_before_unreachable
257 +#define barrier_before_unreachable() asm volatile(".insn")
258 +
259 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
260 #define GCC_IMM_ASM() "n"
261 #define GCC_REG_ACCUM "$0"
262 diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h
263 index d5f2ee882f74..66c72b356ac0 100644
264 --- a/arch/powerpc/include/asm/topology.h
265 +++ b/arch/powerpc/include/asm/topology.h
266 @@ -81,6 +81,9 @@ static inline int numa_update_cpu_topology(bool cpus_locked)
267 {
268 return 0;
269 }
270 +
271 +static inline void update_numa_cpu_lookup_table(unsigned int cpu, int node) {}
272 +
273 #endif /* CONFIG_NUMA */
274
275 #if defined(CONFIG_NUMA) && defined(CONFIG_PPC_SPLPAR)
276 diff --git a/arch/sparc/mm/tlb.c b/arch/sparc/mm/tlb.c
277 index 847ddffbf38a..b5cfab711651 100644
278 --- a/arch/sparc/mm/tlb.c
279 +++ b/arch/sparc/mm/tlb.c
280 @@ -163,13 +163,10 @@ static void tlb_batch_pmd_scan(struct mm_struct *mm, unsigned long vaddr,
281 pte_unmap(pte);
282 }
283
284 -void set_pmd_at(struct mm_struct *mm, unsigned long addr,
285 - pmd_t *pmdp, pmd_t pmd)
286 -{
287 - pmd_t orig = *pmdp;
288 -
289 - *pmdp = pmd;
290
291 +static void __set_pmd_acct(struct mm_struct *mm, unsigned long addr,
292 + pmd_t orig, pmd_t pmd)
293 +{
294 if (mm == &init_mm)
295 return;
296
297 @@ -219,6 +216,15 @@ void set_pmd_at(struct mm_struct *mm, unsigned long addr,
298 }
299 }
300
301 +void set_pmd_at(struct mm_struct *mm, unsigned long addr,
302 + pmd_t *pmdp, pmd_t pmd)
303 +{
304 + pmd_t orig = *pmdp;
305 +
306 + *pmdp = pmd;
307 + __set_pmd_acct(mm, addr, orig, pmd);
308 +}
309 +
310 static inline pmd_t pmdp_establish(struct vm_area_struct *vma,
311 unsigned long address, pmd_t *pmdp, pmd_t pmd)
312 {
313 @@ -227,6 +233,7 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,
314 do {
315 old = *pmdp;
316 } while (cmpxchg64(&pmdp->pmd, old.pmd, pmd.pmd) != old.pmd);
317 + __set_pmd_acct(vma->vm_mm, address, old, pmd);
318
319 return old;
320 }
321 diff --git a/arch/x86/events/amd/uncore.c b/arch/x86/events/amd/uncore.c
322 index f5cbbba99283..4e1d7483b78c 100644
323 --- a/arch/x86/events/amd/uncore.c
324 +++ b/arch/x86/events/amd/uncore.c
325 @@ -35,6 +35,7 @@
326
327 static int num_counters_llc;
328 static int num_counters_nb;
329 +static bool l3_mask;
330
331 static HLIST_HEAD(uncore_unused_list);
332
333 @@ -208,6 +209,13 @@ static int amd_uncore_event_init(struct perf_event *event)
334 hwc->config = event->attr.config & AMD64_RAW_EVENT_MASK_NB;
335 hwc->idx = -1;
336
337 + /*
338 + * SliceMask and ThreadMask need to be set for certain L3 events in
339 + * Family 17h. For other events, the two fields do not affect the count.
340 + */
341 + if (l3_mask)
342 + hwc->config |= (AMD64_L3_SLICE_MASK | AMD64_L3_THREAD_MASK);
343 +
344 if (event->cpu < 0)
345 return -EINVAL;
346
347 @@ -542,6 +550,7 @@ static int __init amd_uncore_init(void)
348 amd_llc_pmu.name = "amd_l3";
349 format_attr_event_df.show = &event_show_df;
350 format_attr_event_l3.show = &event_show_l3;
351 + l3_mask = true;
352 } else {
353 num_counters_nb = NUM_COUNTERS_NB;
354 num_counters_llc = NUM_COUNTERS_L2;
355 @@ -549,6 +558,7 @@ static int __init amd_uncore_init(void)
356 amd_llc_pmu.name = "amd_l2";
357 format_attr_event_df = format_attr_event;
358 format_attr_event_l3 = format_attr_event;
359 + l3_mask = false;
360 }
361
362 amd_nb_pmu.attr_groups = amd_uncore_attr_groups_df;
363 diff --git a/arch/x86/events/intel/uncore_snbep.c b/arch/x86/events/intel/uncore_snbep.c
364 index 2dae3f585c01..a68aba8a482f 100644
365 --- a/arch/x86/events/intel/uncore_snbep.c
366 +++ b/arch/x86/events/intel/uncore_snbep.c
367 @@ -3807,16 +3807,16 @@ static const struct pci_device_id skx_uncore_pci_ids[] = {
368 .driver_data = UNCORE_PCI_DEV_FULL_DATA(21, 5, SKX_PCI_UNCORE_M2PCIE, 3),
369 },
370 { /* M3UPI0 Link 0 */
371 - PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204C),
372 - .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 0, SKX_PCI_UNCORE_M3UPI, 0),
373 + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204D),
374 + .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 1, SKX_PCI_UNCORE_M3UPI, 0),
375 },
376 { /* M3UPI0 Link 1 */
377 - PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204D),
378 - .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 1, SKX_PCI_UNCORE_M3UPI, 1),
379 + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204E),
380 + .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 2, SKX_PCI_UNCORE_M3UPI, 1),
381 },
382 { /* M3UPI1 Link 2 */
383 - PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204C),
384 - .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 4, SKX_PCI_UNCORE_M3UPI, 2),
385 + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x204D),
386 + .driver_data = UNCORE_PCI_DEV_FULL_DATA(18, 5, SKX_PCI_UNCORE_M3UPI, 2),
387 },
388 { /* end: all zeroes */ }
389 };
390 diff --git a/arch/x86/include/asm/perf_event.h b/arch/x86/include/asm/perf_event.h
391 index 12f54082f4c8..78241b736f2a 100644
392 --- a/arch/x86/include/asm/perf_event.h
393 +++ b/arch/x86/include/asm/perf_event.h
394 @@ -46,6 +46,14 @@
395 #define INTEL_ARCH_EVENT_MASK \
396 (ARCH_PERFMON_EVENTSEL_UMASK | ARCH_PERFMON_EVENTSEL_EVENT)
397
398 +#define AMD64_L3_SLICE_SHIFT 48
399 +#define AMD64_L3_SLICE_MASK \
400 + ((0xFULL) << AMD64_L3_SLICE_SHIFT)
401 +
402 +#define AMD64_L3_THREAD_SHIFT 56
403 +#define AMD64_L3_THREAD_MASK \
404 + ((0xFFULL) << AMD64_L3_THREAD_SHIFT)
405 +
406 #define X86_RAW_EVENT_MASK \
407 (ARCH_PERFMON_EVENTSEL_EVENT | \
408 ARCH_PERFMON_EVENTSEL_UMASK | \
409 diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
410 index f3559b84cd75..04da826381c9 100644
411 --- a/arch/x86/kernel/paravirt.c
412 +++ b/arch/x86/kernel/paravirt.c
413 @@ -90,7 +90,7 @@ unsigned paravirt_patch_call(void *insnbuf,
414
415 if (len < 5) {
416 #ifdef CONFIG_RETPOLINE
417 - WARN_ONCE("Failing to patch indirect CALL in %ps\n", (void *)addr);
418 + WARN_ONCE(1, "Failing to patch indirect CALL in %ps\n", (void *)addr);
419 #endif
420 return len; /* call too long for patch site */
421 }
422 @@ -110,7 +110,7 @@ unsigned paravirt_patch_jmp(void *insnbuf, const void *target,
423
424 if (len < 5) {
425 #ifdef CONFIG_RETPOLINE
426 - WARN_ONCE("Failing to patch indirect JMP in %ps\n", (void *)addr);
427 + WARN_ONCE(1, "Failing to patch indirect JMP in %ps\n", (void *)addr);
428 #endif
429 return len; /* call too long for patch site */
430 }
431 diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
432 index 5abae72266b7..6288e9d7068e 100644
433 --- a/arch/x86/kvm/paging_tmpl.h
434 +++ b/arch/x86/kvm/paging_tmpl.h
435 @@ -452,14 +452,21 @@ error:
436 * done by is_rsvd_bits_set() above.
437 *
438 * We set up the value of exit_qualification to inject:
439 - * [2:0] - Derive from [2:0] of real exit_qualification at EPT violation
440 + * [2:0] - Derive from the access bits. The exit_qualification might be
441 + * out of date if it is serving an EPT misconfiguration.
442 * [5:3] - Calculated by the page walk of the guest EPT page tables
443 * [7:8] - Derived from [7:8] of real exit_qualification
444 *
445 * The other bits are set to 0.
446 */
447 if (!(errcode & PFERR_RSVD_MASK)) {
448 - vcpu->arch.exit_qualification &= 0x187;
449 + vcpu->arch.exit_qualification &= 0x180;
450 + if (write_fault)
451 + vcpu->arch.exit_qualification |= EPT_VIOLATION_ACC_WRITE;
452 + if (user_fault)
453 + vcpu->arch.exit_qualification |= EPT_VIOLATION_ACC_READ;
454 + if (fetch_fault)
455 + vcpu->arch.exit_qualification |= EPT_VIOLATION_ACC_INSTR;
456 vcpu->arch.exit_qualification |= (pte_access & 0x7) << 3;
457 }
458 #endif
459 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
460 index 3856828ee1dc..8d688b213504 100644
461 --- a/arch/x86/kvm/x86.c
462 +++ b/arch/x86/kvm/x86.c
463 @@ -7393,13 +7393,12 @@ static int complete_emulated_mmio(struct kvm_vcpu *vcpu)
464
465 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
466 {
467 - struct fpu *fpu = &current->thread.fpu;
468 int r;
469
470 - fpu__initialize(fpu);
471 -
472 kvm_sigset_activate(vcpu);
473
474 + kvm_load_guest_fpu(vcpu);
475 +
476 if (unlikely(vcpu->arch.mp_state == KVM_MP_STATE_UNINITIALIZED)) {
477 if (kvm_run->immediate_exit) {
478 r = -EINTR;
479 @@ -7440,6 +7439,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
480 r = vcpu_run(vcpu);
481
482 out:
483 + kvm_put_guest_fpu(vcpu);
484 post_kvm_run_save(vcpu);
485 kvm_sigset_deactivate(vcpu);
486
487 diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c
488 index a2070ab86c82..89d5915b1a3f 100644
489 --- a/drivers/char/tpm/tpm-interface.c
490 +++ b/drivers/char/tpm/tpm-interface.c
491 @@ -611,12 +611,13 @@ ssize_t tpm_transmit(struct tpm_chip *chip, struct tpm_space *space,
492 rc = be32_to_cpu(header->return_code);
493 if (rc != TPM2_RC_RETRY)
494 break;
495 - delay_msec *= 2;
496 +
497 if (delay_msec > TPM2_DURATION_LONG) {
498 dev_err(&chip->dev, "TPM is in retry loop\n");
499 break;
500 }
501 tpm_msleep(delay_msec);
502 + delay_msec *= 2;
503 memcpy(buf, save, save_size);
504 }
505 return ret;
506 diff --git a/drivers/char/tpm/tpm_crb.c b/drivers/char/tpm/tpm_crb.c
507 index 5c7ce5aaaf6f..b4ad169836e9 100644
508 --- a/drivers/char/tpm/tpm_crb.c
509 +++ b/drivers/char/tpm/tpm_crb.c
510 @@ -520,8 +520,10 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
511
512 priv->regs_t = crb_map_res(dev, priv, &io_res, buf->control_address,
513 sizeof(struct crb_regs_tail));
514 - if (IS_ERR(priv->regs_t))
515 - return PTR_ERR(priv->regs_t);
516 + if (IS_ERR(priv->regs_t)) {
517 + ret = PTR_ERR(priv->regs_t);
518 + goto out_relinquish_locality;
519 + }
520
521 /*
522 * PTT HW bug w/a: wake up the device to access
523 @@ -529,7 +531,7 @@ static int crb_map_io(struct acpi_device *device, struct crb_priv *priv,
524 */
525 ret = __crb_cmd_ready(dev, priv);
526 if (ret)
527 - return ret;
528 + goto out_relinquish_locality;
529
530 pa_high = ioread32(&priv->regs_t->ctrl_cmd_pa_high);
531 pa_low = ioread32(&priv->regs_t->ctrl_cmd_pa_low);
532 @@ -574,6 +576,8 @@ out:
533
534 __crb_go_idle(dev, priv);
535
536 +out_relinquish_locality:
537 +
538 __crb_relinquish_locality(dev, priv, 0);
539
540 return ret;
541 diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
542 index d4726a3358a4..d6993c2707d1 100644
543 --- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
544 +++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
545 @@ -2802,6 +2802,7 @@ static int init_cmd_table(struct intel_gvt *gvt)
546 if (info) {
547 gvt_err("%s %s duplicated\n", e->info->name,
548 info->name);
549 + kfree(e);
550 return -EEXIST;
551 }
552
553 diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
554 index ab70194a73db..c3a4f5d92391 100644
555 --- a/drivers/infiniband/hw/mlx5/main.c
556 +++ b/drivers/infiniband/hw/mlx5/main.c
557 @@ -3911,7 +3911,7 @@ mlx5_ib_get_vector_affinity(struct ib_device *ibdev, int comp_vector)
558 {
559 struct mlx5_ib_dev *dev = to_mdev(ibdev);
560
561 - return mlx5_get_vector_affinity(dev->mdev, comp_vector);
562 + return mlx5_get_vector_affinity_hint(dev->mdev, comp_vector);
563 }
564
565 static void *mlx5_ib_add(struct mlx5_core_dev *mdev)
566 diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
567 index ef9ee6c328a1..dfc190055167 100644
568 --- a/drivers/infiniband/hw/mlx5/qp.c
569 +++ b/drivers/infiniband/hw/mlx5/qp.c
570 @@ -1527,6 +1527,7 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
571 u32 uidx = MLX5_IB_DEFAULT_UIDX;
572 struct mlx5_ib_create_qp ucmd;
573 struct mlx5_ib_qp_base *base;
574 + int mlx5_st;
575 void *qpc;
576 u32 *in;
577 int err;
578 @@ -1535,6 +1536,10 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
579 spin_lock_init(&qp->sq.lock);
580 spin_lock_init(&qp->rq.lock);
581
582 + mlx5_st = to_mlx5_st(init_attr->qp_type);
583 + if (mlx5_st < 0)
584 + return -EINVAL;
585 +
586 if (init_attr->rwq_ind_tbl) {
587 if (!udata)
588 return -ENOSYS;
589 @@ -1688,7 +1693,7 @@ static int create_qp_common(struct mlx5_ib_dev *dev, struct ib_pd *pd,
590
591 qpc = MLX5_ADDR_OF(create_qp_in, in, qpc);
592
593 - MLX5_SET(qpc, qpc, st, to_mlx5_st(init_attr->qp_type));
594 + MLX5_SET(qpc, qpc, st, mlx5_st);
595 MLX5_SET(qpc, qpc, pm_state, MLX5_QP_PM_MIGRATED);
596
597 if (init_attr->qp_type != MLX5_IB_QPT_REG_UMR)
598 diff --git a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
599 index e4113ef09315..3c3453d213dc 100644
600 --- a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
601 +++ b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
602 @@ -642,7 +642,7 @@ int usnic_ib_dereg_mr(struct ib_mr *ibmr)
603
604 usnic_dbg("va 0x%lx length 0x%zx\n", mr->umem->va, mr->umem->length);
605
606 - usnic_uiom_reg_release(mr->umem, ibmr->pd->uobject->context->closing);
607 + usnic_uiom_reg_release(mr->umem, ibmr->uobject->context);
608 kfree(mr);
609 return 0;
610 }
611 diff --git a/drivers/infiniband/hw/usnic/usnic_uiom.c b/drivers/infiniband/hw/usnic/usnic_uiom.c
612 index 4381c0a9a873..9dd39daa602b 100644
613 --- a/drivers/infiniband/hw/usnic/usnic_uiom.c
614 +++ b/drivers/infiniband/hw/usnic/usnic_uiom.c
615 @@ -41,6 +41,7 @@
616 #include <linux/workqueue.h>
617 #include <linux/list.h>
618 #include <linux/pci.h>
619 +#include <rdma/ib_verbs.h>
620
621 #include "usnic_log.h"
622 #include "usnic_uiom.h"
623 @@ -88,7 +89,7 @@ static void usnic_uiom_put_pages(struct list_head *chunk_list, int dirty)
624 for_each_sg(chunk->page_list, sg, chunk->nents, i) {
625 page = sg_page(sg);
626 pa = sg_phys(sg);
627 - if (dirty)
628 + if (!PageDirty(page) && dirty)
629 set_page_dirty_lock(page);
630 put_page(page);
631 usnic_dbg("pa: %pa\n", &pa);
632 @@ -114,6 +115,16 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable,
633 dma_addr_t pa;
634 unsigned int gup_flags;
635
636 + /*
637 + * If the combination of the addr and size requested for this memory
638 + * region causes an integer overflow, return error.
639 + */
640 + if (((addr + size) < addr) || PAGE_ALIGN(addr + size) < (addr + size))
641 + return -EINVAL;
642 +
643 + if (!size)
644 + return -EINVAL;
645 +
646 if (!can_do_mlock())
647 return -EPERM;
648
649 @@ -127,7 +138,7 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable,
650
651 down_write(&current->mm->mmap_sem);
652
653 - locked = npages + current->mm->locked_vm;
654 + locked = npages + current->mm->pinned_vm;
655 lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
656
657 if ((locked > lock_limit) && !capable(CAP_IPC_LOCK)) {
658 @@ -143,7 +154,7 @@ static int usnic_uiom_get_pages(unsigned long addr, size_t size, int writable,
659 ret = 0;
660
661 while (npages) {
662 - ret = get_user_pages(cur_base,
663 + ret = get_user_pages_longterm(cur_base,
664 min_t(unsigned long, npages,
665 PAGE_SIZE / sizeof(struct page *)),
666 gup_flags, page_list, NULL);
667 @@ -186,7 +197,7 @@ out:
668 if (ret < 0)
669 usnic_uiom_put_pages(chunk_list, 0);
670 else
671 - current->mm->locked_vm = locked;
672 + current->mm->pinned_vm = locked;
673
674 up_write(&current->mm->mmap_sem);
675 free_page((unsigned long) page_list);
676 @@ -420,18 +431,22 @@ out_free_uiomr:
677 return ERR_PTR(err);
678 }
679
680 -void usnic_uiom_reg_release(struct usnic_uiom_reg *uiomr, int closing)
681 +void usnic_uiom_reg_release(struct usnic_uiom_reg *uiomr,
682 + struct ib_ucontext *ucontext)
683 {
684 + struct task_struct *task;
685 struct mm_struct *mm;
686 unsigned long diff;
687
688 __usnic_uiom_reg_release(uiomr->pd, uiomr, 1);
689
690 - mm = get_task_mm(current);
691 - if (!mm) {
692 - kfree(uiomr);
693 - return;
694 - }
695 + task = get_pid_task(ucontext->tgid, PIDTYPE_PID);
696 + if (!task)
697 + goto out;
698 + mm = get_task_mm(task);
699 + put_task_struct(task);
700 + if (!mm)
701 + goto out;
702
703 diff = PAGE_ALIGN(uiomr->length + uiomr->offset) >> PAGE_SHIFT;
704
705 @@ -443,7 +458,7 @@ void usnic_uiom_reg_release(struct usnic_uiom_reg *uiomr, int closing)
706 * up here and not be able to take the mmap_sem. In that case
707 * we defer the vm_locked accounting to the system workqueue.
708 */
709 - if (closing) {
710 + if (ucontext->closing) {
711 if (!down_write_trylock(&mm->mmap_sem)) {
712 INIT_WORK(&uiomr->work, usnic_uiom_reg_account);
713 uiomr->mm = mm;
714 @@ -455,9 +470,10 @@ void usnic_uiom_reg_release(struct usnic_uiom_reg *uiomr, int closing)
715 } else
716 down_write(&mm->mmap_sem);
717
718 - current->mm->locked_vm -= diff;
719 + mm->pinned_vm -= diff;
720 up_write(&mm->mmap_sem);
721 mmput(mm);
722 +out:
723 kfree(uiomr);
724 }
725
726 diff --git a/drivers/infiniband/hw/usnic/usnic_uiom.h b/drivers/infiniband/hw/usnic/usnic_uiom.h
727 index 431efe4143f4..8c096acff123 100644
728 --- a/drivers/infiniband/hw/usnic/usnic_uiom.h
729 +++ b/drivers/infiniband/hw/usnic/usnic_uiom.h
730 @@ -39,6 +39,8 @@
731
732 #include "usnic_uiom_interval_tree.h"
733
734 +struct ib_ucontext;
735 +
736 #define USNIC_UIOM_READ (1)
737 #define USNIC_UIOM_WRITE (2)
738
739 @@ -89,7 +91,8 @@ void usnic_uiom_free_dev_list(struct device **devs);
740 struct usnic_uiom_reg *usnic_uiom_reg_get(struct usnic_uiom_pd *pd,
741 unsigned long addr, size_t size,
742 int access, int dmasync);
743 -void usnic_uiom_reg_release(struct usnic_uiom_reg *uiomr, int closing);
744 +void usnic_uiom_reg_release(struct usnic_uiom_reg *uiomr,
745 + struct ib_ucontext *ucontext);
746 int usnic_uiom_init(char *drv_name);
747 void usnic_uiom_fini(void);
748 #endif /* USNIC_UIOM_H_ */
749 diff --git a/drivers/infiniband/sw/rxe/rxe_pool.c b/drivers/infiniband/sw/rxe/rxe_pool.c
750 index 3b4916680018..b4a8acc7bb7d 100644
751 --- a/drivers/infiniband/sw/rxe/rxe_pool.c
752 +++ b/drivers/infiniband/sw/rxe/rxe_pool.c
753 @@ -394,23 +394,25 @@ void *rxe_alloc(struct rxe_pool *pool)
754
755 kref_get(&pool->rxe->ref_cnt);
756
757 - if (atomic_inc_return(&pool->num_elem) > pool->max_elem) {
758 - atomic_dec(&pool->num_elem);
759 - rxe_dev_put(pool->rxe);
760 - rxe_pool_put(pool);
761 - return NULL;
762 - }
763 + if (atomic_inc_return(&pool->num_elem) > pool->max_elem)
764 + goto out_put_pool;
765
766 elem = kmem_cache_zalloc(pool_cache(pool),
767 (pool->flags & RXE_POOL_ATOMIC) ?
768 GFP_ATOMIC : GFP_KERNEL);
769 if (!elem)
770 - return NULL;
771 + goto out_put_pool;
772
773 elem->pool = pool;
774 kref_init(&elem->ref_cnt);
775
776 return elem;
777 +
778 +out_put_pool:
779 + atomic_dec(&pool->num_elem);
780 + rxe_dev_put(pool->rxe);
781 + rxe_pool_put(pool);
782 + return NULL;
783 }
784
785 void rxe_elem_release(struct kref *kref)
786 diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
787 index c97384c914a4..d77e8e2ae05f 100644
788 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
789 +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
790 @@ -1203,13 +1203,10 @@ static void __ipoib_ib_dev_flush(struct ipoib_dev_priv *priv,
791 ipoib_ib_dev_down(dev);
792
793 if (level == IPOIB_FLUSH_HEAVY) {
794 - rtnl_lock();
795 if (test_bit(IPOIB_FLAG_INITIALIZED, &priv->flags))
796 ipoib_ib_dev_stop(dev);
797
798 - result = ipoib_ib_dev_open(dev);
799 - rtnl_unlock();
800 - if (result)
801 + if (ipoib_ib_dev_open(dev))
802 return;
803
804 if (netif_queue_stopped(dev))
805 @@ -1249,7 +1246,9 @@ void ipoib_ib_dev_flush_heavy(struct work_struct *work)
806 struct ipoib_dev_priv *priv =
807 container_of(work, struct ipoib_dev_priv, flush_heavy);
808
809 + rtnl_lock();
810 __ipoib_ib_dev_flush(priv, IPOIB_FLUSH_HEAVY, 0);
811 + rtnl_unlock();
812 }
813
814 void ipoib_ib_dev_cleanup(struct net_device *dev)
815 diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
816 index 898286ed47a1..b10e4c5641ea 100644
817 --- a/drivers/md/dm-integrity.c
818 +++ b/drivers/md/dm-integrity.c
819 @@ -2547,6 +2547,9 @@ static int get_mac(struct crypto_shash **hash, struct alg_spec *a, char **error,
820 *error = error_key;
821 return r;
822 }
823 + } else if (crypto_shash_get_flags(*hash) & CRYPTO_TFM_NEED_KEY) {
824 + *error = error_key;
825 + return -ENOKEY;
826 }
827 }
828
829 diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
830 index 6d22b22cb35b..064d88299adc 100644
831 --- a/drivers/media/usb/uvc/uvc_driver.c
832 +++ b/drivers/media/usb/uvc/uvc_driver.c
833 @@ -1865,13 +1865,6 @@ static void uvc_unregister_video(struct uvc_device *dev)
834 {
835 struct uvc_streaming *stream;
836
837 - /* Unregistering all video devices might result in uvc_delete() being
838 - * called from inside the loop if there's no open file handle. To avoid
839 - * that, increment the refcount before iterating over the streams and
840 - * decrement it when done.
841 - */
842 - kref_get(&dev->ref);
843 -
844 list_for_each_entry(stream, &dev->streams, list) {
845 if (!video_is_registered(&stream->vdev))
846 continue;
847 @@ -1880,8 +1873,6 @@ static void uvc_unregister_video(struct uvc_device *dev)
848
849 uvc_debugfs_cleanup_stream(stream);
850 }
851 -
852 - kref_put(&dev->ref, uvc_delete);
853 }
854
855 static int uvc_register_video(struct uvc_device *dev,
856 @@ -2129,6 +2120,7 @@ static int uvc_probe(struct usb_interface *intf,
857
858 error:
859 uvc_unregister_video(dev);
860 + kref_put(&dev->ref, uvc_delete);
861 return -ENODEV;
862 }
863
864 @@ -2146,6 +2138,7 @@ static void uvc_disconnect(struct usb_interface *intf)
865 return;
866
867 uvc_unregister_video(dev);
868 + kref_put(&dev->ref, uvc_delete);
869 }
870
871 static int uvc_suspend(struct usb_interface *intf, pm_message_t message)
872 diff --git a/drivers/mmc/host/dw_mmc-rockchip.c b/drivers/mmc/host/dw_mmc-rockchip.c
873 index 339295212935..40d7de2eea12 100644
874 --- a/drivers/mmc/host/dw_mmc-rockchip.c
875 +++ b/drivers/mmc/host/dw_mmc-rockchip.c
876 @@ -282,11 +282,11 @@ static int dw_mci_rk3288_parse_dt(struct dw_mci *host)
877
878 priv->drv_clk = devm_clk_get(host->dev, "ciu-drive");
879 if (IS_ERR(priv->drv_clk))
880 - dev_dbg(host->dev, "ciu_drv not available\n");
881 + dev_dbg(host->dev, "ciu-drive not available\n");
882
883 priv->sample_clk = devm_clk_get(host->dev, "ciu-sample");
884 if (IS_ERR(priv->sample_clk))
885 - dev_dbg(host->dev, "ciu_sample not available\n");
886 + dev_dbg(host->dev, "ciu-sample not available\n");
887
888 host->priv = priv;
889
890 diff --git a/drivers/mtd/spi-nor/spi-nor.c b/drivers/mtd/spi-nor/spi-nor.c
891 index 19c000722cbc..34ecc12ee3d9 100644
892 --- a/drivers/mtd/spi-nor/spi-nor.c
893 +++ b/drivers/mtd/spi-nor/spi-nor.c
894 @@ -1005,6 +1005,12 @@ static const struct flash_info spi_nor_ids[] = {
895
896 /* ISSI */
897 { "is25cd512", INFO(0x7f9d20, 0, 32 * 1024, 2, SECT_4K) },
898 + { "is25wp032", INFO(0x9d7016, 0, 64 * 1024, 64,
899 + SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
900 + { "is25wp064", INFO(0x9d7017, 0, 64 * 1024, 128,
901 + SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
902 + { "is25wp128", INFO(0x9d7018, 0, 64 * 1024, 256,
903 + SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
904
905 /* Macronix */
906 { "mx25l512e", INFO(0xc22010, 0, 64 * 1024, 1, SECT_4K) },
907 diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
908 index a1b33aa6054a..77babf1417a7 100644
909 --- a/drivers/net/bonding/bond_netlink.c
910 +++ b/drivers/net/bonding/bond_netlink.c
911 @@ -638,8 +638,7 @@ static int bond_fill_info(struct sk_buff *skb,
912 goto nla_put_failure;
913
914 if (nla_put(skb, IFLA_BOND_AD_ACTOR_SYSTEM,
915 - sizeof(bond->params.ad_actor_system),
916 - &bond->params.ad_actor_system))
917 + ETH_ALEN, &bond->params.ad_actor_system))
918 goto nla_put_failure;
919 }
920 if (!bond_3ad_get_active_agg_info(bond, &info)) {
921 diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
922 index 60b3ee29d82c..3c7813f04962 100644
923 --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
924 +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
925 @@ -1571,8 +1571,6 @@ static int ena_up_complete(struct ena_adapter *adapter)
926 if (rc)
927 return rc;
928
929 - ena_init_napi(adapter);
930 -
931 ena_change_mtu(adapter->netdev, adapter->netdev->mtu);
932
933 ena_refill_all_rx_bufs(adapter);
934 @@ -1726,6 +1724,13 @@ static int ena_up(struct ena_adapter *adapter)
935
936 ena_setup_io_intr(adapter);
937
938 + /* napi poll functions should be initialized before running
939 + * request_irq(), to handle a rare condition where there is a pending
940 + * interrupt, causing the ISR to fire immediately while the poll
941 + * function wasn't set yet, causing a null dereference
942 + */
943 + ena_init_napi(adapter);
944 +
945 rc = ena_request_io_irq(adapter);
946 if (rc)
947 goto err_req_irq;
948 @@ -3059,15 +3064,8 @@ err_rss_init:
949
950 static void ena_release_bars(struct ena_com_dev *ena_dev, struct pci_dev *pdev)
951 {
952 - int release_bars;
953 -
954 - if (ena_dev->mem_bar)
955 - devm_iounmap(&pdev->dev, ena_dev->mem_bar);
956 -
957 - if (ena_dev->reg_bar)
958 - devm_iounmap(&pdev->dev, ena_dev->reg_bar);
959 + int release_bars = pci_select_bars(pdev, IORESOURCE_MEM) & ENA_BAR_MASK;
960
961 - release_bars = pci_select_bars(pdev, IORESOURCE_MEM) & ENA_BAR_MASK;
962 pci_release_selected_regions(pdev, release_bars);
963 }
964
965 diff --git a/drivers/net/ethernet/amd/declance.c b/drivers/net/ethernet/amd/declance.c
966 index 82cc81385033..c7cde58feaf7 100644
967 --- a/drivers/net/ethernet/amd/declance.c
968 +++ b/drivers/net/ethernet/amd/declance.c
969 @@ -1029,6 +1029,7 @@ static int dec_lance_probe(struct device *bdev, const int type)
970 int i, ret;
971 unsigned long esar_base;
972 unsigned char *esar;
973 + const char *desc;
974
975 if (dec_lance_debug && version_printed++ == 0)
976 printk(version);
977 @@ -1214,19 +1215,20 @@ static int dec_lance_probe(struct device *bdev, const int type)
978 */
979 switch (type) {
980 case ASIC_LANCE:
981 - printk("%s: IOASIC onboard LANCE", name);
982 + desc = "IOASIC onboard LANCE";
983 break;
984 case PMAD_LANCE:
985 - printk("%s: PMAD-AA", name);
986 + desc = "PMAD-AA";
987 break;
988 case PMAX_LANCE:
989 - printk("%s: PMAX onboard LANCE", name);
990 + desc = "PMAX onboard LANCE";
991 break;
992 }
993 for (i = 0; i < 6; i++)
994 dev->dev_addr[i] = esar[i * 4];
995
996 - printk(", addr = %pM, irq = %d\n", dev->dev_addr, dev->irq);
997 + printk("%s: %s, addr = %pM, irq = %d\n",
998 + name, desc, dev->dev_addr, dev->irq);
999
1000 dev->netdev_ops = &lance_netdev_ops;
1001 dev->watchdog_timeo = 5*HZ;
1002 diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c
1003 index 6ad0ca7ed3e9..abbd2894f870 100644
1004 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
1005 +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
1006 @@ -339,9 +339,12 @@ int bcmgenet_mii_probe(struct net_device *dev)
1007 phydev->advertising = phydev->supported;
1008
1009 /* The internal PHY has its link interrupts routed to the
1010 - * Ethernet MAC ISRs
1011 - */
1012 - if (priv->internal_phy)
1013 + * Ethernet MAC ISRs. On GENETv5 there is a hardware issue
1014 + * that prevents the signaling of link UP interrupts when
1015 + * the link operates at 10Mbps, so fallback to polling for
1016 + * those versions of GENET.
1017 + */
1018 + if (priv->internal_phy && !GENET_IS_V5(priv))
1019 priv->phydev->irq = PHY_IGNORE_INTERRUPT;
1020
1021 return 0;
1022 diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
1023 index b4f92de1efbd..d6f8d6c8b0f1 100644
1024 --- a/drivers/net/ethernet/cadence/macb_main.c
1025 +++ b/drivers/net/ethernet/cadence/macb_main.c
1026 @@ -2000,6 +2000,7 @@ static void macb_configure_dma(struct macb *bp)
1027 else
1028 dmacfg &= ~GEM_BIT(TXCOEN);
1029
1030 + dmacfg &= ~GEM_BIT(ADDR64);
1031 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
1032 if (bp->hw_dma_cap & HW_DMA_CAP_64B)
1033 dmacfg |= GEM_BIT(ADDR64);
1034 diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
1035 index bf291e90cdb0..79053d2ce7a3 100644
1036 --- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
1037 +++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
1038 @@ -2159,6 +2159,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1039 return -EPERM;
1040 if (copy_from_user(&t, useraddr, sizeof(t)))
1041 return -EFAULT;
1042 + if (t.cmd != CHELSIO_SET_QSET_PARAMS)
1043 + return -EINVAL;
1044 if (t.qset_idx >= SGE_QSETS)
1045 return -EINVAL;
1046 if (!in_range(t.intr_lat, 0, M_NEWTIMER) ||
1047 @@ -2258,6 +2260,9 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1048 if (copy_from_user(&t, useraddr, sizeof(t)))
1049 return -EFAULT;
1050
1051 + if (t.cmd != CHELSIO_GET_QSET_PARAMS)
1052 + return -EINVAL;
1053 +
1054 /* Display qsets for all ports when offload enabled */
1055 if (test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) {
1056 q1 = 0;
1057 @@ -2303,6 +2308,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1058 return -EBUSY;
1059 if (copy_from_user(&edata, useraddr, sizeof(edata)))
1060 return -EFAULT;
1061 + if (edata.cmd != CHELSIO_SET_QSET_NUM)
1062 + return -EINVAL;
1063 if (edata.val < 1 ||
1064 (edata.val > 1 && !(adapter->flags & USING_MSIX)))
1065 return -EINVAL;
1066 @@ -2343,6 +2350,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1067 return -EPERM;
1068 if (copy_from_user(&t, useraddr, sizeof(t)))
1069 return -EFAULT;
1070 + if (t.cmd != CHELSIO_LOAD_FW)
1071 + return -EINVAL;
1072 /* Check t.len sanity ? */
1073 fw_data = memdup_user(useraddr + sizeof(t), t.len);
1074 if (IS_ERR(fw_data))
1075 @@ -2366,6 +2375,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1076 return -EBUSY;
1077 if (copy_from_user(&m, useraddr, sizeof(m)))
1078 return -EFAULT;
1079 + if (m.cmd != CHELSIO_SETMTUTAB)
1080 + return -EINVAL;
1081 if (m.nmtus != NMTUS)
1082 return -EINVAL;
1083 if (m.mtus[0] < 81) /* accommodate SACK */
1084 @@ -2407,6 +2418,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1085 return -EBUSY;
1086 if (copy_from_user(&m, useraddr, sizeof(m)))
1087 return -EFAULT;
1088 + if (m.cmd != CHELSIO_SET_PM)
1089 + return -EINVAL;
1090 if (!is_power_of_2(m.rx_pg_sz) ||
1091 !is_power_of_2(m.tx_pg_sz))
1092 return -EINVAL; /* not power of 2 */
1093 @@ -2440,6 +2453,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1094 return -EIO; /* need the memory controllers */
1095 if (copy_from_user(&t, useraddr, sizeof(t)))
1096 return -EFAULT;
1097 + if (t.cmd != CHELSIO_GET_MEM)
1098 + return -EINVAL;
1099 if ((t.addr & 7) || (t.len & 7))
1100 return -EINVAL;
1101 if (t.mem_id == MEM_CM)
1102 @@ -2492,6 +2507,8 @@ static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr)
1103 return -EAGAIN;
1104 if (copy_from_user(&t, useraddr, sizeof(t)))
1105 return -EFAULT;
1106 + if (t.cmd != CHELSIO_SET_TRACE_FILTER)
1107 + return -EINVAL;
1108
1109 tp = (const struct trace_params *)&t.sip;
1110 if (t.config_tx)
1111 diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
1112 index 2bfaf3e118b1..03f4fee1bbc9 100644
1113 --- a/drivers/net/ethernet/cisco/enic/enic_main.c
1114 +++ b/drivers/net/ethernet/cisco/enic/enic_main.c
1115 @@ -1879,7 +1879,7 @@ static int enic_open(struct net_device *netdev)
1116 {
1117 struct enic *enic = netdev_priv(netdev);
1118 unsigned int i;
1119 - int err;
1120 + int err, ret;
1121
1122 err = enic_request_intr(enic);
1123 if (err) {
1124 @@ -1936,10 +1936,9 @@ static int enic_open(struct net_device *netdev)
1125
1126 err_out_free_rq:
1127 for (i = 0; i < enic->rq_count; i++) {
1128 - err = vnic_rq_disable(&enic->rq[i]);
1129 - if (err)
1130 - return err;
1131 - vnic_rq_clean(&enic->rq[i], enic_free_rq_buf);
1132 + ret = vnic_rq_disable(&enic->rq[i]);
1133 + if (!ret)
1134 + vnic_rq_clean(&enic->rq[i], enic_free_rq_buf);
1135 }
1136 enic_dev_notify_unset(enic);
1137 err_out_free_intr:
1138 diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
1139 index 7e2b70c2bba3..39f399741647 100644
1140 --- a/drivers/net/ethernet/emulex/benet/be_main.c
1141 +++ b/drivers/net/ethernet/emulex/benet/be_main.c
1142 @@ -3900,8 +3900,6 @@ static int be_enable_vxlan_offloads(struct be_adapter *adapter)
1143 netdev->hw_enc_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
1144 NETIF_F_TSO | NETIF_F_TSO6 |
1145 NETIF_F_GSO_UDP_TUNNEL;
1146 - netdev->hw_features |= NETIF_F_GSO_UDP_TUNNEL;
1147 - netdev->features |= NETIF_F_GSO_UDP_TUNNEL;
1148
1149 dev_info(dev, "Enabled VxLAN offloads for UDP port %d\n",
1150 be16_to_cpu(port));
1151 @@ -3923,8 +3921,6 @@ static void be_disable_vxlan_offloads(struct be_adapter *adapter)
1152 adapter->vxlan_port = 0;
1153
1154 netdev->hw_enc_features = 0;
1155 - netdev->hw_features &= ~(NETIF_F_GSO_UDP_TUNNEL);
1156 - netdev->features &= ~(NETIF_F_GSO_UDP_TUNNEL);
1157 }
1158
1159 static void be_calculate_vf_res(struct be_adapter *adapter, u16 num_vfs,
1160 @@ -5215,6 +5211,7 @@ static void be_netdev_init(struct net_device *netdev)
1161 struct be_adapter *adapter = netdev_priv(netdev);
1162
1163 netdev->hw_features |= NETIF_F_SG | NETIF_F_TSO | NETIF_F_TSO6 |
1164 + NETIF_F_GSO_UDP_TUNNEL |
1165 NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |
1166 NETIF_F_HW_VLAN_CTAG_TX;
1167 if ((be_if_cap_flags(adapter) & BE_IF_FLAGS_RSS))
1168 diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
1169 index 44720f83af27..4d4f16ad88c3 100644
1170 --- a/drivers/net/ethernet/freescale/fec.h
1171 +++ b/drivers/net/ethernet/freescale/fec.h
1172 @@ -451,6 +451,10 @@ struct bufdesc_ex {
1173 * initialisation.
1174 */
1175 #define FEC_QUIRK_MIB_CLEAR (1 << 15)
1176 +/* Only i.MX25/i.MX27/i.MX28 controller supports FRBR,FRSR registers,
1177 + * those FIFO receive registers are resolved in other platforms.
1178 + */
1179 +#define FEC_QUIRK_HAS_FRREG (1 << 16)
1180
1181 struct bufdesc_prop {
1182 int qid;
1183 diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
1184 index eb2ea231c7ca..ce55c8f7f33a 100644
1185 --- a/drivers/net/ethernet/freescale/fec_main.c
1186 +++ b/drivers/net/ethernet/freescale/fec_main.c
1187 @@ -89,14 +89,16 @@ static struct platform_device_id fec_devtype[] = {
1188 .driver_data = 0,
1189 }, {
1190 .name = "imx25-fec",
1191 - .driver_data = FEC_QUIRK_USE_GASKET | FEC_QUIRK_MIB_CLEAR,
1192 + .driver_data = FEC_QUIRK_USE_GASKET | FEC_QUIRK_MIB_CLEAR |
1193 + FEC_QUIRK_HAS_FRREG,
1194 }, {
1195 .name = "imx27-fec",
1196 - .driver_data = FEC_QUIRK_MIB_CLEAR,
1197 + .driver_data = FEC_QUIRK_MIB_CLEAR | FEC_QUIRK_HAS_FRREG,
1198 }, {
1199 .name = "imx28-fec",
1200 .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_SWAP_FRAME |
1201 - FEC_QUIRK_SINGLE_MDIO | FEC_QUIRK_HAS_RACC,
1202 + FEC_QUIRK_SINGLE_MDIO | FEC_QUIRK_HAS_RACC |
1203 + FEC_QUIRK_HAS_FRREG,
1204 }, {
1205 .name = "imx6q-fec",
1206 .driver_data = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |
1207 @@ -1155,7 +1157,7 @@ static void fec_enet_timeout_work(struct work_struct *work)
1208 napi_disable(&fep->napi);
1209 netif_tx_lock_bh(ndev);
1210 fec_restart(ndev);
1211 - netif_wake_queue(ndev);
1212 + netif_tx_wake_all_queues(ndev);
1213 netif_tx_unlock_bh(ndev);
1214 napi_enable(&fep->napi);
1215 }
1216 @@ -1270,7 +1272,7 @@ skb_done:
1217
1218 /* Since we have freed up a buffer, the ring is no longer full
1219 */
1220 - if (netif_queue_stopped(ndev)) {
1221 + if (netif_tx_queue_stopped(nq)) {
1222 entries_free = fec_enet_get_free_txdesc_num(txq);
1223 if (entries_free >= txq->tx_wake_threshold)
1224 netif_tx_wake_queue(nq);
1225 @@ -1747,7 +1749,7 @@ static void fec_enet_adjust_link(struct net_device *ndev)
1226 napi_disable(&fep->napi);
1227 netif_tx_lock_bh(ndev);
1228 fec_restart(ndev);
1229 - netif_wake_queue(ndev);
1230 + netif_tx_wake_all_queues(ndev);
1231 netif_tx_unlock_bh(ndev);
1232 napi_enable(&fep->napi);
1233 }
1234 @@ -2166,7 +2168,13 @@ static void fec_enet_get_regs(struct net_device *ndev,
1235 memset(buf, 0, regs->len);
1236
1237 for (i = 0; i < ARRAY_SIZE(fec_enet_register_offset); i++) {
1238 - off = fec_enet_register_offset[i] / 4;
1239 + off = fec_enet_register_offset[i];
1240 +
1241 + if ((off == FEC_R_BOUND || off == FEC_R_FSTART) &&
1242 + !(fep->quirks & FEC_QUIRK_HAS_FRREG))
1243 + continue;
1244 +
1245 + off >>= 2;
1246 buf[off] = readl(&theregs[off]);
1247 }
1248 }
1249 @@ -2249,7 +2257,7 @@ static int fec_enet_set_pauseparam(struct net_device *ndev,
1250 napi_disable(&fep->napi);
1251 netif_tx_lock_bh(ndev);
1252 fec_restart(ndev);
1253 - netif_wake_queue(ndev);
1254 + netif_tx_wake_all_queues(ndev);
1255 netif_tx_unlock_bh(ndev);
1256 napi_enable(&fep->napi);
1257 }
1258 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c b/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c
1259 index 9d64d0759ee9..a5dd99aaf321 100644
1260 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c
1261 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c
1262 @@ -257,7 +257,8 @@ int mlx5e_dcbnl_ieee_setets_core(struct mlx5e_priv *priv, struct ieee_ets *ets)
1263 }
1264
1265 static int mlx5e_dbcnl_validate_ets(struct net_device *netdev,
1266 - struct ieee_ets *ets)
1267 + struct ieee_ets *ets,
1268 + bool zero_sum_allowed)
1269 {
1270 bool have_ets_tc = false;
1271 int bw_sum = 0;
1272 @@ -282,8 +283,9 @@ static int mlx5e_dbcnl_validate_ets(struct net_device *netdev,
1273 }
1274
1275 if (have_ets_tc && bw_sum != 100) {
1276 - netdev_err(netdev,
1277 - "Failed to validate ETS: BW sum is illegal\n");
1278 + if (bw_sum || (!bw_sum && !zero_sum_allowed))
1279 + netdev_err(netdev,
1280 + "Failed to validate ETS: BW sum is illegal\n");
1281 return -EINVAL;
1282 }
1283 return 0;
1284 @@ -298,7 +300,7 @@ static int mlx5e_dcbnl_ieee_setets(struct net_device *netdev,
1285 if (!MLX5_CAP_GEN(priv->mdev, ets))
1286 return -EOPNOTSUPP;
1287
1288 - err = mlx5e_dbcnl_validate_ets(netdev, ets);
1289 + err = mlx5e_dbcnl_validate_ets(netdev, ets, false);
1290 if (err)
1291 return err;
1292
1293 @@ -477,12 +479,9 @@ static u8 mlx5e_dcbnl_setall(struct net_device *netdev)
1294 ets.prio_tc[i] = cee_cfg->prio_to_pg_map[i];
1295 }
1296
1297 - err = mlx5e_dbcnl_validate_ets(netdev, &ets);
1298 - if (err) {
1299 - netdev_err(netdev,
1300 - "%s, Failed to validate ETS: %d\n", __func__, err);
1301 + err = mlx5e_dbcnl_validate_ets(netdev, &ets, true);
1302 + if (err)
1303 goto out;
1304 - }
1305
1306 err = mlx5e_dcbnl_ieee_setets_core(priv, &ets);
1307 if (err) {
1308 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
1309 index 8285e6d24f30..3d3fd03fa450 100644
1310 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
1311 +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
1312 @@ -635,43 +635,15 @@ static inline bool is_first_ethertype_ip(struct sk_buff *skb)
1313 return (ethertype == htons(ETH_P_IP) || ethertype == htons(ETH_P_IPV6));
1314 }
1315
1316 -static __be32 mlx5e_get_fcs(struct sk_buff *skb)
1317 +static u32 mlx5e_get_fcs(const struct sk_buff *skb)
1318 {
1319 - int last_frag_sz, bytes_in_prev, nr_frags;
1320 - u8 *fcs_p1, *fcs_p2;
1321 - skb_frag_t *last_frag;
1322 - __be32 fcs_bytes;
1323 + const void *fcs_bytes;
1324 + u32 _fcs_bytes;
1325
1326 - if (!skb_is_nonlinear(skb))
1327 - return *(__be32 *)(skb->data + skb->len - ETH_FCS_LEN);
1328 + fcs_bytes = skb_header_pointer(skb, skb->len - ETH_FCS_LEN,
1329 + ETH_FCS_LEN, &_fcs_bytes);
1330
1331 - nr_frags = skb_shinfo(skb)->nr_frags;
1332 - last_frag = &skb_shinfo(skb)->frags[nr_frags - 1];
1333 - last_frag_sz = skb_frag_size(last_frag);
1334 -
1335 - /* If all FCS data is in last frag */
1336 - if (last_frag_sz >= ETH_FCS_LEN)
1337 - return *(__be32 *)(skb_frag_address(last_frag) +
1338 - last_frag_sz - ETH_FCS_LEN);
1339 -
1340 - fcs_p2 = (u8 *)skb_frag_address(last_frag);
1341 - bytes_in_prev = ETH_FCS_LEN - last_frag_sz;
1342 -
1343 - /* Find where the other part of the FCS is - Linear or another frag */
1344 - if (nr_frags == 1) {
1345 - fcs_p1 = skb_tail_pointer(skb);
1346 - } else {
1347 - skb_frag_t *prev_frag = &skb_shinfo(skb)->frags[nr_frags - 2];
1348 -
1349 - fcs_p1 = skb_frag_address(prev_frag) +
1350 - skb_frag_size(prev_frag);
1351 - }
1352 - fcs_p1 -= bytes_in_prev;
1353 -
1354 - memcpy(&fcs_bytes, fcs_p1, bytes_in_prev);
1355 - memcpy(((u8 *)&fcs_bytes) + bytes_in_prev, fcs_p2, last_frag_sz);
1356 -
1357 - return fcs_bytes;
1358 + return __get_unaligned_cpu32(fcs_bytes);
1359 }
1360
1361 static inline void mlx5e_handle_csum(struct net_device *netdev,
1362 @@ -693,8 +665,9 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,
1363 skb->ip_summed = CHECKSUM_COMPLETE;
1364 skb->csum = csum_unfold((__force __sum16)cqe->check_sum);
1365 if (unlikely(netdev->features & NETIF_F_RXFCS))
1366 - skb->csum = csum_add(skb->csum,
1367 - (__force __wsum)mlx5e_get_fcs(skb));
1368 + skb->csum = csum_block_add(skb->csum,
1369 + (__force __wsum)mlx5e_get_fcs(skb),
1370 + skb->len - ETH_FCS_LEN);
1371 rq->stats.csum_complete++;
1372 return;
1373 }
1374 diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eq.c b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
1375 index eb91de86202b..5da0b6e11530 100644
1376 --- a/drivers/net/ethernet/mellanox/mlx5/core/eq.c
1377 +++ b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
1378 @@ -262,7 +262,7 @@ static void eq_pf_process(struct mlx5_eq *eq)
1379 case MLX5_PFAULT_SUBTYPE_WQE:
1380 /* WQE based event */
1381 pfault->type =
1382 - be32_to_cpu(pf_eqe->wqe.pftype_wq) >> 24;
1383 + (be32_to_cpu(pf_eqe->wqe.pftype_wq) >> 24) & 0x7;
1384 pfault->token =
1385 be32_to_cpu(pf_eqe->wqe.token);
1386 pfault->wqe.wq_num =
1387 diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
1388 index e41f28602535..eb666877d1aa 100644
1389 --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
1390 +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
1391 @@ -1672,7 +1672,7 @@ qed_iwarp_parse_rx_pkt(struct qed_hwfn *p_hwfn,
1392
1393 cm_info->local_ip[0] = ntohl(iph->daddr);
1394 cm_info->remote_ip[0] = ntohl(iph->saddr);
1395 - cm_info->ip_version = TCP_IPV4;
1396 + cm_info->ip_version = QED_TCP_IPV4;
1397
1398 ip_hlen = (iph->ihl) * sizeof(u32);
1399 *payload_len = ntohs(iph->tot_len) - ip_hlen;
1400 @@ -1692,7 +1692,7 @@ qed_iwarp_parse_rx_pkt(struct qed_hwfn *p_hwfn,
1401 cm_info->remote_ip[i] =
1402 ntohl(ip6h->saddr.in6_u.u6_addr32[i]);
1403 }
1404 - cm_info->ip_version = TCP_IPV6;
1405 + cm_info->ip_version = QED_TCP_IPV6;
1406
1407 ip_hlen = sizeof(*ip6h);
1408 *payload_len = ntohs(ip6h->payload_len);
1409 diff --git a/drivers/net/ethernet/qlogic/qed/qed_roce.c b/drivers/net/ethernet/qlogic/qed/qed_roce.c
1410 index fb7c2d1562ae..bedbf840fd7d 100644
1411 --- a/drivers/net/ethernet/qlogic/qed/qed_roce.c
1412 +++ b/drivers/net/ethernet/qlogic/qed/qed_roce.c
1413 @@ -129,23 +129,16 @@ static void qed_rdma_copy_gids(struct qed_rdma_qp *qp, __le32 *src_gid,
1414
1415 static enum roce_flavor qed_roce_mode_to_flavor(enum roce_mode roce_mode)
1416 {
1417 - enum roce_flavor flavor;
1418 -
1419 switch (roce_mode) {
1420 case ROCE_V1:
1421 - flavor = PLAIN_ROCE;
1422 - break;
1423 + return PLAIN_ROCE;
1424 case ROCE_V2_IPV4:
1425 - flavor = RROCE_IPV4;
1426 - break;
1427 + return RROCE_IPV4;
1428 case ROCE_V2_IPV6:
1429 - flavor = ROCE_V2_IPV6;
1430 - break;
1431 + return RROCE_IPV6;
1432 default:
1433 - flavor = MAX_ROCE_MODE;
1434 - break;
1435 + return MAX_ROCE_FLAVOR;
1436 }
1437 - return flavor;
1438 }
1439
1440 void qed_roce_free_cid_pair(struct qed_hwfn *p_hwfn, u16 cid)
1441 diff --git a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
1442 index 46d0c3cb83a5..d7c5965328be 100644
1443 --- a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
1444 +++ b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
1445 @@ -154,7 +154,7 @@ qed_set_pf_update_tunn_mode(struct qed_tunnel_info *p_tun,
1446 static void qed_set_tunn_cls_info(struct qed_tunnel_info *p_tun,
1447 struct qed_tunnel_info *p_src)
1448 {
1449 - enum tunnel_clss type;
1450 + int type;
1451
1452 p_tun->b_update_rx_cls = p_src->b_update_rx_cls;
1453 p_tun->b_update_tx_cls = p_src->b_update_tx_cls;
1454 diff --git a/drivers/net/ethernet/qlogic/qed/qed_vf.c b/drivers/net/ethernet/qlogic/qed/qed_vf.c
1455 index 6eb85db69f9a..dd8ebf6d380f 100644
1456 --- a/drivers/net/ethernet/qlogic/qed/qed_vf.c
1457 +++ b/drivers/net/ethernet/qlogic/qed/qed_vf.c
1458 @@ -413,7 +413,6 @@ static int qed_vf_pf_acquire(struct qed_hwfn *p_hwfn)
1459 }
1460
1461 if (!p_iov->b_pre_fp_hsi &&
1462 - ETH_HSI_VER_MINOR &&
1463 (resp->pfdev_info.minor_fp_hsi < ETH_HSI_VER_MINOR)) {
1464 DP_INFO(p_hwfn,
1465 "PF is using older fastpath HSI; %02x.%02x is configured\n",
1466 @@ -572,7 +571,7 @@ free_p_iov:
1467 static void
1468 __qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req,
1469 struct qed_tunn_update_type *p_src,
1470 - enum qed_tunn_clss mask, u8 *p_cls)
1471 + enum qed_tunn_mode mask, u8 *p_cls)
1472 {
1473 if (p_src->b_update_mode) {
1474 p_req->tun_mode_update_mask |= BIT(mask);
1475 @@ -587,7 +586,7 @@ __qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req,
1476 static void
1477 qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req,
1478 struct qed_tunn_update_type *p_src,
1479 - enum qed_tunn_clss mask,
1480 + enum qed_tunn_mode mask,
1481 u8 *p_cls, struct qed_tunn_update_udp_port *p_port,
1482 u8 *p_update_port, u16 *p_udp_port)
1483 {
1484 diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
1485 index 929fb8d96ec0..8d979fef5fc7 100644
1486 --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
1487 +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
1488 @@ -205,6 +205,9 @@ rx_handler_result_t rmnet_rx_handler(struct sk_buff **pskb)
1489 if (!skb)
1490 return RX_HANDLER_CONSUMED;
1491
1492 + if (skb->pkt_type == PACKET_LOOPBACK)
1493 + return RX_HANDLER_PASS;
1494 +
1495 dev = skb->dev;
1496 port = rmnet_get_port(dev);
1497
1498 diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
1499 index f7e540eeb877..1b61ce310132 100644
1500 --- a/drivers/net/ethernet/realtek/r8169.c
1501 +++ b/drivers/net/ethernet/realtek/r8169.c
1502 @@ -7579,17 +7579,15 @@ static int rtl8169_poll(struct napi_struct *napi, int budget)
1503 struct rtl8169_private *tp = container_of(napi, struct rtl8169_private, napi);
1504 struct net_device *dev = tp->dev;
1505 u16 enable_mask = RTL_EVENT_NAPI | tp->event_slow;
1506 - int work_done= 0;
1507 + int work_done;
1508 u16 status;
1509
1510 status = rtl_get_events(tp);
1511 rtl_ack_events(tp, status & ~tp->event_slow);
1512
1513 - if (status & RTL_EVENT_NAPI_RX)
1514 - work_done = rtl_rx(dev, tp, (u32) budget);
1515 + work_done = rtl_rx(dev, tp, (u32) budget);
1516
1517 - if (status & RTL_EVENT_NAPI_TX)
1518 - rtl_tx(dev, tp);
1519 + rtl_tx(dev, tp);
1520
1521 if (status & tp->event_slow) {
1522 enable_mask &= ~tp->event_slow;
1523 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
1524 index f5f37bfa1d58..ff2eeddf588e 100644
1525 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
1526 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
1527 @@ -133,7 +133,7 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg,
1528 */
1529 int stmmac_mdio_reset(struct mii_bus *bus)
1530 {
1531 -#if defined(CONFIG_STMMAC_PLATFORM)
1532 +#if IS_ENABLED(CONFIG_STMMAC_PLATFORM)
1533 struct net_device *ndev = bus->priv;
1534 struct stmmac_priv *priv = netdev_priv(ndev);
1535 unsigned int mii_address = priv->hw->mii.addr;
1536 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
1537 index 6a393b16a1fc..c54a50dbd5ac 100644
1538 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
1539 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
1540 @@ -303,7 +303,7 @@ static void stmmac_pci_remove(struct pci_dev *pdev)
1541 pci_disable_device(pdev);
1542 }
1543
1544 -static int stmmac_pci_suspend(struct device *dev)
1545 +static int __maybe_unused stmmac_pci_suspend(struct device *dev)
1546 {
1547 struct pci_dev *pdev = to_pci_dev(dev);
1548 int ret;
1549 @@ -321,7 +321,7 @@ static int stmmac_pci_suspend(struct device *dev)
1550 return 0;
1551 }
1552
1553 -static int stmmac_pci_resume(struct device *dev)
1554 +static int __maybe_unused stmmac_pci_resume(struct device *dev)
1555 {
1556 struct pci_dev *pdev = to_pci_dev(dev);
1557 int ret;
1558 diff --git a/drivers/net/hamradio/yam.c b/drivers/net/hamradio/yam.c
1559 index 7a7c5224a336..16a6e1193912 100644
1560 --- a/drivers/net/hamradio/yam.c
1561 +++ b/drivers/net/hamradio/yam.c
1562 @@ -980,6 +980,8 @@ static int yam_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1563 sizeof(struct yamdrv_ioctl_mcs));
1564 if (IS_ERR(ym))
1565 return PTR_ERR(ym);
1566 + if (ym->cmd != SIOCYAMSMCS)
1567 + return -EINVAL;
1568 if (ym->bitrate > YAM_MAXBITRATE) {
1569 kfree(ym);
1570 return -EINVAL;
1571 @@ -995,6 +997,8 @@ static int yam_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1572 if (copy_from_user(&yi, ifr->ifr_data, sizeof(struct yamdrv_ioctl_cfg)))
1573 return -EFAULT;
1574
1575 + if (yi.cmd != SIOCYAMSCFG)
1576 + return -EINVAL;
1577 if ((yi.cfg.mask & YAM_IOBASE) && netif_running(dev))
1578 return -EINVAL; /* Cannot change this parameter when up */
1579 if ((yi.cfg.mask & YAM_IRQ) && netif_running(dev))
1580 diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
1581 index a174d05a9752..fe76e2c4022a 100644
1582 --- a/drivers/net/phy/phy_device.c
1583 +++ b/drivers/net/phy/phy_device.c
1584 @@ -1641,6 +1641,23 @@ int genphy_config_init(struct phy_device *phydev)
1585 }
1586 EXPORT_SYMBOL(genphy_config_init);
1587
1588 +/* This is used for the phy device which doesn't support the MMD extended
1589 + * register access, but it does have side effect when we are trying to access
1590 + * the MMD register via indirect method.
1591 + */
1592 +int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad, u16 regnum)
1593 +{
1594 + return -EOPNOTSUPP;
1595 +}
1596 +EXPORT_SYMBOL(genphy_read_mmd_unsupported);
1597 +
1598 +int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum,
1599 + u16 regnum, u16 val)
1600 +{
1601 + return -EOPNOTSUPP;
1602 +}
1603 +EXPORT_SYMBOL(genphy_write_mmd_unsupported);
1604 +
1605 int genphy_suspend(struct phy_device *phydev)
1606 {
1607 int value;
1608 diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
1609 index e4a6ed88b9cf..79f28b9186c6 100644
1610 --- a/drivers/net/phy/phylink.c
1611 +++ b/drivers/net/phy/phylink.c
1612 @@ -561,7 +561,7 @@ void phylink_destroy(struct phylink *pl)
1613 {
1614 if (pl->sfp_bus)
1615 sfp_unregister_upstream(pl->sfp_bus);
1616 - if (!IS_ERR(pl->link_gpio))
1617 + if (!IS_ERR_OR_NULL(pl->link_gpio))
1618 gpiod_put(pl->link_gpio);
1619
1620 cancel_work_sync(&pl->resolve);
1621 diff --git a/drivers/net/phy/realtek.c b/drivers/net/phy/realtek.c
1622 index 9cbe645e3d89..7d38af5ed4b5 100644
1623 --- a/drivers/net/phy/realtek.c
1624 +++ b/drivers/net/phy/realtek.c
1625 @@ -138,6 +138,8 @@ static struct phy_driver realtek_drvs[] = {
1626 .read_status = &genphy_read_status,
1627 .ack_interrupt = &rtl821x_ack_interrupt,
1628 .config_intr = &rtl8211b_config_intr,
1629 + .read_mmd = &genphy_read_mmd_unsupported,
1630 + .write_mmd = &genphy_write_mmd_unsupported,
1631 }, {
1632 .phy_id = 0x001cc914,
1633 .name = "RTL8211DN Gigabit Ethernet",
1634 diff --git a/drivers/net/usb/asix_common.c b/drivers/net/usb/asix_common.c
1635 index 522d2900cd1d..e9fcf6ef716a 100644
1636 --- a/drivers/net/usb/asix_common.c
1637 +++ b/drivers/net/usb/asix_common.c
1638 @@ -607,6 +607,9 @@ int asix_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
1639 struct usbnet *dev = netdev_priv(net);
1640 u8 opt = 0;
1641
1642 + if (wolinfo->wolopts & ~(WAKE_PHY | WAKE_MAGIC))
1643 + return -EINVAL;
1644 +
1645 if (wolinfo->wolopts & WAKE_PHY)
1646 opt |= AX_MONITOR_LINK;
1647 if (wolinfo->wolopts & WAKE_MAGIC)
1648 diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
1649 index f32261ecd215..0f69b77e8502 100644
1650 --- a/drivers/net/usb/ax88179_178a.c
1651 +++ b/drivers/net/usb/ax88179_178a.c
1652 @@ -566,6 +566,9 @@ ax88179_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
1653 struct usbnet *dev = netdev_priv(net);
1654 u8 opt = 0;
1655
1656 + if (wolinfo->wolopts & ~(WAKE_PHY | WAKE_MAGIC))
1657 + return -EINVAL;
1658 +
1659 if (wolinfo->wolopts & WAKE_PHY)
1660 opt |= AX_MONITOR_MODE_RWLC;
1661 if (wolinfo->wolopts & WAKE_MAGIC)
1662 diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
1663 index 9e3f632e22f1..50e2e10a9050 100644
1664 --- a/drivers/net/usb/lan78xx.c
1665 +++ b/drivers/net/usb/lan78xx.c
1666 @@ -1375,19 +1375,10 @@ static int lan78xx_set_wol(struct net_device *netdev,
1667 if (ret < 0)
1668 return ret;
1669
1670 - pdata->wol = 0;
1671 - if (wol->wolopts & WAKE_UCAST)
1672 - pdata->wol |= WAKE_UCAST;
1673 - if (wol->wolopts & WAKE_MCAST)
1674 - pdata->wol |= WAKE_MCAST;
1675 - if (wol->wolopts & WAKE_BCAST)
1676 - pdata->wol |= WAKE_BCAST;
1677 - if (wol->wolopts & WAKE_MAGIC)
1678 - pdata->wol |= WAKE_MAGIC;
1679 - if (wol->wolopts & WAKE_PHY)
1680 - pdata->wol |= WAKE_PHY;
1681 - if (wol->wolopts & WAKE_ARP)
1682 - pdata->wol |= WAKE_ARP;
1683 + if (wol->wolopts & ~WAKE_ALL)
1684 + return -EINVAL;
1685 +
1686 + pdata->wol = wol->wolopts;
1687
1688 device_set_wakeup_enable(&dev->udev->dev, (bool)wol->wolopts);
1689
1690 @@ -2517,10 +2508,6 @@ static int lan78xx_open(struct net_device *net)
1691 if (ret < 0)
1692 goto out;
1693
1694 - ret = lan78xx_reset(dev);
1695 - if (ret < 0)
1696 - goto done;
1697 -
1698 phy_start(net->phydev);
1699
1700 netif_dbg(dev, ifup, dev->net, "phy initialised successfully");
1701 diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
1702 index 0fa64cc1a011..66beff4d7646 100644
1703 --- a/drivers/net/usb/r8152.c
1704 +++ b/drivers/net/usb/r8152.c
1705 @@ -4497,6 +4497,9 @@ static int rtl8152_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
1706 if (!rtl_can_wakeup(tp))
1707 return -EOPNOTSUPP;
1708
1709 + if (wol->wolopts & ~WAKE_ANY)
1710 + return -EINVAL;
1711 +
1712 ret = usb_autopm_get_interface(tp->intf);
1713 if (ret < 0)
1714 goto out_set_wol;
1715 diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c
1716 index b64b1ee56d2d..ec287c9741e8 100644
1717 --- a/drivers/net/usb/smsc75xx.c
1718 +++ b/drivers/net/usb/smsc75xx.c
1719 @@ -731,6 +731,9 @@ static int smsc75xx_ethtool_set_wol(struct net_device *net,
1720 struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]);
1721 int ret;
1722
1723 + if (wolinfo->wolopts & ~SUPPORTED_WAKE)
1724 + return -EINVAL;
1725 +
1726 pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE;
1727
1728 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts);
1729 diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
1730 index 309b88acd3d0..99e684e39d35 100644
1731 --- a/drivers/net/usb/smsc95xx.c
1732 +++ b/drivers/net/usb/smsc95xx.c
1733 @@ -774,6 +774,9 @@ static int smsc95xx_ethtool_set_wol(struct net_device *net,
1734 struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]);
1735 int ret;
1736
1737 + if (wolinfo->wolopts & ~SUPPORTED_WAKE)
1738 + return -EINVAL;
1739 +
1740 pdata->wolopts = wolinfo->wolopts & SUPPORTED_WAKE;
1741
1742 ret = device_set_wakeup_enable(&dev->udev->dev, pdata->wolopts);
1743 diff --git a/drivers/net/usb/sr9800.c b/drivers/net/usb/sr9800.c
1744 index 9277a0f228df..35f39f23d881 100644
1745 --- a/drivers/net/usb/sr9800.c
1746 +++ b/drivers/net/usb/sr9800.c
1747 @@ -421,6 +421,9 @@ sr_set_wol(struct net_device *net, struct ethtool_wolinfo *wolinfo)
1748 struct usbnet *dev = netdev_priv(net);
1749 u8 opt = 0;
1750
1751 + if (wolinfo->wolopts & ~(WAKE_PHY | WAKE_MAGIC))
1752 + return -EINVAL;
1753 +
1754 if (wolinfo->wolopts & WAKE_PHY)
1755 opt |= SR_MONITOR_LINK;
1756 if (wolinfo->wolopts & WAKE_MAGIC)
1757 diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
1758 index 910c46b47769..f528e9ac3413 100644
1759 --- a/drivers/net/virtio_net.c
1760 +++ b/drivers/net/virtio_net.c
1761 @@ -1872,8 +1872,9 @@ static void virtnet_freeze_down(struct virtio_device *vdev)
1762 /* Make sure no work handler is accessing the device */
1763 flush_work(&vi->config_work);
1764
1765 + netif_tx_lock_bh(vi->dev);
1766 netif_device_detach(vi->dev);
1767 - netif_tx_disable(vi->dev);
1768 + netif_tx_unlock_bh(vi->dev);
1769 cancel_delayed_work_sync(&vi->refill);
1770
1771 if (netif_running(vi->dev)) {
1772 @@ -1909,7 +1910,9 @@ static int virtnet_restore_up(struct virtio_device *vdev)
1773 }
1774 }
1775
1776 + netif_tx_lock_bh(vi->dev);
1777 netif_device_attach(vi->dev);
1778 + netif_tx_unlock_bh(vi->dev);
1779 return err;
1780 }
1781
1782 diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/alive.h b/drivers/net/wireless/intel/iwlwifi/fw/api/alive.h
1783 index 3684a3e180e5..007bfe7656a4 100644
1784 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/alive.h
1785 +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/alive.h
1786 @@ -95,8 +95,8 @@ enum {
1787 #define IWL_ALIVE_FLG_RFKILL BIT(0)
1788
1789 struct iwl_lmac_alive {
1790 - __le32 ucode_minor;
1791 __le32 ucode_major;
1792 + __le32 ucode_minor;
1793 u8 ver_subtype;
1794 u8 ver_type;
1795 u8 mac;
1796 @@ -113,8 +113,8 @@ struct iwl_lmac_alive {
1797 } __packed; /* UCODE_ALIVE_NTFY_API_S_VER_3 */
1798
1799 struct iwl_umac_alive {
1800 - __le32 umac_minor; /* UMAC version: minor */
1801 __le32 umac_major; /* UMAC version: major */
1802 + __le32 umac_minor; /* UMAC version: minor */
1803 __le32 error_info_addr; /* SRAM address for UMAC error log */
1804 __le32 dbg_print_buff_addr;
1805 } __packed; /* UMAC_ALIVE_DATA_API_S_VER_2 */
1806 diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
1807 index 2fa7ec466275..839010417241 100644
1808 --- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
1809 +++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
1810 @@ -950,7 +950,20 @@ int iwl_fw_dbg_collect_desc(struct iwl_fw_runtime *fwrt,
1811 if (trigger)
1812 delay = msecs_to_jiffies(le32_to_cpu(trigger->stop_delay));
1813
1814 - if (WARN(fwrt->trans->state == IWL_TRANS_NO_FW,
1815 + /*
1816 + * If the loading of the FW completed successfully, the next step is to
1817 + * get the SMEM config data. Thus, if fwrt->smem_cfg.num_lmacs is non
1818 + * zero, the FW was already loaded successully. If the state is "NO_FW"
1819 + * in such a case - WARN and exit, since FW may be dead. Otherwise, we
1820 + * can try to collect the data, since FW might just not be fully
1821 + * loaded (no "ALIVE" yet), and the debug data is accessible.
1822 + *
1823 + * Corner case: got the FW alive but crashed before getting the SMEM
1824 + * config. In such a case, due to HW access problems, we might
1825 + * collect garbage.
1826 + */
1827 + if (WARN((fwrt->trans->state == IWL_TRANS_NO_FW) &&
1828 + fwrt->smem_cfg.num_lmacs,
1829 "Can't collect dbg data when FW isn't alive\n"))
1830 return -EIO;
1831
1832 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rx.c b/drivers/net/wireless/intel/iwlwifi/mvm/rx.c
1833 index 2d14a58cbdd7..c73e4be9bde3 100644
1834 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rx.c
1835 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rx.c
1836 @@ -439,7 +439,8 @@ void iwl_mvm_rx_rx_mpdu(struct iwl_mvm *mvm, struct napi_struct *napi,
1837 rx_status->bw = RATE_INFO_BW_160;
1838 break;
1839 }
1840 - if (rate_n_flags & RATE_MCS_SGI_MSK)
1841 + if (!(rate_n_flags & RATE_MCS_CCK_MSK) &&
1842 + rate_n_flags & RATE_MCS_SGI_MSK)
1843 rx_status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
1844 if (rate_n_flags & RATE_HT_MCS_GF_MSK)
1845 rx_status->enc_flags |= RX_ENC_FLAG_HT_GF;
1846 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
1847 index e2196dc35dc6..8ba8c70571fb 100644
1848 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
1849 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c
1850 @@ -981,7 +981,9 @@ void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi,
1851 rx_status->bw = RATE_INFO_BW_160;
1852 break;
1853 }
1854 - if (rate_n_flags & RATE_MCS_SGI_MSK)
1855 +
1856 + if (!(rate_n_flags & RATE_MCS_CCK_MSK) &&
1857 + rate_n_flags & RATE_MCS_SGI_MSK)
1858 rx_status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
1859 if (rate_n_flags & RATE_HT_MCS_GF_MSK)
1860 rx_status->enc_flags |= RX_ENC_FLAG_HT_GF;
1861 diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
1862 index aafa7aa18fbd..477f9f2f6626 100644
1863 --- a/drivers/net/wireless/mac80211_hwsim.c
1864 +++ b/drivers/net/wireless/mac80211_hwsim.c
1865 @@ -2730,8 +2730,7 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
1866 list_add_tail(&data->list, &hwsim_radios);
1867 spin_unlock_bh(&hwsim_radio_lock);
1868
1869 - if (idx > 0)
1870 - hwsim_mcast_new_radio(idx, info, param);
1871 + hwsim_mcast_new_radio(idx, info, param);
1872
1873 return idx;
1874
1875 diff --git a/drivers/net/wireless/marvell/libertas/if_sdio.c b/drivers/net/wireless/marvell/libertas/if_sdio.c
1876 index 43743c26c071..39bf85d0ade0 100644
1877 --- a/drivers/net/wireless/marvell/libertas/if_sdio.c
1878 +++ b/drivers/net/wireless/marvell/libertas/if_sdio.c
1879 @@ -1317,6 +1317,10 @@ static int if_sdio_suspend(struct device *dev)
1880 if (priv->wol_criteria == EHS_REMOVE_WAKEUP) {
1881 dev_info(dev, "Suspend without wake params -- powering down card\n");
1882 if (priv->fw_ready) {
1883 + ret = lbs_suspend(priv);
1884 + if (ret)
1885 + return ret;
1886 +
1887 priv->power_up_on_resume = true;
1888 if_sdio_power_off(card);
1889 }
1890 diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
1891 index 1a40fc3517a8..6ea95b316256 100644
1892 --- a/drivers/net/xen-netfront.c
1893 +++ b/drivers/net/xen-netfront.c
1894 @@ -1824,7 +1824,7 @@ static int talk_to_netback(struct xenbus_device *dev,
1895 err = xen_net_read_mac(dev, info->netdev->dev_addr);
1896 if (err) {
1897 xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename);
1898 - goto out;
1899 + goto out_unlocked;
1900 }
1901
1902 rtnl_lock();
1903 @@ -1939,6 +1939,7 @@ abort_transaction_no_dev_fatal:
1904 xennet_destroy_queues(info);
1905 out:
1906 rtnl_unlock();
1907 +out_unlocked:
1908 device_unregister(&dev->dev);
1909 return err;
1910 }
1911 @@ -1964,10 +1965,6 @@ static int xennet_connect(struct net_device *dev)
1912 /* talk_to_netback() sets the correct number of queues */
1913 num_queues = dev->real_num_tx_queues;
1914
1915 - rtnl_lock();
1916 - netdev_update_features(dev);
1917 - rtnl_unlock();
1918 -
1919 if (dev->reg_state == NETREG_UNINITIALIZED) {
1920 err = register_netdev(dev);
1921 if (err) {
1922 @@ -1977,6 +1974,10 @@ static int xennet_connect(struct net_device *dev)
1923 }
1924 }
1925
1926 + rtnl_lock();
1927 + netdev_update_features(dev);
1928 + rtnl_unlock();
1929 +
1930 /*
1931 * All public and private state should now be sane. Get
1932 * ready to start sending and receiving packets and give the driver
1933 diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
1934 index 4f2747cd15a6..169dd7127f9e 100644
1935 --- a/drivers/s390/net/qeth_core_main.c
1936 +++ b/drivers/s390/net/qeth_core_main.c
1937 @@ -3001,28 +3001,23 @@ static int qeth_send_startlan(struct qeth_card *card)
1938 return rc;
1939 }
1940
1941 -static int qeth_default_setadapterparms_cb(struct qeth_card *card,
1942 - struct qeth_reply *reply, unsigned long data)
1943 +static int qeth_setadpparms_inspect_rc(struct qeth_ipa_cmd *cmd)
1944 {
1945 - struct qeth_ipa_cmd *cmd;
1946 -
1947 - QETH_CARD_TEXT(card, 4, "defadpcb");
1948 -
1949 - cmd = (struct qeth_ipa_cmd *) data;
1950 - if (cmd->hdr.return_code == 0)
1951 + if (!cmd->hdr.return_code)
1952 cmd->hdr.return_code =
1953 cmd->data.setadapterparms.hdr.return_code;
1954 - return 0;
1955 + return cmd->hdr.return_code;
1956 }
1957
1958 static int qeth_query_setadapterparms_cb(struct qeth_card *card,
1959 struct qeth_reply *reply, unsigned long data)
1960 {
1961 - struct qeth_ipa_cmd *cmd;
1962 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
1963
1964 QETH_CARD_TEXT(card, 3, "quyadpcb");
1965 + if (qeth_setadpparms_inspect_rc(cmd))
1966 + return 0;
1967
1968 - cmd = (struct qeth_ipa_cmd *) data;
1969 if (cmd->data.setadapterparms.data.query_cmds_supp.lan_type & 0x7f) {
1970 card->info.link_type =
1971 cmd->data.setadapterparms.data.query_cmds_supp.lan_type;
1972 @@ -3030,7 +3025,7 @@ static int qeth_query_setadapterparms_cb(struct qeth_card *card,
1973 }
1974 card->options.adp.supported_funcs =
1975 cmd->data.setadapterparms.data.query_cmds_supp.supported_cmds;
1976 - return qeth_default_setadapterparms_cb(card, reply, (unsigned long)cmd);
1977 + return 0;
1978 }
1979
1980 static struct qeth_cmd_buffer *qeth_get_adapter_cmd(struct qeth_card *card,
1981 @@ -3122,22 +3117,20 @@ EXPORT_SYMBOL_GPL(qeth_query_ipassists);
1982 static int qeth_query_switch_attributes_cb(struct qeth_card *card,
1983 struct qeth_reply *reply, unsigned long data)
1984 {
1985 - struct qeth_ipa_cmd *cmd;
1986 - struct qeth_switch_info *sw_info;
1987 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
1988 struct qeth_query_switch_attributes *attrs;
1989 + struct qeth_switch_info *sw_info;
1990
1991 QETH_CARD_TEXT(card, 2, "qswiatcb");
1992 - cmd = (struct qeth_ipa_cmd *) data;
1993 - sw_info = (struct qeth_switch_info *)reply->param;
1994 - if (cmd->data.setadapterparms.hdr.return_code == 0) {
1995 - attrs = &cmd->data.setadapterparms.data.query_switch_attributes;
1996 - sw_info->capabilities = attrs->capabilities;
1997 - sw_info->settings = attrs->settings;
1998 - QETH_CARD_TEXT_(card, 2, "%04x%04x", sw_info->capabilities,
1999 - sw_info->settings);
2000 - }
2001 - qeth_default_setadapterparms_cb(card, reply, (unsigned long) cmd);
2002 + if (qeth_setadpparms_inspect_rc(cmd))
2003 + return 0;
2004
2005 + sw_info = (struct qeth_switch_info *)reply->param;
2006 + attrs = &cmd->data.setadapterparms.data.query_switch_attributes;
2007 + sw_info->capabilities = attrs->capabilities;
2008 + sw_info->settings = attrs->settings;
2009 + QETH_CARD_TEXT_(card, 2, "%04x%04x", sw_info->capabilities,
2010 + sw_info->settings);
2011 return 0;
2012 }
2013
2014 @@ -4188,16 +4181,13 @@ EXPORT_SYMBOL_GPL(qeth_do_send_packet);
2015 static int qeth_setadp_promisc_mode_cb(struct qeth_card *card,
2016 struct qeth_reply *reply, unsigned long data)
2017 {
2018 - struct qeth_ipa_cmd *cmd;
2019 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
2020 struct qeth_ipacmd_setadpparms *setparms;
2021
2022 QETH_CARD_TEXT(card, 4, "prmadpcb");
2023
2024 - cmd = (struct qeth_ipa_cmd *) data;
2025 setparms = &(cmd->data.setadapterparms);
2026 -
2027 - qeth_default_setadapterparms_cb(card, reply, (unsigned long)cmd);
2028 - if (cmd->hdr.return_code) {
2029 + if (qeth_setadpparms_inspect_rc(cmd)) {
2030 QETH_CARD_TEXT_(card, 4, "prmrc%x", cmd->hdr.return_code);
2031 setparms->data.mode = SET_PROMISC_MODE_OFF;
2032 }
2033 @@ -4267,11 +4257,12 @@ EXPORT_SYMBOL_GPL(qeth_get_stats);
2034 static int qeth_setadpparms_change_macaddr_cb(struct qeth_card *card,
2035 struct qeth_reply *reply, unsigned long data)
2036 {
2037 - struct qeth_ipa_cmd *cmd;
2038 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
2039
2040 QETH_CARD_TEXT(card, 4, "chgmaccb");
2041 + if (qeth_setadpparms_inspect_rc(cmd))
2042 + return 0;
2043
2044 - cmd = (struct qeth_ipa_cmd *) data;
2045 if (!card->options.layer2 ||
2046 !(card->info.mac_bits & QETH_LAYER2_MAC_READ)) {
2047 memcpy(card->dev->dev_addr,
2048 @@ -4279,7 +4270,6 @@ static int qeth_setadpparms_change_macaddr_cb(struct qeth_card *card,
2049 OSA_ADDR_LEN);
2050 card->info.mac_bits |= QETH_LAYER2_MAC_READ;
2051 }
2052 - qeth_default_setadapterparms_cb(card, reply, (unsigned long) cmd);
2053 return 0;
2054 }
2055
2056 @@ -4310,13 +4300,15 @@ EXPORT_SYMBOL_GPL(qeth_setadpparms_change_macaddr);
2057 static int qeth_setadpparms_set_access_ctrl_cb(struct qeth_card *card,
2058 struct qeth_reply *reply, unsigned long data)
2059 {
2060 - struct qeth_ipa_cmd *cmd;
2061 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
2062 struct qeth_set_access_ctrl *access_ctrl_req;
2063 int fallback = *(int *)reply->param;
2064
2065 QETH_CARD_TEXT(card, 4, "setaccb");
2066 + if (cmd->hdr.return_code)
2067 + return 0;
2068 + qeth_setadpparms_inspect_rc(cmd);
2069
2070 - cmd = (struct qeth_ipa_cmd *) data;
2071 access_ctrl_req = &cmd->data.setadapterparms.data.set_access_ctrl;
2072 QETH_DBF_TEXT_(SETUP, 2, "setaccb");
2073 QETH_DBF_TEXT_(SETUP, 2, "%s", card->gdev->dev.kobj.name);
2074 @@ -4389,7 +4381,6 @@ static int qeth_setadpparms_set_access_ctrl_cb(struct qeth_card *card,
2075 card->options.isolation = card->options.prev_isolation;
2076 break;
2077 }
2078 - qeth_default_setadapterparms_cb(card, reply, (unsigned long) cmd);
2079 return 0;
2080 }
2081
2082 @@ -4677,14 +4668,15 @@ out:
2083 static int qeth_setadpparms_query_oat_cb(struct qeth_card *card,
2084 struct qeth_reply *reply, unsigned long data)
2085 {
2086 - struct qeth_ipa_cmd *cmd;
2087 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *)data;
2088 struct qeth_qoat_priv *priv;
2089 char *resdata;
2090 int resdatalen;
2091
2092 QETH_CARD_TEXT(card, 3, "qoatcb");
2093 + if (qeth_setadpparms_inspect_rc(cmd))
2094 + return 0;
2095
2096 - cmd = (struct qeth_ipa_cmd *)data;
2097 priv = (struct qeth_qoat_priv *)reply->param;
2098 resdatalen = cmd->data.setadapterparms.hdr.cmdlength;
2099 resdata = (char *)data + 28;
2100 @@ -4778,21 +4770,18 @@ out:
2101 static int qeth_query_card_info_cb(struct qeth_card *card,
2102 struct qeth_reply *reply, unsigned long data)
2103 {
2104 - struct qeth_ipa_cmd *cmd;
2105 + struct carrier_info *carrier_info = (struct carrier_info *)reply->param;
2106 + struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *)data;
2107 struct qeth_query_card_info *card_info;
2108 - struct carrier_info *carrier_info;
2109
2110 QETH_CARD_TEXT(card, 2, "qcrdincb");
2111 - carrier_info = (struct carrier_info *)reply->param;
2112 - cmd = (struct qeth_ipa_cmd *)data;
2113 - card_info = &cmd->data.setadapterparms.data.card_info;
2114 - if (cmd->data.setadapterparms.hdr.return_code == 0) {
2115 - carrier_info->card_type = card_info->card_type;
2116 - carrier_info->port_mode = card_info->port_mode;
2117 - carrier_info->port_speed = card_info->port_speed;
2118 - }
2119 + if (qeth_setadpparms_inspect_rc(cmd))
2120 + return 0;
2121
2122 - qeth_default_setadapterparms_cb(card, reply, (unsigned long) cmd);
2123 + card_info = &cmd->data.setadapterparms.data.card_info;
2124 + carrier_info->card_type = card_info->card_type;
2125 + carrier_info->port_mode = card_info->port_mode;
2126 + carrier_info->port_speed = card_info->port_speed;
2127 return 0;
2128 }
2129
2130 diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
2131 index 998788a967be..3e38bae6ecde 100644
2132 --- a/drivers/scsi/aacraid/commsup.c
2133 +++ b/drivers/scsi/aacraid/commsup.c
2134 @@ -2506,8 +2506,8 @@ int aac_command_thread(void *data)
2135 /* Synchronize our watches */
2136 if (((NSEC_PER_SEC - (NSEC_PER_SEC / HZ)) > now.tv_nsec)
2137 && (now.tv_nsec > (NSEC_PER_SEC / HZ)))
2138 - difference = (((NSEC_PER_SEC - now.tv_nsec) * HZ)
2139 - + NSEC_PER_SEC / 2) / NSEC_PER_SEC;
2140 + difference = HZ + HZ / 2 -
2141 + now.tv_nsec / (NSEC_PER_SEC / HZ);
2142 else {
2143 if (now.tv_nsec > NSEC_PER_SEC / 2)
2144 ++now.tv_sec;
2145 @@ -2531,6 +2531,10 @@ int aac_command_thread(void *data)
2146 if (kthread_should_stop())
2147 break;
2148
2149 + /*
2150 + * we probably want usleep_range() here instead of the
2151 + * jiffies computation
2152 + */
2153 schedule_timeout(difference);
2154
2155 if (kthread_should_stop())
2156 diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
2157 index b491af31a5f8..a06b24a61622 100644
2158 --- a/drivers/scsi/ibmvscsi/ibmvfc.c
2159 +++ b/drivers/scsi/ibmvscsi/ibmvfc.c
2160 @@ -3580,11 +3580,9 @@ static void ibmvfc_tgt_implicit_logout(struct ibmvfc_target *tgt)
2161 static int ibmvfc_adisc_needs_plogi(struct ibmvfc_passthru_mad *mad,
2162 struct ibmvfc_target *tgt)
2163 {
2164 - if (memcmp(&mad->fc_iu.response[2], &tgt->ids.port_name,
2165 - sizeof(tgt->ids.port_name)))
2166 + if (wwn_to_u64((u8 *)&mad->fc_iu.response[2]) != tgt->ids.port_name)
2167 return 1;
2168 - if (memcmp(&mad->fc_iu.response[4], &tgt->ids.node_name,
2169 - sizeof(tgt->ids.node_name)))
2170 + if (wwn_to_u64((u8 *)&mad->fc_iu.response[4]) != tgt->ids.node_name)
2171 return 1;
2172 if (be32_to_cpu(mad->fc_iu.response[6]) != tgt->scsi_id)
2173 return 1;
2174 diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
2175 index 1d42d38f5a45..0e19f6bc24ff 100644
2176 --- a/drivers/scsi/qla2xxx/qla_init.c
2177 +++ b/drivers/scsi/qla2xxx/qla_init.c
2178 @@ -1365,8 +1365,8 @@ qla24xx_abort_sp_done(void *ptr, int res)
2179 srb_t *sp = ptr;
2180 struct srb_iocb *abt = &sp->u.iocb_cmd;
2181
2182 - del_timer(&sp->u.iocb_cmd.timer);
2183 - complete(&abt->u.abt.comp);
2184 + if (del_timer(&sp->u.iocb_cmd.timer))
2185 + complete(&abt->u.abt.comp);
2186 }
2187
2188 int
2189 diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
2190 index 6d3091ff9b92..c7b284587365 100644
2191 --- a/drivers/scsi/sd.c
2192 +++ b/drivers/scsi/sd.c
2193 @@ -2498,6 +2498,8 @@ sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer)
2194 sector_size = old_sector_size;
2195 goto got_data;
2196 }
2197 + /* Remember that READ CAPACITY(16) succeeded */
2198 + sdp->try_rc_10_first = 0;
2199 }
2200 }
2201
2202 diff --git a/drivers/soc/fsl/qbman/qman.c b/drivers/soc/fsl/qbman/qman.c
2203 index 0c6065dba48a..4f27e95efcdd 100644
2204 --- a/drivers/soc/fsl/qbman/qman.c
2205 +++ b/drivers/soc/fsl/qbman/qman.c
2206 @@ -2699,6 +2699,9 @@ static int qman_alloc_range(struct gen_pool *p, u32 *result, u32 cnt)
2207 {
2208 unsigned long addr;
2209
2210 + if (!p)
2211 + return -ENODEV;
2212 +
2213 addr = gen_pool_alloc(p, cnt);
2214 if (!addr)
2215 return -ENOMEM;
2216 diff --git a/drivers/soc/fsl/qe/ucc.c b/drivers/soc/fsl/qe/ucc.c
2217 index c646d8713861..681f7d4b7724 100644
2218 --- a/drivers/soc/fsl/qe/ucc.c
2219 +++ b/drivers/soc/fsl/qe/ucc.c
2220 @@ -626,7 +626,7 @@ static u32 ucc_get_tdm_sync_shift(enum comm_dir mode, u32 tdm_num)
2221 {
2222 u32 shift;
2223
2224 - shift = (mode == COMM_DIR_RX) ? RX_SYNC_SHIFT_BASE : RX_SYNC_SHIFT_BASE;
2225 + shift = (mode == COMM_DIR_RX) ? RX_SYNC_SHIFT_BASE : TX_SYNC_SHIFT_BASE;
2226 shift -= tdm_num * 2;
2227
2228 return shift;
2229 diff --git a/drivers/usb/usbip/vhci_sysfs.c b/drivers/usb/usbip/vhci_sysfs.c
2230 index 4a22a9f06d96..eb7898353457 100644
2231 --- a/drivers/usb/usbip/vhci_sysfs.c
2232 +++ b/drivers/usb/usbip/vhci_sysfs.c
2233 @@ -34,10 +34,10 @@
2234
2235 /*
2236 * output example:
2237 - * hub port sta spd dev sockfd local_busid
2238 - * hs 0000 004 000 00000000 3 1-2.3
2239 + * hub port sta spd dev sockfd local_busid
2240 + * hs 0000 004 000 00000000 000003 1-2.3
2241 * ................................................
2242 - * ss 0008 004 000 00000000 4 2-3.4
2243 + * ss 0008 004 000 00000000 000004 2-3.4
2244 * ................................................
2245 *
2246 * Output includes socket fd instead of socket pointer address to avoid
2247 @@ -61,13 +61,13 @@ static void port_show_vhci(char **out, int hub, int port, struct vhci_device *vd
2248 if (vdev->ud.status == VDEV_ST_USED) {
2249 *out += sprintf(*out, "%03u %08x ",
2250 vdev->speed, vdev->devid);
2251 - *out += sprintf(*out, "%u %s",
2252 + *out += sprintf(*out, "%06u %s",
2253 vdev->ud.sockfd,
2254 dev_name(&vdev->udev->dev));
2255
2256 } else {
2257 *out += sprintf(*out, "000 00000000 ");
2258 - *out += sprintf(*out, "0000000000000000 0-0");
2259 + *out += sprintf(*out, "000000 0-0");
2260 }
2261
2262 *out += sprintf(*out, "\n");
2263 @@ -165,7 +165,7 @@ static ssize_t status_show(struct device *dev,
2264 int pdev_nr;
2265
2266 out += sprintf(out,
2267 - "hub port sta spd dev socket local_busid\n");
2268 + "hub port sta spd dev sockfd local_busid\n");
2269
2270 pdev_nr = status_name_to_id(attr->attr.name);
2271 if (pdev_nr < 0)
2272 diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
2273 index 7ee3167bc083..ffdd4e937d1d 100644
2274 --- a/drivers/vhost/vhost.c
2275 +++ b/drivers/vhost/vhost.c
2276 @@ -30,6 +30,7 @@
2277 #include <linux/sched/mm.h>
2278 #include <linux/sched/signal.h>
2279 #include <linux/interval_tree_generic.h>
2280 +#include <linux/nospec.h>
2281
2282 #include "vhost.h"
2283
2284 @@ -1366,6 +1367,7 @@ long vhost_vring_ioctl(struct vhost_dev *d, int ioctl, void __user *argp)
2285 if (idx >= d->nvqs)
2286 return -ENOBUFS;
2287
2288 + idx = array_index_nospec(idx, d->nvqs);
2289 vq = d->vqs[idx];
2290
2291 mutex_lock(&vq->mutex);
2292 diff --git a/drivers/video/fbdev/pxa168fb.c b/drivers/video/fbdev/pxa168fb.c
2293 index def3a501acd6..d059d04c63ac 100644
2294 --- a/drivers/video/fbdev/pxa168fb.c
2295 +++ b/drivers/video/fbdev/pxa168fb.c
2296 @@ -712,7 +712,7 @@ static int pxa168fb_probe(struct platform_device *pdev)
2297 /*
2298 * enable controller clock
2299 */
2300 - clk_enable(fbi->clk);
2301 + clk_prepare_enable(fbi->clk);
2302
2303 pxa168fb_set_par(info);
2304
2305 @@ -767,7 +767,7 @@ static int pxa168fb_probe(struct platform_device *pdev)
2306 failed_free_cmap:
2307 fb_dealloc_cmap(&info->cmap);
2308 failed_free_clk:
2309 - clk_disable(fbi->clk);
2310 + clk_disable_unprepare(fbi->clk);
2311 failed_free_fbmem:
2312 dma_free_coherent(fbi->dev, info->fix.smem_len,
2313 info->screen_base, fbi->fb_start_dma);
2314 @@ -807,7 +807,7 @@ static int pxa168fb_remove(struct platform_device *pdev)
2315 dma_free_wc(fbi->dev, PAGE_ALIGN(info->fix.smem_len),
2316 info->screen_base, info->fix.smem_start);
2317
2318 - clk_disable(fbi->clk);
2319 + clk_disable_unprepare(fbi->clk);
2320
2321 framebuffer_release(info);
2322
2323 diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
2324 index 473ad5985aa3..47dec283628d 100644
2325 --- a/fs/btrfs/qgroup.c
2326 +++ b/fs/btrfs/qgroup.c
2327 @@ -2603,8 +2603,10 @@ out:
2328 }
2329 btrfs_put_tree_mod_seq(fs_info, &tree_mod_seq_elem);
2330
2331 - if (done && !ret)
2332 + if (done && !ret) {
2333 ret = 1;
2334 + fs_info->qgroup_rescan_progress.objectid = (u64)-1;
2335 + }
2336 return ret;
2337 }
2338
2339 diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
2340 index 2cd0b3053439..d01cbca84701 100644
2341 --- a/fs/cifs/inode.c
2342 +++ b/fs/cifs/inode.c
2343 @@ -712,7 +712,7 @@ cgfi_exit:
2344 /* Simple function to return a 64 bit hash of string. Rarely called */
2345 static __u64 simple_hashstr(const char *str)
2346 {
2347 - const __u64 hash_mult = 1125899906842597L; /* a big enough prime */
2348 + const __u64 hash_mult = 1125899906842597ULL; /* a big enough prime */
2349 __u64 hash = 0;
2350
2351 while (*str)
2352 diff --git a/fs/fat/fatent.c b/fs/fat/fatent.c
2353 index a40f36b1b292..9635df94db7d 100644
2354 --- a/fs/fat/fatent.c
2355 +++ b/fs/fat/fatent.c
2356 @@ -681,6 +681,7 @@ int fat_count_free_clusters(struct super_block *sb)
2357 if (ops->ent_get(&fatent) == FAT_ENT_FREE)
2358 free++;
2359 } while (fat_ent_next(sbi, &fatent));
2360 + cond_resched();
2361 }
2362 sbi->free_clusters = free;
2363 sbi->free_clus_valid = 1;
2364 diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c
2365 index 1b1283f07941..824f407df1db 100644
2366 --- a/fs/ocfs2/refcounttree.c
2367 +++ b/fs/ocfs2/refcounttree.c
2368 @@ -2946,6 +2946,7 @@ int ocfs2_duplicate_clusters_by_page(handle_t *handle,
2369 if (map_end & (PAGE_SIZE - 1))
2370 to = map_end & (PAGE_SIZE - 1);
2371
2372 +retry:
2373 page = find_or_create_page(mapping, page_index, GFP_NOFS);
2374 if (!page) {
2375 ret = -ENOMEM;
2376 @@ -2954,11 +2955,18 @@ int ocfs2_duplicate_clusters_by_page(handle_t *handle,
2377 }
2378
2379 /*
2380 - * In case PAGE_SIZE <= CLUSTER_SIZE, This page
2381 - * can't be dirtied before we CoW it out.
2382 + * In case PAGE_SIZE <= CLUSTER_SIZE, we do not expect a dirty
2383 + * page, so write it back.
2384 */
2385 - if (PAGE_SIZE <= OCFS2_SB(sb)->s_clustersize)
2386 - BUG_ON(PageDirty(page));
2387 + if (PAGE_SIZE <= OCFS2_SB(sb)->s_clustersize) {
2388 + if (PageDirty(page)) {
2389 + /*
2390 + * write_on_page will unlock the page on return
2391 + */
2392 + ret = write_one_page(page);
2393 + goto retry;
2394 + }
2395 + }
2396
2397 if (!PageUptodate(page)) {
2398 ret = block_read_full_page(page, ocfs2_get_block);
2399 diff --git a/include/linux/bpf.h b/include/linux/bpf.h
2400 index 5c5be80ce802..c9d2a1a3ef11 100644
2401 --- a/include/linux/bpf.h
2402 +++ b/include/linux/bpf.h
2403 @@ -27,6 +27,7 @@ struct bpf_map_ops {
2404 void (*map_release)(struct bpf_map *map, struct file *map_file);
2405 void (*map_free)(struct bpf_map *map);
2406 int (*map_get_next_key)(struct bpf_map *map, void *key, void *next_key);
2407 + void (*map_release_uref)(struct bpf_map *map);
2408
2409 /* funcs callable from userspace and from eBPF programs */
2410 void *(*map_lookup_elem)(struct bpf_map *map, void *key);
2411 @@ -300,7 +301,6 @@ int bpf_stackmap_copy(struct bpf_map *map, void *key, void *value);
2412 int bpf_fd_array_map_update_elem(struct bpf_map *map, struct file *map_file,
2413 void *key, void *value, u64 map_flags);
2414 int bpf_fd_array_map_lookup_elem(struct bpf_map *map, void *key, u32 *value);
2415 -void bpf_fd_array_map_clear(struct bpf_map *map);
2416 int bpf_fd_htab_map_update_elem(struct bpf_map *map, struct file *map_file,
2417 void *key, void *value, u64 map_flags);
2418 int bpf_fd_htab_map_lookup_elem(struct bpf_map *map, void *key, u32 *value);
2419 diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
2420 index 6b79a9bba9a7..4be464a07612 100644
2421 --- a/include/linux/compiler_types.h
2422 +++ b/include/linux/compiler_types.h
2423 @@ -78,6 +78,18 @@ extern void __chk_io_ptr(const volatile void __iomem *);
2424 #include <linux/compiler-clang.h>
2425 #endif
2426
2427 +/*
2428 + * Some architectures need to provide custom definitions of macros provided
2429 + * by linux/compiler-*.h, and can do so using asm/compiler.h. We include that
2430 + * conditionally rather than using an asm-generic wrapper in order to avoid
2431 + * build failures if any C compilation, which will include this file via an
2432 + * -include argument in c_flags, occurs prior to the asm-generic wrappers being
2433 + * generated.
2434 + */
2435 +#ifdef CONFIG_HAVE_ARCH_COMPILER_H
2436 +#include <asm/compiler.h>
2437 +#endif
2438 +
2439 /*
2440 * Generic compiler-dependent macros required for kernel
2441 * build go below this comment. Actual compiler/compiler version
2442 diff --git a/include/linux/iio/buffer-dma.h b/include/linux/iio/buffer-dma.h
2443 index 767467d886de..67c75372b691 100644
2444 --- a/include/linux/iio/buffer-dma.h
2445 +++ b/include/linux/iio/buffer-dma.h
2446 @@ -141,7 +141,7 @@ int iio_dma_buffer_read(struct iio_buffer *buffer, size_t n,
2447 char __user *user_buffer);
2448 size_t iio_dma_buffer_data_available(struct iio_buffer *buffer);
2449 int iio_dma_buffer_set_bytes_per_datum(struct iio_buffer *buffer, size_t bpd);
2450 -int iio_dma_buffer_set_length(struct iio_buffer *buffer, int length);
2451 +int iio_dma_buffer_set_length(struct iio_buffer *buffer, unsigned int length);
2452 int iio_dma_buffer_request_update(struct iio_buffer *buffer);
2453
2454 int iio_dma_buffer_init(struct iio_dma_buffer_queue *queue,
2455 diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
2456 index c4d19e77fea8..fb677e4f902d 100644
2457 --- a/include/linux/mlx5/driver.h
2458 +++ b/include/linux/mlx5/driver.h
2459 @@ -1193,25 +1193,9 @@ enum {
2460 };
2461
2462 static inline const struct cpumask *
2463 -mlx5_get_vector_affinity(struct mlx5_core_dev *dev, int vector)
2464 +mlx5_get_vector_affinity_hint(struct mlx5_core_dev *dev, int vector)
2465 {
2466 - const struct cpumask *mask;
2467 - struct irq_desc *desc;
2468 - unsigned int irq;
2469 - int eqn;
2470 - int err;
2471 -
2472 - err = mlx5_vector2eqn(dev, MLX5_EQ_VEC_COMP_BASE + vector, &eqn, &irq);
2473 - if (err)
2474 - return NULL;
2475 -
2476 - desc = irq_to_desc(irq);
2477 -#ifdef CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK
2478 - mask = irq_data_get_effective_affinity_mask(&desc->irq_data);
2479 -#else
2480 - mask = desc->irq_common_data.affinity;
2481 -#endif
2482 - return mask;
2483 + return dev->priv.irq_info[vector].mask;
2484 }
2485
2486 #endif /* MLX5_DRIVER_H */
2487 diff --git a/include/linux/phy.h b/include/linux/phy.h
2488 index dca9e926b88f..efc04c2d92c9 100644
2489 --- a/include/linux/phy.h
2490 +++ b/include/linux/phy.h
2491 @@ -879,6 +879,10 @@ static inline int genphy_no_soft_reset(struct phy_device *phydev)
2492 {
2493 return 0;
2494 }
2495 +int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad,
2496 + u16 regnum);
2497 +int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum,
2498 + u16 regnum, u16 val);
2499
2500 /* Clause 45 PHY */
2501 int genphy_c45_restart_aneg(struct phy_device *phydev);
2502 diff --git a/kernel/bpf/arraymap.c b/kernel/bpf/arraymap.c
2503 index f57d0bdf3c9e..a8f55ea4146b 100644
2504 --- a/kernel/bpf/arraymap.c
2505 +++ b/kernel/bpf/arraymap.c
2506 @@ -467,7 +467,7 @@ static u32 prog_fd_array_sys_lookup_elem(void *ptr)
2507 }
2508
2509 /* decrement refcnt of all bpf_progs that are stored in this map */
2510 -void bpf_fd_array_map_clear(struct bpf_map *map)
2511 +static void bpf_fd_array_map_clear(struct bpf_map *map)
2512 {
2513 struct bpf_array *array = container_of(map, struct bpf_array, map);
2514 int i;
2515 @@ -485,6 +485,7 @@ const struct bpf_map_ops prog_array_map_ops = {
2516 .map_fd_get_ptr = prog_fd_array_get_ptr,
2517 .map_fd_put_ptr = prog_fd_array_put_ptr,
2518 .map_fd_sys_lookup_elem = prog_fd_array_sys_lookup_elem,
2519 + .map_release_uref = bpf_fd_array_map_clear,
2520 };
2521
2522 static struct bpf_event_entry *bpf_event_entry_gen(struct file *perf_file,
2523 diff --git a/kernel/bpf/sockmap.c b/kernel/bpf/sockmap.c
2524 index 20eaddfa691c..22991e19c01c 100644
2525 --- a/kernel/bpf/sockmap.c
2526 +++ b/kernel/bpf/sockmap.c
2527 @@ -875,7 +875,7 @@ static int sock_map_update_elem(struct bpf_map *map,
2528 return err;
2529 }
2530
2531 -static void sock_map_release(struct bpf_map *map, struct file *map_file)
2532 +static void sock_map_release(struct bpf_map *map)
2533 {
2534 struct bpf_stab *stab = container_of(map, struct bpf_stab, map);
2535 struct bpf_prog *orig;
2536 @@ -895,7 +895,7 @@ const struct bpf_map_ops sock_map_ops = {
2537 .map_get_next_key = sock_map_get_next_key,
2538 .map_update_elem = sock_map_update_elem,
2539 .map_delete_elem = sock_map_delete_elem,
2540 - .map_release = sock_map_release,
2541 + .map_release_uref = sock_map_release,
2542 };
2543
2544 BPF_CALL_4(bpf_sock_map_update, struct bpf_sock_ops_kern *, bpf_sock,
2545 diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
2546 index 4e933219fec6..ea22d0b6a9f0 100644
2547 --- a/kernel/bpf/syscall.c
2548 +++ b/kernel/bpf/syscall.c
2549 @@ -214,8 +214,8 @@ static void bpf_map_free_deferred(struct work_struct *work)
2550 static void bpf_map_put_uref(struct bpf_map *map)
2551 {
2552 if (atomic_dec_and_test(&map->usercnt)) {
2553 - if (map->map_type == BPF_MAP_TYPE_PROG_ARRAY)
2554 - bpf_fd_array_map_clear(map);
2555 + if (map->ops->map_release_uref)
2556 + map->ops->map_release_uref(map);
2557 }
2558 }
2559
2560 diff --git a/kernel/events/core.c b/kernel/events/core.c
2561 index 4dbce29a9313..991af683ef9e 100644
2562 --- a/kernel/events/core.c
2563 +++ b/kernel/events/core.c
2564 @@ -8058,6 +8058,8 @@ void perf_tp_event(u16 event_type, u64 count, void *record, int entry_size,
2565 goto unlock;
2566
2567 list_for_each_entry_rcu(event, &ctx->event_list, event_entry) {
2568 + if (event->cpu != smp_processor_id())
2569 + continue;
2570 if (event->attr.type != PERF_TYPE_TRACEPOINT)
2571 continue;
2572 if (event->attr.config != entry->type)
2573 @@ -9020,9 +9022,7 @@ static void free_pmu_context(struct pmu *pmu)
2574 if (pmu->task_ctx_nr > perf_invalid_context)
2575 return;
2576
2577 - mutex_lock(&pmus_lock);
2578 free_percpu(pmu->pmu_cpu_context);
2579 - mutex_unlock(&pmus_lock);
2580 }
2581
2582 /*
2583 @@ -9278,12 +9278,8 @@ EXPORT_SYMBOL_GPL(perf_pmu_register);
2584
2585 void perf_pmu_unregister(struct pmu *pmu)
2586 {
2587 - int remove_device;
2588 -
2589 mutex_lock(&pmus_lock);
2590 - remove_device = pmu_bus_running;
2591 list_del_rcu(&pmu->entry);
2592 - mutex_unlock(&pmus_lock);
2593
2594 /*
2595 * We dereference the pmu list under both SRCU and regular RCU, so
2596 @@ -9295,13 +9291,14 @@ void perf_pmu_unregister(struct pmu *pmu)
2597 free_percpu(pmu->pmu_disable_count);
2598 if (pmu->type >= PERF_TYPE_MAX)
2599 idr_remove(&pmu_idr, pmu->type);
2600 - if (remove_device) {
2601 + if (pmu_bus_running) {
2602 if (pmu->nr_addr_filters)
2603 device_remove_file(pmu->dev, &dev_attr_nr_addr_filters);
2604 device_del(pmu->dev);
2605 put_device(pmu->dev);
2606 }
2607 free_pmu_context(pmu);
2608 + mutex_unlock(&pmus_lock);
2609 }
2610 EXPORT_SYMBOL_GPL(perf_pmu_unregister);
2611
2612 diff --git a/kernel/locking/test-ww_mutex.c b/kernel/locking/test-ww_mutex.c
2613 index 0e4cd64ad2c0..654977862b06 100644
2614 --- a/kernel/locking/test-ww_mutex.c
2615 +++ b/kernel/locking/test-ww_mutex.c
2616 @@ -260,7 +260,7 @@ static void test_cycle_work(struct work_struct *work)
2617 {
2618 struct test_cycle *cycle = container_of(work, typeof(*cycle), work);
2619 struct ww_acquire_ctx ctx;
2620 - int err;
2621 + int err, erra = 0;
2622
2623 ww_acquire_init(&ctx, &ww_class);
2624 ww_mutex_lock(&cycle->a_mutex, &ctx);
2625 @@ -270,17 +270,19 @@ static void test_cycle_work(struct work_struct *work)
2626
2627 err = ww_mutex_lock(cycle->b_mutex, &ctx);
2628 if (err == -EDEADLK) {
2629 + err = 0;
2630 ww_mutex_unlock(&cycle->a_mutex);
2631 ww_mutex_lock_slow(cycle->b_mutex, &ctx);
2632 - err = ww_mutex_lock(&cycle->a_mutex, &ctx);
2633 + erra = ww_mutex_lock(&cycle->a_mutex, &ctx);
2634 }
2635
2636 if (!err)
2637 ww_mutex_unlock(cycle->b_mutex);
2638 - ww_mutex_unlock(&cycle->a_mutex);
2639 + if (!erra)
2640 + ww_mutex_unlock(&cycle->a_mutex);
2641 ww_acquire_fini(&ctx);
2642
2643 - cycle->result = err;
2644 + cycle->result = err ?: erra;
2645 }
2646
2647 static int __test_cycle(unsigned int nthreads)
2648 diff --git a/lib/test_bpf.c b/lib/test_bpf.c
2649 index 64701b4c9900..75ebf2bbc2ee 100644
2650 --- a/lib/test_bpf.c
2651 +++ b/lib/test_bpf.c
2652 @@ -5427,7 +5427,7 @@ static struct bpf_test tests[] = {
2653 {
2654 "BPF_MAXINSNS: Jump, gap, jump, ...",
2655 { },
2656 -#ifdef CONFIG_BPF_JIT_ALWAYS_ON
2657 +#if defined(CONFIG_BPF_JIT_ALWAYS_ON) && defined(CONFIG_X86)
2658 CLASSIC | FLAG_NO_DATA | FLAG_EXPECTED_FAIL,
2659 #else
2660 CLASSIC | FLAG_NO_DATA,
2661 diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
2662 index 1fba2a03f8ae..ba24f613c0fc 100644
2663 --- a/net/bluetooth/mgmt.c
2664 +++ b/net/bluetooth/mgmt.c
2665 @@ -2298,9 +2298,8 @@ static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2666 /* LE address type */
2667 addr_type = le_addr_type(cp->addr.type);
2668
2669 - hci_remove_irk(hdev, &cp->addr.bdaddr, addr_type);
2670 -
2671 - err = hci_remove_ltk(hdev, &cp->addr.bdaddr, addr_type);
2672 + /* Abort any ongoing SMP pairing. Removes ltk and irk if they exist. */
2673 + err = smp_cancel_and_remove_pairing(hdev, &cp->addr.bdaddr, addr_type);
2674 if (err < 0) {
2675 err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_UNPAIR_DEVICE,
2676 MGMT_STATUS_NOT_PAIRED, &rp,
2677 @@ -2314,8 +2313,6 @@ static int unpair_device(struct sock *sk, struct hci_dev *hdev, void *data,
2678 goto done;
2679 }
2680
2681 - /* Abort any ongoing SMP pairing */
2682 - smp_cancel_pairing(conn);
2683
2684 /* Defer clearing up the connection parameters until closing to
2685 * give a chance of keeping them if a repairing happens.
2686 diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
2687 index a27704ff13a9..dbcc439fc78b 100644
2688 --- a/net/bluetooth/smp.c
2689 +++ b/net/bluetooth/smp.c
2690 @@ -2410,30 +2410,51 @@ unlock:
2691 return ret;
2692 }
2693
2694 -void smp_cancel_pairing(struct hci_conn *hcon)
2695 +int smp_cancel_and_remove_pairing(struct hci_dev *hdev, bdaddr_t *bdaddr,
2696 + u8 addr_type)
2697 {
2698 - struct l2cap_conn *conn = hcon->l2cap_data;
2699 + struct hci_conn *hcon;
2700 + struct l2cap_conn *conn;
2701 struct l2cap_chan *chan;
2702 struct smp_chan *smp;
2703 + int err;
2704 +
2705 + err = hci_remove_ltk(hdev, bdaddr, addr_type);
2706 + hci_remove_irk(hdev, bdaddr, addr_type);
2707 +
2708 + hcon = hci_conn_hash_lookup_le(hdev, bdaddr, addr_type);
2709 + if (!hcon)
2710 + goto done;
2711
2712 + conn = hcon->l2cap_data;
2713 if (!conn)
2714 - return;
2715 + goto done;
2716
2717 chan = conn->smp;
2718 if (!chan)
2719 - return;
2720 + goto done;
2721
2722 l2cap_chan_lock(chan);
2723
2724 smp = chan->data;
2725 if (smp) {
2726 + /* Set keys to NULL to make sure smp_failure() does not try to
2727 + * remove and free already invalidated rcu list entries. */
2728 + smp->ltk = NULL;
2729 + smp->slave_ltk = NULL;
2730 + smp->remote_irk = NULL;
2731 +
2732 if (test_bit(SMP_FLAG_COMPLETE, &smp->flags))
2733 smp_failure(conn, 0);
2734 else
2735 smp_failure(conn, SMP_UNSPECIFIED);
2736 + err = 0;
2737 }
2738
2739 l2cap_chan_unlock(chan);
2740 +
2741 +done:
2742 + return err;
2743 }
2744
2745 static int smp_cmd_encrypt_info(struct l2cap_conn *conn, struct sk_buff *skb)
2746 diff --git a/net/bluetooth/smp.h b/net/bluetooth/smp.h
2747 index 0ff6247eaa6c..121edadd5f8d 100644
2748 --- a/net/bluetooth/smp.h
2749 +++ b/net/bluetooth/smp.h
2750 @@ -181,7 +181,8 @@ enum smp_key_pref {
2751 };
2752
2753 /* SMP Commands */
2754 -void smp_cancel_pairing(struct hci_conn *hcon);
2755 +int smp_cancel_and_remove_pairing(struct hci_dev *hdev, bdaddr_t *bdaddr,
2756 + u8 addr_type);
2757 bool smp_sufficient_security(struct hci_conn *hcon, u8 sec_level,
2758 enum smp_key_pref key_pref);
2759 int smp_conn_security(struct hci_conn *hcon, __u8 sec_level);
2760 diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
2761 index 8dc5c8d69bcd..a813dfe2dc2c 100644
2762 --- a/net/bridge/br_multicast.c
2763 +++ b/net/bridge/br_multicast.c
2764 @@ -1390,7 +1390,14 @@ static void br_multicast_query_received(struct net_bridge *br,
2765 return;
2766
2767 br_multicast_update_query_timer(br, query, max_delay);
2768 - br_multicast_mark_router(br, port);
2769 +
2770 + /* Based on RFC4541, section 2.1.1 IGMP Forwarding Rules,
2771 + * the arrival port for IGMP Queries where the source address
2772 + * is 0.0.0.0 should not be added to router port list.
2773 + */
2774 + if ((saddr->proto == htons(ETH_P_IP) && saddr->u.ip4) ||
2775 + saddr->proto == htons(ETH_P_IPV6))
2776 + br_multicast_mark_router(br, port);
2777 }
2778
2779 static int br_ip4_multicast_query(struct net_bridge *br,
2780 diff --git a/net/bridge/br_netfilter_hooks.c b/net/bridge/br_netfilter_hooks.c
2781 index c2eea1b8737a..7582f28ab306 100644
2782 --- a/net/bridge/br_netfilter_hooks.c
2783 +++ b/net/bridge/br_netfilter_hooks.c
2784 @@ -832,7 +832,8 @@ static unsigned int ip_sabotage_in(void *priv,
2785 struct sk_buff *skb,
2786 const struct nf_hook_state *state)
2787 {
2788 - if (skb->nf_bridge && !skb->nf_bridge->in_prerouting) {
2789 + if (skb->nf_bridge && !skb->nf_bridge->in_prerouting &&
2790 + !netif_is_l3_master(skb->dev)) {
2791 state->okfn(state->net, state->sk, skb);
2792 return NF_STOLEN;
2793 }
2794 diff --git a/net/core/datagram.c b/net/core/datagram.c
2795 index 3964c108b169..d8a0774f7608 100644
2796 --- a/net/core/datagram.c
2797 +++ b/net/core/datagram.c
2798 @@ -810,8 +810,9 @@ int skb_copy_and_csum_datagram_msg(struct sk_buff *skb,
2799 return -EINVAL;
2800 }
2801
2802 - if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
2803 - netdev_rx_csum_fault(skb->dev);
2804 + if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE) &&
2805 + !skb->csum_complete_sw)
2806 + netdev_rx_csum_fault(NULL);
2807 }
2808 return 0;
2809 fault:
2810 diff --git a/net/core/ethtool.c b/net/core/ethtool.c
2811 index 0ae5ac5e090f..3469f5053c79 100644
2812 --- a/net/core/ethtool.c
2813 +++ b/net/core/ethtool.c
2814 @@ -2410,13 +2410,17 @@ roll_back:
2815 return ret;
2816 }
2817
2818 -static int ethtool_set_per_queue(struct net_device *dev, void __user *useraddr)
2819 +static int ethtool_set_per_queue(struct net_device *dev,
2820 + void __user *useraddr, u32 sub_cmd)
2821 {
2822 struct ethtool_per_queue_op per_queue_opt;
2823
2824 if (copy_from_user(&per_queue_opt, useraddr, sizeof(per_queue_opt)))
2825 return -EFAULT;
2826
2827 + if (per_queue_opt.sub_command != sub_cmd)
2828 + return -EINVAL;
2829 +
2830 switch (per_queue_opt.sub_command) {
2831 case ETHTOOL_GCOALESCE:
2832 return ethtool_get_per_queue_coalesce(dev, useraddr, &per_queue_opt);
2833 @@ -2787,7 +2791,7 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
2834 rc = ethtool_get_phy_stats(dev, useraddr);
2835 break;
2836 case ETHTOOL_PERQUEUE:
2837 - rc = ethtool_set_per_queue(dev, useraddr);
2838 + rc = ethtool_set_per_queue(dev, useraddr, sub_cmd);
2839 break;
2840 case ETHTOOL_GLINKSETTINGS:
2841 rc = ethtool_get_link_ksettings(dev, useraddr);
2842 diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
2843 index 760364526dc1..c392a77ff788 100644
2844 --- a/net/core/rtnetlink.c
2845 +++ b/net/core/rtnetlink.c
2846 @@ -3080,6 +3080,11 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh,
2847 return -EINVAL;
2848 }
2849
2850 + if (dev->type != ARPHRD_ETHER) {
2851 + NL_SET_ERR_MSG(extack, "FDB add only supported for Ethernet devices");
2852 + return -EINVAL;
2853 + }
2854 +
2855 addr = nla_data(tb[NDA_LLADDR]);
2856
2857 err = fdb_vid_parse(tb[NDA_VLAN], &vid);
2858 @@ -3184,6 +3189,11 @@ static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh,
2859 return -EINVAL;
2860 }
2861
2862 + if (dev->type != ARPHRD_ETHER) {
2863 + NL_SET_ERR_MSG(extack, "FDB delete only supported for Ethernet devices");
2864 + return -EINVAL;
2865 + }
2866 +
2867 addr = nla_data(tb[NDA_LLADDR]);
2868
2869 err = fdb_vid_parse(tb[NDA_VLAN], &vid);
2870 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
2871 index 9f80b947f53b..c19a118f9f82 100644
2872 --- a/net/core/skbuff.c
2873 +++ b/net/core/skbuff.c
2874 @@ -1843,8 +1843,9 @@ int pskb_trim_rcsum_slow(struct sk_buff *skb, unsigned int len)
2875 if (skb->ip_summed == CHECKSUM_COMPLETE) {
2876 int delta = skb->len - len;
2877
2878 - skb->csum = csum_sub(skb->csum,
2879 - skb_checksum(skb, len, delta, 0));
2880 + skb->csum = csum_block_sub(skb->csum,
2881 + skb_checksum(skb, len, delta, 0),
2882 + len);
2883 }
2884 return __pskb_trim(skb, len);
2885 }
2886 diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
2887 index e7227128df2c..cb8fa5d7afe1 100644
2888 --- a/net/ipv4/ip_fragment.c
2889 +++ b/net/ipv4/ip_fragment.c
2890 @@ -720,10 +720,14 @@ struct sk_buff *ip_check_defrag(struct net *net, struct sk_buff *skb, u32 user)
2891 if (ip_is_fragment(&iph)) {
2892 skb = skb_share_check(skb, GFP_ATOMIC);
2893 if (skb) {
2894 - if (!pskb_may_pull(skb, netoff + iph.ihl * 4))
2895 - return skb;
2896 - if (pskb_trim_rcsum(skb, netoff + len))
2897 - return skb;
2898 + if (!pskb_may_pull(skb, netoff + iph.ihl * 4)) {
2899 + kfree_skb(skb);
2900 + return NULL;
2901 + }
2902 + if (pskb_trim_rcsum(skb, netoff + len)) {
2903 + kfree_skb(skb);
2904 + return NULL;
2905 + }
2906 memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));
2907 if (ip_defrag(net, skb, user))
2908 return NULL;
2909 diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
2910 index cbd9c0d8a788..9f314a5e9f27 100644
2911 --- a/net/ipv4/ipmr.c
2912 +++ b/net/ipv4/ipmr.c
2913 @@ -2499,8 +2499,6 @@ static int ipmr_rtm_dumproute(struct sk_buff *skb, struct netlink_callback *cb)
2914 next_entry:
2915 e++;
2916 }
2917 - e = 0;
2918 - s_e = 0;
2919
2920 spin_lock_bh(&mfc_unres_lock);
2921 list_for_each_entry(mfc, &mrt->mfc_unres_queue, list) {
2922 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
2923 index dc0ec227b9d2..b89920c0f226 100644
2924 --- a/net/ipv4/udp.c
2925 +++ b/net/ipv4/udp.c
2926 @@ -2045,8 +2045,24 @@ static inline int udp4_csum_init(struct sk_buff *skb, struct udphdr *uh,
2927 /* Note, we are only interested in != 0 or == 0, thus the
2928 * force to int.
2929 */
2930 - return (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
2931 - inet_compute_pseudo);
2932 + err = (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
2933 + inet_compute_pseudo);
2934 + if (err)
2935 + return err;
2936 +
2937 + if (skb->ip_summed == CHECKSUM_COMPLETE && !skb->csum_valid) {
2938 + /* If SW calculated the value, we know it's bad */
2939 + if (skb->csum_complete_sw)
2940 + return 1;
2941 +
2942 + /* HW says the value is bad. Let's validate that.
2943 + * skb->csum is no longer the full packet checksum,
2944 + * so don't treat it as such.
2945 + */
2946 + skb_checksum_complete_unset(skb);
2947 + }
2948 +
2949 + return 0;
2950 }
2951
2952 /* wrapper for udp_queue_rcv_skb tacking care of csum conversion and
2953 diff --git a/net/ipv4/xfrm4_input.c b/net/ipv4/xfrm4_input.c
2954 index bcfc00e88756..f8de2482a529 100644
2955 --- a/net/ipv4/xfrm4_input.c
2956 +++ b/net/ipv4/xfrm4_input.c
2957 @@ -67,6 +67,7 @@ int xfrm4_transport_finish(struct sk_buff *skb, int async)
2958
2959 if (xo && (xo->flags & XFRM_GRO)) {
2960 skb_mac_header_rebuild(skb);
2961 + skb_reset_transport_header(skb);
2962 return 0;
2963 }
2964
2965 diff --git a/net/ipv4/xfrm4_mode_transport.c b/net/ipv4/xfrm4_mode_transport.c
2966 index 3d36644890bb..1ad2c2c4e250 100644
2967 --- a/net/ipv4/xfrm4_mode_transport.c
2968 +++ b/net/ipv4/xfrm4_mode_transport.c
2969 @@ -46,7 +46,6 @@ static int xfrm4_transport_output(struct xfrm_state *x, struct sk_buff *skb)
2970 static int xfrm4_transport_input(struct xfrm_state *x, struct sk_buff *skb)
2971 {
2972 int ihl = skb->data - skb_transport_header(skb);
2973 - struct xfrm_offload *xo = xfrm_offload(skb);
2974
2975 if (skb->transport_header != skb->network_header) {
2976 memmove(skb_transport_header(skb),
2977 @@ -54,8 +53,7 @@ static int xfrm4_transport_input(struct xfrm_state *x, struct sk_buff *skb)
2978 skb->network_header = skb->transport_header;
2979 }
2980 ip_hdr(skb)->tot_len = htons(skb->len + ihl);
2981 - if (!xo || !(xo->flags & XFRM_GRO))
2982 - skb_reset_transport_header(skb);
2983 + skb_reset_transport_header(skb);
2984 return 0;
2985 }
2986
2987 diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
2988 index 569f7c3f6b95..9ac6f6232294 100644
2989 --- a/net/ipv6/addrconf.c
2990 +++ b/net/ipv6/addrconf.c
2991 @@ -4793,8 +4793,8 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb,
2992
2993 /* unicast address incl. temp addr */
2994 list_for_each_entry(ifa, &idev->addr_list, if_list) {
2995 - if (++ip_idx < s_ip_idx)
2996 - continue;
2997 + if (ip_idx < s_ip_idx)
2998 + goto next;
2999 err = inet6_fill_ifaddr(skb, ifa,
3000 NETLINK_CB(cb->skb).portid,
3001 cb->nlh->nlmsg_seq,
3002 @@ -4803,6 +4803,8 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb,
3003 if (err < 0)
3004 break;
3005 nl_dump_check_consistent(cb, nlmsg_hdr(skb));
3006 +next:
3007 + ip_idx++;
3008 }
3009 break;
3010 }
3011 diff --git a/net/ipv6/ip6_checksum.c b/net/ipv6/ip6_checksum.c
3012 index 547515e8450a..377717045f8f 100644
3013 --- a/net/ipv6/ip6_checksum.c
3014 +++ b/net/ipv6/ip6_checksum.c
3015 @@ -88,8 +88,24 @@ int udp6_csum_init(struct sk_buff *skb, struct udphdr *uh, int proto)
3016 * Note, we are only interested in != 0 or == 0, thus the
3017 * force to int.
3018 */
3019 - return (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
3020 - ip6_compute_pseudo);
3021 + err = (__force int)skb_checksum_init_zero_check(skb, proto, uh->check,
3022 + ip6_compute_pseudo);
3023 + if (err)
3024 + return err;
3025 +
3026 + if (skb->ip_summed == CHECKSUM_COMPLETE && !skb->csum_valid) {
3027 + /* If SW calculated the value, we know it's bad */
3028 + if (skb->csum_complete_sw)
3029 + return 1;
3030 +
3031 + /* HW says the value is bad. Let's validate that.
3032 + * skb->csum is no longer the full packet checksum,
3033 + * so don't treat is as such.
3034 + */
3035 + skb_checksum_complete_unset(skb);
3036 + }
3037 +
3038 + return 0;
3039 }
3040 EXPORT_SYMBOL(udp6_csum_init);
3041
3042 diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
3043 index 0e9296f44ee4..948f304db0a3 100644
3044 --- a/net/ipv6/ip6_tunnel.c
3045 +++ b/net/ipv6/ip6_tunnel.c
3046 @@ -1185,10 +1185,6 @@ route_lookup:
3047 }
3048 skb_dst_set(skb, dst);
3049
3050 - if (encap_limit >= 0) {
3051 - init_tel_txopt(&opt, encap_limit);
3052 - ipv6_push_frag_opts(skb, &opt.ops, &proto);
3053 - }
3054 hop_limit = hop_limit ? : ip6_dst_hoplimit(dst);
3055
3056 /* Calculate max headroom for all the headers and adjust
3057 @@ -1203,6 +1199,11 @@ route_lookup:
3058 if (err)
3059 return err;
3060
3061 + if (encap_limit >= 0) {
3062 + init_tel_txopt(&opt, encap_limit);
3063 + ipv6_push_frag_opts(skb, &opt.ops, &proto);
3064 + }
3065 +
3066 skb_push(skb, sizeof(struct ipv6hdr));
3067 skb_reset_network_header(skb);
3068 ipv6h = ipv6_hdr(skb);
3069 diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
3070 index d112762b4cb8..bd269e78272a 100644
3071 --- a/net/ipv6/mcast.c
3072 +++ b/net/ipv6/mcast.c
3073 @@ -2412,17 +2412,17 @@ static int ip6_mc_leave_src(struct sock *sk, struct ipv6_mc_socklist *iml,
3074 {
3075 int err;
3076
3077 - /* callers have the socket lock and rtnl lock
3078 - * so no other readers or writers of iml or its sflist
3079 - */
3080 + write_lock_bh(&iml->sflock);
3081 if (!iml->sflist) {
3082 /* any-source empty exclude case */
3083 - return ip6_mc_del_src(idev, &iml->addr, iml->sfmode, 0, NULL, 0);
3084 + err = ip6_mc_del_src(idev, &iml->addr, iml->sfmode, 0, NULL, 0);
3085 + } else {
3086 + err = ip6_mc_del_src(idev, &iml->addr, iml->sfmode,
3087 + iml->sflist->sl_count, iml->sflist->sl_addr, 0);
3088 + sock_kfree_s(sk, iml->sflist, IP6_SFLSIZE(iml->sflist->sl_max));
3089 + iml->sflist = NULL;
3090 }
3091 - err = ip6_mc_del_src(idev, &iml->addr, iml->sfmode,
3092 - iml->sflist->sl_count, iml->sflist->sl_addr, 0);
3093 - sock_kfree_s(sk, iml->sflist, IP6_SFLSIZE(iml->sflist->sl_max));
3094 - iml->sflist = NULL;
3095 + write_unlock_bh(&iml->sflock);
3096 return err;
3097 }
3098
3099 diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
3100 index 528218460bc5..5f80e57e93ed 100644
3101 --- a/net/ipv6/ndisc.c
3102 +++ b/net/ipv6/ndisc.c
3103 @@ -1722,10 +1722,9 @@ int ndisc_rcv(struct sk_buff *skb)
3104 return 0;
3105 }
3106
3107 - memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb));
3108 -
3109 switch (msg->icmph.icmp6_type) {
3110 case NDISC_NEIGHBOUR_SOLICITATION:
3111 + memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb));
3112 ndisc_recv_ns(skb);
3113 break;
3114
3115 diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c
3116 index 2ed8536e10b6..611d406c4656 100644
3117 --- a/net/ipv6/netfilter/nf_conntrack_reasm.c
3118 +++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
3119 @@ -598,8 +598,6 @@ int nf_ct_frag6_gather(struct net *net, struct sk_buff *skb, u32 user)
3120 fq->q.meat == fq->q.len &&
3121 nf_ct_frag6_reasm(fq, skb, dev))
3122 ret = 0;
3123 - else
3124 - skb_dst_drop(skb);
3125
3126 out_unlock:
3127 spin_unlock_bh(&fq->q.lock);
3128 diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
3129 index 5cee941ab0a9..8d185a0fc5af 100644
3130 --- a/net/ipv6/udp.c
3131 +++ b/net/ipv6/udp.c
3132 @@ -794,11 +794,9 @@ static int udp6_unicast_rcv_skb(struct sock *sk, struct sk_buff *skb,
3133
3134 ret = udpv6_queue_rcv_skb(sk, skb);
3135
3136 - /* a return value > 0 means to resubmit the input, but
3137 - * it wants the return to be -protocol, or 0
3138 - */
3139 + /* a return value > 0 means to resubmit the input */
3140 if (ret > 0)
3141 - return -ret;
3142 + return ret;
3143 return 0;
3144 }
3145
3146 diff --git a/net/ipv6/xfrm6_input.c b/net/ipv6/xfrm6_input.c
3147 index 841f4a07438e..9ef490dddcea 100644
3148 --- a/net/ipv6/xfrm6_input.c
3149 +++ b/net/ipv6/xfrm6_input.c
3150 @@ -59,6 +59,7 @@ int xfrm6_transport_finish(struct sk_buff *skb, int async)
3151
3152 if (xo && (xo->flags & XFRM_GRO)) {
3153 skb_mac_header_rebuild(skb);
3154 + skb_reset_transport_header(skb);
3155 return -1;
3156 }
3157
3158 diff --git a/net/ipv6/xfrm6_mode_transport.c b/net/ipv6/xfrm6_mode_transport.c
3159 index 9ad07a91708e..3c29da5defe6 100644
3160 --- a/net/ipv6/xfrm6_mode_transport.c
3161 +++ b/net/ipv6/xfrm6_mode_transport.c
3162 @@ -51,7 +51,6 @@ static int xfrm6_transport_output(struct xfrm_state *x, struct sk_buff *skb)
3163 static int xfrm6_transport_input(struct xfrm_state *x, struct sk_buff *skb)
3164 {
3165 int ihl = skb->data - skb_transport_header(skb);
3166 - struct xfrm_offload *xo = xfrm_offload(skb);
3167
3168 if (skb->transport_header != skb->network_header) {
3169 memmove(skb_transport_header(skb),
3170 @@ -60,8 +59,7 @@ static int xfrm6_transport_input(struct xfrm_state *x, struct sk_buff *skb)
3171 }
3172 ipv6_hdr(skb)->payload_len = htons(skb->len + ihl -
3173 sizeof(struct ipv6hdr));
3174 - if (!xo || !(xo->flags & XFRM_GRO))
3175 - skb_reset_transport_header(skb);
3176 + skb_reset_transport_header(skb);
3177 return 0;
3178 }
3179
3180 diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c
3181 index 8ae87d4ec5ff..29dae7f2ff14 100644
3182 --- a/net/ipv6/xfrm6_output.c
3183 +++ b/net/ipv6/xfrm6_output.c
3184 @@ -170,9 +170,11 @@ static int __xfrm6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
3185
3186 if (toobig && xfrm6_local_dontfrag(skb)) {
3187 xfrm6_local_rxpmtu(skb, mtu);
3188 + kfree_skb(skb);
3189 return -EMSGSIZE;
3190 } else if (!skb->ignore_df && toobig && skb->sk) {
3191 xfrm_local_error(skb, mtu);
3192 + kfree_skb(skb);
3193 return -EMSGSIZE;
3194 }
3195
3196 diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
3197 index 5c87f1d3e525..33ea389ee015 100644
3198 --- a/net/l2tp/l2tp_core.c
3199 +++ b/net/l2tp/l2tp_core.c
3200 @@ -808,10 +808,8 @@ void l2tp_recv_common(struct l2tp_session *session, struct sk_buff *skb,
3201 }
3202 }
3203
3204 - /* Session data offset is handled differently for L2TPv2 and
3205 - * L2TPv3. For L2TPv2, there is an optional 16-bit value in
3206 - * the header. For L2TPv3, the offset is negotiated using AVPs
3207 - * in the session setup control protocol.
3208 + /* Session data offset is defined only for L2TPv2 and is
3209 + * indicated by an optional 16-bit value in the header.
3210 */
3211 if (tunnel->version == L2TP_HDR_VER_2) {
3212 /* If offset bit set, skip it. */
3213 @@ -819,8 +817,7 @@ void l2tp_recv_common(struct l2tp_session *session, struct sk_buff *skb,
3214 offset = ntohs(*(__be16 *)ptr);
3215 ptr += 2 + offset;
3216 }
3217 - } else
3218 - ptr += session->offset;
3219 + }
3220
3221 offset = ptr - optr;
3222 if (!pskb_may_pull(skb, offset))
3223 @@ -1104,8 +1101,6 @@ static int l2tp_build_l2tpv3_header(struct l2tp_session *session, void *buf)
3224 }
3225 bufp += session->l2specific_len;
3226 }
3227 - if (session->offset)
3228 - bufp += session->offset;
3229
3230 return bufp - optr;
3231 }
3232 @@ -1779,7 +1774,7 @@ void l2tp_session_set_header_len(struct l2tp_session *session, int version)
3233 if (session->send_seq)
3234 session->hdr_len += 4;
3235 } else {
3236 - session->hdr_len = 4 + session->cookie_len + session->l2specific_len + session->offset;
3237 + session->hdr_len = 4 + session->cookie_len + session->l2specific_len;
3238 if (session->tunnel->encap == L2TP_ENCAPTYPE_UDP)
3239 session->hdr_len += 4;
3240 }
3241 @@ -1830,7 +1825,6 @@ struct l2tp_session *l2tp_session_create(int priv_size, struct l2tp_tunnel *tunn
3242 session->recv_seq = cfg->recv_seq;
3243 session->lns_mode = cfg->lns_mode;
3244 session->reorder_timeout = cfg->reorder_timeout;
3245 - session->offset = cfg->offset;
3246 session->l2specific_type = cfg->l2specific_type;
3247 session->l2specific_len = cfg->l2specific_len;
3248 session->cookie_len = cfg->cookie_len;
3249 diff --git a/net/l2tp/l2tp_core.h b/net/l2tp/l2tp_core.h
3250 index 9e2f1fda1b03..0a58c0754526 100644
3251 --- a/net/l2tp/l2tp_core.h
3252 +++ b/net/l2tp/l2tp_core.h
3253 @@ -59,7 +59,6 @@ struct l2tp_session_cfg {
3254 int debug; /* bitmask of debug message
3255 * categories */
3256 u16 vlan_id; /* VLAN pseudowire only */
3257 - u16 offset; /* offset to payload */
3258 u16 l2specific_len; /* Layer 2 specific length */
3259 u16 l2specific_type; /* Layer 2 specific type */
3260 u8 cookie[8]; /* optional cookie */
3261 @@ -86,8 +85,6 @@ struct l2tp_session {
3262 int cookie_len;
3263 u8 peer_cookie[8];
3264 int peer_cookie_len;
3265 - u16 offset; /* offset from end of L2TP header
3266 - to beginning of data */
3267 u16 l2specific_len;
3268 u16 l2specific_type;
3269 u16 hdr_len;
3270 diff --git a/net/l2tp/l2tp_debugfs.c b/net/l2tp/l2tp_debugfs.c
3271 index 53bae54c4d6e..534cad03b9e9 100644
3272 --- a/net/l2tp/l2tp_debugfs.c
3273 +++ b/net/l2tp/l2tp_debugfs.c
3274 @@ -180,8 +180,8 @@ static void l2tp_dfs_seq_session_show(struct seq_file *m, void *v)
3275 session->lns_mode ? "LNS" : "LAC",
3276 session->debug,
3277 jiffies_to_msecs(session->reorder_timeout));
3278 - seq_printf(m, " offset %hu l2specific %hu/%hu\n",
3279 - session->offset, session->l2specific_type, session->l2specific_len);
3280 + seq_printf(m, " offset 0 l2specific %hu/%hu\n",
3281 + session->l2specific_type, session->l2specific_len);
3282 if (session->cookie_len) {
3283 seq_printf(m, " cookie %02x%02x%02x%02x",
3284 session->cookie[0], session->cookie[1],
3285 diff --git a/net/l2tp/l2tp_netlink.c b/net/l2tp/l2tp_netlink.c
3286 index c28223d8092b..001797ce4084 100644
3287 --- a/net/l2tp/l2tp_netlink.c
3288 +++ b/net/l2tp/l2tp_netlink.c
3289 @@ -549,9 +549,6 @@ static int l2tp_nl_cmd_session_create(struct sk_buff *skb, struct genl_info *inf
3290 }
3291
3292 if (tunnel->version > 2) {
3293 - if (info->attrs[L2TP_ATTR_OFFSET])
3294 - cfg.offset = nla_get_u16(info->attrs[L2TP_ATTR_OFFSET]);
3295 -
3296 if (info->attrs[L2TP_ATTR_DATA_SEQ])
3297 cfg.data_seq = nla_get_u8(info->attrs[L2TP_ATTR_DATA_SEQ]);
3298
3299 diff --git a/net/llc/llc_conn.c b/net/llc/llc_conn.c
3300 index b084fd19ad32..56c3fb5cc805 100644
3301 --- a/net/llc/llc_conn.c
3302 +++ b/net/llc/llc_conn.c
3303 @@ -734,6 +734,7 @@ void llc_sap_add_socket(struct llc_sap *sap, struct sock *sk)
3304 llc_sk(sk)->sap = sap;
3305
3306 spin_lock_bh(&sap->sk_lock);
3307 + sock_set_flag(sk, SOCK_RCU_FREE);
3308 sap->sk_count++;
3309 sk_nulls_add_node_rcu(sk, laddr_hb);
3310 hlist_add_head(&llc->dev_hash_node, dev_hb);
3311 diff --git a/net/mac80211/mesh.h b/net/mac80211/mesh.h
3312 index 7e5f271e3c30..4f1c61637ce3 100644
3313 --- a/net/mac80211/mesh.h
3314 +++ b/net/mac80211/mesh.h
3315 @@ -217,7 +217,8 @@ void mesh_rmc_free(struct ieee80211_sub_if_data *sdata);
3316 int mesh_rmc_init(struct ieee80211_sub_if_data *sdata);
3317 void ieee80211s_init(void);
3318 void ieee80211s_update_metric(struct ieee80211_local *local,
3319 - struct sta_info *sta, struct sk_buff *skb);
3320 + struct sta_info *sta,
3321 + struct ieee80211_tx_status *st);
3322 void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata);
3323 void ieee80211_mesh_teardown_sdata(struct ieee80211_sub_if_data *sdata);
3324 int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata);
3325 diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c
3326 index 055ea36ff27b..fab0764c315f 100644
3327 --- a/net/mac80211/mesh_hwmp.c
3328 +++ b/net/mac80211/mesh_hwmp.c
3329 @@ -295,15 +295,12 @@ int mesh_path_error_tx(struct ieee80211_sub_if_data *sdata,
3330 }
3331
3332 void ieee80211s_update_metric(struct ieee80211_local *local,
3333 - struct sta_info *sta, struct sk_buff *skb)
3334 + struct sta_info *sta,
3335 + struct ieee80211_tx_status *st)
3336 {
3337 - struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb);
3338 - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
3339 + struct ieee80211_tx_info *txinfo = st->info;
3340 int failed;
3341
3342 - if (!ieee80211_is_data(hdr->frame_control))
3343 - return;
3344 -
3345 failed = !(txinfo->flags & IEEE80211_TX_STAT_ACK);
3346
3347 /* moving average, scaled to 100.
3348 diff --git a/net/mac80211/status.c b/net/mac80211/status.c
3349 index da7427a41529..bdf131ed5ce8 100644
3350 --- a/net/mac80211/status.c
3351 +++ b/net/mac80211/status.c
3352 @@ -470,11 +470,6 @@ static void ieee80211_report_ack_skb(struct ieee80211_local *local,
3353 if (!skb)
3354 return;
3355
3356 - if (dropped) {
3357 - dev_kfree_skb_any(skb);
3358 - return;
3359 - }
3360 -
3361 if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) {
3362 u64 cookie = IEEE80211_SKB_CB(skb)->ack.cookie;
3363 struct ieee80211_sub_if_data *sdata;
3364 @@ -495,6 +490,8 @@ static void ieee80211_report_ack_skb(struct ieee80211_local *local,
3365 }
3366 rcu_read_unlock();
3367
3368 + dev_kfree_skb_any(skb);
3369 + } else if (dropped) {
3370 dev_kfree_skb_any(skb);
3371 } else {
3372 /* consumes skb */
3373 @@ -800,7 +797,7 @@ static void __ieee80211_tx_status(struct ieee80211_hw *hw,
3374
3375 rate_control_tx_status(local, sband, status);
3376 if (ieee80211_vif_is_mesh(&sta->sdata->vif))
3377 - ieee80211s_update_metric(local, sta, skb);
3378 + ieee80211s_update_metric(local, sta, status);
3379
3380 if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked)
3381 ieee80211_frame_acked(sta, skb);
3382 @@ -961,6 +958,8 @@ void ieee80211_tx_status_ext(struct ieee80211_hw *hw,
3383 }
3384
3385 rate_control_tx_status(local, sband, status);
3386 + if (ieee80211_vif_is_mesh(&sta->sdata->vif))
3387 + ieee80211s_update_metric(local, sta, status);
3388 }
3389
3390 if (acked || noack_success) {
3391 diff --git a/net/mac80211/tdls.c b/net/mac80211/tdls.c
3392 index 91093d4a2f84..6e7aa65cf345 100644
3393 --- a/net/mac80211/tdls.c
3394 +++ b/net/mac80211/tdls.c
3395 @@ -16,6 +16,7 @@
3396 #include "ieee80211_i.h"
3397 #include "driver-ops.h"
3398 #include "rate.h"
3399 +#include "wme.h"
3400
3401 /* give usermode some time for retries in setting up the TDLS session */
3402 #define TDLS_PEER_SETUP_TIMEOUT (15 * HZ)
3403 @@ -1006,14 +1007,13 @@ ieee80211_tdls_prep_mgmt_packet(struct wiphy *wiphy, struct net_device *dev,
3404 switch (action_code) {
3405 case WLAN_TDLS_SETUP_REQUEST:
3406 case WLAN_TDLS_SETUP_RESPONSE:
3407 - skb_set_queue_mapping(skb, IEEE80211_AC_BK);
3408 - skb->priority = 2;
3409 + skb->priority = 256 + 2;
3410 break;
3411 default:
3412 - skb_set_queue_mapping(skb, IEEE80211_AC_VI);
3413 - skb->priority = 5;
3414 + skb->priority = 256 + 5;
3415 break;
3416 }
3417 + skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, skb));
3418
3419 /*
3420 * Set the WLAN_TDLS_TEARDOWN flag to indicate a teardown in progress.
3421 diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
3422 index d8fddd88bf46..a17a56032a21 100644
3423 --- a/net/mac80211/tx.c
3424 +++ b/net/mac80211/tx.c
3425 @@ -1837,7 +1837,7 @@ static bool ieee80211_tx(struct ieee80211_sub_if_data *sdata,
3426 sdata->vif.hw_queue[skb_get_queue_mapping(skb)];
3427
3428 if (invoke_tx_handlers_early(&tx))
3429 - return false;
3430 + return true;
3431
3432 if (ieee80211_queue_skb(local, sdata, tx.sta, tx.skb))
3433 return true;
3434 diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c
3435 index 4c9c9458374a..f70e9cbf33d5 100644
3436 --- a/net/openvswitch/flow_netlink.c
3437 +++ b/net/openvswitch/flow_netlink.c
3438 @@ -2622,7 +2622,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
3439 * is already present */
3440 if (mac_proto != MAC_PROTO_NONE)
3441 return -EINVAL;
3442 - mac_proto = MAC_PROTO_NONE;
3443 + mac_proto = MAC_PROTO_ETHERNET;
3444 break;
3445
3446 case OVS_ACTION_ATTR_POP_ETH:
3447 @@ -2630,7 +2630,7 @@ static int __ovs_nla_copy_actions(struct net *net, const struct nlattr *attr,
3448 return -EINVAL;
3449 if (vlan_tci & htons(VLAN_TAG_PRESENT))
3450 return -EINVAL;
3451 - mac_proto = MAC_PROTO_ETHERNET;
3452 + mac_proto = MAC_PROTO_NONE;
3453 break;
3454
3455 default:
3456 diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h
3457 index e6c2c4f56fb1..71c7f1dd4599 100644
3458 --- a/net/rxrpc/ar-internal.h
3459 +++ b/net/rxrpc/ar-internal.h
3460 @@ -424,8 +424,7 @@ struct rxrpc_connection {
3461 spinlock_t state_lock; /* state-change lock */
3462 enum rxrpc_conn_cache_state cache_state;
3463 enum rxrpc_conn_proto_state state; /* current state of connection */
3464 - u32 local_abort; /* local abort code */
3465 - u32 remote_abort; /* remote abort code */
3466 + u32 abort_code; /* Abort code of connection abort */
3467 int debug_id; /* debug ID for printks */
3468 atomic_t serial; /* packet serial number counter */
3469 unsigned int hi_serial; /* highest serial number received */
3470 @@ -435,6 +434,7 @@ struct rxrpc_connection {
3471 u8 security_size; /* security header size */
3472 u8 security_ix; /* security type */
3473 u8 out_clientflag; /* RXRPC_CLIENT_INITIATED if we are client */
3474 + short error; /* Local error code */
3475 };
3476
3477 /*
3478 diff --git a/net/rxrpc/call_accept.c b/net/rxrpc/call_accept.c
3479 index 62b1581d44a5..2dd13f5c47c8 100644
3480 --- a/net/rxrpc/call_accept.c
3481 +++ b/net/rxrpc/call_accept.c
3482 @@ -418,11 +418,11 @@ found_service:
3483
3484 case RXRPC_CONN_REMOTELY_ABORTED:
3485 rxrpc_set_call_completion(call, RXRPC_CALL_REMOTELY_ABORTED,
3486 - conn->remote_abort, -ECONNABORTED);
3487 + conn->abort_code, conn->error);
3488 break;
3489 case RXRPC_CONN_LOCALLY_ABORTED:
3490 rxrpc_abort_call("CON", call, sp->hdr.seq,
3491 - conn->local_abort, -ECONNABORTED);
3492 + conn->abort_code, conn->error);
3493 break;
3494 default:
3495 BUG();
3496 diff --git a/net/rxrpc/conn_event.c b/net/rxrpc/conn_event.c
3497 index 0435c4167a1a..75ec1ad595b7 100644
3498 --- a/net/rxrpc/conn_event.c
3499 +++ b/net/rxrpc/conn_event.c
3500 @@ -117,7 +117,7 @@ static void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
3501
3502 switch (chan->last_type) {
3503 case RXRPC_PACKET_TYPE_ABORT:
3504 - _proto("Tx ABORT %%%u { %d } [re]", serial, conn->local_abort);
3505 + _proto("Tx ABORT %%%u { %d } [re]", serial, conn->abort_code);
3506 break;
3507 case RXRPC_PACKET_TYPE_ACK:
3508 trace_rxrpc_tx_ack(NULL, serial, chan->last_seq, 0,
3509 @@ -135,13 +135,12 @@ static void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn,
3510 * pass a connection-level abort onto all calls on that connection
3511 */
3512 static void rxrpc_abort_calls(struct rxrpc_connection *conn,
3513 - enum rxrpc_call_completion compl,
3514 - u32 abort_code, int error)
3515 + enum rxrpc_call_completion compl)
3516 {
3517 struct rxrpc_call *call;
3518 int i;
3519
3520 - _enter("{%d},%x", conn->debug_id, abort_code);
3521 + _enter("{%d},%x", conn->debug_id, conn->abort_code);
3522
3523 spin_lock(&conn->channel_lock);
3524
3525 @@ -153,9 +152,11 @@ static void rxrpc_abort_calls(struct rxrpc_connection *conn,
3526 if (compl == RXRPC_CALL_LOCALLY_ABORTED)
3527 trace_rxrpc_abort("CON", call->cid,
3528 call->call_id, 0,
3529 - abort_code, error);
3530 + conn->abort_code,
3531 + conn->error);
3532 if (rxrpc_set_call_completion(call, compl,
3533 - abort_code, error))
3534 + conn->abort_code,
3535 + conn->error))
3536 rxrpc_notify_socket(call);
3537 }
3538 }
3539 @@ -188,10 +189,12 @@ static int rxrpc_abort_connection(struct rxrpc_connection *conn,
3540 return 0;
3541 }
3542
3543 + conn->error = error;
3544 + conn->abort_code = abort_code;
3545 conn->state = RXRPC_CONN_LOCALLY_ABORTED;
3546 spin_unlock_bh(&conn->state_lock);
3547
3548 - rxrpc_abort_calls(conn, RXRPC_CALL_LOCALLY_ABORTED, abort_code, error);
3549 + rxrpc_abort_calls(conn, RXRPC_CALL_LOCALLY_ABORTED);
3550
3551 msg.msg_name = &conn->params.peer->srx.transport;
3552 msg.msg_namelen = conn->params.peer->srx.transport_len;
3553 @@ -210,7 +213,7 @@ static int rxrpc_abort_connection(struct rxrpc_connection *conn,
3554 whdr._rsvd = 0;
3555 whdr.serviceId = htons(conn->service_id);
3556
3557 - word = htonl(conn->local_abort);
3558 + word = htonl(conn->abort_code);
3559
3560 iov[0].iov_base = &whdr;
3561 iov[0].iov_len = sizeof(whdr);
3562 @@ -221,7 +224,7 @@ static int rxrpc_abort_connection(struct rxrpc_connection *conn,
3563
3564 serial = atomic_inc_return(&conn->serial);
3565 whdr.serial = htonl(serial);
3566 - _proto("Tx CONN ABORT %%%u { %d }", serial, conn->local_abort);
3567 + _proto("Tx CONN ABORT %%%u { %d }", serial, conn->abort_code);
3568
3569 ret = kernel_sendmsg(conn->params.local->socket, &msg, iov, 2, len);
3570 if (ret < 0) {
3571 @@ -289,9 +292,10 @@ static int rxrpc_process_event(struct rxrpc_connection *conn,
3572 abort_code = ntohl(wtmp);
3573 _proto("Rx ABORT %%%u { ac=%d }", sp->hdr.serial, abort_code);
3574
3575 + conn->error = -ECONNABORTED;
3576 + conn->abort_code = abort_code;
3577 conn->state = RXRPC_CONN_REMOTELY_ABORTED;
3578 - rxrpc_abort_calls(conn, RXRPC_CALL_REMOTELY_ABORTED,
3579 - abort_code, -ECONNABORTED);
3580 + rxrpc_abort_calls(conn, RXRPC_CALL_REMOTELY_ABORTED);
3581 return -ECONNABORTED;
3582
3583 case RXRPC_PACKET_TYPE_CHALLENGE:
3584 diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
3585 index 5edb636dbc4d..ea506a77f3c8 100644
3586 --- a/net/rxrpc/input.c
3587 +++ b/net/rxrpc/input.c
3588 @@ -216,10 +216,11 @@ static void rxrpc_send_ping(struct rxrpc_call *call, struct sk_buff *skb,
3589 /*
3590 * Apply a hard ACK by advancing the Tx window.
3591 */
3592 -static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to,
3593 +static bool rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to,
3594 struct rxrpc_ack_summary *summary)
3595 {
3596 struct sk_buff *skb, *list = NULL;
3597 + bool rot_last = false;
3598 int ix;
3599 u8 annotation;
3600
3601 @@ -243,15 +244,17 @@ static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to,
3602 skb->next = list;
3603 list = skb;
3604
3605 - if (annotation & RXRPC_TX_ANNO_LAST)
3606 + if (annotation & RXRPC_TX_ANNO_LAST) {
3607 set_bit(RXRPC_CALL_TX_LAST, &call->flags);
3608 + rot_last = true;
3609 + }
3610 if ((annotation & RXRPC_TX_ANNO_MASK) != RXRPC_TX_ANNO_ACK)
3611 summary->nr_rot_new_acks++;
3612 }
3613
3614 spin_unlock(&call->lock);
3615
3616 - trace_rxrpc_transmit(call, (test_bit(RXRPC_CALL_TX_LAST, &call->flags) ?
3617 + trace_rxrpc_transmit(call, (rot_last ?
3618 rxrpc_transmit_rotate_last :
3619 rxrpc_transmit_rotate));
3620 wake_up(&call->waitq);
3621 @@ -262,6 +265,8 @@ static void rxrpc_rotate_tx_window(struct rxrpc_call *call, rxrpc_seq_t to,
3622 skb->next = NULL;
3623 rxrpc_free_skb(skb, rxrpc_skb_tx_freed);
3624 }
3625 +
3626 + return rot_last;
3627 }
3628
3629 /*
3630 @@ -332,11 +337,11 @@ static bool rxrpc_receiving_reply(struct rxrpc_call *call)
3631 ktime_get_real());
3632 }
3633
3634 - if (!test_bit(RXRPC_CALL_TX_LAST, &call->flags))
3635 - rxrpc_rotate_tx_window(call, top, &summary);
3636 if (!test_bit(RXRPC_CALL_TX_LAST, &call->flags)) {
3637 - rxrpc_proto_abort("TXL", call, top);
3638 - return false;
3639 + if (!rxrpc_rotate_tx_window(call, top, &summary)) {
3640 + rxrpc_proto_abort("TXL", call, top);
3641 + return false;
3642 + }
3643 }
3644 if (!rxrpc_end_tx_phase(call, true, "ETD"))
3645 return false;
3646 @@ -801,6 +806,16 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
3647 rxrpc_propose_ack_respond_to_ack);
3648 }
3649
3650 + /* Discard any out-of-order or duplicate ACKs. */
3651 + if (before_eq(sp->hdr.serial, call->acks_latest)) {
3652 + _debug("discard ACK %d <= %d",
3653 + sp->hdr.serial, call->acks_latest);
3654 + return;
3655 + }
3656 + call->acks_latest_ts = skb->tstamp;
3657 + call->acks_latest = sp->hdr.serial;
3658 +
3659 + /* Parse rwind and mtu sizes if provided. */
3660 ioffset = offset + nr_acks + 3;
3661 if (skb->len >= ioffset + sizeof(buf.info)) {
3662 if (skb_copy_bits(skb, ioffset, &buf.info, sizeof(buf.info)) < 0)
3663 @@ -822,23 +837,18 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
3664 return;
3665 }
3666
3667 - /* Discard any out-of-order or duplicate ACKs. */
3668 - if (before_eq(sp->hdr.serial, call->acks_latest)) {
3669 - _debug("discard ACK %d <= %d",
3670 - sp->hdr.serial, call->acks_latest);
3671 - return;
3672 - }
3673 - call->acks_latest_ts = skb->tstamp;
3674 - call->acks_latest = sp->hdr.serial;
3675 -
3676 if (before(hard_ack, call->tx_hard_ack) ||
3677 after(hard_ack, call->tx_top))
3678 return rxrpc_proto_abort("AKW", call, 0);
3679 if (nr_acks > call->tx_top - hard_ack)
3680 return rxrpc_proto_abort("AKN", call, 0);
3681
3682 - if (after(hard_ack, call->tx_hard_ack))
3683 - rxrpc_rotate_tx_window(call, hard_ack, &summary);
3684 + if (after(hard_ack, call->tx_hard_ack)) {
3685 + if (rxrpc_rotate_tx_window(call, hard_ack, &summary)) {
3686 + rxrpc_end_tx_phase(call, false, "ETA");
3687 + return;
3688 + }
3689 + }
3690
3691 if (nr_acks > 0) {
3692 if (skb_copy_bits(skb, offset, buf.acks, nr_acks) < 0)
3693 @@ -847,11 +857,6 @@ static void rxrpc_input_ack(struct rxrpc_call *call, struct sk_buff *skb,
3694 &summary);
3695 }
3696
3697 - if (test_bit(RXRPC_CALL_TX_LAST, &call->flags)) {
3698 - rxrpc_end_tx_phase(call, false, "ETA");
3699 - return;
3700 - }
3701 -
3702 if (call->rxtx_annotations[call->tx_top & RXRPC_RXTX_BUFF_MASK] &
3703 RXRPC_TX_ANNO_LAST &&
3704 summary.nr_acks == call->tx_top - hard_ack &&
3705 @@ -873,8 +878,7 @@ static void rxrpc_input_ackall(struct rxrpc_call *call, struct sk_buff *skb)
3706
3707 _proto("Rx ACKALL %%%u", sp->hdr.serial);
3708
3709 - rxrpc_rotate_tx_window(call, call->tx_top, &summary);
3710 - if (test_bit(RXRPC_CALL_TX_LAST, &call->flags))
3711 + if (rxrpc_rotate_tx_window(call, call->tx_top, &summary))
3712 rxrpc_end_tx_phase(call, false, "ETL");
3713 }
3714
3715 diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
3716 index 2f4e1483aced..04a70793c1fe 100644
3717 --- a/net/sched/cls_api.c
3718 +++ b/net/sched/cls_api.c
3719 @@ -31,6 +31,8 @@
3720 #include <net/pkt_sched.h>
3721 #include <net/pkt_cls.h>
3722
3723 +extern const struct nla_policy rtm_tca_policy[TCA_MAX + 1];
3724 +
3725 /* The list of all installed classifier types */
3726 static LIST_HEAD(tcf_proto_base);
3727
3728 @@ -559,7 +561,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n,
3729 replay:
3730 tp_created = 0;
3731
3732 - err = nlmsg_parse(n, sizeof(*t), tca, TCA_MAX, NULL, extack);
3733 + err = nlmsg_parse(n, sizeof(*t), tca, TCA_MAX, rtm_tca_policy, extack);
3734 if (err < 0)
3735 return err;
3736
3737 @@ -836,7 +838,8 @@ static int tc_dump_tfilter(struct sk_buff *skb, struct netlink_callback *cb)
3738 if (nlmsg_len(cb->nlh) < sizeof(*tcm))
3739 return skb->len;
3740
3741 - err = nlmsg_parse(cb->nlh, sizeof(*tcm), tca, TCA_MAX, NULL, NULL);
3742 + err = nlmsg_parse(cb->nlh, sizeof(*tcm), tca, TCA_MAX, rtm_tca_policy,
3743 + NULL);
3744 if (err)
3745 return err;
3746
3747 diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
3748 index cd69aa067543..691ca96f7460 100644
3749 --- a/net/sched/sch_api.c
3750 +++ b/net/sched/sch_api.c
3751 @@ -1917,7 +1917,8 @@ static int tc_dump_tclass_root(struct Qdisc *root, struct sk_buff *skb,
3752
3753 if (tcm->tcm_parent) {
3754 q = qdisc_match_from_root(root, TC_H_MAJ(tcm->tcm_parent));
3755 - if (q && tc_dump_tclass_qdisc(q, skb, tcm, cb, t_p, s_t) < 0)
3756 + if (q && q != root &&
3757 + tc_dump_tclass_qdisc(q, skb, tcm, cb, t_p, s_t) < 0)
3758 return -1;
3759 return 0;
3760 }
3761 diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c
3762 index bc30f9186ac6..d3105ee8decf 100644
3763 --- a/net/sched/sch_gred.c
3764 +++ b/net/sched/sch_gred.c
3765 @@ -411,7 +411,7 @@ static int gred_change(struct Qdisc *sch, struct nlattr *opt)
3766 if (tb[TCA_GRED_PARMS] == NULL && tb[TCA_GRED_STAB] == NULL) {
3767 if (tb[TCA_GRED_LIMIT] != NULL)
3768 sch->limit = nla_get_u32(tb[TCA_GRED_LIMIT]);
3769 - return gred_change_table_def(sch, opt);
3770 + return gred_change_table_def(sch, tb[TCA_GRED_DPS]);
3771 }
3772
3773 if (tb[TCA_GRED_PARMS] == NULL ||
3774 diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
3775 index 2a2ab6bfe5d8..3d325b840802 100644
3776 --- a/net/sched/sch_netem.c
3777 +++ b/net/sched/sch_netem.c
3778 @@ -624,6 +624,10 @@ deliver:
3779 skb->next = NULL;
3780 skb->prev = NULL;
3781 skb->tstamp = netem_skb_cb(skb)->tstamp_save;
3782 + /* skb->dev shares skb->rbnode area,
3783 + * we need to restore its value.
3784 + */
3785 + skb->dev = qdisc_dev(sch);
3786
3787 #ifdef CONFIG_NET_CLS_ACT
3788 /*
3789 diff --git a/net/sctp/socket.c b/net/sctp/socket.c
3790 index 790094311143..d87d56978b4c 100644
3791 --- a/net/sctp/socket.c
3792 +++ b/net/sctp/socket.c
3793 @@ -250,11 +250,10 @@ struct sctp_association *sctp_id2assoc(struct sock *sk, sctp_assoc_t id)
3794
3795 spin_lock_bh(&sctp_assocs_id_lock);
3796 asoc = (struct sctp_association *)idr_find(&sctp_assocs_id, (int)id);
3797 + if (asoc && (asoc->base.sk != sk || asoc->base.dead))
3798 + asoc = NULL;
3799 spin_unlock_bh(&sctp_assocs_id_lock);
3800
3801 - if (!asoc || (asoc->base.sk != sk) || asoc->base.dead)
3802 - return NULL;
3803 -
3804 return asoc;
3805 }
3806
3807 diff --git a/net/socket.c b/net/socket.c
3808 index d27922639a20..a401578f3f28 100644
3809 --- a/net/socket.c
3810 +++ b/net/socket.c
3811 @@ -2879,9 +2879,14 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32)
3812 copy_in_user(&rxnfc->fs.ring_cookie,
3813 &compat_rxnfc->fs.ring_cookie,
3814 (void __user *)(&rxnfc->fs.location + 1) -
3815 - (void __user *)&rxnfc->fs.ring_cookie) ||
3816 - copy_in_user(&rxnfc->rule_cnt, &compat_rxnfc->rule_cnt,
3817 - sizeof(rxnfc->rule_cnt)))
3818 + (void __user *)&rxnfc->fs.ring_cookie))
3819 + return -EFAULT;
3820 + if (ethcmd == ETHTOOL_GRXCLSRLALL) {
3821 + if (put_user(rule_cnt, &rxnfc->rule_cnt))
3822 + return -EFAULT;
3823 + } else if (copy_in_user(&rxnfc->rule_cnt,
3824 + &compat_rxnfc->rule_cnt,
3825 + sizeof(rxnfc->rule_cnt)))
3826 return -EFAULT;
3827 }
3828
3829 diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
3830 index 3de415bca391..46e9812d13c0 100644
3831 --- a/net/wireless/nl80211.c
3832 +++ b/net/wireless/nl80211.c
3833 @@ -3480,6 +3480,7 @@ static bool ht_rateset_to_mask(struct ieee80211_supported_band *sband,
3834 return false;
3835
3836 /* check availability */
3837 + ridx = array_index_nospec(ridx, IEEE80211_HT_MCS_MASK_LEN);
3838 if (sband->ht_cap.mcs.rx_mask[ridx] & rbit)
3839 mcs[ridx] |= rbit;
3840 else
3841 @@ -9719,7 +9720,7 @@ static int cfg80211_cqm_rssi_update(struct cfg80211_registered_device *rdev,
3842 struct wireless_dev *wdev = dev->ieee80211_ptr;
3843 s32 last, low, high;
3844 u32 hyst;
3845 - int i, n;
3846 + int i, n, low_index;
3847 int err;
3848
3849 /* RSSI reporting disabled? */
3850 @@ -9756,10 +9757,19 @@ static int cfg80211_cqm_rssi_update(struct cfg80211_registered_device *rdev,
3851 if (last < wdev->cqm_config->rssi_thresholds[i])
3852 break;
3853
3854 - low = i > 0 ?
3855 - (wdev->cqm_config->rssi_thresholds[i - 1] - hyst) : S32_MIN;
3856 - high = i < n ?
3857 - (wdev->cqm_config->rssi_thresholds[i] + hyst - 1) : S32_MAX;
3858 + low_index = i - 1;
3859 + if (low_index >= 0) {
3860 + low_index = array_index_nospec(low_index, n);
3861 + low = wdev->cqm_config->rssi_thresholds[low_index] - hyst;
3862 + } else {
3863 + low = S32_MIN;
3864 + }
3865 + if (i < n) {
3866 + i = array_index_nospec(i, n);
3867 + high = wdev->cqm_config->rssi_thresholds[i] + hyst - 1;
3868 + } else {
3869 + high = S32_MAX;
3870 + }
3871
3872 return rdev_set_cqm_rssi_range_config(rdev, dev, low, high);
3873 }
3874 diff --git a/net/wireless/reg.c b/net/wireless/reg.c
3875 index 6e94f6934a0e..bd91de416035 100644
3876 --- a/net/wireless/reg.c
3877 +++ b/net/wireless/reg.c
3878 @@ -2170,11 +2170,12 @@ static void reg_process_hint(struct regulatory_request *reg_request)
3879 {
3880 struct wiphy *wiphy = NULL;
3881 enum reg_request_treatment treatment;
3882 + enum nl80211_reg_initiator initiator = reg_request->initiator;
3883
3884 if (reg_request->wiphy_idx != WIPHY_IDX_INVALID)
3885 wiphy = wiphy_idx_to_wiphy(reg_request->wiphy_idx);
3886
3887 - switch (reg_request->initiator) {
3888 + switch (initiator) {
3889 case NL80211_REGDOM_SET_BY_CORE:
3890 treatment = reg_process_hint_core(reg_request);
3891 break;
3892 @@ -2192,7 +2193,7 @@ static void reg_process_hint(struct regulatory_request *reg_request)
3893 treatment = reg_process_hint_country_ie(wiphy, reg_request);
3894 break;
3895 default:
3896 - WARN(1, "invalid initiator %d\n", reg_request->initiator);
3897 + WARN(1, "invalid initiator %d\n", initiator);
3898 goto out_free;
3899 }
3900
3901 @@ -2207,7 +2208,7 @@ static void reg_process_hint(struct regulatory_request *reg_request)
3902 */
3903 if (treatment == REG_REQ_ALREADY_SET && wiphy &&
3904 wiphy->regulatory_flags & REGULATORY_STRICT_REG) {
3905 - wiphy_update_regulatory(wiphy, reg_request->initiator);
3906 + wiphy_update_regulatory(wiphy, initiator);
3907 wiphy_all_share_dfs_chan_state(wiphy);
3908 reg_check_channels();
3909 }
3910 @@ -2384,6 +2385,7 @@ static int regulatory_hint_core(const char *alpha2)
3911 request->alpha2[0] = alpha2[0];
3912 request->alpha2[1] = alpha2[1];
3913 request->initiator = NL80211_REGDOM_SET_BY_CORE;
3914 + request->wiphy_idx = WIPHY_IDX_INVALID;
3915
3916 queue_regulatory_request(request);
3917
3918 diff --git a/net/wireless/scan.c b/net/wireless/scan.c
3919 index f6c5fe482506..5ed0ed0559dc 100644
3920 --- a/net/wireless/scan.c
3921 +++ b/net/wireless/scan.c
3922 @@ -1055,13 +1055,23 @@ cfg80211_bss_update(struct cfg80211_registered_device *rdev,
3923 return NULL;
3924 }
3925
3926 +/*
3927 + * Update RX channel information based on the available frame payload
3928 + * information. This is mainly for the 2.4 GHz band where frames can be received
3929 + * from neighboring channels and the Beacon frames use the DSSS Parameter Set
3930 + * element to indicate the current (transmitting) channel, but this might also
3931 + * be needed on other bands if RX frequency does not match with the actual
3932 + * operating channel of a BSS.
3933 + */
3934 static struct ieee80211_channel *
3935 cfg80211_get_bss_channel(struct wiphy *wiphy, const u8 *ie, size_t ielen,
3936 - struct ieee80211_channel *channel)
3937 + struct ieee80211_channel *channel,
3938 + enum nl80211_bss_scan_width scan_width)
3939 {
3940 const u8 *tmp;
3941 u32 freq;
3942 int channel_number = -1;
3943 + struct ieee80211_channel *alt_channel;
3944
3945 tmp = cfg80211_find_ie(WLAN_EID_DS_PARAMS, ie, ielen);
3946 if (tmp && tmp[1] == 1) {
3947 @@ -1075,16 +1085,45 @@ cfg80211_get_bss_channel(struct wiphy *wiphy, const u8 *ie, size_t ielen,
3948 }
3949 }
3950
3951 - if (channel_number < 0)
3952 + if (channel_number < 0) {
3953 + /* No channel information in frame payload */
3954 return channel;
3955 + }
3956
3957 freq = ieee80211_channel_to_frequency(channel_number, channel->band);
3958 - channel = ieee80211_get_channel(wiphy, freq);
3959 - if (!channel)
3960 - return NULL;
3961 - if (channel->flags & IEEE80211_CHAN_DISABLED)
3962 + alt_channel = ieee80211_get_channel(wiphy, freq);
3963 + if (!alt_channel) {
3964 + if (channel->band == NL80211_BAND_2GHZ) {
3965 + /*
3966 + * Better not allow unexpected channels when that could
3967 + * be going beyond the 1-11 range (e.g., discovering
3968 + * BSS on channel 12 when radio is configured for
3969 + * channel 11.
3970 + */
3971 + return NULL;
3972 + }
3973 +
3974 + /* No match for the payload channel number - ignore it */
3975 + return channel;
3976 + }
3977 +
3978 + if (scan_width == NL80211_BSS_CHAN_WIDTH_10 ||
3979 + scan_width == NL80211_BSS_CHAN_WIDTH_5) {
3980 + /*
3981 + * Ignore channel number in 5 and 10 MHz channels where there
3982 + * may not be an n:1 or 1:n mapping between frequencies and
3983 + * channel numbers.
3984 + */
3985 + return channel;
3986 + }
3987 +
3988 + /*
3989 + * Use the channel determined through the payload channel number
3990 + * instead of the RX channel reported by the driver.
3991 + */
3992 + if (alt_channel->flags & IEEE80211_CHAN_DISABLED)
3993 return NULL;
3994 - return channel;
3995 + return alt_channel;
3996 }
3997
3998 /* Returned bss is reference counted and must be cleaned up appropriately. */
3999 @@ -1109,7 +1148,8 @@ cfg80211_inform_bss_data(struct wiphy *wiphy,
4000 (data->signal < 0 || data->signal > 100)))
4001 return NULL;
4002
4003 - channel = cfg80211_get_bss_channel(wiphy, ie, ielen, data->chan);
4004 + channel = cfg80211_get_bss_channel(wiphy, ie, ielen, data->chan,
4005 + data->scan_width);
4006 if (!channel)
4007 return NULL;
4008
4009 @@ -1207,7 +1247,7 @@ cfg80211_inform_bss_frame_data(struct wiphy *wiphy,
4010 return NULL;
4011
4012 channel = cfg80211_get_bss_channel(wiphy, mgmt->u.beacon.variable,
4013 - ielen, data->chan);
4014 + ielen, data->chan, data->scan_width);
4015 if (!channel)
4016 return NULL;
4017
4018 diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
4019 index 9f492dc417d5..8e75319dd9c0 100644
4020 --- a/net/xfrm/xfrm_input.c
4021 +++ b/net/xfrm/xfrm_input.c
4022 @@ -453,6 +453,7 @@ resume:
4023 XFRM_INC_STATS(net, LINUX_MIB_XFRMINHDRERROR);
4024 goto drop;
4025 }
4026 + crypto_done = false;
4027 } while (!err);
4028
4029 err = xfrm_rcv_cb(skb, family, x->type->proto, 0);
4030 diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c
4031 index 35610cc881a9..c47660fba498 100644
4032 --- a/net/xfrm/xfrm_output.c
4033 +++ b/net/xfrm/xfrm_output.c
4034 @@ -101,6 +101,10 @@ static int xfrm_output_one(struct sk_buff *skb, int err)
4035 spin_unlock_bh(&x->lock);
4036
4037 skb_dst_force(skb);
4038 + if (!skb_dst(skb)) {
4039 + XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTERROR);
4040 + goto error_nolock;
4041 + }
4042
4043 if (xfrm_offload(skb)) {
4044 x->type_offload->encap(x, skb);
4045 diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
4046 index 2fb7a78308e1..37c32e73aaef 100644
4047 --- a/net/xfrm/xfrm_policy.c
4048 +++ b/net/xfrm/xfrm_policy.c
4049 @@ -2550,6 +2550,10 @@ int __xfrm_route_forward(struct sk_buff *skb, unsigned short family)
4050 }
4051
4052 skb_dst_force(skb);
4053 + if (!skb_dst(skb)) {
4054 + XFRM_INC_STATS(net, LINUX_MIB_XFRMFWDHDRERROR);
4055 + return 0;
4056 + }
4057
4058 dst = xfrm_lookup(net, skb_dst(skb), &fl, NULL, XFRM_LOOKUP_QUEUE);
4059 if (IS_ERR(dst)) {
4060 diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
4061 index 5554d28a32eb..4e8319766f2b 100644
4062 --- a/net/xfrm/xfrm_user.c
4063 +++ b/net/xfrm/xfrm_user.c
4064 @@ -151,10 +151,16 @@ static int verify_newsa_info(struct xfrm_usersa_info *p,
4065 err = -EINVAL;
4066 switch (p->family) {
4067 case AF_INET:
4068 + if (p->sel.prefixlen_d > 32 || p->sel.prefixlen_s > 32)
4069 + goto out;
4070 +
4071 break;
4072
4073 case AF_INET6:
4074 #if IS_ENABLED(CONFIG_IPV6)
4075 + if (p->sel.prefixlen_d > 128 || p->sel.prefixlen_s > 128)
4076 + goto out;
4077 +
4078 break;
4079 #else
4080 err = -EAFNOSUPPORT;
4081 @@ -1353,10 +1359,16 @@ static int verify_newpolicy_info(struct xfrm_userpolicy_info *p)
4082
4083 switch (p->sel.family) {
4084 case AF_INET:
4085 + if (p->sel.prefixlen_d > 32 || p->sel.prefixlen_s > 32)
4086 + return -EINVAL;
4087 +
4088 break;
4089
4090 case AF_INET6:
4091 #if IS_ENABLED(CONFIG_IPV6)
4092 + if (p->sel.prefixlen_d > 128 || p->sel.prefixlen_s > 128)
4093 + return -EINVAL;
4094 +
4095 break;
4096 #else
4097 return -EAFNOSUPPORT;
4098 @@ -1437,6 +1449,9 @@ static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
4099 (ut[i].family != prev_family))
4100 return -EINVAL;
4101
4102 + if (ut[i].mode >= XFRM_MODE_MAX)
4103 + return -EINVAL;
4104 +
4105 prev_family = ut[i].family;
4106
4107 switch (ut[i].family) {
4108 diff --git a/scripts/kconfig/zconf.y b/scripts/kconfig/zconf.y
4109 index 126e3f2e1ed7..2b0adeb5fc42 100644
4110 --- a/scripts/kconfig/zconf.y
4111 +++ b/scripts/kconfig/zconf.y
4112 @@ -31,7 +31,7 @@ struct symbol *symbol_hash[SYMBOL_HASHSIZE];
4113 static struct menu *current_menu, *current_entry;
4114
4115 %}
4116 -%expect 31
4117 +%expect 30
4118
4119 %union
4120 {
4121 @@ -112,7 +112,7 @@ start: mainmenu_stmt stmt_list | no_mainmenu_stmt stmt_list;
4122
4123 /* mainmenu entry */
4124
4125 -mainmenu_stmt: T_MAINMENU prompt nl
4126 +mainmenu_stmt: T_MAINMENU prompt T_EOL
4127 {
4128 menu_add_prompt(P_MENU, $2, NULL);
4129 };
4130 diff --git a/sound/usb/usx2y/usb_stream.c b/sound/usb/usx2y/usb_stream.c
4131 index e229abd21652..b0f8979ff2d2 100644
4132 --- a/sound/usb/usx2y/usb_stream.c
4133 +++ b/sound/usb/usx2y/usb_stream.c
4134 @@ -56,7 +56,7 @@ check:
4135 lb, s->period_size);
4136 }
4137
4138 -static void init_pipe_urbs(struct usb_stream_kernel *sk, unsigned use_packsize,
4139 +static int init_pipe_urbs(struct usb_stream_kernel *sk, unsigned use_packsize,
4140 struct urb **urbs, char *transfer,
4141 struct usb_device *dev, int pipe)
4142 {
4143 @@ -77,6 +77,8 @@ static void init_pipe_urbs(struct usb_stream_kernel *sk, unsigned use_packsize,
4144 urb->interval = 1;
4145 if (usb_pipeout(pipe))
4146 continue;
4147 + if (usb_urb_ep_type_check(urb))
4148 + return -EINVAL;
4149
4150 urb->transfer_buffer_length = transfer_length;
4151 desc = urb->iso_frame_desc;
4152 @@ -87,9 +89,11 @@ static void init_pipe_urbs(struct usb_stream_kernel *sk, unsigned use_packsize,
4153 desc[p].length = maxpacket;
4154 }
4155 }
4156 +
4157 + return 0;
4158 }
4159
4160 -static void init_urbs(struct usb_stream_kernel *sk, unsigned use_packsize,
4161 +static int init_urbs(struct usb_stream_kernel *sk, unsigned use_packsize,
4162 struct usb_device *dev, int in_pipe, int out_pipe)
4163 {
4164 struct usb_stream *s = sk->s;
4165 @@ -103,9 +107,12 @@ static void init_urbs(struct usb_stream_kernel *sk, unsigned use_packsize,
4166 sk->outurb[u] = usb_alloc_urb(sk->n_o_ps, GFP_KERNEL);
4167 }
4168
4169 - init_pipe_urbs(sk, use_packsize, sk->inurb, indata, dev, in_pipe);
4170 - init_pipe_urbs(sk, use_packsize, sk->outurb, sk->write_page, dev,
4171 - out_pipe);
4172 + if (init_pipe_urbs(sk, use_packsize, sk->inurb, indata, dev, in_pipe) ||
4173 + init_pipe_urbs(sk, use_packsize, sk->outurb, sk->write_page, dev,
4174 + out_pipe))
4175 + return -EINVAL;
4176 +
4177 + return 0;
4178 }
4179
4180
4181 @@ -226,7 +233,11 @@ struct usb_stream *usb_stream_new(struct usb_stream_kernel *sk,
4182 else
4183 sk->freqn = get_usb_high_speed_rate(sample_rate);
4184
4185 - init_urbs(sk, use_packsize, dev, in_pipe, out_pipe);
4186 + if (init_urbs(sk, use_packsize, dev, in_pipe, out_pipe) < 0) {
4187 + usb_stream_free(sk);
4188 + return NULL;
4189 + }
4190 +
4191 sk->s->state = usb_stream_stopped;
4192 out:
4193 return sk->s;
4194 diff --git a/tools/perf/Makefile b/tools/perf/Makefile
4195 index 225454416ed5..7902a5681fc8 100644
4196 --- a/tools/perf/Makefile
4197 +++ b/tools/perf/Makefile
4198 @@ -84,10 +84,10 @@ endif # has_clean
4199 endif # MAKECMDGOALS
4200
4201 #
4202 -# The clean target is not really parallel, don't print the jobs info:
4203 +# Explicitly disable parallelism for the clean target.
4204 #
4205 clean:
4206 - $(make)
4207 + $(make) -j1
4208
4209 #
4210 # The build-test target is not really parallel, don't print the jobs info,
4211 diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c
4212 index 5966f1f9b160..1c9bc3516f8b 100644
4213 --- a/tools/perf/tests/builtin-test.c
4214 +++ b/tools/perf/tests/builtin-test.c
4215 @@ -375,7 +375,7 @@ static int test_and_print(struct test *t, bool force_skip, int subtest)
4216 if (!t->subtest.get_nr)
4217 pr_debug("%s:", t->desc);
4218 else
4219 - pr_debug("%s subtest %d:", t->desc, subtest);
4220 + pr_debug("%s subtest %d:", t->desc, subtest + 1);
4221
4222 switch (err) {
4223 case TEST_OK:
4224 @@ -589,7 +589,7 @@ static int __cmd_test(int argc, const char *argv[], struct intlist *skiplist)
4225 for (subi = 0; subi < subn; subi++) {
4226 pr_info("%2d.%1d: %-*s:", i, subi + 1, subw,
4227 t->subtest.get_desc(subi));
4228 - err = test_and_print(t, skip, subi + 1);
4229 + err = test_and_print(t, skip, subi);
4230 if (err != TEST_OK && t->subtest.skip_if_fail)
4231 skip = true;
4232 }
4233 diff --git a/tools/perf/util/setup.py b/tools/perf/util/setup.py
4234 index da4df7fd43a2..23f1bf175179 100644
4235 --- a/tools/perf/util/setup.py
4236 +++ b/tools/perf/util/setup.py
4237 @@ -27,7 +27,7 @@ class install_lib(_install_lib):
4238
4239 cflags = getenv('CFLAGS', '').split()
4240 # switch off several checks (need to be at the end of cflags list)
4241 -cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter' ]
4242 +cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls' ]
4243 if cc != "clang":
4244 cflags += ['-Wno-cast-function-type' ]
4245
4246 diff --git a/tools/testing/nvdimm/test/nfit.c b/tools/testing/nvdimm/test/nfit.c
4247 index bef419d4266d..3ad0b3a3317b 100644
4248 --- a/tools/testing/nvdimm/test/nfit.c
4249 +++ b/tools/testing/nvdimm/test/nfit.c
4250 @@ -1589,6 +1589,7 @@ static int nfit_ctl_test(struct device *dev)
4251 unsigned long mask, cmd_size, offset;
4252 union {
4253 struct nd_cmd_get_config_size cfg_size;
4254 + struct nd_cmd_clear_error clear_err;
4255 struct nd_cmd_ars_status ars_stat;
4256 struct nd_cmd_ars_cap ars_cap;
4257 char buf[sizeof(struct nd_cmd_ars_status)
4258 @@ -1767,6 +1768,23 @@ static int nfit_ctl_test(struct device *dev)
4259 return -EIO;
4260 }
4261
4262 + /* test clear error */
4263 + cmd_size = sizeof(cmds.clear_err);
4264 + cmds.clear_err = (struct nd_cmd_clear_error) {
4265 + .length = 512,
4266 + .cleared = 512,
4267 + };
4268 + rc = setup_result(cmds.buf, cmd_size);
4269 + if (rc)
4270 + return rc;
4271 + rc = acpi_nfit_ctl(&acpi_desc->nd_desc, NULL, ND_CMD_CLEAR_ERROR,
4272 + cmds.buf, cmd_size, &cmd_rc);
4273 + if (rc < 0 || cmd_rc) {
4274 + dev_dbg(dev, "%s: failed at: %d rc: %d cmd_rc: %d\n",
4275 + __func__, __LINE__, rc, cmd_rc);
4276 + return -EIO;
4277 + }
4278 +
4279 return 0;
4280 }
4281
4282 diff --git a/tools/testing/selftests/net/rtnetlink.sh b/tools/testing/selftests/net/rtnetlink.sh
4283 index 57b5ff576240..891130daac7c 100755
4284 --- a/tools/testing/selftests/net/rtnetlink.sh
4285 +++ b/tools/testing/selftests/net/rtnetlink.sh
4286 @@ -1,4 +1,4 @@
4287 -#!/bin/sh
4288 +#!/bin/bash
4289 #
4290 # This test is for checking rtnetlink callpaths, and get as much coverage as possible.
4291 #
4292 diff --git a/tools/testing/selftests/powerpc/ptrace/.gitignore b/tools/testing/selftests/powerpc/ptrace/.gitignore
4293 index 349acfafc95b..9dcc16ea8179 100644
4294 --- a/tools/testing/selftests/powerpc/ptrace/.gitignore
4295 +++ b/tools/testing/selftests/powerpc/ptrace/.gitignore
4296 @@ -8,3 +8,4 @@ ptrace-vsx
4297 ptrace-tm-vsx
4298 ptrace-tm-spd-vsx
4299 ptrace-tm-spr
4300 +ptrace-hwbreak
4301 diff --git a/tools/testing/selftests/powerpc/ptrace/Makefile b/tools/testing/selftests/powerpc/ptrace/Makefile
4302 index 480305266504..0e2f4601d1a8 100644
4303 --- a/tools/testing/selftests/powerpc/ptrace/Makefile
4304 +++ b/tools/testing/selftests/powerpc/ptrace/Makefile
4305 @@ -1,7 +1,7 @@
4306 # SPDX-License-Identifier: GPL-2.0
4307 TEST_PROGS := ptrace-gpr ptrace-tm-gpr ptrace-tm-spd-gpr \
4308 ptrace-tar ptrace-tm-tar ptrace-tm-spd-tar ptrace-vsx ptrace-tm-vsx \
4309 - ptrace-tm-spd-vsx ptrace-tm-spr
4310 + ptrace-tm-spd-vsx ptrace-tm-spr ptrace-hwbreak
4311
4312 include ../../lib.mk
4313
4314 diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-hwbreak.c b/tools/testing/selftests/powerpc/ptrace/ptrace-hwbreak.c
4315 new file mode 100644
4316 index 000000000000..3066d310f32b
4317 --- /dev/null
4318 +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-hwbreak.c
4319 @@ -0,0 +1,342 @@
4320 +// SPDX-License-Identifier: GPL-2.0+
4321 +
4322 +/*
4323 + * Ptrace test for hw breakpoints
4324 + *
4325 + * Based on tools/testing/selftests/breakpoints/breakpoint_test.c
4326 + *
4327 + * This test forks and the parent then traces the child doing various
4328 + * types of ptrace enabled breakpoints
4329 + *
4330 + * Copyright (C) 2018 Michael Neuling, IBM Corporation.
4331 + */
4332 +
4333 +#include <sys/ptrace.h>
4334 +#include <unistd.h>
4335 +#include <stddef.h>
4336 +#include <sys/user.h>
4337 +#include <stdio.h>
4338 +#include <stdlib.h>
4339 +#include <signal.h>
4340 +#include <sys/types.h>
4341 +#include <sys/wait.h>
4342 +#include "ptrace.h"
4343 +
4344 +/* Breakpoint access modes */
4345 +enum {
4346 + BP_X = 1,
4347 + BP_RW = 2,
4348 + BP_W = 4,
4349 +};
4350 +
4351 +static pid_t child_pid;
4352 +static struct ppc_debug_info dbginfo;
4353 +
4354 +static void get_dbginfo(void)
4355 +{
4356 + int ret;
4357 +
4358 + ret = ptrace(PPC_PTRACE_GETHWDBGINFO, child_pid, NULL, &dbginfo);
4359 + if (ret) {
4360 + perror("Can't get breakpoint info\n");
4361 + exit(-1);
4362 + }
4363 +}
4364 +
4365 +static bool hwbreak_present(void)
4366 +{
4367 + return (dbginfo.num_data_bps != 0);
4368 +}
4369 +
4370 +static bool dawr_present(void)
4371 +{
4372 + return !!(dbginfo.features & PPC_DEBUG_FEATURE_DATA_BP_DAWR);
4373 +}
4374 +
4375 +static void set_breakpoint_addr(void *addr)
4376 +{
4377 + int ret;
4378 +
4379 + ret = ptrace(PTRACE_SET_DEBUGREG, child_pid, 0, addr);
4380 + if (ret) {
4381 + perror("Can't set breakpoint addr\n");
4382 + exit(-1);
4383 + }
4384 +}
4385 +
4386 +static int set_hwbreakpoint_addr(void *addr, int range)
4387 +{
4388 + int ret;
4389 +
4390 + struct ppc_hw_breakpoint info;
4391 +
4392 + info.version = 1;
4393 + info.trigger_type = PPC_BREAKPOINT_TRIGGER_RW;
4394 + info.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
4395 + if (range > 0)
4396 + info.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
4397 + info.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
4398 + info.addr = (__u64)addr;
4399 + info.addr2 = (__u64)addr + range;
4400 + info.condition_value = 0;
4401 +
4402 + ret = ptrace(PPC_PTRACE_SETHWDEBUG, child_pid, 0, &info);
4403 + if (ret < 0) {
4404 + perror("Can't set breakpoint\n");
4405 + exit(-1);
4406 + }
4407 + return ret;
4408 +}
4409 +
4410 +static int del_hwbreakpoint_addr(int watchpoint_handle)
4411 +{
4412 + int ret;
4413 +
4414 + ret = ptrace(PPC_PTRACE_DELHWDEBUG, child_pid, 0, watchpoint_handle);
4415 + if (ret < 0) {
4416 + perror("Can't delete hw breakpoint\n");
4417 + exit(-1);
4418 + }
4419 + return ret;
4420 +}
4421 +
4422 +#define DAWR_LENGTH_MAX 512
4423 +
4424 +/* Dummy variables to test read/write accesses */
4425 +static unsigned long long
4426 + dummy_array[DAWR_LENGTH_MAX / sizeof(unsigned long long)]
4427 + __attribute__((aligned(512)));
4428 +static unsigned long long *dummy_var = dummy_array;
4429 +
4430 +static void write_var(int len)
4431 +{
4432 + long long *plval;
4433 + char *pcval;
4434 + short *psval;
4435 + int *pival;
4436 +
4437 + switch (len) {
4438 + case 1:
4439 + pcval = (char *)dummy_var;
4440 + *pcval = 0xff;
4441 + break;
4442 + case 2:
4443 + psval = (short *)dummy_var;
4444 + *psval = 0xffff;
4445 + break;
4446 + case 4:
4447 + pival = (int *)dummy_var;
4448 + *pival = 0xffffffff;
4449 + break;
4450 + case 8:
4451 + plval = (long long *)dummy_var;
4452 + *plval = 0xffffffffffffffffLL;
4453 + break;
4454 + }
4455 +}
4456 +
4457 +static void read_var(int len)
4458 +{
4459 + char cval __attribute__((unused));
4460 + short sval __attribute__((unused));
4461 + int ival __attribute__((unused));
4462 + long long lval __attribute__((unused));
4463 +
4464 + switch (len) {
4465 + case 1:
4466 + cval = *(char *)dummy_var;
4467 + break;
4468 + case 2:
4469 + sval = *(short *)dummy_var;
4470 + break;
4471 + case 4:
4472 + ival = *(int *)dummy_var;
4473 + break;
4474 + case 8:
4475 + lval = *(long long *)dummy_var;
4476 + break;
4477 + }
4478 +}
4479 +
4480 +/*
4481 + * Do the r/w accesses to trigger the breakpoints. And run
4482 + * the usual traps.
4483 + */
4484 +static void trigger_tests(void)
4485 +{
4486 + int len, ret;
4487 +
4488 + ret = ptrace(PTRACE_TRACEME, 0, NULL, 0);
4489 + if (ret) {
4490 + perror("Can't be traced?\n");
4491 + return;
4492 + }
4493 +
4494 + /* Wake up father so that it sets up the first test */
4495 + kill(getpid(), SIGUSR1);
4496 +
4497 + /* Test write watchpoints */
4498 + for (len = 1; len <= sizeof(long); len <<= 1)
4499 + write_var(len);
4500 +
4501 + /* Test read/write watchpoints (on read accesses) */
4502 + for (len = 1; len <= sizeof(long); len <<= 1)
4503 + read_var(len);
4504 +
4505 + /* Test when breakpoint is unset */
4506 +
4507 + /* Test write watchpoints */
4508 + for (len = 1; len <= sizeof(long); len <<= 1)
4509 + write_var(len);
4510 +
4511 + /* Test read/write watchpoints (on read accesses) */
4512 + for (len = 1; len <= sizeof(long); len <<= 1)
4513 + read_var(len);
4514 +}
4515 +
4516 +static void check_success(const char *msg)
4517 +{
4518 + const char *msg2;
4519 + int status;
4520 +
4521 + /* Wait for the child to SIGTRAP */
4522 + wait(&status);
4523 +
4524 + msg2 = "Failed";
4525 +
4526 + if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) {
4527 + msg2 = "Child process hit the breakpoint";
4528 + }
4529 +
4530 + printf("%s Result: [%s]\n", msg, msg2);
4531 +}
4532 +
4533 +static void launch_watchpoints(char *buf, int mode, int len,
4534 + struct ppc_debug_info *dbginfo, bool dawr)
4535 +{
4536 + const char *mode_str;
4537 + unsigned long data = (unsigned long)(dummy_var);
4538 + int wh, range;
4539 +
4540 + data &= ~0x7UL;
4541 +
4542 + if (mode == BP_W) {
4543 + data |= (1UL << 1);
4544 + mode_str = "write";
4545 + } else {
4546 + data |= (1UL << 0);
4547 + data |= (1UL << 1);
4548 + mode_str = "read";
4549 + }
4550 +
4551 + /* Set DABR_TRANSLATION bit */
4552 + data |= (1UL << 2);
4553 +
4554 + /* use PTRACE_SET_DEBUGREG breakpoints */
4555 + set_breakpoint_addr((void *)data);
4556 + ptrace(PTRACE_CONT, child_pid, NULL, 0);
4557 + sprintf(buf, "Test %s watchpoint with len: %d ", mode_str, len);
4558 + check_success(buf);
4559 + /* Unregister hw brkpoint */
4560 + set_breakpoint_addr(NULL);
4561 +
4562 + data = (data & ~7); /* remove dabr control bits */
4563 +
4564 + /* use PPC_PTRACE_SETHWDEBUG breakpoint */
4565 + if (!(dbginfo->features & PPC_DEBUG_FEATURE_DATA_BP_RANGE))
4566 + return; /* not supported */
4567 + wh = set_hwbreakpoint_addr((void *)data, 0);
4568 + ptrace(PTRACE_CONT, child_pid, NULL, 0);
4569 + sprintf(buf, "Test %s watchpoint with len: %d ", mode_str, len);
4570 + check_success(buf);
4571 + /* Unregister hw brkpoint */
4572 + del_hwbreakpoint_addr(wh);
4573 +
4574 + /* try a wider range */
4575 + range = 8;
4576 + if (dawr)
4577 + range = 512 - ((int)data & (DAWR_LENGTH_MAX - 1));
4578 + wh = set_hwbreakpoint_addr((void *)data, range);
4579 + ptrace(PTRACE_CONT, child_pid, NULL, 0);
4580 + sprintf(buf, "Test %s watchpoint with len: %d ", mode_str, len);
4581 + check_success(buf);
4582 + /* Unregister hw brkpoint */
4583 + del_hwbreakpoint_addr(wh);
4584 +}
4585 +
4586 +/* Set the breakpoints and check the child successfully trigger them */
4587 +static int launch_tests(bool dawr)
4588 +{
4589 + char buf[1024];
4590 + int len, i, status;
4591 +
4592 + struct ppc_debug_info dbginfo;
4593 +
4594 + i = ptrace(PPC_PTRACE_GETHWDBGINFO, child_pid, NULL, &dbginfo);
4595 + if (i) {
4596 + perror("Can't set breakpoint info\n");
4597 + exit(-1);
4598 + }
4599 + if (!(dbginfo.features & PPC_DEBUG_FEATURE_DATA_BP_RANGE))
4600 + printf("WARNING: Kernel doesn't support PPC_PTRACE_SETHWDEBUG\n");
4601 +
4602 + /* Write watchpoint */
4603 + for (len = 1; len <= sizeof(long); len <<= 1)
4604 + launch_watchpoints(buf, BP_W, len, &dbginfo, dawr);
4605 +
4606 + /* Read-Write watchpoint */
4607 + for (len = 1; len <= sizeof(long); len <<= 1)
4608 + launch_watchpoints(buf, BP_RW, len, &dbginfo, dawr);
4609 +
4610 + ptrace(PTRACE_CONT, child_pid, NULL, 0);
4611 +
4612 + /*
4613 + * Now we have unregistered the breakpoint, access by child
4614 + * should not cause SIGTRAP.
4615 + */
4616 +
4617 + wait(&status);
4618 +
4619 + if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) {
4620 + printf("FAIL: Child process hit the breakpoint, which is not expected\n");
4621 + ptrace(PTRACE_CONT, child_pid, NULL, 0);
4622 + return TEST_FAIL;
4623 + }
4624 +
4625 + if (WIFEXITED(status))
4626 + printf("Child exited normally\n");
4627 +
4628 + return TEST_PASS;
4629 +}
4630 +
4631 +static int ptrace_hwbreak(void)
4632 +{
4633 + pid_t pid;
4634 + int ret;
4635 + bool dawr;
4636 +
4637 + pid = fork();
4638 + if (!pid) {
4639 + trigger_tests();
4640 + return 0;
4641 + }
4642 +
4643 + wait(NULL);
4644 +
4645 + child_pid = pid;
4646 +
4647 + get_dbginfo();
4648 + SKIP_IF(!hwbreak_present());
4649 + dawr = dawr_present();
4650 +
4651 + ret = launch_tests(dawr);
4652 +
4653 + wait(NULL);
4654 +
4655 + return ret;
4656 +}
4657 +
4658 +int main(int argc, char **argv, char **envp)
4659 +{
4660 + return test_harness(ptrace_hwbreak, "ptrace-hwbreak");
4661 +}