public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Nathan Chancellor <nathan@kernel.org>
To: Paul Walmsley <pjw@kernel.org>, Jiakai Xu <xujiakai2025@iscas.ac.cn>
Cc: linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Alexandre Ghiti <alex@ghiti.fr>,
	namcao@linutronix.de
Subject: Re: Re: [PATCH] riscv: fix KUnit test_kprobes crash when building with Clang
Date: Tue, 18 Nov 2025 18:38:08 -0700	[thread overview]
Message-ID: <20251119013808.GA1264583@ax162> (raw)
In-Reply-To: <bd82855d-4a80-58fb-c949-b968569ef1e2@kernel.org>

Hi Paul and Jiakai,

On Tue, Nov 18, 2025 at 01:21:50PM -0700, Paul Walmsley wrote:
> Not all of it, but some edited summary is appropriate.  I've queued the 
> following revision for v6.18-rc fixes, under the theory that it would be 
> good to get the test working for Clang users while the LLVM folks 
> investigate.  Please let us know ASAP if you think anything in it should 
> be changed.  I plan to send a PR out later this week.

I spent some time today trying to minimize a small set of configurations
that triggers this issue on top of defconfig since that occasionally
reveals a path to head down for triage and I landed on:

  $ cat arch/riscv/configs/repro.config
  CONFIG_KPROBES=y
  CONFIG_KUNIT=y
  CONFIG_RELOCATABLE=y
  CONFIG_RISCV_KPROBES_KUNIT=y

  $ make -skj"$(nproc)" ARCH=riscv LLVM=1 clean defconfig repro.config Image

  $ curl -LSs https://github.com/ClangBuiltLinux/boot-utils/releases/download/20241120-044434/riscv-rootfs.cpio.zst | zstd -d >rootfs.cpio

  $ qemu-system-riscv64 \
      -display none \
      -nodefaults \
      -bios default \
      -M virt \
      -append earlycon \
      -kernel arch/riscv/boot/Image \
      -initrd rootfs.cpio \
      -m 512m \
      -serial mon:stdio
  ...
  [    0.000000] Booting Linux on hartid 0
  [    0.000000] Linux version 6.18.0-rc6-dirty (nathan@ax162) (ClangBuiltLinux clang version 21.1.5 (https://github.com/llvm/llvm-project.git 8e2cd28cd4ba46613a46467b0c91b1cabead26cd), ClangBuiltLinux LLD 21.1.5 (https://github.com/llvm/llvm-project.git 8e2cd28cd4ba46613a46467b0c91b1cabead26cd)) #1 SMP Tue Nov 18 17:58:23 MST 2025
  ...
  [    1.041311] KTAP version 1
  [    1.041433] 1..1
  [    1.042111]     KTAP version 1
  [    1.042310]     # Subtest: kprobes_riscv
  [    1.042610]     # module: kprobes_riscv_kunit
  [    1.042732]     1..1
  [    1.047104] ------------[ cut here ]------------
  [    1.047293] WARNING: CPU: 0 PID: 45 at mm/page_alloc.c:5159 __alloc_frozen_pages_noprof+0x160/0x228
  [    1.047602] Modules linked in:
  [    1.047851] CPU: 0 UID: 0 PID: 45 Comm: kunit_try_catch Tainted: G                 N  6.18.0-rc6-dirty #1 NONE
  [    1.047933] Tainted: [N]=TEST
  [    1.047948] Hardware name: riscv-virtio,qemu (DT)
  [    1.048024] epc : __alloc_frozen_pages_noprof+0x160/0x228
  [    1.048057]  ra : ___kmalloc_large_node+0x52/0x1a0
  [    1.048073] epc : ffffffff8023e2e8 ra : ffffffff80247c26 sp : ff200000001f3c10
  [    1.048086]  gp : ffffffff81a25900 tp : ff600000023924c0 t0 : 00000000264163d0
  [    1.048097]  t1 : 00000000264163d0 t2 : 00000000000aae60 s0 : ff200000001f3c90
  [    1.048108]  s1 : 000000000a83ca20 a0 : 0000000000000001 a1 : ffffffff819e71ba
  [    1.048119]  a2 : 0000000000000000 a3 : 0000000000000000 a4 : 000000003b9aca00
  [    1.048130]  a5 : 0000000000016698 a6 : ff600000021480d0 a7 : 00000000000aae60
  [    1.048140]  s2 : 0000000000000010 s3 : ffffffff8024857a s4 : 0000000000000dc0
  [    1.048151]  s5 : ffffffff80018e20 s6 : ff2000000000bb40 s7 : 0000000000000000
  [    1.048161]  s8 : 0000000000000000 s9 : 0000000000166e7c s10: 0000000000000000
  [    1.048171]  s11: 0000000000000000 t3 : 0000000000000000 t4 : 0000000000000002
  [    1.048181]  t5 : ff60000002392580 t6 : 0000000000000001
  [    1.048191] status: 0000000200000120 badaddr: ffffffff8023e2e8 cause: 0000000000000003
  [    1.048281] [<ffffffff8023e2e8>] __alloc_frozen_pages_noprof+0x160/0x228
  [    1.048362] [<ffffffff80247c26>] ___kmalloc_large_node+0x52/0x1a0
  [    1.048374] [<ffffffff80247dd8>] __kmalloc_large_node_noprof+0x1c/0x114
  [    1.048384] [<ffffffff8024857a>] __kmalloc_noprof+0x252/0x450
  [    1.048393] [<ffffffff80018ae6>] test_kprobe_riscv+0x5a/0x210
  [    1.048406] [<ffffffff8050d6a6>] kunit_try_run_case+0x5a/0x15c
  [    1.048417] [<ffffffff8050f69a>] kunit_generic_run_threadfn_adapter+0x1a/0x34
  [    1.048439] [<ffffffff8004fa88>] kthread+0x178/0x1a0
  [    1.048450] [<ffffffff8001311a>] ret_from_fork_kernel+0xe/0x48
  [    1.048464] [<ffffffff80b500f2>] ret_from_fork_kernel_asm+0x16/0x1c
  [    1.048513] ---[ end trace 0000000000000000 ]---
  [    1.056832]     # test_kprobe_riscv: EXPECTATION FAILED at arch/riscv/kernel/tests/kprobes/test-kprobes.c:24
  [    1.056832]     Expected kp to be true, but is false
  [    1.058370]     not ok 1 test_kprobe_riscv
  [    1.058484] not ok 1 kprobes_riscv
  ...

This appears to happen back to LLVM 15 so I am not sure it is a recent
recent regression on the toolchain side.

Without CONFIG_RELOCATABLE enabled, the test passes:

  [    1.049384] KTAP version 1
  [    1.049656] 1..1
  [    1.050246]     KTAP version 1
  [    1.050447]     # Subtest: kprobes_riscv
  [    1.050760]     # module: kprobes_riscv_kunit
  [    1.050867]     1..1
  [    1.061790]     ok 1 test_kprobe_riscv
  [    1.061929] ok 1 kprobes_riscv

Interestingly, if I enable CONFIG_RISCV_KPROBES_KUNIT as a module, I get
a failure when trying to load it in QEMU:

  ~ # modprobe kprobes_riscv_kunit
  [   42.214642] kprobes_riscv_kunit: The unexpected relocation type 'R_RISCV_ALIGN' from PC = 00000000abb84ce7
  [   42.222778] kprobes_riscv_kunit: The unexpected relocation type 'R_RISCV_ALIGN' from PC = 00000000abb84ce7
  modprobe: can't load module kprobes_riscv_kunit (kernel/arch/riscv/kernel/tests/kprobes/kprobes_riscv_kunit.ko): Invalid argument

which is probably unrelated but I figured it was worth mentioning, as it
does not allow me to see if this has something to do with the flags
added to LDFLAGS_vmlinux.

Maybe this is useful for the upstream report and further triage.

Cheers,
Nathan

  reply	other threads:[~2025-11-19  1:38 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-13 10:51 [PATCH] riscv: fix KUnit test_kprobes crash when building with Clang 许佳凯
2025-11-16  5:15 ` Paul Walmsley
2025-11-17  3:03   ` Jiakai Xu
2025-11-18 20:21     ` Paul Walmsley
2025-11-19  1:38       ` Nathan Chancellor [this message]
2025-11-19  3:33         ` Jiakai Xu
2025-11-19  3:01       ` Jiakai Xu
2025-11-22  1:10         ` Paul Walmsley
2025-12-26  3:31           ` Jiakai Xu
2025-11-18 21:10 ` patchwork-bot+linux-riscv
2025-11-26  9:23 ` Nam Cao
2025-11-26 18:08   ` Nam Cao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251119013808.GA1264583@ax162 \
    --to=nathan@kernel.org \
    --cc=alex@ghiti.fr \
    --cc=aou@eecs.berkeley.edu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=namcao@linutronix.de \
    --cc=palmer@dabbelt.com \
    --cc=pjw@kernel.org \
    --cc=xujiakai2025@iscas.ac.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox