From patchwork Thu Jan 5 16:04: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: 13090120 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 8F215C3DA7D for ; Thu, 5 Jan 2023 16:04:53 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.472017.732106 (Exim 4.92) (envelope-from ) id 1pDSjS-00048a-HN; Thu, 05 Jan 2023 16:04:42 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 472017.732106; Thu, 05 Jan 2023 16:04:42 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pDSjS-00048T-EU; Thu, 05 Jan 2023 16:04:42 +0000 Received: by outflank-mailman (input) for mailman id 472017; Thu, 05 Jan 2023 16:04:40 +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 1pDSjQ-0003hT-Bx for xen-devel@lists.xenproject.org; Thu, 05 Jan 2023 16:04:40 +0000 Received: from EUR02-VI1-obe.outbound.protection.outlook.com (mail-vi1eur02on2059.outbound.protection.outlook.com [40.107.241.59]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id a844ed62-8d12-11ed-91b6-6bf2151ebd3b; Thu, 05 Jan 2023 17:04:39 +0100 (CET) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by PA4PR04MB8046.eurprd04.prod.outlook.com (2603:10a6:102:ba::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.19; Thu, 5 Jan 2023 16:04:38 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::2991:58a4:e308:4389%7]) with mapi id 15.20.5944.019; Thu, 5 Jan 2023 16:04: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: a844ed62-8d12-11ed-91b6-6bf2151ebd3b ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XmgGKirqO97aW2lzSqCXpaIMGF3eF+gzlXSdDILsRUTRy53Ts+dmTcDoA2bJ/bAnU3z2nlZx2jmznhmU7AK84CybI9T70vXkmie0xgGRut+p6DfJhXVCyNYQYEVyKncF4fIt8u+2ttL2Rt1EihkvWd3GGx9kPusq43eeLKp0iGlEQieUBy6eMtNNcrfy9F/eH/fsGSm0nMo2FGTGENBE2b+OxRjzPauOtWUvDUv2nwbiGW1lw5CAZxcSjIlBYvw/AlMKs0j9DkWWvutTSqko6nE4ozkU8m34mOZ+zTvaq8EjkGeY+cj1tUDHxFx5fGGOifCFF8EsRMH7JJjjEMw3hg== 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=MJaoeutQLbYPzxfYQUitLAuxg6Tn53bDvw1b7Tq+keI=; b=PMQyKOvRZKzmstJbOfx7xQT76V22aS/cbEfpwt/kZXbC5BmTLEYAc79ZZqUOjWrv949KUVYamDLCZibCj39TvC/WNHS2UOf5dE6NrJxRuUzculrwq5V0Pa1RirGIo/zvLa6v+m16Xf0LFGFQZjeI9ZoxpvgmBoNCvv10TGr6RbyXKidJPEm0lfvI6ZBP/CHf4z/x5qW8/33ABw7evNPnq/beGfRsRt5ax0Fvmm669kJQ63QRXyebQj9Y1+2PiZK1ZnhktMBwc+n3Q1wtJ70myb1H5bsoe7PzSS8m85hWVaP3t+VtN2WMxP6B+ovqZ8DcmC3JIhL1V5wcoe+VwiV/Tg== 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=MJaoeutQLbYPzxfYQUitLAuxg6Tn53bDvw1b7Tq+keI=; b=Q8YlPobdSJaKnb4lppkjZ0CgQtxuyIXFDSEXkUhMrUEhDLLZALOxc29Ls+Wyt7uyBEdo6xMI6/C+77pbJHzMLDb6O62IYm3YgHWrplzBI+YnAXef5+bCGgAuRWsuFI65PsoCw/jGZC9Bm/ORLYAVCiQCMUwBwGdJViIYwAgkvuprRDgbe176GqqoXkFyfZZnsS1YVgkJ5LV7t4DU7ndRgY7mGY1ANrRq9H1xZsAJkVM3UO6rBaWRhrh3TBKC7WhhWlgm5IsK+omMpMVUVqINWG9z68+PpmEgOnb2hUg+4OaVDpHDsfmXXYPEUxxxuJBB+4Aaff8VLOwUgldlwb8Xjg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Thu, 5 Jan 2023 17:04:36 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: [PATCH 06/11] x86/shadow: drop a few uses of mfn_valid() 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?= , Tim Deegan , George Dunlap References: <074dc3bb-6057-4f61-d516-d0fe3551165c@suse.com> In-Reply-To: <074dc3bb-6057-4f61-d516-d0fe3551165c@suse.com> X-ClientProxiedBy: FRYP281CA0002.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10::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_|PA4PR04MB8046:EE_ X-MS-Office365-Filtering-Correlation-Id: 15b6a024-c967-437e-adc4-08daef368beb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XbhDPUSuADkRhwC6IzYXEToveZgcb20lXMisLZ+GMM3jSAMmAniv17a7NvzsDci67mEPC+Zzq5fi47TEnsLI3RWN2RHqlXBAEWYUITFOOldngtRs5IfrJ/IemNBFosSmXyimqXnN7HOnePDVVU7GFovd9Dgi0l1ZtG2LeSc5QD+j/6AcvV+3MqbTMrHs06dEduNxprJcZQ542I/L3MRu5WOlEkyPYA/AzYZIouvSgV0ILSvi6QjsfFlSJDhXx4vlOMOqsZsuDkMHQ4AIYYRtMkihj18fKgrvLP240VyRwhXnE45g5oL+Jgvfnrlbg4kTSauyLo/zeMQcPFw88V0G8fE2j72r4OdNbSsMIr5L5JP7IvkzTFDHNMg77cG5FWKIJ2bha14z3QtGKUup7zj8ZpBCERjqCXeFE0sXp6A/10J+Jo8bJ0AwICNUnP+WFcJQysYpxL71uLY2wIUU7VWjFhAbGyujcraQjdUNulTKpDcNO7274wQqr52wnNec4VxFkVw4qaBGSXduUaNjyzHb8uO/fGWMspsCFrn8i+u17kRjJzuo86muPb5nMY0UVgyZq9/lW2gwGv+yD6+kX+VP6ITn+tDDQr46au/SUqgRsbpJyfG1BEJIgeWkUcs1pG95UHkfl/S+3wJtRXNALCxZKzwtAqBRpbU9OsDr2r997pmYHyXqf/IX484ATxnq8nSkAhRaPH7SyRr27BQvT4RLov5L9ocdKSGepiaGwyeYN20= 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:(13230022)(136003)(376002)(396003)(346002)(366004)(39860400002)(451199015)(38100700002)(6506007)(316002)(31696002)(4326008)(86362001)(66476007)(66946007)(5660300002)(8676002)(2906002)(66556008)(41300700001)(8936002)(6512007)(26005)(186003)(2616005)(6916009)(54906003)(478600001)(6486002)(31686004)(36756003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?b8cRUTH0tuoKTMEMIpbmS6ougTKk?= =?utf-8?q?rVFi1FnXaCjYcquloVj11l1yC2REgRm5aUx0GZQoSWC7KlR8kjgNgp8Nvhd11fvmF?= =?utf-8?q?zZBTCcyiRR+VxvTXLaGjaZWjFm7VFKLsdPATa4cG3HZlCcHZKWtOplc9PHIBpbUcM?= =?utf-8?q?+yxE0/X+t2nykADHGuh1sxZBQSmEMc1FEEdfBQIi6e2fWWzesL/s0gYOGa35AZ7N7?= =?utf-8?q?qyPLoEwuaG1z4cKZfUulyYsCSbEBRuMvsii/dKSRFYM9qWdCotwlOQEXzj8U8g5cT?= =?utf-8?q?yT2SaIrjjXv9/Mlm6qpFg8P/5TiGOHUdJkOOonQQiFWZR6DMvd6BGuE1C9WBs4tKf?= =?utf-8?q?0K1hTTcybArMYWqo4Uq0+tpRLveXt/MTnW2jyKIJ14yAPzv2r1ZMjy3PHFzfeNMrv?= =?utf-8?q?WVXdMTZH2PG9O3TaCw4XDmRyJw8yGEPYdPoBOeH45EcTh8F732NpuVVlVoxtt+pzW?= =?utf-8?q?zaYPj8Tq28TQ3T4ntatq/QTChX/2Ow88xZc13H6axlujxj2Je1+VMIE3G/R1H27VL?= =?utf-8?q?dv2mM8jZFjhiZKqHjb8Pg9zd9Gr3tG2NzIRz4X2fj/yD9Aww/Tgn9IISZVMA+GeGa?= =?utf-8?q?VWopaTbAY6RZQBWWd0Ut6JlRX7nxcNo/JAflNQwC7mL6mSNkwSu5GR8gKb2iT8soS?= =?utf-8?q?7JlOA8xzsbFaqivZqCwZN7ou9YRi9uJGc0C3iTv/0IWXGE0c4w/23amf3/dAI8vVv?= =?utf-8?q?MEHibjV/NGAYtWSqoI9GTf4w8Z6hPhgAigO+iacZ+7pBqOTS+oWghYHaoKJpaxwir?= =?utf-8?q?TGpKqxJwHs3fEmzGftah47+VF6hFIaBsO3FeXIH48PSvDiRdYUHWIEcp2DdEU+y+2?= =?utf-8?q?FE/m9lacDP6jlUrQ18VDKQXFbhBHNwuFPKool3kqEXBSPLnryvbZAvnd4Hypdg2P4?= =?utf-8?q?ZZAmqekwXy2lvr9cSJR+04TXmEhLTLCWKKxMWU90w+K/xCi8mBofcpAoZTUUJ9suv?= =?utf-8?q?834sCS/HFr7kh0D5g90jREhFIFMSNxsyJegVSaWD9Nk5+HJATp/rpCmKsG0/wSyaq?= =?utf-8?q?ZL/jqn32GlcFlauuJAfRbjaQRAWTq50wdu6iWLtZdP82RN2ZpC+i42lhRQblFgzK1?= =?utf-8?q?m2m247mrJb80eg40N1EGMG3hQq6mgVqdBbCfM2qoa0AaJj4kaTq7h5zqIiLjcB0pc?= =?utf-8?q?ks0zq0hbdksDTUFKXwqF6FoeC9B6GmgKHDeCSuBzzgPZRnkvsMQ3bRLSrl+CBWcCk?= =?utf-8?q?1/kRGZiqW73gvrBI+tOzpB3LjcvyNCzTJJXRdu24PzDiplJigL/dsG3tkS+2pSL+x?= =?utf-8?q?fnWhDKvu0dho55auuJB0l3ZnLk55BJRlvfBMHYFzwn0DB5IZ3kp6S4CAI6Dnp/07H?= =?utf-8?q?qtyzDMeWTfigvAZhBp5tHY3Ke5YKj0EY2gFe15vTOBNcEbasW1UJYcmMK6TOtzbrj?= =?utf-8?q?BTbRDp9I23VGFHsOhbMl19dpODKtoHAeUlsl7XUuaM3HdKd2qZg/evq0v+IXGvIto?= =?utf-8?q?CTXZwKGYrtO9V7VIcgyd6TZhPEZKzoS1Qrmat0rfmA9noi9/urQogMS60a4htwmvq?= =?utf-8?q?Q0o4mrqRwHNZ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 15b6a024-c967-437e-adc4-08daef368beb X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jan 2023 16:04:38.2034 (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: 1ARPHIyL5U0VA9mm0aThyC45AGojNQUrsmdoH6T6X0+YXij7vXFKOyiVmsx4gZnZ4J7lGFRveNRWRUu9+sXXUQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR04MB8046 v->arch.paging.shadow.shadow_table[], v->arch.paging.shadow.oos[], v->arch.paging.shadow.oos_{snapshot[],fixup[].smfn[]} as well as the hash table are all only ever written with valid MFNs or INVALID_MFN. Avoid the somewhat expensive mfn_valid() when checking MFNs coming from these arrays. Signed-off-by: Jan Beulich --- There are many more uses which can likely be replaced, but I think we're better off doing this in piecemeal fashion. --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -171,7 +171,7 @@ static void sh_oos_audit(struct domain * for ( idx = 0; idx < SHADOW_OOS_PAGES; idx++ ) { mfn_t *oos = v->arch.paging.shadow.oos; - if ( !mfn_valid(oos[idx]) ) + if ( mfn_eq(oos[idx], INVALID_MFN) ) continue; expected_idx = mfn_x(oos[idx]) % SHADOW_OOS_PAGES; @@ -327,8 +327,7 @@ void oos_fixup_add(struct domain *d, mfn int i; for ( i = 0; i < SHADOW_OOS_FIXUPS; i++ ) { - if ( mfn_valid(oos_fixup[idx].smfn[i]) - && mfn_eq(oos_fixup[idx].smfn[i], smfn) + if ( mfn_eq(oos_fixup[idx].smfn[i], smfn) && (oos_fixup[idx].off[i] == off) ) return; } @@ -461,7 +460,7 @@ static void oos_hash_add(struct vcpu *v, idx = mfn_x(gmfn) % SHADOW_OOS_PAGES; oidx = idx; - if ( mfn_valid(oos[idx]) + if ( !mfn_eq(oos[idx], INVALID_MFN) && (mfn_x(oos[idx]) % SHADOW_OOS_PAGES) == idx ) { /* Punt the current occupant into the next slot */ @@ -470,8 +469,8 @@ static void oos_hash_add(struct vcpu *v, swap = 1; idx = (idx + 1) % SHADOW_OOS_PAGES; } - if ( mfn_valid(oos[idx]) ) - { + 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); @@ -607,7 +606,7 @@ void sh_resync_all(struct vcpu *v, int s /* First: resync all of this vcpu's oos pages */ for ( idx = 0; idx < SHADOW_OOS_PAGES; idx++ ) - if ( mfn_valid(oos[idx]) ) + if ( !mfn_eq(oos[idx], INVALID_MFN) ) { /* Write-protect and sync contents */ _sh_resync(v, oos[idx], &oos_fixup[idx], oos_snapshot[idx]); @@ -630,7 +629,7 @@ void sh_resync_all(struct vcpu *v, int s for ( idx = 0; idx < SHADOW_OOS_PAGES; idx++ ) { - if ( !mfn_valid(oos[idx]) ) + if ( mfn_eq(oos[idx], INVALID_MFN) ) continue; if ( skip ) @@ -2187,7 +2186,7 @@ void sh_remove_shadows(struct domain *d, !(pg->shadow_flags & (1 << t)) ) \ break; \ smfn = shadow_hash_lookup(d, mfn_x(gmfn), t); \ - if ( unlikely(!mfn_valid(smfn)) ) \ + if ( unlikely(mfn_eq(smfn, INVALID_MFN)) ) \ { \ printk(XENLOG_G_ERR "gmfn %"PRI_mfn" has flags %#x" \ " but no type-%#x shadow\n", \ @@ -2755,7 +2754,7 @@ void shadow_teardown(struct domain *d, b int i; mfn_t *oos_snapshot = v->arch.paging.shadow.oos_snapshot; for ( i = 0; i < SHADOW_OOS_PAGES; i++ ) - if ( mfn_valid(oos_snapshot[i]) ) + if ( !mfn_eq(oos_snapshot[i], INVALID_MFN) ) { shadow_free(d, oos_snapshot[i]); oos_snapshot[i] = INVALID_MFN; @@ -2938,7 +2937,7 @@ static int shadow_one_bit_disable(struct int i; mfn_t *oos_snapshot = v->arch.paging.shadow.oos_snapshot; for ( i = 0; i < SHADOW_OOS_PAGES; i++ ) - if ( mfn_valid(oos_snapshot[i]) ) + if ( !mfn_eq(oos_snapshot[i], INVALID_MFN) ) { shadow_free(d, oos_snapshot[i]); oos_snapshot[i] = INVALID_MFN; --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -110,7 +110,7 @@ get_fl1_shadow_status(struct domain *d, /* Look for FL1 shadows in the hash table */ { mfn_t smfn = shadow_hash_lookup(d, gfn_x(gfn), SH_type_fl1_shadow); - ASSERT(!mfn_valid(smfn) || mfn_to_page(smfn)->u.sh.head); + ASSERT(mfn_eq(smfn, INVALID_MFN) || mfn_to_page(smfn)->u.sh.head); return smfn; } @@ -2680,7 +2680,7 @@ static int cf_check sh_page_fault( mfn_t smfn = pagetable_get_mfn( v->arch.paging.shadow.shadow_table[i]); - if ( mfn_valid(smfn) && (mfn_x(smfn) != 0) ) + if ( mfn_x(smfn) ) { used |= (mfn_to_page(smfn)->v.sh.back == mfn_x(gmfn)); @@ -3824,7 +3824,7 @@ static void cf_check sh_pagetable_dying( : shadow_hash_lookup(d, mfn_x(gmfn), SH_type_l2_pae_shadow); } - if ( mfn_valid(smfn) ) + if ( !mfn_eq(smfn, INVALID_MFN) ) { gmfn = _mfn(mfn_to_page(smfn)->v.sh.back); mfn_to_page(gmfn)->pagetable_dying = true; @@ -3867,7 +3867,7 @@ static void cf_check sh_pagetable_dying( smfn = shadow_hash_lookup(d, mfn_x(gmfn), SH_type_l4_64_shadow); #endif - if ( mfn_valid(smfn) ) + if ( !mfn_eq(smfn, INVALID_MFN) ) { mfn_to_page(gmfn)->pagetable_dying = true; shadow_unhook_mappings(d, smfn, 1/* user pages only */); --- a/xen/arch/x86/mm/shadow/private.h +++ b/xen/arch/x86/mm/shadow/private.h @@ -770,8 +770,10 @@ get_shadow_status(struct domain *d, mfn_ /* Look for shadows in the hash table */ { mfn_t smfn = shadow_hash_lookup(d, mfn_x(gmfn), shadow_type); - ASSERT(!mfn_valid(smfn) || mfn_to_page(smfn)->u.sh.head); + + ASSERT(mfn_eq(smfn, INVALID_MFN) || mfn_to_page(smfn)->u.sh.head); perfc_incr(shadow_get_shadow_status); + return smfn; }