From nobody Thu Sep 18 11:26:46 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 81D7AC352A1 for ; Wed, 7 Dec 2022 00:35:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229750AbiLGAey (ORCPT ); Tue, 6 Dec 2022 19:34:54 -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: =?us-ascii?Q?9aA5K9nSe4VeCC6sN+Jqv3SatPW21uFt+jhNbcpVBHQ3U8Kzh3eXopZrPZTq?= =?us-ascii?Q?un7c/Mu7TmsJsmCjV2OY/U69F+dcUSQskRQxyBAq7EqbpfZV/zVkJN/DxSdb?= =?us-ascii?Q?+ejYxDI91Q2DRormG8SERXz4qNbryMkHYU8kb6ZbZLYzNRn5lc+UjHPgDbkl?= =?us-ascii?Q?CKyRbAZ6GPuu6scXs//Y14gDt6SnzqFAy2NnClxCoRnwdccVMUauU/E6Oui3?= =?us-ascii?Q?2d8R5hcuJueVaPmSfWTkOxlMsGBiMDnlKIw2Tej2CjHlV+s6GaC5hLwOlije?= =?us-ascii?Q?GBU380OZnns2XxEWweh/ug67vNILEHeKVar6LmC1nWI2aLWG17FRkGoXx3ZI?= =?us-ascii?Q?zF8Y/W7U96hYunQwPdf9a4ZiR9hC7GUjrRHElIdop5atRtZ/WaEJFqXh+gpc?= =?us-ascii?Q?QqsHHg09xv4TJXVHdvnBPTqEmWtjlYtcnJ6C6GDbEwTb52iRTzK6fdhK0f2M?= =?us-ascii?Q?TweoXcgiR01yETzcNJ9MNrvngTkfQEPj4bJ/fhnTqGunQBAR0gUphTSpcZBS?= =?us-ascii?Q?Kru6wuzAAiU1OYHd6KtcVhON4DpUoRRd2vvSIgVJPPsuKLn330iHjU6ShfDz?= =?us-ascii?Q?ancf5AR/WetY4SpHAAOKSuokYIzLZK61rgffb1BF22axTZnX9d9MzJBantL7?= =?us-ascii?Q?G8kF3UVClDvkIy8iyVxINkBXaYrNgsDBEZa5Few+9Extj3wGNuDxNqGhinRw?= =?us-ascii?Q?QkE5RwVaLL92Fkh7842xZ0CR+R5KdtsMaTF/6XqJCgyRfSAR0a73vV/JfUXR?= =?us-ascii?Q?o4bxjgmYxsKeymzX4ERJt7DjuZ98FEPPYk0xHNU+NP33Rq+ECWQmWmaO8NJT?= =?us-ascii?Q?nWAJfPwm0smTHGGqkYLGb4EtTr+6xSMW0vgqZTC0KEPsMOqJc6yBLJNin/jS?= =?us-ascii?Q?a3PVgD9k/582yc9SNYv04zgc80sEuNrETAEKwSvWIsgTBXkBoUgSvEV1BCm2?= =?us-ascii?Q?BqGd2CEGfzYMGod9IYCcHo6lu2tmawNRBWI70t5NzmxouSBCyeRx+qRpQgb+?= =?us-ascii?Q?o8WTNEMlW1CNxiwHPiAG490DgcitZbTef8X9I5FhbdrFtSYD+aCn85dZL9b5?= =?us-ascii?Q?rbc8H4hVt9cVhXKUujve8lPlsk6JFSDBcw9lSgnPiy60EEqUdFYfVVDYLO7Y?= =?us-ascii?Q?d8d+BTEErLV75BjFR8277ZK6Pvjuv+dKBe2+UKFiPQZEunY8ZzZdgr/u2W0Z?= =?us-ascii?Q?d6JoxLfmpiwPLjpTPye+cgVclKKcgeY4ZLsApCI52CpNm9ervestrvMMcpqx?= =?us-ascii?Q?oKSy+Gc6fZRTdO6DEkuRxwTjvY63pIZFA4vpyiENb3IWul9QdFsus1wW/e/K?= =?us-ascii?Q?WnnYCQI5sit9jXI0B9wgOG8JnA3m5d8zeTUsb0oa9PbdljGzrgQtGbaMU4Ip?= =?us-ascii?Q?K9GzSWagZU16EbrDcSuIDZvahjvHXd+haf+MgeOAyydNsj5+e3dKc/GRXy7l?= =?us-ascii?Q?mrlBb3NfrPdS9ChomgKZp9brX/BfckROToFfpAEQz414Yc6y3YLZx+EV2dVD?= =?us-ascii?Q?a0m6OX5ZDkWrBv8xRzuiP519eOoDG5SY3alZXzAbD5wP/iXcf/PFVzd2VE2s?= =?us-ascii?Q?IDYu3bxv2YDj4hACca6Yk6Dj/yUxpeUDLV0N5gMGE1PSQ6x/itldlV0NCeLx?= =?us-ascii?Q?eTad8sM0GnVPtgUlYvYdTHkfmvn6NhfLOJqGQnHnVk64?= 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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" GHCI spec for TDX 1.0 says that the MapGPA call may fail with the R10 error code =3D 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 =20 +#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, unsign= ed long len, } =20 /* - * 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 map= ping - * 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 =3D __pa(vaddr); - phys_addr_t end =3D __pa(vaddr + numpages * PAGE_SIZE); + int max_retry_cnt =3D 1000, retry_cnt =3D 0; + struct tdx_hypercall_args args; + u64 map_fail_paddr, ret; =20 if (!enc) { /* Set the shared (decrypted) bits: */ @@ -707,12 +710,49 @@ static bool tdx_enc_status_changed(unsigned long vadd= r, int numpages, bool enc) end |=3D cc_mkdec(0); } =20 - /* - * 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 =3D TDX_HYPERCALL_STANDARD; + args.r11 =3D TDVMCALL_MAP_GPA; + args.r12 =3D start; + args.r13 =3D end - start; + + ret =3D __tdx_hypercall(&args, TDX_HCALL_HAS_OUTPUT); + if (ret !=3D 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 =3D args.r11; + if (map_fail_paddr < start || map_fail_paddr >=3D end) + return false; + + if (map_fail_paddr =3D=3D start) { + retry_cnt++; + if (retry_cnt > max_retry_cnt) + return false; + } else { + retry_cnt =3D 0; + start =3D 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 mapp= ing + * of the page in response. + */ +static bool tdx_enc_status_changed(unsigned long vaddr, int numpages, bool= enc) +{ + phys_addr_t start =3D __pa(vaddr); + phys_addr_t end =3D __pa(vaddr + numpages * PAGE_SIZE); + + if (!tdx_map_gpa(start, end, enc)) return false; =20 /* private->shared conversion requires only MapGPA call */ --=20 2.25.1 From nobody Thu Sep 18 11:26:46 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B00B4C63707 for ; Wed, 7 Dec 2022 00:35:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229760AbiLGAfZ (ORCPT ); Tue, 6 Dec 2022 19:35:25 -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: =?us-ascii?Q?0QpJDUbjUSeFLRXitrJlplCcjXoaPiHZNw0yA2RHq04G+hjYs6D1FK9BbhrP?= =?us-ascii?Q?ofcHta7A5oys5ZHRFVzUtyHyBTdZPoBvgJ8/qn6n8oQhh2wRayysFua0Ii16?= =?us-ascii?Q?8K/fJx722v1wu0yE+lE8WTDEQCSBqo6vgSwyjEu6BZXM0ZJIo7XzBj391QjV?= =?us-ascii?Q?KK5PfqiU8nXg1peLgwtTfiiGpSW672arwPMajiPei4B3PVV/SzeUVimzn/xj?= =?us-ascii?Q?xLZuiOZDvpkdbliUBUX8TU4fEvUCna6GDun+qzls54hpvDVMTBEJmn1vL3k2?= =?us-ascii?Q?CZl6inHVXfw09TDfPAkqE+W0kVEeQQ4RzQ4GY2i+mgrAQtLIEFdI5ghTwW/d?= =?us-ascii?Q?mSubQCD4G5on7XtP38vHGCC7YGUQERVl1awqqyCr8DOQrtzKr6PfGsuwh++H?= =?us-ascii?Q?wL/x/E7uhegdlRAPnRlky01jVuV6XVIrj6JAhbvUkcSxU1ySzGnj/M0YhtdB?= =?us-ascii?Q?RhOpdIo/T015k0CDbhScn+yIojZeVPGG0oOi0Z47qOQmaxvPzRHEZ1McQM/b?= =?us-ascii?Q?72IPadyudvcoAJbSIAbkg6M0tY1wXlfIgg30iqinYYzkEVDLcBQhL9SFrxej?= =?us-ascii?Q?VQriSrIpsfMAiJl8MVrSZxeWTHDcla99W9KZL0AAZLkiGztLUGACLOD8ZeiB?= =?us-ascii?Q?zlEoqAEElNSLw9XMnWquNSzv24Apy3tqaS8y/I7aX5t3z6uqdFs/zyCfpDu7?= =?us-ascii?Q?/7U2YpR/ueKdQWdNPHpv4WpR3Nf4JyDwUZZcDmMpgk1sj+GAWsUFe9uWc1dP?= =?us-ascii?Q?92BN9P6FJ9vB37mpPMihnzTKgeMppi1zkdyGVENBCBf7D/Sksjc4BOnIPMQE?= =?us-ascii?Q?OtJFfu8FuDAsY21KYc/8d4KtuSoAa06WVEf/7mgNHRC9u/rlrFwTNfzKL6iA?= =?us-ascii?Q?MDbu1rkrrgwCXpsQacq2RJ+AXSY8uCRmaQK8dfudSvngAfOiisX+WlpW81cM?= =?us-ascii?Q?0qwL8ElHvEuiaANqF4JhivINAoqDiT8widyO8ISn4bwXBDtEyx0bL1/RsfgQ?= =?us-ascii?Q?f7IfgQ8VUI9wr1NmkhATYLJ743mz7gLUjKJ3UnfaOBICXolJvEc0o3thqYgV?= =?us-ascii?Q?QZfoiGIeRmq/SJlQwq62zDC6roqi2zvA4+94eiy5MfnAYg9xKehL1EOMKwDp?= =?us-ascii?Q?B8LQE2L80dyhKDV9Jj5CG2xt909Kn6cqBzqnIksmZYnn0kBrN9GhQGAhpQw3?= =?us-ascii?Q?Wyrk2Wc3klxU2vSzAFn66JKxTNCrSJvboeA3vJuwpIdxBWSNI5007ZmpmTRV?= =?us-ascii?Q?YqvIJYfrHc6hDkkcmR6gwOdkmjlJ6amA6Z9jKFrMNgnIZgzVhGQ/Ecad3RTO?= =?us-ascii?Q?uoj4bHu8ojZYzCgJGthFFqzD5GOE/LCMzMUT0EY39lob2apWsdDeMP+kfiAn?= =?us-ascii?Q?7/BZBAI9FMkp18AgefL5at3uDKDdvuYu+XaQL9hVbaMKEbGxxrMsWw8zgxnQ?= =?us-ascii?Q?PWLycZFDd1srYhnCA7NTspRsF7vaXO65UHWM08CJODkafbZGeuYra+ibuIHi?= =?us-ascii?Q?6/IK3wdb6bcuftjGSoq6DJJxaWSvo5bHBT/z2CKtL8Y9Y/vv1GlfNQAI3ugX?= =?us-ascii?Q?P98wcu8u2SYKOjkmbWNpofZCOJI2EJcJ4I5puD87a/JIYw4XGySGo/q1AoD9?= =?us-ascii?Q?1XmLyA4M4G8FeIr5TEwRdz8cv/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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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. =20 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 =3D 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? =20 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 =20 #include +#include #include #include #include @@ -693,6 +694,34 @@ static bool try_accept_one(phys_addr_t *start, unsigne= d long len, return true; } =20 +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 =3D 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 =3D __pa(vaddr); - phys_addr_t end =3D __pa(vaddr + numpages * PAGE_SIZE); + bool is_vmalloc =3D is_vmalloc_addr((void *)vaddr); + unsigned long len =3D numpages * PAGE_SIZE; + void *start_va =3D (void *)vaddr, *end_va =3D start_va + len; + phys_addr_t start_pa, end_pa; =20 - if (!tdx_map_gpa(start, end, enc)) + if (offset_in_page(start_va) !=3D 0) return false; =20 - /* 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 =3D 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 =3D is_vmalloc ? slow_virt_to_phys(start_va) : + __pa(start_va); + end_pa =3D start_pa + (is_vmalloc ? PAGE_SIZE : len); =20 - if (try_accept_one(&start, len, PG_LEVEL_2M)) - continue; + if (!tdx_map_gpa(start_pa, end_pa, enc)) + return false; =20 - 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 +=3D is_vmalloc ? PAGE_SIZE : len; } =20 return true; --=20 2.25.1 From nobody Thu Sep 18 11:26:46 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3050FC63714 for ; Wed, 7 Dec 2022 00:35:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229816AbiLGAfa (ORCPT ); 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: =?us-ascii?Q?54+4HLEHJ3CQjvRg+o+tIRtV+LSTMTHj+VkIaof5RHAWYA914jkuwvTPUp4m?= =?us-ascii?Q?JxtbCvF3r8Ws/x5g2RTPgjDMfn/DUwPNn8AN9JWEc8tbHVgJ7r3vWLNHoW4L?= =?us-ascii?Q?HrZpHoqE6ZWZRhNPFMxf5v8tRmRYh7uyfE8jOneO9PpFMkKjweTZx4GuXTyG?= =?us-ascii?Q?1bxXW9FGEpXOpKrE6bfSfg2EzetPaGkDbRXEHOBT5VIIrWG+E+o8iG0P+9bs?= =?us-ascii?Q?6QDBs5N9EXgMX25CUTCz9FmMKrBEuTqYh/kRjKNjBpJ38BURqJ5zukpc7ztR?= =?us-ascii?Q?6yywgGSz61wbY90DYG9cdzhTZzgEbTiNibB1M6XWvokbwjnKY2SR2zh9w7DD?= =?us-ascii?Q?Ve3/l6fXipEhnYWSdgLPlUSzjPUQD3EnUCh2K9vlZDwskTUaWW5ldhMnfpau?= =?us-ascii?Q?G6Nx/2vDDlkV8BUhJwiariRdPNfQWBRhjHFkhjhip7tqca46Jgbw21wV7VfX?= =?us-ascii?Q?v7u/EMk4g42wqI2AALU2LHm+McgoULcneUVWn630poAIRbIlFkWLsnPXYEII?= =?us-ascii?Q?ZwedGeN1c7Psv4o5zA6L5dtriu1Da26Y1Ii32TfgxfDCKyP7wuf+QkXnPD8k?= =?us-ascii?Q?iBFAxhhanVnLtUcBqltJ6hcCLZITsOdpMahxeo8YJ5dGj6wpaU2b9GswChBr?= =?us-ascii?Q?XCvf0fB3VbfD+On/WhyUVDN9eVAf2Jm87OqJa8epxPN2+jojTZSADH2NNjwU?= =?us-ascii?Q?CAxJPhTbk6dqolZmfAiGQTu7Cr7zFzEH8eAnp/yL1Rj9oRTeSDz+2fJqKZuC?= =?us-ascii?Q?o/1URzBimN11BMSs/z0OIkikk5P6ZhS8d70s8bfBEFPnInMTBRGKP8B6PAiz?= =?us-ascii?Q?ahJKtuB3NR86B7EWoZtNPjzFhqOLaV/3tAzsSId6EYjU7vs5VqQECDQVERQM?= =?us-ascii?Q?qauHHZv0uifamF3OZAaEgVhhSvmIjDte0DrgoCoK4BIWuiyOcGcpaXBN5bg6?= =?us-ascii?Q?ZAB4DMHRz17ksAH7+7Tk70owYdpVkwFxji+j5Y+NiOwiXz9yGyryIv3zBAXw?= =?us-ascii?Q?Wdh47wqP1gJGR6G6nOs4jZ7rBgW5CfEaFBcK3nEHlfyok7FtL6ZkFzjC9MPQ?= =?us-ascii?Q?kmklT6gLQQrD9wIrIWK5FpurVJJ++e5I2kSA4mE7dy6JWicJhnPk1QkozKCt?= =?us-ascii?Q?54WBw2NfxgNXf6YBxuSwfaAYxRBkmAxCHTSpoz30WaSWzYHku85lS6h9DgE9?= =?us-ascii?Q?pXOC64iyL7NMzkekh45PAxHjZGI8M/XrmlAjOv+EjFB/WEo/5QY0YUZhCkAK?= =?us-ascii?Q?ZsYvf4ZYmC297KYjjch4xFnZGi8bsp1djdcmIdNTYLdrVxQ3Nih49A7uzZMz?= =?us-ascii?Q?yhfyVpkcriosP695ap1ghQZ4pzyfZYpWLKj3aPLHa2JZFPzep4Y7gEtcaSDV?= =?us-ascii?Q?zArL3BTw1fbpxKrplV/JLTGqCXUHv3gjC0DypAYbW28v0UQ83NA3yfbcYbwW?= =?us-ascii?Q?ZPihjWKmLQG/R71ulq9qjfOjyQ2TCpPQq6/gsuuQHD7Ymrlgkf1u8s89Bqbp?= =?us-ascii?Q?pSrBOOUktIGSXr2gDR+ep9Vipd/oTfWHdsetqXoZm79QE7BIUyqVGCB+f4pY?= =?us-ascii?Q?+YQqRkHQIvjBmETBeIfRoi2yz0UQoJhUqjMxO4VjysP49/14lB9r9WyQ2uJ9?= =?us-ascii?Q?vOgR0q5CDxZ/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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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); } =20 +#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/hype= rv-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 =3D 0, HV_ISOLATION_TYPE_VBS =3D 1, - HV_ISOLATION_TYPE_SNP =3D 2 + HV_ISOLATION_TYPE_SNP =3D 2, + HV_ISOLATION_TYPE_TDX =3D 3 }; =20 /* Hyper-V specific model specific registers (MSRs) */ diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyper= v.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; =20 DECLARE_STATIC_KEY_FALSE(isolation_type_snp); +DECLARE_STATIC_KEY_FALSE(isolation_type_tdx); =20 typedef int (*hyperv_fill_flush_list_func)( struct hv_guest_mapping_flush_list *flush, @@ -32,6 +33,8 @@ extern u64 hv_current_partition_id; =20 extern union hv_ghcb * __percpu *hv_ghcb_pg; =20 +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() !=3D HV_ISOLATION_TYPE_NONE) + if (hv_get_isolation_type() =3D=3D HV_ISOLATION_TYPE_VBS || + hv_get_isolation_type() =3D=3D HV_ISOLATION_TYPE_SNP) cc_set_vendor(CC_VENDOR_HYPERV); } + + if (IS_ENABLED(CONFIG_INTEL_TDX_GUEST) && + hv_get_isolation_type() =3D=3D HV_ISOLATION_TYPE_TDX) + static_branch_enable(&isolation_type_tdx); } =20 if (hv_max_functions_eax >=3D 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); =20 +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)) { } --=20 2.25.1 From nobody Thu Sep 18 11:26:46 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 49006C63713 for ; Wed, 7 Dec 2022 00:35:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229828AbiLGAfc (ORCPT ); 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: =?us-ascii?Q?vGc76A86gxbQy6BfNndJunbgq+lAkbEF/NtnSJb6GAOHwykIxxmMpILLvqG/?= =?us-ascii?Q?LOcoHUXSNrz3mCD1V0sjItvuwH1LaDzKCifB5+Vrg/g/gYI/WEqd5/yNWtwD?= =?us-ascii?Q?EdonbsI8BXAM8rXK20nCwVvpLPAGAMcrZl59OjBg295i8/ei3c9CRYNb/Mns?= =?us-ascii?Q?NHoHfuXIiWpiobUTyuGInyxf1iKMzbXSUwSmuG6dd7rtoDkHL7zDfyHn7E8G?= =?us-ascii?Q?FY9je1LDiAUhf6FfZaDK/ubNID9pQp+l/KlCcKG4AHmFHhaO5bdUhDkrqjS2?= =?us-ascii?Q?y5L0Q3I51jiQmuYm0v+bijB5fc6Jdr2F3NJDIKHV1in5p+5sQJmTpdURIFGn?= =?us-ascii?Q?irDswvF8K58scBR4OUN0eEn3O+Pbb/vHXJC6+0O+HFFXRD0TJB3DoXMAF0TQ?= =?us-ascii?Q?bGX+xqBmuPA6ntV9QdCeIYAiFwHwA2+3BTNe/lagdOZuoMGw338LvZtIgD2q?= =?us-ascii?Q?h7bCKdGnFIQZL5vNIXSfdi/ZzD+XWWjQoV4Q0FcnivJq1wlBJoUsID58zjf8?= =?us-ascii?Q?WEUU7GFX7tc5+LvADEvAvjH3FtTTnrYDJIrsLT9mKPbWUW9beDZSGqzKw1/z?= =?us-ascii?Q?XJXcexR+6rV13E63zDJFY5XDBDDmqu1wd2k5uwRT/f7sWOUscK7eesdRa1Uq?= =?us-ascii?Q?114pvtYoOrwuwfId1CDIMcSZjrrsHYgnW3UU3F+/WAq1uJ1Q9yEKQu9wN6BK?= =?us-ascii?Q?yCMj9nJFxN3BqHTMBco7dHOyQ3XtC1ofAUqZ6Z2Cxf8OE3a+hKK+7/8c96c1?= =?us-ascii?Q?hWmWL/zJ5vVKCHlCWi55WX7HhJ4RlDUdjwvGUwDs52wi6UHP20wHwHbwXeeM?= =?us-ascii?Q?+nMm4+D+poAm9sG0VHr6KEkbhx5a8UYD+YEryzaoVH8x0fk8WQ03BqAggVP9?= =?us-ascii?Q?aRBWkc0uBDgEzcYBdK0LyT+60zUXXlIjByylIGbbObFwJKi7gO9gHc31FOCZ?= =?us-ascii?Q?weadcEfgZHpn2rKQ4djO/0Oo05OxIatIo7t6Gjghk3MBMRVvjgx/WyCj3iYg?= =?us-ascii?Q?V2gHzSv0oRkS6kHlvV0ahCTneqvOGpu3pVdUfSJ0O5tuSGVyrL1+Mq9Gog+Z?= =?us-ascii?Q?jkzPhdj1mA5BiKbCtl/F+4t3m52mU9ltWlUIoRQ5SAoUJdy+om1OUcyUCcor?= =?us-ascii?Q?xbe90ovkxoYoe5Fq0xATIFzdQ6Ggry3ezdV3hlzJkV0tMm+FHqLwTRq9j8Uk?= =?us-ascii?Q?AI1YX3EWDhWRpzVnb895iLxSeTdh9jGh8CJHQwY2D+JkkiH9c0+sN1o44xcN?= =?us-ascii?Q?V1sdDGYFKQGpEho4K6r/d5o1/xDQ1gyt404YlbjchvCflInIEOCV6G5A73T6?= =?us-ascii?Q?lP5dLHgafSYyZPcRjAvRV5YkVWs3WbOC2l2Cm+dWibjbr5oSVjQlLiNdtror?= =?us-ascii?Q?yRcrr/2qQCzi2mmvGSrTev2dQ3zZnV27/hEXZPkaA4lfC1+tGpQwJlX146L5?= =?us-ascii?Q?kPkRje4mD8jlUPgycsw70rK9OUYLK+dIXh4pvX/f4lHnHbwKTUF4AUSwdk1b?= =?us-ascii?Q?zMvDCEds6xzGXQIU8A9WnOzZRpSX6AMoA+8LaeaV9EhtvloxmTYI4MlfUP2P?= =?us-ascii?Q?nnoHfP+X477wZ4D0VESHV+zAvinPcI80atxIIYUSYymgGoEY2C8xGSHxDB0f?= =?us-ascii?Q?0gTyaYQ8/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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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.shutemo= v.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 ) =20 /* * __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 =20 /* Mangle function call ABI into TDCALL ABI: */ /* Set TDCALL leaf ID (TDVMCALL (0)) in RAX */ xor %eax, %eax =20 - /* 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 =20 /* @@ -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 =20 /* - * RAX=3D=3D0 indicates a failure of the TDVMCALL mechanism itself and th= at + * RAX!=3D0 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 =20 - /* TDVMCALL leaf return code is in R10 */ - movq %r10, %rax + pop %rax =20 /* Copy hypercall result registers to arg struct if needed */ - testq $TDX_HCALL_HAS_OUTPUT, %rsi + testq $TDX_HCALL_HAS_OUTPUT, %rbp jz .Lout =20 - 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 =20 /* 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/share= d/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 AB= I. */ 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; }; =20 /* 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); =20 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); =20 BLANK(); OFFSET(BP_scratch, boot_params, scratch); --=20 2.25.1 From nobody Thu Sep 18 11:26:46 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1FAC5C6370D for ; Wed, 7 Dec 2022 00:35:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229784AbiLGAf2 (ORCPT ); Tue, 6 Dec 2022 19:35:28 -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: =?us-ascii?Q?xr+eAPSRLkdbwHH30M3Dd56eW8nGThiG4KgeQRM9AGaVHlMRBChL/47KCfx4?= =?us-ascii?Q?kuBUJX4X2fVTdGlYgfyA5FmRPVRggtHqjhTWQ9K+afhP6KJdrb+zmdu7RH6B?= =?us-ascii?Q?tnNXimmbDlza4UgCA+elEBBCd5UCO9rkuOlazYetu+xhi5a/PZEzfbvK9PSR?= =?us-ascii?Q?KI4LRcJjizxrZDpbyHRpazl+jwsD1/fn250u+NfSTKw2irk4y9ZjrKp8oeg5?= =?us-ascii?Q?+BflDMB7G6aU6WxU38qo0mFaPzpa7xlGAucWMeQvPN1QxIwoHnzCZq0rxRk5?= =?us-ascii?Q?9Nx5Gh9FVVQ/5iSEr/EJ4j9Xo4xNtRSyyLX0E6jx6GYs6U9CLbIl7VDuVK5v?= =?us-ascii?Q?jjbkDHU0goyq7Y51NSbuAqwtI0G8HT5dGFbMpHRu8a64mJA8LbS16PzFe5IX?= =?us-ascii?Q?AU3xrUqXMc/0lRGqBZT7zmXskzzjzber+ATlfGPSCF6+nFmVOUojIK9Nqjuz?= =?us-ascii?Q?nAW96fazArRA/w8FBvgIwN7AgN3Ger+AO2f8Urher6NFtBmfQ7LizXRObsHd?= =?us-ascii?Q?vjJltkKI7SklrEbxiUD39P7z/Op+g29Mb/sI8+vQim5/uZWFDx6KMxC9ydUK?= =?us-ascii?Q?k6GQ89M1siD5gyW0gwwUSj3IN7fjdfOU1tEhPrtYXaaRLnK9oR3gBRivjqwe?= =?us-ascii?Q?L2/G+QOUjAGqg6GSB+7TUnQZy819SDbGp7yMMlXAHuvy7ZgX2Ahn+fzD2y1D?= =?us-ascii?Q?RCwWhTZP7BsbMY1fCxGkcr2M8L8kzqCWDK3mA73F8Ejh8hO0wirTDMSWoDIu?= =?us-ascii?Q?N8SiQmBTO3Qhooe7vYLSuotBQuP8i6iXxXjas/GyBE8WwHhilEugRhaL48Hu?= =?us-ascii?Q?tYQrBX6bdKTQGXgT46P5kYqj1uzJyowm/Qo1oQeSv7aBFMlrGwKM1O5+I4t5?= =?us-ascii?Q?CuCXyB7AbuJP73Sf8/NEIgczJ5uQ8+wVmBfSmCRcHb6ZT7GaHDe9cQYc67SU?= =?us-ascii?Q?7mUoeSecchO+nUiHk00VlNEHEZGu+HtQ2euglaQG7S8qnctisod9Qn/4Zt4A?= =?us-ascii?Q?WA5yeJgd52nj76lEEyztQEqxC1a1XAkK68B6qtUC9GVL7pgF1sRchg0bk2iq?= =?us-ascii?Q?/RUuG5xD3mci+HqFmk5ickzR2df/BaYp9D9N8YrtzCQbZUyXNe4okFq/mFel?= =?us-ascii?Q?IqYU05BMYSpiZi+xFWScXjv3UT0bxQd/q78k2+iCjuPKJHVB3zol5k2ZxufK?= =?us-ascii?Q?mjHIbWrChKKwdYNE+an5toEddXlN3wXed/vbAWKbYRYtDdR4XEYI/aaQX3+S?= =?us-ascii?Q?8mwMOy0WFVi3KXc9efQSv2eMB7vakzhBPXjEDT7cwdVxSFaqjVd5TRFtOFWF?= =?us-ascii?Q?f3ZqMpk3xxoHPqDM3/42HzqoOfviA86Q508SDy99wnXYHmWT87tn1d6n8PwS?= =?us-ascii?Q?Qw133DchYhxBDvB6+CUErD6f5E2ZoGFk+iI790V+4B7khYs3sOPFIPzIcIrs?= =?us-ascii?Q?T+ENfyZPypPrsJ/h0xQT5nt+3g8d9ykxUSRab6JHhIMLdsh6w4S+6H88+PV3?= =?us-ascii?Q?dwkgWYji9fu5W89+mQgaZOYvOhvQAXvdGs3zqDf30HZYRxCZ8gaBFr9hGoMy?= =?us-ascii?Q?CwE9xphKqybpY+Zcb8gU1Ia71iOB5XjiZjGTFhtVVuC+cxN5BOYn5ViLO89G?= =?us-ascii?Q?tid5m5QSrpotGGt8/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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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); =20 + /* 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 =3D __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); } =20 +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 !=3D X86_HYPER_MS_HYPERV) return false; =20 + /* 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 =3D { }; + + args.r10 =3D control; + args.rdx =3D param1; + args.r8 =3D param2; + + (void)__tdx_hypercall(&args, TDX_HCALL_HAS_OUTPUT); + + return args.r11; +} +EXPORT_SYMBOL_GPL(hv_tdx_hypercall); #endif =20 /* diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyper= v.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 =20 union hv_ghcb; =20 @@ -39,6 +40,12 @@ int hv_call_deposit_pages(int node, u64 partition_id, u3= 2 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); =20 +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 =3D input ? virt_to_phys(input) : 0; @@ -46,6 +53,10 @@ static inline u64 hv_do_hypercall(u64 control, void *inp= ut, void *output) u64 hv_status; =20 #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; =20 @@ -83,6 +94,9 @@ static inline u64 hv_do_fast_hypercall8(u16 code, u64 inp= ut1) u64 hv_status, control =3D (u64)code | HV_HYPERCALL_FAST_BIT; =20 #ifdef CONFIG_X86_64 + if (hv_isolation_type_tdx()) + return hv_tdx_hypercall(control, input1, 0); + { __asm__ __volatile__(CALL_NOSPEC : "=3Da" (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 =3D (u64)code | HV_HYPERCALL_FAST_BIT; =20 #ifdef CONFIG_X86_64 + if (hv_isolation_type_tdx()) + return hv_tdx_hypercall(control, input1, input2); + { __asm__ __volatile__("mov %4, %%r8\n" CALL_NOSPEC --=20 2.25.1 From nobody Thu Sep 18 11:26:46 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B7ACC63716 for ; Wed, 7 Dec 2022 00:35:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229844AbiLGAff (ORCPT ); Tue, 6 Dec 2022 19:35:35 -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: =?us-ascii?Q?w0ih4t2fvw5FwJE8F+WwzF5vWkL/tza0Q8HaUlnrfLgLZPTwQWFvgF6P4HTO?= =?us-ascii?Q?HPkLyjjuHLsWAXaP1bUHr7sf3MOIQfNeab3P9Trv1dcwu+dEy9bM+++xf4lO?= =?us-ascii?Q?GBkUFXYh73lyBhLCTr2NpYyFCApRIMky7UVlwM/1B9r11S0EFF0m3MHb0bb2?= =?us-ascii?Q?hBlALkVvx5bwOJA7QdNyWq5zWTCr/2K/RMiqMfoeR0618Mmo5QrQ/pAQeIZB?= =?us-ascii?Q?nd7B9cflTtij5EsxOIsx6zrTVVGnp0bF1qZObkJ+D5bgkVf5fyNhtj96goAf?= =?us-ascii?Q?pxveawhAMfYOoNk2W1rDypcNtMxyAl+2KIKseQjO6zQy+OhbaNSJG4EoZfZa?= =?us-ascii?Q?dDSz+PmwkAwfk2qumXWQhnubiqjYmjRGczNpzUZgG0WWrylcggDp7k6rw0qb?= =?us-ascii?Q?LKzQ1r1i2rx4wIRrhF6nAmP6g681i7kn8+PZvrrC0moV1TVlkMVJEXXOfhpa?= =?us-ascii?Q?JtCH9BIbqXPuq7qAifu6X83VSDXsjm7KQgIB2jHb6h31CcX9XzvEbP2lN9Wj?= =?us-ascii?Q?nLtuv5h0Jj+U+2TJpUQQgNYC+SwT3lObkmM6pYZAyB+iYWDPEpqTqQTObpXc?= =?us-ascii?Q?HvoJWsTAN8YYc6CTnHlq327QhSmlCD75rA5moj/umKX19zEpOmAdJ+kGmPmt?= =?us-ascii?Q?3WO0Tg6ymp0wrBqWeMgqGYNkU2HrNse6DaJOQWDCLo8d1Wan/iZyXYWrAzsx?= =?us-ascii?Q?WUPKZCzl4FKRb4xwSJzEePhxj6Bkd+JJ1PL4ipLV0I2CZW9mn/eLKl5VTCR5?= =?us-ascii?Q?8VPPTv2NZPSWK1V0+hntBpkPMKPpbYAtwap9g7457kjIlEGYxrE59V9Jpxr3?= =?us-ascii?Q?KrdqGY2U+CZBgSd88DvNfK4Hockuqh1N//2pSdjVPDtTc8LfEZ8RrAybH6dd?= =?us-ascii?Q?7LBIxW4VhXnFOLtYN03VAJ617o466eFgwtoFw3SrAYwIqb0fvSVPiRuSVuoa?= =?us-ascii?Q?F8VOCWGfO9DkldPehpz8H1UWAdLO1C5iEm0hWSVPstKz5sCogdOw6/aA97uL?= =?us-ascii?Q?kL4JCIfDdCpnanl3Fk9Tyrr2zfkhRvNnlB/+sVCUVZd5Ag3NHjwfsokVRvd4?= =?us-ascii?Q?0V7ywAD5FoCstKNNE+IeZpX0gCWykoFmNp+xQk0WaQOlsWCSh4WhW5yix7dk?= =?us-ascii?Q?lmuok5klLCof1lZHARqCyMdBdW/g02v3OiKpB+1nM87Hy0VT1s8w2Y4v3oKE?= =?us-ascii?Q?YqyNO79nCL7C7JmOGocNJTN7GkK9ZPclxPtmYA1YLbyhiSsaezw2DRDdpKf6?= =?us-ascii?Q?4iWTiPD9FsZZltK9qEkoqh4K3RVJyzBvZmsLT5Ishlkauuuh3GLkO4k4PYde?= =?us-ascii?Q?bCQC1f04we5vf9tw3iPv4xU6J4B4ZAsuCd3YJyEjeccl72+zqm7DXN3ZzkN8?= =?us-ascii?Q?cMZqK3qHw0snc1MM7L4E+jGwcnTG+VDpFA1bWKq+dTHGkMyypGcYpVyr2duS?= =?us-ascii?Q?WH+NeS7LIrFH5o0/+rQcJMLToLZJ8NVqlkW3E7eBBwp8y9kwwNcXbksMcCIx?= =?us-ascii?Q?XKX1tOYQEwdZJElFOF12oaegclkZZFbOTHIn8JcRK6u/HMxPUR4y/qMDC/mF?= =?us-ascii?Q?Z810gdHxjtL3DnCvR+bnzvGNUROCCrT+BI9vPWKLvcAcj89nPv4EZ+HB7YHS?= =?us-ascii?Q?jkFAyys7wkCl9n+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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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(). =20 --- 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 =3D { 0 }; - struct hv_vp_assist_page **hvp =3D &hv_vp_assist_page[cpu]; + struct hv_vp_assist_page **hvp; int ret; =20 ret =3D hv_common_cpu_init(cpu); @@ -87,6 +87,7 @@ static int hv_cpu_init(unsigned int cpu) if (!hv_vp_assist_page) return 0; =20 + hvp =3D &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; =20 - hv_vp_assist_page =3D 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 =3D NULL; + else + hv_vp_assist_page =3D kcalloc(num_possible_cpus(), + sizeof(*hv_vp_assist_page), + GFP_KERNEL); if (!hv_vp_assist_page) { ms_hyperv.hints &=3D ~HV_X64_ENLIGHTENED_VMCS_RECOMMENDED; - goto common_free; + + if (!hv_isolation_type_tdx()) + goto common_free; } =20 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() !=3D HV_ISOLATION_TYPE_NONE; } =20 +bool hv_set_memory_enc_dec_needed(void) +{ + return hv_is_isolation_supported() && !hv_isolation_type_tdx(); +} + DEFINE_STATIC_KEY_FALSE(isolation_type_snp); =20 /* 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) } =20 if (IS_ENABLED(CONFIG_INTEL_TDX_GUEST) && - hv_get_isolation_type() =3D=3D HV_ISOLATION_TYPE_TDX) + hv_get_isolation_type() =3D=3D 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 =3D cc_mkdec(0); + + /* Don't use the unsafe Hyper-V TSC page */ + ms_hyperv.features &=3D + ~HV_MSR_REFERENCE_TSC_AVAILABLE; + + /* HV_REGISTER_CRASH_CTL is unsupported */ + ms_hyperv.misc_features &=3D + ~HV_FEATURE_GUEST_CRASH_MSR_AVAILABLE; + } } =20 if (hv_max_functions_eax >=3D 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 add= r, int numpages, bool enc) =20 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); =20 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] +=3D ms_hyperv.shared_gpa_boundary; vmbus_connection.monitor_pages_pa[1] +=3D ms_hyperv.shared_gpa_boundary; + } =20 + if (hv_isolation_type_snp()) { vmbus_connection.monitor_pages[0] =3D 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 =3D -ENOMEM; =20 /* * 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 =3D 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 =3D 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 =3D set_memory_decrypted( + (unsigned long)hv_cpu->post_msg_page, 1); + if (ret) { + pr_err("Failed to decrypt post msg page\n"); + goto err; + } + } } =20 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; } =20 =20 void hv_synic_free(void) { int cpu; + int ret; =20 for_each_present_cpu(cpu) { struct hv_per_cpu_context *hv_cpu =3D per_cpu_ptr(hv_context.cpu_context, cpu); =20 + if (hv_isolation_type_tdx()) { + ret =3D set_memory_encrypted( + (unsigned long)hv_cpu->synic_message_page, 1); + if (ret) { + pr_err("Failed to encrypt SYNIC msg page\n"); + continue; + } + + ret =3D set_memory_encrypted( + (unsigned long)hv_cpu->synic_event_page, 1); + if (ret) { + pr_err("Failed to encrypt SYNIC event page\n"); + continue; + } + + ret =3D 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 =3D virt_to_phys(hv_cpu->synic_message_page) >> HV_HYP_PAGE_SHIFT; + + if (hv_isolation_type_tdx()) + simp.base_simp_gpa |=3D ms_hyperv.shared_gpa_boundary + >> HV_HYP_PAGE_SHIFT; } =20 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 =3D virt_to_phys(hv_cpu->synic_event_page) >> HV_HYP_PAGE_SHIFT; + + if (hv_isolation_type_tdx()) + siefp.base_siefp_gpa |=3D ms_hyperv.shared_gpa_boundary + >> HV_HYP_PAGE_SHIFT; } =20 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); =20 +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, =20 ring_info->ring_buffer =3D (struct hv_ring_buffer *) vmap(pages_wraparound, page_cnt * 2 - 1, VM_MAP, - PAGE_KERNEL); + pgprot_decrypted(PAGE_KERNEL_NOENC)); =20 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_si= ze); void hyperv_cleanup(void); @@ -274,6 +275,7 @@ static inline bool hv_is_hyperv_initialized(void) { ret= urn 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; --=20 2.25.1