Magellan Linux

Annotation of /trunk/kernel-magellan/patches-4.11/0108-4.11.9-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2953 - (hide annotations) (download)
Thu Jul 6 13:57:45 2017 UTC (6 years, 10 months ago) by niro
File size: 124593 byte(s)
-linux-4.11.9
1 niro 2953 diff --git a/Makefile b/Makefile
2     index 8c5c94ca56d9..9db9095e0d7b 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 11
8     -SUBLEVEL = 8
9     +SUBLEVEL = 9
10     EXTRAVERSION =
11     NAME = Fearless Coyote
12    
13     diff --git a/arch/arm/mach-davinci/pm.c b/arch/arm/mach-davinci/pm.c
14     index 0afd201ab980..28255af5f2d8 100644
15     --- a/arch/arm/mach-davinci/pm.c
16     +++ b/arch/arm/mach-davinci/pm.c
17     @@ -154,7 +154,8 @@ int __init davinci_pm_init(void)
18     davinci_sram_suspend = sram_alloc(davinci_cpu_suspend_sz, NULL);
19     if (!davinci_sram_suspend) {
20     pr_err("PM: cannot allocate SRAM memory\n");
21     - return -ENOMEM;
22     + ret = -ENOMEM;
23     + goto no_sram_mem;
24     }
25    
26     davinci_sram_push(davinci_sram_suspend, davinci_cpu_suspend,
27     @@ -162,6 +163,10 @@ int __init davinci_pm_init(void)
28    
29     suspend_set_ops(&davinci_pm_ops);
30    
31     + return 0;
32     +
33     +no_sram_mem:
34     + iounmap(pm_config.ddrpsc_reg_base);
35     no_ddrpsc_mem:
36     iounmap(pm_config.ddrpll_reg_base);
37     no_ddrpll_mem:
38     diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
39     index 347cca965783..2a343349d4c4 100644
40     --- a/arch/arm/mm/mmu.c
41     +++ b/arch/arm/mm/mmu.c
42     @@ -1216,15 +1216,15 @@ void __init adjust_lowmem_bounds(void)
43    
44     high_memory = __va(arm_lowmem_limit - 1) + 1;
45    
46     + if (!memblock_limit)
47     + memblock_limit = arm_lowmem_limit;
48     +
49     /*
50     * Round the memblock limit down to a pmd size. This
51     * helps to ensure that we will allocate memory from the
52     * last full pmd, which should be mapped.
53     */
54     - if (memblock_limit)
55     - memblock_limit = round_down(memblock_limit, PMD_SIZE);
56     - if (!memblock_limit)
57     - memblock_limit = arm_lowmem_limit;
58     + memblock_limit = round_down(memblock_limit, PMD_SIZE);
59    
60     if (!IS_ENABLED(CONFIG_HIGHMEM) || cache_is_vipt_aliasing()) {
61     if (memblock_end_of_DRAM() > arm_lowmem_limit) {
62     diff --git a/arch/arm64/include/asm/acpi.h b/arch/arm64/include/asm/acpi.h
63     index c1976c0adca7..ae66f5ef11f1 100644
64     --- a/arch/arm64/include/asm/acpi.h
65     +++ b/arch/arm64/include/asm/acpi.h
66     @@ -23,9 +23,9 @@
67     #define ACPI_MADT_GICC_LENGTH \
68     (acpi_gbl_FADT.header.revision < 6 ? 76 : 80)
69    
70     -#define BAD_MADT_GICC_ENTRY(entry, end) \
71     - (!(entry) || (unsigned long)(entry) + sizeof(*(entry)) > (end) || \
72     - (entry)->header.length != ACPI_MADT_GICC_LENGTH)
73     +#define BAD_MADT_GICC_ENTRY(entry, end) \
74     + (!(entry) || (entry)->header.length != ACPI_MADT_GICC_LENGTH || \
75     + (unsigned long)(entry) + ACPI_MADT_GICC_LENGTH > (end))
76    
77     /* Basic configuration for ACPI */
78     #ifdef CONFIG_ACPI
79     diff --git a/arch/arm64/kernel/pci.c b/arch/arm64/kernel/pci.c
80     index 4f0e3ebfea4b..c7e3e6387a49 100644
81     --- a/arch/arm64/kernel/pci.c
82     +++ b/arch/arm64/kernel/pci.c
83     @@ -191,8 +191,10 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
84     return NULL;
85    
86     root_ops = kzalloc_node(sizeof(*root_ops), GFP_KERNEL, node);
87     - if (!root_ops)
88     + if (!root_ops) {
89     + kfree(ri);
90     return NULL;
91     + }
92    
93     ri->cfg = pci_acpi_setup_ecam_mapping(root);
94     if (!ri->cfg) {
95     diff --git a/arch/mips/kernel/entry.S b/arch/mips/kernel/entry.S
96     index 8d83fc2a96b7..38a302919e6b 100644
97     --- a/arch/mips/kernel/entry.S
98     +++ b/arch/mips/kernel/entry.S
99     @@ -11,6 +11,7 @@
100     #include <asm/asm.h>
101     #include <asm/asmmacro.h>
102     #include <asm/compiler.h>
103     +#include <asm/irqflags.h>
104     #include <asm/regdef.h>
105     #include <asm/mipsregs.h>
106     #include <asm/stackframe.h>
107     @@ -119,6 +120,7 @@ work_pending:
108     andi t0, a2, _TIF_NEED_RESCHED # a2 is preloaded with TI_FLAGS
109     beqz t0, work_notifysig
110     work_resched:
111     + TRACE_IRQS_OFF
112     jal schedule
113    
114     local_irq_disable # make sure need_resched and
115     @@ -155,6 +157,7 @@ syscall_exit_work:
116     beqz t0, work_pending # trace bit set?
117     local_irq_enable # could let syscall_trace_leave()
118     # call schedule() instead
119     + TRACE_IRQS_ON
120     move a0, sp
121     jal syscall_trace_leave
122     b resume_userspace
123     diff --git a/arch/mips/kernel/head.S b/arch/mips/kernel/head.S
124     index cf052204eb0a..d1bb506adc10 100644
125     --- a/arch/mips/kernel/head.S
126     +++ b/arch/mips/kernel/head.S
127     @@ -106,8 +106,8 @@ NESTED(kernel_entry, 16, sp) # kernel entry point
128     beq t0, t1, dtb_found
129     #endif
130     li t1, -2
131     - beq a0, t1, dtb_found
132     move t2, a1
133     + beq a0, t1, dtb_found
134    
135     li t2, 0
136     dtb_found:
137     diff --git a/arch/mips/kernel/pm-cps.c b/arch/mips/kernel/pm-cps.c
138     index 5f928c34c148..d99416094ba9 100644
139     --- a/arch/mips/kernel/pm-cps.c
140     +++ b/arch/mips/kernel/pm-cps.c
141     @@ -56,7 +56,6 @@ DECLARE_BITMAP(state_support, CPS_PM_STATE_COUNT);
142     * state. Actually per-core rather than per-CPU.
143     */
144     static DEFINE_PER_CPU_ALIGNED(u32*, ready_count);
145     -static DEFINE_PER_CPU_ALIGNED(void*, ready_count_alloc);
146    
147     /* Indicates online CPUs coupled with the current CPU */
148     static DEFINE_PER_CPU_ALIGNED(cpumask_t, online_coupled);
149     @@ -642,7 +641,6 @@ static int cps_pm_online_cpu(unsigned int cpu)
150     {
151     enum cps_pm_state state;
152     unsigned core = cpu_data[cpu].core;
153     - unsigned dlinesz = cpu_data[cpu].dcache.linesz;
154     void *entry_fn, *core_rc;
155    
156     for (state = CPS_PM_NC_WAIT; state < CPS_PM_STATE_COUNT; state++) {
157     @@ -662,16 +660,11 @@ static int cps_pm_online_cpu(unsigned int cpu)
158     }
159    
160     if (!per_cpu(ready_count, core)) {
161     - core_rc = kmalloc(dlinesz * 2, GFP_KERNEL);
162     + core_rc = kmalloc(sizeof(u32), GFP_KERNEL);
163     if (!core_rc) {
164     pr_err("Failed allocate core %u ready_count\n", core);
165     return -ENOMEM;
166     }
167     - per_cpu(ready_count_alloc, core) = core_rc;
168     -
169     - /* Ensure ready_count is aligned to a cacheline boundary */
170     - core_rc += dlinesz - 1;
171     - core_rc = (void *)((unsigned long)core_rc & ~(dlinesz - 1));
172     per_cpu(ready_count, core) = core_rc;
173     }
174    
175     diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
176     index b49e7bf9f950..0b675023b9c6 100644
177     --- a/arch/mips/kernel/traps.c
178     +++ b/arch/mips/kernel/traps.c
179     @@ -201,6 +201,8 @@ void show_stack(struct task_struct *task, unsigned long *sp)
180     {
181     struct pt_regs regs;
182     mm_segment_t old_fs = get_fs();
183     +
184     + regs.cp0_status = KSU_KERNEL;
185     if (sp) {
186     regs.regs[29] = (unsigned long)sp;
187     regs.regs[31] = 0;
188     diff --git a/arch/x86/boot/compressed/kaslr.c b/arch/x86/boot/compressed/kaslr.c
189     index 8b7c9e75edcb..8fad8a64d670 100644
190     --- a/arch/x86/boot/compressed/kaslr.c
191     +++ b/arch/x86/boot/compressed/kaslr.c
192     @@ -564,9 +564,6 @@ void choose_random_location(unsigned long input,
193     {
194     unsigned long random_addr, min_addr;
195    
196     - /* By default, keep output position unchanged. */
197     - *virt_addr = *output;
198     -
199     if (cmdline_find_option_bool("nokaslr")) {
200     warn("KASLR disabled: 'nokaslr' on cmdline.");
201     return;
202     diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
203     index b3c5a5f030ce..c945acd8fa33 100644
204     --- a/arch/x86/boot/compressed/misc.c
205     +++ b/arch/x86/boot/compressed/misc.c
206     @@ -338,7 +338,7 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap,
207     unsigned long output_len)
208     {
209     const unsigned long kernel_total_size = VO__end - VO__text;
210     - unsigned long virt_addr = (unsigned long)output;
211     + unsigned long virt_addr = LOAD_PHYSICAL_ADDR;
212    
213     /* Retain x86 boot parameters pointer passed from startup_32/64. */
214     boot_params = rmode;
215     @@ -397,7 +397,7 @@ asmlinkage __visible void *extract_kernel(void *rmode, memptr heap,
216     #ifndef CONFIG_RELOCATABLE
217     if ((unsigned long)output != LOAD_PHYSICAL_ADDR)
218     error("Destination address does not match LOAD_PHYSICAL_ADDR");
219     - if ((unsigned long)output != virt_addr)
220     + if (virt_addr != LOAD_PHYSICAL_ADDR)
221     error("Destination virtual address changed when not relocatable");
222     #endif
223    
224     diff --git a/arch/x86/boot/compressed/misc.h b/arch/x86/boot/compressed/misc.h
225     index 1c8355eadbd1..766a5211f827 100644
226     --- a/arch/x86/boot/compressed/misc.h
227     +++ b/arch/x86/boot/compressed/misc.h
228     @@ -81,8 +81,6 @@ static inline void choose_random_location(unsigned long input,
229     unsigned long output_size,
230     unsigned long *virt_addr)
231     {
232     - /* No change from existing output location. */
233     - *virt_addr = *output;
234     }
235     #endif
236    
237     diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
238     index 57f7ec35216e..701d29f8e4d3 100644
239     --- a/arch/x86/entry/entry_32.S
240     +++ b/arch/x86/entry/entry_32.S
241     @@ -255,6 +255,23 @@ ENTRY(__switch_to_asm)
242     END(__switch_to_asm)
243    
244     /*
245     + * The unwinder expects the last frame on the stack to always be at the same
246     + * offset from the end of the page, which allows it to validate the stack.
247     + * Calling schedule_tail() directly would break that convention because its an
248     + * asmlinkage function so its argument has to be pushed on the stack. This
249     + * wrapper creates a proper "end of stack" frame header before the call.
250     + */
251     +ENTRY(schedule_tail_wrapper)
252     + FRAME_BEGIN
253     +
254     + pushl %eax
255     + call schedule_tail
256     + popl %eax
257     +
258     + FRAME_END
259     + ret
260     +ENDPROC(schedule_tail_wrapper)
261     +/*
262     * A newly forked process directly context switches into this address.
263     *
264     * eax: prev task we switched from
265     @@ -262,24 +279,15 @@ END(__switch_to_asm)
266     * edi: kernel thread arg
267     */
268     ENTRY(ret_from_fork)
269     - FRAME_BEGIN /* help unwinder find end of stack */
270     -
271     - /*
272     - * schedule_tail() is asmlinkage so we have to put its 'prev' argument
273     - * on the stack.
274     - */
275     - pushl %eax
276     - call schedule_tail
277     - popl %eax
278     + call schedule_tail_wrapper
279    
280     testl %ebx, %ebx
281     jnz 1f /* kernel threads are uncommon */
282    
283     2:
284     /* When we fork, we trace the syscall return in the child, too. */
285     - leal FRAME_OFFSET(%esp), %eax
286     + movl %esp, %eax
287     call syscall_return_slowpath
288     - FRAME_END
289     jmp restore_all
290    
291     /* kernel thread */
292     diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
293     index 044d18ebc43c..5b219707c2f2 100644
294     --- a/arch/x86/entry/entry_64.S
295     +++ b/arch/x86/entry/entry_64.S
296     @@ -36,7 +36,6 @@
297     #include <asm/smap.h>
298     #include <asm/pgtable_types.h>
299     #include <asm/export.h>
300     -#include <asm/frame.h>
301     #include <linux/err.h>
302    
303     .code64
304     @@ -409,19 +408,17 @@ END(__switch_to_asm)
305     * r12: kernel thread arg
306     */
307     ENTRY(ret_from_fork)
308     - FRAME_BEGIN /* help unwinder find end of stack */
309     movq %rax, %rdi
310     - call schedule_tail /* rdi: 'prev' task parameter */
311     + call schedule_tail /* rdi: 'prev' task parameter */
312    
313     - testq %rbx, %rbx /* from kernel_thread? */
314     - jnz 1f /* kernel threads are uncommon */
315     + testq %rbx, %rbx /* from kernel_thread? */
316     + jnz 1f /* kernel threads are uncommon */
317    
318     2:
319     - leaq FRAME_OFFSET(%rsp),%rdi /* pt_regs pointer */
320     + movq %rsp, %rdi
321     call syscall_return_slowpath /* returns with IRQs disabled */
322     TRACE_IRQS_ON /* user mode is traced as IRQS on */
323     SWAPGS
324     - FRAME_END
325     jmp restore_regs_and_iret
326    
327     1:
328     diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
329     index 65c2ca578556..78da7b646cd0 100644
330     --- a/arch/x86/events/intel/core.c
331     +++ b/arch/x86/events/intel/core.c
332     @@ -2130,7 +2130,7 @@ static int intel_pmu_handle_irq(struct pt_regs *regs)
333     * counters from the GLOBAL_STATUS mask and we always process PEBS
334     * events via drain_pebs().
335     */
336     - status &= ~cpuc->pebs_enabled;
337     + status &= ~(cpuc->pebs_enabled & PEBS_COUNTER_MASK);
338    
339     /*
340     * PEBS overflow sets bit 62 in the global status register
341     diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c
342     index 9dfeeeca0ea8..c6d23ffe422d 100644
343     --- a/arch/x86/events/intel/ds.c
344     +++ b/arch/x86/events/intel/ds.c
345     @@ -1222,7 +1222,7 @@ get_next_pebs_record_by_bit(void *base, void *top, int bit)
346    
347     /* clear non-PEBS bit and re-check */
348     pebs_status = p->status & cpuc->pebs_enabled;
349     - pebs_status &= (1ULL << MAX_PEBS_EVENTS) - 1;
350     + pebs_status &= PEBS_COUNTER_MASK;
351     if (pebs_status == (1 << bit))
352     return at;
353     }
354     diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c
355     index 758c1aa5009d..44ec523287f6 100644
356     --- a/arch/x86/events/intel/uncore.c
357     +++ b/arch/x86/events/intel/uncore.c
358     @@ -1170,7 +1170,7 @@ static int uncore_event_cpu_online(unsigned int cpu)
359     pmu = type->pmus;
360     for (i = 0; i < type->num_boxes; i++, pmu++) {
361     box = pmu->boxes[pkg];
362     - if (!box && atomic_inc_return(&box->refcnt) == 1)
363     + if (box && atomic_inc_return(&box->refcnt) == 1)
364     uncore_box_init(box);
365     }
366     }
367     diff --git a/arch/x86/events/perf_event.h b/arch/x86/events/perf_event.h
368     index bcbb1d2ae10b..be3d36254040 100644
369     --- a/arch/x86/events/perf_event.h
370     +++ b/arch/x86/events/perf_event.h
371     @@ -79,6 +79,7 @@ struct amd_nb {
372    
373     /* The maximal number of PEBS events: */
374     #define MAX_PEBS_EVENTS 8
375     +#define PEBS_COUNTER_MASK ((1ULL << MAX_PEBS_EVENTS) - 1)
376    
377     /*
378     * Flags PEBS can handle without an PMI.
379     diff --git a/arch/x86/include/asm/kvm_emulate.h b/arch/x86/include/asm/kvm_emulate.h
380     index d5f83cda1dea..722d0e568863 100644
381     --- a/arch/x86/include/asm/kvm_emulate.h
382     +++ b/arch/x86/include/asm/kvm_emulate.h
383     @@ -221,6 +221,9 @@ struct x86_emulate_ops {
384     void (*get_cpuid)(struct x86_emulate_ctxt *ctxt,
385     u32 *eax, u32 *ebx, u32 *ecx, u32 *edx);
386     void (*set_nmi_mask)(struct x86_emulate_ctxt *ctxt, bool masked);
387     +
388     + unsigned (*get_hflags)(struct x86_emulate_ctxt *ctxt);
389     + void (*set_hflags)(struct x86_emulate_ctxt *ctxt, unsigned hflags);
390     };
391    
392     typedef u32 __attribute__((vector_size(16))) sse128_t;
393     @@ -290,7 +293,6 @@ struct x86_emulate_ctxt {
394    
395     /* interruptibility state, as a result of execution of STI or MOV SS */
396     int interruptibility;
397     - int emul_flags;
398    
399     bool perm_ok; /* do not check permissions if true */
400     bool ud; /* inject an #UD if host doesn't support insn */
401     diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
402     index 7c9c895432a9..6a348b6f73a2 100644
403     --- a/arch/x86/include/asm/mshyperv.h
404     +++ b/arch/x86/include/asm/mshyperv.h
405     @@ -2,8 +2,7 @@
406     #define _ASM_X86_MSHYPER_H
407    
408     #include <linux/types.h>
409     -#include <linux/interrupt.h>
410     -#include <linux/clocksource.h>
411     +#include <linux/atomic.h>
412     #include <asm/hyperv.h>
413    
414     /*
415     diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
416     index 9ac2a5cdd9c2..e79fb6b3dffe 100644
417     --- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
418     +++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c
419     @@ -767,11 +767,13 @@ static struct dentry *rdt_mount(struct file_system_type *fs_type,
420     dentry = kernfs_mount(fs_type, flags, rdt_root,
421     RDTGROUP_SUPER_MAGIC, NULL);
422     if (IS_ERR(dentry))
423     - goto out_cdp;
424     + goto out_destroy;
425    
426     static_branch_enable(&rdt_enable_key);
427     goto out;
428    
429     +out_destroy:
430     + kernfs_remove(kn_info);
431     out_cdp:
432     cdp_disable();
433     out:
434     diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
435     index ce7f80baa664..0fca363787ff 100644
436     --- a/arch/x86/kvm/emulate.c
437     +++ b/arch/x86/kvm/emulate.c
438     @@ -2547,7 +2547,7 @@ static int em_rsm(struct x86_emulate_ctxt *ctxt)
439     u64 smbase;
440     int ret;
441    
442     - if ((ctxt->emul_flags & X86EMUL_SMM_MASK) == 0)
443     + if ((ctxt->ops->get_hflags(ctxt) & X86EMUL_SMM_MASK) == 0)
444     return emulate_ud(ctxt);
445    
446     /*
447     @@ -2596,11 +2596,11 @@ static int em_rsm(struct x86_emulate_ctxt *ctxt)
448     return X86EMUL_UNHANDLEABLE;
449     }
450    
451     - if ((ctxt->emul_flags & X86EMUL_SMM_INSIDE_NMI_MASK) == 0)
452     + if ((ctxt->ops->get_hflags(ctxt) & X86EMUL_SMM_INSIDE_NMI_MASK) == 0)
453     ctxt->ops->set_nmi_mask(ctxt, false);
454    
455     - ctxt->emul_flags &= ~X86EMUL_SMM_INSIDE_NMI_MASK;
456     - ctxt->emul_flags &= ~X86EMUL_SMM_MASK;
457     + ctxt->ops->set_hflags(ctxt, ctxt->ops->get_hflags(ctxt) &
458     + ~(X86EMUL_SMM_INSIDE_NMI_MASK | X86EMUL_SMM_MASK));
459     return X86EMUL_CONTINUE;
460     }
461    
462     @@ -5317,6 +5317,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
463     const struct x86_emulate_ops *ops = ctxt->ops;
464     int rc = X86EMUL_CONTINUE;
465     int saved_dst_type = ctxt->dst.type;
466     + unsigned emul_flags;
467    
468     ctxt->mem_read.pos = 0;
469    
470     @@ -5331,6 +5332,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
471     goto done;
472     }
473    
474     + emul_flags = ctxt->ops->get_hflags(ctxt);
475     if (unlikely(ctxt->d &
476     (No64|Undefined|Sse|Mmx|Intercept|CheckPerm|Priv|Prot|String))) {
477     if ((ctxt->mode == X86EMUL_MODE_PROT64 && (ctxt->d & No64)) ||
478     @@ -5364,7 +5366,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
479     fetch_possible_mmx_operand(ctxt, &ctxt->dst);
480     }
481    
482     - if (unlikely(ctxt->emul_flags & X86EMUL_GUEST_MASK) && ctxt->intercept) {
483     + if (unlikely(emul_flags & X86EMUL_GUEST_MASK) && ctxt->intercept) {
484     rc = emulator_check_intercept(ctxt, ctxt->intercept,
485     X86_ICPT_PRE_EXCEPT);
486     if (rc != X86EMUL_CONTINUE)
487     @@ -5393,7 +5395,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
488     goto done;
489     }
490    
491     - if (unlikely(ctxt->emul_flags & X86EMUL_GUEST_MASK) && (ctxt->d & Intercept)) {
492     + if (unlikely(emul_flags & X86EMUL_GUEST_MASK) && (ctxt->d & Intercept)) {
493     rc = emulator_check_intercept(ctxt, ctxt->intercept,
494     X86_ICPT_POST_EXCEPT);
495     if (rc != X86EMUL_CONTINUE)
496     @@ -5447,7 +5449,7 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
497    
498     special_insn:
499    
500     - if (unlikely(ctxt->emul_flags & X86EMUL_GUEST_MASK) && (ctxt->d & Intercept)) {
501     + if (unlikely(emul_flags & X86EMUL_GUEST_MASK) && (ctxt->d & Intercept)) {
502     rc = emulator_check_intercept(ctxt, ctxt->intercept,
503     X86_ICPT_POST_MEMACCESS);
504     if (rc != X86EMUL_CONTINUE)
505     diff --git a/arch/x86/kvm/pmu_intel.c b/arch/x86/kvm/pmu_intel.c
506     index 9d4a8504a95a..5ab4a364348e 100644
507     --- a/arch/x86/kvm/pmu_intel.c
508     +++ b/arch/x86/kvm/pmu_intel.c
509     @@ -294,7 +294,7 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu)
510     ((u64)1 << edx.split.bit_width_fixed) - 1;
511     }
512    
513     - pmu->global_ctrl = ((1 << pmu->nr_arch_gp_counters) - 1) |
514     + pmu->global_ctrl = ((1ull << pmu->nr_arch_gp_counters) - 1) |
515     (((1ull << pmu->nr_arch_fixed_counters) - 1) << INTEL_PMC_IDX_FIXED);
516     pmu->global_ctrl_mask = ~pmu->global_ctrl;
517    
518     diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
519     index 259e9b28ccf8..e06ec5333da1 100644
520     --- a/arch/x86/kvm/vmx.c
521     +++ b/arch/x86/kvm/vmx.c
522     @@ -2436,7 +2436,7 @@ static int nested_vmx_check_exception(struct kvm_vcpu *vcpu, unsigned nr)
523     if (!(vmcs12->exception_bitmap & (1u << nr)))
524     return 0;
525    
526     - nested_vmx_vmexit(vcpu, to_vmx(vcpu)->exit_reason,
527     + nested_vmx_vmexit(vcpu, EXIT_REASON_EXCEPTION_NMI,
528     vmcs_read32(VM_EXIT_INTR_INFO),
529     vmcs_readl(EXIT_QUALIFICATION));
530     return 1;
531     diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
532     index dd1fe338c5f5..4e957185d5b3 100644
533     --- a/arch/x86/kvm/x86.c
534     +++ b/arch/x86/kvm/x86.c
535     @@ -5098,6 +5098,8 @@ static bool emulator_get_segment(struct x86_emulate_ctxt *ctxt, u16 *selector,
536    
537     if (var.unusable) {
538     memset(desc, 0, sizeof(*desc));
539     + if (base3)
540     + *base3 = 0;
541     return false;
542     }
543    
544     @@ -5248,6 +5250,16 @@ static void emulator_set_nmi_mask(struct x86_emulate_ctxt *ctxt, bool masked)
545     kvm_x86_ops->set_nmi_mask(emul_to_vcpu(ctxt), masked);
546     }
547    
548     +static unsigned emulator_get_hflags(struct x86_emulate_ctxt *ctxt)
549     +{
550     + return emul_to_vcpu(ctxt)->arch.hflags;
551     +}
552     +
553     +static void emulator_set_hflags(struct x86_emulate_ctxt *ctxt, unsigned emul_flags)
554     +{
555     + kvm_set_hflags(emul_to_vcpu(ctxt), emul_flags);
556     +}
557     +
558     static const struct x86_emulate_ops emulate_ops = {
559     .read_gpr = emulator_read_gpr,
560     .write_gpr = emulator_write_gpr,
561     @@ -5287,6 +5299,8 @@ static const struct x86_emulate_ops emulate_ops = {
562     .intercept = emulator_intercept,
563     .get_cpuid = emulator_get_cpuid,
564     .set_nmi_mask = emulator_set_nmi_mask,
565     + .get_hflags = emulator_get_hflags,
566     + .set_hflags = emulator_set_hflags,
567     };
568    
569     static void toggle_interruptibility(struct kvm_vcpu *vcpu, u32 mask)
570     @@ -5341,7 +5355,6 @@ static void init_emulate_ctxt(struct kvm_vcpu *vcpu)
571     BUILD_BUG_ON(HF_GUEST_MASK != X86EMUL_GUEST_MASK);
572     BUILD_BUG_ON(HF_SMM_MASK != X86EMUL_SMM_MASK);
573     BUILD_BUG_ON(HF_SMM_INSIDE_NMI_MASK != X86EMUL_SMM_INSIDE_NMI_MASK);
574     - ctxt->emul_flags = vcpu->arch.hflags;
575    
576     init_decode_cache(ctxt);
577     vcpu->arch.emulate_regs_need_sync_from_vcpu = false;
578     @@ -5744,8 +5757,6 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu,
579     unsigned long rflags = kvm_x86_ops->get_rflags(vcpu);
580     toggle_interruptibility(vcpu, ctxt->interruptibility);
581     vcpu->arch.emulate_regs_need_sync_to_vcpu = false;
582     - if (vcpu->arch.hflags != ctxt->emul_flags)
583     - kvm_set_hflags(vcpu, ctxt->emul_flags);
584     kvm_rip_write(vcpu, ctxt->eip);
585     if (r == EMULATE_DONE &&
586     (ctxt->tf || (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP)))
587     diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
588     index 15173d37f399..e1e3f7b4bdb0 100644
589     --- a/arch/x86/mm/init_64.c
590     +++ b/arch/x86/mm/init_64.c
591     @@ -94,10 +94,10 @@ __setup("noexec32=", nonx32_setup);
592     */
593     void sync_global_pgds(unsigned long start, unsigned long end)
594     {
595     - unsigned long address;
596     + unsigned long addr;
597    
598     - for (address = start; address <= end; address += PGDIR_SIZE) {
599     - const pgd_t *pgd_ref = pgd_offset_k(address);
600     + for (addr = start; addr <= end; addr = ALIGN(addr + 1, PGDIR_SIZE)) {
601     + const pgd_t *pgd_ref = pgd_offset_k(addr);
602     struct page *page;
603    
604     if (pgd_none(*pgd_ref))
605     @@ -108,7 +108,7 @@ void sync_global_pgds(unsigned long start, unsigned long end)
606     pgd_t *pgd;
607     spinlock_t *pgt_lock;
608    
609     - pgd = (pgd_t *)page_address(page) + pgd_index(address);
610     + pgd = (pgd_t *)page_address(page) + pgd_index(addr);
611     /* the pgt_lock only for Xen */
612     pgt_lock = &pgd_page_get_mm(page)->page_table_lock;
613     spin_lock(pgt_lock);
614     diff --git a/arch/x86/mm/mpx.c b/arch/x86/mm/mpx.c
615     index cd44ae727df7..1c34b767c84c 100644
616     --- a/arch/x86/mm/mpx.c
617     +++ b/arch/x86/mm/mpx.c
618     @@ -526,15 +526,7 @@ int mpx_handle_bd_fault(void)
619     if (!kernel_managing_mpx_tables(current->mm))
620     return -EINVAL;
621    
622     - if (do_mpx_bt_fault()) {
623     - force_sig(SIGSEGV, current);
624     - /*
625     - * The force_sig() is essentially "handling" this
626     - * exception, so we do not pass up the error
627     - * from do_mpx_bt_fault().
628     - */
629     - }
630     - return 0;
631     + return do_mpx_bt_fault();
632     }
633    
634     /*
635     diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
636     index a7655f6caf7d..75fb01109f94 100644
637     --- a/arch/x86/mm/tlb.c
638     +++ b/arch/x86/mm/tlb.c
639     @@ -263,8 +263,6 @@ void native_flush_tlb_others(const struct cpumask *cpumask,
640     {
641     struct flush_tlb_info info;
642    
643     - if (end == 0)
644     - end = start + PAGE_SIZE;
645     info.flush_mm = mm;
646     info.flush_start = start;
647     info.flush_end = end;
648     @@ -393,7 +391,7 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long start)
649     }
650    
651     if (cpumask_any_but(mm_cpumask(mm), smp_processor_id()) < nr_cpu_ids)
652     - flush_tlb_others(mm_cpumask(mm), mm, start, 0UL);
653     + flush_tlb_others(mm_cpumask(mm), mm, start, start + PAGE_SIZE);
654    
655     preempt_enable();
656     }
657     diff --git a/drivers/block/xen-blkback/blkback.c b/drivers/block/xen-blkback/blkback.c
658     index fbe0dfdffc0d..0e824091a12f 100644
659     --- a/drivers/block/xen-blkback/blkback.c
660     +++ b/drivers/block/xen-blkback/blkback.c
661     @@ -609,8 +609,6 @@ int xen_blkif_schedule(void *arg)
662     unsigned long timeout;
663     int ret;
664    
665     - xen_blkif_get(blkif);
666     -
667     set_freezable();
668     while (!kthread_should_stop()) {
669     if (try_to_freeze())
670     @@ -665,7 +663,6 @@ int xen_blkif_schedule(void *arg)
671     print_stats(ring);
672    
673     ring->xenblkd = NULL;
674     - xen_blkif_put(blkif);
675    
676     return 0;
677     }
678     diff --git a/drivers/block/xen-blkback/xenbus.c b/drivers/block/xen-blkback/xenbus.c
679     index dcabf52425ff..1ccb5a7bbdfe 100644
680     --- a/drivers/block/xen-blkback/xenbus.c
681     +++ b/drivers/block/xen-blkback/xenbus.c
682     @@ -255,7 +255,6 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
683     if (ring->xenblkd) {
684     kthread_stop(ring->xenblkd);
685     wake_up(&ring->shutdown_wq);
686     - ring->xenblkd = NULL;
687     }
688    
689     /* The above kthread_stop() guarantees that at this point we
690     @@ -316,8 +315,10 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
691     static void xen_blkif_free(struct xen_blkif *blkif)
692     {
693    
694     - xen_blkif_disconnect(blkif);
695     + WARN_ON(xen_blkif_disconnect(blkif));
696     xen_vbd_free(&blkif->vbd);
697     + kfree(blkif->be->mode);
698     + kfree(blkif->be);
699    
700     /* Make sure everything is drained before shutting down */
701     kmem_cache_free(xen_blkif_cachep, blkif);
702     @@ -512,8 +513,6 @@ static int xen_blkbk_remove(struct xenbus_device *dev)
703    
704     /* Put the reference we set in xen_blkif_alloc(). */
705     xen_blkif_put(be->blkif);
706     - kfree(be->mode);
707     - kfree(be);
708     return 0;
709     }
710    
711     diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
712     index 8b4d721d6d63..b5a43d66878a 100644
713     --- a/drivers/gpio/gpiolib.c
714     +++ b/drivers/gpio/gpiolib.c
715     @@ -708,7 +708,8 @@ static irqreturn_t lineevent_irq_thread(int irq, void *p)
716    
717     ge.timestamp = ktime_get_real_ns();
718    
719     - if (le->eflags & GPIOEVENT_REQUEST_BOTH_EDGES) {
720     + if (le->eflags & GPIOEVENT_REQUEST_RISING_EDGE
721     + && le->eflags & GPIOEVENT_REQUEST_FALLING_EDGE) {
722     int level = gpiod_get_value_cansleep(le->desc);
723    
724     if (level)
725     diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c
726     index 13db8a2851ed..1f013d45c9e9 100644
727     --- a/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c
728     +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cmdbuf_res.c
729     @@ -321,6 +321,7 @@ void vmw_cmdbuf_res_man_destroy(struct vmw_cmdbuf_res_manager *man)
730     list_for_each_entry_safe(entry, next, &man->list, head)
731     vmw_cmdbuf_res_free(man, entry);
732    
733     + drm_ht_remove(&man->resources);
734     kfree(man);
735     }
736    
737     diff --git a/drivers/hsi/clients/ssi_protocol.c b/drivers/hsi/clients/ssi_protocol.c
738     index 7ef819680acd..8251fa2904b6 100644
739     --- a/drivers/hsi/clients/ssi_protocol.c
740     +++ b/drivers/hsi/clients/ssi_protocol.c
741     @@ -1065,7 +1065,7 @@ static void ssip_pn_setup(struct net_device *dev)
742     dev->addr_len = 1;
743     dev->tx_queue_len = SSIP_TXQUEUE_LEN;
744    
745     - dev->destructor = free_netdev;
746     + dev->needs_free_netdev = true;
747     dev->header_ops = &phonet_header_ops;
748     }
749    
750     diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
751     index b8111b0c8877..d4b3ca3dd0e4 100644
752     --- a/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
753     +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v1.c
754     @@ -1851,6 +1851,7 @@ void hns_roce_v1_cq_set_ci(struct hns_roce_cq *hr_cq, u32 cons_index)
755     u32 doorbell[2];
756    
757     doorbell[0] = cons_index & ((hr_cq->cq_depth << 1) - 1);
758     + doorbell[1] = 0;
759     roce_set_bit(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_HW_SYNS_S, 1);
760     roce_set_field(doorbell[1], ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_M,
761     ROCEE_DB_OTHERS_H_ROCEE_DB_OTH_CMD_S, 3);
762     diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
763     index b17536d6e69b..3f25d881b343 100644
764     --- a/drivers/iommu/amd_iommu.c
765     +++ b/drivers/iommu/amd_iommu.c
766     @@ -3879,11 +3879,9 @@ static void irte_ga_prepare(void *entry,
767     u8 vector, u32 dest_apicid, int devid)
768     {
769     struct irte_ga *irte = (struct irte_ga *) entry;
770     - struct iommu_dev_data *dev_data = search_dev_data(devid);
771    
772     irte->lo.val = 0;
773     irte->hi.val = 0;
774     - irte->lo.fields_remap.guest_mode = dev_data ? dev_data->use_vapic : 0;
775     irte->lo.fields_remap.int_type = delivery_mode;
776     irte->lo.fields_remap.dm = dest_mode;
777     irte->hi.fields.vector = vector;
778     @@ -3939,10 +3937,10 @@ static void irte_ga_set_affinity(void *entry, u16 devid, u16 index,
779     struct irte_ga *irte = (struct irte_ga *) entry;
780     struct iommu_dev_data *dev_data = search_dev_data(devid);
781    
782     - if (!dev_data || !dev_data->use_vapic) {
783     + if (!dev_data || !dev_data->use_vapic ||
784     + !irte->lo.fields_remap.guest_mode) {
785     irte->hi.fields.vector = vector;
786     irte->lo.fields_remap.destination = dest_apicid;
787     - irte->lo.fields_remap.guest_mode = 0;
788     modify_irte_ga(devid, index, irte, NULL);
789     }
790     }
791     diff --git a/drivers/iommu/amd_iommu_v2.c b/drivers/iommu/amd_iommu_v2.c
792     index 063343909b0d..6629c472eafd 100644
793     --- a/drivers/iommu/amd_iommu_v2.c
794     +++ b/drivers/iommu/amd_iommu_v2.c
795     @@ -696,9 +696,9 @@ int amd_iommu_bind_pasid(struct pci_dev *pdev, int pasid,
796    
797     out_unregister:
798     mmu_notifier_unregister(&pasid_state->mn, mm);
799     + mmput(mm);
800    
801     out_free:
802     - mmput(mm);
803     free_pasid_state(pasid_state);
804    
805     out:
806     diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
807     index 48d36ce59efb..1e0983488a8d 100644
808     --- a/drivers/iommu/dma-iommu.c
809     +++ b/drivers/iommu/dma-iommu.c
810     @@ -175,8 +175,7 @@ static void iova_reserve_pci_windows(struct pci_dev *dev,
811     unsigned long lo, hi;
812    
813     resource_list_for_each_entry(window, &bridge->windows) {
814     - if (resource_type(window->res) != IORESOURCE_MEM &&
815     - resource_type(window->res) != IORESOURCE_IO)
816     + if (resource_type(window->res) != IORESOURCE_MEM)
817     continue;
818    
819     lo = iova_pfn(iovad, window->res->start - window->offset);
820     diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
821     index 5742e5eb0704..f68e8c5ca386 100644
822     --- a/drivers/md/dm-thin.c
823     +++ b/drivers/md/dm-thin.c
824     @@ -1094,6 +1094,19 @@ static void process_prepared_discard_passdown_pt1(struct dm_thin_new_mapping *m)
825     return;
826     }
827    
828     + /*
829     + * Increment the unmapped blocks. This prevents a race between the
830     + * passdown io and reallocation of freed blocks.
831     + */
832     + r = dm_pool_inc_data_range(pool->pmd, m->data_block, data_end);
833     + if (r) {
834     + metadata_operation_failed(pool, "dm_pool_inc_data_range", r);
835     + bio_io_error(m->bio);
836     + cell_defer_no_holder(tc, m->cell);
837     + mempool_free(m, pool->mapping_pool);
838     + return;
839     + }
840     +
841     discard_parent = bio_alloc(GFP_NOIO, 1);
842     if (!discard_parent) {
843     DMWARN("%s: unable to allocate top level discard bio for passdown. Skipping passdown.",
844     @@ -1114,19 +1127,6 @@ static void process_prepared_discard_passdown_pt1(struct dm_thin_new_mapping *m)
845     end_discard(&op, r);
846     }
847     }
848     -
849     - /*
850     - * Increment the unmapped blocks. This prevents a race between the
851     - * passdown io and reallocation of freed blocks.
852     - */
853     - r = dm_pool_inc_data_range(pool->pmd, m->data_block, data_end);
854     - if (r) {
855     - metadata_operation_failed(pool, "dm_pool_inc_data_range", r);
856     - bio_io_error(m->bio);
857     - cell_defer_no_holder(tc, m->cell);
858     - mempool_free(m, pool->mapping_pool);
859     - return;
860     - }
861     }
862    
863     static void process_prepared_discard_passdown_pt2(struct dm_thin_new_mapping *m)
864     diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c
865     index 42ebd73f821d..7419c5ce63f8 100644
866     --- a/drivers/mtd/nand/brcmnand/brcmnand.c
867     +++ b/drivers/mtd/nand/brcmnand/brcmnand.c
868     @@ -101,6 +101,9 @@ struct brcm_nand_dma_desc {
869     #define BRCMNAND_MIN_BLOCKSIZE (8 * 1024)
870     #define BRCMNAND_MIN_DEVSIZE (4ULL * 1024 * 1024)
871    
872     +#define NAND_CTRL_RDY (INTFC_CTLR_READY | INTFC_FLASH_READY)
873     +#define NAND_POLL_STATUS_TIMEOUT_MS 100
874     +
875     /* Controller feature flags */
876     enum {
877     BRCMNAND_HAS_1K_SECTORS = BIT(0),
878     @@ -765,6 +768,31 @@ enum {
879     CS_SELECT_AUTO_DEVICE_ID_CFG = BIT(30),
880     };
881    
882     +static int bcmnand_ctrl_poll_status(struct brcmnand_controller *ctrl,
883     + u32 mask, u32 expected_val,
884     + unsigned long timeout_ms)
885     +{
886     + unsigned long limit;
887     + u32 val;
888     +
889     + if (!timeout_ms)
890     + timeout_ms = NAND_POLL_STATUS_TIMEOUT_MS;
891     +
892     + limit = jiffies + msecs_to_jiffies(timeout_ms);
893     + do {
894     + val = brcmnand_read_reg(ctrl, BRCMNAND_INTFC_STATUS);
895     + if ((val & mask) == expected_val)
896     + return 0;
897     +
898     + cpu_relax();
899     + } while (time_after(limit, jiffies));
900     +
901     + dev_warn(ctrl->dev, "timeout on status poll (expected %x got %x)\n",
902     + expected_val, val & mask);
903     +
904     + return -ETIMEDOUT;
905     +}
906     +
907     static inline void brcmnand_set_wp(struct brcmnand_controller *ctrl, bool en)
908     {
909     u32 val = en ? CS_SELECT_NAND_WP : 0;
910     @@ -1024,12 +1052,39 @@ static void brcmnand_wp(struct mtd_info *mtd, int wp)
911    
912     if ((ctrl->features & BRCMNAND_HAS_WP) && wp_on == 1) {
913     static int old_wp = -1;
914     + int ret;
915    
916     if (old_wp != wp) {
917     dev_dbg(ctrl->dev, "WP %s\n", wp ? "on" : "off");
918     old_wp = wp;
919     }
920     +
921     + /*
922     + * make sure ctrl/flash ready before and after
923     + * changing state of #WP pin
924     + */
925     + ret = bcmnand_ctrl_poll_status(ctrl, NAND_CTRL_RDY |
926     + NAND_STATUS_READY,
927     + NAND_CTRL_RDY |
928     + NAND_STATUS_READY, 0);
929     + if (ret)
930     + return;
931     +
932     brcmnand_set_wp(ctrl, wp);
933     + chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
934     + /* NAND_STATUS_WP 0x00 = protected, 0x80 = not protected */
935     + ret = bcmnand_ctrl_poll_status(ctrl,
936     + NAND_CTRL_RDY |
937     + NAND_STATUS_READY |
938     + NAND_STATUS_WP,
939     + NAND_CTRL_RDY |
940     + NAND_STATUS_READY |
941     + (wp ? 0 : NAND_STATUS_WP), 0);
942     +
943     + if (ret)
944     + dev_err_ratelimited(&host->pdev->dev,
945     + "nand #WP expected %s\n",
946     + wp ? "on" : "off");
947     }
948     }
949    
950     @@ -1157,15 +1212,15 @@ static irqreturn_t brcmnand_dma_irq(int irq, void *data)
951     static void brcmnand_send_cmd(struct brcmnand_host *host, int cmd)
952     {
953     struct brcmnand_controller *ctrl = host->ctrl;
954     - u32 intfc;
955     + int ret;
956    
957     dev_dbg(ctrl->dev, "send native cmd %d addr_lo 0x%x\n", cmd,
958     brcmnand_read_reg(ctrl, BRCMNAND_CMD_ADDRESS));
959     BUG_ON(ctrl->cmd_pending != 0);
960     ctrl->cmd_pending = cmd;
961    
962     - intfc = brcmnand_read_reg(ctrl, BRCMNAND_INTFC_STATUS);
963     - WARN_ON(!(intfc & INTFC_CTLR_READY));
964     + ret = bcmnand_ctrl_poll_status(ctrl, NAND_CTRL_RDY, NAND_CTRL_RDY, 0);
965     + WARN_ON(ret);
966    
967     mb(); /* flush previous writes */
968     brcmnand_write_reg(ctrl, BRCMNAND_CMD_START,
969     diff --git a/drivers/mtd/nand/fsmc_nand.c b/drivers/mtd/nand/fsmc_nand.c
970     index bda1e4667138..66aece9cc2cc 100644
971     --- a/drivers/mtd/nand/fsmc_nand.c
972     +++ b/drivers/mtd/nand/fsmc_nand.c
973     @@ -150,7 +150,6 @@ struct fsmc_nand_platform_data {
974     struct mtd_partition *partitions;
975     unsigned int nr_partitions;
976     unsigned int options;
977     - unsigned int width;
978     unsigned int bank;
979    
980     enum access_mode mode;
981     @@ -844,18 +843,19 @@ static int fsmc_nand_probe_config_dt(struct platform_device *pdev,
982     u32 val;
983     int ret;
984    
985     - /* Set default NAND width to 8 bits */
986     - pdata->width = 8;
987     + pdata->options = 0;
988     +
989     if (!of_property_read_u32(np, "bank-width", &val)) {
990     if (val == 2) {
991     - pdata->width = 16;
992     + pdata->options |= NAND_BUSWIDTH_16;
993     } else if (val != 1) {
994     dev_err(&pdev->dev, "invalid bank-width %u\n", val);
995     return -EINVAL;
996     }
997     }
998     +
999     if (of_get_property(np, "nand-skip-bbtscan", NULL))
1000     - pdata->options = NAND_SKIP_BBTSCAN;
1001     + pdata->options |= NAND_SKIP_BBTSCAN;
1002    
1003     pdata->nand_timings = devm_kzalloc(&pdev->dev,
1004     sizeof(*pdata->nand_timings), GFP_KERNEL);
1005     @@ -992,9 +992,6 @@ static int __init fsmc_nand_probe(struct platform_device *pdev)
1006     nand->badblockbits = 7;
1007     nand_set_flash_node(nand, np);
1008    
1009     - if (pdata->width == FSMC_NAND_BW16)
1010     - nand->options |= NAND_BUSWIDTH_16;
1011     -
1012     switch (host->mode) {
1013     case USE_DMA_ACCESS:
1014     dma_cap_zero(mask);
1015     diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
1016     index 34481c9be1d1..6d80067e087f 100644
1017     --- a/drivers/net/bonding/bond_main.c
1018     +++ b/drivers/net/bonding/bond_main.c
1019     @@ -4163,7 +4163,6 @@ static void bond_destructor(struct net_device *bond_dev)
1020     struct bonding *bond = netdev_priv(bond_dev);
1021     if (bond->wq)
1022     destroy_workqueue(bond->wq);
1023     - free_netdev(bond_dev);
1024     }
1025    
1026     void bond_setup(struct net_device *bond_dev)
1027     @@ -4183,7 +4182,8 @@ void bond_setup(struct net_device *bond_dev)
1028     bond_dev->netdev_ops = &bond_netdev_ops;
1029     bond_dev->ethtool_ops = &bond_ethtool_ops;
1030    
1031     - bond_dev->destructor = bond_destructor;
1032     + bond_dev->needs_free_netdev = true;
1033     + bond_dev->priv_destructor = bond_destructor;
1034    
1035     SET_NETDEV_DEVTYPE(bond_dev, &bond_type);
1036    
1037     @@ -4689,7 +4689,7 @@ int bond_create(struct net *net, const char *name)
1038    
1039     rtnl_unlock();
1040     if (res < 0)
1041     - bond_destructor(bond_dev);
1042     + free_netdev(bond_dev);
1043     return res;
1044     }
1045    
1046     diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c
1047     index ddabce759456..71a7c3b44fdd 100644
1048     --- a/drivers/net/caif/caif_hsi.c
1049     +++ b/drivers/net/caif/caif_hsi.c
1050     @@ -1121,7 +1121,7 @@ static void cfhsi_setup(struct net_device *dev)
1051     dev->flags = IFF_POINTOPOINT | IFF_NOARP;
1052     dev->mtu = CFHSI_MAX_CAIF_FRAME_SZ;
1053     dev->priv_flags |= IFF_NO_QUEUE;
1054     - dev->destructor = free_netdev;
1055     + dev->needs_free_netdev = true;
1056     dev->netdev_ops = &cfhsi_netdevops;
1057     for (i = 0; i < CFHSI_PRIO_LAST; ++i)
1058     skb_queue_head_init(&cfhsi->qhead[i]);
1059     diff --git a/drivers/net/caif/caif_serial.c b/drivers/net/caif/caif_serial.c
1060     index c2dea4916e5d..76e1d3545105 100644
1061     --- a/drivers/net/caif/caif_serial.c
1062     +++ b/drivers/net/caif/caif_serial.c
1063     @@ -428,7 +428,7 @@ static void caifdev_setup(struct net_device *dev)
1064     dev->flags = IFF_POINTOPOINT | IFF_NOARP;
1065     dev->mtu = CAIF_MAX_MTU;
1066     dev->priv_flags |= IFF_NO_QUEUE;
1067     - dev->destructor = free_netdev;
1068     + dev->needs_free_netdev = true;
1069     skb_queue_head_init(&serdev->head);
1070     serdev->common.link_select = CAIF_LINK_LOW_LATENCY;
1071     serdev->common.use_frag = true;
1072     diff --git a/drivers/net/caif/caif_spi.c b/drivers/net/caif/caif_spi.c
1073     index 3a529fbe539f..fc21afe852b9 100644
1074     --- a/drivers/net/caif/caif_spi.c
1075     +++ b/drivers/net/caif/caif_spi.c
1076     @@ -712,7 +712,7 @@ static void cfspi_setup(struct net_device *dev)
1077     dev->flags = IFF_NOARP | IFF_POINTOPOINT;
1078     dev->priv_flags |= IFF_NO_QUEUE;
1079     dev->mtu = SPI_MAX_PAYLOAD_SIZE;
1080     - dev->destructor = free_netdev;
1081     + dev->needs_free_netdev = true;
1082     skb_queue_head_init(&cfspi->qhead);
1083     skb_queue_head_init(&cfspi->chead);
1084     cfspi->cfdev.link_select = CAIF_LINK_HIGH_BANDW;
1085     diff --git a/drivers/net/caif/caif_virtio.c b/drivers/net/caif/caif_virtio.c
1086     index bc0eb47eccee..8bffd251165c 100644
1087     --- a/drivers/net/caif/caif_virtio.c
1088     +++ b/drivers/net/caif/caif_virtio.c
1089     @@ -617,7 +617,7 @@ static void cfv_netdev_setup(struct net_device *netdev)
1090     netdev->tx_queue_len = 100;
1091     netdev->flags = IFF_POINTOPOINT | IFF_NOARP;
1092     netdev->mtu = CFV_DEF_MTU_SIZE;
1093     - netdev->destructor = free_netdev;
1094     + netdev->needs_free_netdev = true;
1095     }
1096    
1097     /* Create debugfs counters for the device */
1098     diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c
1099     index eb7173713bbc..6a6e896e52fa 100644
1100     --- a/drivers/net/can/slcan.c
1101     +++ b/drivers/net/can/slcan.c
1102     @@ -417,7 +417,7 @@ static int slc_open(struct net_device *dev)
1103     static void slc_free_netdev(struct net_device *dev)
1104     {
1105     int i = dev->base_addr;
1106     - free_netdev(dev);
1107     +
1108     slcan_devs[i] = NULL;
1109     }
1110    
1111     @@ -436,7 +436,8 @@ static const struct net_device_ops slc_netdev_ops = {
1112     static void slc_setup(struct net_device *dev)
1113     {
1114     dev->netdev_ops = &slc_netdev_ops;
1115     - dev->destructor = slc_free_netdev;
1116     + dev->needs_free_netdev = true;
1117     + dev->priv_destructor = slc_free_netdev;
1118    
1119     dev->hard_header_len = 0;
1120     dev->addr_len = 0;
1121     @@ -761,8 +762,6 @@ static void __exit slcan_exit(void)
1122     if (sl->tty) {
1123     printk(KERN_ERR "%s: tty discipline still running\n",
1124     dev->name);
1125     - /* Intentionally leak the control block. */
1126     - dev->destructor = NULL;
1127     }
1128    
1129     unregister_netdev(dev);
1130     diff --git a/drivers/net/can/vcan.c b/drivers/net/can/vcan.c
1131     index 674f367087c5..25d12099593e 100644
1132     --- a/drivers/net/can/vcan.c
1133     +++ b/drivers/net/can/vcan.c
1134     @@ -160,7 +160,7 @@ static void vcan_setup(struct net_device *dev)
1135     dev->flags |= IFF_ECHO;
1136    
1137     dev->netdev_ops = &vcan_netdev_ops;
1138     - dev->destructor = free_netdev;
1139     + dev->needs_free_netdev = true;
1140     }
1141    
1142     static struct rtnl_link_ops vcan_link_ops __read_mostly = {
1143     diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
1144     index 2c80611b94ae..b66fbe51ceb1 100644
1145     --- a/drivers/net/dummy.c
1146     +++ b/drivers/net/dummy.c
1147     @@ -313,7 +313,6 @@ static void dummy_free_netdev(struct net_device *dev)
1148     struct dummy_priv *priv = netdev_priv(dev);
1149    
1150     kfree(priv->vfinfo);
1151     - free_netdev(dev);
1152     }
1153    
1154     static void dummy_setup(struct net_device *dev)
1155     @@ -323,7 +322,8 @@ static void dummy_setup(struct net_device *dev)
1156     /* Initialize the device structure. */
1157     dev->netdev_ops = &dummy_netdev_ops;
1158     dev->ethtool_ops = &dummy_ethtool_ops;
1159     - dev->destructor = dummy_free_netdev;
1160     + dev->needs_free_netdev = true;
1161     + dev->priv_destructor = dummy_free_netdev;
1162    
1163     /* Fill in device structure with ethernet-generic values. */
1164     dev->flags |= IFF_NOARP;
1165     diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
1166     index 1238c4ec5215..fb0951929be9 100644
1167     --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
1168     +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
1169     @@ -4530,7 +4530,7 @@ static void dummy_setup(struct net_device *dev)
1170     /* Initialize the device structure. */
1171     dev->netdev_ops = &cxgb4_mgmt_netdev_ops;
1172     dev->ethtool_ops = &cxgb4_mgmt_ethtool_ops;
1173     - dev->destructor = free_netdev;
1174     + dev->needs_free_netdev = true;
1175     }
1176    
1177     static int config_mgmt_dev(struct pci_dev *pdev)
1178     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h
1179     index 3d9490cd2db1..8f7108c94802 100644
1180     --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h
1181     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h
1182     @@ -313,13 +313,15 @@ struct mlx5e_dma_info {
1183    
1184     struct mlx5e_rx_am_stats {
1185     int ppms; /* packets per msec */
1186     + int bpms; /* bytes per msec */
1187     int epms; /* events per msec */
1188     };
1189    
1190     struct mlx5e_rx_am_sample {
1191     - ktime_t time;
1192     - unsigned int pkt_ctr;
1193     - u16 event_ctr;
1194     + ktime_t time;
1195     + u32 pkt_ctr;
1196     + u32 byte_ctr;
1197     + u16 event_ctr;
1198     };
1199    
1200     struct mlx5e_rx_am { /* Adaptive Moderation */
1201     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
1202     index 949fbadd7817..aae8b6c0edbd 100644
1203     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
1204     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
1205     @@ -1205,11 +1205,11 @@ static int mlx5e_get_ts_info(struct net_device *dev,
1206     SOF_TIMESTAMPING_RX_HARDWARE |
1207     SOF_TIMESTAMPING_RAW_HARDWARE;
1208    
1209     - info->tx_types = (BIT(1) << HWTSTAMP_TX_OFF) |
1210     - (BIT(1) << HWTSTAMP_TX_ON);
1211     + info->tx_types = BIT(HWTSTAMP_TX_OFF) |
1212     + BIT(HWTSTAMP_TX_ON);
1213    
1214     - info->rx_filters = (BIT(1) << HWTSTAMP_FILTER_NONE) |
1215     - (BIT(1) << HWTSTAMP_FILTER_ALL);
1216     + info->rx_filters = BIT(HWTSTAMP_FILTER_NONE) |
1217     + BIT(HWTSTAMP_FILTER_ALL);
1218    
1219     return 0;
1220     }
1221     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
1222     index 15cc7b469d2e..f778436a2d28 100644
1223     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
1224     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
1225     @@ -3885,7 +3885,8 @@ struct net_device *mlx5e_create_netdev(struct mlx5_core_dev *mdev,
1226     return netdev;
1227    
1228     err_cleanup_nic:
1229     - profile->cleanup(priv);
1230     + if (profile->cleanup)
1231     + profile->cleanup(priv);
1232     free_netdev(netdev);
1233    
1234     return NULL;
1235     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
1236     index f621373bd7a5..4be6b346f14a 100644
1237     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
1238     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
1239     @@ -424,6 +424,8 @@ static void mlx5e_build_rep_netdev_priv(struct mlx5_core_dev *mdev,
1240     priv->params.lro_wqe_sz =
1241     MLX5E_PARAMS_DEFAULT_LRO_WQE_SZ;
1242    
1243     + mlx5_query_min_inline(mdev, &priv->params.tx_min_inline_mode);
1244     +
1245     priv->mdev = mdev;
1246     priv->netdev = netdev;
1247     priv->params.num_channels = profile->max_nch(mdev);
1248     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c
1249     index cbfac06b7ffd..23ccec4cb7f5 100644
1250     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c
1251     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx_am.c
1252     @@ -183,28 +183,27 @@ static void mlx5e_am_exit_parking(struct mlx5e_rx_am *am)
1253     mlx5e_am_step(am);
1254     }
1255    
1256     +#define IS_SIGNIFICANT_DIFF(val, ref) \
1257     + (((100 * abs((val) - (ref))) / (ref)) > 10) /* more than 10% difference */
1258     +
1259     static int mlx5e_am_stats_compare(struct mlx5e_rx_am_stats *curr,
1260     struct mlx5e_rx_am_stats *prev)
1261     {
1262     - int diff;
1263     -
1264     - if (!prev->ppms)
1265     - return curr->ppms ? MLX5E_AM_STATS_BETTER :
1266     + if (!prev->bpms)
1267     + return curr->bpms ? MLX5E_AM_STATS_BETTER :
1268     MLX5E_AM_STATS_SAME;
1269    
1270     - diff = curr->ppms - prev->ppms;
1271     - if (((100 * abs(diff)) / prev->ppms) > 10) /* more than 10% diff */
1272     - return (diff > 0) ? MLX5E_AM_STATS_BETTER :
1273     - MLX5E_AM_STATS_WORSE;
1274     + if (IS_SIGNIFICANT_DIFF(curr->bpms, prev->bpms))
1275     + return (curr->bpms > prev->bpms) ? MLX5E_AM_STATS_BETTER :
1276     + MLX5E_AM_STATS_WORSE;
1277    
1278     - if (!prev->epms)
1279     - return curr->epms ? MLX5E_AM_STATS_WORSE :
1280     - MLX5E_AM_STATS_SAME;
1281     + if (IS_SIGNIFICANT_DIFF(curr->ppms, prev->ppms))
1282     + return (curr->ppms > prev->ppms) ? MLX5E_AM_STATS_BETTER :
1283     + MLX5E_AM_STATS_WORSE;
1284    
1285     - diff = curr->epms - prev->epms;
1286     - if (((100 * abs(diff)) / prev->epms) > 10) /* more than 10% diff */
1287     - return (diff < 0) ? MLX5E_AM_STATS_BETTER :
1288     - MLX5E_AM_STATS_WORSE;
1289     + if (IS_SIGNIFICANT_DIFF(curr->epms, prev->epms))
1290     + return (curr->epms < prev->epms) ? MLX5E_AM_STATS_BETTER :
1291     + MLX5E_AM_STATS_WORSE;
1292    
1293     return MLX5E_AM_STATS_SAME;
1294     }
1295     @@ -266,10 +265,13 @@ static void mlx5e_am_sample(struct mlx5e_rq *rq,
1296     {
1297     s->time = ktime_get();
1298     s->pkt_ctr = rq->stats.packets;
1299     + s->byte_ctr = rq->stats.bytes;
1300     s->event_ctr = rq->cq.event_ctr;
1301     }
1302    
1303     #define MLX5E_AM_NEVENTS 64
1304     +#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
1305     +#define BIT_GAP(bits, end, start) ((((end) - (start)) + BIT_ULL(bits)) & (BIT_ULL(bits) - 1))
1306    
1307     static void mlx5e_am_calc_stats(struct mlx5e_rx_am_sample *start,
1308     struct mlx5e_rx_am_sample *end,
1309     @@ -277,13 +279,17 @@ static void mlx5e_am_calc_stats(struct mlx5e_rx_am_sample *start,
1310     {
1311     /* u32 holds up to 71 minutes, should be enough */
1312     u32 delta_us = ktime_us_delta(end->time, start->time);
1313     - unsigned int npkts = end->pkt_ctr - start->pkt_ctr;
1314     + u32 npkts = BIT_GAP(BITS_PER_TYPE(u32), end->pkt_ctr, start->pkt_ctr);
1315     + u32 nbytes = BIT_GAP(BITS_PER_TYPE(u32), end->byte_ctr,
1316     + start->byte_ctr);
1317    
1318     if (!delta_us)
1319     return;
1320    
1321     - curr_stats->ppms = (npkts * USEC_PER_MSEC) / delta_us;
1322     - curr_stats->epms = (MLX5E_AM_NEVENTS * USEC_PER_MSEC) / delta_us;
1323     + curr_stats->ppms = DIV_ROUND_UP(npkts * USEC_PER_MSEC, delta_us);
1324     + curr_stats->bpms = DIV_ROUND_UP(nbytes * USEC_PER_MSEC, delta_us);
1325     + curr_stats->epms = DIV_ROUND_UP(MLX5E_AM_NEVENTS * USEC_PER_MSEC,
1326     + delta_us);
1327     }
1328    
1329     void mlx5e_rx_am_work(struct work_struct *work)
1330     @@ -308,7 +314,8 @@ void mlx5e_rx_am(struct mlx5e_rq *rq)
1331    
1332     switch (am->state) {
1333     case MLX5E_AM_MEASURE_IN_PROGRESS:
1334     - nevents = rq->cq.event_ctr - am->start_sample.event_ctr;
1335     + nevents = BIT_GAP(BITS_PER_TYPE(u16), rq->cq.event_ctr,
1336     + am->start_sample.event_ctr);
1337     if (nevents < MLX5E_AM_NEVENTS)
1338     break;
1339     mlx5e_am_sample(rq, &end_sample);
1340     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
1341     index 53e4992d6511..f81c3aa60b46 100644
1342     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
1343     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h
1344     @@ -417,20 +417,13 @@ struct mlx5e_stats {
1345     };
1346    
1347     static const struct counter_desc mlx5e_pme_status_desc[] = {
1348     - { "module_plug", 0 },
1349     { "module_unplug", 8 },
1350     };
1351    
1352     static const struct counter_desc mlx5e_pme_error_desc[] = {
1353     - { "module_pwr_budget_exd", 0 }, /* power budget exceed */
1354     - { "module_long_range", 8 }, /* long range for non MLNX cable */
1355     - { "module_bus_stuck", 16 }, /* bus stuck (I2C or data shorted) */
1356     - { "module_no_eeprom", 24 }, /* no eeprom/retry time out */
1357     - { "module_enforce_part", 32 }, /* enforce part number list */
1358     - { "module_unknown_id", 40 }, /* unknown identifier */
1359     - { "module_high_temp", 48 }, /* high temperature */
1360     + { "module_bus_stuck", 16 }, /* bus stuck (I2C or data shorted) */
1361     + { "module_high_temp", 48 }, /* high temperature */
1362     { "module_bad_shorted", 56 }, /* bad or shorted cable/module */
1363     - { "module_unknown_status", 64 },
1364     };
1365    
1366     #endif /* __MLX5_EN_STATS_H__ */
1367     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/main.c b/drivers/net/ethernet/mellanox/mlx5/core/main.c
1368     index 0ad66324247f..9862a741b32a 100644
1369     --- a/drivers/net/ethernet/mellanox/mlx5/core/main.c
1370     +++ b/drivers/net/ethernet/mellanox/mlx5/core/main.c
1371     @@ -175,8 +175,9 @@ static struct mlx5_profile profile[] = {
1372     },
1373     };
1374    
1375     -#define FW_INIT_TIMEOUT_MILI 2000
1376     -#define FW_INIT_WAIT_MS 2
1377     +#define FW_INIT_TIMEOUT_MILI 2000
1378     +#define FW_INIT_WAIT_MS 2
1379     +#define FW_PRE_INIT_TIMEOUT_MILI 10000
1380    
1381     static int wait_fw_init(struct mlx5_core_dev *dev, u32 max_wait_mili)
1382     {
1383     @@ -537,8 +538,10 @@ static int handle_hca_cap(struct mlx5_core_dev *dev)
1384     /* disable cmdif checksum */
1385     MLX5_SET(cmd_hca_cap, set_hca_cap, cmdif_checksum, 0);
1386    
1387     - /* If the HCA supports 4K UARs use it */
1388     - if (MLX5_CAP_GEN_MAX(dev, uar_4k))
1389     + /* Enable 4K UAR only when HCA supports it and page size is bigger
1390     + * than 4K.
1391     + */
1392     + if (MLX5_CAP_GEN_MAX(dev, uar_4k) && PAGE_SIZE > 4096)
1393     MLX5_SET(cmd_hca_cap, set_hca_cap, uar_4k, 1);
1394    
1395     MLX5_SET(cmd_hca_cap, set_hca_cap, log_uar_page_sz, PAGE_SHIFT - 12);
1396     @@ -1019,6 +1022,15 @@ static int mlx5_load_one(struct mlx5_core_dev *dev, struct mlx5_priv *priv,
1397     */
1398     dev->state = MLX5_DEVICE_STATE_UP;
1399    
1400     + /* wait for firmware to accept initialization segments configurations
1401     + */
1402     + err = wait_fw_init(dev, FW_PRE_INIT_TIMEOUT_MILI);
1403     + if (err) {
1404     + dev_err(&dev->pdev->dev, "Firmware over %d MS in pre-initializing state, aborting\n",
1405     + FW_PRE_INIT_TIMEOUT_MILI);
1406     + goto out;
1407     + }
1408     +
1409     err = mlx5_cmd_init(dev);
1410     if (err) {
1411     dev_err(&pdev->dev, "Failed initializing command interface, aborting\n");
1412     diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c
1413     index 6ebb0f559a42..199459bd6961 100644
1414     --- a/drivers/net/geneve.c
1415     +++ b/drivers/net/geneve.c
1416     @@ -1007,7 +1007,7 @@ static void geneve_setup(struct net_device *dev)
1417    
1418     dev->netdev_ops = &geneve_netdev_ops;
1419     dev->ethtool_ops = &geneve_ethtool_ops;
1420     - dev->destructor = free_netdev;
1421     + dev->needs_free_netdev = true;
1422    
1423     SET_NETDEV_DEVTYPE(dev, &geneve_type);
1424    
1425     diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
1426     index 89698741682f..429387083dce 100644
1427     --- a/drivers/net/gtp.c
1428     +++ b/drivers/net/gtp.c
1429     @@ -618,7 +618,7 @@ static const struct net_device_ops gtp_netdev_ops = {
1430     static void gtp_link_setup(struct net_device *dev)
1431     {
1432     dev->netdev_ops = &gtp_netdev_ops;
1433     - dev->destructor = free_netdev;
1434     + dev->needs_free_netdev = true;
1435    
1436     dev->hard_header_len = 0;
1437     dev->addr_len = 0;
1438     diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c
1439     index 922bf440e9f1..021a8ec411ab 100644
1440     --- a/drivers/net/hamradio/6pack.c
1441     +++ b/drivers/net/hamradio/6pack.c
1442     @@ -311,7 +311,7 @@ static void sp_setup(struct net_device *dev)
1443     {
1444     /* Finish setting up the DEVICE info. */
1445     dev->netdev_ops = &sp_netdev_ops;
1446     - dev->destructor = free_netdev;
1447     + dev->needs_free_netdev = true;
1448     dev->mtu = SIXP_MTU;
1449     dev->hard_header_len = AX25_MAX_HEADER_LEN;
1450     dev->header_ops = &ax25_header_ops;
1451     diff --git a/drivers/net/hamradio/bpqether.c b/drivers/net/hamradio/bpqether.c
1452     index f62e7f325cf9..78a6414c5fd9 100644
1453     --- a/drivers/net/hamradio/bpqether.c
1454     +++ b/drivers/net/hamradio/bpqether.c
1455     @@ -476,7 +476,7 @@ static const struct net_device_ops bpq_netdev_ops = {
1456     static void bpq_setup(struct net_device *dev)
1457     {
1458     dev->netdev_ops = &bpq_netdev_ops;
1459     - dev->destructor = free_netdev;
1460     + dev->needs_free_netdev = true;
1461    
1462     memcpy(dev->broadcast, &ax25_bcast, AX25_ADDR_LEN);
1463     memcpy(dev->dev_addr, &ax25_defaddr, AX25_ADDR_LEN);
1464     diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
1465     index 312fce7302d3..144ea5ae8ab4 100644
1466     --- a/drivers/net/ifb.c
1467     +++ b/drivers/net/ifb.c
1468     @@ -207,7 +207,6 @@ static void ifb_dev_free(struct net_device *dev)
1469     __skb_queue_purge(&txp->tq);
1470     }
1471     kfree(dp->tx_private);
1472     - free_netdev(dev);
1473     }
1474    
1475     static void ifb_setup(struct net_device *dev)
1476     @@ -230,7 +229,8 @@ static void ifb_setup(struct net_device *dev)
1477     dev->priv_flags &= ~IFF_TX_SKB_SHARING;
1478     netif_keep_dst(dev);
1479     eth_hw_addr_random(dev);
1480     - dev->destructor = ifb_dev_free;
1481     + dev->needs_free_netdev = true;
1482     + dev->priv_destructor = ifb_dev_free;
1483     }
1484    
1485     static netdev_tx_t ifb_xmit(struct sk_buff *skb, struct net_device *dev)
1486     diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
1487     index aa8575ccbce3..48e6c4e4914e 100644
1488     --- a/drivers/net/ipvlan/ipvlan_main.c
1489     +++ b/drivers/net/ipvlan/ipvlan_main.c
1490     @@ -621,7 +621,7 @@ void ipvlan_link_setup(struct net_device *dev)
1491     dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING);
1492     dev->priv_flags |= IFF_UNICAST_FLT | IFF_NO_QUEUE;
1493     dev->netdev_ops = &ipvlan_netdev_ops;
1494     - dev->destructor = free_netdev;
1495     + dev->needs_free_netdev = true;
1496     dev->header_ops = &ipvlan_header_ops;
1497     dev->ethtool_ops = &ipvlan_ethtool_ops;
1498     }
1499     diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c
1500     index b23b71981fd5..80e3ace493cd 100644
1501     --- a/drivers/net/loopback.c
1502     +++ b/drivers/net/loopback.c
1503     @@ -145,7 +145,6 @@ static void loopback_dev_free(struct net_device *dev)
1504     {
1505     dev_net(dev)->loopback_dev = NULL;
1506     free_percpu(dev->lstats);
1507     - free_netdev(dev);
1508     }
1509    
1510     static const struct net_device_ops loopback_ops = {
1511     @@ -183,7 +182,8 @@ static void loopback_setup(struct net_device *dev)
1512     dev->ethtool_ops = &loopback_ethtool_ops;
1513     dev->header_ops = &eth_header_ops;
1514     dev->netdev_ops = &loopback_ops;
1515     - dev->destructor = loopback_dev_free;
1516     + dev->needs_free_netdev = true;
1517     + dev->priv_destructor = loopback_dev_free;
1518     }
1519    
1520     /* Setup and register the loopback device. */
1521     diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
1522     index 49ce4e9f4a0f..43f3e1b2d3ca 100644
1523     --- a/drivers/net/macsec.c
1524     +++ b/drivers/net/macsec.c
1525     @@ -2994,7 +2994,6 @@ static void macsec_free_netdev(struct net_device *dev)
1526     free_percpu(macsec->secy.tx_sc.stats);
1527    
1528     dev_put(real_dev);
1529     - free_netdev(dev);
1530     }
1531    
1532     static void macsec_setup(struct net_device *dev)
1533     @@ -3004,7 +3003,8 @@ static void macsec_setup(struct net_device *dev)
1534     dev->max_mtu = ETH_MAX_MTU;
1535     dev->priv_flags |= IFF_NO_QUEUE;
1536     dev->netdev_ops = &macsec_netdev_ops;
1537     - dev->destructor = macsec_free_netdev;
1538     + dev->needs_free_netdev = true;
1539     + dev->priv_destructor = macsec_free_netdev;
1540     SET_NETDEV_DEVTYPE(dev, &macsec_type);
1541    
1542     eth_zero_addr(dev->broadcast);
1543     diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
1544     index b34eaaae03fd..b8cec52547d7 100644
1545     --- a/drivers/net/macvlan.c
1546     +++ b/drivers/net/macvlan.c
1547     @@ -1089,7 +1089,7 @@ void macvlan_common_setup(struct net_device *dev)
1548     netif_keep_dst(dev);
1549     dev->priv_flags |= IFF_UNICAST_FLT;
1550     dev->netdev_ops = &macvlan_netdev_ops;
1551     - dev->destructor = free_netdev;
1552     + dev->needs_free_netdev = true;
1553     dev->header_ops = &macvlan_hard_header_ops;
1554     dev->ethtool_ops = &macvlan_ethtool_ops;
1555     }
1556     diff --git a/drivers/net/nlmon.c b/drivers/net/nlmon.c
1557     index b91603835d26..c4b3362da4a2 100644
1558     --- a/drivers/net/nlmon.c
1559     +++ b/drivers/net/nlmon.c
1560     @@ -113,7 +113,7 @@ static void nlmon_setup(struct net_device *dev)
1561    
1562     dev->netdev_ops = &nlmon_ops;
1563     dev->ethtool_ops = &nlmon_ethtool_ops;
1564     - dev->destructor = free_netdev;
1565     + dev->needs_free_netdev = true;
1566    
1567     dev->features = NETIF_F_SG | NETIF_F_FRAGLIST |
1568     NETIF_F_HIGHDMA | NETIF_F_LLTX;
1569     diff --git a/drivers/net/slip/slip.c b/drivers/net/slip/slip.c
1570     index 1da31dc47f86..74b907206aa7 100644
1571     --- a/drivers/net/slip/slip.c
1572     +++ b/drivers/net/slip/slip.c
1573     @@ -629,7 +629,7 @@ static void sl_uninit(struct net_device *dev)
1574     static void sl_free_netdev(struct net_device *dev)
1575     {
1576     int i = dev->base_addr;
1577     - free_netdev(dev);
1578     +
1579     slip_devs[i] = NULL;
1580     }
1581    
1582     @@ -651,7 +651,8 @@ static const struct net_device_ops sl_netdev_ops = {
1583     static void sl_setup(struct net_device *dev)
1584     {
1585     dev->netdev_ops = &sl_netdev_ops;
1586     - dev->destructor = sl_free_netdev;
1587     + dev->needs_free_netdev = true;
1588     + dev->priv_destructor = sl_free_netdev;
1589    
1590     dev->hard_header_len = 0;
1591     dev->addr_len = 0;
1592     @@ -1369,8 +1370,6 @@ static void __exit slip_exit(void)
1593     if (sl->tty) {
1594     printk(KERN_ERR "%s: tty discipline still running\n",
1595     dev->name);
1596     - /* Intentionally leak the control block. */
1597     - dev->destructor = NULL;
1598     }
1599    
1600     unregister_netdev(dev);
1601     diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
1602     index 85c01247f2e3..eaa6ee762230 100644
1603     --- a/drivers/net/team/team.c
1604     +++ b/drivers/net/team/team.c
1605     @@ -1643,7 +1643,6 @@ static void team_destructor(struct net_device *dev)
1606     struct team *team = netdev_priv(dev);
1607    
1608     free_percpu(team->pcpu_stats);
1609     - free_netdev(dev);
1610     }
1611    
1612     static int team_open(struct net_device *dev)
1613     @@ -2079,7 +2078,8 @@ static void team_setup(struct net_device *dev)
1614    
1615     dev->netdev_ops = &team_netdev_ops;
1616     dev->ethtool_ops = &team_ethtool_ops;
1617     - dev->destructor = team_destructor;
1618     + dev->needs_free_netdev = true;
1619     + dev->priv_destructor = team_destructor;
1620     dev->priv_flags &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING);
1621     dev->priv_flags |= IFF_NO_QUEUE;
1622     dev->priv_flags |= IFF_TEAM;
1623     diff --git a/drivers/net/tun.c b/drivers/net/tun.c
1624     index cc88cd7856f5..7f3db4963fdd 100644
1625     --- a/drivers/net/tun.c
1626     +++ b/drivers/net/tun.c
1627     @@ -1560,7 +1560,6 @@ static void tun_free_netdev(struct net_device *dev)
1628     free_percpu(tun->pcpu_stats);
1629     tun_flow_uninit(tun);
1630     security_tun_dev_free_security(tun->security);
1631     - free_netdev(dev);
1632     }
1633    
1634     static void tun_setup(struct net_device *dev)
1635     @@ -1571,7 +1570,8 @@ static void tun_setup(struct net_device *dev)
1636     tun->group = INVALID_GID;
1637    
1638     dev->ethtool_ops = &tun_ethtool_ops;
1639     - dev->destructor = tun_free_netdev;
1640     + dev->needs_free_netdev = true;
1641     + dev->priv_destructor = tun_free_netdev;
1642     /* We prefer our own queue length */
1643     dev->tx_queue_len = TUN_READQ_SIZE;
1644     }
1645     diff --git a/drivers/net/usb/cdc-phonet.c b/drivers/net/usb/cdc-phonet.c
1646     index eb52de8205f0..c7a350bbaaa7 100644
1647     --- a/drivers/net/usb/cdc-phonet.c
1648     +++ b/drivers/net/usb/cdc-phonet.c
1649     @@ -298,7 +298,7 @@ static void usbpn_setup(struct net_device *dev)
1650     dev->addr_len = 1;
1651     dev->tx_queue_len = 3;
1652    
1653     - dev->destructor = free_netdev;
1654     + dev->needs_free_netdev = true;
1655     }
1656    
1657     /*
1658     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
1659     index 87746c2bc3d3..d4c8c96bc770 100644
1660     --- a/drivers/net/usb/qmi_wwan.c
1661     +++ b/drivers/net/usb/qmi_wwan.c
1662     @@ -898,6 +898,8 @@ static const struct usb_device_id products[] = {
1663     {QMI_FIXED_INTF(0x1199, 0x9056, 8)}, /* Sierra Wireless Modem */
1664     {QMI_FIXED_INTF(0x1199, 0x9057, 8)},
1665     {QMI_FIXED_INTF(0x1199, 0x9061, 8)}, /* Sierra Wireless Modem */
1666     + {QMI_FIXED_INTF(0x1199, 0x9063, 8)}, /* Sierra Wireless EM7305 */
1667     + {QMI_FIXED_INTF(0x1199, 0x9063, 10)}, /* Sierra Wireless EM7305 */
1668     {QMI_FIXED_INTF(0x1199, 0x9071, 8)}, /* Sierra Wireless MC74xx */
1669     {QMI_FIXED_INTF(0x1199, 0x9071, 10)}, /* Sierra Wireless MC74xx */
1670     {QMI_FIXED_INTF(0x1199, 0x9079, 8)}, /* Sierra Wireless EM74xx */
1671     @@ -912,6 +914,8 @@ static const struct usb_device_id products[] = {
1672     {QMI_FIXED_INTF(0x1bc7, 0x1100, 3)}, /* Telit ME910 */
1673     {QMI_FIXED_INTF(0x1bc7, 0x1200, 5)}, /* Telit LE920 */
1674     {QMI_QUIRK_SET_DTR(0x1bc7, 0x1201, 2)}, /* Telit LE920, LE920A4 */
1675     + {QMI_FIXED_INTF(0x1c9e, 0x9801, 3)}, /* Telewell TW-3G HSPA+ */
1676     + {QMI_FIXED_INTF(0x1c9e, 0x9803, 4)}, /* Telewell TW-3G HSPA+ */
1677     {QMI_FIXED_INTF(0x1c9e, 0x9b01, 3)}, /* XS Stick W100-2 from 4G Systems */
1678     {QMI_FIXED_INTF(0x0b3c, 0xc000, 4)}, /* Olivetti Olicard 100 */
1679     {QMI_FIXED_INTF(0x0b3c, 0xc001, 4)}, /* Olivetti Olicard 120 */
1680     diff --git a/drivers/net/veth.c b/drivers/net/veth.c
1681     index 8c39d6d690e5..2efbe98d0c67 100644
1682     --- a/drivers/net/veth.c
1683     +++ b/drivers/net/veth.c
1684     @@ -227,7 +227,6 @@ static int veth_dev_init(struct net_device *dev)
1685     static void veth_dev_free(struct net_device *dev)
1686     {
1687     free_percpu(dev->vstats);
1688     - free_netdev(dev);
1689     }
1690    
1691     #ifdef CONFIG_NET_POLL_CONTROLLER
1692     @@ -322,7 +321,8 @@ static void veth_setup(struct net_device *dev)
1693     NETIF_F_HW_VLAN_STAG_TX |
1694     NETIF_F_HW_VLAN_CTAG_RX |
1695     NETIF_F_HW_VLAN_STAG_RX);
1696     - dev->destructor = veth_dev_free;
1697     + dev->needs_free_netdev = true;
1698     + dev->priv_destructor = veth_dev_free;
1699     dev->max_mtu = ETH_MAX_MTU;
1700    
1701     dev->hw_features = VETH_FEATURES;
1702     diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
1703     index df74efcf237b..2e62c4d1b220 100644
1704     --- a/drivers/net/vrf.c
1705     +++ b/drivers/net/vrf.c
1706     @@ -36,12 +36,14 @@
1707     #include <net/addrconf.h>
1708     #include <net/l3mdev.h>
1709     #include <net/fib_rules.h>
1710     +#include <net/netns/generic.h>
1711    
1712     #define DRV_NAME "vrf"
1713     #define DRV_VERSION "1.0"
1714    
1715     #define FIB_RULE_PREF 1000 /* default preference for FIB rules */
1716     -static bool add_fib_rules = true;
1717     +
1718     +static unsigned int vrf_net_id;
1719    
1720     struct net_vrf {
1721     struct rtable __rcu *rth;
1722     @@ -1206,7 +1208,7 @@ static void vrf_setup(struct net_device *dev)
1723     dev->netdev_ops = &vrf_netdev_ops;
1724     dev->l3mdev_ops = &vrf_l3mdev_ops;
1725     dev->ethtool_ops = &vrf_ethtool_ops;
1726     - dev->destructor = free_netdev;
1727     + dev->needs_free_netdev = true;
1728    
1729     /* Fill in device structure with ethernet-generic values. */
1730     eth_hw_addr_random(dev);
1731     @@ -1252,6 +1254,8 @@ static int vrf_newlink(struct net *src_net, struct net_device *dev,
1732     struct nlattr *tb[], struct nlattr *data[])
1733     {
1734     struct net_vrf *vrf = netdev_priv(dev);
1735     + bool *add_fib_rules;
1736     + struct net *net;
1737     int err;
1738    
1739     if (!data || !data[IFLA_VRF_TABLE])
1740     @@ -1267,13 +1271,15 @@ static int vrf_newlink(struct net *src_net, struct net_device *dev,
1741     if (err)
1742     goto out;
1743    
1744     - if (add_fib_rules) {
1745     + net = dev_net(dev);
1746     + add_fib_rules = net_generic(net, vrf_net_id);
1747     + if (*add_fib_rules) {
1748     err = vrf_add_fib_rules(dev);
1749     if (err) {
1750     unregister_netdevice(dev);
1751     goto out;
1752     }
1753     - add_fib_rules = false;
1754     + *add_fib_rules = false;
1755     }
1756    
1757     out:
1758     @@ -1356,16 +1362,38 @@ static struct notifier_block vrf_notifier_block __read_mostly = {
1759     .notifier_call = vrf_device_event,
1760     };
1761    
1762     +/* Initialize per network namespace state */
1763     +static int __net_init vrf_netns_init(struct net *net)
1764     +{
1765     + bool *add_fib_rules = net_generic(net, vrf_net_id);
1766     +
1767     + *add_fib_rules = true;
1768     +
1769     + return 0;
1770     +}
1771     +
1772     +static struct pernet_operations vrf_net_ops __net_initdata = {
1773     + .init = vrf_netns_init,
1774     + .id = &vrf_net_id,
1775     + .size = sizeof(bool),
1776     +};
1777     +
1778     static int __init vrf_init_module(void)
1779     {
1780     int rc;
1781    
1782     register_netdevice_notifier(&vrf_notifier_block);
1783    
1784     - rc = rtnl_link_register(&vrf_link_ops);
1785     + rc = register_pernet_subsys(&vrf_net_ops);
1786     if (rc < 0)
1787     goto error;
1788    
1789     + rc = rtnl_link_register(&vrf_link_ops);
1790     + if (rc < 0) {
1791     + unregister_pernet_subsys(&vrf_net_ops);
1792     + goto error;
1793     + }
1794     +
1795     return 0;
1796    
1797     error:
1798     diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
1799     index 70dbd5a48b6b..4574b95c7938 100644
1800     --- a/drivers/net/vxlan.c
1801     +++ b/drivers/net/vxlan.c
1802     @@ -2607,7 +2607,7 @@ static void vxlan_setup(struct net_device *dev)
1803     eth_hw_addr_random(dev);
1804     ether_setup(dev);
1805    
1806     - dev->destructor = free_netdev;
1807     + dev->needs_free_netdev = true;
1808     SET_NETDEV_DEVTYPE(dev, &vxlan_type);
1809    
1810     dev->features |= NETIF_F_LLTX;
1811     diff --git a/drivers/net/wan/dlci.c b/drivers/net/wan/dlci.c
1812     index 65ee2a6f248c..a0d76f70c428 100644
1813     --- a/drivers/net/wan/dlci.c
1814     +++ b/drivers/net/wan/dlci.c
1815     @@ -475,7 +475,7 @@ static void dlci_setup(struct net_device *dev)
1816     dev->flags = 0;
1817     dev->header_ops = &dlci_header_ops;
1818     dev->netdev_ops = &dlci_netdev_ops;
1819     - dev->destructor = free_netdev;
1820     + dev->needs_free_netdev = true;
1821    
1822     dlp->receive = dlci_receive;
1823    
1824     diff --git a/drivers/net/wan/hdlc_fr.c b/drivers/net/wan/hdlc_fr.c
1825     index eb915281197e..78596e42a3f3 100644
1826     --- a/drivers/net/wan/hdlc_fr.c
1827     +++ b/drivers/net/wan/hdlc_fr.c
1828     @@ -1106,7 +1106,7 @@ static int fr_add_pvc(struct net_device *frad, unsigned int dlci, int type)
1829     return -EIO;
1830     }
1831    
1832     - dev->destructor = free_netdev;
1833     + dev->needs_free_netdev = true;
1834     *get_dev_p(pvc, type) = dev;
1835     if (!used) {
1836     state(hdlc)->dce_changed = 1;
1837     diff --git a/drivers/net/wan/lapbether.c b/drivers/net/wan/lapbether.c
1838     index 9df9ed62beff..63f749078a1f 100644
1839     --- a/drivers/net/wan/lapbether.c
1840     +++ b/drivers/net/wan/lapbether.c
1841     @@ -306,7 +306,7 @@ static const struct net_device_ops lapbeth_netdev_ops = {
1842     static void lapbeth_setup(struct net_device *dev)
1843     {
1844     dev->netdev_ops = &lapbeth_netdev_ops;
1845     - dev->destructor = free_netdev;
1846     + dev->needs_free_netdev = true;
1847     dev->type = ARPHRD_X25;
1848     dev->hard_header_len = 3;
1849     dev->mtu = 1000;
1850     diff --git a/drivers/net/wireless/ath/ath6kl/main.c b/drivers/net/wireless/ath/ath6kl/main.c
1851     index 91ee542de3d7..b90c77ef792e 100644
1852     --- a/drivers/net/wireless/ath/ath6kl/main.c
1853     +++ b/drivers/net/wireless/ath/ath6kl/main.c
1854     @@ -1287,7 +1287,7 @@ void init_netdev(struct net_device *dev)
1855     struct ath6kl *ar = ath6kl_priv(dev);
1856    
1857     dev->netdev_ops = &ath6kl_netdev_ops;
1858     - dev->destructor = free_netdev;
1859     + dev->needs_free_netdev = true;
1860     dev->watchdog_timeo = ATH6KL_TX_TIMEOUT;
1861    
1862     dev->needed_headroom = ETH_HLEN;
1863     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
1864     index 944b83cfc519..017e20b34304 100644
1865     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
1866     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
1867     @@ -5209,7 +5209,6 @@ void brcmf_cfg80211_free_netdev(struct net_device *ndev)
1868    
1869     if (vif)
1870     brcmf_free_vif(vif);
1871     - free_netdev(ndev);
1872     }
1873    
1874     static bool brcmf_is_linkup(const struct brcmf_event_msg *e)
1875     diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
1876     index f6b17fb58877..d02e7f6ec4e0 100644
1877     --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
1878     +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
1879     @@ -652,7 +652,8 @@ struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bsscfgidx, s32 ifidx,
1880     if (!ndev)
1881     return ERR_PTR(-ENOMEM);
1882    
1883     - ndev->destructor = brcmf_cfg80211_free_netdev;
1884     + ndev->needs_free_netdev = true;
1885     + ndev->priv_destructor = brcmf_cfg80211_free_netdev;
1886     ifp = netdev_priv(ndev);
1887     ifp->ndev = ndev;
1888     /* store mapping ifidx to bsscfgidx */
1889     diff --git a/drivers/net/wireless/intersil/hostap/hostap_main.c b/drivers/net/wireless/intersil/hostap/hostap_main.c
1890     index 544fc09dcb62..1372b20f931e 100644
1891     --- a/drivers/net/wireless/intersil/hostap/hostap_main.c
1892     +++ b/drivers/net/wireless/intersil/hostap/hostap_main.c
1893     @@ -73,7 +73,7 @@ struct net_device * hostap_add_interface(struct local_info *local,
1894     dev->mem_end = mdev->mem_end;
1895    
1896     hostap_setup_dev(dev, local, type);
1897     - dev->destructor = free_netdev;
1898     + dev->needs_free_netdev = true;
1899    
1900     sprintf(dev->name, "%s%s", prefix, name);
1901     if (!rtnl_locked)
1902     diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
1903     index 50c219fb1a52..2aa5cc6e34ef 100644
1904     --- a/drivers/net/wireless/mac80211_hwsim.c
1905     +++ b/drivers/net/wireless/mac80211_hwsim.c
1906     @@ -2807,7 +2807,7 @@ static const struct net_device_ops hwsim_netdev_ops = {
1907     static void hwsim_mon_setup(struct net_device *dev)
1908     {
1909     dev->netdev_ops = &hwsim_netdev_ops;
1910     - dev->destructor = free_netdev;
1911     + dev->needs_free_netdev = true;
1912     ether_setup(dev);
1913     dev->priv_flags |= IFF_NO_QUEUE;
1914     dev->type = ARPHRD_IEEE80211_RADIOTAP;
1915     diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
1916     index b62e03d11c2e..46073bb554dd 100644
1917     --- a/drivers/net/wireless/marvell/mwifiex/main.c
1918     +++ b/drivers/net/wireless/marvell/mwifiex/main.c
1919     @@ -1277,7 +1277,7 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
1920     struct net_device *dev)
1921     {
1922     dev->netdev_ops = &mwifiex_netdev_ops;
1923     - dev->destructor = free_netdev;
1924     + dev->needs_free_netdev = true;
1925     /* Initialize private structure */
1926     priv->current_key_index = 0;
1927     priv->media_connected = false;
1928     diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
1929     index d69e357a7a98..d8e81045cffe 100644
1930     --- a/drivers/pinctrl/pinctrl-amd.c
1931     +++ b/drivers/pinctrl/pinctrl-amd.c
1932     @@ -495,64 +495,54 @@ static struct irq_chip amd_gpio_irqchip = {
1933     .flags = IRQCHIP_SKIP_SET_WAKE,
1934     };
1935    
1936     -static void amd_gpio_irq_handler(struct irq_desc *desc)
1937     +#define PIN_IRQ_PENDING (BIT(INTERRUPT_STS_OFF) | BIT(WAKE_STS_OFF))
1938     +
1939     +static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)
1940     {
1941     - u32 i;
1942     - u32 off;
1943     - u32 reg;
1944     - u32 pin_reg;
1945     - u64 reg64;
1946     - int handled = 0;
1947     - unsigned int irq;
1948     + struct amd_gpio *gpio_dev = dev_id;
1949     + struct gpio_chip *gc = &gpio_dev->gc;
1950     + irqreturn_t ret = IRQ_NONE;
1951     + unsigned int i, irqnr;
1952     unsigned long flags;
1953     - struct irq_chip *chip = irq_desc_get_chip(desc);
1954     - struct gpio_chip *gc = irq_desc_get_handler_data(desc);
1955     - struct amd_gpio *gpio_dev = gpiochip_get_data(gc);
1956     + u32 *regs, regval;
1957     + u64 status, mask;
1958    
1959     - chained_irq_enter(chip, desc);
1960     - /*enable GPIO interrupt again*/
1961     + /* Read the wake status */
1962     spin_lock_irqsave(&gpio_dev->lock, flags);
1963     - reg = readl(gpio_dev->base + WAKE_INT_STATUS_REG1);
1964     - reg64 = reg;
1965     - reg64 = reg64 << 32;
1966     -
1967     - reg = readl(gpio_dev->base + WAKE_INT_STATUS_REG0);
1968     - reg64 |= reg;
1969     + status = readl(gpio_dev->base + WAKE_INT_STATUS_REG1);
1970     + status <<= 32;
1971     + status |= readl(gpio_dev->base + WAKE_INT_STATUS_REG0);
1972     spin_unlock_irqrestore(&gpio_dev->lock, flags);
1973    
1974     - /*
1975     - * first 46 bits indicates interrupt status.
1976     - * one bit represents four interrupt sources.
1977     - */
1978     - for (off = 0; off < 46 ; off++) {
1979     - if (reg64 & BIT(off)) {
1980     - for (i = 0; i < 4; i++) {
1981     - pin_reg = readl(gpio_dev->base +
1982     - (off * 4 + i) * 4);
1983     - if ((pin_reg & BIT(INTERRUPT_STS_OFF)) ||
1984     - (pin_reg & BIT(WAKE_STS_OFF))) {
1985     - irq = irq_find_mapping(gc->irqdomain,
1986     - off * 4 + i);
1987     - generic_handle_irq(irq);
1988     - writel(pin_reg,
1989     - gpio_dev->base
1990     - + (off * 4 + i) * 4);
1991     - handled++;
1992     - }
1993     - }
1994     + /* Bit 0-45 contain the relevant status bits */
1995     + status &= (1ULL << 46) - 1;
1996     + regs = gpio_dev->base;
1997     + for (mask = 1, irqnr = 0; status; mask <<= 1, regs += 4, irqnr += 4) {
1998     + if (!(status & mask))
1999     + continue;
2000     + status &= ~mask;
2001     +
2002     + /* Each status bit covers four pins */
2003     + for (i = 0; i < 4; i++) {
2004     + regval = readl(regs + i);
2005     + if (!(regval & PIN_IRQ_PENDING))
2006     + continue;
2007     + irq = irq_find_mapping(gc->irqdomain, irqnr + i);
2008     + generic_handle_irq(irq);
2009     + /* Clear interrupt */
2010     + writel(regval, regs + i);
2011     + ret = IRQ_HANDLED;
2012     }
2013     }
2014    
2015     - if (handled == 0)
2016     - handle_bad_irq(desc);
2017     -
2018     + /* Signal EOI to the GPIO unit */
2019     spin_lock_irqsave(&gpio_dev->lock, flags);
2020     - reg = readl(gpio_dev->base + WAKE_INT_MASTER_REG);
2021     - reg |= EOI_MASK;
2022     - writel(reg, gpio_dev->base + WAKE_INT_MASTER_REG);
2023     + regval = readl(gpio_dev->base + WAKE_INT_MASTER_REG);
2024     + regval |= EOI_MASK;
2025     + writel(regval, gpio_dev->base + WAKE_INT_MASTER_REG);
2026     spin_unlock_irqrestore(&gpio_dev->lock, flags);
2027    
2028     - chained_irq_exit(chip, desc);
2029     + return ret;
2030     }
2031    
2032     static int amd_get_groups_count(struct pinctrl_dev *pctldev)
2033     @@ -821,10 +811,11 @@ static int amd_gpio_probe(struct platform_device *pdev)
2034     goto out2;
2035     }
2036    
2037     - gpiochip_set_chained_irqchip(&gpio_dev->gc,
2038     - &amd_gpio_irqchip,
2039     - irq_base,
2040     - amd_gpio_irq_handler);
2041     + ret = devm_request_irq(&pdev->dev, irq_base, amd_gpio_irq_handler, 0,
2042     + KBUILD_MODNAME, gpio_dev);
2043     + if (ret)
2044     + goto out2;
2045     +
2046     platform_set_drvdata(pdev, gpio_dev);
2047    
2048     dev_dbg(&pdev->dev, "amd gpio driver loaded\n");
2049     diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c
2050     index 3f85b97ab8d2..6d3494ba84cf 100644
2051     --- a/drivers/s390/net/netiucv.c
2052     +++ b/drivers/s390/net/netiucv.c
2053     @@ -1954,7 +1954,6 @@ static void netiucv_free_netdevice(struct net_device *dev)
2054     privptr->conn = NULL; privptr->fsm = NULL;
2055     /* privptr gets freed by free_netdev() */
2056     }
2057     - free_netdev(dev);
2058     }
2059    
2060     /**
2061     @@ -1972,7 +1971,8 @@ static void netiucv_setup_netdevice(struct net_device *dev)
2062     dev->mtu = NETIUCV_MTU_DEFAULT;
2063     dev->min_mtu = 576;
2064     dev->max_mtu = NETIUCV_MTU_MAX;
2065     - dev->destructor = netiucv_free_netdevice;
2066     + dev->needs_free_netdev = true;
2067     + dev->priv_destructor = netiucv_free_netdevice;
2068     dev->hard_header_len = NETIUCV_HDRLEN;
2069     dev->addr_len = 0;
2070     dev->type = ARPHRD_SLIP;
2071     diff --git a/drivers/staging/rtl8188eu/os_dep/mon.c b/drivers/staging/rtl8188eu/os_dep/mon.c
2072     index cfe37eb026d6..859d0d6051cd 100644
2073     --- a/drivers/staging/rtl8188eu/os_dep/mon.c
2074     +++ b/drivers/staging/rtl8188eu/os_dep/mon.c
2075     @@ -152,7 +152,7 @@ static const struct net_device_ops mon_netdev_ops = {
2076     static void mon_setup(struct net_device *dev)
2077     {
2078     dev->netdev_ops = &mon_netdev_ops;
2079     - dev->destructor = free_netdev;
2080     + dev->needs_free_netdev = true;
2081     ether_setup(dev);
2082     dev->priv_flags |= IFF_NO_QUEUE;
2083     dev->type = ARPHRD_IEEE80211;
2084     diff --git a/drivers/usb/gadget/function/f_phonet.c b/drivers/usb/gadget/function/f_phonet.c
2085     index b4058f0000e4..6a1ce6a55158 100644
2086     --- a/drivers/usb/gadget/function/f_phonet.c
2087     +++ b/drivers/usb/gadget/function/f_phonet.c
2088     @@ -281,7 +281,7 @@ static void pn_net_setup(struct net_device *dev)
2089     dev->tx_queue_len = 1;
2090    
2091     dev->netdev_ops = &pn_netdev_ops;
2092     - dev->destructor = free_netdev;
2093     + dev->needs_free_netdev = true;
2094     dev->header_ops = &phonet_header_ops;
2095     }
2096    
2097     diff --git a/drivers/watchdog/bcm_kona_wdt.c b/drivers/watchdog/bcm_kona_wdt.c
2098     index 6fce17d5b9f1..a5775dfd8d5f 100644
2099     --- a/drivers/watchdog/bcm_kona_wdt.c
2100     +++ b/drivers/watchdog/bcm_kona_wdt.c
2101     @@ -304,6 +304,8 @@ static int bcm_kona_wdt_probe(struct platform_device *pdev)
2102     if (!wdt)
2103     return -ENOMEM;
2104    
2105     + spin_lock_init(&wdt->lock);
2106     +
2107     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2108     wdt->base = devm_ioremap_resource(dev, res);
2109     if (IS_ERR(wdt->base))
2110     @@ -316,7 +318,6 @@ static int bcm_kona_wdt_probe(struct platform_device *pdev)
2111     return ret;
2112     }
2113    
2114     - spin_lock_init(&wdt->lock);
2115     platform_set_drvdata(pdev, wdt);
2116     watchdog_set_drvdata(&bcm_kona_wdt_wdd, wdt);
2117     bcm_kona_wdt_wdd.parent = &pdev->dev;
2118     diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
2119     index 773774531aff..c5e27ebd8da8 100644
2120     --- a/fs/nfs/callback.c
2121     +++ b/fs/nfs/callback.c
2122     @@ -280,7 +280,7 @@ static struct svc_serv *nfs_callback_create_svc(int minorversion)
2123     printk(KERN_WARNING "nfs_callback_create_svc: no kthread, %d users??\n",
2124     cb_info->users);
2125    
2126     - serv = svc_create(&nfs4_callback_program, NFS4_CALLBACK_BUFSIZE, sv_ops);
2127     + serv = svc_create_pooled(&nfs4_callback_program, NFS4_CALLBACK_BUFSIZE, sv_ops);
2128     if (!serv) {
2129     printk(KERN_ERR "nfs_callback_create_svc: create service failed\n");
2130     return ERR_PTR(-ENOMEM);
2131     diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
2132     index f92ba8d6c556..66c743eddac9 100644
2133     --- a/fs/nfs/dir.c
2134     +++ b/fs/nfs/dir.c
2135     @@ -2002,29 +2002,6 @@ nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
2136     }
2137     EXPORT_SYMBOL_GPL(nfs_link);
2138    
2139     -static void
2140     -nfs_complete_rename(struct rpc_task *task, struct nfs_renamedata *data)
2141     -{
2142     - struct dentry *old_dentry = data->old_dentry;
2143     - struct dentry *new_dentry = data->new_dentry;
2144     - struct inode *old_inode = d_inode(old_dentry);
2145     - struct inode *new_inode = d_inode(new_dentry);
2146     -
2147     - nfs_mark_for_revalidate(old_inode);
2148     -
2149     - switch (task->tk_status) {
2150     - case 0:
2151     - if (new_inode != NULL)
2152     - nfs_drop_nlink(new_inode);
2153     - d_move(old_dentry, new_dentry);
2154     - nfs_set_verifier(new_dentry,
2155     - nfs_save_change_attribute(data->new_dir));
2156     - break;
2157     - case -ENOENT:
2158     - nfs_dentry_handle_enoent(old_dentry);
2159     - }
2160     -}
2161     -
2162     /*
2163     * RENAME
2164     * FIXME: Some nfsds, like the Linux user space nfsd, may generate a
2165     @@ -2055,7 +2032,7 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2166     {
2167     struct inode *old_inode = d_inode(old_dentry);
2168     struct inode *new_inode = d_inode(new_dentry);
2169     - struct dentry *dentry = NULL;
2170     + struct dentry *dentry = NULL, *rehash = NULL;
2171     struct rpc_task *task;
2172     int error = -EBUSY;
2173    
2174     @@ -2078,8 +2055,10 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2175     * To prevent any new references to the target during the
2176     * rename, we unhash the dentry in advance.
2177     */
2178     - if (!d_unhashed(new_dentry))
2179     + if (!d_unhashed(new_dentry)) {
2180     d_drop(new_dentry);
2181     + rehash = new_dentry;
2182     + }
2183    
2184     if (d_count(new_dentry) > 2) {
2185     int err;
2186     @@ -2096,6 +2075,7 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2187     goto out;
2188    
2189     new_dentry = dentry;
2190     + rehash = NULL;
2191     new_inode = NULL;
2192     }
2193     }
2194     @@ -2104,8 +2084,7 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2195     if (new_inode != NULL)
2196     NFS_PROTO(new_inode)->return_delegation(new_inode);
2197    
2198     - task = nfs_async_rename(old_dir, new_dir, old_dentry, new_dentry,
2199     - nfs_complete_rename);
2200     + task = nfs_async_rename(old_dir, new_dir, old_dentry, new_dentry, NULL);
2201     if (IS_ERR(task)) {
2202     error = PTR_ERR(task);
2203     goto out;
2204     @@ -2115,9 +2094,27 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
2205     if (error == 0)
2206     error = task->tk_status;
2207     rpc_put_task(task);
2208     + nfs_mark_for_revalidate(old_inode);
2209     out:
2210     + if (rehash)
2211     + d_rehash(rehash);
2212     trace_nfs_rename_exit(old_dir, old_dentry,
2213     new_dir, new_dentry, error);
2214     + if (!error) {
2215     + if (new_inode != NULL)
2216     + nfs_drop_nlink(new_inode);
2217     + /*
2218     + * The d_move() should be here instead of in an async RPC completion
2219     + * handler because we need the proper locks to move the dentry. If
2220     + * we're interrupted by a signal, the async RPC completion handler
2221     + * should mark the directories for revalidation.
2222     + */
2223     + d_move(old_dentry, new_dentry);
2224     + nfs_set_verifier(new_dentry,
2225     + nfs_save_change_attribute(new_dir));
2226     + } else if (error == -ENOENT)
2227     + nfs_dentry_handle_enoent(old_dentry);
2228     +
2229     /* new dentry created? */
2230     if (dentry)
2231     dput(dentry);
2232     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
2233     index 8ba6c0d4d499..932a1461758d 100644
2234     --- a/fs/nfs/nfs4proc.c
2235     +++ b/fs/nfs/nfs4proc.c
2236     @@ -2588,7 +2588,8 @@ static inline void nfs4_exclusive_attrset(struct nfs4_opendata *opendata,
2237    
2238     /* Except MODE, it seems harmless of setting twice. */
2239     if (opendata->o_arg.createmode != NFS4_CREATE_EXCLUSIVE &&
2240     - attrset[1] & FATTR4_WORD1_MODE)
2241     + (attrset[1] & FATTR4_WORD1_MODE ||
2242     + attrset[2] & FATTR4_WORD2_MODE_UMASK))
2243     sattr->ia_valid &= ~ATTR_MODE;
2244    
2245     if (attrset[2] & FATTR4_WORD2_SECURITY_LABEL)
2246     @@ -8429,6 +8430,7 @@ static void nfs4_layoutget_release(void *calldata)
2247     size_t max_pages = max_response_pages(server);
2248    
2249     dprintk("--> %s\n", __func__);
2250     + nfs4_sequence_free_slot(&lgp->res.seq_res);
2251     nfs4_free_pages(lgp->args.layout.pages, max_pages);
2252     pnfs_put_layout_hdr(NFS_I(inode)->layout);
2253     put_nfs_open_context(lgp->args.ctx);
2254     @@ -8503,7 +8505,6 @@ nfs4_proc_layoutget(struct nfs4_layoutget *lgp, long *timeout, gfp_t gfp_flags)
2255     /* if layoutp->len is 0, nfs4_layoutget_prepare called rpc_exit */
2256     if (status == 0 && lgp->res.layoutp->len)
2257     lseg = pnfs_layout_process(lgp);
2258     - nfs4_sequence_free_slot(&lgp->res.seq_res);
2259     rpc_put_task(task);
2260     dprintk("<-- %s status=%d\n", __func__, status);
2261     if (status)
2262     diff --git a/fs/ocfs2/cluster/heartbeat.c b/fs/ocfs2/cluster/heartbeat.c
2263     index f6e871760f8d..0da0332725aa 100644
2264     --- a/fs/ocfs2/cluster/heartbeat.c
2265     +++ b/fs/ocfs2/cluster/heartbeat.c
2266     @@ -2242,13 +2242,13 @@ static void o2hb_heartbeat_group_drop_item(struct config_group *group,
2267     spin_unlock(&o2hb_live_lock);
2268     }
2269    
2270     -static ssize_t o2hb_heartbeat_group_threshold_show(struct config_item *item,
2271     +static ssize_t o2hb_heartbeat_group_dead_threshold_show(struct config_item *item,
2272     char *page)
2273     {
2274     return sprintf(page, "%u\n", o2hb_dead_threshold);
2275     }
2276    
2277     -static ssize_t o2hb_heartbeat_group_threshold_store(struct config_item *item,
2278     +static ssize_t o2hb_heartbeat_group_dead_threshold_store(struct config_item *item,
2279     const char *page, size_t count)
2280     {
2281     unsigned long tmp;
2282     @@ -2297,11 +2297,11 @@ static ssize_t o2hb_heartbeat_group_mode_store(struct config_item *item,
2283    
2284     }
2285    
2286     -CONFIGFS_ATTR(o2hb_heartbeat_group_, threshold);
2287     +CONFIGFS_ATTR(o2hb_heartbeat_group_, dead_threshold);
2288     CONFIGFS_ATTR(o2hb_heartbeat_group_, mode);
2289    
2290     static struct configfs_attribute *o2hb_heartbeat_group_attrs[] = {
2291     - &o2hb_heartbeat_group_attr_threshold,
2292     + &o2hb_heartbeat_group_attr_dead_threshold,
2293     &o2hb_heartbeat_group_attr_mode,
2294     NULL,
2295     };
2296     diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
2297     index 3b7c937a36b5..4689940a953c 100644
2298     --- a/fs/ocfs2/dlmglue.c
2299     +++ b/fs/ocfs2/dlmglue.c
2300     @@ -2591,6 +2591,10 @@ void ocfs2_inode_unlock_tracker(struct inode *inode,
2301     struct ocfs2_lock_res *lockres;
2302    
2303     lockres = &OCFS2_I(inode)->ip_inode_lockres;
2304     + /* had_lock means that the currect process already takes the cluster
2305     + * lock previously. If had_lock is 1, we have nothing to do here, and
2306     + * it will get unlocked where we got the lock.
2307     + */
2308     if (!had_lock) {
2309     ocfs2_remove_holder(lockres, oh);
2310     ocfs2_inode_unlock(inode, ex);
2311     diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
2312     index 3c5384d9b3a5..f70c3778d600 100644
2313     --- a/fs/ocfs2/xattr.c
2314     +++ b/fs/ocfs2/xattr.c
2315     @@ -1328,20 +1328,21 @@ static int ocfs2_xattr_get(struct inode *inode,
2316     void *buffer,
2317     size_t buffer_size)
2318     {
2319     - int ret;
2320     + int ret, had_lock;
2321     struct buffer_head *di_bh = NULL;
2322     + struct ocfs2_lock_holder oh;
2323    
2324     - ret = ocfs2_inode_lock(inode, &di_bh, 0);
2325     - if (ret < 0) {
2326     - mlog_errno(ret);
2327     - return ret;
2328     + had_lock = ocfs2_inode_lock_tracker(inode, &di_bh, 0, &oh);
2329     + if (had_lock < 0) {
2330     + mlog_errno(had_lock);
2331     + return had_lock;
2332     }
2333     down_read(&OCFS2_I(inode)->ip_xattr_sem);
2334     ret = ocfs2_xattr_get_nolock(inode, di_bh, name_index,
2335     name, buffer, buffer_size);
2336     up_read(&OCFS2_I(inode)->ip_xattr_sem);
2337    
2338     - ocfs2_inode_unlock(inode, 0);
2339     + ocfs2_inode_unlock_tracker(inode, 0, &oh, had_lock);
2340    
2341     brelse(di_bh);
2342    
2343     @@ -3537,11 +3538,12 @@ int ocfs2_xattr_set(struct inode *inode,
2344     {
2345     struct buffer_head *di_bh = NULL;
2346     struct ocfs2_dinode *di;
2347     - int ret, credits, ref_meta = 0, ref_credits = 0;
2348     + int ret, credits, had_lock, ref_meta = 0, ref_credits = 0;
2349     struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
2350     struct inode *tl_inode = osb->osb_tl_inode;
2351     struct ocfs2_xattr_set_ctxt ctxt = { NULL, NULL, NULL, };
2352     struct ocfs2_refcount_tree *ref_tree = NULL;
2353     + struct ocfs2_lock_holder oh;
2354    
2355     struct ocfs2_xattr_info xi = {
2356     .xi_name_index = name_index,
2357     @@ -3572,8 +3574,9 @@ int ocfs2_xattr_set(struct inode *inode,
2358     return -ENOMEM;
2359     }
2360    
2361     - ret = ocfs2_inode_lock(inode, &di_bh, 1);
2362     - if (ret < 0) {
2363     + had_lock = ocfs2_inode_lock_tracker(inode, &di_bh, 1, &oh);
2364     + if (had_lock < 0) {
2365     + ret = had_lock;
2366     mlog_errno(ret);
2367     goto cleanup_nolock;
2368     }
2369     @@ -3670,7 +3673,7 @@ int ocfs2_xattr_set(struct inode *inode,
2370     if (ret)
2371     mlog_errno(ret);
2372     }
2373     - ocfs2_inode_unlock(inode, 1);
2374     + ocfs2_inode_unlock_tracker(inode, 1, &oh, had_lock);
2375     cleanup_nolock:
2376     brelse(di_bh);
2377     brelse(xbs.xattr_bh);
2378     diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
2379     index 5b14c16d1b77..e83e2dc7ae0b 100644
2380     --- a/fs/overlayfs/copy_up.c
2381     +++ b/fs/overlayfs/copy_up.c
2382     @@ -252,15 +252,9 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
2383     .link = link
2384     };
2385    
2386     - upper = lookup_one_len(dentry->d_name.name, upperdir,
2387     - dentry->d_name.len);
2388     - err = PTR_ERR(upper);
2389     - if (IS_ERR(upper))
2390     - goto out;
2391     -
2392     err = security_inode_copy_up(dentry, &new_creds);
2393     if (err < 0)
2394     - goto out1;
2395     + goto out;
2396    
2397     if (new_creds)
2398     old_creds = override_creds(new_creds);
2399     @@ -284,7 +278,7 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
2400     }
2401    
2402     if (err)
2403     - goto out2;
2404     + goto out;
2405    
2406     if (S_ISREG(stat->mode)) {
2407     struct path upperpath;
2408     @@ -317,6 +311,14 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
2409     if (err)
2410     goto out_cleanup;
2411    
2412     + upper = lookup_one_len(dentry->d_name.name, upperdir,
2413     + dentry->d_name.len);
2414     + if (IS_ERR(upper)) {
2415     + err = PTR_ERR(upper);
2416     + upper = NULL;
2417     + goto out_cleanup;
2418     + }
2419     +
2420     if (tmpfile)
2421     err = ovl_do_link(temp, udir, upper, true);
2422     else
2423     @@ -330,17 +332,15 @@ static int ovl_copy_up_locked(struct dentry *workdir, struct dentry *upperdir,
2424    
2425     /* Restore timestamps on parent (best effort) */
2426     ovl_set_timestamps(upperdir, pstat);
2427     -out2:
2428     +out:
2429     dput(temp);
2430     -out1:
2431     dput(upper);
2432     -out:
2433     return err;
2434    
2435     out_cleanup:
2436     if (!tmpfile)
2437     ovl_cleanup(wdir, temp);
2438     - goto out2;
2439     + goto out;
2440     }
2441    
2442     /*
2443     diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
2444     index 97456b2539e4..aa38bb18c81c 100644
2445     --- a/include/linux/netdevice.h
2446     +++ b/include/linux/netdevice.h
2447     @@ -1581,8 +1581,8 @@ enum netdev_priv_flags {
2448     * @rtnl_link_state: This enum represents the phases of creating
2449     * a new link
2450     *
2451     - * @destructor: Called from unregister,
2452     - * can be used to call free_netdev
2453     + * @needs_free_netdev: Should unregister perform free_netdev?
2454     + * @priv_destructor: Called from unregister
2455     * @npinfo: XXX: need comments on this one
2456     * @nd_net: Network namespace this network device is inside
2457     *
2458     @@ -1838,7 +1838,8 @@ struct net_device {
2459     RTNL_LINK_INITIALIZING,
2460     } rtnl_link_state:16;
2461    
2462     - void (*destructor)(struct net_device *dev);
2463     + bool needs_free_netdev;
2464     + void (*priv_destructor)(struct net_device *dev);
2465    
2466     #ifdef CONFIG_NETPOLL
2467     struct netpoll_info __rcu *npinfo;
2468     @@ -4231,6 +4232,11 @@ static inline const char *netdev_name(const struct net_device *dev)
2469     return dev->name;
2470     }
2471    
2472     +static inline bool netdev_unregistering(const struct net_device *dev)
2473     +{
2474     + return dev->reg_state == NETREG_UNREGISTERING;
2475     +}
2476     +
2477     static inline const char *netdev_reg_state(const struct net_device *dev)
2478     {
2479     switch (dev->reg_state) {
2480     diff --git a/include/net/xfrm.h b/include/net/xfrm.h
2481     index 14d82bf16692..85bc8e7ade2e 100644
2482     --- a/include/net/xfrm.h
2483     +++ b/include/net/xfrm.h
2484     @@ -945,10 +945,6 @@ struct xfrm_dst {
2485     struct flow_cache_object flo;
2486     struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX];
2487     int num_pols, num_xfrms;
2488     -#ifdef CONFIG_XFRM_SUB_POLICY
2489     - struct flowi *origin;
2490     - struct xfrm_selector *partner;
2491     -#endif
2492     u32 xfrm_genid;
2493     u32 policy_genid;
2494     u32 route_mtu_cached;
2495     @@ -964,12 +960,6 @@ static inline void xfrm_dst_destroy(struct xfrm_dst *xdst)
2496     dst_release(xdst->route);
2497     if (likely(xdst->u.dst.xfrm))
2498     xfrm_state_put(xdst->u.dst.xfrm);
2499     -#ifdef CONFIG_XFRM_SUB_POLICY
2500     - kfree(xdst->origin);
2501     - xdst->origin = NULL;
2502     - kfree(xdst->partner);
2503     - xdst->partner = NULL;
2504     -#endif
2505     }
2506     #endif
2507    
2508     diff --git a/mm/vmalloc.c b/mm/vmalloc.c
2509     index 0b057628a7ba..926ef9e8c71b 100644
2510     --- a/mm/vmalloc.c
2511     +++ b/mm/vmalloc.c
2512     @@ -287,10 +287,21 @@ struct page *vmalloc_to_page(const void *vmalloc_addr)
2513     if (p4d_none(*p4d))
2514     return NULL;
2515     pud = pud_offset(p4d, addr);
2516     - if (pud_none(*pud))
2517     +
2518     + /*
2519     + * Don't dereference bad PUD or PMD (below) entries. This will also
2520     + * identify huge mappings, which we may encounter on architectures
2521     + * that define CONFIG_HAVE_ARCH_HUGE_VMAP=y. Such regions will be
2522     + * identified as vmalloc addresses by is_vmalloc_addr(), but are
2523     + * not [unambiguously] associated with a struct page, so there is
2524     + * no correct value to return for them.
2525     + */
2526     + WARN_ON_ONCE(pud_bad(*pud));
2527     + if (pud_none(*pud) || pud_bad(*pud))
2528     return NULL;
2529     pmd = pmd_offset(pud, addr);
2530     - if (pmd_none(*pmd))
2531     + WARN_ON_ONCE(pmd_bad(*pmd));
2532     + if (pmd_none(*pmd) || pmd_bad(*pmd))
2533     return NULL;
2534    
2535     ptep = pte_offset_map(pmd, addr);
2536     diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
2537     index 467069b73ce1..9649579b5b9f 100644
2538     --- a/net/8021q/vlan.c
2539     +++ b/net/8021q/vlan.c
2540     @@ -277,7 +277,8 @@ static int register_vlan_device(struct net_device *real_dev, u16 vlan_id)
2541     return 0;
2542    
2543     out_free_newdev:
2544     - free_netdev(new_dev);
2545     + if (new_dev->reg_state == NETREG_UNINITIALIZED)
2546     + free_netdev(new_dev);
2547     return err;
2548     }
2549    
2550     diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
2551     index e97ab824e368..0064dfd328d4 100644
2552     --- a/net/8021q/vlan_dev.c
2553     +++ b/net/8021q/vlan_dev.c
2554     @@ -807,7 +807,6 @@ static void vlan_dev_free(struct net_device *dev)
2555    
2556     free_percpu(vlan->vlan_pcpu_stats);
2557     vlan->vlan_pcpu_stats = NULL;
2558     - free_netdev(dev);
2559     }
2560    
2561     void vlan_setup(struct net_device *dev)
2562     @@ -820,7 +819,8 @@ void vlan_setup(struct net_device *dev)
2563     netif_keep_dst(dev);
2564    
2565     dev->netdev_ops = &vlan_netdev_ops;
2566     - dev->destructor = vlan_dev_free;
2567     + dev->needs_free_netdev = true;
2568     + dev->priv_destructor = vlan_dev_free;
2569     dev->ethtool_ops = &vlan_ethtool_ops;
2570    
2571     dev->min_mtu = 0;
2572     diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
2573     index d042c99af028..07ca0e8f30b2 100644
2574     --- a/net/batman-adv/soft-interface.c
2575     +++ b/net/batman-adv/soft-interface.c
2576     @@ -961,8 +961,6 @@ static void batadv_softif_free(struct net_device *dev)
2577     * netdev and its private data (bat_priv)
2578     */
2579     rcu_barrier();
2580     -
2581     - free_netdev(dev);
2582     }
2583    
2584     /**
2585     @@ -976,7 +974,8 @@ static void batadv_softif_init_early(struct net_device *dev)
2586     ether_setup(dev);
2587    
2588     dev->netdev_ops = &batadv_netdev_ops;
2589     - dev->destructor = batadv_softif_free;
2590     + dev->needs_free_netdev = true;
2591     + dev->priv_destructor = batadv_softif_free;
2592     dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_NETNS_LOCAL;
2593     dev->priv_flags |= IFF_NO_QUEUE;
2594    
2595     diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
2596     index d491529332f4..7ffeca72e928 100644
2597     --- a/net/bluetooth/6lowpan.c
2598     +++ b/net/bluetooth/6lowpan.c
2599     @@ -653,7 +653,7 @@ static void netdev_setup(struct net_device *dev)
2600    
2601     dev->netdev_ops = &netdev_ops;
2602     dev->header_ops = &header_ops;
2603     - dev->destructor = free_netdev;
2604     + dev->needs_free_netdev = true;
2605     }
2606    
2607     static struct device_type bt_type = {
2608     diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
2609     index 430b53e7d941..f0f3447e8aa4 100644
2610     --- a/net/bridge/br_device.c
2611     +++ b/net/bridge/br_device.c
2612     @@ -379,7 +379,7 @@ void br_dev_setup(struct net_device *dev)
2613     ether_setup(dev);
2614    
2615     dev->netdev_ops = &br_netdev_ops;
2616     - dev->destructor = free_netdev;
2617     + dev->needs_free_netdev = true;
2618     dev->ethtool_ops = &br_ethtool_ops;
2619     SET_NETDEV_DEVTYPE(dev, &br_type);
2620     dev->priv_flags = IFF_EBRIDGE | IFF_NO_QUEUE;
2621     diff --git a/net/caif/cfpkt_skbuff.c b/net/caif/cfpkt_skbuff.c
2622     index 59ce1fcc220c..71b6ab240dea 100644
2623     --- a/net/caif/cfpkt_skbuff.c
2624     +++ b/net/caif/cfpkt_skbuff.c
2625     @@ -81,11 +81,7 @@ static struct cfpkt *cfpkt_create_pfx(u16 len, u16 pfx)
2626     {
2627     struct sk_buff *skb;
2628    
2629     - if (likely(in_interrupt()))
2630     - skb = alloc_skb(len + pfx, GFP_ATOMIC);
2631     - else
2632     - skb = alloc_skb(len + pfx, GFP_KERNEL);
2633     -
2634     + skb = alloc_skb(len + pfx, GFP_ATOMIC);
2635     if (unlikely(skb == NULL))
2636     return NULL;
2637    
2638     diff --git a/net/caif/chnl_net.c b/net/caif/chnl_net.c
2639     index 1816fc9f1ee7..fe3c53efb949 100644
2640     --- a/net/caif/chnl_net.c
2641     +++ b/net/caif/chnl_net.c
2642     @@ -392,14 +392,14 @@ static void chnl_net_destructor(struct net_device *dev)
2643     {
2644     struct chnl_net *priv = netdev_priv(dev);
2645     caif_free_client(&priv->chnl);
2646     - free_netdev(dev);
2647     }
2648    
2649     static void ipcaif_net_setup(struct net_device *dev)
2650     {
2651     struct chnl_net *priv;
2652     dev->netdev_ops = &netdev_ops;
2653     - dev->destructor = chnl_net_destructor;
2654     + dev->needs_free_netdev = true;
2655     + dev->priv_destructor = chnl_net_destructor;
2656     dev->flags |= IFF_NOARP;
2657     dev->flags |= IFF_POINTOPOINT;
2658     dev->mtu = GPRS_PDP_MTU;
2659     diff --git a/net/core/dev.c b/net/core/dev.c
2660     index 9b5875388c23..9debc1b26ce9 100644
2661     --- a/net/core/dev.c
2662     +++ b/net/core/dev.c
2663     @@ -1251,8 +1251,9 @@ int dev_set_alias(struct net_device *dev, const char *alias, size_t len)
2664     if (!new_ifalias)
2665     return -ENOMEM;
2666     dev->ifalias = new_ifalias;
2667     + memcpy(dev->ifalias, alias, len);
2668     + dev->ifalias[len] = 0;
2669    
2670     - strlcpy(dev->ifalias, alias, len+1);
2671     return len;
2672     }
2673    
2674     @@ -7345,6 +7346,8 @@ int register_netdevice(struct net_device *dev)
2675     err_uninit:
2676     if (dev->netdev_ops->ndo_uninit)
2677     dev->netdev_ops->ndo_uninit(dev);
2678     + if (dev->priv_destructor)
2679     + dev->priv_destructor(dev);
2680     goto out;
2681     }
2682     EXPORT_SYMBOL(register_netdevice);
2683     @@ -7552,8 +7555,10 @@ void netdev_run_todo(void)
2684     WARN_ON(rcu_access_pointer(dev->ip6_ptr));
2685     WARN_ON(dev->dn_ptr);
2686    
2687     - if (dev->destructor)
2688     - dev->destructor(dev);
2689     + if (dev->priv_destructor)
2690     + dev->priv_destructor(dev);
2691     + if (dev->needs_free_netdev)
2692     + free_netdev(dev);
2693    
2694     /* Report a network device has been unregistered */
2695     rtnl_lock();
2696     diff --git a/net/core/dst.c b/net/core/dst.c
2697     index 6192f11beec9..13ba4a090c41 100644
2698     --- a/net/core/dst.c
2699     +++ b/net/core/dst.c
2700     @@ -469,6 +469,20 @@ static int dst_dev_event(struct notifier_block *this, unsigned long event,
2701     spin_lock_bh(&dst_garbage.lock);
2702     dst = dst_garbage.list;
2703     dst_garbage.list = NULL;
2704     + /* The code in dst_ifdown places a hold on the loopback device.
2705     + * If the gc entry processing is set to expire after a lengthy
2706     + * interval, this hold can cause netdev_wait_allrefs() to hang
2707     + * out and wait for a long time -- until the the loopback
2708     + * interface is released. If we're really unlucky, it'll emit
2709     + * pr_emerg messages to console too. Reset the interval here,
2710     + * so dst cleanups occur in a more timely fashion.
2711     + */
2712     + if (dst_garbage.timer_inc > DST_GC_INC) {
2713     + dst_garbage.timer_inc = DST_GC_INC;
2714     + dst_garbage.timer_expires = DST_GC_MIN;
2715     + mod_delayed_work(system_wq, &dst_gc_work,
2716     + dst_garbage.timer_expires);
2717     + }
2718     spin_unlock_bh(&dst_garbage.lock);
2719    
2720     if (last)
2721     diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
2722     index 8d4a185a8143..05436c02fb7b 100644
2723     --- a/net/core/rtnetlink.c
2724     +++ b/net/core/rtnetlink.c
2725     @@ -934,6 +934,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
2726     + nla_total_size(1) /* IFLA_LINKMODE */
2727     + nla_total_size(4) /* IFLA_CARRIER_CHANGES */
2728     + nla_total_size(4) /* IFLA_LINK_NETNSID */
2729     + + nla_total_size(4) /* IFLA_GROUP */
2730     + nla_total_size(ext_filter_mask
2731     & RTEXT_FILTER_VF ? 4 : 0) /* IFLA_NUM_VF */
2732     + rtnl_vfinfo_size(dev, ext_filter_mask) /* IFLA_VFINFO_LIST */
2733     @@ -1127,6 +1128,8 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
2734     struct ifla_vf_mac vf_mac;
2735     struct ifla_vf_info ivi;
2736    
2737     + memset(&ivi, 0, sizeof(ivi));
2738     +
2739     /* Not all SR-IOV capable drivers support the
2740     * spoofcheck and "RSS query enable" query. Preset to
2741     * -1 so the user space tool can detect that the driver
2742     @@ -1135,7 +1138,6 @@ static noinline_for_stack int rtnl_fill_vfinfo(struct sk_buff *skb,
2743     ivi.spoofchk = -1;
2744     ivi.rss_query_en = -1;
2745     ivi.trusted = -1;
2746     - memset(ivi.mac, 0, sizeof(ivi.mac));
2747     /* The default value for VF link state is "auto"
2748     * IFLA_VF_LINK_STATE_AUTO which equals zero
2749     */
2750     @@ -1461,6 +1463,7 @@ static const struct nla_policy ifla_policy[IFLA_MAX+1] = {
2751     [IFLA_LINK_NETNSID] = { .type = NLA_S32 },
2752     [IFLA_PROTO_DOWN] = { .type = NLA_U8 },
2753     [IFLA_XDP] = { .type = NLA_NESTED },
2754     + [IFLA_GROUP] = { .type = NLA_U32 },
2755     };
2756    
2757     static const struct nla_policy ifla_info_policy[IFLA_INFO_MAX+1] = {
2758     diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c
2759     index b1dc096d22f8..403593bd2b83 100644
2760     --- a/net/decnet/dn_route.c
2761     +++ b/net/decnet/dn_route.c
2762     @@ -188,12 +188,6 @@ static inline void dnrt_free(struct dn_route *rt)
2763     call_rcu_bh(&rt->dst.rcu_head, dst_rcu_free);
2764     }
2765    
2766     -static inline void dnrt_drop(struct dn_route *rt)
2767     -{
2768     - dst_release(&rt->dst);
2769     - call_rcu_bh(&rt->dst.rcu_head, dst_rcu_free);
2770     -}
2771     -
2772     static void dn_dst_check_expire(unsigned long dummy)
2773     {
2774     int i;
2775     @@ -248,7 +242,7 @@ static int dn_dst_gc(struct dst_ops *ops)
2776     }
2777     *rtp = rt->dst.dn_next;
2778     rt->dst.dn_next = NULL;
2779     - dnrt_drop(rt);
2780     + dnrt_free(rt);
2781     break;
2782     }
2783     spin_unlock_bh(&dn_rt_hash_table[i].lock);
2784     @@ -350,7 +344,7 @@ static int dn_insert_route(struct dn_route *rt, unsigned int hash, struct dn_rou
2785     dst_use(&rth->dst, now);
2786     spin_unlock_bh(&dn_rt_hash_table[hash].lock);
2787    
2788     - dnrt_drop(rt);
2789     + dst_free(&rt->dst);
2790     *rp = rth;
2791     return 0;
2792     }
2793     @@ -380,7 +374,7 @@ static void dn_run_flush(unsigned long dummy)
2794     for(; rt; rt = next) {
2795     next = rcu_dereference_raw(rt->dst.dn_next);
2796     RCU_INIT_POINTER(rt->dst.dn_next, NULL);
2797     - dst_free((struct dst_entry *)rt);
2798     + dnrt_free(rt);
2799     }
2800    
2801     nothing_to_declare:
2802     @@ -1187,7 +1181,7 @@ static int dn_route_output_slow(struct dst_entry **pprt, const struct flowidn *o
2803     if (dev_out->flags & IFF_LOOPBACK)
2804     flags |= RTCF_LOCAL;
2805    
2806     - rt = dst_alloc(&dn_dst_ops, dev_out, 1, DST_OBSOLETE_NONE, DST_HOST);
2807     + rt = dst_alloc(&dn_dst_ops, dev_out, 0, DST_OBSOLETE_NONE, DST_HOST);
2808     if (rt == NULL)
2809     goto e_nobufs;
2810    
2811     diff --git a/net/decnet/netfilter/dn_rtmsg.c b/net/decnet/netfilter/dn_rtmsg.c
2812     index 85f2fdc360c2..29246bc9a7b4 100644
2813     --- a/net/decnet/netfilter/dn_rtmsg.c
2814     +++ b/net/decnet/netfilter/dn_rtmsg.c
2815     @@ -102,7 +102,9 @@ static inline void dnrmg_receive_user_skb(struct sk_buff *skb)
2816     {
2817     struct nlmsghdr *nlh = nlmsg_hdr(skb);
2818    
2819     - if (nlh->nlmsg_len < sizeof(*nlh) || skb->len < nlh->nlmsg_len)
2820     + if (skb->len < sizeof(*nlh) ||
2821     + nlh->nlmsg_len < sizeof(*nlh) ||
2822     + skb->len < nlh->nlmsg_len)
2823     return;
2824    
2825     if (!netlink_capable(skb, CAP_NET_ADMIN))
2826     diff --git a/net/hsr/hsr_device.c b/net/hsr/hsr_device.c
2827     index c73160fb11e7..0a0a392dc2bd 100644
2828     --- a/net/hsr/hsr_device.c
2829     +++ b/net/hsr/hsr_device.c
2830     @@ -378,7 +378,6 @@ static void hsr_dev_destroy(struct net_device *hsr_dev)
2831     del_timer_sync(&hsr->announce_timer);
2832    
2833     synchronize_rcu();
2834     - free_netdev(hsr_dev);
2835     }
2836    
2837     static const struct net_device_ops hsr_device_ops = {
2838     @@ -404,7 +403,8 @@ void hsr_dev_setup(struct net_device *dev)
2839     SET_NETDEV_DEVTYPE(dev, &hsr_type);
2840     dev->priv_flags |= IFF_NO_QUEUE;
2841    
2842     - dev->destructor = hsr_dev_destroy;
2843     + dev->needs_free_netdev = true;
2844     + dev->priv_destructor = hsr_dev_destroy;
2845    
2846     dev->hw_features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA |
2847     NETIF_F_GSO_MASK | NETIF_F_HW_CSUM |
2848     diff --git a/net/ieee802154/6lowpan/core.c b/net/ieee802154/6lowpan/core.c
2849     index d7efbf0dad20..0a866f332290 100644
2850     --- a/net/ieee802154/6lowpan/core.c
2851     +++ b/net/ieee802154/6lowpan/core.c
2852     @@ -107,7 +107,7 @@ static void lowpan_setup(struct net_device *ldev)
2853    
2854     ldev->netdev_ops = &lowpan_netdev_ops;
2855     ldev->header_ops = &lowpan_header_ops;
2856     - ldev->destructor = free_netdev;
2857     + ldev->needs_free_netdev = true;
2858     ldev->features |= NETIF_F_NETNS_LOCAL;
2859     }
2860    
2861     diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c
2862     index b1e24446e297..9708a32b1f26 100644
2863     --- a/net/ipv4/esp4.c
2864     +++ b/net/ipv4/esp4.c
2865     @@ -212,6 +212,7 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)
2866     u8 *iv;
2867     u8 *tail;
2868     u8 *vaddr;
2869     + int esph_offset;
2870     int blksize;
2871     int clen;
2872     int alen;
2873     @@ -392,12 +393,14 @@ static int esp_output(struct xfrm_state *x, struct sk_buff *skb)
2874     }
2875    
2876     cow:
2877     + esph_offset = (unsigned char *)esph - skb_transport_header(skb);
2878     +
2879     err = skb_cow_data(skb, tailen, &trailer);
2880     if (err < 0)
2881     goto error;
2882     nfrags = err;
2883     tail = skb_tail_pointer(trailer);
2884     - esph = ip_esp_hdr(skb);
2885     + esph = (struct ip_esp_hdr *)(skb_transport_header(skb) + esph_offset);
2886    
2887     skip_cow:
2888     esp_output_fill_trailer(tail, tfclen, plen, proto);
2889     diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
2890     index fc310db2708b..760311fd7c5b 100644
2891     --- a/net/ipv4/icmp.c
2892     +++ b/net/ipv4/icmp.c
2893     @@ -674,8 +674,12 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
2894     /* Needed by both icmp_global_allow and icmp_xmit_lock */
2895     local_bh_disable();
2896    
2897     - /* Check global sysctl_icmp_msgs_per_sec ratelimit */
2898     - if (!icmpv4_global_allow(net, type, code))
2899     + /* Check global sysctl_icmp_msgs_per_sec ratelimit, unless
2900     + * incoming dev is loopback. If outgoing dev change to not be
2901     + * loopback, then peer ratelimit still work (in icmpv4_xrlim_allow)
2902     + */
2903     + if (!(skb_in->dev && (skb_in->dev->flags&IFF_LOOPBACK)) &&
2904     + !icmpv4_global_allow(net, type, code))
2905     goto out_bh_enable;
2906    
2907     sk = icmp_xmit_lock(net);
2908     diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
2909     index 44fd86de2823..ec9a396fa466 100644
2910     --- a/net/ipv4/igmp.c
2911     +++ b/net/ipv4/igmp.c
2912     @@ -1112,6 +1112,7 @@ static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im)
2913     pmc = kzalloc(sizeof(*pmc), GFP_KERNEL);
2914     if (!pmc)
2915     return;
2916     + spin_lock_init(&pmc->lock);
2917     spin_lock_bh(&im->lock);
2918     pmc->interface = im->interface;
2919     in_dev_hold(in_dev);
2920     @@ -2071,21 +2072,26 @@ static int ip_mc_add_src(struct in_device *in_dev, __be32 *pmca, int sfmode,
2921    
2922     static void ip_mc_clear_src(struct ip_mc_list *pmc)
2923     {
2924     - struct ip_sf_list *psf, *nextpsf;
2925     + struct ip_sf_list *psf, *nextpsf, *tomb, *sources;
2926    
2927     - for (psf = pmc->tomb; psf; psf = nextpsf) {
2928     + spin_lock_bh(&pmc->lock);
2929     + tomb = pmc->tomb;
2930     + pmc->tomb = NULL;
2931     + sources = pmc->sources;
2932     + pmc->sources = NULL;
2933     + pmc->sfmode = MCAST_EXCLUDE;
2934     + pmc->sfcount[MCAST_INCLUDE] = 0;
2935     + pmc->sfcount[MCAST_EXCLUDE] = 1;
2936     + spin_unlock_bh(&pmc->lock);
2937     +
2938     + for (psf = tomb; psf; psf = nextpsf) {
2939     nextpsf = psf->sf_next;
2940     kfree(psf);
2941     }
2942     - pmc->tomb = NULL;
2943     - for (psf = pmc->sources; psf; psf = nextpsf) {
2944     + for (psf = sources; psf; psf = nextpsf) {
2945     nextpsf = psf->sf_next;
2946     kfree(psf);
2947     }
2948     - pmc->sources = NULL;
2949     - pmc->sfmode = MCAST_EXCLUDE;
2950     - pmc->sfcount[MCAST_INCLUDE] = 0;
2951     - pmc->sfcount[MCAST_EXCLUDE] = 1;
2952     }
2953    
2954     /* Join a multicast group
2955     diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
2956     index 823abaef006b..b2d1be55ca94 100644
2957     --- a/net/ipv4/ip_tunnel.c
2958     +++ b/net/ipv4/ip_tunnel.c
2959     @@ -961,7 +961,6 @@ static void ip_tunnel_dev_free(struct net_device *dev)
2960     gro_cells_destroy(&tunnel->gro_cells);
2961     dst_cache_destroy(&tunnel->dst_cache);
2962     free_percpu(dev->tstats);
2963     - free_netdev(dev);
2964     }
2965    
2966     void ip_tunnel_dellink(struct net_device *dev, struct list_head *head)
2967     @@ -1148,7 +1147,8 @@ int ip_tunnel_init(struct net_device *dev)
2968     struct iphdr *iph = &tunnel->parms.iph;
2969     int err;
2970    
2971     - dev->destructor = ip_tunnel_dev_free;
2972     + dev->needs_free_netdev = true;
2973     + dev->priv_destructor = ip_tunnel_dev_free;
2974     dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
2975     if (!dev->tstats)
2976     return -ENOMEM;
2977     diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c
2978     index b036e85e093b..96c5681abb05 100644
2979     --- a/net/ipv4/ipmr.c
2980     +++ b/net/ipv4/ipmr.c
2981     @@ -501,7 +501,7 @@ static void reg_vif_setup(struct net_device *dev)
2982     dev->mtu = ETH_DATA_LEN - sizeof(struct iphdr) - 8;
2983     dev->flags = IFF_NOARP;
2984     dev->netdev_ops = &reg_vif_netdev_ops;
2985     - dev->destructor = free_netdev;
2986     + dev->needs_free_netdev = true;
2987     dev->features |= NETIF_F_NETNS_LOCAL;
2988     }
2989    
2990     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
2991     index 311f45641673..9725e8faf56d 100644
2992     --- a/net/ipv6/addrconf.c
2993     +++ b/net/ipv6/addrconf.c
2994     @@ -328,9 +328,9 @@ static void addrconf_mod_rs_timer(struct inet6_dev *idev,
2995     static void addrconf_mod_dad_work(struct inet6_ifaddr *ifp,
2996     unsigned long delay)
2997     {
2998     - if (!delayed_work_pending(&ifp->dad_work))
2999     - in6_ifa_hold(ifp);
3000     - mod_delayed_work(addrconf_wq, &ifp->dad_work, delay);
3001     + in6_ifa_hold(ifp);
3002     + if (mod_delayed_work(addrconf_wq, &ifp->dad_work, delay))
3003     + in6_ifa_put(ifp);
3004     }
3005    
3006     static int snmp6_alloc_dev(struct inet6_dev *idev)
3007     diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c
3008     index eea23b57c6a5..ec849d88a662 100644
3009     --- a/net/ipv6/fib6_rules.c
3010     +++ b/net/ipv6/fib6_rules.c
3011     @@ -32,7 +32,6 @@ struct fib6_rule {
3012     struct dst_entry *fib6_rule_lookup(struct net *net, struct flowi6 *fl6,
3013     int flags, pol_lookup_t lookup)
3014     {
3015     - struct rt6_info *rt;
3016     struct fib_lookup_arg arg = {
3017     .lookup_ptr = lookup,
3018     .flags = FIB_LOOKUP_NOREF,
3019     @@ -44,21 +43,11 @@ struct dst_entry *fib6_rule_lookup(struct net *net, struct flowi6 *fl6,
3020     fib_rules_lookup(net->ipv6.fib6_rules_ops,
3021     flowi6_to_flowi(fl6), flags, &arg);
3022    
3023     - rt = arg.result;
3024     + if (arg.result)
3025     + return arg.result;
3026    
3027     - if (!rt) {
3028     - dst_hold(&net->ipv6.ip6_null_entry->dst);
3029     - return &net->ipv6.ip6_null_entry->dst;
3030     - }
3031     -
3032     - if (rt->rt6i_flags & RTF_REJECT &&
3033     - rt->dst.error == -EAGAIN) {
3034     - ip6_rt_put(rt);
3035     - rt = net->ipv6.ip6_null_entry;
3036     - dst_hold(&rt->dst);
3037     - }
3038     -
3039     - return &rt->dst;
3040     + dst_hold(&net->ipv6.ip6_null_entry->dst);
3041     + return &net->ipv6.ip6_null_entry->dst;
3042     }
3043    
3044     static int fib6_rule_action(struct fib_rule *rule, struct flowi *flp,
3045     @@ -121,7 +110,8 @@ static int fib6_rule_action(struct fib_rule *rule, struct flowi *flp,
3046     flp6->saddr = saddr;
3047     }
3048     err = rt->dst.error;
3049     - goto out;
3050     + if (err != -EAGAIN)
3051     + goto out;
3052     }
3053     again:
3054     ip6_rt_put(rt);
3055     diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
3056     index 230b5aac9f03..8d7b113958b1 100644
3057     --- a/net/ipv6/icmp.c
3058     +++ b/net/ipv6/icmp.c
3059     @@ -491,7 +491,7 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,
3060     local_bh_disable();
3061    
3062     /* Check global sysctl_icmp_msgs_per_sec ratelimit */
3063     - if (!icmpv6_global_allow(type))
3064     + if (!(skb->dev->flags&IFF_LOOPBACK) && !icmpv6_global_allow(type))
3065     goto out_bh_enable;
3066    
3067     mip6_addr_swap(skb);
3068     diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
3069     index d4bf2c68a545..e6b78ba0e636 100644
3070     --- a/net/ipv6/ip6_fib.c
3071     +++ b/net/ipv6/ip6_fib.c
3072     @@ -289,8 +289,7 @@ struct dst_entry *fib6_rule_lookup(struct net *net, struct flowi6 *fl6,
3073     struct rt6_info *rt;
3074    
3075     rt = lookup(net, net->ipv6.fib6_main_tbl, fl6, flags);
3076     - if (rt->rt6i_flags & RTF_REJECT &&
3077     - rt->dst.error == -EAGAIN) {
3078     + if (rt->dst.error == -EAGAIN) {
3079     ip6_rt_put(rt);
3080     rt = net->ipv6.ip6_null_entry;
3081     dst_hold(&rt->dst);
3082     diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
3083     index 4d60164c17e2..0f1c24935b7a 100644
3084     --- a/net/ipv6/ip6_gre.c
3085     +++ b/net/ipv6/ip6_gre.c
3086     @@ -986,13 +986,13 @@ static void ip6gre_dev_free(struct net_device *dev)
3087    
3088     dst_cache_destroy(&t->dst_cache);
3089     free_percpu(dev->tstats);
3090     - free_netdev(dev);
3091     }
3092    
3093     static void ip6gre_tunnel_setup(struct net_device *dev)
3094     {
3095     dev->netdev_ops = &ip6gre_netdev_ops;
3096     - dev->destructor = ip6gre_dev_free;
3097     + dev->needs_free_netdev = true;
3098     + dev->priv_destructor = ip6gre_dev_free;
3099    
3100     dev->type = ARPHRD_IP6GRE;
3101    
3102     @@ -1143,7 +1143,7 @@ static int __net_init ip6gre_init_net(struct net *net)
3103     return 0;
3104    
3105     err_reg_dev:
3106     - ip6gre_dev_free(ign->fb_tunnel_dev);
3107     + free_netdev(ign->fb_tunnel_dev);
3108     err_alloc_dev:
3109     return err;
3110     }
3111     @@ -1292,7 +1292,8 @@ static void ip6gre_tap_setup(struct net_device *dev)
3112     ether_setup(dev);
3113    
3114     dev->netdev_ops = &ip6gre_tap_netdev_ops;
3115     - dev->destructor = ip6gre_dev_free;
3116     + dev->needs_free_netdev = true;
3117     + dev->priv_destructor = ip6gre_dev_free;
3118    
3119     dev->features |= NETIF_F_NETNS_LOCAL;
3120     dev->priv_flags &= ~IFF_TX_SKB_SHARING;
3121     diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
3122     index e2d7867f3112..292f24c48c94 100644
3123     --- a/net/ipv6/ip6_tunnel.c
3124     +++ b/net/ipv6/ip6_tunnel.c
3125     @@ -254,7 +254,6 @@ static void ip6_dev_free(struct net_device *dev)
3126     gro_cells_destroy(&t->gro_cells);
3127     dst_cache_destroy(&t->dst_cache);
3128     free_percpu(dev->tstats);
3129     - free_netdev(dev);
3130     }
3131    
3132     static int ip6_tnl_create2(struct net_device *dev)
3133     @@ -322,7 +321,7 @@ static struct ip6_tnl *ip6_tnl_create(struct net *net, struct __ip6_tnl_parm *p)
3134     return t;
3135    
3136     failed_free:
3137     - ip6_dev_free(dev);
3138     + free_netdev(dev);
3139     failed:
3140     return ERR_PTR(err);
3141     }
3142     @@ -1772,7 +1771,8 @@ static const struct net_device_ops ip6_tnl_netdev_ops = {
3143     static void ip6_tnl_dev_setup(struct net_device *dev)
3144     {
3145     dev->netdev_ops = &ip6_tnl_netdev_ops;
3146     - dev->destructor = ip6_dev_free;
3147     + dev->needs_free_netdev = true;
3148     + dev->priv_destructor = ip6_dev_free;
3149    
3150     dev->type = ARPHRD_TUNNEL6;
3151     dev->flags |= IFF_NOARP;
3152     @@ -2211,7 +2211,7 @@ static int __net_init ip6_tnl_init_net(struct net *net)
3153     return 0;
3154    
3155     err_register:
3156     - ip6_dev_free(ip6n->fb_tnl_dev);
3157     + free_netdev(ip6n->fb_tnl_dev);
3158     err_alloc_dev:
3159     return err;
3160     }
3161     diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
3162     index 3d8a3b63b4fd..5659f4a40f38 100644
3163     --- a/net/ipv6/ip6_vti.c
3164     +++ b/net/ipv6/ip6_vti.c
3165     @@ -180,7 +180,6 @@ vti6_tnl_unlink(struct vti6_net *ip6n, struct ip6_tnl *t)
3166     static void vti6_dev_free(struct net_device *dev)
3167     {
3168     free_percpu(dev->tstats);
3169     - free_netdev(dev);
3170     }
3171    
3172     static int vti6_tnl_create2(struct net_device *dev)
3173     @@ -235,7 +234,7 @@ static struct ip6_tnl *vti6_tnl_create(struct net *net, struct __ip6_tnl_parm *p
3174     return t;
3175    
3176     failed_free:
3177     - vti6_dev_free(dev);
3178     + free_netdev(dev);
3179     failed:
3180     return NULL;
3181     }
3182     @@ -841,7 +840,8 @@ static const struct net_device_ops vti6_netdev_ops = {
3183     static void vti6_dev_setup(struct net_device *dev)
3184     {
3185     dev->netdev_ops = &vti6_netdev_ops;
3186     - dev->destructor = vti6_dev_free;
3187     + dev->needs_free_netdev = true;
3188     + dev->priv_destructor = vti6_dev_free;
3189    
3190     dev->type = ARPHRD_TUNNEL6;
3191     dev->hard_header_len = LL_MAX_HEADER + sizeof(struct ipv6hdr);
3192     @@ -1092,7 +1092,7 @@ static int __net_init vti6_init_net(struct net *net)
3193     return 0;
3194    
3195     err_register:
3196     - vti6_dev_free(ip6n->fb_tnl_dev);
3197     + free_netdev(ip6n->fb_tnl_dev);
3198     err_alloc_dev:
3199     return err;
3200     }
3201     diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
3202     index bf34d0950752..576fd9332235 100644
3203     --- a/net/ipv6/ip6mr.c
3204     +++ b/net/ipv6/ip6mr.c
3205     @@ -733,7 +733,7 @@ static void reg_vif_setup(struct net_device *dev)
3206     dev->mtu = 1500 - sizeof(struct ipv6hdr) - 8;
3207     dev->flags = IFF_NOARP;
3208     dev->netdev_ops = &reg_vif_netdev_ops;
3209     - dev->destructor = free_netdev;
3210     + dev->needs_free_netdev = true;
3211     dev->features |= NETIF_F_NETNS_LOCAL;
3212     }
3213    
3214     diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
3215     index cc8e3ae9ca73..e88bcb8ff0fd 100644
3216     --- a/net/ipv6/proc.c
3217     +++ b/net/ipv6/proc.c
3218     @@ -219,7 +219,7 @@ static void snmp6_seq_show_item64(struct seq_file *seq, void __percpu *mib,
3219     u64 buff64[SNMP_MIB_MAX];
3220     int i;
3221    
3222     - memset(buff64, 0, sizeof(unsigned long) * SNMP_MIB_MAX);
3223     + memset(buff64, 0, sizeof(u64) * SNMP_MIB_MAX);
3224    
3225     snmp_get_cpu_field64_batch(buff64, itemlist, mib, syncpoff);
3226     for (i = 0; itemlist[i].name; i++)
3227     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
3228     index d316d00e11ab..1072fc189708 100644
3229     --- a/net/ipv6/route.c
3230     +++ b/net/ipv6/route.c
3231     @@ -2804,6 +2804,7 @@ static int fib6_ifdown(struct rt6_info *rt, void *arg)
3232     if ((rt->dst.dev == dev || !dev) &&
3233     rt != adn->net->ipv6.ip6_null_entry &&
3234     (rt->rt6i_nsiblings == 0 ||
3235     + (dev && netdev_unregistering(dev)) ||
3236     !rt->rt6i_idev->cnf.ignore_routes_with_linkdown))
3237     return -1;
3238    
3239     diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
3240     index 99853c6e33a8..4f07a211ac2a 100644
3241     --- a/net/ipv6/sit.c
3242     +++ b/net/ipv6/sit.c
3243     @@ -265,7 +265,7 @@ static struct ip_tunnel *ipip6_tunnel_locate(struct net *net,
3244     return nt;
3245    
3246     failed_free:
3247     - ipip6_dev_free(dev);
3248     + free_netdev(dev);
3249     failed:
3250     return NULL;
3251     }
3252     @@ -1333,7 +1333,6 @@ static void ipip6_dev_free(struct net_device *dev)
3253    
3254     dst_cache_destroy(&tunnel->dst_cache);
3255     free_percpu(dev->tstats);
3256     - free_netdev(dev);
3257     }
3258    
3259     #define SIT_FEATURES (NETIF_F_SG | \
3260     @@ -1348,7 +1347,8 @@ static void ipip6_tunnel_setup(struct net_device *dev)
3261     int t_hlen = tunnel->hlen + sizeof(struct iphdr);
3262    
3263     dev->netdev_ops = &ipip6_netdev_ops;
3264     - dev->destructor = ipip6_dev_free;
3265     + dev->needs_free_netdev = true;
3266     + dev->priv_destructor = ipip6_dev_free;
3267    
3268     dev->type = ARPHRD_SIT;
3269     dev->hard_header_len = LL_MAX_HEADER + t_hlen;
3270     diff --git a/net/ipv6/xfrm6_input.c b/net/ipv6/xfrm6_input.c
3271     index 08a807b29298..3ef5d913e7a3 100644
3272     --- a/net/ipv6/xfrm6_input.c
3273     +++ b/net/ipv6/xfrm6_input.c
3274     @@ -43,8 +43,8 @@ int xfrm6_transport_finish(struct sk_buff *skb, int async)
3275     return 1;
3276     #endif
3277    
3278     - ipv6_hdr(skb)->payload_len = htons(skb->len);
3279     __skb_push(skb, skb->data - skb_network_header(skb));
3280     + ipv6_hdr(skb)->payload_len = htons(skb->len - sizeof(struct ipv6hdr));
3281    
3282     if (xo && (xo->flags & XFRM_GRO)) {
3283     skb_mac_header_rebuild(skb);
3284     diff --git a/net/irda/irlan/irlan_eth.c b/net/irda/irlan/irlan_eth.c
3285     index 74d09f91709e..3be852808a9d 100644
3286     --- a/net/irda/irlan/irlan_eth.c
3287     +++ b/net/irda/irlan/irlan_eth.c
3288     @@ -65,7 +65,7 @@ static void irlan_eth_setup(struct net_device *dev)
3289     ether_setup(dev);
3290    
3291     dev->netdev_ops = &irlan_eth_netdev_ops;
3292     - dev->destructor = free_netdev;
3293     + dev->needs_free_netdev = true;
3294     dev->min_mtu = 0;
3295     dev->max_mtu = ETH_MAX_MTU;
3296    
3297     diff --git a/net/key/af_key.c b/net/key/af_key.c
3298     index be8cecc65002..358175c83180 100644
3299     --- a/net/key/af_key.c
3300     +++ b/net/key/af_key.c
3301     @@ -1157,6 +1157,7 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
3302     goto out;
3303     }
3304    
3305     + err = -ENOBUFS;
3306     key = ext_hdrs[SADB_EXT_KEY_AUTH - 1];
3307     if (sa->sadb_sa_auth) {
3308     int keysize = 0;
3309     @@ -1168,8 +1169,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
3310     if (key)
3311     keysize = (key->sadb_key_bits + 7) / 8;
3312     x->aalg = kmalloc(sizeof(*x->aalg) + keysize, GFP_KERNEL);
3313     - if (!x->aalg)
3314     + if (!x->aalg) {
3315     + err = -ENOMEM;
3316     goto out;
3317     + }
3318     strcpy(x->aalg->alg_name, a->name);
3319     x->aalg->alg_key_len = 0;
3320     if (key) {
3321     @@ -1188,8 +1191,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
3322     goto out;
3323     }
3324     x->calg = kmalloc(sizeof(*x->calg), GFP_KERNEL);
3325     - if (!x->calg)
3326     + if (!x->calg) {
3327     + err = -ENOMEM;
3328     goto out;
3329     + }
3330     strcpy(x->calg->alg_name, a->name);
3331     x->props.calgo = sa->sadb_sa_encrypt;
3332     } else {
3333     @@ -1203,8 +1208,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
3334     if (key)
3335     keysize = (key->sadb_key_bits + 7) / 8;
3336     x->ealg = kmalloc(sizeof(*x->ealg) + keysize, GFP_KERNEL);
3337     - if (!x->ealg)
3338     + if (!x->ealg) {
3339     + err = -ENOMEM;
3340     goto out;
3341     + }
3342     strcpy(x->ealg->alg_name, a->name);
3343     x->ealg->alg_key_len = 0;
3344     if (key) {
3345     @@ -1249,8 +1256,10 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net,
3346     struct xfrm_encap_tmpl *natt;
3347    
3348     x->encap = kmalloc(sizeof(*x->encap), GFP_KERNEL);
3349     - if (!x->encap)
3350     + if (!x->encap) {
3351     + err = -ENOMEM;
3352     goto out;
3353     + }
3354    
3355     natt = x->encap;
3356     n_type = ext_hdrs[SADB_X_EXT_NAT_T_TYPE-1];
3357     @@ -2755,6 +2764,8 @@ static int pfkey_spdflush(struct sock *sk, struct sk_buff *skb, const struct sad
3358     int err, err2;
3359    
3360     err = xfrm_policy_flush(net, XFRM_POLICY_TYPE_MAIN, true);
3361     + if (!err)
3362     + xfrm_garbage_collect(net);
3363     err2 = unicast_flush_resp(sk, hdr);
3364     if (err || err2) {
3365     if (err == -ESRCH) /* empty table - old silent behavior */
3366     diff --git a/net/l2tp/l2tp_eth.c b/net/l2tp/l2tp_eth.c
3367     index 6fd41d7afe1e..cafb667b3c85 100644
3368     --- a/net/l2tp/l2tp_eth.c
3369     +++ b/net/l2tp/l2tp_eth.c
3370     @@ -133,7 +133,7 @@ static void l2tp_eth_dev_setup(struct net_device *dev)
3371     dev->priv_flags &= ~IFF_TX_SKB_SHARING;
3372     dev->features |= NETIF_F_LLTX;
3373     dev->netdev_ops = &l2tp_eth_netdev_ops;
3374     - dev->destructor = free_netdev;
3375     + dev->needs_free_netdev = true;
3376     }
3377    
3378     static void l2tp_eth_dev_recv(struct l2tp_session *session, struct sk_buff *skb, int data_len)
3379     diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
3380     index 5bb0c5012819..8f783d527f29 100644
3381     --- a/net/mac80211/iface.c
3382     +++ b/net/mac80211/iface.c
3383     @@ -1198,7 +1198,6 @@ static const struct net_device_ops ieee80211_monitorif_ops = {
3384     static void ieee80211_if_free(struct net_device *dev)
3385     {
3386     free_percpu(dev->tstats);
3387     - free_netdev(dev);
3388     }
3389    
3390     static void ieee80211_if_setup(struct net_device *dev)
3391     @@ -1206,7 +1205,8 @@ static void ieee80211_if_setup(struct net_device *dev)
3392     ether_setup(dev);
3393     dev->priv_flags &= ~IFF_TX_SKB_SHARING;
3394     dev->netdev_ops = &ieee80211_dataif_ops;
3395     - dev->destructor = ieee80211_if_free;
3396     + dev->needs_free_netdev = true;
3397     + dev->priv_destructor = ieee80211_if_free;
3398     }
3399    
3400     static void ieee80211_if_setup_no_queue(struct net_device *dev)
3401     @@ -1810,6 +1810,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
3402     ret = dev_alloc_name(ndev, ndev->name);
3403     if (ret < 0) {
3404     ieee80211_if_free(ndev);
3405     + free_netdev(ndev);
3406     return ret;
3407     }
3408    
3409     @@ -1899,7 +1900,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
3410    
3411     ret = register_netdevice(ndev);
3412     if (ret) {
3413     - ieee80211_if_free(ndev);
3414     + free_netdev(ndev);
3415     return ret;
3416     }
3417     }
3418     diff --git a/net/mac802154/iface.c b/net/mac802154/iface.c
3419     index 06019dba4b10..bd88a9b80773 100644
3420     --- a/net/mac802154/iface.c
3421     +++ b/net/mac802154/iface.c
3422     @@ -526,8 +526,6 @@ static void mac802154_wpan_free(struct net_device *dev)
3423     struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
3424    
3425     mac802154_llsec_destroy(&sdata->sec);
3426     -
3427     - free_netdev(dev);
3428     }
3429    
3430     static void ieee802154_if_setup(struct net_device *dev)
3431     @@ -593,7 +591,8 @@ ieee802154_setup_sdata(struct ieee802154_sub_if_data *sdata,
3432     sdata->dev->dev_addr);
3433    
3434     sdata->dev->header_ops = &mac802154_header_ops;
3435     - sdata->dev->destructor = mac802154_wpan_free;
3436     + sdata->dev->needs_free_netdev = true;
3437     + sdata->dev->priv_destructor = mac802154_wpan_free;
3438     sdata->dev->netdev_ops = &mac802154_wpan_ops;
3439     sdata->dev->ml_priv = &mac802154_mlme_wpan;
3440     wpan_dev->promiscuous_mode = false;
3441     @@ -608,7 +607,7 @@ ieee802154_setup_sdata(struct ieee802154_sub_if_data *sdata,
3442    
3443     break;
3444     case NL802154_IFTYPE_MONITOR:
3445     - sdata->dev->destructor = free_netdev;
3446     + sdata->dev->needs_free_netdev = true;
3447     sdata->dev->netdev_ops = &mac802154_monitor_ops;
3448     wpan_dev->promiscuous_mode = true;
3449     break;
3450     diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
3451     index dc7dfd68fafe..8555659d2e07 100644
3452     --- a/net/netfilter/nf_conntrack_netlink.c
3453     +++ b/net/netfilter/nf_conntrack_netlink.c
3454     @@ -45,6 +45,8 @@
3455     #include <net/netfilter/nf_conntrack_zones.h>
3456     #include <net/netfilter/nf_conntrack_timestamp.h>
3457     #include <net/netfilter/nf_conntrack_labels.h>
3458     +#include <net/netfilter/nf_conntrack_seqadj.h>
3459     +#include <net/netfilter/nf_conntrack_synproxy.h>
3460     #ifdef CONFIG_NF_NAT_NEEDED
3461     #include <net/netfilter/nf_nat_core.h>
3462     #include <net/netfilter/nf_nat_l4proto.h>
3463     @@ -1814,6 +1816,8 @@ ctnetlink_create_conntrack(struct net *net,
3464     nf_ct_tstamp_ext_add(ct, GFP_ATOMIC);
3465     nf_ct_ecache_ext_add(ct, 0, 0, GFP_ATOMIC);
3466     nf_ct_labels_ext_add(ct);
3467     + nfct_seqadj_ext_add(ct);
3468     + nfct_synproxy_ext_add(ct);
3469    
3470     /* we must add conntrack extensions before confirmation. */
3471     ct->status |= IPS_CONFIRMED;
3472     diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
3473     index 89193a634da4..04a3128adcf0 100644
3474     --- a/net/openvswitch/vport-internal_dev.c
3475     +++ b/net/openvswitch/vport-internal_dev.c
3476     @@ -94,7 +94,6 @@ static void internal_dev_destructor(struct net_device *dev)
3477     struct vport *vport = ovs_internal_dev_get_vport(dev);
3478    
3479     ovs_vport_free(vport);
3480     - free_netdev(dev);
3481     }
3482    
3483     static void
3484     @@ -156,7 +155,8 @@ static void do_setup(struct net_device *netdev)
3485     netdev->priv_flags &= ~IFF_TX_SKB_SHARING;
3486     netdev->priv_flags |= IFF_LIVE_ADDR_CHANGE | IFF_OPENVSWITCH |
3487     IFF_PHONY_HEADROOM | IFF_NO_QUEUE;
3488     - netdev->destructor = internal_dev_destructor;
3489     + netdev->needs_free_netdev = true;
3490     + netdev->priv_destructor = internal_dev_destructor;
3491     netdev->ethtool_ops = &internal_dev_ethtool_ops;
3492     netdev->rtnl_link_ops = &internal_dev_link_ops;
3493    
3494     diff --git a/net/phonet/pep-gprs.c b/net/phonet/pep-gprs.c
3495     index 21c28b51be94..2c9337946e30 100644
3496     --- a/net/phonet/pep-gprs.c
3497     +++ b/net/phonet/pep-gprs.c
3498     @@ -236,7 +236,7 @@ static void gprs_setup(struct net_device *dev)
3499     dev->tx_queue_len = 10;
3500    
3501     dev->netdev_ops = &gprs_netdev_ops;
3502     - dev->destructor = free_netdev;
3503     + dev->needs_free_netdev = true;
3504     }
3505    
3506     /*
3507     diff --git a/net/sctp/socket.c b/net/sctp/socket.c
3508     index d9d4c92e06b3..74f761022450 100644
3509     --- a/net/sctp/socket.c
3510     +++ b/net/sctp/socket.c
3511     @@ -4586,13 +4586,13 @@ int sctp_for_each_endpoint(int (*cb)(struct sctp_endpoint *, void *),
3512    
3513     for (head = sctp_ep_hashtable; hash < sctp_ep_hashsize;
3514     hash++, head++) {
3515     - read_lock(&head->lock);
3516     + read_lock_bh(&head->lock);
3517     sctp_for_each_hentry(epb, &head->chain) {
3518     err = cb(sctp_ep(epb), p);
3519     if (err)
3520     break;
3521     }
3522     - read_unlock(&head->lock);
3523     + read_unlock_bh(&head->lock);
3524     }
3525    
3526     return err;
3527     @@ -4630,9 +4630,8 @@ int sctp_for_each_transport(int (*cb)(struct sctp_transport *, void *),
3528     if (err)
3529     return err;
3530    
3531     - sctp_transport_get_idx(net, &hti, pos);
3532     - obj = sctp_transport_get_next(net, &hti);
3533     - for (; obj && !IS_ERR(obj); obj = sctp_transport_get_next(net, &hti)) {
3534     + obj = sctp_transport_get_idx(net, &hti, pos + 1);
3535     + for (; !IS_ERR_OR_NULL(obj); obj = sctp_transport_get_next(net, &hti)) {
3536     struct sctp_transport *transport = obj;
3537    
3538     if (!sctp_transport_hold(transport))
3539     diff --git a/net/tipc/msg.c b/net/tipc/msg.c
3540     index 312ef7de57d7..ab3087687a32 100644
3541     --- a/net/tipc/msg.c
3542     +++ b/net/tipc/msg.c
3543     @@ -508,7 +508,7 @@ bool tipc_msg_reverse(u32 own_node, struct sk_buff **skb, int err)
3544     }
3545    
3546     if (skb_cloned(_skb) &&
3547     - pskb_expand_head(_skb, BUF_HEADROOM, BUF_TAILROOM, GFP_KERNEL))
3548     + pskb_expand_head(_skb, BUF_HEADROOM, BUF_TAILROOM, GFP_ATOMIC))
3549     goto exit;
3550    
3551     /* Now reverse the concerned fields */
3552     diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
3553     index 928691c43408..475e1170597c 100644
3554     --- a/net/unix/af_unix.c
3555     +++ b/net/unix/af_unix.c
3556     @@ -999,7 +999,8 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
3557     struct path path = { NULL, NULL };
3558    
3559     err = -EINVAL;
3560     - if (sunaddr->sun_family != AF_UNIX)
3561     + if (addr_len < offsetofend(struct sockaddr_un, sun_family) ||
3562     + sunaddr->sun_family != AF_UNIX)
3563     goto out;
3564    
3565     if (addr_len == sizeof(short)) {
3566     @@ -1110,6 +1111,10 @@ static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr,
3567     unsigned int hash;
3568     int err;
3569    
3570     + err = -EINVAL;
3571     + if (alen < offsetofend(struct sockaddr, sa_family))
3572     + goto out;
3573     +
3574     if (addr->sa_family != AF_UNSPEC) {
3575     err = unix_mkname(sunaddr, alen, &hash);
3576     if (err < 0)
3577     diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
3578     index dfc77b9c5e5a..56fba8f073f5 100644
3579     --- a/net/xfrm/xfrm_policy.c
3580     +++ b/net/xfrm/xfrm_policy.c
3581     @@ -1006,10 +1006,6 @@ int xfrm_policy_flush(struct net *net, u8 type, bool task_valid)
3582     err = -ESRCH;
3583     out:
3584     spin_unlock_bh(&net->xfrm.xfrm_policy_lock);
3585     -
3586     - if (cnt)
3587     - xfrm_garbage_collect(net);
3588     -
3589     return err;
3590     }
3591     EXPORT_SYMBOL(xfrm_policy_flush);
3592     @@ -1797,43 +1793,6 @@ static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy,
3593     goto out;
3594     }
3595    
3596     -#ifdef CONFIG_XFRM_SUB_POLICY
3597     -static int xfrm_dst_alloc_copy(void **target, const void *src, int size)
3598     -{
3599     - if (!*target) {
3600     - *target = kmalloc(size, GFP_ATOMIC);
3601     - if (!*target)
3602     - return -ENOMEM;
3603     - }
3604     -
3605     - memcpy(*target, src, size);
3606     - return 0;
3607     -}
3608     -#endif
3609     -
3610     -static int xfrm_dst_update_parent(struct dst_entry *dst,
3611     - const struct xfrm_selector *sel)
3612     -{
3613     -#ifdef CONFIG_XFRM_SUB_POLICY
3614     - struct xfrm_dst *xdst = (struct xfrm_dst *)dst;
3615     - return xfrm_dst_alloc_copy((void **)&(xdst->partner),
3616     - sel, sizeof(*sel));
3617     -#else
3618     - return 0;
3619     -#endif
3620     -}
3621     -
3622     -static int xfrm_dst_update_origin(struct dst_entry *dst,
3623     - const struct flowi *fl)
3624     -{
3625     -#ifdef CONFIG_XFRM_SUB_POLICY
3626     - struct xfrm_dst *xdst = (struct xfrm_dst *)dst;
3627     - return xfrm_dst_alloc_copy((void **)&(xdst->origin), fl, sizeof(*fl));
3628     -#else
3629     - return 0;
3630     -#endif
3631     -}
3632     -
3633     static int xfrm_expand_policies(const struct flowi *fl, u16 family,
3634     struct xfrm_policy **pols,
3635     int *num_pols, int *num_xfrms)
3636     @@ -1905,16 +1864,6 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols,
3637    
3638     xdst = (struct xfrm_dst *)dst;
3639     xdst->num_xfrms = err;
3640     - if (num_pols > 1)
3641     - err = xfrm_dst_update_parent(dst, &pols[1]->selector);
3642     - else
3643     - err = xfrm_dst_update_origin(dst, fl);
3644     - if (unlikely(err)) {
3645     - dst_free(dst);
3646     - XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTBUNDLECHECKERROR);
3647     - return ERR_PTR(err);
3648     - }
3649     -
3650     xdst->num_pols = num_pols;
3651     memcpy(xdst->pols, pols, sizeof(struct xfrm_policy *) * num_pols);
3652     xdst->policy_genid = atomic_read(&pols[0]->genid);
3653     diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
3654     index 40a8aa39220d..66698552fbd6 100644
3655     --- a/net/xfrm/xfrm_user.c
3656     +++ b/net/xfrm/xfrm_user.c
3657     @@ -1999,6 +1999,7 @@ static int xfrm_flush_policy(struct sk_buff *skb, struct nlmsghdr *nlh,
3658     return 0;
3659     return err;
3660     }
3661     + xfrm_garbage_collect(net);
3662    
3663     c.data.type = type;
3664     c.event = nlh->nlmsg_type;
3665     diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
3666     index f17f25245e52..a206320b8eea 100644
3667     --- a/sound/pci/hda/hda_codec.h
3668     +++ b/sound/pci/hda/hda_codec.h
3669     @@ -294,6 +294,8 @@ struct hda_codec {
3670    
3671     #define list_for_each_codec(c, bus) \
3672     list_for_each_entry(c, &(bus)->core.codec_list, core.list)
3673     +#define list_for_each_codec_safe(c, n, bus) \
3674     + list_for_each_entry_safe(c, n, &(bus)->core.codec_list, core.list)
3675    
3676     /* snd_hda_codec_read/write optional flags */
3677     #define HDA_RW_NO_RESPONSE_FALLBACK (1 << 0)
3678     diff --git a/sound/pci/hda/hda_controller.c b/sound/pci/hda/hda_controller.c
3679     index 3715a5725613..1c60beb5b70a 100644
3680     --- a/sound/pci/hda/hda_controller.c
3681     +++ b/sound/pci/hda/hda_controller.c
3682     @@ -1337,8 +1337,12 @@ EXPORT_SYMBOL_GPL(azx_probe_codecs);
3683     /* configure each codec instance */
3684     int azx_codec_configure(struct azx *chip)
3685     {
3686     - struct hda_codec *codec;
3687     - list_for_each_codec(codec, &chip->bus) {
3688     + struct hda_codec *codec, *next;
3689     +
3690     + /* use _safe version here since snd_hda_codec_configure() deregisters
3691     + * the device upon error and deletes itself from the bus list.
3692     + */
3693     + list_for_each_codec_safe(codec, next, &chip->bus) {
3694     snd_hda_codec_configure(codec);
3695     }
3696     return 0;
3697     diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
3698     index e7c8f4f076d5..b0bd29003b5d 100644
3699     --- a/sound/pci/hda/hda_generic.c
3700     +++ b/sound/pci/hda/hda_generic.c
3701     @@ -3169,6 +3169,7 @@ static int check_dyn_adc_switch(struct hda_codec *codec)
3702     spec->input_paths[i][nums]);
3703     spec->input_paths[i][nums] =
3704     spec->input_paths[i][n];
3705     + spec->input_paths[i][n] = 0;
3706     }
3707     }
3708     nums++;
3709     diff --git a/tools/arch/x86/lib/memcpy_64.S b/tools/arch/x86/lib/memcpy_64.S
3710     index 49e6ebac7e73..98dcc112b363 100644
3711     --- a/tools/arch/x86/lib/memcpy_64.S
3712     +++ b/tools/arch/x86/lib/memcpy_64.S
3713     @@ -286,7 +286,7 @@ ENDPROC(memcpy_mcsafe_unrolled)
3714     _ASM_EXTABLE_FAULT(.L_copy_leading_bytes, .L_memcpy_mcsafe_fail)
3715     _ASM_EXTABLE_FAULT(.L_cache_w0, .L_memcpy_mcsafe_fail)
3716     _ASM_EXTABLE_FAULT(.L_cache_w1, .L_memcpy_mcsafe_fail)
3717     - _ASM_EXTABLE_FAULT(.L_cache_w3, .L_memcpy_mcsafe_fail)
3718     + _ASM_EXTABLE_FAULT(.L_cache_w2, .L_memcpy_mcsafe_fail)
3719     _ASM_EXTABLE_FAULT(.L_cache_w3, .L_memcpy_mcsafe_fail)
3720     _ASM_EXTABLE_FAULT(.L_cache_w4, .L_memcpy_mcsafe_fail)
3721     _ASM_EXTABLE_FAULT(.L_cache_w5, .L_memcpy_mcsafe_fail)