mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: David Woodhouse <dwmw2@infradead.org>
To: "Jörg Rödel" <joro@8bytes.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Sean Christopherson <seanjc@google.com>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	ashish.kalra@amd.com, michael.roth@amd.com, nsaenz@amazon.com,
	anelkz@amazon.de, James.Bottomley@HansenPartnership.com,
	Melody Wang <huibo.wang@amd.com>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	kvmarm@lists.linux.dev, loongarch@lists.linux.dev,
	linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	kvm-riscv@lists.infradead.org, x86@kernel.org,
	coconut-svsm@lists.linux.dev, joerg.roedel@amd.com,
	Mushahid Hussain <hmushi@amazon.co.uk>,
	Sriram Nambakam <snambakam@linux.microsoft.com>,
	David Woodhouse <dwmw@amazon.co.uk>
Subject: [RFC PATCH 01/13] KVM: x86: Let userspace opt in to multiple planes with KVM_CAP_PLANES
Date: Fri, 13 Nov 2026 11:25:55 -0700	[thread overview]
Message-ID: <20261113182607.82813-2-dwmw2@infradead.org> (raw)
In-Reply-To: <20261113182607.82813-1-dwmw2@infradead.org>

From: David Woodhouse <dwmw@amazon.co.uk>

A VMM implementing a software privilege model such as Hyper-V VSM
needs more than one plane, but kvm_arch_max_planes() returns the
vendor ceiling, which is 1 everywhere except SEV-SNP (where VMPLs are
guest-architectural), so KVM_CREATE_PLANE rejects every id above zero.

Make KVM_CAP_PLANES a VM enable capability taking the number of planes
userspace is going to manage, up to KVM_MAX_USER_PLANES (4), which the
system fd now reports. It must be set before any vCPU or extra plane
exists, so nothing is sized against the old limit, and cannot be changed
once set. It also needs a split irqchip, which kvm_arch_max_planes()
already requires before it reports more than one plane, so enabling it
without one fails instead of silently granting a single plane, and
KVM_CREATE_IRQCHIP is refused afterwards. Non-default VM types are
rejected: SEV-SNP keeps deriving its count from the supported VMPLs,
and protected-state VM types need their own audit first. So is more
than one plane without TDP: with shadow paging every plane would
write-track the guest page tables, and the per-gfn write-track count
is only 16 bits wide. The same count is why the opt-in stops at four
planes even with TDP: nested guests still have write-tracked shadow
pages, each plane can add its own for a gfn, and four planes is the
most that keeps the count below 2^16. KVM_MAX_PLANES stays 16, the
bound for plane ids. A VM that does not enable the capability keeps
reporting a single plane.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
---
 Documentation/virt/kvm/api.rst  | 36 +++++++++++++++++++++
 arch/x86/include/asm/kvm_host.h |  1 +
 arch/x86/kvm/x86.c              | 55 +++++++++++++++++++++++++++++++--
 include/linux/kvm_host.h        | 12 +++++++
 virt/kvm/kvm_main.c             | 11 ++++---
 5 files changed, 108 insertions(+), 7 deletions(-)

diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst
index 9aa09d8a39dc..25ce35d5361a 100644
--- a/Documentation/virt/kvm/api.rst
+++ b/Documentation/virt/kvm/api.rst
@@ -6834,6 +6834,12 @@ See also: :ref:`KVM_SET_MEMORY_ATTRIBUTES`.
 
 Creates a new *plane*, i.e. a separate privilege level for the virtual machine.
 
+The range of valid plane ids is [0, N) where N is the value returned by
+KVM_CHECK_EXTENSION(KVM_CAP_PLANES) on the VM file descriptor.  Plane 0 is
+the VM itself; for VM types where the plane count is not guest-architectural,
+ids above 0 only become valid after userspace enables KVM_CAP_PLANES with
+the number of planes it is going to manage (see :ref:`KVM_CAP_PLANES`).
+
 Each plane has a numeric id that is used when communicating with KVM.  While
 KVM is currently agnostic to whether low ids are more or less privileged, it is
 expected that this will not always be the case in the future.  For example KVM
