linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Patrick Roy <roypat@amazon.co.uk>
To: <rppt@kernel.org>, <david@redhat.com>, <seanjc@google.com>
Cc: Patrick Roy <roypat@amazon.co.uk>, <pbonzini@redhat.com>,
	<corbet@lwn.net>, <willy@infradead.org>,
	<akpm@linux-foundation.org>, <song@kernel.org>,
	<jolsa@kernel.org>, <ast@kernel.org>, <daniel@iogearbox.net>,
	<andrii@kernel.org>, <martin.lau@linux.dev>, <eddyz87@gmail.com>,
	<yonghong.song@linux.dev>, <john.fastabend@gmail.com>,
	<kpsingh@kernel.org>, <sdf@fomichev.me>, <haoluo@google.com>,
	<Liam.Howlett@oracle.com>, <lorenzo.stoakes@oracle.com>,
	<vbabka@suse.cz>, <jannh@google.com>, <shuah@kernel.org>,
	<kvm@vger.kernel.org>, <linux-doc@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <linux-fsdevel@vger.kernel.org>,
	<linux-mm@kvack.org>, <bpf@vger.kernel.org>,
	<linux-kselftest@vger.kernel.org>, <tabba@google.com>,
	<jgowans@amazon.com>, <graf@amazon.com>, <kalyazin@amazon.com>,
	<xmarcalx@amazon.com>, <derekmn@amazon.com>,
	<jthoughton@google.com>
Subject: [PATCH v4 07/12] KVM: selftests: set KVM_MEM_GUEST_MEMFD in vm_mem_add() if guest_memfd != -1
Date: Fri, 21 Feb 2025 16:07:20 +0000	[thread overview]
Message-ID: <20250221160728.1584559-8-roypat@amazon.co.uk> (raw)
In-Reply-To: <20250221160728.1584559-1-roypat@amazon.co.uk>

Have vm_mem_add() always set KVM_MEM_GUEST_MEMFD in the memslot flags if
a guest_memfd is passed in as an argument. This eliminates the
possibility where a guest_memfd instance is passed to vm_mem_add(), but
it ends up being ignored because the flags argument does not specify
KVM_MEM_GUEST_MEMFD at the same time.

This makes it easy to support more scenarios in which no vm_mem_add() is
not passed a guest_memfd instance, but is expected to allocate one.
Currently, this only happens if guest_memfd == -1 but flags &
KVM_MEM_GUEST_MEMFD != 0, but later vm_mem_add() will gain support for
loading the test code itself into guest_memfd (via KVM_GMEM_SHARED_MEM)
if requested via a special vm_mem_backing_src_type, at which point
having to make sure the src_type and flags are in-sync becomes
cumbersome.

Signed-off-by: Patrick Roy <roypat@amazon.co.uk>
---
 tools/testing/selftests/kvm/lib/kvm_util.c | 26 +++++++++++++---------
 1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/tools/testing/selftests/kvm/lib/kvm_util.c b/tools/testing/selftests/kvm/lib/kvm_util.c
