From nobody Mon May 13 22:08:31 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=1657025028; cv=pass; d=zohomail.com; s=zohoarc; b=RBFlZySggBjZDolrA/XRThfGlwXNf/+wCP6lAJbXGY1/x+xI1Z6w0sMNXWoPq3lvUJMov0QwGFWr53eJGSRbD3jVcGnIqNVWeYZ2DRHmCJkKO2G+MQBItt1qneih7BXzIfiuRah/ieKSWa1ANOhvZoKwhtsLunGll+gaqdhSrjU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025028; 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=2kE9tF4OKVANrzWwJZfuQmt3GkZdJOPqWNjkumzgidE=; b=Zoq8yjW2szrJbtRlZ7I1mCokDV1mIdvmkN06XQx5tV5qZGznGYK9mNvjVBzCzI4w7vR7hZGWJxxM7MAr1ye5HFOiAUaiI/dBatmQyliEEsrgECiZwhVy5NCxCS64aSvMjCU0f5AHO1ZMDVb8CVmrQB6pTSlHnaoU+oCDPkoRg8k= 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 1657025028187947.717919930468; Tue, 5 Jul 2022 05:43:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361131.590453 (Exim 4.92) (envelope-from ) id 1o8htl-0001na-8V; Tue, 05 Jul 2022 12:43:25 +0000 Received: by outflank-mailman (output) from mailman id 361131.590453; Tue, 05 Jul 2022 12:43: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 1o8htl-0001nT-5Q; Tue, 05 Jul 2022 12:43:25 +0000 Received: by outflank-mailman (input) for mailman id 361131; Tue, 05 Jul 2022 12:43:24 +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 1o8htk-0001nN-11 for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:43:24 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2045.outbound.protection.outlook.com [40.107.104.45]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 0e0b6f54-fc60-11ec-bd2d-47488cf2e6aa; Tue, 05 Jul 2022 14:43:22 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB6065.eurprd04.prod.outlook.com (2603:10a6:208:139::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 12:43:20 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:43: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: 0e0b6f54-fc60-11ec-bd2d-47488cf2e6aa ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CENuYn1a5CC1/0q4tYgDbKb06/+uiip/Y6wq2RvaO2/k9cBa6wv5MX7NF4TebW01LZqLqpicjY1qGo9oBTPUs+hb5dMV5vCeVKVYgfuw81ZEQx5dbYdE8Q8UNrkiU8JynwvvtrpHrDSv/QzPHTEQuh8x6be6rPE3FDDZi3dEU/LKTgfhj21dnmlrI0R0yaFP/Oq8WbLGjgdkVWFG7+XfpZMnROC9x0CHO4euE9isac4JXsUbnafqXM1r1Te2rpA+p6qmDXssBJ7LM81Eg3xY57hMwOO5QYn8w6eN16/vACpQp1Fa1n885M5/tJd/+0F4K4vVhoNbOjZyqC+GoYXbZQ== 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=2kE9tF4OKVANrzWwJZfuQmt3GkZdJOPqWNjkumzgidE=; b=d3o3+cS+3VPOBjMM1d7m/NxT8OYuKC3u9lPtmdqA6NIXD7WwIJFRt4HHBkrz5UopNrhp982exh57LL2dz10d+oheM3Y9P9XOywTfUadZu9s3D23ouhVkfp/+pjZhSxjf67QbcVlIVMv8LKoIwEJxVmPcHuGMaayn4/pz1cqwoNGHGDSOX377rGGg0dFeS7qjoclVMknaVT0JBYrrfnZGR5yIRuVCl1FZAxEsR7x957ga+iYO4e50hD7xI8JKdTDTlEyaFgnxsGmlpI7dq7zf46tHVflK3mrKx/4Z8Mc8XyOOyecRcxjBcfdHBIKQGO85NzOtdBT6lHSzztIGbTx4gQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=2kE9tF4OKVANrzWwJZfuQmt3GkZdJOPqWNjkumzgidE=; b=rBDHCdjcB6JYTPGOa2yEaV2bDkVAEfjzQ2kFcJbCemD2hFTWDx1U4bGBPHLchpR0Ep/elR6oIf0MM1SrJIe2gBfQQ4ZK3Y8Py/cJbREy1JY0wHzuZoYXVUY03LizI42B4uZt0EV5EFIlvkCX/sW285Qp+Ki8rBB7ehrP2egR3aOn8a0wygY8kUd9BHdSug6EjVi/HEOujZiQxwrxaKSzGT4FGuVG/ZJz1KLJXH0kDMSEaqfXGoxA+UMwj03esoXi2Ci30mcHyRGxV7W+gYIfTFgv8Q0ApvR+5pmkEN/2VYkrvDLy4JW2I5viqveDrR8T4DUAQBAMkbSJuL5YWuC6zw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <3b3e1a15-f358-3095-87fc-c47843eff94a@suse.com> Date: Tue, 5 Jul 2022 14:43:19 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 01/14] iommu: add preemption support to iommu_{un,}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: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0083.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1f::21) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b6880204-5e4c-49e7-7585-08da5e83f11b X-MS-TrafficTypeDiagnostic: AM0PR04MB6065:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HvIA4oCjHZlVzsisnh7zCVojYSJaehvDZLGu/30RYv3t5W6O7B5h1RyrmdDgZgBO8FSMQS2RaR+3g9OXIuthQ0BcLb0FIVE6ok7W7keI2yJUG+FOKEgwguIVpROEqpfneHgGDVto2vVmuLdcE+82AGor7d9AsSag9F76N9o4PCi2pvDUZ+mmRgOrzd37NStDjiPgQ6FFNAwTP7Zgm74Q/zHtEn7zyN4hGX6Br5/mQ/7fBH4CPsM2EPnVFSMMxVLujrFfHQhw7FgSvLCnUlvXP/3jiBQLXZ4V7vN8xPwkROMTN60DX+NPzc8u7knuqsFMPBZFPFIhvCtt/xXPlzVGeJKo7DcuqmhcAhvzRDtuJTHGmaaIAYz7aVTPkuX89RxsETK428p2bXPjXIbCq5D7rraWYYZ3vJiWF9rrTiiAwZ4GhDgXQOZrTJLb/J6kldPzSGA+ggv3I+oNx1QCDTDQa2EelyBn0QwnZL/kWzgQHye8WUfb44KKmSNmkjRDseBj9kvKCmXUxcJGdoQmD8dPMmcWbBpVi0GZjMHgWguFDKpLR0HHR3aKLsgGtiM+4L0AimnFqOwRuVOxIssTm5uNtEywxFX7k0JCDOrEEI4pmgUc9kNouk1b+wTGa537dL9cBQB4996jsSeceT5ogu4RrtzxrR772xJyLHBiCgJME7ILnJnCysL7vwi2hyzuHnLvYz45RtU2iU+5J/3tAbahD2Nh9wsYKoYJ9XiVlvk/raFJPSX9+r/6JajpQpWnFPWB0bf2SiSiGMlK4Q6NMNkqKgDVfXHUhQrrw0WemZExu32cM/XSDmOL1mmTcT8IbW/Vm4dBfcfQJMZwiALHnm3Irq3ubkhvnkU4v14neBfHfmA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(396003)(136003)(376002)(39860400002)(346002)(366004)(83380400001)(31686004)(6506007)(36756003)(6486002)(478600001)(26005)(186003)(2616005)(6512007)(41300700001)(2906002)(31696002)(86362001)(54906003)(6916009)(4326008)(316002)(38100700002)(66476007)(66556008)(66946007)(8676002)(5660300002)(8936002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?T1FHLzlmQ0p4RFlrUTV1VWlOMGxpOXl5NHNKdDZ0Wk1GL3VjNXp3WEhIM0xs?= =?utf-8?B?TjZXaGsvZXZOS1FmK0RMcHh3Z0w2ZGd3WmRsQ0hOa1hIdlFvL0hhVHRoUEdN?= =?utf-8?B?K2JOdk5sdmJPZUhma0h1RVhoWG1qRGNBb29PU01PT0xJT0ZRRWFVNnhRTGhR?= =?utf-8?B?UHVKdG8zUndGdm5Db2lFcFpESUExdU1uYWRTNnFDWlBWUDNuaVJlOFR3ZkEy?= =?utf-8?B?U2RxWVBJb0tQa0RuN0xseW14aDBXZ0JKQ2xXUUtxajlXUXVXUWh4WXNhaGhq?= =?utf-8?B?MkpzUUlGVGFCVFlmWWxIeklpTnAwdGxocnV6U3BYYnJiaFNGZ1pIM2JoZzVE?= =?utf-8?B?UDVCTEJOYnNDUkVVQkRhYXlja090YVhGSFVRLzRFbUkvemRYM3UyQnU3bVpp?= =?utf-8?B?dEVxYktoRjF2VEdhUzNONm5oSGgyZWZqOS80NTNSVFg3U05BQXhad2lGNTJN?= =?utf-8?B?N3cwVDd2a0kydmZ0aXh0QXA3WU5NMk1vWnYvcXhmVmQ0eGhBZkVpM3dDNHNM?= =?utf-8?B?a0VUTFlpNVdJT1FlU2FlMHJlVFU0amcxcDgzalNVQmF6L0oxYVJCbjRXZEc2?= =?utf-8?B?VVZpakh0M045a0NBbmttOTd5am83bnp5b1JyRElEeitSTTVJNlBJckFUbkVT?= =?utf-8?B?c3FTWUtYNUhrdUkvVFhsenE2RDg5aUdGb2ZNVFpxN2Voc21IL0UraGVjc0lj?= =?utf-8?B?UGZIZHE1R2xrTUhBcFloL0p0Tk42T2FhcHY0ckJHY0I5RndYRHJtaEZldTFC?= =?utf-8?B?SG81UTBoVXg3WHJKQTVKbktUYjY4andQRjNIQmt6dlp6V1BlMFVMYTRMbjl2?= =?utf-8?B?N1grNURLL3NJZFFtQldzZ2VXdzV3a1V5NnNMMXRtRkQ5N1doaUwzYzBYdEJS?= =?utf-8?B?KzhiR1JXdGJsWnlUd3dYV25JZXRUb1NVVUJhMldKRm5HT2VJQWNvc0JmWjR0?= =?utf-8?B?cS9ubG5CTXU1TzMveFpIL2FSWjZpOEl4Z2xQQnRNNXdmWWd0cTFleFFGUFU1?= =?utf-8?B?N28yR05mZi83SmhDdzNnMHExTXlrVnI2Zk5kdWdQSmRMZ1hXQlZzaFk3Q2Z6?= =?utf-8?B?TDhDSi8rWWdOWUFCS0x0cThuczRCUllFdGx6L2dGdld6N01nNUhCcXRqM1FE?= =?utf-8?B?MUVxTDVaT2ZBanc1ZTgyb0txeFpiOUQyMkFHSUZIYVNpUnNxRHZRVTJIbFlo?= =?utf-8?B?R2YyK3IzR0t1WnpVcWVOVFJZaFpQbm5vT0pKcGxIekp3b3FzbkhsMlp2MUlj?= =?utf-8?B?VSswKzE3UWswWFY1WlV4ODhEcjNBRW9CeHF0M0VNWDJiMlNxY2V2LzUrNmhw?= =?utf-8?B?anIvMUdUVGpUNmxSNzdKaXBtMDBXNUdQakZVNmVqVjR0NmVGMEJ4N2JKSDJt?= =?utf-8?B?NkdqTE16dWJRbHNRdE5QTmhYb0RoRXhaaTQ5UWw5YzVTU25aMTdNQ0RyVmlU?= =?utf-8?B?aVRUaytZNGZsaHNwM3V1NjYwdU5hRWw1azQwUmhPTzRPVEViT3kzVnJnaitJ?= =?utf-8?B?bi9xSE8zSDV0aHJoYUtDdWM3ZjRseko3K05BRXV6UTlnUkFlQ0dHSzBYZ2Zh?= =?utf-8?B?cGFPZWZ6QkNmY2NqSExPWjZOOXp0KzB1cWRqN1N5cUdOSTJPR3liVk9TWURL?= =?utf-8?B?RWlrOGxZOEpyNVhPS1ZBZlZNMkVHV25vVXVlbkVCNzlpc2JTVkJNeXFKTFMv?= =?utf-8?B?b0dRWFVoT2Q5cjY0a3BhdFI4aWttY3ZQd3dGR1Z6N1ozcnBaZ29YdGxHWCt4?= =?utf-8?B?akFrSzlaNi83QTcvSHYzVlpicmFZSnlYTGt1NlRsZVlKcFN6M0huaGhJc1NI?= =?utf-8?B?NXRWLzN2bERCZU14bUJ2azk3K25JYjc4TlM2RTIwL1RFcTN1NjQrTzAzbEVW?= =?utf-8?B?V04zYzc3d3dOOUVMRHVwMVZXaWxsYlRiY1lLekFMaTlzNHUzNFNPalVHK05o?= =?utf-8?B?UEdXOWpmRXBqa204bHJsdlVaTzRLeWM1R2hVOTNtWGtKYVFiMWdib051dmJE?= =?utf-8?B?dWNHaVhMcHpaMTdnQmdNUDBVTXdKc1hUaVFqWjFJbFR4Q2FVSnpzOUNFWmk4?= =?utf-8?B?R2dPbkJRV3RpNlFyWStTUXN5azRJMHBMZmtsZm1uQzBrU3BJMkNyTjhsQ1JL?= =?utf-8?Q?2QaL110ZMU0RM4Zj6Nhrgt0yA?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b6880204-5e4c-49e7-7585-08da5e83f11b X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:43:20.6744 (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: 2l5S1V2py9wA3Enx4OlAGjgscuxKtgyiWXGYKe8uOidRvXDKGWm0HF8LqEIKnbbAcFF0POEtq+gNXA1NmtU6gQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB6065 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025029325100001 From: Roger Pau Monn=C3=A9 The loop in iommu_{,un}map() can be arbitrary large, and as such it needs to handle preemption. Introduce a new flag that signals whether the function should do preemption checks, returning the number of pages that have been processed in case a need for preemption was actually found. Note that the cleanup done in iommu_map() can now be incomplete if preemption has happened, and hence callers would need to take care of unmapping the whole range (ie: ranges already mapped by previously preempted calls). So far none of the callers care about having those ranges unmapped, so error handling in arch_iommu_hwdom_init() can be kept as-is. Note that iommu_legacy_{un,}map() are left without preemption handling: callers of those interfaces aren't going to modified to pass bigger chunks, and hence the functions won't be modified as they are legacy and uses should be replaced with iommu_{un,}map() instead if preemption is required. Signed-off-by: Roger Pau Monn=C3=A9 Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant --- v7: Integrate into series, with quite a few adjustments (beyond mere re- basing). --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -308,13 +308,13 @@ static unsigned int mapping_order(const return order; } =20 -int iommu_map(struct domain *d, dfn_t dfn0, mfn_t mfn0, - unsigned long page_count, unsigned int flags, - unsigned int *flush_flags) +long 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; + unsigned int order, j =3D 0; int rc =3D 0; =20 if ( !is_iommu_enabled(d) ) @@ -329,6 +329,11 @@ int iommu_map(struct domain *d, dfn_t df =20 order =3D mapping_order(hd, dfn, mfn, page_count - i); =20 + if ( (flags & IOMMUF_preempt) && + ((!(++j & 0xfff) && general_preempt_check()) || + i > LONG_MAX - (1UL << order)) ) + return i; + rc =3D iommu_call(hd->platform_ops, map_page, d, dfn, mfn, flags | IOMMUF_order(order), flush_flags); =20 @@ -341,7 +346,7 @@ int iommu_map(struct domain *d, dfn_t df d->domain_id, dfn_x(dfn), mfn_x(mfn), rc); =20 /* while statement to satisfy __must_check */ - while ( iommu_unmap(d, dfn0, i, flush_flags) ) + while ( iommu_unmap(d, dfn0, i, 0, flush_flags) ) break; =20 if ( !is_hardware_domain(d) ) @@ -365,7 +370,10 @@ int iommu_legacy_map(struct domain *d, d unsigned long page_count, unsigned int flags) { unsigned int flush_flags =3D 0; - int rc =3D iommu_map(d, dfn, mfn, page_count, flags, &flush_flags); + int rc; + + ASSERT(!(flags & IOMMUF_preempt)); + rc =3D iommu_map(d, dfn, mfn, page_count, flags, &flush_flags); =20 if ( !this_cpu(iommu_dont_flush_iotlb) && !rc ) rc =3D iommu_iotlb_flush(d, dfn, page_count, flush_flags); @@ -373,25 +381,33 @@ int iommu_legacy_map(struct domain *d, d return rc; } =20 -int iommu_unmap(struct domain *d, dfn_t dfn0, unsigned long page_count, - unsigned int *flush_flags) +long iommu_unmap(struct domain *d, dfn_t dfn0, 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; + unsigned int order, j =3D 0; int rc =3D 0; =20 if ( !is_iommu_enabled(d) ) return 0; =20 + ASSERT(!(flags & ~IOMMUF_preempt)); + for ( i =3D 0; i < page_count; i +=3D 1UL << order ) { dfn_t dfn =3D dfn_add(dfn0, i); int err; =20 order =3D mapping_order(hd, dfn, _mfn(0), page_count - i); + + if ( (flags & IOMMUF_preempt) && + ((!(++j & 0xfff) && general_preempt_check()) || + i > LONG_MAX - (1UL << order)) ) + return i; + err =3D iommu_call(hd->platform_ops, unmap_page, d, dfn, - order, flush_flags); + flags | IOMMUF_order(order), flush_flags); =20 if ( likely(!err) ) continue; @@ -425,7 +441,7 @@ int iommu_unmap(struct domain *d, dfn_t int iommu_legacy_unmap(struct domain *d, dfn_t dfn, unsigned long page_cou= nt) { unsigned int flush_flags =3D 0; - int rc =3D iommu_unmap(d, dfn, page_count, &flush_flags); + int rc =3D iommu_unmap(d, dfn, page_count, 0, &flush_flags); =20 if ( !this_cpu(iommu_dont_flush_iotlb) && !rc ) rc =3D iommu_iotlb_flush(d, dfn, page_count, flush_flags); --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -124,14 +124,15 @@ void arch_iommu_check_autotranslated_hwd void arch_iommu_hwdom_init(struct domain *d); =20 /* - * The following flags are passed to map operations and passed by lookup - * operations. + * The following flags are passed to map (applicable ones also to unmap) + * operations, while some are passed back by lookup operations. */ #define IOMMUF_order(n) ((n) & 0x3f) #define _IOMMUF_readable 6 #define IOMMUF_readable (1u<<_IOMMUF_readable) #define _IOMMUF_writable 7 #define IOMMUF_writable (1u<<_IOMMUF_writable) +#define IOMMUF_preempt (1u << 8) =20 /* * flush_flags: @@ -153,12 +154,18 @@ enum #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, - unsigned int *flush_flags); -int __must_check iommu_unmap(struct domain *d, dfn_t dfn, - unsigned long page_count, - unsigned int *flush_flags); +/* + * For both of these: Negative return values are error indicators. Zero + * indicates full successful completion of the request, while positive + * values indicate partial completion, which is possible only with + * IOMMUF_preempt passed in. + */ +long __must_check iommu_map(struct domain *d, dfn_t dfn, mfn_t mfn, + unsigned long page_count, unsigned int flags, + unsigned int *flush_flags); +long __must_check iommu_unmap(struct domain *d, dfn_t dfn, + unsigned long page_count, unsigned int flags, + unsigned int *flush_flags); =20 int __must_check iommu_legacy_map(struct domain *d, dfn_t dfn, mfn_t mfn, unsigned long page_count, From nobody Mon May 13 22:08:31 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=1657025067; cv=pass; d=zohomail.com; s=zohoarc; b=f72V9lt4eliYUt9Mq/ljbj7cWvxHHTyt5P41Pne9U9gUOdElINsxIDcI0XqEvXZfBWXiln3cS1WbdvW3YHX3GJWDGDSOu3lhlKmy7Y7JVR0hG74/xDF5n4VQRLJ8CfKvJgCeilRLWOwpCioNigPtPSjhU2nUVx/ab+XZNaJvasI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025067; 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=7AowG0vv4ZZNfRrLvkMOzyPPLjiwpxv5SlEjEedcSkM=; b=n1x6hIXJBLIcuSx6o7kWShRMeJDdiEKJh6lHkLI7Jez60THX8JInh8sUyF0igsnFdY9sXr1l0J/Uxv0x8c7ad8W0hJxMsLwZUEY2ANXh/qu6hGMdEof47O7aeFL5P0ZG0zV/H/BnKAkuCn04T+HernqppBzRdQ/oFTJD6jjrrTE= 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 1657025067511117.6486300242151; Tue, 5 Jul 2022 05:44:27 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361136.590464 (Exim 4.92) (envelope-from ) id 1o8huQ-0002Ky-Iz; Tue, 05 Jul 2022 12:44:06 +0000 Received: by outflank-mailman (output) from mailman id 361136.590464; Tue, 05 Jul 2022 12:44: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 1o8huQ-0002Kr-FD; Tue, 05 Jul 2022 12:44:06 +0000 Received: by outflank-mailman (input) for mailman id 361136; Tue, 05 Jul 2022 12:44:05 +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 1o8huO-0002H7-Os for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:44:05 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60075.outbound.protection.outlook.com [40.107.6.75]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 26652464-fc60-11ec-a8e4-439420d8e422; Tue, 05 Jul 2022 14:44:03 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB6PR0401MB2613.eurprd04.prod.outlook.com (2603:10a6:4:37::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 12:44:01 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:44: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: 26652464-fc60-11ec-a8e4-439420d8e422 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DP0e7rZrhRCpGDdGkPUcMJm7//LFvtq00xoN67ERTD4+sm7HwqgrbJPnhJC1mzWleHdffkaZ4ukpWF200fzOBrSVBO5NCUdHQiwsGetu4ixQuqQOPNFO1DXbtS6MKrw6YX74e4iasejJfxL481ezOspmElto8KYAm9n2AzMBEgELn8ufGVjLYH2NAEl/ooge0cwq8nLoADzdiMZ3h5dr2QYVIpEufzUOrdgMXmLeTfAa0RDd92JsDgXcKEzEsgde265jS6EyEaZWozXlhpVpfof3px9dYkjWgU3T6t4g39fo4M1JqU3VtskSd8I/oEULai41z9kBW/P1GwYpLM4Epw== 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=7AowG0vv4ZZNfRrLvkMOzyPPLjiwpxv5SlEjEedcSkM=; b=cwRHCCpn2g+GY22eSdl1KDoeWZlth3nwEn9lOSW1i8cacyeUtHt03FF19sfQXup/6IVbDFUDQY1pw4CPTJlGNkilBIScpfj/MgfugVszK8HK+Ad3Cs741Qbc02E4+e4kLUyYezgGXwzomB75QuxHTM0ajnwoPK+hIXlE8qyIKivdn+qo7q/bBDizcc7eg/qEXwL71BpTs45vOQdaUV/rYiK/XAKlKMtedjQ1OPV9vJiEprk3Hi8yi/a2uHW5IRTTPDarpjvIMFPT/+cNllIEN65rtvjgyr3hSMXxVjbUZVPGEd1jQDaMlIdfIjyKfNn6iHdT2C6/YxOEHhHWbmWa8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7AowG0vv4ZZNfRrLvkMOzyPPLjiwpxv5SlEjEedcSkM=; b=xPwpKA9I/3/V44DMvfkXIV1u+SX+PRqoxwidIKRqYdz55093yvSqcZ0X6jV2Gua2Rt/NvzPndNirqLHTzK25UqT2oLeNenPCK9zpunc5ZdA3t3yzVbbLJxyp3ltpyEJQWzHSjPuUSRyY1YnQe3aqOAbP4pRagtVxsGI26y3KMTYkvsWE8fUT/Z3Nvh1Rn1BlIPhSKP4JL4Q5CGwP9Ltbw+cCe7iEeP5+R+rA7Z0IMGrr1tRF+ZAFdijddQDU3ORbbGV+u33XS+lrTryQCztrbZQj+fq4cxCcv+VCR/9kbTzfXU3jiWNGNPyYDcFS51qFWclYDXpbPbqV6jqhCPXt+w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <1adca369-c911-e126-6b94-b26859a01e5f@suse.com> Date: Tue, 5 Jul 2022 14:44:00 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 02/14] 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: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0085.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1f::22) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 546c4a98-d0a3-4d4c-fd25-08da5e8409a2 X-MS-TrafficTypeDiagnostic: DB6PR0401MB2613:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: fJzdYLGHY22wgJ3efnWaCWf0Uj3YR6IHvO6AY2nsugIXj1/cUBaQ94sw68P2LCUqvi2B9c3LQcfs5huFhoZ4AkY+59Z/bMexlan6WzUqfvymeTdStKM3vBCNisnTz2fkhiAjipSUSgeFXOM5+fUM7iImttQN6NYNheA2pfVNRBJgIs9p9O9VCzZ7UopTHPLl8uhYKdu+qNRxSPKyM1ZmAu9egcuR+X0S1MT8WwuhWvGjWBArtJcxna1sP9xOJdUwxfLhIusKS9f9v9HRTf6tjQ1LUJvp84ZUvMRlGI7ohnRrv/h4w9lMlyzX0orZUAcLcwk7Qy90h1kDkJYCZyKgn8x+MuLPvC/ciJ9TDDqNMwWUOyl4vyPokUSCdWkW7mvN2uDlGierYtZNr4vDqA4WaYgpzyWYooDOkjaxezs0LbJGyIHdW5ys3Lm2p90pw+ir15kzSXfa30XPzBFX356ZpOOKrXZRPjz3gOhDL0UcOJ0bGT+P0IA5YPR6v1qstDPZzB+TMl78uq7RzMGEV0pBdX+4iW+pRi63ArmkW6OATMEgNGbkSUISvkO7troBbbn3wXHi8Jy8nDpnAoMb1UImfxSNAxMdfkXoMDDAhPRcK2eA1GIfSvJWLN3XTb5Ds43yCOiNJLWaoM51a5tj3879WuvPmFFL12CLCzcRX1V2KvI2dkAl/ZhPH1MTqZnwT9VqBifsLz1IRkGRP3/3DkmgkeAPImF1YMbONuqjY2kJZ4gIIFCmI0VwVUqYRuydPtLZh3+4N98Jpy1lw8Y95UxZXEpqY2QYD3SDpumpZQGeKhKClNdftIRKZcxyYDYO6x1mZPzZg4GfX7/1a74bAudVeQ8NH4fkD//oKPWXvhXs5t0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(136003)(376002)(396003)(366004)(39860400002)(346002)(8936002)(31696002)(38100700002)(6486002)(478600001)(86362001)(66946007)(4326008)(6512007)(8676002)(66476007)(30864003)(66556008)(5660300002)(2616005)(26005)(186003)(36756003)(316002)(6916009)(31686004)(54906003)(6506007)(41300700001)(83380400001)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VS9KSC90cVRPRllXZGxxS0xNTTh1Slp6Vm95MllJdi85ZFNSL21NWHRpU3B4?= =?utf-8?B?bjd4Sk8rb1V2L1F6YmlDWFNieXZkMk5rUnNCb2Y1NVB3dHRXT25xZDlGN25K?= =?utf-8?B?bkxUemZmblN4OHVZdEtIemdMZmNWMnZDdEljazZaSnVkaFFzaGdQY2hJWlI5?= =?utf-8?B?c0VyaGFHaHl6alBsTzI1VTRrVXRObG4wc1pHT0pxczcyVXNiRitiMFVhUkE3?= =?utf-8?B?Qjh4TFgrVjBBNTZJZ21DTExmNWJ4TjUyb1YxeEhsYlR4MVRMTGZHeVZGaGNT?= =?utf-8?B?Z3I3R0xTTkt2MTdXOG52MWNMN0RSK0JDKzBSNDdHdzJyOEw0dEkvSys0ZkI5?= =?utf-8?B?TTA0L1VJb0RsdXp2SmoxTEhLM2VheFRLZ3cwY0tCUitsa240amt5NnRpMDI3?= =?utf-8?B?dWRaTTJ4bklCb3JjYmpPd2FTeVRTNk40TzJtWG9QR2hhTzFNcUFLOG1UcDZV?= =?utf-8?B?NzhVMS9XemRBMzc2RFZMRE5MRGNzckJBSVoxbnVXTTlUaHFMNTlRbkMzTFJM?= =?utf-8?B?L2xpSUUwRmNoZFkxcEYzTjBjU2IrREdrQU1QWUtmVEw0TGVwV1FMeURVMlVh?= =?utf-8?B?cVhVb0s3NStWYjFydmJ0ZnBrVDlMVElYV2VvVU1IcXJhaEpHZEJGK3h2a1kr?= =?utf-8?B?S3FtbXkydVRTejMwR0VLTkxtZjVHd21USWtaUlZzS3l6Y2lpVnE5TXowT0JT?= =?utf-8?B?aU12cVpwd1VjVy9VVVdIc1VlMTQ4amYzZkdMalRLcWk4UHZiSkR1MTV1SkMw?= =?utf-8?B?TkdySkY0VFQ3djJnbFAybHljcW9ucEhKOFl6WldjMDNOS0NCWHlhcm9DOC85?= =?utf-8?B?cTVZS00vQ25SU280Q0JCcmF0bkZlcEFWYy9GbTlORzl4anJ1QXVWNENhajB2?= =?utf-8?B?Mk1YbWY3ejd1a3dnSUJYOCtMblVpUXNFdGJmTXkzbXR1bys2UlM4OW4rbkV5?= =?utf-8?B?U2FIZlJjYWMyMldqVTNNNGVEdWN6d1dYNldOTXJ5TFVyR3ppRGtCYWRCS0h6?= =?utf-8?B?eFBibGJVUElpcWVtWEwwQ3NpY1JSN0h5NGZ6YzJHK1MyOTg3K1FwWmVsYVpj?= =?utf-8?B?Z0xkVFlQdUZUeWpvOFlJdXA5czl1aCtKMzZJdXhRdDlWM1IwWEkxUUl5NFhU?= =?utf-8?B?b3FtQmhoN3dpR0pPbUs3MUd5cHVXaDF2OEIrZTFiWDJtU0dUM3JjTWhld3lG?= =?utf-8?B?aFFaMXJQaGZlclJtRFpsS00wRlN5Qi8rMW1JbVBkMElSRlFNRmNSWHhXWmk1?= =?utf-8?B?QlpsZ2ptaFozL1lJMU9kNkh6TzVYMncvbUtSWXpCRW1GZ2JrcUlGdFJlMEla?= =?utf-8?B?aE1nTmN3Y3BDbjdUNFdXdkpiWGxVT2xmRDl2MUtRSW44Zkd2VUNRdXlFMzVK?= =?utf-8?B?Tlp3WHdvL0V4V2hRM0FYOHNJTE44RVRtSEtmb1RGUkxrNk1xRlUvdVNyaFFz?= =?utf-8?B?cDhQdjk1eGlqaHdWVytDaEtGQThqUUh0OTZHSjdmdzYrZ3doMXJ3eE0zZXhi?= =?utf-8?B?akM5YVBpZDR0Z2tPQXB4Z0NndndULzJFRVdlU2JPRUxnaVNnODRObzlKSDJr?= =?utf-8?B?QnhVc0huTjM3VU9RTVpNZ29iSGVCSURqNm9oQUJPQXVXZnlmZGExR1JoMFpY?= =?utf-8?B?UFRBcWVGekJSdjB2Z0prQ2FkRW5JTW1QM21mNlErTStQcDhXeU1LVmwwMk9K?= =?utf-8?B?NHZ3emRjaExjNzQ2R3EyK3dBVk1vcytWSkhJZmp6MHV0UDI2UGhETTFUbXpj?= =?utf-8?B?KzVrTTdxRE9JbXpDaTg2dXBwbk1wem45QkxxMzZPTnYwS0czNzlZaE03Rzk1?= =?utf-8?B?OW5yUkpJOCtVRk1hMWwzWlZMZFV4NG43dHlzSVBoaHJZblI1R3JXcEJ3YlVm?= =?utf-8?B?ZWU2NWNMR2xqeksxdmI5NWM2SlM5L3ovbkdIUWV6U0FVdFVoN1BwaXFIa21F?= =?utf-8?B?bDRVeUhodk96ODNTSDQrTVFRRzYwcUN4QkNBNG9Oc2RreGZ1YzBOL2d6WGpa?= =?utf-8?B?eHZHdTZLWGdWQU9xcnA1V3lZQ1BXL3NPMzc0SU9kZndycVRob0NaOUprVUtH?= =?utf-8?B?S3kyb0xuVGpXQmRRMGZyVUdydHZ1VXFBS0ZieDc2aXJoRHpKbHZ4aXN0VmUr?= =?utf-8?Q?FmstIF5GipGjHA+s/Y0FG8J/o?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 546c4a98-d0a3-4d4c-fd25-08da5e8409a2 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:44:01.7967 (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: Sdn3wX+chzf50tOWYiG8qt9PdG0wIbEkUfMg9YIjzyrExDYincqxARlo06dVzmyQWdc61CNVuBwxX3EKRZD3/Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0401MB2613 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025069522100001 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 Reviewed-by: Paul Durrant --- Subsequently p2m_add_identity_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. Eventually we may want to overhaul this logic to use a rangeset based approach instead, punching holes into originally uniformly large-page- mapped regions. Doing so right here would first and foremost be yet more of a change. 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. --- v7: Restore after the prior verson having been reverted. Use preemption when calling iommu_map(). Correct log message in arch_iommu_hwdom_init(). 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, 0, flush_fl= ags) ) + 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,56 @@ 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) +{ + long rc; + mfn_t mfn =3D page_to_mfn(page); + + if ( !need_iommu_pt_sync(d) ) + return; + + while ( (rc =3D iommu_map(d, _dfn(mfn_x(mfn)), mfn, nr, + IOMMUF_readable | IOMMUF_writable | IOMMUF_pre= empt, + flush_flags)) > 0 ) + { + mfn_add(mfn, rc); + nr -=3D rc; + /* See comment below. */ + for ( ; rc--; ++page ) + { + ASSERT(!page->u.inuse.type_info); + page->u.inuse.type_info =3D PGT_writable_page | PGT_validated; + } + process_pending_softirqs(); + } + if ( rc ) + { + printk(XENLOG_ERR + "pre-mapping %s MFN [%lx,%lx) into IOMMU failed: %ld\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 +231,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 +261,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 +372,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 +635,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 +671,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 +762,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 +792,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 +867,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 +898,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 +916,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 +936,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 @@ -348,8 +348,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 @@ -380,31 +380,57 @@ 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); - int rc; =20 if ( !perms ) - rc =3D 0; + /* nothing */; else if ( paging_mode_translate(d) ) + { + int rc; + rc =3D p2m_add_identity_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, - perms, &flush_flags); + 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 ) + { + long rc; =20 - if ( rc ) - printk(XENLOG_WARNING "%pd: identity %smapping of %lx failed: = %d\n", - d, !paging_mode_translate(d) ? "IOMMU " : "", pfn, rc); + commit: + while ( (rc =3D iommu_map(d, _dfn(start), _mfn(start), count, + start_perms | IOMMUF_preempt, + &flush_flags)) > 0 ) + { + start +=3D rc; + count -=3D rc; + process_pending_softirqs(); + } + if ( rc ) + printk(XENLOG_WARNING + "%pd: IOMMU identity mapping of [%lx,%lx) failed: %= ld\n", + d, start, start + count, rc); + start =3D pfn; + count =3D 1; + start_perms =3D perms; + } + else + ++count; =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 Mon May 13 22:08:31 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=1657025096; cv=pass; d=zohomail.com; s=zohoarc; b=FvUIlqPnxtHr6gYsHYoePS/KEgEfV+0wOTsj2MqJZeFpLOmtlmfQlI7VL6+LEqf+mxyv8KMi71KkwmYUXZxGe57pnEwV3MOeFSciRvIXE9/vb4AhJ0DtsTTP+1WLVVboCmChHbkzyQPMG9LYpe0CLiHLRg7cOJF/Pbc3LrulCU0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025096; 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=tz6ozk9S/AhujlkpGh0jwCZXiL+OVP402DUlNiNYn5k=; b=SWxyaFdq/WpbC1oEQs610G6o8sR1ypQWbt40cCSsE+3Msucu8+Wnhgf5yiyg+C+8U87h0i/ynJBL8fL4FA0KOQD42fZklvRqOcj/wWuQPJlWpfaQHvbME8QXFemLkh/JXKIuIpwYGQoMU2fLq6LaMQT1gcY/j2YwbWg1qdVUeNw= 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 1657025096469228.84871957322116; Tue, 5 Jul 2022 05:44:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361139.590475 (Exim 4.92) (envelope-from ) id 1o8huq-0002s2-Vj; Tue, 05 Jul 2022 12:44:32 +0000 Received: by outflank-mailman (output) from mailman id 361139.590475; Tue, 05 Jul 2022 12:44:32 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1o8huq-0002rt-St; Tue, 05 Jul 2022 12:44:32 +0000 Received: by outflank-mailman (input) for mailman id 361139; Tue, 05 Jul 2022 12:44:30 +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 1o8huo-0002H7-LV for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:44:30 +0000 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140058.outbound.protection.outlook.com [40.107.14.58]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 35fa6309-fc60-11ec-a8e4-439420d8e422; Tue, 05 Jul 2022 14:44:29 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB6PR0401MB2613.eurprd04.prod.outlook.com (2603:10a6:4:37::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 12:44:28 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:44:28 +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: 35fa6309-fc60-11ec-a8e4-439420d8e422 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kL8LBiaAEBvf7qLD6agVUNSxaTLmrvXLZaej+LJWW3qFbNMkgF9h36ISRbMYC4iif0KhHR6B8pESs39SbVa7du3+EAAgpA+devYBut8AfLQzhVmkh15NijePUi7dPLzYjs5EZApaGrlkb/J9x7Hf4SBL3WEmlIT1LyHv+HtTywPkI4AqPyKk19X0yy0v6HyIGYwVEXjw7NTW4F6KswyAreCIoaZoKgRUArupkdT/s91xqNm+9iHs+sM1wBT15NbIA+qjBVVJHMp6W+BaklMXc/Q0IclL8f9RRe9uubm1ZfI8cm/RBMe1CfNkNmH5uaJniPDM7Lnu/255Uk2ktI+LRA== 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=tz6ozk9S/AhujlkpGh0jwCZXiL+OVP402DUlNiNYn5k=; b=RtJiwQGL9MCjvyeyUHPnBI6SCug4Vvpc6W0yvPQWdG4oIjgjkzxLsFf22Lu7v517BFqAPi0I1LOy+EbazHfkX6YvsAzBudz8Em4MQZpHgaiA5kbr5I7cac4Di9R52jGy+6S3S/966rOvpRPHd4kPuH+xn0x7hcFJR2OL0QuQBpMoQECHAW37TMp62CGway32WsRIvO9d8+ThX3goe7cS4t/xJjz0jTfnd6sibhKopAPjWmdAs/DTJsRNUg5oM3jY2qiSbFJvDZ9zzvp1pBmNRwSAmWlApBAYGwUuqmZ6b87enQeBlw5TC07BZiXo0tQifS9KPVGkv71qKa0VvUXS3A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tz6ozk9S/AhujlkpGh0jwCZXiL+OVP402DUlNiNYn5k=; b=FeIksqwS0FJlZsZx6jYdT7bMGr/qfRUWBYrjmngzaUI5d9Sx3McvBbVqh/wF2Km1imrisK8fCKYcIQrOGXOajUzJ+wk6JTtF/W841tbeQud+R2TYpeDhSgSoEHGdGowl1YQNYEFPFmePQ5sBxsBKR+YLqSRIaxGUBnv9vIAORCzYpExK9Ewzz/y7hUdaG7yZyP0wSFp8JTnbobImr8p3qV71uCn2wea924xGVltovkM9SNmNmUvFwIcCt5kBqwl/7P5WXfneD2h8Q+L8H3hFXO9z2OQkkK0ncAuKqQKCrIdVdkHY78bhCNN+nZ6pl3wx4p1vQGSq2jkmcXP9kkvC4Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Tue, 5 Jul 2022 14:44:26 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 03/14] 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: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS8PR07CA0058.eurprd07.prod.outlook.com (2603:10a6:20b:459::15) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 45afa46d-ca31-40b4-164e-08da5e841954 X-MS-TrafficTypeDiagnostic: DB6PR0401MB2613:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YBgGshiM5C7vrHVxGj9SyG2zYY46XA2p++bdqO5mwSmRLOgTJUOhm3BVCxOv2O+45ezR/2kNGwkQuWyp40Z3LogBx3JdS8MxkRWL+FHRS6BxIdcMxZKnBwkq7jVW7hctPKh43dCmkF1vDymp/p93pRXZpZBXJQ4rMRXBiheM4IWiT2ZqVxEh4VkmVFXB58ywAAXioFt+xM5c88YRT/i9dpiyDaqu3e7jxOyF3rJ+KkNOBtnGd+nka15V/BQ+E8xu41gsQBqvWiTcouWwbiryXVCA93fWelaMVENUOA27y8rESqCg9QurSD5gcgIOQchT+6rAZJ7xv7HnhOSSGXJ11w+ryIzfoy7fUAgs/ejXHxUG6nxqkS8eQ7W9GmNznmTSVmHFcnPpnRLAAdPPaclqHeaP7duv51KzS+IKg7wKUJppd4p9GbhII8w76LMjvBmZ9aPP0GGU0q9el44jwfHH9A0yjOu5TaOLdGb5guUJbj1ZTlm3YytSzEqNj5l6/tCTdUndHMPc5B8kIJBnQHFnNMyXPTRPEd+ljDWIsppx0FlXwh/DpXc5FLO5O4fOKdwfMQ3rYTo+lsN0eeHRQiARbErZ/4xI67i/lierYdOGRC67tyaGWZiEs6OM0rE0qRpqwrA/lWaLsyIILw/a6+0KThwQGFsX1wfvxDGPu2Cqv0F3tYtf2exNHGlkdgUM1ilq/9CxZ/K8khbcV3rtpfuKmpH/yCriJk8osif/YW6YPHPbscNtFPIN/lXfIFOu54htv/ATwWMm4a69CVddt5JPQVr7weyRks302g01fdhvbsMaBdyjsJXDFfgl38MrzueiQ+jjcPB3MU+lH/uIBfF/rdpZXyAj7ych1mMFauHPwrEDTSGNWaPFnoWTpp5HsLnp X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(136003)(376002)(396003)(366004)(39860400002)(346002)(8936002)(31696002)(38100700002)(6486002)(478600001)(86362001)(66946007)(4326008)(6512007)(8676002)(66476007)(66556008)(5660300002)(2616005)(26005)(186003)(36756003)(316002)(6916009)(31686004)(54906003)(6506007)(41300700001)(83380400001)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OEd6aWpZZkpMR0hLQ21oRWx2R3RwOVRmL1RHYkhNMGZ0M01mR0JTaDlOTE9y?= =?utf-8?B?Z1BkaHdiZUpKbldhRmdIRFU2dTVpLzRYS0tBbk10RkxNVXZ6UzlBVmxwU2JT?= =?utf-8?B?cmRRR3M5bGZiaGtUNjkzTXdtc2w1L3lGcWJZR1FMQ1lnM3JYSzZjUUIwenBw?= =?utf-8?B?SWRtUWQza21qajNmWXJhTGV3MFVlQnZKUlRXTTgyT3hEdm85aUcxbTArQjBj?= =?utf-8?B?UlFDMlA2dXJiL2ErMGNYeWdjSkFicWFHRE1IT0t5SGR3VjdQZzF6emhScFVB?= =?utf-8?B?aVVEY3pzbStaQXhWSTRSZDhxVzUra2hleVFqMEdxQjIvdytLWGhueVc3cTFN?= =?utf-8?B?WlY2R01CSndDSlE4TzAvTlk2UnpkQ0xaeGRzTWM1ZHdCclJRRFpOU1pCQ0Jq?= =?utf-8?B?MjB3bSt0NHVDV21tc2RIbzZaeURLVEJ5akszMHV2ME9JeWtXUncwdml1M29F?= =?utf-8?B?aFlkQWJxQ2swVjJuWldqQ3FrTW9BeUxNYk0vTjdOZEVFdjBuZlVoR3JhME1a?= =?utf-8?B?SlRvL2EvTjNYbFpHL0VIeUM5QTBFemh6VnJVTXFSVjlyVWovaXAyaERxcWNt?= =?utf-8?B?blBCQWxvMWxpUllSSmVlZWxtOWVnaitpMEJ1ZS81Q1Z2a0RieFpLZGQvMGJS?= =?utf-8?B?ZTFjb3IyUWcxZmU4NGd6eEtHay9hVDlwRmhoSXdSM2dwbEtJdWNwWWZLV005?= =?utf-8?B?a2NYSjBPejFNTDhRSHp4N3JMYnNkRkxmNXA2VkN5cHQ5NzdmelFtbWJWdHRD?= =?utf-8?B?UWlPcXR4TUVVa3ltaTJLUkN0Nm9CelZzdFhXS0FRcDlhNnU2cGVoQ0dWN0Mv?= =?utf-8?B?akkwbzI1emtKWStRbUhaTFptenBuVGp6Q25TcU1jZGswUGpFZk5vVTIyYlNx?= =?utf-8?B?QnduT0o2SXAxWlB4Ym1XZ1Rka3lKTVc4QzVpcTRYek9jT0FIaEtKQ0hCR2VD?= =?utf-8?B?OFVMNnJhS1VmdVR3cEZDeFQ2aFB2dnNYSzlUS1FOamRXNDBPVnlPR1NFaEFP?= =?utf-8?B?MXpnakdGVGxxNDY1aWYvZ1BOdWhmc1RMTUtqbjUyeTdkdXlwdFZ1R2ExWlZi?= =?utf-8?B?RDJVbGxwYS9mMk84WmtpWDRoTXlGZThSdUppTUxMRlFWQUhLK3dXQjhLQTQw?= =?utf-8?B?VmVOZ0ZPY2UvaUZsV1NPMm9SamM5czBJaXNpbmZ2TGZpZHRqUkpTNjd3d2ln?= =?utf-8?B?QXlJeUZOelFHejNaY1lpeFhvTmpFVmtJWHdzYWhjRW9HTUQ2cXVPd1daWFRW?= =?utf-8?B?YXlhckV3VTdtT3llVUhKbDRIRGc0c3pTdVoxQ1dnd2w2ZFZDM05DSW1CU1Jr?= =?utf-8?B?dXJGMTZJdzhHY3lOV0piaHM1akhTUFZGamtxSkxOZ2duR2Z2NXluTFlGTjVF?= =?utf-8?B?bE9tS1RpclROYjZOSTlDSktydW1va2tyRlp0U3VaY3E3N2ttaVVGUDRxb29J?= =?utf-8?B?L3YxT0c1YW9EaTlLSnlzTWVEOERlZnlkVWFJbmxzL0JZUXlVd2xPbDhYdG9v?= =?utf-8?B?UHl0K2ljaXdzMmwyeTJIS0I3RlVIU296VlpRY1dqb3BQOGNUVXJoTjlKYUJT?= =?utf-8?B?UFB5cW84bll6ZnhObVdNeE83OHVxR0lkU3NlZGhaSC8vYWk3OGhpbjJzWVBB?= =?utf-8?B?Mkk4endhak1LZGhmYlNOOGxjT3VpOHd1c2ZPWUhyQjNyeTJvQ1gvWXNDZXA2?= =?utf-8?B?UWw2ampCb3ZjNkJOQXdta0dwU1Jpcmk4UTJWNXB3TWxTQmxWMXd5Q1JYekMr?= =?utf-8?B?aFM4TTRCcWhzajFBWkRsbnZkSGxGbEQ5clpMc1VpVkdqMStMVVdzVm5JQ1NB?= =?utf-8?B?OWozSTZyQ0JicHZQNEZiK2Flb3F0a3NuUDJwbG84eFRsRVRlYmpLTHkzVS9Q?= =?utf-8?B?ajhJNzZQamJ2ZUZkTmN4NHNLaUFCY1ZMbmFtNzM4MHJDV1NKcFYvamZ5ZkRB?= =?utf-8?B?alpNenZtNzc1UldYc1hmYnFmYjR4ZXZXRkhTVGdCRTVIaWdVdTd1MDdQSXBp?= =?utf-8?B?cjY3WXQ0RFd0aWdGM2JEQXdESTExRnk3Q0JQSUdRTnB5YnBhbDZXSnk3NTh1?= =?utf-8?B?MTVSalB4cmVrbEgramVQTE0zLzRMOFRCb2dKUzFVRHlwNWl5Wm95ZGgvbTVH?= =?utf-8?Q?CLE9jaeTHOQZYm/6HK0Aeov2q?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 45afa46d-ca31-40b4-164e-08da5e841954 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:44:28.1387 (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: yED7xdMjgOAjActLXaU6gROgDvYZs4R4SKA/m5jVvFlV8sD5B1WBxM5n1mcrSqNA0MwgyoY22v+OvtKweJ7W6A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0401MB2613 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025098688100001 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 Reviewed-by: Roger Pau Monn=C3=A9 Reviewed-by: Paul Durrant --- 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. --- v7: Add cf_check to free_queued_pgtables(). Add ASSERT(). v6: Extend comment on the use of process_pending_softirqs(). v5: Fix CPU_UP_PREPARE for BIGMEM. Schedule tasklet in CPU_DOWN_FAILED when list is not empty. Skip all processing in CPU_DEAD when list is empty. v4: Change type of iommu_queue_free_pgtable()'s 1st parameter. Re-base. v3: Call process_pending_softirqs() from free_queued_pgtables(). --- a/xen/arch/x86/include/asm/iommu.h +++ b/xen/arch/x86/include/asm/iommu.h @@ -147,6 +147,7 @@ void iommu_free_domid(domid_t domid, uns int __must_check iommu_free_pgtables(struct domain *d); struct domain_iommu; struct page_info *__must_check iommu_alloc_pgtable(struct domain_iommu *hd= ); +void iommu_queue_free_pgtable(struct domain_iommu *hd, struct page_info *p= g); =20 #endif /* !__ARCH_X86_IOMMU_H__ */ /* --- 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 @@ -556,6 +557,105 @@ 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 cf_check free_queued_pgtables(void *arg) +{ + struct page_list_head *list =3D arg; + struct page_info *pg; + unsigned int done =3D 0; + + ASSERT(list =3D=3D &this_cpu(free_pgt_list)); + + while ( (pg =3D page_list_remove_head(list)) ) + { + free_domheap_page(pg); + + /* + * Just to be on the safe side, check for processing softirqs every + * once in a while. Generally it is expected that parties queuing + * pages for freeing will find a need for preemption before too ma= ny + * pages can be queued. Granularity of checking is somewhat arbit= rary. + */ + if ( !(++done & 0x1ff) ) + process_pending_softirqs(); + } +} + +void iommu_queue_free_pgtable(struct domain_iommu *hd, struct page_info *p= g) +{ + 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 cf_check 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: + if ( !page_list_empty(list) ) + { + 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: + INIT_PAGE_LIST_HEAD(list); + fallthrough; + case CPU_DOWN_FAILED: + tasklet_init(tasklet, free_queued_pgtables, list); + if ( !page_list_empty(list) ) + tasklet_schedule(tasklet); + break; + } + + return NOTIFY_DONE; +} + +static struct notifier_block cpu_nfb =3D { + .notifier_call =3D cpu_callback, +}; + +static int __init cf_check 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) { /* From nobody Mon May 13 22:08:31 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=1657025127; cv=pass; d=zohomail.com; s=zohoarc; b=ZyLCM6t664d46hme9/dV3O7Y2O9JmvOlaUg/6+I/sDjhL8MIsKTm3fGGzc6/mZIztG0tC/+VhK95TVY77B01XcRkUr0KriPC0bgGbm4P74RBjJ43crFAjDEmlVnrxrQrQ31LlkEA3Eb6VmI3yox3JWJqoxsx4tA04JWGok8x8+8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025127; 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=Z+8FHLsqYkAJd4jPM1gdjv6XWwzyRFyA3mYZWklG6gc=; b=hoZd8IEK32zJ0FE/PLaI8oQGprxMhgfb7CHu38n/7S6PZtHRz6aNZhlMyWbeHaC464HdPaE9VFjqZfvaMo+/Sq0hXTa/4jt39HWxZ63VPrnbD/W/oxOFi6VfkQRFZJvynVig+GCDjnB3NMBNDoyBuRrtbeNQ5VDPDsZB+qFylxU= 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 1657025127492244.76480914850856; Tue, 5 Jul 2022 05:45:27 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361147.590486 (Exim 4.92) (envelope-from ) id 1o8hvO-0003VE-9o; Tue, 05 Jul 2022 12:45:06 +0000 Received: by outflank-mailman (output) from mailman id 361147.590486; Tue, 05 Jul 2022 12:45: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 1o8hvO-0003V7-6I; Tue, 05 Jul 2022 12:45:06 +0000 Received: by outflank-mailman (input) for mailman id 361147; Tue, 05 Jul 2022 12:45: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 1o8hvN-0002rI-4N for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:45:05 +0000 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140057.outbound.protection.outlook.com [40.107.14.57]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4a6feb3c-fc60-11ec-bd2d-47488cf2e6aa; Tue, 05 Jul 2022 14:45:04 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB6PR0401MB2613.eurprd04.prod.outlook.com (2603:10a6:4:37::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 12:45:03 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:45:03 +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: 4a6feb3c-fc60-11ec-bd2d-47488cf2e6aa ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bVAY5ZcpXdbPPEtp+phcfYumjdSpjlHqfCbjXyTvpgAsmlujic20tdYE6YIp1prwAR1YWz+RRZp+GMJVJ5MFAtWPci3/B3cLisLz663yvKiZ4Q5aCSVeScAY4xCRkSJ54cBtHY2KmkMsOoz4x/HaIVGR1u6vp+OLjfraWTqK+kzcUqde/q/+snn7FHsYqGmvFg91u8YTeskDPRuZOnPacDC9Y9lr9aK0ah+LPODjl6Km8SALdehy8SpLlSOByqO0YoNU6JAGEEFUZV5UpnGHYug8qxSQtuR3Zaa2+04GPTb0ak3zzQR39AOUzfcWg7g0ThD+/yOqjcUg+N8/6DfuJw== 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=Z+8FHLsqYkAJd4jPM1gdjv6XWwzyRFyA3mYZWklG6gc=; b=enkUyvtvFsiD+1XepDyQncEmDiuk8lnJH68rKcrIoiRPhVi6IhsYjN8lzGkyzp7uDVzxdDp4iHaK/f4IqvYgjp26q+OUlg5IVYL7FSsbZmgdTON93qFNx+2T5I2GqU4eSjE4+DELRKfzBIzgaDHABODAiv4PNnWMqm7DY8hHdWk10QZlql4cR4FwO1l4LuUPGf4GsLX6uDal9QqDS6m7PfrIWNupCVeGhIbCNvPNipnmcrLT19oS9RC1nscUvz1TLJkqcr7zg5sOtK3XKMOlQxOmEUGKWpavKiGby+mvTUrk2D0RySMmyK7d8Hw/IxA47Zxpgzfk8VSsx/Qn5cOLVA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Z+8FHLsqYkAJd4jPM1gdjv6XWwzyRFyA3mYZWklG6gc=; b=dCn1XpUHKLEvS5irwb7E1cgU0K0fzfZoLm+3GhuxmjmnJQnDLp1Ifc5pXCUgH/v77MgKlt20hA7yjRUioXd2d76FytV4ZX2ZkrxWGNkkLwDP+dVYnn6eu4jspxTzKgZbkZ4svTb3k1J4r+KhoILC3KMsuXs5PIxsvxDXpFEiu8v+Bm1Q07Fgy5Nm75ExJ//xoK8V5Szd9tLPP184JlcS83L/6AoOhj4OF8szMmJB3OeXXytTRfgDOcxOsn3JAbyqVViwVxgUgUfwo7q+I8hD5MTaVOQDwN3uyg4iP2+0G2ZLU1aHI6Jjmjv/24x/1TTzVmBpMuzvSQbXRfIGZw9Tvg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <7e587d78-43bf-70e5-b629-b7fbed0ae0fc@suse.com> Date: Tue, 5 Jul 2022 14:45:01 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 04/14] IOMMU/x86: new command line option to suppress 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: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P192CA0041.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:82::18) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7ad5b290-cfbf-4ce1-fc55-08da5e842e0e X-MS-TrafficTypeDiagnostic: DB6PR0401MB2613:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5f7ttoFzyfMxf2hmb+Za23zGEMHXbcIhET+33YWrCKU2DnS0UCyIndaqaMmmhhXL2K+fFGKBk3qJ8Em+oalMW/rVmR5+RwHi4c1PvVKZT96lkTxmZzsq9i7o6fFhQyxcNvuB7ZNO0tDiVVFxS/kT8W8njh9A5OUVM1gTDMTc7il5LAWNZiBd31v8dXs6cdeyCeAWhib1PY3BoqVer8sCKfbyR6Lq2iNDCgdp5yYWS3hxZX4mW/ump9JpVjSQ2t/F8W6TvKzGDQpV3sox8rBXbDf0JscjNEEOj73X1ZsjKSEnUGrpiAdUK8RR4fXFK/pUgxcX6YzR0u27oNQ81S3bQczzYGZwTpyWHP2LBdfTMMhOP1sbpi2UH5jODW1F2pP34LYHc/fK/5C7ScywXueRiGeyq+bc20lsLAG1ofS33pdqTKBz461k6WMielQVN1Ct37UjMgSykjW8Ll09cl/WlhN6tYSEbUzaXvqs8hz77jdPi0/rdQavArT1mrx6Me9vj2t+z76fH2sH7gwbAXyBiV9exXpTu5kCUXiKgfnwW9/EqDkT9qk/SmqgAM9fFYROpu3I8/COFJg5J/OhnTay11WLxqPB1CFTwJANv2mTNQ5ZP1RON5Vl9JFqDAq4Rt6ZtymeEP4H97Ti4m+D93W0KGy5r8b6HUVqIrGafnJEGtjTwd9/AodptQhHiCHzBTbPkrW69RkqThWSbZsZpbt7duByv6J0eMXnhOj0XeBkR1Mo6/dt+36K6OXs0vUmPNpdPv7pxZfuqgWBxdsPV7zfhrRG0ODRABrz+iWBT0SqC52gjs3WXfLDVeh86bBdJqyfN1dbBMYqYgDXnMqQF4o8JJJDZiu/SQQ0Jn24uVW4lac= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(136003)(376002)(396003)(366004)(39860400002)(346002)(8936002)(31696002)(38100700002)(6486002)(478600001)(86362001)(66946007)(4326008)(6512007)(8676002)(66476007)(66556008)(5660300002)(2616005)(26005)(186003)(36756003)(316002)(6916009)(31686004)(54906003)(6506007)(41300700001)(83380400001)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?anNIUGhmQndGenFQM1hFVkZjdlpiR3pvUzFxNE9DQ3NvVTU5UDQyQno5Nks4?= =?utf-8?B?RUhOV1JkYmFYcUVWSmxOWFN6T0pMbEtXenIyMHJkc3BEbmhnTkwwMStnVHFn?= =?utf-8?B?eXRNR2F2K2tvMXVUZWZnajlna3ZhOXdJNEZvS0UweVZKSk9Vd0tIWmQvNWFl?= =?utf-8?B?Qi9NblFnTVVDVHprTlRUK2lBZHpYeFRWNG84M016Sm03amlYcEVIWitIY2Nv?= =?utf-8?B?UUJ6cTJzYndWUzRpU05WTWZUY2l6SUxqODc4YTdJNUljK0xKTkZlS3B1UGln?= =?utf-8?B?bkx0MDZVYlR3a0hEMUlpUzNkRVVrSndFV01sOGRwcjVCdzE0d3VDU0J2em9n?= =?utf-8?B?SnVkeEN3RjJQZjRWYmNJblZZV1RLVEp4dEhRU2IrWFpkZlJoYzRYSlF4Rnkr?= =?utf-8?B?eUE4RzcvNUdMWGlPUGRXb0sySUJOQk5lNndpOG5pK1puMnpyV1U0NGZrRjAr?= =?utf-8?B?NVhvTFJPaVNDNFhPL0tkWmI4ZjlqM0daaG9oUEc3WW1xbEhiTFgraFl5L205?= =?utf-8?B?dGxKam5jM2k5aTNvZDY3NmdSNEtPUzdGYmo0T0ZuYjJ4VGtFUDNySXNLaWsy?= =?utf-8?B?Q09BNTU3aGNXMFBSQU1wMjJ3YU5Gem9MbkM3VjRLdHduc25wMHZaaUlFQUov?= =?utf-8?B?dlllSWRGWGRkdG1Sbmg1Z0VDMyt0YktOV21SNjI4ZzJMclQ1UFpBNS9idnZH?= =?utf-8?B?K3c0MnJubndVWTF0NmQ4cWpTclVqZm44K1JTeE5MQUNSQXhyeHZuYUdUWlFi?= =?utf-8?B?a0dYTEpvSXRFZENZcEcrdTIxVkxUM3dNSjlsTUVWZjNSYWtTZlJLSTB0TWdR?= =?utf-8?B?MWUwTUJpdXIwRFNWY2I2dEhaSHV1dXBuVHJlbGtDaUxRVHJqMjNBRS8ya1VQ?= =?utf-8?B?RGVpaHVUMmVod2doNUZIMWZzMDF4QjRSelN0dHRTTmR1U0dnTUZzdlIwSTN0?= =?utf-8?B?WGxBZ2RiWXV0bEZNUzcxemdXVUVwYUxaTFBBSFVISzlZelM3TGRLVk9wVTRD?= =?utf-8?B?SWhqWG4zTjY0eHFldnJ4eDVVb3h0S2dlQnJLN1JrRm1sSW5ic1ZVeXFhTERl?= =?utf-8?B?YUpMY1Y2N1JKUW1iY0ViN3VlSmJVeW9rdjlHVVR5Vmk2R0dxa09xVGJvL1FY?= =?utf-8?B?TlIyWHhJNTU3L3JNaFNLbVFmb2JzTzhvcWtPRm4wcitTMVNYaHo2RHAxclBD?= =?utf-8?B?SXloanlYSUNmVWE2TmxtK2FBdXFCbW5TZ0MyVmlpVDVCTnFDMlRnRzZ5WStR?= =?utf-8?B?RE8vRzRMTTJpajNCUldIdUJqOGVjMU5odktCVzFIZlFxdGd3M3pVQ1FPTUlu?= =?utf-8?B?ZDVLOG9jWHptRkxuN3VVU2UyQ1JvSjdJS3ZuM1phWGdhVTJ5VjR6MmFVaGkr?= =?utf-8?B?b1hBd004RFlCejVHemNVb0VVRnhrcUk5WDlmaTJZTWRFTlNZcTBJaldFaWdK?= =?utf-8?B?Tmh2TWlHWlBqNzFoNzFCMzVtMzhHU0tXYTlIYVhqZXhDczFteC9uMUxxQ1V5?= =?utf-8?B?QzhRNndOUlRnTEVnVWdjc0tRSEROTlFLMENXZEdoRjdsSW9hc3F0Yk1NcGZv?= =?utf-8?B?NHBUaTc5dDBDSGZwYlQycU9NczQ4M3FFdE5aS0tyZ1B6azE5YUw3Q3FibTlG?= =?utf-8?B?dGpNNXRybVhjc0FMK3A5NTkyNUNKQnordDZjVDhSZXRvazE4MHFZbk8yWUtJ?= =?utf-8?B?enlpOURYdWF1bjZuNFRMcTQ1SWJ4RTVUK0ZGbEY2REl6RGlaL0FxY3g5WUFZ?= =?utf-8?B?SVExUWsxSTVmSm9wYndjajFKVTBaOERGb2x6b1JldFRqSXNyMzBpaWZLdWJ3?= =?utf-8?B?QUVuNXZsdmFPMTYrQ0JyKzlwN29veGp5aEVYd0dUWDREME95dTZVRVFXdzJJ?= =?utf-8?B?OGQxN1dIY0RURm9oUWY4T3VOUkpOSnFuREdVckQ4YWlGOGR4NlNTeXV3YUtQ?= =?utf-8?B?Z3dWSWR1ZGV3UFVPekR5T2x1d21PNm1Xa0YyWTJnTy9Da2pHNDZ0VFRPb3pV?= =?utf-8?B?ZnBoek1ocGNmaE9PSW1TeVNXalJxVFZ6S2xibmpLbWZybnJ4RWI1K2l1dU90?= =?utf-8?B?WGtoanc1UGNoODRRT2NvQUdBUjljemtycWlQVjhWTVF6MkxLNUxDWHk4ODZ4?= =?utf-8?Q?QJii36vYgQS0dv8ORi7o4jCaB?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7ad5b290-cfbf-4ce1-fc55-08da5e842e0e X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:45:02.9336 (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: k8tstxAtPRIwVdAZ2a1peAGpE6ZI1P/IzSPBh2BQsCyjm3Gjxq/2FYl24NGzQ3NnSlY/GH9xL9PW4sWE6hXm9g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0401MB2613 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025128266100001 Before actually enabling their use, provide a means to suppress it in case of problems. Note that using the option can also affect the sharing of page tables in the VT-d / EPT combination: If EPT would use large page mappings but the option is in effect, page table sharing would be suppressed (to properly fulfill the admin request). Requested-by: Roger Pau Monn=C3=A9 Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant --- v7: Fix condition in vtd_ept_page_compatible(). v6: New. --- a/docs/misc/xen-command-line.pandoc +++ b/docs/misc/xen-command-line.pandoc @@ -1405,7 +1405,7 @@ detection of systems known to misbehave =20 ### iommu =3D List of [ , verbose, debug, force, required, quarantine[=3Ds= cratch-page], - sharept, intremap, intpost, crash-disable, + sharept, superpages, intremap, intpost, crash-disable, snoop, qinval, igfx, amd-iommu-perdev-intremap, dom0-{passthrough,strict} ] =20 @@ -1481,6 +1481,12 @@ boolean (e.g. `iommu=3Dno`) can override t =20 This option is ignored on ARM, and the pagetables are always shared. =20 +* The `superpages` boolean controls whether superpage mappings may be us= ed + in IOMMU page tables. If using this option is necessary to fix an iss= ue, + please report a bug. + + This option is only valid on x86. + * The `intremap` boolean controls the Interrupt Remapping sub-feature, a= nd is active by default on compatible hardware. On x86 systems, the first generation of IOMMUs only supported DMA remapping, and Interrupt Remap= ping --- a/xen/arch/x86/include/asm/iommu.h +++ b/xen/arch/x86/include/asm/iommu.h @@ -132,7 +132,7 @@ extern bool untrusted_msi; int pi_update_irte(const struct pi_desc *pi_desc, const struct pirq *pirq, const uint8_t gvec); =20 -extern bool iommu_non_coherent; +extern bool iommu_non_coherent, iommu_superpages; =20 static inline void iommu_sync_cache(const void *addr, unsigned int size) { --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -88,6 +88,8 @@ static int __init cf_check parse_iommu_p iommu_igfx =3D val; else if ( (val =3D parse_boolean("qinval", s, ss)) >=3D 0 ) iommu_qinval =3D val; + else if ( (val =3D parse_boolean("superpages", s, ss)) >=3D 0 ) + iommu_superpages =3D val; #endif else if ( (val =3D parse_boolean("verbose", s, ss)) >=3D 0 ) iommu_verbose =3D val; --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2213,8 +2213,10 @@ static bool __init vtd_ept_page_compatib if ( rdmsr_safe(MSR_IA32_VMX_EPT_VPID_CAP, ept_cap) !=3D 0 )=20 return false; =20 - return (ept_has_2mb(ept_cap) && opt_hap_2mb) <=3D cap_sps_2mb(vtd_cap)= && - (ept_has_1gb(ept_cap) && opt_hap_1gb) <=3D cap_sps_1gb(vtd_cap); + return (ept_has_2mb(ept_cap) && opt_hap_2mb) <=3D + (cap_sps_2mb(vtd_cap) && iommu_superpages) && + (ept_has_1gb(ept_cap) && opt_hap_1gb) <=3D + (cap_sps_1gb(vtd_cap) && iommu_superpages); } =20 static int cf_check intel_iommu_add_device(u8 devfn, struct pci_dev *pdev) --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -31,6 +31,7 @@ const struct iommu_init_ops *__initdata iommu_init_ops; struct iommu_ops __ro_after_init iommu_ops; bool __read_mostly iommu_non_coherent; +bool __initdata iommu_superpages =3D true; =20 enum iommu_intremap __read_mostly iommu_intremap =3D iommu_intremap_full; =20 @@ -104,8 +105,13 @@ int __init iommu_hardware_setup(void) mask_IO_APIC_setup(ioapic_entries); } =20 + if ( !iommu_superpages ) + iommu_ops.page_sizes &=3D PAGE_SIZE_4K; + rc =3D iommu_init_ops->setup(); =20 + ASSERT(iommu_superpages || iommu_ops.page_sizes =3D=3D PAGE_SIZE_4K); + if ( ioapic_entries ) { restore_IO_APIC_setup(ioapic_entries, rc); From nobody Mon May 13 22:08:31 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=1657025188; cv=pass; d=zohomail.com; s=zohoarc; b=iPn7jhftClhLgXS42PMxfKGr1m0pnsg/Pv1RGNR8uBD/8ouXSKTNJZ7ZwNDhTV6T2bQRFrqgTk2pNlWZw3IHgVuh+MWPdJ+xX8mjdaVWXfG3kLUNoj+aRoeZWEmlUPvoXAjwLQTrzh3aBsXCvh7G3lAPjshLZTgt3ndWGmhmAZg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025188; 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=AxiRfgvA8ZTM896+3sr+fZ7fI2k/BkIKHoJCeGpTy2A=; b=QOq4oa/IeKXmmqOhdkeOIl9o8YDOUnNmvG/p4QlGnt3yrFUD5SbcghfJcVHvzyIXydfDVjcba8epIzJxJcIk5FXi5s1QdwBxvAv7Wjqs6tlfrsuYwte34M/wDKwrAElINjj4XS48YApHk8tXUQ/xKL9lhs37tk1Chp7oMEvEhlQ= 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 1657025188901313.8244474810034; Tue, 5 Jul 2022 05:46:28 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361153.590497 (Exim 4.92) (envelope-from ) id 1o8hwL-00047e-Mu; Tue, 05 Jul 2022 12:46:05 +0000 Received: by outflank-mailman (output) from mailman id 361153.590497; Tue, 05 Jul 2022 12:46:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1o8hwL-00047X-JK; Tue, 05 Jul 2022 12:46:05 +0000 Received: by outflank-mailman (input) for mailman id 361153; Tue, 05 Jul 2022 12:46:04 +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 1o8hwK-0002H7-JC for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:46:04 +0000 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140053.outbound.protection.outlook.com [40.107.14.53]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 6dfd3854-fc60-11ec-a8e4-439420d8e422; Tue, 05 Jul 2022 14:46:03 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DB6PR0401MB2613.eurprd04.prod.outlook.com (2603:10a6:4:37::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 12:46:02 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:46: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: 6dfd3854-fc60-11ec-a8e4-439420d8e422 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TeVZo6k2vo3HxUd61skklc3XW1YHRFA1fOxgL2y9K7gF3S7qWETxCDm6buR8rkgHZm3ZRtc1DQqltw78OFvGL4oSpmuQTOIZQyAZujSxVoz3XL6K3TJVYlITUiN3xJGuvmCcoKBRDSaBG8FkKPIpt0B0/7pe0QOiXwaj4fp1TeMhvgfanuF3vqSWvTUaP6hrD6jSQoYNKx1A0RKGXywJeiE2Te56qSp8lEOWxpNPfW98Qgl8yi2m3LjyY/veQf0Y7s+AwTDcwtDaZEWmkW/GQZ1BKtjDyso/apZv9cIA7NepiCkXBuPtKtj3/My1NBfK7djW2ej4MfHB23CuYkjq6w== 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=AxiRfgvA8ZTM896+3sr+fZ7fI2k/BkIKHoJCeGpTy2A=; b=SYYUiUPmOzbBNJ8XGGYzRh5+ninbFOY8YzF1rZTPWfaDH+gagyiK+H+Cdf2aAnw/QRsjY1vXqO8slONz9v7STFUl3T73yk12mM1XFZeHG3Pc12y3FKbxoKrwkb0IFQYs6NMu4TJn5fqulCOFNNO2CZqPiayOcscFmAx9NQBXgnfMhH8Vw7MEDhbiez55PoYOM2LRxcACdZEoVoWasRxwy85DxRWGlnFNJBAnk9dBEEvP6IfAKM33dEVAzSvfwbeQdt3NBr4ys78/dOrpCLqMjUtb9jTfSbYaWEJwgxUhob1wWRy2bVjs8TNzA+ZTrHx9AzrZQe20n9kllEAvpRzCRA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AxiRfgvA8ZTM896+3sr+fZ7fI2k/BkIKHoJCeGpTy2A=; b=NaL8Twi3TlfKCL8nQeZ8ROXCnfc9Su4o1N1I3/u1WFg17c33+pZNiZAxnmap2jBQNAzI8wpBHOHvNsAO+5VUOrCD2QN8MNera4WqRY0hBz0we1FwMq+gyC5OyjOa50jcWiDS4/zD8fqkvbIRIOMOw1X5HoygLU/lnwQQCbWilqb+t/yPDCRd2DTfmZX0nHJJ0De+lLfuT+I4JXzYUeiYgBkzfz+Rr6XETE3Fhi2zmonOwEPbyeGMQLD4HLyPQd3xgQ0nIDp8od/v0QONBagTNMtsylrtF5Oc43UBa84RL3wue/VmXGLJnvSVpfkBINvzJ1oR9nbMtCMjpsVQX1ZEZQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Tue, 5 Jul 2022 14:45:59 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 05/14] 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: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P191CA0004.EURP191.PROD.OUTLOOK.COM (2603:10a6:209:8b::17) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 922945e6-f728-4313-9b10-08da5e84514e X-MS-TrafficTypeDiagnostic: DB6PR0401MB2613:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Am3lb050fsu1JpFh+dv896fE0Gef1NCKRuC9V50G3oUnQAXCj9III8IvjBqtLLxQ+8Qw8FfqCctj2yLVjRmA6gR21RqS8pQO5LvjXt9CpABke6ON/VQCSDHvX/sM5RSH8et8iv2Z2PoOYPUv3n/dWWAYdwQT6RVY45LOrJpJNTC81Tn9z4nxwMJOllCBEZt16NkTpDsZW5A6bhGxVQe5tSvLhQL51quv/d5D93jr6zdyxhJNIoGoLZ/zWj0lfKRc9zgSy9XUlDU73b3NEWFDkzllsxbULOzFhcBcckPwqLgtD6yKGQhE/lVMoC1Q1vF2pPNZ0Xe1nUgrYH706drhEKrrJcLdnyZIxEp9LMVdR39b7rXva86x7On5GTN8+sOIS60sJIQRbjMAAVzuAnGnih4MCc1YUMJZl7cPs3KvYh/4WxlJcfAvmytneh/u03vsgIFJW0bgvPYMZFRshsMS/CbzLYz3kFHJ9PeLXPPiWNrXmrcBuqMjEw8cIzu98+2dgDsz/AN7cdrF8IN3UsBQaNacO01sAVuDmTL7XbIac2j9ZmjSX74p8XKf/9l2Jl+cKZKVUf9ihODj+JOJ68b4RHVHC0cJU8dLrET3g0/EXsbDFJvv7ExAFQhFNs/LR74Jgl8ThAYjQ5GUH6dPIfo+WzZMlAY7uhlZfTu6ZSMPpD1EPSEuYfX6beUZ/OHT92DmAllSvCh1fTrhRSXZqd49q+q/VE34ZnZB7n867JF6gGa9vSYoMj2ifnEVw35pPPpbWcMmSJbHDysWn0ecJrlJCORV102tr15egk22qmj2JuoBXN9cVPmyEgxS8cZtOUlrOk5iajA9n7Cvc29YOBF19uGsG7YhOOZQkxpgKus2Qec= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(136003)(376002)(396003)(366004)(39860400002)(346002)(8936002)(31696002)(38100700002)(6486002)(478600001)(86362001)(66946007)(4326008)(6512007)(8676002)(66476007)(66556008)(5660300002)(2616005)(26005)(186003)(36756003)(316002)(6916009)(31686004)(54906003)(6506007)(41300700001)(83380400001)(2906002)(6666004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SkZBclorTmsybVRUWkRsZHlHVDl1SGFXUmpseHVBNEhrTHJ2Z0UzZFRjMVVG?= =?utf-8?B?aUJncDdQMzl0M2c3S0dielpKTW5Bai82cUVGYTBDYktFbVhDM3pGN0lIZ1dl?= =?utf-8?B?Z3pTRUR5SmtYZnR5Z2FOcWZPMm9hL0FYek5GOEU2ejYrRW1HUUtNZFplSGRw?= =?utf-8?B?b3M3Q3dYU2FXNFRSKzlGQkhJN0V0WkJIMGY4R0FhUlkwYmltUzBtWEFqcmhv?= =?utf-8?B?b3NjZVNYZENwZ0JITEZnbjlLSVBId2JVelVRd2VOOVkrald2akp6WHRBMkZU?= =?utf-8?B?RytiVSs0a3VNTzM3R1E5WnNxZXJEOC9RVEpkN3BYRXVxaENZRTBPblNVYTRX?= =?utf-8?B?bzRBemhkKyt2aWRHcFR3T284czN4bEdJN3dteWl4NnRuYXRzaDh3d3ltK2d6?= =?utf-8?B?Tkp0VjMzVHp3TlI1SWQ0ang4RHh1MlNxVzNWaEJZeGNjVHNPeGtLWDZlanRl?= =?utf-8?B?d0FUSWFxenJBTUlGYVFCS1Y2eU5mWHpnUnZvekxDZkYvOXVaZTlNVEFwNHBh?= =?utf-8?B?Wlhub01jU2I2Tkl4cUNvK2owSzIrQktMbFdwWjNRUmhweVZBeDlZMTVCUnZH?= =?utf-8?B?bnRUblQzWENhUjR2dWtrWXhZNitxdk91L1B6aW9LdllUR2huVjZuY1ZET09T?= =?utf-8?B?NXAzNHhrMXFtdDhKR1hxdEMvVi9oa0RKRGZTalNBNnBKSHlBaGsvbnp1K2xa?= =?utf-8?B?NjEwZGpvSTlGVHFDVXZndkdpZGNJdmtRdmFXVVlQdEkzMGh4V04yQzlkWE5n?= =?utf-8?B?cURjeDkwRzljRTEra3NJdDlkYllDdXkrOE5sVmU2dnMvNG1VaTcyT0p6ZTI0?= =?utf-8?B?UHdBdzhGbGVWSVVlK2hyclRJREE1anlHU0wrdFE2dnBoRTFsenA2RjRnY3U0?= =?utf-8?B?dGJ5NlBRTDhLcjk2RkNIbkJMRHpMWStpYnFTYTBqTFFvcGQxUXF4NjhNVEF3?= =?utf-8?B?V0lZLzJLY2FNbGp5OXlvZXUwMGNJWHBkSWhtSlB1c3N0OEVrRE9jWGMvRk5H?= =?utf-8?B?L3Q3S0l1aXgvRHdUT2FVY0NIb0JueFd0MmVuSUpnRkQxb1k4VUh5Y08wd3JZ?= =?utf-8?B?U0dXay8rYzdJZGNzcnNtaURpeU41YU9FZUxvVHlybEhzVGRBb001YUZXeXlD?= =?utf-8?B?QUlEaGRDT3hlWjI4cjBhdS9vK0tzN1A5VmRWcnRwTkdpNE9rZTZOOXBhcERu?= =?utf-8?B?RWlqaHBCSERPR05PSk15WVM0V3gvaHJmQisvZDVNUm9IbFJBTmZNNUN3RHBh?= =?utf-8?B?Z2VMWXdvQ21yNkRVVmlTL3FxS09kV3ZvaDUwMjh5QXdkRzFCUnRhMDZaWmcy?= =?utf-8?B?RDY1T3VHMlVpS3lJUVBWWXh4Mi82K0ZqRXdlK0tJa2hLQy9sdzIvb3EvREpR?= =?utf-8?B?bkFBcHlIZTJDcXBMZFFjYjNxdXVRRE9aQ2srUm02K1hzSWczTk1IQmpxQ1Q4?= =?utf-8?B?WVV4OWl3aDRENldORjNGM2hYcWtoeE15bUVielE4MWtFSjNOZzJqMXg3YSto?= =?utf-8?B?bzZlUmpxb0lBTmR3ODJBN2FsWWluN2VNSzl6SVZFUXJZRHExOU5xQk92Yjl4?= =?utf-8?B?WlJHRHA1ZHY0dzhaNTdoSVZTdmdLRVg0dGY5dEFlTkJDdHg0eTJiU3FJNDh6?= =?utf-8?B?Ump3ajRhZ09ud1VFekRlc0lxSEJEWkxTOVRDeXVWVmlDL1gzdjZMaWwxaUpG?= =?utf-8?B?aEVIR05VMXRpdlVHN3VSa1lCMGtpaThVM2dyK2p0VFRBWnVtWEV0U1M3U0tK?= =?utf-8?B?blZ0aXZhcTdkTXhtdTZJeXN3M2p6QnZjaHBnNTFwdnd1N3lDQXREYkwvMmo0?= =?utf-8?B?dDFDR1JEano3TFdQdngyMlhNRFhMRG1PbVQ5dnRqYnZHbFcxZlA4M1hxYjlD?= =?utf-8?B?OUZsenkwNzlRSDFkMHZRRDZBM1ZEbzhaTXFnUXpIbDVrQWdpdmcxQ2Z4d2ZF?= =?utf-8?B?SGx1YzVxdEFhUTludDMwRTMxNUU3ZGZHOEtBRXQrcTc1aVhZd0k4WHhMNVN6?= =?utf-8?B?dUZhOUU2TXp1TGloWGliWTF4Vy9QMlNCekZLY0lTZDhQSU9WZURXUDNRMGFP?= =?utf-8?B?OG96THdZaXQ3NjdTVTAwa3dKeGJYL1BmbzJPWXZGSnB3M1N3cmtKV2ZqSnRp?= =?utf-8?Q?Qa0v3MKeNIzmEzJ1ciRJ7/KTA?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 922945e6-f728-4313-9b10-08da5e84514e X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:46:02.0552 (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: uAJnnFQfaygK3hPi9A5etlsjBj8Qs3K8361xn82YY1ZJooaM8ThWK9P8GLqTAUQ2DnuMNO5mHQhIEpJOmxtqMA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0401MB2613 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025190719100001 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 and 1G 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.) Note that in principle 512G and 256T mappings could also be supported right away, but the freeing of page tables (to be introduced in subsequent patches) when replacing a sufficiently populated tree with a single huge page would need suitable preemption, which will require extra work. Signed-off-by: Jan Beulich Reviewed-by: Roger Pau Monn=C3=A9 Reviewed-by: Paul Durrant --- v5: Drop PAGE_SIZE_512G. In amd_iommu_{,un}map_page() assert page order is supported. v4: Change type of queue_free_pt()'s 1st parameter. Re-base. 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); @@ -351,15 +352,39 @@ static int iommu_pde_from_dfn(struct dom return 0; } =20 +static void queue_free_pt(struct domain_iommu *hd, 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(hd, _mfn(pt[i].mfn), pt[i].next_level); + } + + unmap_domain_page(pt); + } + + iommu_queue_free_pgtable(hd, mfn_to_page(mfn)); +} + int cf_check 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; =20 + ASSERT((hd->platform_ops->page_sizes >> IOMMUF_order(flags)) & + PAGE_SIZE_4K); + spin_lock(&hd->arch.mapping_lock); =20 /* @@ -384,7 +409,7 @@ int cf_check amd_iommu_map_page( 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); @@ -394,8 +419,8 @@ int cf_check amd_iommu_map_page( 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 @@ -403,8 +428,13 @@ int cf_check amd_iommu_map_page( =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(hd, _mfn(old.mfn), old.next_level); + } + return 0; } =20 @@ -413,8 +443,15 @@ int cf_check amd_iommu_unmap_page( { 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 + /* + * While really we could unmap at any granularity, for now we assume u= nmaps + * are issued by common code only at the same granularity as maps. + */ + ASSERT((hd->platform_ops->page_sizes >> order) & PAGE_SIZE_4K); + spin_lock(&hd->arch.mapping_lock); =20 if ( !hd->arch.amd.root_table ) @@ -423,7 +460,7 @@ int cf_check amd_iommu_unmap_page( 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", @@ -435,14 +472,19 @@ int cf_check amd_iommu_unmap_page( 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(hd, _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 @@ -747,7 +747,7 @@ static void cf_check amd_dump_page_table } =20 static const struct iommu_ops __initconst_cf_clobber _iommu_ops =3D { - .page_sizes =3D PAGE_SIZE_4K, + .page_sizes =3D PAGE_SIZE_4K | PAGE_SIZE_2M | PAGE_SIZE_1G, .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,14 @@ #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) + #endif /* __XEN_PAGE_DEFS_H__ */ From nobody Mon May 13 22:08:31 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=1657025316; cv=pass; d=zohomail.com; s=zohoarc; b=NJEVS9n+odaxqpLgf6BK77NoTusyodDpoVsLlwEgIvYAcwHN2Gge5IikGNDhlSiizkyXkLtFY6bTuj69D1b+dM77rCw4crDW0kv6jUL1+ZJyL7g6pTwFl6gR/H+pt0liK8Nb34Jc+BDyeqWQNIZ/69NvbkKalZ+FeM808Y0c+rA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025316; 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=r9TbBkHolhWw357aMMMhJeh7vv8iPQuKs2+KWYhw3tU=; b=Q5bcJ1oiaI9ARQpet4yPFD8wIOljMeZA+qxXL5SuBVpPY0+gTxTvJMrzPBAm/3EY0vEswROPB+C7pZmFiYWewq95Ocw2Rxm7yo/lIvyPoAiU30YDezI+YVpn0yJ3SH204GAUQ7PLzDw94q4PisSTf5d1Zkiqj62RNDbM5Ulj0VE= 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 1657025316483709.8869549572357; Tue, 5 Jul 2022 05:48:36 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361164.590541 (Exim 4.92) (envelope-from ) id 1o8hyS-0005tm-A8; Tue, 05 Jul 2022 12:48:16 +0000 Received: by outflank-mailman (output) from mailman id 361164.590541; Tue, 05 Jul 2022 12:48:16 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1o8hyS-0005td-6z; Tue, 05 Jul 2022 12:48:16 +0000 Received: by outflank-mailman (input) for mailman id 361164; Tue, 05 Jul 2022 12:48: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 1o8hwr-0002H7-4s for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:46:37 +0000 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2052.outbound.protection.outlook.com [40.107.104.52]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 818efadb-fc60-11ec-a8e4-439420d8e422; Tue, 05 Jul 2022 14:46:36 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB6065.eurprd04.prod.outlook.com (2603:10a6:208:139::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 12:46:34 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:46:34 +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: 818efadb-fc60-11ec-a8e4-439420d8e422 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iwLfJM6XjWiHI5Mb/VNr/+4IM6o8NlBY4BuKhUpLzjtKn7RtTTCCYb8hUoZgf2HypT3ymJdEZlKnYhVVSJhHNboLKpS87kJtV0SxKgHrDRP7eupEDQlIXtgrZ4eXSowj5yt3YDHmkbMcQB2nL+kfiWLaM8zJM4hjf7Ee5U/2DFKKFc6aV0AQOyilUhAtQ6t6ko0vVJ4M9V/+8pFp/fy4dVN5P6VV+nmHFvgV3bBvNQSPErYAwSAlMXTHgOOOnRTCU6nuetmE0v7tPs2BLD/tfe/Tyn1BW1t1roCACz8nHAagyZFxAle9E6erA2K9ZnvjBEZbn63LZPOyq0MhtRlzOQ== 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=r9TbBkHolhWw357aMMMhJeh7vv8iPQuKs2+KWYhw3tU=; b=Jhy7PtBpO4/IbzKKwebjPIIvYBWG0jMo6k6/pyVrzJzknog1PRZZQwK1rIeVwfuiTsEAUtF70k9WYVLSl+lqYmf3n44zQtVzbUj8mN+DFGQlnlE99atepZZ/8KnQOWHY6zTkzGZ/SXvrVYxotknfK2Qc5DH7NiyFHYHvIcwoksdDqaWRSKYNfh3ZyYx6lkSIM5HaV8QOf1KhSWxnEGrqJJe3bZKOSJLW+dh6zD7g7ss8BbGDYvgNTDMqx0nZ1yyvMU5CpeAZnQ462+dWO7RCNZeUu+ewR9Dg9k9MZuKu4KyfCF5m8MuvLvrC4z3p9XORL84Nf/mDGzuanDu36Tejxw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=r9TbBkHolhWw357aMMMhJeh7vv8iPQuKs2+KWYhw3tU=; b=30F6K3uBwjJUuRu93fYxfi9eZ4lzhQOWT2Ss5hs/0HkMrssJjpLLrdYjkaFSuoLqaS4TSvSoRhoLhM1HstUmZTASaf9IbcZxiqK8jJ78J6xjYnwrp7dCeVn4EgLQ0zsdOFLDbo8piuOt3sg0a5IME7cwyseZmK93E5NV8cuHJiRMnaAyzdeXFy+1OrnAiTrHP7fB5Ow1lzc74P1yd7VI6D3Sfpb5f55JF55oNp8hcG+UKhSLnyzVyWeSJUAokgo8yP5bqWLnDU5wgkYzhAiGkjHDwZcfwUV8Iy+hHIbmjT9NMQruEGczC0XYFfZU09KPxRehir8KJ/bxIDNCEl9lmg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <629e7e8a-b846-14cd-08eb-75433c8c3369@suse.com> Date: Tue, 5 Jul 2022 14:46:33 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 06/14] 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?= References: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS9PR06CA0087.eurprd06.prod.outlook.com (2603:10a6:20b:464::8) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e0d20481-ace4-43af-cb40-08da5e8464ce X-MS-TrafficTypeDiagnostic: AM0PR04MB6065:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UVnmM27Nhwn7EPjuVI9rcbxI5SVaANOlv6d5HbDhFucy07l/duo3635renKb810yapyrLuuJXAhllUGD+WqEqOmnI+n/jUsQFc3FkyS4hfdMYSaAWfVhYtefF4IkBEXFqOQv7o/3EtjJYOOhFN5BQXUpXB2y8zIxkasGTi8jaL/qU/jhBt3AmAHRv4M3zKpP6TdvCQyFAk3AC+FdtjT9KGD62D9XA+jdHt+H7HzmzWsBSVMnw3KXaCybUsy7oqAm4ma3CAYjWHZcnOYIGBMkb6wYwualo0g50wGy/LpoF2H8qM7QNdnf969jrVgY56h3JONdF3V941MXfxZbCyJeurVlo3hBghfUC9xi3RTeoRHNmdVMj+k61QIa01EDMRjP4HsOiaKYNLjRXrBajvI4xKiTILmoDHFx2ibCB8LO+8d9k9kS9AcB7uIIsO0nBtS352jneJIqQO66bd7e1pAyMGifhidRVm7/r2CD56rwN7KwNG2m/9BXqkHaDRk+VAfVvmHsuBDlIwlzWVfXNDOfkRbaV2smjcuaDxQvxNErG8E5zxBNiart1MbbLjQKrlC0rPj62zmzW2e9AsnSCg3HUqyjis+/43sIZbhbv0LnX+yyra3nqUtirOLznWHtz81BKjcEAecpjbbFjw/X76z0x14eN8CF+XAybSAEI9RrWbKjBNwAAWbCq7Ti26ISqf+hyjr0Wygcg5X3xxt3iKRGhqI9uMly2O6U6L8UHdDbWFFdjYsE0KCbENO5HTGOqm37YzWdd6oMJXGuetmT9eEYGFk1C85gRutx5p0SRZNp2JtVoL0EbxmABlKfyTo4TzXhHWdiemAKalT/k4c6dvFTdukqjSEWeJPunfMzXQ/WgEc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(396003)(136003)(376002)(39860400002)(346002)(366004)(83380400001)(31686004)(6506007)(36756003)(6486002)(478600001)(26005)(186003)(2616005)(6512007)(41300700001)(2906002)(31696002)(86362001)(54906003)(6916009)(4326008)(316002)(38100700002)(66476007)(66556008)(66946007)(8676002)(5660300002)(8936002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OEQ0L0JTV3o5ZnRSeXppMlo0ejlXNlZlR09SdHFnVTVOdEdKcGFpOGdzaktE?= =?utf-8?B?N25SdXNlTTZ5T3pjU3pSTUFwdVZSOFQzeHlOclFjNzRvNXcrM3lhSGJoLzJ2?= =?utf-8?B?Y204OVEwRkVrK0lFbkpNbXNuZ3ZKcnhXRnQwdCtaR1RRTmxDVDY5UHdLY20v?= =?utf-8?B?Q2h4cDAyL2FncTdmeDVMQTF4cE1aelhxZDBlN3VJR2RNKytSMzk4eHBNcTh2?= =?utf-8?B?L3ZlM1ZXVU8yRnpYTTBQZms2T2lkMWZjdFpRZkJpQzQzcjNxNkd2Vzd0aUFr?= =?utf-8?B?ZUdEdWRZRE5qeWVNZVlUT2xiaTRrRG5jYzJpR1pHOTdYM1ZieHFrdllHWXM4?= =?utf-8?B?aTNld04xZzdHTHJ5WkV6M2ViQ1ZrSjNJa0lQMTc2RDB4Z3FZY3plWFA0SHRJ?= =?utf-8?B?UlJnN0s4V2ZrUTRNbjhiamhPTVkzTStBWjFFM0Jxd1kza0dRY1h6MXFSczJ3?= =?utf-8?B?dWlwaVViMFBmOVlHS1NRcmE1azh3M3phK1p5SEtxRzJKTjF0UnUwVE9tdlFO?= =?utf-8?B?cHgvUDRrWmFaakhhT09PRUdyR2RBdXg3YlFKTFI5ekNGZXNXVkwzQzV2Uzg4?= =?utf-8?B?YVJueDZkc0QyM0RWVkFqRE9oTTZ6MFR3Unl0Z2JnSmV4OTdVU1psZW8weDVu?= =?utf-8?B?R0NGRmJoY1hXcHVYTlFpNGtMNUxnWmt1TEl5dFRaUlVWWEtNdWYwR2s2dFFM?= =?utf-8?B?cWkrbktGanF5WEVDaXR3VUloNmdkcG5YU1Y1UDFqWGh3dEN2YkhVUEg5dWRE?= =?utf-8?B?YW5JbG00UGk0azNFeUx2TUNOUTlqWlNHcHhLQkI0RVJxY1p1VWYxQVBZQjFR?= =?utf-8?B?blREbXp6YmwxU2pscUlkZzgwd2VzaU5tbjZFTjFiNTIvaTBBZHh1RGY5Y0Fj?= =?utf-8?B?WVBrcDNTZngwZCtvbDlMMXd1MHBOcUVralRBT2RJYTI1dis2V2xkMHQyZDVy?= =?utf-8?B?ampZYWo4S1JnNkVDQkRiRUFMTzh4ajhKN0NNeDltaVRQdS9LUThmN2hiUHh3?= =?utf-8?B?QmtyK0RZUVhLWHRQdDloMUtMYS90ajhCbURNMmV3TE91Q0dFRU1oYUR4Q1hz?= =?utf-8?B?dWFJbXZwMWc2aFpycElaT1FpTkJueldJTC9pRHlMbGx3R09qZFN6YzBZcW85?= =?utf-8?B?RGg3NEZYRXc3elVhWnFsTm1DZUZHbUMweVM2WmIwYm1MbzlpNnVKUCs4bjVM?= =?utf-8?B?WFdUeTYzYmJ5TUxDV1V5VEpNWUxDM0s5eWdmUGtlQVlJVmZCVlZaaEdxd25m?= =?utf-8?B?bnBieHpFbEpObXc0Rm1Qc2RzVHZzc3VDR0pEdm5CL1FzQlJ2N0hKd3g4bmFm?= =?utf-8?B?aVQ5T0duSFVMalIwQ3FpUHdaL0FyRFl3Vm1tM1BSYlFtRHZ3aVBaMThBYmIz?= =?utf-8?B?MStIL2h1aDJOTGdFSStXRzFNR2NYUmw3b0JjNi9tM1pHWDNIa1BLVStOanJv?= =?utf-8?B?TVYzYSt6T3FBRkd5UzVnVGVPR2I4MlBCLzdEbmhTUDZVZDN3d3FWdjN4c1Nr?= =?utf-8?B?NTJmWnVzOVA2TjdVZ0JWVUROOUxFbXNrRVZpS0VwUDFROUZybjRld1hUNGZl?= =?utf-8?B?YjF4YXFJMjJoRlBQNkEyZ1pnMDJLYnR0VVpsSEl0aDZQc0pPcGlDb2llS3F1?= =?utf-8?B?N3lhNWdtdmpHLzNwRS96S2p1QlorWGJpd1BwQTFldVBXR0NBQzBudWdsakR1?= =?utf-8?B?UnBwTXVYNFMxa3hVMEtoclFzUEVzVXgwSmZRRy9jYW81SEJHY3hQekFKdXl1?= =?utf-8?B?Q1k2UTlXdllIc1FDWkszYUVaMWZ2YlZPcTkxdko0eEErWVBBSm5SbVhIWEdG?= =?utf-8?B?NVEvYUhwaHpUNU1jNW5aYzJndFY2WUZWZlozcmtrbzN2Rks3Z295dDA3OElV?= =?utf-8?B?emtUM2F3REJ0N280ZFdjcWFOSlRnaG1GczNOK20rQTZJcDVBd0owSnBXRGxY?= =?utf-8?B?dEx1UWZQQzk3dFRodWxZdlZEYnhpMXQvdm1nejA4eCtaNzJtUkRneTg5Sk52?= =?utf-8?B?UkJXMFI1TEZ6aHUxSXlvd2p5eVZwT0NtWHk3NEZPQXZHcXRtVWZvSDJmWG1l?= =?utf-8?B?SkRrMWVZUVZGeG9sSGJoK3FMaEVudHc1aWgvaWtScUgvVzRMVytkWUtZMG1T?= =?utf-8?Q?sQcNZKWlgKwcH4AjwG+UFBk5s?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: e0d20481-ace4-43af-cb40-08da5e8464ce X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:46:34.8189 (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: pyEXXP1xKVZZJ3W7dFCoixVirL0irMd9YCEB6KbF1N/3OnMYREpnlRv50q22D1mF7UkuDl6UF/ucAJS9xgdY5A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB6065 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025317274100003 ... 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 Reviewed-by: Roger Pau Monn=C3=A9 Reviewed-by: Paul Durrant --- v6: Re-base over addition of "iommu=3Dno-superpages" command line option. v5: In intel_iommu_{,un}map_page() assert page order is supported. v4: Change type of queue_free_pt()'s 1st parameter. Re-base. 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 @@ -779,18 +779,37 @@ static int __must_check cf_check iommu_f return ret; } =20 +static void queue_free_pt(struct domain_iommu *hd, 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(hd, maddr_to_mfn(dma_pte_addr(pt[i])), + level - 1); + + unmap_domain_page(pt); + } + + iommu_queue_free_pgtable(hd, 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); @@ -798,7 +817,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) ) { @@ -807,14 +826,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(hd, maddr_to_mfn(dma_pte_addr(old)), + order / LEVEL_STRIDE); + return 0; } =20 @@ -2092,8 +2117,12 @@ static int __must_check cf_check intel_i 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 + ASSERT((hd->platform_ops->page_sizes >> IOMMUF_order(flags)) & + PAGE_SIZE_4K); + /* Do nothing if VT-d shares EPT page table */ if ( iommu_use_hap_pt(d) ) return 0; @@ -2116,7 +2145,7 @@ static int __must_check cf_check intel_i 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 ) { @@ -2125,13 +2154,15 @@ static int __must_check cf_check intel_i } =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 ) @@ -2152,14 +2183,26 @@ static int __must_check cf_check intel_i =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(hd, maddr_to_mfn(dma_pte_addr(old)), + IOMMUF_order(flags) / LEVEL_STRIDE); + } + return rc; } =20 static int __must_check cf_check intel_iommu_unmap_page( struct domain *d, dfn_t dfn, unsigned int order, unsigned int *flush_f= lags) { + /* + * While really we could unmap at any granularity, for now we assume u= nmaps + * are issued by common code only at the same granularity as maps. + */ + ASSERT((dom_iommu(d)->platform_ops->page_sizes >> order) & PAGE_SIZE_4= K); + /* Do nothing if VT-d shares EPT page table */ if ( iommu_use_hap_pt(d) ) return 0; @@ -2516,6 +2559,7 @@ static int __init cf_check vtd_setup(voi { struct acpi_drhd_unit *drhd; struct vtd_iommu *iommu; + unsigned int large_sizes =3D iommu_superpages ? PAGE_SIZE_2M | PAGE_SI= ZE_1G : 0; int ret; bool reg_inval_supported =3D true; =20 @@ -2558,6 +2602,11 @@ static int __init cf_check vtd_setup(voi 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; @@ -2629,6 +2678,9 @@ static int __init cf_check vtd_setup(voi 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; @@ -2961,7 +3013,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 Mon May 13 22:08:31 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=1657025310; cv=pass; d=zohomail.com; s=zohoarc; b=YF0ybPED9mWDoDPiL9rljk1IEmJQdmgNTVtaGe4U2x/KWS+4GSXdGmd996q6TZDqxcJntVuPLK6p7wEisHYjw9RhB+HjcQZ5Aug9JZx9foYhxgpjnqyFWcVJgm88bC2tcT7a+A764JUeZNctOwVD2pVcEo5JPvHdvD4VpZ/C7LU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025310; 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=nzH6EFMW+e3+Xs7xettJZg30tav9rjlAdUzEqGTjlFU=; b=gd3P4aY8jxS7Y24cSnAvLn5wVYnND+LpiunMo0keo5ZMKnpNDcEcIofE1/pvkcDeGTYM/PHZiyTw6F2L43ydCAOWAdO8m8mLpLTuyj36TnTRBMCYIP90pEOh/wnFu6sPyar7zpvbya8H9nlem/CFH+WJecvRSYrblW/GM+5urrk= 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 1657025310187597.000565903946; Tue, 5 Jul 2022 05:48:30 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361160.590507 (Exim 4.92) (envelope-from ) id 1o8hyG-0004rI-7h; Tue, 05 Jul 2022 12:48:04 +0000 Received: by outflank-mailman (output) from mailman id 361160.590507; Tue, 05 Jul 2022 12:48: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 1o8hyG-0004rB-4g; Tue, 05 Jul 2022 12:48:04 +0000 Received: by outflank-mailman (input) for mailman id 361160; Tue, 05 Jul 2022 12:48: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 1o8hyE-0004qq-9c for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:48:02 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70041.outbound.protection.outlook.com [40.107.7.41]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id b3f9e874-fc60-11ec-a8e4-439420d8e422; Tue, 05 Jul 2022 14:48:01 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM5PR04MB3089.eurprd04.prod.outlook.com (2603:10a6:206:b::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.22; Tue, 5 Jul 2022 12:47:05 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:47:05 +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: b3f9e874-fc60-11ec-a8e4-439420d8e422 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IifTTQEATJ5rsOs+0MYWRNiVeYOl4HmRLv/0qT4Q1/S7hNiCjoOTbtXdaxOAEtRqxx8f5CXdV1E4Z4QcrI356jNZ/BWyBVfYvqelaj+K6GYoeAdE0ANeHfUtmsL6gRVE0p41sAW3FOAPWUkDxBETeFaAtIn87TNoEznJ+zEdyMbiqJQiPV9Z4c4T4g7raW3n0QtgGojmXaW9OOlYjgmd5/NgnNREqjZJYlmxwsNVZXw80eYWsg7/WdrO3b44mQAkK33aYHzIiOxPiAu+acFZTgg6eMOn2fFCGqrjbQq2eHuER5pH0pvRoYDgU0B6Quwsvgbl79rCDrIOl5vNrqce4g== 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=nzH6EFMW+e3+Xs7xettJZg30tav9rjlAdUzEqGTjlFU=; b=eNuEDpnJGvKgefB/KMfXzNBxiCUJB5nU/VNiWl+aHiG5xI+WxDOtlJbg+9zOdw6xU6nsjS5xuYnCVxf50oVlSMbJqjGJiSQDUChwjcTEteWZ+hu6fWLqUKrww5vgS9yggj1Jyj40XndtoxgnFARiUECqD6BbI2d5XelcZ0OtuZpVg7A6yc1boX70L58LBfOebaix1w2mu4xzHx4Bwdh6nHiqgrPQXnN+iQLdx6cRz4b9fVAlRFohrBTyastvOAiYofnXE0Vsz/6G7gTsT0G35sJ1/hmC6Sq7iuGBr03lUKE7wQLfjpNK7pw0LGEiFHloOv1UEFjdH8gSNF7RvxV41w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nzH6EFMW+e3+Xs7xettJZg30tav9rjlAdUzEqGTjlFU=; b=vZrmrFR22i1aPqYekL2ea2xnPgR619OXDSqa6tUwtORrSK6F/h9v2zLzmGevDHSs7Sf9TmRfWAyzosXSqY1tSA5z3hfobEoLXi3+L5VHyDOufS+0E4IKEj3NBy+DQAomK8qRA5Iv+ITd3cxCMNXxEoeFas6aj5ud9r7jYoQ6w/tDj8ndREyafbRXV04X1Q/u4H9SgAcoekVJRlm4YNSfBQZ/S+nmK1cFUy7b3ea1WfaZuww+Y0C7x+/Aa26iC9pwh58t4E4fuVh2mxy1pM659z+eiGXwmsrNTOKdsUOkLHW8qum5VRS94tgwLmbEv7GI7F3zg09F6C3nGf/WB7jHBg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <1ff53db0-088e-ec08-b757-b03639c09432@suse.com> Date: Tue, 5 Jul 2022 14:47:04 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 07/14] 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: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0102.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a9::18) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f4e76a39-2084-4ed2-6ff9-08da5e84771b X-MS-TrafficTypeDiagnostic: AM5PR04MB3089:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: KHX2nzvOmr4qFPnYicQka8unMweegtMNmAcJzW2JQRf4PSnFPmvUIrzPD/cyuolqQCn89da4Cjai+6/GaPpt8MbH3mwlZsyrErAgc0zH0N8ELDpGIHNuvuL6Sci5E3CzpEEMgy4/XVRj+dTMZEyqoGAZh7K9wettedRRHfTs/qvJssmkMDbm7Yj7HadSLcU5rfqTQN/T/WTceeUTjKJREqPQbwNW4od5JHrvP4xkvZQRPdy4auDjNv4bYF4NVvNRW+xr6EYPTG9fV48jL3oLyJQT6lxACLw0REaCO3PqLGQlUCjIpR+bUVx841AK0ONCq6Sj+OtyhBD9cJFnWreu+IsBa8zgQHCvgTdh6f9CCmYTVdWcbclPJDWlgndjoAQZDu2VrlLLt/GJ65sGTTh1t7owJPN/0uwWYMmR8vGsvP0Ji1HQEA7Gdn5sjp6rqTG0SPy/KPT5R4KvFd6VtffZiuygA3wcoIoELV5Y+KjKUVoeVwIFMGm+8QhjFLWX6x+wKlMaSDPAG8BRzu3LZiGtjhvbxKRJASyWDhBmT1CTgOmOb0fsNFIrPp1lfBHZNcyCf1AzrFUBv319o2rTolGsqGJvZBLeBwYvBnAOviYooIn5D3eHpLkPey7x2FIAI2lX1ut3gHBzA6NqmlPmAfF06CQmh+SbdKeUK6BGA3qVXEAypLHKsXjVpg75tzPBeMQNAhvQDhHEqTMBVvnPCQwuc72DzGDx5NJQuWt18n6Cm7cHgF7RoYwrJvvZ8Fsps/C5W/pMiq1nMtE3gOTEg2Fiv2oezf8kNTZ8ACs7INk97K5gRQN0WOhSMuIsbzAgQzsDA1Ge3Ulyqacw9EUlAAqW/TjsUIqEH0zfTcTEBP+D4FE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(366004)(396003)(39860400002)(376002)(136003)(346002)(478600001)(8936002)(5660300002)(6486002)(86362001)(31696002)(2906002)(6916009)(54906003)(316002)(41300700001)(2616005)(66476007)(66556008)(66946007)(186003)(83380400001)(6506007)(31686004)(38100700002)(36756003)(4326008)(8676002)(26005)(6512007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SnZZb2RNbDJvL0pvRk1tbGFWN1kxcTNCSURRUkJhNjB5SlVSL2dDRHpvRkJQ?= =?utf-8?B?bDhFcjVIeUVtbUovYStGUUk0VE52ZFdyWVBxTklaY1liSWtpRXgzMW1SUzd6?= =?utf-8?B?WWVSUkY1YmNBeXlRMkRwNWRXUG9uTlZCYWtDKzVuZnlSb2ZWaHowVklMUGlh?= =?utf-8?B?N0I0WU9oU2VqOThva3lHdk1PWDlmUFYxZWF5WUtONFRFZmE2NkMxcmN5Qi9o?= =?utf-8?B?Ukx6YkhobzBGenZCS25vWGVXeDNoc0lBQXgzZUxCYUp1M09ZYzhqek5BaVR1?= =?utf-8?B?cGFUL1FuMnYxbkRCcklUeCtnanNKRGtQRzMwQndadHkvc3JYTjI1Q2FwbmRi?= =?utf-8?B?K05wV2tjZTVtYUZDMlM0djdEUmwyZW1VODZrMWZUUzQvcUVLTXl2RVdNMitR?= =?utf-8?B?SE50bFptM0NZNTE4MXFYRkxDNENzWFYwS00wZDF0YU9qQTU5S21MSFd4djJl?= =?utf-8?B?R1lEZndCeEdRNzB4YUtRL1AzMUhMelVJNWpiVitnMDIxc3BTOWlpdVZaSGp3?= =?utf-8?B?Ymo4TE1iSmJ6Z1Q3bkFtTW43amd1OEt0bUI3R1UvTEF0cWtLcHVBRVlwNkVo?= =?utf-8?B?OEcrTG1wdGVTbld4RndOWkZNa2hBQWl6cmQ3TVYvd0g2dFlMd25nT2ppeXJG?= =?utf-8?B?c3h2MVBFYVRQQ2tSYzFIVEt6Lzlia0lYZkY5RUE2S1VDUXpvOG05dDloN3o0?= =?utf-8?B?SVRZV1pGdVMxcCsvNC9vbDd2a1NIWGFveGhrTk1FSER0TFlXQkIrc0JIMVZh?= =?utf-8?B?K3NTMnIwazdDOTRDK0Nya0FLWC96dzM0WkN2MXRVWldyOElNKzFJWld6L1pk?= =?utf-8?B?S211MGxRWWIwK2xURTZ1M3FCSWNLWUpuSFQwNVhZTHdIaFgxbWdzRDE3Wmx3?= =?utf-8?B?NUo4OU1MWWxvZjlIZTFtdFppN0tibW5CanRRbUsxbTVSbzlEUHlTNndjQURn?= =?utf-8?B?Vmk4UG40NTZsdnoraGNmQ2xlSmZaS2ZWalZlanFDYVdTK2ZMZDNNL0gwRVhz?= =?utf-8?B?RXA1a0RsMk1OdnhkY0JEam5ndEtxZnk5R3NmVlhETVRNbzdaQ2Rob2laczJv?= =?utf-8?B?KzgxYjVLVWhlQU02S0NnT09abCszd0kxcG9INGdFQk96WnpicEd4dDFROVVq?= =?utf-8?B?d0s5c0RSTTJndVFTVlZYSDhOMW1pOHVRN1RSc0RYbExNRWdNY010MWFRemJ4?= =?utf-8?B?bWRUcXM0T0h3bHNrSFFxU2tCd0FvQ3F2V1BpTHRlOHBQb3hGNXZyeXNPVDQ4?= =?utf-8?B?RUVzVjU0K2IwVktOQUN3NjVySFAwYmZyRVh5MnNId3Zpd2QwbGJFTnVFRVkr?= =?utf-8?B?eE03MmhaRzVRaWNEU254cUZuY2hkemd2ZGx1QmgzcnhtcXpMcVB5S0xnMzZx?= =?utf-8?B?ZmlwVGovVm11Uy96NHpPVlA4dDBIbVhZTUE4Nk4wTmZhY2NGNHNwMUlQSFl2?= =?utf-8?B?QXlaUGtZNWJIZWdLbDhQSVQ0cHN3SnVXMElJVmJaaUdWQ1ZCSzFWb0hvbjZ0?= =?utf-8?B?bkJFZ3g0YVQwN2lBYUdicjA3d0lYWCtkcUk3NXdlMHNNSER3c0diK1hKdVBa?= =?utf-8?B?akZFWTVic2xmZ0JlS2V5dnVKMGNuR3o2a2FjZnRWaVNKUEVtUUVteDdSYUJ5?= =?utf-8?B?SFNoRyt3Tk9kTzhJYi9KeWd2UXRrRkg5blZOQlBQSGNJZjFQenNwVW90ek5Y?= =?utf-8?B?UjhNVnU4TFFhVHBSRWpDMXN0Wk1qdWRvQSthd0NKYkJyWnpFVnFFNHp5NFVY?= =?utf-8?B?S1h3M1VtNkdFditkSkpRTDdSYVZDdWJCZDZTdWVOTHR0QndPNHI1a0lHRm12?= =?utf-8?B?Y2QxdDZXRTFodjdaaE9YMVJJajZTRnBuNjVmTGJDNnhjSjA2LzJPb2FlL3Qr?= =?utf-8?B?ZlBTeG9PU0t2c0tWVVpCTXZEYVJuSEk0aHJ2a1phbzQ4cFZEQ1drQUZMcEFF?= =?utf-8?B?UHhyL2dpVnNIZXNuYUxWRG9PdHdPbk1sMHJ3SHViclBDQVo1ekNOYnZXd2VB?= =?utf-8?B?Y0FoczVCVFFHR0ZjaDVjN3QyNk9HRDM3TEpQNU0wUGkwa1hxMnhGUjFpTlFK?= =?utf-8?B?TkV0MFFKYWhlVTE2aVdTQ2lxcTlIblZQeWthdnc2ZUxXNlJhY3J1SHlkRXhY?= =?utf-8?Q?wpmLAXj/2vIJczfiESL3XTyU1?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: f4e76a39-2084-4ed2-6ff9-08da5e84771b X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:47:05.4733 (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: 6E6aurzClZBOFWPGA7ImmFoHM3ea5vP1JrKR/Exhzt3El9FL9kHTqJorPmT0LOf/WCUMXKTmurzr5NYFOKbg+w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB3089 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025311295100002 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 Reviewed-by: Roger Pau Monn=C3=A9 Reviewed-by: Paul Durrant --- v5: Bail early from step 1 if possible. Arrange for consumers who are just after CONTIG_{LEVEL_SHIFT,NR}. Extend comment. 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,110 @@ +#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 (or + * else only CONTIG_LEVEL_SHIFT and CONTIG_NR will become available), + * - page tables to be passed to the helper need to be initialized with + * correct markers, + * - not-present entries need to be entirely clear except for the marker. + */ + +/* 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) + +#ifdef CONTIG_MASK + +#include +#include +#include + +#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]) <=3D b ) + break; + 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_MASK + +#endif /* CONTIG_MASK */ + +#endif /* __ASM_X86_PT_CONTIG_MARKERS_H */ From nobody Mon May 13 22:08:31 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=1657025312; cv=pass; d=zohomail.com; s=zohoarc; b=Gt9JhHtzEftcfb48p18ED4zOSoFlU9YM6tf/2cLcJ/oC1jlhe554/b5S5yjm2bDGYMK2aiqpt0ZRvfsYWfYVeDndNTFBfvuJsptboZ/ywMkYP04eFs37X+JaFdXo7OHYQKAMp8+Ej3lqc8BOA46SHh/oPU8WpM+6rFFA7hsVnIg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025312; 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=hBJ+nA86CUu4Iegk0a8bS6g3MTobVKpnG0RqAIWkZLM=; b=KRQQTuwlxRosBJ1kwChZbuSISMJMTDWgeySGSdmGeV+jar/YiHe8cqCgUjgOpH8HRgJ+Qv9ukV4O2ay51GfA9IRajilvfoTfJqXImmrkSAX6V6RcJHMcBNkLaTfWgsJzHDb5GrLvR5carED8bQMPW2Ju8exv7A/EdxKkn+9G6ZM= 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 1657025312332929.2546874304103; Tue, 5 Jul 2022 05:48:32 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361163.590524 (Exim 4.92) (envelope-from ) id 1o8hyH-00059y-RN; Tue, 05 Jul 2022 12:48:05 +0000 Received: by outflank-mailman (output) from mailman id 361163.590524; Tue, 05 Jul 2022 12:48:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1o8hyH-00059G-LZ; Tue, 05 Jul 2022 12:48:05 +0000 Received: by outflank-mailman (input) for mailman id 361163; Tue, 05 Jul 2022 12:48:04 +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 1o8hyG-0004qy-83 for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:48:04 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2067.outbound.protection.outlook.com [40.107.22.67]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id b52bc30f-fc60-11ec-bd2d-47488cf2e6aa; Tue, 05 Jul 2022 14:48:02 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB5252.eurprd04.prod.outlook.com (2603:10a6:208:cf::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 12:48:00 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:47:59 +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: b52bc30f-fc60-11ec-bd2d-47488cf2e6aa ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=J2Y4SB0nt/+lGPUEXk+04nHq25JN1bmQhQJKeBvQdchFcpy7WU3QQ/29NEX1WxyTdtIJGFqG8SRRZ6YBK0yLB4/szPnjIEua7mnFpenh3qAJP1H/nlHpsd+Dmu2Mf8js4wJVtiA5I9eFxWXIXISiWmZrA6Ie1X0w97JKbRYB+Cwusd8v6jWH5E48cQcC5nYdHr96OG9bzO90/OmZ+1RF9KxUmgVracsmskXuzbN8woOTeKoCcm29LdG0nXwoJKEKEDQZY389bc78jgCoybm1bEj3rTGOalXMkiByGfqlqhZbJqO6FUvz3NaNnlLjhF2OKE05G4ieWUQjvjhVLw0AEw== 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=hBJ+nA86CUu4Iegk0a8bS6g3MTobVKpnG0RqAIWkZLM=; b=Ah2E6qAOLtnhMC2A3W/hR2Uo447DNGk1JBmsklLLI/58x75ojhd/wkxlswJ63XbBqbwZEinSa94E7WXcTutEeKYP8Zjls2H84f4RK3xTT9S1Dl41/McIJ3gw5wWIuGmCNN2c+gCmxe1o1p/Q7wTZ8HW0M257Xl6T2Fl7GsCTkD3xkp2SlE8psvIZvzjI0hh79wKEX8TjLbzwpsmaAGYbcMAh1ZscmJw4mlGrZ4mw0C5AcCF3zarpgDAkCp6Nhi/K1/AIwp4VmMpMXJu5rnnvUpKLcI4Bn148jCDUs8lMs39NRdcqmjh9Lm/dqSVqbhQwt8kGKnO46vptNhGDFKmctQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hBJ+nA86CUu4Iegk0a8bS6g3MTobVKpnG0RqAIWkZLM=; b=QTwJWf3JfT2vsx/VyLm8Y8fKgpO6VBInY6R3CIKk0JQmNskOXSqZO0YXExSGw9caRRelqRuLj3AoKaK93QeLRXggqL2F9u8YzD2b9BXBJMIQpnmNhPuc7/+B9gwEIJpZfDAjnNShO6hO3aBpx1NCrmrZNGRrw6hzUyEXpRRpvoCowtEihg/AJZbpKmAt4A9fvdS3a2Qt69ON06BSt5AustmVY0ZwBuGqcKun5xvfdwBGnE6jErxCDUdHzIpdwYDHNMIgsS65U/8X75sxB9BZYCRXJuFjoMKqNQk7oCB/R3yfl2MztDiCFbg4pSbEPvKXjyN2J7kGQyxBlS9exNhgoQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Tue, 5 Jul 2022 14:47:26 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 08/14] 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?= References: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS9PR06CA0411.eurprd06.prod.outlook.com (2603:10a6:20b:461::25) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bc706466-9186-450b-fc37-08da5e8484ac X-MS-TrafficTypeDiagnostic: AM0PR04MB5252:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WAgGNLApFgpHZ7E0CNKvsAGRtRDK0qzaoR4DwfDZWDvGYI8diwHm1dpg3pZ2KPKVA7zLIlj0ILQW/otE1Bxll0Joi16mQhJMmw00L+kmx+Ml3wxP49+ttKgyptOxi3xxN0JGgvMG+6zMXmqpAMp4iD5n+ok73tJ1p9VA6ZZWS+iQvavm1cvcIBvZ99m5tC6JLnTxqQa54j9a/GFcFLTiXF6mlhyJLRnpLM/waDceFk14sVytW1Q+roIzpJRG0/00hdZtlaEfi9U9RB+siE/sh8RQ56+1UiCpNxA/gY+Dd1VYSjf8UhWpcOAjRjyGFFNQUuDaYQohG5JVCXJlCVsC8Rt47XAQEDphkqRL1WDZmhIEO2APzD3mpY8x9foLsYE3F74W3VMpSSrPPFylO0GHGfkxV20pyNRSaVbebpTVGldH+7HT9bkJfZi4SXx8gkKE604BQWLV8ph8F6zt71plwXixvsjoKBE4BeKfFbXpU/cgzgCnmeCehMMcAi/R6Tw3gmMHyGM6OkPaYiLQtJkQfzsAqdExERr28y97eOl5hvMp+EJ+BllxRbEqXCVxbSZHKYlmO1bRE+gEobcWhn61RTfUmtb9BygEJIXLs7zjzlHKdDYFaOUiCn+pM+yKufbRt0EK7nzzgHJ0UtsUoMhV34T7MLNYlyNR94UU1CSsUKOsZKigEHyxW7DZaxoBtgaLbsV41WyiOpgwF7//qk+SyKRaZx0cwUJnEXez4QONj29neRL7pYGP6H8Wi4SP6OezusZu6P5OSwU96kKrQ/5Ss8sm86d2zejt011TXa8olzHMTk2Oani5kEU2vPb19rCSsM6I8RimxlLV7cSgjRHr8WgubbWbBhv1sWHR6IIX7O0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(136003)(346002)(376002)(396003)(366004)(39860400002)(478600001)(5660300002)(8936002)(6916009)(54906003)(316002)(86362001)(31696002)(6486002)(66946007)(4326008)(66476007)(8676002)(66556008)(31686004)(2906002)(83380400001)(2616005)(186003)(6512007)(26005)(38100700002)(41300700001)(6506007)(6666004)(36756003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZlV2a3N4VVFsMmF1WWoyeHNud1J4SWJ6Uko3akFBKzJISWZOQzJuMzBRTzlh?= =?utf-8?B?ckhiQytQVUV6dXYxZnlhVDNzNVNwamVOUjI2MTVrblJJNjhMOWxkS1RUYUZx?= =?utf-8?B?L3NqSzhUKzloWFRqc3cybXRzaVYvRkJmYjh4bXQzYXlkZExFbVZ4OUR6cHMx?= =?utf-8?B?dnpyc0RHVlIxNEpnS2s5Wno4b0V5b2dIcnlpajFQblVMRENCbjIwaVcrOFVn?= =?utf-8?B?N3pvSUpFdEk2OXJmN0dBUUVJSFhyaGFzVUk5RE1teW5aemM5cG5Wc2xGMGpM?= =?utf-8?B?MkhUYVB5b0hPNUg0Ty8waURxQ3FUTVN3Rnc2OG5PUDg5NitRYUY5ZXJkZU52?= =?utf-8?B?MzArQTcwbmZ0R3EzZXpKLzMxMlpEVFA4SEZxOGU5RHpyK0ZBdEFHTVlFRUcy?= =?utf-8?B?UmZDdjdUVjIrMGl6WHYrZmwxcy94bmNnb1F3ZGdmVmFLL0FpYWJORndseXNu?= =?utf-8?B?QVI3SE9UVmFlcmw4NFJGL2RNbWxKY3RDK0k2V0NHM0YyQnNMb3B2K3FzcVlu?= =?utf-8?B?NjhiNmM2RS8wWUc4UUVrR3Exc3BjSGNOcmtFeFkycDF2M0R3L1RCVmF1Y0xY?= =?utf-8?B?VnpBck1SWGpPQ0lMV2xNQUZuWXhYSmE4SVc1dFRhUVkzakJsS1QvSTUwUTE1?= =?utf-8?B?RXV5bk1mbjRTQUI0M1F3SjBVWGdkNW0zUHNRWXc2UzVwb3UzRUcvRmpVTVpr?= =?utf-8?B?MktRRi9rNlF2aEx3L2tWRFU3aFM4bGdEdktBSWlaejJTOVZwV2RyTGZYNXhC?= =?utf-8?B?K3pQVEdGTlBhaVBpRnNpVHZtaFBCLzBERXJGVGt5TGtUa2cwYjJHQUEzSklj?= =?utf-8?B?TGVRSjN4SVltalk4RDVNNFRNQTUxRXFhUmEwREs5Z1AxNDNqL01XRFRKS3dk?= =?utf-8?B?b09TcTh6YzQ3VlBwMmlDYysvcjg3c3VWQzdFdENXNlhrOFFnQzM1VlNySlFO?= =?utf-8?B?QkV0TGtSL053TnBiaUFTdlBleExiTzBlcy9oOUw4MmJ3S1o5N0NYNFFLZWor?= =?utf-8?B?RlNhK3VUakx2RVVPTVRyMjFIa3pzVmczWjc1eDJVMEQ0QWdQNFd5Nkd3VmFs?= =?utf-8?B?NmlFM2Y5LzlVMnFrdTRjbS96bVp6eEduRHdQRU5CWnpsdmszcXZBKyt6TWly?= =?utf-8?B?QVJnc3YycWttL0lhOXdlRnAxWU9Wa2c1VGxIOUQ5akdEcUFkUG9XT3F6MlVI?= =?utf-8?B?QXl3andaa2VlcHVlWXVlbWFRTnFoYVMzeTVCZzE0R1pjWmRwSVN5cENmeFF2?= =?utf-8?B?aXIzM1FHWjJJR2YrWk02VldDbHhXT3FXUjJBNytlQWZDYWVLc3BMY0U2ek5K?= =?utf-8?B?VDRWRXhVVjVKTmk3U1NsT0Z5Q0Vlb0JBaTEwOUF2SS9ReUp1STAvTzV1bDkz?= =?utf-8?B?aisxZjlTTlhVeUN5QTdVWkFrWURKeVVRMWJib09HdjczY3BwM3NWbDdKSkps?= =?utf-8?B?bmlUZnp2d1hZdXExbW40Y0RnQzFHVStnQUllUTZyMk1vbk1OM09Md25SeGJQ?= =?utf-8?B?YnNnMEVnUHVoMmZ3L3BEN1kwQmtMaUliRUp3ZWtBL2YzUnl6bWJUb0hDYkdv?= =?utf-8?B?cVZIeUVZRzNjUllJLzFlaWVoQVNkTk40ajJjL0lYNTZNOEQ0YitVYjRMajVy?= =?utf-8?B?aitTNHZCWlhxZlA1YU54Ujl3RGpRUjJIVVBzODhoM21zOWRDWnpZVTV5ZVcr?= =?utf-8?B?MnVGZ092blZURXFySTFVTERZK29LVWRuUjlGaGkxNXZVVlFRblJlbEx4UEt2?= =?utf-8?B?U1E4L1RVano0SDR3Mk1OYmhXRjJxM0txQVpUeFRrZE03SHptUUtndUVqc25Z?= =?utf-8?B?L1Q5NmxTNDJzN0kxM0w5MERrbTQ1NnpBWEZFeHlRR1lXVlB2cEd1eVpvejM1?= =?utf-8?B?VUYyVHkwbVUyWDJmbWdMSUQwZGsvY1Z3R21hN2F5TlhZM25OVTBXaWt5d1FZ?= =?utf-8?B?OEg2MEZ0cWg5RmM1bG94Q2JhNlR4bStuYitQL3d3d3pvb0lEVDJEd2gvQ0c3?= =?utf-8?B?WWFlbkZQUnYzSWplaXJwMHUxcVRaVlM3dGh3M254dWh0TjBzNWZNSVRvcDQ3?= =?utf-8?B?K0xPSTEybkZnU0IvRXg5TVBiNmY5NTRGL0NwUGJWcElrb2lHNHdVelFndVhi?= =?utf-8?Q?5U2ZfWKka91rDbw3HQ2LDTa2x?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: bc706466-9186-450b-fc37-08da5e8484ac X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:47:28.2219 (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: Zp3FlZr+YQqzyLOvBTWxJvy9+ynixkOvZP3gTA37sqUbvEekJBbK7dQzM0eTev2ggDO/x62/F8S5tzEhcURXDg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5252 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025313328100005 Page tables are used for two purposes after allocation: They either start out all empty, or they are 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, and identical attributes, but also a respective number of all non-present (zero except for the markers) entries. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian Reviewed-by: Roger Pau Monn=C3=A9 Reviewed-by: Paul Durrant --- 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. --- v6: Use sizeof(). v5: Assert next_mfn is suitably aligned in set_iommu_ptes_present(). Use CONTIG_LEVEL_SHIFT in favor of PAGE_SHIFT-3. v4: Add another comment referring to pt-contig-markers.h. Re-base. v3: Add comments. Re-base. v2: New. --- a/xen/arch/x86/include/asm/iommu.h +++ b/xen/arch/x86/include/asm/iommu.h @@ -146,7 +146,8 @@ void iommu_free_domid(domid_t domid, uns =20 int __must_check iommu_free_pgtables(struct domain *d); struct domain_iommu; -struct page_info *__must_check iommu_alloc_pgtable(struct domain_iommu *hd= ); +struct page_info *__must_check iommu_alloc_pgtable(struct domain_iommu *hd, + uint64_t contig_mask); void iommu_queue_free_pgtable(struct domain_iommu *hd, struct page_info *p= g); =20 #endif /* !__ARCH_X86_IOMMU_H__ */ --- a/xen/drivers/passthrough/amd/iommu-defs.h +++ b/xen/drivers/passthrough/amd/iommu-defs.h @@ -446,11 +446,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 @@ -21,6 +21,8 @@ =20 #include "iommu.h" =20 +#include + /* Given pfn and page table level, return pde index */ static unsigned int pfn_to_pde_idx(unsigned long pfn, unsigned int level) { @@ -113,9 +115,23 @@ static void set_iommu_ptes_present(unsig return; } =20 + ASSERT(!(next_mfn & (page_sz - 1))); + 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 CONTIG_LEVEL_SHIFT); + + 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; @@ -295,7 +311,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(hd); + table =3D iommu_alloc_pgtable(hd, IOMMU_PTE_CONTIG_MASK); if ( table =3D=3D NULL ) { AMD_IOMMU_ERROR("cannot allocate I/O page table\n"); @@ -325,7 +341,7 @@ static int iommu_pde_from_dfn(struct dom =20 if ( next_table_mfn =3D=3D 0 ) { - table =3D iommu_alloc_pgtable(hd); + table =3D iommu_alloc_pgtable(hd, IOMMU_PTE_CONTIG_MASK); if ( table =3D=3D NULL ) { AMD_IOMMU_ERROR("cannot allocate I/O page table\n"); @@ -726,7 +742,7 @@ static int fill_qpt(union amd_iommu_pte * page table pages, and the resulting allocations are alw= ays * zeroed. */ - pgs[level] =3D iommu_alloc_pgtable(hd); + pgs[level] =3D iommu_alloc_pgtable(hd, 0); if ( !pgs[level] ) { rc =3D -ENOMEM; @@ -784,7 +800,7 @@ int cf_check amd_iommu_quarantine_init(s return 0; } =20 - pdev->arch.amd.root_table =3D iommu_alloc_pgtable(hd); + pdev->arch.amd.root_table =3D iommu_alloc_pgtable(hd, 0); if ( !pdev->arch.amd.root_table ) return -ENOMEM; =20 --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -342,7 +342,7 @@ int amd_iommu_alloc_root(struct domain * =20 if ( unlikely(!hd->arch.amd.root_table) && d !=3D dom_io ) { - hd->arch.amd.root_table =3D iommu_alloc_pgtable(hd); + hd->arch.amd.root_table =3D iommu_alloc_pgtable(hd, 0); if ( !hd->arch.amd.root_table ) return -ENOMEM; } --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -334,7 +334,7 @@ static uint64_t addr_to_dma_page_maddr(s goto out; =20 pte_maddr =3D level; - if ( !(pg =3D iommu_alloc_pgtable(hd)) ) + if ( !(pg =3D iommu_alloc_pgtable(hd, 0)) ) goto out; =20 hd->arch.vtd.pgd_maddr =3D page_to_maddr(pg); @@ -376,7 +376,7 @@ static uint64_t addr_to_dma_page_maddr(s } =20 pte_maddr =3D level - 1; - pg =3D iommu_alloc_pgtable(hd); + pg =3D iommu_alloc_pgtable(hd, DMA_PTE_CONTIG_MASK); if ( !pg ) break; =20 @@ -388,12 +388,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); @@ -2168,7 +2169,7 @@ static int __must_check cf_check intel_i 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); @@ -3058,7 +3059,7 @@ static int fill_qpt(struct dma_pte *this * page table pages, and the resulting allocations are alw= ays * zeroed. */ - pgs[level] =3D iommu_alloc_pgtable(hd); + pgs[level] =3D iommu_alloc_pgtable(hd, 0); if ( !pgs[level] ) { rc =3D -ENOMEM; @@ -3115,7 +3116,7 @@ static int cf_check intel_iommu_quaranti if ( !drhd ) return -ENODEV; =20 - pg =3D iommu_alloc_pgtable(hd); + pg =3D iommu_alloc_pgtable(hd, 0); if ( !pg ) return -ENOMEM; =20 --- a/xen/drivers/passthrough/vtd/iommu.h +++ b/xen/drivers/passthrough/vtd/iommu.h @@ -253,7 +253,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; @@ -263,6 +266,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) @@ -276,7 +280,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 @@ -26,6 +26,7 @@ #include #include #include +#include #include =20 const struct iommu_init_ops *__initdata iommu_init_ops; @@ -534,11 +535,12 @@ int iommu_free_pgtables(struct domain *d return 0; } =20 -struct page_info *iommu_alloc_pgtable(struct domain_iommu *hd) +struct page_info *iommu_alloc_pgtable(struct domain_iommu *hd, + uint64_t contig_mask) { 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 ) @@ -550,7 +552,29 @@ struct page_info *iommu_alloc_pgtable(st return NULL; =20 p =3D __map_domain_page(pg); - clear_page(p); + + if ( contig_mask ) + { + /* See pt-contig-markers.h for a description of the marker scheme.= */ + unsigned int i, shift =3D find_first_set_bit(contig_mask); + + ASSERT((CONTIG_LEVEL_SHIFT & (contig_mask >> shift)) =3D=3D CONTIG= _LEVEL_SHIFT); + + p[0] =3D (CONTIG_LEVEL_SHIFT + 0ull) << shift; + p[1] =3D 0; + p[2] =3D 1ull << shift; + p[3] =3D 0; + + for ( i =3D 4; i < PAGE_SIZE / sizeof(*p); 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 iommu_sync_cache(p, PAGE_SIZE); =20 From nobody Mon May 13 22:08:31 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=1657025309; cv=pass; d=zohomail.com; s=zohoarc; b=ZrQ8VzbjtcUOWyLYenA1yNH5otOfCoZ+UnQso/0cXXt/fYleQIT5WkncWENqx/Hv1NkGDSh7VmD4h7nziDVFbPVy4WpCyLFJVLju18pBgCAdvCT5hEB4MbrE612aZvh+wB6MBG1V97Wtfi2LZ2E3vS+S7wRTQKZ/QevFruzN4xA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025309; 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=i1SRbMZ5vtUn4A75NysmPVCeWEjl1KBkL8Pu3NNkQeY=; b=KYzTMWkPLezTLO11Wk7hfirwkWH+61iDmG6BgiYv4OlW5i/K86GwQtdoDc+3LeM41g+iS5uOyz07gUwxu1sApog3KkTbIxrKjUVKxN/lU9jzC7WJNjkiQb003W4tYm/vxzPGJfpjmrL28s0HPQlQSIAuA6UvOQ/rsVPrHfcFhsA= 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 1657025309159764.2080547381812; Tue, 5 Jul 2022 05:48:29 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361161.590519 (Exim 4.92) (envelope-from ) id 1o8hyH-00056r-G2; Tue, 05 Jul 2022 12:48:05 +0000 Received: by outflank-mailman (output) from mailman id 361161.590519; Tue, 05 Jul 2022 12:48:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1o8hyH-00056c-CB; Tue, 05 Jul 2022 12:48:05 +0000 Received: by outflank-mailman (input) for mailman id 361161; Tue, 05 Jul 2022 12:48:03 +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 1o8hyF-0004qy-Fs for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:48:03 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2067.outbound.protection.outlook.com [40.107.22.67]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id b4afddd3-fc60-11ec-bd2d-47488cf2e6aa; Tue, 05 Jul 2022 14:48:02 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB5252.eurprd04.prod.outlook.com (2603:10a6:208:cf::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 12:48:00 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:48:00 +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: b4afddd3-fc60-11ec-bd2d-47488cf2e6aa ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nm3IJ4XilEA5dQuHiLq0ypPMUDrcfS9yHJVrPCwgx/BxjECU73yZOWB0pkDlB4HmBcmklt1Lz6cT0f7a9adZCr07nYvRsrhVFDAhKst2mSclsuzq417yXvmnt4NHnbVC5PO6ZBQZa5UeGdP70CNTsyqDoRhn2CWLuBLkuWKXg14xKKBeQNBhtI25ReJZqJaK71yeGBTF3fXia6xlvN3CUKN/c5k2d23Qk0fjlcuV88T3grPQBKX2/nWxv8/pRGfP4atzrjnlS/WfqJ4EqgDoPhh88BeE70m6QtME5NLvRuGOjQpm//1Zdq0XAYiN+vzhsL0G3SVOH0Fi5XayEjL5Ug== 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=i1SRbMZ5vtUn4A75NysmPVCeWEjl1KBkL8Pu3NNkQeY=; b=cCRCT5sbnFJsYYp/dLCVIAyMhqlinWAfrijRae1CyliIsgVnvotXTiOl46e+vGa94jPqCoLoPofOjdue15L4lHDeC+o0Pxnxk0o08RNoiBvgXO2YkzreuCNzBBkyjvg0NUHWhqGmA9xM+injsqCHpk/pOaEzMoHQQnzdMgpG7OqW7XreG8xydMgZDTiaJ9wkcr5h3gFNOXA0R9s+Ln9josbXelelbaWRcgFWfEfcpXfvSFv9DPG6okiV6iuE59OFiLCQ1m2oqNodIjO1vPAWnfQMyKXr1NuTwObtw68N/8XO7/TnP916waTb9u9SxKW4jRt/rrgxfSOAKnXOHB6Omw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=i1SRbMZ5vtUn4A75NysmPVCeWEjl1KBkL8Pu3NNkQeY=; b=OWe7mQQ1XegK+LkJ7EX8uhxjrh6da1L0UQKlZmnJYy5aTHCEzU8AiqM6hOY3kB7NdBLtsQV7QZkTnHfDeOAcg8MjcCbAvzmJjRIPbpOlpVO+6hys6sBfaEgLkCxBaYPk9rYhmr1oaAq9PINmln2uJeemGWiHrGitEMAJX01AoDq81a5/fzxqIs3yBoA0bZhgjOQWffWxG51S3GGAJEkb5H3Ax2vwuk1NCr7R8KmN2VHml7UMBDe1o53ORAu3G3ijN00Tsj57fZZUu1VuzhaFu6Ti/+056VMa94XrXqvvAFniARRHvloZ9+SS2aicbMBU5J+TKKGV1ZiFpR86wrUQUQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <8b375834-5f36-c1d5-f13d-dc9bb7b53134@suse.com> Date: Tue, 5 Jul 2022 14:47:46 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 09/14] 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: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0011.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1d::17) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dfc798b1-66fb-4430-4631-08da5e84902d X-MS-TrafficTypeDiagnostic: AM0PR04MB5252:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: i8eYTngNIfSMExO9QXmyQkMhACZnADrE7jxudhD9cU6ElmI2uQZsPamZWb71zdKjHpZRAFM7xF+sYCbFyjsPqRyAqQjD7cIQDLq4hKJwDidchauKEZFUATwggkmswHXPYkgTQxnpVc3kW1B6vKwRifA2PpFEf/X7byRFjoVfXDcXGMCI5E7KemKVbLwR8+/SrgRW6okOgLPYZn9GnTH6Zxb2eVNjyaHSRQZDzZw+iLn+8PRFG46Z+cefEmTOy4neEAWynrtryRx3KTr/6IYWCLz+JN8g2200JzNRTZgM/v7EnuSUmVWYctW9QYGX2BICOYHNqjzN8rdztoBceeLKSVS70eRirsi35RiY3e5aRMPZf8de2FYu9C8VamK34Ruo1R0TpPFi4x0VZLEBIErsD6x0r034tLWJjF+w+RdcpxQj2uEcz8B4vc/g16nlONz7/DI6ZUkTSQBpb3LbNAGgKPg7vpU8pmMLKQtIAIOlmkc7b75enoo8ubrr+5tzxF9KVhqyfpdq0nIS5pTbQR59I2jSus+BzZBSa9CJnOc/pbnUaDJb1HIJTQd8LKQZpbIay/WlvrNT/Z5hr1gQRZPykt8BCEuOBMtV8IZrLquEnsW3dtHj6qMajyFRnBI7menEKqmEZNC7PUXgdcMHK6TvEMFDJU+Z9IT2lxpsXKHj/SuTvYR1IpIdvVUVB6YPBjRSog/lXsjlv1fHgjY9UOZmj3D1D0G3fmQuFE7+4PqmQKIgg/p+qI84NIym9i373gPL8WPuOgAHJ+EMOQ1A0MqEP5ozqqCJhC3mTzxvWCjCnxP5HGmMRcGbjfdFqxikCAtKssu8p3Nwu9TOGQW/c16wIg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(136003)(346002)(376002)(396003)(366004)(39860400002)(478600001)(5660300002)(8936002)(6916009)(54906003)(316002)(86362001)(31696002)(6486002)(66946007)(4326008)(66476007)(8676002)(66556008)(31686004)(2906002)(83380400001)(2616005)(186003)(6512007)(26005)(38100700002)(41300700001)(6506007)(6666004)(36756003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aktlcHdjNnFQVkRiRFg0K0JwV3dEWnNKcTMyTzFTM1ZJVTg2cU5BRE11OVds?= =?utf-8?B?UEV5Zmx5UmdpbGNKRHltMnRoY3FOVkt3NndacGtEcGNMa0xmY2VvaXVDVzNP?= =?utf-8?B?aHROOTEzWGgvbGYxcDkvZVh0clU0NWNyWU9FRVdXNGtJNWJEelhSOFhYUWZw?= =?utf-8?B?R1pnUXAyNmdsTnQ2eGxFNHk1TFhQelJUNXZLVW9uSGJhdDhLUURlZTBXU09W?= =?utf-8?B?TG5GZjdRNHF5ZHErWGdyYzQ1c1g1WHNNSWVuTDhlM1dyVUllaWE1QU40NmRL?= =?utf-8?B?bWd1dm5zeENZZ0hJUCs5WDhPZWJHck1zT05uQVR5U281NC9FNk5xUVVjaXpa?= =?utf-8?B?MVhRemdueFZ5QlpFVEpKRVNyYVIwektNVnV1NFVzSFRDd21JcklnK25Wc0ZQ?= =?utf-8?B?dS9wM05kZnNaWFpLYzRwN2gzYzdNTng3Rmo5V004M1laSGJpa08yeXdVVFlP?= =?utf-8?B?bk5HNEhrQmxOMVVRT1VZQkg1b1E0TDF6a29pcDA4L0xBQVRtenR3SzMyczZU?= =?utf-8?B?S0djRlp4SkdBV3dIMmxtaWU4a3hxdElyVGpuKzU5d0JuaERxajJ5UkNJckdN?= =?utf-8?B?UENKb1N1YmgzNWVSU2hiQXJKNzI2NnhrR2tBRFZqNXl4WFR6UFRnQkhqcXpa?= =?utf-8?B?ZCtxanZVR2ZQUmMxajB5ajJhMGhpZ2tkMjY4OUo1VVI0aHZLMHgrZlpFbWZo?= =?utf-8?B?N2pNc0ZGSDNMVFBFUFRyT3BSaHMyNVJQM2VTSEVtU2p3M2s2Z3F2eHM0aVky?= =?utf-8?B?QXZDUlpXdnB4amlMSDdzVGpoK0ZvMnl2cTlETUxlM0pIc1dDNHc2NWluQVBU?= =?utf-8?B?MlJpeEVrTFNZL2thMnBsWDBpN1kxTFpNTGJsTjJjSEs5ODRnZ1dnYmpmY01a?= =?utf-8?B?ZWxjdVEyM3JzdFFIYlZtWThhcTg2VlZaWmlZTy9Sdm5EMGtzWEtMQ2QrVEZN?= =?utf-8?B?MWg3dm42REJvZ0RQNi9OdHc1ZEVXRE5qRnQyT2ZHRWR4cExrdGZ2akRkaGNF?= =?utf-8?B?UDVoc1dqMUo0dFJOMEltQWpsSHNjRmJBaWp3KzBNMUhldms1Y1ppTXpDNlVk?= =?utf-8?B?N3RabkV0b29ZUTV1V1R0aEVkeGphV3MwRTFZd3lCTlhPZ0Z2MXZKUGI3QVZD?= =?utf-8?B?VHpYeTVXRkplU0toUXlMd1IxMVFzTUJQT2RQbmRTVDFiMHBaNTRJT0QrYVRJ?= =?utf-8?B?QlorZDVuYTFaQ1lTczdvTHVSbzZHOVNmKzZHalZjSFV0em9RSncrOC9ycysy?= =?utf-8?B?MFN1cVFmVVF4Ky9JSUszcW9Lc3hxYW04Skl3L3BZcHVyVGdFMUJlUGxtQ0t1?= =?utf-8?B?OFRFWGtWY01ZL0dIUmFJUUlvUit1SUFwUVdnNUVKZWpsQTFSRkMyY2d2ZWlV?= =?utf-8?B?TkZva1d5ZWhPVk1lSTVUYXZOWXFJck1CeGQ4c3hiMFNDd0FWQ1V0RzNjRk9m?= =?utf-8?B?TUMzWWY3RDN6LzFZd3lFZ1NJdkpJdFJDYlM2R1BZV0t0cXdkaHl4SEUzbXBn?= =?utf-8?B?cVJFYXFBKzl5d2VkQ2hVc1J0N1VMWFlwY2dGRjdQWmlSOWxUREtheFV3cm1D?= =?utf-8?B?MkFwOE1NeUdNUlJUVVhiYWZWT3FZSDY4YnR2dFNrbnpqcVRsMTVJalRNWTV2?= =?utf-8?B?ZjhsUEFjTlBtaml0OCtGV0UvNlBiWDJoQ1ZxTy9vWlRGR0Z2TFF3dkJGUEov?= =?utf-8?B?Q3puYityYkJvT2lGQ2xsS0NHbkYvZnV0dXJ0ekp3bk11bEVxdnNkcmNuZ1ow?= =?utf-8?B?MjZrUVRjVWJQeEVGRFQ3YkJabEhjcDdyaS9Zdi9sRDRSbGRXdEJCamdFZlRN?= =?utf-8?B?bXYyMVhUcElIL3p4K3dHWjVtb1pkSjFsT21yMUNFd3Zja1pwQmpzUTV2aGg1?= =?utf-8?B?K0hYZjJURmdOaVZUdTF1ZUMyQ0RrOHNCTWIvWDMxY3B0SUtPeGVVK053bTV2?= =?utf-8?B?Rkk3d1VJbU45enZqRnJ3V0YxcTBtQ3RCcnBaSHJYWXRlQUJ2WHN3M0hQY1Nk?= =?utf-8?B?bGxQM0RKMG1CcXhObTVQWEsvV0lvZ0I4MmYwOVY1ekQ5OFkycDdvT0RZQ0Vi?= =?utf-8?B?TXErWlJvUEdNTnBoTkhjb1ZwT1B0U0dtOHJxMHBqdUNFTnVjckRTNlZCL3k1?= =?utf-8?Q?lQvyHCC0xHjfMn6s8VsclPvO1?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: dfc798b1-66fb-4430-4631-08da5e84902d X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:47:47.5176 (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: HhKj/Gwz7LR4mr+KHf6MrEZD2xZXCne6zeiyd/uhEbtlkwfQrzu3fB+UwA3tvgZrKBMJmrR7RyvL0vOmCFVmkA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5252 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025311260100001 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 Reviewed-by: Roger Pau Monn=C3=A9 Reviewed-by: Paul Durrant --- v5: Re-base over changes earlier in the series. v4: Re-base over changes earlier in the series. 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,7 @@ =20 #include "iommu.h" =20 +#define CONTIG_MASK IOMMU_PTE_CONTIG_MASK #include =20 /* Given pfn and page table level, return pde index */ @@ -35,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; @@ -87,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 @@ -326,6 +335,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; } @@ -351,6 +363,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 */ { @@ -487,8 +502,24 @@ int cf_check amd_iommu_unmap_page( =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(hd, pg); + } } =20 spin_unlock(&hd->arch.mapping_lock); From nobody Mon May 13 22:08:31 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=1657025320; cv=pass; d=zohomail.com; s=zohoarc; b=A9hvewDrPwREszqWMxXvVvFpxG0nTd+ZJcydi6G63kA4CyX9ZdMxF3YZmQ53hyfmN5V9ygddAVyMRgmp3TClfqWj1djyx3AeVvV5FQMnv8fmXTcRGSVtFPFiMu7MDSFRgJgGNqp5f5ejfc5UsKTuG4NyMy/z/5h1BQ/4MEN4SBs= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025320; 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=8x0wNvPPnwdgiVsTXX9OqkK4ScAeymQhxLWbmrRAFA4=; b=fGmbJ91d3IrsytpVr3b6/9pJGT7L3bOO0qimbE/Rcddk/IigwhnzhVPUby7qBzHgmYNXb61/CnU/GOBkmVSh4pEwrxxVsYO918DV1m1nbVYvQ3lY55jDuxTvady5Q2d9yXrlE3elVts8JHI3Exaf6Ol+rhup97Xpi0maxt4v32U= 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 1657025320874852.7513803394651; Tue, 5 Jul 2022 05:48:40 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361166.590552 (Exim 4.92) (envelope-from ) id 1o8hyU-0006DC-LZ; Tue, 05 Jul 2022 12:48:18 +0000 Received: by outflank-mailman (output) from mailman id 361166.590552; Tue, 05 Jul 2022 12:48: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 1o8hyU-0006D1-HK; Tue, 05 Jul 2022 12:48:18 +0000 Received: by outflank-mailman (input) for mailman id 361166; Tue, 05 Jul 2022 12:48: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 1o8hyS-0004qy-N6 for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:48:16 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2089.outbound.protection.outlook.com [40.107.22.89]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id bcbe9998-fc60-11ec-bd2d-47488cf2e6aa; Tue, 05 Jul 2022 14:48:15 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB5252.eurprd04.prod.outlook.com (2603:10a6:208:cf::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 12:48:14 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:48: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: bcbe9998-fc60-11ec-bd2d-47488cf2e6aa ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=P6ie8G5VVPknGrhLe9djxcfGEJRRYM9iZiKZCAMGJj7Ag0NUeCykw6PD7IyKifMFPGGd/w4NZXu65bOPjh4/AxCZhRV+je3qb3+ETeFiSgLc8pLW2EFnXus90tbicZ4ijMMC/BmRc7uOC7dWYYwvXsMq5KihDuz9AV4MBl8Ao40eBxC2mjbDXS1CSLzeMfDkQD9L6sq8eb5qYLZZJUukn08EyV1edNvj4cqdTY13yq1coioebNQOOmNPXMqCK4JMBJNJzBdf6RnQqFWpsQe7+Ny3YaKvSoHVJeJfzmXvKpk01JXny047wSn+LeJbehX6mCgrdRiUD6JwXEafBXLaeA== 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=8x0wNvPPnwdgiVsTXX9OqkK4ScAeymQhxLWbmrRAFA4=; b=XVBkvQgQ43gaCj9u7r/gzAkCvB3QH04QGUqeF9hRZvYvxoh63aOq1XM3D3bC0Vq873NKZItqzMAD8AQW/5ODIkuUTXIQjurQbv11+dba7/9vEnhjwY409JO9iUmFRhJQN6u0U7BsMhq3XkP95SnfNsZLG2mQpyyE1L6GkFnYwnQTiREEjLDFxA4ebNVcFOuQ6ZHaxU3mMWbmxevtb9pEj+QXSIqXaKkNq0enBoXUTjVyLTXIFVD6jKUN6nUG14PfC8aXv50Ld+ZdfEQlNqU5JMWECy6gqw3TmNtLSbkR/I6yU5EBXsA2K2OMce/YLUmWeaQ85Jjl6IDEoVYxDXFdig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8x0wNvPPnwdgiVsTXX9OqkK4ScAeymQhxLWbmrRAFA4=; b=AbsNOTCnCf5G35oceswlwWWiN1KlP5WNsXMELoE+neIB+pA9jLg4Gtd8LZzRR4S0LcSW9aPWhRssfYXKbEvKcVqWoAMMxLBVvWCFC4uOzcx5IUe8RVqRf9r8OEXI5uQVUwlLZnP/b/Gs8fMtRBkuRLHQhP2agpMu450iOMNoRd/s3vclpu5dttHI50b1bNaKzE/FZIg3rL2p4MWS3fsaZ4B3uZS6Al9E/fkDq816CACuncZ9AwINkdG1KjE3zMLoc4cjNA5WmCbjjW8u/uv5HYsXMIBDAoAtmjUl9EZcMTIHWirWSynk90FUvhbn0ufyKJTvNCtNEMkxTdQ7E14BqQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <28b6c824-683c-6a15-d891-651f79d99300@suse.com> Date: Tue, 5 Jul 2022 14:48:12 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 10/14] 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?= References: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6P194CA0096.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:8f::37) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b0879887-653e-4e6e-e4be-08da5e84a044 X-MS-TrafficTypeDiagnostic: AM0PR04MB5252:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: y22/CE7Zis4myGsIV8tMvlIm3Nw/Eg0AYhEaYBLvnqrdarKonAk/NwKDFHd8S2Tyx/x71fYgrT0vRaPEJfOfxBptpjuzvhbE2T6K4L1WMcBPGWeuZX+hj2YwuqjikXDylEuAhu1YDO7/jdoS19HIK1tNBIuMBGPuZNSe4vPMNrwD6yz3r39HrIExRBOITKcUcfxfOAJSGYf1g427ADHfAeNwj0shdyIIe+O6jQzwHHRlH8ssQFOOBRS/2JRCyv8buW0Xxy69JxGGuFtYvg4WX1tkleUyFXAb5yfr7pWdKr+kdsJj8qdLi7m7+Tg8aHLltD5l5hcCyAiOwdV1vVLpybmc1/SAwFkPPfHn/rYU9vsCpYmE/GfWRxW72MnBHjhqyAqoVuTmfq2luPN1T3cjph4P8CEY4IKFHdFUl80mr8+zvCy7YaixVpxibATwAMYtjOwjqP0LCaB9SbQnf8LQ1UaNAxXLZLvRyruytRaKrsEW5QAEc7Nb/2iDqkz72nOv6wtIVcemdwkOdEAYe5YFSb4ykl6HWV7YfNJv9VQDFKP/fWaRelZK+L8yOKHxu2qKuz75HlIcb8QXtwvlFRk470j5Y7RTMePmyrqTajmdH8Zg/BAqvQ50DiIyPlv6yoafG0JQoYK0KrS9H4Pf6ewXsv/1mAfW2RyX7M4E4IEsdGP/V5N6Vgih0nIfxW9lkeO78nv+kXGyCJAR4PSROXT9j+8oyrBwiMGrCSpMwn4FWcRDfuzpCSCcW/wwANcGCZfCRgUhXrNyXHBafEY+2hUzlYn2cLk3EqVPThO6XIB3kgnb69N6X4oMSe7gIi/U6CIda8PsZVruwp78pduvJQaSfGny5MwqPRYiDQcyKR+KjjQ= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(136003)(346002)(376002)(396003)(366004)(39860400002)(478600001)(5660300002)(8936002)(6916009)(54906003)(316002)(86362001)(31696002)(6486002)(66946007)(4326008)(66476007)(8676002)(66556008)(31686004)(2906002)(83380400001)(2616005)(186003)(6512007)(26005)(38100700002)(41300700001)(6506007)(36756003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WjRYTnZSOXBPeUhXMzl1dWsyR1psNHA4eFdiTDQxOEdJR1dUbU1EQUNNSHB1?= =?utf-8?B?RzFlNnVCZlZ1OEkxRk1JdjFMQ05QdGZZV0lYaGs1SjkrbTJQWmRlRkUrbS95?= =?utf-8?B?NkNoR0RNR0V1cE9FYTBWQU8rUU1YeXVpdHhlNWl5SkZpK3dmUDI4RSswWEo3?= =?utf-8?B?TlhvaHZCSGNuZEhMZFJFaW5nbS9WaE9qamFXSkNGR0p5L0I2Nkswa0U1Ym8x?= =?utf-8?B?bDVtci8zcG1ubjFvQTdXcFRURmZjVGd0ZnJkQlV6VmJpSG5PSll4R1lWUVRF?= =?utf-8?B?RDBEcSsvTjJ3Y3ZqVHpqSXlrUnlmSDFIcXc1NkcveVZsUXZUakJ5YkNqdjZR?= =?utf-8?B?VWNjaGZMb1BwYkxHaWREWkxIUlhOSFZWMi9IZ1Bxbzg1SnJ1S25nWVZmc1pn?= =?utf-8?B?L25zbUgxalU1YkYzeWxIUmpCMUh6dUNtRVlHdkw4QlRISklSL1UzUXMrUGdW?= =?utf-8?B?ZVAwWWlyNHZteS94QTNMMlg4UEFtMlFVUnNMYWo5UEpjWGh4cGpWWjluQlpp?= =?utf-8?B?dDkrN00yK1hBb2p5WlRKNnpVODRvRFo3QVR5Vy80cVlvSUwzS1lDUk9ubDJj?= =?utf-8?B?VUZLRzVKVzNyaEMxQjB0TGJtZmVUSlZtaTdDWTVkU2d4aW5pVXNWWFdrNExt?= =?utf-8?B?Q2ltdVIzTW1FSkluZUlHdXl2T3lMWlVDSTV6WVBFaS84blJ3ZWhJK0lpOUov?= =?utf-8?B?VnpYSmdNMlZQOVgvZUF3eHdQSDY5Qk9yN0lhTjkxWE5SSGZQd2lXYXp6MGJs?= =?utf-8?B?QURYSFUrZk5BZDAxSHZzVjNWQjlhN0VoNm1wVTdCZk12MVZ3NUZLZTl3Mlcy?= =?utf-8?B?bWk4SXg4R0d0TlgvdGw3ZHBCeGNTRjZ6cmptTUVzQXlnYWVIOXgxRGVMQ2xJ?= =?utf-8?B?N0FBeDFoZmw2MUZGK09DZ21pc3ZFMkZ0N29wQ1BaMGJ1MXBHbnJWaXdpSnpl?= =?utf-8?B?aUZlOEdia1ozZ2xvNnlkaVQzUkhiM2l4bkxlV3RPajdINTJGUU9uSDI1OVFN?= =?utf-8?B?SWJiUnNGREFlUmlGbU8wNmxFYUgvR1pDTFZvTzlGWkhUOThnMEhqWmN1QUov?= =?utf-8?B?NVBzcEFQd2tYMitpdmdUYURxU01yVGhQVDRDMGJMK3RGL3FsV0lCdExMejJx?= =?utf-8?B?bXNQcVVDMXFIenJVMVI5b0MxejBZTmVieGEwT29meDgwcEt2K1gzRzI1VXJq?= =?utf-8?B?dDgyQndCREVQbkxDd3Rkc01jdSt5VjgzOHVGZ1pjQmZnb25oSUdOek5HT1pp?= =?utf-8?B?anl2YUQzVjlCakI1NGM0WjkrVWdxbFNLS3BGbFk3b2dwZkJjK09sMzk3T1pm?= =?utf-8?B?MVhBMjRPR0ZqSkNEZDFHdDNKQXlNcUNLbjJIZzZGRzNnaE1ad1B2RTg3b3pJ?= =?utf-8?B?eGM1Vmx4d0Noc2JHQXgxeHh1Y2JjWTdmRmgwaGZ4aHR6UkVmdnJwLzdHeHhp?= =?utf-8?B?T2NITGNLQ0Fic0ZKNkN6cTR5K0k4M2svL1M2WkRQa2d6Z0FsaHFmK1FIeXc4?= =?utf-8?B?WW5jNGhWVVdNUk54dUhMT1dNVUxNMnRrdTlEOHhNdDFYOFl4Q2xNOHYwcFZj?= =?utf-8?B?L3p1Y2lPRTRSMTA5WnBjOWF2RXlub3N4NTM5dFd0TzRKaWN0OEphZkRxZlE0?= =?utf-8?B?NHZmb25oRmlNa2ZNdlNxUXYvODFrVjN5ZTlxOCtkQzRjWGVNWmszMlArZDRm?= =?utf-8?B?Z1FaTWVpQS8xMU5JS3pGSVEzZzZ6REFiM0ZSNzZGenRnNUY1ZWdyZHJnV0lr?= =?utf-8?B?UnJLSlJuWGFubVdsUnYvV0hvR05OOVRxSEliZW92L0Z6eC9pbDViQ2lSYnJO?= =?utf-8?B?R2tpY0hhNkNmYmZ4TXVzbkhXOVNRa1ZpWDlITGJvVDA3Rlg1T3p3TURtcWNp?= =?utf-8?B?THFBMk55TWpteGkwV1VZSmNvZmEwa1dZNUtBNTcvUWN5cWdyMnFrd3FQNmRV?= =?utf-8?B?Y3NDeXN2OUd3K29tL2dicDdITVgyQlUzZFUzTkFmWFFpZ1FsNHRhL21KM2VV?= =?utf-8?B?cXNjdTdkZ1BQb3RERjJ0TWgyb0hFVFliRnZaUDI5S21vdVNNVnR2aitzVW9G?= =?utf-8?B?bTQwKy8zWFEvWW5ibC9oc0hieHdNUWFkd2hVYU5Qb2V1TFd0S09NSEViS3Ev?= =?utf-8?Q?zhxoiylgVZ7yRDe0wuXZ8LoBt?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b0879887-653e-4e6e-e4be-08da5e84a044 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:48:14.5159 (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: kBcfg54tH01mvknuD7gps5K58vlo/jgTF8N2NPdrS1+AI/P54PgACJciVGOrzLAmFg5CC6KJBkGLmecDFvIqQA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5252 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025321283100001 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). Also note that cache sync-ing is likely more strict than necessary. This is both to be on the safe side as well as to maintain the pattern of all updates of (potentially) live tables being accompanied by a flush (if so needed). Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian Reviewed-by: Roger Pau Monn=C3=A9 Reviewed-by: Paul Durrant --- v4: Re-base over changes earlier in the series. 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 @@ -43,6 +43,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, pgd_maddr) ((d) =3D=3D dom_io && !(pgd_maddr)) #define DEVICE_DOMID(d, pdev) ((d) !=3D dom_io ? (d)->domain_id \ @@ -405,6 +408,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 ) @@ -829,9 +835,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(hd, pg); + } =20 spin_unlock(&hd->arch.mapping_lock); - iommu_sync_cache(pte, sizeof(struct dma_pte)); =20 unmap_vtd_domain_page(page); =20 @@ -2177,8 +2205,21 @@ static int __must_check cf_check intel_i } =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 Mon May 13 22:08:31 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=1657026081; cv=pass; d=zohomail.com; s=zohoarc; b=SnQ7S2nq++k9QcIBIl5505EfOKf5j4U1DG/0EdE+5uJUk6H4Nj4ew0kiAJUATNBGFeXaHJHBOIx5e6nGOE/H+YN2mrEdt8zFkVWaAdeAHryuIlVHFGh351y+5dzk6+aQ8kJDK57NjZcKoZG9OjIpR9n+T784C1aPKfVv68Jv34M= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657026081; 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=XpBKX8iKhA8N8952sSDbijOunJ7uuUUiGIDbjZy4Htk=; b=VXG19T1eOR+IsA5lqJO1IqSpDJobeUJYz1hpDCUkWYGf/2UoAt/sNzNS1SBZOHwGu7T6LZf1Xfasj98yx06E9IJJ7x9o8xxPCkNtu70XnOVAO8rfG3s8/QNLrvLSat6uHUlIeue3bN4QKhqr9a016EW0Ls91w/BOSQFnOHJ/dn0= 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 1657026081231374.0245179854021; Tue, 5 Jul 2022 06:01:21 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361227.590622 (Exim 4.92) (envelope-from ) id 1o8iAO-0004NT-Dq; Tue, 05 Jul 2022 13:00:36 +0000 Received: by outflank-mailman (output) from mailman id 361227.590622; Tue, 05 Jul 2022 13:00: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 1o8iAO-0004NM-9b; Tue, 05 Jul 2022 13:00:36 +0000 Received: by outflank-mailman (input) for mailman id 361227; Tue, 05 Jul 2022 13:00:35 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1o8hyn-0004qy-Ur for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:48:38 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2063.outbound.protection.outlook.com [40.107.22.63]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id c96e42c6-fc60-11ec-bd2d-47488cf2e6aa; Tue, 05 Jul 2022 14:48:37 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB5252.eurprd04.prod.outlook.com (2603:10a6:208:cf::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 12:48:35 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:48: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: c96e42c6-fc60-11ec-bd2d-47488cf2e6aa ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ajwuKEErqwOf+V2F7YvoAcykl8DqtjgQifohKABtslu2USb/UFNflYPkcQQkRj74jiZU5XEIa4DdXRiLIpcYeNFOBZVZ35JUOy1MXshtJym74vRM6Ad70fupGr9ZECSyrWYNTsexW4iUmRa3rAM8sX543gJkCUhiH48E8fJygmFSXDrpSuSlQ/vYAAkKxHMmB+v9Xk+trO81WOMMRRt5fJ6TOBpmYX/sf1JpqeiOdF5ztLLvDuTCkf/Lma/t27G5nh5K78lhBcq8J3zh8Avp5j4Ng1Uu/+c/J+PM3t8WXUv9VtQPHHdK9ni5/NdwR9kFkaJP4jmaFFYWFBbWW052Xg== 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=XpBKX8iKhA8N8952sSDbijOunJ7uuUUiGIDbjZy4Htk=; b=funM8mhIJ2zr5xlbGL9FNPtmj1BQ2C23JG9GiMQhiuSz486SAf3oaM7vfYC/OYO1HEnFvZU5ivNwM0ySdbN3IEGkCHdtJ68BckWgbUZfwftwXGPYM2Ew7CEVBZqEeL0eorp7tJ5Tc6w3uhfFtd5pFjXcLC5tVIbLmSce6/p3QoHy5Y83F8ZV0PlykP2IpzqTOWZPjzKNydvepQ1UHowqJrrvNEMLg9+g3U38UP1N0m6PtwR7Ni6/pbf/44R3S8Jg/p4FBBSZuUiyEmfWWDATqzz9MwTi+R4LLTNcmrjO7QHqHY4lr8pAvLGTM9b52AMPwSSyEAwSvMndY7fv9OwayA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XpBKX8iKhA8N8952sSDbijOunJ7uuUUiGIDbjZy4Htk=; b=B49s2NSJ+fJWQjplxkhKpCQ79poQQU7FuVM7AFFA49ELi7diiJ/ZB4xx6001tRAgXb1KpRlJ7aeLf4ENFbu0pIN3MHV0ct/jdeswnQQiSbFEttue0OUYYiGlbjhSuGA3RdcOGtoz52Nhul2KMuK72C5Apmo9LIxmXW3wDPG835CukJ57tN60fB4c9woZ+iwUtroeA/lmBgauZ/d8BnakqicDNLYjTqMRn4PPQEq87v2tG0U1nnikG5iMG5BO/QfBDDNaeuNHd7Sftd4H4oC2Ii7MDdNH+9D2kQOQgrKZkaa8Y7FuNSh1lxEmcIAhbzoNwsk2RO8wUUKbjKhXBnZT0Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <718906a5-8c18-530a-89f5-02e2a2efb211@suse.com> Date: Tue, 5 Jul 2022 14:48:34 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 11/14] 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: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS9PR06CA0088.eurprd06.prod.outlook.com (2603:10a6:20b:464::33) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8f85225a-3cf5-43fe-6ab7-08da5e84acea X-MS-TrafficTypeDiagnostic: AM0PR04MB5252:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uxDCH4822zfGqegMWWKTfmt9Df5EsE8dBIA0oU6ou9sJTEFON6vx83cwdpFMVv5QCW8H0PetM6mJZXNZa4IZuuQ3cG7ichVMN4AomUjFxvKbO8qr2p9ZwUaeUXx6kuss8NzWRQ0EOyze5RO/wJ5UWphZQPnZKnZbceHWmzZ2qQ/PpiO8guKtBAzT25zyg8Y4KH+UM0kBUX31s6YTwJl1Jfj1k2HJ2D0LqB2SApHC0W1HvinmWR/hnGY3GsBzxT1n5ZrRaLpBAM7L59REf7PMCfn0qFTIzBUjCvJiP0YIn/zu31CcJxSiW0qGx2zs0e5gfUhdpuoIEG+4swUa7i/94lcesp5kuEVo6kAwBYCt+PLgM07lhRKDOS+fRfV/Wf8J9I3RZiwhgnEj6870TUJ0qfZRtKkxmwQxPaQviUj5bOtln7joNN1vLmXMg7RdBJvisXllvzfVsA6Cgrq/PNj7myoJ1fBEdvS1SwmLCe2Vcz9n+EIhbX/nfVk9902huRGq0fQSO5R8Cht2aFX+mA4g/gFBRc9M1VY2sCwn0TS2RRHzH3Grxr0J1EU+/Cyd7bljYr51RYh/cd/flIqaIXmvmkJHVy1feTPufo9r/1TBJUbMNOkVUYj+wUieJ94GS6XxYzEG9xWyjdP3eiPEXI82aVPBeEIk31OeXgJxxT6lR2tQvzgH2np0+qja94m5A66BolG6SXkwqCBiI5GX8g6PDdO2+G8Epj1h/lBprf8tOppzQwkTd08PVqBvP7XXMvjJGUxcsQ77+iW1Ju4mWbEXKuMjNxvsvPG0afaWRw+yi4oXI5pF+KngAXyDIVKDS8AVcFUUyG3KV6YH/Ydyb592wkJ5ApyEJTGR4xh/yF7jfsc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(136003)(346002)(376002)(396003)(366004)(39860400002)(478600001)(5660300002)(8936002)(6916009)(54906003)(316002)(86362001)(31696002)(6486002)(66946007)(4326008)(66476007)(8676002)(66556008)(31686004)(2906002)(83380400001)(2616005)(186003)(6512007)(26005)(38100700002)(41300700001)(6506007)(36756003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?V2t1SUFYUFg4TUNyQWY0MnVNWVJQTWhNNWpQejJCdkdzN0ZKWG93SWFOY1Fx?= =?utf-8?B?Szk3NDQzUThhNEZzQjZ4aWRqRDIrQjdQZHhwOEY3S3ZDa2wzYmtaNmRlSEJN?= =?utf-8?B?VHNPc0FrejdjSGtpS1lRU0ZldDhqbEhhZ2ZTc1lZMFhDbTdDZUQySFovTGkr?= =?utf-8?B?cjNROVlQVGRKT3pMQnNQQzRpaEhzUkl0a3FIL0s3amFGbXZXdEpZdnAwRFZJ?= =?utf-8?B?TnZ5Yk1aUlBlQ2Q5U3p2NHVhR1FVNGZqSmxCZ0NrWnV1aWlQa2NaU0I2aENi?= =?utf-8?B?T2M0SjVrMUhpL29RWmxmVXBaZVdJaGRhYk5CRzhSeCtwNzN6TXQzakJ3Q1cx?= =?utf-8?B?Wm1LdllJNzFiYU0ycU9iWkFpQnBLU3JzVjY2ZSs4WjVzZGkzZ0R0a3lYRExm?= =?utf-8?B?ZHRLKyt4c2h4cFk2MlFuSmZVUnRzWGcvUGFDa0pzOExtTGdraXF1YitOaHA4?= =?utf-8?B?NlVZOThyZ2ZVUjdCZ1VlcUw3ZE9yb3E2Y3Z1ejZaSzloMFo3V3lxN21tSWwr?= =?utf-8?B?NGovemNkYm1ZUHlQRDV4czBic1FUQ21rSnZlTU1BT1VIMTJOWmJOcFBvOUlU?= =?utf-8?B?dXdMNENBTjlOL05pU2tFYWExeGdXd2tWMzl6eHk4MDlQTU91T2c3aVdWZTZN?= =?utf-8?B?Tjh5WmVHTkc4RmhnelFGUUFLR0hMVCtYR1lHK3dyM1FQRUZZVUk0ajZFUFp6?= =?utf-8?B?Y0hJRG9LSFcrUzVJNzYwMEg4Q2hhK2xBd3FCa0tTY3EyVFNCRkNsSVhaU2R6?= =?utf-8?B?Qkorc1E2SXErajhHK1h3U1M4bjVoNHIwZGdRUVFKUlF4MHNIWjJmdml6OXY4?= =?utf-8?B?bmpxMEtkNTM2S3BNSmhFOWdRT1NCV29ybGNLZE5mVFJmVmswZ2l4THZhM2xr?= =?utf-8?B?ZDlZM0NwRmtkUHpnT1lRV0psalhTTEplSjlTcCtyaDZJRjZTeXFjdWgwZnZF?= =?utf-8?B?Qit3NTVHb3MzRkxPYnNtaHdUZjhQUFQxVys0T09uR2szaTg5MzB4eTZnbEdU?= =?utf-8?B?VHRZRmk5TTVObzQyL0pMdmZrdllrZk1NYnB0OVc5K3dXSzlKUnZ5M1Z4U2x0?= =?utf-8?B?aEhPSURjMWkrd1FMMFUrK1hYODE4RjFOdEJNYXM0UnkvS1dpazV1Z2RvTVVv?= =?utf-8?B?Tld3VlFxTW5scXpweFFkcDRMZFdQUUdidG04RXF0Rm10a0xLc1RWc0dBY1dT?= =?utf-8?B?V3gzOGhhVkIzUi9SR1pIMWxVWUxrYndRMWNkZ2ZOUENFZGE4WWI3M2FrOEcz?= =?utf-8?B?aUk0UjFRUGF4UEVtRGc1RW56TmJBb3hRTTBhdmJlUkhNQjF6Q3NZa2Zia2pw?= =?utf-8?B?dkRUV0hUR0E2ci9LOGhHS0NvS25kVXkrUjlkZGwxNnMxT3hWZk9wcitmZXNp?= =?utf-8?B?YjNFV0x2TGN2RE0xdVZsMWNUUDRZNnJEYzFJWnJtc0FtQXdSUDUrbFBFYmlB?= =?utf-8?B?aHJoT0NRSFd3eGRkTlBGUnpPS3dkV0c0eFBDb1NKZUxsMUJwc1JseGpwSWdk?= =?utf-8?B?YjhxZGVmS25xZFNNL2c3TzBvRCsyeHFENEVnNHZBNzRWd0NaaFlWRmQ4aTJx?= =?utf-8?B?RTZwNnd3OWh6QzliUDZyeXlzOElmVWdzQ1FtUGt3a2tuNGtEQXJoODRsSzlV?= =?utf-8?B?TXBXZDRpWDZlSUdrM1QzcDJjMkpFZ0srTXg5VzdFUFJ4d3hQK01JMjhFTE4v?= =?utf-8?B?OFp5Y1F2VUhHVEs0S2k1eEF2bkxLQVNveStKSGpnbyt3WTBFeGtTYjE3NXNi?= =?utf-8?B?V2NRRmU1OEQ5TU5iN3MwMUY0MEpIeURiWFBkemtUeE9XRk0rN2liVWV4MXZE?= =?utf-8?B?bnQxajVGeWkrQ1Flc2w2anNFMURBdVE0aXkvR20zamZPNjlMbzU2NEQrTFhs?= =?utf-8?B?cml1QWlwRlNTUGQrVEl3MUU5WjFrc0JKVmhSQkxxQ2xDeThVNGZ2alNtY2pk?= =?utf-8?B?b2UwMnBYczlKRnpjR1dJNnFzWmxUV1h5SjVVRmk3MzcybW05c1htL3gyUGdh?= =?utf-8?B?TXh4U1JxdS9nNm1MNk9TbmFaNEVkZXR6L0tUdWJGQWNFd3dwV05uSmd2Tlo5?= =?utf-8?B?QVlhUDYwcW5JOW9jZGRIaDBIeHBnbkdvNU0xOWUxTUJ4Ujl2QlY1WUx1ZWVo?= =?utf-8?Q?a2e8V2BMHpBaZoxPsCb8IqNH9?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f85225a-3cf5-43fe-6ab7-08da5e84acea X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:48:35.7646 (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: KQeUTZTONFt65igDhM9wTsdtbm77WfCIlCF2SJ5qPlvHvKhq+pH9fDp7QlyKyh4+yjH/H6P4zO/CPrm5hf53+w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5252 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657026081821100001 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 Reviewed-by: Roger Pau Monn=C3=A9 Reviewed-by: Paul Durrant --- 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. --- v4: Re-base over changes earlier in the series. 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 @@ -409,6 +414,7 @@ int cf_check amd_iommu_map_page( { 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; @@ -452,8 +458,26 @@ int cf_check amd_iommu_map_page( =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(hd, pg); + } =20 spin_unlock(&hd->arch.mapping_lock); =20 From nobody Mon May 13 22:08:31 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=1657025370; cv=pass; d=zohomail.com; s=zohoarc; b=GNuIqak18EApjgdIPi9h+oiuP0Qd6H0HR82dD3Z7TNga7V+8gMcRIWTd0YqnX4v66+qQFTfvjP5u+8+17MTOdDQu7RJ8lueRstSDZcIGDjhCoKYaTqUZEIqNnUUHUbTeQ/iIlEXtJ6mXc7HbQT7LJi5ISCcc1DSmIjbWymPrO1o= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025370; 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=DfKw4w4lT3delgxvxQXi2BzPNtcGD1oKtqm/W3kaSWA=; b=DiQKoFBmnwJhSyOhXBJnoZXQJN7wPan2nB8ahoUs7I/iS5r+72RTpdqNtPdIAY7/VnEw85N/Iy8LcI0+vqQUeVNUaLgD/N6FcfHL8iYsx/sY/Ez1KISrbFET6zyYxbFYLgNJEF1Smx57NbzGHwnkVORma8wLWxbr6P5EDzI80Uk= 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 165702537004990.29826847053221; Tue, 5 Jul 2022 05:49:30 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361185.590563 (Exim 4.92) (envelope-from ) id 1o8hzI-0007lC-6x; Tue, 05 Jul 2022 12:49:08 +0000 Received: by outflank-mailman (output) from mailman id 361185.590563; Tue, 05 Jul 2022 12:49:08 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1o8hzI-0007l5-3l; Tue, 05 Jul 2022 12:49:08 +0000 Received: by outflank-mailman (input) for mailman id 361185; Tue, 05 Jul 2022 12:49:07 +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 1o8hzG-0004qq-UW for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:49:07 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70048.outbound.protection.outlook.com [40.107.7.48]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id dac05ebd-fc60-11ec-a8e4-439420d8e422; Tue, 05 Jul 2022 14:49:06 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM5PR04MB3089.eurprd04.prod.outlook.com (2603:10a6:206:b::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.22; Tue, 5 Jul 2022 12:48:58 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:48:58 +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: dac05ebd-fc60-11ec-a8e4-439420d8e422 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lNyE7v3chRcGj64NGPKufaH6CbJF34KKW+tHF9qxH/GQY0eL6Xsl3ouu90sTOqw5lf/l4jpgPtM94i+WKLoEyq7gLNYq92kywDmW/eFyLa91b4G38VkKbX5l5eT12NdWsQ4CIzLAz/ze4uEPkfZOWS1PQHKUK55lc95qE5gz5pO6cQ1WvTJdamWtzku5ZxBfd2YHdKOEQJP+yl0HEcklSYejXnMexrQmYHlZTu5LIndN0emerwzHkDQL79aMT0tRz5hCSolmxqJkOljp/80G4cL6VGg/GS4aq4yjwiPAoRm1aJ9aGcOZWnIFp3/B33eyZeiubDkAsG/FdKLiFyOMhg== 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=DfKw4w4lT3delgxvxQXi2BzPNtcGD1oKtqm/W3kaSWA=; b=c2X8o/Sekjzrf0stbeZ7jI9m5Nuk5spR2KsJzzoKGvXerUBy9MmzJ4ADzHXzKGCAJzMBhLVB4hO1uyJa32RbXgDD2/MmJbATAiNXllgPF6QT8X97apQqIYcA6yFJW4nL+r/soP8JSlP5Cd1dsnz5BQi7cFUZDoO53NIeVyL91LOTHEtVrI3hoNYURr9y2FnOr2Vlo9pbfSRfyFY0v0g77+Ou+ZcSa/1C1EqAvExBjMlay5LgTxtjK3QPZjCrVfCyqR5N4I73bTwA0yREMuB9DJ1j901eSs/J9NrNt7x3T+QDFtzHe+YVAQ+Xchtle4qU4nYWStBKQO30fR6C9wikRQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DfKw4w4lT3delgxvxQXi2BzPNtcGD1oKtqm/W3kaSWA=; b=a2GQY/tJQZQ15VYjci3kY95TaZtoH7PWhwSHnyrgSGSq9zZnwy3ahcRQ42IzporjuYDtdSK9M3f3zqWyMMOZiqllaVpB4O0Fn2/fRK5Sza5uh795I3OvlC69wsSo5aT/+yyxhc+A3zJIya9Zw39/J2gv5qUPjwyfAOx92cja2H3TAzcyeLvgFot106l+BaVU4Hucqt/k/e1OHx+9b4OGdceprDRY1grxkvjZGghIh/S74QckCyyVLvf0xWziWwkSHkXuXCd58eUNZXHpeV1GnfffSMgDVfKjsLtCnZV/WkoiE1kTo2qQ5gKBr4TK/SqXTcwpG3PfWq0rfqV0rKz28Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <9ccc854e-9a8b-ffed-cd68-d26e5b3347ec@suse.com> Date: Tue, 5 Jul 2022 14:48:56 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 12/14] 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?= References: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS8PR07CA0002.eurprd07.prod.outlook.com (2603:10a6:20b:451::31) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5e55dbdf-6b89-4732-8292-08da5e84ba47 X-MS-TrafficTypeDiagnostic: AM5PR04MB3089:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: A4lGjZNC1UAdRi7/Lz8b8r3tDeahl14AN8+1m4EZTeKVh6bKcxgEt0NK/Zl9f79oIGsyVNBbPLS+mX96zzB/jypTZKgu5VAg9s/bukjCzq/7f42g1sCoAnBMlJ/l9fx9vI6woYHkmV+3bI4wH5+gxcmB2L5oRrbt9zMBbt4lU8dPS2lwrWyUv8Q4eNy+q7TwyixfOsJcd2dsHXUkC5CElNUj10w6q0Jflr8KsUr8oLle6RfOHamd6jNZLmwg85HRacfG3uDTq5XddeNyKqoV5qYBmjZh1AiI7QhoMa7dcpu0EydTzOJdOHI1JSwhhuigmsgIOqPFNbFCGN+Fu8RkVr9Hd1UJbaxhYD13yD3VrsibABhx/h4tH6iwcg01CyOhrZu/ovviS4+pr5BiLWT6cTNK5FeDJWsO2h1hNVsPu0aXW47pAB4up/N5qawLkxReP7DDOaylVjcIkNoDJwYoMITI43gnv+qjqHadw87Lcr+L4IqXjBiGTRuqpRYc8bA3N49ej84ivV8r6Yz8/0DeZ2HpAFhZq0G/qC6HLaeOiUPGglKcO83npesczTmXKf5RpyMKPT2iMFkUSPJDRTNkWVIwnNKBszZsPb0rpNwaFZMEGcYiWLoakHZy3zZgMIX+uamFnsyRddyKBxE6COXkcR8Ovkiac2jSdsWV9sI9NFEIEfjDlLEzfZp5oMgeUSNo9KMPNFNk6xIrsvESbl2cQpd8YcAROH1iQk3XqYuWY7ov41qz0shTFfny5vyEP0/14PcbIGjkCqm/Dwjq7n40mRZ+Yor12QEhh6QCb128xb9gYffnyLna8PVmsIfUJ0r71pKPY9edcOw+fdFLCfqxCpRsDSAa8abCqHrwQ3bWbjs= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(366004)(396003)(39860400002)(376002)(136003)(346002)(478600001)(8936002)(5660300002)(6486002)(86362001)(31696002)(2906002)(6916009)(54906003)(316002)(41300700001)(2616005)(66476007)(66556008)(66946007)(186003)(83380400001)(6506007)(31686004)(38100700002)(36756003)(4326008)(8676002)(26005)(6512007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YlY4U1ppQnIrVXF6T0JtNGJrLzdIM0tMYktQZjFMME5TMTJxUzE3YndxbUZ4?= =?utf-8?B?K1VLZGNQZ3NCaXRlRERaSXM2L1BVdVhudDN1cGQ0eGFvYlhuWkhQYnFjV2k5?= =?utf-8?B?ekQ3MUJIMWRrQ2xTd2ZvK0ZxUXM4bytrZHltVm91a295aU1hY0MrNEN0Ym9R?= =?utf-8?B?d2l6cTc0R2dEV1NDaWFQdEtHREpwNHJNWFpZUklXWjZxc2lVWm81d1o1MWY1?= =?utf-8?B?ajByMmZsSFhSRHdrL1R2djFGblQ0OXp2SER2RnBJcWdVQVJPN2lDTWlOZ3oz?= =?utf-8?B?dzhLZVVIQS9EWFYxSlNuZ0Rvamtsc0ZBeXFRRDBiczVEc1hPaWhVbTU0djlj?= =?utf-8?B?TWxySW9vSldRbDdHZitiemNhT0RZZUQyL2dpMk96U3k3WnNNRHVvOVZuRTZz?= =?utf-8?B?aFdtd1RFa2hLM2FEL0VCNEtQSWdUVzQ2S0FIKzlIc25sUlRHQm1uY0Q0YjB1?= =?utf-8?B?SnQ1LzkyYWZ5d1QxcGxTS1RNNHI2dkh5MndwRnlEdUoydmdiVHR0aVBjYnZU?= =?utf-8?B?cFJOTURnVC9xbmIzZDE3YVJBMG1ENE03OGFFU1gxaWM1UUtPWlJ4Z3B4OGhX?= =?utf-8?B?bXhxejRQaXR3WUlFRXlUdm85aUJxWnlGQ3Z3QnpRWEVvY1VsbEhWTEJMZHp3?= =?utf-8?B?TFhmV0d4RWNMeGg5WENpVjltaWl5Z3MzMmV6NVpsa2o5bjc5TnhEUjVVeHE4?= =?utf-8?B?RFpuUjEraGZBcEkvRWZPd0tjc055bVdkUUpRUXdZc3RGSVl1YW5jeks2Tmpl?= =?utf-8?B?dDlSbytDa2RCM0JtRkdLZlNzanArRENHQUluWjdENU9pUm9vekROUzcwV2hi?= =?utf-8?B?QzVPQTR1TUU5Q0F5WnlBb2IxczAzNGhmOXA4b215RWVnYm1JZVplYitJVWdt?= =?utf-8?B?UiswS2hwNHFqWjYrNE12T25iZkl4YllGaHFzeEVWc1ZBVk1YaS9UbjFJWVg1?= =?utf-8?B?bERFc1pYcFp4ZWUrSDNYcExVcng2Z1FSRGlBRHI3a0VQdzhzQlh1aG9ZK2xG?= =?utf-8?B?TXRkZEVWMldCMEhuYnBSUVJnbmgydWFIN3JLVW9zbWxMTFdPNHh4eTdtOTNp?= =?utf-8?B?VnM1RFJ5Wkd3bTI0RkpBVDBsTEd2UGpEaVozbnZIWlF5KzltUzNPN2szSk92?= =?utf-8?B?dnhWNkJEWGtISHlrY2pMTG9NWFNXczE0Y3pwWGNVVG5ZbkVWVXlDTjRXeGpo?= =?utf-8?B?QldQQnV0cWhJdlZneDR2Z2UvS2VucHZ0aFZBaDVPUnlqWHNIU0dwUGp6QWZx?= =?utf-8?B?SmtZbnZhcDN4TTJ3am0remI5VnpoUDZpblhtaFVIa0NMTS9NVEJBUGhlNDJX?= =?utf-8?B?TzU2T3A1dGNkNXpLMnZ0c2JsSDg1SlhlSXRrdktGVEdFd3VSalRkcVNvRDh3?= =?utf-8?B?LzVWNkJTdVJwVWlJbENNaDNMTmF0cFlQN04rZE9zMm4ya3lUODRnNHoybm9X?= =?utf-8?B?b0trbC91TzVicFZ5aU9Da1ducTNEUWVTSXdOWmdOc29IeFNKa29qcWVYWlVK?= =?utf-8?B?QWtQY1ZDa2FYYmJjMDE2L0tNUkpLcmowa1k4aUl2azhDV1NPU3Z4V1JyZ04x?= =?utf-8?B?aEFkQ2JYVlkrM0hPSDZIYVNOUGVrNDBLYmdmK294UUVsN21zZlBTblpiVFg5?= =?utf-8?B?NUJ4a0w0b1MvdFhGamZYS09OZGdPRktmYVFMemZPdmxiSnVyRXFGLzgzaG1Z?= =?utf-8?B?Tll0SDFnb053SzRuVWNJTHVjTU9sVEpyUUxOc1FDeXlxdG1YTmNnK3lSTmYz?= =?utf-8?B?TGlOam5sd2JjNXFlU1pYa2FLd1J0V01iMUFwMjRQN2g4THRMQ0JDVHc5TXlP?= =?utf-8?B?VjVjNmxGbG5NdEk0SWYxUSt6WXZUR3BYNm94bGp3RWlZcERjMmU1cFRpQVNG?= =?utf-8?B?bjdMQlBHUFpZR3J0RXA2M0xCckZvNzA3NjV0UTZtbGs2QVIzMGo4RUdDWmxG?= =?utf-8?B?cW01UWVoWjVBcDk3MDUrS3o0ZHdMd1hrNE93ODFxdUd1UFdYekY4eGs5bVRV?= =?utf-8?B?STJQT0E1UjdWYTVLZTBWR3RuUldJd1MxRzNJSEVYSklJbmxyWnl1a1hiZjBi?= =?utf-8?B?K2tsNUFJMmNLS0IwRExvdEhaV1Z1SFRhdXpHdURaNUc4SzE5NjZDYTJjZ054?= =?utf-8?Q?gxJfPliNkOCHbPMmPnJRklMuQ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5e55dbdf-6b89-4732-8292-08da5e84ba47 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:48:58.1695 (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: a/P730t/Ty3wWI2HCtYrrhIqfjqs9HJdxxrVBRxIk6Ikt+HNBTKaSGyNtk42DFhjvsHF6aeIwRQ8vlIabuAeOw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB3089 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025371566100001 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. Note that cache sync-ing is likely more strict than necessary. This is both to be on the safe side as well as to maintain the pattern of all updates of (potentially) live tables being accompanied by a flush (if so needed). Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian Reviewed-by: Roger Pau Monn=C3=A9 Reviewed-by: Paul Durrant --- 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. --- v4: Re-base over changes earlier in the series. v3: New. --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2211,14 +2211,35 @@ static int __must_check cf_check intel_i * 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(hd, 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 @@ -232,7 +232,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 Mon May 13 22:08:31 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=1657025385; cv=pass; d=zohomail.com; s=zohoarc; b=hysoOwW9Mrg2ZJiAzqPRdhrkRUmF9GTAveWv8tmSAXduuncTPcxXP+jEW5CxNs3Wt3a2b4Z2rfNKmahee8ClxAMXoQmi9ohLonKbMKScgi5o3LCwO5Bb04jr/wtZhtCixHltiJFmXHhXu0yED0rd7Q+McgLpnV01nAK4kqFi7nY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025385; 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=iNSivqMUGJNXw6YV9IuRH2YBw0MQFLGrycARpWhZOTo=; b=QPONNQJJID48iQBTSWYzr2rNKl2dWnJqMgXYNhwe+QquHedVeh6fLPmi0UcxeCEDvOP98fVCggCtEJrEcx9NdBVO1kr18DOqXbYcV/JO6kn55KuobnxxWgFWUDIWh81RSLnYxsvQ89AIms1yXNfcCuJV66hPIlsXbyUKziDZ1l8= 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 1657025385583613.6426532351147; Tue, 5 Jul 2022 05:49:45 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361188.590574 (Exim 4.92) (envelope-from ) id 1o8hzZ-0008Em-Eq; Tue, 05 Jul 2022 12:49:25 +0000 Received: by outflank-mailman (output) from mailman id 361188.590574; Tue, 05 Jul 2022 12:49: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 1o8hzZ-0008Ef-C4; Tue, 05 Jul 2022 12:49:25 +0000 Received: by outflank-mailman (input) for mailman id 361188; Tue, 05 Jul 2022 12:49:24 +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 1o8hzY-0008Ch-4s for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:49:24 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2083.outbound.protection.outlook.com [40.107.22.83]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id e4de258d-fc60-11ec-bd2d-47488cf2e6aa; Tue, 05 Jul 2022 14:49:23 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM0PR04MB5252.eurprd04.prod.outlook.com (2603:10a6:208:cf::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.21; Tue, 5 Jul 2022 12:49:22 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:49: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: e4de258d-fc60-11ec-bd2d-47488cf2e6aa ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kHTxO8oiTIlf3EUsEu+MSDZtWIZt7liqp3B3rF44SbRPfIFtRbLU70b6YNCBTmjAb0nDBgUvv7NUZx6i8x2gNLuIu2a67IEA8HN82+jF8inZKKweLBTOuKwlIevbGhE54NoKWX+SuPqONNFDQMzBR3A07Wk03JFtJ+eamFBMxTe13WZqaAX6j4NPnY/1brGLiV5y4/Iq1EOKCl/dqAyomwFxnVAR9pyQu8zXbNlNWCLh3f1mFCuGJcln40Vdi4VB/WZI/Uzfh0qmRMAFf6ZIGK3/43ZT9v40i7IFdjCwRL8ZXvcziEB/64aiOVSW+wBrWhN1ZyUCkVOHKZ+f5dwcPw== 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=iNSivqMUGJNXw6YV9IuRH2YBw0MQFLGrycARpWhZOTo=; b=LGFzy6lUnK0WjANKIyVvI6isM45ojcwuUEqvClC/F4+LgUss59P54pwbfNL0/F1vQ5FEXYoZYuDllW992OUZ5cKfs73x7MmkPr63ji1ggOwr4QCj+5sWwHvrl4PgIyW/kzgHrC3pCzPP7Kon3aOFkSw7gdMyL422X4T6e/y0fYaLxJkPuKMHZQOW2TIfV1eyhjTAusJtR+6oGC3PfX6wZWUUL6PkDnHd2ZsyA+EKM7MG0vfbinfCOapMiuU7hJGWtRlMT6JuxKsVEdSWLfkzDE9jbgGkB6MzBXPrlQ9poyna5YCIHKqw3tUyJyU4kzJkT1sHXCVdJx/eEttKevjIUA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iNSivqMUGJNXw6YV9IuRH2YBw0MQFLGrycARpWhZOTo=; b=s6ipQUoUOHaut3n5ecjaui4pE5MhrkaZ5vomBt/vnuZ46bWfUzBQj8r0xxZkdoZBjKXdYo0IJbTCqKynnE/eZlF0xRe8ZMGSiEnnA5fiytvuzTIuLat8hggResZNa+bFG64aiRryDHpstlG1iBhoiZ/O71d0HovHpBczJhJ9KG11Bse6YJkNJb/y6U3aIPbW5uStbujXNLc0FoaCDd2aD850iBeQQKdMg2vO32FfYsbwF+hL83yVIE0yg0P6N0ngdP2A/S0jnzkOep3SxnjbuKMsKNEE8xw2+yXlohcJTpAT22JeajEXT0jzLPVwIlN9oP949F4AnhE7JZdeow3ilg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <1dab40d4-75f1-566c-f982-610013db72f5@suse.com> Date: Tue, 5 Jul 2022 14:49:20 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 13/14] 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?= References: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AS9PR06CA0056.eurprd06.prod.outlook.com (2603:10a6:20b:463::28) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 10b99f2f-b887-4222-3cca-08da5e84c88e X-MS-TrafficTypeDiagnostic: AM0PR04MB5252:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EYz5e7wS4dm/y06BLPEKKyf7a1huWjZ+0ZN7JqWcwsMXz+0h0WIzn3ETYgnSirXCiztPHW0pkCWhtn8fvkg76IsBq1MptrKTY1G2oFFqxOA/A0XdgOl7cW36VY1bJfx/u27L0RXhltR6088Hmzvu67wnwdtbJxvoHoAmoOW72+Ee6eZ95LIUjRrhZIvqjBX6U+O4uYXwENEMPhrPDYGMG56m4oU2/qjtCQH5iq0JTS7rA8gB3wku3Dk7dbCGYrare0/DU7k8GBN0Q6g5IvDRvTFTDGc+oHDTUaWVqeLxqXMCYYRYmtcIoSEMH3z/EmXnnqIRhw96dYaXfIDwnQFgpkldx3NBMKs1joZHHpcuIj0XlQ3Q8FfQyxhCDb15IVmTu64lcPQe9EZccKQfJSeSr6SwA06rRIIMrlvWfoOoeg3A0SrkRnCFZ05ZZZyzlpNQ6L6FMkQGRPO4EYey9alOcNUyDzJQKxgnIY73Ufh35W95RkYB8mg3e5ER+/Rj8X6/Bw+Aq1xlQ+5EZ+Nkib8rDwaQslljw0gzGWh+rYJtVB8UnNwwUakt8zumd03M65Ha8q2D9j63pTLR3ijDrEoRR6noqavHBtnG7DNg0hy9SZLpwwZGbNUVoKQsmywdAMC7hhcmJaYLsgPSXnUohvLq3JTa1hyUO5CTKRLgPGMm+QJSjwFurhOP9HH3VRjxQpX8IYyuSiOUP9mJ5jfkyQii6dybkqdCzKo7eIs/BG/1zxsx+vQVLFZUWsY4qyiWq5Qk+Sq1vMFF3tnvUeEeW9p6LbOYFL6frIe2qVac7+cUsE09ikxEgebZqUxsXXYbng1xOOAjpcl48yLnCLJMksNZdxh5oCoDeoG3HWfR6wh4KGc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(136003)(346002)(376002)(396003)(366004)(39860400002)(478600001)(5660300002)(8936002)(6916009)(54906003)(316002)(86362001)(31696002)(6486002)(66946007)(4326008)(66476007)(8676002)(66556008)(31686004)(2906002)(83380400001)(2616005)(186003)(6512007)(26005)(38100700002)(41300700001)(6506007)(36756003)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RjZHMzh1TjVsOTBMTXNUcTlCUWNxWmVIK20vNW5PeDhsaWdtQjdaUzJaWnBl?= =?utf-8?B?VVJRdXpNVG1wSlFnb242K0FqeGdNZ0piVmxlZ0haTlVLQ2FaZEFMNk5Oc0Zi?= =?utf-8?B?NHlHTWp4REJaSzNUZE56SGYxT3Nod1ZFNWUxaER2V2lyVitGQzBYektXZmFF?= =?utf-8?B?ZlRoZXBXeGNxNFovTzVHZEljbnpiWUxKMEZ1REV2Q0orZVJBWHRoWTFnK0Zy?= =?utf-8?B?eXA2SVJwSVZnK1FLS2xPUUx1WGR1VFQ1RUtaeWMvTkRtODgrMTM0Um1VVlBq?= =?utf-8?B?dkthdG9iMkxLcGJndFdyVUtvYllIMEgzaU5Vbm9wS3dTN1d6cXpRWVlnRmpz?= =?utf-8?B?RS9Ucm4yWnVGT0FKOHl2eXdWYlhhM1drU0VLc3J6NkN5RHJqMC9IaEtpdHpG?= =?utf-8?B?RlJibWdmeGcrQXd3R1Exd2IxY1lGdEdXeW9LcFpIRjdHUEVCa3NmeW5Fa29Z?= =?utf-8?B?UXhMYjVkbnJuVkZMbkJuV29KMFNpUHV0K0dvNDJqbVAzYktHMkJzdGNMb2J4?= =?utf-8?B?dVJlOStybUdGZTliWjUzSXZXVlRlUG9pdGU0T0lrd1FNN09JZnd5S25wWlhP?= =?utf-8?B?NGtIUHdMbTYzQzdwdXpDbk1nKzQ2a2FBUkhCMENXbHhjU1h0NGVyTWlQSzNG?= =?utf-8?B?WUJZOUhEamxYNGdxN0xnZlpORjlPRkNjamVBb1daRlM4Znh2SDh2c3ZJME5Y?= =?utf-8?B?aFQ4Qzd2V2RWbDVFaXoxTEo3bEFGdG83NjlhZXUzSXpEeXdaVDRCdnR4QjJU?= =?utf-8?B?TUI2Q294V05EMGQzakdLdFpObVRsbUI0Y01SclNHdDF5YUZVaVM1aU9yUUYx?= =?utf-8?B?Yzl2ektoM2xaVFcrblFHbGpYK3VhQ2h5OC9JWS96ZTB2Y1NUOTR1OEw5SUhj?= =?utf-8?B?TEZ6WXoxUXNMZG1TN2dnVEJUQThKTjdrZTRKcnhtTWw5RVVYakc3bC8xSzlJ?= =?utf-8?B?K0NxaWxINTZHR1dNRVBYVWRFdXRMR1ROT2lvcXRuVlFLY0YwVkZ2c2tEUXY4?= =?utf-8?B?VU1ZV09NSVM2eXlLMGs4WmNqaU9LUzZsTmJnblFUR0xtcHdDcXZsTDZmN3Y5?= =?utf-8?B?VDMweE9Rek5rMUhlSUpLMU1yaGhVTTl6SmxGYVZrZnpscmZnSFhqdm5KRW1l?= =?utf-8?B?Sys5ekRVeFd3Mlowb2dOLzJjaXFJNGFmcG9SQTNtRmdVejhyK056VkZLbWlX?= =?utf-8?B?Tko2T0R3NTJqSDJRN1FuUDZCRXlONmlLL3ZzNTZ0UnZyWXFySVhrTDFPKzI4?= =?utf-8?B?TkdpTE9xWEt5NGxNYktHWFg0TTJyMnd2bkxYOGZMb1d0WVBta1pWNmQ1RHhv?= =?utf-8?B?SGt6MFBEVjBkaWZ5VG81VGFldnkwZm5rbUlqYmNKVWZUZWxqd0UzRGVwemoz?= =?utf-8?B?V0w4QjFpSkJ2ZTE2Z2N2dkFaTlJFM09PcTk5VTNUY2pDSk9QU2JWbVp0UTdT?= =?utf-8?B?OGZDZlA4VmQraGttSytlMHVIVVRHRVZXSzllSEhRSEZWQnVuN01jOVhsT3Nr?= =?utf-8?B?UmxBUzlVbmxMc29GVEpBbWI1TXNYMENTKzd3ZE5uS2praG91eXlrVXFyajli?= =?utf-8?B?M1VYbHl0Tk9jWHg4WEdMQndocnQ4ZkNNWTl5UnVhdXFId1IySXA1SjBwMXk5?= =?utf-8?B?VGQ4M203Q1Nhc29JalFKN0ZXWFp0MEVvNzVNN0RWUWtDNEJCK1FXZ0dkZ3Y3?= =?utf-8?B?dXlNb1pKT3hOZ3loRTJoYk8wTGxqOHJ2MVZmcDJwMUFZVXhiY1J2bHJRV0lG?= =?utf-8?B?Mmw1STM2Rm1YcFpKenhUZ1hhajdWVVZqeGwxckpwVll6Nm9BNFNEZjE2WXZR?= =?utf-8?B?eEgwcm9kdGUrUHJHZWFmQ0JVaUZIcVFMMWU0Z1ZHZFJsS2F1VDYyS2NMYWpx?= =?utf-8?B?emZ1ODhYQ3dOTzROUWxzdU1DeW5KTWlMVHpBOUhEMTMxOWZaMExaYmZBN0V0?= =?utf-8?B?RmJlVmI2K1orSDlRcEpkTW96UkRhQm1KRVRMc3VpT0NVVUdGMkwvZmUzMlBJ?= =?utf-8?B?K3VrMG92a2JOVC9JM0E0V1pIa1dkV2FxcW5DNTRCck1sd2xmZWhqRy81eWRs?= =?utf-8?B?bmQzdlI1UU9rVmxnRnJJcTE3SjM5UWllKytncjRscmFKcGtEVEFncHZxampF?= =?utf-8?Q?vZiZuX+BsnNtQVhLndJSxip/7?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 10b99f2f-b887-4222-3cca-08da5e84c88e X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:49:22.1211 (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: 6Z7w6Bo4bNWlyWAU6VKAKWwdcrckDfNA2bgfq7pYiclwDdkKDqmaJQPGMPwAvftYspGa2c6Q7HYx6CIrusDEdg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5252 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025387596100001 Signed-off-by: Jan Beulich Reviewed-by: Kevin tian Reviewed-by: Roger Pau Monn=C3=A9 Reviewed-by: Paul Durrant --- v3: New. --- 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__ */ --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -345,6 +345,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 */ @@ -477,6 +479,7 @@ int cf_check amd_iommu_map_page( flags & IOMMUF_readable, &contig); *flush_flags |=3D IOMMU_FLUSHF_modified | IOMMU_FLUSHF_all; iommu_queue_free_pgtable(hd, pg); + perfc_incr(iommu_pt_coalesces); } =20 spin_unlock(&hd->arch.mapping_lock); @@ -543,6 +546,7 @@ int cf_check amd_iommu_unmap_page( clear_iommu_pte_present(pt_mfn, dfn_x(dfn), level, &free); *flush_flags |=3D IOMMU_FLUSHF_all; iommu_queue_free_pgtable(hd, pg); + perfc_incr(iommu_pt_coalesces); } } =20 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -404,6 +404,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); @@ -857,6 +859,7 @@ static int dma_pte_clear_one(struct doma =20 *flush_flags |=3D IOMMU_FLUSHF_all; iommu_queue_free_pgtable(hd, pg); + perfc_incr(iommu_pt_coalesces); } =20 spin_unlock(&hd->arch.mapping_lock); @@ -2239,6 +2242,7 @@ static int __must_check cf_check intel_i =20 *flush_flags |=3D IOMMU_FLUSHF_modified | IOMMU_FLUSHF_all; iommu_queue_free_pgtable(hd, pg); + perfc_incr(iommu_pt_coalesces); } =20 spin_unlock(&hd->arch.mapping_lock); From nobody Mon May 13 22:08:31 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=1657025422; cv=pass; d=zohomail.com; s=zohoarc; b=NOH11yGNho9lkzp1kM3gjYSPxJElwYBvggzrp+kAVCL9qVYQPEAhktUR4pFqug8kDtfi8UG15lEd7Fflx0u2G1E1VNLf33HXC7n9Cwp82qyxTL4ayunJhSiQRVgptPPXDAP5MZ5OykoAF67vrPQMpFBI7S23i7goBb/1ZQbAC7I= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657025422; 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=aNGQdoucDFou5j3M8E7Hd4miL8kBXhKfjN3w6aHaDIs=; b=ixfM5Y06B7dkRKeHd2Pu2lhOQ27O3XkJtWbvEJeltNfO8fTcvdbG5BBk07azx7klJio7a0pizAnihT4T3EfdZ+wbuMGbKIAlRx+rW1xyke/Wt3dZtLnrspEkVoyQsSp3LPl1dJyI818WnnF9/w3A7EomHP61sUI5o65CQCVgxzA= 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 1657025422305175.9041552496302; Tue, 5 Jul 2022 05:50:22 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.361196.590584 (Exim 4.92) (envelope-from ) id 1o8i07-0000WX-P3; Tue, 05 Jul 2022 12:49:59 +0000 Received: by outflank-mailman (output) from mailman id 361196.590584; Tue, 05 Jul 2022 12:49:59 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1o8i07-0000WQ-MO; Tue, 05 Jul 2022 12:49:59 +0000 Received: by outflank-mailman (input) for mailman id 361196; Tue, 05 Jul 2022 12:49:58 +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 1o8i05-0000VQ-Qn for xen-devel@lists.xenproject.org; Tue, 05 Jul 2022 12:49:58 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70088.outbound.protection.outlook.com [40.107.7.88]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id f909813b-fc60-11ec-a8e4-439420d8e422; Tue, 05 Jul 2022 14:49:57 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM5PR04MB3089.eurprd04.prod.outlook.com (2603:10a6:206:b::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.22; Tue, 5 Jul 2022 12:49:47 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::dfa:a64a:432f:e26b%7]) with mapi id 15.20.5395.021; Tue, 5 Jul 2022 12:49:47 +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: f909813b-fc60-11ec-a8e4-439420d8e422 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KO26Cn7V0S6ZGzioixxnZR/I/ytsg17vRBX4amzpMwYzNFgj5p9M8VrHITft0qvweorL93Z03M4mG1JwsoOrIWDov1KWd1x9W4SW+EpCXyAZn2eA+poRjekciM3Q/mXzlMyxzyfRecKY5DXF0AkOLk4UUCG8yksApvcM15UJKw7NBUyS3BwR6bQU0zJU71catuFxLAMvmlkkcyOQ2V+H/KdZgW4symb2X9twjyDpeTP+4Ed2IoNdjWu/TrGv8YXat38tJqW0sfNn30Sa09uKbOWsunsRFxZM0YIxudxsWCEa+LQ9V/oVEzJhD3QRirCU766Dydao+37TZE897eJV7g== 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=aNGQdoucDFou5j3M8E7Hd4miL8kBXhKfjN3w6aHaDIs=; b=iihD0+AumewRSrE30RzfNzlvQ2lfvQRp54rH6FemnK3k+l8LyoEX6OSrKM1frAcqu0A0Z/wqYOFlsOD1zIfoxIa1O/p4hT+ja+EFQvFvAoUSPgOCMF6Iupasw3lyZClhblNMEVAPY2Iqg5XnBYqESezT2V4FUorbVuCJFdskTrXHeL0OrH11cDsNXSaLAql94YdJG/i9Ei6LnRJD3yKIn16SaZwMz2aojOfQxa4L+cTwuBGM3xdcNFa4Frz6Ye/dCY1InPcgEzclB71UXR7NNkbw7G+hvJroC3XoTrc6pbSkDdOS3DsuoG71NP7p0V5NTHRr+dP224ROcocw3E1PLw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aNGQdoucDFou5j3M8E7Hd4miL8kBXhKfjN3w6aHaDIs=; b=0Fw/nQxsZiIk0D+cu2W4jLQwglfG7LCOWoPv4IYP3vsyOJio/YqNohwoGQanjo6TLEpyl4PXt/mO7deHswNrV2PAeTIRKk/iuAcrOIFutLVuwbOyJbZxSso4DU8L/YK7Y4g7Wa+2PEGh5RpV79vJ8VX0Aoy2qxTNSRREi0++lmDOXF0gZNY13FLa/Ewdpi0IqPyizPL/yzigc8xf3cGrvGurC3li2N2UjLfRlraSDP+uqAXaIxfVlist2j7A4VZQ+HmyDR5uMVBxbiv7V8V5RwoTNpYSshxRngJYu6NvIoTAW7X1kjivV/NyZqUzDCW4amEXLl/CDlSnAgf+BuZFog== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <20b9d343-fe6e-b5f1-1ad4-6795aaae0fcd@suse.com> Date: Tue, 5 Jul 2022 14:49:45 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v7 14/14] VT-d: fold dma_pte_clear_one() into its only caller 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: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> In-Reply-To: <4c9d4b32-d4db-3a4f-fe92-6022e63c3f82@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0076.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1f::14) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3456e26b-3aad-49cd-3cf6-08da5e84d75f X-MS-TrafficTypeDiagnostic: AM5PR04MB3089:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: iF33EOjItENqFGKqIXi5TcQ83IEGIyfDsHTmB7jqBdHZ76fWJWO7I1q5bWYdvynKG2QHG1nuyhs8L+tMa87I1DwfZ6Cn+UpDk6eU/ZA91esCaV+EvQubTcyA2cHTOXN/aFhBTgTxQY4Pm6GtSu6nyJmZmEeRQIt4/stPIvY7R2u8/pcoT6fEvMO/Pf1bNcVy4aiMnqnuDzxJhgWPSSXz1C/9zSAalqRxV3un0O6t2lGu3xLgA4N4BV9fZ1vvHfWquQftA8VXQdmqvIemu8ItMHVZbUUYE93dM7P4+yf7Qv9ayAQB+X+xKFi912eHTQXNB2zv4aHiaOVR3ooYnOxwH0peqMW+lc9FNgc+KRtyKrTb+XWfCRqM20AwRc1GBa+uYILGRcnkr3mRvLx4TKc9T9o2bUIXhM+Z7doSM2cUIQ40+MFru2yzuMO27Q/wB60yiml1Fr/ATUGMUaQpxbZnlDtXx50cwoCd4hC8q5/MpiU6N60xbDscnMgV2uwPOeIOAqenXeZPubBbOeW+wcC4WpsD2unQCJVq5i75vo+NPY44RnpLj3BRfYvWlWLhBYaWqU0VTCI0vwdCiApnJm/ewzmnNdVhAWplBYLkfvKgHZdq+kQmnvsKF664kKntTVAVBimRN0V6ZoL2v0qzFEEXPNIVC6W0mNuunKWNuSJ5Rjdjqt/XTKzEJn2YTK8ZJQB2RVugWvJ6OEbG/7ydMDN37Jx+yXHeJ3fQK0ssmu1EtjkURZWh3EzYX3Gxk1nzeAhupZ85i0HqCiJmrE1VH6V8TMv1k5axCOtpF7/hrDBFJMwCSq68yCtSyeOgjTPZLCUPZVHP5Xy9k3m/4EvRv42fEA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(366004)(396003)(39860400002)(376002)(136003)(346002)(478600001)(8936002)(5660300002)(6486002)(86362001)(31696002)(2906002)(6916009)(54906003)(316002)(41300700001)(2616005)(66476007)(66556008)(66946007)(186003)(83380400001)(6506007)(31686004)(38100700002)(36756003)(4326008)(8676002)(26005)(6512007)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MWxjc0haTFRrc3pzZjVETHJ5eEFXSUE3UkVJYjg5WnZoaDErVDhEdXdOOVpN?= =?utf-8?B?UjNMbHpPbWc2TytUS0x4UUVQMTJmcWM1blhaaDJMK0lINk9SVFcrVlNYSzBo?= =?utf-8?B?ODlaZTNtdXVxbFVzMElkZGEzbWdJbDNmUzRVV3VJczN2QlJCeFNKNWZjemw4?= =?utf-8?B?SDJ0bWhuNHNMUjZaYW0zNndoZnIzNXM5YzVRZUZhTGptaldvWWpEYlhHQjlK?= =?utf-8?B?M2NNdzI4a0RNZFVnWkh3bHl0Q2RSUDN4V1ZOZkNJejRHbUZpU09DeWtNc0FX?= =?utf-8?B?blNSVENNSWRONXhpUjNaeXdnWGpLcUI3NmQ2TloxQWpGalhGYkY5YmprNHcy?= =?utf-8?B?c2ZTcStWMFgvellqSm55VlgxckE0QlY0QktZQllYaURFYXpMdVZIQTc4SGJG?= =?utf-8?B?R1JrUENBNzk0WTJ6U1pDVzVaTGM0d1FNL3dqTFFDbWZ5dG9QMUlMZE1YUVd3?= =?utf-8?B?R0JxdUhjY0RsT3dSRlZvYlMyM1RjVGo3S2JNMFdpZ01NUTdiUFF3eGJLbWtw?= =?utf-8?B?VE9mQlFMT2JDMHpjYlhpYUNJTTYzZXdFRXlRNndFV21JZHpDLzFoU1BHMjdv?= =?utf-8?B?U1l3cjJDdzVrd1FPdGw5cE9UbjRheVNHZG1HTnZ4SzJtNVVXQllFWU5CTUxj?= =?utf-8?B?eFUwMXRXUjdKMkhMTGg4WGpTNWhTcklnTFpNVGpERDdDdzdtaXR4cnd1MmVC?= =?utf-8?B?dnpDekxHK3ladXZkS291UGl1aU5NMTF0eHdCTVhoOENNSlg1Y0FoVHM2aFF3?= =?utf-8?B?cmFZSjg2Sm1rQmY3YlJqVHREU0hLYnFHL2hPQmZVRHlsbGdEOG1pUlRpaFVH?= =?utf-8?B?Wjh5cHpMd2F1aFFHSy9jelRLUEIxeElGWU5sSjNtS2NpeHlFMHdBd0ZJNS8v?= =?utf-8?B?OXRYdW9Na0JlR0FSTk9vNmVib012S1pJVE9LVk9JNTZ1cWJPTm95amVHc3ZS?= =?utf-8?B?Q0cvMk1OQytMeUJ1akRpYnNMYkNxOG5Rc0REaWt5dklqMjhZUXJCc3BKdFRW?= =?utf-8?B?bkN2WVFtdC9jUWRKS05Qb1lGS0ZhK0l3dzVoUURHeHE2TjdvUDhPcjBkR1Mz?= =?utf-8?B?OVpMTjNLZUwzY3lObVdSSlBLSzJleG91YkJUeFplRTd0ZGZjWi90SkhWdGVk?= =?utf-8?B?amFBUU9ma0l0bnJJalA3cXJDOHJqUExSVmo1N1BCVzYwVHh4cEp5d2dqeG9T?= =?utf-8?B?VWFEL1NmMmltMWFvQTBDakUrVHp5c0JuRVIxRzQ0MDIyVGZKbDVmbzl5NjB3?= =?utf-8?B?SEZBZHQydXpCQXl6cjFpck9FUTlRcUJyK2pCY3A2T1VCNjZnVzQ1Tk5EOEhP?= =?utf-8?B?bW5KaUxHL2xBV2Ywem1EQ1ZCVUxET1dYVlZscDdZWk0zanY3Z0xhM3hFeU1l?= =?utf-8?B?Mm13eTdpYW1BTjB1N01QUjI1Q2puQkEwQ0RhQjNQZTJFa0JZbkFhYnEwME5B?= =?utf-8?B?T0tMVGQxeEFsRW9SMWpZeUdBVjZkMnhOUWltNXM4VkEvVERmRXRBYUtWZnZz?= =?utf-8?B?ZS85cVd4QnJYcDh6TjUvTzRxalFHdmppOS82Uk5hUktOSzBHUXNoSnUyVm5w?= =?utf-8?B?eW9iZEowVXJpQUlhck5nbW1CYU5WeTc0VzJvSXljQ2ZTWnZDb1pNSVZCN25D?= =?utf-8?B?OEtWcVVxOGxZSE1RWWxtaFFkb3o1cERZMlpnUEZWQy9FQy9wQzh4cmplcTQv?= =?utf-8?B?bnRURXZRa3hORER4Mk92TGlOMTV4cUl6bmw2SFZLTDhlbUZzTVpRbU1scTBx?= =?utf-8?B?anRRcDZRYmw2bVpyanJYcE1MZlFGWXNkMkRBNDhPejJsZTluVjlPNnFjS2tH?= =?utf-8?B?Z2V5SzNIYnZ2NkIrbDd0eHFWUHd5YSs3NXlXeXJCQ0dCbmt6Z2hHeGdKTC9U?= =?utf-8?B?OVo4NWhiejIvNHl6bUJ2c01ZdWFyNDZqY292TlR6UkUzdk80ODlhSWRJRUY5?= =?utf-8?B?RCtmLzBxZ0xkTXVpcUdtYUhYcm0ybmZWNWZQSko1U2xpZjErbzR1a2FCRi93?= =?utf-8?B?YXlZTk1RZk93clN0bDltYnBxMnRKOXpFMktndE43UWh1Ymp5em9KcXl6Ykgx?= =?utf-8?B?ekdiL1VTcmYxMWxQbjJWSzZzc1pGRXJZdVRXT2NabWpwcWNBc1IvODVEQmh4?= =?utf-8?Q?fGRuhWkMfni6ncXW3oGM1xESs?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3456e26b-3aad-49cd-3cf6-08da5e84d75f X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2022 12:49:46.9633 (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: Pw3aC+QfNz/3D79Y4nvJ0ki+itnp+r6oCrvgvudQ8Cn1w7FvhLRWHomb40pwb19AG9cpsm6b+L9+Z+wQQN/rgQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB3089 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1657025423804100001 This way intel_iommu_unmap_page() ends up quite a bit more similar to intel_iommu_map_page(). No functional change intended. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian Reviewed-by: Roger Pau Monn=C3=A9 Reviewed-by: Paul Durrant --- v5: Re-base of changes earlier in the series. v4: New. --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -806,75 +806,6 @@ static void queue_free_pt(struct domain_ iommu_queue_free_pgtable(hd, mfn_to_page(mfn)); } =20 -/* 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, old; - u64 pg_maddr; - unsigned int level =3D (order / LEVEL_STRIDE) + 1; - - spin_lock(&hd->arch.mapping_lock); - /* 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); - return pg_maddr ? -ENOMEM : 0; - } - - page =3D (struct dma_pte *)map_vtd_domain_page(pg_maddr); - pte =3D &page[address_level_offset(addr, level)]; - - if ( !dma_pte_present(*pte) ) - { - spin_unlock(&hd->arch.mapping_lock); - unmap_vtd_domain_page(page); - return 0; - } - - 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(hd, pg); - perfc_incr(iommu_pt_coalesces); - } - - spin_unlock(&hd->arch.mapping_lock); - - unmap_vtd_domain_page(page); - - *flush_flags |=3D IOMMU_FLUSHF_modified; - - if ( order && !dma_pte_superpage(old) ) - queue_free_pt(hd, maddr_to_mfn(dma_pte_addr(old)), - order / LEVEL_STRIDE); - - return 0; -} - static int iommu_set_root_entry(struct vtd_iommu *iommu) { u32 sts; @@ -2264,11 +2195,17 @@ static int __must_check cf_check intel_i static int __must_check cf_check intel_iommu_unmap_page( struct domain *d, dfn_t dfn, unsigned int order, unsigned int *flush_f= lags) { + struct domain_iommu *hd =3D dom_iommu(d); + daddr_t addr =3D dfn_to_daddr(dfn); + struct dma_pte *page =3D NULL, *pte =3D NULL, old; + uint64_t pg_maddr; + unsigned int level =3D (order / LEVEL_STRIDE) + 1; + /* * While really we could unmap at any granularity, for now we assume u= nmaps * are issued by common code only at the same granularity as maps. */ - ASSERT((dom_iommu(d)->platform_ops->page_sizes >> order) & PAGE_SIZE_4= K); + ASSERT((hd->platform_ops->page_sizes >> order) & PAGE_SIZE_4K); =20 /* Do nothing if VT-d shares EPT page table */ if ( iommu_use_hap_pt(d) ) @@ -2278,7 +2215,62 @@ static int __must_check cf_check intel_i if ( iommu_hwdom_passthrough && is_hardware_domain(d) ) return 0; =20 - return dma_pte_clear_one(d, dfn_to_daddr(dfn), order, flush_flags); + spin_lock(&hd->arch.mapping_lock); + /* get target level pte */ + pg_maddr =3D addr_to_dma_page_maddr(d, addr, level, flush_flags, false= ); + if ( pg_maddr < PAGE_SIZE ) + { + spin_unlock(&hd->arch.mapping_lock); + return pg_maddr ? -ENOMEM : 0; + } + + page =3D map_vtd_domain_page(pg_maddr); + pte =3D &page[address_level_offset(addr, level)]; + + if ( !dma_pte_present(*pte) ) + { + spin_unlock(&hd->arch.mapping_lock); + unmap_vtd_domain_page(page); + return 0; + } + + 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(d, addr, level, flush_flags, f= alse); + 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(hd, pg); + perfc_incr(iommu_pt_coalesces); + } + + spin_unlock(&hd->arch.mapping_lock); + + unmap_vtd_domain_page(page); + + *flush_flags |=3D IOMMU_FLUSHF_modified; + + if ( order && !dma_pte_superpage(old) ) + queue_free_pt(hd, maddr_to_mfn(dma_pte_addr(old)), + order / LEVEL_STRIDE); + + return 0; } =20 static int cf_check intel_iommu_lookup_page(