[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251017003244.186495-1-seanjc@google.com>
Date: Thu, 16 Oct 2025 17:32:18 -0700
From: Sean Christopherson <seanjc@...gle.com>
To: Marc Zyngier <maz@...nel.org>, Oliver Upton <oliver.upton@...ux.dev>,
Tianrui Zhao <zhaotianrui@...ngson.cn>, Bibo Mao <maobibo@...ngson.cn>,
Huacai Chen <chenhuacai@...nel.org>, Madhavan Srinivasan <maddy@...ux.ibm.com>,
Anup Patel <anup@...infault.org>, Paul Walmsley <pjw@...nel.org>,
Palmer Dabbelt <palmer@...belt.com>, Albert Ou <aou@...s.berkeley.edu>,
Christian Borntraeger <borntraeger@...ux.ibm.com>, Janosch Frank <frankja@...ux.ibm.com>,
Claudio Imbrenda <imbrenda@...ux.ibm.com>, Sean Christopherson <seanjc@...gle.com>,
Paolo Bonzini <pbonzini@...hat.com>, "Kirill A. Shutemov" <kas@...nel.org>
Cc: linux-arm-kernel@...ts.infradead.org, kvmarm@...ts.linux.dev,
kvm@...r.kernel.org, loongarch@...ts.linux.dev, linux-mips@...r.kernel.org,
linuxppc-dev@...ts.ozlabs.org, kvm-riscv@...ts.infradead.org,
linux-riscv@...ts.infradead.org, x86@...nel.org, linux-coco@...ts.linux.dev,
linux-kernel@...r.kernel.org, Ira Weiny <ira.weiny@...el.com>,
Kai Huang <kai.huang@...el.com>, Michael Roth <michael.roth@....com>,
Yan Zhao <yan.y.zhao@...el.com>, Vishal Annapurve <vannapurve@...gle.com>,
Rick Edgecombe <rick.p.edgecombe@...el.com>, Ackerley Tng <ackerleytng@...gle.com>,
Binbin Wu <binbin.wu@...ux.intel.com>
Subject: [PATCH v3 00/25] KVM: x86/mmu: TDX post-populate cleanups
Non-x86 folks, patches 1 and 2 are likely the only thing of interest here.
They make kvm_arch_vcpu_async_ioctl() mandatory and then rename it to
kvm_arch_vcpu_unlocked_ioctl(). Hopefully they're boring?
As for the x86 side...
Clean up the TDX post-populate paths (and many tangentially related paths) to
address locking issues between gmem and TDX's post-populate hook[*], and
within KVM itself (KVM doesn't ensure full mutual exclusivity between paths
that for all intents and purposes the TDX-Module requires to be serialized).
Compile tested only again on my end, but Rick and Yan took v2 for a spin, so I
dropped the RFC.
[*] http://lore.kernel.org/all/aG_pLUlHdYIZ2luh@google.com
v3:
- Collect more reviews.
- Add the async_ioctl() => unlocked_ioctl() patches, and use the "unlocked"
variant in the TDX vCPU sub-ioctls so they can take kvm->lock outside of
vcpu->mutex.
- Add a patch to document that vcpu->mutex is taken *outside* kvm->slots_lock.
- Add the tdx_vm_state_guard CLASS() to take kvm->lock, all vcpu->mutex locks,
and kvm->slots_lock, in order to make tdx_td_init(), tdx_td_finalize(),
tdx_vcpu_init_mem_region(), and tdx_vcpu_init() mutually exclusive with
each other, and mutually exclusvie with basically anything that can result
in contending one of the TDX-Module locks (can't remember which one).
- Refine the changelog for the "Drop PROVE_MMU=y" patch. [Binbin]
v2:
- Collect a few reviews (and ignore some because the patches went away).
[Rick, Kai, Ira]
- Move TDH_MEM_PAGE_ADD under mmu_lock and drop nr_premapped. [Yan, Rick]
- Force max_level = PG_LEVEL_4K straightaway. [Yan]
- s/kvm_tdp_prefault_page/kvm_tdp_page_prefault. [Rick]
- Use Yan's version of "Say no to pinning!". [Yan, Rick]
- Tidy up helpers and macros to reduce boilerplate and copy+pate code, and
to eliminate redundant/dead code (e.g. KVM_BUG_ON() the same error
multiple times).
- KVM_BUG_ON() if TDH_MR_EXTEND fails (I convinced myself it can't).
v1: https://lore.kernel.org/all/20250827000522.4022426-1-seanjc@google.com
Sean Christopherson (23):
KVM: Make support for kvm_arch_vcpu_async_ioctl() mandatory
KVM: Rename kvm_arch_vcpu_async_ioctl() to
kvm_arch_vcpu_unlocked_ioctl()
KVM: TDX: Drop PROVE_MMU=y sanity check on to-be-populated mappings
KVM: x86/mmu: Add dedicated API to map guest_memfd pfn into TDP MMU
Revert "KVM: x86/tdp_mmu: Add a helper function to walk down the TDP
MMU"
KVM: x86/mmu: Rename kvm_tdp_map_page() to kvm_tdp_page_prefault()
KVM: TDX: Return -EIO, not -EINVAL, on a KVM_BUG_ON() condition
KVM: TDX: Fold tdx_sept_drop_private_spte() into
tdx_sept_remove_private_spte()
KVM: x86/mmu: Drop the return code from
kvm_x86_ops.remove_external_spte()
KVM: TDX: Avoid a double-KVM_BUG_ON() in tdx_sept_zap_private_spte()
KVM: TDX: Use atomic64_dec_return() instead of a poor equivalent
KVM: TDX: Fold tdx_mem_page_record_premap_cnt() into its sole caller
KVM: TDX: Bug the VM if extended the initial measurement fails
KVM: TDX: ADD pages to the TD image while populating mirror EPT
entries
KVM: TDX: Fold tdx_sept_zap_private_spte() into
tdx_sept_remove_private_spte()
KVM: TDX: Combine KVM_BUG_ON + pr_tdx_error() into TDX_BUG_ON()
KVM: TDX: Derive error argument names from the local variable names
KVM: TDX: Assert that mmu_lock is held for write when removing S-EPT
entries
KVM: TDX: Add macro to retry SEAMCALLs when forcing vCPUs out of guest
KVM: TDX: Add tdx_get_cmd() helper to get and validate sub-ioctl
command
KVM: TDX: Convert INIT_MEM_REGION and INIT_VCPU to "unlocked" vCPU
ioctl
KVM: TDX: Use guard() to acquire kvm->lock in tdx_vm_ioctl()
KVM: TDX: Guard VM state transitions with "all" the locks
Yan Zhao (2):
KVM: TDX: Drop superfluous page pinning in S-EPT management
KVM: TDX: Fix list_add corruption during vcpu_load()
arch/arm64/kvm/arm.c | 6 +
arch/loongarch/kvm/Kconfig | 1 -
arch/loongarch/kvm/vcpu.c | 4 +-
arch/mips/kvm/Kconfig | 1 -
arch/mips/kvm/mips.c | 4 +-
arch/powerpc/kvm/Kconfig | 1 -
arch/powerpc/kvm/powerpc.c | 4 +-
arch/riscv/kvm/Kconfig | 1 -
arch/riscv/kvm/vcpu.c | 4 +-
arch/s390/kvm/Kconfig | 1 -
arch/s390/kvm/kvm-s390.c | 4 +-
arch/x86/include/asm/kvm-x86-ops.h | 1 +
arch/x86/include/asm/kvm_host.h | 5 +-
arch/x86/kvm/mmu.h | 3 +-
arch/x86/kvm/mmu/mmu.c | 66 ++-
arch/x86/kvm/mmu/tdp_mmu.c | 45 +-
arch/x86/kvm/vmx/main.c | 9 +
arch/x86/kvm/vmx/tdx.c | 638 ++++++++++++++---------------
arch/x86/kvm/vmx/tdx.h | 8 +-
arch/x86/kvm/vmx/x86_ops.h | 1 +
arch/x86/kvm/x86.c | 13 +
include/linux/kvm_host.h | 14 +-
virt/kvm/Kconfig | 3 -
virt/kvm/kvm_main.c | 6 +-
24 files changed, 422 insertions(+), 421 deletions(-)
base-commit: f222788458c8a7753d43befef2769cd282dc008e
--
2.51.0.858.gf9c4a03a3a-goog
Powered by blists - more mailing lists