From: Sean Christopherson <seanjc@google.com>
To: Yan Zhao <yan.y.zhao@intel.com>
Cc: Rick P Edgecombe <rick.p.edgecombe@intel.com>,
"ackerleytng@google.com" <ackerleytng@google.com>,
"david@kernel.org" <david@kernel.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"steven.price@arm.com" <steven.price@arm.com>,
"peterx@redhat.com" <peterx@redhat.com>,
"forkloop@google.com" <forkloop@google.com>,
"tabba@google.com" <tabba@google.com>,
"linux-trace-kernel@vger.kernel.org"
<linux-trace-kernel@vger.kernel.org>,
"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
"x86@kernel.org" <x86@kernel.org>,
Vishal Annapurve <vannapurve@google.com>,
"willy@infradead.org" <willy@infradead.org>,
"tglx@kernel.org" <tglx@kernel.org>,
"wyihan@google.com" <wyihan@google.com>,
"pratyush@kernel.org" <pratyush@kernel.org>,
"aik@amd.com" <aik@amd.com>,
"jmattson@google.com" <jmattson@google.com>,
"aneesh.kumar@kernel.org" <aneesh.kumar@kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
"binbin.wu@linux.intel.com" <binbin.wu@linux.intel.com>,
"rientjes@google.com" <rientjes@google.com>,
"andrew.jones@linux.dev" <andrew.jones@linux.dev>,
"linux-kselftest@vger.kernel.org"
<linux-kselftest@vger.kernel.org>,
"chrisl@kernel.org" <chrisl@kernel.org>,
"shakeel.butt@linux.dev" <shakeel.butt@linux.dev>,
"mathieu.desnoyers@efficios.com"
<mathieu.desnoyers@efficios.com>,
"oupton@kernel.org" <oupton@kernel.org>,
"mhiramat@kernel.org" <mhiramat@kernel.org>,
"baohua@kernel.org" <baohua@kernel.org>,
"tarunsahu@google.com" <tarunsahu@google.com>,
"linux-coco@lists.linux.dev" <linux-coco@lists.linux.dev>,
"jhubbard@nvidia.com" <jhubbard@nvidia.com>,
"jgg@ziepe.ca" <jgg@ziepe.ca>,
"jthoughton@google.com" <jthoughton@google.com>,
"yuanchu@google.com" <yuanchu@google.com>,
"hpa@zytor.com" <hpa@zytor.com>,
"shikemeng@huaweicloud.com" <shikemeng@huaweicloud.com>,
"nphamcs@gmail.com" <nphamcs@gmail.com>,
"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>,
"shivankg@amd.com" <shivankg@amd.com>,
"shuah@kernel.org" <shuah@kernel.org>,
"youngjun.park@lge.com" <youngjun.park@lge.com>,
"kasong@tencent.com" <kasong@tencent.com>,
"pankaj.gupta@amd.com" <pankaj.gupta@amd.com>,
"suzuki.poulose@arm.com" <suzuki.poulose@arm.com>,
"chao.p.peng@linux.intel.com" <chao.p.peng@linux.intel.com>,
"pbonzini@redhat.com" <pbonzini@redhat.com>,
"vbabka@kernel.org" <vbabka@kernel.org>,
"weixugc@google.com" <weixugc@google.com>,
"michael.roth@amd.com" <michael.roth@amd.com>,
"rostedt@goodmis.org" <rostedt@goodmis.org>,
"mingo@redhat.com" <mingo@redhat.com>,
"qperret@google.com" <qperret@google.com>,
"brauner@kernel.org" <brauner@kernel.org>,
"bp@alien8.de" <bp@alien8.de>,
"baoquan.he@linux.dev" <baoquan.he@linux.dev>,
"corbet@lwn.net" <corbet@lwn.net>,
"skhan@linuxfoundation.org" <skhan@linuxfoundation.org>,
"liam@infradead.org" <liam@infradead.org>,
"axelrasmussen@google.com" <axelrasmussen@google.com>,
"kas@kernel.org" <kas@kernel.org>,
"qi.zheng@linux.dev" <qi.zheng@linux.dev>,
"linux-mm@kvack.org" <linux-mm@kvack.org>
Subject: Re: [PATCH v10 11/41] KVM: guest_memfd: Ensure pages are not in use before conversion
Date: Mon, 17 Aug 2026 13:12:05 -0700 [thread overview]
Message-ID: <aoNrFX9yLfsM7KQI@google.com> (raw)
In-Reply-To: <aoKnmW9St5zCoTD3@yzhao56-desk.sh.intel.com>
On Mon, Aug 17, 2026, Yan Zhao wrote:
> On Thu, Aug 13, 2026 at 04:20:05PM -0700, Sean Christopherson wrote:
> > On Thu, Aug 13, 2026, Rick P Edgecombe wrote:
> > > > > nicely so we actually just run an old branch's TDX selftests against newer
> > > > > kernels. So the branch is a bit of a pile, and not really suitable for sharing.
> > > > > We plan to clean it and upstream it when the path clears. So it would really
> > > > > help to get those basic ones upstream. We remain happy to help, so please let us
> > > > > know.
> > > >
> > > > I guess at this point I'm hoping y'all and Sean are okay that this
> > > > conversions series merges, and we let this stress test failure be
> > > > handled later. I'll be around to fix things :)
> > > >
> > > > I'd say the line of sight to fixing this would be when the KVM MMU only
> > > > gets PFNs (and no pages at all) from guest_memfd.
> > >
> > > Hmm, I think we shouldn't upstream a uABI that we don't have line of sight to
> > > making robust. So it would be good to settle this thread at least.
> >
> > This isn't uABI. You're talking about hitting a race condition between one task
> Hmm. Perhaps it is not a uABI issue, since users are allowed to retry. However,
> it is hard to convince me that it makes sense to require users to retry a
> private-to-shared conversion before a GFN has ever been mapped, given that a
> retry is not required when the GFN is currently in use by the guest.
>
> > converting a page and another faulting in the same page. An NMI, SMI, or IRQ at
> > just the right/wrong time, especially on a preemptible kernel, could lead to the
> > same test failures, even if KVM drops the refcount "immediately".
> Could you elaborate on how an NMI, SMI, or IRQ at just the right/wrong time
> could lead to the same test failures?
Ah, sorry, my bad. I was speed reading and missed that the key to your suggested
"*page = NULL" change was that the reference was put _before_
filemap_invalidate_unlock_shared(), i.e. before dropping
the invalidate lock and thus before __kvm_gmem_set_attributes() will walk the
folios to look for outstanding references. I was thinking that putting the
reference right away was just shrinking the timing window, but putting the
reference while still holding the invalidate lock closes the window entirely.
So, I take back what I said about this not being ABI, and about this not blocking
in-place conversion. It most definitely affects ABI, and so needs to be addressed
before merging in-place conversion. The only question is if we want to commit to
guaranteeing that conversion will succeed in this scenario, or if we want to take
the easy way out and formally document that conversion can fail with EAGAIN at any
time, even if userspace has never mmap()'d the memory in question.
I'm leaning pretty strongly towards guaranteeing conversion will succeed. We'll
still need to document the EAGAIN behavior, but IMO there's a massive difference
between conversion failing if there's a lingering reference acquired via a VMA,
conversion failing because a vCPU page fault raced with conversion. E.g. being
able to assert success in a very curated test, as the stress test presumably does,
would be extremely valuable for helping detect/prevent edge case bugs.
The argument against guaranteeing success is that we might make our future lives
harder, e.g. if it turns out there are legitimate, hard-to-solve edge cases. But
I'm ok with that risk, as it seems highly unlikely to be problematic in practice,
and there is real benefit to guaranteeing success.
> > As for in-place conversion, this is not a blocker.
> Sorry. I didn't intend to block in-place conversion.
LOL, what we intend and what happens aren't always the same. :-)
> I encountered this issue during testing, so reported it.
Thanks for doing so! I'd *much* rather sort these issues out *before* merging
code, even if it means delaying the merge by a bit.
next prev parent reply other threads:[~2026-08-17 20:12 UTC|newest]
Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-07 21:52 [PATCH v10 00/41] guest_memfd: In-place conversion support Ackerley Tng via B4 Relay
2026-08-07 21:52 ` [PATCH v10 01/41] KVM: guest_memfd: Use kvm_mem_is_private() when populating guest_memfd memory Ackerley Tng via B4 Relay
2026-08-12 3:12 ` Binbin Wu
2026-08-12 8:16 ` Xiaoyao Li
2026-08-12 13:34 ` Fuad Tabba
2026-08-07 21:52 ` [PATCH v10 02/41] KVM: guest_memfd: Introduce per-gmem attributes, use to guard user mappings Ackerley Tng via B4 Relay
2026-08-10 15:12 ` Sean Christopherson
2026-08-12 3:27 ` Binbin Wu
2026-08-07 21:52 ` [PATCH v10 03/41] KVM: Rename KVM_GENERIC_MEMORY_ATTRIBUTES to KVM_VM_MEMORY_ATTRIBUTES Ackerley Tng via B4 Relay
2026-08-07 21:52 ` [PATCH v10 04/41] KVM: Enumerate support for PRIVATE memory iff kvm_arch_has_private_mem is defined Ackerley Tng via B4 Relay
2026-08-12 8:23 ` Xiaoyao Li
2026-08-07 21:52 ` [PATCH v10 05/41] KVM: Rename memory attribute APIs to prepare for in-place gmem conversion Ackerley Tng via B4 Relay
2026-08-12 5:23 ` Binbin Wu
2026-08-07 21:52 ` [PATCH v10 06/41] KVM: Provide generic interface for checking memory private/shared status Ackerley Tng via B4 Relay
2026-08-12 5:33 ` Binbin Wu
2026-08-07 21:52 ` [PATCH v10 07/41] KVM: guest_memfd: Stub in ability to enable in-place shared<=>private conversion Ackerley Tng via B4 Relay
2026-08-10 8:49 ` David Hildenbrand (Arm)
2026-08-10 15:01 ` Sean Christopherson
2026-08-12 9:42 ` Xiaoyao Li
2026-08-13 18:40 ` Ackerley Tng
2026-08-12 10:53 ` David Hildenbrand (Arm)
2026-08-12 21:34 ` Sean Christopherson
2026-08-13 18:30 ` Ackerley Tng
2026-08-12 9:45 ` Xiaoyao Li
2026-08-12 13:35 ` Fuad Tabba
2026-08-07 21:52 ` [PATCH v10 08/41] KVM: Consolidate private memory and guest_memfd ifdeffery in kvm_host.h Ackerley Tng via B4 Relay
2026-08-10 8:50 ` David Hildenbrand (Arm)
2026-08-07 21:52 ` [PATCH v10 09/41] KVM: guest_memfd: Filter both shared and private when invalidating Ackerley Tng via B4 Relay
2026-08-10 9:06 ` David Hildenbrand (Arm)
2026-08-10 9:27 ` Suzuki K Poulose
2026-08-10 19:11 ` Ackerley Tng
2026-08-12 13:35 ` Fuad Tabba
2026-08-07 21:52 ` [PATCH v10 10/41] KVM: guest_memfd: Add base support for KVM_SET_MEMORY_ATTRIBUTES2 Ackerley Tng via B4 Relay
2026-08-07 21:52 ` [PATCH v10 11/41] KVM: guest_memfd: Ensure pages are not in use before conversion Ackerley Tng via B4 Relay
2026-08-08 0:29 ` Yan Zhao
2026-08-09 21:51 ` Yan Zhao
2026-08-10 21:06 ` Ackerley Tng
2026-08-11 1:04 ` Yan Zhao
2026-08-11 2:17 ` Ackerley Tng
2026-08-11 4:50 ` Yan Zhao
2026-08-11 17:35 ` Ackerley Tng
2026-08-11 17:47 ` Edgecombe, Rick P
2026-08-13 18:51 ` Ackerley Tng
2026-08-13 20:26 ` Edgecombe, Rick P
2026-08-13 23:20 ` Sean Christopherson
2026-08-13 23:30 ` Edgecombe, Rick P
2026-08-17 6:18 ` Yan Zhao
2026-08-17 20:12 ` Sean Christopherson [this message]
2026-08-17 21:47 ` Ackerley Tng
2026-08-17 22:20 ` Sean Christopherson
2026-08-10 9:19 ` David Hildenbrand (Arm)
2026-08-10 21:41 ` Ackerley Tng
2026-08-10 22:26 ` Sean Christopherson
2026-08-11 17:56 ` David Hildenbrand (Arm)
2026-08-16 23:13 ` Ackerley Tng
2026-08-07 21:52 ` [PATCH v10 12/41] KVM: guest_memfd: Call arch make_shared callback for to-shared conversion Ackerley Tng via B4 Relay
2026-08-13 6:56 ` Binbin Wu
2026-08-13 15:55 ` Sean Christopherson
2026-08-13 21:01 ` Ackerley Tng
2026-08-13 22:08 ` Sean Christopherson
2026-08-14 0:05 ` Ackerley Tng
2026-08-14 15:04 ` Sean Christopherson
2026-08-16 22:46 ` Ackerley Tng
2026-08-17 19:47 ` Sean Christopherson
2026-08-17 20:16 ` Sean Christopherson
2026-08-17 21:10 ` Ackerley Tng
2026-08-07 21:52 ` [PATCH v10 13/41] KVM: guest_memfd: Return early if range already has requested attributes Ackerley Tng via B4 Relay
2026-08-14 2:30 ` Binbin Wu
2026-08-07 21:52 ` [PATCH v10 14/41] mm/gup: factor out LRU cache draining for folio into lru_cache_drain_for_folio() Ackerley Tng via B4 Relay
2026-08-10 9:22 ` David Hildenbrand (Arm)
2026-08-12 13:37 ` Fuad Tabba
2026-08-07 21:52 ` [PATCH v10 15/41] KVM: guest_memfd: Handle lru_add fbatch refcounts during conversion safety check Ackerley Tng via B4 Relay
2026-08-10 9:25 ` David Hildenbrand (Arm)
2026-08-10 21:29 ` Ackerley Tng
2026-08-12 13:36 ` Fuad Tabba
2026-08-14 3:25 ` Binbin Wu
2026-08-16 23:02 ` Ackerley Tng
2026-08-07 21:52 ` [PATCH v10 16/41] KVM: guest_memfd: Zero page while getting pfn Ackerley Tng via B4 Relay
2026-08-10 9:30 ` David Hildenbrand (Arm)
2026-08-10 23:41 ` Ackerley Tng
2026-08-11 0:18 ` Sean Christopherson
2026-08-11 17:51 ` David Hildenbrand (Arm)
2026-08-14 5:18 ` Binbin Wu
2026-08-07 21:52 ` [PATCH v10 17/41] KVM: SEV: Make 'uaddr' parameter optional for KVM_SEV_SNP_LAUNCH_UPDATE Ackerley Tng via B4 Relay
2026-08-07 21:52 ` [PATCH v10 18/41] KVM: TDX: Make source page optional for KVM_TDX_INIT_MEM_REGION Ackerley Tng via B4 Relay
2026-08-14 5:57 ` Binbin Wu
2026-08-14 17:57 ` Sean Christopherson
2026-08-07 21:52 ` [PATCH v10 19/41] KVM: Move KVM_VM_MEMORY_ATTRIBUTES config definition to x86 Ackerley Tng via B4 Relay
2026-08-10 9:32 ` David Hildenbrand (Arm)
2026-08-07 21:52 ` [PATCH v10 20/41] KVM: Let userspace disable per-VM mem attributes, enable per-gmem attributes Ackerley Tng via B4 Relay
2026-08-10 9:36 ` David Hildenbrand (Arm)
2026-08-13 21:23 ` Ackerley Tng
2026-08-17 9:15 ` David Hildenbrand (Arm)
2026-08-14 6:30 ` Binbin Wu
2026-08-14 18:13 ` Sean Christopherson
2026-08-07 21:53 ` [PATCH v10 21/41] KVM: guest_memfd: Enable INIT_SHARED on guest_memfd for x86 Coco VMs Ackerley Tng via B4 Relay
2026-08-14 6:36 ` Binbin Wu
2026-08-07 21:53 ` [PATCH v10 22/41] KVM: selftests: Create gmem fd before "regular" fd when adding memslot Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 23/41] KVM: selftests: Rename guest_memfd{,_offset} to gmem_{fd,offset} Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 24/41] KVM: selftests: Add support for mmap() on guest_memfd in core library Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 25/41] KVM: selftests: Add selftests global for guest memory attributes capability Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 26/41] KVM: selftests: Add helpers for calling ioctls on guest_memfd Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 27/41] KVM: selftests: Test basic single-page conversion flow Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 28/41] KVM: selftests: Test conversion flow when INIT_SHARED Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 29/41] KVM: selftests: Test conversion precision in guest_memfd Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 30/41] KVM: selftests: Test conversion before allocation Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 31/41] KVM: selftests: Convert with allocated folios in different layouts Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 32/41] KVM: selftests: Test that truncation does not change shared/private status Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 33/41] KVM: selftests: Test that shared/private status is consistent across processes Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 34/41] KVM: selftests: Add helpers to pin pages with CONFIG_GUP_TEST Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 35/41] KVM: selftests: Test conversion with elevated page refcount Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 36/41] KVM: selftests: Reset shared memory after hole-punching Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 37/41] KVM: selftests: Provide function to look up guest_memfd details from gpa Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 38/41] KVM: selftests: Provide common function to set memory attributes Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 39/41] KVM: selftests: Make TEST_EXPECT_SIGBUS thread-safe Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 40/41] KVM: selftests: Update private_mem_conversions_test to mmap() guest_memfd Ackerley Tng via B4 Relay
2026-08-07 21:53 ` [PATCH v10 41/41] KVM: selftests: Update private memory exits test to work with per-gmem attributes Ackerley Tng via B4 Relay
2026-08-10 8:43 ` [PATCH v10 00/41] guest_memfd: In-place conversion support David Hildenbrand (Arm)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aoNrFX9yLfsM7KQI@google.com \
--to=seanjc@google.com \
--cc=ackerleytng@google.com \
--cc=aik@amd.com \
--cc=akpm@linux-foundation.org \
--cc=andrew.jones@linux.dev \
--cc=aneesh.kumar@kernel.org \
--cc=axelrasmussen@google.com \
--cc=baohua@kernel.org \
--cc=baoquan.he@linux.dev \
--cc=binbin.wu@linux.intel.com \
--cc=bp@alien8.de \
--cc=brauner@kernel.org \
--cc=chao.p.peng@linux.intel.com \
--cc=chrisl@kernel.org \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=david@kernel.org \
--cc=forkloop@google.com \
--cc=hpa@zytor.com \
--cc=jgg@ziepe.ca \
--cc=jhubbard@nvidia.com \
--cc=jmattson@google.com \
--cc=jthoughton@google.com \
--cc=kas@kernel.org \
--cc=kasong@tencent.com \
--cc=kvm@vger.kernel.org \
--cc=liam@infradead.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=michael.roth@amd.com \
--cc=mingo@redhat.com \
--cc=nphamcs@gmail.com \
--cc=oupton@kernel.org \
--cc=pankaj.gupta@amd.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=pratyush@kernel.org \
--cc=qi.zheng@linux.dev \
--cc=qperret@google.com \
--cc=rick.p.edgecombe@intel.com \
--cc=rientjes@google.com \
--cc=rostedt@goodmis.org \
--cc=shakeel.butt@linux.dev \
--cc=shikemeng@huaweicloud.com \
--cc=shivankg@amd.com \
--cc=shuah@kernel.org \
--cc=skhan@linuxfoundation.org \
--cc=steven.price@arm.com \
--cc=suzuki.poulose@arm.com \
--cc=tabba@google.com \
--cc=tarunsahu@google.com \
--cc=tglx@kernel.org \
--cc=vannapurve@google.com \
--cc=vbabka@kernel.org \
--cc=weixugc@google.com \
--cc=willy@infradead.org \
--cc=wyihan@google.com \
--cc=x86@kernel.org \
--cc=yan.y.zhao@intel.com \
--cc=youngjun.park@lge.com \
--cc=yuanchu@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox