From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9DDB7C001DD for ; Wed, 5 Jul 2023 06:49:31 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2A0E88D0001; Wed, 5 Jul 2023 02:49:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 22A576B0072; Wed, 5 Jul 2023 02:49:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0CC0F8D0001; Wed, 5 Jul 2023 02:49:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id EF3666B0071 for ; Wed, 5 Jul 2023 02:49:30 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id A42B180905 for ; Wed, 5 Jul 2023 06:49:30 +0000 (UTC) X-FDA: 80976632100.10.8672D5B Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by imf19.hostedemail.com (Postfix) with ESMTP id 2A30C1A0011 for ; Wed, 5 Jul 2023 06:49:27 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="T/hnQa9F"; dmarc=pass (policy=none) header.from=intel.com; spf=none (imf19.hostedemail.com: domain of yuan.yao@linux.intel.com has no SPF policy when checking 134.134.136.20) smtp.mailfrom=yuan.yao@linux.intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1688539768; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=WAaqArX6CoR6cG/+80B7G25Lmeh4RZL5k+rwU0vGbBw=; b=dpqTpV2mPepex4jtv7PzAs5pCeuprBPGpqTYB2SSFBYuSCcpwYDRIWToIiJ+e06mToHL2v hYFmii2N2nB2WJI0tYfxEx52FFBVdpYoC/qml/aJTCfwQA7cmkAZzjnIpNSkQBjosPDnVp UfNJ7ST8QL3S93xWqDjf+USzAE6eeq4= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b="T/hnQa9F"; dmarc=pass (policy=none) header.from=intel.com; spf=none (imf19.hostedemail.com: domain of yuan.yao@linux.intel.com has no SPF policy when checking 134.134.136.20) smtp.mailfrom=yuan.yao@linux.intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1688539768; a=rsa-sha256; cv=none; b=lMJ1wCQZG9hf2PXtE8DFZ4erlgbTd236P4XmVKHF4KhwnCqhJEcJSliA30eE/OYsNnx4iJ uyCf6+h5WFEiY88r6pHzeCdsfk3hJv/bfbAN+vqptnTm9D0OeXKV1jtUk0zDayL7Gj3f/E uTOkTInNxB5F4RskjAOmIgqQ/jvf79k= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1688539768; x=1720075768; h=date:from:to:cc:subject:message-id:references: mime-version:in-reply-to; bh=TlI3CJyZkfplORXdOj9BwhzuYizpl4qib4+3VTIeKgU=; b=T/hnQa9Fm0xR3lM8iP1tG/B0raBazFKCp0qPkJjbj8ztzZtJzwkolwkr gWEa+lr3CRIyr8QgluvwklSPsFZsZtdPJgUQ1Cac6vfLnXTtRbtUtJsXn X3m0SBJqLntIG5wH48RTVauvuXFZZn/frxkl0dXAGcloUAqv9EVbwbdsm Wjpw8dS1yNCv0aRUwwldJl/j/NxoS/q0cocekhPrh94DVw5EH/2tY4pb6 ijzMe6XE3GkuWBErkdKd8zR2hqjEnGOqC5vLqcf32CyOzL+1Znhs+JP47 GbwN0dkg6jRWpZ0LkBaGagGrGAJJMAIVh2MPCgo8EFoWbXgBaSDKj1Q2z A==; X-IronPort-AV: E=McAfee;i="6600,9927,10761"; a="353094390" X-IronPort-AV: E=Sophos;i="6.01,182,1684825200"; d="scan'208";a="353094390" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Jul 2023 23:49:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10761"; a="1049598121" X-IronPort-AV: E=Sophos;i="6.01,182,1684825200"; d="scan'208";a="1049598121" Received: from yy-desk-7060.sh.intel.com (HELO localhost) ([10.239.159.76]) by fmsmga005.fm.intel.com with ESMTP; 04 Jul 2023 23:49:19 -0700 Date: Wed, 5 Jul 2023 14:49:19 +0800 From: Yuan Yao To: Kai Huang Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org, dave.hansen@intel.com, kirill.shutemov@linux.intel.com, tony.luck@intel.com, peterz@infradead.org, tglx@linutronix.de, bp@alien8.de, mingo@redhat.com, hpa@zytor.com, seanjc@google.com, pbonzini@redhat.com, david@redhat.com, dan.j.williams@intel.com, rafael.j.wysocki@intel.com, ashok.raj@intel.com, reinette.chatre@intel.com, len.brown@intel.com, ak@linux.intel.com, isaku.yamahata@intel.com, ying.huang@intel.com, chao.gao@intel.com, sathyanarayanan.kuppuswamy@linux.intel.com, nik.borisov@suse.com, bagasdotme@gmail.com, sagis@google.com, imammedo@redhat.com Subject: Re: [PATCH v12 14/22] x86/virt/tdx: Configure TDX module with the TDMRs and global KeyID Message-ID: <20230705064919.e774z63uxbjw2vmt@yy-desk-7060> References: <0978700f954d311a5580b746ec44124d1cb65c28.1687784645.git.kai.huang@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <0978700f954d311a5580b746ec44124d1cb65c28.1687784645.git.kai.huang@intel.com> User-Agent: NeoMutt/20171215 X-Rspamd-Queue-Id: 2A30C1A0011 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: d6ahqor7syqprwf5bfimbwcm6f1de9t1 X-HE-Tag: 1688539767-524017 X-HE-Meta: U2FsdGVkX1+/J/9m3egko9qDU1Stj+b7rqFxWhYe7ACKi4NnvrCH5u/+E3TBDogZs2MJC12IVcPYBfyDbK6fhrh/+EbWKJODAfwlIbzwuCdUlzyNI4er1kJW8qDMYYZGSE7EPLIgsYxAMJii289n5mcfJA0KUcMZd95rTPzkf1MCo3FjTogrZceXZUVHsl39Mu73hBCIq2RF5xMlfh0zgm1d2N9vtezPuAL1grNym1K3E5qyClBZc7r+gklAUslYfzLpT0/6FXO6fxpivgvFumOiMpajgY6eCo3dOCKnIVoZVgThr8Wz2WMdCnfh2o5LJSwpbE7OqN1QtZ+ueAyl3NMCrLtTP8UzvGp8D3ePIb+exi2Zdi+TuKAMq43cW7HyaRieb1ymhCcBohCL7cC5VNBZVr9UqVU7CzrLRUTiYHtQp3fNqgKafRbN4YSfP3sZ7Y6GDeQPrSBJBGLJmisuBfSChYFjrdQHLKAD+E8R3cdRsFKmLTRYP0vjZA/UhKmNejuKPZIF2rRiBauUWZzRt3RE45q4zBbDIYrImPRtILg3xq3sn8xCOwHZ2DmomYhmFEm7PPUFyfrF3ULsS3B5MztZtRKmDLHuKBM0QfFThcyVkGJy90M2/zKMo/0z6mXqJOlXh5fRbJSsdDdEOyg0bQo2w/SiZ5LBv2ai6fDIgkg6b/T6YCRnRCBKtJG5WCa4+1n+hd7PDlNXbo4rTu0U1kCcYobC6MSa9DqdckAkXyVX5tD3WQiJ1zYAv2RrcQabMmwFIIG4Nml4ntv8t1I/HNU1EMqwC+fwX07+PRIAZbqUiz6c71uM6J1PWfjEVCvyjC4YISF0XSaw8iTD0JAGqCoOFW8pCn4dpX50Ao3g37P8kGPsnmjEpBK/XmYjk2tKF8HCXst2cG05gwVzAbry7FIvO7RWk6Erk1zKa9cWQA+1swl8sAGnGjaSz6WWBF6yTiIVEb5VAPQ1RKzhHBu +BuCxkLL RW1jDbE+s7XoW/R44fZSQX9feRzbb2p+qEX8egw/alSkUx5JrkcTga/c3b7rrFllHJEd1esf7RAuc0JJrwt+SaF6xfbt7BfpwHRDvenVBYIkk/EC5l25oyYcMbQIh9s3RoWIrBXs64XPjhYnwLBVXVfFI3w== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue, Jun 27, 2023 at 02:12:44AM +1200, Kai Huang wrote: > The TDX module uses a private KeyID as the "global KeyID" for mapping > things like the PAMT and other TDX metadata. This KeyID has already > been reserved when detecting TDX during the kernel early boot. > > After the list of "TD Memory Regions" (TDMRs) has been constructed to > cover all TDX-usable memory regions, the next step is to pass them to > the TDX module together with the global KeyID. Reviewed-by: Yuan Yao > > Signed-off-by: Kai Huang > Reviewed-by: Isaku Yamahata > Reviewed-by: Kirill A. Shutemov > --- > > v11 -> v12: > - Added Kirill's tag > > v10 -> v11: > - No update > > v9 -> v10: > - Code change due to change static 'tdx_tdmr_list' to local 'tdmr_list'. > > v8 -> v9: > - Improved changlog to explain why initializing TDMRs can take long > time (Dave). > - Improved comments around 'next-to-initialize' address (Dave). > > v7 -> v8: (Dave) > - Changelog: > - explicitly call out this is the last step of TDX module initialization. > - Trimed down changelog by removing SEAMCALL name and details. > - Removed/trimmed down unnecessary comments. > - Other changes due to 'struct tdmr_info_list'. > > v6 -> v7: > - Removed need_resched() check. -- Andi. > > > --- > arch/x86/virt/vmx/tdx/tdx.c | 41 ++++++++++++++++++++++++++++++++++++- > arch/x86/virt/vmx/tdx/tdx.h | 2 ++ > 2 files changed, 42 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/virt/vmx/tdx/tdx.c b/arch/x86/virt/vmx/tdx/tdx.c > index 2bcace5cb25c..1992245290de 100644 > --- a/arch/x86/virt/vmx/tdx/tdx.c > +++ b/arch/x86/virt/vmx/tdx/tdx.c > @@ -26,6 +26,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -864,6 +865,39 @@ static int construct_tdmrs(struct list_head *tmb_list, > return ret; > } > > +static int config_tdx_module(struct tdmr_info_list *tdmr_list, u64 global_keyid) > +{ > + u64 *tdmr_pa_array; > + size_t array_sz; > + int i, ret; > + > + /* > + * TDMRs are passed to the TDX module via an array of physical > + * addresses of each TDMR. The array itself also has certain > + * alignment requirement. > + */ > + array_sz = tdmr_list->nr_consumed_tdmrs * sizeof(u64); > + array_sz = roundup_pow_of_two(array_sz); > + if (array_sz < TDMR_INFO_PA_ARRAY_ALIGNMENT) > + array_sz = TDMR_INFO_PA_ARRAY_ALIGNMENT; > + > + tdmr_pa_array = kzalloc(array_sz, GFP_KERNEL); > + if (!tdmr_pa_array) > + return -ENOMEM; > + > + for (i = 0; i < tdmr_list->nr_consumed_tdmrs; i++) > + tdmr_pa_array[i] = __pa(tdmr_entry(tdmr_list, i)); > + > + ret = seamcall(TDH_SYS_CONFIG, __pa(tdmr_pa_array), > + tdmr_list->nr_consumed_tdmrs, > + global_keyid, 0, NULL, NULL); > + > + /* Free the array as it is not required anymore. */ > + kfree(tdmr_pa_array); > + > + return ret; > +} > + > static int init_tdx_module(void) > { > struct tdsysinfo_struct *sysinfo; > @@ -917,16 +951,21 @@ static int init_tdx_module(void) > if (ret) > goto out_free_tdmrs; > > + /* Pass the TDMRs and the global KeyID to the TDX module */ > + ret = config_tdx_module(&tdmr_list, tdx_global_keyid); > + if (ret) > + goto out_free_pamts; > + > /* > * TODO: > * > - * - Configure the TDMRs and the global KeyID to the TDX module. > * - Configure the global KeyID on all packages. > * - Initialize all TDMRs. > * > * Return error before all steps are done. > */ > ret = -EINVAL; > +out_free_pamts: > if (ret) > tdmrs_free_pamt_all(&tdmr_list); > else > diff --git a/arch/x86/virt/vmx/tdx/tdx.h b/arch/x86/virt/vmx/tdx/tdx.h > index 9b5a65f37e8b..c386aa3afe2a 100644 > --- a/arch/x86/virt/vmx/tdx/tdx.h > +++ b/arch/x86/virt/vmx/tdx/tdx.h > @@ -24,6 +24,7 @@ > #define TDH_SYS_INFO 32 > #define TDH_SYS_INIT 33 > #define TDH_SYS_LP_INIT 35 > +#define TDH_SYS_CONFIG 45 > > struct cmr_info { > u64 base; > @@ -88,6 +89,7 @@ struct tdmr_reserved_area { > } __packed; > > #define TDMR_INFO_ALIGNMENT 512 > +#define TDMR_INFO_PA_ARRAY_ALIGNMENT 512 > > struct tdmr_info { > u64 base; > -- > 2.40.1 >