@@ -9234,6 +9240,36 @@ enabled, cmma can't be enabled anymore and pfmfi and the storage key
 interpretation are disabled. If cmma has already been enabled or the
 hpage_2g module parameter is not set to 1, -EINVAL is returned.
 
+.. _KVM_CAP_PLANES:
+
+7.48 KVM_CAP_PLANES
+-------------------
+
+:Architectures: x86
+:Target: VM
+:Parameters: args[0] contains the number of planes to make available
+
+Opts the VM in to using multiple planes, raising the limit on plane ids
+that KVM_CREATE_PLANE accepts to args[0], which must be between 1 and the
+value KVM_CHECK_EXTENSION(KVM_CAP_PLANES) returns on the system fd.  That
+ceiling is currently 4: on x86 every plane can add its own shadow pages for
+a gfn, and the per-gfn write-tracking count is only 16 bits wide.
+
+Planes other than plane 0 only exist when userspace manages them, so by
+default a VM reports and accepts a single plane.  VM types whose plane
+count is guest-architectural (such as SEV-SNP, where it reflects the
+supported VMPLs) report that count without this capability, and enabling
+it on them fails with -EINVAL.  Multiple planes also require two-dimensional
+paging: without TDP, enabling more than one plane fails with -EINVAL.
+
+Planes require a split irqchip.  Enable KVM_CAP_SPLIT_IRQCHIP first;
+otherwise enabling this capability fails with -EINVAL.  Once it is
+enabled, KVM_CREATE_IRQCHIP fails as well.
+
+This capability must be enabled before any vCPU or extra plane has been
+created, and the chosen count cannot be changed afterwards; otherwise
+-EEXIST is returned.
+
 8. Other capabilities.
 ======================
 
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index a4912735ad3d..d4628ab99197 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -1193,6 +1193,7 @@ struct kvm_arch {
 	bool has_protected_eoi;
 	bool has_protected_pmu;
 	bool pre_fault_allowed;
+	unsigned int user_max_planes;
 	struct hlist_head *mmu_page_hash;
 	struct list_head active_mmu_pages;
 	struct kvm_possible_nx_huge_pages possible_nx_huge_pages[KVM_NR_MMU_TYPES];
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 29beb5791c15..79ea075eceec 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -320,11 +320,29 @@ EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_x86_default_max_planes);
 
 unsigned kvm_arch_max_planes(struct kvm *kvm)
 {
+	unsigned int vendor_planes;
+
 	/* For now, planes are only supported with irqchip=split */
 	if (!irqchip_split(kvm))
 		return 1;
 
-	return kvm_x86_call(max_planes)(kvm);
+	vendor_planes = kvm_x86_call(max_planes)(kvm);
+
+	/*
+	 * When the plane count is guest-architectural (SEV-SNP VMPLs),
+	 * the vendor module owns it.  Otherwise planes are a software
+	 * construct and only exist when userspace has opted in to the
+	 * number of planes it is going to manage, via KVM_CAP_PLANES.
+	 */
+	if (vendor_planes > 1)
+		return vendor_planes;
+
+	/*
+	 * Lockless readers (KVM_CHECK_EXTENSION) race the KVM_ENABLE_CAP
+	 * store; the value is set once, so a torn-free read is all that
+	 * is needed.
+	 */
+	return READ_ONCE(kvm->arch.user_max_planes) ? : 1;
 }
 
 struct kvm_plane *x86_alloc_plane(void)
@@ -4146,6 +4164,38 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
 		mutex_unlock(&kvm->lock);
 		break;
 	}
