]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
RISC-V: KVM: Fix timer state restore
authorQiang Ma <maqianga@uniontech.com>
Tue, 26 May 2026 07:55:44 +0000 (15:55 +0800)
committerAnup Patel <anup@brainfault.org>
Thu, 4 Jun 2026 06:48:43 +0000 (12:18 +0530)
commit6d4c17ed56201eec04247f4c72b4028cfbb0eba4
tree27a476bf8c6e58176d1c9fdb8061a80b339f0290
parent76ae7c7ee004b3d9d869f4d59b175ab4750db985
RISC-V: KVM: Fix timer state restore

The KVM_REG_RISCV_TIMER_REG(state) one-reg write passes the value
written by userspace to kvm_riscv_vcpu_timer_next_event() when
re-enabling the timer.

That value is the timer state, KVM_RISCV_TIMER_STATE_ON, not the
timer compare value. During migration or state restore, userspace
restores the compare register separately, which stores the target
cycle in t->next_cycles. Re-arming the timer with the state value
schedules the next event at cycle 1 instead of the restored compare
value, causing the virtual timer to fire too early.

Use the restored compare value from t->next_cycles when turning the
timer back on.

Fixes: 3a9f66cb25e1 ("RISC-V: KVM: Add timer functionality")
Signed-off-by: Qiang Ma <maqianga@uniontech.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Link: https://lore.kernel.org/r/20260526075544.796396-1-maqianga@uniontech.com
Signed-off-by: Anup Patel <anup@brainfault.org>
arch/riscv/kvm/vcpu_timer.c