linux/arch/riscv/kvm
Rajnesh Kanwal a07cf4fd61 riscv/kvm: Fix VM hang in case of timer delta being zero.
[ Upstream commit 6eff380489 ]

In case when VCPU is blocked due to WFI, we schedule the timer
from `kvm_riscv_vcpu_timer_blocking()` to keep timer interrupt
ticking.

But in case when delta_ns comes to be zero, we never schedule
the timer and VCPU keeps sleeping indefinitely until any activity
is done with VM console.

This is easily reproduce-able using kvmtool.
./lkvm-static run -c1 --console virtio -p "earlycon root=/dev/vda" \
         -k ./Image -d rootfs.ext4

Also, just add a print in kvm_riscv_vcpu_vstimer_expired() to
check the interrupt delivery and run `top` or similar auto-upating
cmd from guest. Within sometime one can notice that print from
timer expiry routine stops and the `top` cmd output will stop
updating.

This change fixes this by making sure we schedule the timer even
with delta_ns being zero to bring the VCPU out of sleep immediately.

Fixes: 8f5cb44b1b ("RISC-V: KVM: Support sstc extension")
Signed-off-by: Rajnesh Kanwal <rkanwal@rivosinc.com>
Reviewed-by: Atish Patra <atishp@rivosinc.com>
Signed-off-by: Anup Patel <anup@brainfault.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2023-04-06 12:10:42 +02:00
..
Kconfig RISC-V: KVM: Use generic guest entry infrastructure 2022-10-02 10:19:25 +05:30
main.c RISC-V: KVM: add __init annotation to riscv_kvm_init() 2022-10-02 10:19:11 +05:30
Makefile RISC-V: KVM: Factor-out instruction emulation into separate sources 2022-07-29 17:14:40 +05:30
mmu.c KVM: Rename mmu_notifier_* to mmu_invalidate_* 2022-08-19 04:05:41 -04:00
tlb.c RISC-V: KVM: Use Svinval for local TLB maintenance when available 2022-10-02 10:18:37 +05:30
vcpu.c RISC-V: KVM: Fix reg_val check in kvm_riscv_vcpu_set_reg_config() 2022-12-31 13:32:51 +01:00
vcpu_exit.c riscv: KVM: Apply insn-def to hlv encodings 2022-10-02 10:18:20 +05:30
vcpu_fp.c RISC-V: KVM: Improve ISA extension by using a bitmap 2022-07-29 17:14:11 +05:30
vcpu_insn.c KVM: remove KVM_REQ_UNHALT 2022-09-26 12:37:21 -04:00
vcpu_sbi.c riscv: kvm: move extern sbi_ext declarations to a header 2022-08-19 23:22:47 +05:30
vcpu_sbi_base.c RISC-V: KVM: Fix SBI implementation version 2022-02-02 18:58:06 +05:30
vcpu_sbi_hsm.c RISC-V: KVM: Implement SBI HSM suspend call 2022-03-11 19:02:39 +05:30
vcpu_sbi_replace.c RISC-V: KVM: Add remote HFENCE functions based on VCPU requests 2022-05-20 09:09:15 +05:30
vcpu_sbi_v01.c RISC-V: KVM: Add remote HFENCE functions based on VCPU requests 2022-05-20 09:09:15 +05:30
vcpu_switch.S RISC-V: KVM: Refine __kvm_riscv_switch_to() implementation 2022-03-11 19:02:22 +05:30
vcpu_timer.c riscv/kvm: Fix VM hang in case of timer delta being zero. 2023-04-06 12:10:42 +02:00
vm.c RISC-V: KVM: Make kvm_riscv_guest_timer_init a void function 2022-07-29 17:14:26 +05:30
vmid.c RISC-V: KVM: fix typos in comments 2022-06-09 09:18:15 +05:30