Received: by 2002:a05:7412:d8a:b0:e2:908c:2ebd with SMTP id b10csp398486rdg; Thu, 12 Oct 2023 08:44:41 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFojLCebbvgoPp7OHVavlcvLg2eh52dyI1XupRLLNd4YBsjAECxvNKS2w6mng5s2wYAIzpG X-Received: by 2002:a17:90a:3f16:b0:279:354b:50f1 with SMTP id l22-20020a17090a3f1600b00279354b50f1mr22078052pjc.3.1697125480896; Thu, 12 Oct 2023 08:44:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697125480; cv=none; d=google.com; s=arc-20160816; b=tbfLiRZMuTpkNW2HCjRevl9BCRLvLUz+fJmTiEl57MnptrhtcWXgg5b1MP6xq19xlx /YNUwTL1BmsUjjMxeUN7nlMGIpXvNQw04aYJP+t6RL/1c6gUME/574NY9GBs8wrW+ygj aaWTYTlXz/ADUjzClwiw/MUzIkj6impyvR9ej8ZHJo42tj0AGj3sVlhUp0qh+rduphgV vXAKQL3VMGnKr4FaUyGtFtzi3v+N8tIqjs5ONOPgQ/YgHi7U/JcHA5maCLe788YPHAUV EG5Elz/V6p5N3oOeWeJ91bW6yOOeEv3pysGUX7++CoseZXJP8BO9cs8hBq66WdBYF2rw vmDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:autocrypt :from:references:cc:to:content-language:subject:user-agent :mime-version:date:message-id:dkim-signature; bh=UlqyJM0btpUB+qTUmL9YzeqVZwNfPRnzfZxUJErhxi4=; fh=kCV0XtZJ2bvCoANqOkmv+5oKL8dASexQK7+lQ13EQmc=; b=zBA0aBK6Vb8Ef0qVTlTaoZhBpNDDQsy9hVgJhDIbyanCOF5NiK5jlDwXRZeM2aaTdU aWjx+dNfMSTEghN6CPj+HBurWUY4EHQ0LvSXcdrzSt4lyvqT40FOKJ1pg8M07sVzH7le mo03NWOjlD5vv1gmGMi2Xypbg3eYNRtgvawVUDx7mlJ47gckOgABl+7GKKoM/0bI2bjb v4ToGZkNB5lDu8f5CETX7mTXrLsWVAUs3QcLi/B5fZsxulf/uIj1I+JQJvVMmf54t9nr C1PTmGE4j3SgYBOnF8mB0CDbVeNI3zEjyQ6Y6gPvICUZWCJMqJDxds6aEg/D12CsXuUV NOYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ERoHW3rc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id oj7-20020a17090b4d8700b002791edaee33si2819578pjb.77.2023.10.12.08.44.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Oct 2023 08:44:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ERoHW3rc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 27254819D1E6; Thu, 12 Oct 2023 08:44:37 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346441AbjJLPoX (ORCPT + 99 others); Thu, 12 Oct 2023 11:44:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379457AbjJLPoU (ORCPT ); Thu, 12 Oct 2023 11:44:20 -0400 Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.151]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CB9B4B8 for ; Thu, 12 Oct 2023 08:44:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1697125458; x=1728661458; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=96eBVv3oEzEjVPfnA45obaJyAQVZeKf6dUogz5jkhig=; b=ERoHW3rcSzkOyEfYT0kYfw2IWiSyfBzvwxRpL7R6lnQ662GflQ0DqF8W fxBnIk4SWLS069xoSTFyssi4bADDucnJAUWX8IiwX/Yp/wPTiLWp73gsf uX+jcg1zRlPAPinRD+gyL2/F2YXBLMvZrmygQpEmDDiG0WERmkygAdRVx wrquTLBhtrPcFC3A0KxP6mR+rl4165Eaj83UOIzZBiJq+otXnpxDsjERC 0i2qUqLSr4C7jeA3/VsurFNP1PbuVC/taxQ6doOCtNovtH2g124W7padj NW7LTyhB7tpxHF+cdfBSD8IZ/ea/SgXxivI/NsOtdmw22WEt1+ESvXx1E Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10861"; a="365221866" X-IronPort-AV: E=Sophos;i="6.03,219,1694761200"; d="scan'208";a="365221866" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2023 08:44:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10861"; a="824654027" X-IronPort-AV: E=Sophos;i="6.03,219,1694761200"; d="scan'208";a="824654027" Received: from aarka-mobl.amr.corp.intel.com (HELO [10.209.59.94]) ([10.209.59.94]) by fmsmga004-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2023 08:44:11 -0700 Message-ID: <3787eac9-cf18-4210-b11b-a34068887bb3@intel.com> Date: Thu, 12 Oct 2023 08:44:10 -0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5] x86/tdx: Dump TDX version During the TD Bootup Content-Language: en-US To: Yi Sun , tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, peterz@infradead.org, x86@kernel.org Cc: kirill.shutemov@linux.intel.com, sathyanarayanan.kuppuswamy@linux.intel.com, kai.huang@intel.com, nik.borisov@suse.com, linux-kernel@vger.kernel.org, heng.su@intel.com, yi.sun@linux.intel.com, Dongcheng Yan References: <20231012134136.1310650-1-yi.sun@intel.com> From: Dave Hansen Autocrypt: addr=dave.hansen@intel.com; keydata= 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 In-Reply-To: <20231012134136.1310650-1-yi.sun@intel.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Thu, 12 Oct 2023 08:44:37 -0700 (PDT) On 10/12/23 06:41, Yi Sun wrote: > It is essential for TD users to be aware of the vendor and version of > the current TDX. Additionally, they can reference the TDX version when > reporting bugs or issues. ... and they will all have to pull this "essential" information out of dmesg? If this is essential, why stick it in dmesg where it can be overwritten? > Furthermore, the applications or device drivers running in TD can achieve > enhanced reliability and flexibility by following the TDX Module ABI > specification, because there are significant differences between different > versions of TDX, as mentioned in the "IntelĀ® TDX Module Incompatibilities > between v1.0 and v1.5" reference. This is orthogonal to this patch. No applications or device drivers can do anything with the result of these version queries. > Add function detect_tdx_version to fetch and dump the version of the > TDX, which is called during TD initialization. Obtain the info by calling > TDG.SYS.RD, including the major and minor version numbers and vendor ID. You don't need to rewrite the code in text form. > The TDCALL TDG.SYS.RD originates from TDX version 1.5. If the error > TDCALL_INVALID_OPERAND occurs, it should be treated as TDX version 1.0. I don't understand what this is trying to say. > #define TDREPORT_SUBTYPE_0 0 > > +/* > + * TDX metadata base field id, used by TDCALL TDG.SYS.RD > + * See TDX ABI Spec Global Metadata Fields > + */ > +#define TDX_SYS_VENDOR_ID_FID 0x0800000200000000ULL > +#define TDX_SYS_MINOR_FID 0x0800000100000003ULL > +#define TDX_SYS_MAJOR_FID 0x0800000100000004ULL > +#define TDX_VENDOR_INTEL 0x8086 > + > /* Called from __tdx_hypercall() for unrecoverable failure */ > noinstr void __noreturn __tdx_hypercall_failed(void) > { > @@ -800,6 +809,63 @@ static bool tdx_enc_status_change_finish(unsigned long vaddr, int numpages, > return true; > } > > +/* > + * Detect TDX Module version info from TDG.SYS.RD TDCALL > + */ > +static void detect_tdx_version(void) > +{ > + struct tdx_module_args args = {}; > + u32 vendor_id = TDX_VENDOR_INTEL; What's the purpose of this assignment? > + u16 major_version = 0; > + u16 minor_version = 0; > + u64 ret; > + > + /* > + * TDCALL leaf TDG_SYS_RD > + */ > + args.rdx = TDX_SYS_VENDOR_ID_FID; > + ret = __tdcall_ret(TDG_SYS_RD, &args); > + /* > + * The TDCALL TDG.SYS.RD originates from TDX version 1.5. > + * Treat TDCALL_INVALID_OPERAND error as TDX version 1.0. > + */ > + if (TDCALL_RETURN_CODE(ret) == TDCALL_INVALID_OPERAND) > + goto version_1_0; > + if (ret) { > + WARN(1, "TDX detection: TDG.SYS.RD(VENDOR_ID) error, return %llu\n", > + ret); > + return; > + } We do not need random warnings at every step of the way. Worst case, make a version of tdcall that will spew an error in common code. > + vendor_id = (u32)args.r8; What's the purpose of the cast? > + args.rdx = TDX_SYS_MAJOR_FID; > + ret = __tdcall_ret(TDG_SYS_RD, &args); Does args need to be re-zeroed between tdcalls? > + if (ret) { > + WARN(1, "TDX detection: TDG.SYS.RD(MAJOR) error, return %llu\n", > + ret); > + return; > + } > + major_version = (u16)args.r8; > + > + args.rdx = TDX_SYS_MINOR_FID; > + ret = __tdcall_ret(TDG_SYS_RD, &args); > + if (ret) { > + WARN(1, "TDX detection: TDG.SYS.RD(MINOR) error, return %llu\n", > + ret); > + return; > + } > + minor_version = (u16)args.r8; > + > + pr_info("TDX detected. TDX version:%u.%u VendorID:%x\n", > + major_version, minor_version, vendor_id); > + > + return; > + > + /* TDX 1.0 does not have the TDCALL TDG.SYS.RD */ > +version_1_0: > + pr_info("TDX detected. TDG.SYS.RD not available, assuming TDX version: 1.x (x<5)\n"); > +} > + > void __init tdx_early_init(void) > { > struct tdx_module_args args = { > @@ -867,5 +933,5 @@ void __init tdx_early_init(void) > */ > x86_cpuinit.parallel_bringup = false; > > - pr_info("Guest detected\n"); > + detect_tdx_version(); > } > diff --git a/arch/x86/include/asm/shared/tdx.h b/arch/x86/include/asm/shared/tdx.h > index f74695dea217..1a0cacad5a0c 100644 > --- a/arch/x86/include/asm/shared/tdx.h > +++ b/arch/x86/include/asm/shared/tdx.h > @@ -17,6 +17,7 @@ > #define TDG_MR_REPORT 4 > #define TDG_MEM_PAGE_ACCEPT 6 > #define TDG_VM_WR 8 > +#define TDG_SYS_RD 11 *This* is the place to document that TDG_SYS_RD is not available on old TDX modules.