[PATCH v2 2/4] KVM: Reset last_steal on vCPU pid change

Fuad Tabba fuad.tabba at linux.dev
Sun Sep 6 10:19:39 PDT 2026


On Fri, 4 Sept 2026 at 18:56, Dongli Zhang <dongli.zhang at oracle.com> wrote:
>
> KVM does not support vCPU hotplug. When a vCPU is removed, its
> corresponding data structures are not freed by KVM. Instead, QEMU destroys
> only the userspace state and the vCPU thread, while the KVM vCPU fd remains
> open and parked in QEMU.
>
> As a result, vcpu->last_steal is not reset.
>
> If the same vCPU is later re-created by QEMU, last_steal retains its old
> value, while current->sched_info.run_delay starts from zero since a new
> vCPU thread is created. This causes
> current->sched_info.run_delay - vcpu->last_steal to produce a large, bogus
> value.
>
> Fix this by resetting vcpu->last_steal to current->sched_info.run_delay
> when KVM vCPU PID is changed.
>
> Suggested-by: Sean Christopherson <seanjc at google.com>
> Signed-off-by: Dongli Zhang <dongli.zhang at oracle.com>

Reviewed-by: Fuad Tabba <fuad.tabba at linux.dev>

Cheers,
/fuad

> ---
> v1->v2:
>   - Move from kvm_arch_vcpu_run_pid_change() to its caller.
>
>  virt/kvm/kvm_main.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index 65eb26a0520d..784f0d945b45 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -4478,6 +4478,10 @@ static long kvm_vcpu_ioctl(struct file *filp,
>                         if (r)
>                                 break;
>
> +#ifdef CONFIG_HAVE_KVM_PV_STEAL_TIME
> +                       vcpu->last_steal = current->sched_info.run_delay;
> +#endif
> +
>                         newpid = get_task_pid(current, PIDTYPE_PID);
>                         write_lock(&vcpu->pid_lock);
>                         vcpu->pid = newpid;
> --
> 2.43.7
>



More information about the kvm-riscv mailing list