• Rajnesh Kanwal's avatar
    riscv/kvm: Fix VM hang in case of timer delta being zero. · 6eff3804
    Rajnesh Kanwal authored
    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: 8f5cb44b ("RISC-V: KVM: Support sstc extension")
    Signed-off-by: default avatarRajnesh Kanwal <rkanwal@rivosinc.com>
    Reviewed-by: default avatarAtish Patra <atishp@rivosinc.com>
    Signed-off-by: default avatarAnup Patel <anup@brainfault.org>
    6eff3804
vcpu_timer.c 8.81 KB