diff options
| author | jinrui <jinrui@haiwei.tech> | 2026-08-13 10:29:30 +0000 |
|---|---|---|
| committer | Anup Patel <anup@brainfault.org> | 2026-10-03 11:13:47 +0530 |
| commit | 165a50429e9f319e4a3bbc396cbec7c3f336ae5f (patch) | |
| tree | 936e2f5ee08e1667f31d4392f90cd7d7bf3454e5 /tools/perf/scripts/python/stackcollapse.py | |
| parent | 72d3fcf802c45d00b300f25b848a93c3a2bd7c7e (diff) | |
KVM: selftests: riscv: Add lazy V extension enablement for guests
When the cross-compiler defaults to an -march that includes the V
(vector) extension, -O2 auto-vectorization generates vector instructions
(e.g. vsetvli, vadd.vv) in guest code. Executing such an instruction with
sstatus.VS Off raises EXC_INST_ILLEGAL (scause=2); KVM's hedeleg forwards
it to the guest, but the bare-metal selftest cannot handle it, so all
guest tests fail. A real kernel handles this via
riscv_v_first_use_handler(), which enables V and re-executes the
instruction.
Fix it in processor.c:
1. Delete the now-unused guest_unexp_trap() handler, replaced by the full
exception vector table.
2. In vm_arch_vcpu_add(), advertise V to KVM via __vcpu_set_reg(V, 1)
(best-effort, errors ignored on hardware without V) and install the
full exception vector table instead of a raw stvec handler.
3. In route_exception(), decode the faulting instruction (stval) with
insn_is_vector() and, when it is a vector instruction while sstatus.VS
is Off, set VS to Initial and sret to re-execute it, before any
test-registered handler. Genuinely illegal instructions still reach
the unexpected-exception path.
4. Make vm_init_vector_tables() idempotent by checking vm->handlers
before allocating, so tests that call it directly (ebreak_test,
arch_timer, sbi_pmu_test) do not leak memory.
Tested on a riscv64 host with KVM enabled.
Signed-off-by: jinrui <jinrui@haiwei.tech>
Reviewed-by: Anup Patel <anup@brainfault.org>
Link: https://lore.kernel.org/r/20EA6EE00884FB87+20260813102930.3892251-1-jinrui@haiwei.tech
Signed-off-by: Anup Patel <anup@brainfault.org>
Diffstat (limited to 'tools/perf/scripts/python/stackcollapse.py')
0 files changed, 0 insertions, 0 deletions
