| Message ID | 20260814123541.593613-1-jinyu.tang@linux.dev |
|---|---|
| State | New |
| Headers | show |
| Series | KVM: riscv: Avoid redundant interrupt check for pending timers | expand |
On 8/14/2026 8:35 PM, Jinyu Tang wrote: > kvm_vcpu_check_block() calls kvm_arch_vcpu_runnable() before > checking whether a timer is pending. On RISC-V, kvm_arch_vcpu_runnable() > already checks all pending guest interrupts through > kvm_riscv_vcpu_has_interrupts(vcpu, -1UL), including IRQ_VS_TIMER. > > Drop the repeated IRQ_VS_TIMER pending-interrupt check from > kvm_riscv_vcpu_timer_pending() and keep the helper focused on the timer > deadline state. If the timer becomes pending after the runnable check, > the timer path still injects IRQ_VS_TIMER and kicks the vCPU through the > normal wakeup path. > > Signed-off-by: Jinyu Tang <jinyu.tang@linux.dev> Reviewed-by: Nutty Liu <nutty.liu@hotmail.com> Thanks, Nutty > --- > arch/riscv/kvm/vcpu_timer.c | 6 +----- > 1 file changed, 1 insertion(+), 5 deletions(-) > > diff --git a/arch/riscv/kvm/vcpu_timer.c b/arch/riscv/kvm/vcpu_timer.c > index ae53133c7ab0..0e01bd793772 100644 > --- a/arch/riscv/kvm/vcpu_timer.c > +++ b/arch/riscv/kvm/vcpu_timer.c > @@ -132,11 +132,7 @@ bool kvm_riscv_vcpu_timer_pending(struct kvm_vcpu *vcpu) > struct kvm_vcpu_timer *t = &vcpu->arch.timer; > struct kvm_guest_timer *gt = &vcpu->kvm->arch.timer; > > - if (!kvm_riscv_delta_cycles2ns(t->next_cycles, gt, t) || > - kvm_riscv_vcpu_has_interrupts(vcpu, 1UL << IRQ_VS_TIMER)) > - return true; > - else > - return false; > + return !kvm_riscv_delta_cycles2ns(t->next_cycles, gt, t); > } > > static void kvm_riscv_vcpu_timer_blocking(struct kvm_vcpu *vcpu)
diff --git a/arch/riscv/kvm/vcpu_timer.c b/arch/riscv/kvm/vcpu_timer.c index ae53133c7ab0..0e01bd793772 100644 --- a/arch/riscv/kvm/vcpu_timer.c +++ b/arch/riscv/kvm/vcpu_timer.c @@ -132,11 +132,7 @@ bool kvm_riscv_vcpu_timer_pending(struct kvm_vcpu *vcpu) struct kvm_vcpu_timer *t = &vcpu->arch.timer; struct kvm_guest_timer *gt = &vcpu->kvm->arch.timer; - if (!kvm_riscv_delta_cycles2ns(t->next_cycles, gt, t) || - kvm_riscv_vcpu_has_interrupts(vcpu, 1UL << IRQ_VS_TIMER)) - return true; - else - return false; + return !kvm_riscv_delta_cycles2ns(t->next_cycles, gt, t); } static void kvm_riscv_vcpu_timer_blocking(struct kvm_vcpu *vcpu)
kvm_vcpu_check_block() calls kvm_arch_vcpu_runnable() before checking whether a timer is pending. On RISC-V, kvm_arch_vcpu_runnable() already checks all pending guest interrupts through kvm_riscv_vcpu_has_interrupts(vcpu, -1UL), including IRQ_VS_TIMER. Drop the repeated IRQ_VS_TIMER pending-interrupt check from kvm_riscv_vcpu_timer_pending() and keep the helper focused on the timer deadline state. If the timer becomes pending after the runnable check, the timer path still injects IRQ_VS_TIMER and kicks the vCPU through the normal wakeup path. Signed-off-by: Jinyu Tang <jinyu.tang@linux.dev> --- arch/riscv/kvm/vcpu_timer.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)