Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0167-4.9.68-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (show annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 8 months ago) by niro
File size: 112753 byte(s)
-added kerenl-alx-legacy pkg
1 diff --git a/Makefile b/Makefile
2 index 70546af61a0a..dfe17af517b2 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 67
9 +SUBLEVEL = 68
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 diff --git a/arch/arm/mach-omap1/dma.c b/arch/arm/mach-omap1/dma.c
14 index f6ba589cd312..c821c1d5610e 100644
15 --- a/arch/arm/mach-omap1/dma.c
16 +++ b/arch/arm/mach-omap1/dma.c
17 @@ -32,7 +32,6 @@
18 #include "soc.h"
19
20 #define OMAP1_DMA_BASE (0xfffed800)
21 -#define OMAP1_LOGICAL_DMA_CH_COUNT 17
22
23 static u32 enable_1510_mode;
24
25 @@ -348,8 +347,6 @@ static int __init omap1_system_dma_init(void)
26 goto exit_iounmap;
27 }
28
29 - d->lch_count = OMAP1_LOGICAL_DMA_CH_COUNT;
30 -
31 /* Valid attributes for omap1 plus processors */
32 if (cpu_is_omap15xx())
33 d->dev_caps = ENABLE_1510_MODE;
34 @@ -366,13 +363,14 @@ static int __init omap1_system_dma_init(void)
35 d->dev_caps |= CLEAR_CSR_ON_READ;
36 d->dev_caps |= IS_WORD_16;
37
38 - if (cpu_is_omap15xx())
39 - d->chan_count = 9;
40 - else if (cpu_is_omap16xx() || cpu_is_omap7xx()) {
41 - if (!(d->dev_caps & ENABLE_1510_MODE))
42 - d->chan_count = 16;
43 + /* available logical channels */
44 + if (cpu_is_omap15xx()) {
45 + d->lch_count = 9;
46 + } else {
47 + if (d->dev_caps & ENABLE_1510_MODE)
48 + d->lch_count = 9;
49 else
50 - d->chan_count = 9;
51 + d->lch_count = 16;
52 }
53
54 p = dma_plat_info;
55 diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c
56 index da310bb779b9..88676fe9b119 100644
57 --- a/arch/arm/mach-omap2/pdata-quirks.c
58 +++ b/arch/arm/mach-omap2/pdata-quirks.c
59 @@ -147,7 +147,7 @@ static struct ti_st_plat_data wilink_pdata = {
60 .nshutdown_gpio = 137,
61 .dev_name = "/dev/ttyO1",
62 .flow_cntrl = 1,
63 - .baud_rate = 300000,
64 + .baud_rate = 3000000,
65 };
66
67 static struct platform_device wl18xx_device = {
68 diff --git a/arch/m68k/mm/mcfmmu.c b/arch/m68k/mm/mcfmmu.c
69 index 87131cd3bc8f..6d3a50446b21 100644
70 --- a/arch/m68k/mm/mcfmmu.c
71 +++ b/arch/m68k/mm/mcfmmu.c
72 @@ -169,7 +169,7 @@ void __init cf_bootmem_alloc(void)
73 max_pfn = max_low_pfn = PFN_DOWN(_ramend);
74 high_memory = (void *)_ramend;
75
76 - m68k_virt_to_node_shift = fls(_ramend - _rambase - 1) - 6;
77 + m68k_virt_to_node_shift = fls(_ramend - 1) - 6;
78 module_fixup(NULL, __start_fixup, __stop_fixup);
79
80 /* setup bootmem data */
81 diff --git a/arch/powerpc/include/asm/book3s/64/hash.h b/arch/powerpc/include/asm/book3s/64/hash.h
82 index f61cad3de4e6..4c935f7504f7 100644
83 --- a/arch/powerpc/include/asm/book3s/64/hash.h
84 +++ b/arch/powerpc/include/asm/book3s/64/hash.h
85 @@ -201,6 +201,10 @@ extern int __meminit hash__vmemmap_create_mapping(unsigned long start,
86 unsigned long phys);
87 extern void hash__vmemmap_remove_mapping(unsigned long start,
88 unsigned long page_size);
89 +
90 +int hash__create_section_mapping(unsigned long start, unsigned long end);
91 +int hash__remove_section_mapping(unsigned long start, unsigned long end);
92 +
93 #endif /* !__ASSEMBLY__ */
94 #endif /* __KERNEL__ */
95 #endif /* _ASM_POWERPC_BOOK3S_64_HASH_H */
96 diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
97 index 78dabf065ba9..bd666287c5ed 100644
98 --- a/arch/powerpc/mm/hash_utils_64.c
99 +++ b/arch/powerpc/mm/hash_utils_64.c
100 @@ -747,7 +747,7 @@ static unsigned long __init htab_get_table_size(void)
101 }
102
103 #ifdef CONFIG_MEMORY_HOTPLUG
104 -int create_section_mapping(unsigned long start, unsigned long end)
105 +int hash__create_section_mapping(unsigned long start, unsigned long end)
106 {
107 int rc = htab_bolt_mapping(start, end, __pa(start),
108 pgprot_val(PAGE_KERNEL), mmu_linear_psize,
109 @@ -761,7 +761,7 @@ int create_section_mapping(unsigned long start, unsigned long end)
110 return rc;
111 }
112
113 -int remove_section_mapping(unsigned long start, unsigned long end)
114 +int hash__remove_section_mapping(unsigned long start, unsigned long end)
115 {
116 int rc = htab_remove_mapping(start, end, mmu_linear_psize,
117 mmu_kernel_ssize);
118 diff --git a/arch/powerpc/mm/pgtable-book3s64.c b/arch/powerpc/mm/pgtable-book3s64.c
119 index f4f437cbabf1..0fad7f6742ff 100644
120 --- a/arch/powerpc/mm/pgtable-book3s64.c
121 +++ b/arch/powerpc/mm/pgtable-book3s64.c
122 @@ -125,3 +125,21 @@ void mmu_cleanup_all(void)
123 else if (mmu_hash_ops.hpte_clear_all)
124 mmu_hash_ops.hpte_clear_all();
125 }
126 +
127 +#ifdef CONFIG_MEMORY_HOTPLUG
128 +int create_section_mapping(unsigned long start, unsigned long end)
129 +{
130 + if (radix_enabled())
131 + return -ENODEV;
132 +
133 + return hash__create_section_mapping(start, end);
134 +}
135 +
136 +int remove_section_mapping(unsigned long start, unsigned long end)
137 +{
138 + if (radix_enabled())
139 + return -ENODEV;
140 +
141 + return hash__remove_section_mapping(start, end);
142 +}
143 +#endif /* CONFIG_MEMORY_HOTPLUG */
144 diff --git a/arch/s390/include/asm/pci_insn.h b/arch/s390/include/asm/pci_insn.h
145 index 649eb62c52b3..9e02cb7955c1 100644
146 --- a/arch/s390/include/asm/pci_insn.h
147 +++ b/arch/s390/include/asm/pci_insn.h
148 @@ -81,6 +81,6 @@ int zpci_refresh_trans(u64 fn, u64 addr, u64 range);
149 int zpci_load(u64 *data, u64 req, u64 offset);
150 int zpci_store(u64 data, u64 req, u64 offset);
151 int zpci_store_block(const u64 *data, u64 req, u64 offset);
152 -void zpci_set_irq_ctrl(u16 ctl, char *unused, u8 isc);
153 +int zpci_set_irq_ctrl(u16 ctl, char *unused, u8 isc);
154
155 #endif
156 diff --git a/arch/s390/include/asm/runtime_instr.h b/arch/s390/include/asm/runtime_instr.h
157 index 402ad6df4897..c54a9310d814 100644
158 --- a/arch/s390/include/asm/runtime_instr.h
159 +++ b/arch/s390/include/asm/runtime_instr.h
160 @@ -85,6 +85,8 @@ static inline void restore_ri_cb(struct runtime_instr_cb *cb_next,
161 load_runtime_instr_cb(&runtime_instr_empty_cb);
162 }
163
164 -void exit_thread_runtime_instr(void);
165 +struct task_struct;
166 +
167 +void runtime_instr_release(struct task_struct *tsk);
168
169 #endif /* _RUNTIME_INSTR_H */
170 diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
171 index 172fe1121d99..8382fc62cde6 100644
172 --- a/arch/s390/kernel/process.c
173 +++ b/arch/s390/kernel/process.c
174 @@ -70,8 +70,6 @@ extern void kernel_thread_starter(void);
175 */
176 void exit_thread(struct task_struct *tsk)
177 {
178 - if (tsk == current)
179 - exit_thread_runtime_instr();
180 }
181
182 void flush_thread(void)
183 @@ -84,6 +82,7 @@ void release_thread(struct task_struct *dead_task)
184
185 void arch_release_task_struct(struct task_struct *tsk)
186 {
187 + runtime_instr_release(tsk);
188 }
189
190 int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
191 diff --git a/arch/s390/kernel/runtime_instr.c b/arch/s390/kernel/runtime_instr.c
192 index 70cdb03d4acd..fd03a7569e10 100644
193 --- a/arch/s390/kernel/runtime_instr.c
194 +++ b/arch/s390/kernel/runtime_instr.c
195 @@ -18,11 +18,24 @@
196 /* empty control block to disable RI by loading it */
197 struct runtime_instr_cb runtime_instr_empty_cb;
198
199 +void runtime_instr_release(struct task_struct *tsk)
200 +{
201 + kfree(tsk->thread.ri_cb);
202 +}
203 +
204 static void disable_runtime_instr(void)
205 {
206 - struct pt_regs *regs = task_pt_regs(current);
207 + struct task_struct *task = current;
208 + struct pt_regs *regs;
209
210 + if (!task->thread.ri_cb)
211 + return;
212 + regs = task_pt_regs(task);
213 + preempt_disable();
214 load_runtime_instr_cb(&runtime_instr_empty_cb);
215 + kfree(task->thread.ri_cb);
216 + task->thread.ri_cb = NULL;
217 + preempt_enable();
218
219 /*
220 * Make sure the RI bit is deleted from the PSW. If the user did not
221 @@ -43,19 +56,6 @@ static void init_runtime_instr_cb(struct runtime_instr_cb *cb)
222 cb->valid = 1;
223 }
224
225 -void exit_thread_runtime_instr(void)
226 -{
227 - struct task_struct *task = current;
228 -
229 - preempt_disable();
230 - if (!task->thread.ri_cb)
231 - return;
232 - disable_runtime_instr();
233 - kfree(task->thread.ri_cb);
234 - task->thread.ri_cb = NULL;
235 - preempt_enable();
236 -}
237 -
238 SYSCALL_DEFINE1(s390_runtime_instr, int, command)
239 {
240 struct runtime_instr_cb *cb;
241 @@ -64,7 +64,7 @@ SYSCALL_DEFINE1(s390_runtime_instr, int, command)
242 return -EOPNOTSUPP;
243
244 if (command == S390_RUNTIME_INSTR_STOP) {
245 - exit_thread_runtime_instr();
246 + disable_runtime_instr();
247 return 0;
248 }
249
250 diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c
251 index 15ffc19c8c0c..03a1d5976ff5 100644
252 --- a/arch/s390/pci/pci.c
253 +++ b/arch/s390/pci/pci.c
254 @@ -354,7 +354,8 @@ static void zpci_irq_handler(struct airq_struct *airq)
255 /* End of second scan with interrupts on. */
256 break;
257 /* First scan complete, reenable interrupts. */
258 - zpci_set_irq_ctrl(SIC_IRQ_MODE_SINGLE, NULL, PCI_ISC);
259 + if (zpci_set_irq_ctrl(SIC_IRQ_MODE_SINGLE, NULL, PCI_ISC))
260 + break;
261 si = 0;
262 continue;
263 }
264 @@ -928,7 +929,7 @@ static int __init pci_base_init(void)
265 if (!s390_pci_probe)
266 return 0;
267
268 - if (!test_facility(69) || !test_facility(71) || !test_facility(72))
269 + if (!test_facility(69) || !test_facility(71))
270 return 0;
271
272 rc = zpci_debug_init();
273 diff --git a/arch/s390/pci/pci_insn.c b/arch/s390/pci/pci_insn.c
274 index fa8d7d4b9751..248146dcfce3 100644
275 --- a/arch/s390/pci/pci_insn.c
276 +++ b/arch/s390/pci/pci_insn.c
277 @@ -7,6 +7,7 @@
278 #include <linux/export.h>
279 #include <linux/errno.h>
280 #include <linux/delay.h>
281 +#include <asm/facility.h>
282 #include <asm/pci_insn.h>
283 #include <asm/pci_debug.h>
284 #include <asm/processor.h>
285 @@ -91,11 +92,14 @@ int zpci_refresh_trans(u64 fn, u64 addr, u64 range)
286 }
287
288 /* Set Interruption Controls */
289 -void zpci_set_irq_ctrl(u16 ctl, char *unused, u8 isc)
290 +int zpci_set_irq_ctrl(u16 ctl, char *unused, u8 isc)
291 {
292 + if (!test_facility(72))
293 + return -EIO;
294 asm volatile (
295 " .insn rsy,0xeb00000000d1,%[ctl],%[isc],%[u]\n"
296 : : [ctl] "d" (ctl), [isc] "d" (isc << 27), [u] "Q" (*unused));
297 + return 0;
298 }
299
300 /* PCI Load */
301 diff --git a/arch/x86/events/intel/ds.c b/arch/x86/events/intel/ds.c
302 index be202390bbd3..9dfeeeca0ea8 100644
303 --- a/arch/x86/events/intel/ds.c
304 +++ b/arch/x86/events/intel/ds.c
305 @@ -1389,9 +1389,13 @@ static void intel_pmu_drain_pebs_nhm(struct pt_regs *iregs)
306 continue;
307
308 /* log dropped samples number */
309 - if (error[bit])
310 + if (error[bit]) {
311 perf_log_lost_samples(event, error[bit]);
312
313 + if (perf_event_account_interrupt(event))
314 + x86_pmu_stop(event, 0);
315 + }
316 +
317 if (counts[bit]) {
318 __intel_pmu_pebs_event(event, iregs, base,
319 top, bit, counts[bit]);
320 diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h
321 index 91dfcafe27a6..bad25bb80679 100644
322 --- a/arch/x86/include/asm/syscalls.h
323 +++ b/arch/x86/include/asm/syscalls.h
324 @@ -21,7 +21,7 @@ asmlinkage long sys_ioperm(unsigned long, unsigned long, int);
325 asmlinkage long sys_iopl(unsigned int);
326
327 /* kernel/ldt.c */
328 -asmlinkage int sys_modify_ldt(int, void __user *, unsigned long);
329 +asmlinkage long sys_modify_ldt(int, void __user *, unsigned long);
330
331 /* kernel/signal.c */
332 asmlinkage long sys_rt_sigreturn(void);
333 diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
334 index 095ef7ddd6ae..abfbb61b18b8 100644
335 --- a/arch/x86/kernel/fpu/xstate.c
336 +++ b/arch/x86/kernel/fpu/xstate.c
337 @@ -1077,6 +1077,7 @@ int copyin_to_xsaves(const void *kbuf, const void __user *ubuf,
338 * Add back in the features that came in from userspace:
339 */
340 xsave->header.xfeatures |= xfeatures;
341 + xsave->header.xcomp_bv = XCOMP_BV_COMPACTED_FORMAT | xsave->header.xfeatures;
342
343 return 0;
344 }
345 diff --git a/arch/x86/kernel/kprobes/ftrace.c b/arch/x86/kernel/kprobes/ftrace.c
346 index 5f8f0b3cc674..2c0b0b645a74 100644
347 --- a/arch/x86/kernel/kprobes/ftrace.c
348 +++ b/arch/x86/kernel/kprobes/ftrace.c
349 @@ -26,7 +26,7 @@
350 #include "common.h"
351
352 static nokprobe_inline
353 -int __skip_singlestep(struct kprobe *p, struct pt_regs *regs,
354 +void __skip_singlestep(struct kprobe *p, struct pt_regs *regs,
355 struct kprobe_ctlblk *kcb, unsigned long orig_ip)
356 {
357 /*
358 @@ -41,20 +41,21 @@ int __skip_singlestep(struct kprobe *p, struct pt_regs *regs,
359 __this_cpu_write(current_kprobe, NULL);
360 if (orig_ip)
361 regs->ip = orig_ip;
362 - return 1;
363 }
364
365 int skip_singlestep(struct kprobe *p, struct pt_regs *regs,
366 struct kprobe_ctlblk *kcb)
367 {
368 - if (kprobe_ftrace(p))
369 - return __skip_singlestep(p, regs, kcb, 0);
370 - else
371 - return 0;
372 + if (kprobe_ftrace(p)) {
373 + __skip_singlestep(p, regs, kcb, 0);
374 + preempt_enable_no_resched();
375 + return 1;
376 + }
377 + return 0;
378 }
379 NOKPROBE_SYMBOL(skip_singlestep);
380
381 -/* Ftrace callback handler for kprobes */
382 +/* Ftrace callback handler for kprobes -- called under preepmt disabed */
383 void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
384 struct ftrace_ops *ops, struct pt_regs *regs)
385 {
386 @@ -77,13 +78,17 @@ void kprobe_ftrace_handler(unsigned long ip, unsigned long parent_ip,
387 /* Kprobe handler expects regs->ip = ip + 1 as breakpoint hit */
388 regs->ip = ip + sizeof(kprobe_opcode_t);
389
390 + /* To emulate trap based kprobes, preempt_disable here */
391 + preempt_disable();
392 __this_cpu_write(current_kprobe, p);
393 kcb->kprobe_status = KPROBE_HIT_ACTIVE;
394 - if (!p->pre_handler || !p->pre_handler(p, regs))
395 + if (!p->pre_handler || !p->pre_handler(p, regs)) {
396 __skip_singlestep(p, regs, kcb, orig_ip);
397 + preempt_enable_no_resched();
398 + }
399 /*
400 * If pre_handler returns !0, it sets regs->ip and
401 - * resets current kprobe.
402 + * resets current kprobe, and keep preempt count +1.
403 */
404 }
405 end:
406 diff --git a/arch/x86/kernel/ldt.c b/arch/x86/kernel/ldt.c
407 index 6707039b9032..5f70014ca602 100644
408 --- a/arch/x86/kernel/ldt.c
409 +++ b/arch/x86/kernel/ldt.c
410 @@ -12,6 +12,7 @@
411 #include <linux/string.h>
412 #include <linux/mm.h>
413 #include <linux/smp.h>
414 +#include <linux/syscalls.h>
415 #include <linux/slab.h>
416 #include <linux/vmalloc.h>
417 #include <linux/uaccess.h>
418 @@ -271,8 +272,8 @@ static int write_ldt(void __user *ptr, unsigned long bytecount, int oldmode)
419 return error;
420 }
421
422 -asmlinkage int sys_modify_ldt(int func, void __user *ptr,
423 - unsigned long bytecount)
424 +SYSCALL_DEFINE3(modify_ldt, int , func , void __user * , ptr ,
425 + unsigned long , bytecount)
426 {
427 int ret = -ENOSYS;
428
429 @@ -290,5 +291,14 @@ asmlinkage int sys_modify_ldt(int func, void __user *ptr,
430 ret = write_ldt(ptr, bytecount, 0);
431 break;
432 }
433 - return ret;
434 + /*
435 + * The SYSCALL_DEFINE() macros give us an 'unsigned long'
436 + * return type, but tht ABI for sys_modify_ldt() expects
437 + * 'int'. This cast gives us an int-sized value in %rax
438 + * for the return code. The 'unsigned' is necessary so
439 + * the compiler does not try to sign-extend the negative
440 + * return codes into the high half of the register when
441 + * taking the value from int->long.
442 + */
443 + return (unsigned int)ret;
444 }
445 diff --git a/arch/x86/um/ldt.c b/arch/x86/um/ldt.c
446 index 836a1eb5df43..3ee234b6234d 100644
447 --- a/arch/x86/um/ldt.c
448 +++ b/arch/x86/um/ldt.c
449 @@ -6,6 +6,7 @@
450 #include <linux/mm.h>
451 #include <linux/sched.h>
452 #include <linux/slab.h>
453 +#include <linux/syscalls.h>
454 #include <linux/uaccess.h>
455 #include <asm/unistd.h>
456 #include <os.h>
457 @@ -369,7 +370,9 @@ void free_ldt(struct mm_context *mm)
458 mm->arch.ldt.entry_count = 0;
459 }
460
461 -int sys_modify_ldt(int func, void __user *ptr, unsigned long bytecount)
462 +SYSCALL_DEFINE3(modify_ldt, int , func , void __user * , ptr ,
463 + unsigned long , bytecount)
464 {
465 - return do_modify_ldt_skas(func, ptr, bytecount);
466 + /* See non-um modify_ldt() for why we do this cast */
467 + return (unsigned int)do_modify_ldt_skas(func, ptr, bytecount);
468 }
469 diff --git a/drivers/crypto/caam/intern.h b/drivers/crypto/caam/intern.h
470 index 5d4c05074a5c..e2bcacc1a921 100644
471 --- a/drivers/crypto/caam/intern.h
472 +++ b/drivers/crypto/caam/intern.h
473 @@ -41,6 +41,7 @@ struct caam_drv_private_jr {
474 struct device *dev;
475 int ridx;
476 struct caam_job_ring __iomem *rregs; /* JobR's register space */
477 + struct tasklet_struct irqtask;
478 int irq; /* One per queue */
479
480 /* Number of scatterlist crypt transforms active on the JobR */
481 diff --git a/drivers/crypto/caam/jr.c b/drivers/crypto/caam/jr.c
482 index 757c27f9953d..9e7f28122bb7 100644
483 --- a/drivers/crypto/caam/jr.c
484 +++ b/drivers/crypto/caam/jr.c
485 @@ -73,6 +73,8 @@ static int caam_jr_shutdown(struct device *dev)
486
487 ret = caam_reset_hw_jr(dev);
488
489 + tasklet_kill(&jrp->irqtask);
490 +
491 /* Release interrupt */
492 free_irq(jrp->irq, dev);
493
494 @@ -128,7 +130,7 @@ static irqreturn_t caam_jr_interrupt(int irq, void *st_dev)
495
496 /*
497 * Check the output ring for ready responses, kick
498 - * the threaded irq if jobs done.
499 + * tasklet if jobs done.
500 */
501 irqstate = rd_reg32(&jrp->rregs->jrintstatus);
502 if (!irqstate)
503 @@ -150,13 +152,18 @@ static irqreturn_t caam_jr_interrupt(int irq, void *st_dev)
504 /* Have valid interrupt at this point, just ACK and trigger */
505 wr_reg32(&jrp->rregs->jrintstatus, irqstate);
506
507 - return IRQ_WAKE_THREAD;
508 + preempt_disable();
509 + tasklet_schedule(&jrp->irqtask);
510 + preempt_enable();
511 +
512 + return IRQ_HANDLED;
513 }
514
515 -static irqreturn_t caam_jr_threadirq(int irq, void *st_dev)
516 +/* Deferred service handler, run as interrupt-fired tasklet */
517 +static void caam_jr_dequeue(unsigned long devarg)
518 {
519 int hw_idx, sw_idx, i, head, tail;
520 - struct device *dev = st_dev;
521 + struct device *dev = (struct device *)devarg;
522 struct caam_drv_private_jr *jrp = dev_get_drvdata(dev);
523 void (*usercall)(struct device *dev, u32 *desc, u32 status, void *arg);
524 u32 *userdesc, userstatus;
525 @@ -230,8 +237,6 @@ static irqreturn_t caam_jr_threadirq(int irq, void *st_dev)
526
527 /* reenable / unmask IRQs */
528 clrsetbits_32(&jrp->rregs->rconfig_lo, JRCFG_IMSK, 0);
529 -
530 - return IRQ_HANDLED;
531 }
532
533 /**
534 @@ -389,10 +394,11 @@ static int caam_jr_init(struct device *dev)
535
536 jrp = dev_get_drvdata(dev);
537
538 + tasklet_init(&jrp->irqtask, caam_jr_dequeue, (unsigned long)dev);
539 +
540 /* Connect job ring interrupt handler. */
541 - error = request_threaded_irq(jrp->irq, caam_jr_interrupt,
542 - caam_jr_threadirq, IRQF_SHARED,
543 - dev_name(dev), dev);
544 + error = request_irq(jrp->irq, caam_jr_interrupt, IRQF_SHARED,
545 + dev_name(dev), dev);
546 if (error) {
547 dev_err(dev, "can't connect JobR %d interrupt (%d)\n",
548 jrp->ridx, jrp->irq);
549 @@ -454,6 +460,7 @@ static int caam_jr_init(struct device *dev)
550 out_free_irq:
551 free_irq(jrp->irq, dev);
552 out_kill_deq:
553 + tasklet_kill(&jrp->irqtask);
554 return error;
555 }
556
557 diff --git a/drivers/dma-buf/fence.c b/drivers/dma-buf/fence.c
558 index 4d51f9e83fa8..04bf29808200 100644
559 --- a/drivers/dma-buf/fence.c
560 +++ b/drivers/dma-buf/fence.c
561 @@ -280,6 +280,31 @@ int fence_add_callback(struct fence *fence, struct fence_cb *cb,
562 }
563 EXPORT_SYMBOL(fence_add_callback);
564
565 +/**
566 + * fence_get_status - returns the status upon completion
567 + * @fence: [in] the fence to query
568 + *
569 + * This wraps fence_get_status_locked() to return the error status
570 + * condition on a signaled fence. See fence_get_status_locked() for more
571 + * details.
572 + *
573 + * Returns 0 if the fence has not yet been signaled, 1 if the fence has
574 + * been signaled without an error condition, or a negative error code
575 + * if the fence has been completed in err.
576 + */
577 +int fence_get_status(struct fence *fence)
578 +{
579 + unsigned long flags;
580 + int status;
581 +
582 + spin_lock_irqsave(fence->lock, flags);
583 + status = fence_get_status_locked(fence);
584 + spin_unlock_irqrestore(fence->lock, flags);
585 +
586 + return status;
587 +}
588 +EXPORT_SYMBOL(fence_get_status);
589 +
590 /**
591 * fence_remove_callback - remove a callback from the signaling list
592 * @fence: [in] the fence to wait on
593 @@ -526,6 +551,7 @@ fence_init(struct fence *fence, const struct fence_ops *ops,
594 fence->context = context;
595 fence->seqno = seqno;
596 fence->flags = 0UL;
597 + fence->error = 0;
598
599 trace_fence_init(fence);
600 }
601 diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c
602 index 62e8e6dc7953..4f3511415b29 100644
603 --- a/drivers/dma-buf/sw_sync.c
604 +++ b/drivers/dma-buf/sw_sync.c
605 @@ -96,9 +96,9 @@ struct sync_timeline *sync_timeline_create(const char *name)
606 obj->context = fence_context_alloc(1);
607 strlcpy(obj->name, name, sizeof(obj->name));
608
609 - INIT_LIST_HEAD(&obj->child_list_head);
610 - INIT_LIST_HEAD(&obj->active_list_head);
611 - spin_lock_init(&obj->child_list_lock);
612 + obj->pt_tree = RB_ROOT;
613 + INIT_LIST_HEAD(&obj->pt_list);
614 + spin_lock_init(&obj->lock);
615
616 sync_timeline_debug_add(obj);
617
618 @@ -125,68 +125,6 @@ static void sync_timeline_put(struct sync_timeline *obj)
619 kref_put(&obj->kref, sync_timeline_free);
620 }
621
622 -/**
623 - * sync_timeline_signal() - signal a status change on a sync_timeline
624 - * @obj: sync_timeline to signal
625 - * @inc: num to increment on timeline->value
626 - *
627 - * A sync implementation should call this any time one of it's fences
628 - * has signaled or has an error condition.
629 - */
630 -static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc)
631 -{
632 - unsigned long flags;
633 - struct sync_pt *pt, *next;
634 -
635 - trace_sync_timeline(obj);
636 -
637 - spin_lock_irqsave(&obj->child_list_lock, flags);
638 -
639 - obj->value += inc;
640 -
641 - list_for_each_entry_safe(pt, next, &obj->active_list_head,
642 - active_list) {
643 - if (fence_is_signaled_locked(&pt->base))
644 - list_del_init(&pt->active_list);
645 - }
646 -
647 - spin_unlock_irqrestore(&obj->child_list_lock, flags);
648 -}
649 -
650 -/**
651 - * sync_pt_create() - creates a sync pt
652 - * @parent: fence's parent sync_timeline
653 - * @size: size to allocate for this pt
654 - * @inc: value of the fence
655 - *
656 - * Creates a new sync_pt as a child of @parent. @size bytes will be
657 - * allocated allowing for implementation specific data to be kept after
658 - * the generic sync_timeline struct. Returns the sync_pt object or
659 - * NULL in case of error.
660 - */
661 -static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
662 - unsigned int value)
663 -{
664 - unsigned long flags;
665 - struct sync_pt *pt;
666 -
667 - if (size < sizeof(*pt))
668 - return NULL;
669 -
670 - pt = kzalloc(size, GFP_KERNEL);
671 - if (!pt)
672 - return NULL;
673 -
674 - spin_lock_irqsave(&obj->child_list_lock, flags);
675 - sync_timeline_get(obj);
676 - fence_init(&pt->base, &timeline_fence_ops, &obj->child_list_lock,
677 - obj->context, value);
678 - list_add_tail(&pt->child_list, &obj->child_list_head);
679 - INIT_LIST_HEAD(&pt->active_list);
680 - spin_unlock_irqrestore(&obj->child_list_lock, flags);
681 - return pt;
682 -}
683 -
684 static const char *timeline_fence_get_driver_name(struct fence *fence)
685 {
686 return "sw_sync";
687 @@ -203,13 +141,17 @@ static void timeline_fence_release(struct fence *fence)
688 {
689 struct sync_pt *pt = fence_to_sync_pt(fence);
690 struct sync_timeline *parent = fence_parent(fence);
691 - unsigned long flags;
692
693 - spin_lock_irqsave(fence->lock, flags);
694 - list_del(&pt->child_list);
695 - if (!list_empty(&pt->active_list))
696 - list_del(&pt->active_list);
697 - spin_unlock_irqrestore(fence->lock, flags);
698 + if (!list_empty(&pt->link)) {
699 + unsigned long flags;
700 +
701 + spin_lock_irqsave(fence->lock, flags);
702 + if (!list_empty(&pt->link)) {
703 + list_del(&pt->link);
704 + rb_erase(&pt->node, &parent->pt_tree);
705 + }
706 + spin_unlock_irqrestore(fence->lock, flags);
707 + }
708
709 sync_timeline_put(parent);
710 fence_free(fence);
711 @@ -219,18 +161,11 @@ static bool timeline_fence_signaled(struct fence *fence)
712 {
713 struct sync_timeline *parent = fence_parent(fence);
714
715 - return (fence->seqno > parent->value) ? false : true;
716 + return !__fence_is_later(fence->seqno, parent->value);
717 }
718
719 static bool timeline_fence_enable_signaling(struct fence *fence)
720 {
721 - struct sync_pt *pt = fence_to_sync_pt(fence);
722 - struct sync_timeline *parent = fence_parent(fence);
723 -
724 - if (timeline_fence_signaled(fence))
725 - return false;
726 -
727 - list_add_tail(&pt->active_list, &parent->active_list_head);
728 return true;
729 }
730
731 @@ -259,6 +194,107 @@ static const struct fence_ops timeline_fence_ops = {
732 .timeline_value_str = timeline_fence_timeline_value_str,
733 };
734
735 +/**
736 + * sync_timeline_signal() - signal a status change on a sync_timeline
737 + * @obj: sync_timeline to signal
738 + * @inc: num to increment on timeline->value
739 + *
740 + * A sync implementation should call this any time one of it's fences
741 + * has signaled or has an error condition.
742 + */
743 +static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc)
744 +{
745 + struct sync_pt *pt, *next;
746 +
747 + trace_sync_timeline(obj);
748 +
749 + spin_lock_irq(&obj->lock);
750 +
751 + obj->value += inc;
752 +
753 + list_for_each_entry_safe(pt, next, &obj->pt_list, link) {
754 + if (!timeline_fence_signaled(&pt->base))
755 + break;
756 +
757 + list_del_init(&pt->link);
758 + rb_erase(&pt->node, &obj->pt_tree);
759 +
760 + /*
761 + * A signal callback may release the last reference to this
762 + * fence, causing it to be freed. That operation has to be
763 + * last to avoid a use after free inside this loop, and must
764 + * be after we remove the fence from the timeline in order to
765 + * prevent deadlocking on timeline->lock inside
766 + * timeline_fence_release().
767 + */
768 + fence_signal_locked(&pt->base);
769 + }
770 +
771 + spin_unlock_irq(&obj->lock);
772 +}
773 +
774 +/**
775 + * sync_pt_create() - creates a sync pt
776 + * @parent: fence's parent sync_timeline
777 + * @inc: value of the fence
778 + *
779 + * Creates a new sync_pt as a child of @parent. @size bytes will be
780 + * allocated allowing for implementation specific data to be kept after
781 + * the generic sync_timeline struct. Returns the sync_pt object or
782 + * NULL in case of error.
783 + */
784 +static struct sync_pt *sync_pt_create(struct sync_timeline *obj,
785 + unsigned int value)
786 +{
787 + struct sync_pt *pt;
788 +
789 + pt = kzalloc(sizeof(*pt), GFP_KERNEL);
790 + if (!pt)
791 + return NULL;
792 +
793 + sync_timeline_get(obj);
794 + fence_init(&pt->base, &timeline_fence_ops, &obj->lock,
795 + obj->context, value);
796 + INIT_LIST_HEAD(&pt->link);
797 +
798 + spin_lock_irq(&obj->lock);
799 + if (!fence_is_signaled_locked(&pt->base)) {
800 + struct rb_node **p = &obj->pt_tree.rb_node;
801 + struct rb_node *parent = NULL;
802 +
803 + while (*p) {
804 + struct sync_pt *other;
805 + int cmp;
806 +
807 + parent = *p;
808 + other = rb_entry(parent, typeof(*pt), node);
809 + cmp = value - other->base.seqno;
810 + if (cmp > 0) {
811 + p = &parent->rb_right;
812 + } else if (cmp < 0) {
813 + p = &parent->rb_left;
814 + } else {
815 + if (fence_get_rcu(&other->base)) {
816 + fence_put(&pt->base);
817 + pt = other;
818 + goto unlock;
819 + }
820 + p = &parent->rb_left;
821 + }
822 + }
823 + rb_link_node(&pt->node, parent, p);
824 + rb_insert_color(&pt->node, &obj->pt_tree);
825 +
826 + parent = rb_next(&pt->node);
827 + list_add_tail(&pt->link,
828 + parent ? &rb_entry(parent, typeof(*pt), node)->link : &obj->pt_list);
829 + }
830 +unlock:
831 + spin_unlock_irq(&obj->lock);
832 +
833 + return pt;
834 +}
835 +
836 /*
837 * *WARNING*
838 *
839 @@ -285,8 +321,16 @@ static int sw_sync_debugfs_open(struct inode *inode, struct file *file)
840 static int sw_sync_debugfs_release(struct inode *inode, struct file *file)
841 {
842 struct sync_timeline *obj = file->private_data;
843 + struct sync_pt *pt, *next;
844 +
845 + spin_lock_irq(&obj->lock);
846 +
847 + list_for_each_entry_safe(pt, next, &obj->pt_list, link) {
848 + fence_set_error(&pt->base, -ENOENT);
849 + fence_signal_locked(&pt->base);
850 + }
851
852 - smp_wmb();
853 + spin_unlock_irq(&obj->lock);
854
855 sync_timeline_put(obj);
856 return 0;
857 @@ -309,7 +353,7 @@ static long sw_sync_ioctl_create_fence(struct sync_timeline *obj,
858 goto err;
859 }
860
861 - pt = sync_pt_create(obj, sizeof(*pt), data.value);
862 + pt = sync_pt_create(obj, data.value);
863 if (!pt) {
864 err = -ENOMEM;
865 goto err;
866 @@ -345,6 +389,11 @@ static long sw_sync_ioctl_inc(struct sync_timeline *obj, unsigned long arg)
867 if (copy_from_user(&value, (void __user *)arg, sizeof(value)))
868 return -EFAULT;
869
870 + while (value > INT_MAX) {
871 + sync_timeline_signal(obj, INT_MAX);
872 + value -= INT_MAX;
873 + }
874 +
875 sync_timeline_signal(obj, value);
876
877 return 0;
878 diff --git a/drivers/dma-buf/sync_debug.c b/drivers/dma-buf/sync_debug.c
879 index 2dd4c3db6caa..858263dbecd4 100644
880 --- a/drivers/dma-buf/sync_debug.c
881 +++ b/drivers/dma-buf/sync_debug.c
882 @@ -62,29 +62,29 @@ void sync_file_debug_remove(struct sync_file *sync_file)
883
884 static const char *sync_status_str(int status)
885 {
886 - if (status == 0)
887 - return "signaled";
888 + if (status < 0)
889 + return "error";
890
891 if (status > 0)
892 - return "active";
893 + return "signaled";
894
895 - return "error";
896 + return "active";
897 }
898
899 -static void sync_print_fence(struct seq_file *s, struct fence *fence, bool show)
900 +static void sync_print_fence(struct seq_file *s,
901 + struct fence *fence, bool show)
902 {
903 - int status = 1;
904 struct sync_timeline *parent = fence_parent(fence);
905 + int status;
906
907 - if (fence_is_signaled_locked(fence))
908 - status = fence->status;
909 + status = fence_get_status_locked(fence);
910
911 seq_printf(s, " %s%sfence %s",
912 show ? parent->name : "",
913 show ? "_" : "",
914 sync_status_str(status));
915
916 - if (status <= 0) {
917 + if (status) {
918 struct timespec64 ts64 =
919 ktime_to_timespec64(fence->timestamp);
920
921 @@ -116,17 +116,15 @@ static void sync_print_fence(struct seq_file *s, struct fence *fence, bool show)
922 static void sync_print_obj(struct seq_file *s, struct sync_timeline *obj)
923 {
924 struct list_head *pos;
925 - unsigned long flags;
926
927 seq_printf(s, "%s: %d\n", obj->name, obj->value);
928
929 - spin_lock_irqsave(&obj->child_list_lock, flags);
930 - list_for_each(pos, &obj->child_list_head) {
931 - struct sync_pt *pt =
932 - container_of(pos, struct sync_pt, child_list);
933 + spin_lock_irq(&obj->lock);
934 + list_for_each(pos, &obj->pt_list) {
935 + struct sync_pt *pt = container_of(pos, struct sync_pt, link);
936 sync_print_fence(s, &pt->base, false);
937 }
938 - spin_unlock_irqrestore(&obj->child_list_lock, flags);
939 + spin_unlock_irq(&obj->lock);
940 }
941
942 static void sync_print_sync_file(struct seq_file *s,
943 @@ -135,7 +133,7 @@ static void sync_print_sync_file(struct seq_file *s,
944 int i;
945
946 seq_printf(s, "[%p] %s: %s\n", sync_file, sync_file->name,
947 - sync_status_str(!fence_is_signaled(sync_file->fence)));
948 + sync_status_str(fence_get_status(sync_file->fence)));
949
950 if (fence_is_array(sync_file->fence)) {
951 struct fence_array *array = to_fence_array(sync_file->fence);
952 @@ -149,12 +147,11 @@ static void sync_print_sync_file(struct seq_file *s,
953
954 static int sync_debugfs_show(struct seq_file *s, void *unused)
955 {
956 - unsigned long flags;
957 struct list_head *pos;
958
959 seq_puts(s, "objs:\n--------------\n");
960
961 - spin_lock_irqsave(&sync_timeline_list_lock, flags);
962 + spin_lock_irq(&sync_timeline_list_lock);
963 list_for_each(pos, &sync_timeline_list_head) {
964 struct sync_timeline *obj =
965 container_of(pos, struct sync_timeline,
966 @@ -163,11 +160,11 @@ static int sync_debugfs_show(struct seq_file *s, void *unused)
967 sync_print_obj(s, obj);
968 seq_puts(s, "\n");
969 }
970 - spin_unlock_irqrestore(&sync_timeline_list_lock, flags);
971 + spin_unlock_irq(&sync_timeline_list_lock);
972
973 seq_puts(s, "fences:\n--------------\n");
974
975 - spin_lock_irqsave(&sync_file_list_lock, flags);
976 + spin_lock_irq(&sync_file_list_lock);
977 list_for_each(pos, &sync_file_list_head) {
978 struct sync_file *sync_file =
979 container_of(pos, struct sync_file, sync_file_list);
980 @@ -175,7 +172,7 @@ static int sync_debugfs_show(struct seq_file *s, void *unused)
981 sync_print_sync_file(s, sync_file);
982 seq_puts(s, "\n");
983 }
984 - spin_unlock_irqrestore(&sync_file_list_lock, flags);
985 + spin_unlock_irq(&sync_file_list_lock);
986 return 0;
987 }
988
989 diff --git a/drivers/dma-buf/sync_debug.h b/drivers/dma-buf/sync_debug.h
990 index d269aa6783aa..9615dc0385b5 100644
991 --- a/drivers/dma-buf/sync_debug.h
992 +++ b/drivers/dma-buf/sync_debug.h
993 @@ -14,6 +14,7 @@
994 #define _LINUX_SYNC_H
995
996 #include <linux/list.h>
997 +#include <linux/rbtree.h>
998 #include <linux/spinlock.h>
999 #include <linux/fence.h>
1000
1001 @@ -24,43 +25,41 @@
1002 * struct sync_timeline - sync object
1003 * @kref: reference count on fence.
1004 * @name: name of the sync_timeline. Useful for debugging
1005 - * @child_list_head: list of children sync_pts for this sync_timeline
1006 - * @child_list_lock: lock protecting @child_list_head and fence.status
1007 - * @active_list_head: list of active (unsignaled/errored) sync_pts
1008 + * @lock: lock protecting @pt_list and @value
1009 + * @pt_tree: rbtree of active (unsignaled/errored) sync_pts
1010 + * @pt_list: list of active (unsignaled/errored) sync_pts
1011 * @sync_timeline_list: membership in global sync_timeline_list
1012 */
1013 struct sync_timeline {
1014 struct kref kref;
1015 char name[32];
1016
1017 - /* protected by child_list_lock */
1018 + /* protected by lock */
1019 u64 context;
1020 int value;
1021
1022 - struct list_head child_list_head;
1023 - spinlock_t child_list_lock;
1024 -
1025 - struct list_head active_list_head;
1026 + struct rb_root pt_tree;
1027 + struct list_head pt_list;
1028 + spinlock_t lock;
1029
1030 struct list_head sync_timeline_list;
1031 };
1032
1033 static inline struct sync_timeline *fence_parent(struct fence *fence)
1034 {
1035 - return container_of(fence->lock, struct sync_timeline,
1036 - child_list_lock);
1037 + return container_of(fence->lock, struct sync_timeline, lock);
1038 }
1039
1040 /**
1041 * struct sync_pt - sync_pt object
1042 * @base: base fence object
1043 - * @child_list: sync timeline child's list
1044 - * @active_list: sync timeline active child's list
1045 + * @link: link on the sync timeline's list
1046 + * @node: node in the sync timeline's tree
1047 */
1048 struct sync_pt {
1049 struct fence base;
1050 - struct list_head child_list;
1051 - struct list_head active_list;
1052 + struct list_head link;
1053 + struct rb_node node;
1054 };
1055
1056 #ifdef CONFIG_SW_SYNC
1057 diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c
1058 index b29a9e817320..f0c374d6ab40 100644
1059 --- a/drivers/dma-buf/sync_file.c
1060 +++ b/drivers/dma-buf/sync_file.c
1061 @@ -67,9 +67,10 @@ static void fence_check_cb_func(struct fence *f, struct fence_cb *cb)
1062 * sync_file_create() - creates a sync file
1063 * @fence: fence to add to the sync_fence
1064 *
1065 - * Creates a sync_file containg @fence. Once this is called, the sync_file
1066 - * takes ownership of @fence. The sync_file can be released with
1067 - * fput(sync_file->file). Returns the sync_file or NULL in case of error.
1068 + * Creates a sync_file containg @fence. This function acquires and additional
1069 + * reference of @fence for the newly-created &sync_file, if it succeeds. The
1070 + * sync_file can be released with fput(sync_file->file). Returns the
1071 + * sync_file or NULL in case of error.
1072 */
1073 struct sync_file *sync_file_create(struct fence *fence)
1074 {
1075 @@ -79,7 +80,7 @@ struct sync_file *sync_file_create(struct fence *fence)
1076 if (!sync_file)
1077 return NULL;
1078
1079 - sync_file->fence = fence;
1080 + sync_file->fence = fence_get(fence);
1081
1082 snprintf(sync_file->name, sizeof(sync_file->name), "%s-%s%llu-%d",
1083 fence->ops->get_driver_name(fence),
1084 @@ -90,13 +91,6 @@ struct sync_file *sync_file_create(struct fence *fence)
1085 }
1086 EXPORT_SYMBOL(sync_file_create);
1087
1088 -/**
1089 - * sync_file_fdget() - get a sync_file from an fd
1090 - * @fd: fd referencing a fence
1091 - *
1092 - * Ensures @fd references a valid sync_file, increments the refcount of the
1093 - * backing file. Returns the sync_file or NULL in case of error.
1094 - */
1095 static struct sync_file *sync_file_fdget(int fd)
1096 {
1097 struct file *file = fget(fd);
1098 @@ -377,10 +371,8 @@ static void sync_fill_fence_info(struct fence *fence,
1099 sizeof(info->obj_name));
1100 strlcpy(info->driver_name, fence->ops->get_driver_name(fence),
1101 sizeof(info->driver_name));
1102 - if (fence_is_signaled(fence))
1103 - info->status = fence->status >= 0 ? 1 : fence->status;
1104 - else
1105 - info->status = 0;
1106 +
1107 + info->status = fence_get_status(fence);
1108 info->timestamp_ns = ktime_to_ns(fence->timestamp);
1109 }
1110
1111 diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
1112 index 9f3dbc8c63d2..fb2e7476d96b 100644
1113 --- a/drivers/dma/pl330.c
1114 +++ b/drivers/dma/pl330.c
1115 @@ -1694,7 +1694,6 @@ static bool _chan_ns(const struct pl330_dmac *pl330, int i)
1116 static struct pl330_thread *pl330_request_channel(struct pl330_dmac *pl330)
1117 {
1118 struct pl330_thread *thrd = NULL;
1119 - unsigned long flags;
1120 int chans, i;
1121
1122 if (pl330->state == DYING)
1123 @@ -1702,8 +1701,6 @@ static struct pl330_thread *pl330_request_channel(struct pl330_dmac *pl330)
1124
1125 chans = pl330->pcfg.num_chan;
1126
1127 - spin_lock_irqsave(&pl330->lock, flags);
1128 -
1129 for (i = 0; i < chans; i++) {
1130 thrd = &pl330->channels[i];
1131 if ((thrd->free) && (!_manager_ns(thrd) ||
1132 @@ -1721,8 +1718,6 @@ static struct pl330_thread *pl330_request_channel(struct pl330_dmac *pl330)
1133 thrd = NULL;
1134 }
1135
1136 - spin_unlock_irqrestore(&pl330->lock, flags);
1137 -
1138 return thrd;
1139 }
1140
1141 @@ -1740,7 +1735,6 @@ static inline void _free_event(struct pl330_thread *thrd, int ev)
1142 static void pl330_release_channel(struct pl330_thread *thrd)
1143 {
1144 struct pl330_dmac *pl330;
1145 - unsigned long flags;
1146
1147 if (!thrd || thrd->free)
1148 return;
1149 @@ -1752,10 +1746,8 @@ static void pl330_release_channel(struct pl330_thread *thrd)
1150
1151 pl330 = thrd->dmac;
1152
1153 - spin_lock_irqsave(&pl330->lock, flags);
1154 _free_event(thrd, thrd->ev);
1155 thrd->free = true;
1156 - spin_unlock_irqrestore(&pl330->lock, flags);
1157 }
1158
1159 /* Initialize the structure for PL330 configuration, that can be used
1160 @@ -2120,20 +2112,20 @@ static int pl330_alloc_chan_resources(struct dma_chan *chan)
1161 struct pl330_dmac *pl330 = pch->dmac;
1162 unsigned long flags;
1163
1164 - spin_lock_irqsave(&pch->lock, flags);
1165 + spin_lock_irqsave(&pl330->lock, flags);
1166
1167 dma_cookie_init(chan);
1168 pch->cyclic = false;
1169
1170 pch->thread = pl330_request_channel(pl330);
1171 if (!pch->thread) {
1172 - spin_unlock_irqrestore(&pch->lock, flags);
1173 + spin_unlock_irqrestore(&pl330->lock, flags);
1174 return -ENOMEM;
1175 }
1176
1177 tasklet_init(&pch->task, pl330_tasklet, (unsigned long) pch);
1178
1179 - spin_unlock_irqrestore(&pch->lock, flags);
1180 + spin_unlock_irqrestore(&pl330->lock, flags);
1181
1182 return 1;
1183 }
1184 @@ -2236,12 +2228,13 @@ static int pl330_pause(struct dma_chan *chan)
1185 static void pl330_free_chan_resources(struct dma_chan *chan)
1186 {
1187 struct dma_pl330_chan *pch = to_pchan(chan);
1188 + struct pl330_dmac *pl330 = pch->dmac;
1189 unsigned long flags;
1190
1191 tasklet_kill(&pch->task);
1192
1193 pm_runtime_get_sync(pch->dmac->ddma.dev);
1194 - spin_lock_irqsave(&pch->lock, flags);
1195 + spin_lock_irqsave(&pl330->lock, flags);
1196
1197 pl330_release_channel(pch->thread);
1198 pch->thread = NULL;
1199 @@ -2249,7 +2242,7 @@ static void pl330_free_chan_resources(struct dma_chan *chan)
1200 if (pch->cyclic)
1201 list_splice_tail_init(&pch->work_list, &pch->dmac->desc_pool);
1202
1203 - spin_unlock_irqrestore(&pch->lock, flags);
1204 + spin_unlock_irqrestore(&pl330->lock, flags);
1205 pm_runtime_mark_last_busy(pch->dmac->ddma.dev);
1206 pm_runtime_put_autosuspend(pch->dmac->ddma.dev);
1207 }
1208 diff --git a/drivers/dma/stm32-dma.c b/drivers/dma/stm32-dma.c
1209 index 307547f4848d..ae3f60be7759 100644
1210 --- a/drivers/dma/stm32-dma.c
1211 +++ b/drivers/dma/stm32-dma.c
1212 @@ -884,7 +884,7 @@ static enum dma_status stm32_dma_tx_status(struct dma_chan *c,
1213 struct virt_dma_desc *vdesc;
1214 enum dma_status status;
1215 unsigned long flags;
1216 - u32 residue;
1217 + u32 residue = 0;
1218
1219 status = dma_cookie_status(c, cookie, state);
1220 if ((status == DMA_COMPLETE) || (!state))
1221 @@ -892,16 +892,12 @@ static enum dma_status stm32_dma_tx_status(struct dma_chan *c,
1222
1223 spin_lock_irqsave(&chan->vchan.lock, flags);
1224 vdesc = vchan_find_desc(&chan->vchan, cookie);
1225 - if (cookie == chan->desc->vdesc.tx.cookie) {
1226 + if (chan->desc && cookie == chan->desc->vdesc.tx.cookie)
1227 residue = stm32_dma_desc_residue(chan, chan->desc,
1228 chan->next_sg);
1229 - } else if (vdesc) {
1230 + else if (vdesc)
1231 residue = stm32_dma_desc_residue(chan,
1232 to_stm32_dma_desc(vdesc), 0);
1233 - } else {
1234 - residue = 0;
1235 - }
1236 -
1237 dma_set_residue(state, residue);
1238
1239 spin_unlock_irqrestore(&chan->vchan.lock, flags);
1240 @@ -976,21 +972,18 @@ static struct dma_chan *stm32_dma_of_xlate(struct of_phandle_args *dma_spec,
1241 struct stm32_dma_chan *chan;
1242 struct dma_chan *c;
1243
1244 - if (dma_spec->args_count < 3)
1245 + if (dma_spec->args_count < 4)
1246 return NULL;
1247
1248 cfg.channel_id = dma_spec->args[0];
1249 cfg.request_line = dma_spec->args[1];
1250 cfg.stream_config = dma_spec->args[2];
1251 - cfg.threshold = 0;
1252 + cfg.threshold = dma_spec->args[3];
1253
1254 if ((cfg.channel_id >= STM32_DMA_MAX_CHANNELS) || (cfg.request_line >=
1255 STM32_DMA_MAX_REQUEST_ID))
1256 return NULL;
1257
1258 - if (dma_spec->args_count > 3)
1259 - cfg.threshold = dma_spec->args[3];
1260 -
1261 chan = &dmadev->chan[cfg.channel_id];
1262
1263 c = dma_get_slave_channel(&chan->vchan.chan);
1264 diff --git a/drivers/edac/sb_edac.c b/drivers/edac/sb_edac.c
1265 index 54775221a01f..3c47e6361d81 100644
1266 --- a/drivers/edac/sb_edac.c
1267 +++ b/drivers/edac/sb_edac.c
1268 @@ -2510,6 +2510,7 @@ static int ibridge_mci_bind_devs(struct mem_ctl_info *mci,
1269 break;
1270 case PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA0_TA:
1271 pvt->pci_ta = pdev;
1272 + break;
1273 case PCI_DEVICE_ID_INTEL_IBRIDGE_IMC_HA0_RAS:
1274 pvt->pci_ras = pdev;
1275 break;
1276 diff --git a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
1277 index c2bd9f045532..6d75fd0e3105 100644
1278 --- a/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
1279 +++ b/drivers/gpu/drm/amd/amdgpu/dce_virtual.c
1280 @@ -565,11 +565,8 @@ static const struct drm_encoder_helper_funcs dce_virtual_encoder_helper_funcs =
1281
1282 static void dce_virtual_encoder_destroy(struct drm_encoder *encoder)
1283 {
1284 - struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder);
1285 -
1286 - kfree(amdgpu_encoder->enc_priv);
1287 drm_encoder_cleanup(encoder);
1288 - kfree(amdgpu_encoder);
1289 + kfree(encoder);
1290 }
1291
1292 static const struct drm_encoder_funcs dce_virtual_encoder_funcs = {
1293 diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
1294 index 50f0cf2788b7..7522f796f19b 100644
1295 --- a/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
1296 +++ b/drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
1297 @@ -182,7 +182,7 @@ static void vce_v3_0_set_vce_sw_clock_gating(struct amdgpu_device *adev,
1298 WREG32(mmVCE_UENC_CLOCK_GATING_2, data);
1299
1300 data = RREG32(mmVCE_UENC_REG_CLOCK_GATING);
1301 - data &= ~0xffc00000;
1302 + data &= ~0x3ff;
1303 WREG32(mmVCE_UENC_REG_CLOCK_GATING, data);
1304
1305 data = RREG32(mmVCE_UENC_DMA_DCLK_CTRL);
1306 diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
1307 index 6ca1f3117fe8..6dd09c306bc1 100644
1308 --- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
1309 +++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
1310 @@ -46,7 +46,8 @@ enum decon_flag_bits {
1311 BIT_CLKS_ENABLED,
1312 BIT_IRQS_ENABLED,
1313 BIT_WIN_UPDATED,
1314 - BIT_SUSPENDED
1315 + BIT_SUSPENDED,
1316 + BIT_REQUEST_UPDATE
1317 };
1318
1319 struct decon_context {
1320 @@ -315,6 +316,7 @@ static void decon_update_plane(struct exynos_drm_crtc *crtc,
1321
1322 /* window enable */
1323 decon_set_bits(ctx, DECON_WINCONx(win), WINCONx_ENWIN_F, ~0);
1324 + set_bit(BIT_REQUEST_UPDATE, &ctx->flags);
1325 }
1326
1327 static void decon_disable_plane(struct exynos_drm_crtc *crtc,
1328 @@ -327,6 +329,7 @@ static void decon_disable_plane(struct exynos_drm_crtc *crtc,
1329 return;
1330
1331 decon_set_bits(ctx, DECON_WINCONx(win), WINCONx_ENWIN_F, 0);
1332 + set_bit(BIT_REQUEST_UPDATE, &ctx->flags);
1333 }
1334
1335 static void decon_atomic_flush(struct exynos_drm_crtc *crtc)
1336 @@ -340,8 +343,8 @@ static void decon_atomic_flush(struct exynos_drm_crtc *crtc)
1337 for (i = ctx->first_win; i < WINDOWS_NR; i++)
1338 decon_shadow_protect_win(ctx, i, false);
1339
1340 - /* standalone update */
1341 - decon_set_bits(ctx, DECON_UPDATE, STANDALONE_UPDATE_F, ~0);
1342 + if (test_and_clear_bit(BIT_REQUEST_UPDATE, &ctx->flags))
1343 + decon_set_bits(ctx, DECON_UPDATE, STANDALONE_UPDATE_F, ~0);
1344
1345 if (ctx->out_type & IFTYPE_I80)
1346 set_bit(BIT_WIN_UPDATED, &ctx->flags);
1347 diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
1348 index cc2fde2ae5ef..c9eef0f51d31 100644
1349 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
1350 +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c
1351 @@ -243,7 +243,6 @@ static int fsl_dcu_drm_pm_suspend(struct device *dev)
1352 return PTR_ERR(fsl_dev->state);
1353 }
1354
1355 - clk_disable_unprepare(fsl_dev->pix_clk);
1356 clk_disable_unprepare(fsl_dev->clk);
1357
1358 return 0;
1359 @@ -266,6 +265,7 @@ static int fsl_dcu_drm_pm_resume(struct device *dev)
1360 if (fsl_dev->tcon)
1361 fsl_tcon_bypass_enable(fsl_dev->tcon);
1362 fsl_dcu_drm_init_planes(fsl_dev->drm);
1363 + enable_irq(fsl_dev->irq);
1364 drm_atomic_helper_resume(fsl_dev->drm, fsl_dev->state);
1365
1366 console_lock();
1367 @@ -273,7 +273,6 @@ static int fsl_dcu_drm_pm_resume(struct device *dev)
1368 console_unlock();
1369
1370 drm_kms_helper_poll_enable(fsl_dev->drm);
1371 - enable_irq(fsl_dev->irq);
1372
1373 return 0;
1374 }
1375 diff --git a/drivers/i2c/busses/i2c-cadence.c b/drivers/i2c/busses/i2c-cadence.c
1376 index 686971263bef..45d6771fac8c 100644
1377 --- a/drivers/i2c/busses/i2c-cadence.c
1378 +++ b/drivers/i2c/busses/i2c-cadence.c
1379 @@ -962,10 +962,6 @@ static int cdns_i2c_probe(struct platform_device *pdev)
1380 goto err_clk_dis;
1381 }
1382
1383 - ret = i2c_add_adapter(&id->adap);
1384 - if (ret < 0)
1385 - goto err_clk_dis;
1386 -
1387 /*
1388 * Cadence I2C controller has a bug wherein it generates
1389 * invalid read transaction after HW timeout in master receiver mode.
1390 @@ -975,6 +971,10 @@ static int cdns_i2c_probe(struct platform_device *pdev)
1391 */
1392 cdns_i2c_writereg(CDNS_I2C_TIMEOUT_MAX, CDNS_I2C_TIME_OUT_OFFSET);
1393
1394 + ret = i2c_add_adapter(&id->adap);
1395 + if (ret < 0)
1396 + goto err_clk_dis;
1397 +
1398 dev_info(&pdev->dev, "%u kHz mmio %08lx irq %d\n",
1399 id->i2c_clk / 1000, (unsigned long)r_mem->start, id->irq);
1400
1401 diff --git a/drivers/iio/adc/ti-ads1015.c b/drivers/iio/adc/ti-ads1015.c
1402 index 472641fc890c..af05e20c986b 100644
1403 --- a/drivers/iio/adc/ti-ads1015.c
1404 +++ b/drivers/iio/adc/ti-ads1015.c
1405 @@ -269,6 +269,7 @@ int ads1015_get_adc_result(struct ads1015_data *data, int chan, int *val)
1406
1407 conv_time = DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr_old]);
1408 conv_time += DIV_ROUND_UP(USEC_PER_SEC, data->data_rate[dr]);
1409 + conv_time += conv_time / 10; /* 10% internal clock inaccuracy */
1410 usleep_range(conv_time, conv_time + 1);
1411 data->conv_invalid = false;
1412 }
1413 diff --git a/drivers/infiniband/hw/qedr/qedr_cm.c b/drivers/infiniband/hw/qedr/qedr_cm.c
1414 index 63890ebb72bd..eccf7039aaca 100644
1415 --- a/drivers/infiniband/hw/qedr/qedr_cm.c
1416 +++ b/drivers/infiniband/hw/qedr/qedr_cm.c
1417 @@ -404,9 +404,9 @@ static inline int qedr_gsi_build_packet(struct qedr_dev *dev,
1418 }
1419
1420 if (ether_addr_equal(udh.eth.smac_h, udh.eth.dmac_h))
1421 - packet->tx_dest = QED_ROCE_LL2_TX_DEST_NW;
1422 - else
1423 packet->tx_dest = QED_ROCE_LL2_TX_DEST_LB;
1424 + else
1425 + packet->tx_dest = QED_ROCE_LL2_TX_DEST_NW;
1426
1427 packet->roce_mode = roce_mode;
1428 memcpy(packet->header.vaddr, ud_header_buffer, header_size);
1429 diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c
1430 index 4ba019e3dc56..35d5b89decb4 100644
1431 --- a/drivers/infiniband/hw/qedr/verbs.c
1432 +++ b/drivers/infiniband/hw/qedr/verbs.c
1433 @@ -1653,7 +1653,7 @@ static int qedr_update_qp_state(struct qedr_dev *dev,
1434 int status = 0;
1435
1436 if (new_state == qp->state)
1437 - return 1;
1438 + return 0;
1439
1440 switch (qp->state) {
1441 case QED_ROCE_QP_STATE_RESET:
1442 diff --git a/drivers/md/bcache/request.c b/drivers/md/bcache/request.c
1443 index e0f1c6d534fe..ab8a1b36af21 100644
1444 --- a/drivers/md/bcache/request.c
1445 +++ b/drivers/md/bcache/request.c
1446 @@ -703,7 +703,14 @@ static void cached_dev_read_error(struct closure *cl)
1447 struct search *s = container_of(cl, struct search, cl);
1448 struct bio *bio = &s->bio.bio;
1449
1450 - if (s->recoverable) {
1451 + /*
1452 + * If read request hit dirty data (s->read_dirty_data is true),
1453 + * then recovery a failed read request from cached device may
1454 + * get a stale data back. So read failure recovery is only
1455 + * permitted when read request hit clean data in cache device,
1456 + * or when cache read race happened.
1457 + */
1458 + if (s->recoverable && !s->read_dirty_data) {
1459 /* Retry from the backing device: */
1460 trace_bcache_read_retry(s->orig_bio);
1461
1462 diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
1463 index 90ed2e12d345..80c89a31d790 100644
1464 --- a/drivers/mmc/host/sdhci-msm.c
1465 +++ b/drivers/mmc/host/sdhci-msm.c
1466 @@ -642,6 +642,21 @@ static int sdhci_msm_probe(struct platform_device *pdev)
1467 CORE_VENDOR_SPEC_CAPABILITIES0);
1468 }
1469
1470 + /*
1471 + * Power on reset state may trigger power irq if previous status of
1472 + * PWRCTL was either BUS_ON or IO_HIGH_V. So before enabling pwr irq
1473 + * interrupt in GIC, any pending power irq interrupt should be
1474 + * acknowledged. Otherwise power irq interrupt handler would be
1475 + * fired prematurely.
1476 + */
1477 + sdhci_msm_voltage_switch(host);
1478 +
1479 + /*
1480 + * Ensure that above writes are propogated before interrupt enablement
1481 + * in GIC.
1482 + */
1483 + mb();
1484 +
1485 /* Setup IRQ for handling power/voltage tasks with PMIC */
1486 msm_host->pwr_irq = platform_get_irq_byname(pdev, "pwr_irq");
1487 if (msm_host->pwr_irq < 0) {
1488 @@ -651,6 +666,9 @@ static int sdhci_msm_probe(struct platform_device *pdev)
1489 goto clk_disable;
1490 }
1491
1492 + /* Enable pwr irq interrupts */
1493 + writel_relaxed(INT_MASK, msm_host->core_mem + CORE_PWRCTL_MASK);
1494 +
1495 ret = devm_request_threaded_irq(&pdev->dev, msm_host->pwr_irq, NULL,
1496 sdhci_msm_pwr_irq, IRQF_ONESHOT,
1497 dev_name(&pdev->dev), host);
1498 diff --git a/drivers/net/appletalk/ipddp.c b/drivers/net/appletalk/ipddp.c
1499 index e90c6a7333d7..2e4649655181 100644
1500 --- a/drivers/net/appletalk/ipddp.c
1501 +++ b/drivers/net/appletalk/ipddp.c
1502 @@ -191,7 +191,7 @@ static netdev_tx_t ipddp_xmit(struct sk_buff *skb, struct net_device *dev)
1503 */
1504 static int ipddp_create(struct ipddp_route *new_rt)
1505 {
1506 - struct ipddp_route *rt = kmalloc(sizeof(*rt), GFP_KERNEL);
1507 + struct ipddp_route *rt = kzalloc(sizeof(*rt), GFP_KERNEL);
1508
1509 if (rt == NULL)
1510 return -ENOMEM;
1511 diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
1512 index be7ec5a76a54..744ed6ddaf37 100644
1513 --- a/drivers/net/ethernet/broadcom/bcmsysport.c
1514 +++ b/drivers/net/ethernet/broadcom/bcmsysport.c
1515 @@ -1023,15 +1023,6 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,
1516 goto out;
1517 }
1518
1519 - /* Insert TSB and checksum infos */
1520 - if (priv->tsb_en) {
1521 - skb = bcm_sysport_insert_tsb(skb, dev);
1522 - if (!skb) {
1523 - ret = NETDEV_TX_OK;
1524 - goto out;
1525 - }
1526 - }
1527 -
1528 /* The Ethernet switch we are interfaced with needs packets to be at
1529 * least 64 bytes (including FCS) otherwise they will be discarded when
1530 * they enter the switch port logic. When Broadcom tags are enabled, we
1531 @@ -1039,13 +1030,21 @@ static netdev_tx_t bcm_sysport_xmit(struct sk_buff *skb,
1532 * (including FCS and tag) because the length verification is done after
1533 * the Broadcom tag is stripped off the ingress packet.
1534 */
1535 - if (skb_padto(skb, ETH_ZLEN + ENET_BRCM_TAG_LEN)) {
1536 + if (skb_put_padto(skb, ETH_ZLEN + ENET_BRCM_TAG_LEN)) {
1537 ret = NETDEV_TX_OK;
1538 goto out;
1539 }
1540
1541 - skb_len = skb->len < ETH_ZLEN + ENET_BRCM_TAG_LEN ?
1542 - ETH_ZLEN + ENET_BRCM_TAG_LEN : skb->len;
1543 + /* Insert TSB and checksum infos */
1544 + if (priv->tsb_en) {
1545 + skb = bcm_sysport_insert_tsb(skb, dev);
1546 + if (!skb) {
1547 + ret = NETDEV_TX_OK;
1548 + goto out;
1549 + }
1550 + }
1551 +
1552 + skb_len = skb->len;
1553
1554 mapping = dma_map_single(kdev, skb->data, skb_len, DMA_TO_DEVICE);
1555 if (dma_mapping_error(kdev, mapping)) {
1556 diff --git a/drivers/net/ethernet/cavium/thunder/thunder_xcv.c b/drivers/net/ethernet/cavium/thunder/thunder_xcv.c
1557 index 67befedef709..578c7f8f11bf 100644
1558 --- a/drivers/net/ethernet/cavium/thunder/thunder_xcv.c
1559 +++ b/drivers/net/ethernet/cavium/thunder/thunder_xcv.c
1560 @@ -116,8 +116,7 @@ void xcv_setup_link(bool link_up, int link_speed)
1561 int speed = 2;
1562
1563 if (!xcv) {
1564 - dev_err(&xcv->pdev->dev,
1565 - "XCV init not done, probe may have failed\n");
1566 + pr_err("XCV init not done, probe may have failed\n");
1567 return;
1568 }
1569
1570 diff --git a/drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.c b/drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.c
1571 index 0f0de5b63622..d04a6c163445 100644
1572 --- a/drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.c
1573 +++ b/drivers/net/ethernet/chelsio/libcxgb/libcxgb_cm.c
1574 @@ -133,17 +133,15 @@ cxgb_find_route6(struct cxgb4_lld_info *lldi,
1575 if (ipv6_addr_type(&fl6.daddr) & IPV6_ADDR_LINKLOCAL)
1576 fl6.flowi6_oif = sin6_scope_id;
1577 dst = ip6_route_output(&init_net, NULL, &fl6);
1578 - if (!dst)
1579 - goto out;
1580 - if (!cxgb_our_interface(lldi, get_real_dev,
1581 - ip6_dst_idev(dst)->dev) &&
1582 - !(ip6_dst_idev(dst)->dev->flags & IFF_LOOPBACK)) {
1583 + if (dst->error ||
1584 + (!cxgb_our_interface(lldi, get_real_dev,
1585 + ip6_dst_idev(dst)->dev) &&
1586 + !(ip6_dst_idev(dst)->dev->flags & IFF_LOOPBACK))) {
1587 dst_release(dst);
1588 - dst = NULL;
1589 + return NULL;
1590 }
1591 }
1592
1593 -out:
1594 return dst;
1595 }
1596 EXPORT_SYMBOL(cxgb_find_route6);
1597 diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
1598 index 5626908f3f7a..1644896568c4 100644
1599 --- a/drivers/net/ethernet/emulex/benet/be_main.c
1600 +++ b/drivers/net/ethernet/emulex/benet/be_main.c
1601 @@ -275,8 +275,7 @@ static int be_dev_mac_add(struct be_adapter *adapter, u8 *mac)
1602
1603 /* Check if mac has already been added as part of uc-list */
1604 for (i = 0; i < adapter->uc_macs; i++) {
1605 - if (ether_addr_equal((u8 *)&adapter->uc_list[i * ETH_ALEN],
1606 - mac)) {
1607 + if (ether_addr_equal(adapter->uc_list[i].mac, mac)) {
1608 /* mac already added, skip addition */
1609 adapter->pmac_id[0] = adapter->pmac_id[i + 1];
1610 return 0;
1611 @@ -363,8 +362,10 @@ static int be_mac_addr_set(struct net_device *netdev, void *p)
1612 status = -EPERM;
1613 goto err;
1614 }
1615 -done:
1616 +
1617 + /* Remember currently programmed MAC */
1618 ether_addr_copy(adapter->dev_mac, addr->sa_data);
1619 +done:
1620 ether_addr_copy(netdev->dev_addr, addr->sa_data);
1621 dev_info(dev, "MAC address changed to %pM\n", addr->sa_data);
1622 return 0;
1623 @@ -1679,14 +1680,12 @@ static void be_clear_mc_list(struct be_adapter *adapter)
1624
1625 static int be_uc_mac_add(struct be_adapter *adapter, int uc_idx)
1626 {
1627 - if (ether_addr_equal((u8 *)&adapter->uc_list[uc_idx * ETH_ALEN],
1628 - adapter->dev_mac)) {
1629 + if (ether_addr_equal(adapter->uc_list[uc_idx].mac, adapter->dev_mac)) {
1630 adapter->pmac_id[uc_idx + 1] = adapter->pmac_id[0];
1631 return 0;
1632 }
1633
1634 - return be_cmd_pmac_add(adapter,
1635 - (u8 *)&adapter->uc_list[uc_idx * ETH_ALEN],
1636 + return be_cmd_pmac_add(adapter, adapter->uc_list[uc_idx].mac,
1637 adapter->if_handle,
1638 &adapter->pmac_id[uc_idx + 1], 0);
1639 }
1640 @@ -1722,9 +1721,8 @@ static void be_set_uc_list(struct be_adapter *adapter)
1641 }
1642
1643 if (adapter->update_uc_list) {
1644 - i = 1; /* First slot is claimed by the Primary MAC */
1645 -
1646 /* cache the uc-list in adapter array */
1647 + i = 0;
1648 netdev_for_each_uc_addr(ha, netdev) {
1649 ether_addr_copy(adapter->uc_list[i].mac, ha->addr);
1650 i++;
1651 @@ -3639,8 +3637,10 @@ static void be_disable_if_filters(struct be_adapter *adapter)
1652 {
1653 /* Don't delete MAC on BE3 VFs without FILTMGMT privilege */
1654 if (!BEx_chip(adapter) || !be_virtfn(adapter) ||
1655 - check_privilege(adapter, BE_PRIV_FILTMGMT))
1656 + check_privilege(adapter, BE_PRIV_FILTMGMT)) {
1657 be_dev_mac_del(adapter, adapter->pmac_id[0]);
1658 + eth_zero_addr(adapter->dev_mac);
1659 + }
1660
1661 be_clear_uc_list(adapter);
1662 be_clear_mc_list(adapter);
1663 @@ -3794,12 +3794,27 @@ static int be_enable_if_filters(struct be_adapter *adapter)
1664 if (status)
1665 return status;
1666
1667 - /* Don't add MAC on BE3 VFs without FILTMGMT privilege */
1668 - if (!BEx_chip(adapter) || !be_virtfn(adapter) ||
1669 - check_privilege(adapter, BE_PRIV_FILTMGMT)) {
1670 + /* Normally this condition usually true as the ->dev_mac is zeroed.
1671 + * But on BE3 VFs the initial MAC is pre-programmed by PF and
1672 + * subsequent be_dev_mac_add() can fail (after fresh boot)
1673 + */
1674 + if (!ether_addr_equal(adapter->dev_mac, adapter->netdev->dev_addr)) {
1675 + int old_pmac_id = -1;
1676 +
1677 + /* Remember old programmed MAC if any - can happen on BE3 VF */
1678 + if (!is_zero_ether_addr(adapter->dev_mac))
1679 + old_pmac_id = adapter->pmac_id[0];
1680 +
1681 status = be_dev_mac_add(adapter, adapter->netdev->dev_addr);
1682 if (status)
1683 return status;
1684 +
1685 + /* Delete the old programmed MAC as we successfully programmed
1686 + * a new MAC
1687 + */
1688 + if (old_pmac_id >= 0 && old_pmac_id != adapter->pmac_id[0])
1689 + be_dev_mac_del(adapter, old_pmac_id);
1690 +
1691 ether_addr_copy(adapter->dev_mac, adapter->netdev->dev_addr);
1692 }
1693
1694 @@ -4573,6 +4588,10 @@ static int be_mac_setup(struct be_adapter *adapter)
1695
1696 memcpy(adapter->netdev->dev_addr, mac, ETH_ALEN);
1697 memcpy(adapter->netdev->perm_addr, mac, ETH_ALEN);
1698 +
1699 + /* Initial MAC for BE3 VFs is already programmed by PF */
1700 + if (BEx_chip(adapter) && be_virtfn(adapter))
1701 + memcpy(adapter->dev_mac, mac, ETH_ALEN);
1702 }
1703
1704 return 0;
1705 diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
1706 index 12aef1b15356..849b8712ec81 100644
1707 --- a/drivers/net/ethernet/freescale/fec_main.c
1708 +++ b/drivers/net/ethernet/freescale/fec_main.c
1709 @@ -2923,6 +2923,7 @@ static void set_multicast_list(struct net_device *ndev)
1710 struct netdev_hw_addr *ha;
1711 unsigned int i, bit, data, crc, tmp;
1712 unsigned char hash;
1713 + unsigned int hash_high = 0, hash_low = 0;
1714
1715 if (ndev->flags & IFF_PROMISC) {
1716 tmp = readl(fep->hwp + FEC_R_CNTRL);
1717 @@ -2945,11 +2946,7 @@ static void set_multicast_list(struct net_device *ndev)
1718 return;
1719 }
1720
1721 - /* Clear filter and add the addresses in hash register
1722 - */
1723 - writel(0, fep->hwp + FEC_GRP_HASH_TABLE_HIGH);
1724 - writel(0, fep->hwp + FEC_GRP_HASH_TABLE_LOW);
1725 -
1726 + /* Add the addresses in hash register */
1727 netdev_for_each_mc_addr(ha, ndev) {
1728 /* calculate crc32 value of mac address */
1729 crc = 0xffffffff;
1730 @@ -2967,16 +2964,14 @@ static void set_multicast_list(struct net_device *ndev)
1731 */
1732 hash = (crc >> (32 - FEC_HASH_BITS)) & 0x3f;
1733
1734 - if (hash > 31) {
1735 - tmp = readl(fep->hwp + FEC_GRP_HASH_TABLE_HIGH);
1736 - tmp |= 1 << (hash - 32);
1737 - writel(tmp, fep->hwp + FEC_GRP_HASH_TABLE_HIGH);
1738 - } else {
1739 - tmp = readl(fep->hwp + FEC_GRP_HASH_TABLE_LOW);
1740 - tmp |= 1 << hash;
1741 - writel(tmp, fep->hwp + FEC_GRP_HASH_TABLE_LOW);
1742 - }
1743 + if (hash > 31)
1744 + hash_high |= 1 << (hash - 32);
1745 + else
1746 + hash_low |= 1 << hash;
1747 }
1748 +
1749 + writel(hash_high, fep->hwp + FEC_GRP_HASH_TABLE_HIGH);
1750 + writel(hash_low, fep->hwp + FEC_GRP_HASH_TABLE_LOW);
1751 }
1752
1753 /* Set a MAC change in hardware. */
1754 diff --git a/drivers/net/ethernet/mellanox/mlx4/en_clock.c b/drivers/net/ethernet/mellanox/mlx4/en_clock.c
1755 index d4d97ca12e83..f9897d17f01d 100644
1756 --- a/drivers/net/ethernet/mellanox/mlx4/en_clock.c
1757 +++ b/drivers/net/ethernet/mellanox/mlx4/en_clock.c
1758 @@ -251,13 +251,9 @@ static u32 freq_to_shift(u16 freq)
1759 {
1760 u32 freq_khz = freq * 1000;
1761 u64 max_val_cycles = freq_khz * 1000 * MLX4_EN_WRAP_AROUND_SEC;
1762 - u64 tmp_rounded =
1763 - roundup_pow_of_two(max_val_cycles) > max_val_cycles ?
1764 - roundup_pow_of_two(max_val_cycles) - 1 : UINT_MAX;
1765 - u64 max_val_cycles_rounded = is_power_of_2(max_val_cycles + 1) ?
1766 - max_val_cycles : tmp_rounded;
1767 + u64 max_val_cycles_rounded = 1ULL << fls64(max_val_cycles - 1);
1768 /* calculate max possible multiplier in order to fit in 64bit */
1769 - u64 max_mul = div_u64(0xffffffffffffffffULL, max_val_cycles_rounded);
1770 + u64 max_mul = div64_u64(ULLONG_MAX, max_val_cycles_rounded);
1771
1772 /* This comes from the reverse of clocksource_khz2mult */
1773 return ilog2(div_u64(max_mul * freq_khz, 1000000));
1774 diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
1775 index 11623aad0e8e..10d3a9f6349e 100644
1776 --- a/drivers/net/ethernet/renesas/ravb_main.c
1777 +++ b/drivers/net/ethernet/renesas/ravb_main.c
1778 @@ -941,14 +941,10 @@ static int ravb_poll(struct napi_struct *napi, int budget)
1779 /* Receive error message handling */
1780 priv->rx_over_errors = priv->stats[RAVB_BE].rx_over_errors;
1781 priv->rx_over_errors += priv->stats[RAVB_NC].rx_over_errors;
1782 - if (priv->rx_over_errors != ndev->stats.rx_over_errors) {
1783 + if (priv->rx_over_errors != ndev->stats.rx_over_errors)
1784 ndev->stats.rx_over_errors = priv->rx_over_errors;
1785 - netif_err(priv, rx_err, ndev, "Receive Descriptor Empty\n");
1786 - }
1787 - if (priv->rx_fifo_errors != ndev->stats.rx_fifo_errors) {
1788 + if (priv->rx_fifo_errors != ndev->stats.rx_fifo_errors)
1789 ndev->stats.rx_fifo_errors = priv->rx_fifo_errors;
1790 - netif_err(priv, rx_err, ndev, "Receive FIFO Overflow\n");
1791 - }
1792 out:
1793 return budget - quota;
1794 }
1795 diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
1796 index cebde074d196..cb206e5526c4 100644
1797 --- a/drivers/net/gtp.c
1798 +++ b/drivers/net/gtp.c
1799 @@ -69,7 +69,6 @@ struct gtp_dev {
1800 struct socket *sock0;
1801 struct socket *sock1u;
1802
1803 - struct net *net;
1804 struct net_device *dev;
1805
1806 unsigned int hash_size;
1807 @@ -316,7 +315,7 @@ static int gtp_encap_recv(struct sock *sk, struct sk_buff *skb)
1808
1809 netdev_dbg(gtp->dev, "encap_recv sk=%p\n", sk);
1810
1811 - xnet = !net_eq(gtp->net, dev_net(gtp->dev));
1812 + xnet = !net_eq(sock_net(sk), dev_net(gtp->dev));
1813
1814 switch (udp_sk(sk)->encap_type) {
1815 case UDP_ENCAP_GTP0:
1816 @@ -612,7 +611,7 @@ static netdev_tx_t gtp_dev_xmit(struct sk_buff *skb, struct net_device *dev)
1817 pktinfo.fl4.saddr, pktinfo.fl4.daddr,
1818 pktinfo.iph->tos,
1819 ip4_dst_hoplimit(&pktinfo.rt->dst),
1820 - htons(IP_DF),
1821 + 0,
1822 pktinfo.gtph_port, pktinfo.gtph_port,
1823 true, false);
1824 break;
1825 @@ -658,7 +657,7 @@ static void gtp_link_setup(struct net_device *dev)
1826 static int gtp_hashtable_new(struct gtp_dev *gtp, int hsize);
1827 static void gtp_hashtable_free(struct gtp_dev *gtp);
1828 static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
1829 - int fd_gtp0, int fd_gtp1, struct net *src_net);
1830 + int fd_gtp0, int fd_gtp1);
1831
1832 static int gtp_newlink(struct net *src_net, struct net_device *dev,
1833 struct nlattr *tb[], struct nlattr *data[])
1834 @@ -675,7 +674,7 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev,
1835 fd0 = nla_get_u32(data[IFLA_GTP_FD0]);
1836 fd1 = nla_get_u32(data[IFLA_GTP_FD1]);
1837
1838 - err = gtp_encap_enable(dev, gtp, fd0, fd1, src_net);
1839 + err = gtp_encap_enable(dev, gtp, fd0, fd1);
1840 if (err < 0)
1841 goto out_err;
1842
1843 @@ -821,7 +820,7 @@ static void gtp_hashtable_free(struct gtp_dev *gtp)
1844 }
1845
1846 static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
1847 - int fd_gtp0, int fd_gtp1, struct net *src_net)
1848 + int fd_gtp0, int fd_gtp1)
1849 {
1850 struct udp_tunnel_sock_cfg tuncfg = {NULL};
1851 struct socket *sock0, *sock1u;
1852 @@ -858,7 +857,6 @@ static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
1853
1854 gtp->sock0 = sock0;
1855 gtp->sock1u = sock1u;
1856 - gtp->net = src_net;
1857
1858 tuncfg.sk_user_data = gtp;
1859 tuncfg.encap_rcv = gtp_encap_recv;
1860 diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
1861 index 222918828655..fbf5945ce00d 100644
1862 --- a/drivers/net/phy/micrel.c
1863 +++ b/drivers/net/phy/micrel.c
1864 @@ -1020,7 +1020,7 @@ static struct phy_driver ksphy_driver[] = {
1865 .phy_id = PHY_ID_KSZ8795,
1866 .phy_id_mask = MICREL_PHY_ID_MASK,
1867 .name = "Micrel KSZ8795",
1868 - .features = (SUPPORTED_Pause | SUPPORTED_Asym_Pause),
1869 + .features = PHY_BASIC_FEATURES,
1870 .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT,
1871 .config_init = kszphy_config_init,
1872 .config_aneg = ksz8873mll_config_aneg,
1873 diff --git a/drivers/net/xen-netback/common.h b/drivers/net/xen-netback/common.h
1874 index cb7365bdf6e0..5b1d2e8402d9 100644
1875 --- a/drivers/net/xen-netback/common.h
1876 +++ b/drivers/net/xen-netback/common.h
1877 @@ -113,10 +113,10 @@ struct xenvif_stats {
1878 * A subset of struct net_device_stats that contains only the
1879 * fields that are updated in netback.c for each queue.
1880 */
1881 - unsigned int rx_bytes;
1882 - unsigned int rx_packets;
1883 - unsigned int tx_bytes;
1884 - unsigned int tx_packets;
1885 + u64 rx_bytes;
1886 + u64 rx_packets;
1887 + u64 tx_bytes;
1888 + u64 tx_packets;
1889
1890 /* Additional stats used by xenvif */
1891 unsigned long rx_gso_checksum_fixup;
1892 diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c
1893 index 5bfaf5578810..618013e7f87b 100644
1894 --- a/drivers/net/xen-netback/interface.c
1895 +++ b/drivers/net/xen-netback/interface.c
1896 @@ -225,10 +225,10 @@ static struct net_device_stats *xenvif_get_stats(struct net_device *dev)
1897 {
1898 struct xenvif *vif = netdev_priv(dev);
1899 struct xenvif_queue *queue = NULL;
1900 - unsigned long rx_bytes = 0;
1901 - unsigned long rx_packets = 0;
1902 - unsigned long tx_bytes = 0;
1903 - unsigned long tx_packets = 0;
1904 + u64 rx_bytes = 0;
1905 + u64 rx_packets = 0;
1906 + u64 tx_bytes = 0;
1907 + u64 tx_packets = 0;
1908 unsigned int index;
1909
1910 spin_lock(&vif->lock);
1911 diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
1912 index cd442e46afb4..8d498a997e25 100644
1913 --- a/drivers/net/xen-netfront.c
1914 +++ b/drivers/net/xen-netfront.c
1915 @@ -1854,27 +1854,19 @@ static int talk_to_netback(struct xenbus_device *dev,
1916 xennet_destroy_queues(info);
1917
1918 err = xennet_create_queues(info, &num_queues);
1919 - if (err < 0)
1920 - goto destroy_ring;
1921 + if (err < 0) {
1922 + xenbus_dev_fatal(dev, err, "creating queues");
1923 + kfree(info->queues);
1924 + info->queues = NULL;
1925 + goto out;
1926 + }
1927
1928 /* Create shared ring, alloc event channel -- for each queue */
1929 for (i = 0; i < num_queues; ++i) {
1930 queue = &info->queues[i];
1931 err = setup_netfront(dev, queue, feature_split_evtchn);
1932 - if (err) {
1933 - /* setup_netfront() will tidy up the current
1934 - * queue on error, but we need to clean up
1935 - * those already allocated.
1936 - */
1937 - if (i > 0) {
1938 - rtnl_lock();
1939 - netif_set_real_num_tx_queues(info->netdev, i);
1940 - rtnl_unlock();
1941 - goto destroy_ring;
1942 - } else {
1943 - goto out;
1944 - }
1945 - }
1946 + if (err)
1947 + goto destroy_ring;
1948 }
1949
1950 again:
1951 @@ -1964,9 +1956,9 @@ static int talk_to_netback(struct xenbus_device *dev,
1952 xenbus_transaction_end(xbt, 1);
1953 destroy_ring:
1954 xennet_disconnect_backend(info);
1955 - kfree(info->queues);
1956 - info->queues = NULL;
1957 + xennet_destroy_queues(info);
1958 out:
1959 + device_unregister(&dev->dev);
1960 return err;
1961 }
1962
1963 diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c
1964 index 55ce769cecee..fbd6d487103f 100644
1965 --- a/drivers/nvme/target/core.c
1966 +++ b/drivers/nvme/target/core.c
1967 @@ -816,6 +816,9 @@ static void nvmet_ctrl_free(struct kref *ref)
1968 list_del(&ctrl->subsys_entry);
1969 mutex_unlock(&subsys->lock);
1970
1971 + flush_work(&ctrl->async_event_work);
1972 + cancel_work_sync(&ctrl->fatal_err_work);
1973 +
1974 ida_simple_remove(&subsys->cntlid_ida, ctrl->cntlid);
1975 nvmet_subsys_put(subsys);
1976
1977 diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
1978 index 91f5f55a8a9b..59059ffbb98c 100644
1979 --- a/drivers/scsi/qla2xxx/qla_target.c
1980 +++ b/drivers/scsi/qla2xxx/qla_target.c
1981 @@ -668,11 +668,9 @@ static int qlt_reset(struct scsi_qla_host *vha, void *iocb, int mcmd)
1982 {
1983 struct qla_hw_data *ha = vha->hw;
1984 struct qla_tgt_sess *sess = NULL;
1985 - uint32_t unpacked_lun, lun = 0;
1986 uint16_t loop_id;
1987 int res = 0;
1988 struct imm_ntfy_from_isp *n = (struct imm_ntfy_from_isp *)iocb;
1989 - struct atio_from_isp *a = (struct atio_from_isp *)iocb;
1990 unsigned long flags;
1991
1992 loop_id = le16_to_cpu(n->u.isp24.nport_handle);
1993 @@ -725,11 +723,7 @@ static int qlt_reset(struct scsi_qla_host *vha, void *iocb, int mcmd)
1994 "loop_id %d)\n", vha->host_no, sess, sess->port_name,
1995 mcmd, loop_id);
1996
1997 - lun = a->u.isp24.fcp_cmnd.lun;
1998 - unpacked_lun = scsilun_to_int((struct scsi_lun *)&lun);
1999 -
2000 - return qlt_issue_task_mgmt(sess, unpacked_lun, mcmd,
2001 - iocb, QLA24XX_MGMT_SEND_NACK);
2002 + return qlt_issue_task_mgmt(sess, 0, mcmd, iocb, QLA24XX_MGMT_SEND_NACK);
2003 }
2004
2005 /* ha->tgt.sess_lock supposed to be held on entry */
2006 diff --git a/drivers/spi/spi-axi-spi-engine.c b/drivers/spi/spi-axi-spi-engine.c
2007 index c1eafbd7610a..da51fed143cd 100644
2008 --- a/drivers/spi/spi-axi-spi-engine.c
2009 +++ b/drivers/spi/spi-axi-spi-engine.c
2010 @@ -553,7 +553,7 @@ static int spi_engine_probe(struct platform_device *pdev)
2011
2012 static int spi_engine_remove(struct platform_device *pdev)
2013 {
2014 - struct spi_master *master = platform_get_drvdata(pdev);
2015 + struct spi_master *master = spi_master_get(platform_get_drvdata(pdev));
2016 struct spi_engine *spi_engine = spi_master_get_devdata(master);
2017 int irq = platform_get_irq(pdev, 0);
2018
2019 @@ -561,6 +561,8 @@ static int spi_engine_remove(struct platform_device *pdev)
2020
2021 free_irq(irq, master);
2022
2023 + spi_master_put(master);
2024 +
2025 writel_relaxed(0xff, spi_engine->base + SPI_ENGINE_REG_INT_PENDING);
2026 writel_relaxed(0x00, spi_engine->base + SPI_ENGINE_REG_INT_ENABLE);
2027 writel_relaxed(0x01, spi_engine->base + SPI_ENGINE_REG_RESET);
2028 diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c
2029 index 1de3a772eb7d..cbf02ebb30a2 100644
2030 --- a/drivers/spi/spi-sh-msiof.c
2031 +++ b/drivers/spi/spi-sh-msiof.c
2032 @@ -862,7 +862,7 @@ static int sh_msiof_transfer_one(struct spi_master *master,
2033 break;
2034 copy32 = copy_bswap32;
2035 } else if (bits <= 16) {
2036 - if (l & 1)
2037 + if (l & 3)
2038 break;
2039 copy32 = copy_wswap32;
2040 } else {
2041 diff --git a/drivers/staging/greybus/loopback.c b/drivers/staging/greybus/loopback.c
2042 index 29dc249b0c74..3c2c233c2e49 100644
2043 --- a/drivers/staging/greybus/loopback.c
2044 +++ b/drivers/staging/greybus/loopback.c
2045 @@ -1034,8 +1034,10 @@ static int gb_loopback_fn(void *data)
2046 error = gb_loopback_async_sink(gb, size);
2047 }
2048
2049 - if (error)
2050 + if (error) {
2051 gb->error++;
2052 + gb->iteration_count++;
2053 + }
2054 } else {
2055 /* We are effectively single threaded here */
2056 if (type == GB_LOOPBACK_TYPE_PING)
2057 diff --git a/drivers/staging/lustre/lustre/llite/llite_mmap.c b/drivers/staging/lustre/lustre/llite/llite_mmap.c
2058 index 436691814a5e..27333d973bcd 100644
2059 --- a/drivers/staging/lustre/lustre/llite/llite_mmap.c
2060 +++ b/drivers/staging/lustre/lustre/llite/llite_mmap.c
2061 @@ -401,15 +401,13 @@ static int ll_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
2062 result = VM_FAULT_LOCKED;
2063 break;
2064 case -ENODATA:
2065 + case -EAGAIN:
2066 case -EFAULT:
2067 result = VM_FAULT_NOPAGE;
2068 break;
2069 case -ENOMEM:
2070 result = VM_FAULT_OOM;
2071 break;
2072 - case -EAGAIN:
2073 - result = VM_FAULT_RETRY;
2074 - break;
2075 default:
2076 result = VM_FAULT_SIGBUS;
2077 break;
2078 diff --git a/drivers/staging/media/cec/cec-adap.c b/drivers/staging/media/cec/cec-adap.c
2079 index 499d7bfe7147..75e6d5e0504f 100644
2080 --- a/drivers/staging/media/cec/cec-adap.c
2081 +++ b/drivers/staging/media/cec/cec-adap.c
2082 @@ -608,8 +608,7 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
2083 }
2084 memset(msg->msg + msg->len, 0, sizeof(msg->msg) - msg->len);
2085 if (msg->len == 1) {
2086 - if (cec_msg_initiator(msg) != 0xf ||
2087 - cec_msg_destination(msg) == 0xf) {
2088 + if (cec_msg_destination(msg) == 0xf) {
2089 dprintk(1, "cec_transmit_msg: invalid poll message\n");
2090 return -EINVAL;
2091 }
2092 @@ -634,7 +633,7 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
2093 dprintk(1, "cec_transmit_msg: destination is the adapter itself\n");
2094 return -EINVAL;
2095 }
2096 - if (cec_msg_initiator(msg) != 0xf &&
2097 + if (msg->len > 1 && adap->is_configured &&
2098 !cec_has_log_addr(adap, cec_msg_initiator(msg))) {
2099 dprintk(1, "cec_transmit_msg: initiator has unknown logical address %d\n",
2100 cec_msg_initiator(msg));
2101 @@ -883,7 +882,7 @@ static int cec_config_log_addr(struct cec_adapter *adap,
2102
2103 /* Send poll message */
2104 msg.len = 1;
2105 - msg.msg[0] = 0xf0 | log_addr;
2106 + msg.msg[0] = (log_addr << 4) | log_addr;
2107 err = cec_transmit_msg_fh(adap, &msg, NULL, true);
2108
2109 /*
2110 diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c
2111 index ee2dcd05010f..0b60d1e0333e 100644
2112 --- a/drivers/staging/rtl8188eu/core/rtw_mlme.c
2113 +++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c
2114 @@ -107,10 +107,10 @@ void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv)
2115
2116 void rtw_free_mlme_priv(struct mlme_priv *pmlmepriv)
2117 {
2118 - rtw_free_mlme_priv_ie_data(pmlmepriv);
2119 -
2120 - if (pmlmepriv)
2121 + if (pmlmepriv) {
2122 + rtw_free_mlme_priv_ie_data(pmlmepriv);
2123 vfree(pmlmepriv->free_bss_buf);
2124 + }
2125 }
2126
2127 struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv)
2128 diff --git a/drivers/tty/serial/8250/8250_fintek.c b/drivers/tty/serial/8250/8250_fintek.c
2129 index f8c31070a337..2ffebb7e5ff8 100644
2130 --- a/drivers/tty/serial/8250/8250_fintek.c
2131 +++ b/drivers/tty/serial/8250/8250_fintek.c
2132 @@ -121,7 +121,7 @@ static int fintek_8250_rs485_config(struct uart_port *port,
2133
2134 if ((!!(rs485->flags & SER_RS485_RTS_ON_SEND)) ==
2135 (!!(rs485->flags & SER_RS485_RTS_AFTER_SEND)))
2136 - rs485->flags &= SER_RS485_ENABLED;
2137 + rs485->flags &= ~SER_RS485_ENABLED;
2138 else
2139 config |= RS485_URA;
2140
2141 diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
2142 index 22d32d295c5b..b80ea872b039 100644
2143 --- a/drivers/tty/serial/8250/8250_pci.c
2144 +++ b/drivers/tty/serial/8250/8250_pci.c
2145 @@ -5568,6 +5568,9 @@ static struct pci_device_id serial_pci_tbl[] = {
2146 { PCI_DEVICE(0x1601, 0x0800), .driver_data = pbn_b0_4_1250000 },
2147 { PCI_DEVICE(0x1601, 0xa801), .driver_data = pbn_b0_4_1250000 },
2148
2149 + /* Amazon PCI serial device */
2150 + { PCI_DEVICE(0x1d0f, 0x8250), .driver_data = pbn_b0_1_115200 },
2151 +
2152 /*
2153 * These entries match devices with class COMMUNICATION_SERIAL,
2154 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
2155 diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
2156 index 1ef31e3ee4a1..f6e4373a8850 100644
2157 --- a/drivers/tty/serial/8250/8250_port.c
2158 +++ b/drivers/tty/serial/8250/8250_port.c
2159 @@ -2526,8 +2526,11 @@ static void serial8250_set_divisor(struct uart_port *port, unsigned int baud,
2160 serial_dl_write(up, quot);
2161
2162 /* XR17V35x UARTs have an extra fractional divisor register (DLD) */
2163 - if (up->port.type == PORT_XR17V35X)
2164 + if (up->port.type == PORT_XR17V35X) {
2165 + /* Preserve bits not related to baudrate; DLD[7:4]. */
2166 + quot_frac |= serial_port_in(port, 0x2) & 0xf0;
2167 serial_port_out(port, 0x2, quot_frac);
2168 + }
2169 }
2170
2171 static unsigned int serial8250_get_baud_rate(struct uart_port *port,
2172 diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
2173 index 701c085bb19b..53cbf4ebef10 100644
2174 --- a/drivers/tty/sysrq.c
2175 +++ b/drivers/tty/sysrq.c
2176 @@ -243,8 +243,10 @@ static void sysrq_handle_showallcpus(int key)
2177 * architecture has no support for it:
2178 */
2179 if (!trigger_all_cpu_backtrace()) {
2180 - struct pt_regs *regs = get_irq_regs();
2181 + struct pt_regs *regs = NULL;
2182
2183 + if (in_irq())
2184 + regs = get_irq_regs();
2185 if (regs) {
2186 pr_info("CPU%d:\n", smp_processor_id());
2187 show_regs(regs);
2188 @@ -263,7 +265,10 @@ static struct sysrq_key_op sysrq_showallcpus_op = {
2189
2190 static void sysrq_handle_showregs(int key)
2191 {
2192 - struct pt_regs *regs = get_irq_regs();
2193 + struct pt_regs *regs = NULL;
2194 +
2195 + if (in_irq())
2196 + regs = get_irq_regs();
2197 if (regs)
2198 show_regs(regs);
2199 perf_event_print_debug();
2200 diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
2201 index 5008f71fb08d..5ebe04d3598b 100644
2202 --- a/drivers/usb/core/config.c
2203 +++ b/drivers/usb/core/config.c
2204 @@ -900,14 +900,25 @@ void usb_release_bos_descriptor(struct usb_device *dev)
2205 }
2206 }
2207
2208 +static const __u8 bos_desc_len[256] = {
2209 + [USB_CAP_TYPE_WIRELESS_USB] = USB_DT_USB_WIRELESS_CAP_SIZE,
2210 + [USB_CAP_TYPE_EXT] = USB_DT_USB_EXT_CAP_SIZE,
2211 + [USB_SS_CAP_TYPE] = USB_DT_USB_SS_CAP_SIZE,
2212 + [USB_SSP_CAP_TYPE] = USB_DT_USB_SSP_CAP_SIZE(1),
2213 + [CONTAINER_ID_TYPE] = USB_DT_USB_SS_CONTN_ID_SIZE,
2214 + [USB_PTM_CAP_TYPE] = USB_DT_USB_PTM_ID_SIZE,
2215 +};
2216 +
2217 /* Get BOS descriptor set */
2218 int usb_get_bos_descriptor(struct usb_device *dev)
2219 {
2220 struct device *ddev = &dev->dev;
2221 struct usb_bos_descriptor *bos;
2222 struct usb_dev_cap_header *cap;
2223 + struct usb_ssp_cap_descriptor *ssp_cap;
2224 unsigned char *buffer;
2225 - int length, total_len, num, i;
2226 + int length, total_len, num, i, ssac;
2227 + __u8 cap_type;
2228 int ret;
2229
2230 bos = kzalloc(sizeof(struct usb_bos_descriptor), GFP_KERNEL);
2231 @@ -960,7 +971,13 @@ int usb_get_bos_descriptor(struct usb_device *dev)
2232 dev->bos->desc->bNumDeviceCaps = i;
2233 break;
2234 }
2235 + cap_type = cap->bDevCapabilityType;
2236 length = cap->bLength;
2237 + if (bos_desc_len[cap_type] && length < bos_desc_len[cap_type]) {
2238 + dev->bos->desc->bNumDeviceCaps = i;
2239 + break;
2240 + }
2241 +
2242 total_len -= length;
2243
2244 if (cap->bDescriptorType != USB_DT_DEVICE_CAPABILITY) {
2245 @@ -968,7 +985,7 @@ int usb_get_bos_descriptor(struct usb_device *dev)
2246 continue;
2247 }
2248
2249 - switch (cap->bDevCapabilityType) {
2250 + switch (cap_type) {
2251 case USB_CAP_TYPE_WIRELESS_USB:
2252 /* Wireless USB cap descriptor is handled by wusb */
2253 break;
2254 @@ -981,8 +998,11 @@ int usb_get_bos_descriptor(struct usb_device *dev)
2255 (struct usb_ss_cap_descriptor *)buffer;
2256 break;
2257 case USB_SSP_CAP_TYPE:
2258 - dev->bos->ssp_cap =
2259 - (struct usb_ssp_cap_descriptor *)buffer;
2260 + ssp_cap = (struct usb_ssp_cap_descriptor *)buffer;
2261 + ssac = (le32_to_cpu(ssp_cap->bmAttributes) &
2262 + USB_SSP_SUBLINK_SPEED_ATTRIBS) + 1;
2263 + if (length >= USB_DT_USB_SSP_CAP_SIZE(ssac))
2264 + dev->bos->ssp_cap = ssp_cap;
2265 break;
2266 case CONTAINER_ID_TYPE:
2267 dev->bos->ss_id =
2268 diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
2269 index fa619354c5c5..893ebae51029 100644
2270 --- a/drivers/usb/core/devio.c
2271 +++ b/drivers/usb/core/devio.c
2272 @@ -134,42 +134,38 @@ enum snoop_when {
2273 #define USB_DEVICE_DEV MKDEV(USB_DEVICE_MAJOR, 0)
2274
2275 /* Limit on the total amount of memory we can allocate for transfers */
2276 -static unsigned usbfs_memory_mb = 16;
2277 +static u32 usbfs_memory_mb = 16;
2278 module_param(usbfs_memory_mb, uint, 0644);
2279 MODULE_PARM_DESC(usbfs_memory_mb,
2280 "maximum MB allowed for usbfs buffers (0 = no limit)");
2281
2282 /* Hard limit, necessary to avoid arithmetic overflow */
2283 -#define USBFS_XFER_MAX (UINT_MAX / 2 - 1000000)
2284 +#define USBFS_XFER_MAX (UINT_MAX / 2 - 1000000)
2285
2286 -static atomic_t usbfs_memory_usage; /* Total memory currently allocated */
2287 +static atomic64_t usbfs_memory_usage; /* Total memory currently allocated */
2288
2289 /* Check whether it's okay to allocate more memory for a transfer */
2290 -static int usbfs_increase_memory_usage(unsigned amount)
2291 +static int usbfs_increase_memory_usage(u64 amount)
2292 {
2293 - unsigned lim;
2294 + u64 lim;
2295
2296 - /*
2297 - * Convert usbfs_memory_mb to bytes, avoiding overflows.
2298 - * 0 means use the hard limit (effectively unlimited).
2299 - */
2300 lim = ACCESS_ONCE(usbfs_memory_mb);
2301 - if (lim == 0 || lim > (USBFS_XFER_MAX >> 20))
2302 - lim = USBFS_XFER_MAX;
2303 - else
2304 - lim <<= 20;
2305 + lim <<= 20;
2306
2307 - atomic_add(amount, &usbfs_memory_usage);
2308 - if (atomic_read(&usbfs_memory_usage) <= lim)
2309 - return 0;
2310 - atomic_sub(amount, &usbfs_memory_usage);
2311 - return -ENOMEM;
2312 + atomic64_add(amount, &usbfs_memory_usage);
2313 +
2314 + if (lim > 0 && atomic64_read(&usbfs_memory_usage) > lim) {
2315 + atomic64_sub(amount, &usbfs_memory_usage);
2316 + return -ENOMEM;
2317 + }
2318 +
2319 + return 0;
2320 }
2321
2322 /* Memory for a transfer is being deallocated */
2323 -static void usbfs_decrease_memory_usage(unsigned amount)
2324 +static void usbfs_decrease_memory_usage(u64 amount)
2325 {
2326 - atomic_sub(amount, &usbfs_memory_usage);
2327 + atomic64_sub(amount, &usbfs_memory_usage);
2328 }
2329
2330 static int connected(struct usb_dev_state *ps)
2331 @@ -1191,7 +1187,7 @@ static int proc_bulk(struct usb_dev_state *ps, void __user *arg)
2332 if (!usb_maxpacket(dev, pipe, !(bulk.ep & USB_DIR_IN)))
2333 return -EINVAL;
2334 len1 = bulk.len;
2335 - if (len1 >= USBFS_XFER_MAX)
2336 + if (len1 >= (INT_MAX - sizeof(struct urb)))
2337 return -EINVAL;
2338 ret = usbfs_increase_memory_usage(len1 + sizeof(struct urb));
2339 if (ret)
2340 @@ -1458,13 +1454,19 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
2341 int number_of_packets = 0;
2342 unsigned int stream_id = 0;
2343 void *buf;
2344 -
2345 - if (uurb->flags & ~(USBDEVFS_URB_ISO_ASAP |
2346 - USBDEVFS_URB_SHORT_NOT_OK |
2347 + unsigned long mask = USBDEVFS_URB_SHORT_NOT_OK |
2348 USBDEVFS_URB_BULK_CONTINUATION |
2349 USBDEVFS_URB_NO_FSBR |
2350 USBDEVFS_URB_ZERO_PACKET |
2351 - USBDEVFS_URB_NO_INTERRUPT))
2352 + USBDEVFS_URB_NO_INTERRUPT;
2353 + /* USBDEVFS_URB_ISO_ASAP is a special case */
2354 + if (uurb->type == USBDEVFS_URB_TYPE_ISO)
2355 + mask |= USBDEVFS_URB_ISO_ASAP;
2356 +
2357 + if (uurb->flags & ~mask)
2358 + return -EINVAL;
2359 +
2360 + if ((unsigned int)uurb->buffer_length >= USBFS_XFER_MAX)
2361 return -EINVAL;
2362 if (uurb->buffer_length > 0 && !uurb->buffer)
2363 return -EINVAL;
2364 @@ -1584,10 +1586,6 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
2365 return -EINVAL;
2366 }
2367
2368 - if (uurb->buffer_length >= USBFS_XFER_MAX) {
2369 - ret = -EINVAL;
2370 - goto error;
2371 - }
2372 if (uurb->buffer_length > 0 &&
2373 !access_ok(is_in ? VERIFY_WRITE : VERIFY_READ,
2374 uurb->buffer, uurb->buffer_length)) {
2375 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
2376 index 706b3d6a7614..d0d3f9ef9f10 100644
2377 --- a/drivers/usb/core/hub.c
2378 +++ b/drivers/usb/core/hub.c
2379 @@ -4925,6 +4925,15 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
2380 usb_put_dev(udev);
2381 if ((status == -ENOTCONN) || (status == -ENOTSUPP))
2382 break;
2383 +
2384 + /* When halfway through our retry count, power-cycle the port */
2385 + if (i == (SET_CONFIG_TRIES / 2) - 1) {
2386 + dev_info(&port_dev->dev, "attempt power cycle\n");
2387 + usb_hub_set_port_power(hdev, hub, port1, false);
2388 + msleep(2 * hub_power_on_good_delay(hub));
2389 + usb_hub_set_port_power(hdev, hub, port1, true);
2390 + msleep(hub_power_on_good_delay(hub));
2391 + }
2392 }
2393 if (hub->hdev->parent ||
2394 !hcd->driver->port_handed_over ||
2395 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
2396 index 37c418e581fb..50010282c010 100644
2397 --- a/drivers/usb/core/quirks.c
2398 +++ b/drivers/usb/core/quirks.c
2399 @@ -151,6 +151,9 @@ static const struct usb_device_id usb_quirk_list[] = {
2400 /* appletouch */
2401 { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME },
2402
2403 + /* Genesys Logic hub, internally used by KY-688 USB 3.1 Type-C Hub */
2404 + { USB_DEVICE(0x05e3, 0x0612), .driver_info = USB_QUIRK_NO_LPM },
2405 +
2406 /* Genesys Logic hub, internally used by Moshi USB to Ethernet Adapter */
2407 { USB_DEVICE(0x05e3, 0x0616), .driver_info = USB_QUIRK_NO_LPM },
2408
2409 diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
2410 index 273320fa30ae..4fce83266926 100644
2411 --- a/drivers/usb/gadget/function/f_fs.c
2412 +++ b/drivers/usb/gadget/function/f_fs.c
2413 @@ -2263,7 +2263,7 @@ static int __ffs_data_do_os_desc(enum ffs_os_desc_type type,
2414
2415 if (len < sizeof(*d) ||
2416 d->bFirstInterfaceNumber >= ffs->interfaces_count ||
2417 - !d->Reserved1)
2418 + d->Reserved1)
2419 return -EINVAL;
2420 for (i = 0; i < ARRAY_SIZE(d->Reserved2); ++i)
2421 if (d->Reserved2[i])
2422 diff --git a/drivers/usb/host/ehci-dbg.c b/drivers/usb/host/ehci-dbg.c
2423 index 1a2614aae42c..3ff6468a1f5f 100644
2424 --- a/drivers/usb/host/ehci-dbg.c
2425 +++ b/drivers/usb/host/ehci-dbg.c
2426 @@ -837,7 +837,7 @@ static ssize_t fill_registers_buffer(struct debug_buffer *buf)
2427 default: /* unknown */
2428 break;
2429 }
2430 - temp = (cap >> 8) & 0xff;
2431 + offset = (cap >> 8) & 0xff;
2432 }
2433 }
2434 #endif
2435 diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
2436 index b7114c3f52aa..a3ecd8bd5324 100644
2437 --- a/drivers/usb/host/xhci-mem.c
2438 +++ b/drivers/usb/host/xhci-mem.c
2439 @@ -996,6 +996,12 @@ void xhci_free_virt_devices_depth_first(struct xhci_hcd *xhci, int slot_id)
2440 if (!vdev)
2441 return;
2442
2443 + if (vdev->real_port == 0 ||
2444 + vdev->real_port > HCS_MAX_PORTS(xhci->hcs_params1)) {
2445 + xhci_dbg(xhci, "Bad vdev->real_port.\n");
2446 + goto out;
2447 + }
2448 +
2449 tt_list_head = &(xhci->rh_bw[vdev->real_port - 1].tts);
2450 list_for_each_entry_safe(tt_info, next, tt_list_head, tt_list) {
2451 /* is this a hub device that added a tt_info to the tts list */
2452 @@ -1009,6 +1015,7 @@ void xhci_free_virt_devices_depth_first(struct xhci_hcd *xhci, int slot_id)
2453 }
2454 }
2455 }
2456 +out:
2457 /* we are now at a leaf device */
2458 xhci_free_virt_device(xhci, slot_id);
2459 }
2460 diff --git a/drivers/usb/phy/phy-tahvo.c b/drivers/usb/phy/phy-tahvo.c
2461 index ab5d364f6e8c..335a1ef35224 100644
2462 --- a/drivers/usb/phy/phy-tahvo.c
2463 +++ b/drivers/usb/phy/phy-tahvo.c
2464 @@ -368,7 +368,8 @@ static int tahvo_usb_probe(struct platform_device *pdev)
2465 tu->extcon = devm_extcon_dev_allocate(&pdev->dev, tahvo_cable);
2466 if (IS_ERR(tu->extcon)) {
2467 dev_err(&pdev->dev, "failed to allocate memory for extcon\n");
2468 - return -ENOMEM;
2469 + ret = PTR_ERR(tu->extcon);
2470 + goto err_disable_clk;
2471 }
2472
2473 ret = devm_extcon_dev_register(&pdev->dev, tu->extcon);
2474 diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
2475 index db3d34c2c82e..ffa8ec917ff5 100644
2476 --- a/drivers/usb/serial/option.c
2477 +++ b/drivers/usb/serial/option.c
2478 @@ -241,6 +241,7 @@ static void option_instat_callback(struct urb *urb);
2479 /* These Quectel products use Quectel's vendor ID */
2480 #define QUECTEL_PRODUCT_EC21 0x0121
2481 #define QUECTEL_PRODUCT_EC25 0x0125
2482 +#define QUECTEL_PRODUCT_BG96 0x0296
2483
2484 #define CMOTECH_VENDOR_ID 0x16d8
2485 #define CMOTECH_PRODUCT_6001 0x6001
2486 @@ -1185,6 +1186,8 @@ static const struct usb_device_id option_ids[] = {
2487 .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
2488 { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25),
2489 .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
2490 + { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
2491 + .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
2492 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) },
2493 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CMU_300) },
2494 { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6003),
2495 diff --git a/drivers/usb/storage/uas-detect.h b/drivers/usb/storage/uas-detect.h
2496 index a155cd02bce2..ecc83c405a8b 100644
2497 --- a/drivers/usb/storage/uas-detect.h
2498 +++ b/drivers/usb/storage/uas-detect.h
2499 @@ -111,6 +111,10 @@ static int uas_use_uas_driver(struct usb_interface *intf,
2500 }
2501 }
2502
2503 + /* All Seagate disk enclosures have broken ATA pass-through support */
2504 + if (le16_to_cpu(udev->descriptor.idVendor) == 0x0bc2)
2505 + flags |= US_FL_NO_ATA_1X;
2506 +
2507 usb_stor_adjust_quirks(udev, &flags);
2508
2509 if (flags & US_FL_IGNORE_UAS) {
2510 diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c b/drivers/vfio/vfio_iommu_spapr_tce.c
2511 index 85d3e648bdea..59b3f62a2d64 100644
2512 --- a/drivers/vfio/vfio_iommu_spapr_tce.c
2513 +++ b/drivers/vfio/vfio_iommu_spapr_tce.c
2514 @@ -1123,12 +1123,11 @@ static long tce_iommu_ioctl(void *iommu_data,
2515 mutex_lock(&container->lock);
2516
2517 ret = tce_iommu_create_default_window(container);
2518 - if (ret)
2519 - return ret;
2520 -
2521 - ret = tce_iommu_create_window(container, create.page_shift,
2522 - create.window_size, create.levels,
2523 - &create.start_addr);
2524 + if (!ret)
2525 + ret = tce_iommu_create_window(container,
2526 + create.page_shift,
2527 + create.window_size, create.levels,
2528 + &create.start_addr);
2529
2530 mutex_unlock(&container->lock);
2531
2532 diff --git a/fs/dax.c b/fs/dax.c
2533 index bf6218da7928..800748f10b3d 100644
2534 --- a/fs/dax.c
2535 +++ b/fs/dax.c
2536 @@ -1265,6 +1265,17 @@ iomap_dax_actor(struct inode *inode, loff_t pos, loff_t length, void *data,
2537 if (WARN_ON_ONCE(iomap->type != IOMAP_MAPPED))
2538 return -EIO;
2539
2540 + /*
2541 + * Write can allocate block for an area which has a hole page mapped
2542 + * into page tables. We have to tear down these mappings so that data
2543 + * written by write(2) is visible in mmap.
2544 + */
2545 + if ((iomap->flags & IOMAP_F_NEW) && inode->i_mapping->nrpages) {
2546 + invalidate_inode_pages2_range(inode->i_mapping,
2547 + pos >> PAGE_SHIFT,
2548 + (end - 1) >> PAGE_SHIFT);
2549 + }
2550 +
2551 while (pos < end) {
2552 unsigned offset = pos & (PAGE_SIZE - 1);
2553 struct blk_dax_ctl dax = { 0 };
2554 @@ -1329,23 +1340,6 @@ iomap_dax_rw(struct kiocb *iocb, struct iov_iter *iter,
2555 if (iov_iter_rw(iter) == WRITE)
2556 flags |= IOMAP_WRITE;
2557
2558 - /*
2559 - * Yes, even DAX files can have page cache attached to them: A zeroed
2560 - * page is inserted into the pagecache when we have to serve a write
2561 - * fault on a hole. It should never be dirtied and can simply be
2562 - * dropped from the pagecache once we get real data for the page.
2563 - *
2564 - * XXX: This is racy against mmap, and there's nothing we can do about
2565 - * it. We'll eventually need to shift this down even further so that
2566 - * we can check if we allocated blocks over a hole first.
2567 - */
2568 - if (mapping->nrpages) {
2569 - ret = invalidate_inode_pages2_range(mapping,
2570 - pos >> PAGE_SHIFT,
2571 - (pos + iov_iter_count(iter) - 1) >> PAGE_SHIFT);
2572 - WARN_ON_ONCE(ret);
2573 - }
2574 -
2575 while (iov_iter_count(iter)) {
2576 ret = iomap_apply(inode, pos, iov_iter_count(iter), flags, ops,
2577 iter, iomap_dax_actor);
2578 diff --git a/fs/libfs.c b/fs/libfs.c
2579 index 48826d4da189..9588780ad43e 100644
2580 --- a/fs/libfs.c
2581 +++ b/fs/libfs.c
2582 @@ -245,7 +245,8 @@ struct dentry *mount_pseudo_xattr(struct file_system_type *fs_type, char *name,
2583 struct inode *root;
2584 struct qstr d_name = QSTR_INIT(name, strlen(name));
2585
2586 - s = sget(fs_type, NULL, set_anon_super, MS_NOUSER, NULL);
2587 + s = sget_userns(fs_type, NULL, set_anon_super, MS_KERNMOUNT|MS_NOUSER,
2588 + &init_user_ns, NULL);
2589 if (IS_ERR(s))
2590 return ERR_CAST(s);
2591
2592 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
2593 index 67845220fc27..4638654e26f3 100644
2594 --- a/fs/nfs/nfs4proc.c
2595 +++ b/fs/nfs/nfs4proc.c
2596 @@ -38,7 +38,6 @@
2597 #include <linux/mm.h>
2598 #include <linux/delay.h>
2599 #include <linux/errno.h>
2600 -#include <linux/file.h>
2601 #include <linux/string.h>
2602 #include <linux/ratelimit.h>
2603 #include <linux/printk.h>
2604 @@ -6006,7 +6005,6 @@ static struct nfs4_lockdata *nfs4_alloc_lockdata(struct file_lock *fl,
2605 p->server = server;
2606 atomic_inc(&lsp->ls_count);
2607 p->ctx = get_nfs_open_context(ctx);
2608 - get_file(fl->fl_file);
2609 memcpy(&p->fl, fl, sizeof(p->fl));
2610 return p;
2611 out_free_seqid:
2612 @@ -6119,7 +6117,6 @@ static void nfs4_lock_release(void *calldata)
2613 nfs_free_seqid(data->arg.lock_seqid);
2614 nfs4_put_lock_state(data->lsp);
2615 put_nfs_open_context(data->ctx);
2616 - fput(data->fl.fl_file);
2617 kfree(data);
2618 dprintk("%s: done!\n", __func__);
2619 }
2620 diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
2621 index 92671914067f..71deeae6eefd 100644
2622 --- a/fs/nfs/nfs4state.c
2623 +++ b/fs/nfs/nfs4state.c
2624 @@ -1718,7 +1718,6 @@ static int nfs4_recovery_handle_error(struct nfs_client *clp, int error)
2625 break;
2626 case -NFS4ERR_STALE_CLIENTID:
2627 set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state);
2628 - nfs4_state_clear_reclaim_reboot(clp);
2629 nfs4_state_start_reclaim_reboot(clp);
2630 break;
2631 case -NFS4ERR_EXPIRED:
2632 diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h
2633 index 447a915db25d..4431ea2c8802 100644
2634 --- a/include/linux/buffer_head.h
2635 +++ b/include/linux/buffer_head.h
2636 @@ -239,12 +239,10 @@ static inline int block_page_mkwrite_return(int err)
2637 {
2638 if (err == 0)
2639 return VM_FAULT_LOCKED;
2640 - if (err == -EFAULT)
2641 + if (err == -EFAULT || err == -EAGAIN)
2642 return VM_FAULT_NOPAGE;
2643 if (err == -ENOMEM)
2644 return VM_FAULT_OOM;
2645 - if (err == -EAGAIN)
2646 - return VM_FAULT_RETRY;
2647 /* -ENOSPC, -EDQUOT, -EIO ... */
2648 return VM_FAULT_SIGBUS;
2649 }
2650 diff --git a/include/linux/fence.h b/include/linux/fence.h
2651 index 0d763053f97a..9bb2c0c97a21 100644
2652 --- a/include/linux/fence.h
2653 +++ b/include/linux/fence.h
2654 @@ -47,7 +47,7 @@ struct fence_cb;
2655 * can be compared to decide which fence would be signaled later.
2656 * @flags: A mask of FENCE_FLAG_* defined below
2657 * @timestamp: Timestamp when the fence was signaled.
2658 - * @status: Optional, only valid if < 0, must be set before calling
2659 + * @error: Optional, only valid if < 0, must be set before calling
2660 * fence_signal, indicates that the fence has completed with an error.
2661 *
2662 * the flags member must be manipulated and read using the appropriate
2663 @@ -79,7 +79,7 @@ struct fence {
2664 unsigned seqno;
2665 unsigned long flags;
2666 ktime_t timestamp;
2667 - int status;
2668 + int error;
2669 };
2670
2671 enum fence_flag_bits {
2672 @@ -132,7 +132,7 @@ struct fence_cb {
2673 * or some failure occurred that made it impossible to enable
2674 * signaling. True indicates successful enabling.
2675 *
2676 - * fence->status may be set in enable_signaling, but only when false is
2677 + * fence->error may be set in enable_signaling, but only when false is
2678 * returned.
2679 *
2680 * Calling fence_signal before enable_signaling is called allows
2681 @@ -144,7 +144,7 @@ struct fence_cb {
2682 * the second time will be a noop since it was already signaled.
2683 *
2684 * Notes on signaled:
2685 - * May set fence->status if returning true.
2686 + * May set fence->error if returning true.
2687 *
2688 * Notes on wait:
2689 * Must not be NULL, set to fence_default_wait for default implementation.
2690 @@ -280,6 +280,19 @@ fence_is_signaled(struct fence *fence)
2691 return false;
2692 }
2693
2694 +/**
2695 + * __fence_is_later - return if f1 is chronologically later than f2
2696 + * @f1: [in] the first fence's seqno
2697 + * @f2: [in] the second fence's seqno from the same context
2698 + *
2699 + * Returns true if f1 is chronologically later than f2. Both fences must be
2700 + * from the same context, since a seqno is not common across contexts.
2701 + */
2702 +static inline bool __fence_is_later(u32 f1, u32 f2)
2703 +{
2704 + return (int)(f1 - f2) > 0;
2705 +}
2706 +
2707 /**
2708 * fence_is_later - return if f1 is chronologically later than f2
2709 * @f1: [in] the first fence from the same context
2710 @@ -293,7 +306,7 @@ static inline bool fence_is_later(struct fence *f1, struct fence *f2)
2711 if (WARN_ON(f1->context != f2->context))
2712 return false;
2713
2714 - return (int)(f1->seqno - f2->seqno) > 0;
2715 + return __fence_is_later(f1->seqno, f2->seqno);
2716 }
2717
2718 /**
2719 @@ -321,6 +334,50 @@ static inline struct fence *fence_later(struct fence *f1, struct fence *f2)
2720 return fence_is_signaled(f2) ? NULL : f2;
2721 }
2722
2723 +/**
2724 + * fence_get_status_locked - returns the status upon completion
2725 + * @fence: [in] the fence to query
2726 + *
2727 + * Drivers can supply an optional error status condition before they signal
2728 + * the fence (to indicate whether the fence was completed due to an error
2729 + * rather than success). The value of the status condition is only valid
2730 + * if the fence has been signaled, fence_get_status_locked() first checks
2731 + * the signal state before reporting the error status.
2732 + *
2733 + * Returns 0 if the fence has not yet been signaled, 1 if the fence has
2734 + * been signaled without an error condition, or a negative error code
2735 + * if the fence has been completed in err.
2736 + */
2737 +static inline int fence_get_status_locked(struct fence *fence)
2738 +{
2739 + if (fence_is_signaled_locked(fence))
2740 + return fence->error ?: 1;
2741 + else
2742 + return 0;
2743 +}
2744 +
2745 +int fence_get_status(struct fence *fence);
2746 +
2747 +/**
2748 + * fence_set_error - flag an error condition on the fence
2749 + * @fence: [in] the fence
2750 + * @error: [in] the error to store
2751 + *
2752 + * Drivers can supply an optional error status condition before they signal
2753 + * the fence, to indicate that the fence was completed due to an error
2754 + * rather than success. This must be set before signaling (so that the value
2755 + * is visible before any waiters on the signal callback are woken). This
2756 + * helper exists to help catching erroneous setting of #fence.error.
2757 + */
2758 +static inline void fence_set_error(struct fence *fence,
2759 + int error)
2760 +{
2761 + BUG_ON(test_bit(FENCE_FLAG_SIGNALED_BIT, &fence->flags));
2762 + BUG_ON(error >= 0 || error < -MAX_ERRNO);
2763 +
2764 + fence->error = error;
2765 +}
2766 +
2767 signed long fence_wait_timeout(struct fence *, bool intr, signed long timeout);
2768 signed long fence_wait_any_timeout(struct fence **fences, uint32_t count,
2769 bool intr, signed long timeout);
2770 diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
2771 index 4741ecdb9817..78ed8105e64d 100644
2772 --- a/include/linux/perf_event.h
2773 +++ b/include/linux/perf_event.h
2774 @@ -1259,6 +1259,7 @@ extern void perf_event_disable(struct perf_event *event);
2775 extern void perf_event_disable_local(struct perf_event *event);
2776 extern void perf_event_disable_inatomic(struct perf_event *event);
2777 extern void perf_event_task_tick(void);
2778 +extern int perf_event_account_interrupt(struct perf_event *event);
2779 #else /* !CONFIG_PERF_EVENTS: */
2780 static inline void *
2781 perf_aux_output_begin(struct perf_output_handle *handle,
2782 diff --git a/include/uapi/linux/usb/ch9.h b/include/uapi/linux/usb/ch9.h
2783 index 5e64a86989a5..ab1dadba9923 100644
2784 --- a/include/uapi/linux/usb/ch9.h
2785 +++ b/include/uapi/linux/usb/ch9.h
2786 @@ -854,6 +854,8 @@ struct usb_wireless_cap_descriptor { /* Ultra Wide Band */
2787 __u8 bReserved;
2788 } __attribute__((packed));
2789
2790 +#define USB_DT_USB_WIRELESS_CAP_SIZE 11
2791 +
2792 /* USB 2.0 Extension descriptor */
2793 #define USB_CAP_TYPE_EXT 2
2794
2795 @@ -1046,6 +1048,7 @@ struct usb_ptm_cap_descriptor {
2796 __u8 bDevCapabilityType;
2797 } __attribute__((packed));
2798
2799 +#define USB_DT_USB_PTM_ID_SIZE 3
2800 /*
2801 * The size of the descriptor for the Sublink Speed Attribute Count
2802 * (SSAC) specified in bmAttributes[4:0].
2803 diff --git a/kernel/events/core.c b/kernel/events/core.c
2804 index 36ff2d93f222..13b9784427b0 100644
2805 --- a/kernel/events/core.c
2806 +++ b/kernel/events/core.c
2807 @@ -7088,25 +7088,12 @@ static void perf_log_itrace_start(struct perf_event *event)
2808 perf_output_end(&handle);
2809 }
2810
2811 -/*
2812 - * Generic event overflow handling, sampling.
2813 - */
2814 -
2815 -static int __perf_event_overflow(struct perf_event *event,
2816 - int throttle, struct perf_sample_data *data,
2817 - struct pt_regs *regs)
2818 +static int
2819 +__perf_event_account_interrupt(struct perf_event *event, int throttle)
2820 {
2821 - int events = atomic_read(&event->event_limit);
2822 struct hw_perf_event *hwc = &event->hw;
2823 - u64 seq;
2824 int ret = 0;
2825 -
2826 - /*
2827 - * Non-sampling counters might still use the PMI to fold short
2828 - * hardware counters, ignore those.
2829 - */
2830 - if (unlikely(!is_sampling_event(event)))
2831 - return 0;
2832 + u64 seq;
2833
2834 seq = __this_cpu_read(perf_throttled_seq);
2835 if (seq != hwc->interrupts_seq) {
2836 @@ -7134,6 +7121,34 @@ static int __perf_event_overflow(struct perf_event *event,
2837 perf_adjust_period(event, delta, hwc->last_period, true);
2838 }
2839
2840 + return ret;
2841 +}
2842 +
2843 +int perf_event_account_interrupt(struct perf_event *event)
2844 +{
2845 + return __perf_event_account_interrupt(event, 1);
2846 +}
2847 +
2848 +/*
2849 + * Generic event overflow handling, sampling.
2850 + */
2851 +
2852 +static int __perf_event_overflow(struct perf_event *event,
2853 + int throttle, struct perf_sample_data *data,
2854 + struct pt_regs *regs)
2855 +{
2856 + int events = atomic_read(&event->event_limit);
2857 + int ret = 0;
2858 +
2859 + /*
2860 + * Non-sampling counters might still use the PMI to fold short
2861 + * hardware counters, ignore those.
2862 + */
2863 + if (unlikely(!is_sampling_event(event)))
2864 + return 0;
2865 +
2866 + ret = __perf_event_account_interrupt(event, throttle);
2867 +
2868 /*
2869 * XXX event_limit might not quite work as expected on inherited
2870 * events
2871 diff --git a/mm/oom_kill.c b/mm/oom_kill.c
2872 index d631d251c150..4a184157cc3d 100644
2873 --- a/mm/oom_kill.c
2874 +++ b/mm/oom_kill.c
2875 @@ -524,7 +524,6 @@ static bool __oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm)
2876 */
2877 set_bit(MMF_UNSTABLE, &mm->flags);
2878
2879 - tlb_gather_mmu(&tlb, mm, 0, -1);
2880 for (vma = mm->mmap ; vma; vma = vma->vm_next) {
2881 if (is_vm_hugetlb_page(vma))
2882 continue;
2883 @@ -546,11 +545,13 @@ static bool __oom_reap_task_mm(struct task_struct *tsk, struct mm_struct *mm)
2884 * we do not want to block exit_mmap by keeping mm ref
2885 * count elevated without a good reason.
2886 */
2887 - if (vma_is_anonymous(vma) || !(vma->vm_flags & VM_SHARED))
2888 + if (vma_is_anonymous(vma) || !(vma->vm_flags & VM_SHARED)) {
2889 + tlb_gather_mmu(&tlb, mm, vma->vm_start, vma->vm_end);
2890 unmap_page_range(&tlb, vma, vma->vm_start, vma->vm_end,
2891 &details);
2892 + tlb_finish_mmu(&tlb, vma->vm_start, vma->vm_end);
2893 + }
2894 }
2895 - tlb_finish_mmu(&tlb, 0, -1);
2896 pr_info("oom_reaper: reaped process %d (%s), now anon-rss:%lukB, file-rss:%lukB, shmem-rss:%lukB\n",
2897 task_pid_nr(tsk), tsk->comm,
2898 K(get_mm_counter(mm, MM_ANONPAGES)),
2899 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
2900 index ef5ee56095e8..fbc38888252b 100644
2901 --- a/mm/page_alloc.c
2902 +++ b/mm/page_alloc.c
2903 @@ -2592,30 +2592,23 @@ int __isolate_free_page(struct page *page, unsigned int order)
2904 * Update NUMA hit/miss statistics
2905 *
2906 * Must be called with interrupts disabled.
2907 - *
2908 - * When __GFP_OTHER_NODE is set assume the node of the preferred
2909 - * zone is the local node. This is useful for daemons who allocate
2910 - * memory on behalf of other processes.
2911 */
2912 static inline void zone_statistics(struct zone *preferred_zone, struct zone *z,
2913 gfp_t flags)
2914 {
2915 #ifdef CONFIG_NUMA
2916 - int local_nid = numa_node_id();
2917 enum zone_stat_item local_stat = NUMA_LOCAL;
2918
2919 - if (unlikely(flags & __GFP_OTHER_NODE)) {
2920 + if (z->node != numa_node_id())
2921 local_stat = NUMA_OTHER;
2922 - local_nid = preferred_zone->node;
2923 - }
2924
2925 - if (z->node == local_nid) {
2926 + if (z->node == preferred_zone->node)
2927 __inc_zone_state(z, NUMA_HIT);
2928 - __inc_zone_state(z, local_stat);
2929 - } else {
2930 + else {
2931 __inc_zone_state(z, NUMA_MISS);
2932 __inc_zone_state(preferred_zone, NUMA_FOREIGN);
2933 }
2934 + __inc_zone_state(z, local_stat);
2935 #endif
2936 }
2937
2938 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
2939 index 8fcd0c642742..05255a286888 100644
2940 --- a/net/ipv4/tcp_input.c
2941 +++ b/net/ipv4/tcp_input.c
2942 @@ -5081,7 +5081,7 @@ static void tcp_check_space(struct sock *sk)
2943 if (sock_flag(sk, SOCK_QUEUE_SHRUNK)) {
2944 sock_reset_flag(sk, SOCK_QUEUE_SHRUNK);
2945 /* pairs with tcp_poll() */
2946 - smp_mb__after_atomic();
2947 + smp_mb();
2948 if (sk->sk_socket &&
2949 test_bit(SOCK_NOSPACE, &sk->sk_socket->flags))
2950 tcp_new_space(sk);
2951 diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
2952 index 816f79d1a8a3..67e882d49195 100644
2953 --- a/net/ipv6/ip6_vti.c
2954 +++ b/net/ipv6/ip6_vti.c
2955 @@ -189,12 +189,12 @@ static int vti6_tnl_create2(struct net_device *dev)
2956 struct vti6_net *ip6n = net_generic(net, vti6_net_id);
2957 int err;
2958
2959 + dev->rtnl_link_ops = &vti6_link_ops;
2960 err = register_netdevice(dev);
2961 if (err < 0)
2962 goto out;
2963
2964 strcpy(t->parms.name, dev->name);
2965 - dev->rtnl_link_ops = &vti6_link_ops;
2966
2967 dev_hold(dev);
2968 vti6_tnl_link(ip6n, t);
2969 diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c
2970 index 3468d5635d0a..9d77a54e8854 100644
2971 --- a/net/l2tp/l2tp_ip.c
2972 +++ b/net/l2tp/l2tp_ip.c
2973 @@ -48,7 +48,8 @@ static inline struct l2tp_ip_sock *l2tp_ip_sk(const struct sock *sk)
2974 return (struct l2tp_ip_sock *)sk;
2975 }
2976
2977 -static struct sock *__l2tp_ip_bind_lookup(struct net *net, __be32 laddr, int dif, u32 tunnel_id)
2978 +static struct sock *__l2tp_ip_bind_lookup(const struct net *net, __be32 laddr,
2979 + __be32 raddr, int dif, u32 tunnel_id)
2980 {
2981 struct sock *sk;
2982
2983 @@ -62,6 +63,7 @@ static struct sock *__l2tp_ip_bind_lookup(struct net *net, __be32 laddr, int dif
2984 if ((l2tp->conn_id == tunnel_id) &&
2985 net_eq(sock_net(sk), net) &&
2986 !(inet->inet_rcv_saddr && inet->inet_rcv_saddr != laddr) &&
2987 + (!inet->inet_daddr || !raddr || inet->inet_daddr == raddr) &&
2988 (!sk->sk_bound_dev_if || !dif ||
2989 sk->sk_bound_dev_if == dif))
2990 goto found;
2991 @@ -72,15 +74,6 @@ static struct sock *__l2tp_ip_bind_lookup(struct net *net, __be32 laddr, int dif
2992 return sk;
2993 }
2994
2995 -static inline struct sock *l2tp_ip_bind_lookup(struct net *net, __be32 laddr, int dif, u32 tunnel_id)
2996 -{
2997 - struct sock *sk = __l2tp_ip_bind_lookup(net, laddr, dif, tunnel_id);
2998 - if (sk)
2999 - sock_hold(sk);
3000 -
3001 - return sk;
3002 -}
3003 -
3004 /* When processing receive frames, there are two cases to
3005 * consider. Data frames consist of a non-zero session-id and an
3006 * optional cookie. Control frames consist of a regular L2TP header
3007 @@ -186,8 +179,8 @@ static int l2tp_ip_recv(struct sk_buff *skb)
3008 struct iphdr *iph = (struct iphdr *) skb_network_header(skb);
3009
3010 read_lock_bh(&l2tp_ip_lock);
3011 - sk = __l2tp_ip_bind_lookup(net, iph->daddr, inet_iif(skb),
3012 - tunnel_id);
3013 + sk = __l2tp_ip_bind_lookup(net, iph->daddr, iph->saddr,
3014 + inet_iif(skb), tunnel_id);
3015 if (!sk) {
3016 read_unlock_bh(&l2tp_ip_lock);
3017 goto discard;
3018 @@ -289,7 +282,7 @@ static int l2tp_ip_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
3019 inet->inet_saddr = 0; /* Use device */
3020
3021 write_lock_bh(&l2tp_ip_lock);
3022 - if (__l2tp_ip_bind_lookup(net, addr->l2tp_addr.s_addr,
3023 + if (__l2tp_ip_bind_lookup(net, addr->l2tp_addr.s_addr, 0,
3024 sk->sk_bound_dev_if, addr->l2tp_conn_id)) {
3025 write_unlock_bh(&l2tp_ip_lock);
3026 ret = -EADDRINUSE;
3027 diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c
3028 index 1d522ce833e6..247097289fd0 100644
3029 --- a/net/l2tp/l2tp_ip6.c
3030 +++ b/net/l2tp/l2tp_ip6.c
3031 @@ -59,12 +59,14 @@ static inline struct l2tp_ip6_sock *l2tp_ip6_sk(const struct sock *sk)
3032
3033 static struct sock *__l2tp_ip6_bind_lookup(struct net *net,
3034 struct in6_addr *laddr,
3035 + const struct in6_addr *raddr,
3036 int dif, u32 tunnel_id)
3037 {
3038 struct sock *sk;
3039
3040 sk_for_each_bound(sk, &l2tp_ip6_bind_table) {
3041 const struct in6_addr *sk_laddr = inet6_rcv_saddr(sk);
3042 + const struct in6_addr *sk_raddr = &sk->sk_v6_daddr;
3043 struct l2tp_ip6_sock *l2tp = l2tp_ip6_sk(sk);
3044
3045 if (l2tp == NULL)
3046 @@ -73,6 +75,7 @@ static struct sock *__l2tp_ip6_bind_lookup(struct net *net,
3047 if ((l2tp->conn_id == tunnel_id) &&
3048 net_eq(sock_net(sk), net) &&
3049 (!sk_laddr || ipv6_addr_any(sk_laddr) || ipv6_addr_equal(sk_laddr, laddr)) &&
3050 + (!raddr || ipv6_addr_any(sk_raddr) || ipv6_addr_equal(sk_raddr, raddr)) &&
3051 (!sk->sk_bound_dev_if || !dif ||
3052 sk->sk_bound_dev_if == dif))
3053 goto found;
3054 @@ -83,17 +86,6 @@ static struct sock *__l2tp_ip6_bind_lookup(struct net *net,
3055 return sk;
3056 }
3057
3058 -static inline struct sock *l2tp_ip6_bind_lookup(struct net *net,
3059 - struct in6_addr *laddr,
3060 - int dif, u32 tunnel_id)
3061 -{
3062 - struct sock *sk = __l2tp_ip6_bind_lookup(net, laddr, dif, tunnel_id);
3063 - if (sk)
3064 - sock_hold(sk);
3065 -
3066 - return sk;
3067 -}
3068 -
3069 /* When processing receive frames, there are two cases to
3070 * consider. Data frames consist of a non-zero session-id and an
3071 * optional cookie. Control frames consist of a regular L2TP header
3072 @@ -200,8 +192,8 @@ static int l2tp_ip6_recv(struct sk_buff *skb)
3073 struct ipv6hdr *iph = ipv6_hdr(skb);
3074
3075 read_lock_bh(&l2tp_ip6_lock);
3076 - sk = __l2tp_ip6_bind_lookup(net, &iph->daddr, inet6_iif(skb),
3077 - tunnel_id);
3078 + sk = __l2tp_ip6_bind_lookup(net, &iph->daddr, &iph->saddr,
3079 + inet6_iif(skb), tunnel_id);
3080 if (!sk) {
3081 read_unlock_bh(&l2tp_ip6_lock);
3082 goto discard;
3083 @@ -339,7 +331,7 @@ static int l2tp_ip6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
3084 rcu_read_unlock();
3085
3086 write_lock_bh(&l2tp_ip6_lock);
3087 - if (__l2tp_ip6_bind_lookup(net, &addr->l2tp_addr, bound_dev_if,
3088 + if (__l2tp_ip6_bind_lookup(net, &addr->l2tp_addr, NULL, bound_dev_if,
3089 addr->l2tp_conn_id)) {
3090 write_unlock_bh(&l2tp_ip6_lock);
3091 err = -EADDRINUSE;
3092 diff --git a/net/mac80211/chan.c b/net/mac80211/chan.c
3093 index e75cbf6ecc26..a0d901d8992e 100644
3094 --- a/net/mac80211/chan.c
3095 +++ b/net/mac80211/chan.c
3096 @@ -231,9 +231,6 @@ ieee80211_get_max_required_bw(struct ieee80211_sub_if_data *sdata)
3097 !(sta->sdata->bss && sta->sdata->bss == sdata->bss))
3098 continue;
3099
3100 - if (!sta->uploaded || !test_sta_flag(sta, WLAN_STA_ASSOC))
3101 - continue;
3102 -
3103 max_bw = max(max_bw, ieee80211_get_sta_bw(&sta->sta));
3104 }
3105 rcu_read_unlock();
3106 diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
3107 index 274c564bd9af..1ffd1e145c13 100644
3108 --- a/net/mac80211/tx.c
3109 +++ b/net/mac80211/tx.c
3110 @@ -1244,7 +1244,7 @@ ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata,
3111
3112 static struct txq_info *ieee80211_get_txq(struct ieee80211_local *local,
3113 struct ieee80211_vif *vif,
3114 - struct ieee80211_sta *pubsta,
3115 + struct sta_info *sta,
3116 struct sk_buff *skb)
3117 {
3118 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
3119 @@ -1258,10 +1258,13 @@ static struct txq_info *ieee80211_get_txq(struct ieee80211_local *local,
3120 if (!ieee80211_is_data(hdr->frame_control))
3121 return NULL;
3122
3123 - if (pubsta) {
3124 + if (sta) {
3125 u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
3126
3127 - txq = pubsta->txq[tid];
3128 + if (!sta->uploaded)
3129 + return NULL;
3130 +
3131 + txq = sta->sta.txq[tid];
3132 } else if (vif) {
3133 txq = vif->txq;
3134 }
3135 @@ -1499,23 +1502,17 @@ static bool ieee80211_queue_skb(struct ieee80211_local *local,
3136 struct fq *fq = &local->fq;
3137 struct ieee80211_vif *vif;
3138 struct txq_info *txqi;
3139 - struct ieee80211_sta *pubsta;
3140
3141 if (!local->ops->wake_tx_queue ||
3142 sdata->vif.type == NL80211_IFTYPE_MONITOR)
3143 return false;
3144
3145 - if (sta && sta->uploaded)
3146 - pubsta = &sta->sta;
3147 - else
3148 - pubsta = NULL;
3149 -
3150 if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
3151 sdata = container_of(sdata->bss,
3152 struct ieee80211_sub_if_data, u.ap);
3153
3154 vif = &sdata->vif;
3155 - txqi = ieee80211_get_txq(local, vif, pubsta, skb);
3156 + txqi = ieee80211_get_txq(local, vif, sta, skb);
3157
3158 if (!txqi)
3159 return false;
3160 diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c
3161 index c985ecbe9bd6..ae5ac175b2be 100644
3162 --- a/net/qrtr/qrtr.c
3163 +++ b/net/qrtr/qrtr.c
3164 @@ -252,7 +252,7 @@ static struct sk_buff *qrtr_alloc_resume_tx(u32 src_node,
3165 const int pkt_len = 20;
3166 struct qrtr_hdr *hdr;
3167 struct sk_buff *skb;
3168 - u32 *buf;
3169 + __le32 *buf;
3170
3171 skb = alloc_skb(QRTR_HDR_SIZE + pkt_len, GFP_KERNEL);
3172 if (!skb)
3173 @@ -269,7 +269,7 @@ static struct sk_buff *qrtr_alloc_resume_tx(u32 src_node,
3174 hdr->dst_node_id = cpu_to_le32(dst_node);
3175 hdr->dst_port_id = cpu_to_le32(QRTR_PORT_CTRL);
3176
3177 - buf = (u32 *)skb_put(skb, pkt_len);
3178 + buf = (__le32 *)skb_put(skb, pkt_len);
3179 memset(buf, 0, pkt_len);
3180 buf[0] = cpu_to_le32(QRTR_TYPE_RESUME_TX);
3181 buf[1] = cpu_to_le32(src_node);
3182 diff --git a/net/sctp/debug.c b/net/sctp/debug.c
3183 index 95d7b15dad21..e371a0d90068 100644
3184 --- a/net/sctp/debug.c
3185 +++ b/net/sctp/debug.c
3186 @@ -166,7 +166,7 @@ static const char *const sctp_timer_tbl[] = {
3187 /* Lookup timer debug name. */
3188 const char *sctp_tname(const sctp_subtype_t id)
3189 {
3190 - if (id.timeout <= SCTP_EVENT_TIMEOUT_MAX)
3191 + if (id.timeout < ARRAY_SIZE(sctp_timer_tbl))
3192 return sctp_timer_tbl[id.timeout];
3193 return "unknown_timer";
3194 }
3195 diff --git a/net/tipc/server.c b/net/tipc/server.c
3196 index f89c0c2e8c16..3cd6402e812c 100644
3197 --- a/net/tipc/server.c
3198 +++ b/net/tipc/server.c
3199 @@ -86,7 +86,6 @@ struct outqueue_entry {
3200 static void tipc_recv_work(struct work_struct *work);
3201 static void tipc_send_work(struct work_struct *work);
3202 static void tipc_clean_outqueues(struct tipc_conn *con);
3203 -static void tipc_sock_release(struct tipc_conn *con);
3204
3205 static void tipc_conn_kref_release(struct kref *kref)
3206 {
3207 @@ -104,7 +103,6 @@ static void tipc_conn_kref_release(struct kref *kref)
3208 }
3209 saddr->scope = -TIPC_NODE_SCOPE;
3210 kernel_bind(sock, (struct sockaddr *)saddr, sizeof(*saddr));
3211 - tipc_sock_release(con);
3212 sock_release(sock);
3213 con->sock = NULL;
3214
3215 @@ -194,19 +192,15 @@ static void tipc_unregister_callbacks(struct tipc_conn *con)
3216 write_unlock_bh(&sk->sk_callback_lock);
3217 }
3218
3219 -static void tipc_sock_release(struct tipc_conn *con)
3220 +static void tipc_close_conn(struct tipc_conn *con)
3221 {
3222 struct tipc_server *s = con->server;
3223
3224 - if (con->conid)
3225 - s->tipc_conn_release(con->conid, con->usr_data);
3226 -
3227 - tipc_unregister_callbacks(con);
3228 -}
3229 -
3230 -static void tipc_close_conn(struct tipc_conn *con)
3231 -{
3232 if (test_and_clear_bit(CF_CONNECTED, &con->flags)) {
3233 + tipc_unregister_callbacks(con);
3234 +
3235 + if (con->conid)
3236 + s->tipc_conn_release(con->conid, con->usr_data);
3237
3238 /* We shouldn't flush pending works as we may be in the
3239 * thread. In fact the races with pending rx/tx work structs
3240 @@ -625,14 +619,12 @@ int tipc_server_start(struct tipc_server *s)
3241 void tipc_server_stop(struct tipc_server *s)
3242 {
3243 struct tipc_conn *con;
3244 - int total = 0;
3245 int id;
3246
3247 spin_lock_bh(&s->idr_lock);
3248 - for (id = 0; total < s->idr_in_use; id++) {
3249 + for (id = 0; s->idr_in_use; id++) {
3250 con = idr_find(&s->conn_idr, id);
3251 if (con) {
3252 - total++;
3253 spin_unlock_bh(&s->idr_lock);
3254 tipc_close_conn(con);
3255 spin_lock_bh(&s->idr_lock);
3256 diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
3257 index 0e8762945e79..2b3def14b4fb 100644
3258 --- a/security/integrity/ima/ima_main.c
3259 +++ b/security/integrity/ima/ima_main.c
3260 @@ -51,6 +51,8 @@ static int __init hash_setup(char *str)
3261 ima_hash_algo = HASH_ALGO_SHA1;
3262 else if (strncmp(str, "md5", 3) == 0)
3263 ima_hash_algo = HASH_ALGO_MD5;
3264 + else
3265 + return 1;
3266 goto out;
3267 }
3268
3269 @@ -60,6 +62,8 @@ static int __init hash_setup(char *str)
3270 break;
3271 }
3272 }
3273 + if (i == HASH_ALGO__LAST)
3274 + return 1;
3275 out:
3276 hash_setup_done = 1;
3277 return 1;
3278 diff --git a/tools/include/linux/poison.h b/tools/include/linux/poison.h
3279 index 51334edec506..f306a7642509 100644
3280 --- a/tools/include/linux/poison.h
3281 +++ b/tools/include/linux/poison.h
3282 @@ -14,6 +14,10 @@
3283 # define POISON_POINTER_DELTA 0
3284 #endif
3285
3286 +#ifdef __cplusplus
3287 +#define LIST_POISON1 NULL
3288 +#define LIST_POISON2 NULL
3289 +#else
3290 /*
3291 * These are non-NULL pointers that will result in page faults
3292 * under normal circumstances, used to verify that nobody uses
3293 @@ -21,6 +25,7 @@
3294 */
3295 #define LIST_POISON1 ((void *) 0x100 + POISON_POINTER_DELTA)
3296 #define LIST_POISON2 ((void *) 0x200 + POISON_POINTER_DELTA)
3297 +#endif
3298
3299 /********** include/linux/timer.h **********/
3300 /*
3301 diff --git a/tools/perf/tests/attr.c b/tools/perf/tests/attr.c
3302 index 28d1605b0338..b60a6fd66517 100644
3303 --- a/tools/perf/tests/attr.c
3304 +++ b/tools/perf/tests/attr.c
3305 @@ -150,7 +150,7 @@ static int run_dir(const char *d, const char *perf)
3306 snprintf(cmd, 3*PATH_MAX, PYTHON " %s/attr.py -d %s/attr/ -p %s %.*s",
3307 d, d, perf, vcnt, v);
3308
3309 - return system(cmd);
3310 + return system(cmd) ? TEST_FAIL : TEST_OK;
3311 }
3312
3313 int test__attr(int subtest __maybe_unused)
3314 diff --git a/tools/testing/selftests/x86/ldt_gdt.c b/tools/testing/selftests/x86/ldt_gdt.c
3315 index e717fed80219..f936a3cd3e35 100644
3316 --- a/tools/testing/selftests/x86/ldt_gdt.c
3317 +++ b/tools/testing/selftests/x86/ldt_gdt.c
3318 @@ -360,9 +360,24 @@ static void do_simple_tests(void)
3319 install_invalid(&desc, false);
3320
3321 desc.seg_not_present = 0;
3322 - desc.read_exec_only = 0;
3323 desc.seg_32bit = 1;
3324 + desc.read_exec_only = 0;
3325 + desc.limit = 0xfffff;
3326 +
3327 install_valid(&desc, AR_DPL3 | AR_TYPE_RWDATA | AR_S | AR_P | AR_DB);
3328 +
3329 + desc.limit_in_pages = 1;
3330 +
3331 + install_valid(&desc, AR_DPL3 | AR_TYPE_RWDATA | AR_S | AR_P | AR_DB | AR_G);
3332 + desc.read_exec_only = 1;
3333 + install_valid(&desc, AR_DPL3 | AR_TYPE_RODATA | AR_S | AR_P | AR_DB | AR_G);
3334 + desc.contents = 1;
3335 + desc.read_exec_only = 0;
3336 + install_valid(&desc, AR_DPL3 | AR_TYPE_RWDATA_EXPDOWN | AR_S | AR_P | AR_DB | AR_G);
3337 + desc.read_exec_only = 1;
3338 + install_valid(&desc, AR_DPL3 | AR_TYPE_RODATA_EXPDOWN | AR_S | AR_P | AR_DB | AR_G);
3339 +
3340 + desc.limit = 0;
3341 install_invalid(&desc, true);
3342 }
3343
3344 diff --git a/tools/usb/usbip/Makefile.am b/tools/usb/usbip/Makefile.am
3345 index 66f8bf038c9f..45eaa70a71e0 100644
3346 --- a/tools/usb/usbip/Makefile.am
3347 +++ b/tools/usb/usbip/Makefile.am
3348 @@ -1,6 +1,7 @@
3349 SUBDIRS := libsrc src
3350 includedir = @includedir@/usbip
3351 include_HEADERS := $(addprefix libsrc/, \
3352 - usbip_common.h vhci_driver.h usbip_host_driver.h)
3353 + usbip_common.h vhci_driver.h usbip_host_driver.h \
3354 + list.h sysfs_utils.h usbip_host_common.h)
3355
3356 dist_man_MANS := $(addprefix doc/, usbip.8 usbipd.8)
3357 diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c
3358 index 27a1f6341d41..7b49a1378c90 100644
3359 --- a/virt/kvm/arm/arch_timer.c
3360 +++ b/virt/kvm/arm/arch_timer.c
3361 @@ -89,9 +89,6 @@ static void kvm_timer_inject_irq_work(struct work_struct *work)
3362 struct kvm_vcpu *vcpu;
3363
3364 vcpu = container_of(work, struct kvm_vcpu, arch.timer_cpu.expired);
3365 - vcpu->arch.timer_cpu.armed = false;
3366 -
3367 - WARN_ON(!kvm_timer_should_fire(vcpu));
3368
3369 /*
3370 * If the vcpu is blocked we want to wake it up so that it will see