Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.5/0101-4.5.2-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2783 - (show annotations) (download)
Fri May 13 07:36:22 2016 UTC (7 years, 11 months ago) by niro
File size: 171097 byte(s)
-linux-4.5.2
1 diff --git a/Documentation/devicetree/bindings/pinctrl/img,pistachio-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/img,pistachio-pinctrl.txt
2 index 08a4a32c8eb0..0326154c7925 100644
3 --- a/Documentation/devicetree/bindings/pinctrl/img,pistachio-pinctrl.txt
4 +++ b/Documentation/devicetree/bindings/pinctrl/img,pistachio-pinctrl.txt
5 @@ -134,12 +134,12 @@ mfio80 ddr_debug, mips_trace_data, mips_debug
6 mfio81 dreq0, mips_trace_data, eth_debug
7 mfio82 dreq1, mips_trace_data, eth_debug
8 mfio83 mips_pll_lock, mips_trace_data, usb_debug
9 -mfio84 sys_pll_lock, mips_trace_data, usb_debug
10 -mfio85 wifi_pll_lock, mips_trace_data, sdhost_debug
11 -mfio86 bt_pll_lock, mips_trace_data, sdhost_debug
12 -mfio87 rpu_v_pll_lock, dreq2, socif_debug
13 -mfio88 rpu_l_pll_lock, dreq3, socif_debug
14 -mfio89 audio_pll_lock, dreq4, dreq5
15 +mfio84 audio_pll_lock, mips_trace_data, usb_debug
16 +mfio85 rpu_v_pll_lock, mips_trace_data, sdhost_debug
17 +mfio86 rpu_l_pll_lock, mips_trace_data, sdhost_debug
18 +mfio87 sys_pll_lock, dreq2, socif_debug
19 +mfio88 wifi_pll_lock, dreq3, socif_debug
20 +mfio89 bt_pll_lock, dreq4, dreq5
21 tck
22 trstn
23 tdi
24 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
25 index 9a53c929f017..21e4b4861331 100644
26 --- a/Documentation/kernel-parameters.txt
27 +++ b/Documentation/kernel-parameters.txt
28 @@ -4016,6 +4016,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
29 sector if the number is odd);
30 i = IGNORE_DEVICE (don't bind to this
31 device);
32 + j = NO_REPORT_LUNS (don't use report luns
33 + command, uas only);
34 l = NOT_LOCKABLE (don't try to lock and
35 unlock ejectable media);
36 m = MAX_SECTORS_64 (don't transfer more
37 diff --git a/Makefile b/Makefile
38 index c621889b8827..1ecaaeb7791d 100644
39 --- a/Makefile
40 +++ b/Makefile
41 @@ -1,6 +1,6 @@
42 VERSION = 4
43 PATCHLEVEL = 5
44 -SUBLEVEL = 1
45 +SUBLEVEL = 2
46 EXTRAVERSION =
47 NAME = Blurry Fish Butt
48
49 diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
50 index 7d0cba6f1cc5..c86ea8aac203 100644
51 --- a/arch/arm/kernel/setup.c
52 +++ b/arch/arm/kernel/setup.c
53 @@ -430,11 +430,13 @@ static void __init patch_aeabi_idiv(void)
54 pr_info("CPU: div instructions available: patching division code\n");
55
56 fn_addr = ((uintptr_t)&__aeabi_uidiv) & ~1;
57 + asm ("" : "+g" (fn_addr));
58 ((u32 *)fn_addr)[0] = udiv_instruction();
59 ((u32 *)fn_addr)[1] = bx_lr_instruction();
60 flush_icache_range(fn_addr, fn_addr + 8);
61
62 fn_addr = ((uintptr_t)&__aeabi_idiv) & ~1;
63 + asm ("" : "+g" (fn_addr));
64 ((u32 *)fn_addr)[0] = sdiv_instruction();
65 ((u32 *)fn_addr)[1] = bx_lr_instruction();
66 flush_icache_range(fn_addr, fn_addr + 8);
67 diff --git a/arch/arm64/include/asm/opcodes.h b/arch/arm64/include/asm/opcodes.h
68 index 4e603ea36ad3..123f45d92cd1 100644
69 --- a/arch/arm64/include/asm/opcodes.h
70 +++ b/arch/arm64/include/asm/opcodes.h
71 @@ -1 +1,5 @@
72 +#ifdef CONFIG_CPU_BIG_ENDIAN
73 +#define CONFIG_CPU_ENDIAN_BE8 CONFIG_CPU_BIG_ENDIAN
74 +#endif
75 +
76 #include <../../arm/include/asm/opcodes.h>
77 diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c
78 index c536c9e307b9..0931155f6406 100644
79 --- a/arch/arm64/kernel/debug-monitors.c
80 +++ b/arch/arm64/kernel/debug-monitors.c
81 @@ -186,20 +186,21 @@ static void clear_regs_spsr_ss(struct pt_regs *regs)
82
83 /* EL1 Single Step Handler hooks */
84 static LIST_HEAD(step_hook);
85 -static DEFINE_RWLOCK(step_hook_lock);
86 +static DEFINE_SPINLOCK(step_hook_lock);
87
88 void register_step_hook(struct step_hook *hook)
89 {
90 - write_lock(&step_hook_lock);
91 - list_add(&hook->node, &step_hook);
92 - write_unlock(&step_hook_lock);
93 + spin_lock(&step_hook_lock);
94 + list_add_rcu(&hook->node, &step_hook);
95 + spin_unlock(&step_hook_lock);
96 }
97
98 void unregister_step_hook(struct step_hook *hook)
99 {
100 - write_lock(&step_hook_lock);
101 - list_del(&hook->node);
102 - write_unlock(&step_hook_lock);
103 + spin_lock(&step_hook_lock);
104 + list_del_rcu(&hook->node);
105 + spin_unlock(&step_hook_lock);
106 + synchronize_rcu();
107 }
108
109 /*
110 @@ -213,15 +214,15 @@ static int call_step_hook(struct pt_regs *regs, unsigned int esr)
111 struct step_hook *hook;
112 int retval = DBG_HOOK_ERROR;
113
114 - read_lock(&step_hook_lock);
115 + rcu_read_lock();
116
117 - list_for_each_entry(hook, &step_hook, node) {
118 + list_for_each_entry_rcu(hook, &step_hook, node) {
119 retval = hook->fn(regs, esr);
120 if (retval == DBG_HOOK_HANDLED)
121 break;
122 }
123
124 - read_unlock(&step_hook_lock);
125 + rcu_read_unlock();
126
127 return retval;
128 }
129 diff --git a/arch/mips/alchemy/devboards/db1000.c b/arch/mips/alchemy/devboards/db1000.c
130 index bdeed9d13c6f..433c4b9a9f0a 100644
131 --- a/arch/mips/alchemy/devboards/db1000.c
132 +++ b/arch/mips/alchemy/devboards/db1000.c
133 @@ -503,15 +503,15 @@ int __init db1000_dev_setup(void)
134 if (board == BCSR_WHOAMI_DB1500) {
135 c0 = AU1500_GPIO2_INT;
136 c1 = AU1500_GPIO5_INT;
137 - d0 = AU1500_GPIO0_INT;
138 - d1 = AU1500_GPIO3_INT;
139 + d0 = 0; /* GPIO number, NOT irq! */
140 + d1 = 3; /* GPIO number, NOT irq! */
141 s0 = AU1500_GPIO1_INT;
142 s1 = AU1500_GPIO4_INT;
143 } else if (board == BCSR_WHOAMI_DB1100) {
144 c0 = AU1100_GPIO2_INT;
145 c1 = AU1100_GPIO5_INT;
146 - d0 = AU1100_GPIO0_INT;
147 - d1 = AU1100_GPIO3_INT;
148 + d0 = 0; /* GPIO number, NOT irq! */
149 + d1 = 3; /* GPIO number, NOT irq! */
150 s0 = AU1100_GPIO1_INT;
151 s1 = AU1100_GPIO4_INT;
152
153 @@ -545,15 +545,15 @@ int __init db1000_dev_setup(void)
154 } else if (board == BCSR_WHOAMI_DB1000) {
155 c0 = AU1000_GPIO2_INT;
156 c1 = AU1000_GPIO5_INT;
157 - d0 = AU1000_GPIO0_INT;
158 - d1 = AU1000_GPIO3_INT;
159 + d0 = 0; /* GPIO number, NOT irq! */
160 + d1 = 3; /* GPIO number, NOT irq! */
161 s0 = AU1000_GPIO1_INT;
162 s1 = AU1000_GPIO4_INT;
163 platform_add_devices(db1000_devs, ARRAY_SIZE(db1000_devs));
164 } else if ((board == BCSR_WHOAMI_PB1500) ||
165 (board == BCSR_WHOAMI_PB1500R2)) {
166 c0 = AU1500_GPIO203_INT;
167 - d0 = AU1500_GPIO201_INT;
168 + d0 = 1; /* GPIO number, NOT irq! */
169 s0 = AU1500_GPIO202_INT;
170 twosocks = 0;
171 flashsize = 64;
172 @@ -566,7 +566,7 @@ int __init db1000_dev_setup(void)
173 */
174 } else if (board == BCSR_WHOAMI_PB1100) {
175 c0 = AU1100_GPIO11_INT;
176 - d0 = AU1100_GPIO9_INT;
177 + d0 = 9; /* GPIO number, NOT irq! */
178 s0 = AU1100_GPIO10_INT;
179 twosocks = 0;
180 flashsize = 64;
181 @@ -583,7 +583,6 @@ int __init db1000_dev_setup(void)
182 } else
183 return 0; /* unknown board, no further dev setup to do */
184
185 - irq_set_irq_type(d0, IRQ_TYPE_EDGE_BOTH);
186 irq_set_irq_type(c0, IRQ_TYPE_LEVEL_LOW);
187 irq_set_irq_type(s0, IRQ_TYPE_LEVEL_LOW);
188
189 @@ -597,7 +596,6 @@ int __init db1000_dev_setup(void)
190 c0, d0, /*s0*/0, 0, 0);
191
192 if (twosocks) {
193 - irq_set_irq_type(d1, IRQ_TYPE_EDGE_BOTH);
194 irq_set_irq_type(c1, IRQ_TYPE_LEVEL_LOW);
195 irq_set_irq_type(s1, IRQ_TYPE_LEVEL_LOW);
196
197 diff --git a/arch/mips/alchemy/devboards/db1550.c b/arch/mips/alchemy/devboards/db1550.c
198 index b518f029f5e7..1c01d6eadb08 100644
199 --- a/arch/mips/alchemy/devboards/db1550.c
200 +++ b/arch/mips/alchemy/devboards/db1550.c
201 @@ -514,7 +514,7 @@ static void __init db1550_devices(void)
202 AU1000_PCMCIA_MEM_PHYS_ADDR + 0x000400000 - 1,
203 AU1000_PCMCIA_IO_PHYS_ADDR,
204 AU1000_PCMCIA_IO_PHYS_ADDR + 0x000010000 - 1,
205 - AU1550_GPIO3_INT, AU1550_GPIO0_INT,
206 + AU1550_GPIO3_INT, 0,
207 /*AU1550_GPIO21_INT*/0, 0, 0);
208
209 db1x_register_pcmcia_socket(
210 @@ -524,7 +524,7 @@ static void __init db1550_devices(void)
211 AU1000_PCMCIA_MEM_PHYS_ADDR + 0x004400000 - 1,
212 AU1000_PCMCIA_IO_PHYS_ADDR + 0x004000000,
213 AU1000_PCMCIA_IO_PHYS_ADDR + 0x004010000 - 1,
214 - AU1550_GPIO5_INT, AU1550_GPIO1_INT,
215 + AU1550_GPIO5_INT, 1,
216 /*AU1550_GPIO22_INT*/0, 0, 1);
217
218 platform_device_register(&db1550_nand_dev);
219 diff --git a/arch/mips/kernel/unaligned.c b/arch/mips/kernel/unaligned.c
220 index 490cea569d57..5c62065cbf22 100644
221 --- a/arch/mips/kernel/unaligned.c
222 +++ b/arch/mips/kernel/unaligned.c
223 @@ -885,7 +885,7 @@ static void emulate_load_store_insn(struct pt_regs *regs,
224 {
225 union mips_instruction insn;
226 unsigned long value;
227 - unsigned int res;
228 + unsigned int res, preempted;
229 unsigned long origpc;
230 unsigned long orig31;
231 void __user *fault_addr = NULL;
232 @@ -1226,27 +1226,36 @@ static void emulate_load_store_insn(struct pt_regs *regs,
233 if (!access_ok(VERIFY_READ, addr, sizeof(*fpr)))
234 goto sigbus;
235
236 - /*
237 - * Disable preemption to avoid a race between copying
238 - * state from userland, migrating to another CPU and
239 - * updating the hardware vector register below.
240 - */
241 - preempt_disable();
242 -
243 - res = __copy_from_user_inatomic(fpr, addr,
244 - sizeof(*fpr));
245 - if (res)
246 - goto fault;
247 -
248 - /*
249 - * Update the hardware register if it is in use by the
250 - * task in this quantum, in order to avoid having to
251 - * save & restore the whole vector context.
252 - */
253 - if (test_thread_flag(TIF_USEDMSA))
254 - write_msa_wr(wd, fpr, df);
255 + do {
256 + /*
257 + * If we have live MSA context keep track of
258 + * whether we get preempted in order to avoid
259 + * the register context we load being clobbered
260 + * by the live context as it's saved during
261 + * preemption. If we don't have live context
262 + * then it can't be saved to clobber the value
263 + * we load.
264 + */
265 + preempted = test_thread_flag(TIF_USEDMSA);
266 +
267 + res = __copy_from_user_inatomic(fpr, addr,
268 + sizeof(*fpr));
269 + if (res)
270 + goto fault;
271
272 - preempt_enable();
273 + /*
274 + * Update the hardware register if it is in use
275 + * by the task in this quantum, in order to
276 + * avoid having to save & restore the whole
277 + * vector context.
278 + */
279 + preempt_disable();
280 + if (test_thread_flag(TIF_USEDMSA)) {
281 + write_msa_wr(wd, fpr, df);
282 + preempted = 0;
283 + }
284 + preempt_enable();
285 + } while (preempted);
286 break;
287
288 case msa_st_op:
289 diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig
290 index 14f655cf542e..86ed37671ef5 100644
291 --- a/arch/parisc/Kconfig
292 +++ b/arch/parisc/Kconfig
293 @@ -29,6 +29,7 @@ config PARISC
294 select TTY # Needed for pdc_cons.c
295 select HAVE_DEBUG_STACKOVERFLOW
296 select HAVE_ARCH_AUDITSYSCALL
297 + select HAVE_ARCH_SECCOMP_FILTER
298 select ARCH_NO_COHERENT_DMA_MMAP
299
300 help
301 diff --git a/arch/parisc/include/asm/compat.h b/arch/parisc/include/asm/compat.h
302 index 0448a2c8eafb..3387307cc33e 100644
303 --- a/arch/parisc/include/asm/compat.h
304 +++ b/arch/parisc/include/asm/compat.h
305 @@ -183,6 +183,13 @@ typedef struct compat_siginfo {
306 int _band; /* POLL_IN, POLL_OUT, POLL_MSG */
307 int _fd;
308 } _sigpoll;
309 +
310 + /* SIGSYS */
311 + struct {
312 + compat_uptr_t _call_addr; /* calling user insn */
313 + int _syscall; /* triggering system call number */
314 + compat_uint_t _arch; /* AUDIT_ARCH_* of syscall */
315 + } _sigsys;
316 } _sifields;
317 } compat_siginfo_t;
318
319 diff --git a/arch/parisc/include/asm/syscall.h b/arch/parisc/include/asm/syscall.h
320 index a5eba95d87fe..637ce8d6f375 100644
321 --- a/arch/parisc/include/asm/syscall.h
322 +++ b/arch/parisc/include/asm/syscall.h
323 @@ -39,6 +39,19 @@ static inline void syscall_get_arguments(struct task_struct *tsk,
324 }
325 }
326
327 +static inline void syscall_set_return_value(struct task_struct *task,
328 + struct pt_regs *regs,
329 + int error, long val)
330 +{
331 + regs->gr[28] = error ? error : val;
332 +}
333 +
334 +static inline void syscall_rollback(struct task_struct *task,
335 + struct pt_regs *regs)
336 +{
337 + /* do nothing */
338 +}
339 +
340 static inline int syscall_get_arch(void)
341 {
342 int arch = AUDIT_ARCH_PARISC;
343 diff --git a/arch/parisc/include/asm/uaccess.h b/arch/parisc/include/asm/uaccess.h
344 index 0abdd4c607ed..1960b87c1c8b 100644
345 --- a/arch/parisc/include/asm/uaccess.h
346 +++ b/arch/parisc/include/asm/uaccess.h
347 @@ -76,6 +76,7 @@ struct exception_table_entry {
348 */
349 struct exception_data {
350 unsigned long fault_ip;
351 + unsigned long fault_gp;
352 unsigned long fault_space;
353 unsigned long fault_addr;
354 };
355 diff --git a/arch/parisc/kernel/asm-offsets.c b/arch/parisc/kernel/asm-offsets.c
356 index d2f62570a7b1..78d30d2ea2d8 100644
357 --- a/arch/parisc/kernel/asm-offsets.c
358 +++ b/arch/parisc/kernel/asm-offsets.c
359 @@ -299,6 +299,7 @@ int main(void)
360 #endif
361 BLANK();
362 DEFINE(EXCDATA_IP, offsetof(struct exception_data, fault_ip));
363 + DEFINE(EXCDATA_GP, offsetof(struct exception_data, fault_gp));
364 DEFINE(EXCDATA_SPACE, offsetof(struct exception_data, fault_space));
365 DEFINE(EXCDATA_ADDR, offsetof(struct exception_data, fault_addr));
366 BLANK();
367 diff --git a/arch/parisc/kernel/parisc_ksyms.c b/arch/parisc/kernel/parisc_ksyms.c
368 index 568b2c61ea02..3cad8aadc69e 100644
369 --- a/arch/parisc/kernel/parisc_ksyms.c
370 +++ b/arch/parisc/kernel/parisc_ksyms.c
371 @@ -47,11 +47,11 @@ EXPORT_SYMBOL(__cmpxchg_u64);
372 EXPORT_SYMBOL(lclear_user);
373 EXPORT_SYMBOL(lstrnlen_user);
374
375 -/* Global fixups */
376 -extern void fixup_get_user_skip_1(void);
377 -extern void fixup_get_user_skip_2(void);
378 -extern void fixup_put_user_skip_1(void);
379 -extern void fixup_put_user_skip_2(void);
380 +/* Global fixups - defined as int to avoid creation of function pointers */
381 +extern int fixup_get_user_skip_1;
382 +extern int fixup_get_user_skip_2;
383 +extern int fixup_put_user_skip_1;
384 +extern int fixup_put_user_skip_2;
385 EXPORT_SYMBOL(fixup_get_user_skip_1);
386 EXPORT_SYMBOL(fixup_get_user_skip_2);
387 EXPORT_SYMBOL(fixup_put_user_skip_1);
388 diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c
389 index ce0b2b4075c7..8fb81a391599 100644
390 --- a/arch/parisc/kernel/ptrace.c
391 +++ b/arch/parisc/kernel/ptrace.c
392 @@ -270,7 +270,8 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
393 long do_syscall_trace_enter(struct pt_regs *regs)
394 {
395 /* Do the secure computing check first. */
396 - secure_computing_strict(regs->gr[20]);
397 + if (secure_computing() == -1)
398 + return -1;
399
400 if (test_thread_flag(TIF_SYSCALL_TRACE) &&
401 tracehook_report_syscall_entry(regs)) {
402 @@ -296,7 +297,11 @@ long do_syscall_trace_enter(struct pt_regs *regs)
403 regs->gr[23] & 0xffffffff);
404
405 out:
406 - return regs->gr[20];
407 + /*
408 + * Sign extend the syscall number to 64bit since it may have been
409 + * modified by a compat ptrace call
410 + */
411 + return (int) ((u32) regs->gr[20]);
412 }
413
414 void do_syscall_trace_exit(struct pt_regs *regs)
415 diff --git a/arch/parisc/kernel/signal32.c b/arch/parisc/kernel/signal32.c
416 index 984abbee71ca..c342b2e17492 100644
417 --- a/arch/parisc/kernel/signal32.c
418 +++ b/arch/parisc/kernel/signal32.c
419 @@ -371,6 +371,11 @@ copy_siginfo_to_user32 (compat_siginfo_t __user *to, const siginfo_t *from)
420 val = (compat_int_t)from->si_int;
421 err |= __put_user(val, &to->si_int);
422 break;
423 + case __SI_SYS >> 16:
424 + err |= __put_user(ptr_to_compat(from->si_call_addr), &to->si_call_addr);
425 + err |= __put_user(from->si_syscall, &to->si_syscall);
426 + err |= __put_user(from->si_arch, &to->si_arch);
427 + break;
428 }
429 }
430 return err;
431 diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S
432 index fbafa0d0e2bf..c976ebfe2269 100644
433 --- a/arch/parisc/kernel/syscall.S
434 +++ b/arch/parisc/kernel/syscall.S
435 @@ -329,6 +329,7 @@ tracesys_next:
436
437 ldo -THREAD_SZ_ALGN-FRAME_SIZE(%r30),%r1 /* get task ptr */
438 LDREG TI_TASK(%r1), %r1
439 + LDREG TASK_PT_GR28(%r1), %r28 /* Restore return value */
440 LDREG TASK_PT_GR26(%r1), %r26 /* Restore the users args */
441 LDREG TASK_PT_GR25(%r1), %r25
442 LDREG TASK_PT_GR24(%r1), %r24
443 @@ -342,6 +343,7 @@ tracesys_next:
444 stw %r21, -56(%r30) /* 6th argument */
445 #endif
446
447 + cmpib,COND(=),n -1,%r20,tracesys_exit /* seccomp may have returned -1 */
448 comiclr,>>= __NR_Linux_syscalls, %r20, %r0
449 b,n .Ltracesys_nosys
450
451 diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c
452 index 553b09855cfd..77e2262c97f6 100644
453 --- a/arch/parisc/kernel/traps.c
454 +++ b/arch/parisc/kernel/traps.c
455 @@ -798,6 +798,9 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
456
457 if (fault_space == 0 && !faulthandler_disabled())
458 {
459 + /* Clean up and return if in exception table. */
460 + if (fixup_exception(regs))
461 + return;
462 pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
463 parisc_terminate("Kernel Fault", regs, code, fault_address);
464 }
465 diff --git a/arch/parisc/lib/fixup.S b/arch/parisc/lib/fixup.S
466 index 536ef66bb94b..1052b747e011 100644
467 --- a/arch/parisc/lib/fixup.S
468 +++ b/arch/parisc/lib/fixup.S
469 @@ -26,6 +26,7 @@
470
471 #ifdef CONFIG_SMP
472 .macro get_fault_ip t1 t2
473 + loadgp
474 addil LT%__per_cpu_offset,%r27
475 LDREG RT%__per_cpu_offset(%r1),\t1
476 /* t2 = smp_processor_id() */
477 @@ -40,14 +41,19 @@
478 LDREG RT%exception_data(%r1),\t1
479 /* t1 = this_cpu_ptr(&exception_data) */
480 add,l \t1,\t2,\t1
481 + /* %r27 = t1->fault_gp - restore gp */
482 + LDREG EXCDATA_GP(\t1), %r27
483 /* t1 = t1->fault_ip */
484 LDREG EXCDATA_IP(\t1), \t1
485 .endm
486 #else
487 .macro get_fault_ip t1 t2
488 + loadgp
489 /* t1 = this_cpu_ptr(&exception_data) */
490 addil LT%exception_data,%r27
491 LDREG RT%exception_data(%r1),\t2
492 + /* %r27 = t2->fault_gp - restore gp */
493 + LDREG EXCDATA_GP(\t2), %r27
494 /* t1 = t2->fault_ip */
495 LDREG EXCDATA_IP(\t2), \t1
496 .endm
497 diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
498 index a762864ec92e..f9064449908a 100644
499 --- a/arch/parisc/mm/fault.c
500 +++ b/arch/parisc/mm/fault.c
501 @@ -151,6 +151,7 @@ int fixup_exception(struct pt_regs *regs)
502 struct exception_data *d;
503 d = this_cpu_ptr(&exception_data);
504 d->fault_ip = regs->iaoq[0];
505 + d->fault_gp = regs->gr[27];
506 d->fault_space = regs->isr;
507 d->fault_addr = regs->ior;
508
509 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
510 index 3c5736e52a14..54ed9c7663e6 100644
511 --- a/arch/powerpc/kernel/process.c
512 +++ b/arch/powerpc/kernel/process.c
513 @@ -854,7 +854,7 @@ void restore_tm_state(struct pt_regs *regs)
514 static inline void save_sprs(struct thread_struct *t)
515 {
516 #ifdef CONFIG_ALTIVEC
517 - if (cpu_has_feature(cpu_has_feature(CPU_FTR_ALTIVEC)))
518 + if (cpu_has_feature(CPU_FTR_ALTIVEC))
519 t->vrsave = mfspr(SPRN_VRSAVE);
520 #endif
521 #ifdef CONFIG_PPC_BOOK3S_64
522 diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
523 index 744e24bcb85c..4a811ca7ac9d 100644
524 --- a/arch/powerpc/mm/hugetlbpage.c
525 +++ b/arch/powerpc/mm/hugetlbpage.c
526 @@ -414,13 +414,13 @@ static void hugepd_free(struct mmu_gather *tlb, void *hugepte)
527 {
528 struct hugepd_freelist **batchp;
529
530 - batchp = this_cpu_ptr(&hugepd_freelist_cur);
531 + batchp = &get_cpu_var(hugepd_freelist_cur);
532
533 if (atomic_read(&tlb->mm->mm_users) < 2 ||
534 cpumask_equal(mm_cpumask(tlb->mm),
535 cpumask_of(smp_processor_id()))) {
536 kmem_cache_free(hugepte_cache, hugepte);
537 - put_cpu_var(hugepd_freelist_cur);
538 + put_cpu_var(hugepd_freelist_cur);
539 return;
540 }
541
542 diff --git a/arch/s390/mm/gup.c b/arch/s390/mm/gup.c
543 index 13dab0c1645c..3776aca22082 100644
544 --- a/arch/s390/mm/gup.c
545 +++ b/arch/s390/mm/gup.c
546 @@ -20,9 +20,9 @@
547 static inline int gup_pte_range(pmd_t *pmdp, pmd_t pmd, unsigned long addr,
548 unsigned long end, int write, struct page **pages, int *nr)
549 {
550 + struct page *head, *page;
551 unsigned long mask;
552 pte_t *ptep, pte;
553 - struct page *page;
554
555 mask = (write ? _PAGE_PROTECT : 0) | _PAGE_INVALID | _PAGE_SPECIAL;
556
557 @@ -37,12 +37,14 @@ static inline int gup_pte_range(pmd_t *pmdp, pmd_t pmd, unsigned long addr,
558 return 0;
559 VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
560 page = pte_page(pte);
561 - if (!page_cache_get_speculative(page))
562 + head = compound_head(page);
563 + if (!page_cache_get_speculative(head))
564 return 0;
565 if (unlikely(pte_val(pte) != pte_val(*ptep))) {
566 - put_page(page);
567 + put_page(head);
568 return 0;
569 }
570 + VM_BUG_ON_PAGE(compound_head(page) != head, page);
571 pages[*nr] = page;
572 (*nr)++;
573
574 diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
575 index 44adbb819041..f8dba2097c40 100644
576 --- a/arch/x86/include/asm/kvm_host.h
577 +++ b/arch/x86/include/asm/kvm_host.h
578 @@ -42,7 +42,7 @@
579
580 #define KVM_PIO_PAGE_OFFSET 1
581 #define KVM_COALESCED_MMIO_PAGE_OFFSET 2
582 -#define KVM_HALT_POLL_NS_DEFAULT 500000
583 +#define KVM_HALT_POLL_NS_DEFAULT 400000
584
585 #define KVM_IRQCHIP_NUM_PINS KVM_IOAPIC_NUM_PINS
586
587 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
588 index d47d231e0d4b..eca5bd9f0e47 100644
589 --- a/arch/x86/kvm/x86.c
590 +++ b/arch/x86/kvm/x86.c
591 @@ -6074,12 +6074,10 @@ static int inject_pending_event(struct kvm_vcpu *vcpu, bool req_int_win)
592 }
593
594 /* try to inject new event if pending */
595 - if (vcpu->arch.nmi_pending) {
596 - if (kvm_x86_ops->nmi_allowed(vcpu)) {
597 - --vcpu->arch.nmi_pending;
598 - vcpu->arch.nmi_injected = true;
599 - kvm_x86_ops->set_nmi(vcpu);
600 - }
601 + if (vcpu->arch.nmi_pending && kvm_x86_ops->nmi_allowed(vcpu)) {
602 + --vcpu->arch.nmi_pending;
603 + vcpu->arch.nmi_injected = true;
604 + kvm_x86_ops->set_nmi(vcpu);
605 } else if (kvm_cpu_has_injectable_intr(vcpu)) {
606 /*
607 * Because interrupts can be injected asynchronously, we are
608 @@ -6548,10 +6546,12 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
609 if (inject_pending_event(vcpu, req_int_win) != 0)
610 req_immediate_exit = true;
611 /* enable NMI/IRQ window open exits if needed */
612 - else if (vcpu->arch.nmi_pending)
613 - kvm_x86_ops->enable_nmi_window(vcpu);
614 - else if (kvm_cpu_has_injectable_intr(vcpu) || req_int_win)
615 - kvm_x86_ops->enable_irq_window(vcpu);
616 + else {
617 + if (vcpu->arch.nmi_pending)
618 + kvm_x86_ops->enable_nmi_window(vcpu);
619 + if (kvm_cpu_has_injectable_intr(vcpu) || req_int_win)
620 + kvm_x86_ops->enable_irq_window(vcpu);
621 + }
622
623 if (kvm_lapic_enabled(vcpu)) {
624 update_cr8_intercept(vcpu);
625 diff --git a/crypto/asymmetric_keys/pkcs7_trust.c b/crypto/asymmetric_keys/pkcs7_trust.c
626 index 90d6d47965b0..ecdb5a2ce085 100644
627 --- a/crypto/asymmetric_keys/pkcs7_trust.c
628 +++ b/crypto/asymmetric_keys/pkcs7_trust.c
629 @@ -178,6 +178,8 @@ int pkcs7_validate_trust(struct pkcs7_message *pkcs7,
630 int cached_ret = -ENOKEY;
631 int ret;
632
633 + *_trusted = false;
634 +
635 for (p = pkcs7->certs; p; p = p->next)
636 p->seen = false;
637
638 diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
639 index 4a876785b68c..9745cf9fcd3c 100644
640 --- a/drivers/block/rbd.c
641 +++ b/drivers/block/rbd.c
642 @@ -1955,7 +1955,7 @@ static struct ceph_osd_request *rbd_osd_req_create(
643
644 osdc = &rbd_dev->rbd_client->client->osdc;
645 osd_req = ceph_osdc_alloc_request(osdc, snapc, num_ops, false,
646 - GFP_ATOMIC);
647 + GFP_NOIO);
648 if (!osd_req)
649 return NULL; /* ENOMEM */
650
651 @@ -2004,7 +2004,7 @@ rbd_osd_req_create_copyup(struct rbd_obj_request *obj_request)
652 rbd_dev = img_request->rbd_dev;
653 osdc = &rbd_dev->rbd_client->client->osdc;
654 osd_req = ceph_osdc_alloc_request(osdc, snapc, num_osd_ops,
655 - false, GFP_ATOMIC);
656 + false, GFP_NOIO);
657 if (!osd_req)
658 return NULL; /* ENOMEM */
659
660 @@ -2506,7 +2506,7 @@ static int rbd_img_request_fill(struct rbd_img_request *img_request,
661 bio_chain_clone_range(&bio_list,
662 &bio_offset,
663 clone_size,
664 - GFP_ATOMIC);
665 + GFP_NOIO);
666 if (!obj_request->bio_list)
667 goto out_unwind;
668 } else if (type == OBJ_REQUEST_PAGES) {
669 diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
670 index 99b375c95998..90c1511d731f 100644
671 --- a/drivers/gpio/gpio-pca953x.c
672 +++ b/drivers/gpio/gpio-pca953x.c
673 @@ -18,6 +18,7 @@
674 #include <linux/i2c.h>
675 #include <linux/platform_data/pca953x.h>
676 #include <linux/slab.h>
677 +#include <asm/unaligned.h>
678 #include <linux/of_platform.h>
679 #include <linux/acpi.h>
680
681 @@ -159,7 +160,7 @@ static int pca953x_write_regs(struct pca953x_chip *chip, int reg, u8 *val)
682 switch (chip->chip_type) {
683 case PCA953X_TYPE:
684 ret = i2c_smbus_write_word_data(chip->client,
685 - reg << 1, (u16) *val);
686 + reg << 1, cpu_to_le16(get_unaligned((u16 *)val)));
687 break;
688 case PCA957X_TYPE:
689 ret = i2c_smbus_write_byte_data(chip->client, reg << 1,
690 diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c
691 index b2b7b78664b8..76ac906b4d78 100644
692 --- a/drivers/gpio/gpio-pxa.c
693 +++ b/drivers/gpio/gpio-pxa.c
694 @@ -283,8 +283,8 @@ static int pxa_gpio_direction_output(struct gpio_chip *chip,
695 writel_relaxed(mask, base + (value ? GPSR_OFFSET : GPCR_OFFSET));
696
697 ret = pinctrl_gpio_direction_output(chip->base + offset);
698 - if (!ret)
699 - return 0;
700 + if (ret)
701 + return ret;
702
703 spin_lock_irqsave(&gpio_lock, flags);
704
705 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
706 index 7a4b101e10c6..75cb5b9b88f8 100644
707 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
708 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c
709 @@ -816,10 +816,13 @@ static int amdgpu_cgs_get_active_displays_info(void *cgs_device,
710 struct drm_device *ddev = adev->ddev;
711 struct drm_crtc *crtc;
712 uint32_t line_time_us, vblank_lines;
713 + struct cgs_mode_info *mode_info;
714
715 if (info == NULL)
716 return -EINVAL;
717
718 + mode_info = info->mode_info;
719 +
720 if (adev->mode_info.num_crtc && adev->mode_info.mode_config_initialized) {
721 list_for_each_entry(crtc,
722 &ddev->mode_config.crtc_list, head) {
723 @@ -828,7 +831,7 @@ static int amdgpu_cgs_get_active_displays_info(void *cgs_device,
724 info->active_display_mask |= (1 << amdgpu_crtc->crtc_id);
725 info->display_count++;
726 }
727 - if (info->mode_info != NULL &&
728 + if (mode_info != NULL &&
729 crtc->enabled && amdgpu_crtc->enabled &&
730 amdgpu_crtc->hw_mode.clock) {
731 line_time_us = (amdgpu_crtc->hw_mode.crtc_htotal * 1000) /
732 @@ -836,10 +839,10 @@ static int amdgpu_cgs_get_active_displays_info(void *cgs_device,
733 vblank_lines = amdgpu_crtc->hw_mode.crtc_vblank_end -
734 amdgpu_crtc->hw_mode.crtc_vdisplay +
735 (amdgpu_crtc->v_border * 2);
736 - info->mode_info->vblank_time_us = vblank_lines * line_time_us;
737 - info->mode_info->refresh_rate = drm_mode_vrefresh(&amdgpu_crtc->hw_mode);
738 - info->mode_info->ref_clock = adev->clock.spll.reference_freq;
739 - info->mode_info++;
740 + mode_info->vblank_time_us = vblank_lines * line_time_us;
741 + mode_info->refresh_rate = drm_mode_vrefresh(&amdgpu_crtc->hw_mode);
742 + mode_info->ref_clock = adev->clock.spll.reference_freq;
743 + mode_info = NULL;
744 }
745 }
746 }
747 diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
748 index b8060795b27b..53964b14ff48 100644
749 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
750 +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
751 @@ -902,14 +902,6 @@ static int gmc_v7_0_early_init(void *handle)
752 gmc_v7_0_set_gart_funcs(adev);
753 gmc_v7_0_set_irq_funcs(adev);
754
755 - if (adev->flags & AMD_IS_APU) {
756 - adev->mc.vram_type = AMDGPU_VRAM_TYPE_UNKNOWN;
757 - } else {
758 - u32 tmp = RREG32(mmMC_SEQ_MISC0);
759 - tmp &= MC_SEQ_MISC0__MT__MASK;
760 - adev->mc.vram_type = gmc_v7_0_convert_vram_type(tmp);
761 - }
762 -
763 return 0;
764 }
765
766 @@ -930,6 +922,14 @@ static int gmc_v7_0_sw_init(void *handle)
767 if (r)
768 return r;
769
770 + if (adev->flags & AMD_IS_APU) {
771 + adev->mc.vram_type = AMDGPU_VRAM_TYPE_UNKNOWN;
772 + } else {
773 + u32 tmp = RREG32(mmMC_SEQ_MISC0);
774 + tmp &= MC_SEQ_MISC0__MT__MASK;
775 + adev->mc.vram_type = gmc_v7_0_convert_vram_type(tmp);
776 + }
777 +
778 r = amdgpu_irq_add_id(adev, 146, &adev->mc.vm_fault);
779 if (r)
780 return r;
781 diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
782 index 3efd45546241..e59251f4a85d 100644
783 --- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
784 +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
785 @@ -856,14 +856,6 @@ static int gmc_v8_0_early_init(void *handle)
786 gmc_v8_0_set_gart_funcs(adev);
787 gmc_v8_0_set_irq_funcs(adev);
788
789 - if (adev->flags & AMD_IS_APU) {
790 - adev->mc.vram_type = AMDGPU_VRAM_TYPE_UNKNOWN;
791 - } else {
792 - u32 tmp = RREG32(mmMC_SEQ_MISC0);
793 - tmp &= MC_SEQ_MISC0__MT__MASK;
794 - adev->mc.vram_type = gmc_v8_0_convert_vram_type(tmp);
795 - }
796 -
797 return 0;
798 }
799
800 @@ -874,6 +866,8 @@ static int gmc_v8_0_late_init(void *handle)
801 return amdgpu_irq_get(adev, &adev->mc.vm_fault, 0);
802 }
803
804 +#define mmMC_SEQ_MISC0_FIJI 0xA71
805 +
806 static int gmc_v8_0_sw_init(void *handle)
807 {
808 int r;
809 @@ -884,6 +878,19 @@ static int gmc_v8_0_sw_init(void *handle)
810 if (r)
811 return r;
812
813 + if (adev->flags & AMD_IS_APU) {
814 + adev->mc.vram_type = AMDGPU_VRAM_TYPE_UNKNOWN;
815 + } else {
816 + u32 tmp;
817 +
818 + if (adev->asic_type == CHIP_FIJI)
819 + tmp = RREG32(mmMC_SEQ_MISC0_FIJI);
820 + else
821 + tmp = RREG32(mmMC_SEQ_MISC0);
822 + tmp &= MC_SEQ_MISC0__MT__MASK;
823 + adev->mc.vram_type = gmc_v8_0_convert_vram_type(tmp);
824 + }
825 +
826 r = amdgpu_irq_add_id(adev, 146, &adev->mc.vm_fault);
827 if (r)
828 return r;
829 diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
830 index 9535c5b60387..7e5a97204051 100644
831 --- a/drivers/gpu/drm/drm_dp_helper.c
832 +++ b/drivers/gpu/drm/drm_dp_helper.c
833 @@ -178,7 +178,7 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request,
834 {
835 struct drm_dp_aux_msg msg;
836 unsigned int retry;
837 - int err;
838 + int err = 0;
839
840 memset(&msg, 0, sizeof(msg));
841 msg.address = offset;
842 @@ -186,6 +186,8 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request,
843 msg.buffer = buffer;
844 msg.size = size;
845
846 + mutex_lock(&aux->hw_mutex);
847 +
848 /*
849 * The specification doesn't give any recommendation on how often to
850 * retry native transactions. We used to retry 7 times like for
851 @@ -194,25 +196,24 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request,
852 */
853 for (retry = 0; retry < 32; retry++) {
854
855 - mutex_lock(&aux->hw_mutex);
856 err = aux->transfer(aux, &msg);
857 - mutex_unlock(&aux->hw_mutex);
858 if (err < 0) {
859 if (err == -EBUSY)
860 continue;
861
862 - return err;
863 + goto unlock;
864 }
865
866
867 switch (msg.reply & DP_AUX_NATIVE_REPLY_MASK) {
868 case DP_AUX_NATIVE_REPLY_ACK:
869 if (err < size)
870 - return -EPROTO;
871 - return err;
872 + err = -EPROTO;
873 + goto unlock;
874
875 case DP_AUX_NATIVE_REPLY_NACK:
876 - return -EIO;
877 + err = -EIO;
878 + goto unlock;
879
880 case DP_AUX_NATIVE_REPLY_DEFER:
881 usleep_range(AUX_RETRY_INTERVAL, AUX_RETRY_INTERVAL + 100);
882 @@ -221,7 +222,11 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request,
883 }
884
885 DRM_DEBUG_KMS("too many retries, giving up\n");
886 - return -EIO;
887 + err = -EIO;
888 +
889 +unlock:
890 + mutex_unlock(&aux->hw_mutex);
891 + return err;
892 }
893
894 /**
895 @@ -543,9 +548,7 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg)
896 int max_retries = max(7, drm_dp_i2c_retry_count(msg, dp_aux_i2c_speed_khz));
897
898 for (retry = 0, defer_i2c = 0; retry < (max_retries + defer_i2c); retry++) {
899 - mutex_lock(&aux->hw_mutex);
900 ret = aux->transfer(aux, msg);
901 - mutex_unlock(&aux->hw_mutex);
902 if (ret < 0) {
903 if (ret == -EBUSY)
904 continue;
905 @@ -684,6 +687,8 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
906
907 memset(&msg, 0, sizeof(msg));
908
909 + mutex_lock(&aux->hw_mutex);
910 +
911 for (i = 0; i < num; i++) {
912 msg.address = msgs[i].addr;
913 drm_dp_i2c_msg_set_request(&msg, &msgs[i]);
914 @@ -738,6 +743,8 @@ static int drm_dp_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
915 msg.size = 0;
916 (void)drm_dp_i2c_do_msg(aux, &msg);
917
918 + mutex_unlock(&aux->hw_mutex);
919 +
920 return err;
921 }
922
923 diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
924 index a82b891ae1fe..7285adb27099 100644
925 --- a/drivers/gpu/drm/radeon/si_dpm.c
926 +++ b/drivers/gpu/drm/radeon/si_dpm.c
927 @@ -2926,9 +2926,11 @@ static struct si_dpm_quirk si_dpm_quirk_list[] = {
928 /* PITCAIRN - https://bugs.freedesktop.org/show_bug.cgi?id=76490 */
929 { PCI_VENDOR_ID_ATI, 0x6810, 0x1462, 0x3036, 0, 120000 },
930 { PCI_VENDOR_ID_ATI, 0x6811, 0x174b, 0xe271, 0, 120000 },
931 + { PCI_VENDOR_ID_ATI, 0x6811, 0x174b, 0x2015, 0, 120000 },
932 { PCI_VENDOR_ID_ATI, 0x6810, 0x174b, 0xe271, 85000, 90000 },
933 { PCI_VENDOR_ID_ATI, 0x6811, 0x1462, 0x2015, 0, 120000 },
934 { PCI_VENDOR_ID_ATI, 0x6811, 0x1043, 0x2015, 0, 120000 },
935 + { PCI_VENDOR_ID_ATI, 0x6811, 0x148c, 0x2015, 0, 120000 },
936 { 0, 0, 0, 0 },
937 };
938
939 @@ -3008,6 +3010,10 @@ static void si_apply_state_adjust_rules(struct radeon_device *rdev,
940 }
941 ++p;
942 }
943 + /* limit mclk on all R7 370 parts for stability */
944 + if (rdev->pdev->device == 0x6811 &&
945 + rdev->pdev->revision == 0x81)
946 + max_mclk = 120000;
947
948 if (rps->vce_active) {
949 rps->evclk = rdev->pm.dpm.vce_states[rdev->pm.dpm.vce_level].evclk;
950 diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c
951 index 200419d4d43c..18a2acbccb7d 100644
952 --- a/drivers/gpu/drm/udl/udl_fb.c
953 +++ b/drivers/gpu/drm/udl/udl_fb.c
954 @@ -538,7 +538,7 @@ static int udlfb_create(struct drm_fb_helper *helper,
955 out_destroy_fbi:
956 drm_fb_helper_release_fbi(helper);
957 out_gfree:
958 - drm_gem_object_unreference(&ufbdev->ufb.obj->base);
959 + drm_gem_object_unreference_unlocked(&ufbdev->ufb.obj->base);
960 out:
961 return ret;
962 }
963 diff --git a/drivers/gpu/drm/udl/udl_gem.c b/drivers/gpu/drm/udl/udl_gem.c
964 index 2a0a784ab6ee..d7528e0d8442 100644
965 --- a/drivers/gpu/drm/udl/udl_gem.c
966 +++ b/drivers/gpu/drm/udl/udl_gem.c
967 @@ -52,7 +52,7 @@ udl_gem_create(struct drm_file *file,
968 return ret;
969 }
970
971 - drm_gem_object_unreference(&obj->base);
972 + drm_gem_object_unreference_unlocked(&obj->base);
973 *handle_p = handle;
974 return 0;
975 }
976 diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
977 index ad71160b9ea4..ae83af649a60 100644
978 --- a/drivers/hid/usbhid/hid-core.c
979 +++ b/drivers/hid/usbhid/hid-core.c
980 @@ -951,14 +951,6 @@ static int usbhid_output_report(struct hid_device *hid, __u8 *buf, size_t count)
981 return ret;
982 }
983
984 -static void usbhid_restart_queues(struct usbhid_device *usbhid)
985 -{
986 - if (usbhid->urbout && !test_bit(HID_OUT_RUNNING, &usbhid->iofl))
987 - usbhid_restart_out_queue(usbhid);
988 - if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl))
989 - usbhid_restart_ctrl_queue(usbhid);
990 -}
991 -
992 static void hid_free_buffers(struct usb_device *dev, struct hid_device *hid)
993 {
994 struct usbhid_device *usbhid = hid->driver_data;
995 @@ -1404,6 +1396,37 @@ static void hid_cease_io(struct usbhid_device *usbhid)
996 usb_kill_urb(usbhid->urbout);
997 }
998
999 +static void hid_restart_io(struct hid_device *hid)
1000 +{
1001 + struct usbhid_device *usbhid = hid->driver_data;
1002 + int clear_halt = test_bit(HID_CLEAR_HALT, &usbhid->iofl);
1003 + int reset_pending = test_bit(HID_RESET_PENDING, &usbhid->iofl);
1004 +
1005 + spin_lock_irq(&usbhid->lock);
1006 + clear_bit(HID_SUSPENDED, &usbhid->iofl);
1007 + usbhid_mark_busy(usbhid);
1008 +
1009 + if (clear_halt || reset_pending)
1010 + schedule_work(&usbhid->reset_work);
1011 + usbhid->retry_delay = 0;
1012 + spin_unlock_irq(&usbhid->lock);
1013 +
1014 + if (reset_pending || !test_bit(HID_STARTED, &usbhid->iofl))
1015 + return;
1016 +
1017 + if (!clear_halt) {
1018 + if (hid_start_in(hid) < 0)
1019 + hid_io_error(hid);
1020 + }
1021 +
1022 + spin_lock_irq(&usbhid->lock);
1023 + if (usbhid->urbout && !test_bit(HID_OUT_RUNNING, &usbhid->iofl))
1024 + usbhid_restart_out_queue(usbhid);
1025 + if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl))
1026 + usbhid_restart_ctrl_queue(usbhid);
1027 + spin_unlock_irq(&usbhid->lock);
1028 +}
1029 +
1030 /* Treat USB reset pretty much the same as suspend/resume */
1031 static int hid_pre_reset(struct usb_interface *intf)
1032 {
1033 @@ -1453,14 +1476,14 @@ static int hid_post_reset(struct usb_interface *intf)
1034 return 1;
1035 }
1036
1037 + /* No need to do another reset or clear a halted endpoint */
1038 spin_lock_irq(&usbhid->lock);
1039 clear_bit(HID_RESET_PENDING, &usbhid->iofl);
1040 + clear_bit(HID_CLEAR_HALT, &usbhid->iofl);
1041 spin_unlock_irq(&usbhid->lock);
1042 hid_set_idle(dev, intf->cur_altsetting->desc.bInterfaceNumber, 0, 0);
1043 - status = hid_start_in(hid);
1044 - if (status < 0)
1045 - hid_io_error(hid);
1046 - usbhid_restart_queues(usbhid);
1047 +
1048 + hid_restart_io(hid);
1049
1050 return 0;
1051 }
1052 @@ -1483,25 +1506,9 @@ void usbhid_put_power(struct hid_device *hid)
1053 #ifdef CONFIG_PM
1054 static int hid_resume_common(struct hid_device *hid, bool driver_suspended)
1055 {
1056 - struct usbhid_device *usbhid = hid->driver_data;
1057 - int status;
1058 -
1059 - spin_lock_irq(&usbhid->lock);
1060 - clear_bit(HID_SUSPENDED, &usbhid->iofl);
1061 - usbhid_mark_busy(usbhid);
1062 -
1063 - if (test_bit(HID_CLEAR_HALT, &usbhid->iofl) ||
1064 - test_bit(HID_RESET_PENDING, &usbhid->iofl))
1065 - schedule_work(&usbhid->reset_work);
1066 - usbhid->retry_delay = 0;
1067 -
1068 - usbhid_restart_queues(usbhid);
1069 - spin_unlock_irq(&usbhid->lock);
1070 -
1071 - status = hid_start_in(hid);
1072 - if (status < 0)
1073 - hid_io_error(hid);
1074 + int status = 0;
1075
1076 + hid_restart_io(hid);
1077 if (driver_suspended && hid->driver && hid->driver->resume)
1078 status = hid->driver->resume(hid);
1079 return status;
1080 @@ -1570,12 +1577,8 @@ static int hid_suspend(struct usb_interface *intf, pm_message_t message)
1081 static int hid_resume(struct usb_interface *intf)
1082 {
1083 struct hid_device *hid = usb_get_intfdata (intf);
1084 - struct usbhid_device *usbhid = hid->driver_data;
1085 int status;
1086
1087 - if (!test_bit(HID_STARTED, &usbhid->iofl))
1088 - return 0;
1089 -
1090 status = hid_resume_common(hid, true);
1091 dev_dbg(&intf->dev, "resume status %d\n", status);
1092 return 0;
1093 @@ -1584,10 +1587,8 @@ static int hid_resume(struct usb_interface *intf)
1094 static int hid_reset_resume(struct usb_interface *intf)
1095 {
1096 struct hid_device *hid = usb_get_intfdata(intf);
1097 - struct usbhid_device *usbhid = hid->driver_data;
1098 int status;
1099
1100 - clear_bit(HID_SUSPENDED, &usbhid->iofl);
1101 status = hid_post_reset(intf);
1102 if (status >= 0 && hid->driver && hid->driver->reset_resume) {
1103 int ret = hid->driver->reset_resume(hid);
1104 diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
1105 index 99ef77fcfb80..94a8875b38fb 100644
1106 --- a/drivers/hid/wacom_wac.c
1107 +++ b/drivers/hid/wacom_wac.c
1108 @@ -2409,6 +2409,17 @@ void wacom_setup_device_quirks(struct wacom *wacom)
1109 }
1110
1111 /*
1112 + * Hack for the Bamboo One:
1113 + * the device presents a PAD/Touch interface as most Bamboos and even
1114 + * sends ghosts PAD data on it. However, later, we must disable this
1115 + * ghost interface, and we can not detect it unless we set it here
1116 + * to WACOM_DEVICETYPE_PAD or WACOM_DEVICETYPE_TOUCH.
1117 + */
1118 + if (features->type == BAMBOO_PEN &&
1119 + features->pktlen == WACOM_PKGLEN_BBTOUCH3)
1120 + features->device_type |= WACOM_DEVICETYPE_PAD;
1121 +
1122 + /*
1123 * Raw Wacom-mode pen and touch events both come from interface
1124 * 0, whose HID descriptor has an application usage of 0xFF0D
1125 * (i.e., WACOM_VENDORDEFINED_PEN). We route pen packets back
1126 diff --git a/drivers/hwmon/max1111.c b/drivers/hwmon/max1111.c
1127 index 36544c4f653c..303d0c9df907 100644
1128 --- a/drivers/hwmon/max1111.c
1129 +++ b/drivers/hwmon/max1111.c
1130 @@ -85,6 +85,9 @@ static struct max1111_data *the_max1111;
1131
1132 int max1111_read_channel(int channel)
1133 {
1134 + if (!the_max1111 || !the_max1111->spi)
1135 + return -ENODEV;
1136 +
1137 return max1111_read(&the_max1111->spi->dev, channel);
1138 }
1139 EXPORT_SYMBOL(max1111_read_channel);
1140 @@ -258,6 +261,9 @@ static int max1111_remove(struct spi_device *spi)
1141 {
1142 struct max1111_data *data = spi_get_drvdata(spi);
1143
1144 +#ifdef CONFIG_SHARPSL_PM
1145 + the_max1111 = NULL;
1146 +#endif
1147 hwmon_device_unregister(data->hwmon_dev);
1148 sysfs_remove_group(&spi->dev.kobj, &max1110_attr_group);
1149 sysfs_remove_group(&spi->dev.kobj, &max1111_attr_group);
1150 diff --git a/drivers/iio/accel/bmc150-accel-core.c b/drivers/iio/accel/bmc150-accel-core.c
1151 index c73331f7782b..2072a31e813b 100644
1152 --- a/drivers/iio/accel/bmc150-accel-core.c
1153 +++ b/drivers/iio/accel/bmc150-accel-core.c
1154 @@ -547,7 +547,7 @@ static int bmc150_accel_get_axis(struct bmc150_accel_data *data,
1155 {
1156 int ret;
1157 int axis = chan->scan_index;
1158 - unsigned int raw_val;
1159 + __le16 raw_val;
1160
1161 mutex_lock(&data->mutex);
1162 ret = bmc150_accel_set_power_state(data, true);
1163 @@ -557,14 +557,14 @@ static int bmc150_accel_get_axis(struct bmc150_accel_data *data,
1164 }
1165
1166 ret = regmap_bulk_read(data->regmap, BMC150_ACCEL_AXIS_TO_REG(axis),
1167 - &raw_val, 2);
1168 + &raw_val, sizeof(raw_val));
1169 if (ret < 0) {
1170 dev_err(data->dev, "Error reading axis %d\n", axis);
1171 bmc150_accel_set_power_state(data, false);
1172 mutex_unlock(&data->mutex);
1173 return ret;
1174 }
1175 - *val = sign_extend32(raw_val >> chan->scan_type.shift,
1176 + *val = sign_extend32(le16_to_cpu(raw_val) >> chan->scan_type.shift,
1177 chan->scan_type.realbits - 1);
1178 ret = bmc150_accel_set_power_state(data, false);
1179 mutex_unlock(&data->mutex);
1180 @@ -988,6 +988,7 @@ static const struct iio_event_spec bmc150_accel_event = {
1181 .realbits = (bits), \
1182 .storagebits = 16, \
1183 .shift = 16 - (bits), \
1184 + .endianness = IIO_LE, \
1185 }, \
1186 .event_spec = &bmc150_accel_event, \
1187 .num_event_specs = 1 \
1188 diff --git a/drivers/iio/gyro/bmg160_core.c b/drivers/iio/gyro/bmg160_core.c
1189 index bbce3b09ac45..4dac567e75b4 100644
1190 --- a/drivers/iio/gyro/bmg160_core.c
1191 +++ b/drivers/iio/gyro/bmg160_core.c
1192 @@ -452,7 +452,7 @@ static int bmg160_get_temp(struct bmg160_data *data, int *val)
1193 static int bmg160_get_axis(struct bmg160_data *data, int axis, int *val)
1194 {
1195 int ret;
1196 - unsigned int raw_val;
1197 + __le16 raw_val;
1198
1199 mutex_lock(&data->mutex);
1200 ret = bmg160_set_power_state(data, true);
1201 @@ -462,7 +462,7 @@ static int bmg160_get_axis(struct bmg160_data *data, int axis, int *val)
1202 }
1203
1204 ret = regmap_bulk_read(data->regmap, BMG160_AXIS_TO_REG(axis), &raw_val,
1205 - 2);
1206 + sizeof(raw_val));
1207 if (ret < 0) {
1208 dev_err(data->dev, "Error reading axis %d\n", axis);
1209 bmg160_set_power_state(data, false);
1210 @@ -470,7 +470,7 @@ static int bmg160_get_axis(struct bmg160_data *data, int axis, int *val)
1211 return ret;
1212 }
1213
1214 - *val = sign_extend32(raw_val, 15);
1215 + *val = sign_extend32(le16_to_cpu(raw_val), 15);
1216 ret = bmg160_set_power_state(data, false);
1217 mutex_unlock(&data->mutex);
1218 if (ret < 0)
1219 @@ -733,6 +733,7 @@ static const struct iio_event_spec bmg160_event = {
1220 .sign = 's', \
1221 .realbits = 16, \
1222 .storagebits = 16, \
1223 + .endianness = IIO_LE, \
1224 }, \
1225 .event_spec = &bmg160_event, \
1226 .num_event_specs = 1 \
1227 @@ -780,7 +781,7 @@ static irqreturn_t bmg160_trigger_handler(int irq, void *p)
1228 mutex_unlock(&data->mutex);
1229 goto err;
1230 }
1231 - data->buffer[i++] = ret;
1232 + data->buffer[i++] = val;
1233 }
1234 mutex_unlock(&data->mutex);
1235
1236 diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
1237 index 139ae916225f..5b6abc541e8c 100644
1238 --- a/drivers/iio/industrialio-buffer.c
1239 +++ b/drivers/iio/industrialio-buffer.c
1240 @@ -645,6 +645,7 @@ static int iio_verify_update(struct iio_dev *indio_dev,
1241 unsigned int modes;
1242
1243 memset(config, 0, sizeof(*config));
1244 + config->watermark = ~0;
1245
1246 /*
1247 * If there is just one buffer and we are removing it there is nothing
1248 diff --git a/drivers/iio/magnetometer/st_magn.h b/drivers/iio/magnetometer/st_magn.h
1249 index 06a4d9c35581..9daca4681922 100644
1250 --- a/drivers/iio/magnetometer/st_magn.h
1251 +++ b/drivers/iio/magnetometer/st_magn.h
1252 @@ -44,6 +44,7 @@ static inline int st_magn_allocate_ring(struct iio_dev *indio_dev)
1253 static inline void st_magn_deallocate_ring(struct iio_dev *indio_dev)
1254 {
1255 }
1256 +#define ST_MAGN_TRIGGER_SET_STATE NULL
1257 #endif /* CONFIG_IIO_BUFFER */
1258
1259 #endif /* ST_MAGN_H */
1260 diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
1261 index 0e3b0092ec92..515bb8b80952 100644
1262 --- a/drivers/iommu/iommu.c
1263 +++ b/drivers/iommu/iommu.c
1264 @@ -848,7 +848,8 @@ struct iommu_group *iommu_group_get_for_dev(struct device *dev)
1265 if (!group->default_domain) {
1266 group->default_domain = __iommu_domain_alloc(dev->bus,
1267 IOMMU_DOMAIN_DMA);
1268 - group->domain = group->default_domain;
1269 + if (!group->domain)
1270 + group->domain = group->default_domain;
1271 }
1272
1273 ret = iommu_group_add_device(group, dev);
1274 diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/platform/coda/coda-common.c
1275 index 2d782ce94a67..7ae89c684783 100644
1276 --- a/drivers/media/platform/coda/coda-common.c
1277 +++ b/drivers/media/platform/coda/coda-common.c
1278 @@ -2118,14 +2118,12 @@ static int coda_probe(struct platform_device *pdev)
1279
1280 pdev_id = of_id ? of_id->data : platform_get_device_id(pdev);
1281
1282 - if (of_id) {
1283 + if (of_id)
1284 dev->devtype = of_id->data;
1285 - } else if (pdev_id) {
1286 + else if (pdev_id)
1287 dev->devtype = &coda_devdata[pdev_id->driver_data];
1288 - } else {
1289 - ret = -EINVAL;
1290 - goto err_v4l2_register;
1291 - }
1292 + else
1293 + return -EINVAL;
1294
1295 spin_lock_init(&dev->irqlock);
1296 INIT_LIST_HEAD(&dev->instances);
1297 diff --git a/drivers/media/platform/vsp1/vsp1_sru.c b/drivers/media/platform/vsp1/vsp1_sru.c
1298 index 6310acab60e7..d41ae950d1a1 100644
1299 --- a/drivers/media/platform/vsp1/vsp1_sru.c
1300 +++ b/drivers/media/platform/vsp1/vsp1_sru.c
1301 @@ -154,6 +154,7 @@ static int sru_s_stream(struct v4l2_subdev *subdev, int enable)
1302 mutex_lock(sru->ctrls.lock);
1303 ctrl0 |= vsp1_sru_read(sru, VI6_SRU_CTRL0)
1304 & (VI6_SRU_CTRL0_PARAM0_MASK | VI6_SRU_CTRL0_PARAM1_MASK);
1305 + vsp1_sru_write(sru, VI6_SRU_CTRL0, ctrl0);
1306 mutex_unlock(sru->ctrls.lock);
1307
1308 vsp1_sru_write(sru, VI6_SRU_CTRL1, VI6_SRU_CTRL1_PARAM5);
1309 diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c
1310 index 9e29e70a78d7..d8988801dde0 100644
1311 --- a/drivers/media/usb/au0828/au0828-core.c
1312 +++ b/drivers/media/usb/au0828/au0828-core.c
1313 @@ -192,7 +192,7 @@ static void au0828_usb_disconnect(struct usb_interface *interface)
1314 Set the status so poll routines can check and avoid
1315 access after disconnect.
1316 */
1317 - dev->dev_state = DEV_DISCONNECTED;
1318 + set_bit(DEV_DISCONNECTED, &dev->dev_state);
1319
1320 au0828_rc_unregister(dev);
1321 /* Digital TV */
1322 diff --git a/drivers/media/usb/au0828/au0828-input.c b/drivers/media/usb/au0828/au0828-input.c
1323 index b0f067971979..3d6687f0407d 100644
1324 --- a/drivers/media/usb/au0828/au0828-input.c
1325 +++ b/drivers/media/usb/au0828/au0828-input.c
1326 @@ -130,7 +130,7 @@ static int au0828_get_key_au8522(struct au0828_rc *ir)
1327 bool first = true;
1328
1329 /* do nothing if device is disconnected */
1330 - if (ir->dev->dev_state == DEV_DISCONNECTED)
1331 + if (test_bit(DEV_DISCONNECTED, &ir->dev->dev_state))
1332 return 0;
1333
1334 /* Check IR int */
1335 @@ -260,7 +260,7 @@ static void au0828_rc_stop(struct rc_dev *rc)
1336 cancel_delayed_work_sync(&ir->work);
1337
1338 /* do nothing if device is disconnected */
1339 - if (ir->dev->dev_state != DEV_DISCONNECTED) {
1340 + if (!test_bit(DEV_DISCONNECTED, &ir->dev->dev_state)) {
1341 /* Disable IR */
1342 au8522_rc_clear(ir, 0xe0, 1 << 4);
1343 }
1344 diff --git a/drivers/media/usb/au0828/au0828-video.c b/drivers/media/usb/au0828/au0828-video.c
1345 index a13625722848..8bc69af874a0 100644
1346 --- a/drivers/media/usb/au0828/au0828-video.c
1347 +++ b/drivers/media/usb/au0828/au0828-video.c
1348 @@ -104,14 +104,13 @@ static inline void print_err_status(struct au0828_dev *dev,
1349
1350 static int check_dev(struct au0828_dev *dev)
1351 {
1352 - if (dev->dev_state & DEV_DISCONNECTED) {
1353 + if (test_bit(DEV_DISCONNECTED, &dev->dev_state)) {
1354 pr_info("v4l2 ioctl: device not present\n");
1355 return -ENODEV;
1356 }
1357
1358 - if (dev->dev_state & DEV_MISCONFIGURED) {
1359 - pr_info("v4l2 ioctl: device is misconfigured; "
1360 - "close and open it again\n");
1361 + if (test_bit(DEV_MISCONFIGURED, &dev->dev_state)) {
1362 + pr_info("v4l2 ioctl: device is misconfigured; close and open it again\n");
1363 return -EIO;
1364 }
1365 return 0;
1366 @@ -519,8 +518,8 @@ static inline int au0828_isoc_copy(struct au0828_dev *dev, struct urb *urb)
1367 if (!dev)
1368 return 0;
1369
1370 - if ((dev->dev_state & DEV_DISCONNECTED) ||
1371 - (dev->dev_state & DEV_MISCONFIGURED))
1372 + if (test_bit(DEV_DISCONNECTED, &dev->dev_state) ||
1373 + test_bit(DEV_MISCONFIGURED, &dev->dev_state))
1374 return 0;
1375
1376 if (urb->status < 0) {
1377 @@ -822,10 +821,10 @@ static int au0828_stream_interrupt(struct au0828_dev *dev)
1378 int ret = 0;
1379
1380 dev->stream_state = STREAM_INTERRUPT;
1381 - if (dev->dev_state == DEV_DISCONNECTED)
1382 + if (test_bit(DEV_DISCONNECTED, &dev->dev_state))
1383 return -ENODEV;
1384 else if (ret) {
1385 - dev->dev_state = DEV_MISCONFIGURED;
1386 + set_bit(DEV_MISCONFIGURED, &dev->dev_state);
1387 dprintk(1, "%s device is misconfigured!\n", __func__);
1388 return ret;
1389 }
1390 @@ -1014,7 +1013,7 @@ static int au0828_v4l2_open(struct file *filp)
1391 int ret;
1392
1393 dprintk(1,
1394 - "%s called std_set %d dev_state %d stream users %d users %d\n",
1395 + "%s called std_set %d dev_state %ld stream users %d users %d\n",
1396 __func__, dev->std_set_in_tuner_core, dev->dev_state,
1397 dev->streaming_users, dev->users);
1398
1399 @@ -1033,7 +1032,7 @@ static int au0828_v4l2_open(struct file *filp)
1400 au0828_analog_stream_enable(dev);
1401 au0828_analog_stream_reset(dev);
1402 dev->stream_state = STREAM_OFF;
1403 - dev->dev_state |= DEV_INITIALIZED;
1404 + set_bit(DEV_INITIALIZED, &dev->dev_state);
1405 }
1406 dev->users++;
1407 mutex_unlock(&dev->lock);
1408 @@ -1047,7 +1046,7 @@ static int au0828_v4l2_close(struct file *filp)
1409 struct video_device *vdev = video_devdata(filp);
1410
1411 dprintk(1,
1412 - "%s called std_set %d dev_state %d stream users %d users %d\n",
1413 + "%s called std_set %d dev_state %ld stream users %d users %d\n",
1414 __func__, dev->std_set_in_tuner_core, dev->dev_state,
1415 dev->streaming_users, dev->users);
1416
1417 @@ -1063,7 +1062,7 @@ static int au0828_v4l2_close(struct file *filp)
1418 del_timer_sync(&dev->vbi_timeout);
1419 }
1420
1421 - if (dev->dev_state == DEV_DISCONNECTED)
1422 + if (test_bit(DEV_DISCONNECTED, &dev->dev_state))
1423 goto end;
1424
1425 if (dev->users == 1) {
1426 @@ -1092,7 +1091,7 @@ static void au0828_init_tuner(struct au0828_dev *dev)
1427 .type = V4L2_TUNER_ANALOG_TV,
1428 };
1429
1430 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1431 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1432 dev->std_set_in_tuner_core, dev->dev_state);
1433
1434 if (dev->std_set_in_tuner_core)
1435 @@ -1164,7 +1163,7 @@ static int vidioc_querycap(struct file *file, void *priv,
1436 struct video_device *vdev = video_devdata(file);
1437 struct au0828_dev *dev = video_drvdata(file);
1438
1439 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1440 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1441 dev->std_set_in_tuner_core, dev->dev_state);
1442
1443 strlcpy(cap->driver, "au0828", sizeof(cap->driver));
1444 @@ -1207,7 +1206,7 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
1445 {
1446 struct au0828_dev *dev = video_drvdata(file);
1447
1448 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1449 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1450 dev->std_set_in_tuner_core, dev->dev_state);
1451
1452 f->fmt.pix.width = dev->width;
1453 @@ -1226,7 +1225,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
1454 {
1455 struct au0828_dev *dev = video_drvdata(file);
1456
1457 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1458 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1459 dev->std_set_in_tuner_core, dev->dev_state);
1460
1461 return au0828_set_format(dev, VIDIOC_TRY_FMT, f);
1462 @@ -1238,7 +1237,7 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
1463 struct au0828_dev *dev = video_drvdata(file);
1464 int rc;
1465
1466 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1467 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1468 dev->std_set_in_tuner_core, dev->dev_state);
1469
1470 rc = check_dev(dev);
1471 @@ -1260,7 +1259,7 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id norm)
1472 {
1473 struct au0828_dev *dev = video_drvdata(file);
1474
1475 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1476 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1477 dev->std_set_in_tuner_core, dev->dev_state);
1478
1479 if (norm == dev->std)
1480 @@ -1292,7 +1291,7 @@ static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
1481 {
1482 struct au0828_dev *dev = video_drvdata(file);
1483
1484 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1485 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1486 dev->std_set_in_tuner_core, dev->dev_state);
1487
1488 *norm = dev->std;
1489 @@ -1315,7 +1314,7 @@ static int vidioc_enum_input(struct file *file, void *priv,
1490 [AU0828_VMUX_DEBUG] = "tv debug"
1491 };
1492
1493 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1494 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1495 dev->std_set_in_tuner_core, dev->dev_state);
1496
1497 tmp = input->index;
1498 @@ -1345,7 +1344,7 @@ static int vidioc_g_input(struct file *file, void *priv, unsigned int *i)
1499 {
1500 struct au0828_dev *dev = video_drvdata(file);
1501
1502 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1503 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1504 dev->std_set_in_tuner_core, dev->dev_state);
1505
1506 *i = dev->ctrl_input;
1507 @@ -1356,7 +1355,7 @@ static void au0828_s_input(struct au0828_dev *dev, int index)
1508 {
1509 int i;
1510
1511 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1512 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1513 dev->std_set_in_tuner_core, dev->dev_state);
1514
1515 switch (AUVI_INPUT(index).type) {
1516 @@ -1441,7 +1440,7 @@ static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
1517 {
1518 struct au0828_dev *dev = video_drvdata(file);
1519
1520 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1521 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1522 dev->std_set_in_tuner_core, dev->dev_state);
1523
1524 a->index = dev->ctrl_ainput;
1525 @@ -1461,7 +1460,7 @@ static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio
1526 if (a->index != dev->ctrl_ainput)
1527 return -EINVAL;
1528
1529 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1530 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1531 dev->std_set_in_tuner_core, dev->dev_state);
1532 return 0;
1533 }
1534 @@ -1473,7 +1472,7 @@ static int vidioc_g_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
1535 if (t->index != 0)
1536 return -EINVAL;
1537
1538 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1539 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1540 dev->std_set_in_tuner_core, dev->dev_state);
1541
1542 strcpy(t->name, "Auvitek tuner");
1543 @@ -1493,7 +1492,7 @@ static int vidioc_s_tuner(struct file *file, void *priv,
1544 if (t->index != 0)
1545 return -EINVAL;
1546
1547 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1548 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1549 dev->std_set_in_tuner_core, dev->dev_state);
1550
1551 au0828_init_tuner(dev);
1552 @@ -1515,7 +1514,7 @@ static int vidioc_g_frequency(struct file *file, void *priv,
1553
1554 if (freq->tuner != 0)
1555 return -EINVAL;
1556 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1557 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1558 dev->std_set_in_tuner_core, dev->dev_state);
1559 freq->frequency = dev->ctrl_freq;
1560 return 0;
1561 @@ -1530,7 +1529,7 @@ static int vidioc_s_frequency(struct file *file, void *priv,
1562 if (freq->tuner != 0)
1563 return -EINVAL;
1564
1565 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1566 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1567 dev->std_set_in_tuner_core, dev->dev_state);
1568
1569 au0828_init_tuner(dev);
1570 @@ -1556,7 +1555,7 @@ static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
1571 {
1572 struct au0828_dev *dev = video_drvdata(file);
1573
1574 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1575 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1576 dev->std_set_in_tuner_core, dev->dev_state);
1577
1578 format->fmt.vbi.samples_per_line = dev->vbi_width;
1579 @@ -1582,7 +1581,7 @@ static int vidioc_cropcap(struct file *file, void *priv,
1580 if (cc->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
1581 return -EINVAL;
1582
1583 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1584 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1585 dev->std_set_in_tuner_core, dev->dev_state);
1586
1587 cc->bounds.left = 0;
1588 @@ -1604,7 +1603,7 @@ static int vidioc_g_register(struct file *file, void *priv,
1589 {
1590 struct au0828_dev *dev = video_drvdata(file);
1591
1592 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1593 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1594 dev->std_set_in_tuner_core, dev->dev_state);
1595
1596 reg->val = au0828_read(dev, reg->reg);
1597 @@ -1617,7 +1616,7 @@ static int vidioc_s_register(struct file *file, void *priv,
1598 {
1599 struct au0828_dev *dev = video_drvdata(file);
1600
1601 - dprintk(1, "%s called std_set %d dev_state %d\n", __func__,
1602 + dprintk(1, "%s called std_set %d dev_state %ld\n", __func__,
1603 dev->std_set_in_tuner_core, dev->dev_state);
1604
1605 return au0828_writereg(dev, reg->reg, reg->val);
1606 diff --git a/drivers/media/usb/au0828/au0828.h b/drivers/media/usb/au0828/au0828.h
1607 index 8276072bc55a..b28a05d76618 100644
1608 --- a/drivers/media/usb/au0828/au0828.h
1609 +++ b/drivers/media/usb/au0828/au0828.h
1610 @@ -21,6 +21,7 @@
1611
1612 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
1613
1614 +#include <linux/bitops.h>
1615 #include <linux/usb.h>
1616 #include <linux/i2c.h>
1617 #include <linux/i2c-algo-bit.h>
1618 @@ -122,9 +123,9 @@ enum au0828_stream_state {
1619
1620 /* device state */
1621 enum au0828_dev_state {
1622 - DEV_INITIALIZED = 0x01,
1623 - DEV_DISCONNECTED = 0x02,
1624 - DEV_MISCONFIGURED = 0x04
1625 + DEV_INITIALIZED = 0,
1626 + DEV_DISCONNECTED = 1,
1627 + DEV_MISCONFIGURED = 2
1628 };
1629
1630 struct au0828_dev;
1631 @@ -248,7 +249,7 @@ struct au0828_dev {
1632 int input_type;
1633 int std_set_in_tuner_core;
1634 unsigned int ctrl_input;
1635 - enum au0828_dev_state dev_state;
1636 + long unsigned int dev_state; /* defined at enum au0828_dev_state */;
1637 enum au0828_stream_state stream_state;
1638 wait_queue_head_t open;
1639
1640 diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
1641 index df3b8eced8c4..a04d0f7ee00e 100644
1642 --- a/drivers/mmc/host/sdhci-pci-core.c
1643 +++ b/drivers/mmc/host/sdhci-pci-core.c
1644 @@ -390,6 +390,7 @@ static int byt_sd_probe_slot(struct sdhci_pci_slot *slot)
1645 slot->cd_idx = 0;
1646 slot->cd_override_level = true;
1647 if (slot->chip->pdev->device == PCI_DEVICE_ID_INTEL_BXT_SD ||
1648 + slot->chip->pdev->device == PCI_DEVICE_ID_INTEL_BXTM_SD ||
1649 slot->chip->pdev->device == PCI_DEVICE_ID_INTEL_APL_SD)
1650 slot->host->mmc_host_ops.get_cd = bxt_get_cd;
1651
1652 @@ -1173,6 +1174,30 @@ static const struct pci_device_id pci_ids[] = {
1653
1654 {
1655 .vendor = PCI_VENDOR_ID_INTEL,
1656 + .device = PCI_DEVICE_ID_INTEL_BXTM_EMMC,
1657 + .subvendor = PCI_ANY_ID,
1658 + .subdevice = PCI_ANY_ID,
1659 + .driver_data = (kernel_ulong_t)&sdhci_intel_byt_emmc,
1660 + },
1661 +
1662 + {
1663 + .vendor = PCI_VENDOR_ID_INTEL,
1664 + .device = PCI_DEVICE_ID_INTEL_BXTM_SDIO,
1665 + .subvendor = PCI_ANY_ID,
1666 + .subdevice = PCI_ANY_ID,
1667 + .driver_data = (kernel_ulong_t)&sdhci_intel_byt_sdio,
1668 + },
1669 +
1670 + {
1671 + .vendor = PCI_VENDOR_ID_INTEL,
1672 + .device = PCI_DEVICE_ID_INTEL_BXTM_SD,
1673 + .subvendor = PCI_ANY_ID,
1674 + .subdevice = PCI_ANY_ID,
1675 + .driver_data = (kernel_ulong_t)&sdhci_intel_byt_sd,
1676 + },
1677 +
1678 + {
1679 + .vendor = PCI_VENDOR_ID_INTEL,
1680 .device = PCI_DEVICE_ID_INTEL_APL_EMMC,
1681 .subvendor = PCI_ANY_ID,
1682 .subdevice = PCI_ANY_ID,
1683 diff --git a/drivers/mmc/host/sdhci-pci.h b/drivers/mmc/host/sdhci-pci.h
1684 index d1a0b4db60db..89e7151684a1 100644
1685 --- a/drivers/mmc/host/sdhci-pci.h
1686 +++ b/drivers/mmc/host/sdhci-pci.h
1687 @@ -28,6 +28,9 @@
1688 #define PCI_DEVICE_ID_INTEL_BXT_SD 0x0aca
1689 #define PCI_DEVICE_ID_INTEL_BXT_EMMC 0x0acc
1690 #define PCI_DEVICE_ID_INTEL_BXT_SDIO 0x0ad0
1691 +#define PCI_DEVICE_ID_INTEL_BXTM_SD 0x1aca
1692 +#define PCI_DEVICE_ID_INTEL_BXTM_EMMC 0x1acc
1693 +#define PCI_DEVICE_ID_INTEL_BXTM_SDIO 0x1ad0
1694 #define PCI_DEVICE_ID_INTEL_APL_SD 0x5aca
1695 #define PCI_DEVICE_ID_INTEL_APL_EMMC 0x5acc
1696 #define PCI_DEVICE_ID_INTEL_APL_SDIO 0x5ad0
1697 diff --git a/drivers/mmc/host/sdhci-pxav3.c b/drivers/mmc/host/sdhci-pxav3.c
1698 index c7f27fe4805a..452bf500c82e 100644
1699 --- a/drivers/mmc/host/sdhci-pxav3.c
1700 +++ b/drivers/mmc/host/sdhci-pxav3.c
1701 @@ -309,8 +309,30 @@ static void pxav3_set_uhs_signaling(struct sdhci_host *host, unsigned int uhs)
1702 __func__, uhs, ctrl_2);
1703 }
1704
1705 +static void pxav3_set_power(struct sdhci_host *host, unsigned char mode,
1706 + unsigned short vdd)
1707 +{
1708 + struct mmc_host *mmc = host->mmc;
1709 + u8 pwr = host->pwr;
1710 +
1711 + sdhci_set_power(host, mode, vdd);
1712 +
1713 + if (host->pwr == pwr)
1714 + return;
1715 +
1716 + if (host->pwr == 0)
1717 + vdd = 0;
1718 +
1719 + if (!IS_ERR(mmc->supply.vmmc)) {
1720 + spin_unlock_irq(&host->lock);
1721 + mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd);
1722 + spin_lock_irq(&host->lock);
1723 + }
1724 +}
1725 +
1726 static const struct sdhci_ops pxav3_sdhci_ops = {
1727 .set_clock = sdhci_set_clock,
1728 + .set_power = pxav3_set_power,
1729 .platform_send_init_74_clocks = pxav3_gen_init_74_clocks,
1730 .get_max_clock = sdhci_pltfm_clk_get_max_clock,
1731 .set_bus_width = sdhci_set_bus_width,
1732 diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
1733 index 8059d7248fff..6d485b5fa5ca 100644
1734 --- a/drivers/mmc/host/sdhci.c
1735 +++ b/drivers/mmc/host/sdhci.c
1736 @@ -1250,10 +1250,24 @@ clock_set:
1737 }
1738 EXPORT_SYMBOL_GPL(sdhci_set_clock);
1739
1740 -static void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
1741 - unsigned short vdd)
1742 +static void sdhci_set_power_reg(struct sdhci_host *host, unsigned char mode,
1743 + unsigned short vdd)
1744 {
1745 struct mmc_host *mmc = host->mmc;
1746 +
1747 + spin_unlock_irq(&host->lock);
1748 + mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd);
1749 + spin_lock_irq(&host->lock);
1750 +
1751 + if (mode != MMC_POWER_OFF)
1752 + sdhci_writeb(host, SDHCI_POWER_ON, SDHCI_POWER_CONTROL);
1753 + else
1754 + sdhci_writeb(host, 0, SDHCI_POWER_CONTROL);
1755 +}
1756 +
1757 +void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
1758 + unsigned short vdd)
1759 +{
1760 u8 pwr = 0;
1761
1762 if (mode != MMC_POWER_OFF) {
1763 @@ -1285,7 +1299,6 @@ static void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
1764 sdhci_writeb(host, 0, SDHCI_POWER_CONTROL);
1765 if (host->quirks2 & SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON)
1766 sdhci_runtime_pm_bus_off(host);
1767 - vdd = 0;
1768 } else {
1769 /*
1770 * Spec says that we should clear the power reg before setting
1771 @@ -1316,12 +1329,20 @@ static void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
1772 if (host->quirks & SDHCI_QUIRK_DELAY_AFTER_POWER)
1773 mdelay(10);
1774 }
1775 +}
1776 +EXPORT_SYMBOL_GPL(sdhci_set_power);
1777
1778 - if (!IS_ERR(mmc->supply.vmmc)) {
1779 - spin_unlock_irq(&host->lock);
1780 - mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, vdd);
1781 - spin_lock_irq(&host->lock);
1782 - }
1783 +static void __sdhci_set_power(struct sdhci_host *host, unsigned char mode,
1784 + unsigned short vdd)
1785 +{
1786 + struct mmc_host *mmc = host->mmc;
1787 +
1788 + if (host->ops->set_power)
1789 + host->ops->set_power(host, mode, vdd);
1790 + else if (!IS_ERR(mmc->supply.vmmc))
1791 + sdhci_set_power_reg(host, mode, vdd);
1792 + else
1793 + sdhci_set_power(host, mode, vdd);
1794 }
1795
1796 /*****************************************************************************\
1797 @@ -1471,7 +1492,7 @@ static void sdhci_do_set_ios(struct sdhci_host *host, struct mmc_ios *ios)
1798 }
1799 }
1800
1801 - sdhci_set_power(host, ios->power_mode, ios->vdd);
1802 + __sdhci_set_power(host, ios->power_mode, ios->vdd);
1803
1804 if (host->ops->platform_send_init_74_clocks)
1805 host->ops->platform_send_init_74_clocks(host, ios->power_mode);
1806 diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
1807 index 0115e9907bf8..033d72b5bbd5 100644
1808 --- a/drivers/mmc/host/sdhci.h
1809 +++ b/drivers/mmc/host/sdhci.h
1810 @@ -529,6 +529,8 @@ struct sdhci_ops {
1811 #endif
1812
1813 void (*set_clock)(struct sdhci_host *host, unsigned int clock);
1814 + void (*set_power)(struct sdhci_host *host, unsigned char mode,
1815 + unsigned short vdd);
1816
1817 int (*enable_dma)(struct sdhci_host *host);
1818 unsigned int (*get_max_clock)(struct sdhci_host *host);
1819 @@ -660,6 +662,8 @@ static inline bool sdhci_sdio_irq_enabled(struct sdhci_host *host)
1820 }
1821
1822 void sdhci_set_clock(struct sdhci_host *host, unsigned int clock);
1823 +void sdhci_set_power(struct sdhci_host *host, unsigned char mode,
1824 + unsigned short vdd);
1825 void sdhci_set_bus_width(struct sdhci_host *host, int width);
1826 void sdhci_reset(struct sdhci_host *host, u8 mask);
1827 void sdhci_set_uhs_signaling(struct sdhci_host *host, unsigned timing);
1828 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
1829 index b7f1a9919033..5ec8195b02c0 100644
1830 --- a/drivers/net/bonding/bond_main.c
1831 +++ b/drivers/net/bonding/bond_main.c
1832 @@ -3308,6 +3308,30 @@ static int bond_close(struct net_device *bond_dev)
1833 return 0;
1834 }
1835
1836 +/* fold stats, assuming all rtnl_link_stats64 fields are u64, but
1837 + * that some drivers can provide 32bit values only.
1838 + */
1839 +static void bond_fold_stats(struct rtnl_link_stats64 *_res,
1840 + const struct rtnl_link_stats64 *_new,
1841 + const struct rtnl_link_stats64 *_old)
1842 +{
1843 + const u64 *new = (const u64 *)_new;
1844 + const u64 *old = (const u64 *)_old;
1845 + u64 *res = (u64 *)_res;
1846 + int i;
1847 +
1848 + for (i = 0; i < sizeof(*_res) / sizeof(u64); i++) {
1849 + u64 nv = new[i];
1850 + u64 ov = old[i];
1851 +
1852 + /* detects if this particular field is 32bit only */
1853 + if (((nv | ov) >> 32) == 0)
1854 + res[i] += (u32)nv - (u32)ov;
1855 + else
1856 + res[i] += nv - ov;
1857 + }
1858 +}
1859 +
1860 static struct rtnl_link_stats64 *bond_get_stats(struct net_device *bond_dev,
1861 struct rtnl_link_stats64 *stats)
1862 {
1863 @@ -3316,43 +3340,23 @@ static struct rtnl_link_stats64 *bond_get_stats(struct net_device *bond_dev,
1864 struct list_head *iter;
1865 struct slave *slave;
1866
1867 + spin_lock(&bond->stats_lock);
1868 memcpy(stats, &bond->bond_stats, sizeof(*stats));
1869
1870 - bond_for_each_slave(bond, slave, iter) {
1871 - const struct rtnl_link_stats64 *sstats =
1872 + rcu_read_lock();
1873 + bond_for_each_slave_rcu(bond, slave, iter) {
1874 + const struct rtnl_link_stats64 *new =
1875 dev_get_stats(slave->dev, &temp);
1876 - struct rtnl_link_stats64 *pstats = &slave->slave_stats;
1877 -
1878 - stats->rx_packets += sstats->rx_packets - pstats->rx_packets;
1879 - stats->rx_bytes += sstats->rx_bytes - pstats->rx_bytes;
1880 - stats->rx_errors += sstats->rx_errors - pstats->rx_errors;
1881 - stats->rx_dropped += sstats->rx_dropped - pstats->rx_dropped;
1882 -
1883 - stats->tx_packets += sstats->tx_packets - pstats->tx_packets;;
1884 - stats->tx_bytes += sstats->tx_bytes - pstats->tx_bytes;
1885 - stats->tx_errors += sstats->tx_errors - pstats->tx_errors;
1886 - stats->tx_dropped += sstats->tx_dropped - pstats->tx_dropped;
1887 -
1888 - stats->multicast += sstats->multicast - pstats->multicast;
1889 - stats->collisions += sstats->collisions - pstats->collisions;
1890 -
1891 - stats->rx_length_errors += sstats->rx_length_errors - pstats->rx_length_errors;
1892 - stats->rx_over_errors += sstats->rx_over_errors - pstats->rx_over_errors;
1893 - stats->rx_crc_errors += sstats->rx_crc_errors - pstats->rx_crc_errors;
1894 - stats->rx_frame_errors += sstats->rx_frame_errors - pstats->rx_frame_errors;
1895 - stats->rx_fifo_errors += sstats->rx_fifo_errors - pstats->rx_fifo_errors;
1896 - stats->rx_missed_errors += sstats->rx_missed_errors - pstats->rx_missed_errors;
1897 -
1898 - stats->tx_aborted_errors += sstats->tx_aborted_errors - pstats->tx_aborted_errors;
1899 - stats->tx_carrier_errors += sstats->tx_carrier_errors - pstats->tx_carrier_errors;
1900 - stats->tx_fifo_errors += sstats->tx_fifo_errors - pstats->tx_fifo_errors;
1901 - stats->tx_heartbeat_errors += sstats->tx_heartbeat_errors - pstats->tx_heartbeat_errors;
1902 - stats->tx_window_errors += sstats->tx_window_errors - pstats->tx_window_errors;
1903 +
1904 + bond_fold_stats(stats, new, &slave->slave_stats);
1905
1906 /* save off the slave stats for the next run */
1907 - memcpy(pstats, sstats, sizeof(*sstats));
1908 + memcpy(&slave->slave_stats, new, sizeof(*new));
1909 }
1910 + rcu_read_unlock();
1911 +
1912 memcpy(&bond->bond_stats, stats, sizeof(*stats));
1913 + spin_unlock(&bond->stats_lock);
1914
1915 return stats;
1916 }
1917 @@ -4166,6 +4170,7 @@ void bond_setup(struct net_device *bond_dev)
1918 struct bonding *bond = netdev_priv(bond_dev);
1919
1920 spin_lock_init(&bond->mode_lock);
1921 + spin_lock_init(&bond->stats_lock);
1922 bond->params = bonding_defaults;
1923
1924 /* Initialize pointers */
1925 diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
1926 index d7e01a74e927..6746fd03cb3a 100644
1927 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
1928 +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
1929 @@ -1197,7 +1197,7 @@ static unsigned int __bcmgenet_tx_reclaim(struct net_device *dev,
1930 dev->stats.tx_bytes += tx_cb_ptr->skb->len;
1931 dma_unmap_single(&dev->dev,
1932 dma_unmap_addr(tx_cb_ptr, dma_addr),
1933 - tx_cb_ptr->skb->len,
1934 + dma_unmap_len(tx_cb_ptr, dma_len),
1935 DMA_TO_DEVICE);
1936 bcmgenet_free_cb(tx_cb_ptr);
1937 } else if (dma_unmap_addr(tx_cb_ptr, dma_addr)) {
1938 @@ -1308,7 +1308,7 @@ static int bcmgenet_xmit_single(struct net_device *dev,
1939 }
1940
1941 dma_unmap_addr_set(tx_cb_ptr, dma_addr, mapping);
1942 - dma_unmap_len_set(tx_cb_ptr, dma_len, skb->len);
1943 + dma_unmap_len_set(tx_cb_ptr, dma_len, skb_len);
1944 length_status = (skb_len << DMA_BUFLENGTH_SHIFT) | dma_desc_flags |
1945 (priv->hw_params->qtag_mask << DMA_TX_QTAG_SHIFT) |
1946 DMA_TX_APPEND_CRC;
1947 diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
1948 index acb1c5b2bad3..2ee05cebea75 100644
1949 --- a/drivers/net/ethernet/marvell/mvneta.c
1950 +++ b/drivers/net/ethernet/marvell/mvneta.c
1951 @@ -3070,17 +3070,17 @@ static int mvneta_stop(struct net_device *dev)
1952 struct mvneta_port *pp = netdev_priv(dev);
1953
1954 /* Inform that we are stopping so we don't want to setup the
1955 - * driver for new CPUs in the notifiers
1956 + * driver for new CPUs in the notifiers. The code of the
1957 + * notifier for CPU online is protected by the same spinlock,
1958 + * so when we get the lock, the notifer work is done.
1959 */
1960 spin_lock(&pp->lock);
1961 pp->is_stopped = true;
1962 + spin_unlock(&pp->lock);
1963 +
1964 mvneta_stop_dev(pp);
1965 mvneta_mdio_remove(pp);
1966 unregister_cpu_notifier(&pp->cpu_notifier);
1967 - /* Now that the notifier are unregistered, we can release le
1968 - * lock
1969 - */
1970 - spin_unlock(&pp->lock);
1971 on_each_cpu(mvneta_percpu_disable, pp, true);
1972 free_percpu_irq(dev->irq, pp->ports);
1973 mvneta_cleanup_rxqs(pp);
1974 @@ -3612,6 +3612,7 @@ static int mvneta_probe(struct platform_device *pdev)
1975 dev->ethtool_ops = &mvneta_eth_tool_ops;
1976
1977 pp = netdev_priv(dev);
1978 + spin_lock_init(&pp->lock);
1979 pp->phy_node = phy_node;
1980 pp->phy_interface = phy_mode;
1981
1982 diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
1983 index 25ce1b030a00..cd9b2b28df88 100644
1984 --- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
1985 +++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
1986 @@ -3141,7 +3141,7 @@ static int verify_qp_parameters(struct mlx4_dev *dev,
1987 case QP_TRANS_RTS2RTS:
1988 case QP_TRANS_SQD2SQD:
1989 case QP_TRANS_SQD2RTS:
1990 - if (slave != mlx4_master_func_num(dev))
1991 + if (slave != mlx4_master_func_num(dev)) {
1992 if (optpar & MLX4_QP_OPTPAR_PRIMARY_ADDR_PATH) {
1993 port = (qp_ctx->pri_path.sched_queue >> 6 & 1) + 1;
1994 if (dev->caps.port_mask[port] != MLX4_PORT_TYPE_IB)
1995 @@ -3160,6 +3160,7 @@ static int verify_qp_parameters(struct mlx4_dev *dev,
1996 if (qp_ctx->alt_path.mgid_index >= num_gids)
1997 return -EINVAL;
1998 }
1999 + }
2000 break;
2001 default:
2002 break;
2003 diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
2004 index 3b89ed2f3c76..65a115fc0c96 100644
2005 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
2006 +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
2007 @@ -118,6 +118,8 @@ struct mlxsw_sp {
2008 #define MLXSW_SP_DEFAULT_LEARNING_INTERVAL 100
2009 unsigned int interval; /* ms */
2010 } fdb_notify;
2011 +#define MLXSW_SP_MIN_AGEING_TIME 10
2012 +#define MLXSW_SP_MAX_AGEING_TIME 1000000
2013 #define MLXSW_SP_DEFAULT_AGEING_TIME 300
2014 u32 ageing_time;
2015 struct mlxsw_sp_upper master_bridge;
2016 diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
2017 index 7b56098acc58..e1c74efff51a 100644
2018 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
2019 +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c
2020 @@ -311,8 +311,13 @@ static int mlxsw_sp_port_attr_br_ageing_set(struct mlxsw_sp_port *mlxsw_sp_port,
2021 unsigned long ageing_jiffies = clock_t_to_jiffies(ageing_clock_t);
2022 u32 ageing_time = jiffies_to_msecs(ageing_jiffies) / 1000;
2023
2024 - if (switchdev_trans_ph_prepare(trans))
2025 - return 0;
2026 + if (switchdev_trans_ph_prepare(trans)) {
2027 + if (ageing_time < MLXSW_SP_MIN_AGEING_TIME ||
2028 + ageing_time > MLXSW_SP_MAX_AGEING_TIME)
2029 + return -ERANGE;
2030 + else
2031 + return 0;
2032 + }
2033
2034 return mlxsw_sp_ageing_set(mlxsw_sp, ageing_time);
2035 }
2036 diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
2037 index 46bbea8e023c..55007f1e6bbc 100644
2038 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
2039 +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
2040 @@ -566,6 +566,7 @@ struct qlcnic_adapter_stats {
2041 u64 tx_dma_map_error;
2042 u64 spurious_intr;
2043 u64 mac_filter_limit_overrun;
2044 + u64 mbx_spurious_intr;
2045 };
2046
2047 /*
2048 @@ -1099,7 +1100,7 @@ struct qlcnic_mailbox {
2049 unsigned long status;
2050 spinlock_t queue_lock; /* Mailbox queue lock */
2051 spinlock_t aen_lock; /* Mailbox response/AEN lock */
2052 - atomic_t rsp_status;
2053 + u32 rsp_status;
2054 u32 num_cmds;
2055 };
2056
2057 diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
2058 index 37a731be7d39..f9640d5ce6ba 100644
2059 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
2060 +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
2061 @@ -491,7 +491,7 @@ irqreturn_t qlcnic_83xx_clear_legacy_intr(struct qlcnic_adapter *adapter)
2062
2063 static inline void qlcnic_83xx_notify_mbx_response(struct qlcnic_mailbox *mbx)
2064 {
2065 - atomic_set(&mbx->rsp_status, QLC_83XX_MBX_RESPONSE_ARRIVED);
2066 + mbx->rsp_status = QLC_83XX_MBX_RESPONSE_ARRIVED;
2067 complete(&mbx->completion);
2068 }
2069
2070 @@ -510,7 +510,7 @@ static void qlcnic_83xx_poll_process_aen(struct qlcnic_adapter *adapter)
2071 if (event & QLCNIC_MBX_ASYNC_EVENT) {
2072 __qlcnic_83xx_process_aen(adapter);
2073 } else {
2074 - if (atomic_read(&mbx->rsp_status) != rsp_status)
2075 + if (mbx->rsp_status != rsp_status)
2076 qlcnic_83xx_notify_mbx_response(mbx);
2077 }
2078 out:
2079 @@ -1023,7 +1023,7 @@ static void qlcnic_83xx_process_aen(struct qlcnic_adapter *adapter)
2080 if (event & QLCNIC_MBX_ASYNC_EVENT) {
2081 __qlcnic_83xx_process_aen(adapter);
2082 } else {
2083 - if (atomic_read(&mbx->rsp_status) != rsp_status)
2084 + if (mbx->rsp_status != rsp_status)
2085 qlcnic_83xx_notify_mbx_response(mbx);
2086 }
2087 }
2088 @@ -2338,9 +2338,9 @@ static void qlcnic_83xx_handle_link_aen(struct qlcnic_adapter *adapter,
2089
2090 static irqreturn_t qlcnic_83xx_handle_aen(int irq, void *data)
2091 {
2092 + u32 mask, resp, event, rsp_status = QLC_83XX_MBX_RESPONSE_ARRIVED;
2093 struct qlcnic_adapter *adapter = data;
2094 struct qlcnic_mailbox *mbx;
2095 - u32 mask, resp, event;
2096 unsigned long flags;
2097
2098 mbx = adapter->ahw->mailbox;
2099 @@ -2350,10 +2350,14 @@ static irqreturn_t qlcnic_83xx_handle_aen(int irq, void *data)
2100 goto out;
2101
2102 event = readl(QLCNIC_MBX_FW(adapter->ahw, 0));
2103 - if (event & QLCNIC_MBX_ASYNC_EVENT)
2104 + if (event & QLCNIC_MBX_ASYNC_EVENT) {
2105 __qlcnic_83xx_process_aen(adapter);
2106 - else
2107 - qlcnic_83xx_notify_mbx_response(mbx);
2108 + } else {
2109 + if (mbx->rsp_status != rsp_status)
2110 + qlcnic_83xx_notify_mbx_response(mbx);
2111 + else
2112 + adapter->stats.mbx_spurious_intr++;
2113 + }
2114
2115 out:
2116 mask = QLCRDX(adapter->ahw, QLCNIC_DEF_INT_MASK);
2117 @@ -4050,10 +4054,10 @@ static void qlcnic_83xx_mailbox_worker(struct work_struct *work)
2118 struct qlcnic_adapter *adapter = mbx->adapter;
2119 const struct qlcnic_mbx_ops *mbx_ops = mbx->ops;
2120 struct device *dev = &adapter->pdev->dev;
2121 - atomic_t *rsp_status = &mbx->rsp_status;
2122 struct list_head *head = &mbx->cmd_q;
2123 struct qlcnic_hardware_context *ahw;
2124 struct qlcnic_cmd_args *cmd = NULL;
2125 + unsigned long flags;
2126
2127 ahw = adapter->ahw;
2128
2129 @@ -4063,7 +4067,9 @@ static void qlcnic_83xx_mailbox_worker(struct work_struct *work)
2130 return;
2131 }
2132
2133 - atomic_set(rsp_status, QLC_83XX_MBX_RESPONSE_WAIT);
2134 + spin_lock_irqsave(&mbx->aen_lock, flags);
2135 + mbx->rsp_status = QLC_83XX_MBX_RESPONSE_WAIT;
2136 + spin_unlock_irqrestore(&mbx->aen_lock, flags);
2137
2138 spin_lock(&mbx->queue_lock);
2139
2140 diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
2141 index 494e8105adee..0a2318cad34d 100644
2142 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
2143 +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
2144 @@ -59,7 +59,8 @@ static const struct qlcnic_stats qlcnic_gstrings_stats[] = {
2145 QLC_OFF(stats.mac_filter_limit_overrun)},
2146 {"spurious intr", QLC_SIZEOF(stats.spurious_intr),
2147 QLC_OFF(stats.spurious_intr)},
2148 -
2149 + {"mbx spurious intr", QLC_SIZEOF(stats.mbx_spurious_intr),
2150 + QLC_OFF(stats.mbx_spurious_intr)},
2151 };
2152
2153 static const char qlcnic_device_gstrings_stats[][ETH_GSTRING_LEN] = {
2154 diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
2155 index 997976426799..b28e73ea2c25 100644
2156 --- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c
2157 +++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c
2158 @@ -1648,7 +1648,18 @@ static void ql_process_mac_rx_skb(struct ql_adapter *qdev,
2159 return;
2160 }
2161 skb_reserve(new_skb, NET_IP_ALIGN);
2162 +
2163 + pci_dma_sync_single_for_cpu(qdev->pdev,
2164 + dma_unmap_addr(sbq_desc, mapaddr),
2165 + dma_unmap_len(sbq_desc, maplen),
2166 + PCI_DMA_FROMDEVICE);
2167 +
2168 memcpy(skb_put(new_skb, length), skb->data, length);
2169 +
2170 + pci_dma_sync_single_for_device(qdev->pdev,
2171 + dma_unmap_addr(sbq_desc, mapaddr),
2172 + dma_unmap_len(sbq_desc, maplen),
2173 + PCI_DMA_FROMDEVICE);
2174 skb = new_skb;
2175
2176 /* Frame error, so drop the packet. */
2177 diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
2178 index 738449992876..01f6d5bbd420 100644
2179 --- a/drivers/net/ethernet/renesas/sh_eth.c
2180 +++ b/drivers/net/ethernet/renesas/sh_eth.c
2181 @@ -1136,11 +1136,8 @@ static void sh_eth_ring_format(struct net_device *ndev)
2182 break;
2183 sh_eth_set_receive_align(skb);
2184
2185 - /* RX descriptor */
2186 - rxdesc = &mdp->rx_ring[i];
2187 /* The size of the buffer is a multiple of 32 bytes. */
2188 buf_len = ALIGN(mdp->rx_buf_sz, 32);
2189 - rxdesc->len = cpu_to_le32(buf_len << 16);
2190 dma_addr = dma_map_single(&ndev->dev, skb->data, buf_len,
2191 DMA_FROM_DEVICE);
2192 if (dma_mapping_error(&ndev->dev, dma_addr)) {
2193 @@ -1148,6 +1145,10 @@ static void sh_eth_ring_format(struct net_device *ndev)
2194 break;
2195 }
2196 mdp->rx_skbuff[i] = skb;
2197 +
2198 + /* RX descriptor */
2199 + rxdesc = &mdp->rx_ring[i];
2200 + rxdesc->len = cpu_to_le32(buf_len << 16);
2201 rxdesc->addr = cpu_to_le32(dma_addr);
2202 rxdesc->status = cpu_to_le32(RD_RACT | RD_RFP);
2203
2204 @@ -1163,7 +1164,8 @@ static void sh_eth_ring_format(struct net_device *ndev)
2205 mdp->dirty_rx = (u32) (i - mdp->num_rx_ring);
2206
2207 /* Mark the last entry as wrapping the ring. */
2208 - rxdesc->status |= cpu_to_le32(RD_RDLE);
2209 + if (rxdesc)
2210 + rxdesc->status |= cpu_to_le32(RD_RDLE);
2211
2212 memset(mdp->tx_ring, 0, tx_ringsize);
2213
2214 diff --git a/drivers/net/ethernet/rocker/rocker.c b/drivers/net/ethernet/rocker/rocker.c
2215 index 166a7fc87e2f..f39e7198e818 100644
2216 --- a/drivers/net/ethernet/rocker/rocker.c
2217 +++ b/drivers/net/ethernet/rocker/rocker.c
2218 @@ -239,6 +239,7 @@ struct rocker {
2219 struct {
2220 u64 id;
2221 } hw;
2222 + unsigned long ageing_time;
2223 spinlock_t cmd_ring_lock; /* for cmd ring accesses */
2224 struct rocker_dma_ring_info cmd_ring;
2225 struct rocker_dma_ring_info event_ring;
2226 @@ -3704,7 +3705,7 @@ static void rocker_fdb_cleanup(unsigned long data)
2227 struct rocker_port *rocker_port;
2228 struct rocker_fdb_tbl_entry *entry;
2229 struct hlist_node *tmp;
2230 - unsigned long next_timer = jiffies + BR_MIN_AGEING_TIME;
2231 + unsigned long next_timer = jiffies + rocker->ageing_time;
2232 unsigned long expires;
2233 unsigned long lock_flags;
2234 int flags = ROCKER_OP_FLAG_NOWAIT | ROCKER_OP_FLAG_REMOVE |
2235 @@ -4367,8 +4368,12 @@ static int rocker_port_bridge_ageing_time(struct rocker_port *rocker_port,
2236 struct switchdev_trans *trans,
2237 u32 ageing_time)
2238 {
2239 + struct rocker *rocker = rocker_port->rocker;
2240 +
2241 if (!switchdev_trans_ph_prepare(trans)) {
2242 rocker_port->ageing_time = clock_t_to_jiffies(ageing_time);
2243 + if (rocker_port->ageing_time < rocker->ageing_time)
2244 + rocker->ageing_time = rocker_port->ageing_time;
2245 mod_timer(&rocker_port->rocker->fdb_cleanup_timer, jiffies);
2246 }
2247
2248 @@ -5206,10 +5211,13 @@ static int rocker_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2249 goto err_init_tbls;
2250 }
2251
2252 + rocker->ageing_time = BR_DEFAULT_AGEING_TIME;
2253 setup_timer(&rocker->fdb_cleanup_timer, rocker_fdb_cleanup,
2254 (unsigned long) rocker);
2255 mod_timer(&rocker->fdb_cleanup_timer, jiffies);
2256
2257 + rocker->ageing_time = BR_DEFAULT_AGEING_TIME;
2258 +
2259 err = rocker_probe_ports(rocker);
2260 if (err) {
2261 dev_err(&pdev->dev, "failed to probe ports\n");
2262 diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
2263 index d636d051fac8..95394edd1ed5 100644
2264 --- a/drivers/net/macvtap.c
2265 +++ b/drivers/net/macvtap.c
2266 @@ -760,6 +760,8 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
2267 macvtap16_to_cpu(q, vnet_hdr.hdr_len) : GOODCOPY_LEN;
2268 if (copylen > good_linear)
2269 copylen = good_linear;
2270 + else if (copylen < ETH_HLEN)
2271 + copylen = ETH_HLEN;
2272 linear = copylen;
2273 i = *from;
2274 iov_iter_advance(&i, copylen);
2275 @@ -769,10 +771,11 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
2276
2277 if (!zerocopy) {
2278 copylen = len;
2279 - if (macvtap16_to_cpu(q, vnet_hdr.hdr_len) > good_linear)
2280 + linear = macvtap16_to_cpu(q, vnet_hdr.hdr_len);
2281 + if (linear > good_linear)
2282 linear = good_linear;
2283 - else
2284 - linear = macvtap16_to_cpu(q, vnet_hdr.hdr_len);
2285 + else if (linear < ETH_HLEN)
2286 + linear = ETH_HLEN;
2287 }
2288
2289 skb = macvtap_alloc_skb(&q->sk, MACVTAP_RESERVE, copylen,
2290 diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
2291 index d61da9ece3ba..aafe237b25ac 100644
2292 --- a/drivers/net/ppp/ppp_generic.c
2293 +++ b/drivers/net/ppp/ppp_generic.c
2294 @@ -575,7 +575,7 @@ static int get_filter(void __user *arg, struct sock_filter **p)
2295
2296 static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2297 {
2298 - struct ppp_file *pf = file->private_data;
2299 + struct ppp_file *pf;
2300 struct ppp *ppp;
2301 int err = -EFAULT, val, val2, i;
2302 struct ppp_idle idle;
2303 @@ -585,9 +585,14 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2304 void __user *argp = (void __user *)arg;
2305 int __user *p = argp;
2306
2307 - if (!pf)
2308 - return ppp_unattached_ioctl(current->nsproxy->net_ns,
2309 - pf, file, cmd, arg);
2310 + mutex_lock(&ppp_mutex);
2311 +
2312 + pf = file->private_data;
2313 + if (!pf) {
2314 + err = ppp_unattached_ioctl(current->nsproxy->net_ns,
2315 + pf, file, cmd, arg);
2316 + goto out;
2317 + }
2318
2319 if (cmd == PPPIOCDETACH) {
2320 /*
2321 @@ -602,7 +607,6 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2322 * this fd and reopening /dev/ppp.
2323 */
2324 err = -EINVAL;
2325 - mutex_lock(&ppp_mutex);
2326 if (pf->kind == INTERFACE) {
2327 ppp = PF_TO_PPP(pf);
2328 rtnl_lock();
2329 @@ -616,15 +620,13 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2330 } else
2331 pr_warn("PPPIOCDETACH file->f_count=%ld\n",
2332 atomic_long_read(&file->f_count));
2333 - mutex_unlock(&ppp_mutex);
2334 - return err;
2335 + goto out;
2336 }
2337
2338 if (pf->kind == CHANNEL) {
2339 struct channel *pch;
2340 struct ppp_channel *chan;
2341
2342 - mutex_lock(&ppp_mutex);
2343 pch = PF_TO_CHANNEL(pf);
2344
2345 switch (cmd) {
2346 @@ -646,17 +648,16 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2347 err = chan->ops->ioctl(chan, cmd, arg);
2348 up_read(&pch->chan_sem);
2349 }
2350 - mutex_unlock(&ppp_mutex);
2351 - return err;
2352 + goto out;
2353 }
2354
2355 if (pf->kind != INTERFACE) {
2356 /* can't happen */
2357 pr_err("PPP: not interface or channel??\n");
2358 - return -EINVAL;
2359 + err = -EINVAL;
2360 + goto out;
2361 }
2362
2363 - mutex_lock(&ppp_mutex);
2364 ppp = PF_TO_PPP(pf);
2365 switch (cmd) {
2366 case PPPIOCSMRU:
2367 @@ -831,7 +832,10 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2368 default:
2369 err = -ENOTTY;
2370 }
2371 +
2372 +out:
2373 mutex_unlock(&ppp_mutex);
2374 +
2375 return err;
2376 }
2377
2378 @@ -844,7 +848,6 @@ static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf,
2379 struct ppp_net *pn;
2380 int __user *p = (int __user *)arg;
2381
2382 - mutex_lock(&ppp_mutex);
2383 switch (cmd) {
2384 case PPPIOCNEWUNIT:
2385 /* Create a new ppp unit */
2386 @@ -894,7 +897,7 @@ static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf,
2387 default:
2388 err = -ENOTTY;
2389 }
2390 - mutex_unlock(&ppp_mutex);
2391 +
2392 return err;
2393 }
2394
2395 @@ -2304,7 +2307,7 @@ int ppp_register_net_channel(struct net *net, struct ppp_channel *chan)
2396
2397 pch->ppp = NULL;
2398 pch->chan = chan;
2399 - pch->chan_net = net;
2400 + pch->chan_net = get_net(net);
2401 chan->ppp = pch;
2402 init_ppp_file(&pch->file, CHANNEL);
2403 pch->file.hdrlen = chan->hdrlen;
2404 @@ -2401,6 +2404,8 @@ ppp_unregister_channel(struct ppp_channel *chan)
2405 spin_lock_bh(&pn->all_channels_lock);
2406 list_del(&pch->list);
2407 spin_unlock_bh(&pn->all_channels_lock);
2408 + put_net(pch->chan_net);
2409 + pch->chan_net = NULL;
2410
2411 pch->file.dead = 1;
2412 wake_up_interruptible(&pch->file.rwait);
2413 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
2414 index 88bb8cc3555b..81ecc2ed8137 100644
2415 --- a/drivers/net/tun.c
2416 +++ b/drivers/net/tun.c
2417 @@ -621,7 +621,8 @@ static int tun_attach(struct tun_struct *tun, struct file *file, bool skip_filte
2418
2419 /* Re-attach the filter to persist device */
2420 if (!skip_filter && (tun->filter_attached == true)) {
2421 - err = sk_attach_filter(&tun->fprog, tfile->socket.sk);
2422 + err = __sk_attach_filter(&tun->fprog, tfile->socket.sk,
2423 + lockdep_rtnl_is_held());
2424 if (!err)
2425 goto out;
2426 }
2427 @@ -1000,7 +1001,6 @@ static void tun_net_init(struct net_device *dev)
2428 /* Zero header length */
2429 dev->type = ARPHRD_NONE;
2430 dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
2431 - dev->tx_queue_len = TUN_READQ_SIZE; /* We prefer our own queue length */
2432 break;
2433
2434 case IFF_TAP:
2435 @@ -1012,7 +1012,6 @@ static void tun_net_init(struct net_device *dev)
2436
2437 eth_hw_addr_random(dev);
2438
2439 - dev->tx_queue_len = TUN_READQ_SIZE; /* We prefer our own queue length */
2440 break;
2441 }
2442 }
2443 @@ -1466,6 +1465,8 @@ static void tun_setup(struct net_device *dev)
2444
2445 dev->ethtool_ops = &tun_ethtool_ops;
2446 dev->destructor = tun_free_netdev;
2447 + /* We prefer our own queue length */
2448 + dev->tx_queue_len = TUN_READQ_SIZE;
2449 }
2450
2451 /* Trivial set of netlink ops to allow deleting tun or tap
2452 @@ -1807,7 +1808,7 @@ static void tun_detach_filter(struct tun_struct *tun, int n)
2453
2454 for (i = 0; i < n; i++) {
2455 tfile = rtnl_dereference(tun->tfiles[i]);
2456 - sk_detach_filter(tfile->socket.sk);
2457 + __sk_detach_filter(tfile->socket.sk, lockdep_rtnl_is_held());
2458 }
2459
2460 tun->filter_attached = false;
2461 @@ -1820,7 +1821,8 @@ static int tun_attach_filter(struct tun_struct *tun)
2462
2463 for (i = 0; i < tun->numqueues; i++) {
2464 tfile = rtnl_dereference(tun->tfiles[i]);
2465 - ret = sk_attach_filter(&tun->fprog, tfile->socket.sk);
2466 + ret = __sk_attach_filter(&tun->fprog, tfile->socket.sk,
2467 + lockdep_rtnl_is_held());
2468 if (ret) {
2469 tun_detach_filter(tun, i);
2470 return ret;
2471 diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
2472 index a3a4ccf7cf52..1232a8c608b4 100644
2473 --- a/drivers/net/usb/qmi_wwan.c
2474 +++ b/drivers/net/usb/qmi_wwan.c
2475 @@ -844,6 +844,7 @@ static const struct usb_device_id products[] = {
2476 {QMI_FIXED_INTF(0x19d2, 0x1426, 2)}, /* ZTE MF91 */
2477 {QMI_FIXED_INTF(0x19d2, 0x1428, 2)}, /* Telewell TW-LTE 4G v2 */
2478 {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */
2479 + {QMI_FIXED_INTF(0x2001, 0x7e19, 4)}, /* D-Link DWM-221 B1 */
2480 {QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */
2481 {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */
2482 {QMI_FIXED_INTF(0x1199, 0x68a2, 8)}, /* Sierra Wireless MC7710 in QMI mode */
2483 diff --git a/drivers/net/wan/farsync.c b/drivers/net/wan/farsync.c
2484 index 44541dbc5c28..69b994f3b8c5 100644
2485 --- a/drivers/net/wan/farsync.c
2486 +++ b/drivers/net/wan/farsync.c
2487 @@ -2516,7 +2516,7 @@ fst_add_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2488 dev->mem_start = card->phys_mem
2489 + BUF_OFFSET ( txBuffer[i][0][0]);
2490 dev->mem_end = card->phys_mem
2491 - + BUF_OFFSET ( txBuffer[i][NUM_TX_BUFFER][0]);
2492 + + BUF_OFFSET ( txBuffer[i][NUM_TX_BUFFER - 1][LEN_RX_BUFFER - 1]);
2493 dev->base_addr = card->pci_conf;
2494 dev->irq = card->irq;
2495
2496 diff --git a/drivers/net/wireless/ath/ath9k/eeprom.c b/drivers/net/wireless/ath/ath9k/eeprom.c
2497 index 73fb4232f9f2..a794157a147d 100644
2498 --- a/drivers/net/wireless/ath/ath9k/eeprom.c
2499 +++ b/drivers/net/wireless/ath/ath9k/eeprom.c
2500 @@ -477,10 +477,9 @@ void ath9k_hw_get_gain_boundaries_pdadcs(struct ath_hw *ah,
2501
2502 if (match) {
2503 if (AR_SREV_9287(ah)) {
2504 - /* FIXME: array overrun? */
2505 for (i = 0; i < numXpdGains; i++) {
2506 minPwrT4[i] = data_9287[idxL].pwrPdg[i][0];
2507 - maxPwrT4[i] = data_9287[idxL].pwrPdg[i][4];
2508 + maxPwrT4[i] = data_9287[idxL].pwrPdg[i][intercepts - 1];
2509 ath9k_hw_fill_vpd_table(minPwrT4[i], maxPwrT4[i],
2510 data_9287[idxL].pwrPdg[i],
2511 data_9287[idxL].vpdPdg[i],
2512 @@ -490,7 +489,7 @@ void ath9k_hw_get_gain_boundaries_pdadcs(struct ath_hw *ah,
2513 } else if (eeprom_4k) {
2514 for (i = 0; i < numXpdGains; i++) {
2515 minPwrT4[i] = data_4k[idxL].pwrPdg[i][0];
2516 - maxPwrT4[i] = data_4k[idxL].pwrPdg[i][4];
2517 + maxPwrT4[i] = data_4k[idxL].pwrPdg[i][intercepts - 1];
2518 ath9k_hw_fill_vpd_table(minPwrT4[i], maxPwrT4[i],
2519 data_4k[idxL].pwrPdg[i],
2520 data_4k[idxL].vpdPdg[i],
2521 @@ -500,7 +499,7 @@ void ath9k_hw_get_gain_boundaries_pdadcs(struct ath_hw *ah,
2522 } else {
2523 for (i = 0; i < numXpdGains; i++) {
2524 minPwrT4[i] = data_def[idxL].pwrPdg[i][0];
2525 - maxPwrT4[i] = data_def[idxL].pwrPdg[i][4];
2526 + maxPwrT4[i] = data_def[idxL].pwrPdg[i][intercepts - 1];
2527 ath9k_hw_fill_vpd_table(minPwrT4[i], maxPwrT4[i],
2528 data_def[idxL].pwrPdg[i],
2529 data_def[idxL].vpdPdg[i],
2530 diff --git a/drivers/nvdimm/bus.c b/drivers/nvdimm/bus.c
2531 index 576eb7013792..cdbab06bf74f 100644
2532 --- a/drivers/nvdimm/bus.c
2533 +++ b/drivers/nvdimm/bus.c
2534 @@ -335,7 +335,7 @@ static const struct nd_cmd_desc __nd_cmd_dimm_descs[] = {
2535 [ND_CMD_IMPLEMENTED] = { },
2536 [ND_CMD_SMART] = {
2537 .out_num = 2,
2538 - .out_sizes = { 4, 8, },
2539 + .out_sizes = { 4, 128, },
2540 },
2541 [ND_CMD_SMART_THRESHOLD] = {
2542 .out_num = 2,
2543 diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
2544 index ae81a2f1da50..f0b56b3aac4d 100644
2545 --- a/drivers/nvdimm/pfn_devs.c
2546 +++ b/drivers/nvdimm/pfn_devs.c
2547 @@ -315,7 +315,7 @@ int nd_pfn_validate(struct nd_pfn *nd_pfn)
2548 } else {
2549 /* from init we validate */
2550 if (memcmp(nd_pfn->uuid, pfn_sb->uuid, 16) != 0)
2551 - return -EINVAL;
2552 + return -ENODEV;
2553 }
2554
2555 if (nd_pfn->align > nvdimm_namespace_capacity(ndns)) {
2556 diff --git a/drivers/pcmcia/db1xxx_ss.c b/drivers/pcmcia/db1xxx_ss.c
2557 index 4c2fa05b4589..944674ee3464 100644
2558 --- a/drivers/pcmcia/db1xxx_ss.c
2559 +++ b/drivers/pcmcia/db1xxx_ss.c
2560 @@ -56,6 +56,7 @@ struct db1x_pcmcia_sock {
2561 int stschg_irq; /* card-status-change irq */
2562 int card_irq; /* card irq */
2563 int eject_irq; /* db1200/pb1200 have these */
2564 + int insert_gpio; /* db1000 carddetect gpio */
2565
2566 #define BOARD_TYPE_DEFAULT 0 /* most boards */
2567 #define BOARD_TYPE_DB1200 1 /* IRQs aren't gpios */
2568 @@ -83,7 +84,7 @@ static int db1200_card_inserted(struct db1x_pcmcia_sock *sock)
2569 /* carddetect gpio: low-active */
2570 static int db1000_card_inserted(struct db1x_pcmcia_sock *sock)
2571 {
2572 - return !gpio_get_value(irq_to_gpio(sock->insert_irq));
2573 + return !gpio_get_value(sock->insert_gpio);
2574 }
2575
2576 static int db1x_card_inserted(struct db1x_pcmcia_sock *sock)
2577 @@ -457,9 +458,15 @@ static int db1x_pcmcia_socket_probe(struct platform_device *pdev)
2578 r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "card");
2579 sock->card_irq = r ? r->start : 0;
2580
2581 - /* insert: irq which triggers on card insertion/ejection */
2582 + /* insert: irq which triggers on card insertion/ejection
2583 + * BIG FAT NOTE: on DB1000/1100/1500/1550 we pass a GPIO here!
2584 + */
2585 r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "insert");
2586 sock->insert_irq = r ? r->start : -1;
2587 + if (sock->board_type == BOARD_TYPE_DEFAULT) {
2588 + sock->insert_gpio = r ? r->start : -1;
2589 + sock->insert_irq = r ? gpio_to_irq(r->start) : -1;
2590 + }
2591
2592 /* stschg: irq which trigger on card status change (optional) */
2593 r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "stschg");
2594 diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c
2595 index a5bb93987378..1029aa7889b5 100644
2596 --- a/drivers/pinctrl/freescale/pinctrl-imx.c
2597 +++ b/drivers/pinctrl/freescale/pinctrl-imx.c
2598 @@ -726,19 +726,18 @@ int imx_pinctrl_probe(struct platform_device *pdev,
2599
2600 if (of_property_read_bool(dev_np, "fsl,input-sel")) {
2601 np = of_parse_phandle(dev_np, "fsl,input-sel", 0);
2602 - if (np) {
2603 - ipctl->input_sel_base = of_iomap(np, 0);
2604 - if (IS_ERR(ipctl->input_sel_base)) {
2605 - of_node_put(np);
2606 - dev_err(&pdev->dev,
2607 - "iomuxc input select base address not found\n");
2608 - return PTR_ERR(ipctl->input_sel_base);
2609 - }
2610 - } else {
2611 + if (!np) {
2612 dev_err(&pdev->dev, "iomuxc fsl,input-sel property not found\n");
2613 return -EINVAL;
2614 }
2615 +
2616 + ipctl->input_sel_base = of_iomap(np, 0);
2617 of_node_put(np);
2618 + if (!ipctl->input_sel_base) {
2619 + dev_err(&pdev->dev,
2620 + "iomuxc input select base address not found\n");
2621 + return -ENOMEM;
2622 + }
2623 }
2624
2625 imx_pinctrl_desc.name = dev_name(&pdev->dev);
2626 diff --git a/drivers/pinctrl/nomadik/pinctrl-nomadik.c b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
2627 index 352406108fa0..c8969dd49449 100644
2628 --- a/drivers/pinctrl/nomadik/pinctrl-nomadik.c
2629 +++ b/drivers/pinctrl/nomadik/pinctrl-nomadik.c
2630 @@ -990,7 +990,7 @@ static void nmk_gpio_dbg_show_one(struct seq_file *s,
2631 int val;
2632
2633 if (pull)
2634 - pullidx = data_out ? 1 : 2;
2635 + pullidx = data_out ? 2 : 1;
2636
2637 seq_printf(s, " gpio-%-3d (%-20.20s) in %s %s",
2638 gpio,
2639 diff --git a/drivers/pinctrl/pinctrl-pistachio.c b/drivers/pinctrl/pinctrl-pistachio.c
2640 index 856f736cb1a6..2673cd9d106e 100644
2641 --- a/drivers/pinctrl/pinctrl-pistachio.c
2642 +++ b/drivers/pinctrl/pinctrl-pistachio.c
2643 @@ -469,27 +469,27 @@ static const char * const pistachio_mips_pll_lock_groups[] = {
2644 "mfio83",
2645 };
2646
2647 -static const char * const pistachio_sys_pll_lock_groups[] = {
2648 +static const char * const pistachio_audio_pll_lock_groups[] = {
2649 "mfio84",
2650 };
2651
2652 -static const char * const pistachio_wifi_pll_lock_groups[] = {
2653 +static const char * const pistachio_rpu_v_pll_lock_groups[] = {
2654 "mfio85",
2655 };
2656
2657 -static const char * const pistachio_bt_pll_lock_groups[] = {
2658 +static const char * const pistachio_rpu_l_pll_lock_groups[] = {
2659 "mfio86",
2660 };
2661
2662 -static const char * const pistachio_rpu_v_pll_lock_groups[] = {
2663 +static const char * const pistachio_sys_pll_lock_groups[] = {
2664 "mfio87",
2665 };
2666
2667 -static const char * const pistachio_rpu_l_pll_lock_groups[] = {
2668 +static const char * const pistachio_wifi_pll_lock_groups[] = {
2669 "mfio88",
2670 };
2671
2672 -static const char * const pistachio_audio_pll_lock_groups[] = {
2673 +static const char * const pistachio_bt_pll_lock_groups[] = {
2674 "mfio89",
2675 };
2676
2677 @@ -559,12 +559,12 @@ enum pistachio_mux_option {
2678 PISTACHIO_FUNCTION_DREQ4,
2679 PISTACHIO_FUNCTION_DREQ5,
2680 PISTACHIO_FUNCTION_MIPS_PLL_LOCK,
2681 + PISTACHIO_FUNCTION_AUDIO_PLL_LOCK,
2682 + PISTACHIO_FUNCTION_RPU_V_PLL_LOCK,
2683 + PISTACHIO_FUNCTION_RPU_L_PLL_LOCK,
2684 PISTACHIO_FUNCTION_SYS_PLL_LOCK,
2685 PISTACHIO_FUNCTION_WIFI_PLL_LOCK,
2686 PISTACHIO_FUNCTION_BT_PLL_LOCK,
2687 - PISTACHIO_FUNCTION_RPU_V_PLL_LOCK,
2688 - PISTACHIO_FUNCTION_RPU_L_PLL_LOCK,
2689 - PISTACHIO_FUNCTION_AUDIO_PLL_LOCK,
2690 PISTACHIO_FUNCTION_DEBUG_RAW_CCA_IND,
2691 PISTACHIO_FUNCTION_DEBUG_ED_SEC20_CCA_IND,
2692 PISTACHIO_FUNCTION_DEBUG_ED_SEC40_CCA_IND,
2693 @@ -620,12 +620,12 @@ static const struct pistachio_function pistachio_functions[] = {
2694 FUNCTION(dreq4),
2695 FUNCTION(dreq5),
2696 FUNCTION(mips_pll_lock),
2697 + FUNCTION(audio_pll_lock),
2698 + FUNCTION(rpu_v_pll_lock),
2699 + FUNCTION(rpu_l_pll_lock),
2700 FUNCTION(sys_pll_lock),
2701 FUNCTION(wifi_pll_lock),
2702 FUNCTION(bt_pll_lock),
2703 - FUNCTION(rpu_v_pll_lock),
2704 - FUNCTION(rpu_l_pll_lock),
2705 - FUNCTION(audio_pll_lock),
2706 FUNCTION(debug_raw_cca_ind),
2707 FUNCTION(debug_ed_sec20_cca_ind),
2708 FUNCTION(debug_ed_sec40_cca_ind),
2709 diff --git a/drivers/pinctrl/sh-pfc/core.c b/drivers/pinctrl/sh-pfc/core.c
2710 index 181ea98a63b7..2b0d70217bbd 100644
2711 --- a/drivers/pinctrl/sh-pfc/core.c
2712 +++ b/drivers/pinctrl/sh-pfc/core.c
2713 @@ -545,7 +545,9 @@ static int sh_pfc_probe(struct platform_device *pdev)
2714 return ret;
2715 }
2716
2717 - pinctrl_provide_dummies();
2718 + /* Enable dummy states for those platforms without pinctrl support */
2719 + if (!of_have_populated_dt())
2720 + pinctrl_provide_dummies();
2721
2722 ret = sh_pfc_init_ranges(pfc);
2723 if (ret < 0)
2724 diff --git a/drivers/pinctrl/sunxi/pinctrl-sun8i-a33.c b/drivers/pinctrl/sunxi/pinctrl-sun8i-a33.c
2725 index 00265f0435a7..8b381d69df86 100644
2726 --- a/drivers/pinctrl/sunxi/pinctrl-sun8i-a33.c
2727 +++ b/drivers/pinctrl/sunxi/pinctrl-sun8i-a33.c
2728 @@ -485,6 +485,7 @@ static const struct sunxi_pinctrl_desc sun8i_a33_pinctrl_data = {
2729 .pins = sun8i_a33_pins,
2730 .npins = ARRAY_SIZE(sun8i_a33_pins),
2731 .irq_banks = 2,
2732 + .irq_bank_base = 1,
2733 };
2734
2735 static int sun8i_a33_pinctrl_probe(struct platform_device *pdev)
2736 diff --git a/drivers/pinctrl/sunxi/pinctrl-sunxi.c b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
2737 index 7a2465f5e71e..884c2b314567 100644
2738 --- a/drivers/pinctrl/sunxi/pinctrl-sunxi.c
2739 +++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.c
2740 @@ -578,7 +578,7 @@ static void sunxi_pinctrl_irq_release_resources(struct irq_data *d)
2741 static int sunxi_pinctrl_irq_set_type(struct irq_data *d, unsigned int type)
2742 {
2743 struct sunxi_pinctrl *pctl = irq_data_get_irq_chip_data(d);
2744 - u32 reg = sunxi_irq_cfg_reg(d->hwirq);
2745 + u32 reg = sunxi_irq_cfg_reg(d->hwirq, pctl->desc->irq_bank_base);
2746 u8 index = sunxi_irq_cfg_offset(d->hwirq);
2747 unsigned long flags;
2748 u32 regval;
2749 @@ -625,7 +625,8 @@ static int sunxi_pinctrl_irq_set_type(struct irq_data *d, unsigned int type)
2750 static void sunxi_pinctrl_irq_ack(struct irq_data *d)
2751 {
2752 struct sunxi_pinctrl *pctl = irq_data_get_irq_chip_data(d);
2753 - u32 status_reg = sunxi_irq_status_reg(d->hwirq);
2754 + u32 status_reg = sunxi_irq_status_reg(d->hwirq,
2755 + pctl->desc->irq_bank_base);
2756 u8 status_idx = sunxi_irq_status_offset(d->hwirq);
2757
2758 /* Clear the IRQ */
2759 @@ -635,7 +636,7 @@ static void sunxi_pinctrl_irq_ack(struct irq_data *d)
2760 static void sunxi_pinctrl_irq_mask(struct irq_data *d)
2761 {
2762 struct sunxi_pinctrl *pctl = irq_data_get_irq_chip_data(d);
2763 - u32 reg = sunxi_irq_ctrl_reg(d->hwirq);
2764 + u32 reg = sunxi_irq_ctrl_reg(d->hwirq, pctl->desc->irq_bank_base);
2765 u8 idx = sunxi_irq_ctrl_offset(d->hwirq);
2766 unsigned long flags;
2767 u32 val;
2768 @@ -652,7 +653,7 @@ static void sunxi_pinctrl_irq_mask(struct irq_data *d)
2769 static void sunxi_pinctrl_irq_unmask(struct irq_data *d)
2770 {
2771 struct sunxi_pinctrl *pctl = irq_data_get_irq_chip_data(d);
2772 - u32 reg = sunxi_irq_ctrl_reg(d->hwirq);
2773 + u32 reg = sunxi_irq_ctrl_reg(d->hwirq, pctl->desc->irq_bank_base);
2774 u8 idx = sunxi_irq_ctrl_offset(d->hwirq);
2775 unsigned long flags;
2776 u32 val;
2777 @@ -744,7 +745,7 @@ static void sunxi_pinctrl_irq_handler(struct irq_desc *desc)
2778 if (bank == pctl->desc->irq_banks)
2779 return;
2780
2781 - reg = sunxi_irq_status_reg_from_bank(bank);
2782 + reg = sunxi_irq_status_reg_from_bank(bank, pctl->desc->irq_bank_base);
2783 val = readl(pctl->membase + reg);
2784
2785 if (val) {
2786 @@ -1023,9 +1024,11 @@ int sunxi_pinctrl_init(struct platform_device *pdev,
2787
2788 for (i = 0; i < pctl->desc->irq_banks; i++) {
2789 /* Mask and clear all IRQs before registering a handler */
2790 - writel(0, pctl->membase + sunxi_irq_ctrl_reg_from_bank(i));
2791 + writel(0, pctl->membase + sunxi_irq_ctrl_reg_from_bank(i,
2792 + pctl->desc->irq_bank_base));
2793 writel(0xffffffff,
2794 - pctl->membase + sunxi_irq_status_reg_from_bank(i));
2795 + pctl->membase + sunxi_irq_status_reg_from_bank(i,
2796 + pctl->desc->irq_bank_base));
2797
2798 irq_set_chained_handler_and_data(pctl->irq[i],
2799 sunxi_pinctrl_irq_handler,
2800 diff --git a/drivers/pinctrl/sunxi/pinctrl-sunxi.h b/drivers/pinctrl/sunxi/pinctrl-sunxi.h
2801 index e248e81a0f9e..0afce1ab12d0 100644
2802 --- a/drivers/pinctrl/sunxi/pinctrl-sunxi.h
2803 +++ b/drivers/pinctrl/sunxi/pinctrl-sunxi.h
2804 @@ -97,6 +97,7 @@ struct sunxi_pinctrl_desc {
2805 int npins;
2806 unsigned pin_base;
2807 unsigned irq_banks;
2808 + unsigned irq_bank_base;
2809 bool irq_read_needs_mux;
2810 };
2811
2812 @@ -233,12 +234,12 @@ static inline u32 sunxi_pull_offset(u16 pin)
2813 return pin_num * PULL_PINS_BITS;
2814 }
2815
2816 -static inline u32 sunxi_irq_cfg_reg(u16 irq)
2817 +static inline u32 sunxi_irq_cfg_reg(u16 irq, unsigned bank_base)
2818 {
2819 u8 bank = irq / IRQ_PER_BANK;
2820 u8 reg = (irq % IRQ_PER_BANK) / IRQ_CFG_IRQ_PER_REG * 0x04;
2821
2822 - return IRQ_CFG_REG + bank * IRQ_MEM_SIZE + reg;
2823 + return IRQ_CFG_REG + (bank_base + bank) * IRQ_MEM_SIZE + reg;
2824 }
2825
2826 static inline u32 sunxi_irq_cfg_offset(u16 irq)
2827 @@ -247,16 +248,16 @@ static inline u32 sunxi_irq_cfg_offset(u16 irq)
2828 return irq_num * IRQ_CFG_IRQ_BITS;
2829 }
2830
2831 -static inline u32 sunxi_irq_ctrl_reg_from_bank(u8 bank)
2832 +static inline u32 sunxi_irq_ctrl_reg_from_bank(u8 bank, unsigned bank_base)
2833 {
2834 - return IRQ_CTRL_REG + bank * IRQ_MEM_SIZE;
2835 + return IRQ_CTRL_REG + (bank_base + bank) * IRQ_MEM_SIZE;
2836 }
2837
2838 -static inline u32 sunxi_irq_ctrl_reg(u16 irq)
2839 +static inline u32 sunxi_irq_ctrl_reg(u16 irq, unsigned bank_base)
2840 {
2841 u8 bank = irq / IRQ_PER_BANK;
2842
2843 - return sunxi_irq_ctrl_reg_from_bank(bank);
2844 + return sunxi_irq_ctrl_reg_from_bank(bank, bank_base);
2845 }
2846
2847 static inline u32 sunxi_irq_ctrl_offset(u16 irq)
2848 @@ -265,16 +266,16 @@ static inline u32 sunxi_irq_ctrl_offset(u16 irq)
2849 return irq_num * IRQ_CTRL_IRQ_BITS;
2850 }
2851
2852 -static inline u32 sunxi_irq_status_reg_from_bank(u8 bank)
2853 +static inline u32 sunxi_irq_status_reg_from_bank(u8 bank, unsigned bank_base)
2854 {
2855 - return IRQ_STATUS_REG + bank * IRQ_MEM_SIZE;
2856 + return IRQ_STATUS_REG + (bank_base + bank) * IRQ_MEM_SIZE;
2857 }
2858
2859 -static inline u32 sunxi_irq_status_reg(u16 irq)
2860 +static inline u32 sunxi_irq_status_reg(u16 irq, unsigned bank_base)
2861 {
2862 u8 bank = irq / IRQ_PER_BANK;
2863
2864 - return sunxi_irq_status_reg_from_bank(bank);
2865 + return sunxi_irq_status_reg_from_bank(bank, bank_base);
2866 }
2867
2868 static inline u32 sunxi_irq_status_offset(u16 irq)
2869 diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
2870 index b1bf42b93fcc..1deb6adc411f 100644
2871 --- a/drivers/scsi/scsi.c
2872 +++ b/drivers/scsi/scsi.c
2873 @@ -784,8 +784,9 @@ void scsi_attach_vpd(struct scsi_device *sdev)
2874 int pg83_supported = 0;
2875 unsigned char __rcu *vpd_buf, *orig_vpd_buf = NULL;
2876
2877 - if (sdev->skip_vpd_pages)
2878 + if (!scsi_device_supports_vpd(sdev))
2879 return;
2880 +
2881 retry_pg0:
2882 vpd_buf = kmalloc(vpd_len, GFP_KERNEL);
2883 if (!vpd_buf)
2884 diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
2885 index 5a5457ac9cdb..974ca5b45f8d 100644
2886 --- a/drivers/scsi/sd.c
2887 +++ b/drivers/scsi/sd.c
2888 @@ -1275,18 +1275,19 @@ static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
2889 struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
2890 struct scsi_device *sdp = sdkp->device;
2891 struct Scsi_Host *host = sdp->host;
2892 + sector_t capacity = logical_to_sectors(sdp, sdkp->capacity);
2893 int diskinfo[4];
2894
2895 /* default to most commonly used values */
2896 - diskinfo[0] = 0x40; /* 1 << 6 */
2897 - diskinfo[1] = 0x20; /* 1 << 5 */
2898 - diskinfo[2] = sdkp->capacity >> 11;
2899 -
2900 + diskinfo[0] = 0x40; /* 1 << 6 */
2901 + diskinfo[1] = 0x20; /* 1 << 5 */
2902 + diskinfo[2] = capacity >> 11;
2903 +
2904 /* override with calculated, extended default, or driver values */
2905 if (host->hostt->bios_param)
2906 - host->hostt->bios_param(sdp, bdev, sdkp->capacity, diskinfo);
2907 + host->hostt->bios_param(sdp, bdev, capacity, diskinfo);
2908 else
2909 - scsicam_bios_param(bdev, sdkp->capacity, diskinfo);
2910 + scsicam_bios_param(bdev, capacity, diskinfo);
2911
2912 geo->heads = diskinfo[0];
2913 geo->sectors = diskinfo[1];
2914 @@ -2337,14 +2338,6 @@ got_data:
2915 if (sdkp->capacity > 0xffffffff)
2916 sdp->use_16_for_rw = 1;
2917
2918 - /* Rescale capacity to 512-byte units */
2919 - if (sector_size == 4096)
2920 - sdkp->capacity <<= 3;
2921 - else if (sector_size == 2048)
2922 - sdkp->capacity <<= 2;
2923 - else if (sector_size == 1024)
2924 - sdkp->capacity <<= 1;
2925 -
2926 blk_queue_physical_block_size(sdp->request_queue,
2927 sdkp->physical_block_size);
2928 sdkp->device->sector_size = sector_size;
2929 @@ -2795,28 +2788,6 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
2930 sdkp->ws10 = 1;
2931 }
2932
2933 -static int sd_try_extended_inquiry(struct scsi_device *sdp)
2934 -{
2935 - /* Attempt VPD inquiry if the device blacklist explicitly calls
2936 - * for it.
2937 - */
2938 - if (sdp->try_vpd_pages)
2939 - return 1;
2940 - /*
2941 - * Although VPD inquiries can go to SCSI-2 type devices,
2942 - * some USB ones crash on receiving them, and the pages
2943 - * we currently ask for are for SPC-3 and beyond
2944 - */
2945 - if (sdp->scsi_level > SCSI_SPC_2 && !sdp->skip_vpd_pages)
2946 - return 1;
2947 - return 0;
2948 -}
2949 -
2950 -static inline u32 logical_to_sectors(struct scsi_device *sdev, u32 blocks)
2951 -{
2952 - return blocks << (ilog2(sdev->sector_size) - 9);
2953 -}
2954 -
2955 /**
2956 * sd_revalidate_disk - called the first time a new disk is seen,
2957 * performs disk spin up, read_capacity, etc.
2958 @@ -2856,7 +2827,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
2959 if (sdkp->media_present) {
2960 sd_read_capacity(sdkp, buffer);
2961
2962 - if (sd_try_extended_inquiry(sdp)) {
2963 + if (scsi_device_supports_vpd(sdp)) {
2964 sd_read_block_provisioning(sdkp);
2965 sd_read_block_limits(sdkp);
2966 sd_read_block_characteristics(sdkp);
2967 @@ -2900,7 +2871,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
2968 /* Combine with controller limits */
2969 q->limits.max_sectors = min(rw_max, queue_max_hw_sectors(q));
2970
2971 - set_capacity(disk, sdkp->capacity);
2972 + set_capacity(disk, logical_to_sectors(sdp, sdkp->capacity));
2973 sd_config_write_same(sdkp);
2974 kfree(buffer);
2975
2976 diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h
2977 index 5f2a84aff29f..654630bb7d0e 100644
2978 --- a/drivers/scsi/sd.h
2979 +++ b/drivers/scsi/sd.h
2980 @@ -65,7 +65,7 @@ struct scsi_disk {
2981 struct device dev;
2982 struct gendisk *disk;
2983 atomic_t openers;
2984 - sector_t capacity; /* size in 512-byte sectors */
2985 + sector_t capacity; /* size in logical blocks */
2986 u32 max_xfer_blocks;
2987 u32 opt_xfer_blocks;
2988 u32 max_ws_blocks;
2989 @@ -146,6 +146,11 @@ static inline int scsi_medium_access_command(struct scsi_cmnd *scmd)
2990 return 0;
2991 }
2992
2993 +static inline sector_t logical_to_sectors(struct scsi_device *sdev, sector_t blocks)
2994 +{
2995 + return blocks << (ilog2(sdev->sector_size) - 9);
2996 +}
2997 +
2998 /*
2999 * A DIF-capable target device can be formatted with different
3000 * protection schemes. Currently 0 through 3 are defined:
3001 diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
3002 index e237e9f3312d..df560216d702 100644
3003 --- a/drivers/staging/android/ion/ion.c
3004 +++ b/drivers/staging/android/ion/ion.c
3005 @@ -251,8 +251,10 @@ static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
3006 * memory coming from the heaps is ready for dma, ie if it has a
3007 * cached mapping that mapping has been invalidated
3008 */
3009 - for_each_sg(buffer->sg_table->sgl, sg, buffer->sg_table->nents, i)
3010 + for_each_sg(buffer->sg_table->sgl, sg, buffer->sg_table->nents, i) {
3011 sg_dma_address(sg) = sg_phys(sg);
3012 + sg_dma_len(sg) = sg->length;
3013 + }
3014 mutex_lock(&dev->buffer_lock);
3015 ion_buffer_add(dev, buffer);
3016 mutex_unlock(&dev->buffer_lock);
3017 diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
3018 index c0f5c652d272..f1893e08e51a 100644
3019 --- a/drivers/usb/renesas_usbhs/fifo.c
3020 +++ b/drivers/usb/renesas_usbhs/fifo.c
3021 @@ -190,7 +190,8 @@ static int usbhsf_pkt_handler(struct usbhs_pipe *pipe, int type)
3022 goto __usbhs_pkt_handler_end;
3023 }
3024
3025 - ret = func(pkt, &is_done);
3026 + if (likely(func))
3027 + ret = func(pkt, &is_done);
3028
3029 if (is_done)
3030 __usbhsf_pkt_del(pkt);
3031 @@ -889,6 +890,7 @@ static int usbhsf_dma_prepare_push(struct usbhs_pkt *pkt, int *is_done)
3032
3033 pkt->trans = len;
3034
3035 + usbhsf_tx_irq_ctrl(pipe, 0);
3036 INIT_WORK(&pkt->work, xfer_work);
3037 schedule_work(&pkt->work);
3038
3039 diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c
3040 index 657f9672ceba..251053551866 100644
3041 --- a/drivers/usb/renesas_usbhs/mod_gadget.c
3042 +++ b/drivers/usb/renesas_usbhs/mod_gadget.c
3043 @@ -158,10 +158,14 @@ static void usbhsg_queue_done(struct usbhs_priv *priv, struct usbhs_pkt *pkt)
3044 struct usbhs_pipe *pipe = pkt->pipe;
3045 struct usbhsg_uep *uep = usbhsg_pipe_to_uep(pipe);
3046 struct usbhsg_request *ureq = usbhsg_pkt_to_ureq(pkt);
3047 + unsigned long flags;
3048
3049 ureq->req.actual = pkt->actual;
3050
3051 - usbhsg_queue_pop(uep, ureq, 0);
3052 + usbhs_lock(priv, flags);
3053 + if (uep)
3054 + __usbhsg_queue_pop(uep, ureq, 0);
3055 + usbhs_unlock(priv, flags);
3056 }
3057
3058 static void usbhsg_queue_push(struct usbhsg_uep *uep,
3059 diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
3060 index c90a7e46cc7b..e4ade8d89eb5 100644
3061 --- a/drivers/usb/storage/uas.c
3062 +++ b/drivers/usb/storage/uas.c
3063 @@ -2,7 +2,7 @@
3064 * USB Attached SCSI
3065 * Note that this is not the same as the USB Mass Storage driver
3066 *
3067 - * Copyright Hans de Goede <hdegoede@redhat.com> for Red Hat, Inc. 2013 - 2014
3068 + * Copyright Hans de Goede <hdegoede@redhat.com> for Red Hat, Inc. 2013 - 2016
3069 * Copyright Matthew Wilcox for Intel Corp, 2010
3070 * Copyright Sarah Sharp for Intel Corp, 2010
3071 *
3072 @@ -757,6 +757,17 @@ static int uas_eh_bus_reset_handler(struct scsi_cmnd *cmnd)
3073 return SUCCESS;
3074 }
3075
3076 +static int uas_target_alloc(struct scsi_target *starget)
3077 +{
3078 + struct uas_dev_info *devinfo = (struct uas_dev_info *)
3079 + dev_to_shost(starget->dev.parent)->hostdata;
3080 +
3081 + if (devinfo->flags & US_FL_NO_REPORT_LUNS)
3082 + starget->no_report_luns = 1;
3083 +
3084 + return 0;
3085 +}
3086 +
3087 static int uas_slave_alloc(struct scsi_device *sdev)
3088 {
3089 struct uas_dev_info *devinfo =
3090 @@ -800,7 +811,6 @@ static int uas_slave_configure(struct scsi_device *sdev)
3091 if (devinfo->flags & US_FL_BROKEN_FUA)
3092 sdev->broken_fua = 1;
3093
3094 - scsi_change_queue_depth(sdev, devinfo->qdepth - 2);
3095 return 0;
3096 }
3097
3098 @@ -808,6 +818,7 @@ static struct scsi_host_template uas_host_template = {
3099 .module = THIS_MODULE,
3100 .name = "uas",
3101 .queuecommand = uas_queuecommand,
3102 + .target_alloc = uas_target_alloc,
3103 .slave_alloc = uas_slave_alloc,
3104 .slave_configure = uas_slave_configure,
3105 .eh_abort_handler = uas_eh_abort_handler,
3106 @@ -932,6 +943,12 @@ static int uas_probe(struct usb_interface *intf, const struct usb_device_id *id)
3107 if (result)
3108 goto set_alt0;
3109
3110 + /*
3111 + * 1 tag is reserved for untagged commands +
3112 + * 1 tag to avoid off by one errors in some bridge firmwares
3113 + */
3114 + shost->can_queue = devinfo->qdepth - 2;
3115 +
3116 usb_set_intfdata(intf, shost);
3117 result = scsi_add_host(shost, &intf->dev);
3118 if (result)
3119 diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
3120 index ccc113e83d88..53341a77d89f 100644
3121 --- a/drivers/usb/storage/unusual_uas.h
3122 +++ b/drivers/usb/storage/unusual_uas.h
3123 @@ -64,6 +64,13 @@ UNUSUAL_DEV(0x0bc2, 0x3312, 0x0000, 0x9999,
3124 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3125 US_FL_NO_ATA_1X),
3126
3127 +/* Reported-by: David Webb <djw@noc.ac.uk> */
3128 +UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999,
3129 + "Seagate",
3130 + "Expansion Desk",
3131 + USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3132 + US_FL_NO_REPORT_LUNS),
3133 +
3134 /* Reported-by: Hans de Goede <hdegoede@redhat.com> */
3135 UNUSUAL_DEV(0x0bc2, 0x3320, 0x0000, 0x9999,
3136 "Seagate",
3137 diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
3138 index 43576ed31ccd..9de988a0f856 100644
3139 --- a/drivers/usb/storage/usb.c
3140 +++ b/drivers/usb/storage/usb.c
3141 @@ -482,7 +482,7 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags)
3142 US_FL_NO_READ_DISC_INFO | US_FL_NO_READ_CAPACITY_16 |
3143 US_FL_INITIAL_READ10 | US_FL_WRITE_CACHE |
3144 US_FL_NO_ATA_1X | US_FL_NO_REPORT_OPCODES |
3145 - US_FL_MAX_SECTORS_240);
3146 + US_FL_MAX_SECTORS_240 | US_FL_NO_REPORT_LUNS);
3147
3148 p = quirks;
3149 while (*p) {
3150 @@ -532,6 +532,9 @@ void usb_stor_adjust_quirks(struct usb_device *udev, unsigned long *fflags)
3151 case 'i':
3152 f |= US_FL_IGNORE_DEVICE;
3153 break;
3154 + case 'j':
3155 + f |= US_FL_NO_REPORT_LUNS;
3156 + break;
3157 case 'l':
3158 f |= US_FL_NOT_LOCKABLE;
3159 break;
3160 diff --git a/drivers/virtio/virtio_pci_modern.c b/drivers/virtio/virtio_pci_modern.c
3161 index 7760fc1a2218..1f413a2f70b6 100644
3162 --- a/drivers/virtio/virtio_pci_modern.c
3163 +++ b/drivers/virtio/virtio_pci_modern.c
3164 @@ -17,6 +17,7 @@
3165 *
3166 */
3167
3168 +#include <linux/delay.h>
3169 #define VIRTIO_PCI_NO_LEGACY
3170 #include "virtio_pci_common.h"
3171
3172 @@ -271,9 +272,13 @@ static void vp_reset(struct virtio_device *vdev)
3173 struct virtio_pci_device *vp_dev = to_vp_device(vdev);
3174 /* 0 status means a reset. */
3175 vp_iowrite8(0, &vp_dev->common->device_status);
3176 - /* Flush out the status write, and flush in device writes,
3177 - * including MSI-X interrupts, if any. */
3178 - vp_ioread8(&vp_dev->common->device_status);
3179 + /* After writing 0 to device_status, the driver MUST wait for a read of
3180 + * device_status to return 0 before reinitializing the device.
3181 + * This will flush out the status write, and flush in device writes,
3182 + * including MSI-X interrupts, if any.
3183 + */
3184 + while (vp_ioread8(&vp_dev->common->device_status))
3185 + msleep(1);
3186 /* Flush pending VQ/configuration callbacks. */
3187 vp_synchronize_vectors(vdev);
3188 }
3189 diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
3190 index 524c22146429..44367783f07a 100644
3191 --- a/drivers/xen/events/events_base.c
3192 +++ b/drivers/xen/events/events_base.c
3193 @@ -484,9 +484,19 @@ static void eoi_pirq(struct irq_data *data)
3194 struct physdev_eoi eoi = { .irq = pirq_from_irq(data->irq) };
3195 int rc = 0;
3196
3197 - irq_move_irq(data);
3198 + if (!VALID_EVTCHN(evtchn))
3199 + return;
3200
3201 - if (VALID_EVTCHN(evtchn))
3202 + if (unlikely(irqd_is_setaffinity_pending(data))) {
3203 + int masked = test_and_set_mask(evtchn);
3204 +
3205 + clear_evtchn(evtchn);
3206 +
3207 + irq_move_masked_irq(data);
3208 +
3209 + if (!masked)
3210 + unmask_evtchn(evtchn);
3211 + } else
3212 clear_evtchn(evtchn);
3213
3214 if (pirq_needs_eoi(data->irq)) {
3215 @@ -1357,9 +1367,19 @@ static void ack_dynirq(struct irq_data *data)
3216 {
3217 int evtchn = evtchn_from_irq(data->irq);
3218
3219 - irq_move_irq(data);
3220 + if (!VALID_EVTCHN(evtchn))
3221 + return;
3222
3223 - if (VALID_EVTCHN(evtchn))
3224 + if (unlikely(irqd_is_setaffinity_pending(data))) {
3225 + int masked = test_and_set_mask(evtchn);
3226 +
3227 + clear_evtchn(evtchn);
3228 +
3229 + irq_move_masked_irq(data);
3230 +
3231 + if (!masked)
3232 + unmask_evtchn(evtchn);
3233 + } else
3234 clear_evtchn(evtchn);
3235 }
3236
3237 diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
3238 index 098bb8f690c9..9a30ca64066b 100644
3239 --- a/fs/btrfs/file.c
3240 +++ b/fs/btrfs/file.c
3241 @@ -1883,7 +1883,7 @@ static int start_ordered_ops(struct inode *inode, loff_t start, loff_t end)
3242 */
3243 int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
3244 {
3245 - struct dentry *dentry = file->f_path.dentry;
3246 + struct dentry *dentry = file_dentry(file);
3247 struct inode *inode = d_inode(dentry);
3248 struct btrfs_root *root = BTRFS_I(inode)->root;
3249 struct btrfs_trans_handle *trans;
3250 diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
3251 index 978c3a810893..849a30aa117d 100644
3252 --- a/fs/btrfs/tree-log.c
3253 +++ b/fs/btrfs/tree-log.c
3254 @@ -4414,6 +4414,127 @@ static int btrfs_log_trailing_hole(struct btrfs_trans_handle *trans,
3255 return ret;
3256 }
3257
3258 +/*
3259 + * When we are logging a new inode X, check if it doesn't have a reference that
3260 + * matches the reference from some other inode Y created in a past transaction
3261 + * and that was renamed in the current transaction. If we don't do this, then at
3262 + * log replay time we can lose inode Y (and all its files if it's a directory):
3263 + *
3264 + * mkdir /mnt/x
3265 + * echo "hello world" > /mnt/x/foobar
3266 + * sync
3267 + * mv /mnt/x /mnt/y
3268 + * mkdir /mnt/x # or touch /mnt/x
3269 + * xfs_io -c fsync /mnt/x
3270 + * <power fail>
3271 + * mount fs, trigger log replay
3272 + *
3273 + * After the log replay procedure, we would lose the first directory and all its
3274 + * files (file foobar).
3275 + * For the case where inode Y is not a directory we simply end up losing it:
3276 + *
3277 + * echo "123" > /mnt/foo
3278 + * sync
3279 + * mv /mnt/foo /mnt/bar
3280 + * echo "abc" > /mnt/foo
3281 + * xfs_io -c fsync /mnt/foo
3282 + * <power fail>
3283 + *
3284 + * We also need this for cases where a snapshot entry is replaced by some other
3285 + * entry (file or directory) otherwise we end up with an unreplayable log due to
3286 + * attempts to delete the snapshot entry (entry of type BTRFS_ROOT_ITEM_KEY) as
3287 + * if it were a regular entry:
3288 + *
3289 + * mkdir /mnt/x
3290 + * btrfs subvolume snapshot /mnt /mnt/x/snap
3291 + * btrfs subvolume delete /mnt/x/snap
3292 + * rmdir /mnt/x
3293 + * mkdir /mnt/x
3294 + * fsync /mnt/x or fsync some new file inside it
3295 + * <power fail>
3296 + *
3297 + * The snapshot delete, rmdir of x, mkdir of a new x and the fsync all happen in
3298 + * the same transaction.
3299 + */
3300 +static int btrfs_check_ref_name_override(struct extent_buffer *eb,
3301 + const int slot,
3302 + const struct btrfs_key *key,
3303 + struct inode *inode)
3304 +{
3305 + int ret;
3306 + struct btrfs_path *search_path;
3307 + char *name = NULL;
3308 + u32 name_len = 0;
3309 + u32 item_size = btrfs_item_size_nr(eb, slot);
3310 + u32 cur_offset = 0;
3311 + unsigned long ptr = btrfs_item_ptr_offset(eb, slot);
3312 +
3313 + search_path = btrfs_alloc_path();
3314 + if (!search_path)
3315 + return -ENOMEM;
3316 + search_path->search_commit_root = 1;
3317 + search_path->skip_locking = 1;
3318 +
3319 + while (cur_offset < item_size) {
3320 + u64 parent;
3321 + u32 this_name_len;
3322 + u32 this_len;
3323 + unsigned long name_ptr;
3324 + struct btrfs_dir_item *di;
3325 +
3326 + if (key->type == BTRFS_INODE_REF_KEY) {
3327 + struct btrfs_inode_ref *iref;
3328 +
3329 + iref = (struct btrfs_inode_ref *)(ptr + cur_offset);
3330 + parent = key->offset;
3331 + this_name_len = btrfs_inode_ref_name_len(eb, iref);
3332 + name_ptr = (unsigned long)(iref + 1);
3333 + this_len = sizeof(*iref) + this_name_len;
3334 + } else {
3335 + struct btrfs_inode_extref *extref;
3336 +
3337 + extref = (struct btrfs_inode_extref *)(ptr +
3338 + cur_offset);
3339 + parent = btrfs_inode_extref_parent(eb, extref);
3340 + this_name_len = btrfs_inode_extref_name_len(eb, extref);
3341 + name_ptr = (unsigned long)&extref->name;
3342 + this_len = sizeof(*extref) + this_name_len;
3343 + }
3344 +
3345 + if (this_name_len > name_len) {
3346 + char *new_name;
3347 +
3348 + new_name = krealloc(name, this_name_len, GFP_NOFS);
3349 + if (!new_name) {
3350 + ret = -ENOMEM;
3351 + goto out;
3352 + }
3353 + name_len = this_name_len;
3354 + name = new_name;
3355 + }
3356 +
3357 + read_extent_buffer(eb, name, name_ptr, this_name_len);
3358 + di = btrfs_lookup_dir_item(NULL, BTRFS_I(inode)->root,
3359 + search_path, parent,
3360 + name, this_name_len, 0);
3361 + if (di && !IS_ERR(di)) {
3362 + ret = 1;
3363 + goto out;
3364 + } else if (IS_ERR(di)) {
3365 + ret = PTR_ERR(di);
3366 + goto out;
3367 + }
3368 + btrfs_release_path(search_path);
3369 +
3370 + cur_offset += this_len;
3371 + }
3372 + ret = 0;
3373 +out:
3374 + btrfs_free_path(search_path);
3375 + kfree(name);
3376 + return ret;
3377 +}
3378 +
3379 /* log a single inode in the tree log.
3380 * At least one parent directory for this inode must exist in the tree
3381 * or be logged already.
3382 @@ -4586,6 +4707,22 @@ again:
3383 if (min_key.type == BTRFS_INODE_ITEM_KEY)
3384 need_log_inode_item = false;
3385
3386 + if ((min_key.type == BTRFS_INODE_REF_KEY ||
3387 + min_key.type == BTRFS_INODE_EXTREF_KEY) &&
3388 + BTRFS_I(inode)->generation == trans->transid) {
3389 + ret = btrfs_check_ref_name_override(path->nodes[0],
3390 + path->slots[0],
3391 + &min_key, inode);
3392 + if (ret < 0) {
3393 + err = ret;
3394 + goto out_unlock;
3395 + } else if (ret > 0) {
3396 + err = 1;
3397 + btrfs_set_log_full_commit(root->fs_info, trans);
3398 + goto out_unlock;
3399 + }
3400 + }
3401 +
3402 /* Skip xattrs, we log them later with btrfs_log_all_xattrs() */
3403 if (min_key.type == BTRFS_XATTR_ITEM_KEY) {
3404 if (ins_nr == 0)
3405 diff --git a/fs/dcache.c b/fs/dcache.c
3406 index 2398f9f94337..7566b2689609 100644
3407 --- a/fs/dcache.c
3408 +++ b/fs/dcache.c
3409 @@ -1667,7 +1667,8 @@ void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op)
3410 DCACHE_OP_REVALIDATE |
3411 DCACHE_OP_WEAK_REVALIDATE |
3412 DCACHE_OP_DELETE |
3413 - DCACHE_OP_SELECT_INODE));
3414 + DCACHE_OP_SELECT_INODE |
3415 + DCACHE_OP_REAL));
3416 dentry->d_op = op;
3417 if (!op)
3418 return;
3419 @@ -1685,6 +1686,8 @@ void d_set_d_op(struct dentry *dentry, const struct dentry_operations *op)
3420 dentry->d_flags |= DCACHE_OP_PRUNE;
3421 if (op->d_select_inode)
3422 dentry->d_flags |= DCACHE_OP_SELECT_INODE;
3423 + if (op->d_real)
3424 + dentry->d_flags |= DCACHE_OP_REAL;
3425
3426 }
3427 EXPORT_SYMBOL(d_set_d_op);
3428 diff --git a/fs/ext4/crypto.c b/fs/ext4/crypto.c
3429 index 38f7562489bb..ecb54394492a 100644
3430 --- a/fs/ext4/crypto.c
3431 +++ b/fs/ext4/crypto.c
3432 @@ -475,13 +475,16 @@ uint32_t ext4_validate_encryption_key_size(uint32_t mode, uint32_t size)
3433 */
3434 static int ext4_d_revalidate(struct dentry *dentry, unsigned int flags)
3435 {
3436 - struct inode *dir = d_inode(dentry->d_parent);
3437 - struct ext4_crypt_info *ci = EXT4_I(dir)->i_crypt_info;
3438 + struct dentry *dir;
3439 + struct ext4_crypt_info *ci;
3440 int dir_has_key, cached_with_key;
3441
3442 - if (!ext4_encrypted_inode(dir))
3443 + dir = dget_parent(dentry);
3444 + if (!ext4_encrypted_inode(d_inode(dir))) {
3445 + dput(dir);
3446 return 0;
3447 -
3448 + }
3449 + ci = EXT4_I(d_inode(dir))->i_crypt_info;
3450 if (ci && ci->ci_keyring_key &&
3451 (ci->ci_keyring_key->flags & ((1 << KEY_FLAG_INVALIDATED) |
3452 (1 << KEY_FLAG_REVOKED) |
3453 @@ -491,6 +494,7 @@ static int ext4_d_revalidate(struct dentry *dentry, unsigned int flags)
3454 /* this should eventually be an flag in d_flags */
3455 cached_with_key = dentry->d_fsdata != NULL;
3456 dir_has_key = (ci != NULL);
3457 + dput(dir);
3458
3459 /*
3460 * If the dentry was cached without the key, and it is a
3461 diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
3462 index 157b458a69d4..b213449a5d1b 100644
3463 --- a/fs/ext4/ext4.h
3464 +++ b/fs/ext4/ext4.h
3465 @@ -900,6 +900,29 @@ do { \
3466 #include "extents_status.h"
3467
3468 /*
3469 + * Lock subclasses for i_data_sem in the ext4_inode_info structure.
3470 + *
3471 + * These are needed to avoid lockdep false positives when we need to
3472 + * allocate blocks to the quota inode during ext4_map_blocks(), while
3473 + * holding i_data_sem for a normal (non-quota) inode. Since we don't
3474 + * do quota tracking for the quota inode, this avoids deadlock (as
3475 + * well as infinite recursion, since it isn't turtles all the way
3476 + * down...)
3477 + *
3478 + * I_DATA_SEM_NORMAL - Used for most inodes
3479 + * I_DATA_SEM_OTHER - Used by move_inode.c for the second normal inode
3480 + * where the second inode has larger inode number
3481 + * than the first
3482 + * I_DATA_SEM_QUOTA - Used for quota inodes only
3483 + */
3484 +enum {
3485 + I_DATA_SEM_NORMAL = 0,
3486 + I_DATA_SEM_OTHER,
3487 + I_DATA_SEM_QUOTA,
3488 +};
3489 +
3490 +
3491 +/*
3492 * fourth extended file system inode data in memory
3493 */
3494 struct ext4_inode_info {
3495 diff --git a/fs/ext4/file.c b/fs/ext4/file.c
3496 index 4cd318f31cbe..38847f38b34a 100644
3497 --- a/fs/ext4/file.c
3498 +++ b/fs/ext4/file.c
3499 @@ -335,7 +335,7 @@ static int ext4_file_open(struct inode * inode, struct file * filp)
3500 struct super_block *sb = inode->i_sb;
3501 struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
3502 struct vfsmount *mnt = filp->f_path.mnt;
3503 - struct inode *dir = filp->f_path.dentry->d_parent->d_inode;
3504 + struct dentry *dir;
3505 struct path path;
3506 char buf[64], *cp;
3507 int ret;
3508 @@ -379,14 +379,18 @@ static int ext4_file_open(struct inode * inode, struct file * filp)
3509 if (ext4_encryption_info(inode) == NULL)
3510 return -ENOKEY;
3511 }
3512 - if (ext4_encrypted_inode(dir) &&
3513 - !ext4_is_child_context_consistent_with_parent(dir, inode)) {
3514 +
3515 + dir = dget_parent(file_dentry(filp));
3516 + if (ext4_encrypted_inode(d_inode(dir)) &&
3517 + !ext4_is_child_context_consistent_with_parent(d_inode(dir), inode)) {
3518 ext4_warning(inode->i_sb,
3519 "Inconsistent encryption contexts: %lu/%lu\n",
3520 - (unsigned long) dir->i_ino,
3521 + (unsigned long) d_inode(dir)->i_ino,
3522 (unsigned long) inode->i_ino);
3523 + dput(dir);
3524 return -EPERM;
3525 }
3526 + dput(dir);
3527 /*
3528 * Set up the jbd2_inode if we are opening the inode for
3529 * writing and the journal is present
3530 diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c
3531 index 4098acc701c3..796ff0eafd3c 100644
3532 --- a/fs/ext4/move_extent.c
3533 +++ b/fs/ext4/move_extent.c
3534 @@ -60,10 +60,10 @@ ext4_double_down_write_data_sem(struct inode *first, struct inode *second)
3535 {
3536 if (first < second) {
3537 down_write(&EXT4_I(first)->i_data_sem);
3538 - down_write_nested(&EXT4_I(second)->i_data_sem, SINGLE_DEPTH_NESTING);
3539 + down_write_nested(&EXT4_I(second)->i_data_sem, I_DATA_SEM_OTHER);
3540 } else {
3541 down_write(&EXT4_I(second)->i_data_sem);
3542 - down_write_nested(&EXT4_I(first)->i_data_sem, SINGLE_DEPTH_NESTING);
3543 + down_write_nested(&EXT4_I(first)->i_data_sem, I_DATA_SEM_OTHER);
3544
3545 }
3546 }
3547 @@ -484,6 +484,13 @@ mext_check_arguments(struct inode *orig_inode,
3548 return -EBUSY;
3549 }
3550
3551 + if (IS_NOQUOTA(orig_inode) || IS_NOQUOTA(donor_inode)) {
3552 + ext4_debug("ext4 move extent: The argument files should "
3553 + "not be quota files [ino:orig %lu, donor %lu]\n",
3554 + orig_inode->i_ino, donor_inode->i_ino);
3555 + return -EBUSY;
3556 + }
3557 +
3558 /* Ext4 move extent supports only extent based file */
3559 if (!(ext4_test_inode_flag(orig_inode, EXT4_INODE_EXTENTS))) {
3560 ext4_debug("ext4 move extent: orig file is not extents "
3561 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
3562 index 3ed01ec011d7..a76ca677fd1a 100644
3563 --- a/fs/ext4/super.c
3564 +++ b/fs/ext4/super.c
3565 @@ -1324,9 +1324,9 @@ static int set_qf_name(struct super_block *sb, int qtype, substring_t *args)
3566 return -1;
3567 }
3568 if (ext4_has_feature_quota(sb)) {
3569 - ext4_msg(sb, KERN_ERR, "Cannot set journaled quota options "
3570 - "when QUOTA feature is enabled");
3571 - return -1;
3572 + ext4_msg(sb, KERN_INFO, "Journaled quota options "
3573 + "ignored when QUOTA feature is enabled");
3574 + return 1;
3575 }
3576 qname = match_strdup(args);
3577 if (!qname) {
3578 @@ -1689,10 +1689,10 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token,
3579 return -1;
3580 }
3581 if (ext4_has_feature_quota(sb)) {
3582 - ext4_msg(sb, KERN_ERR,
3583 - "Cannot set journaled quota options "
3584 + ext4_msg(sb, KERN_INFO,
3585 + "Quota format mount options ignored "
3586 "when QUOTA feature is enabled");
3587 - return -1;
3588 + return 1;
3589 }
3590 sbi->s_jquota_fmt = m->mount_opt;
3591 #endif
3592 @@ -1753,11 +1753,11 @@ static int parse_options(char *options, struct super_block *sb,
3593 #ifdef CONFIG_QUOTA
3594 if (ext4_has_feature_quota(sb) &&
3595 (test_opt(sb, USRQUOTA) || test_opt(sb, GRPQUOTA))) {
3596 - ext4_msg(sb, KERN_ERR, "Cannot set quota options when QUOTA "
3597 - "feature is enabled");
3598 - return 0;
3599 - }
3600 - if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) {
3601 + ext4_msg(sb, KERN_INFO, "Quota feature enabled, usrquota and grpquota "
3602 + "mount options ignored.");
3603 + clear_opt(sb, USRQUOTA);
3604 + clear_opt(sb, GRPQUOTA);
3605 + } else if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) {
3606 if (test_opt(sb, USRQUOTA) && sbi->s_qf_names[USRQUOTA])
3607 clear_opt(sb, USRQUOTA);
3608
3609 @@ -5021,6 +5021,20 @@ static int ext4_quota_on_mount(struct super_block *sb, int type)
3610 EXT4_SB(sb)->s_jquota_fmt, type);
3611 }
3612
3613 +static void lockdep_set_quota_inode(struct inode *inode, int subclass)
3614 +{
3615 + struct ext4_inode_info *ei = EXT4_I(inode);
3616 +
3617 + /* The first argument of lockdep_set_subclass has to be
3618 + * *exactly* the same as the argument to init_rwsem() --- in
3619 + * this case, in init_once() --- or lockdep gets unhappy
3620 + * because the name of the lock is set using the
3621 + * stringification of the argument to init_rwsem().
3622 + */
3623 + (void) ei; /* shut up clang warning if !CONFIG_LOCKDEP */
3624 + lockdep_set_subclass(&ei->i_data_sem, subclass);
3625 +}
3626 +
3627 /*
3628 * Standard function to be called on quota_on
3629 */
3630 @@ -5060,8 +5074,12 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,
3631 if (err)
3632 return err;
3633 }
3634 -
3635 - return dquot_quota_on(sb, type, format_id, path);
3636 + lockdep_set_quota_inode(path->dentry->d_inode, I_DATA_SEM_QUOTA);
3637 + err = dquot_quota_on(sb, type, format_id, path);
3638 + if (err)
3639 + lockdep_set_quota_inode(path->dentry->d_inode,
3640 + I_DATA_SEM_NORMAL);
3641 + return err;
3642 }
3643
3644 static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
3645 @@ -5088,8 +5106,11 @@ static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
3646
3647 /* Don't account quota for quota files to avoid recursion */
3648 qf_inode->i_flags |= S_NOQUOTA;
3649 + lockdep_set_quota_inode(qf_inode, I_DATA_SEM_QUOTA);
3650 err = dquot_enable(qf_inode, type, format_id, flags);
3651 iput(qf_inode);
3652 + if (err)
3653 + lockdep_set_quota_inode(qf_inode, I_DATA_SEM_NORMAL);
3654
3655 return err;
3656 }
3657 diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
3658 index 9cce67043f92..7ded17764754 100644
3659 --- a/fs/nfs/dir.c
3660 +++ b/fs/nfs/dir.c
3661 @@ -377,7 +377,7 @@ int nfs_readdir_xdr_filler(struct page **pages, nfs_readdir_descriptor_t *desc,
3662 again:
3663 timestamp = jiffies;
3664 gencount = nfs_inc_attr_generation_counter();
3665 - error = NFS_PROTO(inode)->readdir(file->f_path.dentry, cred, entry->cookie, pages,
3666 + error = NFS_PROTO(inode)->readdir(file_dentry(file), cred, entry->cookie, pages,
3667 NFS_SERVER(inode)->dtsize, desc->plus);
3668 if (error < 0) {
3669 /* We requested READDIRPLUS, but the server doesn't grok it */
3670 @@ -560,7 +560,7 @@ int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *en
3671 count++;
3672
3673 if (desc->plus != 0)
3674 - nfs_prime_dcache(desc->file->f_path.dentry, entry);
3675 + nfs_prime_dcache(file_dentry(desc->file), entry);
3676
3677 status = nfs_readdir_add_to_array(entry, page);
3678 if (status != 0)
3679 @@ -864,7 +864,7 @@ static bool nfs_dir_mapping_need_revalidate(struct inode *dir)
3680 */
3681 static int nfs_readdir(struct file *file, struct dir_context *ctx)
3682 {
3683 - struct dentry *dentry = file->f_path.dentry;
3684 + struct dentry *dentry = file_dentry(file);
3685 struct inode *inode = d_inode(dentry);
3686 nfs_readdir_descriptor_t my_desc,
3687 *desc = &my_desc;
3688 diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
3689 index 86faecf8f328..847b678af4f0 100644
3690 --- a/fs/nfs/inode.c
3691 +++ b/fs/nfs/inode.c
3692 @@ -940,7 +940,7 @@ int nfs_open(struct inode *inode, struct file *filp)
3693 {
3694 struct nfs_open_context *ctx;
3695
3696 - ctx = alloc_nfs_open_context(filp->f_path.dentry, filp->f_mode);
3697 + ctx = alloc_nfs_open_context(file_dentry(filp), filp->f_mode);
3698 if (IS_ERR(ctx))
3699 return PTR_ERR(ctx);
3700 nfs_file_set_open_context(filp, ctx);
3701 diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
3702 index 57ca1c8039c1..2a9ff14cfb3b 100644
3703 --- a/fs/nfs/nfs4file.c
3704 +++ b/fs/nfs/nfs4file.c
3705 @@ -26,7 +26,7 @@ static int
3706 nfs4_file_open(struct inode *inode, struct file *filp)
3707 {
3708 struct nfs_open_context *ctx;
3709 - struct dentry *dentry = filp->f_path.dentry;
3710 + struct dentry *dentry = file_dentry(filp);
3711 struct dentry *parent = NULL;
3712 struct inode *dir;
3713 unsigned openflags = filp->f_flags;
3714 @@ -57,7 +57,7 @@ nfs4_file_open(struct inode *inode, struct file *filp)
3715 parent = dget_parent(dentry);
3716 dir = d_inode(parent);
3717
3718 - ctx = alloc_nfs_open_context(filp->f_path.dentry, filp->f_mode);
3719 + ctx = alloc_nfs_open_context(file_dentry(filp), filp->f_mode);
3720 err = PTR_ERR(ctx);
3721 if (IS_ERR(ctx))
3722 goto out;
3723 diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
3724 index 619ad4b016d2..4399ea804447 100644
3725 --- a/fs/overlayfs/super.c
3726 +++ b/fs/overlayfs/super.c
3727 @@ -295,6 +295,37 @@ static void ovl_dentry_release(struct dentry *dentry)
3728 }
3729 }
3730
3731 +static struct dentry *ovl_d_real(struct dentry *dentry, struct inode *inode)
3732 +{
3733 + struct dentry *real;
3734 +
3735 + if (d_is_dir(dentry)) {
3736 + if (!inode || inode == d_inode(dentry))
3737 + return dentry;
3738 + goto bug;
3739 + }
3740 +
3741 + real = ovl_dentry_upper(dentry);
3742 + if (real && (!inode || inode == d_inode(real)))
3743 + return real;
3744 +
3745 + real = ovl_dentry_lower(dentry);
3746 + if (!real)
3747 + goto bug;
3748 +
3749 + if (!inode || inode == d_inode(real))
3750 + return real;
3751 +
3752 + /* Handle recursion */
3753 + if (real->d_flags & DCACHE_OP_REAL)
3754 + return real->d_op->d_real(real, inode);
3755 +
3756 +bug:
3757 + WARN(1, "ovl_d_real(%pd4, %s:%lu\n): real dentry not found\n", dentry,
3758 + inode ? inode->i_sb->s_id : "NULL", inode ? inode->i_ino : 0);
3759 + return dentry;
3760 +}
3761 +
3762 static int ovl_dentry_revalidate(struct dentry *dentry, unsigned int flags)
3763 {
3764 struct ovl_entry *oe = dentry->d_fsdata;
3765 @@ -339,11 +370,13 @@ static int ovl_dentry_weak_revalidate(struct dentry *dentry, unsigned int flags)
3766 static const struct dentry_operations ovl_dentry_operations = {
3767 .d_release = ovl_dentry_release,
3768 .d_select_inode = ovl_d_select_inode,
3769 + .d_real = ovl_d_real,
3770 };
3771
3772 static const struct dentry_operations ovl_reval_dentry_operations = {
3773 .d_release = ovl_dentry_release,
3774 .d_select_inode = ovl_d_select_inode,
3775 + .d_real = ovl_d_real,
3776 .d_revalidate = ovl_dentry_revalidate,
3777 .d_weak_revalidate = ovl_dentry_weak_revalidate,
3778 };
3779 diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
3780 index 22ab246feed3..eeae401a2412 100644
3781 --- a/include/linux/compiler-gcc.h
3782 +++ b/include/linux/compiler-gcc.h
3783 @@ -199,7 +199,7 @@
3784 #define unreachable() __builtin_unreachable()
3785
3786 /* Mark a function definition as prohibited from being cloned. */
3787 -#define __noclone __attribute__((__noclone__))
3788 +#define __noclone __attribute__((__noclone__, __optimize__("no-tracer")))
3789
3790 #endif /* GCC_VERSION >= 40500 */
3791
3792 diff --git a/include/linux/dcache.h b/include/linux/dcache.h
3793 index c4b5f4b3f8f8..03dda7ba73ac 100644
3794 --- a/include/linux/dcache.h
3795 +++ b/include/linux/dcache.h
3796 @@ -161,6 +161,7 @@ struct dentry_operations {
3797 struct vfsmount *(*d_automount)(struct path *);
3798 int (*d_manage)(struct dentry *, bool);
3799 struct inode *(*d_select_inode)(struct dentry *, unsigned);
3800 + struct dentry *(*d_real)(struct dentry *, struct inode *);
3801 } ____cacheline_aligned;
3802
3803 /*
3804 @@ -227,6 +228,7 @@ struct dentry_operations {
3805 #define DCACHE_MAY_FREE 0x00800000
3806 #define DCACHE_FALLTHRU 0x01000000 /* Fall through to lower layer */
3807 #define DCACHE_OP_SELECT_INODE 0x02000000 /* Unioned entry: dcache op selects inode */
3808 +#define DCACHE_OP_REAL 0x08000000
3809
3810 extern seqlock_t rename_lock;
3811
3812 @@ -582,4 +584,12 @@ static inline struct dentry *d_backing_dentry(struct dentry *upper)
3813 return upper;
3814 }
3815
3816 +static inline struct dentry *d_real(struct dentry *dentry)
3817 +{
3818 + if (unlikely(dentry->d_flags & DCACHE_OP_REAL))
3819 + return dentry->d_op->d_real(dentry, NULL);
3820 + else
3821 + return dentry;
3822 +}
3823 +
3824 #endif /* __LINUX_DCACHE_H */
3825 diff --git a/include/linux/filter.h b/include/linux/filter.h
3826 index 43aa1f8855c7..a51a5361695f 100644
3827 --- a/include/linux/filter.h
3828 +++ b/include/linux/filter.h
3829 @@ -465,10 +465,14 @@ int bpf_prog_create_from_user(struct bpf_prog **pfp, struct sock_fprog *fprog,
3830 void bpf_prog_destroy(struct bpf_prog *fp);
3831
3832 int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk);
3833 +int __sk_attach_filter(struct sock_fprog *fprog, struct sock *sk,
3834 + bool locked);
3835 int sk_attach_bpf(u32 ufd, struct sock *sk);
3836 int sk_reuseport_attach_filter(struct sock_fprog *fprog, struct sock *sk);
3837 int sk_reuseport_attach_bpf(u32 ufd, struct sock *sk);
3838 int sk_detach_filter(struct sock *sk);
3839 +int __sk_detach_filter(struct sock *sk, bool locked);
3840 +
3841 int sk_get_filter(struct sock *sk, struct sock_filter __user *filter,
3842 unsigned int len);
3843
3844 diff --git a/include/linux/fs.h b/include/linux/fs.h
3845 index 2c7f8d9c3c70..83c77b093ce2 100644
3846 --- a/include/linux/fs.h
3847 +++ b/include/linux/fs.h
3848 @@ -1234,6 +1234,16 @@ static inline struct inode *file_inode(const struct file *f)
3849 return f->f_inode;
3850 }
3851
3852 +static inline struct dentry *file_dentry(const struct file *file)
3853 +{
3854 + struct dentry *dentry = file->f_path.dentry;
3855 +
3856 + if (unlikely(dentry->d_flags & DCACHE_OP_REAL))
3857 + return dentry->d_op->d_real(dentry, file_inode(file));
3858 + else
3859 + return dentry;
3860 +}
3861 +
3862 static inline int locks_lock_file_wait(struct file *filp, struct file_lock *fl)
3863 {
3864 return locks_lock_inode_wait(file_inode(filp), fl);
3865 diff --git a/include/linux/if_bridge.h b/include/linux/if_bridge.h
3866 index a338a688ee4a..dcb89e3515db 100644
3867 --- a/include/linux/if_bridge.h
3868 +++ b/include/linux/if_bridge.h
3869 @@ -46,10 +46,6 @@ struct br_ip_list {
3870 #define BR_LEARNING_SYNC BIT(9)
3871 #define BR_PROXYARP_WIFI BIT(10)
3872
3873 -/* values as per ieee8021QBridgeFdbAgingTime */
3874 -#define BR_MIN_AGEING_TIME (10 * HZ)
3875 -#define BR_MAX_AGEING_TIME (1000000 * HZ)
3876 -
3877 #define BR_DEFAULT_AGEING_TIME (300 * HZ)
3878
3879 extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *));
3880 diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
3881 index 5440b7b705eb..6d1d8f4f759b 100644
3882 --- a/include/linux/netdevice.h
3883 +++ b/include/linux/netdevice.h
3884 @@ -267,6 +267,7 @@ struct header_ops {
3885 void (*cache_update)(struct hh_cache *hh,
3886 const struct net_device *dev,
3887 const unsigned char *haddr);
3888 + bool (*validate)(const char *ll_header, unsigned int len);
3889 };
3890
3891 /* These flag bits are private to the generic network queueing
3892 @@ -1420,8 +1421,7 @@ enum netdev_priv_flags {
3893 * @dma: DMA channel
3894 * @mtu: Interface MTU value
3895 * @type: Interface hardware type
3896 - * @hard_header_len: Hardware header length, which means that this is the
3897 - * minimum size of a packet.
3898 + * @hard_header_len: Maximum hardware header length.
3899 *
3900 * @needed_headroom: Extra headroom the hardware may need, but not in all
3901 * cases can this be guaranteed
3902 @@ -2627,6 +2627,24 @@ static inline int dev_parse_header(const struct sk_buff *skb,
3903 return dev->header_ops->parse(skb, haddr);
3904 }
3905
3906 +/* ll_header must have at least hard_header_len allocated */
3907 +static inline bool dev_validate_header(const struct net_device *dev,
3908 + char *ll_header, int len)
3909 +{
3910 + if (likely(len >= dev->hard_header_len))
3911 + return true;
3912 +
3913 + if (capable(CAP_SYS_RAWIO)) {
3914 + memset(ll_header + len, 0, dev->hard_header_len - len);
3915 + return true;
3916 + }
3917 +
3918 + if (dev->header_ops && dev->header_ops->validate)
3919 + return dev->header_ops->validate(ll_header, len);
3920 +
3921 + return false;
3922 +}
3923 +
3924 typedef int gifconf_func_t(struct net_device * dev, char __user * bufptr, int len);
3925 int register_gifconf(unsigned int family, gifconf_func_t *gifconf);
3926 static inline int unregister_gifconf(unsigned int family)
3927 diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h
3928 index 7f5f78bd15ad..245f57dbbb61 100644
3929 --- a/include/linux/usb_usual.h
3930 +++ b/include/linux/usb_usual.h
3931 @@ -79,6 +79,8 @@
3932 /* Cannot handle MI_REPORT_SUPPORTED_OPERATION_CODES */ \
3933 US_FLAG(MAX_SECTORS_240, 0x08000000) \
3934 /* Sets max_sectors to 240 */ \
3935 + US_FLAG(NO_REPORT_LUNS, 0x10000000) \
3936 + /* Cannot handle REPORT_LUNS */ \
3937
3938 #define US_FLAG(name, value) US_FL_##name = value ,
3939 enum { US_DO_ALL_FLAGS };
3940 diff --git a/include/net/bonding.h b/include/net/bonding.h
3941 index ee6c52053aa3..791800ddd6d9 100644
3942 --- a/include/net/bonding.h
3943 +++ b/include/net/bonding.h
3944 @@ -215,6 +215,7 @@ struct bonding {
3945 * ALB mode (6) - to sync the use and modifications of its hash table
3946 */
3947 spinlock_t mode_lock;
3948 + spinlock_t stats_lock;
3949 u8 send_peer_notif;
3950 u8 igmp_retrans;
3951 #ifdef CONFIG_PROC_FS
3952 diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
3953 index f63a16760ae9..ba93c0f69870 100644
3954 --- a/include/scsi/scsi_device.h
3955 +++ b/include/scsi/scsi_device.h
3956 @@ -513,6 +513,31 @@ static inline int scsi_device_tpgs(struct scsi_device *sdev)
3957 return sdev->inquiry ? (sdev->inquiry[5] >> 4) & 0x3 : 0;
3958 }
3959
3960 +/**
3961 + * scsi_device_supports_vpd - test if a device supports VPD pages
3962 + * @sdev: the &struct scsi_device to test
3963 + *
3964 + * If the 'try_vpd_pages' flag is set it takes precedence.
3965 + * Otherwise we will assume VPD pages are supported if the
3966 + * SCSI level is at least SPC-3 and 'skip_vpd_pages' is not set.
3967 + */
3968 +static inline int scsi_device_supports_vpd(struct scsi_device *sdev)
3969 +{
3970 + /* Attempt VPD inquiry if the device blacklist explicitly calls
3971 + * for it.
3972 + */
3973 + if (sdev->try_vpd_pages)
3974 + return 1;
3975 + /*
3976 + * Although VPD inquiries can go to SCSI-2 type devices,
3977 + * some USB ones crash on receiving them, and the pages
3978 + * we currently ask for are for SPC-3 and beyond
3979 + */
3980 + if (sdev->scsi_level > SCSI_SPC_2 && !sdev->skip_vpd_pages)
3981 + return 1;
3982 + return 0;
3983 +}
3984 +
3985 #define MODULE_ALIAS_SCSI_DEVICE(type) \
3986 MODULE_ALIAS("scsi:t-" __stringify(type) "*")
3987 #define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x"
3988 diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
3989 index 4504ca66118d..50da680c479f 100644
3990 --- a/kernel/bpf/helpers.c
3991 +++ b/kernel/bpf/helpers.c
3992 @@ -166,7 +166,7 @@ static u64 bpf_get_current_comm(u64 r1, u64 size, u64 r3, u64 r4, u64 r5)
3993 if (!task)
3994 return -EINVAL;
3995
3996 - memcpy(buf, task->comm, min_t(size_t, size, sizeof(task->comm)));
3997 + strlcpy(buf, task->comm, min_t(size_t, size, sizeof(task->comm)));
3998 return 0;
3999 }
4000
4001 diff --git a/mm/page_isolation.c b/mm/page_isolation.c
4002 index 92c4c36501e7..31555b689eb9 100644
4003 --- a/mm/page_isolation.c
4004 +++ b/mm/page_isolation.c
4005 @@ -289,11 +289,11 @@ struct page *alloc_migrate_target(struct page *page, unsigned long private,
4006 * now as a simple work-around, we use the next node for destination.
4007 */
4008 if (PageHuge(page)) {
4009 - nodemask_t src = nodemask_of_node(page_to_nid(page));
4010 - nodemask_t dst;
4011 - nodes_complement(dst, src);
4012 + int node = next_online_node(page_to_nid(page));
4013 + if (node == MAX_NUMNODES)
4014 + node = first_online_node;
4015 return alloc_huge_page_node(page_hstate(compound_head(page)),
4016 - next_node(page_to_nid(page), dst));
4017 + node);
4018 }
4019
4020 if (PageHighMem(page))
4021 diff --git a/net/ax25/ax25_ip.c b/net/ax25/ax25_ip.c
4022 index b563a3f5f2a8..2fa3be965101 100644
4023 --- a/net/ax25/ax25_ip.c
4024 +++ b/net/ax25/ax25_ip.c
4025 @@ -228,8 +228,23 @@ netdev_tx_t ax25_ip_xmit(struct sk_buff *skb)
4026 }
4027 #endif
4028
4029 +static bool ax25_validate_header(const char *header, unsigned int len)
4030 +{
4031 + ax25_digi digi;
4032 +
4033 + if (!len)
4034 + return false;
4035 +
4036 + if (header[0])
4037 + return true;
4038 +
4039 + return ax25_addr_parse(header + 1, len - 1, NULL, NULL, &digi, NULL,
4040 + NULL);
4041 +}
4042 +
4043 const struct header_ops ax25_header_ops = {
4044 .create = ax25_hard_header,
4045 + .validate = ax25_validate_header,
4046 };
4047
4048 EXPORT_SYMBOL(ax25_header_ops);
4049 diff --git a/net/bridge/br_stp.c b/net/bridge/br_stp.c
4050 index b3cca126b103..e2670c5baafd 100644
4051 --- a/net/bridge/br_stp.c
4052 +++ b/net/bridge/br_stp.c
4053 @@ -568,6 +568,14 @@ int br_set_max_age(struct net_bridge *br, unsigned long val)
4054
4055 }
4056
4057 +/* Set time interval that dynamic forwarding entries live
4058 + * For pure software bridge, allow values outside the 802.1
4059 + * standard specification for special cases:
4060 + * 0 - entry never ages (all permanant)
4061 + * 1 - entry disappears (no persistance)
4062 + *
4063 + * Offloaded switch entries maybe more restrictive
4064 + */
4065 int br_set_ageing_time(struct net_bridge *br, u32 ageing_time)
4066 {
4067 struct switchdev_attr attr = {
4068 @@ -579,11 +587,8 @@ int br_set_ageing_time(struct net_bridge *br, u32 ageing_time)
4069 unsigned long t = clock_t_to_jiffies(ageing_time);
4070 int err;
4071
4072 - if (t < BR_MIN_AGEING_TIME || t > BR_MAX_AGEING_TIME)
4073 - return -ERANGE;
4074 -
4075 err = switchdev_port_attr_set(br->dev, &attr);
4076 - if (err)
4077 + if (err && err != -EOPNOTSUPP)
4078 return err;
4079
4080 br->ageing_time = t;
4081 diff --git a/net/core/filter.c b/net/core/filter.c
4082 index bba502f7cd57..fb2951c3532d 100644
4083 --- a/net/core/filter.c
4084 +++ b/net/core/filter.c
4085 @@ -1147,7 +1147,8 @@ void bpf_prog_destroy(struct bpf_prog *fp)
4086 }
4087 EXPORT_SYMBOL_GPL(bpf_prog_destroy);
4088
4089 -static int __sk_attach_prog(struct bpf_prog *prog, struct sock *sk)
4090 +static int __sk_attach_prog(struct bpf_prog *prog, struct sock *sk,
4091 + bool locked)
4092 {
4093 struct sk_filter *fp, *old_fp;
4094
4095 @@ -1163,10 +1164,8 @@ static int __sk_attach_prog(struct bpf_prog *prog, struct sock *sk)
4096 return -ENOMEM;
4097 }
4098
4099 - old_fp = rcu_dereference_protected(sk->sk_filter,
4100 - sock_owned_by_user(sk));
4101 + old_fp = rcu_dereference_protected(sk->sk_filter, locked);
4102 rcu_assign_pointer(sk->sk_filter, fp);
4103 -
4104 if (old_fp)
4105 sk_filter_uncharge(sk, old_fp);
4106
4107 @@ -1245,7 +1244,8 @@ struct bpf_prog *__get_filter(struct sock_fprog *fprog, struct sock *sk)
4108 * occurs or there is insufficient memory for the filter a negative
4109 * errno code is returned. On success the return is zero.
4110 */
4111 -int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
4112 +int __sk_attach_filter(struct sock_fprog *fprog, struct sock *sk,
4113 + bool locked)
4114 {
4115 struct bpf_prog *prog = __get_filter(fprog, sk);
4116 int err;
4117 @@ -1253,7 +1253,7 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
4118 if (IS_ERR(prog))
4119 return PTR_ERR(prog);
4120
4121 - err = __sk_attach_prog(prog, sk);
4122 + err = __sk_attach_prog(prog, sk, locked);
4123 if (err < 0) {
4124 __bpf_prog_release(prog);
4125 return err;
4126 @@ -1261,7 +1261,12 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
4127
4128 return 0;
4129 }
4130 -EXPORT_SYMBOL_GPL(sk_attach_filter);
4131 +EXPORT_SYMBOL_GPL(__sk_attach_filter);
4132 +
4133 +int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
4134 +{
4135 + return __sk_attach_filter(fprog, sk, sock_owned_by_user(sk));
4136 +}
4137
4138 int sk_reuseport_attach_filter(struct sock_fprog *fprog, struct sock *sk)
4139 {
4140 @@ -1307,7 +1312,7 @@ int sk_attach_bpf(u32 ufd, struct sock *sk)
4141 if (IS_ERR(prog))
4142 return PTR_ERR(prog);
4143
4144 - err = __sk_attach_prog(prog, sk);
4145 + err = __sk_attach_prog(prog, sk, sock_owned_by_user(sk));
4146 if (err < 0) {
4147 bpf_prog_put(prog);
4148 return err;
4149 @@ -2105,7 +2110,7 @@ static int __init register_sk_filter_ops(void)
4150 }
4151 late_initcall(register_sk_filter_ops);
4152
4153 -int sk_detach_filter(struct sock *sk)
4154 +int __sk_detach_filter(struct sock *sk, bool locked)
4155 {
4156 int ret = -ENOENT;
4157 struct sk_filter *filter;
4158 @@ -2113,8 +2118,7 @@ int sk_detach_filter(struct sock *sk)
4159 if (sock_flag(sk, SOCK_FILTER_LOCKED))
4160 return -EPERM;
4161
4162 - filter = rcu_dereference_protected(sk->sk_filter,
4163 - sock_owned_by_user(sk));
4164 + filter = rcu_dereference_protected(sk->sk_filter, locked);
4165 if (filter) {
4166 RCU_INIT_POINTER(sk->sk_filter, NULL);
4167 sk_filter_uncharge(sk, filter);
4168 @@ -2123,7 +2127,12 @@ int sk_detach_filter(struct sock *sk)
4169
4170 return ret;
4171 }
4172 -EXPORT_SYMBOL_GPL(sk_detach_filter);
4173 +EXPORT_SYMBOL_GPL(__sk_detach_filter);
4174 +
4175 +int sk_detach_filter(struct sock *sk)
4176 +{
4177 + return __sk_detach_filter(sk, sock_owned_by_user(sk));
4178 +}
4179
4180 int sk_get_filter(struct sock *sk, struct sock_filter __user *ubuf,
4181 unsigned int len)
4182 diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
4183 index 8261d95dd846..215e6137f6ff 100644
4184 --- a/net/core/rtnetlink.c
4185 +++ b/net/core/rtnetlink.c
4186 @@ -905,6 +905,7 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
4187 + rtnl_link_get_af_size(dev, ext_filter_mask) /* IFLA_AF_SPEC */
4188 + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_PORT_ID */
4189 + nla_total_size(MAX_PHYS_ITEM_ID_LEN) /* IFLA_PHYS_SWITCH_ID */
4190 + + nla_total_size(IFNAMSIZ) /* IFLA_PHYS_PORT_NAME */
4191 + nla_total_size(1); /* IFLA_PROTO_DOWN */
4192
4193 }
4194 diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
4195 index 902d606324a0..8be8f27bfacc 100644
4196 --- a/net/dccp/ipv4.c
4197 +++ b/net/dccp/ipv4.c
4198 @@ -204,8 +204,6 @@ void dccp_req_err(struct sock *sk, u64 seq)
4199 * ICMPs are not backlogged, hence we cannot get an established
4200 * socket here.
4201 */
4202 - WARN_ON(req->sk);
4203 -
4204 if (!between48(seq, dccp_rsk(req)->dreq_iss, dccp_rsk(req)->dreq_gss)) {
4205 NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS);
4206 } else {
4207 diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
4208 index fa4daba8db55..d8fb47fcad05 100644
4209 --- a/net/dsa/dsa.c
4210 +++ b/net/dsa/dsa.c
4211 @@ -935,6 +935,14 @@ static void dsa_remove_dst(struct dsa_switch_tree *dst)
4212 {
4213 int i;
4214
4215 + dst->master_netdev->dsa_ptr = NULL;
4216 +
4217 + /* If we used a tagging format that doesn't have an ethertype
4218 + * field, make sure that all packets from this point get sent
4219 + * without the tag and go through the regular receive path.
4220 + */
4221 + wmb();
4222 +
4223 for (i = 0; i < dst->pd->nr_chips; i++) {
4224 struct dsa_switch *ds = dst->ds[i];
4225
4226 @@ -988,14 +996,6 @@ static int dsa_suspend(struct device *d)
4227 struct dsa_switch_tree *dst = platform_get_drvdata(pdev);
4228 int i, ret = 0;
4229
4230 - dst->master_netdev->dsa_ptr = NULL;
4231 -
4232 - /* If we used a tagging format that doesn't have an ethertype
4233 - * field, make sure that all packets from this point get sent
4234 - * without the tag and go through the regular receive path.
4235 - */
4236 - wmb();
4237 -
4238 for (i = 0; i < dst->pd->nr_chips; i++) {
4239 struct dsa_switch *ds = dst->ds[i];
4240
4241 diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
4242 index f6303b17546b..0212591b0077 100644
4243 --- a/net/ipv4/devinet.c
4244 +++ b/net/ipv4/devinet.c
4245 @@ -334,6 +334,9 @@ static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap,
4246
4247 ASSERT_RTNL();
4248
4249 + if (in_dev->dead)
4250 + goto no_promotions;
4251 +
4252 /* 1. Deleting primary ifaddr forces deletion all secondaries
4253 * unless alias promotion is set
4254 **/
4255 @@ -380,6 +383,7 @@ static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap,
4256 fib_del_ifaddr(ifa, ifa1);
4257 }
4258
4259 +no_promotions:
4260 /* 2. Unlink it */
4261
4262 *ifap = ifa1->ifa_next;
4263 diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
4264 index 473447593060..8a9246deccfe 100644
4265 --- a/net/ipv4/fib_frontend.c
4266 +++ b/net/ipv4/fib_frontend.c
4267 @@ -280,7 +280,6 @@ __be32 fib_compute_spec_dst(struct sk_buff *skb)
4268 struct in_device *in_dev;
4269 struct fib_result res;
4270 struct rtable *rt;
4271 - struct flowi4 fl4;
4272 struct net *net;
4273 int scope;
4274
4275 @@ -296,14 +295,13 @@ __be32 fib_compute_spec_dst(struct sk_buff *skb)
4276
4277 scope = RT_SCOPE_UNIVERSE;
4278 if (!ipv4_is_zeronet(ip_hdr(skb)->saddr)) {
4279 - fl4.flowi4_oif = 0;
4280 - fl4.flowi4_iif = LOOPBACK_IFINDEX;
4281 - fl4.daddr = ip_hdr(skb)->saddr;
4282 - fl4.saddr = 0;
4283 - fl4.flowi4_tos = RT_TOS(ip_hdr(skb)->tos);
4284 - fl4.flowi4_scope = scope;
4285 - fl4.flowi4_mark = IN_DEV_SRC_VMARK(in_dev) ? skb->mark : 0;
4286 - fl4.flowi4_tun_key.tun_id = 0;
4287 + struct flowi4 fl4 = {
4288 + .flowi4_iif = LOOPBACK_IFINDEX,
4289 + .daddr = ip_hdr(skb)->saddr,
4290 + .flowi4_tos = RT_TOS(ip_hdr(skb)->tos),
4291 + .flowi4_scope = scope,
4292 + .flowi4_mark = IN_DEV_SRC_VMARK(in_dev) ? skb->mark : 0,
4293 + };
4294 if (!fib_lookup(net, &fl4, &res, 0))
4295 return FIB_RES_PREFSRC(net, res);
4296 } else {
4297 @@ -922,6 +920,9 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim)
4298 subnet = 1;
4299 }
4300
4301 + if (in_dev->dead)
4302 + goto no_promotions;
4303 +
4304 /* Deletion is more complicated than add.
4305 * We should take care of not to delete too much :-)
4306 *
4307 @@ -997,6 +998,7 @@ void fib_del_ifaddr(struct in_ifaddr *ifa, struct in_ifaddr *iprim)
4308 }
4309 }
4310
4311 +no_promotions:
4312 if (!(ok & BRD_OK))
4313 fib_magic(RTM_DELROUTE, RTN_BROADCAST, ifa->ifa_broadcast, 32, prim);
4314 if (subnet && ifa->ifa_prefixlen < 31) {
4315 diff --git a/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c b/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c
4316 index c6eb42100e9a..ea91058b5f6f 100644
4317 --- a/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c
4318 +++ b/net/ipv4/netfilter/nf_nat_masquerade_ipv4.c
4319 @@ -108,10 +108,18 @@ static int masq_inet_event(struct notifier_block *this,
4320 unsigned long event,
4321 void *ptr)
4322 {
4323 - struct net_device *dev = ((struct in_ifaddr *)ptr)->ifa_dev->dev;
4324 + struct in_device *idev = ((struct in_ifaddr *)ptr)->ifa_dev;
4325 struct netdev_notifier_info info;
4326
4327 - netdev_notifier_info_init(&info, dev);
4328 + /* The masq_dev_notifier will catch the case of the device going
4329 + * down. So if the inetdev is dead and being destroyed we have
4330 + * no work to do. Otherwise this is an individual address removal
4331 + * and we have to perform the flush.
4332 + */
4333 + if (idev->dead)
4334 + return NOTIFY_DONE;
4335 +
4336 + netdev_notifier_info_init(&info, idev->dev);
4337 return masq_device_event(this, event, &info);
4338 }
4339
4340 diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
4341 index 487ac67059e2..a7b1a905580b 100644
4342 --- a/net/ipv4/tcp_ipv4.c
4343 +++ b/net/ipv4/tcp_ipv4.c
4344 @@ -319,8 +319,6 @@ void tcp_req_err(struct sock *sk, u32 seq, bool abort)
4345 /* ICMPs are not backlogged, hence we cannot get
4346 * an established socket here.
4347 */
4348 - WARN_ON(req->sk);
4349 -
4350 if (seq != tcp_rsk(req)->snt_isn) {
4351 NET_INC_STATS_BH(net, LINUX_MIB_OUTOFWINDOWICMPS);
4352 } else if (abort) {
4353 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
4354 index 95d2f198017e..eb8933bc0e6e 100644
4355 --- a/net/ipv4/udp.c
4356 +++ b/net/ipv4/udp.c
4357 @@ -2082,10 +2082,14 @@ void udp_v4_early_demux(struct sk_buff *skb)
4358 if (!in_dev)
4359 return;
4360
4361 - ours = ip_check_mc_rcu(in_dev, iph->daddr, iph->saddr,
4362 - iph->protocol);
4363 - if (!ours)
4364 - return;
4365 + /* we are supposed to accept bcast packets */
4366 + if (skb->pkt_type == PACKET_MULTICAST) {
4367 + ours = ip_check_mc_rcu(in_dev, iph->daddr, iph->saddr,
4368 + iph->protocol);
4369 + if (!ours)
4370 + return;
4371 + }
4372 +
4373 sk = __udp4_lib_mcast_demux_lookup(net, uh->dest, iph->daddr,
4374 uh->source, iph->saddr, dif);
4375 } else if (skb->pkt_type == PACKET_HOST) {
4376 diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
4377 index a163102f1803..2a6606c935cc 100644
4378 --- a/net/ipv6/ip6_output.c
4379 +++ b/net/ipv6/ip6_output.c
4380 @@ -1091,8 +1091,8 @@ static inline int ip6_ufo_append_data(struct sock *sk,
4381 int getfrag(void *from, char *to, int offset, int len,
4382 int odd, struct sk_buff *skb),
4383 void *from, int length, int hh_len, int fragheaderlen,
4384 - int transhdrlen, int mtu, unsigned int flags,
4385 - const struct flowi6 *fl6)
4386 + int exthdrlen, int transhdrlen, int mtu,
4387 + unsigned int flags, const struct flowi6 *fl6)
4388
4389 {
4390 struct sk_buff *skb;
4391 @@ -1117,7 +1117,7 @@ static inline int ip6_ufo_append_data(struct sock *sk,
4392 skb_put(skb, fragheaderlen + transhdrlen);
4393
4394 /* initialize network header pointer */
4395 - skb_reset_network_header(skb);
4396 + skb_set_network_header(skb, exthdrlen);
4397
4398 /* initialize protocol header pointer */
4399 skb->transport_header = skb->network_header + fragheaderlen;
4400 @@ -1359,7 +1359,7 @@ emsgsize:
4401 (rt->dst.dev->features & NETIF_F_UFO) &&
4402 (sk->sk_type == SOCK_DGRAM) && !udp_get_no_check6_tx(sk)) {
4403 err = ip6_ufo_append_data(sk, queue, getfrag, from, length,
4404 - hh_len, fragheaderlen,
4405 + hh_len, fragheaderlen, exthdrlen,
4406 transhdrlen, mtu, flags, fl6);
4407 if (err)
4408 goto error;
4409 diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
4410 index 6c5dfec7a377..3991b21e24ad 100644
4411 --- a/net/ipv6/ip6_tunnel.c
4412 +++ b/net/ipv6/ip6_tunnel.c
4413 @@ -343,12 +343,12 @@ static int ip6_tnl_create2(struct net_device *dev)
4414
4415 t = netdev_priv(dev);
4416
4417 + dev->rtnl_link_ops = &ip6_link_ops;
4418 err = register_netdevice(dev);
4419 if (err < 0)
4420 goto out;
4421
4422 strcpy(t->parms.name, dev->name);
4423 - dev->rtnl_link_ops = &ip6_link_ops;
4424
4425 dev_hold(dev);
4426 ip6_tnl_link(ip6n, t);
4427 diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
4428 index 422dd014aa2c..6794120f53b8 100644
4429 --- a/net/ipv6/udp.c
4430 +++ b/net/ipv6/udp.c
4431 @@ -883,8 +883,8 @@ start_lookup:
4432 flush_stack(stack, count, skb, count - 1);
4433 } else {
4434 if (!inner_flushed)
4435 - UDP_INC_STATS_BH(net, UDP_MIB_IGNOREDMULTI,
4436 - proto == IPPROTO_UDPLITE);
4437 + UDP6_INC_STATS_BH(net, UDP_MIB_IGNOREDMULTI,
4438 + proto == IPPROTO_UDPLITE);
4439 consume_skb(skb);
4440 }
4441 return 0;
4442 diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
4443 index ec22078b0914..42de4ccd159f 100644
4444 --- a/net/l2tp/l2tp_ip.c
4445 +++ b/net/l2tp/l2tp_ip.c
4446 @@ -123,12 +123,11 @@ static int l2tp_ip_recv(struct sk_buff *skb)
4447 struct l2tp_tunnel *tunnel = NULL;
4448 int length;
4449
4450 - /* Point to L2TP header */
4451 - optr = ptr = skb->data;
4452 -
4453 if (!pskb_may_pull(skb, 4))
4454 goto discard;
4455
4456 + /* Point to L2TP header */
4457 + optr = ptr = skb->data;
4458 session_id = ntohl(*((__be32 *) ptr));
4459 ptr += 4;
4460
4461 @@ -156,6 +155,9 @@ static int l2tp_ip_recv(struct sk_buff *skb)
4462 if (!pskb_may_pull(skb, length))
4463 goto discard;
4464
4465 + /* Point to L2TP header */
4466 + optr = ptr = skb->data;
4467 + ptr += 4;
4468 pr_debug("%s: ip recv\n", tunnel->name);
4469 print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, ptr, length);
4470 }
4471 diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
4472 index a2c8747d2936..9ee4ddb6b397 100644
4473 --- a/net/l2tp/l2tp_ip6.c
4474 +++ b/net/l2tp/l2tp_ip6.c
4475 @@ -135,12 +135,11 @@ static int l2tp_ip6_recv(struct sk_buff *skb)
4476 struct l2tp_tunnel *tunnel = NULL;
4477 int length;
4478
4479 - /* Point to L2TP header */
4480 - optr = ptr = skb->data;
4481 -
4482 if (!pskb_may_pull(skb, 4))
4483 goto discard;
4484
4485 + /* Point to L2TP header */
4486 + optr = ptr = skb->data;
4487 session_id = ntohl(*((__be32 *) ptr));
4488 ptr += 4;
4489
4490 @@ -168,6 +167,9 @@ static int l2tp_ip6_recv(struct sk_buff *skb)
4491 if (!pskb_may_pull(skb, length))
4492 goto discard;
4493
4494 + /* Point to L2TP header */
4495 + optr = ptr = skb->data;
4496 + ptr += 4;
4497 pr_debug("%s: ip recv\n", tunnel->name);
4498 print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, ptr, length);
4499 }
4500 diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
4501 index 978d3bc31df7..1b33d89906e1 100644
4502 --- a/net/mac80211/ibss.c
4503 +++ b/net/mac80211/ibss.c
4504 @@ -7,6 +7,7 @@
4505 * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
4506 * Copyright 2009, Johannes Berg <johannes@sipsolutions.net>
4507 * Copyright 2013-2014 Intel Mobile Communications GmbH
4508 + * Copyright(c) 2016 Intel Deutschland GmbH
4509 *
4510 * This program is free software; you can redistribute it and/or modify
4511 * it under the terms of the GNU General Public License version 2 as
4512 @@ -1485,14 +1486,21 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
4513
4514 sdata_info(sdata, "Trigger new scan to find an IBSS to join\n");
4515
4516 - num = ieee80211_ibss_setup_scan_channels(local->hw.wiphy,
4517 - &ifibss->chandef,
4518 - channels,
4519 - ARRAY_SIZE(channels));
4520 scan_width = cfg80211_chandef_to_scan_width(&ifibss->chandef);
4521 - ieee80211_request_ibss_scan(sdata, ifibss->ssid,
4522 - ifibss->ssid_len, channels, num,
4523 - scan_width);
4524 +
4525 + if (ifibss->fixed_channel) {
4526 + num = ieee80211_ibss_setup_scan_channels(local->hw.wiphy,
4527 + &ifibss->chandef,
4528 + channels,
4529 + ARRAY_SIZE(channels));
4530 + ieee80211_request_ibss_scan(sdata, ifibss->ssid,
4531 + ifibss->ssid_len, channels,
4532 + num, scan_width);
4533 + } else {
4534 + ieee80211_request_ibss_scan(sdata, ifibss->ssid,
4535 + ifibss->ssid_len, NULL,
4536 + 0, scan_width);
4537 + }
4538 } else {
4539 int interval = IEEE80211_SCAN_INTERVAL;
4540
4541 diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
4542 index c9e325d2e120..7a2b7915093b 100644
4543 --- a/net/mac80211/iface.c
4544 +++ b/net/mac80211/iface.c
4545 @@ -977,7 +977,10 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
4546 if (sdata->vif.txq) {
4547 struct txq_info *txqi = to_txq_info(sdata->vif.txq);
4548
4549 + spin_lock_bh(&txqi->queue.lock);
4550 ieee80211_purge_tx_queue(&local->hw, &txqi->queue);
4551 + spin_unlock_bh(&txqi->queue.lock);
4552 +
4553 atomic_set(&sdata->txqs_len[txqi->txq.ac], 0);
4554 }
4555
4556 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
4557 index 60d093f40f1d..261df74eaf38 100644
4558 --- a/net/mac80211/rx.c
4559 +++ b/net/mac80211/rx.c
4560 @@ -2249,7 +2249,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
4561 struct ieee80211_local *local = rx->local;
4562 struct ieee80211_sub_if_data *sdata = rx->sdata;
4563 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
4564 - u16 q, hdrlen;
4565 + u16 ac, q, hdrlen;
4566
4567 hdr = (struct ieee80211_hdr *) skb->data;
4568 hdrlen = ieee80211_hdrlen(hdr->frame_control);
4569 @@ -2318,7 +2318,8 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
4570 ether_addr_equal(sdata->vif.addr, hdr->addr3))
4571 return RX_CONTINUE;
4572
4573 - q = ieee80211_select_queue_80211(sdata, skb, hdr);
4574 + ac = ieee80211_select_queue_80211(sdata, skb, hdr);
4575 + q = sdata->vif.hw_queue[ac];
4576 if (ieee80211_queue_stopped(&local->hw, q)) {
4577 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_congestion);
4578 return RX_DROP_MONITOR;
4579 diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
4580 index a4a4f89d3ba0..23ed038cf7f9 100644
4581 --- a/net/mac80211/sta_info.c
4582 +++ b/net/mac80211/sta_info.c
4583 @@ -257,11 +257,11 @@ void sta_info_free(struct ieee80211_local *local, struct sta_info *sta)
4584 }
4585
4586 /* Caller must hold local->sta_mtx */
4587 -static void sta_info_hash_add(struct ieee80211_local *local,
4588 - struct sta_info *sta)
4589 +static int sta_info_hash_add(struct ieee80211_local *local,
4590 + struct sta_info *sta)
4591 {
4592 - rhashtable_insert_fast(&local->sta_hash, &sta->hash_node,
4593 - sta_rht_params);
4594 + return rhashtable_insert_fast(&local->sta_hash, &sta->hash_node,
4595 + sta_rht_params);
4596 }
4597
4598 static void sta_deliver_ps_frames(struct work_struct *wk)
4599 @@ -498,11 +498,17 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
4600 {
4601 struct ieee80211_local *local = sta->local;
4602 struct ieee80211_sub_if_data *sdata = sta->sdata;
4603 - struct station_info sinfo;
4604 + struct station_info *sinfo;
4605 int err = 0;
4606
4607 lockdep_assert_held(&local->sta_mtx);
4608
4609 + sinfo = kzalloc(sizeof(struct station_info), GFP_KERNEL);
4610 + if (!sinfo) {
4611 + err = -ENOMEM;
4612 + goto out_err;
4613 + }
4614 +
4615 /* check if STA exists already */
4616 if (sta_info_get_bss(sdata, sta->sta.addr)) {
4617 err = -EEXIST;
4618 @@ -517,7 +523,9 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
4619 set_sta_flag(sta, WLAN_STA_BLOCK_BA);
4620
4621 /* make the station visible */
4622 - sta_info_hash_add(local, sta);
4623 + err = sta_info_hash_add(local, sta);
4624 + if (err)
4625 + goto out_drop_sta;
4626
4627 list_add_tail_rcu(&sta->list, &local->sta_list);
4628
4629 @@ -534,10 +542,9 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
4630 ieee80211_sta_debugfs_add(sta);
4631 rate_control_add_sta_debugfs(sta);
4632
4633 - memset(&sinfo, 0, sizeof(sinfo));
4634 - sinfo.filled = 0;
4635 - sinfo.generation = local->sta_generation;
4636 - cfg80211_new_sta(sdata->dev, sta->sta.addr, &sinfo, GFP_KERNEL);
4637 + sinfo->generation = local->sta_generation;
4638 + cfg80211_new_sta(sdata->dev, sta->sta.addr, sinfo, GFP_KERNEL);
4639 + kfree(sinfo);
4640
4641 sta_dbg(sdata, "Inserted STA %pM\n", sta->sta.addr);
4642
4643 @@ -552,6 +559,7 @@ static int sta_info_insert_finish(struct sta_info *sta) __acquires(RCU)
4644 out_remove:
4645 sta_info_hash_del(local, sta);
4646 list_del_rcu(&sta->list);
4647 + out_drop_sta:
4648 local->num_sta--;
4649 synchronize_net();
4650 __cleanup_single_sta(sta);
4651 @@ -898,7 +906,7 @@ static void __sta_info_destroy_part2(struct sta_info *sta)
4652 {
4653 struct ieee80211_local *local = sta->local;
4654 struct ieee80211_sub_if_data *sdata = sta->sdata;
4655 - struct station_info sinfo = {};
4656 + struct station_info *sinfo;
4657 int ret;
4658
4659 /*
4660 @@ -936,8 +944,11 @@ static void __sta_info_destroy_part2(struct sta_info *sta)
4661
4662 sta_dbg(sdata, "Removed STA %pM\n", sta->sta.addr);
4663
4664 - sta_set_sinfo(sta, &sinfo);
4665 - cfg80211_del_sta_sinfo(sdata->dev, sta->sta.addr, &sinfo, GFP_KERNEL);
4666 + sinfo = kzalloc(sizeof(*sinfo), GFP_KERNEL);
4667 + if (sinfo)
4668 + sta_set_sinfo(sta, sinfo);
4669 + cfg80211_del_sta_sinfo(sdata->dev, sta->sta.addr, sinfo, GFP_KERNEL);
4670 + kfree(sinfo);
4671
4672 rate_control_remove_sta_debugfs(sta);
4673 ieee80211_sta_debugfs_remove(sta);
4674 diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
4675 index b18c5ed42d95..0b80a7140cc4 100644
4676 --- a/net/mpls/af_mpls.c
4677 +++ b/net/mpls/af_mpls.c
4678 @@ -543,6 +543,9 @@ static struct net_device *find_outdev(struct net *net,
4679 if (!dev)
4680 return ERR_PTR(-ENODEV);
4681
4682 + if (IS_ERR(dev))
4683 + return dev;
4684 +
4685 /* The caller is holding rtnl anyways, so release the dev reference */
4686 dev_put(dev);
4687
4688 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
4689 index 992396aa635c..da1ae0e13cb5 100644
4690 --- a/net/packet/af_packet.c
4691 +++ b/net/packet/af_packet.c
4692 @@ -1916,6 +1916,10 @@ retry:
4693 goto retry;
4694 }
4695
4696 + if (!dev_validate_header(dev, skb->data, len)) {
4697 + err = -EINVAL;
4698 + goto out_unlock;
4699 + }
4700 if (len > (dev->mtu + dev->hard_header_len + extra_len) &&
4701 !packet_extra_vlan_len_allowed(dev, skb)) {
4702 err = -EMSGSIZE;
4703 @@ -2326,18 +2330,6 @@ static void tpacket_destruct_skb(struct sk_buff *skb)
4704 sock_wfree(skb);
4705 }
4706
4707 -static bool ll_header_truncated(const struct net_device *dev, int len)
4708 -{
4709 - /* net device doesn't like empty head */
4710 - if (unlikely(len < dev->hard_header_len)) {
4711 - net_warn_ratelimited("%s: packet size is too short (%d < %d)\n",
4712 - current->comm, len, dev->hard_header_len);
4713 - return true;
4714 - }
4715 -
4716 - return false;
4717 -}
4718 -
4719 static void tpacket_set_protocol(const struct net_device *dev,
4720 struct sk_buff *skb)
4721 {
4722 @@ -2420,19 +2412,19 @@ static int tpacket_fill_skb(struct packet_sock *po, struct sk_buff *skb,
4723 if (unlikely(err < 0))
4724 return -EINVAL;
4725 } else if (dev->hard_header_len) {
4726 - if (ll_header_truncated(dev, tp_len))
4727 - return -EINVAL;
4728 + int hdrlen = min_t(int, dev->hard_header_len, tp_len);
4729
4730 skb_push(skb, dev->hard_header_len);
4731 - err = skb_store_bits(skb, 0, data,
4732 - dev->hard_header_len);
4733 + err = skb_store_bits(skb, 0, data, hdrlen);
4734 if (unlikely(err))
4735 return err;
4736 + if (!dev_validate_header(dev, skb->data, hdrlen))
4737 + return -EINVAL;
4738 if (!skb->protocol)
4739 tpacket_set_protocol(dev, skb);
4740
4741 - data += dev->hard_header_len;
4742 - to_write -= dev->hard_header_len;
4743 + data += hdrlen;
4744 + to_write -= hdrlen;
4745 }
4746
4747 offset = offset_in_page(data);
4748 @@ -2763,9 +2755,6 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
4749 offset = dev_hard_header(skb, dev, ntohs(proto), addr, NULL, len);
4750 if (unlikely(offset < 0))
4751 goto out_free;
4752 - } else {
4753 - if (ll_header_truncated(dev, len))
4754 - goto out_free;
4755 }
4756
4757 /* Returns -EFAULT on error */
4758 @@ -2773,6 +2762,12 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
4759 if (err)
4760 goto out_free;
4761
4762 + if (sock->type == SOCK_RAW &&
4763 + !dev_validate_header(dev, skb->data, len)) {
4764 + err = -EINVAL;
4765 + goto out_free;
4766 + }
4767 +
4768 sock_tx_timestamp(sk, &skb_shinfo(skb)->tx_flags);
4769
4770 if (!gso_type && (len > dev->mtu + reserve + extra_len) &&
4771 diff --git a/net/socket.c b/net/socket.c
4772 index c044d1e8508c..db13ae893dce 100644
4773 --- a/net/socket.c
4774 +++ b/net/socket.c
4775 @@ -2240,31 +2240,31 @@ int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
4776 cond_resched();
4777 }
4778
4779 -out_put:
4780 - fput_light(sock->file, fput_needed);
4781 -
4782 if (err == 0)
4783 - return datagrams;
4784 + goto out_put;
4785
4786 - if (datagrams != 0) {
4787 + if (datagrams == 0) {
4788 + datagrams = err;
4789 + goto out_put;
4790 + }
4791 +
4792 + /*
4793 + * We may return less entries than requested (vlen) if the
4794 + * sock is non block and there aren't enough datagrams...
4795 + */
4796 + if (err != -EAGAIN) {
4797 /*
4798 - * We may return less entries than requested (vlen) if the
4799 - * sock is non block and there aren't enough datagrams...
4800 + * ... or if recvmsg returns an error after we
4801 + * received some datagrams, where we record the
4802 + * error to return on the next call or if the
4803 + * app asks about it using getsockopt(SO_ERROR).
4804 */
4805 - if (err != -EAGAIN) {
4806 - /*
4807 - * ... or if recvmsg returns an error after we
4808 - * received some datagrams, where we record the
4809 - * error to return on the next call or if the
4810 - * app asks about it using getsockopt(SO_ERROR).
4811 - */
4812 - sock->sk->sk_err = -err;
4813 - }
4814 -
4815 - return datagrams;
4816 + sock->sk->sk_err = -err;
4817 }
4818 +out_put:
4819 + fput_light(sock->file, fput_needed);
4820
4821 - return err;
4822 + return datagrams;
4823 }
4824
4825 SYSCALL_DEFINE5(recvmmsg, int, fd, struct mmsghdr __user *, mmsg,
4826 diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
4827 index ad7f5b3f9b61..1c4ad477ce93 100644
4828 --- a/net/xfrm/xfrm_input.c
4829 +++ b/net/xfrm/xfrm_input.c
4830 @@ -292,12 +292,15 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
4831 XFRM_SKB_CB(skb)->seq.input.hi = seq_hi;
4832
4833 skb_dst_force(skb);
4834 + dev_hold(skb->dev);
4835
4836 nexthdr = x->type->input(x, skb);
4837
4838 if (nexthdr == -EINPROGRESS)
4839 return 0;
4840 resume:
4841 + dev_put(skb->dev);
4842 +
4843 spin_lock(&x->lock);
4844 if (nexthdr <= 0) {
4845 if (nexthdr == -EBADMSG) {
4846 diff --git a/sound/core/timer.c b/sound/core/timer.c
4847 index dca817fc7894..e5e7e4368996 100644
4848 --- a/sound/core/timer.c
4849 +++ b/sound/core/timer.c
4850 @@ -1041,8 +1041,8 @@ static int snd_timer_s_start(struct snd_timer * timer)
4851 njiff += timer->sticks - priv->correction;
4852 priv->correction = 0;
4853 }
4854 - priv->last_expires = priv->tlist.expires = njiff;
4855 - add_timer(&priv->tlist);
4856 + priv->last_expires = njiff;
4857 + mod_timer(&priv->tlist, njiff);
4858 return 0;
4859 }
4860
4861 diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
4862 index e68fa449ebef..0c9585602bf3 100644
4863 --- a/sound/pci/hda/patch_hdmi.c
4864 +++ b/sound/pci/hda/patch_hdmi.c
4865 @@ -1623,6 +1623,8 @@ static bool hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
4866
4867 mutex_lock(&per_pin->lock);
4868 pin_eld->monitor_present = !!(present & AC_PINSENSE_PRESENCE);
4869 + eld->monitor_present = pin_eld->monitor_present;
4870 +
4871 if (pin_eld->monitor_present)
4872 eld->eld_valid = !!(present & AC_PINSENSE_ELDV);
4873 else
4874 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
4875 index 4f5ca0b9ce27..1402ba954b3d 100644
4876 --- a/sound/pci/hda/patch_realtek.c
4877 +++ b/sound/pci/hda/patch_realtek.c
4878 @@ -4759,6 +4759,8 @@ enum {
4879 ALC255_FIXUP_DELL_SPK_NOISE,
4880 ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
4881 ALC280_FIXUP_HP_HEADSET_MIC,
4882 + ALC221_FIXUP_HP_FRONT_MIC,
4883 + ALC292_FIXUP_TPT460,
4884 };
4885
4886 static const struct hda_fixup alc269_fixups[] = {
4887 @@ -5401,6 +5403,19 @@ static const struct hda_fixup alc269_fixups[] = {
4888 .chained = true,
4889 .chain_id = ALC269_FIXUP_HEADSET_MIC,
4890 },
4891 + [ALC221_FIXUP_HP_FRONT_MIC] = {
4892 + .type = HDA_FIXUP_PINS,
4893 + .v.pins = (const struct hda_pintbl[]) {
4894 + { 0x19, 0x02a19020 }, /* Front Mic */
4895 + { }
4896 + },
4897 + },
4898 + [ALC292_FIXUP_TPT460] = {
4899 + .type = HDA_FIXUP_FUNC,
4900 + .v.func = alc_fixup_tpt440_dock,
4901 + .chained = true,
4902 + .chain_id = ALC293_FIXUP_LENOVO_SPK_NOISE,
4903 + },
4904 };
4905
4906 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4907 @@ -5506,6 +5521,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4908 SND_PCI_QUIRK(0x103c, 0x2336, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4909 SND_PCI_QUIRK(0x103c, 0x2337, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
4910 SND_PCI_QUIRK(0x103c, 0x221c, "HP EliteBook 755 G2", ALC280_FIXUP_HP_HEADSET_MIC),
4911 + SND_PCI_QUIRK(0x103c, 0x8256, "HP", ALC221_FIXUP_HP_FRONT_MIC),
4912 SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
4913 SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
4914 SND_PCI_QUIRK(0x1043, 0x115d, "Asus 1015E", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
4915 @@ -5554,7 +5570,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
4916 SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK),
4917 SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK),
4918 SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
4919 - SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE),
4920 + SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460),
4921 SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
4922 SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
4923 SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
4924 @@ -5649,6 +5665,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
4925 {.id = ALC283_FIXUP_SENSE_COMBO_JACK, .name = "alc283-sense-combo"},
4926 {.id = ALC292_FIXUP_TPT440_DOCK, .name = "tpt440-dock"},
4927 {.id = ALC292_FIXUP_TPT440, .name = "tpt440"},
4928 + {.id = ALC292_FIXUP_TPT460, .name = "tpt460"},
4929 {}
4930 };
4931 #define ALC225_STANDARD_PINS \
4932 @@ -6406,6 +6423,7 @@ enum {
4933 ALC668_FIXUP_AUTO_MUTE,
4934 ALC668_FIXUP_DELL_DISABLE_AAMIX,
4935 ALC668_FIXUP_DELL_XPS13,
4936 + ALC662_FIXUP_ASUS_Nx50,
4937 };
4938
4939 static const struct hda_fixup alc662_fixups[] = {
4940 @@ -6646,6 +6664,12 @@ static const struct hda_fixup alc662_fixups[] = {
4941 .type = HDA_FIXUP_FUNC,
4942 .v.func = alc_fixup_bass_chmap,
4943 },
4944 + [ALC662_FIXUP_ASUS_Nx50] = {
4945 + .type = HDA_FIXUP_FUNC,
4946 + .v.func = alc_fixup_auto_mute_via_amp,
4947 + .chained = true,
4948 + .chain_id = ALC662_FIXUP_BASS_1A
4949 + },
4950 };
4951
4952 static const struct snd_pci_quirk alc662_fixup_tbl[] = {
4953 @@ -6668,8 +6692,9 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
4954 SND_PCI_QUIRK(0x1028, 0x0698, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
4955 SND_PCI_QUIRK(0x1028, 0x069f, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
4956 SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
4957 - SND_PCI_QUIRK(0x1043, 0x11cd, "Asus N550", ALC662_FIXUP_BASS_1A),
4958 + SND_PCI_QUIRK(0x1043, 0x11cd, "Asus N550", ALC662_FIXUP_ASUS_Nx50),
4959 SND_PCI_QUIRK(0x1043, 0x13df, "Asus N550JX", ALC662_FIXUP_BASS_1A),
4960 + SND_PCI_QUIRK(0x1043, 0x129d, "Asus N750", ALC662_FIXUP_ASUS_Nx50),
4961 SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_MODE4_CHMAP),
4962 SND_PCI_QUIRK(0x1043, 0x15a7, "ASUS UX51VZH", ALC662_FIXUP_BASS_16),
4963 SND_PCI_QUIRK(0x1043, 0x1b73, "ASUS N55SF", ALC662_FIXUP_BASS_16),
4964 diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
4965 index ddca6547399b..1f8fb0d904e0 100644
4966 --- a/sound/usb/mixer_maps.c
4967 +++ b/sound/usb/mixer_maps.c
4968 @@ -349,6 +349,16 @@ static struct usbmix_name_map bose_companion5_map[] = {
4969 };
4970
4971 /*
4972 + * Dell usb dock with ALC4020 codec had a firmware problem where it got
4973 + * screwed up when zero volume is passed; just skip it as a workaround
4974 + */
4975 +static const struct usbmix_name_map dell_alc4020_map[] = {
4976 + { 16, NULL },
4977 + { 19, NULL },
4978 + { 0 }
4979 +};
4980 +
4981 +/*
4982 * Control map entries
4983 */
4984
4985 @@ -431,6 +441,10 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {
4986 .map = aureon_51_2_map,
4987 },
4988 {
4989 + .id = USB_ID(0x0bda, 0x4014),
4990 + .map = dell_alc4020_map,
4991 + },
4992 + {
4993 .id = USB_ID(0x0dba, 0x1000),
4994 .map = mbox1_map,
4995 },
4996 diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
4997 index cd7eac28edee..001fb4dc0722 100644
4998 --- a/sound/usb/quirks.c
4999 +++ b/sound/usb/quirks.c
5000 @@ -1135,9 +1135,11 @@ bool snd_usb_get_sample_rate_quirk(struct snd_usb_audio *chip)
5001 case USB_ID(0x045E, 0x076F): /* MS Lifecam HD-6000 */
5002 case USB_ID(0x045E, 0x0772): /* MS Lifecam Studio */
5003 case USB_ID(0x045E, 0x0779): /* MS Lifecam HD-3000 */
5004 + case USB_ID(0x047F, 0x0415): /* Plantronics BT-300 */
5005 case USB_ID(0x047F, 0xAA05): /* Plantronics DA45 */
5006 case USB_ID(0x04D8, 0xFEEA): /* Benchmark DAC1 Pre */
5007 case USB_ID(0x074D, 0x3553): /* Outlaw RR2150 (Micronas UAC3553B) */
5008 + case USB_ID(0x1de7, 0x0014): /* Phoenix Audio TMX320 */
5009 case USB_ID(0x21B4, 0x0081): /* AudioQuest DragonFly */
5010 return true;
5011 }