Contents of /trunk/kernel-alx/patches-5.4/0220-5.4.121-all-fixes.patch
Parent Directory | Revision Log
Revision 3635 -
(show annotations)
(download)
Mon Oct 24 12:34:12 2022 UTC (23 months ago) by niro
File size: 53500 byte(s)
Mon Oct 24 12:34:12 2022 UTC (23 months ago) by niro
File size: 53500 byte(s)
-sync kernel patches
1 | 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 |