Magellan Linux

Annotation of /trunk/kernel-alx-legacy/patches-4.9/0173-4.9.74-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (hide annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 8 months ago) by niro
File size: 98884 byte(s)
-added kerenl-alx-legacy pkg
1 niro 3608 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
2     index 86a6746f6833..152ec4e87b57 100644
3     --- a/Documentation/kernel-parameters.txt
4     +++ b/Documentation/kernel-parameters.txt
5     @@ -2795,6 +2795,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
6     nopat [X86] Disable PAT (page attribute table extension of
7     pagetables) support.
8    
9     + nopcid [X86-64] Disable the PCID cpu feature.
10     +
11     norandmaps Don't use address space randomization. Equivalent to
12     echo 0 > /proc/sys/kernel/randomize_va_space
13    
14     diff --git a/Makefile b/Makefile
15     index 64eb0bf614ee..075e429732e7 100644
16     --- a/Makefile
17     +++ b/Makefile
18     @@ -1,6 +1,6 @@
19     VERSION = 4
20     PATCHLEVEL = 9
21     -SUBLEVEL = 73
22     +SUBLEVEL = 74
23     EXTRAVERSION =
24     NAME = Roaring Lionus
25    
26     @@ -788,6 +788,9 @@ KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign)
27     # disable invalid "can't wrap" optimizations for signed / pointers
28     KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
29    
30     +# Make sure -fstack-check isn't enabled (like gentoo apparently did)
31     +KBUILD_CFLAGS += $(call cc-option,-fno-stack-check,)
32     +
33     # conserve stack if available
34     KBUILD_CFLAGS += $(call cc-option,-fconserve-stack)
35    
36     diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
37     index b9c546a305a4..da8156fd3d58 100644
38     --- a/arch/x86/Kconfig
39     +++ b/arch/x86/Kconfig
40     @@ -45,7 +45,7 @@ config X86
41     select ARCH_USE_CMPXCHG_LOCKREF if X86_64
42     select ARCH_USE_QUEUED_RWLOCKS
43     select ARCH_USE_QUEUED_SPINLOCKS
44     - select ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH if SMP
45     + select ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
46     select ARCH_WANTS_DYNAMIC_TASK_STRUCT
47     select ARCH_WANT_FRAME_POINTERS
48     select ARCH_WANT_IPC_PARSE_VERSION if X86_32
49     diff --git a/arch/x86/include/asm/disabled-features.h b/arch/x86/include/asm/disabled-features.h
50     index 85599ad4d024..21c5ac15657b 100644
51     --- a/arch/x86/include/asm/disabled-features.h
52     +++ b/arch/x86/include/asm/disabled-features.h
53     @@ -21,11 +21,13 @@
54     # define DISABLE_K6_MTRR (1<<(X86_FEATURE_K6_MTRR & 31))
55     # define DISABLE_CYRIX_ARR (1<<(X86_FEATURE_CYRIX_ARR & 31))
56     # define DISABLE_CENTAUR_MCR (1<<(X86_FEATURE_CENTAUR_MCR & 31))
57     +# define DISABLE_PCID 0
58     #else
59     # define DISABLE_VME 0
60     # define DISABLE_K6_MTRR 0
61     # define DISABLE_CYRIX_ARR 0
62     # define DISABLE_CENTAUR_MCR 0
63     +# define DISABLE_PCID (1<<(X86_FEATURE_PCID & 31))
64     #endif /* CONFIG_X86_64 */
65    
66     #ifdef CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS
67     @@ -43,7 +45,7 @@
68     #define DISABLED_MASK1 0
69     #define DISABLED_MASK2 0
70     #define DISABLED_MASK3 (DISABLE_CYRIX_ARR|DISABLE_CENTAUR_MCR|DISABLE_K6_MTRR)
71     -#define DISABLED_MASK4 0
72     +#define DISABLED_MASK4 (DISABLE_PCID)
73     #define DISABLED_MASK5 0
74     #define DISABLED_MASK6 0
75     #define DISABLED_MASK7 0
76     diff --git a/arch/x86/include/asm/hardirq.h b/arch/x86/include/asm/hardirq.h
77     index 59405a248fc2..9b76cd331990 100644
78     --- a/arch/x86/include/asm/hardirq.h
79     +++ b/arch/x86/include/asm/hardirq.h
80     @@ -22,8 +22,8 @@ typedef struct {
81     #ifdef CONFIG_SMP
82     unsigned int irq_resched_count;
83     unsigned int irq_call_count;
84     - unsigned int irq_tlb_count;
85     #endif
86     + unsigned int irq_tlb_count;
87     #ifdef CONFIG_X86_THERMAL_VECTOR
88     unsigned int irq_thermal_count;
89     #endif
90     diff --git a/arch/x86/include/asm/mmu.h b/arch/x86/include/asm/mmu.h
91     index 72198c64e646..8b272a08d1a8 100644
92     --- a/arch/x86/include/asm/mmu.h
93     +++ b/arch/x86/include/asm/mmu.h
94     @@ -33,12 +33,6 @@ typedef struct {
95     #endif
96     } mm_context_t;
97    
98     -#ifdef CONFIG_SMP
99     void leave_mm(int cpu);
100     -#else
101     -static inline void leave_mm(int cpu)
102     -{
103     -}
104     -#endif
105    
106     #endif /* _ASM_X86_MMU_H */
107     diff --git a/arch/x86/include/asm/mmu_context.h b/arch/x86/include/asm/mmu_context.h
108     index f9dd22469388..d23e35584f15 100644
109     --- a/arch/x86/include/asm/mmu_context.h
110     +++ b/arch/x86/include/asm/mmu_context.h
111     @@ -99,10 +99,8 @@ static inline void load_mm_ldt(struct mm_struct *mm)
112    
113     static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
114     {
115     -#ifdef CONFIG_SMP
116     if (this_cpu_read(cpu_tlbstate.state) == TLBSTATE_OK)
117     this_cpu_write(cpu_tlbstate.state, TLBSTATE_LAZY);
118     -#endif
119     }
120    
121     static inline int init_new_context(struct task_struct *tsk,
122     diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
123     index fc5abff9b7fd..7d2ea6b1f7d9 100644
124     --- a/arch/x86/include/asm/tlbflush.h
125     +++ b/arch/x86/include/asm/tlbflush.h
126     @@ -7,6 +7,7 @@
127     #include <asm/processor.h>
128     #include <asm/cpufeature.h>
129     #include <asm/special_insns.h>
130     +#include <asm/smp.h>
131    
132     static inline void __invpcid(unsigned long pcid, unsigned long addr,
133     unsigned long type)
134     @@ -65,10 +66,8 @@ static inline void invpcid_flush_all_nonglobals(void)
135     #endif
136    
137     struct tlb_state {
138     -#ifdef CONFIG_SMP
139     struct mm_struct *active_mm;
140     int state;
141     -#endif
142    
143     /*
144     * Access to this CR4 shadow and to H/W CR4 is protected by
145     @@ -192,6 +191,14 @@ static inline void __flush_tlb_all(void)
146     __flush_tlb_global();
147     else
148     __flush_tlb();
149     +
150     + /*
151     + * Note: if we somehow had PCID but not PGE, then this wouldn't work --
152     + * we'd end up flushing kernel translations for the current ASID but
153     + * we might fail to flush kernel translations for other cached ASIDs.
154     + *
155     + * To avoid this issue, we force PCID off if PGE is off.
156     + */
157     }
158    
159     static inline void __flush_tlb_one(unsigned long addr)
160     @@ -205,7 +212,6 @@ static inline void __flush_tlb_one(unsigned long addr)
161     /*
162     * TLB flushing:
163     *
164     - * - flush_tlb() flushes the current mm struct TLBs
165     * - flush_tlb_all() flushes all processes TLBs
166     * - flush_tlb_mm(mm) flushes the specified mm context TLB's
167     * - flush_tlb_page(vma, vmaddr) flushes one page
168     @@ -217,84 +223,6 @@ static inline void __flush_tlb_one(unsigned long addr)
169     * and page-granular flushes are available only on i486 and up.
170     */
171    
172     -#ifndef CONFIG_SMP
173     -
174     -/* "_up" is for UniProcessor.
175     - *
176     - * This is a helper for other header functions. *Not* intended to be called
177     - * directly. All global TLB flushes need to either call this, or to bump the
178     - * vm statistics themselves.
179     - */
180     -static inline void __flush_tlb_up(void)
181     -{
182     - count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
183     - __flush_tlb();
184     -}
185     -
186     -static inline void flush_tlb_all(void)
187     -{
188     - count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
189     - __flush_tlb_all();
190     -}
191     -
192     -static inline void flush_tlb(void)
193     -{
194     - __flush_tlb_up();
195     -}
196     -
197     -static inline void local_flush_tlb(void)
198     -{
199     - __flush_tlb_up();
200     -}
201     -
202     -static inline void flush_tlb_mm(struct mm_struct *mm)
203     -{
204     - if (mm == current->active_mm)
205     - __flush_tlb_up();
206     -}
207     -
208     -static inline void flush_tlb_page(struct vm_area_struct *vma,
209     - unsigned long addr)
210     -{
211     - if (vma->vm_mm == current->active_mm)
212     - __flush_tlb_one(addr);
213     -}
214     -
215     -static inline void flush_tlb_range(struct vm_area_struct *vma,
216     - unsigned long start, unsigned long end)
217     -{
218     - if (vma->vm_mm == current->active_mm)
219     - __flush_tlb_up();
220     -}
221     -
222     -static inline void flush_tlb_mm_range(struct mm_struct *mm,
223     - unsigned long start, unsigned long end, unsigned long vmflag)
224     -{
225     - if (mm == current->active_mm)
226     - __flush_tlb_up();
227     -}
228     -
229     -static inline void native_flush_tlb_others(const struct cpumask *cpumask,
230     - struct mm_struct *mm,
231     - unsigned long start,
232     - unsigned long end)
233     -{
234     -}
235     -
236     -static inline void reset_lazy_tlbstate(void)
237     -{
238     -}
239     -
240     -static inline void flush_tlb_kernel_range(unsigned long start,
241     - unsigned long end)
242     -{
243     - flush_tlb_all();
244     -}
245     -
246     -#else /* SMP */
247     -
248     -#include <asm/smp.h>
249     -
250     #define local_flush_tlb() __flush_tlb()
251    
252     #define flush_tlb_mm(mm) flush_tlb_mm_range(mm, 0UL, TLB_FLUSH_ALL, 0UL)
253     @@ -303,13 +231,14 @@ static inline void flush_tlb_kernel_range(unsigned long start,
254     flush_tlb_mm_range(vma->vm_mm, start, end, vma->vm_flags)
255    
256     extern void flush_tlb_all(void);
257     -extern void flush_tlb_current_task(void);
258     -extern void flush_tlb_page(struct vm_area_struct *, unsigned long);
259     extern void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
260     unsigned long end, unsigned long vmflag);
261     extern void flush_tlb_kernel_range(unsigned long start, unsigned long end);
262    
263     -#define flush_tlb() flush_tlb_current_task()
264     +static inline void flush_tlb_page(struct vm_area_struct *vma, unsigned long a)
265     +{
266     + flush_tlb_mm_range(vma->vm_mm, a, a + PAGE_SIZE, VM_NONE);
267     +}
268    
269     void native_flush_tlb_others(const struct cpumask *cpumask,
270     struct mm_struct *mm,
271     @@ -324,8 +253,6 @@ static inline void reset_lazy_tlbstate(void)
272     this_cpu_write(cpu_tlbstate.active_mm, &init_mm);
273     }
274    
275     -#endif /* SMP */
276     -
277     #ifndef CONFIG_PARAVIRT
278     #define flush_tlb_others(mask, mm, start, end) \
279     native_flush_tlb_others(mask, mm, start, end)
280     diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
281     index bd17db15a2c1..0b6124315441 100644
282     --- a/arch/x86/kernel/cpu/bugs.c
283     +++ b/arch/x86/kernel/cpu/bugs.c
284     @@ -19,6 +19,14 @@
285    
286     void __init check_bugs(void)
287     {
288     +#ifdef CONFIG_X86_32
289     + /*
290     + * Regardless of whether PCID is enumerated, the SDM says
291     + * that it can't be enabled in 32-bit mode.
292     + */
293     + setup_clear_cpu_cap(X86_FEATURE_PCID);
294     +#endif
295     +
296     identify_boot_cpu();
297     #ifndef CONFIG_SMP
298     pr_info("CPU: ");
299     diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
300     index 4eece91ada37..91588be529b9 100644
301     --- a/arch/x86/kernel/cpu/common.c
302     +++ b/arch/x86/kernel/cpu/common.c
303     @@ -163,6 +163,24 @@ static int __init x86_mpx_setup(char *s)
304     }
305     __setup("nompx", x86_mpx_setup);
306    
307     +#ifdef CONFIG_X86_64
308     +static int __init x86_pcid_setup(char *s)
309     +{
310     + /* require an exact match without trailing characters */
311     + if (strlen(s))
312     + return 0;
313     +
314     + /* do not emit a message if the feature is not present */
315     + if (!boot_cpu_has(X86_FEATURE_PCID))
316     + return 1;
317     +
318     + setup_clear_cpu_cap(X86_FEATURE_PCID);
319     + pr_info("nopcid: PCID feature disabled\n");
320     + return 1;
321     +}
322     +__setup("nopcid", x86_pcid_setup);
323     +#endif
324     +
325     static int __init x86_noinvpcid_setup(char *s)
326     {
327     /* noinvpcid doesn't accept parameters */
328     @@ -306,6 +324,25 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
329     }
330     }
331    
332     +static void setup_pcid(struct cpuinfo_x86 *c)
333     +{
334     + if (cpu_has(c, X86_FEATURE_PCID)) {
335     + if (cpu_has(c, X86_FEATURE_PGE)) {
336     + cr4_set_bits(X86_CR4_PCIDE);
337     + } else {
338     + /*
339     + * flush_tlb_all(), as currently implemented, won't
340     + * work if PCID is on but PGE is not. Since that
341     + * combination doesn't exist on real hardware, there's
342     + * no reason to try to fully support it, but it's
343     + * polite to avoid corrupting data if we're on
344     + * an improperly configured VM.
345     + */
346     + clear_cpu_cap(c, X86_FEATURE_PCID);
347     + }
348     + }
349     +}
350     +
351     /*
352     * Protection Keys are not available in 32-bit mode.
353     */
354     @@ -1064,6 +1101,9 @@ static void identify_cpu(struct cpuinfo_x86 *c)
355     setup_smep(c);
356     setup_smap(c);
357    
358     + /* Set up PCID */
359     + setup_pcid(c);
360     +
361     /*
362     * The vendor-specific functions might have changed features.
363     * Now we do "generic changes."
364     diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
365     index 067f9813fd2c..ce020a69bba9 100644
366     --- a/arch/x86/kernel/reboot.c
367     +++ b/arch/x86/kernel/reboot.c
368     @@ -106,6 +106,10 @@ void __noreturn machine_real_restart(unsigned int type)
369     load_cr3(initial_page_table);
370     #else
371     write_cr3(real_mode_header->trampoline_pgd);
372     +
373     + /* Exiting long mode will fail if CR4.PCIDE is set. */
374     + if (static_cpu_has(X86_FEATURE_PCID))
375     + cr4_clear_bits(X86_CR4_PCIDE);
376     #endif
377    
378     /* Jump to the identity-mapped low memory code */
379     diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
380     index 9fe7b9e1ae30..e803d72ef525 100644
381     --- a/arch/x86/kernel/smpboot.c
382     +++ b/arch/x86/kernel/smpboot.c
383     @@ -115,25 +115,16 @@ static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip)
384     spin_lock_irqsave(&rtc_lock, flags);
385     CMOS_WRITE(0xa, 0xf);
386     spin_unlock_irqrestore(&rtc_lock, flags);
387     - local_flush_tlb();
388     - pr_debug("1.\n");
389     *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_HIGH)) =
390     start_eip >> 4;
391     - pr_debug("2.\n");
392     *((volatile unsigned short *)phys_to_virt(TRAMPOLINE_PHYS_LOW)) =
393     start_eip & 0xf;
394     - pr_debug("3.\n");
395     }
396    
397     static inline void smpboot_restore_warm_reset_vector(void)
398     {
399     unsigned long flags;
400    
401     - /*
402     - * Install writable page 0 entry to set BIOS data area.
403     - */
404     - local_flush_tlb();
405     -
406     /*
407     * Paranoid: Set warm reset code and vector here back
408     * to default values.
409     diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c
410     index 01f30e56f99e..4b3012888ada 100644
411     --- a/arch/x86/kernel/vm86_32.c
412     +++ b/arch/x86/kernel/vm86_32.c
413     @@ -191,7 +191,7 @@ static void mark_screen_rdonly(struct mm_struct *mm)
414     pte_unmap_unlock(pte, ptl);
415     out:
416     up_write(&mm->mmap_sem);
417     - flush_tlb();
418     + flush_tlb_mm_range(mm, 0xA0000, 0xA0000 + 32*PAGE_SIZE, 0UL);
419     }
420    
421    
422     diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
423     index 889e7619a091..0381638168d1 100644
424     --- a/arch/x86/mm/init.c
425     +++ b/arch/x86/mm/init.c
426     @@ -764,10 +764,8 @@ void __init zone_sizes_init(void)
427     }
428    
429     DEFINE_PER_CPU_SHARED_ALIGNED(struct tlb_state, cpu_tlbstate) = {
430     -#ifdef CONFIG_SMP
431     .active_mm = &init_mm,
432     .state = 0,
433     -#endif
434     .cr4 = ~0UL, /* fail hard if we screw up cr4 shadow initialization */
435     };
436     EXPORT_SYMBOL_GPL(cpu_tlbstate);
437     diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
438     index 75fb01109f94..53b72fb4e781 100644
439     --- a/arch/x86/mm/tlb.c
440     +++ b/arch/x86/mm/tlb.c
441     @@ -15,7 +15,7 @@
442     #include <linux/debugfs.h>
443    
444     /*
445     - * Smarter SMP flushing macros.
446     + * TLB flushing, formerly SMP-only
447     * c/o Linus Torvalds.
448     *
449     * These mean you can really definitely utterly forget about
450     @@ -28,8 +28,6 @@
451     * Implement flush IPI by CALL_FUNCTION_VECTOR, Alex Shi
452     */
453    
454     -#ifdef CONFIG_SMP
455     -
456     struct flush_tlb_info {
457     struct mm_struct *flush_mm;
458     unsigned long flush_start;
459     @@ -59,8 +57,6 @@ void leave_mm(int cpu)
460     }
461     EXPORT_SYMBOL_GPL(leave_mm);
462    
463     -#endif /* CONFIG_SMP */
464     -
465     void switch_mm(struct mm_struct *prev, struct mm_struct *next,
466     struct task_struct *tsk)
467     {
468     @@ -91,10 +87,8 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
469     set_pgd(pgd, init_mm.pgd[stack_pgd_index]);
470     }
471    
472     -#ifdef CONFIG_SMP
473     this_cpu_write(cpu_tlbstate.state, TLBSTATE_OK);
474     this_cpu_write(cpu_tlbstate.active_mm, next);
475     -#endif
476    
477     cpumask_set_cpu(cpu, mm_cpumask(next));
478    
479     @@ -152,9 +146,7 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
480     if (unlikely(prev->context.ldt != next->context.ldt))
481     load_mm_ldt(next);
482     #endif
483     - }
484     -#ifdef CONFIG_SMP
485     - else {
486     + } else {
487     this_cpu_write(cpu_tlbstate.state, TLBSTATE_OK);
488     BUG_ON(this_cpu_read(cpu_tlbstate.active_mm) != next);
489    
490     @@ -181,11 +173,8 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
491     load_mm_ldt(next);
492     }
493     }
494     -#endif
495     }
496    
497     -#ifdef CONFIG_SMP
498     -
499     /*
500     * The flush IPI assumes that a thread switch happens in this order:
501     * [cpu0: the cpu that switches]
502     @@ -287,23 +276,6 @@ void native_flush_tlb_others(const struct cpumask *cpumask,
503     smp_call_function_many(cpumask, flush_tlb_func, &info, 1);
504     }
505    
506     -void flush_tlb_current_task(void)
507     -{
508     - struct mm_struct *mm = current->mm;
509     -
510     - preempt_disable();
511     -
512     - count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
513     -
514     - /* This is an implicit full barrier that synchronizes with switch_mm. */
515     - local_flush_tlb();
516     -
517     - trace_tlb_flush(TLB_LOCAL_SHOOTDOWN, TLB_FLUSH_ALL);
518     - if (cpumask_any_but(mm_cpumask(mm), smp_processor_id()) < nr_cpu_ids)
519     - flush_tlb_others(mm_cpumask(mm), mm, 0UL, TLB_FLUSH_ALL);
520     - preempt_enable();
521     -}
522     -
523     /*
524     * See Documentation/x86/tlb.txt for details. We choose 33
525     * because it is large enough to cover the vast majority (at
526     @@ -324,6 +296,12 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
527     unsigned long base_pages_to_flush = TLB_FLUSH_ALL;
528    
529     preempt_disable();
530     +
531     + if ((end != TLB_FLUSH_ALL) && !(vmflag & VM_HUGETLB))
532     + base_pages_to_flush = (end - start) >> PAGE_SHIFT;
533     + if (base_pages_to_flush > tlb_single_page_flush_ceiling)
534     + base_pages_to_flush = TLB_FLUSH_ALL;
535     +
536     if (current->active_mm != mm) {
537     /* Synchronize with switch_mm. */
538     smp_mb();
539     @@ -340,15 +318,11 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
540     goto out;
541     }
542    
543     - if ((end != TLB_FLUSH_ALL) && !(vmflag & VM_HUGETLB))
544     - base_pages_to_flush = (end - start) >> PAGE_SHIFT;
545     -
546     /*
547     * Both branches below are implicit full barriers (MOV to CR or
548     * INVLPG) that synchronize with switch_mm.
549     */
550     - if (base_pages_to_flush > tlb_single_page_flush_ceiling) {
551     - base_pages_to_flush = TLB_FLUSH_ALL;
552     + if (base_pages_to_flush == TLB_FLUSH_ALL) {
553     count_vm_tlb_event(NR_TLB_LOCAL_FLUSH_ALL);
554     local_flush_tlb();
555     } else {
556     @@ -369,33 +343,6 @@ void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,
557     preempt_enable();
558     }
559    
560     -void flush_tlb_page(struct vm_area_struct *vma, unsigned long start)
561     -{
562     - struct mm_struct *mm = vma->vm_mm;
563     -
564     - preempt_disable();
565     -
566     - if (current->active_mm == mm) {
567     - if (current->mm) {
568     - /*
569     - * Implicit full barrier (INVLPG) that synchronizes
570     - * with switch_mm.
571     - */
572     - __flush_tlb_one(start);
573     - } else {
574     - leave_mm(smp_processor_id());
575     -
576     - /* Synchronize with switch_mm. */
577     - smp_mb();
578     - }
579     - }
580     -
581     - if (cpumask_any_but(mm_cpumask(mm), smp_processor_id()) < nr_cpu_ids)
582     - flush_tlb_others(mm_cpumask(mm), mm, start, start + PAGE_SIZE);
583     -
584     - preempt_enable();
585     -}
586     -
587     static void do_flush_tlb_all(void *info)
588     {
589     count_vm_tlb_event(NR_TLB_REMOTE_FLUSH_RECEIVED);
590     @@ -480,5 +427,3 @@ static int __init create_tlb_single_page_flush_ceiling(void)
591     return 0;
592     }
593     late_initcall(create_tlb_single_page_flush_ceiling);
594     -
595     -#endif /* CONFIG_SMP */
596     diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
597     index 8f1f7efa848c..2bea87cc0ff2 100644
598     --- a/arch/x86/xen/enlighten.c
599     +++ b/arch/x86/xen/enlighten.c
600     @@ -444,6 +444,12 @@ static void __init xen_init_cpuid_mask(void)
601     ~((1 << X86_FEATURE_MTRR) | /* disable MTRR */
602     (1 << X86_FEATURE_ACC)); /* thermal monitoring */
603    
604     + /*
605     + * Xen PV would need some work to support PCID: CR3 handling as well
606     + * as xen_flush_tlb_others() would need updating.
607     + */
608     + cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_PCID % 32)); /* disable PCID */
609     +
610     if (!xen_initial_domain())
611     cpuid_leaf1_edx_mask &=
612     ~((1 << X86_FEATURE_ACPI)); /* disable ACPI */
613     diff --git a/drivers/infiniband/hw/cxgb4/cq.c b/drivers/infiniband/hw/cxgb4/cq.c
614     index 19c6477af19f..a856371bbe58 100644
615     --- a/drivers/infiniband/hw/cxgb4/cq.c
616     +++ b/drivers/infiniband/hw/cxgb4/cq.c
617     @@ -575,10 +575,10 @@ static int poll_cq(struct t4_wq *wq, struct t4_cq *cq, struct t4_cqe *cqe,
618     ret = -EAGAIN;
619     goto skip_cqe;
620     }
621     - if (unlikely((CQE_WRID_MSN(hw_cqe) != (wq->rq.msn)))) {
622     + if (unlikely(!CQE_STATUS(hw_cqe) &&
623     + CQE_WRID_MSN(hw_cqe) != wq->rq.msn)) {
624     t4_set_wq_in_error(wq);
625     - hw_cqe->header |= htonl(CQE_STATUS_V(T4_ERR_MSN));
626     - goto proc_cqe;
627     + hw_cqe->header |= cpu_to_be32(CQE_STATUS_V(T4_ERR_MSN));
628     }
629     goto proc_cqe;
630     }
631     diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
632     index edae2dcc4927..bb22d325e965 100644
633     --- a/drivers/net/ethernet/broadcom/tg3.c
634     +++ b/drivers/net/ethernet/broadcom/tg3.c
635     @@ -14226,7 +14226,9 @@ static int tg3_change_mtu(struct net_device *dev, int new_mtu)
636     /* Reset PHY, otherwise the read DMA engine will be in a mode that
637     * breaks all requests to 256 bytes.
638     */
639     - if (tg3_asic_rev(tp) == ASIC_REV_57766)
640     + if (tg3_asic_rev(tp) == ASIC_REV_57766 ||
641     + tg3_asic_rev(tp) == ASIC_REV_5717 ||
642     + tg3_asic_rev(tp) == ASIC_REV_5719)
643     reset_phy = true;
644    
645     err = tg3_restart_hw(tp, reset_phy);
646     diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
647     index 849b8712ec81..917091871259 100644
648     --- a/drivers/net/ethernet/freescale/fec_main.c
649     +++ b/drivers/net/ethernet/freescale/fec_main.c
650     @@ -172,10 +172,12 @@ MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address");
651     #endif /* CONFIG_M5272 */
652    
653     /* The FEC stores dest/src/type/vlan, data, and checksum for receive packets.
654     + *
655     + * 2048 byte skbufs are allocated. However, alignment requirements
656     + * varies between FEC variants. Worst case is 64, so round down by 64.
657     */
658     -#define PKT_MAXBUF_SIZE 1522
659     +#define PKT_MAXBUF_SIZE (round_down(2048 - 64, 64))
660     #define PKT_MINBUF_SIZE 64
661     -#define PKT_MAXBLR_SIZE 1536
662    
663     /* FEC receive acceleration */
664     #define FEC_RACC_IPDIS (1 << 1)
665     @@ -813,6 +815,12 @@ static void fec_enet_bd_init(struct net_device *dev)
666     for (i = 0; i < txq->bd.ring_size; i++) {
667     /* Initialize the BD for every fragment in the page. */
668     bdp->cbd_sc = cpu_to_fec16(0);
669     + if (bdp->cbd_bufaddr &&
670     + !IS_TSO_HEADER(txq, fec32_to_cpu(bdp->cbd_bufaddr)))
671     + dma_unmap_single(&fep->pdev->dev,
672     + fec32_to_cpu(bdp->cbd_bufaddr),
673     + fec16_to_cpu(bdp->cbd_datlen),
674     + DMA_TO_DEVICE);
675     if (txq->tx_skbuff[i]) {
676     dev_kfree_skb_any(txq->tx_skbuff[i]);
677     txq->tx_skbuff[i] = NULL;
678     @@ -847,7 +855,7 @@ static void fec_enet_enable_ring(struct net_device *ndev)
679     for (i = 0; i < fep->num_rx_queues; i++) {
680     rxq = fep->rx_queue[i];
681     writel(rxq->bd.dma, fep->hwp + FEC_R_DES_START(i));
682     - writel(PKT_MAXBLR_SIZE, fep->hwp + FEC_R_BUFF_SIZE(i));
683     + writel(PKT_MAXBUF_SIZE, fep->hwp + FEC_R_BUFF_SIZE(i));
684    
685     /* enable DMA1/2 */
686     if (i)
687     diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
688     index a0d1b084ecec..7aeb7fedb364 100644
689     --- a/drivers/net/ethernet/marvell/mvmdio.c
690     +++ b/drivers/net/ethernet/marvell/mvmdio.c
691     @@ -232,7 +232,8 @@ static int orion_mdio_probe(struct platform_device *pdev)
692     dev->regs + MVMDIO_ERR_INT_MASK);
693    
694     } else if (dev->err_interrupt == -EPROBE_DEFER) {
695     - return -EPROBE_DEFER;
696     + ret = -EPROBE_DEFER;
697     + goto out_mdio;
698     }
699    
700     mutex_init(&dev->lock);
701     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
702     index f7fabecc104f..4c3f1cb7e2c9 100644
703     --- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
704     +++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c
705     @@ -367,7 +367,7 @@ static int mlx5_internal_err_ret_value(struct mlx5_core_dev *dev, u16 op,
706     case MLX5_CMD_OP_QUERY_VPORT_COUNTER:
707     case MLX5_CMD_OP_ALLOC_Q_COUNTER:
708     case MLX5_CMD_OP_QUERY_Q_COUNTER:
709     - case MLX5_CMD_OP_SET_RATE_LIMIT:
710     + case MLX5_CMD_OP_SET_PP_RATE_LIMIT:
711     case MLX5_CMD_OP_QUERY_RATE_LIMIT:
712     case MLX5_CMD_OP_ALLOC_PD:
713     case MLX5_CMD_OP_ALLOC_UAR:
714     @@ -502,7 +502,7 @@ const char *mlx5_command_str(int command)
715     MLX5_COMMAND_STR_CASE(ALLOC_Q_COUNTER);
716     MLX5_COMMAND_STR_CASE(DEALLOC_Q_COUNTER);
717     MLX5_COMMAND_STR_CASE(QUERY_Q_COUNTER);
718     - MLX5_COMMAND_STR_CASE(SET_RATE_LIMIT);
719     + MLX5_COMMAND_STR_CASE(SET_PP_RATE_LIMIT);
720     MLX5_COMMAND_STR_CASE(QUERY_RATE_LIMIT);
721     MLX5_COMMAND_STR_CASE(ALLOC_PD);
722     MLX5_COMMAND_STR_CASE(DEALLOC_PD);
723     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
724     index 9d3722930c95..38981db43bc3 100644
725     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
726     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
727     @@ -3038,6 +3038,7 @@ static netdev_features_t mlx5e_vxlan_features_check(struct mlx5e_priv *priv,
728     struct sk_buff *skb,
729     netdev_features_t features)
730     {
731     + unsigned int offset = 0;
732     struct udphdr *udph;
733     u16 proto;
734     u16 port = 0;
735     @@ -3047,7 +3048,7 @@ static netdev_features_t mlx5e_vxlan_features_check(struct mlx5e_priv *priv,
736     proto = ip_hdr(skb)->protocol;
737     break;
738     case htons(ETH_P_IPV6):
739     - proto = ipv6_hdr(skb)->nexthdr;
740     + proto = ipv6_find_hdr(skb, &offset, -1, NULL, NULL);
741     break;
742     default:
743     goto out;
744     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/qp.c b/drivers/net/ethernet/mellanox/mlx5/core/qp.c
745     index d0a4005fe63a..9346f3985edf 100644
746     --- a/drivers/net/ethernet/mellanox/mlx5/core/qp.c
747     +++ b/drivers/net/ethernet/mellanox/mlx5/core/qp.c
748     @@ -303,8 +303,8 @@ int mlx5_core_create_qp(struct mlx5_core_dev *dev,
749     err_cmd:
750     memset(din, 0, sizeof(din));
751     memset(dout, 0, sizeof(dout));
752     - MLX5_SET(destroy_qp_in, in, opcode, MLX5_CMD_OP_DESTROY_QP);
753     - MLX5_SET(destroy_qp_in, in, qpn, qp->qpn);
754     + MLX5_SET(destroy_qp_in, din, opcode, MLX5_CMD_OP_DESTROY_QP);
755     + MLX5_SET(destroy_qp_in, din, qpn, qp->qpn);
756     mlx5_cmd_exec(dev, din, sizeof(din), dout, sizeof(dout));
757     return err;
758     }
759     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/rl.c b/drivers/net/ethernet/mellanox/mlx5/core/rl.c
760     index 104902a93a0b..2be9ec5fd651 100644
761     --- a/drivers/net/ethernet/mellanox/mlx5/core/rl.c
762     +++ b/drivers/net/ethernet/mellanox/mlx5/core/rl.c
763     @@ -60,16 +60,16 @@ static struct mlx5_rl_entry *find_rl_entry(struct mlx5_rl_table *table,
764     return ret_entry;
765     }
766    
767     -static int mlx5_set_rate_limit_cmd(struct mlx5_core_dev *dev,
768     +static int mlx5_set_pp_rate_limit_cmd(struct mlx5_core_dev *dev,
769     u32 rate, u16 index)
770     {
771     - u32 in[MLX5_ST_SZ_DW(set_rate_limit_in)] = {0};
772     - u32 out[MLX5_ST_SZ_DW(set_rate_limit_out)] = {0};
773     + u32 in[MLX5_ST_SZ_DW(set_pp_rate_limit_in)] = {0};
774     + u32 out[MLX5_ST_SZ_DW(set_pp_rate_limit_out)] = {0};
775    
776     - MLX5_SET(set_rate_limit_in, in, opcode,
777     - MLX5_CMD_OP_SET_RATE_LIMIT);
778     - MLX5_SET(set_rate_limit_in, in, rate_limit_index, index);
779     - MLX5_SET(set_rate_limit_in, in, rate_limit, rate);
780     + MLX5_SET(set_pp_rate_limit_in, in, opcode,
781     + MLX5_CMD_OP_SET_PP_RATE_LIMIT);
782     + MLX5_SET(set_pp_rate_limit_in, in, rate_limit_index, index);
783     + MLX5_SET(set_pp_rate_limit_in, in, rate_limit, rate);
784     return mlx5_cmd_exec(dev, in, sizeof(in), out, sizeof(out));
785     }
786    
787     @@ -108,7 +108,7 @@ int mlx5_rl_add_rate(struct mlx5_core_dev *dev, u32 rate, u16 *index)
788     entry->refcount++;
789     } else {
790     /* new rate limit */
791     - err = mlx5_set_rate_limit_cmd(dev, rate, entry->index);
792     + err = mlx5_set_pp_rate_limit_cmd(dev, rate, entry->index);
793     if (err) {
794     mlx5_core_err(dev, "Failed configuring rate: %u (%d)\n",
795     rate, err);
796     @@ -144,7 +144,7 @@ void mlx5_rl_remove_rate(struct mlx5_core_dev *dev, u32 rate)
797     entry->refcount--;
798     if (!entry->refcount) {
799     /* need to remove rate */
800     - mlx5_set_rate_limit_cmd(dev, 0, entry->index);
801     + mlx5_set_pp_rate_limit_cmd(dev, 0, entry->index);
802     entry->rate = 0;
803     }
804    
805     @@ -197,8 +197,8 @@ void mlx5_cleanup_rl_table(struct mlx5_core_dev *dev)
806     /* Clear all configured rates */
807     for (i = 0; i < table->max_size; i++)
808     if (table->rl_entry[i].rate)
809     - mlx5_set_rate_limit_cmd(dev, 0,
810     - table->rl_entry[i].index);
811     + mlx5_set_pp_rate_limit_cmd(dev, 0,
812     + table->rl_entry[i].index);
813    
814     kfree(dev->priv.rl_table.rl_entry);
815     }
816     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/vxlan.c b/drivers/net/ethernet/mellanox/mlx5/core/vxlan.c
817     index 07a9ba6cfc70..2f74953e4561 100644
818     --- a/drivers/net/ethernet/mellanox/mlx5/core/vxlan.c
819     +++ b/drivers/net/ethernet/mellanox/mlx5/core/vxlan.c
820     @@ -71,9 +71,9 @@ struct mlx5e_vxlan *mlx5e_vxlan_lookup_port(struct mlx5e_priv *priv, u16 port)
821     struct mlx5e_vxlan_db *vxlan_db = &priv->vxlan;
822     struct mlx5e_vxlan *vxlan;
823    
824     - spin_lock(&vxlan_db->lock);
825     + spin_lock_bh(&vxlan_db->lock);
826     vxlan = radix_tree_lookup(&vxlan_db->tree, port);
827     - spin_unlock(&vxlan_db->lock);
828     + spin_unlock_bh(&vxlan_db->lock);
829    
830     return vxlan;
831     }
832     @@ -88,8 +88,12 @@ static void mlx5e_vxlan_add_port(struct work_struct *work)
833     struct mlx5e_vxlan *vxlan;
834     int err;
835    
836     - if (mlx5e_vxlan_lookup_port(priv, port))
837     + mutex_lock(&priv->state_lock);
838     + vxlan = mlx5e_vxlan_lookup_port(priv, port);
839     + if (vxlan) {
840     + atomic_inc(&vxlan->refcount);
841     goto free_work;
842     + }
843    
844     if (mlx5e_vxlan_core_add_port_cmd(priv->mdev, port))
845     goto free_work;
846     @@ -99,10 +103,11 @@ static void mlx5e_vxlan_add_port(struct work_struct *work)
847     goto err_delete_port;
848    
849     vxlan->udp_port = port;
850     + atomic_set(&vxlan->refcount, 1);
851    
852     - spin_lock_irq(&vxlan_db->lock);
853     + spin_lock_bh(&vxlan_db->lock);
854     err = radix_tree_insert(&vxlan_db->tree, vxlan->udp_port, vxlan);
855     - spin_unlock_irq(&vxlan_db->lock);
856     + spin_unlock_bh(&vxlan_db->lock);
857     if (err)
858     goto err_free;
859    
860     @@ -113,35 +118,39 @@ static void mlx5e_vxlan_add_port(struct work_struct *work)
861     err_delete_port:
862     mlx5e_vxlan_core_del_port_cmd(priv->mdev, port);
863     free_work:
864     + mutex_unlock(&priv->state_lock);
865     kfree(vxlan_work);
866     }
867    
868     -static void __mlx5e_vxlan_core_del_port(struct mlx5e_priv *priv, u16 port)
869     +static void mlx5e_vxlan_del_port(struct work_struct *work)
870     {
871     + struct mlx5e_vxlan_work *vxlan_work =
872     + container_of(work, struct mlx5e_vxlan_work, work);
873     + struct mlx5e_priv *priv = vxlan_work->priv;
874     struct mlx5e_vxlan_db *vxlan_db = &priv->vxlan;
875     + u16 port = vxlan_work->port;
876     struct mlx5e_vxlan *vxlan;
877     + bool remove = false;
878    
879     - spin_lock_irq(&vxlan_db->lock);
880     - vxlan = radix_tree_delete(&vxlan_db->tree, port);
881     - spin_unlock_irq(&vxlan_db->lock);
882     -
883     + mutex_lock(&priv->state_lock);
884     + spin_lock_bh(&vxlan_db->lock);
885     + vxlan = radix_tree_lookup(&vxlan_db->tree, port);
886     if (!vxlan)
887     - return;
888     -
889     - mlx5e_vxlan_core_del_port_cmd(priv->mdev, vxlan->udp_port);
890     -
891     - kfree(vxlan);
892     -}
893     + goto out_unlock;
894    
895     -static void mlx5e_vxlan_del_port(struct work_struct *work)
896     -{
897     - struct mlx5e_vxlan_work *vxlan_work =
898     - container_of(work, struct mlx5e_vxlan_work, work);
899     - struct mlx5e_priv *priv = vxlan_work->priv;
900     - u16 port = vxlan_work->port;
901     + if (atomic_dec_and_test(&vxlan->refcount)) {
902     + radix_tree_delete(&vxlan_db->tree, port);
903     + remove = true;
904     + }
905    
906     - __mlx5e_vxlan_core_del_port(priv, port);
907     +out_unlock:
908     + spin_unlock_bh(&vxlan_db->lock);
909    
910     + if (remove) {
911     + mlx5e_vxlan_core_del_port_cmd(priv->mdev, port);
912     + kfree(vxlan);
913     + }
914     + mutex_unlock(&priv->state_lock);
915     kfree(vxlan_work);
916     }
917    
918     @@ -171,12 +180,11 @@ void mlx5e_vxlan_cleanup(struct mlx5e_priv *priv)
919     struct mlx5e_vxlan *vxlan;
920     unsigned int port = 0;
921    
922     - spin_lock_irq(&vxlan_db->lock);
923     + /* Lockless since we are the only radix-tree consumers, wq is disabled */
924     while (radix_tree_gang_lookup(&vxlan_db->tree, (void **)&vxlan, port, 1)) {
925     port = vxlan->udp_port;
926     - spin_unlock_irq(&vxlan_db->lock);
927     - __mlx5e_vxlan_core_del_port(priv, (u16)port);
928     - spin_lock_irq(&vxlan_db->lock);
929     + radix_tree_delete(&vxlan_db->tree, port);
930     + mlx5e_vxlan_core_del_port_cmd(priv->mdev, port);
931     + kfree(vxlan);
932     }
933     - spin_unlock_irq(&vxlan_db->lock);
934     }
935     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/vxlan.h b/drivers/net/ethernet/mellanox/mlx5/core/vxlan.h
936     index 5def12c048e3..5ef6ae7d568a 100644
937     --- a/drivers/net/ethernet/mellanox/mlx5/core/vxlan.h
938     +++ b/drivers/net/ethernet/mellanox/mlx5/core/vxlan.h
939     @@ -36,6 +36,7 @@
940     #include "en.h"
941    
942     struct mlx5e_vxlan {
943     + atomic_t refcount;
944     u16 udp_port;
945     };
946    
947     diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
948     index fbf5945ce00d..2032a6de026b 100644
949     --- a/drivers/net/phy/micrel.c
950     +++ b/drivers/net/phy/micrel.c
951     @@ -624,6 +624,7 @@ static int ksz9031_read_status(struct phy_device *phydev)
952     phydev->link = 0;
953     if (phydev->drv->config_intr && phy_interrupt_is_valid(phydev))
954     phydev->drv->config_intr(phydev);
955     + return genphy_config_aneg(phydev);
956     }
957    
958     return 0;
959     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
960     index 105fbfb47e3a..db65d9ad4488 100644
961     --- a/drivers/net/usb/qmi_wwan.c
962     +++ b/drivers/net/usb/qmi_wwan.c
963     @@ -907,6 +907,7 @@ static const struct usb_device_id products[] = {
964     {QMI_FIXED_INTF(0x1199, 0x9079, 10)}, /* Sierra Wireless EM74xx */
965     {QMI_FIXED_INTF(0x1199, 0x907b, 8)}, /* Sierra Wireless EM74xx */
966     {QMI_FIXED_INTF(0x1199, 0x907b, 10)}, /* Sierra Wireless EM74xx */
967     + {QMI_FIXED_INTF(0x1199, 0x9091, 8)}, /* Sierra Wireless EM7565 */
968     {QMI_FIXED_INTF(0x1bbb, 0x011e, 4)}, /* Telekom Speedstick LTE II (Alcatel One Touch L100V LTE) */
969     {QMI_FIXED_INTF(0x1bbb, 0x0203, 2)}, /* Alcatel L800MA */
970     {QMI_FIXED_INTF(0x2357, 0x0201, 4)}, /* TP-LINK HSUPA Modem MA180 */
971     diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h
972     index e72234efb648..9b5fc502f6a1 100644
973     --- a/drivers/s390/net/qeth_core.h
974     +++ b/drivers/s390/net/qeth_core.h
975     @@ -576,9 +576,9 @@ enum qeth_cq {
976     };
977    
978     struct qeth_ipato {
979     - int enabled;
980     - int invert4;
981     - int invert6;
982     + bool enabled;
983     + bool invert4;
984     + bool invert6;
985     struct list_head entries;
986     };
987    
988     diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
989     index 838ed6213118..df8f74cb1406 100644
990     --- a/drivers/s390/net/qeth_core_main.c
991     +++ b/drivers/s390/net/qeth_core_main.c
992     @@ -1475,9 +1475,9 @@ static int qeth_setup_card(struct qeth_card *card)
993     qeth_set_intial_options(card);
994     /* IP address takeover */
995     INIT_LIST_HEAD(&card->ipato.entries);
996     - card->ipato.enabled = 0;
997     - card->ipato.invert4 = 0;
998     - card->ipato.invert6 = 0;
999     + card->ipato.enabled = false;
1000     + card->ipato.invert4 = false;
1001     + card->ipato.invert6 = false;
1002     /* init QDIO stuff */
1003     qeth_init_qdio_info(card);
1004     INIT_DELAYED_WORK(&card->buffer_reclaim_work, qeth_buffer_reclaim_work);
1005     diff --git a/drivers/s390/net/qeth_l3.h b/drivers/s390/net/qeth_l3.h
1006     index 26f79533e62e..eedf9b01a496 100644
1007     --- a/drivers/s390/net/qeth_l3.h
1008     +++ b/drivers/s390/net/qeth_l3.h
1009     @@ -80,7 +80,7 @@ void qeth_l3_del_vipa(struct qeth_card *, enum qeth_prot_versions, const u8 *);
1010     int qeth_l3_add_rxip(struct qeth_card *, enum qeth_prot_versions, const u8 *);
1011     void qeth_l3_del_rxip(struct qeth_card *card, enum qeth_prot_versions,
1012     const u8 *);
1013     -int qeth_l3_is_addr_covered_by_ipato(struct qeth_card *, struct qeth_ipaddr *);
1014     +void qeth_l3_update_ipato(struct qeth_card *card);
1015     struct qeth_ipaddr *qeth_l3_get_addr_buffer(enum qeth_prot_versions);
1016     int qeth_l3_add_ip(struct qeth_card *, struct qeth_ipaddr *);
1017     int qeth_l3_delete_ip(struct qeth_card *, struct qeth_ipaddr *);
1018     diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c
1019     index f91e70c369ed..1487f8a0c575 100644
1020     --- a/drivers/s390/net/qeth_l3_main.c
1021     +++ b/drivers/s390/net/qeth_l3_main.c
1022     @@ -168,8 +168,8 @@ static void qeth_l3_convert_addr_to_bits(u8 *addr, u8 *bits, int len)
1023     }
1024     }
1025    
1026     -int qeth_l3_is_addr_covered_by_ipato(struct qeth_card *card,
1027     - struct qeth_ipaddr *addr)
1028     +static bool qeth_l3_is_addr_covered_by_ipato(struct qeth_card *card,
1029     + struct qeth_ipaddr *addr)
1030     {
1031     struct qeth_ipato_entry *ipatoe;
1032     u8 addr_bits[128] = {0, };
1033     @@ -178,6 +178,8 @@ int qeth_l3_is_addr_covered_by_ipato(struct qeth_card *card,
1034    
1035     if (!card->ipato.enabled)
1036     return 0;
1037     + if (addr->type != QETH_IP_TYPE_NORMAL)
1038     + return 0;
1039    
1040     qeth_l3_convert_addr_to_bits((u8 *) &addr->u, addr_bits,
1041     (addr->proto == QETH_PROT_IPV4)? 4:16);
1042     @@ -293,8 +295,7 @@ int qeth_l3_add_ip(struct qeth_card *card, struct qeth_ipaddr *tmp_addr)
1043     memcpy(addr, tmp_addr, sizeof(struct qeth_ipaddr));
1044     addr->ref_counter = 1;
1045    
1046     - if (addr->type == QETH_IP_TYPE_NORMAL &&
1047     - qeth_l3_is_addr_covered_by_ipato(card, addr)) {
1048     + if (qeth_l3_is_addr_covered_by_ipato(card, addr)) {
1049     QETH_CARD_TEXT(card, 2, "tkovaddr");
1050     addr->set_flags |= QETH_IPA_SETIP_TAKEOVER_FLAG;
1051     }
1052     @@ -607,6 +608,27 @@ int qeth_l3_setrouting_v6(struct qeth_card *card)
1053     /*
1054     * IP address takeover related functions
1055     */
1056     +
1057     +/**
1058     + * qeth_l3_update_ipato() - Update 'takeover' property, for all NORMAL IPs.
1059     + *
1060     + * Caller must hold ip_lock.
1061     + */
1062     +void qeth_l3_update_ipato(struct qeth_card *card)
1063     +{
1064     + struct qeth_ipaddr *addr;
1065     + unsigned int i;
1066     +
1067     + hash_for_each(card->ip_htable, i, addr, hnode) {
1068     + if (addr->type != QETH_IP_TYPE_NORMAL)
1069     + continue;
1070     + if (qeth_l3_is_addr_covered_by_ipato(card, addr))
1071     + addr->set_flags |= QETH_IPA_SETIP_TAKEOVER_FLAG;
1072     + else
1073     + addr->set_flags &= ~QETH_IPA_SETIP_TAKEOVER_FLAG;
1074     + }
1075     +}
1076     +
1077     static void qeth_l3_clear_ipato_list(struct qeth_card *card)
1078     {
1079     struct qeth_ipato_entry *ipatoe, *tmp;
1080     @@ -618,6 +640,7 @@ static void qeth_l3_clear_ipato_list(struct qeth_card *card)
1081     kfree(ipatoe);
1082     }
1083    
1084     + qeth_l3_update_ipato(card);
1085     spin_unlock_bh(&card->ip_lock);
1086     }
1087    
1088     @@ -642,8 +665,10 @@ int qeth_l3_add_ipato_entry(struct qeth_card *card,
1089     }
1090     }
1091    
1092     - if (!rc)
1093     + if (!rc) {
1094     list_add_tail(&new->entry, &card->ipato.entries);
1095     + qeth_l3_update_ipato(card);
1096     + }
1097    
1098     spin_unlock_bh(&card->ip_lock);
1099    
1100     @@ -666,6 +691,7 @@ void qeth_l3_del_ipato_entry(struct qeth_card *card,
1101     (proto == QETH_PROT_IPV4)? 4:16) &&
1102     (ipatoe->mask_bits == mask_bits)) {
1103     list_del(&ipatoe->entry);
1104     + qeth_l3_update_ipato(card);
1105     kfree(ipatoe);
1106     }
1107     }
1108     diff --git a/drivers/s390/net/qeth_l3_sys.c b/drivers/s390/net/qeth_l3_sys.c
1109     index cffe42f5775d..d6bdfc6e905a 100644
1110     --- a/drivers/s390/net/qeth_l3_sys.c
1111     +++ b/drivers/s390/net/qeth_l3_sys.c
1112     @@ -372,8 +372,8 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev,
1113     struct device_attribute *attr, const char *buf, size_t count)
1114     {
1115     struct qeth_card *card = dev_get_drvdata(dev);
1116     - struct qeth_ipaddr *addr;
1117     - int i, rc = 0;
1118     + bool enable;
1119     + int rc = 0;
1120    
1121     if (!card)
1122     return -EINVAL;
1123     @@ -386,25 +386,18 @@ static ssize_t qeth_l3_dev_ipato_enable_store(struct device *dev,
1124     }
1125    
1126     if (sysfs_streq(buf, "toggle")) {
1127     - card->ipato.enabled = (card->ipato.enabled)? 0 : 1;
1128     - } else if (sysfs_streq(buf, "1")) {
1129     - card->ipato.enabled = 1;
1130     - hash_for_each(card->ip_htable, i, addr, hnode) {
1131     - if ((addr->type == QETH_IP_TYPE_NORMAL) &&
1132     - qeth_l3_is_addr_covered_by_ipato(card, addr))
1133     - addr->set_flags |=
1134     - QETH_IPA_SETIP_TAKEOVER_FLAG;
1135     - }
1136     - } else if (sysfs_streq(buf, "0")) {
1137     - card->ipato.enabled = 0;
1138     - hash_for_each(card->ip_htable, i, addr, hnode) {
1139     - if (addr->set_flags &
1140     - QETH_IPA_SETIP_TAKEOVER_FLAG)
1141     - addr->set_flags &=
1142     - ~QETH_IPA_SETIP_TAKEOVER_FLAG;
1143     - }
1144     - } else
1145     + enable = !card->ipato.enabled;
1146     + } else if (kstrtobool(buf, &enable)) {
1147     rc = -EINVAL;
1148     + goto out;
1149     + }
1150     +
1151     + if (card->ipato.enabled != enable) {
1152     + card->ipato.enabled = enable;
1153     + spin_lock_bh(&card->ip_lock);
1154     + qeth_l3_update_ipato(card);
1155     + spin_unlock_bh(&card->ip_lock);
1156     + }
1157     out:
1158     mutex_unlock(&card->conf_mutex);
1159     return rc ? rc : count;
1160     @@ -430,20 +423,27 @@ static ssize_t qeth_l3_dev_ipato_invert4_store(struct device *dev,
1161     const char *buf, size_t count)
1162     {
1163     struct qeth_card *card = dev_get_drvdata(dev);
1164     + bool invert;
1165     int rc = 0;
1166    
1167     if (!card)
1168     return -EINVAL;
1169    
1170     mutex_lock(&card->conf_mutex);
1171     - if (sysfs_streq(buf, "toggle"))
1172     - card->ipato.invert4 = (card->ipato.invert4)? 0 : 1;
1173     - else if (sysfs_streq(buf, "1"))
1174     - card->ipato.invert4 = 1;
1175     - else if (sysfs_streq(buf, "0"))
1176     - card->ipato.invert4 = 0;
1177     - else
1178     + if (sysfs_streq(buf, "toggle")) {
1179     + invert = !card->ipato.invert4;
1180     + } else if (kstrtobool(buf, &invert)) {
1181     rc = -EINVAL;
1182     + goto out;
1183     + }
1184     +
1185     + if (card->ipato.invert4 != invert) {
1186     + card->ipato.invert4 = invert;
1187     + spin_lock_bh(&card->ip_lock);
1188     + qeth_l3_update_ipato(card);
1189     + spin_unlock_bh(&card->ip_lock);
1190     + }
1191     +out:
1192     mutex_unlock(&card->conf_mutex);
1193     return rc ? rc : count;
1194     }
1195     @@ -609,20 +609,27 @@ static ssize_t qeth_l3_dev_ipato_invert6_store(struct device *dev,
1196     struct device_attribute *attr, const char *buf, size_t count)
1197     {
1198     struct qeth_card *card = dev_get_drvdata(dev);
1199     + bool invert;
1200     int rc = 0;
1201    
1202     if (!card)
1203     return -EINVAL;
1204    
1205     mutex_lock(&card->conf_mutex);
1206     - if (sysfs_streq(buf, "toggle"))
1207     - card->ipato.invert6 = (card->ipato.invert6)? 0 : 1;
1208     - else if (sysfs_streq(buf, "1"))
1209     - card->ipato.invert6 = 1;
1210     - else if (sysfs_streq(buf, "0"))
1211     - card->ipato.invert6 = 0;
1212     - else
1213     + if (sysfs_streq(buf, "toggle")) {
1214     + invert = !card->ipato.invert6;
1215     + } else if (kstrtobool(buf, &invert)) {
1216     rc = -EINVAL;
1217     + goto out;
1218     + }
1219     +
1220     + if (card->ipato.invert6 != invert) {
1221     + card->ipato.invert6 = invert;
1222     + spin_lock_bh(&card->ip_lock);
1223     + qeth_l3_update_ipato(card);
1224     + spin_unlock_bh(&card->ip_lock);
1225     + }
1226     +out:
1227     mutex_unlock(&card->conf_mutex);
1228     return rc ? rc : count;
1229     }
1230     diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
1231     index bdf0e6e89991..faf50df81622 100644
1232     --- a/drivers/tty/n_tty.c
1233     +++ b/drivers/tty/n_tty.c
1234     @@ -1764,7 +1764,7 @@ static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
1235     {
1236     struct n_tty_data *ldata = tty->disc_data;
1237    
1238     - if (!old || (old->c_lflag ^ tty->termios.c_lflag) & ICANON) {
1239     + if (!old || (old->c_lflag ^ tty->termios.c_lflag) & (ICANON | EXTPROC)) {
1240     bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE);
1241     ldata->line_start = ldata->read_tail;
1242     if (!L_ICANON(tty) || !read_cnt(ldata)) {
1243     @@ -2427,7 +2427,7 @@ static int n_tty_ioctl(struct tty_struct *tty, struct file *file,
1244     return put_user(tty_chars_in_buffer(tty), (int __user *) arg);
1245     case TIOCINQ:
1246     down_write(&tty->termios_rwsem);
1247     - if (L_ICANON(tty))
1248     + if (L_ICANON(tty) && !L_EXTPROC(tty))
1249     retval = inq_canon(ldata);
1250     else
1251     retval = read_cnt(ldata);
1252     diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c
1253     index c220c2c0893f..e99f1c5b1df6 100644
1254     --- a/drivers/tty/tty_buffer.c
1255     +++ b/drivers/tty/tty_buffer.c
1256     @@ -446,7 +446,7 @@ EXPORT_SYMBOL_GPL(tty_prepare_flip_string);
1257     * Callers other than flush_to_ldisc() need to exclude the kworker
1258     * from concurrent use of the line discipline, see paste_selection().
1259     *
1260     - * Returns the number of bytes not processed
1261     + * Returns the number of bytes processed
1262     */
1263     int tty_ldisc_receive_buf(struct tty_ldisc *ld, unsigned char *p,
1264     char *f, int count)
1265     diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
1266     index ba9b29bc441f..7c54a19b20e0 100644
1267     --- a/drivers/usb/core/config.c
1268     +++ b/drivers/usb/core/config.c
1269     @@ -1002,7 +1002,7 @@ int usb_get_bos_descriptor(struct usb_device *dev)
1270     case USB_SSP_CAP_TYPE:
1271     ssp_cap = (struct usb_ssp_cap_descriptor *)buffer;
1272     ssac = (le32_to_cpu(ssp_cap->bmAttributes) &
1273     - USB_SSP_SUBLINK_SPEED_ATTRIBS) + 1;
1274     + USB_SSP_SUBLINK_SPEED_ATTRIBS);
1275     if (length >= USB_DT_USB_SSP_CAP_SIZE(ssac))
1276     dev->bos->ssp_cap = ssp_cap;
1277     break;
1278     diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
1279     index 50010282c010..c05c4f877750 100644
1280     --- a/drivers/usb/core/quirks.c
1281     +++ b/drivers/usb/core/quirks.c
1282     @@ -57,10 +57,11 @@ static const struct usb_device_id usb_quirk_list[] = {
1283     /* Microsoft LifeCam-VX700 v2.0 */
1284     { USB_DEVICE(0x045e, 0x0770), .driver_info = USB_QUIRK_RESET_RESUME },
1285    
1286     - /* Logitech HD Pro Webcams C920, C920-C and C930e */
1287     + /* Logitech HD Pro Webcams C920, C920-C, C925e and C930e */
1288     { USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT },
1289     { USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },
1290     { USB_DEVICE(0x046d, 0x0843), .driver_info = USB_QUIRK_DELAY_INIT },
1291     + { USB_DEVICE(0x046d, 0x085b), .driver_info = USB_QUIRK_DELAY_INIT },
1292    
1293     /* Logitech ConferenceCam CC3000e */
1294     { USB_DEVICE(0x046d, 0x0847), .driver_info = USB_QUIRK_DELAY_INIT },
1295     @@ -154,6 +155,9 @@ static const struct usb_device_id usb_quirk_list[] = {
1296     /* Genesys Logic hub, internally used by KY-688 USB 3.1 Type-C Hub */
1297     { USB_DEVICE(0x05e3, 0x0612), .driver_info = USB_QUIRK_NO_LPM },
1298    
1299     + /* ELSA MicroLink 56K */
1300     + { USB_DEVICE(0x05cc, 0x2267), .driver_info = USB_QUIRK_RESET_RESUME },
1301     +
1302     /* Genesys Logic hub, internally used by Moshi USB to Ethernet Adapter */
1303     { USB_DEVICE(0x05e3, 0x0616), .driver_info = USB_QUIRK_NO_LPM },
1304    
1305     diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
1306     index c87ef38e7416..f6782a347cde 100644
1307     --- a/drivers/usb/host/xhci-pci.c
1308     +++ b/drivers/usb/host/xhci-pci.c
1309     @@ -189,6 +189,9 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
1310     xhci->quirks |= XHCI_TRUST_TX_LENGTH;
1311     xhci->quirks |= XHCI_BROKEN_STREAMS;
1312     }
1313     + if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
1314     + pdev->device == 0x0014)
1315     + xhci->quirks |= XHCI_TRUST_TX_LENGTH;
1316     if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
1317     pdev->device == 0x0015)
1318     xhci->quirks |= XHCI_RESET_ON_RESUME;
1319     diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
1320     index 3249f42b4b93..0c743e4cca1e 100644
1321     --- a/drivers/usb/serial/ftdi_sio.c
1322     +++ b/drivers/usb/serial/ftdi_sio.c
1323     @@ -1017,6 +1017,7 @@ static const struct usb_device_id id_table_combined[] = {
1324     .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
1325     { USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_BT_USB_PID) },
1326     { USB_DEVICE(CYPRESS_VID, CYPRESS_WICED_WL_USB_PID) },
1327     + { USB_DEVICE(AIRBUS_DS_VID, AIRBUS_DS_P8GR) },
1328     { } /* Terminating entry */
1329     };
1330    
1331     diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h
1332     index f9d15bd62785..543d2801632b 100644
1333     --- a/drivers/usb/serial/ftdi_sio_ids.h
1334     +++ b/drivers/usb/serial/ftdi_sio_ids.h
1335     @@ -913,6 +913,12 @@
1336     #define ICPDAS_I7561U_PID 0x0104
1337     #define ICPDAS_I7563U_PID 0x0105
1338    
1339     +/*
1340     + * Airbus Defence and Space
1341     + */
1342     +#define AIRBUS_DS_VID 0x1e8e /* Vendor ID */
1343     +#define AIRBUS_DS_P8GR 0x6001 /* Tetra P8GR */
1344     +
1345     /*
1346     * RT Systems programming cables for various ham radios
1347     */
1348     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
1349     index ffa8ec917ff5..a818c43a02ec 100644
1350     --- a/drivers/usb/serial/option.c
1351     +++ b/drivers/usb/serial/option.c
1352     @@ -236,6 +236,8 @@ static void option_instat_callback(struct urb *urb);
1353     /* These Quectel products use Qualcomm's vendor ID */
1354     #define QUECTEL_PRODUCT_UC20 0x9003
1355     #define QUECTEL_PRODUCT_UC15 0x9090
1356     +/* These Yuga products use Qualcomm's vendor ID */
1357     +#define YUGA_PRODUCT_CLM920_NC5 0x9625
1358    
1359     #define QUECTEL_VENDOR_ID 0x2c7c
1360     /* These Quectel products use Quectel's vendor ID */
1361     @@ -283,6 +285,7 @@ static void option_instat_callback(struct urb *urb);
1362     #define TELIT_PRODUCT_LE922_USBCFG3 0x1043
1363     #define TELIT_PRODUCT_LE922_USBCFG5 0x1045
1364     #define TELIT_PRODUCT_ME910 0x1100
1365     +#define TELIT_PRODUCT_ME910_DUAL_MODEM 0x1101
1366     #define TELIT_PRODUCT_LE920 0x1200
1367     #define TELIT_PRODUCT_LE910 0x1201
1368     #define TELIT_PRODUCT_LE910_USBCFG4 0x1206
1369     @@ -648,6 +651,11 @@ static const struct option_blacklist_info telit_me910_blacklist = {
1370     .reserved = BIT(1) | BIT(3),
1371     };
1372    
1373     +static const struct option_blacklist_info telit_me910_dual_modem_blacklist = {
1374     + .sendsetup = BIT(0),
1375     + .reserved = BIT(3),
1376     +};
1377     +
1378     static const struct option_blacklist_info telit_le910_blacklist = {
1379     .sendsetup = BIT(0),
1380     .reserved = BIT(1) | BIT(2),
1381     @@ -677,6 +685,10 @@ static const struct option_blacklist_info cinterion_rmnet2_blacklist = {
1382     .reserved = BIT(4) | BIT(5),
1383     };
1384    
1385     +static const struct option_blacklist_info yuga_clm920_nc5_blacklist = {
1386     + .reserved = BIT(1) | BIT(4),
1387     +};
1388     +
1389     static const struct usb_device_id option_ids[] = {
1390     { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
1391     { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
1392     @@ -1181,6 +1193,9 @@ static const struct usb_device_id option_ids[] = {
1393     { USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC15)},
1394     { USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC20),
1395     .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
1396     + /* Yuga products use Qualcomm vendor ID */
1397     + { USB_DEVICE(QUALCOMM_VENDOR_ID, YUGA_PRODUCT_CLM920_NC5),
1398     + .driver_info = (kernel_ulong_t)&yuga_clm920_nc5_blacklist },
1399     /* Quectel products using Quectel vendor ID */
1400     { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC21),
1401     .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
1402     @@ -1247,6 +1262,8 @@ static const struct usb_device_id option_ids[] = {
1403     .driver_info = (kernel_ulong_t)&telit_le922_blacklist_usbcfg0 },
1404     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910),
1405     .driver_info = (kernel_ulong_t)&telit_me910_blacklist },
1406     + { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_ME910_DUAL_MODEM),
1407     + .driver_info = (kernel_ulong_t)&telit_me910_dual_modem_blacklist },
1408     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910),
1409     .driver_info = (kernel_ulong_t)&telit_le910_blacklist },
1410     { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4),
1411     diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
1412     index 4516291df1b8..fb6dc16c754a 100644
1413     --- a/drivers/usb/serial/qcserial.c
1414     +++ b/drivers/usb/serial/qcserial.c
1415     @@ -166,6 +166,8 @@ static const struct usb_device_id id_table[] = {
1416     {DEVICE_SWI(0x1199, 0x9079)}, /* Sierra Wireless EM74xx */
1417     {DEVICE_SWI(0x1199, 0x907a)}, /* Sierra Wireless EM74xx QDL */
1418     {DEVICE_SWI(0x1199, 0x907b)}, /* Sierra Wireless EM74xx */
1419     + {DEVICE_SWI(0x1199, 0x9090)}, /* Sierra Wireless EM7565 QDL */
1420     + {DEVICE_SWI(0x1199, 0x9091)}, /* Sierra Wireless EM7565 */
1421     {DEVICE_SWI(0x413c, 0x81a2)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
1422     {DEVICE_SWI(0x413c, 0x81a3)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
1423     {DEVICE_SWI(0x413c, 0x81a4)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
1424     @@ -346,6 +348,7 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
1425     break;
1426     case 2:
1427     dev_dbg(dev, "NMEA GPS interface found\n");
1428     + sendsetup = true;
1429     break;
1430     case 3:
1431     dev_dbg(dev, "Modem port found\n");
1432     diff --git a/drivers/usb/usbip/stub_dev.c b/drivers/usb/usbip/stub_dev.c
1433     index c653ce533430..1886d8e4f14e 100644
1434     --- a/drivers/usb/usbip/stub_dev.c
1435     +++ b/drivers/usb/usbip/stub_dev.c
1436     @@ -163,8 +163,7 @@ static void stub_shutdown_connection(struct usbip_device *ud)
1437     * step 1?
1438     */
1439     if (ud->tcp_socket) {
1440     - dev_dbg(&sdev->udev->dev, "shutdown tcp_socket %p\n",
1441     - ud->tcp_socket);
1442     + dev_dbg(&sdev->udev->dev, "shutdown sockfd\n");
1443     kernel_sock_shutdown(ud->tcp_socket, SHUT_RDWR);
1444     }
1445    
1446     diff --git a/drivers/usb/usbip/stub_main.c b/drivers/usb/usbip/stub_main.c
1447     index af10f7b131a4..325b4c05acdd 100644
1448     --- a/drivers/usb/usbip/stub_main.c
1449     +++ b/drivers/usb/usbip/stub_main.c
1450     @@ -252,11 +252,12 @@ void stub_device_cleanup_urbs(struct stub_device *sdev)
1451     struct stub_priv *priv;
1452     struct urb *urb;
1453    
1454     - dev_dbg(&sdev->udev->dev, "free sdev %p\n", sdev);
1455     + dev_dbg(&sdev->udev->dev, "Stub device cleaning up urbs\n");
1456    
1457     while ((priv = stub_priv_pop(sdev))) {
1458     urb = priv->urb;
1459     - dev_dbg(&sdev->udev->dev, "free urb %p\n", urb);
1460     + dev_dbg(&sdev->udev->dev, "free urb seqnum %lu\n",
1461     + priv->seqnum);
1462     usb_kill_urb(urb);
1463    
1464     kmem_cache_free(stub_priv_cache, priv);
1465     diff --git a/drivers/usb/usbip/stub_rx.c b/drivers/usb/usbip/stub_rx.c
1466     index 283a9be77a22..5b807185f79e 100644
1467     --- a/drivers/usb/usbip/stub_rx.c
1468     +++ b/drivers/usb/usbip/stub_rx.c
1469     @@ -225,9 +225,6 @@ static int stub_recv_cmd_unlink(struct stub_device *sdev,
1470     if (priv->seqnum != pdu->u.cmd_unlink.seqnum)
1471     continue;
1472    
1473     - dev_info(&priv->urb->dev->dev, "unlink urb %p\n",
1474     - priv->urb);
1475     -
1476     /*
1477     * This matched urb is not completed yet (i.e., be in
1478     * flight in usb hcd hardware/driver). Now we are
1479     @@ -266,8 +263,8 @@ static int stub_recv_cmd_unlink(struct stub_device *sdev,
1480     ret = usb_unlink_urb(priv->urb);
1481     if (ret != -EINPROGRESS)
1482     dev_err(&priv->urb->dev->dev,
1483     - "failed to unlink a urb %p, ret %d\n",
1484     - priv->urb, ret);
1485     + "failed to unlink a urb # %lu, ret %d\n",
1486     + priv->seqnum, ret);
1487    
1488     return 0;
1489     }
1490     diff --git a/drivers/usb/usbip/stub_tx.c b/drivers/usb/usbip/stub_tx.c
1491     index 87ff94be4235..96aa375b80d9 100644
1492     --- a/drivers/usb/usbip/stub_tx.c
1493     +++ b/drivers/usb/usbip/stub_tx.c
1494     @@ -102,7 +102,7 @@ void stub_complete(struct urb *urb)
1495     /* link a urb to the queue of tx. */
1496     spin_lock_irqsave(&sdev->priv_lock, flags);
1497     if (sdev->ud.tcp_socket == NULL) {
1498     - usbip_dbg_stub_tx("ignore urb for closed connection %p", urb);
1499     + usbip_dbg_stub_tx("ignore urb for closed connection\n");
1500     /* It will be freed in stub_device_cleanup_urbs(). */
1501     } else if (priv->unlinking) {
1502     stub_enqueue_ret_unlink(sdev, priv->seqnum, urb->status);
1503     @@ -204,8 +204,8 @@ static int stub_send_ret_submit(struct stub_device *sdev)
1504    
1505     /* 1. setup usbip_header */
1506     setup_ret_submit_pdu(&pdu_header, urb);
1507     - usbip_dbg_stub_tx("setup txdata seqnum: %d urb: %p\n",
1508     - pdu_header.base.seqnum, urb);
1509     + usbip_dbg_stub_tx("setup txdata seqnum: %d\n",
1510     + pdu_header.base.seqnum);
1511     usbip_header_correct_endian(&pdu_header, 1);
1512    
1513     iov[iovnum].iov_base = &pdu_header;
1514     diff --git a/drivers/usb/usbip/usbip_common.c b/drivers/usb/usbip/usbip_common.c
1515     index 8b232290be6b..e24b24fa0f16 100644
1516     --- a/drivers/usb/usbip/usbip_common.c
1517     +++ b/drivers/usb/usbip/usbip_common.c
1518     @@ -335,13 +335,10 @@ int usbip_recv(struct socket *sock, void *buf, int size)
1519     char *bp = buf;
1520     int osize = size;
1521    
1522     - usbip_dbg_xmit("enter\n");
1523     -
1524     - if (!sock || !buf || !size) {
1525     - pr_err("invalid arg, sock %p buff %p size %d\n", sock, buf,
1526     - size);
1527     + if (!sock || !buf || !size)
1528     return -EINVAL;
1529     - }
1530     +
1531     + usbip_dbg_xmit("enter\n");
1532    
1533     do {
1534     sock->sk->sk_allocation = GFP_NOIO;
1535     @@ -354,11 +351,8 @@ int usbip_recv(struct socket *sock, void *buf, int size)
1536     msg.msg_flags = MSG_NOSIGNAL;
1537    
1538     result = kernel_recvmsg(sock, &msg, &iov, 1, size, MSG_WAITALL);
1539     - if (result <= 0) {
1540     - pr_debug("receive sock %p buf %p size %u ret %d total %d\n",
1541     - sock, buf, size, result, total);
1542     + if (result <= 0)
1543     goto err;
1544     - }
1545    
1546     size -= result;
1547     buf += result;
1548     diff --git a/drivers/usb/usbip/vhci_hcd.c b/drivers/usb/usbip/vhci_hcd.c
1549     index d6dc165e924b..7f161b095176 100644
1550     --- a/drivers/usb/usbip/vhci_hcd.c
1551     +++ b/drivers/usb/usbip/vhci_hcd.c
1552     @@ -506,9 +506,6 @@ static int vhci_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
1553     struct vhci_device *vdev;
1554     unsigned long flags;
1555    
1556     - usbip_dbg_vhci_hc("enter, usb_hcd %p urb %p mem_flags %d\n",
1557     - hcd, urb, mem_flags);
1558     -
1559     if (portnum > VHCI_HC_PORTS) {
1560     pr_err("invalid port number %d\n", portnum);
1561     return -ENODEV;
1562     @@ -671,8 +668,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
1563     struct vhci_device *vdev;
1564     unsigned long flags;
1565    
1566     - pr_info("dequeue a urb %p\n", urb);
1567     -
1568     spin_lock_irqsave(&vhci->lock, flags);
1569    
1570     priv = urb->hcpriv;
1571     @@ -700,7 +695,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
1572     /* tcp connection is closed */
1573     spin_lock(&vdev->priv_lock);
1574    
1575     - pr_info("device %p seems to be disconnected\n", vdev);
1576     list_del(&priv->list);
1577     kfree(priv);
1578     urb->hcpriv = NULL;
1579     @@ -712,8 +706,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
1580     * vhci_rx will receive RET_UNLINK and give back the URB.
1581     * Otherwise, we give back it here.
1582     */
1583     - pr_info("gives back urb %p\n", urb);
1584     -
1585     usb_hcd_unlink_urb_from_ep(hcd, urb);
1586    
1587     spin_unlock_irqrestore(&vhci->lock, flags);
1588     @@ -741,8 +733,6 @@ static int vhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
1589    
1590     unlink->unlink_seqnum = priv->seqnum;
1591    
1592     - pr_info("device %p seems to be still connected\n", vdev);
1593     -
1594     /* send cmd_unlink and try to cancel the pending URB in the
1595     * peer */
1596     list_add_tail(&unlink->list, &vdev->unlink_tx);
1597     @@ -823,7 +813,7 @@ static void vhci_shutdown_connection(struct usbip_device *ud)
1598    
1599     /* need this? see stub_dev.c */
1600     if (ud->tcp_socket) {
1601     - pr_debug("shutdown tcp_socket %p\n", ud->tcp_socket);
1602     + pr_debug("shutdown tcp_socket\n");
1603     kernel_sock_shutdown(ud->tcp_socket, SHUT_RDWR);
1604     }
1605    
1606     diff --git a/drivers/usb/usbip/vhci_rx.c b/drivers/usb/usbip/vhci_rx.c
1607     index fc2d319e2360..5943deeec115 100644
1608     --- a/drivers/usb/usbip/vhci_rx.c
1609     +++ b/drivers/usb/usbip/vhci_rx.c
1610     @@ -37,24 +37,23 @@ struct urb *pickup_urb_and_free_priv(struct vhci_device *vdev, __u32 seqnum)
1611     urb = priv->urb;
1612     status = urb->status;
1613    
1614     - usbip_dbg_vhci_rx("find urb %p vurb %p seqnum %u\n",
1615     - urb, priv, seqnum);
1616     + usbip_dbg_vhci_rx("find urb seqnum %u\n", seqnum);
1617    
1618     switch (status) {
1619     case -ENOENT:
1620     /* fall through */
1621     case -ECONNRESET:
1622     - dev_info(&urb->dev->dev,
1623     - "urb %p was unlinked %ssynchronuously.\n", urb,
1624     - status == -ENOENT ? "" : "a");
1625     + dev_dbg(&urb->dev->dev,
1626     + "urb seq# %u was unlinked %ssynchronuously\n",
1627     + seqnum, status == -ENOENT ? "" : "a");
1628     break;
1629     case -EINPROGRESS:
1630     /* no info output */
1631     break;
1632     default:
1633     - dev_info(&urb->dev->dev,
1634     - "urb %p may be in a error, status %d\n", urb,
1635     - status);
1636     + dev_dbg(&urb->dev->dev,
1637     + "urb seq# %u may be in a error, status %d\n",
1638     + seqnum, status);
1639     }
1640    
1641     list_del(&priv->list);
1642     @@ -80,8 +79,8 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev,
1643     spin_unlock_irqrestore(&vdev->priv_lock, flags);
1644    
1645     if (!urb) {
1646     - pr_err("cannot find a urb of seqnum %u\n", pdu->base.seqnum);
1647     - pr_info("max seqnum %d\n",
1648     + pr_err("cannot find a urb of seqnum %u max seqnum %d\n",
1649     + pdu->base.seqnum,
1650     atomic_read(&vhci->seqnum));
1651     usbip_event_add(ud, VDEV_EVENT_ERROR_TCP);
1652     return;
1653     @@ -104,7 +103,7 @@ static void vhci_recv_ret_submit(struct vhci_device *vdev,
1654     if (usbip_dbg_flag_vhci_rx)
1655     usbip_dump_urb(urb);
1656    
1657     - usbip_dbg_vhci_rx("now giveback urb %p\n", urb);
1658     + usbip_dbg_vhci_rx("now giveback urb %u\n", pdu->base.seqnum);
1659    
1660     spin_lock_irqsave(&vhci->lock, flags);
1661     usb_hcd_unlink_urb_from_ep(vhci_to_hcd(vhci), urb);
1662     @@ -170,7 +169,7 @@ static void vhci_recv_ret_unlink(struct vhci_device *vdev,
1663     pr_info("the urb (seqnum %d) was already given back\n",
1664     pdu->base.seqnum);
1665     } else {
1666     - usbip_dbg_vhci_rx("now giveback urb %p\n", urb);
1667     + usbip_dbg_vhci_rx("now giveback urb %d\n", pdu->base.seqnum);
1668    
1669     /* If unlink is successful, status is -ECONNRESET */
1670     urb->status = pdu->u.ret_unlink.status;
1671     diff --git a/drivers/usb/usbip/vhci_tx.c b/drivers/usb/usbip/vhci_tx.c
1672     index 3e7878fe2fd4..a9a663a578b6 100644
1673     --- a/drivers/usb/usbip/vhci_tx.c
1674     +++ b/drivers/usb/usbip/vhci_tx.c
1675     @@ -83,7 +83,8 @@ static int vhci_send_cmd_submit(struct vhci_device *vdev)
1676     memset(&msg, 0, sizeof(msg));
1677     memset(&iov, 0, sizeof(iov));
1678    
1679     - usbip_dbg_vhci_tx("setup txdata urb %p\n", urb);
1680     + usbip_dbg_vhci_tx("setup txdata urb seqnum %lu\n",
1681     + priv->seqnum);
1682    
1683     /* 1. setup usbip_header */
1684     setup_cmd_submit_pdu(&pdu_header, urb);
1685     diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
1686     index 965cc5693a46..c9447a689522 100644
1687     --- a/include/linux/cpuhotplug.h
1688     +++ b/include/linux/cpuhotplug.h
1689     @@ -48,7 +48,7 @@ enum cpuhp_state {
1690     CPUHP_ARM_SHMOBILE_SCU_PREPARE,
1691     CPUHP_SH_SH3X_PREPARE,
1692     CPUHP_BLK_MQ_PREPARE,
1693     - CPUHP_TIMERS_DEAD,
1694     + CPUHP_TIMERS_PREPARE,
1695     CPUHP_NOTF_ERR_INJ_PREPARE,
1696     CPUHP_MIPS_SOC_PREPARE,
1697     CPUHP_BRINGUP_CPU,
1698     diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
1699     index a0649973ee5b..b9dfca557a6c 100644
1700     --- a/include/linux/ipv6.h
1701     +++ b/include/linux/ipv6.h
1702     @@ -246,7 +246,8 @@ struct ipv6_pinfo {
1703     * 100: prefer care-of address
1704     */
1705     dontfrag:1,
1706     - autoflowlabel:1;
1707     + autoflowlabel:1,
1708     + autoflowlabel_set:1;
1709     __u8 min_hopcount;
1710     __u8 tclass;
1711     __be32 rcv_flowinfo;
1712     diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h
1713     index 6045d4d58065..25ed105bbcfb 100644
1714     --- a/include/linux/mlx5/mlx5_ifc.h
1715     +++ b/include/linux/mlx5/mlx5_ifc.h
1716     @@ -143,7 +143,7 @@ enum {
1717     MLX5_CMD_OP_ALLOC_Q_COUNTER = 0x771,
1718     MLX5_CMD_OP_DEALLOC_Q_COUNTER = 0x772,
1719     MLX5_CMD_OP_QUERY_Q_COUNTER = 0x773,
1720     - MLX5_CMD_OP_SET_RATE_LIMIT = 0x780,
1721     + MLX5_CMD_OP_SET_PP_RATE_LIMIT = 0x780,
1722     MLX5_CMD_OP_QUERY_RATE_LIMIT = 0x781,
1723     MLX5_CMD_OP_ALLOC_PD = 0x800,
1724     MLX5_CMD_OP_DEALLOC_PD = 0x801,
1725     @@ -6689,7 +6689,7 @@ struct mlx5_ifc_add_vxlan_udp_dport_in_bits {
1726     u8 vxlan_udp_port[0x10];
1727     };
1728    
1729     -struct mlx5_ifc_set_rate_limit_out_bits {
1730     +struct mlx5_ifc_set_pp_rate_limit_out_bits {
1731     u8 status[0x8];
1732     u8 reserved_at_8[0x18];
1733    
1734     @@ -6698,7 +6698,7 @@ struct mlx5_ifc_set_rate_limit_out_bits {
1735     u8 reserved_at_40[0x40];
1736     };
1737    
1738     -struct mlx5_ifc_set_rate_limit_in_bits {
1739     +struct mlx5_ifc_set_pp_rate_limit_in_bits {
1740     u8 opcode[0x10];
1741     u8 reserved_at_10[0x10];
1742    
1743     @@ -6711,6 +6711,8 @@ struct mlx5_ifc_set_rate_limit_in_bits {
1744     u8 reserved_at_60[0x20];
1745    
1746     u8 rate_limit[0x20];
1747     +
1748     + u8 reserved_at_a0[0x160];
1749     };
1750    
1751     struct mlx5_ifc_access_register_out_bits {
1752     diff --git a/include/linux/ptr_ring.h b/include/linux/ptr_ring.h
1753     index b83507c0640c..e38f471a5402 100644
1754     --- a/include/linux/ptr_ring.h
1755     +++ b/include/linux/ptr_ring.h
1756     @@ -99,12 +99,18 @@ static inline bool ptr_ring_full_bh(struct ptr_ring *r)
1757    
1758     /* Note: callers invoking this in a loop must use a compiler barrier,
1759     * for example cpu_relax(). Callers must hold producer_lock.
1760     + * Callers are responsible for making sure pointer that is being queued
1761     + * points to a valid data.
1762     */
1763     static inline int __ptr_ring_produce(struct ptr_ring *r, void *ptr)
1764     {
1765     if (unlikely(!r->size) || r->queue[r->producer])
1766     return -ENOSPC;
1767    
1768     + /* Make sure the pointer we are storing points to a valid data. */
1769     + /* Pairs with smp_read_barrier_depends in __ptr_ring_consume. */
1770     + smp_wmb();
1771     +
1772     r->queue[r->producer++] = ptr;
1773     if (unlikely(r->producer >= r->size))
1774     r->producer = 0;
1775     @@ -244,6 +250,9 @@ static inline void *__ptr_ring_consume(struct ptr_ring *r)
1776     if (ptr)
1777     __ptr_ring_discard_one(r);
1778    
1779     + /* Make sure anyone accessing data through the pointer is up to date. */
1780     + /* Pairs with smp_wmb in __ptr_ring_produce. */
1781     + smp_read_barrier_depends();
1782     return ptr;
1783     }
1784    
1785     diff --git a/include/linux/tcp.h b/include/linux/tcp.h
1786     index 647532b0eb03..f50b717ce644 100644
1787     --- a/include/linux/tcp.h
1788     +++ b/include/linux/tcp.h
1789     @@ -219,7 +219,8 @@ struct tcp_sock {
1790     } rack;
1791     u16 advmss; /* Advertised MSS */
1792     u8 rate_app_limited:1, /* rate_{delivered,interval_us} limited? */
1793     - unused:7;
1794     + is_sack_reneg:1, /* in recovery from loss with SACK reneg? */
1795     + unused:6;
1796     u8 nonagle : 4,/* Disable Nagle algorithm? */
1797     thin_lto : 1,/* Use linear timeouts for thin streams */
1798     thin_dupack : 1,/* Fast retransmit on first dupack */
1799     diff --git a/include/linux/timer.h b/include/linux/timer.h
1800     index 51d601f192d4..ec86e4e55ea3 100644
1801     --- a/include/linux/timer.h
1802     +++ b/include/linux/timer.h
1803     @@ -274,9 +274,11 @@ unsigned long round_jiffies_up(unsigned long j);
1804     unsigned long round_jiffies_up_relative(unsigned long j);
1805    
1806     #ifdef CONFIG_HOTPLUG_CPU
1807     +int timers_prepare_cpu(unsigned int cpu);
1808     int timers_dead_cpu(unsigned int cpu);
1809     #else
1810     -#define timers_dead_cpu NULL
1811     +#define timers_prepare_cpu NULL
1812     +#define timers_dead_cpu NULL
1813     #endif
1814    
1815     #endif
1816     diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h
1817     index 4d6ec58a8d45..2edb150f1a4d 100644
1818     --- a/include/linux/vm_event_item.h
1819     +++ b/include/linux/vm_event_item.h
1820     @@ -89,10 +89,8 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
1821     #endif
1822     #endif
1823     #ifdef CONFIG_DEBUG_TLBFLUSH
1824     -#ifdef CONFIG_SMP
1825     NR_TLB_REMOTE_FLUSH, /* cpu tried to flush others' tlbs */
1826     NR_TLB_REMOTE_FLUSH_RECEIVED,/* cpu received ipi for flush */
1827     -#endif /* CONFIG_SMP */
1828     NR_TLB_LOCAL_FLUSH_ALL,
1829     NR_TLB_LOCAL_FLUSH_ONE,
1830     #endif /* CONFIG_DEBUG_TLBFLUSH */
1831     diff --git a/include/net/ip.h b/include/net/ip.h
1832     index 51c6b9786c46..0e3dcd5a134d 100644
1833     --- a/include/net/ip.h
1834     +++ b/include/net/ip.h
1835     @@ -33,6 +33,8 @@
1836     #include <net/flow.h>
1837     #include <net/flow_dissector.h>
1838    
1839     +#define IPV4_MIN_MTU 68 /* RFC 791 */
1840     +
1841     struct sock;
1842    
1843     struct inet_skb_parm {
1844     diff --git a/include/net/tcp.h b/include/net/tcp.h
1845     index fba4fc46871d..caf35e062639 100644
1846     --- a/include/net/tcp.h
1847     +++ b/include/net/tcp.h
1848     @@ -1001,7 +1001,7 @@ void tcp_rate_skb_sent(struct sock *sk, struct sk_buff *skb);
1849     void tcp_rate_skb_delivered(struct sock *sk, struct sk_buff *skb,
1850     struct rate_sample *rs);
1851     void tcp_rate_gen(struct sock *sk, u32 delivered, u32 lost,
1852     - struct skb_mstamp *now, struct rate_sample *rs);
1853     + bool is_sack_reneg, struct skb_mstamp *now, struct rate_sample *rs);
1854     void tcp_rate_check_app_limited(struct sock *sk);
1855    
1856     /* These functions determine how the current flow behaves in respect of SACK
1857     diff --git a/kernel/cpu.c b/kernel/cpu.c
1858     index e1436ca4aed0..802eb3361a0a 100644
1859     --- a/kernel/cpu.c
1860     +++ b/kernel/cpu.c
1861     @@ -1309,9 +1309,9 @@ static struct cpuhp_step cpuhp_bp_states[] = {
1862     * before blk_mq_queue_reinit_notify() from notify_dead(),
1863     * otherwise a RCU stall occurs.
1864     */
1865     - [CPUHP_TIMERS_DEAD] = {
1866     + [CPUHP_TIMERS_PREPARE] = {
1867     .name = "timers:dead",
1868     - .startup.single = NULL,
1869     + .startup.single = timers_prepare_cpu,
1870     .teardown.single = timers_dead_cpu,
1871     },
1872     /* Kicks the plugged cpu into life */
1873     diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
1874     index 3bcb61b52f6c..dae1a45be504 100644
1875     --- a/kernel/time/tick-sched.c
1876     +++ b/kernel/time/tick-sched.c
1877     @@ -663,6 +663,11 @@ static void tick_nohz_restart(struct tick_sched *ts, ktime_t now)
1878     tick_program_event(hrtimer_get_expires(&ts->sched_timer), 1);
1879     }
1880    
1881     +static inline bool local_timer_softirq_pending(void)
1882     +{
1883     + return local_softirq_pending() & TIMER_SOFTIRQ;
1884     +}
1885     +
1886     static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
1887     ktime_t now, int cpu)
1888     {
1889     @@ -679,8 +684,18 @@ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
1890     } while (read_seqretry(&jiffies_lock, seq));
1891     ts->last_jiffies = basejiff;
1892    
1893     - if (rcu_needs_cpu(basemono, &next_rcu) ||
1894     - arch_needs_cpu() || irq_work_needs_cpu()) {
1895     + /*
1896     + * Keep the periodic tick, when RCU, architecture or irq_work
1897     + * requests it.
1898     + * Aside of that check whether the local timer softirq is
1899     + * pending. If so its a bad idea to call get_next_timer_interrupt()
1900     + * because there is an already expired timer, so it will request
1901     + * immeditate expiry, which rearms the hardware timer with a
1902     + * minimal delta which brings us back to this place
1903     + * immediately. Lather, rinse and repeat...
1904     + */
1905     + if (rcu_needs_cpu(basemono, &next_rcu) || arch_needs_cpu() ||
1906     + irq_work_needs_cpu() || local_timer_softirq_pending()) {
1907     next_tick = basemono + TICK_NSEC;
1908     } else {
1909     /*
1910     diff --git a/kernel/time/timer.c b/kernel/time/timer.c
1911     index 7d670362891a..e872f7f05e8a 100644
1912     --- a/kernel/time/timer.c
1913     +++ b/kernel/time/timer.c
1914     @@ -849,11 +849,10 @@ static inline struct timer_base *get_timer_cpu_base(u32 tflags, u32 cpu)
1915     struct timer_base *base = per_cpu_ptr(&timer_bases[BASE_STD], cpu);
1916    
1917     /*
1918     - * If the timer is deferrable and nohz is active then we need to use
1919     - * the deferrable base.
1920     + * If the timer is deferrable and NO_HZ_COMMON is set then we need
1921     + * to use the deferrable base.
1922     */
1923     - if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && base->nohz_active &&
1924     - (tflags & TIMER_DEFERRABLE))
1925     + if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && (tflags & TIMER_DEFERRABLE))
1926     base = per_cpu_ptr(&timer_bases[BASE_DEF], cpu);
1927     return base;
1928     }
1929     @@ -863,11 +862,10 @@ static inline struct timer_base *get_timer_this_cpu_base(u32 tflags)
1930     struct timer_base *base = this_cpu_ptr(&timer_bases[BASE_STD]);
1931    
1932     /*
1933     - * If the timer is deferrable and nohz is active then we need to use
1934     - * the deferrable base.
1935     + * If the timer is deferrable and NO_HZ_COMMON is set then we need
1936     + * to use the deferrable base.
1937     */
1938     - if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && base->nohz_active &&
1939     - (tflags & TIMER_DEFERRABLE))
1940     + if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && (tflags & TIMER_DEFERRABLE))
1941     base = this_cpu_ptr(&timer_bases[BASE_DEF]);
1942     return base;
1943     }
1944     @@ -1021,8 +1019,6 @@ __mod_timer(struct timer_list *timer, unsigned long expires, bool pending_only)
1945     if (!ret && pending_only)
1946     goto out_unlock;
1947    
1948     - debug_activate(timer, expires);
1949     -
1950     new_base = get_target_base(base, timer->flags);
1951    
1952     if (base != new_base) {
1953     @@ -1046,6 +1042,8 @@ __mod_timer(struct timer_list *timer, unsigned long expires, bool pending_only)
1954     }
1955     }
1956    
1957     + debug_activate(timer, expires);
1958     +
1959     timer->expires = expires;
1960     /*
1961     * If 'idx' was calculated above and the base time did not advance
1962     @@ -1684,7 +1682,7 @@ static __latent_entropy void run_timer_softirq(struct softirq_action *h)
1963     base->must_forward_clk = false;
1964    
1965     __run_timers(base);
1966     - if (IS_ENABLED(CONFIG_NO_HZ_COMMON) && base->nohz_active)
1967     + if (IS_ENABLED(CONFIG_NO_HZ_COMMON))
1968     __run_timers(this_cpu_ptr(&timer_bases[BASE_DEF]));
1969     }
1970    
1971     @@ -1853,6 +1851,21 @@ static void migrate_timer_list(struct timer_base *new_base, struct hlist_head *h
1972     }
1973     }
1974    
1975     +int timers_prepare_cpu(unsigned int cpu)
1976     +{
1977     + struct timer_base *base;
1978     + int b;
1979     +
1980     + for (b = 0; b < NR_BASES; b++) {
1981     + base = per_cpu_ptr(&timer_bases[b], cpu);
1982     + base->clk = jiffies;
1983     + base->next_expiry = base->clk + NEXT_TIMER_MAX_DELTA;
1984     + base->is_idle = false;
1985     + base->must_forward_clk = true;
1986     + }
1987     + return 0;
1988     +}
1989     +
1990     int timers_dead_cpu(unsigned int cpu)
1991     {
1992     struct timer_base *old_base;
1993     diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
1994     index f5c016e8fc88..3e1d11f4fe44 100644
1995     --- a/kernel/trace/ring_buffer.c
1996     +++ b/kernel/trace/ring_buffer.c
1997     @@ -280,6 +280,8 @@ EXPORT_SYMBOL_GPL(ring_buffer_event_data);
1998     /* Missed count stored at end */
1999     #define RB_MISSED_STORED (1 << 30)
2000    
2001     +#define RB_MISSED_FLAGS (RB_MISSED_EVENTS|RB_MISSED_STORED)
2002     +
2003     struct buffer_data_page {
2004     u64 time_stamp; /* page time stamp */
2005     local_t commit; /* write committed index */
2006     @@ -331,7 +333,9 @@ static void rb_init_page(struct buffer_data_page *bpage)
2007     */
2008     size_t ring_buffer_page_len(void *page)
2009     {
2010     - return local_read(&((struct buffer_data_page *)page)->commit)
2011     + struct buffer_data_page *bpage = page;
2012     +
2013     + return (local_read(&bpage->commit) & ~RB_MISSED_FLAGS)
2014     + BUF_PAGE_HDR_SIZE;
2015     }
2016    
2017     diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
2018     index 4214cd960b8e..15b02645ce8b 100644
2019     --- a/kernel/trace/trace.c
2020     +++ b/kernel/trace/trace.c
2021     @@ -6181,7 +6181,7 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
2022     .spd_release = buffer_spd_release,
2023     };
2024     struct buffer_ref *ref;
2025     - int entries, size, i;
2026     + int entries, i;
2027     ssize_t ret = 0;
2028    
2029     #ifdef CONFIG_TRACER_MAX_TRACE
2030     @@ -6232,14 +6232,6 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
2031     break;
2032     }
2033    
2034     - /*
2035     - * zero out any left over data, this is going to
2036     - * user land.
2037     - */
2038     - size = ring_buffer_page_len(ref->page);
2039     - if (size < PAGE_SIZE)
2040     - memset(ref->page + size, 0, PAGE_SIZE - size);
2041     -
2042     page = virt_to_page(ref->page);
2043    
2044     spd.pages[i] = page;
2045     @@ -6963,6 +6955,7 @@ allocate_trace_buffer(struct trace_array *tr, struct trace_buffer *buf, int size
2046     buf->data = alloc_percpu(struct trace_array_cpu);
2047     if (!buf->data) {
2048     ring_buffer_free(buf->buffer);
2049     + buf->buffer = NULL;
2050     return -ENOMEM;
2051     }
2052    
2053     @@ -6986,7 +6979,9 @@ static int allocate_trace_buffers(struct trace_array *tr, int size)
2054     allocate_snapshot ? size : 1);
2055     if (WARN_ON(ret)) {
2056     ring_buffer_free(tr->trace_buffer.buffer);
2057     + tr->trace_buffer.buffer = NULL;
2058     free_percpu(tr->trace_buffer.data);
2059     + tr->trace_buffer.data = NULL;
2060     return -ENOMEM;
2061     }
2062     tr->allocated_snapshot = allocate_snapshot;
2063     diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
2064     index 5d4006e589cb..4f831225d34f 100644
2065     --- a/net/bridge/br_netlink.c
2066     +++ b/net/bridge/br_netlink.c
2067     @@ -1092,19 +1092,20 @@ static int br_dev_newlink(struct net *src_net, struct net_device *dev,
2068     struct net_bridge *br = netdev_priv(dev);
2069     int err;
2070    
2071     + err = register_netdevice(dev);
2072     + if (err)
2073     + return err;
2074     +
2075     if (tb[IFLA_ADDRESS]) {
2076     spin_lock_bh(&br->lock);
2077     br_stp_change_bridge_id(br, nla_data(tb[IFLA_ADDRESS]));
2078     spin_unlock_bh(&br->lock);
2079     }
2080    
2081     - err = register_netdevice(dev);
2082     - if (err)
2083     - return err;
2084     -
2085     err = br_changelink(dev, tb, data);
2086     if (err)
2087     - unregister_netdevice(dev);
2088     + br_dev_delete(dev, NULL);
2089     +
2090     return err;
2091     }
2092    
2093     diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
2094     index 7001da910c6b..b7efe2f19f83 100644
2095     --- a/net/core/net_namespace.c
2096     +++ b/net/core/net_namespace.c
2097     @@ -263,7 +263,7 @@ struct net *get_net_ns_by_id(struct net *net, int id)
2098     spin_lock_irqsave(&net->nsid_lock, flags);
2099     peer = idr_find(&net->netns_ids, id);
2100     if (peer)
2101     - get_net(peer);
2102     + peer = maybe_get_net(peer);
2103     spin_unlock_irqrestore(&net->nsid_lock, flags);
2104     rcu_read_unlock();
2105    
2106     diff --git a/net/core/skbuff.c b/net/core/skbuff.c
2107     index aec5605944d3..a64515583bc1 100644
2108     --- a/net/core/skbuff.c
2109     +++ b/net/core/skbuff.c
2110     @@ -3823,7 +3823,7 @@ void skb_complete_tx_timestamp(struct sk_buff *skb,
2111     struct sock *sk = skb->sk;
2112    
2113     if (!skb_may_tx_timestamp(sk, false))
2114     - return;
2115     + goto err;
2116    
2117     /* Take a reference to prevent skb_orphan() from freeing the socket,
2118     * but only if the socket refcount is not zero.
2119     @@ -3832,7 +3832,11 @@ void skb_complete_tx_timestamp(struct sk_buff *skb,
2120     *skb_hwtstamps(skb) = *hwtstamps;
2121     __skb_complete_tx_timestamp(skb, sk, SCM_TSTAMP_SND);
2122     sock_put(sk);
2123     + return;
2124     }
2125     +
2126     +err:
2127     + kfree_skb(skb);
2128     }
2129     EXPORT_SYMBOL_GPL(skb_complete_tx_timestamp);
2130    
2131     diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
2132     index 062a67ca9a21..f08f984ebc56 100644
2133     --- a/net/ipv4/devinet.c
2134     +++ b/net/ipv4/devinet.c
2135     @@ -1380,7 +1380,7 @@ static void inetdev_changename(struct net_device *dev, struct in_device *in_dev)
2136    
2137     static bool inetdev_valid_mtu(unsigned int mtu)
2138     {
2139     - return mtu >= 68;
2140     + return mtu >= IPV4_MIN_MTU;
2141     }
2142    
2143     static void inetdev_send_gratuitous_arp(struct net_device *dev,
2144     diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
2145     index 968d8e165e3d..ffae472e250a 100644
2146     --- a/net/ipv4/fib_frontend.c
2147     +++ b/net/ipv4/fib_frontend.c
2148     @@ -1253,14 +1253,19 @@ static int __net_init ip_fib_net_init(struct net *net)
2149    
2150     static void ip_fib_net_exit(struct net *net)
2151     {
2152     - unsigned int i;
2153     + int i;
2154    
2155     rtnl_lock();
2156     #ifdef CONFIG_IP_MULTIPLE_TABLES
2157     RCU_INIT_POINTER(net->ipv4.fib_main, NULL);
2158     RCU_INIT_POINTER(net->ipv4.fib_default, NULL);
2159     #endif
2160     - for (i = 0; i < FIB_TABLE_HASHSZ; i++) {
2161     + /* Destroy the tables in reverse order to guarantee that the
2162     + * local table, ID 255, is destroyed before the main table, ID
2163     + * 254. This is necessary as the local table may contain
2164     + * references to data contained in the main table.
2165     + */
2166     + for (i = FIB_TABLE_HASHSZ - 1; i >= 0; i--) {
2167     struct hlist_head *head = &net->ipv4.fib_table_hash[i];
2168     struct hlist_node *tmp;
2169     struct fib_table *tb;
2170     diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
2171     index 08575e3bd135..7bff0c65046f 100644
2172     --- a/net/ipv4/igmp.c
2173     +++ b/net/ipv4/igmp.c
2174     @@ -89,6 +89,7 @@
2175     #include <linux/rtnetlink.h>
2176     #include <linux/times.h>
2177     #include <linux/pkt_sched.h>
2178     +#include <linux/byteorder/generic.h>
2179    
2180     #include <net/net_namespace.h>
2181     #include <net/arp.h>
2182     @@ -321,6 +322,23 @@ igmp_scount(struct ip_mc_list *pmc, int type, int gdeleted, int sdeleted)
2183     return scount;
2184     }
2185    
2186     +/* source address selection per RFC 3376 section 4.2.13 */
2187     +static __be32 igmpv3_get_srcaddr(struct net_device *dev,
2188     + const struct flowi4 *fl4)
2189     +{
2190     + struct in_device *in_dev = __in_dev_get_rcu(dev);
2191     +
2192     + if (!in_dev)
2193     + return htonl(INADDR_ANY);
2194     +
2195     + for_ifa(in_dev) {
2196     + if (inet_ifa_match(fl4->saddr, ifa))
2197     + return fl4->saddr;
2198     + } endfor_ifa(in_dev);
2199     +
2200     + return htonl(INADDR_ANY);
2201     +}
2202     +
2203     static struct sk_buff *igmpv3_newpack(struct net_device *dev, unsigned int mtu)
2204     {
2205     struct sk_buff *skb;
2206     @@ -368,7 +386,7 @@ static struct sk_buff *igmpv3_newpack(struct net_device *dev, unsigned int mtu)
2207     pip->frag_off = htons(IP_DF);
2208     pip->ttl = 1;
2209     pip->daddr = fl4.daddr;
2210     - pip->saddr = fl4.saddr;
2211     + pip->saddr = igmpv3_get_srcaddr(dev, &fl4);
2212     pip->protocol = IPPROTO_IGMP;
2213     pip->tot_len = 0; /* filled in later */
2214     ip_select_ident(net, skb, NULL);
2215     @@ -404,16 +422,17 @@ static int grec_size(struct ip_mc_list *pmc, int type, int gdel, int sdel)
2216     }
2217    
2218     static struct sk_buff *add_grhead(struct sk_buff *skb, struct ip_mc_list *pmc,
2219     - int type, struct igmpv3_grec **ppgr)
2220     + int type, struct igmpv3_grec **ppgr, unsigned int mtu)
2221     {
2222     struct net_device *dev = pmc->interface->dev;
2223     struct igmpv3_report *pih;
2224     struct igmpv3_grec *pgr;
2225    
2226     - if (!skb)
2227     - skb = igmpv3_newpack(dev, dev->mtu);
2228     - if (!skb)
2229     - return NULL;
2230     + if (!skb) {
2231     + skb = igmpv3_newpack(dev, mtu);
2232     + if (!skb)
2233     + return NULL;
2234     + }
2235     pgr = (struct igmpv3_grec *)skb_put(skb, sizeof(struct igmpv3_grec));
2236     pgr->grec_type = type;
2237     pgr->grec_auxwords = 0;
2238     @@ -436,12 +455,17 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc,
2239     struct igmpv3_grec *pgr = NULL;
2240     struct ip_sf_list *psf, *psf_next, *psf_prev, **psf_list;
2241     int scount, stotal, first, isquery, truncate;
2242     + unsigned int mtu;
2243    
2244     if (pmc->multiaddr == IGMP_ALL_HOSTS)
2245     return skb;
2246     if (ipv4_is_local_multicast(pmc->multiaddr) && !net->ipv4.sysctl_igmp_llm_reports)
2247     return skb;
2248    
2249     + mtu = READ_ONCE(dev->mtu);
2250     + if (mtu < IPV4_MIN_MTU)
2251     + return skb;
2252     +
2253     isquery = type == IGMPV3_MODE_IS_INCLUDE ||
2254     type == IGMPV3_MODE_IS_EXCLUDE;
2255     truncate = type == IGMPV3_MODE_IS_EXCLUDE ||
2256     @@ -462,7 +486,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc,
2257     AVAILABLE(skb) < grec_size(pmc, type, gdeleted, sdeleted)) {
2258     if (skb)
2259     igmpv3_sendpack(skb);
2260     - skb = igmpv3_newpack(dev, dev->mtu);
2261     + skb = igmpv3_newpack(dev, mtu);
2262     }
2263     }
2264     first = 1;
2265     @@ -498,12 +522,12 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc,
2266     pgr->grec_nsrcs = htons(scount);
2267     if (skb)
2268     igmpv3_sendpack(skb);
2269     - skb = igmpv3_newpack(dev, dev->mtu);
2270     + skb = igmpv3_newpack(dev, mtu);
2271     first = 1;
2272     scount = 0;
2273     }
2274     if (first) {
2275     - skb = add_grhead(skb, pmc, type, &pgr);
2276     + skb = add_grhead(skb, pmc, type, &pgr, mtu);
2277     first = 0;
2278     }
2279     if (!skb)
2280     @@ -538,7 +562,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ip_mc_list *pmc,
2281     igmpv3_sendpack(skb);
2282     skb = NULL; /* add_grhead will get a new one */
2283     }
2284     - skb = add_grhead(skb, pmc, type, &pgr);
2285     + skb = add_grhead(skb, pmc, type, &pgr, mtu);
2286     }
2287     }
2288     if (pgr)
2289     diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
2290     index bd7f1836bb70..96536a0d6e2d 100644
2291     --- a/net/ipv4/ip_tunnel.c
2292     +++ b/net/ipv4/ip_tunnel.c
2293     @@ -346,8 +346,8 @@ static int ip_tunnel_bind_dev(struct net_device *dev)
2294     dev->needed_headroom = t_hlen + hlen;
2295     mtu -= (dev->hard_header_len + t_hlen);
2296    
2297     - if (mtu < 68)
2298     - mtu = 68;
2299     + if (mtu < IPV4_MIN_MTU)
2300     + mtu = IPV4_MIN_MTU;
2301    
2302     return mtu;
2303     }
2304     diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
2305     index 9879b73d5565..59d8770055ed 100644
2306     --- a/net/ipv4/raw.c
2307     +++ b/net/ipv4/raw.c
2308     @@ -502,11 +502,16 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
2309     int err;
2310     struct ip_options_data opt_copy;
2311     struct raw_frag_vec rfv;
2312     + int hdrincl;
2313    
2314     err = -EMSGSIZE;
2315     if (len > 0xFFFF)
2316     goto out;
2317    
2318     + /* hdrincl should be READ_ONCE(inet->hdrincl)
2319     + * but READ_ONCE() doesn't work with bit fields
2320     + */
2321     + hdrincl = inet->hdrincl;
2322     /*
2323     * Check the flags.
2324     */
2325     @@ -582,7 +587,7 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
2326     /* Linux does not mangle headers on raw sockets,
2327     * so that IP options + IP_HDRINCL is non-sense.
2328     */
2329     - if (inet->hdrincl)
2330     + if (hdrincl)
2331     goto done;
2332     if (ipc.opt->opt.srr) {
2333     if (!daddr)
2334     @@ -604,12 +609,12 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
2335    
2336     flowi4_init_output(&fl4, ipc.oif, sk->sk_mark, tos,
2337     RT_SCOPE_UNIVERSE,
2338     - inet->hdrincl ? IPPROTO_RAW : sk->sk_protocol,
2339     + hdrincl ? IPPROTO_RAW : sk->sk_protocol,
2340     inet_sk_flowi_flags(sk) |
2341     - (inet->hdrincl ? FLOWI_FLAG_KNOWN_NH : 0),
2342     + (hdrincl ? FLOWI_FLAG_KNOWN_NH : 0),
2343     daddr, saddr, 0, 0);
2344    
2345     - if (!inet->hdrincl) {
2346     + if (!hdrincl) {
2347     rfv.msg = msg;
2348     rfv.hlen = 0;
2349    
2350     @@ -634,7 +639,7 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
2351     goto do_confirm;
2352     back_from_confirm:
2353    
2354     - if (inet->hdrincl)
2355     + if (hdrincl)
2356     err = raw_send_hdrinc(sk, &fl4, msg, len,
2357     &rt, msg->msg_flags, &ipc.sockc);
2358    
2359     diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
2360     index dd33c785ce16..05d2bde00864 100644
2361     --- a/net/ipv4/tcp.c
2362     +++ b/net/ipv4/tcp.c
2363     @@ -2297,6 +2297,7 @@ int tcp_disconnect(struct sock *sk, int flags)
2364     tp->snd_cwnd_cnt = 0;
2365     tp->window_clamp = 0;
2366     tcp_set_ca_state(sk, TCP_CA_Open);
2367     + tp->is_sack_reneg = 0;
2368     tcp_clear_retrans(tp);
2369     inet_csk_delack_init(sk);
2370     /* Initialize rcv_mss to TCP_MIN_MSS to avoid division by 0
2371     diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
2372     index cb8db347c680..97f9cac98348 100644
2373     --- a/net/ipv4/tcp_bbr.c
2374     +++ b/net/ipv4/tcp_bbr.c
2375     @@ -81,7 +81,8 @@ struct bbr {
2376     u32 lt_last_lost; /* LT intvl start: tp->lost */
2377     u32 pacing_gain:10, /* current gain for setting pacing rate */
2378     cwnd_gain:10, /* current gain for setting cwnd */
2379     - full_bw_cnt:3, /* number of rounds without large bw gains */
2380     + full_bw_reached:1, /* reached full bw in Startup? */
2381     + full_bw_cnt:2, /* number of rounds without large bw gains */
2382     cycle_idx:3, /* current index in pacing_gain cycle array */
2383     has_seen_rtt:1, /* have we seen an RTT sample yet? */
2384     unused_b:5;
2385     @@ -151,7 +152,7 @@ static bool bbr_full_bw_reached(const struct sock *sk)
2386     {
2387     const struct bbr *bbr = inet_csk_ca(sk);
2388    
2389     - return bbr->full_bw_cnt >= bbr_full_bw_cnt;
2390     + return bbr->full_bw_reached;
2391     }
2392    
2393     /* Return the windowed max recent bandwidth sample, in pkts/uS << BW_SCALE. */
2394     @@ -688,6 +689,7 @@ static void bbr_check_full_bw_reached(struct sock *sk,
2395     return;
2396     }
2397     ++bbr->full_bw_cnt;
2398     + bbr->full_bw_reached = bbr->full_bw_cnt >= bbr_full_bw_cnt;
2399     }
2400    
2401     /* If pipe is probably full, drain the queue and then enter steady-state. */
2402     @@ -821,6 +823,7 @@ static void bbr_init(struct sock *sk)
2403     bbr->restore_cwnd = 0;
2404     bbr->round_start = 0;
2405     bbr->idle_restart = 0;
2406     + bbr->full_bw_reached = 0;
2407     bbr->full_bw = 0;
2408     bbr->full_bw_cnt = 0;
2409     bbr->cycle_mstamp.v64 = 0;
2410     diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
2411     index 05255a286888..2f107e46355c 100644
2412     --- a/net/ipv4/tcp_input.c
2413     +++ b/net/ipv4/tcp_input.c
2414     @@ -1966,6 +1966,8 @@ void tcp_enter_loss(struct sock *sk)
2415     NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPSACKRENEGING);
2416     tp->sacked_out = 0;
2417     tp->fackets_out = 0;
2418     + /* Mark SACK reneging until we recover from this loss event. */
2419     + tp->is_sack_reneg = 1;
2420     }
2421     tcp_clear_all_retrans_hints(tp);
2422    
2423     @@ -2463,6 +2465,7 @@ static bool tcp_try_undo_recovery(struct sock *sk)
2424     return true;
2425     }
2426     tcp_set_ca_state(sk, TCP_CA_Open);
2427     + tp->is_sack_reneg = 0;
2428     return false;
2429     }
2430    
2431     @@ -2494,8 +2497,10 @@ static bool tcp_try_undo_loss(struct sock *sk, bool frto_undo)
2432     NET_INC_STATS(sock_net(sk),
2433     LINUX_MIB_TCPSPURIOUSRTOS);
2434     inet_csk(sk)->icsk_retransmits = 0;
2435     - if (frto_undo || tcp_is_sack(tp))
2436     + if (frto_undo || tcp_is_sack(tp)) {
2437     tcp_set_ca_state(sk, TCP_CA_Open);
2438     + tp->is_sack_reneg = 0;
2439     + }
2440     return true;
2441     }
2442     return false;
2443     @@ -3589,6 +3594,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
2444     struct tcp_sacktag_state sack_state;
2445     struct rate_sample rs = { .prior_delivered = 0 };
2446     u32 prior_snd_una = tp->snd_una;
2447     + bool is_sack_reneg = tp->is_sack_reneg;
2448     u32 ack_seq = TCP_SKB_CB(skb)->seq;
2449     u32 ack = TCP_SKB_CB(skb)->ack_seq;
2450     bool is_dupack = false;
2451     @@ -3711,7 +3717,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
2452     tcp_schedule_loss_probe(sk);
2453     delivered = tp->delivered - delivered; /* freshly ACKed or SACKed */
2454     lost = tp->lost - lost; /* freshly marked lost */
2455     - tcp_rate_gen(sk, delivered, lost, &now, &rs);
2456     + tcp_rate_gen(sk, delivered, lost, is_sack_reneg, &now, &rs);
2457     tcp_cong_control(sk, ack, delivered, flag, &rs);
2458     tcp_xmit_recovery(sk, rexmit);
2459     return 1;
2460     diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
2461     index d577ec07a0d8..b3960738464e 100644
2462     --- a/net/ipv4/tcp_ipv4.c
2463     +++ b/net/ipv4/tcp_ipv4.c
2464     @@ -828,7 +828,7 @@ static void tcp_v4_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
2465     tcp_time_stamp,
2466     req->ts_recent,
2467     0,
2468     - tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&ip_hdr(skb)->daddr,
2469     + tcp_md5_do_lookup(sk, (union tcp_md5_addr *)&ip_hdr(skb)->saddr,
2470     AF_INET),
2471     inet_rsk(req)->no_srccheck ? IP_REPLY_ARG_NOSRCCHECK : 0,
2472     ip_hdr(skb)->tos);
2473     diff --git a/net/ipv4/tcp_rate.c b/net/ipv4/tcp_rate.c
2474     index 9be1581a5a08..18309f58ab8d 100644
2475     --- a/net/ipv4/tcp_rate.c
2476     +++ b/net/ipv4/tcp_rate.c
2477     @@ -106,7 +106,7 @@ void tcp_rate_skb_delivered(struct sock *sk, struct sk_buff *skb,
2478    
2479     /* Update the connection delivery information and generate a rate sample. */
2480     void tcp_rate_gen(struct sock *sk, u32 delivered, u32 lost,
2481     - struct skb_mstamp *now, struct rate_sample *rs)
2482     + bool is_sack_reneg, struct skb_mstamp *now, struct rate_sample *rs)
2483     {
2484     struct tcp_sock *tp = tcp_sk(sk);
2485     u32 snd_us, ack_us;
2486     @@ -124,8 +124,12 @@ void tcp_rate_gen(struct sock *sk, u32 delivered, u32 lost,
2487    
2488     rs->acked_sacked = delivered; /* freshly ACKed or SACKed */
2489     rs->losses = lost; /* freshly marked lost */
2490     - /* Return an invalid sample if no timing information is available. */
2491     - if (!rs->prior_mstamp.v64) {
2492     + /* Return an invalid sample if no timing information is available or
2493     + * in recovery from loss with SACK reneging. Rate samples taken during
2494     + * a SACK reneging event may overestimate bw by including packets that
2495     + * were SACKed before the reneg.
2496     + */
2497     + if (!rs->prior_mstamp.v64 || is_sack_reneg) {
2498     rs->delivered = -1;
2499     rs->interval_us = -1;
2500     return;
2501     diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
2502     index 8285a1c108c9..5cad76f87536 100644
2503     --- a/net/ipv6/af_inet6.c
2504     +++ b/net/ipv6/af_inet6.c
2505     @@ -209,7 +209,6 @@ static int inet6_create(struct net *net, struct socket *sock, int protocol,
2506     np->mcast_hops = IPV6_DEFAULT_MCASTHOPS;
2507     np->mc_loop = 1;
2508     np->pmtudisc = IPV6_PMTUDISC_WANT;
2509     - np->autoflowlabel = ip6_default_np_autolabel(sock_net(sk));
2510     sk->sk_ipv6only = net->ipv6.sysctl.bindv6only;
2511    
2512     /* Init the ipv4 part of the socket since we can have sockets
2513     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
2514     index 6e01c9a8dfd3..506efba33a89 100644
2515     --- a/net/ipv6/ip6_output.c
2516     +++ b/net/ipv6/ip6_output.c
2517     @@ -156,6 +156,14 @@ int ip6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
2518     !(IP6CB(skb)->flags & IP6SKB_REROUTED));
2519     }
2520    
2521     +static bool ip6_autoflowlabel(struct net *net, const struct ipv6_pinfo *np)
2522     +{
2523     + if (!np->autoflowlabel_set)
2524     + return ip6_default_np_autolabel(net);
2525     + else
2526     + return np->autoflowlabel;
2527     +}
2528     +
2529     /*
2530     * xmit an sk_buff (used by TCP, SCTP and DCCP)
2531     * Note : socket lock is not held for SYNACK packets, but might be modified
2532     @@ -219,7 +227,7 @@ int ip6_xmit(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6,
2533     hlimit = ip6_dst_hoplimit(dst);
2534    
2535     ip6_flow_hdr(hdr, tclass, ip6_make_flowlabel(net, skb, fl6->flowlabel,
2536     - np->autoflowlabel, fl6));
2537     + ip6_autoflowlabel(net, np), fl6));
2538    
2539     hdr->payload_len = htons(seg_len);
2540     hdr->nexthdr = proto;
2541     @@ -1691,7 +1699,7 @@ struct sk_buff *__ip6_make_skb(struct sock *sk,
2542    
2543     ip6_flow_hdr(hdr, v6_cork->tclass,
2544     ip6_make_flowlabel(net, skb, fl6->flowlabel,
2545     - np->autoflowlabel, fl6));
2546     + ip6_autoflowlabel(net, np), fl6));
2547     hdr->hop_limit = v6_cork->hop_limit;
2548     hdr->nexthdr = proto;
2549     hdr->saddr = fl6->saddr;
2550     diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
2551     index 12b2fd512f32..11d22d642488 100644
2552     --- a/net/ipv6/ip6_tunnel.c
2553     +++ b/net/ipv6/ip6_tunnel.c
2554     @@ -911,7 +911,7 @@ static int ipxip6_rcv(struct sk_buff *skb, u8 ipproto,
2555     if (t->parms.collect_md) {
2556     tun_dst = ipv6_tun_rx_dst(skb, 0, 0, 0);
2557     if (!tun_dst)
2558     - return 0;
2559     + goto drop;
2560     }
2561     ret = __ip6_tnl_rcv(t, skb, tpi, tun_dst, dscp_ecn_decapsulate,
2562     log_ecn_error);
2563     diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
2564     index 38bee173dc2b..6e3871c7f8f7 100644
2565     --- a/net/ipv6/ipv6_sockglue.c
2566     +++ b/net/ipv6/ipv6_sockglue.c
2567     @@ -874,6 +874,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
2568     break;
2569     case IPV6_AUTOFLOWLABEL:
2570     np->autoflowlabel = valbool;
2571     + np->autoflowlabel_set = 1;
2572     retv = 0;
2573     break;
2574     }
2575     diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c
2576     index 1bdc703cb966..ca8fac6e5a09 100644
2577     --- a/net/ipv6/mcast.c
2578     +++ b/net/ipv6/mcast.c
2579     @@ -1682,16 +1682,16 @@ static int grec_size(struct ifmcaddr6 *pmc, int type, int gdel, int sdel)
2580     }
2581    
2582     static struct sk_buff *add_grhead(struct sk_buff *skb, struct ifmcaddr6 *pmc,
2583     - int type, struct mld2_grec **ppgr)
2584     + int type, struct mld2_grec **ppgr, unsigned int mtu)
2585     {
2586     - struct net_device *dev = pmc->idev->dev;
2587     struct mld2_report *pmr;
2588     struct mld2_grec *pgr;
2589    
2590     - if (!skb)
2591     - skb = mld_newpack(pmc->idev, dev->mtu);
2592     - if (!skb)
2593     - return NULL;
2594     + if (!skb) {
2595     + skb = mld_newpack(pmc->idev, mtu);
2596     + if (!skb)
2597     + return NULL;
2598     + }
2599     pgr = (struct mld2_grec *)skb_put(skb, sizeof(struct mld2_grec));
2600     pgr->grec_type = type;
2601     pgr->grec_auxwords = 0;
2602     @@ -1714,10 +1714,15 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
2603     struct mld2_grec *pgr = NULL;
2604     struct ip6_sf_list *psf, *psf_next, *psf_prev, **psf_list;
2605     int scount, stotal, first, isquery, truncate;
2606     + unsigned int mtu;
2607    
2608     if (pmc->mca_flags & MAF_NOREPORT)
2609     return skb;
2610    
2611     + mtu = READ_ONCE(dev->mtu);
2612     + if (mtu < IPV6_MIN_MTU)
2613     + return skb;
2614     +
2615     isquery = type == MLD2_MODE_IS_INCLUDE ||
2616     type == MLD2_MODE_IS_EXCLUDE;
2617     truncate = type == MLD2_MODE_IS_EXCLUDE ||
2618     @@ -1738,7 +1743,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
2619     AVAILABLE(skb) < grec_size(pmc, type, gdeleted, sdeleted)) {
2620     if (skb)
2621     mld_sendpack(skb);
2622     - skb = mld_newpack(idev, dev->mtu);
2623     + skb = mld_newpack(idev, mtu);
2624     }
2625     }
2626     first = 1;
2627     @@ -1774,12 +1779,12 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
2628     pgr->grec_nsrcs = htons(scount);
2629     if (skb)
2630     mld_sendpack(skb);
2631     - skb = mld_newpack(idev, dev->mtu);
2632     + skb = mld_newpack(idev, mtu);
2633     first = 1;
2634     scount = 0;
2635     }
2636     if (first) {
2637     - skb = add_grhead(skb, pmc, type, &pgr);
2638     + skb = add_grhead(skb, pmc, type, &pgr, mtu);
2639     first = 0;
2640     }
2641     if (!skb)
2642     @@ -1814,7 +1819,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc,
2643     mld_sendpack(skb);
2644     skb = NULL; /* add_grhead will get a new one */
2645     }
2646     - skb = add_grhead(skb, pmc, type, &pgr);
2647     + skb = add_grhead(skb, pmc, type, &pgr, mtu);
2648     }
2649     }
2650     if (pgr)
2651     diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
2652     index 7ac2365aa6fb..eb624547382f 100644
2653     --- a/net/ipv6/tcp_ipv6.c
2654     +++ b/net/ipv6/tcp_ipv6.c
2655     @@ -962,7 +962,7 @@ static void tcp_v6_reqsk_send_ack(const struct sock *sk, struct sk_buff *skb,
2656     tcp_rsk(req)->rcv_nxt,
2657     req->rsk_rcv_wnd >> inet_rsk(req)->rcv_wscale,
2658     tcp_time_stamp, req->ts_recent, sk->sk_bound_dev_if,
2659     - tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->daddr),
2660     + tcp_v6_md5_do_lookup(sk, &ipv6_hdr(skb)->saddr),
2661     0, 0);
2662     }
2663    
2664     diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
2665     index 1ff497bd9c20..e1c123d4cdda 100644
2666     --- a/net/netlink/af_netlink.c
2667     +++ b/net/netlink/af_netlink.c
2668     @@ -261,6 +261,9 @@ static int __netlink_deliver_tap_skb(struct sk_buff *skb,
2669     struct sock *sk = skb->sk;
2670     int ret = -ENOMEM;
2671    
2672     + if (!net_eq(dev_net(dev), sock_net(sk)))
2673     + return 0;
2674     +
2675     dev_hold(dev);
2676    
2677     if (is_vmalloc_addr(skb->head))
2678     diff --git a/net/rds/send.c b/net/rds/send.c
2679     index ad247dc71ebb..ef53d164e146 100644
2680     --- a/net/rds/send.c
2681     +++ b/net/rds/send.c
2682     @@ -1006,6 +1006,9 @@ static int rds_rdma_bytes(struct msghdr *msg, size_t *rdma_bytes)
2683     continue;
2684    
2685     if (cmsg->cmsg_type == RDS_CMSG_RDMA_ARGS) {
2686     + if (cmsg->cmsg_len <
2687     + CMSG_LEN(sizeof(struct rds_rdma_args)))
2688     + return -EINVAL;
2689     args = CMSG_DATA(cmsg);
2690     *rdma_bytes += args->remote_vec.bytes;
2691     }
2692     diff --git a/net/sctp/socket.c b/net/sctp/socket.c
2693     index c2ab864da50d..7181ce6c62bf 100644
2694     --- a/net/sctp/socket.c
2695     +++ b/net/sctp/socket.c
2696     @@ -4246,7 +4246,7 @@ static int sctp_init_sock(struct sock *sk)
2697     SCTP_DBG_OBJCNT_INC(sock);
2698    
2699     local_bh_disable();
2700     - percpu_counter_inc(&sctp_sockets_allocated);
2701     + sk_sockets_allocated_inc(sk);
2702     sock_prot_inuse_add(net, sk->sk_prot, 1);
2703    
2704     /* Nothing can fail after this block, otherwise
2705     @@ -4290,7 +4290,7 @@ static void sctp_destroy_sock(struct sock *sk)
2706     }
2707     sctp_endpoint_free(sp->ep);
2708     local_bh_disable();
2709     - percpu_counter_dec(&sctp_sockets_allocated);
2710     + sk_sockets_allocated_dec(sk);
2711     sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
2712     local_bh_enable();
2713     }
2714     diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c
2715     index c9af022676c2..47c3e97c3136 100644
2716     --- a/sound/hda/hdac_i915.c
2717     +++ b/sound/hda/hdac_i915.c
2718     @@ -319,7 +319,7 @@ static int hdac_component_master_match(struct device *dev, void *data)
2719     */
2720     int snd_hdac_i915_register_notifier(const struct i915_audio_component_audio_ops *aops)
2721     {
2722     - if (WARN_ON(!hdac_acomp))
2723     + if (!hdac_acomp)
2724     return -ENODEV;
2725    
2726     hdac_acomp->audio_ops = aops;
2727     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
2728     index ba40596b9d92..4ef3b0067876 100644
2729     --- a/sound/pci/hda/patch_realtek.c
2730     +++ b/sound/pci/hda/patch_realtek.c
2731     @@ -5971,6 +5971,11 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
2732     SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
2733     {0x1b, 0x01011020},
2734     {0x21, 0x02211010}),
2735     + SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
2736     + {0x12, 0x90a60130},
2737     + {0x14, 0x90170110},
2738     + {0x1b, 0x01011020},
2739     + {0x21, 0x0221101f}),
2740     SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
2741     {0x12, 0x90a60160},
2742     {0x14, 0x90170120},
2743     diff --git a/sound/soc/codecs/da7218.c b/sound/soc/codecs/da7218.c
2744     index c69e97654fc6..f88632426c0a 100644
2745     --- a/sound/soc/codecs/da7218.c
2746     +++ b/sound/soc/codecs/da7218.c
2747     @@ -2519,7 +2519,7 @@ static struct da7218_pdata *da7218_of_to_pdata(struct snd_soc_codec *codec)
2748     }
2749    
2750     if (da7218->dev_id == DA7218_DEV_ID) {
2751     - hpldet_np = of_find_node_by_name(np, "da7218_hpldet");
2752     + hpldet_np = of_get_child_by_name(np, "da7218_hpldet");
2753     if (!hpldet_np)
2754     return pdata;
2755    
2756     diff --git a/sound/soc/codecs/tlv320aic31xx.h b/sound/soc/codecs/tlv320aic31xx.h
2757     index 5acd5b69fb83..f9b6c5a81b47 100644
2758     --- a/sound/soc/codecs/tlv320aic31xx.h
2759     +++ b/sound/soc/codecs/tlv320aic31xx.h
2760     @@ -115,7 +115,7 @@ struct aic31xx_pdata {
2761     /* INT2 interrupt control */
2762     #define AIC31XX_INT2CTRL AIC31XX_REG(0, 49)
2763     /* GPIO1 control */
2764     -#define AIC31XX_GPIO1 AIC31XX_REG(0, 50)
2765     +#define AIC31XX_GPIO1 AIC31XX_REG(0, 51)
2766    
2767     #define AIC31XX_DACPRB AIC31XX_REG(0, 60)
2768     /* ADC Instruction Set Register */
2769     diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
2770     index a2104d68169d..26fd6a664b9b 100644
2771     --- a/sound/soc/codecs/twl4030.c
2772     +++ b/sound/soc/codecs/twl4030.c
2773     @@ -232,7 +232,7 @@ static struct twl4030_codec_data *twl4030_get_pdata(struct snd_soc_codec *codec)
2774     struct twl4030_codec_data *pdata = dev_get_platdata(codec->dev);
2775     struct device_node *twl4030_codec_node = NULL;
2776    
2777     - twl4030_codec_node = of_find_node_by_name(codec->dev->parent->of_node,
2778     + twl4030_codec_node = of_get_child_by_name(codec->dev->parent->of_node,
2779     "codec");
2780    
2781     if (!pdata && twl4030_codec_node) {
2782     @@ -241,9 +241,11 @@ static struct twl4030_codec_data *twl4030_get_pdata(struct snd_soc_codec *codec)
2783     GFP_KERNEL);
2784     if (!pdata) {
2785     dev_err(codec->dev, "Can not allocate memory\n");
2786     + of_node_put(twl4030_codec_node);
2787     return NULL;
2788     }
2789     twl4030_setup_pdata_of(pdata, twl4030_codec_node);
2790     + of_node_put(twl4030_codec_node);
2791     }
2792    
2793     return pdata;
2794     diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c
2795     index 757af795cebd..c03c9da076c2 100644
2796     --- a/sound/soc/codecs/wm_adsp.c
2797     +++ b/sound/soc/codecs/wm_adsp.c
2798     @@ -1465,7 +1465,7 @@ static int wm_adsp_load(struct wm_adsp *dsp)
2799     le64_to_cpu(footer->timestamp));
2800    
2801     while (pos < firmware->size &&
2802     - pos - firmware->size > sizeof(*region)) {
2803     + sizeof(*region) < firmware->size - pos) {
2804     region = (void *)&(firmware->data[pos]);
2805     region_name = "Unknown";
2806     reg = 0;
2807     @@ -1526,8 +1526,8 @@ static int wm_adsp_load(struct wm_adsp *dsp)
2808     regions, le32_to_cpu(region->len), offset,
2809     region_name);
2810    
2811     - if ((pos + le32_to_cpu(region->len) + sizeof(*region)) >
2812     - firmware->size) {
2813     + if (le32_to_cpu(region->len) >
2814     + firmware->size - pos - sizeof(*region)) {
2815     adsp_err(dsp,
2816     "%s.%d: %s region len %d bytes exceeds file length %zu\n",
2817     file, regions, region_name,
2818     @@ -1992,7 +1992,7 @@ static int wm_adsp_load_coeff(struct wm_adsp *dsp)
2819    
2820     blocks = 0;
2821     while (pos < firmware->size &&
2822     - pos - firmware->size > sizeof(*blk)) {
2823     + sizeof(*blk) < firmware->size - pos) {
2824     blk = (void *)(&firmware->data[pos]);
2825    
2826     type = le16_to_cpu(blk->type);
2827     @@ -2066,8 +2066,8 @@ static int wm_adsp_load_coeff(struct wm_adsp *dsp)
2828     }
2829    
2830     if (reg) {
2831     - if ((pos + le32_to_cpu(blk->len) + sizeof(*blk)) >
2832     - firmware->size) {
2833     + if (le32_to_cpu(blk->len) >
2834     + firmware->size - pos - sizeof(*blk)) {
2835     adsp_err(dsp,
2836     "%s.%d: %s region len %d bytes exceeds file length %zu\n",
2837     file, blocks, region_name,
2838     diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
2839     index fde08660b63b..1c03490e1182 100644
2840     --- a/sound/soc/fsl/fsl_ssi.c
2841     +++ b/sound/soc/fsl/fsl_ssi.c
2842     @@ -1467,12 +1467,6 @@ static int fsl_ssi_probe(struct platform_device *pdev)
2843     sizeof(fsl_ssi_ac97_dai));
2844    
2845     fsl_ac97_data = ssi_private;
2846     -
2847     - ret = snd_soc_set_ac97_ops_of_reset(&fsl_ssi_ac97_ops, pdev);
2848     - if (ret) {
2849     - dev_err(&pdev->dev, "could not set AC'97 ops\n");
2850     - return ret;
2851     - }
2852     } else {
2853     /* Initialize this copy of the CPU DAI driver structure */
2854     memcpy(&ssi_private->cpu_dai_drv, &fsl_ssi_dai_template,
2855     @@ -1583,6 +1577,14 @@ static int fsl_ssi_probe(struct platform_device *pdev)
2856     return ret;
2857     }
2858    
2859     + if (fsl_ssi_is_ac97(ssi_private)) {
2860     + ret = snd_soc_set_ac97_ops_of_reset(&fsl_ssi_ac97_ops, pdev);
2861     + if (ret) {
2862     + dev_err(&pdev->dev, "could not set AC'97 ops\n");
2863     + goto error_ac97_ops;
2864     + }
2865     + }
2866     +
2867     ret = devm_snd_soc_register_component(&pdev->dev, &fsl_ssi_component,
2868     &ssi_private->cpu_dai_drv, 1);
2869     if (ret) {
2870     @@ -1666,6 +1668,10 @@ static int fsl_ssi_probe(struct platform_device *pdev)
2871     fsl_ssi_debugfs_remove(&ssi_private->dbg_stats);
2872    
2873     error_asoc_register:
2874     + if (fsl_ssi_is_ac97(ssi_private))
2875     + snd_soc_set_ac97_ops(NULL);
2876     +
2877     +error_ac97_ops:
2878     if (ssi_private->soc->imx)
2879     fsl_ssi_imx_clean(pdev, ssi_private);
2880    
2881     diff --git a/tools/objtool/arch/x86/insn/x86-opcode-map.txt b/tools/objtool/arch/x86/insn/x86-opcode-map.txt
2882     index 767be7c76034..1754e094bc28 100644
2883     --- a/tools/objtool/arch/x86/insn/x86-opcode-map.txt
2884     +++ b/tools/objtool/arch/x86/insn/x86-opcode-map.txt
2885     @@ -896,7 +896,7 @@ EndTable
2886    
2887     GrpTable: Grp3_1
2888     0: TEST Eb,Ib
2889     -1:
2890     +1: TEST Eb,Ib
2891     2: NOT Eb
2892     3: NEG Eb
2893     4: MUL AL,Eb
2894     diff --git a/tools/usb/usbip/src/utils.c b/tools/usb/usbip/src/utils.c
2895     index 2b3d6d235015..3d7b42e77299 100644
2896     --- a/tools/usb/usbip/src/utils.c
2897     +++ b/tools/usb/usbip/src/utils.c
2898     @@ -30,6 +30,7 @@ int modify_match_busid(char *busid, int add)
2899     char command[SYSFS_BUS_ID_SIZE + 4];
2900     char match_busid_attr_path[SYSFS_PATH_MAX];
2901     int rc;
2902     + int cmd_size;
2903    
2904     snprintf(match_busid_attr_path, sizeof(match_busid_attr_path),
2905     "%s/%s/%s/%s/%s/%s", SYSFS_MNT_PATH, SYSFS_BUS_NAME,
2906     @@ -37,12 +38,14 @@ int modify_match_busid(char *busid, int add)
2907     attr_name);
2908    
2909     if (add)
2910     - snprintf(command, SYSFS_BUS_ID_SIZE + 4, "add %s", busid);
2911     + cmd_size = snprintf(command, SYSFS_BUS_ID_SIZE + 4, "add %s",
2912     + busid);
2913     else
2914     - snprintf(command, SYSFS_BUS_ID_SIZE + 4, "del %s", busid);
2915     + cmd_size = snprintf(command, SYSFS_BUS_ID_SIZE + 4, "del %s",
2916     + busid);
2917    
2918     rc = write_sysfs_attribute(match_busid_attr_path, command,
2919     - sizeof(command));
2920     + cmd_size);
2921     if (rc < 0) {
2922     dbg("failed to write match_busid: %s", strerror(errno));
2923     return -1;