From patchwork Wed Mar 22 09:29:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183740 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 C0260C7619A for ; Wed, 22 Mar 2023 09:30:11 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513211.793892 (Exim 4.92) (envelope-from ) id 1peun3-0004v1-Pk; Wed, 22 Mar 2023 09:29:53 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513211.793892; Wed, 22 Mar 2023 09:29:53 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peun3-0004uu-Mx; Wed, 22 Mar 2023 09:29:53 +0000 Received: by outflank-mailman (input) for mailman id 513211; Wed, 22 Mar 2023 09:29:53 +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 1peun3-0004un-0O for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:29:53 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on20617.outbound.protection.outlook.com [2a01:111:f400:7e1b::617]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 1903eb87-c894-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:29:52 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AS1PR04MB9360.eurprd04.prod.outlook.com (2603:10a6:20b:4da::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:29:50 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:29:50 +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: 1903eb87-c894-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Np8B34yAAi+uCh28eL8aUv+zYOLC4DV203h6mIYXSuXbZT3b+5sAs3Cndcf6tpvKH5SKZAtx45+ec5vUxeOKNh/XQMB/EBEo+zVg0brQBsHVgsz0CJxboqYoWVifCzEJ2i+f5Zqseizs5fzcWjVMY4rv3szybc+w0TJFlb6SGU33zYT7yfiah4KE6b8h/ZOGDV10ALNJkCEiL+IBYHjE19WNUpFxWtZiH4htfEYScZB8yQhQDtZtQp6zBC4OQi3vOAPdLB9sMLBvfExt0fTbnOfKnusb7tT09+ACHTcUSbKy+T0elYO7jri7PeD9/ea1e5UGRBpn3dZYQKaPwpxxuA== 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=S4LWW46rODj4dfG2ddfXP6R321VQnvo+mPhbiTw0dTo=; b=G9G47C2NYomvuPvJDEPCAPLwugsj4ZMw/pizXaondFXntH5F7/S/RKopRulVtctgW3V2gUndlulu81fJBAn6pBQ6nj4qw9vowaabhBNM3MMG5XlCyiyCut9pc0HIRVD1/YC57eT5DxoE3OiPavRavrAXaOofcfS5WY7xscM0caPjPFlvMfdfet2jCcFu2r+HFhHm2l34C9reFv/FFwg6uQL6Ymgoec26nrFkifV/T/XUknrphPB8DmFqdLINa5iIZ5aDLPDiafx7srJEiTmbrNud9xIn1QfHJHgGdK9/i7sufatVFQlQ9HXW0bJ4yxqQP4QbA2TelM7C9m5spRTSjA== 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=S4LWW46rODj4dfG2ddfXP6R321VQnvo+mPhbiTw0dTo=; b=3j+kGm2VNPGDMaQ8AbqtqaIyj+T5wR0mS8V/P5EeyuuiQwzl5NySwHOeXAo1+cF2ieRWZzvFS2rByu+MdMNggJFgkxpIhdNUUlw/PzU7aMUzc8ucjoRyq3b4VgmKzeWOqjafOFhySI5ESbYsE6bvuUyan+h/V7nuhIMzQ+O+DgDhfpM2t23P9pM+SCBRSkbsrx9nmrlWo6nC4HyBql5kjSx9FwZxSnj4mqN2cbBo5uZ2f3JohRdmY7Xj9PgV8uzjnlBjnods6RhSNYHl/vucvCFLfcQPPy9WR5tWt5Ghon8GGklvx0sOhpQ2nTOZvV+YoL6y40gXuYfRVVzjp+e0xg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <290c9058-9907-4c6d-3fe8-987868a3a843@suse.com> Date: Wed, 22 Mar 2023 10:29:49 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 01/16] x86/shadow: fix and improve sh_page_has_multiple_shadows() 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: In-Reply-To: X-ClientProxiedBy: FR3P281CA0046.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::12) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AS1PR04MB9360:EE_ X-MS-Office365-Filtering-Correlation-Id: f24f22e1-3492-4fba-f9ce-08db2ab7fc63 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RezDjNVPMA9VCbN4A4doSODlSAbH5K/g09ZJbQ4Mn4Ih+vzdLpOjJ1vFmrhzGFfdKp90gMYEer19G+OCROaHx6emmOqFqoNt0sLCffq8UXDLAu+QNsckcSIubQD2yvKfHkvkJX3rxJl8Pk5kkkhZvKcgfoAIhnsdc+NXU8NCDcS5RnlEwrXw6zHZqAl+aYoENELHahMiTzEJHwBF54u2ZdYpI3uJQ09Rmd47p1W7cTAUPJOeuWeBpPv3TX4tFCOc2/jPHlbbSoDzLNgEAVH5Lpcdu24MyoNiZQ4tyNjX+yYQWbK2G3TkNng084ZYZ+l0gnHfMVLFWOeOr3bUlCf5KdiF+HVh1MBJG0NdkmkFOX+nBt79wzattCoCEkU+wyZxv/B2qlDqM04BNcyOSRndBd9oWGM4kANd7isgdolfFJ443NACUJ45DviRAP0C8W+vG6oGlf3mRufZTwQsV+gOeKniX3nee257LJE9Omx7A5jPDUATlx3Msg3WIE2L5D31pQa7ky3+0A8s20DuVtn7xoUyV11MCdeuJq5TzpRDzrU58GjdI8CcCgs9//hFRer53/7QkOPQxRF5mVieEU0Jq1+dc0SNHK9ya2/PL9AxeHbJGtG1BL1+gqDTe8UKs6rfieftPk//RoYQq4A9ml6yh9UzhZFfqU8V2p/kI8g3nT7sdobJ2jmtXd/TKqIRdGCtP8TnjUOnj7KLpzUAy5u5pIh9XYOp4uOTwl46kHZMKIE= 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:(13230025)(396003)(136003)(39860400002)(376002)(346002)(366004)(451199018)(5660300002)(41300700001)(8936002)(4326008)(186003)(36756003)(31696002)(86362001)(38100700002)(2906002)(6916009)(6506007)(6486002)(6512007)(478600001)(2616005)(26005)(31686004)(66946007)(316002)(54906003)(66476007)(66556008)(8676002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?JkSVRsnCxwyoC6oRAVWxXwZTnOTo?= =?utf-8?q?4jCSQPRTlSkLmxrVSahN05SSLo6ZpwEDKugkFb6xeyrFB6cmd6eUFB3VqMVo2cYH0?= =?utf-8?q?jrfpQB3bIXnggYlncXTs8l+273ppD8L8fQEDpTG5fpIUVjcsPrW/uoJvaO9DwvdfP?= =?utf-8?q?LiSQJ7QLZhofcwWbVIYb5smvDpnhZ0MHBFltrcUI3qkjahkJ6L1i1ShcQl0xQBuZk?= =?utf-8?q?lyy8AM1C1c/Gkq5+fqdtzl6sVAlpRgIc89K4wMMYtKsxpAPLJhGUwNMLYyGIMaSb6?= =?utf-8?q?VzNoVAqPOVHpjD+YspfIEF12B6js8HI19nw0fn38veH825/33/E3W5s05X8iiKGEp?= =?utf-8?q?RyXHjDHK/mMPR+f2W4C9RdFzvdP1hBKyiH5xXl240xZhRMyGFeA6n/uJqXVT/02lU?= =?utf-8?q?7D7jbQj7gmf38//WwhnCi7k/4JajarXzXZJxS4LOCTZ2CLFnhjLgUJLfKFi2klvRv?= =?utf-8?q?zECwaHCKUiqMBMoi1iOopvi6mzUZbJQXKxpGCgNJz3gs9vcQBMxpNHFBAUl5uAKXm?= =?utf-8?q?SCP/knVnRz+FfzunqdOareqEOKI2caxBMP/QQueIs/AG2R0kST2X6PUvh42KByf+d?= =?utf-8?q?5UivTxZ4MqaTQgdiv5Cwk4+ycxqVn+GV0bTY8KvPiZXLaB99Ztg6kR7TLJFYpm1BG?= =?utf-8?q?aFMH+/Lz/T3gndS6RDhuefTvIJcKOnYyVPt7ayqwWevEWX5HeDHb2AhdRmEnLNPqZ?= =?utf-8?q?lAtBucuYPWKlzdLe1bKPD05oUicUJ8eaZdFvxGnvdAyRoDwgbOJmv2/UWkLd0e+Ql?= =?utf-8?q?kdRb9NNcgDq4B8IkgPQEQAbeWkcdMKhuT3NnZo+Kh3shjIKzXqVJZAU+Mj04jzWx4?= =?utf-8?q?WNw0QbtAmCpnI+ZE6OlGD32N/cCpbhHoiHZZRj86ArAFudxJWFBaaGnqZnZIDqu+8?= =?utf-8?q?CWFiONnYMagVfoslhFBWkakZ9he/BEHPB920q1DwO3WcSr6O64YGKeUxpHQxwbtwX?= =?utf-8?q?SbPrvqGBgZA241o7iltKPr/dJ9s0ds5locbYrhv0RF8paVn+0L3+w7W/j4jI2HVv3?= =?utf-8?q?2hloWvjL9c4rslqiWA+jyPRSc5bmDBwAWcGQMKPswYaSyL1hwy861XmKy8DsaNtOG?= =?utf-8?q?Ok8h8HN61sd7q0cFhiVHQNyLJe8rWgLVuTQXa6piotBpwyaYHebKR+/9YboiSFNxQ?= =?utf-8?q?y4zgvERvHprvB38jtZ5Ude8VNLBsgWzjXTIlBHvfsnxA46i+oaULlw6bzf5qeSpJJ?= =?utf-8?q?wxLPlXVS0q+U9du5IbaKBBkgx58wAvQ5CM8eVIGSz2jqgFbR8KFPbJ+goUsc9KWII?= =?utf-8?q?oN6ilOqbNkWIdlmq8OMFx8Ayq9AIgDn4swTgMek4iYG4eOPnbUMYP3SY2ryeWIsVG?= =?utf-8?q?JsBKxkGzuPgXj1FcIuYzk+EizXCjSfItjkcKUV7Fsw0xELZ3fXtRNLzlk08RzCTx/?= =?utf-8?q?WXIXHJX0qzZJDYVa5/qqTw+uZ4PR+XlHPjPi+Xyc6I01tCXI0wsydZPPE/3Vcquq9?= =?utf-8?q?Gu+R+FWYAdHn1HZ0BqfzfQ/ItVlZa2owPjlit6emMJB8CRCM3qz0h+Y/DtXU8H0ch?= =?utf-8?q?/sv8bmK2L8Sk?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: f24f22e1-3492-4fba-f9ce-08db2ab7fc63 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:29:50.5943 (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: lj9jBZMbTGZlKrCTaKMQLUPOFyEx3NarKYLBkGXrlvMcB/mPU0aQEVsSSf07b5kYllmatL9jaobK/quoDbQ6rg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR04MB9360 While no caller currently invokes the function without first making sure there is at least one shadow [1], we'd better eliminate UB here: find_first_set_bit() requires input to be non-zero to return a well- defined result. Further, using find_first_set_bit() isn't very efficient in the first place for the intended purpose. Signed-off-by: Jan Beulich [1] The function has exactly two uses, and both are from OOS code, which is HVM-only. For HVM (but not for PV) sh_mfn_is_a_page_table(), guarding the call to sh_unsync(), guarantees at least one shadow. Hence even if sh_page_has_multiple_shadows() returned a bogus value when invoked for a PV domain, the subsequent is_hvm_vcpu() and oos_active checks (the former being redundant with the latter) will compensate. (Arguably that oos_active check should come first, for both clarity and efficiency reasons.) Reviewed-by: Andrew Cooper --- Considering present uses, ASSERT(shadows) might be an option as well, instead of making the null check part of the return value expression. --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -332,7 +332,7 @@ static inline int sh_page_has_multiple_s return 0; shadows = pg->shadow_flags & SHF_page_type_mask; /* More than one type bit set in shadow-flags? */ - return ( (shadows & ~(1UL << find_first_set_bit(shadows))) != 0 ); + return shadows && (shadows & (shadows - 1)); } #if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) From patchwork Wed Mar 22 09:30:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183741 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 8B0EDC6FD1C for ; Wed, 22 Mar 2023 09:30:55 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513214.793902 (Exim 4.92) (envelope-from ) id 1peunv-0006Hx-2a; Wed, 22 Mar 2023 09:30:47 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513214.793902; Wed, 22 Mar 2023 09:30:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peunu-0006Hq-Vr; Wed, 22 Mar 2023 09:30:46 +0000 Received: by outflank-mailman (input) for mailman id 513214; Wed, 22 Mar 2023 09:30:46 +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 1peunu-0004un-5l for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:30:46 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on20613.outbound.protection.outlook.com [2a01:111:f400:fe12::613]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 38ce9073-c894-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:30:45 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB7042.eurprd04.prod.outlook.com (2603:10a6:208:1a2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:30:44 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:30:44 +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: 38ce9073-c894-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lMEVpWZ5a17Me0naj91/hRGfJRC1CH74xRtZF4R8cwF4olCmeiOwKEL8Pa+BxRO7MpV/EZG4XuGkF7bU4FSw5shaNPSx9oZKinV29cdtIzpvPZmgijNVexBflTn00ndqcUo6UwxYW2OmsWwl5eEjRtG3xTztWBbsc1dHW5qN44hZ+y6Pg/dNLroAB/OvmhK2upGzKpdaJ/sMN6VO2nHfBalcL97VEYfZ0Uep6dxvYGYJ5Mr9BrxW+FAsKgNfrFsNXwGejnhPWtXgv63QoL6p4X4lRTZkTJNdHK2d5EJSFyu0E8VSWGul29XehgYd5i8PeK5XBt1e7fJwI+92/l2KzA== 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=X+ld8GTQwB22a2rHLDTz7JUGbxwAP+yxpl3HqWacg5w=; b=mT7beBVdH237/nDwF/zBggZ+YYF/bmMJnFn/+0Ba/aIX5vGA5LKVlw7iShk1pjmMUUMTI0pm77v8fmS9zMck00zK1hkYNBuUnZDQlG+wkqZDpEVau81Ejp3JqHocbpdcG2O0P2Zp56WbUlopfcpw8+I4pKnTLR83MoUhSpLNwDRBKfYLHj33mst9MDmT7OBdGV8Eip/RZrupZcFJPDQaQW8c5H3ylI3Z+7MCm8qbP2MdwiHsKEvpWOJAaUWqBOEgoNm0ZFPUd4qzvs0pLnrBDLqRQRTgghbgnT/H9C4UrdKVANNhdv4tSQLeVVekm4s125kXwatl+e2giS4POBa+xg== 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=X+ld8GTQwB22a2rHLDTz7JUGbxwAP+yxpl3HqWacg5w=; b=Vt2ZCHheNfJH1HRNFBtYbBEkI7baZD8j7Odleh+MbXjGEgmgTvyllrKRgOnBEPlpCtNperQTa6Sd/eG19Ou0aPTSWQ7Zuy92eRN8LLA1I9JMKFJLzF1cVcl5BShRyscVZnF8P2CpG8DGfyjLQblYSkQTnuQJray6PzeZNGFFKbrgYHOLuS9L6b4T1UanX0BJpPXWOmIEyeN+rCSxa/foMYis8PO8G/WUH6COTFXMUEenIXRNdsApL1zPM+dfSOteMzXPvpdiinKbZDafVb39cBykoOw4E+oHx8WGF4iR3WwCQ22sF6+XOloHG6lle85+2GPvkSgLqQxFQmo1boDFtg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Wed, 22 Mar 2023 10:30:42 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 02/16] x86/shadow: fold/rename sh_unhook_*_mappings() 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: In-Reply-To: X-ClientProxiedBy: FR3P281CA0045.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4a::16) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM0PR04MB7042:EE_ X-MS-Office365-Filtering-Correlation-Id: 0323c33b-e074-4abb-0ae0-08db2ab81c2f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HHDUtE1y8auT2HFOn/GkPZlK8Hn9/K2Fc4U1HvYkSTEQKYjMovn4NgToyewZHSqIE7Owio/BTWKd7R1wfOTRy0WDCAz6tDAhZH2SyAerld2AbN9f8OhHHWk/uN/Rs+FQcZmbOEY5d9ZzL0FzFLCi4cG33YZsYv0DGbSzOwBJ4NeV2VeJoSPRErcaMHs8wzpC/JBhcYwCS11nGHipH+ckOEmZHbhzABwSb8D/BWjY2GONzalyIg9jb9nso8s48oRkh3XyNTJJcNq3qC1T8Ff/h1UyNqol2sXpT7Qk13tBwShrKYL9+RMQZxe8OQLgEpkOuoo+fwjlOfu/ZqKMORhrdBmiLa08gIe8nYmChqopSY6oNcs/UWsGzA4cf0S/njqvM5RRm+glLMx9M/50EY0+cNOjGodpcidtj4jMr/4r2MP0ly1EgTA/eHUftU1sSNooyDoNHsKHIXlW1BKBpMAoJVYOnLoIgnKK0Hk5FdnI6EPF7/uWjJDqDXKbjhmJ+x8AJ5N7HXX5yfNpeLT5imLr1u34DB6XdyxJU1fwfM9BkyHI4hScrkK40XQVhyvfbWnd6JDUsyyCPk/Hos+Q2TPFbRfHm+agOIgtn6kEi0abNgQZ6Vok9/+zh75ccO1z8bzN5hVTnbStYWIhze/VCgJv608c0GqxeVdJt9D+NquwARsgulel/unKcDpNr++AUUo7cutHZLvLuRp5tU8R7zY9qrf4uhFEYMHyJsPuu2opnqc= 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:(13230025)(376002)(39860400002)(396003)(346002)(136003)(366004)(451199018)(2616005)(6512007)(54906003)(86362001)(38100700002)(31696002)(66476007)(8676002)(36756003)(2906002)(8936002)(4326008)(66556008)(66946007)(6916009)(41300700001)(5660300002)(6486002)(6506007)(26005)(316002)(478600001)(186003)(83380400001)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?IPTNVxp5v6i9qpNr9uLgXAUy8i4I?= =?utf-8?q?0DqlNNH3hpFrJIl5FuQWEnF+ZM6dHa6XwBzFdq3PXNRYOwL6TLR1h2MbwybLro9Zc?= =?utf-8?q?51v/LpB4jQf3mWYgZftTT8Wporn9L3eZ1S4mqiwqGNDtu0fmA8qymu64BfJyvlNoz?= =?utf-8?q?lb8fETmR1+yq8hWT26GuoX4mWLoufDERJxLiAcUBb0cnBmuxABZ8lOOxU0ffDQ+45?= =?utf-8?q?iIMtvMdIJZirdHolX24U/0uDDT1aBrBDSxe/DNL2UZuD4VT32G1N0L1oRMCMFG4Nz?= =?utf-8?q?gVkzYnzZxnUAmV3gnhbHz5rdzxC/tr54pD+N4409zsij2sBccGGwVDdw8YXngUYCL?= =?utf-8?q?iBf5N/xlZ+3ySJb8QmXcoqUaS2KEXhRQbN12tVpRhK9ES4L7TghNoFJlU2hVMVfze?= =?utf-8?q?G87kNVEYu5+8ivSto+aZdYRUFHiibNcubODuGz5oTVKgU4fG7MA9Pf8TwAohjlyz1?= =?utf-8?q?SYQ3P1krKy0XY5NYNRzDhGUqFFFK94PDRX2E6pV2LABnYVCeYqIETo5TnSEhKupGN?= =?utf-8?q?JqfCLuPU7skDVXEyLrMy/C7lDVOsxwxBlUUqB8W5H+nW73Pgg3mGVBaPfj0HvD98b?= =?utf-8?q?fXE3q5g32GZSK4QUDpZtEZg4VXT83hWBEUs1bVRo5sDhreByJq6835DM3xO6ehY1y?= =?utf-8?q?LNR6ki471SLvHHZbNfoffUfyelqTrXw5UbohH85bnQLRNX43P4xzElUPNbxINFGaI?= =?utf-8?q?9CtdEZCs2hi9f7lj0jcXoUrRvhg3QRKbk+4+Sgtk1b2hlymc368lO203ouUiIROhj?= =?utf-8?q?MW06gtW+QURaODIOUaW5hvPiw7Bvy4PETpjfFoQJW1Ge28s9nP/OfG9TiJoRFxIwY?= =?utf-8?q?51fUfsd9hUF+mnkTt1V1zzqimJkE2KskWLh4EMYhRzjMXDFFjmS6Ng6AQOgBPa0BI?= =?utf-8?q?rgcawIoX/nrPTbGnxOE0/c5LKwri7X992wWrg9JL8gMRGWkx29GmAVU+lVgf1tJtn?= =?utf-8?q?XnwCFz9xLR13fJpgnwMlpY3AewvVzEES49ISE7bjI7WkKiWvZWx3HgxQuk/FegBuD?= =?utf-8?q?Jw6WmRiWp5co5g3TaQAggphrDZzK0BkafLMrj5P024h4EFz1FybZO9ca2WZWAjoGd?= =?utf-8?q?Tpp1V+HmOEGiPWC4L345sWq1Oai2Ux55NkTRU7I5H79psw0973cqlejOAZcpYJjgM?= =?utf-8?q?jaQnQlFeEanNPLOuOkuIaO9HjAm/OIq0vgTAJzY3surNNkvSYFfeeDyP/ZP9xzka2?= =?utf-8?q?w1wtVEz2HcAlkg2f3ha/fxE0J0Vj3b5HQYD9vWp1oA1juedqkyMslUZwtr1fcooG1?= =?utf-8?q?CF6mQ6B0YW2ydDhZgJVobwHGyjHoyG+AujpWBho+ReQLD3fPd/Yqq1BYTJSYm6nzz?= =?utf-8?q?NEweRT7quJ/b3lq5jFGHS7rMWlhWxDLJF2NSAoZyEH7v37tI0zgGCIpHaz5D6sZel?= =?utf-8?q?bCFqoxeiBc/76nihwyW+TCvmCS3eaiAAfzG8P2tJ4U70IMWblRI5KOSE7R4Djl49c?= =?utf-8?q?otm7mhHWkNjDRCH5/FwhGunOR4KFFnkXQDTihzfOVcf3D/AOsnW/tBquUU09ZeAOu?= =?utf-8?q?wjpUuw38blEf?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0323c33b-e074-4abb-0ae0-08db2ab81c2f X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:30:43.9344 (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: NGrR5EmvPPG4u7Gl1a7+npt+VU0m/NjEmOIWYz1tVXSlO7WlX3cii5OSmY2n+rDM5WjGD0pivgao6BhWlBaNCA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7042 The "32b" and "pae" functions are identical at the source level (they differ in what they get compiled to, due to differences in SHADOW_FOREACH_L2E()), leaving aside a comment the PAE variant has and the non-PAE one doesn't. Replace these infixes by the more usual l ones (and then also for the "64b" one for consistency; that'll also allow for re-use once we support 5-level paging, if need be). The two different instances are still distinguishable by their "level" suffix. While fiddling with the names, convert the last parameter to boolean as well. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper --- As long as the backing functions don't need to invoke each other, the infixes could arguably also be dropped altogether. Every mode has exactly one such function. (Thinking of it, unhooking at L4 is kind of pointless for PV32, as the guest controlled root is L3. The only time where we might want to unhook from L4 is when we clean up after the guest. But even that's not strictly necessary as that would also be taken care of by sh_detach_old_tables().) --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -898,14 +898,14 @@ void shadow_unhook_mappings(struct domai { #ifdef CONFIG_HVM case SH_type_l2_32_shadow: - SHADOW_INTERNAL_NAME(sh_unhook_32b_mappings, 2)(d, smfn, user_only); + SHADOW_INTERNAL_NAME(sh_unhook_l2_mappings, 2)(d, smfn, user_only); break; case SH_type_l2_pae_shadow: - SHADOW_INTERNAL_NAME(sh_unhook_pae_mappings, 3)(d, smfn, user_only); + SHADOW_INTERNAL_NAME(sh_unhook_l2_mappings, 3)(d, smfn, user_only); break; #endif case SH_type_l4_64_shadow: - SHADOW_INTERNAL_NAME(sh_unhook_64b_mappings, 4)(d, smfn, user_only); + SHADOW_INTERNAL_NAME(sh_unhook_l4_mappings, 4)(d, smfn, user_only); break; default: printk(XENLOG_ERR "Bad top-level shadow type %08x\n", sp->u.sh.type); --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -1416,21 +1416,9 @@ void sh_destroy_l1_shadow(struct domain * This implementation is pretty crude and slow, but we hope that it won't * be called very often. */ -#if GUEST_PAGING_LEVELS == 2 +#if GUEST_PAGING_LEVELS < 4 -void sh_unhook_32b_mappings(struct domain *d, mfn_t sl2mfn, int user_only) -{ - shadow_l2e_t *sl2e; - SHADOW_FOREACH_L2E(sl2mfn, sl2e, 0, 0, d, { - if ( !user_only || (sl2e->l2 & _PAGE_USER) ) - shadow_set_l2e(d, sl2e, shadow_l2e_empty(), sl2mfn); - }); -} - -#elif GUEST_PAGING_LEVELS == 3 - -void sh_unhook_pae_mappings(struct domain *d, mfn_t sl2mfn, int user_only) -/* Walk a PAE l2 shadow, unhooking entries from all the subshadows */ +void sh_unhook_l2_mappings(struct domain *d, mfn_t sl2mfn, bool user_only) { shadow_l2e_t *sl2e; SHADOW_FOREACH_L2E(sl2mfn, sl2e, 0, 0, d, { @@ -1441,7 +1429,7 @@ void sh_unhook_pae_mappings(struct domai #elif GUEST_PAGING_LEVELS == 4 -void sh_unhook_64b_mappings(struct domain *d, mfn_t sl4mfn, int user_only) +void sh_unhook_l4_mappings(struct domain *d, mfn_t sl4mfn, bool user_only) { shadow_l4e_t *sl4e; SHADOW_FOREACH_L4E(sl4mfn, sl4e, 0, 0, d, { --- a/xen/arch/x86/mm/shadow/multi.h +++ b/xen/arch/x86/mm/shadow/multi.h @@ -50,14 +50,11 @@ SHADOW_INTERNAL_NAME(sh_destroy_l4_shado struct domain *d, mfn_t smfn); extern void -SHADOW_INTERNAL_NAME(sh_unhook_32b_mappings, GUEST_LEVELS) - (struct domain *d, mfn_t sl2mfn, int user_only); +SHADOW_INTERNAL_NAME(sh_unhook_l2_mappings, GUEST_LEVELS) + (struct domain *d, mfn_t sl2mfn, bool user_only); extern void -SHADOW_INTERNAL_NAME(sh_unhook_pae_mappings, GUEST_LEVELS) - (struct domain *d, mfn_t sl3mfn, int user_only); -extern void -SHADOW_INTERNAL_NAME(sh_unhook_64b_mappings, GUEST_LEVELS) - (struct domain *d, mfn_t sl4mfn, int user_only); +SHADOW_INTERNAL_NAME(sh_unhook_l4_mappings, GUEST_LEVELS) + (struct domain *d, mfn_t sl4mfn, bool user_only); int cf_check SHADOW_INTERNAL_NAME(sh_rm_write_access_from_l1, GUEST_LEVELS) --- a/xen/arch/x86/mm/shadow/types.h +++ b/xen/arch/x86/mm/shadow/types.h @@ -232,9 +232,8 @@ static inline shadow_l4e_t shadow_l4e_fr #define sh_destroy_l3_shadow INTERNAL_NAME(sh_destroy_l3_shadow) #define sh_destroy_l2_shadow INTERNAL_NAME(sh_destroy_l2_shadow) #define sh_destroy_l1_shadow INTERNAL_NAME(sh_destroy_l1_shadow) -#define sh_unhook_32b_mappings INTERNAL_NAME(sh_unhook_32b_mappings) -#define sh_unhook_pae_mappings INTERNAL_NAME(sh_unhook_pae_mappings) -#define sh_unhook_64b_mappings INTERNAL_NAME(sh_unhook_64b_mappings) +#define sh_unhook_l2_mappings INTERNAL_NAME(sh_unhook_l2_mappings) +#define sh_unhook_l4_mappings INTERNAL_NAME(sh_unhook_l4_mappings) #define sh_paging_mode INTERNAL_NAME(sh_paging_mode) #define sh_audit_l1_table INTERNAL_NAME(sh_audit_l1_table) #define sh_audit_fl1_table INTERNAL_NAME(sh_audit_fl1_table) From patchwork Wed Mar 22 09:31:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183742 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 0AB99C6FD1C for ; Wed, 22 Mar 2023 09:31:14 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513216.793912 (Exim 4.92) (envelope-from ) id 1peuoF-0006kU-B1; Wed, 22 Mar 2023 09:31:07 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513216.793912; Wed, 22 Mar 2023 09:31:07 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peuoF-0006kN-85; Wed, 22 Mar 2023 09:31:07 +0000 Received: by outflank-mailman (input) for mailman id 513216; Wed, 22 Mar 2023 09:31:06 +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 1peuoD-0004un-Rf for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:31:06 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on20603.outbound.protection.outlook.com [2a01:111:f400:fe12::603]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4485e1aa-c894-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:31:05 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB7042.eurprd04.prod.outlook.com (2603:10a6:208:1a2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:31:03 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:31:03 +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: 4485e1aa-c894-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h1IiNBsBdlo4foZeR8pnDoNaioAiU7VLDHMbczRpuRZOFpcMi8U+mZirtjMUhJH1Xvm3W0uiETffAAVdao+LNf/K3ysRmsIWz/6FCXw0BY4LnY4WzaiFMNSxhv3QepTMKBuvu8ltu/iDgSgMqnhKzcNRnGgJ9ODuKEGQeWlOSl4pOwb9jsqYThjL84svzMvFNAq3vgo69PVT/N3eF2IG79xZdwkdmHS+OFszlmCsynpfEkPwYcbUZOkHmUlXtItEqmR9AvFNgSVGIX17bU4zSo963BNkbsKk0dL3EOFAtXT16gSHEbmNmthb95BsB+j9fcwekkB2BV6AW/hynkd3OQ== 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=ESu5hhSEBf0LX1s1TTJhGHS0ZDtmxQNcokmLQmAE+sw=; b=jAlbLKTSRfw/Ud7NF129cwEPLUHDB6xvuY+b/82YQlw0wTcHDdPiv0wpMr1spNyoOoOp0SYw44Y3ye47DmlQOJm2teor+2zpgpVp42y2TtIrly4HhDTBLhQYnofYll7cWfQmPXKCqaxPuZ546x3Vb4WAY0/YKUyPu4NoCObewhz6GmjAOsVAKpmmAMa/9uTmhJ7mfqWBQKsI41hrs5yt2D1dC3cASy7bDzhWVVD7e5Sg1tibSAUDBOyvdMF50g/LO/Uo3X5ce4WDflTxxngXs2xesDYvy8mAN2txU7490fR/iiKjrZs245yvqNrZhTVpx/+H49wbZ4NVFMWSulKocA== 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=ESu5hhSEBf0LX1s1TTJhGHS0ZDtmxQNcokmLQmAE+sw=; b=fr2fjT10c511QWTcBEPUFzbJyHdGXmU3gF4b4b2J8ReDMxDq40GnjfAp5UgUSpzgfvy5nIXsgVWndXf+PzPz7XmwGHWyq4NHNJhUcZjUgfbVz8YGBhVkRkFRWFeN+S//7z4s5R0dmZf7QUkGoGgOKc7ZHFtP2knfw6wNOxGiHGHePCl28PiDY9IFLaDSvlvwkN14aHt6ySiyqgDvME8ris7q6Zf3/lawJ4/j3YcmAjTixVoZhabQOCJQLTRZCuBx4rB9eWq84LDgtLGUDaNdyzhSKryoLYRpqtBu26fwLwlc+ckDNsxOyfHjtm3NYPebVrqJmsyCgkdSBItVIFDp5A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <54e7a146-6f86-95a7-7b3b-0ba5dd418949@suse.com> Date: Wed, 22 Mar 2023 10:31:02 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 03/16] x86/shadow: drop redundant present bit checks from SHADOW_FOREACH_LE() "bodys" 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: In-Reply-To: X-ClientProxiedBy: FR3P281CA0114.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::6) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM0PR04MB7042:EE_ X-MS-Office365-Filtering-Correlation-Id: d9252a38-16dc-47db-8b25-08db2ab827c9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vTiJfmHyT3x73tmtKB1UaVEqLGhyeucjpuhVn6GascHsgFTskymfK0imIGHlKC8NEQbcjqnCEAdQYeut01W/VIQzEpi19Jldroo3BbqZ4KaftuWr2Kl6CW/tFyp34dauOMV1zFWb9mvRw/rS0x+lQFBU4HUq6K9pp+k6CmU3oKT43C3afAg6Ciq+sMITj/vfx+8AIBtS1HuaJmXmEy0CDYcU42vmSPW/iJ0HdhpHzqmYJeCF2xluaUeTe24etLwHtjG2t/oNlxJQP00urmdktsvW0in8MOtTXa7Neeb6M2igjbGXYVqjQJRskAy8rkAJyXoXCvEli9aICmrJM2F77oCcTdOPsEZnLD1i2a1WwiRG/vGsHvq5frB7anhvg8zQ1eiqjt2hZN+wx3pCGk8WC4ORN8if77Or/Mpdc0H/zlMR8jiUP3Tn6xbpaD8Skd3jW9LHv+FEl0YZXSQhtjSydDVcxymVzVYCt+WB3BHX71BaPaS7G+ODGhQzj9MI3sX1M++EAqEF2Syav7KVHO93SLsNKRfEJMVdoGu0scc4XOw/JjeQA9XN+Bida6ET5SzxJn8p9FIcIz9+k9NWYpY1ajweYxeuerzA9QVki975R7aTJ1MeuPZKmbgQE/KyizqUtRXBujLiXba19i5yznBerCNT84QuzQY8hNG5qXN9cFK3lSU395GMWtVmujjFKMd+scgQv1pg9PEMZTldpHqO6RJqad/C2XSmw2zQ9ZqJH40kJTOy63B4u6ZPsfc2hVYWEd0BtTR/Etvz23a0UDE6T7CYCYWkFaKA3mq88CJS2BwuFcfauNLIyyKTdu/5nRVJ 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:(13230025)(376002)(39860400002)(396003)(346002)(136003)(366004)(451199018)(2616005)(6512007)(54906003)(86362001)(38100700002)(31696002)(66476007)(8676002)(36756003)(2906002)(8936002)(4326008)(66556008)(66946007)(6916009)(41300700001)(5660300002)(6486002)(6506007)(26005)(316002)(478600001)(186003)(83380400001)(31686004)(45980500001)(43740500002)(414714003)(473944003)(357404004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?+bNfZAx8nv//ARr+nU9dFVPwvbBt?= =?utf-8?q?gT4CmWoWeS2lI0clB5RbOdnCdPs0qJrjqSy7mgKzs4EoWvHdwvApV1S0XtcjPZxwz?= =?utf-8?q?5x8FF4RaH6uOwn8HRBO0UdUvuTvNRTZCRYlRtEjLuOivLa+Dl36+X4ptJcaWhYRjJ?= =?utf-8?q?aizi7ehw1Yc6o5pSBk/rbQVJrkZzWS2awORzNsLDR/nyIdcFhN/+mxlEJLJlKFTo4?= =?utf-8?q?3EKdzh3Rl6QjnWt35wGj92AfJsJ8A9t3xVUjNM4CB+qqCkglEVZiY1luol+0nu0lN?= =?utf-8?q?u95N29JLdOlAMZe03PzMBAMrcskRPSAT+rIhkU7MxqmpNLHJXU1/JCHwMSpa4N4Se?= =?utf-8?q?T8w4/gYlF9QrPdVbpZbmjkdnwSY5QQ/+5etUAC+5B3qTj26y+4VSP2W+MyhKZEQuT?= =?utf-8?q?4zFlKLgCZVSSFbZlMmKU0A0sCcpICIqjhB465pqftyW3xiofUfHNX1Wzv5LezoknM?= =?utf-8?q?I9SptcvoPm4tY/zYVZfVtobXTItaUpZ9spbk611nuPwfLRUN7GFkr343PWLnkIQPM?= =?utf-8?q?oU9P1f+3TI+vjyr1U34LVNs1xADTKD7x8kcJZMpehHQieUEpOjc/Glv5uZ5qbi2rC?= =?utf-8?q?/eoDGHbhKA6BR+LDjjKNsqhje1ZQxI6hsBEReMQz8Y+TRevctO3rZwpCDb95l4IWp?= =?utf-8?q?4RvP3KZvMd+yH/eI+dW2HRpXVkZgz9BJHTW6sW7q4LoByzguHAj6LXyNRuMIINZYt?= =?utf-8?q?FNqB7Hm0ma09qe60net+ut0usnXxcQNjNojdniJgkpcoPmZhZjnnDbwzgVLIoaACZ?= =?utf-8?q?VLdA8TyDiD7OxBnmtrMiuSYfSMSZ/l47/rkQQ6K2Mci4I44G4xh19dmE4+qahkeYz?= =?utf-8?q?OfYPzgxg3iP09AzuWAx07iAbEFpezoNMdVkY6RiEWAtPp6tWFYt+YJ+5hgekIzNGk?= =?utf-8?q?s+qR6Sau0WxgCiwhDsVhz4j8tdRsdR6oBwwvvhdCTHBJAVPocCr2qLY6QTiyaKDj/?= =?utf-8?q?4+/HSh7E+OHhPsO5CNT2vdIsTE+vb+t36SdIA2GqAwCOgtqkgi9m9DbqlDj+oM16D?= =?utf-8?q?zwmjYXdEZy0raYyfkp2ZciC9SQHPdJHt2abd6KwYHPwfNvAz7AOAWz0txIajd6aYv?= =?utf-8?q?gG9ezJHToVAr4FGV5H5x/cwZBaCx3Z7Db/WgvesOCv8NmhNRPf87pAbfzWf/yKJan?= =?utf-8?q?FLLvWlHqlSzvp3Mj1POIvBxYXYOIc1l07P0lrWnGrvjpeV4+CJ7EIkT4SOyRUvn/5?= =?utf-8?q?a7wG9P0V3Xg6uhwkSA1KxotqOaIOZVtWzQG6kyWL+OFuvX4/AwVtWvXMZAfYjbYcf?= =?utf-8?q?naEjHJk1yJj3WzELR1OgZq8MmSuCosggLh6ibdUJnIANJZiKwEbK+I8Mg2wexSPFJ?= =?utf-8?q?qMzPJCkIprJwpHxvNYUbrK4KigCWGEtwZ0yH2F2SyLfxTQ6jFIUZpmdQhW8aVJfsX?= =?utf-8?q?TCjo1LeYFb+xZ7PK6mGcmJmjxCEnjSt2n/J165XMnZxFITKEuJlfx8pRze/gCJAzt?= =?utf-8?q?IIUhxRZRRHZ0SyQmOLu16BHTuAdmlHa4zapJ6L/CzWmq7WVRd+MU1FUmj0r6vvAsQ?= =?utf-8?q?+6hbt+EhuDU7?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: d9252a38-16dc-47db-8b25-08db2ab827c9 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:31:03.3863 (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: DMJZgR2biyeaVO1x11gb56lfoCxvgSqxNq/we+VigUSdZoovPjlh3AEgQyxIUwdSvn/h1tcU7zD4kNvVGDCmMQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7042 SHADOW_FOREACH_LE() already invokes the "body" only when the present bit is set; no need to re-do the check. While there also - stop open-coding mfn_to_maddr() in code being touched (re-indented) anyway, - stop open-coding mfn_eq() in code being touched or adjacent code, - drop local variables when they're no longer used at least twice. Signed-off-by: Jan Beulich --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -1289,12 +1289,8 @@ void sh_destroy_l4_shadow(struct domain /* Decrement refcounts of all the old entries */ sl4mfn = smfn; SHADOW_FOREACH_L4E(sl4mfn, sl4e, 0, 0, d, { - if ( shadow_l4e_get_flags(*sl4e) & _PAGE_PRESENT ) - { - sh_put_ref(d, shadow_l4e_get_mfn(*sl4e), - (((paddr_t)mfn_x(sl4mfn)) << PAGE_SHIFT) - | ((unsigned long)sl4e & ~PAGE_MASK)); - } + sh_put_ref(d, shadow_l4e_get_mfn(*sl4e), + mfn_to_maddr(sl4mfn) | ((unsigned long)sl4e & ~PAGE_MASK)); }); /* Put the memory back in the pool */ @@ -1320,10 +1316,8 @@ void sh_destroy_l3_shadow(struct domain /* Decrement refcounts of all the old entries */ sl3mfn = smfn; SHADOW_FOREACH_L3E(sl3mfn, sl3e, 0, 0, { - if ( shadow_l3e_get_flags(*sl3e) & _PAGE_PRESENT ) - sh_put_ref(d, shadow_l3e_get_mfn(*sl3e), - (((paddr_t)mfn_x(sl3mfn)) << PAGE_SHIFT) - | ((unsigned long)sl3e & ~PAGE_MASK)); + sh_put_ref(d, shadow_l3e_get_mfn(*sl3e), + mfn_to_maddr(sl3mfn) | ((unsigned long)sl3e & ~PAGE_MASK)); }); /* Put the memory back in the pool */ @@ -1352,10 +1346,8 @@ void sh_destroy_l2_shadow(struct domain /* Decrement refcounts of all the old entries */ sl2mfn = smfn; SHADOW_FOREACH_L2E(sl2mfn, sl2e, 0, 0, d, { - if ( shadow_l2e_get_flags(*sl2e) & _PAGE_PRESENT ) - sh_put_ref(d, shadow_l2e_get_mfn(*sl2e), - (((paddr_t)mfn_x(sl2mfn)) << PAGE_SHIFT) - | ((unsigned long)sl2e & ~PAGE_MASK)); + sh_put_ref(d, shadow_l2e_get_mfn(*sl2e), + mfn_to_maddr(sl2mfn) | ((unsigned long)sl2e & ~PAGE_MASK)); }); /* Put the memory back in the pool */ @@ -1390,11 +1382,10 @@ void sh_destroy_l1_shadow(struct domain /* Decrement refcounts of all the old entries */ mfn_t sl1mfn = smfn; SHADOW_FOREACH_L1E(sl1mfn, sl1e, 0, 0, { - unsigned int sl1f = shadow_l1e_get_flags(*sl1e); - - if ( (sl1f & _PAGE_PRESENT) && !sh_l1e_is_magic(*sl1e) ) + if ( !sh_l1e_is_magic(*sl1e) ) { - shadow_vram_put_mfn(shadow_l1e_get_mfn(*sl1e), sl1f, + shadow_vram_put_mfn(shadow_l1e_get_mfn(*sl1e), + shadow_l1e_get_flags(*sl1e), sl1mfn, sl1e, d); shadow_put_page_from_l1e(*sl1e, d); } @@ -3559,7 +3550,6 @@ int cf_check sh_rm_write_access_from_l1( { shadow_l1e_t *sl1e; int done = 0; - int flags; #if SHADOW_OPTIMIZATIONS & SHOPT_WRITABLE_HEURISTIC struct vcpu *curr = current; mfn_t base_sl1mfn = sl1mfn; /* Because sl1mfn changes in the foreach */ @@ -3567,10 +3557,8 @@ int cf_check sh_rm_write_access_from_l1( SHADOW_FOREACH_L1E(sl1mfn, sl1e, 0, done, { - flags = shadow_l1e_get_flags(*sl1e); - if ( (flags & _PAGE_PRESENT) - && (flags & _PAGE_RW) - && (mfn_x(shadow_l1e_get_mfn(*sl1e)) == mfn_x(readonly_mfn)) ) + if ( (shadow_l1e_get_flags(*sl1e) & _PAGE_RW) && + mfn_eq(shadow_l1e_get_mfn(*sl1e), readonly_mfn) ) { shadow_l1e_t ro_sl1e = shadow_l1e_remove_flags(*sl1e, _PAGE_RW); @@ -3596,13 +3584,10 @@ int cf_check sh_rm_mappings_from_l1( { shadow_l1e_t *sl1e; int done = 0; - int flags; SHADOW_FOREACH_L1E(sl1mfn, sl1e, 0, done, { - flags = shadow_l1e_get_flags(*sl1e); - if ( (flags & _PAGE_PRESENT) - && (mfn_x(shadow_l1e_get_mfn(*sl1e)) == mfn_x(target_mfn)) ) + if ( mfn_eq(shadow_l1e_get_mfn(*sl1e), target_mfn) ) { shadow_set_l1e(d, sl1e, shadow_l1e_empty(), p2m_invalid, sl1mfn); if ( sh_check_page_has_no_refs(mfn_to_page(target_mfn)) ) @@ -3647,13 +3632,10 @@ int cf_check sh_remove_l1_shadow(struct { shadow_l2e_t *sl2e; int done = 0; - int flags; SHADOW_FOREACH_L2E(sl2mfn, sl2e, 0, done, d, { - flags = shadow_l2e_get_flags(*sl2e); - if ( (flags & _PAGE_PRESENT) - && (mfn_x(shadow_l2e_get_mfn(*sl2e)) == mfn_x(sl1mfn)) ) + if ( mfn_x(shadow_l2e_get_mfn(*sl2e)) == mfn_x(sl1mfn) ) { shadow_set_l2e(d, sl2e, shadow_l2e_empty(), sl2mfn); if ( mfn_to_page(sl1mfn)->u.sh.type == 0 ) @@ -3670,13 +3652,10 @@ int cf_check sh_remove_l2_shadow(struct { shadow_l3e_t *sl3e; int done = 0; - int flags; SHADOW_FOREACH_L3E(sl3mfn, sl3e, 0, done, { - flags = shadow_l3e_get_flags(*sl3e); - if ( (flags & _PAGE_PRESENT) - && (mfn_x(shadow_l3e_get_mfn(*sl3e)) == mfn_x(sl2mfn)) ) + if ( mfn_x(shadow_l3e_get_mfn(*sl3e)) == mfn_x(sl2mfn) ) { shadow_set_l3e(d, sl3e, shadow_l3e_empty(), sl3mfn); if ( mfn_to_page(sl2mfn)->u.sh.type == 0 ) @@ -3692,13 +3671,10 @@ int cf_check sh_remove_l3_shadow(struct { shadow_l4e_t *sl4e; int done = 0; - int flags; SHADOW_FOREACH_L4E(sl4mfn, sl4e, 0, done, d, { - flags = shadow_l4e_get_flags(*sl4e); - if ( (flags & _PAGE_PRESENT) - && (mfn_x(shadow_l4e_get_mfn(*sl4e)) == mfn_x(sl3mfn)) ) + if ( mfn_x(shadow_l4e_get_mfn(*sl4e)) == mfn_x(sl3mfn) ) { shadow_set_l4e(d, sl4e, shadow_l4e_empty(), sl4mfn); if ( mfn_to_page(sl3mfn)->u.sh.type == 0 ) From patchwork Wed Mar 22 09:31:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183743 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 18856C6FD1F for ; Wed, 22 Mar 2023 09:31:59 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513222.793922 (Exim 4.92) (envelope-from ) id 1peuon-0007Oj-Ny; Wed, 22 Mar 2023 09:31:41 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513222.793922; Wed, 22 Mar 2023 09:31:41 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peuon-0007Oc-LC; Wed, 22 Mar 2023 09:31:41 +0000 Received: by outflank-mailman (input) for mailman id 513222; Wed, 22 Mar 2023 09:31:39 +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 1peuol-0004un-PV for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:31:39 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on20608.outbound.protection.outlook.com [2a01:111:f400:fe12::608]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 58d7008b-c894-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:31:39 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB7042.eurprd04.prod.outlook.com (2603:10a6:208:1a2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:31:38 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:31:38 +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: 58d7008b-c894-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kMrKUvcqLWLjhDdfVyxXBZv1X2rPhrseSUGE2Nlyvv+Q85F5zJkwxtSfOYxzvDZURO64hWP5Ct+tNgoCHt1k0zVQ3L85RUhTwvR5/eb96cCW/uB3If1/lw3MS4te332P74W0LWVgyKFyUPw8KJVSVAzs//fKMw6aruTJEbJKzdDAZLa0gtPOSqkICAsFytLNeiSFE/JVDFb5wN5305vVr2V/7PHN0ssv7Si+mjQ5xg3p2jU05Aa8hyc6S6tX1qgRo3iCZiKuxWONPdtRrtjFzFXsuGxM3sGI8FO20EDphb9xPyagyRlKnq3CJTf/E26vgSLwfuL1W8C/bPz52vI37Q== 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=D1Dsj40oRv4OjoqF3xMmolhrQ7JzGMarXChK83LdjUg=; b=cAxPkxMAmUytH/XVgZ+wM0DF1qC5KLie2owEsa+13saGonfRI+eqyxWQ/dVfpd9Bd32ru8YHboZkmADfPGyUHRAjPYTHUSTciyLa9DDC6N0BHfyljKJq0aRQ+/YA0/zDCFmO4W/kVbVxg+Uxg/hz9A5c1x9tsf8m0q4ZP2l34vDN5O8oOvP1SE5Lf/zs0T7J06szsbldL/aAbbC0UFgSr41WqfMY0rv30nmvCCcg00AAKbIMWfG31JFT7dxiplbavj/YuMG16l5Z1n6m9RtaxeGMGep6gEb1vqKpiWOqo9FIWpmBYJi3H1jObGQhfrH0wmqFoaiSEh+W53PqtKoARw== 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=D1Dsj40oRv4OjoqF3xMmolhrQ7JzGMarXChK83LdjUg=; b=b85gIroNeVae9dF8A7LjE4RQTJTA73jsELNgvvSwtB4cK5Cs8ppfEcFrVNHnxsPyLz2/h74qPe/ubdE6uFos6PG0+ZGdT8or4TNmL3bziLezoYeJ6iOnSMltfzTTmqv+NlC3QdqrNsQgR/cs3PYN1j69lytGfH7E9B/AC4N6/urtcuMKEtRM7cEyIYwIO/DESfMeSNohZlESnP52Yc406OJpNAEVgSSh+B3k3y3YGzmeY5JTK/k8GrYkRNK7Ls3tVDxA1A1oGZnTWqFTIFbDEqstS9zBdnp4LnbJbwhu9WWAXtJtrPEKNweU/AcxFcmBDRTSfQYOUTbZ/Hnug3qIcg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Wed, 22 Mar 2023 10:31:36 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 04/16] x86/shadow: replace memcmp() in sh_resync_l1() 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: In-Reply-To: X-ClientProxiedBy: FR3P281CA0123.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:94::9) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM0PR04MB7042:EE_ X-MS-Office365-Filtering-Correlation-Id: e18fc211-c4f7-49ec-debf-08db2ab83c5b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Apt43Mnd5053D8QtUHgSVL3zVI+V12QaNodawusNCQQRstHX5S6abL2aiCFEGtLeCAVx1mNmQviQYodjzWq/JJ5L35tLKThWJBILc49wiUpUPA9gbi87fukILnARoDZbpuMZblRC9bpWjBzOB0kC2/EIJ4RZfFS2p0QnRymypVcVULNurTOk7fHknJkvGwJdUtBNrRht2RbUGJpnXpP1lsR4OFnQ0tLbLdp5t2uUsiD9hKOQzThj94o0yyzintePmfobol9mhyWJarJk2sgXK8Dj4mKdxzOVFAM6C1u91gl5GCjrdL1UbVrz6Z1L/OtCi/2CrCRdHhzzREiATOEEI/2iFPWto3RIXLiOR/QinfJtUSq2lb4WBvVAW+4WzxsFa5iPTufkL05i8zBJHLAptCOs0sfoA41wPJHPgfEe6oSQgViohfwbln0n6aIjAS0JSPAa7JH9TUCCIWO+Asi48Q298XC0WNF+JSkCs83SkgRdx7mN8myWlvzEu09Ga0/Op/AmBsp1J6Ph/Iz1jFQxNeItKzqIf6bfqsoVf9XfvhkguPMCgNmEVNMYnvSTpNOvY9N8VBVogzudOoTRMBgRKvc6FOF1NMYWLhOxmdgkwoShBalwpcB4NxSosHSCGxHj3xRqeUcQr7ixMoz8eHJ1c1gb+UF6baA1ErpX4eeLdMYCjVhchd7QXK99JsnWdCfJaqFgGoLbWOMGJAbaCgcSkgOWBsbita+/ikF8oAC4095yBdQX5lwkiNFfN8cQWcvgRnPZFmICvQbKah9Lul0ANG//CGtLBn31yl306dzSSoE= 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:(13230025)(376002)(39860400002)(396003)(346002)(136003)(366004)(451199018)(2616005)(6512007)(54906003)(86362001)(38100700002)(31696002)(66476007)(8676002)(36756003)(2906002)(8936002)(4326008)(66556008)(66946007)(6916009)(4744005)(41300700001)(5660300002)(6486002)(6506007)(26005)(316002)(478600001)(186003)(31686004)(45980500001)(43740500002)(473944003)(357404004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?vzZ55KkbCg2eviJsyXW8PVSaBT3u?= =?utf-8?q?FHeewlvyyJVGzUzySnJ1Ha83S6P2J2vqdhku7nfGahn9lh9S18s8HLE2iMKC81AyK?= =?utf-8?q?/J1R0SN8IdowYFibF67AUHWHQrM1Ra6N+d8asE5C0LtaYDyMam92DOVH/qR1cHq23?= =?utf-8?q?l/ClvL1UD3BBkKxTKiTZpMbZcnVGGCd4BR3TFolChaPW8Y421u9jNxTxfxKwghXbW?= =?utf-8?q?OwB/oESTf7Q/WsUosY3zpqXs+jopLg/HfsUxV1SL+nYOWd+SntUAt3+0326H3yqAT?= =?utf-8?q?qeh+7loLqsPrEcB6OmZWL43kla02rPPJkyUMPOVgb7N/de76gYk2xil7BNbq0v8n0?= =?utf-8?q?6ABNnM/rGONXunXXwyVTfGHAS6mf1B41bEnLBcHWIcT75R+yMnZx37hBxPSEGRt9T?= =?utf-8?q?HoT6KvWwnfbdWH53GKVovufzV9iOi9yYTa2UCW1HxB5WuWEyXGdjv+UJQ5ncl4X2d?= =?utf-8?q?cHWLDSvhbaD1b6jOove/pGfHDJVBlwf29MisFY3irAlN7ZJAw7i2/YevCO+lKGmtE?= =?utf-8?q?iOSh9CtUoYFdDRUcM9P3p2rUh/E8z9k6zk7LfZGvZd4KFPnpkNhug+fO1DgqYDkf+?= =?utf-8?q?Qy83XXvQR8YkddfF66dRnVvnhQqRMNScJTsND4ot/H+A2OTZZZlObk3xcpvft0pTe?= =?utf-8?q?hi95FMfrpts06CgUlQQU9hoyDmgEH3YD0TNUbvmJ6AUB9utWai6eie9OiuhfK89p4?= =?utf-8?q?laaLeqS8iXKF02eg6d8SrnBqT4r7y6RrlkR4nmIXzSWG1+BDQIkfxrh4jCUIP5fKa?= =?utf-8?q?4GbKeg65rU2RmmAL8D5OlTB32oRfz/cMS+JUR1AiCI2uIpgzpLOauQzMS3hS19Xwi?= =?utf-8?q?6kVHHoRSJQP7Zv+ehD3B96px7eHhvUXY0lTkrQoPqHpwTBHlGe9A2SgEGIA+1BSIL?= =?utf-8?q?Z2kmwZiNB54KhcQtC2J2SCARTIh+0+2NBOwZCQnuGUmF1aYFfL9+vV9ohelJa0gQR?= =?utf-8?q?9XOHPppwr5UH4dMShg5HlbXzXOpbX1TdZjCo2+0Qgk7LEaKrUN8+Qxz2Y3UB61Vjz?= =?utf-8?q?mr0BezcfdO/P5cpn9tJ7m8H22ADsD9BfqGypi41If3iSxZMr3mt7HJlFXeUmtz92F?= =?utf-8?q?CxWxG8bP2X2eQP+g9OqhMSoF1PDkXFxCraa52KqnOe39VeUjpnWY026D2+GbXmRsa?= =?utf-8?q?DSHLonfaAx63UobPz3bEaD2xoXFGN9efUffJQ5Hjc48tBY7OsSoGS2rrOzmqHB/Eu?= =?utf-8?q?n34xpAvH1tSGRnAsPA3v4FsyrSxZqjxbX2U62wsPk6h1hrbM+bU38IpGvb/jgOldO?= =?utf-8?q?NZ2Cq8F9+AlxjHem3a944gwRhJ8BSldmeaFWbbYEh98vUjJmrgNM13NQRCxAGnBRt?= =?utf-8?q?bpxS8ok0tKP08s9HRNMg88XziDh9ey9uSgJ70mbKbM3rPiM9jRztap3VS41SyoKDZ?= =?utf-8?q?jWg447RqFiNzCp0trRy/SNMN4P3RzPmFlyrnhs9R7o7FQpf5C9nrOVj/8nhEts9eN?= =?utf-8?q?VGb601BWukYftd10dQNegUylDyH6CXCxNknQa4YeyoTFIaXMvPZ751lMQCX1ticYq?= =?utf-8?q?F+T0K8aYScaE?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: e18fc211-c4f7-49ec-debf-08db2ab83c5b X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:31:37.9309 (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: 1Zw7fPro1C0kus2bP5ILOOdF/g0oVNYhMh8fxmZfTJIEBS8+XrkKSU1vCkn+69cfR18OpTuZHyIsxc1hMdht5A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7042 Ordinary scalar operations are used in a multitude of other places, so do so here as well. In fact take the opportunity and drop a local variable then as well, first and foremost to get rid of a bogus cast. Signed-off-by: Jan Beulich Acked-by: Andrew Cooper --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -1659,9 +1659,8 @@ void sh_resync_l1(struct vcpu *v, mfn_t SHADOW_FOREACH_L1E(sl1mfn, sl1p, &gl1p, 0, { guest_l1e_t gl1e = *gl1p; - guest_l1e_t *snpl1p = (guest_l1e_t *)snp + guest_index(gl1p); - if ( memcmp(snpl1p, &gl1e, sizeof(gl1e)) ) + if ( snp[guest_index(gl1p)].l1 != gl1e.l1 ) { gfn_t gfn; mfn_t gmfn = INVALID_MFN; @@ -1677,7 +1676,7 @@ void sh_resync_l1(struct vcpu *v, mfn_t l1e_propagate_from_guest(v, gl1e, gmfn, &nsl1e, ft_prefetch, p2mt); rc |= shadow_set_l1e(d, sl1p, nsl1e, p2mt, sl1mfn); - *snpl1p = gl1e; + snp[guest_index(gl1p)] = gl1e; } }); From patchwork Wed Mar 22 09:31:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183744 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 5F493C7619A for ; Wed, 22 Mar 2023 09:32:07 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513223.793932 (Exim 4.92) (envelope-from ) id 1peup7-0007s3-0t; Wed, 22 Mar 2023 09:32:01 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513223.793932; Wed, 22 Mar 2023 09:32:00 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peup6-0007rn-UA; Wed, 22 Mar 2023 09:32:00 +0000 Received: by outflank-mailman (input) for mailman id 513223; Wed, 22 Mar 2023 09:32:00 +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 1peup6-0004un-HO for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:32:00 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on0600.outbound.protection.outlook.com [2a01:111:f400:fe0c::600]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 6534e422-c894-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:32:00 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB7042.eurprd04.prod.outlook.com (2603:10a6:208:1a2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:31:58 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:31:58 +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: 6534e422-c894-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eawRySaNBs4vSIrHtUbDc7smNJcFO6XQAWGtQiHm6vwEHg3cKdYPLNfYCfD39oTi8X8dgviTv3rsdDfTuW7SYOFMy9DjjmCLF9MFoaCfCzCCxP6770G96qrWKjTT4UL53SO6xU3rkbn6UgsrOOMOcfjUL0cigASaKLPTWbFdM55sAM9GoxWfpEGWB/KomaQyW6MIKqM0zkXtjFOw45UYBQ5ay+5LMILrrY6vkg0ExBSMw/WNyp98ns7ycOmjQ+h1iQWPQBC8KYiDR6UdwdfMD7BJKkI6mpSiMuuvC/SdH4loT6qxWH0FtowPahsybVqe9pv5YpGfbcH78FaFY+pE9w== 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=o37qmZQGz0dUPVarEE5M4F8gAAfRaPl7Obs64dcS6gQ=; b=g547sFG6TVthbvW3UmsnIygLUVurjYvLE05IGH57lneXb1+wHWMpHoti4mNH/6esgOxIKVjHNJcWZ4XnO7Rh5qv1PvIdIlBWHxORWClwz5Wp+LnM68Vv+bEE2EBCevSnXh6yoDaeNxW4Lq1WHZTxy4dxFh1ZWDk2SQfq1ELetEUfmDZeR9O8fIPv4N2cuN6lsKv7vpCF3I+SFGARWdRPM41iOA1tcaWqi1FzhD6QmGqPRGvPD3dOIe3VdHRVAjHzDAEJ4lRKTesFq8TJZ2QTrdsC9J0Pwt85hgJWqAeAvJHa71f3jFqJJu5rBHAMm9Wfs33QO+lP0H5uZmXBLE1Gjw== 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=o37qmZQGz0dUPVarEE5M4F8gAAfRaPl7Obs64dcS6gQ=; b=H2JUrtVDKzGDVlh+nanVz5A8hnUn8e8jJq/N7wDQC2z2Ra6UcdTfoBOV1lKY5B2zWvAnY3ubDWHxPXDPDjKQIvPtjUemx1b/PZ7+HnrLnTM1sIDr163aUzfzxKzct9T3erI6tq9+Hxhx/xSGhW4TZ48w4CnTOBwFdMCk++qEwZ8WC7iwOFOYj0V9iXcpUrvK6WEi+scyK2d7+vabggszpg3AHlTnoZpEbBdiv3CUzLD5Dq+ud2eKky1ilQD1j1bxTePRzOkRG3wHxrb1Brk3iNXkz7ID3MzM5yAA1B5YzUKvR9AM7qUoO5m8FlX0KXMGwIfg9tFeufCTmZFO9pxJcw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Wed, 22 Mar 2023 10:31:57 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 05/16] x86/shadow: reduce explicit log-dirty recording for HVM 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: In-Reply-To: X-ClientProxiedBy: FR0P281CA0016.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:15::21) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM0PR04MB7042:EE_ X-MS-Office365-Filtering-Correlation-Id: fa8add92-f6e5-47de-6741-08db2ab848c3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ADWDrIRM1I9GPodO8xTVzfqsoVFKnlcdrgX134O6LDNHjPvtRYKCchl4YDAXWE89MH/NyTKoXkkIl5IIE+5AJ93e3tMy6kV79BQ6kNWkDRSwMX3JqOw3YDVaWSo0vyC8oLVoLiHWQSHBqxabByrQmmFKW656lMjI4Z6iF3rbBbsLHGC6XcSM1Yf/xfSxFeEIB0EHG2XF2Y2L85XDTYXEDSprLRWoIJDrGAxJLrQiacjmMXNUTWYfA0IxwtiXcSoXiAsUXNLOzu6lntZYIZNhWUJ7VwVrkF69JEGgRTDSohhiqDjDQIpsMaZVryvgQBnB05/BPLBCIn0jPfYwxqvNXYtpHmNqqgOFurkJOw6XguYiwUuDujW1s3HQ9wRsP8FAwBIw85XU/1jkcZc07/V5MaD2BHxK2dc7ord7h0aRakAAMkK9gRmn6MqBaHqbHDit1kyHo15IKNYDLvDqcYg9S/vmht20Zvg3NCIlAMNSdosiOUMbwApfVOAIVjUY5ttLMAD130/h5TDMMqfkYtJ+15jaYfbD8fjLSMnsZAphU8NXQtEdWDJ8cdRCIrh8lEeKmiRgWftqHBZ+EmIAqC4GEKmc82ns9axTByQ0NGwjOuemVXYwzIr8n4Zc6lUeL8316uWCoEhlkEHQDQunEPsZ6PPVk/YOXpU295yFPheskbDZ8y7iqBhcyKhremjnxHCkLsRWzaFqazJGusowvrScXh2oYqYe6ITfJhZVq9RXdpKiBvvLW4BmqD2OJe7dmV4V 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:(13230025)(376002)(39860400002)(396003)(346002)(136003)(366004)(451199018)(2616005)(6512007)(54906003)(86362001)(38100700002)(31696002)(66476007)(8676002)(36756003)(2906002)(8936002)(4326008)(66556008)(66946007)(6916009)(41300700001)(5660300002)(6486002)(6506007)(26005)(316002)(478600001)(186003)(83380400001)(31686004)(14143004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?+RoLntFM9/Bm+Uj9DIsxBf5jOYNk?= =?utf-8?q?Vvr1Y5LBcJVk+YqDyCKm8jD5tGj7uhYpK0MMsPEu+q9iC3NBgyE1eQQhNoOuHT0A8?= =?utf-8?q?3nHbqaHNzkNnEvp2kGrxpuCLPyM3Sm1S+y5HknCyvjlhjdtcSy0vhfVc/JnH47q+x?= =?utf-8?q?Kn5cDfvdLnDlXzvQXO/gKktgBT9uZ3dElGcwPhFTIa5z2UQe8bchRKBPMoC2/Sl5s?= =?utf-8?q?1XZxiX1upUkzY/0p7rtq2nH3h6e2qBrTsfBTjCDMQ+gqbAkAYpwVzZijdmsi2STA8?= =?utf-8?q?80WOm9magsyEPbtyKv1WgJXjXfbSw7T2tMagMnyFE/nYV2qPydFxYKDKT2PUmfC07?= =?utf-8?q?VdcpynMHI1nygacu/1rIoNb0kX3L0Y2PxOJedMJFzf7opnN25S5wyqAuevmyhgIGD?= =?utf-8?q?zsufqPJa6/itafIU3FkwZIlPaekDPXnHbsawiSH5xvgDBHBKxa8slbcAOGEMoMcGc?= =?utf-8?q?JNn67CXgcK8goBjZcinGHUx+maEBfkAhvXKJEZcYI5rBeILt10+J6M8tIpG2ddtUz?= =?utf-8?q?d+ZtvwJJSvars1LTba2CWFGb9t8YVcSZpcIfF/qXBu91qjgq4RjtKe32qPNCsEs1o?= =?utf-8?q?1Y/e8GNsvhEABkmt1vJ5YN3UCkErt8WjdCNtOUcBmyz6exAtxDujcFvjJZNyY2vmv?= =?utf-8?q?Sr2qTll4KK6yygmdNdpu4bF6uG7c87woiCsN/+wyDiPGhJwFw1d8MZE3phxyC39AF?= =?utf-8?q?c7jAGhA73CwUhmeCzEeC5pyqdMtIBXNczxUNGocaxj189t2Rv75iv6zylr7FvlBt0?= =?utf-8?q?bYK09gLIgt+q9F2Jkc3AWaBC3Mf1Ojl0cz27ePC5gf1ZyngMOEZUEqyPbPIU4xi9k?= =?utf-8?q?tfJtteedX7WXAm+0O6ODd41hvvcLEA2AMWLUwCQxYS2apDh+kxAQdPm8btKkKhjsX?= =?utf-8?q?jtPb3caLuMNWLDocgKBsgWtabW539ILrRZ4U/U8Kd3+Bnc8Nsi6i2fM7zQGoBixez?= =?utf-8?q?q389t0VRIzjTL3lxfUje64H67g/w+SSRuaFaWiQd8p2/lyeZhw3RVBFMZLUYKVBMY?= =?utf-8?q?Z1oyA93N2bqcbdfreD0ECtg4BWSDlRBx2t4y3eMn24AG34L0Cz8TvhfadwGMm4BRz?= =?utf-8?q?wiDUh5LcPVblNaUQA3H4no7FDC9935JZap7SGMUH2h5slrQMWRCeOtGomrFKkyL45?= =?utf-8?q?bS1nvLP7iTrYpObDcL/V8wNC7wh7aeX5Y54O/QzIREWuIdd8C0KE8ke5KKGHdc/D9?= =?utf-8?q?1elPU3Wubj69rve/FJBZy30lPK/YJ7rZvNCf13ZRhVokDgqEd4fxfatbtv2n29qQb?= =?utf-8?q?mCThWAGRSqUcp4tGrkBkIYAKdVKvXuUeZ1SUpfubL7uVCB++snQ9LLYyUShgSQhC/?= =?utf-8?q?2HrYJj1lGpykfZhALKO/segk6EBGQOhnyF7wy8rkjCjWPVs9Zn/4y/+d2jD6iO6pr?= =?utf-8?q?jQgeK2YRrK7OqkVRXI/IMKhYCh2XPsQ3g1NVB0Id14SYQkF6R/wk7/cT9fRXxRXhg?= =?utf-8?q?VKJhEU8AL2OwFGTh4nanh3vX5Mnjc+Sy5g4pLdn198MhoSspwLvVcyw2vesPGaKpT?= =?utf-8?q?LxJMLON3iTKC?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: fa8add92-f6e5-47de-6741-08db2ab848c3 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:31:58.7109 (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: NsUMzQuLOZzCHzYMPDEdlNoQ5VX5sYasWWl9k/ie1dRF+O0MgjyPfCtFOSBFHWm3L78E8Bhpm6ZNBfx5Ac8PgA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7042 validate_guest_pt_write(), by calling sh_validate_guest_entry(), already guarantees the needed update of log-dirty information. Move the operation into the sole code path needing it (when SHOPT_SKIP_VERIFY is enabled), making clear that only one such call is needed. Signed-off-by: Jan Beulich --- a/xen/arch/x86/mm/shadow/hvm.c +++ b/xen/arch/x86/mm/shadow/hvm.c @@ -656,6 +656,7 @@ static void sh_emulate_unmap_dest(struct { /* Writes with this alignment constraint can't possibly cross pages. */ ASSERT(!mfn_valid(sh_ctxt->mfn[1])); + paging_mark_dirty(v->domain, sh_ctxt->mfn[0]); } else #endif /* SHADOW_OPTIMIZATIONS & SHOPT_SKIP_VERIFY */ @@ -673,12 +674,10 @@ static void sh_emulate_unmap_dest(struct validate_guest_pt_write(v, sh_ctxt->mfn[1], addr + b1, b2); } - paging_mark_dirty(v->domain, sh_ctxt->mfn[0]); put_page(mfn_to_page(sh_ctxt->mfn[0])); if ( unlikely(mfn_valid(sh_ctxt->mfn[1])) ) { - paging_mark_dirty(v->domain, sh_ctxt->mfn[1]); put_page(mfn_to_page(sh_ctxt->mfn[1])); vunmap((void *)((unsigned long)addr & PAGE_MASK)); } From patchwork Wed Mar 22 09:32:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183745 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 4E47BC6FD1C for ; Wed, 22 Mar 2023 09:32:55 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513228.793942 (Exim 4.92) (envelope-from ) id 1peupr-0008Up-9g; Wed, 22 Mar 2023 09:32:47 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513228.793942; Wed, 22 Mar 2023 09:32:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peupr-0008Ue-6y; Wed, 22 Mar 2023 09:32:47 +0000 Received: by outflank-mailman (input) for mailman id 513228; Wed, 22 Mar 2023 09:32:46 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peupq-0008Cb-00 for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:32:46 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2061c.outbound.protection.outlook.com [2a01:111:f400:fe12::61c]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 7f6427a3-c894-11ed-b464-930f4c7d94ae; Wed, 22 Mar 2023 10:32:44 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB7042.eurprd04.prod.outlook.com (2603:10a6:208:1a2::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:32:42 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:32:42 +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: 7f6427a3-c894-11ed-b464-930f4c7d94ae ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ju5M9gjYGQGMaKENmKJuAXaM3SFeEfRPtreqgvrESg5vs6cvemY1MKyaZ2FGM/mUG/txSZcKvL846dxdwJBMy0cgOaXA3yHxoHwA/q7SiE6ss8ZME/P4Zv3KNsRqniylHYVa4HymiwUh2U5bgYhDGyCSz1y7LX2xk/R5yhuQmYCjkw085Yj3T3rg5E8EisdfNX7hcgNrEvrv73NrwtgnHOMu+/ltWe6QX3lgsGssqiAGwLaFGqzK+ZL3OqxYrinzgRnR5fZyTwykqqqkGI6rnF/6LzSUJQIAOupYGdL7Or0oFSq6WuM46N3h9PrC/N5zzQYUUCPBhttgChb2ltYfwA== 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=Eq2CTH5rnfD4r3gVyLUiATIhZh4l20nM75mDa4ujbm0=; b=KM95882aE1qAodIkmxth74aYyC+cQOx6anIG5Uj2acXEXnwGJe8Xo9HDKw90J6pmc7Hel8yJ9wbtlp6iN18ko/Cu0/ck2KZ8Wbh2vtZGvhHdtRTuhUkXIOOvSR9ZnMfKcfwIvDs04bQkscehQowjuZrWy7wSU+zSDrkmVuYxpShfCeFSfXlbbnO8wjCFjKDIKZfv5dERp3vhfZiVrRfai8j5Xjqrjs9Q4EnJDZ7//OaTFgCah4QxPVuUzV0b8AVbfKI0WOS/KlqhUMJ0BU3R94t++jTFpE32ygj57erIYD6RoaBwiyoANoVqGJKFg/MwYLAYObVCYNud0g6vwdjCFQ== 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=Eq2CTH5rnfD4r3gVyLUiATIhZh4l20nM75mDa4ujbm0=; b=VVlgEBB6g493M86kftHwFKYnhd3rShOF+ITGFlHYYqoYzRoC94xAAi32/GWp7s9biinYnuhNfqGRiAyzXAHe7UkiWAw2VVgQU5ppsHqkWPtKDomCHlg33VN3QPnwixgKJvzWrl+9Zy3WUC0E93vHBMJcSWCWMT+NVr8nLJmoJfp8r/MLIrR//t8+aE5D6MAE1Ojx+Gx7AXoIv2CtYmf6xPc7QfMOA/T+YS+HZzGR1lvogM+2aJPBPYZlPdgVHsrjdaPhYOvqh1D9duQyhYefBT48Vg2HvQ3w09qezKsbKLz91jd8gJ7JY+2tIUU4MlCAAEcbBDJYI0fLlfw9Zvjm+w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <4d36db89-cd87-06b8-bb02-395ec79662c7@suse.com> Date: Wed, 22 Mar 2023 10:32:40 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 06/16] x86/shadow: purge {write,cmpxchg}_guest_entry() hooks 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: In-Reply-To: X-ClientProxiedBy: FR0P281CA0046.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::23) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AM0PR04MB7042:EE_ X-MS-Office365-Filtering-Correlation-Id: 4e4712c7-766a-43c6-b805-08db2ab86298 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: eRP8SRKU7yb9YwCXjp3a/KhvxiUUvj5KIonY0i0L22HS+6DqAbR2VMq9zVP0FwPFmJdAN95DRwDe4p5jr2rx3YSBodt+sE+6OjJl/G+/8NaGfmGNnw1AQqvjtZuCzThSQ1oWBvBKuZjTkPX7QHKOcQ2HAfk2Wplaya7r7wT8N6e5yHdAc/2dZ7boNkS+b7ZQRVN1VUlrYU/loH6mDCEDSahHATXZEJTRgtgIfftoCvyMWPju5u2W4oXlYuKtCrh6+M1DWkgvy/xRlSKaeSbCTTlAARri+7ClcExHibn4SKsN6R7Yswdr6Hu5hgOGp2Hja9svYRkWjU+L5WoJiRmtXOKcFw+s1YN4ol2sith45Aq1AMzFFK+t31xjsUkmxUGKMsc3htgPEk7qGYI5aPGhhm94vY7sH/uQxnFB+3FIouC2GxL/fjRc1oX2LIS0J9enitbPJfjAwEyXrbMrl/ynlf3/AnbRWf9OegYcOp2y/oddT8sU8cwzlkBsMXB6F7dFHrHwRYHiCUV2MwjBGUb99CJlzCrJn4Pa3HU8jh/eyhu55PPm6WrfVqDUYcuUbT0N0yCE2skL4Nuig/5MAVdCo+Cw+Ct59D7I7uFBYgBIflPtU1p6gHtVBNIOyD+UG/bK8YhWea0SwG1M6J6h+5WdPrDUkGlY2Nti4NYyIyyyqGMxdKTrwDmm8+5JzyF+nU7YGV+vTMPKZ8ulMp7smhRMGKjaRR7ic2Pm1q047gnEPmOlQ1NlJaD0HiQyEqZccV29 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:(13230025)(376002)(39860400002)(396003)(346002)(136003)(366004)(451199018)(2616005)(6512007)(54906003)(86362001)(38100700002)(31696002)(66476007)(8676002)(36756003)(2906002)(8936002)(4326008)(66556008)(66946007)(6916009)(41300700001)(5660300002)(6486002)(6506007)(26005)(316002)(478600001)(186003)(83380400001)(31686004)(133343001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?XRjq9GZsD36AvpLQE+wvM3B5BLq8?= =?utf-8?q?p/u0H3kEU1kEYYqFzMvx7j86FTcpAGYkg6ltRi0KrCymnqk2f9zvMNx5M8Aqxl7x9?= =?utf-8?q?hdHm1nGHl56jCClGDw0sBkSUWvrhixttqXZfO9eWlRrO63hXYqf6pnnQhkk569VdP?= =?utf-8?q?T+o+h5LQVUVKbdvMvbNtbbuhoOQ5+WEyLn6lGR/sBapgHbavDm5WsEK9P/V8fdZFi?= =?utf-8?q?riwSiilIHiIFfJML2mFRjCYArP699xCypO4J/KDy2u4VMB9Q2sxSmHm4pIHJtNUUA?= =?utf-8?q?iqgUl+5UKN26OLJL/3O7dzIBr9uHGvVqGXXZ+8VnWTp2cayYViU0Wu/lW2RwSctk3?= =?utf-8?q?rjodAXHyK21z8q8VoG0Owus6hHy++CDvvmTCrzGC/L8ZaTxAPTfFW2n2IfyzN3xcr?= =?utf-8?q?4K/RoRR0ZINAm7P1Okwng6eW+yE1Xh1V9747skkYo0AxxdVQoooP6s1f5liRM5YAq?= =?utf-8?q?btjCOKMZQjBviTwca2ZyFoa2Bhxed8GBXNckb0ZkXwZ0fIkzEIfAFC/r6JRBpg0Gh?= =?utf-8?q?bwfXSgohP2IVRLu8ZFABxYzv+ANs4yfjFGaviahlxXbujUAuVY7VnHVNnUih5ZO/S?= =?utf-8?q?efqchRdmTBoYIP2DDGGQ5yF70Uw4PREevG7D4HDTl7EvzBh5XKc1azRkATUOVF6a/?= =?utf-8?q?HuBeDxS+ba9YfckEKPREZBt35jjj1BeVypcE0Bn/JQFXO/F25UFA68mvbHylo5Eoh?= =?utf-8?q?gtqwEzUFWUHEbf6bJsbal3bhuSVUZue59ss2GpH3qxKCJKAvSwH8Z+BrQuaYGseWM?= =?utf-8?q?74LzCA88y3U/B+S/B0xT1Czv2HJfO4cgPXYHh5ANNP0ntLn7qKxGLRJPDse41BQJs?= =?utf-8?q?i+df4p0fsuNhv2C4R5mTi3rvmFvPX+qE32gcyafVHM+XOp9Z0zUby+guOgMQw7S2+?= =?utf-8?q?OrAmnAJJ4Tpzsj2O6DwKzIG4xBAVi4iJRrrCGHLDroioT3FH4feHlpQwNafqkX5oE?= =?utf-8?q?RmpVP5nk9FaUVhFYsU5TusM5VLSR2UaaCctmeSkNVmy+TMv9XeHlTLxLqO6E+Ox64?= =?utf-8?q?yaJINZZY5/ucMe4ZgpaeiHLMPMtPNNBIWykfFjl5isy/La8qxx4hGcDnE99sudOij?= =?utf-8?q?VZNxV/GiEfThwgqfy63X90fvbP/e0GQgNPonF7eIPnmITkeBiDVWMrFVNsg/FY6P/?= =?utf-8?q?v3fmQUraPpjeexj5z3YaEUlB8kq4gUoP5hyUyDLZ6Hez3tS47gEFModPlKiMPa5o8?= =?utf-8?q?GI7AgUccTEHNXpY9b9vUm2Adx5eZLfwVtksgazNNRiv1AvcvSLhQsBaDjdb+aaSxy?= =?utf-8?q?p5/Ga7sFm0UqJxS5dO4fko9y95ptGMmVF4G12qWqPbbl727aVXcIJ2EkUENtvHG17?= =?utf-8?q?Dsg9ovKQD3A7YyAEO+fTOKk3vAWw2ahF62u+UcASc0ZO9Hj7WrtCdvKfyGq0ACLQh?= =?utf-8?q?nuSNfsgPA3RhKc8cf85G0nlgQAPCqpYOR9dQyZXhAnHwmqq8eptSgGyZOyigIM4fN?= =?utf-8?q?ssejqeLJ12xtPPohkxy2kSSRT5BOKSp4NSZ4QtxhTfk9YwKkaOlBzwdtG0/PTZKNt?= =?utf-8?q?RU9GY21JfB4g?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e4712c7-766a-43c6-b805-08db2ab86298 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:32:42.1144 (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: 81cYYG5+C3W+3CgJd7vgCt23L9j6stI/ZWaAv+veFELiC/v7NoXTmuxC46QkskiKJHPdPnjRSE21ZDZvQSGIJQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7042 These aren't mode dependent (see 06f04f54ba97 ["x86/shadow: sh_{write,cmpxchg}_guest_entry() are PV-only"], where they were moved out of multi.c) and hence there's no need to have pointers to the functions in struct shadow_paging_mode. Due to include dependencies, however, the "paging" wrappers need to move out of paging.h; they're needed from PV memory management code only anyway, so by moving them their exposure is reduced at the same time. By carefully placing the (moved and renamed) shadow function declarations, #ifdef can also be dropped from the "paging" wrappers (paging_mode_shadow() is constant false when !SHADOW_PAGING). Signed-off-by: Jan Beulich --- a/xen/arch/x86/include/asm/paging.h +++ b/xen/arch/x86/include/asm/paging.h @@ -98,13 +98,6 @@ struct shadow_paging_mode { #ifdef CONFIG_SHADOW_PAGING -#ifdef CONFIG_PV - void (*write_guest_entry )(struct vcpu *v, intpte_t *p, - intpte_t new, mfn_t gmfn); - intpte_t (*cmpxchg_guest_entry )(struct vcpu *v, intpte_t *p, - intpte_t old, intpte_t new, - mfn_t gmfn); -#endif #ifdef CONFIG_HVM int (*guess_wrmap )(struct vcpu *v, unsigned long vaddr, mfn_t gmfn); @@ -326,44 +319,6 @@ static inline void paging_update_paging_ v->domain->arch.paging.update_paging_modes(v); } -#ifdef CONFIG_PV - -/* - * Write a new value into the guest pagetable, and update the - * paging-assistance state appropriately. Returns false if we page-faulted, - * true for success. - */ -static inline void paging_write_guest_entry( - struct vcpu *v, intpte_t *p, intpte_t new, mfn_t gmfn) -{ -#ifdef CONFIG_SHADOW_PAGING - if ( unlikely(paging_mode_shadow(v->domain)) && paging_get_hostmode(v) ) - paging_get_hostmode(v)->shadow.write_guest_entry(v, p, new, gmfn); - else -#endif - write_atomic(p, new); -} - - -/* - * Cmpxchg a new value into the guest pagetable, and update the - * paging-assistance state appropriately. Returns false if we page-faulted, - * true if not. N.B. caller should check the value of "old" to see if the - * cmpxchg itself was successful. - */ -static inline intpte_t paging_cmpxchg_guest_entry( - struct vcpu *v, intpte_t *p, intpte_t old, intpte_t new, mfn_t gmfn) -{ -#ifdef CONFIG_SHADOW_PAGING - if ( unlikely(paging_mode_shadow(v->domain)) && paging_get_hostmode(v) ) - return paging_get_hostmode(v)->shadow.cmpxchg_guest_entry(v, p, old, - new, gmfn); -#endif - return cmpxchg(p, old, new); -} - -#endif /* CONFIG_PV */ - /* Helper function that writes a pte in such a way that a concurrent read * never sees a half-written entry that has _PAGE_PRESENT set */ static inline void safe_write_pte(l1_pgentry_t *p, l1_pgentry_t new) --- a/xen/arch/x86/include/asm/shadow.h +++ b/xen/arch/x86/include/asm/shadow.h @@ -248,6 +248,12 @@ static inline void pv_l1tf_domain_destro #endif } +/* Functions that atomically write PV guest PT entries */ +void shadow_write_guest_entry( + struct vcpu *v, intpte_t *p, intpte_t new, mfn_t gmfn); +intpte_t shadow_cmpxchg_guest_entry( + struct vcpu *v, intpte_t *p, intpte_t old, intpte_t new, mfn_t gmfn); + #endif /* CONFIG_PV */ /* Remove all shadows of the guest mfn. */ --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -4131,10 +4131,6 @@ const struct paging_mode sh_paging_mode #endif .update_cr3 = sh_update_cr3, .guest_levels = GUEST_PAGING_LEVELS, -#ifdef CONFIG_PV - .shadow.write_guest_entry = sh_write_guest_entry, - .shadow.cmpxchg_guest_entry = sh_cmpxchg_guest_entry, -#endif #ifdef CONFIG_HVM #if SHADOW_OPTIMIZATIONS & SHOPT_WRITABLE_HEURISTIC .shadow.guess_wrmap = sh_guess_wrmap, --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -428,12 +428,6 @@ static inline int sh_remove_write_access } #endif -/* Functions that atomically write PV guest PT entries */ -void cf_check sh_write_guest_entry( - struct vcpu *v, intpte_t *p, intpte_t new, mfn_t gmfn); -intpte_t cf_check sh_cmpxchg_guest_entry( - struct vcpu *v, intpte_t *p, intpte_t old, intpte_t new, mfn_t gmfn); - /* Unhook the non-Xen mappings in this top-level shadow mfn. * With user_only == 1, unhooks only the user-mode mappings. */ void shadow_unhook_mappings(struct domain *d, mfn_t smfn, int user_only); --- a/xen/arch/x86/mm/shadow/pv.c +++ b/xen/arch/x86/mm/shadow/pv.c @@ -28,8 +28,8 @@ * Write a new value into the guest pagetable, and update the shadows * appropriately. */ -void cf_check -sh_write_guest_entry(struct vcpu *v, intpte_t *p, intpte_t new, mfn_t gmfn) +void +shadow_write_guest_entry(struct vcpu *v, intpte_t *p, intpte_t new, mfn_t gmfn) { paging_lock(v->domain); write_atomic(p, new); @@ -42,9 +42,9 @@ sh_write_guest_entry(struct vcpu *v, int * appropriately. Returns the previous entry found, which the caller is * expected to check to see if the cmpxchg was successful. */ -intpte_t cf_check -sh_cmpxchg_guest_entry(struct vcpu *v, intpte_t *p, intpte_t old, - intpte_t new, mfn_t gmfn) +intpte_t +shadow_cmpxchg_guest_entry(struct vcpu *v, intpte_t *p, intpte_t old, + intpte_t new, mfn_t gmfn) { intpte_t t; --- a/xen/arch/x86/pv/mm.h +++ b/xen/arch/x86/pv/mm.h @@ -1,6 +1,8 @@ #ifndef __PV_MM_H__ #define __PV_MM_H__ +#include + l1_pgentry_t *map_guest_l1e(unsigned long linear, mfn_t *gl1mfn); int new_guest_cr3(mfn_t mfn); @@ -32,6 +34,35 @@ static inline l1_pgentry_t guest_get_eff } /* + * Write a new value into the guest pagetable, and update the + * paging-assistance state appropriately. Returns false if we page-faulted, + * true for success. + */ +static inline void paging_write_guest_entry( + struct vcpu *v, intpte_t *p, intpte_t new, mfn_t gmfn) +{ + if ( unlikely(paging_mode_shadow(v->domain)) ) + shadow_write_guest_entry(v, p, new, gmfn); + else + write_atomic(p, new); +} + + +/* + * Cmpxchg a new value into the guest pagetable, and update the + * paging-assistance state appropriately. Returns false if we page-faulted, + * true if not. N.B. caller should check the value of "old" to see if the + * cmpxchg itself was successful. + */ +static inline intpte_t paging_cmpxchg_guest_entry( + struct vcpu *v, intpte_t *p, intpte_t old, intpte_t new, mfn_t gmfn) +{ + if ( unlikely(paging_mode_shadow(v->domain)) ) + return shadow_cmpxchg_guest_entry(v, p, old, new, gmfn); + return cmpxchg(p, old, new); +} + +/* * PTE updates can be done with ordinary writes except: * 1. Debug builds get extra checking by using CMPXCHG[8B]. */ From patchwork Wed Mar 22 09:33:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183751 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 CEC06C6FD1C for ; Wed, 22 Mar 2023 09:34:11 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513233.793952 (Exim 4.92) (envelope-from ) id 1peuqu-0000iu-O2; Wed, 22 Mar 2023 09:33:52 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513233.793952; Wed, 22 Mar 2023 09:33:52 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peuqu-0000in-LF; Wed, 22 Mar 2023 09:33:52 +0000 Received: by outflank-mailman (input) for mailman id 513233; Wed, 22 Mar 2023 09:33:51 +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 1peuqt-0000ia-Lt for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:33:51 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2061f.outbound.protection.outlook.com [2a01:111:f400:fe1a::61f]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id a70011cd-c894-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:33:50 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AS8PR04MB7526.eurprd04.prod.outlook.com (2603:10a6:20b:299::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:33:48 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:33:47 +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: a70011cd-c894-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SBuxzecA0NkWJKAp/RM2UyYtDqeyoMPTjyo1P0Z8RmAu0iKNTyDz+Bp2ancdTCbHsxSGkuYBJTOo2t3fAXk7X6rBZ5ycy4Y4JIeEMYWD0r9AYSWv61XoEqU0Y6rfTCIaatUUaYxjYSIpL7CCtnAN9N6VF/IRqryOGngK7h2lORu2GPXKrGcG88XkKNPa3tG4IPgQ3XMp+bD5BogOfasVZYpmCpFUbOKnqx34Ch3pvgpzksXlXVfbThjOkniPZwhdPIqyhB4UBGlv4a9iiyPGI9JMFf1lodA/X2z8P774fGOmirqNuftfY6vkF8eiN0ndCtd9lY9c6DrA0Uk84KnbDg== 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=W2tWy5kxwOmE8Z2wFPJZdCsRPw6lxbt7ejpBm5kqUhA=; b=mBtu9VxUXRwebVWE/GZ66pDUGKLXjhiTbDIQh4v0AguD9mL1Wxc5oFhLGNNnn0i4G/gmMaNTjDENbtPsdkbntVw6w4xE0LRR5fCoAH3n/TLjQ0dUZTQ/bmMFSzzAP0FUVkkdxz34CZWFm1nYGHqnMfYcS44d1/egex9yxo5/uz+JBXUOwYqkXx9wZIMV7f677FPQcfhSth+YppGVQtYAES9Oy5K0ThJZwO3+kb1m2i0k0mWKBqoo/8Orks7bFVwzh/tWOzMi+12wbneHiEFALkDRYsRfdL4hq+MNW2ZaJtzgxha4t52qV+Pebn6l1+mhbl9D4sxVkJQHc6ZlJwF1uA== 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=W2tWy5kxwOmE8Z2wFPJZdCsRPw6lxbt7ejpBm5kqUhA=; b=E5dzPowDwy5PQ+xx62IWeaPzzi0n0ZSKu5/FW2WRGND07j9EMCidab9BEhTo7IocSh7xXcxtPdcNltjvxgN/Iwd/AZ3f5QHy52X+ZT203iZ1WXQv+p31dm3+C0dLQbujuJdnsgsLRzUTtLYUrCvta/2RRrSle6zTc9qrayEE/C5I/GjLnLwuJEfXjdBjJIYqI7hlW6i2UCoJSuzqJqKGtlyCBEJiGa39EK2+hG6Xn5BhVOgv8xfmnAp5hMHz7RjP3F9DOlibib2kIw7PKgEMFms61YW8QQxXdSa+SFFJ60ntH8dD8CK2IgGKuQvyyHg394qiwNWxDOlFah4NE/Qyrw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <69304929-de84-04db-04f2-8faffc12ef0f@suse.com> Date: Wed, 22 Mar 2023 10:33:46 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 07/16] 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: In-Reply-To: X-ClientProxiedBy: FR3P281CA0109.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::9) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AS8PR04MB7526:EE_ X-MS-Office365-Filtering-Correlation-Id: bc923ac5-cb9b-48bf-99fb-08db2ab889c1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EysTtd/3pgeo1ZYoLYIwHcoO04x5hn8AIzocWZI2rvxSmh1c0J1Flf1abOO/3zymQIEmf89QLX92NTbM61NnZA44qusu/KomDz+tHe8dqW6A1dzlVJVKdvluPWGqbJNGVa+KxSBZW632rkSAoZ6QfS2yuyOETRJ8Na+Y3/AGlFbltDYqnhaXE0sLshFU7fo3MVttK+8nNNFYjS5b/JcMDNhTiuFu12A3UCFsH5Z2RNVRajEf/5T+VR3UKP6iunb8nxG5i3cCWrOMH6qfVo9yTarRSFq3Ab6xdNAINVL3zauk2hST2aRD+Xzy/TCoD/9bsVT4pfAdCJMjMpcUFks7orS6anMPstxdbfomXluC9rvhakNSxrBez5rS4+d1ZGmyYGBAOGDKxI72h9yXxR27QE70UV8smPTtdDmw25xDHNTG2/UjTFaEMwoG9rlJiiHVR7DnqbXf+J6P0bQ4UbBNUuRbF2i3dvTFuroyqX3XfK1Myp0jQsT2qgg2rhofgqs4a/8DmDO6CCWjKMDi5IZa75CgEuvPFy7XzQYSbM+pis1qMrEUMnLccR++1b4I0jjuuSIvA620YpcOhcPruko4XDHTT6qMzBHSaDuxN21AzqdXOx1GSP7sv6vJIXNM5yGfxu1SmTTTaf1uT3JitnROfDwaYh6wmexa/HMGFANlXKYYgVBMIvgI5fqdjPCXcN5yf24iimCK84Cg6DIziuQJbXSm5O2ZhCgpf8nj4kT30OM= 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:(13230025)(366004)(346002)(39860400002)(396003)(376002)(136003)(451199018)(5660300002)(41300700001)(86362001)(38100700002)(8936002)(31696002)(36756003)(2906002)(4326008)(6486002)(83380400001)(478600001)(2616005)(186003)(6512007)(26005)(6506007)(54906003)(8676002)(31686004)(316002)(66946007)(66556008)(66476007)(6916009)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?yAEHiO56Lr2kEgNlDIBQUzsfvlf2?= =?utf-8?q?lvvM+q+lGMRiuFG+tVWwh6339wO89PHrWs+lDsdQV1DMdstAHJ7NPmviOjNI6L5D7?= =?utf-8?q?dMYGmGYgbOLeCxPvMqtkxu5K+3cHlU5pJNIr9QWF2YHzD5TbdVImzX5mi9RXwzNFG?= =?utf-8?q?qf8guHIh+sUrFC/bkN1MVe2lV0q8GSaT27LbJb4RipoPGFUTyFn3ZKtEC8xlbsXsH?= =?utf-8?q?4XtvsTsLWaVGZEehjn+BVZH3LlYry0c67W5ckgmjO9VgOCmTd4blbvdLl1jaSHLlN?= =?utf-8?q?HqOllhZRRWiBmLsm1ZWXSxLz/BXN4neb0HVnYohQGaD5CE1C5h16/8/Wb28/ITptJ?= =?utf-8?q?klm6WGzv1n1jkNbLE+T40O2xY2cg5rUREyndiSli/QPIADbdnJtB+kbQaGdifDsW/?= =?utf-8?q?rComZZEizJoGZLfOh1hnTXe3kbC30YFCCkfbIZyttZ2LmiXnfXJex6HOjUE6Nh8ED?= =?utf-8?q?TKSrbB5/Hg9W3iYoxxd6+xcpBEBib3eRLjxtCsboHWGXGRXlx+ZxqSfuNHPUmEH23?= =?utf-8?q?qMnlOnHCUM/sRLufzwAwWh+bUdsfL0B5gxHW/Lt6dA5QFSH/ouQaaZY2OURYAaD9o?= =?utf-8?q?a6nQFJvnC0kychynFwuW/Ml5uXY4kdhbkrUKRufoAxT6gz+3nKsAs8givNtypG3B4?= =?utf-8?q?CSOqui6rZh0gKPFRgdhHryMFYFAn3X/XfBwSjXanspsqc39dmm2ATHGwerpXW7U1O?= =?utf-8?q?rPwM6WWosmLaBjHzl1D+4UOiYpOQ3qadvq7fi+Vt4dUBmczlul8s5uHUbMFrct4aP?= =?utf-8?q?yZxsZLyClBdluKwFgSOYMkM19mUZaRJ/Iq5ul1rqALn1QVlxFAoCK/3iJW/K2iZn1?= =?utf-8?q?ZFQTIftRwVslujHq5CiqIlmeRGkA6HQc6/9yv6jwGVbYquWYxIsgwdfuTSoQ8/c8K?= =?utf-8?q?clBwl3mm3AItqtHhlfp40DWHeYv2SsMi8S6TW1hRMs8494qPh+EYWgOHXE8UuhlqJ?= =?utf-8?q?fvCOD0Nrj+e3awgubPRJR596J/xOumyxB86QM1n2RdlfNOc9/o/i75tHGBAB5E7pz?= =?utf-8?q?QcwbbV7AKAgEPCS0cwIz/KUUHpHK5skF3qkTIRNKYVIxDIeVk6VV04iO4YMgozqfJ?= =?utf-8?q?4ayYPSRReUzAE/ObUxZIt1IHn7j4YWlQ1GBHtYHlQHXgQSGvDh40aAfJQiodiX2Hp?= =?utf-8?q?CyAbaJXtKhrqKRI0oXTawmJaG5UgxBK8bxwD3iEQI2EsAorw5VRDdsrrg+IP75ipj?= =?utf-8?q?YZD1KkmJ6AO6ArfcNH0YesQRbgmQoIJXhjSVSXmRHRolJp1GWtbKavGXPFG/a/glP?= =?utf-8?q?jPMzhpQXHdnTYrduYztO6b98pkw8mOf+XargRt9fUIFZHLurdiT2i9AsOifZLlVBR?= =?utf-8?q?ylSm2g89OqUSrzQ6SWpbSdOWClgXpTGrYfdZxDRQ4FaSD78H5ly0gRFi1HC6uKXRx?= =?utf-8?q?YQUlftkQJrxX5Q0xSHj2t3i2rtAWZvCLh5N/2dgIFaHNpxMv/aBdLUIVwDIlkx02q?= =?utf-8?q?E9GABlLQFF/zZnvgyomuHz6p0tJUGvgFv+XhOm0shG7ZfnKK3jdXPgLdfmttPkGRQ?= =?utf-8?q?glTJWaSQVQnM?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: bc923ac5-cb9b-48bf-99fb-08db2ab889c1 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:33:47.7978 (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: JReScfU8v4w5d6SKwFoG+32g/OMulO4ZyH77TdSbXvcEoqAEd3D8DoWleNB/quWDJxswgmiVlrLbf4JpYHJupw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7526 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.) In any event emitting a TRC_SHADOW_DOMF_DYING trace record in this case looks wrong. 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 @@ -91,6 +91,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) { @@ -2487,7 +2489,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 From patchwork Wed Mar 22 09:34: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: 13183752 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 5167CC6FD1C for ; Wed, 22 Mar 2023 09:34:41 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513236.793962 (Exim 4.92) (envelope-from ) id 1peurZ-0001Gg-1B; Wed, 22 Mar 2023 09:34:33 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513236.793962; Wed, 22 Mar 2023 09:34:33 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peurY-0001GZ-Ui; Wed, 22 Mar 2023 09:34:32 +0000 Received: by outflank-mailman (input) for mailman id 513236; Wed, 22 Mar 2023 09:34:31 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peurX-0001G9-4Z for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:34:31 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on061b.outbound.protection.outlook.com [2a01:111:f400:fe0d::61b]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id bdef27e1-c894-11ed-b464-930f4c7d94ae; Wed, 22 Mar 2023 10:34:28 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DBBPR04MB7641.eurprd04.prod.outlook.com (2603:10a6:10:1f7::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:34:26 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:34:26 +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: bdef27e1-c894-11ed-b464-930f4c7d94ae ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nB1rdSMjRWbfJ9Tq4KcEdHNxG1vJdaUwKNfmSWU6lgTMjpm728RUY508VUrkdCyjYVqCPbFP8U8Jp0DWtX6CSXmje5gBpQHuakJiTlfQZhC9rl+TS/IxCYS9rPmJjcMScMbj8VzYmsEHdQK3dc+W+pK8T9oDn1oPe/BqjTN3fcbg+saSSihqabpsoqUZCUv8gSWUwfNkVb3aTEdF1D1ucB+dAFVrOphdGD6vSrPzO7kFV++JTnsgCVsqJstcBndZMOGd4VPoE4unPRtMQezuiUIJAwZ0ONa6YtchU1BamHxpOBGShp5oaoOeSnflceUzDU4iBj2ML3WwYLbX3x2qdA== 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=zOioC5uNa4Km0yn/dxAqSgbeWC2euhJVdbHwfnx0gMM=; b=Zsd/CuAtsBvgn6y/Ol8A/aeKQHFxDYVHJux7eU7Cp46XWa7re9w4jzhfbV2moNGy47bLf1Lko8M0KrWKgiou/oNCJ6l1znBICqDOzqvINfEcKMVSTku5E8ARhQQdgXHQNOnJxHXbOxNcQRCFcLUfHViSeN3hHRJIQ9pU2Wpj6bexesu0eWFbs7/py5dS2oPDZZZLwDSMhMEbu6757JMNSawGARBF/RW2mZAgdmj8517Fk8rWoT1OxLg65DR5TNXQWe3GKIUMdNS1r1zWXhgJfSf8wRCQqwiipOz57vByZbBJt3Q+5glsezddezHJfTBOuMwb+ztZMQ7paQPfZi+Z0g== 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=zOioC5uNa4Km0yn/dxAqSgbeWC2euhJVdbHwfnx0gMM=; b=KS09LREAg/US/eJ2Xkraqho0yoopHbOWoNfjTaYiB/ro4tT5biSDSaZJGA+tir7SP0hIn57CwKfr7KW9dMz33sLFMzJtk/ntwbhlpsFr1pPbaQmC15bd0RtPXdEtRTNHD0/rf7eDqKgNi8g4vdYJdBZGGL8nHmybUmZrWJSJIKBABtyI6jFH+V13H3uIIpPwex7VdOBWmDWLBFn0AQ0QagjH8Ft1cHF0HekQp+MMfiDiUBgQKNdI7CPoN9ULqwSceeL22hvZ55ROSw+I8meCth0jZ9Uusjcd/2NynF1kEVG6ET5wUU+c1eOtjyUQaohbUiULzaLF8nRZpfoQbVu7eg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Wed, 22 Mar 2023 10:34:25 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 08/16] x86/shadow: use lighter weight mode checks 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: In-Reply-To: X-ClientProxiedBy: FR3P281CA0116.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a3::20) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DBBPR04MB7641:EE_ X-MS-Office365-Filtering-Correlation-Id: 70f5857f-b202-43c0-040b-08db2ab8a0f9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EPDLJYrIFi+yc21pV/95KYr55J9Q1Ei1HLJHq6qAirhsDhWOkhtcAqqVHufjIFcQ19oXlbitvLE70tkn5R0G5jwrdPHypNwLT57VMb53nhS3W9LS7IT7Y3Wk6Kxp2d8U1QBmvRYU7IbhQ5q+jrot9fcBWmUMVL7tp0MOMOxcVYm63o98UHaReZI49uIWuCF8HVhGY02B5gO9B1nGw8BzzkObJ6jyCrxhtYuPjhwBIuSKHPRkQZCBsNt0BfXklpgy+/lqKGB4IYAENJNlAlWZS04xKW7n69D6UvNS2MnXFxpKeL5mM/cI/EHy2pnPiXratDzqc2C0Fg5yi/7yRRzEm7YLLcf1X/TSZ96lGVA9FmSW+uZWwnlu93mS6odeltWdSEvCpG0yUc//diV2sxDuYApGCt/WzUXA69XROhESmLIh9/wV6q8xlYLjGsrK3MsPEPv6crFx7l5Ta3LId6JRPTk93f7GnKI4/7BVIWYpfYeEKgf/nzrlJGbq8ALlSj5XhSNAuMp4Q9eS/u+vEtsxgMVTBHC/IPu6lUkveAyNG1hu9waf5l+ui0TYPBGlTZMtcgRNKLvWthfJtd04j0dkW9dQcY4dpgDMJgOOe0poqSt23/x5m0+UgaHsO+pWmVaUP69CHpPKyNWA9/33Hcj9ZU2mEafyHZqDzSmsq1dwazqADMuqb9AGwZ3IkmeR9ozyTeZlJ1605hsXXxkkTfy+3juyMVQu7zYnhmjOYW7eppd5GJJPCkUNNA5uu3+3tVGrHsNmdd6y+6lsi6Im6OKI1cDX+jx1EtUvYACS8trzE/l560R9Xjvs8h3T+kaabJqTRSyGzAfDSPVYlgQQOdNidQ== 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:(13230025)(346002)(396003)(376002)(39860400002)(136003)(366004)(451199018)(86362001)(31696002)(36756003)(38100700002)(83380400001)(8676002)(4326008)(316002)(478600001)(54906003)(66946007)(66476007)(6916009)(2616005)(6512007)(6506007)(66556008)(6486002)(31686004)(26005)(186003)(66899018)(5660300002)(8936002)(41300700001)(2906002)(16393002)(45980500001)(43740500002)(473944003)(414714003)(357404004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?kAc3h57026HBHy/XMEkmu3W67Jw0?= =?utf-8?q?R2qn93qkniFR9gCBZ7ywfDIj5wOd8HHQh867X6NKNtxyQ5i4t4MXSmeiQ2qORoQtz?= =?utf-8?q?CIKrUNK4/OpYTZKJ+OF5fCBkxEd9cDZDiAV8gsdhbYoB2zGMSKTzbW4R245Z+2xlk?= =?utf-8?q?yniIpKvlG+hS5L7WjV52r+pToYD4z7bNYvJdgw2pbtgqqgXo6b4hyeyOu/tCx9QYV?= =?utf-8?q?x9MH4CMcMl6ksmydXQ7l8O0fM4UBRnrjUY6srif42OOm950bBjOqcLKbMu0dV7y2v?= =?utf-8?q?ab5Jbk3dENTGyqlGoDZscfXD3KoekNEQHS0VKWL8TM3cYw6tVpIAcPNGb51AcS8Wy?= =?utf-8?q?QtoiYL1M85gmQpiN0z/USSo9rAOJnmxXF2WHNdBc4L+ChncAPdjBX6YBB92emPzCW?= =?utf-8?q?sgj09jVSojp2rbZFhR3JOlI7+7mN9MsCx6bDfBiBa3U9mm8YfA9Bmr+un1mCMuYt/?= =?utf-8?q?YRmQa4k+JA0HEw/DQUZk0coA/Z6ja5WMbhpp3H1Ornl3yvfd0miKcedVFnZ62JXUj?= =?utf-8?q?g8dJof1qTKZ0wSWJuZMeNMCyWOUDcxTEGtIGlJ57B0bIAKvoIOTmS6S05mcBQxffY?= =?utf-8?q?45Cgw5PAi6JbsliaS5y3CxoIeEnDKPwqTnBxxegglGtxt2w58wHT1+ONDdF9QNWk2?= =?utf-8?q?NqNMs1PjTXJ+Zz6BbggFcugHrGme2/HRoFq953kH2cuaUSQcpIApB7JKP+jU0YRFv?= =?utf-8?q?hR2rqClV15GQ5MnqrADpX/n0AhVy69vW6OAYEtOQCLDsxukrg7pKDBtcCO00OwCNO?= =?utf-8?q?jKsXXyLUxCMN4j/ZS0zuJ8Pj+Ct2mY8atoGtRxElT2K/fvaXcZyFcmDPYN6Qc9LkO?= =?utf-8?q?5Kitdj7YRUwc1cLT1h/zcF913EK7oVoam+O73aBez0ZYP/g0p0dnbmlYg27JS0UEH?= =?utf-8?q?7FMwn6WWhL51NXTot2jFM58+oacK9Eg2e459OkWYKBoyAYh5CkhoOX36LhlAphaFI?= =?utf-8?q?DkifB9c03ams4DlYQr4LIGjpZmExn0MZwBjaJNfCvPlKZJt3cgGT7vsmicVyghAc9?= =?utf-8?q?TQAN5vOVuzHuxz+3CpfbLdJOmRmlE3EtGNLMbk847hsNgS7bPeFoLecfHzixUcFL1?= =?utf-8?q?Ti3d01hZaWfqmr8BxJZPQ1/OfL0tju5KaIJj/apkPp+JSrvgePmy0W8o3KLTJA79e?= =?utf-8?q?Ew5cNxmfIVk1vYi4q+vSg9XRSxADJN2QtuJYMxvnXQWqhwnBoCoFL9ifGu2kHHv3T?= =?utf-8?q?muvyFFJjWKbttlc7kUdmopoiG3I+5oA07hd8CXZxrIas8XCb5gwYnQ+mI1sBaAlef?= =?utf-8?q?8JnECjOSxmS9ymQsLM7FyG6GVY039W012+o72tNw88zXyxWhs0/7smVi0pwGP041G?= =?utf-8?q?ooOZBARdt/pA1pAW9dPb0mpG6SzScP5hnjbOyff0+6cY/D5qaTbPk9MD1OE4+sjHZ?= =?utf-8?q?JqpSdccGXeCWm2GuM5r2l+P9OSecD2NPHmzYCm9UcoD7SrqrZDyQ2iC7QxEgH9drC?= =?utf-8?q?9fpM5cvQLFClRPxn4J8w+0m0kh0ZV3qdQWAZsqYKFLclGj3fRl2QDD3Df9S1JiGHl?= =?utf-8?q?Tgt7k+wQAsqK?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 70f5857f-b202-43c0-040b-08db2ab8a0f9 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:34:26.7330 (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: Ni0IRATFXo1A6wYlmSojoQHMrDbHvBD/N0FVXG7crMBWNhnsFArzB45Jo8Xr7nGBdOu/rYPAEZ7fUZKUnXj/7g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB7641 shadow_mode_...(), with the exception of shadow_mode_enabled(), are shorthands for shadow_mode_enabled() && paging_mode_...(). While potentially useful outside of shadow-internal functions, when we already know that we're dealing with a domain in shadow mode, the "paging" checks are sufficient and cheaper. While the "shadow" ones commonly translate to a MOV/AND/CMP/Jcc sequence, the "paging" ones typically resolve to just TEST+Jcc. Signed-off-by: Jan Beulich --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1858,7 +1858,7 @@ int sh_remove_write_access(struct domain * In guest refcounting, we trust Xen to already be restricting * all the writes to the guest page tables, so we do not need to * do more. */ - if ( !shadow_mode_refcounts(d) ) + if ( !paging_mode_refcounts(d) ) return 0; /* Early exit if it's already a pagetable, or otherwise not writeable */ @@ -2090,7 +2090,7 @@ int sh_remove_all_mappings(struct domain * guest pages with an extra reference taken by * prepare_ring_for_helper(). */ - if ( !(shadow_mode_external(d) + if ( !(paging_mode_external(d) && (page->count_info & PGC_count_mask) <= 3 && ((page->u.inuse.type_info & PGT_count_mask) == (is_special_page(page) || @@ -2387,8 +2387,8 @@ static void sh_update_paging_modes(struc { const struct paging_mode *old_mode = v->arch.paging.mode; - ASSERT(shadow_mode_translate(d)); - ASSERT(shadow_mode_external(d)); + ASSERT(paging_mode_translate(d)); + ASSERT(paging_mode_external(d)); #if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) /* Need to resync all our pages now, because if a page goes out @@ -2775,7 +2775,7 @@ void shadow_vcpu_teardown(struct vcpu *v sh_detach_old_tables(v); #ifdef CONFIG_HVM - if ( shadow_mode_external(d) ) + if ( paging_mode_external(d) ) { mfn_t mfn = pagetable_get_mfn(v->arch.hvm.monitor_table); --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -526,7 +526,7 @@ _sh_propagate(struct vcpu *v, || (level == 1 && page_get_owner(mfn_to_page(target_mfn)) == dom_io); if ( mmio_mfn - && !(level == 1 && (!shadow_mode_refcounts(d) + && !(level == 1 && (!paging_mode_refcounts(d) || p2mt == p2m_mmio_direct)) ) { ASSERT((ft == ft_prefetch)); @@ -543,7 +543,7 @@ _sh_propagate(struct vcpu *v, _PAGE_RW | _PAGE_PRESENT); if ( guest_nx_enabled(v) ) pass_thru_flags |= _PAGE_NX_BIT; - if ( level == 1 && !shadow_mode_refcounts(d) && mmio_mfn ) + if ( level == 1 && !paging_mode_refcounts(d) && mmio_mfn ) pass_thru_flags |= PAGE_CACHE_ATTRS; sflags = gflags & pass_thru_flags; @@ -663,7 +663,7 @@ _sh_propagate(struct vcpu *v, * (We handle log-dirty entirely inside the shadow code, without using the * p2m_ram_logdirty p2m type: only HAP uses that.) */ - if ( level == 1 && unlikely(shadow_mode_log_dirty(d)) && !mmio_mfn ) + if ( level == 1 && unlikely(paging_mode_log_dirty(d)) && !mmio_mfn ) { if ( ft & FETCH_TYPE_WRITE ) paging_mark_dirty(d, target_mfn); @@ -819,7 +819,7 @@ do { #define SHADOW_FOREACH_L2E(_sl2mfn, _sl2e, _gl2p, _done, _dom, _code) \ do { \ int _i, _j; \ - ASSERT(shadow_mode_external(_dom)); \ + ASSERT(paging_mode_external(_dom)); \ ASSERT(mfn_to_page(_sl2mfn)->u.sh.type == SH_type_l2_32_shadow); \ for ( _j = 0; _j < 4; _j++ ) \ { \ @@ -845,7 +845,7 @@ do { do { \ int _i; \ shadow_l2e_t *_sp = map_domain_page((_sl2mfn)); \ - ASSERT(shadow_mode_external(_dom)); \ + ASSERT(paging_mode_external(_dom)); \ ASSERT(mfn_to_page(_sl2mfn)->u.sh.type == SH_type_l2_pae_shadow); \ for ( _i = 0; _i < SHADOW_L2_PAGETABLE_ENTRIES; _i++ ) \ { \ @@ -866,7 +866,7 @@ do { unsigned int _i, _end = SHADOW_L2_PAGETABLE_ENTRIES; \ shadow_l2e_t *_sp = map_domain_page((_sl2mfn)); \ ASSERT_VALID_L2(mfn_to_page(_sl2mfn)->u.sh.type); \ - if ( is_pv_32bit_domain(_dom) /* implies !shadow_mode_external */ && \ + if ( is_pv_32bit_domain(_dom) /* implies !paging_mode_external */ && \ mfn_to_page(_sl2mfn)->u.sh.type != SH_type_l2_64_shadow ) \ _end = COMPAT_L2_PAGETABLE_FIRST_XEN_SLOT(_dom); \ for ( _i = 0; _i < _end; ++_i ) \ @@ -908,7 +908,7 @@ do { #define SHADOW_FOREACH_L4E(_sl4mfn, _sl4e, _gl4p, _done, _dom, _code) \ do { \ shadow_l4e_t *_sp = map_domain_page((_sl4mfn)); \ - int _xen = !shadow_mode_external(_dom); \ + int _xen = !paging_mode_external(_dom); \ int _i; \ ASSERT(mfn_to_page(_sl4mfn)->u.sh.type == SH_type_l4_64_shadow);\ for ( _i = 0; _i < SHADOW_L4_PAGETABLE_ENTRIES; _i++ ) \ @@ -977,7 +977,7 @@ sh_make_shadow(struct vcpu *v, mfn_t gmf #endif // Create the Xen mappings... - if ( !shadow_mode_external(d) ) + if ( !paging_mode_external(d) ) { switch (shadow_type) { @@ -1379,7 +1379,7 @@ void sh_destroy_l1_shadow(struct domain shadow_demote(d, gmfn, t); } - if ( shadow_mode_refcounts(d) ) + if ( paging_mode_refcounts(d) ) { /* Decrement refcounts of all the old entries */ mfn_t sl1mfn = smfn; @@ -1476,7 +1476,7 @@ static int cf_check validate_gl4e( l4e_propagate_from_guest(v, new_gl4e, sl3mfn, &new_sl4e, ft_prefetch); // check for updates to xen reserved slots - if ( !shadow_mode_external(d) ) + if ( !paging_mode_external(d) ) { int shadow_index = (((unsigned long)sl4p & ~PAGE_MASK) / sizeof(shadow_l4e_t)); @@ -2399,7 +2399,7 @@ static int cf_check sh_page_fault( gfn = guest_walk_to_gfn(&gw); gmfn = get_gfn(d, gfn, &p2mt); - if ( shadow_mode_refcounts(d) && + if ( paging_mode_refcounts(d) && ((!p2m_is_valid(p2mt) && !p2m_is_grant(p2mt)) || (!p2m_is_mmio(p2mt) && !mfn_valid(gmfn))) ) { @@ -2623,7 +2623,7 @@ static int cf_check sh_page_fault( return EXCRET_fault_fixed; emulate: - if ( !shadow_mode_refcounts(d) ) + if ( !paging_mode_refcounts(d) ) goto not_a_shadow_fault; #ifdef CONFIG_HVM @@ -3067,7 +3067,7 @@ sh_update_linear_entries(struct vcpu *v) */ /* Don't try to update the monitor table if it doesn't exist */ - if ( !shadow_mode_external(d) || + if ( !paging_mode_external(d) || pagetable_get_pfn(v->arch.hvm.monitor_table) == 0 ) return; @@ -3216,7 +3216,7 @@ static void cf_check sh_update_cr3(struc /* Double-check that the HVM code has sent us a sane guest_table */ if ( is_hvm_domain(d) ) { - ASSERT(shadow_mode_external(d)); + ASSERT(paging_mode_external(d)); if ( hvm_paging_enabled(v) ) ASSERT(pagetable_get_pfn(v->arch.guest_table)); else @@ -3241,7 +3241,7 @@ static void cf_check sh_update_cr3(struc * table. We cache the current state of that table and shadow that, * until the next CR3 write makes us refresh our cache. */ - ASSERT(shadow_mode_external(d)); + ASSERT(paging_mode_external(d)); /* * Find where in the page the l3 table is, but ignore the low 2 bits of @@ -3272,7 +3272,7 @@ static void cf_check sh_update_cr3(struc ASSERT(d->is_dying || d->is_shutting_down); return; } - if ( !shadow_mode_external(d) && !is_pv_32bit_domain(d) ) + if ( !paging_mode_external(d) && !is_pv_32bit_domain(d) ) { mfn_t smfn = pagetable_get_mfn(v->arch.paging.shadow.shadow_table[0]); @@ -3366,7 +3366,7 @@ static void cf_check sh_update_cr3(struc /// /// v->arch.cr3 /// - if ( shadow_mode_external(d) ) + if ( paging_mode_external(d) ) { make_cr3(v, pagetable_get_mfn(v->arch.hvm.monitor_table)); } @@ -3383,7 +3383,7 @@ static void cf_check sh_update_cr3(struc /// /// v->arch.hvm.hw_cr[3] /// - if ( shadow_mode_external(d) ) + if ( paging_mode_external(d) ) { ASSERT(is_hvm_domain(d)); #if SHADOW_PAGING_LEVELS == 3 --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -423,7 +423,7 @@ static inline int sh_remove_write_access unsigned int level, unsigned long fault_addr) { - ASSERT(!shadow_mode_refcounts(d)); + ASSERT(!paging_mode_refcounts(d)); return 0; } #endif @@ -536,8 +536,8 @@ sh_mfn_is_a_page_table(mfn_t gmfn) return 0; owner = page_get_owner(page); - if ( owner && shadow_mode_refcounts(owner) - && (page->count_info & PGC_shadowed_pt) ) + if ( owner && paging_mode_refcounts(owner) && + (page->count_info & PGC_shadowed_pt) ) return 1; type_info = page->u.inuse.type_info & PGT_type_mask; --- a/xen/arch/x86/mm/shadow/set.c +++ b/xen/arch/x86/mm/shadow/set.c @@ -93,7 +93,7 @@ shadow_get_page_from_l1e(shadow_l1e_t sl struct domain *owner = NULL; ASSERT(!sh_l1e_is_magic(sl1e)); - ASSERT(shadow_mode_refcounts(d)); + ASSERT(paging_mode_refcounts(d)); if ( mfn_valid(mfn) ) { @@ -354,7 +354,7 @@ int shadow_set_l1e(struct domain *d, sha !sh_l1e_is_magic(new_sl1e) ) { /* About to install a new reference */ - if ( shadow_mode_refcounts(d) ) + if ( paging_mode_refcounts(d) ) { #define PAGE_FLIPPABLE (_PAGE_RW | _PAGE_PWT | _PAGE_PCD | _PAGE_PAT) int rc; @@ -387,7 +387,7 @@ int shadow_set_l1e(struct domain *d, sha old_sl1f = shadow_l1e_get_flags(old_sl1e); if ( (old_sl1f & _PAGE_PRESENT) && !sh_l1e_is_magic(old_sl1e) && - shadow_mode_refcounts(d) ) + paging_mode_refcounts(d) ) { /* * We lost a reference to an old mfn. --- a/xen/arch/x86/mm/shadow/types.h +++ b/xen/arch/x86/mm/shadow/types.h @@ -274,7 +274,7 @@ int shadow_set_l4e(struct domain *d, sha static void inline shadow_put_page_from_l1e(shadow_l1e_t sl1e, struct domain *d) { - if ( !shadow_mode_refcounts(d) ) + if ( !paging_mode_refcounts(d) ) return; put_page_from_l1e(sl1e, d); From patchwork Wed Mar 22 09:34:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183753 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 B760CC6FD1C for ; Wed, 22 Mar 2023 09:34:58 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513240.793972 (Exim 4.92) (envelope-from ) id 1peurs-0001nY-Hz; Wed, 22 Mar 2023 09:34:52 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513240.793972; Wed, 22 Mar 2023 09:34:52 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peurs-0001nR-EN; Wed, 22 Mar 2023 09:34:52 +0000 Received: by outflank-mailman (input) for mailman id 513240; Wed, 22 Mar 2023 09:34:51 +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 1peurr-0001jq-9y for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:34:51 +0000 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on20627.outbound.protection.outlook.com [2a01:111:f400:fe12::627]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id cb2f0d87-c894-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:34:50 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DBBPR04MB7641.eurprd04.prod.outlook.com (2603:10a6:10:1f7::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:34:49 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:34:49 +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: cb2f0d87-c894-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GzYn7u7jE7n29tL43bAzrSBpEsPirlfXIsPl4jqTOVoHcvieP55CPq1X2yy19Gigpc7lBRN00S4pZudf9aE3C0IWSrViO9byQTMn9YAYlyYEblVMvHy5TVytJoBxp6ABEvsiCIze4hnnY464kyWGN2/ESejlxAiHartlammnyJyVpZ4JpO3Mjk2a0pwLcETDmrV3FJ4jP3Zz9MN2pZlp/QG4elLffpYIdpkxR0rHFMtaYEqyMWBKupVLKbkY7nZPpMNOeb5zuiRtAmxdVfvgM0dUPMIVpRw+DpRqD4dmj1QCXUWh/qQLF7b0zmG9oLkNaSQTDIg0ZJ9PMgz1fVf1rQ== 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=gkGMlC/+N8HGbxMcyzYdjQkp7gUnDHpUJFPBpXV55Gk=; b=ev/XQKsgQ0RJgOfW1E5t/wCT9Cn5sdo5NGdd2fwGvcFzhlipJiaaInUaIgR5cQVXWV/4UmQbR8tH4/tnPwPSvSBuEwP5HHeCF6VqlqK2pbl/W/uneKlrjPym1HnoA323JGDEslyufcOd1xPgdmcx1q+zB+TPjfTqj7PVkHFl95witN2ZBkQTkoCKhYeKJtKxHdVH1wqYVQMzd8ahl5lVr4jtQ0uONTzPnZMGOGssIWKxETRq0BO3AcTN0ECbV06FhGAC9n+StVLWmHZYp/gAXSkAX+sw0RIwrn7IhcllAweLJHUy3FiGb0jgoScjNM6cR8OkDeQWExPpr39McsqLlQ== 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=gkGMlC/+N8HGbxMcyzYdjQkp7gUnDHpUJFPBpXV55Gk=; b=gIBQ13784HMj5UFWpzjPpRay5PEqYh/TfCYvXfvCOZUhnLZ7NhgTG7weQW5JuntVP3skzHWhA7pkQFNla2NeDapVrCdEHAnqyZ3Wvx8KP/g/1ZwxmZrxD6uQdZfmw6UMfUpIZNImjXtAhDIE7nWHX+1VNGGiopaw2Cd0eHVSWfmdJCOVicZykAOav2Sfk5/c+CUL1DJudNoaPWB9th2RknrDhtB2gRWCE8njYQi/Ei3aOjMshzvphqV5eQOOMxXtnghKgv+Nl+M6uHAmloKrPHunW20YIwJ9QwTKQBl8SFXmxfWFNGLgp7K03pWuQTAD5/SAAW5dEwyFjMnyxln9kg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <49ba3172-3b8a-4c0e-5413-bf58b66c82b1@suse.com> Date: Wed, 22 Mar 2023 10:34:47 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 09/16] x86/shadow: OOS mode is HVM-only 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: In-Reply-To: X-ClientProxiedBy: FR0P281CA0108.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a8::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_|DBBPR04MB7641:EE_ X-MS-Office365-Filtering-Correlation-Id: 5a8eb48b-542f-465f-a8f9-08db2ab8ae40 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: siIH2bjWrjk6ZBxTo93vS/vqwOz5NUsaX/pUhkRdXmYX2Qa10W3ZZSLgQXlyJ6zbSsAb8ZEGxz3McA0BdWW8LQ1435kwf/4QXIuMbtPx4aOIQ/zdr4+lii4K5y43iPSJ2jgJovcdqUMW25ZL39QhLZcyHkzYS9oiREfhKMoRzAF/MuhoDgIkmKs5xt2g4JhJA8v8YrGudV0EbQMDm9OpkdXKeQ+gP51uujNOTTKoaKrjHx2889pHpBx2e5NiQmu7XSwwGxaGmIR1PYbRK6D3tePgGCsWxX2b6KOWssQoBf2PHUJC3xXUNX4SgEKCWPwaezUrghDfsNUz0h71AM0z+AgWMjyni+WMAJo0GW65DDaN7x5+niHRyzTtW74sQA35PvKYby+Wrp/lf3nO5TlNDcX4h35TngxA4JCRZXYZzcsuD6aLLrkyg286dEnHmHRe7RIwxfgcGezeWExHMkZlxiwyaLJeDxogHGHjSSG4818/I6zU+H7eczHvTOlZUsIH9HiAx2VhqmybxD82pR/bOE6V4mJkV0hQ7cZ2p9TYrbD56ryEz31usXAodAZabt9gYsaeUQZqv3YlpLEN5pgRG123mfLS0wV0/rO2tXCBd6NYmEf+RFUJtwWg9YvhY6pTcFWCks1A0vw10Ms4cdeayUjLL3+lVUXxS4CxL+SopedpdGO/ojfYitD+YI/Ynk6WER97g1h8CQ0T96EHW78NujBQZYVFLKmkRV1nAO86Jac= 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:(13230025)(346002)(396003)(376002)(39860400002)(136003)(366004)(451199018)(86362001)(31696002)(36756003)(38100700002)(83380400001)(8676002)(4326008)(316002)(478600001)(54906003)(66946007)(66476007)(6916009)(2616005)(6512007)(6506007)(66556008)(6486002)(31686004)(26005)(186003)(5660300002)(8936002)(41300700001)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?V07VKv/aYK5bVCM2qnDOuEp9bBRU?= =?utf-8?q?jFIpgMSzd2VH7vOHDklmr1VbHFE03qZfbrR/fc1jqk4x7vRiAJt2sBz32iewz2uzC?= =?utf-8?q?s7H4zA2jodC1gEIDBkMzMtZF6U9LaHPQ7CgT1C8I5X+E3EDCnO7wcQ7sUic+t3tVB?= =?utf-8?q?6OQf2J14mtj0LIlRwC9mlCBCATwvwGSacNnkcQhRdyKe5zfQGqHZ5w+dhYU71WoEB?= =?utf-8?q?PkqKE5huAbqKCaGDlQLvPxp4w6XIQJfvUat9J/4qi590pqeUoco6Ug+JXeqQc3G+v?= =?utf-8?q?NlUj3tmtKErGgwlPMR25BanK8I9WEa4TnMPRzjsySEIKxPPiPqs3xTkc6uVqsce/+?= =?utf-8?q?pxNv3uKBLsaS8XGOx/IqiyaIgXGENh1WpR67MEZ/eCm1c5Tp/3E7nuqtQb2wr8UGn?= =?utf-8?q?QtOexk0WDU55AlOqXuC2r5Yq91GINuMiq8ibC4w4C0Tb0nG1A1Mz/peLSPBl7WtyJ?= =?utf-8?q?GOtAEAaXm98WC0g+Fn1GqZnYju/ZlkeF03CKQgzv4GVn9XDg5BN67rLGOXth6niDd?= =?utf-8?q?J6m1AGLSFdAUyMOU9RuPZrEV+DHfHIu//zGozPEw9thMoUVDY3Vjxc8sw1nRCS2nu?= =?utf-8?q?hIh/YZn5jtFSMo9rCNG53Lw5Sz+A+XtXDgCNnW19QqRGJV07CjTURLdGRSFghAjGa?= =?utf-8?q?3EHY5XKye4dTQquy9pv/zRP7tPk1ZnYrUoNfEobt6KNiWpoAqr/SmmhapxmQfqWii?= =?utf-8?q?XP4KdPnG8V5c2OPvkvbdeP50TLl3295AXCckhqkjVHMC/tit7ZINyfvePUs++vIfY?= =?utf-8?q?ealldWXsif66rW9UqxYDjbAI45tqVvQ1GXHcRHNK/npz9LjtS6LYsHUonpiTCEj6w?= =?utf-8?q?GSjRFYLyW0s0e1svfyKR8FSuIhc/Pcgq9OOfXI/Q0IhdFMxHjHgFjp61Gy3poM/x4?= =?utf-8?q?gofliz2mORj+nJqI28OdDDzJ1SaLdIwQJ1+X8nODH88wxwPOcZivSjZk0t4wS7Ur3?= =?utf-8?q?2W4yuUQWy2/noFdJyz5QXfvil4vY/t2ZleOV4inTCSMmvNkT266z0tkugvAADvxSu?= =?utf-8?q?Z5b7/mw9dCkJcazmeMSFg+P0ipmgiQ47t4y3fcwEhmKtn8eUWqmUp6IJmhY62IKiS?= =?utf-8?q?TVOvLpLqEBmQn9dnskTrycfiioClmieNY/1Kw0y+TvsbO9qmnVAU3/kPhyej+Xya5?= =?utf-8?q?2NQhIj+JDf6RdFSfeKoxQn8spAgnMIeEuVqCICYx9z69S7FjqgYV3s1fGS3TzFSGi?= =?utf-8?q?miI92XTSjwCWhg/d4WV6t7gcNnZ4DJ5IOXxcvFEL7SpmKc333CkgxDUqNnYYmw5d0?= =?utf-8?q?G1GdxOztlmIDsvIll69a/CZZ5dS9zNPHtzjEuji5G9s0LYIN+bssomO15vLDgxIsm?= =?utf-8?q?HphFygorHyJOHUpCGpWpO/xlmMqR7ElTw46wMnn5TxUQInfuTWG+2WwqQpqD+tbQJ?= =?utf-8?q?6VMBTBJSBGcD2umO73qZGbOEnlcr7C6GGSrp7dYdIz93PuzAy8WNTDPlq/t7h44mF?= =?utf-8?q?pniMrVfR8NAqpxHusugZCOeyJWvrNuyUdmD2YWHIv56wgFSmhmUIffSXQdWnBrUlf?= =?utf-8?q?HFLOHtXZL9UW?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5a8eb48b-542f-465f-a8f9-08db2ab8ae40 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:34:48.9973 (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: wTy7+Nu3BCivV5ZB/4YzHjDh/Gz8DgbHDEZdboPmFw6slZ/vvk87dlkXaGU3CAWQbFw74BY6f+MpLFarkIPKkw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB7641 XEN_DOMCTL_CDF_oos_off is forced set for PV domains, so the logic can't ever be engaged for them. Conditionalize respective fields and remove the respective bit from SHADOW_OPTIMIZATIONS when !HVM. As a result the SH_type_oos_snapshot constant can disappear altogether in that case, and a couple of #ifdef-s can also be dropped/combined. Signed-off-by: Jan Beulich Acked-by: Andrew Cooper --- a/xen/arch/x86/include/asm/domain.h +++ b/xen/arch/x86/include/asm/domain.h @@ -113,10 +113,10 @@ struct shadow_domain { /* Fast MMIO path heuristic */ bool has_fast_mmio_entries; +#ifdef CONFIG_HVM /* OOS */ bool_t oos_active; -#ifdef CONFIG_HVM /* Has this domain ever used HVMOP_pagetable_dying? */ bool_t pagetable_dying_op; #endif @@ -152,7 +152,6 @@ struct shadow_vcpu { unsigned long last_emulated_frame; /* Last MFN that we emulated a write successfully */ unsigned long last_emulated_mfn; -#endif /* Shadow out-of-sync: pages that this vcpu has let go out of sync */ mfn_t oos[SHADOW_OOS_PAGES]; @@ -163,7 +162,6 @@ struct shadow_vcpu { unsigned long off[SHADOW_OOS_FIXUPS]; } oos_fixup[SHADOW_OOS_PAGES]; -#ifdef CONFIG_HVM bool_t pagetable_dying; #endif #endif --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -296,7 +296,6 @@ static int sh_remove_write_access_from_s switch ( mfn_to_page(smfn)->u.sh.type ) { -#ifdef CONFIG_HVM case SH_type_l1_32_shadow: case SH_type_fl1_32_shadow: return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, 2) @@ -306,7 +305,6 @@ static int sh_remove_write_access_from_s case SH_type_fl1_pae_shadow: return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, 3) (d, gmfn, smfn, off); -#endif case SH_type_l1_64_shadow: case SH_type_fl1_64_shadow: --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -69,7 +69,8 @@ extern int shadow_audit_enable; #ifdef CONFIG_HVM #define SHADOW_OPTIMIZATIONS 0x1ff #else -#define SHADOW_OPTIMIZATIONS (0x1ff & ~SHOPT_FAST_EMULATION) +#define SHADOW_OPTIMIZATIONS (0x1ff & ~(SHOPT_OUT_OF_SYNC | \ + SHOPT_FAST_EMULATION)) #endif @@ -205,8 +206,7 @@ extern void shadow_audit_tables(struct v #define SH_type_max_shadow 6U #define SH_type_p2m_table 7U /* in use as the p2m table */ #define SH_type_monitor_table 8U /* in use as a monitor table */ -#define SH_type_oos_snapshot 9U /* in use as OOS snapshot */ -#define SH_type_unused 10U +#define SH_type_unused 9U #endif #ifndef CONFIG_PV32 /* Unused (but uglier to #ifdef above): */ @@ -323,8 +323,6 @@ static inline void sh_terminate_list(str #define SHF_out_of_sync (1u << (SH_type_max_shadow + 1)) #define SHF_oos_may_write (1u << (SH_type_max_shadow + 2)) -#endif /* (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) */ - static inline int sh_page_has_multiple_shadows(struct page_info *pg) { u32 shadows; @@ -335,7 +333,6 @@ static inline int sh_page_has_multiple_s return shadows && (shadows & (shadows - 1)); } -#if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) /* The caller must verify this is reasonable to call; i.e., valid mfn, * domain is translated, &c */ static inline int page_is_out_of_sync(struct page_info *p) From patchwork Wed Mar 22 09:35:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183754 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 87BF4C6FD1F for ; Wed, 22 Mar 2023 09:35:32 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513246.793992 (Exim 4.92) (envelope-from ) id 1peusJ-0002uM-9B; Wed, 22 Mar 2023 09:35:19 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513246.793992; Wed, 22 Mar 2023 09:35:19 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peusJ-0002uD-6A; Wed, 22 Mar 2023 09:35:19 +0000 Received: by outflank-mailman (input) for mailman id 513246; Wed, 22 Mar 2023 09:35:17 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peusG-0001G9-VQ for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:35:17 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on0611.outbound.protection.outlook.com [2a01:111:f400:fe0d::611]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id d8cd8f19-c894-11ed-b464-930f4c7d94ae; Wed, 22 Mar 2023 10:35:14 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DBBPR04MB7641.eurprd04.prod.outlook.com (2603:10a6:10:1f7::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:35:11 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:35:11 +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: d8cd8f19-c894-11ed-b464-930f4c7d94ae ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VBacKu1HBtn4XA0TbCLxrVWhcEuDsJ3xgxo+9ZBB7vvWFb+H4y2bqQskOuQTFW2ugytpyig9GYgULouUqDGQhM6VJE/0Ws5GQv+0sQ6TmN0pcxq8TSRokxKhTpe67tuypHW8ejNXK4lvCU8Uzktl6GkLlXEqS2a85eKnLwwiBZ8PT4HZe7nC5P5bisRUG8Pd6Xu4DMiTrwNjodHoOOi7hLLVdzIfkmMzyVT/tKBhPPYNR7lPraYi7CW2OHhFi1dilyODUqiPDuaZizlaClkbUcmYYdDLsnEJ6c1MLInx/en2FocIJ7XelS5c15Lt0a6xxkVgM2CXO9qTPRoDsjIOkQ== 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=dvUW0Gbrjt/U9iuVJHfGxVNqo7A4AhQKwK2Sj3ofS8k=; b=Dej8ODfXnkZiK6H34ZSs4dr8ddAj8Oo2+B50wiGFYG5U3o+NzGzI7jY3VNYlnWXZHb+UsUnMZ8DU/wo1141ujfHQszat7N/LnuepcLbjsI55Dilesuvy5oY3gopnvGADRkcJGzNdS4rQ/46VNjQV4LKTq18fu7TE0OHaI8j38S8EHYOMT6JA5Ykwe4s+Kz6bLPuowtYx97wewqeOG0kt5I3BjjprD6pgU8p5+LEqqFAlZSlB8LE1tx3IbEr+k1GXOhucfgD/JwUNDqzPJN826jGrcG7dTgV8EPG8RAvQAyRFVE60CG0GhM/LcpiJrapjyWRDP1175pUJn+6fv8mISA== 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=dvUW0Gbrjt/U9iuVJHfGxVNqo7A4AhQKwK2Sj3ofS8k=; b=PiyDJyNL3lwEsAgHiPmfq3FKFTmpbEYJxJAl4UHuaJ9ncO7J4UPyXF+Kpt6KrkD/yzhNtRnovDab7RTb6iYgFqJeP+P+nIbhUx6I+abiuheBLY0BcrrA9okkbULLI5FEgN8gjUrTcL0E8FqGHphdmJ6ccr7Lce6EJE3timy1VS/F1FEcSY+gQAmiGqdv4EkrqdvubBaP2ds70j+rWERIC3Hau/ygnZyxhnQN0D3gIEd2mHYzewQO5K5dXkZVn7M0AiFby3elPfS0nZtc0Y79siOVWXj3a/8JGryHwpULChIJwKAh2rocVzskcGXXkEhhVRbfdgjcjdWd+aejEj8SGg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <88be7d2e-325b-2a32-fe9f-ce762bb7b606@suse.com> Date: Wed, 22 Mar 2023 10:35:09 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 10/16] x86/shadow: move OOS functions to their own file 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: In-Reply-To: X-ClientProxiedBy: FR2P281CA0154.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:98::9) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DBBPR04MB7641:EE_ X-MS-Office365-Filtering-Correlation-Id: 03712753-949b-457e-4ffb-08db2ab8bb69 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Z/eakspQlqP+eKsZmZKZR5sH0CYIR3mTcUmkwq6uRded/9sXVblMDnCsJJMeEfIDgCSSbieHTd7Nc/ecsGdiqIgBWuCyT9vN7yqTbmQIdgV6OyHNjPJWBKMLyZVrG4LT2MpBjshk0jHpmZcqmxd8OxtLwxz61SMneFUDnOohCrl1pzs29q4epMuEYy3ENJe4XHW5TVj4fDKlVUS+4R3osdBYv391vXOgbzo9bEdakdI0vo6vgLLsUlL7wL+BQH5IJmqwkfrBmyOV1r38+hQjWbhUauC+m4jvAZiapSG87aydSWZCCbAcYrN9u/MavnD8C5CBVWtiKvhO/sO3Ns2ruZijP+z54N6qkDRqhfWhGFf3wDBs/EUU2QGZOL57vzWorZF2mAxxAcrVpX+8egKl55osoCViTCVnYXXvD7YMoJUHFFXeDYsI9jRPeuQhRL1XoOtOUyv3xEXoj8UZDkoOBYR7TrjV4SpS18/K7Ey7j/82KDLk28UjJDjKEwOWKcM2aRx715h7KgfDjZiVR7joNkX1uK/9BmOZQUHFWmDgMjZdNPr9PJXl1dxyeiScFTNwRQJtsuCLe9HuDgFm7DZTSxpD+9pGkcw+qiVAsRQJkZeJ8YuK7+I1dn8WktzyIdNANUb/Cj+f1ANWma03ELa1ApBESDDUQwcHfsuGtNtMAbImvZTI3oxhIQfDlVnzXKFD/DnqhWp4yMxRVDBCPSN7bI+H0nYTJ6AnV2U8L0aeR5tn5svvGq51Qcy0su7fYjPTTjaGnVP/uU9czOUtiFIEQcjD2kjfYg5MmN3eSoyl0Cg= 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:(13230025)(346002)(396003)(376002)(39860400002)(136003)(366004)(451199018)(86362001)(31696002)(36756003)(38100700002)(83380400001)(8676002)(4326008)(316002)(478600001)(54906003)(66946007)(66476007)(6916009)(2616005)(6512007)(6506007)(66556008)(6486002)(31686004)(26005)(186003)(66899018)(5660300002)(8936002)(30864003)(41300700001)(2906002)(45980500001)(43740500002)(579004)(473944003)(414714003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?Ps2ESLu6F/qFmxmtLP6fCPWMOJFT?= =?utf-8?q?GQolTD9jroTPTBmi4lEuxVS6qCOKDJiLl56WVx17a/Zgju+9Jx5+2yDU5BX5l+Nzq?= =?utf-8?q?G0RV5buHsbAXjU5+u5mVPP1rkH6QR11NmGqblIJB9fptvRRMFzTc0tbHMWIquVzdW?= =?utf-8?q?ipRVuQH+k41hEse0jOWPtfNsJm9uNIiiniYNNuBQ8EWXznH0yu5ok77nbp/WbQSau?= =?utf-8?q?vC9eiH9yRshRLWFPE5QQELFatkYWLGa0IWRToluq8u7S/DjOgeP18pmsXrtGUUapW?= =?utf-8?q?RdF1P72xJfGwizJ9Qsp3tAlNuoYYr05Fk9rZWjiKN6+hgltvBIxsJ75Bwump95wTJ?= =?utf-8?q?Y1y8amy5daRzlTVYi6Xg25zCEfkPfKy6SpwWU+RX0NAiIcGqc0ulVz8a5+X+LsCYK?= =?utf-8?q?p2t0GvGVDA+vqaY9CI1Ebd9GoGuLHE9W+jvpgrr7o3fIobtWiUPnjlK29HAexzEl/?= =?utf-8?q?6LW6XCRD8YIclIfsMY//iuIo1O1R+jkAgkqXXcLnmHyWY4Pdtm27ulgldhL7XHRWg?= =?utf-8?q?KU0d0JvEi+IeU3iqlGkp9kUPc73yJNP5bU0m36tRJevdTSfGT4Lgbokqnhb7z/lia?= =?utf-8?q?7v0shl7Ijnxmuywg7Sm+FvhseWCZRAk7e2/4c4VMtk076GohitEh4gHUnKdCfM6gN?= =?utf-8?q?k/iwqQSRkqpPSyNzAhJPkGWf5CSdXb49wlOXheS3F6iu+O1gAQkxyoU9o1Dt3znIM?= =?utf-8?q?UAv5DOiFsRr1gS72mVtKL9ZvzHjU4CBxvm2wxxt7JyWAtk5f8sCOxYnrZpGtdl7Xw?= =?utf-8?q?GsieP9bclvuMFOxIPBAdfcAGDp9n/FTR3bRFoYiquw9Qi+n1MzihtEM/gvnBEXj/R?= =?utf-8?q?3A+Cb2uSdA37DJ2JqGciJpUhP1l2PXFa8l1gu0wERSKpr7ZWyZVR4jT99GeN0/sHO?= =?utf-8?q?AnaxbhZNw0SVzdOjxEsNH+CEwkJAkO861ZmSGKbLZcRoa3qhIF1qjdszYYJg4zmKB?= =?utf-8?q?wm2eslKzQ1XRJivozMUlvHWYwhK3YDyKOCV8yG9+Cc20hEc+qbV1AVhnPJtZcNHQa?= =?utf-8?q?hgV2hGm3R/yY+EwdlLFFX0FLjQZlii90Fcp5iR+oFkfnbSYsMVKq43bn+erhC8H+N?= =?utf-8?q?kh6qRTftMapJCFzRMI3T6isHhhuLDPabCNVzvwlc2aL97NjiX65LAa30CGP+s+DO8?= =?utf-8?q?epwmj4dnGjD0JNM5/u2WHlNZ5HuTsyYNmIMySFyiFty1Eq2/MQw6c57N2ihlN/RYP?= =?utf-8?q?1kIduxe+dh9IqNdHhcn934kRHK6bNsFTokR0Y/fOTMJZIDzn+ABOqDMukCORk8fme?= =?utf-8?q?wshJORIv16dh8rulzNd+Grjp8a8XJTPSEDsBcCqMmoj/FVUEOR0a/UK5OGCJsLVVi?= =?utf-8?q?7MAgZ4wwgKTQ94vY3qqtc0RQtnkiaDSbiye6cImyU/y9lz3dhamVw5fsWi7hNwWes?= =?utf-8?q?BnXjMTPgfhyTUXPekWIwq74bGP0tog95RyG/DFftVTgzHWsaVigHQkszj2pdi4FP4?= =?utf-8?q?BAQ9xorHspArGQBMOcrJJ/4jWDvOz++qKttVCF2vLq/u9CbOEolqlc75FtZaBPZty?= =?utf-8?q?+VArA+daL6/k?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 03712753-949b-457e-4ffb-08db2ab8bb69 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:35:11.2147 (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: PuspAe25L5zJMeBG0P32lT4x8Kx7VM/UYh+Nwfp8OEafndNj1SU5tQsleKki5fDglG/8q25hPXiTiAHOHByDOg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB7641 The code has been identified as HVM-only, and its main functions are pretty well isolated. Move them to their own file. While moving, besides making two functions non-static, do a few style adjustments, mainly comment formatting, but leave the code otherwise untouched. Signed-off-by: Jan Beulich --- a/xen/arch/x86/mm/shadow/Makefile +++ b/xen/arch/x86/mm/shadow/Makefile @@ -1,6 +1,6 @@ ifeq ($(CONFIG_SHADOW_PAGING),y) obj-y += common.o set.o -obj-$(CONFIG_HVM) += hvm.o guest_2.o guest_3.o guest_4.o +obj-$(CONFIG_HVM) += hvm.o guest_2.o guest_3.o guest_4.o oos.o obj-$(CONFIG_PV) += pv.o guest_4.o else obj-y += none.o --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -152,576 +152,6 @@ static int __init cf_check shadow_audit_ __initcall(shadow_audit_key_init); #endif /* SHADOW_AUDIT */ -#if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) -/**************************************************************************/ -/* Out-of-sync shadows. */ - -/* From time to time, we let a shadowed pagetable page go out of sync - * with its shadow: the guest is allowed to write directly to the page, - * and those writes are not synchronously reflected in the shadow. - * This lets us avoid many emulations if the guest is writing a lot to a - * pagetable, but it relaxes a pretty important invariant in the shadow - * pagetable design. Therefore, some rules: - * - * 1. Only L1 pagetables may go out of sync: any page that is shadowed - * at at higher level must be synchronously updated. This makes - * using linear shadow pagetables much less dangerous. - * That means that: (a) unsyncing code needs to check for higher-level - * shadows, and (b) promotion code needs to resync. - * - * 2. All shadow operations on a guest page require the page to be brought - * back into sync before proceeding. This must be done under the - * paging lock so that the page is guaranteed to remain synced until - * the operation completes. - * - * Exceptions to this rule: the pagefault and invlpg handlers may - * update only one entry on an out-of-sync page without resyncing it. - * - * 3. Operations on shadows that do not start from a guest page need to - * be aware that they may be handling an out-of-sync shadow. - * - * 4. Operations that do not normally take the paging lock (fast-path - * #PF handler, INVLPG) must fall back to a locking, syncing version - * if they see an out-of-sync table. - * - * 5. Operations corresponding to guest TLB flushes (MOV CR3, INVLPG) - * must explicitly resync all relevant pages or update their - * shadows. - * - * Currently out-of-sync pages are listed in a simple open-addressed - * hash table with a second chance (must resist temptation to radically - * over-engineer hash tables...) The virtual address of the access - * which caused us to unsync the page is also kept in the hash table, as - * a hint for finding the writable mappings later. - * - * We keep a hash per vcpu, because we want as much as possible to do - * the re-sync on the save vcpu we did the unsync on, so the VA hint - * will be valid. - */ - -static void sh_oos_audit(struct domain *d) -{ - unsigned int idx, expected_idx, expected_idx_alt; - struct page_info *pg; - struct vcpu *v; - - for_each_vcpu(d, v) - { - for ( idx = 0; idx < SHADOW_OOS_PAGES; idx++ ) - { - mfn_t *oos = v->arch.paging.shadow.oos; - if ( mfn_eq(oos[idx], INVALID_MFN) ) - continue; - - expected_idx = mfn_x(oos[idx]) % SHADOW_OOS_PAGES; - expected_idx_alt = ((expected_idx + 1) % SHADOW_OOS_PAGES); - if ( idx != expected_idx && idx != expected_idx_alt ) - { - printk("%s: idx %x contains gmfn %lx, expected at %x or %x.\n", - __func__, idx, mfn_x(oos[idx]), - expected_idx, expected_idx_alt); - BUG(); - } - pg = mfn_to_page(oos[idx]); - if ( !(pg->count_info & PGC_shadowed_pt) ) - { - printk("%s: idx %x gmfn %lx not a pt (count %lx)\n", - __func__, idx, mfn_x(oos[idx]), pg->count_info); - BUG(); - } - if ( !(pg->shadow_flags & SHF_out_of_sync) ) - { - printk("%s: idx %x gmfn %lx not marked oos (flags %x)\n", - __func__, idx, mfn_x(oos[idx]), pg->shadow_flags); - BUG(); - } - if ( (pg->shadow_flags & SHF_page_type_mask & ~SHF_L1_ANY) ) - { - printk("%s: idx %x gmfn %lx shadowed as non-l1 (flags %x)\n", - __func__, idx, mfn_x(oos[idx]), pg->shadow_flags); - BUG(); - } - } - } -} - -#if SHADOW_AUDIT & SHADOW_AUDIT_ENTRIES -void oos_audit_hash_is_present(struct domain *d, mfn_t gmfn) -{ - int idx; - struct vcpu *v; - mfn_t *oos; - - ASSERT(mfn_is_out_of_sync(gmfn)); - - for_each_vcpu(d, v) - { - oos = v->arch.paging.shadow.oos; - idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; - if ( !mfn_eq(oos[idx], gmfn) ) - idx = (idx + 1) % SHADOW_OOS_PAGES; - - if ( mfn_eq(oos[idx], gmfn) ) - return; - } - - printk(XENLOG_ERR "gmfn %"PRI_mfn" marked OOS but not in hash table\n", - mfn_x(gmfn)); - BUG(); -} -#endif - -/* Update the shadow, but keep the page out of sync. */ -static inline void _sh_resync_l1(struct vcpu *v, mfn_t gmfn, mfn_t snpmfn) -{ - struct page_info *pg = mfn_to_page(gmfn); - - ASSERT(mfn_valid(gmfn)); - ASSERT(page_is_out_of_sync(pg)); - - /* Call out to the appropriate per-mode resyncing function */ - if ( pg->shadow_flags & SHF_L1_32 ) - SHADOW_INTERNAL_NAME(sh_resync_l1, 2)(v, gmfn, snpmfn); - else if ( pg->shadow_flags & SHF_L1_PAE ) - SHADOW_INTERNAL_NAME(sh_resync_l1, 3)(v, gmfn, snpmfn); - else if ( pg->shadow_flags & SHF_L1_64 ) - SHADOW_INTERNAL_NAME(sh_resync_l1, 4)(v, gmfn, snpmfn); -} - -static int sh_remove_write_access_from_sl1p(struct domain *d, mfn_t gmfn, - mfn_t smfn, unsigned long off) -{ - ASSERT(mfn_valid(smfn)); - ASSERT(mfn_valid(gmfn)); - - switch ( mfn_to_page(smfn)->u.sh.type ) - { - case SH_type_l1_32_shadow: - case SH_type_fl1_32_shadow: - return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, 2) - (d, gmfn, smfn, off); - - case SH_type_l1_pae_shadow: - case SH_type_fl1_pae_shadow: - return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, 3) - (d, gmfn, smfn, off); - - case SH_type_l1_64_shadow: - case SH_type_fl1_64_shadow: - return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, 4) - (d, gmfn, smfn, off); - - default: - return 0; - } -} - -/* - * Fixup arrays: We limit the maximum number of writable mappings to - * SHADOW_OOS_FIXUPS and store enough information to remove them - * quickly on resync. - */ - -static inline int oos_fixup_flush_gmfn(struct vcpu *v, mfn_t gmfn, - struct oos_fixup *fixup) -{ - struct domain *d = v->domain; - int i; - for ( i = 0; i < SHADOW_OOS_FIXUPS; i++ ) - { - if ( !mfn_eq(fixup->smfn[i], INVALID_MFN) ) - { - sh_remove_write_access_from_sl1p(d, gmfn, - fixup->smfn[i], - fixup->off[i]); - fixup->smfn[i] = INVALID_MFN; - } - } - - /* Always flush the TLBs. See comment on oos_fixup_add(). */ - return 1; -} - -void oos_fixup_add(struct domain *d, mfn_t gmfn, - mfn_t smfn, unsigned long off) -{ - int idx, next; - mfn_t *oos; - struct oos_fixup *oos_fixup; - struct vcpu *v; - - perfc_incr(shadow_oos_fixup_add); - - for_each_vcpu(d, v) - { - oos = v->arch.paging.shadow.oos; - oos_fixup = v->arch.paging.shadow.oos_fixup; - idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; - if ( !mfn_eq(oos[idx], gmfn) ) - idx = (idx + 1) % SHADOW_OOS_PAGES; - if ( mfn_eq(oos[idx], gmfn) ) - { - int i; - for ( i = 0; i < SHADOW_OOS_FIXUPS; i++ ) - { - if ( mfn_eq(oos_fixup[idx].smfn[i], smfn) - && (oos_fixup[idx].off[i] == off) ) - return; - } - - next = oos_fixup[idx].next; - - if ( !mfn_eq(oos_fixup[idx].smfn[next], INVALID_MFN) ) - { - TRACE_SHADOW_PATH_FLAG(TRCE_SFLAG_OOS_FIXUP_EVICT); - - /* Reuse this slot and remove current writable mapping. */ - sh_remove_write_access_from_sl1p(d, gmfn, - oos_fixup[idx].smfn[next], - oos_fixup[idx].off[next]); - perfc_incr(shadow_oos_fixup_evict); - /* We should flush the TLBs now, because we removed a - writable mapping, but since the shadow is already - OOS we have no problem if another vcpu write to - this page table. We just have to be very careful to - *always* flush the tlbs on resync. */ - } - - oos_fixup[idx].smfn[next] = smfn; - oos_fixup[idx].off[next] = off; - oos_fixup[idx].next = (next + 1) % SHADOW_OOS_FIXUPS; - - TRACE_SHADOW_PATH_FLAG(TRCE_SFLAG_OOS_FIXUP_ADD); - return; - } - } - - printk(XENLOG_ERR "gmfn %"PRI_mfn" was OOS but not in hash table\n", - mfn_x(gmfn)); - BUG(); -} - -static int oos_remove_write_access(struct vcpu *v, mfn_t gmfn, - struct oos_fixup *fixup) -{ - struct domain *d = v->domain; - int ftlb = 0; - - ftlb |= oos_fixup_flush_gmfn(v, gmfn, fixup); - - switch ( sh_remove_write_access(d, gmfn, 0, 0) ) - { - default: - case 0: - break; - - case 1: - ftlb |= 1; - break; - - case -1: - /* An unfindable writeable typecount has appeared, probably via a - * grant table entry: can't shoot the mapping, so try to unshadow - * the page. If that doesn't work either, the guest is granting - * his pagetables and must be killed after all. - * This will flush the tlb, so we can return with no worries. */ - shadow_remove_all_shadows(d, gmfn); - return 1; - } - - if ( ftlb ) - guest_flush_tlb_mask(d, d->dirty_cpumask); - - return 0; -} - - -static inline void trace_resync(int event, mfn_t gmfn) -{ - if ( tb_init_done ) - { - /* Convert gmfn to gfn */ - gfn_t gfn = mfn_to_gfn(current->domain, gmfn); - - __trace_var(event, 0/*!tsc*/, sizeof(gfn), &gfn); - } -} - -/* Pull all the entries on an out-of-sync page back into sync. */ -static void _sh_resync(struct vcpu *v, mfn_t gmfn, - struct oos_fixup *fixup, mfn_t snp) -{ - struct page_info *pg = mfn_to_page(gmfn); - - ASSERT(paging_locked_by_me(v->domain)); - ASSERT(mfn_is_out_of_sync(gmfn)); - /* Guest page must be shadowed *only* as L1 when out of sync. */ - ASSERT(!(mfn_to_page(gmfn)->shadow_flags & SHF_page_type_mask - & ~SHF_L1_ANY)); - ASSERT(!sh_page_has_multiple_shadows(mfn_to_page(gmfn))); - - SHADOW_PRINTK("%pv gmfn=%"PRI_mfn"\n", v, mfn_x(gmfn)); - - /* Need to pull write access so the page *stays* in sync. */ - if ( oos_remove_write_access(v, gmfn, fixup) ) - { - /* Page has been unshadowed. */ - return; - } - - /* No more writable mappings of this page, please */ - pg->shadow_flags &= ~SHF_oos_may_write; - - /* Update the shadows with current guest entries. */ - _sh_resync_l1(v, gmfn, snp); - - /* Now we know all the entries are synced, and will stay that way */ - pg->shadow_flags &= ~SHF_out_of_sync; - perfc_incr(shadow_resync); - trace_resync(TRC_SHADOW_RESYNC_FULL, gmfn); -} - - -/* Add an MFN to the list of out-of-sync guest pagetables */ -static void oos_hash_add(struct vcpu *v, mfn_t gmfn) -{ - int i, idx, oidx, swap = 0; - mfn_t *oos = v->arch.paging.shadow.oos; - mfn_t *oos_snapshot = v->arch.paging.shadow.oos_snapshot; - struct oos_fixup *oos_fixup = v->arch.paging.shadow.oos_fixup; - struct oos_fixup fixup = { .next = 0 }; - - for (i = 0; i < SHADOW_OOS_FIXUPS; i++ ) - fixup.smfn[i] = INVALID_MFN; - - idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; - oidx = idx; - - if ( !mfn_eq(oos[idx], INVALID_MFN) - && (mfn_x(oos[idx]) % SHADOW_OOS_PAGES) == idx ) - { - /* Punt the current occupant into the next slot */ - SWAP(oos[idx], gmfn); - SWAP(oos_fixup[idx], fixup); - swap = 1; - idx = (idx + 1) % SHADOW_OOS_PAGES; - } - if ( !mfn_eq(oos[idx], INVALID_MFN) ) - { - /* Crush the current occupant. */ - _sh_resync(v, oos[idx], &oos_fixup[idx], oos_snapshot[idx]); - perfc_incr(shadow_unsync_evict); - } - oos[idx] = gmfn; - oos_fixup[idx] = fixup; - - if ( swap ) - SWAP(oos_snapshot[idx], oos_snapshot[oidx]); - - copy_domain_page(oos_snapshot[oidx], oos[oidx]); -} - -/* Remove an MFN from the list of out-of-sync guest pagetables */ -static void oos_hash_remove(struct domain *d, mfn_t gmfn) -{ - int idx; - mfn_t *oos; - struct vcpu *v; - - SHADOW_PRINTK("d%d gmfn %lx\n", d->domain_id, mfn_x(gmfn)); - - for_each_vcpu(d, v) - { - oos = v->arch.paging.shadow.oos; - idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; - if ( !mfn_eq(oos[idx], gmfn) ) - idx = (idx + 1) % SHADOW_OOS_PAGES; - if ( mfn_eq(oos[idx], gmfn) ) - { - oos[idx] = INVALID_MFN; - return; - } - } - - printk(XENLOG_ERR "gmfn %"PRI_mfn" was OOS but not in hash table\n", - mfn_x(gmfn)); - BUG(); -} - -mfn_t oos_snapshot_lookup(struct domain *d, mfn_t gmfn) -{ - int idx; - mfn_t *oos; - mfn_t *oos_snapshot; - struct vcpu *v; - - for_each_vcpu(d, v) - { - oos = v->arch.paging.shadow.oos; - oos_snapshot = v->arch.paging.shadow.oos_snapshot; - idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; - if ( !mfn_eq(oos[idx], gmfn) ) - idx = (idx + 1) % SHADOW_OOS_PAGES; - if ( mfn_eq(oos[idx], gmfn) ) - { - return oos_snapshot[idx]; - } - } - - printk(XENLOG_ERR "gmfn %"PRI_mfn" was OOS but not in hash table\n", - mfn_x(gmfn)); - BUG(); -} - -/* Pull a single guest page back into sync */ -void sh_resync(struct domain *d, mfn_t gmfn) -{ - int idx; - mfn_t *oos; - mfn_t *oos_snapshot; - struct oos_fixup *oos_fixup; - struct vcpu *v; - - for_each_vcpu(d, v) - { - oos = v->arch.paging.shadow.oos; - oos_fixup = v->arch.paging.shadow.oos_fixup; - oos_snapshot = v->arch.paging.shadow.oos_snapshot; - idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; - if ( !mfn_eq(oos[idx], gmfn) ) - idx = (idx + 1) % SHADOW_OOS_PAGES; - - if ( mfn_eq(oos[idx], gmfn) ) - { - _sh_resync(v, gmfn, &oos_fixup[idx], oos_snapshot[idx]); - oos[idx] = INVALID_MFN; - return; - } - } - - printk(XENLOG_ERR "gmfn %"PRI_mfn" was OOS but not in hash table\n", - mfn_x(gmfn)); - BUG(); -} - -/* Figure out whether it's definitely safe not to sync this l1 table, - * by making a call out to the mode in which that shadow was made. */ -static int sh_skip_sync(struct vcpu *v, mfn_t gl1mfn) -{ - struct page_info *pg = mfn_to_page(gl1mfn); - if ( pg->shadow_flags & SHF_L1_32 ) - return SHADOW_INTERNAL_NAME(sh_safe_not_to_sync, 2)(v, gl1mfn); - else if ( pg->shadow_flags & SHF_L1_PAE ) - return SHADOW_INTERNAL_NAME(sh_safe_not_to_sync, 3)(v, gl1mfn); - else if ( pg->shadow_flags & SHF_L1_64 ) - return SHADOW_INTERNAL_NAME(sh_safe_not_to_sync, 4)(v, gl1mfn); - printk(XENLOG_ERR "gmfn %"PRI_mfn" was OOS but not shadowed as an l1\n", - mfn_x(gl1mfn)); - BUG(); -} - - -/* Pull all out-of-sync pages back into sync. Pages brought out of sync - * on other vcpus are allowed to remain out of sync, but their contents - * will be made safe (TLB flush semantics); pages unsynced by this vcpu - * are brought back into sync and write-protected. If skip != 0, we try - * to avoid resyncing at all if we think we can get away with it. */ -void sh_resync_all(struct vcpu *v, int skip, int this, int others) -{ - int idx; - struct vcpu *other; - mfn_t *oos = v->arch.paging.shadow.oos; - mfn_t *oos_snapshot = v->arch.paging.shadow.oos_snapshot; - struct oos_fixup *oos_fixup = v->arch.paging.shadow.oos_fixup; - - SHADOW_PRINTK("%pv\n", v); - - ASSERT(paging_locked_by_me(v->domain)); - - if ( !this ) - goto resync_others; - - /* First: resync all of this vcpu's oos pages */ - for ( idx = 0; idx < SHADOW_OOS_PAGES; idx++ ) - if ( !mfn_eq(oos[idx], INVALID_MFN) ) - { - /* Write-protect and sync contents */ - _sh_resync(v, oos[idx], &oos_fixup[idx], oos_snapshot[idx]); - oos[idx] = INVALID_MFN; - } - - resync_others: - if ( !others ) - return; - - /* Second: make all *other* vcpus' oos pages safe. */ - for_each_vcpu(v->domain, other) - { - if ( v == other ) - continue; - - oos = other->arch.paging.shadow.oos; - oos_fixup = other->arch.paging.shadow.oos_fixup; - oos_snapshot = other->arch.paging.shadow.oos_snapshot; - - for ( idx = 0; idx < SHADOW_OOS_PAGES; idx++ ) - { - if ( mfn_eq(oos[idx], INVALID_MFN) ) - continue; - - if ( skip ) - { - /* Update the shadows and leave the page OOS. */ - if ( sh_skip_sync(v, oos[idx]) ) - continue; - trace_resync(TRC_SHADOW_RESYNC_ONLY, oos[idx]); - _sh_resync_l1(other, oos[idx], oos_snapshot[idx]); - } - else - { - /* Write-protect and sync contents */ - _sh_resync(other, oos[idx], &oos_fixup[idx], oos_snapshot[idx]); - oos[idx] = INVALID_MFN; - } - } - } -} - -/* Allow a shadowed page to go out of sync. Unsyncs are traced in - * multi.c:sh_page_fault() */ -int sh_unsync(struct vcpu *v, mfn_t gmfn) -{ - struct page_info *pg; - - ASSERT(paging_locked_by_me(v->domain)); - - SHADOW_PRINTK("%pv gmfn=%"PRI_mfn"\n", v, mfn_x(gmfn)); - - pg = mfn_to_page(gmfn); - - /* Guest page must be shadowed *only* as L1 and *only* once when out - * of sync. Also, get out now if it's already out of sync. - * Also, can't safely unsync if some vcpus have paging disabled.*/ - if ( pg->shadow_flags & - ((SHF_page_type_mask & ~SHF_L1_ANY) | SHF_out_of_sync) - || sh_page_has_multiple_shadows(pg) - || !is_hvm_vcpu(v) - || !v->domain->arch.paging.shadow.oos_active ) - return 0; - - BUILD_BUG_ON(!(typeof(pg->shadow_flags))SHF_out_of_sync); - BUILD_BUG_ON(!(typeof(pg->shadow_flags))SHF_oos_may_write); - - pg->shadow_flags |= SHF_out_of_sync|SHF_oos_may_write; - oos_hash_add(v, gmfn); - perfc_incr(shadow_unsync); - TRACE_SHADOW_PATH_FLAG(TRCE_SFLAG_UNSYNC); - return 1; -} - -#endif /* (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) */ - - /**************************************************************************/ /* Code for "promoting" a guest page to the point where the shadow code is * willing to let it be treated as a guest page table. This generally --- /dev/null +++ b/xen/arch/x86/mm/shadow/oos.c @@ -0,0 +1,603 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/****************************************************************************** + * arch/x86/mm/shadow/oos.c + * + * Shadow code dealing with out-of-sync shadows. + * Parts of this code are Copyright (c) 2006 by XenSource Inc. + * Parts of this code are Copyright (c) 2006 by Michael A Fetterman + * Parts based on earlier work by Michael A Fetterman, Ian Pratt et al. + */ + +#include "private.h" + +#if (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) + +#include + +#include + +/* + * From time to time, we let a shadowed pagetable page go out of sync + * with its shadow: the guest is allowed to write directly to the page, + * and those writes are not synchronously reflected in the shadow. + * This lets us avoid many emulations if the guest is writing a lot to a + * pagetable, but it relaxes a pretty important invariant in the shadow + * pagetable design. Therefore, some rules: + * + * 1. Only L1 pagetables may go out of sync: any page that is shadowed + * at at higher level must be synchronously updated. This makes + * using linear shadow pagetables much less dangerous. + * That means that: (a) unsyncing code needs to check for higher-level + * shadows, and (b) promotion code needs to resync. + * + * 2. All shadow operations on a guest page require the page to be brought + * back into sync before proceeding. This must be done under the + * paging lock so that the page is guaranteed to remain synced until + * the operation completes. + * + * Exceptions to this rule: the pagefault and invlpg handlers may + * update only one entry on an out-of-sync page without resyncing it. + * + * 3. Operations on shadows that do not start from a guest page need to + * be aware that they may be handling an out-of-sync shadow. + * + * 4. Operations that do not normally take the paging lock (fast-path + * #PF handler, INVLPG) must fall back to a locking, syncing version + * if they see an out-of-sync table. + * + * 5. Operations corresponding to guest TLB flushes (MOV CR3, INVLPG) + * must explicitly resync all relevant pages or update their + * shadows. + * + * Currently out-of-sync pages are listed in a simple open-addressed + * hash table with a second chance (must resist temptation to radically + * over-engineer hash tables...) The virtual address of the access + * which caused us to unsync the page is also kept in the hash table, as + * a hint for finding the writable mappings later. + * + * We keep a hash per vcpu, because we want as much as possible to do + * the re-sync on the save vcpu we did the unsync on, so the VA hint + * will be valid. + */ + +#if SHADOW_AUDIT & SHADOW_AUDIT_ENTRIES_FULL +void sh_oos_audit(struct domain *d) +{ + unsigned int idx, expected_idx, expected_idx_alt; + struct page_info *pg; + struct vcpu *v; + + for_each_vcpu(d, v) + { + for ( idx = 0; idx < SHADOW_OOS_PAGES; idx++ ) + { + mfn_t *oos = v->arch.paging.shadow.oos; + if ( mfn_eq(oos[idx], INVALID_MFN) ) + continue; + + expected_idx = mfn_x(oos[idx]) % SHADOW_OOS_PAGES; + expected_idx_alt = ((expected_idx + 1) % SHADOW_OOS_PAGES); + if ( idx != expected_idx && idx != expected_idx_alt ) + { + printk("%s: idx %x contains gmfn %lx, expected at %x or %x.\n", + __func__, idx, mfn_x(oos[idx]), + expected_idx, expected_idx_alt); + BUG(); + } + pg = mfn_to_page(oos[idx]); + if ( !(pg->count_info & PGC_shadowed_pt) ) + { + printk("%s: idx %x gmfn %lx not a pt (count %lx)\n", + __func__, idx, mfn_x(oos[idx]), pg->count_info); + BUG(); + } + if ( !(pg->shadow_flags & SHF_out_of_sync) ) + { + printk("%s: idx %x gmfn %lx not marked oos (flags %x)\n", + __func__, idx, mfn_x(oos[idx]), pg->shadow_flags); + BUG(); + } + if ( (pg->shadow_flags & SHF_page_type_mask & ~SHF_L1_ANY) ) + { + printk("%s: idx %x gmfn %lx shadowed as non-l1 (flags %x)\n", + __func__, idx, mfn_x(oos[idx]), pg->shadow_flags); + BUG(); + } + } + } +} +#endif + +#if SHADOW_AUDIT & SHADOW_AUDIT_ENTRIES +void oos_audit_hash_is_present(struct domain *d, mfn_t gmfn) +{ + int idx; + struct vcpu *v; + mfn_t *oos; + + ASSERT(mfn_is_out_of_sync(gmfn)); + + for_each_vcpu(d, v) + { + oos = v->arch.paging.shadow.oos; + idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; + if ( !mfn_eq(oos[idx], gmfn) ) + idx = (idx + 1) % SHADOW_OOS_PAGES; + + if ( mfn_eq(oos[idx], gmfn) ) + return; + } + + printk(XENLOG_ERR "gmfn %"PRI_mfn" marked OOS but not in hash table\n", + mfn_x(gmfn)); + BUG(); +} +#endif + +/* Update the shadow, but keep the page out of sync. */ +static inline void _sh_resync_l1(struct vcpu *v, mfn_t gmfn, mfn_t snpmfn) +{ + struct page_info *pg = mfn_to_page(gmfn); + + ASSERT(mfn_valid(gmfn)); + ASSERT(page_is_out_of_sync(pg)); + + /* Call out to the appropriate per-mode resyncing function */ + if ( pg->shadow_flags & SHF_L1_32 ) + SHADOW_INTERNAL_NAME(sh_resync_l1, 2)(v, gmfn, snpmfn); + else if ( pg->shadow_flags & SHF_L1_PAE ) + SHADOW_INTERNAL_NAME(sh_resync_l1, 3)(v, gmfn, snpmfn); + else if ( pg->shadow_flags & SHF_L1_64 ) + SHADOW_INTERNAL_NAME(sh_resync_l1, 4)(v, gmfn, snpmfn); +} + +static int sh_remove_write_access_from_sl1p(struct domain *d, mfn_t gmfn, + mfn_t smfn, unsigned long off) +{ + ASSERT(mfn_valid(smfn)); + ASSERT(mfn_valid(gmfn)); + + switch ( mfn_to_page(smfn)->u.sh.type ) + { + case SH_type_l1_32_shadow: + case SH_type_fl1_32_shadow: + return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, 2) + (d, gmfn, smfn, off); + + case SH_type_l1_pae_shadow: + case SH_type_fl1_pae_shadow: + return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, 3) + (d, gmfn, smfn, off); + + case SH_type_l1_64_shadow: + case SH_type_fl1_64_shadow: + return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p, 4) + (d, gmfn, smfn, off); + + default: + return 0; + } +} + +/* + * Fixup arrays: We limit the maximum number of writable mappings to + * SHADOW_OOS_FIXUPS and store enough information to remove them + * quickly on resync. + */ + +static inline int oos_fixup_flush_gmfn(struct vcpu *v, mfn_t gmfn, + struct oos_fixup *fixup) +{ + struct domain *d = v->domain; + int i; + for ( i = 0; i < SHADOW_OOS_FIXUPS; i++ ) + { + if ( !mfn_eq(fixup->smfn[i], INVALID_MFN) ) + { + sh_remove_write_access_from_sl1p(d, gmfn, + fixup->smfn[i], + fixup->off[i]); + fixup->smfn[i] = INVALID_MFN; + } + } + + /* Always flush the TLBs. See comment on oos_fixup_add(). */ + return 1; +} + +void oos_fixup_add(struct domain *d, mfn_t gmfn, + mfn_t smfn, unsigned long off) +{ + int idx, next; + mfn_t *oos; + struct oos_fixup *oos_fixup; + struct vcpu *v; + + perfc_incr(shadow_oos_fixup_add); + + for_each_vcpu(d, v) + { + oos = v->arch.paging.shadow.oos; + oos_fixup = v->arch.paging.shadow.oos_fixup; + idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; + if ( !mfn_eq(oos[idx], gmfn) ) + idx = (idx + 1) % SHADOW_OOS_PAGES; + if ( mfn_eq(oos[idx], gmfn) ) + { + int i; + for ( i = 0; i < SHADOW_OOS_FIXUPS; i++ ) + { + if ( mfn_eq(oos_fixup[idx].smfn[i], smfn) + && (oos_fixup[idx].off[i] == off) ) + return; + } + + next = oos_fixup[idx].next; + + if ( !mfn_eq(oos_fixup[idx].smfn[next], INVALID_MFN) ) + { + TRACE_SHADOW_PATH_FLAG(TRCE_SFLAG_OOS_FIXUP_EVICT); + + /* Reuse this slot and remove current writable mapping. */ + sh_remove_write_access_from_sl1p(d, gmfn, + oos_fixup[idx].smfn[next], + oos_fixup[idx].off[next]); + perfc_incr(shadow_oos_fixup_evict); + /* + * We should flush the TLBs now, because we removed a + * writable mapping, but since the shadow is already + * OOS we have no problem if another vcpu write to + * this page table. We just have to be very careful to + * *always* flush the tlbs on resync. + */ + } + + oos_fixup[idx].smfn[next] = smfn; + oos_fixup[idx].off[next] = off; + oos_fixup[idx].next = (next + 1) % SHADOW_OOS_FIXUPS; + + TRACE_SHADOW_PATH_FLAG(TRCE_SFLAG_OOS_FIXUP_ADD); + return; + } + } + + printk(XENLOG_ERR "gmfn %"PRI_mfn" was OOS but not in hash table\n", + mfn_x(gmfn)); + BUG(); +} + +static int oos_remove_write_access(struct vcpu *v, mfn_t gmfn, + struct oos_fixup *fixup) +{ + struct domain *d = v->domain; + int ftlb = 0; + + ftlb |= oos_fixup_flush_gmfn(v, gmfn, fixup); + + switch ( sh_remove_write_access(d, gmfn, 0, 0) ) + { + default: + case 0: + break; + + case 1: + ftlb |= 1; + break; + + case -1: + /* + * An unfindable writeable typecount has appeared, probably via a + * grant table entry: can't shoot the mapping, so try to unshadow + * the page. If that doesn't work either, the guest is granting + * his pagetables and must be killed after all. + * This will flush the tlb, so we can return with no worries. + */ + shadow_remove_all_shadows(d, gmfn); + return 1; + } + + if ( ftlb ) + guest_flush_tlb_mask(d, d->dirty_cpumask); + + return 0; +} + +static inline void trace_resync(int event, mfn_t gmfn) +{ + if ( tb_init_done ) + { + /* Convert gmfn to gfn */ + gfn_t gfn = mfn_to_gfn(current->domain, gmfn); + + __trace_var(event, 0/*!tsc*/, sizeof(gfn), &gfn); + } +} + +/* Pull all the entries on an out-of-sync page back into sync. */ +static void _sh_resync(struct vcpu *v, mfn_t gmfn, + struct oos_fixup *fixup, mfn_t snp) +{ + struct page_info *pg = mfn_to_page(gmfn); + + ASSERT(paging_locked_by_me(v->domain)); + ASSERT(mfn_is_out_of_sync(gmfn)); + /* Guest page must be shadowed *only* as L1 when out of sync. */ + ASSERT(!(mfn_to_page(gmfn)->shadow_flags & SHF_page_type_mask + & ~SHF_L1_ANY)); + ASSERT(!sh_page_has_multiple_shadows(mfn_to_page(gmfn))); + + SHADOW_PRINTK("%pv gmfn=%"PRI_mfn"\n", v, mfn_x(gmfn)); + + /* Need to pull write access so the page *stays* in sync. */ + if ( oos_remove_write_access(v, gmfn, fixup) ) + { + /* Page has been unshadowed. */ + return; + } + + /* No more writable mappings of this page, please */ + pg->shadow_flags &= ~SHF_oos_may_write; + + /* Update the shadows with current guest entries. */ + _sh_resync_l1(v, gmfn, snp); + + /* Now we know all the entries are synced, and will stay that way */ + pg->shadow_flags &= ~SHF_out_of_sync; + perfc_incr(shadow_resync); + trace_resync(TRC_SHADOW_RESYNC_FULL, gmfn); +} + +/* Add an MFN to the list of out-of-sync guest pagetables */ +static void oos_hash_add(struct vcpu *v, mfn_t gmfn) +{ + int i, idx, oidx, swap = 0; + mfn_t *oos = v->arch.paging.shadow.oos; + mfn_t *oos_snapshot = v->arch.paging.shadow.oos_snapshot; + struct oos_fixup *oos_fixup = v->arch.paging.shadow.oos_fixup; + struct oos_fixup fixup = { .next = 0 }; + + for ( i = 0; i < SHADOW_OOS_FIXUPS; i++ ) + fixup.smfn[i] = INVALID_MFN; + + idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; + oidx = idx; + + if ( !mfn_eq(oos[idx], INVALID_MFN) + && (mfn_x(oos[idx]) % SHADOW_OOS_PAGES) == idx ) + { + /* Punt the current occupant into the next slot */ + SWAP(oos[idx], gmfn); + SWAP(oos_fixup[idx], fixup); + swap = 1; + idx = (idx + 1) % SHADOW_OOS_PAGES; + } + if ( !mfn_eq(oos[idx], INVALID_MFN) ) + { + /* Crush the current occupant. */ + _sh_resync(v, oos[idx], &oos_fixup[idx], oos_snapshot[idx]); + perfc_incr(shadow_unsync_evict); + } + oos[idx] = gmfn; + oos_fixup[idx] = fixup; + + if ( swap ) + SWAP(oos_snapshot[idx], oos_snapshot[oidx]); + + copy_domain_page(oos_snapshot[oidx], oos[oidx]); +} + +/* Remove an MFN from the list of out-of-sync guest pagetables */ +void oos_hash_remove(struct domain *d, mfn_t gmfn) +{ + int idx; + mfn_t *oos; + struct vcpu *v; + + SHADOW_PRINTK("d%d gmfn %lx\n", d->domain_id, mfn_x(gmfn)); + + for_each_vcpu(d, v) + { + oos = v->arch.paging.shadow.oos; + idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; + if ( !mfn_eq(oos[idx], gmfn) ) + idx = (idx + 1) % SHADOW_OOS_PAGES; + if ( mfn_eq(oos[idx], gmfn) ) + { + oos[idx] = INVALID_MFN; + return; + } + } + + printk(XENLOG_ERR "gmfn %"PRI_mfn" was OOS but not in hash table\n", + mfn_x(gmfn)); + BUG(); +} + +mfn_t oos_snapshot_lookup(struct domain *d, mfn_t gmfn) +{ + int idx; + mfn_t *oos; + mfn_t *oos_snapshot; + struct vcpu *v; + + for_each_vcpu(d, v) + { + oos = v->arch.paging.shadow.oos; + oos_snapshot = v->arch.paging.shadow.oos_snapshot; + idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; + if ( !mfn_eq(oos[idx], gmfn) ) + idx = (idx + 1) % SHADOW_OOS_PAGES; + if ( mfn_eq(oos[idx], gmfn) ) + { + return oos_snapshot[idx]; + } + } + + printk(XENLOG_ERR "gmfn %"PRI_mfn" was OOS but not in hash table\n", + mfn_x(gmfn)); + BUG(); +} + +/* Pull a single guest page back into sync */ +void sh_resync(struct domain *d, mfn_t gmfn) +{ + int idx; + mfn_t *oos; + mfn_t *oos_snapshot; + struct oos_fixup *oos_fixup; + struct vcpu *v; + + for_each_vcpu(d, v) + { + oos = v->arch.paging.shadow.oos; + oos_fixup = v->arch.paging.shadow.oos_fixup; + oos_snapshot = v->arch.paging.shadow.oos_snapshot; + idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; + if ( !mfn_eq(oos[idx], gmfn) ) + idx = (idx + 1) % SHADOW_OOS_PAGES; + + if ( mfn_eq(oos[idx], gmfn) ) + { + _sh_resync(v, gmfn, &oos_fixup[idx], oos_snapshot[idx]); + oos[idx] = INVALID_MFN; + return; + } + } + + printk(XENLOG_ERR "gmfn %"PRI_mfn" was OOS but not in hash table\n", + mfn_x(gmfn)); + BUG(); +} + +/* + * Figure out whether it's definitely safe not to sync this l1 table, + * by making a call out to the mode in which that shadow was made. + */ +static int sh_skip_sync(struct vcpu *v, mfn_t gl1mfn) +{ + struct page_info *pg = mfn_to_page(gl1mfn); + if ( pg->shadow_flags & SHF_L1_32 ) + return SHADOW_INTERNAL_NAME(sh_safe_not_to_sync, 2)(v, gl1mfn); + else if ( pg->shadow_flags & SHF_L1_PAE ) + return SHADOW_INTERNAL_NAME(sh_safe_not_to_sync, 3)(v, gl1mfn); + else if ( pg->shadow_flags & SHF_L1_64 ) + return SHADOW_INTERNAL_NAME(sh_safe_not_to_sync, 4)(v, gl1mfn); + printk(XENLOG_ERR "gmfn %"PRI_mfn" was OOS but not shadowed as an l1\n", + mfn_x(gl1mfn)); + BUG(); +} + +/* + * Pull all out-of-sync pages back into sync. Pages brought out of sync + * on other vcpus are allowed to remain out of sync, but their contents + * will be made safe (TLB flush semantics); pages unsynced by this vcpu + * are brought back into sync and write-protected. If skip != 0, we try + * to avoid resyncing at all if we think we can get away with it. + */ +void sh_resync_all(struct vcpu *v, int skip, int this, int others) +{ + int idx; + struct vcpu *other; + mfn_t *oos = v->arch.paging.shadow.oos; + mfn_t *oos_snapshot = v->arch.paging.shadow.oos_snapshot; + struct oos_fixup *oos_fixup = v->arch.paging.shadow.oos_fixup; + + SHADOW_PRINTK("%pv\n", v); + + ASSERT(paging_locked_by_me(v->domain)); + + if ( !this ) + goto resync_others; + + /* First: resync all of this vcpu's oos pages */ + for ( idx = 0; idx < SHADOW_OOS_PAGES; idx++ ) + if ( !mfn_eq(oos[idx], INVALID_MFN) ) + { + /* Write-protect and sync contents */ + _sh_resync(v, oos[idx], &oos_fixup[idx], oos_snapshot[idx]); + oos[idx] = INVALID_MFN; + } + + resync_others: + if ( !others ) + return; + + /* Second: make all *other* vcpus' oos pages safe. */ + for_each_vcpu(v->domain, other) + { + if ( v == other ) + continue; + + oos = other->arch.paging.shadow.oos; + oos_fixup = other->arch.paging.shadow.oos_fixup; + oos_snapshot = other->arch.paging.shadow.oos_snapshot; + + for ( idx = 0; idx < SHADOW_OOS_PAGES; idx++ ) + { + if ( mfn_eq(oos[idx], INVALID_MFN) ) + continue; + + if ( skip ) + { + /* Update the shadows and leave the page OOS. */ + if ( sh_skip_sync(v, oos[idx]) ) + continue; + trace_resync(TRC_SHADOW_RESYNC_ONLY, oos[idx]); + _sh_resync_l1(other, oos[idx], oos_snapshot[idx]); + } + else + { + /* Write-protect and sync contents */ + _sh_resync(other, oos[idx], &oos_fixup[idx], oos_snapshot[idx]); + oos[idx] = INVALID_MFN; + } + } + } +} + +/* + * Allow a shadowed page to go out of sync. Unsyncs are traced in + * multi.c:sh_page_fault() + */ +int sh_unsync(struct vcpu *v, mfn_t gmfn) +{ + struct page_info *pg; + + ASSERT(paging_locked_by_me(v->domain)); + + SHADOW_PRINTK("%pv gmfn=%"PRI_mfn"\n", v, mfn_x(gmfn)); + + pg = mfn_to_page(gmfn); + + /* + * Guest page must be shadowed *only* as L1 and *only* once when out + * of sync. Also, get out now if it's already out of sync. + * Also, can't safely unsync if some vcpus have paging disabled. + */ + if ( pg->shadow_flags & + ((SHF_page_type_mask & ~SHF_L1_ANY) | SHF_out_of_sync) + || sh_page_has_multiple_shadows(pg) + || !is_hvm_vcpu(v) + || !v->domain->arch.paging.shadow.oos_active ) + return 0; + + BUILD_BUG_ON(!(typeof(pg->shadow_flags))SHF_out_of_sync); + BUILD_BUG_ON(!(typeof(pg->shadow_flags))SHF_oos_may_write); + + pg->shadow_flags |= SHF_out_of_sync|SHF_oos_may_write; + oos_hash_add(v, gmfn); + perfc_incr(shadow_unsync); + TRACE_SHADOW_PATH_FLAG(TRCE_SFLAG_UNSYNC); + return 1; +} + +#endif /* (SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC) */ + +/* + * Local variables: + * mode: C + * c-file-style: "BSD" + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + */ --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -452,6 +452,7 @@ int sh_unsync(struct vcpu *v, mfn_t gmfn /* Pull an out-of-sync page back into sync. */ void sh_resync(struct domain *d, mfn_t gmfn); +void oos_hash_remove(struct domain *d, mfn_t gmfn); void oos_fixup_add(struct domain *d, mfn_t gmfn, mfn_t smfn, unsigned long off); /* Pull all out-of-sync shadows back into sync. If skip != 0, we try @@ -477,6 +478,7 @@ shadow_sync_other_vcpus(struct vcpu *v) sh_resync_all(v, 1 /* skip */, 0 /* this */, 1 /* others */); } +void sh_oos_audit(struct domain *d); void oos_audit_hash_is_present(struct domain *d, mfn_t gmfn); mfn_t oos_snapshot_lookup(struct domain *d, mfn_t gmfn); From patchwork Wed Mar 22 09:35:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183755 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 EF03CC6FD1F for ; Wed, 22 Mar 2023 09:35:41 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513250.794001 (Exim 4.92) (envelope-from ) id 1peusY-0003M0-PF; Wed, 22 Mar 2023 09:35:34 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513250.794001; Wed, 22 Mar 2023 09:35:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peusY-0003Lp-M0; Wed, 22 Mar 2023 09:35:34 +0000 Received: by outflank-mailman (input) for mailman id 513250; Wed, 22 Mar 2023 09:35:34 +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 1peusX-0001jq-VC for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:35:34 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on062d.outbound.protection.outlook.com [2a01:111:f400:fe0d::62d]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id e46c1037-c894-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:35:33 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DBBPR04MB7641.eurprd04.prod.outlook.com (2603:10a6:10:1f7::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:35:32 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:35:32 +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: e46c1037-c894-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jk4BzocS6YVlN0qL+ZZX6UuykIhqxcNobLzV+0YEkKi5lE8vXYOcZWN2TPM+AN8F/ElzJ9umoerGJ0zNqRX0L4UT/jxpyoGSJJdKWy4b1yufGUPqPKuEXOYU2bC7ckJFNMmoDunsyh9F838kmcswalAy69YbxdOFVbEdR11p7hPYR4y0/UpHxy4fVbUX9M7g7G6djBhHAyXSIObQSoS0ahYTtetXHoB4wisSNEHtQgXo9BSYA3KmdVMbB/vYKogdOJu+iL4Db4spQVlcIhBo7KzztyjjXZYqijqvRbfkPfAYrCmKNphVilu3rwkrxvLs4/84Ejpn0mC8savPKEyzeA== 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=0JpaGfQeLkQ56mz4Rxayz90QR0YFr21pkBgPHbqC+ZI=; b=Od+oxtFaVuY0sQfATwdaYxL5Yz9WylvuHhtc6kTPS8QSEixhl3iZmpJcHCwQlM9NYs3tJ5+DwPpWV0V3cZJI3kFrq7V+0BMhHIklxZUitz10g67JT5c900ECb54I34wsroJn0K2O4PJfEioapEjgAMYcu5PLeHzkE+yZssSjf/5tmGa1kFxKGRTWsz4b8pdanbrJIE+nF5XXNKgddp0BJIFl48mm9BM3X0ffAPGRdSjHpwV4qxSZlhCFYjCZP7UmnyFWxAT/7sIKv+jckrYus87mpAFf18YSGVwYJQ4ampF0WTUsJ14NvPF8dI2bW9WGulBjfsVhusvgdnbdKbs6ZQ== 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=0JpaGfQeLkQ56mz4Rxayz90QR0YFr21pkBgPHbqC+ZI=; b=1V876pnophvqlIHINHi6Q0IOxFmwr0BZ1ECxazEVNlW7S5oRAOWn6ASNElUigXG4vM1ic+k+TOWDk5M3Aa6MOUETkc7gVcyeY3iaag8boHsp2wK6Xbz06wr3gulUdz4jmUWtH1i+709DH8Lu75j6Be0xWd4xd5hsy6MdT9HjjFxdIHGRAizuovAYSf49PS/IBQjoAhIhZrKg49CDcyzvCymp6L1V28M9Om64mS59+YjV7zjXbtbYn3XPuMxktTpwwb+rnJKZHF20zLCcHrl44Pr6mTEsMGavwxmvXOxVYzGfdnrjob2/xoWbftD/E64t4dgM1QjhWGdfMWESJXCfsA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <5944a3ea-cddf-7ddb-d167-a0a0aa9b4967@suse.com> Date: Wed, 22 Mar 2023 10:35:30 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 11/16] x86/shadow: drop is_hvm_...() where easily possible 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: In-Reply-To: X-ClientProxiedBy: FR2P281CA0075.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9a::17) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DBBPR04MB7641:EE_ X-MS-Office365-Filtering-Correlation-Id: a8eeb0ad-8aa0-47ab-ee41-08db2ab8c7e3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RZDRYwvzunbBHDUqZ4sKjLOHB/FJ2iMxeylW1uXqSZQkP/hYgzObql3+/wgvFR/R7H75EkZ2aD42uLa0VrEjw/y0CbHd+luD5Ez2V1i/195AaXEKwciE4rJtj/8IEHdrRtRUQW/KwNdgv0mVKOArDEWWnMJO4Pe4rCnqfubg52Swd3en9kxG21ba+zsxCun4uqhcgbyymXIuviwxYxhpNyoMoJbwedW8As66ZhuxKMLB7A7PVTjskhNGE73FZ/2Ab7APVT9k5nhAtauKvwMDylau4W/mElBPNzxGc/iqjntxdNvAShKZCEpNTba9xWCa7htPWLSmiBdu2qtgh+J/d4tZ51BiHk/pRHqUA1Y01moi/YxiCHyUbNhYt6QHuR5aKQPsiqddvApVdgveV63dFHi/84gkgvdahDuQ1blNJ7VN2gMsDKMYaIIRCG54MYQhqM7MHgCDfid7vaPAG7y62ZdC0cfUDZHVXZVKuwaQnS+sBn6vMG2E7dl/FVGkNh1JZtpJaU8NCIg+c69WvNVIJZSvpdmWnsKI7aolxynWo7Htd9WbCHO9DZ/1lzTbEPn5KneIWvpuH7/yHwc0JqzhjCjEw6ZXZ2N5DcJE/Y2EWpGijxDhRtNH+Q+oisArkAyqNqxTBeNMx/x+6Z6xC0x0y55x4Uosgdk/0O/i6tIP3dKl6J5VitveRtG/cPJF/Vf1W5P0WXMFbu6QwroDpHCQhSiG4ojrZfFWqZ6s2hK+9IQ= 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:(13230025)(346002)(396003)(376002)(39860400002)(136003)(366004)(451199018)(86362001)(31696002)(36756003)(38100700002)(83380400001)(8676002)(4326008)(316002)(478600001)(54906003)(66946007)(66476007)(6916009)(2616005)(6512007)(6506007)(66556008)(6486002)(31686004)(26005)(186003)(5660300002)(8936002)(41300700001)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?7TwoteuI9778ly8mGtt0A2eNT0X8?= =?utf-8?q?GBqaYQ2bQ5eL5q5Y5/cODU2KAn6bRuE1ir7Fs1R7vne/wKaoDPn5K05QM3lU5nMM2?= =?utf-8?q?L5KvFeL0Zs1BpHuXpzbC1p0L+Q0COPEVkYFVaNoKKjsfveh0jalyJLUxO7uPe71nC?= =?utf-8?q?WMt8W8vN5+sezCBIZYEJLXndKRbKuNahB4Fej8viGe532Vz5gdBnm9QjlQEjdUcoz?= =?utf-8?q?a0j6eXJOigjtgRFo1fxdAQUq7X7nnq7BZLJsJUP+QbosWnsJ/3uxo+H2YvBlg0a8N?= =?utf-8?q?NlzFzzH5UlD0JlRZkvVzWuwCaSzEBq9k3byMxi5oj8cbA6n6dna+tyeEVK8qzsMlF?= =?utf-8?q?Tal1U3+zqWox7g2apPhwnBstZ7+bFYtm4mcuQXkpVZUs+VENjgS828n2Cl1WTsZ+l?= =?utf-8?q?yWIkT/A5BYA8DJLh0RUGGDLV/MFHy5yvxyCWzTl+eQKGCsHpKZUiNdRSIUcw3PR1u?= =?utf-8?q?kyhDqXZD7nl8toDxQK43F2NYjVrT9wiIlQY9Stu1rw4NBwKM5USfOA0xtKLZHaSof?= =?utf-8?q?BzsCcR6O8NmEGfm83xF0Fmj8Jpw+Z9JvP/c+HegETY1SpePMXSlL+hfpMrx+LivIu?= =?utf-8?q?XnLQlmFPVRDV3OJuPg68dqC9hGScNh6Ia9pjH0dd2lv8ajRD2IE27GPC9wK/+y2KB?= =?utf-8?q?GSrCFmUcTBqepydgdXP/g1b6lohfOieFQSwPaoBILKezD8umAmiAn/nvbsqUL2a6H?= =?utf-8?q?/prNnNtl4IIWDSVoUnpkF64OoyG+7KjjcU93R/F0vUILNSwsxo8RJ/3OeqV6xNaa1?= =?utf-8?q?so/f8qSCl0pR7VUoBeAVdwkuhYYsn6s7AOOEzXCa9JP97GSVDy2EcPO8ntHuzfMsG?= =?utf-8?q?9hF+crrmlZewwWGdfVmmZFXxkDXqgVuXmf1+u57sbcxKGuyNCxQPe4LyrQxagtXoX?= =?utf-8?q?8fwbLJK9O1aYWafS4UA8C17vqaXdAbP5ET3GIkGV2cdT19F+QVUVuszOv8DyGP0BF?= =?utf-8?q?MeR+ASHH+IqUzNKXItYtXFlKybsGm5ZO2e+M+8OsrKcXHu0PbKjRpuVVjxKyScqLO?= =?utf-8?q?yu8x7He9xEzcwVY/VqnlCvvlHJEpg6br4mTKqCs0qohtFU/Ymi5QCtk7leEMugNBk?= =?utf-8?q?UOmJhDC80XMi7ITGl8E80Sa7hkPNxwYB4ntcfVdYo6EwK29u8MiAj6LocZE8ajUDu?= =?utf-8?q?nsFme/m1VKsokT6f7lmB2+hf89tUQVKp9Z8Nqb/e8tpXA+MMBQnftQRn8UuR2W5DP?= =?utf-8?q?1kRgXfEt/Aasl4zb1JGYV+ufr5PxTLU2zkRujktfXJLyMAJQp/jDbjMhtTiQtY5iI?= =?utf-8?q?wCsKNbUETp5UHldgfEURmjBSH9qQdaKlA9A/wX6Dg5fO4r/2xyrKDE/dmZLm7qbUx?= =?utf-8?q?GaO0m2YDHbfgj+BiWm/Tj/lHIo7hi9sh1KjG97g7FE8tTqBTbn6o7kYRqdbfcAsRn?= =?utf-8?q?0LJyvt2L81ENfZ369jvG7zp+PVR/ISuz1iU8sGXcm61RrGwDp15199O3a10icPZ1q?= =?utf-8?q?VahnHKMqpUOKdxl3p04gcM8/TLIaoffziIVGq0Q+gEHr4E6F+sTvFKn1FulM5z+0Q?= =?utf-8?q?75Rc26aSHsPy?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8eeb0ad-8aa0-47ab-ee41-08db2ab8c7e3 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:35:31.9947 (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: bVH4EUnqt20qmNFlTk9Bp2yCtaNZ6Z8ALOyxEtdVIo5VBisr6Zt+RrmZDHVGptMGMGLg57QagvRE/Y9FxzkyLg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB7641 Emulation related functions are involved in HVM handling only, and in some cases they even invoke such checks after having already done things which are valid for HVM domains only. OOS active also implies HVM. In sh_remove_all_mappings() one of the two checks is redundant with an earlier paging_mode_external() one (the other, however, needs to stay). Signed-off-by: Jan Beulich --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1522,7 +1522,7 @@ int sh_remove_all_mappings(struct domain && (page->count_info & PGC_count_mask) <= 3 && ((page->u.inuse.type_info & PGT_count_mask) == (is_special_page(page) || - (is_hvm_domain(d) && is_ioreq_server_page(d, page))))) ) + is_ioreq_server_page(d, page)))) ) printk(XENLOG_G_ERR "can't find all mappings of mfn %"PRI_mfn " (gfn %"PRI_gfn"): c=%lx t=%lx s=%d i=%d\n", mfn_x(gmfn), gfn_x(gfn), --- a/xen/arch/x86/mm/shadow/hvm.c +++ b/xen/arch/x86/mm/shadow/hvm.c @@ -204,10 +204,6 @@ hvm_emulate_write(enum x86_segment seg, if ( rc || !bytes ) return rc; - /* Unaligned writes are only acceptable on HVM */ - if ( (addr & (bytes - 1)) && !is_hvm_vcpu(v) ) - return X86EMUL_UNHANDLEABLE; - ptr = sh_emulate_map_dest(v, addr, bytes, sh_ctxt); if ( IS_ERR(ptr) ) return ~PTR_ERR(ptr); @@ -258,10 +254,6 @@ hvm_emulate_cmpxchg(enum x86_segment seg if ( rc ) return rc; - /* Unaligned writes are only acceptable on HVM */ - if ( (addr & (bytes - 1)) && !is_hvm_vcpu(v) ) - return X86EMUL_UNHANDLEABLE; - ptr = sh_emulate_map_dest(v, addr, bytes, sh_ctxt); if ( IS_ERR(ptr) ) return ~PTR_ERR(ptr); @@ -457,8 +449,7 @@ static void *sh_emulate_map_dest(struct #ifndef NDEBUG /* We don't emulate user-mode writes to page tables. */ - if ( is_hvm_domain(d) ? hvm_get_cpl(v) == 3 - : !guest_kernel_mode(v, guest_cpu_user_regs()) ) + if ( hvm_get_cpl(v) == 3 ) { gdprintk(XENLOG_DEBUG, "User-mode write to pagetable reached " "emulate_map_dest(). This should never happen!\n"); @@ -487,15 +478,6 @@ static void *sh_emulate_map_dest(struct sh_ctxt->mfn[1] = INVALID_MFN; map = map_domain_page(sh_ctxt->mfn[0]) + (vaddr & ~PAGE_MASK); } - else if ( !is_hvm_domain(d) ) - { - /* - * Cross-page emulated writes are only supported for HVM guests; - * PV guests ought to know better. - */ - put_page(mfn_to_page(sh_ctxt->mfn[0])); - return MAPPING_UNHANDLEABLE; - } else { /* This write crosses a page boundary. Translate the second page. */ --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -3441,7 +3441,7 @@ int sh_rm_write_access_from_sl1p(struct #ifdef CONFIG_HVM /* Remember if we've been told that this process is being torn down */ - if ( curr->domain == d && is_hvm_domain(d) ) + if ( curr->domain == d ) curr->arch.paging.shadow.pagetable_dying = mfn_to_page(gmfn)->pagetable_dying; #endif --- a/xen/arch/x86/mm/shadow/oos.c +++ b/xen/arch/x86/mm/shadow/oos.c @@ -577,7 +577,6 @@ int sh_unsync(struct vcpu *v, mfn_t gmfn if ( pg->shadow_flags & ((SHF_page_type_mask & ~SHF_L1_ANY) | SHF_out_of_sync) || sh_page_has_multiple_shadows(pg) - || !is_hvm_vcpu(v) || !v->domain->arch.paging.shadow.oos_active ) return 0; From patchwork Wed Mar 22 09:35:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183756 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 4A79DC6FD1C for ; Wed, 22 Mar 2023 09:36:10 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513256.794011 (Exim 4.92) (envelope-from ) id 1peut1-00047o-2l; Wed, 22 Mar 2023 09:36:03 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513256.794011; Wed, 22 Mar 2023 09:36:03 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peut0-00047h-W1; Wed, 22 Mar 2023 09:36:02 +0000 Received: by outflank-mailman (input) for mailman id 513256; Wed, 22 Mar 2023 09:36:01 +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 1peusz-0001jq-Ga for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:36:01 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on062e.outbound.protection.outlook.com [2a01:111:f400:fe0d::62e]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id f4e0f30a-c894-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:36:01 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DBBPR04MB7641.eurprd04.prod.outlook.com (2603:10a6:10:1f7::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:35:59 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:35:59 +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: f4e0f30a-c894-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BrCAUnBywKtY8ZQ6FXXQzx5sfC4rqLyIjbjXkpYzJ1d0gFPx0eIiKUcUY7bhMPCEPFJWZqOH26kEDB0ygtUMEcisuDIuprohlDN0g1bT2snJ5w3dHmWin+HASgp/YccLDR3oRv9zoDJ8Mf3jZ2il/PuiSf+CE94THZXcCmgTsgF5RfU/qMk2DyOfukKwmO2Ta0weqQrWdbSu4YYnFhNsgf+oA7/Og0MxLMdZo0uPTgnJmDBIDwfG5h6pIrbJ8++mz4Gb22HFFVlhdPoBmC8niJkiEZKd9DyX23KDGxGUqjlvaPQc+eS1onSRpoPNyfjD+RhgRF23x81PLch+cACtDA== 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=UD+Cm4n1hMaiv0YQYjnlNZKs67pHNL/O4K2oCASMyfw=; b=JgdODgcEgga9wAiyeifR4A/bj9S59s2TDEeMznZ4v/G2YocYOrK8VOZdDrZ1vFFjpXWk3GAGBRGKPTH99a/gvGiOfK1yxZHq8c9W6gCuneb1pCPQPtEEHzjCWsCzr5OgPJg3hmuJpiNTbP6mjZyMDffmwO1kInJA47yw57+BO4OhmbSzMfuASs8DhQGBhSgkVGh4wRLAZS00JLHh/qVVcsRmX/lp20txTEzur632QFJYuWQ81UcT04KGmY8R2PCtLJAkdsPxb3OPOs5KSPoiagyOlH/n07NtNnRQm/R5kHgUjyjXb1DVKbizqoB6diK14T6tebd+IbuJKKjKwNMj8w== 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=UD+Cm4n1hMaiv0YQYjnlNZKs67pHNL/O4K2oCASMyfw=; b=xZQpZrnXgN0AJj5uEji76qTOSc3BdiB5NMQBPNV6IqpqKXe5jUdc3rwR+v74oCXv2nO07pkbQ8T2hdRkt4mborZ+lpPtQCE5ZZzkkUHGtBq36TS8GCVTpIIPThhWaDd6VtvBhV0Hdgm6dgjjcyRgx1FiSKrUsm8w6gD5F2PddPe7W48v4BjEWaw9b4y7doAJ1ntAFfAh3nlEYjdJGCOMdqPUHGhknw2mmOcXgL0wIaF3ApvTygH6sM3bJqbx3ScPPDYLcTQr1lfajrg4fgXUWhOD2LLomg/7GLyrvQ+FvurnHNANdfLpu8EfVbykXCMCdYFbYtyGn7m7y53Xy7cxBQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Wed, 22 Mar 2023 10:35:57 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 12/16] x86/shadow: make monitor table create/destroy more consistent 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: In-Reply-To: X-ClientProxiedBy: FR2P281CA0090.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9b::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_|DBBPR04MB7641:EE_ X-MS-Office365-Filtering-Correlation-Id: 1bafbbeb-5ce6-4fed-28fd-08db2ab8d837 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CrKsTN6f+u1fptsMZUPigNOt8rPKzbcYc3qkX3sUIiqciz+nyqUXr+wUr/mmBfzw+yrtpkWxZJcHtSHnvLjyQ4h9mXq6/oOeAAByKTmE6QYHoa3xG+Gx+Qn4V3ClMG4+12O7FY0PTUTnQGxNdR8MuQY8KHaOr0zS+tK1oob4YhzWqArWHJB8K9bmqVhG78MUb9niN/8Ft/aqqy6rCcooVGZme1LtSRvMAODQrNXZz4QEqdbHWvnX64BAKML3V5D/Z7HrJjdu5FVN8cNZMy46VYx1DigwJZZ5KJcuUOjihdwwRUtGJie9x7/ONAekcG1QxpyxhbgLkIvms6wkzNZ7qc+gp02wOVcyaLcUyu9sr4ClTRl1TT1LBVpv/btXiIMdy4/wRhXjSZri0gMzb5LZqMb0c0btDXWF0yrfMAZYnbhie7Hh9PJtmF1vEUmg0T8gkfU93r4uM2zgjTQ0tSpzDTc5BeC1sW37KzkKbvUlNAjnqNGmyDU2lNpTH1tyVNEB4mTQ6vARinb/d4h/vdpUO55oDrG7ePinRch0jhx6ZCvXs6EpTGTYQ3/Opo02MgI0oqmASMWqtyEQV3oUkc9x5gcU7ZCqmXWJCs+YDqRNsGnGBHEJEAetP/MT1ICVlZs1CLHYA5SKn0GZYDYTdnTBw1JqSKC+ksw3Qd0n11WkkCcsyBKGYtKrooR/qC+sWqRqW1tThj0LKRlZvBMZf8S5T/W97Za3HOHlxKgIGUz04no= 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:(13230025)(346002)(396003)(376002)(39860400002)(136003)(366004)(451199018)(86362001)(31696002)(36756003)(38100700002)(83380400001)(8676002)(4326008)(316002)(478600001)(54906003)(66946007)(66476007)(6916009)(2616005)(6512007)(6506007)(66556008)(6486002)(31686004)(26005)(186003)(66899018)(5660300002)(8936002)(41300700001)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?HNwFIg5ud1Jw8Dvc0W+SO/wos+Wr?= =?utf-8?q?VtcsdFy+XLvIv6vVAR/lyHyWvz91juuQzgpkpxL84EScmi2meuWGYAOw1cYaVTBkO?= =?utf-8?q?YfLU9Jt9o7C5PCUXKTm1m61OhW81CxBNyRrzVaMYNdyl8aYcTswzuj10PnWFXCyRZ?= =?utf-8?q?9bh3dhvMzRnrZVLy2JCcklHVzHct3npjKvSqcbU4ZS+pVzlUen6wRSv1Ql5IwTkkj?= =?utf-8?q?i952Jicb9c9J/oyM+mAKxEDqa+idsPjFuM6SSeBEgklkBhVOQEJLsPjCx405wgFPn?= =?utf-8?q?RB4jTyVu2lnD6vY89ZcLec+6tGSSWabFaRjQw59fshuAyxb2BfAqHngmpfwiGrIHh?= =?utf-8?q?aU02RrnDJZGcwBtrIvENim7I/eyJkgC2pi2mXEJi5xiCKi7qYGoHPb4kiqSZErTkZ?= =?utf-8?q?p2BQKqz2oKUC18x85pkskVrrNUQ1vIeAXLAqPklUaL8/RzwsJQnpZJkFYTapDPaEW?= =?utf-8?q?CLDijjqze3i2dmhYMKNXVGejOEvWkdMuf0yfzoINpEFw1+sy+QY2D6/PX/VrNKzmc?= =?utf-8?q?I8mpBGDUa7n9TU8tGV2KI42hZxO7Uk9S81TR0hIDyaWvazQlnDxbHjgg7BW7nAbvO?= =?utf-8?q?Wj2H2iK9mHi/BBMZCEl6vecgJaVAOCWxvSIdErYL5KmxY7DltD67+nduzWZmAPHQb?= =?utf-8?q?eTY7kiV279779N74hddATPXFqvmdxpmmcZKenm4lF5Dl69RSBY96esfKhrTTFFkcv?= =?utf-8?q?amldPshYD235zvledQtFMiHB48Z6bbnxYPjI9F5VIEUEvUlEOyTx3y9OZd5dh5+4b?= =?utf-8?q?lgiuF93fseGQAqjBNE3isYpUK9f2UlznlZ34nzBy42H0K7LtBssIUnF8xTRqMPzy1?= =?utf-8?q?yCuXqlYGvn5OPvToEQGTyZkO2j+k8DrDooI/9f92E0D90yJwZ1DPXqXwVh4u33+TH?= =?utf-8?q?NYaBJdaK2O6muclIWIsNd0gvOplaGELN/e0HIg9NDr3Yk0pTy3RvLNr5K2xm0MYF7?= =?utf-8?q?rV0sZr2CwjWDuD6MIpn6/c+C0tNrWnJ4EMir8rKQiqA4ED9yuVCbwLDioxNP5+jf8?= =?utf-8?q?QL6nIinYvyt+1QUvDcs9UKNwwxL5vNw6BWgEGLRZPscvLEn7rpZF5S66vjUqRwDiv?= =?utf-8?q?jmQLR+DaHKCEBXw7L4DV+00XhsLtlAMjofxvSryoabKb4DrXTIsy9w70S+OmSUD86?= =?utf-8?q?OcYja6/G+WSIgNhljwOuTiH7VY36SZ6W/Eo+dP+i0QAf7uvLUZpOpMZgZccDMSW0F?= =?utf-8?q?O6mNLYze9Sp8ZuzOWYXa277aDvMzX2eoNme0bPatMA3EKqc805CM1z0EVHCDv9VyY?= =?utf-8?q?cEmMeW8clFhxJEDLBqkczZZCjP2zRNBU1Or54fdyE3sptDPk2EGgLAkcT+D2x9Mri?= =?utf-8?q?oJ21sBZUzBFh6nxq5IZZmdSSxPxFmVflg9ObTXkfP8obRmsudYwa14rWxJ4V23N+6?= =?utf-8?q?QHuGQb9pHqUbmWM3Mgq7FbnflHVNQi80SeFZlPM/0ffSjn6rPtH+xpj9DS4rrM66f?= =?utf-8?q?WUH8uF6fC0N/qIQtgYGJQqNShkn648UCHicA7kv3OobeAdndBR6XmZRr4xQjMev+b?= =?utf-8?q?TWnoiJ37zS39?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1bafbbeb-5ce6-4fed-28fd-08db2ab8d837 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:35:59.3837 (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: Qssu2Omg9wHLTslHR6lk2EUlFAvv9+RSHVUTgMHThOCzfRy7tGjLF/w0TY8W8lwo1riZUmrnq+hA6Y1wy3J5UQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB7641 While benign at present, it is still a little fragile to operate on a wrong "old_mode" value in sh_update_paging_modes(). This can happen when no monitor table was present initially - we'd create one for the new mode without updating old_mode. Correct this two ways, each of which would be sufficient on its own: Once by adding "else" to the second of the involved if()s in the function, and then by setting the correct initial mode for HVM domains in shadow_vcpu_init(). Further use the same predicate (paging_mode_external()) consistently when dealing with shadow mode init/update/cleanup, rather than a mix of is_hvm_vcpu() (init), is_hvm_domain() (update), and paging_mode_external() (cleanup). Finally drop a redundant is_hvm_domain() from inside the bigger if() (which is being converted to paging_mode_external()) in sh_update_paging_modes(). Signed-off-by: Jan Beulich --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -129,8 +129,8 @@ void shadow_vcpu_init(struct vcpu *v) } #endif - v->arch.paging.mode = is_hvm_vcpu(v) ? - &SHADOW_INTERNAL_NAME(sh_paging_mode, 3) : + v->arch.paging.mode = paging_mode_external(v->domain) ? + &SHADOW_INTERNAL_NAME(sh_paging_mode, 2) : &SHADOW_INTERNAL_NAME(sh_paging_mode, 4); } @@ -1811,7 +1811,7 @@ static void sh_update_paging_modes(struc sh_detach_old_tables(v); #ifdef CONFIG_HVM - if ( is_hvm_domain(d) ) + if ( paging_mode_external(d) ) { const struct paging_mode *old_mode = v->arch.paging.mode; @@ -1864,13 +1864,12 @@ static void sh_update_paging_modes(struc make_cr3(v, mmfn); hvm_update_host_cr3(v); } - - if ( v->arch.paging.mode != old_mode ) + else if ( v->arch.paging.mode != old_mode ) { SHADOW_PRINTK("new paging mode: %pv pe=%d gl=%u " "sl=%u (was g=%u s=%u)\n", v, - is_hvm_domain(d) ? hvm_paging_enabled(v) : 1, + hvm_paging_enabled(v), v->arch.paging.mode->guest_levels, v->arch.paging.mode->shadow.shadow_levels, old_mode ? old_mode->guest_levels : 0, From patchwork Wed Mar 22 09:36:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183757 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 CD2EAC6FD1F for ; Wed, 22 Mar 2023 09:36:45 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513259.794021 (Exim 4.92) (envelope-from ) id 1peutW-0004gr-At; Wed, 22 Mar 2023 09:36:34 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513259.794021; Wed, 22 Mar 2023 09:36:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peutW-0004gk-7x; Wed, 22 Mar 2023 09:36:34 +0000 Received: by outflank-mailman (input) for mailman id 513259; Wed, 22 Mar 2023 09:36:32 +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 1peutU-0004gG-J0 for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:36:32 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04on061a.outbound.protection.outlook.com [2a01:111:f400:fe0d::61a]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 072af97f-c895-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:36:31 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DBBPR04MB7641.eurprd04.prod.outlook.com (2603:10a6:10:1f7::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:36:30 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:36:30 +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: 072af97f-c895-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bqWKzpJs2zGFEQpjTbCLJhH45ge/vnrvMXDsrMze0I7fT/E3u+fNB6iT6L+WAoHfjNmxZDZl5Pg5Z/Cqzk4H7k+KQr+yExP8OX8EiLelo4pYgoJ752gsjESCAhj93Ghr/sVcy2AQxnaAiDo3vcDjyeG2CiDvOOGJi65o5OMNEbD7Q3EqcobBSgphZQaE3sz79WUj4KADh+2ccAZDMNwpm5dPvWZKRfgE49Hu9nNXKJDUHyKPl4Uin7F0sjI6SD2rxGLiaya/jv4YnUEDQGJzDOjgJGRn00IakOoPsuMgEJUC/ZXlbxCrFvIKymPVfUhMEI+KYw0t8lOp17WzhdN2tQ== 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=49lynVsPvUKe3NRmbj2l3SPJzRr48ByaR2NLWqRe4tA=; b=AeoLxzGN8qDvBh7cHyW6B76s/aSaTnXXEFIurjH3hhZ6vVRBUe6Ft+s48Nc624LwfBCqjQBuQ561fsY7i/Tt0jBiNx7UMclCcYwRNC51aD67dETf7lEsLO6C/r7zsU2b1vSSFVrR+BDpQZvFETkE5x29X+nDmOqllKt2ZI09Ra4jJwadAHwQhmStiypGBfKsC/2LIx/Qp6UzRw4ZrHKwdko/Jletuufb5060ujZ3LEG90xLNZ2MpPMfxa7DOds7EfSwidB72McQX8nnpR+AltmrcRTFsoPn3TEVUYc6ytMwFoRMb9nkid7uSGzHfS3zM24rTBZOo3jWLHhwZ/s5TvA== 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=49lynVsPvUKe3NRmbj2l3SPJzRr48ByaR2NLWqRe4tA=; b=TfXGYLDl13YODTXJLVz+2nmV+L9Brlu/NcXNI9Gj3LYvIFmDjm3YFgeBaHeYWf2gNnYG1So/FCeFBB8hhQYkXeERmC6bzGMgy1QEx0V8Stlcx9dUFyZH+2raUCagan63H3pMkcZsfC6p5GenLGamqXsc7i/wT+8DcZGwCOqUWDeG4mX50H4+THVUBh4Ngh7Vf4OJHWHp6hvLtRKgfBR3cIE7jR12mnDGVrVutsz2keAIFPpMqqaZR6d1Q8RaGt4AEFK2yeeSoucDS00uF6cG49LAir6kIqFXx0IIltSswcmGZ16Z7efKH8MbgZRXBLcKFCsQgHebLb5PT61bLVLabw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Wed, 22 Mar 2023 10:36:29 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 13/16] x86/shadow: vCPU-s never have "no mode" 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: In-Reply-To: X-ClientProxiedBy: FR0P281CA0052.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::20) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DBBPR04MB7641:EE_ X-MS-Office365-Filtering-Correlation-Id: b2925894-c725-4e64-1af8-08db2ab8eab1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sXm1oaLUvtSMJk8fztQYtCCauwUJ79bgL+IVJvzv598YKWewselL2zX+2PhTKeVVk5xH+RwYeSM/xR748uX2w2nTId/5+CaUfpGBQ11L9wYAqdPSFAXK0N3xOSV7VZKHoyHRMq4oyCnx97tPGwn+cD+DlHocl5N/UU1dhMw5nzjWz/UGeD6dFxDGlncFuqq7VcCHJUdqXRsKN1OCPOyrgbYxxUZ2oOCpZDQVNI2C9GI4tYnshhpQJTyrHZyXAid5kvj4lD0/jw6ygBfElYsLImHB/tm+h2xRcMZShtFNY1RmU9frzfHlgGfa/ARvMlGmzoDmQDnAACijTD9kHwGipXjaC7+BfhWUckW3yYjrzGgw6UdlpdnODUABjwBta1te2T9DzwivZ329g3wU2Gfa2lw59Adxikyl+l/C3EBdGNkmSGIy4AwiHf1vkGuGTOwcdqy7Kz9pAY0l8uvgjtStoETvm77ngyKKDJHXFsoyPUSZr1xsJO3jv85uwIgmwpDjfpqkk5k4RpxU5bnFbBq5mQbwFzO53x28YIUZmxxIpbJIzW7NuGHLwHxusnmS++MadzoIZFAp55wt92H+hfs3qdNpK46nQO5wfMxctfAXINXdlytzQU7CMWCe5zC/xdp5fT9Lf0AonE0uv/EalBNsEfZ3/J25R38Ik/tnn6s7Htyu7VxGxSD7umFDRRJPXJKio+LEH+BB2VMs4C9vZPcEUqJY+9Df3tQ57J9rpDSrQsM= 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:(13230025)(346002)(396003)(376002)(39860400002)(136003)(366004)(451199018)(86362001)(31696002)(36756003)(38100700002)(83380400001)(8676002)(4326008)(316002)(478600001)(54906003)(66946007)(66476007)(6916009)(2616005)(6512007)(6506007)(66556008)(6486002)(31686004)(26005)(186003)(66899018)(5660300002)(8936002)(41300700001)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?MZORGi9TbfUiJnWwF+NMBVUJjQNT?= =?utf-8?q?v/7pF+ZMZEwcmuWJiaOrKrTJXGIeJ5GnwIxgrzmY8MTxQe5W6o2Ip6hr313gJCC+4?= =?utf-8?q?oBgj0w0nI9UallHZ03uWKTL/46cRCImtbnwkhB87jmzn1SAEmm0M3jXP+9Wi8Wsy4?= =?utf-8?q?qD9qyACG4khcD6M1eP7jOYbyvDp75M7HoLhxq/V1t5bYiFiosjcvdhQS5XKRA8U39?= =?utf-8?q?0TmV2fIASKVSeb5Aeufm+1N2igUxcQ+x9k9sJKI/zPZ9gly2I5cFe/c66/a42f0tA?= =?utf-8?q?WGd49JryNxJeqt83QqhzU6bnHVPJYhbeUZYQ8NrjSvRLrFQ/R5XAw2LJIwUfZkbkb?= =?utf-8?q?SIEQ/Pm7aoN3fjn9RL3uy6otXvUFqLHApruJap3+e159ALoYEi404+OXZi+WLMRs0?= =?utf-8?q?FvpDyZyI4Omn6xG8N0QKJqLTUlirzOyA6OjDk6FBprniYLpStQAdWOqHHidliLw4S?= =?utf-8?q?UtZyZZ/fLz2QNgKaX9nFvsLUIRcYjcIIMzM4EBnEQKgxDUOL1P2nEJFyAyx1f9NvK?= =?utf-8?q?kwlGJ+HxegEx16rMh+7lsIx+sIbymXonlZGmrzQbr0+2Iudx3xYDGkEKT+9DRIe+w?= =?utf-8?q?eoXlcz8Tqw8OYWzTblmLCu80uzruZpuLcoyQMVsVnG5KkWAvzJyAAf/KUmSRkSCT7?= =?utf-8?q?JUz3RnIerQ/g+tLcKyaXCfXKVXOCBAg2mzXYNrYgDmCCXTP27dbAeAj7roHXrMDk8?= =?utf-8?q?q5OtBySg1ytljQ1JEisS9brlv5zFBT1z273lxB3Dty/RvQ3tfPBv6WYHLd6L94+fo?= =?utf-8?q?UzrgSskCY3uYt5QlLv5XIs05LfujlgzzP84IP8KxIjCh2oxRqahLXMzVhhDIzl9kh?= =?utf-8?q?Uq1uE1yZhErYApRAFU5OZAobgAal3Da4eE9wJtmjZny5WRYnPIcr1Wvst1UL5gdaq?= =?utf-8?q?Oob+U6Hpw+rzy1uCFZ29HvhoNVbPNtA+7TJ+00UZbmPkmtUeaI44dF0WDhBc9n7LT?= =?utf-8?q?U5M+hQ+0vcLMQYgIdrMDflpbN55tVNvpOOan7XNYlmdmTi63/m2OcLvQcnDP9IPUl?= =?utf-8?q?EbQ/O/IEWRbZp1EZLk/Y4dBtS+Z1twBxNLy0tK1SZ9cckwcReys1RD9Eb7S4aYXrw?= =?utf-8?q?Q1khQe6MrFonHxwcnrnlRNBAkDD+GAnUdQQpu+2SMg0WZg+C56QBlEfkph+CLaOrW?= =?utf-8?q?7CxHL5LIeYRqeiW2pCkf1eWcA9Rybbbchd5SbfXqPq1MoUAaeXQjzAvGzDMz4pPP0?= =?utf-8?q?LQldvqGVc0hqNlTH92oV4qq2x6LpE6TTxYsOvOs99XEbCsYVnofMaBFaPgA60VwC4?= =?utf-8?q?ZLIU/lqK7YUCy766jEebjGcDuLoCtIIremBzuzAfslT+TZP4B+knKh53/eWHjKEwt?= =?utf-8?q?gORns8e5/0Qgn0/M/x9p7ID5+EHVpK1eLZxTNZaQ/xNNNJOwp4qT5N0UQHWDVUrMU?= =?utf-8?q?GzJVcRU+ffBVSTlDDRhk8ZyEk+JpJMlB/GWg/sw1qaJSEdujy8+NQYEcnc5Fr7iXI?= =?utf-8?q?Rr0rPEj+bZkCuPx165bqsBhn35yb+IESFYTVUfE9rIOYoFUJMxkHdnzZeZWc+ekWq?= =?utf-8?q?hLe1VrY+2nSs?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b2925894-c725-4e64-1af8-08db2ab8eab1 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:36:30.3818 (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: 5Grlt6sdbNUmP+0Da2NqybuVVG/RpnFcroPtY7tW2Z12GgMCpjRlCwuuQt54Vr36YjdyR/QygXlgap3xHzko7Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB7641 With an initial mode installed by shadow_vcpu_init(), there's no need for sh_update_paging_modes() to deal with the "mode is still unset" case. Leave an assertion, though. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1864,6 +1864,8 @@ static void sh_update_paging_modes(struc make_cr3(v, mmfn); hvm_update_host_cr3(v); } + else if ( !old_mode ) + ASSERT_UNREACHABLE(); else if ( v->arch.paging.mode != old_mode ) { SHADOW_PRINTK("new paging mode: %pv pe=%d gl=%u " @@ -1872,11 +1874,10 @@ static void sh_update_paging_modes(struc hvm_paging_enabled(v), v->arch.paging.mode->guest_levels, v->arch.paging.mode->shadow.shadow_levels, - old_mode ? old_mode->guest_levels : 0, - old_mode ? old_mode->shadow.shadow_levels : 0); - if ( old_mode && - (v->arch.paging.mode->shadow.shadow_levels != - old_mode->shadow.shadow_levels) ) + old_mode->guest_levels, + old_mode->shadow.shadow_levels); + if ( v->arch.paging.mode->shadow.shadow_levels != + old_mode->shadow.shadow_levels ) { /* Need to make a new monitor table for the new mode */ mfn_t new_mfn, old_mfn; From patchwork Wed Mar 22 09:37:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183758 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 2904DC6FD1F for ; Wed, 22 Mar 2023 09:37:25 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513264.794032 (Exim 4.92) (envelope-from ) id 1peuuD-0005Kk-NB; Wed, 22 Mar 2023 09:37:17 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513264.794032; Wed, 22 Mar 2023 09:37:17 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peuuD-0005Kb-K7; Wed, 22 Mar 2023 09:37:17 +0000 Received: by outflank-mailman (input) for mailman id 513264; Wed, 22 Mar 2023 09:37:16 +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 1peuuC-0004gG-1W for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:37:16 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on20609.outbound.protection.outlook.com [2a01:111:f400:fe1a::609]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 212db34b-c895-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:37:15 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AS8PR04MB7526.eurprd04.prod.outlook.com (2603:10a6:20b:299::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:37:14 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:37:14 +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: 212db34b-c895-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XFvqM1KPxmtdbYXZqIDWhEjl+u3JlLZYGPxUL5a/FAe/RNe37xuwVCz6l0ynHNwSbWx+0yXfS29pdz+M9TMRpVMKRlBbzenxHKO+MD81HCsi0SmyEb23HTYwaQTtjUH1nhn9439XyruHe9ue+/9hFWyY7U9qBf5cEkuzvX81QswMHr5ELh29wNdBVGB6lDfiw260Pl3COJj3smsox0sGj00Bx5Ci50AGKUAv9s1hK05w9FqJzCBivWx68ielPWz4ARoko8CWsKhwojhFAhHMQ/fVBvfGAIDMOeKT7TSzhjujGCxtBNPCLU/GK6XfZy0BVRvyA1D9wjvpSuy/m+8Kkg== 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=PgsxcZsHQjbNHsFKcOrDGaTeJBLRhJa3sv6jEIQVDaY=; b=Uwl8RRsesj6Qairbj6d0oPaeuxxjd6rimp8Md+m1FJEPaaMUH/PKnLGFItGqA2rQVL/C6xhBEwA5PG0pm31S3BFp18OWomjarwOHKR1gtmWHKCo0dK3hsfhFBi17z5sjJHwhFH+l2cujoFM29qpy1RCtyJhNUNngvzTtN/E6oXxKNDmY78aZI6rg1d3Rh7wNZ129dykH4rpw2/P56m+Xgj3RGKSz0UhLhtrk+HzZ98OP6+okBj3eIYxwvTRUBDWJ0DpJMxIkSu59gIHzIqvdX0xijnbLED6XGDs6BN4uqXBTe8RaxaRxcJYuP36L2LtQWwm2Z6CDTTVSRZQ9SZAhWQ== 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=PgsxcZsHQjbNHsFKcOrDGaTeJBLRhJa3sv6jEIQVDaY=; b=iw9ZssvLVdlscb8P9ZQM8BLWS7BtGEVDw+NXYWE3B+RbUT1q8uAwcdCPspDe93e03wvCP/9ii+0qf6q6Wt5F5mdwGS2/qH4MUHhrSUUrnDRyfVouZQM1IanhtF4P2QGSe9JcdHljj/f1bQX5EYCIoePZ5wv+V+xnqNmNEy+pd3CZ52Hjz/ypEjzczUafUD5Tl9+hJo57dqoJGuWM3iz+jaQIggJxqXWqvGJoPy36JBfbZuDcgpGFFjXD7wu8TqRzAGpPKm/gNm3DPlb/NYvxaf2XHa9ipqbWY4BDwGG0ZD950u/GX4xc1B0+3+OLjUnSt6fscf8qK3UH9ZAZHkNkgg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Wed, 22 Mar 2023 10:37:12 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 14/16] x86/shadow: "monitor table" is a HVM-only concept 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: In-Reply-To: X-ClientProxiedBy: FR0P281CA0136.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:96::10) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AS8PR04MB7526:EE_ X-MS-Office365-Filtering-Correlation-Id: 07c9d617-39e3-43b8-3589-08db2ab904aa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uG8E1IUfvwhw1Uesqg447SrociDesXGcqF7L3UqfxXK9SbPqD0ielDckzwXxvsnTxNWV4r2HjCfaeisJ86h5C13ZLawpm1OjE86fdUdWlCt0pmOnZOddproKTX7TKhfsjyXIr2Xagk+wcSC7KJkFGNYxpgzlgLx6hx7Tc+b+V2ZyoKoJ93zRNDd+Yt2c790LFSoRno8WYfhux8OakE1Zy241dDH6wK+v8Hww4/pkRSM1gDnOHKSk7cW98Je7OrGwN+qYYpw72yGKZZb2KAJyEtM0BeDWuvnN90DGsDMThmzgKhHHT/im/Or++vdBVR8REuiu7RQQlu2iRVjQqlORzXrvMLtvDisiFa+6b4yZKxTNn8xBGyDWoQWj9KMIbWVIUyh1QxrAMn02xcWqvyU3g4YxelZyjQdZEyk7qU1bahcug9HWQ+Y6eRip1bWivIsQfD8GkthKBq3z4VkGG7X/1pdE99dLcYbCVhn84v4JtTxvAbQ4Yay7F7IyqW2qg8eqTD8BjwB/XRcmjOF4q8fdeeoQEjJsr5gU42UVHGgtOwXxsWVnUzg+dbKxF05eqxL7xsgNNonqetZET5ZbK6L9WsW+vLTNVwPLmY0JAA0NCqZvJr126jOadVFMC9oaA1863wmocVAkKuNr42pDc1idOa8DKT6gr3TA699JT6Xh/w6xmhromZGTUpaAf4iwl5rClquGiTu2v/2n8HfxRfvIEzThjfj+zM6Gob1QV9/ySKM= 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:(13230025)(366004)(346002)(39860400002)(396003)(376002)(136003)(451199018)(5660300002)(41300700001)(86362001)(38100700002)(8936002)(31696002)(36756003)(2906002)(4326008)(6486002)(478600001)(2616005)(186003)(6512007)(26005)(6506007)(54906003)(8676002)(31686004)(316002)(66946007)(66556008)(66476007)(6916009)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?CgC1tivebYcRqqw/2JCZhcCX9Plk?= =?utf-8?q?lVEpOsXkVsnAG6E0X/GN+HiZVdNyalhE1DkM3EFDPIxtVrc4fBdFOFTQJIg7X2hB+?= =?utf-8?q?B1A7cBECxQ1QQXWdI9MXG4gQ6aPX1qkus6aF5ziUc2UI8W8Tze0KtC6hQg/A+kqpL?= =?utf-8?q?NwyoTP/+IQ7PkcZsJk4bQgDBghn+X4HOjwrXUbTrLdcaOh3yhs1Uf5RQumdyct1t6?= =?utf-8?q?rABkhGCTFd+s9AE93WqPLvMNteeTPatpBr0Y66JWccxHpazVKQZyt8vqDZhWPUrpL?= =?utf-8?q?oJGIc+D2W4OcQFobnFVpkYOZ0OCJS0swLCekwHTGpQOpE4afkPTdgpN+aIIMsHaCF?= =?utf-8?q?DvsmrrdJELrjl2XQOMu42NFjPRppHri6t6Ih33jnSp+SGKpHRqDWoQX+Hsx0hFGd/?= =?utf-8?q?m25ck3db4KbnzstH0661M79USWb2nG9+jtkWRqk7m7Y5qQtDD3MwF4ftRtaMW1gAp?= =?utf-8?q?8q7h4+Ujz4N+6wpB2114hNgpK+dre6mH+RZ1BNhtPR3CasxwR1rtXWFB2hAQrSiNJ?= =?utf-8?q?6G7IMYE9/AMioBLMjv+Vn1cU6vRbqMYS8cMXk2SZ/An3IPd5SKs5n1MBfh5zy/FQm?= =?utf-8?q?bSAeAGbdcsn5yE5LQCNJXMrHvKV78dqCXBWP9ISu6i7bq4avNEQmvsjvNQ2xDwoK0?= =?utf-8?q?wi5oBoAnf7flMSz/NT2/q3nB8Z5EtO0gs+4jVYTwEG/4zGOC0rmNOt4Krxq5Fh9Tu?= =?utf-8?q?k7wp9Bq2PfWg43smEo8fHm7cK31GXT7WcP1m/jN5BxiBPzPvXNRCViX566y6PVfx5?= =?utf-8?q?L1jfvwo92tYDVpA3bkeQThCXO1/yVz3Q+1Z2zs9ZHKZOTftui3Tgv8UhgkQfUpOWv?= =?utf-8?q?TFoUZxgEqrB3W3Mf3Qfijj8W4hYq1DgIpCP076eqRDMzNdpKLyrsEUc27szsLLbEs?= =?utf-8?q?prLuekH91L85M0IYsuN2G05OLrHjBhRPaxjEjPx1M9Lv7xxc/us44BQdUmLSoJ+Iy?= =?utf-8?q?sLbNQxTqWmOopmOngWjyem+CAu/CJzIueUk3rvetm6IVyDuwg9LVvh4u7ZGckpoH7?= =?utf-8?q?Y7DjxLw9wyFjn/YzNym8Q6closSYGiLW92aNxAFm1U2silbm5awYdaaDN7ibBxVKx?= =?utf-8?q?CQ/2fDV+hx3B0KRO6VfgI332wIc8t/JezfM4wr7Dn9t0qnKLeVS7FGbHu+lyr9LKX?= =?utf-8?q?/J0CKIELQOS4BHclXTbUk32QrxOWA9TvY7Wc5UeK06JB197yLF5NCIe7wQBLWn3cj?= =?utf-8?q?uQBJ/CesVbwdr434hVbS07hMdrS9UY9WjEq0oVTBCOMpI7cay7u0Ko7O8otmdsavZ?= =?utf-8?q?J84LAfp4zb32kI1/qobCIybnhIVJkdOm6SMRbUzmp/UKm6BGJV5by9RSI0X+wmsF9?= =?utf-8?q?cSymc7vevgAiSxxzPzOSSkdAYE9KWzBx9jgumuCEiwXxHPZ1/MphonV7entpFuT/J?= =?utf-8?q?icXzgKuUb5kAUanGVmlSm8PN8A2Shzx/K09YI79w6CqcE6guJEuaL10s9WcuONBSQ?= =?utf-8?q?7+0421mh5pAWvITTKXR6FOeGHPtdy00wlItItHzWt2VRvjPBd9SaH0uZpJF/0H86r?= =?utf-8?q?zF2/CUJ/pZDz?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 07c9d617-39e3-43b8-3589-08db2ab904aa X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:37:14.0043 (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: CIC3/JJsPUSh53OFuXQjaGfR1NkXjDNp8JmtMlTZD1K5xB9NkIReFVDGSHRVcGZnlWnQPcAm1wPrv2/ZoSarfg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7526 It looks like in the combination of aff8bf94ce65 ('x86/shadow: only 4-level guest code needs building when !HVM') and 0b841314dace ('x86/shadow: sh_{make,destroy}_monitor_table() are "even more" HVM- only') I didn't go quite far enough: SH_type_monitor_table is also effectively unused when !HVM. The assertion early in sh_destroy_shadow() can have the type dropped altogether: it shouldn't make it here in the first place. Pages of this type are freed directly from sh_destroy_monitor_table() only. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -1190,7 +1190,6 @@ void sh_destroy_shadow(struct domain *d, ASSERT(t == SH_type_fl1_32_shadow || t == SH_type_fl1_pae_shadow || t == SH_type_fl1_64_shadow || - t == SH_type_monitor_table || (is_pv_32bit_domain(d) && t == SH_type_l4_64_shadow) || (page_get_owner(mfn_to_page(backpointer(sp))) == d)); --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -205,8 +205,7 @@ extern void shadow_audit_tables(struct v #define SH_type_l4_64_shadow 6U /* shadowing a 64-bit L4 page */ #define SH_type_max_shadow 6U #define SH_type_p2m_table 7U /* in use as the p2m table */ -#define SH_type_monitor_table 8U /* in use as a monitor table */ -#define SH_type_unused 9U +#define SH_type_unused 8U #endif #ifndef CONFIG_PV32 /* Unused (but uglier to #ifdef above): */ From patchwork Wed Mar 22 09:37:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183759 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 3D882C6FD1F for ; Wed, 22 Mar 2023 09:37:43 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513266.794041 (Exim 4.92) (envelope-from ) id 1peuuV-0005pT-WE; Wed, 22 Mar 2023 09:37:36 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513266.794041; Wed, 22 Mar 2023 09:37:35 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peuuV-0005pM-TZ; Wed, 22 Mar 2023 09:37:35 +0000 Received: by outflank-mailman (input) for mailman id 513266; Wed, 22 Mar 2023 09:37:35 +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 1peuuV-0004gG-4o for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:37:35 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on20610.outbound.protection.outlook.com [2a01:111:f400:fe1a::610]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 2c8ebad8-c895-11ed-85db-49a42c6b2330; Wed, 22 Mar 2023 10:37:34 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AS8PR04MB7526.eurprd04.prod.outlook.com (2603:10a6:20b:299::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:37:33 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:37:33 +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: 2c8ebad8-c895-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cI7S7CPhKoPrfD9dU5uug1veAm9R4yfrbNNiUyRUFA5MU0pq2NieJzVjiykeETrjtVvnpYubxfof6vum3lJZpUzQMuPLVh67yG48lNs+92P5sfOxBUWG9LS1LzjgOwgnvJPZyzbtu8mSpC9QtWNcF0V1CoSO6ROHFBLDX+qLvQjD4sKTcfCjtcgnHRl0eVc6wjqNWdF9EpbnbzZRw6txJUeqA8WdW0hq9zOFz5xJiljPJyPiuOB2coOuL7RMFk6mtjtFAm1QWNkcOPgo1cXPQC6vX3yDJjYOdH+ouFuA754XTEW1zLwQX41Euu6DpYjrYh8U36va8Yh5tdsIayQobw== 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=X1l2fkRqRJiGKZyq0x1zbIscrbjHpZaIQjMcBMuPrbQ=; b=JMKjwBrSJO65IKZH/NCdMBPxQcrN4VQVMy6Y5CmzvWuuMmOPyfIPDOJS+h2kMhC/R0KDr0mJgPxDl51gmwLUfZ3tjOIz4VB8GYSpl1Mg6lckPDuMdLE0Hu8g50zat38MFFQoS1z/lNx+vnHPxB4uW2L+pRILjXwDudUEMhTUoyeRFcX0hVyCByjOYsoqn5fr7mbVslbMFHo1gytIQggUxk0pwf2zmFQDe/24nwbcVPOOKpf1FoibEvJxpwp0JxPpGevmFt0/SaSXZj0qIZp3k0fxkLEs36ieIish/bNAYXS/AAddO5MDdYP1Kplxu1HQxxTaghMKEJzLhds9zAvbWQ== 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=X1l2fkRqRJiGKZyq0x1zbIscrbjHpZaIQjMcBMuPrbQ=; b=CjV/m7mlwUdrwiz5SeY+mfeIdDXLH9VvXrRw5BOaP9AdhqmPtNM1GReRjiexslYhtaIopVinag1rkJ4dYleotIaZEsTgCJFdRVtva21gZdJDPspyL1vMnofz0lOwGokaUWXIceli/a85JQRXhxV5iaw0U8ciKhXl/dH5fgzGD1M96md3kX7o/uWyMOLgXnVLhTeEmT3sKf3VWbrqdebDUu3V7lwHLFfmkysdqO5YnTO3rXeOdijkwR4LWqiFWaWn+BtrJHGcDZmL7fDG1MxmHcklRnzpTNpgng7AyJRvnsAmtLY7u8YxwdYA60PemI0U6TQnoWa5j81BpHbTiaR9SQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <3cae039b-e01a-b9fc-3b02-1139e3ca20c9@suse.com> Date: Wed, 22 Mar 2023 10:37:31 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 15/16] x86/shadow: adjust monitor table prealloc amount 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: In-Reply-To: X-ClientProxiedBy: FR2P281CA0137.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9e::12) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AS8PR04MB7526:EE_ X-MS-Office365-Filtering-Correlation-Id: 2a669e42-8b08-40da-1f4f-08db2ab91028 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wG7q3a2hLk1mkVg3uXx0B3WljJiSmCR8aUrYSDBlwH8/wpD8V58//Mv5DcWJQJq8RvUyGfjaOZyIyD+7Y8VQHwSTmxi5qhA3zUuj17UZaS/bB9gUno2m3F8TqBLdhNFqRSAPc02IB/S9Y8/2m+yGjnfxZ/GPS9Clow2Zb4MhMPcPUAKRBNmFLO/pXr1za/c1cWwqEpqXU3yCWOaaodhYnz4B38kUCKoWSmyJxs78/6WFvjrA/WgZ8urm7VSlagVhZhWoDNaJyE8D3gYn+tThKLaIp1RfXEC30xUcbEDgTnWosdp8k4b5oi1BC3FYQuxv/ihQJyHGIz7zbLwjzRlbV4GzYulU3+U2L+OqTFQxunQs2ga37UCcw2/Huo8T26nbP76SLBMoF6pYqBmIXRnYocB4agP8IsaSKa74gB/H9AfBTNdK5I7SRCyOjwkwo1gfVpgHtZb1MtuP19QFQA2+JCejdNYSdjepfW7lFtp903cht7wzuyjYI+dMX/cMPSJa1xrS6YjbGC16mT1vi9+dPDYmqCSr5Gc4B/wfmRYLYRujsO7YINHeu59aWj11DlynShrGSQH6SYeKcAgIFQKicC4nGu+OS+09hfoYhwOQgd0SjmXoxCJuQrL9Ew3O5q6tMv6GPpCg6YRN/0nr/AVHEYkwHO0S5aJmv4kCy9D0uWxjTI7nlWbr1VBVVe3am6nqhN7Kv9JrGxzC/mIJBSizKcu7EfXsxj2suybRgfrokVw= 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:(13230025)(366004)(346002)(39860400002)(396003)(376002)(136003)(451199018)(5660300002)(41300700001)(86362001)(38100700002)(8936002)(31696002)(36756003)(2906002)(4326008)(6486002)(478600001)(2616005)(186003)(6512007)(26005)(6506007)(54906003)(8676002)(31686004)(316002)(66946007)(66556008)(66476007)(6916009)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?6QXMe4C8wyQAtpl1Z5cEo2pYdItY?= =?utf-8?q?yd6BqD+PWhFT48kxuSZFnWVGxhFtdzv5LGpbkTZ5WPKY74/nyaP4PPlmHGjhGE+wO?= =?utf-8?q?+DDCS6dU6arSJyBsVFcufw3TGch3gjsFvnZ0OnimUzTeQjBzbJH32NS37O0C4sJB6?= =?utf-8?q?VOwjNMFJltCpHoDOGY0rO4aDBRmbM04Mj8ZBHb5XL8IIgJOSe+lPTwAqnFiyJK5ID?= =?utf-8?q?A/y3b3L/CD4vg5xlN2P/BYfxgjRs0ufAOopAW0TaAWmHv1vESxXVetQrs+lSVu7fl?= =?utf-8?q?09CSyWkCC/6DOE0wFzJCVMmSWLilgxbklAI5+iUiqcawZbYielx3Dw1/J6kNo9Rhx?= =?utf-8?q?xpOc+xtXEnSrvecsTA1sDw7u2A2UV08awopRm9TzEQ1qerrzojj109Z7t2hXXPgBR?= =?utf-8?q?S2wJf9eL4Tfhl1tDB6ZyvI0DfWhffezab+gVmNPnBCkX9k8ClguNSkT4b7QEYN1cp?= =?utf-8?q?WTm7KQ2kDIr6IVuC1TRTGYxYiMNLJG8ArEoTORz5Mj6Dk0vWC+TknnnC85HKVAMAL?= =?utf-8?q?Z1WKIYFSF2MPcvUfAnCs8nOE43v9uQsDHS6pNrnr5rNnIVOsmsyaxTdsk56URdkh7?= =?utf-8?q?6dOD9EI1iAdTolGc6KxBL3rpj5Hq1wvptk2FPU0Jq3Q9Fh2uMdwHV4UrRoTTwzKpv?= =?utf-8?q?MXwevjQYjVJppYBvS01/RTv/VhtTZSWQGasJHuEYhTd3M6labrbs2wqtZ0S7SdK+i?= =?utf-8?q?aL6wDcQbgdNUcXb7BUC6LpQS4f3YqrHfWH4nR4hkPP0bwBj9Kig96dq916BqNwt8L?= =?utf-8?q?Sj1paMDbmHTi9mv1OIt9zXYU+Rx8KzYZG3nEBFndYCqKFT3j2/9DhiwepwBIrAOTQ?= =?utf-8?q?PApzVqTh0ubPZ2x/DqlS4r0pNmvE06vG5zI/k7vUbSZBHHq68Vt9qtPaxnaGuUH1T?= =?utf-8?q?WPgqAxQShbAG3487gubK9vikdXrxA1emDMkillPZTVgeZ+UBC1xCUF3a3Z9DbchWM?= =?utf-8?q?AOfRdnIOdEQ1h/VQ07rz61Koyaip4Vxq3yOC1+40h+a+H8epZV9halHHJBlscRmdt?= =?utf-8?q?T62LF2l+lYcAY/oZBY2R3T4rB5PdDVFkPoPzfifz9exI6/JvJ5O2UpeoilkUOD8ot?= =?utf-8?q?WiApNPXuJHrqzCTtEJfXGq5DgIZ+Rx/BkrxdAmf8eLaw7nhIUCQaykbMMG09hjZP5?= =?utf-8?q?fOV9I4BpKQQhk4OLBWZ97NUPCKSgd28n68U+aLbzYtl4/C9z+6HlLBqMexTwJ+7tA?= =?utf-8?q?DyLpTUdrdLe/+3uwMrqdXiZjsSoj8/ItH5nvXCG77Iz/wAjOXClHIQhJ3De2yETth?= =?utf-8?q?0tOfDu+jOpmz68vIW7B9yGb3zEFBl+CyczIi9wa7bxdES3GNX3bJKa15oLKxf/yT3?= =?utf-8?q?vZrIg29Owm3/+4wT7Cy1tr1D5EzEFKZFasvyO9sFov1gNO5sX/SoFQtYGJwme7Hyk?= =?utf-8?q?+2/ewqUTKhobzwXbd5Mci9DJ/aWer7Ng9g/XOriH/+7vB8InksBf5wEHRTU0c1wvq?= =?utf-8?q?ktaMAkqPAlOKzi+Zv6PHPX/EP+707T3EkNzUVoxXXmOA2y50oxir9k63W+bqgD9mr?= =?utf-8?q?N9JCVugoNM3s?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2a669e42-8b08-40da-1f4f-08db2ab91028 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:37:33.2688 (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: HsfogPGEKFN5kbK+sz5UqEXX4n3OzEbExMlvGWxuSJMJAIhcXIgEYQVesQEpPGZU2WXauXNNpuhh9pW9JfH4dQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7526 While 670d6b908ff2 ('x86 shadow: Move the shadow linear mapping for n-on-3-on-4 shadows so') bumped the amount by one too little for the 32-on-64 case (which luckily was dead code, and hence a bump wasn't necessary in the first place), 0b841314dace ('x86/shadow: sh_{make,destroy}_monitor_table() are "even more" HVM-only'), dropping the dead code, then didn't adjust the amount back. Yet even the original amount was too high in certain cases. Switch to pre-allocating just as much as is going to be needed. Signed-off-by: Jan Beulich --- a/xen/arch/x86/mm/shadow/hvm.c +++ b/xen/arch/x86/mm/shadow/hvm.c @@ -738,7 +738,7 @@ mfn_t sh_make_monitor_table(const struct ASSERT(!pagetable_get_pfn(v->arch.hvm.monitor_table)); /* Guarantee we can get the memory we need */ - if ( !shadow_prealloc(d, SH_type_monitor_table, CONFIG_PAGING_LEVELS) ) + if ( !shadow_prealloc(d, SH_type_monitor_table, shadow_levels < 4 ? 3 : 1) ) return INVALID_MFN; m4mfn = shadow_alloc(d, SH_type_monitor_table, 0); From patchwork Wed Mar 22 09:38:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 13183772 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 9DDE3C6FD1C for ; Wed, 22 Mar 2023 09:38:33 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.513270.794052 (Exim 4.92) (envelope-from ) id 1peuvF-0006Uj-9a; Wed, 22 Mar 2023 09:38:21 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 513270.794052; Wed, 22 Mar 2023 09:38:21 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peuvF-0006Uc-6P; Wed, 22 Mar 2023 09:38:21 +0000 Received: by outflank-mailman (input) for mailman id 513270; Wed, 22 Mar 2023 09:38:19 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1peuvD-00068H-NZ for xen-devel@lists.xenproject.org; Wed, 22 Mar 2023 09:38:19 +0000 Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on20604.outbound.protection.outlook.com [2a01:111:f400:7eaf::604]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 46a11cb5-c895-11ed-b464-930f4c7d94ae; Wed, 22 Mar 2023 10:38:18 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AS8PR04MB7526.eurprd04.prod.outlook.com (2603:10a6:20b:299::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Wed, 22 Mar 2023 09:38:16 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%5]) with mapi id 15.20.6178.037; Wed, 22 Mar 2023 09:38:16 +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: 46a11cb5-c895-11ed-b464-930f4c7d94ae ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fTFCiUajNc221/cOMD2PCwdA4qcEKgIUqXNW5J5kcqIgMsRD6lCqXJn+Cw9RT5O0kkSgQEMTNdShCRdZvDSuY6FSGMaIi7OdIdLtUvq2dmR5p4EUXFYyRjWS2bHoPFQvfwCI79HMa0EpPpW0a7T8xWWRSY1YmFUdngcgHcTkdwvHzeKSkR0UqmqsfuXWvM6RAn0fRgtALlEYe2MmrkgS5Yw9+CIdt7CL7/tmr/o06KA9c/jVWfwD+QU9pfk3rHPIrJXgne/2pgDp5wNEuYKvkkIsW3tREPEA9IjZSKHY1vlQZZcYRs4+RKVhvNhnZlMttta6s53SYQasgFbij1yiUw== 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=cEqVEv6hnrXt0HrtRsLdnSxoS+k1kdzCtSY7As/Jre4=; b=FzVnHVfxfQ+FcPKYMlKPxPIBbBbTLle/A8HVZWc2PW04Osdl0E2ajAjyGMS81bAzk7Ok5/9RtC09rtvBCkxgSvU0gBzha7IgEodcj5DqVRqydvpVdACHGsF20v6T97ImLyxgJWxNj7ynSrcAXUYds6YriWMPATgPgQpOTB1iW3/2YrWiE85cXT26vrQ/6yp4t0+zNbaVNKh5J9a44BvOlA8E3cX1IyWVgTsxgT6gIEs97EyXZGooBuBviIxynNuWl2aND92WERVVAYxV2lO0TCm1mGbO1gIsTQdUkiQqpIZ4cxdU8RoQ0gVy8XRsSiBsSoK8pPNViWIj5wDX1F4HPg== 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=cEqVEv6hnrXt0HrtRsLdnSxoS+k1kdzCtSY7As/Jre4=; b=u9QCtarDOr1oThrcwbrSZCVHDD1Ro5bkf9i+w+HgJZLfjBB2ASxvmTAUiNyQlDDKJzloGm4bdKUyGA2kLZ+1AaCIqA5ET99f4zORD7Gx6lxUenSPJq3L5+v3QenhSkaEIQHCKgRMwj+ISTTm+vW9FnoYg4u2kSEon/ThmZyPNY8kOS72kpgSOAUImlqEGImvuADfFPgu2GYO5ZjpqSJhzsCC+xEH9/D2mk8Flnub8RlJGiHx+ldP0kcP+wpGdh2Scfpwd0/3u94owg2dE5O4fYzyVSz2GAYUhEgs0B2ruFyg/eTeW4SUYPAbqmXhqlSDbVwD6dPLr7ymJnTgGivyoA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <1c2bd7b9-34f9-bd00-cf36-7cf6e0bb8c3f@suse.com> Date: Wed, 22 Mar 2023 10:38:14 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH 16/16] x86/PV: conditionalize arch_set_info_guest()'s call to update_cr3() 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: In-Reply-To: X-ClientProxiedBy: FR2P281CA0064.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:93::12) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AS8PR04MB7526:EE_ X-MS-Office365-Filtering-Correlation-Id: 01fdf09e-c4f4-4146-54c4-08db2ab929b8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tNroTL7VgW0a5ebnec6FWkocSwLdNS30+nc9wJCdhb0iPguBOw3TGt4aIC1iCtYqNkDEOTC8/wH9rKhOnEBm8in1npYgZpDvuLosC0GPHP0NVE5S8WoazJkj29DHy952rfMWFs4Ll2xRSkfiJ/8JPeIarSEcZJqflajS8FGgGPOpB21zhxDNKMb/Qut+JncqDPYF03BWisShC5Ozz3iXHEWJbuTfyTd+GyEbaA/zXezxH/m78dX56WcKEV6fUYgoJlmN9UyqVDN4tP7mXuAnP+Jx8wJkP4mqaJnrssExICvwOUk+VunAdrZsQDh8ApM092CA45+8x1I/XKZCbor/18ik4s+nV/yHlJZF8jWqadUwWazDMcoAEOf8O3UGBKWj8KaeCXMmilx6nhl6TJNk9BOjEeeJG8VKghSKI1rUBNWy/GxilAu+drI+kb2NsgAgxB96o4ZR+mP8edjEtlZcVPzuCvlyeLAAstfpRmZpYjlhXIattme2/Yh26EoowJLUP5rmWbPwf2KpdYIca5eACjBWblcMcn15UFY3RhyUm43InoiE5N9vqAjHMO2alu+EdA0m+E4tXjJBjtQ6PSe/1nX01jgYGmi/ZZkGQH3yzeDj80Ed8AUbwViqIEypj2HtxfSeWTLVwMSg63kBKhKDj4wXbh63I/1iR7ifyHe0F6O/fJmeYU7BQabgy1sXmsQm2b4z/Y1InjEAiQcT/pp1i42aUzc5v8cK8cZIinh+SXo= 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:(13230025)(366004)(346002)(39860400002)(396003)(376002)(136003)(451199018)(4744005)(5660300002)(41300700001)(86362001)(38100700002)(8936002)(31696002)(36756003)(15650500001)(2906002)(4326008)(6486002)(83380400001)(478600001)(2616005)(186003)(6512007)(26005)(6506007)(54906003)(8676002)(31686004)(316002)(66946007)(66556008)(66476007)(6916009)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?dUiacQBToBZ8vKNCDMcyb7fTqf4D?= =?utf-8?q?Y3MnAUeX27WjJuhjjT2bynIYir1MipeSulhVSlbSiFxe+DmMsASq/xHT3nMv5hwo1?= =?utf-8?q?M2zo+/bb/qm2HFbJypL+30FZ13GQIk3aS20RO8i4rs3rJ4mqFmk/RYLARbguog2Uc?= =?utf-8?q?VKHYm4CCv1ZsFGY9fvhE0foyBufoi8i8CjUNPZSFhjOjXDiUYZKwTNcJLvCuo1FQL?= =?utf-8?q?VGYo4tVvRt4uJaE5sXG/hExN3FlR7B0/pauD0ECCJOrWYi1goV2hl4LfTqgQucCvb?= =?utf-8?q?xoIpI5SSWTA4wIa650FORVjmsAcXcRAmMBfQX5GKOJJoQiXpel5wJwvZzQLRZadle?= =?utf-8?q?i44Ifq6wr3xEqG3DwKDgNmKmxGomWoANLP/SQgj7eVzTUymla/YP1rFO3AKEKtN+Z?= =?utf-8?q?v17S8cWOslLH0T/Bcl7LP/nV5HawTs9QF1xZeYzPre+Z9jXr0X3cgdXgYoPogy60M?= =?utf-8?q?Zq7CEmfvt7amRqVRIzCsSg0t8T2cmUjH2nJneYiwkI58sN1lAZPUyuMuwYCzuMX3j?= =?utf-8?q?FQPH0tJ91wIMTH5uP8QlKPs/U0FHFvq2tk59ynoEuXbqC/PD+fWNNirDHMJGExvCS?= =?utf-8?q?EbRXJZ1Zl0DfQ1V/y358U1VEhar1purCZoZpj2Es3lRkmUBjj8Dp+Q8en4YeOw8B3?= =?utf-8?q?2lF2AsDmrgCIVjM3EACuH64kJFANTIiuS8NVPncDCKkwohtOtWgz7WzogdnMgdP+l?= =?utf-8?q?FPB01eEQcTIrDSFNxIsUqGZ3lpb9KcinqjajCRX3Ypr8RCQRu7tCERtL6ZmZIV2+G?= =?utf-8?q?ZXYHvAHdOISRAMoD0+kYASUp0qxZwUM12xD/cQp4wcF2Fv0co5/TyDRRybP/xuyal?= =?utf-8?q?793osv1HbWbeNqqicox7xtsITZbrfTmNWBbMfOjUIYJY9qdqJwSZgoexiHuOaiTkj?= =?utf-8?q?3Ck4caB6NUqZsTk/OXKmkMbFhe7Pfsq7f6M2JaQmbbqdZJJ7C0iI5n8opku3cljcK?= =?utf-8?q?U8r0z61w9EW6FH0t4H9VU68lcQW/iZ27gSqn7ZmMq3LWfAQ0eJ0xxCyLs0PPGrHVD?= =?utf-8?q?V1o/F8tJmPZBopu/G9pQpBCOLBvq1RAVYc490RFx9+cV8USzQh+DlNhw395i2RXUt?= =?utf-8?q?KPQqJNhKHcpdNnh8D/LUUfCTNxBw8xecntoVHZ+5zX+fYOKJYRjWSK1+gPfjShZwp?= =?utf-8?q?6yUSZli4dcE0TWtTSnLU0lz3+C9aIDlZmsHcvjaAeOcWFM1v12r85nSK3Li+ss6Fi?= =?utf-8?q?Qllx24RH73VRn+30ELiQ5MhlfSzTCTbam+E2zTSaPWdkV5OTKh6S5GOSmFEqseePG?= =?utf-8?q?GpGki+aa6WKp3XwGOYhrURupuDFXct+3Pg/RIANYxLRXU+ZoBP8uP3vYFc3hyljUZ?= =?utf-8?q?t7P1/ICbyIW574FLTZi8RiazCXDsyL8BQmYEynQldENmvqwGmqObOzaDgy66bT13G?= =?utf-8?q?gwC/4VgGfE+sDAdmX7unHbD4vOgfJZfs/vjgCe+OHQHS6q6xVyPrtfFr2v5xlnoeN?= =?utf-8?q?WF33rBP59Y0C+1zSgzndcsukTm8yX1vR1mEhEEXHaenVH3+atF1sp8kP6RnmhXj7o?= =?utf-8?q?uPAtgEApn7XN?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 01fdf09e-c4f4-4146-54c4-08db2ab929b8 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2023 09:38:16.7975 (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: vwVPhQLYbaHwn8dP1/p+uu+BX5CvIlE5Zju88914EauSkFLAx5Ik32CIu5iqS4qYiWy7VgphKuufXMwQJQa2Bg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7526 sh_update_paging_modes() as its last action already invokes sh_update_cr3(). Therefore there is no reason to invoke update_cr3() another time immediately after calling paging_update_paging_modes(), the more that sh_update_cr3() does not short-circuit the "nothing changed" case. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -1445,8 +1445,8 @@ int arch_set_info_guest( if ( paging_mode_enabled(d) ) paging_update_paging_modes(v); - - update_cr3(v); + else + update_cr3(v); #endif /* CONFIG_PV */ out: