[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aMir-qs5zwmoXU6A@google.com>
Date: Mon, 15 Sep 2025 17:14:50 -0700
From: Sean Christopherson <seanjc@...gle.com>
To: Yan Zhao <yan.y.zhao@...el.com>
Cc: pbonzini@...hat.com, reinette.chatre@...el.com, rick.p.edgecombe@...el.com,
linux-kernel@...r.kernel.org, kvm@...r.kernel.org
Subject: Re: [PATCH v2 3/3] KVM: selftests: Test prefault memory during
concurrent memslot removal
On Mon, Sep 15, 2025, Yan Zhao wrote:
> On Mon, Sep 08, 2025 at 04:47:23PM -0700, Sean Christopherson wrote:
> > On Fri, Aug 22, 2025, Yan Zhao wrote:
> > + if (!slot_recreated) {
> > + WRITE_ONCE(data.recreate_slot, true);
> > + pthread_join(slot_worker, NULL);
> > + slot_recreated = true;
> > + continue;
> If delete_slot_worker() invokes vm_mem_region_delete() slowly enough due to
> scheduling delays, the return value from __vcpu_ioctl() could be 0 with
> range.size being 0 at this point.
>
> What about checking range.size before continuing?
>
> @@ -120,7 +126,8 @@ static void pre_fault_memory(struct kvm_vcpu *vcpu, u64 base_gpa, u64 offset,
> WRITE_ONCE(data.recreate_slot, true);
> pthread_join(slot_worker, NULL);
> slot_recreated = true;
> - continue;
> + if (range.size)
> + continue;
> }
>
>
> Otherwise, the next __vcpu_ioctl() would return -1 with errno == EINVAL, which
> will break the assertion below.
Drat, I missed that kvm_vcpu_pre_fault_memory() returns -EINVAL on a size of '0'
(see the wrong comment snippet "Either prefaulting already succeeded, in which
case retrying should also succeed, or retry is needed to get a stable result").
I'll circle back to this tomorrow. IIRC, there was a reason I didn't want to
check range.size in that path, but for the life of me I can't remember why :-/
Powered by blists - more mailing lists