On Thu Sep 17, 2026 at 8:20 PM +08, Xiaofeng Yuan wrote: > The SBI IPI handler walks vCPUs with kvm_for_each_vcpu(), which > iterates by vcpu_idx (creation order) rather than vcpu_id order. > Since vcpu_id can be assigned out of order by userspace, a vCPU whose > hart_bit falls outside the XLEN-bit hart_mask range may be reached > before vCPUs the mask actually targets. In that case the handler jumps > to "done" and stops sending IPIs, leaving valid target vCPUs without > an interrupt. > > Replace the early "goto done" with "continue" so vCPUs outside the > hart_mask range are skipped without aborting the loop. > > Reproduced with a minimal userspace VMM driving KVM inside a QEMU > (RISC-V virt) guest: three vCPUs are created with ids 100, 0, 1 (in > creation order) and sbi_send_ipi(hart_mask=bit0, hbase=0) is called > from vcpu_id 1. Before this change the IPI is dropped and the ecall > returns SBI_ERR_INVALID_PARAM; with this change the IPI is delivered > and the ecall returns SBI_SUCCESS. > > Fixes: 0611f78f83c9 ("riscv: KVM: Fix SBI IPI error generation") > Cc: stable@vger.kernel.org > Suggested-by: Andrew Jones > Signed-off-by: Xiaofeng Yuan Reviewed-by: Troy Mitchell -- Troy Mitchell