From patchwork Wed Nov 22 17:01:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeremi Piotrowski X-Patchwork-Id: 168481 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2b07:b0:403:3b70:6f57 with SMTP id io7csp1468590vqb; Wed, 22 Nov 2023 09:03:40 -0800 (PST) X-Google-Smtp-Source: AGHT+IGGftTq9f0fDSs0dN8zBZ2rIhlRRAd1JYJC+910zFVKoapPfYfOAZrEtBKIEECsN20cxrmI X-Received: by 2002:a05:6a20:440d:b0:18b:47a9:66e9 with SMTP id ce13-20020a056a20440d00b0018b47a966e9mr2984653pzb.40.1700672620451; Wed, 22 Nov 2023 09:03:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700672620; cv=none; d=google.com; s=arc-20160816; b=CZ0201VPmiAhtrMnPKGBXdo7F5bm0e9g6pKHblSGcwKXAwLk425RgRpynAmrMRXCZb nM7hBkhvYBm/dfLSdZojOj5AEX8FpsKxiwrDEedZxfCCXZr1WZ5yUvutFbvyftlPgVVm l90eT0OFbk0Js8vNVJPOEAdxWN7GEOjmdaekz8+EBL61JxZJUULJBksj7Wq3cZfpuvyp kmhAcklBKxmQbrSVDc3lG11Vpr2hXmqd7pnMYukPKjSIvIasBSknZacaKgVJX1+e50Yd i+NDRJ21vU1WgWv83Fec3WpVfB6sMCb5Nh4PQCCok99AvOT8OMa35C8E+0oYZwgLinX7 7wEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=BKqGTv7UstB2deyF2KOlDMhyNWpRdGHnOL9MuTocPpU=; fh=E8ULNJBgdDg9an7hIBnyD2FCRjgTqVL5oPJZZj2SaL0=; b=x6Tr61ekpVMCreG7A0jMadWqiuvsBtZEuHy+1f+d2DeC3+9CsPhePceneHYMm8/ZcI x+yZcejnH0y07Y/ATpuu9eRnhCBTKo19i1h77VwrYysnvK46kJeeMbwmhwAxXOelWp8V s6gW5PjQUfDFAnXY5fo8/xXcALI/xuJTM6F5Oihvm7w4z0rWyFpS/za16n9lem/Qjeb1 gM+9r7os66Ubq19PWU70xKCpUeK3sEm8dxCCOTMBba4qmOh6BFE7IJRCYcWSQRPCckg/ xaz6wRIjAmwuwKvx3B2Pm7KtUIaoZfVfFN3NUXPLZneBt36drXfKwgINhWt1ZKYe6khl 4O2g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=JgSb7prC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id q4-20020aa79824000000b006c4fc8585c8si12569074pfl.364.2023.11.22.09.03.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 09:03:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=JgSb7prC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id C3DAA8217063; Wed, 22 Nov 2023 09:01:57 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343814AbjKVRBr (ORCPT + 99 others); Wed, 22 Nov 2023 12:01:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58386 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232077AbjKVRBm (ORCPT ); Wed, 22 Nov 2023 12:01:42 -0500 Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 3988D9F; Wed, 22 Nov 2023 09:01:39 -0800 (PST) Received: from localhost.localdomain (77-166-152-30.fixed.kpn.net [77.166.152.30]) by linux.microsoft.com (Postfix) with ESMTPSA id C19D120B74C1; Wed, 22 Nov 2023 09:01:34 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com C19D120B74C1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1700672498; bh=BKqGTv7UstB2deyF2KOlDMhyNWpRdGHnOL9MuTocPpU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JgSb7prCdabwpGgVQnbh4ee5XA8kqbASGpQJSDfED6R3bv7a6g5yCsOUIKJR7i7Em MpEhnCOYWXXxGAoLna1v4W0M97P/5nzYpql5x91XrtfyZR74+92IIBuIOF5jBW3ZqM f07lkA5njUbY2NHdKhdbMyC70l7jrKYd2wZGVr88= From: Jeremi Piotrowski To: linux-kernel@vger.kernel.org, Borislav Petkov , Dave Hansen , "H. Peter Anvin" , Ingo Molnar , "Kirill A. Shutemov" , Michael Kelley , Nikolay Borisov , Peter Zijlstra , Thomas Gleixner , Tom Lendacky , x86@kernel.org, Dexuan Cui Cc: Jeremi Piotrowski , linux-hyperv@vger.kernel.org, stefan.bader@canonical.com, tim.gardner@canonical.com, roxana.nicolescu@canonical.com, cascardo@canonical.com, kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org, sashal@kernel.org, stable@vger.kernel.org Subject: [PATCH v1 2/3] x86/coco: Disable TDX module calls when TD partitioning is active Date: Wed, 22 Nov 2023 18:01:05 +0100 Message-Id: <20231122170106.270266-2-jpiotrowski@linux.microsoft.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231122170106.270266-1-jpiotrowski@linux.microsoft.com> References: <20231122170106.270266-1-jpiotrowski@linux.microsoft.com> MIME-Version: 1.0 X-Spam-Status: No, score=-17.5 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,ENV_AND_HDR_SPF_MATCH,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net 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 (snail.vger.email [0.0.0.0]); Wed, 22 Nov 2023 09:01:57 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783284493703941052 X-GMAIL-MSGID: 1783284493703941052 Introduce CC_ATTR_TDX_MODULE_CALLS to allow code to check whether TDX module calls are available. When TD partitioning is enabled, a L1 TD VMM handles most TDX facilities and the kernel running as an L2 TD VM does not have access to TDX module calls. The kernel still has access to TDVMCALL(0) which is forwarded to the VMM for processing, which is the L1 TD VM in this case. Cc: # v6.5+ Signed-off-by: Jeremi Piotrowski --- arch/x86/coco/core.c | 3 +++ arch/x86/include/asm/unaccepted_memory.h | 2 +- drivers/virt/coco/tdx-guest/tdx-guest.c | 3 +++ include/linux/cc_platform.h | 8 ++++++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/arch/x86/coco/core.c b/arch/x86/coco/core.c index eeec9986570e..2c1116da4d54 100644 --- a/arch/x86/coco/core.c +++ b/arch/x86/coco/core.c @@ -12,6 +12,7 @@ #include #include +#include enum cc_vendor cc_vendor __ro_after_init = CC_VENDOR_NONE; static u64 cc_mask __ro_after_init; @@ -24,6 +25,8 @@ static bool noinstr intel_cc_platform_has(enum cc_attr attr) case CC_ATTR_GUEST_MEM_ENCRYPT: case CC_ATTR_MEM_ENCRYPT: return true; + case CC_ATTR_TDX_MODULE_CALLS: + return !tdx_partitioning_active; default: return false; } diff --git a/arch/x86/include/asm/unaccepted_memory.h b/arch/x86/include/asm/unaccepted_memory.h index f5937e9866ac..b666062555ac 100644 --- a/arch/x86/include/asm/unaccepted_memory.h +++ b/arch/x86/include/asm/unaccepted_memory.h @@ -8,7 +8,7 @@ static inline void arch_accept_memory(phys_addr_t start, phys_addr_t end) { /* Platform-specific memory-acceptance call goes here */ - if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) { + if (cc_platform_has(CC_ATTR_TDX_MODULE_CALLS)) { if (!tdx_accept_memory(start, end)) panic("TDX: Failed to accept memory\n"); } else if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP)) { diff --git a/drivers/virt/coco/tdx-guest/tdx-guest.c b/drivers/virt/coco/tdx-guest/tdx-guest.c index 5e44a0fa69bd..2f995df8c795 100644 --- a/drivers/virt/coco/tdx-guest/tdx-guest.c +++ b/drivers/virt/coco/tdx-guest/tdx-guest.c @@ -87,6 +87,9 @@ static int __init tdx_guest_init(void) if (!x86_match_cpu(tdx_guest_ids)) return -ENODEV; + if (!cc_platform_has(CC_ATTR_TDX_MODULE_CALLS)) + return -ENODEV; + return misc_register(&tdx_misc_dev); } module_init(tdx_guest_init); diff --git a/include/linux/cc_platform.h b/include/linux/cc_platform.h index cb0d6cd1c12f..d3c57e86773d 100644 --- a/include/linux/cc_platform.h +++ b/include/linux/cc_platform.h @@ -90,6 +90,14 @@ enum cc_attr { * Examples include TDX Guest. */ CC_ATTR_HOTPLUG_DISABLED, + + /** + * @CC_ATTR_TDX_MODULE_CALLS: TDX module calls are available. + * + * The platform supports issuing calls directly to the TDX module. + * This is not a given when TD partitioning is active. + */ + CC_ATTR_TDX_MODULE_CALLS, }; #ifdef CONFIG_ARCH_HAS_CC_PLATFORM