From patchwork Sat Apr 8 20:47:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 81272 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1056258vqo; Sat, 8 Apr 2023 13:51:01 -0700 (PDT) X-Google-Smtp-Source: AKy350aij75izyVqQR1jkrvFVRhy6CFXfvK7PUfTjWGweFA5RpQJpX2hFb4ZPGszSgRwZzE6+SxC X-Received: by 2002:a17:906:b201:b0:930:fa8e:9597 with SMTP id p1-20020a170906b20100b00930fa8e9597mr3288475ejz.42.1680987061430; Sat, 08 Apr 2023 13:51:01 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1680987061; cv=pass; d=google.com; s=arc-20160816; b=nOIdDwWj98F5y8M89w9hqVVp1zIwRZuVHrnVp9FZJG0Ij0O5+uiIIymEADf4ciGiGT sbMxhu1JUMWYAh2Z2caEVY4umQvGtWbG/t7Ih7epwBlw/TgrzbyIaeAE3MXnmuRuMq8U gDcFrnFSq2ioGIInTIOTYNsAjIiYQzGsSosQFpayWl9cHHHtMSEB4v3uWqmFvP71pxNX 2k9n1tDPwygWrV172U8nJj9FpZV53NWEBKLZr+Kz+2bequVIxUFbNk+TEqj0EirWNCG3 cRSThh6dJcZk7/M/63BT7YvzUrZVZuqZZZKgQ27Fe5xCXwJJAUJDKKWZBJEST93WTVGa mrYw== 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=26huhBOPS0cGboiODrKUrKRJUTfjlpFFW0syRbYW+Jk=; b=h51T053vL/Mdz/DA7cXcDRQm1dA8TJl/ACN8or9JYCef29mEsikwUEerdiM/aR0RBi /rnXq+LcuXHY9Y241z1kQPDtHaefoCxMaN/InN2RybUh1qX4B8EVGt59Vw+Q/vrsZ4mj ikuK5sInfPm40YSBumtz1y2vr8Dw2c18g/6a5BNhJAA3liBccx530RjU79qAJNg4qY7Z DWzuzqSEQLW4hL6XXDgOng3QofeqsvdUFfQwRL67LkhFrgXECrtiSa7YvyEAulisqzFV mVnEsoNnZST1hRmhs++BNkEkce5qHQNmEh02deZEupURFLGCdCehWmODzWMriqSO4m1F 7opA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=TlQAmsBx; 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 u23-20020aa7d997000000b00501d7cde627si4380536eds.505.2023.04.08.13.50.37; Sat, 08 Apr 2023 13:51:01 -0700 (PDT) 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=TlQAmsBx; 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 S229550AbjDHUtl (ORCPT + 99 others); Sat, 8 Apr 2023 16:49:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53886 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229523AbjDHUtb (ORCPT ); Sat, 8 Apr 2023 16:49:31 -0400 Received: from DM5PR00CU002.outbound.protection.outlook.com (mail-centralusazon11021023.outbound.protection.outlook.com [52.101.62.23]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2F14A7D90; Sat, 8 Apr 2023 13:49:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KexR52ejMw1Dq7TlEn60rC6kYg3WE/BZLsIBRl+mST0iyQ6Xv44/hD5YmOnP/vJkC8ujipVOy/NWY9UP6faCmqKIUiQysVqZQgJcq0IQXU2XFZw1M8OqGVbdmxi0XPiVPX/xmByhaq+PWWuec09KYYZvcE3rBOd/9moioa0NJFzM4Ihf/FU8uRfs/DXJGNQxajWflh6xleCbXox9srAdA04RtY6bUPzpdPipG5Xz9xPXKMCpMBdLSrsn1S0SYKgSs86BhG9q1z/ErlHb2sVOtzBVTVRMQnnN7ZYGNNO3vyYgw4CR3wAnX4AKwZ1xZrMkeVEFcRsVMjt4HgcLHpOJJQ== 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=26huhBOPS0cGboiODrKUrKRJUTfjlpFFW0syRbYW+Jk=; b=JPl91Ze9Jvu2/UI0RguD11VebWCysuTSjpDWSE2odr8A5IvCYYreyUYHEuosEDzwmMoBh3+hfsJGHWiVIjvQlPEqeOdi/kt8mCwTF+ZiVNeMmu7QMz0FAAGBP2bUHedp3Y+QRGYMl5Krb1PCR8L9eDz/kx7PfuRpVvhZBvRzY2EnQHzyHNltx2n+xKMOPExOL58zU1xLo3vW5FQZAENDbwDxqHOSxTFJmx43qZ7dIrIF8+7oeSWODihIyfL8D2razZsUJ7WCqLTXBmZiX4wTvlm2fAeraRAJPI9xw1wgY6P8I/iRuNPR3Nom27Bk5fBRvT9y3nXoChNE+i8bRSAz1A== 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=26huhBOPS0cGboiODrKUrKRJUTfjlpFFW0syRbYW+Jk=; b=TlQAmsBxAwvUFqmKc9gzf8iuVUq7lOctmO2xKf14TC42N5K0cNu3W2eJ6hQEd+pGFnKRXldfanOxla3idEZveCH0JOb9DBHa+8efbCL/RnBPu7KGetIQZretUiB6VWROv+nmRVXEgLvWwqssTYfH098/KbJ9y2Nx76hFlSqV/SE= 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 BYAPR21MB1336.namprd21.prod.outlook.com (2603:10b6:a03:115::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.1; Sat, 8 Apr 2023 20:49:27 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7%6]) with mapi id 15.20.6298.017; Sat, 8 Apr 2023 20:49:27 +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, Tianyu.Lan@microsoft.com, Dexuan Cui Subject: [PATCH v4 1/6] x86/tdx: Retry TDVMCALL_MAP_GPA() when needed Date: Sat, 8 Apr 2023 13:47:54 -0700 Message-Id: <20230408204759.14902-2-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230408204759.14902-1-decui@microsoft.com> References: <20230408204759.14902-1-decui@microsoft.com> X-ClientProxiedBy: MW4PR03CA0117.namprd03.prod.outlook.com (2603:10b6:303:b7::32) 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_|BYAPR21MB1336:EE_ X-MS-Office365-Filtering-Correlation-Id: e375bbb7-a548-4802-3335-08db3872be1f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Hz3fmuyjvBORMcytMo5a8h/oW/bhPKGaZ9Y5AEyfoRBjNW/GnVq7neqfeHqqT5Bn6hv34AQACv3mcgUlAXL0dc59U4Kv07yYLqwGrMbebRuL4bWrIfxcpnkMJiyTvz6eS0JoOuZfb7vLsExWqE1kuUKtpuzh1nTLaWA8/xlGQ1jIpsvMeGpkbx+Ay+KHuqZYG4wrVGJOJXyI9zpW+XWDdXQnUTKGabglfKoZJ3Lgn43ZhGgb9TfHOXE4R6fNqLD8Qpuokdnzzt5wNjvDgX/VuTZ/FCJzW06XNF28XyGwhN5G6pSa9t5WJ/SUF2MxOVvZN6rW0gKVziguGccNVFfCvE9bbkY4OcItjVbUCaP1V/M4idLXVRkExkbC7lVCTRp3+SMs2v0b3IyTFhFmyXogF6DEw1lsFQv5/3dTin/lbjhZBr51yT9kIbctil7QeqY6jHALw3KDl9Lexw9cWCBg2P7rOs6Um8QOATT9NaQxxxgv5dIY8QquvXAVKnhrg7m2AK+sX5um07NsRSM4KBz1Z2+fnv+ArZ12X0B5gJSpvIojMwZKkk/xxPjHJZLBri6Tfjm8WkjMu/LPNReW3VgPIeDk5g/vFwV5rHPSQJE9sc6R6fhh4Wh/PK1L+F9R5GIPupQD1/TGmrvv24MZXeGhAQ== 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:(13230028)(4636009)(39860400002)(396003)(366004)(376002)(136003)(346002)(451199021)(786003)(66946007)(66556008)(66476007)(4326008)(478600001)(316002)(6636002)(5660300002)(7416002)(38100700002)(41300700001)(921005)(82950400001)(82960400001)(8936002)(8676002)(186003)(83380400001)(2616005)(6486002)(6666004)(52116002)(10290500003)(107886003)(6512007)(6506007)(1076003)(86362001)(36756003)(2906002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Q1gVLLfQjoVWsGtjT422UEA29Bum+SX2Mid9oinfVygyeYT0tZwlXoy/m15oK7n4X6XyjBclOGaxJ9Qs9ccO1ss87VPjINvREnTLzHFnfl66YNJdlUtCREvuRQgqq8GXRK/QIAjgEPJ78mfleEiClD6OcX39yCAM6OG5EPcYpoDrfkzTVvxwEnS3ENiN9Do0wwBAx3cvprI/vJ86XRWcOonMOnji7Rp+/+q5gFsBvODdXKC2+DyLyiAaEghnZ4sQijXu2VuvOLKiN1jy/TBIZ+ox41eA3QPPbFCXYFPi0mITmUUmrVRGcxdN2G+jl788fQ21ZdKCcbzoq9+QrTLFU3F+15p/up5Ky2LQNeymlJ14V48cI+ZbhuQWuBBnwkl95v/f6ThyTv4fZ9JOiKuPa7CQ0BzE/14Pf44cLQfHoNgrsCr54iuKiRFdKw5y+tKb2ow2RJz1FpPjBpuHHmFGGP2lmlq10v9sHOeURHY6GQnf6L2lPK+kvR/ZfhXHkpMRbhB7PHEnavX+pxLGR0VgNiNALQnRp4EREd8osNM67hYueB/Adkme3Z+r8iv8Ez8H3khpCH89WbCh8nF3PN8A9LEgU3jifSjV2MRlxL938ckN/zKz4CNW8n/8WPyKq+V04+eDiAMYPM/VYc7tLqQ803KSLzDW1yJeI9Rwe5X371kKThFu/zesQAjDMgRBRE41pUDrhOZdC1q8oJY6E20JPyCY/7H5o/7l1yzpbeeJEmImmrGNIqQRRzCXozdXuJ/MoRCS+5YJLfM2kt2HDs5CVvVgxNpAusFP6w/yBq44B5JTF0ow30BoquGO05rfVw7n1KJEvQyOESpebtMYTYdTnDlZ1z0ivrUuBpUCzkS1489R02qqjaxDgpGND7/VEPSy9MVqA+dLhlJOyslWiCqanbRpAZUpoqwZxnjtM6as19VRyaY3UgcwWzzkgP3fjOlJJ3+hSuRigH1q7fc10nTDPBj+wTs3Td8SJW98kV9Ld9wlf64ucpRPMg12HE3zgZoztBg6aojzKGmW9TlXGK/YGGOjVITHUj128uYe1arhnTLAq8cjYIZCAfh7yK3Phu0r9DHjxIFN/pCv/9r6MiRLayC2gXs9Q26GpXWmV3//CI3vM7IoNIpBCytQLvy6U3G2XbIRFgaQ6eLvxHUfyBNgDNMomIOxUhlJidaXr4YvltGRjH4krHwmCAGAa+USeQF0Xwkl7XncjmXOPWKIcNbHzth4i+lBjsDHOFmvzg9qE/zwoJyBw0zyvpc+XcjYLU5e1Pm20Pj7xnpaWCprE1bLZDD3Bz5RGw6/j4itCQeY20olXN7+LDUIYprze+zZSkq3+6hZ1ohT9vi/T+55CvVLbl9FJdAKU/I80eLSIwsV9NmILLR+ezRWnwwnXsSBzif+cwK5biYAYFvapwOVKogS6k+IJcjli6r78iLu7mdzrDCuYW9hwSrdySa/Xk2BCnIgcsYU1l6jtrLnDGR2tZrVJeh1vexuvNHYvtCd2ORxqhKBMDE1MrpD9raAINx59SuUuxStkO6D6THju4XGXyV2Zl9l1pXocBkX+PikjaHHNSoebCiOUlAieUjpE93hJtV5cdRxhwyLKZIBeMjFxD/7/xoQc81J5yTaKq+MMZ30lgLrpx9VTRgnel5Iam6DJGNM X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: e375bbb7-a548-4802-3335-08db3872be1f X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2023 20:49:27.2640 (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: JqABzvTGBF3XV83w28RNZJoCA0Q9pkQ0LuABiRXyaIKyc6GR1MaI7h6rib8RZAi1acy2lU0wdAOBCPgNVeVYjg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR21MB1336 X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE autolearn=unavailable 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?1762642688779806366?= X-GMAIL-MSGID: =?utf-8?q?1762642688779806366?= 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. Acked-by: Kirill A. Shutemov Signed-off-by: Dexuan Cui Reviewed-by: Michael Kelley --- arch/x86/coco/tdx/tdx.c | 64 +++++++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 12 deletions(-) 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. Changes in v3: Changed max_retry_cnt from 1000 to 3. Changes in v4: __tdx_hypercall(&args, TDX_HCALL_HAS_OUTPUT) -> __tdx_hypercall_ret() Added Kirill's Acked-by. diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index 4c4c6db39eca3..5574c91541a2d 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -28,6 +28,8 @@ #define TDVMCALL_MAP_GPA 0x10001 #define TDVMCALL_REPORT_FATAL_ERROR 0x10003 +#define TDVMCALL_STATUS_RETRY 1 + /* MMIO direction */ #define EPT_READ 0 #define EPT_WRITE 1 @@ -788,14 +790,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 = 3, retry_cnt = 0; + struct tdx_hypercall_args args; + u64 map_fail_paddr, ret; if (!enc) { /* Set the shared (decrypted) bits: */ @@ -803,12 +806,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_ret(&args); + 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 Sat Apr 8 20:47:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 81273 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1056390vqo; Sat, 8 Apr 2023 13:51:27 -0700 (PDT) X-Google-Smtp-Source: AKy350a8EulNWKexNczM2XWp0DgfBA3taX0RZuj+7Gz2ZMWu7OCm4o5HKPHXL8NHCxCSU5eEyOVk X-Received: by 2002:a17:906:495:b0:94a:67fc:896a with SMTP id f21-20020a170906049500b0094a67fc896amr66751eja.18.1680987086722; Sat, 08 Apr 2023 13:51:26 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1680987086; cv=pass; d=google.com; s=arc-20160816; b=tAMs7HYWoHaQjBKrqk5wnqhzNVgkpeuhbIXgvVXeErwjWi7cXl/tdTNpAFi1a6S5ez tpC4Wln2HvePro+u5qAquaywR+GMqFnL+f3rhz61nSOCYUQyKtrT4yaXKgb0nt/hp3Ij KDreaU5FlTINPmzm/2QPUGIPwNOZgcgV4nQifIWL/EqWrFkzyUMTMr0OgrWwieEflWLh AjyDKiTk0hzqtZYv9KmZeZJl4d6PsxWnD+4jTO59JNHIHN+P4P/eJRvgAXBcL5CODzBQ 43/o8JY7fqGling41YORCB5u1J91EIz+QzYMg1/9pCoHS4EiGkk2DfcMaUjouZZmrIH5 0x0A== 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=mVT2/XfvDLOONNRRbqQoXdnfe4kGHRiB3XwG8KFuzRw=; b=VG5R/dUDGfIUz79FkZFsaQznIVCmyx7N9N6qipTUe+pDk1rz4/TDNXTm5TtJ1XHQHI m1cCkcU7nMEgai7YprIp3QzN4vnHzketAQViVBtO6GUVr8o0cMfSF+ErM+h+jHxMg1sR GMvfEunZ2jQVkFXelHfPdv/56rP1YDPyx3antDtvbg5pH9jWMwwFdIRLj4GnWCkyNmGq wISBKzad5EgtaAjwviHYr+iu8+yFXfvTncIESe+gCwphmCGM7cvSo31j/ZoG1WFCDpSy 8uDPrAHJW5cJCcYXyDTKhJKEsJr4BClzt9ArlSJAMCJK+oWzn/MbUcyAvOeZkssoly4c riEw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=DGczYj6X; 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 lw25-20020a170906bcd900b008dffd95e783si6138490ejb.568.2023.04.08.13.51.03; Sat, 08 Apr 2023 13:51:26 -0700 (PDT) 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=DGczYj6X; 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 S229583AbjDHUtr (ORCPT + 99 others); Sat, 8 Apr 2023 16:49:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53896 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229527AbjDHUtc (ORCPT ); Sat, 8 Apr 2023 16:49:32 -0400 Received: from DM5PR00CU002.outbound.protection.outlook.com (mail-centralusazon11021023.outbound.protection.outlook.com [52.101.62.23]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6DD0A7D99; Sat, 8 Apr 2023 13:49:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j1xb/IAg+hSeKJvClpdae0VNMj9nVUQF3YDuc9FjI4M55wM5H+gs9+uOFw/TqNZf1qi5TrGcJ1OtDk/2zscP6BWQfLOlBf7rolmcT+zm7XyYQrA4Q/clfzXC8C0/PCjNt7IqlGOU7LXjXZSxTedvtWl+W3xVF4U6H44q4HV9jG/vNGlPC1yDFuvt0sARNm8sDsb2SaJ8fDnpWKpBoBP91TBMGgpuY+dVGIDLVFMVVk3JZ0m1lwcDpT5DBvch9NNg5DlHAXgx2VsvfFKVq4+OYpO0my2u+0PF7YTY/ZsuVxn+hGRUYOXrdWeLoK5FcX4UiNYjvn5G1ZsEEsvswQrZsg== 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=mVT2/XfvDLOONNRRbqQoXdnfe4kGHRiB3XwG8KFuzRw=; b=ixMjwbbcCThTxvFmNWQw3LnNgaER440+waHnaCrvMQB4dWQjB7tEiI4YFvAA0+EPMG7gJLhPafabkFUTP95sYXBMRfB0MeBhUEFDJ+nqt2B5zk37nvRNVWeCYaVaO3JIKK8ApOf7xwwNKCiShgCqiRzxqwaglmYIfTygm3FBsN4X2WQmnenMobO5LPxYuHol+xYZ0AyC+3uf4HNc1WY7jW75JJ21Ar0xHYzj46RgBL+H8+6ytV0pC9voCdEtYMxJAHx5+iLov/c5V98ywsLnCpsJb9+tch+kC5ww+S/exjnk0OUqhZVVncm66LzYGR9VpVlxt3fUZpG5sGFCjT1MPg== 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=mVT2/XfvDLOONNRRbqQoXdnfe4kGHRiB3XwG8KFuzRw=; b=DGczYj6XRQnenxuTX5pvyWdb9etxFvbY1nV4lsZwydchh0A04N2c1eE0/MHu0/TWFpQaH8v1OCqD5Hw3yJ0UQsBe0AwmpyWbH8AQ962oUzTvcDhSUBOq8z72p5JhALhcchUtG3daNgcffPVuRou5QSmYLg/i4sfNz8Ki/VLZl64= 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 BYAPR21MB1336.namprd21.prod.outlook.com (2603:10b6:a03:115::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.1; Sat, 8 Apr 2023 20:49:29 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7%6]) with mapi id 15.20.6298.017; Sat, 8 Apr 2023 20:49:29 +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, Tianyu.Lan@microsoft.com, Dexuan Cui Subject: [PATCH v4 2/6] x86/tdx: Support vmalloc() for tdx_enc_status_changed() Date: Sat, 8 Apr 2023 13:47:55 -0700 Message-Id: <20230408204759.14902-3-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230408204759.14902-1-decui@microsoft.com> References: <20230408204759.14902-1-decui@microsoft.com> X-ClientProxiedBy: MW4PR03CA0117.namprd03.prod.outlook.com (2603:10b6:303:b7::32) 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_|BYAPR21MB1336:EE_ X-MS-Office365-Filtering-Correlation-Id: b4a7e90e-5a5b-40db-1ccb-08db3872bf74 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QeQB5t8UhgsHBREUSi62NOrBAra7aqz8Yomn3kf5l6qHDtIuqJ6HuHK1x3SNXhfKcw0ewrAI4lggDS0RD5UYnkqbKpgN7S4AFF0wAbWYfBd1Nbc2JR8nOXApYJCV6bV9+tguEV/iQ9dsVBd9gFGx8bNy8T9yzAYOC7BwfwAWLBMV3sKNKKxiThdCTFddo1pwjifbbmi11cXBYrO+OBlys9jlRtbExLM10nk2uQG/AsVe8u+KQRRcwUMR8U7xI+9GOj73tjhjIkPrEWFfJruza/APOkqE4zADnv3jfuX3BeF7fWniDMeI/e29bcbOj429le8xKt/qkzYWibp369aGxLVMHI85U0NyoMIeU69QDABM0wSb90DLHb1e7h2jdEyxVCq5Z6dklWce0tD06pC2E3q+0V18IYbrrLXDZ0gjrKFE72MPXLNVMyzc8wQi/yDWEFi6ucQz8d9P6fYab8Tlo5czcM3gyUbqrEhpGHLf9WxdX2uX9BNvi5eMYAXT4flBFrvxDQNDJW/56eD+98J99RwvZE6d7C9Vlt4piHodkVgVpHOrVtwi2FlmC+Z6zGIx/o6I1rCNXUZwqUsZexoKCzORU2YMCtrAF90GZ8dMwcyrFIegIRejEvPtGQW///wmtRkpwplvxFljd3EY8bauKg== 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:(13230028)(4636009)(39860400002)(396003)(366004)(376002)(136003)(346002)(451199021)(786003)(66946007)(66556008)(66476007)(4326008)(478600001)(316002)(6636002)(5660300002)(7416002)(38100700002)(41300700001)(921005)(82950400001)(82960400001)(8936002)(8676002)(186003)(83380400001)(2616005)(6486002)(6666004)(52116002)(10290500003)(107886003)(6512007)(6506007)(1076003)(86362001)(36756003)(2906002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: uDrLcmSmaVB8rEWl+TJk2FAsLplsaWG19iAO2F4KL7PzYZwo1SkbAM+crRWEKTScjGAWXU+Hkg1Xm+bQUCOroW2/UwCRFnEsUyaXP7+UidVnPy7OhipYTpN5ZWblAsrRI9eoFIU9QIZ4CluC/Yh8H7mnzshFAGbgFfPBOEgW5YlwOtvgQaBPvUs/ejp7CLQiLpUwzuUT8HRR++YzfD3Ql0CEsXtj9cjeQE1FH6wRlXWpY0ugHUjKDBSb2085FRBaxa+UdB2zFUOGXCn+qDpt1puMo9R3od1c//sQLtjpRR6pm2YNDqreETO8WDSIBDRLjVsZTUUNBNQChnf0sS2fhYbzfHx3rtsENwgrdVLxNXkJs5UJIJXozcM91MXc1jxCo6+isW29HfaEGvhtGTQwlHytAf63htsdE0xPANDpQ/I0O7L8+hEGGTsV3+Ahf0lV6YL7sH//HCH+0ohqTgEsmY26F1fWyuaJIPFQ2r8PKMg23mYC2wC2Ih/BEyKnblf0jhPQOANeIEwGJ7p/v7rUBSz9ZtlUDS39dR95r/Fl3QtJjYozAAyvi/i4tgWhAnzQE5ghbPyl+tiJi8HhAIh/GwYJd7N8TVzElbkENZj4ZqKaWDia2EAvV/e7yJU3p+nWqiE6fHNKOsE5piuSxfP4NChTKg+ypSbFPY4LjP6X6Ny2SLbrCftporyQ2XlFWyf8nX5FbTgc9F8Cza9KgYazTUe2Va9ED5+rWWDg/lih/6QUBQ8mS4BBHy+LbqNMEzKSv3ocK9qNf4ucGJv3pQFdoTAhR8i3yw8JDuLNFFDqjpejEamZz914ICRGqd740a9i9L0bg+XtWaJNBxhP5iO7mql0PNaVe9xCa3tSQIhZuiYsXuiOCklbqVleXhXukFGuWGlKSw1NlULH9/HP5fuVX1kOCwQpMTQLMcHFhOxuFfH8MSDMZQvDAx/+urVXn42G8F0f/nsv11dQiFGXeei6judKdDmcr+K1cEswXbpU642J7eZKDIoF8L6PqX6NW7FlmNiNjlWp8mtsdPpYkrsZrcLxkVTr6SktEVTLDAjsIlA/yrhkPT0/z3Sc31bRfHbCSD/bOkUTjLh6S/tctzXurAUSnUtn2tQIC0qkk2AAKQ8S61BYynLerkmmNwohu+9MFSSwbN0uXD+Sizs3gkO68rf/j3jEsI8l41A08Sq1DUiV4ndt0bzo3yJCZqEIYnIWHWh8+WMWoG/cfMS20KBCfimOcph8RIQ2cKaUrzihMEY3pUkyVOvjf8QilvzJWMKQCRuv8jBE9CC1MsHFGw9HAS2er/e8Aaz51rESl8E+3gSubHGLZ8Bms/QxO9SLeu5QuTKzruhU/MJHgCtLEnDOhxthloJETQjq4hLAr6/Fuokot74LmJaoWVoQTwSlJC6NpTnT1swuJtO4meLmPHuL/shJ/K0QGE9ejVGc8BzgMpruvqDWxh5JLp8hAqQP/up89P4N+rTBko4J0abek42l+BZulpHuO/PbCbgLoUg7qpj0uh3lcV2tGHtptCLlj8pIeKITrPwrKH185SiU8HEDGAuyHoJ/2mpFELm3niIjdkQyPwYudTRWdTowapHyne84MlWgYEldzdb5hJ6whzgozCrECahNlpnvo6J/I7z6a/dae8qq/6rn4wjTXFuF2GvM X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: b4a7e90e-5a5b-40db-1ccb-08db3872bf74 X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2023 20:49:29.4714 (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: v7QuuG7d4bMcSANPvQHEyHHvdQqQ+ENwOxNucHodB7O4KWZW0RzALqp3zff2vV26uPxTZk0vQhsvjQV/AIatyg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR21MB1336 X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE autolearn=unavailable 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?1762642715498793893?= X-GMAIL-MSGID: =?utf-8?q?1762642715498793893?= 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. Co-developed-by: Kirill A. Shutemov Signed-off-by: Dexuan Cui Reviewed-by: Michael Kelley --- arch/x86/coco/tdx/tdx.c | 76 ++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 24 deletions(-) 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(). Changes in v3: No change since v2. Changes in v4: Added Kirill's Co-developed-by since Kirill helped to improve the code by adding tdx_enc_status_changed_phys(). Thanks Kirill for the clarification on load_unaligned_zeropad()! The vzalloc() usage in drivers/net/hyperv/netvsc.c: netvsc_init_buf() remains the same. It may not worth it to "allocate a vmalloc region, allocate pages manually", because we have to consider the worst case where the system is sufferiing from severe memory fragmentation and we can only allocate multiple single pages. We may not want to complicate the code in netvsc_init_buf(). We'll support NIC SR-IOV for TDX VMs on Hyper-V, so the netvsc send/recv buffers won't be used when the VF NIC is up. diff --git a/arch/x86/coco/tdx/tdx.c b/arch/x86/coco/tdx/tdx.c index 5574c91541a2d..731be50b3d093 100644 --- a/arch/x86/coco/tdx/tdx.c +++ b/arch/x86/coco/tdx/tdx.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -789,6 +790,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), @@ -838,6 +867,19 @@ static bool tdx_map_gpa(phys_addr_t start, phys_addr_t end, bool enc) return !ret; } +static bool tdx_enc_status_changed_phys(phys_addr_t start, phys_addr_t end, + bool enc) +{ + if (!tdx_map_gpa(start, end, enc)) + return false; + + /* private->shared conversion requires only MapGPA call */ + if (!enc) + return true; + + return try_accept_page(start, end); +} + /* * 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 @@ -845,37 +887,23 @@ 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); + unsigned long start = vaddr; + unsigned long end = start + numpages * PAGE_SIZE; - if (!tdx_map_gpa(start, end, enc)) + if (offset_in_page(start) != 0) return false; - /* private->shared conversion requires only MapGPA call */ - if (!enc) - return true; + if (!is_vmalloc_addr((void *)start)) + return tdx_enc_status_changed_phys(__pa(start), __pa(end), enc); - /* - * For shared->private conversion, accept the page using - * TDX_ACCEPT_PAGE TDX module call. - */ while (start < end) { - unsigned long len = end - start; + phys_addr_t start_pa = slow_virt_to_phys((void *)start); + phys_addr_t end_pa = start_pa + PAGE_SIZE; - /* - * 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)) + if (!tdx_enc_status_changed_phys(start_pa, end_pa, enc)) return false; + + start += PAGE_SIZE; } return true; From patchwork Sat Apr 8 20:47:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 81274 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1056515vqo; Sat, 8 Apr 2023 13:51:49 -0700 (PDT) X-Google-Smtp-Source: AKy350YOg2+xQnk76mDnJ6g+BLnvwh//UFAiNZIeJ7JaYN2RalVYJFr9uekFeKHHR6JKO72+SuLO X-Received: by 2002:a05:6402:451:b0:502:30e6:1e65 with SMTP id p17-20020a056402045100b0050230e61e65mr5494373edw.12.1680987109660; Sat, 08 Apr 2023 13:51:49 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1680987109; cv=pass; d=google.com; s=arc-20160816; b=W+yw0S9EpJYh2IScwGdFRbQdL3+PBBj8vIYsMzWLB1qXcKBRuAKzISPLkmTRdhq9a4 T4GPOAhYqQCM5CNZi6oOsUIO4KtxHGgHCSa+Bdt9t1MWqSPb7qsauLAsTlW/B5CzwXog RGoYosrJ4a82xLX34ZpF3vXR75loFxFG5C8/dvom59E3Tt38X/ECutXoQWpoQSMvtDbB Ku8ugI+YpfBGc+VU7t/811aPYzHDLxr0fabiFr8RSkFPqUip/NjAFxvdif0tevnBgpmF 6hlotS+6hWiWLgjMmZ3N/pzjzp/6YpLCRdUE8+JzSw7j4gm5+nk+FPoujDiIsFOrrERt 2iJg== 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=4ZXiZxZlx2fISptxhEnU2NFhYM+c4xokvq0nlIwOIAE=; b=HJAad9rlJOeEpAz+gy3eNdHJ8Q6Hub0N6kDA5v1E7TOmPVIppB3MSto1D1ij73xq+9 LDTUnTSYxy2/2QU9ehh27sEe/KZ4EUHnnimglQgPiRRb1UItGoJWZd0clLSyXpovRkos NpaPitI05/Walc+80NRz5OgExsMMej7YEiCa/vkBnGUjFj2+gjvjuGowFlYd7a7OOUxY 37MbT/CCkonl4y7kla1ZaxwqwG6ucu4m9EP+72FQy+Ia0jYIAlIHgSy71g+uoivO8UJ1 u/rJIPbnDjh+3NV/rLkCHjmNTONjbeMf3KoPX86XpR4jQ6ozq6hU1bP4yRTVny8jE1Eu rNtA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=brCiCQtq; 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 m26-20020a50ef1a000000b004c0da1cf02dsi1960244eds.105.2023.04.08.13.51.26; Sat, 08 Apr 2023 13:51:49 -0700 (PDT) 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=brCiCQtq; 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 S229621AbjDHUtu (ORCPT + 99 others); Sat, 8 Apr 2023 16:49:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53926 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229540AbjDHUtf (ORCPT ); Sat, 8 Apr 2023 16:49:35 -0400 Received: from DM5PR00CU002.outbound.protection.outlook.com (mail-centralusazon11021026.outbound.protection.outlook.com [52.101.62.26]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 41B8183FB; Sat, 8 Apr 2023 13:49:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mSPpW5sDXoNeFKb2lFQuZ5XmuRHUTzoP1JPygzss1Mf0BR5qNHMGW/u+2/0zXp9SZKpZGPJRnHEqA/dmAytGILYyu97WXFEo/xA1lxNQfaSbZMEi7vZxIm09LBGZiBYrWkxEX1PsGwDstA2c9CbaZJExHyJpillb2y0HPELVRrf1VU3lnLe39GeAFfH896tZ6WIJrYe/Qxf45oVLm+19evagpb5EYsgDcYbutU+FoiPM/5Q1dICOy5UCXQI5z+SY+5aQ2FiFYJ/5u5KJqixnhPpxYpu1jBAFWXnDS1CGSSYXhRK97kZstnUM4DOpj4JDqze+fDUJyB6pcDSPUAEA5Q== 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=4ZXiZxZlx2fISptxhEnU2NFhYM+c4xokvq0nlIwOIAE=; b=HF+h8uxLv3LWYcGkzS2PmESuSHmmzUx+Tec4EoJduGjTHG1yMGO+sxCBDJyJwVfcpem4vCEUF6oQgCiW9f90T690cHr6TKprfplaBo+Ds5othohuFX8SOfww5aY+3ljPDiF6y2LjIrbSIx7LZcfBMmvB19FwYnejiz+aveeZ9TBbYPcB8Qip6+WdMht+KixN4cVozHovylIrNum9D3rjZSlzRcIPAO0BgVfTmHBUXcgTbVoh8Jr8e+7s4g6ztX26LWWi6wzm9WRsHnofyy8WWHrJetaN2ouhUk03u9IIZCOHuIECRA1u6fyR/q6X3ik2Fn1VQfLgRVzrfHikQ02XYQ== 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=4ZXiZxZlx2fISptxhEnU2NFhYM+c4xokvq0nlIwOIAE=; b=brCiCQtqLD/uMUV5NDqwqMvTHKGuEgShYYQVpnxfGU1f/TLNEjshuLiRhO8UYdfeXQrPxfxcTdLkkjatudjA4gwP03cmRZn2EhTMdB/Pxr9Wc6jqDeflXiUcw+pzJU9nQ7vTrHfOc8pDwgYT1afvXznmyMM/I65EIri9f2YZJZU= 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 BYAPR21MB1336.namprd21.prod.outlook.com (2603:10b6:a03:115::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.1; Sat, 8 Apr 2023 20:49:31 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7%6]) with mapi id 15.20.6298.017; Sat, 8 Apr 2023 20:49:31 +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, Tianyu.Lan@microsoft.com, Dexuan Cui Subject: [PATCH v4 3/6] x86/hyperv: Add hv_isolation_type_tdx() to detect TDX guests Date: Sat, 8 Apr 2023 13:47:56 -0700 Message-Id: <20230408204759.14902-4-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230408204759.14902-1-decui@microsoft.com> References: <20230408204759.14902-1-decui@microsoft.com> X-ClientProxiedBy: MW4PR03CA0117.namprd03.prod.outlook.com (2603:10b6:303:b7::32) 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_|BYAPR21MB1336:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e098525-6759-459e-a417-08db3872c0c6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zeq999l4kiaiux5vWKCMV7sIw4Cr6BxasJ6z30HIv1yVMEYglfoZrJOvuZzhHT+bWKIseV1tDIV7N0z/0QKrGo5NHjJylhtFaktcAPS7kQJrpZD70lkA5HHGFTE6mJBAVxMFWKw8R0ZmVZTvoWTsts1TK+VmuYwX1dQlOTVcP3/DHxQBT2VN/4MZlEgz1KM2h+lv4I7sYPG/nPHvpv8nXUGmiKCNBMmavLyM7czr4ABZfiUh0LZ87X6Dk/43OPoKNE9AAwi/br1O2XJnxDJbFc6EEQKqdvZewpjSuDfLhgE0CBHIJBSrcgDsZOYw32lQ93N3mURTzSufiT59POAIz1qGZJGBbhziHmlZVNQ6wjkPoF3kGLPf71XYmyfJijrygETf+meljVCmnTgCi2ejCLYTTmdjmax9Euit1dEVA/vDJkKRe9h7d+LAC3UJL8f/FxEXuSvvmBgNefl+e8bhmbXOJ7i6lklO5rqWVpkglgMK4N4qhtDQNF8na399FvdOwOH7U/byIXbCrL6UgfJP8rTbHCxAD3jaHJkiRDJLAsPQlRa0ZtqR/4Co83g7ShMOvo9koy5YM+WdRQoFwY7tC101bhri1H9zR8ZuQs1yHjEfQQkTxHbig6FW7UeYBX6BFf2t2kWC1XgDDsCGF/puKA== 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:(13230028)(4636009)(39860400002)(396003)(366004)(376002)(136003)(346002)(451199021)(786003)(66946007)(66556008)(66476007)(4326008)(478600001)(316002)(6636002)(5660300002)(7416002)(38100700002)(41300700001)(921005)(82950400001)(82960400001)(8936002)(8676002)(186003)(83380400001)(2616005)(6486002)(6666004)(52116002)(10290500003)(107886003)(6512007)(6506007)(1076003)(86362001)(36756003)(2906002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: yJx8T+AizIyx0YICr6edZa3SUlwPcbpQV/KeisWzMe7fWc7fZb/gYM86mWicCdYnxlVNj2tHV5zbfIxclW15Y5HTmTJAIywWsoqG1tPtDEIMZhey1l6DH6bv8Luaf6XyNtwcJpXhKnjk2FJ7PBmkx5FjTL149gZ9t8qX0kRnHVEUH0Q0aXpzSzNpf71hn1tWuJ4cbni0M/IAiNNrsF1v6zjsOyglF9SKCXGs2CsqfCAIbI4+OFAcVIyND8Ju2JBCuXtGKVwWOORxXqfuxfl5/1vA7yb3eoT46jkn9PXDHRMSTKRHenoJzKAH77v+neA7W/46n/hzVYaAJyBvtNcCMi3HiXVWdbUN9J9dBbmlcIZodFXhalbA8wYi3818tUWswyVdOgWPAUpWYCLcbu6kZX6GUQnqtDcGga89pMEmBGRnYzy1O91PdO9puuzRqxU6ivoumklpz89wYYJpvWR67U6n1Q9OP0xxtCFjQVCmICV98PU6/unJ+KP4afQV4R7wEqLvtCz4pHy6k+dmFbM6OoV73FmpoqEJSZtaXupquIKlLb7pIu1+WzIp9j3svWnU5fMAq6vl/1UfIvOZmkrrlgXXEdy3cjg0nq9Fvy6F3YqHoxJDuo7odqKrHbScb7VHAG0vlj15pfD+sKEhXXYJdzxqtjDO0M8/1FJLk2UAVBSmbX7Jdf9uxujmSpL2Dq56zU8yRNge9/p9Mdo2DAGPddXLEIrLxpqAVMYPVrGzrokAikbNK2UPBYwBlj0xz/LcSFMNGKIaYgrHRFiRpBcyA3CFxsljOHO8VAvQum2m7q9AyFbZ6l+oBMzIOiJTJuvOefBtzhPkClivP71V/tl2J5Vk4VQUDS39B+c2O7KOvpedHHfDylNE3UqS1pDD8EGBoG4f7dyHa05VCCmhj5jLX+z4V5j9RPbVr+uUXTEGywRUjFK/MlJ6Kfi+HElRCQxtsVmXYe6WJ6/iF1MR8kyYUHdLOGzvh9zyyUW6ALwjmrslGeMhCCpZEWtqztb21GNQyDluEkcXAxCe6qk8D8bli9kYA+hoBCDl4UyOe5qvCAQSo59iaEm5bA8+gLKGbrZTfbwva35lLm3+ZyoW4I0sTLXx9Is78jcZHmIeAHVAs3cbdSzpBEDOO1YPA+o4WM8GIpSbX0AhgXAPOFSo3mX3dmcIv4dvDUi4Jx1X5eTdFTgdp7ex1kcyccVyKbzYv+sqVa8/OGOBbMd0fIi7VAVDrQRnaWRv8m72WHlhZMMko4awqINuJBwWZ+XPWyw5sa1FfF0V+r+26lq/m+/zhnaiAU9vv7/cZK68fWYlp3u3MlS1sOj/oRW+xIWrop9rMfUHtO/yYkVYzda2+iN9qZkEuBhPFnlG0jGybOw3I2MUYC3rFUpcbeionXrh4Ee2YrXeLQTGJs6zFdEsYO0QNHs+K/emV9+6wcYKCK0k7Ka4KA4cFFGWk/llDOKwh9H4eqP6p5SwDP2Mx3gELEdeljHZd04L93HF6mQwz3lKIs+bkeRnoY7ekH6vYoaC4trL3lHKPUVZK/fDJA85nfQ31Aq5Jt84NPc25Rqj2OOhhXTAop2xjhKmQqbToNnYfYiFpAh8Om9VjPFUtCvsvWrrsVpAF59iCvd0C5T8t1WgSy74Md7C78LD9mFkaOdird1g1kKR X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8e098525-6759-459e-a417-08db3872c0c6 X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2023 20:49:31.6746 (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: tEiU03XUZbi3yCrMcbCA5DQPAarKdIoSlVn2CEpGcj5GUcMLzTvt/cfGzxP3NuqtAA0lIxAFZZ0xB6+gi7/6Dg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR21MB1336 X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE autolearn=unavailable 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?1762642739458401288?= X-GMAIL-MSGID: =?utf-8?q?1762642739458401288?= 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. Reviewed-by: Kuppuswamy Sathyanarayanan Signed-off-by: Dexuan Cui Reviewed-by: Michael Kelley --- arch/x86/hyperv/ivm.c | 6 ++++++ arch/x86/include/asm/hyperv-tlfs.h | 3 ++- arch/x86/include/asm/mshyperv.h | 3 +++ arch/x86/kernel/cpu/mshyperv.c | 2 ++ drivers/hv/hv_common.c | 6 ++++++ 5 files changed, 19 insertions(+), 1 deletion(-) 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(). Changes in v3: Added Kuppuswamy's Reviewed-by. Changes in v4: A minor rebase to Michael's v7 DDA patchset. diff --git a/arch/x86/hyperv/ivm.c b/arch/x86/hyperv/ivm.c index 127d5b7b63de1..3658ade4f4121 100644 --- a/arch/x86/hyperv/ivm.c +++ b/arch/x86/hyperv/ivm.c @@ -400,6 +400,7 @@ bool hv_is_isolation_supported(void) } DEFINE_STATIC_KEY_FALSE(isolation_type_snp); +DEFINE_STATIC_KEY_FALSE(isolation_type_tdx); /* * hv_isolation_type_snp - Check system runs in the AMD SEV-SNP based @@ -409,3 +410,8 @@ bool hv_isolation_type_snp(void) { return static_branch_unlikely(&isolation_type_snp); } + +bool hv_isolation_type_tdx(void) +{ + return static_branch_unlikely(&isolation_type_tdx); +} diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h index b4fb75bd10138..338f383c721c9 100644 --- a/arch/x86/include/asm/hyperv-tlfs.h +++ b/arch/x86/include/asm/hyperv-tlfs.h @@ -169,7 +169,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 e3cef98a01420..de7ceae9e65e9 100644 --- a/arch/x86/include/asm/mshyperv.h +++ b/arch/x86/include/asm/mshyperv.h @@ -22,6 +22,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, @@ -38,6 +39,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 ff348ebb6ae28..a87fb934cd4b4 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -405,6 +405,8 @@ static void __init ms_hyperv_init_platform(void) if (hv_get_isolation_type() == HV_ISOLATION_TYPE_SNP) static_branch_enable(&isolation_type_snp); + else if (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 6d40b6c7b23b9..c55db7ea6580b 100644 --- a/drivers/hv/hv_common.c +++ b/drivers/hv/hv_common.c @@ -271,6 +271,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 Sat Apr 8 20:47:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 81275 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1056554vqo; Sat, 8 Apr 2023 13:52:00 -0700 (PDT) X-Google-Smtp-Source: AKy350ZHlTN0SYzYz8tvV8+rF1jbRGpOuPdBI+7IYHf8v12NizmfuKrguri8pVT6oL9P1N2csdAN X-Received: by 2002:a17:906:33ca:b0:94a:5d16:a280 with SMTP id w10-20020a17090633ca00b0094a5d16a280mr672992eja.9.1680987120096; Sat, 08 Apr 2023 13:52:00 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1680987120; cv=pass; d=google.com; s=arc-20160816; b=fBi2GV/KLObZBTxlh51cdtvVbhQMx8ugma4rdLvulFPmElripFIv1+praj2G2NNzNM B0HHy0FDbiHr7PWvsDBNeT3oxN3VW0Sw6ORxyF6V7t4K+xk4WDq6WCJNBKND04yh/9zk SdCw/a32dyDbmmAUqQVzQXSzVBksOJlCeR7euBV4e9JwXEUG5WaIkE7NPvLTyeIwrWlX YJAq7HpYhdwCdBjQ18FTKCMFXlDJ7JRGAQoa4Cre0ZFPKGNJmnHbbzdaTVe4AdTqEdxs 0FYJs1SHCTEEyamS3AeKIToJSss6UDxmxNBSXuhPYPT5CuvWb0RmFKDZLmcnEZ53owHr yXUw== 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=c271glfaaF8I7MsJtTo/QKuY8jQ6CriOvGxRWW1KDjc=; b=v3OFbTJPi2q+3yQgCIdQFZjy04iAYFEJNL9K9J768GhdRztmGycYnmw1l3+VT98LsW jiGcnrVQormoLTPbtMwuE3sel3Or5Ox5epPR7P99Fk+1jOrsKh3Wl7QYgyM72L+0MsiP qTJvpX5cQgsvOcJvZJu95wyB+EVmjkbgnFspWm0jv4x9WFoS9kxzuuvBVp2rjRLnBKQ9 5DVtvYGBiNmknaiS2FXSBC3y8aeT63JhHBO0NzhVY/LhQxUsmq+cThunlKCtIpZ8Maib zqMByp7AW+Tqg0pGmvCyQUJtKJ0o+qsk0TrknYSrDQxNwAE9HprWY/VgXhDJksAet3tF RFEg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=BUTNqOIt; 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 w25-20020a170906185900b009407d24471fsi3525047eje.593.2023.04.08.13.51.36; Sat, 08 Apr 2023 13:52:00 -0700 (PDT) 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=BUTNqOIt; 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 S229585AbjDHUtx (ORCPT + 99 others); Sat, 8 Apr 2023 16:49:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229545AbjDHUti (ORCPT ); Sat, 8 Apr 2023 16:49:38 -0400 Received: from BN3PR00CU001.outbound.protection.outlook.com (mail-eastus2azon11020025.outbound.protection.outlook.com [52.101.56.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D12927D90; Sat, 8 Apr 2023 13:49:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=n3mQE2aF+PbGxy0zV9A+azbIfh9OMQyE8oxVUqjn2NgIfwGU80o2cmWuXud9spuD1IE1QuMH54Td916b7lMMkfb5sKzSs8Z9bPGbIh+iT+azV5nOgLZoOUZuG9gHKZSgrSosYhe9wdXaH2g6MtzyrFQy4bFxqJj4hn/G3TM4MvkfUhK+Ekv3ec4dHVV80ZrVZ/gyLJIplqsLlBPINw26mcrCTJaVEAVcGF+L8eZJWcps7TMJGW8tgtIfyaCC0af7n/Exv9zQcbrs59/Uh+Me588oC4gTbCFMFNnlQqwGtQdTNUw+V3b6zvaEHNXvWXVavYXz5eT3LVXUHPi39KdRwg== 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=c271glfaaF8I7MsJtTo/QKuY8jQ6CriOvGxRWW1KDjc=; b=ApD1VTTDBn5NHcjiyhkseAIiMMmc5NR63s7rUhkomRJiwR3sJ+KJjCWt1uCNbx+wJbEHCBBZdnrePkoMvaekgntaFVbejp7gpuigvY9ExyuBCwf4bb+0NjKVRn7K3vjmWI7P6wTAZ22AVnkHRkSFugDdbSYcRD4YAkcUk0W91LRNY+YrJ2YN1M7LdJ30nE0ODPrb6qb1n62CgBPx7Rcy1ZBK8RIu00RaIx0BK+G+/17j2YAZMEC52KePSAbwIlAe718AG48cKxl+gwlVq4kLLoJKVSGkrVBIMbN9EAUSOIq1LSmkQKJ/245y89jBCzHC60E3uKPYQw3CBzgwKx6Naw== 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=c271glfaaF8I7MsJtTo/QKuY8jQ6CriOvGxRWW1KDjc=; b=BUTNqOItREJxytovrhusF5Mpu7LQyXat1C3arkIU0y8SsOk8aYmaeOy2llhyE2eW1t1gPwJdzmPSOuT26CGsKIHSFzP+CzcmkegYzJ9H+dHD64ReUFQ+5t3ruk5HR6xlduDoWPSUc0TRRiZwoOE434XLaMp/5NUfD5ULBQghZwQ= 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 BYAPR21MB1336.namprd21.prod.outlook.com (2603:10b6:a03:115::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.1; Sat, 8 Apr 2023 20:49:34 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7%6]) with mapi id 15.20.6298.017; Sat, 8 Apr 2023 20:49:33 +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, Tianyu.Lan@microsoft.com, Dexuan Cui Subject: [PATCH v4 4/6] x86/hyperv: Support hypercalls for TDX guests Date: Sat, 8 Apr 2023 13:47:57 -0700 Message-Id: <20230408204759.14902-5-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230408204759.14902-1-decui@microsoft.com> References: <20230408204759.14902-1-decui@microsoft.com> X-ClientProxiedBy: MW4PR03CA0117.namprd03.prod.outlook.com (2603:10b6:303:b7::32) 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_|BYAPR21MB1336:EE_ X-MS-Office365-Filtering-Correlation-Id: b1d3d362-d7f5-4ba1-c91b-08db3872c216 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /xK7gVx0LQXpM4dR3Q4V6QZpvskw0xliEjGIvNmlIRc5JfvasDgBFVYNMQTuwao5mNH6dBikAPOTh0sz+EjkgWV1O6g6UwjF6qBwd+n2Dk1xvetFHH8kMySLEQHKltSPBd32OX5iUIPxkgo/49MrnQMDjD0s6DoOqzXCItyqBI4mtweZ5kBnYAxS9T3tLF/Ghky4uP5jrhM5R0gZ58BxrmBOCECXJYMQ5mGhnEJdcI9zg+FXaEwF/SGg+nMNvNhukO9WSSsHRJcJT8YAkXOSNPf0FfI9tyh/BXYBS6Nq4tf0gGHYFgzjF8NSoZrQ7+V7xXF0eKnDFwjQr52j7LecMEU7L5Rc9DvWqGah/1E/eo0ycsL/jQvEOi4yjLsqjUfHYNoVcOvbQnEdC+ZijN+3KLvNvz8MC/2431G/GwbNjvxaCrP8ibH0pR+6xEluKQAxq2K16iq7ZiRCzqtEHTwY4MnESkE21ROkdLfCr/lNn2l9KRYyohDU4F9XGtYgJ9CouXlq/PuonQi7+eU0sntwOAVekOIzUo6fP2ORMEXAWw6fRP29yzXQA7roUpHn/v1I6Z/HZnaaMh+OKu/ZQ6UuxWgnLyrjAZYcdcrON9Uph5hPFTTMdRO5Qfp75kJiz2H8n+d4elhTXo4xy9wgvPP9zA== 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:(13230028)(4636009)(39860400002)(396003)(366004)(376002)(136003)(346002)(451199021)(786003)(66946007)(66556008)(66476007)(4326008)(478600001)(316002)(6636002)(5660300002)(7416002)(38100700002)(41300700001)(921005)(82950400001)(82960400001)(8936002)(8676002)(186003)(83380400001)(2616005)(6486002)(6666004)(52116002)(10290500003)(107886003)(6512007)(6506007)(1076003)(86362001)(36756003)(2906002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ZMjlY7atL6/8ArMuBSHBQfdgh8Ng9elKFGH+CjbONFC0MCWANM4WFAVrdon3nzE1NE1Q6LI13S3Edzk0etYRdNEMX0GOzSvN5TEMQCunLeQZEpHd7uMN/sqUzWiUQu8oTFM2ClQl4SjxQLAHx69HjCNHI38FEVQ1asqDt5JamH18/BMrrXUjnR9OI14PGLlHLWg5l8wTsZttpX96dYpI8c/qsy6Xn1oBqW9OZTmuj4lFY+GlWZRnwgUHKocp38fb8gzWTZjIs6zYHHWMFkLC3DMvfQMD6KfEuxPqK1Q1IVKPSVZTFAbQPO/CmMdQj6zX7KfwCFvCstMimxmxpu/86wXWG2Gl3MEO4vtHV4hiKczV2dJ6OjFTmpRsY6t8CfKEGm2YU6Y1ZGdZDlx3USfp3TyUWhSN+vYDJlKmlWaQ/kYwhEj95JeS3CaTjU416A1gDgZYalUfeYZCubihLi5VGwzarHg4neheOILLVolWKb9PHkBFqzqY5R4JymiqQtn+YFw+uOX92i9WcroM2Yb6TB20nXHuFbl3WrWgsyK7x2CgCOxeyedSJbn+zGqmj8axOLWEQFm9gSIC13hk1ubxh5mkdM/SJ/mszHb4qcp2fmxhOluUst9pQFoq1CPR43E5pUyO1dM7UWE/1zBdaIdErC2hXLiZSae5KP8WCzh7Y20bMTVb8wQR28g/VTh77tUlylvWYK1TanJQzxshG13QQDv7z0/noo3Be6lxwbdwSnu11qniCVKA6kgcqW0rEoM/W5Ed+VDhklxgdLuymQya67m+C7T3iq9Cpyzk598eMgqQcJ9ZUlHz5ozAFrd9WeFjlgK5M+OP+d/y5WC98CABn5Q+KYjelo+WXtJWG8WAmI7BbeGCQQ2FeyQLysjrMFBPzsCA5uphcPyQd4zVAGqb+AouzwNDewbwKq9CAKsDDYZzBUhlHOvaQxqKHMVOn5QcjPI8iZ7TXEiuZfsa3leg9seEdOEerFBuMDhctfoht6AQB1LqxOaL7O6+THweIA8KUTwqmrV079nKJikStFR75eaQwqf4DdZJrHMwTXiDfOif7ffHOW1vVWuk412kkJDEByyajARs6DQSM8O2+yTK8NfkxXyc6ZBWZpgBMMAPgDrP/D8dVw2nFQKAlsSAkbxC3uto+HWjtNfzZfYRhAEoY2TS45/79VEcViQYF0bT6hDZAubLzjtz/XCM3iinMnh2rOG0sMwmxROIJQ89HhNIgjz/1BZh35MH+WbA/iFjmwbYUn1OUCqXkYNYwQ4teniidcXVVgZOz1o47CXRVxTMIWt6DMeaeXCUAKi7iVpNUC64dOKp4eajqTL8bEuBzhG2MzHMGwKAQj4jkhG76rJHEB9EpRTzf19jBl6TzyMqCE9BjJFqXdME1J7yAIl+CAYdPnWGpLTtNzGoHgOHSjbOtxWNQRSCMRTnCQOx/6EmALAFyxqIyWvHmlMMgKjGyBCrqTbHeojtc9RUqOcaEyEFVwaOIoZNZPI4Z8oblW5erE7Hae9l+hDd0TjKfEsdqZdB36UH78uWzkOHF2gGe77EyzoFIqiJnHDrri7UAfJ/MncVYled3Ujg7v6GKmXwRuw7twB2K0MAWcO5yAKLYeiapa3JBsRHpR2xhteftdL1Ey3PZ463Hx41V4esJTFbtD6c X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: b1d3d362-d7f5-4ba1-c91b-08db3872c216 X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2023 20:49:33.8632 (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: kMGdfJ2WGYKguby92c4pheFC6wK0qR9I/6BfZEAEDi7Tzyah8W4ZBDHEKGmQTF3ATY8MCv3KgxyX0hsI0Kxk1g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR21MB1336 X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE autolearn=unavailable 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?1762642750190947268?= X-GMAIL-MSGID: =?utf-8?q?1762642750190947268?= 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. Reviewed-by: Kuppuswamy Sathyanarayanan Signed-off-by: Dexuan Cui Reviewed-by: Michael Kelley --- 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(). Changes in v3: Decrypted/encrypted hyperv_pcpu_input_arg in hv_common_cpu_init() and hv_common_cpu_die(). Changes in v4: __tdx_hypercall(&args, TDX_HCALL_HAS_OUTPUT) -> __tdx_hypercall_ret() hv_common_cpu_die(): explicitly ignore the error set_memory_encrypted() [Michael Kelley] Added Sathyanarayanan's Reviewed-by. arch/x86/hyperv/hv_init.c | 8 ++++++++ arch/x86/hyperv/ivm.c | 14 ++++++++++++++ arch/x86/include/asm/mshyperv.h | 17 +++++++++++++++++ drivers/hv/hv_common.c | 24 ++++++++++++++++++++++++ include/asm-generic/mshyperv.h | 1 + 5 files changed, 64 insertions(+) diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index a5f9474f08e12..f175e0de821c3 100644 --- a/arch/x86/hyperv/hv_init.c +++ b/arch/x86/hyperv/hv_init.c @@ -432,6 +432,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, @@ -471,6 +475,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 @@ -594,6 +599,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 3658ade4f4121..23304c9ddd34f 100644 --- a/arch/x86/hyperv/ivm.c +++ b/arch/x86/hyperv/ivm.c @@ -415,3 +415,17 @@ 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_ret(&args); + + return args.r11; +} +EXPORT_SYMBOL_GPL(hv_tdx_hypercall); diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h index de7ceae9e65e9..71077326f57bc 100644 --- a/arch/x86/include/asm/mshyperv.h +++ b/arch/x86/include/asm/mshyperv.h @@ -10,6 +10,7 @@ #include #include #include +#include /* * Hyper-V always provides a single IO-APIC at this MMIO address. @@ -45,6 +46,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; @@ -52,6 +59,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; @@ -95,6 +106,9 @@ static inline u64 _hv_do_fast_hypercall8(u64 control, u64 input1) u64 hv_status; #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, @@ -140,6 +154,9 @@ static inline u64 _hv_do_fast_hypercall16(u64 control, u64 input1, u64 input2) u64 hv_status; #ifdef CONFIG_X86_64 + if (hv_isolation_type_tdx()) + return hv_tdx_hypercall(control, input1, input2); + { __asm__ __volatile__("mov %4, %%r8\n" CALL_NOSPEC diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c index c55db7ea6580b..10e85682e83eb 100644 --- a/drivers/hv/hv_common.c +++ b/drivers/hv/hv_common.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -128,6 +129,7 @@ int hv_common_cpu_init(unsigned int cpu) u64 msr_vp_index; gfp_t flags; int pgcount = hv_root_partition ? 2 : 1; + int ret; /* hv_cpu_init() can be called with IRQs disabled from hv_resume() */ flags = irqs_disabled() ? GFP_ATOMIC : GFP_KERNEL; @@ -137,6 +139,17 @@ int hv_common_cpu_init(unsigned int cpu) if (!(*inputarg)) return -ENOMEM; + if (hv_isolation_type_tdx()) { + ret = set_memory_decrypted((unsigned long)*inputarg, pgcount); + if (ret) { + /* It may be unsafe to free *inputarg */ + *inputarg = NULL; + return ret; + } + + memset(*inputarg, 0x00, pgcount * HV_HYP_PAGE_SIZE); + } + if (hv_root_partition) { outputarg = (void **)this_cpu_ptr(hyperv_pcpu_output_arg); *outputarg = (char *)(*inputarg) + HV_HYP_PAGE_SIZE; @@ -157,6 +170,8 @@ int hv_common_cpu_die(unsigned int cpu) unsigned long flags; void **inputarg, **outputarg; void *mem; + int pgcount = hv_root_partition ? 2 : 1; + int ret; local_irq_save(flags); @@ -171,6 +186,15 @@ int hv_common_cpu_die(unsigned int cpu) local_irq_restore(flags); + if (hv_isolation_type_tdx()) { + ret = set_memory_encrypted((unsigned long)mem, pgcount); + if (ret) + pr_warn("Hyper-V: Failed to encrypt input arg on cpu%d: %d\n", + cpu, ret); + /* It's unsafe to free 'mem'. */ + return 0; + } + kfree(mem); return 0; diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h index afcd9ae9588cb..83e56ebe0cb7f 100644 --- a/include/asm-generic/mshyperv.h +++ b/include/asm-generic/mshyperv.h @@ -58,6 +58,7 @@ extern void * __percpu *hyperv_pcpu_output_arg; extern u64 hv_do_hypercall(u64 control, void *inputaddr, void *outputaddr); extern u64 hv_do_fast_hypercall8(u16 control, u64 input8); extern bool hv_isolation_type_snp(void); +extern bool hv_isolation_type_tdx(void); /* Helper functions that provide a consistent pattern for checking Hyper-V hypercall status. */ static inline int hv_result(u64 status) From patchwork Sat Apr 8 20:47:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 81276 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1060996vqo; Sat, 8 Apr 2023 14:04:48 -0700 (PDT) X-Google-Smtp-Source: AKy350aiGGu6HEKSs0PTEdfI43zVDKGONTzz8xkNAXUDCBDbS6ZpTpViiUOG2EU+e0jw/YCTGxut X-Received: by 2002:a17:906:2a48:b0:933:4d37:82b2 with SMTP id k8-20020a1709062a4800b009334d3782b2mr2989938eje.57.1680987887974; Sat, 08 Apr 2023 14:04:47 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1680987887; cv=pass; d=google.com; s=arc-20160816; b=Xcm71FIORqnsfAUTmpyW0rdBrFPCTVc7IBRdzIOeHcLk5uAZrA54WhEq+Yj5yjXjOq ffGnUjRfy/ZzCRtkITLPaBTLVX3L500AuYL0M1ZdWKrvMj7NRUQIsqVm6W2VgyCdMHi/ N+YHucbmfYCDr5KEjo0RLLaOs2QeNMLBypm0objMsXz8CeYgezL1kaXxE6cFiSU+kRiN dODXVYlrdx0VJdmDbDMk8SuOIO7yEZ9UOtTpg80ou6f2t+lq6joq1IS2Z5nwu+SmQNp5 lDdxmrAkTLRP7nGTw50vXYQF5C6nGdNl1jreTP3OaCbL2Kt+jx/2AVyP3FWIV//l1MVB XIaQ== 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=BpXPJ/kRHe0EDqAWprInMLd4/U8d1OjQTIC5kuFLCpE=; b=cgjcHVVvkfneW2HrY0ZoO4Rs0pfBvBW27OVoXiUxptvlXu6ll0jVuAyMAiQPgwqBRM K7EP3AGnwt4Ka21sgTZIG6bp53QTd8vRBEAi2zWfXVHWKa4LyAGoVmwzqT1iRQgcyPbA nCM01Me8NdKTFS+FScZEhE+/pIh4RLQhUs1izNnev41AmRc5cm7R+TjLiRwZeIL+RQjO pWdkTAxBP9kpKAo4+RN5e6Oz9jke0VSU6emCPZDwX4Zi29UKngY64nKlIAexQ/jSKKR0 dOBwgV1zhaJiXOSYJMRv9zgpbXy3hzt3r6ujZ9TABlqpzGAdVzeY2iDdUtFanJUr+g0R N5gA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=Y7Z27Mld; 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 q17-20020a1709064c9100b009475bd87152si3709390eju.959.2023.04.08.14.04.20; Sat, 08 Apr 2023 14:04:47 -0700 (PDT) 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=Y7Z27Mld; 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 S229618AbjDHUuA (ORCPT + 99 others); Sat, 8 Apr 2023 16:50:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54076 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229555AbjDHUtl (ORCPT ); Sat, 8 Apr 2023 16:49:41 -0400 Received: from BN3PR00CU001.outbound.protection.outlook.com (mail-eastus2azon11020025.outbound.protection.outlook.com [52.101.56.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5F88F8A6B; Sat, 8 Apr 2023 13:49:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=E4hyVOBZ9R0Xq03egIB+qm5NekFgkbyqUB2wQKPMpD4T3L0cd22WLDPKiWCDnn4Uck1QGr9nH7dMOm2kC0MYjuXuc7oVTAbUQrCn+SkvxxOg/b783GEPwpfnihSDAnVpsZOQtSzQmNaJqSfmSRIXzYVj+uj0Cw2sN22hJKTMcuBJZhgPkYlRe4x59qGMMwmeaVOkJ80tq6nJS0UsLxxDUzU5SrVp7LE4AGz9gTSzQZQ+HNwfOQRltWmp04ii+9IMrbTe50hok1NJtN44XWM9qb8hrpm+uYE/51T3NdCkmJ8Z5/Qe1lv7mHOYgOO+3w5wgfpQ+vvPS4mrII+qLJSIfg== 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=BpXPJ/kRHe0EDqAWprInMLd4/U8d1OjQTIC5kuFLCpE=; b=YRjX4Zdoql2woOfr7KUIeSeZJrJVBS9cTmEoV15STubGwx+FhA/mpSUy8jS244QkdEUROIL2dRnawXHo0QsX48WKYG72SsNzk4kIuQcxDcgDXQegBwu3K1kxGe+ADkytucT53Il1JAvhg3JL3e578APn4THzOA3tpA4RZzLjwtQ/44wcJxHIkwb2NPsGsKLbruteydfYXq6IqtAL0aQ1i9Q37TA9SxSlI9eS95Y1c/OsS8EUUXpJhsqxEDtry70EfqCfrchg3iLEkyPSlh+gPQh9yxtvUMptRx931e2Rk/cDHj7mdea4ZHceGL/3vtTZ+FWEQy92M/nKsXMLuy/rlw== 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=BpXPJ/kRHe0EDqAWprInMLd4/U8d1OjQTIC5kuFLCpE=; b=Y7Z27MldmZct+u2+3RyGV5DWay8DOhgO/h+IEd/p800VwiUCqiS7uDJUKZgvzJUn97B5K3hEWWKFgXLPohNJQmIEzBCAtuD7FxpPU9Icnm3YpXJOLolnAwEJ3tnvnxkuunPRXxE6JPbL95KDRGnA5F+Bj9NoiCxOQG2Rg7uo8PM= 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 BYAPR21MB1336.namprd21.prod.outlook.com (2603:10b6:a03:115::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.1; Sat, 8 Apr 2023 20:49:36 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7%6]) with mapi id 15.20.6298.017; Sat, 8 Apr 2023 20:49:36 +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, Tianyu.Lan@microsoft.com, Dexuan Cui Subject: [PATCH v4 5/6] Drivers: hv: vmbus: Support TDX guests Date: Sat, 8 Apr 2023 13:47:58 -0700 Message-Id: <20230408204759.14902-6-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230408204759.14902-1-decui@microsoft.com> References: <20230408204759.14902-1-decui@microsoft.com> X-ClientProxiedBy: MW4PR03CA0117.namprd03.prod.outlook.com (2603:10b6:303:b7::32) 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_|BYAPR21MB1336:EE_ X-MS-Office365-Filtering-Correlation-Id: 77806ffc-93ee-404a-8bcf-08db3872c364 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: j2/KWTjiA4MNBK1bcnedWW4FLWbXZCtKopeG5KTwSHafvnwTng3jD1ziNrYaka7jGtL3SlfCY/aJFYC6pdGXD6076Wn/WmTgq3kqR7mNraGQqd8JouXjQvZWdjLPwmr4GZSAuYxtcMqZzIPy+Uj13yGe9xaQFsXtRYOs2X1JVtdZff/4M6uw1avmckfpxJyfBRDyjmHnLMiar3dWvVT6ywP1+TBcQlqiAzXXrXsQuadOO/EVwRYfBdObUAmv1TVhbVp5JoZXfRGdrfTDC/epZxECtTfQpzuHdUFRlI+tUmNkaw90rkd5aIHQv90cLBIFsddC25vTBovI6J/uZI3o5jNWtSLkIZfcA0WOvGmSI6fUTs28WZ5loz4nEDGKRDDz1sDdE9DEmav4foL20tObFL31Xs/nFva1/k5LPbz6RoCrzlxJVsR0NfqhATwXIy0hjRRZ2yoai2K2/caFv0wOWjaEgZshFc+ihowAzc+rdLkOTiT71TIpB+nfQXKeSN10Ipnnx1zST/Sjuz1+R+HHE+0YpZ05cBKJyrLfcd+Wb/tU/xBhXnq+ayI1ofpvsNPHHdIjvsbgN4NbUWoycgnfgFHmI2x+ZuGrooKDw56atdK/By/SUl8wYAliHbFnmpRIk5jjry2SBkocDYCVuiyDkQ== 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:(13230028)(4636009)(39860400002)(396003)(366004)(376002)(136003)(346002)(451199021)(786003)(66946007)(66556008)(66476007)(4326008)(478600001)(316002)(6636002)(5660300002)(7416002)(38100700002)(41300700001)(921005)(82950400001)(82960400001)(8936002)(8676002)(186003)(83380400001)(2616005)(6486002)(6666004)(52116002)(10290500003)(107886003)(6512007)(6506007)(1076003)(86362001)(36756003)(2906002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: d6+3aqubf54jT9CMHX0ZdqJ18yD5fq7a3dpJ1oEbQGkMiShsyx+Q/obM7qYkfUC8/bA6y/jiw8XPV08OiCsGtvjdXi0K30+OicD2itQTV1a3bBPNCIxnMLCshCDj3bzY0GX7SHDFTzmByDIhRDTgVqOCimp/nJixt3thi187UNNFMaQb90SDUCGRTMkbmJxFuticS9wLm6N9OTNQ7HeAOhLdptpWChTg4xd9/RwYKaxw6LrhoIhZCTJewsmkRd+naEDPNSihHVkVu5OD5qL+dV1HFTglYD1YBhtEcaO9PNVd1jhmEq5Z0MTYx6ZTo9VRyN00U8bX0HIwoPDpyV4yGcwByGt1FRGVpScDO7lKZvbG8UAD2cVu2+IbS9/AntO+AinEdOomrzzg0g0J1xIDmf381sGL5yDDUn28+jsGjfyh75kw3knmRmtA4hpBbD+2wYdf/v0X4pAkPIUOjCjHkCqXMHeiOlJzXZQwvrBP1SWrquGCjNDFBvjVNg1qN4OEybtjfJahGgRtuu1fNcT4oNPBPrJZ87l9ZYCSLwdVuZWoIuNWFn59V9c+phkNuDuOADqA9v/+IT9dfup61iGM0775IEIQozrDUQ5KL/nX+XFdm/sAozVzGrZf/tGzbOJxfK9jxtX3wt1K9DZzY/dci4jcd89ATiW0F0i0oSQDDbu0etb4ZBzFH5VhV0r/1tXtpT21eQraYWJrFayZfSc6tye3Alqa3EeWRGXmaSkLDAcRPsO8TTO6Ior9UlardXeck5A6sqDO60MPYKyNLIjP8DNvCQN3ZQNYFvT7s986VJwZRomN51Qd9DtqBWbKZ+Wl9wN2BMvqw9TExezfU2A/qYJV0+hSuifX3JYJPV1PnZD6NEyE0fGm6EeNJeaCB2Ldz+IUfFepglRlUoP8lZZltScFAngC6/0VL1YuJZi1BP9CUE00mgnUAQLrVVG8wCkhp2XtDeJ/o1OGEMOzFxKJrqMxpqCY2pvA6Xzq1PDcXXBwLWs5X5rj2f9NexPB/AO1gcx8eqzhKE9pKNaWm9+uVL57IM5oyFcyxctqz0jHeaMfsb2vzpdmibSSRpeIJjVFWW49M3nYoXSvod2WwG/JA8C9xvoj/KXDMKYQmR1ceTqD64ylVjG7ZLPKAbYzmxnwg/ddCNA+jYbjnrQwPN71d13SM1i8aIeMqFqgr9k7G++KZaN13dyUU6cgs0oaoXB8aBX0EcglAnSF3jyZOf6WxKzz0cUd1qGqchwkIkckNpq8SPKAiNGytiE0iZFrYnUWDpJ7MO1XknpYtZzu9jzPNtcWpf5jLtJBpbxVlWIDdoOPKsW/Qk9H3lKY097aTqYsRBwJJ997siqTPRMZTcBn1lZqg93leD2CgHY7HOOPmna0/RWo3+jJvrKSd5kpGII2NwKb7OfTqkCejHzY+X0NuiSfMwU5U1vTyuc4U0FialJL52WFARl1qWV4/fnmhsVmSKlpOIGPTS/32mcJ/5Gxi2RgK7De+/9Ucmf364nLlyOPP1F6FnrO9JdIvuDFK/k6ZHF6kDSvQwNs6fXvAIkDzg59G0nAVDDnTk42OiRlkg2NLhRLxrk6Db7BIa+kETngjpUWsRd1G9VO1BgPVtg1NIY0AibpigzjvWSrSEjnG2wbjF3waO0zIOnVrovJTk8y X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: 77806ffc-93ee-404a-8bcf-08db3872c364 X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2023 20:49:36.0075 (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: xbvDAV+ocnI4+0+Scs9GULdwm6DapBI7bJmM3b2HxE20pJGJyqVr2UoX4UTfdqs8n89vHCtB7McUhXE9pUj7nA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR21MB1336 X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_NONE autolearn=unavailable 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?1762643555481612266?= X-GMAIL-MSGID: =?utf-8?q?1762643555481612266?= 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. Don't trust Hyper-V's TLB-flushing hypercalls. Don't use lazy EOI. Share SynIC Event/Message pages and VMBus Monitor pages with the host. Use pgprot_decrypted(PAGE_KERNEL)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(). Changes in v3: Use pgprot_decrypted(PAGE_KERNEL)in hv_ringbuffer_init(). (Do not use PAGE_KERNEL_NOENC, which doesn't exist for ARM64). Used cc_mkdec() in hv_synic_enable_regs(). ms_hyperv_init_platform(): Explicitly do not use HV_X64_REMOTE_TLB_FLUSH_RECOMMENDED. Explicitly do not use HV_X64_APIC_ACCESS_RECOMMENDED. Enabled __send_ipi_mask() and __send_ipi_one() for TDX guests. Changes in v4: A minor rebase to Michael's v7 DDA patchset. I'm very happy that I can drop my v3 change to arch/x86/mm/pat/set_memory.c due to Michael's work. arch/x86/hyperv/hv_apic.c | 6 ++-- arch/x86/hyperv/hv_init.c | 19 ++++++++--- arch/x86/kernel/cpu/mshyperv.c | 21 +++++++++++- drivers/hv/hv.c | 62 +++++++++++++++++++++++++++++++--- 4 files changed, 96 insertions(+), 12 deletions(-) diff --git a/arch/x86/hyperv/hv_apic.c b/arch/x86/hyperv/hv_apic.c index fb8b2c088681a..16919c7b3196e 100644 --- a/arch/x86/hyperv/hv_apic.c +++ b/arch/x86/hyperv/hv_apic.c @@ -173,7 +173,8 @@ static bool __send_ipi_mask(const struct cpumask *mask, int vector, (exclude_self && weight == 1 && cpumask_test_cpu(this_cpu, mask))) return true; - if (!hv_hypercall_pg) + /* A TDX guest doesn't use hv_hypercall_pg. */ + if (!hv_isolation_type_tdx() && !hv_hypercall_pg) return false; if ((vector < HV_IPI_LOW_VECTOR) || (vector > HV_IPI_HIGH_VECTOR)) @@ -227,7 +228,8 @@ static bool __send_ipi_one(int cpu, int vector) trace_hyperv_send_ipi_one(cpu, vector); - if (!hv_hypercall_pg || (vp == VP_INVAL)) + /* A TDX guest doesn't use hv_hypercall_pg. */ + if ((!hv_isolation_type_tdx() && !hv_hypercall_pg) || (vp == VP_INVAL)) return false; if ((vector < HV_IPI_LOW_VECTOR) || (vector > HV_IPI_HIGH_VECTOR)) diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index f175e0de821c3..f28357ecad7d9 100644 --- a/arch/x86/hyperv/hv_init.c +++ b/arch/x86/hyperv/hv_init.c @@ -79,7 +79,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); @@ -89,6 +89,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 @@ -398,11 +399,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/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index a87fb934cd4b4..e9106c9d92f81 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -405,8 +405,27 @@ static void __init ms_hyperv_init_platform(void) if (hv_get_isolation_type() == HV_ISOLATION_TYPE_SNP) static_branch_enable(&isolation_type_snp); - else if (hv_get_isolation_type() == HV_ISOLATION_TYPE_TDX) + else if (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; + + /* Don't trust Hyper-V's TLB-flushing hypercalls */ + ms_hyperv.hints &= ~HV_X64_REMOTE_TLB_FLUSH_RECOMMENDED; + + /* A TDX VM must use x2APIC and doesn't use lazy EOI */ + ms_hyperv.hints &= ~HV_X64_APIC_ACCESS_RECOMMENDED; + } } if (hv_max_functions_eax >= HYPERV_CPUID_NESTED_FEATURES) { diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c index 008234894d287..22ecb79d21efd 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,8 +275,9 @@ void hv_synic_enable_regs(unsigned int cpu) if (!hv_cpu->synic_message_page) pr_err("Fail to map synic message page.\n"); } else { - simp.base_simp_gpa = virt_to_phys(hv_cpu->synic_message_page) - >> HV_HYP_PAGE_SHIFT; + simp.base_simp_gpa = + cc_mkdec(virt_to_phys(hv_cpu->synic_message_page)) >> + HV_HYP_PAGE_SHIFT; } hv_set_register(HV_REGISTER_SIMP, simp.as_uint64); @@ -244,8 +295,9 @@ void hv_synic_enable_regs(unsigned int cpu) if (!hv_cpu->synic_event_page) pr_err("Fail to map synic event page.\n"); } else { - siefp.base_siefp_gpa = virt_to_phys(hv_cpu->synic_event_page) - >> HV_HYP_PAGE_SHIFT; + siefp.base_siefp_gpa = + cc_mkdec(virt_to_phys(hv_cpu->synic_event_page)) >> + HV_HYP_PAGE_SHIFT; } hv_set_register(HV_REGISTER_SIEFP, siefp.as_uint64); From patchwork Sat Apr 8 20:47:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dexuan Cui X-Patchwork-Id: 81277 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1063480vqo; Sat, 8 Apr 2023 14:13:09 -0700 (PDT) X-Google-Smtp-Source: AKy350YDJgA+Bf6OWCjhykTPT4hQHRQlrYsTeAzXds+5KJlCb73Ug1iyE+NJfAw+7IZO7kk4ynqU X-Received: by 2002:aa7:96c1:0:b0:625:ebc3:b26c with SMTP id h1-20020aa796c1000000b00625ebc3b26cmr3152875pfq.22.1680988389434; Sat, 08 Apr 2023 14:13:09 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1680988389; cv=pass; d=google.com; s=arc-20160816; b=QgK9AWVgJHui/ObAqw4skvh34eE7eYfZ+ntgfG8HF3Q8bXb6i48wZouglMcbHaQPkJ XDlWtw6RldDLN20iw7zOz86BkJKLKgFmFKnYJNpfIZrYZbfnYnRtr/z/COTv8NERX+FP qE3VBvAJBURKOCHctwWauAMnudx6GX2uYKJz4GKiy/ZJFMq6VzCDrzm0XG8d/eQ/XjxA zlBt83u/lLld85MhZkOnXc1RHDPtLXDnhAXbKZv3CuPfb81YCeYnZs838xciveiqUQ1d 01CQzewCwU20ljnFwNUB1g/AetLvwG2XM+hYs2IrqMSPID1ErQKp77sY2ZDxTfaaUxPA dCXA== 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=bdLR7U+eYdNzw5TcfNruWTluG40uXqBcyz6GVbJIGEA=; b=HxAg7AU0y2NPTR+aDmBhHzapq1+egumvQMp8AVKCKKfnFTrvX9I68245xDg6ErPoHy nEXcOqXd/iPvF7D9lPgHEg9vNofrscNjSGc6oxWyhmazryJJlx8Zxn4OvLO5kYObq/SW TQzVXcDEf8fIolGZiUw7QQ4Qw6SUrLxcXX898SHGza+em/TwMyPUL0uLCDTdAS93FvA8 ZrHWXXjxe99aWRnc0pHneJnlr2lh2DJAIi/yZxYLL+RAc/r8yN3eWfGPScfddmBmtSKN SWsb9zadLQIDVDi+dxC2Wx0QBkSvh/sI+0Zr77VHtrhq9axekz1e9QyTzTe5S11Xt2VC 99XQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@microsoft.com header.s=selector2 header.b=T5xdLFhL; 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 u69-20020a627948000000b00634b9cb81f5si1342356pfc.382.2023.04.08.14.12.54; Sat, 08 Apr 2023 14:13:09 -0700 (PDT) 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=T5xdLFhL; 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 S229592AbjDHUt5 (ORCPT + 99 others); Sat, 8 Apr 2023 16:49:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54128 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229559AbjDHUto (ORCPT ); Sat, 8 Apr 2023 16:49:44 -0400 Received: from BN3PR00CU001.outbound.protection.outlook.com (mail-eastus2azon11020023.outbound.protection.outlook.com [52.101.56.23]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F38E8B752; Sat, 8 Apr 2023 13:49:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L71lEBW9Dh10rGT71T1ihrbfnnGoiA51q34YmXOwtYJjh3CGm/IlxJuvVfjUlRnJkyrBjKOCuWjD2TsTyhvrBvG2TRdvNL7NMUlpXW7Pfudnk+GmUA7pquDdYn6jnrDjmX0MG+ND2bUrW4exKngQ697UcmybrULSdzK9gQRONSANV4Ak4u85qEZ9BYM5lMthv3EJZiKcVWO3ffFdXBDvjzVVDypKR3L/7jxw+8Bqoy3E3DXCehNMB80Bjh9iNPbqs47I+pbQboA1Q2PF+Q6884F20T4IGbpb5p0PmRwTObwhtMyCkwWSJnJ3HZXnT2pRkZ9V3KtAagCFHyPm5Mgu1g== 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=bdLR7U+eYdNzw5TcfNruWTluG40uXqBcyz6GVbJIGEA=; b=n6Z21jV5Fq4ZsA7VcWsCB8XOLZRzsNAB4wkYle3W8o5214UjBo08N1PkLoWs39P351n399yex4xfXB08ojIv6Y2hqHYgeHo7ZQ6ohhj00j9oMfSW+cgXKZjUfH6bECTpWizl+b53wwK19/BdeubjdNcijLboWuxvRWT35PlNL81RBiTlC310L3wrLi/WkB5uIbMh6fECILOh3HnQqWbpgC+ktQtICJfdhShKVq86+QmRj6DG2XdiKOpjU3L6ORMeGiLqafdkFEq2ewVPmHQ3cNrQzYDiuddsffeWvW582sJi+FynMkmMTZ00wweqDe2ezr4gL0lqLzyD9ftAk+ZdEw== 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=bdLR7U+eYdNzw5TcfNruWTluG40uXqBcyz6GVbJIGEA=; b=T5xdLFhL1FSWcDbkm2KHOq7GNh+LJa1FUi6ThhSevWeTz0eceTK8087bv8hJtQyxjVJ/lbEvarmBysxzxpRasQdiwfsmmTbT1iBCkNQXtnwueqgQ5JN85x/qwcPaa4A9K7lJ9gik6Rj+wuBlZk94CdLS9daSF2mUsBhxQ9BDQrI= 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 BYAPR21MB1336.namprd21.prod.outlook.com (2603:10b6:a03:115::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.1; Sat, 8 Apr 2023 20:49:38 +0000 Received: from BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7]) by BL0PR2101MB1092.namprd21.prod.outlook.com ([fe80::97b2:25ca:c44:9b7%6]) with mapi id 15.20.6298.017; Sat, 8 Apr 2023 20:49:38 +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, Tianyu.Lan@microsoft.com, Dexuan Cui Subject: [PATCH v4 6/6] x86/hyperv: Fix serial console interrupts for TDX guests Date: Sat, 8 Apr 2023 13:47:59 -0700 Message-Id: <20230408204759.14902-7-decui@microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230408204759.14902-1-decui@microsoft.com> References: <20230408204759.14902-1-decui@microsoft.com> X-ClientProxiedBy: MW4PR03CA0117.namprd03.prod.outlook.com (2603:10b6:303:b7::32) 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_|BYAPR21MB1336:EE_ X-MS-Office365-Filtering-Correlation-Id: b36d130f-7762-42fb-89cf-08db3872c4ad X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HBLRgLxdEONZWVQm/6uv7spJf7g1orO0wXtGe1oOvtD/uu6UvGsAv02KDIv6ri1b+8Rc6z+DMqK+fLDiNCVLcpwrC1TPNk4kDFdJwLGx2V9Cyt6gZb/xNSyn2ugSosfsArPkjgyh1N/exCQxKsxly0n28EFPey22K4LRa1Cy4oXPtHSjyR1Wwoz0Hbq1aMnCcE6GlARjFZRPdyTduc96kZaYQ2Slfvl7v5Fu5J8vTcAOuXYvE+l6WO3Mg0u8bOFJU+f3BPLaJklpeG+aRt9T4TyE26b3PmIUU9U3ltiVW3SGLpUVzJnkC5uSfDBmmzQqVWr8pFI3SLthSUk0jw+AA61cGlRnztLJqU4zNzEjJ4/mZaQryYxP8V8eGK4kQhprlvZEPVed46w6yEEim1hkRonlbEEEQ2ajt5JI4DLa/QiARSfGRCiUdKgOKb9yB5Pyic5GrR8o2T7QOjcdzzKJAyC483w+GLUHcA1B7HGs0xGpSzlfSL1osqCVIT76dUDidrvDv22XLZGCvB89zX19DhWeWWdO2Lh37hdRt3FxA4jvwowIsHcQF92f3i63pl2232q7mOz7Fzj2UfhB9oeGiFAAVs8k4m+jDdCyjQo7uAbhcOCIP43KL/hgkzXSB1J9tlmO7ol8BVINnHsj0/u6zQ== 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:(13230028)(4636009)(39860400002)(396003)(366004)(376002)(136003)(346002)(451199021)(786003)(66946007)(66556008)(66476007)(4326008)(478600001)(316002)(6636002)(5660300002)(7416002)(38100700002)(41300700001)(921005)(82950400001)(82960400001)(8936002)(8676002)(186003)(83380400001)(2616005)(6486002)(6666004)(52116002)(10290500003)(107886003)(6512007)(6506007)(1076003)(86362001)(36756003)(2906002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: WZm3Ujk2Zy0o7SOe3OBkDeuOGaaNjob/UA5Rp0jQe2dXYVzRDRVHrASJ3jwe6eyV+AOYUsJTR82zGIsnfv1zonBEp1f6MhcPoko4T9WGVtl8sjP3WKKnHQRxS1bNerQOaHui4U9+wKez7jbi3mYCFG4hHTpZdnA5RXb727rZcV5cKT8gk8Uu4g0HxaP664tE+oYPu/V8xav25KQE6vwBznRIpgzGwzICYq24od72/zcOrk6QZNepIri/NBPuW1MVxqRE39I7RxYt1jUKFez5pSSBWmsfTaYpy8ruHSdJGN5+JS+lPVNltWWkqIlP++lVLZN+j1mtFfSIjNFFPE7dEa6d7p9mPq8jjxwzCu/m5tiXl/g0pCfDuX6CB3FdIgawTgMP/902TpnuMZ94mPIpTgZbrL11P/9a+JNO35+gpwB6XS6qUfi5DazBupUqiFZ4ynr1U+n5o0tMoM+O5LymkkqszJ2EVDdrdnOZhV1dOh3Z10273hHpH0Y8fT+9UWAZ+kmbvl7jri4Us/bC3B+Vhzz1LMICGSqsQzGvsFK3v6VNe2xZWXVAAhSBjgZeHV7wnCaBEUgegqgtGMvo57Y48CSM2Co1k3M9RFU5Jgr2Ns+0Y1A3KRAp58Mfoyqe1ctgUkgdRwj/aR2H2RB4rZvQR6M8Ifx9vf4DuUhX28mIdcxBaxswK4Qo4JgRTDprjP+N5Xsg6yctSxi01UWTD6pGG4R+V9XQ7MwjZ9sCnNE+XLYtKEAh8pcJIR675FJ2JVCokglsD/jBdfo27w/N69n9uS3iqldMoVOFVswK1Qri3T6b1uxyC9g3lMn5PMiP/+MJggvCRzhl6V5jxbY3oLxgKsi5Nw+4CGVv9krLn4PsAy+ZqL4Leey2y6CIlkleeWTeHKZqTLFqqwArh6FCh8x3S8pEgZPzncLoF2DRdiljvqKrHEsoP/N0g2Sb8S0X/QPro9VZHYTpYzn8N51bNMh83rp9iDVcCf7GdMddHRtDrJ+Kxg8Yj59Et33NsbmrUMW4HhDC2fI0MOvPEEO/qRGI1yiinbYNoPU/iBv+77kHR+R09YJAV34cgAUJNvigbJ4hyRd4xddThNME0PTOY556x+wgzvE/QK8CB35P7GDrruF7HDdM8EH5KdNQ5tcVz0LoOL87yjaoCE9yWxKnJM8LPD+lbE5qNjUqQKLeVcRjglYo070mvVa/GGELvwwUIbdZDlFVEW2yUjx86AVcl6W8DdDcthi35RDtVHn/odrKko7luONixGtXTgxZ4/DwZ51WkqHuHUpkdODnwXSHlX1VemBWhPWCcBO9SZfGHFeJfy+VfvCV0+jTyEfIy9mn1vZ1brAXNmOi/k7Xp8C/dgAyY2Ln+b5NA3XVaMTViVqfXfmCsEErvU6E/O8jFeZmI6rP3u9ppoYT6+tdjpMWndTpmTl++60T6wUU+hVlx3F93/LTDR4MsoaPXnrcI0xvvVqYCs1f0IVqrcGQqoyyaKNSMCUAawoRQuGvCR3ck0RpeDqkB4ab2OFejJqfNmApwo+TXgAB3gOVk28Jupv1w16CQS04MT8+9WARfChoyPIMR8ZLHJq5dGuQXAfb796TT/lCPtI6EvuI819CHPCXDQiqVnyU0F3+cb6/Mpn7V8g49sRW6BtHE5KwmmwelyIKnGW6 X-OriginatorOrg: microsoft.com X-MS-Exchange-CrossTenant-Network-Message-Id: b36d130f-7762-42fb-89cf-08db3872c4ad X-MS-Exchange-CrossTenant-AuthSource: BL0PR2101MB1092.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2023 20:49:38.2158 (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: iXDHG1fqd8W4AQeQE2y9Wv0JWoNCrmkgRFusi0po5n4ep4ZZdMapeyV4S+Cu+MeKA4corgTG/hJMn1iAM09Djw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR21MB1336 X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE autolearn=unavailable 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?1762644081573475829?= X-GMAIL-MSGID: =?utf-8?q?1762644081573475829?= When a TDX guest runs on Hyper-V, the UEFI firmware sets the HW_REDUCED flag, and consequently ttyS0 interrupts can't work. Fix the issue by overriding x86_init.acpi.reduced_hw_early_init(). Signed-off-by: Dexuan Cui Reviewed-by: Michael Kelley --- Changes since v1: None. arch/x86/kernel/cpu/mshyperv.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index e9106c9d92f81..deedced0f2bb0 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -318,6 +318,26 @@ static void __init hv_smp_prepare_cpus(unsigned int max_cpus) } #endif +/* + * When a TDX guest runs on Hyper-V, the firmware sets the HW_REDUCED flag: see + * acpi_tb_create_local_fadt(). Consequently ttyS0 interrupts can't work because + * request_irq() -> ... -> irq_to_desc() returns NULL for ttyS0. This happens + * because mp_config_acpi_legacy_irqs() sees a nr_legacy_irqs() of 0, so it + * doesn't initialize the array 'mp_irqs[]', and later setup_IO_APIC_irqs() -> + * find_irq_entry() fails to find the legacy irqs from the array, and hence + * doesn't create the necessary irq description info. + * + * Copy arch/x86/kernel/acpi/boot.c: acpi_generic_reduced_hw_init() but doesn't + * change 'legacy_pic', so it keeps its default value 'default_legacy_pic' in + * mp_config_acpi_legacy_irqs(), which sees a non-zero nr_legacy_irqs(), and + * eventually serial console interrupts can work properly. + */ +static void __init reduced_hw_init(void) +{ + x86_init.timers.timer_init = x86_init_noop; + x86_init.irqs.pre_vector_init = x86_init_noop; +} + static void __init ms_hyperv_init_platform(void) { int hv_max_functions_eax; @@ -425,6 +445,8 @@ static void __init ms_hyperv_init_platform(void) /* A TDX VM must use x2APIC and doesn't use lazy EOI */ ms_hyperv.hints &= ~HV_X64_APIC_ACCESS_RECOMMENDED; + + x86_init.acpi.reduced_hw_early_init = reduced_hw_init; } }