Annotation of /trunk/kernel-alx/patches-5.4/0220-5.4.121-all-fixes.patch
Parent Directory | Revision Log
Revision 3635 -
(hide annotations)
(download)
Mon Oct 24 12:34:12 2022 UTC (19 months, 1 week ago) by niro
File size: 53500 byte(s)
Mon Oct 24 12:34:12 2022 UTC (19 months, 1 week ago) by niro
File size: 53500 byte(s)
-sync kernel patches
1 | niro | 3635 | diff --git a/Documentation/sphinx/parse-headers.pl b/Documentation/sphinx/parse-headers.pl |
2 | index c518050ffc3fb..0dcf369ab9040 100755 | ||
3 | --- a/Documentation/sphinx/parse-headers.pl | ||
4 | +++ b/Documentation/sphinx/parse-headers.pl | ||
5 | @@ -1,4 +1,4 @@ | ||
6 | -#!/usr/bin/perl | ||
7 | +#!/usr/bin/env perl | ||
8 | use strict; | ||
9 | use Text::Tabs; | ||
10 | use Getopt::Long; | ||
11 | diff --git a/Documentation/target/tcm_mod_builder.py b/Documentation/target/tcm_mod_builder.py | ||
12 | index 95d6e31f1e3a1..85e496086d6ec 100755 | ||
13 | --- a/Documentation/target/tcm_mod_builder.py | ||
14 | +++ b/Documentation/target/tcm_mod_builder.py | ||
15 | @@ -1,4 +1,4 @@ | ||
16 | -#!/usr/bin/python | ||
17 | +#!/usr/bin/env python | ||
18 | # The TCM v4 multi-protocol fabric module generation script for drivers/target/$NEW_MOD | ||
19 | # | ||
20 | # Copyright (c) 2010 Rising Tide Systems | ||
21 | diff --git a/Documentation/trace/postprocess/decode_msr.py b/Documentation/trace/postprocess/decode_msr.py | ||
22 | index 0ab40e0db5809..aa9cc7abd5c2b 100644 | ||
23 | --- a/Documentation/trace/postprocess/decode_msr.py | ||
24 | +++ b/Documentation/trace/postprocess/decode_msr.py | ||
25 | @@ -1,4 +1,4 @@ | ||
26 | -#!/usr/bin/python | ||
27 | +#!/usr/bin/env python | ||
28 | # add symbolic names to read_msr / write_msr in trace | ||
29 | # decode_msr msr-index.h < trace | ||
30 | import sys | ||
31 | diff --git a/Documentation/trace/postprocess/trace-pagealloc-postprocess.pl b/Documentation/trace/postprocess/trace-pagealloc-postprocess.pl | ||
32 | index 0a120aae33ce5..b9b7d80c2f9d2 100644 | ||
33 | --- a/Documentation/trace/postprocess/trace-pagealloc-postprocess.pl | ||
34 | +++ b/Documentation/trace/postprocess/trace-pagealloc-postprocess.pl | ||
35 | @@ -1,4 +1,4 @@ | ||
36 | -#!/usr/bin/perl | ||
37 | +#!/usr/bin/env perl | ||
38 | # This is a POC (proof of concept or piece of crap, take your pick) for reading the | ||
39 | # text representation of trace output related to page allocation. It makes an attempt | ||
40 | # to extract some high-level information on what is going on. The accuracy of the parser | ||
41 | diff --git a/Documentation/trace/postprocess/trace-vmscan-postprocess.pl b/Documentation/trace/postprocess/trace-vmscan-postprocess.pl | ||
42 | index 995da15b16cab..2f4e39875fb39 100644 | ||
43 | --- a/Documentation/trace/postprocess/trace-vmscan-postprocess.pl | ||
44 | +++ b/Documentation/trace/postprocess/trace-vmscan-postprocess.pl | ||
45 | @@ -1,4 +1,4 @@ | ||
46 | -#!/usr/bin/perl | ||
47 | +#!/usr/bin/env perl | ||
48 | # This is a POC for reading the text representation of trace output related to | ||
49 | # page reclaim. It makes an attempt to extract some high-level information on | ||
50 | # what is going on. The accuracy of the parser may vary | ||
51 | diff --git a/Makefile b/Makefile | ||
52 | index 8b116f6fdcfc2..18b4cebe55642 100644 | ||
53 | --- a/Makefile | ||
54 | +++ b/Makefile | ||
55 | @@ -1,7 +1,7 @@ | ||
56 | # SPDX-License-Identifier: GPL-2.0 | ||
57 | VERSION = 5 | ||
58 | PATCHLEVEL = 4 | ||
59 | -SUBLEVEL = 120 | ||
60 | +SUBLEVEL = 121 | ||
61 | EXTRAVERSION = | ||
62 | NAME = Kleptomaniac Octopus | ||
63 | |||
64 | diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h | ||
65 | index dd03d5e01a946..32564b017ba06 100644 | ||
66 | --- a/arch/arm/include/asm/kvm_host.h | ||
67 | +++ b/arch/arm/include/asm/kvm_host.h | ||
68 | @@ -335,6 +335,7 @@ static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {} | ||
69 | static inline void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu) {} | ||
70 | |||
71 | static inline void kvm_arm_init_debug(void) {} | ||
72 | +static inline void kvm_arm_vcpu_init_debug(struct kvm_vcpu *vcpu) {} | ||
73 | static inline void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) {} | ||
74 | static inline void kvm_arm_clear_debug(struct kvm_vcpu *vcpu) {} | ||
75 | static inline void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu) {} | ||
76 | diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c | ||
77 | index bfb05c93494db..4ce2e29da14de 100644 | ||
78 | --- a/arch/arm/kernel/asm-offsets.c | ||
79 | +++ b/arch/arm/kernel/asm-offsets.c | ||
80 | @@ -27,6 +27,7 @@ | ||
81 | #include <asm/vdso_datapage.h> | ||
82 | #include <asm/hardware/cache-l2x0.h> | ||
83 | #include <linux/kbuild.h> | ||
84 | +#include <linux/arm-smccc.h> | ||
85 | #include "signal.h" | ||
86 | |||
87 | /* | ||
88 | @@ -160,6 +161,8 @@ int main(void) | ||
89 | DEFINE(SLEEP_SAVE_SP_PHYS, offsetof(struct sleep_save_sp, save_ptr_stash_phys)); | ||
90 | DEFINE(SLEEP_SAVE_SP_VIRT, offsetof(struct sleep_save_sp, save_ptr_stash)); | ||
91 | #endif | ||
92 | + DEFINE(ARM_SMCCC_QUIRK_ID_OFFS, offsetof(struct arm_smccc_quirk, id)); | ||
93 | + DEFINE(ARM_SMCCC_QUIRK_STATE_OFFS, offsetof(struct arm_smccc_quirk, state)); | ||
94 | BLANK(); | ||
95 | DEFINE(DMA_BIDIRECTIONAL, DMA_BIDIRECTIONAL); | ||
96 | DEFINE(DMA_TO_DEVICE, DMA_TO_DEVICE); | ||
97 | diff --git a/arch/arm/kernel/smccc-call.S b/arch/arm/kernel/smccc-call.S | ||
98 | index 00664c78facab..931df62a78312 100644 | ||
99 | --- a/arch/arm/kernel/smccc-call.S | ||
100 | +++ b/arch/arm/kernel/smccc-call.S | ||
101 | @@ -3,7 +3,9 @@ | ||
102 | * Copyright (c) 2015, Linaro Limited | ||
103 | */ | ||
104 | #include <linux/linkage.h> | ||
105 | +#include <linux/arm-smccc.h> | ||
106 | |||
107 | +#include <asm/asm-offsets.h> | ||
108 | #include <asm/opcodes-sec.h> | ||
109 | #include <asm/opcodes-virt.h> | ||
110 | #include <asm/unwind.h> | ||
111 | @@ -27,7 +29,14 @@ UNWIND( .fnstart) | ||
112 | UNWIND( .save {r4-r7}) | ||
113 | ldm r12, {r4-r7} | ||
114 | \instr | ||
115 | - pop {r4-r7} | ||
116 | + ldr r4, [sp, #36] | ||
117 | + cmp r4, #0 | ||
118 | + beq 1f // No quirk structure | ||
119 | + ldr r5, [r4, #ARM_SMCCC_QUIRK_ID_OFFS] | ||
120 | + cmp r5, #ARM_SMCCC_QUIRK_QCOM_A6 | ||
121 | + bne 1f // No quirk present | ||
122 | + str r6, [r4, #ARM_SMCCC_QUIRK_STATE_OFFS] | ||
123 | +1: pop {r4-r7} | ||
124 | ldr r12, [sp, #(4 * 4)] | ||
125 | stm r12, {r0-r3} | ||
126 | bx lr | ||
127 | diff --git a/arch/arm/kernel/suspend.c b/arch/arm/kernel/suspend.c | ||
128 | index d08099269e35b..e126386fb78a8 100644 | ||
129 | --- a/arch/arm/kernel/suspend.c | ||
130 | +++ b/arch/arm/kernel/suspend.c | ||
131 | @@ -1,4 +1,5 @@ | ||
132 | // SPDX-License-Identifier: GPL-2.0 | ||
133 | +#include <linux/ftrace.h> | ||
134 | #include <linux/init.h> | ||
135 | #include <linux/slab.h> | ||
136 | #include <linux/mm_types.h> | ||
137 | @@ -26,6 +27,13 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long)) | ||
138 | if (!idmap_pgd) | ||
139 | return -EINVAL; | ||
140 | |||
141 | + /* | ||
142 | + * Function graph tracer state gets incosistent when the kernel | ||
143 | + * calls functions that never return (aka suspend finishers) hence | ||
144 | + * disable graph tracing during their execution. | ||
145 | + */ | ||
146 | + pause_graph_tracing(); | ||
147 | + | ||
148 | /* | ||
149 | * Provide a temporary page table with an identity mapping for | ||
150 | * the MMU-enable code, required for resuming. On successful | ||
151 | @@ -33,6 +41,9 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long)) | ||
152 | * back to the correct page tables. | ||
153 | */ | ||
154 | ret = __cpu_suspend(arg, fn, __mpidr); | ||
155 | + | ||
156 | + unpause_graph_tracing(); | ||
157 | + | ||
158 | if (ret == 0) { | ||
159 | cpu_switch_mm(mm->pgd, mm); | ||
160 | local_flush_bp_all(); | ||
161 | @@ -46,7 +57,13 @@ int cpu_suspend(unsigned long arg, int (*fn)(unsigned long)) | ||
162 | int cpu_suspend(unsigned long arg, int (*fn)(unsigned long)) | ||
163 | { | ||
164 | u32 __mpidr = cpu_logical_map(smp_processor_id()); | ||
165 | - return __cpu_suspend(arg, fn, __mpidr); | ||
166 | + int ret; | ||
167 | + | ||
168 | + pause_graph_tracing(); | ||
169 | + ret = __cpu_suspend(arg, fn, __mpidr); | ||
170 | + unpause_graph_tracing(); | ||
171 | + | ||
172 | + return ret; | ||
173 | } | ||
174 | #define idmap_pgd NULL | ||
175 | #endif | ||
176 | diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h | ||
177 | index dfa6dc4575bec..697702a1a1ff1 100644 | ||
178 | --- a/arch/arm64/include/asm/kvm_host.h | ||
179 | +++ b/arch/arm64/include/asm/kvm_host.h | ||
180 | @@ -552,6 +552,7 @@ static inline void kvm_arch_sched_in(struct kvm_vcpu *vcpu, int cpu) {} | ||
181 | static inline void kvm_arch_vcpu_block_finish(struct kvm_vcpu *vcpu) {} | ||
182 | |||
183 | void kvm_arm_init_debug(void); | ||
184 | +void kvm_arm_vcpu_init_debug(struct kvm_vcpu *vcpu); | ||
185 | void kvm_arm_setup_debug(struct kvm_vcpu *vcpu); | ||
186 | void kvm_arm_clear_debug(struct kvm_vcpu *vcpu); | ||
187 | void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu); | ||
188 | diff --git a/arch/arm64/kvm/debug.c b/arch/arm64/kvm/debug.c | ||
189 | index dbc8905116311..2484b2cca74bc 100644 | ||
190 | --- a/arch/arm64/kvm/debug.c | ||
191 | +++ b/arch/arm64/kvm/debug.c | ||
192 | @@ -68,6 +68,64 @@ void kvm_arm_init_debug(void) | ||
193 | __this_cpu_write(mdcr_el2, kvm_call_hyp_ret(__kvm_get_mdcr_el2)); | ||
194 | } | ||
195 | |||
196 | +/** | ||
197 | + * kvm_arm_setup_mdcr_el2 - configure vcpu mdcr_el2 value | ||
198 | + * | ||
199 | + * @vcpu: the vcpu pointer | ||
200 | + * | ||
201 | + * This ensures we will trap access to: | ||
202 | + * - Performance monitors (MDCR_EL2_TPM/MDCR_EL2_TPMCR) | ||
203 | + * - Debug ROM Address (MDCR_EL2_TDRA) | ||
204 | + * - OS related registers (MDCR_EL2_TDOSA) | ||
205 | + * - Statistical profiler (MDCR_EL2_TPMS/MDCR_EL2_E2PB) | ||
206 | + * - Self-hosted Trace Filter controls (MDCR_EL2_TTRF) | ||
207 | + */ | ||
208 | +static void kvm_arm_setup_mdcr_el2(struct kvm_vcpu *vcpu) | ||
209 | +{ | ||
210 | + /* | ||
211 | + * This also clears MDCR_EL2_E2PB_MASK to disable guest access | ||
212 | + * to the profiling buffer. | ||
213 | + */ | ||
214 | + vcpu->arch.mdcr_el2 = __this_cpu_read(mdcr_el2) & MDCR_EL2_HPMN_MASK; | ||
215 | + vcpu->arch.mdcr_el2 |= (MDCR_EL2_TPM | | ||
216 | + MDCR_EL2_TPMS | | ||
217 | + MDCR_EL2_TTRF | | ||
218 | + MDCR_EL2_TPMCR | | ||
219 | + MDCR_EL2_TDRA | | ||
220 | + MDCR_EL2_TDOSA); | ||
221 | + | ||
222 | + /* Is the VM being debugged by userspace? */ | ||
223 | + if (vcpu->guest_debug) | ||
224 | + /* Route all software debug exceptions to EL2 */ | ||
225 | + vcpu->arch.mdcr_el2 |= MDCR_EL2_TDE; | ||
226 | + | ||
227 | + /* | ||
228 | + * Trap debug register access when one of the following is true: | ||
229 | + * - Userspace is using the hardware to debug the guest | ||
230 | + * (KVM_GUESTDBG_USE_HW is set). | ||
231 | + * - The guest is not using debug (KVM_ARM64_DEBUG_DIRTY is clear). | ||
232 | + */ | ||
233 | + if ((vcpu->guest_debug & KVM_GUESTDBG_USE_HW) || | ||
234 | + !(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY)) | ||
235 | + vcpu->arch.mdcr_el2 |= MDCR_EL2_TDA; | ||
236 | + | ||
237 | + trace_kvm_arm_set_dreg32("MDCR_EL2", vcpu->arch.mdcr_el2); | ||
238 | +} | ||
239 | + | ||
240 | +/** | ||
241 | + * kvm_arm_vcpu_init_debug - setup vcpu debug traps | ||
242 | + * | ||
243 | + * @vcpu: the vcpu pointer | ||
244 | + * | ||
245 | + * Set vcpu initial mdcr_el2 value. | ||
246 | + */ | ||
247 | +void kvm_arm_vcpu_init_debug(struct kvm_vcpu *vcpu) | ||
248 | +{ | ||
249 | + preempt_disable(); | ||
250 | + kvm_arm_setup_mdcr_el2(vcpu); | ||
251 | + preempt_enable(); | ||
252 | +} | ||
253 | + | ||
254 | /** | ||
255 | * kvm_arm_reset_debug_ptr - reset the debug ptr to point to the vcpu state | ||
256 | */ | ||
257 | @@ -83,13 +141,7 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu) | ||
258 | * @vcpu: the vcpu pointer | ||
259 | * | ||
260 | * This is called before each entry into the hypervisor to setup any | ||
261 | - * debug related registers. Currently this just ensures we will trap | ||
262 | - * access to: | ||
263 | - * - Performance monitors (MDCR_EL2_TPM/MDCR_EL2_TPMCR) | ||
264 | - * - Debug ROM Address (MDCR_EL2_TDRA) | ||
265 | - * - OS related registers (MDCR_EL2_TDOSA) | ||
266 | - * - Statistical profiler (MDCR_EL2_TPMS/MDCR_EL2_E2PB) | ||
267 | - * - Self-hosted Trace Filter controls (MDCR_EL2_TTRF) | ||
268 | + * debug related registers. | ||
269 | * | ||
270 | * Additionally, KVM only traps guest accesses to the debug registers if | ||
271 | * the guest is not actively using them (see the KVM_ARM64_DEBUG_DIRTY | ||
272 | @@ -101,28 +153,14 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu) | ||
273 | |||
274 | void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) | ||
275 | { | ||
276 | - bool trap_debug = !(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY); | ||
277 | unsigned long mdscr, orig_mdcr_el2 = vcpu->arch.mdcr_el2; | ||
278 | |||
279 | trace_kvm_arm_setup_debug(vcpu, vcpu->guest_debug); | ||
280 | |||
281 | - /* | ||
282 | - * This also clears MDCR_EL2_E2PB_MASK to disable guest access | ||
283 | - * to the profiling buffer. | ||
284 | - */ | ||
285 | - vcpu->arch.mdcr_el2 = __this_cpu_read(mdcr_el2) & MDCR_EL2_HPMN_MASK; | ||
286 | - vcpu->arch.mdcr_el2 |= (MDCR_EL2_TPM | | ||
287 | - MDCR_EL2_TPMS | | ||
288 | - MDCR_EL2_TTRF | | ||
289 | - MDCR_EL2_TPMCR | | ||
290 | - MDCR_EL2_TDRA | | ||
291 | - MDCR_EL2_TDOSA); | ||
292 | + kvm_arm_setup_mdcr_el2(vcpu); | ||
293 | |||
294 | /* Is Guest debugging in effect? */ | ||
295 | if (vcpu->guest_debug) { | ||
296 | - /* Route all software debug exceptions to EL2 */ | ||
297 | - vcpu->arch.mdcr_el2 |= MDCR_EL2_TDE; | ||
298 | - | ||
299 | /* Save guest debug state */ | ||
300 | save_guest_debug_regs(vcpu); | ||
301 | |||
302 | @@ -176,7 +214,6 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) | ||
303 | |||
304 | vcpu->arch.debug_ptr = &vcpu->arch.external_debug_state; | ||
305 | vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY; | ||
306 | - trap_debug = true; | ||
307 | |||
308 | trace_kvm_arm_set_regset("BKPTS", get_num_brps(), | ||
309 | &vcpu->arch.debug_ptr->dbg_bcr[0], | ||
310 | @@ -191,10 +228,6 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) | ||
311 | BUG_ON(!vcpu->guest_debug && | ||
312 | vcpu->arch.debug_ptr != &vcpu->arch.vcpu_debug_state); | ||
313 | |||
314 | - /* Trap debug register access */ | ||
315 | - if (trap_debug) | ||
316 | - vcpu->arch.mdcr_el2 |= MDCR_EL2_TDA; | ||
317 | - | ||
318 | /* If KDE or MDE are set, perform a full save/restore cycle. */ | ||
319 | if (vcpu_read_sys_reg(vcpu, MDSCR_EL1) & (DBG_MDSCR_KDE | DBG_MDSCR_MDE)) | ||
320 | vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY; | ||
321 | @@ -203,7 +236,6 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu) | ||
322 | if (has_vhe() && orig_mdcr_el2 != vcpu->arch.mdcr_el2) | ||
323 | write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2); | ||
324 | |||
325 | - trace_kvm_arm_set_dreg32("MDCR_EL2", vcpu->arch.mdcr_el2); | ||
326 | trace_kvm_arm_set_dreg32("MDSCR_EL1", vcpu_read_sys_reg(vcpu, MDSCR_EL1)); | ||
327 | } | ||
328 | |||
329 | diff --git a/arch/ia64/scripts/unwcheck.py b/arch/ia64/scripts/unwcheck.py | ||
330 | index c55276e31b6b6..bfd1b671e35fc 100644 | ||
331 | --- a/arch/ia64/scripts/unwcheck.py | ||
332 | +++ b/arch/ia64/scripts/unwcheck.py | ||
333 | @@ -1,4 +1,4 @@ | ||
334 | -#!/usr/bin/python | ||
335 | +#!/usr/bin/env python | ||
336 | # SPDX-License-Identifier: GPL-2.0 | ||
337 | # | ||
338 | # Usage: unwcheck.py FILE | ||
339 | diff --git a/arch/riscv/include/asm/ftrace.h b/arch/riscv/include/asm/ftrace.h | ||
340 | index 02fbc175142e2..693c3839a7dfe 100644 | ||
341 | --- a/arch/riscv/include/asm/ftrace.h | ||
342 | +++ b/arch/riscv/include/asm/ftrace.h | ||
343 | @@ -10,9 +10,19 @@ | ||
344 | #endif | ||
345 | #define HAVE_FUNCTION_GRAPH_RET_ADDR_PTR | ||
346 | |||
347 | +/* | ||
348 | + * Clang prior to 13 had "mcount" instead of "_mcount": | ||
349 | + * https://reviews.llvm.org/D98881 | ||
350 | + */ | ||
351 | +#if defined(CONFIG_CC_IS_GCC) || CONFIG_CLANG_VERSION >= 130000 | ||
352 | +#define MCOUNT_NAME _mcount | ||
353 | +#else | ||
354 | +#define MCOUNT_NAME mcount | ||
355 | +#endif | ||
356 | + | ||
357 | #define ARCH_SUPPORTS_FTRACE_OPS 1 | ||
358 | #ifndef __ASSEMBLY__ | ||
359 | -void _mcount(void); | ||
360 | +void MCOUNT_NAME(void); | ||
361 | static inline unsigned long ftrace_call_adjust(unsigned long addr) | ||
362 | { | ||
363 | return addr; | ||
364 | @@ -33,7 +43,7 @@ struct dyn_arch_ftrace { | ||
365 | * both auipc and jalr at the same time. | ||
366 | */ | ||
367 | |||
368 | -#define MCOUNT_ADDR ((unsigned long)_mcount) | ||
369 | +#define MCOUNT_ADDR ((unsigned long)MCOUNT_NAME) | ||
370 | #define JALR_SIGN_MASK (0x00000800) | ||
371 | #define JALR_OFFSET_MASK (0x00000fff) | ||
372 | #define AUIPC_OFFSET_MASK (0xfffff000) | ||
373 | diff --git a/arch/riscv/kernel/mcount.S b/arch/riscv/kernel/mcount.S | ||
374 | index 8a5593ff9ff3d..6d462681c9c02 100644 | ||
375 | --- a/arch/riscv/kernel/mcount.S | ||
376 | +++ b/arch/riscv/kernel/mcount.S | ||
377 | @@ -47,8 +47,8 @@ | ||
378 | |||
379 | ENTRY(ftrace_stub) | ||
380 | #ifdef CONFIG_DYNAMIC_FTRACE | ||
381 | - .global _mcount | ||
382 | - .set _mcount, ftrace_stub | ||
383 | + .global MCOUNT_NAME | ||
384 | + .set MCOUNT_NAME, ftrace_stub | ||
385 | #endif | ||
386 | ret | ||
387 | ENDPROC(ftrace_stub) | ||
388 | @@ -78,7 +78,7 @@ ENDPROC(return_to_handler) | ||
389 | #endif | ||
390 | |||
391 | #ifndef CONFIG_DYNAMIC_FTRACE | ||
392 | -ENTRY(_mcount) | ||
393 | +ENTRY(MCOUNT_NAME) | ||
394 | la t4, ftrace_stub | ||
395 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||
396 | la t0, ftrace_graph_return | ||
397 | @@ -124,6 +124,6 @@ do_trace: | ||
398 | jalr t5 | ||
399 | RESTORE_ABI_STATE | ||
400 | ret | ||
401 | -ENDPROC(_mcount) | ||
402 | +ENDPROC(MCOUNT_NAME) | ||
403 | #endif | ||
404 | -EXPORT_SYMBOL(_mcount) | ||
405 | +EXPORT_SYMBOL(MCOUNT_NAME) | ||
406 | diff --git a/arch/um/Kconfig.debug b/arch/um/Kconfig.debug | ||
407 | index 85726eeec3451..e4a0f12f20d97 100644 | ||
408 | --- a/arch/um/Kconfig.debug | ||
409 | +++ b/arch/um/Kconfig.debug | ||
410 | @@ -17,6 +17,7 @@ config GCOV | ||
411 | bool "Enable gcov support" | ||
412 | depends on DEBUG_INFO | ||
413 | depends on !KCOV | ||
414 | + depends on !MODULES | ||
415 | help | ||
416 | This option allows developers to retrieve coverage data from a UML | ||
417 | session. | ||
418 | diff --git a/arch/um/kernel/Makefile b/arch/um/kernel/Makefile | ||
419 | index 5aa882011e041..e698e0c7dbdca 100644 | ||
420 | --- a/arch/um/kernel/Makefile | ||
421 | +++ b/arch/um/kernel/Makefile | ||
422 | @@ -21,7 +21,6 @@ obj-y = config.o exec.o exitcode.o irq.o ksyms.o mem.o \ | ||
423 | |||
424 | obj-$(CONFIG_BLK_DEV_INITRD) += initrd.o | ||
425 | obj-$(CONFIG_GPROF) += gprof_syms.o | ||
426 | -obj-$(CONFIG_GCOV) += gmon_syms.o | ||
427 | obj-$(CONFIG_EARLY_PRINTK) += early_printk.o | ||
428 | obj-$(CONFIG_STACKTRACE) += stacktrace.o | ||
429 | |||
430 | diff --git a/arch/um/kernel/dyn.lds.S b/arch/um/kernel/dyn.lds.S | ||
431 | index f5001481010c0..a82ec01133212 100644 | ||
432 | --- a/arch/um/kernel/dyn.lds.S | ||
433 | +++ b/arch/um/kernel/dyn.lds.S | ||
434 | @@ -6,6 +6,12 @@ OUTPUT_ARCH(ELF_ARCH) | ||
435 | ENTRY(_start) | ||
436 | jiffies = jiffies_64; | ||
437 | |||
438 | +VERSION { | ||
439 | + { | ||
440 | + local: *; | ||
441 | + }; | ||
442 | +} | ||
443 | + | ||
444 | SECTIONS | ||
445 | { | ||
446 | PROVIDE (__executable_start = START); | ||
447 | diff --git a/arch/um/kernel/gmon_syms.c b/arch/um/kernel/gmon_syms.c | ||
448 | deleted file mode 100644 | ||
449 | index 9361a8eb9bf1a..0000000000000 | ||
450 | --- a/arch/um/kernel/gmon_syms.c | ||
451 | +++ /dev/null | ||
452 | @@ -1,16 +0,0 @@ | ||
453 | -// SPDX-License-Identifier: GPL-2.0 | ||
454 | -/* | ||
455 | - * Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) | ||
456 | - */ | ||
457 | - | ||
458 | -#include <linux/module.h> | ||
459 | - | ||
460 | -extern void __bb_init_func(void *) __attribute__((weak)); | ||
461 | -EXPORT_SYMBOL(__bb_init_func); | ||
462 | - | ||
463 | -extern void __gcov_init(void *) __attribute__((weak)); | ||
464 | -EXPORT_SYMBOL(__gcov_init); | ||
465 | -extern void __gcov_merge_add(void *, unsigned int) __attribute__((weak)); | ||
466 | -EXPORT_SYMBOL(__gcov_merge_add); | ||
467 | -extern void __gcov_exit(void) __attribute__((weak)); | ||
468 | -EXPORT_SYMBOL(__gcov_exit); | ||
469 | diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S | ||
470 | index 9f21443be2c9e..85b404d068f4b 100644 | ||
471 | --- a/arch/um/kernel/uml.lds.S | ||
472 | +++ b/arch/um/kernel/uml.lds.S | ||
473 | @@ -7,6 +7,12 @@ OUTPUT_ARCH(ELF_ARCH) | ||
474 | ENTRY(_start) | ||
475 | jiffies = jiffies_64; | ||
476 | |||
477 | +VERSION { | ||
478 | + { | ||
479 | + local: *; | ||
480 | + }; | ||
481 | +} | ||
482 | + | ||
483 | SECTIONS | ||
484 | { | ||
485 | /* This must contain the right address - not quite the default ELF one.*/ | ||
486 | diff --git a/arch/x86/lib/msr-smp.c b/arch/x86/lib/msr-smp.c | ||
487 | index fee8b9c0520c9..9009393f44c78 100644 | ||
488 | --- a/arch/x86/lib/msr-smp.c | ||
489 | +++ b/arch/x86/lib/msr-smp.c | ||
490 | @@ -253,7 +253,7 @@ static void __wrmsr_safe_regs_on_cpu(void *info) | ||
491 | rv->err = wrmsr_safe_regs(rv->regs); | ||
492 | } | ||
493 | |||
494 | -int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs) | ||
495 | +int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8]) | ||
496 | { | ||
497 | int err; | ||
498 | struct msr_regs_info rv; | ||
499 | @@ -266,7 +266,7 @@ int rdmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs) | ||
500 | } | ||
501 | EXPORT_SYMBOL(rdmsr_safe_regs_on_cpu); | ||
502 | |||
503 | -int wrmsr_safe_regs_on_cpu(unsigned int cpu, u32 *regs) | ||
504 | +int wrmsr_safe_regs_on_cpu(unsigned int cpu, u32 regs[8]) | ||
505 | { | ||
506 | int err; | ||
507 | struct msr_regs_info rv; | ||
508 | diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-edma-core.c | ||
509 | index 31577316f80bc..afbd1a4590192 100644 | ||
510 | --- a/drivers/dma/dw-edma/dw-edma-core.c | ||
511 | +++ b/drivers/dma/dw-edma/dw-edma-core.c | ||
512 | @@ -910,22 +910,21 @@ int dw_edma_remove(struct dw_edma_chip *chip) | ||
513 | /* Power management */ | ||
514 | pm_runtime_disable(dev); | ||
515 | |||
516 | + /* Deregister eDMA device */ | ||
517 | + dma_async_device_unregister(&dw->wr_edma); | ||
518 | list_for_each_entry_safe(chan, _chan, &dw->wr_edma.channels, | ||
519 | vc.chan.device_node) { | ||
520 | - list_del(&chan->vc.chan.device_node); | ||
521 | tasklet_kill(&chan->vc.task); | ||
522 | + list_del(&chan->vc.chan.device_node); | ||
523 | } | ||
524 | |||
525 | + dma_async_device_unregister(&dw->rd_edma); | ||
526 | list_for_each_entry_safe(chan, _chan, &dw->rd_edma.channels, | ||
527 | vc.chan.device_node) { | ||
528 | - list_del(&chan->vc.chan.device_node); | ||
529 | tasklet_kill(&chan->vc.task); | ||
530 | + list_del(&chan->vc.chan.device_node); | ||
531 | } | ||
532 | |||
533 | - /* Deregister eDMA device */ | ||
534 | - dma_async_device_unregister(&dw->wr_edma); | ||
535 | - dma_async_device_unregister(&dw->rd_edma); | ||
536 | - | ||
537 | /* Turn debugfs off */ | ||
538 | dw_edma_v0_core_debugfs_off(); | ||
539 | |||
540 | diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c | ||
541 | index 66dcab6ab26dd..e3ddc99c105d4 100644 | ||
542 | --- a/drivers/gpio/gpiolib-acpi.c | ||
543 | +++ b/drivers/gpio/gpiolib-acpi.c | ||
544 | @@ -1394,6 +1394,20 @@ static const struct dmi_system_id gpiolib_acpi_quirks[] = { | ||
545 | .no_edge_events_on_boot = true, | ||
546 | }, | ||
547 | }, | ||
548 | + { | ||
549 | + /* | ||
550 | + * The Dell Venue 10 Pro 5055, with Bay Trail SoC + TI PMIC uses an | ||
551 | + * external embedded-controller connected via I2C + an ACPI GPIO | ||
552 | + * event handler on INT33FFC:02 pin 12, causing spurious wakeups. | ||
553 | + */ | ||
554 | + .matches = { | ||
555 | + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), | ||
556 | + DMI_MATCH(DMI_PRODUCT_NAME, "Venue 10 Pro 5055"), | ||
557 | + }, | ||
558 | + .driver_data = &(struct acpi_gpiolib_dmi_quirk) { | ||
559 | + .ignore_wake = "INT33FC:02@12", | ||
560 | + }, | ||
561 | + }, | ||
562 | { | ||
563 | /* | ||
564 | * HP X2 10 models with Cherry Trail SoC + TI PMIC use an | ||
565 | diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | ||
566 | index 82f1d5434b82d..6e31e899192c5 100644 | ||
567 | --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | ||
568 | +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | ||
569 | @@ -7267,6 +7267,53 @@ static int add_affected_mst_dsc_crtcs(struct drm_atomic_state *state, struct drm | ||
570 | } | ||
571 | #endif | ||
572 | |||
573 | +static int validate_overlay(struct drm_atomic_state *state) | ||
574 | +{ | ||
575 | + int i; | ||
576 | + struct drm_plane *plane; | ||
577 | + struct drm_plane_state *old_plane_state, *new_plane_state; | ||
578 | + struct drm_plane_state *primary_state, *overlay_state = NULL; | ||
579 | + | ||
580 | + /* Check if primary plane is contained inside overlay */ | ||
581 | + for_each_oldnew_plane_in_state_reverse(state, plane, old_plane_state, new_plane_state, i) { | ||
582 | + if (plane->type == DRM_PLANE_TYPE_OVERLAY) { | ||
583 | + if (drm_atomic_plane_disabling(plane->state, new_plane_state)) | ||
584 | + return 0; | ||
585 | + | ||
586 | + overlay_state = new_plane_state; | ||
587 | + continue; | ||
588 | + } | ||
589 | + } | ||
590 | + | ||
591 | + /* check if we're making changes to the overlay plane */ | ||
592 | + if (!overlay_state) | ||
593 | + return 0; | ||
594 | + | ||
595 | + /* check if overlay plane is enabled */ | ||
596 | + if (!overlay_state->crtc) | ||
597 | + return 0; | ||
598 | + | ||
599 | + /* find the primary plane for the CRTC that the overlay is enabled on */ | ||
600 | + primary_state = drm_atomic_get_plane_state(state, overlay_state->crtc->primary); | ||
601 | + if (IS_ERR(primary_state)) | ||
602 | + return PTR_ERR(primary_state); | ||
603 | + | ||
604 | + /* check if primary plane is enabled */ | ||
605 | + if (!primary_state->crtc) | ||
606 | + return 0; | ||
607 | + | ||
608 | + /* Perform the bounds check to ensure the overlay plane covers the primary */ | ||
609 | + if (primary_state->crtc_x < overlay_state->crtc_x || | ||
610 | + primary_state->crtc_y < overlay_state->crtc_y || | ||
611 | + primary_state->crtc_x + primary_state->crtc_w > overlay_state->crtc_x + overlay_state->crtc_w || | ||
612 | + primary_state->crtc_y + primary_state->crtc_h > overlay_state->crtc_y + overlay_state->crtc_h) { | ||
613 | + DRM_DEBUG_ATOMIC("Overlay plane is enabled with hardware cursor but does not fully cover primary plane\n"); | ||
614 | + return -EINVAL; | ||
615 | + } | ||
616 | + | ||
617 | + return 0; | ||
618 | +} | ||
619 | + | ||
620 | /** | ||
621 | * amdgpu_dm_atomic_check() - Atomic check implementation for AMDgpu DM. | ||
622 | * @dev: The DRM device | ||
623 | @@ -7440,6 +7487,10 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, | ||
624 | goto fail; | ||
625 | } | ||
626 | |||
627 | + ret = validate_overlay(state); | ||
628 | + if (ret) | ||
629 | + goto fail; | ||
630 | + | ||
631 | /* Add new/modified planes */ | ||
632 | for_each_oldnew_plane_in_state_reverse(state, plane, old_plane_state, new_plane_state, i) { | ||
633 | ret = dm_update_plane_state(dc, state, plane, | ||
634 | diff --git a/drivers/input/touchscreen/elants_i2c.c b/drivers/input/touchscreen/elants_i2c.c | ||
635 | index d4ad24ea54c8c..a51e7c85f5819 100644 | ||
636 | --- a/drivers/input/touchscreen/elants_i2c.c | ||
637 | +++ b/drivers/input/touchscreen/elants_i2c.c | ||
638 | @@ -36,6 +36,7 @@ | ||
639 | #include <linux/of.h> | ||
640 | #include <linux/gpio/consumer.h> | ||
641 | #include <linux/regulator/consumer.h> | ||
642 | +#include <linux/uuid.h> | ||
643 | #include <asm/unaligned.h> | ||
644 | |||
645 | /* Device, Driver information */ | ||
646 | @@ -1127,6 +1128,40 @@ static void elants_i2c_power_off(void *_data) | ||
647 | } | ||
648 | } | ||
649 | |||
650 | +#ifdef CONFIG_ACPI | ||
651 | +static const struct acpi_device_id i2c_hid_ids[] = { | ||
652 | + {"ACPI0C50", 0 }, | ||
653 | + {"PNP0C50", 0 }, | ||
654 | + { }, | ||
655 | +}; | ||
656 | + | ||
657 | +static const guid_t i2c_hid_guid = | ||
658 | + GUID_INIT(0x3CDFF6F7, 0x4267, 0x4555, | ||
659 | + 0xAD, 0x05, 0xB3, 0x0A, 0x3D, 0x89, 0x38, 0xDE); | ||
660 | + | ||
661 | +static bool elants_acpi_is_hid_device(struct device *dev) | ||
662 | +{ | ||
663 | + acpi_handle handle = ACPI_HANDLE(dev); | ||
664 | + union acpi_object *obj; | ||
665 | + | ||
666 | + if (acpi_match_device_ids(ACPI_COMPANION(dev), i2c_hid_ids)) | ||
667 | + return false; | ||
668 | + | ||
669 | + obj = acpi_evaluate_dsm_typed(handle, &i2c_hid_guid, 1, 1, NULL, ACPI_TYPE_INTEGER); | ||
670 | + if (obj) { | ||
671 | + ACPI_FREE(obj); | ||
672 | + return true; | ||
673 | + } | ||
674 | + | ||
675 | + return false; | ||
676 | +} | ||
677 | +#else | ||
678 | +static bool elants_acpi_is_hid_device(struct device *dev) | ||
679 | +{ | ||
680 | + return false; | ||
681 | +} | ||
682 | +#endif | ||
683 | + | ||
684 | static int elants_i2c_probe(struct i2c_client *client, | ||
685 | const struct i2c_device_id *id) | ||
686 | { | ||
687 | @@ -1135,9 +1170,14 @@ static int elants_i2c_probe(struct i2c_client *client, | ||
688 | unsigned long irqflags; | ||
689 | int error; | ||
690 | |||
691 | + /* Don't bind to i2c-hid compatible devices, these are handled by the i2c-hid drv. */ | ||
692 | + if (elants_acpi_is_hid_device(&client->dev)) { | ||
693 | + dev_warn(&client->dev, "This device appears to be an I2C-HID device, not binding\n"); | ||
694 | + return -ENODEV; | ||
695 | + } | ||
696 | + | ||
697 | if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { | ||
698 | - dev_err(&client->dev, | ||
699 | - "%s: i2c check functionality error\n", DEVICE_NAME); | ||
700 | + dev_err(&client->dev, "I2C check functionality error\n"); | ||
701 | return -ENXIO; | ||
702 | } | ||
703 | |||
704 | diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c | ||
705 | index ad8b6a2bfd364..c8776146f1d1b 100644 | ||
706 | --- a/drivers/input/touchscreen/silead.c | ||
707 | +++ b/drivers/input/touchscreen/silead.c | ||
708 | @@ -20,6 +20,7 @@ | ||
709 | #include <linux/input/mt.h> | ||
710 | #include <linux/input/touchscreen.h> | ||
711 | #include <linux/pm.h> | ||
712 | +#include <linux/pm_runtime.h> | ||
713 | #include <linux/irq.h> | ||
714 | #include <linux/regulator/consumer.h> | ||
715 | |||
716 | @@ -335,10 +336,8 @@ static int silead_ts_get_id(struct i2c_client *client) | ||
717 | |||
718 | error = i2c_smbus_read_i2c_block_data(client, SILEAD_REG_ID, | ||
719 | sizeof(chip_id), (u8 *)&chip_id); | ||
720 | - if (error < 0) { | ||
721 | - dev_err(&client->dev, "Chip ID read error %d\n", error); | ||
722 | + if (error < 0) | ||
723 | return error; | ||
724 | - } | ||
725 | |||
726 | data->chip_id = le32_to_cpu(chip_id); | ||
727 | dev_info(&client->dev, "Silead chip ID: 0x%8X", data->chip_id); | ||
728 | @@ -351,12 +350,49 @@ static int silead_ts_setup(struct i2c_client *client) | ||
729 | int error; | ||
730 | u32 status; | ||
731 | |||
732 | + /* | ||
733 | + * Some buggy BIOS-es bring up the chip in a stuck state where it | ||
734 | + * blocks the I2C bus. The following steps are necessary to | ||
735 | + * unstuck the chip / bus: | ||
736 | + * 1. Turn off the Silead chip. | ||
737 | + * 2. Try to do an I2C transfer with the chip, this will fail in | ||
738 | + * response to which the I2C-bus-driver will call: | ||
739 | + * i2c_recover_bus() which will unstuck the I2C-bus. Note the | ||
740 | + * unstuck-ing of the I2C bus only works if we first drop the | ||
741 | + * chip off the bus by turning it off. | ||
742 | + * 3. Turn the chip back on. | ||
743 | + * | ||
744 | + * On the x86/ACPI systems were this problem is seen, step 1. and | ||
745 | + * 3. require making ACPI calls and dealing with ACPI Power | ||
746 | + * Resources. The workaround below runtime-suspends the chip to | ||
747 | + * turn it off, leaving it up to the ACPI subsystem to deal with | ||
748 | + * this. | ||
749 | + */ | ||
750 | + | ||
751 | + if (device_property_read_bool(&client->dev, | ||
752 | + "silead,stuck-controller-bug")) { | ||
753 | + pm_runtime_set_active(&client->dev); | ||
754 | + pm_runtime_enable(&client->dev); | ||
755 | + pm_runtime_allow(&client->dev); | ||
756 | + | ||
757 | + pm_runtime_suspend(&client->dev); | ||
758 | + | ||
759 | + dev_warn(&client->dev, FW_BUG "Stuck I2C bus: please ignore the next 'controller timed out' error\n"); | ||
760 | + silead_ts_get_id(client); | ||
761 | + | ||
762 | + /* The forbid will also resume the device */ | ||
763 | + pm_runtime_forbid(&client->dev); | ||
764 | + pm_runtime_disable(&client->dev); | ||
765 | + } | ||
766 | + | ||
767 | silead_ts_set_power(client, SILEAD_POWER_OFF); | ||
768 | silead_ts_set_power(client, SILEAD_POWER_ON); | ||
769 | |||
770 | error = silead_ts_get_id(client); | ||
771 | - if (error) | ||
772 | + if (error) { | ||
773 | + dev_err(&client->dev, "Chip ID read error %d\n", error); | ||
774 | return error; | ||
775 | + } | ||
776 | |||
777 | error = silead_ts_init(client); | ||
778 | if (error) | ||
779 | diff --git a/drivers/isdn/capi/kcapi.c b/drivers/isdn/capi/kcapi.c | ||
780 | index a4ceb61c5b603..18de41a266ebe 100644 | ||
781 | --- a/drivers/isdn/capi/kcapi.c | ||
782 | +++ b/drivers/isdn/capi/kcapi.c | ||
783 | @@ -846,7 +846,7 @@ EXPORT_SYMBOL(capi20_put_message); | ||
784 | * Return value: CAPI result code | ||
785 | */ | ||
786 | |||
787 | -u16 capi20_get_manufacturer(u32 contr, u8 *buf) | ||
788 | +u16 capi20_get_manufacturer(u32 contr, u8 buf[CAPI_MANUFACTURER_LEN]) | ||
789 | { | ||
790 | struct capi_ctr *ctr; | ||
791 | u16 ret; | ||
792 | @@ -916,7 +916,7 @@ EXPORT_SYMBOL(capi20_get_version); | ||
793 | * Return value: CAPI result code | ||
794 | */ | ||
795 | |||
796 | -u16 capi20_get_serial(u32 contr, u8 *serial) | ||
797 | +u16 capi20_get_serial(u32 contr, u8 serial[CAPI_SERIAL_LEN]) | ||
798 | { | ||
799 | struct capi_ctr *ctr; | ||
800 | u16 ret; | ||
801 | diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c | ||
802 | index bccd341e9ae16..5c183c02dfd92 100644 | ||
803 | --- a/drivers/misc/kgdbts.c | ||
804 | +++ b/drivers/misc/kgdbts.c | ||
805 | @@ -95,19 +95,19 @@ | ||
806 | |||
807 | #include <asm/sections.h> | ||
808 | |||
809 | -#define v1printk(a...) do { \ | ||
810 | - if (verbose) \ | ||
811 | - printk(KERN_INFO a); \ | ||
812 | - } while (0) | ||
813 | -#define v2printk(a...) do { \ | ||
814 | - if (verbose > 1) \ | ||
815 | - printk(KERN_INFO a); \ | ||
816 | - touch_nmi_watchdog(); \ | ||
817 | - } while (0) | ||
818 | -#define eprintk(a...) do { \ | ||
819 | - printk(KERN_ERR a); \ | ||
820 | - WARN_ON(1); \ | ||
821 | - } while (0) | ||
822 | +#define v1printk(a...) do { \ | ||
823 | + if (verbose) \ | ||
824 | + printk(KERN_INFO a); \ | ||
825 | +} while (0) | ||
826 | +#define v2printk(a...) do { \ | ||
827 | + if (verbose > 1) \ | ||
828 | + printk(KERN_INFO a); \ | ||
829 | + touch_nmi_watchdog(); \ | ||
830 | +} while (0) | ||
831 | +#define eprintk(a...) do { \ | ||
832 | + printk(KERN_ERR a); \ | ||
833 | + WARN_ON(1); \ | ||
834 | +} while (0) | ||
835 | #define MAX_CONFIG_LEN 40 | ||
836 | |||
837 | static struct kgdb_io kgdbts_io_ops; | ||
838 | diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c | ||
839 | index 2ce96cc1bad48..66ca51279018a 100644 | ||
840 | --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c | ||
841 | +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c | ||
842 | @@ -2690,7 +2690,7 @@ do { \ | ||
843 | seq_printf(seq, "%-12s", s); \ | ||
844 | for (i = 0; i < n; ++i) \ | ||
845 | seq_printf(seq, " %16" fmt_spec, v); \ | ||
846 | - seq_putc(seq, '\n'); \ | ||
847 | + seq_putc(seq, '\n'); \ | ||
848 | } while (0) | ||
849 | #define S(s, v) S3("s", s, v) | ||
850 | #define T3(fmt_spec, s, v) S3(fmt_spec, s, tx[i].v) | ||
851 | diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | ||
852 | index a41ac13cc4e55..0d993f4b701c2 100644 | ||
853 | --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | ||
854 | +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | ||
855 | @@ -211,7 +211,7 @@ static void dwmac4_dma_rx_chan_op_mode(void __iomem *ioaddr, int mode, | ||
856 | u32 channel, int fifosz, u8 qmode) | ||
857 | { | ||
858 | unsigned int rqs = fifosz / 256 - 1; | ||
859 | - u32 mtl_rx_op, mtl_rx_int; | ||
860 | + u32 mtl_rx_op; | ||
861 | |||
862 | mtl_rx_op = readl(ioaddr + MTL_CHAN_RX_OP_MODE(channel)); | ||
863 | |||
864 | @@ -282,11 +282,6 @@ static void dwmac4_dma_rx_chan_op_mode(void __iomem *ioaddr, int mode, | ||
865 | } | ||
866 | |||
867 | writel(mtl_rx_op, ioaddr + MTL_CHAN_RX_OP_MODE(channel)); | ||
868 | - | ||
869 | - /* Enable MTL RX overflow */ | ||
870 | - mtl_rx_int = readl(ioaddr + MTL_CHAN_INT_CTRL(channel)); | ||
871 | - writel(mtl_rx_int | MTL_RX_OVERFLOW_INT_EN, | ||
872 | - ioaddr + MTL_CHAN_INT_CTRL(channel)); | ||
873 | } | ||
874 | |||
875 | static void dwmac4_dma_tx_chan_op_mode(void __iomem *ioaddr, int mode, | ||
876 | diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | ||
877 | index 8e7c60e02fa09..10d28be73f456 100644 | ||
878 | --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | ||
879 | +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | ||
880 | @@ -3855,7 +3855,6 @@ static irqreturn_t stmmac_interrupt(int irq, void *dev_id) | ||
881 | /* To handle GMAC own interrupts */ | ||
882 | if ((priv->plat->has_gmac) || xmac) { | ||
883 | int status = stmmac_host_irq_status(priv, priv->hw, &priv->xstats); | ||
884 | - int mtl_status; | ||
885 | |||
886 | if (unlikely(status)) { | ||
887 | /* For LPI we need to save the tx status */ | ||
888 | @@ -3866,17 +3865,8 @@ static irqreturn_t stmmac_interrupt(int irq, void *dev_id) | ||
889 | } | ||
890 | |||
891 | for (queue = 0; queue < queues_count; queue++) { | ||
892 | - struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue]; | ||
893 | - | ||
894 | - mtl_status = stmmac_host_mtl_irq_status(priv, priv->hw, | ||
895 | - queue); | ||
896 | - if (mtl_status != -EINVAL) | ||
897 | - status |= mtl_status; | ||
898 | - | ||
899 | - if (status & CORE_IRQ_MTL_RX_OVERFLOW) | ||
900 | - stmmac_set_rx_tail_ptr(priv, priv->ioaddr, | ||
901 | - rx_q->rx_tail_addr, | ||
902 | - queue); | ||
903 | + status = stmmac_host_mtl_irq_status(priv, priv->hw, | ||
904 | + queue); | ||
905 | } | ||
906 | |||
907 | /* PCS link status */ | ||
908 | diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c | ||
909 | index b67460864b3c2..d8ee001d8e8eb 100644 | ||
910 | --- a/drivers/net/virtio_net.c | ||
911 | +++ b/drivers/net/virtio_net.c | ||
912 | @@ -406,9 +406,13 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi, | ||
913 | offset += hdr_padded_len; | ||
914 | p += hdr_padded_len; | ||
915 | |||
916 | - copy = len; | ||
917 | - if (copy > skb_tailroom(skb)) | ||
918 | - copy = skb_tailroom(skb); | ||
919 | + /* Copy all frame if it fits skb->head, otherwise | ||
920 | + * we let virtio_net_hdr_to_skb() and GRO pull headers as needed. | ||
921 | + */ | ||
922 | + if (len <= skb_tailroom(skb)) | ||
923 | + copy = len; | ||
924 | + else | ||
925 | + copy = ETH_HLEN + metasize; | ||
926 | skb_put_data(skb, p, copy); | ||
927 | |||
928 | if (metasize) { | ||
929 | diff --git a/drivers/pci/controller/pci-thunder-ecam.c b/drivers/pci/controller/pci-thunder-ecam.c | ||
930 | index 32d1d7b81ef4e..18715d2ce0229 100644 | ||
931 | --- a/drivers/pci/controller/pci-thunder-ecam.c | ||
932 | +++ b/drivers/pci/controller/pci-thunder-ecam.c | ||
933 | @@ -116,7 +116,7 @@ static int thunder_ecam_p2_config_read(struct pci_bus *bus, unsigned int devfn, | ||
934 | * the config space access window. Since we are working with | ||
935 | * the high-order 32 bits, shift everything down by 32 bits. | ||
936 | */ | ||
937 | - node_bits = (cfg->res.start >> 32) & (1 << 12); | ||
938 | + node_bits = upper_32_bits(cfg->res.start) & (1 << 12); | ||
939 | |||
940 | v |= node_bits; | ||
941 | set_val(v, where, size, val); | ||
942 | diff --git a/drivers/pci/controller/pci-thunder-pem.c b/drivers/pci/controller/pci-thunder-pem.c | ||
943 | index f127ce8bd4ef3..1650ec2c35f9a 100644 | ||
944 | --- a/drivers/pci/controller/pci-thunder-pem.c | ||
945 | +++ b/drivers/pci/controller/pci-thunder-pem.c | ||
946 | @@ -11,6 +11,7 @@ | ||
947 | #include <linux/pci-acpi.h> | ||
948 | #include <linux/pci-ecam.h> | ||
949 | #include <linux/platform_device.h> | ||
950 | +#include <linux/io-64-nonatomic-lo-hi.h> | ||
951 | #include "../pci.h" | ||
952 | |||
953 | #if defined(CONFIG_PCI_HOST_THUNDER_PEM) || (defined(CONFIG_ACPI) && defined(CONFIG_PCI_QUIRKS)) | ||
954 | @@ -314,9 +315,9 @@ static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg, | ||
955 | * structure here for the BAR. | ||
956 | */ | ||
957 | bar4_start = res_pem->start + 0xf00000; | ||
958 | - pem_pci->ea_entry[0] = (u32)bar4_start | 2; | ||
959 | - pem_pci->ea_entry[1] = (u32)(res_pem->end - bar4_start) & ~3u; | ||
960 | - pem_pci->ea_entry[2] = (u32)(bar4_start >> 32); | ||
961 | + pem_pci->ea_entry[0] = lower_32_bits(bar4_start) | 2; | ||
962 | + pem_pci->ea_entry[1] = lower_32_bits(res_pem->end - bar4_start) & ~3u; | ||
963 | + pem_pci->ea_entry[2] = upper_32_bits(bar4_start); | ||
964 | |||
965 | cfg->priv = pem_pci; | ||
966 | return 0; | ||
967 | @@ -324,9 +325,9 @@ static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg, | ||
968 | |||
969 | #if defined(CONFIG_ACPI) && defined(CONFIG_PCI_QUIRKS) | ||
970 | |||
971 | -#define PEM_RES_BASE 0x87e0c0000000UL | ||
972 | -#define PEM_NODE_MASK GENMASK(45, 44) | ||
973 | -#define PEM_INDX_MASK GENMASK(26, 24) | ||
974 | +#define PEM_RES_BASE 0x87e0c0000000ULL | ||
975 | +#define PEM_NODE_MASK GENMASK_ULL(45, 44) | ||
976 | +#define PEM_INDX_MASK GENMASK_ULL(26, 24) | ||
977 | #define PEM_MIN_DOM_IN_NODE 4 | ||
978 | #define PEM_MAX_DOM_IN_NODE 10 | ||
979 | |||
980 | diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c | ||
981 | index 6e60b4b1bf53b..98be06ac2af24 100644 | ||
982 | --- a/drivers/pci/hotplug/acpiphp_glue.c | ||
983 | +++ b/drivers/pci/hotplug/acpiphp_glue.c | ||
984 | @@ -540,6 +540,7 @@ static void enable_slot(struct acpiphp_slot *slot, bool bridge) | ||
985 | slot->flags &= ~SLOT_ENABLED; | ||
986 | continue; | ||
987 | } | ||
988 | + pci_dev_put(dev); | ||
989 | } | ||
990 | } | ||
991 | |||
992 | diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h | ||
993 | index a5adc2e2c351d..572c2f0a2f0c7 100644 | ||
994 | --- a/drivers/pci/pci.h | ||
995 | +++ b/drivers/pci/pci.h | ||
996 | @@ -588,6 +588,12 @@ static inline int pci_dev_specific_reset(struct pci_dev *dev, int probe) | ||
997 | #if defined(CONFIG_PCI_QUIRKS) && defined(CONFIG_ARM64) | ||
998 | int acpi_get_rc_resources(struct device *dev, const char *hid, u16 segment, | ||
999 | struct resource *res); | ||
1000 | +#else | ||
1001 | +static inline int acpi_get_rc_resources(struct device *dev, const char *hid, | ||
1002 | + u16 segment, struct resource *res) | ||
1003 | +{ | ||
1004 | + return -ENODEV; | ||
1005 | +} | ||
1006 | #endif | ||
1007 | |||
1008 | u32 pci_rebar_get_possible_sizes(struct pci_dev *pdev, int bar); | ||
1009 | diff --git a/drivers/pinctrl/pinctrl-ingenic.c b/drivers/pinctrl/pinctrl-ingenic.c | ||
1010 | index 61e7d938d4c5c..91596eee0bda1 100644 | ||
1011 | --- a/drivers/pinctrl/pinctrl-ingenic.c | ||
1012 | +++ b/drivers/pinctrl/pinctrl-ingenic.c | ||
1013 | @@ -1846,7 +1846,8 @@ static int ingenic_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin, | ||
1014 | break; | ||
1015 | |||
1016 | default: | ||
1017 | - unreachable(); | ||
1018 | + /* unreachable */ | ||
1019 | + break; | ||
1020 | } | ||
1021 | } | ||
1022 | |||
1023 | diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c | ||
1024 | index ef7cef316d210..795460eda6a59 100644 | ||
1025 | --- a/drivers/scsi/lpfc/lpfc_sli.c | ||
1026 | +++ b/drivers/scsi/lpfc/lpfc_sli.c | ||
1027 | @@ -11337,13 +11337,20 @@ lpfc_sli_validate_fcp_iocb(struct lpfc_iocbq *iocbq, struct lpfc_vport *vport, | ||
1028 | lpfc_ctx_cmd ctx_cmd) | ||
1029 | { | ||
1030 | struct lpfc_io_buf *lpfc_cmd; | ||
1031 | + IOCB_t *icmd = NULL; | ||
1032 | int rc = 1; | ||
1033 | |||
1034 | if (iocbq->vport != vport) | ||
1035 | return rc; | ||
1036 | |||
1037 | - if (!(iocbq->iocb_flag & LPFC_IO_FCP) || | ||
1038 | - !(iocbq->iocb_flag & LPFC_IO_ON_TXCMPLQ)) | ||
1039 | + if (!(iocbq->iocb_flag & LPFC_IO_FCP) || | ||
1040 | + !(iocbq->iocb_flag & LPFC_IO_ON_TXCMPLQ) || | ||
1041 | + iocbq->iocb_flag & LPFC_DRIVER_ABORTED) | ||
1042 | + return rc; | ||
1043 | + | ||
1044 | + icmd = &iocbq->iocb; | ||
1045 | + if (icmd->ulpCommand == CMD_ABORT_XRI_CN || | ||
1046 | + icmd->ulpCommand == CMD_CLOSE_XRI_CN) | ||
1047 | return rc; | ||
1048 | |||
1049 | lpfc_cmd = container_of(iocbq, struct lpfc_io_buf, cur_iocbq); | ||
1050 | diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c | ||
1051 | index d6634baebb474..71144e33272a3 100644 | ||
1052 | --- a/drivers/target/target_core_user.c | ||
1053 | +++ b/drivers/target/target_core_user.c | ||
1054 | @@ -1205,7 +1205,7 @@ static void tcmu_set_next_deadline(struct list_head *queue, | ||
1055 | del_timer(timer); | ||
1056 | } | ||
1057 | |||
1058 | -static unsigned int tcmu_handle_completions(struct tcmu_dev *udev) | ||
1059 | +static bool tcmu_handle_completions(struct tcmu_dev *udev) | ||
1060 | { | ||
1061 | struct tcmu_mailbox *mb; | ||
1062 | struct tcmu_cmd *cmd; | ||
1063 | @@ -1245,7 +1245,7 @@ static unsigned int tcmu_handle_completions(struct tcmu_dev *udev) | ||
1064 | pr_err("cmd_id %u not found, ring is broken\n", | ||
1065 | entry->hdr.cmd_id); | ||
1066 | set_bit(TCMU_DEV_BIT_BROKEN, &udev->flags); | ||
1067 | - break; | ||
1068 | + return false; | ||
1069 | } | ||
1070 | |||
1071 | tcmu_handle_completion(cmd, entry); | ||
1072 | diff --git a/drivers/usb/host/sl811-hcd.c b/drivers/usb/host/sl811-hcd.c | ||
1073 | index 72a34a1eb6189..936fddc6d8207 100644 | ||
1074 | --- a/drivers/usb/host/sl811-hcd.c | ||
1075 | +++ b/drivers/usb/host/sl811-hcd.c | ||
1076 | @@ -1287,11 +1287,10 @@ sl811h_hub_control( | ||
1077 | goto error; | ||
1078 | put_unaligned_le32(sl811->port1, buf); | ||
1079 | |||
1080 | -#ifndef VERBOSE | ||
1081 | - if (*(u16*)(buf+2)) /* only if wPortChange is interesting */ | ||
1082 | -#endif | ||
1083 | - dev_dbg(hcd->self.controller, "GetPortStatus %08x\n", | ||
1084 | - sl811->port1); | ||
1085 | + if (__is_defined(VERBOSE) || | ||
1086 | + *(u16*)(buf+2)) /* only if wPortChange is interesting */ | ||
1087 | + dev_dbg(hcd->self.controller, "GetPortStatus %08x\n", | ||
1088 | + sl811->port1); | ||
1089 | break; | ||
1090 | case SetPortFeature: | ||
1091 | if (wIndex != 1 || wLength != 0) | ||
1092 | diff --git a/fs/block_dev.c b/fs/block_dev.c | ||
1093 | index bd93563477a43..fa329c7eddf02 100644 | ||
1094 | --- a/fs/block_dev.c | ||
1095 | +++ b/fs/block_dev.c | ||
1096 | @@ -1987,6 +1987,7 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from) | ||
1097 | struct inode *bd_inode = bdev_file_inode(file); | ||
1098 | loff_t size = i_size_read(bd_inode); | ||
1099 | struct blk_plug plug; | ||
1100 | + size_t shorted = 0; | ||
1101 | ssize_t ret; | ||
1102 | |||
1103 | if (bdev_read_only(I_BDEV(bd_inode))) | ||
1104 | @@ -2005,12 +2006,17 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from) | ||
1105 | if ((iocb->ki_flags & (IOCB_NOWAIT | IOCB_DIRECT)) == IOCB_NOWAIT) | ||
1106 | return -EOPNOTSUPP; | ||
1107 | |||
1108 | - iov_iter_truncate(from, size - iocb->ki_pos); | ||
1109 | + size -= iocb->ki_pos; | ||
1110 | + if (iov_iter_count(from) > size) { | ||
1111 | + shorted = iov_iter_count(from) - size; | ||
1112 | + iov_iter_truncate(from, size); | ||
1113 | + } | ||
1114 | |||
1115 | blk_start_plug(&plug); | ||
1116 | ret = __generic_file_write_iter(iocb, from); | ||
1117 | if (ret > 0) | ||
1118 | ret = generic_write_sync(iocb, ret); | ||
1119 | + iov_iter_reexpand(from, iov_iter_count(from) + shorted); | ||
1120 | blk_finish_plug(&plug); | ||
1121 | return ret; | ||
1122 | } | ||
1123 | @@ -2022,13 +2028,21 @@ ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to) | ||
1124 | struct inode *bd_inode = bdev_file_inode(file); | ||
1125 | loff_t size = i_size_read(bd_inode); | ||
1126 | loff_t pos = iocb->ki_pos; | ||
1127 | + size_t shorted = 0; | ||
1128 | + ssize_t ret; | ||
1129 | |||
1130 | if (pos >= size) | ||
1131 | return 0; | ||
1132 | |||
1133 | size -= pos; | ||
1134 | - iov_iter_truncate(to, size); | ||
1135 | - return generic_file_read_iter(iocb, to); | ||
1136 | + if (iov_iter_count(to) > size) { | ||
1137 | + shorted = iov_iter_count(to) - size; | ||
1138 | + iov_iter_truncate(to, size); | ||
1139 | + } | ||
1140 | + | ||
1141 | + ret = generic_file_read_iter(iocb, to); | ||
1142 | + iov_iter_reexpand(to, iov_iter_count(to) + shorted); | ||
1143 | + return ret; | ||
1144 | } | ||
1145 | EXPORT_SYMBOL_GPL(blkdev_read_iter); | ||
1146 | |||
1147 | diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c | ||
1148 | index 22833fa5bb589..a6047caf77ecb 100644 | ||
1149 | --- a/fs/ceph/caps.c | ||
1150 | +++ b/fs/ceph/caps.c | ||
1151 | @@ -1780,6 +1780,7 @@ static int try_nonblocking_invalidate(struct inode *inode) | ||
1152 | u32 invalidating_gen = ci->i_rdcache_gen; | ||
1153 | |||
1154 | spin_unlock(&ci->i_ceph_lock); | ||
1155 | + ceph_fscache_invalidate(inode); | ||
1156 | invalidate_mapping_pages(&inode->i_data, 0, -1); | ||
1157 | spin_lock(&ci->i_ceph_lock); | ||
1158 | |||
1159 | diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c | ||
1160 | index 660a878e20ef2..5beebbbb42f09 100644 | ||
1161 | --- a/fs/ceph/inode.c | ||
1162 | +++ b/fs/ceph/inode.c | ||
1163 | @@ -1875,6 +1875,7 @@ static void ceph_do_invalidate_pages(struct inode *inode) | ||
1164 | orig_gen = ci->i_rdcache_gen; | ||
1165 | spin_unlock(&ci->i_ceph_lock); | ||
1166 | |||
1167 | + ceph_fscache_invalidate(inode); | ||
1168 | if (invalidate_inode_pages2(inode->i_mapping) < 0) { | ||
1169 | pr_err("invalidate_pages %p fails\n", inode); | ||
1170 | } | ||
1171 | diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h | ||
1172 | index 98775d7fa6963..b465f8f3e554f 100644 | ||
1173 | --- a/include/linux/virtio_net.h | ||
1174 | +++ b/include/linux/virtio_net.h | ||
1175 | @@ -65,14 +65,18 @@ static inline int virtio_net_hdr_to_skb(struct sk_buff *skb, | ||
1176 | skb_reset_mac_header(skb); | ||
1177 | |||
1178 | if (hdr->flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) { | ||
1179 | - u16 start = __virtio16_to_cpu(little_endian, hdr->csum_start); | ||
1180 | - u16 off = __virtio16_to_cpu(little_endian, hdr->csum_offset); | ||
1181 | + u32 start = __virtio16_to_cpu(little_endian, hdr->csum_start); | ||
1182 | + u32 off = __virtio16_to_cpu(little_endian, hdr->csum_offset); | ||
1183 | + u32 needed = start + max_t(u32, thlen, off + sizeof(__sum16)); | ||
1184 | + | ||
1185 | + if (!pskb_may_pull(skb, needed)) | ||
1186 | + return -EINVAL; | ||
1187 | |||
1188 | if (!skb_partial_csum_set(skb, start, off)) | ||
1189 | return -EINVAL; | ||
1190 | |||
1191 | p_off = skb_transport_offset(skb) + thlen; | ||
1192 | - if (p_off > skb_headlen(skb)) | ||
1193 | + if (!pskb_may_pull(skb, p_off)) | ||
1194 | return -EINVAL; | ||
1195 | } else { | ||
1196 | /* gso packets without NEEDS_CSUM do not set transport_offset. | ||
1197 | @@ -102,14 +106,14 @@ retry: | ||
1198 | } | ||
1199 | |||
1200 | p_off = keys.control.thoff + thlen; | ||
1201 | - if (p_off > skb_headlen(skb) || | ||
1202 | + if (!pskb_may_pull(skb, p_off) || | ||
1203 | keys.basic.ip_proto != ip_proto) | ||
1204 | return -EINVAL; | ||
1205 | |||
1206 | skb_set_transport_header(skb, keys.control.thoff); | ||
1207 | } else if (gso_type) { | ||
1208 | p_off = thlen; | ||
1209 | - if (p_off > skb_headlen(skb)) | ||
1210 | + if (!pskb_may_pull(skb, p_off)) | ||
1211 | return -EINVAL; | ||
1212 | } | ||
1213 | } | ||
1214 | diff --git a/lib/stackdepot.c b/lib/stackdepot.c | ||
1215 | index 81c69c08d1d15..468626b8eb1b9 100644 | ||
1216 | --- a/lib/stackdepot.c | ||
1217 | +++ b/lib/stackdepot.c | ||
1218 | @@ -69,7 +69,7 @@ static void *stack_slabs[STACK_ALLOC_MAX_SLABS]; | ||
1219 | static int depot_index; | ||
1220 | static int next_slab_inited; | ||
1221 | static size_t depot_offset; | ||
1222 | -static DEFINE_SPINLOCK(depot_lock); | ||
1223 | +static DEFINE_RAW_SPINLOCK(depot_lock); | ||
1224 | |||
1225 | static bool init_stack_slab(void **prealloc) | ||
1226 | { | ||
1227 | @@ -269,7 +269,7 @@ depot_stack_handle_t stack_depot_save(unsigned long *entries, | ||
1228 | prealloc = page_address(page); | ||
1229 | } | ||
1230 | |||
1231 | - spin_lock_irqsave(&depot_lock, flags); | ||
1232 | + raw_spin_lock_irqsave(&depot_lock, flags); | ||
1233 | |||
1234 | found = find_stack(*bucket, entries, nr_entries, hash); | ||
1235 | if (!found) { | ||
1236 | @@ -293,7 +293,7 @@ depot_stack_handle_t stack_depot_save(unsigned long *entries, | ||
1237 | WARN_ON(!init_stack_slab(&prealloc)); | ||
1238 | } | ||
1239 | |||
1240 | - spin_unlock_irqrestore(&depot_lock, flags); | ||
1241 | + raw_spin_unlock_irqrestore(&depot_lock, flags); | ||
1242 | exit: | ||
1243 | if (prealloc) { | ||
1244 | /* Nobody used this memory, ok to free it. */ | ||
1245 | diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c | ||
1246 | index a0a54482aabc4..8a664148f57aa 100644 | ||
1247 | --- a/net/bridge/br_netlink.c | ||
1248 | +++ b/net/bridge/br_netlink.c | ||
1249 | @@ -99,8 +99,9 @@ static size_t br_get_link_af_size_filtered(const struct net_device *dev, | ||
1250 | |||
1251 | rcu_read_lock(); | ||
1252 | if (netif_is_bridge_port(dev)) { | ||
1253 | - p = br_port_get_rcu(dev); | ||
1254 | - vg = nbp_vlan_group_rcu(p); | ||
1255 | + p = br_port_get_check_rcu(dev); | ||
1256 | + if (p) | ||
1257 | + vg = nbp_vlan_group_rcu(p); | ||
1258 | } else if (dev->priv_flags & IFF_EBRIDGE) { | ||
1259 | br = netdev_priv(dev); | ||
1260 | vg = br_vlan_group_rcu(br); | ||
1261 | diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c | ||
1262 | index e4a43a8941c86..0cb8056d98003 100644 | ||
1263 | --- a/net/ipv6/ip6_gre.c | ||
1264 | +++ b/net/ipv6/ip6_gre.c | ||
1265 | @@ -387,7 +387,6 @@ static struct ip6_tnl *ip6gre_tunnel_locate(struct net *net, | ||
1266 | if (!(nt->parms.o_flags & TUNNEL_SEQ)) | ||
1267 | dev->features |= NETIF_F_LLTX; | ||
1268 | |||
1269 | - dev_hold(dev); | ||
1270 | ip6gre_tunnel_link(ign, nt); | ||
1271 | return nt; | ||
1272 | |||
1273 | @@ -1483,6 +1482,7 @@ static int ip6gre_tunnel_init_common(struct net_device *dev) | ||
1274 | } | ||
1275 | ip6gre_tnl_init_features(dev); | ||
1276 | |||
1277 | + dev_hold(dev); | ||
1278 | return 0; | ||
1279 | |||
1280 | cleanup_dst_cache_init: | ||
1281 | @@ -1525,8 +1525,6 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev) | ||
1282 | strcpy(tunnel->parms.name, dev->name); | ||
1283 | |||
1284 | tunnel->hlen = sizeof(struct ipv6hdr) + 4; | ||
1285 | - | ||
1286 | - dev_hold(dev); | ||
1287 | } | ||
1288 | |||
1289 | static struct inet6_protocol ip6gre_protocol __read_mostly = { | ||
1290 | @@ -1876,6 +1874,7 @@ static int ip6erspan_tap_init(struct net_device *dev) | ||
1291 | dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; | ||
1292 | ip6erspan_tnl_link_config(tunnel, 1); | ||
1293 | |||
1294 | + dev_hold(dev); | ||
1295 | return 0; | ||
1296 | |||
1297 | cleanup_dst_cache_init: | ||
1298 | @@ -1975,8 +1974,6 @@ static int ip6gre_newlink_common(struct net *src_net, struct net_device *dev, | ||
1299 | if (tb[IFLA_MTU]) | ||
1300 | ip6_tnl_change_mtu(dev, nla_get_u32(tb[IFLA_MTU])); | ||
1301 | |||
1302 | - dev_hold(dev); | ||
1303 | - | ||
1304 | out: | ||
1305 | return err; | ||
1306 | } | ||
1307 | diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c | ||
1308 | index 69799b612ee80..fd0d1cee2d3f5 100644 | ||
1309 | --- a/net/ipv6/ip6_tunnel.c | ||
1310 | +++ b/net/ipv6/ip6_tunnel.c | ||
1311 | @@ -267,7 +267,6 @@ static int ip6_tnl_create2(struct net_device *dev) | ||
1312 | |||
1313 | strcpy(t->parms.name, dev->name); | ||
1314 | |||
1315 | - dev_hold(dev); | ||
1316 | ip6_tnl_link(ip6n, t); | ||
1317 | return 0; | ||
1318 | |||
1319 | @@ -1861,6 +1860,7 @@ ip6_tnl_dev_init_gen(struct net_device *dev) | ||
1320 | dev->min_mtu = ETH_MIN_MTU; | ||
1321 | dev->max_mtu = IP6_MAX_MTU - dev->hard_header_len; | ||
1322 | |||
1323 | + dev_hold(dev); | ||
1324 | return 0; | ||
1325 | |||
1326 | destroy_dst: | ||
1327 | @@ -1904,7 +1904,6 @@ static int __net_init ip6_fb_tnl_dev_init(struct net_device *dev) | ||
1328 | struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id); | ||
1329 | |||
1330 | t->parms.proto = IPPROTO_IPV6; | ||
1331 | - dev_hold(dev); | ||
1332 | |||
1333 | rcu_assign_pointer(ip6n->tnls_wc[0], t); | ||
1334 | return 0; | ||
1335 | diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c | ||
1336 | index 01ddb0f70c578..12ab6605d9617 100644 | ||
1337 | --- a/net/ipv6/ip6_vti.c | ||
1338 | +++ b/net/ipv6/ip6_vti.c | ||
1339 | @@ -952,7 +952,6 @@ static int __net_init vti6_fb_tnl_dev_init(struct net_device *dev) | ||
1340 | struct vti6_net *ip6n = net_generic(net, vti6_net_id); | ||
1341 | |||
1342 | t->parms.proto = IPPROTO_IPV6; | ||
1343 | - dev_hold(dev); | ||
1344 | |||
1345 | rcu_assign_pointer(ip6n->tnls_wc[0], t); | ||
1346 | return 0; | ||
1347 | diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c | ||
1348 | index 2710f3bc856f8..7f9cae4c49e7e 100644 | ||
1349 | --- a/net/ipv6/sit.c | ||
1350 | +++ b/net/ipv6/sit.c | ||
1351 | @@ -211,8 +211,6 @@ static int ipip6_tunnel_create(struct net_device *dev) | ||
1352 | |||
1353 | ipip6_tunnel_clone_6rd(dev, sitn); | ||
1354 | |||
1355 | - dev_hold(dev); | ||
1356 | - | ||
1357 | ipip6_tunnel_link(sitn, t); | ||
1358 | return 0; | ||
1359 | |||
1360 | @@ -1408,7 +1406,7 @@ static int ipip6_tunnel_init(struct net_device *dev) | ||
1361 | dev->tstats = NULL; | ||
1362 | return err; | ||
1363 | } | ||
1364 | - | ||
1365 | + dev_hold(dev); | ||
1366 | return 0; | ||
1367 | } | ||
1368 | |||
1369 | @@ -1424,7 +1422,6 @@ static void __net_init ipip6_fb_tunnel_init(struct net_device *dev) | ||
1370 | iph->ihl = 5; | ||
1371 | iph->ttl = 64; | ||
1372 | |||
1373 | - dev_hold(dev); | ||
1374 | rcu_assign_pointer(sitn->tunnels_wc[0], tunnel); | ||
1375 | } | ||
1376 | |||
1377 | diff --git a/net/xdp/xsk_queue.h b/net/xdp/xsk_queue.h | ||
1378 | index eddae46888629..ee3f8c857dd8c 100644 | ||
1379 | --- a/net/xdp/xsk_queue.h | ||
1380 | +++ b/net/xdp/xsk_queue.h | ||
1381 | @@ -363,12 +363,15 @@ static inline void xskq_produce_flush_desc(struct xsk_queue *q) | ||
1382 | |||
1383 | static inline bool xskq_full_desc(struct xsk_queue *q) | ||
1384 | { | ||
1385 | - return xskq_nb_avail(q, q->nentries) == q->nentries; | ||
1386 | + /* No barriers needed since data is not accessed */ | ||
1387 | + return READ_ONCE(q->ring->producer) - READ_ONCE(q->ring->consumer) == | ||
1388 | + q->nentries; | ||
1389 | } | ||
1390 | |||
1391 | static inline bool xskq_empty_desc(struct xsk_queue *q) | ||
1392 | { | ||
1393 | - return xskq_nb_free(q, q->prod_tail, q->nentries) == q->nentries; | ||
1394 | + /* No barriers needed since data is not accessed */ | ||
1395 | + return READ_ONCE(q->ring->consumer) == READ_ONCE(q->ring->producer); | ||
1396 | } | ||
1397 | |||
1398 | void xskq_set_umem(struct xsk_queue *q, u64 size, u64 chunk_mask); | ||
1399 | diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter | ||
1400 | index 8c965f6a98812..a1b95100b3196 100755 | ||
1401 | --- a/scripts/bloat-o-meter | ||
1402 | +++ b/scripts/bloat-o-meter | ||
1403 | @@ -1,4 +1,4 @@ | ||
1404 | -#!/usr/bin/python | ||
1405 | +#!/usr/bin/env python3 | ||
1406 | # | ||
1407 | # Copyright 2004 Matt Mackall <mpm@selenic.com> | ||
1408 | # | ||
1409 | diff --git a/scripts/config b/scripts/config | ||
1410 | index eee5b7f3a092a..8c8d7c3d7accc 100755 | ||
1411 | --- a/scripts/config | ||
1412 | +++ b/scripts/config | ||
1413 | @@ -1,4 +1,4 @@ | ||
1414 | -#!/bin/bash | ||
1415 | +#!/usr/bin/env bash | ||
1416 | # SPDX-License-Identifier: GPL-2.0 | ||
1417 | # Manipulate options in a .config file from the command line | ||
1418 | |||
1419 | diff --git a/scripts/diffconfig b/scripts/diffconfig | ||
1420 | index 89abf777f1973..d5da5fa05d1d3 100755 | ||
1421 | --- a/scripts/diffconfig | ||
1422 | +++ b/scripts/diffconfig | ||
1423 | @@ -1,4 +1,4 @@ | ||
1424 | -#!/usr/bin/python | ||
1425 | +#!/usr/bin/env python3 | ||
1426 | # SPDX-License-Identifier: GPL-2.0 | ||
1427 | # | ||
1428 | # diffconfig - a tool to compare .config files. | ||
1429 | diff --git a/scripts/get_abi.pl b/scripts/get_abi.pl | ||
1430 | index c738cb7955141..ba87b230fe0a4 100755 | ||
1431 | --- a/scripts/get_abi.pl | ||
1432 | +++ b/scripts/get_abi.pl | ||
1433 | @@ -1,4 +1,4 @@ | ||
1434 | -#!/usr/bin/perl | ||
1435 | +#!/usr/bin/env perl | ||
1436 | # SPDX-License-Identifier: GPL-2.0 | ||
1437 | |||
1438 | use strict; | ||
1439 | diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl | ||
1440 | index 0bafed857e171..4f84657f55c23 100755 | ||
1441 | --- a/scripts/recordmcount.pl | ||
1442 | +++ b/scripts/recordmcount.pl | ||
1443 | @@ -395,7 +395,7 @@ if ($arch eq "x86_64") { | ||
1444 | $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s_mcount\$"; | ||
1445 | } elsif ($arch eq "riscv") { | ||
1446 | $function_regex = "^([0-9a-fA-F]+)\\s+<([^.0-9][0-9a-zA-Z_\\.]+)>:"; | ||
1447 | - $mcount_regex = "^\\s*([0-9a-fA-F]+):\\sR_RISCV_CALL\\s_mcount\$"; | ||
1448 | + $mcount_regex = "^\\s*([0-9a-fA-F]+):\\sR_RISCV_CALL(_PLT)?\\s_?mcount\$"; | ||
1449 | $type = ".quad"; | ||
1450 | $alignment = 2; | ||
1451 | } elsif ($arch eq "nds32") { | ||
1452 | diff --git a/scripts/show_delta b/scripts/show_delta | ||
1453 | index 264399307c4fc..28e67e1781941 100755 | ||
1454 | --- a/scripts/show_delta | ||
1455 | +++ b/scripts/show_delta | ||
1456 | @@ -1,4 +1,4 @@ | ||
1457 | -#!/usr/bin/python | ||
1458 | +#!/usr/bin/env python | ||
1459 | # SPDX-License-Identifier: GPL-2.0-only | ||
1460 | # | ||
1461 | # show_deltas: Read list of printk messages instrumented with | ||
1462 | diff --git a/scripts/sphinx-pre-install b/scripts/sphinx-pre-install | ||
1463 | index 3b638c0e1a4fd..62cb61baad83f 100755 | ||
1464 | --- a/scripts/sphinx-pre-install | ||
1465 | +++ b/scripts/sphinx-pre-install | ||
1466 | @@ -1,4 +1,4 @@ | ||
1467 | -#!/usr/bin/perl | ||
1468 | +#!/usr/bin/env perl | ||
1469 | # SPDX-License-Identifier: GPL-2.0-or-later | ||
1470 | use strict; | ||
1471 | |||
1472 | diff --git a/scripts/split-man.pl b/scripts/split-man.pl | ||
1473 | index c3db607ee9ec1..96bd99dc977a5 100755 | ||
1474 | --- a/scripts/split-man.pl | ||
1475 | +++ b/scripts/split-man.pl | ||
1476 | @@ -1,4 +1,4 @@ | ||
1477 | -#!/usr/bin/perl | ||
1478 | +#!/usr/bin/env perl | ||
1479 | # SPDX-License-Identifier: GPL-2.0 | ||
1480 | # | ||
1481 | # Author: Mauro Carvalho Chehab <mchehab+samsung@kernel.org> | ||
1482 | diff --git a/scripts/tracing/draw_functrace.py b/scripts/tracing/draw_functrace.py | ||
1483 | index b657357585209..74f8aadfd4cbc 100755 | ||
1484 | --- a/scripts/tracing/draw_functrace.py | ||
1485 | +++ b/scripts/tracing/draw_functrace.py | ||
1486 | @@ -1,4 +1,4 @@ | ||
1487 | -#!/usr/bin/python | ||
1488 | +#!/usr/bin/env python | ||
1489 | # SPDX-License-Identifier: GPL-2.0-only | ||
1490 | |||
1491 | """ | ||
1492 | diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c | ||
1493 | index efceeae09045f..7ac3f04ca8c00 100644 | ||
1494 | --- a/sound/pci/hda/hda_generic.c | ||
1495 | +++ b/sound/pci/hda/hda_generic.c | ||
1496 | @@ -1202,11 +1202,17 @@ static const char *get_line_out_pfx(struct hda_codec *codec, int ch, | ||
1497 | *index = ch; | ||
1498 | return "Headphone"; | ||
1499 | case AUTO_PIN_LINE_OUT: | ||
1500 | - /* This deals with the case where we have two DACs and | ||
1501 | - * one LO, one HP and one Speaker */ | ||
1502 | - if (!ch && cfg->speaker_outs && cfg->hp_outs) { | ||
1503 | - bool hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type); | ||
1504 | - bool spk_lo_shared = !path_has_mixer(codec, spec->speaker_paths[0], ctl_type); | ||
1505 | + /* This deals with the case where one HP or one Speaker or | ||
1506 | + * one HP + one Speaker need to share the DAC with LO | ||
1507 | + */ | ||
1508 | + if (!ch) { | ||
1509 | + bool hp_lo_shared = false, spk_lo_shared = false; | ||
1510 | + | ||
1511 | + if (cfg->speaker_outs) | ||
1512 | + spk_lo_shared = !path_has_mixer(codec, | ||
1513 | + spec->speaker_paths[0], ctl_type); | ||
1514 | + if (cfg->hp_outs) | ||
1515 | + hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type); | ||
1516 | if (hp_lo_shared && spk_lo_shared) | ||
1517 | return spec->vmaster_mute.hook ? "PCM" : "Master"; | ||
1518 | if (hp_lo_shared) | ||
1519 | diff --git a/tools/perf/python/tracepoint.py b/tools/perf/python/tracepoint.py | ||
1520 | index eb76f6516247e..461848c7f57dc 100755 | ||
1521 | --- a/tools/perf/python/tracepoint.py | ||
1522 | +++ b/tools/perf/python/tracepoint.py | ||
1523 | @@ -1,4 +1,4 @@ | ||
1524 | -#! /usr/bin/python | ||
1525 | +#! /usr/bin/env python | ||
1526 | # SPDX-License-Identifier: GPL-2.0 | ||
1527 | # -*- python -*- | ||
1528 | # -*- coding: utf-8 -*- | ||
1529 | diff --git a/tools/perf/python/twatch.py b/tools/perf/python/twatch.py | ||
1530 | index ff87ccf5b7085..04f3db29b9bc1 100755 | ||
1531 | --- a/tools/perf/python/twatch.py | ||
1532 | +++ b/tools/perf/python/twatch.py | ||
1533 | @@ -1,4 +1,4 @@ | ||
1534 | -#! /usr/bin/python | ||
1535 | +#! /usr/bin/env python | ||
1536 | # SPDX-License-Identifier: GPL-2.0-only | ||
1537 | # -*- python -*- | ||
1538 | # -*- coding: utf-8 -*- | ||
1539 | diff --git a/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py b/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py | ||
1540 | index 1351975d07699..085cbe4a56df6 100755 | ||
1541 | --- a/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py | ||
1542 | +++ b/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py | ||
1543 | @@ -1,4 +1,4 @@ | ||
1544 | -#!/usr/bin/python | ||
1545 | +#!/usr/bin/env python | ||
1546 | # SPDX-License-Identifier: GPL-2.0-only | ||
1547 | # -*- coding: utf-8 -*- | ||
1548 | # | ||
1549 | diff --git a/tools/testing/ktest/compare-ktest-sample.pl b/tools/testing/ktest/compare-ktest-sample.pl | ||
1550 | index 4118eb4a842d2..ebea21d0a1be8 100755 | ||
1551 | --- a/tools/testing/ktest/compare-ktest-sample.pl | ||
1552 | +++ b/tools/testing/ktest/compare-ktest-sample.pl | ||
1553 | @@ -1,4 +1,4 @@ | ||
1554 | -#!/usr/bin/perl | ||
1555 | +#!/usr/bin/env perl | ||
1556 | # SPDX-License-Identifier: GPL-2.0 | ||
1557 | |||
1558 | open (IN,"ktest.pl"); | ||
1559 | diff --git a/tools/testing/selftests/bpf/test_offload.py b/tools/testing/selftests/bpf/test_offload.py | ||
1560 | index 8f918847ddf89..f9e3daaf7cffb 100755 | ||
1561 | --- a/tools/testing/selftests/bpf/test_offload.py | ||
1562 | +++ b/tools/testing/selftests/bpf/test_offload.py | ||
1563 | @@ -1,4 +1,4 @@ | ||
1564 | -#!/usr/bin/python3 | ||
1565 | +#!/usr/bin/env python3 | ||
1566 | |||
1567 | # Copyright (C) 2017 Netronome Systems, Inc. | ||
1568 | # Copyright (c) 2019 Mellanox Technologies. All rights reserved | ||
1569 | diff --git a/tools/testing/selftests/kselftest/prefix.pl b/tools/testing/selftests/kselftest/prefix.pl | ||
1570 | index 31f7c2a0a8bd4..12a7f4ca2684d 100755 | ||
1571 | --- a/tools/testing/selftests/kselftest/prefix.pl | ||
1572 | +++ b/tools/testing/selftests/kselftest/prefix.pl | ||
1573 | @@ -1,4 +1,4 @@ | ||
1574 | -#!/usr/bin/perl | ||
1575 | +#!/usr/bin/env perl | ||
1576 | # SPDX-License-Identifier: GPL-2.0 | ||
1577 | # Prefix all lines with "# ", unbuffered. Command being piped in may need | ||
1578 | # to have unbuffering forced with "stdbuf -i0 -o0 -e0 $cmd". | ||
1579 | diff --git a/tools/testing/selftests/tc-testing/tdc_batch.py b/tools/testing/selftests/tc-testing/tdc_batch.py | ||
1580 | index 995f66ce43eba..35d5d94937842 100755 | ||
1581 | --- a/tools/testing/selftests/tc-testing/tdc_batch.py | ||
1582 | +++ b/tools/testing/selftests/tc-testing/tdc_batch.py | ||
1583 | @@ -1,4 +1,4 @@ | ||
1584 | -#!/usr/bin/python3 | ||
1585 | +#!/usr/bin/env python3 | ||
1586 | |||
1587 | """ | ||
1588 | tdc_batch.py - a script to generate TC batch file | ||
1589 | diff --git a/tools/testing/selftests/tc-testing/tdc_multibatch.py b/tools/testing/selftests/tc-testing/tdc_multibatch.py | ||
1590 | index 5e7237952e497..48e1f17ff2e86 100755 | ||
1591 | --- a/tools/testing/selftests/tc-testing/tdc_multibatch.py | ||
1592 | +++ b/tools/testing/selftests/tc-testing/tdc_multibatch.py | ||
1593 | @@ -1,4 +1,4 @@ | ||
1594 | -#!/usr/bin/python3 | ||
1595 | +#!/usr/bin/env python3 | ||
1596 | # SPDX-License-Identifier: GPL-2.0 | ||
1597 | """ | ||
1598 | tdc_multibatch.py - a thin wrapper over tdc_batch.py to generate multiple batch | ||
1599 | diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c | ||
1600 | index 2e7d2b3f29079..4af85605730e4 100644 | ||
1601 | --- a/virt/kvm/arm/arm.c | ||
1602 | +++ b/virt/kvm/arm/arm.c | ||
1603 | @@ -579,6 +579,8 @@ static int kvm_vcpu_first_run_init(struct kvm_vcpu *vcpu) | ||
1604 | |||
1605 | vcpu->arch.has_run_once = true; | ||
1606 | |||
1607 | + kvm_arm_vcpu_init_debug(vcpu); | ||
1608 | + | ||
1609 | if (likely(irqchip_in_kernel(kvm))) { | ||
1610 | /* | ||
1611 | * Map the VGIC hardware resources before running a vcpu the |