From nobody Tue Feb 10 01:20:03 2026 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A1BFB255F34; Fri, 2 May 2025 13:08:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746191327; cv=none; b=XY08t6ls7qQzyqY79rpiivraBn5LeRZVkbw+Eu59q8S8bL93yNPDl181QKsuGgtgNrpWcnJX/fs5mxDaoYav2aTq2WvMqwNrug8gaQmp/ucU+rgdhOlZfLZuNExFtsF6ZQeV4X9CU6fu7KZDo0S+16ioOHIcmnNE9eAVrL7+oOU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746191327; c=relaxed/simple; bh=WpMLEMIa0sSO19qSA7DLFIJ7BdXR/BIZhnHX4GL9a7s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c3Aq+6T39A4KMump8JGpQnnaXB1fo8BZBl4bcZkcw6f31onS4aIV+HRWxlfP5vqUtu/epJ9wRcSu3QQWa8YYbaIraW7pXtkMHu8jLGlfWK4q65Hs1iESViT+oc34iLIdCH2zx+de7r2Nh7wZb8K6Gx2BlkQuRSrKp1FcWIk8hww= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.helo=mgamail.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=QKmvliSg; arc=none smtp.client-ip=198.175.65.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.helo=mgamail.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="QKmvliSg" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1746191325; x=1777727325; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=WpMLEMIa0sSO19qSA7DLFIJ7BdXR/BIZhnHX4GL9a7s=; b=QKmvliSgx9ztXJLd+pSPN+P1swqoYPvNoHgd7wmEpdFYm433D6JVMEzv /Y80+yE26iovMtiOdiZExeAjAuoAoBrkwgEsZXPQyfcZV1ZsQ/p0k4IWv vaxGSOC9SK0PAUgy5m6FooGtaljbaghUpoxBQSGETA1d59r/wyNe0ody/ 4ZT6hMVEdAsd+ri25VN1lQsberW59nge2kSYmuaIAQ7bPbM29ZWOn16jB j/Vwl2rSfdyyu80ruHerzTfcP7ZZPPUyyzffqUY5wvMqXA4kUDiRHc/o7 WGeWx142fNBirj5cU6dJOeh3fe77UKaO967iJG08x/Un6Zin/SJKaVkaF A==; X-CSE-ConnectionGUID: CShqPHvmTK6FBPd8oLkxSg== X-CSE-MsgGUID: +4oyVmvJQv6Ww11nZrau7Q== X-IronPort-AV: E=McAfee;i="6700,10204,11421"; a="48012978" X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="48012978" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2025 06:08:45 -0700 X-CSE-ConnectionGUID: iB9ZE6uCTBSfLjMNuHdmFw== X-CSE-MsgGUID: sufZPuJYRA61EPn5SPwXTg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.15,256,1739865600"; d="scan'208";a="157871084" Received: from black.fi.intel.com ([10.237.72.28]) by fmviesa002.fm.intel.com with ESMTP; 02 May 2025 06:08:41 -0700 Received: by black.fi.intel.com (Postfix, from userid 1000) id 589A1260; Fri, 02 May 2025 16:08:36 +0300 (EEST) From: "Kirill A. Shutemov" To: pbonzini@redhat.com, seanjc@google.com Cc: rick.p.edgecombe@intel.com, isaku.yamahata@intel.com, kai.huang@intel.com, yan.y.zhao@intel.com, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, kvm@vger.kernel.org, x86@kernel.org, linux-coco@lists.linux.dev, linux-kernel@vger.kernel.org, "Kirill A. Shutemov" Subject: [RFC, PATCH 06/12] KVM: TDX: Allocate PAMT memory in __tdx_td_init() Date: Fri, 2 May 2025 16:08:22 +0300 Message-ID: <20250502130828.4071412-7-kirill.shutemov@linux.intel.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250502130828.4071412-1-kirill.shutemov@linux.intel.com> References: <20250502130828.4071412-1-kirill.shutemov@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allocate PAMT memory for TDH.MNG.CREATE and TDH.MNG.ADDCX. PAMT memory that is associated with pages successfully added to the TD with TDH.MNG.ADDCX will be removed in tdx_reclaim_page() on tdx_reclaim_control_page(). Signed-off-by: Kirill A. Shutemov --- arch/x86/kvm/vmx/tdx.c | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c index ea7e2d93fb44..59bbae2df485 100644 --- a/arch/x86/kvm/vmx/tdx.c +++ b/arch/x86/kvm/vmx/tdx.c @@ -399,6 +399,31 @@ static void tdx_pamt_put(struct page *page) tdx_free_pamt_pages(&pamt_pages); } =20 +static struct page *tdx_alloc_page(void) +{ + struct page *page; + + page =3D alloc_page(GFP_KERNEL); + if (!page) + return NULL; + + if (tdx_pamt_get(page)) { + __free_page(page); + return NULL; + } + + return page; +} + +static void tdx_free_page(struct page *page) +{ + if (!page) + return; + + tdx_pamt_put(page); + __free_page(page); +} + static void tdx_clear_page(struct page *page) { const void *zero_page =3D (const void *) page_to_virt(ZERO_PAGE(0)); @@ -2499,7 +2524,7 @@ static int __tdx_td_init(struct kvm *kvm, struct td_p= arams *td_params, =20 atomic_inc(&nr_configured_hkid); =20 - tdr_page =3D alloc_page(GFP_KERNEL); + tdr_page =3D tdx_alloc_page(); if (!tdr_page) goto free_hkid; =20 @@ -2512,7 +2537,7 @@ static int __tdx_td_init(struct kvm *kvm, struct td_p= arams *td_params, goto free_tdr; =20 for (i =3D 0; i < kvm_tdx->td.tdcs_nr_pages; i++) { - tdcs_pages[i] =3D alloc_page(GFP_KERNEL); + tdcs_pages[i] =3D tdx_alloc_page(); if (!tdcs_pages[i]) goto free_tdcs; } @@ -2633,10 +2658,8 @@ static int __tdx_td_init(struct kvm *kvm, struct td_= params *td_params, teardown: /* Only free pages not yet added, so start at 'i' */ for (; i < kvm_tdx->td.tdcs_nr_pages; i++) { - if (tdcs_pages[i]) { - __free_page(tdcs_pages[i]); - tdcs_pages[i] =3D NULL; - } + tdx_free_page(tdcs_pages[i]); + tdcs_pages[i] =3D NULL; } if (!kvm_tdx->td.tdcs_pages) kfree(tdcs_pages); @@ -2652,15 +2675,13 @@ static int __tdx_td_init(struct kvm *kvm, struct td= _params *td_params, =20 free_tdcs: for (i =3D 0; i < kvm_tdx->td.tdcs_nr_pages; i++) { - if (tdcs_pages[i]) - __free_page(tdcs_pages[i]); + tdx_free_page(tdcs_pages[i]); } kfree(tdcs_pages); kvm_tdx->td.tdcs_pages =3D NULL; =20 free_tdr: - if (tdr_page) - __free_page(tdr_page); + tdx_free_page(tdr_page); kvm_tdx->td.tdr_page =3D 0; =20 free_hkid: --=20 2.47.2