+	case KVM_CAP_PLANES: {
+		mutex_lock(&kvm->lock);
+		r = -EINVAL;
+		if (cap->args[0] < 1 || cap->args[0] > KVM_MAX_USER_PLANES)
+			goto planes_unlock;
+		/* Planes are only supported with a split irqchip. */
+		if (!irqchip_split(kvm))
+			goto planes_unlock;
+		/*
+		 * Only ordinary VMs for now.  SEV-SNP VMs get their plane
+		 * count from the architectural VMPL support, and VM types
+		 * with protected state need per-plane audits first.
+		 */
+		if (kvm->arch.vm_type != KVM_X86_DEFAULT_VM)
+			goto planes_unlock;
+		/*
+		 * Every plane builds its own MMU roots.  With shadow paging
+		 * each one would also write-track the guest page tables, and
+		 * the per-gfn write-track count is only 16 bits wide.
+		 */
+		if (cap->args[0] > 1 && !tdp_enabled)
+			goto planes_unlock;
+		r = -EEXIST;
+		if (kvm->created_vcpus || kvm->has_planes ||
+		    kvm->arch.user_max_planes)
+			goto planes_unlock;
+		WRITE_ONCE(kvm->arch.user_max_planes, cap->args[0]);
+		r = 0;
+planes_unlock:
+		mutex_unlock(&kvm->lock);
+		break;
+	}
 	case KVM_CAP_X2APIC_API:
 		r = -EINVAL;
 		if (cap->args[0] & ~KVM_X2APIC_API_VALID_FLAGS)
@@ -4594,7 +4644,8 @@ int kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg)
 			goto create_irqchip_unlock;
 
 		r = -EINVAL;
-		if (kvm->created_vcpus || kvm->has_planes)
+		if (kvm->created_vcpus || kvm->has_planes ||
+		    kvm->arch.user_max_planes)
 			goto create_irqchip_unlock;
 
 		r = kvm_pic_init(kvm);
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
index 6922e3063ad8..562489ab444d 100644
--- a/include/linux/kvm_host.h
+++ b/include/linux/kvm_host.h
@@ -1195,6 +1195,18 @@ void kvm_unlock_all_vcpus(struct kvm *kvm);
 void vcpu_load(struct kvm_vcpu *vcpu);
 void vcpu_put(struct kvm_vcpu *vcpu);
 
+/*
+ * The most planes userspace may enable with KVM_ENABLE_CAP(KVM_CAP_PLANES).
+ * KVM_MAX_PLANES (16, the Hyper-V VTL limit) stays the bound for plane ids
+ * and per-plane arrays.  The opt-in is lower because on x86 each plane can
+ * shadow a gfn with its own upper-level shadow pages: the per-gfn count of
+ * those is a bit less than 2^14 per plane (see union kvm_mmu_page_role),
+ * and the per-gfn write-track count is 16 bits wide, so four planes is the
+ * most that keeps it from overflowing.  The architecture defines 4 SEV-SNP
+ * VMPLs, so 4 is also the most planes any x86 VM can have.
+ */
+#define KVM_MAX_USER_PLANES	4
+
 unsigned kvm_arch_max_planes(struct kvm *kvm);
 struct kvm_plane *kvm_alloc_plane(void);
 void kvm_free_plane(struct kvm_plane *plane);
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 62d33f24dd7f..75ceab2d4838 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -5438,10 +5438,11 @@ static int kvm_vm_ioctl_check_extension_generic(struct kvm *kvm, long arg)
 		if (kvm)
 			return kvm_arch_max_planes(kvm);
 		/*
-		 * The system fd reports the ceiling a VM may be given; a VM
-		 * fd reports what the VM actually has.
+		 * The system fd reports the ceiling a VM may opt in to via
+		 * KVM_ENABLE_CAP(KVM_CAP_PLANES); a VM fd reports what the
+		 * VM actually has.
 		 */
-		return KVM_MAX_PLANES;
+		return KVM_MAX_USER_PLANES;
 	default:
 		break;
 	}
