From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=quarantine dis=none) header.from=suse.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641831796453330.1684924546445; Mon, 10 Jan 2022 08:23:16 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255395.437615 (Exim 4.92) (envelope-from ) id 1n6xRE-0002Ef-JK; Mon, 10 Jan 2022 16:22:28 +0000 Received: by outflank-mailman (output) from mailman id 255395.437615; Mon, 10 Jan 2022 16:22:28 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xRE-0002EY-G4; Mon, 10 Jan 2022 16:22:28 +0000 Received: by outflank-mailman (input) for mailman id 255395; Mon, 10 Jan 2022 16:22:27 +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 1n6xRD-0002ES-1N for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:22:27 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 7f70637a-7231-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:22:26 +0100 (CET) Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-he1eur02lp2056.outbound.protection.outlook.com [104.47.5.56]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-36-6a20aE6DNdKfSkQdQ4nROw-1; Mon, 10 Jan 2022 17:22:24 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0401MB2446.eurprd04.prod.outlook.com (2603:10a6:800:4e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Mon, 10 Jan 2022 16:22:22 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:22:22 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 7f70637a-7231-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641831745; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GQ7PQdEZXmFipDNsOtGtorQ//VDHYKsNcKkXsapIQCc=; b=Y1J7Oy4FseY/5jMSfGr9O+NA/A0zc3YpB5z9X2RUgpVIdLIEL4dJgdBzR6LBE2W4/qRWMg IVDAX5I0GEKCGwk687OEWCprkPu6wpqFAYrcTeRdmnizp/SyjRTpEbkyG1QTIXk8TALO+z t+pF1+Xc2tpARr+9fBSgH5C/OAADxKo= X-MC-Unique: 6a20aE6DNdKfSkQdQ4nROw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=app5qRmJp7e3xMCo18xDPUzDaF50E51VAJtFXL8io7dECuxyeZReQA8mJixWkp5F39p+ksFbZPye1y5TAc87BzT8UFHUfBIu7VQlUErsTLLZNvYRRdMqbG+KjxZwu5w4q1rqpfJuPA40omx+7RF+Sl4SyAbOykT8Abb12TOxTQ0aGjj2g3drZue2GMSGiMlNUFUGaptUVOiiR7vj+RWpda+YvFLaE5FQudc9Rj4BSX2ziqC6Emq7J2n3Po+Ql7TlJ7uFAke93mj0hf83D+5EnG/vB4qz7ofFtf0h3m3kJdt8dd0+dMAGrQcRZIjjEmdr94JLPIYVAoMO92Tm0uMcHA== 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=EyEoSTasEfJmkFA13BmX2SyysSWYqAygZWIVBmrrlgs=; b=Ysql0tOieTPkEbJ28UGQPIjfi+UfvLcdMYziHF4wdHCUo3eXdsEsxW4UcQCnp80yWQgr1T6Ze4xFm05XsL0yzBUW5JC0Ge2CCAw8jpOWpUjkZK+wxyR/bJJSEO7PyStWn4/QuMX8NQsc0VmJvtveSIuw5fIZ3Qo6KzJ0+BulbgZQAko6oaobdz0y4kmBdQ2czp/7BAj1PN5pUjXtHhQZq7ZrZ+mLQz83OoJerw1luAsS3pq9pvVVaXB2mrKmWFx93jDCPGSrPDsE9RYKMdCdohXav2cKi6vh7RyEXeqVL/dQHIb7NaAH5RJOTW8nSQXbpxJazyuQCb+TbulCcDPRRA== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <6549b60b-323a-fede-4944-cfd5f7b7e64c@suse.com> Date: Mon, 10 Jan 2022 17:22:21 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 01/23] AMD/IOMMU: have callers specify the target level for page table walks Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" CC: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS8PR07CA0031.eurprd07.prod.outlook.com (2603:10a6:20b:459::24) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5c0b4bc3-48f1-4bf4-db8f-08d9d45561b7 X-MS-TrafficTypeDiagnostic: VI1PR0401MB2446:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: I/EdxZ4t23whpX06CUuQYMfOzPJWTfCJVRlZnjos/TtGgS10z/0Ol9sNJCKoNIcCz6IgzdbwKWfvGrdHXmG03GDByYakiui836A4rfwAZgZwsQqpgb/2BZWkuOW8ehuG5Ii9DNXPfOEjxaR5aGNqAEQZSteouDhQ4ATLQHOVWbn90bPyLSyAMfmfmpbH9qU6IqykJSj6bp6AKNQKlWWUg2ktSdEDYU2OdTYnDFNxCCTLvqhBCOTmNiP5lRBLgSTKo0Jo2N/irRJBqq83oJOaJz8vHofcheBuV8DGq7ZlMD3iIKKpMRfPlREiT533wDfREj4489ectL0VO2QJgXnZ8esyl6tzx/J0yWqRssxiDgCqf52zE/c+upvjWPihS60JMCzK4n9oB65AZSWQloO1RxLeFWYWppp8J3NUWq0116tWvfeLKqi/24gML1B0ES7XS90gViIvYbyDVNdht1P7OZ4HVOhdtFyUQ+qwnJj9y3f/+VqnSpXrMc8f2davbtoXM1DfZlMRVbwbtwIOaxZNc17PY+2rYGGNYRyYPwQy8pIV7z1/WppQqPU48+GZf0kiaxUOSW++VLQSSD/7RITAD6yBV3Axx9pvyc944U3H2fAY2k1gSyfHHwiChAJJeLz3FQMlh2IOlNKVlRxVs4zzj3D/+6vyigEDUOLJ2KREOibx2DWOvVy9YcSO/JqjvyOmdodXDARimF0YYXGKDSitZ4BwcRyXgmYUDupem4Ucw7OWanKtUHp34iMZnlYAERb2 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(31686004)(54906003)(508600001)(26005)(31696002)(6512007)(8676002)(5660300002)(36756003)(83380400001)(4326008)(2616005)(86362001)(66946007)(316002)(66476007)(2906002)(6486002)(6916009)(66556008)(38100700002)(6506007)(8936002)(186003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?lQIQG5Z4pF0ZDJkrTWQrPSpG6jg/1pj3KBEQU55YpK1YumQSEBWZiK4qMuPO?= =?us-ascii?Q?Zta+bFNlgfLhukPYKz1ZDESJQEnzRj/PFAYtRdTgt2QcVI94lD4BSB4cpiYf?= =?us-ascii?Q?XqBWN3+QIkJsI/Fx0kSBk5uA8qzAmwTMFan9yXfl4Jtp9zm4fGnp+v4CF8F4?= =?us-ascii?Q?6jxNjyzKY4HtkK3QO3CcP3zYLjO7igRsQXkXgcQ/l21fgtBwewQasIPdsPPP?= =?us-ascii?Q?KussLLgIZCNZ7u5cdkYzwxaosPFNGWoKcWC+prEMx1aNsmmZWQbRiuRv6cl9?= =?us-ascii?Q?SAhysThYcPjFLmnYxn/SOQzO1rqhAMMsZGGA/VOofbXbkG5Y8SZvuZTdPxZr?= =?us-ascii?Q?rxtG9EWRuNO03tEIthxnubUh+qwegOg94dKG6utdSC1yNYlNFoZEFrb5wP/F?= =?us-ascii?Q?N9jEfjkFfHsi/75TtEOLgZTvty740D6qJYhxvtNJL+Gry6UFEK3MsfMyx3Dq?= =?us-ascii?Q?panmxnvSnrmRR2SAeqFHZmlHkjexzj+xrkuGV3g8kBkHxgM0FoAha8AndnDP?= =?us-ascii?Q?eNoGD+juqbHHFskkj+lZm2uAuW16+GxdyvVCPwuZhz1dY2T9P5F3OxpPpvhL?= =?us-ascii?Q?kv7xLD513aK1BH8tTWT+WmDkq0NnIeX9hfJIEInRHyRS0VTzC4Oa6V5RcBbY?= =?us-ascii?Q?mKVOshaFPu5o4RU9oAedsn5i4PclLUTCME9sD9x6w390RD7L+H93RS/Y+/Wb?= =?us-ascii?Q?dK4jG/DAn1Zsckw8DUM4bfL8g+VhBz5QxfZ7GmjyW2EEYNWTj8g6K5ZHQTLq?= =?us-ascii?Q?0NrsDD+7uGgk76RdKF08a9GsHTYxaWE/wILVVzhIIlb7DRnsZlai4qeM8RXB?= =?us-ascii?Q?C/B+Uwe8Y8JUbqgQF6FhfJnyxC2B3PZCgKMYPn4ed9RrxTAg3zhzTX0lY1vh?= =?us-ascii?Q?Tf36StL0JG1kecaAatE8haVGNvUPKoEVFg6ZJJ1V6ywpHES8B7VMFUkUB+pt?= =?us-ascii?Q?rRsMVjohrPxKu8wgWkpvk85AqOm8OagIsLS4xcSH8qDqcuLyj4Z11qh1GBXC?= =?us-ascii?Q?6eayoWzQGvgL+5w4+qRH/qRufbc4k1pN2mvoFMXiXYSzgdqhBRb3VHyN6EGH?= =?us-ascii?Q?pxqIsMHM6vXBYT8tqZYhDxvUe0fu2qK/0cvUfvlrTTn2JuESnIN/FiaEfWvc?= =?us-ascii?Q?h9qdEdeKK1kpbKBU+p/aJumtLh5aErqHs5lus9e5ci1CKOyonZm6KDSOjfwp?= =?us-ascii?Q?BXBxH+ONIy5rtuD1t71Bln680QR6yMImir3pkqWot8nJ1HxI+/HBzVMsDWva?= =?us-ascii?Q?7RhaMzXldKvg1iyLNiwUz5Xvvp9K5qdpKjUiyyEjIcAH5Khoc4pbEFPCENn0?= =?us-ascii?Q?eJR3jjP1IfQLP8cXwyLZAT1hIkCzysXWwwCTQfdl6h2iIxGRSeH/5jFvtRL+?= =?us-ascii?Q?mAQ8eujltxKlEVdeVMPbVSgN67u686qMrOIh6Dw58/FdIhjqPaf23psLqhLA?= =?us-ascii?Q?HR4AKQD7X5qy2a+lONeTNJzwwZ7canK5rjVEdve4d0kfqv6LLOVuZ4nQZE3j?= =?us-ascii?Q?yns9IBD7v5zEEQ0mBOtsAA9+N+kXrvSCvyhwjkTK61QIF4GEsANkg79MNbV6?= =?us-ascii?Q?abECMV+x1hEDzXHgSFpY0AiEjYTxpNo3Ouux5AZ0tPFgBILJsR/Ek02WoUUv?= =?us-ascii?Q?rmHb841AMAkUyRH9EEUKW24=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5c0b4bc3-48f1-4bf4-db8f-08d9d45561b7 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:22:22.7243 (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: gHhIztEb0toe+3V/PaJr1QwjPEwTi9ESjz2LNUM1sWlp5RTv5t+UgWvi2tgE/HhC0lwtY7iLf5Uyyenu6SkGQQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2446 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641831798083100001 Content-Type: text/plain; charset="utf-8" In order to be able to insert/remove super-pages we need to allow callers of the walking function to specify at which point to stop the walk. (For now at least gcc will instantiate just a variant of the function with the parameter eliminated, so effectively no change to generated code as far as the parameter addition goes.) Instead of merely adjusting a BUG_ON() condition, convert it into an error return - there's no reason to crash the entire host in that case. Leave an assertion though for spotting issues early in debug builds. Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monn=C3=A9 --- v3: Add ASSERT_UNREACHABLE(). Adjust a comment. --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -178,7 +178,8 @@ void __init iommu_dte_add_device_entry(s * page tables. */ static int iommu_pde_from_dfn(struct domain *d, unsigned long dfn, - unsigned long *pt_mfn, bool map) + unsigned int target, unsigned long *pt_mfn, + bool map) { union amd_iommu_pte *pde, *next_table_vaddr; unsigned long next_table_mfn; @@ -189,7 +190,11 @@ static int iommu_pde_from_dfn(struct dom table =3D hd->arch.amd.root_table; level =3D hd->arch.amd.paging_mode; =20 - BUG_ON( table =3D=3D NULL || level < 1 || level > 6 ); + if ( !table || target < 1 || level < target || level > 6 ) + { + ASSERT_UNREACHABLE(); + return 1; + } =20 /* * A frame number past what the current page tables can represent can't @@ -200,7 +205,7 @@ static int iommu_pde_from_dfn(struct dom =20 next_table_mfn =3D mfn_x(page_to_mfn(table)); =20 - while ( level > 1 ) + while ( level > target ) { unsigned int next_level =3D level - 1; =20 @@ -271,7 +276,7 @@ static int iommu_pde_from_dfn(struct dom level--; } =20 - /* mfn of level 1 page table */ + /* mfn of target level page table */ *pt_mfn =3D next_table_mfn; return 0; } @@ -307,7 +312,7 @@ int amd_iommu_map_page(struct domain *d, return rc; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), &pt_mfn, true) || !pt_mfn ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, true) || !pt_mfn ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_ERROR("invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", @@ -340,7 +345,7 @@ int amd_iommu_unmap_page(struct domain * return 0; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), &pt_mfn, false) ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, false) ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_ERROR("invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641831810; cv=pass; d=zohomail.com; s=zohoarc; b=icmemrV8fnwgZsmz90cMXqhDs8nX4C7hXAvlPINRaX8rQw61gLopga1/LcjPRSDyAe5NWRLm/nZbEUjG4N++1GUCRCdSgPePO8b7djks/1+3ZVmxOZ6JnWX1gT41bl5uMzlaO8KukI54a7d/B7CzcZ8y5SUMfAWAjXzXwOayw54= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641831810; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=JfXG07vrt481Wpu05jJkO/De1cKPglNTB2enOwwMPZg=; b=ISa9RMin0qmT8JHdEPK/1cDkYLOhmED0h0LrhAmKT/lrXmoY93eaZRVLLoXqw6XAYd4bxr4Gc8vbug0/QvOfeZ/hJPaTndwW4hp25AQMrrwrRmmdFRyctJdIG3K1bMuvMBxAM7IunSPD9OubWqvBS29PbsMHMQAAJXl4tNX2V64= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641831810809505.2229526714211; Mon, 10 Jan 2022 08:23:30 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255398.437626 (Exim 4.92) (envelope-from ) id 1n6xRm-0002kY-T5; Mon, 10 Jan 2022 16:23:02 +0000 Received: by outflank-mailman (output) from mailman id 255398.437626; Mon, 10 Jan 2022 16:23:02 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xRm-0002jp-PK; Mon, 10 Jan 2022 16:23:02 +0000 Received: by outflank-mailman (input) for mailman id 255398; Mon, 10 Jan 2022 16:23:01 +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 1n6xRl-0002jc-Gr for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:23:01 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 93da5b12-7231-11ec-81c1-a30af7de8005; Mon, 10 Jan 2022 17:23:00 +0100 (CET) Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-he1eur02lp2051.outbound.protection.outlook.com [104.47.5.51]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-23-oevbNLcfNSClFExGJMpDug-1; Mon, 10 Jan 2022 17:22:58 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0401MB2446.eurprd04.prod.outlook.com (2603:10a6:800:4e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Mon, 10 Jan 2022 16:22:53 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:22:53 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 93da5b12-7231-11ec-81c1-a30af7de8005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641831780; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JfXG07vrt481Wpu05jJkO/De1cKPglNTB2enOwwMPZg=; b=cpC2Uf4BzPpH5jDon7JPC7753LrLLuAv0PvBo4XvsgvFQ1Yh04tHkkoi+DEdihNqXFJRvA TDtJYQ0jf9utrj056dlL9l8C6o0oFsuPiUUoctf/glSVRO9kPOcfBzH5NTri7uSTLa5STQ Cmq0s+d6TaaG9MCD9ufEYtskFulsd1s= X-MC-Unique: oevbNLcfNSClFExGJMpDug-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GUeLs/T18jsWZIr7lp/1FLB2eVg2ZktDCCHatpM0oSbCu+d+uDkbzRjks6IM8xVgbN3NV91sriLrJbxXIMeoe/Wubo+mSGk0NvLaQgLGnTyt9lCu+ylbZRN7JlWmtxA5JN9+UVIOUbBht1EHbKdwhaCKue7gNM7inNI6FGzdiO926TImQzqHI7qiaZ7KabuqE0YJt5+VRKgYdb6zD9tzJ3tKS02q0I7ZS2Kprf6F+N7+rs1DvlFB1K549sSfhDmDYfcvy5i684YU1ewBHMsN8NIquibSqSjftKb1FPrqWVq5JvI8JURK8ReXKeAdUYEtIbH5UXjxlzCvrR8SZHnTKA== 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=JfXG07vrt481Wpu05jJkO/De1cKPglNTB2enOwwMPZg=; b=XYOvXFRLSr4sCABI85JX2SUUQqA3Kbba83/jKmVq1cj74VK8l/NGdlJqrUvH9pHTImyOrVqgofDD1BoWgAILQ+LfQGnaG0jtlR7frhKvMByEdb8o5DPHewsJuucMCmQtAAVjgsZ4rKBZfSf30sxS/E1GV4f0Viys1JHNmiIbflHieEQYhc5yP4jO1Rb22PtQdnKhr3qbZSX3LmmutkWPXvWNkdtoHVnNTB3KSe+scSLQUgo45rYcUrJcfHEv+a+HFoLvGo2hy1zPOGQ80OwYXhIZ3d45vyZG9u9S9z8UpQLQ2jOCD9KDFyQ1x4VM4n2OW4ZLhAwKMn0kh8VBXzz7mg== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <5bfc3618-12ff-f673-e880-6ea13bcf8fa3@suse.com> Date: Mon, 10 Jan 2022 17:22:51 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 02/23] VT-d: have callers specify the target level for page table walks Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Kevin Tian References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS8PR07CA0034.eurprd07.prod.outlook.com (2603:10a6:20b:459::19) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4a1c8f0e-354d-403e-5a79-08d9d455740a X-MS-TrafficTypeDiagnostic: VI1PR0401MB2446:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5Cz2cNjnif+1WS93d8MP1vODFqWE2mHAl+j+uBfd/GdkUQVYkGg8NgoFUulqYzlgFARYDwqZtAR0UyMujQwnLZU88SHo8cW0YKD9MbqZsw5goz0TURpLvg/N71MBKCDAXqE3QzQA/IjO2BzAGgbFz8PQJxCFCp30lslLzitIfRvS468bgkR+m3LT5f7A71c/Fm39s5sIwDhbQXMD2kSPf4AxkQEurU2QAhA6WVhkVsqlje8xzm7GatGqnwhM34441kzkbIloEDEQcg4GyKYs0fZd+kWkiYIsIjj4gZHnimss1G9rfSAXHKWm6SIe2swJYZxwEYVilbu+o1LV5OM5QfgW7Kq3hB1AcS7BbjFAFcjnKT4I9PWddA51o8oy1vTl0VeAGpycJ6B2kUtandukNHj9nqJ+rHbwnjW8lZ0SoB6Tbon+5JW6ZaDMDnHf0PaDliKqw1823tkabtRIKdCRdtxWCeiLW70X2JLknmFywlxp80BXfJdsRfm4CuyHBbRRWq7UgLjEVP4yiLxZWyMYxECizY2I38+e/47vOgkpRoPVFTNA5s/HTBMwYvAKmzm+iUTf37v8WyyRi95IVWc6plV/H62gG/+8IA5XQiY+LgsunJrLb8y1nrird1xJ8UZOitYt8fD6fZZk35vi6CszACsmHbNw+nZrdvq4NgKBFhL0F4TxZj/BSwDEygewDHn4LIb8SJzCWbVNhE4WHg5UbcLaqJa8HR+bcKwN/ohf8EhEpU8XqqbufqBxm11/RtQZ X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(31686004)(54906003)(508600001)(26005)(31696002)(6512007)(8676002)(5660300002)(36756003)(83380400001)(4326008)(2616005)(86362001)(66946007)(316002)(66476007)(2906002)(6486002)(6916009)(66556008)(38100700002)(6506007)(8936002)(186003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VWZFOGdNN2RYNXFNNk5pNXBsLzhwQVVzcDRjK1VsaEczSWRTNGZOenczcG5C?= =?utf-8?B?MnFMNDZvUnMxQ3owS3llTDZkenQ2M0dZMHlFRDVKM2dqYi9vaG95V3JIQWFV?= =?utf-8?B?ZXBjZjVZQnh4anVjOERXb0MzRWVTaWlKMXQwSm1qSnVvdWZnc2s3aDFLeUht?= =?utf-8?B?REVsQ0N3ZmNoOGRLSTB1M1ZESGtFK3hSakVqMDAvVThSWVZDNDBzSjFTR21C?= =?utf-8?B?QlhJNTZ3U2lOTGtPR3k3YkdsTzh0Z0VwajhKNnFabWZqd1dYYk8xRFFqaC8y?= =?utf-8?B?NFVZYzZkSzdPQ3BMdVVlcmtOVExNQk5WaEFjd0dqRWhodWZ4MnVoSnJmOFFr?= =?utf-8?B?ZEh3aHlicW9LcGQzSnVlcjZSSGtJOVRtVjJWb2tMNEM2a054YzNUNEYyU3BM?= =?utf-8?B?ZWRpVFJrcEFwUGpucU55T2FjVlh4aStDRm5QdEpQKzZBUWpUQXF4NjJPVGx4?= =?utf-8?B?djJzZ0ZoeUI3bEcrZEhmaXZxcEEzZmNPRGZpOE5nbEUrQjkzSTlWVVdqemFq?= =?utf-8?B?Zlh2OVYvNTJxV3hzZUJ6RTVSMHZaa3lWR2xtNXVJTEhWbm84UkFCdlpIaDVD?= =?utf-8?B?ZStGc21tT0duQ3RKZUw1MU9UWmQ3bnhHNXQ2ZWZkNVFpVnRycmR3bzZQL2Uy?= =?utf-8?B?WjRjSTlEVExubm50MFVvaEd4cWd0cTBIa1lMbDhQUm5ZT1UyeGdMdFFJZXBi?= =?utf-8?B?Rk9pdmdrZjluZ2hONVRBOWVib3hxNEpSenREQ0c4T0YvK0Z3YVdmSUJnRnFv?= =?utf-8?B?VWdmeW1Idkp1RmYrMFh5VUxiYWN5bC81dTRHVVkwRXpvVkxXYitFL3FBcFl2?= =?utf-8?B?MlJFNzlnU1VsY0MyVGFIN0Q5ZXpCVXRHZWpGTjV5dlpOZUc0b0RDZnFaOTA1?= =?utf-8?B?d3lITUZBUGRPN2VGQUtHTGJ3Z3BGeEVObkFtOFR2RjFpVDhqMWU3S2lSRytj?= =?utf-8?B?YVRyenB0czB1bDNjdFJEMDFVQmFTd3QySTlSYzVYSmhaZzM0cVd5eWtaZ1dQ?= =?utf-8?B?N3hGL2VtVjZtcTEvUklkcmRnQkFpZGZCTUp5WVYzaW0wM1NKU1ZwTXUyZnVl?= =?utf-8?B?SlJoTWhsUFAwYWE0U1F2NUxzNjNQWXlTNExZQUNDZWd2aE01T1lpcXNQZHVK?= =?utf-8?B?alVWamlYRnVNcWg4N3UvME9NTHQyNDFVM3VabjMvM28wekFIMHhISi92RDFq?= =?utf-8?B?NTdLc2NZRmJYMjRpenltdzZmSFlBYk5sN3hOWEEydUN1azhiNk1td1ZPVkVI?= =?utf-8?B?VEtxL1JiNkZhYlhKbjhBaHBzQ0o0N24zTFhvZkRiaEZtQStOS3ZpZVpzWW1T?= =?utf-8?B?VDRyWm5hWTIyREpldS9oTDUrMnpqV0lWV1VOM1htQjZFUisrTDF5SThFK1Jp?= =?utf-8?B?ZVN2eTlmZng2cmFnb1Z5ZXFOQjlWNFUrb0RkS3gwV2cxNGlEOTJCOWJocTBZ?= =?utf-8?B?VTNIODBkbC9FVmI5amZNa3B5ZmhXc1loSDVxeVBGVUxrVFFwdGJEK2Via2Zk?= =?utf-8?B?V2x0TG5pY2lycUovNE9tb3pWNWFkTzA0MmxIekxXREtKRWNWYTBLbGxIcWFW?= =?utf-8?B?bXNUZnJrT3VHR0ZqVzVnZVpacWNKc2FpSnlWVTM5cDloTGVwT0YwdHdjT2FF?= =?utf-8?B?WHo0cG1NN1AwNjBkcC8rL04wRkJSd0QraDlRMFNpUk5HcjBVZGpNNFpJMzZU?= =?utf-8?B?UjlIaWVONGJxcG13YVVuYmxyYnp5aG9iMStHNG81NkdmdVdXWFNPYVUxWXVX?= =?utf-8?B?UzdFSFVydlRZRFdGNEo0MjlhbGRTV3dkNHVrSVp6UFczNkdabkpzQ1NMUFNu?= =?utf-8?B?WkJQeTVqUTFaanZVZ1pwL3JmZEthZWljTG43RStqMVFBbGNhQ21oSzJaU2to?= =?utf-8?B?dnJQYmtiMTJOM012dXZmYWFUZ0lvVG5rc21FVHFUWGZqWXYvMEcwaE9uUDBy?= =?utf-8?B?MVlLdUxiR1Z1N1lPMWZZc2RXOEhnYjgxd3YxdURlRGZDM0d1OHhjeEtTbGZi?= =?utf-8?B?Yzl2TEwwUHgrUjhTUXdhNVlVVVJML1Bmb0grK2pnVU8ydW02MUNUNTN6c3hj?= =?utf-8?B?dThlQU5OYlVtWUhKMGY3Z3dXSWdJbEpoMmJjVE44T2s3NVg4WWVzVEtreGRt?= =?utf-8?B?UHZiSzBYSlNJRXVzTjdVSkR5VzlNam5aL042TXlMV2xsM0xzOENCdDNLZi9Y?= =?utf-8?Q?WdzY3CYzEqKrLj36mqXc3SM=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4a1c8f0e-354d-403e-5a79-08d9d455740a X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:22:53.4769 (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: 2LrsU0bzYd/IRH/NtgHy5VCtUTfWP5E9B+RGg3ARiyAbRUyIrXjqCr55nbScVvdoDw+GprccZGCW2J2mSEqW5Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2446 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641831811825100001 Content-Type: text/plain; charset="utf-8" In order to be able to insert/remove super-pages we need to allow callers of the walking function to specify at which point to stop the walk. For intel_iommu_lookup_page() integrate the last level access into the main walking function. dma_pte_clear_one() gets only partly adjusted for now: Error handling and order parameter get put in place, but the order parameter remains ignored (just like intel_iommu_map_page()'s order part of the flags). Signed-off-by: Jan Beulich --- I was actually wondering whether it wouldn't make sense to integrate dma_pte_clear_one() into its only caller intel_iommu_unmap_page(), for better symmetry with intel_iommu_map_page(). --- v2: Fix build. --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -347,63 +347,116 @@ static u64 bus_to_context_maddr(struct v return maddr; } =20 -static u64 addr_to_dma_page_maddr(struct domain *domain, u64 addr, int all= oc) +/* + * This function walks (and if requested allocates) page tables to the + * designated target level. It returns + * - 0 when a non-present entry was encountered and no allocation was + * requested, + * - a small positive value (the level, i.e. below PAGE_SIZE) upon allocat= ion + * failure, + * - for target > 0 the physical address of the page table holding the leaf + * PTE for the requested address, + * - for target =3D=3D 0 the full PTE. + */ +static uint64_t addr_to_dma_page_maddr(struct domain *domain, daddr_t addr, + unsigned int target, + unsigned int *flush_flags, bool all= oc) { struct domain_iommu *hd =3D dom_iommu(domain); int addr_width =3D agaw_to_width(hd->arch.vtd.agaw); struct dma_pte *parent, *pte =3D NULL; - int level =3D agaw_to_level(hd->arch.vtd.agaw); - int offset; + unsigned int level =3D agaw_to_level(hd->arch.vtd.agaw), offset; u64 pte_maddr =3D 0; =20 addr &=3D (((u64)1) << addr_width) - 1; ASSERT(spin_is_locked(&hd->arch.mapping_lock)); + ASSERT(target || !alloc); + if ( !hd->arch.vtd.pgd_maddr ) { struct page_info *pg; =20 - if ( !alloc || !(pg =3D iommu_alloc_pgtable(domain)) ) + if ( !alloc ) + goto out; + + pte_maddr =3D level; + if ( !(pg =3D iommu_alloc_pgtable(domain)) ) goto out; =20 hd->arch.vtd.pgd_maddr =3D page_to_maddr(pg); } =20 - parent =3D (struct dma_pte *)map_vtd_domain_page(hd->arch.vtd.pgd_madd= r); - while ( level > 1 ) + pte_maddr =3D hd->arch.vtd.pgd_maddr; + parent =3D map_vtd_domain_page(pte_maddr); + while ( level > target ) { offset =3D address_level_offset(addr, level); pte =3D &parent[offset]; =20 pte_maddr =3D dma_pte_addr(*pte); - if ( !pte_maddr ) + if ( !dma_pte_present(*pte) || (level > 1 && dma_pte_superpage(*pt= e)) ) { struct page_info *pg; + /* + * Higher level tables always set r/w, last level page table + * controls read/write. + */ + struct dma_pte new_pte =3D { DMA_PTE_PROT }; =20 if ( !alloc ) - break; + { + pte_maddr =3D 0; + if ( !dma_pte_present(*pte) ) + break; + + /* + * When the leaf entry was requested, pass back the full P= TE, + * with the address adjusted to account for the residual of + * the walk. + */ + pte_maddr =3D pte->val + + (addr & ((1UL << level_to_offset_bits(level)) - 1) & + PAGE_MASK); + if ( !target ) + break; + } =20 + pte_maddr =3D level - 1; pg =3D iommu_alloc_pgtable(domain); if ( !pg ) break; =20 pte_maddr =3D page_to_maddr(pg); - dma_set_pte_addr(*pte, pte_maddr); + dma_set_pte_addr(new_pte, pte_maddr); =20 - /* - * high level table always sets r/w, last level - * page table control read/write - */ - dma_set_pte_readable(*pte); - dma_set_pte_writable(*pte); + if ( dma_pte_present(*pte) ) + { + struct dma_pte *split =3D map_vtd_domain_page(pte_maddr); + unsigned long inc =3D 1UL << level_to_offset_bits(level - = 1); + + split[0].val =3D pte->val; + if ( inc =3D=3D PAGE_SIZE ) + split[0].val &=3D ~DMA_PTE_SP; + + for ( offset =3D 1; offset < PTE_NUM; ++offset ) + split[offset].val =3D split[offset - 1].val + inc; + + iommu_sync_cache(split, PAGE_SIZE); + unmap_vtd_domain_page(split); + + if ( flush_flags ) + *flush_flags |=3D IOMMU_FLUSHF_modified; + } + + write_atomic(&pte->val, new_pte.val); iommu_sync_cache(pte, sizeof(struct dma_pte)); } =20 - if ( level =3D=3D 2 ) + if ( --level =3D=3D target ) break; =20 unmap_vtd_domain_page(parent); parent =3D map_vtd_domain_page(pte_maddr); - level--; } =20 unmap_vtd_domain_page(parent); @@ -430,7 +483,7 @@ static uint64_t domain_pgd_maddr(struct if ( !hd->arch.vtd.pgd_maddr ) { /* Ensure we have pagetables allocated down to leaf PTE. */ - addr_to_dma_page_maddr(d, 0, 1); + addr_to_dma_page_maddr(d, 0, 1, NULL, true); =20 if ( !hd->arch.vtd.pgd_maddr ) return 0; @@ -770,8 +823,9 @@ static int __must_check iommu_flush_iotl } =20 /* clear one page's page table */ -static void dma_pte_clear_one(struct domain *domain, uint64_t addr, - unsigned int *flush_flags) +static int dma_pte_clear_one(struct domain *domain, daddr_t addr, + unsigned int order, + unsigned int *flush_flags) { struct domain_iommu *hd =3D dom_iommu(domain); struct dma_pte *page =3D NULL, *pte =3D NULL; @@ -779,11 +833,11 @@ static void dma_pte_clear_one(struct dom =20 spin_lock(&hd->arch.mapping_lock); /* get last level pte */ - pg_maddr =3D addr_to_dma_page_maddr(domain, addr, 0); - if ( pg_maddr =3D=3D 0 ) + pg_maddr =3D addr_to_dma_page_maddr(domain, addr, 1, flush_flags, fals= e); + if ( pg_maddr < PAGE_SIZE ) { spin_unlock(&hd->arch.mapping_lock); - return; + return pg_maddr ? -ENOMEM : 0; } =20 page =3D (struct dma_pte *)map_vtd_domain_page(pg_maddr); @@ -793,7 +847,7 @@ static void dma_pte_clear_one(struct dom { spin_unlock(&hd->arch.mapping_lock); unmap_vtd_domain_page(page); - return; + return 0; } =20 dma_clear_pte(*pte); @@ -803,6 +857,8 @@ static void dma_pte_clear_one(struct dom iommu_sync_cache(pte, sizeof(struct dma_pte)); =20 unmap_vtd_domain_page(page); + + return 0; } =20 static int iommu_set_root_entry(struct vtd_iommu *iommu) @@ -1914,8 +1970,9 @@ static int __must_check intel_iommu_map_ return 0; } =20 - pg_maddr =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), 1); - if ( !pg_maddr ) + pg_maddr =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), 1, flush_fla= gs, + true); + if ( pg_maddr < PAGE_SIZE ) { spin_unlock(&hd->arch.mapping_lock); return -ENOMEM; @@ -1965,17 +2022,14 @@ static int __must_check intel_iommu_unma if ( iommu_hwdom_passthrough && is_hardware_domain(d) ) return 0; =20 - dma_pte_clear_one(d, dfn_to_daddr(dfn), flush_flags); - - return 0; + return dma_pte_clear_one(d, dfn_to_daddr(dfn), 0, flush_flags); } =20 static int intel_iommu_lookup_page(struct domain *d, dfn_t dfn, mfn_t *mfn, unsigned int *flags) { struct domain_iommu *hd =3D dom_iommu(d); - struct dma_pte *page, val; - u64 pg_maddr; + uint64_t val; =20 /* * If VT-d shares EPT page table or if the domain is the hardware @@ -1987,25 +2041,16 @@ static int intel_iommu_lookup_page(struc =20 spin_lock(&hd->arch.mapping_lock); =20 - pg_maddr =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), 0); - if ( !pg_maddr ) - { - spin_unlock(&hd->arch.mapping_lock); - return -ENOENT; - } - - page =3D map_vtd_domain_page(pg_maddr); - val =3D page[dfn_x(dfn) & LEVEL_MASK]; + val =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), 0, NULL, false); =20 - unmap_vtd_domain_page(page); spin_unlock(&hd->arch.mapping_lock); =20 - if ( !dma_pte_present(val) ) + if ( val < PAGE_SIZE ) return -ENOENT; =20 - *mfn =3D maddr_to_mfn(dma_pte_addr(val)); - *flags =3D dma_pte_read(val) ? IOMMUF_readable : 0; - *flags |=3D dma_pte_write(val) ? IOMMUF_writable : 0; + *mfn =3D maddr_to_mfn(val); + *flags =3D val & DMA_PTE_READ ? IOMMUF_readable : 0; + *flags |=3D val & DMA_PTE_WRITE ? IOMMUF_writable : 0; =20 return 0; } From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641831834; cv=pass; d=zohomail.com; s=zohoarc; b=PasnXdBj5cw+QXFf6IQOHMyEQ63rX9Rbag+WdfBnzML7oBMY/YuvMCsPQPVJq8DRp0tJVkwZxLl9EHi+Oj+HdoVRLgSHfRoMQ/lUlUD3fqlRY6DeOzTGCcCsggjpBXT5S2oncNPKKa0Ep6HSb5CPb5TkY0nXMQduM7YpfHCRtrQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641831834; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=XbTDn+4UMa6dRTZFvW2eulMSRTVqS5JomnC2oSl1l9Q=; b=XBn8d/gaPAEHv3zdEv4hqo+kCkBoAoyvr+v7ovXFha3be5+sEJTcRtpZ/nkJKHQ964rq/6hvYkszZNMhfIz6sKriRZR6+mEKwnkynqpnezN7cuWvp7Vx3FHT0CqMbxZ5nj4kKwL3mxoGDadGFzVwlwv9oyWRffIRka1mwROll38= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 164183183442226.87250234273165; Mon, 10 Jan 2022 08:23:54 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255401.437637 (Exim 4.92) (envelope-from ) id 1n6xSD-0003KY-9G; Mon, 10 Jan 2022 16:23:29 +0000 Received: by outflank-mailman (output) from mailman id 255401.437637; Mon, 10 Jan 2022 16:23:29 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xSD-0003KR-6F; Mon, 10 Jan 2022 16:23:29 +0000 Received: by outflank-mailman (input) for mailman id 255401; Mon, 10 Jan 2022 16:23:28 +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 1n6xSC-0002ES-0B for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:23:28 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id a3eca8b6-7231-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:23:27 +0100 (CET) Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-he1eur02lp2052.outbound.protection.outlook.com [104.47.5.52]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-12-M_W2aI7xOxC72dgOclvvpA-1; Mon, 10 Jan 2022 17:23:25 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0401MB2446.eurprd04.prod.outlook.com (2603:10a6:800:4e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Mon, 10 Jan 2022 16:23:24 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:23:24 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: a3eca8b6-7231-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641831807; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XbTDn+4UMa6dRTZFvW2eulMSRTVqS5JomnC2oSl1l9Q=; b=AF3WmaDEF3adRAZLnhBdcgMSbM0vCyBjtHiDji/Z6t5/xAms6WDTxw69kQ1vjnI1ES4qCM QlhlCBqWHtBFjBBSJ0iEys8zldJGR+3Mrf613baU/qPSKyTYRWa1zIm56CHysoyf8DU9oE N//lmj192OIqIivfQa7kUXOwT7BHoZ0= X-MC-Unique: M_W2aI7xOxC72dgOclvvpA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=B4E/CxPk3hp20gDSvpBXWvzQtI5wH/bxQ85CO1rquwN5E8mMvW1P435RWw/HX6jEW/8gYc21d+H/B2wGoZZk/AoCDu8XTf/Ud1dRtAVCcf+63H5XwHaFrIvN26/XMPN9oHNCAxB0l2FuWpu2paw7MrE6qa3f2lnDFRtzaRsJoqyA6RaoRMX/18EKlpr7sibDk8Etpwh5A8vAleweA8sT7eiUeGD60aH3Sa3Fmk8e1gZ0/UsP24oHTzFuPHIaTkbGlc6fwtofu7jtIlx5PNmsyj445dMdLKXbvPpPeyByn2+gMA5GclYLI1eDD7AzJN233HO7Fn0pt8CucB1oYoIfpQ== 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=XbTDn+4UMa6dRTZFvW2eulMSRTVqS5JomnC2oSl1l9Q=; b=Dl3MSBXHOdyULwK3qt+jE/CGfJlTf3QTrkBBB2yIQUN/4jyMMw1SZGCM+iiGR35G6G/KCfNw8UjUz61e80XQLL+/R4BKUaDo9/cGsZ8jb763MXF0mEqiYr75C+TuwMdgWBsfP4hEmNX8hoAboX4keTr8YWjkkBOqiwLtk6H15kFHX0cpXwYFBnMkNHW4baKvrlgK3jfabfsHkIyKya4m/wPb0oscSj0hjVOnyqLINAoKagCyobfnJfz3MTKmQU7JKCAZh6HI24EBko72kxMzz2NlaMRDfMZQjwkvE436AAkoKFj4RdePQJzGKds73qZX/gltJ4gyaZfsW2GF1njubQ== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <10d6b416-1a20-4b1b-d39a-1bf17b2e174a@suse.com> Date: Mon, 10 Jan 2022 17:23:22 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 03/23] VT-d: limit page table population in domain_pgd_maddr() Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Kevin Tian References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P193CA0045.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:8e::22) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2403a243-4d22-4831-2c10-08d9d4558698 X-MS-TrafficTypeDiagnostic: VI1PR0401MB2446:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dvdxYmLMmDAhm18XNAuttSzsDN6XrI6nnC5hnQi8TPfw5UwkYwP0EBz4P/6SLLjXBmvd+Aa9+wbJGKofcdjsCYjo814Vn2abWUvGpLUFQUL/cRY3DyNFq6GBujI32Aal9vZn+8r5YIEQHnzM536eXtbIJU52ZjllkllSNdEoayUIF6pQdPfu25VfvynE3VNQtgOHtGxXCXO7hc+Vo66ubKQVz3cZ6+7XeOISO9TCif0trCwWE0tCSmo0bZfS1BUJfoQDwEHjlsPEkdSOaqj4E+Onxf04rce+swfDa0c+Y/0DIcrFvpw5sv2C6G7ZPBgx/6JdHENOC6Ca004r50k5bw2F6IFfknd7TVGqdWyO9lYqDv8Aj9qy0TZcc09yyWnu2o6VQAc8fwqMttoNiJhFnoqFpZKMQokkkxlTS55ij040L+Sn35Gkr9EHAqsvEIudg9re7q/g1+LyWQbxENj2KjhEY33SWjXwOqvCkBHNXohckeD4F0QU9L0eeT97G6EZ0hCQ0MCawr6lANl/IrQws1N4hDPs8hdGyEm9MP2SkB0wbITWssuQ/NE1OpDVAFReaHMiRaIGsTF5DLb1hdV5klPYSwsjDloPnToJB0+4CLLe1AcjHR3Qsjlc5q6Av25HxO/qXgKSkAsvhQ5lKyUK1aYahdMKJxHDiTsA9SpOpSS3DZc34jExNYftbKEpJWYn7GKWH+ybJdH5nBsvgYnxwvqpxQuN/ICJuc/DGQIxXOrxCRi7/+uywQj91KfKdyNF X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(31686004)(54906003)(508600001)(26005)(31696002)(6512007)(8676002)(5660300002)(36756003)(4326008)(2616005)(86362001)(66946007)(316002)(66476007)(2906002)(6486002)(6916009)(66556008)(38100700002)(6506007)(8936002)(186003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S3ZVNFRDeFAwVUZKMmxQWHMwRHBHd2lVbWcrZWsvSktaMWdKMHJHWklZdHBC?= =?utf-8?B?YU91dStpUFJSeHRRRW1VVWFCUlZwMHlYOU4vTFA1TkR2emxQNWxOT2dackFh?= =?utf-8?B?WUM5NXJGN2lCTkhqY3V4NFRDZkVwUFB5bUZwSlZHdnl3ZnRhWC9UTXZFcm9B?= =?utf-8?B?WjdBNFNxNHJIZkNsbUxoK08xaUVQQXNUSVM2V25DQkd2a3M1VzNWdGF1blNE?= =?utf-8?B?Slp2QzV4eC8wM0RJYzlaVzdieVpSQS9ocEovZjNFMXVWMXJmM0hzTUNUTGF5?= =?utf-8?B?K0NRSHhTbCtQWUF0NGpNWnVLR2d4clJYY29VUzlqTVNQTUVlV2g4UVlMZ2NM?= =?utf-8?B?N3R1Z3ladWR5cEFBRDY0ZlhkbDA5Tmw2VncvYThCRGRYYXhOV0ZEazNIcCsr?= =?utf-8?B?L3hvT2NFN2M0UUNvMHFKSmVoSWRmV1JqeXBnejFVZFN3M3BjNFdEWmFDcm1X?= =?utf-8?B?TUpsSU95K2RYdW5uZytsbWtSTldJZ0xRTUhVUmdlT2hhNFI0d3NKV1pZUnBs?= =?utf-8?B?SStxeTliWThxWW4yMDNlM3VFeWN5UFFETyt0bktBWFo1SnhIRUJIUWhWajZN?= =?utf-8?B?Nm5qdElmYVBSeURxNGp3N25sN2t2VmhCTkFMb2lWSmozUlRiajA3WGhsUmRT?= =?utf-8?B?aENGdXY5UDJBaE1IeWQxQmo0OHBCeFA3WG91TU9NUXVHWU5zLzlyLytyclh0?= =?utf-8?B?elRGWi9SbzNNdFFGSldiWWV5cEhqMERoWGwrMzlzTldTUm94VWpQY0hlZEJx?= =?utf-8?B?SzRRNnZyODlTbTZqNmtRZWJFcWUxTE9yS0xNR0pZSngvVUdXeWY1ZnZNRXE4?= =?utf-8?B?MU9qMFlkR0NBU25xNzJBakxiV3NyV2thdUR5VzQ1Mk1MWEtVS3ZYMEsvY1JD?= =?utf-8?B?cHYxbTlxTzZISHI4akdlVlJ2MXRqc0JCWG9nOFRuVW56dmZXSFZjN1J1VzBm?= =?utf-8?B?WWNOeUxIWmF6ZktaL2c5b3RvbUNzb3A4KzZDNWUrK2RLbDNKbEJlOEdTTXhG?= =?utf-8?B?MFI2VWJPU2ZaVytQeStsbzdxTHU4ZHcxcktYUXdMK3N5R0FBcDEwbkZpeWFH?= =?utf-8?B?cnJLZExiQnNsMXkrK21rRkRGQVViYnkvcElVZ1NtNU93QWZTM3hoQkdRRDMy?= =?utf-8?B?MHQ4R0RsNVdqUU5JdUdmeDRTbUVMaUMyR25CVDRoWmNWbW1ZWkJwZmZZVW9G?= =?utf-8?B?ZUdGYmJGK1NKQWlXUGIzTzNpekVDYVI2REp3OWREZS9zbjhOTHhwbDhJNjdn?= =?utf-8?B?b25qd2h0ZXAxN1JXdEJBUWZyM0tRZU5FR040eWJobE1pWmlpNG9FOHg5bWJR?= =?utf-8?B?eDkrOGU0a3FkWnhBa3Q1OHRjSlc5NEVtQ1pWa0Q1T0pQbGZ5VkxKVGExekp1?= =?utf-8?B?emthU21xKy9aeTV4bWRWUzhlTWY1TEMwVy9adGhZcVFQQjNKY1ZqVDNqRGxF?= =?utf-8?B?bFpLbmlIZG9yQ0dmaE11TUNYd01Qa043Q1ZPbVNqdEUzcnI2QVRPVkpkZzZt?= =?utf-8?B?YTFES3JDRFFqZlVwbXh5dDJydm1ndkZyT0dQMnl4c2t2Sk0vMVNsZ2t5akhV?= =?utf-8?B?RDFEZlZKUFRPbHd5dWljczVzTTJrQjdSWThmTDBoTzlEc3ZvQkdPdXNzNWlX?= =?utf-8?B?UzVpN2t0NUdScEM2aVQ0SHlOTEN6ZXBJdXFXSGx1c2R3Qjl4TkxBakhmVVI5?= =?utf-8?B?ckNpWmdyL25UT2ZTT09WTVEwaENacWVOanhnNXNvKy9EYVBNeUNZT3pLVGZk?= =?utf-8?B?eHhFK3ZiYkFMSHUzOWJnYTROZWo4ZmhKMkhtS1o1SlZ2OHU4UDYxUXBUcEJE?= =?utf-8?B?bHBjTThsRlUrQWRmUm1BQnI5ZTkzVDVWOVUraEVxeHY2MjF2cWo1VU5YZGs4?= =?utf-8?B?ck4yWHU1a0Q1WWJvQm9qYXVEaVl0bVI3NEFHKzJtemNwMVJRTisxclJ5VEZy?= =?utf-8?B?SXdRY0MwazZrT09lV0crZHFHZ05ab1pvaXBtTTZqUFZMQVhWcmxXaHJMZmNh?= =?utf-8?B?VVJEM2JwVGlkd3pQWmpWOU84MytabjZtU1VybXdvRmpobTZ6RjVYRTd5UHVn?= =?utf-8?B?WWZQZ25FM3RXQ2w1VEFTMDBzb3NQQmE1SjNJWEJuaU52bDJyQU84K2sraXBs?= =?utf-8?B?TyszTXhKZmxoNEJGSncvU0x5TGtOWHJ6cXM2QkxpK1oxS282RXBLZ3dZUTk0?= =?utf-8?Q?cSqX8JroOmDnTfXMcPPQ5VY=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2403a243-4d22-4831-2c10-08d9d4558698 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:23:24.5953 (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: F+VVG09bPfhdb/5dF7G/GDk26XD8RlS2cKFTdgsjH3SSeF5AN7tE42zon8aYEVcF7WemUy8FEJYebyQpBUG9bQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2446 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641831836372100001 Content-Type: text/plain; charset="utf-8" I have to admit that I never understood why domain_pgd_maddr() wants to populate all page table levels for DFN 0. I can only assume that despite the comment there what is needed is population just down to the smallest possible nr_pt_levels that the loop later in the function may need to run to. Hence what is needed is the minimum of all possible iommu->nr_pt_levels, to then be passed into addr_to_dma_page_maddr() instead of literal 1. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- v3: New. --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -55,6 +55,7 @@ bool __read_mostly iommu_snoop =3D true; #endif =20 static unsigned int __read_mostly nr_iommus; +static unsigned int __read_mostly min_pt_levels =3D UINT_MAX; =20 static struct iommu_ops vtd_ops; static struct tasklet vtd_fault_tasklet; @@ -482,8 +483,11 @@ static uint64_t domain_pgd_maddr(struct { if ( !hd->arch.vtd.pgd_maddr ) { - /* Ensure we have pagetables allocated down to leaf PTE. */ - addr_to_dma_page_maddr(d, 0, 1, NULL, true); + /* + * Ensure we have pagetables allocated down to the smallest + * level the loop below may need to run to. + */ + addr_to_dma_page_maddr(d, 0, min_pt_levels, NULL, true); =20 if ( !hd->arch.vtd.pgd_maddr ) return 0; @@ -1381,6 +1385,8 @@ int __init iommu_alloc(struct acpi_drhd_ return -ENODEV; } iommu->nr_pt_levels =3D agaw_to_level(agaw); + if ( min_pt_levels > iommu->nr_pt_levels ) + min_pt_levels =3D iommu->nr_pt_levels; =20 if ( !ecap_coherent(iommu->ecap) ) vtd_ops.sync_cache =3D sync_cache; From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=quarantine dis=none) header.from=suse.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641831972548984.7435425506899; Mon, 10 Jan 2022 08:26:12 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255411.437648 (Exim 4.92) (envelope-from ) id 1n6xUE-00044H-Mq; Mon, 10 Jan 2022 16:25:34 +0000 Received: by outflank-mailman (output) from mailman id 255411.437648; Mon, 10 Jan 2022 16:25: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 1n6xUE-00044A-Jj; Mon, 10 Jan 2022 16:25:34 +0000 Received: by outflank-mailman (input) for mailman id 255411; Mon, 10 Jan 2022 16:25:33 +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 1n6xUD-000444-B0 for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:25:33 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id ee7772dc-7231-11ec-81c1-a30af7de8005; Mon, 10 Jan 2022 17:25:32 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01lp2057.outbound.protection.outlook.com [104.47.1.57]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-22-D_kf8NK-OCqp2lTDk0p0Yg-1; Mon, 10 Jan 2022 17:25:31 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0402MB3392.eurprd04.prod.outlook.com (2603:10a6:803:7::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Mon, 10 Jan 2022 16:25:29 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:25:29 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: ee7772dc-7231-11ec-81c1-a30af7de8005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641831932; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bZDLkEqTer3O17aBOCHdhQ8xeDX9ptV5RIek8aDqpCI=; b=IrFiJhyTHGoKOz6P75OelATBvo2Ev5Of+7mwYlgBc0ofBLwh48Qj2716gQeMvQshV+K3GH L/HoMWQGdk0cDiBuTx6vpakwlaoGsYc3M/bDKjEv9HtCBfOWdslx1JbnwctmQfq3WcwmIY /uU0drBQ6ROkX2GVX769hpQGz39GidE= X-MC-Unique: D_kf8NK-OCqp2lTDk0p0Yg-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OsKngWXwq3HlJ+nCuXgfco1HTxiIWz1hu9Yt2npknBvZb14w0pFELvozv1sZZyq9fhFHccVXDFIxdWCF+EkRYRC5PbF8kSeifA6ZGsJZ+lcCtDzCsJ6T/JJLwEuT1CAZUlc9Qv8X0mOXftBcCNa7O674ZH621u8EV5KUPWyh4wEsaPdICbK5lX/NdJSjHDskgJR0mYc0rVQQnBI6su3W8bX3/XyXnJyZvhzJP4VrXvFOS+lfPPE9NlMetzQmV0CN39wr4+s6MCYfGtf8v4oFu5eBuGbfwkfNJ3THRKlRIhD9Exf3KuXnDMUWbZLwxwt7YGWOerRhXUQmMyYhyPaNvw== 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=LWxKtl2bnXWnDaf7ZhGSGx4BTSmBYb3ptYMsyNa3h1o=; b=C/JTkjBwIZI72zQF0CnxWBMsgeR3vCpyrfeynsFdpf9ndjEnpVq2T/DmOU+iUgdfBrpWui7+ihgm1JU/FdG+fU9HLdf/qqhSU5/dLFb0OgzN+kZFgtjSehNSWbemfVEY8mT+sPeIXCxSCqndkuU79EIm22S/QuWdTkaicGvzZozcCfkRzGJk0WdwW1dAEbXc3Npt3S1OTbQ5Hxasz6Puy4uD5721AZdiT+4B4SLcDaD7R5F2EAmmIWX6zzrQr7Q9ZXJGW8w8fkIysTWdowJOg9WQysPy6x5ugoQXbl6mh/zuk1rQwO6Bw8GvO00fNRqwnxXQDm+7XuWiyjuySRu+jA== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 10 Jan 2022 17:25:27 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 04/23] IOMMU: have vendor code announce supported page sizes Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" CC: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Julien Grall , Rahul Singh , Kevin Tian , Bertrand Marquis , Volodymyr Babchuk References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM5PR0301CA0032.eurprd03.prod.outlook.com (2603:10a6:206:14::45) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d2faa2da-e1b6-4ecf-78f0-08d9d455d0bb X-MS-TrafficTypeDiagnostic: VI1PR0402MB3392:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6108; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: aZrei+NG9oS0T1oIG9HOCh0ND7jgu6oGoYjkLCpslztiN4368e/G9Clo1sVtvRM7z9pXbHWWvCctoOhyESnCg8ZPgvqAkDsDB/x7OAOds4TyOsNpG5HozA28iXBhjNelIO1b1h0zY0XRaeY+szsAu+VBsowoQ6dztOdAj8c4VkKrtzIqK/dAV55m6om21zakhvEf/n764p+JGF0e70+nxNEyaD2dWIwwzyOJgv6QUZb9ZOHCpMLSLG9zsyyGM0ooH7S+EImil1GAq//6ngG6+lOA1+2cbzg/YM+En5gEFVIpBHx2AbPAy8J+Vi/m0QTXWxV7LFeEnuFnG+waYJRtfZX5fPZzBeT56M3YhUvoMyD3451hgWRTbCgakG9H9I4nFad3TUGeaIf2oAHJyBYsA12A5cZnikx2kthfVHNddUDXPr77193R5JOZv37ClrDoLHrvpYFCRiXscn+zYeb5x+CHvo2Nc2qEVLC9Xzut+GtYRYc4SZfT4I7upXxl3Qm7/4xRFaOBNYdeXEmj4BKfhpIkn57Hv1CyFWivAW7otKFuUzODCMNpwgj52G/tSuWJBCF4ClHDSAvY67QQUmu5rrpKyJ4hiqIIGMGhLlu6uyrBvrMeNoTOWKzo46NiZNQ6zK9lUKjmYbQgbTkNXgnKHubH5UTrS7ec5f0VSY2IOdNGRse9xm2nD7TPl5E/aeZOcD4Inv4uiR4GqInFF4HDqKqXtuW+gdXWnRhn+s4eCTf2tSy6H0STtcCbs5k8WwAZ X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(83380400001)(6512007)(66476007)(66556008)(66946007)(86362001)(8936002)(2616005)(316002)(5660300002)(508600001)(31686004)(26005)(31696002)(186003)(6916009)(38100700002)(36756003)(6506007)(8676002)(6486002)(2906002)(4326008)(54906003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?E4Jtw7WFATYM6tldy9SEdGACQDl7iXn7y7sMa9/CO9aZakeZd86Nu5XQrkFs?= =?us-ascii?Q?9hrX7pNIUQztMOiXSM53XScLJ96dCbZC1P7oFKnn47IEz6C615BBuf77OOvH?= =?us-ascii?Q?Uj9NSUsQkKYxyFx+iFEdl3WHK4v09uGaEQpmBRo2mZEmE2X9u0fidciBDkGe?= =?us-ascii?Q?6QLjXHJCGme1oiozn+/wfUZLH2q2qN7Y/3v7gYAOS38NsEzPPSbxh0Tks2jP?= =?us-ascii?Q?c6P1OK0ShwE516NoLIKUIYQGbXeELPgX9uH0D9qs+vS9Rrhw9TCe3daQPFcX?= =?us-ascii?Q?ClxLdF2GAPp/JukpQms5d2WJP66VZdqTDbAbLK6UCTZJKIjPvYEMbJnjBeTJ?= =?us-ascii?Q?ztalA9D+H8ohtt2an0dXB+2Jd31MPIEiWHruUyMHpqaO7N/e+DVUO13OlDb6?= =?us-ascii?Q?BnkdspqyKwqoiRherpEvyVm2UFL8ctbgg7b6gPYNw16HTTiCx0w4bv8PJzGy?= =?us-ascii?Q?WgRSmCsbMSrlCdSwEI35V+rF0ufBnChwkZfpmPGhdmiuL/tZlKs9Hvn5pOfL?= =?us-ascii?Q?+nPQMMxB3uRoYjzScUi+VhI2htvl13KiO+njAnM9Q7gpAmBhpeE77WqgHW61?= =?us-ascii?Q?eW6Sp9zFKIOdMBXczMfZts1ywTcLQC244Gsj7AdKdtt1OUOQeO9lVlVALmWj?= =?us-ascii?Q?IwGJv02IgWAdrNuSIXkx8WQuWgAolU0FWpkLL36PbKUZKFxFu+0CtqO4iWuP?= =?us-ascii?Q?9TkaT3sdJIQvxVMGWw0ZH36OMo31/Pt2i1TNrcoy5KptFiSzpe10pOlP/XKa?= =?us-ascii?Q?OP1VjQD0IHxmubVSWpOazQcEcnfDxbsHDNDcBmtE13CB5ggIw1tLqXk9zzAG?= =?us-ascii?Q?ttB6SNbwj+sNyBGu5QI5rw3YaBYYhL/lcSNKXLXiKWh4bZGPfjQATwTA/LUG?= =?us-ascii?Q?bF97dzr4FllJiPkLCr4w883OdonG7YNx1nSArnnboD5cNFgd6E/3rq3pi5J2?= =?us-ascii?Q?EIvOQMGZxXW6KgCBa4/DZAgyCqd6+0HViLU/tRsimt5QV/qZgRckLAN7V1vU?= =?us-ascii?Q?tBfKhQPJPCvlVhjqt8kBYEvCbHcXai0o0vNQOf9Y2KJVtjFTCezxa5hOlevQ?= =?us-ascii?Q?B611+mVaYChytwOInR5ngX/Q+7w3avjJpvIO+zuCH8wbCBXvcQTHUVQyTj2w?= =?us-ascii?Q?8zwSgClM8LM8dL/V4vHtdjIriFdQixId53T5Z0ZE8yIyNYWU9p5d3eLw8rTt?= =?us-ascii?Q?S+OGh7G69f3N10IaXNJGYBteL/o/WLmj/DBnOcLGR3Tfldlw9TPw7RW+G1R0?= =?us-ascii?Q?63XT9FW33cCJIh6v4xpS3h2YplCm2y+VxCOTMDygVAC9C9LjYXnf7p/2+tJL?= =?us-ascii?Q?rq/3qT0sba0eg5KO4fwSAfLEg0Mml2ljOAbXzZ/SovMBZnybTgUOQBAwlUyC?= =?us-ascii?Q?wwQgSQjru+jNdCTTLDymqlnlQ66LMcIBH4cDRFSLSAOqYQ5u1VM6Uo/Z6YzU?= =?us-ascii?Q?p8BL7lCsI8+Wuv8cCp5y4auRsjkyRxIecihxVCYItwmtJjvRiGVamSiyQstt?= =?us-ascii?Q?7l3x9w5qUw5DJgw6pG41YmP+COfK6sMI7ENm+ufBPs+m917lLSIqbGDvd3Ix?= =?us-ascii?Q?nmZvjiSLkWVhdVOhJoej5vXzrx4xkNryiidv0mo4dRg2HgDEMyrxhM3nvbj8?= =?us-ascii?Q?cDWUPo42PY6z5f9CYZg3cHo=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: d2faa2da-e1b6-4ecf-78f0-08d9d455d0bb X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:25:28.9971 (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: H/Uihs4ccGLLIl65xuPt3a+ZejilkpHNKkm4XvGrbOPY8xFr5NqY6ce0V0dhFFT049P3d5EEsQAubCcn6WMY/Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3392 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641831973486100001 Content-Type: text/plain; charset="utf-8" Generic code will use this information to determine what order values can legitimately be passed to the ->{,un}map_page() hooks. For now all ops structures simply get to announce 4k mappings (as base page size), and there is (and always has been) an assumption that this matches the CPU's MMU base page size (eventually we will want to permit IOMMUs with a base page size smaller than the CPU MMU's). Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian Reviewed-by: Roger Pau Monn=C3=A9 Acked-by: Julien Grall Reviewed-by: Rahul Singh --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -629,6 +629,7 @@ static void amd_dump_page_tables(struct } =20 static const struct iommu_ops __initconstrel _iommu_ops =3D { + .page_sizes =3D PAGE_SIZE_4K, .init =3D amd_iommu_domain_init, .hwdom_init =3D amd_iommu_hwdom_init, .quarantine_init =3D amd_iommu_quarantine_init, --- a/xen/drivers/passthrough/arm/ipmmu-vmsa.c +++ b/xen/drivers/passthrough/arm/ipmmu-vmsa.c @@ -1298,6 +1298,7 @@ static void ipmmu_iommu_domain_teardown( =20 static const struct iommu_ops ipmmu_iommu_ops =3D { + .page_sizes =3D PAGE_SIZE_4K, .init =3D ipmmu_iommu_domain_init, .hwdom_init =3D ipmmu_iommu_hwdom_init, .teardown =3D ipmmu_iommu_domain_teardown, --- a/xen/drivers/passthrough/arm/smmu.c +++ b/xen/drivers/passthrough/arm/smmu.c @@ -2873,6 +2873,7 @@ static void arm_smmu_iommu_domain_teardo } =20 static const struct iommu_ops arm_smmu_iommu_ops =3D { + .page_sizes =3D PAGE_SIZE_4K, .init =3D arm_smmu_iommu_domain_init, .hwdom_init =3D arm_smmu_iommu_hwdom_init, .add_device =3D arm_smmu_dt_add_device_generic, --- a/xen/drivers/passthrough/arm/smmu-v3.c +++ b/xen/drivers/passthrough/arm/smmu-v3.c @@ -3426,7 +3426,8 @@ static void arm_smmu_iommu_xen_domain_te } =20 static const struct iommu_ops arm_smmu_iommu_ops =3D { - .init =3D arm_smmu_iommu_xen_domain_init, + .page_sizes =3D PAGE_SIZE_4K, + .init =3D arm_smmu_iommu_xen_domain_init, .hwdom_init =3D arm_smmu_iommu_hwdom_init, .teardown =3D arm_smmu_iommu_xen_domain_teardown, .iotlb_flush =3D arm_smmu_iotlb_flush, --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -470,7 +470,17 @@ int __init iommu_setup(void) =20 if ( iommu_enable ) { + const struct iommu_ops *ops =3D NULL; + rc =3D iommu_hardware_setup(); + if ( !rc ) + ops =3D iommu_get_ops(); + if ( ops && (ops->page_sizes & -ops->page_sizes) !=3D PAGE_SIZE ) + { + printk(XENLOG_ERR "IOMMU: page size mask %lx unsupported\n", + ops->page_sizes); + rc =3D ops->page_sizes ? -EPERM : -ENODATA; + } iommu_enabled =3D (rc =3D=3D 0); } =20 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2891,6 +2891,7 @@ static int __init intel_iommu_quarantine } =20 static struct iommu_ops __initdata vtd_ops =3D { + .page_sizes =3D PAGE_SIZE_4K, .init =3D intel_iommu_domain_init, .hwdom_init =3D intel_iommu_hwdom_init, .quarantine_init =3D intel_iommu_quarantine_init, --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -231,6 +231,7 @@ struct page_info; typedef int iommu_grdm_t(xen_pfn_t start, xen_ulong_t nr, u32 id, void *ct= xt); =20 struct iommu_ops { + unsigned long page_sizes; int (*init)(struct domain *d); void (*hwdom_init)(struct domain *d); int (*quarantine_init)(struct domain *d); From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=quarantine dis=none) header.from=suse.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641831996535317.8928286577227; Mon, 10 Jan 2022 08:26:36 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255413.437659 (Exim 4.92) (envelope-from ) id 1n6xUm-0004aW-0Z; Mon, 10 Jan 2022 16:26:08 +0000 Received: by outflank-mailman (output) from mailman id 255413.437659; Mon, 10 Jan 2022 16:26: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 1n6xUl-0004aP-Tb; Mon, 10 Jan 2022 16:26:07 +0000 Received: by outflank-mailman (input) for mailman id 255413; Mon, 10 Jan 2022 16:26:07 +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 1n6xUk-0004aH-V0 for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:26:06 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 028aa980-7232-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:26:06 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01lp2051.outbound.protection.outlook.com [104.47.1.51]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-12-mkJHBeTsOu-3PtrBbiQ_Ew-1; Mon, 10 Jan 2022 17:26:04 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0402MB3392.eurprd04.prod.outlook.com (2603:10a6:803:7::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Mon, 10 Jan 2022 16:26:02 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:26:02 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 028aa980-7232-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641831965; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=26g4ivn1MRCUqbsewHobzs7UcdJkFPDivX5/i4ZveLM=; b=cC3YNE9n4F1Cj3CaKf+BjaE8e5NjkpAnocrFlFkEQjDjheGeEskqltWoOBiSUztkb9H6EP wx4fh1tYYLyvIHmeq3s/kcXLf8dQvutzmD/dUi84JE8yLjyTNqEImAxeyzDHugNc3EeUg7 WEkbF5UAxyKraboIUZBLhMFSOJo4rNQ= X-MC-Unique: mkJHBeTsOu-3PtrBbiQ_Ew-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iCPZlyyjBlpGx6kn3tWwHgKZXlIgWbfseuAthvGSPetQ6M6bUM2PZHm8ojGqSoHOaiyt6VJcbYqPqI5Pd3+800fc+U6U11k+/PeK/qWs3tyk04zInm4zQzcJjYXR4Jfios67Lj/ul8AH9uOCR16WuvEDO5EIOfEiQojLBHKfyQXgV5fxYUGK8XLiD5fHrG+/2bGF+GPTfV1R0DiLNGFAMZNZmgz4AKuTXddUY5yWrMA29hFD62Ta0OUlB4tDCkqIFQ812GFV0UHcikAkwvzrJYt1QBFG1v91ViCpGHwRjPdeuozTvpSbvNTY3PokGAxOANvMCMVAqO48fMV7oicmPA== 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=wTdXIg9P0QuVubgLqaqmEja0RWzTevUYMxmQK3d9wRo=; b=lBF5m6QUVRhF+6eX+O57SNhwYbe4dmTDOBRlldX+fZ3Bj5jL3yzzMLPcaIvmLHFQ6fdWdGIEt/EE19UdteEU96JX1wPUKqS3bR2a2EsOLrq6trV+L7HlLI+G/3A0W30BxLc0OlnfYUZarOD4PXiT4VQlFXVNLFRDInbbhzvWU6aElIsda+hmKZkuMsyY2DgdTdVMIKWCN/U/UI8Ctzg9ToT+VERQ5077MGsisq1KyuYBHqeElLo2TY5twJsD0UPcmqxIhvTj0m+xhBptkjYUHEQl2Bh0DDqHS6qsLSk7wJTp3JQr+4m4xm5kMjIOw8XeN3+8Wgk78xFT7AgLSsbXzw== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 10 Jan 2022 17:25:58 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 05/23] IOMMU: simplify unmap-on-error in iommu_map() Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" CC: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM5PR0301CA0012.eurprd03.prod.outlook.com (2603:10a6:206:14::25) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a9a01eba-bf58-4f0f-7184-08d9d455e48c X-MS-TrafficTypeDiagnostic: VI1PR0402MB3392:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:265; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: t9AYGJ/OF+zJvKuVEoxxyAvLMs1JuL6OAFO1KWi3DXeXw3SvmUSmDCAfXiQ7jb+BLtOlPe+O04TThEexu9HITKwwhgg8TOJgl0/p1earIpAB8JzWd1Nvrc/ZCDyCcLrdNpCTlC7Fo8/PisJjSMiyOPiqnVJuU79lTh779k7l+KGJD6T0qop2XuDvIHQGRDj1GFk9v4N8tHb5T7lTTw/3jJ5emqUKD9PsWiJIBGeTbrKmi5HmRjKgraJgr6pzk7PFz7D3yhc0s7efOWHsCXC1h/uPKaHldSLn+OjPzEk/DS7yUG+maTg2SnRtXr6+jPjCzJgjBO1Nqb/kN49gdW644KsITZqoC7w+xQu5fb9pUhPFLnwrmvGecDqf0RTG8b6BajwOMNLBTqwinOlY13udujDg60YcCKCCz0ojoguQDypz1t9cQF085gAVeHRPUmnQy13wKHp3EAZJ81W0k4n3CkvnQuy052MDc7GeCKzh4Fm3lJbBAakrvGa5x9SiD83wlCmqrXK4771sPX0WPVrbDvd7bmIn+2Qw5+6soU6FDcDzMIVbuoGxrmPw0/nfZ+qFOUSkg5o5zMq/UVr8JqH7ALsQrFIxPboLQYWxvjYVxwafkFNy1hn2IoYom358bLLod7IYRxnT5E5aHhh4npYQ+rZBzK4rqPW1WHk4biArA3PO86i14bX8R2Wex7R8phkVWSoAB74CztKSjiIb0tK+ZiU0oGuXwM34egCtiTQxU2656BgnjmH3dOOy2fJqafl4 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(6512007)(66476007)(66556008)(66946007)(86362001)(8936002)(2616005)(316002)(5660300002)(508600001)(31686004)(26005)(31696002)(186003)(6916009)(4744005)(38100700002)(36756003)(6506007)(8676002)(6486002)(2906002)(6666004)(4326008)(54906003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?1jU+M6f2xwHoS+rTtezggcIkBYL+V1AqFELNEI/5ZviJWXlTLxpu/RfhqhQ3?= =?us-ascii?Q?Q1/vjrFu49Ze0TNyJ2uu95l44IEPTaehU4421j3KYzqYm2FTYvp00U3HFYFf?= =?us-ascii?Q?qsmudaInzha98G4f1IoX9BSK8xUvren2D74n0DzbJ29T8aS3A81ROhu1K7rc?= =?us-ascii?Q?veXikNfaUpaUsvke735WkDDClT4MqvSdaiumSkJgDNtEVPdTuZKzghDACVKQ?= =?us-ascii?Q?l6DCtyBJA9q/ZlY0Ih/Ie2i1E5IG952LLpTLQDLj0QWr81GAdyZS+BBaRwxC?= =?us-ascii?Q?1Eqsj5CUZ1rvzyDxDAGHRz7+cMdW+oRSGvau1XkrgAfNqCSPm4URVSwL/ogr?= =?us-ascii?Q?Z43C7XW/b7Ql2MQcdRbP1jxtXTaGX0eGWKsXgeBKezoJKgSf0RnYovCRxxaw?= =?us-ascii?Q?HjWYovi2T8ghCNF9ON58Vy6TWaM7wy4G4uEKwBcNwjcOdX9r1JYi3pbDqVzU?= =?us-ascii?Q?xfihO4HZFv86sOS6nlTP8MrTJqkwxwt2gvNU9KWZcG7VsKaiTpxGHo2lKN9P?= =?us-ascii?Q?FALjiyhi+dAJfvvi9SHDOdjufBAm7hcmggu7GktYxzpSrQNEfBDWDUPnDkL9?= =?us-ascii?Q?9D+nSeMMw10Fk9EznYCobn9PzESDx1rQZm13bEhHXcUkI9mFPcWhvBnbz/EZ?= =?us-ascii?Q?hQR7xFBMP8dIAvcXO35HIVh82ewfwHNB5dyjTWARQBJ+XEO+n5J1aO1fEPCs?= =?us-ascii?Q?tFZ3DuA6pzdh81prPXEFdu+Gd715TGwGZOgGSY2WktmVDFJjakvDzzug2E81?= =?us-ascii?Q?u3QIDFD+i7iH/g0EtZzfoW88jaVS5eU8aWqeEuqwhKI+QgqEq7Zd/XPNNqoE?= =?us-ascii?Q?5jIeEzFuyGMHq2FFYv2sJqXFORKyQHTNrzjmF4/BZTfJtrVNRb4mxJSDjc+/?= =?us-ascii?Q?poVYxPTzATicZ/zSvB1LQoTKmjlVh/1KbAq+addq8PB/ZoP2I0oSW+WMxIvx?= =?us-ascii?Q?+N2NouHV6FVB109jrq75IdDO3mL0EXIsekPX6cARx0gNTto386ksLoOak0p1?= =?us-ascii?Q?OQTP22j0006rFAgr6CvxZ2Uvf4SDsqXVtcdPOFssUJXsBfleCyKokg7h2zJd?= =?us-ascii?Q?SWdl/1Uon+QUtVUfC5zW7JJ8fbyFAP8gbppeTBO5inhVfRA9SBGindy6l+A2?= =?us-ascii?Q?aERCEh4Q+WNwPA+Y+n87DuDb0iu/kXmo70WBjRM9GQ5D0uUJZia9jfurkL4D?= =?us-ascii?Q?cNm1tLrFSnf/CJTsu+IxLOgfmFktXcXYER43zzS5Fkqh3HDoc65DfUxtAEiI?= =?us-ascii?Q?xkGSU0cLpOfeUKRNQ70ek+szA0sGQ9sCKwmA1aqDD76GaUzpvz/vgntQ9GTN?= =?us-ascii?Q?gFGhW3TnzRnZn5B3SUQim/WRMZuPs01nZEj9pr6CdVqx1Ujf86e4ii3bQvY0?= =?us-ascii?Q?14nppQFZsIChr6ebwjA5xFvq2Sl9r9zmlx4OISJZJgqa6y9/OiUa4RUmF6PN?= =?us-ascii?Q?9/QUCQEDLhpIYC9N+LmJHmsJGSwwoMiWX2jEm/LVNVMvxa5jVk5GDHPXNzZr?= =?us-ascii?Q?8AYX0qKxuFILEss/7ZOgl1nyRiuDOag89a+yElBsZhvn49SL2BMCElIkF3f1?= =?us-ascii?Q?917kkMHAsjC62DTXTSx7cGfp/fYiG61kJeL77XtZLADEhx+cgqlH1OdMnkrY?= =?us-ascii?Q?0PyGORXSe/zS5+loLAeoIoY=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9a01eba-bf58-4f0f-7184-08d9d455e48c X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:26:02.2173 (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: mreh7tWg3+IatIpfGJ9AsMcmdUeofQdTNaVvWoOm6rGMVSY+HdFRMnJG0R6ISbfaNh5vJGxcF7WuAbEjOXEDQw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3392 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641831998121100001 Content-Type: text/plain; charset="utf-8" As of 68a8aa5d7264 ("iommu: make map and unmap take a page count, similar to flush") there's no need anymore to have a loop here. Suggested-by: Roger Pau Monn=C3=A9 Signed-off-by: Jan Beulich --- v3: New. --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -285,11 +285,9 @@ int iommu_map(struct domain *d, dfn_t df d->domain_id, dfn_x(dfn_add(dfn, i)), mfn_x(mfn_add(mfn, i)), rc); =20 - while ( i-- ) - /* if statement to satisfy __must_check */ - if ( iommu_call(hd->platform_ops, unmap_page, d, dfn_add(dfn, = i), - flush_flags) ) - continue; + /* while statement to satisfy __must_check */ + while ( iommu_unmap(d, dfn, i, flush_flags) ) + break; =20 if ( !is_hardware_domain(d) ) domain_crash(d); From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=quarantine dis=none) header.from=suse.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832059718542.9059835120413; Mon, 10 Jan 2022 08:27:39 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255416.437670 (Exim 4.92) (envelope-from ) id 1n6xVr-0005Ln-FQ; Mon, 10 Jan 2022 16:27:15 +0000 Received: by outflank-mailman (output) from mailman id 255416.437670; Mon, 10 Jan 2022 16:27:15 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xVr-0005Lg-CN; Mon, 10 Jan 2022 16:27:15 +0000 Received: by outflank-mailman (input) for mailman id 255416; Mon, 10 Jan 2022 16:27:14 +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 1n6xVq-0005LN-F3 for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:27:14 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 2aab90ab-7232-11ec-81c1-a30af7de8005; Mon, 10 Jan 2022 17:27:13 +0100 (CET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05lp2109.outbound.protection.outlook.com [104.47.17.109]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-11-KsipVrdYN5OnIj23Hu017w-1; Mon, 10 Jan 2022 17:27:12 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0402MB3392.eurprd04.prod.outlook.com (2603:10a6:803:7::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Mon, 10 Jan 2022 16:27:10 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:27:10 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 2aab90ab-7232-11ec-81c1-a30af7de8005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832033; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JwetSJ0M7Wio+bMzCuujR1FuZNxp0KLup95F+RGEi+c=; b=l3PqmKiAjKrf5b4f/Nt/e5V+ihHBqU/MUaHcsXaM/RNwtwReciJNpF4Ggj3uj+moJArCrV s+0Z7j28oskE5XnnHlOX/P6d128eWUEchbi2ta8U7Nx6+jySTW7D2zccNOcHylwqFPPgSj FvWNRgAtBPsT5089mcgEnZUi00bqFxU= X-MC-Unique: KsipVrdYN5OnIj23Hu017w-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZHkxe4raQQHYNkkbP6mpKAF6Y6WxkxMoaAAUwM/ecqdwSYKxY49GWPO+bWPTB817c9QQ28/uG6C1X1JdWO07wmKIPXuhr5DshmGDP7RACNqgjBayWkGv9cz7H8J/JQNr44xidNA/vWNcCZBv6nw8jYXqPwfRRgsrSwR6RmE4CC2qJ0BvabYGDmTKihUeNOjLR1TBXvIurkPZ8jpqmDbMNAtfwkEmK5c2yGZ7vP64Nhz4N3tAhif/Gbb+cJE/YJFdBCTUSLuLSmtAsbuAG+vL79vWHSuPmbc52dl7+DjBmCcsjz3+rCN1NkH9wzK+gSvFtorHRH2aHB0thHJAL6r0yA== 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=UAjov/cXqo60hlOx+eo/Ja7avwnbn58K8duw+tDk3co=; b=oVUipnc4o0f+wJgRgy7UQGpIY7YHgshObXQBnLHyb8tg+oDlLHe+QHJRAkQSB4oMsCwDSHDNizURdJ87S7d2br44jDijLDz/3lv7+IC9PfhBlXV6waZ34VWUhIRgbX2DS9HHP08tx17pv1iQWygt+f588W+VBFn3+/AxQOYjln+z1uJGKluFsnz6/6ooZ/iK6pAkKMOKMk+jdv1Wn9MzozcHquysMBroKbzdcQoKWaSIUHeN4Sfbe4Y81UQzDCGOtvhCt3kXTr8yXuGEXcwo+KoAbQwVLsH/x3SwmaLr9ea9pUWKKHKooXDoaB1tZ+xcq+TzhcXxC6oKOa6iq/+B6A== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 10 Jan 2022 17:27:08 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 06/23] IOMMU: add order parameter to ->{,un}map_page() hooks Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" CC: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Julien Grall , Stefano Stabellini , Volodymyr Babchuk , Bertrand Marquis , Kevin Tian References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM5PR0301CA0020.eurprd03.prod.outlook.com (2603:10a6:206:14::33) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1b018de0-b4a3-492f-495f-08d9d4560d25 X-MS-TrafficTypeDiagnostic: VI1PR0402MB3392:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6790; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3jyaBEu72/Ct2G5LBSPiF+wZdcHIrrT6XxeNHhYGanDpcVgnGZ5xTo/01j2QJjNsCgxdi6RndWW6IFTpyquKOO4SdL5SkHUpZlSA4Rp8P2uQ1eO6TUFMEV6EIp1xsmOu7NkMr/sCCYKy+yrsGNQFxiBcPif5ATSs1YLIvoEG/1UWtKAnUI3KDGM1KlTlSplrtKKWmuyVwcdhkpLpKf/NaI8BbMWBbOZCtfMiV0dtnw0IMubyw1ir3pEgzFnIfmVBnu7m1vYlwAdJSYOZIVvc0WDFFZcuiPqHT+OS88X8Q7cHGKmEPc/kuVV88WUsXXTFm8NU4S0pxPhNlkgYK323H1I7qWwb2OsLAdYtZ20GBVvcesNAS5o1faQWjimUgpULIzSYI9066njOVoNYl0E8weC7JTD7+kF0eeAe+wyAN8JungcLwX70xdhMQUVrz+9ifg2U7T87S7wiYbaEBiW9s/iwT6UEhP/2PF0Ss1ilJjQGAN5u4Pq6QbcBv4xQ172u9uV8aDVYfEg0ISr0S24frLkx8HvXrZsf8UOuH4j4ABrsXHKaysg5ULMAQuAIJE3WUvlO2Xvdi2j3IkEcFHaRhDpbL4lNek8tJI5w+RBBFD8W4yFgvdIlHFJOFo+pLj1D/f00rNMEMrltts1BEymEE1XsQEWh4Inm7+xAVQfq7nLiAo1rGIjKa9Uw9eRVZ+D6/RnI0NidtLVTVPlIc5aYiSOr6LtumS5D816Uj8x+WlJNuJ08B2uqdCL9GzFNA+r6 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(83380400001)(6512007)(66476007)(66556008)(66946007)(86362001)(8936002)(2616005)(316002)(5660300002)(508600001)(31686004)(26005)(31696002)(186003)(6916009)(38100700002)(36756003)(6506007)(8676002)(6486002)(2906002)(4326008)(54906003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?fw6k4MO6Hjk9xgpUVW/TPpsR0oFv5NkQglml6N4I1ODikudejXLYLiz4fe/x?= =?us-ascii?Q?JO7aUZwfmWc4tg2oX3710a3ccdszECpKVkLDGDrLxxU6IZUtx/3B3FVI5Hy+?= =?us-ascii?Q?hHIZLl2f6HSyqVrGTZOludsUNm0sbIPRHthnQVjoWiK4LfXDL2KSshx5JSEj?= =?us-ascii?Q?qpyqCN2W98JZMdzQbfcUwp9MQIWiX6GjIW8dI+aVXPpUNjgR9fmqklJ51jtB?= =?us-ascii?Q?8PVVFmHDsMD9NQ0u/+DBRxhp1ZXCr3/P3R2S6pmZb/WE3ZjGlzmue8xeJm/I?= =?us-ascii?Q?XQsgJNFJpH86Mw4/Ay/O7S7EAufPZSIHoy0rVqvu9e0/GKx7AxuPEvqWvpvm?= =?us-ascii?Q?z7DoANk/zgBvEMYjtEdyR3jr6rXgle/XGAp7IbwZnL+kbIm0fSzhNny2N8Qh?= =?us-ascii?Q?LQFdAl+jU3OTKEjJUyWdTqzPvdNodIQ8cFxPgl7SvtYxio/AxQOhBfOV7s5J?= =?us-ascii?Q?iKbHf7Fg+Axx9Zkl7pUQ4KSCPw0tv6w/KLwPhUWcoxlS62sn2Rx/c9odNREq?= =?us-ascii?Q?CWbi+KTkCA3fPJqeAcS4PEq63hDMC8ntdjQr8zt9Hazjg4rx8oaVxvgawiNP?= =?us-ascii?Q?jyiHC2HjTEKBxQuXkowLyPH2ljz0VfJjpps0UXOItFcgG8YhtA4KirK6I1F4?= =?us-ascii?Q?cJWkx5Cfzk4rBDDhSOe55nCKiUIdR/GSjb4aKepUZohCZIFjLL++G+6xpGsO?= =?us-ascii?Q?rcV0yiVxrHxcITnlHNPLgHyxPwBD9kwDhRYFd7crD7eGn9yb5BqGG2w3+w0k?= =?us-ascii?Q?JFO2tKWQQb/GxuTq9HSaDDmqdjwYSkgjgt4Mgj6Zl3zbKwM66H6/wzGnJOyr?= =?us-ascii?Q?D7RiAu4eB8Bg0FlrGB055xDoxjVDiTIzOYOudGofiTwKCQskWHnEm7QUqhGu?= =?us-ascii?Q?l2bJwRwPcNdLXhM+pjsvYQfJi0duI/myMCXl+9anK4Msa/wVGeOMWTn1PbQ6?= =?us-ascii?Q?NYFjBZcr732fEG68GGfBX0qh6JJAsRFC/T62fla7gJzUuZ+oR6k2aS9Bxmja?= =?us-ascii?Q?DlwuLBl5eyLVHQw4ApsiKxeULuN/uyM8nknVcIKsCH+eCcrIAcYNNYIywVNE?= =?us-ascii?Q?GOsZJmMT13KstmO533jT8MC8PsBvW7gy0RE34419NVmDIkrPt1bzwyKIGWOh?= =?us-ascii?Q?zCvOk9TB2K70Z2oWFUBOoRdFo7ug43urTT/AmzfL1NdERxGNT3YhMdMtscZT?= =?us-ascii?Q?CrTLqdoO572uVWvmRB2yESsX4mWtx9FHAZEZutXgAPqe1t+nOll8wa+IBt4Q?= =?us-ascii?Q?j3D81CAzJNCO2IMoZnkt6VHzlQl70gt2KYyn1BPeCnTMFhJ6gJv5I1aZ+mYd?= =?us-ascii?Q?WSHiQTyQG795Sdfu4ss+w6wWLJBGP5M1vKiqo7uWTP9wwLFw1qTQ0cNS5vHh?= =?us-ascii?Q?YN8N/NB1b+aMqk/YEZeQXSK4V6ZXRZTIeR2HdBXFDhl1c2QuUbGu5DEBmMua?= =?us-ascii?Q?lE9rOZSWCgd/Pvk1WjQIpwDMYFr6Nllnw9a0Y5r15tKMxzW1MKr5awIRvgyL?= =?us-ascii?Q?zT9Nmyp4UFByHd2CgF8pTssQvWPo7FatnCHYDpYZa1eMryWht2FcqClXc1Q6?= =?us-ascii?Q?wbId/cMQMPVLDDBdnuIz1efrbNwfaE1u7UvrDx1NFsCI+HAr//5Z0tpwPied?= =?us-ascii?Q?Sk2XCAXL5oJ+wQwOdcO62/8=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1b018de0-b4a3-492f-495f-08d9d4560d25 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:27:10.3498 (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: jCJsEQ1jUyCLAncFRl88etKY3INtNwyvyFpn41MmRNvbVwQipKM8LdDtiSqfIAbTkEJKh8SMHZ1nOXFmXIXnFw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3392 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832061532100001 Content-Type: text/plain; charset="utf-8" Or really, in the case of ->map_page(), accommodate it in the existing "flags" parameter. All call sites will pass 0 for now. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian Reviewed-by: Roger Pau Monn=C3=A9 [Arm] Acked-by: Julien Grall --- v3: Re-base over new earlier patch. v2: Re-base over change earlier in the series. --- a/xen/drivers/passthrough/amd/iommu.h +++ b/xen/drivers/passthrough/amd/iommu.h @@ -243,6 +243,7 @@ int __must_check amd_iommu_map_page(stru mfn_t mfn, unsigned int flags, unsigned int *flush_flags); int __must_check amd_iommu_unmap_page(struct domain *d, dfn_t dfn, + unsigned int order, unsigned int *flush_flags); int __must_check amd_iommu_alloc_root(struct domain *d); int amd_iommu_reserve_domain_unity_map(struct domain *domain, --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -331,7 +331,7 @@ int amd_iommu_map_page(struct domain *d, return 0; } =20 -int amd_iommu_unmap_page(struct domain *d, dfn_t dfn, +int amd_iommu_unmap_page(struct domain *d, dfn_t dfn, unsigned int order, unsigned int *flush_flags) { unsigned long pt_mfn =3D 0; --- a/xen/drivers/passthrough/arm/iommu_helpers.c +++ b/xen/drivers/passthrough/arm/iommu_helpers.c @@ -57,11 +57,13 @@ int __must_check arm_iommu_map_page(stru * The function guest_physmap_add_entry replaces the current mapping * if there is already one... */ - return guest_physmap_add_entry(d, _gfn(dfn_x(dfn)), _mfn(dfn_x(dfn)), = 0, t); + return guest_physmap_add_entry(d, _gfn(dfn_x(dfn)), _mfn(dfn_x(dfn)), + IOMMUF_order(flags), t); } =20 /* Should only be used if P2M Table is shared between the CPU and the IOMM= U. */ int __must_check arm_iommu_unmap_page(struct domain *d, dfn_t dfn, + unsigned int order, unsigned int *flush_flags) { /* @@ -71,7 +73,8 @@ int __must_check arm_iommu_unmap_page(st if ( !is_domain_direct_mapped(d) ) return -EINVAL; =20 - return guest_physmap_remove_page(d, _gfn(dfn_x(dfn)), _mfn(dfn_x(dfn))= , 0); + return guest_physmap_remove_page(d, _gfn(dfn_x(dfn)), _mfn(dfn_x(dfn)), + order); } =20 /* --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -271,6 +271,8 @@ int iommu_map(struct domain *d, dfn_t df if ( !is_iommu_enabled(d) ) return 0; =20 + ASSERT(!IOMMUF_order(flags)); + for ( i =3D 0; i < page_count; i++ ) { rc =3D iommu_call(hd->platform_ops, map_page, d, dfn_add(dfn, i), @@ -331,7 +333,7 @@ int iommu_unmap(struct domain *d, dfn_t for ( i =3D 0; i < page_count; i++ ) { int err =3D iommu_call(hd->platform_ops, unmap_page, d, dfn_add(df= n, i), - flush_flags); + 0, flush_flags); =20 if ( likely(!err) ) continue; --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2018,6 +2018,7 @@ static int __must_check intel_iommu_map_ } =20 static int __must_check intel_iommu_unmap_page(struct domain *d, dfn_t dfn, + unsigned int order, unsigned int *flush_flags) { /* Do nothing if VT-d shares EPT page table */ @@ -2028,7 +2029,7 @@ static int __must_check intel_iommu_unma if ( iommu_hwdom_passthrough && is_hardware_domain(d) ) return 0; =20 - return dma_pte_clear_one(d, dfn_to_daddr(dfn), 0, flush_flags); + return dma_pte_clear_one(d, dfn_to_daddr(dfn), order, flush_flags); } =20 static int intel_iommu_lookup_page(struct domain *d, dfn_t dfn, mfn_t *mfn, --- a/xen/arch/arm/include/asm/iommu.h +++ b/xen/arch/arm/include/asm/iommu.h @@ -31,6 +31,7 @@ int __must_check arm_iommu_map_page(stru unsigned int flags, unsigned int *flush_flags); int __must_check arm_iommu_unmap_page(struct domain *d, dfn_t dfn, + unsigned int order, unsigned int *flush_flags); =20 #endif /* __ARCH_ARM_IOMMU_H__ */ --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -127,9 +127,10 @@ void arch_iommu_hwdom_init(struct domain * The following flags are passed to map operations and passed by lookup * operations. */ -#define _IOMMUF_readable 0 +#define IOMMUF_order(n) ((n) & 0x3f) +#define _IOMMUF_readable 6 #define IOMMUF_readable (1u<<_IOMMUF_readable) -#define _IOMMUF_writable 1 +#define _IOMMUF_writable 7 #define IOMMUF_writable (1u<<_IOMMUF_writable) =20 /* @@ -255,6 +256,7 @@ struct iommu_ops { unsigned int flags, unsigned int *flush_flags); int __must_check (*unmap_page)(struct domain *d, dfn_t dfn, + unsigned int order, unsigned int *flush_flags); int __must_check (*lookup_page)(struct domain *d, dfn_t dfn, mfn_t *mf= n, unsigned int *flags); From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832086; cv=pass; d=zohomail.com; s=zohoarc; b=ZClk6XFKoy2IuRXxx+Xbl9KUtjXomNZBg0KfCVHadq+aZTfUXHpKFkI+xSfKyTPsj/wDs6D5BcYJYvSjMy/WnogOIcTmzTBNKCVmDafUvZ/C7EM3ad/xII3MmXGiQXgvPHPX5u+nQlcAfJtz036+fFpmm5rPxyZ4qIB/M/zg0Lg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832086; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=4Ci6FYr5vgpsddeQQwvwG0AliVo/oTZ9JlrqAuexlIw=; b=iLhgHb94CcenUz9h8448H4jwggaNFCmhUJAVmiylAIs5yTwrX715b2faWnBGLHUlQIpzfnwtRYMOTRMhn1jc4oqi75AiCrBKz8agyG4xq1GL1bm/7KccmuFuUWAhX6GREnWHO5GEfPduPTzcZPZmuAvdTuo/N+z78pYJoXz0L6Y= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832086406527.7606597593496; Mon, 10 Jan 2022 08:28:06 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255419.437681 (Exim 4.92) (envelope-from ) id 1n6xWK-0005r3-OQ; Mon, 10 Jan 2022 16:27:44 +0000 Received: by outflank-mailman (output) from mailman id 255419.437681; Mon, 10 Jan 2022 16:27:44 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xWK-0005qw-LE; Mon, 10 Jan 2022 16:27:44 +0000 Received: by outflank-mailman (input) for mailman id 255419; Mon, 10 Jan 2022 16:27:43 +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 1n6xWJ-0005LN-MX for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:27:43 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 3c4f73cd-7232-11ec-81c1-a30af7de8005; Mon, 10 Jan 2022 17:27:42 +0100 (CET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05lp2108.outbound.protection.outlook.com [104.47.17.108]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-20-b74EuAIoNwSR-9eoBflEuQ-1; Mon, 10 Jan 2022 17:27:41 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0402MB3392.eurprd04.prod.outlook.com (2603:10a6:803:7::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Mon, 10 Jan 2022 16:27:40 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:27:40 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 3c4f73cd-7232-11ec-81c1-a30af7de8005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832062; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=4Ci6FYr5vgpsddeQQwvwG0AliVo/oTZ9JlrqAuexlIw=; b=SZF/aNXqj6NJBdSZ4qh80TpE0i0lJ1RQf/fDSsuanWnCVohSGDZktJytRmzXrfcIBLqR/x D7uWt1XTCaSwCGVwusMZsB3mM48GuMz/iCwfX7WD8HSdmInK1OGiG2fU7CgP+jXokbQzD5 u1E63MDV9MPDXKKeRIkxvO2BYOJzj/A= X-MC-Unique: b74EuAIoNwSR-9eoBflEuQ-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oXe3FErESdwWK/tVqWDUYncUiGknfHvuriFH0ty0fpW4RZnNwhcCFtACO/qcQylUXmKFonbiVZ6RGSBiJLMSWYhWnncZ87gl/Lxmtr/o8U4u8hFeBnLn9FPxYMjyYZebl3KmtlmT1DccFdcq7/BzwqSxGQVtd2wzcH1D8h/n0kZX/zcA89krCm8k14VDInjg49nSkr4gOPxHyFK+suO3t4DMqw903/hcOwFC+LNXNkVg0Vxi/Cf7833A7LYIs9jykhg4xfRA+SbO60i/4MGfFcxbY7lf7zaHazSxKGxFzSUliICYr4ZWj98BIRLXeXSBEc2pxqwWd/R/ZvSpSQ+ePg== 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=4Ci6FYr5vgpsddeQQwvwG0AliVo/oTZ9JlrqAuexlIw=; b=N1GZOzsz9A9oPgAYorYKQuEeGisKYaZdQCRQOj3zDZ6C9dtyv4pbgCBGDjVL3abD+fQDzO0aSq1X8N17E9wmf7XlPLcuGfHUBdOxgEEDywum+rDY3Z790zcDubGPwyz4rPPXAf4E9BhM5C17SeyjQ5BvQlKEmxt6m+ChhZeLrTiG/8DgP4NfXvm3kYNpvhiZvGhSTPB3eNAgVHFy1iYXQRBpngwLTgRkYV+5nH56rqPbrJgLrH1kRzyWuTxOyWD5nz0H9Lx1uUmCprsu0hd1N1h+yeDVjaR6xCzH1j84JKMpw+wbDC2tK97ZFE3liPU2/vrqDN/YZ69UAcVDoMI6BQ== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 10 Jan 2022 17:27:38 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 07/23] IOMMU: have iommu_{,un}map() split requests into largest possible chunks Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM5PR0301CA0030.eurprd03.prod.outlook.com (2603:10a6:206:14::43) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 76fa2955-1683-4df7-8fef-08d9d4561efc X-MS-TrafficTypeDiagnostic: VI1PR0402MB3392:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1468; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: raB7xktxxd0Gs1P9zrH+PqCt4PoNG39gAcJ21lW15J/BPfr4ThcLvUYmmUFfdjdWk/wuuVxrcLQKa2IqClWaK18FVR5zIG0nhkLzEhdxMs3I13sd4ptiOLKchXoRRWJE/kjUoz9PaQZpG7y+jgBFcG1PlhJFu9u9BV6Dt9CfTNztHbfeXqM1C//U7PEE+/4K8W3Fz5wVrpjq4TOfpjG0khbsivZn615RrE26vpC0azPSXweabAxOVIxpGmfYLlfG9yarC19KpopkL2y3v9Uddh9H0FJm6jcWSCRBWeyJmDYqjv4H+S1qHN+oE+DL88yeie/IG20zsSHMAaGYj38/iRl59JgO0WiFs1gSmFgLvJdpcI46/I54UDYxcKHOPvL7IYkrIWgJnfz4PTjYA4cWUZpD/R1brt5ZRRzlRnKqGrQUi93CvfwdFXRWSZwgB7UjmYP+v2UkMct90ALeG3tDWsEHov7/aHiIdojsIs4Zm259SdbJwhwhTvEEkdp8UGyorr7xZ3abKkrXum9+431PhjHdolgKfj0fZUrPWxbhJYyloZxJd/FcZWn1ir9VV3EHs68rxwwYfwLrR6uCv1BntxALaGPFSaUOo0rJhuxVjEjNgYSkdjM3zClLywtDAr1N28iqA2TRZE7IlHhfMlM4I/0PN6f/OLzWehmFdsB8yucC0O5LuB9yuxHrvOuoZCyF1f1iuk8rSgPYOsTeLd16F33Ue1ocdlq6ed+xOc0c1tU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(83380400001)(6512007)(66476007)(66556008)(66946007)(86362001)(8936002)(2616005)(316002)(5660300002)(508600001)(31686004)(26005)(31696002)(186003)(6916009)(38100700002)(36756003)(6506007)(8676002)(6486002)(2906002)(4326008)(54906003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cHdVVmV1eEkyMXhSaG84NjJZdEJ2TGNQTTFYOE84MmZTRVc5bG1xbVQxaUNp?= =?utf-8?B?S1lrZEFKRmhXKytkWEdYelFROUNqSWVpZUJLRCt6RXNQcW9qTEFmVjFjUGRm?= =?utf-8?B?WTRzcUZnVDA5THlIMEcrbEh2ZHlJYnZQRkNyanVGUnpmcHZLczcxZ1JsMHRF?= =?utf-8?B?TDUxQi9nc05Tai9neHVQZENZU3BNcVJnYUEybnNMdG9leUxMbUFVNW9hTmdw?= =?utf-8?B?TGRaU2paL3dkY1NhNTZyTmwzbkRTQ1NWRVY1aXBDZncxSjU1Q2lzeWVHZW5C?= =?utf-8?B?OXZrelg1SWo0SWg2a1hqaDVuZ3BvUnlGQkVJOTZaaW1WMmJ3WjRqQmE4am05?= =?utf-8?B?WE42YXpMK3hZSXJBZ0VEb3JsNVVtUm9TbXQwNy9JalM3bU40U0VqSllkMzNw?= =?utf-8?B?eUFHN1k0WFJoQWFCbE5uUTk3eTVmbGRkWSt2SU9wdzZzUWJ3a3lUTEwrZE1K?= =?utf-8?B?VzJmMzVmckU2TTM0RmhuOHpXc2VvZmUrNk94ZE95cjlseG5YOEJoNCtXcFZP?= =?utf-8?B?WVYxVldHZWxUOXowb2ZFZEhBWlM4bSt3OFl1UytZQ2VPL2Z0cTJQOU50eHpy?= =?utf-8?B?c1A3UDcvOGd1TU0yTmxIZXhzSTNrTDdNSjY5N3NabGdoZ3ZTWWR0NW9UVlI3?= =?utf-8?B?N2Iwdm94V1RUK2FGbkh4WUpSc2RoMlYvM3FaYTN6RjlXNC9iOUlpV2tneVJF?= =?utf-8?B?T0k0UDJtS2VzSWFPcmJpck82UkNVc1RPU3pJZW0vSDh4T0FjNGxGQkVITDdD?= =?utf-8?B?VDJhN0tIS0dpRTFUNVVWY2JqMHZ4bWdhTU1hMjVhK1ovR2JyRDZIRFRTRkdF?= =?utf-8?B?M1hVUHQrRVZFL2lQczVWNzY2QTNnZi9jUVo2U0dtL2orNnZtZTEwNzFIOUxm?= =?utf-8?B?OVY5eFJEZUNvT1FRbU82L01vNytVU2VhZTIxUjU4VmY4RFVPZHRsdGVNNFlq?= =?utf-8?B?dU1yQ1hqYmhNY3IzU3huVHV3WVdOSi9ZQThlNVp0SGQyajMwbm5JMFU5dXRm?= =?utf-8?B?ZkNTTGlWbUZlTVZsdWVIQnFHQVIydS8xNmpwc1ZRMTFJdjhCck0rb1lCQndh?= =?utf-8?B?YlpFUlM4YW41YlJqVWxtMm4vVGhwOGFwcHBpQ21ZajBlUEVpYTY4dnlUcXJj?= =?utf-8?B?Zk5MVFl4ZTVtZzB1dEVNNll1cWtTNXJXL3lrdVlnYVV1a0Z4blZhN2JpTFEv?= =?utf-8?B?YTZMNmFsMUZhbEk0NGNkM2pKUE9pRlBMNUxEWFE1Wit5WW9nZmNOakxYUXVR?= =?utf-8?B?dVpoRWUyOGJKVTJDT3RUQnhCdmNWY3VxMVE3MzEwaDhnNWRNQ3FCTk9rNDQ0?= =?utf-8?B?VHZwMVVaWTlOaEpicVYzMkhiRlJta3F4VDVxQncvbGZaZktGekE4bERmUGdI?= =?utf-8?B?UWpteDhOVXlndnZPUmpYWWg5a21KUTlmSjZLQy9vMm1OYmsyQlBWUEI2a2No?= =?utf-8?B?aGozUXF3c2pNQnJaREYwdUJ2MmVJb3N3ZFQ1UWlGMGs1M3Q5dDN4VkRhRmJr?= =?utf-8?B?WEhVTlFqOVdiOERXNnJ3NTkyTXkvQktIYzNpUGM5YnFKTG5uK1NmUEt3dmRm?= =?utf-8?B?Nm5FU1BrZ1BWbG9yUGZ0RjhobkVQTC9LMU10eFJlUHhlWllEVHlxdDk5UnBP?= =?utf-8?B?KzRJRFlHYnNlL1dLMkNxRk5melZuQ2cwY1kwQVhxd0VEMWtMT1BYUHFEd2FL?= =?utf-8?B?YlhKQWxSTU5tNk1Vb2FZTzlXZXJyemFzSUZ1Y01PSlV6YXVrNytLSncvYW9T?= =?utf-8?B?dGloMENGUjBucEVUbzVxbkRjMzBkQnpSQVVFcGVzUUI5V0VxK29nbDYvYVI4?= =?utf-8?B?QjJjVmNwVlFNTFNPY2k2REJyV2VONGk1TjBaWGVQdFNnNEMwYllReWZTM2M5?= =?utf-8?B?OTZkM3FMRW5LeHFIbWxjTTBEY24xQnJ4VlB4SzFzclZWbzVGN1dFNHRueHdu?= =?utf-8?B?VDlVVENTSGVweVRKbllseTVtUVdlVW1nSlluak8zT0xWbXB0ZHdjWWxZOFZj?= =?utf-8?B?QXBmdnBhU2w1eGdHN3NtMkk3LzE5cTNmUmtDNGh3OUdVdXJYejVXZk1PUjBB?= =?utf-8?B?RU1BOTFJK25qQitza3BLUSsxUFpVb0ZjaGg5cnluRW0rNFJKVGl4ckFwUWNm?= =?utf-8?B?clpzWnkxekxaa1paeUFjeURCZjJUSW05TGZCbHBidm5od3d0OXhta2tNWVVz?= =?utf-8?Q?ktixdKHK9Y6hAWSh8voM1G8=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 76fa2955-1683-4df7-8fef-08d9d4561efc X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:27:40.2619 (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: niSfhnqbCFklJOUP9DIxn+G055ylzYnAqBQm5Su01XOvqnDsEvxx1cfD4tj2qj7WIQ1pOw2Uc9j4+PwzeNuzAA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0402MB3392 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832087000100003 Content-Type: text/plain; charset="utf-8" Introduce a helper function to determine the largest possible mapping that allows covering a request (or the next part of it that is left to be processed). In order to not add yet more recurring dfn_add() / mfn_add() to the two callers of the new helper, also introduce local variables holding the values presently operated on. Signed-off-by: Jan Beulich --- v3: Re-base over new earlier patch. --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -260,12 +260,38 @@ void iommu_domain_destroy(struct domain arch_iommu_domain_destroy(d); } =20 -int iommu_map(struct domain *d, dfn_t dfn, mfn_t mfn, +static unsigned int mapping_order(const struct domain_iommu *hd, + dfn_t dfn, mfn_t mfn, unsigned long nr) +{ + unsigned long res =3D dfn_x(dfn) | mfn_x(mfn); + unsigned long sizes =3D hd->platform_ops->page_sizes; + unsigned int bit =3D find_first_set_bit(sizes), order =3D 0; + + ASSERT(bit =3D=3D PAGE_SHIFT); + + while ( (sizes =3D (sizes >> bit) & ~1) ) + { + unsigned long mask; + + bit =3D find_first_set_bit(sizes); + mask =3D (1UL << bit) - 1; + if ( nr <=3D mask || (res & mask) ) + break; + order +=3D bit; + nr >>=3D bit; + res >>=3D bit; + } + + return order; +} + +int iommu_map(struct domain *d, dfn_t dfn0, mfn_t mfn0, unsigned long page_count, unsigned int flags, unsigned int *flush_flags) { const struct domain_iommu *hd =3D dom_iommu(d); unsigned long i; + unsigned int order; int rc =3D 0; =20 if ( !is_iommu_enabled(d) ) @@ -273,10 +299,15 @@ int iommu_map(struct domain *d, dfn_t df =20 ASSERT(!IOMMUF_order(flags)); =20 - for ( i =3D 0; i < page_count; i++ ) + for ( i =3D 0; i < page_count; i +=3D 1UL << order ) { - rc =3D iommu_call(hd->platform_ops, map_page, d, dfn_add(dfn, i), - mfn_add(mfn, i), flags, flush_flags); + dfn_t dfn =3D dfn_add(dfn0, i); + mfn_t mfn =3D mfn_add(mfn0, i); + + order =3D mapping_order(hd, dfn, mfn, page_count - i); + + rc =3D iommu_call(hd->platform_ops, map_page, d, dfn, mfn, + flags | IOMMUF_order(order), flush_flags); =20 if ( likely(!rc) ) continue; @@ -284,11 +315,10 @@ int iommu_map(struct domain *d, dfn_t df if ( !d->is_shutting_down && printk_ratelimit() ) printk(XENLOG_ERR "d%d: IOMMU mapping dfn %"PRI_dfn" to mfn %"PRI_mfn" fa= iled: %d\n", - d->domain_id, dfn_x(dfn_add(dfn, i)), - mfn_x(mfn_add(mfn, i)), rc); + d->domain_id, dfn_x(dfn), mfn_x(mfn), rc); =20 /* while statement to satisfy __must_check */ - while ( iommu_unmap(d, dfn, i, flush_flags) ) + while ( iommu_unmap(d, dfn0, i, flush_flags) ) break; =20 if ( !is_hardware_domain(d) ) @@ -320,20 +350,25 @@ int iommu_legacy_map(struct domain *d, d return rc; } =20 -int iommu_unmap(struct domain *d, dfn_t dfn, unsigned long page_count, +int iommu_unmap(struct domain *d, dfn_t dfn0, unsigned long page_count, unsigned int *flush_flags) { const struct domain_iommu *hd =3D dom_iommu(d); unsigned long i; + unsigned int order; int rc =3D 0; =20 if ( !is_iommu_enabled(d) ) return 0; =20 - for ( i =3D 0; i < page_count; i++ ) + for ( i =3D 0; i < page_count; i +=3D 1UL << order ) { - int err =3D iommu_call(hd->platform_ops, unmap_page, d, dfn_add(df= n, i), - 0, flush_flags); + dfn_t dfn =3D dfn_add(dfn0, i); + int err; + + order =3D mapping_order(hd, dfn, _mfn(0), page_count - i); + err =3D iommu_call(hd->platform_ops, unmap_page, d, dfn, + order, flush_flags); =20 if ( likely(!err) ) continue; @@ -341,7 +376,7 @@ int iommu_unmap(struct domain *d, dfn_t if ( !d->is_shutting_down && printk_ratelimit() ) printk(XENLOG_ERR "d%d: IOMMU unmapping dfn %"PRI_dfn" failed: %d\n", - d->domain_id, dfn_x(dfn_add(dfn, i)), err); + d->domain_id, dfn_x(dfn), err); =20 if ( !rc ) rc =3D err; From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832123; cv=pass; d=zohomail.com; s=zohoarc; b=YzmKOzfTeXWrPJpXJ9OzmNW/Bb4FUPRz9lkKLlkTwPkS46DtUXLGDsEtbmVhxM2m1cWIEruuizhztvlVuOQ6Y39REcqlxTm1y8kxLkLjl3SflaUj6GZ1w8Gm8XXgVuD3i9fQpc6bWcVPQK2me0vhjjLF4J/PPwFv3A0cl+eUuk0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832123; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qB6MbDDkCONYgo9EX6LU19rDEi9Bdn4h06LKMktQeMs=; b=FCcJf+tVhFWGiqmGw57ipWh2JIJMoXhk/sVHhF2wA28makDRp2dp3MDrE1rogLZxDgPEWhWjy82ZmXFYb0lh4s+Z3NYdaPQs0cdKBqxhd/eebsLkHQ4223lXwrhv7vFI7+wyVUrZwRQhcFFfa6f+3yMPL5CYicBugxkGIaAZdvI= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832123525752.4139873739623; Mon, 10 Jan 2022 08:28:43 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255426.437692 (Exim 4.92) (envelope-from ) id 1n6xWs-0006Sl-1R; Mon, 10 Jan 2022 16:28:18 +0000 Received: by outflank-mailman (output) from mailman id 255426.437692; Mon, 10 Jan 2022 16:28:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xWr-0006Se-Um; Mon, 10 Jan 2022 16:28:17 +0000 Received: by outflank-mailman (input) for mailman id 255426; Mon, 10 Jan 2022 16:28: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 1n6xWq-0005qR-JR for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:28:16 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4fd8d5e3-7232-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:28:15 +0100 (CET) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05lp2109.outbound.protection.outlook.com [104.47.18.109]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-10-73I9e9TXPbOAhgOZrlGPRA-1; Mon, 10 Jan 2022 17:28:14 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR0401MB2446.eurprd04.prod.outlook.com (2603:10a6:800:4e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.7; Mon, 10 Jan 2022 16:28:13 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:28:13 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 4fd8d5e3-7232-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832095; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qB6MbDDkCONYgo9EX6LU19rDEi9Bdn4h06LKMktQeMs=; b=IYp9+8y4/cTbUcv9tH2JKXvkVrZqBTbCSZOlzQNd9RrlgqWLSZkJFBb6rv9aNYd8xvBD44 AqlkVfhycXMaHnZYWLkV4rBqAVAuglWQrfwyyznrVyeM6XaB9GkQdqzZawWzNJmCYsUuml 5opeS12Iwf19sgbBkryETND9L+hwMeA= X-MC-Unique: 73I9e9TXPbOAhgOZrlGPRA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ip72PSS7ZW8/RG1+ea1+8VRHcBpuTZzhb56K3AM0OMptOAGhMvnx3KpdOKpHMhk20hf+C4HymV4I+yWvZ5yBmQvUemG0kRumruwVMC3DasZq5NeZxOXlpn52Uyh3f1A7VzG29yTIi+0cLRUM7Z7AFQPPiORbACvaK6ojpkZB9ODTq3m4+rb3JrgADwiaW5zqk7CBExSHikZWjPm/jVYkwVO/NqI0C6dhhYdRsBApPQ5FOgy8DyOYYeI5YES6VZW/WcKxoZCXNQc7YU0LjhVe/4aGuABFAzyeCIAFHAazZb4WEKRBzmtj7zwHrjTdKTXMGJuJ+ZAtDdtNsBCYuza9Yw== 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=qB6MbDDkCONYgo9EX6LU19rDEi9Bdn4h06LKMktQeMs=; b=FNwHQbQIZ4ikLLERbTqCOH1CtQWpg8bd9oJjaUF24qoobhlmK7p/zmEkZrnMCBCdRcKe9fvF76Wc/SgSpMosUf/mdmB+jfE/Tbendri2frWnuHTy3VidBnUnV1tCkHSqwuGbq7CEHpOhBwbWNz4Lu0mc+e0eGNFUBbOKZy/SyBCn8MjnWw6txPOBqleScnJ8uDI4Mj2cV5n2HwkI+8zATb2KjnWZf59Sk11x0ZEFt8ShcO+CYml/T/Nn/U2/kopLS3Lox7w2thRnbGAfo/boxVRjMHBFhzPffSos2vPRPX+aBqxWYl938mmzjK/qQSk8x+/aaZyKZ5ozviUim6xNSA== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <813a9e33-943d-a3d2-7aa6-a01b3611c095@suse.com> Date: Mon, 10 Jan 2022 17:28:11 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 08/23] IOMMU/x86: restrict IO-APIC mappings for PV Dom0 Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR10CA0105.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:209:8c::46) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fa4524b2-0f8e-4569-1d24-08d9d45632c0 X-MS-TrafficTypeDiagnostic: VI1PR0401MB2446:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SsLuFbklBcN+pIfs5se/jVHQSiYZO1ymxyQQlbeMCmCaS76lHcoUFqd6I7T4EwojLpN48rjTRWwjjHZgYnPqfoFG83F06UEmggf/kEJIAkrsuanGI2aKrgG/dsQduCl/Ez8LMc0S4rMkSOanHz5Q49Ohzd1+4AZlp8DdE7eZ9UjUkFNN9wozZRi5gDxyztx0aKx+6sEoOxF2ewOVp4d4KodTvFpSuoDtf6QC34ZUScAPXoK01pn8/opqO8MeVO9xhYauo7rMhrHFo/SffGZMJg2byB2apgPZiN7dnrEv4Y66AOYqutZgK5vBqoSNk//5hXjsFZfJ2mSo6GbA0vqIbZmMVOZjS8frTD5D7ZWVoCi7NO5yDpPMgZJLGnZszsQ3LS+trhZuHoR1hXNmVM2IXmGqKqFegLxDxMGp8UdFcRTEBw9QVqvkzU27VtTlMa9VA9bSh2dKpxIpuGZucctWeWq2rTJ+0ta/bw4UvBe0XsxRxqVWeXOSVygtuoWrAntsw3ja6P4LVeNwm73dQMQ3PhALIdTIdkD12JFZoxV3ZsApzcD1/ZsrQMabCILeOU/TCSKxmYn+G20cedxm5arHrF0GyS2Di6cgMy97gpbD8XdCcY62kkbKwRJLehNZfcMonNqwdcfo9e/lc6Dr2aa2fzIDTLtUWAZUBxu5DZUrHFnNH0nV5xyOt06aoc1EcfQoLaza+PtEolxcVbKJ4gojG/C4DQz+59PKN/GxYke+eao= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(6486002)(2906002)(66556008)(6916009)(66476007)(66946007)(316002)(6506007)(8936002)(186003)(38100700002)(31696002)(6512007)(26005)(31686004)(54906003)(508600001)(4326008)(2616005)(83380400001)(86362001)(5660300002)(8676002)(36756003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?alpnMjRRZjVDRzAwOWo1dHBwSFlCTDJHdVFLM1JMb2VHMFBIM0RRUTREUzNG?= =?utf-8?B?UnRGM0tHU1ZVUEQzWlYxTnZ2SitFV0RmOTEwRldCNC9FZUVCS3QxN1QyT0o3?= =?utf-8?B?b29saWhqaUJSUllyR3RQNFFOdVVhY3lNUFhPT3crdXB4MmdXQzRxclYzNWl3?= =?utf-8?B?dkh6dm1LYllRQlU4SnlsbUZJTTBoODhGNDA3LzRsSmt4aUV6RXpYKytTbjlS?= =?utf-8?B?WkR2cWdON05JSzdnRmlXOGRaK1FnN3ZyZUJEamVUcjF3YlU2bklpeUdSY2cz?= =?utf-8?B?R21Qcy9aRUJtdnRNQVUzUFRHVkxwK1p6NTgvVnk0NnBrWHVyNWdJWVNNSmdP?= =?utf-8?B?L3ljeWtuakg4cnQ0NG5kMU5xaXVVb3FjWWJYWHRsclBBVFJzRDNHaWNTajlF?= =?utf-8?B?ZHZ2cnZ6QUEvUTNOMng2WWN3T2xWWCtsaUlEQ0x6ZHpORGYyQjkxTmNodG92?= =?utf-8?B?UTdXRUUzNFE2eFVaeElrMUwvZExXaHlidWNmZHlrTWJsZTBxNFE1clY1cEFk?= =?utf-8?B?UWpRMHVKTE1ERVliTitvVlhKUk9mV2Jjby9Qemh1enFrWVdvc2JmMHZ4V3c1?= =?utf-8?B?amRUeDViWlc3U1lkeU9kMmFkc1Vrby9Vems1WFZCejluWU9kdEZTeE5mallF?= =?utf-8?B?UjJWK1ljYUw2dU9pN0tTaDAyUXFnaEtQN1paeHFySTRuaTdTbnlyT1pCeGxZ?= =?utf-8?B?WW9yQ1Zibm41aDBCRUxRNThkRlFHNERIL2txRVIxejVQODl1Y0orbG5sMjdB?= =?utf-8?B?TDZ3T29TSm1sbWFwZzdyYmNMV29uSWZPNi9TQW53QmZ5cVhCMGJUK2NYblR6?= =?utf-8?B?MzZxK1ZadFZkclVpanpyZXRrRDg4RWJRVEdhNjVWcmtkU2ExbnQ3bmZQNVVh?= =?utf-8?B?R202SnRyaTd4M2JQbW9RMThFYTNmUDFkT2JlenppSWdzRHUxMmE4aXBZZW93?= =?utf-8?B?ZmVuM1ZuUjVqamp5VCtGbksxbWY1NzUzeXNGQlBsSzE1eUF3T2tabjF5Rk9t?= =?utf-8?B?Q2tKZDgyd2NhaXVTV3JMcjZrSU8vY0lJdmZCZDdDNlRVK0tLVXl5OEdmNFBL?= =?utf-8?B?YW5UVUx3UEtTRnp1bHBmVGxGeGtpQlFTSWlYakoxWlJyZk52MUo3TkxmNnVv?= =?utf-8?B?SE5COUdkdnNSbVNBMS9ObndQQU5OMzkwSUlYcGIyMWErVVovUzd4NEhuODRR?= =?utf-8?B?SWZRdGx3clN0d1pDeXV0SWYvYlZWdEgzZjZmWFpNVVJIaUNESkExQ21UOGd6?= =?utf-8?B?dU1WL0R1ckdTUzdaeGVTUlJEckd1Q2w5blNoN1NTZk56T0ZDODdPQTJWUk85?= =?utf-8?B?Y3VWUFRYOVZVeXBnZzluVDhQTEx2dVdCMlNRbW9zYWw3dWpWRDB0ZFJNSGkv?= =?utf-8?B?Z3pqU0ErYW1HTktxcVRvQjVhVXFydUl4UnBqaldBelVzaVZFTWFpN3RXREJQ?= =?utf-8?B?dUx4R0pyb2crcGxVMmRaN1Q5d3FDSUcrL2ppV2J0aGpqMjMvV0pseWFNQStB?= =?utf-8?B?Q1hMYzk0Tzk4dmZ4NjlmbzA2QTNjVC8xc0NYbWZXY2ZlazIyelNSa2FMa09J?= =?utf-8?B?aEE4UzJJeEVxZjh5UjgzVmpneEJOZnhsanlOZkFMMHdXOGZ4VXBkb0tBMUN5?= =?utf-8?B?SytySGxwOGJKWXhmVTRUcERwQ2owUS9lQnBnR2ozMlRXV0VWR0xyZEM3L1la?= =?utf-8?B?RmJRdU8wdHZBVXZhc1B1bk5Td2I5VVRnZ0YyT2tWVWVjQTJCN1hZMkNjR1pC?= =?utf-8?B?L244b3hpZnpJU1BVVm9IRStCbXBoNVdvdkNTekhtYU9WeFFLMWVzTkpvVEhv?= =?utf-8?B?YXE4UmJxQnJsWUJhbk9mMms0ai82VHpmWmNpckR5Y1g2VytvWitUcjRveWhM?= =?utf-8?B?N2FWMDZ2bERoejNRUGpMcXhIcFpzRGZvOUluL2w5MkE2eUFZNnpNTUlJbTNp?= =?utf-8?B?ZUNUb0crQ0dJTXV6aGV0M3BEcEIydEdpWGQrcjZGdFJiU3JvVDVuTkFFNFNt?= =?utf-8?B?aW5wRVZKMGpVUXRxaitYNVRjU21xS0FGUEY0RkRJL0VBcWpLbGZhRDg0eGh0?= =?utf-8?B?MXp3NjZKVER5SjZsbGozdHJhYTVRKy9IN2tmVGpQK2x2YUpkOTRyZ3BTeXp1?= =?utf-8?B?RE8wQVR4L2J3Uk1CVThvTUp1aTlKbjd6dGxucWJteTRVVno2RG5iQXFEOG9S?= =?utf-8?Q?EZ5EPoX2e3l6RV5/KohyCjk=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: fa4524b2-0f8e-4569-1d24-08d9d45632c0 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:28:13.5471 (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: GRNcBs78n58PU4utrIGhhihMo15iVCiYJf2LSaXHEM5Dqk2kzQWwLWR6Stjf44lZlvE/FBv0Tadz4uhS94o6fw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0401MB2446 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832124793100001 Content-Type: text/plain; charset="utf-8" While already the case for PVH, there's no reason to treat PV differently here, though of course the addresses get taken from another source in this case. Except that, to match CPU side mappings, by default we permit r/o ones. This then also means we now deal consistently with IO-APICs whose MMIO is or is not covered by E820 reserved regions. Signed-off-by: Jan Beulich --- [integrated] v1: Integrate into series. [standalone] v2: Keep IOMMU mappings in sync with CPU ones. --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -274,12 +274,12 @@ void iommu_identity_map_teardown(struct } } =20 -static bool __hwdom_init hwdom_iommu_map(const struct domain *d, - unsigned long pfn, - unsigned long max_pfn) +static unsigned int __hwdom_init hwdom_iommu_map(const struct domain *d, + unsigned long pfn, + unsigned long max_pfn) { mfn_t mfn =3D _mfn(pfn); - unsigned int i, type; + unsigned int i, type, perms =3D IOMMUF_readable | IOMMUF_writable; =20 /* * Set up 1:1 mapping for dom0. Default to include only conventional R= AM @@ -288,44 +288,60 @@ static bool __hwdom_init hwdom_iommu_map * that fall in unusable ranges for PV Dom0. */ if ( (pfn > max_pfn && !mfn_valid(mfn)) || xen_in_range(pfn) ) - return false; + return 0; =20 switch ( type =3D page_get_ram_type(mfn) ) { case RAM_TYPE_UNUSABLE: - return false; + return 0; =20 case RAM_TYPE_CONVENTIONAL: if ( iommu_hwdom_strict ) - return false; + return 0; break; =20 default: if ( type & RAM_TYPE_RESERVED ) { if ( !iommu_hwdom_inclusive && !iommu_hwdom_reserved ) - return false; + perms =3D 0; } - else if ( is_hvm_domain(d) || !iommu_hwdom_inclusive || pfn > max_= pfn ) - return false; + else if ( is_hvm_domain(d) ) + return 0; + else if ( !iommu_hwdom_inclusive || pfn > max_pfn ) + perms =3D 0; } =20 /* Check that it doesn't overlap with the Interrupt Address Range. */ if ( pfn >=3D 0xfee00 && pfn <=3D 0xfeeff ) - return false; + return 0; /* ... or the IO-APIC */ - for ( i =3D 0; has_vioapic(d) && i < d->arch.hvm.nr_vioapics; i++ ) - if ( pfn =3D=3D PFN_DOWN(domain_vioapic(d, i)->base_address) ) - return false; + if ( has_vioapic(d) ) + { + for ( i =3D 0; i < d->arch.hvm.nr_vioapics; i++ ) + if ( pfn =3D=3D PFN_DOWN(domain_vioapic(d, i)->base_address) ) + return 0; + } + else if ( is_pv_domain(d) ) + { + /* + * Be consistent with CPU mappings: Dom0 is permitted to establish= r/o + * ones there, so it should also have such established for IOMMUs. + */ + for ( i =3D 0; i < nr_ioapics; i++ ) + if ( pfn =3D=3D PFN_DOWN(mp_ioapics[i].mpc_apicaddr) ) + return rangeset_contains_singleton(mmio_ro_ranges, pfn) + ? IOMMUF_readable : 0; + } /* * ... or the PCIe MCFG regions. * TODO: runtime added MMCFG regions are not checked to make sure they * don't overlap with already mapped regions, thus preventing trapping. */ if ( has_vpci(d) && vpci_is_mmcfg_address(d, pfn_to_paddr(pfn)) ) - return false; + return 0; =20 - return true; + return perms; } =20 void __hwdom_init arch_iommu_hwdom_init(struct domain *d) @@ -367,15 +383,19 @@ void __hwdom_init arch_iommu_hwdom_init( for ( ; i < top; i++ ) { unsigned long pfn =3D pdx_to_pfn(i); + unsigned int perms =3D hwdom_iommu_map(d, pfn, max_pfn); int rc; =20 - if ( !hwdom_iommu_map(d, pfn, max_pfn) ) + if ( !perms ) rc =3D 0; else if ( paging_mode_translate(d) ) - rc =3D set_identity_p2m_entry(d, pfn, p2m_access_rw, 0); + rc =3D set_identity_p2m_entry(d, pfn, + perms & IOMMUF_writable ? p2m_acce= ss_rw + : p2m_acce= ss_r, + 0); else rc =3D iommu_map(d, _dfn(pfn), _mfn(pfn), 1ul << PAGE_ORDER_4K, - IOMMUF_readable | IOMMUF_writable, &flush_flags= ); + perms, &flush_flags); =20 if ( rc ) printk(XENLOG_WARNING "%pd: identity %smapping of %lx failed: = %d\n", From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832151; cv=pass; d=zohomail.com; s=zohoarc; b=GHed52XI0nc7HKqs3OA/UZIZJw07xJfunivY6bbURIaeHQv8Rv+tdFgyfajYg57HwnTHepY8+vmVMeIflzLL6ECTrDGc2R/EZlUlo+Tt69z8TEypK4yctzatjeRtgdvkWzKKmceRVihl6Q1GOc1LSTfeuuAaBuOn55Hqe7JQQJA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832151; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5hi6MW7tZB8RG4/CY0mA+kY6id7QquTQlMhD0Ew0kzk=; b=cflB/dhaUWMOcH99ZxaIDJIfWPZfh1moQK6f2lausa/gxJXz8yMSxtzXNu1gGZcMaHXCVAOKTY7v7J+yayPwdMltAzZGr4IZ7BLfc1WlT3+K05Q6Bgyd/EkyRiFx19RYCrFuqLQEezsqeMmsdNudy4G/w1E/wgwR+ukz1AVBBZE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832151252140.38745054681465; Mon, 10 Jan 2022 08:29:11 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255430.437703 (Exim 4.92) (envelope-from ) id 1n6xXM-00075m-Eh; Mon, 10 Jan 2022 16:28:48 +0000 Received: by outflank-mailman (output) from mailman id 255430.437703; Mon, 10 Jan 2022 16:28:48 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xXM-00075f-Bb; Mon, 10 Jan 2022 16:28:48 +0000 Received: by outflank-mailman (input) for mailman id 255430; Mon, 10 Jan 2022 16:28:47 +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 1n6xXL-0005qR-0j for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:28:47 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 61c9a03a-7232-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:28:45 +0100 (CET) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2053.outbound.protection.outlook.com [104.47.2.53]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-36-kDUnx-HLM6OBvod1bb-_mg-1; Mon, 10 Jan 2022 17:28:44 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB5165.eurprd04.prod.outlook.com (2603:10a6:803:54::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.11; Mon, 10 Jan 2022 16:28:42 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:28:42 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 61c9a03a-7232-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832125; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5hi6MW7tZB8RG4/CY0mA+kY6id7QquTQlMhD0Ew0kzk=; b=QFmT3Ct0CKPFsUVYnbNoXiecmcJLS9H2xscI36XjPUrbLPUE6wTHY/aDq19GZB6J9L906B 431Wd5XLZgVSBw/U8CqaZfKXG2EGQsD2DSB2gmXkdwQFey1/O14ckInUeMHs6O8/snJBqt LcBIDDYDM+RejcGUdRO6QrhKmIaFOWU= X-MC-Unique: kDUnx-HLM6OBvod1bb-_mg-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DZmBUi07ej4AOCk6jRuhzsWplw2QS1Wea1xIoRtJdiklUgUJLFZqlHaAQ+ynsjoRNm0ScJ6ZO12eHbGxRLIDmldQT2A3Oqf61ilwPFe1myl3V+MDDaRPeig5oId21tQmdVgx9XBGGnnZjdo5mAUBkjGHf4CbEddxY4oVELO9CRuDHFJg/DlBGHUtEju9NtLVlNtU452C+R0pvCATovjYJRxp7LwY0S5H0C9LjqyFkFc9oJccRfpX6Em+MhZY3UJ0JJhQLN5jSmlP6MBOu7NOPKu+00Kr/rRWIzm/ZtBW6/dkAd2NAb3Yxg81JSNbMKf1AXQLa7hE2BV8aFPbEaGQdg== 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=5hi6MW7tZB8RG4/CY0mA+kY6id7QquTQlMhD0Ew0kzk=; b=Ddw9s9H3NwKkPgxjoPTTL+O+VVHLXnANuU5JD2ODt00b0KeiwrL6gzDvUTk1DVFz0ImmQqV7v/yKNtXviDY/M8qExg9civCTINjDncnALCh4OS4j/hZTUm6mpn7KYQiTkQ5+U/1x9QLbKiK/OXBT2DhVjeMTrROTFsuNzJpko1tyVmLg9oSCSLNMkEJGcSlDdW6R4mhsqx7VmfAOxm6hRXAhPDWzGVzjAwJEzLsqVeufG2kh1p7LEx6eGuqvpnmqizjYA3jk7sNm6GnGal0msLdEAdWVejQZE/vEAy57eUXDE16GKds6yFflAH+H9Hig6+/Mxnne0fPwyd/wX7pFcg== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 10 Jan 2022 17:28:40 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 09/23] IOMMU/x86: perform PV Dom0 mappings in batches Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR10CA0030.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:209:89::43) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 338889dc-5e56-4720-9338-08d9d45643dc X-MS-TrafficTypeDiagnostic: VI1PR04MB5165:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:416; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: q4/9iMfqICe61nIegs/HSp3ra0tkIN0ttyf8tp7QZqG6dK9PmbNQulVr+HVO74usekonuJAPmeBlaJNlaBPDun44dwiQNvlClNORNQotzUvOdp0b6DYiGWGkr1TbaQkxVrgPsS32JfFitFSkkuCMMBZoDTKTg+EnblnwrVbEseQ+r6qswzYW46ge0pf2RSP+7iaBO0m9iV/ISQbsO/cTWIIga7gxbBTttc1evO3hBmugehzmJ9BabAONb4zJxeiv2cFkiloaAbAzIqfiBDmNVEcGasoI0omTw/pEnMnE8hGM0LMTnoiwP621kZV0j/LS2nLHmKX8ZzKIKHRZbHh2JoyWFHT1WEhs/94etZqx0AI+DnHQQAQkMYdjsQpbTSxZyzaSAMaa/mLXjjZXjTjfzFZOomUXXTfKjZciwFK8FWR9xSqo5heR7vNZWNrvvTsr6QzpHqPXNnVcDRYOsUHmahxgKBJrCtTarrG7bgQFmecpHFoF57SjvR6qAdTBebMlo4R+OPdxDJMyRlEK+28HkfcdrQlAXELSY6n6QXbFMBXb/3atA7qvbLpIaJAjD973O9nteU0lhxVjQTzSoi83lf4lRE1Bkax55Os9oTEOZ5+dI0mSOMraFwtQYwFMVnbEv6wQCDL5o0G1nJcAynWFW6/GcUy3Y+YDzifOdoo8IjEf3lPjZkpWvR76WOVkT0Zef9SdMJsdznu2DYUnurMU6AXf7KBSBepMWy3cZifiFbBTm4YFRK8oAs5D2wqrMAll X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(316002)(508600001)(6506007)(26005)(5660300002)(8676002)(83380400001)(38100700002)(2906002)(8936002)(6916009)(66476007)(30864003)(2616005)(186003)(66946007)(54906003)(86362001)(6486002)(31696002)(36756003)(66556008)(31686004)(4326008)(6512007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YkxKWWhqbkVCSnFaVk1SREcrL3Y1YjcwdktWTzRJWGpEeitzTXA0b0gvRXVM?= =?utf-8?B?OC9TbDBQZTNQSDUrL2xNbU9RTFRjT0xpcTE5L2R5dUlBdGs2MWN1aGUwdFhS?= =?utf-8?B?U0tka0tSckNYWjZFRCtKY0tmWWJsWTVoZGl3dWgwZTVWNG5peFhIazV3TGl1?= =?utf-8?B?Nm1sV2ZBZmg2TjV5bGVaMFp6WjJJdjFyOEd3RzVCSStJSklnY3R1VUJwUHJx?= =?utf-8?B?ak14MCtDUGlsRXVPaTVweVh4a1JTT0xLUzVJekJDaDFRUFVLQ2VHYnArbGtX?= =?utf-8?B?d3RQVGE2OGJBelVQalFMcWoxT3E0V2JBL1Z0WlFIbTZJdlYwU2FyRVlUOFlQ?= =?utf-8?B?RC9LL2xGcHF0c2xZN2plbHFWditIdmpZeVQ5Z053blBQWEJXYWlnam9BeXM1?= =?utf-8?B?QWcxUjZURSsrZnZHUlVCdjkzbzFmUHFlNUE4SGR0bVRkK205b1lodk5WUFhX?= =?utf-8?B?d0lza0t5QUJRWXc5MDFtNE5RM1Y2QkFEVng0NVdVa29WbmlJUUcxQkJycWxp?= =?utf-8?B?bCtDSkRCQ0kzaU1ZTlNwTUFrOXBtWFFvTzN3MGc2M21Pa3dYSUh6N1JlTHVu?= =?utf-8?B?ekpZMlNuOTRFUzNWZzZCTnd0RWg2bkpXQVZUYlpsSjVjd1lITG9SMGttL28x?= =?utf-8?B?dGZPcnNIZ3pzaGFlVENmd2tpZmtTaUs5SDNpMHlGelVZRTZlcnhsU1pjNmZY?= =?utf-8?B?bHNHTDNrM01qSkw1NW5ha2JTSkVxcGpBZGcwbjZya09HWUVudXVQQ1VMWEVz?= =?utf-8?B?UUxCUDkyVEdCa2RvQ3Y1YUhSSTBHKytocDlkTlFxazg4dU1Cd1FaK0o4WWJR?= =?utf-8?B?eDRONTNEQ3dhdWZYZlVBeVUvVHFqaVhUVHh0dVdlUUlIYzBKb0tET0ZGOWhE?= =?utf-8?B?Zm9kZmtUckp2cktuUnVHWENZM2FIN0RHRy9laW5OVUV3UHN6NEtyTElCVXVo?= =?utf-8?B?b0ZHaER6cWRRQmJHWWFNb20xQmtMejZFbnV4YVVHRWpGSkNwWWNwb0dNKytq?= =?utf-8?B?RGd2TmR1bzFpdjVrSjdBempib0Z3cXhIZzc4V2VOQVZaZ3l6RS85VzFqUWRi?= =?utf-8?B?cTlEQmpKN1J0akFxcXNHMDc2U0M3NHlzTDJkcjBkVUQxZ2RDZWFhdzMzQzU0?= =?utf-8?B?N3hBSkQxODduRTRQZEtnbTNMQ01DaTFCZkdHUXRjM3p0SE1mc25UbS9tYk1L?= =?utf-8?B?SXZaaXJRRnJDemxkRTVDYU5QMU85YytrOHNSTm1iTTViTlhQSGcrbHRhbUE2?= =?utf-8?B?WUt6YjZuWVo4RUVWU2FHMldwdFpXejBjK0VrbVUxbXprY0ZhQm9FK2tGSU8w?= =?utf-8?B?SGI3TmVqL3JPNEJsU3N3SHQxeUZYdWJQd1BGN0RWbDdCWkw0cmhnQjZmYVFO?= =?utf-8?B?Z0FjQVUzNmxVMEhnaGpSKzNNRTN2N0YzQVgwUm96WEs0UWQwUWMyVytjN0pa?= =?utf-8?B?UjYrLzRGWGRqa1lKcWQyZld5dWtzOC93YlQ2WUFtcmNIZ2ZIRjVZS3JubndO?= =?utf-8?B?b0Z3aWZKMGVHMEZ5SXVtWjN0UExyWkIzZlZNd1ZZdXIrV01tbG9zc0YwckMw?= =?utf-8?B?blcvOGMzTUVSWnQ4ckthbFFWTUNFL3gzeWhBZmMyZ0h6OUxUYjJoWTMxOENu?= =?utf-8?B?eVRhSXRvdTVLTldSSGlQTkszVXA3andBRDJVdUM0dGV6dC9hZU9sUXZYTmFj?= =?utf-8?B?TElOTlNQQVV0cFhWcmFxSFptTmpsNG9QUWNrTW1ZQlROTGZLdTI5emJ0d1pr?= =?utf-8?B?RTVSdW9VeXRrcXljK3NtN2F1cFFwd3plYys3SDFrNk9UMUo0VW00d3IxMWtm?= =?utf-8?B?dE9LRUxsNEVKMjRTdjZyN25UOTNncEk1bktJeHJKZ200Y3E4cy90bHdEYURZ?= =?utf-8?B?TTZRQXJZSitiOERWRzdEWjlteVArS3cxZ1A3aVBUek53OHFlMS9uejhYVCtU?= =?utf-8?B?YllLYzhoMk12cHE2VGZndTRwNzJxOUo2Z1AvYnVkTGtyK0ZyMW9FYUNFVFBx?= =?utf-8?B?cWRycnM1c09CQ0wya3hLd0pPMFppcllpdWJSMUJnM3M3bDZFWXVwN2tRUG9Z?= =?utf-8?B?NnRhUEFkWjB1NFduOXhiN29md3k0ektlR3pOVk9JeHRFakJaSGtleXdYaGdk?= =?utf-8?B?by9zTGFtQ3lsaEhWUVJONkkyS2h1djJITlFCeW5DaUR5Um5US0tkYUpMbjZY?= =?utf-8?Q?848DFpq1A8x+xFl367ow/iA=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 338889dc-5e56-4720-9338-08d9d45643dc X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:28:42.1270 (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: Pu24Dy7HunUixMNH26tQhFVLyPNkYBvcRGab7X0AwVGiXmRjSb9XSvEGD2jLHm5h/vzJiYUPe+XMQ1lZ8E8BuQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5165 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832152171100002 Content-Type: text/plain; charset="utf-8" For large page mappings to be easily usable (i.e. in particular without un-shattering of smaller page mappings) and for mapping operations to then also be more efficient, pass batches of Dom0 memory to iommu_map(). In dom0_construct_pv() and its helpers (covering strict mode) this additionally requires establishing the type of those pages (albeit with zero type references). The earlier establishing of PGT_writable_page | PGT_validated requires the existing places where this gets done (through get_page_and_type()) to be updated: For pages which actually have a mapping, the type refcount needs to be 1. There is actually a related bug that gets fixed here as a side effect: Typically the last L1 table would get marked as such only after get_page_and_type(..., PGT_writable_page). While this is fine as far as refcounting goes, the page did remain mapped in the IOMMU in this case (when "iommu=3Ddom0-strict"). Signed-off-by: Jan Beulich --- Subsequently set_identity_p2m_entry() may want to also gain an order parameter, for arch_iommu_hwdom_init() to use. While this only affects non-RAM regions, systems typically have 2-16Mb of reserved space immediately below 4Gb, which hence could be mapped more efficiently. The installing of zero-ref writable types has in fact shown (observed while putting together the change) that despite the intention by the XSA-288 changes (affecting DomU-s only) for Dom0 a number of sufficiently ordinary pages (at the very least initrd and P2M ones as well as pages that are part of the initial allocation but not part of the initial mapping) still have been starting out as PGT_none, meaning that they would have gained IOMMU mappings only the first time these pages would get mapped writably. Consequently an open question is whether iommu_memory_setup() should set the pages to PGT_writable_page independent of need_iommu_pt_sync(). I didn't think I need to address the bug mentioned in the description in a separate (prereq) patch, but if others disagree I could certainly break out that part (needing to first use iommu_legacy_unmap() then). Note that 4k P2M pages don't get (pre-)mapped in setup_pv_physmap(): They'll end up mapped via the later get_page_and_type(). As to the way these refs get installed: I've chosen to avoid the more expensive {get,put}_page_and_type(), favoring to put in place the intended type directly. I guess I could be convinced to avoid this bypassing of the actual logic; I merely think it's unnecessarily expensive. Note also that strictly speaking the iommu_iotlb_flush_all() here (as well as the pre-existing one in arch_iommu_hwdom_init()) shouldn't be needed: Actual hooking up (AMD) or enabling of translation (VT-d) occurs only afterwards anyway, so nothing can have made it into TLBs just yet. --- v3: Fold iommu_map() into (the now renamed) iommu_memory_setup(). Move iommu_unmap() into mark_pv_pt_pages_rdonly(). Adjust (split) log message in arch_iommu_hwdom_init(). --- a/xen/arch/x86/pv/dom0_build.c +++ b/xen/arch/x86/pv/dom0_build.c @@ -46,7 +46,8 @@ void __init dom0_update_physmap(bool com static __init void mark_pv_pt_pages_rdonly(struct domain *d, l4_pgentry_t *l4start, unsigned long vpt_start, - unsigned long nr_pt_pages) + unsigned long nr_pt_pages, + unsigned int *flush_flags) { unsigned long count; struct page_info *page; @@ -71,6 +72,14 @@ static __init void mark_pv_pt_pages_rdon ASSERT((page->u.inuse.type_info & PGT_type_mask) <=3D PGT_root_pag= e_table); ASSERT(!(page->u.inuse.type_info & ~(PGT_type_mask | PGT_pae_xen_l= 2))); =20 + /* + * Page table pages need to be removed from the IOMMU again in case + * iommu_memory_setup() ended up mapping them. + */ + if ( need_iommu_pt_sync(d) && + iommu_unmap(d, _dfn(mfn_x(page_to_mfn(page))), 1, flush_flags= ) ) + BUG(); + /* Read-only mapping + PGC_allocated + page-table page. */ page->count_info =3D PGC_allocated | 3; page->u.inuse.type_info |=3D PGT_validated | 1; @@ -107,11 +116,43 @@ static __init void mark_pv_pt_pages_rdon unmap_domain_page(pl3e); } =20 +static void __init iommu_memory_setup(struct domain *d, const char *what, + struct page_info *page, unsigned lon= g nr, + unsigned int *flush_flags) +{ + int rc; + mfn_t mfn =3D page_to_mfn(page); + + if ( !need_iommu_pt_sync(d) ) + return; + + rc =3D iommu_map(d, _dfn(mfn_x(mfn)), mfn, nr, + IOMMUF_readable | IOMMUF_writable, flush_flags); + if ( rc ) + { + printk(XENLOG_ERR "pre-mapping %s MFN [%lx,%lx) into IOMMU failed:= %d\n", + what, mfn_x(mfn), mfn_x(mfn) + nr, rc); + return; + } + + /* + * For successfully established IOMMU mappings the type of the page(s) + * needs to match (for _get_page_type() to unmap upon type change). Set + * the page(s) to writable with no type ref. + */ + for ( ; nr--; ++page ) + { + ASSERT(!page->u.inuse.type_info); + page->u.inuse.type_info =3D PGT_writable_page | PGT_validated; + } +} + static __init void setup_pv_physmap(struct domain *d, unsigned long pgtbl_= pfn, unsigned long v_start, unsigned long v= _end, unsigned long vphysmap_start, unsigned long vphysmap_end, - unsigned long nr_pages) + unsigned long nr_pages, + unsigned int *flush_flags) { struct page_info *page =3D NULL; l4_pgentry_t *pl4e, *l4start =3D map_domain_page(_mfn(pgtbl_pfn)); @@ -177,6 +218,10 @@ static __init void setup_pv_physmap(stru L3_PAGETABLE_SHIFT - PAGE_SHI= FT, MEMF_no_scrub)) !=3D NULL ) { + iommu_memory_setup(d, "P2M 1G", page, + SUPERPAGE_PAGES * SUPERPAGE_PAGES, + flush_flags); + *pl3e =3D l3e_from_page(page, L1_PROT|_PAGE_DIRTY|_PAGE_PS= E); vphysmap_start +=3D 1UL << L3_PAGETABLE_SHIFT; continue; @@ -203,6 +248,9 @@ static __init void setup_pv_physmap(stru L2_PAGETABLE_SHIFT - PAGE_SHI= FT, MEMF_no_scrub)) !=3D NULL ) { + iommu_memory_setup(d, "P2M 2M", page, SUPERPAGE_PAGES, + flush_flags); + *pl2e =3D l2e_from_page(page, L1_PROT|_PAGE_DIRTY|_PAGE_PS= E); vphysmap_start +=3D 1UL << L2_PAGETABLE_SHIFT; continue; @@ -311,6 +359,7 @@ int __init dom0_construct_pv(struct doma unsigned long initrd_pfn =3D -1, initrd_mfn =3D 0; unsigned long count; struct page_info *page =3D NULL; + unsigned int flush_flags =3D 0; start_info_t *si; struct vcpu *v =3D d->vcpu[0]; void *image_base =3D bootstrap_map(image); @@ -573,6 +622,9 @@ int __init dom0_construct_pv(struct doma BUG(); } initrd->mod_end =3D 0; + + iommu_memory_setup(d, "initrd", mfn_to_page(_mfn(initrd_mfn)), + PFN_UP(initrd_len), &flush_flags); } =20 printk("PHYSICAL MEMORY ARRANGEMENT:\n" @@ -606,6 +658,13 @@ int __init dom0_construct_pv(struct doma =20 process_pending_softirqs(); =20 + /* + * Map the full range here and then punch holes for page tables + * alongside marking them as such in mark_pv_pt_pages_rdonly(). + */ + iommu_memory_setup(d, "init-alloc", mfn_to_page(_mfn(alloc_spfn)), + alloc_epfn - alloc_spfn, &flush_flags); + mpt_alloc =3D (vpt_start - v_start) + pfn_to_paddr(alloc_spfn); if ( vinitrd_start ) mpt_alloc -=3D PAGE_ALIGN(initrd_len); @@ -690,7 +749,8 @@ int __init dom0_construct_pv(struct doma l1tab++; =20 page =3D mfn_to_page(_mfn(mfn)); - if ( !page->u.inuse.type_info && + if ( (!page->u.inuse.type_info || + page->u.inuse.type_info =3D=3D (PGT_writable_page | PGT_vali= dated)) && !get_page_and_type(page, d, PGT_writable_page) ) BUG(); } @@ -719,7 +779,7 @@ int __init dom0_construct_pv(struct doma } =20 /* Pages that are part of page tables must be read only. */ - mark_pv_pt_pages_rdonly(d, l4start, vpt_start, nr_pt_pages); + mark_pv_pt_pages_rdonly(d, l4start, vpt_start, nr_pt_pages, &flush_fla= gs); =20 /* Mask all upcalls... */ for ( i =3D 0; i < XEN_LEGACY_MAX_VCPUS; i++ ) @@ -794,7 +854,7 @@ int __init dom0_construct_pv(struct doma { pfn =3D pagetable_get_pfn(v->arch.guest_table); setup_pv_physmap(d, pfn, v_start, v_end, vphysmap_start, vphysmap_= end, - nr_pages); + nr_pages, &flush_flags); } =20 /* Write the phys->machine and machine->phys table entries. */ @@ -825,7 +885,9 @@ int __init dom0_construct_pv(struct doma if ( get_gpfn_from_mfn(mfn) >=3D count ) { BUG_ON(compat); - if ( !page->u.inuse.type_info && + if ( (!page->u.inuse.type_info || + page->u.inuse.type_info =3D=3D (PGT_writable_page | + PGT_validated)) && !get_page_and_type(page, d, PGT_writable_page) ) BUG(); =20 @@ -841,8 +903,12 @@ int __init dom0_construct_pv(struct doma #endif while ( pfn < nr_pages ) { - if ( (page =3D alloc_chunk(d, nr_pages - domain_tot_pages(d))) =3D= =3D NULL ) + count =3D domain_tot_pages(d); + if ( (page =3D alloc_chunk(d, nr_pages - count)) =3D=3D NULL ) panic("Not enough RAM for DOM0 reservation\n"); + + iommu_memory_setup(d, "chunk", page, domain_tot_pages(d) - count, + &flush_flags); while ( pfn < domain_tot_pages(d) ) { mfn =3D mfn_x(page_to_mfn(page)); @@ -857,6 +923,10 @@ int __init dom0_construct_pv(struct doma } } =20 + /* Use while() to avoid compiler warning. */ + while ( iommu_iotlb_flush_all(d, flush_flags) ) + break; + if ( initrd_len !=3D 0 ) { si->mod_start =3D vinitrd_start ?: initrd_pfn; --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -346,8 +346,8 @@ static unsigned int __hwdom_init hwdom_i =20 void __hwdom_init arch_iommu_hwdom_init(struct domain *d) { - unsigned long i, top, max_pfn; - unsigned int flush_flags =3D 0; + unsigned long i, top, max_pfn, start, count; + unsigned int flush_flags =3D 0, start_perms =3D 0; =20 BUG_ON(!is_hardware_domain(d)); =20 @@ -378,9 +378,9 @@ void __hwdom_init arch_iommu_hwdom_init( * First Mb will get mapped in one go by pvh_populate_p2m(). Avoid * setting up potentially conflicting mappings here. */ - i =3D paging_mode_translate(d) ? PFN_DOWN(MB(1)) : 0; + start =3D paging_mode_translate(d) ? PFN_DOWN(MB(1)) : 0; =20 - for ( ; i < top; i++ ) + for ( i =3D start, count =3D 0; i < top; ) { unsigned long pfn =3D pdx_to_pfn(i); unsigned int perms =3D hwdom_iommu_map(d, pfn, max_pfn); @@ -389,20 +389,41 @@ void __hwdom_init arch_iommu_hwdom_init( if ( !perms ) rc =3D 0; else if ( paging_mode_translate(d) ) + { rc =3D set_identity_p2m_entry(d, pfn, perms & IOMMUF_writable ? p2m_acce= ss_rw : p2m_acce= ss_r, 0); + if ( rc ) + printk(XENLOG_WARNING + "%pd: identity mapping of %lx failed: %d\n", + d, pfn, rc); + } + else if ( pfn !=3D start + count || perms !=3D start_perms ) + { + commit: + rc =3D iommu_map(d, _dfn(start), _mfn(start), count, start_per= ms, + &flush_flags); + if ( rc ) + printk(XENLOG_WARNING + "%pd: IOMMU identity mapping of [%lx,%lx) failed: %= d\n", + d, pfn, pfn + count, rc); + SWAP(start, pfn); + start_perms =3D perms; + count =3D 1; + } else - rc =3D iommu_map(d, _dfn(pfn), _mfn(pfn), 1ul << PAGE_ORDER_4K, - perms, &flush_flags); + { + ++count; + rc =3D 0; + } =20 - if ( rc ) - printk(XENLOG_WARNING "%pd: identity %smapping of %lx failed: = %d\n", - d, !paging_mode_translate(d) ? "IOMMU " : "", pfn, rc); =20 - if (!(i & 0xfffff)) + if ( !(++i & 0xfffff) ) process_pending_softirqs(); + + if ( i =3D=3D top && count ) + goto commit; } =20 /* Use if to avoid compiler warning */ From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832189; cv=pass; d=zohomail.com; s=zohoarc; b=FR3mk0/uOhLLc6llYEcaTrZDCBSJDj37DwuY8uRPHfWKHzIl2jJVm08dcRRoPk6/jI9q63JV27p+NQasAY1bGuU8rdvDQVFTUwGd6MYBWlnajC1uHLtlhTad4qt3B/LE08cpeodnHnOizDLtT07UM5uiNKgsa6cHI2IFBQh/MSc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832189; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=GVu1EpoAiIfYG6a5LNRcVAhOOz5L/xyuYRwwEDTGZIQ=; b=Kr3lHG6WbvnEUK+Gm1Vl/7ND1upyn9C1OYYtWTYNhBuqgH876G12LOC+ZhrwBh6luBYfnivBdQTLL4tF70Na/E1uH+YfsuHQRELl6Jbm/5/KOGrMpQo1OHsWnrwWP3Z/7ziB8KMKampW8T0Y27ZMyup9m1R0BEg3E5YhLwZ/ShE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832189439732.1818241534908; Mon, 10 Jan 2022 08:29:49 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255437.437713 (Exim 4.92) (envelope-from ) id 1n6xXx-0007hr-NZ; Mon, 10 Jan 2022 16:29:25 +0000 Received: by outflank-mailman (output) from mailman id 255437.437713; Mon, 10 Jan 2022 16:29:25 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xXx-0007hk-KT; Mon, 10 Jan 2022 16:29:25 +0000 Received: by outflank-mailman (input) for mailman id 255437; Mon, 10 Jan 2022 16:29:23 +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 1n6xXv-0007Vn-Hg for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:29:23 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 77c6679a-7232-11ec-81c1-a30af7de8005; Mon, 10 Jan 2022 17:29:22 +0100 (CET) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2057.outbound.protection.outlook.com [104.47.2.57]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-7-xvkBGpQSOV2P-mvOG--_0A-1; Mon, 10 Jan 2022 17:29:21 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB5165.eurprd04.prod.outlook.com (2603:10a6:803:54::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.11; Mon, 10 Jan 2022 16:29:20 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:29:20 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 77c6679a-7232-11ec-81c1-a30af7de8005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832162; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GVu1EpoAiIfYG6a5LNRcVAhOOz5L/xyuYRwwEDTGZIQ=; b=JM0JuOcKceWGGh605DTFLQEG/miMn4Pw73gL28c9H97nS+GbJE6SACkN+zzbA6LBk1hP2C 6OM/zKvgWOpONWPzEJjb7g5v4DCidA3+PfComMcvzOlkDmBfNOHE3RNLc3NmuqqJYomVm1 lPE+RWI7pIxoSWvCHZRI8wAJiqAKtSM= X-MC-Unique: xvkBGpQSOV2P-mvOG--_0A-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NwlQGnMQF5G0/7vW1AaQIFFC2zbmkkGhDi4CCSgdL0ygWSrEJW1gD5VdzyCrQlsuc2bqWJPCj+xtf0kYRn/J0kIrzAFiHDhoKinWjuiKLKAVWI9nQN+g97rD3AXBrzqNqb/N1AO1SL7Iy8kvTw8WKCn7G889studJPTNfVrHo4cFdkYpkU9Vn22f/jqNS2u4TiQQ5H2imus7tcNVD27XOgQrE5ZZwsILHPXuJY/m9eF34MfFsR3cwrVcwNEpHqATZ/N+PGiRC3Lc7XCTYgbtlTTUhwFpLi7LNHnriHSHlGAGR0G+GyWBurlZJv3bVplONadBbX/31qppDT7YJGz7UQ== 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=GVu1EpoAiIfYG6a5LNRcVAhOOz5L/xyuYRwwEDTGZIQ=; b=NUoaxZRuX81VuadzV5iT+n3ZRbx1UQ+O5kySjoZqbvSJ5KDZsNKXPspvGj+xXkJJU82+PV2K0sFB5upBf+LcCK2ReAP5x6K5gKrRDwx2zieuz705h5PQ7SfLploAvgqNUlAOvc5p4w3TYMXjj0rQf9JLSd3lCD87sMMUmhUlYRZViRnSahgkTax9ygh7fYpR4+Q/stcvSBSkrnzCyE7xP/YL7THfHTGVx+QRQaHFLLmuw6z7i2wAMi3vtZiVLMkiZ31mnGwKf+lNTrPiGXCO8p5vb/0TryDIfiILaHdHhQexa3JmPbtqZu6A9aT/uoddvjtwOk1swZV/0yLWZRgmQQ== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 10 Jan 2022 17:29:18 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 10/23] IOMMU/x86: support freeing of pagetables Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P192CA0104.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:8d::45) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a138e73c-25bc-40c0-0a44-08d9d4565a64 X-MS-TrafficTypeDiagnostic: VI1PR04MB5165:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1751; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QS7EHsMMXXgE4tr8D5zGH5pQ2cTprwqHb/5jroBYdrpg2xLNBbNgBBlR/KO8eYgnLHMkA/KjbwcM+8iI6oLtJNZACll3ov4ubvDPdOLTTcZEsyV4Yw6i9+/HRVUKwROOqZiAWL9zJavkMpXTnKFz7F+ru2L6B+hPxsk3kFFdMMsx82YPHWEVA+2tV14HcRER2WG7k/c4fA1PkS1ec2q4gotutYVZYo3s6AOLu1MX+JrjaBNnBSYCPyXcQRkN5IXErCmmCgkmLH4B8AsGeTQskqJigLeqVlfrO2BoJCDNY5Q/sVBeRbu+CCUVEnVQR+C+74gsQVk1yjeZCiA3tnLLHwU5d3O6IqbRazi2GZXr4LBYrHkeZy7HWaH/BwQx7n7asoh7EuyYMvUpW4QUbDObyhJ1Bre7n6GFNxTY062AVR592MtwCJ6L1o4C5wAVPa72XL5E1P3AjlNAEb//VLcqUFxTJI9DqY8qt9OdVsdNA7Ilc1FoYYcthOM9ewkk+HcT2Ta8e7+C3wO/90tGpG4hW7CHHZ7qSD2xjUn3yN4fNXlSdsEzkg6APmp/gemRYwZhgHS/eyJZW6Qgprog9m08OQe4WRwUBewcilL2lBqu5PFUBJw03GFpFRhEJ7b+EMqBUIDhWim661yyCX4w9CNnxN4u8katNQdnbdhnlmg7Db89SdygV36jV8PebX4/mSZwNfixywHwtXiN0ERGIORCWgJOwfwuZseD1mJ6ZdR6qmswcmTD50hFaC0nXoDlwNcjU7EpizdNl2yBpKdpbVYwxnKiDUsmn8QhUAqCkvU4BvO70GSS6Q7LbAbCA/3oAvgi X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(316002)(508600001)(6506007)(26005)(5660300002)(8676002)(83380400001)(38100700002)(2906002)(8936002)(6916009)(66476007)(2616005)(186003)(66946007)(54906003)(86362001)(6486002)(31696002)(36756003)(66556008)(31686004)(4326008)(6512007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dW5MazNrV2FkRW1mdmNxQjVoWWg2V2pjdmxZTVRrdkdOQ2tvTk84TzV4VDNk?= =?utf-8?B?WFRENGtlVVY4RklYYUNsRHI1WWtxT00xSTJlUGF4azZCUmVTSkFsbTdWZ3Rn?= =?utf-8?B?WVZ4RVI1bVYwNVhlUmkyUkRjdHBJNjFSTUpsdG03TnU3UVNxc3hTZEs2TnhB?= =?utf-8?B?T00ycU1USWF5SmxZOVJRY3I1S3pHNmlGdm9zczNKSTFPRXAvcVVxSFUvMVNj?= =?utf-8?B?REc4RzBNQk15VDdnbFRiSUc5QkRyRThLMXRtSFVpQjRYUjF4TEowb3QyQzRa?= =?utf-8?B?dUVGS0c2S3lHQjNKVmhaVFVMT2lmZ1hFMXNQUlNrTVlPZVBsUFFlQ1VlSEs0?= =?utf-8?B?QWtKYzJDSVdlSWplZVhvWnQycXNHTERLa200aU96U3g2eEcxWU53NXAxZUpU?= =?utf-8?B?QTd2UzRZeVNKYms1U1FiR3ZMVHl6THZNbTNOUUV3ZXVIRVhiVEZhdW9YZU42?= =?utf-8?B?cnhSSVk0NW8rd0wwVEU1cWxFSTlFN291Nkh2SUhkN2M1Q0phWjAzQUZoRGdl?= =?utf-8?B?dnh4UkZCME82eDYrd0l2c254ckhqRnhMR3p0ZWFWTmFzOTgzQnkva2JIcmF3?= =?utf-8?B?U1VGUjdqNTlTUFRtaUNNam9jbUdHOFdwNEZRS00xRUJDNGQ2ei9hMGhNcjRT?= =?utf-8?B?czlKYlZRclVBeDJQN0l5VmQxMWNJWkI4QWxURFcxM3YzVHhOdEpjZXk2N0FF?= =?utf-8?B?ZFBSWDhqa0hRa1M1bWdLbitRWXozcVNSTjJiUjd0ak1qL05ENEc3MHk0TXdk?= =?utf-8?B?VEhmY2svTUJMMlhrQXBWOGhiTkFkeVRZZWYvaURCcGtFeGpuRkZoaHJrUzlq?= =?utf-8?B?MnIyaUtaamQ1VUNIOUFXc0RYWmpmT2UzdEFYR3NzK0VFZkRPd3VhUUZDbFNh?= =?utf-8?B?NXl1R3k0ZjBPQTVVMmN1eWF2WlRqZVgzUVl2RzBHYnp4d0hGREZzbnRMTGlW?= =?utf-8?B?N2NOS2xGQSs1MC84U2NNOFBWTEtKUFRKaEVucnZBQWRzZEh0TXk0cTdFZXBH?= =?utf-8?B?N1NUem5xM09iMnBybkQvSWl2bXY1SjRBVExNOUJxTVIreUVzbjdjU0lFdDRO?= =?utf-8?B?UGQrdWFiS1BhTXRnbEtSOU9qSC9ERDB6YjhrQmxDL25PU1FEUmxBSVh2M2xH?= =?utf-8?B?WEp6bGJCMStNODdaMlVPd1lJSlBXaTFOZC9iSis5VzlXRFRjQzFWd3p4RlFs?= =?utf-8?B?SlhGd0NOZlVvVWpBclZaY0dQV0wwZklqdVNiNGlBeVp0eHJuUGx0aTdkcHJE?= =?utf-8?B?SzlBdTIwc0pmQ2NmeExUSEZnb0VoY1VpNStIVXdCaTlxdlVRb2JNY0NlWUlh?= =?utf-8?B?UU9HdGQ1VnJTZG93elJwRUc5RHlRNVFiQ0xXNzBYS3ZMRlh3WjBBSFZTL1lh?= =?utf-8?B?M2lxYWtSTm5zRjBRNjVGY1I5bEVIbVZZaTlicHZaKzdQOTFldU9XYTUrRyt3?= =?utf-8?B?MWN3amE0dWUyQjVOMzF3VEs1eFJTZjJCd2ZxTGV3Y0VMenJUeVNsTXV3R1ow?= =?utf-8?B?TWVjaHp6S3lNaUtxclpHMjlRcmtrMytXdERRRXJsZTdEOGpLVjJEb0tqU0xK?= =?utf-8?B?cVR6SmJKRGt6NWJXckdSdmdxcHVnU2FWMUR4VExUbFZNVDhySWZSMFBDVXB5?= =?utf-8?B?aHF2b1ZHTUNXVTlQVVF4UGl3RTh4c3Z6SnBTcjVCVEUvbHNuVDV0NDBPdnNl?= =?utf-8?B?c2d5TDJEbTZKYzQzczl0a2FUT2Zld0hiRlYreTRqR0lpVVpON0JNN2I3QklZ?= =?utf-8?B?WWlUdURXeHdnN1dGZlZBVGY2bktHK0NHdjlhcktUdWwybkVhNjYwb1YzVTRZ?= =?utf-8?B?TndtWjE1U0FrUVhFeTBub0tzSmVGUUkrRGpnNHZHT2xuRFc0MU44cUw0YzRH?= =?utf-8?B?TTl4Z21VcG9mV2k3R2NQMG9LNGFUNzgrRFV5MXRaZFNMTlFjZVVOdFI3NnFN?= =?utf-8?B?SjI3Vm96aVRPRTVoendYRytIV0t6K3p1RUFJa0RPTGdrTVJRamp2TlRza1VZ?= =?utf-8?B?ZXB6c1ZqVVpPTklNaHZvWDI3bDVZWkNyeWpvYXJoS1dzelE4eFlpTVBwQkR6?= =?utf-8?B?VXQrcmsrUXVNbUszcjR6RzF3bHp3MWFPdTBvazNHS3NtcTZiTEZjS2NrdkFj?= =?utf-8?B?TXIyUTltbG9QYVFWQTczMGx5bTB5anc1bzRsdWdpRXlvNERKVFVEOWJocDFy?= =?utf-8?Q?zrHZejAEpOWPCvaEdJsmwEI=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a138e73c-25bc-40c0-0a44-08d9d4565a64 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:29:19.9446 (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: i+7i+WR+4yNcmGlLAz0VyyBWi00NegzxtqpmMPr81AHZSB7Y538SxeEbS6OqXomntndDJqc0YqjTDGXjZggRIw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5165 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832190732100001 Content-Type: text/plain; charset="utf-8" For vendor specific code to support superpages we need to be able to deal with a superpage mapping replacing an intermediate page table (or hierarchy thereof). Consequently an iommu_alloc_pgtable() counterpart is needed to free individual page tables while a domain is still alive. Since the freeing needs to be deferred until after a suitable IOTLB flush was performed, released page tables get queued for processing by a tasklet. Signed-off-by: Jan Beulich --- I was considering whether to use a softirq-tasklet instead. This would have the benefit of avoiding extra scheduling operations, but come with the risk of the freeing happening prematurely because of a process_pending_softirqs() somewhere. --- v3: Call process_pending_softirqs() from free_queued_pgtables(). --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -12,6 +12,7 @@ * this program; If not, see . */ =20 +#include #include #include #include @@ -491,6 +492,92 @@ struct page_info *iommu_alloc_pgtable(st return pg; } =20 +/* + * Intermediate page tables which get replaced by large pages may only be + * freed after a suitable IOTLB flush. Hence such pages get queued on a + * per-CPU list, with a per-CPU tasklet processing the list on the assumpt= ion + * that the necessary IOTLB flush will have occurred by the time tasklets = get + * to run. (List and tasklet being per-CPU has the benefit of accesses not + * requiring any locking.) + */ +static DEFINE_PER_CPU(struct page_list_head, free_pgt_list); +static DEFINE_PER_CPU(struct tasklet, free_pgt_tasklet); + +static void free_queued_pgtables(void *arg) +{ + struct page_list_head *list =3D arg; + struct page_info *pg; + unsigned int done =3D 0; + + while ( (pg =3D page_list_remove_head(list)) ) + { + free_domheap_page(pg); + + /* Granularity of checking somewhat arbitrary. */ + if ( !(++done & 0x1ff) ) + process_pending_softirqs(); + } +} + +void iommu_queue_free_pgtable(struct domain *d, struct page_info *pg) +{ + struct domain_iommu *hd =3D dom_iommu(d); + unsigned int cpu =3D smp_processor_id(); + + spin_lock(&hd->arch.pgtables.lock); + page_list_del(pg, &hd->arch.pgtables.list); + spin_unlock(&hd->arch.pgtables.lock); + + page_list_add_tail(pg, &per_cpu(free_pgt_list, cpu)); + + tasklet_schedule(&per_cpu(free_pgt_tasklet, cpu)); +} + +static int cpu_callback( + struct notifier_block *nfb, unsigned long action, void *hcpu) +{ + unsigned int cpu =3D (unsigned long)hcpu; + struct page_list_head *list =3D &per_cpu(free_pgt_list, cpu); + struct tasklet *tasklet =3D &per_cpu(free_pgt_tasklet, cpu); + + switch ( action ) + { + case CPU_DOWN_PREPARE: + tasklet_kill(tasklet); + break; + + case CPU_DEAD: + page_list_splice(list, &this_cpu(free_pgt_list)); + INIT_PAGE_LIST_HEAD(list); + tasklet_schedule(&this_cpu(free_pgt_tasklet)); + break; + + case CPU_UP_PREPARE: + case CPU_DOWN_FAILED: + tasklet_init(tasklet, free_queued_pgtables, list); + break; + } + + return NOTIFY_DONE; +} + +static struct notifier_block cpu_nfb =3D { + .notifier_call =3D cpu_callback, +}; + +static int __init bsp_init(void) +{ + if ( iommu_enabled ) + { + cpu_callback(&cpu_nfb, CPU_UP_PREPARE, + (void *)(unsigned long)smp_processor_id()); + register_cpu_notifier(&cpu_nfb); + } + + return 0; +} +presmp_initcall(bsp_init); + bool arch_iommu_use_permitted(const struct domain *d) { /* --- a/xen/arch/x86/include/asm/iommu.h +++ b/xen/arch/x86/include/asm/iommu.h @@ -143,6 +143,7 @@ int pi_update_irte(const struct pi_desc =20 int __must_check iommu_free_pgtables(struct domain *d); struct page_info *__must_check iommu_alloc_pgtable(struct domain *d); +void iommu_queue_free_pgtable(struct domain *d, struct page_info *pg); =20 #endif /* !__ARCH_X86_IOMMU_H__ */ /* From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=quarantine dis=none) header.from=suse.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832237774893.8445922728574; Mon, 10 Jan 2022 08:30:37 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255443.437725 (Exim 4.92) (envelope-from ) id 1n6xYh-0000hG-6z; Mon, 10 Jan 2022 16:30:11 +0000 Received: by outflank-mailman (output) from mailman id 255443.437725; Mon, 10 Jan 2022 16:30:11 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xYh-0000h9-2w; Mon, 10 Jan 2022 16:30:11 +0000 Received: by outflank-mailman (input) for mailman id 255443; Mon, 10 Jan 2022 16:30:10 +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 1n6xYg-0000gz-FK for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:30:10 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 93b9553a-7232-11ec-81c1-a30af7de8005; Mon, 10 Jan 2022 17:30:09 +0100 (CET) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2059.outbound.protection.outlook.com [104.47.2.59]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-14-fRNFiHicOfyotxGEjgqibA-1; Mon, 10 Jan 2022 17:30:08 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB5165.eurprd04.prod.outlook.com (2603:10a6:803:54::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.11; Mon, 10 Jan 2022 16:30:07 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:30:01 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 93b9553a-7232-11ec-81c1-a30af7de8005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832209; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=aWZytcZDWfGnKVWQLLwDmhgUoNVgN4mE4a8/dnot4SM=; b=WYUrYvVMK00GwKNJfyPrh+c+DKFRkKl2mMiAhOXP22nIbeo4Z97CcnfaJbS4/pbUv46Kyq kQLu8L4gg+B8mcb+azAFiLBgUhwdSvBIslGpOUTfwiVczIuPdhIoGJL/veeEwoYVjdAx4+ e0BuRMq0kRPYBZIeUrnTtqF/hLLY8mU= X-MC-Unique: fRNFiHicOfyotxGEjgqibA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aokyAHPeiwfIMOhfIhtAYHfjmpm8eNFjb2hnIY87KEjJPn63TAvPoSfNe4WgEP8EusDTGROVcKtSUl5jI2oLA2SUndArmX6AObBH2k+YN7AFFnmR1VNrkbIET0FkwECEsEr/eT133NmsG8Q6+Kw6aBdoPccr/E7B9+H0wWhXLflBFRJyUSFGIjgoOp2q0COl2VuEvnr6pG7qiXqIzXb2WfJ/gcq1BRrly7k2DWIZ0wS5B4isRGuBb6T8uWB7oiff3AprXjDvOXFftY1di/d36p5UKcN4erdHyzlmiw3STHdlAy3h4+g0vEM2YLncXsSofIhGKV86XVRhNq4gcBIE7A== 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=JdTgtNdqoNeidLKu50UftFdDVt7PjdHN4/4c5+JQ4Cs=; b=C5b07U+O78UwGB5BZi4E2GPyT61QcORmcPpRPWfnGQS43EGgqJgvUt1sMhA2lAFn+fTrV0qf3oTzaPeIHcpE8/h9rm0fpYXLtA5m/9wteYRu884+P3peTLEdHPgHKJh0JOkvclQCM2QrWxG7qVIiq1+iaopQ6ibdvAKDKRCK21y6l5NVmqDKwHZumJwLxeZ36sdtqLQIlJePbIqhPTBiPTADMnpJnYS0PWbCmEImbICQQ1b8TOi7UJCCV/nGR7NkNMwfiles3yQHcd56iNtEGv0w3WEDLM2/4CfruORtFy79lXd9ntfjN5mqQnkSZkMcpD36QkQZdK5aCkhzTWjk/A== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <124022ba-1aa8-7503-ef4f-efbc158e7357@suse.com> Date: Mon, 10 Jan 2022 17:29:59 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 11/23] AMD/IOMMU: drop stray TLB flush Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" CC: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS8PR04CA0071.eurprd04.prod.outlook.com (2603:10a6:20b:313::16) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fe31e83a-bed3-45de-a2e9-08d9d45672f9 X-MS-TrafficTypeDiagnostic: VI1PR04MB5165:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2U6w9W56QpBL+IqhB4TQXykDv+CLg7MlPAib/TcGhQEuZ/aIkvvQgWbtQ0tqYmbNRE2cM82w6gx10tp8b2JdAE3CqPFHNFRGJ444czDQ8xWX2lfT6ZjMfTTN+mIjgxlvhYapr2tcqLYGfXxuaKWStqndCavi2g0rQ6AiXIviunn9HlsdWy+TCnB4fxM6TdhBjUgNU1yRfAeVCuLaYYj3WIdzRN2uvLV+reKo7tjk/Lua9G2NXqmrjC8otf2LO31md3JLSCct4lD+970d8hR9YAVNXQ+YJ8yYALbjGf7ErgFit1BoiA2dqIgdHFPyZ014VpkaKJrY9Xhi9xQ1gmQCCg1dr3osGYH7+ltYVxNzPkUDLMmY4Vk5mtHJ0VZWSm+Ri2C4blrA1VZHYvctcAGFrwymq4EoItvaltuVXPAR70M7+ZkMghoT7IttSyZyhnfPnKf9aZUEsjN75G9TbJ4K7lzq29BSogI2vtYujGWpKdILq2DN2nYqktV2qKlONamwuNSBoFMM3+TrRuuUQSOwZVIsP7wlRTQLJZuC4/uPeI7i4bcgVXMzUn8wffTuXAbAYm0Lk8Yecf3fv5+cE7ULvzPcXC68ATCfpu757XbgCtrutzXOilte3OB+3eEQtvi+DsF8tJH7vQVavcntV0UoA5fmmq0y6z8pc7EFGLgRg5sgtbWXm261bAKuqZO/OojGvLOh/oDRDilrFZTsmRk995VElpQY8WayP1qzPsdC0Hqj6HqSgYJMQ6p8T7x08Emq X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(316002)(508600001)(6506007)(26005)(5660300002)(8676002)(83380400001)(38100700002)(2906002)(8936002)(6916009)(66476007)(2616005)(186003)(66946007)(54906003)(86362001)(6486002)(31696002)(36756003)(66556008)(31686004)(4326008)(6512007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?MVA1w8z1c1vQO+ViueGRwFi6djbJO7AfF4+WgLdj70jCIe+rZWzUCWVKuthL?= =?us-ascii?Q?6fmwBi5vKm5ZjPqFPentTr4TmOpF/NcI8a0n2b8Vm8NTCeMbiLT8KVlk51fN?= =?us-ascii?Q?Nbpla87ZCeRtQlCraIlPJ4hGcvdTcUaVf3xjuMChNBb6Y+i0S/9Q7wDeHehh?= =?us-ascii?Q?+X7TAfYI7IGDUtkGSJBDcuZArBuobvcwpBlNELn7n3iEQ0hd01HnHP67mk/x?= =?us-ascii?Q?hvcOxfJp0BFCGGR5glmo6vbsb4korl24ALBor5sfTSD7B7N7Y7IouSPJw354?= =?us-ascii?Q?PEIRFBDFvceZIoOjXIxSkaHL91M6k7BSxD8mN+SKOBWlzgXVpkfm6AEvCT2o?= =?us-ascii?Q?VkWf7+NHGFiAQU5Ezl+pPGEpNsVCNp2R8/uxOuVQCUz9rha1kBcylourf/Ot?= =?us-ascii?Q?PtflYN6nHLQOt4tsX9f/JWw3aQcARfqzv4+WJwtj6+DofZnmsGbKQxQEKUOD?= =?us-ascii?Q?oyiC6eRvEO5+gH4NaQOMHrH8f35qAjbFc36s4eXyDUuGrXvyoHKCViJFMpW8?= =?us-ascii?Q?Vlr54AbNmHvrbGTXkDKQYMcj1EXN/9H0JQ+iLZHbJ1nipmc8GDT5mWqKT9Vq?= =?us-ascii?Q?mJ4ZH4cmZUpa/bzC8lMF19bSQjdDXjO0SUtRKtyHEnkOciPbMCKse/a3pO7G?= =?us-ascii?Q?7vZB4l7qlL7CD7zbCGtEv0BtJBgZtnmN6g/c0Z2TZpHcbuvYA4ZBk1c1RTy+?= =?us-ascii?Q?61SOJQbuZokdFAj++rVptRvPT/Ez645AabxuSugvyX+Ss62j+019Wg6MoqjI?= =?us-ascii?Q?+VaCOeIHi/PMlZG47fL0z8/NGAuJF2zs30EPOoEQPlJ2o1XbsW9Q0KeCK3Uz?= =?us-ascii?Q?R0kTHXIkSCmUzKSQqiuGl050ZSRZWrHPrgSxtj95C7nYum3Jp1Kn4c+ZdcQL?= =?us-ascii?Q?jR6fAL4fzyR3bgIfzR+OTZ4zW4K6gxCqj5Eu7gFtXnIaXbdARgIYCT2Q+fcu?= =?us-ascii?Q?5+vLbp+olRhgUaOWA4IZLJ9ohOrMRhsXHqhM20gNQVcSckdh18bXV2fehOQ/?= =?us-ascii?Q?+v+ulfptPnMaqz5OlJ2eLRP/O+PcyjTnRBcsY/pXfKG5rC/SMHicBw14IgqF?= =?us-ascii?Q?gIxV1Axo6zmKbgwjXDvbrj8IBGObpt48sOPs6WMuxsKN4QF/98VF/D0O4jRA?= =?us-ascii?Q?G5Qp6wAopasn5/qTvjgEWogwj29t8zm85d9S86934++NOuokwjoO8eqimvST?= =?us-ascii?Q?5KV1pE9KKQ1SRnQwO4bMbtPTi48pc5wcLBUHrR8evUrFTVPWlbLDGaHhuhiH?= =?us-ascii?Q?LH6v87FajTDwAnx/GOG1lPCBFOKw55EXFmcDtk+TzPLTbxGPR4onzGTo4acy?= =?us-ascii?Q?2oA2cFkoQdpWB4tO+63bTGDQswDGbfe65LHsPE766DSnebfADoGEsKdLmbmZ?= =?us-ascii?Q?YnRQ18R8hJdiYsiKq1YRtYaCmeaaIhveBw01sR4X5pPfKDdOWulQH/oGGXzr?= =?us-ascii?Q?8FJaZKgO9d0kDOrcPICqPuDdGB+wB4WNzcAjh8Sid4RxcA0wvM9cYg3M25WV?= =?us-ascii?Q?Ls34DowbOkgymEWwQefd0+ZWalqJfQ9wSCB9xVA6rp1AFkQCPc/ZwpZmgEhW?= =?us-ascii?Q?JX8Txpv2ZkUmAPDYpV+uFADDwHoJqI2REWKc9REnSFgNfMB9eDo8V9luHxSG?= =?us-ascii?Q?vbEagvZ0aq07h0uU6z4S1N4=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: fe31e83a-bed3-45de-a2e9-08d9d45672f9 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:30:01.1774 (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: CvJFyER8m203IofB3FB8A+5SPz7MiDI2ma6GutOMs7GqCdd+m6kp2gOpO2hmSiXgYoxXvQ5lK99qYCnnqhq8sw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5165 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832238871100003 Content-Type: text/plain; charset="utf-8" I think this flush was overlooked when flushing was moved out of the core (un)mapping functions. The flush the caller is required to invoke anyway will satisfy the needs resulting from the splitting of a superpage. Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monn=C3=A9 --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -179,7 +179,7 @@ void __init iommu_dte_add_device_entry(s */ static int iommu_pde_from_dfn(struct domain *d, unsigned long dfn, unsigned int target, unsigned long *pt_mfn, - bool map) + unsigned int *flush_flags, bool map) { union amd_iommu_pte *pde, *next_table_vaddr; unsigned long next_table_mfn; @@ -240,7 +240,7 @@ static int iommu_pde_from_dfn(struct dom set_iommu_pde_present(pde, next_table_mfn, next_level, true, true); =20 - amd_iommu_flush_all_pages(d); + *flush_flags |=3D IOMMU_FLUSHF_modified; } =20 /* Install lower level page table for non-present entries */ @@ -312,7 +312,8 @@ int amd_iommu_map_page(struct domain *d, return rc; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, true) || !pt_mfn ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, flush_flags, true) = || + !pt_mfn ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_ERROR("invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", @@ -345,7 +346,7 @@ int amd_iommu_unmap_page(struct domain * return 0; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, false) ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, flush_flags, false)= ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_ERROR("invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832252; cv=pass; d=zohomail.com; s=zohoarc; b=bxzwjaGf/A1KN4TgeXATM/rAzFV7YRnuNoLYMSmWC4ByntaaHBoRXnt/rRgyRod9PiZ3ovMFmsyixSYZ+tOKp7W3f8+7F660eeZF/K0ktZAByK5vkW6mhSrYRa4nXHyA38WvNC6vmcbmf8aqf/gmZfKc7ivEasue8p/LH+Ir+As= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832252; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=f62ybvfoCSlLVGVKNs9Y8SU0VwhX09U4IvfLUd/XaZ8=; b=HgwgNCCWjbpzu4rsdPy/TE0i6Y+yBhuVjUD+cB58xVXUI0Bpkc113X66zBSOFUx4bF2H/BFZlQcy+Yty4H/v28adgkRttZfXZVMVejgynEjnououys5sUBDtLHttcuNOi1zKDZX2C/gV3oYC3q+d0l6lWeqr52/YUCRVdC+q/WA= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832252650737.3104584786745; Mon, 10 Jan 2022 08:30:52 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255447.437736 (Exim 4.92) (envelope-from ) id 1n6xYy-0001BN-Es; Mon, 10 Jan 2022 16:30:28 +0000 Received: by outflank-mailman (output) from mailman id 255447.437736; Mon, 10 Jan 2022 16:30:28 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xYy-0001BG-B0; Mon, 10 Jan 2022 16:30:28 +0000 Received: by outflank-mailman (input) for mailman id 255447; Mon, 10 Jan 2022 16:30:27 +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 1n6xYx-0008Dm-46 for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:30:27 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 9dabca33-7232-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:30:26 +0100 (CET) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2055.outbound.protection.outlook.com [104.47.2.55]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-12-i6yPQOavNqav6Pdw3MeVtw-1; Mon, 10 Jan 2022 17:30:24 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB5165.eurprd04.prod.outlook.com (2603:10a6:803:54::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.11; Mon, 10 Jan 2022 16:30:23 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:30:23 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 9dabca33-7232-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832226; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=f62ybvfoCSlLVGVKNs9Y8SU0VwhX09U4IvfLUd/XaZ8=; b=e1kdVX9mt3v7czLTgMs2mnzvvONhY7Syr0XvL7qFCAudfad8mAYwB7Qw+60JiStzhnR2rm G/UduMY18mXFQxfv2Qr73fXR2Ha04kVpeRFx5429wcpGqEfovTPjqK17ZGauQyHsHNJgxl Vq96Z2ZKT6/AWMo3CoBdy5b/pa2DQFY= X-MC-Unique: i6yPQOavNqav6Pdw3MeVtw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Jbs9/1cMPapTX20HMqbcEPlXZJUnydF+u7rI0Sc3yTQNh6lgr63Xfj2rDvAnpj7FxnID+Teep5nd6fSrmf4U8dXUw6gnM9wvtyGhPBcHTbCq474GUM2XzxPFFEGu6kYx4KZQ0EsvjAwdlnTwEz/MlO7clvFB5w1RQWJ9ZmhZlaY9MMACysGADNU1OGMTjOUgKjkFj7s9Wp7yFpsirZ3p6A87M45WJligh3x1UMxGeoLDCSoM9CMcz3dvzVvC1gdQ2atqYqjFjWxxVSrRZvjljNPIGz89HK/lsX0jr5KFDsqPjhlNAMzd+M4/fZCLeWsqfqrxb5R165tQb7+06bl2Jg== 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=f62ybvfoCSlLVGVKNs9Y8SU0VwhX09U4IvfLUd/XaZ8=; b=UJ0r7sEYpQ/spo137DIXxx3J27HLaVJ1UzGxg2QRSKX64P1R9yBXQ8Zie/JvlVGNnifo6j/Y9vA7K0rZe6BEch7B6xXnFRknjvM4YasindixFA88PBLJl4KxMIrvlt9SzI7+SnZ0KOuE9B8e4o7k5ZH/k4wsW6s0f1VPwKBxB689aB/g0vai3t4iz7I/ZVoOO5xD6rSWVs0tK2P3ICkZHH8WNIyS6FWgghL5tQMjbH2NT5SKckV2r9Bxkgrn3tcZJIiquMsdsIHD7N6+/QNRcvWPtsTypA9uEZ28dmColskVDEVUjeh7oun9JYBmGgtVSIx6Jo3oHkM/NLSfamHpZQ== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <67cb5693-3c52-ff7b-81d0-5dbd2231d940@suse.com> Date: Mon, 10 Jan 2022 17:30:21 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 12/23] AMD/IOMMU: walk trees upon page fault Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P195CA0047.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:87::24) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4625fa8c-4675-4e60-6b49-08d9d456805d X-MS-TrafficTypeDiagnostic: VI1PR04MB5165:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3631; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xlJBf/1pCVcWXTUxQIiVqr0owe0/7i1HAUItyIKEzrfx+yCWfTSE1uhc/NxOXn3qXsRKRwkZO2QG7TyqCledGRAq4lG6GIf660fIq02f7U6n0lLy/PeFpbErfmy/vzyhNjaEsnOb0ANkllSa1Nie2BSq4tvr6FJRUGwxbxfqGAiqUOzW9ctTu9UxcTcah15y1AC2c/Lg+ESbZeaDI0OiazAFiJEXh+rccCrBd3YNiO8mcDuMwmt1jvPEGiWJ4dfv932arD2AFVLT+0Wngk5czYPYZRdB+fv3mEJvFqLa8pNxj5nst2vCKykTrtctHQHaOja4Jafjhy4TTJQsp9dx4Zxj5LKD+7rsqmrDU86LvyNy+29k9w0iWcCXT+VWc6qbXE0wEkNR/CIjLjH54SqkDnpr+PfAJKWdQp7kxe/Cb0OwQFHRQxD/9eUip4x1FNb3chqIRHVAatPKasj7t6dYFdx33lXp7nBR+aN5IPgeH6Mjz3BtuWLHEdh2fQnHyHoCSblesi+Vw0Rl7JLt8jPhGxKz7YIn1nzYH4597+gjQb7jb1E9aWYsz0t659cjhfWc22JYKNjy4ZWJGHHJq7Q67TGqK9/W1NA1WoLY4XTDtZ5nSX5Oemdnl6bp+0TQW1enti2AdT/ez2mX7kRMbazML+LVM+oxfNwzsBCvxgzDIXGU7JZTJPZUOxxw6uqOercJVZtaF5PNWqV5pMoZruvw0NXD7KYGl+SIrwetONfgeEM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(316002)(508600001)(6506007)(26005)(5660300002)(8676002)(83380400001)(38100700002)(2906002)(8936002)(6916009)(66476007)(2616005)(186003)(66946007)(54906003)(86362001)(6486002)(31696002)(36756003)(66556008)(31686004)(4326008)(6512007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R3QwcWNEc3VFWWlTRGtnUm9XNTJrd0dtTmt0SjBLbk1GZ1l2cjFubVpjNzhY?= =?utf-8?B?bDNSUjZKTjFveUZUUzJZbkF6SnBTMEIwc1hqQk9PenU0cmpxaFpISFErUXRR?= =?utf-8?B?aFU3ajZ0NEs4emlCWDYwNnNrRk5naEVhSlphbW1IdGdFSWtKcU53dEl2bGZo?= =?utf-8?B?ZTlZb1RZWDZod05EdjBncEhXYkVuLzl0ajBlSGtESzVHNnRmcTZSb2REemlp?= =?utf-8?B?UTdwemN2KytRZ0ZEcnBKUmpWek93ano3azZ2UG5PN1p5Z2M4VWNhbENhWjRU?= =?utf-8?B?RDRseWR3eWRnT05tT3lmaWE1YWh3REVMTFZkUWlWcEsxalZ4V2VBSHpWVVJm?= =?utf-8?B?NEV6dUg0Y3o2RU1seVppNGpYekc2WkFJYjFZTDZuRVloN013cUYwV1hmcktv?= =?utf-8?B?c2FxaUF1d2FUUzhFb2c4T0NCZXBDQmw4dXhFM0R5N1d4N25HM1Npd0ZZOU5q?= =?utf-8?B?QmVXMkpvdElqaGtsK0N1dXZqdkhsWi9VbVVNamEvY1gybyt3NktSUmJva2w3?= =?utf-8?B?OVBHdzdaNnhlNFIza3lEQ2JPcFd5NTJacFVPT0JVUzVYNEFUUzhQelVsdyti?= =?utf-8?B?YmpSNlNGUVVtT2pvY1JvQkVKdWtub3haMzhrQmxNNm54M2kwMVpnS0pObXNz?= =?utf-8?B?U0dESUxCa0Jmck8wWGdFSXpVbVpBVUs1eTE4aDY0UjBtMHFpN2ZsWitTREhQ?= =?utf-8?B?SDBTTi82TGRIRlNzSDd0dDV0c1h2bjlsOWlwOUR6eFJaYmQzQkpVb0J1bmgy?= =?utf-8?B?cGJhMU9tMnhRUi9xOVF1VUNpT2wzTHh6cEo5K3VkVHdNSUp6L2tFR2NHM3V6?= =?utf-8?B?TDVSWTh3MWRTZ0pQV2JaTGtGaU1XSThiclpWdE54Z0VMUUcwTWJ4ZHh0NE10?= =?utf-8?B?eDhDdjZuM3ByQUF5NHYzN2dITDBzQVpwYXNrOHB5MlJNUlpzRWlCR2hhdHdC?= =?utf-8?B?UHcyMWpDL0dGRTdzV3NPWG5YVWphdkl3MEdYcDBpU3hHNGt3dXZzSC9HQVJB?= =?utf-8?B?T2RRaVFhWlJseGUvU2pBakdoRXZHK2hYUFNaNzE5V3JIcGEvREhITk9Xd0Fq?= =?utf-8?B?R2I0MFR1UUI5WWNJUUdCR0Y2V2FCenhFTDdXSXcvQU1ONWJkbks2ejM5ZlFu?= =?utf-8?B?cXFrakx6UmdybTJBd3JWNmhmaFEwQWlpMWxQd0dHVDBMazc4M0YxUVRSTm5Y?= =?utf-8?B?aURBREZSWExaMTdXSnh4cy9xTGNPb0NicnV5ZFNXcmxvNkVxa0toR3ZyWkkz?= =?utf-8?B?UXh1cVJzK3hZQmJ5ZWpKODFtVWJGZ2F1WmhLOUlMWXR1Q1FzL1hkR3lUdUha?= =?utf-8?B?dlBMZ1dQeEVaSTBNamlJaW9CRG5aVFpmOUpTdjdVZC9Rb1R5R2p3bWF0cVlq?= =?utf-8?B?L1NEZzZ5UEpmYXlKcjkzU29NSktZb2ZZR0hqY0ZqZjNVVk1pdTFudVB5NjYy?= =?utf-8?B?MitTRFF0NGNJZFM5VXJTcXBPRWlzV3hQeWxCWHhBdUpUNW0zU3VHWjdubXhp?= =?utf-8?B?NHRaMStLd1huclV2VkJCYnBmVnc2bDVUTUlsR1lLZ1BUSVFQNmU4TXB5Q0tE?= =?utf-8?B?dEhGU1NuLzZ2eDBjV0dBZUt6OU92VENxWGIxVit4a054bWh0YnVkZU5XS3Jy?= =?utf-8?B?MDFXUnRBaSs1ZHVXaFhPRHc3ZURiTFMrMmRxdUtHcXRnSnJOUGVrVkhBRnQw?= =?utf-8?B?a1JWWUp5elRBK3AvRlcyZDRWcG45NXJPZHU0N3pveU9jWUhWY1Bqemhub0xU?= =?utf-8?B?SUxUblJSc3BrQkQzVzBzSWFUYWVuUTMwd2RlazRxOEJLeGJZdGNyRjI5UWtF?= =?utf-8?B?YkFWaE1haXpWM0F3dVoxUTNmUXBJTjZRMjZxYUprblpaVEtUVisyTnNVQXA2?= =?utf-8?B?WkRvT0ppV0V2cURKY0tFSHQ3RTNnYW5tQVZ4N0lVUnVtUU1ITnVkbHByNCtq?= =?utf-8?B?WEJIaEZTbnBFa2d2NG9ZSzJsTEdDaHVpbTBpZlZxdndxTDRYUkJhdHNpYnZz?= =?utf-8?B?VWpaS2tBZnlQT3FJcDMwWGREdWZpZlZ2Ui9UeGljM2ptZE9wckNOUlRZUktR?= =?utf-8?B?WEpYN2hGeG1kdEFtcklkUkZIK0s0dk5TMWp2dHRoTENjakhuTjZqbVhIdVh2?= =?utf-8?B?Mk02UXNEWkZaVGVtdURXZlVEWC9HdGNXTnE4ZURYSElKRWM0dVUvTURwQnlK?= =?utf-8?Q?hM6ErKkzzyAs75SbGMDfE+k=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4625fa8c-4675-4e60-6b49-08d9d456805d X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:30:23.6407 (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: tnWe6SqG3Es5eHMj/Q6iJ0Q1H8NgnT4OTosjRN3qBdnqg/RaGiHni/TV6rRhKjRHxvHBlXTaKN95/sGcgce0Pg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5165 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832253295100001 Content-Type: text/plain; charset="utf-8" This is to aid diagnosing issues and largely matches VT-d's behavior. Since I'm adding permissions output here as well, take the opportunity and also add their displaying to amd_dump_page_table_level(). Signed-off-by: Jan Beulich --- Note: "largely matches VT-d's behavior" includes the lack of any locking here. Adding suitable locking may not be that easy, as we'd need to determine which domain's mapping lock to acquire in addition to the necessary IOMMU lock (for the device table access), and whether that domain actually still exists. The latter is because if we really want to play safe here, imo we also need to account for the device table to be potentially corrupted / stale. --- a/xen/drivers/passthrough/amd/iommu.h +++ b/xen/drivers/passthrough/amd/iommu.h @@ -256,6 +256,8 @@ int __must_check amd_iommu_flush_iotlb_p unsigned long page_count, unsigned int flush_flags); int __must_check amd_iommu_flush_iotlb_all(struct domain *d); +void amd_iommu_print_entries(const struct amd_iommu *iommu, unsigned int d= ev_id, + dfn_t dfn); =20 /* device table functions */ int get_dma_requestor_id(uint16_t seg, uint16_t bdf); --- a/xen/drivers/passthrough/amd/iommu_init.c +++ b/xen/drivers/passthrough/amd/iommu_init.c @@ -574,6 +574,9 @@ static void parse_event_log_entry(struct (flags & 0x002) ? " NX" : "", (flags & 0x001) ? " GN" : ""); =20 + if ( iommu_verbose ) + amd_iommu_print_entries(iommu, device_id, daddr_to_dfn(addr)); + for ( bdf =3D 0; bdf < ivrs_bdf_entries; bdf++ ) if ( get_dma_requestor_id(iommu->seg, bdf) =3D=3D device_id ) pci_check_disable_device(iommu->seg, PCI_BUS(bdf), --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -366,6 +366,50 @@ int amd_iommu_unmap_page(struct domain * return 0; } =20 +void amd_iommu_print_entries(const struct amd_iommu *iommu, unsigned int d= ev_id, + dfn_t dfn) +{ + mfn_t pt_mfn; + unsigned int level; + const struct amd_iommu_dte *dt =3D iommu->dev_table.buffer; + + if ( !dt[dev_id].tv ) + { + printk("%pp: no root\n", &PCI_SBDF2(iommu->seg, dev_id)); + return; + } + + pt_mfn =3D _mfn(dt[dev_id].pt_root); + level =3D dt[dev_id].paging_mode; + printk("%pp root @ %"PRI_mfn" (%u levels) dfn=3D%"PRI_dfn"\n", + &PCI_SBDF2(iommu->seg, dev_id), mfn_x(pt_mfn), level, dfn_x(dfn= )); + + while ( level ) + { + const union amd_iommu_pte *pt =3D map_domain_page(pt_mfn); + unsigned int idx =3D pfn_to_pde_idx(dfn_x(dfn), level); + union amd_iommu_pte pte =3D pt[idx]; + + unmap_domain_page(pt); + + printk(" L%u[%03x] =3D %"PRIx64" %c%c\n", level, idx, pte.raw, + pte.pr ? pte.ir ? 'r' : '-' : 'n', + pte.pr ? pte.iw ? 'w' : '-' : 'p'); + + if ( !pte.pr ) + break; + + if ( pte.next_level >=3D level ) + { + printk(" L%u[%03x]: next: %u\n", level, idx, pte.next_level); + break; + } + + pt_mfn =3D _mfn(pte.mfn); + level =3D pte.next_level; + } +} + static unsigned long flush_count(unsigned long dfn, unsigned long page_cou= nt, unsigned int order) { --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -607,10 +607,11 @@ static void amd_dump_page_table_level(st mfn_to_page(_mfn(pde->mfn)), pde->next_level, address, indent + 1); else - printk("%*sdfn: %08lx mfn: %08lx\n", + printk("%*sdfn: %08lx mfn: %08lx %c%c\n", indent, "", (unsigned long)PFN_DOWN(address), - (unsigned long)PFN_DOWN(pfn_to_paddr(pde->mfn))); + (unsigned long)PFN_DOWN(pfn_to_paddr(pde->mfn)), + pde->ir ? 'r' : '-', pde->iw ? 'w' : '-'); } =20 unmap_domain_page(table_vaddr); From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=quarantine dis=none) header.from=suse.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832305903275.3623894061467; Mon, 10 Jan 2022 08:31:45 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255452.437748 (Exim 4.92) (envelope-from ) id 1n6xZa-0001oj-Pq; Mon, 10 Jan 2022 16:31:06 +0000 Received: by outflank-mailman (output) from mailman id 255452.437748; Mon, 10 Jan 2022 16:31:06 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xZa-0001oc-KA; Mon, 10 Jan 2022 16:31:06 +0000 Received: by outflank-mailman (input) for mailman id 255452; Mon, 10 Jan 2022 16:31:05 +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 1n6xZZ-0008Dm-2I for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:31:05 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id b4407c00-7232-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:31:04 +0100 (CET) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2056.outbound.protection.outlook.com [104.47.2.56]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-14-LJluqCRsMjaoXdSCAp7t0w-1; Mon, 10 Jan 2022 17:31:02 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB5165.eurprd04.prod.outlook.com (2603:10a6:803:54::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.11; Mon, 10 Jan 2022 16:31:01 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:31:01 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: b4407c00-7232-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832263; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=KRmpD2qMXm2Vm6fNIy0ebgLcqYPHnHwAuw/VY8R+szI=; b=NB5WmeZsH+Cs7rDE8u5cVjspIEYa/KfJanWS8GCNTnlMkFon13vpD3AekDu+g6y4JiyXyf eT3JOU4z8K/uuaf4+hZLxQgv5oo+1cvxENOrFYlQg2j62SsNY3raOaPJ8P0JYisKLQrw0Z JrgZBN5TDBGEczt37ZemEQCMtdgxu/M= X-MC-Unique: LJluqCRsMjaoXdSCAp7t0w-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nldOnZ48C8C16ERsSMvQJqICf9zIhDzQDzVEOMcRvGHW/hUpFLFh0VMMfmPsCJjJjAdcuvgI3Q5FglTPehsqkxiDR5BjR0kYR5UYaKJxnOELaa1Gws71BXd+17tdLVxrsUMnqFuUYwI2XsheiS+FXU8PPiD53MqspkO+2x7HyK74XrsS9zsGqxGJpLqnGsmgB+qbRkJLVmvT194xn9/uhUvjv2CdZx0Fb4OF+zrc/SGkgI3tyhkJ6uLyGq6uiWpNkbmdxqPP5+64AkXJ9ETaU/wwgcl8GWkUC3DFJWO+jyMXdRmU6fzDCtxQr1yXqze/5hVI+2YgbllwoejM8xvEbQ== 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=E2uuY7rIe2glCx5ujVXcsUed4WYFvdRg35p5JtkioGI=; b=IY1oP6p5fa+hWW7Pk7gznLQs4TEumsQ15BmoYtgU6Lla1bcLwF+EMf7H+42BThsXwb8FNah+AcheJJV4RSgukeQ+K/axq3Wm+XAmYPNNI5+yxcah4lHByh5yPVPd8MyMzMcKk9mxou45GLqxSTHaXyECG/KiHXskrWnHno73sdAViVHIQfYWmpWylbCAJ9XZYjDjUnQ7e+oMrKFGvzdVPfFcPT3qMQLok68WMZLcnS48w42nsWzJNGmXFZosXmyuwRXmhbRMQ16YdfmtYEDweJlNiaawb3KM09VALzF9EolydlfB4NXk6mCeV5r5YqcsyH7OzDk4IJkuKHq5V+77fA== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <75e21708-5d39-0af1-2f88-e77643ff4231@suse.com> Date: Mon, 10 Jan 2022 17:30:59 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 13/23] AMD/IOMMU: return old PTE from {set,clear}_iommu_pte_present() Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" CC: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS9PR04CA0073.eurprd04.prod.outlook.com (2603:10a6:20b:48b::27) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 875d9c51-72bb-4363-f4d6-08d9d45696d3 X-MS-TrafficTypeDiagnostic: VI1PR04MB5165:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: TcHupoMoSLnwLQ/0olIDxDYJrRumWp2zjNjixfDFVoW25pHuWgpFJZAx48BSeu9OyDQP4BGLfqHoNim3hzeXDmWWBXrQllXdVnPFMxsNg1zpgzMj8lI4tDhT0zWU3jLs4xc+ttYHuggM4pDtA6CMKDxqBFAsWToZaxoG7I4gqs4qkG2GNL8ZGZqc+08ubQMxkRMmFRQi2tYC4xdJWOmoQy3+p0w2KZKVIqJc2cznrLxZ7dth87FtWIGqX7NcTJCVIXAcNNEjYw/47w+STTVSRPgpTZGvTSyYgOFhale/Wpdaep1690zWPLT3RadNaSo1pxGhNuAxPKpSRdQiley/7ZyyMy2O+qbjQBt1JjC8VzkKqAEewODF5tWAeL0U6SPAhJgzjmxs/5F4YqoQDV55CufVWq9MN8Fb9Zo2oF3pCP7Cxt857MqsGQLAfPrfyE4OCKuwfX+y/Mh/iBqEw4jhW1m3pzLv0d5Sfr4a7vKLmvzcQsjJD/Yj3p2wf7+hy1JPNlJHtQ4rweFIQ92Bwuo8M3W1c4QbOYxg8P+itKGpxjRUZIotCOY5v6ZwwFTyJgEio1TFDES9YtCS3Sb0dnry5+vuF/NFPuywZ6xJUZRVDFHTDU6oRZvWLdqKb31s0prR1EDpX0HHcv/3z40uPRBxyAOQYpurixVdGPeb7Sv6hzAPuUa+F8agsB6YCtzGgDDErQ81fsWIAYYbcbMZA4+ptdhoVtAQAej/04HgTuBTzaTOWXPJZW9XsC/7L9wWcs+F X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(316002)(508600001)(6506007)(26005)(5660300002)(8676002)(83380400001)(38100700002)(2906002)(8936002)(6916009)(66476007)(2616005)(186003)(66946007)(54906003)(86362001)(6486002)(31696002)(36756003)(66556008)(31686004)(4326008)(6512007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?aBgK08q4GfRecZxtRtdeOmxoaDyz9yUNNKomFQhD1J6fP3MWHYngdvusdwTF?= =?us-ascii?Q?gHt2FBLXX7Hy1WAn0Yj+ZdOaFKa+gxWQOwZgRDbyPkc4AGkdDCF4NP1pzZ96?= =?us-ascii?Q?OujsICe/4M7oQ5m9t4D8b0Xr4LVEoH3jKBmRJkXji+3ksYoVJeIr0FMoWH4O?= =?us-ascii?Q?E5PhtFz1JuLTxEgcxMRj2irZYKvJI5lO+as1AI0ZmnCWWdwCkAw7O8wEvMG8?= =?us-ascii?Q?Z+Ryh6hbQUk55iVDlQadb/Z6u807vVb2EOkiixT43dqoPWWVupyJLQttumpk?= =?us-ascii?Q?ggd+ZnyoHrXNJOILtMxj6fW4O0SabZudP4bp8QTzxFnfgg8iNbTU+Z6/WCC6?= =?us-ascii?Q?sk9SsvfeWtiu8DuNeECLAOzr1WcoUXWoyolAOg7BkpJ/UZ1kH2S17mjHNKZZ?= =?us-ascii?Q?+hY5tRdcuAIlUcQh4cqoV3VoIAWmsp8tYSpVs9YBC7/+zTl4tpE/BTkEa4cN?= =?us-ascii?Q?C3ZQr6sHFHacusPP3jVnXyMQrySIdXq+AD8kPtEHlaooaGSU/qj+648a1YOO?= =?us-ascii?Q?RWpk3m1ATOdnbUIcbBtSMpmqKRhG2DVLlzkpaBMECd9re0y6QTep1+BrtZru?= =?us-ascii?Q?pwxvj3A4EmwkIDTNe1CkHGkvE1QTTJkaIle+97hmGsAqh1TKtgWXHzFUP+yL?= =?us-ascii?Q?DEneyh6J49694tNjPDXiQryuAVKg8/GYhXorsXZq2v3woKbf1wMbTf5Jyw+M?= =?us-ascii?Q?4cSwVqM8JL358PU+GBDri/I0vlsuGXBZVQVn5V7DDzFHxrxY90Fo3noRf+jW?= =?us-ascii?Q?ihbMgnXiL7w8+hriJW2ynDJNZP7ICw6EYRwfwB/bnoGj/+gnk4ZbgCXj0Kzh?= =?us-ascii?Q?TjeSlEnFoLHrJFDyxtNkIlgIZ4sjsCs538u7QQEJ0gk1D3//+8w6xoQUsWn3?= =?us-ascii?Q?g1+DQVAdxZaEcSoG/GZFg8ZTx+BpdBP6ayhwvJhkklJOkp+AlIKxT5e1INSn?= =?us-ascii?Q?yc2DUwQr8cfk3Xj9fXmOaBq/Vt7QDPeIrJy6fF6qCVlIEJa/EBcqFeKXTPlv?= =?us-ascii?Q?7eQsU+Oss/cd8fbxV/WQm7qg3ilbqodRNJDzu10weKPstTGLtXH1taahk+YB?= =?us-ascii?Q?kKzWgpycyBA04CSf4YUxt/LR6LWYMtGFpeaepYZESlR/KeuB2p3L66k1wmBt?= =?us-ascii?Q?zPT69UdDhn8qGxMGbqANAkW4N9kOA8ksQR9+N2RWgFW0Y/tfj6IBbDWnu6Cn?= =?us-ascii?Q?/ncLM9HeinZpj79io4/C37CvGOag/7Q4QYrTkby6hTolJsfPkUMlOf5wSG/D?= =?us-ascii?Q?uTpLwQaFzWYRLsF2jNlrzRtlu9HGSidsizAN6PyGf2JHy1ffF5E9LlPsrsLF?= =?us-ascii?Q?JqTIw6/y4O+dA9cYVNLy9LBcRQzXcdKW6PRX++Nbft93ZtZBawQIoqSWVDvY?= =?us-ascii?Q?sjuAeQQzoBTxyjsKOm5uyIcZDmf3QXQ8wWBqtvILTl2w2ngSDZqRgN+uXhlH?= =?us-ascii?Q?z9+/ZqxwZzKfdWpYrAZC4t9e+UWryqgDAZVlTCi9PEnyaa54c/UZ9OsMvyo8?= =?us-ascii?Q?qEXiVJwYUONoZaXRtBLIKmuqJMvMc2K73m9ww4J2LvNRjy81u+ikLjvlcmAm?= =?us-ascii?Q?g3z4CMvaG7+GTwHFxfZ4sGl+ME2vx4ogIpmcwCIuOH+USWtgiRtLnwxfNMwB?= =?us-ascii?Q?T1lUJlTmJprZjbcFFcI6IWQ=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 875d9c51-72bb-4363-f4d6-08d9d45696d3 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:31:01.3334 (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: np39MjGZ0s7OJOYodZ7ba1SapIHYYKGt2YAZ6YBF3STR7eKZE528vNOYbQ8cmn0oj730P11IFRFwMNgl4xu/Ew== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5165 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832307306100001 Content-Type: text/plain; charset="utf-8" In order to free intermediate page tables when replacing smaller mappings by a single larger one callers will need to know the full PTE. Flush indicators can be derived from this in the callers (and outside the locked regions). First split set_iommu_pte_present() from set_iommu_ptes_present(): Only the former needs to return the old PTE, while the latter (like also set_iommu_pde_present()) doesn't even need to return flush indicators. Then change return types/values and callers accordingly. Note that for subsequent changes returning merely a boolean (old.pr) is not going to be sufficient; the next_level field will also be required. Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monn=C3=A9 --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -31,30 +31,28 @@ static unsigned int pfn_to_pde_idx(unsig return idx; } =20 -static unsigned int clear_iommu_pte_present(unsigned long l1_mfn, - unsigned long dfn) +static union amd_iommu_pte clear_iommu_pte_present(unsigned long l1_mfn, + unsigned long dfn) { - union amd_iommu_pte *table, *pte; - unsigned int flush_flags; + union amd_iommu_pte *table, *pte, old; =20 table =3D map_domain_page(_mfn(l1_mfn)); pte =3D &table[pfn_to_pde_idx(dfn, 1)]; + old =3D *pte; =20 - flush_flags =3D pte->pr ? IOMMU_FLUSHF_modified : 0; write_atomic(&pte->raw, 0); =20 unmap_domain_page(table); =20 - return flush_flags; + return old; } =20 -static unsigned int set_iommu_pde_present(union amd_iommu_pte *pte, - unsigned long next_mfn, - unsigned int next_level, bool iw, - bool ir) +static void set_iommu_pde_present(union amd_iommu_pte *pte, + unsigned long next_mfn, + unsigned int next_level, + bool iw, bool ir) { - union amd_iommu_pte new =3D {}, old; - unsigned int flush_flags =3D IOMMU_FLUSHF_added; + union amd_iommu_pte new =3D {}; =20 /* * FC bit should be enabled in PTE, this helps to solve potential @@ -68,28 +66,42 @@ static unsigned int set_iommu_pde_presen new.next_level =3D next_level; new.pr =3D true; =20 - old.raw =3D read_atomic(&pte->raw); - old.ign0 =3D 0; - old.ign1 =3D 0; - old.ign2 =3D 0; + write_atomic(&pte->raw, new.raw); +} =20 - if ( old.pr && old.raw !=3D new.raw ) - flush_flags |=3D IOMMU_FLUSHF_modified; +static union amd_iommu_pte set_iommu_pte_present(unsigned long pt_mfn, + unsigned long dfn, + unsigned long next_mfn, + unsigned int level, + bool iw, bool ir) +{ + union amd_iommu_pte *table, *pde, old; =20 - write_atomic(&pte->raw, new.raw); + table =3D map_domain_page(_mfn(pt_mfn)); + pde =3D &table[pfn_to_pde_idx(dfn, level)]; + + old =3D *pde; + if ( !old.pr || old.next_level || + old.mfn !=3D next_mfn || + old.iw !=3D iw || old.ir !=3D ir ) + set_iommu_pde_present(pde, next_mfn, 0, iw, ir); + else + old.pr =3D false; /* signal "no change" to the caller */ =20 - return flush_flags; + unmap_domain_page(table); + + return old; } =20 -static unsigned int set_iommu_ptes_present(unsigned long pt_mfn, - unsigned long dfn, - unsigned long next_mfn, - unsigned int nr_ptes, - unsigned int pde_level, - bool iw, bool ir) +static void set_iommu_ptes_present(unsigned long pt_mfn, + unsigned long dfn, + unsigned long next_mfn, + unsigned int nr_ptes, + unsigned int pde_level, + bool iw, bool ir) { union amd_iommu_pte *table, *pde; - unsigned int page_sz, flush_flags =3D 0; + unsigned int page_sz; =20 table =3D map_domain_page(_mfn(pt_mfn)); pde =3D &table[pfn_to_pde_idx(dfn, pde_level)]; @@ -98,20 +110,18 @@ static unsigned int set_iommu_ptes_prese if ( (void *)(pde + nr_ptes) > (void *)table + PAGE_SIZE ) { ASSERT_UNREACHABLE(); - return 0; + return; } =20 while ( nr_ptes-- ) { - flush_flags |=3D set_iommu_pde_present(pde, next_mfn, 0, iw, ir); + set_iommu_pde_present(pde, next_mfn, 0, iw, ir); =20 ++pde; next_mfn +=3D page_sz; } =20 unmap_domain_page(table); - - return flush_flags; } =20 void amd_iommu_set_root_page_table(struct amd_iommu_dte *dte, @@ -287,6 +297,7 @@ int amd_iommu_map_page(struct domain *d, struct domain_iommu *hd =3D dom_iommu(d); int rc; unsigned long pt_mfn =3D 0; + union amd_iommu_pte old; =20 spin_lock(&hd->arch.mapping_lock); =20 @@ -323,12 +334,16 @@ int amd_iommu_map_page(struct domain *d, } =20 /* Install 4k mapping */ - *flush_flags |=3D set_iommu_ptes_present(pt_mfn, dfn_x(dfn), mfn_x(mfn= ), - 1, 1, (flags & IOMMUF_writable), - (flags & IOMMUF_readable)); + old =3D set_iommu_pte_present(pt_mfn, dfn_x(dfn), mfn_x(mfn), 1, + (flags & IOMMUF_writable), + (flags & IOMMUF_readable)); =20 spin_unlock(&hd->arch.mapping_lock); =20 + *flush_flags |=3D IOMMU_FLUSHF_added; + if ( old.pr ) + *flush_flags |=3D IOMMU_FLUSHF_modified; + return 0; } =20 @@ -337,6 +352,7 @@ int amd_iommu_unmap_page(struct domain * { unsigned long pt_mfn =3D 0; struct domain_iommu *hd =3D dom_iommu(d); + union amd_iommu_pte old =3D {}; =20 spin_lock(&hd->arch.mapping_lock); =20 @@ -358,11 +374,14 @@ int amd_iommu_unmap_page(struct domain * if ( pt_mfn ) { /* Mark PTE as 'page not present'. */ - *flush_flags |=3D clear_iommu_pte_present(pt_mfn, dfn_x(dfn)); + old =3D clear_iommu_pte_present(pt_mfn, dfn_x(dfn)); } =20 spin_unlock(&hd->arch.mapping_lock); =20 + if ( old.pr ) + *flush_flags |=3D IOMMU_FLUSHF_modified; + return 0; } =20 From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832322; cv=pass; d=zohomail.com; s=zohoarc; b=EBKRYlZJkTI1tR1ne/uLrP9tDKX0ByUM4a7LJJGPE/iYWhBeRKjQ8AOV7DIN1xWWwr8qoGKqurpCQt/iFAJLJaKuGYbelbZ/w6F5D4rzoZV8TmUUtBJtX7R8UePgl4xZp+qXdwRovWgTf11vRlJCIwzEDf06T11MDN9R2ABfQf0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832322; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=3QICCLTVAYCokU58Fu1KW8azrW2zPznMQ8q1onO/ez0=; b=ekjIAfXa2XbyikcFGGl37YiojykdxKmyjBUrI3PMLZx2/Xb1nlH1rfGW5v75BznqHr3aY8Lb9uriQNAPq1z1INp8cp58oEfPwMvxunzmwhF/t61N1KctWZDZEYFGpzWiBLxPI1BYM6/gq4RAfKAmDDT0exSeEgfWW5P1T/wcLfg= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832322672161.6644623642569; Mon, 10 Jan 2022 08:32:02 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255457.437758 (Exim 4.92) (envelope-from ) id 1n6xa7-0002T8-53; Mon, 10 Jan 2022 16:31:39 +0000 Received: by outflank-mailman (output) from mailman id 255457.437758; Mon, 10 Jan 2022 16:31:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xa7-0002T1-1l; Mon, 10 Jan 2022 16:31:39 +0000 Received: by outflank-mailman (input) for mailman id 255457; Mon, 10 Jan 2022 16:31:38 +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 1n6xa5-0008Dm-VP for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:31:38 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id c7a375f8-7232-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:31:36 +0100 (CET) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2052.outbound.protection.outlook.com [104.47.2.52]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-10-0gdKTTpoNE6LuvJHd8qH3g-2; Mon, 10 Jan 2022 17:31:34 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB5165.eurprd04.prod.outlook.com (2603:10a6:803:54::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.11; Mon, 10 Jan 2022 16:31:32 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:31:32 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: c7a375f8-7232-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832296; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3QICCLTVAYCokU58Fu1KW8azrW2zPznMQ8q1onO/ez0=; b=lvP0IRTUiIyBXrHcrMcF8EZrbIEd6MfvUZjR23no6tayerYDxcjCl8P1eUEk43xr/oerZu GEG+yZCLfXW69W3jR/yZWadEct/cvUvav+2ZKEk6aQemvEy4jk9MJVqxEd5QsrD0tcPxR/ HV3rrSIxKq/+zrHPDMWsPvVO2Ht71OM= X-MC-Unique: 0gdKTTpoNE6LuvJHd8qH3g-2 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jI2ixXW72K8/7bOweVw35+7DaN5NYe9bM8SyPBn4wEaOMAFMqnkhAlST8tJgO0FwpuJoKogZ4vHZODRJIA0iLT8iCHbxG/6Vzl4gSVl1UPPeaisTG5ran35vo3dgrJZDkYMtk6kilfwLtB28KhrsBdYslQNkQEk6so3RdmpA1PKtRCVQyL4SWNOXft5KPkQpJYr/HtT8g0Uqg2RFDZrM8/62Ll+0HkkcqVlXjn2S9IkRKOJ/KZbcJyS8DZSGTCKB7neAgmTycWK4ls1rKjUiqo8jWxh3vd0w8KPXPaz0xCz5NiY4FpzGtQ3LHqd4SBa2svRLdrJogNLEPmpZGdQDeg== 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=3QICCLTVAYCokU58Fu1KW8azrW2zPznMQ8q1onO/ez0=; b=EgPgYmzxQ8PvxaicwC1CsW2Uz6IyeKfKpRYDpGTdFqbUJdEKGws7tDfUb3Ac7wQoRrVa/cu863Mw9GFPmp4OJaVfXnwswl1qhzjzGSGIpmxBqMebceu1gsn04W1BrtYaCf9xS+rvXu14MR9kUMoaSDqQMen3wtdAL6NMbHx3KQNHbCaI+pqEPYfI4RIpJnmxPQ2NJXpa7AFAKRSg5KYgSakrYH+OwV5zaW/ALs1RX5/nf9UUHGAwNPxlSW7NPhVOWYKWfejBxFRlU0TDiUlC29YbRJ5qEEw4BlO8SkY6fObgFUM+C4OX6HQIY6TuWBz31+BhyQ13mACN+EJCazQAgA== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <3815d3ce-69e7-6fd0-8052-e396af567bd7@suse.com> Date: Mon, 10 Jan 2022 17:31:28 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 14/23] AMD/IOMMU: allow use of superpage mappings Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Andrew Cooper , George Dunlap , Julien Grall , Stefano Stabellini , Wei Liu References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR01CA0039.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::16) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4a1aac83-c9bb-434d-02f8-08d9d456a92d X-MS-TrafficTypeDiagnostic: VI1PR04MB5165:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +ackIdt8+kvYJbJilcDXHHroQQYVB/VQNg+P3m2q/4xcBiqSwe3pESc+/itxTLQ8mp/gbi30f2Y3njROejZl3fnHKSpIRpzpInkGS8fHq9x3tl95VebTbcV9vEaUwFo8pr6EkG5UATK0lF3trWgLgz7kfUp3mrrr7lhG4ieDOjSDwI5xF1wNKKLe7xChA1vJDwWaSn0Mdf0xIcblrgNyLNClhwnUV7LsiZcppq25kVeKgQ/MotcgjvKGWnBTH8e/DaQfO4xW0OOZJiBHDMzu/D0C051HDuJvuTaBhLJiP346grh1rEoIOJKqhdKiAAbVQBeOYMjxrboeNzDxxK/TzvvknWz0K51j8DD5jIOlyAAl8i0ovu9aqgFEeouempFLEuEpkO+cxyW8+xUj07eQ1Pg9Qlq9/UKgNrCi3+mPH7vL8vov0GRH5uMlcV+7fK4o7oNb//orNzhkSG3FUhDQMS4adSbYS4ccjWRKVikD+ilrMsrKMCgC9a3DeO8r4jiA3bdPAXzKDXZoejN8fHFFboxwv/wwJUaVIhmvy8HNdxwT22YDkjn8eeYsCt1zcK9jZLvkLK5g1r/uyh1tyxOwY7wjmqb1uYaP8Rl06hUPV3CT3yNbDDD0nlY8SWftGvo5gROEg2vD9Xw6W+EwtL7eMGflcDX7eYQC6ulTqAPnL81W2jGnon/6yjosaQ+NSsaKQTcAQcIOpkiqt5h2E2uePwgX61Gjma27IaE9bb13n+w= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(316002)(508600001)(6506007)(26005)(5660300002)(8676002)(83380400001)(38100700002)(2906002)(8936002)(6916009)(66476007)(2616005)(186003)(66946007)(54906003)(86362001)(6486002)(31696002)(36756003)(66556008)(31686004)(4326008)(6512007)(6666004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RmxaV2hNdVZwTkZESXQrMWdPRmFsSE9JTUJiRUFKZVJROVAvSk9VNmc2OGtE?= =?utf-8?B?bDdVbUlHM2tyVkcyays5YkRlakxSYngyTWQ1b3hzMHRPaERKb3hPYWl4dWhP?= =?utf-8?B?MGlKVGYzd3RFdDhYcGZORExTbnpTSWhGTjRQMVBoV2xaZzYxQ2tUcTBRblhU?= =?utf-8?B?VTluQTV3ditIR0VuclhycitpZHZNcFpDL05zS0hmVzN6Mm52L2xPVWNVTVky?= =?utf-8?B?T1VLQmJwTFFETkN1K3E0akdCaVUrMnl4Rzd2eXM4aWN4THpWWHEyZ01BK0lp?= =?utf-8?B?bEY0VW9KYzl1RzFrcmpjb0UvNkhPT0dWc0Vob09HREZGOG9BejY4Um1NUEpQ?= =?utf-8?B?SGJ6Wm10OWVrNFpNZHhYZDc3blFFSlRES0JvRmNtc2I2RmkxMEwyeU1nSWd1?= =?utf-8?B?SVpJNE5NejRId3o2R3RJVGppQmxxNjJyZFY5Kzd0TURGbUVIQjBOcThjc2pU?= =?utf-8?B?bjl2QkRqMFl6UzJRaGN1bmU3eGNiUlFicE9FTjZxMWkwWnJmc1diOEhyd0ZN?= =?utf-8?B?eWtKNDl4M2ZKRTZyTVl1U1gxN3hwWmIzbFNGUm0zNGNoWWV1MndmSXg4bjI2?= =?utf-8?B?SGZkaUxMUjc1dlZXOWRUV1hWYSthOEtzcyt1eHhGNEJyODVHQ1o2eVE0b1JI?= =?utf-8?B?SFBIMFFLMmVVcnNoZVE0RDJsK1p2SHVaSFBmbWhrckJQTWhqMStIRjZydFRZ?= =?utf-8?B?N0I2U3lpMEI4eFNYU1pJSE83akdIT2djUjRTWnB4RUZPV2plODl5N1dEMlVu?= =?utf-8?B?VG9RbzlIbWgrOTZsYk85bXk4RXprVG9NNkhrR1pEL1lyYWFUWmdTTTB4NHBo?= =?utf-8?B?dTJBYjk3U2NkS0hvVGJyd1NjZDhYQjQxOXlhbjV1bTJ4T2hMTUUwLzljSUtr?= =?utf-8?B?STBZTmt2V2VzOHhsbjAyYzF4dDBEOXh2OTlDWXJpZ3ZaYlhMdWc3WFF4aDlV?= =?utf-8?B?SHRZaFFKUE53bEdpeUZncklHNTNGVmRDM3ZuakNzanBWOHNMRHQwSnFNZUlt?= =?utf-8?B?QitEdjZtMDB2dmU0TU1xRDkwckZ2dDNxTHdIWW9QYXdxYSt5S2Zjemc0MWg0?= =?utf-8?B?RUxJNm8zKzhPRFFBRWEzYnRjT1hVaDFlZ3crTDZaK3JOckhtWGJKdnUwbTZ0?= =?utf-8?B?Wm5aSjlpYTB5L045YVZLbUlGakw0U1JTUGhDS3NXQ2hnKzZJZHVrU2lZeVFq?= =?utf-8?B?NEo5TXAzdkgrQXdXVVVVektieEhaZUFOVU9EU3VBWUtyZG42UGswR2g3U2lu?= =?utf-8?B?NzNYeEJCYnRvV2VxalFmWG5LNkxrdVQ2dHlBWDEvTi9SK1VEUml1TC9tZ1lM?= =?utf-8?B?MUxiVVFIb29PVEh0MTNNbVNLRjYvT2NQcldjQmdHc2h0WElxdDQ4MHFjNHpV?= =?utf-8?B?Z1U4dFJXM1NVZE9pcXpCQ21ZYVFVN0taUjFyRDdPNFlxQzVmckdnOWxlVFhG?= =?utf-8?B?cVVCUVhGeXZrUjhadjJpemlEUmQ4cDd1TlNpM1Rud1hGbHhkRlVuL0JtaHRy?= =?utf-8?B?Q1ZLZzJUa21VNHhMQU15NTQ4Z0JranF4bjhzbmtoeEQyNFVZcW93TTIzYWgv?= =?utf-8?B?Ykk2UUNjbVEwWisyMGJ4UmtOVWNwTHpjbjdzeUNqSE4rd3dpakJCMU44NEZJ?= =?utf-8?B?SkZvSUxxK2xiYTZRM1N4a2ZnRXErckNWMTJEaXpDYXA3alJuOW43Q0VEMHpp?= =?utf-8?B?OWZmVGs2L2tRa21sRXl4Vmh6eWYzbGZZZzlwcm9qYnRyaGlGcmRlZ2dPU2Y4?= =?utf-8?B?T29DbERtdmVVT2sxSE5SWm5PQSttVUU0YUVCYzVOQmErMFRFbUhpSlVhTW9y?= =?utf-8?B?Ym9mK2JXc3hrd1VXS0oraXc3WlV6WjdYbERxemNKc0VsclFYUnRpbk1ualdF?= =?utf-8?B?S21oR0pabTVKWXl6V1BkQXcxWVA1alNwNi8xaStpanY0ampYRU5QcmtlMkhz?= =?utf-8?B?OW1MaDc1dnhZSW01dWc0K3FnQXRRejRUTEFvdVY4YlRXNTZseHdoWk9IaTVI?= =?utf-8?B?eFVVZEdHT1N3eTMyemhXNUVsMEZNUlRIajVGaUpleTBxZTZUVVlOTTFjZkdw?= =?utf-8?B?cjlvY3BkZW9GV2J5UmdQOEpoL20xK1dJRGVvUHN2WVFUM0F1aU9JdHNlN2lK?= =?utf-8?B?c2ZuOVVmeFFBWDlrVm01Vy9GdEVhdTFZWjY1cGd4aTBuZHE5VFVWZFNlSnpP?= =?utf-8?Q?MYJpdiaDUNvOHgpmCgPgArw=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4a1aac83-c9bb-434d-02f8-08d9d456a92d X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:31:32.1150 (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: 7ncVdYPrI5L3V6bsfRt5w70ePAN4YvU14kDYXw1IjLlV9/kgymMYuBNUiecMQbjUj2D8HBcnddFlpUu45LzORw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5165 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832323448100001 Content-Type: text/plain; charset="utf-8" No separate feature flags exist which would control availability of these; the only restriction is HATS (establishing the maximum number of page table levels in general), and even that has a lower bound of 4. Thus we can unconditionally announce 2M, 1G, and 512G mappings. (Via non-default page sizes the implementation in principle permits arbitrary size mappings, but these require multiple identical leaf PTEs to be written, which isn't all that different from having to write multiple consecutive PTEs with increasing frame numbers. IMO that's therefore beneficial only on hardware where suitable TLBs exist; I'm unaware of such hardware.) Signed-off-by: Jan Beulich --- I'm not fully sure about allowing 512G mappings: The scheduling-for- freeing of intermediate page tables would take quite a while when replacing a tree of 4k mappings by a single 512G one. Yet then again there's no present code path via which 512G chunks of memory could be allocated (and hence mapped) anyway, so this would only benefit huge systems where 512 1G mappings could be re-coalesced (once suitable code is in place) into a single L4 entry. And re-coalescing wouldn't result in scheduling-for-freeing of full trees of lower level pagetables. --- v3: Rename queue_free_pt()'s last parameter. Replace "level > 1" checks where possible. --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -32,12 +32,13 @@ static unsigned int pfn_to_pde_idx(unsig } =20 static union amd_iommu_pte clear_iommu_pte_present(unsigned long l1_mfn, - unsigned long dfn) + unsigned long dfn, + unsigned int level) { union amd_iommu_pte *table, *pte, old; =20 table =3D map_domain_page(_mfn(l1_mfn)); - pte =3D &table[pfn_to_pde_idx(dfn, 1)]; + pte =3D &table[pfn_to_pde_idx(dfn, level)]; old =3D *pte; =20 write_atomic(&pte->raw, 0); @@ -291,10 +292,31 @@ static int iommu_pde_from_dfn(struct dom return 0; } =20 +static void queue_free_pt(struct domain *d, mfn_t mfn, unsigned int level) +{ + if ( level > 1 ) + { + union amd_iommu_pte *pt =3D map_domain_page(mfn); + unsigned int i; + + for ( i =3D 0; i < PTE_PER_TABLE_SIZE; ++i ) + if ( pt[i].pr && pt[i].next_level ) + { + ASSERT(pt[i].next_level < level); + queue_free_pt(d, _mfn(pt[i].mfn), pt[i].next_level); + } + + unmap_domain_page(pt); + } + + iommu_queue_free_pgtable(d, mfn_to_page(mfn)); +} + int amd_iommu_map_page(struct domain *d, dfn_t dfn, mfn_t mfn, unsigned int flags, unsigned int *flush_flags) { struct domain_iommu *hd =3D dom_iommu(d); + unsigned int level =3D (IOMMUF_order(flags) / PTE_PER_TABLE_SHIFT) + 1; int rc; unsigned long pt_mfn =3D 0; union amd_iommu_pte old; @@ -323,7 +345,7 @@ int amd_iommu_map_page(struct domain *d, return rc; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, flush_flags, true) = || + if ( iommu_pde_from_dfn(d, dfn_x(dfn), level, &pt_mfn, flush_flags, tr= ue) || !pt_mfn ) { spin_unlock(&hd->arch.mapping_lock); @@ -333,8 +355,8 @@ int amd_iommu_map_page(struct domain *d, return -EFAULT; } =20 - /* Install 4k mapping */ - old =3D set_iommu_pte_present(pt_mfn, dfn_x(dfn), mfn_x(mfn), 1, + /* Install mapping */ + old =3D set_iommu_pte_present(pt_mfn, dfn_x(dfn), mfn_x(mfn), level, (flags & IOMMUF_writable), (flags & IOMMUF_readable)); =20 @@ -342,8 +364,13 @@ int amd_iommu_map_page(struct domain *d, =20 *flush_flags |=3D IOMMU_FLUSHF_added; if ( old.pr ) + { *flush_flags |=3D IOMMU_FLUSHF_modified; =20 + if ( IOMMUF_order(flags) && old.next_level ) + queue_free_pt(d, _mfn(old.mfn), old.next_level); + } + return 0; } =20 @@ -352,6 +379,7 @@ int amd_iommu_unmap_page(struct domain * { unsigned long pt_mfn =3D 0; struct domain_iommu *hd =3D dom_iommu(d); + unsigned int level =3D (order / PTE_PER_TABLE_SHIFT) + 1; union amd_iommu_pte old =3D {}; =20 spin_lock(&hd->arch.mapping_lock); @@ -362,7 +390,7 @@ int amd_iommu_unmap_page(struct domain * return 0; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, flush_flags, false)= ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), level, &pt_mfn, flush_flags, fa= lse) ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_ERROR("invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", @@ -374,14 +402,19 @@ int amd_iommu_unmap_page(struct domain * if ( pt_mfn ) { /* Mark PTE as 'page not present'. */ - old =3D clear_iommu_pte_present(pt_mfn, dfn_x(dfn)); + old =3D clear_iommu_pte_present(pt_mfn, dfn_x(dfn), level); } =20 spin_unlock(&hd->arch.mapping_lock); =20 if ( old.pr ) + { *flush_flags |=3D IOMMU_FLUSHF_modified; =20 + if ( order && old.next_level ) + queue_free_pt(d, _mfn(old.mfn), old.next_level); + } + return 0; } =20 --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -630,7 +630,7 @@ static void amd_dump_page_tables(struct } =20 static const struct iommu_ops __initconstrel _iommu_ops =3D { - .page_sizes =3D PAGE_SIZE_4K, + .page_sizes =3D PAGE_SIZE_4K | PAGE_SIZE_2M | PAGE_SIZE_1G | PAGE_SIZE= _512G, .init =3D amd_iommu_domain_init, .hwdom_init =3D amd_iommu_hwdom_init, .quarantine_init =3D amd_iommu_quarantine_init, --- a/xen/include/xen/page-defs.h +++ b/xen/include/xen/page-defs.h @@ -21,4 +21,19 @@ #define PAGE_MASK_64K PAGE_MASK_GRAN(64K) #define PAGE_ALIGN_64K(addr) PAGE_ALIGN_GRAN(64K, addr) =20 +#define PAGE_SHIFT_2M 21 +#define PAGE_SIZE_2M PAGE_SIZE_GRAN(2M) +#define PAGE_MASK_2M PAGE_MASK_GRAN(2M) +#define PAGE_ALIGN_2M(addr) PAGE_ALIGN_GRAN(2M, addr) + +#define PAGE_SHIFT_1G 30 +#define PAGE_SIZE_1G PAGE_SIZE_GRAN(1G) +#define PAGE_MASK_1G PAGE_MASK_GRAN(1G) +#define PAGE_ALIGN_1G(addr) PAGE_ALIGN_GRAN(1G, addr) + +#define PAGE_SHIFT_512G 39 +#define PAGE_SIZE_512G PAGE_SIZE_GRAN(512G) +#define PAGE_MASK_512G PAGE_MASK_GRAN(512G) +#define PAGE_ALIGN_512G(addr) PAGE_ALIGN_GRAN(512G, addr) + #endif /* __XEN_PAGE_DEFS_H__ */ From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832378; cv=pass; d=zohomail.com; s=zohoarc; b=IrLyQxbDtbHVnoSeAV24I3e2wuRBUBtq1IOXI0V1TnfChqfIVzUZySzGPl8L51Ba/HhtBt/q4Hwdta3/oMBYVPw0BqdS9jWLQzdZGucJHwxen9FuH+vSPobhvASfaZNyCmHMDfYek/xUFByKsuMlA+wBQEgEIJR8aI4X5xvXfAw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832378; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=xbArZ4QUDoHrMtCaHYzaTxZfqcSN3GycWksPRq/4q2c=; b=dDQyagTu5mhLs+d0YnptvwGKdIzeHWFDQk1dqjp55Y3hHq8uJPYvFbr+lUMy8IWowVgFnfnrk68z+q7CqIXMKSluxs+vZ8gvgbor1sO4Osnil9dvQGKVBvdhfn4Y4KU+aBGnVa8NDfVFvR1EXUaclclMcB9DtCci6ap696k47Vo= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832378426525.2408615041076; Mon, 10 Jan 2022 08:32:58 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255464.437768 (Exim 4.92) (envelope-from ) id 1n6xal-00036P-Dt; Mon, 10 Jan 2022 16:32:19 +0000 Received: by outflank-mailman (output) from mailman id 255464.437768; Mon, 10 Jan 2022 16:32: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 1n6xal-00036I-Au; Mon, 10 Jan 2022 16:32:19 +0000 Received: by outflank-mailman (input) for mailman id 255464; Mon, 10 Jan 2022 16:32:18 +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 1n6xak-00032f-2U for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:32:18 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id dfcc7140-7232-11ec-81c1-a30af7de8005; Mon, 10 Jan 2022 17:32:17 +0100 (CET) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2057.outbound.protection.outlook.com [104.47.2.57]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-20-8x_ztHkUOqSlAf4NmA_hAQ-1; Mon, 10 Jan 2022 17:32:15 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB5165.eurprd04.prod.outlook.com (2603:10a6:803:54::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.11; Mon, 10 Jan 2022 16:32:14 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:32:14 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: dfcc7140-7232-11ec-81c1-a30af7de8005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832336; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xbArZ4QUDoHrMtCaHYzaTxZfqcSN3GycWksPRq/4q2c=; b=cxNfXqWk2ucprU3UKp40Uhne2PJrEwAo2MR9KezEMfXEjMlaqO9WeUZ2eefMInqXHi/3ny wqFMlboSs0yDOHoZZtrmlMftgsJT/XFg0oX+fZdZkMbB+1F9jEXrsEB/PDnhsQLIJg73/Q Qw4KmYbYjRSAdJntZcuJqbKCJVplZuQ= X-MC-Unique: 8x_ztHkUOqSlAf4NmA_hAQ-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CgK6vIRP+B/pYSgXtXyBYLxqYkkPqV/oB7Km37qnuVqwVOFFfqzOHK51sAtkTzPB/CiXzuK8cG4tyUU+wB8rYHCNSHdABxrpHUgTVX9TthHQap1uYWQMnRTcRBwoeS++NfSTCDxVtft+Yjlds8pJqzW5XarUCXrPRf/aRDNNY+ndn3RA9KpCoko58zh85zkBXOuGhydfvnTPvvVqQ57nzXDyGjiFS/qDw4SZ1rkgrKGaeDKOYwpY9NB+t76B/zEODJ+1KgHdxHQqPstobvqYEa89CA/zp4yl0awzdryfVw4jeah9CMMZy/wDYdxjSujJzJqf599wRpDZ2rc9BU380g== 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=xbArZ4QUDoHrMtCaHYzaTxZfqcSN3GycWksPRq/4q2c=; b=Rm+TdryXIAeflmX67vblXyNAKXGQdyARtyQUPZEcq+WOz2tDTl4cmB6eItyxDquBEZFthkbFzXEALpELLYJSLptHiMW3wnmTgTEj92xJ/MBjZMs4qbhIIGoZryuKEliZhhhHaGBGlQDziCNolgbdXqt96hf8o06Rgq6KqPMsZsXU2WLKN5gSltuzlOc4hRulfqs2sSdn2G7ev6DaWowxK6dsTrIO+mDLpAfyou7KiNr5irmXHngyzgKzE/FjEPlGoYRzqPCMPfEU/M8c1bzIJIC4RIKdtOapMs9w+m1bvlODiUysjGOg/biRonRDBJbkZbuVPvpdrFbmsYaj2+tjVA== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <19531402-6392-c730-08a0-20e2a4ba71f4@suse.com> Date: Mon, 10 Jan 2022 17:32:12 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 15/23] VT-d: allow use of superpage mappings Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Kevin Tian References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM5PR04CA0035.eurprd04.prod.outlook.com (2603:10a6:206:1::48) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 08097f97-93f1-48fa-2544-08d9d456c24e X-MS-TrafficTypeDiagnostic: VI1PR04MB5165:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4502; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mBTmlrxtnrkStIZcffnNLEMdU5W9kJXvVDMkCamJGGoK+YyIaWQA+ByQpeiznVS+Cx9TUjRPpeZQuhzMxz7+Uk1L8LQ4tk1gPfD5k2EBnbZj1fVvOJPrF7/InPjeKzI6eR1cvqDQ0T2JkAR9QRtH9htW6VebWNBfChQfgn7KqF8qTbBCm3FxtWoWwqHV3DGPeimxN9clKrR8dryEZ7ScY3DJideqp0FFmczBbPwIRKMZGuUNwFjnYmo/mnN0WcGAbF8hcbTQnD0RCAE5/V2zbVrheDHh1juXSNdKISsHbybaiBxtlfVPeiNTcMhQmkdDwbwE0sL8nljanxSUXRwA1XVOxEmgdWU1Nv2POzzhmbiu8JO/yqsUTJfvs7L0+brzZAC8p1u6ysMLXbAPq2ol3zYu+Ku5n5acElGlKdU9mAEtmGiscnzrqxOuwn6nGQojdJn9+cRKNiU5UQaXESYptdk/AwUBMIBre3IYq/u6Ndd9tqzKAdqulftcn1djEiGdGhK524XpLJsAJi7ufim9xl0rPvmsLmUWG4Bb9pSpkGQWf0KwP0Q8mGD0glTr6vyppo22bIlR9B03cugiSuIeP3c72CpLpfbmEdWXIqKHUbD5+BstlZyNPEXA+ro5WNdjag0Cp1tNfjKDK1d9VZkk6GKhbX358b1haguSg4DVtcPSQAWEQOXJJ/0EVm9zNSdbn3Lj0mG/kp/RamwThmPV0oSnypXsMyDB868gYcqb1ea95RPBG1o9/N6r8QCbEUXg X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(316002)(508600001)(6506007)(26005)(5660300002)(8676002)(83380400001)(38100700002)(2906002)(8936002)(6916009)(66476007)(2616005)(186003)(66946007)(54906003)(86362001)(6486002)(31696002)(36756003)(66556008)(31686004)(4326008)(6512007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?d2dnYzdkQm9FRzdCR21BUzRvdkdrSVcraGlONFVYb0kwVk5ENC9WYmJHSWlQ?= =?utf-8?B?eXJTZ0t3MHl0VS9kZDlLWU5XSDV6eVFqSmUxN3VMMGFBczR4Y1ByMnVnOVFX?= =?utf-8?B?SGU5U0Nhbk9YRUpmTlNFQVh5eFJpL3BGbkFKVGszRzloREVIVTJ5N3dIa2hV?= =?utf-8?B?cUlnVEFpd1JRT0dVT3VrUitSeUVLSlBXM25ENmhiS0g4Z2JuTnNIS1ZObHlw?= =?utf-8?B?STJ4MVFlcDYrUTYwaTZnS2hXQkpUbWgwRnNMdjhzd0VMUWh1VVRYODk2bG1K?= =?utf-8?B?ZWZjUWZrbSs5S3QzalU2clYrTGhwWWljRUtkcGZraW5lV0F3SE1uSU1TYWxZ?= =?utf-8?B?aFVzR2syQjB2RXJ1Unp3RUFzcVV1a1FZV042OUFvUzN0YURrc04xQkFZMlBi?= =?utf-8?B?R1pzR1pLaCtzRW92N3VjK1hTVWc0eG9TZk5qeHQrN1NYNld5ODV5UzZKMXNo?= =?utf-8?B?MGJlRXNlSjk4SktPN2pkYktiWkUrTnk1eUhhVm5KWmwxRkxzQmdaeE5ReUFD?= =?utf-8?B?bVcyODA4QzNiL2xBQlJZMG1rUzNQWGpGZmdZZE40cHZqN2xZd1NXaE1JVHBz?= =?utf-8?B?RzEzOWxCdTFCRWsybUZHUm5ENnBRWkdmeTFYV0dGOG53M1cvWlRVbVlrclBY?= =?utf-8?B?SGxlTFFlNVlQMW53d0ZZZ0JZRUFKbGpTL0dLRldvV1pwc2tNbklYa0h1elI5?= =?utf-8?B?Z3FFUnAwNnd1N2RaNnVRcU8yVEozRUxvSC9UdVZmMG1qbk0rV21HUVBScUp4?= =?utf-8?B?N2VTSS9JamdsR01sRkMzRi9Edm56TytmT0NoUS9zNmlMRzFIeVVqL1hESndi?= =?utf-8?B?UzhlbFQyb2l3QUw5QlA5dk12YUFPRmZYTTl0YjQ5RGlEOWVxaFNqNDVVaWdB?= =?utf-8?B?Ull5S29PZ1VqUjFBNXpjbWFkcEhZUmp3cXZhU0k0aVdrSWlhN2tvTktnSGVy?= =?utf-8?B?U0Z4SU9IVzltMGhFQ3YwSzNKZ1lPeFpsQWlMdjlZNC9HTEdkZHBvUnFjc2hJ?= =?utf-8?B?eDNveDZIS2VWMU1NVUU2NFdFZGlTeEVaZ0l3SWZoMHJnSjN2SHg5UUtiRDVh?= =?utf-8?B?ZDVnQ1RmeTBLS1hOdkRpRnl3czZqTHhTUHdNa2FCQ1QrdS81cWVqNFBId2R2?= =?utf-8?B?QS9Mc3FDZ3oxWUZTVG4xcTNMRkxLQTRNTm5MaGZjanVNNllBTytTZktPM0hQ?= =?utf-8?B?V29mY2VnUFN3Y0MxdzBnSi9lekRGZHI3cE4rZVV6MTdnOG84d2JtRzhxNFhB?= =?utf-8?B?Y2ZEVGh0dFZjT3FPUHVacGo3eUNXcTYxL0dhSnZDK2YvMjBNSVZZcXBUNnBy?= =?utf-8?B?anNPcGpKdUE0cU9HRjhvdnMxZTZncTl4MG5VRkUvbTZrY3J5bUpNVVRsZm5m?= =?utf-8?B?NU54OEpEd1pPR3NqdDBWbXYrKzZvN3E5SEk2elNlRU90N0ZBQXFHQTU3SzF6?= =?utf-8?B?WTBjMWFJVWFwZVM2bXhPL3Yra003MU5BenRyUzZjRUF4aUVldnZhMThkdXFn?= =?utf-8?B?TTYxOUNjNVk0TDRUSmpZMGQ3Q3M5UnFPcnFwei9XejArNnlXdXg5ODBRSVc5?= =?utf-8?B?MG9xWEJ4d1IwVDZGQmJNNTlnS2o2Slc2SGNPMXkzS0Y5NS9qa3FEajVwa2Fm?= =?utf-8?B?L0xMU1RIU1l0WWtLaVU3blNGUWFkelg4MVVtWnpXenZIbXFhZ2xmTFZNTWRW?= =?utf-8?B?aFlnNnBHS0hRMk9kZEpWQ2R6NytmbnVTdWkwZDFnamRpa0ZuUWJHenE4L05P?= =?utf-8?B?Tng2NDNWSUl3R2liR3lVSVgxMWpObmlaek1qak8vMjVpaFdxbWd0UFR4NVNO?= =?utf-8?B?VFhzVTRGVDBBRldienlWRGl6WTNlYmRQeXBXOUpKdVZKN0ZkWlRERVNpQ0lG?= =?utf-8?B?S3U2bytuVnpSdFZSaXJ3ZzNJcm5oNmFaUzZRSDBtV0xJTUEvTm9DNHRVUzlP?= =?utf-8?B?N0VYa3lsT2FJUnFEamd1QzMxK0hBbU5LSG9WMC8rcWJ3N2JLNWx4emVhWTk5?= =?utf-8?B?OXBUdm1lVFUra0YxcGh3VE5WMkVSTDByc1dkb2FEVlBpK2RJd3l4WEY5L3BE?= =?utf-8?B?TDRxRlFPQkVhNEgyaFpodnAvUDQ5Sk9UY3hkQ2tlM0FsMnplQmdpeFVVSVYx?= =?utf-8?B?TXB4bldFVldCdzFEYWF0OTNBTjd2TUdBc2hGNHYwUFpFNGJoUjZaT0pOVWh6?= =?utf-8?Q?xQrK8fGSLWr6CjisAP31Bik=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 08097f97-93f1-48fa-2544-08d9d456c24e X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:32:14.2742 (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: 7zJ3jpHadKtD+kUZYl0OrB0HbZl2XnndDEQBXYavsHOfo8ARCAX0BoOEL/02ABxmUV6inZOkWw0hJU3IBXUtMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5165 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832379965100001 Content-Type: text/plain; charset="utf-8" ... depending on feature availability (and absence of quirks). Also make the page table dumping function aware of superpages. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- v3: Rename queue_free_pt()'s last parameter. Replace "level > 1" checks where possible. Tighten assertion. --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -826,18 +826,37 @@ static int __must_check iommu_flush_iotl return iommu_flush_iotlb(d, INVALID_DFN, 0, 0); } =20 +static void queue_free_pt(struct domain *d, mfn_t mfn, unsigned int level) +{ + if ( level > 1 ) + { + struct dma_pte *pt =3D map_domain_page(mfn); + unsigned int i; + + for ( i =3D 0; i < PTE_NUM; ++i ) + if ( dma_pte_present(pt[i]) && !dma_pte_superpage(pt[i]) ) + queue_free_pt(d, maddr_to_mfn(dma_pte_addr(pt[i])), + level - 1); + + unmap_domain_page(pt); + } + + iommu_queue_free_pgtable(d, mfn_to_page(mfn)); +} + /* clear one page's page table */ static int dma_pte_clear_one(struct domain *domain, daddr_t addr, unsigned int order, unsigned int *flush_flags) { struct domain_iommu *hd =3D dom_iommu(domain); - struct dma_pte *page =3D NULL, *pte =3D NULL; + struct dma_pte *page =3D NULL, *pte =3D NULL, old; u64 pg_maddr; + unsigned int level =3D (order / LEVEL_STRIDE) + 1; =20 spin_lock(&hd->arch.mapping_lock); - /* get last level pte */ - pg_maddr =3D addr_to_dma_page_maddr(domain, addr, 1, flush_flags, fals= e); + /* get target level pte */ + pg_maddr =3D addr_to_dma_page_maddr(domain, addr, level, flush_flags, = false); if ( pg_maddr < PAGE_SIZE ) { spin_unlock(&hd->arch.mapping_lock); @@ -845,7 +864,7 @@ static int dma_pte_clear_one(struct doma } =20 page =3D (struct dma_pte *)map_vtd_domain_page(pg_maddr); - pte =3D page + address_level_offset(addr, 1); + pte =3D &page[address_level_offset(addr, level)]; =20 if ( !dma_pte_present(*pte) ) { @@ -854,14 +873,20 @@ static int dma_pte_clear_one(struct doma return 0; } =20 + old =3D *pte; dma_clear_pte(*pte); - *flush_flags |=3D IOMMU_FLUSHF_modified; =20 spin_unlock(&hd->arch.mapping_lock); iommu_sync_cache(pte, sizeof(struct dma_pte)); =20 unmap_vtd_domain_page(page); =20 + *flush_flags |=3D IOMMU_FLUSHF_modified; + + if ( order && !dma_pte_superpage(old) ) + queue_free_pt(domain, maddr_to_mfn(dma_pte_addr(old)), + order / LEVEL_STRIDE); + return 0; } =20 @@ -1952,6 +1977,7 @@ static int __must_check intel_iommu_map_ struct domain_iommu *hd =3D dom_iommu(d); struct dma_pte *page, *pte, old, new =3D {}; u64 pg_maddr; + unsigned int level =3D (IOMMUF_order(flags) / LEVEL_STRIDE) + 1; int rc =3D 0; =20 /* Do nothing if VT-d shares EPT page table */ @@ -1976,7 +2002,7 @@ static int __must_check intel_iommu_map_ return 0; } =20 - pg_maddr =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), 1, flush_fla= gs, + pg_maddr =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), level, flush= _flags, true); if ( pg_maddr < PAGE_SIZE ) { @@ -1985,13 +2011,15 @@ static int __must_check intel_iommu_map_ } =20 page =3D (struct dma_pte *)map_vtd_domain_page(pg_maddr); - pte =3D &page[dfn_x(dfn) & LEVEL_MASK]; + pte =3D &page[address_level_offset(dfn_to_daddr(dfn), level)]; old =3D *pte; =20 dma_set_pte_addr(new, mfn_to_maddr(mfn)); dma_set_pte_prot(new, ((flags & IOMMUF_readable) ? DMA_PTE_READ : 0) | ((flags & IOMMUF_writable) ? DMA_PTE_WRITE : 0)); + if ( IOMMUF_order(flags) ) + dma_set_pte_superpage(new); =20 /* Set the SNP on leaf page table if Snoop Control available */ if ( iommu_snoop ) @@ -2012,8 +2040,14 @@ static int __must_check intel_iommu_map_ =20 *flush_flags |=3D IOMMU_FLUSHF_added; if ( dma_pte_present(old) ) + { *flush_flags |=3D IOMMU_FLUSHF_modified; =20 + if ( IOMMUF_order(flags) && !dma_pte_superpage(old) ) + queue_free_pt(d, maddr_to_mfn(dma_pte_addr(old)), + IOMMUF_order(flags) / LEVEL_STRIDE); + } + return rc; } =20 @@ -2370,6 +2404,7 @@ static int __init vtd_setup(void) { struct acpi_drhd_unit *drhd; struct vtd_iommu *iommu; + unsigned int large_sizes =3D PAGE_SIZE_2M | PAGE_SIZE_1G; int ret; bool reg_inval_supported =3D true; =20 @@ -2412,6 +2447,11 @@ static int __init vtd_setup(void) cap_sps_2mb(iommu->cap) ? ", 2MB" : "", cap_sps_1gb(iommu->cap) ? ", 1GB" : ""); =20 + if ( !cap_sps_2mb(iommu->cap) ) + large_sizes &=3D ~PAGE_SIZE_2M; + if ( !cap_sps_1gb(iommu->cap) ) + large_sizes &=3D ~PAGE_SIZE_1G; + #ifndef iommu_snoop if ( iommu_snoop && !ecap_snp_ctl(iommu->ecap) ) iommu_snoop =3D false; @@ -2483,6 +2523,9 @@ static int __init vtd_setup(void) if ( ret ) goto error; =20 + ASSERT(iommu_ops.page_sizes =3D=3D PAGE_SIZE_4K); + iommu_ops.page_sizes |=3D large_sizes; + register_keyhandler('V', vtd_dump_iommu_info, "dump iommu info", 1); =20 return 0; @@ -2797,7 +2840,7 @@ static void vtd_dump_page_table_level(pa continue; =20 address =3D gpa + offset_level_address(i, level); - if ( next_level >=3D 1 )=20 + if ( next_level && !dma_pte_superpage(*pte) ) vtd_dump_page_table_level(dma_pte_addr(*pte), next_level, address, indent + 1); else From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=fail (BodyHash is different from the expected one); dmarc=pass(p=quarantine dis=none) header.from=suse.com Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832450202853.5334708278762; Mon, 10 Jan 2022 08:34:10 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255472.437779 (Exim 4.92) (envelope-from ) id 1n6xc4-0003oK-SH; Mon, 10 Jan 2022 16:33:40 +0000 Received: by outflank-mailman (output) from mailman id 255472.437779; Mon, 10 Jan 2022 16:33:40 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xc4-0003oD-PL; Mon, 10 Jan 2022 16:33:40 +0000 Received: by outflank-mailman (input) for mailman id 255472; Mon, 10 Jan 2022 16:33: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 1n6xc3-0003o2-1b for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:33:39 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 0fbf5461-7233-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:33:37 +0100 (CET) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-ve1eur02lp2054.outbound.protection.outlook.com [104.47.6.54]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-40-IWMMMqD9PSWei6ryMI8xMA-1; Mon, 10 Jan 2022 17:33:36 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB5165.eurprd04.prod.outlook.com (2603:10a6:803:54::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.11; Mon, 10 Jan 2022 16:33:35 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:33:35 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 0fbf5461-7233-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832417; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TMcCsqYvPaJph7KL+A038l2t3+7JxYhFMgkn6iz2Gsg=; b=i1uK67vx7TRt/xY0Ec9jxNzHH2ooXEABMmdrtwbK0ao62SctfyvrPbeHUU3GKvY8kUUsO5 5opKgbLUEq+CWKBTjREpxpta0mX1siHMLWXycgcy/nto7FK85yeoIKvtGpjuGEnEmyF2UF Mvl3mFVWPKk8gwjpdtnQecREfRPmjLo= X-MC-Unique: IWMMMqD9PSWei6ryMI8xMA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kHAItKU3tBpn4gqgL8M2uQGfqWW8sC1o5o90+NaBGj0sKrpmhNWqUodT8NoJhqpKf4lDhmqmS3OSkUSf9NvhBA2E4IlreaT/mIni150GM1pN5c3LK+1YsyxVeC8VlO5cZvNAeyxW78VJDWDuDiuULH8S76GqI1sCXmcAshI3WWad553gk7ho9lChRjO4BYA1LiyLrwee/ZyGYcLPzFgrGpeOovzsXfGKYkdqTVNMQ3fPaneCarZF38UppJf/lFA0t20xXYHrcyLPWPl8JTFAomosWbc1JrNV1/SuYIPHA09RURJCDhEvXp7WicaZSdBXe7tH82hIansp0PB3Q9sZRg== 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=/tpBpL55vIqk8+z9SUDwNGDspJB0Y68PF3yq89xNj5Q=; b=DWqW+nJSzVoUdTPFuyDsJCzNUZIcjL1PbS9vDX8sTXNaFersMC6k/msxceiY22zcBauqNUndfxRL6/FABaFArEfkkuAreNeGkVsXJOwKkm/O0+EaoIwWMuIe95O0zmQV9zubicnzWi84AHJL5em8Fn6NJtJ8sAxD8oGZ2w/RpF6AXRj2lHWqHFqKp4yXMhe2pifocn9eRUB+VfmCdYG8k1GaZ3kfXeCjdXq3UHAcKDihaFVjVxyh8uTYPK4+Gr6khNWjyLNAbLaonRyI78ztAKidHHryIPsPx1jm0CcwLYM6O/eqpe4Tpgi8jRf5W8UQiVcZduwIFktpqsjD+bGIbg== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <3576e89e-4297-aad9-9523-58d4a48f6ab8@suse.com> Date: Mon, 10 Jan 2022 17:33:33 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 16/23] IOMMU: fold flush-all hook into "flush one" Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" CC: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Kevin Tian , Julien Grall , Stefano Stabellini , Volodymyr Babchuk , Bertrand Marquis , Rahul Singh References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS9PR06CA0094.eurprd06.prod.outlook.com (2603:10a6:20b:465::7) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3e7d1817-15c2-44cd-01b0-08d9d456f26a X-MS-TrafficTypeDiagnostic: VI1PR04MB5165:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2k8rwGpbBRRXiaoEFSAYf++zQgAILePKY5dfNIcr6uufaYXxRV0c1yh1sko9d9aNAVMN38l135xWPN70rNTyUpgphkTSjAKeXfZplmCCCMoknhuSjldmllmhVtkrAI2vtUvhZQIUX46+G8O26Ju36RxjTDKpw2eSqu6jsd9PJTnplYwn5CP2neHc6IIKY4ChbqUNl6ELmeaPB6HYn3wCAHbQrGuUbiY87LlWQaVuoweVnSXj0qy7H2KOW1Vc313U3L9Ocu6LVEb8XvSMYE6rQh3M2dsreEKe2iEmqsj+KvzxYhYdPyNjG/+VFhKYUFDvQMIvH9DBINdsSRH82jMvWJ5j3Wrpns5VkCwGAN3++LV2S2YUM421Zn/u7LI27KYX5DJqpMtIpun6LsP9WH7Vj+1FLJsl/0nd/4fks2a5cEo/w/cuTe9NLgmL04AsnoUWRpJzgVs10EoeAdyJpD4XDNU3yP762Pc6UcVucFByXvb2/II0pWUs0PlnBREkPY2zw062DS8bULoersLzENJVUB6oMjlJmY9jIORD94dJbkKdB80qSyDbGneO/jQvzoggnfmtFnSb1YNAyLmcKkTA+rsAHnMTNUY2qZCKJxnyj/PHu3berN3Wyiv2TBKgd8naeg1MeZCJgA8ajYA2L38CiBtzp9G44y6e5bDZQXitlyjfrEP+9ocuK2VT68EQMrq8WCjavdtD4yIhqBIPSuwsGPztH7JUBORt3CT0R5YUCBquKzh4gsrcAClBnAo06lcy X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(186003)(66946007)(2616005)(8936002)(54906003)(6916009)(66476007)(6512007)(4326008)(66556008)(31686004)(6486002)(86362001)(31696002)(36756003)(6506007)(508600001)(26005)(5660300002)(7416002)(316002)(38100700002)(2906002)(83380400001)(8676002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8LaOaKbMscJqRbRd8phauuY54qK50cp32jnNfIi9x2f7W+ilm5+94sOqW3tn?= =?us-ascii?Q?QISqeD3ZzfwRs1TT9CBnE/G4RBhQchBNgVSXPlpjHGsKISSviijK//pEiBmE?= =?us-ascii?Q?l1yqxwWTPa/G+b9pRRU2znSVasm54HAx4dom/FueSF7E8I22wzz7Cicbg7X5?= =?us-ascii?Q?dkR1KJ/T5Tfa57bM2Tr+a1nynkDZwkewW1GA/bJxgJ2V8nIyraEe8aSwFIDR?= =?us-ascii?Q?pu0XJnyJhsfqRX5TbreaJJ7xXDjytmajbcrW8BZMfFWr7c1uyHAIdVBc59Y5?= =?us-ascii?Q?JWiBb+0vUrIWxeRXJNRgJ4vyiDViMdm678bZLs/wBQyE/PJbFKo4EYcoamqg?= =?us-ascii?Q?IkPj4cR6HkjGA/M6I6kyF/37SdsiotoO4ZSuruDYSbhpKTIthtl5m6myoqqu?= =?us-ascii?Q?/5NNEhZizTCC1+aZcsVI+vYzWkwkKPY/1KcpbwQqWr6vbDXVFRduhrWBT5p3?= =?us-ascii?Q?WQOsBNaWJeJ+LyHVzlefuA42kwNM10LwN/oLd/HiH7uvU850K3GW0XqFF011?= =?us-ascii?Q?RelyZ9l64+aPh7mnwuRqkSpDlHGdjId0R21Ex1fDT3TWOFxUJxgkXkioTJ+N?= =?us-ascii?Q?Tkast3uU3EffVP0e7YpKt2MNfX6mJMsSze6vlqTsaX057drlH+wUT+K1T5dx?= =?us-ascii?Q?u9HhqyMbBb9Kgc1TzN/KcfLGH+aDR7DQy0tdWZAqdz6xw0ExX64ObTIMzXZp?= =?us-ascii?Q?rwIjpRCuDrpXLTXaeVhbq+FovwSBASNHTBV4TJELtmLh1FZBjvFZYgSYKdAS?= =?us-ascii?Q?0YkgMjDKOsdZedU8ScT8HsXr+S1XPocIsi/LGDymZrrvgCyy1uroJcilREAJ?= =?us-ascii?Q?TXP3OejI4BGd+FMYEeB6mrmXjG6SRWI2fo/bkK2owr8NmNPxzEDOtEO4urBy?= =?us-ascii?Q?jV+0jj5SEDXIxe5vHs1X4YISYY3FqPbGKr6P/DADgDFMS5vGnwWoBRVDzOvV?= =?us-ascii?Q?Qq581VFd5gMzrQWX/RSl++FP0PBWvGpS/RbTn9U8CTH0VrNbubqUVTyVWZQw?= =?us-ascii?Q?U7rBc8fu4jUxIQk6sq0RlY2KfB5C93sUz8uiZnitc3iNxbjEgm4gsLOzc7om?= =?us-ascii?Q?EbO5Eq5JjcDsLSP+n1kz80UAy0HXwCWPzKzSsOQYXPvcjF4G+AjkkaaHHXXw?= =?us-ascii?Q?HK2KlybDJrkuRz+9sP6PA0KLmPwLwGMgNAIwIH/QSeBS6CKWKgrbis29sOKH?= =?us-ascii?Q?aKv2eKCm2NXYFE+JZR4Pr7wimTnCuYc8N2BH5+4++27Jlcm8y9eAvfA9Xf3u?= =?us-ascii?Q?WZ5sWr4Jk0zaDF4YTawevy9FV7qGLS9XLjC8Tkj4eRrG/harfdu7M4oEvkDP?= =?us-ascii?Q?BwQdPXpC/ApeJppIOfJtd/kQtAocoUVJgxkZt18pGej76CmJz7d+BYpWIeuW?= =?us-ascii?Q?cxFoaPRCPMfFxcXwySc50CHrSFazAOODQPBmx/4gMVS11RtpmSZSXNOPRuOj?= =?us-ascii?Q?D6wiEe2um4GEwsJdVmiCl6z3cldKGkEs0qwHlkEPArRw3S3CQcXs9vvK/6P4?= =?us-ascii?Q?/N/03/8Vcz4YZGJaEth7OLF158Ply5jwGTGYlRJUTWzCyjryfz9jjbIfnzh/?= =?us-ascii?Q?Ol6xceORlcjK/O6E9graNh1+vVeIE28c6w4BVZwTggCq7iouozaZ/cbv9qpU?= =?us-ascii?Q?YbbjSnw5/F55Ti6Ful4KDf4=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3e7d1817-15c2-44cd-01b0-08d9d456f26a X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:33:35.0064 (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: Af7th0oCJsafAWZR1CRqJlpWkPL4fvQ+9M50SZ31WM0hBjlEgJiTg+5PgJoLDQT2gNmoAO80OYx8xvyf6U2gRQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5165 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832453424100001 Content-Type: text/plain; charset="utf-8" Having a separate flush-all hook has always been puzzling me some. We will want to be able to force a full flush via accumulated flush flags from the map/unmap functions. Introduce a respective new flag and fold all flush handling to use the single remaining hook. Note that because of the respective comments in SMMU and IPMMU-VMSA code, I've folded the two prior hook functions into one. For SMMU-v3, which lacks a comment towards incapable hardware, I've left both functions in place on the assumption that selective and full flushes will eventually want separating. Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monn=C3=A9 [IPMMU-VMSA and SMMU-V2] Reviewed-by: Oleksandr Tyshchenko [SMMUv3] Reviewed-by: Rahul Singh [Arm] Acked-by: Julien Grall Reviewed-by: Kevin Tian --- TBD: What we really are going to need is for the map/unmap functions to specify that a wider region needs flushing than just the one covered by the present set of (un)maps. This may still be less than a full flush, but at least as a first step it seemed better to me to keep things simple and go the flush-all route. --- v3: Re-base over changes earlier in the series. v2: New. --- a/xen/drivers/passthrough/amd/iommu.h +++ b/xen/drivers/passthrough/amd/iommu.h @@ -255,7 +255,6 @@ int amd_iommu_get_reserved_device_memory int __must_check amd_iommu_flush_iotlb_pages(struct domain *d, dfn_t dfn, unsigned long page_count, unsigned int flush_flags); -int __must_check amd_iommu_flush_iotlb_all(struct domain *d); void amd_iommu_print_entries(const struct amd_iommu *iommu, unsigned int d= ev_id, dfn_t dfn); =20 --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -478,15 +478,18 @@ int amd_iommu_flush_iotlb_pages(struct d { unsigned long dfn_l =3D dfn_x(dfn); =20 - ASSERT(page_count && !dfn_eq(dfn, INVALID_DFN)); - ASSERT(flush_flags); + if ( !(flush_flags & IOMMU_FLUSHF_all) ) + { + ASSERT(page_count && !dfn_eq(dfn, INVALID_DFN)); + ASSERT(flush_flags); + } =20 /* Unless a PTE was modified, no flush is required */ if ( !(flush_flags & IOMMU_FLUSHF_modified) ) return 0; =20 - /* If the range wraps then just flush everything */ - if ( dfn_l + page_count < dfn_l ) + /* If so requested or if the range wraps then just flush everything. */ + if ( (flush_flags & IOMMU_FLUSHF_all) || dfn_l + page_count < dfn_l ) { amd_iommu_flush_all_pages(d); return 0; @@ -511,13 +514,6 @@ int amd_iommu_flush_iotlb_pages(struct d =20 return 0; } - -int amd_iommu_flush_iotlb_all(struct domain *d) -{ - amd_iommu_flush_all_pages(d); - - return 0; -} =20 int amd_iommu_reserve_domain_unity_map(struct domain *d, const struct ivrs_unity_map *map, --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -642,7 +642,6 @@ static const struct iommu_ops __initcons .map_page =3D amd_iommu_map_page, .unmap_page =3D amd_iommu_unmap_page, .iotlb_flush =3D amd_iommu_flush_iotlb_pages, - .iotlb_flush_all =3D amd_iommu_flush_iotlb_all, .reassign_device =3D reassign_device, .get_device_group_id =3D amd_iommu_group_id, .enable_x2apic =3D iov_enable_xt, --- a/xen/drivers/passthrough/arm/ipmmu-vmsa.c +++ b/xen/drivers/passthrough/arm/ipmmu-vmsa.c @@ -930,13 +930,19 @@ out: } =20 /* Xen IOMMU ops */ -static int __must_check ipmmu_iotlb_flush_all(struct domain *d) +static int __must_check ipmmu_iotlb_flush(struct domain *d, dfn_t dfn, + unsigned long page_count, + unsigned int flush_flags) { struct ipmmu_vmsa_xen_domain *xen_domain =3D dom_iommu(d)->arch.priv; =20 + ASSERT(flush_flags); + if ( !xen_domain || !xen_domain->root_domain ) return 0; =20 + /* The hardware doesn't support selective TLB flush. */ + spin_lock(&xen_domain->lock); ipmmu_tlb_invalidate(xen_domain->root_domain); spin_unlock(&xen_domain->lock); @@ -944,16 +950,6 @@ static int __must_check ipmmu_iotlb_flus return 0; } =20 -static int __must_check ipmmu_iotlb_flush(struct domain *d, dfn_t dfn, - unsigned long page_count, - unsigned int flush_flags) -{ - ASSERT(flush_flags); - - /* The hardware doesn't support selective TLB flush. */ - return ipmmu_iotlb_flush_all(d); -} - static struct ipmmu_vmsa_domain *ipmmu_get_cache_domain(struct domain *d, struct device *dev) { @@ -1303,7 +1299,6 @@ static const struct iommu_ops ipmmu_iomm .hwdom_init =3D ipmmu_iommu_hwdom_init, .teardown =3D ipmmu_iommu_domain_teardown, .iotlb_flush =3D ipmmu_iotlb_flush, - .iotlb_flush_all =3D ipmmu_iotlb_flush_all, .assign_device =3D ipmmu_assign_device, .reassign_device =3D ipmmu_reassign_device, .map_page =3D arm_iommu_map_page, --- a/xen/drivers/passthrough/arm/smmu.c +++ b/xen/drivers/passthrough/arm/smmu.c @@ -2649,11 +2649,17 @@ static int force_stage =3D 2; */ static u32 platform_features =3D ARM_SMMU_FEAT_COHERENT_WALK; =20 -static int __must_check arm_smmu_iotlb_flush_all(struct domain *d) +static int __must_check arm_smmu_iotlb_flush(struct domain *d, dfn_t dfn, + unsigned long page_count, + unsigned int flush_flags) { struct arm_smmu_xen_domain *smmu_domain =3D dom_iommu(d)->arch.priv; struct iommu_domain *cfg; =20 + ASSERT(flush_flags); + + /* ARM SMMU v1 doesn't have flush by VMA and VMID */ + spin_lock(&smmu_domain->lock); list_for_each_entry(cfg, &smmu_domain->contexts, list) { /* @@ -2670,16 +2676,6 @@ static int __must_check arm_smmu_iotlb_f return 0; } =20 -static int __must_check arm_smmu_iotlb_flush(struct domain *d, dfn_t dfn, - unsigned long page_count, - unsigned int flush_flags) -{ - ASSERT(flush_flags); - - /* ARM SMMU v1 doesn't have flush by VMA and VMID */ - return arm_smmu_iotlb_flush_all(d); -} - static struct iommu_domain *arm_smmu_get_domain(struct domain *d, struct device *dev) { @@ -2879,7 +2875,6 @@ static const struct iommu_ops arm_smmu_i .add_device =3D arm_smmu_dt_add_device_generic, .teardown =3D arm_smmu_iommu_domain_teardown, .iotlb_flush =3D arm_smmu_iotlb_flush, - .iotlb_flush_all =3D arm_smmu_iotlb_flush_all, .assign_device =3D arm_smmu_assign_dev, .reassign_device =3D arm_smmu_reassign_dev, .map_page =3D arm_iommu_map_page, --- a/xen/drivers/passthrough/arm/smmu-v3.c +++ b/xen/drivers/passthrough/arm/smmu-v3.c @@ -3431,7 +3431,6 @@ static const struct iommu_ops arm_smmu_i .hwdom_init =3D arm_smmu_iommu_hwdom_init, .teardown =3D arm_smmu_iommu_xen_domain_teardown, .iotlb_flush =3D arm_smmu_iotlb_flush, - .iotlb_flush_all =3D arm_smmu_iotlb_flush_all, .assign_device =3D arm_smmu_assign_dev, .reassign_device =3D arm_smmu_reassign_dev, .map_page =3D arm_iommu_map_page, --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -455,15 +455,12 @@ int iommu_iotlb_flush_all(struct domain const struct domain_iommu *hd =3D dom_iommu(d); int rc; =20 - if ( !is_iommu_enabled(d) || !hd->platform_ops->iotlb_flush_all || + if ( !is_iommu_enabled(d) || !hd->platform_ops->iotlb_flush || !flush_flags ) return 0; =20 - /* - * The operation does a full flush so we don't need to pass the - * flush_flags in. - */ - rc =3D iommu_call(hd->platform_ops, iotlb_flush_all, d); + rc =3D iommu_call(hd->platform_ops, iotlb_flush, d, INVALID_DFN, 0, + flush_flags | IOMMU_FLUSHF_all); if ( unlikely(rc) ) { if ( !d->is_shutting_down && printk_ratelimit() ) --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -814,18 +814,21 @@ static int __must_check iommu_flush_iotl unsigned long page_count, unsigned int flush_flags) { - ASSERT(page_count && !dfn_eq(dfn, INVALID_DFN)); - ASSERT(flush_flags); + if ( flush_flags & IOMMU_FLUSHF_all ) + { + dfn =3D INVALID_DFN; + page_count =3D 0; + } + else + { + ASSERT(page_count && !dfn_eq(dfn, INVALID_DFN)); + ASSERT(flush_flags); + } =20 return iommu_flush_iotlb(d, dfn, flush_flags & IOMMU_FLUSHF_modified, page_count); } =20 -static int __must_check iommu_flush_iotlb_all(struct domain *d) -{ - return iommu_flush_iotlb(d, INVALID_DFN, 0, 0); -} - static void queue_free_pt(struct domain *d, mfn_t mfn, unsigned int level) { if ( level > 1 ) @@ -2928,7 +2931,7 @@ static int __init intel_iommu_quarantine spin_unlock(&hd->arch.mapping_lock); =20 if ( !rc ) - rc =3D iommu_flush_iotlb_all(d); + rc =3D iommu_flush_iotlb(d, INVALID_DFN, 0, 0); =20 /* Pages may be leaked in failure case */ return rc; @@ -2961,7 +2964,6 @@ static struct iommu_ops __initdata vtd_o .resume =3D vtd_resume, .crash_shutdown =3D vtd_crash_shutdown, .iotlb_flush =3D iommu_flush_iotlb_pages, - .iotlb_flush_all =3D iommu_flush_iotlb_all, .get_reserved_device_memory =3D intel_iommu_get_reserved_device_memory, .dump_page_tables =3D vtd_dump_page_tables, }; --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -147,9 +147,11 @@ enum { _IOMMU_FLUSHF_added, _IOMMU_FLUSHF_modified, + _IOMMU_FLUSHF_all, }; #define IOMMU_FLUSHF_added (1u << _IOMMU_FLUSHF_added) #define IOMMU_FLUSHF_modified (1u << _IOMMU_FLUSHF_modified) +#define IOMMU_FLUSHF_all (1u << _IOMMU_FLUSHF_all) =20 int __must_check iommu_map(struct domain *d, dfn_t dfn, mfn_t mfn, unsigned long page_count, unsigned int flags, @@ -282,7 +284,6 @@ struct iommu_ops { int __must_check (*iotlb_flush)(struct domain *d, dfn_t dfn, unsigned long page_count, unsigned int flush_flags); - int __must_check (*iotlb_flush_all)(struct domain *d); int (*get_reserved_device_memory)(iommu_grdm_t *, void *); void (*dump_page_tables)(struct domain *d); =20 From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832547; cv=pass; d=zohomail.com; s=zohoarc; b=c5uV+xZu1rfnoPWag2+XCU9sJMNx4b3Jz2MBskNKQ3xMai25xVLMLE2YcQggba5GqFx0yfADaytlKhm7pB+1iJU0wG/whiQTeIsfEfgluXPWayMIfnh5SRGC3r5+GeW0z3MU62Ifcl2ArS5F7xh/zQKxufPNmV9mjHpuI7neWwU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832547; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=YBCzwC2eZDK7d/zI6qt9LH0Bqw+U19RhaUIYaoWX8qk=; b=P63DZbpX5P8WCRM0xjBy7oYJxbHAb/7AecN3hBLYbsA9FLeQ/VZkEFVIwfj5xVaCqItHd/nZwRmCNMiW8B4HL9v4qaPLr59XgTOF6XVc6kwdAxw4MnzzRoEqhEo5SjR2ZUVXDYz7KAs+AtOYv9yhjGRDRCFSSqcU1j7PW8Vhj50= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832547360304.0476727667917; Mon, 10 Jan 2022 08:35:47 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255476.437791 (Exim 4.92) (envelope-from ) id 1n6xdQ-0004PN-7Z; Mon, 10 Jan 2022 16:35:04 +0000 Received: by outflank-mailman (output) from mailman id 255476.437791; Mon, 10 Jan 2022 16:35:04 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xdQ-0004PG-47; Mon, 10 Jan 2022 16:35:04 +0000 Received: by outflank-mailman (input) for mailman id 255476; Mon, 10 Jan 2022 16:35:02 +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 1n6xdO-0004P6-Qo for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:35:02 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 41c4b10f-7233-11ec-81c1-a30af7de8005; Mon, 10 Jan 2022 17:35:01 +0100 (CET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2177.outbound.protection.outlook.com [104.47.17.177]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-28-G_RGMA0_PiKPtrtePztdFg-1; Mon, 10 Jan 2022 17:35:00 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VE1PR04MB6477.eurprd04.prod.outlook.com (2603:10a6:803:11e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.9; Mon, 10 Jan 2022 16:34:58 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:34:52 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 41c4b10f-7233-11ec-81c1-a30af7de8005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832501; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YBCzwC2eZDK7d/zI6qt9LH0Bqw+U19RhaUIYaoWX8qk=; b=jxJFinby71aoj1f5pdHDtRC4Dre8WNwFno1pJ8BNA0VqOfLd/xoPAck6HI7FISltZmHJtD wZe17kunZtbYe6HwC0ozF6Xcxv5mPunQKD7eCW8Eu5U/b/Fba57oFFdKpMY6xLwkCCLlXV VJJDKtPp0NiGVzQmC3GdRfv3gNyJy/E= X-MC-Unique: G_RGMA0_PiKPtrtePztdFg-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=i8ycSrsWKX3BlW8E+kD13GxI0mjfQM6h1NHwk8v3U66/CfGUn9+jWKdpBaQRz2gYvzDIw0xc3jSaIVXkRAoFMBVN/qtA/AFbHvo3ufri9AXqlvOMFIZVTa9qf2zXqkPWwW7viDhi4lcdc+YG9zUZy5TItXAE1rlxwJ0aXmgm3P4t3c3Y0y/UcucCE6TLlzum1jMkLG+oCuxbUyZtQRm+He7izqbksfDY7foXsIkDI0LNnNW1bnUbheIqm+/zhUXBmHKCmwntM3SZ2r7UjGONHXq1K0wNvl6Z5SIikU7qNCFID5KuJjMEAWwdLxSXml3eDH5N/cRGwFmskKsXk5XYTA== 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=YBCzwC2eZDK7d/zI6qt9LH0Bqw+U19RhaUIYaoWX8qk=; b=BMaLjOsEYu0/lCGPZaOQLGCGQTsCW22RuONWK8S9OqsNBcqQuMkM4HP+XOQimN3/y66kILqCgY5yqdIgBGGQMvXPmNqTQRU6qWw/089g0+hw6Ds6baanOHk1Ag4q0DnjAljJahL8zriCQh8hDSSHrbS0keKnmAlzGnINmEj9xxqPPqQnK24JUWzKIS68N6EKR8SzV7qSjDax7FsCle5DLdROCcoVPCbY0Rsx53AvHmWd+ChQ5Dz1u9Jj7nz0QuOn6QoDvxzhnLf5QJauXsLq5lC6mCeTiawUBZYg59iZRF4sFrs4eUHYf/TbgjPkZSjmuwgNKYlO6kYkXVzCq84Twg== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 10 Jan 2022 17:34:50 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 17/23] IOMMU/x86: prefill newly allocate page tables Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Kevin Tian References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR08CA0024.eurprd08.prod.outlook.com (2603:10a6:20b:b2::36) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9259f210-4d08-462a-435a-08d9d4572057 X-MS-TrafficTypeDiagnostic: VE1PR04MB6477:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1265; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: TVt8a1zlweRMZhjj0VmNsC8Ua5aRXA8iQbmLOtyQSDVY80u83VcaUiVnGmWYFxhlaLzFocKTGNEv/QWnIwGm6gKWRj8gT1QF4edKYKhPyT4wHGX+vGXbqZ8KP1BjZIYCgrYZMD8Hk/yisnnHcTdyPpFZ/yaqqYEnKlCJD0+vtwiq3YaClcaNrIe8dCpFjaK5x93gch/pgixJgYmq9JQNkEq+z5Nj/hv0pvZ2WVPCAJvjP7R4KUgi7vQ85/KAxcvDbK2ZQqv2ci02WF8iflHYcpPLR0TEpj4SINfC37yBbUlZGTUTN5Bn6EPlAxQYGEE/4FzMMkE6Kb5ma+OWMgL+SCCd1pF50m+a3+fm3WDWxmlXs9SjI0iQNBtQkQRsA4kRp2vS1gH+HCSCjB8sYhLml7ohfbkyG8eu+jAbb6G/+uJrEY9ziYRv3ToS5LOtwXwijyleryK27VoNEdKK75xHXCoM8N1vcmDvJAum11wrsRl5xTz7pv9j7zDFdodrJtBr+4+Iyat8saMnwXvXzRKpvzSkwlOOE/Ma1S6PC8P5GlW3dKJR4AXUbrvpOFRlKEkLn14mZaKuELIDFX+d9SmNPdLhceKmN9o9C7N/TFqwNZkfXyXXFEe9JoMGY1QgLoogmqyWVwcOdVvTNFwQLJhS1VgzFJiD4MpaDY31JryJQRSj35ofFgMTk1OFN1oF5JNcyOecd5eIiRGwhv4Y/gZZi0F92I79fPqKb19R9NBcrieSrkF5S1T3nzGY7TBSeUHo X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(8936002)(6916009)(86362001)(36756003)(8676002)(508600001)(6486002)(31686004)(186003)(26005)(2616005)(6512007)(66556008)(6506007)(66476007)(2906002)(66946007)(4326008)(31696002)(83380400001)(38100700002)(54906003)(5660300002)(316002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OFkrcUJ1YUZTeE1UVGwrdXd5Yk1pY0NPWm9KdEJtWHZpVXRtQmZiazVqbzVG?= =?utf-8?B?VmFCcFhJaE5jK1JiTG5sQmNxOFFZWkJKMGlBbWZmMDRIRkpTOTlWMVJxcnQr?= =?utf-8?B?ZUdWRlpoU2JTVExhQXNHWHFSSUVTWDZzek0wa1NRT3hJRjVBOWZVU1F1OEZX?= =?utf-8?B?elMzSnBlb3BLY2lrRG5nd013WWFSZGlIZWZIaFk3WGkzeWdOcE53ZC9CY3F1?= =?utf-8?B?bmtlTDQyNnN0V05xbi9QMDJFWlBNY1NoV0ZTeWQxUUNPeHhKcUg3Mkt3S3Zp?= =?utf-8?B?MlNzN0lVczYwRG8vcUZ0VFdaY2ROK0twMmVhTFlOK3RmUFhYMXg1MWhxTVYy?= =?utf-8?B?bWVReVBoUXYrSEYvN2tvWnVlZVVuWXBzMlFzT3VwQm9qWnFQNkdyZmdUeU13?= =?utf-8?B?UG90SVJKUjhqa05qTDNhTmVDbiszRzRoZytYUVRlQlptZHNJcW1OdndNV1N4?= =?utf-8?B?VnJvU2wxbzlRdHpUbFJVOVk2RVJlVmNwTmI1cWpNYkNCZGRQaHl3TU9aS2pi?= =?utf-8?B?WDk2MUdpbSthZlFRK1RmZEJRQ2NWSG5WWFRCdXEzYTRBSXBzUzcwN2FWaC9P?= =?utf-8?B?QzljczYxZjlZTTZXUUF2Ym5qcG5kVHJHQ2ttV0FHaC9uVWIrdmZNaHJyaHNi?= =?utf-8?B?TFd2ZXpFWEJqeVJMMTBGenJlQ0x0Vkd3MEFmZWpUQnBFNHkrVTVBV1phVlFC?= =?utf-8?B?dGZ2M0VMY3pMZlMyMmErb0V3M0VITkM3N1NpY25IbXBKemwvRmRMRGhTZGl0?= =?utf-8?B?K2R4R0ZQN3JRWktsY2tFVElPN0d1MmRaMUhvUWhKUXNWdFluL0FGdFBtemxC?= =?utf-8?B?UGVSZnA3UU1wS25CeU9xandmVVNudnBrQWJjTnhRWkVteGZoNzE4d3RRNTl6?= =?utf-8?B?VGE3L2p0L0NiWHN4aVNJU0FvR01mc2Z0S3l4MUxETGpIeW8zZDJyL0pKYndY?= =?utf-8?B?M2RjRUxPVWlqVnlQenR4Vjh2eU9LaDlDb2dyVnhBTURLVEdjTFVWQVRrQzRP?= =?utf-8?B?WUtoVTNnTHZYcHUwSjVIeUdKZ0FPZHVkNmorVlZMamVUeDUyQmMvTmhnQXk0?= =?utf-8?B?ZVYxejNvbjVGQWJXK0JDUzFlMVZoUTVYOFBIUzFWR20vdnl0ZVd2bFFFUXpM?= =?utf-8?B?KzdOdWh2MDhLak1SQVN4dXdPdU1BWGs5eitFdnNpc2V1T2hrR1RDMGh0MzVs?= =?utf-8?B?VE1QOUMxd1B4MHRJVXhpQ28xclVXaDc1ODIyRTlBdDdlaGRLUzMwM3ptaFJn?= =?utf-8?B?NWZQak9nb295QkhnalFwOHVOY09kMm41VkdlMDZRYlFSbTdFSVl2dWJUYXYx?= =?utf-8?B?bFppVUJUTlh3eU5hOGRRYzY2cnlrbkZweHlPMGlCTEJ5aXpHNnZqSWc4TVhO?= =?utf-8?B?b2pPSXVsWWdkMllGbXRNREtCbWkrNXAyM1BKOE5BV3NPaTZ5dXZxL0RPMS9h?= =?utf-8?B?QUs3d0ZMSnJheEdCNlBCUE8vNE5uQ3phTTd2SEg4bkQ1NzljSmVkQzUvcVdP?= =?utf-8?B?VmRpcWlHSkpnUWpKbU5oU21CM1BUaU00QmZGOXRCTXdCdDFkV1FVZ0NyNzlk?= =?utf-8?B?ajF2ZnZrTDdYVU9BSkZmd3NhUTJ0UE1KZTBFTDk5WXRNMWp1aWF2RjQ4dE1N?= =?utf-8?B?MjFDTTY5WWcyUWZrVEZJbzhvcTdvMW44K1BjN2orbWdTeVNwcStIdXpHaGk4?= =?utf-8?B?aHpHOXFZaHY5d3RCU1ZaNVNTMHNJUHA4NTdQL2xqdEpiSGNudS9qVXY5UWh3?= =?utf-8?B?b05zWVZJa1Rna2JySmNSUUVxNE0zWDRvb1Ixek1sM3owdTY3OE10eERYUVp4?= =?utf-8?B?SXBWTU42bmJEYzZYbDhYYzNVVUJVZDQxbmptQXBNZk1mbndKcTliWVZxdkli?= =?utf-8?B?d1Y1dWdIN1N1QmtCTWVVTnJSTXRSTk9TZjYxVzE1WUdCRk55OG92Sk5LS283?= =?utf-8?B?U0ttLzFPR2V2NUVwZWpTa2JFVXVweWVuWHdzQnZPcDJHcjlMRnJJemQxZFZv?= =?utf-8?B?VGtOOTJsZTB0SUt0Z1U4OStxZThJRHdZQ0phUFgyQklKYWVQTkFUQVErUzNV?= =?utf-8?B?dVVzY2pxNy9FcGw4SUt2KzB1QW5Qb3JzRWVJNEIwVHF3YkN6R0NaUVJmSEw3?= =?utf-8?B?enFXMGgyeUxEa3VDdW9qMStKK1lmcHJZVXdueEt1NTErS3pmT0plYmM0aWEy?= =?utf-8?Q?YNAqWicFtGF+sJXE/yQqt8A=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9259f210-4d08-462a-435a-08d9d4572057 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:34:52.0298 (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: 3Z6I0VuEagU+MDx25fxEXc5NZvGFTwN0YLqCzdzNmP6HMsaDOv/M3Qoa04vmDrP0iqldtU1quPoysuL1EpsWJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6477 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832548487100003 Content-Type: text/plain; charset="utf-8" Page tables are used for two purposes after allocation: They either start out all empty, or they get filled to replace a superpage. Subsequently, to replace all empty or fully contiguous page tables, contiguous sub-regions will be recorded within individual page tables. Install the initial set of markers immediately after allocation. Make sure to retain these markers when further populating a page table in preparation for it to replace a superpage. The markers are simply 4-bit fields holding the order value of contiguous entries. To demonstrate this, if a page table had just 16 entries, this would be the initial (fully contiguous) set of markers: index 0 1 2 3 4 5 6 7 8 9 A B C D E F marker 4 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 "Contiguous" here means not only present entries with successively increasing MFNs, each one suitably aligned for its slot, but also a respective number of all non-present entries. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian , with a nit: --- An alternative to the ASSERT()s added to set_iommu_ptes_present() would be to make the function less general-purpose; it's used in a single place only after all (i.e. it might as well be folded into its only caller). While in VT-d's comment ahead of struct dma_pte I'm adjusting the description of the high bits, I'd like to note that the description of some of the lower bits isn't correct either. Yet I don't think adjusting that belongs here. --- v3: Add comments. Re-base. v2: New. --- a/xen/drivers/passthrough/amd/iommu-defs.h +++ b/xen/drivers/passthrough/amd/iommu-defs.h @@ -445,11 +445,13 @@ union amd_iommu_x2apic_control { #define IOMMU_PAGE_TABLE_U32_PER_ENTRY (IOMMU_PAGE_TABLE_ENTRY_SIZE / 4) #define IOMMU_PAGE_TABLE_ALIGNMENT 4096 =20 +#define IOMMU_PTE_CONTIG_MASK 0x1e /* The ign0 field below. */ + union amd_iommu_pte { uint64_t raw; struct { bool pr:1; - unsigned int ign0:4; + unsigned int ign0:4; /* Covered by IOMMU_PTE_CONTIG_MASK. */ bool a:1; bool d:1; unsigned int ign1:2; --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -116,7 +116,19 @@ static void set_iommu_ptes_present(unsig =20 while ( nr_ptes-- ) { - set_iommu_pde_present(pde, next_mfn, 0, iw, ir); + ASSERT(!pde->next_level); + ASSERT(!pde->u); + + if ( pde > table ) + ASSERT(pde->ign0 =3D=3D find_first_set_bit(pde - table)); + else + ASSERT(pde->ign0 =3D=3D PAGE_SHIFT - 3); + + pde->iw =3D iw; + pde->ir =3D ir; + pde->fc =3D true; /* See set_iommu_pde_present(). */ + pde->mfn =3D next_mfn; + pde->pr =3D true; =20 ++pde; next_mfn +=3D page_sz; @@ -235,7 +247,7 @@ static int iommu_pde_from_dfn(struct dom mfn =3D next_table_mfn; =20 /* allocate lower level page table */ - table =3D iommu_alloc_pgtable(d); + table =3D iommu_alloc_pgtable(d, IOMMU_PTE_CONTIG_MASK); if ( table =3D=3D NULL ) { AMD_IOMMU_ERROR("cannot allocate I/O page table\n"); @@ -265,7 +277,7 @@ static int iommu_pde_from_dfn(struct dom =20 if ( next_table_mfn =3D=3D 0 ) { - table =3D iommu_alloc_pgtable(d); + table =3D iommu_alloc_pgtable(d, IOMMU_PTE_CONTIG_MASK); if ( table =3D=3D NULL ) { AMD_IOMMU_ERROR("cannot allocate I/O page table\n"); @@ -651,7 +663,7 @@ int __init amd_iommu_quarantine_init(str =20 spin_lock(&hd->arch.mapping_lock); =20 - hd->arch.amd.root_table =3D iommu_alloc_pgtable(d); + hd->arch.amd.root_table =3D iommu_alloc_pgtable(d, 0); if ( !hd->arch.amd.root_table ) goto out; =20 @@ -666,7 +678,7 @@ int __init amd_iommu_quarantine_init(str * page table pages, and the resulting allocations are always * zeroed. */ - pg =3D iommu_alloc_pgtable(d); + pg =3D iommu_alloc_pgtable(d, 0); if ( !pg ) break; =20 --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -242,7 +242,7 @@ int amd_iommu_alloc_root(struct domain * =20 if ( unlikely(!hd->arch.amd.root_table) ) { - hd->arch.amd.root_table =3D iommu_alloc_pgtable(d); + hd->arch.amd.root_table =3D iommu_alloc_pgtable(d, 0); if ( !hd->arch.amd.root_table ) return -ENOMEM; } --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -381,7 +381,7 @@ static uint64_t addr_to_dma_page_maddr(s goto out; =20 pte_maddr =3D level; - if ( !(pg =3D iommu_alloc_pgtable(domain)) ) + if ( !(pg =3D iommu_alloc_pgtable(domain, 0)) ) goto out; =20 hd->arch.vtd.pgd_maddr =3D page_to_maddr(pg); @@ -423,7 +423,7 @@ static uint64_t addr_to_dma_page_maddr(s } =20 pte_maddr =3D level - 1; - pg =3D iommu_alloc_pgtable(domain); + pg =3D iommu_alloc_pgtable(domain, DMA_PTE_CONTIG_MASK); if ( !pg ) break; =20 @@ -435,12 +435,13 @@ static uint64_t addr_to_dma_page_maddr(s struct dma_pte *split =3D map_vtd_domain_page(pte_maddr); unsigned long inc =3D 1UL << level_to_offset_bits(level - = 1); =20 - split[0].val =3D pte->val; + split[0].val |=3D pte->val & ~DMA_PTE_CONTIG_MASK; if ( inc =3D=3D PAGE_SIZE ) split[0].val &=3D ~DMA_PTE_SP; =20 for ( offset =3D 1; offset < PTE_NUM; ++offset ) - split[offset].val =3D split[offset - 1].val + inc; + split[offset].val |=3D + (split[offset - 1].val & ~DMA_PTE_CONTIG_MASK) + i= nc; =20 iommu_sync_cache(split, PAGE_SIZE); unmap_vtd_domain_page(split); @@ -2028,7 +2029,7 @@ static int __must_check intel_iommu_map_ if ( iommu_snoop ) dma_set_pte_snp(new); =20 - if ( old.val =3D=3D new.val ) + if ( !((old.val ^ new.val) & ~DMA_PTE_CONTIG_MASK) ) { spin_unlock(&hd->arch.mapping_lock); unmap_vtd_domain_page(page); @@ -2885,7 +2886,7 @@ static int __init intel_iommu_quarantine goto out; } =20 - pg =3D iommu_alloc_pgtable(d); + pg =3D iommu_alloc_pgtable(d, 0); =20 rc =3D -ENOMEM; if ( !pg ) @@ -2904,7 +2905,7 @@ static int __init intel_iommu_quarantine * page table pages, and the resulting allocations are always * zeroed. */ - pg =3D iommu_alloc_pgtable(d); + pg =3D iommu_alloc_pgtable(d, 0); =20 if ( !pg ) goto out; --- a/xen/drivers/passthrough/vtd/iommu.h +++ b/xen/drivers/passthrough/vtd/iommu.h @@ -250,7 +250,10 @@ struct context_entry { * 2-6: reserved * 7: super page * 8-11: available - * 12-63: Host physcial address + * 12-51: Host physcial address + * 52-61: available (52-55 used for DMA_PTE_CONTIG_MASK) + * 62: reserved + * 63: available */ struct dma_pte { u64 val; @@ -260,6 +263,7 @@ struct dma_pte { #define DMA_PTE_PROT (DMA_PTE_READ | DMA_PTE_WRITE) #define DMA_PTE_SP (1 << 7) #define DMA_PTE_SNP (1 << 11) +#define DMA_PTE_CONTIG_MASK (0xfull << PADDR_BITS) #define dma_clear_pte(p) do {(p).val =3D 0;} while(0) #define dma_set_pte_readable(p) do {(p).val |=3D DMA_PTE_READ;} while(0) #define dma_set_pte_writable(p) do {(p).val |=3D DMA_PTE_WRITE;} while(0) @@ -273,7 +277,7 @@ struct dma_pte { #define dma_pte_write(p) (dma_pte_prot(p) & DMA_PTE_WRITE) #define dma_pte_addr(p) ((p).val & PADDR_MASK & PAGE_MASK_4K) #define dma_set_pte_addr(p, addr) do {\ - (p).val |=3D ((addr) & PAGE_MASK_4K); } while (0) + (p).val |=3D ((addr) & PADDR_MASK & PAGE_MASK_4K); } while (0) #define dma_pte_present(p) (((p).val & DMA_PTE_PROT) !=3D 0) #define dma_pte_superpage(p) (((p).val & DMA_PTE_SP) !=3D 0) =20 --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -461,12 +461,12 @@ int iommu_free_pgtables(struct domain *d return 0; } =20 -struct page_info *iommu_alloc_pgtable(struct domain *d) +struct page_info *iommu_alloc_pgtable(struct domain *d, uint64_t contig_ma= sk) { struct domain_iommu *hd =3D dom_iommu(d); unsigned int memflags =3D 0; struct page_info *pg; - void *p; + uint64_t *p; =20 #ifdef CONFIG_NUMA if ( hd->node !=3D NUMA_NO_NODE ) @@ -478,7 +478,28 @@ struct page_info *iommu_alloc_pgtable(st return NULL; =20 p =3D __map_domain_page(pg); - clear_page(p); + + if ( contig_mask ) + { + unsigned int i, shift =3D find_first_set_bit(contig_mask); + + ASSERT(((PAGE_SHIFT - 3) & (contig_mask >> shift)) =3D=3D PAGE_SHI= FT - 3); + + p[0] =3D (PAGE_SHIFT - 3ull) << shift; + p[1] =3D 0; + p[2] =3D 1ull << shift; + p[3] =3D 0; + + for ( i =3D 4; i < PAGE_SIZE / 8; i +=3D 4 ) + { + p[i + 0] =3D (find_first_set_bit(i) + 0ull) << shift; + p[i + 1] =3D 0; + p[i + 2] =3D 1ull << shift; + p[i + 3] =3D 0; + } + } + else + clear_page(p); =20 if ( hd->platform_ops->sync_cache ) iommu_vcall(hd->platform_ops, sync_cache, p, PAGE_SIZE); --- a/xen/arch/x86/include/asm/iommu.h +++ b/xen/arch/x86/include/asm/iommu.h @@ -142,7 +142,8 @@ int pi_update_irte(const struct pi_desc }) =20 int __must_check iommu_free_pgtables(struct domain *d); -struct page_info *__must_check iommu_alloc_pgtable(struct domain *d); +struct page_info *__must_check iommu_alloc_pgtable(struct domain *d, + uint64_t contig_mask); void iommu_queue_free_pgtable(struct domain *d, struct page_info *pg); =20 #endif /* !__ARCH_X86_IOMMU_H__ */ From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832565; cv=pass; d=zohomail.com; s=zohoarc; b=VUS6LYnmFX09PrZ3pOdvAMSmVWTtRjkLVQUqGi+09BlPuX5hjKANF9Kvj8dKMC/HvTM9520qczh4xJTkzyHO2oViP/HVbl2fMeqD68Wy9Ox8jjwFLRh0/+nqRKw/OI/1fcfA5EoUyDffPqarvKfKsmZvRwYMiVLaA/6J1Vj6OHo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832565; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=R8DiCPGmZfdIitLCnmZ7S3mCQH5fBWGDgn8DzVJxrZM=; b=FLT8t9+OXPCGvqmkPtSdTGtyCPmWAEyB+HA5uxIUYo5NB6O+cvMDyfK4kfp3SunpYk8Q1ki5GCcAtCcbCwvSqCRYBEs+4CR6Ghh5oq1LlgaLDxNfrT0U1l/jIqMsCdpkulB8Kcy7cunb9L95FNlYMiZDBiiVdA7b0dljZ409KZU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832565775441.8488016582262; Mon, 10 Jan 2022 08:36:05 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255479.437802 (Exim 4.92) (envelope-from ) id 1n6xdw-0004z9-Kw; Mon, 10 Jan 2022 16:35:36 +0000 Received: by outflank-mailman (output) from mailman id 255479.437802; Mon, 10 Jan 2022 16:35:36 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xdw-0004z2-Ht; Mon, 10 Jan 2022 16:35:36 +0000 Received: by outflank-mailman (input) for mailman id 255479; Mon, 10 Jan 2022 16:35:35 +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 1n6xdv-0004yp-8c for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:35:35 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 553dfe1d-7233-11ec-81c1-a30af7de8005; Mon, 10 Jan 2022 17:35:34 +0100 (CET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2168.outbound.protection.outlook.com [104.47.17.168]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-16-3WZDW2p_PE6K3Ic3v7hpsQ-1; Mon, 10 Jan 2022 17:35:33 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VE1PR04MB6477.eurprd04.prod.outlook.com (2603:10a6:803:11e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.9; Mon, 10 Jan 2022 16:35:32 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:35:32 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 553dfe1d-7233-11ec-81c1-a30af7de8005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832534; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=R8DiCPGmZfdIitLCnmZ7S3mCQH5fBWGDgn8DzVJxrZM=; b=YpGjlxzZz+b6lbOVZlZ1QemRVaHbroYw/pGlCFdBLzNc9nYg7Q3Y8xR+r8lcfkcVuTnQNe 40Gtj6ykOtymaqi7i/clUfrBe1ElnPHx3wW/9TRaQ6laRJOcL6F7c1+ATenX92JMn+uurQ ltxD5nGp4beRC/13LOw5vzsXIeXkXRA= X-MC-Unique: 3WZDW2p_PE6K3Ic3v7hpsQ-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dtgH5oisWfDJDDNrzURF/R6FlGlO9Irl8OYbZLCORSNbf+tgYP5xeIzLWnq/e7A1s0UZDqmZxOefVsHslomfLylJA7IotN+kbpqohSwX5C5OVs9z34HJG3TSfUg0X7FIkL3zCEMBSMsh/wyXLUXC8yw0MZKYWQfTabVO0t5PtM95CehQwsoMi3/LB7NLIAR1EJUcfibirSvnJrJI5RohZ+exGTVsib45bMJCBJgwH45qbBsCgyOrAJx1fI34wjyY+pNA28SpdZvO+vcNVzDPtKiCJVyxm9zuV4bgQG216ZmxQq9wamK461a84MR7Pk33Px0Fp1gE8UUVSQCND4fRLw== 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=R8DiCPGmZfdIitLCnmZ7S3mCQH5fBWGDgn8DzVJxrZM=; b=FbGiYi6bm5eCAAzq783mMT+HVIEdn3Jprf+bUlD+lm9BPShzFtpSzWPVH+U0b8am/uQ9H7czFJjz/tLHPJqxH7rqAsZ9qBSauy3NCMrZ/bw+rKLgYp/uf7lgG9cSEKcUxwLC4mHfjXVM1flAQ/0kGm7q8itvlwbqKt85ZXvbeb9804XKwtnXrNJKegJL1aChfLIB6/OiuMbBx9Fwoa2e3+RxTuoTz4KCy6EMCYNA6T6RYIAQfvuipkL8mMSyhAg/AnvAG36FNE4cK5bnswx10P/uEuyNT1/ySCLnB8zBmkGxfvGc+E2S4uEkQQ+jG0AnhCZO+FVIRuUORRwym3RbTw== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <1f88ec2a-ebb6-2974-c451-4c2635d17d9b@suse.com> Date: Mon, 10 Jan 2022 17:35:30 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 18/23] x86: introduce helper for recording degree of contiguity in page tables Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR08CA0004.eurprd08.prod.outlook.com (2603:10a6:20b:b2::16) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2b11c059-47d8-45ba-f4b4-08d9d4573820 X-MS-TrafficTypeDiagnostic: VE1PR04MB6477:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VSLCCamdg3GR6l7xbHlFyFjoM1IcjPzZB7mWr/TKnuxPbBzwqZ2gGR5yPDme6w3/4yBgobBROgRulC4pwCIpKurlS0ao+xncV20oKr34LlasWidbYhSK40AZv//l8B6xBtSNOhKnE32DiQzRxRvGNcS9UxGtk4+fs7XJ02xi2WE3KN85vgzN6QRAHk+TqtW8k8M80UyxFAdWWkks84Rzy8dfkSBq+npeesRuWEQC/eH2kTI9ljIaUNRIM+A1s1Z09XG2kzrLFkYUrq0fwczapd7mi1DQRY8VOPXrsus8BGQ00J/2gzO0zrx+4WbVgimrXJ8KbDJWjFlPWzPPWs8fuOwGK7W+VpibGxB+1zjiGeQsUQ6lCRlCqJjk+wbdgVvwJX7l6hjrHe+6gLCMvwWHge57LuDgt+R+nTO9R5CA7Jmn4naF7HznrM9c9CVNzitia4Bvy/GtpK8bHYxcJ7AV/1/WsxC6tLXaEcjOnJHWx4shAJkeg3rQ2qhooxt+sWyZO/eSCmnD4I/47Xbmjl7ZdrhK5UNeKPG0c7kYjPsvcNUzIkNQgLnm4WMWdLZHGiWdDj2aAbxk7x5XTuYcEYOwHADC+HMx8O/oFEVvqXCJPwBpsfHI1vU83/L+7wv+KhnJ5draqG0mzA8ppFwUVq/mQsILSBL4oh4PBHnawN/CobBihnh3xDeu26DD0dJESoayAcNiryNRC96I3DUPn7x2baeDFJttbnRFcgZZNhTMADE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(8936002)(6916009)(86362001)(36756003)(8676002)(508600001)(6486002)(31686004)(186003)(26005)(2616005)(6512007)(66556008)(6506007)(66476007)(2906002)(66946007)(4326008)(31696002)(83380400001)(38100700002)(54906003)(5660300002)(316002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TjV3blVES3dKcDE5ZVY4MEorTmlxQjV4ZitBTzRqOUlUc1pLaEw5UVk2MU5i?= =?utf-8?B?cVFXcGhNdThVV1kyRjZBTlhWc0dua095U2MzaFhFaUVreTd2dEY0djVMaEdy?= =?utf-8?B?UkJ5OUE3b1pNWm9YdFBTRzREZnVjbTRoK2Q2OW5FS1MvcFdleWMyTWgvazZk?= =?utf-8?B?SGh3SlJqUWc1REtqZW95RlBkWE9DcU1EQjVvQUVZc0hUNXdUbWttYzZpa1VJ?= =?utf-8?B?VkZSNUVoRTVzT090VFYrZjZrVnQ1WGtQNEQ0WVA0UjRyaW5xbERPajIvZy9S?= =?utf-8?B?ZlI1N1JyWWplaVdWTkp2d05XOHJzR0hyUzY5Nk00b3Q0a3hIZG1HRktsZVkx?= =?utf-8?B?U2E2ekdPUlN0VW1JMFFvdEp1aTdjTzBmUzZwNThmWWV5VEhjeldjMmR2NmxX?= =?utf-8?B?azY0eGpzSDdVMjlCejFXek85VUFycFNYTXJobzUwWFI3eURGV3dGWmM1N1h4?= =?utf-8?B?UWpDelFsM29TbVBIdXlaMnZsRFcvd0dTeVkxNEdxTmFtUXdqa0JNRFJKVFRy?= =?utf-8?B?c2QrSDNFNUtMemczSjhnS1J6RlFzV2I2UWFmdXNRT3FuNnBNc3d2TWVzYXpx?= =?utf-8?B?YXZJMlkwOFZyV1dKeTRTemQwMkJJTHZOYnNUR2FYVkFPUTVJQXcySmhrK0lE?= =?utf-8?B?Vy9RMFJaZVl5TWowN2FIc09KemNFYVNHVVZFZmpCRlBhWmtxYTBOWVpoSEc1?= =?utf-8?B?SExKTXkzU09xZlZ5R2RoOFZ4Y01ZcnAwajBlOTVPZEtxSjJsSkVjeE1nbGZy?= =?utf-8?B?blRRZXJSY1lCMnVrd2cvclRoT0NOMEFDR0kzVDVhbnlVVmV0Yi9UQ0hkN2Iz?= =?utf-8?B?N1BxSzI5UUVMQlNZT0J4R3BlTUozb1ltY244TWRqa3p3bG84QVE3WHNQNFFC?= =?utf-8?B?OWdLOFZsbjhNSThrOWU3QU5YWGZLTmt0K3owbENsVGp0eUxmbjZ3bjZBMmow?= =?utf-8?B?QlJhTVBjU2JLTlBHN2U1Q2pMaVFlWWxtT0Z0eUt5RW9YOVNVcksxNjhEeGg2?= =?utf-8?B?QS9BQ3p0WElpSTZLRHAxMWN4ejY5a2puQ0tWYXI3RmhtbzQvSFMvZzlUTjJZ?= =?utf-8?B?QkhsaFlZaFhwSUlHSE1vOVE2VVpqZmxCL3dGVzg5QmxlSlNnMVYrK2ZTZlhL?= =?utf-8?B?TkZ3ZElHVjRYMWlQZXM2alJiMlZRMzVKelo1aGJvYXhXMmVjQUlWNGFpZy8x?= =?utf-8?B?RHdoT2c5aTREUkdxeTVURmRUVWJnWXFHTGlYcncwNVE4L2N4cVp3NmZLZ3Vw?= =?utf-8?B?OHlMR2NGNlQzYU1MUmNZRmJZS256RElFNkE3dFA4V1dINlQyaHExdFNkWW9p?= =?utf-8?B?ZTFDd1huY2xKWWdOVkgzZWxZdnRDNVpWNTdMSmN2Z1JtR0dKbFhWRVQ1TnBP?= =?utf-8?B?VjlNci8wZWtqRUdrUmN2M0Yrd1p4WElobUlZU3hBVUFTUjBVbExqMGZLNVFQ?= =?utf-8?B?QUd3VDRxcW1Fd1dLRHB0SU5XQlVnZ2hLcGFaaEUwaXM3UUQycDB4bTdMZy9K?= =?utf-8?B?elBUWlc0YmJuQklSL2phU1MyNThqNVRJbzU0UE96SitHaDVTb2ZOZHcxSDg4?= =?utf-8?B?azZrSGkrTkFFdHVxN0VwWm1xWDA2MzZJbldiNWlTSG9LWnR5dExaOWk1aTVi?= =?utf-8?B?aEFaUDBGWklCU2J6UStmQkh5VUZDQnBKSGUvZjlwR0ZQb3Q3VHNlVlo3NVF3?= =?utf-8?B?bVppbngwdFJnRC9xSG5DQ3BmeDh2bWVHdUhIVlROcWYzZXpwTmlZMGJEbWgz?= =?utf-8?B?a2JKWWRJQ0FYMFJGTUNjWjdrTm9GWnRsd3FlVWlrbFdIZ2lrQktWMFE2QXEv?= =?utf-8?B?QTdOS2ZxNzZycHp5Yzl5U2l3ZGVaMmFOdVBNTEV3OWF5anJuVklmU3NnTGox?= =?utf-8?B?RGNxNnN1RDBFMGtQbHlYa1pFbE1pOW5KVkZtYVlGeDJBUEpTRnJZZkZXSkQ4?= =?utf-8?B?SVoxRENDeDdHbTN1ZlpzaEZIeFE5eldGc0FNenloNVFsd3dxN29Tb2pSWncx?= =?utf-8?B?ZHh5Nno4dCttVkdGSmRBa2h1T2UzK2dqSm1oYXp0dFFDeWdsMzBMS1RuN2R1?= =?utf-8?B?V01JUDV1d0FQNW9Gc2psa2lBa21jL1BzWG04N1oyaTBFK084QTQvdVdUNHE2?= =?utf-8?B?aG9nL2JXTmszUGtrYUlsTGFRR0NJWnU4SVVpWlJMRmNOVHhlYi9jeXFsOTZS?= =?utf-8?Q?yifM0lKuRJSDb08z7ks4msA=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2b11c059-47d8-45ba-f4b4-08d9d4573820 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:35:31.9362 (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: HDA3MQYoh85Z2Vr9g74mPyLsz6Ap0OLjSHHttD8vZOI7ji5JWddgKlenDDwzrbnQuJb1QQoSrtJXddvzZDPytw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6477 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832568058100001 Content-Type: text/plain; charset="utf-8" This is a re-usable helper (kind of a template) which gets introduced without users so that the individual subsequent patches introducing such users can get committed independently of one another. See the comment at the top of the new file. To demonstrate the effect, if a page table had just 16 entries, this would be the set of markers for a page table with fully contiguous mappings: index 0 1 2 3 4 5 6 7 8 9 A B C D E F marker 4 0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 "Contiguous" here means not only present entries with successively increasing MFNs, each one suitably aligned for its slot, but also a respective number of all non-present entries. Signed-off-by: Jan Beulich --- v3: Rename function and header. Introduce IS_CONTIG(). v2: New. --- /dev/null +++ b/xen/arch/x86/include/asm/pt-contig-markers.h @@ -0,0 +1,105 @@ +#ifndef __ASM_X86_PT_CONTIG_MARKERS_H +#define __ASM_X86_PT_CONTIG_MARKERS_H + +/* + * Short of having function templates in C, the function defined below is + * intended to be used by multiple parties interested in recording the + * degree of contiguity in mappings by a single page table. + * + * Scheme: Every entry records the order of contiguous successive entries, + * up to the maximum order covered by that entry (which is the number of + * clear low bits in its index, with entry 0 being the exception using + * the base-2 logarithm of the number of entries in a single page table). + * While a few entries need touching upon update, knowing whether the + * table is fully contiguous (and can hence be replaced by a higher level + * leaf entry) is then possible by simply looking at entry 0's marker. + * + * Prereqs: + * - CONTIG_MASK needs to be #define-d, to a value having at least 4 + * contiguous bits (ignored by hardware), before including this file, + * - page tables to be passed here need to be initialized with correct + * markers. + */ + +#include +#include +#include + +/* This is the same for all anticipated users, so doesn't need passing in.= */ +#define CONTIG_LEVEL_SHIFT 9 +#define CONTIG_NR (1 << CONTIG_LEVEL_SHIFT) + +#define GET_MARKER(e) MASK_EXTR(e, CONTIG_MASK) +#define SET_MARKER(e, m) \ + ((void)((e) =3D ((e) & ~CONTIG_MASK) | MASK_INSR(m, CONTIG_MASK))) + +#define IS_CONTIG(kind, pt, i, idx, shift, b) \ + ((kind) =3D=3D PTE_kind_leaf \ + ? (((pt)[i] ^ (pt)[idx]) & ~CONTIG_MASK) =3D=3D (1ULL << ((b) + (shif= t))) \ + : !((pt)[i] & ~CONTIG_MASK)) + +enum PTE_kind { + PTE_kind_null, + PTE_kind_leaf, + PTE_kind_table, +}; + +static bool pt_update_contig_markers(uint64_t *pt, unsigned int idx, + unsigned int level, enum PTE_kind kin= d) +{ + unsigned int b, i =3D idx; + unsigned int shift =3D (level - 1) * CONTIG_LEVEL_SHIFT + PAGE_SHIFT; + + ASSERT(idx < CONTIG_NR); + ASSERT(!(pt[idx] & CONTIG_MASK)); + + /* Step 1: Reduce markers in lower numbered entries. */ + while ( i ) + { + b =3D find_first_set_bit(i); + i &=3D ~(1U << b); + if ( GET_MARKER(pt[i]) > b ) + SET_MARKER(pt[i], b); + } + + /* An intermediate table is never contiguous with anything. */ + if ( kind =3D=3D PTE_kind_table ) + return false; + + /* + * Present entries need in-sync index and address to be a candidate + * for being contiguous: What we're after is whether ultimately the + * intermediate table can be replaced by a superpage. + */ + if ( kind !=3D PTE_kind_null && + idx !=3D ((pt[idx] >> shift) & (CONTIG_NR - 1)) ) + return false; + + /* Step 2: Check higher numbered entries for contiguity. */ + for ( b =3D 0; b < CONTIG_LEVEL_SHIFT && !(idx & (1U << b)); ++b ) + { + i =3D idx | (1U << b); + if ( !IS_CONTIG(kind, pt, i, idx, shift, b) || GET_MARKER(pt[i]) != =3D b ) + break; + } + + /* Step 3: Update markers in this and lower numbered entries. */ + for ( ; SET_MARKER(pt[idx], b), b < CONTIG_LEVEL_SHIFT; ++b ) + { + i =3D idx ^ (1U << b); + if ( !IS_CONTIG(kind, pt, i, idx, shift, b) || GET_MARKER(pt[i]) != =3D b ) + break; + idx &=3D ~(1U << b); + } + + return b =3D=3D CONTIG_LEVEL_SHIFT; +} + +#undef IS_CONTIG +#undef SET_MARKER +#undef GET_MARKER +#undef CONTIG_NR +#undef CONTIG_LEVEL_SHIFT +#undef CONTIG_MASK + +#endif /* __ASM_X86_PT_CONTIG_MARKERS_H */ From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832583; cv=pass; d=zohomail.com; s=zohoarc; b=E9uOhDr9TXuLArURWpYeDHrFJoqbedxrUbNOZdKewB4LG9TyCwjCog6e9yP3cOJ/ggEvHcE0FYWW3xi6lo6xTqbf1J39vTkKyEX26b69CxxQXiRhMzMozCCOveuh4nAsFWAKn8SdEFrqbY8W+nUSyDMqqyTQxg7PT4Ie9JVf9j0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832583; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=1vVPJBcYTbo9ytg1J0+W0phlaHU+E+B/oL/8qhHj56U=; b=g4NkpVEqe+w573KLcxcqoL9Absu2csrq1+wYO3KLdwGG369q0dGQY2zrWSQDqEXr+T+cD5JIcMkBnuN46TI9I5VQ/q6OjgmzvteSounohJ2QmjaumkJUT+aCE3V+0kKERUJ32Dtp2+99c2NxZ08dR/4qR/4nA0nM8B64Rx1B6Wc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832583729831.0706825826223; Mon, 10 Jan 2022 08:36:23 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255481.437813 (Exim 4.92) (envelope-from ) id 1n6xeK-0005Va-Ub; Mon, 10 Jan 2022 16:36:00 +0000 Received: by outflank-mailman (output) from mailman id 255481.437813; Mon, 10 Jan 2022 16:36: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 1n6xeK-0005VT-R1; Mon, 10 Jan 2022 16:36:00 +0000 Received: by outflank-mailman (input) for mailman id 255481; Mon, 10 Jan 2022 16:35:59 +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 1n6xeJ-0005T2-IO for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:35:59 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 63d36c49-7233-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:35:58 +0100 (CET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2171.outbound.protection.outlook.com [104.47.17.171]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-38-oph9Qp4wPkeRr__U9TiIBg-1; Mon, 10 Jan 2022 17:35:57 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VE1PR04MB6477.eurprd04.prod.outlook.com (2603:10a6:803:11e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.9; Mon, 10 Jan 2022 16:35:56 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:35:56 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 63d36c49-7233-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832558; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1vVPJBcYTbo9ytg1J0+W0phlaHU+E+B/oL/8qhHj56U=; b=Cs+pb2vYbXxm23zJ7E/q9kREBYZiuonH3kalnD8IMebiSj/kdPwE3ne9+KoL9rlxf5cGNu oQ8USHdjxk+MO5iPKhJsQOaI9nGbOH+anwkamiVCvF0XGdAhKC1vx1IWgf+/YKTTvOtvrT rYkxeoCADMvgTZ/5MzCKwtVELENLkxM= X-MC-Unique: oph9Qp4wPkeRr__U9TiIBg-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hQ4Yhzg2y8CiasMH6H0bgHBjfyaQfUV8le8ZyEpKSgNAMM4UnwEdeY3ScRPNrtw7ltgyU/7K1xdrSO/yxJ8eqFOr68GLDmljHoQpcMfjFElX1bILDHHbNi4ZExjvBWs1IVSOqKCLZDppgVNUcHv91A00c01jd5e3SEkiB/A5jrvdmRwHoM3OViXjNq/KI/HX7zWx+DIZ70Ujx6AD6LosnroohEM7CZNfHRL9T7Ts5CcEoZiGmnWIGYyqvRlVSMh6U9QsK2mjocqMPR8UnNtr2PJA8nwYEwynpUAgSXcAALKygqIRobeucm4rupBHVwNp2nOiz13ZA4acsIeY/au8XQ== 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=1vVPJBcYTbo9ytg1J0+W0phlaHU+E+B/oL/8qhHj56U=; b=jJEiyiq9sUWvJO3j9Kwr4d5AsICdKwcUdVDI+hqs6Mcd0fRe0AROHqjQl3jsc6cvL4gCcNNC6w5KHizDoTbCa0RfR3ACD5yBPeamaP59sfZ3kPpWdT5XmlA5xq5pWcZfuNUCU7vNY/jgAgAk5qbt47Lx/VqZFfX3DBshhv8WNmol3h4lf6SyqyBsDl9WeWmtb8TAOnkd5OXC/umOR+tlsnveROPpxsDL5mRK4Pu/NgqQbIcQnXudAldynr4dTyNXEhN8Ac5iF0aaMbQNd8nTfHUyNBAcbbxQ9CP0Qqt8M+M5cemmy3XC+++LjI/Df0xtr6t53WmyCRFsP5IMO7vQQw== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <9b522c22-cae1-c5e1-0df9-eca37de54ab3@suse.com> Date: Mon, 10 Jan 2022 17:35:54 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 19/23] AMD/IOMMU: free all-empty page tables Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0053.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::17) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0f5014f1-420b-4f50-faa1-08d9d4574665 X-MS-TrafficTypeDiagnostic: VE1PR04MB6477:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1q1aKq3FXT593upbQRBMaJ0+q1BuZtYXn3emf3EKP2YFBgcvqNwGc1l8f8X+On0Q68NKeMnBeQBtBGdBAbUWNy/lYmf3OikRDD/rRT+fsag8I+vKb315e9ha+Axgff/zBOdaRuchkOTLmGI7b+MW9+8NhWfwaJsNKPOWAUbfp8oiA+kl4IWWnbzFpDZ96tv9OJA2ZERFE+5VRLnHZUdJwQaa/XQV5E+39100YAkgbB7Bx2lX7dNqVxm9yEuqOZsS4tzqWn0NGViFcpSYaZyqaFCI+h14uG/nlLztfp0lrG/jIMfQ5ff1Z0AQ9WSfRDitFZ8IBzknv23GFVfGFAIZaCpM+hxKRCfSn7t0wVVNS2BgPx5nRZqMI7pLrmW4AkqeSCz1E0gumsjI2m4PiT8c6b+x+2m1qkaCFzPr11QhBR9E4WVfuSgN0mjXfxi4Kz5zyAutg9hFD13nXvzkRuE1e+9INejne3BXkRofSO/KJcaZghqzuJhpFJZH1gkLAJ7UHIXY7vJu9Ia0jRoaQiNCNcRZYgCg1YfpA3XnvUpQa+Dy9c3Pjy/NsPvjfysInX6+A1iSY8otvb0zTUxWMKu2PLTRCz9FO0zv0AmvXegKeFXAFhSj1aY6kGAjA9cFFxIv1sxm6yxDGsGyZPqSMbwYUXUz1Z2BuV/cnkmLJB/xsFLNY5PzOObnR3/8t7sPdIBOC6qFSioC4QA2Hgoe4QTTxUD9varUYA9r97jX9in5uzU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(8936002)(6916009)(86362001)(36756003)(8676002)(508600001)(6486002)(31686004)(186003)(26005)(2616005)(6512007)(66556008)(6506007)(66476007)(2906002)(66946007)(4326008)(31696002)(83380400001)(38100700002)(54906003)(5660300002)(316002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YklWUktEeFlBdXdCWXBnY0ZUQ1FZOVlWWFJhOVU2Mi82bXdSeENsV0E5akgv?= =?utf-8?B?bDk2Y0NaR0hLOFBRZCtVbUpub0lrQ1N2eGJRUktjNFUrWlNiMVNjS3ZRR05O?= =?utf-8?B?all1MnNaUmhVb0ZEZm5SNmR0bHZhQ3RUNjR6OTRFeEd1ZzI0YVg3cVAyV0xC?= =?utf-8?B?Y1ZZTUtOQkE0UWl2RlY1RzF1aEVyUnk4RDRYSFd2VDQ5dTBiblIwdThPNk92?= =?utf-8?B?VzNvQ2IycWt1aXk3SmdkQTFDNFcvK0xRcnBVM094cFE5V1E4dHY0OGlpZzBZ?= =?utf-8?B?aWpUNHlLNFd6SllOZThnNFpUbk5UMTJpMnBzQ2F0ME1LZ2VPMEcrNjdVZk5h?= =?utf-8?B?WlhSTVA2MDUvUHFOUXgrQ0d4aDNDOWdHT3M0M01ubUx2Ny9sYTlOS1YxTEFk?= =?utf-8?B?VGNxdGY0M3dBTzRUVjQwdVA3M1RKVnFhZzR6eklzSFRFS3dmWFI5b0NDSzhS?= =?utf-8?B?OFUzazQ5bDBuakk0R0R0T1BPVzB5YWxXc0IycUEwRllKc205U3JWZkxObXRk?= =?utf-8?B?TkZQQXVua0RIVFZ2TG85a1RkeTdsWUhocEgzVnNJN0Z6c0I1VGsydHNma3k4?= =?utf-8?B?ODN2dHUzdVQvdlBtS25WV0l0aUMvdjJwdUcrZHVqdGdGWmcrdW03Q2dLVWZL?= =?utf-8?B?bmpLYUxiSU5aNlpKK1RHNTduL0I2WGk3L2pRY3FRbU5qem9ZOTdiYnN0dzBN?= =?utf-8?B?ZVphZjIraWhHNGVCb3MydkNJOFdQYlAyV1VxNThiYkxySy96RmQ2ZmsraUxh?= =?utf-8?B?SFlSR3pRSEVTcjlOdytwVSttTnRkZzdHb1c1WGFzVHZqK2M3ZWd3L1ZZM2Er?= =?utf-8?B?akNJdVNVQUpTbjdpMFlVc1dDK2pyWi9saFRIQmNwcU5tQTk5TXlrd1F6ZDR0?= =?utf-8?B?OUZPR2hzTUNwWEhET2FnQnJweWxMMGdWODFzVlZJYjRpdFVlWE5pS1ZFQU9F?= =?utf-8?B?OW5aQW9wY3U5b3hDbWltWVh6b3pvLzVlTjRnUXdpamJQeEFWQXduYmhUWWgr?= =?utf-8?B?VWNNMTJZZXlkVmppQlpXUFZyVU5wbEFlNUcrT0dDR3g1ckhhbnBQekc2aDFt?= =?utf-8?B?TjdVeDcyenAzeExmMTNCTXJLTnhSQnlIMFhiUzhVWmpyak1XRlJMQ3BTbHFX?= =?utf-8?B?QktYYjZnRlBPOE9RZFRvOU1Pa1NhMGd1WXZBZXZJSkdGMFRDVUpaTFZGN2Rs?= =?utf-8?B?OGk4anZhVmhjVmMzdlNJY2pCem1nYm5XUUljTEhPcmQ0SU5GOVVuckNrQXBs?= =?utf-8?B?Nk05ZjJsNmxwb2RWMC8xa09HTlhhZjJqZkxza0h6TFhDQ2N2NXRTY09SRDJZ?= =?utf-8?B?NG1jZlEyQjFxNTQyL2p4alVWRnVucldnV1RCakx5b0FEQUlUTG5SVG9rbU16?= =?utf-8?B?bWpuMU8wdTN6MG9xZnFaUlJIOWJNU3JIMlBGSXErb08vd2JjUkxJQjVGbzNu?= =?utf-8?B?OUZFZDR3MzZLQndxVTZaeStmZFRFdDU1aXo3TzFpcUVLMzdBNi9qZDROeC90?= =?utf-8?B?MEliSDRBb0kzN0xYcGxKOXRITmZ1UklNcUxYeHpxSjNEcHB0VFJ1T1RKbk9P?= =?utf-8?B?MzRodUhyN1BocXdVdXV0OEZ5QzU3QmtQYkluNHhnUEsyVFNiUCtyeDhKdmIw?= =?utf-8?B?QzQrK0I3bWtSeWkrYzF2dTh5aE9VU3hPMk1ZRXZndHZJYlRpamJHWUJPWGRJ?= =?utf-8?B?dGxHY1hjSUVpOGdYZlBIZnRFOTBhdVJpVTkrZHAyN3RCNnFOcUtjVXBEdzFI?= =?utf-8?B?V0IzVFBBamxudHhUT1g0MVhyTlZRcEVBU3ZFd294K3B5K3k0SHc1K3BUUG9B?= =?utf-8?B?a0JsUm0rVXoyYWR5elJwenl1dlV1M2kxM3FnK3Q3b0VQNEx2R2NDUmcxcDZa?= =?utf-8?B?ZTVJZzNRY1BTVmZaR1A3VmNWTWZIcnNiUkk1c2UrVFN2bmNsdXdhWjRWVjB1?= =?utf-8?B?eEJwK0F4dERCTGF1dmQzbXJxQU9pQjVJSGo4M0g3V3RabzE1TWYyeFMwNjRj?= =?utf-8?B?eDd0VjNmYVdhU2l0SnJ3SWwxQ01OeDczeHo5amxlbzhIVTloalA3VDVLT1JI?= =?utf-8?B?MlZDR0JyQmFQRytMMVNjMWNoYS91d2t0S0pxQ3dIaWhuZ2VNVTNOeFRpZFZq?= =?utf-8?B?RzBwbjNUU3VYN08zbGtRcjlUZ0ZLNlU3Q0hjOGtSNDM3RW0vZzNpUTF2MnVt?= =?utf-8?Q?HbpV6rHgj2oi5BHplhTvnHw=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0f5014f1-420b-4f50-faa1-08d9d4574665 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:35:56.2834 (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: Wye6FQNvm1bUwwNd7HjVA+KZtXrfDbLsYdyE5DMTRGpIQLs70OdhwUHQ61MMxc5gzz61Ci/yNKXZdVpE7ZEorw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6477 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832585953100001 Content-Type: text/plain; charset="utf-8" When a page table ends up with no present entries left, it can be replaced by a non-present entry at the next higher level. The page table itself can then be scheduled for freeing. Note that while its output isn't used there yet, pt_update_contig_markers() right away needs to be called in all places where entries get updated, not just the one where entries get cleared. Signed-off-by: Jan Beulich --- v3: Re-base over changes earlier in the series. v2: New. --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -21,6 +21,9 @@ =20 #include "iommu.h" =20 +#define CONTIG_MASK IOMMU_PTE_CONTIG_MASK +#include + /* Given pfn and page table level, return pde index */ static unsigned int pfn_to_pde_idx(unsigned long pfn, unsigned int level) { @@ -33,16 +36,20 @@ static unsigned int pfn_to_pde_idx(unsig =20 static union amd_iommu_pte clear_iommu_pte_present(unsigned long l1_mfn, unsigned long dfn, - unsigned int level) + unsigned int level, + bool *free) { union amd_iommu_pte *table, *pte, old; + unsigned int idx =3D pfn_to_pde_idx(dfn, level); =20 table =3D map_domain_page(_mfn(l1_mfn)); - pte =3D &table[pfn_to_pde_idx(dfn, level)]; + pte =3D &table[idx]; old =3D *pte; =20 write_atomic(&pte->raw, 0); =20 + *free =3D pt_update_contig_markers(&table->raw, idx, level, PTE_kind_n= ull); + unmap_domain_page(table); =20 return old; @@ -85,7 +92,11 @@ static union amd_iommu_pte set_iommu_pte if ( !old.pr || old.next_level || old.mfn !=3D next_mfn || old.iw !=3D iw || old.ir !=3D ir ) + { set_iommu_pde_present(pde, next_mfn, 0, iw, ir); + pt_update_contig_markers(&table->raw, pfn_to_pde_idx(dfn, level), + level, PTE_kind_leaf); + } else old.pr =3D false; /* signal "no change" to the caller */ =20 @@ -262,6 +273,9 @@ static int iommu_pde_from_dfn(struct dom smp_wmb(); set_iommu_pde_present(pde, next_table_mfn, next_level, true, true); + pt_update_contig_markers(&next_table_vaddr->raw, + pfn_to_pde_idx(dfn, level), + level, PTE_kind_table); =20 *flush_flags |=3D IOMMU_FLUSHF_modified; } @@ -287,6 +301,9 @@ static int iommu_pde_from_dfn(struct dom next_table_mfn =3D mfn_x(page_to_mfn(table)); set_iommu_pde_present(pde, next_table_mfn, next_level, tru= e, true); + pt_update_contig_markers(&next_table_vaddr->raw, + pfn_to_pde_idx(dfn, level), + level, PTE_kind_table); } else /* should never reach here */ { @@ -413,8 +430,24 @@ int amd_iommu_unmap_page(struct domain * =20 if ( pt_mfn ) { + bool free; + /* Mark PTE as 'page not present'. */ - old =3D clear_iommu_pte_present(pt_mfn, dfn_x(dfn), level); + old =3D clear_iommu_pte_present(pt_mfn, dfn_x(dfn), level, &free); + + while ( unlikely(free) && ++level < hd->arch.amd.paging_mode ) + { + struct page_info *pg =3D mfn_to_page(_mfn(pt_mfn)); + + if ( iommu_pde_from_dfn(d, dfn_x(dfn), level, &pt_mfn, + flush_flags, false) ) + BUG(); + BUG_ON(!pt_mfn); + + clear_iommu_pte_present(pt_mfn, dfn_x(dfn), level, &free); + *flush_flags |=3D IOMMU_FLUSHF_all; + iommu_queue_free_pgtable(d, pg); + } } =20 spin_unlock(&hd->arch.mapping_lock); From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832623; cv=pass; d=zohomail.com; s=zohoarc; b=cZCMkCL19dA8JpA/4Ioz1SrwmHULCQa0xH9heZZKACTASAXO6EBUo7g+g6dk2b9T1WHXMkkksK9vafCIptlkVtAClLEQ/zOKk72K4VVS5aMU9oK6EYon/CTZsubFLht7QsNoIkDE/ezSzYgmmroOxvREs50wgQQnr+4wCTJ1dzo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832623; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7JJks6iLXnqZbdVJXHnHne9F/os9YAY04CAdOZJgakY=; b=cIPG0MrdPMWCzGzpUiXfPayYxN3dDlkLlCp4pe0YfXg2iyjDx0IDW65D85L3BlOqDbAG1Ph0yzkswUo7ZUdyCAem3PLSqPVrrw43BRwp2gm2bulu6xDAzRJwTLLX0D7Aop5FZCc4X8z8UcIrsUg874g10/DFzCvz194/ZrJeJ5U= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832623428524.1032766086707; Mon, 10 Jan 2022 08:37:03 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255485.437824 (Exim 4.92) (envelope-from ) id 1n6xen-00067w-7P; Mon, 10 Jan 2022 16:36:29 +0000 Received: by outflank-mailman (output) from mailman id 255485.437824; Mon, 10 Jan 2022 16:36:29 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xen-00067p-41; Mon, 10 Jan 2022 16:36:29 +0000 Received: by outflank-mailman (input) for mailman id 255485; Mon, 10 Jan 2022 16:36:27 +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 1n6xel-0004yp-BB for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:36:27 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 746e844d-7233-11ec-81c1-a30af7de8005; Mon, 10 Jan 2022 17:36:26 +0100 (CET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2170.outbound.protection.outlook.com [104.47.17.170]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-16-x9AfBvtDNsu14kHz6D9I_w-2; Mon, 10 Jan 2022 17:36:24 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VE1PR04MB6477.eurprd04.prod.outlook.com (2603:10a6:803:11e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.9; Mon, 10 Jan 2022 16:36:23 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:36:23 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 746e844d-7233-11ec-81c1-a30af7de8005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832586; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7JJks6iLXnqZbdVJXHnHne9F/os9YAY04CAdOZJgakY=; b=RuV+ANhIwcNhbL2dX9vsllUqL4+2K6WhPQ6uEn4g4Kzns7tAId4R6HCygEvPd9/uRamWeU li2P0QvQpfVSQ9MyP/3w4o2KMGE7WURYX3yD9UvuUsJ5o/WX6zfnRMxzZndch9VSrUMsx3 TheFKYV4XUGMVt1mX7jwTUKqQ988vPY= X-MC-Unique: x9AfBvtDNsu14kHz6D9I_w-2 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iHTRMtmmEE2hLOLG23RwPscowjFBQuH5dS2hfHm1QYgtBPTdtTPBImxZ1gceNzOv5oQrgZ22b3FwLVtOmcKqnwCTN/kSzwv2z8NEmk/Wh5etLv9G5HxEaeuwpTmrgVaij9dwG7zkedHAV9CuQG9N4Ae4mN+G4pKKAGFhJLIUC4AoAZd6b+wW21kEzJxcw4NfHSqy1jnBJ0MLA43VVZVnW+isTnTZuVhxkE+Q63Lu4aRjP7/8c4GuEvrds46yRjWdXi+2It3ApYXV9kKa4zmPWxEwPFtwYRdCEi7zOdZ99zH+YxIzvcY/hfKpsoyX9ArGSLGu/Y5N1ufjYZns2ONDnQ== 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=7JJks6iLXnqZbdVJXHnHne9F/os9YAY04CAdOZJgakY=; b=BRvapkZ/kMBNywaVBV17H5cMnXaz9vDnqiwMe9vVfwChD+sPE5d/f5qOnkRcDnM+alAsijXvLf5vVqDxgLx6pj5VSTLgyVfSmrpkh9OKRiJBW6lgwMxDzg1mDQhVGyAdP/p2enFRpf7LbWaTsBkmiS6OnBXOKE1PLXGuOIoBo2UolBxY2umJL2HOovOPyH2WJcDzAUNQLeXihUm+jFhr9vSf5jPoyby0W8bUxZolzrgE4byT72YO5B8lrpcWafOvpg2/qKcJaxIzMeL/uWVz8ECHOzCr8IwKAG4vmQc+3uIEtDkFnSq7gDdY8LzHPboaXKAmh4po5SDgwS+hoG4KZg== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <807a48fe-3829-d976-75dc-1767d32fb0f4@suse.com> Date: Mon, 10 Jan 2022 17:36:22 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 20/23] VT-d: free all-empty page tables Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Kevin Tian References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0064.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::8) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 79597edb-0028-4dd3-1446-08d9d4575705 X-MS-TrafficTypeDiagnostic: VE1PR04MB6477:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8Uzz8Z54+phrzr25gIj42tCtUg1AEJcT+uHpkUKEMgh3eW/aUOLr4XSgz6QyS+d62XUWJob3/eXOFZvuu0VEMk4oZZDX0w/zDaPMINX0773C2/1vSaQgTgy26dS4QxKWv+9YsdVBZWhYS20lPzBZu8+REA6O4r9lsvIJNzDTA9TAM+1p50/AFaPmT0OqI0Khn3UM1qf2B5U6zE3fRpvstwvyrsdkcWqHtWX2DVKLgLw18GRTVBeVrGxfjjz0+Mt1l9Xn9ctc25RcZvWekCjHq2yWT4J/6RXA4Ys7EWEfTg05fGuhj9QGWVH2d0L531yBst4P/9tE6f7BaQVL3W7HV/afLEvnT7yY5IIRocIOV1miAiKhN1rytsLWR6EiPrsCHjfugZBGgLzksfrrYmKEJVrkTpI4IwgANcC3tua9yYG3DEhObeeSJ2JBJK64TUQZQLs8DNSYnSvWAdUXfzCm69yfUst0GWThwXx6X64DVJMZMZxngqE/GEz/HYw0NrUjhIp2HYzh3QEUlq8YkqFYZHPGO/DKe5GwOadbeauyJzPjkC7k5+wGvTNBkRyKGW1TzczuW2ZTfsiWFT63Lo/+tTF3LNwS4m7AFh2j1ROiDI5ohdvUH7/vbmuLp4zykZ995IXOBT3nKENbs/6jrDweXdwQJxZZHuofbj/6Qj8Xu6mXZdjwLoqyCTgg+/yqb7uISx/H0Gi1AV674J4WhtLahsM5G/QZQqwj4xYPhad6o4A= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(8936002)(6916009)(86362001)(36756003)(8676002)(508600001)(6486002)(31686004)(186003)(26005)(2616005)(6512007)(66556008)(6506007)(66476007)(2906002)(66946007)(4326008)(31696002)(83380400001)(38100700002)(54906003)(5660300002)(316002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dXVHV0h3dE9rL3ZpaEl6ZndYVEVoZ2YyTVp4dlYxTmFua0RjMElPZUpaUW81?= =?utf-8?B?SHhlb2NNMnVCcXZ2UjJxT0xXVzNPaHAwV0ZPWjFNNERXcUpxK0F4dHRTb2Qy?= =?utf-8?B?c21qcUZKalQvT1QyOE8rU1l3Q2VkR0dsME9RVnAyaUxvVDhzdDRUR2U5eEQw?= =?utf-8?B?STlpbzlhcVUybWl0ZGRHVzdkSFBkM0txU3V0Um1QUWtZZHM3aXRxQlkvUUQv?= =?utf-8?B?RWRnNWt1aUx3TWlVOTRDWDlua1NSTktvQUZuM0tFbG05OUMraTR5TXNBTnEz?= =?utf-8?B?RzE1bUVDOTNWVFg1OE1yc2hZTVJyekdFczc3Tld4Y3NoUUxvTHRUY29MQmp4?= =?utf-8?B?QXo1UGU3cUlReDdEeVFiUlZ0L2lPUFlWVEE3dnBEeFpCTzBLeHl5Nm5LeHVq?= =?utf-8?B?dDJFOTlrczFvRFNtMThFTW1RaUdSdGFHYmkzTjV5YjJTcEVhc3hVa29sNWFS?= =?utf-8?B?YTJsRlpHbHErN21JUFI0TmJSQUtYMytRN3FOeDlpRHFoWmhYb1RzeVpBRTY5?= =?utf-8?B?cG9YU3k4NmY1czI0cjZvOTI1ZTJid3pHQmN6MXV5Z2JnTW1lbWZnb1FZOWd3?= =?utf-8?B?a0hpV3dycWdGWGl5Z2p4VDVMTHpsZjFSWXRXZjlpYndKK2ZrcytpeklGLzhS?= =?utf-8?B?VXdzeDFIS2lRNEwvMkJwOHlPRUhjSHlUVTJpU0hjL3ZyRFllNzlSd3hxTFU5?= =?utf-8?B?bk8zK24xZFBPMG5IY0N4OFhXZlUvNStVQndYMFc4YVEreFBqUWV3K0I1bHFy?= =?utf-8?B?M2FDYzdmYmNPaDR6UHgveFJhOUdlR0owNXZvS1VwUzZsTVZUdlZ1TWpEUSto?= =?utf-8?B?b2ZlK2lEQnpKbXB0K2VaSkNBMlc4d1VyRzE4eVlwaTBSTWQ4TFZCZmlHaUF6?= =?utf-8?B?STNrcHpRbnVjK3V0UUE1MHNsZU1kcGhCWGFFVUVUZkpSb3c2aEdiaWZKbm9i?= =?utf-8?B?OVFiZmQ3L1plTFI1S1UxRXZBR0xnR2VVTjlLRXp3WGVNZ1FzN2lsVjFFcFZ3?= =?utf-8?B?alM5TjRTaXg2QmdnVDBjL3JyenZiVk9sdEtxNE8yaG9GYU85NnlYT3V5bXpw?= =?utf-8?B?elc5ZThkcTlxMG44aDFZbUlUOHpSQWJlVzdMdCt0YnBmdDhIVUtFakREOGNm?= =?utf-8?B?UTM0cXNBcjZGQ25ycHphclhwNFA1dndROTR1dld1N1lMbXphMVhLUWc3RHVO?= =?utf-8?B?d3djMWwyK1NxM2JPYytacTRpc2FsNHovRVVXa2Q0d2ZDYUhWMElLQXgvRmdB?= =?utf-8?B?bE4raXpWSDhPUkhpVG5Ub3lQY0hDdm5IVXdSZDVER2swZ29Sci93cG5seUFt?= =?utf-8?B?R1NkTEVXcHFpTitZaThyKy94RWlxMGpneVRkNFBHVHdLTWsrcXNhdGNnSUJN?= =?utf-8?B?UVlZdGZuRVNDWjhaUjRRcGdMZllTNUFRRFczYjRHSGdwVjNjY2tzSnAyaE5Z?= =?utf-8?B?bFVSa293Slo4cFhkeW1tT0h4Ry9ZTXVWSlV4eGl6OTJRL3F2TXdMclVTQmhT?= =?utf-8?B?di9PVWRSTGJUQ29pVWM5YVZOeUlhWlZwb2VtTDlTZUIzRWxwNnB1b1JCZzFW?= =?utf-8?B?TUlFMkNyUCtncXhKRkRZWDllS1ZjNzBOdlFWWUJvcjdQd0lBT2ZkaXA3UCtw?= =?utf-8?B?K2R3WlhFOG0yVjN1TlRiVmU2aG94OThncDl2STRJblpNeXV1NFBoNFVCWGlM?= =?utf-8?B?bks5MXoxT1YwM2dEK3VTaS8yYWExbWx2K0p0SGhGek9TTkdPVzk4Q0d4YlIz?= =?utf-8?B?YmJxZklDdEs2cThtMmhHRWNkRnZ6S3BHS3FTZU82UFEvZ29hMzRqcmNiTkdp?= =?utf-8?B?V1I5NStkdzFvN3lUb2hPck9heU0rZDhzRXY4L0MwUTEvMUVvRTh1bnROazg0?= =?utf-8?B?NGZLYWgrcEgvU2tid29wOUQzYisrZGE4ZFR0d3JiOCtkcGVsU251SFNRS2tY?= =?utf-8?B?M1NMOXk1SHNTL09pUWMxMkdsMjR5U2ZleFdnN3ZJOHRGUzkyd09acWtBYzY2?= =?utf-8?B?M0xnMGNUanEvZXRTRmlYalY3cnlnNHdiK09IMS9FYm45bnVaVXE5cEJpWVdS?= =?utf-8?B?YkFiVDEvMVNWeTVjNHRNRFJxTzhqVkJnZEYwdzc2NUZGYjRQSk1ycG5vR3Nq?= =?utf-8?B?YlNhSWdZV2FPa0JGaENBZUUrRHN3Q0pacm00QmVzc0lFU2J6ZkI4TkdQcjJK?= =?utf-8?Q?Z3yvV480LHKQNt/0v6W2nwQ=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 79597edb-0028-4dd3-1446-08d9d4575705 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:36:23.7529 (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: 9RtBamhs2V1al6wFByJPRBYTUuBH5OWDHW8G5RiM8MV8708RCPu4hnE6zJTCoGB5mKlCo/0EeiBZQMPrmwLUfQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6477 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832625404100001 Content-Type: text/plain; charset="utf-8" When a page table ends up with no present entries left, it can be replaced by a non-present entry at the next higher level. The page table itself can then be scheduled for freeing. Note that while its output isn't used there yet, pt_update_contig_markers() right away needs to be called in all places where entries get updated, not just the one where entries get cleared. Note further that while pt_update_contig_markers() updates perhaps several PTEs within the table, since these are changes to "avail" bits only I do not think that cache flushing would be needed afterwards. Such cache flushing (of entire pages, unless adding yet more logic to me more selective) would be quite noticable performance-wise (very prominent during Dom0 boot). Signed-off-by: Jan Beulich --- v3: Properly bound loop. Re-base over changes earlier in the series. v2: New. --- The hang during boot on my Latitude E6410 (see the respective code comment) was pretty close after iommu_enable_translation(). No errors, no watchdog would kick in, just sometimes the first few pixel lines of the next log message's (XEN) prefix would have made it out to the screen (and there's no serial there). It's been a lot of experimenting until I figured the workaround (which I consider ugly, but halfway acceptable). I've been trying hard to make sure the workaround wouldn't be masking a real issue, yet I'm still wary of it possibly doing so ... My best guess at this point is that on these old IOMMUs the ignored bits 52...61 aren't really ignored for present entries, but also aren't "reserved" enough to trigger faults. This guess is from having tried to set other bits in this range (unconditionally, and with the workaround here in place), which yielded the same behavior. --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -42,6 +42,9 @@ #include "vtd.h" #include "../ats.h" =20 +#define CONTIG_MASK DMA_PTE_CONTIG_MASK +#include + /* dom_io is used as a sentinel for quarantined devices */ #define QUARANTINE_SKIP(d) ((d) =3D=3D dom_io && !dom_iommu(d)->arch.vtd.p= gd_maddr) =20 @@ -452,6 +455,9 @@ static uint64_t addr_to_dma_page_maddr(s =20 write_atomic(&pte->val, new_pte.val); iommu_sync_cache(pte, sizeof(struct dma_pte)); + pt_update_contig_markers(&parent->val, + address_level_offset(addr, level), + level, PTE_kind_table); } =20 if ( --level =3D=3D target ) @@ -879,9 +885,31 @@ static int dma_pte_clear_one(struct doma =20 old =3D *pte; dma_clear_pte(*pte); + iommu_sync_cache(pte, sizeof(*pte)); + + while ( pt_update_contig_markers(&page->val, + address_level_offset(addr, level), + level, PTE_kind_null) && + ++level < min_pt_levels ) + { + struct page_info *pg =3D maddr_to_page(pg_maddr); + + unmap_vtd_domain_page(page); + + pg_maddr =3D addr_to_dma_page_maddr(domain, addr, level, flush_fla= gs, + false); + BUG_ON(pg_maddr < PAGE_SIZE); + + page =3D map_vtd_domain_page(pg_maddr); + pte =3D &page[address_level_offset(addr, level)]; + dma_clear_pte(*pte); + iommu_sync_cache(pte, sizeof(*pte)); + + *flush_flags |=3D IOMMU_FLUSHF_all; + iommu_queue_free_pgtable(domain, pg); + } =20 spin_unlock(&hd->arch.mapping_lock); - iommu_sync_cache(pte, sizeof(struct dma_pte)); =20 unmap_vtd_domain_page(page); =20 @@ -2037,8 +2065,21 @@ static int __must_check intel_iommu_map_ } =20 *pte =3D new; - iommu_sync_cache(pte, sizeof(struct dma_pte)); + + /* + * While the (ab)use of PTE_kind_table here allows to save some work in + * the function, the main motivation for it is that it avoids a so far + * unexplained hang during boot (while preparing Dom0) on a Westmere + * based laptop. + */ + pt_update_contig_markers(&page->val, + address_level_offset(dfn_to_daddr(dfn), level= ), + level, + (hd->platform_ops->page_sizes & + (1UL << level_to_offset_bits(level + 1)) + ? PTE_kind_leaf : PTE_kind_table)); + spin_unlock(&hd->arch.mapping_lock); unmap_vtd_domain_page(page); =20 From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832687; cv=pass; d=zohomail.com; s=zohoarc; b=PCckIzzSODiK30LnefZzsSkNySHXGpXcLJq2nnReVjIS61+UaOWfv5esVqUzLwGP99LXX3kH/zR87xPHFpXXvEUmk/m2JW4TBAq+BjHvsesH7c1XKBkub9LiWy68i7vbhz13Yb2GQuMDLRGwWsejXgOiVsM14IUGej02hf/wCP8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832687; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=q21k2QRVQ9OpX2KFqNv7CXJl+zA4mrlUPekTbpVEMuw=; b=mGf1QCifQqBOWRFDUHHu2kidw/wPvg3rMVbuMILnl4XSr1ljbmVSvO76vObAFz/XVWgzeybg8Z+/JZtO/gLKp5kCYrYxIVaE1mVpDQBKU6hXrd0+WKgAtD+6I60LvieV2zCxE6kUFRUGvFHBMT5mqdO4A0fgVmjFhjx2NQQg25g= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832687463418.64533149532645; Mon, 10 Jan 2022 08:38:07 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255496.437834 (Exim 4.92) (envelope-from ) id 1n6xfy-0006zt-L0; Mon, 10 Jan 2022 16:37:42 +0000 Received: by outflank-mailman (output) from mailman id 255496.437834; Mon, 10 Jan 2022 16:37: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 1n6xfy-0006zm-Ht; Mon, 10 Jan 2022 16:37:42 +0000 Received: by outflank-mailman (input) for mailman id 255496; Mon, 10 Jan 2022 16:37: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 1n6xfw-0006zU-Mx for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:37:40 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 9ff9cc41-7233-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:37:39 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01lp2052.outbound.protection.outlook.com [104.47.1.52]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-26-3ZpniPXYOzujl-9Hbyo1zg-1; Mon, 10 Jan 2022 17:37:38 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VE1PR04MB6477.eurprd04.prod.outlook.com (2603:10a6:803:11e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.9; Mon, 10 Jan 2022 16:37:37 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:37:37 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: 9ff9cc41-7233-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832659; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=q21k2QRVQ9OpX2KFqNv7CXJl+zA4mrlUPekTbpVEMuw=; b=Bln4Rt7afxpe6WydBNFa6QgY9Ablc0xsRQxrxjSYtnFw9fxikqfaDOvqR+JYRtb6/EEpvE G8OLS+MRFpu3ekse8wH7jYCDdkHXmiXL48liGOawQetKsAH97rMkfsGYLgahdc/jHncqvA 6WK8m3a8fA7SGC4gLLmH5yLwpF2N8mA= X-MC-Unique: 3ZpniPXYOzujl-9Hbyo1zg-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HNTYsTqPl0MOLUG5oL5WKuSnPzPUsOcULY9y25cUKFqwkL2uDZudg8NkI4NDcR6d0nlcsAlOjCN26KCkfkb5HF5X330Ix0hERhq6WZGNjK/uvTmibh85+0v6XWKQ8hIOpg9fljo4bKqMKXqssnqsjq+FqVNoMWypOw5O20x45zn15bRSiPPJhxR8ZsYkl0utAtrCvlWTflhIe01Rrer9gK5K+VH5iHbwHHJaKcg9bvdlI7JfZM9NZevImLlb0Vx/anBJSkZ/VoSjewkNrelZr2SmEKL+yHPhmtSlHthO+4yv50BJ0zTgfS6Q9IfOqncd3SBTBDgUTeeYGP2BK7WfMg== 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=q21k2QRVQ9OpX2KFqNv7CXJl+zA4mrlUPekTbpVEMuw=; b=SJ1M0RER6D2D7JwcvFnzeexCvnh7pb7sWf1QxShwk5tuBjW/MSaHPrHnd2rkQSdWd48oJc+q29+5fNMGq84JqLhqtc1sO1wUllzBBggdB4iILEoa5sd8eXoMmPb2n2lzISy01QcFvsEo+ss/hlNM43g+O4Z9bwJLJZUJIhorvJCy7E2AkDPe7EyeV+uw1KkY1eJXvusl0SyPv/k3Su9g4byuVV4gvOXdNGiU9CStV8WWF57TW3Fjwz85BXEjxLYb+CUXk4ybdpoxNczrBgJfwAckJYnLW02bsvptkh8P12rViF+M5xMpXC3dWQGJxsRL6BWXLejbE3+k42wmHqem7A== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 10 Jan 2022 17:37:35 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 21/23] AMD/IOMMU: replace all-contiguous page tables by superpage mappings Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS9PR06CA0089.eurprd06.prod.outlook.com (2603:10a6:20b:464::14) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1c0b61b5-8b6b-4158-a9ab-08d9d45782cb X-MS-TrafficTypeDiagnostic: VE1PR04MB6477:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ULK2tQT0F42XYCQytHt2FTR0K+s4OkIT5ChYnCZAP7wUtKLOBNu/tugbMi7FXlFvkzgp7Hj5NFBSv/p+21BpYjUiXHiNU25UNvwiMZ5LCLZxVSAgc46mZ1SgsiEN1PGl0LxiIXtzWLNTlziZ+Cyvx1eMGLFm19yLZDQXpJ0CipTEMk580nnEp+BIVnEo1fhMT4FLm6LpLCwpn/kBI8WmB1WI4FaP9t0XVZnfwEZyCalP7hqLSvUxg7JW1vL+SRtcFcA1U62Jo8e9pteQ7AgX3lVXgCu3yemO+xLcMJ3nmxcQ276GCw9yEDNmF7p+YSgRkkhBDdyBTOdZIvC+oJKQHOZudRDWX8zBZLdpG4uBP9DoUB6W4TKpCOGV7/bvodeYwjPVdWOfX/m5UseRRgHelr5nTcRRBEA5987s8HnjP3NAh5BFk7cVTO/ILbO62vtgFy6kyzBTMb1hrFabBL9lJwW6JAl+rT9VYPtJWJGaU3HimWDwh7gZFlh62LbbZTUn5lAZefLMrMYdcxrL9ZwSU/gt05JVustqqC9ov2ZRtLU8kxI7f1vSSnde7IfYNWeqpZ+vpH+sk9toxPU2GrUcrrO8vxVLjVfLYOwAG5tsEX6yoZnfXMTCUJmbP8AArjkp1BOXHKtXfGBW0Ern0+XrBI0JoKxBCqC/vu4TYMXIOiBPRBWl7fboJDjL4eHueDsIgsKQ7BlM/vJtYV5Qzq4x2tNGOMSYxc5LwjPeRBIPfF14NlbUKQdcNd9VBjdJ31Oy X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(6506007)(66556008)(66476007)(2906002)(66946007)(4326008)(38100700002)(54906003)(5660300002)(316002)(83380400001)(31696002)(508600001)(6486002)(6916009)(8936002)(86362001)(36756003)(8676002)(6512007)(31686004)(186003)(2616005)(26005)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RnRFSldvZjVnZkNtclFGL2dKU1ZHYytwWjlXV2M5T0FaalRuUytUamJDNnBi?= =?utf-8?B?TmpTRUdoTWhqdnNDdkhkUFllSExvdGQ1Tzd0OTFhNng3NmI3NXpSbC9CQ3Nh?= =?utf-8?B?ck1HTmpySklxREdldXo3RlpQaFVsTnVMdXhJWnhBd3RNTkppRXdsa3VVcWFy?= =?utf-8?B?SVNBQ2toejNNNXJXdDU1TUZvUmhYTTU5eXJkRldyTmVkS0xTd2ZTSjdqWDMr?= =?utf-8?B?LzhwV1UzTGFwOFE1eU1ZeUlKbXZGcUdpWFNsM243amhHeEtKeVR3ZzhnanV6?= =?utf-8?B?M3FmYlRTdUlWNnlpTENOU2dFeER0cjRKTnlCZ3BSdmNGNHNGRkxtdkxQUlRL?= =?utf-8?B?OUtZN1FmL2ZRYTVTQXZpOFYwQVZFMllNTVRLKzZqdExRQ0JNdVMvTGRkZm5T?= =?utf-8?B?SU5ja2RlcFRQbWNyaWx0aVZUQTY1YUlIRzhKaFNFZWRGN1VHcW5iU3cvYVlG?= =?utf-8?B?NFlZK1BnZnVJdXFUL2VJV1oyTElXMUlHVEZKVTZCZFJGVXdEZ3lBbUdCd0NF?= =?utf-8?B?aTArVEdPSGxIU2FCc0RlcGJPWStQUklObjE4SFkrRVJ2bWI2UmhQZlV2MjBB?= =?utf-8?B?VzJ1SnRkZXMvNndHTTJnTU1iUHIrWE1YSk1TRVIzR1VzUmxveElxMGxRU2pH?= =?utf-8?B?cVFubWRiVVVFcGVRajJoY01TUDRoeTVpL3NrNG02UXpmb0hNdkppVTFQYlJp?= =?utf-8?B?QWQwSVBwNG5qR2FHaXY5K3JHbkl0anF5ekxCQjBvdVN0MjMwQ0hmSTRZaFRh?= =?utf-8?B?NC9VN1dRNmF2Z0NPMUlZTG91dUZreFFaSnM5ZDJ1aCs0ZUNHdENpOTBiWG43?= =?utf-8?B?UU9jTXhjL1JnYk1MRTFIaWtvRnRNaExMbHBnWUwwNkZ2MVVqcExqVGZCSjk2?= =?utf-8?B?Z0hkMU9kVGVGR0k4cVQrdS84cDFzVTFpMkI1OFZHOFFpS0pFNXlvTzc4M2xF?= =?utf-8?B?Sm02UHg1dFFRQUlkc2IvSWFxNlNXVk5iRFEwb3BlcXg2aVlvZWcveTZ4QmpD?= =?utf-8?B?c1dUU1NFMm9teUNhNFgyNlBidVgzKzBFaHpXT0NhdTJDMEtHOGp6bmFxdmVG?= =?utf-8?B?NzJNYmlSQ1QzTEk4cmR4ejcwRjZoTlpOOUxaMlErRmpGVWJaMVhxSkVnMlRa?= =?utf-8?B?WUZ4U3BnNVhrVDhTOTNvQncwR3VSdTc2dFd6YlRVNVliU0gwS0ZlRlpiNkNa?= =?utf-8?B?L0V5UTg4WHBYYmdMWE1DYUMxdUhma2p4eS9kRnR6ZXJNTVNOd0pGNklGTTVj?= =?utf-8?B?aEwveE5jdGRDSHhCZDcxQVZ4M1A4dXgycHJyZVFRK0dMcjFvd1N3enE3K1RQ?= =?utf-8?B?dnpDNEFidTBKc2F3Q3BvWHZMR3FBcHpjU21SeFgvU3dyREc0MHdURHBuNVJQ?= =?utf-8?B?YklFWFZ4b3gwUUo2QmVNNTNUalFoamVWcnBxNStZY0tvbWthZzdEMy9LU0xU?= =?utf-8?B?cnZkM0FlK3VBOEliMzFRSU83TWx6S1UyRmV0cW0wRnNpNEM3MjJsR2EzN1E5?= =?utf-8?B?L2dmakFYSXI3K2F1TkU5M25iR1l1WTVPSENnOFNIeVVMSXpaekFiQll4aEVz?= =?utf-8?B?UVRLZTNvTk1VWHVXVkZJL041R3UyUWxUY0U2cEVaMk1KbW1DNDJraVRQekZz?= =?utf-8?B?cUNzM3V4cUw5aC9tMi85MVJWTnVOckdMWmpIWHdjNFh1OU1uSDEzYzVhUi8r?= =?utf-8?B?MGp3YlpOMDRieElUZklMZGhKRUVuYWhmaTl5TG5MRHBacUhRalhkNW5GckF4?= =?utf-8?B?YjBWaVNkUUV1bzhDUDI3a3VPUUk0OXN4a21IUkpGNVZrcy9ML2JnTXpTQkNE?= =?utf-8?B?ZXczcUJnL2ZMaFp4R1hqUlVtZXQvUllYcENEMFZUSUJvek1QTWVWTjRKZDQ4?= =?utf-8?B?bG5KdzQvNkRPcElFL1V3WEZ5OTdOczZpZDNvU0xDOTVXeVFnMEliSGVoczlk?= =?utf-8?B?WENCV3UvUHU5cFY2Z04yZnhqNkZxbDZpZ1pucGI1OEdOUk55TyttbHl4L1Zm?= =?utf-8?B?Q1J6RFpWUTZnTzJIK0R2cG94L2xWMzJnTGlObW5Vek14bkhqWlorMmRHeW00?= =?utf-8?B?ZXRjQkoxWlU2a29nVFFibWVsalVTL2xKSlZlVVF2TE1ELzY2UU9YbTRKMm9k?= =?utf-8?B?WW14RmxGUG9WRENCTjBWaWphZmVkaXNtV1lzYkUzd09kVTl0QndCQm1EZFJG?= =?utf-8?Q?lFYNPzyKk4Ka7PEaT1tQAnI=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1c0b61b5-8b6b-4158-a9ab-08d9d45782cb X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:37:37.2113 (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: OBNud9C9YDTRhJgPf5FueomI4cVVDLwIt5KxVRgBCMFyBc5G6sFRR3T1exHsO/bRUpHExcNPHTLco7IaX1NJoQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6477 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832689438100001 Content-Type: text/plain; charset="utf-8" When a page table ends up with all contiguous entries (including all identical attributes), it can be replaced by a superpage entry at the next higher level. The page table itself can then be scheduled for freeing. Signed-off-by: Jan Beulich --- Unlike the freeing of all-empty page tables, this causes quite a bit of back and forth for PV domains, due to their mapping/unmapping of pages when they get converted to/from being page tables. It may therefore be worth considering to delay re-coalescing a little, to avoid doing so when the superpage would otherwise get split again pretty soon. But I think this would better be the subject of a separate change anyway. Of course this could also be helped by more "aware" kernel side behavior: They could avoid immediately mapping freed page tables writable again, in anticipation of re-using that same page for another page table elsewhere. --- v3: New. --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -81,7 +81,8 @@ static union amd_iommu_pte set_iommu_pte unsigned long dfn, unsigned long next_mfn, unsigned int level, - bool iw, bool ir) + bool iw, bool ir, + bool *contig) { union amd_iommu_pte *table, *pde, old; =20 @@ -94,11 +95,15 @@ static union amd_iommu_pte set_iommu_pte old.iw !=3D iw || old.ir !=3D ir ) { set_iommu_pde_present(pde, next_mfn, 0, iw, ir); - pt_update_contig_markers(&table->raw, pfn_to_pde_idx(dfn, level), - level, PTE_kind_leaf); + *contig =3D pt_update_contig_markers(&table->raw, + pfn_to_pde_idx(dfn, level), + level, PTE_kind_leaf); } else + { old.pr =3D false; /* signal "no change" to the caller */ + *contig =3D false; + } =20 unmap_domain_page(table); =20 @@ -346,6 +351,7 @@ int amd_iommu_map_page(struct domain *d, { struct domain_iommu *hd =3D dom_iommu(d); unsigned int level =3D (IOMMUF_order(flags) / PTE_PER_TABLE_SHIFT) + 1; + bool contig; int rc; unsigned long pt_mfn =3D 0; union amd_iommu_pte old; @@ -386,8 +392,26 @@ int amd_iommu_map_page(struct domain *d, =20 /* Install mapping */ old =3D set_iommu_pte_present(pt_mfn, dfn_x(dfn), mfn_x(mfn), level, - (flags & IOMMUF_writable), - (flags & IOMMUF_readable)); + flags & IOMMUF_writable, + flags & IOMMUF_readable, &contig); + + while ( unlikely(contig) && ++level < hd->arch.amd.paging_mode ) + { + struct page_info *pg =3D mfn_to_page(_mfn(pt_mfn)); + unsigned long next_mfn; + + if ( iommu_pde_from_dfn(d, dfn_x(dfn), level, &pt_mfn, flush_flags, + false) ) + BUG(); + BUG_ON(!pt_mfn); + + next_mfn =3D mfn_x(mfn) & (~0UL << (PTE_PER_TABLE_SHIFT * (level -= 1))); + set_iommu_pte_present(pt_mfn, dfn_x(dfn), next_mfn, level, + flags & IOMMUF_writable, + flags & IOMMUF_readable, &contig); + *flush_flags |=3D IOMMU_FLUSHF_modified | IOMMU_FLUSHF_all; + iommu_queue_free_pgtable(d, pg); + } =20 spin_unlock(&hd->arch.mapping_lock); =20 From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832746; cv=pass; d=zohomail.com; s=zohoarc; b=Vf0LA9t/X7GxUJYvhaOgxDVPBA8OMeZXEPgR3z1FbY+zPow7Iz5TcES8mE9Ckbca0Fo3cAyhRUmK+TGAMQ/NtMvhJSNdPDOuSlSKYMURC/Lj3MsDMhuydK7BP4l5j7Z9l0IkRaa+OoBuoTpxgpNJj3JIMr/JT1jjfy1penMUke8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832746; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=tiK4Py7T+iWHZozg71IXWaPgjEgLZSxpxNyWGT8sGvA=; b=NyfQq5rBV7kffag2s2FHmRmh3DmuyDrmy1oy/I2IS0hhdSTrSpjuNbHwVe8pGWJgLHJsxDUzxPOOTxy007YnuBiDw/MYuHpP2Uq2RJ7du/uq6StnMf8mWN3SuUOXVNr/ESHmd+fJh9LlomJGtAd+tkQOzgMBvCN5G3ks04VTzo0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1641832746435112.42730605701763; Mon, 10 Jan 2022 08:39:06 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255500.437846 (Exim 4.92) (envelope-from ) id 1n6xgS-0007V6-0e; Mon, 10 Jan 2022 16:38:12 +0000 Received: by outflank-mailman (output) from mailman id 255500.437846; Mon, 10 Jan 2022 16:38:11 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xgR-0007Uz-S0; Mon, 10 Jan 2022 16:38:11 +0000 Received: by outflank-mailman (input) for mailman id 255500; Mon, 10 Jan 2022 16:38:10 +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 1n6xgQ-0007SV-Az for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:38:10 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id b1dc0a9f-7233-11ec-81c1-a30af7de8005; Mon, 10 Jan 2022 17:38:09 +0100 (CET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01lp2052.outbound.protection.outlook.com [104.47.1.52]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-17-4_F9siGPOn-M_PM5_YDU_A-1; Mon, 10 Jan 2022 17:38:08 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VE1PR04MB6477.eurprd04.prod.outlook.com (2603:10a6:803:11e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.9; Mon, 10 Jan 2022 16:38:07 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:38:07 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: b1dc0a9f-7233-11ec-81c1-a30af7de8005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832689; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tiK4Py7T+iWHZozg71IXWaPgjEgLZSxpxNyWGT8sGvA=; b=mNPofTockME7AvQUKBAVb/nyrTnpTACf81eRu1fSPNfGOBLDXPcvEd+TfKyUjRBP9nP74w e4fyXmldVoyqxS7a/S4+uNadrhkDjlk90MjuP1VHoqxdmqlwP/mrV0gDAnOmXPNFySfS5O KRJZSRrZ8wA7zpdXKhe3fnEKF1QPrv0= X-MC-Unique: 4_F9siGPOn-M_PM5_YDU_A-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kOui2ndF3KBUf9/TkXp6ob02hXF+LCN8R4DilXupRSz0AXjBgPo/T2mmuSaLKeE4x22tudJi4MFKFglVh/nRR8WLFSpmE8H4A/8h+GPICaubQESR9sC8/Vikt5ErTFAlOfH6bl2V0g4umhw/EafCDxkX0zzdhCVqrDt+sHKq7UKsI+AYYiqI2Aw0MeuAfCcJUj6wVjIRQfbjGX4g7WgD0LLakunIW6oUkdNLJ+GxT3N5eEl+I4JIQt+y/4Y9DwJB8ldvlI8Uxzml4+5B85GTsJ8C2q5woAGage/7QmhmyN9l+lIHQh4tC/CVbS3+EUjEBFQz8F9i9xBMDmtTlvw4vw== 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=tiK4Py7T+iWHZozg71IXWaPgjEgLZSxpxNyWGT8sGvA=; b=TBal6CY2RW/v1FhhLKzJjHqf5adAhDC+CRfHqkwQCOuntr6f9LS6gpNIjLacttMXYvF6KhgYBv2xQPEECiZ1H5KGKpo03JgvxA0is6iA2o8ZcI3SYDGBDVTcbJqoV1zihxS0++ZegcY1pMzbNqucEHhqdC4cwDrmL9zg+X7JGV1gJZJwaVWzWkeRhi5YOoTfXe7uXcLugYkTtgSsf505xkME5O44LSDN9XiA222pywCL8uWlw3RO519BVWIF3GXLX0kjM1cWW9Zb1Ua17gbu8IFZuRVS2AcW559hSYbN+CtPkxbSfcWIvRXlL2x1NQmk1gl2+n4sz14aOcAcudJ0lg== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <58e8871c-0d5e-ec32-74ac-9137e8f2ce41@suse.com> Date: Mon, 10 Jan 2022 17:38:05 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 22/23] VT-d: replace all-contiguous page tables by superpage mappings Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Kevin Tian References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS9PR06CA0084.eurprd06.prod.outlook.com (2603:10a6:20b:464::6) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c2451232-f7f0-47a2-4c3b-08d9d457948b X-MS-TrafficTypeDiagnostic: VE1PR04MB6477:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gkFnOfMOgRwLP7RFCv7pa7SLHbnEwq50pi3c5R0M+YrdMTYFsTRaOOu7iEp8uBx9FbJ0mceWo9mmGIhOVN8Lftp/ko8KNpP7gvO2LJcK87MU2Pj8ktSFXf1DFXHGkp5h880rG5Pp8LkB0QQW6wvfmR0u77/USY9iAWpH1mgC4JAiJwLX4qRCZmT1KaoH8x/0ZRqu2sLdA165lll65ZCKJhNgW6fc7pc224K1eC578AEFkg21grdJB1tOv0YCNRR8oP6lBQJoip+o3S+TQ8RFeSbPLXKh2CPwRIFPB8r71EL9gin1mrzkXHpYkTEhRvTs0JE5hgQPCQ6Z9Bo7lpFlxZuZA6Jvx0IKte2WihjkyTSb7pW5Sb2uUoIR2MX2v7hj3olFY1NkOsYHV+CyyE975mPuzCtt03x5tLd7aF9JgQNuST5hRA3JJTCp4LK9uF34mgLwHumRCU6+rviEPUJpMdzShPYsGO+NoFsBlWXXJtaR9ud22oIMYH5P/uejBK+GTKfsVgS9rU21yB9Li08T61rPZJLMcS0oP+I4YaUXPA5OmcXy6e+1uTwabZAKtq/i1LjCqGWi2VP8kFxH8itK6wYLKmk6BfnkOjbNtZz5lQOAAmCd6XHQmNVCNWass+1uWXM6ssPijws0gLoUFGzOxdLTVE7SQt32lls+kuvklnJUbuM9rjLIdLGzWNSICaf+XEH6kEpYFfCdrhW3gXji2ecD4HsEsWInH6HR54CzqYw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(6506007)(66556008)(66476007)(2906002)(66946007)(4326008)(38100700002)(54906003)(5660300002)(316002)(83380400001)(31696002)(508600001)(6486002)(6916009)(8936002)(86362001)(36756003)(8676002)(6512007)(31686004)(186003)(2616005)(26005)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SmRBeCs3aEYzR0hsVzJjT2FLTUZvK3c2ZkFsL2ttcCs3d1kyWS9kWWtDS0sw?= =?utf-8?B?ckl1dVE0OEgrazI0bnYydE5OY09MS0owcTZLUmwxVkR0aU9DUDBXODlBc041?= =?utf-8?B?WGZ6V0tBTHEwS3F6MEEzOHA5QUt2aHlqNURZbUtydHY3VkViekVOQjJ5UnFr?= =?utf-8?B?S3NzcWpkb2ljOVJycmdxeWNmcnJnZ1RVU1cvRXpneUJ0NDl3TkJPeFN4SEMr?= =?utf-8?B?MnFUSFltS2lJY29PMVlNc3VkaWs4TTVJQ0lFTFlNcGNHU1ZDODNhcDlad3h4?= =?utf-8?B?cm9mZjMrK21PMmI5UU9YUnZPbktnc1RqY1k3UU9TSjhrdlFoY3Eway91WlBP?= =?utf-8?B?S3RLdDJQKy8zQXBiZTJFcXBWUncrNXp0RE9mazdMRW4wVERCZXRNTVFJNGJO?= =?utf-8?B?ZGpUSytFV20zZGY2RGZVbWovTnVDc01MK2xjQnMyMHF6UzRVV0hhcithZWt1?= =?utf-8?B?aUtZMk5rVlUxU1g4OFhHeWFUdUZtaVlGQ000dXBkUy94YkMwdjJSRlRvK0Rp?= =?utf-8?B?dExLUHJXQXEva28zQ0tLSkFkblM1Z1gyUCtWbXdsYkx6SEtyWkdNRWttWUt1?= =?utf-8?B?cU91Z014NXRZbFZJTnpGZm1xeWJ2WHJzQmNpeTVKbkZHWmg1aGxNV3NFc3Zy?= =?utf-8?B?Tkh0ZzFVZTRQb2FPTFVRb04xbHFtZlU0Slh3R2xibnVPcjc3Vm9kb2YySEVw?= =?utf-8?B?VFl5cGt4ZkZZV0QwTVM1N0JOZFdBSDk0RCtxMXorVEhYbE9OOHZoeUpJNjNa?= =?utf-8?B?ZUJiN3B5bnJpQ0c3VGI5d1lkaS9WaXRwVFh1WkV4cjNpSE0zZ00yc25MRjBK?= =?utf-8?B?R2tJS1V5TzBKLzJPUDJjMXdzVVV0SzlXOGhZYzZvN3dJVko2dnBOWjh1am5Z?= =?utf-8?B?RzYxZjRVaGU5am1yVjhxT3YzNnpLb2FEZEtnZCtwVFd1Y1hyQmRVeXIxZG1Z?= =?utf-8?B?OW5qcFJQeXEwMHVGZWhCZTFEems5MlEzQTFrQlJRZXFzUnIrb1JLZHlBVUVv?= =?utf-8?B?V3ZUbFBDdzV1MUtKV2VOSk1NN3FCS0dWSndFTW9LZitSZ3JvSTR2V3g4bzYr?= =?utf-8?B?ZDkwVjRvbWsvQmlHaEJvMzYvQVJwRnVRNnRqQ1d5YzB4WlV5V3lyVEY4MTBT?= =?utf-8?B?NExlb3RGeEViQS9UampoN3hxeW9uTDZHZEV4TGhoRjdYZnF0cGQ4RklIQThu?= =?utf-8?B?V1BUeVUrdHVoUHlPYXdzOVVmRGxhbmVsdC83NVVKbDRpcDA5eWkxOHZTbSsr?= =?utf-8?B?Z0hoUkV3RC9HSzc1OXVwZnNHN2ZjaURhOW13SU5laXpmZDczM3prcFE0OFd2?= =?utf-8?B?U1hja3JZOVhjYVdkS09hNEo2TC83ZS9FOWdMNGlmVGJya2JDVGVVNkRUODlh?= =?utf-8?B?N0g4bEJlT3h0ZXlQeXgwUnRzTFFHd3RZZmU2dUl0MUNFTnlKQWUxOVBQa1Fi?= =?utf-8?B?VG1nYkkvVStvTUFQUldLNHBqQ1NSbkNNWTdSWnp1bmtXOXZsMmQ1SzFIelFB?= =?utf-8?B?M09BQzFrR01Hb3YvczJjNFFBUEcrUFV2T0pKMU8xaTFZQktuQUlCa1gydjZa?= =?utf-8?B?OXRYWTg0RU1wckJ1d2FZbTRGM3FHRFhwNllCMkN6UHgxVHRuYTdnQVpML25n?= =?utf-8?B?THFHcnFhM3JXUi92UWQ0ZURWTHVJZzZVUVlUL1k3TEVmR08yc0RVdGtvWVM0?= =?utf-8?B?aG5UazREODFMTFJaK2lmL3FoOGx5SUZhWlV3T1lOdk5mTG81UnZnMjdjcGJr?= =?utf-8?B?MXZWcWs4TDJMcU9JaDdpUWVWQW1FejJFazZGekt2V3d2TUdwbm85M3E5b3c4?= =?utf-8?B?V0lXWEt2a0pkUmxacmMvQ1Q0UFRvSXM3dE5UQzZ4aUVsd1E0WE9nMStVVVlD?= =?utf-8?B?c0RzQVpsREV3dTJ2c2RZUzVEemREQytsY01qSDJsL3cvbldVeWdSQ3l3cjhP?= =?utf-8?B?SzdHUzBFcitNNS96Ym51NC9OL2dySmJVR255WURPUnlaUit6aXVqMWxhMk4r?= =?utf-8?B?Sjl2OHpha2hNdmgrRzU2UmtTM01meUppSXJlWGNxVHN5QVAyMkRHUjd3QUNo?= =?utf-8?B?NFFXRmdRNklNODVwMEJlQjZORTRiVzdveEM1eDhOMzVRSk9pT0F0S0pDSFBL?= =?utf-8?B?eEl4clpLVFd0QW1ZTC9KS3U2djFMQnMxeVdYMlA1aWhnQjI4Mm5uUnAra25V?= =?utf-8?Q?ZUgE760ewtwMSH/zQJ7Q5y0=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: c2451232-f7f0-47a2-4c3b-08d9d457948b X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:38:06.9995 (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: S+uoNsBG71bn5ZxG0iJs55QAO/5yJhn8q8HYLQQgdji5npFZGLbgTX7MpKctrF+SC2VHO0vozm6PiPEYx7pVsg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR04MB6477 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832747842100001 Content-Type: text/plain; charset="utf-8" When a page table ends up with all contiguous entries (including all identical attributes), it can be replaced by a superpage entry at the next higher level. The page table itself can then be scheduled for freeing. The adjustment to LEVEL_MASK is merely to avoid leaving a latent trap for whenever we (and obviously hardware) start supporting 512G mappings. Signed-off-by: Jan Beulich --- Unlike the freeing of all-empty page tables, this causes quite a bit of back and forth for PV domains, due to their mapping/unmapping of pages when they get converted to/from being page tables. It may therefore be worth considering to delay re-coalescing a little, to avoid doing so when the superpage would otherwise get split again pretty soon. But I think this would better be the subject of a separate change anyway. Of course this could also be helped by more "aware" kernel side behavior: They could avoid immediately mapping freed page tables writable again, in anticipation of re-using that same page for another page table elsewhere. --- v3: New. --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2071,14 +2071,35 @@ static int __must_check intel_iommu_map_ * While the (ab)use of PTE_kind_table here allows to save some work in * the function, the main motivation for it is that it avoids a so far * unexplained hang during boot (while preparing Dom0) on a Westmere - * based laptop. + * based laptop. This also has the intended effect of terminating the + * loop when super pages aren't supported anymore at the next level. */ - pt_update_contig_markers(&page->val, - address_level_offset(dfn_to_daddr(dfn), level= ), - level, - (hd->platform_ops->page_sizes & - (1UL << level_to_offset_bits(level + 1)) - ? PTE_kind_leaf : PTE_kind_table)); + while ( pt_update_contig_markers(&page->val, + address_level_offset(dfn_to_daddr(dfn= ), level), + level, + (hd->platform_ops->page_sizes & + (1UL << level_to_offset_bits(level += 1)) + ? PTE_kind_leaf : PTE_kind_table)) ) + { + struct page_info *pg =3D maddr_to_page(pg_maddr); + + unmap_vtd_domain_page(page); + + new.val &=3D ~(LEVEL_MASK << level_to_offset_bits(level)); + dma_set_pte_superpage(new); + + pg_maddr =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), ++level, + flush_flags, false); + BUG_ON(pg_maddr < PAGE_SIZE); + + page =3D map_vtd_domain_page(pg_maddr); + pte =3D &page[address_level_offset(dfn_to_daddr(dfn), level)]; + *pte =3D new; + iommu_sync_cache(pte, sizeof(*pte)); + + *flush_flags |=3D IOMMU_FLUSHF_modified | IOMMU_FLUSHF_all; + iommu_queue_free_pgtable(d, pg); + } =20 spin_unlock(&hd->arch.mapping_lock); unmap_vtd_domain_page(page); --- a/xen/drivers/passthrough/vtd/iommu.h +++ b/xen/drivers/passthrough/vtd/iommu.h @@ -229,7 +229,7 @@ struct context_entry { =20 /* page table handling */ #define LEVEL_STRIDE (9) -#define LEVEL_MASK ((1 << LEVEL_STRIDE) - 1) +#define LEVEL_MASK (PTE_NUM - 1UL) #define PTE_NUM (1 << LEVEL_STRIDE) #define level_to_agaw(val) ((val) - 2) #define agaw_to_level(val) ((val) + 2) From nobody Fri Apr 26 17:04:19 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1641832734; cv=pass; d=zohomail.com; s=zohoarc; b=KocPjL0yG8Sloy1ZSGjwAHs4sgCRxsm+tJYJrtOah0quG8uxjwpGpVjObIx1mEBgbaQIAuehrmS9FnirVTGOrpRt/ef/13YAIjIlXpF/GClCWYJ8+5gp+W+e2tu8ZaTzf+dBlPAikTEWsQ07UZlg9PZfs4xKSbreMJO4TgBQihk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1641832734; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=97KazUwFBsNkQrAya4NCXyO8j9M+QQa3dDJrEHqAexY=; b=eK2ftR0baPoEVgj8HVJ2QMZweAKIRV7SdceJGDVCMRLEsmfUxTDLlcExb3QpZTZQ57EnOxm1eWo4LKlJbwFUiYM+n7XJ6quco93QoaJwusoWK93hp3ulaTLCEDl6S3MBSEsK1pLvB/KMf+z0IrsgpC7K/E2yOQMV8k+Yn+x38xk= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 164183273469952.1163834774286; Mon, 10 Jan 2022 08:38:54 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.255503.437857 (Exim 4.92) (envelope-from ) id 1n6xgt-00085r-8m; Mon, 10 Jan 2022 16:38:39 +0000 Received: by outflank-mailman (output) from mailman id 255503.437857; Mon, 10 Jan 2022 16:38:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1n6xgt-00085k-5M; Mon, 10 Jan 2022 16:38:39 +0000 Received: by outflank-mailman (input) for mailman id 255503; Mon, 10 Jan 2022 16:38:37 +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 1n6xgr-00081m-L3 for xen-devel@lists.xenproject.org; Mon, 10 Jan 2022 16:38:37 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id c21ae3c9-7233-11ec-9ce5-af14b9085ebd; Mon, 10 Jan 2022 17:38:36 +0100 (CET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2170.outbound.protection.outlook.com [104.47.17.170]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-20-gCby2cU-MuSOeORWtzizcA-1; Mon, 10 Jan 2022 17:38:35 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by VI1PR04MB5168.eurprd04.prod.outlook.com (2603:10a6:803:56::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.9; Mon, 10 Jan 2022 16:38:33 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::5951:a489:1cf0:19fe%6]) with mapi id 15.20.4867.011; Mon, 10 Jan 2022 16:38:33 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version 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: c21ae3c9-7233-11ec-9ce5-af14b9085ebd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1641832716; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=97KazUwFBsNkQrAya4NCXyO8j9M+QQa3dDJrEHqAexY=; b=MKH/w1aKZMa0UqPWlOkdULDxInifHJSWM0Ojq+tIwMv+htpyg+48ySVwjdY8yGLLzwrvpR 5nsTVjuYbep277m2fIDEp5Si0C1ajQBKNcBZrpRLOCezXZIRwflILpj600nmTAMtb2Zore nY37CtdhztSxwIBNdjNf4sAyI2ymBY8= X-MC-Unique: gCby2cU-MuSOeORWtzizcA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K267DTvJe8m8dWOmIX0c7eBXKE3CmyYZ545KLDeLXzsmnWF4sykc2dilqv3rP/pHIBz/VTLrvCFkSM0RZGq3OWmDH6rBcpZBdeLdTRc8J3FcAqQhu9oYPk05CZMt5zsC0sGg0KWwBy1bjIjTP+KTNx/wc4hTykp5qAkJmtHkJJPpmNZ7EkGpCpu0hdWWn2YH5UT5I30OhwDnqAeZYNK4XJNKUwHqwsxg7qdr6W9pObyLvW1f+ZljJa0LEMbmaa5ffItUvKFT+RxCdPhyad64UoO1vnA3PCEt+MTifocsBTCzg9D4ShSb76BxCf7tHDr8TDLdyaJILD7P+TqIQUho/A== 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=97KazUwFBsNkQrAya4NCXyO8j9M+QQa3dDJrEHqAexY=; b=cHfol603NA8IMzoZuUAp+nZ0I3NV50r5bZkxwBunL13ThGrCqN1dTODJ45cGvnoQngNMEddsxzQN+2Li1q0A8Plnl+NvJiIjensiN0XMw/3F64AQ5uvtKcLBCzxS5YOZ3d8sPhpVmwzICxoSt9FqUTaEww6QHZhfDkMJW0HVywqTIan9A4T04um9QRFtgoXP3NQz4V4LDC/iOtBrXqAWOXwXn4V7qLz8yu/i1IoK6R44qj04sGjAnYLxy8eMjkwOfklWos8YO9ebpU/oBAPsGalbZi5lio6hR8IIf41vQ1sg/BeiM0sWCdqDuno8SCnkExAbEAwce/SEg7wg7dEbIQ== 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 Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 10 Jan 2022 17:38:31 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: [PATCH v3 23/23] IOMMU/x86: add perf counters for page table splitting / coalescing Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= , Kevin Tian References: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> In-Reply-To: <76cb9f26-e316-98a2-b1ba-e51e3d20f335@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM5PR0602CA0020.eurprd06.prod.outlook.com (2603:10a6:203:a3::30) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9b9832db-e6cc-4391-03de-08d9d457a459 X-MS-TrafficTypeDiagnostic: VI1PR04MB5168:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2399; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: D3Zv0S7mKEZg9PIiNTQvM2GgtRLbIemWYsxZk7kNh1qpc+yqyto+c4aTxx07O0JmYhpUaSz2ShFzchaRUEHpUhyi2Dh90JrV3oAXCxCGNWjbbZQQQQFoPnWK1enM29B+Oc9zPjAp5O+tSetUvUhN+9Utre7h66qcrrJWLWYyl8JxzrN8ysnEWwE90wijxKfsBYLQfWDPZeq3/4yZ5QlcGe5vpwe0onBLkAiuhbCQX1qh5fMDxHkaDawjnBkXyr80oXrUFCyIHXO0uGWWSTZvC22kutE14CYCPFIM+GCmM4K0EjIh4+S7phSz6dYnK/gScunq4HjWbp0BSgI8lGuxAvgqiEFmuMHlmP3rktrkEKW7Zuezdf1yINo60F1wXJYh7HCIga3+i2x63lL+tNYqonakm8ZbMotZ0ph5qRCubNXUWivobHl2yWBYk2JgiBGpwqBMTCwUWe6WpKS5V3ZytxnQN//qS4N9c25iCUWBLwhyPN5dsWUYXXkc1efQ2BX7dZll71ze0K8s2HID/10fGNUhMN6oWLL1ICynIEUfy4l2KLEZJcoZaZC00di291DvhLwBz78oCzFyB2wb4Cnn9UtOlNAyB5fVsE9/zazfhv1uWuKvt0fbqXu1fv/dXQjuNnnVattH5mWnPIXCtJJv2uXrHGGd9p+YPvyPHI5VlByv3HkJBUnYmgW4E1N/Xj7Cpqh2o1kjFJAlaZCo5/2lii12kdpnTpd7zXLqGFsJeMw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(31696002)(36756003)(38100700002)(2616005)(2906002)(5660300002)(26005)(4326008)(8676002)(54906003)(508600001)(83380400001)(6506007)(6486002)(66476007)(66946007)(66556008)(31686004)(86362001)(316002)(6512007)(186003)(8936002)(6916009)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZVdoZldOSWFscGNVdG9OdUhRNGFiTUkrek9FK0xYaUpyUDNhVSt6Y3k5K1JZ?= =?utf-8?B?aTZuN3JCMkozNjJVaSt5VDNSeUNqYjRVSDZGU0ZENjA4YUlPZlI2QjA2TFl6?= =?utf-8?B?NzY4RVFpbnNyQmZFbFV3YTJveDdpdm93dFFBa0hic2NuZzNZWlc4TDViSzEy?= =?utf-8?B?UVgveTZBRzdYaDJNeERIT241aW8yV0Rqc01MNkFYc3FrM1UrUTFsVExwRXNW?= =?utf-8?B?NkU1dEpFdkprYjFMNWJNMzBWemNKL21INllhREpxOUZ1ak5aeVh0VGE5YzFE?= =?utf-8?B?T01IellDcWo2aHgvRW54bTJOVmVZVmhNVkVzTEhuMTVWS0M1OEIvREFJUnAz?= =?utf-8?B?TlpFWlFrenRXRzRYZDArT3IvdWZIQXhrRzU5WWUvc0VlZFhoUHdBWHdXd291?= =?utf-8?B?NGhMSzg1R0pBalV4ckJ4UUkzL3Rzc05ka2tFWG92YkE3YmpkUUVYblBYVDVG?= =?utf-8?B?WklVVVg4VmtmUlI4Z3AxYUhWTllmeU9OSW4vSXgydlkxdW1yNEhQUmpnWkJu?= =?utf-8?B?NnBPTm5Qa0EweklzOGJJZWt0ZUpwTnpCeWtxUGw0MmMzcEd2SE5MZTErMDlE?= =?utf-8?B?eWdreW42aUZDOE5jaThCWEVkQXh4U1pJaFZVSkxmQW92aU5IclZROERaYktJ?= =?utf-8?B?V3F4OU9UVXA1SDB0Z0VpanF0ZHl3MlZiZmU0cmtVSlhQYTA2MXpSd0wrTzhj?= =?utf-8?B?TlpOSlQ4YlJZV3VxRnBuZG5sY2NTdHhGRURUbUg4K1VETUlQSy84dEhwcjBD?= =?utf-8?B?ZDNKTmlIdTB2NVJ3c1YzY25wd0RwbjVLWU9waHJ0UjIxZFVvZ0RjSlZmYUlr?= =?utf-8?B?ZUVqU1hTSFJqTUNCNTlQcDE3dGdwd1prczhXcXNqaDErVlVRV01oVGgwa0gr?= =?utf-8?B?TEQ1eVQrYkZmYlNDU3EyOVU1OVVqYXdtSXpxcTMxN2Z5b3hpRTdBdW5LdGtR?= =?utf-8?B?U3BpNmJVRXgvSHJzSXpFMEVLOHRHMjdzQlhkN2p0Z0wxek4rN3AxYWhmNDRY?= =?utf-8?B?NENZQmVFaUNTdmFiSE1SVnIwdktXSERwa3FUWXRiOGJoUTk1WHQ0cWNaS3R5?= =?utf-8?B?SlFJOGV1eVNxeXBUV0RRdWpyYXEvRGU4cmw2clVEdzFDNkVhVC9XY004aHdO?= =?utf-8?B?WXpLVUFPakpSM2NSbHFCQ0R3ZHdiaEM4WlgrWjdMNklwZUVvZnVRRmREMGFH?= =?utf-8?B?SWRSVWpEZmExR2pYWU9MUDJFU1dobXJ0MU1kdnlPVFZWaEtNcHR0aHlQNWhK?= =?utf-8?B?MkVFbklQMDYwaHB0MEU1YVpuSmtuOUZTRk0zRHdwcmtSeTBXNVQ4QUkzVXpB?= =?utf-8?B?U1RWRHIzZ2ZjSVV0M21SZjZwNXoyeWFQanpEcmkwRmRoM1NNK01pODFTeStF?= =?utf-8?B?NGk3SS9YeWRXMEdkaEF5UFdPNytFM29jNWl6Z3Rrd09BUURaOGpXZVdTWVF1?= =?utf-8?B?TlJ3SHJpcVVzNTRGYjlDeFI5Y3JienZndzJhek56UTkvcHJSWTlORjZjYWhV?= =?utf-8?B?M1dpZ1o4NGFWVzBqNnljZVJKWHVrUTI5TDF3VmQ1U0RMZElibWJ3VTZ3QjBv?= =?utf-8?B?cG9FaTdFVTFWWjN6WXBWRGFEazMxMm5uc3BTU0czMkQxRUZzT1dad2tCZUgw?= =?utf-8?B?elNaVE1qRnlVWEIwODVhRUlhZmtsY0tFWWwvL3FnOWJTYTVXNFFRSWhseDlw?= =?utf-8?B?cmdLSThnZ3pUa04wRTlSdi92K2FtWEJsK0R3R0Ntd2tra0hVN0t2eGtVdkpX?= =?utf-8?B?L2xPMU1BcmxLN2dCdmRTcnBFOXY2QTROYWtEOFlveituY3BRQkZ1NXFUU2Vr?= =?utf-8?B?UTBxUUdFanUvRDVZV2dtUTRGS3doU3cwMExjeEZhTGdoTnJtV0xBb3E0dzQz?= =?utf-8?B?NmR1Z3hqY0s0WFBYZHJreTZiVXBmNTJzLzRhTE1aNSs3VHZPZU5PNVQzcm1s?= =?utf-8?B?K3FOT3FUWnRNOTMveWROT2xOLzBkaWc5SnNqV1dkWUlucGRLTzlDbUVvbHNJ?= =?utf-8?B?NGlaTFZvTzY1TzNPNStpQWNZS09NV0V3Z3FhWmVveEd6RElqV09DaXpsZFZw?= =?utf-8?B?bFNMK1dkSjRSVE1Mc1FKeGJBUlhYQ3loN21MVERaZVcwREZ5eDFCODk1dDNL?= =?utf-8?B?SjhrZ2s3MHBHRWdtM25wWTZObFBEUVFIWU5BWjJ6cTdWVE1RZWRPSkpmYm0v?= =?utf-8?Q?7PH7l0Wz9kdx1xkwAZbWmZ8=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b9832db-e6cc-4391-03de-08d9d457a459 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jan 2022 16:38:33.5155 (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: MsNWg9I0/Z4ZZzeFY12tBFtgIW6/jdu0QZqvjm0efa4A7HuLFYuwoMjp62HrQpjJU8slOjF+ILst9ehfuNU7iw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB5168 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1641832735859100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jan Beulich Reviewed-by: Kevin tian --- v3: New. --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -283,6 +283,8 @@ static int iommu_pde_from_dfn(struct dom level, PTE_kind_table); =20 *flush_flags |=3D IOMMU_FLUSHF_modified; + + perfc_incr(iommu_pt_shatters); } =20 /* Install lower level page table for non-present entries */ @@ -411,6 +413,7 @@ int amd_iommu_map_page(struct domain *d, flags & IOMMUF_readable, &contig); *flush_flags |=3D IOMMU_FLUSHF_modified | IOMMU_FLUSHF_all; iommu_queue_free_pgtable(d, pg); + perfc_incr(iommu_pt_coalesces); } =20 spin_unlock(&hd->arch.mapping_lock); @@ -471,6 +474,7 @@ int amd_iommu_unmap_page(struct domain * clear_iommu_pte_present(pt_mfn, dfn_x(dfn), level, &free); *flush_flags |=3D IOMMU_FLUSHF_all; iommu_queue_free_pgtable(d, pg); + perfc_incr(iommu_pt_coalesces); } } =20 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -451,6 +451,8 @@ static uint64_t addr_to_dma_page_maddr(s =20 if ( flush_flags ) *flush_flags |=3D IOMMU_FLUSHF_modified; + + perfc_incr(iommu_pt_shatters); } =20 write_atomic(&pte->val, new_pte.val); @@ -907,6 +909,7 @@ static int dma_pte_clear_one(struct doma =20 *flush_flags |=3D IOMMU_FLUSHF_all; iommu_queue_free_pgtable(domain, pg); + perfc_incr(iommu_pt_coalesces); } =20 spin_unlock(&hd->arch.mapping_lock); @@ -2099,6 +2102,7 @@ static int __must_check intel_iommu_map_ =20 *flush_flags |=3D IOMMU_FLUSHF_modified | IOMMU_FLUSHF_all; iommu_queue_free_pgtable(d, pg); + perfc_incr(iommu_pt_coalesces); } =20 spin_unlock(&hd->arch.mapping_lock); --- a/xen/arch/x86/include/asm/perfc_defn.h +++ b/xen/arch/x86/include/asm/perfc_defn.h @@ -125,4 +125,7 @@ PERFCOUNTER(realmode_exits, "vmexit =20 PERFCOUNTER(pauseloop_exits, "vmexits from Pause-Loop Detection") =20 +PERFCOUNTER(iommu_pt_shatters, "IOMMU page table shatters") +PERFCOUNTER(iommu_pt_coalesces, "IOMMU page table coalesces") + /*#endif*/ /* __XEN_PERFC_DEFN_H__ */