Allocate the hashed list of shadow pages dynamically (separate from struct kvm), and on-demand. The hashed list is 32KiB, i.e. absolutely belongs in a separate allocation, and is worth skipping if KVM isn't shadowing guest PTEs for the VM. I double checked that padding kvm_arch with a 4KiB array trips the assert, but padding with 2KiB does not. So knock on wood, I finally got the assert right. Maybe. v4: - Use smp_store_release() and smp_load_acquire() instead of {READ,WRITE}_ONCE, and update the comments accordingly. [Paolo, James] - Move the kvm_tdx assert to tdx.c. [Paolo] - Fix the assertion, again. [Vipin, in spirit if not in reality] - Add a patch to move TDX hardware setup to tdx.c. v3: - https://lore.kernel.org/all/20250516215422.2550669-1-seanjc@xxxxxxxxxx - Add comments explaining the {READ,WRITE}_ONCE logic, and why it's safe to set the list outside of mmu_lock. [Vipin] - Make the assertions actually work. [Vipin] - Refine the assertions so they (hopefully) won't fail on kernels with a bunch of debug crud added. v2: - https://lore.kernel.org/all/20250401155714.838398-1-seanjc@xxxxxxxxxx - Actually defer allocation when using TDP MMU. [Vipin] - Free allocation on MMU teardown. [Vipin] v1: https://lore.kernel.org/all/20250315024010.2360884-1-seanjc@xxxxxxxxxx Sean Christopherson (4): KVM: TDX: Move TDX hardware setup from main.c to tdx.c KVM: x86/mmu: Dynamically allocate shadow MMU's hashed page list KVM: x86: Use kvzalloc() to allocate VM struct KVM: x86/mmu: Defer allocation of shadow MMU's hashed page list arch/x86/include/asm/kvm_host.h | 6 +-- arch/x86/kvm/mmu/mmu.c | 75 ++++++++++++++++++++++++++++++--- arch/x86/kvm/svm/svm.c | 2 + arch/x86/kvm/vmx/main.c | 36 +--------------- arch/x86/kvm/vmx/tdx.c | 47 +++++++++++++++------ arch/x86/kvm/vmx/tdx.h | 1 + arch/x86/kvm/vmx/vmx.c | 2 + arch/x86/kvm/vmx/x86_ops.h | 10 ----- arch/x86/kvm/x86.c | 5 ++- arch/x86/kvm/x86.h | 22 ++++++++++ 10 files changed, 139 insertions(+), 67 deletions(-) base-commit: 3f7b307757ecffc1c18ede9ee3cf9ce8101f3cc9 -- 2.49.0.1151.ga128411c76-goog