From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9323334FF4C for ; Thu, 29 Jan 2026 01:16:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769649390; cv=none; b=PCVO+WqearYdO6GA/ag4eaOqT0DU74eGE0aHbCcScuPM4dfz4jMYWVh+1DJ3t6X500w0OqRqWuD+K40/lczd2ddslnwEkeV4yy1dsgF8CjkqdZSWUL9kdWBWhAe9flJwTUmE4PP7Y1lCRWYGMt/ZJYhdPuuw13fpsOOl2+51520= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769649390; c=relaxed/simple; bh=ZKA4gxILOiT4uKjve2aBLdSG8+EEE+GNTcKmwrKf7To=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=LntJah/oAkjyla0P3N0Eu6oVxguh7giOdPsEKTVCnmF/gb0C8ajCzWeCWOwzKycgaDLDOKkMxPZYk+O1lVITNTU/Ti2zAWzv3QiO5rT1r+0yK4FXflK7ii89yww356KxswR7PZQzlW8gu41YSwI9ub3E9hhIaReYuWls7pAOGp0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=NC4QIUKT; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--seanjc.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="NC4QIUKT" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-353049e6047so276388a91.3 for ; Wed, 28 Jan 2026 17:16:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769649388; x=1770254188; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:from:to:cc:subject:date:message-id:reply-to; bh=jjjDLQ+c4+Lcjknb+8jLsLWn/cseIOYcFr4v4eW8m5k=; b=NC4QIUKT9OHAZxtFzJ+FKwpjdsP3az5tl+Zwvpt0ZSbXiTsFVu3nbAF+ucbfcz4YSz ZJPF9o3FMcfZH+cRnrG1tonsNqzeQ0b2j/0xZEPPKp31F2sVYR4fvCS+6m3AtKNyhIm8 UfMMIGuho3pvuSI7iRMx0cPCn75Tk/3kRbZSjFa6f5xl1FbpLv0AsTljd4/JzAahR4ik tN7NXoc4J1FeLZb+3ThvAEQORtf7+hLywaZCSl4xC/b0h0EYPIOWVHFW1bxOGnef4nr3 Yd6f9ojbkieMPFwuUhM3guztSe25wsSeHNEyNkge2NVLdTmb8rtvQHrchNkmV4eRQb2g 0BbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769649388; x=1770254188; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:reply-to:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=jjjDLQ+c4+Lcjknb+8jLsLWn/cseIOYcFr4v4eW8m5k=; b=w0F4HNPZQrNtQSSUDVY21mnIh7aU74Xv9CpLggV0Zep3QNbl/D/q+XVjaLBbssF1yt 1SR2JAFpBjidtXPy9D7saAhE3bQcHNsx64VycAhxr1f9O32LiA/qjyVpxsI3+ya0kkHB AHMsiNcVTYmIId5jvDY81ara85aOoLNLXXFtGigfYzNHr2rC+UGPuAxJ3iBIRMjS5VKV AJ7plSNPCLSnnPMtJCzm3infqA4Bw3g8CpkeiD/EgpywI9Hbzm5lulEm4J1ClLkK+L6m 4QpIlVipJmNNCyfcxBm3hl5XpHkHnZf2L2uGn535TrA1c6GVJOgx7hVvj+Qyw1XSML5L HoUQ== X-Forwarded-Encrypted: i=1; AJvYcCVxnTCevo66rG8t/11xCigi9JDXpeaYjSQKGAGDXBucw2JhrYnti/97hypv31IsA+e5xkhCtZVPIUqV@lists.linux.dev X-Gm-Message-State: AOJu0YwQ6H7Ni8UIC6lQ1/PSWq7xAdCrEm5xvVbtJti3+nTm2uwYqVr3 5yiVkw+IYPI3bjTV+nmNZ+EbxeKiSdls1vFhctiPg0U0I0rpjjgfx6Ztmoo0sUGpekstta3CZzP CYDC5rQ== X-Received: from pjboj17.prod.google.com ([2002:a17:90b:4d91:b0:34c:2f52:23aa]) (user=seanjc job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2888:b0:343:c3d1:8bb1 with SMTP id 98e67ed59e1d1-353fed9b231mr5381792a91.28.1769649388060; Wed, 28 Jan 2026 17:16:28 -0800 (PST) Reply-To: Sean Christopherson Date: Wed, 28 Jan 2026 17:15:04 -0800 In-Reply-To: <20260129011517.3545883-1-seanjc@google.com> Precedence: bulk X-Mailing-List: linux-coco@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260129011517.3545883-1-seanjc@google.com> X-Mailer: git-send-email 2.53.0.rc1.217.geba53bf80e-goog Message-ID: <20260129011517.3545883-33-seanjc@google.com> Subject: [RFC PATCH v5 32/45] KVM: x86/mmu: Plumb the old_spte into kvm_x86_ops.set_external_spte() From: Sean Christopherson To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Kiryl Shutsemau , Sean Christopherson , Paolo Bonzini Cc: linux-kernel@vger.kernel.org, linux-coco@lists.linux.dev, kvm@vger.kernel.org, Kai Huang , Rick Edgecombe , Yan Zhao , Vishal Annapurve , Ackerley Tng , Sagi Shahar , Binbin Wu , Xiaoyao Li , Isaku Yamahata Content-Type: text/plain; charset="UTF-8" Plumb the old SPTE into .set_external_spte() so that the callback can be used to handle removal and splitting of leaf SPTEs. Rename mirror_spte to new_spte to follow the TDP MMU's naming, and to make it more obvious what value the parameter holds. Opportunistically tweak the ordering of parameters to match the pattern of most TDP MMU functions, which do "old, new, level". Signed-off-by: Sean Christopherson --- arch/x86/include/asm/kvm_host.h | 4 ++-- arch/x86/kvm/mmu/tdp_mmu.c | 4 ++-- arch/x86/kvm/vmx/tdx.c | 14 +++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index a6e4ab76b1b2..67deec8e205e 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -1857,8 +1857,8 @@ struct kvm_x86_ops { */ unsigned long (*alloc_external_sp)(gfp_t gfp); void (*free_external_sp)(unsigned long addr); - int (*set_external_spte)(struct kvm *kvm, gfn_t gfn, enum pg_level level, - u64 mirror_spte); + int (*set_external_spte)(struct kvm *kvm, gfn_t gfn, u64 old_spte, + u64 new_spte, enum pg_level level); void (*reclaim_external_sp)(struct kvm *kvm, gfn_t gfn, struct kvm_mmu_page *sp); void (*remove_external_spte)(struct kvm *kvm, gfn_t gfn, enum pg_level level, diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c index f8ebdd0c6114..271dd6f875a6 100644 --- a/arch/x86/kvm/mmu/tdp_mmu.c +++ b/arch/x86/kvm/mmu/tdp_mmu.c @@ -614,8 +614,8 @@ static inline int __must_check __tdp_mmu_set_spte_atomic(struct kvm *kvm, * the desired value. On failure, restore the old SPTE so that * the SPTE isn't frozen in perpetuity. */ - ret = kvm_x86_call(set_external_spte)(kvm, iter->gfn, - iter->level, new_spte); + ret = kvm_x86_call(set_external_spte)(kvm, iter->gfn, iter->old_spte, + new_spte, iter->level); if (ret) __kvm_tdp_mmu_write_spte(iter->sptep, iter->old_spte); else diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c index bd5d902da303..e451acdb0978 100644 --- a/arch/x86/kvm/vmx/tdx.c +++ b/arch/x86/kvm/vmx/tdx.c @@ -1705,29 +1705,29 @@ static int tdx_sept_link_private_spt(struct kvm *kvm, gfn_t gfn, return 0; } -static int tdx_sept_set_private_spte(struct kvm *kvm, gfn_t gfn, - enum pg_level level, u64 mirror_spte) +static int tdx_sept_set_private_spte(struct kvm *kvm, gfn_t gfn, u64 old_spte, + u64 new_spte, enum pg_level level) { struct kvm_vcpu *vcpu = kvm_get_running_vcpu(); struct kvm_tdx *kvm_tdx = to_kvm_tdx(kvm); - kvm_pfn_t pfn = spte_to_pfn(mirror_spte); + kvm_pfn_t pfn = spte_to_pfn(new_spte); struct vcpu_tdx *tdx = to_tdx(vcpu); int ret; if (KVM_BUG_ON(!vcpu, kvm)) return -EINVAL; - if (KVM_BUG_ON(!is_shadow_present_pte(mirror_spte), kvm)) + if (KVM_BUG_ON(!is_shadow_present_pte(new_spte), kvm)) return -EIO; - if (!is_last_spte(mirror_spte, level)) - return tdx_sept_link_private_spt(kvm, gfn, level, mirror_spte); + if (!is_last_spte(new_spte, level)) + return tdx_sept_link_private_spt(kvm, gfn, level, new_spte); /* TODO: handle large pages. */ if (KVM_BUG_ON(level != PG_LEVEL_4K, kvm)) return -EIO; - WARN_ON_ONCE((mirror_spte & VMX_EPT_RWX_MASK) != VMX_EPT_RWX_MASK); + WARN_ON_ONCE((new_spte & VMX_EPT_RWX_MASK) != VMX_EPT_RWX_MASK); ret = tdx_pamt_get(pfn, level, &tdx->pamt_cache); if (ret) -- 2.53.0.rc1.217.geba53bf80e-goog