index 33fefeb3ca44..ebdf38e2983b 100644
--- a/tools/testing/selftests/kvm/lib/kvm_util.c
+++ b/tools/testing/selftests/kvm/lib/kvm_util.c
@@ -1017,22 +1017,26 @@ void vm_mem_add(struct kvm_vm *vm, enum vm_mem_backing_src_type src_type,
 
 	region->backing_src_type = src_type;
 
-	if (flags & KVM_MEM_GUEST_MEMFD) {
-		if (guest_memfd < 0) {
+	if (guest_memfd < 0) {
+		if (flags & KVM_MEM_GUEST_MEMFD) {
 			uint32_t guest_memfd_flags = 0;
 			TEST_ASSERT(!guest_memfd_offset,
 				    "Offset must be zero when creating new guest_memfd");
 			guest_memfd = vm_create_guest_memfd(vm, mem_size, guest_memfd_flags);
-		} else {
-			/*
-			 * Install a unique fd for each memslot so that the fd
-			 * can be closed when the region is deleted without
-			 * needing to track if the fd is owned by the framework
-			 * or by the caller.
-			 */
-			guest_memfd = dup(guest_memfd);
-			TEST_ASSERT(guest_memfd >= 0, __KVM_SYSCALL_ERROR("dup()", guest_memfd));
 		}
+	} else {
+		/*
+		 * Install a unique fd for each memslot so that the fd
+		 * can be closed when the region is deleted without
+		 * needing to track if the fd is owned by the framework
+		 * or by the caller.
+		 */
+		guest_memfd = dup(guest_memfd);
+		TEST_ASSERT(guest_memfd >= 0, __KVM_SYSCALL_ERROR("dup()", guest_memfd));
+	}
+
+	if (guest_memfd > 0) {
+		flags |= KVM_MEM_GUEST_MEMFD;
 
 		region->region.guest_memfd = guest_memfd;
 		region->region.guest_memfd_offset = guest_memfd_offset;
-- 
2.48.1



  parent reply	other threads:[~2025-02-21 16:10 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-21 16:07 [PATCH v4 00/12] Direct Map Removal for guest_memfd Patrick Roy
2025-02-21 16:07 ` [PATCH v4 01/12] mm: introduce AS_NO_DIRECT_MAP Patrick Roy
2025-02-25 16:52   ` David Hildenbrand
2025-03-03  9:29     ` Vlastimil Babka
2025-02-21 16:07 ` [PATCH v4 02/12] mm/secretmem: set AS_NO_DIRECT_MAP instead of special-casing Patrick Roy
2025-02-25 16:52   ` David Hildenbrand
2025-02-26  8:44     ` Patrick Roy
2025-02-21 16:07 ` [PATCH v4 03/12] KVM: guest_memfd: Add flag to remove from direct map Patrick Roy
2025-02-25 16:54   ` David Hildenbrand
2025-02-26  8:48     ` Patrick Roy
2025-02-26  9:08       ` David Hildenbrand
2025-02-26 15:14         ` Patrick Roy
2025-02-26 15:30           ` David Hildenbrand
2025-03-19  7:53             ` Patrick Roy
2025-02-21 16:07 ` [PATCH v4 04/12] KVM: Add capability to discover KVM_GMEM_NO_DIRECT_MAP support Patrick Roy
2025-02-25 16:55   ` David Hildenbrand
2025-02-26  8:37     ` Patrick Roy
2025-02-21 16:07 ` [PATCH v4 05/12] KVM: Documentation: document KVM_GMEM_NO_DIRECT_MAP flag Patrick Roy
2025-02-21 16:07 ` [PATCH v4 06/12] KVM: selftests: load elf via bounce buffer Patrick Roy
2025-02-21 16:07 ` Patrick Roy [this message]
2025-02-21 16:07 ` [PATCH v4 08/12] KVM: selftests: Add guest_memfd based vm_mem_backing_src_types Patrick Roy
2025-02-25 14:12   ` Patrick Roy
2025-02-21 16:07 ` [PATCH v4 09/12] KVM: selftests: stuff vm_mem_backing_src_type into vm_shape Patrick Roy
2025-02-21 16:07 ` [PATCH v4 10/12] KVM: selftests: adjust test_create_guest_memfd_invalid Patrick Roy
2025-02-21 16:07 ` [PATCH v4 11/12] KVM: selftests: set KVM_GMEM_NO_DIRECT_MAP in mem conversion tests Patrick Roy
2025-02-21 16:07 ` [PATCH v4 12/12] KVM: selftests: Test guest execution from direct map removed gmem Patrick Roy

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=20250221160728.1584559-8-roypat@amazon.co.uk \
    --to=roypat@amazon.co.uk \
    --cc=Liam.Howlett@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=corbet@lwn.net \
    --cc=daniel@iogearbox.net \
    --cc=david@redhat.com \
    --cc=derekmn@amazon.com \
    --cc=eddyz87@gmail.com \
    --cc=graf@amazon.com \
    --cc=haoluo@google.com \
    --cc=jannh@google.com \
    --cc=jgowans@amazon.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=jthoughton@google.com \
    --cc=kalyazin@amazon.com \
    --cc=kpsingh@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lorenzo.stoakes@oracle.com \
    --cc=martin.lau@linux.dev \
    --cc=pbonzini@redhat.com \
    --cc=rppt@kernel.org \
    --cc=sdf@fomichev.me \
    --cc=seanjc@google.com \
    --cc=shuah@kernel.org \
    --cc=song@kernel.org \
    --cc=tabba@google.com \
    --cc=vbabka@suse.cz \
    --cc=willy@infradead.org \
    --cc=xmarcalx@amazon.com \
    --cc=yonghong.song@linux.dev \
    /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