Magellan Linux

Contents of /trunk/kernel-alx/patches-4.9/0284-4.9.185-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3372 - (show annotations) (download)
Thu Jul 25 14:48:08 2019 UTC (4 years, 9 months ago) by niro
File size: 95019 byte(s)
-linux-4.9.185
1 diff --git a/Makefile b/Makefile
2 index 3b0dd4e90c44..c80dad45334e 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 9
8 -SUBLEVEL = 184
9 +SUBLEVEL = 185
10 EXTRAVERSION =
11 NAME = Roaring Lionus
12
13 @@ -647,6 +647,7 @@ KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,)
14 KBUILD_CFLAGS += $(call cc-disable-warning, format-truncation)
15 KBUILD_CFLAGS += $(call cc-disable-warning, format-overflow)
16 KBUILD_CFLAGS += $(call cc-disable-warning, int-in-bool-context)
17 +KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
18 KBUILD_CFLAGS += $(call cc-disable-warning, attribute-alias)
19
20 ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
21 @@ -718,7 +719,6 @@ ifeq ($(cc-name),clang)
22 KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
23 KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
24 KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
25 -KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
26 # Quiet clang warning: comparison of unsigned expression < 0 is always false
27 KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
28 # CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
29 diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
30 index c7a081c583b9..2de75779a247 100644
31 --- a/arch/arc/Kconfig
32 +++ b/arch/arc/Kconfig
33 @@ -23,7 +23,7 @@ config ARC
34 select GENERIC_SMP_IDLE_THREAD
35 select HAVE_ARCH_KGDB
36 select HAVE_ARCH_TRACEHOOK
37 - select HAVE_FUTEX_CMPXCHG
38 + select HAVE_FUTEX_CMPXCHG if FUTEX
39 select HAVE_IOREMAP_PROT
40 select HAVE_KPROBES
41 select HAVE_KRETPROBES
42 diff --git a/arch/arc/include/asm/bug.h b/arch/arc/include/asm/bug.h
43 index ea022d47896c..21ec82466d62 100644
44 --- a/arch/arc/include/asm/bug.h
45 +++ b/arch/arc/include/asm/bug.h
46 @@ -23,7 +23,8 @@ void die(const char *str, struct pt_regs *regs, unsigned long address);
47
48 #define BUG() do { \
49 pr_warn("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
50 - dump_stack(); \
51 + barrier_before_unreachable(); \
52 + __builtin_trap(); \
53 } while (0)
54
55 #define HAVE_ARCH_BUG
56 diff --git a/arch/arc/include/asm/cmpxchg.h b/arch/arc/include/asm/cmpxchg.h
57 index d819de1c5d10..3ea4112c8302 100644
58 --- a/arch/arc/include/asm/cmpxchg.h
59 +++ b/arch/arc/include/asm/cmpxchg.h
60 @@ -92,8 +92,11 @@ __cmpxchg(volatile void *ptr, unsigned long expected, unsigned long new)
61
62 #endif /* CONFIG_ARC_HAS_LLSC */
63
64 -#define cmpxchg(ptr, o, n) ((typeof(*(ptr)))__cmpxchg((ptr), \
65 - (unsigned long)(o), (unsigned long)(n)))
66 +#define cmpxchg(ptr, o, n) ({ \
67 + (typeof(*(ptr)))__cmpxchg((ptr), \
68 + (unsigned long)(o), \
69 + (unsigned long)(n)); \
70 +})
71
72 /*
73 * atomic_cmpxchg is same as cmpxchg
74 @@ -198,8 +201,11 @@ static inline unsigned long __xchg(unsigned long val, volatile void *ptr,
75 return __xchg_bad_pointer();
76 }
77
78 -#define xchg(ptr, with) ((typeof(*(ptr)))__xchg((unsigned long)(with), (ptr), \
79 - sizeof(*(ptr))))
80 +#define xchg(ptr, with) ({ \
81 + (typeof(*(ptr)))__xchg((unsigned long)(with), \
82 + (ptr), \
83 + sizeof(*(ptr))); \
84 +})
85
86 #endif /* CONFIG_ARC_PLAT_EZNPS */
87
88 diff --git a/arch/arc/kernel/traps.c b/arch/arc/kernel/traps.c
89 index c927aa84e652..2fb0cd39a31c 100644
90 --- a/arch/arc/kernel/traps.c
91 +++ b/arch/arc/kernel/traps.c
92 @@ -155,3 +155,11 @@ void do_insterror_or_kprobe(unsigned long address, struct pt_regs *regs)
93
94 insterror_is_error(address, regs);
95 }
96 +
97 +/*
98 + * abort() call generated by older gcc for __builtin_trap()
99 + */
100 +void abort(void)
101 +{
102 + __asm__ __volatile__("trap_s 5\n");
103 +}
104 diff --git a/arch/arc/mm/tlb.c b/arch/arc/mm/tlb.c
105 index a4dc881da277..3c88ccbe01af 100644
106 --- a/arch/arc/mm/tlb.c
107 +++ b/arch/arc/mm/tlb.c
108 @@ -890,9 +890,11 @@ void do_tlb_overlap_fault(unsigned long cause, unsigned long address,
109 struct pt_regs *regs)
110 {
111 struct cpuinfo_arc_mmu *mmu = &cpuinfo_arc700[smp_processor_id()].mmu;
112 - unsigned int pd0[mmu->ways];
113 unsigned long flags;
114 - int set;
115 + int set, n_ways = mmu->ways;
116 +
117 + n_ways = min(n_ways, 4);
118 + BUG_ON(mmu->ways > 4);
119
120 local_irq_save(flags);
121
122 @@ -900,9 +902,10 @@ void do_tlb_overlap_fault(unsigned long cause, unsigned long address,
123 for (set = 0; set < mmu->sets; set++) {
124
125 int is_valid, way;
126 + unsigned int pd0[4];
127
128 /* read out all the ways of current set */
129 - for (way = 0, is_valid = 0; way < mmu->ways; way++) {
130 + for (way = 0, is_valid = 0; way < n_ways; way++) {
131 write_aux_reg(ARC_REG_TLBINDEX,
132 SET_WAY_TO_IDX(mmu, set, way));
133 write_aux_reg(ARC_REG_TLBCOMMAND, TLBRead);
134 @@ -916,14 +919,14 @@ void do_tlb_overlap_fault(unsigned long cause, unsigned long address,
135 continue;
136
137 /* Scan the set for duplicate ways: needs a nested loop */
138 - for (way = 0; way < mmu->ways - 1; way++) {
139 + for (way = 0; way < n_ways - 1; way++) {
140
141 int n;
142
143 if (!pd0[way])
144 continue;
145
146 - for (n = way + 1; n < mmu->ways; n++) {
147 + for (n = way + 1; n < n_ways; n++) {
148 if (pd0[way] != pd0[n])
149 continue;
150
151 diff --git a/arch/arm/mach-imx/cpuidle-imx6sx.c b/arch/arm/mach-imx/cpuidle-imx6sx.c
152 index edb888ac5ad3..c6aa77dfd00a 100644
153 --- a/arch/arm/mach-imx/cpuidle-imx6sx.c
154 +++ b/arch/arm/mach-imx/cpuidle-imx6sx.c
155 @@ -15,6 +15,7 @@
156
157 #include "common.h"
158 #include "cpuidle.h"
159 +#include "hardware.h"
160
161 static int imx6sx_idle_finish(unsigned long val)
162 {
163 @@ -108,7 +109,7 @@ int __init imx6sx_cpuidle_init(void)
164 * except for power up sw2iso which need to be
165 * larger than LDO ramp up time.
166 */
167 - imx_gpc_set_arm_power_up_timing(0xf, 1);
168 + imx_gpc_set_arm_power_up_timing(cpu_is_imx6sx() ? 0xf : 0x2, 1);
169 imx_gpc_set_arm_power_down_timing(1, 1);
170
171 return cpuidle_register(&imx6sx_cpuidle_driver, NULL);
172 diff --git a/arch/arm64/kernel/module.c b/arch/arm64/kernel/module.c
173 index 7f316982ce00..4130f1f26852 100644
174 --- a/arch/arm64/kernel/module.c
175 +++ b/arch/arm64/kernel/module.c
176 @@ -33,10 +33,14 @@
177 void *module_alloc(unsigned long size)
178 {
179 void *p;
180 + u64 module_alloc_end = module_alloc_base + MODULES_VSIZE;
181 +
182 + if (IS_ENABLED(CONFIG_KASAN))
183 + /* don't exceed the static module region - see below */
184 + module_alloc_end = MODULES_END;
185
186 p = __vmalloc_node_range(size, MODULE_ALIGN, module_alloc_base,
187 - module_alloc_base + MODULES_VSIZE,
188 - GFP_KERNEL, PAGE_KERNEL_EXEC, 0,
189 + module_alloc_end, GFP_KERNEL, PAGE_KERNEL_EXEC, 0,
190 NUMA_NO_NODE, __builtin_return_address(0));
191
192 if (!p && IS_ENABLED(CONFIG_ARM64_MODULE_PLTS) &&
193 diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c
194 index c9b9a5a322eb..c0f315ecfa7c 100644
195 --- a/arch/arm64/kernel/vdso.c
196 +++ b/arch/arm64/kernel/vdso.c
197 @@ -37,7 +37,7 @@
198 #include <asm/vdso.h>
199 #include <asm/vdso_datapage.h>
200
201 -extern char vdso_start, vdso_end;
202 +extern char vdso_start[], vdso_end[];
203 static unsigned long vdso_pages __ro_after_init;
204
205 /*
206 @@ -124,14 +124,14 @@ static int __init vdso_init(void)
207 int i;
208 struct page **vdso_pagelist;
209
210 - if (memcmp(&vdso_start, "\177ELF", 4)) {
211 + if (memcmp(vdso_start, "\177ELF", 4)) {
212 pr_err("vDSO is not a valid ELF object!\n");
213 return -EINVAL;
214 }
215
216 - vdso_pages = (&vdso_end - &vdso_start) >> PAGE_SHIFT;
217 + vdso_pages = (vdso_end - vdso_start) >> PAGE_SHIFT;
218 pr_info("vdso: %ld pages (%ld code @ %p, %ld data @ %p)\n",
219 - vdso_pages + 1, vdso_pages, &vdso_start, 1L, vdso_data);
220 + vdso_pages + 1, vdso_pages, vdso_start, 1L, vdso_data);
221
222 /* Allocate the vDSO pagelist, plus a page for the data. */
223 vdso_pagelist = kcalloc(vdso_pages + 1, sizeof(struct page *),
224 @@ -144,7 +144,7 @@ static int __init vdso_init(void)
225
226 /* Grab the vDSO code pages. */
227 for (i = 0; i < vdso_pages; i++)
228 - vdso_pagelist[i + 1] = pfn_to_page(PHYS_PFN(__pa(&vdso_start)) + i);
229 + vdso_pagelist[i + 1] = pfn_to_page(PHYS_PFN(__pa(vdso_start)) + i);
230
231 vdso_spec[0].pages = &vdso_pagelist[0];
232 vdso_spec[1].pages = &vdso_pagelist[1];
233 diff --git a/arch/ia64/include/asm/bug.h b/arch/ia64/include/asm/bug.h
234 index 823616b5020b..19067821249f 100644
235 --- a/arch/ia64/include/asm/bug.h
236 +++ b/arch/ia64/include/asm/bug.h
237 @@ -3,7 +3,11 @@
238
239 #ifdef CONFIG_BUG
240 #define ia64_abort() __builtin_trap()
241 -#define BUG() do { printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); ia64_abort(); } while (0)
242 +#define BUG() do { \
243 + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
244 + barrier_before_unreachable(); \
245 + ia64_abort(); \
246 +} while (0)
247
248 /* should this BUG be made generic? */
249 #define HAVE_ARCH_BUG
250 diff --git a/arch/m68k/include/asm/bug.h b/arch/m68k/include/asm/bug.h
251 index ef9a2e47352f..21ddbf925e22 100644
252 --- a/arch/m68k/include/asm/bug.h
253 +++ b/arch/m68k/include/asm/bug.h
254 @@ -7,16 +7,19 @@
255 #ifndef CONFIG_SUN3
256 #define BUG() do { \
257 printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
258 + barrier_before_unreachable(); \
259 __builtin_trap(); \
260 } while (0)
261 #else
262 #define BUG() do { \
263 printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
264 + barrier_before_unreachable(); \
265 panic("BUG!"); \
266 } while (0)
267 #endif
268 #else
269 #define BUG() do { \
270 + barrier_before_unreachable(); \
271 __builtin_trap(); \
272 } while (0)
273 #endif
274 diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
275 index bb9940c6927e..6cd230434f32 100644
276 --- a/arch/mips/Kconfig
277 +++ b/arch/mips/Kconfig
278 @@ -13,6 +13,7 @@ config MIPS
279 select HAVE_OPROFILE
280 select HAVE_PERF_EVENTS
281 select PERF_USE_VMALLOC
282 + select HAVE_ARCH_COMPILER_H
283 select HAVE_ARCH_KGDB
284 select HAVE_ARCH_SECCOMP_FILTER
285 select HAVE_ARCH_TRACEHOOK
286 diff --git a/arch/mips/include/asm/compiler.h b/arch/mips/include/asm/compiler.h
287 index e081a265f422..cc2eb1b06050 100644
288 --- a/arch/mips/include/asm/compiler.h
289 +++ b/arch/mips/include/asm/compiler.h
290 @@ -8,6 +8,41 @@
291 #ifndef _ASM_COMPILER_H
292 #define _ASM_COMPILER_H
293
294 +/*
295 + * With GCC 4.5 onwards we can use __builtin_unreachable to indicate to the
296 + * compiler that a particular code path will never be hit. This allows it to be
297 + * optimised out of the generated binary.
298 + *
299 + * Unfortunately at least GCC 4.6.3 through 7.3.0 inclusive suffer from a bug
300 + * that can lead to instructions from beyond an unreachable statement being
301 + * incorrectly reordered into earlier delay slots if the unreachable statement
302 + * is the only content of a case in a switch statement. This can lead to
303 + * seemingly random behaviour, such as invalid memory accesses from incorrectly
304 + * reordered loads or stores. See this potential GCC fix for details:
305 + *
306 + * https://gcc.gnu.org/ml/gcc-patches/2015-09/msg00360.html
307 + *
308 + * It is unclear whether GCC 8 onwards suffer from the same issue - nothing
309 + * relevant is mentioned in GCC 8 release notes and nothing obviously relevant
310 + * stands out in GCC commit logs, but these newer GCC versions generate very
311 + * different code for the testcase which doesn't exhibit the bug.
312 + *
313 + * GCC also handles stack allocation suboptimally when calling noreturn
314 + * functions or calling __builtin_unreachable():
315 + *
316 + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82365
317 + *
318 + * We work around both of these issues by placing a volatile asm statement,
319 + * which GCC is prevented from reordering past, prior to __builtin_unreachable
320 + * calls.
321 + *
322 + * The .insn statement is required to ensure that any branches to the
323 + * statement, which sadly must be kept due to the asm statement, are known to
324 + * be branches to code and satisfy linker requirements for microMIPS kernels.
325 + */
326 +#undef barrier_before_unreachable
327 +#define barrier_before_unreachable() asm volatile(".insn")
328 +
329 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
330 #define GCC_IMM_ASM() "n"
331 #define GCC_REG_ACCUM "$0"
332 diff --git a/arch/mips/include/asm/netlogic/xlr/fmn.h b/arch/mips/include/asm/netlogic/xlr/fmn.h
333 index 5604db3d1836..d79c68fa78d9 100644
334 --- a/arch/mips/include/asm/netlogic/xlr/fmn.h
335 +++ b/arch/mips/include/asm/netlogic/xlr/fmn.h
336 @@ -301,8 +301,6 @@ static inline int nlm_fmn_send(unsigned int size, unsigned int code,
337 for (i = 0; i < 8; i++) {
338 nlm_msgsnd(dest);
339 status = nlm_read_c2_status0();
340 - if ((status & 0x2) == 1)
341 - pr_info("Send pending fail!\n");
342 if ((status & 0x4) == 0)
343 return 0;
344 }
345 diff --git a/arch/mips/kernel/uprobes.c b/arch/mips/kernel/uprobes.c
346 index dbb917403131..ec951dde0999 100644
347 --- a/arch/mips/kernel/uprobes.c
348 +++ b/arch/mips/kernel/uprobes.c
349 @@ -111,9 +111,6 @@ int arch_uprobe_pre_xol(struct arch_uprobe *aup, struct pt_regs *regs)
350 */
351 aup->resume_epc = regs->cp0_epc + 4;
352 if (insn_has_delay_slot((union mips_instruction) aup->insn[0])) {
353 - unsigned long epc;
354 -
355 - epc = regs->cp0_epc;
356 __compute_return_epc_for_insn(regs,
357 (union mips_instruction) aup->insn[0]);
358 aup->resume_epc = regs->cp0_epc;
359 diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c
360 index 7f2519cfb5d2..15f788601b64 100644
361 --- a/arch/mips/math-emu/cp1emu.c
362 +++ b/arch/mips/math-emu/cp1emu.c
363 @@ -828,12 +828,12 @@ do { \
364 } while (0)
365
366 #define DIFROMREG(di, x) \
367 - ((di) = get_fpr64(&ctx->fpr[(x) & ~(cop1_64bit(xcp) == 0)], 0))
368 + ((di) = get_fpr64(&ctx->fpr[(x) & ~(cop1_64bit(xcp) ^ 1)], 0))
369
370 #define DITOREG(di, x) \
371 do { \
372 unsigned fpr, i; \
373 - fpr = (x) & ~(cop1_64bit(xcp) == 0); \
374 + fpr = (x) & ~(cop1_64bit(xcp) ^ 1); \
375 set_fpr64(&ctx->fpr[fpr], 0, di); \
376 for (i = 1; i < ARRAY_SIZE(ctx->fpr[x].val64); i++) \
377 set_fpr64(&ctx->fpr[fpr], i, 0); \
378 diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
379 index 2da5649fc545..3cc5b2e4263c 100644
380 --- a/arch/mips/mm/tlbex.c
381 +++ b/arch/mips/mm/tlbex.c
382 @@ -386,6 +386,7 @@ static struct work_registers build_get_work_registers(u32 **p)
383 static void build_restore_work_registers(u32 **p)
384 {
385 if (scratch_reg >= 0) {
386 + uasm_i_ehb(p);
387 UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
388 return;
389 }
390 @@ -674,10 +675,12 @@ static void build_restore_pagemask(u32 **p, struct uasm_reloc **r,
391 uasm_i_mtc0(p, 0, C0_PAGEMASK);
392 uasm_il_b(p, r, lid);
393 }
394 - if (scratch_reg >= 0)
395 + if (scratch_reg >= 0) {
396 + uasm_i_ehb(p);
397 UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
398 - else
399 + } else {
400 UASM_i_LW(p, 1, scratchpad_offset(0), 0);
401 + }
402 } else {
403 /* Reset default page size */
404 if (PM_DEFAULT_MASK >> 16) {
405 @@ -935,10 +938,12 @@ build_get_pgd_vmalloc64(u32 **p, struct uasm_label **l, struct uasm_reloc **r,
406 uasm_i_jr(p, ptr);
407
408 if (mode == refill_scratch) {
409 - if (scratch_reg >= 0)
410 + if (scratch_reg >= 0) {
411 + uasm_i_ehb(p);
412 UASM_i_MFC0(p, 1, c0_kscratch(), scratch_reg);
413 - else
414 + } else {
415 UASM_i_LW(p, 1, scratchpad_offset(0), 0);
416 + }
417 } else {
418 uasm_i_nop(p);
419 }
420 @@ -1238,6 +1243,7 @@ build_fast_tlb_refill_handler (u32 **p, struct uasm_label **l,
421 UASM_i_MTC0(p, odd, C0_ENTRYLO1); /* load it */
422
423 if (c0_scratch_reg >= 0) {
424 + uasm_i_ehb(p);
425 UASM_i_MFC0(p, scratch, c0_kscratch(), c0_scratch_reg);
426 build_tlb_write_entry(p, l, r, tlb_random);
427 uasm_l_leave(l, *p);
428 @@ -1592,15 +1598,17 @@ static void build_setup_pgd(void)
429 uasm_i_dinsm(&p, a0, 0, 29, 64 - 29);
430 uasm_l_tlbl_goaround1(&l, p);
431 UASM_i_SLL(&p, a0, a0, 11);
432 - uasm_i_jr(&p, 31);
433 UASM_i_MTC0(&p, a0, C0_CONTEXT);
434 + uasm_i_jr(&p, 31);
435 + uasm_i_ehb(&p);
436 } else {
437 /* PGD in c0_KScratch */
438 - uasm_i_jr(&p, 31);
439 if (cpu_has_ldpte)
440 UASM_i_MTC0(&p, a0, C0_PWBASE);
441 else
442 UASM_i_MTC0(&p, a0, c0_kscratch(), pgd_reg);
443 + uasm_i_jr(&p, 31);
444 + uasm_i_ehb(&p);
445 }
446 #else
447 #ifdef CONFIG_SMP
448 @@ -1614,13 +1622,16 @@ static void build_setup_pgd(void)
449 UASM_i_LA_mostly(&p, a2, pgdc);
450 UASM_i_SW(&p, a0, uasm_rel_lo(pgdc), a2);
451 #endif /* SMP */
452 - uasm_i_jr(&p, 31);
453
454 /* if pgd_reg is allocated, save PGD also to scratch register */
455 - if (pgd_reg != -1)
456 + if (pgd_reg != -1) {
457 UASM_i_MTC0(&p, a0, c0_kscratch(), pgd_reg);
458 - else
459 + uasm_i_jr(&p, 31);
460 + uasm_i_ehb(&p);
461 + } else {
462 + uasm_i_jr(&p, 31);
463 uasm_i_nop(&p);
464 + }
465 #endif
466 if (p >= tlbmiss_handler_setup_pgd_end)
467 panic("tlbmiss_handler_setup_pgd space exceeded");
468 diff --git a/arch/parisc/math-emu/cnv_float.h b/arch/parisc/math-emu/cnv_float.h
469 index 933423fa5144..b0db61188a61 100644
470 --- a/arch/parisc/math-emu/cnv_float.h
471 +++ b/arch/parisc/math-emu/cnv_float.h
472 @@ -60,19 +60,19 @@
473 ((exponent < (SGL_P - 1)) ? \
474 (Sall(sgl_value) << (SGL_EXP_LENGTH + 1 + exponent)) : FALSE)
475
476 -#define Int_isinexact_to_sgl(int_value) (int_value << 33 - SGL_EXP_LENGTH)
477 +#define Int_isinexact_to_sgl(int_value) ((int_value << 33 - SGL_EXP_LENGTH) != 0)
478
479 #define Sgl_roundnearest_from_int(int_value,sgl_value) \
480 if (int_value & 1<<(SGL_EXP_LENGTH - 2)) /* round bit */ \
481 - if ((int_value << 34 - SGL_EXP_LENGTH) || Slow(sgl_value)) \
482 + if (((int_value << 34 - SGL_EXP_LENGTH) != 0) || Slow(sgl_value)) \
483 Sall(sgl_value)++
484
485 #define Dint_isinexact_to_sgl(dint_valueA,dint_valueB) \
486 - ((Dintp1(dint_valueA) << 33 - SGL_EXP_LENGTH) || Dintp2(dint_valueB))
487 + (((Dintp1(dint_valueA) << 33 - SGL_EXP_LENGTH) != 0) || Dintp2(dint_valueB))
488
489 #define Sgl_roundnearest_from_dint(dint_valueA,dint_valueB,sgl_value) \
490 if (Dintp1(dint_valueA) & 1<<(SGL_EXP_LENGTH - 2)) \
491 - if ((Dintp1(dint_valueA) << 34 - SGL_EXP_LENGTH) || \
492 + if (((Dintp1(dint_valueA) << 34 - SGL_EXP_LENGTH) != 0) || \
493 Dintp2(dint_valueB) || Slow(sgl_value)) Sall(sgl_value)++
494
495 #define Dint_isinexact_to_dbl(dint_value) \
496 diff --git a/arch/powerpc/include/asm/ppc-opcode.h b/arch/powerpc/include/asm/ppc-opcode.h
497 index 48e8f1f14872..b7067590f15c 100644
498 --- a/arch/powerpc/include/asm/ppc-opcode.h
499 +++ b/arch/powerpc/include/asm/ppc-opcode.h
500 @@ -261,6 +261,7 @@
501 #define PPC_INST_MULLI 0x1c000000
502 #define PPC_INST_DIVWU 0x7c000396
503 #define PPC_INST_DIVD 0x7c0003d2
504 +#define PPC_INST_DIVDU 0x7c000392
505 #define PPC_INST_RLWINM 0x54000000
506 #define PPC_INST_RLWIMI 0x50000000
507 #define PPC_INST_RLDICL 0x78000000
508 diff --git a/arch/powerpc/net/bpf_jit.h b/arch/powerpc/net/bpf_jit.h
509 index 7b1d1721a26a..83e5b255d142 100644
510 --- a/arch/powerpc/net/bpf_jit.h
511 +++ b/arch/powerpc/net/bpf_jit.h
512 @@ -116,7 +116,7 @@
513 ___PPC_RA(a) | IMM_L(i))
514 #define PPC_DIVWU(d, a, b) EMIT(PPC_INST_DIVWU | ___PPC_RT(d) | \
515 ___PPC_RA(a) | ___PPC_RB(b))
516 -#define PPC_DIVD(d, a, b) EMIT(PPC_INST_DIVD | ___PPC_RT(d) | \
517 +#define PPC_DIVDU(d, a, b) EMIT(PPC_INST_DIVDU | ___PPC_RT(d) | \
518 ___PPC_RA(a) | ___PPC_RB(b))
519 #define PPC_AND(d, a, b) EMIT(PPC_INST_AND | ___PPC_RA(d) | \
520 ___PPC_RS(a) | ___PPC_RB(b))
521 diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c
522 index e7d78f9156ce..9f0810cfe5f3 100644
523 --- a/arch/powerpc/net/bpf_jit_comp64.c
524 +++ b/arch/powerpc/net/bpf_jit_comp64.c
525 @@ -419,12 +419,12 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
526 PPC_LI(b2p[BPF_REG_0], 0);
527 PPC_JMP(exit_addr);
528 if (BPF_OP(code) == BPF_MOD) {
529 - PPC_DIVD(b2p[TMP_REG_1], dst_reg, src_reg);
530 + PPC_DIVDU(b2p[TMP_REG_1], dst_reg, src_reg);
531 PPC_MULD(b2p[TMP_REG_1], src_reg,
532 b2p[TMP_REG_1]);
533 PPC_SUB(dst_reg, dst_reg, b2p[TMP_REG_1]);
534 } else
535 - PPC_DIVD(dst_reg, dst_reg, src_reg);
536 + PPC_DIVDU(dst_reg, dst_reg, src_reg);
537 break;
538 case BPF_ALU | BPF_MOD | BPF_K: /* (u32) dst %= (u32) imm */
539 case BPF_ALU | BPF_DIV | BPF_K: /* (u32) dst /= (u32) imm */
540 @@ -452,7 +452,7 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
541 break;
542 case BPF_ALU64:
543 if (BPF_OP(code) == BPF_MOD) {
544 - PPC_DIVD(b2p[TMP_REG_2], dst_reg,
545 + PPC_DIVDU(b2p[TMP_REG_2], dst_reg,
546 b2p[TMP_REG_1]);
547 PPC_MULD(b2p[TMP_REG_1],
548 b2p[TMP_REG_1],
549 @@ -460,7 +460,7 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
550 PPC_SUB(dst_reg, dst_reg,
551 b2p[TMP_REG_1]);
552 } else
553 - PPC_DIVD(dst_reg, dst_reg,
554 + PPC_DIVDU(dst_reg, dst_reg,
555 b2p[TMP_REG_1]);
556 break;
557 }
558 diff --git a/arch/sparc/include/asm/bug.h b/arch/sparc/include/asm/bug.h
559 index eaa8f8d38125..fa85cac0285c 100644
560 --- a/arch/sparc/include/asm/bug.h
561 +++ b/arch/sparc/include/asm/bug.h
562 @@ -8,10 +8,14 @@
563 void do_BUG(const char *file, int line);
564 #define BUG() do { \
565 do_BUG(__FILE__, __LINE__); \
566 + barrier_before_unreachable(); \
567 __builtin_trap(); \
568 } while (0)
569 #else
570 -#define BUG() __builtin_trap()
571 +#define BUG() do { \
572 + barrier_before_unreachable(); \
573 + __builtin_trap(); \
574 +} while (0)
575 #endif
576
577 #define HAVE_ARCH_BUG
578 diff --git a/arch/sparc/kernel/perf_event.c b/arch/sparc/kernel/perf_event.c
579 index 71e7f77f6776..84a80cd004eb 100644
580 --- a/arch/sparc/kernel/perf_event.c
581 +++ b/arch/sparc/kernel/perf_event.c
582 @@ -889,6 +889,10 @@ static int sparc_perf_event_set_period(struct perf_event *event,
583 s64 period = hwc->sample_period;
584 int ret = 0;
585
586 + /* The period may have been changed by PERF_EVENT_IOC_PERIOD */
587 + if (unlikely(period != hwc->last_period))
588 + left = period - (hwc->last_period - left);
589 +
590 if (unlikely(left <= -period)) {
591 left = period;
592 local64_set(&hwc->period_left, left);
593 diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
594 index 16970c39baea..07a6c1fa173b 100644
595 --- a/arch/x86/kernel/cpu/bugs.c
596 +++ b/arch/x86/kernel/cpu/bugs.c
597 @@ -828,6 +828,16 @@ static enum ssb_mitigation __init __ssb_select_mitigation(void)
598 break;
599 }
600
601 + /*
602 + * If SSBD is controlled by the SPEC_CTRL MSR, then set the proper
603 + * bit in the mask to allow guests to use the mitigation even in the
604 + * case where the host does not enable it.
605 + */
606 + if (static_cpu_has(X86_FEATURE_SPEC_CTRL_SSBD) ||
607 + static_cpu_has(X86_FEATURE_AMD_SSBD)) {
608 + x86_spec_ctrl_mask |= SPEC_CTRL_SSBD;
609 + }
610 +
611 /*
612 * We have three CPU feature flags that are in play here:
613 * - X86_BUG_SPEC_STORE_BYPASS - CPU is susceptible.
614 @@ -845,7 +855,6 @@ static enum ssb_mitigation __init __ssb_select_mitigation(void)
615 x86_amd_ssb_disable();
616 } else {
617 x86_spec_ctrl_base |= SPEC_CTRL_SSBD;
618 - x86_spec_ctrl_mask |= SPEC_CTRL_SSBD;
619 wrmsrl(MSR_IA32_SPEC_CTRL, x86_spec_ctrl_base);
620 }
621 }
622 diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
623 index c8630569e392..cf32533225bb 100644
624 --- a/arch/x86/kvm/lapic.c
625 +++ b/arch/x86/kvm/lapic.c
626 @@ -1992,7 +1992,7 @@ int kvm_apic_has_interrupt(struct kvm_vcpu *vcpu)
627 struct kvm_lapic *apic = vcpu->arch.apic;
628 int highest_irr;
629
630 - if (!apic_enabled(apic))
631 + if (!kvm_apic_hw_enabled(apic))
632 return -1;
633
634 apic_update_ppr(apic);
635 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
636 index 72efecc4288b..8b06700d1676 100644
637 --- a/arch/x86/kvm/x86.c
638 +++ b/arch/x86/kvm/x86.c
639 @@ -1365,7 +1365,7 @@ static int set_tsc_khz(struct kvm_vcpu *vcpu, u32 user_tsc_khz, bool scale)
640 vcpu->arch.tsc_always_catchup = 1;
641 return 0;
642 } else {
643 - WARN(1, "user requested TSC rate below hardware speed\n");
644 + pr_warn_ratelimited("user requested TSC rate below hardware speed\n");
645 return -1;
646 }
647 }
648 @@ -1375,8 +1375,8 @@ static int set_tsc_khz(struct kvm_vcpu *vcpu, u32 user_tsc_khz, bool scale)
649 user_tsc_khz, tsc_khz);
650
651 if (ratio == 0 || ratio >= kvm_max_tsc_scaling_ratio) {
652 - WARN_ONCE(1, "Invalid TSC scaling ratio - virtual-tsc-khz=%u\n",
653 - user_tsc_khz);
654 + pr_warn_ratelimited("Invalid TSC scaling ratio - virtual-tsc-khz=%u\n",
655 + user_tsc_khz);
656 return -1;
657 }
658
659 diff --git a/crypto/crypto_user.c b/crypto/crypto_user.c
660 index 1c5705481c69..c90a1727cd2c 100644
661 --- a/crypto/crypto_user.c
662 +++ b/crypto/crypto_user.c
663 @@ -55,6 +55,9 @@ static struct crypto_alg *crypto_alg_match(struct crypto_user_alg *p, int exact)
664 list_for_each_entry(q, &crypto_alg_list, cra_list) {
665 int match = 0;
666
667 + if (crypto_is_larval(q))
668 + continue;
669 +
670 if ((q->cra_flags ^ p->cru_type) & p->cru_mask)
671 continue;
672
673 diff --git a/drivers/clk/sunxi/clk-sun8i-bus-gates.c b/drivers/clk/sunxi/clk-sun8i-bus-gates.c
674 index 63fdb790df29..bee305bdddbe 100644
675 --- a/drivers/clk/sunxi/clk-sun8i-bus-gates.c
676 +++ b/drivers/clk/sunxi/clk-sun8i-bus-gates.c
677 @@ -78,6 +78,10 @@ static void __init sun8i_h3_bus_gates_init(struct device_node *node)
678 clk_parent = APB1;
679 else if (index >= 96 && index <= 127)
680 clk_parent = APB2;
681 + else {
682 + WARN_ON(true);
683 + continue;
684 + }
685
686 clk_reg = reg + 4 * (index / 32);
687 clk_bit = index % 32;
688 diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
689 index b9c29720aeb1..84856ac75a09 100644
690 --- a/drivers/dma/imx-sdma.c
691 +++ b/drivers/dma/imx-sdma.c
692 @@ -632,7 +632,7 @@ static int sdma_load_script(struct sdma_engine *sdma, void *buf, int size,
693 spin_lock_irqsave(&sdma->channel_0_lock, flags);
694
695 bd0->mode.command = C0_SETPM;
696 - bd0->mode.status = BD_DONE | BD_INTR | BD_WRAP | BD_EXTD;
697 + bd0->mode.status = BD_DONE | BD_WRAP | BD_EXTD;
698 bd0->mode.count = size / 2;
699 bd0->buffer_addr = buf_phys;
700 bd0->ext_buffer_addr = address;
701 @@ -909,7 +909,7 @@ static int sdma_load_context(struct sdma_channel *sdmac)
702 context->gReg[7] = sdmac->watermark_level;
703
704 bd0->mode.command = C0_SETDM;
705 - bd0->mode.status = BD_DONE | BD_INTR | BD_WRAP | BD_EXTD;
706 + bd0->mode.status = BD_DONE | BD_WRAP | BD_EXTD;
707 bd0->mode.count = sizeof(*context) / 4;
708 bd0->buffer_addr = sdma->context_phys;
709 bd0->ext_buffer_addr = 2048 + (sizeof(*context) / 4) * channel;
710 diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
711 index 28341b32067f..84dea276175b 100644
712 --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
713 +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
714 @@ -170,7 +170,8 @@ static int hdlcd_crtc_atomic_check(struct drm_crtc *crtc,
715 long rate, clk_rate = mode->clock * 1000;
716
717 rate = clk_round_rate(hdlcd->clk, clk_rate);
718 - if (rate != clk_rate) {
719 + /* 0.1% seems a close enough tolerance for the TDA19988 on Juno */
720 + if (abs(rate - clk_rate) * 1000 > clk_rate) {
721 /* clock required by mode not supported by hardware */
722 return -EINVAL;
723 }
724 diff --git a/drivers/gpu/drm/i915/intel_csr.c b/drivers/gpu/drm/i915/intel_csr.c
725 index 1ea0e1f43397..54d878cb458f 100644
726 --- a/drivers/gpu/drm/i915/intel_csr.c
727 +++ b/drivers/gpu/drm/i915/intel_csr.c
728 @@ -280,10 +280,17 @@ static uint32_t *parse_csr_fw(struct drm_i915_private *dev_priv,
729 uint32_t i;
730 uint32_t *dmc_payload;
731 uint32_t required_version;
732 + size_t fsize;
733
734 if (!fw)
735 return NULL;
736
737 + fsize = sizeof(struct intel_css_header) +
738 + sizeof(struct intel_package_header) +
739 + sizeof(struct intel_dmc_header);
740 + if (fsize > fw->size)
741 + goto error_truncated;
742 +
743 /* Extract CSS Header information*/
744 css_header = (struct intel_css_header *)fw->data;
745 if (sizeof(struct intel_css_header) !=
746 @@ -349,6 +356,9 @@ static uint32_t *parse_csr_fw(struct drm_i915_private *dev_priv,
747 return NULL;
748 }
749 readcount += dmc_offset;
750 + fsize += dmc_offset;
751 + if (fsize > fw->size)
752 + goto error_truncated;
753
754 /* Extract dmc_header information. */
755 dmc_header = (struct intel_dmc_header *)&fw->data[readcount];
756 @@ -379,6 +389,10 @@ static uint32_t *parse_csr_fw(struct drm_i915_private *dev_priv,
757
758 /* fw_size is in dwords, so multiplied by 4 to convert into bytes. */
759 nbytes = dmc_header->fw_size * 4;
760 + fsize += nbytes;
761 + if (fsize > fw->size)
762 + goto error_truncated;
763 +
764 if (nbytes > CSR_MAX_FW_SIZE) {
765 DRM_ERROR("CSR firmware too big (%u) bytes\n", nbytes);
766 return NULL;
767 @@ -392,6 +406,10 @@ static uint32_t *parse_csr_fw(struct drm_i915_private *dev_priv,
768 }
769
770 return memcpy(dmc_payload, &fw->data[readcount], nbytes);
771 +
772 +error_truncated:
773 + DRM_ERROR("Truncated DMC firmware, rejecting.\n");
774 + return NULL;
775 }
776
777 static void csr_load_work_fn(struct work_struct *work)
778 diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c
779 index 8dbba61a2708..82114fe2a42a 100644
780 --- a/drivers/gpu/drm/imx/ipuv3-crtc.c
781 +++ b/drivers/gpu/drm/imx/ipuv3-crtc.c
782 @@ -76,14 +76,14 @@ static void ipu_crtc_atomic_disable(struct drm_crtc *crtc,
783 drm_atomic_helper_disable_planes_on_crtc(old_crtc_state, false);
784 ipu_dc_disable(ipu);
785
786 + drm_crtc_vblank_off(crtc);
787 +
788 spin_lock_irq(&crtc->dev->event_lock);
789 - if (crtc->state->event) {
790 + if (crtc->state->event && !crtc->state->active) {
791 drm_crtc_send_vblank_event(crtc, crtc->state->event);
792 crtc->state->event = NULL;
793 }
794 spin_unlock_irq(&crtc->dev->event_lock);
795 -
796 - drm_crtc_vblank_off(crtc);
797 }
798
799 static void imx_drm_crtc_reset(struct drm_crtc *crtc)
800 diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c
801 index eaa5a2240c0c..bdbf358697cd 100644
802 --- a/drivers/gpu/drm/mediatek/mtk_dsi.c
803 +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c
804 @@ -720,6 +720,8 @@ static void mtk_dsi_destroy_conn_enc(struct mtk_dsi *dsi)
805 /* Skip connector cleanup if creation was delegated to the bridge */
806 if (dsi->conn.dev)
807 drm_connector_cleanup(&dsi->conn);
808 + if (dsi->panel)
809 + drm_panel_detach(dsi->panel);
810 }
811
812 static void mtk_dsi_ddp_start(struct mtk_ddp_comp *comp)
813 diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c
814 index c00bad02761a..0d75bc7b5065 100644
815 --- a/drivers/hwmon/pmbus/pmbus_core.c
816 +++ b/drivers/hwmon/pmbus/pmbus_core.c
817 @@ -1028,14 +1028,15 @@ static int pmbus_add_sensor_attrs_one(struct i2c_client *client,
818 const struct pmbus_driver_info *info,
819 const char *name,
820 int index, int page,
821 - const struct pmbus_sensor_attr *attr)
822 + const struct pmbus_sensor_attr *attr,
823 + bool paged)
824 {
825 struct pmbus_sensor *base;
826 int ret;
827
828 if (attr->label) {
829 ret = pmbus_add_label(data, name, index, attr->label,
830 - attr->paged ? page + 1 : 0);
831 + paged ? page + 1 : 0);
832 if (ret)
833 return ret;
834 }
835 @@ -1067,6 +1068,30 @@ static int pmbus_add_sensor_attrs_one(struct i2c_client *client,
836 return 0;
837 }
838
839 +static bool pmbus_sensor_is_paged(const struct pmbus_driver_info *info,
840 + const struct pmbus_sensor_attr *attr)
841 +{
842 + int p;
843 +
844 + if (attr->paged)
845 + return true;
846 +
847 + /*
848 + * Some attributes may be present on more than one page despite
849 + * not being marked with the paged attribute. If that is the case,
850 + * then treat the sensor as being paged and add the page suffix to the
851 + * attribute name.
852 + * We don't just add the paged attribute to all such attributes, in
853 + * order to maintain the un-suffixed labels in the case where the
854 + * attribute is only on page 0.
855 + */
856 + for (p = 1; p < info->pages; p++) {
857 + if (info->func[p] & attr->func)
858 + return true;
859 + }
860 + return false;
861 +}
862 +
863 static int pmbus_add_sensor_attrs(struct i2c_client *client,
864 struct pmbus_data *data,
865 const char *name,
866 @@ -1080,14 +1105,15 @@ static int pmbus_add_sensor_attrs(struct i2c_client *client,
867 index = 1;
868 for (i = 0; i < nattrs; i++) {
869 int page, pages;
870 + bool paged = pmbus_sensor_is_paged(info, attrs);
871
872 - pages = attrs->paged ? info->pages : 1;
873 + pages = paged ? info->pages : 1;
874 for (page = 0; page < pages; page++) {
875 if (!(info->func[page] & attrs->func))
876 continue;
877 ret = pmbus_add_sensor_attrs_one(client, data, info,
878 name, index, page,
879 - attrs);
880 + attrs, paged);
881 if (ret)
882 return ret;
883 index++;
884 diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c
885 index d30b3b908621..85db856047a9 100644
886 --- a/drivers/infiniband/hw/hfi1/chip.c
887 +++ b/drivers/infiniband/hw/hfi1/chip.c
888 @@ -9620,6 +9620,7 @@ void hfi1_quiet_serdes(struct hfi1_pportdata *ppd)
889
890 /* disable the port */
891 clear_rcvctrl(dd, RCV_CTRL_RCV_PORT_ENABLE_SMASK);
892 + cancel_work_sync(&ppd->freeze_work);
893 }
894
895 static inline int init_cpu_counters(struct hfi1_devdata *dd)
896 diff --git a/drivers/infiniband/hw/hfi1/sdma.c b/drivers/infiniband/hw/hfi1/sdma.c
897 index 9cbe52d21077..76e63c88a87a 100644
898 --- a/drivers/infiniband/hw/hfi1/sdma.c
899 +++ b/drivers/infiniband/hw/hfi1/sdma.c
900 @@ -410,10 +410,7 @@ static void sdma_flush(struct sdma_engine *sde)
901 sdma_flush_descq(sde);
902 spin_lock_irqsave(&sde->flushlist_lock, flags);
903 /* copy flush list */
904 - list_for_each_entry_safe(txp, txp_next, &sde->flushlist, list) {
905 - list_del_init(&txp->list);
906 - list_add_tail(&txp->list, &flushlist);
907 - }
908 + list_splice_init(&sde->flushlist, &flushlist);
909 spin_unlock_irqrestore(&sde->flushlist_lock, flags);
910 /* flush from flush list */
911 list_for_each_entry_safe(txp, txp_next, &flushlist, list)
912 @@ -2406,7 +2403,7 @@ unlock_noconn:
913 wait->tx_count++;
914 wait->count += tx->num_desc;
915 }
916 - schedule_work(&sde->flush_worker);
917 + queue_work_on(sde->cpu, system_highpri_wq, &sde->flush_worker);
918 ret = -ECOMM;
919 goto unlock;
920 nodesc:
921 @@ -2504,7 +2501,7 @@ unlock_noconn:
922 }
923 }
924 spin_unlock(&sde->flushlist_lock);
925 - schedule_work(&sde->flush_worker);
926 + queue_work_on(sde->cpu, system_highpri_wq, &sde->flush_worker);
927 ret = -ECOMM;
928 goto update_tail;
929 nodesc:
930 diff --git a/drivers/infiniband/hw/hfi1/user_sdma.c b/drivers/infiniband/hw/hfi1/user_sdma.c
931 index 4c111162d552..098296aaa225 100644
932 --- a/drivers/infiniband/hw/hfi1/user_sdma.c
933 +++ b/drivers/infiniband/hw/hfi1/user_sdma.c
934 @@ -260,7 +260,6 @@ struct user_sdma_txreq {
935 struct list_head list;
936 struct user_sdma_request *req;
937 u16 flags;
938 - unsigned busycount;
939 u64 seqnum;
940 };
941
942 @@ -323,25 +322,22 @@ static int defer_packet_queue(
943 struct hfi1_user_sdma_pkt_q *pq =
944 container_of(wait, struct hfi1_user_sdma_pkt_q, busy);
945 struct hfi1_ibdev *dev = &pq->dd->verbs_dev;
946 - struct user_sdma_txreq *tx =
947 - container_of(txreq, struct user_sdma_txreq, txreq);
948
949 - if (sdma_progress(sde, seq, txreq)) {
950 - if (tx->busycount++ < MAX_DEFER_RETRY_COUNT)
951 - goto eagain;
952 - }
953 + write_seqlock(&dev->iowait_lock);
954 + if (sdma_progress(sde, seq, txreq))
955 + goto eagain;
956 /*
957 * We are assuming that if the list is enqueued somewhere, it
958 * is to the dmawait list since that is the only place where
959 * it is supposed to be enqueued.
960 */
961 xchg(&pq->state, SDMA_PKT_Q_DEFERRED);
962 - write_seqlock(&dev->iowait_lock);
963 if (list_empty(&pq->busy.list))
964 list_add_tail(&pq->busy.list, &sde->dmawait);
965 write_sequnlock(&dev->iowait_lock);
966 return -EBUSY;
967 eagain:
968 + write_sequnlock(&dev->iowait_lock);
969 return -EAGAIN;
970 }
971
972 @@ -925,7 +921,6 @@ static int user_sdma_send_pkts(struct user_sdma_request *req, unsigned maxpkts)
973
974 tx->flags = 0;
975 tx->req = req;
976 - tx->busycount = 0;
977 INIT_LIST_HEAD(&tx->list);
978
979 if (req->seqnum == req->info.npkts - 1)
980 diff --git a/drivers/infiniband/hw/hfi1/verbs.c b/drivers/infiniband/hw/hfi1/verbs.c
981 index d9c71750e22d..15054a0cbf6d 100644
982 --- a/drivers/infiniband/hw/hfi1/verbs.c
983 +++ b/drivers/infiniband/hw/hfi1/verbs.c
984 @@ -1344,8 +1344,6 @@ static void hfi1_fill_device_attr(struct hfi1_devdata *dd)
985 rdi->dparms.props.max_cq = hfi1_max_cqs;
986 rdi->dparms.props.max_ah = hfi1_max_ahs;
987 rdi->dparms.props.max_cqe = hfi1_max_cqes;
988 - rdi->dparms.props.max_mr = rdi->lkey_table.max;
989 - rdi->dparms.props.max_fmr = rdi->lkey_table.max;
990 rdi->dparms.props.max_map_per_fmr = 32767;
991 rdi->dparms.props.max_pd = hfi1_max_pds;
992 rdi->dparms.props.max_qp_rd_atom = HFI1_MAX_RDMA_ATOMIC;
993 diff --git a/drivers/infiniband/hw/hfi1/verbs_txreq.c b/drivers/infiniband/hw/hfi1/verbs_txreq.c
994 index d8a5bad49680..837729d0be46 100644
995 --- a/drivers/infiniband/hw/hfi1/verbs_txreq.c
996 +++ b/drivers/infiniband/hw/hfi1/verbs_txreq.c
997 @@ -100,7 +100,7 @@ struct verbs_txreq *__get_txreq(struct hfi1_ibdev *dev,
998 if (ib_rvt_state_ops[qp->state] & RVT_PROCESS_RECV_OK) {
999 struct hfi1_qp_priv *priv;
1000
1001 - tx = kmem_cache_alloc(dev->verbs_txreq_cache, GFP_ATOMIC);
1002 + tx = kmem_cache_alloc(dev->verbs_txreq_cache, VERBS_TXREQ_GFP);
1003 if (tx)
1004 goto out;
1005 priv = qp->priv;
1006 diff --git a/drivers/infiniband/hw/hfi1/verbs_txreq.h b/drivers/infiniband/hw/hfi1/verbs_txreq.h
1007 index 31ded57592ee..0bd58a0772e2 100644
1008 --- a/drivers/infiniband/hw/hfi1/verbs_txreq.h
1009 +++ b/drivers/infiniband/hw/hfi1/verbs_txreq.h
1010 @@ -71,6 +71,7 @@ struct hfi1_ibdev;
1011 struct verbs_txreq *__get_txreq(struct hfi1_ibdev *dev,
1012 struct rvt_qp *qp);
1013
1014 +#define VERBS_TXREQ_GFP (GFP_ATOMIC | __GFP_NOWARN)
1015 static inline struct verbs_txreq *get_txreq(struct hfi1_ibdev *dev,
1016 struct rvt_qp *qp)
1017 __must_hold(&qp->slock)
1018 @@ -78,7 +79,7 @@ static inline struct verbs_txreq *get_txreq(struct hfi1_ibdev *dev,
1019 struct verbs_txreq *tx;
1020 struct hfi1_qp_priv *priv = qp->priv;
1021
1022 - tx = kmem_cache_alloc(dev->verbs_txreq_cache, GFP_ATOMIC);
1023 + tx = kmem_cache_alloc(dev->verbs_txreq_cache, VERBS_TXREQ_GFP);
1024 if (unlikely(!tx)) {
1025 /* call slow path to get the lock */
1026 tx = __get_txreq(dev, qp);
1027 diff --git a/drivers/infiniband/hw/qib/qib_verbs.c b/drivers/infiniband/hw/qib/qib_verbs.c
1028 index 954f15064514..d6e183775e24 100644
1029 --- a/drivers/infiniband/hw/qib/qib_verbs.c
1030 +++ b/drivers/infiniband/hw/qib/qib_verbs.c
1031 @@ -1568,8 +1568,6 @@ static void qib_fill_device_attr(struct qib_devdata *dd)
1032 rdi->dparms.props.max_cq = ib_qib_max_cqs;
1033 rdi->dparms.props.max_cqe = ib_qib_max_cqes;
1034 rdi->dparms.props.max_ah = ib_qib_max_ahs;
1035 - rdi->dparms.props.max_mr = rdi->lkey_table.max;
1036 - rdi->dparms.props.max_fmr = rdi->lkey_table.max;
1037 rdi->dparms.props.max_map_per_fmr = 32767;
1038 rdi->dparms.props.max_qp_rd_atom = QIB_MAX_RDMA_ATOMIC;
1039 rdi->dparms.props.max_qp_init_rd_atom = 255;
1040 diff --git a/drivers/infiniband/sw/rdmavt/mr.c b/drivers/infiniband/sw/rdmavt/mr.c
1041 index 49d55a0322f6..dbd4c0d268e9 100644
1042 --- a/drivers/infiniband/sw/rdmavt/mr.c
1043 +++ b/drivers/infiniband/sw/rdmavt/mr.c
1044 @@ -94,6 +94,8 @@ int rvt_driver_mr_init(struct rvt_dev_info *rdi)
1045 for (i = 0; i < rdi->lkey_table.max; i++)
1046 RCU_INIT_POINTER(rdi->lkey_table.table[i], NULL);
1047
1048 + rdi->dparms.props.max_mr = rdi->lkey_table.max;
1049 + rdi->dparms.props.max_fmr = rdi->lkey_table.max;
1050 return 0;
1051 }
1052
1053 diff --git a/drivers/infiniband/sw/rdmavt/qp.c b/drivers/infiniband/sw/rdmavt/qp.c
1054 index 6500c3b5a89c..8b330b53d636 100644
1055 --- a/drivers/infiniband/sw/rdmavt/qp.c
1056 +++ b/drivers/infiniband/sw/rdmavt/qp.c
1057 @@ -370,7 +370,8 @@ static int alloc_qpn(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt,
1058 offset = qpt->incr | ((offset & 1) ^ 1);
1059 }
1060 /* there can be no set bits in low-order QoS bits */
1061 - WARN_ON(offset & (BIT(rdi->dparms.qos_shift) - 1));
1062 + WARN_ON(rdi->dparms.qos_shift > 1 &&
1063 + offset & ((BIT(rdi->dparms.qos_shift - 1) - 1) << 1));
1064 qpn = mk_qpn(qpt, map, offset);
1065 }
1066
1067 diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
1068 index a306453d40d2..89d37d0d45ed 100644
1069 --- a/drivers/input/misc/uinput.c
1070 +++ b/drivers/input/misc/uinput.c
1071 @@ -991,13 +991,31 @@ static long uinput_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1072
1073 #ifdef CONFIG_COMPAT
1074
1075 -#define UI_SET_PHYS_COMPAT _IOW(UINPUT_IOCTL_BASE, 108, compat_uptr_t)
1076 +/*
1077 + * These IOCTLs change their size and thus their numbers between
1078 + * 32 and 64 bits.
1079 + */
1080 +#define UI_SET_PHYS_COMPAT \
1081 + _IOW(UINPUT_IOCTL_BASE, 108, compat_uptr_t)
1082 +#define UI_BEGIN_FF_UPLOAD_COMPAT \
1083 + _IOWR(UINPUT_IOCTL_BASE, 200, struct uinput_ff_upload_compat)
1084 +#define UI_END_FF_UPLOAD_COMPAT \
1085 + _IOW(UINPUT_IOCTL_BASE, 201, struct uinput_ff_upload_compat)
1086
1087 static long uinput_compat_ioctl(struct file *file,
1088 unsigned int cmd, unsigned long arg)
1089 {
1090 - if (cmd == UI_SET_PHYS_COMPAT)
1091 + switch (cmd) {
1092 + case UI_SET_PHYS_COMPAT:
1093 cmd = UI_SET_PHYS;
1094 + break;
1095 + case UI_BEGIN_FF_UPLOAD_COMPAT:
1096 + cmd = UI_BEGIN_FF_UPLOAD;
1097 + break;
1098 + case UI_END_FF_UPLOAD_COMPAT:
1099 + cmd = UI_END_FF_UPLOAD;
1100 + break;
1101 + }
1102
1103 return uinput_ioctl_handler(file, cmd, arg, compat_ptr(arg));
1104 }
1105 diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
1106 index 9d167c9af2c6..e153276ed954 100644
1107 --- a/drivers/mfd/omap-usb-tll.c
1108 +++ b/drivers/mfd/omap-usb-tll.c
1109 @@ -131,12 +131,12 @@ static inline u32 usbtll_read(void __iomem *base, u32 reg)
1110 return readl_relaxed(base + reg);
1111 }
1112
1113 -static inline void usbtll_writeb(void __iomem *base, u8 reg, u8 val)
1114 +static inline void usbtll_writeb(void __iomem *base, u32 reg, u8 val)
1115 {
1116 writeb_relaxed(val, base + reg);
1117 }
1118
1119 -static inline u8 usbtll_readb(void __iomem *base, u8 reg)
1120 +static inline u8 usbtll_readb(void __iomem *base, u32 reg)
1121 {
1122 return readb_relaxed(base + reg);
1123 }
1124 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
1125 index 93169729dfc9..fd01138c411e 100644
1126 --- a/drivers/net/bonding/bond_main.c
1127 +++ b/drivers/net/bonding/bond_main.c
1128 @@ -4241,12 +4241,12 @@ void bond_setup(struct net_device *bond_dev)
1129 bond_dev->features |= NETIF_F_NETNS_LOCAL;
1130
1131 bond_dev->hw_features = BOND_VLAN_FEATURES |
1132 - NETIF_F_HW_VLAN_CTAG_TX |
1133 NETIF_F_HW_VLAN_CTAG_RX |
1134 NETIF_F_HW_VLAN_CTAG_FILTER;
1135
1136 bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL;
1137 bond_dev->features |= bond_dev->hw_features;
1138 + bond_dev->features |= NETIF_F_HW_VLAN_CTAG_TX;
1139 }
1140
1141 /* Destroy a bonding device.
1142 diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
1143 index 47f43bdecd51..baef09b9449f 100644
1144 --- a/drivers/net/can/flexcan.c
1145 +++ b/drivers/net/can/flexcan.c
1146 @@ -171,7 +171,7 @@
1147 #define FLEXCAN_MB_CNT_LENGTH(x) (((x) & 0xf) << 16)
1148 #define FLEXCAN_MB_CNT_TIMESTAMP(x) ((x) & 0xffff)
1149
1150 -#define FLEXCAN_TIMEOUT_US (50)
1151 +#define FLEXCAN_TIMEOUT_US (250)
1152
1153 /* FLEXCAN hardware feature flags
1154 *
1155 diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
1156 index dc510069d37b..2edd193c96ab 100644
1157 --- a/drivers/net/dsa/mv88e6xxx/chip.c
1158 +++ b/drivers/net/dsa/mv88e6xxx/chip.c
1159 @@ -1742,7 +1742,7 @@ static int _mv88e6xxx_vtu_get(struct mv88e6xxx_chip *chip, u16 vid,
1160 int err;
1161
1162 if (!vid)
1163 - return -EINVAL;
1164 + return -EOPNOTSUPP;
1165
1166 err = _mv88e6xxx_vtu_vid_write(chip, vid - 1);
1167 if (err)
1168 diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
1169 index 4cd163390dcc..f38848c4f69d 100644
1170 --- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
1171 +++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
1172 @@ -367,6 +367,7 @@ static int __lb_setup(struct net_device *ndev,
1173 static int __lb_up(struct net_device *ndev,
1174 enum hnae_loop loop_mode)
1175 {
1176 +#define NIC_LB_TEST_WAIT_PHY_LINK_TIME 300
1177 struct hns_nic_priv *priv = netdev_priv(ndev);
1178 struct hnae_handle *h = priv->ae_handle;
1179 int speed, duplex;
1180 @@ -393,6 +394,9 @@ static int __lb_up(struct net_device *ndev,
1181
1182 h->dev->ops->adjust_link(h, speed, duplex);
1183
1184 + /* wait adjust link done and phy ready */
1185 + msleep(NIC_LB_TEST_WAIT_PHY_LINK_TIME);
1186 +
1187 return 0;
1188 }
1189
1190 diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
1191 index 20de37a414fe..d10c8a8156bc 100644
1192 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
1193 +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
1194 @@ -1700,6 +1700,7 @@ static void mtk_poll_controller(struct net_device *dev)
1195
1196 static int mtk_start_dma(struct mtk_eth *eth)
1197 {
1198 + u32 rx_2b_offset = (NET_IP_ALIGN == 2) ? MTK_RX_2B_OFFSET : 0;
1199 int err;
1200
1201 err = mtk_dma_init(eth);
1202 @@ -1714,7 +1715,7 @@ static int mtk_start_dma(struct mtk_eth *eth)
1203 MTK_QDMA_GLO_CFG);
1204
1205 mtk_w32(eth,
1206 - MTK_RX_DMA_EN | MTK_RX_2B_OFFSET |
1207 + MTK_RX_DMA_EN | rx_2b_offset |
1208 MTK_RX_BT_32DWORDS | MTK_MULTI_EN,
1209 MTK_PDMA_GLO_CFG);
1210
1211 @@ -2175,13 +2176,13 @@ static int mtk_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
1212
1213 switch (cmd->cmd) {
1214 case ETHTOOL_GRXRINGS:
1215 - if (dev->features & NETIF_F_LRO) {
1216 + if (dev->hw_features & NETIF_F_LRO) {
1217 cmd->data = MTK_MAX_RX_RING_NUM;
1218 ret = 0;
1219 }
1220 break;
1221 case ETHTOOL_GRXCLSRLCNT:
1222 - if (dev->features & NETIF_F_LRO) {
1223 + if (dev->hw_features & NETIF_F_LRO) {
1224 struct mtk_mac *mac = netdev_priv(dev);
1225
1226 cmd->rule_cnt = mac->hwlro_ip_cnt;
1227 @@ -2189,11 +2190,11 @@ static int mtk_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
1228 }
1229 break;
1230 case ETHTOOL_GRXCLSRULE:
1231 - if (dev->features & NETIF_F_LRO)
1232 + if (dev->hw_features & NETIF_F_LRO)
1233 ret = mtk_hwlro_get_fdir_entry(dev, cmd);
1234 break;
1235 case ETHTOOL_GRXCLSRLALL:
1236 - if (dev->features & NETIF_F_LRO)
1237 + if (dev->hw_features & NETIF_F_LRO)
1238 ret = mtk_hwlro_get_fdir_all(dev, cmd,
1239 rule_locs);
1240 break;
1241 @@ -2210,11 +2211,11 @@ static int mtk_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
1242
1243 switch (cmd->cmd) {
1244 case ETHTOOL_SRXCLSRLINS:
1245 - if (dev->features & NETIF_F_LRO)
1246 + if (dev->hw_features & NETIF_F_LRO)
1247 ret = mtk_hwlro_add_ipaddr(dev, cmd);
1248 break;
1249 case ETHTOOL_SRXCLSRLDEL:
1250 - if (dev->features & NETIF_F_LRO)
1251 + if (dev->hw_features & NETIF_F_LRO)
1252 ret = mtk_hwlro_del_ipaddr(dev, cmd);
1253 break;
1254 default:
1255 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
1256 index f4074e25fb71..25136941a964 100644
1257 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
1258 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_hwtstamp.c
1259 @@ -125,7 +125,7 @@ static int stmmac_adjust_systime(void __iomem *ioaddr, u32 sec, u32 nsec,
1260 * programmed with (2^32 – <new_sec_value>)
1261 */
1262 if (gmac4)
1263 - sec = (100000000ULL - sec);
1264 + sec = -sec;
1265
1266 value = readl(ioaddr + PTP_TCR);
1267 if (value & PTP_TCR_TSCTRLSSR)
1268 diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
1269 index 3eb6d48c3148..0acdf73aa1b0 100644
1270 --- a/drivers/net/team/team.c
1271 +++ b/drivers/net/team/team.c
1272 @@ -2136,12 +2136,12 @@ static void team_setup(struct net_device *dev)
1273 dev->features |= NETIF_F_NETNS_LOCAL;
1274
1275 dev->hw_features = TEAM_VLAN_FEATURES |
1276 - NETIF_F_HW_VLAN_CTAG_TX |
1277 NETIF_F_HW_VLAN_CTAG_RX |
1278 NETIF_F_HW_VLAN_CTAG_FILTER;
1279
1280 dev->hw_features |= NETIF_F_GSO_ENCAP_ALL;
1281 dev->features |= dev->hw_features;
1282 + dev->features |= NETIF_F_HW_VLAN_CTAG_TX;
1283 }
1284
1285 static int team_newlink(struct net *src_net, struct net_device *dev,
1286 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
1287 index 88fe38d6a7ef..36136a147867 100644
1288 --- a/drivers/net/tun.c
1289 +++ b/drivers/net/tun.c
1290 @@ -828,18 +828,8 @@ static void tun_net_uninit(struct net_device *dev)
1291 /* Net device open. */
1292 static int tun_net_open(struct net_device *dev)
1293 {
1294 - struct tun_struct *tun = netdev_priv(dev);
1295 - int i;
1296 -
1297 netif_tx_start_all_queues(dev);
1298
1299 - for (i = 0; i < tun->numqueues; i++) {
1300 - struct tun_file *tfile;
1301 -
1302 - tfile = rtnl_dereference(tun->tfiles[i]);
1303 - tfile->socket.sk->sk_write_space(tfile->socket.sk);
1304 - }
1305 -
1306 return 0;
1307 }
1308
1309 @@ -2534,6 +2524,7 @@ static int tun_device_event(struct notifier_block *unused,
1310 {
1311 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1312 struct tun_struct *tun = netdev_priv(dev);
1313 + int i;
1314
1315 if (dev->rtnl_link_ops != &tun_link_ops)
1316 return NOTIFY_DONE;
1317 @@ -2543,6 +2534,14 @@ static int tun_device_event(struct notifier_block *unused,
1318 if (tun_queue_resize(tun))
1319 return NOTIFY_BAD;
1320 break;
1321 + case NETDEV_UP:
1322 + for (i = 0; i < tun->numqueues; i++) {
1323 + struct tun_file *tfile;
1324 +
1325 + tfile = rtnl_dereference(tun->tfiles[i]);
1326 + tfile->socket.sk->sk_write_space(tfile->socket.sk);
1327 + }
1328 + break;
1329 default:
1330 break;
1331 }
1332 diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
1333 index 979c6ecc6446..8705bfe7bb73 100644
1334 --- a/drivers/nvme/host/core.c
1335 +++ b/drivers/nvme/host/core.c
1336 @@ -1765,7 +1765,8 @@ static int nvme_scan_ns_list(struct nvme_ctrl *ctrl, unsigned nn)
1337 {
1338 struct nvme_ns *ns;
1339 __le32 *ns_list;
1340 - unsigned i, j, nsid, prev = 0, num_lists = DIV_ROUND_UP(nn, 1024);
1341 + unsigned i, j, nsid, prev = 0;
1342 + unsigned num_lists = DIV_ROUND_UP_ULL((u64)nn, 1024);
1343 int ret = 0;
1344
1345 ns_list = kzalloc(0x1000, GFP_KERNEL);
1346 diff --git a/drivers/parport/share.c b/drivers/parport/share.c
1347 index 4399de34054a..daa2eb3050df 100644
1348 --- a/drivers/parport/share.c
1349 +++ b/drivers/parport/share.c
1350 @@ -895,6 +895,7 @@ parport_register_dev_model(struct parport *port, const char *name,
1351 par_dev->devmodel = true;
1352 ret = device_register(&par_dev->dev);
1353 if (ret) {
1354 + kfree(par_dev->state);
1355 put_device(&par_dev->dev);
1356 goto err_put_port;
1357 }
1358 @@ -912,6 +913,7 @@ parport_register_dev_model(struct parport *port, const char *name,
1359 spin_unlock(&port->physport->pardevice_lock);
1360 pr_debug("%s: cannot grant exclusive access for device %s\n",
1361 port->name, name);
1362 + kfree(par_dev->state);
1363 device_unregister(&par_dev->dev);
1364 goto err_put_port;
1365 }
1366 diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
1367 index 58404e69aa4b..6ba4e921d2fd 100644
1368 --- a/drivers/s390/net/qeth_l2_main.c
1369 +++ b/drivers/s390/net/qeth_l2_main.c
1370 @@ -2124,7 +2124,7 @@ static void qeth_bridgeport_an_set_cb(void *priv,
1371
1372 l2entry = (struct qdio_brinfo_entry_l2 *)entry;
1373 code = IPA_ADDR_CHANGE_CODE_MACADDR;
1374 - if (l2entry->addr_lnid.lnid)
1375 + if (l2entry->addr_lnid.lnid < VLAN_N_VID)
1376 code |= IPA_ADDR_CHANGE_CODE_VLANID;
1377 qeth_bridge_emit_host_event(card, anev_reg_unreg, code,
1378 (struct net_if_token *)&l2entry->nit,
1379 diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
1380 index 0b8db8a74d50..9f98c7211ec2 100644
1381 --- a/drivers/scsi/hpsa.c
1382 +++ b/drivers/scsi/hpsa.c
1383 @@ -4815,7 +4815,7 @@ static int hpsa_scsi_ioaccel2_queue_command(struct ctlr_info *h,
1384 curr_sg->reserved[0] = 0;
1385 curr_sg->reserved[1] = 0;
1386 curr_sg->reserved[2] = 0;
1387 - curr_sg->chain_indicator = 0x80;
1388 + curr_sg->chain_indicator = IOACCEL2_CHAIN;
1389
1390 curr_sg = h->ioaccel2_cmd_sg_list[c->cmdindex];
1391 }
1392 @@ -4832,6 +4832,11 @@ static int hpsa_scsi_ioaccel2_queue_command(struct ctlr_info *h,
1393 curr_sg++;
1394 }
1395
1396 + /*
1397 + * Set the last s/g element bit
1398 + */
1399 + (curr_sg - 1)->chain_indicator = IOACCEL2_LAST_SG;
1400 +
1401 switch (cmd->sc_data_direction) {
1402 case DMA_TO_DEVICE:
1403 cp->direction &= ~IOACCEL2_DIRECTION_MASK;
1404 diff --git a/drivers/scsi/hpsa_cmd.h b/drivers/scsi/hpsa_cmd.h
1405 index 5961705eef76..39bcbec93c60 100644
1406 --- a/drivers/scsi/hpsa_cmd.h
1407 +++ b/drivers/scsi/hpsa_cmd.h
1408 @@ -516,6 +516,7 @@ struct ioaccel2_sg_element {
1409 u8 reserved[3];
1410 u8 chain_indicator;
1411 #define IOACCEL2_CHAIN 0x80
1412 +#define IOACCEL2_LAST_SG 0x40
1413 };
1414
1415 /*
1416 diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c
1417 index a72a4ba78125..b47decc1fb5b 100644
1418 --- a/drivers/scsi/ufs/ufshcd-pltfrm.c
1419 +++ b/drivers/scsi/ufs/ufshcd-pltfrm.c
1420 @@ -342,24 +342,21 @@ int ufshcd_pltfrm_init(struct platform_device *pdev,
1421 goto dealloc_host;
1422 }
1423
1424 - pm_runtime_set_active(&pdev->dev);
1425 - pm_runtime_enable(&pdev->dev);
1426 -
1427 ufshcd_init_lanes_per_dir(hba);
1428
1429 err = ufshcd_init(hba, mmio_base, irq);
1430 if (err) {
1431 dev_err(dev, "Initialization failed\n");
1432 - goto out_disable_rpm;
1433 + goto dealloc_host;
1434 }
1435
1436 platform_set_drvdata(pdev, hba);
1437
1438 + pm_runtime_set_active(&pdev->dev);
1439 + pm_runtime_enable(&pdev->dev);
1440 +
1441 return 0;
1442
1443 -out_disable_rpm:
1444 - pm_runtime_disable(&pdev->dev);
1445 - pm_runtime_set_suspended(&pdev->dev);
1446 dealloc_host:
1447 ufshcd_dealloc_host(hba);
1448 out:
1449 diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
1450 index 0fe4f8e8c8c9..a9c172692f21 100644
1451 --- a/drivers/scsi/ufs/ufshcd.c
1452 +++ b/drivers/scsi/ufs/ufshcd.c
1453 @@ -941,7 +941,8 @@ int ufshcd_copy_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
1454 memcpy(&query_res->upiu_res, &lrbp->ucd_rsp_ptr->qr, QUERY_OSF_SIZE);
1455
1456 /* Get the descriptor */
1457 - if (lrbp->ucd_rsp_ptr->qr.opcode == UPIU_QUERY_OPCODE_READ_DESC) {
1458 + if (hba->dev_cmd.query.descriptor &&
1459 + lrbp->ucd_rsp_ptr->qr.opcode == UPIU_QUERY_OPCODE_READ_DESC) {
1460 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr +
1461 GENERAL_UPIU_REQUEST_SIZE;
1462 u16 resp_len;
1463 diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c
1464 index fcfbe2dcd025..df6fabcce4f7 100644
1465 --- a/drivers/scsi/vmw_pvscsi.c
1466 +++ b/drivers/scsi/vmw_pvscsi.c
1467 @@ -766,6 +766,7 @@ static int pvscsi_queue_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd
1468 struct pvscsi_adapter *adapter = shost_priv(host);
1469 struct pvscsi_ctx *ctx;
1470 unsigned long flags;
1471 + unsigned char op;
1472
1473 spin_lock_irqsave(&adapter->hw_lock, flags);
1474
1475 @@ -778,13 +779,14 @@ static int pvscsi_queue_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd
1476 }
1477
1478 cmd->scsi_done = done;
1479 + op = cmd->cmnd[0];
1480
1481 dev_dbg(&cmd->device->sdev_gendev,
1482 - "queued cmd %p, ctx %p, op=%x\n", cmd, ctx, cmd->cmnd[0]);
1483 + "queued cmd %p, ctx %p, op=%x\n", cmd, ctx, op);
1484
1485 spin_unlock_irqrestore(&adapter->hw_lock, flags);
1486
1487 - pvscsi_kick_io(adapter, cmd->cmnd[0]);
1488 + pvscsi_kick_io(adapter, op);
1489
1490 return 0;
1491 }
1492 diff --git a/drivers/spi/spi-bitbang.c b/drivers/spi/spi-bitbang.c
1493 index 3aa9e6e3dac8..4ef54436b9d4 100644
1494 --- a/drivers/spi/spi-bitbang.c
1495 +++ b/drivers/spi/spi-bitbang.c
1496 @@ -392,7 +392,7 @@ int spi_bitbang_start(struct spi_bitbang *bitbang)
1497 if (ret)
1498 spi_master_put(master);
1499
1500 - return 0;
1501 + return ret;
1502 }
1503 EXPORT_SYMBOL_GPL(spi_bitbang_start);
1504
1505 diff --git a/drivers/tty/rocket.c b/drivers/tty/rocket.c
1506 index e8e8973939d3..447d791bde22 100644
1507 --- a/drivers/tty/rocket.c
1508 +++ b/drivers/tty/rocket.c
1509 @@ -279,7 +279,7 @@ MODULE_PARM_DESC(pc104_3, "set interface types for ISA(PC104) board #3 (e.g. pc1
1510 module_param_array(pc104_4, ulong, NULL, 0);
1511 MODULE_PARM_DESC(pc104_4, "set interface types for ISA(PC104) board #4 (e.g. pc104_4=232,232,485,485,...");
1512
1513 -static int rp_init(void);
1514 +static int __init rp_init(void);
1515 static void rp_cleanup_module(void);
1516
1517 module_init(rp_init);
1518 diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
1519 index 6a15b7250e9c..0f9859478649 100644
1520 --- a/drivers/usb/chipidea/udc.c
1521 +++ b/drivers/usb/chipidea/udc.c
1522 @@ -1621,6 +1621,25 @@ static int ci_udc_pullup(struct usb_gadget *_gadget, int is_on)
1523 static int ci_udc_start(struct usb_gadget *gadget,
1524 struct usb_gadget_driver *driver);
1525 static int ci_udc_stop(struct usb_gadget *gadget);
1526 +
1527 +/* Match ISOC IN from the highest endpoint */
1528 +static struct usb_ep *ci_udc_match_ep(struct usb_gadget *gadget,
1529 + struct usb_endpoint_descriptor *desc,
1530 + struct usb_ss_ep_comp_descriptor *comp_desc)
1531 +{
1532 + struct ci_hdrc *ci = container_of(gadget, struct ci_hdrc, gadget);
1533 + struct usb_ep *ep;
1534 +
1535 + if (usb_endpoint_xfer_isoc(desc) && usb_endpoint_dir_in(desc)) {
1536 + list_for_each_entry_reverse(ep, &ci->gadget.ep_list, ep_list) {
1537 + if (ep->caps.dir_in && !ep->claimed)
1538 + return ep;
1539 + }
1540 + }
1541 +
1542 + return NULL;
1543 +}
1544 +
1545 /**
1546 * Device operations part of the API to the USB controller hardware,
1547 * which don't involve endpoints (or i/o)
1548 @@ -1634,6 +1653,7 @@ static const struct usb_gadget_ops usb_gadget_ops = {
1549 .vbus_draw = ci_udc_vbus_draw,
1550 .udc_start = ci_udc_start,
1551 .udc_stop = ci_udc_stop,
1552 + .match_ep = ci_udc_match_ep,
1553 };
1554
1555 static int init_eps(struct ci_hdrc *ci)
1556 diff --git a/drivers/usb/gadget/udc/fusb300_udc.c b/drivers/usb/gadget/udc/fusb300_udc.c
1557 index 948845c90e47..351012c498c5 100644
1558 --- a/drivers/usb/gadget/udc/fusb300_udc.c
1559 +++ b/drivers/usb/gadget/udc/fusb300_udc.c
1560 @@ -1345,12 +1345,15 @@ static const struct usb_gadget_ops fusb300_gadget_ops = {
1561 static int fusb300_remove(struct platform_device *pdev)
1562 {
1563 struct fusb300 *fusb300 = platform_get_drvdata(pdev);
1564 + int i;
1565
1566 usb_del_gadget_udc(&fusb300->gadget);
1567 iounmap(fusb300->reg);
1568 free_irq(platform_get_irq(pdev, 0), fusb300);
1569
1570 fusb300_free_request(&fusb300->ep[0]->ep, fusb300->ep0_req);
1571 + for (i = 0; i < FUSB300_MAX_NUM_EP; i++)
1572 + kfree(fusb300->ep[i]);
1573 kfree(fusb300);
1574
1575 return 0;
1576 @@ -1494,6 +1497,8 @@ clean_up:
1577 if (fusb300->ep0_req)
1578 fusb300_free_request(&fusb300->ep[0]->ep,
1579 fusb300->ep0_req);
1580 + for (i = 0; i < FUSB300_MAX_NUM_EP; i++)
1581 + kfree(fusb300->ep[i]);
1582 kfree(fusb300);
1583 }
1584 if (reg)
1585 diff --git a/drivers/usb/gadget/udc/lpc32xx_udc.c b/drivers/usb/gadget/udc/lpc32xx_udc.c
1586 index 8f32b5ee7734..6df1aded4503 100644
1587 --- a/drivers/usb/gadget/udc/lpc32xx_udc.c
1588 +++ b/drivers/usb/gadget/udc/lpc32xx_udc.c
1589 @@ -935,8 +935,7 @@ static struct lpc32xx_usbd_dd_gad *udc_dd_alloc(struct lpc32xx_udc *udc)
1590 dma_addr_t dma;
1591 struct lpc32xx_usbd_dd_gad *dd;
1592
1593 - dd = (struct lpc32xx_usbd_dd_gad *) dma_pool_alloc(
1594 - udc->dd_cache, (GFP_KERNEL | GFP_DMA), &dma);
1595 + dd = dma_pool_alloc(udc->dd_cache, GFP_ATOMIC | GFP_DMA, &dma);
1596 if (dd)
1597 dd->this_dma = dma;
1598
1599 diff --git a/fs/9p/acl.c b/fs/9p/acl.c
1600 index 082d227fa56b..6261719f6f2a 100644
1601 --- a/fs/9p/acl.c
1602 +++ b/fs/9p/acl.c
1603 @@ -276,7 +276,7 @@ static int v9fs_xattr_set_acl(const struct xattr_handler *handler,
1604 switch (handler->flags) {
1605 case ACL_TYPE_ACCESS:
1606 if (acl) {
1607 - struct iattr iattr;
1608 + struct iattr iattr = { 0 };
1609 struct posix_acl *old_acl = acl;
1610
1611 retval = posix_acl_update_mode(inode, &iattr.ia_mode, &acl);
1612 diff --git a/fs/binfmt_flat.c b/fs/binfmt_flat.c
1613 index 9b2917a30294..b18543b36ae1 100644
1614 --- a/fs/binfmt_flat.c
1615 +++ b/fs/binfmt_flat.c
1616 @@ -859,9 +859,14 @@ err:
1617
1618 static int load_flat_shared_library(int id, struct lib_info *libs)
1619 {
1620 + /*
1621 + * This is a fake bprm struct; only the members "buf", "file" and
1622 + * "filename" are actually used.
1623 + */
1624 struct linux_binprm bprm;
1625 int res;
1626 char buf[16];
1627 + loff_t pos = 0;
1628
1629 memset(&bprm, 0, sizeof(bprm));
1630
1631 @@ -875,25 +880,11 @@ static int load_flat_shared_library(int id, struct lib_info *libs)
1632 if (IS_ERR(bprm.file))
1633 return res;
1634
1635 - bprm.cred = prepare_exec_creds();
1636 - res = -ENOMEM;
1637 - if (!bprm.cred)
1638 - goto out;
1639 -
1640 - /* We don't really care about recalculating credentials at this point
1641 - * as we're past the point of no return and are dealing with shared
1642 - * libraries.
1643 - */
1644 - bprm.cred_prepared = 1;
1645 + res = kernel_read(bprm.file, pos, bprm.buf, BINPRM_BUF_SIZE);
1646
1647 - res = prepare_binprm(&bprm);
1648 -
1649 - if (!res)
1650 + if (res >= 0)
1651 res = load_flat_file(&bprm, libs, id, NULL);
1652
1653 - abort_creds(bprm.cred);
1654 -
1655 -out:
1656 allow_write_access(bprm.file);
1657 fput(bprm.file);
1658
1659 diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
1660 index fb973cc0af66..395b07764269 100644
1661 --- a/fs/btrfs/dev-replace.c
1662 +++ b/fs/btrfs/dev-replace.c
1663 @@ -511,18 +511,27 @@ static int btrfs_dev_replace_finishing(struct btrfs_fs_info *fs_info,
1664 }
1665 btrfs_wait_ordered_roots(root->fs_info, -1, 0, (u64)-1);
1666
1667 - trans = btrfs_start_transaction(root, 0);
1668 - if (IS_ERR(trans)) {
1669 - mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
1670 - return PTR_ERR(trans);
1671 + while (1) {
1672 + trans = btrfs_start_transaction(root, 0);
1673 + if (IS_ERR(trans)) {
1674 + mutex_unlock(&dev_replace->lock_finishing_cancel_unmount);
1675 + return PTR_ERR(trans);
1676 + }
1677 + ret = btrfs_commit_transaction(trans, root);
1678 + WARN_ON(ret);
1679 + mutex_lock(&uuid_mutex);
1680 + /* keep away write_all_supers() during the finishing procedure */
1681 + mutex_lock(&root->fs_info->fs_devices->device_list_mutex);
1682 + mutex_lock(&root->fs_info->chunk_mutex);
1683 + if (src_device->has_pending_chunks) {
1684 + mutex_unlock(&root->fs_info->chunk_mutex);
1685 + mutex_unlock(&root->fs_info->fs_devices->device_list_mutex);
1686 + mutex_unlock(&uuid_mutex);
1687 + } else {
1688 + break;
1689 + }
1690 }
1691 - ret = btrfs_commit_transaction(trans, root);
1692 - WARN_ON(ret);
1693
1694 - mutex_lock(&uuid_mutex);
1695 - /* keep away write_all_supers() during the finishing procedure */
1696 - mutex_lock(&root->fs_info->fs_devices->device_list_mutex);
1697 - mutex_lock(&root->fs_info->chunk_mutex);
1698 btrfs_dev_replace_lock(dev_replace, 1);
1699 dev_replace->replace_state =
1700 scrub_ret ? BTRFS_IOCTL_DEV_REPLACE_STATE_CANCELED
1701 diff --git a/fs/btrfs/reada.c b/fs/btrfs/reada.c
1702 index 75bab76739be..94441fdb1ecf 100644
1703 --- a/fs/btrfs/reada.c
1704 +++ b/fs/btrfs/reada.c
1705 @@ -759,6 +759,7 @@ static void __reada_start_machine(struct btrfs_fs_info *fs_info)
1706 u64 total = 0;
1707 int i;
1708
1709 +again:
1710 do {
1711 enqueued = 0;
1712 mutex_lock(&fs_devices->device_list_mutex);
1713 @@ -771,6 +772,10 @@ static void __reada_start_machine(struct btrfs_fs_info *fs_info)
1714 mutex_unlock(&fs_devices->device_list_mutex);
1715 total += enqueued;
1716 } while (enqueued && total < 10000);
1717 + if (fs_devices->seed) {
1718 + fs_devices = fs_devices->seed;
1719 + goto again;
1720 + }
1721
1722 if (enqueued == 0)
1723 return;
1724 diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
1725 index c063ac57c30e..94b61afe996c 100644
1726 --- a/fs/btrfs/volumes.c
1727 +++ b/fs/btrfs/volumes.c
1728 @@ -4876,6 +4876,7 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
1729 for (i = 0; i < map->num_stripes; i++) {
1730 num_bytes = map->stripes[i].dev->bytes_used + stripe_size;
1731 btrfs_device_set_bytes_used(map->stripes[i].dev, num_bytes);
1732 + map->stripes[i].dev->has_pending_chunks = true;
1733 }
1734
1735 spin_lock(&extent_root->fs_info->free_chunk_lock);
1736 @@ -7250,6 +7251,7 @@ void btrfs_update_commit_device_bytes_used(struct btrfs_root *root,
1737 for (i = 0; i < map->num_stripes; i++) {
1738 dev = map->stripes[i].dev;
1739 dev->commit_bytes_used = dev->bytes_used;
1740 + dev->has_pending_chunks = false;
1741 }
1742 }
1743 unlock_chunks(root);
1744 diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h
1745 index 9c09aa29d6bd..663d66828cca 100644
1746 --- a/fs/btrfs/volumes.h
1747 +++ b/fs/btrfs/volumes.h
1748 @@ -62,6 +62,11 @@ struct btrfs_device {
1749
1750 spinlock_t io_lock ____cacheline_aligned;
1751 int running_pending;
1752 + /* When true means this device has pending chunk alloc in
1753 + * current transaction. Protected by chunk_mutex.
1754 + */
1755 + bool has_pending_chunks;
1756 +
1757 /* regular prio bios */
1758 struct btrfs_pending_bios pending_bios;
1759 /* WRITE_SYNC bios */
1760 diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
1761 index 90099896b838..c8863563c635 100644
1762 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
1763 +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
1764 @@ -17,7 +17,7 @@
1765
1766 #define NFSDBG_FACILITY NFSDBG_PNFS_LD
1767
1768 -static unsigned int dataserver_timeo = NFS_DEF_TCP_RETRANS;
1769 +static unsigned int dataserver_timeo = NFS_DEF_TCP_TIMEO;
1770 static unsigned int dataserver_retrans;
1771
1772 void nfs4_ff_layout_put_deviceid(struct nfs4_ff_layout_ds *mirror_ds)
1773 diff --git a/fs/proc/array.c b/fs/proc/array.c
1774 index 712b44c63701..9682bbf325d6 100644
1775 --- a/fs/proc/array.c
1776 +++ b/fs/proc/array.c
1777 @@ -448,7 +448,7 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
1778 * a program is not able to use ptrace(2) in that case. It is
1779 * safe because the task has stopped executing permanently.
1780 */
1781 - if (permitted && (task->flags & PF_DUMPCORE)) {
1782 + if (permitted && (task->flags & (PF_EXITING|PF_DUMPCORE))) {
1783 if (try_get_task_stack(task)) {
1784 eip = KSTK_EIP(task);
1785 esp = KSTK_ESP(task);
1786 diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
1787 index 6f96247226a4..89f079d6b41b 100644
1788 --- a/include/asm-generic/bug.h
1789 +++ b/include/asm-generic/bug.h
1790 @@ -47,6 +47,7 @@ struct bug_entry {
1791 #ifndef HAVE_ARCH_BUG
1792 #define BUG() do { \
1793 printk("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
1794 + barrier_before_unreachable(); \
1795 panic("BUG!"); \
1796 } while (0)
1797 #endif
1798 diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
1799 index 8e9b0cb8db41..61650c1830d4 100644
1800 --- a/include/linux/compiler-gcc.h
1801 +++ b/include/linux/compiler-gcc.h
1802 @@ -233,6 +233,15 @@
1803 #define annotate_unreachable()
1804 #endif
1805
1806 +/*
1807 + * calling noreturn functions, __builtin_unreachable() and __builtin_trap()
1808 + * confuse the stack allocation in gcc, leading to overly large stack
1809 + * frames, see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82365
1810 + *
1811 + * Adding an empty inline assembly before it works around the problem
1812 + */
1813 +#define barrier_before_unreachable() asm volatile("")
1814 +
1815 /*
1816 * Mark a position in code as unreachable. This can be used to
1817 * suppress control flow warnings after asm blocks that transfer
1818 @@ -243,7 +252,11 @@
1819 * unreleased. Really, we need to have autoconf for the kernel.
1820 */
1821 #define unreachable() \
1822 - do { annotate_unreachable(); __builtin_unreachable(); } while (0)
1823 + do { \
1824 + annotate_unreachable(); \
1825 + barrier_before_unreachable(); \
1826 + __builtin_unreachable(); \
1827 + } while (0)
1828
1829 /* Mark a function definition as prohibited from being cloned. */
1830 #define __noclone __attribute__((__noclone__, __optimize__("no-tracer")))
1831 diff --git a/include/linux/compiler.h b/include/linux/compiler.h
1832 index 4f3dfabb680f..80a5bc623c47 100644
1833 --- a/include/linux/compiler.h
1834 +++ b/include/linux/compiler.h
1835 @@ -177,6 +177,11 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect);
1836 # define barrier_data(ptr) barrier()
1837 #endif
1838
1839 +/* workaround for GCC PR82365 if needed */
1840 +#ifndef barrier_before_unreachable
1841 +# define barrier_before_unreachable() do { } while (0)
1842 +#endif
1843 +
1844 /* Unreachable code */
1845 #ifndef unreachable
1846 # define unreachable() do { } while (1)
1847 diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
1848 index 4931787193c3..57a7dba49d29 100644
1849 --- a/include/net/bluetooth/hci_core.h
1850 +++ b/include/net/bluetooth/hci_core.h
1851 @@ -176,6 +176,9 @@ struct adv_info {
1852
1853 #define HCI_MAX_SHORT_NAME_LENGTH 10
1854
1855 +/* Min encryption key size to match with SMP */
1856 +#define HCI_MIN_ENC_KEY_SIZE 7
1857 +
1858 /* Default LE RPA expiry time, 15 minutes */
1859 #define HCI_DEFAULT_RPA_TIMEOUT (15 * 60)
1860
1861 diff --git a/kernel/cpu.c b/kernel/cpu.c
1862 index be8cc6c9c87d..c947bb35b89f 100644
1863 --- a/kernel/cpu.c
1864 +++ b/kernel/cpu.c
1865 @@ -2245,6 +2245,9 @@ static int __init mitigations_parse_cmdline(char *arg)
1866 cpu_mitigations = CPU_MITIGATIONS_AUTO;
1867 else if (!strcmp(arg, "auto,nosmt"))
1868 cpu_mitigations = CPU_MITIGATIONS_AUTO_NOSMT;
1869 + else
1870 + pr_crit("Unsupported mitigations=%s, system may still be vulnerable\n",
1871 + arg);
1872
1873 return 0;
1874 }
1875 diff --git a/kernel/ptrace.c b/kernel/ptrace.c
1876 index f447f1e36185..ea3370e205fb 100644
1877 --- a/kernel/ptrace.c
1878 +++ b/kernel/ptrace.c
1879 @@ -74,9 +74,7 @@ void __ptrace_link(struct task_struct *child, struct task_struct *new_parent,
1880 */
1881 static void ptrace_link(struct task_struct *child, struct task_struct *new_parent)
1882 {
1883 - rcu_read_lock();
1884 - __ptrace_link(child, new_parent, __task_cred(new_parent));
1885 - rcu_read_unlock();
1886 + __ptrace_link(child, new_parent, current_cred());
1887 }
1888
1889 /**
1890 diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
1891 index fc59dd11090d..ea8a2760de24 100644
1892 --- a/kernel/trace/trace.c
1893 +++ b/kernel/trace/trace.c
1894 @@ -7613,12 +7613,8 @@ void ftrace_dump(enum ftrace_dump_mode oops_dump_mode)
1895
1896 cnt++;
1897
1898 - /* reset all but tr, trace, and overruns */
1899 - memset(&iter.seq, 0,
1900 - sizeof(struct trace_iterator) -
1901 - offsetof(struct trace_iterator, seq));
1902 + trace_iterator_reset(&iter);
1903 iter.iter_flags |= TRACE_FILE_LAT_FMT;
1904 - iter.pos = -1;
1905
1906 if (trace_find_next_entry_inc(&iter) != NULL) {
1907 int ret;
1908 diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
1909 index b0d8576c27ae..476c6c4204da 100644
1910 --- a/kernel/trace/trace.h
1911 +++ b/kernel/trace/trace.h
1912 @@ -1673,4 +1673,22 @@ static inline void trace_event_enum_update(struct trace_enum_map **map, int len)
1913
1914 extern struct trace_iterator *tracepoint_print_iter;
1915
1916 +/*
1917 + * Reset the state of the trace_iterator so that it can read consumed data.
1918 + * Normally, the trace_iterator is used for reading the data when it is not
1919 + * consumed, and must retain state.
1920 + */
1921 +static __always_inline void trace_iterator_reset(struct trace_iterator *iter)
1922 +{
1923 + const size_t offset = offsetof(struct trace_iterator, seq);
1924 +
1925 + /*
1926 + * Keep gcc from complaining about overwriting more than just one
1927 + * member in the structure.
1928 + */
1929 + memset((char *)iter + offset, 0, sizeof(struct trace_iterator) - offset);
1930 +
1931 + iter->pos = -1;
1932 +}
1933 +
1934 #endif /* _LINUX_KERNEL_TRACE_H */
1935 diff --git a/kernel/trace/trace_kdb.c b/kernel/trace/trace_kdb.c
1936 index 896458285fdd..cf6337dc41f4 100644
1937 --- a/kernel/trace/trace_kdb.c
1938 +++ b/kernel/trace/trace_kdb.c
1939 @@ -40,12 +40,8 @@ static void ftrace_dump_buf(int skip_lines, long cpu_file)
1940
1941 kdb_printf("Dumping ftrace buffer:\n");
1942
1943 - /* reset all but tr, trace, and overruns */
1944 - memset(&iter.seq, 0,
1945 - sizeof(struct trace_iterator) -
1946 - offsetof(struct trace_iterator, seq));
1947 + trace_iterator_reset(&iter);
1948 iter.iter_flags |= TRACE_FILE_LAT_FMT;
1949 - iter.pos = -1;
1950
1951 if (cpu_file == RING_BUFFER_ALL_CPUS) {
1952 for_each_tracing_cpu(cpu) {
1953 diff --git a/lib/mpi/mpi-pow.c b/lib/mpi/mpi-pow.c
1954 index 468fb7cd1221..edf345b7f06b 100644
1955 --- a/lib/mpi/mpi-pow.c
1956 +++ b/lib/mpi/mpi-pow.c
1957 @@ -37,6 +37,7 @@
1958 int mpi_powm(MPI res, MPI base, MPI exp, MPI mod)
1959 {
1960 mpi_ptr_t mp_marker = NULL, bp_marker = NULL, ep_marker = NULL;
1961 + struct karatsuba_ctx karactx = {};
1962 mpi_ptr_t xp_marker = NULL;
1963 mpi_ptr_t tspace = NULL;
1964 mpi_ptr_t rp, ep, mp, bp;
1965 @@ -164,13 +165,11 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod)
1966 int c;
1967 mpi_limb_t e;
1968 mpi_limb_t carry_limb;
1969 - struct karatsuba_ctx karactx;
1970
1971 xp = xp_marker = mpi_alloc_limb_space(2 * (msize + 1));
1972 if (!xp)
1973 goto enomem;
1974
1975 - memset(&karactx, 0, sizeof karactx);
1976 negative_result = (ep[0] & 1) && base->sign;
1977
1978 i = esize - 1;
1979 @@ -295,8 +294,6 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod)
1980 if (mod_shift_cnt)
1981 mpihelp_rshift(rp, rp, rsize, mod_shift_cnt);
1982 MPN_NORMALIZE(rp, rsize);
1983 -
1984 - mpihelp_release_karatsuba_ctx(&karactx);
1985 }
1986
1987 if (negative_result && rsize) {
1988 @@ -313,6 +310,7 @@ int mpi_powm(MPI res, MPI base, MPI exp, MPI mod)
1989 leave:
1990 rc = 0;
1991 enomem:
1992 + mpihelp_release_karatsuba_ctx(&karactx);
1993 if (assign_rp)
1994 mpi_assign_limb_space(res, rp, size);
1995 if (mp_marker)
1996 diff --git a/mm/mlock.c b/mm/mlock.c
1997 index f0505692a5f4..3e7fe404bfb8 100644
1998 --- a/mm/mlock.c
1999 +++ b/mm/mlock.c
2000 @@ -630,11 +630,11 @@ static int apply_vma_lock_flags(unsigned long start, size_t len,
2001 * is also counted.
2002 * Return value: previously mlocked page counts
2003 */
2004 -static int count_mm_mlocked_page_nr(struct mm_struct *mm,
2005 +static unsigned long count_mm_mlocked_page_nr(struct mm_struct *mm,
2006 unsigned long start, size_t len)
2007 {
2008 struct vm_area_struct *vma;
2009 - int count = 0;
2010 + unsigned long count = 0;
2011
2012 if (mm == NULL)
2013 mm = current->mm;
2014 diff --git a/mm/page_idle.c b/mm/page_idle.c
2015 index ae11aa914e55..ded173d6c5b5 100644
2016 --- a/mm/page_idle.c
2017 +++ b/mm/page_idle.c
2018 @@ -131,7 +131,7 @@ static ssize_t page_idle_bitmap_read(struct file *file, struct kobject *kobj,
2019
2020 end_pfn = pfn + count * BITS_PER_BYTE;
2021 if (end_pfn > max_pfn)
2022 - end_pfn = ALIGN(max_pfn, BITMAP_CHUNK_BITS);
2023 + end_pfn = max_pfn;
2024
2025 for (; pfn < end_pfn; pfn++) {
2026 bit = pfn % BITMAP_CHUNK_BITS;
2027 @@ -176,7 +176,7 @@ static ssize_t page_idle_bitmap_write(struct file *file, struct kobject *kobj,
2028
2029 end_pfn = pfn + count * BITS_PER_BYTE;
2030 if (end_pfn > max_pfn)
2031 - end_pfn = ALIGN(max_pfn, BITMAP_CHUNK_BITS);
2032 + end_pfn = max_pfn;
2033
2034 for (; pfn < end_pfn; pfn++) {
2035 bit = pfn % BITMAP_CHUNK_BITS;
2036 diff --git a/net/9p/protocol.c b/net/9p/protocol.c
2037 index 7f1b45c082c9..ed1e39ccaebf 100644
2038 --- a/net/9p/protocol.c
2039 +++ b/net/9p/protocol.c
2040 @@ -622,13 +622,19 @@ int p9dirent_read(struct p9_client *clnt, char *buf, int len,
2041 if (ret) {
2042 p9_debug(P9_DEBUG_9P, "<<< p9dirent_read failed: %d\n", ret);
2043 trace_9p_protocol_dump(clnt, &fake_pdu);
2044 - goto out;
2045 + return ret;
2046 }
2047
2048 - strcpy(dirent->d_name, nameptr);
2049 + ret = strscpy(dirent->d_name, nameptr, sizeof(dirent->d_name));
2050 + if (ret < 0) {
2051 + p9_debug(P9_DEBUG_ERROR,
2052 + "On the wire dirent name too long: %s\n",
2053 + nameptr);
2054 + kfree(nameptr);
2055 + return ret;
2056 + }
2057 kfree(nameptr);
2058
2059 -out:
2060 return fake_pdu.offset;
2061 }
2062 EXPORT_SYMBOL(p9dirent_read);
2063 diff --git a/net/9p/trans_common.c b/net/9p/trans_common.c
2064 index 38aa6345bdfa..9c0c894b56f8 100644
2065 --- a/net/9p/trans_common.c
2066 +++ b/net/9p/trans_common.c
2067 @@ -14,6 +14,7 @@
2068
2069 #include <linux/mm.h>
2070 #include <linux/module.h>
2071 +#include "trans_common.h"
2072
2073 /**
2074 * p9_release_req_pages - Release pages after the transaction.
2075 diff --git a/net/9p/trans_rdma.c b/net/9p/trans_rdma.c
2076 index 5a2ad4707463..8e4313ad3f02 100644
2077 --- a/net/9p/trans_rdma.c
2078 +++ b/net/9p/trans_rdma.c
2079 @@ -254,8 +254,7 @@ p9_cm_event_handler(struct rdma_cm_id *id, struct rdma_cm_event *event)
2080 case RDMA_CM_EVENT_DISCONNECTED:
2081 if (rdma)
2082 rdma->state = P9_RDMA_CLOSED;
2083 - if (c)
2084 - c->status = Disconnected;
2085 + c->status = Disconnected;
2086 break;
2087
2088 case RDMA_CM_EVENT_TIMEWAIT_EXIT:
2089 @@ -454,7 +453,7 @@ static int rdma_request(struct p9_client *client, struct p9_req_t *req)
2090
2091 err = post_recv(client, rpl_context);
2092 if (err) {
2093 - p9_debug(P9_DEBUG_FCALL, "POST RECV failed\n");
2094 + p9_debug(P9_DEBUG_ERROR, "POST RECV failed: %d\n", err);
2095 goto recv_error;
2096 }
2097 /* remove posted receive buffer from request structure */
2098 @@ -523,7 +522,7 @@ dont_need_post_recv:
2099 recv_error:
2100 kfree(rpl_context);
2101 spin_lock_irqsave(&rdma->req_lock, flags);
2102 - if (rdma->state < P9_RDMA_CLOSING) {
2103 + if (err != -EINTR && rdma->state < P9_RDMA_CLOSING) {
2104 rdma->state = P9_RDMA_CLOSING;
2105 spin_unlock_irqrestore(&rdma->req_lock, flags);
2106 rdma_disconnect(rdma->cm_id);
2107 diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
2108 index cc061495f653..bd41b78d131d 100644
2109 --- a/net/bluetooth/hci_conn.c
2110 +++ b/net/bluetooth/hci_conn.c
2111 @@ -1281,8 +1281,16 @@ auth:
2112 return 0;
2113
2114 encrypt:
2115 - if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
2116 + if (test_bit(HCI_CONN_ENCRYPT, &conn->flags)) {
2117 + /* Ensure that the encryption key size has been read,
2118 + * otherwise stall the upper layer responses.
2119 + */
2120 + if (!conn->enc_key_size)
2121 + return 0;
2122 +
2123 + /* Nothing else needed, all requirements are met */
2124 return 1;
2125 + }
2126
2127 hci_conn_encrypt(conn);
2128 return 0;
2129 diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
2130 index d49aa4e6c916..ec9b5d159591 100644
2131 --- a/net/bluetooth/l2cap_core.c
2132 +++ b/net/bluetooth/l2cap_core.c
2133 @@ -1340,6 +1340,21 @@ static void l2cap_request_info(struct l2cap_conn *conn)
2134 sizeof(req), &req);
2135 }
2136
2137 +static bool l2cap_check_enc_key_size(struct hci_conn *hcon)
2138 +{
2139 + /* The minimum encryption key size needs to be enforced by the
2140 + * host stack before establishing any L2CAP connections. The
2141 + * specification in theory allows a minimum of 1, but to align
2142 + * BR/EDR and LE transports, a minimum of 7 is chosen.
2143 + *
2144 + * This check might also be called for unencrypted connections
2145 + * that have no key size requirements. Ensure that the link is
2146 + * actually encrypted before enforcing a key size.
2147 + */
2148 + return (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags) ||
2149 + hcon->enc_key_size >= HCI_MIN_ENC_KEY_SIZE);
2150 +}
2151 +
2152 static void l2cap_do_start(struct l2cap_chan *chan)
2153 {
2154 struct l2cap_conn *conn = chan->conn;
2155 @@ -1357,9 +1372,14 @@ static void l2cap_do_start(struct l2cap_chan *chan)
2156 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
2157 return;
2158
2159 - if (l2cap_chan_check_security(chan, true) &&
2160 - __l2cap_no_conn_pending(chan))
2161 + if (!l2cap_chan_check_security(chan, true) ||
2162 + !__l2cap_no_conn_pending(chan))
2163 + return;
2164 +
2165 + if (l2cap_check_enc_key_size(conn->hcon))
2166 l2cap_start_connection(chan);
2167 + else
2168 + __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
2169 }
2170
2171 static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
2172 @@ -1438,7 +1458,10 @@ static void l2cap_conn_start(struct l2cap_conn *conn)
2173 continue;
2174 }
2175
2176 - l2cap_start_connection(chan);
2177 + if (l2cap_check_enc_key_size(conn->hcon))
2178 + l2cap_start_connection(chan);
2179 + else
2180 + l2cap_chan_close(chan, ECONNREFUSED);
2181
2182 } else if (chan->state == BT_CONNECT2) {
2183 struct l2cap_conn_rsp rsp;
2184 @@ -7447,7 +7470,7 @@ static void l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
2185 }
2186
2187 if (chan->state == BT_CONNECT) {
2188 - if (!status)
2189 + if (!status && l2cap_check_enc_key_size(hcon))
2190 l2cap_start_connection(chan);
2191 else
2192 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
2193 @@ -7456,7 +7479,7 @@ static void l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
2194 struct l2cap_conn_rsp rsp;
2195 __u16 res, stat;
2196
2197 - if (!status) {
2198 + if (!status && l2cap_check_enc_key_size(hcon)) {
2199 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
2200 res = L2CAP_CR_PEND;
2201 stat = L2CAP_CS_AUTHOR_PEND;
2202 diff --git a/net/can/af_can.c b/net/can/af_can.c
2203 index ac1552d8b4ad..e5a9e3d76e26 100644
2204 --- a/net/can/af_can.c
2205 +++ b/net/can/af_can.c
2206 @@ -113,6 +113,7 @@ EXPORT_SYMBOL(can_ioctl);
2207 static void can_sock_destruct(struct sock *sk)
2208 {
2209 skb_queue_purge(&sk->sk_receive_queue);
2210 + skb_queue_purge(&sk->sk_error_queue);
2211 }
2212
2213 static const struct can_proto *can_get_proto(int protocol)
2214 diff --git a/net/core/dev.c b/net/core/dev.c
2215 index 4e10bae5e3da..f693afe608d7 100644
2216 --- a/net/core/dev.c
2217 +++ b/net/core/dev.c
2218 @@ -5083,7 +5083,10 @@ bool sk_busy_loop(struct sock *sk, int nonblock)
2219 goto out;
2220
2221 /* Note: ndo_busy_poll method is optional in linux-4.5 */
2222 - busy_poll = napi->dev->netdev_ops->ndo_busy_poll;
2223 + if (napi->dev->netdev_ops)
2224 + busy_poll = napi->dev->netdev_ops->ndo_busy_poll;
2225 + else
2226 + busy_poll = NULL;
2227
2228 do {
2229 rc = 0;
2230 diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
2231 index 1d0e2284d8ad..ed53bf5d2b68 100644
2232 --- a/net/ipv4/raw.c
2233 +++ b/net/ipv4/raw.c
2234 @@ -197,7 +197,7 @@ static int raw_v4_input(struct sk_buff *skb, const struct iphdr *iph, int hash)
2235 }
2236 sk = __raw_v4_lookup(net, sk_next(sk), iph->protocol,
2237 iph->saddr, iph->daddr,
2238 - skb->dev->ifindex);
2239 + dif);
2240 }
2241 out:
2242 read_unlock(&raw_v4_hashinfo.lock);
2243 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
2244 index 5d4b5e0f6b5e..1bb1e27d3d13 100644
2245 --- a/net/ipv4/udp.c
2246 +++ b/net/ipv4/udp.c
2247 @@ -569,7 +569,11 @@ static inline struct sock *__udp4_lib_lookup_skb(struct sk_buff *skb,
2248 struct sock *udp4_lib_lookup_skb(struct sk_buff *skb,
2249 __be16 sport, __be16 dport)
2250 {
2251 - return __udp4_lib_lookup_skb(skb, sport, dport, &udp_table);
2252 + const struct iphdr *iph = ip_hdr(skb);
2253 +
2254 + return __udp4_lib_lookup(dev_net(skb->dev), iph->saddr, sport,
2255 + iph->daddr, dport, inet_iif(skb),
2256 + &udp_table, NULL);
2257 }
2258 EXPORT_SYMBOL_GPL(udp4_lib_lookup_skb);
2259
2260 diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
2261 index 4db5f541bca6..6a397e110b46 100644
2262 --- a/net/ipv6/udp.c
2263 +++ b/net/ipv6/udp.c
2264 @@ -294,7 +294,7 @@ struct sock *udp6_lib_lookup_skb(struct sk_buff *skb,
2265
2266 return __udp6_lib_lookup(dev_net(skb->dev), &iph->saddr, sport,
2267 &iph->daddr, dport, inet6_iif(skb),
2268 - &udp_table, skb);
2269 + &udp_table, NULL);
2270 }
2271 EXPORT_SYMBOL_GPL(udp6_lib_lookup_skb);
2272
2273 @@ -479,7 +479,7 @@ void __udp6_lib_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
2274 struct net *net = dev_net(skb->dev);
2275
2276 sk = __udp6_lib_lookup(net, daddr, uh->dest, saddr, uh->source,
2277 - inet6_iif(skb), udptable, skb);
2278 + inet6_iif(skb), udptable, NULL);
2279 if (!sk) {
2280 __ICMP6_INC_STATS(net, __in6_dev_get(skb->dev),
2281 ICMP6_MIB_INERRORS);
2282 diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
2283 index 23f6c8baae95..3b423c50ec8f 100644
2284 --- a/net/mac80211/rx.c
2285 +++ b/net/mac80211/rx.c
2286 @@ -3568,6 +3568,8 @@ static bool ieee80211_accept_frame(struct ieee80211_rx_data *rx)
2287 case NL80211_IFTYPE_STATION:
2288 if (!bssid && !sdata->u.mgd.use_4addr)
2289 return false;
2290 + if (ieee80211_is_robust_mgmt_frame(skb) && !rx->sta)
2291 + return false;
2292 if (multicast)
2293 return true;
2294 return ether_addr_equal(sdata->vif.addr, hdr->addr1);
2295 diff --git a/net/mac80211/wpa.c b/net/mac80211/wpa.c
2296 index caa5986cb2e4..c0529c4b60f8 100644
2297 --- a/net/mac80211/wpa.c
2298 +++ b/net/mac80211/wpa.c
2299 @@ -1169,7 +1169,7 @@ ieee80211_crypto_aes_gmac_decrypt(struct ieee80211_rx_data *rx)
2300 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2301 struct ieee80211_key *key = rx->key;
2302 struct ieee80211_mmie_16 *mmie;
2303 - u8 aad[GMAC_AAD_LEN], mic[GMAC_MIC_LEN], ipn[6], nonce[GMAC_NONCE_LEN];
2304 + u8 aad[GMAC_AAD_LEN], *mic, ipn[6], nonce[GMAC_NONCE_LEN];
2305 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2306
2307 if (!ieee80211_is_mgmt(hdr->frame_control))
2308 @@ -1200,13 +1200,18 @@ ieee80211_crypto_aes_gmac_decrypt(struct ieee80211_rx_data *rx)
2309 memcpy(nonce, hdr->addr2, ETH_ALEN);
2310 memcpy(nonce + ETH_ALEN, ipn, 6);
2311
2312 + mic = kmalloc(GMAC_MIC_LEN, GFP_ATOMIC);
2313 + if (!mic)
2314 + return RX_DROP_UNUSABLE;
2315 if (ieee80211_aes_gmac(key->u.aes_gmac.tfm, aad, nonce,
2316 skb->data + 24, skb->len - 24,
2317 mic) < 0 ||
2318 crypto_memneq(mic, mmie->mic, sizeof(mmie->mic))) {
2319 key->u.aes_gmac.icverrors++;
2320 + kfree(mic);
2321 return RX_DROP_UNUSABLE;
2322 }
2323 + kfree(mic);
2324 }
2325
2326 memcpy(key->u.aes_gmac.rx_pn, ipn, 6);
2327 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
2328 index dcf033fea2d2..3578121da79c 100644
2329 --- a/net/packet/af_packet.c
2330 +++ b/net/packet/af_packet.c
2331 @@ -2399,6 +2399,9 @@ static void tpacket_destruct_skb(struct sk_buff *skb)
2332
2333 ts = __packet_set_timestamp(po, ph, skb);
2334 __packet_set_status(po, ph, TP_STATUS_AVAILABLE | ts);
2335 +
2336 + if (!packet_read_pending(&po->tx_ring))
2337 + complete(&po->skb_completion);
2338 }
2339
2340 sock_wfree(skb);
2341 @@ -2629,7 +2632,7 @@ static int tpacket_parse_header(struct packet_sock *po, void *frame,
2342
2343 static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2344 {
2345 - struct sk_buff *skb;
2346 + struct sk_buff *skb = NULL;
2347 struct net_device *dev;
2348 struct virtio_net_hdr *vnet_hdr = NULL;
2349 struct sockcm_cookie sockc;
2350 @@ -2644,6 +2647,7 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2351 int len_sum = 0;
2352 int status = TP_STATUS_AVAILABLE;
2353 int hlen, tlen, copylen = 0;
2354 + long timeo = 0;
2355
2356 mutex_lock(&po->pg_vec_lock);
2357
2358 @@ -2690,12 +2694,21 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
2359 if ((size_max > dev->mtu + reserve + VLAN_HLEN) && !po->has_vnet_hdr)
2360 size_max = dev->mtu + reserve + VLAN_HLEN;
2361
2362 + reinit_completion(&po->skb_completion);
2363 +
2364 do {
2365 ph = packet_current_frame(po, &po->tx_ring,
2366 TP_STATUS_SEND_REQUEST);
2367 if (unlikely(ph == NULL)) {
2368 - if (need_wait && need_resched())
2369 - schedule();
2370 + if (need_wait && skb) {
2371 + timeo = sock_sndtimeo(&po->sk, msg->msg_flags & MSG_DONTWAIT);
2372 + timeo = wait_for_completion_interruptible_timeout(&po->skb_completion, timeo);
2373 + if (timeo <= 0) {
2374 + err = !timeo ? -ETIMEDOUT : -ERESTARTSYS;
2375 + goto out_put;
2376 + }
2377 + }
2378 + /* check for additional frames */
2379 continue;
2380 }
2381
2382 @@ -3249,6 +3262,7 @@ static int packet_create(struct net *net, struct socket *sock, int protocol,
2383 sock_init_data(sock, sk);
2384
2385 po = pkt_sk(sk);
2386 + init_completion(&po->skb_completion);
2387 sk->sk_family = PF_PACKET;
2388 po->num = proto;
2389 po->xmit = dev_queue_xmit;
2390 diff --git a/net/packet/internal.h b/net/packet/internal.h
2391 index 1309e2a7baad..bbf8dd35df0d 100644
2392 --- a/net/packet/internal.h
2393 +++ b/net/packet/internal.h
2394 @@ -125,6 +125,7 @@ struct packet_sock {
2395 unsigned int tp_hdrlen;
2396 unsigned int tp_reserve;
2397 unsigned int tp_tstamp;
2398 + struct completion skb_completion;
2399 struct net_device __rcu *cached_dev;
2400 int (*xmit)(struct sk_buff *skb);
2401 struct packet_type prot_hook ____cacheline_aligned_in_smp;
2402 diff --git a/net/sctp/endpointola.c b/net/sctp/endpointola.c
2403 index 1f03065686fe..beae42bfa68f 100644
2404 --- a/net/sctp/endpointola.c
2405 +++ b/net/sctp/endpointola.c
2406 @@ -125,10 +125,6 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
2407 /* Initialize the bind addr area */
2408 sctp_bind_addr_init(&ep->base.bind_addr, 0);
2409
2410 - /* Remember who we are attached to. */
2411 - ep->base.sk = sk;
2412 - sock_hold(ep->base.sk);
2413 -
2414 /* Create the lists of associations. */
2415 INIT_LIST_HEAD(&ep->asocs);
2416
2417 @@ -165,6 +161,10 @@ static struct sctp_endpoint *sctp_endpoint_init(struct sctp_endpoint *ep,
2418 ep->auth_chunk_list = auth_chunks;
2419 ep->prsctp_enable = net->sctp.prsctp_enable;
2420
2421 + /* Remember who we are attached to. */
2422 + ep->base.sk = sk;
2423 + sock_hold(ep->base.sk);
2424 +
2425 return ep;
2426
2427 nomem_hmacs:
2428 diff --git a/net/tipc/core.c b/net/tipc/core.c
2429 index 816c125bfc13..59980dea2ad7 100644
2430 --- a/net/tipc/core.c
2431 +++ b/net/tipc/core.c
2432 @@ -128,7 +128,7 @@ static int __init tipc_init(void)
2433 if (err)
2434 goto out_sysctl;
2435
2436 - err = register_pernet_subsys(&tipc_net_ops);
2437 + err = register_pernet_device(&tipc_net_ops);
2438 if (err)
2439 goto out_pernet;
2440
2441 @@ -136,7 +136,7 @@ static int __init tipc_init(void)
2442 if (err)
2443 goto out_socket;
2444
2445 - err = register_pernet_subsys(&tipc_topsrv_net_ops);
2446 + err = register_pernet_device(&tipc_topsrv_net_ops);
2447 if (err)
2448 goto out_pernet_topsrv;
2449
2450 @@ -147,11 +147,11 @@ static int __init tipc_init(void)
2451 pr_info("Started in single node mode\n");
2452 return 0;
2453 out_bearer:
2454 - unregister_pernet_subsys(&tipc_topsrv_net_ops);
2455 + unregister_pernet_device(&tipc_topsrv_net_ops);
2456 out_pernet_topsrv:
2457 tipc_socket_stop();
2458 out_socket:
2459 - unregister_pernet_subsys(&tipc_net_ops);
2460 + unregister_pernet_device(&tipc_net_ops);
2461 out_pernet:
2462 tipc_unregister_sysctl();
2463 out_sysctl:
2464 @@ -166,9 +166,9 @@ out_netlink:
2465 static void __exit tipc_exit(void)
2466 {
2467 tipc_bearer_cleanup();
2468 - unregister_pernet_subsys(&tipc_topsrv_net_ops);
2469 + unregister_pernet_device(&tipc_topsrv_net_ops);
2470 tipc_socket_stop();
2471 - unregister_pernet_subsys(&tipc_net_ops);
2472 + unregister_pernet_device(&tipc_net_ops);
2473 tipc_netlink_stop();
2474 tipc_netlink_compat_stop();
2475 tipc_unregister_sysctl();
2476 diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c
2477 index 0cf9403b4c44..b7c539a51da3 100644
2478 --- a/net/tipc/netlink_compat.c
2479 +++ b/net/tipc/netlink_compat.c
2480 @@ -436,7 +436,11 @@ static int tipc_nl_compat_bearer_disable(struct tipc_nl_compat_cmd_doit *cmd,
2481 if (!bearer)
2482 return -EMSGSIZE;
2483
2484 - len = min_t(int, TLV_GET_DATA_LEN(msg->req), TIPC_MAX_BEARER_NAME);
2485 + len = TLV_GET_DATA_LEN(msg->req);
2486 + if (len <= 0)
2487 + return -EINVAL;
2488 +
2489 + len = min_t(int, len, TIPC_MAX_BEARER_NAME);
2490 if (!string_is_valid(name, len))
2491 return -EINVAL;
2492
2493 @@ -528,7 +532,11 @@ static int tipc_nl_compat_link_stat_dump(struct tipc_nl_compat_msg *msg,
2494
2495 name = (char *)TLV_DATA(msg->req);
2496
2497 - len = min_t(int, TLV_GET_DATA_LEN(msg->req), TIPC_MAX_LINK_NAME);
2498 + len = TLV_GET_DATA_LEN(msg->req);
2499 + if (len <= 0)
2500 + return -EINVAL;
2501 +
2502 + len = min_t(int, len, TIPC_MAX_BEARER_NAME);
2503 if (!string_is_valid(name, len))
2504 return -EINVAL;
2505
2506 @@ -806,7 +814,11 @@ static int tipc_nl_compat_link_reset_stats(struct tipc_nl_compat_cmd_doit *cmd,
2507 if (!link)
2508 return -EMSGSIZE;
2509
2510 - len = min_t(int, TLV_GET_DATA_LEN(msg->req), TIPC_MAX_LINK_NAME);
2511 + len = TLV_GET_DATA_LEN(msg->req);
2512 + if (len <= 0)
2513 + return -EINVAL;
2514 +
2515 + len = min_t(int, len, TIPC_MAX_BEARER_NAME);
2516 if (!string_is_valid(name, len))
2517 return -EINVAL;
2518
2519 diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c
2520 index 133e72654e77..05033ab05b8f 100644
2521 --- a/net/tipc/udp_media.c
2522 +++ b/net/tipc/udp_media.c
2523 @@ -174,7 +174,6 @@ static int tipc_udp_xmit(struct net *net, struct sk_buff *skb,
2524 goto tx_error;
2525 }
2526
2527 - skb->dev = rt->dst.dev;
2528 ttl = ip4_dst_hoplimit(&rt->dst);
2529 udp_tunnel_xmit_skb(rt, ub->ubsock->sk, skb, src->ipv4.s_addr,
2530 dst->ipv4.s_addr, 0, ttl, 0, src->port,
2531 @@ -193,10 +192,9 @@ static int tipc_udp_xmit(struct net *net, struct sk_buff *skb,
2532 if (err)
2533 goto tx_error;
2534 ttl = ip6_dst_hoplimit(ndst);
2535 - err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb,
2536 - ndst->dev, &src->ipv6,
2537 - &dst->ipv6, 0, ttl, 0, src->port,
2538 - dst->port, false);
2539 + err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb, NULL,
2540 + &src->ipv6, &dst->ipv6, 0, ttl, 0,
2541 + src->port, dst->port, false);
2542 #endif
2543 }
2544 return err;
2545 diff --git a/net/wireless/core.c b/net/wireless/core.c
2546 index 7fbf4dd07277..74554bdd9a5b 100644
2547 --- a/net/wireless/core.c
2548 +++ b/net/wireless/core.c
2549 @@ -478,7 +478,7 @@ use_default_name:
2550 &rdev->rfkill_ops, rdev);
2551
2552 if (!rdev->rfkill) {
2553 - kfree(rdev);
2554 + wiphy_free(&rdev->wiphy);
2555 return NULL;
2556 }
2557
2558 diff --git a/scripts/checkstack.pl b/scripts/checkstack.pl
2559 index 12a6940741fe..b8f616545277 100755
2560 --- a/scripts/checkstack.pl
2561 +++ b/scripts/checkstack.pl
2562 @@ -45,7 +45,7 @@ my (@stack, $re, $dre, $x, $xs, $funcre);
2563 $x = "[0-9a-f]"; # hex character
2564 $xs = "[0-9a-f ]"; # hex character or space
2565 $funcre = qr/^$x* <(.*)>:$/;
2566 - if ($arch eq 'aarch64') {
2567 + if ($arch =~ '^(aarch|arm)64$') {
2568 #ffffffc0006325cc: a9bb7bfd stp x29, x30, [sp, #-80]!
2569 $re = qr/^.*stp.*sp, \#-([0-9]{1,8})\]\!/o;
2570 } elsif ($arch eq 'arm') {
2571 diff --git a/scripts/decode_stacktrace.sh b/scripts/decode_stacktrace.sh
2572 index edde8250195c..381acfc4c59d 100755
2573 --- a/scripts/decode_stacktrace.sh
2574 +++ b/scripts/decode_stacktrace.sh
2575 @@ -65,7 +65,7 @@ parse_symbol() {
2576 if [[ "${cache[$module,$address]+isset}" == "isset" ]]; then
2577 local code=${cache[$module,$address]}
2578 else
2579 - local code=$(addr2line -i -e "$objfile" "$address")
2580 + local code=$(${CROSS_COMPILE}addr2line -i -e "$objfile" "$address")
2581 cache[$module,$address]=$code
2582 fi
2583
2584 diff --git a/security/apparmor/policy_unpack.c b/security/apparmor/policy_unpack.c
2585 index 138120698f83..96a8d7115120 100644
2586 --- a/security/apparmor/policy_unpack.c
2587 +++ b/security/apparmor/policy_unpack.c
2588 @@ -177,7 +177,7 @@ static bool unpack_nameX(struct aa_ext *e, enum aa_code code, const char *name)
2589 char *tag = NULL;
2590 size_t size = unpack_u16_chunk(e, &tag);
2591 /* if a name is specified it must match. otherwise skip tag */
2592 - if (name && (!size || strcmp(name, tag)))
2593 + if (name && (!size || tag[size-1] != '\0' || strcmp(name, tag)))
2594 goto fail;
2595 } else if (name) {
2596 /* if a name is specified and there is no name tag fail */
2597 diff --git a/sound/core/seq/oss/seq_oss_ioctl.c b/sound/core/seq/oss/seq_oss_ioctl.c
2598 index 5b8520177b0e..7d72e3d48ad5 100644
2599 --- a/sound/core/seq/oss/seq_oss_ioctl.c
2600 +++ b/sound/core/seq/oss/seq_oss_ioctl.c
2601 @@ -62,7 +62,7 @@ static int snd_seq_oss_oob_user(struct seq_oss_devinfo *dp, void __user *arg)
2602 if (copy_from_user(ev, arg, 8))
2603 return -EFAULT;
2604 memset(&tmpev, 0, sizeof(tmpev));
2605 - snd_seq_oss_fill_addr(dp, &tmpev, dp->addr.port, dp->addr.client);
2606 + snd_seq_oss_fill_addr(dp, &tmpev, dp->addr.client, dp->addr.port);
2607 tmpev.time.tick = 0;
2608 if (! snd_seq_oss_process_event(dp, (union evrec *)ev, &tmpev)) {
2609 snd_seq_oss_dispatch(dp, &tmpev, 0, 0);
2610 diff --git a/sound/core/seq/oss/seq_oss_rw.c b/sound/core/seq/oss/seq_oss_rw.c
2611 index 6a7b6aceeca9..499f3e8f4949 100644
2612 --- a/sound/core/seq/oss/seq_oss_rw.c
2613 +++ b/sound/core/seq/oss/seq_oss_rw.c
2614 @@ -174,7 +174,7 @@ insert_queue(struct seq_oss_devinfo *dp, union evrec *rec, struct file *opt)
2615 memset(&event, 0, sizeof(event));
2616 /* set dummy -- to be sure */
2617 event.type = SNDRV_SEQ_EVENT_NOTEOFF;
2618 - snd_seq_oss_fill_addr(dp, &event, dp->addr.port, dp->addr.client);
2619 + snd_seq_oss_fill_addr(dp, &event, dp->addr.client, dp->addr.port);
2620
2621 if (snd_seq_oss_process_event(dp, rec, &event))
2622 return 0; /* invalid event - no need to insert queue */
2623 diff --git a/sound/firewire/amdtp-am824.c b/sound/firewire/amdtp-am824.c
2624 index bebddc60fde8..99654e7eb2d4 100644
2625 --- a/sound/firewire/amdtp-am824.c
2626 +++ b/sound/firewire/amdtp-am824.c
2627 @@ -388,7 +388,7 @@ static void read_midi_messages(struct amdtp_stream *s,
2628 u8 *b;
2629
2630 for (f = 0; f < frames; f++) {
2631 - port = (s->data_block_counter + f) % 8;
2632 + port = (8 - s->tx_first_dbc + s->data_block_counter + f) % 8;
2633 b = (u8 *)&buffer[p->midi_position];
2634
2635 len = b[0] - 0x80;
2636 diff --git a/sound/soc/codecs/cs4265.c b/sound/soc/codecs/cs4265.c
2637 index 6e8eb1f5a041..bed64723e5d9 100644
2638 --- a/sound/soc/codecs/cs4265.c
2639 +++ b/sound/soc/codecs/cs4265.c
2640 @@ -60,7 +60,7 @@ static const struct reg_default cs4265_reg_defaults[] = {
2641 static bool cs4265_readable_register(struct device *dev, unsigned int reg)
2642 {
2643 switch (reg) {
2644 - case CS4265_CHIP_ID ... CS4265_SPDIF_CTL2:
2645 + case CS4265_CHIP_ID ... CS4265_MAX_REGISTER:
2646 return true;
2647 default:
2648 return false;
2649 diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
2650 index 3e65dc74eb33..e7aef841f87d 100644
2651 --- a/sound/soc/codecs/max98090.c
2652 +++ b/sound/soc/codecs/max98090.c
2653 @@ -1924,6 +1924,21 @@ static int max98090_configure_dmic(struct max98090_priv *max98090,
2654 return 0;
2655 }
2656
2657 +static int max98090_dai_startup(struct snd_pcm_substream *substream,
2658 + struct snd_soc_dai *dai)
2659 +{
2660 + struct snd_soc_component *component = dai->component;
2661 + struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
2662 + unsigned int fmt = max98090->dai_fmt;
2663 +
2664 + /* Remove 24-bit format support if it is not in right justified mode. */
2665 + if ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) != SND_SOC_DAIFMT_RIGHT_J) {
2666 + substream->runtime->hw.formats = SNDRV_PCM_FMTBIT_S16_LE;
2667 + snd_pcm_hw_constraint_msbits(substream->runtime, 0, 16, 16);
2668 + }
2669 + return 0;
2670 +}
2671 +
2672 static int max98090_dai_hw_params(struct snd_pcm_substream *substream,
2673 struct snd_pcm_hw_params *params,
2674 struct snd_soc_dai *dai)
2675 @@ -2331,6 +2346,7 @@ EXPORT_SYMBOL_GPL(max98090_mic_detect);
2676 #define MAX98090_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE)
2677
2678 static const struct snd_soc_dai_ops max98090_dai_ops = {
2679 + .startup = max98090_dai_startup,
2680 .set_sysclk = max98090_dai_set_sysclk,
2681 .set_fmt = max98090_dai_set_fmt,
2682 .set_tdm_slot = max98090_set_tdm_slot,
2683 diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
2684 index 1dbcdc99dbe3..1d00f6e894ef 100644
2685 --- a/sound/soc/soc-pcm.c
2686 +++ b/sound/soc/soc-pcm.c
2687 @@ -2247,7 +2247,8 @@ int dpcm_be_dai_prepare(struct snd_soc_pcm_runtime *fe, int stream)
2688
2689 if ((be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_PARAMS) &&
2690 (be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP) &&
2691 - (be->dpcm[stream].state != SND_SOC_DPCM_STATE_SUSPEND))
2692 + (be->dpcm[stream].state != SND_SOC_DPCM_STATE_SUSPEND) &&
2693 + (be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED))
2694 continue;
2695
2696 dev_dbg(be->dev, "ASoC: prepare BE %s\n",
2697 diff --git a/sound/usb/line6/pcm.c b/sound/usb/line6/pcm.c
2698 index fab53f58d447..a9f99a6c3909 100644
2699 --- a/sound/usb/line6/pcm.c
2700 +++ b/sound/usb/line6/pcm.c
2701 @@ -558,6 +558,11 @@ int line6_init_pcm(struct usb_line6 *line6,
2702 line6pcm->max_packet_size_out =
2703 usb_maxpacket(line6->usbdev,
2704 usb_sndisocpipe(line6->usbdev, ep_write), 1);
2705 + if (!line6pcm->max_packet_size_in || !line6pcm->max_packet_size_out) {
2706 + dev_err(line6pcm->line6->ifcdev,
2707 + "cannot get proper max packet size\n");
2708 + return -EINVAL;
2709 + }
2710
2711 spin_lock_init(&line6pcm->out.lock);
2712 spin_lock_init(&line6pcm->in.lock);
2713 diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
2714 index 5d2fc5f58bfe..f4fd9548c529 100644
2715 --- a/sound/usb/mixer_quirks.c
2716 +++ b/sound/usb/mixer_quirks.c
2717 @@ -753,7 +753,7 @@ static int snd_ni_control_init_val(struct usb_mixer_interface *mixer,
2718 return err;
2719 }
2720
2721 - kctl->private_value |= (value << 24);
2722 + kctl->private_value |= ((unsigned int)value << 24);
2723 return 0;
2724 }
2725
2726 @@ -914,7 +914,7 @@ static int snd_ftu_eff_switch_init(struct usb_mixer_interface *mixer,
2727 if (err < 0)
2728 return err;
2729
2730 - kctl->private_value |= value[0] << 24;
2731 + kctl->private_value |= (unsigned int)value[0] << 24;
2732 return 0;
2733 }
2734
2735 diff --git a/tools/perf/builtin-help.c b/tools/perf/builtin-help.c
2736 index 3bdb2c78a21b..476e24cf97fa 100644
2737 --- a/tools/perf/builtin-help.c
2738 +++ b/tools/perf/builtin-help.c
2739 @@ -186,7 +186,7 @@ static void add_man_viewer(const char *name)
2740 while (*p)
2741 p = &((*p)->next);
2742 *p = zalloc(sizeof(**p) + len + 1);
2743 - strncpy((*p)->name, name, len);
2744 + strcpy((*p)->name, name);
2745 }
2746
2747 static int supported_man_viewer(const char *name, size_t len)
2748 diff --git a/tools/perf/ui/tui/helpline.c b/tools/perf/ui/tui/helpline.c
2749 index 88f5143a5981..3c97e27383a9 100644
2750 --- a/tools/perf/ui/tui/helpline.c
2751 +++ b/tools/perf/ui/tui/helpline.c
2752 @@ -23,7 +23,7 @@ static void tui_helpline__push(const char *msg)
2753 SLsmg_set_color(0);
2754 SLsmg_write_nstring((char *)msg, SLtt_Screen_Cols);
2755 SLsmg_refresh();
2756 - strncpy(ui_helpline__current, msg, sz)[sz - 1] = '\0';
2757 + strlcpy(ui_helpline__current, msg, sz);
2758 }
2759
2760 static int tui_helpline__show(const char *format, va_list ap)
2761 diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
2762 index a11f6760cce8..de9b369d2d2e 100644
2763 --- a/tools/perf/util/header.c
2764 +++ b/tools/perf/util/header.c
2765 @@ -3027,7 +3027,7 @@ perf_event__synthesize_event_update_name(struct perf_tool *tool,
2766 if (ev == NULL)
2767 return -ENOMEM;
2768
2769 - strncpy(ev->data, evsel->name, len);
2770 + strlcpy(ev->data, evsel->name, len + 1);
2771 err = process(tool, (union perf_event*) ev, NULL, NULL);
2772 free(ev);
2773 return err;