Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.9/0177-4.9.78-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3197 - (hide annotations) (download)
Wed Aug 8 14:25:30 2018 UTC (5 years, 10 months ago) by niro
File size: 64270 byte(s)
-linux-4.9.78
1 niro 3197 diff --git a/Documentation/x86/pti.txt b/Documentation/x86/pti.txt
2     index d11eff61fc9a..5cd58439ad2d 100644
3     --- a/Documentation/x86/pti.txt
4     +++ b/Documentation/x86/pti.txt
5     @@ -78,7 +78,7 @@ this protection comes at a cost:
6     non-PTI SYSCALL entry code, so requires mapping fewer
7     things into the userspace page tables. The downside is
8     that stacks must be switched at entry time.
9     - d. Global pages are disabled for all kernel structures not
10     + c. Global pages are disabled for all kernel structures not
11     mapped into both kernel and userspace page tables. This
12     feature of the MMU allows different processes to share TLB
13     entries mapping the kernel. Losing the feature means more
14     diff --git a/Makefile b/Makefile
15     index aba553531d6a..8a6f158a1176 100644
16     --- a/Makefile
17     +++ b/Makefile
18     @@ -1,6 +1,6 @@
19     VERSION = 4
20     PATCHLEVEL = 9
21     -SUBLEVEL = 77
22     +SUBLEVEL = 78
23     EXTRAVERSION =
24     NAME = Roaring Lionus
25    
26     diff --git a/arch/arm/boot/dts/kirkwood-openblocks_a7.dts b/arch/arm/boot/dts/kirkwood-openblocks_a7.dts
27     index cf2f5240e176..27cc913ca0f5 100644
28     --- a/arch/arm/boot/dts/kirkwood-openblocks_a7.dts
29     +++ b/arch/arm/boot/dts/kirkwood-openblocks_a7.dts
30     @@ -53,7 +53,8 @@
31     };
32    
33     pinctrl: pin-controller@10000 {
34     - pinctrl-0 = <&pmx_dip_switches &pmx_gpio_header>;
35     + pinctrl-0 = <&pmx_dip_switches &pmx_gpio_header
36     + &pmx_gpio_header_gpo>;
37     pinctrl-names = "default";
38    
39     pmx_uart0: pmx-uart0 {
40     @@ -85,11 +86,16 @@
41     * ground.
42     */
43     pmx_gpio_header: pmx-gpio-header {
44     - marvell,pins = "mpp17", "mpp7", "mpp29", "mpp28",
45     + marvell,pins = "mpp17", "mpp29", "mpp28",
46     "mpp35", "mpp34", "mpp40";
47     marvell,function = "gpio";
48     };
49    
50     + pmx_gpio_header_gpo: pxm-gpio-header-gpo {
51     + marvell,pins = "mpp7";
52     + marvell,function = "gpo";
53     + };
54     +
55     pmx_gpio_init: pmx-init {
56     marvell,pins = "mpp38";
57     marvell,function = "gpio";
58     diff --git a/arch/arm/configs/sunxi_defconfig b/arch/arm/configs/sunxi_defconfig
59     index 714da336ec86..5d49b60841e3 100644
60     --- a/arch/arm/configs/sunxi_defconfig
61     +++ b/arch/arm/configs/sunxi_defconfig
62     @@ -11,6 +11,7 @@ CONFIG_SMP=y
63     CONFIG_NR_CPUS=8
64     CONFIG_AEABI=y
65     CONFIG_HIGHMEM=y
66     +CONFIG_CMA=y
67     CONFIG_ARM_APPENDED_DTB=y
68     CONFIG_ARM_ATAG_DTB_COMPAT=y
69     CONFIG_CPU_FREQ=y
70     @@ -35,6 +36,7 @@ CONFIG_CAN_SUN4I=y
71     # CONFIG_WIRELESS is not set
72     CONFIG_DEVTMPFS=y
73     CONFIG_DEVTMPFS_MOUNT=y
74     +CONFIG_DMA_CMA=y
75     CONFIG_BLK_DEV_SD=y
76     CONFIG_ATA=y
77     CONFIG_AHCI_SUNXI=y
78     diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c
79     index 85baadab02d3..2e6e9e99977b 100644
80     --- a/arch/arm64/kvm/handle_exit.c
81     +++ b/arch/arm64/kvm/handle_exit.c
82     @@ -44,7 +44,7 @@ static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run)
83    
84     ret = kvm_psci_call(vcpu);
85     if (ret < 0) {
86     - kvm_inject_undefined(vcpu);
87     + vcpu_set_reg(vcpu, 0, ~0UL);
88     return 1;
89     }
90    
91     @@ -53,7 +53,7 @@ static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run)
92    
93     static int handle_smc(struct kvm_vcpu *vcpu, struct kvm_run *run)
94     {
95     - kvm_inject_undefined(vcpu);
96     + vcpu_set_reg(vcpu, 0, ~0UL);
97     return 1;
98     }
99    
100     diff --git a/arch/mips/ar7/platform.c b/arch/mips/ar7/platform.c
101     index 3446b6fb3acb..9da4e2292fc7 100644
102     --- a/arch/mips/ar7/platform.c
103     +++ b/arch/mips/ar7/platform.c
104     @@ -576,7 +576,7 @@ static int __init ar7_register_uarts(void)
105     uart_port.type = PORT_AR7;
106     uart_port.uartclk = clk_get_rate(bus_clk) / 2;
107     uart_port.iotype = UPIO_MEM32;
108     - uart_port.flags = UPF_FIXED_TYPE;
109     + uart_port.flags = UPF_FIXED_TYPE | UPF_BOOT_AUTOCONF;
110     uart_port.regshift = 2;
111    
112     uart_port.line = 0;
113     diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
114     index bdc9aeaf2e45..a76dc738ec61 100644
115     --- a/arch/x86/entry/entry_32.S
116     +++ b/arch/x86/entry/entry_32.S
117     @@ -229,6 +229,17 @@ ENTRY(__switch_to_asm)
118     movl %ebx, PER_CPU_VAR(stack_canary)+stack_canary_offset
119     #endif
120    
121     +#ifdef CONFIG_RETPOLINE
122     + /*
123     + * When switching from a shallower to a deeper call stack
124     + * the RSB may either underflow or use entries populated
125     + * with userspace addresses. On CPUs where those concerns
126     + * exist, overwrite the RSB with entries which capture
127     + * speculative execution to prevent attack.
128     + */
129     + FILL_RETURN_BUFFER %ebx, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
130     +#endif
131     +
132     /* restore callee-saved registers */
133     popl %esi
134     popl %edi
135     diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
136     index b9c901ce6582..e729e1528584 100644
137     --- a/arch/x86/entry/entry_64.S
138     +++ b/arch/x86/entry/entry_64.S
139     @@ -427,6 +427,17 @@ ENTRY(__switch_to_asm)
140     movq %rbx, PER_CPU_VAR(irq_stack_union)+stack_canary_offset
141     #endif
142    
143     +#ifdef CONFIG_RETPOLINE
144     + /*
145     + * When switching from a shallower to a deeper call stack
146     + * the RSB may either underflow or use entries populated
147     + * with userspace addresses. On CPUs where those concerns
148     + * exist, overwrite the RSB with entries which capture
149     + * speculative execution to prevent attack.
150     + */
151     + FILL_RETURN_BUFFER %r12, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
152     +#endif
153     +
154     /* restore callee-saved registers */
155     popq %r15
156     popq %r14
157     @@ -1053,7 +1064,7 @@ idtentry async_page_fault do_async_page_fault has_error_code=1
158     #endif
159    
160     #ifdef CONFIG_X86_MCE
161     -idtentry machine_check has_error_code=0 paranoid=1 do_sym=*machine_check_vector(%rip)
162     +idtentry machine_check do_mce has_error_code=0 paranoid=1
163     #endif
164    
165     /*
166     diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
167     index 4467568a531b..8537a21acd8b 100644
168     --- a/arch/x86/include/asm/cpufeatures.h
169     +++ b/arch/x86/include/asm/cpufeatures.h
170     @@ -197,9 +197,9 @@
171     #define X86_FEATURE_RETPOLINE ( 7*32+12) /* Generic Retpoline mitigation for Spectre variant 2 */
172     #define X86_FEATURE_RETPOLINE_AMD ( 7*32+13) /* AMD Retpoline mitigation for Spectre variant 2 */
173    
174     -#define X86_FEATURE_INTEL_PT ( 7*32+15) /* Intel Processor Trace */
175     #define X86_FEATURE_AVX512_4VNNIW (7*32+16) /* AVX-512 Neural Network Instructions */
176     #define X86_FEATURE_AVX512_4FMAPS (7*32+17) /* AVX-512 Multiply Accumulation Single precision */
177     +#define X86_FEATURE_RSB_CTXSW ( 7*32+19) /* Fill RSB on context switches */
178    
179     /* Because the ALTERNATIVE scheme is for members of the X86_FEATURE club... */
180     #define X86_FEATURE_KAISER ( 7*32+31) /* CONFIG_PAGE_TABLE_ISOLATION w/o nokaiser */
181     @@ -235,6 +235,7 @@
182     #define X86_FEATURE_SMAP ( 9*32+20) /* Supervisor Mode Access Prevention */
183     #define X86_FEATURE_CLFLUSHOPT ( 9*32+23) /* CLFLUSHOPT instruction */
184     #define X86_FEATURE_CLWB ( 9*32+24) /* CLWB instruction */
185     +#define X86_FEATURE_INTEL_PT ( 9*32+25) /* Intel Processor Trace */
186     #define X86_FEATURE_AVX512PF ( 9*32+26) /* AVX-512 Prefetch */
187     #define X86_FEATURE_AVX512ER ( 9*32+27) /* AVX-512 Exponential and Reciprocal */
188     #define X86_FEATURE_AVX512CD ( 9*32+28) /* AVX-512 Conflict Detection */
189     diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
190     index 402a11c803c3..4ad41087ce0e 100644
191     --- a/arch/x86/include/asm/nospec-branch.h
192     +++ b/arch/x86/include/asm/nospec-branch.h
193     @@ -11,7 +11,7 @@
194     * Fill the CPU return stack buffer.
195     *
196     * Each entry in the RSB, if used for a speculative 'ret', contains an
197     - * infinite 'pause; jmp' loop to capture speculative execution.
198     + * infinite 'pause; lfence; jmp' loop to capture speculative execution.
199     *
200     * This is required in various cases for retpoline and IBRS-based
201     * mitigations for the Spectre variant 2 vulnerability. Sometimes to
202     @@ -38,11 +38,13 @@
203     call 772f; \
204     773: /* speculation trap */ \
205     pause; \
206     + lfence; \
207     jmp 773b; \
208     772: \
209     call 774f; \
210     775: /* speculation trap */ \
211     pause; \
212     + lfence; \
213     jmp 775b; \
214     774: \
215     dec reg; \
216     @@ -73,6 +75,7 @@
217     call .Ldo_rop_\@
218     .Lspec_trap_\@:
219     pause
220     + lfence
221     jmp .Lspec_trap_\@
222     .Ldo_rop_\@:
223     mov \reg, (%_ASM_SP)
224     @@ -165,6 +168,7 @@
225     " .align 16\n" \
226     "901: call 903f;\n" \
227     "902: pause;\n" \
228     + " lfence;\n" \
229     " jmp 902b;\n" \
230     " .align 16\n" \
231     "903: addl $4, %%esp;\n" \
232     @@ -190,6 +194,9 @@ enum spectre_v2_mitigation {
233     SPECTRE_V2_IBRS,
234     };
235    
236     +extern char __indirect_thunk_start[];
237     +extern char __indirect_thunk_end[];
238     +
239     /*
240     * On VMEXIT we must ensure that no RSB predictions learned in the guest
241     * can be followed in the host, by overwriting the RSB completely. Both
242     @@ -199,16 +206,17 @@ enum spectre_v2_mitigation {
243     static inline void vmexit_fill_RSB(void)
244     {
245     #ifdef CONFIG_RETPOLINE
246     - unsigned long loops = RSB_CLEAR_LOOPS / 2;
247     + unsigned long loops;
248    
249     asm volatile (ANNOTATE_NOSPEC_ALTERNATIVE
250     ALTERNATIVE("jmp 910f",
251     __stringify(__FILL_RETURN_BUFFER(%0, RSB_CLEAR_LOOPS, %1)),
252     X86_FEATURE_RETPOLINE)
253     "910:"
254     - : "=&r" (loops), ASM_CALL_CONSTRAINT
255     - : "r" (loops) : "memory" );
256     + : "=r" (loops), ASM_CALL_CONSTRAINT
257     + : : "memory" );
258     #endif
259     }
260     +
261     #endif /* __ASSEMBLY__ */
262     #endif /* __NOSPEC_BRANCH_H__ */
263     diff --git a/arch/x86/include/asm/traps.h b/arch/x86/include/asm/traps.h
264     index 01fd0a7f48cd..688315b7a922 100644
265     --- a/arch/x86/include/asm/traps.h
266     +++ b/arch/x86/include/asm/traps.h
267     @@ -92,6 +92,7 @@ dotraplinkage void do_simd_coprocessor_error(struct pt_regs *, long);
268     #ifdef CONFIG_X86_32
269     dotraplinkage void do_iret_error(struct pt_regs *, long);
270     #endif
271     +dotraplinkage void do_mce(struct pt_regs *, long);
272    
273     static inline int get_si_code(unsigned long condition)
274     {
275     diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
276     index f3557a1eb562..b5229abd1629 100644
277     --- a/arch/x86/kernel/apic/vector.c
278     +++ b/arch/x86/kernel/apic/vector.c
279     @@ -361,14 +361,17 @@ static int x86_vector_alloc_irqs(struct irq_domain *domain, unsigned int virq,
280     irq_data->chip_data = data;
281     irq_data->hwirq = virq + i;
282     err = assign_irq_vector_policy(virq + i, node, data, info);
283     - if (err)
284     + if (err) {
285     + irq_data->chip_data = NULL;
286     + free_apic_chip_data(data);
287     goto error;
288     + }
289     }
290    
291     return 0;
292    
293     error:
294     - x86_vector_free_irqs(domain, virq, i + 1);
295     + x86_vector_free_irqs(domain, virq, i);
296     return err;
297     }
298    
299     diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
300     index 49d25ddf0e9f..8cacf62ec458 100644
301     --- a/arch/x86/kernel/cpu/bugs.c
302     +++ b/arch/x86/kernel/cpu/bugs.c
303     @@ -22,6 +22,7 @@
304     #include <asm/alternative.h>
305     #include <asm/pgtable.h>
306     #include <asm/cacheflush.h>
307     +#include <asm/intel-family.h>
308    
309     static void __init spectre_v2_select_mitigation(void);
310    
311     @@ -154,6 +155,23 @@ static enum spectre_v2_mitigation_cmd __init spectre_v2_parse_cmdline(void)
312     return SPECTRE_V2_CMD_NONE;
313     }
314    
315     +/* Check for Skylake-like CPUs (for RSB handling) */
316     +static bool __init is_skylake_era(void)
317     +{
318     + if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
319     + boot_cpu_data.x86 == 6) {
320     + switch (boot_cpu_data.x86_model) {
321     + case INTEL_FAM6_SKYLAKE_MOBILE:
322     + case INTEL_FAM6_SKYLAKE_DESKTOP:
323     + case INTEL_FAM6_SKYLAKE_X:
324     + case INTEL_FAM6_KABYLAKE_MOBILE:
325     + case INTEL_FAM6_KABYLAKE_DESKTOP:
326     + return true;
327     + }
328     + }
329     + return false;
330     +}
331     +
332     static void __init spectre_v2_select_mitigation(void)
333     {
334     enum spectre_v2_mitigation_cmd cmd = spectre_v2_parse_cmdline();
335     @@ -212,6 +230,24 @@ static void __init spectre_v2_select_mitigation(void)
336    
337     spectre_v2_enabled = mode;
338     pr_info("%s\n", spectre_v2_strings[mode]);
339     +
340     + /*
341     + * If neither SMEP or KPTI are available, there is a risk of
342     + * hitting userspace addresses in the RSB after a context switch
343     + * from a shallow call stack to a deeper one. To prevent this fill
344     + * the entire RSB, even when using IBRS.
345     + *
346     + * Skylake era CPUs have a separate issue with *underflow* of the
347     + * RSB, when they will predict 'ret' targets from the generic BTB.
348     + * The proper mitigation for this is IBRS. If IBRS is not supported
349     + * or deactivated in favour of retpolines the RSB fill on context
350     + * switch is required.
351     + */
352     + if ((!boot_cpu_has(X86_FEATURE_KAISER) &&
353     + !boot_cpu_has(X86_FEATURE_SMEP)) || is_skylake_era()) {
354     + setup_force_cpu_cap(X86_FEATURE_RSB_CTXSW);
355     + pr_info("Filling RSB on context switch\n");
356     + }
357     }
358    
359     #undef pr_fmt
360     diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
361     index 7b9ae04ddf5d..d198ae02f2b7 100644
362     --- a/arch/x86/kernel/cpu/common.c
363     +++ b/arch/x86/kernel/cpu/common.c
364     @@ -883,8 +883,8 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c)
365    
366     setup_force_cpu_cap(X86_FEATURE_ALWAYS);
367    
368     - /* Assume for now that ALL x86 CPUs are insecure */
369     - setup_force_cpu_bug(X86_BUG_CPU_MELTDOWN);
370     + if (c->x86_vendor != X86_VENDOR_AMD)
371     + setup_force_cpu_bug(X86_BUG_CPU_MELTDOWN);
372    
373     setup_force_cpu_bug(X86_BUG_SPECTRE_V1);
374     setup_force_cpu_bug(X86_BUG_SPECTRE_V2);
375     diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
376     index 8ca5f8ad008e..fe5cd6ea1f0e 100644
377     --- a/arch/x86/kernel/cpu/mcheck/mce.c
378     +++ b/arch/x86/kernel/cpu/mcheck/mce.c
379     @@ -1754,6 +1754,11 @@ static void unexpected_machine_check(struct pt_regs *regs, long error_code)
380     void (*machine_check_vector)(struct pt_regs *, long error_code) =
381     unexpected_machine_check;
382    
383     +dotraplinkage void do_mce(struct pt_regs *regs, long error_code)
384     +{
385     + machine_check_vector(regs, error_code);
386     +}
387     +
388     /*
389     * Called for each booted CPU to set up machine checks.
390     * Must be called with preempt off:
391     diff --git a/arch/x86/kernel/cpu/scattered.c b/arch/x86/kernel/cpu/scattered.c
392     index 1db8dc490b66..b0dd9aec183d 100644
393     --- a/arch/x86/kernel/cpu/scattered.c
394     +++ b/arch/x86/kernel/cpu/scattered.c
395     @@ -31,7 +31,6 @@ void init_scattered_cpuid_features(struct cpuinfo_x86 *c)
396     const struct cpuid_bit *cb;
397    
398     static const struct cpuid_bit cpuid_bits[] = {
399     - { X86_FEATURE_INTEL_PT, CR_EBX,25, 0x00000007, 0 },
400     { X86_FEATURE_AVX512_4VNNIW, CR_EDX, 2, 0x00000007, 0 },
401     { X86_FEATURE_AVX512_4FMAPS, CR_EDX, 3, 0x00000007, 0 },
402     { X86_FEATURE_APERFMPERF, CR_ECX, 0, 0x00000006, 0 },
403     diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c
404     index 4d74f7386a61..dc20da1c78f0 100644
405     --- a/arch/x86/kernel/kprobes/opt.c
406     +++ b/arch/x86/kernel/kprobes/opt.c
407     @@ -37,6 +37,7 @@
408     #include <asm/alternative.h>
409     #include <asm/insn.h>
410     #include <asm/debugreg.h>
411     +#include <asm/nospec-branch.h>
412    
413     #include "common.h"
414    
415     @@ -192,7 +193,7 @@ static int copy_optimized_instructions(u8 *dest, u8 *src)
416     }
417    
418     /* Check whether insn is indirect jump */
419     -static int insn_is_indirect_jump(struct insn *insn)
420     +static int __insn_is_indirect_jump(struct insn *insn)
421     {
422     return ((insn->opcode.bytes[0] == 0xff &&
423     (X86_MODRM_REG(insn->modrm.value) & 6) == 4) || /* Jump */
424     @@ -226,6 +227,26 @@ static int insn_jump_into_range(struct insn *insn, unsigned long start, int len)
425     return (start <= target && target <= start + len);
426     }
427    
428     +static int insn_is_indirect_jump(struct insn *insn)
429     +{
430     + int ret = __insn_is_indirect_jump(insn);
431     +
432     +#ifdef CONFIG_RETPOLINE
433     + /*
434     + * Jump to x86_indirect_thunk_* is treated as an indirect jump.
435     + * Note that even with CONFIG_RETPOLINE=y, the kernel compiled with
436     + * older gcc may use indirect jump. So we add this check instead of
437     + * replace indirect-jump check.
438     + */
439     + if (!ret)
440     + ret = insn_jump_into_range(insn,
441     + (unsigned long)__indirect_thunk_start,
442     + (unsigned long)__indirect_thunk_end -
443     + (unsigned long)__indirect_thunk_start);
444     +#endif
445     + return ret;
446     +}
447     +
448     /* Decode whole function to ensure any instructions don't jump into target */
449     static int can_optimize(unsigned long paddr)
450     {
451     diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
452     index 44bf5cf417d3..d07a9390023e 100644
453     --- a/arch/x86/kernel/tsc.c
454     +++ b/arch/x86/kernel/tsc.c
455     @@ -693,7 +693,6 @@ unsigned long native_calibrate_tsc(void)
456     case INTEL_FAM6_KABYLAKE_DESKTOP:
457     crystal_khz = 24000; /* 24.0 MHz */
458     break;
459     - case INTEL_FAM6_SKYLAKE_X:
460     case INTEL_FAM6_ATOM_DENVERTON:
461     crystal_khz = 25000; /* 25.0 MHz */
462     break;
463     diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
464     index dbf67f64d5ec..c7194e97c3d4 100644
465     --- a/arch/x86/kernel/vmlinux.lds.S
466     +++ b/arch/x86/kernel/vmlinux.lds.S
467     @@ -105,6 +105,13 @@ SECTIONS
468     SOFTIRQENTRY_TEXT
469     *(.fixup)
470     *(.gnu.warning)
471     +
472     +#ifdef CONFIG_RETPOLINE
473     + __indirect_thunk_start = .;
474     + *(.text.__x86.indirect_thunk)
475     + __indirect_thunk_end = .;
476     +#endif
477     +
478     /* End of text section */
479     _etext = .;
480     } :text = 0x9090
481     diff --git a/arch/x86/lib/retpoline.S b/arch/x86/lib/retpoline.S
482     index cb45c6cb465f..dfb2ba91b670 100644
483     --- a/arch/x86/lib/retpoline.S
484     +++ b/arch/x86/lib/retpoline.S
485     @@ -9,7 +9,7 @@
486     #include <asm/nospec-branch.h>
487    
488     .macro THUNK reg
489     - .section .text.__x86.indirect_thunk.\reg
490     + .section .text.__x86.indirect_thunk
491    
492     ENTRY(__x86_indirect_thunk_\reg)
493     CFI_STARTPROC
494     @@ -25,7 +25,8 @@ ENDPROC(__x86_indirect_thunk_\reg)
495     * than one per register with the correct names. So we do it
496     * the simple and nasty way...
497     */
498     -#define EXPORT_THUNK(reg) EXPORT_SYMBOL(__x86_indirect_thunk_ ## reg)
499     +#define __EXPORT_THUNK(sym) _ASM_NOKPROBE(sym); EXPORT_SYMBOL(sym)
500     +#define EXPORT_THUNK(reg) __EXPORT_THUNK(__x86_indirect_thunk_ ## reg)
501     #define GENERATE_THUNK(reg) THUNK reg ; EXPORT_THUNK(reg)
502    
503     GENERATE_THUNK(_ASM_AX)
504     diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
505     index 8b5ff88aa4f8..74dea7f14c20 100644
506     --- a/arch/x86/mm/fault.c
507     +++ b/arch/x86/mm/fault.c
508     @@ -191,14 +191,15 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr)
509     * 6. T1 : reaches here, sees vma_pkey(vma)=5, when we really
510     * faulted on a pte with its pkey=4.
511     */
512     -static void fill_sig_info_pkey(int si_code, siginfo_t *info, u32 *pkey)
513     +static void fill_sig_info_pkey(int si_signo, int si_code, siginfo_t *info,
514     + u32 *pkey)
515     {
516     /* This is effectively an #ifdef */
517     if (!boot_cpu_has(X86_FEATURE_OSPKE))
518     return;
519    
520     /* Fault not from Protection Keys: nothing to do */
521     - if (si_code != SEGV_PKUERR)
522     + if ((si_code != SEGV_PKUERR) || (si_signo != SIGSEGV))
523     return;
524     /*
525     * force_sig_info_fault() is called from a number of
526     @@ -237,7 +238,7 @@ force_sig_info_fault(int si_signo, int si_code, unsigned long address,
527     lsb = PAGE_SHIFT;
528     info.si_addr_lsb = lsb;
529    
530     - fill_sig_info_pkey(si_code, &info, pkey);
531     + fill_sig_info_pkey(si_signo, si_code, &info, pkey);
532    
533     force_sig_info(si_signo, &info, tsk);
534     }
535     diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
536     index 33e363dcc63b..aee39524375c 100644
537     --- a/drivers/ata/libata-core.c
538     +++ b/drivers/ata/libata-core.c
539     @@ -4322,6 +4322,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
540     * https://bugzilla.kernel.org/show_bug.cgi?id=121671
541     */
542     { "LITEON CX1-JB*-HP", NULL, ATA_HORKAGE_MAX_SEC_1024 },
543     + { "LITEON EP1-*", NULL, ATA_HORKAGE_MAX_SEC_1024 },
544    
545     /* Devices we expect to fail diagnostics */
546    
547     diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
548     index 39d28375aa37..0983470929bd 100644
549     --- a/drivers/infiniband/ulp/isert/ib_isert.c
550     +++ b/drivers/infiniband/ulp/isert/ib_isert.c
551     @@ -747,6 +747,7 @@ isert_connect_error(struct rdma_cm_id *cma_id)
552     {
553     struct isert_conn *isert_conn = cma_id->qp->qp_context;
554    
555     + ib_drain_qp(isert_conn->qp);
556     list_del_init(&isert_conn->node);
557     isert_conn->cm_id = NULL;
558     isert_put_conn(isert_conn);
559     diff --git a/drivers/input/misc/twl4030-vibra.c b/drivers/input/misc/twl4030-vibra.c
560     index caa5a62c42fb..15929d862459 100644
561     --- a/drivers/input/misc/twl4030-vibra.c
562     +++ b/drivers/input/misc/twl4030-vibra.c
563     @@ -178,12 +178,14 @@ static SIMPLE_DEV_PM_OPS(twl4030_vibra_pm_ops,
564     twl4030_vibra_suspend, twl4030_vibra_resume);
565    
566     static bool twl4030_vibra_check_coexist(struct twl4030_vibra_data *pdata,
567     - struct device_node *node)
568     + struct device_node *parent)
569     {
570     + struct device_node *node;
571     +
572     if (pdata && pdata->coexist)
573     return true;
574    
575     - node = of_find_node_by_name(node, "codec");
576     + node = of_get_child_by_name(parent, "codec");
577     if (node) {
578     of_node_put(node);
579     return true;
580     diff --git a/drivers/input/misc/twl6040-vibra.c b/drivers/input/misc/twl6040-vibra.c
581     index 5690eb7ff954..15e0d352c4cc 100644
582     --- a/drivers/input/misc/twl6040-vibra.c
583     +++ b/drivers/input/misc/twl6040-vibra.c
584     @@ -248,8 +248,7 @@ static int twl6040_vibra_probe(struct platform_device *pdev)
585     int vddvibr_uV = 0;
586     int error;
587    
588     - of_node_get(twl6040_core_dev->of_node);
589     - twl6040_core_node = of_find_node_by_name(twl6040_core_dev->of_node,
590     + twl6040_core_node = of_get_child_by_name(twl6040_core_dev->of_node,
591     "vibra");
592     if (!twl6040_core_node) {
593     dev_err(&pdev->dev, "parent of node is missing?\n");
594     diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
595     index f26807c75be4..af83d2e34913 100644
596     --- a/drivers/input/mouse/alps.c
597     +++ b/drivers/input/mouse/alps.c
598     @@ -1247,29 +1247,32 @@ static int alps_decode_ss4_v2(struct alps_fields *f,
599     case SS4_PACKET_ID_MULTI:
600     if (priv->flags & ALPS_BUTTONPAD) {
601     if (IS_SS4PLUS_DEV(priv->dev_id)) {
602     - f->mt[0].x = SS4_PLUS_BTL_MF_X_V2(p, 0);
603     - f->mt[1].x = SS4_PLUS_BTL_MF_X_V2(p, 1);
604     + f->mt[2].x = SS4_PLUS_BTL_MF_X_V2(p, 0);
605     + f->mt[3].x = SS4_PLUS_BTL_MF_X_V2(p, 1);
606     + no_data_x = SS4_PLUS_MFPACKET_NO_AX_BL;
607     } else {
608     f->mt[2].x = SS4_BTL_MF_X_V2(p, 0);
609     f->mt[3].x = SS4_BTL_MF_X_V2(p, 1);
610     + no_data_x = SS4_MFPACKET_NO_AX_BL;
611     }
612     + no_data_y = SS4_MFPACKET_NO_AY_BL;
613    
614     f->mt[2].y = SS4_BTL_MF_Y_V2(p, 0);
615     f->mt[3].y = SS4_BTL_MF_Y_V2(p, 1);
616     - no_data_x = SS4_MFPACKET_NO_AX_BL;
617     - no_data_y = SS4_MFPACKET_NO_AY_BL;
618     } else {
619     if (IS_SS4PLUS_DEV(priv->dev_id)) {
620     - f->mt[0].x = SS4_PLUS_STD_MF_X_V2(p, 0);
621     - f->mt[1].x = SS4_PLUS_STD_MF_X_V2(p, 1);
622     + f->mt[2].x = SS4_PLUS_STD_MF_X_V2(p, 0);
623     + f->mt[3].x = SS4_PLUS_STD_MF_X_V2(p, 1);
624     + no_data_x = SS4_PLUS_MFPACKET_NO_AX;
625     } else {
626     - f->mt[0].x = SS4_STD_MF_X_V2(p, 0);
627     - f->mt[1].x = SS4_STD_MF_X_V2(p, 1);
628     + f->mt[2].x = SS4_STD_MF_X_V2(p, 0);
629     + f->mt[3].x = SS4_STD_MF_X_V2(p, 1);
630     + no_data_x = SS4_MFPACKET_NO_AX;
631     }
632     + no_data_y = SS4_MFPACKET_NO_AY;
633     +
634     f->mt[2].y = SS4_STD_MF_Y_V2(p, 0);
635     f->mt[3].y = SS4_STD_MF_Y_V2(p, 1);
636     - no_data_x = SS4_MFPACKET_NO_AX;
637     - no_data_y = SS4_MFPACKET_NO_AY;
638     }
639    
640     f->first_mp = 0;
641     diff --git a/drivers/input/mouse/alps.h b/drivers/input/mouse/alps.h
642     index 793123717145..9bc2babd9256 100644
643     --- a/drivers/input/mouse/alps.h
644     +++ b/drivers/input/mouse/alps.h
645     @@ -120,10 +120,12 @@ enum SS4_PACKET_ID {
646     #define SS4_IS_5F_DETECTED(_b) ((_b[2] & 0x10) == 0x10)
647    
648    
649     -#define SS4_MFPACKET_NO_AX 8160 /* X-Coordinate value */
650     -#define SS4_MFPACKET_NO_AY 4080 /* Y-Coordinate value */
651     -#define SS4_MFPACKET_NO_AX_BL 8176 /* Buttonless X-Coordinate value */
652     -#define SS4_MFPACKET_NO_AY_BL 4088 /* Buttonless Y-Coordinate value */
653     +#define SS4_MFPACKET_NO_AX 8160 /* X-Coordinate value */
654     +#define SS4_MFPACKET_NO_AY 4080 /* Y-Coordinate value */
655     +#define SS4_MFPACKET_NO_AX_BL 8176 /* Buttonless X-Coord value */
656     +#define SS4_MFPACKET_NO_AY_BL 4088 /* Buttonless Y-Coord value */
657     +#define SS4_PLUS_MFPACKET_NO_AX 4080 /* SS4 PLUS, X */
658     +#define SS4_PLUS_MFPACKET_NO_AX_BL 4088 /* Buttonless SS4 PLUS, X */
659    
660     /*
661     * enum V7_PACKET_ID - defines the packet type for V7
662     diff --git a/drivers/input/touchscreen/88pm860x-ts.c b/drivers/input/touchscreen/88pm860x-ts.c
663     index 251ff2aa0633..7a0dbce4dae9 100644
664     --- a/drivers/input/touchscreen/88pm860x-ts.c
665     +++ b/drivers/input/touchscreen/88pm860x-ts.c
666     @@ -126,7 +126,7 @@ static int pm860x_touch_dt_init(struct platform_device *pdev,
667     int data, n, ret;
668     if (!np)
669     return -ENODEV;
670     - np = of_find_node_by_name(np, "touch");
671     + np = of_get_child_by_name(np, "touch");
672     if (!np) {
673     dev_err(&pdev->dev, "Can't find touch node\n");
674     return -EINVAL;
675     @@ -144,13 +144,13 @@ static int pm860x_touch_dt_init(struct platform_device *pdev,
676     if (data) {
677     ret = pm860x_reg_write(i2c, PM8607_GPADC_MISC1, data);
678     if (ret < 0)
679     - return -EINVAL;
680     + goto err_put_node;
681     }
682     /* set tsi prebias time */
683     if (!of_property_read_u32(np, "marvell,88pm860x-tsi-prebias", &data)) {
684     ret = pm860x_reg_write(i2c, PM8607_TSI_PREBIAS, data);
685     if (ret < 0)
686     - return -EINVAL;
687     + goto err_put_node;
688     }
689     /* set prebias & prechg time of pen detect */
690     data = 0;
691     @@ -161,10 +161,18 @@ static int pm860x_touch_dt_init(struct platform_device *pdev,
692     if (data) {
693     ret = pm860x_reg_write(i2c, PM8607_PD_PREBIAS, data);
694     if (ret < 0)
695     - return -EINVAL;
696     + goto err_put_node;
697     }
698     of_property_read_u32(np, "marvell,88pm860x-resistor-X", res_x);
699     +
700     + of_node_put(np);
701     +
702     return 0;
703     +
704     +err_put_node:
705     + of_node_put(np);
706     +
707     + return -EINVAL;
708     }
709     #else
710     #define pm860x_touch_dt_init(x, y, z) (-1)
711     diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c
712     index 4477bf930cf4..e976f4f39334 100644
713     --- a/drivers/md/dm-thin-metadata.c
714     +++ b/drivers/md/dm-thin-metadata.c
715     @@ -81,10 +81,14 @@
716     #define SECTOR_TO_BLOCK_SHIFT 3
717    
718     /*
719     + * For btree insert:
720     * 3 for btree insert +
721     * 2 for btree lookup used within space map
722     + * For btree remove:
723     + * 2 for shadow spine +
724     + * 4 for rebalance 3 child node
725     */
726     -#define THIN_MAX_CONCURRENT_LOCKS 5
727     +#define THIN_MAX_CONCURRENT_LOCKS 6
728    
729     /* This should be plenty */
730     #define SPACE_MAP_ROOT_SIZE 128
731     diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c
732     index 7a75b5010f73..e4ececd3df00 100644
733     --- a/drivers/md/persistent-data/dm-btree.c
734     +++ b/drivers/md/persistent-data/dm-btree.c
735     @@ -678,23 +678,8 @@ static int btree_split_beneath(struct shadow_spine *s, uint64_t key)
736     pn->keys[1] = rn->keys[0];
737     memcpy_disk(value_ptr(pn, 1), &val, sizeof(__le64));
738    
739     - /*
740     - * rejig the spine. This is ugly, since it knows too
741     - * much about the spine
742     - */
743     - if (s->nodes[0] != new_parent) {
744     - unlock_block(s->info, s->nodes[0]);
745     - s->nodes[0] = new_parent;
746     - }
747     - if (key < le64_to_cpu(rn->keys[0])) {
748     - unlock_block(s->info, right);
749     - s->nodes[1] = left;
750     - } else {
751     - unlock_block(s->info, left);
752     - s->nodes[1] = right;
753     - }
754     - s->count = 2;
755     -
756     + unlock_block(s->info, left);
757     + unlock_block(s->info, right);
758     return 0;
759     }
760    
761     diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
762     index 304732550f0a..7f5ec40e2b4d 100644
763     --- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
764     +++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c
765     @@ -184,7 +184,7 @@ static int pcan_usb_fd_send_cmd(struct peak_usb_device *dev, void *cmd_tail)
766     void *cmd_head = pcan_usb_fd_cmd_buffer(dev);
767     int err = 0;
768     u8 *packet_ptr;
769     - int i, n = 1, packet_len;
770     + int packet_len;
771     ptrdiff_t cmd_len;
772    
773     /* usb device unregistered? */
774     @@ -201,17 +201,13 @@ static int pcan_usb_fd_send_cmd(struct peak_usb_device *dev, void *cmd_tail)
775     }
776    
777     packet_ptr = cmd_head;
778     + packet_len = cmd_len;
779    
780     /* firmware is not able to re-assemble 512 bytes buffer in full-speed */
781     - if ((dev->udev->speed != USB_SPEED_HIGH) &&
782     - (cmd_len > PCAN_UFD_LOSPD_PKT_SIZE)) {
783     - packet_len = PCAN_UFD_LOSPD_PKT_SIZE;
784     - n += cmd_len / packet_len;
785     - } else {
786     - packet_len = cmd_len;
787     - }
788     + if (unlikely(dev->udev->speed != USB_SPEED_HIGH))
789     + packet_len = min(packet_len, PCAN_UFD_LOSPD_PKT_SIZE);
790    
791     - for (i = 0; i < n; i++) {
792     + do {
793     err = usb_bulk_msg(dev->udev,
794     usb_sndbulkpipe(dev->udev,
795     PCAN_USBPRO_EP_CMDOUT),
796     @@ -224,7 +220,12 @@ static int pcan_usb_fd_send_cmd(struct peak_usb_device *dev, void *cmd_tail)
797     }
798    
799     packet_ptr += packet_len;
800     - }
801     + cmd_len -= packet_len;
802     +
803     + if (cmd_len < PCAN_UFD_LOSPD_PKT_SIZE)
804     + packet_len = cmd_len;
805     +
806     + } while (packet_len > 0);
807    
808     return err;
809     }
810     diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c
811     index 94733f73d37f..7121453ec047 100644
812     --- a/drivers/nvdimm/btt.c
813     +++ b/drivers/nvdimm/btt.c
814     @@ -183,13 +183,13 @@ static int btt_map_read(struct arena_info *arena, u32 lba, u32 *mapping,
815     return ret;
816     }
817    
818     -static int btt_log_read_pair(struct arena_info *arena, u32 lane,
819     - struct log_entry *ent)
820     +static int btt_log_group_read(struct arena_info *arena, u32 lane,
821     + struct log_group *log)
822     {
823     - WARN_ON(!ent);
824     + WARN_ON(!log);
825     return arena_read_bytes(arena,
826     - arena->logoff + (2 * lane * LOG_ENT_SIZE), ent,
827     - 2 * LOG_ENT_SIZE);
828     + arena->logoff + (lane * LOG_GRP_SIZE), log,
829     + LOG_GRP_SIZE);
830     }
831    
832     static struct dentry *debugfs_root;
833     @@ -229,6 +229,8 @@ static void arena_debugfs_init(struct arena_info *a, struct dentry *parent,
834     debugfs_create_x64("logoff", S_IRUGO, d, &a->logoff);
835     debugfs_create_x64("info2off", S_IRUGO, d, &a->info2off);
836     debugfs_create_x32("flags", S_IRUGO, d, &a->flags);
837     + debugfs_create_u32("log_index_0", S_IRUGO, d, &a->log_index[0]);
838     + debugfs_create_u32("log_index_1", S_IRUGO, d, &a->log_index[1]);
839     }
840    
841     static void btt_debugfs_init(struct btt *btt)
842     @@ -247,6 +249,11 @@ static void btt_debugfs_init(struct btt *btt)
843     }
844     }
845    
846     +static u32 log_seq(struct log_group *log, int log_idx)
847     +{
848     + return le32_to_cpu(log->ent[log_idx].seq);
849     +}
850     +
851     /*
852     * This function accepts two log entries, and uses the
853     * sequence number to find the 'older' entry.
854     @@ -256,8 +263,10 @@ static void btt_debugfs_init(struct btt *btt)
855     *
856     * TODO The logic feels a bit kludge-y. make it better..
857     */
858     -static int btt_log_get_old(struct log_entry *ent)
859     +static int btt_log_get_old(struct arena_info *a, struct log_group *log)
860     {
861     + int idx0 = a->log_index[0];
862     + int idx1 = a->log_index[1];
863     int old;
864    
865     /*
866     @@ -265,23 +274,23 @@ static int btt_log_get_old(struct log_entry *ent)
867     * the next time, the following logic works out to put this
868     * (next) entry into [1]
869     */
870     - if (ent[0].seq == 0) {
871     - ent[0].seq = cpu_to_le32(1);
872     + if (log_seq(log, idx0) == 0) {
873     + log->ent[idx0].seq = cpu_to_le32(1);
874     return 0;
875     }
876    
877     - if (ent[0].seq == ent[1].seq)
878     + if (log_seq(log, idx0) == log_seq(log, idx1))
879     return -EINVAL;
880     - if (le32_to_cpu(ent[0].seq) + le32_to_cpu(ent[1].seq) > 5)
881     + if (log_seq(log, idx0) + log_seq(log, idx1) > 5)
882     return -EINVAL;
883    
884     - if (le32_to_cpu(ent[0].seq) < le32_to_cpu(ent[1].seq)) {
885     - if (le32_to_cpu(ent[1].seq) - le32_to_cpu(ent[0].seq) == 1)
886     + if (log_seq(log, idx0) < log_seq(log, idx1)) {
887     + if ((log_seq(log, idx1) - log_seq(log, idx0)) == 1)
888     old = 0;
889     else
890     old = 1;
891     } else {
892     - if (le32_to_cpu(ent[0].seq) - le32_to_cpu(ent[1].seq) == 1)
893     + if ((log_seq(log, idx0) - log_seq(log, idx1)) == 1)
894     old = 1;
895     else
896     old = 0;
897     @@ -306,17 +315,18 @@ static int btt_log_read(struct arena_info *arena, u32 lane,
898     {
899     int ret;
900     int old_ent, ret_ent;
901     - struct log_entry log[2];
902     + struct log_group log;
903    
904     - ret = btt_log_read_pair(arena, lane, log);
905     + ret = btt_log_group_read(arena, lane, &log);
906     if (ret)
907     return -EIO;
908    
909     - old_ent = btt_log_get_old(log);
910     + old_ent = btt_log_get_old(arena, &log);
911     if (old_ent < 0 || old_ent > 1) {
912     dev_info(to_dev(arena),
913     "log corruption (%d): lane %d seq [%d, %d]\n",
914     - old_ent, lane, log[0].seq, log[1].seq);
915     + old_ent, lane, log.ent[arena->log_index[0]].seq,
916     + log.ent[arena->log_index[1]].seq);
917     /* TODO set error state? */
918     return -EIO;
919     }
920     @@ -324,7 +334,7 @@ static int btt_log_read(struct arena_info *arena, u32 lane,
921     ret_ent = (old_flag ? old_ent : (1 - old_ent));
922    
923     if (ent != NULL)
924     - memcpy(ent, &log[ret_ent], LOG_ENT_SIZE);
925     + memcpy(ent, &log.ent[arena->log_index[ret_ent]], LOG_ENT_SIZE);
926    
927     return ret_ent;
928     }
929     @@ -338,17 +348,13 @@ static int __btt_log_write(struct arena_info *arena, u32 lane,
930     u32 sub, struct log_entry *ent)
931     {
932     int ret;
933     - /*
934     - * Ignore the padding in log_entry for calculating log_half.
935     - * The entry is 'committed' when we write the sequence number,
936     - * and we want to ensure that that is the last thing written.
937     - * We don't bother writing the padding as that would be extra
938     - * media wear and write amplification
939     - */
940     - unsigned int log_half = (LOG_ENT_SIZE - 2 * sizeof(u64)) / 2;
941     - u64 ns_off = arena->logoff + (((2 * lane) + sub) * LOG_ENT_SIZE);
942     + u32 group_slot = arena->log_index[sub];
943     + unsigned int log_half = LOG_ENT_SIZE / 2;
944     void *src = ent;
945     + u64 ns_off;
946    
947     + ns_off = arena->logoff + (lane * LOG_GRP_SIZE) +
948     + (group_slot * LOG_ENT_SIZE);
949     /* split the 16B write into atomic, durable halves */
950     ret = arena_write_bytes(arena, ns_off, src, log_half);
951     if (ret)
952     @@ -419,16 +425,16 @@ static int btt_log_init(struct arena_info *arena)
953     {
954     int ret;
955     u32 i;
956     - struct log_entry log, zerolog;
957     + struct log_entry ent, zerolog;
958    
959     memset(&zerolog, 0, sizeof(zerolog));
960    
961     for (i = 0; i < arena->nfree; i++) {
962     - log.lba = cpu_to_le32(i);
963     - log.old_map = cpu_to_le32(arena->external_nlba + i);
964     - log.new_map = cpu_to_le32(arena->external_nlba + i);
965     - log.seq = cpu_to_le32(LOG_SEQ_INIT);
966     - ret = __btt_log_write(arena, i, 0, &log);
967     + ent.lba = cpu_to_le32(i);
968     + ent.old_map = cpu_to_le32(arena->external_nlba + i);
969     + ent.new_map = cpu_to_le32(arena->external_nlba + i);
970     + ent.seq = cpu_to_le32(LOG_SEQ_INIT);
971     + ret = __btt_log_write(arena, i, 0, &ent);
972     if (ret)
973     return ret;
974     ret = __btt_log_write(arena, i, 1, &zerolog);
975     @@ -490,6 +496,123 @@ static int btt_freelist_init(struct arena_info *arena)
976     return 0;
977     }
978    
979     +static bool ent_is_padding(struct log_entry *ent)
980     +{
981     + return (ent->lba == 0) && (ent->old_map == 0) && (ent->new_map == 0)
982     + && (ent->seq == 0);
983     +}
984     +
985     +/*
986     + * Detecting valid log indices: We read a log group (see the comments in btt.h
987     + * for a description of a 'log_group' and its 'slots'), and iterate over its
988     + * four slots. We expect that a padding slot will be all-zeroes, and use this
989     + * to detect a padding slot vs. an actual entry.
990     + *
991     + * If a log_group is in the initial state, i.e. hasn't been used since the
992     + * creation of this BTT layout, it will have three of the four slots with
993     + * zeroes. We skip over these log_groups for the detection of log_index. If
994     + * all log_groups are in the initial state (i.e. the BTT has never been
995     + * written to), it is safe to assume the 'new format' of log entries in slots
996     + * (0, 1).
997     + */
998     +static int log_set_indices(struct arena_info *arena)
999     +{
1000     + bool idx_set = false, initial_state = true;
1001     + int ret, log_index[2] = {-1, -1};
1002     + u32 i, j, next_idx = 0;
1003     + struct log_group log;
1004     + u32 pad_count = 0;
1005     +
1006     + for (i = 0; i < arena->nfree; i++) {
1007     + ret = btt_log_group_read(arena, i, &log);
1008     + if (ret < 0)
1009     + return ret;
1010     +
1011     + for (j = 0; j < 4; j++) {
1012     + if (!idx_set) {
1013     + if (ent_is_padding(&log.ent[j])) {
1014     + pad_count++;
1015     + continue;
1016     + } else {
1017     + /* Skip if index has been recorded */
1018     + if ((next_idx == 1) &&
1019     + (j == log_index[0]))
1020     + continue;
1021     + /* valid entry, record index */
1022     + log_index[next_idx] = j;
1023     + next_idx++;
1024     + }
1025     + if (next_idx == 2) {
1026     + /* two valid entries found */
1027     + idx_set = true;
1028     + } else if (next_idx > 2) {
1029     + /* too many valid indices */
1030     + return -ENXIO;
1031     + }
1032     + } else {
1033     + /*
1034     + * once the indices have been set, just verify
1035     + * that all subsequent log groups are either in
1036     + * their initial state or follow the same
1037     + * indices.
1038     + */
1039     + if (j == log_index[0]) {
1040     + /* entry must be 'valid' */
1041     + if (ent_is_padding(&log.ent[j]))
1042     + return -ENXIO;
1043     + } else if (j == log_index[1]) {
1044     + ;
1045     + /*
1046     + * log_index[1] can be padding if the
1047     + * lane never got used and it is still
1048     + * in the initial state (three 'padding'
1049     + * entries)
1050     + */
1051     + } else {
1052     + /* entry must be invalid (padding) */
1053     + if (!ent_is_padding(&log.ent[j]))
1054     + return -ENXIO;
1055     + }
1056     + }
1057     + }
1058     + /*
1059     + * If any of the log_groups have more than one valid,
1060     + * non-padding entry, then the we are no longer in the
1061     + * initial_state
1062     + */
1063     + if (pad_count < 3)
1064     + initial_state = false;
1065     + pad_count = 0;
1066     + }
1067     +
1068     + if (!initial_state && !idx_set)
1069     + return -ENXIO;
1070     +
1071     + /*
1072     + * If all the entries in the log were in the initial state,
1073     + * assume new padding scheme
1074     + */
1075     + if (initial_state)
1076     + log_index[1] = 1;
1077     +
1078     + /*
1079     + * Only allow the known permutations of log/padding indices,
1080     + * i.e. (0, 1), and (0, 2)
1081     + */
1082     + if ((log_index[0] == 0) && ((log_index[1] == 1) || (log_index[1] == 2)))
1083     + ; /* known index possibilities */
1084     + else {
1085     + dev_err(to_dev(arena), "Found an unknown padding scheme\n");
1086     + return -ENXIO;
1087     + }
1088     +
1089     + arena->log_index[0] = log_index[0];
1090     + arena->log_index[1] = log_index[1];
1091     + dev_dbg(to_dev(arena), "log_index_0 = %d\n", log_index[0]);
1092     + dev_dbg(to_dev(arena), "log_index_1 = %d\n", log_index[1]);
1093     + return 0;
1094     +}
1095     +
1096     static int btt_rtt_init(struct arena_info *arena)
1097     {
1098     arena->rtt = kcalloc(arena->nfree, sizeof(u32), GFP_KERNEL);
1099     @@ -545,8 +668,7 @@ static struct arena_info *alloc_arena(struct btt *btt, size_t size,
1100     available -= 2 * BTT_PG_SIZE;
1101    
1102     /* The log takes a fixed amount of space based on nfree */
1103     - logsize = roundup(2 * arena->nfree * sizeof(struct log_entry),
1104     - BTT_PG_SIZE);
1105     + logsize = roundup(arena->nfree * LOG_GRP_SIZE, BTT_PG_SIZE);
1106     available -= logsize;
1107    
1108     /* Calculate optimal split between map and data area */
1109     @@ -563,6 +685,10 @@ static struct arena_info *alloc_arena(struct btt *btt, size_t size,
1110     arena->mapoff = arena->dataoff + datasize;
1111     arena->logoff = arena->mapoff + mapsize;
1112     arena->info2off = arena->logoff + logsize;
1113     +
1114     + /* Default log indices are (0,1) */
1115     + arena->log_index[0] = 0;
1116     + arena->log_index[1] = 1;
1117     return arena;
1118     }
1119    
1120     @@ -653,6 +779,13 @@ static int discover_arenas(struct btt *btt)
1121     arena->external_lba_start = cur_nlba;
1122     parse_arena_meta(arena, super, cur_off);
1123    
1124     + ret = log_set_indices(arena);
1125     + if (ret) {
1126     + dev_err(to_dev(arena),
1127     + "Unable to deduce log/padding indices\n");
1128     + goto out;
1129     + }
1130     +
1131     ret = btt_freelist_init(arena);
1132     if (ret)
1133     goto out;
1134     diff --git a/drivers/nvdimm/btt.h b/drivers/nvdimm/btt.h
1135     index b2f8651e5395..0f80b6b3d4a3 100644
1136     --- a/drivers/nvdimm/btt.h
1137     +++ b/drivers/nvdimm/btt.h
1138     @@ -26,6 +26,7 @@
1139     #define MAP_ERR_MASK (1 << MAP_ERR_SHIFT)
1140     #define MAP_LBA_MASK (~((1 << MAP_TRIM_SHIFT) | (1 << MAP_ERR_SHIFT)))
1141     #define MAP_ENT_NORMAL 0xC0000000
1142     +#define LOG_GRP_SIZE sizeof(struct log_group)
1143     #define LOG_ENT_SIZE sizeof(struct log_entry)
1144     #define ARENA_MIN_SIZE (1UL << 24) /* 16 MB */
1145     #define ARENA_MAX_SIZE (1ULL << 39) /* 512 GB */
1146     @@ -44,12 +45,52 @@ enum btt_init_state {
1147     INIT_READY
1148     };
1149    
1150     +/*
1151     + * A log group represents one log 'lane', and consists of four log entries.
1152     + * Two of the four entries are valid entries, and the remaining two are
1153     + * padding. Due to an old bug in the padding location, we need to perform a
1154     + * test to determine the padding scheme being used, and use that scheme
1155     + * thereafter.
1156     + *
1157     + * In kernels prior to 4.15, 'log group' would have actual log entries at
1158     + * indices (0, 2) and padding at indices (1, 3), where as the correct/updated
1159     + * format has log entries at indices (0, 1) and padding at indices (2, 3).
1160     + *
1161     + * Old (pre 4.15) format:
1162     + * +-----------------+-----------------+
1163     + * | ent[0] | ent[1] |
1164     + * | 16B | 16B |
1165     + * | lba/old/new/seq | pad |
1166     + * +-----------------------------------+
1167     + * | ent[2] | ent[3] |
1168     + * | 16B | 16B |
1169     + * | lba/old/new/seq | pad |
1170     + * +-----------------+-----------------+
1171     + *
1172     + * New format:
1173     + * +-----------------+-----------------+
1174     + * | ent[0] | ent[1] |
1175     + * | 16B | 16B |
1176     + * | lba/old/new/seq | lba/old/new/seq |
1177     + * +-----------------------------------+
1178     + * | ent[2] | ent[3] |
1179     + * | 16B | 16B |
1180     + * | pad | pad |
1181     + * +-----------------+-----------------+
1182     + *
1183     + * We detect during start-up which format is in use, and set
1184     + * arena->log_index[(0, 1)] with the detected format.
1185     + */
1186     +
1187     struct log_entry {
1188     __le32 lba;
1189     __le32 old_map;
1190     __le32 new_map;
1191     __le32 seq;
1192     - __le64 padding[2];
1193     +};
1194     +
1195     +struct log_group {
1196     + struct log_entry ent[4];
1197     };
1198    
1199     struct btt_sb {
1200     @@ -117,6 +158,7 @@ struct aligned_lock {
1201     * @list: List head for list of arenas
1202     * @debugfs_dir: Debugfs dentry
1203     * @flags: Arena flags - may signify error states.
1204     + * @log_index: Indices of the valid log entries in a log_group
1205     *
1206     * arena_info is a per-arena handle. Once an arena is narrowed down for an
1207     * IO, this struct is passed around for the duration of the IO.
1208     @@ -147,6 +189,7 @@ struct arena_info {
1209     struct dentry *debugfs_dir;
1210     /* Arena flags */
1211     u32 flags;
1212     + int log_index[2];
1213     };
1214    
1215     /**
1216     diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
1217     index a268f4d6f3e9..48a365e303e5 100644
1218     --- a/drivers/phy/phy-core.c
1219     +++ b/drivers/phy/phy-core.c
1220     @@ -395,6 +395,10 @@ static struct phy *_of_phy_get(struct device_node *np, int index)
1221     if (ret)
1222     return ERR_PTR(-ENODEV);
1223    
1224     + /* This phy type handled by the usb-phy subsystem for now */
1225     + if (of_device_is_compatible(args.np, "usb-nop-xceiv"))
1226     + return ERR_PTR(-ENODEV);
1227     +
1228     mutex_lock(&phy_provider_mutex);
1229     phy_provider = of_phy_provider_lookup(args.np);
1230     if (IS_ERR(phy_provider) || !try_module_get(phy_provider->owner)) {
1231     diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
1232     index 99623701fc3d..0b8db8a74d50 100644
1233     --- a/drivers/scsi/hpsa.c
1234     +++ b/drivers/scsi/hpsa.c
1235     @@ -3857,6 +3857,7 @@ static int hpsa_update_device_info(struct ctlr_info *h,
1236     if (h->fw_support & MISC_FW_RAID_OFFLOAD_BASIC)
1237     hpsa_get_ioaccel_status(h, scsi3addr, this_device);
1238     volume_offline = hpsa_volume_offline(h, scsi3addr);
1239     + this_device->volume_offline = volume_offline;
1240     if (volume_offline == HPSA_LV_FAILED) {
1241     rc = HPSA_LV_FAILED;
1242     dev_err(&h->pdev->dev,
1243     diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
1244     index 184c7db1e0ca..cd9537ddc19f 100644
1245     --- a/drivers/scsi/sg.c
1246     +++ b/drivers/scsi/sg.c
1247     @@ -149,7 +149,6 @@ typedef struct sg_fd { /* holds the state of a file descriptor */
1248     struct list_head rq_list; /* head of request list */
1249     struct fasync_struct *async_qp; /* used by asynchronous notification */
1250     Sg_request req_arr[SG_MAX_QUEUE]; /* used as singly-linked list */
1251     - char low_dma; /* as in parent but possibly overridden to 1 */
1252     char force_packid; /* 1 -> pack_id input to read(), 0 -> ignored */
1253     char cmd_q; /* 1 -> allow command queuing, 0 -> don't */
1254     unsigned char next_cmd_len; /* 0: automatic, >0: use on next write() */
1255     @@ -922,24 +921,14 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg)
1256     /* strange ..., for backward compatibility */
1257     return sfp->timeout_user;
1258     case SG_SET_FORCE_LOW_DMA:
1259     - result = get_user(val, ip);
1260     - if (result)
1261     - return result;
1262     - if (val) {
1263     - sfp->low_dma = 1;
1264     - if ((0 == sfp->low_dma) && !sfp->res_in_use) {
1265     - val = (int) sfp->reserve.bufflen;
1266     - sg_remove_scat(sfp, &sfp->reserve);
1267     - sg_build_reserve(sfp, val);
1268     - }
1269     - } else {
1270     - if (atomic_read(&sdp->detaching))
1271     - return -ENODEV;
1272     - sfp->low_dma = sdp->device->host->unchecked_isa_dma;
1273     - }
1274     + /*
1275     + * N.B. This ioctl never worked properly, but failed to
1276     + * return an error value. So returning '0' to keep compability
1277     + * with legacy applications.
1278     + */
1279     return 0;
1280     case SG_GET_LOW_DMA:
1281     - return put_user((int) sfp->low_dma, ip);
1282     + return put_user((int) sdp->device->host->unchecked_isa_dma, ip);
1283     case SG_GET_SCSI_ID:
1284     if (!access_ok(VERIFY_WRITE, p, sizeof (sg_scsi_id_t)))
1285     return -EFAULT;
1286     @@ -1860,6 +1849,7 @@ sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
1287     int sg_tablesize = sfp->parentdp->sg_tablesize;
1288     int blk_size = buff_size, order;
1289     gfp_t gfp_mask = GFP_ATOMIC | __GFP_COMP | __GFP_NOWARN;
1290     + struct sg_device *sdp = sfp->parentdp;
1291    
1292     if (blk_size < 0)
1293     return -EFAULT;
1294     @@ -1885,7 +1875,7 @@ sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
1295     scatter_elem_sz_prev = num;
1296     }
1297    
1298     - if (sfp->low_dma)
1299     + if (sdp->device->host->unchecked_isa_dma)
1300     gfp_mask |= GFP_DMA;
1301    
1302     if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
1303     @@ -2148,8 +2138,6 @@ sg_add_sfp(Sg_device * sdp)
1304     sfp->timeout = SG_DEFAULT_TIMEOUT;
1305     sfp->timeout_user = SG_DEFAULT_TIMEOUT_USER;
1306     sfp->force_packid = SG_DEF_FORCE_PACK_ID;
1307     - sfp->low_dma = (SG_DEF_FORCE_LOW_DMA == 0) ?
1308     - sdp->device->host->unchecked_isa_dma : 1;
1309     sfp->cmd_q = SG_DEF_COMMAND_Q;
1310     sfp->keep_orphan = SG_DEF_KEEP_ORPHAN;
1311     sfp->parentdp = sdp;
1312     @@ -2608,7 +2596,7 @@ static void sg_proc_debug_helper(struct seq_file *s, Sg_device * sdp)
1313     jiffies_to_msecs(fp->timeout),
1314     fp->reserve.bufflen,
1315     (int) fp->reserve.k_use_sg,
1316     - (int) fp->low_dma);
1317     + (int) sdp->device->host->unchecked_isa_dma);
1318     seq_printf(s, " cmd_q=%d f_packid=%d k_orphan=%d closed=0\n",
1319     (int) fp->cmd_q, (int) fp->force_packid,
1320     (int) fp->keep_orphan);
1321     diff --git a/drivers/usb/usbip/vhci_sysfs.c b/drivers/usb/usbip/vhci_sysfs.c
1322     index c404017c1b5a..b96e5b189269 100644
1323     --- a/drivers/usb/usbip/vhci_sysfs.c
1324     +++ b/drivers/usb/usbip/vhci_sysfs.c
1325     @@ -361,6 +361,7 @@ static void set_status_attr(int id)
1326     status->attr.attr.name = status->name;
1327     status->attr.attr.mode = S_IRUGO;
1328     status->attr.show = status_show;
1329     + sysfs_attr_init(&status->attr.attr);
1330     }
1331    
1332     static int init_status_attrs(void)
1333     diff --git a/fs/pipe.c b/fs/pipe.c
1334     index 8e0d9f26dfad..9faecf1b4a27 100644
1335     --- a/fs/pipe.c
1336     +++ b/fs/pipe.c
1337     @@ -1018,13 +1018,19 @@ const struct file_operations pipefifo_fops = {
1338    
1339     /*
1340     * Currently we rely on the pipe array holding a power-of-2 number
1341     - * of pages.
1342     + * of pages. Returns 0 on error.
1343     */
1344     static inline unsigned int round_pipe_size(unsigned int size)
1345     {
1346     unsigned long nr_pages;
1347    
1348     + if (size < pipe_min_size)
1349     + size = pipe_min_size;
1350     +
1351     nr_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
1352     + if (nr_pages == 0)
1353     + return 0;
1354     +
1355     return roundup_pow_of_two(nr_pages) << PAGE_SHIFT;
1356     }
1357    
1358     @@ -1040,6 +1046,8 @@ static long pipe_set_size(struct pipe_inode_info *pipe, unsigned long arg)
1359     long ret = 0;
1360    
1361     size = round_pipe_size(arg);
1362     + if (size == 0)
1363     + return -EINVAL;
1364     nr_pages = size >> PAGE_SHIFT;
1365    
1366     if (!nr_pages)
1367     @@ -1123,13 +1131,18 @@ static long pipe_set_size(struct pipe_inode_info *pipe, unsigned long arg)
1368     int pipe_proc_fn(struct ctl_table *table, int write, void __user *buf,
1369     size_t *lenp, loff_t *ppos)
1370     {
1371     + unsigned int rounded_pipe_max_size;
1372     int ret;
1373    
1374     ret = proc_dointvec_minmax(table, write, buf, lenp, ppos);
1375     if (ret < 0 || !write)
1376     return ret;
1377    
1378     - pipe_max_size = round_pipe_size(pipe_max_size);
1379     + rounded_pipe_max_size = round_pipe_size(pipe_max_size);
1380     + if (rounded_pipe_max_size == 0)
1381     + return -EINVAL;
1382     +
1383     + pipe_max_size = rounded_pipe_max_size;
1384     return ret;
1385     }
1386    
1387     diff --git a/fs/proc/array.c b/fs/proc/array.c
1388     index c932ec454625..794b52a6c20d 100644
1389     --- a/fs/proc/array.c
1390     +++ b/fs/proc/array.c
1391     @@ -423,8 +423,11 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
1392     * safe because the task has stopped executing permanently.
1393     */
1394     if (permitted && (task->flags & PF_DUMPCORE)) {
1395     - eip = KSTK_EIP(task);
1396     - esp = KSTK_ESP(task);
1397     + if (try_get_task_stack(task)) {
1398     + eip = KSTK_EIP(task);
1399     + esp = KSTK_ESP(task);
1400     + put_task_stack(task);
1401     + }
1402     }
1403     }
1404    
1405     diff --git a/include/linux/vermagic.h b/include/linux/vermagic.h
1406     index 6f8fbcf10dfb..a3d04934aa96 100644
1407     --- a/include/linux/vermagic.h
1408     +++ b/include/linux/vermagic.h
1409     @@ -24,10 +24,16 @@
1410     #ifndef MODULE_ARCH_VERMAGIC
1411     #define MODULE_ARCH_VERMAGIC ""
1412     #endif
1413     +#ifdef RETPOLINE
1414     +#define MODULE_VERMAGIC_RETPOLINE "retpoline "
1415     +#else
1416     +#define MODULE_VERMAGIC_RETPOLINE ""
1417     +#endif
1418    
1419     #define VERMAGIC_STRING \
1420     UTS_RELEASE " " \
1421     MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT \
1422     MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS \
1423     - MODULE_ARCH_VERMAGIC
1424     + MODULE_ARCH_VERMAGIC \
1425     + MODULE_VERMAGIC_RETPOLINE
1426    
1427     diff --git a/include/scsi/sg.h b/include/scsi/sg.h
1428     index 3afec7032448..20bc71c3e0b8 100644
1429     --- a/include/scsi/sg.h
1430     +++ b/include/scsi/sg.h
1431     @@ -197,7 +197,6 @@ typedef struct sg_req_info { /* used by SG_GET_REQUEST_TABLE ioctl() */
1432     #define SG_DEFAULT_RETRIES 0
1433    
1434     /* Defaults, commented if they differ from original sg driver */
1435     -#define SG_DEF_FORCE_LOW_DMA 0 /* was 1 -> memory below 16MB on i386 */
1436     #define SG_DEF_FORCE_PACK_ID 0
1437     #define SG_DEF_KEEP_ORPHAN 0
1438     #define SG_DEF_RESERVED_SIZE SG_SCATTER_SZ /* load time option */
1439     diff --git a/kernel/futex.c b/kernel/futex.c
1440     index 88bad86180ac..bb2265ae5cbc 100644
1441     --- a/kernel/futex.c
1442     +++ b/kernel/futex.c
1443     @@ -1711,6 +1711,9 @@ static int futex_requeue(u32 __user *uaddr1, unsigned int flags,
1444     struct futex_q *this, *next;
1445     WAKE_Q(wake_q);
1446    
1447     + if (nr_wake < 0 || nr_requeue < 0)
1448     + return -EINVAL;
1449     +
1450     if (requeue_pi) {
1451     /*
1452     * Requeue PI only works on two distinct uaddrs. This
1453     diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
1454     index df5c32a0c6ed..3042881169b4 100644
1455     --- a/kernel/sched/deadline.c
1456     +++ b/kernel/sched/deadline.c
1457     @@ -723,6 +723,8 @@ static inline void dl_check_constrained_dl(struct sched_dl_entity *dl_se)
1458     if (unlikely(dl_se->dl_boosted || !start_dl_timer(p)))
1459     return;
1460     dl_se->dl_throttled = 1;
1461     + if (dl_se->runtime > 0)
1462     + dl_se->runtime = 0;
1463     }
1464     }
1465    
1466     diff --git a/kernel/time/timer.c b/kernel/time/timer.c
1467     index e872f7f05e8a..2d5cc7dfee14 100644
1468     --- a/kernel/time/timer.c
1469     +++ b/kernel/time/timer.c
1470     @@ -1696,7 +1696,7 @@ void run_local_timers(void)
1471     hrtimer_run_queues();
1472     /* Raise the softirq only if required. */
1473     if (time_before(jiffies, base->clk)) {
1474     - if (!IS_ENABLED(CONFIG_NO_HZ_COMMON) || !base->nohz_active)
1475     + if (!IS_ENABLED(CONFIG_NO_HZ_COMMON))
1476     return;
1477     /* CPU is awake, so check the deferrable base. */
1478     base++;
1479     diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
1480     index 03c0a48c3ac4..9549ed120556 100644
1481     --- a/kernel/trace/trace_events.c
1482     +++ b/kernel/trace/trace_events.c
1483     @@ -2200,6 +2200,7 @@ void trace_event_enum_update(struct trace_enum_map **map, int len)
1484     {
1485     struct trace_event_call *call, *p;
1486     const char *last_system = NULL;
1487     + bool first = false;
1488     int last_i;
1489     int i;
1490    
1491     @@ -2207,15 +2208,28 @@ void trace_event_enum_update(struct trace_enum_map **map, int len)
1492     list_for_each_entry_safe(call, p, &ftrace_events, list) {
1493     /* events are usually grouped together with systems */
1494     if (!last_system || call->class->system != last_system) {
1495     + first = true;
1496     last_i = 0;
1497     last_system = call->class->system;
1498     }
1499    
1500     + /*
1501     + * Since calls are grouped by systems, the likelyhood that the
1502     + * next call in the iteration belongs to the same system as the
1503     + * previous call is high. As an optimization, we skip seaching
1504     + * for a map[] that matches the call's system if the last call
1505     + * was from the same system. That's what last_i is for. If the
1506     + * call has the same system as the previous call, then last_i
1507     + * will be the index of the first map[] that has a matching
1508     + * system.
1509     + */
1510     for (i = last_i; i < len; i++) {
1511     if (call->class->system == map[i]->system) {
1512     /* Save the first system if need be */
1513     - if (!last_i)
1514     + if (first) {
1515     last_i = i;
1516     + first = false;
1517     + }
1518     update_event_printk(call, map[i]);
1519     }
1520     }
1521     diff --git a/kernel/workqueue.c b/kernel/workqueue.c
1522     index 181c2ad0cb54..ebfea5f94b66 100644
1523     --- a/kernel/workqueue.c
1524     +++ b/kernel/workqueue.c
1525     @@ -48,6 +48,7 @@
1526     #include <linux/nodemask.h>
1527     #include <linux/moduleparam.h>
1528     #include <linux/uaccess.h>
1529     +#include <linux/nmi.h>
1530    
1531     #include "workqueue_internal.h"
1532    
1533     @@ -4424,6 +4425,12 @@ void show_workqueue_state(void)
1534     if (pwq->nr_active || !list_empty(&pwq->delayed_works))
1535     show_pwq(pwq);
1536     spin_unlock_irqrestore(&pwq->pool->lock, flags);
1537     + /*
1538     + * We could be printing a lot from atomic context, e.g.
1539     + * sysrq-t -> show_workqueue_state(). Avoid triggering
1540     + * hard lockup.
1541     + */
1542     + touch_nmi_watchdog();
1543     }
1544     }
1545    
1546     @@ -4451,6 +4458,12 @@ void show_workqueue_state(void)
1547     pr_cont("\n");
1548     next_pool:
1549     spin_unlock_irqrestore(&pool->lock, flags);
1550     + /*
1551     + * We could be printing a lot from atomic context, e.g.
1552     + * sysrq-t -> show_workqueue_state(). Avoid triggering
1553     + * hard lockup.
1554     + */
1555     + touch_nmi_watchdog();
1556     }
1557    
1558     rcu_read_unlock_sched();
1559     diff --git a/net/key/af_key.c b/net/key/af_key.c
1560     index 94bf810ad242..6482b001f19a 100644
1561     --- a/net/key/af_key.c
1562     +++ b/net/key/af_key.c
1563     @@ -401,6 +401,11 @@ static int verify_address_len(const void *p)
1564     #endif
1565     int len;
1566    
1567     + if (sp->sadb_address_len <
1568     + DIV_ROUND_UP(sizeof(*sp) + offsetofend(typeof(*addr), sa_family),
1569     + sizeof(uint64_t)))
1570     + return -EINVAL;
1571     +
1572     switch (addr->sa_family) {
1573     case AF_INET:
1574     len = DIV_ROUND_UP(sizeof(*sp) + sizeof(*sin), sizeof(uint64_t));
1575     @@ -511,6 +516,9 @@ static int parse_exthdrs(struct sk_buff *skb, const struct sadb_msg *hdr, void *
1576     uint16_t ext_type;
1577     int ext_len;
1578    
1579     + if (len < sizeof(*ehdr))
1580     + return -EINVAL;
1581     +
1582     ext_len = ehdr->sadb_ext_len;
1583     ext_len *= sizeof(uint64_t);
1584     ext_type = ehdr->sadb_ext_type;
1585     diff --git a/scripts/gdb/linux/tasks.py b/scripts/gdb/linux/tasks.py
1586     index 1bf949c43b76..f6ab3ccf698f 100644
1587     --- a/scripts/gdb/linux/tasks.py
1588     +++ b/scripts/gdb/linux/tasks.py
1589     @@ -96,6 +96,8 @@ def get_thread_info(task):
1590     thread_info_addr = task.address + ia64_task_size
1591     thread_info = thread_info_addr.cast(thread_info_ptr_type)
1592     else:
1593     + if task.type.fields()[0].type == thread_info_type.get_type():
1594     + return task['thread_info']
1595     thread_info = task['stack'].cast(thread_info_ptr_type)
1596     return thread_info.dereference()
1597    
1598     diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
1599     index e685e779a4b8..9306604f5070 100644
1600     --- a/sound/core/pcm_lib.c
1601     +++ b/sound/core/pcm_lib.c
1602     @@ -578,7 +578,6 @@ static inline unsigned int muldiv32(unsigned int a, unsigned int b,
1603     {
1604     u_int64_t n = (u_int64_t) a * b;
1605     if (c == 0) {
1606     - snd_BUG_ON(!n);
1607     *r = 0;
1608     return UINT_MAX;
1609     }
1610     diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
1611     index 45ef5915462c..16580a82e1c8 100644
1612     --- a/sound/core/seq/seq_clientmgr.c
1613     +++ b/sound/core/seq/seq_clientmgr.c
1614     @@ -221,6 +221,7 @@ static struct snd_seq_client *seq_create_client1(int client_index, int poolsize)
1615     rwlock_init(&client->ports_lock);
1616     mutex_init(&client->ports_mutex);
1617     INIT_LIST_HEAD(&client->ports_list_head);
1618     + mutex_init(&client->ioctl_mutex);
1619    
1620     /* find free slot in the client table */
1621     spin_lock_irqsave(&clients_lock, flags);
1622     @@ -2127,7 +2128,9 @@ static long snd_seq_ioctl(struct file *file, unsigned int cmd,
1623     return -EFAULT;
1624     }
1625    
1626     + mutex_lock(&client->ioctl_mutex);
1627     err = handler->func(client, &buf);
1628     + mutex_unlock(&client->ioctl_mutex);
1629     if (err >= 0) {
1630     /* Some commands includes a bug in 'dir' field. */
1631     if (handler->cmd == SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT ||
1632     diff --git a/sound/core/seq/seq_clientmgr.h b/sound/core/seq/seq_clientmgr.h
1633     index c6614254ef8a..0611e1e0ed5b 100644
1634     --- a/sound/core/seq/seq_clientmgr.h
1635     +++ b/sound/core/seq/seq_clientmgr.h
1636     @@ -61,6 +61,7 @@ struct snd_seq_client {
1637     struct list_head ports_list_head;
1638     rwlock_t ports_lock;
1639     struct mutex ports_mutex;
1640     + struct mutex ioctl_mutex;
1641     int convert32; /* convert 32->64bit */
1642    
1643     /* output pool */
1644     diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
1645     index 80bbadc83721..d6e079f4ec09 100644
1646     --- a/sound/pci/hda/patch_cirrus.c
1647     +++ b/sound/pci/hda/patch_cirrus.c
1648     @@ -408,6 +408,7 @@ static const struct snd_pci_quirk cs420x_fixup_tbl[] = {
1649     /*SND_PCI_QUIRK(0x8086, 0x7270, "IMac 27 Inch", CS420X_IMAC27),*/
1650    
1651     /* codec SSID */
1652     + SND_PCI_QUIRK(0x106b, 0x0600, "iMac 14,1", CS420X_IMAC27_122),
1653     SND_PCI_QUIRK(0x106b, 0x1c00, "MacBookPro 8,1", CS420X_MBP81),
1654     SND_PCI_QUIRK(0x106b, 0x2000, "iMac 12,2", CS420X_IMAC27_122),
1655     SND_PCI_QUIRK(0x106b, 0x2800, "MacBookPro 10,1", CS420X_MBP101),
1656     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
1657     index 4ef3b0067876..71a058fcf884 100644
1658     --- a/sound/pci/hda/patch_realtek.c
1659     +++ b/sound/pci/hda/patch_realtek.c
1660     @@ -5617,6 +5617,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1661     SND_PCI_QUIRK(0x1028, 0x075b, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
1662     SND_PCI_QUIRK(0x1028, 0x075d, "Dell AIO", ALC298_FIXUP_SPK_VOLUME),
1663     SND_PCI_QUIRK(0x1028, 0x0798, "Dell Inspiron 17 7000 Gaming", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER),
1664     + SND_PCI_QUIRK(0x1028, 0x082a, "Dell XPS 13 9360", ALC256_FIXUP_DELL_XPS_13_HEADPHONE_NOISE),
1665     SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
1666     SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
1667     SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
1668     diff --git a/tools/objtool/elf.c b/tools/objtool/elf.c
1669     index d897702ce742..faacf0c89976 100644
1670     --- a/tools/objtool/elf.c
1671     +++ b/tools/objtool/elf.c
1672     @@ -26,6 +26,7 @@
1673     #include <stdlib.h>
1674     #include <string.h>
1675     #include <unistd.h>
1676     +#include <errno.h>
1677    
1678     #include "elf.h"
1679     #include "warn.h"
1680     @@ -370,7 +371,8 @@ struct elf *elf_open(const char *name)
1681    
1682     elf->fd = open(name, O_RDONLY);
1683     if (elf->fd == -1) {
1684     - perror("open");
1685     + fprintf(stderr, "objtool: Can't open '%s': %s\n",
1686     + name, strerror(errno));
1687     goto err;
1688     }
1689    
1690     diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
1691     index cffdd9cf3ebf..ff375310efe4 100644
1692     --- a/tools/perf/Makefile.config
1693     +++ b/tools/perf/Makefile.config
1694     @@ -19,18 +19,18 @@ CFLAGS := $(EXTRA_CFLAGS) $(EXTRA_WARNINGS)
1695    
1696     include $(srctree)/tools/scripts/Makefile.arch
1697    
1698     -$(call detected_var,ARCH)
1699     +$(call detected_var,SRCARCH)
1700    
1701     NO_PERF_REGS := 1
1702    
1703     # Additional ARCH settings for ppc
1704     -ifeq ($(ARCH),powerpc)
1705     +ifeq ($(SRCARCH),powerpc)
1706     NO_PERF_REGS := 0
1707     LIBUNWIND_LIBS := -lunwind -lunwind-ppc64
1708     endif
1709    
1710     # Additional ARCH settings for x86
1711     -ifeq ($(ARCH),x86)
1712     +ifeq ($(SRCARCH),x86)
1713     $(call detected,CONFIG_X86)
1714     ifeq (${IS_64_BIT}, 1)
1715     CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT -DHAVE_SYSCALL_TABLE -I$(OUTPUT)arch/x86/include/generated
1716     @@ -43,12 +43,12 @@ ifeq ($(ARCH),x86)
1717     NO_PERF_REGS := 0
1718     endif
1719    
1720     -ifeq ($(ARCH),arm)
1721     +ifeq ($(SRCARCH),arm)
1722     NO_PERF_REGS := 0
1723     LIBUNWIND_LIBS = -lunwind -lunwind-arm
1724     endif
1725    
1726     -ifeq ($(ARCH),arm64)
1727     +ifeq ($(SRCARCH),arm64)
1728     NO_PERF_REGS := 0
1729     LIBUNWIND_LIBS = -lunwind -lunwind-aarch64
1730     endif
1731     @@ -61,7 +61,7 @@ endif
1732     # Disable it on all other architectures in case libdw unwind
1733     # support is detected in system. Add supported architectures
1734     # to the check.
1735     -ifneq ($(ARCH),$(filter $(ARCH),x86 arm))
1736     +ifneq ($(SRCARCH),$(filter $(SRCARCH),x86 arm))
1737     NO_LIBDW_DWARF_UNWIND := 1
1738     endif
1739    
1740     @@ -115,9 +115,9 @@ endif
1741     FEATURE_CHECK_CFLAGS-libbabeltrace := $(LIBBABELTRACE_CFLAGS)
1742     FEATURE_CHECK_LDFLAGS-libbabeltrace := $(LIBBABELTRACE_LDFLAGS) -lbabeltrace-ctf
1743    
1744     -FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(ARCH)/include/uapi -I$(srctree)/tools/include/uapi
1745     +FEATURE_CHECK_CFLAGS-bpf = -I. -I$(srctree)/tools/include -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi -I$(srctree)/tools/include/uapi
1746     # include ARCH specific config
1747     --include $(src-perf)/arch/$(ARCH)/Makefile
1748     +-include $(src-perf)/arch/$(SRCARCH)/Makefile
1749    
1750     ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
1751     CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET
1752     @@ -205,12 +205,12 @@ ifeq ($(DEBUG),0)
1753     endif
1754    
1755     CFLAGS += -I$(src-perf)/util/include
1756     -CFLAGS += -I$(src-perf)/arch/$(ARCH)/include
1757     +CFLAGS += -I$(src-perf)/arch/$(SRCARCH)/include
1758     CFLAGS += -I$(srctree)/tools/include/uapi
1759     CFLAGS += -I$(srctree)/tools/include/
1760     -CFLAGS += -I$(srctree)/tools/arch/$(ARCH)/include/uapi
1761     -CFLAGS += -I$(srctree)/tools/arch/$(ARCH)/include/
1762     -CFLAGS += -I$(srctree)/tools/arch/$(ARCH)/
1763     +CFLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi
1764     +CFLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/
1765     +CFLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/
1766    
1767     # $(obj-perf) for generated common-cmds.h
1768     # $(obj-perf)/util for generated bison/flex headers
1769     @@ -321,7 +321,7 @@ ifndef NO_LIBELF
1770    
1771     ifndef NO_DWARF
1772     ifeq ($(origin PERF_HAVE_DWARF_REGS), undefined)
1773     - msg := $(warning DWARF register mappings have not been defined for architecture $(ARCH), DWARF support disabled);
1774     + msg := $(warning DWARF register mappings have not been defined for architecture $(SRCARCH), DWARF support disabled);
1775     NO_DWARF := 1
1776     else
1777     CFLAGS += -DHAVE_DWARF_SUPPORT $(LIBDW_CFLAGS)
1778     @@ -346,7 +346,7 @@ ifndef NO_LIBELF
1779     CFLAGS += -DHAVE_BPF_PROLOGUE
1780     $(call detected,CONFIG_BPF_PROLOGUE)
1781     else
1782     - msg := $(warning BPF prologue is not supported by architecture $(ARCH), missing regs_query_register_offset());
1783     + msg := $(warning BPF prologue is not supported by architecture $(SRCARCH), missing regs_query_register_offset());
1784     endif
1785     else
1786     msg := $(warning DWARF support is off, BPF prologue is disabled);
1787     @@ -372,7 +372,7 @@ ifdef PERF_HAVE_JITDUMP
1788     endif
1789     endif
1790    
1791     -ifeq ($(ARCH),powerpc)
1792     +ifeq ($(SRCARCH),powerpc)
1793     ifndef NO_DWARF
1794     CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
1795     endif
1796     @@ -453,7 +453,7 @@ else
1797     endif
1798    
1799     ifndef NO_LOCAL_LIBUNWIND
1800     - ifeq ($(ARCH),$(filter $(ARCH),arm arm64))
1801     + ifeq ($(SRCARCH),$(filter $(SRCARCH),arm arm64))
1802     $(call feature_check,libunwind-debug-frame)
1803     ifneq ($(feature-libunwind-debug-frame), 1)
1804     msg := $(warning No debug_frame support found in libunwind);
1805     @@ -717,7 +717,7 @@ ifeq (${IS_64_BIT}, 1)
1806     NO_PERF_READ_VDSO32 := 1
1807     endif
1808     endif
1809     - ifneq ($(ARCH), x86)
1810     + ifneq ($(SRCARCH), x86)
1811     NO_PERF_READ_VDSOX32 := 1
1812     endif
1813     ifndef NO_PERF_READ_VDSOX32
1814     @@ -746,7 +746,7 @@ ifdef LIBBABELTRACE
1815     endif
1816    
1817     ifndef NO_AUXTRACE
1818     - ifeq ($(ARCH),x86)
1819     + ifeq ($(SRCARCH),x86)
1820     ifeq ($(feature-get_cpuid), 0)
1821     msg := $(warning Your gcc lacks the __get_cpuid() builtin, disables support for auxtrace/Intel PT, please install a newer gcc);
1822     NO_AUXTRACE := 1
1823     @@ -793,7 +793,7 @@ sysconfdir = $(prefix)/etc
1824     ETC_PERFCONFIG = etc/perfconfig
1825     endif
1826     ifndef lib
1827     -ifeq ($(ARCH)$(IS_64_BIT), x861)
1828     +ifeq ($(SRCARCH)$(IS_64_BIT), x861)
1829     lib = lib64
1830     else
1831     lib = lib
1832     diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
1833     index ef52d1e3d431..2b92ffef554b 100644
1834     --- a/tools/perf/Makefile.perf
1835     +++ b/tools/perf/Makefile.perf
1836     @@ -192,7 +192,7 @@ endif
1837    
1838     ifeq ($(config),0)
1839     include $(srctree)/tools/scripts/Makefile.arch
1840     --include arch/$(ARCH)/Makefile
1841     +-include arch/$(SRCARCH)/Makefile
1842     endif
1843    
1844     # The FEATURE_DUMP_EXPORT holds location of the actual
1845     diff --git a/tools/perf/arch/Build b/tools/perf/arch/Build
1846     index 109eb75cf7de..d9b6af837c7d 100644
1847     --- a/tools/perf/arch/Build
1848     +++ b/tools/perf/arch/Build
1849     @@ -1,2 +1,2 @@
1850     libperf-y += common.o
1851     -libperf-y += $(ARCH)/
1852     +libperf-y += $(SRCARCH)/
1853     diff --git a/tools/perf/pmu-events/Build b/tools/perf/pmu-events/Build
1854     index 9213a1273697..999a4e878162 100644
1855     --- a/tools/perf/pmu-events/Build
1856     +++ b/tools/perf/pmu-events/Build
1857     @@ -2,7 +2,7 @@ hostprogs := jevents
1858    
1859     jevents-y += json.o jsmn.o jevents.o
1860     pmu-events-y += pmu-events.o
1861     -JDIR = pmu-events/arch/$(ARCH)
1862     +JDIR = pmu-events/arch/$(SRCARCH)
1863     JSON = $(shell [ -d $(JDIR) ] && \
1864     find $(JDIR) -name '*.json' -o -name 'mapfile.csv')
1865     #
1866     @@ -10,4 +10,4 @@ JSON = $(shell [ -d $(JDIR) ] && \
1867     # directory and create tables in pmu-events.c.
1868     #
1869     $(OUTPUT)pmu-events/pmu-events.c: $(JSON) $(JEVENTS)
1870     - $(Q)$(call echo-cmd,gen)$(JEVENTS) $(ARCH) pmu-events/arch $(OUTPUT)pmu-events/pmu-events.c $(V)
1871     + $(Q)$(call echo-cmd,gen)$(JEVENTS) $(SRCARCH) pmu-events/arch $(OUTPUT)pmu-events/pmu-events.c $(V)
1872     diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build
1873     index 8a4ce492f7b2..546250a273e7 100644
1874     --- a/tools/perf/tests/Build
1875     +++ b/tools/perf/tests/Build
1876     @@ -71,7 +71,7 @@ $(OUTPUT)tests/llvm-src-relocation.c: tests/bpf-script-test-relocation.c tests/B
1877     $(Q)sed -e 's/"/\\"/g' -e 's/\(.*\)/"\1\\n"/g' $< >> $@
1878     $(Q)echo ';' >> $@
1879    
1880     -ifeq ($(ARCH),$(filter $(ARCH),x86 arm arm64 powerpc))
1881     +ifeq ($(SRCARCH),$(filter $(SRCARCH),x86 arm arm64 powerpc))
1882     perf-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
1883     endif
1884    
1885     diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
1886     index 5337f49db361..28bdb48357f0 100644
1887     --- a/tools/perf/util/header.c
1888     +++ b/tools/perf/util/header.c
1889     @@ -826,7 +826,7 @@ static int write_group_desc(int fd, struct perf_header *h __maybe_unused,
1890    
1891     /*
1892     * default get_cpuid(): nothing gets recorded
1893     - * actual implementation must be in arch/$(ARCH)/util/header.c
1894     + * actual implementation must be in arch/$(SRCARCH)/util/header.c
1895     */
1896     int __weak get_cpuid(char *buffer __maybe_unused, size_t sz __maybe_unused)
1897     {