Magellan Linux

Contents 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 - (show 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 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;