Magellan Linux

Annotation of /trunk/kernel-alx-legacy/patches-4.9/0132-4.9.33-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: 179095 byte(s)
-added kerenl-alx-legacy pkg
1 niro 3608 diff --git a/Makefile b/Makefile
2     index 3d8781997968..8470d81d5cc2 100644
3     --- a/Makefile
4     +++ b/Makefile
5     @@ -1,6 +1,6 @@
6     VERSION = 4
7     PATCHLEVEL = 9
8     -SUBLEVEL = 32
9     +SUBLEVEL = 33
10     EXTRAVERSION =
11     NAME = Roaring Lionus
12    
13     @@ -797,7 +797,7 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types)
14     KBUILD_ARFLAGS := $(call ar-option,D)
15    
16     # check for 'asm goto'
17     -ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC)), y)
18     +ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
19     KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
20     KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
21     endif
22     diff --git a/arch/arc/kernel/head.S b/arch/arc/kernel/head.S
23     index 689dd867fdff..8b90d25a15cc 100644
24     --- a/arch/arc/kernel/head.S
25     +++ b/arch/arc/kernel/head.S
26     @@ -71,14 +71,14 @@ ENTRY(stext)
27     GET_CPU_ID r5
28     cmp r5, 0
29     mov.nz r0, r5
30     -#ifdef CONFIG_ARC_SMP_HALT_ON_RESET
31     - ; Non-Master can proceed as system would be booted sufficiently
32     - jnz first_lines_of_secondary
33     -#else
34     + bz .Lmaster_proceed
35     +
36     ; Non-Masters wait for Master to boot enough and bring them up
37     - jnz arc_platform_smp_wait_to_boot
38     -#endif
39     - ; Master falls thru
40     + ; when they resume, tail-call to entry point
41     + mov blink, @first_lines_of_secondary
42     + j arc_platform_smp_wait_to_boot
43     +
44     +.Lmaster_proceed:
45     #endif
46    
47     ; Clear BSS before updating any globals
48     diff --git a/arch/arc/kernel/smp.c b/arch/arc/kernel/smp.c
49     index 88674d972c9d..2afbafadb6ab 100644
50     --- a/arch/arc/kernel/smp.c
51     +++ b/arch/arc/kernel/smp.c
52     @@ -90,22 +90,37 @@ void __init smp_cpus_done(unsigned int max_cpus)
53     */
54     static volatile int wake_flag;
55    
56     +#ifdef CONFIG_ISA_ARCOMPACT
57     +
58     +#define __boot_read(f) f
59     +#define __boot_write(f, v) f = v
60     +
61     +#else
62     +
63     +#define __boot_read(f) arc_read_uncached_32(&f)
64     +#define __boot_write(f, v) arc_write_uncached_32(&f, v)
65     +
66     +#endif
67     +
68     static void arc_default_smp_cpu_kick(int cpu, unsigned long pc)
69     {
70     BUG_ON(cpu == 0);
71     - wake_flag = cpu;
72     +
73     + __boot_write(wake_flag, cpu);
74     }
75    
76     void arc_platform_smp_wait_to_boot(int cpu)
77     {
78     - while (wake_flag != cpu)
79     + /* for halt-on-reset, we've waited already */
80     + if (IS_ENABLED(CONFIG_ARC_SMP_HALT_ON_RESET))
81     + return;
82     +
83     + while (__boot_read(wake_flag) != cpu)
84     ;
85    
86     - wake_flag = 0;
87     - __asm__ __volatile__("j @first_lines_of_secondary \n");
88     + __boot_write(wake_flag, 0);
89     }
90    
91     -
92     const char *arc_platform_smp_cpuinfo(void)
93     {
94     return plat_smp_ops.info ? : "";
95     diff --git a/arch/arm/configs/ezx_defconfig b/arch/arm/configs/ezx_defconfig
96     index ea316c4b890e..d3f1768840e2 100644
97     --- a/arch/arm/configs/ezx_defconfig
98     +++ b/arch/arm/configs/ezx_defconfig
99     @@ -64,8 +64,8 @@ CONFIG_NETFILTER=y
100     CONFIG_NETFILTER_NETLINK_QUEUE=m
101     CONFIG_NF_CONNTRACK=m
102     CONFIG_NF_CONNTRACK_EVENTS=y
103     -CONFIG_NF_CT_PROTO_SCTP=m
104     -CONFIG_NF_CT_PROTO_UDPLITE=m
105     +CONFIG_NF_CT_PROTO_SCTP=y
106     +CONFIG_NF_CT_PROTO_UDPLITE=y
107     CONFIG_NF_CONNTRACK_AMANDA=m
108     CONFIG_NF_CONNTRACK_FTP=m
109     CONFIG_NF_CONNTRACK_H323=m
110     diff --git a/arch/arm/configs/imote2_defconfig b/arch/arm/configs/imote2_defconfig
111     index 18e59feaa307..7f479cdb3479 100644
112     --- a/arch/arm/configs/imote2_defconfig
113     +++ b/arch/arm/configs/imote2_defconfig
114     @@ -56,8 +56,8 @@ CONFIG_NETFILTER=y
115     CONFIG_NETFILTER_NETLINK_QUEUE=m
116     CONFIG_NF_CONNTRACK=m
117     CONFIG_NF_CONNTRACK_EVENTS=y
118     -CONFIG_NF_CT_PROTO_SCTP=m
119     -CONFIG_NF_CT_PROTO_UDPLITE=m
120     +CONFIG_NF_CT_PROTO_SCTP=y
121     +CONFIG_NF_CT_PROTO_UDPLITE=y
122     CONFIG_NF_CONNTRACK_AMANDA=m
123     CONFIG_NF_CONNTRACK_FTP=m
124     CONFIG_NF_CONNTRACK_H323=m
125     diff --git a/arch/frv/include/asm/atomic.h b/arch/frv/include/asm/atomic.h
126     index 1c2a5e264fc7..e93c9494503a 100644
127     --- a/arch/frv/include/asm/atomic.h
128     +++ b/arch/frv/include/asm/atomic.h
129     @@ -139,7 +139,7 @@ static inline void atomic64_dec(atomic64_t *v)
130     #define atomic64_sub_and_test(i,v) (atomic64_sub_return((i), (v)) == 0)
131     #define atomic64_dec_and_test(v) (atomic64_dec_return((v)) == 0)
132     #define atomic64_inc_and_test(v) (atomic64_inc_return((v)) == 0)
133     -
134     +#define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0)
135    
136     #define atomic_cmpxchg(v, old, new) (cmpxchg(&(v)->counter, old, new))
137     #define atomic_xchg(v, new) (xchg(&(v)->counter, new))
138     @@ -161,6 +161,39 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
139     return c;
140     }
141    
142     +static inline int atomic64_add_unless(atomic64_t *v, long long i, long long u)
143     +{
144     + long long c, old;
145     +
146     + c = atomic64_read(v);
147     + for (;;) {
148     + if (unlikely(c == u))
149     + break;
150     + old = atomic64_cmpxchg(v, c, c + i);
151     + if (likely(old == c))
152     + break;
153     + c = old;
154     + }
155     + return c != u;
156     +}
157     +
158     +static inline long long atomic64_dec_if_positive(atomic64_t *v)
159     +{
160     + long long c, old, dec;
161     +
162     + c = atomic64_read(v);
163     + for (;;) {
164     + dec = c - 1;
165     + if (unlikely(dec < 0))
166     + break;
167     + old = atomic64_cmpxchg((v), c, dec);
168     + if (likely(old == c))
169     + break;
170     + c = old;
171     + }
172     + return dec;
173     +}
174     +
175     #define ATOMIC_OP(op) \
176     static inline int atomic_fetch_##op(int i, atomic_t *v) \
177     { \
178     diff --git a/arch/mn10300/include/asm/switch_to.h b/arch/mn10300/include/asm/switch_to.h
179     index 393d311735c8..67e333aa7629 100644
180     --- a/arch/mn10300/include/asm/switch_to.h
181     +++ b/arch/mn10300/include/asm/switch_to.h
182     @@ -16,7 +16,7 @@
183     struct task_struct;
184     struct thread_struct;
185    
186     -#if !defined(CONFIG_LAZY_SAVE_FPU)
187     +#if defined(CONFIG_FPU) && !defined(CONFIG_LAZY_SAVE_FPU)
188     struct fpu_state_struct;
189     extern asmlinkage void fpu_save(struct fpu_state_struct *);
190     #define switch_fpu(prev, next) \
191     diff --git a/arch/powerpc/sysdev/xics/icp-opal.c b/arch/powerpc/sysdev/xics/icp-opal.c
192     index 32c46b424dd0..b53f80f0b4d8 100644
193     --- a/arch/powerpc/sysdev/xics/icp-opal.c
194     +++ b/arch/powerpc/sysdev/xics/icp-opal.c
195     @@ -130,14 +130,16 @@ static void icp_opal_cause_ipi(int cpu, unsigned long data)
196     {
197     int hw_cpu = get_hard_smp_processor_id(cpu);
198    
199     + kvmppc_set_host_ipi(cpu, 1);
200     opal_int_set_mfrr(hw_cpu, IPI_PRIORITY);
201     }
202    
203     static irqreturn_t icp_opal_ipi_action(int irq, void *dev_id)
204     {
205     - int hw_cpu = hard_smp_processor_id();
206     + int cpu = smp_processor_id();
207    
208     - opal_int_set_mfrr(hw_cpu, 0xff);
209     + kvmppc_set_host_ipi(cpu, 0);
210     + opal_int_set_mfrr(get_hard_smp_processor_id(cpu), 0xff);
211    
212     return smp_ipi_demux();
213     }
214     diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
215     index c43816886839..3bc2825173ef 100644
216     --- a/arch/s390/kernel/entry.S
217     +++ b/arch/s390/kernel/entry.S
218     @@ -240,12 +240,17 @@ ENTRY(sie64a)
219     lctlg %c1,%c1,__LC_USER_ASCE # load primary asce
220     .Lsie_done:
221     # some program checks are suppressing. C code (e.g. do_protection_exception)
222     -# will rewind the PSW by the ILC, which is 4 bytes in case of SIE. Other
223     -# instructions between sie64a and .Lsie_done should not cause program
224     -# interrupts. So lets use a nop (47 00 00 00) as a landing pad.
225     +# will rewind the PSW by the ILC, which is often 4 bytes in case of SIE. There
226     +# are some corner cases (e.g. runtime instrumentation) where ILC is unpredictable.
227     +# Other instructions between sie64a and .Lsie_done should not cause program
228     +# interrupts. So lets use 3 nops as a landing pad for all possible rewinds.
229     # See also .Lcleanup_sie
230     -.Lrewind_pad:
231     - nop 0
232     +.Lrewind_pad6:
233     + nopr 7
234     +.Lrewind_pad4:
235     + nopr 7
236     +.Lrewind_pad2:
237     + nopr 7
238     .globl sie_exit
239     sie_exit:
240     lg %r14,__SF_EMPTY+8(%r15) # load guest register save area
241     @@ -258,7 +263,9 @@ sie_exit:
242     stg %r14,__SF_EMPTY+16(%r15) # set exit reason code
243     j sie_exit
244    
245     - EX_TABLE(.Lrewind_pad,.Lsie_fault)
246     + EX_TABLE(.Lrewind_pad6,.Lsie_fault)
247     + EX_TABLE(.Lrewind_pad4,.Lsie_fault)
248     + EX_TABLE(.Lrewind_pad2,.Lsie_fault)
249     EX_TABLE(sie_exit,.Lsie_fault)
250     EXPORT_SYMBOL(sie64a)
251     EXPORT_SYMBOL(sie_exit)
252     diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c
253     index 4094a51b1970..496fa926e1e0 100644
254     --- a/arch/sparc/kernel/traps_64.c
255     +++ b/arch/sparc/kernel/traps_64.c
256     @@ -85,7 +85,7 @@ static void dump_tl1_traplog(struct tl1_traplog *p)
257    
258     void bad_trap(struct pt_regs *regs, long lvl)
259     {
260     - char buffer[32];
261     + char buffer[36];
262     siginfo_t info;
263    
264     if (notify_die(DIE_TRAP, "bad trap", regs,
265     @@ -116,7 +116,7 @@ void bad_trap(struct pt_regs *regs, long lvl)
266    
267     void bad_trap_tl1(struct pt_regs *regs, long lvl)
268     {
269     - char buffer[32];
270     + char buffer[36];
271    
272     if (notify_die(DIE_TRAP_TL1, "bad trap tl1", regs,
273     0, lvl, SIGTRAP) == NOTIFY_STOP)
274     diff --git a/arch/xtensa/include/asm/irq.h b/arch/xtensa/include/asm/irq.h
275     index f71f88ea7646..19707db966f1 100644
276     --- a/arch/xtensa/include/asm/irq.h
277     +++ b/arch/xtensa/include/asm/irq.h
278     @@ -29,7 +29,8 @@ static inline void variant_irq_disable(unsigned int irq) { }
279     # define PLATFORM_NR_IRQS 0
280     #endif
281     #define XTENSA_NR_IRQS XCHAL_NUM_INTERRUPTS
282     -#define NR_IRQS (XTENSA_NR_IRQS + VARIANT_NR_IRQS + PLATFORM_NR_IRQS)
283     +#define NR_IRQS (XTENSA_NR_IRQS + VARIANT_NR_IRQS + PLATFORM_NR_IRQS + 1)
284     +#define XTENSA_PIC_LINUX_IRQ(hwirq) ((hwirq) + 1)
285    
286     #if VARIANT_NR_IRQS == 0
287     static inline void variant_init_irq(void) { }
288     diff --git a/arch/xtensa/kernel/irq.c b/arch/xtensa/kernel/irq.c
289     index 4ac3d23161cf..441694464b1e 100644
290     --- a/arch/xtensa/kernel/irq.c
291     +++ b/arch/xtensa/kernel/irq.c
292     @@ -34,11 +34,6 @@ asmlinkage void do_IRQ(int hwirq, struct pt_regs *regs)
293     {
294     int irq = irq_find_mapping(NULL, hwirq);
295    
296     - if (hwirq >= NR_IRQS) {
297     - printk(KERN_EMERG "%s: cannot handle IRQ %d\n",
298     - __func__, hwirq);
299     - }
300     -
301     #ifdef CONFIG_DEBUG_STACKOVERFLOW
302     /* Debugging check for stack overflow: is there less than 1KB free? */
303     {
304     diff --git a/arch/xtensa/platforms/xtfpga/include/platform/hardware.h b/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
305     index dbeea2b440a1..1fda7e20dfcb 100644
306     --- a/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
307     +++ b/arch/xtensa/platforms/xtfpga/include/platform/hardware.h
308     @@ -24,16 +24,18 @@
309    
310     /* Interrupt configuration. */
311    
312     -#define PLATFORM_NR_IRQS 10
313     +#define PLATFORM_NR_IRQS 0
314    
315     /* Default assignment of LX60 devices to external interrupts. */
316    
317     #ifdef CONFIG_XTENSA_MX
318     #define DUART16552_INTNUM XCHAL_EXTINT3_NUM
319     #define OETH_IRQ XCHAL_EXTINT4_NUM
320     +#define C67X00_IRQ XCHAL_EXTINT8_NUM
321     #else
322     #define DUART16552_INTNUM XCHAL_EXTINT0_NUM
323     #define OETH_IRQ XCHAL_EXTINT1_NUM
324     +#define C67X00_IRQ XCHAL_EXTINT5_NUM
325     #endif
326    
327     /*
328     @@ -63,5 +65,5 @@
329    
330     #define C67X00_PADDR (XCHAL_KIO_PADDR + 0x0D0D0000)
331     #define C67X00_SIZE 0x10
332     -#define C67X00_IRQ 5
333     +
334     #endif /* __XTENSA_XTAVNET_HARDWARE_H */
335     diff --git a/arch/xtensa/platforms/xtfpga/setup.c b/arch/xtensa/platforms/xtfpga/setup.c
336     index 779be723eb2b..42285f35d313 100644
337     --- a/arch/xtensa/platforms/xtfpga/setup.c
338     +++ b/arch/xtensa/platforms/xtfpga/setup.c
339     @@ -175,8 +175,8 @@ static struct resource ethoc_res[] = {
340     .flags = IORESOURCE_MEM,
341     },
342     [2] = { /* IRQ number */
343     - .start = OETH_IRQ,
344     - .end = OETH_IRQ,
345     + .start = XTENSA_PIC_LINUX_IRQ(OETH_IRQ),
346     + .end = XTENSA_PIC_LINUX_IRQ(OETH_IRQ),
347     .flags = IORESOURCE_IRQ,
348     },
349     };
350     @@ -213,8 +213,8 @@ static struct resource c67x00_res[] = {
351     .flags = IORESOURCE_MEM,
352     },
353     [1] = { /* IRQ number */
354     - .start = C67X00_IRQ,
355     - .end = C67X00_IRQ,
356     + .start = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ),
357     + .end = XTENSA_PIC_LINUX_IRQ(C67X00_IRQ),
358     .flags = IORESOURCE_IRQ,
359     },
360     };
361     @@ -247,7 +247,7 @@ static struct resource serial_resource = {
362     static struct plat_serial8250_port serial_platform_data[] = {
363     [0] = {
364     .mapbase = DUART16552_PADDR,
365     - .irq = DUART16552_INTNUM,
366     + .irq = XTENSA_PIC_LINUX_IRQ(DUART16552_INTNUM),
367     .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST |
368     UPF_IOREMAP,
369     .iotype = XCHAL_HAVE_BE ? UPIO_MEM32BE : UPIO_MEM32,
370     diff --git a/block/partitions/msdos.c b/block/partitions/msdos.c
371     index 93e7c1b32edd..5610cd537da7 100644
372     --- a/block/partitions/msdos.c
373     +++ b/block/partitions/msdos.c
374     @@ -300,6 +300,8 @@ static void parse_bsd(struct parsed_partitions *state,
375     continue;
376     bsd_start = le32_to_cpu(p->p_offset);
377     bsd_size = le32_to_cpu(p->p_size);
378     + if (memcmp(flavour, "bsd\0", 4) == 0)
379     + bsd_start += offset;
380     if (offset == bsd_start && size == bsd_size)
381     /* full parent partition, we have it already */
382     continue;
383     diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
384     index 23f3b95a1158..147d2e3678aa 100644
385     --- a/drivers/base/power/runtime.c
386     +++ b/drivers/base/power/runtime.c
387     @@ -889,13 +889,13 @@ int __pm_runtime_idle(struct device *dev, int rpmflags)
388     unsigned long flags;
389     int retval;
390    
391     - might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
392     -
393     if (rpmflags & RPM_GET_PUT) {
394     if (!atomic_dec_and_test(&dev->power.usage_count))
395     return 0;
396     }
397    
398     + might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
399     +
400     spin_lock_irqsave(&dev->power.lock, flags);
401     retval = rpm_idle(dev, rpmflags);
402     spin_unlock_irqrestore(&dev->power.lock, flags);
403     @@ -921,13 +921,13 @@ int __pm_runtime_suspend(struct device *dev, int rpmflags)
404     unsigned long flags;
405     int retval;
406    
407     - might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
408     -
409     if (rpmflags & RPM_GET_PUT) {
410     if (!atomic_dec_and_test(&dev->power.usage_count))
411     return 0;
412     }
413    
414     + might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
415     +
416     spin_lock_irqsave(&dev->power.lock, flags);
417     retval = rpm_suspend(dev, rpmflags);
418     spin_unlock_irqrestore(&dev->power.lock, flags);
419     @@ -952,7 +952,8 @@ int __pm_runtime_resume(struct device *dev, int rpmflags)
420     unsigned long flags;
421     int retval;
422    
423     - might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
424     + might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe &&
425     + dev->power.runtime_status != RPM_ACTIVE);
426    
427     if (rpmflags & RPM_GET_PUT)
428     atomic_inc(&dev->power.usage_count);
429     diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
430     index 908011d2c8f5..7abda94fc2cf 100644
431     --- a/drivers/gpu/drm/ast/ast_drv.h
432     +++ b/drivers/gpu/drm/ast/ast_drv.h
433     @@ -113,6 +113,7 @@ struct ast_private {
434     struct ttm_bo_kmap_obj cache_kmap;
435     int next_cursor;
436     bool support_wide_screen;
437     + bool DisableP2A;
438    
439     enum ast_tx_chip tx_chip_type;
440     u8 dp501_maxclk;
441     diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
442     index f75c6421db62..533e762d036d 100644
443     --- a/drivers/gpu/drm/ast/ast_main.c
444     +++ b/drivers/gpu/drm/ast/ast_main.c
445     @@ -124,6 +124,12 @@ static int ast_detect_chip(struct drm_device *dev, bool *need_post)
446     } else
447     *need_post = false;
448    
449     + /* Check P2A Access */
450     + ast->DisableP2A = true;
451     + data = ast_read32(ast, 0xf004);
452     + if (data != 0xFFFFFFFF)
453     + ast->DisableP2A = false;
454     +
455     /* Check if we support wide screen */
456     switch (ast->chip) {
457     case AST1180:
458     @@ -140,15 +146,17 @@ static int ast_detect_chip(struct drm_device *dev, bool *need_post)
459     ast->support_wide_screen = true;
460     else {
461     ast->support_wide_screen = false;
462     - /* Read SCU7c (silicon revision register) */
463     - ast_write32(ast, 0xf004, 0x1e6e0000);
464     - ast_write32(ast, 0xf000, 0x1);
465     - data = ast_read32(ast, 0x1207c);
466     - data &= 0x300;
467     - if (ast->chip == AST2300 && data == 0x0) /* ast1300 */
468     - ast->support_wide_screen = true;
469     - if (ast->chip == AST2400 && data == 0x100) /* ast1400 */
470     - ast->support_wide_screen = true;
471     + if (ast->DisableP2A == false) {
472     + /* Read SCU7c (silicon revision register) */
473     + ast_write32(ast, 0xf004, 0x1e6e0000);
474     + ast_write32(ast, 0xf000, 0x1);
475     + data = ast_read32(ast, 0x1207c);
476     + data &= 0x300;
477     + if (ast->chip == AST2300 && data == 0x0) /* ast1300 */
478     + ast->support_wide_screen = true;
479     + if (ast->chip == AST2400 && data == 0x100) /* ast1400 */
480     + ast->support_wide_screen = true;
481     + }
482     }
483     break;
484     }
485     @@ -216,80 +224,81 @@ static int ast_get_dram_info(struct drm_device *dev)
486     uint32_t data, data2;
487     uint32_t denum, num, div, ref_pll;
488    
489     - ast_write32(ast, 0xf004, 0x1e6e0000);
490     - ast_write32(ast, 0xf000, 0x1);
491     -
492     -
493     - ast_write32(ast, 0x10000, 0xfc600309);
494     -
495     - do {
496     - if (pci_channel_offline(dev->pdev))
497     - return -EIO;
498     - } while (ast_read32(ast, 0x10000) != 0x01);
499     - data = ast_read32(ast, 0x10004);
500     -
501     - if (data & 0x40)
502     + if (ast->DisableP2A)
503     + {
504     ast->dram_bus_width = 16;
505     + ast->dram_type = AST_DRAM_1Gx16;
506     + ast->mclk = 396;
507     + }
508     else
509     - ast->dram_bus_width = 32;
510     + {
511     + ast_write32(ast, 0xf004, 0x1e6e0000);
512     + ast_write32(ast, 0xf000, 0x1);
513     + data = ast_read32(ast, 0x10004);
514     +
515     + if (data & 0x40)
516     + ast->dram_bus_width = 16;
517     + else
518     + ast->dram_bus_width = 32;
519     +
520     + if (ast->chip == AST2300 || ast->chip == AST2400) {
521     + switch (data & 0x03) {
522     + case 0:
523     + ast->dram_type = AST_DRAM_512Mx16;
524     + break;
525     + default:
526     + case 1:
527     + ast->dram_type = AST_DRAM_1Gx16;
528     + break;
529     + case 2:
530     + ast->dram_type = AST_DRAM_2Gx16;
531     + break;
532     + case 3:
533     + ast->dram_type = AST_DRAM_4Gx16;
534     + break;
535     + }
536     + } else {
537     + switch (data & 0x0c) {
538     + case 0:
539     + case 4:
540     + ast->dram_type = AST_DRAM_512Mx16;
541     + break;
542     + case 8:
543     + if (data & 0x40)
544     + ast->dram_type = AST_DRAM_1Gx16;
545     + else
546     + ast->dram_type = AST_DRAM_512Mx32;
547     + break;
548     + case 0xc:
549     + ast->dram_type = AST_DRAM_1Gx32;
550     + break;
551     + }
552     + }
553    
554     - if (ast->chip == AST2300 || ast->chip == AST2400) {
555     - switch (data & 0x03) {
556     - case 0:
557     - ast->dram_type = AST_DRAM_512Mx16;
558     - break;
559     - default:
560     - case 1:
561     - ast->dram_type = AST_DRAM_1Gx16;
562     - break;
563     - case 2:
564     - ast->dram_type = AST_DRAM_2Gx16;
565     - break;
566     + data = ast_read32(ast, 0x10120);
567     + data2 = ast_read32(ast, 0x10170);
568     + if (data2 & 0x2000)
569     + ref_pll = 14318;
570     + else
571     + ref_pll = 12000;
572     +
573     + denum = data & 0x1f;
574     + num = (data & 0x3fe0) >> 5;
575     + data = (data & 0xc000) >> 14;
576     + switch (data) {
577     case 3:
578     - ast->dram_type = AST_DRAM_4Gx16;
579     - break;
580     - }
581     - } else {
582     - switch (data & 0x0c) {
583     - case 0:
584     - case 4:
585     - ast->dram_type = AST_DRAM_512Mx16;
586     + div = 0x4;
587     break;
588     - case 8:
589     - if (data & 0x40)
590     - ast->dram_type = AST_DRAM_1Gx16;
591     - else
592     - ast->dram_type = AST_DRAM_512Mx32;
593     + case 2:
594     + case 1:
595     + div = 0x2;
596     break;
597     - case 0xc:
598     - ast->dram_type = AST_DRAM_1Gx32;
599     + default:
600     + div = 0x1;
601     break;
602     }
603     + ast->mclk = ref_pll * (num + 2) / (denum + 2) * (div * 1000);
604     }
605     -
606     - data = ast_read32(ast, 0x10120);
607     - data2 = ast_read32(ast, 0x10170);
608     - if (data2 & 0x2000)
609     - ref_pll = 14318;
610     - else
611     - ref_pll = 12000;
612     -
613     - denum = data & 0x1f;
614     - num = (data & 0x3fe0) >> 5;
615     - data = (data & 0xc000) >> 14;
616     - switch (data) {
617     - case 3:
618     - div = 0x4;
619     - break;
620     - case 2:
621     - case 1:
622     - div = 0x2;
623     - break;
624     - default:
625     - div = 0x1;
626     - break;
627     - }
628     - ast->mclk = ref_pll * (num + 2) / (denum + 2) * (div * 1000);
629     return 0;
630     }
631    
632     diff --git a/drivers/gpu/drm/ast/ast_post.c b/drivers/gpu/drm/ast/ast_post.c
633     index 30672a3df8a9..270e8fb2803f 100644
634     --- a/drivers/gpu/drm/ast/ast_post.c
635     +++ b/drivers/gpu/drm/ast/ast_post.c
636     @@ -375,12 +375,20 @@ void ast_post_gpu(struct drm_device *dev)
637     ast_enable_mmio(dev);
638     ast_set_def_ext_reg(dev);
639    
640     - if (ast->chip == AST2300 || ast->chip == AST2400)
641     - ast_init_dram_2300(dev);
642     - else
643     - ast_init_dram_reg(dev);
644     + if (ast->DisableP2A == false)
645     + {
646     + if (ast->chip == AST2300 || ast->chip == AST2400)
647     + ast_init_dram_2300(dev);
648     + else
649     + ast_init_dram_reg(dev);
650    
651     - ast_init_3rdtx(dev);
652     + ast_init_3rdtx(dev);
653     + }
654     + else
655     + {
656     + if (ast->tx_chip_type != AST_TX_NONE)
657     + ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xa3, 0xcf, 0x80); /* Enable DVO */
658     + }
659     }
660    
661     /* AST 2300 DRAM settings */
662     diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
663     index 2db7fb510b6c..0e934a9ac63c 100644
664     --- a/drivers/gpu/drm/drm_connector.c
665     +++ b/drivers/gpu/drm/drm_connector.c
666     @@ -225,6 +225,7 @@ int drm_connector_init(struct drm_device *dev,
667    
668     INIT_LIST_HEAD(&connector->probed_modes);
669     INIT_LIST_HEAD(&connector->modes);
670     + mutex_init(&connector->mutex);
671     connector->edid_blob_ptr = NULL;
672     connector->status = connector_status_unknown;
673    
674     @@ -359,6 +360,8 @@ void drm_connector_cleanup(struct drm_connector *connector)
675     connector->funcs->atomic_destroy_state(connector,
676     connector->state);
677    
678     + mutex_destroy(&connector->mutex);
679     +
680     memset(connector, 0, sizeof(*connector));
681     }
682     EXPORT_SYMBOL(drm_connector_cleanup);
683     @@ -374,14 +377,18 @@ EXPORT_SYMBOL(drm_connector_cleanup);
684     */
685     int drm_connector_register(struct drm_connector *connector)
686     {
687     - int ret;
688     + int ret = 0;
689    
690     - if (connector->registered)
691     + if (!connector->dev->registered)
692     return 0;
693    
694     + mutex_lock(&connector->mutex);
695     + if (connector->registered)
696     + goto unlock;
697     +
698     ret = drm_sysfs_connector_add(connector);
699     if (ret)
700     - return ret;
701     + goto unlock;
702    
703     ret = drm_debugfs_connector_add(connector);
704     if (ret) {
705     @@ -397,12 +404,14 @@ int drm_connector_register(struct drm_connector *connector)
706     drm_mode_object_register(connector->dev, &connector->base);
707    
708     connector->registered = true;
709     - return 0;
710     + goto unlock;
711    
712     err_debugfs:
713     drm_debugfs_connector_remove(connector);
714     err_sysfs:
715     drm_sysfs_connector_remove(connector);
716     +unlock:
717     + mutex_unlock(&connector->mutex);
718     return ret;
719     }
720     EXPORT_SYMBOL(drm_connector_register);
721     @@ -415,8 +424,11 @@ EXPORT_SYMBOL(drm_connector_register);
722     */
723     void drm_connector_unregister(struct drm_connector *connector)
724     {
725     - if (!connector->registered)
726     + mutex_lock(&connector->mutex);
727     + if (!connector->registered) {
728     + mutex_unlock(&connector->mutex);
729     return;
730     + }
731    
732     if (connector->funcs->early_unregister)
733     connector->funcs->early_unregister(connector);
734     @@ -425,6 +437,7 @@ void drm_connector_unregister(struct drm_connector *connector)
735     drm_debugfs_connector_remove(connector);
736    
737     connector->registered = false;
738     + mutex_unlock(&connector->mutex);
739     }
740     EXPORT_SYMBOL(drm_connector_unregister);
741    
742     diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
743     index 0f2fa9044668..362b8cd68a24 100644
744     --- a/drivers/gpu/drm/drm_drv.c
745     +++ b/drivers/gpu/drm/drm_drv.c
746     @@ -710,6 +710,8 @@ int drm_dev_register(struct drm_device *dev, unsigned long flags)
747     if (ret)
748     goto err_minors;
749    
750     + dev->registered = true;
751     +
752     if (dev->driver->load) {
753     ret = dev->driver->load(dev, flags);
754     if (ret)
755     @@ -749,6 +751,8 @@ void drm_dev_unregister(struct drm_device *dev)
756    
757     drm_lastclose(dev);
758    
759     + dev->registered = false;
760     +
761     if (drm_core_check_feature(dev, DRIVER_MODESET))
762     drm_modeset_unregister_all(dev);
763    
764     diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
765     index ca6efb69ef66..7513e7678263 100644
766     --- a/drivers/gpu/drm/i915/i915_drv.c
767     +++ b/drivers/gpu/drm/i915/i915_drv.c
768     @@ -1199,6 +1199,15 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
769     goto out_free_priv;
770    
771     pci_set_drvdata(pdev, &dev_priv->drm);
772     + /*
773     + * Disable the system suspend direct complete optimization, which can
774     + * leave the device suspended skipping the driver's suspend handlers
775     + * if the device was already runtime suspended. This is needed due to
776     + * the difference in our runtime and system suspend sequence and
777     + * becaue the HDA driver may require us to enable the audio power
778     + * domain during system suspend.
779     + */
780     + pdev->dev_flags |= PCI_DEV_FLAGS_NEEDS_RESUME;
781    
782     ret = i915_driver_init_early(dev_priv, ent);
783     if (ret < 0)
784     diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
785     index 5dc6082639db..f8efd20e4a90 100644
786     --- a/drivers/gpu/drm/i915/intel_display.c
787     +++ b/drivers/gpu/drm/i915/intel_display.c
788     @@ -2253,6 +2253,9 @@ void intel_unpin_fb_obj(struct drm_framebuffer *fb, unsigned int rotation)
789     intel_fill_fb_ggtt_view(&view, fb, rotation);
790     vma = i915_gem_object_to_ggtt(obj, &view);
791    
792     + if (WARN_ON_ONCE(!vma))
793     + return;
794     +
795     i915_vma_unpin_fence(vma);
796     i915_gem_object_unpin_from_display_plane(vma);
797     }
798     @@ -13764,6 +13767,15 @@ static void update_scanline_offset(struct intel_crtc *crtc)
799     * type. For DP ports it behaves like most other platforms, but on HDMI
800     * there's an extra 1 line difference. So we need to add two instead of
801     * one to the value.
802     + *
803     + * On VLV/CHV DSI the scanline counter would appear to increment
804     + * approx. 1/3 of a scanline before start of vblank. Unfortunately
805     + * that means we can't tell whether we're in vblank or not while
806     + * we're on that particular line. We must still set scanline_offset
807     + * to 1 so that the vblank timestamps come out correct when we query
808     + * the scanline counter from within the vblank interrupt handler.
809     + * However if queried just before the start of vblank we'll get an
810     + * answer that's slightly in the future.
811     */
812     if (IS_GEN2(dev)) {
813     const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
814     diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
815     index 2c6d59d4b6d3..49de4760cc16 100644
816     --- a/drivers/gpu/drm/i915/intel_pm.c
817     +++ b/drivers/gpu/drm/i915/intel_pm.c
818     @@ -4114,11 +4114,19 @@ skl_compute_wm(struct drm_atomic_state *state)
819     struct drm_crtc_state *cstate;
820     struct intel_atomic_state *intel_state = to_intel_atomic_state(state);
821     struct skl_wm_values *results = &intel_state->wm_results;
822     + struct drm_device *dev = state->dev;
823     struct skl_pipe_wm *pipe_wm;
824     bool changed = false;
825     int ret, i;
826    
827     /*
828     + * When we distrust bios wm we always need to recompute to set the
829     + * expected DDB allocations for each CRTC.
830     + */
831     + if (to_i915(dev)->wm.distrust_bios_wm)
832     + changed = true;
833     +
834     + /*
835     * If this transaction isn't actually touching any CRTC's, don't
836     * bother with watermark calculation. Note that if we pass this
837     * test, we're guaranteed to hold at least one CRTC state mutex,
838     @@ -4128,6 +4136,7 @@ skl_compute_wm(struct drm_atomic_state *state)
839     */
840     for_each_crtc_in_state(state, crtc, cstate, i)
841     changed = true;
842     +
843     if (!changed)
844     return 0;
845    
846     diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
847     index dbed12c484c9..64f4e2e18594 100644
848     --- a/drivers/gpu/drm/i915/intel_sprite.c
849     +++ b/drivers/gpu/drm/i915/intel_sprite.c
850     @@ -81,10 +81,13 @@ int intel_usecs_to_scanlines(const struct drm_display_mode *adjusted_mode,
851     */
852     void intel_pipe_update_start(struct intel_crtc *crtc)
853     {
854     + struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
855     const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
856     long timeout = msecs_to_jiffies_timeout(1);
857     int scanline, min, max, vblank_start;
858     wait_queue_head_t *wq = drm_crtc_vblank_waitqueue(&crtc->base);
859     + bool need_vlv_dsi_wa = (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) &&
860     + intel_crtc_has_type(crtc->config, INTEL_OUTPUT_DSI);
861     DEFINE_WAIT(wait);
862    
863     vblank_start = adjusted_mode->crtc_vblank_start;
864     @@ -136,6 +139,24 @@ void intel_pipe_update_start(struct intel_crtc *crtc)
865    
866     drm_crtc_vblank_put(&crtc->base);
867    
868     + /*
869     + * On VLV/CHV DSI the scanline counter would appear to
870     + * increment approx. 1/3 of a scanline before start of vblank.
871     + * The registers still get latched at start of vblank however.
872     + * This means we must not write any registers on the first
873     + * line of vblank (since not the whole line is actually in
874     + * vblank). And unfortunately we can't use the interrupt to
875     + * wait here since it will fire too soon. We could use the
876     + * frame start interrupt instead since it will fire after the
877     + * critical scanline, but that would require more changes
878     + * in the interrupt code. So for now we'll just do the nasty
879     + * thing and poll for the bad scanline to pass us by.
880     + *
881     + * FIXME figure out if BXT+ DSI suffers from this as well
882     + */
883     + while (need_vlv_dsi_wa && scanline == vblank_start)
884     + scanline = intel_get_crtc_scanline(crtc);
885     +
886     crtc->debug.scanline_start = scanline;
887     crtc->debug.start_vbl_time = ktime_get();
888     crtc->debug.start_vbl_count = intel_crtc_get_vblank_counter(crtc);
889     diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
890     index afbf557b23d4..2c2b86d68129 100644
891     --- a/drivers/gpu/drm/nouveau/nouveau_display.c
892     +++ b/drivers/gpu/drm/nouveau/nouveau_display.c
893     @@ -24,6 +24,7 @@
894     *
895     */
896    
897     +#include <acpi/video.h>
898     #include <drm/drmP.h>
899     #include <drm/drm_crtc_helper.h>
900    
901     @@ -358,6 +359,57 @@ static struct nouveau_drm_prop_enum_list dither_depth[] = {
902     } \
903     } while(0)
904    
905     +static void
906     +nouveau_display_hpd_work(struct work_struct *work)
907     +{
908     + struct nouveau_drm *drm = container_of(work, typeof(*drm), hpd_work);
909     +
910     + pm_runtime_get_sync(drm->dev->dev);
911     +
912     + drm_helper_hpd_irq_event(drm->dev);
913     + /* enable polling for external displays */
914     + drm_kms_helper_poll_enable(drm->dev);
915     +
916     + pm_runtime_mark_last_busy(drm->dev->dev);
917     + pm_runtime_put_sync(drm->dev->dev);
918     +}
919     +
920     +#ifdef CONFIG_ACPI
921     +
922     +/*
923     + * Hans de Goede: This define belongs in acpi/video.h, I've submitted a patch
924     + * to the acpi subsys to move it there from drivers/acpi/acpi_video.c .
925     + * This should be dropped once that is merged.
926     + */
927     +#ifndef ACPI_VIDEO_NOTIFY_PROBE
928     +#define ACPI_VIDEO_NOTIFY_PROBE 0x81
929     +#endif
930     +
931     +static int
932     +nouveau_display_acpi_ntfy(struct notifier_block *nb, unsigned long val,
933     + void *data)
934     +{
935     + struct nouveau_drm *drm = container_of(nb, typeof(*drm), acpi_nb);
936     + struct acpi_bus_event *info = data;
937     +
938     + if (!strcmp(info->device_class, ACPI_VIDEO_CLASS)) {
939     + if (info->type == ACPI_VIDEO_NOTIFY_PROBE) {
940     + /*
941     + * This may be the only indication we receive of a
942     + * connector hotplug on a runtime suspended GPU,
943     + * schedule hpd_work to check.
944     + */
945     + schedule_work(&drm->hpd_work);
946     +
947     + /* acpi-video should not generate keypresses for this */
948     + return NOTIFY_BAD;
949     + }
950     + }
951     +
952     + return NOTIFY_DONE;
953     +}
954     +#endif
955     +
956     int
957     nouveau_display_init(struct drm_device *dev)
958     {
959     @@ -370,9 +422,6 @@ nouveau_display_init(struct drm_device *dev)
960     if (ret)
961     return ret;
962    
963     - /* enable polling for external displays */
964     - drm_kms_helper_poll_enable(dev);
965     -
966     /* enable hotplug interrupts */
967     list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
968     struct nouveau_connector *conn = nouveau_connector(connector);
969     @@ -537,6 +586,12 @@ nouveau_display_create(struct drm_device *dev)
970     }
971    
972     nouveau_backlight_init(dev);
973     + INIT_WORK(&drm->hpd_work, nouveau_display_hpd_work);
974     +#ifdef CONFIG_ACPI
975     + drm->acpi_nb.notifier_call = nouveau_display_acpi_ntfy;
976     + register_acpi_notifier(&drm->acpi_nb);
977     +#endif
978     +
979     return 0;
980    
981     vblank_err:
982     @@ -552,6 +607,9 @@ nouveau_display_destroy(struct drm_device *dev)
983     {
984     struct nouveau_display *disp = nouveau_display(dev);
985    
986     +#ifdef CONFIG_ACPI
987     + unregister_acpi_notifier(&nouveau_drm(dev)->acpi_nb);
988     +#endif
989     nouveau_backlight_exit(dev);
990     nouveau_display_vblank_fini(dev);
991    
992     diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
993     index 3100fd88a015..42829a942e33 100644
994     --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
995     +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
996     @@ -483,6 +483,9 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags)
997     pm_runtime_allow(dev->dev);
998     pm_runtime_mark_last_busy(dev->dev);
999     pm_runtime_put(dev->dev);
1000     + } else {
1001     + /* enable polling for external displays */
1002     + drm_kms_helper_poll_enable(dev);
1003     }
1004     return 0;
1005    
1006     @@ -761,7 +764,7 @@ nouveau_pmops_runtime_resume(struct device *dev)
1007     pci_set_master(pdev);
1008    
1009     ret = nouveau_do_resume(drm_dev, true);
1010     - drm_kms_helper_poll_enable(drm_dev);
1011     +
1012     /* do magic */
1013     nvif_mask(&device->object, 0x088488, (1 << 25), (1 << 25));
1014     vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_ON);
1015     diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
1016     index 822a0212cd48..1e7f1e326b3c 100644
1017     --- a/drivers/gpu/drm/nouveau/nouveau_drv.h
1018     +++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
1019     @@ -37,6 +37,8 @@
1020     * - implemented limited ABI16/NVIF interop
1021     */
1022    
1023     +#include <linux/notifier.h>
1024     +
1025     #include <nvif/client.h>
1026     #include <nvif/device.h>
1027     #include <nvif/ioctl.h>
1028     @@ -161,6 +163,12 @@ struct nouveau_drm {
1029     struct nvbios vbios;
1030     struct nouveau_display *display;
1031     struct backlight_device *backlight;
1032     + struct work_struct hpd_work;
1033     + struct work_struct fbcon_work;
1034     + int fbcon_new_state;
1035     +#ifdef CONFIG_ACPI
1036     + struct notifier_block acpi_nb;
1037     +#endif
1038    
1039     /* power management */
1040     struct nouveau_hwmon *hwmon;
1041     diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
1042     index 9f5692726c16..2b79e27dd89c 100644
1043     --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
1044     +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
1045     @@ -491,19 +491,43 @@ static const struct drm_fb_helper_funcs nouveau_fbcon_helper_funcs = {
1046     .fb_probe = nouveau_fbcon_create,
1047     };
1048    
1049     +static void
1050     +nouveau_fbcon_set_suspend_work(struct work_struct *work)
1051     +{
1052     + struct nouveau_drm *drm = container_of(work, typeof(*drm), fbcon_work);
1053     + int state = READ_ONCE(drm->fbcon_new_state);
1054     +
1055     + if (state == FBINFO_STATE_RUNNING)
1056     + pm_runtime_get_sync(drm->dev->dev);
1057     +
1058     + console_lock();
1059     + if (state == FBINFO_STATE_RUNNING)
1060     + nouveau_fbcon_accel_restore(drm->dev);
1061     + drm_fb_helper_set_suspend(&drm->fbcon->helper, state);
1062     + if (state != FBINFO_STATE_RUNNING)
1063     + nouveau_fbcon_accel_save_disable(drm->dev);
1064     + console_unlock();
1065     +
1066     + if (state == FBINFO_STATE_RUNNING) {
1067     + pm_runtime_mark_last_busy(drm->dev->dev);
1068     + pm_runtime_put_sync(drm->dev->dev);
1069     + }
1070     +}
1071     +
1072     void
1073     nouveau_fbcon_set_suspend(struct drm_device *dev, int state)
1074     {
1075     struct nouveau_drm *drm = nouveau_drm(dev);
1076     - if (drm->fbcon) {
1077     - console_lock();
1078     - if (state == FBINFO_STATE_RUNNING)
1079     - nouveau_fbcon_accel_restore(dev);
1080     - drm_fb_helper_set_suspend(&drm->fbcon->helper, state);
1081     - if (state != FBINFO_STATE_RUNNING)
1082     - nouveau_fbcon_accel_save_disable(dev);
1083     - console_unlock();
1084     - }
1085     +
1086     + if (!drm->fbcon)
1087     + return;
1088     +
1089     + drm->fbcon_new_state = state;
1090     + /* Since runtime resume can happen as a result of a sysfs operation,
1091     + * it's possible we already have the console locked. So handle fbcon
1092     + * init/deinit from a seperate work thread
1093     + */
1094     + schedule_work(&drm->fbcon_work);
1095     }
1096    
1097     int
1098     @@ -524,6 +548,7 @@ nouveau_fbcon_init(struct drm_device *dev)
1099    
1100     fbcon->dev = dev;
1101     drm->fbcon = fbcon;
1102     + INIT_WORK(&drm->fbcon_work, nouveau_fbcon_set_suspend_work);
1103    
1104     drm_fb_helper_prepare(dev, &fbcon->helper, &nouveau_fbcon_helper_funcs);
1105    
1106     diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.h b/drivers/gpu/drm/nouveau/nouveau_fence.h
1107     index 64c4ce7115ad..75e1f09484ff 100644
1108     --- a/drivers/gpu/drm/nouveau/nouveau_fence.h
1109     +++ b/drivers/gpu/drm/nouveau/nouveau_fence.h
1110     @@ -100,6 +100,7 @@ struct nv84_fence_priv {
1111     struct nouveau_bo *bo;
1112     struct nouveau_bo *bo_gart;
1113     u32 *suspend;
1114     + struct mutex mutex;
1115     };
1116    
1117     u64 nv84_fence_crtc(struct nouveau_channel *, int);
1118     diff --git a/drivers/gpu/drm/nouveau/nouveau_usif.c b/drivers/gpu/drm/nouveau/nouveau_usif.c
1119     index 08f9c6fa0f7f..1fba38622744 100644
1120     --- a/drivers/gpu/drm/nouveau/nouveau_usif.c
1121     +++ b/drivers/gpu/drm/nouveau/nouveau_usif.c
1122     @@ -313,7 +313,8 @@ usif_ioctl(struct drm_file *filp, void __user *user, u32 argc)
1123     if (!(ret = nvif_unpack(-ENOSYS, &data, &size, argv->v0, 0, 0, true))) {
1124     /* block access to objects not created via this interface */
1125     owner = argv->v0.owner;
1126     - if (argv->v0.object == 0ULL)
1127     + if (argv->v0.object == 0ULL &&
1128     + argv->v0.type != NVIF_IOCTL_V0_DEL)
1129     argv->v0.owner = NVDRM_OBJECT_ANY; /* except client */
1130     else
1131     argv->v0.owner = NVDRM_OBJECT_USIF;
1132     diff --git a/drivers/gpu/drm/nouveau/nv84_fence.c b/drivers/gpu/drm/nouveau/nv84_fence.c
1133     index 18bde9d8e6d6..90a5dd6311c6 100644
1134     --- a/drivers/gpu/drm/nouveau/nv84_fence.c
1135     +++ b/drivers/gpu/drm/nouveau/nv84_fence.c
1136     @@ -121,8 +121,10 @@ nv84_fence_context_del(struct nouveau_channel *chan)
1137     }
1138    
1139     nouveau_bo_wr32(priv->bo, chan->chid * 16 / 4, fctx->base.sequence);
1140     + mutex_lock(&priv->mutex);
1141     nouveau_bo_vma_del(priv->bo, &fctx->vma_gart);
1142     nouveau_bo_vma_del(priv->bo, &fctx->vma);
1143     + mutex_unlock(&priv->mutex);
1144     nouveau_fence_context_del(&fctx->base);
1145     chan->fence = NULL;
1146     nouveau_fence_context_free(&fctx->base);
1147     @@ -148,11 +150,13 @@ nv84_fence_context_new(struct nouveau_channel *chan)
1148     fctx->base.sync32 = nv84_fence_sync32;
1149     fctx->base.sequence = nv84_fence_read(chan);
1150    
1151     + mutex_lock(&priv->mutex);
1152     ret = nouveau_bo_vma_add(priv->bo, cli->vm, &fctx->vma);
1153     if (ret == 0) {
1154     ret = nouveau_bo_vma_add(priv->bo_gart, cli->vm,
1155     &fctx->vma_gart);
1156     }
1157     + mutex_unlock(&priv->mutex);
1158    
1159     /* map display semaphore buffers into channel's vm */
1160     for (i = 0; !ret && i < chan->drm->dev->mode_config.num_crtc; i++) {
1161     @@ -232,6 +236,8 @@ nv84_fence_create(struct nouveau_drm *drm)
1162     priv->base.context_base = fence_context_alloc(priv->base.contexts);
1163     priv->base.uevent = true;
1164    
1165     + mutex_init(&priv->mutex);
1166     +
1167     /* Use VRAM if there is any ; otherwise fallback to system memory */
1168     domain = drm->device.info.ram_size != 0 ? TTM_PL_FLAG_VRAM :
1169     /*
1170     diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
1171     index e34d82e79b98..c21ca7bf2efe 100644
1172     --- a/drivers/i2c/busses/i2c-piix4.c
1173     +++ b/drivers/i2c/busses/i2c-piix4.c
1174     @@ -58,7 +58,7 @@
1175     #define SMBSLVDAT (0xC + piix4_smba)
1176    
1177     /* count for request_region */
1178     -#define SMBIOSIZE 8
1179     +#define SMBIOSIZE 9
1180    
1181     /* PCI Address Constants */
1182     #define SMBBA 0x090
1183     @@ -592,6 +592,8 @@ static s32 piix4_access_sb800(struct i2c_adapter *adap, u16 addr,
1184     u8 port;
1185     int retval;
1186    
1187     + mutex_lock(&piix4_mutex_sb800);
1188     +
1189     /* Request the SMBUS semaphore, avoid conflicts with the IMC */
1190     smbslvcnt = inb_p(SMBSLVCNT);
1191     do {
1192     @@ -605,10 +607,10 @@ static s32 piix4_access_sb800(struct i2c_adapter *adap, u16 addr,
1193     usleep_range(1000, 2000);
1194     } while (--retries);
1195     /* SMBus is still owned by the IMC, we give up */
1196     - if (!retries)
1197     + if (!retries) {
1198     + mutex_unlock(&piix4_mutex_sb800);
1199     return -EBUSY;
1200     -
1201     - mutex_lock(&piix4_mutex_sb800);
1202     + }
1203    
1204     outb_p(piix4_port_sel_sb800, SB800_PIIX4_SMB_IDX);
1205     smba_en_lo = inb_p(SB800_PIIX4_SMB_IDX + 1);
1206     @@ -623,11 +625,11 @@ static s32 piix4_access_sb800(struct i2c_adapter *adap, u16 addr,
1207    
1208     outb_p(smba_en_lo, SB800_PIIX4_SMB_IDX + 1);
1209    
1210     - mutex_unlock(&piix4_mutex_sb800);
1211     -
1212     /* Release the semaphore */
1213     outb_p(smbslvcnt | 0x20, SMBSLVCNT);
1214    
1215     + mutex_unlock(&piix4_mutex_sb800);
1216     +
1217     return retval;
1218     }
1219    
1220     diff --git a/drivers/infiniband/hw/qedr/main.c b/drivers/infiniband/hw/qedr/main.c
1221     index 7b74d09a8217..58e92bce6825 100644
1222     --- a/drivers/infiniband/hw/qedr/main.c
1223     +++ b/drivers/infiniband/hw/qedr/main.c
1224     @@ -792,6 +792,9 @@ static struct qedr_dev *qedr_add(struct qed_dev *cdev, struct pci_dev *pdev,
1225     if (device_create_file(&dev->ibdev.dev, qedr_attributes[i]))
1226     goto sysfs_err;
1227    
1228     + if (!test_and_set_bit(QEDR_ENET_STATE_BIT, &dev->enet_state))
1229     + qedr_ib_dispatch_event(dev, QEDR_PORT, IB_EVENT_PORT_ACTIVE);
1230     +
1231     DP_DEBUG(dev, QEDR_MSG_INIT, "qedr driver loaded successfully\n");
1232     return dev;
1233    
1234     @@ -824,11 +827,10 @@ static void qedr_remove(struct qedr_dev *dev)
1235     ib_dealloc_device(&dev->ibdev);
1236     }
1237    
1238     -static int qedr_close(struct qedr_dev *dev)
1239     +static void qedr_close(struct qedr_dev *dev)
1240     {
1241     - qedr_ib_dispatch_event(dev, 1, IB_EVENT_PORT_ERR);
1242     -
1243     - return 0;
1244     + if (test_and_clear_bit(QEDR_ENET_STATE_BIT, &dev->enet_state))
1245     + qedr_ib_dispatch_event(dev, QEDR_PORT, IB_EVENT_PORT_ERR);
1246     }
1247    
1248     static void qedr_shutdown(struct qedr_dev *dev)
1249     @@ -837,6 +839,12 @@ static void qedr_shutdown(struct qedr_dev *dev)
1250     qedr_remove(dev);
1251     }
1252    
1253     +static void qedr_open(struct qedr_dev *dev)
1254     +{
1255     + if (!test_and_set_bit(QEDR_ENET_STATE_BIT, &dev->enet_state))
1256     + qedr_ib_dispatch_event(dev, QEDR_PORT, IB_EVENT_PORT_ACTIVE);
1257     +}
1258     +
1259     static void qedr_mac_address_change(struct qedr_dev *dev)
1260     {
1261     union ib_gid *sgid = &dev->sgid_tbl[0];
1262     @@ -863,7 +871,7 @@ static void qedr_mac_address_change(struct qedr_dev *dev)
1263    
1264     ether_addr_copy(dev->gsi_ll2_mac_address, dev->ndev->dev_addr);
1265    
1266     - qedr_ib_dispatch_event(dev, 1, IB_EVENT_GID_CHANGE);
1267     + qedr_ib_dispatch_event(dev, QEDR_PORT, IB_EVENT_GID_CHANGE);
1268    
1269     if (rc)
1270     DP_ERR(dev, "Error updating mac filter\n");
1271     @@ -877,7 +885,7 @@ static void qedr_notify(struct qedr_dev *dev, enum qede_roce_event event)
1272     {
1273     switch (event) {
1274     case QEDE_UP:
1275     - qedr_ib_dispatch_event(dev, 1, IB_EVENT_PORT_ACTIVE);
1276     + qedr_open(dev);
1277     break;
1278     case QEDE_DOWN:
1279     qedr_close(dev);
1280     diff --git a/drivers/infiniband/hw/qedr/qedr.h b/drivers/infiniband/hw/qedr/qedr.h
1281     index 620badd7d4fb..f669d0bb697e 100644
1282     --- a/drivers/infiniband/hw/qedr/qedr.h
1283     +++ b/drivers/infiniband/hw/qedr/qedr.h
1284     @@ -113,6 +113,8 @@ struct qedr_device_attr {
1285     struct qed_rdma_events events;
1286     };
1287    
1288     +#define QEDR_ENET_STATE_BIT (0)
1289     +
1290     struct qedr_dev {
1291     struct ib_device ibdev;
1292     struct qed_dev *cdev;
1293     @@ -153,6 +155,8 @@ struct qedr_dev {
1294     struct qedr_cq *gsi_sqcq;
1295     struct qedr_cq *gsi_rqcq;
1296     struct qedr_qp *gsi_qp;
1297     +
1298     + unsigned long enet_state;
1299     };
1300    
1301     #define QEDR_MAX_SQ_PBL (0x8000)
1302     @@ -188,6 +192,7 @@ struct qedr_dev {
1303     #define QEDR_ROCE_MAX_CNQ_SIZE (0x4000)
1304    
1305     #define QEDR_MAX_PORT (1)
1306     +#define QEDR_PORT (1)
1307    
1308     #define QEDR_UVERBS(CMD_NAME) (1ull << IB_USER_VERBS_CMD_##CMD_NAME)
1309    
1310     diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c
1311     index a61514296767..4ba019e3dc56 100644
1312     --- a/drivers/infiniband/hw/qedr/verbs.c
1313     +++ b/drivers/infiniband/hw/qedr/verbs.c
1314     @@ -471,8 +471,6 @@ struct ib_pd *qedr_alloc_pd(struct ib_device *ibdev,
1315     struct ib_ucontext *context, struct ib_udata *udata)
1316     {
1317     struct qedr_dev *dev = get_qedr_dev(ibdev);
1318     - struct qedr_ucontext *uctx = NULL;
1319     - struct qedr_alloc_pd_uresp uresp;
1320     struct qedr_pd *pd;
1321     u16 pd_id;
1322     int rc;
1323     @@ -489,21 +487,33 @@ struct ib_pd *qedr_alloc_pd(struct ib_device *ibdev,
1324     if (!pd)
1325     return ERR_PTR(-ENOMEM);
1326    
1327     - dev->ops->rdma_alloc_pd(dev->rdma_ctx, &pd_id);
1328     + rc = dev->ops->rdma_alloc_pd(dev->rdma_ctx, &pd_id);
1329     + if (rc)
1330     + goto err;
1331    
1332     - uresp.pd_id = pd_id;
1333     pd->pd_id = pd_id;
1334    
1335     if (udata && context) {
1336     + struct qedr_alloc_pd_uresp uresp;
1337     +
1338     + uresp.pd_id = pd_id;
1339     +
1340     rc = ib_copy_to_udata(udata, &uresp, sizeof(uresp));
1341     - if (rc)
1342     + if (rc) {
1343     DP_ERR(dev, "copy error pd_id=0x%x.\n", pd_id);
1344     - uctx = get_qedr_ucontext(context);
1345     - uctx->pd = pd;
1346     - pd->uctx = uctx;
1347     + dev->ops->rdma_dealloc_pd(dev->rdma_ctx, pd_id);
1348     + goto err;
1349     + }
1350     +
1351     + pd->uctx = get_qedr_ucontext(context);
1352     + pd->uctx->pd = pd;
1353     }
1354    
1355     return &pd->ibpd;
1356     +
1357     +err:
1358     + kfree(pd);
1359     + return ERR_PTR(rc);
1360     }
1361    
1362     int qedr_dealloc_pd(struct ib_pd *ibpd)
1363     @@ -1719,6 +1729,14 @@ static int qedr_update_qp_state(struct qedr_dev *dev,
1364     /* ERR->XXX */
1365     switch (new_state) {
1366     case QED_ROCE_QP_STATE_RESET:
1367     + if ((qp->rq.prod != qp->rq.cons) ||
1368     + (qp->sq.prod != qp->sq.cons)) {
1369     + DP_NOTICE(dev,
1370     + "Error->Reset with rq/sq not empty rq.prod=%x rq.cons=%x sq.prod=%x sq.cons=%x\n",
1371     + qp->rq.prod, qp->rq.cons, qp->sq.prod,
1372     + qp->sq.cons);
1373     + status = -EINVAL;
1374     + }
1375     break;
1376     default:
1377     status = -EINVAL;
1378     @@ -2014,7 +2032,7 @@ int qedr_query_qp(struct ib_qp *ibqp,
1379     qp_attr->cap.max_recv_wr = qp->rq.max_wr;
1380     qp_attr->cap.max_send_sge = qp->sq.max_sges;
1381     qp_attr->cap.max_recv_sge = qp->rq.max_sges;
1382     - qp_attr->cap.max_inline_data = qp->max_inline_data;
1383     + qp_attr->cap.max_inline_data = ROCE_REQ_MAX_INLINE_DATA_SIZE;
1384     qp_init_attr->cap = qp_attr->cap;
1385    
1386     memcpy(&qp_attr->ah_attr.grh.dgid.raw[0], &params.dgid.bytes[0],
1387     @@ -3220,9 +3238,10 @@ static int qedr_poll_cq_req(struct qedr_dev *dev,
1388     IB_WC_SUCCESS, 0);
1389     break;
1390     case RDMA_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR:
1391     - DP_ERR(dev,
1392     - "Error: POLL CQ with RDMA_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR. CQ icid=0x%x, QP icid=0x%x\n",
1393     - cq->icid, qp->icid);
1394     + if (qp->state != QED_ROCE_QP_STATE_ERR)
1395     + DP_ERR(dev,
1396     + "Error: POLL CQ with RDMA_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR. CQ icid=0x%x, QP icid=0x%x\n",
1397     + cq->icid, qp->icid);
1398     cnt = process_req(dev, qp, cq, num_entries, wc, req->sq_cons,
1399     IB_WC_WR_FLUSH_ERR, 0);
1400     break;
1401     diff --git a/drivers/irqchip/irq-xtensa-mx.c b/drivers/irqchip/irq-xtensa-mx.c
1402     index bb3ac5fe5846..72a391e01011 100644
1403     --- a/drivers/irqchip/irq-xtensa-mx.c
1404     +++ b/drivers/irqchip/irq-xtensa-mx.c
1405     @@ -142,7 +142,7 @@ static struct irq_chip xtensa_mx_irq_chip = {
1406     int __init xtensa_mx_init_legacy(struct device_node *interrupt_parent)
1407     {
1408     struct irq_domain *root_domain =
1409     - irq_domain_add_legacy(NULL, NR_IRQS, 0, 0,
1410     + irq_domain_add_legacy(NULL, NR_IRQS - 1, 1, 0,
1411     &xtensa_mx_irq_domain_ops,
1412     &xtensa_mx_irq_chip);
1413     irq_set_default_host(root_domain);
1414     diff --git a/drivers/irqchip/irq-xtensa-pic.c b/drivers/irqchip/irq-xtensa-pic.c
1415     index 472ae1770964..f728755fa292 100644
1416     --- a/drivers/irqchip/irq-xtensa-pic.c
1417     +++ b/drivers/irqchip/irq-xtensa-pic.c
1418     @@ -89,7 +89,7 @@ static struct irq_chip xtensa_irq_chip = {
1419     int __init xtensa_pic_init_legacy(struct device_node *interrupt_parent)
1420     {
1421     struct irq_domain *root_domain =
1422     - irq_domain_add_legacy(NULL, NR_IRQS, 0, 0,
1423     + irq_domain_add_legacy(NULL, NR_IRQS - 1, 1, 0,
1424     &xtensa_irq_domain_ops, &xtensa_irq_chip);
1425     irq_set_default_host(root_domain);
1426     return 0;
1427     diff --git a/drivers/net/ethernet/adaptec/starfire.c b/drivers/net/ethernet/adaptec/starfire.c
1428     index 8af2c88d5b33..45bb0fe50917 100644
1429     --- a/drivers/net/ethernet/adaptec/starfire.c
1430     +++ b/drivers/net/ethernet/adaptec/starfire.c
1431     @@ -1153,6 +1153,12 @@ static void init_ring(struct net_device *dev)
1432     if (skb == NULL)
1433     break;
1434     np->rx_info[i].mapping = pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE);
1435     + if (pci_dma_mapping_error(np->pci_dev,
1436     + np->rx_info[i].mapping)) {
1437     + dev_kfree_skb(skb);
1438     + np->rx_info[i].skb = NULL;
1439     + break;
1440     + }
1441     /* Grrr, we cannot offset to correctly align the IP header. */
1442     np->rx_ring[i].rxaddr = cpu_to_dma(np->rx_info[i].mapping | RxDescValid);
1443     }
1444     @@ -1183,8 +1189,9 @@ static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev)
1445     {
1446     struct netdev_private *np = netdev_priv(dev);
1447     unsigned int entry;
1448     + unsigned int prev_tx;
1449     u32 status;
1450     - int i;
1451     + int i, j;
1452    
1453     /*
1454     * be cautious here, wrapping the queue has weird semantics
1455     @@ -1202,6 +1209,7 @@ static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev)
1456     }
1457     #endif /* ZEROCOPY && HAS_BROKEN_FIRMWARE */
1458    
1459     + prev_tx = np->cur_tx;
1460     entry = np->cur_tx % TX_RING_SIZE;
1461     for (i = 0; i < skb_num_frags(skb); i++) {
1462     int wrap_ring = 0;
1463     @@ -1235,6 +1243,11 @@ static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev)
1464     skb_frag_size(this_frag),
1465     PCI_DMA_TODEVICE);
1466     }
1467     + if (pci_dma_mapping_error(np->pci_dev,
1468     + np->tx_info[entry].mapping)) {
1469     + dev->stats.tx_dropped++;
1470     + goto err_out;
1471     + }
1472    
1473     np->tx_ring[entry].addr = cpu_to_dma(np->tx_info[entry].mapping);
1474     np->tx_ring[entry].status = cpu_to_le32(status);
1475     @@ -1269,8 +1282,30 @@ static netdev_tx_t start_tx(struct sk_buff *skb, struct net_device *dev)
1476     netif_stop_queue(dev);
1477    
1478     return NETDEV_TX_OK;
1479     -}
1480    
1481     +err_out:
1482     + entry = prev_tx % TX_RING_SIZE;
1483     + np->tx_info[entry].skb = NULL;
1484     + if (i > 0) {
1485     + pci_unmap_single(np->pci_dev,
1486     + np->tx_info[entry].mapping,
1487     + skb_first_frag_len(skb),
1488     + PCI_DMA_TODEVICE);
1489     + np->tx_info[entry].mapping = 0;
1490     + entry = (entry + np->tx_info[entry].used_slots) % TX_RING_SIZE;
1491     + for (j = 1; j < i; j++) {
1492     + pci_unmap_single(np->pci_dev,
1493     + np->tx_info[entry].mapping,
1494     + skb_frag_size(
1495     + &skb_shinfo(skb)->frags[j-1]),
1496     + PCI_DMA_TODEVICE);
1497     + entry++;
1498     + }
1499     + }
1500     + dev_kfree_skb_any(skb);
1501     + np->cur_tx = prev_tx;
1502     + return NETDEV_TX_OK;
1503     +}
1504    
1505     /* The interrupt handler does all of the Rx thread work and cleans up
1506     after the Tx thread. */
1507     @@ -1570,6 +1605,12 @@ static void refill_rx_ring(struct net_device *dev)
1508     break; /* Better luck next round. */
1509     np->rx_info[entry].mapping =
1510     pci_map_single(np->pci_dev, skb->data, np->rx_buf_sz, PCI_DMA_FROMDEVICE);
1511     + if (pci_dma_mapping_error(np->pci_dev,
1512     + np->rx_info[entry].mapping)) {
1513     + dev_kfree_skb(skb);
1514     + np->rx_info[entry].skb = NULL;
1515     + break;
1516     + }
1517     np->rx_ring[entry].rxaddr =
1518     cpu_to_dma(np->rx_info[entry].mapping | RxDescValid);
1519     }
1520     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1521     index 48ee4110ef6e..5cc0f8cfec87 100644
1522     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1523     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
1524     @@ -1499,6 +1499,7 @@ static int bnxt_async_event_process(struct bnxt *bp,
1525     netdev_warn(bp->dev, "Link speed %d no longer supported\n",
1526     speed);
1527     }
1528     + set_bit(BNXT_LINK_SPEED_CHNG_SP_EVENT, &bp->sp_event);
1529     /* fall thru */
1530     }
1531     case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE:
1532     @@ -5110,6 +5111,7 @@ static int bnxt_update_link(struct bnxt *bp, bool chng_link_state)
1533     struct hwrm_port_phy_qcfg_input req = {0};
1534     struct hwrm_port_phy_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
1535     u8 link_up = link_info->link_up;
1536     + u16 diff;
1537    
1538     bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_PHY_QCFG, -1, -1);
1539    
1540     @@ -5197,6 +5199,18 @@ static int bnxt_update_link(struct bnxt *bp, bool chng_link_state)
1541     link_info->link_up = 0;
1542     }
1543     mutex_unlock(&bp->hwrm_cmd_lock);
1544     +
1545     + diff = link_info->support_auto_speeds ^ link_info->advertising;
1546     + if ((link_info->support_auto_speeds | diff) !=
1547     + link_info->support_auto_speeds) {
1548     + /* An advertised speed is no longer supported, so we need to
1549     + * update the advertisement settings. Caller holds RTNL
1550     + * so we can modify link settings.
1551     + */
1552     + link_info->advertising = link_info->support_auto_speeds;
1553     + if (link_info->autoneg & BNXT_AUTONEG_SPEED)
1554     + bnxt_hwrm_set_link_setting(bp, true, false);
1555     + }
1556     return 0;
1557     }
1558    
1559     @@ -6080,29 +6094,37 @@ static void bnxt_timer(unsigned long data)
1560     mod_timer(&bp->timer, jiffies + bp->current_interval);
1561     }
1562    
1563     -/* Only called from bnxt_sp_task() */
1564     -static void bnxt_reset(struct bnxt *bp, bool silent)
1565     +static void bnxt_rtnl_lock_sp(struct bnxt *bp)
1566     {
1567     - /* bnxt_reset_task() calls bnxt_close_nic() which waits
1568     - * for BNXT_STATE_IN_SP_TASK to clear.
1569     - * If there is a parallel dev_close(), bnxt_close() may be holding
1570     + /* We are called from bnxt_sp_task which has BNXT_STATE_IN_SP_TASK
1571     + * set. If the device is being closed, bnxt_close() may be holding
1572     * rtnl() and waiting for BNXT_STATE_IN_SP_TASK to clear. So we
1573     * must clear BNXT_STATE_IN_SP_TASK before holding rtnl().
1574     */
1575     clear_bit(BNXT_STATE_IN_SP_TASK, &bp->state);
1576     rtnl_lock();
1577     - if (test_bit(BNXT_STATE_OPEN, &bp->state))
1578     - bnxt_reset_task(bp, silent);
1579     +}
1580     +
1581     +static void bnxt_rtnl_unlock_sp(struct bnxt *bp)
1582     +{
1583     set_bit(BNXT_STATE_IN_SP_TASK, &bp->state);
1584     rtnl_unlock();
1585     }
1586    
1587     +/* Only called from bnxt_sp_task() */
1588     +static void bnxt_reset(struct bnxt *bp, bool silent)
1589     +{
1590     + bnxt_rtnl_lock_sp(bp);
1591     + if (test_bit(BNXT_STATE_OPEN, &bp->state))
1592     + bnxt_reset_task(bp, silent);
1593     + bnxt_rtnl_unlock_sp(bp);
1594     +}
1595     +
1596     static void bnxt_cfg_ntp_filters(struct bnxt *);
1597    
1598     static void bnxt_sp_task(struct work_struct *work)
1599     {
1600     struct bnxt *bp = container_of(work, struct bnxt, sp_task);
1601     - int rc;
1602    
1603     set_bit(BNXT_STATE_IN_SP_TASK, &bp->state);
1604     smp_mb__after_atomic();
1605     @@ -6116,12 +6138,6 @@ static void bnxt_sp_task(struct work_struct *work)
1606    
1607     if (test_and_clear_bit(BNXT_RX_NTP_FLTR_SP_EVENT, &bp->sp_event))
1608     bnxt_cfg_ntp_filters(bp);
1609     - if (test_and_clear_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event)) {
1610     - rc = bnxt_update_link(bp, true);
1611     - if (rc)
1612     - netdev_err(bp->dev, "SP task can't update link (rc: %x)\n",
1613     - rc);
1614     - }
1615     if (test_and_clear_bit(BNXT_HWRM_EXEC_FWD_REQ_SP_EVENT, &bp->sp_event))
1616     bnxt_hwrm_exec_fwd_req(bp);
1617     if (test_and_clear_bit(BNXT_VXLAN_ADD_PORT_SP_EVENT, &bp->sp_event)) {
1618     @@ -6142,18 +6158,39 @@ static void bnxt_sp_task(struct work_struct *work)
1619     bnxt_hwrm_tunnel_dst_port_free(
1620     bp, TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE);
1621     }
1622     + if (test_and_clear_bit(BNXT_PERIODIC_STATS_SP_EVENT, &bp->sp_event))
1623     + bnxt_hwrm_port_qstats(bp);
1624     +
1625     + /* These functions below will clear BNXT_STATE_IN_SP_TASK. They
1626     + * must be the last functions to be called before exiting.
1627     + */
1628     + if (test_and_clear_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event)) {
1629     + int rc = 0;
1630     +
1631     + if (test_and_clear_bit(BNXT_LINK_SPEED_CHNG_SP_EVENT,
1632     + &bp->sp_event))
1633     + bnxt_hwrm_phy_qcaps(bp);
1634     +
1635     + bnxt_rtnl_lock_sp(bp);
1636     + if (test_bit(BNXT_STATE_OPEN, &bp->state))
1637     + rc = bnxt_update_link(bp, true);
1638     + bnxt_rtnl_unlock_sp(bp);
1639     + if (rc)
1640     + netdev_err(bp->dev, "SP task can't update link (rc: %x)\n",
1641     + rc);
1642     + }
1643     + if (test_and_clear_bit(BNXT_HWRM_PORT_MODULE_SP_EVENT, &bp->sp_event)) {
1644     + bnxt_rtnl_lock_sp(bp);
1645     + if (test_bit(BNXT_STATE_OPEN, &bp->state))
1646     + bnxt_get_port_module_status(bp);
1647     + bnxt_rtnl_unlock_sp(bp);
1648     + }
1649     if (test_and_clear_bit(BNXT_RESET_TASK_SP_EVENT, &bp->sp_event))
1650     bnxt_reset(bp, false);
1651    
1652     if (test_and_clear_bit(BNXT_RESET_TASK_SILENT_SP_EVENT, &bp->sp_event))
1653     bnxt_reset(bp, true);
1654    
1655     - if (test_and_clear_bit(BNXT_HWRM_PORT_MODULE_SP_EVENT, &bp->sp_event))
1656     - bnxt_get_port_module_status(bp);
1657     -
1658     - if (test_and_clear_bit(BNXT_PERIODIC_STATS_SP_EVENT, &bp->sp_event))
1659     - bnxt_hwrm_port_qstats(bp);
1660     -
1661     smp_mb__before_atomic();
1662     clear_bit(BNXT_STATE_IN_SP_TASK, &bp->state);
1663     }
1664     diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
1665     index 51b164a0e844..666bc0608ed7 100644
1666     --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h
1667     +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h
1668     @@ -1089,6 +1089,7 @@ struct bnxt {
1669     #define BNXT_RESET_TASK_SILENT_SP_EVENT 11
1670     #define BNXT_GENEVE_ADD_PORT_SP_EVENT 12
1671     #define BNXT_GENEVE_DEL_PORT_SP_EVENT 13
1672     +#define BNXT_LINK_SPEED_CHNG_SP_EVENT 14
1673    
1674     struct bnxt_pf_info pf;
1675     #ifdef CONFIG_BNXT_SRIOV
1676     diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
1677     index 050e21fbb147..679679a4ccb2 100644
1678     --- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
1679     +++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c
1680     @@ -31,6 +31,7 @@ struct lmac {
1681     u8 lmac_type;
1682     u8 lane_to_sds;
1683     bool use_training;
1684     + bool autoneg;
1685     bool link_up;
1686     int lmacid; /* ID within BGX */
1687     int lmacid_bd; /* ID on board */
1688     @@ -418,7 +419,17 @@ static int bgx_lmac_sgmii_init(struct bgx *bgx, struct lmac *lmac)
1689     /* power down, reset autoneg, autoneg enable */
1690     cfg = bgx_reg_read(bgx, lmacid, BGX_GMP_PCS_MRX_CTL);
1691     cfg &= ~PCS_MRX_CTL_PWR_DN;
1692     - cfg |= (PCS_MRX_CTL_RST_AN | PCS_MRX_CTL_AN_EN);
1693     + cfg |= PCS_MRX_CTL_RST_AN;
1694     + if (lmac->phydev) {
1695     + cfg |= PCS_MRX_CTL_AN_EN;
1696     + } else {
1697     + /* In scenarios where PHY driver is not present or it's a
1698     + * non-standard PHY, FW sets AN_EN to inform Linux driver
1699     + * to do auto-neg and link polling or not.
1700     + */
1701     + if (cfg & PCS_MRX_CTL_AN_EN)
1702     + lmac->autoneg = true;
1703     + }
1704     bgx_reg_write(bgx, lmacid, BGX_GMP_PCS_MRX_CTL, cfg);
1705    
1706     if (lmac->lmac_type == BGX_MODE_QSGMII) {
1707     @@ -429,7 +440,7 @@ static int bgx_lmac_sgmii_init(struct bgx *bgx, struct lmac *lmac)
1708     return 0;
1709     }
1710    
1711     - if (lmac->lmac_type == BGX_MODE_SGMII) {
1712     + if ((lmac->lmac_type == BGX_MODE_SGMII) && lmac->phydev) {
1713     if (bgx_poll_reg(bgx, lmacid, BGX_GMP_PCS_MRX_STATUS,
1714     PCS_MRX_STATUS_AN_CPT, false)) {
1715     dev_err(&bgx->pdev->dev, "BGX AN_CPT not completed\n");
1716     @@ -623,12 +634,71 @@ static int bgx_xaui_check_link(struct lmac *lmac)
1717     return -1;
1718     }
1719    
1720     +static void bgx_poll_for_sgmii_link(struct lmac *lmac)
1721     +{
1722     + u64 pcs_link, an_result;
1723     + u8 speed;
1724     +
1725     + pcs_link = bgx_reg_read(lmac->bgx, lmac->lmacid,
1726     + BGX_GMP_PCS_MRX_STATUS);
1727     +
1728     + /*Link state bit is sticky, read it again*/
1729     + if (!(pcs_link & PCS_MRX_STATUS_LINK))
1730     + pcs_link = bgx_reg_read(lmac->bgx, lmac->lmacid,
1731     + BGX_GMP_PCS_MRX_STATUS);
1732     +
1733     + if (bgx_poll_reg(lmac->bgx, lmac->lmacid, BGX_GMP_PCS_MRX_STATUS,
1734     + PCS_MRX_STATUS_AN_CPT, false)) {
1735     + lmac->link_up = false;
1736     + lmac->last_speed = SPEED_UNKNOWN;
1737     + lmac->last_duplex = DUPLEX_UNKNOWN;
1738     + goto next_poll;
1739     + }
1740     +
1741     + lmac->link_up = ((pcs_link & PCS_MRX_STATUS_LINK) != 0) ? true : false;
1742     + an_result = bgx_reg_read(lmac->bgx, lmac->lmacid,
1743     + BGX_GMP_PCS_ANX_AN_RESULTS);
1744     +
1745     + speed = (an_result >> 3) & 0x3;
1746     + lmac->last_duplex = (an_result >> 1) & 0x1;
1747     + switch (speed) {
1748     + case 0:
1749     + lmac->last_speed = 10;
1750     + break;
1751     + case 1:
1752     + lmac->last_speed = 100;
1753     + break;
1754     + case 2:
1755     + lmac->last_speed = 1000;
1756     + break;
1757     + default:
1758     + lmac->link_up = false;
1759     + lmac->last_speed = SPEED_UNKNOWN;
1760     + lmac->last_duplex = DUPLEX_UNKNOWN;
1761     + break;
1762     + }
1763     +
1764     +next_poll:
1765     +
1766     + if (lmac->last_link != lmac->link_up) {
1767     + if (lmac->link_up)
1768     + bgx_sgmii_change_link_state(lmac);
1769     + lmac->last_link = lmac->link_up;
1770     + }
1771     +
1772     + queue_delayed_work(lmac->check_link, &lmac->dwork, HZ * 3);
1773     +}
1774     +
1775     static void bgx_poll_for_link(struct work_struct *work)
1776     {
1777     struct lmac *lmac;
1778     u64 spu_link, smu_link;
1779    
1780     lmac = container_of(work, struct lmac, dwork.work);
1781     + if (lmac->is_sgmii) {
1782     + bgx_poll_for_sgmii_link(lmac);
1783     + return;
1784     + }
1785    
1786     /* Receive link is latching low. Force it high and verify it */
1787     bgx_reg_modify(lmac->bgx, lmac->lmacid,
1788     @@ -720,9 +790,21 @@ static int bgx_lmac_enable(struct bgx *bgx, u8 lmacid)
1789     (lmac->lmac_type != BGX_MODE_XLAUI) &&
1790     (lmac->lmac_type != BGX_MODE_40G_KR) &&
1791     (lmac->lmac_type != BGX_MODE_10G_KR)) {
1792     - if (!lmac->phydev)
1793     - return -ENODEV;
1794     -
1795     + if (!lmac->phydev) {
1796     + if (lmac->autoneg) {
1797     + bgx_reg_write(bgx, lmacid,
1798     + BGX_GMP_PCS_LINKX_TIMER,
1799     + PCS_LINKX_TIMER_COUNT);
1800     + goto poll;
1801     + } else {
1802     + /* Default to below link speed and duplex */
1803     + lmac->link_up = true;
1804     + lmac->last_speed = 1000;
1805     + lmac->last_duplex = 1;
1806     + bgx_sgmii_change_link_state(lmac);
1807     + return 0;
1808     + }
1809     + }
1810     lmac->phydev->dev_flags = 0;
1811    
1812     if (phy_connect_direct(&lmac->netdev, lmac->phydev,
1813     @@ -731,15 +813,17 @@ static int bgx_lmac_enable(struct bgx *bgx, u8 lmacid)
1814     return -ENODEV;
1815    
1816     phy_start_aneg(lmac->phydev);
1817     - } else {
1818     - lmac->check_link = alloc_workqueue("check_link", WQ_UNBOUND |
1819     - WQ_MEM_RECLAIM, 1);
1820     - if (!lmac->check_link)
1821     - return -ENOMEM;
1822     - INIT_DELAYED_WORK(&lmac->dwork, bgx_poll_for_link);
1823     - queue_delayed_work(lmac->check_link, &lmac->dwork, 0);
1824     + return 0;
1825     }
1826    
1827     +poll:
1828     + lmac->check_link = alloc_workqueue("check_link", WQ_UNBOUND |
1829     + WQ_MEM_RECLAIM, 1);
1830     + if (!lmac->check_link)
1831     + return -ENOMEM;
1832     + INIT_DELAYED_WORK(&lmac->dwork, bgx_poll_for_link);
1833     + queue_delayed_work(lmac->check_link, &lmac->dwork, 0);
1834     +
1835     return 0;
1836     }
1837    
1838     diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.h b/drivers/net/ethernet/cavium/thunder/thunder_bgx.h
1839     index 01cc7c859131..1143e9575e53 100644
1840     --- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.h
1841     +++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.h
1842     @@ -144,10 +144,15 @@
1843     #define PCS_MRX_CTL_LOOPBACK1 BIT_ULL(14)
1844     #define PCS_MRX_CTL_RESET BIT_ULL(15)
1845     #define BGX_GMP_PCS_MRX_STATUS 0x30008
1846     +#define PCS_MRX_STATUS_LINK BIT_ULL(2)
1847     #define PCS_MRX_STATUS_AN_CPT BIT_ULL(5)
1848     +#define BGX_GMP_PCS_ANX_ADV 0x30010
1849     #define BGX_GMP_PCS_ANX_AN_RESULTS 0x30020
1850     +#define BGX_GMP_PCS_LINKX_TIMER 0x30040
1851     +#define PCS_LINKX_TIMER_COUNT 0x1E84
1852     #define BGX_GMP_PCS_SGM_AN_ADV 0x30068
1853     #define BGX_GMP_PCS_MISCX_CTL 0x30078
1854     +#define PCS_MISC_CTL_MODE BIT_ULL(8)
1855     #define PCS_MISC_CTL_DISP_EN BIT_ULL(13)
1856     #define PCS_MISC_CTL_GMX_ENO BIT_ULL(11)
1857     #define PCS_MISC_CTL_SAMP_PT_MASK 0x7Full
1858     diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
1859     index 9061c2f82b9c..d391beebe591 100644
1860     --- a/drivers/net/ethernet/freescale/gianfar.c
1861     +++ b/drivers/net/ethernet/freescale/gianfar.c
1862     @@ -2007,8 +2007,8 @@ static void free_skb_rx_queue(struct gfar_priv_rx_q *rx_queue)
1863     if (!rxb->page)
1864     continue;
1865    
1866     - dma_unmap_single(rx_queue->dev, rxb->dma,
1867     - PAGE_SIZE, DMA_FROM_DEVICE);
1868     + dma_unmap_page(rx_queue->dev, rxb->dma,
1869     + PAGE_SIZE, DMA_FROM_DEVICE);
1870     __free_page(rxb->page);
1871    
1872     rxb->page = NULL;
1873     diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1874     index dff7b60345d8..c06845b7b666 100644
1875     --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1876     +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
1877     @@ -304,8 +304,8 @@ int hns_nic_net_xmit_hw(struct net_device *ndev,
1878     struct hns_nic_ring_data *ring_data)
1879     {
1880     struct hns_nic_priv *priv = netdev_priv(ndev);
1881     - struct device *dev = priv->dev;
1882     struct hnae_ring *ring = ring_data->ring;
1883     + struct device *dev = ring_to_dev(ring);
1884     struct netdev_queue *dev_queue;
1885     struct skb_frag_struct *frag;
1886     int buf_num;
1887     diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
1888     index 0fbf686f5e7c..9f2184be55dc 100644
1889     --- a/drivers/net/ethernet/ibm/ibmvnic.c
1890     +++ b/drivers/net/ethernet/ibm/ibmvnic.c
1891     @@ -189,9 +189,10 @@ static int alloc_long_term_buff(struct ibmvnic_adapter *adapter,
1892     }
1893     ltb->map_id = adapter->map_id;
1894     adapter->map_id++;
1895     +
1896     + init_completion(&adapter->fw_done);
1897     send_request_map(adapter, ltb->addr,
1898     ltb->size, ltb->map_id);
1899     - init_completion(&adapter->fw_done);
1900     wait_for_completion(&adapter->fw_done);
1901     return 0;
1902     }
1903     @@ -505,7 +506,7 @@ static int ibmvnic_open(struct net_device *netdev)
1904     adapter->rx_pool = NULL;
1905     rx_pool_arr_alloc_failed:
1906     for (i = 0; i < adapter->req_rx_queues; i++)
1907     - napi_enable(&adapter->napi[i]);
1908     + napi_disable(&adapter->napi[i]);
1909     alloc_napi_failed:
1910     return -ENOMEM;
1911     }
1912     @@ -1133,10 +1134,10 @@ static void ibmvnic_get_ethtool_stats(struct net_device *dev,
1913     crq.request_statistics.ioba = cpu_to_be32(adapter->stats_token);
1914     crq.request_statistics.len =
1915     cpu_to_be32(sizeof(struct ibmvnic_statistics));
1916     - ibmvnic_send_crq(adapter, &crq);
1917    
1918     /* Wait for data to be written */
1919     init_completion(&adapter->stats_done);
1920     + ibmvnic_send_crq(adapter, &crq);
1921     wait_for_completion(&adapter->stats_done);
1922    
1923     for (i = 0; i < ARRAY_SIZE(ibmvnic_stats); i++)
1924     @@ -2197,12 +2198,12 @@ static void handle_error_info_rsp(union ibmvnic_crq *crq,
1925    
1926     if (!found) {
1927     dev_err(dev, "Couldn't find error id %x\n",
1928     - crq->request_error_rsp.error_id);
1929     + be32_to_cpu(crq->request_error_rsp.error_id));
1930     return;
1931     }
1932    
1933     dev_err(dev, "Detailed info for error id %x:",
1934     - crq->request_error_rsp.error_id);
1935     + be32_to_cpu(crq->request_error_rsp.error_id));
1936    
1937     for (i = 0; i < error_buff->len; i++) {
1938     pr_cont("%02x", (int)error_buff->buff[i]);
1939     @@ -2281,8 +2282,8 @@ static void handle_error_indication(union ibmvnic_crq *crq,
1940     dev_err(dev, "Firmware reports %serror id %x, cause %d\n",
1941     crq->error_indication.
1942     flags & IBMVNIC_FATAL_ERROR ? "FATAL " : "",
1943     - crq->error_indication.error_id,
1944     - crq->error_indication.error_cause);
1945     + be32_to_cpu(crq->error_indication.error_id),
1946     + be16_to_cpu(crq->error_indication.error_cause));
1947    
1948     error_buff = kmalloc(sizeof(*error_buff), GFP_ATOMIC);
1949     if (!error_buff)
1950     @@ -2400,10 +2401,10 @@ static void handle_request_cap_rsp(union ibmvnic_crq *crq,
1951     case PARTIALSUCCESS:
1952     dev_info(dev, "req=%lld, rsp=%ld in %s queue, retrying.\n",
1953     *req_value,
1954     - (long int)be32_to_cpu(crq->request_capability_rsp.
1955     + (long int)be64_to_cpu(crq->request_capability_rsp.
1956     number), name);
1957     release_sub_crqs_no_irqs(adapter);
1958     - *req_value = be32_to_cpu(crq->request_capability_rsp.number);
1959     + *req_value = be64_to_cpu(crq->request_capability_rsp.number);
1960     init_sub_crqs(adapter, 1);
1961     return;
1962     default:
1963     @@ -2809,9 +2810,9 @@ static ssize_t trace_read(struct file *file, char __user *user_buf, size_t len,
1964     crq.collect_fw_trace.correlator = adapter->ras_comps[num].correlator;
1965     crq.collect_fw_trace.ioba = cpu_to_be32(trace_tok);
1966     crq.collect_fw_trace.len = adapter->ras_comps[num].trace_buff_size;
1967     - ibmvnic_send_crq(adapter, &crq);
1968    
1969     init_completion(&adapter->fw_done);
1970     + ibmvnic_send_crq(adapter, &crq);
1971     wait_for_completion(&adapter->fw_done);
1972    
1973     if (*ppos + len > be32_to_cpu(adapter->ras_comps[num].trace_buff_size))
1974     @@ -3591,9 +3592,9 @@ static int ibmvnic_dump_show(struct seq_file *seq, void *v)
1975     memset(&crq, 0, sizeof(crq));
1976     crq.request_dump_size.first = IBMVNIC_CRQ_CMD;
1977     crq.request_dump_size.cmd = REQUEST_DUMP_SIZE;
1978     - ibmvnic_send_crq(adapter, &crq);
1979    
1980     init_completion(&adapter->fw_done);
1981     + ibmvnic_send_crq(adapter, &crq);
1982     wait_for_completion(&adapter->fw_done);
1983    
1984     seq_write(seq, adapter->dump_data, adapter->dump_data_size);
1985     @@ -3639,8 +3640,8 @@ static void handle_crq_init_rsp(struct work_struct *work)
1986     }
1987     }
1988    
1989     - send_version_xchg(adapter);
1990     reinit_completion(&adapter->init_done);
1991     + send_version_xchg(adapter);
1992     if (!wait_for_completion_timeout(&adapter->init_done, timeout)) {
1993     dev_err(dev, "Passive init timeout\n");
1994     goto task_failed;
1995     @@ -3650,9 +3651,9 @@ static void handle_crq_init_rsp(struct work_struct *work)
1996     if (adapter->renegotiate) {
1997     adapter->renegotiate = false;
1998     release_sub_crqs_no_irqs(adapter);
1999     - send_cap_queries(adapter);
2000    
2001     reinit_completion(&adapter->init_done);
2002     + send_cap_queries(adapter);
2003     if (!wait_for_completion_timeout(&adapter->init_done,
2004     timeout)) {
2005     dev_err(dev, "Passive init timeout\n");
2006     @@ -3780,9 +3781,9 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id)
2007     adapter->debugfs_dump = ent;
2008     }
2009     }
2010     - ibmvnic_send_crq_init(adapter);
2011    
2012     init_completion(&adapter->init_done);
2013     + ibmvnic_send_crq_init(adapter);
2014     if (!wait_for_completion_timeout(&adapter->init_done, timeout))
2015     return 0;
2016    
2017     @@ -3790,9 +3791,9 @@ static int ibmvnic_probe(struct vio_dev *dev, const struct vio_device_id *id)
2018     if (adapter->renegotiate) {
2019     adapter->renegotiate = false;
2020     release_sub_crqs_no_irqs(adapter);
2021     - send_cap_queries(adapter);
2022    
2023     reinit_completion(&adapter->init_done);
2024     + send_cap_queries(adapter);
2025     if (!wait_for_completion_timeout(&adapter->init_done,
2026     timeout))
2027     return 0;
2028     diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
2029     index 86a89cbd3ec9..4832223f1500 100644
2030     --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
2031     +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
2032     @@ -2518,7 +2518,7 @@ static int mtk_remove(struct platform_device *pdev)
2033     }
2034    
2035     const struct of_device_id of_mtk_match[] = {
2036     - { .compatible = "mediatek,mt7623-eth" },
2037     + { .compatible = "mediatek,mt2701-eth" },
2038     {},
2039     };
2040     MODULE_DEVICE_TABLE(of, of_mtk_match);
2041     diff --git a/drivers/net/ethernet/mellanox/mlx4/catas.c b/drivers/net/ethernet/mellanox/mlx4/catas.c
2042     index c7e939945259..53daa6ca5d83 100644
2043     --- a/drivers/net/ethernet/mellanox/mlx4/catas.c
2044     +++ b/drivers/net/ethernet/mellanox/mlx4/catas.c
2045     @@ -158,7 +158,7 @@ static int mlx4_reset_slave(struct mlx4_dev *dev)
2046     return -ETIMEDOUT;
2047     }
2048    
2049     -static int mlx4_comm_internal_err(u32 slave_read)
2050     +int mlx4_comm_internal_err(u32 slave_read)
2051     {
2052     return (u32)COMM_CHAN_EVENT_INTERNAL_ERR ==
2053     (slave_read & (u32)COMM_CHAN_EVENT_INTERNAL_ERR) ? 1 : 0;
2054     diff --git a/drivers/net/ethernet/mellanox/mlx4/intf.c b/drivers/net/ethernet/mellanox/mlx4/intf.c
2055     index 0e8b7c44931f..8258d08acd8c 100644
2056     --- a/drivers/net/ethernet/mellanox/mlx4/intf.c
2057     +++ b/drivers/net/ethernet/mellanox/mlx4/intf.c
2058     @@ -222,6 +222,18 @@ void mlx4_unregister_device(struct mlx4_dev *dev)
2059     return;
2060    
2061     mlx4_stop_catas_poll(dev);
2062     + if (dev->persist->interface_state & MLX4_INTERFACE_STATE_DELETION &&
2063     + mlx4_is_slave(dev)) {
2064     + /* In mlx4_remove_one on a VF */
2065     + u32 slave_read =
2066     + swab32(readl(&mlx4_priv(dev)->mfunc.comm->slave_read));
2067     +
2068     + if (mlx4_comm_internal_err(slave_read)) {
2069     + mlx4_dbg(dev, "%s: comm channel is down, entering error state.\n",
2070     + __func__);
2071     + mlx4_enter_error_state(dev->persist);
2072     + }
2073     + }
2074     mutex_lock(&intf_mutex);
2075    
2076     list_for_each_entry(intf, &intf_list, list)
2077     diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4.h b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
2078     index 88ee7d8a5923..086920b615af 100644
2079     --- a/drivers/net/ethernet/mellanox/mlx4/mlx4.h
2080     +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4.h
2081     @@ -1220,6 +1220,7 @@ void mlx4_qp_event(struct mlx4_dev *dev, u32 qpn, int event_type);
2082     void mlx4_srq_event(struct mlx4_dev *dev, u32 srqn, int event_type);
2083    
2084     void mlx4_enter_error_state(struct mlx4_dev_persistent *persist);
2085     +int mlx4_comm_internal_err(u32 slave_read);
2086    
2087     int mlx4_SENSE_PORT(struct mlx4_dev *dev, int port,
2088     enum mlx4_port_type *type);
2089     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c b/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
2090     index 36fbc6b21a33..8cd7227fbdfc 100644
2091     --- a/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
2092     +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_fs.c
2093     @@ -1081,7 +1081,7 @@ int mlx5e_create_flow_steering(struct mlx5e_priv *priv)
2094     MLX5_FLOW_NAMESPACE_KERNEL);
2095    
2096     if (!priv->fs.ns)
2097     - return -EINVAL;
2098     + return -EOPNOTSUPP;
2099    
2100     err = mlx5e_arfs_create_tables(priv);
2101     if (err) {
2102     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
2103     index c7011ef4e351..a8966e6dbe1b 100644
2104     --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
2105     +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
2106     @@ -352,7 +352,7 @@ static int esw_create_legacy_fdb_table(struct mlx5_eswitch *esw, int nvports)
2107     root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_FDB);
2108     if (!root_ns) {
2109     esw_warn(dev, "Failed to get FDB flow namespace\n");
2110     - return -ENOMEM;
2111     + return -EOPNOTSUPP;
2112     }
2113    
2114     flow_group_in = mlx5_vzalloc(inlen);
2115     @@ -961,7 +961,7 @@ static int esw_vport_enable_egress_acl(struct mlx5_eswitch *esw,
2116     root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_ESW_EGRESS);
2117     if (!root_ns) {
2118     esw_warn(dev, "Failed to get E-Switch egress flow namespace\n");
2119     - return -EIO;
2120     + return -EOPNOTSUPP;
2121     }
2122    
2123     flow_group_in = mlx5_vzalloc(inlen);
2124     @@ -1078,7 +1078,7 @@ static int esw_vport_enable_ingress_acl(struct mlx5_eswitch *esw,
2125     root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_ESW_INGRESS);
2126     if (!root_ns) {
2127     esw_warn(dev, "Failed to get E-Switch ingress flow namespace\n");
2128     - return -EIO;
2129     + return -EOPNOTSUPP;
2130     }
2131    
2132     flow_group_in = mlx5_vzalloc(inlen);
2133     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
2134     index d239f5d0ea36..b08b9e2c6a76 100644
2135     --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
2136     +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
2137     @@ -414,6 +414,7 @@ static int esw_create_offloads_fdb_table(struct mlx5_eswitch *esw, int nvports)
2138     root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_FDB);
2139     if (!root_ns) {
2140     esw_warn(dev, "Failed to get FDB flow namespace\n");
2141     + err = -EOPNOTSUPP;
2142     goto ns_err;
2143     }
2144    
2145     @@ -520,7 +521,7 @@ static int esw_create_offloads_table(struct mlx5_eswitch *esw)
2146     ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_OFFLOADS);
2147     if (!ns) {
2148     esw_warn(esw->dev, "Failed to get offloads flow namespace\n");
2149     - return -ENOMEM;
2150     + return -EOPNOTSUPP;
2151     }
2152    
2153     ft_offloads = mlx5_create_flow_table(ns, 0, dev->priv.sriov.num_vfs + 2, 0);
2154     @@ -639,7 +640,7 @@ static int esw_offloads_start(struct mlx5_eswitch *esw)
2155     esw_warn(esw->dev, "Failed setting eswitch to offloads, err %d\n", err);
2156     err1 = mlx5_eswitch_enable_sriov(esw, num_vfs, SRIOV_LEGACY);
2157     if (err1)
2158     - esw_warn(esw->dev, "Failed setting eswitch back to legacy, err %d\n", err);
2159     + esw_warn(esw->dev, "Failed setting eswitch back to legacy, err %d\n", err1);
2160     }
2161     return err;
2162     }
2163     diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
2164     index 7e20e4bc4cc7..4de3c28b0547 100644
2165     --- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
2166     +++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
2167     @@ -1678,7 +1678,7 @@ static int create_anchor_flow_table(struct mlx5_flow_steering *steering)
2168     struct mlx5_flow_table *ft;
2169    
2170     ns = mlx5_get_flow_namespace(steering->dev, MLX5_FLOW_NAMESPACE_ANCHOR);
2171     - if (!ns)
2172     + if (WARN_ON(!ns))
2173     return -EINVAL;
2174     ft = mlx5_create_flow_table(ns, ANCHOR_PRIO, ANCHOR_SIZE, ANCHOR_LEVEL);
2175     if (IS_ERR(ft)) {
2176     diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
2177     index 862f18ed6022..510ff62584d6 100644
2178     --- a/drivers/net/ethernet/renesas/ravb_main.c
2179     +++ b/drivers/net/ethernet/renesas/ravb_main.c
2180     @@ -179,6 +179,49 @@ static struct mdiobb_ops bb_ops = {
2181     .get_mdio_data = ravb_get_mdio_data,
2182     };
2183    
2184     +/* Free TX skb function for AVB-IP */
2185     +static int ravb_tx_free(struct net_device *ndev, int q, bool free_txed_only)
2186     +{
2187     + struct ravb_private *priv = netdev_priv(ndev);
2188     + struct net_device_stats *stats = &priv->stats[q];
2189     + struct ravb_tx_desc *desc;
2190     + int free_num = 0;
2191     + int entry;
2192     + u32 size;
2193     +
2194     + for (; priv->cur_tx[q] - priv->dirty_tx[q] > 0; priv->dirty_tx[q]++) {
2195     + bool txed;
2196     +
2197     + entry = priv->dirty_tx[q] % (priv->num_tx_ring[q] *
2198     + NUM_TX_DESC);
2199     + desc = &priv->tx_ring[q][entry];
2200     + txed = desc->die_dt == DT_FEMPTY;
2201     + if (free_txed_only && !txed)
2202     + break;
2203     + /* Descriptor type must be checked before all other reads */
2204     + dma_rmb();
2205     + size = le16_to_cpu(desc->ds_tagl) & TX_DS;
2206     + /* Free the original skb. */
2207     + if (priv->tx_skb[q][entry / NUM_TX_DESC]) {
2208     + dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr),
2209     + size, DMA_TO_DEVICE);
2210     + /* Last packet descriptor? */
2211     + if (entry % NUM_TX_DESC == NUM_TX_DESC - 1) {
2212     + entry /= NUM_TX_DESC;
2213     + dev_kfree_skb_any(priv->tx_skb[q][entry]);
2214     + priv->tx_skb[q][entry] = NULL;
2215     + if (txed)
2216     + stats->tx_packets++;
2217     + }
2218     + free_num++;
2219     + }
2220     + if (txed)
2221     + stats->tx_bytes += size;
2222     + desc->die_dt = DT_EEMPTY;
2223     + }
2224     + return free_num;
2225     +}
2226     +
2227     /* Free skb's and DMA buffers for Ethernet AVB */
2228     static void ravb_ring_free(struct net_device *ndev, int q)
2229     {
2230     @@ -194,19 +237,21 @@ static void ravb_ring_free(struct net_device *ndev, int q)
2231     kfree(priv->rx_skb[q]);
2232     priv->rx_skb[q] = NULL;
2233    
2234     - /* Free TX skb ringbuffer */
2235     - if (priv->tx_skb[q]) {
2236     - for (i = 0; i < priv->num_tx_ring[q]; i++)
2237     - dev_kfree_skb(priv->tx_skb[q][i]);
2238     - }
2239     - kfree(priv->tx_skb[q]);
2240     - priv->tx_skb[q] = NULL;
2241     -
2242     /* Free aligned TX buffers */
2243     kfree(priv->tx_align[q]);
2244     priv->tx_align[q] = NULL;
2245    
2246     if (priv->rx_ring[q]) {
2247     + for (i = 0; i < priv->num_rx_ring[q]; i++) {
2248     + struct ravb_ex_rx_desc *desc = &priv->rx_ring[q][i];
2249     +
2250     + if (!dma_mapping_error(ndev->dev.parent,
2251     + le32_to_cpu(desc->dptr)))
2252     + dma_unmap_single(ndev->dev.parent,
2253     + le32_to_cpu(desc->dptr),
2254     + PKT_BUF_SZ,
2255     + DMA_FROM_DEVICE);
2256     + }
2257     ring_size = sizeof(struct ravb_ex_rx_desc) *
2258     (priv->num_rx_ring[q] + 1);
2259     dma_free_coherent(ndev->dev.parent, ring_size, priv->rx_ring[q],
2260     @@ -215,12 +260,20 @@ static void ravb_ring_free(struct net_device *ndev, int q)
2261     }
2262    
2263     if (priv->tx_ring[q]) {
2264     + ravb_tx_free(ndev, q, false);
2265     +
2266     ring_size = sizeof(struct ravb_tx_desc) *
2267     (priv->num_tx_ring[q] * NUM_TX_DESC + 1);
2268     dma_free_coherent(ndev->dev.parent, ring_size, priv->tx_ring[q],
2269     priv->tx_desc_dma[q]);
2270     priv->tx_ring[q] = NULL;
2271     }
2272     +
2273     + /* Free TX skb ringbuffer.
2274     + * SKBs are freed by ravb_tx_free() call above.
2275     + */
2276     + kfree(priv->tx_skb[q]);
2277     + priv->tx_skb[q] = NULL;
2278     }
2279    
2280     /* Format skb and descriptor buffer for Ethernet AVB */
2281     @@ -431,44 +484,6 @@ static int ravb_dmac_init(struct net_device *ndev)
2282     return 0;
2283     }
2284    
2285     -/* Free TX skb function for AVB-IP */
2286     -static int ravb_tx_free(struct net_device *ndev, int q)
2287     -{
2288     - struct ravb_private *priv = netdev_priv(ndev);
2289     - struct net_device_stats *stats = &priv->stats[q];
2290     - struct ravb_tx_desc *desc;
2291     - int free_num = 0;
2292     - int entry;
2293     - u32 size;
2294     -
2295     - for (; priv->cur_tx[q] - priv->dirty_tx[q] > 0; priv->dirty_tx[q]++) {
2296     - entry = priv->dirty_tx[q] % (priv->num_tx_ring[q] *
2297     - NUM_TX_DESC);
2298     - desc = &priv->tx_ring[q][entry];
2299     - if (desc->die_dt != DT_FEMPTY)
2300     - break;
2301     - /* Descriptor type must be checked before all other reads */
2302     - dma_rmb();
2303     - size = le16_to_cpu(desc->ds_tagl) & TX_DS;
2304     - /* Free the original skb. */
2305     - if (priv->tx_skb[q][entry / NUM_TX_DESC]) {
2306     - dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr),
2307     - size, DMA_TO_DEVICE);
2308     - /* Last packet descriptor? */
2309     - if (entry % NUM_TX_DESC == NUM_TX_DESC - 1) {
2310     - entry /= NUM_TX_DESC;
2311     - dev_kfree_skb_any(priv->tx_skb[q][entry]);
2312     - priv->tx_skb[q][entry] = NULL;
2313     - stats->tx_packets++;
2314     - }
2315     - free_num++;
2316     - }
2317     - stats->tx_bytes += size;
2318     - desc->die_dt = DT_EEMPTY;
2319     - }
2320     - return free_num;
2321     -}
2322     -
2323     static void ravb_get_tx_tstamp(struct net_device *ndev)
2324     {
2325     struct ravb_private *priv = netdev_priv(ndev);
2326     @@ -902,7 +917,7 @@ static int ravb_poll(struct napi_struct *napi, int budget)
2327     spin_lock_irqsave(&priv->lock, flags);
2328     /* Clear TX interrupt */
2329     ravb_write(ndev, ~mask, TIS);
2330     - ravb_tx_free(ndev, q);
2331     + ravb_tx_free(ndev, q, true);
2332     netif_wake_subqueue(ndev, q);
2333     mmiowb();
2334     spin_unlock_irqrestore(&priv->lock, flags);
2335     @@ -1571,7 +1586,8 @@ static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
2336    
2337     priv->cur_tx[q] += NUM_TX_DESC;
2338     if (priv->cur_tx[q] - priv->dirty_tx[q] >
2339     - (priv->num_tx_ring[q] - 1) * NUM_TX_DESC && !ravb_tx_free(ndev, q))
2340     + (priv->num_tx_ring[q] - 1) * NUM_TX_DESC &&
2341     + !ravb_tx_free(ndev, q, true))
2342     netif_stop_subqueue(ndev, q);
2343    
2344     exit:
2345     diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
2346     index 93dc10b10c09..aa02a03a6d8d 100644
2347     --- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c
2348     +++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
2349     @@ -100,6 +100,14 @@
2350     /* BUFFER_ALIGN(adr) calculates the number of bytes to the next alignment. */
2351     #define BUFFER_ALIGN(adr) ((ALIGNMENT - ((u32) adr)) % ALIGNMENT)
2352    
2353     +#ifdef __BIG_ENDIAN
2354     +#define xemaclite_readl ioread32be
2355     +#define xemaclite_writel iowrite32be
2356     +#else
2357     +#define xemaclite_readl ioread32
2358     +#define xemaclite_writel iowrite32
2359     +#endif
2360     +
2361     /**
2362     * struct net_local - Our private per device data
2363     * @ndev: instance of the network device
2364     @@ -156,15 +164,15 @@ static void xemaclite_enable_interrupts(struct net_local *drvdata)
2365     u32 reg_data;
2366    
2367     /* Enable the Tx interrupts for the first Buffer */
2368     - reg_data = __raw_readl(drvdata->base_addr + XEL_TSR_OFFSET);
2369     - __raw_writel(reg_data | XEL_TSR_XMIT_IE_MASK,
2370     - drvdata->base_addr + XEL_TSR_OFFSET);
2371     + reg_data = xemaclite_readl(drvdata->base_addr + XEL_TSR_OFFSET);
2372     + xemaclite_writel(reg_data | XEL_TSR_XMIT_IE_MASK,
2373     + drvdata->base_addr + XEL_TSR_OFFSET);
2374    
2375     /* Enable the Rx interrupts for the first buffer */
2376     - __raw_writel(XEL_RSR_RECV_IE_MASK, drvdata->base_addr + XEL_RSR_OFFSET);
2377     + xemaclite_writel(XEL_RSR_RECV_IE_MASK, drvdata->base_addr + XEL_RSR_OFFSET);
2378    
2379     /* Enable the Global Interrupt Enable */
2380     - __raw_writel(XEL_GIER_GIE_MASK, drvdata->base_addr + XEL_GIER_OFFSET);
2381     + xemaclite_writel(XEL_GIER_GIE_MASK, drvdata->base_addr + XEL_GIER_OFFSET);
2382     }
2383    
2384     /**
2385     @@ -179,17 +187,17 @@ static void xemaclite_disable_interrupts(struct net_local *drvdata)
2386     u32 reg_data;
2387    
2388     /* Disable the Global Interrupt Enable */
2389     - __raw_writel(XEL_GIER_GIE_MASK, drvdata->base_addr + XEL_GIER_OFFSET);
2390     + xemaclite_writel(XEL_GIER_GIE_MASK, drvdata->base_addr + XEL_GIER_OFFSET);
2391    
2392     /* Disable the Tx interrupts for the first buffer */
2393     - reg_data = __raw_readl(drvdata->base_addr + XEL_TSR_OFFSET);
2394     - __raw_writel(reg_data & (~XEL_TSR_XMIT_IE_MASK),
2395     - drvdata->base_addr + XEL_TSR_OFFSET);
2396     + reg_data = xemaclite_readl(drvdata->base_addr + XEL_TSR_OFFSET);
2397     + xemaclite_writel(reg_data & (~XEL_TSR_XMIT_IE_MASK),
2398     + drvdata->base_addr + XEL_TSR_OFFSET);
2399    
2400     /* Disable the Rx interrupts for the first buffer */
2401     - reg_data = __raw_readl(drvdata->base_addr + XEL_RSR_OFFSET);
2402     - __raw_writel(reg_data & (~XEL_RSR_RECV_IE_MASK),
2403     - drvdata->base_addr + XEL_RSR_OFFSET);
2404     + reg_data = xemaclite_readl(drvdata->base_addr + XEL_RSR_OFFSET);
2405     + xemaclite_writel(reg_data & (~XEL_RSR_RECV_IE_MASK),
2406     + drvdata->base_addr + XEL_RSR_OFFSET);
2407     }
2408    
2409     /**
2410     @@ -321,7 +329,7 @@ static int xemaclite_send_data(struct net_local *drvdata, u8 *data,
2411     byte_count = ETH_FRAME_LEN;
2412    
2413     /* Check if the expected buffer is available */
2414     - reg_data = __raw_readl(addr + XEL_TSR_OFFSET);
2415     + reg_data = xemaclite_readl(addr + XEL_TSR_OFFSET);
2416     if ((reg_data & (XEL_TSR_XMIT_BUSY_MASK |
2417     XEL_TSR_XMIT_ACTIVE_MASK)) == 0) {
2418    
2419     @@ -334,7 +342,7 @@ static int xemaclite_send_data(struct net_local *drvdata, u8 *data,
2420    
2421     addr = (void __iomem __force *)((u32 __force)addr ^
2422     XEL_BUFFER_OFFSET);
2423     - reg_data = __raw_readl(addr + XEL_TSR_OFFSET);
2424     + reg_data = xemaclite_readl(addr + XEL_TSR_OFFSET);
2425    
2426     if ((reg_data & (XEL_TSR_XMIT_BUSY_MASK |
2427     XEL_TSR_XMIT_ACTIVE_MASK)) != 0)
2428     @@ -345,16 +353,16 @@ static int xemaclite_send_data(struct net_local *drvdata, u8 *data,
2429     /* Write the frame to the buffer */
2430     xemaclite_aligned_write(data, (u32 __force *) addr, byte_count);
2431    
2432     - __raw_writel((byte_count & XEL_TPLR_LENGTH_MASK),
2433     - addr + XEL_TPLR_OFFSET);
2434     + xemaclite_writel((byte_count & XEL_TPLR_LENGTH_MASK),
2435     + addr + XEL_TPLR_OFFSET);
2436    
2437     /* Update the Tx Status Register to indicate that there is a
2438     * frame to send. Set the XEL_TSR_XMIT_ACTIVE_MASK flag which
2439     * is used by the interrupt handler to check whether a frame
2440     * has been transmitted */
2441     - reg_data = __raw_readl(addr + XEL_TSR_OFFSET);
2442     + reg_data = xemaclite_readl(addr + XEL_TSR_OFFSET);
2443     reg_data |= (XEL_TSR_XMIT_BUSY_MASK | XEL_TSR_XMIT_ACTIVE_MASK);
2444     - __raw_writel(reg_data, addr + XEL_TSR_OFFSET);
2445     + xemaclite_writel(reg_data, addr + XEL_TSR_OFFSET);
2446    
2447     return 0;
2448     }
2449     @@ -369,7 +377,7 @@ static int xemaclite_send_data(struct net_local *drvdata, u8 *data,
2450     *
2451     * Return: Total number of bytes received
2452     */
2453     -static u16 xemaclite_recv_data(struct net_local *drvdata, u8 *data)
2454     +static u16 xemaclite_recv_data(struct net_local *drvdata, u8 *data, int maxlen)
2455     {
2456     void __iomem *addr;
2457     u16 length, proto_type;
2458     @@ -379,7 +387,7 @@ static u16 xemaclite_recv_data(struct net_local *drvdata, u8 *data)
2459     addr = (drvdata->base_addr + drvdata->next_rx_buf_to_use);
2460    
2461     /* Verify which buffer has valid data */
2462     - reg_data = __raw_readl(addr + XEL_RSR_OFFSET);
2463     + reg_data = xemaclite_readl(addr + XEL_RSR_OFFSET);
2464    
2465     if ((reg_data & XEL_RSR_RECV_DONE_MASK) == XEL_RSR_RECV_DONE_MASK) {
2466     if (drvdata->rx_ping_pong != 0)
2467     @@ -396,27 +404,28 @@ static u16 xemaclite_recv_data(struct net_local *drvdata, u8 *data)
2468     return 0; /* No data was available */
2469    
2470     /* Verify that buffer has valid data */
2471     - reg_data = __raw_readl(addr + XEL_RSR_OFFSET);
2472     + reg_data = xemaclite_readl(addr + XEL_RSR_OFFSET);
2473     if ((reg_data & XEL_RSR_RECV_DONE_MASK) !=
2474     XEL_RSR_RECV_DONE_MASK)
2475     return 0; /* No data was available */
2476     }
2477    
2478     /* Get the protocol type of the ethernet frame that arrived */
2479     - proto_type = ((ntohl(__raw_readl(addr + XEL_HEADER_OFFSET +
2480     + proto_type = ((ntohl(xemaclite_readl(addr + XEL_HEADER_OFFSET +
2481     XEL_RXBUFF_OFFSET)) >> XEL_HEADER_SHIFT) &
2482     XEL_RPLR_LENGTH_MASK);
2483    
2484     /* Check if received ethernet frame is a raw ethernet frame
2485     * or an IP packet or an ARP packet */
2486     - if (proto_type > (ETH_FRAME_LEN + ETH_FCS_LEN)) {
2487     + if (proto_type > ETH_DATA_LEN) {
2488    
2489     if (proto_type == ETH_P_IP) {
2490     - length = ((ntohl(__raw_readl(addr +
2491     + length = ((ntohl(xemaclite_readl(addr +
2492     XEL_HEADER_IP_LENGTH_OFFSET +
2493     XEL_RXBUFF_OFFSET)) >>
2494     XEL_HEADER_SHIFT) &
2495     XEL_RPLR_LENGTH_MASK);
2496     + length = min_t(u16, length, ETH_DATA_LEN);
2497     length += ETH_HLEN + ETH_FCS_LEN;
2498    
2499     } else if (proto_type == ETH_P_ARP)
2500     @@ -429,14 +438,17 @@ static u16 xemaclite_recv_data(struct net_local *drvdata, u8 *data)
2501     /* Use the length in the frame, plus the header and trailer */
2502     length = proto_type + ETH_HLEN + ETH_FCS_LEN;
2503    
2504     + if (WARN_ON(length > maxlen))
2505     + length = maxlen;
2506     +
2507     /* Read from the EmacLite device */
2508     xemaclite_aligned_read((u32 __force *) (addr + XEL_RXBUFF_OFFSET),
2509     data, length);
2510    
2511     /* Acknowledge the frame */
2512     - reg_data = __raw_readl(addr + XEL_RSR_OFFSET);
2513     + reg_data = xemaclite_readl(addr + XEL_RSR_OFFSET);
2514     reg_data &= ~XEL_RSR_RECV_DONE_MASK;
2515     - __raw_writel(reg_data, addr + XEL_RSR_OFFSET);
2516     + xemaclite_writel(reg_data, addr + XEL_RSR_OFFSET);
2517    
2518     return length;
2519     }
2520     @@ -463,14 +475,14 @@ static void xemaclite_update_address(struct net_local *drvdata,
2521    
2522     xemaclite_aligned_write(address_ptr, (u32 __force *) addr, ETH_ALEN);
2523    
2524     - __raw_writel(ETH_ALEN, addr + XEL_TPLR_OFFSET);
2525     + xemaclite_writel(ETH_ALEN, addr + XEL_TPLR_OFFSET);
2526    
2527     /* Update the MAC address in the EmacLite */
2528     - reg_data = __raw_readl(addr + XEL_TSR_OFFSET);
2529     - __raw_writel(reg_data | XEL_TSR_PROG_MAC_ADDR, addr + XEL_TSR_OFFSET);
2530     + reg_data = xemaclite_readl(addr + XEL_TSR_OFFSET);
2531     + xemaclite_writel(reg_data | XEL_TSR_PROG_MAC_ADDR, addr + XEL_TSR_OFFSET);
2532    
2533     /* Wait for EmacLite to finish with the MAC address update */
2534     - while ((__raw_readl(addr + XEL_TSR_OFFSET) &
2535     + while ((xemaclite_readl(addr + XEL_TSR_OFFSET) &
2536     XEL_TSR_PROG_MAC_ADDR) != 0)
2537     ;
2538     }
2539     @@ -603,7 +615,7 @@ static void xemaclite_rx_handler(struct net_device *dev)
2540    
2541     skb_reserve(skb, 2);
2542    
2543     - len = xemaclite_recv_data(lp, (u8 *) skb->data);
2544     + len = xemaclite_recv_data(lp, (u8 *) skb->data, len);
2545    
2546     if (!len) {
2547     dev->stats.rx_errors++;
2548     @@ -640,32 +652,32 @@ static irqreturn_t xemaclite_interrupt(int irq, void *dev_id)
2549     u32 tx_status;
2550    
2551     /* Check if there is Rx Data available */
2552     - if ((__raw_readl(base_addr + XEL_RSR_OFFSET) &
2553     + if ((xemaclite_readl(base_addr + XEL_RSR_OFFSET) &
2554     XEL_RSR_RECV_DONE_MASK) ||
2555     - (__raw_readl(base_addr + XEL_BUFFER_OFFSET + XEL_RSR_OFFSET)
2556     + (xemaclite_readl(base_addr + XEL_BUFFER_OFFSET + XEL_RSR_OFFSET)
2557     & XEL_RSR_RECV_DONE_MASK))
2558    
2559     xemaclite_rx_handler(dev);
2560    
2561     /* Check if the Transmission for the first buffer is completed */
2562     - tx_status = __raw_readl(base_addr + XEL_TSR_OFFSET);
2563     + tx_status = xemaclite_readl(base_addr + XEL_TSR_OFFSET);
2564     if (((tx_status & XEL_TSR_XMIT_BUSY_MASK) == 0) &&
2565     (tx_status & XEL_TSR_XMIT_ACTIVE_MASK) != 0) {
2566    
2567     tx_status &= ~XEL_TSR_XMIT_ACTIVE_MASK;
2568     - __raw_writel(tx_status, base_addr + XEL_TSR_OFFSET);
2569     + xemaclite_writel(tx_status, base_addr + XEL_TSR_OFFSET);
2570    
2571     tx_complete = true;
2572     }
2573    
2574     /* Check if the Transmission for the second buffer is completed */
2575     - tx_status = __raw_readl(base_addr + XEL_BUFFER_OFFSET + XEL_TSR_OFFSET);
2576     + tx_status = xemaclite_readl(base_addr + XEL_BUFFER_OFFSET + XEL_TSR_OFFSET);
2577     if (((tx_status & XEL_TSR_XMIT_BUSY_MASK) == 0) &&
2578     (tx_status & XEL_TSR_XMIT_ACTIVE_MASK) != 0) {
2579    
2580     tx_status &= ~XEL_TSR_XMIT_ACTIVE_MASK;
2581     - __raw_writel(tx_status, base_addr + XEL_BUFFER_OFFSET +
2582     - XEL_TSR_OFFSET);
2583     + xemaclite_writel(tx_status, base_addr + XEL_BUFFER_OFFSET +
2584     + XEL_TSR_OFFSET);
2585    
2586     tx_complete = true;
2587     }
2588     @@ -698,7 +710,7 @@ static int xemaclite_mdio_wait(struct net_local *lp)
2589     /* wait for the MDIO interface to not be busy or timeout
2590     after some time.
2591     */
2592     - while (__raw_readl(lp->base_addr + XEL_MDIOCTRL_OFFSET) &
2593     + while (xemaclite_readl(lp->base_addr + XEL_MDIOCTRL_OFFSET) &
2594     XEL_MDIOCTRL_MDIOSTS_MASK) {
2595     if (time_before_eq(end, jiffies)) {
2596     WARN_ON(1);
2597     @@ -734,17 +746,17 @@ static int xemaclite_mdio_read(struct mii_bus *bus, int phy_id, int reg)
2598     * MDIO Address register. Set the Status bit in the MDIO Control
2599     * register to start a MDIO read transaction.
2600     */
2601     - ctrl_reg = __raw_readl(lp->base_addr + XEL_MDIOCTRL_OFFSET);
2602     - __raw_writel(XEL_MDIOADDR_OP_MASK |
2603     - ((phy_id << XEL_MDIOADDR_PHYADR_SHIFT) | reg),
2604     - lp->base_addr + XEL_MDIOADDR_OFFSET);
2605     - __raw_writel(ctrl_reg | XEL_MDIOCTRL_MDIOSTS_MASK,
2606     - lp->base_addr + XEL_MDIOCTRL_OFFSET);
2607     + ctrl_reg = xemaclite_readl(lp->base_addr + XEL_MDIOCTRL_OFFSET);
2608     + xemaclite_writel(XEL_MDIOADDR_OP_MASK |
2609     + ((phy_id << XEL_MDIOADDR_PHYADR_SHIFT) | reg),
2610     + lp->base_addr + XEL_MDIOADDR_OFFSET);
2611     + xemaclite_writel(ctrl_reg | XEL_MDIOCTRL_MDIOSTS_MASK,
2612     + lp->base_addr + XEL_MDIOCTRL_OFFSET);
2613    
2614     if (xemaclite_mdio_wait(lp))
2615     return -ETIMEDOUT;
2616    
2617     - rc = __raw_readl(lp->base_addr + XEL_MDIORD_OFFSET);
2618     + rc = xemaclite_readl(lp->base_addr + XEL_MDIORD_OFFSET);
2619    
2620     dev_dbg(&lp->ndev->dev,
2621     "xemaclite_mdio_read(phy_id=%i, reg=%x) == %x\n",
2622     @@ -781,13 +793,13 @@ static int xemaclite_mdio_write(struct mii_bus *bus, int phy_id, int reg,
2623     * Data register. Finally, set the Status bit in the MDIO Control
2624     * register to start a MDIO write transaction.
2625     */
2626     - ctrl_reg = __raw_readl(lp->base_addr + XEL_MDIOCTRL_OFFSET);
2627     - __raw_writel(~XEL_MDIOADDR_OP_MASK &
2628     - ((phy_id << XEL_MDIOADDR_PHYADR_SHIFT) | reg),
2629     - lp->base_addr + XEL_MDIOADDR_OFFSET);
2630     - __raw_writel(val, lp->base_addr + XEL_MDIOWR_OFFSET);
2631     - __raw_writel(ctrl_reg | XEL_MDIOCTRL_MDIOSTS_MASK,
2632     - lp->base_addr + XEL_MDIOCTRL_OFFSET);
2633     + ctrl_reg = xemaclite_readl(lp->base_addr + XEL_MDIOCTRL_OFFSET);
2634     + xemaclite_writel(~XEL_MDIOADDR_OP_MASK &
2635     + ((phy_id << XEL_MDIOADDR_PHYADR_SHIFT) | reg),
2636     + lp->base_addr + XEL_MDIOADDR_OFFSET);
2637     + xemaclite_writel(val, lp->base_addr + XEL_MDIOWR_OFFSET);
2638     + xemaclite_writel(ctrl_reg | XEL_MDIOCTRL_MDIOSTS_MASK,
2639     + lp->base_addr + XEL_MDIOCTRL_OFFSET);
2640    
2641     return 0;
2642     }
2643     @@ -834,8 +846,8 @@ static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev)
2644     /* Enable the MDIO bus by asserting the enable bit in MDIO Control
2645     * register.
2646     */
2647     - __raw_writel(XEL_MDIOCTRL_MDIOEN_MASK,
2648     - lp->base_addr + XEL_MDIOCTRL_OFFSET);
2649     + xemaclite_writel(XEL_MDIOCTRL_MDIOEN_MASK,
2650     + lp->base_addr + XEL_MDIOCTRL_OFFSET);
2651    
2652     bus = mdiobus_alloc();
2653     if (!bus) {
2654     @@ -1140,8 +1152,8 @@ static int xemaclite_of_probe(struct platform_device *ofdev)
2655     }
2656    
2657     /* Clear the Tx CSR's in case this is a restart */
2658     - __raw_writel(0, lp->base_addr + XEL_TSR_OFFSET);
2659     - __raw_writel(0, lp->base_addr + XEL_BUFFER_OFFSET + XEL_TSR_OFFSET);
2660     + xemaclite_writel(0, lp->base_addr + XEL_TSR_OFFSET);
2661     + xemaclite_writel(0, lp->base_addr + XEL_BUFFER_OFFSET + XEL_TSR_OFFSET);
2662    
2663     /* Set the MAC address in the EmacLite device */
2664     xemaclite_update_address(lp, ndev->dev_addr);
2665     diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
2666     index 97e0cbca0a08..cebde074d196 100644
2667     --- a/drivers/net/gtp.c
2668     +++ b/drivers/net/gtp.c
2669     @@ -1372,3 +1372,4 @@ MODULE_LICENSE("GPL");
2670     MODULE_AUTHOR("Harald Welte <hwelte@sysmocom.de>");
2671     MODULE_DESCRIPTION("Interface driver for GTP encapsulated traffic");
2672     MODULE_ALIAS_RTNL_LINK("gtp");
2673     +MODULE_ALIAS_GENL_FAMILY("gtp");
2674     diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c
2675     index 1dfe2304daa7..e0a6b1a0ca88 100644
2676     --- a/drivers/net/hamradio/mkiss.c
2677     +++ b/drivers/net/hamradio/mkiss.c
2678     @@ -648,8 +648,8 @@ static void ax_setup(struct net_device *dev)
2679     {
2680     /* Finish setting up the DEVICE info. */
2681     dev->mtu = AX_MTU;
2682     - dev->hard_header_len = 0;
2683     - dev->addr_len = 0;
2684     + dev->hard_header_len = AX25_MAX_HEADER_LEN;
2685     + dev->addr_len = AX25_ADDR_LEN;
2686     dev->type = ARPHRD_AX25;
2687     dev->tx_queue_len = 10;
2688     dev->header_ops = &ax25_header_ops;
2689     diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
2690     index ea92d524d5a8..fab56c9350cf 100644
2691     --- a/drivers/net/phy/micrel.c
2692     +++ b/drivers/net/phy/micrel.c
2693     @@ -1014,6 +1014,20 @@ static struct phy_driver ksphy_driver[] = {
2694     .get_stats = kszphy_get_stats,
2695     .suspend = genphy_suspend,
2696     .resume = genphy_resume,
2697     +}, {
2698     + .phy_id = PHY_ID_KSZ8795,
2699     + .phy_id_mask = MICREL_PHY_ID_MASK,
2700     + .name = "Micrel KSZ8795",
2701     + .features = (SUPPORTED_Pause | SUPPORTED_Asym_Pause),
2702     + .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
2703     + .config_init = kszphy_config_init,
2704     + .config_aneg = ksz8873mll_config_aneg,
2705     + .read_status = ksz8873mll_read_status,
2706     + .get_sset_count = kszphy_get_sset_count,
2707     + .get_strings = kszphy_get_strings,
2708     + .get_stats = kszphy_get_stats,
2709     + .suspend = genphy_suspend,
2710     + .resume = genphy_resume,
2711     } };
2712    
2713     module_phy_driver(ksphy_driver);
2714     diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
2715     index c4ceb082e970..14d57d0d1c04 100644
2716     --- a/drivers/net/phy/phy_device.c
2717     +++ b/drivers/net/phy/phy_device.c
2718     @@ -860,6 +860,7 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
2719     struct module *ndev_owner = dev->dev.parent->driver->owner;
2720     struct mii_bus *bus = phydev->mdio.bus;
2721     struct device *d = &phydev->mdio.dev;
2722     + bool using_genphy = false;
2723     int err;
2724    
2725     /* For Ethernet device drivers that register their own MDIO bus, we
2726     @@ -885,12 +886,22 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
2727     d->driver =
2728     &genphy_driver[GENPHY_DRV_1G].mdiodrv.driver;
2729    
2730     + using_genphy = true;
2731     + }
2732     +
2733     + if (!try_module_get(d->driver->owner)) {
2734     + dev_err(&dev->dev, "failed to get the device driver module\n");
2735     + err = -EIO;
2736     + goto error_put_device;
2737     + }
2738     +
2739     + if (using_genphy) {
2740     err = d->driver->probe(d);
2741     if (err >= 0)
2742     err = device_bind_driver(d);
2743    
2744     if (err)
2745     - goto error;
2746     + goto error_module_put;
2747     }
2748    
2749     if (phydev->attached_dev) {
2750     @@ -926,6 +937,13 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
2751     return err;
2752    
2753     error:
2754     + /* phy_detach() does all of the cleanup below */
2755     + phy_detach(phydev);
2756     + return err;
2757     +
2758     +error_module_put:
2759     + module_put(d->driver->owner);
2760     +error_put_device:
2761     put_device(d);
2762     if (ndev_owner != bus->owner)
2763     module_put(bus->owner);
2764     @@ -987,6 +1005,8 @@ void phy_detach(struct phy_device *phydev)
2765     phydev->attached_dev = NULL;
2766     phy_suspend(phydev);
2767    
2768     + module_put(phydev->mdio.dev.driver->owner);
2769     +
2770     /* If the device had no specific driver before (i.e. - it
2771     * was using the generic driver), we unbind the device
2772     * from the generic driver so that there's a chance a
2773     diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
2774     index 90b426c5ffce..afb953a258cd 100644
2775     --- a/drivers/net/usb/r8152.c
2776     +++ b/drivers/net/usb/r8152.c
2777     @@ -32,7 +32,7 @@
2778     #define NETNEXT_VERSION "08"
2779    
2780     /* Information for net */
2781     -#define NET_VERSION "7"
2782     +#define NET_VERSION "8"
2783    
2784     #define DRIVER_VERSION "v1." NETNEXT_VERSION "." NET_VERSION
2785     #define DRIVER_AUTHOR "Realtek linux nic maintainers <nic_swsd@realtek.com>"
2786     @@ -1936,6 +1936,9 @@ static int r8152_poll(struct napi_struct *napi, int budget)
2787     napi_complete(napi);
2788     if (!list_empty(&tp->rx_done))
2789     napi_schedule(napi);
2790     + else if (!skb_queue_empty(&tp->tx_queue) &&
2791     + !list_empty(&tp->tx_free))
2792     + napi_schedule(napi);
2793     }
2794    
2795     return work_done;
2796     @@ -3155,10 +3158,13 @@ static void set_carrier(struct r8152 *tp)
2797     if (!netif_carrier_ok(netdev)) {
2798     tp->rtl_ops.enable(tp);
2799     set_bit(RTL8152_SET_RX_MODE, &tp->flags);
2800     + netif_stop_queue(netdev);
2801     napi_disable(&tp->napi);
2802     netif_carrier_on(netdev);
2803     rtl_start_rx(tp);
2804     napi_enable(&tp->napi);
2805     + netif_wake_queue(netdev);
2806     + netif_info(tp, link, netdev, "carrier on\n");
2807     }
2808     } else {
2809     if (netif_carrier_ok(netdev)) {
2810     @@ -3166,6 +3172,7 @@ static void set_carrier(struct r8152 *tp)
2811     napi_disable(&tp->napi);
2812     tp->rtl_ops.disable(tp);
2813     napi_enable(&tp->napi);
2814     + netif_info(tp, link, netdev, "carrier off\n");
2815     }
2816     }
2817     }
2818     @@ -3515,12 +3522,12 @@ static int rtl8152_pre_reset(struct usb_interface *intf)
2819     if (!netif_running(netdev))
2820     return 0;
2821    
2822     + netif_stop_queue(netdev);
2823     napi_disable(&tp->napi);
2824     clear_bit(WORK_ENABLE, &tp->flags);
2825     usb_kill_urb(tp->intr_urb);
2826     cancel_delayed_work_sync(&tp->schedule);
2827     if (netif_carrier_ok(netdev)) {
2828     - netif_stop_queue(netdev);
2829     mutex_lock(&tp->control);
2830     tp->rtl_ops.disable(tp);
2831     mutex_unlock(&tp->control);
2832     @@ -3545,12 +3552,17 @@ static int rtl8152_post_reset(struct usb_interface *intf)
2833     if (netif_carrier_ok(netdev)) {
2834     mutex_lock(&tp->control);
2835     tp->rtl_ops.enable(tp);
2836     + rtl_start_rx(tp);
2837     rtl8152_set_rx_mode(netdev);
2838     mutex_unlock(&tp->control);
2839     - netif_wake_queue(netdev);
2840     }
2841    
2842     napi_enable(&tp->napi);
2843     + netif_wake_queue(netdev);
2844     + usb_submit_urb(tp->intr_urb, GFP_KERNEL);
2845     +
2846     + if (!list_empty(&tp->rx_done))
2847     + napi_schedule(&tp->napi);
2848    
2849     return 0;
2850     }
2851     @@ -3583,10 +3595,15 @@ static int rtl8152_rumtime_suspend(struct r8152 *tp)
2852     struct net_device *netdev = tp->netdev;
2853     int ret = 0;
2854    
2855     + set_bit(SELECTIVE_SUSPEND, &tp->flags);
2856     + smp_mb__after_atomic();
2857     +
2858     if (netif_running(netdev) && test_bit(WORK_ENABLE, &tp->flags)) {
2859     u32 rcr = 0;
2860    
2861     if (delay_autosuspend(tp)) {
2862     + clear_bit(SELECTIVE_SUSPEND, &tp->flags);
2863     + smp_mb__after_atomic();
2864     ret = -EBUSY;
2865     goto out1;
2866     }
2867     @@ -3603,6 +3620,8 @@ static int rtl8152_rumtime_suspend(struct r8152 *tp)
2868     if (!(ocp_data & RXFIFO_EMPTY)) {
2869     rxdy_gated_en(tp, false);
2870     ocp_write_dword(tp, MCU_TYPE_PLA, PLA_RCR, rcr);
2871     + clear_bit(SELECTIVE_SUSPEND, &tp->flags);
2872     + smp_mb__after_atomic();
2873     ret = -EBUSY;
2874     goto out1;
2875     }
2876     @@ -3622,8 +3641,6 @@ static int rtl8152_rumtime_suspend(struct r8152 *tp)
2877     }
2878     }
2879    
2880     - set_bit(SELECTIVE_SUSPEND, &tp->flags);
2881     -
2882     out1:
2883     return ret;
2884     }
2885     @@ -3679,12 +3696,15 @@ static int rtl8152_resume(struct usb_interface *intf)
2886     if (netif_running(tp->netdev) && tp->netdev->flags & IFF_UP) {
2887     if (test_bit(SELECTIVE_SUSPEND, &tp->flags)) {
2888     tp->rtl_ops.autosuspend_en(tp, false);
2889     - clear_bit(SELECTIVE_SUSPEND, &tp->flags);
2890     napi_disable(&tp->napi);
2891     set_bit(WORK_ENABLE, &tp->flags);
2892     if (netif_carrier_ok(tp->netdev))
2893     rtl_start_rx(tp);
2894     napi_enable(&tp->napi);
2895     + clear_bit(SELECTIVE_SUSPEND, &tp->flags);
2896     + smp_mb__after_atomic();
2897     + if (!list_empty(&tp->rx_done))
2898     + napi_schedule(&tp->napi);
2899     } else {
2900     tp->rtl_ops.up(tp);
2901     netif_carrier_off(tp->netdev);
2902     diff --git a/drivers/net/usb/sierra_net.c b/drivers/net/usb/sierra_net.c
2903     index a251588762ec..0b5a84c9022c 100644
2904     --- a/drivers/net/usb/sierra_net.c
2905     +++ b/drivers/net/usb/sierra_net.c
2906     @@ -73,8 +73,6 @@ static atomic_t iface_counter = ATOMIC_INIT(0);
2907     /* Private data structure */
2908     struct sierra_net_data {
2909    
2910     - u8 ethr_hdr_tmpl[ETH_HLEN]; /* ethernet header template for rx'd pkts */
2911     -
2912     u16 link_up; /* air link up or down */
2913     u8 tx_hdr_template[4]; /* part of HIP hdr for tx'd packets */
2914    
2915     @@ -122,6 +120,7 @@ struct param {
2916    
2917     /* LSI Protocol types */
2918     #define SIERRA_NET_PROTOCOL_UMTS 0x01
2919     +#define SIERRA_NET_PROTOCOL_UMTS_DS 0x04
2920     /* LSI Coverage */
2921     #define SIERRA_NET_COVERAGE_NONE 0x00
2922     #define SIERRA_NET_COVERAGE_NOPACKET 0x01
2923     @@ -129,7 +128,8 @@ struct param {
2924     /* LSI Session */
2925     #define SIERRA_NET_SESSION_IDLE 0x00
2926     /* LSI Link types */
2927     -#define SIERRA_NET_AS_LINK_TYPE_IPv4 0x00
2928     +#define SIERRA_NET_AS_LINK_TYPE_IPV4 0x00
2929     +#define SIERRA_NET_AS_LINK_TYPE_IPV6 0x02
2930    
2931     struct lsi_umts {
2932     u8 protocol;
2933     @@ -137,9 +137,14 @@ struct lsi_umts {
2934     __be16 length;
2935     /* eventually use a union for the rest - assume umts for now */
2936     u8 coverage;
2937     - u8 unused2[41];
2938     + u8 network_len; /* network name len */
2939     + u8 network[40]; /* network name (UCS2, bigendian) */
2940     u8 session_state;
2941     u8 unused3[33];
2942     +} __packed;
2943     +
2944     +struct lsi_umts_single {
2945     + struct lsi_umts lsi;
2946     u8 link_type;
2947     u8 pdp_addr_len; /* NW-supplied PDP address len */
2948     u8 pdp_addr[16]; /* NW-supplied PDP address (bigendian)) */
2949     @@ -158,10 +163,31 @@ struct lsi_umts {
2950     u8 reserved[8];
2951     } __packed;
2952    
2953     +struct lsi_umts_dual {
2954     + struct lsi_umts lsi;
2955     + u8 pdp_addr4_len; /* NW-supplied PDP IPv4 address len */
2956     + u8 pdp_addr4[4]; /* NW-supplied PDP IPv4 address (bigendian)) */
2957     + u8 pdp_addr6_len; /* NW-supplied PDP IPv6 address len */
2958     + u8 pdp_addr6[16]; /* NW-supplied PDP IPv6 address (bigendian)) */
2959     + u8 unused4[23];
2960     + u8 dns1_addr4_len; /* NW-supplied 1st DNS v4 address len (bigendian) */
2961     + u8 dns1_addr4[4]; /* NW-supplied 1st DNS v4 address */
2962     + u8 dns1_addr6_len; /* NW-supplied 1st DNS v6 address len */
2963     + u8 dns1_addr6[16]; /* NW-supplied 1st DNS v6 address (bigendian)*/
2964     + u8 dns2_addr4_len; /* NW-supplied 2nd DNS v4 address len (bigendian) */
2965     + u8 dns2_addr4[4]; /* NW-supplied 2nd DNS v4 address */
2966     + u8 dns2_addr6_len; /* NW-supplied 2nd DNS v6 address len */
2967     + u8 dns2_addr6[16]; /* NW-supplied 2nd DNS v6 address (bigendian)*/
2968     + u8 unused5[68];
2969     +} __packed;
2970     +
2971     #define SIERRA_NET_LSI_COMMON_LEN 4
2972     -#define SIERRA_NET_LSI_UMTS_LEN (sizeof(struct lsi_umts))
2973     +#define SIERRA_NET_LSI_UMTS_LEN (sizeof(struct lsi_umts_single))
2974     #define SIERRA_NET_LSI_UMTS_STATUS_LEN \
2975     (SIERRA_NET_LSI_UMTS_LEN - SIERRA_NET_LSI_COMMON_LEN)
2976     +#define SIERRA_NET_LSI_UMTS_DS_LEN (sizeof(struct lsi_umts_dual))
2977     +#define SIERRA_NET_LSI_UMTS_DS_STATUS_LEN \
2978     + (SIERRA_NET_LSI_UMTS_DS_LEN - SIERRA_NET_LSI_COMMON_LEN)
2979    
2980     /* Forward definitions */
2981     static void sierra_sync_timer(unsigned long syncdata);
2982     @@ -191,10 +217,11 @@ static inline void sierra_net_set_private(struct usbnet *dev,
2983     dev->data[0] = (unsigned long)priv;
2984     }
2985    
2986     -/* is packet IPv4 */
2987     +/* is packet IPv4/IPv6 */
2988     static inline int is_ip(struct sk_buff *skb)
2989     {
2990     - return skb->protocol == cpu_to_be16(ETH_P_IP);
2991     + return skb->protocol == cpu_to_be16(ETH_P_IP) ||
2992     + skb->protocol == cpu_to_be16(ETH_P_IPV6);
2993     }
2994    
2995     /*
2996     @@ -350,49 +377,54 @@ static inline int sierra_net_is_valid_addrlen(u8 len)
2997     static int sierra_net_parse_lsi(struct usbnet *dev, char *data, int datalen)
2998     {
2999     struct lsi_umts *lsi = (struct lsi_umts *)data;
3000     + u32 expected_length;
3001    
3002     - if (datalen < sizeof(struct lsi_umts)) {
3003     - netdev_err(dev->net, "%s: Data length %d, exp %Zu\n",
3004     - __func__, datalen,
3005     - sizeof(struct lsi_umts));
3006     + if (datalen < sizeof(struct lsi_umts_single)) {
3007     + netdev_err(dev->net, "%s: Data length %d, exp >= %Zu\n",
3008     + __func__, datalen, sizeof(struct lsi_umts_single));
3009     return -1;
3010     }
3011    
3012     - if (lsi->length != cpu_to_be16(SIERRA_NET_LSI_UMTS_STATUS_LEN)) {
3013     - netdev_err(dev->net, "%s: LSI_UMTS_STATUS_LEN %d, exp %u\n",
3014     - __func__, be16_to_cpu(lsi->length),
3015     - (u32)SIERRA_NET_LSI_UMTS_STATUS_LEN);
3016     - return -1;
3017     + /* Validate the session state */
3018     + if (lsi->session_state == SIERRA_NET_SESSION_IDLE) {
3019     + netdev_err(dev->net, "Session idle, 0x%02x\n",
3020     + lsi->session_state);
3021     + return 0;
3022     }
3023    
3024     /* Validate the protocol - only support UMTS for now */
3025     - if (lsi->protocol != SIERRA_NET_PROTOCOL_UMTS) {
3026     + if (lsi->protocol == SIERRA_NET_PROTOCOL_UMTS) {
3027     + struct lsi_umts_single *single = (struct lsi_umts_single *)lsi;
3028     +
3029     + /* Validate the link type */
3030     + if (single->link_type != SIERRA_NET_AS_LINK_TYPE_IPV4 &&
3031     + single->link_type != SIERRA_NET_AS_LINK_TYPE_IPV6) {
3032     + netdev_err(dev->net, "Link type unsupported: 0x%02x\n",
3033     + single->link_type);
3034     + return -1;
3035     + }
3036     + expected_length = SIERRA_NET_LSI_UMTS_STATUS_LEN;
3037     + } else if (lsi->protocol == SIERRA_NET_PROTOCOL_UMTS_DS) {
3038     + expected_length = SIERRA_NET_LSI_UMTS_DS_STATUS_LEN;
3039     + } else {
3040     netdev_err(dev->net, "Protocol unsupported, 0x%02x\n",
3041     - lsi->protocol);
3042     + lsi->protocol);
3043     return -1;
3044     }
3045    
3046     - /* Validate the link type */
3047     - if (lsi->link_type != SIERRA_NET_AS_LINK_TYPE_IPv4) {
3048     - netdev_err(dev->net, "Link type unsupported: 0x%02x\n",
3049     - lsi->link_type);
3050     + if (be16_to_cpu(lsi->length) != expected_length) {
3051     + netdev_err(dev->net, "%s: LSI_UMTS_STATUS_LEN %d, exp %u\n",
3052     + __func__, be16_to_cpu(lsi->length), expected_length);
3053     return -1;
3054     }
3055    
3056     /* Validate the coverage */
3057     - if (lsi->coverage == SIERRA_NET_COVERAGE_NONE
3058     - || lsi->coverage == SIERRA_NET_COVERAGE_NOPACKET) {
3059     + if (lsi->coverage == SIERRA_NET_COVERAGE_NONE ||
3060     + lsi->coverage == SIERRA_NET_COVERAGE_NOPACKET) {
3061     netdev_err(dev->net, "No coverage, 0x%02x\n", lsi->coverage);
3062     return 0;
3063     }
3064    
3065     - /* Validate the session state */
3066     - if (lsi->session_state == SIERRA_NET_SESSION_IDLE) {
3067     - netdev_err(dev->net, "Session idle, 0x%02x\n",
3068     - lsi->session_state);
3069     - return 0;
3070     - }
3071     -
3072     /* Set link_sense true */
3073     return 1;
3074     }
3075     @@ -662,7 +694,6 @@ static int sierra_net_bind(struct usbnet *dev, struct usb_interface *intf)
3076     u8 numendpoints;
3077     u16 fwattr = 0;
3078     int status;
3079     - struct ethhdr *eth;
3080     struct sierra_net_data *priv;
3081     static const u8 sync_tmplate[sizeof(priv->sync_msg)] = {
3082     0x00, 0x00, SIERRA_NET_HIP_MSYNC_ID, 0x00};
3083     @@ -700,11 +731,6 @@ static int sierra_net_bind(struct usbnet *dev, struct usb_interface *intf)
3084     dev->net->dev_addr[ETH_ALEN-2] = atomic_inc_return(&iface_counter);
3085     dev->net->dev_addr[ETH_ALEN-1] = ifacenum;
3086    
3087     - /* we will have to manufacture ethernet headers, prepare template */
3088     - eth = (struct ethhdr *)priv->ethr_hdr_tmpl;
3089     - memcpy(&eth->h_dest, dev->net->dev_addr, ETH_ALEN);
3090     - eth->h_proto = cpu_to_be16(ETH_P_IP);
3091     -
3092     /* prepare shutdown message template */
3093     memcpy(priv->shdwn_msg, shdwn_tmplate, sizeof(priv->shdwn_msg));
3094     /* set context index initially to 0 - prepares tx hdr template */
3095     @@ -833,9 +859,14 @@ static int sierra_net_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
3096    
3097     skb_pull(skb, hh.hdrlen);
3098    
3099     - /* We are going to accept this packet, prepare it */
3100     - memcpy(skb->data, sierra_net_get_private(dev)->ethr_hdr_tmpl,
3101     - ETH_HLEN);
3102     + /* We are going to accept this packet, prepare it.
3103     + * In case protocol is IPv6, keep it, otherwise force IPv4.
3104     + */
3105     + skb_reset_mac_header(skb);
3106     + if (eth_hdr(skb)->h_proto != cpu_to_be16(ETH_P_IPV6))
3107     + eth_hdr(skb)->h_proto = cpu_to_be16(ETH_P_IP);
3108     + eth_zero_addr(eth_hdr(skb)->h_source);
3109     + memcpy(eth_hdr(skb)->h_dest, dev->net->dev_addr, ETH_ALEN);
3110    
3111     /* Last packet in batch handled by usbnet */
3112     if (hh.payload_len.word == skb->len)
3113     diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c
3114     index 005ef5d17a19..ca8ddc3fb19e 100644
3115     --- a/drivers/nvme/target/rdma.c
3116     +++ b/drivers/nvme/target/rdma.c
3117     @@ -438,6 +438,10 @@ static int nvmet_rdma_post_recv(struct nvmet_rdma_device *ndev,
3118     {
3119     struct ib_recv_wr *bad_wr;
3120    
3121     + ib_dma_sync_single_for_device(ndev->device,
3122     + cmd->sge[0].addr, cmd->sge[0].length,
3123     + DMA_FROM_DEVICE);
3124     +
3125     if (ndev->srq)
3126     return ib_post_srq_recv(ndev->srq, &cmd->wr, &bad_wr);
3127     return ib_post_recv(cmd->queue->cm_id->qp, &cmd->wr, &bad_wr);
3128     @@ -538,6 +542,11 @@ static void nvmet_rdma_queue_response(struct nvmet_req *req)
3129     first_wr = &rsp->send_wr;
3130    
3131     nvmet_rdma_post_recv(rsp->queue->dev, rsp->cmd);
3132     +
3133     + ib_dma_sync_single_for_device(rsp->queue->dev->device,
3134     + rsp->send_sge.addr, rsp->send_sge.length,
3135     + DMA_TO_DEVICE);
3136     +
3137     if (ib_post_send(cm_id->qp, first_wr, &bad_wr)) {
3138     pr_err("sending cmd response failed\n");
3139     nvmet_rdma_release_rsp(rsp);
3140     @@ -698,6 +707,14 @@ static void nvmet_rdma_handle_command(struct nvmet_rdma_queue *queue,
3141     cmd->n_rdma = 0;
3142     cmd->req.port = queue->port;
3143    
3144     +
3145     + ib_dma_sync_single_for_cpu(queue->dev->device,
3146     + cmd->cmd->sge[0].addr, cmd->cmd->sge[0].length,
3147     + DMA_FROM_DEVICE);
3148     + ib_dma_sync_single_for_cpu(queue->dev->device,
3149     + cmd->send_sge.addr, cmd->send_sge.length,
3150     + DMA_TO_DEVICE);
3151     +
3152     if (!nvmet_req_init(&cmd->req, &queue->nvme_cq,
3153     &queue->nvme_sq, &nvmet_rdma_ops))
3154     return;
3155     diff --git a/drivers/parport/parport_gsc.c b/drivers/parport/parport_gsc.c
3156     index 6e3a60c78873..50f3bb0dd1f1 100644
3157     --- a/drivers/parport/parport_gsc.c
3158     +++ b/drivers/parport/parport_gsc.c
3159     @@ -293,7 +293,7 @@ struct parport *parport_gsc_probe_port(unsigned long base,
3160     p->irq = PARPORT_IRQ_NONE;
3161     }
3162     if (p->irq != PARPORT_IRQ_NONE) {
3163     - printk(", irq %d", p->irq);
3164     + pr_cont(", irq %d", p->irq);
3165    
3166     if (p->dma == PARPORT_DMA_AUTO) {
3167     p->dma = PARPORT_DMA_NONE;
3168     @@ -303,8 +303,8 @@ struct parport *parport_gsc_probe_port(unsigned long base,
3169     is mandatory (see above) */
3170     p->dma = PARPORT_DMA_NONE;
3171    
3172     - printk(" [");
3173     -#define printmode(x) {if(p->modes&PARPORT_MODE_##x){printk("%s%s",f?",":"",#x);f++;}}
3174     + pr_cont(" [");
3175     +#define printmode(x) {if(p->modes&PARPORT_MODE_##x){pr_cont("%s%s",f?",":"",#x);f++;}}
3176     {
3177     int f = 0;
3178     printmode(PCSPP);
3179     @@ -315,7 +315,7 @@ struct parport *parport_gsc_probe_port(unsigned long base,
3180     // printmode(DMA);
3181     }
3182     #undef printmode
3183     - printk("]\n");
3184     + pr_cont("]\n");
3185    
3186     if (p->irq != PARPORT_IRQ_NONE) {
3187     if (request_irq (p->irq, parport_irq_handler,
3188     diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
3189     index 579c4946dc6e..e7d4048e81f2 100644
3190     --- a/drivers/pci/pci.c
3191     +++ b/drivers/pci/pci.c
3192     @@ -2142,7 +2142,8 @@ bool pci_dev_keep_suspended(struct pci_dev *pci_dev)
3193    
3194     if (!pm_runtime_suspended(dev)
3195     || pci_target_state(pci_dev) != pci_dev->current_state
3196     - || platform_pci_need_resume(pci_dev))
3197     + || platform_pci_need_resume(pci_dev)
3198     + || (pci_dev->dev_flags & PCI_DEV_FLAGS_NEEDS_RESUME))
3199     return false;
3200    
3201     /*
3202     diff --git a/drivers/pinctrl/berlin/berlin-bg4ct.c b/drivers/pinctrl/berlin/berlin-bg4ct.c
3203     index 09172043d589..c617ec49e9ed 100644
3204     --- a/drivers/pinctrl/berlin/berlin-bg4ct.c
3205     +++ b/drivers/pinctrl/berlin/berlin-bg4ct.c
3206     @@ -217,7 +217,7 @@ static const struct berlin_desc_group berlin4ct_soc_pinctrl_groups[] = {
3207     BERLIN_PINCTRL_GROUP("SCRD0_CRD_PRES", 0xc, 0x3, 0x15,
3208     BERLIN_PINCTRL_FUNCTION(0x0, "gpio"), /* GPIO20 */
3209     BERLIN_PINCTRL_FUNCTION(0x1, "scrd0"), /* crd pres */
3210     - BERLIN_PINCTRL_FUNCTION(0x1, "sd1a")), /* DAT3 */
3211     + BERLIN_PINCTRL_FUNCTION(0x3, "sd1a")), /* DAT3 */
3212     BERLIN_PINCTRL_GROUP("SPI1_SS0n", 0xc, 0x3, 0x18,
3213     BERLIN_PINCTRL_FUNCTION(0x0, "spi1"), /* SS0n */
3214     BERLIN_PINCTRL_FUNCTION(0x1, "gpio"), /* GPIO37 */
3215     diff --git a/drivers/pinctrl/intel/pinctrl-baytrail.c b/drivers/pinctrl/intel/pinctrl-baytrail.c
3216     index 583ae3f38fc0..5419de8e20b1 100644
3217     --- a/drivers/pinctrl/intel/pinctrl-baytrail.c
3218     +++ b/drivers/pinctrl/intel/pinctrl-baytrail.c
3219     @@ -1250,10 +1250,12 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,
3220     debounce = readl(db_reg);
3221     debounce &= ~BYT_DEBOUNCE_PULSE_MASK;
3222    
3223     + if (arg)
3224     + conf |= BYT_DEBOUNCE_EN;
3225     + else
3226     + conf &= ~BYT_DEBOUNCE_EN;
3227     +
3228     switch (arg) {
3229     - case 0:
3230     - conf &= BYT_DEBOUNCE_EN;
3231     - break;
3232     case 375:
3233     debounce |= BYT_DEBOUNCE_PULSE_375US;
3234     break;
3235     @@ -1276,7 +1278,9 @@ static int byt_pin_config_set(struct pinctrl_dev *pctl_dev,
3236     debounce |= BYT_DEBOUNCE_PULSE_24MS;
3237     break;
3238     default:
3239     - ret = -EINVAL;
3240     + if (arg)
3241     + ret = -EINVAL;
3242     + break;
3243     }
3244    
3245     if (!ret)
3246     diff --git a/drivers/staging/media/cec/cec-adap.c b/drivers/staging/media/cec/cec-adap.c
3247     index 611e07b78bfe..057c9b5ab1e5 100644
3248     --- a/drivers/staging/media/cec/cec-adap.c
3249     +++ b/drivers/staging/media/cec/cec-adap.c
3250     @@ -1017,7 +1017,7 @@ static int cec_config_thread_func(void *arg)
3251     las->log_addr[i] = CEC_LOG_ADDR_INVALID;
3252     if (last_la == CEC_LOG_ADDR_INVALID ||
3253     last_la == CEC_LOG_ADDR_UNREGISTERED ||
3254     - !(last_la & type2mask[type]))
3255     + !((1 << last_la) & type2mask[type]))
3256     last_la = la_list[0];
3257    
3258     err = cec_config_log_addr(adap, i, last_la);
3259     diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
3260     index 358feca54945..261ed2ca28f9 100644
3261     --- a/drivers/usb/musb/musb_core.c
3262     +++ b/drivers/usb/musb/musb_core.c
3263     @@ -1909,6 +1909,14 @@ static void musb_pm_runtime_check_session(struct musb *musb)
3264     static void musb_irq_work(struct work_struct *data)
3265     {
3266     struct musb *musb = container_of(data, struct musb, irq_work.work);
3267     + int error;
3268     +
3269     + error = pm_runtime_get_sync(musb->controller);
3270     + if (error < 0) {
3271     + dev_err(musb->controller, "Could not enable: %i\n", error);
3272     +
3273     + return;
3274     + }
3275    
3276     musb_pm_runtime_check_session(musb);
3277    
3278     @@ -1916,6 +1924,9 @@ static void musb_irq_work(struct work_struct *data)
3279     musb->xceiv_old_state = musb->xceiv->otg->state;
3280     sysfs_notify(&musb->controller->kobj, NULL, "mode");
3281     }
3282     +
3283     + pm_runtime_mark_last_busy(musb->controller);
3284     + pm_runtime_put_autosuspend(musb->controller);
3285     }
3286    
3287     static void musb_recover_from_babble(struct musb *musb)
3288     diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c
3289     index c8823578a1b2..79ddcb05d126 100644
3290     --- a/drivers/vfio/vfio_iommu_spapr_tce.c
3291     +++ b/drivers/vfio/vfio_iommu_spapr_tce.c
3292     @@ -1246,6 +1246,8 @@ static void tce_iommu_release_ownership_ddw(struct tce_container *container,
3293     static long tce_iommu_take_ownership_ddw(struct tce_container *container,
3294     struct iommu_table_group *table_group)
3295     {
3296     + long i, ret = 0;
3297     +
3298     if (!table_group->ops->create_table || !table_group->ops->set_window ||
3299     !table_group->ops->release_ownership) {
3300     WARN_ON_ONCE(1);
3301     @@ -1254,7 +1256,27 @@ static long tce_iommu_take_ownership_ddw(struct tce_container *container,
3302    
3303     table_group->ops->take_ownership(table_group);
3304    
3305     + /* Set all windows to the new group */
3306     + for (i = 0; i < IOMMU_TABLE_GROUP_MAX_TABLES; ++i) {
3307     + struct iommu_table *tbl = container->tables[i];
3308     +
3309     + if (!tbl)
3310     + continue;
3311     +
3312     + ret = table_group->ops->set_window(table_group, i, tbl);
3313     + if (ret)
3314     + goto release_exit;
3315     + }
3316     +
3317     return 0;
3318     +
3319     +release_exit:
3320     + for (i = 0; i < IOMMU_TABLE_GROUP_MAX_TABLES; ++i)
3321     + table_group->ops->unset_window(table_group, i);
3322     +
3323     + table_group->ops->release_ownership(table_group);
3324     +
3325     + return ret;
3326     }
3327    
3328     static int tce_iommu_attach_group(void *iommu_data,
3329     diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
3330     index a504e2e003da..e3fad302b4fb 100644
3331     --- a/drivers/vhost/vsock.c
3332     +++ b/drivers/vhost/vsock.c
3333     @@ -368,6 +368,7 @@ static void vhost_vsock_handle_rx_kick(struct vhost_work *work)
3334    
3335     static int vhost_vsock_start(struct vhost_vsock *vsock)
3336     {
3337     + struct vhost_virtqueue *vq;
3338     size_t i;
3339     int ret;
3340    
3341     @@ -378,19 +379,20 @@ static int vhost_vsock_start(struct vhost_vsock *vsock)
3342     goto err;
3343    
3344     for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) {
3345     - struct vhost_virtqueue *vq = &vsock->vqs[i];
3346     + vq = &vsock->vqs[i];
3347    
3348     mutex_lock(&vq->mutex);
3349    
3350     if (!vhost_vq_access_ok(vq)) {
3351     ret = -EFAULT;
3352     - mutex_unlock(&vq->mutex);
3353     goto err_vq;
3354     }
3355    
3356     if (!vq->private_data) {
3357     vq->private_data = vsock;
3358     - vhost_vq_init_access(vq);
3359     + ret = vhost_vq_init_access(vq);
3360     + if (ret)
3361     + goto err_vq;
3362     }
3363    
3364     mutex_unlock(&vq->mutex);
3365     @@ -400,8 +402,11 @@ static int vhost_vsock_start(struct vhost_vsock *vsock)
3366     return 0;
3367    
3368     err_vq:
3369     + vq->private_data = NULL;
3370     + mutex_unlock(&vq->mutex);
3371     +
3372     for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) {
3373     - struct vhost_virtqueue *vq = &vsock->vqs[i];
3374     + vq = &vsock->vqs[i];
3375    
3376     mutex_lock(&vq->mutex);
3377     vq->private_data = NULL;
3378     diff --git a/fs/fscache/cookie.c b/fs/fscache/cookie.c
3379     index 4304072161aa..40d61077bead 100644
3380     --- a/fs/fscache/cookie.c
3381     +++ b/fs/fscache/cookie.c
3382     @@ -542,6 +542,7 @@ void __fscache_disable_cookie(struct fscache_cookie *cookie, bool invalidate)
3383     hlist_for_each_entry(object, &cookie->backing_objects, cookie_link) {
3384     if (invalidate)
3385     set_bit(FSCACHE_OBJECT_RETIRED, &object->flags);
3386     + clear_bit(FSCACHE_OBJECT_PENDING_WRITE, &object->flags);
3387     fscache_raise_event(object, FSCACHE_OBJECT_EV_KILL);
3388     }
3389     } else {
3390     @@ -560,6 +561,10 @@ void __fscache_disable_cookie(struct fscache_cookie *cookie, bool invalidate)
3391     wait_on_atomic_t(&cookie->n_active, fscache_wait_atomic_t,
3392     TASK_UNINTERRUPTIBLE);
3393    
3394     + /* Make sure any pending writes are cancelled. */
3395     + if (cookie->def->type != FSCACHE_COOKIE_TYPE_INDEX)
3396     + fscache_invalidate_writes(cookie);
3397     +
3398     /* Reset the cookie state if it wasn't relinquished */
3399     if (!test_bit(FSCACHE_COOKIE_RELINQUISHED, &cookie->flags)) {
3400     atomic_inc(&cookie->n_active);
3401     diff --git a/fs/fscache/netfs.c b/fs/fscache/netfs.c
3402     index 9b28649df3a1..a8aa00be4444 100644
3403     --- a/fs/fscache/netfs.c
3404     +++ b/fs/fscache/netfs.c
3405     @@ -48,6 +48,7 @@ int __fscache_register_netfs(struct fscache_netfs *netfs)
3406     cookie->flags = 1 << FSCACHE_COOKIE_ENABLED;
3407    
3408     spin_lock_init(&cookie->lock);
3409     + spin_lock_init(&cookie->stores_lock);
3410     INIT_HLIST_HEAD(&cookie->backing_objects);
3411    
3412     /* check the netfs type is not already present */
3413     diff --git a/fs/fscache/object.c b/fs/fscache/object.c
3414     index 9e792e30f4db..7a182c87f378 100644
3415     --- a/fs/fscache/object.c
3416     +++ b/fs/fscache/object.c
3417     @@ -30,6 +30,7 @@ static const struct fscache_state *fscache_look_up_object(struct fscache_object
3418     static const struct fscache_state *fscache_object_available(struct fscache_object *, int);
3419     static const struct fscache_state *fscache_parent_ready(struct fscache_object *, int);
3420     static const struct fscache_state *fscache_update_object(struct fscache_object *, int);
3421     +static const struct fscache_state *fscache_object_dead(struct fscache_object *, int);
3422    
3423     #define __STATE_NAME(n) fscache_osm_##n
3424     #define STATE(n) (&__STATE_NAME(n))
3425     @@ -91,7 +92,7 @@ static WORK_STATE(LOOKUP_FAILURE, "LCFL", fscache_lookup_failure);
3426     static WORK_STATE(KILL_OBJECT, "KILL", fscache_kill_object);
3427     static WORK_STATE(KILL_DEPENDENTS, "KDEP", fscache_kill_dependents);
3428     static WORK_STATE(DROP_OBJECT, "DROP", fscache_drop_object);
3429     -static WORK_STATE(OBJECT_DEAD, "DEAD", (void*)2UL);
3430     +static WORK_STATE(OBJECT_DEAD, "DEAD", fscache_object_dead);
3431    
3432     static WAIT_STATE(WAIT_FOR_INIT, "?INI",
3433     TRANSIT_TO(INIT_OBJECT, 1 << FSCACHE_OBJECT_EV_NEW_CHILD));
3434     @@ -229,6 +230,10 @@ static void fscache_object_sm_dispatcher(struct fscache_object *object)
3435     event = -1;
3436     if (new_state == NO_TRANSIT) {
3437     _debug("{OBJ%x} %s notrans", object->debug_id, state->name);
3438     + if (unlikely(state == STATE(OBJECT_DEAD))) {
3439     + _leave(" [dead]");
3440     + return;
3441     + }
3442     fscache_enqueue_object(object);
3443     event_mask = object->oob_event_mask;
3444     goto unmask_events;
3445     @@ -239,7 +244,7 @@ static void fscache_object_sm_dispatcher(struct fscache_object *object)
3446     object->state = state = new_state;
3447    
3448     if (state->work) {
3449     - if (unlikely(state->work == ((void *)2UL))) {
3450     + if (unlikely(state == STATE(OBJECT_DEAD))) {
3451     _leave(" [dead]");
3452     return;
3453     }
3454     @@ -645,6 +650,12 @@ static const struct fscache_state *fscache_kill_object(struct fscache_object *ob
3455     fscache_mark_object_dead(object);
3456     object->oob_event_mask = 0;
3457    
3458     + if (test_bit(FSCACHE_OBJECT_RETIRED, &object->flags)) {
3459     + /* Reject any new read/write ops and abort any that are pending. */
3460     + clear_bit(FSCACHE_OBJECT_PENDING_WRITE, &object->flags);
3461     + fscache_cancel_all_ops(object);
3462     + }
3463     +
3464     if (list_empty(&object->dependents) &&
3465     object->n_ops == 0 &&
3466     object->n_children == 0)
3467     @@ -1077,3 +1088,20 @@ void fscache_object_mark_killed(struct fscache_object *object,
3468     }
3469     }
3470     EXPORT_SYMBOL(fscache_object_mark_killed);
3471     +
3472     +/*
3473     + * The object is dead. We can get here if an object gets queued by an event
3474     + * that would lead to its death (such as EV_KILL) when the dispatcher is
3475     + * already running (and so can be requeued) but hasn't yet cleared the event
3476     + * mask.
3477     + */
3478     +static const struct fscache_state *fscache_object_dead(struct fscache_object *object,
3479     + int event)
3480     +{
3481     + if (!test_and_set_bit(FSCACHE_OBJECT_RUN_AFTER_DEAD,
3482     + &object->flags))
3483     + return NO_TRANSIT;
3484     +
3485     + WARN(true, "FS-Cache object redispatched after death");
3486     + return NO_TRANSIT;
3487     +}
3488     diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
3489     index 133f322573b5..6528724ad6e5 100644
3490     --- a/fs/gfs2/glock.c
3491     +++ b/fs/gfs2/glock.c
3492     @@ -1425,26 +1425,32 @@ static struct shrinker glock_shrinker = {
3493     * @sdp: the filesystem
3494     * @bucket: the bucket
3495     *
3496     + * Note that the function can be called multiple times on the same
3497     + * object. So the user must ensure that the function can cope with
3498     + * that.
3499     */
3500    
3501     static void glock_hash_walk(glock_examiner examiner, const struct gfs2_sbd *sdp)
3502     {
3503     struct gfs2_glock *gl;
3504     - struct rhash_head *pos;
3505     - const struct bucket_table *tbl;
3506     - int i;
3507     + struct rhashtable_iter iter;
3508    
3509     - rcu_read_lock();
3510     - tbl = rht_dereference_rcu(gl_hash_table.tbl, &gl_hash_table);
3511     - for (i = 0; i < tbl->size; i++) {
3512     - rht_for_each_entry_rcu(gl, pos, tbl, i, gl_node) {
3513     + rhashtable_walk_enter(&gl_hash_table, &iter);
3514     +
3515     + do {
3516     + gl = ERR_PTR(rhashtable_walk_start(&iter));
3517     + if (gl)
3518     + continue;
3519     +
3520     + while ((gl = rhashtable_walk_next(&iter)) && !IS_ERR(gl))
3521     if ((gl->gl_name.ln_sbd == sdp) &&
3522     lockref_get_not_dead(&gl->gl_lockref))
3523     examiner(gl);
3524     - }
3525     - }
3526     - rcu_read_unlock();
3527     - cond_resched();
3528     +
3529     + rhashtable_walk_stop(&iter);
3530     + } while (cond_resched(), gl == ERR_PTR(-EAGAIN));
3531     +
3532     + rhashtable_walk_exit(&iter);
3533     }
3534    
3535     /**
3536     diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
3537     index 0959c9661662..92671914067f 100644
3538     --- a/fs/nfs/nfs4state.c
3539     +++ b/fs/nfs/nfs4state.c
3540     @@ -1079,6 +1079,7 @@ static void nfs_increment_seqid(int status, struct nfs_seqid *seqid)
3541     case -NFS4ERR_BADXDR:
3542     case -NFS4ERR_RESOURCE:
3543     case -NFS4ERR_NOFILEHANDLE:
3544     + case -NFS4ERR_MOVED:
3545     /* Non-seqid mutating errors */
3546     return;
3547     };
3548     diff --git a/fs/proc/base.c b/fs/proc/base.c
3549     index ca651ac00660..e67fec3c9856 100644
3550     --- a/fs/proc/base.c
3551     +++ b/fs/proc/base.c
3552     @@ -3181,6 +3181,8 @@ int proc_pid_readdir(struct file *file, struct dir_context *ctx)
3553     iter.tgid += 1, iter = next_tgid(ns, iter)) {
3554     char name[PROC_NUMBUF];
3555     int len;
3556     +
3557     + cond_resched();
3558     if (!has_pid_permissions(ns, iter.task, 2))
3559     continue;
3560    
3561     diff --git a/fs/romfs/super.c b/fs/romfs/super.c
3562     index d0f8a38dfafa..0186fe6d39f3 100644
3563     --- a/fs/romfs/super.c
3564     +++ b/fs/romfs/super.c
3565     @@ -74,6 +74,7 @@
3566     #include <linux/highmem.h>
3567     #include <linux/pagemap.h>
3568     #include <linux/uaccess.h>
3569     +#include <linux/major.h>
3570     #include "internal.h"
3571    
3572     static struct kmem_cache *romfs_inode_cachep;
3573     @@ -416,7 +417,22 @@ static void romfs_destroy_inode(struct inode *inode)
3574     static int romfs_statfs(struct dentry *dentry, struct kstatfs *buf)
3575     {
3576     struct super_block *sb = dentry->d_sb;
3577     - u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
3578     + u64 id = 0;
3579     +
3580     + /* When calling huge_encode_dev(),
3581     + * use sb->s_bdev->bd_dev when,
3582     + * - CONFIG_ROMFS_ON_BLOCK defined
3583     + * use sb->s_dev when,
3584     + * - CONFIG_ROMFS_ON_BLOCK undefined and
3585     + * - CONFIG_ROMFS_ON_MTD defined
3586     + * leave id as 0 when,
3587     + * - CONFIG_ROMFS_ON_BLOCK undefined and
3588     + * - CONFIG_ROMFS_ON_MTD undefined
3589     + */
3590     + if (sb->s_bdev)
3591     + id = huge_encode_dev(sb->s_bdev->bd_dev);
3592     + else if (sb->s_dev)
3593     + id = huge_encode_dev(sb->s_dev);
3594    
3595     buf->f_type = ROMFS_MAGIC;
3596     buf->f_namelen = ROMFS_MAXFN;
3597     @@ -489,6 +505,11 @@ static int romfs_fill_super(struct super_block *sb, void *data, int silent)
3598     sb->s_flags |= MS_RDONLY | MS_NOATIME;
3599     sb->s_op = &romfs_super_ops;
3600    
3601     +#ifdef CONFIG_ROMFS_ON_MTD
3602     + /* Use same dev ID from the underlying mtdblock device */
3603     + if (sb->s_mtd)
3604     + sb->s_dev = MKDEV(MTD_BLOCK_MAJOR, sb->s_mtd->index);
3605     +#endif
3606     /* read the image superblock and check it */
3607     rsb = kmalloc(512, GFP_KERNEL);
3608     if (!rsb)
3609     diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
3610     index 85959d8324df..b86054cc41db 100644
3611     --- a/fs/userfaultfd.c
3612     +++ b/fs/userfaultfd.c
3613     @@ -63,6 +63,7 @@ struct userfaultfd_wait_queue {
3614     struct uffd_msg msg;
3615     wait_queue_t wq;
3616     struct userfaultfd_ctx *ctx;
3617     + bool waken;
3618     };
3619    
3620     struct userfaultfd_wake_range {
3621     @@ -86,6 +87,12 @@ static int userfaultfd_wake_function(wait_queue_t *wq, unsigned mode,
3622     if (len && (start > uwq->msg.arg.pagefault.address ||
3623     start + len <= uwq->msg.arg.pagefault.address))
3624     goto out;
3625     + WRITE_ONCE(uwq->waken, true);
3626     + /*
3627     + * The implicit smp_mb__before_spinlock in try_to_wake_up()
3628     + * renders uwq->waken visible to other CPUs before the task is
3629     + * waken.
3630     + */
3631     ret = wake_up_state(wq->private, mode);
3632     if (ret)
3633     /*
3634     @@ -264,6 +271,7 @@ int handle_userfault(struct fault_env *fe, unsigned long reason)
3635     struct userfaultfd_wait_queue uwq;
3636     int ret;
3637     bool must_wait, return_to_userland;
3638     + long blocking_state;
3639    
3640     BUG_ON(!rwsem_is_locked(&mm->mmap_sem));
3641    
3642     @@ -333,10 +341,13 @@ int handle_userfault(struct fault_env *fe, unsigned long reason)
3643     uwq.wq.private = current;
3644     uwq.msg = userfault_msg(fe->address, fe->flags, reason);
3645     uwq.ctx = ctx;
3646     + uwq.waken = false;
3647    
3648     return_to_userland =
3649     (fe->flags & (FAULT_FLAG_USER|FAULT_FLAG_KILLABLE)) ==
3650     (FAULT_FLAG_USER|FAULT_FLAG_KILLABLE);
3651     + blocking_state = return_to_userland ? TASK_INTERRUPTIBLE :
3652     + TASK_KILLABLE;
3653    
3654     spin_lock(&ctx->fault_pending_wqh.lock);
3655     /*
3656     @@ -349,8 +360,7 @@ int handle_userfault(struct fault_env *fe, unsigned long reason)
3657     * following the spin_unlock to happen before the list_add in
3658     * __add_wait_queue.
3659     */
3660     - set_current_state(return_to_userland ? TASK_INTERRUPTIBLE :
3661     - TASK_KILLABLE);
3662     + set_current_state(blocking_state);
3663     spin_unlock(&ctx->fault_pending_wqh.lock);
3664    
3665     must_wait = userfaultfd_must_wait(ctx, fe->address, fe->flags, reason);
3666     @@ -362,6 +372,29 @@ int handle_userfault(struct fault_env *fe, unsigned long reason)
3667     wake_up_poll(&ctx->fd_wqh, POLLIN);
3668     schedule();
3669     ret |= VM_FAULT_MAJOR;
3670     +
3671     + /*
3672     + * False wakeups can orginate even from rwsem before
3673     + * up_read() however userfaults will wait either for a
3674     + * targeted wakeup on the specific uwq waitqueue from
3675     + * wake_userfault() or for signals or for uffd
3676     + * release.
3677     + */
3678     + while (!READ_ONCE(uwq.waken)) {
3679     + /*
3680     + * This needs the full smp_store_mb()
3681     + * guarantee as the state write must be
3682     + * visible to other CPUs before reading
3683     + * uwq.waken from other CPUs.
3684     + */
3685     + set_current_state(blocking_state);
3686     + if (READ_ONCE(uwq.waken) ||
3687     + READ_ONCE(ctx->released) ||
3688     + (return_to_userland ? signal_pending(current) :
3689     + fatal_signal_pending(current)))
3690     + break;
3691     + schedule();
3692     + }
3693     }
3694    
3695     __set_current_state(TASK_RUNNING);
3696     diff --git a/include/drm/drmP.h b/include/drm/drmP.h
3697     index e9fb2e802feb..0c4f9c67c221 100644
3698     --- a/include/drm/drmP.h
3699     +++ b/include/drm/drmP.h
3700     @@ -776,6 +776,7 @@ struct drm_device {
3701     struct drm_minor *control; /**< Control node */
3702     struct drm_minor *primary; /**< Primary node */
3703     struct drm_minor *render; /**< Render node */
3704     + bool registered;
3705    
3706     /* currently active master for this device. Protected by master_mutex */
3707     struct drm_master *master;
3708     diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
3709     index ac9d7d8e0e43..d8bb8d151825 100644
3710     --- a/include/drm/drm_connector.h
3711     +++ b/include/drm/drm_connector.h
3712     @@ -345,6 +345,8 @@ struct drm_connector_funcs {
3713     * core drm connector interfaces. Everything added from this callback
3714     * should be unregistered in the early_unregister callback.
3715     *
3716     + * This is called while holding drm_connector->mutex.
3717     + *
3718     * Returns:
3719     *
3720     * 0 on success, or a negative error code on failure.
3721     @@ -359,6 +361,8 @@ struct drm_connector_funcs {
3722     * late_register(). It is called from drm_connector_unregister(),
3723     * early in the driver unload sequence to disable userspace access
3724     * before data structures are torndown.
3725     + *
3726     + * This is called while holding drm_connector->mutex.
3727     */
3728     void (*early_unregister)(struct drm_connector *connector);
3729    
3730     @@ -511,7 +515,6 @@ struct drm_cmdline_mode {
3731     * @interlace_allowed: can this connector handle interlaced modes?
3732     * @doublescan_allowed: can this connector handle doublescan?
3733     * @stereo_allowed: can this connector handle stereo modes?
3734     - * @registered: is this connector exposed (registered) with userspace?
3735     * @modes: modes available on this connector (from fill_modes() + user)
3736     * @status: one of the drm_connector_status enums (connected, not, or unknown)
3737     * @probed_modes: list of modes derived directly from the display
3738     @@ -560,6 +563,13 @@ struct drm_connector {
3739     char *name;
3740    
3741     /**
3742     + * @mutex: Lock for general connector state, but currently only protects
3743     + * @registered. Most of the connector state is still protected by the
3744     + * mutex in &drm_mode_config.
3745     + */
3746     + struct mutex mutex;
3747     +
3748     + /**
3749     * @index: Compacted connector index, which matches the position inside
3750     * the mode_config.list for drivers not supporting hot-add/removing. Can
3751     * be used as an array index. It is invariant over the lifetime of the
3752     @@ -572,6 +582,10 @@ struct drm_connector {
3753     bool interlace_allowed;
3754     bool doublescan_allowed;
3755     bool stereo_allowed;
3756     + /**
3757     + * @registered: Is this connector exposed (registered) with userspace?
3758     + * Protected by @mutex.
3759     + */
3760     bool registered;
3761     struct list_head modes; /* list of modes on this connector */
3762    
3763     diff --git a/include/linux/fscache-cache.h b/include/linux/fscache-cache.h
3764     index 13ba552e6c09..4c467ef50159 100644
3765     --- a/include/linux/fscache-cache.h
3766     +++ b/include/linux/fscache-cache.h
3767     @@ -360,6 +360,7 @@ struct fscache_object {
3768     #define FSCACHE_OBJECT_IS_AVAILABLE 5 /* T if object has become active */
3769     #define FSCACHE_OBJECT_RETIRED 6 /* T if object was retired on relinquishment */
3770     #define FSCACHE_OBJECT_KILLED_BY_CACHE 7 /* T if object was killed by the cache */
3771     +#define FSCACHE_OBJECT_RUN_AFTER_DEAD 8 /* T if object has been dispatched after death */
3772    
3773     struct list_head cache_link; /* link in cache->object_list */
3774     struct hlist_node cookie_link; /* link in cookie->backing_objects */
3775     diff --git a/include/linux/log2.h b/include/linux/log2.h
3776     index f38fae23bdac..c373295f359f 100644
3777     --- a/include/linux/log2.h
3778     +++ b/include/linux/log2.h
3779     @@ -194,6 +194,17 @@ unsigned long __rounddown_pow_of_two(unsigned long n)
3780     * ... and so on.
3781     */
3782    
3783     -#define order_base_2(n) ilog2(roundup_pow_of_two(n))
3784     +static inline __attribute_const__
3785     +int __order_base_2(unsigned long n)
3786     +{
3787     + return n > 1 ? ilog2(n - 1) + 1 : 0;
3788     +}
3789    
3790     +#define order_base_2(n) \
3791     +( \
3792     + __builtin_constant_p(n) ? ( \
3793     + ((n) == 0 || (n) == 1) ? 0 : \
3794     + ilog2((n) - 1) + 1) : \
3795     + __order_base_2(n) \
3796     +)
3797     #endif /* _LINUX_LOG2_H */
3798     diff --git a/include/linux/micrel_phy.h b/include/linux/micrel_phy.h
3799     index 257173e0095e..f541da68d1e7 100644
3800     --- a/include/linux/micrel_phy.h
3801     +++ b/include/linux/micrel_phy.h
3802     @@ -35,6 +35,8 @@
3803     #define PHY_ID_KSZ886X 0x00221430
3804     #define PHY_ID_KSZ8863 0x00221435
3805    
3806     +#define PHY_ID_KSZ8795 0x00221550
3807     +
3808     /* struct phy_device dev_flags definitions */
3809     #define MICREL_PHY_50MHZ_CLK 0x00000001
3810     #define MICREL_PHY_FXEN 0x00000002
3811     diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
3812     index bb9b102c15cd..780e7171f548 100644
3813     --- a/include/linux/netdevice.h
3814     +++ b/include/linux/netdevice.h
3815     @@ -865,11 +865,15 @@ struct netdev_xdp {
3816     * of useless work if you return NETDEV_TX_BUSY.
3817     * Required; cannot be NULL.
3818     *
3819     - * netdev_features_t (*ndo_fix_features)(struct net_device *dev,
3820     - * netdev_features_t features);
3821     - * Adjusts the requested feature flags according to device-specific
3822     - * constraints, and returns the resulting flags. Must not modify
3823     - * the device state.
3824     + * netdev_features_t (*ndo_features_check)(struct sk_buff *skb,
3825     + * struct net_device *dev
3826     + * netdev_features_t features);
3827     + * Called by core transmit path to determine if device is capable of
3828     + * performing offload operations on a given packet. This is to give
3829     + * the device an opportunity to implement any restrictions that cannot
3830     + * be otherwise expressed by feature flags. The check is called with
3831     + * the set of features that the stack has calculated and it returns
3832     + * those the driver believes to be appropriate.
3833     *
3834     * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb,
3835     * void *accel_priv, select_queue_fallback_t fallback);
3836     @@ -1027,6 +1031,12 @@ struct netdev_xdp {
3837     * Called to release previously enslaved netdev.
3838     *
3839     * Feature/offload setting functions.
3840     + * netdev_features_t (*ndo_fix_features)(struct net_device *dev,
3841     + * netdev_features_t features);
3842     + * Adjusts the requested feature flags according to device-specific
3843     + * constraints, and returns the resulting flags. Must not modify
3844     + * the device state.
3845     + *
3846     * int (*ndo_set_features)(struct net_device *dev, netdev_features_t features);
3847     * Called to update device configuration to new features. Passed
3848     * feature set might be less than what was returned by ndo_fix_features()).
3849     @@ -1099,15 +1109,6 @@ struct netdev_xdp {
3850     * Callback to use for xmit over the accelerated station. This
3851     * is used in place of ndo_start_xmit on accelerated net
3852     * devices.
3853     - * netdev_features_t (*ndo_features_check)(struct sk_buff *skb,
3854     - * struct net_device *dev
3855     - * netdev_features_t features);
3856     - * Called by core transmit path to determine if device is capable of
3857     - * performing offload operations on a given packet. This is to give
3858     - * the device an opportunity to implement any restrictions that cannot
3859     - * be otherwise expressed by feature flags. The check is called with
3860     - * the set of features that the stack has calculated and it returns
3861     - * those the driver believes to be appropriate.
3862     * int (*ndo_set_tx_maxrate)(struct net_device *dev,
3863     * int queue_index, u32 maxrate);
3864     * Called when a user wants to set a max-rate limitation of specific
3865     diff --git a/include/linux/nmi.h b/include/linux/nmi.h
3866     index a78c35cff1ae..0a3fadc32693 100644
3867     --- a/include/linux/nmi.h
3868     +++ b/include/linux/nmi.h
3869     @@ -7,6 +7,23 @@
3870     #include <linux/sched.h>
3871     #include <asm/irq.h>
3872    
3873     +/*
3874     + * The run state of the lockup detectors is controlled by the content of the
3875     + * 'watchdog_enabled' variable. Each lockup detector has its dedicated bit -
3876     + * bit 0 for the hard lockup detector and bit 1 for the soft lockup detector.
3877     + *
3878     + * 'watchdog_user_enabled', 'nmi_watchdog_enabled' and 'soft_watchdog_enabled'
3879     + * are variables that are only used as an 'interface' between the parameters
3880     + * in /proc/sys/kernel and the internal state bits in 'watchdog_enabled'. The
3881     + * 'watchdog_thresh' variable is handled differently because its value is not
3882     + * boolean, and the lockup detectors are 'suspended' while 'watchdog_thresh'
3883     + * is equal zero.
3884     + */
3885     +#define NMI_WATCHDOG_ENABLED_BIT 0
3886     +#define SOFT_WATCHDOG_ENABLED_BIT 1
3887     +#define NMI_WATCHDOG_ENABLED (1 << NMI_WATCHDOG_ENABLED_BIT)
3888     +#define SOFT_WATCHDOG_ENABLED (1 << SOFT_WATCHDOG_ENABLED_BIT)
3889     +
3890     /**
3891     * touch_nmi_watchdog - restart NMI watchdog timeout.
3892     *
3893     @@ -91,9 +108,17 @@ extern int nmi_watchdog_enabled;
3894     extern int soft_watchdog_enabled;
3895     extern int watchdog_user_enabled;
3896     extern int watchdog_thresh;
3897     +extern unsigned long watchdog_enabled;
3898     extern unsigned long *watchdog_cpumask_bits;
3899     +extern atomic_t watchdog_park_in_progress;
3900     +#ifdef CONFIG_SMP
3901     extern int sysctl_softlockup_all_cpu_backtrace;
3902     extern int sysctl_hardlockup_all_cpu_backtrace;
3903     +#else
3904     +#define sysctl_softlockup_all_cpu_backtrace 0
3905     +#define sysctl_hardlockup_all_cpu_backtrace 0
3906     +#endif
3907     +extern bool is_hardlockup(void);
3908     struct ctl_table;
3909     extern int proc_watchdog(struct ctl_table *, int ,
3910     void __user *, size_t *, loff_t *);
3911     diff --git a/include/linux/pci.h b/include/linux/pci.h
3912     index a38772a85588..1b711796d989 100644
3913     --- a/include/linux/pci.h
3914     +++ b/include/linux/pci.h
3915     @@ -178,6 +178,11 @@ enum pci_dev_flags {
3916     PCI_DEV_FLAGS_NO_PM_RESET = (__force pci_dev_flags_t) (1 << 7),
3917     /* Get VPD from function 0 VPD */
3918     PCI_DEV_FLAGS_VPD_REF_F0 = (__force pci_dev_flags_t) (1 << 8),
3919     + /*
3920     + * Resume before calling the driver's system suspend hooks, disabling
3921     + * the direct_complete optimization.
3922     + */
3923     + PCI_DEV_FLAGS_NEEDS_RESUME = (__force pci_dev_flags_t) (1 << 11),
3924     };
3925    
3926     enum pci_irq_reroute_variant {
3927     diff --git a/include/net/ipv6.h b/include/net/ipv6.h
3928     index 91afb4aadaa6..615ce0abba9c 100644
3929     --- a/include/net/ipv6.h
3930     +++ b/include/net/ipv6.h
3931     @@ -776,6 +776,11 @@ static inline __be32 ip6_make_flowlabel(struct net *net, struct sk_buff *skb,
3932     {
3933     u32 hash;
3934    
3935     + /* @flowlabel may include more than a flow label, eg, the traffic class.
3936     + * Here we want only the flow label value.
3937     + */
3938     + flowlabel &= IPV6_FLOWLABEL_MASK;
3939     +
3940     if (flowlabel ||
3941     net->ipv6.sysctl.auto_flowlabels == IP6_AUTO_FLOW_LABEL_OFF ||
3942     (!autolabel &&
3943     diff --git a/include/uapi/linux/netfilter/nf_log.h b/include/uapi/linux/netfilter/nf_log.h
3944     index 8be21e02387d..d0b5fa91ff54 100644
3945     --- a/include/uapi/linux/netfilter/nf_log.h
3946     +++ b/include/uapi/linux/netfilter/nf_log.h
3947     @@ -9,4 +9,6 @@
3948     #define NF_LOG_MACDECODE 0x20 /* Decode MAC header */
3949     #define NF_LOG_MASK 0x2f
3950    
3951     +#define NF_LOG_PREFIXLEN 128
3952     +
3953     #endif /* _NETFILTER_NF_LOG_H */
3954     diff --git a/kernel/Makefile b/kernel/Makefile
3955     index eb26e12c6c2a..314e7d62f5f0 100644
3956     --- a/kernel/Makefile
3957     +++ b/kernel/Makefile
3958     @@ -84,6 +84,7 @@ obj-$(CONFIG_KPROBES) += kprobes.o
3959     obj-$(CONFIG_KGDB) += debug/
3960     obj-$(CONFIG_DETECT_HUNG_TASK) += hung_task.o
3961     obj-$(CONFIG_LOCKUP_DETECTOR) += watchdog.o
3962     +obj-$(CONFIG_HARDLOCKUP_DETECTOR) += watchdog_hld.o
3963     obj-$(CONFIG_SECCOMP) += seccomp.o
3964     obj-$(CONFIG_RELAY) += relay.o
3965     obj-$(CONFIG_SYSCTL) += utsname_sysctl.o
3966     diff --git a/kernel/ucount.c b/kernel/ucount.c
3967     index f4ac18509ecf..c761cdba2a2d 100644
3968     --- a/kernel/ucount.c
3969     +++ b/kernel/ucount.c
3970     @@ -231,11 +231,10 @@ static __init int user_namespace_sysctl_init(void)
3971     * properly.
3972     */
3973     user_header = register_sysctl("user", empty);
3974     + kmemleak_ignore(user_header);
3975     BUG_ON(!user_header);
3976     BUG_ON(!setup_userns_sysctls(&init_user_ns));
3977     #endif
3978     return 0;
3979     }
3980     subsys_initcall(user_namespace_sysctl_init);
3981     -
3982     -
3983     diff --git a/kernel/watchdog.c b/kernel/watchdog.c
3984     index 6d1020c03d41..63177be0159e 100644
3985     --- a/kernel/watchdog.c
3986     +++ b/kernel/watchdog.c
3987     @@ -24,32 +24,14 @@
3988    
3989     #include <asm/irq_regs.h>
3990     #include <linux/kvm_para.h>
3991     -#include <linux/perf_event.h>
3992     #include <linux/kthread.h>
3993    
3994     -/*
3995     - * The run state of the lockup detectors is controlled by the content of the
3996     - * 'watchdog_enabled' variable. Each lockup detector has its dedicated bit -
3997     - * bit 0 for the hard lockup detector and bit 1 for the soft lockup detector.
3998     - *
3999     - * 'watchdog_user_enabled', 'nmi_watchdog_enabled' and 'soft_watchdog_enabled'
4000     - * are variables that are only used as an 'interface' between the parameters
4001     - * in /proc/sys/kernel and the internal state bits in 'watchdog_enabled'. The
4002     - * 'watchdog_thresh' variable is handled differently because its value is not
4003     - * boolean, and the lockup detectors are 'suspended' while 'watchdog_thresh'
4004     - * is equal zero.
4005     - */
4006     -#define NMI_WATCHDOG_ENABLED_BIT 0
4007     -#define SOFT_WATCHDOG_ENABLED_BIT 1
4008     -#define NMI_WATCHDOG_ENABLED (1 << NMI_WATCHDOG_ENABLED_BIT)
4009     -#define SOFT_WATCHDOG_ENABLED (1 << SOFT_WATCHDOG_ENABLED_BIT)
4010     -
4011     static DEFINE_MUTEX(watchdog_proc_mutex);
4012    
4013     -#ifdef CONFIG_HARDLOCKUP_DETECTOR
4014     -static unsigned long __read_mostly watchdog_enabled = SOFT_WATCHDOG_ENABLED|NMI_WATCHDOG_ENABLED;
4015     +#if defined(CONFIG_HAVE_NMI_WATCHDOG) || defined(CONFIG_HARDLOCKUP_DETECTOR)
4016     +unsigned long __read_mostly watchdog_enabled = SOFT_WATCHDOG_ENABLED|NMI_WATCHDOG_ENABLED;
4017     #else
4018     -static unsigned long __read_mostly watchdog_enabled = SOFT_WATCHDOG_ENABLED;
4019     +unsigned long __read_mostly watchdog_enabled = SOFT_WATCHDOG_ENABLED;
4020     #endif
4021     int __read_mostly nmi_watchdog_enabled;
4022     int __read_mostly soft_watchdog_enabled;
4023     @@ -59,9 +41,6 @@ int __read_mostly watchdog_thresh = 10;
4024     #ifdef CONFIG_SMP
4025     int __read_mostly sysctl_softlockup_all_cpu_backtrace;
4026     int __read_mostly sysctl_hardlockup_all_cpu_backtrace;
4027     -#else
4028     -#define sysctl_softlockup_all_cpu_backtrace 0
4029     -#define sysctl_hardlockup_all_cpu_backtrace 0
4030     #endif
4031     static struct cpumask watchdog_cpumask __read_mostly;
4032     unsigned long *watchdog_cpumask_bits = cpumask_bits(&watchdog_cpumask);
4033     @@ -70,6 +49,8 @@ unsigned long *watchdog_cpumask_bits = cpumask_bits(&watchdog_cpumask);
4034     #define for_each_watchdog_cpu(cpu) \
4035     for_each_cpu_and((cpu), cpu_online_mask, &watchdog_cpumask)
4036    
4037     +atomic_t watchdog_park_in_progress = ATOMIC_INIT(0);
4038     +
4039     /*
4040     * The 'watchdog_running' variable is set to 1 when the watchdog threads
4041     * are registered/started and is set to 0 when the watchdog threads are
4042     @@ -100,50 +81,9 @@ static DEFINE_PER_CPU(bool, soft_watchdog_warn);
4043     static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts);
4044     static DEFINE_PER_CPU(unsigned long, soft_lockup_hrtimer_cnt);
4045     static DEFINE_PER_CPU(struct task_struct *, softlockup_task_ptr_saved);
4046     -#ifdef CONFIG_HARDLOCKUP_DETECTOR
4047     -static DEFINE_PER_CPU(bool, hard_watchdog_warn);
4048     -static DEFINE_PER_CPU(bool, watchdog_nmi_touch);
4049     static DEFINE_PER_CPU(unsigned long, hrtimer_interrupts_saved);
4050     -static DEFINE_PER_CPU(struct perf_event *, watchdog_ev);
4051     -#endif
4052     static unsigned long soft_lockup_nmi_warn;
4053    
4054     -/* boot commands */
4055     -/*
4056     - * Should we panic when a soft-lockup or hard-lockup occurs:
4057     - */
4058     -#ifdef CONFIG_HARDLOCKUP_DETECTOR
4059     -unsigned int __read_mostly hardlockup_panic =
4060     - CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE;
4061     -static unsigned long hardlockup_allcpu_dumped;
4062     -/*
4063     - * We may not want to enable hard lockup detection by default in all cases,
4064     - * for example when running the kernel as a guest on a hypervisor. In these
4065     - * cases this function can be called to disable hard lockup detection. This
4066     - * function should only be executed once by the boot processor before the
4067     - * kernel command line parameters are parsed, because otherwise it is not
4068     - * possible to override this in hardlockup_panic_setup().
4069     - */
4070     -void hardlockup_detector_disable(void)
4071     -{
4072     - watchdog_enabled &= ~NMI_WATCHDOG_ENABLED;
4073     -}
4074     -
4075     -static int __init hardlockup_panic_setup(char *str)
4076     -{
4077     - if (!strncmp(str, "panic", 5))
4078     - hardlockup_panic = 1;
4079     - else if (!strncmp(str, "nopanic", 7))
4080     - hardlockup_panic = 0;
4081     - else if (!strncmp(str, "0", 1))
4082     - watchdog_enabled &= ~NMI_WATCHDOG_ENABLED;
4083     - else if (!strncmp(str, "1", 1))
4084     - watchdog_enabled |= NMI_WATCHDOG_ENABLED;
4085     - return 1;
4086     -}
4087     -__setup("nmi_watchdog=", hardlockup_panic_setup);
4088     -#endif
4089     -
4090     unsigned int __read_mostly softlockup_panic =
4091     CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE;
4092    
4093     @@ -264,32 +204,14 @@ void touch_all_softlockup_watchdogs(void)
4094     wq_watchdog_touch(-1);
4095     }
4096    
4097     -#ifdef CONFIG_HARDLOCKUP_DETECTOR
4098     -void touch_nmi_watchdog(void)
4099     -{
4100     - /*
4101     - * Using __raw here because some code paths have
4102     - * preemption enabled. If preemption is enabled
4103     - * then interrupts should be enabled too, in which
4104     - * case we shouldn't have to worry about the watchdog
4105     - * going off.
4106     - */
4107     - raw_cpu_write(watchdog_nmi_touch, true);
4108     - touch_softlockup_watchdog();
4109     -}
4110     -EXPORT_SYMBOL(touch_nmi_watchdog);
4111     -
4112     -#endif
4113     -
4114     void touch_softlockup_watchdog_sync(void)
4115     {
4116     __this_cpu_write(softlockup_touch_sync, true);
4117     __this_cpu_write(watchdog_touch_ts, 0);
4118     }
4119    
4120     -#ifdef CONFIG_HARDLOCKUP_DETECTOR
4121     /* watchdog detector functions */
4122     -static bool is_hardlockup(void)
4123     +bool is_hardlockup(void)
4124     {
4125     unsigned long hrint = __this_cpu_read(hrtimer_interrupts);
4126    
4127     @@ -299,7 +221,6 @@ static bool is_hardlockup(void)
4128     __this_cpu_write(hrtimer_interrupts_saved, hrint);
4129     return false;
4130     }
4131     -#endif
4132    
4133     static int is_softlockup(unsigned long touch_ts)
4134     {
4135     @@ -313,77 +234,22 @@ static int is_softlockup(unsigned long touch_ts)
4136     return 0;
4137     }
4138    
4139     -#ifdef CONFIG_HARDLOCKUP_DETECTOR
4140     -
4141     -static struct perf_event_attr wd_hw_attr = {
4142     - .type = PERF_TYPE_HARDWARE,
4143     - .config = PERF_COUNT_HW_CPU_CYCLES,
4144     - .size = sizeof(struct perf_event_attr),
4145     - .pinned = 1,
4146     - .disabled = 1,
4147     -};
4148     -
4149     -/* Callback function for perf event subsystem */
4150     -static void watchdog_overflow_callback(struct perf_event *event,
4151     - struct perf_sample_data *data,
4152     - struct pt_regs *regs)
4153     -{
4154     - /* Ensure the watchdog never gets throttled */
4155     - event->hw.interrupts = 0;
4156     -
4157     - if (__this_cpu_read(watchdog_nmi_touch) == true) {
4158     - __this_cpu_write(watchdog_nmi_touch, false);
4159     - return;
4160     - }
4161     -
4162     - /* check for a hardlockup
4163     - * This is done by making sure our timer interrupt
4164     - * is incrementing. The timer interrupt should have
4165     - * fired multiple times before we overflow'd. If it hasn't
4166     - * then this is a good indication the cpu is stuck
4167     - */
4168     - if (is_hardlockup()) {
4169     - int this_cpu = smp_processor_id();
4170     -
4171     - /* only print hardlockups once */
4172     - if (__this_cpu_read(hard_watchdog_warn) == true)
4173     - return;
4174     -
4175     - pr_emerg("Watchdog detected hard LOCKUP on cpu %d", this_cpu);
4176     - print_modules();
4177     - print_irqtrace_events(current);
4178     - if (regs)
4179     - show_regs(regs);
4180     - else
4181     - dump_stack();
4182     -
4183     - /*
4184     - * Perform all-CPU dump only once to avoid multiple hardlockups
4185     - * generating interleaving traces
4186     - */
4187     - if (sysctl_hardlockup_all_cpu_backtrace &&
4188     - !test_and_set_bit(0, &hardlockup_allcpu_dumped))
4189     - trigger_allbutself_cpu_backtrace();
4190     -
4191     - if (hardlockup_panic)
4192     - nmi_panic(regs, "Hard LOCKUP");
4193     -
4194     - __this_cpu_write(hard_watchdog_warn, true);
4195     - return;
4196     - }
4197     -
4198     - __this_cpu_write(hard_watchdog_warn, false);
4199     - return;
4200     -}
4201     -#endif /* CONFIG_HARDLOCKUP_DETECTOR */
4202     -
4203     static void watchdog_interrupt_count(void)
4204     {
4205     __this_cpu_inc(hrtimer_interrupts);
4206     }
4207    
4208     -static int watchdog_nmi_enable(unsigned int cpu);
4209     -static void watchdog_nmi_disable(unsigned int cpu);
4210     +/*
4211     + * These two functions are mostly architecture specific
4212     + * defining them as weak here.
4213     + */
4214     +int __weak watchdog_nmi_enable(unsigned int cpu)
4215     +{
4216     + return 0;
4217     +}
4218     +void __weak watchdog_nmi_disable(unsigned int cpu)
4219     +{
4220     +}
4221    
4222     static int watchdog_enable_all_cpus(void);
4223     static void watchdog_disable_all_cpus(void);
4224     @@ -396,6 +262,9 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
4225     int duration;
4226     int softlockup_all_cpu_backtrace = sysctl_softlockup_all_cpu_backtrace;
4227    
4228     + if (atomic_read(&watchdog_park_in_progress) != 0)
4229     + return HRTIMER_NORESTART;
4230     +
4231     /* kick the hardlockup detector */
4232     watchdog_interrupt_count();
4233    
4234     @@ -576,109 +445,6 @@ static void watchdog(unsigned int cpu)
4235     watchdog_nmi_disable(cpu);
4236     }
4237    
4238     -#ifdef CONFIG_HARDLOCKUP_DETECTOR
4239     -/*
4240     - * People like the simple clean cpu node info on boot.
4241     - * Reduce the watchdog noise by only printing messages
4242     - * that are different from what cpu0 displayed.
4243     - */
4244     -static unsigned long cpu0_err;
4245     -
4246     -static int watchdog_nmi_enable(unsigned int cpu)
4247     -{
4248     - struct perf_event_attr *wd_attr;
4249     - struct perf_event *event = per_cpu(watchdog_ev, cpu);
4250     -
4251     - /* nothing to do if the hard lockup detector is disabled */
4252     - if (!(watchdog_enabled & NMI_WATCHDOG_ENABLED))
4253     - goto out;
4254     -
4255     - /* is it already setup and enabled? */
4256     - if (event && event->state > PERF_EVENT_STATE_OFF)
4257     - goto out;
4258     -
4259     - /* it is setup but not enabled */
4260     - if (event != NULL)
4261     - goto out_enable;
4262     -
4263     - wd_attr = &wd_hw_attr;
4264     - wd_attr->sample_period = hw_nmi_get_sample_period(watchdog_thresh);
4265     -
4266     - /* Try to register using hardware perf events */
4267     - event = perf_event_create_kernel_counter(wd_attr, cpu, NULL, watchdog_overflow_callback, NULL);
4268     -
4269     - /* save cpu0 error for future comparision */
4270     - if (cpu == 0 && IS_ERR(event))
4271     - cpu0_err = PTR_ERR(event);
4272     -
4273     - if (!IS_ERR(event)) {
4274     - /* only print for cpu0 or different than cpu0 */
4275     - if (cpu == 0 || cpu0_err)
4276     - pr_info("enabled on all CPUs, permanently consumes one hw-PMU counter.\n");
4277     - goto out_save;
4278     - }
4279     -
4280     - /*
4281     - * Disable the hard lockup detector if _any_ CPU fails to set up
4282     - * set up the hardware perf event. The watchdog() function checks
4283     - * the NMI_WATCHDOG_ENABLED bit periodically.
4284     - *
4285     - * The barriers are for syncing up watchdog_enabled across all the
4286     - * cpus, as clear_bit() does not use barriers.
4287     - */
4288     - smp_mb__before_atomic();
4289     - clear_bit(NMI_WATCHDOG_ENABLED_BIT, &watchdog_enabled);
4290     - smp_mb__after_atomic();
4291     -
4292     - /* skip displaying the same error again */
4293     - if (cpu > 0 && (PTR_ERR(event) == cpu0_err))
4294     - return PTR_ERR(event);
4295     -
4296     - /* vary the KERN level based on the returned errno */
4297     - if (PTR_ERR(event) == -EOPNOTSUPP)
4298     - pr_info("disabled (cpu%i): not supported (no LAPIC?)\n", cpu);
4299     - else if (PTR_ERR(event) == -ENOENT)
4300     - pr_warn("disabled (cpu%i): hardware events not enabled\n",
4301     - cpu);
4302     - else
4303     - pr_err("disabled (cpu%i): unable to create perf event: %ld\n",
4304     - cpu, PTR_ERR(event));
4305     -
4306     - pr_info("Shutting down hard lockup detector on all cpus\n");
4307     -
4308     - return PTR_ERR(event);
4309     -
4310     - /* success path */
4311     -out_save:
4312     - per_cpu(watchdog_ev, cpu) = event;
4313     -out_enable:
4314     - perf_event_enable(per_cpu(watchdog_ev, cpu));
4315     -out:
4316     - return 0;
4317     -}
4318     -
4319     -static void watchdog_nmi_disable(unsigned int cpu)
4320     -{
4321     - struct perf_event *event = per_cpu(watchdog_ev, cpu);
4322     -
4323     - if (event) {
4324     - perf_event_disable(event);
4325     - per_cpu(watchdog_ev, cpu) = NULL;
4326     -
4327     - /* should be in cleanup, but blocks oprofile */
4328     - perf_event_release_kernel(event);
4329     - }
4330     - if (cpu == 0) {
4331     - /* watchdog_nmi_enable() expects this to be zero initially. */
4332     - cpu0_err = 0;
4333     - }
4334     -}
4335     -
4336     -#else
4337     -static int watchdog_nmi_enable(unsigned int cpu) { return 0; }
4338     -static void watchdog_nmi_disable(unsigned int cpu) { return; }
4339     -#endif /* CONFIG_HARDLOCKUP_DETECTOR */
4340     -
4341     static struct smp_hotplug_thread watchdog_threads = {
4342     .store = &softlockup_watchdog,
4343     .thread_should_run = watchdog_should_run,
4344     @@ -706,12 +472,16 @@ static int watchdog_park_threads(void)
4345     {
4346     int cpu, ret = 0;
4347    
4348     + atomic_set(&watchdog_park_in_progress, 1);
4349     +
4350     for_each_watchdog_cpu(cpu) {
4351     ret = kthread_park(per_cpu(softlockup_watchdog, cpu));
4352     if (ret)
4353     break;
4354     }
4355    
4356     + atomic_set(&watchdog_park_in_progress, 0);
4357     +
4358     return ret;
4359     }
4360    
4361     diff --git a/kernel/watchdog_hld.c b/kernel/watchdog_hld.c
4362     new file mode 100644
4363     index 000000000000..12b8dd640786
4364     --- /dev/null
4365     +++ b/kernel/watchdog_hld.c
4366     @@ -0,0 +1,230 @@
4367     +/*
4368     + * Detect hard lockups on a system
4369     + *
4370     + * started by Don Zickus, Copyright (C) 2010 Red Hat, Inc.
4371     + *
4372     + * Note: Most of this code is borrowed heavily from the original softlockup
4373     + * detector, so thanks to Ingo for the initial implementation.
4374     + * Some chunks also taken from the old x86-specific nmi watchdog code, thanks
4375     + * to those contributors as well.
4376     + */
4377     +
4378     +#define pr_fmt(fmt) "NMI watchdog: " fmt
4379     +
4380     +#include <linux/nmi.h>
4381     +#include <linux/module.h>
4382     +#include <asm/irq_regs.h>
4383     +#include <linux/perf_event.h>
4384     +
4385     +static DEFINE_PER_CPU(bool, hard_watchdog_warn);
4386     +static DEFINE_PER_CPU(bool, watchdog_nmi_touch);
4387     +static DEFINE_PER_CPU(struct perf_event *, watchdog_ev);
4388     +
4389     +/* boot commands */
4390     +/*
4391     + * Should we panic when a soft-lockup or hard-lockup occurs:
4392     + */
4393     +unsigned int __read_mostly hardlockup_panic =
4394     + CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE;
4395     +static unsigned long hardlockup_allcpu_dumped;
4396     +/*
4397     + * We may not want to enable hard lockup detection by default in all cases,
4398     + * for example when running the kernel as a guest on a hypervisor. In these
4399     + * cases this function can be called to disable hard lockup detection. This
4400     + * function should only be executed once by the boot processor before the
4401     + * kernel command line parameters are parsed, because otherwise it is not
4402     + * possible to override this in hardlockup_panic_setup().
4403     + */
4404     +void hardlockup_detector_disable(void)
4405     +{
4406     + watchdog_enabled &= ~NMI_WATCHDOG_ENABLED;
4407     +}
4408     +
4409     +static int __init hardlockup_panic_setup(char *str)
4410     +{
4411     + if (!strncmp(str, "panic", 5))
4412     + hardlockup_panic = 1;
4413     + else if (!strncmp(str, "nopanic", 7))
4414     + hardlockup_panic = 0;
4415     + else if (!strncmp(str, "0", 1))
4416     + watchdog_enabled &= ~NMI_WATCHDOG_ENABLED;
4417     + else if (!strncmp(str, "1", 1))
4418     + watchdog_enabled |= NMI_WATCHDOG_ENABLED;
4419     + return 1;
4420     +}
4421     +__setup("nmi_watchdog=", hardlockup_panic_setup);
4422     +
4423     +void touch_nmi_watchdog(void)
4424     +{
4425     + /*
4426     + * Using __raw here because some code paths have
4427     + * preemption enabled. If preemption is enabled
4428     + * then interrupts should be enabled too, in which
4429     + * case we shouldn't have to worry about the watchdog
4430     + * going off.
4431     + */
4432     + raw_cpu_write(watchdog_nmi_touch, true);
4433     + touch_softlockup_watchdog();
4434     +}
4435     +EXPORT_SYMBOL(touch_nmi_watchdog);
4436     +
4437     +static struct perf_event_attr wd_hw_attr = {
4438     + .type = PERF_TYPE_HARDWARE,
4439     + .config = PERF_COUNT_HW_CPU_CYCLES,
4440     + .size = sizeof(struct perf_event_attr),
4441     + .pinned = 1,
4442     + .disabled = 1,
4443     +};
4444     +
4445     +/* Callback function for perf event subsystem */
4446     +static void watchdog_overflow_callback(struct perf_event *event,
4447     + struct perf_sample_data *data,
4448     + struct pt_regs *regs)
4449     +{
4450     + /* Ensure the watchdog never gets throttled */
4451     + event->hw.interrupts = 0;
4452     +
4453     + if (atomic_read(&watchdog_park_in_progress) != 0)
4454     + return;
4455     +
4456     + if (__this_cpu_read(watchdog_nmi_touch) == true) {
4457     + __this_cpu_write(watchdog_nmi_touch, false);
4458     + return;
4459     + }
4460     +
4461     + /* check for a hardlockup
4462     + * This is done by making sure our timer interrupt
4463     + * is incrementing. The timer interrupt should have
4464     + * fired multiple times before we overflow'd. If it hasn't
4465     + * then this is a good indication the cpu is stuck
4466     + */
4467     + if (is_hardlockup()) {
4468     + int this_cpu = smp_processor_id();
4469     +
4470     + /* only print hardlockups once */
4471     + if (__this_cpu_read(hard_watchdog_warn) == true)
4472     + return;
4473     +
4474     + pr_emerg("Watchdog detected hard LOCKUP on cpu %d", this_cpu);
4475     + print_modules();
4476     + print_irqtrace_events(current);
4477     + if (regs)
4478     + show_regs(regs);
4479     + else
4480     + dump_stack();
4481     +
4482     + /*
4483     + * Perform all-CPU dump only once to avoid multiple hardlockups
4484     + * generating interleaving traces
4485     + */
4486     + if (sysctl_hardlockup_all_cpu_backtrace &&
4487     + !test_and_set_bit(0, &hardlockup_allcpu_dumped))
4488     + trigger_allbutself_cpu_backtrace();
4489     +
4490     + if (hardlockup_panic)
4491     + nmi_panic(regs, "Hard LOCKUP");
4492     +
4493     + __this_cpu_write(hard_watchdog_warn, true);
4494     + return;
4495     + }
4496     +
4497     + __this_cpu_write(hard_watchdog_warn, false);
4498     + return;
4499     +}
4500     +
4501     +/*
4502     + * People like the simple clean cpu node info on boot.
4503     + * Reduce the watchdog noise by only printing messages
4504     + * that are different from what cpu0 displayed.
4505     + */
4506     +static unsigned long cpu0_err;
4507     +
4508     +int watchdog_nmi_enable(unsigned int cpu)
4509     +{
4510     + struct perf_event_attr *wd_attr;
4511     + struct perf_event *event = per_cpu(watchdog_ev, cpu);
4512     +
4513     + /* nothing to do if the hard lockup detector is disabled */
4514     + if (!(watchdog_enabled & NMI_WATCHDOG_ENABLED))
4515     + goto out;
4516     +
4517     + /* is it already setup and enabled? */
4518     + if (event && event->state > PERF_EVENT_STATE_OFF)
4519     + goto out;
4520     +
4521     + /* it is setup but not enabled */
4522     + if (event != NULL)
4523     + goto out_enable;
4524     +
4525     + wd_attr = &wd_hw_attr;
4526     + wd_attr->sample_period = hw_nmi_get_sample_period(watchdog_thresh);
4527     +
4528     + /* Try to register using hardware perf events */
4529     + event = perf_event_create_kernel_counter(wd_attr, cpu, NULL, watchdog_overflow_callback, NULL);
4530     +
4531     + /* save cpu0 error for future comparision */
4532     + if (cpu == 0 && IS_ERR(event))
4533     + cpu0_err = PTR_ERR(event);
4534     +
4535     + if (!IS_ERR(event)) {
4536     + /* only print for cpu0 or different than cpu0 */
4537     + if (cpu == 0 || cpu0_err)
4538     + pr_info("enabled on all CPUs, permanently consumes one hw-PMU counter.\n");
4539     + goto out_save;
4540     + }
4541     +
4542     + /*
4543     + * Disable the hard lockup detector if _any_ CPU fails to set up
4544     + * set up the hardware perf event. The watchdog() function checks
4545     + * the NMI_WATCHDOG_ENABLED bit periodically.
4546     + *
4547     + * The barriers are for syncing up watchdog_enabled across all the
4548     + * cpus, as clear_bit() does not use barriers.
4549     + */
4550     + smp_mb__before_atomic();
4551     + clear_bit(NMI_WATCHDOG_ENABLED_BIT, &watchdog_enabled);
4552     + smp_mb__after_atomic();
4553     +
4554     + /* skip displaying the same error again */
4555     + if (cpu > 0 && (PTR_ERR(event) == cpu0_err))
4556     + return PTR_ERR(event);
4557     +
4558     + /* vary the KERN level based on the returned errno */
4559     + if (PTR_ERR(event) == -EOPNOTSUPP)
4560     + pr_info("disabled (cpu%i): not supported (no LAPIC?)\n", cpu);
4561     + else if (PTR_ERR(event) == -ENOENT)
4562     + pr_warn("disabled (cpu%i): hardware events not enabled\n",
4563     + cpu);
4564     + else
4565     + pr_err("disabled (cpu%i): unable to create perf event: %ld\n",
4566     + cpu, PTR_ERR(event));
4567     +
4568     + pr_info("Shutting down hard lockup detector on all cpus\n");
4569     +
4570     + return PTR_ERR(event);
4571     +
4572     + /* success path */
4573     +out_save:
4574     + per_cpu(watchdog_ev, cpu) = event;
4575     +out_enable:
4576     + perf_event_enable(per_cpu(watchdog_ev, cpu));
4577     +out:
4578     + return 0;
4579     +}
4580     +
4581     +void watchdog_nmi_disable(unsigned int cpu)
4582     +{
4583     + struct perf_event *event = per_cpu(watchdog_ev, cpu);
4584     +
4585     + if (event) {
4586     + perf_event_disable(event);
4587     + per_cpu(watchdog_ev, cpu) = NULL;
4588     +
4589     + /* should be in cleanup, but blocks oprofile */
4590     + perf_event_release_kernel(event);
4591     + }
4592     + if (cpu == 0) {
4593     + /* watchdog_nmi_enable() expects this to be zero initially. */
4594     + cpu0_err = 0;
4595     + }
4596     +}
4597     diff --git a/mm/kasan/report.c b/mm/kasan/report.c
4598     index 073325aedc68..8ca412aebcf1 100644
4599     --- a/mm/kasan/report.c
4600     +++ b/mm/kasan/report.c
4601     @@ -13,6 +13,7 @@
4602     *
4603     */
4604    
4605     +#include <linux/ftrace.h>
4606     #include <linux/kernel.h>
4607     #include <linux/mm.h>
4608     #include <linux/printk.h>
4609     @@ -298,6 +299,8 @@ void kasan_report(unsigned long addr, size_t size,
4610     if (likely(!kasan_report_enabled()))
4611     return;
4612    
4613     + disable_trace_on_warning();
4614     +
4615     info.access_addr = (void *)addr;
4616     info.access_size = size;
4617     info.is_write = is_write;
4618     diff --git a/mm/shmem.c b/mm/shmem.c
4619     index 9d32e1cb9f38..d99cfb6eb03a 100644
4620     --- a/mm/shmem.c
4621     +++ b/mm/shmem.c
4622     @@ -412,6 +412,7 @@ static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo,
4623     struct shrink_control *sc, unsigned long nr_to_split)
4624     {
4625     LIST_HEAD(list), *pos, *next;
4626     + LIST_HEAD(to_remove);
4627     struct inode *inode;
4628     struct shmem_inode_info *info;
4629     struct page *page;
4630     @@ -438,9 +439,8 @@ static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo,
4631     /* Check if there's anything to gain */
4632     if (round_up(inode->i_size, PAGE_SIZE) ==
4633     round_up(inode->i_size, HPAGE_PMD_SIZE)) {
4634     - list_del_init(&info->shrinklist);
4635     + list_move(&info->shrinklist, &to_remove);
4636     removed++;
4637     - iput(inode);
4638     goto next;
4639     }
4640    
4641     @@ -451,6 +451,13 @@ static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo,
4642     }
4643     spin_unlock(&sbinfo->shrinklist_lock);
4644    
4645     + list_for_each_safe(pos, next, &to_remove) {
4646     + info = list_entry(pos, struct shmem_inode_info, shrinklist);
4647     + inode = &info->vfs_inode;
4648     + list_del_init(&info->shrinklist);
4649     + iput(inode);
4650     + }
4651     +
4652     list_for_each_safe(pos, next, &list) {
4653     int ret;
4654    
4655     diff --git a/net/core/ethtool.c b/net/core/ethtool.c
4656     index 047a1752ece1..072c1f4998c9 100644
4657     --- a/net/core/ethtool.c
4658     +++ b/net/core/ethtool.c
4659     @@ -1394,9 +1394,12 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr)
4660     if (regs.len > reglen)
4661     regs.len = reglen;
4662    
4663     - regbuf = vzalloc(reglen);
4664     - if (reglen && !regbuf)
4665     - return -ENOMEM;
4666     + regbuf = NULL;
4667     + if (reglen) {
4668     + regbuf = vzalloc(reglen);
4669     + if (!regbuf)
4670     + return -ENOMEM;
4671     + }
4672    
4673     ops->get_regs(dev, &regs, regbuf);
4674    
4675     diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
4676     index 89a8cac4726a..51b27ae09fbd 100644
4677     --- a/net/ipv4/arp.c
4678     +++ b/net/ipv4/arp.c
4679     @@ -1263,7 +1263,7 @@ void __init arp_init(void)
4680     /*
4681     * ax25 -> ASCII conversion
4682     */
4683     -static char *ax2asc2(ax25_address *a, char *buf)
4684     +static void ax2asc2(ax25_address *a, char *buf)
4685     {
4686     char c, *s;
4687     int n;
4688     @@ -1285,10 +1285,10 @@ static char *ax2asc2(ax25_address *a, char *buf)
4689     *s++ = n + '0';
4690     *s++ = '\0';
4691    
4692     - if (*buf == '\0' || *buf == '-')
4693     - return "*";
4694     -
4695     - return buf;
4696     + if (*buf == '\0' || *buf == '-') {
4697     + buf[0] = '*';
4698     + buf[1] = '\0';
4699     + }
4700     }
4701     #endif /* CONFIG_AX25 */
4702    
4703     @@ -1322,7 +1322,7 @@ static void arp_format_neigh_entry(struct seq_file *seq,
4704     }
4705     #endif
4706     sprintf(tbuf, "%pI4", n->primary_key);
4707     - seq_printf(seq, "%-16s 0x%-10x0x%-10x%s * %s\n",
4708     + seq_printf(seq, "%-16s 0x%-10x0x%-10x%-17s * %s\n",
4709     tbuf, hatype, arp_state_to_flags(n), hbuffer, dev->name);
4710     read_unlock(&n->lock);
4711     }
4712     diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c
4713     index f6c50af24a64..3d063eb37848 100644
4714     --- a/net/ipv4/tcp_probe.c
4715     +++ b/net/ipv4/tcp_probe.c
4716     @@ -117,7 +117,7 @@ static void jtcp_rcv_established(struct sock *sk, struct sk_buff *skb,
4717     (fwmark > 0 && skb->mark == fwmark)) &&
4718     (full || tp->snd_cwnd != tcp_probe.lastcwnd)) {
4719    
4720     - spin_lock(&tcp_probe.lock);
4721     + spin_lock_bh(&tcp_probe.lock);
4722     /* If log fills, just silently drop */
4723     if (tcp_probe_avail() > 1) {
4724     struct tcp_log *p = tcp_probe.log + tcp_probe.head;
4725     @@ -157,7 +157,7 @@ static void jtcp_rcv_established(struct sock *sk, struct sk_buff *skb,
4726     tcp_probe.head = (tcp_probe.head + 1) & (bufsize - 1);
4727     }
4728     tcp_probe.lastcwnd = tp->snd_cwnd;
4729     - spin_unlock(&tcp_probe.lock);
4730     + spin_unlock_bh(&tcp_probe.lock);
4731    
4732     wake_up(&tcp_probe.wait);
4733     }
4734     diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
4735     index f088a1d9a618..045738319e8b 100644
4736     --- a/net/ipv6/addrconf.c
4737     +++ b/net/ipv6/addrconf.c
4738     @@ -3387,9 +3387,15 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
4739     }
4740    
4741     if (idev) {
4742     - if (idev->if_flags & IF_READY)
4743     - /* device is already configured. */
4744     + if (idev->if_flags & IF_READY) {
4745     + /* device is already configured -
4746     + * but resend MLD reports, we might
4747     + * have roamed and need to update
4748     + * multicast snooping switches
4749     + */
4750     + ipv6_mc_up(idev);
4751     break;
4752     + }
4753     idev->if_flags |= IF_READY;
4754     }
4755    
4756     @@ -4004,6 +4010,12 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp, bool bump_id)
4757    
4758     if (bump_id)
4759     rt_genid_bump_ipv6(dev_net(dev));
4760     +
4761     + /* Make sure that a new temporary address will be created
4762     + * before this temporary address becomes deprecated.
4763     + */
4764     + if (ifp->flags & IFA_F_TEMPORARY)
4765     + addrconf_verify_rtnl();
4766     }
4767    
4768     static void addrconf_dad_run(struct inet6_dev *idev)
4769     diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
4770     index 442ec1f39ed1..38062f403ceb 100644
4771     --- a/net/ipv6/datagram.c
4772     +++ b/net/ipv6/datagram.c
4773     @@ -166,18 +166,22 @@ int __ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr,
4774     if (np->sndflow)
4775     fl6_flowlabel = usin->sin6_flowinfo & IPV6_FLOWINFO_MASK;
4776    
4777     - addr_type = ipv6_addr_type(&usin->sin6_addr);
4778     -
4779     - if (addr_type == IPV6_ADDR_ANY) {
4780     + if (ipv6_addr_any(&usin->sin6_addr)) {
4781     /*
4782     * connect to self
4783     */
4784     - usin->sin6_addr.s6_addr[15] = 0x01;
4785     + if (ipv6_addr_v4mapped(&sk->sk_v6_rcv_saddr))
4786     + ipv6_addr_set_v4mapped(htonl(INADDR_LOOPBACK),
4787     + &usin->sin6_addr);
4788     + else
4789     + usin->sin6_addr = in6addr_loopback;
4790     }
4791    
4792     + addr_type = ipv6_addr_type(&usin->sin6_addr);
4793     +
4794     daddr = &usin->sin6_addr;
4795    
4796     - if (addr_type == IPV6_ADDR_MAPPED) {
4797     + if (addr_type & IPV6_ADDR_MAPPED) {
4798     struct sockaddr_in sin;
4799    
4800     if (__ipv6_only_sock(sk)) {
4801     diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
4802     index 1ac3cea49171..3ab32ac57ccd 100644
4803     --- a/net/ipv6/ip6_output.c
4804     +++ b/net/ipv6/ip6_output.c
4805     @@ -1019,6 +1019,9 @@ static int ip6_dst_lookup_tail(struct net *net, const struct sock *sk,
4806     }
4807     }
4808     #endif
4809     + if (ipv6_addr_v4mapped(&fl6->saddr) &&
4810     + !(ipv6_addr_v4mapped(&fl6->daddr) || ipv6_addr_any(&fl6->daddr)))
4811     + return -EAFNOSUPPORT;
4812    
4813     return 0;
4814    
4815     diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
4816     index aef9b28067f4..7ac2365aa6fb 100644
4817     --- a/net/ipv6/tcp_ipv6.c
4818     +++ b/net/ipv6/tcp_ipv6.c
4819     @@ -148,8 +148,13 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
4820     * connect() to INADDR_ANY means loopback (BSD'ism).
4821     */
4822    
4823     - if (ipv6_addr_any(&usin->sin6_addr))
4824     - usin->sin6_addr.s6_addr[15] = 0x1;
4825     + if (ipv6_addr_any(&usin->sin6_addr)) {
4826     + if (ipv6_addr_v4mapped(&sk->sk_v6_rcv_saddr))
4827     + ipv6_addr_set_v4mapped(htonl(INADDR_LOOPBACK),
4828     + &usin->sin6_addr);
4829     + else
4830     + usin->sin6_addr = in6addr_loopback;
4831     + }
4832    
4833     addr_type = ipv6_addr_type(&usin->sin6_addr);
4834    
4835     @@ -188,7 +193,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,
4836     * TCP over IPv4
4837     */
4838    
4839     - if (addr_type == IPV6_ADDR_MAPPED) {
4840     + if (addr_type & IPV6_ADDR_MAPPED) {
4841     u32 exthdrlen = icsk->icsk_ext_hdr_len;
4842     struct sockaddr_in sin;
4843    
4844     diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
4845     index 40a289f78d77..2497f62fa4c2 100644
4846     --- a/net/ipv6/udp.c
4847     +++ b/net/ipv6/udp.c
4848     @@ -1049,6 +1049,10 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
4849     if (addr_len < SIN6_LEN_RFC2133)
4850     return -EINVAL;
4851     daddr = &sin6->sin6_addr;
4852     + if (ipv6_addr_any(daddr) &&
4853     + ipv6_addr_v4mapped(&np->saddr))
4854     + ipv6_addr_set_v4mapped(htonl(INADDR_LOOPBACK),
4855     + daddr);
4856     break;
4857     case AF_INET:
4858     goto do_udp_sendmsg;
4859     diff --git a/net/netfilter/nf_conntrack_sip.c b/net/netfilter/nf_conntrack_sip.c
4860     index c3fc14e021ec..3a8dc39a9116 100644
4861     --- a/net/netfilter/nf_conntrack_sip.c
4862     +++ b/net/netfilter/nf_conntrack_sip.c
4863     @@ -1630,8 +1630,6 @@ static int __init nf_conntrack_sip_init(void)
4864     ports[ports_c++] = SIP_PORT;
4865    
4866     for (i = 0; i < ports_c; i++) {
4867     - memset(&sip[i], 0, sizeof(sip[i]));
4868     -
4869     nf_ct_helper_init(&sip[4 * i], AF_INET, IPPROTO_UDP, "sip",
4870     SIP_PORT, ports[i], i, sip_exp_policy,
4871     SIP_EXPECT_MAX,
4872     diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c
4873     index 3dca90dc24ad..ffb9e8ada899 100644
4874     --- a/net/netfilter/nf_log.c
4875     +++ b/net/netfilter/nf_log.c
4876     @@ -13,7 +13,6 @@
4877     /* Internal logging interface, which relies on the real
4878     LOG target modules */
4879    
4880     -#define NF_LOG_PREFIXLEN 128
4881     #define NFLOGGER_NAME_LEN 64
4882    
4883     static struct nf_logger __rcu *loggers[NFPROTO_NUMPROTO][NF_LOG_TYPE_MAX] __read_mostly;
4884     diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
4885     index e5194f6f906c..778fcdb83225 100644
4886     --- a/net/netfilter/nf_tables_api.c
4887     +++ b/net/netfilter/nf_tables_api.c
4888     @@ -3637,10 +3637,18 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
4889     goto err5;
4890     }
4891    
4892     + if (set->size &&
4893     + !atomic_add_unless(&set->nelems, 1, set->size + set->ndeact)) {
4894     + err = -ENFILE;
4895     + goto err6;
4896     + }
4897     +
4898     nft_trans_elem(trans) = elem;
4899     list_add_tail(&trans->list, &ctx->net->nft.commit_list);
4900     return 0;
4901    
4902     +err6:
4903     + set->ops->remove(set, &elem);
4904     err5:
4905     kfree(trans);
4906     err4:
4907     @@ -3687,15 +3695,9 @@ static int nf_tables_newsetelem(struct net *net, struct sock *nlsk,
4908     return -EBUSY;
4909    
4910     nla_for_each_nested(attr, nla[NFTA_SET_ELEM_LIST_ELEMENTS], rem) {
4911     - if (set->size &&
4912     - !atomic_add_unless(&set->nelems, 1, set->size + set->ndeact))
4913     - return -ENFILE;
4914     -
4915     err = nft_add_set_elem(&ctx, set, attr, nlh->nlmsg_flags);
4916     - if (err < 0) {
4917     - atomic_dec(&set->nelems);
4918     + if (err < 0)
4919     break;
4920     - }
4921     }
4922     return err;
4923     }
4924     diff --git a/net/netfilter/nft_log.c b/net/netfilter/nft_log.c
4925     index 1b01404bb33f..c7704e9123ef 100644
4926     --- a/net/netfilter/nft_log.c
4927     +++ b/net/netfilter/nft_log.c
4928     @@ -38,7 +38,8 @@ static void nft_log_eval(const struct nft_expr *expr,
4929    
4930     static const struct nla_policy nft_log_policy[NFTA_LOG_MAX + 1] = {
4931     [NFTA_LOG_GROUP] = { .type = NLA_U16 },
4932     - [NFTA_LOG_PREFIX] = { .type = NLA_STRING },
4933     + [NFTA_LOG_PREFIX] = { .type = NLA_STRING,
4934     + .len = NF_LOG_PREFIXLEN - 1 },
4935     [NFTA_LOG_SNAPLEN] = { .type = NLA_U32 },
4936     [NFTA_LOG_QTHRESHOLD] = { .type = NLA_U16 },
4937     [NFTA_LOG_LEVEL] = { .type = NLA_U32 },
4938     diff --git a/net/sctp/offload.c b/net/sctp/offload.c
4939     index 7e869d0cca69..4f5a2b580aa5 100644
4940     --- a/net/sctp/offload.c
4941     +++ b/net/sctp/offload.c
4942     @@ -68,7 +68,7 @@ static struct sk_buff *sctp_gso_segment(struct sk_buff *skb,
4943     goto out;
4944     }
4945    
4946     - segs = skb_segment(skb, features | NETIF_F_HW_CSUM);
4947     + segs = skb_segment(skb, features | NETIF_F_HW_CSUM | NETIF_F_SG);
4948     if (IS_ERR(segs))
4949     goto out;
4950    
4951     diff --git a/net/sctp/socket.c b/net/sctp/socket.c
4952     index 14346dccc4fe..e1719c695174 100644
4953     --- a/net/sctp/socket.c
4954     +++ b/net/sctp/socket.c
4955     @@ -235,8 +235,12 @@ static struct sctp_transport *sctp_addr_id2transport(struct sock *sk,
4956     sctp_assoc_t id)
4957     {
4958     struct sctp_association *addr_asoc = NULL, *id_asoc = NULL;
4959     - struct sctp_transport *transport;
4960     + struct sctp_af *af = sctp_get_af_specific(addr->ss_family);
4961     union sctp_addr *laddr = (union sctp_addr *)addr;
4962     + struct sctp_transport *transport;
4963     +
4964     + if (sctp_verify_addr(sk, laddr, af->sockaddr_len))
4965     + return NULL;
4966    
4967     addr_asoc = sctp_endpoint_lookup_assoc(sctp_sk(sk)->ep,
4968     laddr,
4969     diff --git a/net/tipc/net.c b/net/tipc/net.c
4970     index 28bf4feeb81c..ab8a2d5d1e32 100644
4971     --- a/net/tipc/net.c
4972     +++ b/net/tipc/net.c
4973     @@ -110,6 +110,10 @@ int tipc_net_start(struct net *net, u32 addr)
4974     char addr_string[16];
4975    
4976     tn->own_addr = addr;
4977     +
4978     + /* Ensure that the new address is visible before we reinit. */
4979     + smp_mb();
4980     +
4981     tipc_named_reinit(net);
4982     tipc_sk_reinit(net);
4983    
4984     diff --git a/net/tipc/node.c b/net/tipc/node.c
4985     index 9d2f4c2b08ab..27753325e06e 100644
4986     --- a/net/tipc/node.c
4987     +++ b/net/tipc/node.c
4988     @@ -263,6 +263,11 @@ static void tipc_node_write_lock(struct tipc_node *n)
4989     write_lock_bh(&n->lock);
4990     }
4991    
4992     +static void tipc_node_write_unlock_fast(struct tipc_node *n)
4993     +{
4994     + write_unlock_bh(&n->lock);
4995     +}
4996     +
4997     static void tipc_node_write_unlock(struct tipc_node *n)
4998     {
4999     struct net *net = n->net;
5000     @@ -417,7 +422,7 @@ void tipc_node_subscribe(struct net *net, struct list_head *subscr, u32 addr)
5001     }
5002     tipc_node_write_lock(n);
5003     list_add_tail(subscr, &n->publ_list);
5004     - tipc_node_write_unlock(n);
5005     + tipc_node_write_unlock_fast(n);
5006     tipc_node_put(n);
5007     }
5008    
5009     @@ -435,7 +440,7 @@ void tipc_node_unsubscribe(struct net *net, struct list_head *subscr, u32 addr)
5010     }
5011     tipc_node_write_lock(n);
5012     list_del_init(subscr);
5013     - tipc_node_write_unlock(n);
5014     + tipc_node_write_unlock_fast(n);
5015     tipc_node_put(n);
5016     }
5017    
5018     diff --git a/net/tipc/server.c b/net/tipc/server.c
5019     index 215849ce453d..f89c0c2e8c16 100644
5020     --- a/net/tipc/server.c
5021     +++ b/net/tipc/server.c
5022     @@ -91,7 +91,8 @@ static void tipc_sock_release(struct tipc_conn *con);
5023     static void tipc_conn_kref_release(struct kref *kref)
5024     {
5025     struct tipc_conn *con = container_of(kref, struct tipc_conn, kref);
5026     - struct sockaddr_tipc *saddr = con->server->saddr;
5027     + struct tipc_server *s = con->server;
5028     + struct sockaddr_tipc *saddr = s->saddr;
5029     struct socket *sock = con->sock;
5030     struct sock *sk;
5031    
5032     @@ -106,6 +107,11 @@ static void tipc_conn_kref_release(struct kref *kref)
5033     tipc_sock_release(con);
5034     sock_release(sock);
5035     con->sock = NULL;
5036     +
5037     + spin_lock_bh(&s->idr_lock);
5038     + idr_remove(&s->conn_idr, con->conid);
5039     + s->idr_in_use--;
5040     + spin_unlock_bh(&s->idr_lock);
5041     }
5042    
5043     tipc_clean_outqueues(con);
5044     @@ -128,8 +134,10 @@ static struct tipc_conn *tipc_conn_lookup(struct tipc_server *s, int conid)
5045    
5046     spin_lock_bh(&s->idr_lock);
5047     con = idr_find(&s->conn_idr, conid);
5048     - if (con)
5049     + if (con && test_bit(CF_CONNECTED, &con->flags))
5050     conn_get(con);
5051     + else
5052     + con = NULL;
5053     spin_unlock_bh(&s->idr_lock);
5054     return con;
5055     }
5056     @@ -198,15 +206,8 @@ static void tipc_sock_release(struct tipc_conn *con)
5057    
5058     static void tipc_close_conn(struct tipc_conn *con)
5059     {
5060     - struct tipc_server *s = con->server;
5061     -
5062     if (test_and_clear_bit(CF_CONNECTED, &con->flags)) {
5063    
5064     - spin_lock_bh(&s->idr_lock);
5065     - idr_remove(&s->conn_idr, con->conid);
5066     - s->idr_in_use--;
5067     - spin_unlock_bh(&s->idr_lock);
5068     -
5069     /* We shouldn't flush pending works as we may be in the
5070     * thread. In fact the races with pending rx/tx work structs
5071     * are harmless for us here as we have already deleted this
5072     @@ -458,6 +459,11 @@ int tipc_conn_sendmsg(struct tipc_server *s, int conid,
5073     if (!con)
5074     return -EINVAL;
5075    
5076     + if (!test_bit(CF_CONNECTED, &con->flags)) {
5077     + conn_put(con);
5078     + return 0;
5079     + }
5080     +
5081     e = tipc_alloc_entry(data, len);
5082     if (!e) {
5083     conn_put(con);
5084     @@ -471,12 +477,8 @@ int tipc_conn_sendmsg(struct tipc_server *s, int conid,
5085     list_add_tail(&e->list, &con->outqueue);
5086     spin_unlock_bh(&con->outqueue_lock);
5087    
5088     - if (test_bit(CF_CONNECTED, &con->flags)) {
5089     - if (!queue_work(s->send_wq, &con->swork))
5090     - conn_put(con);
5091     - } else {
5092     + if (!queue_work(s->send_wq, &con->swork))
5093     conn_put(con);
5094     - }
5095     return 0;
5096     }
5097    
5098     @@ -500,7 +502,7 @@ static void tipc_send_to_sock(struct tipc_conn *con)
5099     int ret;
5100    
5101     spin_lock_bh(&con->outqueue_lock);
5102     - while (1) {
5103     + while (test_bit(CF_CONNECTED, &con->flags)) {
5104     e = list_entry(con->outqueue.next, struct outqueue_entry,
5105     list);
5106     if ((struct list_head *) e == &con->outqueue)
5107     diff --git a/net/tipc/socket.c b/net/tipc/socket.c
5108     index 41f013888f07..25bc5c30d7fb 100644
5109     --- a/net/tipc/socket.c
5110     +++ b/net/tipc/socket.c
5111     @@ -335,8 +335,6 @@ static int tipc_sk_create(struct net *net, struct socket *sock,
5112     INIT_LIST_HEAD(&tsk->publications);
5113     msg = &tsk->phdr;
5114     tn = net_generic(sock_net(sk), tipc_net_id);
5115     - tipc_msg_init(tn->own_addr, msg, TIPC_LOW_IMPORTANCE, TIPC_NAMED_MSG,
5116     - NAMED_H_SIZE, 0);
5117    
5118     /* Finish initializing socket data structures */
5119     sock->ops = ops;
5120     @@ -346,6 +344,13 @@ static int tipc_sk_create(struct net *net, struct socket *sock,
5121     pr_warn("Socket create failed; port number exhausted\n");
5122     return -EINVAL;
5123     }
5124     +
5125     + /* Ensure tsk is visible before we read own_addr. */
5126     + smp_mb();
5127     +
5128     + tipc_msg_init(tn->own_addr, msg, TIPC_LOW_IMPORTANCE, TIPC_NAMED_MSG,
5129     + NAMED_H_SIZE, 0);
5130     +
5131     msg_set_origport(msg, tsk->portid);
5132     setup_timer(&sk->sk_timer, tipc_sk_timeout, (unsigned long)tsk);
5133     sk->sk_backlog_rcv = tipc_backlog_rcv;
5134     @@ -2264,24 +2269,27 @@ static int tipc_sk_withdraw(struct tipc_sock *tsk, uint scope,
5135     void tipc_sk_reinit(struct net *net)
5136     {
5137     struct tipc_net *tn = net_generic(net, tipc_net_id);
5138     - const struct bucket_table *tbl;
5139     - struct rhash_head *pos;
5140     + struct rhashtable_iter iter;
5141     struct tipc_sock *tsk;
5142     struct tipc_msg *msg;
5143     - int i;
5144    
5145     - rcu_read_lock();
5146     - tbl = rht_dereference_rcu((&tn->sk_rht)->tbl, &tn->sk_rht);
5147     - for (i = 0; i < tbl->size; i++) {
5148     - rht_for_each_entry_rcu(tsk, pos, tbl, i, node) {
5149     + rhashtable_walk_enter(&tn->sk_rht, &iter);
5150     +
5151     + do {
5152     + tsk = ERR_PTR(rhashtable_walk_start(&iter));
5153     + if (tsk)
5154     + continue;
5155     +
5156     + while ((tsk = rhashtable_walk_next(&iter)) && !IS_ERR(tsk)) {
5157     spin_lock_bh(&tsk->sk.sk_lock.slock);
5158     msg = &tsk->phdr;
5159     msg_set_prevnode(msg, tn->own_addr);
5160     msg_set_orignode(msg, tn->own_addr);
5161     spin_unlock_bh(&tsk->sk.sk_lock.slock);
5162     }
5163     - }
5164     - rcu_read_unlock();
5165     +
5166     + rhashtable_walk_stop(&iter);
5167     + } while (tsk == ERR_PTR(-EAGAIN));
5168     }
5169    
5170     static struct tipc_sock *tipc_sk_lookup(struct net *net, u32 portid)
5171     diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
5172     index 0dd02244e21d..9d94e65d0894 100644
5173     --- a/net/tipc/subscr.c
5174     +++ b/net/tipc/subscr.c
5175     @@ -54,6 +54,8 @@ struct tipc_subscriber {
5176    
5177     static void tipc_subscrp_delete(struct tipc_subscription *sub);
5178     static void tipc_subscrb_put(struct tipc_subscriber *subscriber);
5179     +static void tipc_subscrp_put(struct tipc_subscription *subscription);
5180     +static void tipc_subscrp_get(struct tipc_subscription *subscription);
5181    
5182     /**
5183     * htohl - convert value to endianness used by destination
5184     @@ -123,6 +125,7 @@ void tipc_subscrp_report_overlap(struct tipc_subscription *sub, u32 found_lower,
5185     {
5186     struct tipc_name_seq seq;
5187    
5188     + tipc_subscrp_get(sub);
5189     tipc_subscrp_convert_seq(&sub->evt.s.seq, sub->swap, &seq);
5190     if (!tipc_subscrp_check_overlap(&seq, found_lower, found_upper))
5191     return;
5192     @@ -132,30 +135,23 @@ void tipc_subscrp_report_overlap(struct tipc_subscription *sub, u32 found_lower,
5193    
5194     tipc_subscrp_send_event(sub, found_lower, found_upper, event, port_ref,
5195     node);
5196     + tipc_subscrp_put(sub);
5197     }
5198    
5199     static void tipc_subscrp_timeout(unsigned long data)
5200     {
5201     struct tipc_subscription *sub = (struct tipc_subscription *)data;
5202     - struct tipc_subscriber *subscriber = sub->subscriber;
5203    
5204     /* Notify subscriber of timeout */
5205     tipc_subscrp_send_event(sub, sub->evt.s.seq.lower, sub->evt.s.seq.upper,
5206     TIPC_SUBSCR_TIMEOUT, 0, 0);
5207    
5208     - spin_lock_bh(&subscriber->lock);
5209     - tipc_subscrp_delete(sub);
5210     - spin_unlock_bh(&subscriber->lock);
5211     -
5212     - tipc_subscrb_put(subscriber);
5213     + tipc_subscrp_put(sub);
5214     }
5215    
5216     static void tipc_subscrb_kref_release(struct kref *kref)
5217     {
5218     - struct tipc_subscriber *subcriber = container_of(kref,
5219     - struct tipc_subscriber, kref);
5220     -
5221     - kfree(subcriber);
5222     + kfree(container_of(kref,struct tipc_subscriber, kref));
5223     }
5224    
5225     static void tipc_subscrb_put(struct tipc_subscriber *subscriber)
5226     @@ -168,6 +164,59 @@ static void tipc_subscrb_get(struct tipc_subscriber *subscriber)
5227     kref_get(&subscriber->kref);
5228     }
5229    
5230     +static void tipc_subscrp_kref_release(struct kref *kref)
5231     +{
5232     + struct tipc_subscription *sub = container_of(kref,
5233     + struct tipc_subscription,
5234     + kref);
5235     + struct tipc_net *tn = net_generic(sub->net, tipc_net_id);
5236     + struct tipc_subscriber *subscriber = sub->subscriber;
5237     +
5238     + spin_lock_bh(&subscriber->lock);
5239     + tipc_nametbl_unsubscribe(sub);
5240     + list_del(&sub->subscrp_list);
5241     + atomic_dec(&tn->subscription_count);
5242     + spin_unlock_bh(&subscriber->lock);
5243     + kfree(sub);
5244     + tipc_subscrb_put(subscriber);
5245     +}
5246     +
5247     +static void tipc_subscrp_put(struct tipc_subscription *subscription)
5248     +{
5249     + kref_put(&subscription->kref, tipc_subscrp_kref_release);
5250     +}
5251     +
5252     +static void tipc_subscrp_get(struct tipc_subscription *subscription)
5253     +{
5254     + kref_get(&subscription->kref);
5255     +}
5256     +
5257     +/* tipc_subscrb_subscrp_delete - delete a specific subscription or all
5258     + * subscriptions for a given subscriber.
5259     + */
5260     +static void tipc_subscrb_subscrp_delete(struct tipc_subscriber *subscriber,
5261     + struct tipc_subscr *s)
5262     +{
5263     + struct list_head *subscription_list = &subscriber->subscrp_list;
5264     + struct tipc_subscription *sub, *temp;
5265     +
5266     + spin_lock_bh(&subscriber->lock);
5267     + list_for_each_entry_safe(sub, temp, subscription_list, subscrp_list) {
5268     + if (s && memcmp(s, &sub->evt.s, sizeof(struct tipc_subscr)))
5269     + continue;
5270     +
5271     + tipc_subscrp_get(sub);
5272     + spin_unlock_bh(&subscriber->lock);
5273     + tipc_subscrp_delete(sub);
5274     + tipc_subscrp_put(sub);
5275     + spin_lock_bh(&subscriber->lock);
5276     +
5277     + if (s)
5278     + break;
5279     + }
5280     + spin_unlock_bh(&subscriber->lock);
5281     +}
5282     +
5283     static struct tipc_subscriber *tipc_subscrb_create(int conid)
5284     {
5285     struct tipc_subscriber *subscriber;
5286     @@ -177,8 +226,8 @@ static struct tipc_subscriber *tipc_subscrb_create(int conid)
5287     pr_warn("Subscriber rejected, no memory\n");
5288     return NULL;
5289     }
5290     - kref_init(&subscriber->kref);
5291     INIT_LIST_HEAD(&subscriber->subscrp_list);
5292     + kref_init(&subscriber->kref);
5293     subscriber->conid = conid;
5294     spin_lock_init(&subscriber->lock);
5295    
5296     @@ -187,55 +236,22 @@ static struct tipc_subscriber *tipc_subscrb_create(int conid)
5297    
5298     static void tipc_subscrb_delete(struct tipc_subscriber *subscriber)
5299     {
5300     - struct tipc_subscription *sub, *temp;
5301     - u32 timeout;
5302     -
5303     - spin_lock_bh(&subscriber->lock);
5304     - /* Destroy any existing subscriptions for subscriber */
5305     - list_for_each_entry_safe(sub, temp, &subscriber->subscrp_list,
5306     - subscrp_list) {
5307     - timeout = htohl(sub->evt.s.timeout, sub->swap);
5308     - if ((timeout == TIPC_WAIT_FOREVER) || del_timer(&sub->timer)) {
5309     - tipc_subscrp_delete(sub);
5310     - tipc_subscrb_put(subscriber);
5311     - }
5312     - }
5313     - spin_unlock_bh(&subscriber->lock);
5314     -
5315     + tipc_subscrb_subscrp_delete(subscriber, NULL);
5316     tipc_subscrb_put(subscriber);
5317     }
5318    
5319     static void tipc_subscrp_delete(struct tipc_subscription *sub)
5320     {
5321     - struct tipc_net *tn = net_generic(sub->net, tipc_net_id);
5322     + u32 timeout = htohl(sub->evt.s.timeout, sub->swap);
5323    
5324     - tipc_nametbl_unsubscribe(sub);
5325     - list_del(&sub->subscrp_list);
5326     - kfree(sub);
5327     - atomic_dec(&tn->subscription_count);
5328     + if (timeout == TIPC_WAIT_FOREVER || del_timer(&sub->timer))
5329     + tipc_subscrp_put(sub);
5330     }
5331    
5332     static void tipc_subscrp_cancel(struct tipc_subscr *s,
5333     struct tipc_subscriber *subscriber)
5334     {
5335     - struct tipc_subscription *sub, *temp;
5336     - u32 timeout;
5337     -
5338     - spin_lock_bh(&subscriber->lock);
5339     - /* Find first matching subscription, exit if not found */
5340     - list_for_each_entry_safe(sub, temp, &subscriber->subscrp_list,
5341     - subscrp_list) {
5342     - if (!memcmp(s, &sub->evt.s, sizeof(struct tipc_subscr))) {
5343     - timeout = htohl(sub->evt.s.timeout, sub->swap);
5344     - if ((timeout == TIPC_WAIT_FOREVER) ||
5345     - del_timer(&sub->timer)) {
5346     - tipc_subscrp_delete(sub);
5347     - tipc_subscrb_put(subscriber);
5348     - }
5349     - break;
5350     - }
5351     - }
5352     - spin_unlock_bh(&subscriber->lock);
5353     + tipc_subscrb_subscrp_delete(subscriber, s);
5354     }
5355    
5356     static struct tipc_subscription *tipc_subscrp_create(struct net *net,
5357     @@ -272,6 +288,7 @@ static struct tipc_subscription *tipc_subscrp_create(struct net *net,
5358     sub->swap = swap;
5359     memcpy(&sub->evt.s, s, sizeof(*s));
5360     atomic_inc(&tn->subscription_count);
5361     + kref_init(&sub->kref);
5362     return sub;
5363     }
5364    
5365     @@ -288,17 +305,16 @@ static void tipc_subscrp_subscribe(struct net *net, struct tipc_subscr *s,
5366    
5367     spin_lock_bh(&subscriber->lock);
5368     list_add(&sub->subscrp_list, &subscriber->subscrp_list);
5369     - tipc_subscrb_get(subscriber);
5370     sub->subscriber = subscriber;
5371     tipc_nametbl_subscribe(sub);
5372     + tipc_subscrb_get(subscriber);
5373     spin_unlock_bh(&subscriber->lock);
5374    
5375     + setup_timer(&sub->timer, tipc_subscrp_timeout, (unsigned long)sub);
5376     timeout = htohl(sub->evt.s.timeout, swap);
5377     - if (timeout == TIPC_WAIT_FOREVER)
5378     - return;
5379    
5380     - setup_timer(&sub->timer, tipc_subscrp_timeout, (unsigned long)sub);
5381     - mod_timer(&sub->timer, jiffies + msecs_to_jiffies(timeout));
5382     + if (timeout != TIPC_WAIT_FOREVER)
5383     + mod_timer(&sub->timer, jiffies + msecs_to_jiffies(timeout));
5384     }
5385    
5386     /* Handle one termination request for the subscriber */
5387     diff --git a/net/tipc/subscr.h b/net/tipc/subscr.h
5388     index be60103082c9..ffdc214c117a 100644
5389     --- a/net/tipc/subscr.h
5390     +++ b/net/tipc/subscr.h
5391     @@ -57,6 +57,7 @@ struct tipc_subscriber;
5392     * @evt: template for events generated by subscription
5393     */
5394     struct tipc_subscription {
5395     + struct kref kref;
5396     struct tipc_subscriber *subscriber;
5397     struct net *net;
5398     struct timer_list timer;