From nobody Mon Feb 9 14:31:50 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 B1CC3364EB3 for ; Thu, 29 Jan 2026 01:16:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769649390; cv=none; b=l3otFZJ5GwWqru/0d2utUCmSvJnDaCI0zjArZq0EqrGbpGFV9N6y9m/qfmrdayBtUiRzEyV0HPP5NCNqBlnDcjrCE0d+d0CezP/LV11Bl9FaUA6oOJ5KuvU8BQJ+KRPb850WaNGmEcv3wq38x7aUJEnU0QwpPqmkUukafLbuitg= 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=hgqCWAGB; arc=none smtp.client-ip=209.85.216.74 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="hgqCWAGB" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-34e70e2e363so375385a91.1 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=vger.kernel.org; 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=hgqCWAGBoHQRtHlm3K3k4oVqB/Q+7jCPcLeHglUbNCia3HLJCxBlpgdaHI+a3nDtWT rwKjfCvk4/L818DaCzIyGDUk0/+OZM2l2wqRFVrI+TH6MLGncAKOvFN5i6AsWnLyYJOY haXn+z+Pma74CW+RuVNNHF7yiLHl2R2u4DAfaggIPU/EIEL5u7YwlFjSzhTFRvtfkeFt azmNhNfJaTxSfo4CLRjFucPdMzG3dtZBGS7idKe/wWRkXp+os1gqjmrJqCDhJoNtDDoX cVwS0oMuAlnr64sFWNfw9DkDcMS8rhiIy8J80Hs2NY9zMIxaxyQ/sQdvHerbAAFRVe9Z TG6Q== 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=Hu2dBNknvUWoPKtcpB998R5g24KuL6Ab2tVRGcnKDDoJpjILDNi4HvzmF7pTh333Fv gSGo2wysyYd+SD9IVzEBzJoXRZ8+dTL0RMOx8KH4Vg7WGXfIsZeGu97pt5fRTzXjxl/K CQ/neq27z5v5cBwprasxzdyMbbCf3/+E4VkOOCAdzB6Y36xaVNAT81vJcMjsdahya/9p GHueORJpAQJzKrTHBLYxl4ThMZ05a0QoBcyTDHuYb8Qa5KeeByzTW7wFOiCq0U3Nwmna 7ZctfhufxpTKah5zsxfxSoMQYJ0YLMhBSBlnb+CRfN0ps6jyIl6gjScM2S5mSvWIhpiq RcEw== X-Gm-Message-State: AOJu0YxQ61FjqdH6EJ/LqSTP9AHxrwJZMFv87ftYKlWpWgBb/wqFKCey /zhzIQvOS85OT5N9cVTyWqQmsvIE7vv3sSBVG6FNGK33y+bYvMi2V/O9gaIm+heDPzvxpY9TkmP qkLRRjg== 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-kernel@vger.kernel.org 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-Transfer-Encoding: quoted-printable 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_hos= t.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 le= vel, 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_atomi= c(struct kvm *kvm, * the desired value. On failure, restore the old SPTE so that * the SPTE isn't frozen in perpetuity. */ - ret =3D kvm_x86_call(set_external_spte)(kvm, iter->gfn, - iter->level, new_spte); + ret =3D 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 *kv= m, gfn_t gfn, return 0; } =20 -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_s= pte, + u64 new_spte, enum pg_level level) { struct kvm_vcpu *vcpu =3D kvm_get_running_vcpu(); struct kvm_tdx *kvm_tdx =3D to_kvm_tdx(kvm); - kvm_pfn_t pfn =3D spte_to_pfn(mirror_spte); + kvm_pfn_t pfn =3D spte_to_pfn(new_spte); struct vcpu_tdx *tdx =3D to_tdx(vcpu); int ret; =20 if (KVM_BUG_ON(!vcpu, kvm)) return -EINVAL; =20 - if (KVM_BUG_ON(!is_shadow_present_pte(mirror_spte), kvm)) + if (KVM_BUG_ON(!is_shadow_present_pte(new_spte), kvm)) return -EIO; =20 - 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); =20 /* TODO: handle large pages. */ if (KVM_BUG_ON(level !=3D PG_LEVEL_4K, kvm)) return -EIO; =20 - WARN_ON_ONCE((mirror_spte & VMX_EPT_RWX_MASK) !=3D VMX_EPT_RWX_MASK); + WARN_ON_ONCE((new_spte & VMX_EPT_RWX_MASK) !=3D VMX_EPT_RWX_MASK); =20 ret =3D tdx_pamt_get(pfn, level, &tdx->pamt_cache); if (ret) --=20 2.53.0.rc1.217.geba53bf80e-goog