projects
/
linux-block.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
dd33e5d
)
riscv: Fix warning by declaring arch_cpu_idle() as noinstr
author
Alexandre Ghiti
<alexghiti@rivosinc.com>
Tue, 26 Mar 2024 20:30:16 +0000
(21:30 +0100)
committer
Palmer Dabbelt
<palmer@rivosinc.com>
Thu, 4 Apr 2024 19:33:37 +0000
(12:33 -0700)
The following warning appears when using ftrace:
[89855.443413] RCU not on for: arch_cpu_idle+0x0/0x1c
[89855.445640] WARNING: CPU: 5 PID: 0 at include/linux/trace_recursion.h:162 arch_ftrace_ops_list_func+0x208/0x228
[89855.445824] Modules linked in: xt_conntrack(E) nft_chain_nat(E) xt_MASQUERADE(E) nf_conntrack_netlink(E) xt_addrtype(E) nft_compat(E) nf_tables(E) nfnetlink(E) br_netfilter(E) cfg80211(E) nls_iso8859_1(E) ofpart(E) redboot(E) cmdlinepart(E) cfi_cmdset_0001(E) virtio_net(E) cfi_probe(E) cfi_util(E) 9pnet_virtio(E) gen_probe(E) net_failover(E) virtio_rng(E) failover(E) 9pnet(E) physmap(E) map_funcs(E) chipreg(E) mtd(E) uio_pdrv_genirq(E) uio(E) dm_multipath(E) scsi_dh_rdac(E) scsi_dh_emc(E) scsi_dh_alua(E) drm(E) efi_pstore(E) backlight(E) ip_tables(E) x_tables(E) raid10(E) raid456(E) async_raid6_recov(E) async_memcpy(E) async_pq(E) async_xor(E) xor(E) async_tx(E) raid6_pq(E) raid1(E) raid0(E) virtio_blk(E)
[89855.451563] CPU: 5 PID: 0 Comm: swapper/5 Tainted: G E 6.8.0-rc6ubuntu-defconfig #2
[89855.451726] Hardware name: riscv-virtio,qemu (DT)
[89855.451899] epc : arch_ftrace_ops_list_func+0x208/0x228
[89855.452016] ra : arch_ftrace_ops_list_func+0x208/0x228
[89855.452119] epc :
ffffffff8016b216
ra :
ffffffff8016b216
sp :
ffffaf808090fdb0
[89855.452171] gp :
ffffffff827c7680
tp :
ffffaf808089ad40
t0 :
ffffffff800c0dd8
[89855.452216] t1 :
0000000000000001
t2 :
0000000000000000
s0 :
ffffaf808090fe30
[89855.452306] s1 :
0000000000000000
a0 :
0000000000000026
a1 :
ffffffff82cd6ac8
[89855.452423] a2 :
ffffffff800458c8
a3 :
ffffaf80b1870640
a4 :
0000000000000000
[89855.452646] a5 :
0000000000000000
a6 :
00000000ffffffff
a7 :
ffffffffffffffff
[89855.452698] s2 :
ffffffff82766872
s3 :
ffffffff80004caa
s4 :
ffffffff80ebea90
[89855.452743] s5 :
ffffaf808089bd40
s6 :
8000000a00006e00
s7 :
0000000000000008
[89855.452787] s8 :
0000000000002000
s9 :
0000000080043700
s10:
0000000000000000
[89855.452831] s11:
0000000000000000
t3 :
0000000000100000
t4 :
0000000000000064
[89855.452874] t5 :
000000000000000c
t6 :
ffffaf80b182dbfc
[89855.452929] status:
0000000200000100
badaddr:
0000000000000000
cause:
0000000000000003
[89855.453053] [<
ffffffff8016b216
>] arch_ftrace_ops_list_func+0x208/0x228
[89855.453191] [<
ffffffff8000e082
>] ftrace_call+0x8/0x22
[89855.453265] [<
ffffffff800a149c
>] do_idle+0x24c/0x2ca
[89855.453357] [<
ffffffff8000da54
>] return_to_handler+0x0/0x26
[89855.453429] [<
ffffffff8000b716
>] smp_callin+0x92/0xb6
[89855.453785] ---[ end trace
0000000000000000
]---
To fix this, mark arch_cpu_idle() as noinstr, like it is done in commit
a9cbc1b471d2
("s390/idle: mark arch_cpu_idle() noinstr").
Reported-by: Evgenii Shatokhin <e.shatokhin@yadro.com>
Closes: https://lore.kernel.org/linux-riscv/
51f21b87
-ebed-4411-afbc-
c00d3dea2bab
@yadro.com/
Fixes:
cfbc4f81c9d0
("riscv: Select ARCH_WANTS_NO_INSTR")
Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
Reviewed-by: Andy Chiu <andy.chiu@sifive.com>
Tested-by: Andy Chiu <andy.chiu@sifive.com>
Acked-by: Puranjay Mohan <puranjay12@gmail.com>
Link:
https://lore.kernel.org/r/20240326203017.310422-2-alexghiti@rivosinc.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/kernel/process.c
patch
|
blob
|
blame
|
history
diff --git
a/arch/riscv/kernel/process.c
b/arch/riscv/kernel/process.c
index 92922dbd5b5c1f9b5d57643ecbd7a1599c5ac4c3..6abeecbfc51d0245fdce5aca5746eb070c86347b 100644
(file)
--- a/
arch/riscv/kernel/process.c
+++ b/
arch/riscv/kernel/process.c
@@
-37,7
+37,7
@@
EXPORT_SYMBOL(__stack_chk_guard);
extern asmlinkage void ret_from_fork(void);
-void arch_cpu_idle(void)
+void
noinstr
arch_cpu_idle(void)
{
cpu_do_idle();
}