@@ -5656,8 +5657,8 @@ static int kvm_vm_ioctl_create_plane(struct kvm *kvm, unsigned id)
 	guard(mutex)(&kvm->lock);
 
 	/*
-	 * Check the limit under kvm->lock, which KVM_CAP_SPLIT_IRQCHIP (and
-	 * later the KVM_CAP_PLANES opt-in) take when they raise the limit.
+	 * Check the limit under kvm->lock, which KVM_CAP_SPLIT_IRQCHIP and
+	 * the KVM_CAP_PLANES opt-in take when they raise the limit.
 	 */
 	if (id >= kvm_arch_max_planes(kvm) ||
 	    WARN_ON_ONCE(id >= KVM_MAX_PLANES))
-- 
2.50.1


  reply	other threads:[~2026-11-13 18:26 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-08 14:41 [PATCH 00/60] KVM Planes + SEV-SNP Support Jörg Rödel
2026-06-08 14:41 ` [PATCH 01/60] x86/sev: Define the #HV doorbell page structure Jörg Rödel
2026-06-08 14:41 ` [PATCH 02/60] KVM: SVM: Add support for the SEV-SNP #HV doorbell page NAE event Jörg Rödel
2026-06-10 13:28   ` Tom Lendacky
2026-06-10 15:05     ` Tom Lendacky
2026-06-08 14:41 ` [PATCH 03/60] KVM: SVM: Inject #HV when Restricted Injection is active Jörg Rödel
2026-06-08 14:41 ` [PATCH 04/60] KVM: SVM: Inject NMIs " Jörg Rödel
2026-06-08 14:41 ` [PATCH 05/60] KVM: SVM: Inject MCEs " Jörg Rödel
2026-06-08 14:41 ` [PATCH 06/60] KVM: SVM: Enable Restricted Injection for an SEV-SNP guest Jörg Rödel
2026-06-08 14:41 ` [PATCH 07/60] KVM: SVM: Add support for the SEV-SNP #HV IPI NAE event Jörg Rödel
2026-06-10 13:45   ` Tom Lendacky
2026-06-08 14:42 ` [PATCH 08/60] Documentation: kvm: introduce "VM plane" concept Jörg Rödel
2026-06-08 14:42 ` [PATCH 09/60] kvm: Introduce struct kvm_plane Jörg Rödel
2026-06-08 14:42 ` [PATCH 10/60] kvm: Move vcpu_array to " Jörg Rödel
2026-06-08 14:42 ` [PATCH 11/60] kvm: Introduce struct kvm_vcpu_common Jörg Rödel
2026-06-08 14:42 ` [PATCH 12/60] kvm: Move vcpu accounting to " Jörg Rödel
2026-06-08 14:42 ` [PATCH 13/60] kvm: Add read accessors for kvm_vcpu scheduling state Jörg Rödel
2026-06-08 14:42 ` [PATCH 14/60] kvm: Make kvm_running_vcpus point to struct kvm_vcpu_common Jörg Rödel
2026-06-08 14:42 ` [PATCH 15/60] kvm: Move VCPU scheduling state " Jörg Rödel
2026-06-08 14:42 ` [PATCH 16/60] kvm: Add accessors for kvm_vcpu->mutex Jörg Rödel
2026-06-08 14:42 ` [PATCH 17/60] kvm: Move VCPU locking to struct kvm_vcpu_common Jörg Rödel
2026-06-08 14:42 ` [PATCH 18/60] kvm: Move kvm_vcpu->rcuwait " Jörg Rödel
2026-06-08 14:42 ` [PATCH 19/60] kvm: Introduce accessors for kvm_vcpu->mode Jörg Rödel
2026-06-08 14:42 ` [PATCH 20/60] kvm: Move kvm_vcpu mode and requests field to struct kvm_vcpu_common Jörg Rödel
2026-06-08 14:42 ` [PATCH 21/60] kvm: Introduce per-plane VCPU requests Jörg Rödel
2026-06-08 14:42 ` [PATCH 22/60] kvm: Move kvm_vcpu pid members to struct kvm_vcpu_common Jörg Rödel
2026-06-08 14:42 ` [PATCH 23/60] kvm: Move kvm_vcpu sigset " Jörg Rödel
2026-06-08 14:42 ` [PATCH 24/60] kvm: Move kvm_vcpu spinloop " Jörg Rödel
2026-06-08 14:42 ` [PATCH 25/60] kvm: Move kvm_vcpu->dirty_ring " Jörg Rödel
2026-06-08 14:42 ` [PATCH 26/60] kvm: Introduce arch-specific plane state Jörg Rödel
2026-06-08 14:42 ` [PATCH 27/60] kvm: Introduce arch-specific part of struct kvm_vcpu_common Jörg Rödel
2026-06-08 14:42 ` [PATCH 28/60] kvm: Implement KVM_CAP_PLANES Jörg Rödel
2026-06-08 14:42 ` [PATCH 29/60] kvm: Implement KVM_CREATE_PLANE ioctl Jörg Rödel
2026-09-11 17:54   ` Serge Hallyn
2026-06-08 14:42 ` [PATCH 30/60] kvm: Add KVM_EXIT_PLANE_EVENT Jörg Rödel
2026-06-08 14:42 ` [PATCH 31/60] kvm: Allocate struct kvm_plane in architecture code Jörg Rödel
2026-06-08 14:42 ` [PATCH 32/60] kvm: Allocate struct kvm_run only for struct kvm_vcpu_common Jörg Rödel
2026-06-08 14:42 ` [PATCH 33/60] KVM: Implement KVM_CREATE_VCPU ioctl for planes Jörg Rödel
2026-06-08 14:42 ` [PATCH 34/60] kvm: Keep track of plane VCPUs in struct kvm_vcpu_common Jörg Rödel
2026-06-08 14:42 ` [PATCH 35/60] kvm: Add VCPU plane-scheduling state and helpers Jörg Rödel
2026-06-08 16:47   ` Paolo Bonzini
2026-06-08 17:52     ` Jörg Rödel
2026-06-08 17:58       ` Paolo Bonzini
2026-06-09 12:37         ` Jörg Rödel
2026-06-09 12:59           ` James Bottomley
2026-06-09 14:27             ` Jörg Rödel
2026-06-09 15:06               ` James Bottomley
2026-07-17 13:48           ` Saenz Julienne, Nicolas
2026-07-17 15:56             ` James Bottomley
2026-07-17 17:33               ` Saenz Julienne, Nicolas
2026-07-17 18:26                 ` James Bottomley
2026-07-17 14:35           ` James Bottomley
2026-09-24 14:10             ` Jörg Rödel
2026-06-08 14:42 ` [PATCH 36/60] kvm: Add plane_level to kvm_kernel_irq_routing_entry Jörg Rödel
2026-06-08 14:42 ` [PATCH 37/60] kvm: Pass plane_level to kvm_set_routing_entry() Jörg Rödel
2026-06-08 14:42 ` [PATCH 38/60] kvm: Make KVM_SIGNAL_MSI per plane Jörg Rödel
2026-06-08 14:42 ` [PATCH 39/60] kvm: Make KVM_SET_GSI_ROUTING " Jörg Rödel
2026-06-08 14:42 ` [PATCH 40/60] kvm: x86: Handle IOAPIC EOIs " Jörg Rödel
2026-06-08 14:42 ` [PATCH 41/60] kvm: x86: Make apic_map " Jörg Rödel
2026-06-08 14:42 ` [PATCH 42/60] kvm: x86: Make local APIC code aware of planes Jörg Rödel
2026-06-08 14:42 ` [PATCH 43/60] kvm: x86: Move CPUID state to struct kvm_vcpu_arch_common Jörg Rödel
2026-06-08 14:42 ` [PATCH 44/60] kvm: x86: Move cpu_caps " Jörg Rödel
2026-06-08 14:42 ` [PATCH 45/60] kvm: x86: Update state for all plane VCPUs after CPUID update Jörg Rödel
2026-06-08 14:42 ` [PATCH 46/60] kvm: x86: Share MTRR state across planes Jörg Rödel
2026-06-08 14:42 ` [PATCH 47/60] kvm: x86: Select a plane to run Jörg Rödel
2026-06-08 14:42 ` [PATCH 48/60] kvm: x86: Make event injection VCPU requests per-plane Jörg Rödel
2026-06-08 14:42 ` [PATCH 49/60] kvm: x86: Allow hardware backend to overwrite struct kvm_plane allocation Jörg Rödel
2026-06-08 14:42 ` [PATCH 50/60] kvm: x86: Make KVM_REQ_UPDATE_PROTECTED_GUEST_STATE per plane Jörg Rödel
2026-06-08 14:42 ` [PATCH 51/60] kvm: x86: Share pio_data across planes Jörg Rödel
2026-06-08 14:42 ` [PATCH 52/60] kvm: x86: Switch to plane0 if it has events Jörg Rödel
2026-06-08 14:42 ` [PATCH 53/60] kvm: x86: Introduce max_planes x86-op Jörg Rödel
2026-06-08 14:42 ` [PATCH 54/60] kvm: x86: Restrict KVM planes support to KVM_IRQCHIP_SPLIT Jörg Rödel
2026-06-08 14:42 ` [PATCH 55/60] kvm: svm: Track vmsa_features per plane Jörg Rödel
2026-06-08 14:42 ` [PATCH 56/60] kvm: svm: Implement GET_AP_APIC_IDS NAE event Jörg Rödel
2026-06-08 14:42 ` [PATCH 57/60] kvm: sev: Allow for VMPL level specification in AP create Jörg Rödel
2026-06-08 14:42 ` [PATCH 58/60] kvm: svm: Invoke a specified VMPL level VMSA for the vCPU Jörg Rödel
2026-06-08 14:42 ` [PATCH 59/60] kvm: svm: Implement max_planes x86 operation Jörg Rödel
2026-06-08 14:42 ` [PATCH 60/60] kvm: svm: Advertise full multi-VMPL support to the SNP guest Jörg Rödel
2026-06-09  9:29 ` [syzbot ci] Re: KVM Planes + SEV-SNP Support syzbot ci
2026-06-10 18:13 ` [PATCH 00/60] " Melody Wang
2026-11-11 22:28 ` [PATCH 00/16] KVM: Fixes for the Planes + SEV-SNP series David Woodhouse
2026-11-11 22:28   ` [PATCH 01/16] KVM: s390: arm64: Pass plane_level to the kvm_set_routing_entry() stub David Woodhouse
2026-11-11 22:28   ` [PATCH 02/16] KVM: SVM: Derive the plane limit from the immutable VM type David Woodhouse
2026-11-11 22:28   ` [PATCH 03/16] KVM: planes: Report KVM_MAX_PLANES from the system fd David Woodhouse
2026-11-11 22:28   ` [PATCH 04/16] KVM: Guard the per-plane KVM_SIGNAL_MSI cases with __KVM_HAVE_MSI David Woodhouse
2026-11-11 22:29   ` [PATCH 05/16] KVM: x86: Initialise Hyper-V state on every plane vCPU David Woodhouse
2026-11-11 22:29   ` [PATCH 06/16] KVM: x86: Widen the plane vCPU fd ioctl allowlist David Woodhouse
2026-11-11 22:29   ` [PATCH 07/16] KVM: x86/mmu: Free obsolete roots of all planes David Woodhouse
2026-11-11 22:29   ` [PATCH 08/16] KVM: planes: Publish a new plane only once KVM_CREATE_PLANE cannot fail David Woodhouse
2026-11-11 22:29   ` [PATCH 09/16] KVM: planes: Kick the running twin's pCPU, not the request target's David Woodhouse
2026-11-11 22:29   ` [PATCH 10/16] KVM: planes: Keep current_vcpu in sync in vcpu_load() David Woodhouse
2026-11-11 22:29   ` [PATCH 11/16] KVM: x86: Load each plane twin while updating it after KVM_SET_CPUID David Woodhouse
2026-11-11 22:29   ` [PATCH 12/16] KVM: VMX: Leave the IPIv PID-table entry to the plane 0 vCPU David Woodhouse
2026-11-11 22:29   ` [PATCH 13/16] KVM: x86: Leave TSC matching to the plane 0 vCPUs David Woodhouse
2026-11-11 22:29   ` [PATCH 14/16] KVM: x86: Derive runtime CPUID bits from the executing plane David Woodhouse
2026-11-11 22:29   ` [PATCH 15/16] KVM: planes: Annotate the lockless twin-publication protocol David Woodhouse
2026-11-11 22:29   ` [PATCH 16/16] KVM: SVM: Make KVM_REQ_VMSA_PAGE_RELOAD per plane David Woodhouse
2026-11-13  0:29   ` [PATCH 17/16] Documentation: kvm: Renumber KVM_CREATE_PLANE and restore the kvm_run label David Woodhouse
2026-11-13  0:29   ` [PATCH 18/16] KVM: SVM: Bound the SNP plane count by the architectural VMPL limit David Woodhouse
2026-11-13 18:25 ` [RFC PATCH 00/13] KVM: planes: Userspace API David Woodhouse
2026-11-13 18:25   ` David Woodhouse [this message]
2026-11-13 18:25   ` [RFC PATCH 02/13] KVM: selftests: Add VM plane infrastructure and tests David Woodhouse
2026-11-13 18:25   ` [RFC PATCH 03/13] KVM: selftests: Add x86 planes lifecycle test David Woodhouse
2026-11-13 18:25   ` [RFC PATCH 04/13] KVM: Add KVM_GET/SET_PLANE_RUN_STATE vCPU ioctls David Woodhouse
2026-11-13 18:25   ` [RFC PATCH 05/13] KVM: selftests: Cover plane run-state ioctls in planes_test David Woodhouse
2026-11-13 18:26   ` [RFC PATCH 06/13] KVM: planes: Fan out per-plane requests to twin vCPUs David Woodhouse
2026-11-13 18:26   ` [RFC PATCH 07/13] KVM: x86: Inhibit APICv when VM planes are enabled David Woodhouse
2026-11-13 18:26   ` [RFC PATCH 08/13] KVM: planes: Enlarge every twin's fpstate for dynamic xfeatures David Woodhouse
2026-11-13 18:26   ` [RFC PATCH 09/13] KVM: x86: Let userspace choose state for plane twins to share David Woodhouse
2026-11-13 18:26   ` [RFC PATCH 10/13] KVM: planes: Let plane twins share XCR0 David Woodhouse
2026-11-13 18:26   ` [RFC PATCH 11/13] KVM: planes: Let plane twins share DR6 David Woodhouse
2026-11-13 18:26   ` [RFC PATCH 12/13] KVM: selftests: Check CPUID handling of plane twins David Woodhouse
2026-11-13 18:26   ` [RFC PATCH 13/13] KVM: selftests: Cover plane state sharing David Woodhouse

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=20261113182607.82813-2-dwmw2@infradead.org \
    --to=dwmw2@infradead.org \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=anelkz@amazon.de \
    --cc=ashish.kalra@amd.com \
    --cc=coconut-svsm@lists.linux.dev \
    --cc=dwmw@amazon.co.uk \
    --cc=hmushi@amazon.co.uk \
    --cc=huibo.wang@amd.com \
    --cc=joerg.roedel@amd.com \
    --cc=joro@8bytes.org \
    --cc=kvm-riscv@lists.infradead.org \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=loongarch@lists.linux.dev \
    --cc=michael.roth@amd.com \
    --cc=nsaenz@amazon.com \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    --cc=snambakam@linux.microsoft.com \
    --cc=thomas.lendacky@amd.com \
    --cc=x86@kernel.org \
    /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

all inboxes | Powered by JetHome®