From patchwork Tue May 16 07:38:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13242712 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DE985C77B7A for ; Tue, 16 May 2023 07:38:50 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.534973.832504 (Exim 4.92) (envelope-from ) id 1pypGR-00051T-T0; Tue, 16 May 2023 07:38:31 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 534973.832504; Tue, 16 May 2023 07:38:31 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pypGR-00051K-Ok; Tue, 16 May 2023 07:38:31 +0000 Received: by outflank-mailman (input) for mailman id 534973; Tue, 16 May 2023 07:38:31 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pypGQ-0004Mf-V8 for xen-devel@lists.xenproject.org; Tue, 16 May 2023 07:38:30 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20628.outbound.protection.outlook.com [2a01:111:f400:7d00::628]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id a6fecc2d-f3bc-11ed-b229-6b7b168915f2; Tue, 16 May 2023 09:38:30 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM9PR04MB8988.eurprd04.prod.outlook.com (2603:10a6:20b:40b::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.30; Tue, 16 May 2023 07:38:27 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::e442:306f:7711:e24c]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::e442:306f:7711:e24c%4]) with mapi id 15.20.6387.032; Tue, 16 May 2023 07:38:27 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: a6fecc2d-f3bc-11ed-b229-6b7b168915f2 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZTwHUgngN4ZcZo0XYIWYTN62Wj0nIz1viPSyG6trB8FpDStCSY9v4LC0bZoJ4uTodtHG6P4YeYqxb1Z1CyRg/DeYjSy/XLDWyWk0IoPt8xXRdKJpbU+oxtkZBnllTntE8WpU+iDA01dOpPsw3Xo3fTj35xWMW54n+tCMNVV7aehJzqu4n2IZTkdzeVQL/sOFKIL71t9hM7/d9xqARCuunoNkqm5vnaCYhuWlldC7X9Rd7/F4I+OExy0/LGiOx07HslxYhtLIRYltsOg7C0DAxUn9tLwaScEMKky0hc/B48RNrIg8Vwmb1aP993r3P9bNvt+ng4FEXi22OsizDFmx1w== 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=G7CRVIADmzDGbiqvXB+w2ZRXIp+FhtVeLdWts3mages=; b=NrBMhyuDAMyvvuDTUhT7EX4pEdOsozYkGQvJ4nd3G5AsXK5mP8XfrimtAzcAh0DVRHnNygywG2B36hstHxcgDazgAkMHzEDOLLa64J2any4+y2O+EA1ayioMTLcZRk+zadKI5YbbLi5xaIYgOolO6GyhyBNVUqJYKlotL/PXYjbPzu2CAgp1jE+WJY1bNwPyTt4ppV988eIQW6GQxfT/g3EMtr2edUbq2BUwimlpemG2aDUOXI5f7yZmqNMVfvWO4TbdDmcleXqLmAG8ov13lQb023m97Hzg6jXM7hOsKZDe3jtN6LP3M9NoYqpa+wKwfxSq9OisAQRK+w6sNZGi2w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=G7CRVIADmzDGbiqvXB+w2ZRXIp+FhtVeLdWts3mages=; b=M72L3++wI8Gw/PkXoDK2IKmMr7TNc14fBtiRqWRH60LgYOhYIKsTbva5q3BwFt7abBa2cj9XN/mpf98ubIrTdnplM5pMnXMqzShi5Gb+4JBelJnu2CzjPLFLOdY5Ogx7a+cqQO/q1aYn8UrcBONeQl0ymK1n1XzFm0glXr+uD+OBz/clJdu+SVefWjJ1vbtEttA/Orpmr5IJmrN8sS+Rn6gR/9cb3VBgaQkObnOvgW4m3QG2UEJ2ktrJd1rkh5GYtxPrld8zZbRjOcfylxkEM31KokrpU1ra75AWaY2rFJOoGxeklTo4daE3Y2IgxOECHIfZz2f9Jiv7mRzSPcvPCA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Tue, 16 May 2023 09:38:25 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.1 Subject: [PATCH v3 02/12] x86/shadow: call sh_update_cr3() directly from sh_page_fault() Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?utf-8?q?Roger_Pau_Monn=C3=A9?= , George Dunlap , Tim Deegan References: <184df995-e668-1cea-6f9f-8e79a1ffcbbd@suse.com> In-Reply-To: <184df995-e668-1cea-6f9f-8e79a1ffcbbd@suse.com> X-ClientProxiedBy: FR3P281CA0009.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1d::8) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM9PR04MB8988:EE_ X-MS-Office365-Filtering-Correlation-Id: 18bddaa9-4bbd-4262-4eda-08db55e08994 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FacHqmzhmsmkUsqlMxAoPY3i8OyrarTHs8o06Y80p9Pz7uy/YVIWZAfYXdYHmBa+ECLBsurFvrAu+QSP7NpYwB7kz8gTjJ7Jvay9HxhLb/uYTLYJm/Q19rOkvnoVB+wsM+n6V1XsYY82lc9FVe3mhdPZ7eeTykf/pOrLEdD5TsC6QpP3hrXaxWmUFEdWkqikkcKV5E1QE8TllNIyvA+zj70qZ+Ghgt6yKoKqpkc54Dysok/OlsHe7ybh0qvAMER00FAo+h1s3cnHFkxN/HFQE+K1L9jChHNirpUbQ8OlFWtiGXGjwvbdslT5s4QKM0UbHri2X27hqw1cBrlhMxxwueQ03IiPxtmydnqE+yczn9MdgD6OznmnXSWLRE/q9SfXUl22oOD3IvB4t6n8z6mJRR4fl7SRdCs7OWPK/0yxO5HKOlyxItg466kGOv5qF1xgXJAZrzhmRMouNbwfX0qXx2U7vfCNsWuRqcjVBY+0+GYsbq1+GxXSTNF0rFPgtG7w0l1ufiQ97tmQkfWcfglXQL8PeUB7FI9ht7woK5FYbT3ykCgkTVSlYaq1fLk/47Zh+r3fAvFISE2pN/ymFwMCQEd+auALPUi9rzPrBkdqfoXev6TNwzzmC5HdA5D73+wvFWZyRY6mUYLxzpom/Gh/7w== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(376002)(346002)(366004)(136003)(39860400002)(396003)(451199021)(2906002)(316002)(6916009)(31686004)(66946007)(4326008)(8676002)(5660300002)(8936002)(66556008)(66476007)(41300700001)(86362001)(2616005)(478600001)(54906003)(6486002)(36756003)(6506007)(186003)(31696002)(83380400001)(6512007)(26005)(38100700002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?o1H8Q2FXnNVemdCCTETfzK02gnNa?= =?utf-8?q?R5sGHRfaUiIn6bT0HPOZtwcrQmTzHEng4nqCsqcHkTEHy8xKj5KiaJ4+gr6PD+BDK?= =?utf-8?q?za1prbnVnZ4+cYopHthfTwKlhXtM4CssVMuV69ch5PtPgXpJxsPQ8+l/I3TS3G3qL?= =?utf-8?q?ehARhzxqxOQrkzc4QkQot5i5q8ml30vt2vNSrDhXn2dh8uoGMuE4qiDvoEM9cQLfs?= =?utf-8?q?R9jraOfliMcyPKMfxp+t3vfy+jZ/xlT+3zMV+qznfewDUakjXkLismWdDCdQLDmEn?= =?utf-8?q?a7SR337YqaaESxS8W7Vo9aOBydrSvqeW5dGGLWS5naWhkSYZvHtpCRBVyUOI2ubTb?= =?utf-8?q?2ALWjtf39EF4m0pewEt2pRgtbpdDvbW7sDVOkj5RGVOSvRCjGTP4pzQ2/TSLOXOK6?= =?utf-8?q?XF/tgu2EYSG5JW5cZdlN/48WdZ8aZ575BlHXN33OWgfN4ClQ1Nhc+Kw22GTTXbML3?= =?utf-8?q?LiZqbNrGkUAybsY1vvURMLgMHEop7JawlWXzpEsnfcYT6KWUSQKpvftDQa19LKDH8?= =?utf-8?q?CtRq3ECVR7HEoaIG9eoN5MySxxoQK+8nqgAOvWVl11DEMGtCLivJ82R+oRrzzbf4j?= =?utf-8?q?Fzly6dpFcColJcfWc2aqDDpOXTUgnbhfGmLyS5lggI4a+808eQ0E5GThjirWDtUws?= =?utf-8?q?CgL1kDF+fiPsuVI1g2yCmcoIvwzBb/JNcWtTFPYjOPyNSew9Cb6KF8Za7t5mQcYXg?= =?utf-8?q?qg4GrDsGjXzhoq1e3kXl0TweqzxZ6vhaxJXQxV88Y11PTy3rN3LSDGR+KV3rbNQo6?= =?utf-8?q?HufMAfUWcvAuO6zLoFkKa9mR8oOFyDDXlrYFQTkFE+gJQSif8QX/NVeLBKzge93Dj?= =?utf-8?q?3X689dTFf8xM58sP6Lhm2q27+5+tVzMV9u8hr44xmrnNCb3/5F6KMaZGAVENX7mAY?= =?utf-8?q?eJfYOBH7zdavp2WJCBmXBGxW3sP6SphiM58Z5Vlgbk8urY37V1BOvMBuCioqaS54c?= =?utf-8?q?j6wmp73FQQcuB0OQmnBNjE4K12A/c2lhJPbqBPe6eNJc+xR6qcPtTMDfgQuAaY8Yq?= =?utf-8?q?Nd0xTR3F4OtE2XJpc0CS33pqiYNZH3YJKFWO6eAXtByzroUpklDQsScjO6TPSOHIf?= =?utf-8?q?nMxSd+wJE7jOARN7qIA+OgeCVFeWV0xNPKoKGmcPi3JGCCGPZkTcwSWzEdCdJ3Z++?= =?utf-8?q?9DHFJD5cIgchD5vpkZ+/H+GWocM4y20aGseErEOAFhT/k96mPEAbbmHKay2Hj4vfD?= =?utf-8?q?s/l5IH6FRjGcEvJTRXWSl4+5++E4NE1wQrPo0wUeFBtREi9j0ujw3ietJpdzaKdnL?= =?utf-8?q?FRJC4oVj6FtAPR1gAMA7VIllsF+CzwAVBQPr0ruM67flZRruZIZ+pD9ba1Gplv9c4?= =?utf-8?q?Fsq7WqoNISpu3gatl5bEfkjO79YAy8boZ0SQPiI6pESJw0Rz61y6shbrEaTRN1Y/v?= =?utf-8?q?Pa975yJkg6Us2rg4vxy2l9Zkknl4FNBWEkvL68thr3a4Vw1ui/gjhpZKD2kwjaVXV?= =?utf-8?q?MIDqR2BxoLfL16pwSu9MlUdmmGPSutNJ6hELuAEYBHXPNVabPbiJqpSK+uHTCEeZR?= =?utf-8?q?To6C9fT7Udkc?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 18bddaa9-4bbd-4262-4eda-08db55e08994 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 May 2023 07:38:27.3444 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: E4J3lcM4X9wrhFzzmjcGN7R6BKIC5LSdXNtvQvX1z4Qe3bpZoGl+VxuSEMDMka4SDh0iu2vrtSJIPx9kW6Ov2g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8988 There's no need for an indirect call here, as the mode is invariant throughout the entire paging-locked region. All it takes to avoid it is to have a forward declaration of sh_update_cr3() in place. Signed-off-by: Jan Beulich --- I find this and the respective Win7 related comment suspicious: If we really need to "fix up" L3 entries "on demand", wouldn't we better retry the shadow_get_and_create_l1e() rather than exit? The spurious page fault that the guest observes can, after all, not be known to be non- fatal inside the guest. That's purely an OS policy. Furthermore the sh_update_cr3() will also invalidate L3 entries which were loaded successfully before, but invalidated by the guest afterwards. I strongly suspect that the described hardware behavior is _only_ to load previously not-present entries from the PDPT, but not purge ones already marked present. IOW I think sh_update_cr3() would need calling in an "incremental" mode here. (The alternative of doing this in shadow_get_and_create_l3e() instead would likely be more cumbersome.) Beyond the "on demand" L3 entry creation I also can't see what guest actions could lead to the ASSERT() being inapplicable in the PAE case. The 3-level code in shadow_get_and_create_l2e() doesn't consult guest PDPTEs, and all other logic is similar to that for other modes. (See 89329d832aed ["x86 shadow: Update cr3 in PAE mode when guest walk succeed but shadow walk fails"].) --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -79,6 +79,8 @@ const char *const fetch_type_names[] = { # define for_each_shadow_table(v, i) for ( (i) = 0; (i) < 1; ++(i) ) #endif +static void cf_check sh_update_cr3(struct vcpu *v, int do_locking, bool noflush); + /* Helper to perform a local TLB flush. */ static void sh_flush_local(const struct domain *d) { @@ -2475,7 +2477,7 @@ static int cf_check sh_page_fault( * In any case, in the PAE case, the ASSERT is not true; it can * happen because of actions the guest is taking. */ #if GUEST_PAGING_LEVELS == 3 - v->arch.paging.mode->update_cr3(v, 0, false); + sh_update_cr3(v, 0, false); #else ASSERT(d->is_shutting_down); #endif