From patchwork Wed Dec 7 00:33:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 30557 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3131172wrr; Tue, 6 Dec 2022 16:36:31 -0800 (PST) X-Google-Smtp-Source: AA0mqf64/iJhiQqLIQtsGzQSdUC74rxpG0E/WkjVXVKDfEMe/kiuJRbGq7z/BZCcI07zrOHpqrfI X-Received: by 2002:a05:6402:78e:b0:46c:6f53:bf19 with SMTP id d14-20020a056402078e00b0046c6f53bf19mr13997265edy.299.1670373391259; Tue, 06 Dec 2022 16:36:31 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1670373391; cv=pass; d=google.com; s=arc-20160816; b=vSm0IpHT85ervSp5M/fYIJR+uJcoATvGv04Ky7RP3ICAXIDGQdTRq5zcFNWoFaUkVP 0MJ4KGkdTByjQAE6jNHUww7CEtYT7ek8TlIQvZt+sh8OcWaDUgNtBAGlE0Duf33RCY3O SJBfWfgTtwhtiI1bFTt3N3fycQ3CEHeQV3dfOWVKLXvsJjz99VF85BHiHx+JX8+uTSNm P1bJtm5u/r6D6kAMIBdYuIdr9EXBz7aMYZvWF4Ol59BE3iiRM+8LVbnA9TR4F5obpKRg IE9fQbDT8dQKe50SxM5ZrdPfB7K5Nh574U2lQ+KFKXe642URJrrKWyEaBM1DrvpNM2UR u8BQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=dutSyDN/nvNY8GnZFJOCLpMV6EcuHMlRpqxCTBHhYmk=; b=zuPMZ2aX/x5HO5sJ3BV/yN2fXk6lipA5HN5TQiIsk6I0+fXfcf5IwGARpWkMT/eSla UkhDyB8WoA41i2VG7RY3J+PKfsaDu/3BnXZDBofVimB+wxSfb3qBdiZpSulfLpxCdJSd a9KXJDlMv8yxq8OdEyRIX5N4Y7vSvKt6mPtGnHb78EBHLNw4vkNgVGBW7lULPyGjZewg onF0FnFbyswJzmC9g3KN/j8NZ/zGjKDbHdBE3raz27fYmXQEdlYLrQ56XSTxtsaAhx55 Bo2hytibs4J50WPW0hr8r5NO9RB98HyPldViG85fejZaQJAs0nyS/z4sxBhefUn4Rmp1 +9hw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=jp1LUVL6; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id go7-20020a1709070d8700b007c10276464fsi4177022ejc.24.2022.12.06.16.35.53; Tue, 06 Dec 2022 16:36:31 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=jp1LUVL6; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229723AbiLGAev (ORCPT + 99 others); Tue, 6 Dec 2022 19:34:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43172 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229736AbiLGAet (ORCPT ); Tue, 6 Dec 2022 19:34:49 -0500 Received: from DM4PR02CU001-vft-obe.outbound.protection.outlook.com (mail-centralusazon11022020.outbound.protection.outlook.com [52.101.63.20]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D1DDE17A94; Tue, 6 Dec 2022 16:34:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iVTTjMYagKh1RzHFa84Bw4cTffDrQ6ZNKBHywuU5t1ZuAv9v19Xd0mA7tXGOm5ywWNvnwJPxrmwls/jR8lIkkR5ARdBVZVNS4tz61IMkdqq66pbE0RYV1fEYh6nKhG9c/IKmMz7NirH4t5N12Te8ClQVNR58E8ydUpDfi+IjHTgedy6IfUdS5hhSGTqlxic8fVAkOfevsiAqv7T/BOY8j/1DJbPdM+bvSry+eDoOtyVfpzioPgMhoJLspnK4EAi7L0pV/K5cg25u4QroXu/L7M5oy5UNJe7xXKSAdcovhwCA0virlhvwa1rh50eVqxIdZxyM7dLaMqOOXyKzNyXYjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dutSyDN/nvNY8GnZFJOCLpMV6EcuHMlRpqxCTBHhYmk=; b=WPdOWvQmUr3aE2TkwlBGucMl/SoWbQNM9kQSOk0sUmmY1UiQjnbhrStq0ae9M+Lla3Iv2vCnkyocCoBJ1GvNYp2GU2O0VbkbQozr5LHTcN+p38I2VX1lDLJTI3NbHXfd185JMQyudZyTLCnjeXPKiE3rag3TS5MUI2tm6swQ6Pv93PHEf3Frx3SM6FUsuNrZrMm9rGkFOKKzhmV+JXceCYDeyC8vcw6vJnEYgugbATGpbsuriJb8mQzPX3yzxE0ctyvbFR4aK1rKcbyxJJhe7x+vHTOZZyAz+F4egZdpXZhmG8VuJKj+mdJV1rudhrl4TXT4FoEnPccGIR/ekshYpg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dutSyDN/nvNY8GnZFJOCLpMV6EcuHMlRpqxCTBHhYmk=; b=jp1LUVL6kPJkuswl3PBSlLRZEAdjQSIm8vF30zg609akfbxC36esa1z9tnKboObhsuh/5iGOIuqIOl/pLEz2MVUWcOKbjsKXJGq+xdDDHbBrYDk7UpJz7JIb+K3n0s6SoKuo3CYXepWMLAMCP+xcUDJ4NMcyhLulhRZyW9/68+Y= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; Received: from BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) by CY8PR21MB3819.namprd21.prod.outlook.com (2603:10b6:930:51::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.4; Wed, 7 Dec 2022 00:34:43 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020%8]) with mapi id 15.20.5924.004; Wed, 7 Dec 2022 00:34:43 +0000 From: Dexuan Cui To: ak@linux.intel.com, arnd@arndb.de, bp@alien8.de, brijesh.singh@amd.com, dan.j.williams@intel.com, dave.hansen@linux.intel.com, haiyangz@microsoft.com, hpa@zytor.com, jane.chu@oracle.com, kirill.shutemov@linux.intel.com, kys@microsoft.com, linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org, luto@kernel.org, mingo@redhat.com, peterz@infradead.org, rostedt@goodmis.org, sathyanarayanan.kuppuswamy@linux.intel.com, seanjc@google.com, tglx@linutronix.de, tony.luck@intel.com, wei.liu@kernel.org, x86@kernel.org, mikelley@microsoft.com Cc: linux-kernel@vger.kernel.org, Dexuan Cui Subject: [PATCH v2 1/6] x86/tdx: Retry TDVMCALL_MAP_GPA() when needed Date: Tue, 6 Dec 2022 16:33:20 -0800 Message-Id: <20221207003325.21503-2-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221207003325.21503-1-decui@microsoft.com> References: <20221207003325.21503-1-decui@microsoft.com> X-ClientProxiedBy: MW4P222CA0001.NAMP222.PROD.OUTLOOK.COM (2603:10b6:303:114::6) To BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR2101MB1092:EE_|CY8PR21MB3819:EE_ X-MS-Office365-Filtering-Correlation-Id: e31c7b74-1edc-4bb3-3768-08dad7ead556 X-LD-Processed: 72f988bf-86f1-41af-91ab-2d7cd011db47,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /P3hSEXKghlY9QkDOEgTl7o42g3fo0rpxeWU+dP5J/UIsl4KvWkqbHs2V2F8fBXk3QG3JuDXoZj5fZeegoz5O4IOa6rBQwKuHR58KKx9lbpT20juzvyiU50jSezeMlYgAv0cbMxsxCnhEt/r+0ZO5lnOCCkYKeW5nX0U6flTn+1xm0RI9IshcdtZF12J76v3zG6tfSQz0Jjl2XLTWWZDT/nKLgqzKHhorPRsh9LuSoLezW3IkvtFs9CFuMxVldc4iG+ANJ+sD4HD6umN/cY6HxdvHrd1mOPSrYL9JyzdOEDI39Lt6b0/qjeIEAk4hJZb/xupx6fxijyQGpcajdUc8cBLa9D2cVNO1nSpqcaDct48920AvQtOdRDVz28CxzZXIMjEZ2Pg/jQDiooEOIaY/6gMAoD7mLR+bMiZ8m9Idui9+0DMDopVvvAXxHMvKmERKMc2mpUUn7bAPNoDjXRZa//obMQpAisY3N14wiAY02QKLzbqhj7HGomkNJze0EY6Bq5dX/iLswPmFiC2buGax+/9ZCQE5/xV87+lOlUdTtZGrcXWJHjfWXXKIxv76ZXxzHrx+u9Vo4qRbs7bpwh0BXTh5s+D+yQEGkbd5oarZRDJ9maLtjB6eTMp0A06XniADHm4jzeuJLRAhtAC7qG4GShVuhahhYhbKDgUURVjHIKUZECE40t+gEOgw8jx9i64EwH4kdecFNQZ9dXovZsGJw81xf05t2zpP4QIvUaLVno= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR2101MB1092.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(39860400002)(376002)(396003)(366004)(346002)(451199015)(1076003)(83380400001)(6512007)(2616005)(82960400001)(186003)(82950400001)(6506007)(6666004)(107886003)(52116002)(38100700002)(478600001)(6636002)(41300700001)(6486002)(2906002)(316002)(66946007)(66556008)(8676002)(4326008)(8936002)(10290500003)(86362001)(921005)(7416002)(5660300002)(36756003)(66476007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9aA5K9nSe4VeCC6sN+Jqv3SatPW21uFt+jhNbcpVBHQ3U8Kzh3eXopZrPZTqun7c/Mu7TmsJsmCjV2OY/U69F+dcUSQskRQxyBAq7EqbpfZV/zVkJN/DxSdb+ejYxDI91Q2DRormG8SERXz4qNbryMkHYU8kb6ZbZLYzNRn5lc+UjHPgDbklCKyRbAZ6GPuu6scXs//Y14gDt6SnzqFAy2NnClxCoRnwdccVMUauU/E6Oui32d8R5hcuJueVaPmSfWTkOxlMsGBiMDnlKIw2Tej2CjHlV+s6GaC5hLwOlijeGBU380OZnns2XxEWweh/ug67vNILEHeKVar6LmC1nWI2aLWG17FRkGoXx3ZIzF8Y/W7U96hYunQwPdf9a4ZiR9hC7GUjrRHElIdop5atRtZ/WaEJFqXh+gpcQqsHHg09xv4TJXVHdvnBPTqEmWtjlYtcnJ6C6GDbEwTb52iRTzK6fdhK0f2MTweoXcgiR01yETzcNJ9MNrvngTkfQEPj4bJ/fhnTqGunQBAR0gUphTSpcZBSKru6wuzAAiU1OYHd6KtcVhON4DpUoRRd2vvSIgVJPPsuKLn330iHjU6ShfDzancf5AR/WetY4SpHAAOKSuokYIzLZK61rgffb1BF22axTZnX9d9MzJBantL7G8kF3UVClDvkIy8iyVxINkBXaYrNgsDBEZa5Few+9Extj3wGNuDxNqGhinRwQkE5RwVaLL92Fkh7842xZ0CR+R5KdtsMaTF/6XqJCgyRfSAR0a73vV/JfUXRo4bxjgmYxsKeymzX4ERJt7DjuZ98FEPPYk0xHNU+NP33Rq+ECWQmWmaO8NJTnWAJfPwm0smTHGGqkYLGb4EtTr+6xSMW0vgqZTC0KEPsMOqJc6yBLJNin/jSa3PVgD9k/582yc9SNYv04zgc80sEuNrETAEKwSvWIsgTBXkBoUgSvEV1BCm2BqGd2CEGfzYMGod9IYCcHo6lu2tmawNRBWI70t5NzmxouSBCyeRx+qRpQgb+o8WTNEMlW1CNxiwHPiAG490DgcitZbTef8X9I5FhbdrFtSYD+aCn85dZL9b5rbc8H4hVt9cVhXKUujve8lPlsk6JFSDBcw9lSgnPiy60EEqUdFYfVVDYLO7Yd8d+BTEErLV75BjFR8277ZK6Pvjuv+dKBe2+UKFiPQZEunY8ZzZdgr/u2W0Zd6JoxLfmpiwPLjpTPye+cgVclKKcgeY4ZLsApCI52CpNm9ervestrvMMcpqxoKSy+Gc6fZRTdO6DEkuRxwTjvY63pIZFA4vpyiENb3IWul9QdFsus1wW/e/KWnnYCQI5sit9jXI0B9wgOG8JnA3m5d8zeTUsb0oa9PbdljGzrgQtGbaMU4IpK9GzSWagZU16EbrDcSuIDZvahjvHXd+haf+MgeOAyydNsj5+e3dKc/GRXy7lmrlBb3NfrPdS9ChomgKZp9brX/BfckROToFfpAEQz414Yc6y3YLZx+EV2dVDa0m6OX5ZDkWrBv8xRzuiP519eOoDG5SY3alZXzAbD5wP/iXcf/PFVzd2VE2sIDYu3bxv2YDj4hACca6Yk6Dj/yUxpeUDLV0N5gMGE1PSQ6x/itldlV0NCeLxeTad8sM0GnVPtgUlYvYdTHkfmvn6NhfLOJqGQnHnVk64 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: e31c7b74-1edc-4bb3-3768-08dad7ead556 X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Dec 2022 00:34:43.1300 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VFObKUWpyitARkV347nzZjVl0VO2iqzPrhaa6DtKdTPCx+vNDwfRK2tJpT1bIx+rbhqcuX6YIeIQ/m9qFjePSA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR21MB3819 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_NONE autolearn=no 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751513448784934718?= X-GMAIL-MSGID: =?utf-8?q?1751513448784934718?= GHCI spec for TDX 1.0 says that the MapGPA call may fail with the R10 error code = TDG.VP.VMCALL_RETRY (1), and the guest must retry this operation for the pages in the region starting at the GPA specified in R11. When a TDX guest runs on Hyper-V, Hyper-V returns the retry error when hyperv_init() -> swiotlb_update_mem_attributes() -> set_memory_decrypted() decrypts up to 1GB of swiotlb bounce buffers. Signed-off-by: Dexuan Cui --- Changes in v2: Used __tdx_hypercall() directly in tdx_map_gpa(). Added a max_retry_cnt of 1000. Renamed a few variables, e.g., r11 -> map_fail_paddr. arch/x86/coco/tdx/tdx.c | 64 +++++++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 12 deletions(-) diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index 3fee96931ff5..cdeda698d308 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -20,6 +20,8 @@ /* TDX hypercall Leaf IDs */ #define TDVMCALL_MAP_GPA 0x10001 +#define TDVMCALL_STATUS_RETRY 1 + /* MMIO direction */ #define EPT_READ 0 #define EPT_WRITE 1 @@ -692,14 +694,15 @@ static bool try_accept_one(phys_addr_t *start, unsigned long len, } /* - * Inform the VMM of the guest's intent for this physical page: shared with - * the VMM or private to the guest. The VMM is expected to change its mapping - * of the page in response. + * Notify the VMM about page mapping conversion. More info about ABI + * can be found in TDX Guest-Host-Communication Interface (GHCI), + * section "TDG.VP.VMCALL". */ -static bool tdx_enc_status_changed(unsigned long vaddr, int numpages, bool enc) +static bool tdx_map_gpa(phys_addr_t start, phys_addr_t end, bool enc) { - phys_addr_t start = __pa(vaddr); - phys_addr_t end = __pa(vaddr + numpages * PAGE_SIZE); + int max_retry_cnt = 1000, retry_cnt = 0; + struct tdx_hypercall_args args; + u64 map_fail_paddr, ret; if (!enc) { /* Set the shared (decrypted) bits: */ @@ -707,12 +710,49 @@ static bool tdx_enc_status_changed(unsigned long vaddr, int numpages, bool enc) end |= cc_mkdec(0); } - /* - * Notify the VMM about page mapping conversion. More info about ABI - * can be found in TDX Guest-Host-Communication Interface (GHCI), - * section "TDG.VP.VMCALL" - */ - if (_tdx_hypercall(TDVMCALL_MAP_GPA, start, end - start, 0, 0)) + while (1) { + memset(&args, 0, sizeof(args)); + args.r10 = TDX_HYPERCALL_STANDARD; + args.r11 = TDVMCALL_MAP_GPA; + args.r12 = start; + args.r13 = end - start; + + ret = __tdx_hypercall(&args, TDX_HCALL_HAS_OUTPUT); + if (ret != TDVMCALL_STATUS_RETRY) + break; + /* + * The guest must retry the operation for the pages in the + * region starting at the GPA specified in R11. Make sure R11 + * contains a sane value. + */ + map_fail_paddr = args.r11; + if (map_fail_paddr < start || map_fail_paddr >= end) + return false; + + if (map_fail_paddr == start) { + retry_cnt++; + if (retry_cnt > max_retry_cnt) + return false; + } else { + retry_cnt = 0; + start = map_fail_paddr; + } + } + + return !ret; +} + +/* + * Inform the VMM of the guest's intent for this physical page: shared with + * the VMM or private to the guest. The VMM is expected to change its mapping + * of the page in response. + */ +static bool tdx_enc_status_changed(unsigned long vaddr, int numpages, bool enc) +{ + phys_addr_t start = __pa(vaddr); + phys_addr_t end = __pa(vaddr + numpages * PAGE_SIZE); + + if (!tdx_map_gpa(start, end, enc)) return false; /* private->shared conversion requires only MapGPA call */ From patchwork Wed Dec 7 00:33:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 30558 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3131235wrr; Tue, 6 Dec 2022 16:36:48 -0800 (PST) X-Google-Smtp-Source: AA0mqf5jSzbZuTYMJWFPydtVR3Y57dUrO2a5cBsem5Dc+gQfeomf0zQ3DEKNf+jUJOTA0+Vx22Bz X-Received: by 2002:a17:907:3c23:b0:7c0:c0c9:d7c7 with SMTP id gh35-20020a1709073c2300b007c0c0c9d7c7mr18349927ejc.382.1670373407968; Tue, 06 Dec 2022 16:36:47 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1670373407; cv=pass; d=google.com; s=arc-20160816; b=WczEFRUmk0amJ0U0WSoH4LylO1J+2UhmhLFU8nmp8quhLuH1R51IegL83HHM8ti3C3 7pz5JXpMcPivlc8XyQ3NIiII4ifg9rX1QNxyYH8AwJ/Bf/4k0aKMa81HNo7+7LyK5lhx iSctaRXpHl0mBgsFscKDMH7llaJhC2BWTdn+gKMFX4HD/QnkFfaN96e1MkvBVMZGpCop EnT0c2dCCxVYmVK8QJQzXAw+XzSi3mFv0xakzGIcR5iDZqGSbhwy1URW9sOLkIbtVQiZ sGBR2y2TRBRgJzts8oOiFD0F/RQXB6rHmzNsbthwb+9G4UCoo0YJek0HutVjMr6KAK0T Ib1A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=zDue8PCiTOkMr2a1ym+6XeSAT80kB0o/W8Hf3Yc+c/c=; b=oZP10iCooWBtxGFtkwPqHDIK862Z5urXdW0yiHcQYennTSmaQw1WXWHzzzOUFeirYU XNO9hF28Z1BJSdOcmsu7nIQJwVRkA5EDkJSmcKwYp9FYTe5b3XBc2peWYj9wQ4CGrAoF c7iqWjViCsFGPt0g0XDUIiTRhibyANSZ9wxcY4xLknpqr1Ss1pPlmB78l6wzH/MMAEmj QMvZzH6U7pXGqdvwirzhlFc4iPMd+RY/poBJS7YboGxTxohRt9/63nBnDsNp2oQU9HsM 5DB0hd9AM8DYGSiSKXX6OdwoXwJnz3U9r5gusmOUyZGJK9yX8yFUbeaTsvakk76FrKsW PucQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=A4HcRDDd; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id qf34-20020a1709077f2200b0070fc7c9d71dsi16235012ejc.989.2022.12.06.16.36.23; Tue, 06 Dec 2022 16:36:47 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=A4HcRDDd; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229755AbiLGAfW (ORCPT + 99 others); Tue, 6 Dec 2022 19:35:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43172 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229731AbiLGAev (ORCPT ); Tue, 6 Dec 2022 19:34:51 -0500 Received: from DM4PR02CU001-vft-obe.outbound.protection.outlook.com (mail-centralusazon11022019.outbound.protection.outlook.com [52.101.63.19]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 36B48A44B; Tue, 6 Dec 2022 16:34:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LRrKMwbq17pes8Dq0kHYpw/FpnJAbj1HreQfjtBT3w1DskxqEA1SotiBG7GV+6qxL13CyDSgFQuWZZkfiRvaQSGnekbAN2J60Slqy7fOZe6f5hVnJgQq0oIsFC6G/91fw5Gr4g8WGm6oBEoNwtaVRW7A+8t3mC96Jbt+ikLaZDtn455mRYQBr2JyS5NoJ4Qv+vucWI69gO3h2aK2+ANxdkf01jUOCAnbYK6nrkSzD4uiMEQumQNOTkylvGGGNrQqspFcUA5PwbkdkXIAZOpsdzT3adUQXZ4ehpjemmoV6yzH9vV2v3pqJ9g5oSvu1cUdG/qLg0hZMHk14yUFYUotpw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zDue8PCiTOkMr2a1ym+6XeSAT80kB0o/W8Hf3Yc+c/c=; b=V4QM4c+gpHAoYWUNyzcxP/+ceqynQ57r3XHr9RRzZ9BAP60PejfKCZ2hSe0ZNSlhg/XzHSFIjWocHNYCNZ1+WxRfKCTWVCjkZ5LNUp6zLxX5zVIvn9U24oW+ZSS3B3Gt0RBLRCta4NsdouUsbEJ7gGHoFqNqytRQEuUwV56xESL+ozgA7l+NcLvM6uAALqO9cAv57PsAR1PCsH+T/OGeXyh9B07dq8TfqPfcuHOam194mUAU5Jq2hZ2HM1bsN6Qr0IWDDxo6B3LHDc21cLM9Kd6MXOgPubNmHixkDXK0+OBVAiHRK165x000/vWbpiBf7rF4bleXi9Cdj1uoqg1xGQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zDue8PCiTOkMr2a1ym+6XeSAT80kB0o/W8Hf3Yc+c/c=; b=A4HcRDDd+Z4+wqerRNsKicAbbdQJ1FiAH5fQguWm6nIvhg/8FkuS6TOONgBrgLnJUjyIEeM3p/h5nqq8AT7zUDaMYVcS4T0tQA4Giv9n2l5Vyjb93AMLc9sPi91Jd5ka/+o9Gv/hD7kvbvJY+xKkXEd0I8zvT6CGyD9GhmqxzR8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; Received: from BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) by CY8PR21MB3819.namprd21.prod.outlook.com (2603:10b6:930:51::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.4; Wed, 7 Dec 2022 00:34:45 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020%8]) with mapi id 15.20.5924.004; Wed, 7 Dec 2022 00:34:45 +0000 From: Dexuan Cui To: ak@linux.intel.com, arnd@arndb.de, bp@alien8.de, brijesh.singh@amd.com, dan.j.williams@intel.com, dave.hansen@linux.intel.com, haiyangz@microsoft.com, hpa@zytor.com, jane.chu@oracle.com, kirill.shutemov@linux.intel.com, kys@microsoft.com, linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org, luto@kernel.org, mingo@redhat.com, peterz@infradead.org, rostedt@goodmis.org, sathyanarayanan.kuppuswamy@linux.intel.com, seanjc@google.com, tglx@linutronix.de, tony.luck@intel.com, wei.liu@kernel.org, x86@kernel.org, mikelley@microsoft.com Cc: linux-kernel@vger.kernel.org, Dexuan Cui Subject: [PATCH v2 2/6] x86/tdx: Support vmalloc() for tdx_enc_status_changed() Date: Tue, 6 Dec 2022 16:33:21 -0800 Message-Id: <20221207003325.21503-3-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221207003325.21503-1-decui@microsoft.com> References: <20221207003325.21503-1-decui@microsoft.com> X-ClientProxiedBy: MW4P222CA0001.NAMP222.PROD.OUTLOOK.COM (2603:10b6:303:114::6) To BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR2101MB1092:EE_|CY8PR21MB3819:EE_ X-MS-Office365-Filtering-Correlation-Id: b6ef96a8-edce-477c-1be6-08dad7ead6cf X-LD-Processed: 72f988bf-86f1-41af-91ab-2d7cd011db47,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RPYTkyCRK6DWyKelBHTQ0JH73J+A0ZpjU7FbxKJhf3ApWPoErUzbb5RG6PcRRDsiAkgtaDj5RcqOoaYPU53JCSCwtOD/4UpEA2BP7jls26wdziBKAajkNmLWxjLVzP2UVbxEuCogVMak2F6qgN2U2Zxa8/zfH4+s0cJFwqx5mLPBFcL2DMox4YX55ungTGhcltL7plyU0zALbvDvn/dksxL4QBdc39QxGskZI9cK5cRw/lPoMa+cCUnOkxWy8LTZ4QcI/OgR7TqPIhtsxZIKrmji+y0lloYDufVUV7QRtJn+SAqSkTsPaQpo7UPVttBGkwhffo3Fn0TzDnUEt8G7o3V+LdtrWih15ql6hW9+6XwcJMn8ZtL9wStUHgq3MzLwy+DU6DfO6XYt88MODxWN6lv+oc/2t1h3OtLWYTcnMK/opg0DVIwL2MvSOpXm++2p7TeqAo2WCQIgAA3oi3Wc0HTts0vJWpBVHg4967JxbQ783QzG2qDd4RT4tKXfE1kH0nDt5tdWhO98W5ZbTw7rgSQnrzUaf91El0BH1kzXOshpkhUCOCUt5cvCvB9u39Yq9oZTW1RUveuAt5HiWOSOH0/+L/7mC7V/1Gh2jk8+XsSawUJWLKrh7wOGHfwS/CPtEa+kBEAMcS/1jCvyM/nuKG4+4M1F5ClR4hiWU1ROG8TLp1NV0rluh9AdyvRxcWw+AmlkV9YWgV8mZ4kaCnu7wvUVWDoqaF1bNV2vfL6x4hk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR2101MB1092.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(39860400002)(376002)(396003)(366004)(346002)(451199015)(1076003)(83380400001)(6512007)(2616005)(82960400001)(186003)(82950400001)(6506007)(6666004)(107886003)(52116002)(38100700002)(478600001)(6636002)(41300700001)(6486002)(2906002)(316002)(66946007)(66556008)(8676002)(4326008)(8936002)(10290500003)(86362001)(921005)(7416002)(5660300002)(36756003)(66476007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 0QpJDUbjUSeFLRXitrJlplCcjXoaPiHZNw0yA2RHq04G+hjYs6D1FK9BbhrPofcHta7A5oys5ZHRFVzUtyHyBTdZPoBvgJ8/qn6n8oQhh2wRayysFua0Ii168K/fJx722v1wu0yE+lE8WTDEQCSBqo6vgSwyjEu6BZXM0ZJIo7XzBj391QjVKK5PfqiU8nXg1peLgwtTfiiGpSW672arwPMajiPei4B3PVV/SzeUVimzn/xjxLZuiOZDvpkdbliUBUX8TU4fEvUCna6GDun+qzls54hpvDVMTBEJmn1vL3k2CZl6inHVXfw09TDfPAkqE+W0kVEeQQ4RzQ4GY2i+mgrAQtLIEFdI5ghTwW/dmSubQCD4G5on7XtP38vHGCC7YGUQERVl1awqqyCr8DOQrtzKr6PfGsuwh++HwL/x/E7uhegdlRAPnRlky01jVuV6XVIrj6JAhbvUkcSxU1ySzGnj/M0YhtdBRhOpdIo/T015k0CDbhScn+yIojZeVPGG0oOi0Z47qOQmaxvPzRHEZ1McQM/b72IPadyudvcoAJbSIAbkg6M0tY1wXlfIgg30iqinYYzkEVDLcBQhL9SFrxejVQriSrIpsfMAiJl8MVrSZxeWTHDcla99W9KZL0AAZLkiGztLUGACLOD8ZeiBzlEoqAEElNSLw9XMnWquNSzv24Apy3tqaS8y/I7aX5t3z6uqdFs/zyCfpDu7/7U2YpR/ueKdQWdNPHpv4WpR3Nf4JyDwUZZcDmMpgk1sj+GAWsUFe9uWc1dP92BN9P6FJ9vB37mpPMihnzTKgeMppi1zkdyGVENBCBf7D/Sksjc4BOnIPMQEOtJFfu8FuDAsY21KYc/8d4KtuSoAa06WVEf/7mgNHRC9u/rlrFwTNfzKL6iAMDbu1rkrrgwCXpsQacq2RJ+AXSY8uCRmaQK8dfudSvngAfOiisX+WlpW81cM0qwL8ElHvEuiaANqF4JhivINAoqDiT8widyO8ISn4bwXBDtEyx0bL1/RsfgQf7IfgQ8VUI9wr1NmkhATYLJ743mz7gLUjKJ3UnfaOBICXolJvEc0o3thqYgVQZfoiGIeRmq/SJlQwq62zDC6roqi2zvA4+94eiy5MfnAYg9xKehL1EOMKwDpB8LQE2L80dyhKDV9Jj5CG2xt909Kn6cqBzqnIksmZYnn0kBrN9GhQGAhpQw3Wyrk2Wc3klxU2vSzAFn66JKxTNCrSJvboeA3vJuwpIdxBWSNI5007ZmpmTRVYqvIJYfrHc6hDkkcmR6gwOdkmjlJ6amA6Z9jKFrMNgnIZgzVhGQ/Ecad3RTOuoj4bHu8ojZYzCgJGthFFqzD5GOE/LCMzMUT0EY39lob2apWsdDeMP+kfiAn7/BZBAI9FMkp18AgefL5at3uDKDdvuYu+XaQL9hVbaMKEbGxxrMsWw8zgxnQPWLycZFDd1srYhnCA7NTspRsF7vaXO65UHWM08CJODkafbZGeuYra+ibuIHi6/IK3wdb6bcuftjGSoq6DJJxaWSvo5bHBT/z2CKtL8Y9Y/vv1GlfNQAI3ugXP98wcu8u2SYKOjkmbWNpofZCOJI2EJcJ4I5puD87a/JIYw4XGySGo/q1AoD91XmLyA4M4G8FeIr5TEwRdz8cv/LmMLC6zNvMWBViJ1La X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: b6ef96a8-edce-477c-1be6-08dad7ead6cf X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Dec 2022 00:34:45.5531 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2ho/Brkh9UFBoN/HoAajaGPxbe9ZE8+uvrV8ijnQXX9RNWpT7Ml7SAj60dUmDeuOz03n8CVwJjKWb2dBqLAa6Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR21MB3819 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_NONE autolearn=no 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751513466440014094?= X-GMAIL-MSGID: =?utf-8?q?1751513466440014094?= When a TDX guest runs on Hyper-V, the hv_netvsc driver's netvsc_init_buf() allocates buffers using vzalloc(), and needs to share the buffers with the host OS by calling set_memory_decrypted(), which is not working for vmalloc() yet. Add the support by handling the pages one by one. Signed-off-by: Dexuan Cui --- Changes in v2: Changed tdx_enc_status_changed() in place. Hi, Dave, I checked the huge vmalloc mapping code, but still don't know how to get the underlying huge page info (if huge page is in use) and try to use PG_LEVEL_2M/1G in try_accept_page() for vmalloc: I checked is_vm_area_hugepages() and __vfree() -> __vunmap(), and I think the underlying page allocation info is internal to the mm code, and there is no mm API to for me get the info in tdx_enc_status_changed(). Hi, Kirill, the load_unaligned_zeropad() issue is not addressed in this patch. The issue looks like a generic issue that also happens to AMD SNP vTOM mode and C-bit mode. Will need to figure out how to address the issue. If we decide to adjust direct mapping to have the shared bit set, it lools like we need to do the below for each 'start_va' vmalloc page: pa = slow_virt_to_phys(start_va); set_memory_decrypted(phys_to_virt(pa), 1); -- this line calls tdx_enc_status_changed() the second time for the page, which is bad. It looks like we need to find a way to reuse the cpa_flush() related code in __set_memory_enc_pgtable() and make sure we call tdx_enc_status_changed() only once for a vmalloc page? arch/x86/coco/tdx/tdx.c | 69 ++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 25 deletions(-) diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index cdeda698d308..795ac56f06b8 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -5,6 +5,7 @@ #define pr_fmt(fmt) "tdx: " fmt #include +#include #include #include #include @@ -693,6 +694,34 @@ static bool try_accept_one(phys_addr_t *start, unsigned long len, return true; } +static bool try_accept_page(phys_addr_t start, phys_addr_t end) +{ + /* + * For shared->private conversion, accept the page using + * TDX_ACCEPT_PAGE TDX module call. + */ + while (start < end) { + unsigned long len = end - start; + + /* + * Try larger accepts first. It gives chance to VMM to keep + * 1G/2M SEPT entries where possible and speeds up process by + * cutting number of hypercalls (if successful). + */ + + if (try_accept_one(&start, len, PG_LEVEL_1G)) + continue; + + if (try_accept_one(&start, len, PG_LEVEL_2M)) + continue; + + if (!try_accept_one(&start, len, PG_LEVEL_4K)) + return false; + } + + return true; +} + /* * Notify the VMM about page mapping conversion. More info about ABI * can be found in TDX Guest-Host-Communication Interface (GHCI), @@ -749,37 +778,27 @@ static bool tdx_map_gpa(phys_addr_t start, phys_addr_t end, bool enc) */ static bool tdx_enc_status_changed(unsigned long vaddr, int numpages, bool enc) { - phys_addr_t start = __pa(vaddr); - phys_addr_t end = __pa(vaddr + numpages * PAGE_SIZE); + bool is_vmalloc = is_vmalloc_addr((void *)vaddr); + unsigned long len = numpages * PAGE_SIZE; + void *start_va = (void *)vaddr, *end_va = start_va + len; + phys_addr_t start_pa, end_pa; - if (!tdx_map_gpa(start, end, enc)) + if (offset_in_page(start_va) != 0) return false; - /* private->shared conversion requires only MapGPA call */ - if (!enc) - return true; - - /* - * For shared->private conversion, accept the page using - * TDX_ACCEPT_PAGE TDX module call. - */ - while (start < end) { - unsigned long len = end - start; - - /* - * Try larger accepts first. It gives chance to VMM to keep - * 1G/2M SEPT entries where possible and speeds up process by - * cutting number of hypercalls (if successful). - */ - - if (try_accept_one(&start, len, PG_LEVEL_1G)) - continue; + while (start_va < end_va) { + start_pa = is_vmalloc ? slow_virt_to_phys(start_va) : + __pa(start_va); + end_pa = start_pa + (is_vmalloc ? PAGE_SIZE : len); - if (try_accept_one(&start, len, PG_LEVEL_2M)) - continue; + if (!tdx_map_gpa(start_pa, end_pa, enc)) + return false; - if (!try_accept_one(&start, len, PG_LEVEL_4K)) + /* private->shared conversion requires only MapGPA call */ + if (enc && !try_accept_page(start_pa, end_pa)) return false; + + start_va += is_vmalloc ? PAGE_SIZE : len; } return true; From patchwork Wed Dec 7 00:33:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 30559 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3131637wrr; Tue, 6 Dec 2022 16:38:01 -0800 (PST) X-Google-Smtp-Source: AA0mqf6oJzTnNuXBJHfHk8TUCAKmS+2ac3d8qWx8iqFcFqksV4QzfLIklXB0fdsR462+PcpNtbyx X-Received: by 2002:a17:906:9bed:b0:7c1:31d:315 with SMTP id de45-20020a1709069bed00b007c1031d0315mr6237963ejc.389.1670373481275; Tue, 06 Dec 2022 16:38:01 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1670373481; cv=pass; d=google.com; s=arc-20160816; b=kvI7mw+jTIDP3kDa/Ath5YbSzGGdwR71K5NJXJdUCTSbfkOQGUVUZrNR8iyIgolXth JqCsqXMQhy/H/OBiR/C9uOBhlpfEkcRPzsfx1WbHjuTn2CrDxoLPYv59ivaCoolo1DoN DGcjpa7G8qFjyjJuVNtyasMKyOAGzZHBbRbXOV/SNKD+NLUbVtQySNJO6GJN0yb3jOXT a9dGiu/mPpHgulNyLTgy5pz1uVac42h4ywkFUNBHRJtH1XMobEiz3K70vMdp3k2VmXBL IVrhBeOJ5fAiozm0qrfM+Z2NHpZ7TqX5P9I48d4sjiTIxbmBes9854sC3P3oz+kheHBg u8gg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=wXNK4aUQUfr4FbGiX+X1/32TO3PF/DtSaeQbHJsLYR8=; b=zR05DCXH75RTnXCtEhr0sbiWWKj6+/JNHCsBwVdns7LfGy/qIrBHW9ZFISHdoCX0X9 OXSWK2K3jucspxS0WDZ9qTnYbC3KqEfDbKI/kLwtAyYmdp7h0a6nrl+5XfYfS1FmRdSO U5VV4nSER8yp7OXjRFG+IO3r2RdwJHkfdOwQFlWZo6woAmEpmn+QaqNB57bfa5zsd3ki TjokW6yrH526c8fWRnvnH3Q8RM0ZcyRxJzK8h+AczznJlTEHxZ9BEoJYZSRGX97rDWrx RAASrTmm/d0lZexF2Agp8w+CH5fQOsjveJ+QZNbrzGxzdW05Y/mw8YVBpIMgMtNwwNKz 4yHA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b="iAkaY/uQ"; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id cw8-20020a170906478800b007ad8bd5a3b2si17521935ejc.263.2022.12.06.16.37.37; Tue, 06 Dec 2022 16:38:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b="iAkaY/uQ"; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229814AbiLGAfa (ORCPT + 99 others); Tue, 6 Dec 2022 19:35:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229751AbiLGAe7 (ORCPT ); Tue, 6 Dec 2022 19:34:59 -0500 Received: from DM4PR02CU001-vft-obe.outbound.protection.outlook.com (mail-centralusazon11022014.outbound.protection.outlook.com [52.101.63.14]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D9E6A1FCE1; Tue, 6 Dec 2022 16:34:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GpjDpIsEGrRhPSgPHpsQIgUz7qz3kmfOSRrIaNLUPv8b5m4E3GIpfDTRbu4sePMGvmJWCr1dOkqTQcFc5mgOfNw161MDMWQVW8TgzhyplGCaxw5nLmwKTnJ9u1umAfvVrQVj7dVMI1GQ8/rPIl62X1trr+DD4lQ4cPTkivaqopwKSyJyKMffItvIv/ZLVK9+gPtQ2TwjCDkt1+EOorMS+xNlT/+W2BS+naHYiPmctzYfVe2Sj+32rQ2XxRoi3W+tuIOSh8dPI1X2kSeG9aZEm55Eyq0OrZ0voECJ27kd8dNLQR2U2ej1byWt3BeTVPQ5fZMT+iYj7EiyCiSQVqPpSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wXNK4aUQUfr4FbGiX+X1/32TO3PF/DtSaeQbHJsLYR8=; b=NRFZocVSAUwAgQvGkWSxdlez8TVb4wxRgMd1kudmJApvD+8zIYEuvK5l4qGEJqRfRjc2zbWfhJosNpKpU0NZI+W1I4kVqgymWZx2qazXDlqnx6CFuSuAS1gQUtXJMLuhYZD5dRrfKQwH8gV+0GEPUDyhzUGN9S6JGfEbm3TYahz6xpKn3k10nhKp8bKoqnHNRIeHVojWCseULOXDaaBSWbAl07ZWKHxA0HGrRzRP19+C/5rV/6XKGVVhy1Xo/M2XGET3kW5OySSbuHlSOGnZgGyznRzt9277IM5gkAqZ4Vr0nXwem+96e6CRflVvs3bnkfFfhTahUZELXypcsCjwrQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wXNK4aUQUfr4FbGiX+X1/32TO3PF/DtSaeQbHJsLYR8=; b=iAkaY/uQxOk4ixjHblFkpETM3WnXt9i/ki55Xvwiaf2Qv0DRuVfTIaEVFL7wjx3X3BeENKcmrJ9EkDk9WELtlTbyw/pA6WjXWURXeSZG/dCAj9F7J62Wv81Zf4U4+lVUZ5T/i1YXkE5a3Lm9sj17heMj1bx9zg/9GUOasvoF8rk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; Received: from BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) by CY8PR21MB3819.namprd21.prod.outlook.com (2603:10b6:930:51::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.4; Wed, 7 Dec 2022 00:34:48 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020%8]) with mapi id 15.20.5924.004; Wed, 7 Dec 2022 00:34:48 +0000 From: Dexuan Cui To: ak@linux.intel.com, arnd@arndb.de, bp@alien8.de, brijesh.singh@amd.com, dan.j.williams@intel.com, dave.hansen@linux.intel.com, haiyangz@microsoft.com, hpa@zytor.com, jane.chu@oracle.com, kirill.shutemov@linux.intel.com, kys@microsoft.com, linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org, luto@kernel.org, mingo@redhat.com, peterz@infradead.org, rostedt@goodmis.org, sathyanarayanan.kuppuswamy@linux.intel.com, seanjc@google.com, tglx@linutronix.de, tony.luck@intel.com, wei.liu@kernel.org, x86@kernel.org, mikelley@microsoft.com Cc: linux-kernel@vger.kernel.org, Dexuan Cui Subject: [PATCH v2 3/6] x86/hyperv: Add hv_isolation_type_tdx() to detect TDX guests Date: Tue, 6 Dec 2022 16:33:22 -0800 Message-Id: <20221207003325.21503-4-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221207003325.21503-1-decui@microsoft.com> References: <20221207003325.21503-1-decui@microsoft.com> X-ClientProxiedBy: MW4P222CA0001.NAMP222.PROD.OUTLOOK.COM (2603:10b6:303:114::6) To BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR2101MB1092:EE_|CY8PR21MB3819:EE_ X-MS-Office365-Filtering-Correlation-Id: 90c68199-d335-470a-5ba3-08dad7ead839 X-LD-Processed: 72f988bf-86f1-41af-91ab-2d7cd011db47,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: avJb+pmcQ4Xs5GlTkxvrLX9/4bt/rgW65irDZTjc6VK1bR56cnHIcJ8YZAkEDmK1ZIx8e/Kf6JO1Zf0jbYPUr0Pg9WQAYhYi/8Hbwq5n1goeBCv/xVFHUSgfqxoe1/dd4hKpSJw617vPiDr8iPJTtdfrx+i0H9KOWKAUHhKxM8VxxY+NIqh0xeJuiO1Dg31hISx2IbOY6ZYCxRPqGBzfsVxUpjU4rILiKPo79A9cL5etsCZ+nb56bzvUDGDACSga/kjY6eAEaw2EApcXKYRsAFMKWrHCGAzX6XwG+4W1ahVfm5iQ88hH8pvwW39BKyTsM6wyHc/Ph62u9PNCNNcGYIZvk/6vg1lYDBbONgMa8elEgWuxYcf/Ks56+QTt6dQet3mRXzsME8tJfj1CRhmoNQirPQSJrBVytKRsaqBjY2MvntKEvpdbdVPss+9cB9/xARbM380oNinWwUM9jGbideeygrAr7tiO5rgmNGh7gJVg1HH8fzvaFuipAtkk2tYhUxWI3f+CetLBYL+YYtWFfg0YepRPeZ2u0CY1Q3huX5PrIP7rUAvml2H4Z0T0Yjyum3ogSfP0EDLLDPRqm6e9+kx7gGXj0XgfuNLGTmIBTwDnn0ywq0zDkxmiFpSilCcwrUgqfKlajWZ2VKEPbPmIGvLshre89IMzztODxL5TGbhfRDEjWgDxnufQSO9z4nuyaAOBIK8Y7LNHt7JT4POIPlodt340HJ6KyiugwxSqH4E= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR2101MB1092.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(39860400002)(376002)(396003)(366004)(346002)(451199015)(1076003)(83380400001)(6512007)(2616005)(82960400001)(186003)(82950400001)(6506007)(6666004)(107886003)(52116002)(38100700002)(478600001)(6636002)(41300700001)(6486002)(2906002)(316002)(66946007)(66556008)(8676002)(4326008)(8936002)(10290500003)(86362001)(921005)(7416002)(5660300002)(36756003)(66476007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 54+4HLEHJ3CQjvRg+o+tIRtV+LSTMTHj+VkIaof5RHAWYA914jkuwvTPUp4mJxtbCvF3r8Ws/x5g2RTPgjDMfn/DUwPNn8AN9JWEc8tbHVgJ7r3vWLNHoW4LHrZpHoqE6ZWZRhNPFMxf5v8tRmRYh7uyfE8jOneO9PpFMkKjweTZx4GuXTyG1bxXW9FGEpXOpKrE6bfSfg2EzetPaGkDbRXEHOBT5VIIrWG+E+o8iG0P+9bs6QDBs5N9EXgMX25CUTCz9FmMKrBEuTqYh/kRjKNjBpJ38BURqJ5zukpc7ztR6yywgGSz61wbY90DYG9cdzhTZzgEbTiNibB1M6XWvokbwjnKY2SR2zh9w7DDVe3/l6fXipEhnYWSdgLPlUSzjPUQD3EnUCh2K9vlZDwskTUaWW5ldhMnfpauG6Nx/2vDDlkV8BUhJwiariRdPNfQWBRhjHFkhjhip7tqca46Jgbw21wV7VfXv7u/EMk4g42wqI2AALU2LHm+McgoULcneUVWn630poAIRbIlFkWLsnPXYEIIZwedGeN1c7Psv4o5zA6L5dtriu1Da26Y1Ii32TfgxfDCKyP7wuf+QkXnPD8kiBFAxhhanVnLtUcBqltJ6hcCLZITsOdpMahxeo8YJ5dGj6wpaU2b9GswChBrXCvf0fB3VbfD+On/WhyUVDN9eVAf2Jm87OqJa8epxPN2+jojTZSADH2NNjwUCAxJPhTbk6dqolZmfAiGQTu7Cr7zFzEH8eAnp/yL1Rj9oRTeSDz+2fJqKZuCo/1URzBimN11BMSs/z0OIkikk5P6ZhS8d70s8bfBEFPnInMTBRGKP8B6PAizahJKtuB3NR86B7EWoZtNPjzFhqOLaV/3tAzsSId6EYjU7vs5VqQECDQVERQMqauHHZv0uifamF3OZAaEgVhhSvmIjDte0DrgoCoK4BIWuiyOcGcpaXBN5bg6ZAB4DMHRz17ksAH7+7Tk70owYdpVkwFxji+j5Y+NiOwiXz9yGyryIv3zBAXwWdh47wqP1gJGR6G6nOs4jZ7rBgW5CfEaFBcK3nEHlfyok7FtL6ZkFzjC9MPQkmklT6gLQQrD9wIrIWK5FpurVJJ++e5I2kSA4mE7dy6JWicJhnPk1QkozKCt54WBw2NfxgNXf6YBxuSwfaAYxRBkmAxCHTSpoz30WaSWzYHku85lS6h9DgE9pXOC64iyL7NMzkekh45PAxHjZGI8M/XrmlAjOv+EjFB/WEo/5QY0YUZhCkAKZsYvf4ZYmC297KYjjch4xFnZGi8bsp1djdcmIdNTYLdrVxQ3Nih49A7uzZMzyhfyVpkcriosP695ap1ghQZ4pzyfZYpWLKj3aPLHa2JZFPzep4Y7gEtcaSDVzArL3BTw1fbpxKrplV/JLTGqCXUHv3gjC0DypAYbW28v0UQ83NA3yfbcYbwWZPihjWKmLQG/R71ulq9qjfOjyQ2TCpPQq6/gsuuQHD7Ymrlgkf1u8s89BqbppSrBOOUktIGSXr2gDR+ep9Vipd/oTfWHdsetqXoZm79QE7BIUyqVGCB+f4pY+YQqRkHQIvjBmETBeIfRoi2yz0UQoJhUqjMxO4VjysP49/14lB9r9WyQ2uJ9vOgR0q5CDxZ/L3Cp1JCeGwr4/ziF1jrHCvVcmpGsC2Dr X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 90c68199-d335-470a-5ba3-08dad7ead839 X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Dec 2022 00:34:47.9115 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TVLE1zm+kfvLrNpHXLqo+jM4cnDxSAlMvu5Wnz4YEAKK619QOmi2RNSaM6NIBc0SpXaYZIkUKA1G/IgMukDn7Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR21MB3819 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_NONE autolearn=no 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751513543367711084?= X-GMAIL-MSGID: =?utf-8?q?1751513543367711084?= No logic change to SNP/VBS guests. hv_isolation_type_tdx() wil be used to instruct a TDX guest on Hyper-V to do some TDX-specific operations, e.g. hv_do_hypercall() should use __tdx_hypercall(), and a TDX guest on Hyper-V should handle the Hyper-V Event/Message/Monitor pages specially. Signed-off-by: Dexuan Cui Reviewed-by: Kuppuswamy Sathyanarayanan --- Changes in v2: Added "#ifdef CONFIG_INTEL_TDX_GUEST and #endif" for hv_isolation_type_tdx() in arch/x86/hyperv/ivm.c. Simplified the changes in ms_hyperv_init_platform(). arch/x86/hyperv/ivm.c | 9 +++++++++ arch/x86/include/asm/hyperv-tlfs.h | 3 ++- arch/x86/include/asm/mshyperv.h | 3 +++ arch/x86/kernel/cpu/mshyperv.c | 7 ++++++- drivers/hv/hv_common.c | 6 ++++++ 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c index 1dbcbd9da74d..13ccb52eecd7 100644 --- a/arch/x86/hyperv/ivm.c +++ b/arch/x86/hyperv/ivm.c @@ -269,6 +269,15 @@ bool hv_isolation_type_snp(void) return static_branch_unlikely(&isolation_type_snp); } +#ifdef CONFIG_INTEL_TDX_GUEST +DEFINE_STATIC_KEY_FALSE(isolation_type_tdx); + +bool hv_isolation_type_tdx(void) +{ + return static_branch_unlikely(&isolation_type_tdx); +} +#endif + /* * hv_mark_gpa_visibility - Set pages visible to host via hvcall. * diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h index 6d9368ea3701..6c0a04d078f5 100644 --- a/arch/x86/include/asm/hyperv-tlfs.h +++ b/arch/x86/include/asm/hyperv-tlfs.h @@ -161,7 +161,8 @@ enum hv_isolation_type { HV_ISOLATION_TYPE_NONE = 0, HV_ISOLATION_TYPE_VBS = 1, - HV_ISOLATION_TYPE_SNP = 2 + HV_ISOLATION_TYPE_SNP = 2, + HV_ISOLATION_TYPE_TDX = 3 }; /* Hyper-V specific model specific registers (MSRs) */ diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h index 61f0c206bff0..8a2cafec4675 100644 --- a/arch/x86/include/asm/mshyperv.h +++ b/arch/x86/include/asm/mshyperv.h @@ -14,6 +14,7 @@ union hv_ghcb; DECLARE_STATIC_KEY_FALSE(isolation_type_snp); +DECLARE_STATIC_KEY_FALSE(isolation_type_tdx); typedef int (*hyperv_fill_flush_list_func)( struct hv_guest_mapping_flush_list *flush, @@ -32,6 +33,8 @@ extern u64 hv_current_partition_id; extern union hv_ghcb * __percpu *hv_ghcb_pg; +extern bool hv_isolation_type_tdx(void); + int hv_call_deposit_pages(int node, u64 partition_id, u32 num_pages); int hv_call_add_logical_proc(int node, u32 lp_index, u32 acpi_id); int hv_call_create_vp(int node, u64 partition_id, u32 vp_index, u32 flags); diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 46668e255421..941372449ff2 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -339,9 +339,14 @@ static void __init ms_hyperv_init_platform(void) } /* Isolation VMs are unenlightened SEV-based VMs, thus this check: */ if (IS_ENABLED(CONFIG_AMD_MEM_ENCRYPT)) { - if (hv_get_isolation_type() != HV_ISOLATION_TYPE_NONE) + if (hv_get_isolation_type() == HV_ISOLATION_TYPE_VBS || + hv_get_isolation_type() == HV_ISOLATION_TYPE_SNP) cc_set_vendor(CC_VENDOR_HYPERV); } + + if (IS_ENABLED(CONFIG_INTEL_TDX_GUEST) && + hv_get_isolation_type() == HV_ISOLATION_TYPE_TDX) + static_branch_enable(&isolation_type_tdx); } if (hv_max_functions_eax >= HYPERV_CPUID_NESTED_FEATURES) { diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c index ae68298c0dca..a9a03ab04b97 100644 --- a/drivers/hv/hv_common.c +++ b/drivers/hv/hv_common.c @@ -268,6 +268,12 @@ bool __weak hv_isolation_type_snp(void) } EXPORT_SYMBOL_GPL(hv_isolation_type_snp); +bool __weak hv_isolation_type_tdx(void) +{ + return false; +} +EXPORT_SYMBOL_GPL(hv_isolation_type_tdx); + void __weak hv_setup_vmbus_handler(void (*handler)(void)) { } From patchwork Wed Dec 7 00:33:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 30560 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3131668wrr; Tue, 6 Dec 2022 16:38:08 -0800 (PST) X-Google-Smtp-Source: AA0mqf7TIKqaWYOZiT6IXU6bm/QxYUScYACOpzU8OyCG0+MQ09TpQOaHuBlwIOIbci1elIHRB5L1 X-Received: by 2002:a17:906:5213:b0:7b6:12ee:b7fc with SMTP id g19-20020a170906521300b007b612eeb7fcmr24813122ejm.265.1670373488703; Tue, 06 Dec 2022 16:38:08 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1670373488; cv=pass; d=google.com; s=arc-20160816; b=iFA2yO5jJSKDZgEobwvAnFulYTYlZgY5fnW2A+brzrZHCSRUFKy5vZuQeos53TQ52g qtxSCiqLkuB03m4fhGtl8HtTptfMAxOB/IRUbwdX1e2LqIkqKxeslOPvKi6LSTPWTFTr TJJ1EHgjmbb3D+3YR1wJvSRZQECchP0/tMiKC6SDT8fjJhTY7naFMkX2KXQcH/EgVY3y nqZEHj8Jyt3b9CmonOtxZWdcbwL6levdCYG5U21jEbihW2ZBx8+IAZtRPyj9h8KzVn3I biZRqt+Aq99QGokSD+pzqgLNDmZIhptM9/Eyl9HVthXX5c34ToaMKOOoZosa12Anghlz ytLA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=lV9U12A7INP+IcfdGmMYALaYnazyZzxUi77JVmeXapA=; b=R/3N+LL/lm4p3eHJ2JOC2dCOzBdQKJptJ9G1NilxE1W+BlsHz6iNURdlp01JsZ+8Y7 Jfz9t47SGrRda7VihF2tap/l6djY+/2fxleQWF8++hDpWikxaF5sJiZEn8agokx4Oa4o Ej9r8Y9XgXXyEjU9IMKxlXUeCKKq95LcA2uV4l6sbBXyjbxAwcyTvIPItkuF78lT4KMh aAM3ZfSC2hJTlwM0huQTYXO8jHajIG0NvBZLs3TfeKypcZBGPJ9lrXOlzsWFN3REBUyp qtRjT3A7aRBjmnVK8p72LFUff/dfRQ2vyaKDYr9K8HiIFY8jJfkNyuCe0x1Go4MDZKxY j6eQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=XBSQijTA; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c8-20020a05640227c800b00462848f0cdbsi3605131ede.299.2022.12.06.16.37.45; Tue, 06 Dec 2022 16:38:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=XBSQijTA; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229825AbiLGAfc (ORCPT + 99 others); Tue, 6 Dec 2022 19:35:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43300 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229754AbiLGAe7 (ORCPT ); Tue, 6 Dec 2022 19:34:59 -0500 Received: from DM4PR02CU001-vft-obe.outbound.protection.outlook.com (mail-centralusazon11022016.outbound.protection.outlook.com [52.101.63.16]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E9CC6A479; Tue, 6 Dec 2022 16:34:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XjPN3rRT6nZEksaxqAM9MOuHTu4L/qXCdNKEdyBposTBCynRrxhIH4+zwvSfsvl5wqYTDwVmk4yiszY6ThPtJMznlRKB82Cuz1HSKw3fQVbANdt5ZdEKxmM72XqvjIz0pvtmsjkoUfUAErSnowRkAaOfXK0iTUG58Dc9bPczFyQ0UjtgEIBdiACEmhC+yJr/jRxCva2KAW6HVk3JotPAH2MruVwsS7yKr59XqiG3RXyASy5xptAisVnhSWzGk0xmbyzg/4EYrqIrjmkFIi+mhbd0EsTfKicHoo5w+bRVKCOmS3CnAIUIqkmcl8tm04y/5d8vD4xoCJmaG7ji2dj+pA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=lV9U12A7INP+IcfdGmMYALaYnazyZzxUi77JVmeXapA=; b=N2Q2tqbrSN5lwjd26Jg7pb74XBl6naJ28XaNfQG7JNSbMAwv7+pRNnZoGxAPE02U0w6cyICP6hHLDbuqMjtsh0LYyz0KwHA7ixN9/PpLOtEj8+WGTnIXpkXNLBsIVHpd691NPUC+fsoVHlUMHfcjOjzp97cv9DWkVTZN2Gyi3E4Z8I0N/BvBFkMaGYkJ6s1eM6l9n/UB7qaIPYufNeqrsT8c4yK8H+FhN6gkvsktnxxXUn9F3eBztM72P5TKTeEp1Do5d3qzjCFlxKY/iQV/rrIuVOR5MUku0Y7mZBrYIgfFcPcE9qpt9TLvjkbAr6CFgOynpoQmVCYqy2UST1jJwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lV9U12A7INP+IcfdGmMYALaYnazyZzxUi77JVmeXapA=; b=XBSQijTABLOfgL/Qyjqj5zKvZTLZeJK364mBBwU2eoegiZfTLdpqzaXRRKWg0KMv2FN4ZbUwL202dWnKUpFrRt0c7qSysetVeePZ0gXVtpk+mOsdkqUIf7mT/DagFx+FqnAtXmTRcsABslqspdWglQLK0HL+9an9XW/lsEmcV44= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; Received: from BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) by CY8PR21MB3819.namprd21.prod.outlook.com (2603:10b6:930:51::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.4; Wed, 7 Dec 2022 00:34:50 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020%8]) with mapi id 15.20.5924.004; Wed, 7 Dec 2022 00:34:50 +0000 From: Dexuan Cui To: ak@linux.intel.com, arnd@arndb.de, bp@alien8.de, brijesh.singh@amd.com, dan.j.williams@intel.com, dave.hansen@linux.intel.com, haiyangz@microsoft.com, hpa@zytor.com, jane.chu@oracle.com, kirill.shutemov@linux.intel.com, kys@microsoft.com, linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org, luto@kernel.org, mingo@redhat.com, peterz@infradead.org, rostedt@goodmis.org, sathyanarayanan.kuppuswamy@linux.intel.com, seanjc@google.com, tglx@linutronix.de, tony.luck@intel.com, wei.liu@kernel.org, x86@kernel.org, mikelley@microsoft.com Cc: linux-kernel@vger.kernel.org Subject: [PATCH v2 4/6] x86/tdx: Expand __tdx_hypercall() to handle more arguments Date: Tue, 6 Dec 2022 16:33:23 -0800 Message-Id: <20221207003325.21503-5-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221207003325.21503-1-decui@microsoft.com> References: <20221207003325.21503-1-decui@microsoft.com> X-ClientProxiedBy: MW4P222CA0001.NAMP222.PROD.OUTLOOK.COM (2603:10b6:303:114::6) To BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR2101MB1092:EE_|CY8PR21MB3819:EE_ X-MS-Office365-Filtering-Correlation-Id: 35f308d0-8566-4b97-e68c-08dad7ead9a8 X-LD-Processed: 72f988bf-86f1-41af-91ab-2d7cd011db47,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 36uiYtoFfq5T5zZi3003IUXuNtDP+2cpMYda5ApTeJ4NX9SkArRf8nJ73bZnWQxIoa/i6rancJ5HqJqASe8ZjiaFVlPzOHRaXRzidCKLRef6WZ5AAtIXyodcTGdpY7Gq3JOURsB2vvJcJLUehOm0OySI+xbxVs61ugTgwaHufjUl4F8uWMvRQlVZFOE1UahwUsIirJtfMlHVEA/Y3iJ1zAt/TSBQT23xlRJg7gartHckKcG/Kzk48NUSP9toRYLWtP4kODqrOV9MhttYneEveNsNsdbS/4PZ5GEW4nbsUcyTJsI8LYjTmFQuD760RbISLf5b0R6fqBO+4bES444uIcjAHLdElolAJDIRQO+bLtVXc4nWj1up/eSbk1Y2fL1Vk/W7qOuNpbjwPVcD+f7V70kQlfgdWL56Qtj8n1H6cYEVyW82O84UqE5kzN9saEEhe6L3myBNFHVtBw9cA+iJmsYNxgiPj4FWg/dNS9xqMkOctnszfMm1bnX7B1D/Me0RWgfDzbsli59enCmPQJrtXrmkvU69MWxD72EhWStmjB6QPFsB22SaMoaPJLtSdHC+T6KgS9aqKXWhlMPm9EuyvyjTiHD+V8rkSwg4WW36a/xcqeyXFjkWhleHiNa+FJDoyXklYPrcXnpsbCpZgoSLLpK4DJ0pYm0QkAH/G3e3Kd0HisFEuoM/ztKpEmrdqJ6cA9m0Ap8oX92SVtYDdeXOGMPijePziY1rvTP80BPsSGybdg/O9Shl61QNBw/AwChq X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR2101MB1092.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(39860400002)(376002)(396003)(366004)(346002)(451199015)(1076003)(83380400001)(6512007)(2616005)(82960400001)(186003)(82950400001)(6506007)(6666004)(52116002)(38100700002)(478600001)(6636002)(41300700001)(6486002)(2906002)(316002)(66946007)(66556008)(8676002)(4326008)(8936002)(10290500003)(86362001)(921005)(7416002)(5660300002)(36756003)(966005)(66476007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vGc76A86gxbQy6BfNndJunbgq+lAkbEF/NtnSJb6GAOHwykIxxmMpILLvqG/LOcoHUXSNrz3mCD1V0sjItvuwH1LaDzKCifB5+Vrg/g/gYI/WEqd5/yNWtwDEdonbsI8BXAM8rXK20nCwVvpLPAGAMcrZl59OjBg295i8/ei3c9CRYNb/MnsNHoHfuXIiWpiobUTyuGInyxf1iKMzbXSUwSmuG6dd7rtoDkHL7zDfyHn7E8GFY9je1LDiAUhf6FfZaDK/ubNID9pQp+l/KlCcKG4AHmFHhaO5bdUhDkrqjS2y5L0Q3I51jiQmuYm0v+bijB5fc6Jdr2F3NJDIKHV1in5p+5sQJmTpdURIFGnirDswvF8K58scBR4OUN0eEn3O+Pbb/vHXJC6+0O+HFFXRD0TJB3DoXMAF0TQbGX+xqBmuPA6ntV9QdCeIYAiFwHwA2+3BTNe/lagdOZuoMGw338LvZtIgD2qh7bCKdGnFIQZL5vNIXSfdi/ZzD+XWWjQoV4Q0FcnivJq1wlBJoUsID58zjf8WEUU7GFX7tc5+LvADEvAvjH3FtTTnrYDJIrsLT9mKPbWUW9beDZSGqzKw1/zXJXcexR+6rV13E63zDJFY5XDBDDmqu1wd2k5uwRT/f7sWOUscK7eesdRa1Uq114pvtYoOrwuwfId1CDIMcSZjrrsHYgnW3UU3F+/WAq1uJ1Q9yEKQu9wN6BKyCMj9nJFxN3BqHTMBco7dHOyQ3XtC1ofAUqZ6Z2Cxf8OE3a+hKK+7/8c96c1hWmWL/zJ5vVKCHlCWi55WX7HhJ4RlDUdjwvGUwDs52wi6UHP20wHwHbwXeeM+nMm4+D+poAm9sG0VHr6KEkbhx5a8UYD+YEryzaoVH8x0fk8WQ03BqAggVP9aRBWkc0uBDgEzcYBdK0LyT+60zUXXlIjByylIGbbObFwJKi7gO9gHc31FOCZweadcEfgZHpn2rKQ4djO/0Oo05OxIatIo7t6Gjghk3MBMRVvjgx/WyCj3iYgV2gHzSv0oRkS6kHlvV0ahCTneqvOGpu3pVdUfSJ0O5tuSGVyrL1+Mq9Gog+ZjkzPhdj1mA5BiKbCtl/F+4t3m52mU9ltWlUIoRQ5SAoUJdy+om1OUcyUCcorxbe90ovkxoYoe5Fq0xATIFzdQ6Ggry3ezdV3hlzJkV0tMm+FHqLwTRq9j8UkAI1YX3EWDhWRpzVnb895iLxSeTdh9jGh8CJHQwY2D+JkkiH9c0+sN1o44xcNV1sdDGYFKQGpEho4K6r/d5o1/xDQ1gyt404YlbjchvCflInIEOCV6G5A73T6lP5dLHgafSYyZPcRjAvRV5YkVWs3WbOC2l2Cm+dWibjbr5oSVjQlLiNdtroryRcrr/2qQCzi2mmvGSrTev2dQ3zZnV27/hEXZPkaA4lfC1+tGpQwJlX146L5kPkRje4mD8jlUPgycsw70rK9OUYLK+dIXh4pvX/f4lHnHbwKTUF4AUSwdk1bzMvDCEds6xzGXQIU8A9WnOzZRpSX6AMoA+8LaeaV9EhtvloxmTYI4MlfUP2PnnoHfP+X477wZ4D0VESHV+zAvinPcI80atxIIYUSYymgGoEY2C8xGSHxDB0f0gTyaYQ8/UcWesv9aT7qUx5UJF9P9f/64XZAQz3Q5Yuk X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 35f308d0-8566-4b97-e68c-08dad7ead9a8 X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Dec 2022 00:34:50.2578 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 81ZvtxXot1ofi6TfojBqRKG8KK7ZyKeyMhSYbTCC6Qc05reQTrm0HcoQ0YoEAQWW44oUlZBo7706mXvJN7I1QA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR21MB3819 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_NONE autolearn=no 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751513551533914913?= X-GMAIL-MSGID: =?utf-8?q?1751513551533914913?= From: "Kirill A. Shutemov" So far __tdx_hypercall() only handles six arguments for VMCALL. Expanding it to six more register would allow to cover more use-cases. Using RDI and RSI as VMCALL arguments requires more register shuffling. RAX is used to hold tdx_hypercall_args pointer and RBP stores flags. While there, fix typo in the comment on panic branch. Signed-off-by: Kirill A. Shutemov Reviewed-by: Dexuan Cui Tested-by: Dexuan Cui --- This patch is from Kirill. I'm posting the patch on behalf him: https://lwn.net/ml/linux-kernel/20221202214741.7vfmqgvgubxqffen@box.shutemov.name/ This is actually v1, but let's use v2 in the Subject to be consistent with the Subjects of the other patches. arch/x86/coco/tdx/tdcall.S | 82 ++++++++++++++++++++++--------- arch/x86/include/asm/shared/tdx.h | 6 +++ arch/x86/kernel/asm-offsets.c | 6 +++ 3 files changed, 70 insertions(+), 24 deletions(-) diff --git a/arch/x86/coco/tdx/tdcall.S b/arch/x86/coco/tdx/tdcall.S index f9eb1134f22d..64e57739dc9d 100644 --- a/arch/x86/coco/tdx/tdcall.S +++ b/arch/x86/coco/tdx/tdcall.S @@ -13,6 +13,12 @@ /* * Bitmasks of exposed registers (with VMM). */ +#define TDX_RDX BIT(2) +#define TDX_RBX BIT(3) +#define TDX_RSI BIT(6) +#define TDX_RDI BIT(7) +#define TDX_R8 BIT(8) +#define TDX_R9 BIT(9) #define TDX_R10 BIT(10) #define TDX_R11 BIT(11) #define TDX_R12 BIT(12) @@ -27,9 +33,9 @@ * details can be found in TDX GHCI specification, section * titled "TDCALL [TDG.VP.VMCALL] leaf". */ -#define TDVMCALL_EXPOSE_REGS_MASK ( TDX_R10 | TDX_R11 | \ - TDX_R12 | TDX_R13 | \ - TDX_R14 | TDX_R15 ) +#define TDVMCALL_EXPOSE_REGS_MASK \ + ( TDX_RDX | TDX_RBX | TDX_RSI | TDX_RDI | TDX_R8 | TDX_R9 | \ + TDX_R10 | TDX_R11 | TDX_R12 | TDX_R13 | TDX_R14 | TDX_R15 ) /* * __tdx_module_call() - Used by TDX guests to request services from @@ -124,19 +130,32 @@ SYM_FUNC_START(__tdx_hypercall) push %r14 push %r13 push %r12 + push %rbx + push %rbp + + movq %rdi, %rax + movq %rsi, %rbp + + /* Copy hypercall registers from arg struct: */ + movq TDX_HYPERCALL_r8(%rax), %r8 + movq TDX_HYPERCALL_r9(%rax), %r9 + movq TDX_HYPERCALL_r10(%rax), %r10 + movq TDX_HYPERCALL_r11(%rax), %r11 + movq TDX_HYPERCALL_r12(%rax), %r12 + movq TDX_HYPERCALL_r13(%rax), %r13 + movq TDX_HYPERCALL_r14(%rax), %r14 + movq TDX_HYPERCALL_r15(%rax), %r15 + movq TDX_HYPERCALL_rdi(%rax), %rdi + movq TDX_HYPERCALL_rsi(%rax), %rsi + movq TDX_HYPERCALL_rbx(%rax), %rbx + movq TDX_HYPERCALL_rdx(%rax), %rdx + + push %rax /* Mangle function call ABI into TDCALL ABI: */ /* Set TDCALL leaf ID (TDVMCALL (0)) in RAX */ xor %eax, %eax - /* Copy hypercall registers from arg struct: */ - movq TDX_HYPERCALL_r10(%rdi), %r10 - movq TDX_HYPERCALL_r11(%rdi), %r11 - movq TDX_HYPERCALL_r12(%rdi), %r12 - movq TDX_HYPERCALL_r13(%rdi), %r13 - movq TDX_HYPERCALL_r14(%rdi), %r14 - movq TDX_HYPERCALL_r15(%rdi), %r15 - movl $TDVMCALL_EXPOSE_REGS_MASK, %ecx /* @@ -148,14 +167,14 @@ SYM_FUNC_START(__tdx_hypercall) * HLT operation indefinitely. Since this is the not the desired * result, conditionally call STI before TDCALL. */ - testq $TDX_HCALL_ISSUE_STI, %rsi + testq $TDX_HCALL_ISSUE_STI, %rbp jz .Lskip_sti sti .Lskip_sti: tdcall /* - * RAX==0 indicates a failure of the TDVMCALL mechanism itself and that + * RAX!=0 indicates a failure of the TDVMCALL mechanism itself and that * something has gone horribly wrong with the TDX module. * * The return status of the hypercall operation is in a separate @@ -165,30 +184,45 @@ SYM_FUNC_START(__tdx_hypercall) testq %rax, %rax jne .Lpanic - /* TDVMCALL leaf return code is in R10 */ - movq %r10, %rax + pop %rax /* Copy hypercall result registers to arg struct if needed */ - testq $TDX_HCALL_HAS_OUTPUT, %rsi + testq $TDX_HCALL_HAS_OUTPUT, %rbp jz .Lout - movq %r10, TDX_HYPERCALL_r10(%rdi) - movq %r11, TDX_HYPERCALL_r11(%rdi) - movq %r12, TDX_HYPERCALL_r12(%rdi) - movq %r13, TDX_HYPERCALL_r13(%rdi) - movq %r14, TDX_HYPERCALL_r14(%rdi) - movq %r15, TDX_HYPERCALL_r15(%rdi) + movq %r8, TDX_HYPERCALL_r8(%rax) + movq %r9, TDX_HYPERCALL_r9(%rax) + movq %r10, TDX_HYPERCALL_r10(%rax) + movq %r11, TDX_HYPERCALL_r11(%rax) + movq %r12, TDX_HYPERCALL_r12(%rax) + movq %r13, TDX_HYPERCALL_r13(%rax) + movq %r14, TDX_HYPERCALL_r14(%rax) + movq %r15, TDX_HYPERCALL_r15(%rax) + movq %rdi, TDX_HYPERCALL_rdi(%rax) + movq %rsi, TDX_HYPERCALL_rsi(%rax) + movq %rbx, TDX_HYPERCALL_rbx(%rax) + movq %rdx, TDX_HYPERCALL_rdx(%rax) .Lout: + /* TDVMCALL leaf return code is in R10 */ + movq %r10, %rax + /* * Zero out registers exposed to the VMM to avoid speculative execution * with VMM-controlled values. This needs to include all registers - * present in TDVMCALL_EXPOSE_REGS_MASK (except R12-R15). R12-R15 - * context will be restored. + * present in TDVMCALL_EXPOSE_REGS_MASK, except RBX, and R12-R15 which + * will be restored. */ + xor %r8d, %r8d + xor %r9d, %r9d xor %r10d, %r10d xor %r11d, %r11d + xor %rdi, %rdi + xor %rsi, %rsi + xor %rdx, %rdx /* Restore callee-saved GPRs as mandated by the x86_64 ABI */ + pop %rbp + pop %rbx pop %r12 pop %r13 pop %r14 diff --git a/arch/x86/include/asm/shared/tdx.h b/arch/x86/include/asm/shared/tdx.h index e53f26228fbb..8068faa52de1 100644 --- a/arch/x86/include/asm/shared/tdx.h +++ b/arch/x86/include/asm/shared/tdx.h @@ -22,12 +22,18 @@ * This is a software only structure and not part of the TDX module/VMM ABI. */ struct tdx_hypercall_args { + u64 r8; + u64 r9; u64 r10; u64 r11; u64 r12; u64 r13; u64 r14; u64 r15; + u64 rdi; + u64 rsi; + u64 rbx; + u64 rdx; }; /* Used to request services from the VMM */ diff --git a/arch/x86/kernel/asm-offsets.c b/arch/x86/kernel/asm-offsets.c index 437308004ef2..9f09947495e2 100644 --- a/arch/x86/kernel/asm-offsets.c +++ b/arch/x86/kernel/asm-offsets.c @@ -75,12 +75,18 @@ static void __used common(void) OFFSET(TDX_MODULE_r11, tdx_module_output, r11); BLANK(); + OFFSET(TDX_HYPERCALL_r8, tdx_hypercall_args, r8); + OFFSET(TDX_HYPERCALL_r9, tdx_hypercall_args, r9); OFFSET(TDX_HYPERCALL_r10, tdx_hypercall_args, r10); OFFSET(TDX_HYPERCALL_r11, tdx_hypercall_args, r11); OFFSET(TDX_HYPERCALL_r12, tdx_hypercall_args, r12); OFFSET(TDX_HYPERCALL_r13, tdx_hypercall_args, r13); OFFSET(TDX_HYPERCALL_r14, tdx_hypercall_args, r14); OFFSET(TDX_HYPERCALL_r15, tdx_hypercall_args, r15); + OFFSET(TDX_HYPERCALL_rdi, tdx_hypercall_args, rdi); + OFFSET(TDX_HYPERCALL_rsi, tdx_hypercall_args, rsi); + OFFSET(TDX_HYPERCALL_rbx, tdx_hypercall_args, rbx); + OFFSET(TDX_HYPERCALL_rdx, tdx_hypercall_args, rdx); BLANK(); OFFSET(BP_scratch, boot_params, scratch); From patchwork Wed Dec 7 00:33:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 30562 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3132063wrr; Tue, 6 Dec 2022 16:39:24 -0800 (PST) X-Google-Smtp-Source: AA0mqf6XdLFab0mtWmnkwbhnAE1nS3+CHLvIUaTf3wKDVz+icunHgCgTlifjOqweQI6tVUsfPmSr X-Received: by 2002:a17:90a:9101:b0:219:ea9c:10e5 with SMTP id k1-20020a17090a910100b00219ea9c10e5mr8702167pjo.65.1670373564636; Tue, 06 Dec 2022 16:39:24 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1670373564; cv=pass; d=google.com; s=arc-20160816; b=sp3XE3zDzcJzaKfgO8TjjkNWF1/LTCdwRYFQ0r4v2P+CUDQDjIZotjdtQWfIdqQoUH LAo6Swu35AXE8qmb33jGSLaU3z3VGJFzGZuLpPUG/XzouO4vrbvC85aceaqXHd5CgfW8 isE9k/15KmXadd0dXakXc9XTeZhEAuhMQG5ZPl7yF7/lq77GGhA0+XuePn7fuQYiUsap 49O8FrtLh7J/9nGE/l89y7n+WM6Wo8E6ob45tPYQojQJ/K9zX4qJx2UXr2yZEea+dfV0 K5rBhK7eKRFti9498E37T2i/KyCDgRPX/L+1Rfpgo7ndJISz8o6/V4EEJKFx2AnBcybP 27+g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=H5hyFVyD5Pl8VoiZaRKapfW+Nyo01fWHDixlPcPEe/w=; b=NuBCnWLG29QWBwOEfqUEicBes7CUoH3+LMQ+4mKYMVOKDac98bp/+xWLLCVu48emTr qB9CcLjvl/xt/gEeCo/jhz2+m+VGH0mBLkhtWY9ewqzcGrcKZbx3kX6Y3sD+rp6eZEJL sEeq+Uj1bzPYc+abdFtMq/zCnr6ri3FtlWzU+2bM28GxqY9m2VrduPycOY6RryG1q08R aadhYur88DAVJECCRGY/hEcoilrXQ3Z4vZ/FKg2eLQgTYzTdEdf1Cdin0T2xZxT744HF fT5coTESKxdsn2TmXb5eg+L+uXnd3pUbOpBxiEHJaXks40iSSRHv/VFc8XunokqE30W6 Wt9g== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=Cxpt1Hjj; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x7-20020a170902ec8700b00189aab9cdb8si20002941plg.282.2022.12.06.16.39.10; Tue, 06 Dec 2022 16:39:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=Cxpt1Hjj; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229776AbiLGAf1 (ORCPT + 99 others); Tue, 6 Dec 2022 19:35:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229762AbiLGAfA (ORCPT ); Tue, 6 Dec 2022 19:35:00 -0500 Received: from DM4PR02CU001-vft-obe.outbound.protection.outlook.com (mail-centralusazon11022021.outbound.protection.outlook.com [52.101.63.21]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2D7AE2FA5F; Tue, 6 Dec 2022 16:34:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dpRpPeEZ+EJmwUA8YIxmulmq0uT/ndbRkhWyiNHCa/UDXshwH8DWxFnIAglFQelDC34ROepYzYbHg/sL6ZUXy59NllGUnV4r3lFXw48WlrQohdJRi/Tnicqf0ivQ7cXWUv2O4hYd7Om4QUM+QZagaj8QlmS4ZS/mTIjbW9pRJH+jwSkHdZms5NC0et5hJmCnD8GUc2S7MIaklNbVRrARBIZkhIj84FUTMhfMp/gGbHD+Q15YG5SrayF5D67lU6LsHPaMpyOGyNQYaiVrzv4UIOwfUhwP4gMpUjiNmgtAx/9ddiYwjoiotFJyZqV4QRBjC2oHZiyo8UmhhuEZqRuHUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=H5hyFVyD5Pl8VoiZaRKapfW+Nyo01fWHDixlPcPEe/w=; b=dEi7pkR7AIGcQ+tXkqALjscgdAo6RFWRlHsAsVHl00tTKIofPRnNFsqW1cQV2HV+1SUBfd7lXRsbsQdlF/EgujqR5mPWOkzdzewHmhoDJiRF28kk8da750wRMc1fGPoNjuYEY3tQ6mKyR9+vqPI3QV48aPkQnYashHcQtCaAA2sMmqieTEAJbEQEl7zKkgk1pwVCYVE9akVcBpO3r4wqGxKHVZdRs2NtBZRrhpHihBhQA8Dnw6qRs0kfNcrt6naLFLQm78LIbzzo2Nk3xW2FmliMFAk7wydQtpXaJ2aQy3V4s+zCpf6ReRa3lQZvnnCJbPNpeYef50YxY9ZGpxNpqQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H5hyFVyD5Pl8VoiZaRKapfW+Nyo01fWHDixlPcPEe/w=; b=Cxpt1HjjLovDxHGVCdoi+AvZjOJ5iOJ973epwHuPM9Mwj5LESZrQJUeOeRME9VgYiLZH7KyzNIfK/tezAvfYSOb6sQ1NfySg1geiJautrFRvva6hfqTjDAQ7zGdZviZaPLiFg/xAvT7U+bbTnCe8+gb1IINuHXoe57D0z0w0UtQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; Received: from BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) by CY8PR21MB3819.namprd21.prod.outlook.com (2603:10b6:930:51::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.4; Wed, 7 Dec 2022 00:34:52 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020%8]) with mapi id 15.20.5924.004; Wed, 7 Dec 2022 00:34:52 +0000 From: Dexuan Cui To: ak@linux.intel.com, arnd@arndb.de, bp@alien8.de, brijesh.singh@amd.com, dan.j.williams@intel.com, dave.hansen@linux.intel.com, haiyangz@microsoft.com, hpa@zytor.com, jane.chu@oracle.com, kirill.shutemov@linux.intel.com, kys@microsoft.com, linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org, luto@kernel.org, mingo@redhat.com, peterz@infradead.org, rostedt@goodmis.org, sathyanarayanan.kuppuswamy@linux.intel.com, seanjc@google.com, tglx@linutronix.de, tony.luck@intel.com, wei.liu@kernel.org, x86@kernel.org, mikelley@microsoft.com Cc: linux-kernel@vger.kernel.org, Dexuan Cui Subject: [PATCH v2 5/6] x86/hyperv: Support hypercalls for TDX guests Date: Tue, 6 Dec 2022 16:33:24 -0800 Message-Id: <20221207003325.21503-6-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221207003325.21503-1-decui@microsoft.com> References: <20221207003325.21503-1-decui@microsoft.com> X-ClientProxiedBy: MW4P222CA0001.NAMP222.PROD.OUTLOOK.COM (2603:10b6:303:114::6) To BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR2101MB1092:EE_|CY8PR21MB3819:EE_ X-MS-Office365-Filtering-Correlation-Id: c31f66ed-9e56-498d-427f-08dad7eadb07 X-LD-Processed: 72f988bf-86f1-41af-91ab-2d7cd011db47,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2sGuLcG1+l8g/cdBD1LdyT4FHwUlSkl+wh0IJnrJuZ2yx46+Q2TUmnK6aIAbGEUDL/QEBcbDfMZ1A/LRRUlxBVrRiHYUirXAiWnABdVJuwn4zJwnIyGj7zfjMVgcwZwaeDwocumSZWwpo18TccQpNq71YmaDfH7ULBO0TwXC2xcWuFANE7+G2sNaPIZUfsCeF6c2lSmIJm4SPwodbYNiiHJHvZB5XxQHZZy6MRA3Lz/y0+YMpJ2NSjYMUkwhgEFXGoQSBebzbVJ8TbE6eRh/s1NKb6DkH1qWdPbfVEOdwgtJEWa/lEtclJB7rakyz8yfiWgX5Zp4UKIJV601uypNLYiuX4ELWpz7ue8fb+d9YfyrUWwi4JayZAb2C8/h9G9HCs9TGeEJD12DlMvwbx+SBPzO35wtmhU6C/NRtnjLsYSH3zYopllXK5tA7Ivv1Gl6Dny06tfNsV++uIXspD+8zTEdHNAqjn1j56HCS2baTDyyvzI01uuC5Y/IoVMbCW5ujKaa8M6dlqLwrzMxeMsOU99aBKG9Z0WDYiHst1CChfQ0/nbBDXrAezUQ1jfFjIEC6lzHcuGdHLeRyOL/j2R1cAqRj3QSTm3vbvo1B0VoP6GoZ1nd476e6yYu0r53f6tmwAuvLZMSZFGdUbrvfDhTKo260bgVcioFjPxk6HcZ3Sa+x48o94UkzutE34JbEG+GyytT04Om8fg7xdaX8Agnny60sWd2tp6gDm+3WpxjRqc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR2101MB1092.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(39860400002)(376002)(396003)(366004)(346002)(451199015)(1076003)(83380400001)(6512007)(2616005)(82960400001)(186003)(82950400001)(6506007)(6666004)(107886003)(52116002)(38100700002)(478600001)(6636002)(41300700001)(6486002)(2906002)(316002)(66946007)(66556008)(8676002)(4326008)(8936002)(10290500003)(86362001)(921005)(7416002)(5660300002)(36756003)(66476007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: xr+eAPSRLkdbwHH30M3Dd56eW8nGThiG4KgeQRM9AGaVHlMRBChL/47KCfx4kuBUJX4X2fVTdGlYgfyA5FmRPVRggtHqjhTWQ9K+afhP6KJdrb+zmdu7RH6BtnNXimmbDlza4UgCA+elEBBCd5UCO9rkuOlazYetu+xhi5a/PZEzfbvK9PSRKI4LRcJjizxrZDpbyHRpazl+jwsD1/fn250u+NfSTKw2irk4y9ZjrKp8oeg5+BflDMB7G6aU6WxU38qo0mFaPzpa7xlGAucWMeQvPN1QxIwoHnzCZq0rxRk59Nx5Gh9FVVQ/5iSEr/EJ4j9Xo4xNtRSyyLX0E6jx6GYs6U9CLbIl7VDuVK5vjjbkDHU0goyq7Y51NSbuAqwtI0G8HT5dGFbMpHRu8a64mJA8LbS16PzFe5IXAU3xrUqXMc/0lRGqBZT7zmXskzzjzber+ATlfGPSCF6+nFmVOUojIK9NqjuznAW96fazArRA/w8FBvgIwN7AgN3Ger+AO2f8Urher6NFtBmfQ7LizXRObsHdvjJltkKI7SklrEbxiUD39P7z/Op+g29Mb/sI8+vQim5/uZWFDx6KMxC9ydUKk6GQ89M1siD5gyW0gwwUSj3IN7fjdfOU1tEhPrtYXaaRLnK9oR3gBRivjqweL2/G+QOUjAGqg6GSB+7TUnQZy819SDbGp7yMMlXAHuvy7ZgX2Ahn+fzD2y1DRCwWhTZP7BsbMY1fCxGkcr2M8L8kzqCWDK3mA73F8Ejh8hO0wirTDMSWoDIuN8SiQmBTO3Qhooe7vYLSuotBQuP8i6iXxXjas/GyBE8WwHhilEugRhaL48HutYQrBX6bdKTQGXgT46P5kYqj1uzJyowm/Qo1oQeSv7aBFMlrGwKM1O5+I4t5CuCXyB7AbuJP73Sf8/NEIgczJ5uQ8+wVmBfSmCRcHb6ZT7GaHDe9cQYc67SU7mUoeSecchO+nUiHk00VlNEHEZGu+HtQ2euglaQG7S8qnctisod9Qn/4Zt4AWA5yeJgd52nj76lEEyztQEqxC1a1XAkK68B6qtUC9GVL7pgF1sRchg0bk2iq/RUuG5xD3mci+HqFmk5ickzR2df/BaYp9D9N8YrtzCQbZUyXNe4okFq/mFelIqYU05BMYSpiZi+xFWScXjv3UT0bxQd/q78k2+iCjuPKJHVB3zol5k2ZxufKmjHIbWrChKKwdYNE+an5toEddXlN3wXed/vbAWKbYRYtDdR4XEYI/aaQX3+S8mwMOy0WFVi3KXc9efQSv2eMB7vakzhBPXjEDT7cwdVxSFaqjVd5TRFtOFWFf3ZqMpk3xxoHPqDM3/42HzqoOfviA86Q508SDy99wnXYHmWT87tn1d6n8PwSQw133DchYhxBDvB6+CUErD6f5E2ZoGFk+iI790V+4B7khYs3sOPFIPzIcIrsT+ENfyZPypPrsJ/h0xQT5nt+3g8d9ykxUSRab6JHhIMLdsh6w4S+6H88+PV3dwkgWYji9fu5W89+mQgaZOYvOhvQAXvdGs3zqDf30HZYRxCZ8gaBFr9hGoMyCwE9xphKqybpY+Zcb8gU1Ia71iOB5XjiZjGTFhtVVuC+cxN5BOYn5ViLO89Gtid5m5QSrpotGGt8/hjGjsubvPw53N/7LSx/ol9f6OpD X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: c31f66ed-9e56-498d-427f-08dad7eadb07 X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Dec 2022 00:34:52.6489 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TuxQfMtisZLf1IBPBLVIUP/nly/DJ+SyzBPz/vncopWWDkIvTEA3aJTM9LvgRa31onTLcaDNQd9XPm0AnV33wg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR21MB3819 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_NONE autolearn=no 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751513631096821243?= X-GMAIL-MSGID: =?utf-8?q?1751513631096821243?= A TDX guest uses the GHCI call rather than hv_hypercall_pg. In hv_do_hypercall(), Hyper-V requires that the input/output addresses must have the cc_mask. Signed-off-by: Dexuan Cui --- Changes in v2: Implemented hv_tdx_hypercall() in C rather than in assembly code. Renamed the parameter names of hv_tdx_hypercall(). Used cc_mkdec() directly in hv_do_hypercall(). arch/x86/hyperv/hv_init.c | 8 ++++++++ arch/x86/hyperv/ivm.c | 14 ++++++++++++++ arch/x86/include/asm/mshyperv.h | 17 +++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index a823fde1ad7f..c0ba53ad8b8e 100644 --- a/arch/x86/hyperv/hv_init.c +++ b/arch/x86/hyperv/hv_init.c @@ -430,6 +430,10 @@ void __init hyperv_init(void) /* Hyper-V requires to write guest os id via ghcb in SNP IVM. */ hv_ghcb_msr_write(HV_X64_MSR_GUEST_OS_ID, guest_id); + /* A TDX guest uses the GHCI call rather than hv_hypercall_pg. */ + if (hv_isolation_type_tdx()) + goto skip_hypercall_pg_init; + hv_hypercall_pg = __vmalloc_node_range(PAGE_SIZE, 1, VMALLOC_START, VMALLOC_END, GFP_KERNEL, PAGE_KERNEL_ROX, VM_FLUSH_RESET_PERMS, NUMA_NO_NODE, @@ -469,6 +473,7 @@ void __init hyperv_init(void) wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64); } +skip_hypercall_pg_init: /* * hyperv_init() is called before LAPIC is initialized: see * apic_intr_mode_init() -> x86_platform.apic_post_init() and @@ -604,6 +609,9 @@ bool hv_is_hyperv_initialized(void) if (x86_hyper_type != X86_HYPER_MS_HYPERV) return false; + /* A TDX guest uses the GHCI call rather than hv_hypercall_pg. */ + if (hv_isolation_type_tdx()) + return true; /* * Verify that earlier initialization succeeded by checking * that the hypercall page is setup diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c index 13ccb52eecd7..07e4253b5809 100644 --- a/arch/x86/hyperv/ivm.c +++ b/arch/x86/hyperv/ivm.c @@ -276,6 +276,20 @@ bool hv_isolation_type_tdx(void) { return static_branch_unlikely(&isolation_type_tdx); } + +u64 hv_tdx_hypercall(u64 control, u64 param1, u64 param2) +{ + struct tdx_hypercall_args args = { }; + + args.r10 = control; + args.rdx = param1; + args.r8 = param2; + + (void)__tdx_hypercall(&args, TDX_HCALL_HAS_OUTPUT); + + return args.r11; +} +EXPORT_SYMBOL_GPL(hv_tdx_hypercall); #endif /* diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h index 8a2cafec4675..a4d665472d9e 100644 --- a/arch/x86/include/asm/mshyperv.h +++ b/arch/x86/include/asm/mshyperv.h @@ -10,6 +10,7 @@ #include #include #include +#include union hv_ghcb; @@ -39,6 +40,12 @@ int hv_call_deposit_pages(int node, u64 partition_id, u32 num_pages); int hv_call_add_logical_proc(int node, u32 lp_index, u32 acpi_id); int hv_call_create_vp(int node, u64 partition_id, u32 vp_index, u32 flags); +u64 hv_tdx_hypercall(u64 control, u64 param1, u64 param2); + +/* + * If the hypercall involves no input or output parameters, the hypervisor + * ignores the corresponding GPA pointer. + */ static inline u64 hv_do_hypercall(u64 control, void *input, void *output) { u64 input_address = input ? virt_to_phys(input) : 0; @@ -46,6 +53,10 @@ static inline u64 hv_do_hypercall(u64 control, void *input, void *output) u64 hv_status; #ifdef CONFIG_X86_64 + if (hv_isolation_type_tdx()) + return hv_tdx_hypercall(control, + cc_mkdec(input_address), + cc_mkdec(output_address)); if (!hv_hypercall_pg) return U64_MAX; @@ -83,6 +94,9 @@ static inline u64 hv_do_fast_hypercall8(u16 code, u64 input1) u64 hv_status, control = (u64)code | HV_HYPERCALL_FAST_BIT; #ifdef CONFIG_X86_64 + if (hv_isolation_type_tdx()) + return hv_tdx_hypercall(control, input1, 0); + { __asm__ __volatile__(CALL_NOSPEC : "=a" (hv_status), ASM_CALL_CONSTRAINT, @@ -114,6 +128,9 @@ static inline u64 hv_do_fast_hypercall16(u16 code, u64 input1, u64 input2) u64 hv_status, control = (u64)code | HV_HYPERCALL_FAST_BIT; #ifdef CONFIG_X86_64 + if (hv_isolation_type_tdx()) + return hv_tdx_hypercall(control, input1, input2); + { __asm__ __volatile__("mov %4, %%r8\n" CALL_NOSPEC From patchwork Wed Dec 7 00:33:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 30561 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp3131820wrr; Tue, 6 Dec 2022 16:38:34 -0800 (PST) X-Google-Smtp-Source: AA0mqf4hGN52GA662zoMiloH0WQCDA4pJQD6Sah4HodUJrw6huXg7YXpCkLO7eEVQ96YJdEBaNa1 X-Received: by 2002:a05:6402:64e:b0:46c:af80:636c with SMTP id u14-20020a056402064e00b0046caf80636cmr10508595edx.129.1670373514351; Tue, 06 Dec 2022 16:38:34 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1670373514; cv=pass; d=google.com; s=arc-20160816; b=Q8aNNPKo666AsIoSkBkqn3ovfPeIrZltE7ShWtoif+vLnqRYxLk+Ka2zh4c3LsfGMa vIIWMuysf2q004eqCgLh0A+pSKlkwP5ZGJ2ufYPmnp8A0aKHnCZPJKW4nT6cM7UQqh3Y IC/Wwe9NEMvTTZIjXiatQn8tbzCt26qV2+YupBILVjfhxuRoceKAJQLgYhpIa1w4U+Gn 9iZivqJyQ7d/3I6d/wqbOVib4SdpME5NkiQjlGRRlFU5yzOq6lz1D4DnWUTi47aw9VJn azS5RDnc/h1BYO1wdTmuAfKBKaLbqIsy+Iuo6qOCxtp3j8v05j/5s2T6pgVGsSexR1Sg asrQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=gUTRmA60Vq98IDE01EHjU8BeZhqfiuuHC4LL83YbCd0=; b=mePUTK0v4Q9QnasvLCj+1/nCmLdJdvumgRxzo/j3iBQYm41qWazYQW2UD/j5vTtUcZ f7XpVb7+AWfH91qOlBqshr9e6b8XZyGsJbdslqIhc2FytNgLjwJq7zKTaIcaxnPd/WWw OFBK+mKXLl0ECCeSiJ9ABUoG+AMpPY0iHD2iKI1vAhg1S+mtbAU1hJwJkLbSe2TfPLiv iMSZmJi8194B3SFYcJCi/NCouQOrDB4r8hQ84xtH10jHxlZtSBpj+hkvMX0xvZx5Phnf GJY/K9ldcpSTNipPSE6OKD1D/qc5K5shkXJdHqMY96Scz5s8YJ+CYlb2bmpXggwbEFvT rWtg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=K6cCTiLk; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dn18-20020a17090794d200b007c08fa910a4si2792296ejc.557.2022.12.06.16.38.12; Tue, 06 Dec 2022 16:38:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=K6cCTiLk; arc=pass (i=1 spf=pass spfdomain=microsoft.com dkim=pass dkdomain=microsoft.com dmarc=pass fromdomain=microsoft.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229838AbiLGAfe (ORCPT + 99 others); Tue, 6 Dec 2022 19:35:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43246 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229773AbiLGAfB (ORCPT ); Tue, 6 Dec 2022 19:35:01 -0500 Received: from DM4PR02CU001-vft-obe.outbound.protection.outlook.com (mail-centralusazon11022027.outbound.protection.outlook.com [52.101.63.27]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9BC3F30576; Tue, 6 Dec 2022 16:34:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mrSuJHWZrZNjgwRSOfrmBHAuMZ56Eje+uhws3gufx5G/jEtttMxa+XZbYxLT82NKBtF9wwV7V1V7dyqLTxNMorYs9Pp44IBdRfLpjjZAxZ4Q6nQ70I5pVK6cnHM8l4lvXkkARXDtDhPPQn4h2AYW91KzofTU1ziaDtbyRqL3/iNwkNd+RYSFDybF9Twf4u84oer9MMyVxTe3q4FO0eIT3MmYhLrkunS6h3uxrYNlX4e7TfSM+W8B8i8wnF1cJxPhKlcHntZXS0iECNR8E8RjDeeqLd9Hb3Am/1sdJHJMR7nvQurcCrrVKR9j9SmjaN07TWU8xnfHJbjCUXJVG3zp9A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gUTRmA60Vq98IDE01EHjU8BeZhqfiuuHC4LL83YbCd0=; b=Pxq4B/AAwGV6dkHK6eUyWjtiKicfiFWZVMw6jqzNEXx3e2B3pjl5SpQV2CFJXmNU/RvGWfos1tE2btLWIuGoghfD01MTJt/kche2/buWSx92WSSfgCyIxmGs3aKUdXW6SdzNVF6801AA7Yf0nBSjcAZeDwqShNqZRB2D3vv+dFhrXc3SBQgDIPo8iT15hKLlALjgU+3GaAu7MjeSwBichcNrKANx7tqw8hCqPN1gCAx3aCpk06n6bT6eNs4f99vOgpssw7iP1OAgMuzFH8aYwi6udQmvAYqFDTFec8DsXXQai1fye9AB+mtTF8Q6HYMwIQE/1Xz4lfhK7q01Kr8bKA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microsoft.com; dmarc=pass action=none header.from=microsoft.com; dkim=pass header.d=microsoft.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gUTRmA60Vq98IDE01EHjU8BeZhqfiuuHC4LL83YbCd0=; b=K6cCTiLkaJYyhKzF7g7kAM6yZ89O3YHeQFnWncpozgM2Ksdbvw+al6qc9oF0ImQSK6Rwpr/bNZQohq537JztK/i1ppsMbM3Z6Sp/EgvwNeAQtPVRR6THTmMgSd1DFz/0guYeeXhI4YDVs9xNp7MD4ELvfQI6qwX8HG2hqnBT9iY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microsoft.com; Received: from BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) by CY8PR21MB3819.namprd21.prod.outlook.com (2603:10b6:930:51::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5924.4; Wed, 7 Dec 2022 00:34:55 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::ae03:5b1e:755c:a020%8]) with mapi id 15.20.5924.004; Wed, 7 Dec 2022 00:34:55 +0000 From: Dexuan Cui To: ak@linux.intel.com, arnd@arndb.de, bp@alien8.de, brijesh.singh@amd.com, dan.j.williams@intel.com, dave.hansen@linux.intel.com, haiyangz@microsoft.com, hpa@zytor.com, jane.chu@oracle.com, kirill.shutemov@linux.intel.com, kys@microsoft.com, linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org, luto@kernel.org, mingo@redhat.com, peterz@infradead.org, rostedt@goodmis.org, sathyanarayanan.kuppuswamy@linux.intel.com, seanjc@google.com, tglx@linutronix.de, tony.luck@intel.com, wei.liu@kernel.org, x86@kernel.org, mikelley@microsoft.com Cc: linux-kernel@vger.kernel.org, Dexuan Cui Subject: [PATCH v2 6/6] Drivers: hv: vmbus: Support TDX guests Date: Tue, 6 Dec 2022 16:33:25 -0800 Message-Id: <20221207003325.21503-7-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221207003325.21503-1-decui@microsoft.com> References: <20221207003325.21503-1-decui@microsoft.com> X-ClientProxiedBy: MW4P222CA0001.NAMP222.PROD.OUTLOOK.COM (2603:10b6:303:114::6) To BL0PR2101MB1092.namprd21.prod.outlook.com (2603:10b6:207:30::23) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR2101MB1092:EE_|CY8PR21MB3819:EE_ X-MS-Office365-Filtering-Correlation-Id: 4f3fd2d9-7240-43b1-d591-08dad7eadc76 X-LD-Processed: 72f988bf-86f1-41af-91ab-2d7cd011db47,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qzuZDPjUW/7oqeRfo+IBVt9A4ZuHKG/TzdMN/FWevsCXYKDWWfVSURkvYlziRrrNuq7xRtt9qAWgvr8ZYTCoS3vXecMdsBV/ADh8nPg3NRbWcNeK6UygtWfI+v3krMg1OWZBjdrjL+p9wghVUqwzzALq7vmlL6m6Jejw9hZk10T45Nu7QRlAfpRzdSihQ6+gl8fPoOU7hmv7ny6qn4Arx7P40ZiuJDapGsRrdwdbWp79sJG5nnPs063eGdyQY78cFYvxpV7NbAP96TOOQ08y08/dYuCle9TrptGo5qweRiHZGnOm0FiZKWd8yDLPAyL10aLiPNRNmXADbS4pwLWqINHXkc+AECHbnd72Nd2r/Yrh/HK/Rqdcj8h/xGg5GI2TqtYOTPeKRyS28MYq/8ApGuxsyaPQLJZ8MeK9nhJ18QyGVQa+APPduGds/KdT9GafpoGAHq1rIx6TBGdsqVqgeo9EoJ4ScgX6QSuBwgxueuPdIemvrXSXSkvy1/QQUYuMFhQJwVjfy346kob21LT0dPh6Vt5SEmkRM5YbsZfACsfEtISAc/XZbk4HQT22OliskU/S2QnYDQJi3ALzPnpAzp9BPAIx9vqqI1dxHh64sPgwId3+XYor7p53r0B4xqlqHd49gHu4f704F3ShHbG9G2GYpYSalJ6eAbq0cpNHBBagaJDT1rfWID5CQTrq/7F5f0/qCKuZCgznW8vY1HAaC70iRPHVuQmCtvoRANvJoqo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR2101MB1092.namprd21.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(39860400002)(376002)(396003)(366004)(346002)(451199015)(1076003)(83380400001)(6512007)(2616005)(82960400001)(186003)(82950400001)(6506007)(6666004)(107886003)(52116002)(38100700002)(478600001)(6636002)(41300700001)(6486002)(2906002)(316002)(66946007)(66556008)(8676002)(4326008)(8936002)(10290500003)(86362001)(921005)(7416002)(5660300002)(36756003)(66476007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: w0ih4t2fvw5FwJE8F+WwzF5vWkL/tza0Q8HaUlnrfLgLZPTwQWFvgF6P4HTOHPkLyjjuHLsWAXaP1bUHr7sf3MOIQfNeab3P9Trv1dcwu+dEy9bM+++xf4lOGBkUFXYh73lyBhLCTr2NpYyFCApRIMky7UVlwM/1B9r11S0EFF0m3MHb0bb2hBlALkVvx5bwOJA7QdNyWq5zWTCr/2K/RMiqMfoeR0618Mmo5QrQ/pAQeIZBnd7B9cflTtij5EsxOIsx6zrTVVGnp0bF1qZObkJ+D5bgkVf5fyNhtj96goAfpxveawhAMfYOoNk2W1rDypcNtMxyAl+2KIKseQjO6zQy+OhbaNSJG4EoZfZadDSz+PmwkAwfk2qumXWQhnubiqjYmjRGczNpzUZgG0WWrylcggDp7k6rw0qbLKzQ1r1i2rx4wIRrhF6nAmP6g681i7kn8+PZvrrC0moV1TVlkMVJEXXOfhpaJtCH9BIbqXPuq7qAifu6X83VSDXsjm7KQgIB2jHb6h31CcX9XzvEbP2lN9WjnLtuv5h0Jj+U+2TJpUQQgNYC+SwT3lObkmM6pYZAyB+iYWDPEpqTqQTObpXcHvoJWsTAN8YYc6CTnHlq327QhSmlCD75rA5moj/umKX19zEpOmAdJ+kGmPmt3WO0Tg6ymp0wrBqWeMgqGYNkU2HrNse6DaJOQWDCLo8d1Wan/iZyXYWrAzsxWUPKZCzl4FKRb4xwSJzEePhxj6Bkd+JJ1PL4ipLV0I2CZW9mn/eLKl5VTCR58VPPTv2NZPSWK1V0+hntBpkPMKPpbYAtwap9g7457kjIlEGYxrE59V9Jpxr3KrdqGY2U+CZBgSd88DvNfK4Hockuqh1N//2pSdjVPDtTc8LfEZ8RrAybH6dd7LBIxW4VhXnFOLtYN03VAJ617o466eFgwtoFw3SrAYwIqb0fvSVPiRuSVuoaF8VOCWGfO9DkldPehpz8H1UWAdLO1C5iEm0hWSVPstKz5sCogdOw6/aA97uLkL4JCIfDdCpnanl3Fk9Tyrr2zfkhRvNnlB/+sVCUVZd5Ag3NHjwfsokVRvd40V7ywAD5FoCstKNNE+IeZpX0gCWykoFmNp+xQk0WaQOlsWCSh4WhW5yix7dklmuok5klLCof1lZHARqCyMdBdW/g02v3OiKpB+1nM87Hy0VT1s8w2Y4v3oKEYqyNO79nCL7C7JmOGocNJTN7GkK9ZPclxPtmYA1YLbyhiSsaezw2DRDdpKf64iWTiPD9FsZZltK9qEkoqh4K3RVJyzBvZmsLT5Ishlkauuuh3GLkO4k4PYdebCQC1f04we5vf9tw3iPv4xU6J4B4ZAsuCd3YJyEjeccl72+zqm7DXN3ZzkN8cMZqK3qHw0snc1MM7L4E+jGwcnTG+VDpFA1bWKq+dTHGkMyypGcYpVyr2duSWH+NeS7LIrFH5o0/+rQcJMLToLZJ8NVqlkW3E7eBBwp8y9kwwNcXbksMcCIxXKX1tOYQEwdZJElFOF12oaegclkZZFbOTHIn8JcRK6u/HMxPUR4y/qMDC/mFZ810gdHxjtL3DnCvR+bnzvGNUROCCrT+BI9vPWKLvcAcj89nPv4EZ+HB7YHSjkFAyys7wkCl9n+fo4uZmYsCSdP+9JYuiPdwOS4Q2sE9 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4f3fd2d9-7240-43b1-d591-08dad7eadc76 X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Dec 2022 00:34:54.9628 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 72f988bf-86f1-41af-91ab-2d7cd011db47 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wecoCl2D21A/lPARNbjeO7uylYo4Cnw0PReqeTlDzjCZX1+vQRcE592R8ql0oOrV2UfSbZ1qWTjkajMzdS4GuA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR21MB3819 X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_NONE autolearn=no 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1751513578353078427?= X-GMAIL-MSGID: =?utf-8?q?1751513578353078427?= Add Hyper-V specific code so that a TDX guest can run on Hyper-V: No need to use hv_vp_assist_page. Don't use the unsafe Hyper-V TSC page. Don't try to use HV_REGISTER_CRASH_CTL. Share SynIC Event/Message pages and VMBus Monitor pages with the host. Use pgprot_decrypted(PAGE_KERNEL_NOENC))in hv_ringbuffer_init(). Signed-off-by: Dexuan Cui Changes in v2: Used a new function hv_set_memory_enc_dec_needed() in __set_memory_enc_pgtable(). Added the missing set_memory_encrypted() in hv_synic_free(). --- arch/x86/hyperv/hv_init.c | 19 ++++++++--- arch/x86/hyperv/ivm.c | 5 +++ arch/x86/kernel/cpu/mshyperv.c | 17 +++++++++- arch/x86/mm/pat/set_memory.c | 2 +- drivers/hv/connection.c | 4 ++- drivers/hv/hv.c | 60 +++++++++++++++++++++++++++++++++- drivers/hv/hv_common.c | 6 ++++ drivers/hv/ring_buffer.c | 2 +- include/asm-generic/mshyperv.h | 2 ++ 9 files changed, 108 insertions(+), 9 deletions(-) diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index c0ba53ad8b8e..8d7b63346194 100644 --- a/arch/x86/hyperv/hv_init.c +++ b/arch/x86/hyperv/hv_init.c @@ -77,7 +77,7 @@ static int hyperv_init_ghcb(void) static int hv_cpu_init(unsigned int cpu) { union hv_vp_assist_msr_contents msr = { 0 }; - struct hv_vp_assist_page **hvp = &hv_vp_assist_page[cpu]; + struct hv_vp_assist_page **hvp; int ret; ret = hv_common_cpu_init(cpu); @@ -87,6 +87,7 @@ static int hv_cpu_init(unsigned int cpu) if (!hv_vp_assist_page) return 0; + hvp = &hv_vp_assist_page[cpu]; if (hv_root_partition) { /* * For root partition we get the hypervisor provided VP assist @@ -396,11 +397,21 @@ void __init hyperv_init(void) if (hv_common_init()) return; - hv_vp_assist_page = kcalloc(num_possible_cpus(), - sizeof(*hv_vp_assist_page), GFP_KERNEL); + /* + * The VP assist page is useless to a TDX guest: the only use we + * would have for it is lazy EOI, which can not be used with TDX. + */ + if (hv_isolation_type_tdx()) + hv_vp_assist_page = NULL; + else + hv_vp_assist_page = kcalloc(num_possible_cpus(), + sizeof(*hv_vp_assist_page), + GFP_KERNEL); if (!hv_vp_assist_page) { ms_hyperv.hints &= ~HV_X64_ENLIGHTENED_VMCS_RECOMMENDED; - goto common_free; + + if (!hv_isolation_type_tdx()) + goto common_free; } if (hv_isolation_type_snp()) { diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c index 07e4253b5809..4398042f10d5 100644 --- a/arch/x86/hyperv/ivm.c +++ b/arch/x86/hyperv/ivm.c @@ -258,6 +258,11 @@ bool hv_is_isolation_supported(void) return hv_get_isolation_type() != HV_ISOLATION_TYPE_NONE; } +bool hv_set_memory_enc_dec_needed(void) +{ + return hv_is_isolation_supported() && !hv_isolation_type_tdx(); +} + DEFINE_STATIC_KEY_FALSE(isolation_type_snp); /* diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 941372449ff2..24569da3c1f8 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -345,8 +345,23 @@ static void __init ms_hyperv_init_platform(void) } if (IS_ENABLED(CONFIG_INTEL_TDX_GUEST) && - hv_get_isolation_type() == HV_ISOLATION_TYPE_TDX) + hv_get_isolation_type() == HV_ISOLATION_TYPE_TDX) { static_branch_enable(&isolation_type_tdx); + + /* + * The GPAs of SynIC Event/Message pages and VMBus + * Moniter pages need to be added by this offset. + */ + ms_hyperv.shared_gpa_boundary = cc_mkdec(0); + + /* Don't use the unsafe Hyper-V TSC page */ + ms_hyperv.features &= + ~HV_MSR_REFERENCE_TSC_AVAILABLE; + + /* HV_REGISTER_CRASH_CTL is unsupported */ + ms_hyperv.misc_features &= + ~HV_FEATURE_GUEST_CRASH_MSR_AVAILABLE; + } } if (hv_max_functions_eax >= HYPERV_CPUID_NESTED_FEATURES) { diff --git a/arch/x86/mm/pat/set_memory.c b/arch/x86/mm/pat/set_memory.c index 2e5a045731de..5892196f8ade 100644 --- a/arch/x86/mm/pat/set_memory.c +++ b/arch/x86/mm/pat/set_memory.c @@ -2120,7 +2120,7 @@ static int __set_memory_enc_pgtable(unsigned long addr, int numpages, bool enc) static int __set_memory_enc_dec(unsigned long addr, int numpages, bool enc) { - if (hv_is_isolation_supported()) + if (hv_set_memory_enc_dec_needed()) return hv_set_mem_host_visibility(addr, numpages, !enc); if (cc_platform_has(CC_ATTR_MEM_ENCRYPT)) diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c index 9dc27e5d367a..1ecc3c29e3f7 100644 --- a/drivers/hv/connection.c +++ b/drivers/hv/connection.c @@ -250,12 +250,14 @@ int vmbus_connect(void) * Isolation VM with AMD SNP needs to access monitor page via * address space above shared gpa boundary. */ - if (hv_isolation_type_snp()) { + if (hv_isolation_type_snp() || hv_isolation_type_tdx()) { vmbus_connection.monitor_pages_pa[0] += ms_hyperv.shared_gpa_boundary; vmbus_connection.monitor_pages_pa[1] += ms_hyperv.shared_gpa_boundary; + } + if (hv_isolation_type_snp()) { vmbus_connection.monitor_pages[0] = memremap(vmbus_connection.monitor_pages_pa[0], HV_HYP_PAGE_SIZE, diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c index 4d6480d57546..78aca415985c 100644 --- a/drivers/hv/hv.c +++ b/drivers/hv/hv.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include "hyperv_vmbus.h" @@ -119,6 +120,7 @@ int hv_synic_alloc(void) { int cpu; struct hv_per_cpu_context *hv_cpu; + int ret = -ENOMEM; /* * First, zero all per-cpu memory areas so hv_synic_free() can @@ -168,6 +170,30 @@ int hv_synic_alloc(void) pr_err("Unable to allocate post msg page\n"); goto err; } + + + if (hv_isolation_type_tdx()) { + ret = set_memory_decrypted( + (unsigned long)hv_cpu->synic_message_page, 1); + if (ret) { + pr_err("Failed to decrypt SYNIC msg page\n"); + goto err; + } + + ret = set_memory_decrypted( + (unsigned long)hv_cpu->synic_event_page, 1); + if (ret) { + pr_err("Failed to decrypt SYNIC event page\n"); + goto err; + } + + ret = set_memory_decrypted( + (unsigned long)hv_cpu->post_msg_page, 1); + if (ret) { + pr_err("Failed to decrypt post msg page\n"); + goto err; + } + } } return 0; @@ -176,18 +202,42 @@ int hv_synic_alloc(void) * Any memory allocations that succeeded will be freed when * the caller cleans up by calling hv_synic_free() */ - return -ENOMEM; + return ret; } void hv_synic_free(void) { int cpu; + int ret; for_each_present_cpu(cpu) { struct hv_per_cpu_context *hv_cpu = per_cpu_ptr(hv_context.cpu_context, cpu); + if (hv_isolation_type_tdx()) { + ret = set_memory_encrypted( + (unsigned long)hv_cpu->synic_message_page, 1); + if (ret) { + pr_err("Failed to encrypt SYNIC msg page\n"); + continue; + } + + ret = set_memory_encrypted( + (unsigned long)hv_cpu->synic_event_page, 1); + if (ret) { + pr_err("Failed to encrypt SYNIC event page\n"); + continue; + } + + ret = set_memory_encrypted( + (unsigned long)hv_cpu->post_msg_page, 1); + if (ret) { + pr_err("Failed to encrypt post msg page\n"); + continue; + } + } + free_page((unsigned long)hv_cpu->synic_event_page); free_page((unsigned long)hv_cpu->synic_message_page); free_page((unsigned long)hv_cpu->post_msg_page); @@ -225,6 +275,10 @@ void hv_synic_enable_regs(unsigned int cpu) } else { simp.base_simp_gpa = virt_to_phys(hv_cpu->synic_message_page) >> HV_HYP_PAGE_SHIFT; + + if (hv_isolation_type_tdx()) + simp.base_simp_gpa |= ms_hyperv.shared_gpa_boundary + >> HV_HYP_PAGE_SHIFT; } hv_set_register(HV_REGISTER_SIMP, simp.as_uint64); @@ -243,6 +297,10 @@ void hv_synic_enable_regs(unsigned int cpu) } else { siefp.base_siefp_gpa = virt_to_phys(hv_cpu->synic_event_page) >> HV_HYP_PAGE_SHIFT; + + if (hv_isolation_type_tdx()) + siefp.base_siefp_gpa |= ms_hyperv.shared_gpa_boundary + >> HV_HYP_PAGE_SHIFT; } hv_set_register(HV_REGISTER_SIEFP, siefp.as_uint64); diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c index a9a03ab04b97..192dcf295dfc 100644 --- a/drivers/hv/hv_common.c +++ b/drivers/hv/hv_common.c @@ -262,6 +262,12 @@ bool __weak hv_is_isolation_supported(void) } EXPORT_SYMBOL_GPL(hv_is_isolation_supported); +bool __weak hv_set_memory_enc_dec_needed(void) +{ + return false; +} +EXPORT_SYMBOL_GPL(hv_set_memory_enc_dec_needed); + bool __weak hv_isolation_type_snp(void) { return false; diff --git a/drivers/hv/ring_buffer.c b/drivers/hv/ring_buffer.c index c6692fd5ab15..a51da82316ce 100644 --- a/drivers/hv/ring_buffer.c +++ b/drivers/hv/ring_buffer.c @@ -233,7 +233,7 @@ int hv_ringbuffer_init(struct hv_ring_buffer_info *ring_info, ring_info->ring_buffer = (struct hv_ring_buffer *) vmap(pages_wraparound, page_cnt * 2 - 1, VM_MAP, - PAGE_KERNEL); + pgprot_decrypted(PAGE_KERNEL_NOENC)); kfree(pages_wraparound); if (!ring_info->ring_buffer) diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h index bfb9eb9d7215..b7b1b18c9854 100644 --- a/include/asm-generic/mshyperv.h +++ b/include/asm-generic/mshyperv.h @@ -262,6 +262,7 @@ bool hv_is_hyperv_initialized(void); bool hv_is_hibernation_supported(void); enum hv_isolation_type hv_get_isolation_type(void); bool hv_is_isolation_supported(void); +bool hv_set_memory_enc_dec_needed(void); bool hv_isolation_type_snp(void); u64 hv_ghcb_hypercall(u64 control, void *input, void *output, u32 input_size); void hyperv_cleanup(void); @@ -274,6 +275,7 @@ static inline bool hv_is_hyperv_initialized(void) { return false; } static inline bool hv_is_hibernation_supported(void) { return false; } static inline void hyperv_cleanup(void) {} static inline bool hv_is_isolation_supported(void) { return false; } +static inline bool hv_set_memory_enc_dec_needed(void) { return false; } static inline enum hv_isolation_type hv_get_isolation_type(void) { return HV_ISOLATION_TYPE_NONE;