From nobody Sun May 5 23:17:00 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=1629814557; cv=pass; d=zohomail.com; s=zohoarc; b=iH/rkhLhlU9/7zyna6kJ+cRlMWw83k6yuL48yieaMxQhXjrTXJEFRl7FbpEfIto9VPS94XcQjr/Q/5SZ+5TNaZ2BdzVaxSyR53+o3XQ/T7h/lfVaEWlI/Y9AhFPu0uRv0ZB8QYDfXBg5qlTKS1AEqxqI6v1J1rfraHIwHdl9CMg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629814557; 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=9xWLrkNm6/WDFl8AO3HJxUPfOuuvUqwRgRuL5YEUGKU=; b=SUOAX7dN3nWn4aH/GpDZ5hxEbxUAhDpl1Y9isZwNEqSGNO28Gos216y8UbJERdUQqvjcuROLZHxvWaN1c4Pp6KSRxo/Mzd3iV9tWPWhTv7q5L6Caa3k8LKTR6lEBuCBQFB0BcAlxs/Bbqt1xkHDF+pJxsbf29fbJMBNztvRdLXc= 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 1629814557461808.2923695390501; Tue, 24 Aug 2021 07:15:57 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171414.312795 (Exim 4.92) (envelope-from ) id 1mIXDE-0002OT-9U; Tue, 24 Aug 2021 14:15:36 +0000 Received: by outflank-mailman (output) from mailman id 171414.312795; Tue, 24 Aug 2021 14:15: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 1mIXDE-0002OM-69; Tue, 24 Aug 2021 14:15:36 +0000 Received: by outflank-mailman (input) for mailman id 171414; Tue, 24 Aug 2021 14:15:35 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXDD-0002OG-KY for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:15:35 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id c2c7d108-843e-4b26-98f9-992cc186dfbf; Tue, 24 Aug 2021 14:15:34 +0000 (UTC) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04lp2059.outbound.protection.outlook.com [104.47.14.59]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-23-4jXPHHiKNaWQrkEmo7GzoQ-1; Tue, 24 Aug 2021 16:15:32 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB7188.eurprd04.prod.outlook.com (2603:10a6:208:192::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:15:30 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:15:30 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM0PR06CA0118.eurprd06.prod.outlook.com (2603:10a6:208:ab::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19 via Frontend Transport; Tue, 24 Aug 2021 14:15:30 +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: c2c7d108-843e-4b26-98f9-992cc186dfbf DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629814533; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9xWLrkNm6/WDFl8AO3HJxUPfOuuvUqwRgRuL5YEUGKU=; b=aUIw/lQV7cH/hVqibLTKWUmvwsctSf+InxN9xZ6vIRm738vS77m9wIV4xgqVf+pPxCEwYZ koruhg7GEGLQi22WXaDpmddJvVNMj6xzriiYM7EPlahclKv1rjvy1q2g+yBDdtuwwUbgwn HFC6uATBewAZHpfv1mUCsC9DhEtF0Dw= X-MC-Unique: 4jXPHHiKNaWQrkEmo7GzoQ-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O0gXP/KxjlFJX1pAJs70O5WKXWra2Sr5qCNXpxb1dIBNOTQdcbl3BkF0ZBkxfPjoWIYGXGrHkt31O4gAQUg8m38gcFsBqio0K+Emd6wScYu3+nzBu8pXm4Tjsmf+kvwZCDedmrcxjtdBTtM9aNYjedkOxpPb3/HPI1G2Dpbvb0wLwc1XwJGGl8QfcBQQ+0JuoYytDPNS7p4BuDTBdJ+G1iUcbLEC9aX2+7uW0de6gVK+UQHFsdD5L3+mLcPXA0kRIOHwgrPXj9SjzgcRWfCGdq42lMrhon1wjpRVc2SKYgdzDDvmKgeB5rDLdqB43dQNNdVfJ/xgJ7QlNJyg6Lmk+Q== 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-SenderADCheck; bh=9xWLrkNm6/WDFl8AO3HJxUPfOuuvUqwRgRuL5YEUGKU=; b=CgQ6V/c3qAqhaV3oL+7IUCQ79edu7xvMa8D4PgbA78GCHtzwoqWyEdN5tA9m3TKVBVKaHcVEeMlIiE4GlLN080WrqnCq6lSjxShAlnAbjgYF9YvwwBeiipk63a8N0lnZAgxRvCiztsWaTSqMyP5VPvm1bDNJ9ykz9RIHZ2ls03Tx1zHSRUPqV4oFwtzsVjIexCrpLMaQCJpfRpe78DEGtGlvtpaFzzifjzTE/GGU51ZkGf3Z7G5DOqnYiLn+S++hrhJPCHmwv3GF9cZu8H2qbxQFBL0s7TBrYZznmd4okDJ9KGVHWeS7eOBPiSDbjjp9dbBUHgESerl+9k650L+glA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 01/17] AMD/IOMMU: avoid recording each level's MFN when walking page table From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant References: Message-ID: <847bf96c-19fb-677c-cb0f-16e58a6abe55@suse.com> Date: Tue, 24 Aug 2021 16:15:28 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR06CA0118.eurprd06.prod.outlook.com (2603:10a6:208:ab::23) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9c4e224c-d5d2-4b48-ed18-08d96709a10f X-MS-TrafficTypeDiagnostic: AM0PR04MB7188: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +00/At1kWZRWMh+yqYQPQnO3xo7B7QpqNWvJxgn7T2N7Zo8mAH1Vs03jVvxpFZZ6oPERvE/UAfeK5nciaBRpN/Ty8DqRVUGwZ3AbcUNSzlt9KATDvd94x9lZQVA76SoOEGG7ACob2Lsg/Z8YiBsQXFv/H1c7iH42m2gMuOt4zq5KzwdIXzTpdS5SkTG3lxBSdICt7sSpow76Cb3IaeS2kCvmo19eEbhMOUY01cjDSZu+ICn9jTvWYph6hT+efpRm1LrVK4Qp37KhTo6on01ve8QL1AA74ZleHn2+XU0dZ6aYMDUx/oKcjONgd3gYHoRI7BsdTr5FM5O6VnRCtWrtDrEPiCOJJtIGKgiUEjKVtVHz1IFHUUfLKn7wqPgyfAtumwpOCL8J9a8sQ5Eit9cOXFbrCsC35cMKoSiJ4UyCD1qvhj3qCeRRj2wGBcbaIJeHO0ItPTWcZkiENetuQSl21aXR8StgGvWHSPupna7Nu5RT9+q7/tXWCS4E02uLSHcr8gyDM4Xzdl8oxpz/qyklSIwk+SsMNFGDBNMLV8ez/vOZwVDRttVy2JJY1FPweSSQAewdrMC0BC49fC2z/OrLZy8LFjy4LKf69DENYDnYWVEnq4URnTW+k5bVI+HtV10Xpx2zbhQeTc+4mA25fJjuv0YZ9ld5+huWrMtSpTaolZmSicj6bcybl0vwg8QuIa7WfQMwLbgfOkQRIifQGPMeYFGzLrdRwTbTnBhHRcDxpMU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(366004)(39860400002)(376002)(346002)(6486002)(956004)(316002)(2616005)(26005)(186003)(2906002)(66476007)(66556008)(66946007)(8676002)(54906003)(4326008)(16576012)(8936002)(86362001)(36756003)(38100700002)(478600001)(31696002)(83380400001)(6916009)(31686004)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VUJPczgvcDczQ1FHVEVmSWdYdTFtVVF4WDU4WllpcmFNNkVuS0IxQnNCcmxu?= =?utf-8?B?TXpmV2JZTVlHV0FFMEZJV2NsMDFXTFhLZmRKczJGaW43QVZ5Qlg1QnlHbmRL?= =?utf-8?B?VVgrM2NnZVJiUmllV2x3KzdHemcxNTZTNVlPaDdiWVl0Vkt3WEF2ajMxTWQz?= =?utf-8?B?TkFXRGhBMVJ2dzZhelpiU1ZBTlpITWQzTEdHTGgzUkIxUDU0NmVYUW5SS0dO?= =?utf-8?B?K3UvUXd4RzBHdmZsYnVsVmFncEJFOTRORkQ2anJScndwcU1zSG0zeXhTTHgx?= =?utf-8?B?K3B3QWV5YTRMRjhUclM1cnZtYUE3WUttaUFSV2NrRDNIeXdlTkpUeHpwZjhz?= =?utf-8?B?SEl6Z09BUzVycjZHVFgwVVdMcXU1ZVR6LzV4LzlZcUNwVitVMTFOL0l1TUdi?= =?utf-8?B?ZXJ2cVc3VGZycy9pbjV1VzkrWFN6cmQwV29xRzNMbUpOL3Fhd3lyODk3S1c2?= =?utf-8?B?anAzTVlISkZrd0RVL0lIcDhReSttRnBCYzZONU93K1daeDB1Z1E4SDhMd2hS?= =?utf-8?B?U2ZDV09UTTh3elo0MWFLc3BUNVlYVW9IR29FNU83bVZEcngrQ1JQclhNQktW?= =?utf-8?B?amRyQTBwZkU3UzNHeXMxeDBnZG9DTUFURWwwTlJCWDh5WmxKd0JXNjdLT0Fl?= =?utf-8?B?ZU51UWVzNXd2ZUxrQ0E5Nm15aWFBMHJaQVlTdlRiMTgwYzZlYk9TRkNhM05w?= =?utf-8?B?VGR4SmJPQWxhMmVvREVLRmV6bForZVhhVGdJY1d6Y0hjY1JxYVoydmFjZGpZ?= =?utf-8?B?Zk40TlkyNG5GcWFhZTJkN0lxdjZWSmtLc3Q1Tml2dTczb25jK3FoLzI1NThv?= =?utf-8?B?NlczQWJhdnZFY2FJWWdmODVCOU1nbDEzdlBUNmZLa1NLbEhxUXRhcDBheWZD?= =?utf-8?B?RDR6MkNuQ0hFSTREcndTOXRuN1ZtQzFubmNBOU9aTjlIWlVMMGYyNFp4QVVq?= =?utf-8?B?SzUrZllEbVB2WFlqd1ovdkg0UkdxREhoN0kveWFseDdUcmZ0aHZUakhhUzgz?= =?utf-8?B?cWk3QjdLTUd6dnBxUjhHZ0lhQW9wVTJPMGlHNkNKTTZhVWxpaDdxajlkVXR3?= =?utf-8?B?bmx2YkswZFZZUXZRRThRVjlxZkppR1lpZGRGOHkyY3Axam1uVHZNUG1ubkxm?= =?utf-8?B?NEplQ3YrNVdiTlRpNDRjVEdXeXRrbUNrK25SejJSNFE4MzVRMm8vbDBPT1BT?= =?utf-8?B?WDB5TERYM0NUaVIzUThlSE4welB5NXhQdlBaWFREL1VHdk1acnFUejVZQ2t0?= =?utf-8?B?RnAvQ2VSRlBUc0RITzZZL0l3WWN2Q1AyaXM3WG9KWlFQNUo4V2lncVRUeWpX?= =?utf-8?B?RDkzbDdVZTJqMWl2SlNxMS90cUJIWlU4RGphUDRrcjBzbVZpc3JQY1ZFakhr?= =?utf-8?B?RTN3ZmNmVzBCRnI3SHFoZGc0ekV6YU5TT1JEUEQ0UVh1MFdrTW5TSUkyMXRt?= =?utf-8?B?Um0xV2ZjN1FWcy80ZW9wUXhjU2hldVhMVkl4QnQxU2JFdkh0RnNvS09EQ09s?= =?utf-8?B?TVdndS9ya0JETCs1YWtlS1JJZWwwa0d4VVYzWmtvWUtaSE5oR1B3YW9SYTZ3?= =?utf-8?B?TTRIbkxRSnBVQmd0OGg2My8yemhLWXFJSXkwcUNubGVuYzFDN0RiOVFZaitE?= =?utf-8?B?TUpCRHVXbzVaZEYrRDdPWTJjbUoxUWMralhMdFRtSzI1NWxOTEFPL2FaSFF1?= =?utf-8?B?ZENZTE15TzB5N2htZEIrbkN2TTMzYzAwZFUwR3RTd00weDNicnNXWWdnN3dw?= =?utf-8?Q?jZ0pBplwtC9sZlNTNivBzetmurqKhrPiDWkN2U0?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9c4e224c-d5d2-4b48-ed18-08d96709a10f X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:15:30.5007 (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: rBHZo6Y04hbPPLn/j4Pk0nsYoEM6AEA2uMYOOKTpBkBblZSaeeQ7ZJNKfYevivuoK/KFv3DYv22N6qGfMJCsnA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7188 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629814559678100001 Content-Type: text/plain; charset="utf-8" Both callers only care about the target (level 1) MFN. I also cannot see what we might need higher level MFNs for down the road. And even modern gcc doesn't recognize the optimization potential. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -178,7 +178,7 @@ void __init iommu_dte_add_device_entry(s * page tables. */ static int iommu_pde_from_dfn(struct domain *d, unsigned long dfn, - unsigned long pt_mfn[], bool map) + unsigned long *pt_mfn, bool map) { union amd_iommu_pte *pde, *next_table_vaddr; unsigned long next_table_mfn; @@ -203,7 +203,6 @@ static int iommu_pde_from_dfn(struct dom while ( level > 1 ) { unsigned int next_level =3D level - 1; - pt_mfn[level] =3D next_table_mfn; =20 next_table_vaddr =3D map_domain_page(_mfn(next_table_mfn)); pde =3D &next_table_vaddr[pfn_to_pde_idx(dfn, level)]; @@ -273,7 +272,7 @@ static int iommu_pde_from_dfn(struct dom } =20 /* mfn of level 1 page table */ - pt_mfn[level] =3D next_table_mfn; + *pt_mfn =3D next_table_mfn; return 0; } =20 @@ -282,9 +281,7 @@ int amd_iommu_map_page(struct domain *d, { struct domain_iommu *hd =3D dom_iommu(d); int rc; - unsigned long pt_mfn[7]; - - memset(pt_mfn, 0, sizeof(pt_mfn)); + unsigned long pt_mfn =3D 0; =20 spin_lock(&hd->arch.mapping_lock); =20 @@ -310,7 +307,7 @@ int amd_iommu_map_page(struct domain *d, return rc; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), pt_mfn, true) || (pt_mfn[1] =3D= =3D 0) ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), &pt_mfn, true) || !pt_mfn ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_DEBUG("Invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", @@ -320,7 +317,7 @@ int amd_iommu_map_page(struct domain *d, } =20 /* Install 4k mapping */ - *flush_flags |=3D set_iommu_ptes_present(pt_mfn[1], dfn_x(dfn), mfn_x(= mfn), + *flush_flags |=3D set_iommu_ptes_present(pt_mfn, dfn_x(dfn), mfn_x(mfn= ), 1, 1, (flags & IOMMUF_writable), (flags & IOMMUF_readable)); =20 @@ -332,11 +329,9 @@ int amd_iommu_map_page(struct domain *d, int amd_iommu_unmap_page(struct domain *d, dfn_t dfn, unsigned int *flush_flags) { - unsigned long pt_mfn[7]; + unsigned long pt_mfn =3D 0; struct domain_iommu *hd =3D dom_iommu(d); =20 - memset(pt_mfn, 0, sizeof(pt_mfn)); - spin_lock(&hd->arch.mapping_lock); =20 if ( !hd->arch.amd.root_table ) @@ -345,7 +340,7 @@ int amd_iommu_unmap_page(struct domain * return 0; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), pt_mfn, false) ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), &pt_mfn, false) ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_DEBUG("Invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", @@ -354,10 +349,10 @@ int amd_iommu_unmap_page(struct domain * return -EFAULT; } =20 - if ( pt_mfn[1] ) + if ( pt_mfn ) { /* Mark PTE as 'page not present'. */ - *flush_flags |=3D clear_iommu_pte_present(pt_mfn[1], dfn_x(dfn)); + *flush_flags |=3D clear_iommu_pte_present(pt_mfn, dfn_x(dfn)); } =20 spin_unlock(&hd->arch.mapping_lock); From nobody Sun May 5 23:17:00 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=1629814581; cv=pass; d=zohomail.com; s=zohoarc; b=Ddn1LGrRARSFEU7rxDmdRD+fcQ695pr+vhqMDG/7ZyCDlIPweKblSJkhXp7jBCWPmEAXvLZ7omMZUWxd6Qol76jdkzfnmTJq9MpYAA1bVvbxn8NBNItHoMcuXe1PreZSNF+Rc72RhnkamMMrib/PMflgiWlYzaLVrKGV3zzxh8I= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629814581; 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=j5i+Xnl5ocLbmeDxy8GlyB1nTmg2e1vt95em7FKfvfs=; b=Q2P+TbOuxoTa9osMTwdE/0VYErLOD8gqqD3RTCLBGwdQfyGZVOUoTioa9KOVfS8+FMbtsIw3wVi4EolfR4eCggBRoBn1zKk9n16DATWNngMn7ZrZptnB/kkMnKqO0542pO54lA7rGmd7wv0wtF7KoyFbJFVN05byVDT/4DfB8J8= 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 1629814581448556.947557242557; Tue, 24 Aug 2021 07:16:21 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171417.312807 (Exim 4.92) (envelope-from ) id 1mIXDe-0002s7-IO; Tue, 24 Aug 2021 14:16:02 +0000 Received: by outflank-mailman (output) from mailman id 171417.312807; Tue, 24 Aug 2021 14:16:02 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXDe-0002ry-F2; Tue, 24 Aug 2021 14:16:02 +0000 Received: by outflank-mailman (input) for mailman id 171417; Tue, 24 Aug 2021 14:16:01 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXDd-0002ol-Bq for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:16:01 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 55a338e6-b629-472c-9e85-e3944542c13a; Tue, 24 Aug 2021 14:15:58 +0000 (UTC) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04lp2058.outbound.protection.outlook.com [104.47.14.58]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-34-WIh_3XwKMUepgyPs6bFQ6A-1; Tue, 24 Aug 2021 16:15:56 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB7188.eurprd04.prod.outlook.com (2603:10a6:208:192::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:15:55 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:15:55 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM0PR06CA0132.eurprd06.prod.outlook.com (2603:10a6:208:ab::37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.17 via Frontend Transport; Tue, 24 Aug 2021 14:15:55 +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: 55a338e6-b629-472c-9e85-e3944542c13a DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629814557; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=j5i+Xnl5ocLbmeDxy8GlyB1nTmg2e1vt95em7FKfvfs=; b=nn5UBsMjHeIWLiriMPclUHn6glzurQ8YBRb1phAZE0RTfdPpRUP1gjJOkFdGx7exNXFGzC CCDY0Q9u0hr1vQfPM7JTpB/DeLy7XBJ3LkzDJHPDMePl39nriCy21NktE7vxwM6g3JCwrB 4TRYir7Mz/9WvVWcyOQFBL9uqgEJNyU= X-MC-Unique: WIh_3XwKMUepgyPs6bFQ6A-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=P4oKhU8YN+K/AFtcC0YF54W32f1HPlBmn+bJCkOqpNbQF7QKiwvroLUzHAaUZbre8IOx9bKAjyYaraUrw6usTkMoWlAuGp1u7o7H69ALjFhNn6maGKwq05JP94QJYD/QC8YSwydypIusyRjHHDN92dAY9G4MdLNm/dMsnAfZver+BsEwgU81SrPqor/+cnYE3taLIAwoRJsJ1QTRI3HRHg2KkZjjVxCS/63JReVfI6zPrM+5t/Nc+ofd8LMYBMlTvkeWMX6stYeBVPNAJ/q3IYRZhNTnZwi0M89/Lvc+BeVJV71/ye6kEtqJaFq+H0RaoPDlBE5nbgHbfuLxMe9PKw== 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-SenderADCheck; bh=j5i+Xnl5ocLbmeDxy8GlyB1nTmg2e1vt95em7FKfvfs=; b=SblCSGFfpsk+maAcSJ2LXSdgE1h/wdMKKITjVD1Ug06IPqIaK7G8/r/8mXOPsm6Jb408Fb8+a8ZTdflbl05yrUnvMx4RSmACFx06n/Jst1GFySkhDVZej3+bh6DEON7Dd0OlLhpJb0wECtW5cArx/Ia1AaFZqNNQNKkDeRMxQAfQNIzxCAbETHbvrzJYYGGCL4TbXwL42WVkqnfFkTvssPDeCBGHe5n6ldXIy3okSY/TGyFL0izfgw8k6Hdz3x5wyjJJ1rI7rRJtvtMV1ajxB/sz6dyWvlZoYN4/tHUcNC76prBtvPCJcZGYEKZbhmvkfnzOkmhoDNLgbQwYBxbZiw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 02/17] AMD/IOMMU: have callers specify the target level for page table walks From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant References: Message-ID: <003e5e7b-1570-3d88-33a6-6785c0f566f1@suse.com> Date: Tue, 24 Aug 2021 16:15:53 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR06CA0132.eurprd06.prod.outlook.com (2603:10a6:208:ab::37) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b97fd0c1-b945-4d72-c851-08d96709b004 X-MS-TrafficTypeDiagnostic: AM0PR04MB7188: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IlsGdpzZTXr9IoOmWC/9I/pEoE7iSe1JHn8XA4dY3D/ho1lTHcReSEz+xk4rOpSR2zua64FyiqEhhofwgO8ruuaXkMQgRBzdMuyq6cYJDB66Lm0rLgLAW5PbxNueGR7KE/xt9ZCS5wD6hjLCbyd33d5XkRJ8kp+fHSiPgdx8bYAQvwih4JWudQx7FeAdvFfYxcqJRr74XaDOzOVlJ/mZS0G4txc6bEe8OU8OspAL9U7bewrw5KfdeckdNWoqLpLPgAVvEA1R9s+v6ohgbapDFaI4JL9DY52ffSXGyy4RUDjsBitsjak6o4o7krFRN4Vd1U62fenfKqowS4dECljTvztl5BkkuYOldTpqDktyJI2UZMNnZJlHRkrDD1aUqL5R6z7ZyueEi1xsYsVIsYAX4jQmCzAWWbltOrSQoaCGaAft7PTIjvnUTUUOtAlqmYHiujVji2MHL7AX1ovmheszKnBXse2OzXKAeec4kVFZ8tvqkvvYdoClHOC95nIRlmVRwVObwFfkzzJwFMzh5no6YuW4A69urPLjr4XhtsRpJ2iHaH9jafSjd+ZxELOEs1tQBxfMAneEBPohUwKV7fqG3l93kF+Amc/yD3AD7wBrLd3QwEvELUcxYKH5EhvAc2vD0z/0VDNbS7ww9xqJnzI+djTpHk5rsn19KhTePHYz6UoPkX2ji9HEjXkQubICe9ZyXdHVvZEAhyBhzvnMQJMq75yQH4ELLZdCjH4jWoaJad0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(366004)(39860400002)(376002)(346002)(6486002)(956004)(316002)(2616005)(26005)(186003)(2906002)(66476007)(66556008)(66946007)(8676002)(54906003)(4326008)(16576012)(8936002)(86362001)(36756003)(38100700002)(478600001)(31696002)(83380400001)(6916009)(31686004)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a3NMUnhhbSt6QnUweFBrdWRxWWRKRGRhbkZzWTdwWDRHZnpINFFzSVN5K2c1?= =?utf-8?B?TWN1NDFUaXBHcHFQRW4zdHo5bmxEa2l1SHJyTEgxbXhza2VXb3czMXlHL0xk?= =?utf-8?B?UW53Yi9BVElaMUY5UzdWY0l2bEtFZE5IVmt1VTVDVWtlQ0dQSHQyNjdPeHNQ?= =?utf-8?B?WGxGQzBMelNja2hIeE4wNldmS2g5NkhlNHBPaFJrMmU0YXFhMkh4dnVrVjRm?= =?utf-8?B?SDg5TVRVTElqdUovRitlUW8vNU1ZMzMrR0ptMTc3RWhaVUNhek9ZOFEveCtI?= =?utf-8?B?OXZ0UDA5SHZUSk1UNmtqNkFIOFZQcU5ueHlldXVENmk2ZXE4VTFnMkFRNTdY?= =?utf-8?B?cTR6cnE4cFRpeXZtMnVYRnBCSzBIblRUZS9PcHozOUdnUFBWVkNFL3QwTlJR?= =?utf-8?B?QXJaNHdxYkdqa3FUajZLZkpBMERNYTFDNi9mVUF0U1BwNzg5QlpoY0huVUNB?= =?utf-8?B?N1orL3VTaWF2Y1NUTlhkUk80eDVkbGlrOU1yRWhVMHhrSFRZcWs2SEYwTjNk?= =?utf-8?B?S2ZHa2V3cjFuOWVFbWY0a0RmNTNiNHV4S0o3aUEvWG1EcU8xZlp1QnQyK0xt?= =?utf-8?B?dmVrUzRZTVN5SkNIWmFQcW9qVzIvUExadGx0dnpHZGswaGRqR3dqTWkrYlBN?= =?utf-8?B?cjl4d1E2S3NxS1ZacEZmVkk3QVdBSSt3VGVka3l6bVpLb1FjejY0S01SZVpS?= =?utf-8?B?S010WE9ZMFZHd0M0TmNkZVhpNDdxZDA3VnBmQ3BydTlLcVZ6WmRZKy9OcXYw?= =?utf-8?B?Wmd2T3ZBUjloUWUycXoralRYclB0Y2xkY2MrekpEOU1jaTZjZm1hRFZDSDdM?= =?utf-8?B?WnZGNmcrRzlIVGdFeE54S0ltbGU5OGdnK0R5RXZBRGZ0WTBobm1lckJ6czF4?= =?utf-8?B?WjNuTDg2QTRLN1lSUHBpU0hFUWtXb1FYR3lTeWxCK2RGWXQzZXFGb0cwVGdG?= =?utf-8?B?VUhjUnNOY0FBOW9aZ2cyNjhSUDVyaTNWOEt0U1hTQk1RYXhIcFc4VVY2cktk?= =?utf-8?B?L0F5M3pMUkwvU0MxdFJRdURnRDhzWmZqalpGZ2FPRWgzLzg4RkJsNHJkMHo0?= =?utf-8?B?T2kwK2VNRUk0Z25ndEYvaGxkMENWUHJVVy9HSVJXRmxxMldFNWVRb0t3YTJJ?= =?utf-8?B?L3RvbzVTY0gzOVEwanRDUEs5U1hvcDFlM0g5clRLakNzVHZtMk9NZy9yQmhx?= =?utf-8?B?R3BDdGpzTndNekl3UDYxNVcyMG8zVkwxVVhoWW4wdGNVd1V4MldQSFQ3V2NP?= =?utf-8?B?SmtGRGI0RHZGdGhiQUFMdUZEWW8xSGdEMnllbHJwQXQrM20wTkI5R2xNb0Jq?= =?utf-8?B?UHdSZnpuSC8xRXRBTU5WREc2YklxaWFWMlZlWXU0WnNnbG80NzJJS2RqWGRv?= =?utf-8?B?eUhKa1A0cmlMbVlHMVhuODJnTzY3RWVjdm9KQXJJVzlFK1Bqc2lPYXVpWmMr?= =?utf-8?B?QjhlMVM3L0p3MkkvU2hBbnFRcHVuMjhxblhCeUdYRTRNaU5DQUFhb01ISWtj?= =?utf-8?B?VDZ1QTc1dG1Pc0tJTm9oaG4vWmwyTlhFYXNrRGx5ZnNEU3FTOGI4MnRTSEVv?= =?utf-8?B?SEhGR2o1Rmg2T2pqazBUYVh1bzJEZ2pKZisrWnUyZUlaRGdLT3ozRS92anZy?= =?utf-8?B?aTRSY1o4NWFPRmM0Ty83WVlLUlBvSG9uSkw5RERJbE5FOVNFMDBMbWxIUVZU?= =?utf-8?B?RDg2UTNEcVZFVkprTERoMk96dk02OHV0M20yT2ZiUFNSUmhQRUJDdG1GUWdn?= =?utf-8?Q?6XYna6K0MJTDDJwDYaXu62CqEQSGf4O7dFoRN7V?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b97fd0c1-b945-4d72-c851-08d96709b004 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:15:55.6265 (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: EoorOTeX69bpLIE5rw+D/sxn7A7imvB0nygUlgxU0NqOTBKwQQVhSo8wfIe5XRjioKWCbp2Xfe5zOpMY5KIDhA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7188 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629814583062100001 Content-Type: text/plain; charset="utf-8" In order to be able to insert/remove super-pages we need to allow callers of the walking function to specify at which point to stop the walk. (For now at least gcc will instantiate just a variant of the function with the parameter eliminated, so effectively no change to generated code as far as the parameter addition goes.) Instead of merely adjusting a BUG_ON() condition, convert it into an error return - there's no reason to crash the entire host in that case. Signed-off-by: Jan Beulich --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -178,7 +178,8 @@ void __init iommu_dte_add_device_entry(s * page tables. */ static int iommu_pde_from_dfn(struct domain *d, unsigned long dfn, - unsigned long *pt_mfn, bool map) + unsigned int target, unsigned long *pt_mfn, + bool map) { union amd_iommu_pte *pde, *next_table_vaddr; unsigned long next_table_mfn; @@ -189,7 +190,8 @@ static int iommu_pde_from_dfn(struct dom table =3D hd->arch.amd.root_table; level =3D hd->arch.amd.paging_mode; =20 - BUG_ON( table =3D=3D NULL || level < 1 || level > 6 ); + if ( !table || target < 1 || level < target || level > 6 ) + return 1; =20 /* * A frame number past what the current page tables can represent can't @@ -200,7 +202,7 @@ static int iommu_pde_from_dfn(struct dom =20 next_table_mfn =3D mfn_x(page_to_mfn(table)); =20 - while ( level > 1 ) + while ( level > target ) { unsigned int next_level =3D level - 1; =20 @@ -307,7 +309,7 @@ int amd_iommu_map_page(struct domain *d, return rc; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), &pt_mfn, true) || !pt_mfn ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, true) || !pt_mfn ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_DEBUG("Invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", @@ -340,7 +342,7 @@ int amd_iommu_unmap_page(struct domain * return 0; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), &pt_mfn, false) ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, false) ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_DEBUG("Invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", From nobody Sun May 5 23:17:00 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=1629814606; cv=pass; d=zohomail.com; s=zohoarc; b=EOvwLeF+fXPv1pr0d3jJnb5Dou2s4WsMxcjnfEgXhKE2TNLIS+xzKbNKpFu6TYlp8GLNUqUuOSyj44J32Llx1+wToEFdxaDspA/xb53HDE/g+y0OyB3kXILckEcs+YInyM3Y2pm2SIthko4wBxYdAzKpnE2lK/1nMVkL/fimjB4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629814606; 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=jE6X4tBiI86szEDdGQbXZYpX3yiiduQVWr9v8ha7zxo=; b=leS2vN1dQ4MgEBoDUKmAkJhVpS7QyABKKbLhQD8wm5AjfLNPtfi0IIna7UGQ+UHRFz/roMvGTnhsRAyVRYjI9rz9WemxAN40XjX9Rbcj4nt4ZgfOAnnlxm1JVuOcotX+842nRzHKI69Whl3iSix4l8ysHla3kOscdA+Wk5Snn4I= 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 1629814606764269.48812492345576; Tue, 24 Aug 2021 07:16:46 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171421.312818 (Exim 4.92) (envelope-from ) id 1mIXE1-0003R9-SG; Tue, 24 Aug 2021 14:16:25 +0000 Received: by outflank-mailman (output) from mailman id 171421.312818; Tue, 24 Aug 2021 14:16: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 1mIXE1-0003R2-Ob; Tue, 24 Aug 2021 14:16:25 +0000 Received: by outflank-mailman (input) for mailman id 171421; Tue, 24 Aug 2021 14:16:24 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXE0-0003Qo-LX for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:16:24 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 2d222b30-54b0-4351-afcc-447939b4e4fe; Tue, 24 Aug 2021 14:16:23 +0000 (UTC) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04lp2050.outbound.protection.outlook.com [104.47.14.50]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-21-HHpSoQOjP_SQCCWCZRXA7g-1; Tue, 24 Aug 2021 16:16:21 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB7188.eurprd04.prod.outlook.com (2603:10a6:208:192::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:16:20 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:16:20 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM3PR03CA0057.eurprd03.prod.outlook.com (2603:10a6:207:5::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19 via Frontend Transport; Tue, 24 Aug 2021 14:16:19 +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: 2d222b30-54b0-4351-afcc-447939b4e4fe DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629814582; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jE6X4tBiI86szEDdGQbXZYpX3yiiduQVWr9v8ha7zxo=; b=QiU6uiOKVWG9JwUdCImFh/JtXQwKZSssSC+YkiPcngsTyRywV0JpCuQRTpYI025qAOu4EG WUNhfdw7GL9GBGri7fjeaaxg3CSOmySnGaWl3aehfyzPWqD9LTjC9MeG3+ihAZxhGS7EV+ 7hWfLP7PDQ9oIjbNcFXsk/lXSJaZ0Q4= X-MC-Unique: HHpSoQOjP_SQCCWCZRXA7g-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CFcyOwVgAY5PQikJpg4h5ADkmnO6KcIZv3i7dfQHC9eXnTqV6rVmaz7X0akoouw+l+A/LYGzABKoUUE4uDjJtpDF2lRzPHeMqv3qzVCE1fK8T4gdnEJbPYL5FanTAHpvotzFH/xSVEYDkVp9wJpwWdhTEAbb8u2Sp34VriyvfpZNBuU5kp9A2g+HRLTzV4STll8UanLou87dnK6VKF5U0BKAMqn4mFFFnGozIxFJgOUq9DSAqUXSJKi7FMqQY854vWn1Yc2Hy7Nh6vOF+ZD6V8CRa99CU+evd9XLeUJqFJOHUYU9TbU/dGx+1s0ou69OQHiV44L4Y9n4oUIiNRhfmA== 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-SenderADCheck; bh=jE6X4tBiI86szEDdGQbXZYpX3yiiduQVWr9v8ha7zxo=; b=ALlWWgHM37sR6XgkSXaI4xly+0+KFE7HaKfSI6rKXbYWS9mzX7RPEDTNmay6yRfQNkL4zVKqpd3s7XAqAD0vbcxpHQy3yadiVUVpEh1FtCL7tKL9WRuw8yIZ/+C2RMYvs1QGNrY3GCxz+rogQwc1QVnHpbEo9usLHW4meHua5QwpsgpoPp7qEErktVU9dmhyTdo/iuRc6rHTGN0VmIhOYGzXdEWggDCAEIS9AVSAyo7KJse6SKpMyAJxgkGdcmG7eUTninJS1nEyqmxkpimIA+jSRB6QsxYvUZZyyN6Q/KJddx5+tu+i9XKNahTJN/Lcgn/oqBxiHDcrPkYtHezR9Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 03/17] VT-d: have callers specify the target level for page table walks From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , Kevin Tian References: Message-ID: Date: Tue, 24 Aug 2021 16:16:18 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM3PR03CA0057.eurprd03.prod.outlook.com (2603:10a6:207:5::15) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7469afe5-8d23-41da-9f87-08d96709beb5 X-MS-TrafficTypeDiagnostic: AM0PR04MB7188: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: k3hBUx/DohoesUUGqMZK5tzMf0BE0IKk21cogajMNNRBbejDmOdzsO7hPA8zHT5FNUGasVQqP9WqKn3RAYw6AW0/BOLkw8bTd2HYyNpoBO2OM85rVSi8Lcyc+ZshNe5o2o1MVdm458DelCLRSCuxhKK5j3iZy2V9hlgxFviwOhUwnrfE6xhbm2kXyu/VSACnZmEv/TuLRcAwtH+rYtSvvgWE4mYbIatEccn8/GxP2N9wM/zI5q48RQRVBHVvwv2SSMIsZAfP7IVmDvIwRR1FCZXma7sqpPRyk3lHqbg4tNuLenKTh+I3PtQaBeOy+NI+w09UMHkfxC9ZQ9VmSQ7v/gI+j+iOUacVP/hIbD8SJ5hYYXb0d3UnykQy67M7ENSHiIvSb69mPd9bjIObGsplOW8hJ7FTio7AYpfkHGaZBfwC/swzdmnhFfopphKoYYtibJC6UAZx/JKGjGzWflfm32lZyG45OpuGR8vphi2Kvy8naJ64jNt66v4VZYq/00nVLTS/DU3AtGqNYu3jHlha8wre1ViXhF06pWSyPcRU9Qqg8jik2IDv/cDXtfK9o9TUQEi+55maWIZhenxqv5dDIVe/BJuzUyel8bJburfFNBT/VHM7TEqcFk9HnA8Vlho1RdyhGlNTVAQjW2AAicPIKZVybcpOk0OWtEF206fa7OPZc9K2gotOvfVV5zRN1jOxCUW+Wd11gxsEJEpIhsYaFEf3Ck+dVn9GzxMet8tJ+Cw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(136003)(396003)(366004)(39860400002)(376002)(346002)(6486002)(956004)(316002)(2616005)(26005)(186003)(2906002)(66476007)(66556008)(66946007)(8676002)(54906003)(4326008)(16576012)(8936002)(86362001)(36756003)(38100700002)(478600001)(31696002)(83380400001)(6916009)(31686004)(5660300002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WkNaMDU3bjduWkN1U3hYWTNiaUxRQ1VXYkZHYTBmdVdhem10TkpibklzSjQv?= =?utf-8?B?OW90bWlpTmszZzZYZ2JpbFZtUzhscG9MWTVkK1BWZGFTZUJWMEJLbmxQcFk4?= =?utf-8?B?YXpCdWpoU1ZoS1JwdXB6enZjRHNoaC9sMVN2clhCOThMdmVqalVjUElwN1o2?= =?utf-8?B?VjMzbUtqeW1IUk5QbXhOMGtIUjZLeFA4eUs3OFEzZENrcFl1Q1VYWnhmamlE?= =?utf-8?B?V0k4dzlDOWE3SG9HSEJFZ056VGd6NWppVi9JZnZTMVRJdEoveGQ2bUxnVUxp?= =?utf-8?B?am5zY2IxajQrbHZIQWo5YzRRMkZKZFBhWmh6bWxHbTkreG9MOFBQQU9qNTVt?= =?utf-8?B?dlBhK2lDWWo4THdjN3BTanV0SkdQdWo2cmJFWUJiUGM5ZEFyS0NFL2Z0QUMy?= =?utf-8?B?TXZFbEJUT2p6Skk3THlYR3VzdXNrWFdoanJ1RjNTQndUeFdnU2RJUmV3b2k0?= =?utf-8?B?b21Xc29xUnlHYkp4bVhncHBrNU9TZ3NXSFFKYlJFak1uNzFJL3hac2RhVmRG?= =?utf-8?B?S2dsYlBlWVNmcjFZeUtlRktid1FjUGlGU3R4SytaTUJWTkdUN1g0UXJpeXVz?= =?utf-8?B?ZU80dGVCODJ1d3p0MERGbmM3b1ovMmxrZ08raEFzZ0ZWbkNYL0liQzlzOWZG?= =?utf-8?B?V2x6ZEFpUEV2VnhLWXF5SVlVU0pCVWdIcW50ckZUckZ5QndQaUJCcEE2Z2lC?= =?utf-8?B?TEdzQ29LczYweVNqZzUrZVoycWJzTTZvTXpIOTlBWDV3L3F4ZklwMElNS0JO?= =?utf-8?B?TVRpTXpET1Z3d0dlRG90K3hzREcxdmE1YjNMRUVDTTNXc2l0UWtUbHhkVytt?= =?utf-8?B?ZmZGY3RCUGtBNE9VWWkya2tqaDRMVG1QY1NrMTFNMExaWkJiakNBUUM0VHdt?= =?utf-8?B?aFk5TTc2a2VLV0VhVWRlNXd2M3M4eGIycFkxdzNpOGI0U0ZSSGpiRkZOVDhz?= =?utf-8?B?clZwVjhkN3BIU0JQOUV4SWxzU21OTjNhS2NHc29JbkpiVHg2WnVVb1k3WXpN?= =?utf-8?B?SFpHQ2dwaUJzcVB3bWZjd0lVU1RUOWJLdzlSaDRNYVEwSEFhTFpNclhNQitV?= =?utf-8?B?SVpvaGUzNFNrbGIxNWtPbkZ5dUFNZlB5ZjJQcmkzY1VxeXJiRUpBVGJSZ3RS?= =?utf-8?B?MmY5Y0FqNG90MFMxdVBRQkVZR280VDZvcExXVklrSmhRVHo0ZXJ0U0ZuaGJN?= =?utf-8?B?MWJDUmoxekVPeC9mSTJoTGU3NjJiUFBjRHNNUGJPd3ZoTUZFQkxCWU9la3JZ?= =?utf-8?B?UUxEOWdzSm1rTTd0VkU1TzhHOXpGYVN2WDVQNmRjRVk3eSs5N044QU0raFJT?= =?utf-8?B?bk9FaEFTQ0RqT2Y0ZUE3ZytwYm9KVFZVNTR0RHdEbmQ2akIrbDRPbFRRa3hr?= =?utf-8?B?SGZOR01mc3NkYXBYMnQwc2NOVW1Yc3QxVVpKNVI2cktzZVVuUW9WQldqb2pu?= =?utf-8?B?M3JFaFpFN09PTkhtdXplUDVWVHBFQWFINWVlbWJ3dVRVN2dBT2lJOThzVjdp?= =?utf-8?B?WTZCT0N5MSs3M29yR08yMUdMMWovTEVEWS96aVBWVDAvazRkOXVHeVQ5WkxG?= =?utf-8?B?U0VGRHArNzRGTDkrYXpLcDB6ckxucG9YYy95bEwvVDFjMHVQRTgxWHE1UTho?= =?utf-8?B?azRGZTRLcExVTDlVVlFnbUx6MWluL2IwMzR5VDZlV1J1NDdKbWY0d21GVm1I?= =?utf-8?B?UUNETlZ4a2RmK2FudGZKYkUyWlFRRWZlTFBOV3ppUHhmTkFtd3JRci90Wnpv?= =?utf-8?Q?R1TmiKQnoMhWepJW8Al5ZWtcxq0wqF5dEE0Z9UJ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7469afe5-8d23-41da-9f87-08d96709beb5 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:16:20.2815 (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: EjEXMSqmu+RyPLGZZhA+jd7u8snjBz/deKVHu2YYTwFGmu+khnBqFiLfiX8jqdku2liQpETcx7B+Mr+QE9lFfg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB7188 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629814607264100001 Content-Type: text/plain; charset="utf-8" In order to be able to insert/remove super-pages we need to allow callers of the walking function to specify at which point to stop the walk. For intel_iommu_lookup_page() integrate the last level access into the main walking function. dma_pte_clear_one() gets only partly adjusted for now: Error handling and order parameter get put in place, but the order parameter remains ignored (just like intel_iommu_map_page()'s order part of the flags). Signed-off-by: Jan Beulich --- I have to admit that I don't understand why domain_pgd_maddr() wants to populate all page table levels for DFN 0. I was actually wondering whether it wouldn't make sense to integrate dma_pte_clear_one() into its only caller intel_iommu_unmap_page(), for better symmetry with intel_iommu_map_page(). --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -270,63 +270,116 @@ static u64 bus_to_context_maddr(struct v return maddr; } =20 -static u64 addr_to_dma_page_maddr(struct domain *domain, u64 addr, int all= oc) +/* + * This function walks (and if requested allocates) page tables to the + * designated target level. It returns + * - 0 when a non-present entry was encountered and no allocation was + * requested, + * - a small positive value (the level, i.e. below PAGE_SIZE) upon allocat= ion + * failure, + * - for target > 0 the address of the page table holding the leaf PTE for + * the requested address, + * - for target =3D=3D 0 the full PTE. + */ +static uint64_t addr_to_dma_page_maddr(struct domain *domain, daddr_t addr, + unsigned int target, + unsigned int *flush_flags, bool all= oc) { struct domain_iommu *hd =3D dom_iommu(domain); int addr_width =3D agaw_to_width(hd->arch.vtd.agaw); struct dma_pte *parent, *pte =3D NULL; - int level =3D agaw_to_level(hd->arch.vtd.agaw); - int offset; + unsigned int level =3D agaw_to_level(hd->arch.vtd.agaw), offset; u64 pte_maddr =3D 0; =20 addr &=3D (((u64)1) << addr_width) - 1; ASSERT(spin_is_locked(&hd->arch.mapping_lock)); + ASSERT(target || !alloc); + if ( !hd->arch.vtd.pgd_maddr ) { struct page_info *pg; =20 - if ( !alloc || !(pg =3D iommu_alloc_pgtable(domain)) ) + if ( !alloc ) + goto out; + + pte_maddr =3D level; + if ( !(pg =3D iommu_alloc_pgtable(domain)) ) goto out; =20 hd->arch.vtd.pgd_maddr =3D page_to_maddr(pg); } =20 - parent =3D (struct dma_pte *)map_vtd_domain_page(hd->arch.vtd.pgd_madd= r); - while ( level > 1 ) + pte_maddr =3D hd->arch.vtd.pgd_maddr; + parent =3D map_vtd_domain_page(pte_maddr); + while ( level > target ) { offset =3D address_level_offset(addr, level); pte =3D &parent[offset]; =20 pte_maddr =3D dma_pte_addr(*pte); - if ( !pte_maddr ) + if ( !dma_pte_present(*pte) || (level > 1 && dma_pte_superpage(*pt= e)) ) { struct page_info *pg; + /* + * Higher level tables always set r/w, last level page table + * controls read/write. + */ + struct dma_pte new_pte =3D { DMA_PTE_PROT }; =20 if ( !alloc ) - break; + { + pte_maddr =3D 0; + if ( !dma_pte_present(*pte) ) + break; + + /* + * When the leaf entry was requested, pass back the full P= TE, + * with the address adjusted to account for the residual of + * the walk. + */ + pte_maddr =3D pte->val + + (addr & ((1UL << level_to_offset_bits(level)) - 1) & + PAGE_MASK); + if ( !target ) + break; + } =20 + pte_maddr =3D level - 1; pg =3D iommu_alloc_pgtable(domain); if ( !pg ) break; =20 pte_maddr =3D page_to_maddr(pg); - dma_set_pte_addr(*pte, pte_maddr); + dma_set_pte_addr(new_pte, pte_maddr); =20 - /* - * high level table always sets r/w, last level - * page table control read/write - */ - dma_set_pte_readable(*pte); - dma_set_pte_writable(*pte); + if ( dma_pte_present(*pte) ) + { + struct dma_pte *split =3D map_vtd_domain_page(pte_maddr); + unsigned long inc =3D 1UL << level_to_offset_bits(level - = 1); + + split[0].val =3D pte->val; + if ( inc =3D=3D PAGE_SIZE ) + split[0].val &=3D ~DMA_PTE_SP; + + for ( offset =3D 1; offset < PTE_NUM; ++offset ) + split[offset].val =3D split[offset - 1].val + inc; + + iommu_sync_cache(split, PAGE_SIZE); + unmap_vtd_domain_page(split); + + if ( flush_flags ) + *flush_flags |=3D IOMMU_FLUSHF_modified; + } + + write_atomic(&pte->val, new_pte.val); iommu_sync_cache(pte, sizeof(struct dma_pte)); } =20 - if ( level =3D=3D 2 ) + if ( --level =3D=3D target ) break; =20 unmap_vtd_domain_page(parent); parent =3D map_vtd_domain_page(pte_maddr); - level--; } =20 unmap_vtd_domain_page(parent); @@ -352,7 +405,7 @@ static uint64_t domain_pgd_maddr(struct if ( !hd->arch.vtd.pgd_maddr ) { /* Ensure we have pagetables allocated down to leaf PTE. */ - addr_to_dma_page_maddr(d, 0, 1); + addr_to_dma_page_maddr(d, 0, 1, NULL, true); =20 if ( !hd->arch.vtd.pgd_maddr ) return 0; @@ -704,8 +757,9 @@ static int __must_check iommu_flush_iotl } =20 /* clear one page's page table */ -static void dma_pte_clear_one(struct domain *domain, uint64_t addr, - unsigned int *flush_flags) +static int dma_pte_clear_one(struct domain *domain, daddr_t addr, + unsigned int order, + unsigned int *flush_flags) { struct domain_iommu *hd =3D dom_iommu(domain); struct dma_pte *page =3D NULL, *pte =3D NULL; @@ -713,11 +767,11 @@ static void dma_pte_clear_one(struct dom =20 spin_lock(&hd->arch.mapping_lock); /* get last level pte */ - pg_maddr =3D addr_to_dma_page_maddr(domain, addr, 0); - if ( pg_maddr =3D=3D 0 ) + pg_maddr =3D addr_to_dma_page_maddr(domain, addr, 1, flush_flags, fals= e); + if ( pg_maddr < PAGE_SIZE ) { spin_unlock(&hd->arch.mapping_lock); - return; + return pg_maddr ? -ENOMEM : 0; } =20 page =3D (struct dma_pte *)map_vtd_domain_page(pg_maddr); @@ -727,7 +781,7 @@ static void dma_pte_clear_one(struct dom { spin_unlock(&hd->arch.mapping_lock); unmap_vtd_domain_page(page); - return; + return 0; } =20 dma_clear_pte(*pte); @@ -737,6 +791,8 @@ static void dma_pte_clear_one(struct dom iommu_sync_cache(pte, sizeof(struct dma_pte)); =20 unmap_vtd_domain_page(page); + + return 0; } =20 static int iommu_set_root_entry(struct vtd_iommu *iommu) @@ -1834,8 +1890,9 @@ static int __must_check intel_iommu_map_ return 0; } =20 - pg_maddr =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), 1); - if ( !pg_maddr ) + pg_maddr =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), 1, flush_fla= gs, + true); + if ( pg_maddr < PAGE_SIZE ) { spin_unlock(&hd->arch.mapping_lock); return -ENOMEM; @@ -1885,17 +1942,14 @@ static int __must_check intel_iommu_unma if ( iommu_hwdom_passthrough && is_hardware_domain(d) ) return 0; =20 - dma_pte_clear_one(d, dfn_to_daddr(dfn), flush_flags); - - return 0; + return dma_pte_clear_one(d, dfn_to_daddr(dfn), order, flush_flags); } =20 static int intel_iommu_lookup_page(struct domain *d, dfn_t dfn, mfn_t *mfn, unsigned int *flags) { struct domain_iommu *hd =3D dom_iommu(d); - struct dma_pte *page, val; - u64 pg_maddr; + uint64_t val; =20 /* * If VT-d shares EPT page table or if the domain is the hardware @@ -1907,25 +1961,16 @@ static int intel_iommu_lookup_page(struc =20 spin_lock(&hd->arch.mapping_lock); =20 - pg_maddr =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), 0); - if ( !pg_maddr ) - { - spin_unlock(&hd->arch.mapping_lock); - return -ENOENT; - } - - page =3D map_vtd_domain_page(pg_maddr); - val =3D page[dfn_x(dfn) & LEVEL_MASK]; + val =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), 0, NULL, false); =20 - unmap_vtd_domain_page(page); spin_unlock(&hd->arch.mapping_lock); =20 - if ( !dma_pte_present(val) ) + if ( val < PAGE_SIZE ) return -ENOENT; =20 - *mfn =3D maddr_to_mfn(dma_pte_addr(val)); - *flags =3D dma_pte_read(val) ? IOMMUF_readable : 0; - *flags |=3D dma_pte_write(val) ? IOMMUF_writable : 0; + *mfn =3D maddr_to_mfn(val); + *flags =3D val & DMA_PTE_READ ? IOMMUF_readable : 0; + *flags |=3D val & DMA_PTE_WRITE ? IOMMUF_writable : 0; =20 return 0; } From nobody Sun May 5 23:17:00 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=1629814683; cv=pass; d=zohomail.com; s=zohoarc; b=PrmGLlHL8g4/sGeGMM5TNELs+/FU+7AXOBW3baw7eAAHqpJPFpIhUwlX08fp56X9iBY3eQNf38JSlerI8VCfP++/GTedlON4/EtXBXC70FDbTVQGW7c3kMYNshhVD9eomD8G4YxnFNvtUI3SrHNw2Sl6GHcM8ZgK8cJ8vbB4CFU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629814683; 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=yzXYKglQ/bpvobkPyhRsuEn/vZoH5xfWeELRjaeoInI=; b=iUPdshVn7u2/my6xPEVEdTp5P/cjy6Ae24lTIyXc7r2g8fntjF6Fcaefhl+GTyFc2tD+C2z+14yFYiLbyHDKJwpO5okLYuJOAFkXMmUVxf+K1G7v/FSN0xZWCOwoIGJ452d/YST2fbd5RpAaP+F9j7Hqw7Q2dme4T3F413SYhuM= 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 1629814683983187.81834222179134; Tue, 24 Aug 2021 07:18:03 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171431.312829 (Exim 4.92) (envelope-from ) id 1mIXFI-0004Gi-Aj; Tue, 24 Aug 2021 14:17:44 +0000 Received: by outflank-mailman (output) from mailman id 171431.312829; Tue, 24 Aug 2021 14:17:44 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXFI-0004Gb-7A; Tue, 24 Aug 2021 14:17:44 +0000 Received: by outflank-mailman (input) for mailman id 171431; Tue, 24 Aug 2021 14:17:43 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXFH-0004GS-G5 for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:17:43 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 2f0bd4b8-3fcd-4e5f-bffe-b175b5416be0; Tue, 24 Aug 2021 14:17:42 +0000 (UTC) Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-ve1eur02lp2059.outbound.protection.outlook.com [104.47.6.59]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-24-MfshqG-DPXO7VbwtrUVzRw-1; Tue, 24 Aug 2021 16:17:40 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB4609.eurprd04.prod.outlook.com (2603:10a6:208:6b::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:17:38 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:17:38 +0000 Received: from [10.156.60.236] (37.24.206.209) by PR2P264CA0045.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101:1::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.17 via Frontend Transport; Tue, 24 Aug 2021 14:17:38 +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: 2f0bd4b8-3fcd-4e5f-bffe-b175b5416be0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629814661; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yzXYKglQ/bpvobkPyhRsuEn/vZoH5xfWeELRjaeoInI=; b=ektAozKg2Lqi3vwaes/IDWZ4femcNzjTbpgALjDL4ZpaKjMVV8fnV5pwjNZauaAWAyJeP0 Kboox2vyNhvOdm3qhv6qSfx/aVpe3yjIZY8eeAbQueylBoUERACW0pXEAmR6a3pybgRbOj jYiPTV/OkYjYEZjoxf3+u94eq0IUqso= X-MC-Unique: MfshqG-DPXO7VbwtrUVzRw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eciHFL/I4HJEetF18JJwbD/fWCtNuMpbAe1AnrKZZSJjKjbCRBlI5/4aLpH54POEpAF6oDDq/9uEQ8hC9rFnva45Gcnq4xAlxw79aIjbiwmd7NwbNq8kH3aWei9hL7h7FQDs/toPdoQFGMgiqrjdRx+A5vI5y1tgQOQTBBH733r7JYJcplwevV56REs3krXz1xcVf6dMsfv7WnzwXYF3Ut5Bf5FIUFWQzESpAxTp51BXtNNuCCvvwp5fp9ed75HZ0890GhEO/ap0gl3t9gpZ41NTLtlioGuVUvoduE5Yc1UMmazvGYTCkJNmVd+ya4bSpQyp1wnBhCrhOlDA697Gmg== 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-SenderADCheck; bh=yzXYKglQ/bpvobkPyhRsuEn/vZoH5xfWeELRjaeoInI=; b=VxmHQDoCt25kiFkLoWX1AP2hZe/m6KOxGHjWbodGsuN3pnJyTuYgkuruRFlV0Aus9d31BMNtjtqp6qPXM6D2UzTW8vT4SjHr1dNJRQanB5IluLDveNIz6nqCK1dMixHCeUNoheju8w1OhFJ/NYo8jINFidYtne8gH/QOmAmsGRueAUxpkj0AA7CRFdE4a+OQqmWmFYne6uMHO9kSOJ4yoV7wn8bcjCBAFfYGJuLiQ1jE3Wr7wOsafQFTi3dG0giHXQLSY4gsbQkRKn2eMp+y44JFm/LiXldyclpJ7hQuQN3D3uYY/UZbzSd04mAtnOl9q7KAKImvJEyWRm4FfQAlxQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 04/17] IOMMU: have vendor code announce supported page sizes From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , Kevin Tian , Stefano Stabellini , Julien Grall , Bertrand Marquis References: Message-ID: <53c5e1b5-b363-d2c0-edbc-f9fae1e6e2c1@suse.com> Date: Tue, 24 Aug 2021 16:17:36 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PR2P264CA0045.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101:1::33) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 29d264da-261b-4c45-4c22-08d96709ed79 X-MS-TrafficTypeDiagnostic: AM0PR04MB4609: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6108; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nW6v5Fgsm5oBEnth2JV8rSYA4iU/GVqt5ztAgs8SNkVtZNiX7QnTsDd87mK7nKwsfcqitO2C/8Zn+36LJz0HbxTefBo74H00iZHHLhOIqDS2vhpdbNpZZg1+zhAMjBucUzucDLiYOryL9MW818ZyeGjhzvbdvODzRYGOaLRltbwrtJhOpE3zotJXlJwrnbShrZGPf4Nm84Ny2pLkUouamb3wi+5TuJtrM3+RphlcBX8GIvVoGyWGsyik6FakFbJ+ymSt934Da1sRve4u1jYeoKhk/nKNTaYTWb32irkKdwG3ee9bZR2qjkyJPfW6hWFPQHBrjaKFTvm1a6LBW1YHQyNo9BueAlUQ5qRbIWE0+VKlC+5mkgZycMjFwgU2Ryy5oOJBEWDvQG5MIb2RpantSjiuiDwmtaAeZPnBHQ4lHta4dhguXmvBB7C6zMSidbkZteUmJtfFrNwnHpAzjHkt1XiE1AbKy8QoCT4vPWaJScD5KHf8BfUuplIaKpejiOHixWAsqZFsBz2HerKs460z73QCs+fVNUU/1HK5V09/fKrvfNqyad0FJQCsK+zj4COCweb+RWxYXqTk4GYYaN+KK1dVjQBAqT2hn1uPrrclwjxlbh4DjePpyVO8MG6vjBJo2Yn6MTqn/qaMC+cmtAyaALSEXvwAxwgl79gFjwtPiMEEGP9SCw3uvywPZEG1JuA2UA/Pheo7zu2YnV937ON1IVoIRIE8Sz02GBX3ojojLts= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(39860400002)(346002)(136003)(376002)(396003)(2616005)(186003)(83380400001)(16576012)(6486002)(956004)(38100700002)(66946007)(6916009)(54906003)(26005)(478600001)(66476007)(66556008)(5660300002)(316002)(8676002)(86362001)(4326008)(36756003)(31686004)(2906002)(31696002)(8936002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RVNDNkl4cWs0blpxcTZ2SEh4TEpKZ1FoOUNRVDhrS2hTUER5Z2RDL0FDbng5?= =?utf-8?B?Ty9pZEZRczdGV055aDY3eWdNSXg5ZDJLVlZhbVQ5TUZEZDZwRkR6YWozQWtU?= =?utf-8?B?RFU5eE4rNndrV0RiRFg4WHp1TENIdHUyYjlvaStmbXk0WWhualNnSmoxOGhN?= =?utf-8?B?MW1QSjJicXlRcmtzVFlvWmh5KzB3S20vL1FHSHpBdzVmTUQ0U1BBdVhiNjgr?= =?utf-8?B?WHE4bG9BTnVxNnJlQzRNSklZQUQxV05ORlR5K2prUHI1amduZmpNNzdIWW1C?= =?utf-8?B?ZjFGSkt2VWdFZWd1c0lmczk2bndjTzRnSkl5SWtSUkF1TFEyL1dOcEFOV01U?= =?utf-8?B?aThOWHM3emVYMEh5YXdUazlobGRLMmJ2YmVlbk4wYTlXZHVhM20vQ3pNeG5v?= =?utf-8?B?NThibDF3OGdQT1pKOEswV2VrM0c4Z0JMc0VwVnBFbkRQNE50dE9va0FtUHpl?= =?utf-8?B?QytpRWJPcUxOOWliRWtScDBWVGVHbTVCdmVyb2VvZ09lRldZZ3hCWkRtcTll?= =?utf-8?B?SjdaZ3UyemxJM2VaeEdMKzEzRG5jWjZnRUJLUDB2bkw4YXJYS3p1YkFrSVFH?= =?utf-8?B?eGNWR0JtMHo5Nkc5QW9NTEJZRm53YXkxQUhvaUNsNVA3Ri9sZkQwaWdtdlg0?= =?utf-8?B?cHNrdjFUdTlJUzR5RHNqSnFBL0tCUjFkOElXQWt0NkVWdVRZZTUrVjc4cUJy?= =?utf-8?B?ODBaQ25peWpFRGZpT1dyR0xrZVQ5L0YrdlpmWE96bGwvdDQ4MXFvSERUdVBU?= =?utf-8?B?S1M1SmY4a0puZVhlNStBb2R6T05sVWdzK0oyYmRoell3OXpXek1YSDNiS3VH?= =?utf-8?B?TGc3MXRSM1Vzenk3cmpKOG93bjlHYW9DcUFXL3R3SlZPS0o4cFMvTXF0YW1R?= =?utf-8?B?WTBHakZjUFZuZjFBbDFiZlhFbDlZU0FvWHEyc2dmNlpleWU1UnNsMlc2ck1Z?= =?utf-8?B?NXpQRk9PcnI2NVRQQWh0anVDQlVRbnBla3d3SGFPdEJVb3pzakdsMzlwWE5G?= =?utf-8?B?SitoS3FmR0J2NUQ2TExISzV5b2xFVlgyQVQyRWdUR3BzTkNZTnZubkV6VUZI?= =?utf-8?B?VzhMK1pSMjhZL0FmMytBY3Znc2RwNjdUQSt3aSsyME1IME91VEFKei9GZ1Q5?= =?utf-8?B?OUpJZjdwcVU5RlRKcEk1cjJ1V1FES2xEWlAzVk5vVEtBcWgraEIvbm1uRzhi?= =?utf-8?B?V0J5c1p4bkJIUnpjYmEvQVZSS0NJUGRjWmt0NHIwVEx2Y0ZkZ2ZTR29QNWtC?= =?utf-8?B?VWljK0QxeFh2MUI0Qm8ydnp0d0doMnhBR0IyUWFjb0FVdk05T3NLeDJraTdL?= =?utf-8?B?ZXBIWlEzTHp5Zk1uRTA0VTRwWEdIbUV3cERzWk9GRjdoY1J2cG84ZXVyRmUv?= =?utf-8?B?WC9qVG9NMktwWDNJUXE1dEhoTDBCcCthNEMrL2dOYzhZbmhhek10MEVjNXVJ?= =?utf-8?B?NWJNQ080TnJsNTVhN0VQVkd1dHlkM2lzcTJLTTFaWE43RTBSVk1Qb254b1Fi?= =?utf-8?B?Z1N3cUhUVjBXYWQxSmV1eTdiR3dHdHpLYlZtNVVuSWdXZFhWaW1EUU1DckVM?= =?utf-8?B?Q0svZ3V0bUNUSi9IbXFQSUJQcHlWdkY5QU5BUk9LcGhmaDQ3ZWlxRFVoeUND?= =?utf-8?B?WExjelNqK0w3TS9nbGNvZ1ZMQ0FRTW9vSEVBcFhBb2pOUDFiNUw4dFFEODd1?= =?utf-8?B?OVhnMTRXQ2VjNFFLNTlpTVl4YUVHMm9oTUl5NXhjVmg1dUdwZ1kxYkhsZ0xV?= =?utf-8?Q?aIdcCkVicP3Htna5rCRBdNve676xYuq1wnbWagp?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 29d264da-261b-4c45-4c22-08d96709ed79 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:17:38.7301 (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: uCQMlMXPDj0FZBTT+GF6oDoufAOXR9scX6wMEEiVgIYtJ/rBgwbdAkn7Q3RQ5tJNek+xc3yoglLwydwVr5w8Ow== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB4609 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629814686174100001 Content-Type: text/plain; charset="utf-8" Generic code will use this information to determine what order values can legitimately be passed to the ->{,un}map_page() hooks. For now all ops structures simply get to announce 4k mappings (as base page size), and there is (and always has been) an assumption that this matches the CPU's MMU base page size (eventually we will want to permit IOMMUs with a base page size smaller than the CPU MMU's). Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -583,6 +583,7 @@ static void amd_dump_page_tables(struct } =20 static const struct iommu_ops __initconstrel _iommu_ops =3D { + .page_sizes =3D PAGE_SIZE_4K, .init =3D amd_iommu_domain_init, .hwdom_init =3D amd_iommu_hwdom_init, .quarantine_init =3D amd_iommu_quarantine_init, --- a/xen/drivers/passthrough/arm/ipmmu-vmsa.c +++ b/xen/drivers/passthrough/arm/ipmmu-vmsa.c @@ -1298,6 +1298,7 @@ static void ipmmu_iommu_domain_teardown( =20 static const struct iommu_ops ipmmu_iommu_ops =3D { + .page_sizes =3D PAGE_SIZE_4K, .init =3D ipmmu_iommu_domain_init, .hwdom_init =3D ipmmu_iommu_hwdom_init, .teardown =3D ipmmu_iommu_domain_teardown, --- a/xen/drivers/passthrough/arm/smmu.c +++ b/xen/drivers/passthrough/arm/smmu.c @@ -2873,6 +2873,7 @@ static void arm_smmu_iommu_domain_teardo } =20 static const struct iommu_ops arm_smmu_iommu_ops =3D { + .page_sizes =3D PAGE_SIZE_4K, .init =3D arm_smmu_iommu_domain_init, .hwdom_init =3D arm_smmu_iommu_hwdom_init, .add_device =3D arm_smmu_dt_add_device_generic, --- a/xen/drivers/passthrough/arm/smmu-v3.c +++ b/xen/drivers/passthrough/arm/smmu-v3.c @@ -3426,7 +3426,8 @@ static void arm_smmu_iommu_xen_domain_te } =20 static const struct iommu_ops arm_smmu_iommu_ops =3D { - .init =3D arm_smmu_iommu_xen_domain_init, + .page_sizes =3D PAGE_SIZE_4K, + .init =3D arm_smmu_iommu_xen_domain_init, .hwdom_init =3D arm_smmu_iommu_hwdom_init, .teardown =3D arm_smmu_iommu_xen_domain_teardown, .iotlb_flush =3D arm_smmu_iotlb_flush, --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -470,7 +470,17 @@ int __init iommu_setup(void) =20 if ( iommu_enable ) { + const struct iommu_ops *ops =3D NULL; + rc =3D iommu_hardware_setup(); + if ( !rc ) + ops =3D iommu_get_ops(); + if ( ops && (ops->page_sizes & -ops->page_sizes) !=3D PAGE_SIZE ) + { + printk(XENLOG_ERR "IOMMU: page size mask %lx unsupported\n", + ops->page_sizes); + rc =3D ops->page_sizes ? -EPERM : -ENODATA; + } iommu_enabled =3D (rc =3D=3D 0); } =20 --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2875,6 +2875,7 @@ static int __init intel_iommu_quarantine } =20 static struct iommu_ops __initdata vtd_ops =3D { + .page_sizes =3D PAGE_SIZE_4K, .init =3D intel_iommu_domain_init, .hwdom_init =3D intel_iommu_hwdom_init, .quarantine_init =3D intel_iommu_quarantine_init, --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -231,6 +231,7 @@ struct page_info; typedef int iommu_grdm_t(xen_pfn_t start, xen_ulong_t nr, u32 id, void *ct= xt); =20 struct iommu_ops { + unsigned long page_sizes; int (*init)(struct domain *d); void (*hwdom_init)(struct domain *d); int (*quarantine_init)(struct domain *d); From nobody Sun May 5 23:17:00 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=1629814765; cv=pass; d=zohomail.com; s=zohoarc; b=GM6TomTBVjs52P5e96m0d95/fdeUktIgdQfUwbRTnGxV0O7+vK1m9spU95TCbVYhFnyNLrHalr0l8A5FPpsXFPdQ82VG19n7udivpZXU3vXdQ+n2kE6s8sETx1UaI79aIz2ABLs5iDVcEj8w566x7CHb0YZY68OGrMmIXIjhMwc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629814765; 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=Lsv7bcHuwsgLa+AOHdsxg4x/Cg6Wk9VbC4oDVeLVkeQ=; b=cxZxxylOwoKmrQ8ZtHrfAajyJjsPzJqY9bLEIqN+F7H7LlujYWjdVjtWAB5SS/o+qiDmjKqvKrk1X+kjLA3TDpCa8syGupCowAH+pXXhM5PUYMy2g/52h+YyRlQrKtUpj7+HXi5g/TJUmxDE93vTxpz59X6bJ7ksy4fGfCm5m0g= 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 1629814765419480.9832160497825; Tue, 24 Aug 2021 07:19:25 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171438.312840 (Exim 4.92) (envelope-from ) id 1mIXGY-0004uB-Mq; Tue, 24 Aug 2021 14:19:02 +0000 Received: by outflank-mailman (output) from mailman id 171438.312840; Tue, 24 Aug 2021 14:19:02 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXGY-0004u4-Jd; Tue, 24 Aug 2021 14:19:02 +0000 Received: by outflank-mailman (input) for mailman id 171438; Tue, 24 Aug 2021 14:19:01 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXGX-0004tw-C2 for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:19:01 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id a670ee93-2638-4763-9e94-0fe9f7096532; Tue, 24 Aug 2021 14:19:00 +0000 (UTC) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05lp2176.outbound.protection.outlook.com [104.47.17.176]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-32-tJX3ceXFO3ebB_9P-Y5zPQ-1; Tue, 24 Aug 2021 16:18:57 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB4609.eurprd04.prod.outlook.com (2603:10a6:208:6b::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:18:56 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:18:56 +0000 Received: from [10.156.60.236] (37.24.206.209) by FR3P281CA0035.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.6 via Frontend Transport; Tue, 24 Aug 2021 14:18:56 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: a670ee93-2638-4763-9e94-0fe9f7096532 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629814739; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Lsv7bcHuwsgLa+AOHdsxg4x/Cg6Wk9VbC4oDVeLVkeQ=; b=dIqNvmsL4t282Cfne3hhIvT4+1dC8tLYfak0E1mF9zryugfCw6Bskqn8xlzWYnEKmKzb3b 3Dl3iqjS1j9IbwaSgqLP3M3FJfgmERVEqN1wKPCoVmzIUL8hZlb1Q5vA6/M5MSX4lg6bSa /9oVH43YZTIr66GjMrzWxKBuiJ4E0S0= X-MC-Unique: tJX3ceXFO3ebB_9P-Y5zPQ-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cV6HxKRgJIP8JA65ZWlOmJvEhWxS6g/olBgT5lbQ9TiJMTWQHHnAFM//8TByGYpLbK8H32yuEdesKvY57p5mt+8t25ZwEi73kHhX7CS0R+JqkAI69Xxzl8WP7+84CwZzcTloIgq0UxgG/CSevv1M+rOUOMqFkdvCmTadBEbuEkm4ad2O9HrKVC80L+/hvOiRZSgezPXw9Ny7j6M1vcrAsW3+sEqc2EqMwG1Dn2/l8gA0F9okQjL+B862LEZLWpEyo4DzCsrXcQU5AmR1+PqCHd1f+7e/aTfKm/u0HxYtgy0mUdaDI8xq3blCgZ0QQlg5GgUc1m5WTBL+Yor5hqIktg== 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-SenderADCheck; bh=Lsv7bcHuwsgLa+AOHdsxg4x/Cg6Wk9VbC4oDVeLVkeQ=; b=i4p0DN0yYaY2xGFcnXq+YREN5gRhLMI4U+WXk5ejxnvJY0Ec7ObMdfSzLkVKezhA5mtTcNLMpqOmz3Na201950ueCfYcfAoieJ+0C3eTRLp1r1BHYx2r61R24ZX3j9C+TY6En74VBweAeF76b8xxz9+QHZiO3GiUg3DPIIIRpkxCixb0vcLUduU8dxXwMqKRqj/WvwnT7mjy0h0FH2LHouaCmOJKv9YfDtGc3s9OCOLBQZF+UukMp1bqONI3ft3xnaC5JLsek5ZEx7KQ9wUbmSe0HTfwxUVz7iA79BAeBbYH2DVdOhxGznnhcwAvOvcmJ0bHNg0T/5WrEzDbnedepg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 05/17] IOMMU: add order parameter to ->{,un}map_page() hooks From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , Kevin Tian , Stefano Stabellini , Julien Grall References: Message-ID: <3141710b-2369-6e12-2ba2-4c01888f7ee1@suse.com> Date: Tue, 24 Aug 2021 16:18:54 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0035.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::8) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3ce6636b-c2fb-43a3-04c5-08d9670a1bc6 X-MS-TrafficTypeDiagnostic: AM0PR04MB4609: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6790; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: D60fcsz/3KF5BVVxcJQQjDDSSs/xOsgptjhmX6KMrpAaAO8l8aG3LQ5kxRhczqfCINg9D2lbK1JBWkw2J5fG2LTdVBVLlApsOaOOi4yh6+jcygIViaz6Lvy2rE/DrN54Bq0oErDWWc5aaij2TaXEtqzRHMTyXjd0fDnnmqApBi7VOnUqiiHNW2AJZcqxTeIgD+IvcA4jRNY2GBvGlSb17efH3tvbBV7IVIZv4b3m/pX4CKE343cuhP4c6rOO/Mw8c4CA+VyOOL2jdFkg6qWMS0+H4zEIEcqJMZi+jC+CmA2y0DYy+RmT60XsVKpK2J/0irIKGtCmg5kR8HLHSuotCgojG2GeE0SGeUd+jN8K9VB02CmHIMLhdo9CMIqR4lGUMU6yPLiToI8s/VRe0uP65GGBfcjDtBGNtF0okZy+A4zsTIyIkfsmoNajZP4PycrnC9vD33K+4cHzKYOjuO9tUgvk/kQ5rMTFZdOBmP5LY3F0fQSn/Bh4OBtOJufBzKDleiAcK5cQKnVusUMzQSaypdgOC4r0tk/4rIVAYhNyExz6rcHjLGS/kU958g8HL76lww0MKO9E25GgGz8/XW5PjK6DlAYtDMpRjKHUUZxjUUFqEM9XIkLeIYVHVXk/H0QIA3vZLsl29DsNjxoZEbPV1RgqeNpYvVLUyQMDMMPHmlmj2wPPuFWOPV4g+HSNORHjOpjVadJSG8XqO6aPRE9WAOb03DPlxyb9OZKB7qPMwWc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(39860400002)(346002)(136003)(376002)(396003)(2616005)(186003)(83380400001)(16576012)(6486002)(956004)(38100700002)(66946007)(6916009)(54906003)(26005)(478600001)(66476007)(66556008)(5660300002)(316002)(8676002)(86362001)(4326008)(36756003)(31686004)(2906002)(31696002)(8936002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RlhQc2NmL2d2NTIydzJLeHlvcGRnUjMrbGw1OXhIdHlTVGlGVUtiSm1HZUZX?= =?utf-8?B?eVZpQzdFSkxGZVNZVTBoQnc1eU9XT3kwTWFFOFBmVVg1aUNIWktQL0tqZnU5?= =?utf-8?B?TzZGVGtTK0JkMGNWei81L2dzV1k5YStKRlRGalYyaDlVeXZzcHBzWFBpMTV3?= =?utf-8?B?d0RFbm9sLzhRS3FLN1ZUZ3I1ejY4S2d1amRnaUhQUlFSL0NJMkJ5cTNIek5v?= =?utf-8?B?WjFuOWtLcTgrTXYwSFArUG9CaUVWWEpibFRwTnlGZzhtVmV1dWJXSXZ2Y1Nu?= =?utf-8?B?SzB5aEVvVWhmc1cyOVN5R1Y2N1NZTWFHNTJId2g2S3doWlJIeXNwdWxCNTg4?= =?utf-8?B?SmR1OFVZNHRDZFhBTE9LLy8za3pFWUZLcWNGTGpxb3J6Y2Z4WS9yTW9QYUVw?= =?utf-8?B?VDhFOW1kU1F6eURwZUJhNHhGdUp6SmNxZ2gxWW1hTU1UWCtVc0VkQXpFL0Zk?= =?utf-8?B?b01KZlMyNGRvbzVBeEtjMnAyV2tDRWp6SHYraWRTdGROZnJWNTlLdXM4ZTZL?= =?utf-8?B?RUQ0S1NkcUJuWGZWWTZUcndCamJwT0p2MVk2eFJoa0xISDc3YUZHZ3RhcXVV?= =?utf-8?B?YStGRUQrVzJzaXhFTVloWTF1MDltZjJKd2tLWTlaNnJXTzVIcC9ES0w1T29X?= =?utf-8?B?M3J6dWd3QTVjVkdGejdOaVE3amZNb1pVOEdNS1paRFpQMzE5T0ZtY05uQ1BS?= =?utf-8?B?SjdLZGltV1JjNjdvdzVNVUg5YXp5Z1RLRkZOd2R2NHVrS3RVeUxDWGhGUnhs?= =?utf-8?B?SGJXTEdISzZiVW9EWEczNmFhYUpFVnpvY3pMcmhZNEk1T1BuUTVUaWlwSjFT?= =?utf-8?B?NDhSVVNGbzh0aE01VmRaTi9zc0E1MG1rNEV1cXR2a21WK29zcVpMcnZ5RTJ0?= =?utf-8?B?VDM2Mk9nZUIwQ3hKMGdNUEhheVYxd2R0eGNTbERpUzVPb0dPQmNub3hhNGF1?= =?utf-8?B?cHZpR3NGUEZ2RTZ1cU5VOGhlRVhacUpqQVBzWmdod0NqZEJTK3VXaFRiS3Fk?= =?utf-8?B?Y1FMU1YrYlNxYUxYakpWRXVpblVMZ2cwOTRDL0FMblg0UitsOG5uMHNkN05l?= =?utf-8?B?ZHpFT2M4R21PVUp6aDFvcS8xSkdaNXdLR3JxY3AwTjJRNmk5bktUcVo3NXkv?= =?utf-8?B?Yjhsd29Fc3BIYjhsVWZYWlBDR2VtOGdWYVRHNWJyZkQzemptTGUwczBQMGlC?= =?utf-8?B?QjV3THR1WlpxUnVGc3RMVHpNRHNIR0RGc2RvL0pnYmpBM3dtSjYyRXlYRVMv?= =?utf-8?B?SnUrQzhtL0JvbE9CbE5nZzRuOTVWdU41VnhBMTZQN3JGSDFvK2JvL0x0U3Nr?= =?utf-8?B?UzRLQngva2E0S3hxT2ZlcldLSU9kK1NOd0pzQ0NTendFS1RCdzlLV2NiemxH?= =?utf-8?B?TGpCd2VwTW1PdktaUHoyY241OVpLNUNubjZXOWRDRFUwMkJraFJKSjduNVVC?= =?utf-8?B?MGFXNmRHYy9iejNkQ2NoL0ZIdy9iNXhYNlVYYU1qQTloUldBZ1VnNHo3M2tu?= =?utf-8?B?TDd2bzdNakJ0QnNVN0x6M3BjcHNqcEl1UG1JUTZJT0dlZk41U3RoL2VYSCtS?= =?utf-8?B?dHdvNm5OSFA3L2tKU0VsTlJoL1ZteVRLcDVtQndrWHkyL3g4UjFlWFBVNkRi?= =?utf-8?B?TUkzdGFKTnBCYThGby9YV3FmRWhZd3ZLM2hLWlkxVEpxV1N0Q3FhTUtkMmVj?= =?utf-8?B?TmJXMEY0aXowUUt3WGpTY1Iwc0hTTGRrZXJIaS9KR3Fkd253K0FmZjh0U1I0?= =?utf-8?Q?sxImfYg9Sfi28bueLCK11mQWOFgeesMWVTPI0E5?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ce6636b-c2fb-43a3-04c5-08d9670a1bc6 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:18:56.4151 (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: fvwuNiH65JhsT5F4nbFQHkQsd/o1Ts3t9ooisWVTljaxKOHKeXnsbnDbHsiD3Ehu2dHRTcZbpQ/O3bCq7CXCBw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB4609 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629814766230100001 Content-Type: text/plain; charset="utf-8" Or really, in the case of ->map_page(), accommodate it in th existing "flags" parameter. All call sites will pass 0 for now. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- a/xen/drivers/passthrough/amd/iommu.h +++ b/xen/drivers/passthrough/amd/iommu.h @@ -225,6 +225,7 @@ int __must_check amd_iommu_map_page(stru mfn_t mfn, unsigned int flags, unsigned int *flush_flags); int __must_check amd_iommu_unmap_page(struct domain *d, dfn_t dfn, + unsigned int order, unsigned int *flush_flags); int __must_check amd_iommu_alloc_root(struct domain *d); int amd_iommu_reserve_domain_unity_map(struct domain *domain, --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -328,7 +328,7 @@ int amd_iommu_map_page(struct domain *d, return 0; } =20 -int amd_iommu_unmap_page(struct domain *d, dfn_t dfn, +int amd_iommu_unmap_page(struct domain *d, dfn_t dfn, unsigned int order, unsigned int *flush_flags) { unsigned long pt_mfn =3D 0; --- a/xen/drivers/passthrough/arm/iommu_helpers.c +++ b/xen/drivers/passthrough/arm/iommu_helpers.c @@ -57,11 +57,13 @@ int __must_check arm_iommu_map_page(stru * The function guest_physmap_add_entry replaces the current mapping * if there is already one... */ - return guest_physmap_add_entry(d, _gfn(dfn_x(dfn)), _mfn(dfn_x(dfn)), = 0, t); + return guest_physmap_add_entry(d, _gfn(dfn_x(dfn)), _mfn(dfn_x(dfn)), + IOMMUF_order(flags), t); } =20 /* Should only be used if P2M Table is shared between the CPU and the IOMM= U. */ int __must_check arm_iommu_unmap_page(struct domain *d, dfn_t dfn, + unsigned int order, unsigned int *flush_flags) { /* @@ -71,7 +73,8 @@ int __must_check arm_iommu_unmap_page(st if ( !is_domain_direct_mapped(d) ) return -EINVAL; =20 - return guest_physmap_remove_page(d, _gfn(dfn_x(dfn)), _mfn(dfn_x(dfn))= , 0); + return guest_physmap_remove_page(d, _gfn(dfn_x(dfn)), _mfn(dfn_x(dfn)), + order); } =20 /* --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -271,6 +271,8 @@ int iommu_map(struct domain *d, dfn_t df if ( !is_iommu_enabled(d) ) return 0; =20 + ASSERT(!IOMMUF_order(flags)); + for ( i =3D 0; i < page_count; i++ ) { rc =3D iommu_call(hd->platform_ops, map_page, d, dfn_add(dfn, i), @@ -288,7 +290,7 @@ int iommu_map(struct domain *d, dfn_t df while ( i-- ) /* if statement to satisfy __must_check */ if ( iommu_call(hd->platform_ops, unmap_page, d, dfn_add(dfn, = i), - flush_flags) ) + 0, flush_flags) ) continue; =20 if ( !is_hardware_domain(d) ) @@ -333,7 +335,7 @@ int iommu_unmap(struct domain *d, dfn_t for ( i =3D 0; i < page_count; i++ ) { int err =3D iommu_call(hd->platform_ops, unmap_page, d, dfn_add(df= n, i), - flush_flags); + 0, flush_flags); =20 if ( likely(!err) ) continue; --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -1932,6 +1932,7 @@ static int __must_check intel_iommu_map_ } =20 static int __must_check intel_iommu_unmap_page(struct domain *d, dfn_t dfn, + unsigned int order, unsigned int *flush_flags) { /* Do nothing if VT-d shares EPT page table */ --- a/xen/include/asm-arm/iommu.h +++ b/xen/include/asm-arm/iommu.h @@ -31,6 +31,7 @@ int __must_check arm_iommu_map_page(stru unsigned int flags, unsigned int *flush_flags); int __must_check arm_iommu_unmap_page(struct domain *d, dfn_t dfn, + unsigned int order, unsigned int *flush_flags); =20 #endif /* __ARCH_ARM_IOMMU_H__ */ --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -127,9 +127,10 @@ void arch_iommu_hwdom_init(struct domain * The following flags are passed to map operations and passed by lookup * operations. */ -#define _IOMMUF_readable 0 +#define IOMMUF_order(n) ((n) & 0x3f) +#define _IOMMUF_readable 6 #define IOMMUF_readable (1u<<_IOMMUF_readable) -#define _IOMMUF_writable 1 +#define _IOMMUF_writable 7 #define IOMMUF_writable (1u<<_IOMMUF_writable) =20 /* @@ -255,6 +256,7 @@ struct iommu_ops { unsigned int flags, unsigned int *flush_flags); int __must_check (*unmap_page)(struct domain *d, dfn_t dfn, + unsigned int order, unsigned int *flush_flags); int __must_check (*lookup_page)(struct domain *d, dfn_t dfn, mfn_t *mf= n, unsigned int *flags); From nobody Sun May 5 23:17:00 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=1629814807; cv=pass; d=zohomail.com; s=zohoarc; b=LJiAZgfFt72Q7VRazS3hjoQp4CdkTd1ANRzh3Rym4IP1/+dZZ+SioHNvxEtpOrVtejtSaM0g++X8RvVp9Jqi2LDvMJVeS+wM6eD28gM2r2GfgFl55GuBPeUkYAcVP571Kwq6iUjtTRwcNAquL+dMHQbL+2hNIPlhpJpV+lbivtE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629814807; 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=s/xqY7vvGGkXpN8hylBtpj3jGQh5qHksSw0RnRhvYDs=; b=XVlWNT56kx3r291qKh26QhdxkRv6NGlw2rGVcGILxFcvlNFu9v/qZ883UtIUgIPgdGq+Hg4sdM6VnH532fArW5RZLYkS6DKwVhSxGbLttUEfIw9AINKB7i83UQanJhDFfetEeX1ecUfURWXdouNoRaPSHEBPtyT6c7vFamaHpbE= 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 1629814807740480.2003869824466; Tue, 24 Aug 2021 07:20:07 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171451.312865 (Exim 4.92) (envelope-from ) id 1mIXHE-00066k-Hr; Tue, 24 Aug 2021 14:19:44 +0000 Received: by outflank-mailman (output) from mailman id 171451.312865; Tue, 24 Aug 2021 14:19:44 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXHE-00066d-DD; Tue, 24 Aug 2021 14:19:44 +0000 Received: by outflank-mailman (input) for mailman id 171451; Tue, 24 Aug 2021 14:19:42 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXHC-000611-HC for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:19:42 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 5224aaa6-04e6-11ec-a8dc-12813bfff9fa; Tue, 24 Aug 2021 14:19:41 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-db5eur03lp2059.outbound.protection.outlook.com [104.47.10.59]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-15-A46ko_VeOXqQgrIpz0l45A-1; Tue, 24 Aug 2021 16:19:39 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB6161.eurprd04.prod.outlook.com (2603:10a6:208:148::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:19:37 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:19:37 +0000 Received: from [10.156.60.236] (37.24.206.209) by FR3P281CA0034.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.6 via Frontend Transport; Tue, 24 Aug 2021 14:19:37 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 5224aaa6-04e6-11ec-a8dc-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629814780; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=s/xqY7vvGGkXpN8hylBtpj3jGQh5qHksSw0RnRhvYDs=; b=JSjBy3lBJ7NcZy3sfwd1koim16KeZqhxBbGHR51LMAzdcpyqQTSD67h2Xl1487C5ipKOuh Mx15WkDAbNEgFNSnNeUi6aD0zT+Fkpedp5R9cYckA9+NyMaw/xqpc0JcoLXyOxT+G9hzt5 r3hWQALNeHqp4R+EkoSHZoD5oIkaPlQ= X-MC-Unique: A46ko_VeOXqQgrIpz0l45A-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fCSLzVtCej7hfsl5YYy/lgNvP/CeYU+HhKrNytburNelZRGnW/Q5UZvpQimYUOqCF6pQx4SQbdHFdqTXZUP/yhUDxt4UvMOilp4qJyn9p5dLk6a4i51VKdUr45lQE3iCqa6GKgvl8BDZ/j8FNC5DD4Dsu8bGye2kvsxC8mTP5EipJ4YQzUN97BlY5dhceSCsmEveArpRMgB6+0oRt7JBk9vJJM6a5yZnkgP/uf4LiBJPlk1/iCVmkbum6xDPvykipoDodJ0/3uv6ECzF5Kp5vxYoVdcezisVG1rEQ16I1nyr7sSHYG4/81/ZQ7jFgcjtEolmefWwgZ+biH+0ouXhUw== 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-SenderADCheck; bh=s/xqY7vvGGkXpN8hylBtpj3jGQh5qHksSw0RnRhvYDs=; b=oTMd2otgCIxsNNtute4yvKQTCtSmSvxwJklAgY4tblKMwZkG6JGBiwNMgs7XVVY0SbH9yasQDX4h0nV89i6ql3Uv4BL95yHCk+5S0eAvPk0JAa/ftvyRpHk2N2fjeWU8B3G1TmlIVHNVplsZZAnCMBVh4uv5UPfLdEyYN2PJHQ/v3CW1gn21LSVSUhN57PNS5qIDMDU1rI2rXqF1V5hR0f4F9ggYjPwi8H3hi9bBj+2tjKuCHjxG3W/4DyDWKNxZEwPlz3Ka86VRZPe8eBry1PhIthxfNAtnrmQLll24F3e2iI5CbfWhQ0wfgB6DPfyTBY1aXPMt2vzbKzmy5wd3wA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 06/17] IOMMU: have iommu_{,un}map() split requests into largest possible chunks From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant References: Message-ID: Date: Tue, 24 Aug 2021 16:19:36 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0034.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::20) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: acf1a310-e229-4a9a-aa4b-08d9670a346e X-MS-TrafficTypeDiagnostic: AM0PR04MB6161: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1468; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kUvnqAhP/80vFC1Bsq4JNM6oFvb9FoD/sQGCqzuSe/O2/9XnxvTt7DiAcguk3nfP8VKssTytug8swrEU6tAJlHWU/1dHhjI4Qe/5fEPjvgicx+f4kH+n/k0IboGb3mT5M/tV2DK2jcPly/96+v62L79QqWLl4UXV7qcCTrCD7iZRc6gA1cb5iCKpJvlaTGk5oqq+YFxsx4YgV058A7/WPYM5Lkbi7VMYddrjb6+kWDIQM9cwFIGMEPL97HrZeVwZCnunTd80+v6IYabIqsz3Ts2Czmx91uxRjkDn5euZz4gty6IVP8d2qyHLWHwX3DSaQX92fKrelFPLZOMIRAwA1zGrz7BDd673X0m2pX5C3gC2X2pjJ4yhr4hw5j0jOm4EHChRdUC2+X6wQRQErctZsPcD1b4c9RTcUlR6eHRcL+nGkmC/Pz/tu/sxjg8IuP+Zzs8Y+/zksQRWpFDzQaEV4GljYm1rKjNNqCpHPTYbaU3ruiKClAULE62ylnsZDUHXVwO1znUnfzLTXg8W3ZCJndl+EyOpPkRsCOlH2fPIpGmy8eG0WBUa3TZupG7QdMd+VwJFRZ5Z5eCGGW/CLLhQuaAp5YkYAUDlQh1XO2RVegsSLupLmf00fA62tI87ntV2lum/ly9kVWmsbblXd3A9bqfSv0NjPURHNKISrD7KvEjBG+O2F6V6UIebXY07IuQ4W5YIsAoIj+KFGaDrYU34l3R/MReYSsbpMi0r4jSHjo8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(39860400002)(376002)(136003)(366004)(396003)(5660300002)(66946007)(26005)(478600001)(66476007)(31696002)(8676002)(186003)(31686004)(38100700002)(4326008)(8936002)(2616005)(956004)(66556008)(36756003)(6916009)(83380400001)(16576012)(316002)(54906003)(86362001)(2906002)(6486002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?d1BRaG5qekNFbndCQkdSQWQzSWpyYWlwWUhrUXNob0ljOGFmWXg2OHlrQUtG?= =?utf-8?B?aCtESmxkN0lra0N6T2VXT2FzRXFtNlZqdTJ5TmQzTkhQcTU0Tmk3NFhDbCtm?= =?utf-8?B?N1R3RUVlQ0NLemV0dENOMHZxWFJ0NDZuTWZqZHZjdnhyUGNQYUNTQjI3bGIz?= =?utf-8?B?SFIzR0l5aGErb1JQMmtXbHdRc0dUUmNXSzVXdUI1T2VWeTg4WjZYaldwU3R3?= =?utf-8?B?cmthNWNGVXNZMjJsWDYzZmkzaDY2eXUrRFM4bXh6UlZwSmU5VGNsMHdmeUg5?= =?utf-8?B?Ry9yejJGa1B4U29wUVo0Mk81SDFBemtLWjVkMWlQTmRYSE5sOE1uTXMyb0NS?= =?utf-8?B?SFJSVTFqWmhqZ2dhRzVOOGo4cGhGSGlxNlVLSFoxbjJaanQyZ2RkYXVlS3RJ?= =?utf-8?B?OWJnTTVCdVFMc3hHU3VOYzhVS1hSQ0Q2NHZ4U0tkWisrVWdFUFRqejI5ejBh?= =?utf-8?B?R3R3R0lXUlh1OThVbnQ4bWZpc2V3MjMwbEZxYkNMYUpnWnoxQ1VXK1hONnVE?= =?utf-8?B?aHNVanNNR25yNk1wVWhCMW1CWXdpYUphbUp5V3doYXZ6cDhSalR3VzdHeTFU?= =?utf-8?B?VDJxbFRVOS9VY3VrZ0xFU05xZnpIa2plODhndkEzeHBFU3FIdUFXb0luSUh1?= =?utf-8?B?VzlqcVZzc3RGSzVvT042WFpITnhGRGNFdlZRci9aWnY3Vy8vclZ0VHVlNE5B?= =?utf-8?B?SFlMNFIvaEtITGd4M2hBemZGTGp6YXZpV09MVlVnZllQQ1ZSY005MFY3YURy?= =?utf-8?B?ZTErNUNSYyt3Y1JpeEFmS1l3MmFaWDZnMmxwai9ZakNqWXdUMlRmTDQ1T3pS?= =?utf-8?B?NmV5aXZwc1hLdm95SHNsbnRIRVZ5MmU5emNqTUptREVkaG95TTU3T01qcG5x?= =?utf-8?B?QXJYOS9LOTUwY0JPUk5Kb1I0bUlPZjlTWjJBN2cvcWErazdDWjd3d2pMZFZJ?= =?utf-8?B?NDVMbzBvS0hlWFk3UGQvMGxKUkFXcFNoa1V6TzluOUxZa3hoenNIRGJVUjFh?= =?utf-8?B?eWdiQmJjVWxDWWpNR0ZsSGV5SG1NTVROMUMzUGhIenVtWExJZGo0aUNXWElU?= =?utf-8?B?QktDQVQ2MGMwSjQ1TGk2d0ZKUG5sMVpqTmpKSk4xSkhXcVJZSDlUYlhhYWZi?= =?utf-8?B?OU9vVlJNRlRNUzRoS0M4c0ptQ01sQzJJbVBoelN6OFFwRG9BY3lEUWo1aWlp?= =?utf-8?B?Ulppd1ZUeXlEMGNyNmk3SCsrSXJ5QlhCWm8yNmErMTBlMnFsMlZuQXpaRVZ4?= =?utf-8?B?M1pnTHZwUU8vdmkzNW04eTJDZTM4TkRpbDYySGNTRDVpL0loNlgzRTNydjla?= =?utf-8?B?ay9PLzFSNUtYemxIb3lzUlFjdjRpRzllUkNNcjZFRmUvNitzL1hIOUZwWmlx?= =?utf-8?B?ZUR0c09uNEUySGN5dUE4NDdReURTMnlHR0R6RjFyTXhHQ3RNZmVBTXY1dnFI?= =?utf-8?B?VTlJMU93c1R3V1RqVjcrUkd1VSt2d3BObnpaNlMzWWRiUEpVSVpCMnY4dXNt?= =?utf-8?B?MHlKQ0UwZ0NCSEF1c1hmd1BUVDZ3S0FtRmFwMS9xWUVOeUVxaTVQc2VvWFhk?= =?utf-8?B?dksvb3k1VU8yOUdHNlN2ek84UTR3aGNGRTg5Vy80ZitVeVQ2YUlDMDArb1hv?= =?utf-8?B?cDY0bFZibDcyNGhFMEFEbk5kdXJzcDJBZ09WY3BadzZnV0wwRmZsOURZRlJq?= =?utf-8?B?MEFEeTE4WTZSM3EvbHhsUWdvK2V4TGhlTHB6cmJmWEhxczRQZXd2RHJLV09D?= =?utf-8?Q?0M44fAdaEUj7+t5T5x3IisjsgefhTmXJZeNQ4jl?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: acf1a310-e229-4a9a-aa4b-08d9670a346e X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:19:37.7566 (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: xHzcKnMmKf1+Fy2uoNY3XtUrUtWt5DeDJlHmad4S037dq4+CHpxPxxlMq0HKcxzQITUkVSVdFLaDBR2D4pzusg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB6161 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629814808184100001 Content-Type: text/plain; charset="utf-8" Introduce a helper function to determine the largest possible mapping that allows covering a request (or the next part of it that is left to be processed). In order to not add yet more recurring dfn_add() / mfn_add() to the two callers of the new helper, also introduce local variables holding the values presently operated on. Signed-off-by: Jan Beulich --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -260,12 +260,38 @@ void iommu_domain_destroy(struct domain arch_iommu_domain_destroy(d); } =20 -int iommu_map(struct domain *d, dfn_t dfn, mfn_t mfn, +static unsigned int mapping_order(const struct domain_iommu *hd, + dfn_t dfn, mfn_t mfn, unsigned long nr) +{ + unsigned long res =3D dfn_x(dfn) | mfn_x(mfn); + unsigned long sizes =3D hd->platform_ops->page_sizes; + unsigned int bit =3D find_first_set_bit(sizes), order =3D 0; + + ASSERT(bit =3D=3D PAGE_SHIFT); + + while ( (sizes =3D (sizes >> bit) & ~1) ) + { + unsigned long mask; + + bit =3D find_first_set_bit(sizes); + mask =3D (1UL << bit) - 1; + if ( nr <=3D mask || (res & mask) ) + break; + order +=3D bit; + nr >>=3D bit; + res >>=3D bit; + } + + return order; +} + +int iommu_map(struct domain *d, dfn_t dfn0, mfn_t mfn0, unsigned long page_count, unsigned int flags, unsigned int *flush_flags) { const struct domain_iommu *hd =3D dom_iommu(d); unsigned long i; + unsigned int order; int rc =3D 0; =20 if ( !is_iommu_enabled(d) ) @@ -273,10 +299,16 @@ int iommu_map(struct domain *d, dfn_t df =20 ASSERT(!IOMMUF_order(flags)); =20 - for ( i =3D 0; i < page_count; i++ ) + for ( i =3D 0; i < page_count; i +=3D 1UL << order ) { - rc =3D iommu_call(hd->platform_ops, map_page, d, dfn_add(dfn, i), - mfn_add(mfn, i), flags, flush_flags); + dfn_t dfn =3D dfn_add(dfn0, i); + mfn_t mfn =3D mfn_add(mfn0, i); + unsigned long j; + + order =3D mapping_order(hd, dfn, mfn, page_count - i); + + rc =3D iommu_call(hd->platform_ops, map_page, d, dfn, mfn, + flags | IOMMUF_order(order), flush_flags); =20 if ( likely(!rc) ) continue; @@ -284,14 +316,18 @@ int iommu_map(struct domain *d, dfn_t df if ( !d->is_shutting_down && printk_ratelimit() ) printk(XENLOG_ERR "d%d: IOMMU mapping dfn %"PRI_dfn" to mfn %"PRI_mfn" fa= iled: %d\n", - d->domain_id, dfn_x(dfn_add(dfn, i)), - mfn_x(mfn_add(mfn, i)), rc); + d->domain_id, dfn_x(dfn), mfn_x(mfn), rc); + + for ( j =3D 0; j < i; j +=3D 1UL << order ) + { + dfn =3D dfn_add(dfn0, j); + order =3D mapping_order(hd, dfn, _mfn(0), i - j); =20 - while ( i-- ) /* if statement to satisfy __must_check */ - if ( iommu_call(hd->platform_ops, unmap_page, d, dfn_add(dfn, = i), - 0, flush_flags) ) + if ( iommu_call(hd->platform_ops, unmap_page, d, dfn, order, + flush_flags) ) continue; + } =20 if ( !is_hardware_domain(d) ) domain_crash(d); @@ -322,20 +358,25 @@ int iommu_legacy_map(struct domain *d, d return rc; } =20 -int iommu_unmap(struct domain *d, dfn_t dfn, unsigned long page_count, +int iommu_unmap(struct domain *d, dfn_t dfn0, unsigned long page_count, unsigned int *flush_flags) { const struct domain_iommu *hd =3D dom_iommu(d); unsigned long i; + unsigned int order; int rc =3D 0; =20 if ( !is_iommu_enabled(d) ) return 0; =20 - for ( i =3D 0; i < page_count; i++ ) + for ( i =3D 0; i < page_count; i +=3D 1UL << order ) { - int err =3D iommu_call(hd->platform_ops, unmap_page, d, dfn_add(df= n, i), - 0, flush_flags); + dfn_t dfn =3D dfn_add(dfn0, i); + int err; + + order =3D mapping_order(hd, dfn, _mfn(0), page_count - i); + err =3D iommu_call(hd->platform_ops, unmap_page, d, dfn, + order, flush_flags); =20 if ( likely(!err) ) continue; @@ -343,7 +384,7 @@ int iommu_unmap(struct domain *d, dfn_t if ( !d->is_shutting_down && printk_ratelimit() ) printk(XENLOG_ERR "d%d: IOMMU unmapping dfn %"PRI_dfn" failed: %d\n", - d->domain_id, dfn_x(dfn_add(dfn, i)), err); + d->domain_id, dfn_x(dfn), err); =20 if ( !rc ) rc =3D err; From nobody Sun May 5 23:17:00 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=1629814888; cv=pass; d=zohomail.com; s=zohoarc; b=PeF/O4MEylraHadanlSMsOcWz9xcdLTc8GEu1H1bngQgI9B8PDouW1ZUWZbrJ5Qve0HnALCiMJ4l98BtsLpFxfQxcv06dQkmc5lfOStG5wQyV8W+29obU6WDQfLvgvBfTyZLkyTEdr7hK6VEkA5qcLDRz+AY52ZUQHeLWu1wPYo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629814888; 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=NZ2YWkVaAC232qv91yH6WI7yyA59H3jwl4N9+n6GGng=; b=fdoveV7cahtGEK8v9wq4DtWv8eH0RASOAqO/hckMzIqM/Zx00/yXByXjLvWiEjpho8iGy8Iuuun1XOi1jaGVcwKA+KnpXDsW2GoamaIwi9QnT7p4pSORpvc31TmewBGKe44e92bORx0qe4MWRmVkeuMUbjUyongTGB1yTfTxeLw= 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 1629814888343314.68930652113806; Tue, 24 Aug 2021 07:21:28 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171458.312876 (Exim 4.92) (envelope-from ) id 1mIXIa-0007aC-SF; Tue, 24 Aug 2021 14:21:08 +0000 Received: by outflank-mailman (output) from mailman id 171458.312876; Tue, 24 Aug 2021 14:21: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 1mIXIa-0007ZZ-Om; Tue, 24 Aug 2021 14:21:08 +0000 Received: by outflank-mailman (input) for mailman id 171458; Tue, 24 Aug 2021 14:21:07 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXIZ-0007Z1-Py for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:21:07 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 84e87454-04e6-11ec-a8dd-12813bfff9fa; Tue, 24 Aug 2021 14:21:06 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-db5eur03lp2059.outbound.protection.outlook.com [104.47.10.59]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-35-kEsVKGJGMsOiwi6bXtTjew-1; Tue, 24 Aug 2021 16:21:04 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB6161.eurprd04.prod.outlook.com (2603:10a6:208:148::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:21:03 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:21:03 +0000 Received: from [10.156.60.236] (37.24.206.209) by PR2P264CA0004.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.17 via Frontend Transport; Tue, 24 Aug 2021 14:21: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: 84e87454-04e6-11ec-a8dd-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629814865; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NZ2YWkVaAC232qv91yH6WI7yyA59H3jwl4N9+n6GGng=; b=nzzGp1YJcSqqBvC90Fn64Pufvc/Ij3IYfOoT25YvKr1VCVrLOzt9D7nOQMGAQiewNT5We0 U4Q5TQat3nWq4CJigEvdMucRUg0jvlTF5P9QMrQFnipf89AdD1A6l0P0BJpx//nXQCXt+A W4V9IOCdtkmIxQmKpB7cQ/90P0z/RQY= X-MC-Unique: kEsVKGJGMsOiwi6bXtTjew-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EAW7OrmAfOrVrCdhj+Qfn9fYxxUifsj02FUeLYIzLwxD+DTOJTuFpBX2q/i1oUEC8vav7zF5wkX8RuanAQxnhobq0FzFJioVL/u8lOmpx9LAvT7I9svKFxVLS3DQVJjH1PpEtq+kwLjXKsxAxsPVX0Rymqzj4gv9DhMxUSIbWIrYtiWg6etyJJcoW+bn3N7+qSvcwmOAyzCXuArU5lOnMW5Pf/J4qP5agIvTv/GLfj2+68MIldijoS57YGDlQFJhu1OVvEVlI0o39TGIGh9Wx1KzW027QymYuDJKIBUk6Q7/X6m8pWm6VK5+S/+3ZuggRewa2X/0pM5i4vWL2xiKqg== 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-SenderADCheck; bh=NZ2YWkVaAC232qv91yH6WI7yyA59H3jwl4N9+n6GGng=; b=OFRxqIIoZjDIf64HZrYSm6372xDD4RKXfGm1avP32EBLuup++VF+YiJyn4Hnorh6jm+T5BVDiiVBg+hxus0xj07GTXWl8TEbkyIF3q16TEYLnF8ONAfIKSUoqybl+QBangUYBpgdzOIgXYrRPblyyDlj0e6fBTAH4AwOZ+WGoUNs1gZC89xRawXWV2EEEL7qAqy76CsI8045A5YVTsByLte1LOCZfW8iWgpt/p79Pyero3DR/M7NbXNArNj9MEkrNxOK3NvRSYWKHVVTnUfXvBYEFwseve+qlVLIA9S6wK8mI2M99hcAUVvxyfZumit8hN9QIupsgLT2xce1w4tt1g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 07/17] IOMMU/x86: restrict IO-APIC mappings for PV Dom0 From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant References: Message-ID: <5d6e8360-7ba8-487e-0ac8-7f517e560520@suse.com> Date: Tue, 24 Aug 2021 16:21:01 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PR2P264CA0004.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::16) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 72ff444a-d65e-44c6-8c08-08d9670a6788 X-MS-TrafficTypeDiagnostic: AM0PR04MB6161: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2043; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RT+3mFNBw+T0Q8MOpnDDKXVnrdOH1aNSynx2wJxg3GUleqrei6wbdVw11n0PoNMXCKYX+QqVLN1wHovy1dexuti7h6RjExEe9AlqujvH9io4i0I419VbSvSU/AueuT8Z+97qwGteyancubOMeezyYHq5vzkCmlSNeoPlQXLts8tfkbjyQetu2K+bT9S8giDT3+3GZ5tr/vntbbxytt2pTJTiv+PZvjhzXaTHaK4KqvHGjWRlOnJdDUINOW4mcN5z6ZlqiNFQ9rxF8Vf71jhPe7l2DLW8ssF0NLxOFfnO5yNixRuPSiLZcjhBYc9vSRJy0ED46mZEAwEdBIlt6nhsxTQuAfvuOfxtqk6vPoG86ZFfZb5bPanRaVhsp+j6GAEGiijCATM8KhZK119Kt4/rdLGkKS3kW1a0y681/Lx87P70qJfZUT+IAfOcLOilnZSmzgQh4ZBV/d13IyCUPeJBUv9cH8d5hYlw/ASM5rb1EsCfJC0+N4f43SDh0bdLnaLKl4Clq7PSjopBbjulkMfOm3TM0fI18EwPwacHciPh3/wFnae1p4YZaIntMbUUEoQ+Wf6kFjUy2fGU4xIz2SHlyEbV2y2Nt4s1zdmU/N4wPZvDMEy0PHQtXfqfzNZuNao2sSRU0ovT/gZFzhu2LcUUszdPUiK2BWofmR3VS78axA3kNQXSzfV9+RB+lCv/nQgOmsNHiYayMZks3mL+UKh/2MgBes8OguoZlCZGBiDnwjQ= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(39860400002)(376002)(136003)(366004)(396003)(5660300002)(66946007)(26005)(478600001)(66476007)(31696002)(8676002)(186003)(31686004)(38100700002)(4326008)(8936002)(2616005)(956004)(66556008)(36756003)(6916009)(83380400001)(16576012)(316002)(54906003)(86362001)(2906002)(6486002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?U2w1SDdGUGJvVlBYSWsyaXg1SVdFK2k5MHdFZElEV0ZWdk9EL0Z6U3I0S3Ju?= =?utf-8?B?VmZaa0FrRG9pMlZTNzZ2NUNValpZMUU4Ym01VnBXeUI0clhrY2ZUSG1ING00?= =?utf-8?B?SHZEdUFKbVYzUlBrY0NFOWR3MXFtdFBrMFhiQ0dLazM4MGdvM3BDcktYOGNy?= =?utf-8?B?V2NYQzZuWkx4OU9BL2xYVWVVNjdUcUhvekJacWJESkdoV0FpQzNCaExlbkI2?= =?utf-8?B?YThGUVlma2luQ1FNQlMyV3F6aWkrcmpKWUo2SE5GL1JqdjhHeDV4R25BRTRp?= =?utf-8?B?OG9xNEhzZklvOUgyNW5LNTB5SStNNGdzM1Q2TjBLTXZ5SzIvVzRPWmJoZ09Q?= =?utf-8?B?N2Q4dmg0RzhDTGd6M1FPUFJRYnQ5WUx3ZThjUGhWV0ZFREVFMnE0eHpJcTBY?= =?utf-8?B?amJYWkdmd09JdE51cXlsRVN3THBnV2NXYUJ3aGUvU0c3dWlIU1JCQTVYWDZG?= =?utf-8?B?Y2pnUHhoV3N0UzIzSkxTWjYxZGUwMGRreTBhc1l2RUJaNU5qTVR5ZTNiSmRW?= =?utf-8?B?cnV3N3grYWNWQlZRd0JqTzQyeVhKS1lZd0w4T0RjMkV6QlN2Q3ZEYXRlSmdV?= =?utf-8?B?aEZOeTFEcFlJREN4am5Ic0Z1dWoyTEpyS3lycUgzaGY3cE5EWVlYMWlPMmVU?= =?utf-8?B?VStkZ1FONkdlWGZ1a3d2RVpWbUVzNVNUc0FJcG9xTk5zQ2FMZXFpL0hEeTFu?= =?utf-8?B?ZEtIOTl1d1JIM3lERzFUcm15ZmlmbHVSaC91eVNFWEpsdHlHRmdpTEN5Vm8v?= =?utf-8?B?N3M5NzNtU29sOGZ2UlJxcGhGeHY0alBDYnBXaFBHcFQwVEE4RnU2cEZiQUh3?= =?utf-8?B?SzA3NmJlQ0dnVGVrWGdabXFCd1c1L28xMFlBR1FZUUhoS1czM1k4a21adEZB?= =?utf-8?B?Ylh5MStaNlVtcHAzYXVxWWZFUkNBYWdnc0JUQS9iVmRYZ2VsL0Zkd0NLVzVP?= =?utf-8?B?NXR2SW4rSGs5WDJKcFIyQ0tiZ3dQUEZzSzZjaGtCSkRrdnJPeGpEZ2Fybi9S?= =?utf-8?B?MjNzN3FtbWZnTU5FWmQ5MFR0eUtrUGp3ckpBcTR5Y2o4UVE0ZkxzNmNBMXE2?= =?utf-8?B?OW1PMVB6d0ErRGJ6Smg3R1VtS0xhQjRrYUI1QjBrNFFxZ2lsR2dMajVFa1VW?= =?utf-8?B?TExUNDRZOCtLbTI1TG5QOTF1WTlUTE1UYlFxSlYrbVJOaVZ5QlR1YUp1dWE4?= =?utf-8?B?SVFtS0luNExucGVuNURWSzdPNEEyQnVENStvSjRNK3pwa1FZaUFlVTZpUzNP?= =?utf-8?B?ZGhmY00yOGNKMzZES2xrczM5Z1ZVT3lvRVZxQTFxT3ZsNFhYdHNVbnZPWEhr?= =?utf-8?B?Y3A0cDBVS1d6Y3FEZVZESFZRSVV0ZjlseDZpQmhaaFRDRGtLSm5odmR0UFJG?= =?utf-8?B?eEZ4UEM1Q2ZtbWdUendFZ2NjZWpFMUl5T2tEaWFJNm0xNVRuVWNoU1R6cXZ1?= =?utf-8?B?ZCs1bEhUNndwWk4wOE1LYVAxRlI1MGJ3QXdhbDBMN3p6Y3o1M3NhZEdpYVZj?= =?utf-8?B?Y2x6cU04c3lFT0wweVVCYlQxWnJRRml2VjZQRUdWdjFneVRWbmpmMDlCYWFX?= =?utf-8?B?YzhYZ3ZhYm9neSsreUZBVWZPNmhsSjYwNkVmaGVVRzhHY0k2KzFVSjU3RWYy?= =?utf-8?B?QzNJdzhxeFo3NUpXalNqRFF5c1NtNE9kbTJhRGJoNjY0LzRvamkvK3M1YU10?= =?utf-8?B?OURHMjN4V281dExUb2FUNXlmR0ZMQzZRQlFTMmlueWo3Mm13bTlhaUMra0lH?= =?utf-8?Q?dD85E/+uGtaHVcxQxRqT5gC5CiP9xpS1E/WHwkO?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 72ff444a-d65e-44c6-8c08-08d9670a6788 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:21:03.5510 (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: s367gf9yDttaV+7zmvBbc/+CMGjXgqR+0vMMKlFE/1XixmvtWoiIJf8EV2hUUXIzL/w+dXgc2++F0QmfRXv9Rw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB6161 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629814890174100001 Content-Type: text/plain; charset="utf-8" While already the case for PVH, there's no reason to treat PV differently here, though of course the addresses get taken from another source in this case. Except that, to match CPU side mappings, by default we permit r/o ones. This then also means we now deal consistently with IO-APICs whose MMIO is or is not covered by E820 reserved regions. Signed-off-by: Jan Beulich --- [integrated] v1: Integrate into series. [standalone] v2: Keep IOMMU mappings in sync with CPU ones. --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -159,12 +159,12 @@ void arch_iommu_domain_destroy(struct do page_list_empty(&dom_iommu(d)->arch.pgtables.list)); } =20 -static bool __hwdom_init hwdom_iommu_map(const struct domain *d, - unsigned long pfn, - unsigned long max_pfn) +static unsigned int __hwdom_init hwdom_iommu_map(const struct domain *d, + unsigned long pfn, + unsigned long max_pfn) { mfn_t mfn =3D _mfn(pfn); - unsigned int i, type; + unsigned int i, type, perms =3D IOMMUF_readable | IOMMUF_writable; =20 /* * Set up 1:1 mapping for dom0. Default to include only conventional R= AM @@ -173,44 +173,60 @@ static bool __hwdom_init hwdom_iommu_map * that fall in unusable ranges for PV Dom0. */ if ( (pfn > max_pfn && !mfn_valid(mfn)) || xen_in_range(pfn) ) - return false; + return 0; =20 switch ( type =3D page_get_ram_type(mfn) ) { case RAM_TYPE_UNUSABLE: - return false; + return 0; =20 case RAM_TYPE_CONVENTIONAL: if ( iommu_hwdom_strict ) - return false; + return 0; break; =20 default: if ( type & RAM_TYPE_RESERVED ) { if ( !iommu_hwdom_inclusive && !iommu_hwdom_reserved ) - return false; + perms =3D 0; } - else if ( is_hvm_domain(d) || !iommu_hwdom_inclusive || pfn > max_= pfn ) - return false; + else if ( is_hvm_domain(d) ) + return 0; + else if ( !iommu_hwdom_inclusive || pfn > max_pfn ) + perms =3D 0; } =20 /* Check that it doesn't overlap with the Interrupt Address Range. */ if ( pfn >=3D 0xfee00 && pfn <=3D 0xfeeff ) - return false; + return 0; /* ... or the IO-APIC */ - for ( i =3D 0; has_vioapic(d) && i < d->arch.hvm.nr_vioapics; i++ ) - if ( pfn =3D=3D PFN_DOWN(domain_vioapic(d, i)->base_address) ) - return false; + if ( has_vioapic(d) ) + { + for ( i =3D 0; i < d->arch.hvm.nr_vioapics; i++ ) + if ( pfn =3D=3D PFN_DOWN(domain_vioapic(d, i)->base_address) ) + return 0; + } + else if ( is_pv_domain(d) ) + { + /* + * Be consistent with CPU mappings: Dom0 is permitted to establish= r/o + * ones there, so it should also have such established for IOMMUs. + */ + for ( i =3D 0; i < nr_ioapics; i++ ) + if ( pfn =3D=3D PFN_DOWN(mp_ioapics[i].mpc_apicaddr) ) + return rangeset_contains_singleton(mmio_ro_ranges, pfn) + ? IOMMUF_readable : 0; + } /* * ... or the PCIe MCFG regions. * TODO: runtime added MMCFG regions are not checked to make sure they * don't overlap with already mapped regions, thus preventing trapping. */ if ( has_vpci(d) && vpci_is_mmcfg_address(d, pfn_to_paddr(pfn)) ) - return false; + return 0; =20 - return true; + return perms; } =20 void __hwdom_init arch_iommu_hwdom_init(struct domain *d) @@ -246,15 +262,19 @@ void __hwdom_init arch_iommu_hwdom_init( for ( i =3D 0; i < top; i++ ) { unsigned long pfn =3D pdx_to_pfn(i); + unsigned int perms =3D hwdom_iommu_map(d, pfn, max_pfn); int rc; =20 - if ( !hwdom_iommu_map(d, pfn, max_pfn) ) + if ( !perms ) rc =3D 0; else if ( paging_mode_translate(d) ) - rc =3D set_identity_p2m_entry(d, pfn, p2m_access_rw, 0); + rc =3D set_identity_p2m_entry(d, pfn, + perms & IOMMUF_writable ? p2m_acce= ss_rw + : p2m_acce= ss_r, + 0); else rc =3D iommu_map(d, _dfn(pfn), _mfn(pfn), 1ul << PAGE_ORDER_4K, - IOMMUF_readable | IOMMUF_writable, &flush_flags= ); + perms, &flush_flags); =20 if ( rc ) printk(XENLOG_WARNING "%pd: identity %smapping of %lx failed: = %d\n", From nobody Sun May 5 23:17:00 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=1629814920; cv=pass; d=zohomail.com; s=zohoarc; b=KD/htTIa9Ib4Df6dtPQPgqLbh7eycZeN6ZImP74L7NXDSEyJpnxpn5buAjwgEWs4WGbYPWAyJxW4XubuNjM0ZkSnhNAwr6VFwHf2Ws0Ssgc1fw0XnZRv8Y/2ixI8fe4J9AMaAylPfLfAPUjemIvsqgG6WLEczA6tVVUO0s0XLy0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629814920; 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=XDhmLw87aiylH0GLKU5f6Zw6mmbLtfManAIqVhjiMWQ=; b=IruQYdePqtLLl1RIE/teIDIXU4i3f5z09Mgbbj7Gfa99wNK09eGmEW4JfZ8Y7OD+vlb1Yqx1nPpC35xwuTCWg6y0AK+tse/9W7rB/XqjmJy048EgiFM5+2oRh2n+Kj1DbSGY4sPPD+/45+aHcOYOiL+Ln2bTiL9T9vu+im2iZSM= 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 1629814920523719.5297584898085; Tue, 24 Aug 2021 07:22:00 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171463.312887 (Exim 4.92) (envelope-from ) id 1mIXJ9-0008Cj-5P; Tue, 24 Aug 2021 14:21:43 +0000 Received: by outflank-mailman (output) from mailman id 171463.312887; Tue, 24 Aug 2021 14:21:43 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXJ9-0008Cc-28; Tue, 24 Aug 2021 14:21:43 +0000 Received: by outflank-mailman (input) for mailman id 171463; Tue, 24 Aug 2021 14:21:41 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXJ7-0008CS-NF for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:21:41 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id b0862d5a-d76c-4430-b2fb-9634955bbe6d; Tue, 24 Aug 2021 14:21:40 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-db5eur03lp2056.outbound.protection.outlook.com [104.47.10.56]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-23-r7Aesan0O-iVtg8_C5CQhg-1; Tue, 24 Aug 2021 16:21:37 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB6161.eurprd04.prod.outlook.com (2603:10a6:208:148::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:21:36 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:21:36 +0000 Received: from [10.156.60.236] (37.24.206.209) by PR2P264CA0019.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19 via Frontend Transport; Tue, 24 Aug 2021 14:21: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: b0862d5a-d76c-4430-b2fb-9634955bbe6d DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629814899; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=XDhmLw87aiylH0GLKU5f6Zw6mmbLtfManAIqVhjiMWQ=; b=nlAex6iepmLBI4UAOCR8/argoZPjtCZC4wpsV6AKW8sR6l0/IZssRjqkMOSITnqNs4A5RM M4U4simw5JnJHQ2fOnByp/gRH4qqcv6GasAPMnGEJdwHcHDMu+H6ZtGpVcxF8+ElOp8orz 44/b37UKCgI4dPgBX98c9oNnLNzZOls= X-MC-Unique: r7Aesan0O-iVtg8_C5CQhg-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BiMmJAFu//z1yWpAfBlQ/jna30JF/Th8qqAC1jAfH2+L+hw5dbsjXOhARNBmJqPhvm515vk/cGoHUMu96Pi1lgxd/jHZ3WkmIcJwJC+lcqapFqC0R0dS3/jbf/VlNm766v6f4eXAGqoNTohWRPA8blyHzagV+ovTgVxabKoAzqtpkjEhxUx9T9ul1wmd2hZwZx09GCtSowPqN7Fg5lSTsJBqxSCxii3KLDSLB4pLANTJRylGY9kJDE+MLKLlhZ5dELe+iEY3mEVMwYItc+7TuDMLoZKufvUzuGOU/QphqghG7dICT9+IuDtCb+rj0+c/at40uoWKLFeWSRK66l4UMQ== 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-SenderADCheck; bh=XDhmLw87aiylH0GLKU5f6Zw6mmbLtfManAIqVhjiMWQ=; b=Tcqkp/9z6G+kFesKTZtHlpvxyFYrFriXIIO43Z37AhbQPDLiYchAWojMgB6YGh0L7Ur9Iet08pg3D3Z6o2w7tqbwrFOy3rmtvJRcScmBIn/XFqnyenrCjU9YE81Viy4RiiZ//lYXnz2JfaXqHmfwgfkAxk43oLXk5Mox8ZInSIn4/c3M38o4Lkxr4BicFQ9w+nE8IwV0Tzr+fBf6Ii/CwOush46AW5k9vhQBoKqJ5fcA5yLOViqWQfU5dPW9VXgSWON9gUR2zsEXFjTQ+efC+SDj3KSsRlkbEGrQb7JbPXRyCSA6DBD54P85R6iy7oZ0VRsIwfXyxC2KUT1mOmo0IQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: citrix.com; dkim=none (message not signed) header.d=none;citrix.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 08/17] IOMMU/x86: perform PV Dom0 mappings in batches From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: Message-ID: <64501c4f-e723-8bca-1d9a-e734df15899c@suse.com> Date: Tue, 24 Aug 2021 16:21:33 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PR2P264CA0019.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::31) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1dc0da5f-9cd2-40a0-34f4-08d9670a7acd X-MS-TrafficTypeDiagnostic: AM0PR04MB6161: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:669; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EO4uiKcWp2Kni3SpOndPaNYSyKe6FSDHyb+CoNNJXKPmQStFd6f3Xtv8yb16QmpzTOwVdnGXMYTzm+MVx53wu2LK0Quv8Bmf8pukDK8wJBtQERWw0z7hzK02QYuRDmFWwcZr3zkTRXeEflEXfNSviOrOFG/rJAe8u11qsxojHQeEi3ZdsdtBS7ssLIwIfLE3W+QNYdJa044r0Wkgn8xwSaCkFjpRulKMEhUIiAMwWnKP9NhLj3Q6zxRCA7agWh9V9+6uJ1Ou5iP29fzHH9HpZhx7KUvwGAA1lITDyAAnXZuKBjl93ByIbs+wGCH5huNL7Js3ArD593X8/AR/Pnhseje16FH4PBEdXF4xjBI9kPJK5ZvUmO5KvGQEsy/nbXtXJmXf6AET92+mwHDS8l5/iDNVSjBSAMxSiUhnschCoPCHNbhrDoENfftAJB/6P1jEH5KiXJCpVWss4x1bMCcCYYG21ncn8SflFOKL2zhZ4rBhp/Zf5U9oPXC6tD44rYe1kURZjVjMA+aCjdDVCsXC6jxRzyeSq3LBMqFzQFaHXi2inkOMoQchv1bbFAHv7O4jb3b/LGDKttAyVCKP7q1Fi0jwzvf7PZoLMy/NvT2dgg8nuhseiZ0oPPUMpzyhY+KY19ANNVqj0FoaNIz1mHArcEvyYkkgb24t5iEUi/JDFliwrTwi+hc080gVnQ821OzKPUdm3Ggmm51vbuBziLDRcmp3j0fk4KMORMBsD43fKTQ= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(39860400002)(376002)(136003)(366004)(396003)(5660300002)(66946007)(26005)(478600001)(66476007)(31696002)(8676002)(186003)(31686004)(38100700002)(4326008)(8936002)(2616005)(956004)(66556008)(36756003)(6916009)(83380400001)(16576012)(316002)(54906003)(86362001)(2906002)(6486002)(30864003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R2pSendjYVJLYThHeG5MTStkSyt1SmdiSzhQRDRyTkR4NDh5SHdCbmVlTXhZ?= =?utf-8?B?VEd0VFRlZmx0Y3VlTmJLc3llYWxoNVFhaGJRQzdqbHBYOStDNjROdzFRYVhE?= =?utf-8?B?d2tzL29SKytqNktSZmhhOWg3cFFJZU9Lck5xRHp5UFZQUVVVV1V2MDl1UDND?= =?utf-8?B?ZUluMEtRTlBjY2I2dUV2T3BqUHlRSVNsems2eG9BUVY4WUJ3bGR4ZmtnOG1I?= =?utf-8?B?T0VWQi9USktyejdzNmlaWDNxNlVQZkFrZHozYlRIT3FwZnR1SFlJck5wa2l2?= =?utf-8?B?Y1JINGVmNHB2MDZkNTlZUDl1TEdSd0lKZ0JweHZvRzRPN2RlZ2NIdnN3OHR1?= =?utf-8?B?amdSK3cxQUltRlowMjJnTFBhcVpFM2FKbmxGanVBUkgxa0xGSy91TStzcVlu?= =?utf-8?B?b3U0TnNLMGZDYW1tSlU1NUh3MytnQVpGSFhmb0wxODRNdkdzWFpBWVZFdFl3?= =?utf-8?B?cTVtbDl5RnJFWHZ5ZHV2QVh5VVhhY3BUZXVwVzhaRnFMR3VSNXpENjBzNllL?= =?utf-8?B?ZDg0amw0L1JZSlpJTlJLaVRJRzJFMVVZMHU1TFZwR00xeXJyOHBzQmFwMkdV?= =?utf-8?B?VG81Y0JWQVlrbkxJTkhYU0lxV2NuQ0NkSjUzWkRXL2FYVUVyaU9IVjdUU1lC?= =?utf-8?B?QmN2NWxTM2dWckdLMmFlZHdpMUdtMG44dTNxdGJjbFUzcWFlZzFWSy9ZbVVP?= =?utf-8?B?a2pNR3JGemF0aHdXdVVJMEpCVFFJcmFlazBJc0NVSlpFdkpyYzFsN1FEc2Ex?= =?utf-8?B?SDFlRmJaZGVEMU9pcmoyM3NreG5NRVh2MUxFRHhvb3JEMm11Snl2TzZQYXdX?= =?utf-8?B?QXNkVDRjUk9XQkQyRmRONWw4VjZrYzV2N0FPWGdRZWpNcEd0NkY2NVVuNFVR?= =?utf-8?B?Z1Z2T2JwRWVKUjNMdko0dXVhSXhXc05pYW9XM2JLanBZbFlEUzRNRmJCZUJM?= =?utf-8?B?NlRkWVladVd3OUhZMC9QMUE1VzF6WitGWFljZ2FVZVBrK2piT2dtcVRtaTR5?= =?utf-8?B?UGVlUlIzcTUybWZpZjh6L1BIMlU2WFltRTlHK09SV3ZRbW9qTkxRSUxmSWMr?= =?utf-8?B?ZFg0dUFJUlR3NnZxZVFVTk9WbTZuazgxcTJEZTdRUnc1RSt0T2JtOVNnWEFo?= =?utf-8?B?VnBLemdrY1E3UzJFV01zdmdTQ2RoMm0yeHYxQUY1R1pvblUvQzZNa3BxM3Fp?= =?utf-8?B?RWJXU3ZIVFRlSnUxOUpBcnJTRmVxYjY2UHU1Qm0rZUZKWXNoR1dqanVaUUx1?= =?utf-8?B?QlA1d0xua2JOUmJuY04vcm1Cb0xOSHBxZkM3T2ZyYTROSEw2QjdsUXRHRU5q?= =?utf-8?B?b0xmS2RuWnlmaEcrTmhwZnBNTTFXK3B6U3BLb1NpalYranpMUUl5MGkvdjN6?= =?utf-8?B?VjcyTnFwNU1rdHFRRktIMHd0U3lBcW93OWg1Z0J5aW1QbG50bXVlZ1dOYWFh?= =?utf-8?B?OXdrbGdEcHh6ZE9pZVIzQkQ0UTM1aEJkSnkyQk9BQzZjS1RJbXZ5UDg1SUhT?= =?utf-8?B?Ui9sa2I0OGxWUmN0T0RQQTZIbUJBVnZnckhudG5uSGRqSCtzZW1hSTh5YlNx?= =?utf-8?B?b21NVlFNQXV4MldPTmMrQU5WY3F6cWVIV3RWS2tHSnJoTmcyUUgwKzlXeDlZ?= =?utf-8?B?ZWFhbzNPNWNYeDBnS21DT2FkaGdvNCt2eWpISTVYS1huSFJmTGJ4Smd3UFAy?= =?utf-8?B?T25keGhsQVRHeGR5eFJBSkNZaFZraUxBUFZmY1RpblJZOE9DaEpZKzJLaFd2?= =?utf-8?Q?6VZ4scnetb24XC1p7sPVE1lIdwBip2lVr7Bvwyb?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1dc0da5f-9cd2-40a0-34f4-08d9670a7acd X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:21:36.3924 (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: 7T6VuU79roWzK006eE45ULl8l9BN7N3jY2JZmlLNja3/9627/J1PNCs3ddL1yOkK5YccyGl+MrRFLGaZ8ggZVQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB6161 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629814922068100001 Content-Type: text/plain; charset="utf-8" For large page mappings to be easily usable (i.e. in particular without un-shattering of smaller page mappings) and for mapping operations to then also be more efficient, pass batches of Dom0 memory to iommu_map(). In dom0_construct_pv() and its helpers (covering strict mode) this additionally requires establishing the type of those pages (albeit with zero type references). The earlier establishing of PGT_writable_page | PGT_validated requires the existing places where this gets done (through get_page_and_type()) to be updated: For pages which actually have a mapping, the type refcount needs to be 1. There is actually a related bug that gets fixed here as a side effect: Typically the last L1 table would get marked as such only after get_page_and_type(..., PGT_writable_page). While this is fine as far as refcounting goes, the page did remain mapped in the IOMMU in this case (when "iommu=3Ddom0-strict"). Signed-off-by: Jan Beulich --- Subsequently 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. 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. 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(), putting 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. --- a/xen/arch/x86/pv/dom0_build.c +++ b/xen/arch/x86/pv/dom0_build.c @@ -106,11 +106,26 @@ static __init void mark_pv_pt_pages_rdon unmap_domain_page(pl3e); } =20 +/* + * For IOMMU mappings done while building Dom0 the type of the pages needs= to + * match (for _get_page_type() to unmap upon type change). Set the pages to + * writable with no type ref. NB: This is benign when !need_iommu_pt_sync(= d). + */ +static void __init make_pages_writable(struct page_info *page, unsigned lo= ng nr) +{ + 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)); @@ -123,6 +138,8 @@ static __init void setup_pv_physmap(stru =20 while ( vphysmap_start < vphysmap_end ) { + int rc =3D 0; + if ( domain_tot_pages(d) + ((round_pgup(vphysmap_end) - vphysmap_start) >> PAGE_SHIFT) + 3 > nr_pages ) @@ -176,7 +193,22 @@ static __init void setup_pv_physmap(stru L3_PAGETABLE_SHIFT - PAGE_SHI= FT, MEMF_no_scrub)) !=3D NULL ) { - *pl3e =3D l3e_from_page(page, L1_PROT|_PAGE_DIRTY|_PAGE_PS= E); + mfn_t mfn =3D page_to_mfn(page); + + if ( need_iommu_pt_sync(d) ) + rc =3D iommu_map(d, _dfn(mfn_x(mfn)), mfn, + SUPERPAGE_PAGES * SUPERPAGE_PAGES, + IOMMUF_readable | IOMMUF_writable, + flush_flags); + if ( !rc ) + make_pages_writable(page, + SUPERPAGE_PAGES * SUPERPAGE_PAGES); + else + printk(XENLOG_ERR + "pre-mapping P2M 1G-MFN %lx into IOMMU failed: = %d\n", + mfn_x(mfn), rc); + + *pl3e =3D l3e_from_mfn(mfn, L1_PROT|_PAGE_DIRTY|_PAGE_PSE); vphysmap_start +=3D 1UL << L3_PAGETABLE_SHIFT; continue; } @@ -202,7 +234,20 @@ static __init void setup_pv_physmap(stru L2_PAGETABLE_SHIFT - PAGE_SHI= FT, MEMF_no_scrub)) !=3D NULL ) { - *pl2e =3D l2e_from_page(page, L1_PROT|_PAGE_DIRTY|_PAGE_PS= E); + mfn_t mfn =3D page_to_mfn(page); + + if ( need_iommu_pt_sync(d) ) + rc =3D iommu_map(d, _dfn(mfn_x(mfn)), mfn, SUPERPAGE_P= AGES, + IOMMUF_readable | IOMMUF_writable, + flush_flags); + if ( !rc ) + make_pages_writable(page, SUPERPAGE_PAGES); + else + printk(XENLOG_ERR + "pre-mapping P2M 2M-MFN %lx into IOMMU failed: = %d\n", + mfn_x(mfn), rc); + + *pl2e =3D l2e_from_mfn(mfn, L1_PROT|_PAGE_DIRTY|_PAGE_PSE); vphysmap_start +=3D 1UL << L2_PAGETABLE_SHIFT; continue; } @@ -310,6 +355,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); @@ -572,6 +618,18 @@ int __init dom0_construct_pv(struct doma BUG(); } initrd->mod_end =3D 0; + + count =3D PFN_UP(initrd_len); + + if ( need_iommu_pt_sync(d) ) + rc =3D iommu_map(d, _dfn(initrd_mfn), _mfn(initrd_mfn), count, + IOMMUF_readable | IOMMUF_writable, &flush_flags= ); + if ( !rc ) + make_pages_writable(mfn_to_page(_mfn(initrd_mfn)), count); + else + printk(XENLOG_ERR + "pre-mapping initrd (MFN %lx) into IOMMU failed: %d\n", + initrd_mfn, rc); } =20 printk("PHYSICAL MEMORY ARRANGEMENT:\n" @@ -605,6 +663,22 @@ int __init dom0_construct_pv(struct doma =20 process_pending_softirqs(); =20 + /* + * We map the full range here and then punch a hole for page tables via + * iommu_unmap() further down, once they have got marked as such. + */ + if ( need_iommu_pt_sync(d) ) + rc =3D iommu_map(d, _dfn(alloc_spfn), _mfn(alloc_spfn), + alloc_epfn - alloc_spfn, + IOMMUF_readable | IOMMUF_writable, &flush_flags); + if ( !rc ) + make_pages_writable(mfn_to_page(_mfn(alloc_spfn)), + alloc_epfn - alloc_spfn); + else + printk(XENLOG_ERR + "pre-mapping MFNs [%lx,%lx) into IOMMU failed: %d\n", + alloc_spfn, alloc_epfn, rc); + mpt_alloc =3D (vpt_start - v_start) + pfn_to_paddr(alloc_spfn); if ( vinitrd_start ) mpt_alloc -=3D PAGE_ALIGN(initrd_len); @@ -689,7 +763,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(); } @@ -720,6 +795,17 @@ int __init dom0_construct_pv(struct doma /* Pages that are part of page tables must be read only. */ mark_pv_pt_pages_rdonly(d, l4start, vpt_start, nr_pt_pages); =20 + /* + * This needs to come after all potentially excess + * get_page_and_type(..., PGT_writable_page) invocations; see the loop= a + * few lines further up, where the effect of calling that function in = an + * earlier loop iteration may get overwritten by a later one. + */ + if ( need_iommu_pt_sync(d) && + iommu_unmap(d, _dfn(PFN_DOWN(mpt_alloc) - nr_pt_pages), nr_pt_pag= es, + &flush_flags) ) + BUG(); + /* Mask all upcalls... */ for ( i =3D 0; i < XEN_LEGACY_MAX_VCPUS; i++ ) shared_info(d, vcpu_info[i].evtchn_upcall_mask) =3D 1; @@ -793,7 +879,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 +911,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,22 +929,41 @@ 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"); + mfn =3D mfn_x(page_to_mfn(page)); + + if ( need_iommu_pt_sync(d) ) + { + rc =3D iommu_map(d, _dfn(mfn), _mfn(mfn), domain_tot_pages(d) = - count, + IOMMUF_readable | IOMMUF_writable, &flush_flags= ); + if ( rc ) + printk(XENLOG_ERR + "pre-mapping MFN %lx (PFN %lx) into IOMMU failed: %= d\n", + mfn, pfn, rc); + } + while ( pfn < domain_tot_pages(d) ) { - mfn =3D mfn_x(page_to_mfn(page)); + if ( !rc ) + make_pages_writable(page, 1); + #ifndef NDEBUG #define pfn (nr_pages - 1 - (pfn - (alloc_epfn - alloc_spfn))) #endif dom0_update_physmap(compat, pfn, mfn, vphysmap_start); #undef pfn - page++; pfn++; + page++; mfn++; pfn++; if ( !(pfn & 0xfffff) ) process_pending_softirqs(); } } =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 @@ -231,8 +231,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 @@ -259,7 +259,7 @@ void __hwdom_init arch_iommu_hwdom_init( max_pfn =3D (GB(4) >> PAGE_SHIFT) - 1; top =3D max(max_pdx, pfn_to_pdx(max_pfn) + 1); =20 - for ( i =3D 0; i < top; i++ ) + for ( start =3D count =3D i =3D 0; i < top; ) { unsigned long pfn =3D pdx_to_pfn(i); unsigned int perms =3D hwdom_iommu_map(d, pfn, max_pfn); @@ -272,16 +272,30 @@ void __hwdom_init arch_iommu_hwdom_init( perms & IOMMUF_writable ? p2m_acce= ss_rw : p2m_acce= ss_r, 0); + else if ( pfn !=3D start + count || perms !=3D start_perms ) + { + commit: + rc =3D iommu_map(d, _dfn(start), _mfn(start), count, + start_perms, &flush_flags); + SWAP(start, pfn); + start_perms =3D perms; + count =3D 1; + } else - rc =3D iommu_map(d, _dfn(pfn), _mfn(pfn), 1ul << PAGE_ORDER_4K, - perms, &flush_flags); + { + ++count; + rc =3D 0; + } =20 if ( rc ) printk(XENLOG_WARNING "%pd: identity %smapping of %lx failed: = %d\n", d, !paging_mode_translate(d) ? "IOMMU " : "", pfn, rc); =20 - if (!(i & 0xfffff)) + if ( !(++i & 0xfffff) ) process_pending_softirqs(); + + if ( i =3D=3D top && count ) + goto commit; } =20 /* Use if to avoid compiler warning */ From nobody Sun May 5 23:17:00 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=1629814976; cv=pass; d=zohomail.com; s=zohoarc; b=U75zu3HaBYMLdYlp2tT0TNU+E/XZq0ePsTfIch9yleZXBKnVjAvpj23SXh965dk4QSDdwdgPDa/7A8tz8FlC0umCk8vrEkY1JaEsLeiW1+IBu5nMeosx1ASwp2khMnve2HXkFPw3QQ8+XVIvZtMIy+mpOI4Ozwfwz6IBKOIu5D8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629814976; 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=so4Ky1V9NCja2VXT8wrI2XRvzJ/MB1YyQWdii1AitFk=; b=Vbz5jxvC/olzp57nG81T7Z/JagVo/iVP8G0hLo2lVtwRfKQW1HhI40I/h9n7z4j8lLVP3SgIl5Mino/yWWdG2GHIfzsCWxOjBBkGIX85CUo+z/ehMm1FzFr2hIVbynSni2M/ly2LEFPVTkXHrgBfp/lEBoNEJ5SCvKHmoBxmeU4= 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 1629814976128806.7544583173378; Tue, 24 Aug 2021 07:22:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171468.312898 (Exim 4.92) (envelope-from ) id 1mIXK0-0000Um-Kt; Tue, 24 Aug 2021 14:22:36 +0000 Received: by outflank-mailman (output) from mailman id 171468.312898; Tue, 24 Aug 2021 14:22: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 1mIXK0-0000Uf-HZ; Tue, 24 Aug 2021 14:22:36 +0000 Received: by outflank-mailman (input) for mailman id 171468; Tue, 24 Aug 2021 14:22:34 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXJy-0000UT-Lm for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:22:34 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id b8bb468a-04e6-11ec-a8dd-12813bfff9fa; Tue, 24 Aug 2021 14:22:33 +0000 (UTC) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2050.outbound.protection.outlook.com [104.47.2.50]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-27-EAaiN3pKMOCs2cTi7xXhKQ-1; Tue, 24 Aug 2021 16:22:31 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM8PR04MB7841.eurprd04.prod.outlook.com (2603:10a6:20b:244::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:22:30 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:22:30 +0000 Received: from [10.156.60.236] (37.24.206.209) by FRYP281CA0018.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.5 via Frontend Transport; Tue, 24 Aug 2021 14:22:29 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: b8bb468a-04e6-11ec-a8dd-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629814952; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=so4Ky1V9NCja2VXT8wrI2XRvzJ/MB1YyQWdii1AitFk=; b=RSxw5IIkh6vKJSR+1eUE14ly6vLWXSWeVUUbbmcZZaW6py7Be3Bud0ILh8QK+QfPufqvSg yHfJH7wNX+hZ9q9haWspmDQEqO6mTpC4nJnAvwelL3+YZJYpCI/CLH/1g2hG3gjWBnhxyK /3QmdiEed5BSXxYtl48kkcjd8nfRWDg= X-MC-Unique: EAaiN3pKMOCs2cTi7xXhKQ-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j5OQ56glue2IGjcQnXiv1GxbpS2z9UZ3jYunFpon6Ki4yT+NJP6+TsrO8ipEkmyENf1DsOZbiXS6B14Eo0ngMk/hx+ugVNbr7rb2QetnUPuRiVOxF3SNhQxSSMPv1B8968oZxb8Q7Sq50bsxJ35INzSWj2CCoCkHhRZVQjm1Vzgxe6cvw+RhQXuOoOA8C+Z5VS/QFv5kMHpRsed3ISCmROBXNF4ZZRZ8rt74GOpuuCYQNqNtKL2nlArDGS2/NiSb/OmF+RAjaLQokzNqU+6NiCnxEYNet0OaXl/+mFv1uGiVaXmatfui+M3FYe2rdquIXEBfyCnjvIeD8dyjWsozug== 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-SenderADCheck; bh=so4Ky1V9NCja2VXT8wrI2XRvzJ/MB1YyQWdii1AitFk=; b=Svs8+XK8AjLd4rn8JXBSr0Saej9T1Hzm+10qLbhMaSA9mTuaAbKXliKKPFtGZuAsyWL6CA1TICfRko6o73nokiMulZCbBwR1HaCAh+4qEx6LgZ8RV3svAEh+7lmuW3TNDJSzX5/5A92WCkXk38L+4PqOqu+yBx1jofKZ1JQRibNOO+y1rgYHtFkYYnHpbRtm7tN1aqoxhu9Xebn079GfZSHZ8wwqN0zXFF9pFVLI7vNwHg/kM78qcMNPkREk25Op89kqP4LD6dq4NmbwOiGoaaqs2Qb/oXTiTMRL0X1Pgu5VLAlmq0ZDhyUcGjnN+V0i/1F9M3Xhj2xs10j9YRKajg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 09/17] IOMMU/x86: support freeing of pagetables From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant References: Message-ID: <41171b38-2e06-74e9-364f-02736f5d93b4@suse.com> Date: Tue, 24 Aug 2021 16:22:28 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FRYP281CA0018.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10::28) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 73ce02b5-3dfc-46f0-8df6-08d9670a9b42 X-MS-TrafficTypeDiagnostic: AM8PR04MB7841: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1284; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QqaAmhj6g8c0NqW0JFQL/GJxdp5ctMfsLW5GFKGtV/qrWZlj4Zj6SA7kjX3+5OSv6hy4c1NiWocj9o9Agkz9y+gTXQsZv2W8JtAJBum1fYGEZaHRSc+nBg7JG+BzlxuPedq3JDG7SFfKLgo3b9wD1ilGupEt0GXEnHzYJN2VBHrdHSGF8GrlvnGJOnZNgKzhJTtlAJuM3sE3Hu7zyaiq6QpNf8ZjUkL54+8F2/mFPJTnEjJcQiQVifRM/5TbG3gflqJSGQwjllUIu92A/Ba1CWyK8a1vauzQnIpHHOXCLo8Wij8R1oDs4kUI+4yavQtoL8kCmJL+OU0IMXAlLynIK4Jg3WZN7mK4TnN0pW6T2KdPpjIoM8C60We1iZqHskmsXkLl+6XA/ETzN+QKlFaGlEfLw5c+AvVHoATfB8QrUuOAbP9wq1mXctST03+DzPBhN547rXdGHIkhQdasRkwyDTIV4gsToBQeBdY0ljYHIlZ/E5q5uVTkH1xrSCo63NatCJ0ca/PGdvdBFEC21ZaeI/sQiWSk3XlXekcmp3v46kCYewiUqn51IHAE/FpFIuR0TIcGZOLOigRJZ/T3jflh8HunWi6dW48q9It7icjd4FKO3HFGsSk9GZ+0HhppGaSyjgRQuQsjJ1DeJ/HVSDUaVxsx1lTy3OoPck2qkwW7V75t6irn9+ZQEXO8YXTdX3H3hlYyKwiCARrG6hDHEWP/LS0YM3QojcSFFFFaAhhvq5e/t2Z5nUjAXy320JcXB9jbBwxD4MnkW0QLW2MqvjZLs8lWhDaOJJDCa8Qr/NUBpM/xcvhOZ/N7YRIvN+Ab3S1o X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(39860400002)(396003)(366004)(376002)(136003)(38100700002)(8676002)(83380400001)(26005)(6486002)(31696002)(31686004)(5660300002)(86362001)(54906003)(956004)(316002)(478600001)(36756003)(2616005)(66556008)(66476007)(16576012)(66946007)(6916009)(4326008)(8936002)(186003)(2906002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bm9KVEJkMTJiRG1tUnE3cFN6TkpnU1NubFUydkltYzBPYjFaN2Nwb2VnYXdT?= =?utf-8?B?bThuQWREL0NnSkRSWWNpQmo5VWxmV1dqWjQ4RmVUV2wvTHpDRTN0VVY3S1k4?= =?utf-8?B?dmtWaVFKZlZwWE9MSUtDc1pPa3hna0kxNHJ1SlN4SW51a1FPMitTQm56SFha?= =?utf-8?B?L3JjT3JrM1k2b1pDRnNCeFczci95cmwxaThpSHlFMlh4K2dnc0pFS0xJSitU?= =?utf-8?B?YzVSaStDRDdCaDlJelIwVFZTZ1EyWENRbEE5NWdhYXR4d2hSS1g2M1FmMkFJ?= =?utf-8?B?cnBpNDZ3aFhVZXFyeHpWWjh0UkllRjNVYVBKdlZDaWFvVlYzTkpvQ3VtaEZx?= =?utf-8?B?YUM3OUJxVHBCOFk1ei9DYy9HT29jOHV0eVIzN3pPNTlsbWJTY0JyU0FBcmxO?= =?utf-8?B?SkkwSlpZYWJZR0RkejF3a004aXhXOXY2ZjJVZFlrTW9sWFhkWkVndzJ0cnZ1?= =?utf-8?B?aHY2Sm11MkkyTE42K1VYZ3VEVk0yNzhLdkNpRWRoeHIzWHhsWmFXV0VETksr?= =?utf-8?B?NGVLdjBSdlM3ak8rcVduM0J5K2JlUk1XK1pyUG1qa2VySnhIQ2NMcjdVQmx3?= =?utf-8?B?SE54dTEyVldRSzBINlQ0V0ZiVy85dFZVVXBMenRMYUtwTkIrelE3Z1VTVUY3?= =?utf-8?B?K1A3YVRtYjVnS21sbk1yUEVPbEsxS3A1WDBDaFBmclFwdFpiZGdvLzArQ1Nn?= =?utf-8?B?T3JEUVRvbnVFZVZkczVxSjZ5QndOWUQ0VFNqRCtzRjFldFZ4dUFFK0FrWW9L?= =?utf-8?B?Tk5PWHNsZTF0ZHA5enY5dUhoS1E5TEwwS3pVQ2pZS3BsdGlENVFuQjBSVDhV?= =?utf-8?B?VjZIdjhKTFA4NEg0OHpLbVY1SHROMGE0T0NaOWh5Z3BiOS9Bb1pNYi96TkZD?= =?utf-8?B?Mk5iV3BieFBPanlwbDVkTGs5OENLYkJVWkRrWUNGelh0QW5HV05xOWRyQmVs?= =?utf-8?B?M0tibHRmQzFSeFJzSjUxK2xUNHNDcFU4MDQ4VnRKUjFELzUxU2J3V3VML0dG?= =?utf-8?B?aktYUEhmUzRDUHNJZTFTbzlYU2lxZUhuOFFDT2lmMFAwR25uU00rNE9TMU8x?= =?utf-8?B?Mk4vMW8rT0ZQeWhUSEk3eXB0ZzBXSWpTL1NwWW0vUlRXVDgxVk5RUTNBYnYw?= =?utf-8?B?NXFkZ3NEamdhRU9YbmdtdzIzK3N1aEM4OUlJQzBFS1NIK3YvRFk3RFlRdm9j?= =?utf-8?B?ZE15dW9mUDNrMmVKY1RIYUxVbWQya1JrY2FZc01mdk1pdjl6V2VRazBGbWYy?= =?utf-8?B?dTV2ejZtRVNKUmsvT1N4UkEwNit2TXNoWjlGUDlWVlZINHkrWTd6cnFtdTVm?= =?utf-8?B?MzAzWDMrbGp4Ynp3dWQwOC9xU1JlckdoUjVFL0twTmI0L09LWEVOVk5sejAw?= =?utf-8?B?cjFXMUR6Smh6Q1ZxZVp2WU42TWp5QWxuVGU1Z0xrd2FoOFU4ZFNDK0RwYzg2?= =?utf-8?B?K3VUa0dTV0pheTdxdFVKRjAyelZ1YlJCVUVoMThXYm9GVXY5MjkzVmtpWTVM?= =?utf-8?B?UkhvY3VzVi9lLzIvSXBSYXY3YUMxckFwbWxLSFpROElPL1Q3MGcxWDdRNEw2?= =?utf-8?B?SnRMT2UvNGNSYldvV2hFMExqV3dueGhrS2dqbG5raU9DMktaRlhIeWZFY3RF?= =?utf-8?B?bFdwaytsOWlhL2pqdDNweE1rdm1idTdLTzRvTFQ5bEphZXlMRWQvT1I3T1Jq?= =?utf-8?B?K3E0MENaTkdxdmdxZW4zL3M5dGJUUFROdU1Td0JSd2hhb2w1YVN3SW9UcnFU?= =?utf-8?Q?XECWTDys0DSTMdkhsDkp0tUJYtGtw6C+DYS/rBX?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 73ce02b5-3dfc-46f0-8df6-08d9670a9b42 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:22:30.2809 (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: P5FO5k9kw9BodPkSGAFMIW1l+nrDOxvRb7GeDG0jxkbbBWmIL9ib1+KZl2NP4ktgbHzh0u1S8AbRo0Y4zUuxnQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR04MB7841 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629814978054100001 Content-Type: text/plain; charset="utf-8" For vendor specific code to support superpages we need to be able to deal with a superpage mapping replacing an intermediate page table (or hierarchy thereof). Consequently an iommu_alloc_pgtable() counterpart is needed to free individual page tables while a domain is still alive. Since the freeing needs to be deferred until after a suitable IOTLB flush was performed, released page tables get queued for processing by a tasklet. Signed-off-by: Jan Beulich --- I was considering whether to use a softirq-taklet 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. --- 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 @@ -363,6 +364,85 @@ struct page_info *iommu_alloc_pgtable(st return pg; } =20 +/* + * Intermediate page tables which get replaced by large pages may only be + * freed after a suitable IOTLB flush. Hence such pages get queued on a + * per-CPU list, with a per-CPU tasklet processing the list on the assumpt= ion + * that the necessary IOTLB flush will have occurred by the time tasklets = get + * to run. (List and tasklet being per-CPU has the benefit of accesses not + * requiring any locking.) + */ +static DEFINE_PER_CPU(struct page_list_head, free_pgt_list); +static DEFINE_PER_CPU(struct tasklet, free_pgt_tasklet); + +static void free_queued_pgtables(void *arg) +{ + struct page_list_head *list =3D arg; + struct page_info *pg; + + while ( (pg =3D page_list_remove_head(list)) ) + free_domheap_page(pg); +} + +void iommu_queue_free_pgtable(struct domain *d, struct page_info *pg) +{ + struct domain_iommu *hd =3D dom_iommu(d); + unsigned int cpu =3D smp_processor_id(); + + spin_lock(&hd->arch.pgtables.lock); + page_list_del(pg, &hd->arch.pgtables.list); + spin_unlock(&hd->arch.pgtables.lock); + + page_list_add_tail(pg, &per_cpu(free_pgt_list, cpu)); + + tasklet_schedule(&per_cpu(free_pgt_tasklet, cpu)); +} + +static int cpu_callback( + struct notifier_block *nfb, unsigned long action, void *hcpu) +{ + unsigned int cpu =3D (unsigned long)hcpu; + struct page_list_head *list =3D &per_cpu(free_pgt_list, cpu); + struct tasklet *tasklet =3D &per_cpu(free_pgt_tasklet, cpu); + + switch ( action ) + { + case CPU_DOWN_PREPARE: + tasklet_kill(tasklet); + break; + + case CPU_DEAD: + page_list_splice(list, &this_cpu(free_pgt_list)); + INIT_PAGE_LIST_HEAD(list); + tasklet_schedule(&this_cpu(free_pgt_tasklet)); + break; + + case CPU_UP_PREPARE: + case CPU_DOWN_FAILED: + tasklet_init(tasklet, free_queued_pgtables, list); + break; + } + + return NOTIFY_DONE; +} + +static struct notifier_block cpu_nfb =3D { + .notifier_call =3D cpu_callback, +}; + +static int __init bsp_init(void) +{ + if ( iommu_enabled ) + { + cpu_callback(&cpu_nfb, CPU_UP_PREPARE, + (void *)(unsigned long)smp_processor_id()); + register_cpu_notifier(&cpu_nfb); + } + + return 0; +} +presmp_initcall(bsp_init); + bool arch_iommu_use_permitted(const struct domain *d) { /* --- a/xen/include/asm-x86/iommu.h +++ b/xen/include/asm-x86/iommu.h @@ -136,6 +136,7 @@ int pi_update_irte(const struct pi_desc =20 int __must_check iommu_free_pgtables(struct domain *d); struct page_info *__must_check iommu_alloc_pgtable(struct domain *d); +void iommu_queue_free_pgtable(struct domain *d, struct page_info *pg); =20 #endif /* !__ARCH_X86_IOMMU_H__ */ /* From nobody Sun May 5 23:17:00 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=1629814994; cv=pass; d=zohomail.com; s=zohoarc; b=c3Iu7TNWiClIiT2H6FvMLtIjl+DwnrIUF7ONwfMy4CagLCH2HKqC2iO3jvPuCc++k4peI2PzSzQnvRUyJpniRLaoO7/ySj5ngLeEkT5tRTF/gRXldf6faqtc2eNm089WnLHA+Meu+tBBiQIxAvEcX8qaHbmIDWej5ieWoghNppw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629814994; 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=YHr+CH5Pz0j1yX5jp8hrrxKCetSkHo6HQeq3jEu7QTM=; b=fBEffDqOqbfj6bGd881VXFqu6dl6Z5nsU9OMHFr3xg6P9F2c7vE4riSlLvaPICdh5LVTvPofztq+v3kqiqlazivMcge7T7o07oK9ChNp9EFpElrK0d/qW50jLCOOmPRU61WQVvstUkMRNIrkAlrzmXhq/PhuiLQeLL/avRgSVQc= 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 1629814994733423.3993731895582; Tue, 24 Aug 2021 07:23:14 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171470.312909 (Exim 4.92) (envelope-from ) id 1mIXKM-00011w-UP; Tue, 24 Aug 2021 14:22:58 +0000 Received: by outflank-mailman (output) from mailman id 171470.312909; Tue, 24 Aug 2021 14:22:58 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXKM-00011p-Qc; Tue, 24 Aug 2021 14:22:58 +0000 Received: by outflank-mailman (input) for mailman id 171470; Tue, 24 Aug 2021 14:22:57 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXKK-0000xB-Vt for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:22:57 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id cce54cdf-c594-474c-886b-f21006515829; Tue, 24 Aug 2021 14:22:56 +0000 (UTC) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2057.outbound.protection.outlook.com [104.47.2.57]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-29-wog-5mtmOp--EWstW0iixw-1; Tue, 24 Aug 2021 16:22:53 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM8PR04MB7841.eurprd04.prod.outlook.com (2603:10a6:20b:244::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:22:53 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:22:53 +0000 Received: from [10.156.60.236] (37.24.206.209) by PR0P264CA0209.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1f::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19 via Frontend Transport; Tue, 24 Aug 2021 14:22:52 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: cce54cdf-c594-474c-886b-f21006515829 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629814975; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=YHr+CH5Pz0j1yX5jp8hrrxKCetSkHo6HQeq3jEu7QTM=; b=cwGIeEdp6rz/ULXfkoS7UJ9ZndHRjDZ97K1pD3GORcrI9ixCIcuRkD5FiAC/iZePU1Sqf0 NRXBhsoAOca/kYvcQicIbCm28/SVuwdmQ62AS8GEPwxN3GcM9hltejPviDMHwYggkiJSFw B+4+emgKn5WJ4MJ4DubgduJg3ztnbCA= X-MC-Unique: wog-5mtmOp--EWstW0iixw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OQF2sDF2mtee0at7lvVtM6YUPkLPfpdLAJWjd1Jj2oV/AT4KNz+ld9crXPk8GuaCZhnslGkHKZTSt9wImDRsxEro/e+cHVPKEETyAftdjLU26wNqOJH2ARqJvSmtWk2uac3YY3A18TmxnWa2WVODUYtt2mmfev3iIdSjNmDwWAXhs9i++Ci1m8iMryJcHxuq6AWfkmoCj968jcT9HiAevd+FCh3AZXB4eyEB087/N9qXpSoGO+dw4PJpUfbRAmmPL0oDWhU/4KPsj6hqKtyFqvuj7OuthRWYu70s5OuHEt8Z0hQlsLBGgjyk3OFvpApmQPS4g4VVjpDielZvLsHW4Q== 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-SenderADCheck; bh=YHr+CH5Pz0j1yX5jp8hrrxKCetSkHo6HQeq3jEu7QTM=; b=A2FVjf8y3TsRzNCJ/+hY+xGT0WisI2hYPcZolfX2inUkFDTiKcCmynYcte9pFKL9awGWS4K+VByyU7Dl42e6d2fxpxc3U7Oey6fCKxW+KfI/84XFtXhp+SffNa/Xa0gCnSoJEVpE9Gsqy+ykDy/dpYhRoxmNIxcy/RoX/P5MM3UlvYSOR7ShpcihYZ6MNVdpKJ8RRCiMgzyRWwt4E3cAED/udwJgdaE3oDlxEnsU0QU6Irf2Xjy10+JG2BBGKBdPsUufy12gq2kuebes99ouwHLlUrruAxyMz2JBlOotpj3vYvt15hjDXHfAe6dZwNHAaiW1fRF1xy+Ij2QyUcFRIw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 10/17] AMD/IOMMU: drop stray TLB flush From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant References: Message-ID: Date: Tue, 24 Aug 2021 16:22:51 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PR0P264CA0209.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1f::29) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5f0806f0-de44-460e-03ea-08d9670aa8ca X-MS-TrafficTypeDiagnostic: AM8PR04MB7841: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bPkW+/mT7KGsZKB7kfJucvRCTOF+i6xQ49NVi4htL9Wc8gAunDux1k0KobMxOcOiRKkSOCLVz3hgMBatq8rkwCAB9UZt7kpNcnuC7Vs4iUrfjDFh7MW5pBljUkE8pmOYFlEwl7MQV7Y3r87o/bo5nNecl4uv6CpU8OoL17dBPGKP+78GbJklEDW6e58NW9npCJFV/tujXhSX3fYBbVJHoLdHYrJas89lsUvKAPIxBFGkQzpSW3jhwjU+RX+ABnn45rm4VBl0MoQi8oqd5hAgRMsKkmL/X5gDDiHskWIhCp/FwhJJaIGe5/7QxZG8vTuu3DjG2l3Zkmtaf0zMWl/Or2S5H0tWwpOIeeUKdVBZJfxahYYBIGiWuLW9+/zA9yEaYpzfWQ3bpd8w4tNuWkT3j0wNz7kQJlTZUvwutqpW38oh9WxpRivHi4ECv2beMQ2953N3jCpH73KhGZimAD7K2wzSyqPs1LmXRorkL723coPgYfRbJ5A/DMKUwTFCBePwuYoI9tre5Ttu8x4FIyNKaHxkpvIGh/4iE+3XnlvjOBNfEGWDZRczOiPHLV3wCjSihMMnZ7MFE5NKh3RweU24jV270f0rJYCu3L1nfU/o6Xt5NcdeSbPTnGjdjv8vgF7bQmSKjiLtywuCEzoNI7Z9XXFehbwXdlIrfCyFbnOqOStOmds1ELowXzj7yr2SY+coIdtUZqpgTDHOuvonbs5r/LV/L93JBNbc7t7kL3P8IZY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(39860400002)(396003)(366004)(376002)(136003)(38100700002)(8676002)(83380400001)(26005)(6486002)(31696002)(31686004)(5660300002)(86362001)(54906003)(956004)(316002)(478600001)(36756003)(2616005)(66556008)(66476007)(16576012)(66946007)(6916009)(4326008)(8936002)(186003)(2906002)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QkVEQS9YRm1xYUNkUVBOUjJpU1pNTDdjdzZGekdDcjQ5UXEyVEtoOFdaOGdj?= =?utf-8?B?bzlzSWlJK3BLQ2NtVE14amE5b0QwWUdSczBGcU1uaEhrWkZodmdwMzZHaS9r?= =?utf-8?B?YjZyandEY3AyQWEzTGNXRkU5dDhEa1RubVNwVzJjSzZxZVRvOHE1c3ZYdEl3?= =?utf-8?B?WE1YR0owQkF3WHdrVnZlZjYyT1NVUEQ4SkIwTURuaVhRSmsrcndiWGQ4L0xl?= =?utf-8?B?ZlRmSkZGdHRjYktDcnpKekcwdngvODQvKzFkK0JrMEE1SThEZ2dzRkNzVjhT?= =?utf-8?B?NFlWTzlua09XVGIwSkhnbXQvV3B0RlNQTVora1I1NDZVTy9KSm5LSEREdk1j?= =?utf-8?B?bE9wb3dNRWZBQWFWb2lJMGcwVTRnRjBGRWNxN0dXSlYxV1BpVEhqbHUxTU53?= =?utf-8?B?SUFIcWhuOU5ac3F5bG0xeFB4MExIMDcwZHVXMEtyclFZVzkwa1pLZnl4aVVG?= =?utf-8?B?WVdDZDJvN2FEY0hMd1ZNT3Y1ZTZhZGF6czRmRmptUkVJUmdicEh1LzVUVkpE?= =?utf-8?B?SkdxWlR1Wi84blB6UldoSXczQkprL1U3VDdudnFsSUhLanJYVFlERkU5aXVV?= =?utf-8?B?a3hDQ1ZyTW85RXptQzFSdHN5Z3RjTVdjV2ltRDdRUVdrWUdYa0RGOUlxc0NT?= =?utf-8?B?YnE2Qzg0SlJJTEpVZ29WK1VqRVFLaEREU1BCMzRoVG94NFJMbkFKQUkwUlZB?= =?utf-8?B?YjNHblFzZnRLTEZhQno3WU9pZkRWZURqdU9USlRjanZhUE45aDZBT2U1NmlO?= =?utf-8?B?ZWJqeVVXKzY3SG9DT0pUaHkzbTNkTit0alJ4alBCcWF3L1lHRmllajBLalNj?= =?utf-8?B?SDF1Wjg1dE1kajFUejEwVHUwRk85ODd3UTBuT1EwNzdHbXNrV1I1Mk9DaVdM?= =?utf-8?B?YXl6VzlVZFJqV0FnZW9tTHpHbjMxQndRYTJ2RysxTUVSaEV5V25WVUVtbnZw?= =?utf-8?B?THZXZWpad2I5SjZIdWJFdXZ3OFhDeDZpVjF0V3k4ME0rdGZodHRJZWZGMWF3?= =?utf-8?B?NnVVaDlRQWIxR0J6TTYrMWdISnNQZGNsY0FMaDk0Nlhob2FvMGplRC81NDE3?= =?utf-8?B?MEw3UUVsaVZXUEJjYnhGYUszc0lCR0p6Zm9KRDNVb0NaNGg2OXBqVVl5MGtR?= =?utf-8?B?QlhMa3dMUkJ0NHpTV05WaFVrNHRVNnpIVm4vVldwMUtUNXJLSklYRmUrR3gv?= =?utf-8?B?dzhLN0E2UWZNVGRhNnAwbnFZMENTMmhHbHVJYWg1MWZUaW15TWdHRzBhTzd3?= =?utf-8?B?NXcwRWhRWTROMGNZenZydU5JMFBISXkxZE9tZ1phRmJZM2E1dzc3UDJxMnJM?= =?utf-8?B?THpKQUhVY1NhZEpBZ0F4VUVkcnI5QmFrckRSNXc5R0craXQ3eEJuaHJTNHMv?= =?utf-8?B?eWU1Rk9OM2NuN2RvTVZWRmFjeDJScHZsSW1KOXg3bHJJclpCTkwwS1pkTVZz?= =?utf-8?B?KzhmM2EyODR3VWNNVmRNWU1nbkw4dXhGa3hiZnhNaktmVFVXOTMwNFkreHNH?= =?utf-8?B?K2lIeGNXaWJ6TExUVjkwMWt1bTJRcVErY1JMdkZwUDQxSmNYb3NzcXRpdkth?= =?utf-8?B?WDI1MmdMRVpEOXJ1K3dRUHBhMkgvZlRGTEJBclk5OSttMWJITmZ0WUVEeDJK?= =?utf-8?B?QmJaU1VUSnRlR3Y2aUNTUGFzamJJT3BqNVFTcjJOdHphdGQvZGxsTnlzdmNt?= =?utf-8?B?dkFlN3h6QlhucnVMZTRZWTc1bkJnbWg3V0JFalNhaDNjL0UvTkoxdmlRb0FN?= =?utf-8?Q?yBf6sYo5Bo20486uCXeSesICmmbGS7DUc63nP7x?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5f0806f0-de44-460e-03ea-08d9670aa8ca X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:22:52.9910 (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: Ezzxh3R+sjU7YwhcSzQM+MZYAOwMkyPyoizxoAiGnrFEfNpEM1fCCRRi3dKH+/pKX/VljPGqQ7KVHbS/zanYdg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR04MB7841 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629814995374100001 Content-Type: text/plain; charset="utf-8" I think this flush was overlooked when flushing was moved out of the core (un)mapping functions. The flush the caller is required to invoke anyway will satisfy the needs resulting from the splitting of a superpage. Signed-off-by: Jan Beulich --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -179,7 +179,7 @@ void __init iommu_dte_add_device_entry(s */ static int iommu_pde_from_dfn(struct domain *d, unsigned long dfn, unsigned int target, unsigned long *pt_mfn, - bool map) + unsigned int *flush_flags, bool map) { union amd_iommu_pte *pde, *next_table_vaddr; unsigned long next_table_mfn; @@ -237,7 +237,7 @@ static int iommu_pde_from_dfn(struct dom set_iommu_pde_present(pde, next_table_mfn, next_level, true, true); =20 - amd_iommu_flush_all_pages(d); + *flush_flags |=3D IOMMU_FLUSHF_modified; } =20 /* Install lower level page table for non-present entries */ @@ -309,7 +309,8 @@ int amd_iommu_map_page(struct domain *d, return rc; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, true) || !pt_mfn ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, flush_flags, true) = || + !pt_mfn ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_DEBUG("Invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", @@ -342,7 +343,7 @@ int amd_iommu_unmap_page(struct domain * return 0; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, false) ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, flush_flags, false)= ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_DEBUG("Invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", From nobody Sun May 5 23:17:00 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=1629815067; cv=pass; d=zohomail.com; s=zohoarc; b=noRyFUlEUb46TX/f8x49FZhIqdAz6ZKWhuAJqs99Ggu285VRHdN9W832wmOtCdjH+HMrBU1nKt36YFoq+8iD6k/RQNOfyYYxcGcfP7O/z8ylG2bKACQCY2Vp3UoGHGf2bxYqCrGEEGS5swquAmsuuv35UV/LvVdd0RuZ+TRBeoY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629815067; 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=0KESrPG7AH4RWYD4JfplIzBCHkC6romhn7Gu1QPbq3c=; b=BYa9M+ee2unv8dFQS0Sj8fcnKyy6TXJSfUpZq5MF0rmEIQsmpRGX08JwIqsxXMtDi/YN8gr7S9Emx8B5GPArGX34Nf38f43hogPXgWyVDe6JuB0CfFDxaMwFdjyFvGrQ692leZXwt0DaV/u88jotfyQry79f60A5LElQArXgK08= 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 16298150672921009.0254866240781; Tue, 24 Aug 2021 07:24:27 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171482.312920 (Exim 4.92) (envelope-from ) id 1mIXLJ-0001i7-8a; Tue, 24 Aug 2021 14:23:57 +0000 Received: by outflank-mailman (output) from mailman id 171482.312920; Tue, 24 Aug 2021 14:23:57 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXLJ-0001i0-5Q; Tue, 24 Aug 2021 14:23:57 +0000 Received: by outflank-mailman (input) for mailman id 171482; Tue, 24 Aug 2021 14:23:56 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXLI-0001hB-MM for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:23:56 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 59aaa45a-01c1-4ca2-a580-3cbfb9cb00dd; Tue, 24 Aug 2021 14:23:51 +0000 (UTC) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05lp2107.outbound.protection.outlook.com [104.47.18.107]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-23-jHF9keATPpOOLyfkz10sXA-1; Tue, 24 Aug 2021 16:23:48 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB3970.eurprd04.prod.outlook.com (2603:10a6:208:5b::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:23:46 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:23:46 +0000 Received: from [10.156.60.236] (37.24.206.209) by PR0P264CA0121.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19 via Frontend Transport; Tue, 24 Aug 2021 14:23:46 +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: 59aaa45a-01c1-4ca2-a580-3cbfb9cb00dd DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629815030; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0KESrPG7AH4RWYD4JfplIzBCHkC6romhn7Gu1QPbq3c=; b=e2RrG5vPDeeNhihu/jj0U+wfb3Jw4l+UD5BhyVYxoaLOkDwUsqtBv3ShFvpwBfLrz9/Q65 2Gh6SSBn1KwwnbTPM/S7xzb/LaahzwIcR194xpjYPxA0yVNnuGa6skdEliJGEe56AV36Mi HOJCBeT0Y7AC7MvESoafCHof0/XgQU4= X-MC-Unique: jHF9keATPpOOLyfkz10sXA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cjEl0CAVxWmCAqitmHqQNrj39Gbb57rWnJhQfH+XPG7EOT1G0nXSHirO0tQSNb7z+thhEwSUHz6gdWhVrxGL300Cttm8vyBI9TVoGsErHE/CUIUSvs/DFdKmbI/QeT0qtIeF4t50JWC9n0ySJt26+nTaH6CyFuH7ox5/MJK7GlUDMYMXD5tZE/Kv3jCdgGmGkreKYlbpFuHuPjO4Mxb2WJTo9P9ti+wPEq3MGT/VAxnSgf6gPYRSdlL5/MJdcyU9uO1yfTS9mV5xj9p4DNgJTfkzSb1unelE1FO/TzmArIzw+zktsqozT1idrMKu4Eis+VaYoaGZctmIDhH5RzZlMA== 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-SenderADCheck; bh=0KESrPG7AH4RWYD4JfplIzBCHkC6romhn7Gu1QPbq3c=; b=Qz+k8ycZBtNcGhQnIke5K/cPT+3vIEPflZppeWyzH9RoLP/JY5Nmd6/uy6toUwvMlXTSLs2c8NxdrgSCTcxqtNza2QJZ1UB3mFJuMIEjYfQ/8nrWUy9y1+z9K8wPUV+sjEayvvHX1A9G7DWjYikJaPr2cPZab6v46Rnk44yxAoVp7BKHSkqhZxeJBQcFi+5Cp+f49UV+y9XaQWU42uQQUC10D/ApfQKFUPSseZPM1QqGR+Xsfj8pJiI0LDSm4kXA7lIl1i3X55kkjTyhY9fnNdyvBV2SULHmvVAM8x/9lpYhERL5wGb7fzhQFNnEmr9i7kPluRm2MPwPMCwlyrXH6A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 11/17] AMD/IOMMU: walk trees upon page fault From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant References: Message-ID: Date: Tue, 24 Aug 2021 16:23:44 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: PR0P264CA0121.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1a::13) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ed7bff5f-2cbf-43a4-35fe-08d9670ac8bc X-MS-TrafficTypeDiagnostic: AM0PR04MB3970: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:989; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: M5gaHb/MdzLw1nGkogOnZ/pWhWkUXvKqvMM1F2DoFh/IPHCC2v39zpNIDN43RnrWjMkak3QG0sow/yYfnNBmuDWCasZlRxCR15id9QBvFaVSBl1V8L6BxAHpuFGuH3+DtgAkEV3ZmmAy44fMo8tdmP52zGXptzAv0cfs5jU8nFv/FUnfhDfarg0461k4xRMGK3XmDva9gu+wCtsyE4vuzAg8Ht0BgQleMzpWEjJWdEAk3EAv8n8Pt40krV9AMM/N/j4Q+smCEgjtqqAEzSxscqkZNlxoy5pVttwpucenMxrRJHZVXcew4fjlpbxOJ3WcIfP8Qn54ymZ3gMiNA7VMM+wiD/RYxVChlpOcPGWM/3tIju1YVL03OKX71ilytjWfUv1kXDaggn/HKiicr9GeVlS2xiAzVoviy28dT9uykQM/ccoUdbFFAUjsLfgSzcQWahXvGIFnbbiiH5ttieBLaskxZae9VfGaaXGnqouFld8kq6JdQgGdDe//Ig4esMQVxepP7ar2FhNXvJq8wv60NbZSEgS4X5uYDA46c6lwZR27p4UruVFJ2YUt05kAY1goQFGrA5KX/KkT0ZdJTW7GAaimld7694hVVCjZ9DypeIfX4nL/k+NU02e0qdCAnOcpqMYRoUyNjEXn+ICigD+xklOXS6M5WVRLy56bxwGBVnMyKV/rUTHJcGCQdOrd6RcDJKOP3ToFW6XpyCcFInWsjlseJt8fFdAuw0ZWcm31ct8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(36756003)(54906003)(4326008)(8936002)(86362001)(31696002)(26005)(2616005)(8676002)(508600001)(38100700002)(6916009)(83380400001)(5660300002)(956004)(316002)(66556008)(66476007)(186003)(16576012)(66946007)(31686004)(6486002)(2906002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QTRaNTF1WSs3UmEzVzZoSEY5dHdjamJuTXRBSjdVTVpaOU9MN0llaHBoRldP?= =?utf-8?B?b3plVHJyN0praFpvdHZNSGdhU2UrVkh3MDYyaW5Fdkp2bnZsS3JCTWtJM3Vn?= =?utf-8?B?clFEUXpCdUtsRU9KSU5UM2ZZYzlpT3JGcWExbjQ1dSsyR3QvMUI3Yk1EcjFO?= =?utf-8?B?RTRHamVra1VwQjNocFlHb1Q4dmlMWFhmS2p3bWpsK3M1UHZ0dEpjaGV1eXdy?= =?utf-8?B?Z1FpSWpaKzhNcWI0eW1DSzdlVlgrUXRPZVBGdDR6alZ0ZmdiY2IwR20zQ3ZE?= =?utf-8?B?c3BaN2JTcUtVWEJYTWx6U1B1YXhKNWZIaEhvUEJSNTBVbUJOdWNHQXZxOC95?= =?utf-8?B?NFB4TGN3TG1HK2xxL0FETkhRemZuM21LRHBZY1JuOHFXakFDdXVTNDYzMUg1?= =?utf-8?B?UnVUOWIxVDdoZlBSSy8za3pncWRoaTBuNEl0ZUFTdUdZQkVUOFBEQ0p4M21G?= =?utf-8?B?UjF4UU1neEJQOXpwdHFzLzBLS2ZhWS9ualhHUkxoRlA5bG44ZHZIKzBxaHcv?= =?utf-8?B?WllId2kxcENmZkQ3YTUzaHRQVHRtanNtWnpJa3ZsZzgzL1lDRGZIVWZVZEE4?= =?utf-8?B?aGI3UUdOKzNVUDZ3aVpaRlV6WUQ0a3VNK2VoQU0yS1dIellwNnhNVGE3ZzIr?= =?utf-8?B?WnVKQktLR3VuLzduOURTajI0T08wV25lVFUwZko5ck5IYUpqNUg1V0NQcXlQ?= =?utf-8?B?M2xKc1dWWFArd0dZMjZuZFZ1L2h1cjJ4NGJUM0h0d3pndXZtaHNRN2Y3ZTln?= =?utf-8?B?cTBNYXZ5OWlGdCtsNmZHSDJ4eDRkUVJ4alpPYmlBTUJmd3QxYnVPUlEwZmRk?= =?utf-8?B?UDlhU0x0Z2luTmpiRmFNYm1PTzlBRDUvV3lkbWk4NGxEcFNOOXRwVnVoeWdY?= =?utf-8?B?RXZIMGRLWDUxOG1IcUI2WU9aL0tOZ1hPdmkzdEVHSjk5aFVmcVJlZXF6a2lD?= =?utf-8?B?QnBqWG9mUjRINTQ1RFVjV3ZLMEFSd0dtSlRtMERsY0RjK2IwM05ka2FtUkRM?= =?utf-8?B?TnNad2JySkNlTm9FbXBkRzJoazJNOVBYR0V2K1JCajNxb3gwakpiT2FTQWFW?= =?utf-8?B?WTRENUxrc2dtZ1MrbmVPOVVyZ1M2NEtzZ00vTEE5S29Ba0xXRXdTZVVPOXpN?= =?utf-8?B?YkJOT3FqSjc0WXE5YncyNUVxY2ZTNkxlZGxRZSs0VW1LN2p4Zi9GN2gyVVFT?= =?utf-8?B?UW9ZOE5QalgwVzdyQXk2dXJVcHUwbGZnUE5tcmFEelJzQTR3M3VLRnMxVXFU?= =?utf-8?B?ek1aY2M3SjZ0d1NBTVRKZTJLU2dlMk5DUUJUUm1QdjlwUzFBd2JLRFBHTDVO?= =?utf-8?B?MitCZlZVRnBxa2lUUFRkTk5XekRKRUR6N3ZwMlFHM1FHQ3I4UjRPQnpDWm5G?= =?utf-8?B?eE5xYS9EK0dTUWlUalM4Q1N4azhxWnFtTTAvYTdCRE9HYS9NbGR2WCtCTm13?= =?utf-8?B?elJHV1FTT2tONGJHY2JQTTRxTmdXQ1Z4T1F2UUxDTWN5Ny9DaWpicnhMdWhK?= =?utf-8?B?bmR1cGlmbjMxZFdReks1ZExtMCtxN1JUTjMrZS9va2M5WlBNeXZsS3RQTXFu?= =?utf-8?B?S1lwV3BSWER1b1NIMktrNmRYazhmaVluVmo2d3BJUEt6Tm5tcTM1REJyRzBL?= =?utf-8?B?ZEtENWFyeXRibUtjbGRRdCtkV2NFTTZkdDNzWktGTzVYdGtRczM1T3VlaUFq?= =?utf-8?B?bXNpVWErc1ZucXpHZ0pncmFZcVlJb1hRZjZXelBFSkZYYkY3WERiMnVuVDdR?= =?utf-8?Q?yyrJf1hrkaG48xDCMA+9l6TTwpU47g/0Z9cH6OD?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed7bff5f-2cbf-43a4-35fe-08d9670ac8bc X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:23:46.5756 (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: 8SHSBeRV7fKEwvM0mimcyHWV+zAZgUUFzAUm3dPYl91INd9nPD1zXPvIY9P4mvxfujS7Tpyx86SmlcDUMt1H3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB3970 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629815068858100001 Content-Type: text/plain; charset="utf-8" This is to aid diagnosing issues and largely matches VT-d's behavior. Since I'm adding permissions output here as well, take the opportunity and also add their displaying to amd_dump_page_table_level(). Signed-off-by: Jan Beulich --- a/xen/drivers/passthrough/amd/iommu.h +++ b/xen/drivers/passthrough/amd/iommu.h @@ -235,6 +235,8 @@ int __must_check amd_iommu_flush_iotlb_p unsigned long page_count, unsigned int flush_flags); int __must_check amd_iommu_flush_iotlb_all(struct domain *d); +void amd_iommu_print_entries(const struct amd_iommu *iommu, unsigned int d= ev_id, + dfn_t dfn); =20 /* device table functions */ int get_dma_requestor_id(uint16_t seg, uint16_t bdf); --- a/xen/drivers/passthrough/amd/iommu_init.c +++ b/xen/drivers/passthrough/amd/iommu_init.c @@ -573,6 +573,9 @@ static void parse_event_log_entry(struct (flags & 0x002) ? " NX" : "", (flags & 0x001) ? " GN" : ""); =20 + if ( iommu_verbose ) + amd_iommu_print_entries(iommu, device_id, daddr_to_dfn(addr)); + for ( bdf =3D 0; bdf < ivrs_bdf_entries; bdf++ ) if ( get_dma_requestor_id(iommu->seg, bdf) =3D=3D device_id ) pci_check_disable_device(iommu->seg, PCI_BUS(bdf), --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -363,6 +363,50 @@ int amd_iommu_unmap_page(struct domain * return 0; } =20 +void amd_iommu_print_entries(const struct amd_iommu *iommu, unsigned int d= ev_id, + dfn_t dfn) +{ + mfn_t pt_mfn; + unsigned int level; + const struct amd_iommu_dte *dt =3D iommu->dev_table.buffer; + + if ( !dt[dev_id].tv ) + { + printk("%pp: no root\n", &PCI_SBDF2(iommu->seg, dev_id)); + return; + } + + pt_mfn =3D _mfn(dt[dev_id].pt_root); + level =3D dt[dev_id].paging_mode; + printk("%pp root @ %"PRI_mfn" (%u levels) dfn=3D%"PRI_dfn"\n", + &PCI_SBDF2(iommu->seg, dev_id), mfn_x(pt_mfn), level, dfn_x(dfn= )); + + while ( level ) + { + const union amd_iommu_pte *pt =3D map_domain_page(pt_mfn); + unsigned int idx =3D pfn_to_pde_idx(dfn_x(dfn), level); + union amd_iommu_pte pte =3D pt[idx]; + + unmap_domain_page(pt); + + printk(" L%u[%03x] =3D %"PRIx64" %c%c\n", level, idx, pte.raw, + pte.pr ? pte.ir ? 'r' : '-' : 'n', + pte.pr ? pte.iw ? 'w' : '-' : 'p'); + + if ( !pte.pr ) + break; + + if ( pte.next_level >=3D level ) + { + printk(" L%u[%03x]: next: %u\n", level, idx, pte.next_level); + break; + } + + pt_mfn =3D _mfn(pte.mfn); + level =3D pte.next_level; + } +} + static unsigned long flush_count(unsigned long dfn, unsigned long page_cou= nt, unsigned int order) { --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -561,10 +561,11 @@ static void amd_dump_page_table_level(st mfn_to_page(_mfn(pde->mfn)), pde->next_level, address, indent + 1); else - printk("%*sdfn: %08lx mfn: %08lx\n", + printk("%*sdfn: %08lx mfn: %08lx %c%c\n", indent, "", (unsigned long)PFN_DOWN(address), - (unsigned long)PFN_DOWN(pfn_to_paddr(pde->mfn))); + (unsigned long)PFN_DOWN(pfn_to_paddr(pde->mfn)), + pde->ir ? 'r' : '-', pde->iw ? 'w' : '-'); } =20 unmap_domain_page(table_vaddr); From nobody Sun May 5 23:17:00 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=1629815082; cv=pass; d=zohomail.com; s=zohoarc; b=Mx2HcMj21ucSXnG9FtjgOM2spie7gg7OH2ZR47p/0kvcCXLSs42iccv/qq4YS9ktlTWw5Io+t+GAGhvqCZhIr4H/TauAZ5v4vvW16Lz9skEJER5xO8GNDOM2GLFtVMMC7QZDDH2QZmFi9q6zDoLaDf0CktHaYZi4nF01uBaRr3w= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629815082; 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=QnyJfGA//OwEpfHeLio8RibL7MiCX+yG5T2utpneOsU=; b=AUjolhvKL7kd/7QL1rl+ohYtu6vlLIlE2Wc5qJYrqk1prsqLkiX6Q2/jR8Dz8S7MgKw8G40//Oxd/UKP+k/5gK5eb/G+UITOmo/bu9N2OV7BizlH7Y9L2hK6TwUZPtHgFyiQ+3eFk7/TcwEm/0HPiPAXEBBYdq601z8a/oni4wM= 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 1629815082679153.8364490576023; Tue, 24 Aug 2021 07:24:42 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171486.312931 (Exim 4.92) (envelope-from ) id 1mIXLh-0002JI-L5; Tue, 24 Aug 2021 14:24:21 +0000 Received: by outflank-mailman (output) from mailman id 171486.312931; Tue, 24 Aug 2021 14:24:21 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXLh-0002JB-I7; Tue, 24 Aug 2021 14:24:21 +0000 Received: by outflank-mailman (input) for mailman id 171486; Tue, 24 Aug 2021 14:24:20 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXLg-0002GU-AG for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:24:20 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id f76ed428-04e6-11ec-a8dd-12813bfff9fa; Tue, 24 Aug 2021 14:24:18 +0000 (UTC) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01lp2056.outbound.protection.outlook.com [104.47.1.56]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-34-ly5AUsXZOeOtpZ0n4Ay5Ew-1; Tue, 24 Aug 2021 16:24:16 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB5682.eurprd04.prod.outlook.com (2603:10a6:208:131::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.24; Tue, 24 Aug 2021 14:24:15 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:24:15 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM4PR0902CA0013.eurprd09.prod.outlook.com (2603:10a6:200:9b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.17 via Frontend Transport; Tue, 24 Aug 2021 14:24: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: f76ed428-04e6-11ec-a8dd-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629815058; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QnyJfGA//OwEpfHeLio8RibL7MiCX+yG5T2utpneOsU=; b=ek6aSuGlH4GyBpocccklfOskI6S6i321K/k1mdTwXHTXddcNuT60rOevxUwxHhWqkRfvk/ n9/6RUW/NdcR3U7kfWBmzZYinBu0P+9VBe9wXx/Apqf5lCuBrvTeZh0WIQLucqMMbnZoIh g27liBFGwo62Ohr4pACqfUv/u/ZOstU= X-MC-Unique: ly5AUsXZOeOtpZ0n4Ay5Ew-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JbyJYrkvYGpKk/ZEaAN1S9axnvcbIW5KQ0vRmO5mff7hHNYRwOfyjV3TasuFuyhvrdIFQzto448wRYcAC0f6IW7PL6i/+dTxHIrRUnie56Tv7UXTfhkq6PYtbNBGR5yL0HDlN3Tj9Awqzo+sZjZGRxswWquqArAsPawM7cNIyJKwou+D3YmAhG00EEf7a2788mFCuGhUC0JoHtrkiOFa3zIKw2QgzXlTH7gbxPm+wayd8GRC2pFS2KgZfNVdbZQhU6qsLnucllFnVUcb3NZzfvJnfushbkkYdNBgg9XV0FsllLCdjtus2jlK81YdbCBDjbd5lvjt7OSxbjZp8QcYAQ== 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-SenderADCheck; bh=QnyJfGA//OwEpfHeLio8RibL7MiCX+yG5T2utpneOsU=; b=DICQHpT7jnXR2fOHZiApwf3lb0V+N2C5TEfegZpQImR2elNxI45iGFCr3+5DcQ6WCX2dIDKS83NvYcOTaH1Svu3OLlM6oprN59z1lgZORYC31YwrzAyocS8kFdWf7Ck8Yid4rkQBUietHaOoFFIrnmXi4nupTar4HBO4opoQPvpPHJP3dv5/A64umzgdoNI55NbSXrBZ0wChtoa37bEslbCi/s4P8JMkz2vs4NPfkxrUafaSFui2hK3YT1oV7pSzr5BW7jd3E0osfrcZ0f8uOCCfX4eL5GDHb7mfcCTYcWPuK27hczO76/PNoS5KdT65sk32Qc/QFfBiMjToN1AV4w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 12/17] AMD/IOMMU: return old PTE from {set,clear}_iommu_pte_present() From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant References: Message-ID: <91f353cd-09ae-247f-d14e-7796cfe8d3e9@suse.com> Date: Tue, 24 Aug 2021 16:24:13 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM4PR0902CA0013.eurprd09.prod.outlook.com (2603:10a6:200:9b::23) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 58776727-fd6c-45de-708a-08d9670ad9a3 X-MS-TrafficTypeDiagnostic: AM0PR04MB5682: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: fQhh78GSS5YrN+LNRQ9c4R2Vxe+1ZqyBIMG8zUktD1pqQW2/8ImHmtqCuCuQ9Zmp4SOGU2XbAPfDtsTt/0Ru4IcD69aVn7ryiZdLofmRoqtn+c0dV6zcyadOSqloimKuPQsNUaJb7SYrWJA0pLOUGERpBoZwMbypQWFDnr4hu+H39mhnZAw4JpOh2W4unsxPu3GUL6O5N1+cMGLZsOKERWszHzP3r44cynB1VUkpEqKBjPlh7ju3d8IUsz5kXwmntT2r/dXzgcm3PNFc2q43J8a+9k0wcIWREs6ibhWq6n0ck1sfTbNuNQpZbZ+5LcMvthdvWwH7GtZb1VqY53Oz20Ex+SvD/Comu/Gvr73HwLRd+AJ9slJH91O/9id6AkDVI7u/uBxDlh2XdB2rzzOOM7Up0yreKoMKa0E7/BWMeUPP9vxduqGHjezVRPN7Wxk3DFO4WbWwx3fPDFYYkeRBz9XmBYFAqQeDoYPlzhzzuyUM3zxpN3RenLfW3COH34pbABUn27HjJThQ7oNo4VmYRDrv1EwlD3i/qhN/Vt3dLRqlGXZfwnhclgmAQqj2Ix9BLet6Dkd2aj3m6IZ4ry7m29jQadgUNLiFOEuGHLlzvZEIj/l69VRqe3uLeUzN9HrNLtffJe8822vqhN+eMqS/Qj6GfO70evffOXCDAKhm0DW+Dx/gZDwl5ib/YdbuUtsI1vc0QE3HMhdo3AEMyh7TvGRTSdlyBxzmyvaEJR+B0Og= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(16576012)(6916009)(86362001)(4326008)(8936002)(66556008)(31696002)(36756003)(186003)(316002)(54906003)(956004)(26005)(5660300002)(2906002)(66946007)(31686004)(508600001)(38100700002)(6486002)(83380400001)(2616005)(66476007)(8676002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZE9xLzE4YnFYVG9Cc3dGdUQyMzdtNDFwUk1WQTI5WUdMUXhGN3lBTGZDU1JC?= =?utf-8?B?TEQ4NDM0Z2lOaVBZK2ZJVGhOcVVqdU13WlZ6NXU3ckZTLzBEQW84cUV1YUVz?= =?utf-8?B?dFVTNk0rbERheFVrV1c0T1dBazkwUU9IUU1ZN2IyS09yeXZ4UENYZFNUQ25p?= =?utf-8?B?T3FKZERDUWE3WnNpZmxQWjI5SlhiUXVUdWhyMjRnQnhxbkw0K05DdXN2UzFL?= =?utf-8?B?b3FBa1RDYk5DblVLRCtTRzBJZlFsU3Qxc0lEWTBRVnd3TUVGVUp4aEI0ZXM1?= =?utf-8?B?ZmZGNkQraDd0dE1BSC83NU94elRxcGFHZHRXV09EeTJvZG9LVjJiMmd0V0pp?= =?utf-8?B?b3duczFpQ3g0VTFYVWJ5UW5UcVVIa0d2Q2UwaW5Ja2tkQmNVOWxIbzNYRnNv?= =?utf-8?B?MWVQU0M4THVZdjZUWmp2Qks3VVpieWRQWGdEbElWekJpdlNQL203MVprRkhh?= =?utf-8?B?TG5qQ3plVFFXdnJBSzBsY25EVDhCR2tIWjRzUGtmQnF3RFF5NXFLcUh1aEp5?= =?utf-8?B?aHp2MUZEQnNGU2NqcVErb25LSXFlQVREdHJIVm9DR24vMzdhV05ldllIYUFU?= =?utf-8?B?VlhUeENlVE42eEZYYTFHWmx5VS9iZzRZcHpHVU4xMjBRVTRnOGQ5Zjh4Yzdl?= =?utf-8?B?Z2dmbitJQXhrTEF3YkdqUENRVWtDdklkcXJFMy9Vd1gyRTBTRVZZSG1hNEhy?= =?utf-8?B?K2FyTGtLZjlvRzBoM1Z5ZDZ5WVRSazFiQ0ZYVkxTUktrQWpBQk1ZL1FrSUVI?= =?utf-8?B?UDhYb3ZWRll0d3U5VFMwUEV5TmhTMnVZbUFKOGJDUzY4ZkQ0eGcxbVZ4L0F4?= =?utf-8?B?VmxvYUpBR1lkUmVFcEZWbHRhVzFqNGlzNWNnM1NCZllVNGtYMUkwRitHcm5a?= =?utf-8?B?NG5HVDl2NUgzQXRCbXFDMXhhdlY2VnNoSWdBWm1qZSttVDgxYW1tc2N0UUx4?= =?utf-8?B?TjFTNHZDY3ZBWUsycGtNOWZqZzJwQ0VKcHd5akZzN2xCZlhzWnhJVXFNY1FQ?= =?utf-8?B?WWpmT2ZFMGVRN0lBM0lLbDVGWVNOR1d4ZzA5QjF4MzIvcUFlVFZSWkhpdVRZ?= =?utf-8?B?L292TEVPTG8wRGNPaC9TK1FxZjhpQmRHc3VORmp0T1l4azRFSjQvSGZTV1N4?= =?utf-8?B?cFNIb0RIa3liV3lkdnoyeHJxR1gzQmZlSTVKdXNoQXBXZm9zWkxtSHc2alFL?= =?utf-8?B?bzNHRGJTWHZVM0VPVDRVdnU4bG1lUU0zZ29Ealh3bUkwRGRoWldsc3JYY2JX?= =?utf-8?B?akJkb1p5cVRLVUFQTXE4SFREZEpIaUtTaDdIYy9QbTh6dmhLU01Ed1J2N3Ji?= =?utf-8?B?ZUw2ZHNNM2lPL0ZmbXBMSkxTUEtlODAzVmQyT28zUXlTMk40UGtjYXRmV3dj?= =?utf-8?B?eTRlejBaaWU2ZjRRQkFNdXo0L2VSZE1ZVDJhTWhOdisrTG9TVzR4RW1zUzhZ?= =?utf-8?B?Z2NOTFpRM1Q1MVJzOUUrZ1EyMmpubnk2NTJCajl5ZkZXUUN4UDAyMUlqUnd4?= =?utf-8?B?YjB6OThNM3NxVjhzZXQrNnVTWFpXODJGaFcwS2pJUCs0Uy82L3VMYlRBdzRw?= =?utf-8?B?K21NdzVlMTRCenk2YkZYSEdxYnNhUExsV29SdDFhUlBUWm9Ic0dqanMxbVll?= =?utf-8?B?MzhMZm9yZzVNcGhFMk5lSFl1RS9jVDc5a2o4NGZMTEZkOUxyN3lRZCswdFkr?= =?utf-8?B?ZWxFV3VCRmtMZWd4TkdyOWpSWU1TMFlRWDJEL25JQjR1UEhMMkxlaktNSS9o?= =?utf-8?Q?NOlKvbgRJKUxmC8KQlxisQhrdGHvmfqwA0q/XJQ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 58776727-fd6c-45de-708a-08d9670ad9a3 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:24:14.9266 (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: GlkpX7/ZxdDoQZzY/sGPw0kCkxXIZk7CgOG75ekfpM2/rDTYNs7IXJgDOML7lJtfsPcHls7304W1Jeq49BPecw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5682 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629815084984100001 Content-Type: text/plain; charset="utf-8" In order to free intermediate page tables when replacing smaller mappings by a single larger one callers will need to know the full PTE. Flush indicators can be derived from this in the callers (and outside the locked regions). First split set_iommu_pte_present() from set_iommu_ptes_present(): Only the former needs to return the old PTE, while the latter (like also set_iommu_pde_present()) doesn't even need to return flush indicators. Then change return types/values and callers accordingly. Signed-off-by: Jan Beulich --- a/xen/drivers/passthrough/amd/iommu_map.c +++ b/xen/drivers/passthrough/amd/iommu_map.c @@ -31,30 +31,28 @@ static unsigned int pfn_to_pde_idx(unsig return idx; } =20 -static unsigned int clear_iommu_pte_present(unsigned long l1_mfn, - unsigned long dfn) +static union amd_iommu_pte clear_iommu_pte_present(unsigned long l1_mfn, + unsigned long dfn) { - union amd_iommu_pte *table, *pte; - unsigned int flush_flags; + union amd_iommu_pte *table, *pte, old; =20 table =3D map_domain_page(_mfn(l1_mfn)); pte =3D &table[pfn_to_pde_idx(dfn, 1)]; + old =3D *pte; =20 - flush_flags =3D pte->pr ? IOMMU_FLUSHF_modified : 0; write_atomic(&pte->raw, 0); =20 unmap_domain_page(table); =20 - return flush_flags; + return old; } =20 -static unsigned int set_iommu_pde_present(union amd_iommu_pte *pte, - unsigned long next_mfn, - unsigned int next_level, bool iw, - bool ir) +static void set_iommu_pde_present(union amd_iommu_pte *pte, + unsigned long next_mfn, + unsigned int next_level, + bool iw, bool ir) { - union amd_iommu_pte new =3D {}, old; - unsigned int flush_flags =3D IOMMU_FLUSHF_added; + union amd_iommu_pte new =3D {}; =20 /* * FC bit should be enabled in PTE, this helps to solve potential @@ -68,28 +66,42 @@ static unsigned int set_iommu_pde_presen new.next_level =3D next_level; new.pr =3D true; =20 - old.raw =3D read_atomic(&pte->raw); - old.ign0 =3D 0; - old.ign1 =3D 0; - old.ign2 =3D 0; + write_atomic(&pte->raw, new.raw); +} =20 - if ( old.pr && old.raw !=3D new.raw ) - flush_flags |=3D IOMMU_FLUSHF_modified; +static union amd_iommu_pte set_iommu_pte_present(unsigned long pt_mfn, + unsigned long dfn, + unsigned long next_mfn, + unsigned int level, + bool iw, bool ir) +{ + union amd_iommu_pte *table, *pde, old; =20 - write_atomic(&pte->raw, new.raw); + table =3D map_domain_page(_mfn(pt_mfn)); + pde =3D &table[pfn_to_pde_idx(dfn, level)]; + + old =3D *pde; + if ( !old.pr || old.next_level || + old.mfn !=3D next_mfn || + old.iw !=3D iw || old.ir !=3D ir ) + set_iommu_pde_present(pde, next_mfn, 0, iw, ir); + else + old.pr =3D false; /* signal "no change" to the caller */ =20 - return flush_flags; + unmap_domain_page(table); + + return old; } =20 -static unsigned int set_iommu_ptes_present(unsigned long pt_mfn, - unsigned long dfn, - unsigned long next_mfn, - unsigned int nr_ptes, - unsigned int pde_level, - bool iw, bool ir) +static void set_iommu_ptes_present(unsigned long pt_mfn, + unsigned long dfn, + unsigned long next_mfn, + unsigned int nr_ptes, + unsigned int pde_level, + bool iw, bool ir) { union amd_iommu_pte *table, *pde; - unsigned int page_sz, flush_flags =3D 0; + unsigned int page_sz; =20 table =3D map_domain_page(_mfn(pt_mfn)); pde =3D &table[pfn_to_pde_idx(dfn, pde_level)]; @@ -98,20 +110,18 @@ static unsigned int set_iommu_ptes_prese if ( (void *)(pde + nr_ptes) > (void *)table + PAGE_SIZE ) { ASSERT_UNREACHABLE(); - return 0; + return; } =20 while ( nr_ptes-- ) { - flush_flags |=3D set_iommu_pde_present(pde, next_mfn, 0, iw, ir); + set_iommu_pde_present(pde, next_mfn, 0, iw, ir); =20 ++pde; next_mfn +=3D page_sz; } =20 unmap_domain_page(table); - - return flush_flags; } =20 void amd_iommu_set_root_page_table(struct amd_iommu_dte *dte, @@ -284,6 +294,7 @@ int amd_iommu_map_page(struct domain *d, struct domain_iommu *hd =3D dom_iommu(d); int rc; unsigned long pt_mfn =3D 0; + union amd_iommu_pte old; =20 spin_lock(&hd->arch.mapping_lock); =20 @@ -320,12 +331,16 @@ int amd_iommu_map_page(struct domain *d, } =20 /* Install 4k mapping */ - *flush_flags |=3D set_iommu_ptes_present(pt_mfn, dfn_x(dfn), mfn_x(mfn= ), - 1, 1, (flags & IOMMUF_writable), - (flags & IOMMUF_readable)); + old =3D set_iommu_pte_present(pt_mfn, dfn_x(dfn), mfn_x(mfn), 1, + (flags & IOMMUF_writable), + (flags & IOMMUF_readable)); =20 spin_unlock(&hd->arch.mapping_lock); =20 + *flush_flags |=3D IOMMU_FLUSHF_added; + if ( old.pr ) + *flush_flags |=3D IOMMU_FLUSHF_modified; + return 0; } =20 @@ -334,6 +349,7 @@ int amd_iommu_unmap_page(struct domain * { unsigned long pt_mfn =3D 0; struct domain_iommu *hd =3D dom_iommu(d); + union amd_iommu_pte old =3D {}; =20 spin_lock(&hd->arch.mapping_lock); =20 @@ -355,11 +371,14 @@ int amd_iommu_unmap_page(struct domain * if ( pt_mfn ) { /* Mark PTE as 'page not present'. */ - *flush_flags |=3D clear_iommu_pte_present(pt_mfn, dfn_x(dfn)); + old =3D clear_iommu_pte_present(pt_mfn, dfn_x(dfn)); } =20 spin_unlock(&hd->arch.mapping_lock); =20 + if ( old.pr ) + *flush_flags |=3D IOMMU_FLUSHF_modified; + return 0; } =20 From nobody Sun May 5 23:17:00 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=1629815153; cv=pass; d=zohomail.com; s=zohoarc; b=lwNUtX1XOcULZgRfqreplTjGQhklQUf05ZGk33dVtAeq7lpgH+HXOgtKx608+qSMXhzdqAgea2GfoFjW9HWkjS5eiiCV3tq3waeu3V0CmOwZR0Jo/d3hTeEFgCo9MOlUbsuqwxEif+GdjfTRQnotM9Q5i0hvMN3A2yAx/5YwJhI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629815153; 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=QygqEhY4mmo9TOg67f6s3oZ006SBh1mhC+tlKcEXnA4=; b=HGcoiIbIed0WUTzb1YBTFQxWgVT8XujJQaTni6TnaCwzYY+Vl91Pm+Fan6JP8xMgwJmSwxxYgYazQLRibgou7ff8g/0iSFyM26G7beIKKrP/u4hC6It9sw6A96lXddi+X708Lla6E3T5U8Bys3oX1eUaFsGS5BBPjxU/+nGFIDQ= 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 1629815153756958.2322335605903; Tue, 24 Aug 2021 07:25:53 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171494.312942 (Exim 4.92) (envelope-from ) id 1mIXMt-000319-16; Tue, 24 Aug 2021 14:25:35 +0000 Received: by outflank-mailman (output) from mailman id 171494.312942; Tue, 24 Aug 2021 14:25:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXMs-000312-U2; Tue, 24 Aug 2021 14:25:34 +0000 Received: by outflank-mailman (input) for mailman id 171494; Tue, 24 Aug 2021 14:25:33 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXMq-00030k-U7 for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:25:32 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 2274580d-4eb8-4872-bcc8-3c8d78b2167d; Tue, 24 Aug 2021 14:25:31 +0000 (UTC) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01lp2055.outbound.protection.outlook.com [104.47.2.55]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-24-epLFINjSNF6m8OekhTxV_g-1; Tue, 24 Aug 2021 16:25:29 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR0402MB3460.eurprd04.prod.outlook.com (2603:10a6:208:20::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.21; Tue, 24 Aug 2021 14:25:27 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:25:27 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM3PR07CA0065.eurprd07.prod.outlook.com (2603:10a6:207:4::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.6 via Frontend Transport; Tue, 24 Aug 2021 14:25:27 +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: 2274580d-4eb8-4872-bcc8-3c8d78b2167d DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629815130; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=QygqEhY4mmo9TOg67f6s3oZ006SBh1mhC+tlKcEXnA4=; b=CHNkMP+76+QhCQiHXyJ6TLnRF9YpFG5wG93SoWy5M40VD1bk4NuuOZgHiS5soYxvoMYCOB Bfg846yMQPjar5iUOXSaUXWpVtG+LEuukmHSR3BwdL0m20mpIa1AWCd+V81evVPazqlX6B ZJxT8yfa2GBKzBU+hqAk1+HsbI5ATeE= X-MC-Unique: epLFINjSNF6m8OekhTxV_g-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AlwCMw+/YdzlKGSAFgaasrt4WO+xlG66IkUvTYbOECrM5MYWasU3JfW1U5f8uZU/1FpPKe5RkwT+Ws/oq76+rnrYtN9i3SGJXRRheIWFrqne3hUc0VR1FOHMVsJB58H/0OaP3NzSbhhd+1F3FV4t805BkFNaqIhBL7vEWZXigD8JKsJ6X/uaX+mOcdwFtFTrcLqgiYvfcyeO1LBmpP64IChSMSKu/XdOe0CSbWng3cFQs5h6l8PBG69pZCYxB4iQG4L48hKIJ+JH9UYkHBqahIXEy1eUAdcmlEiW/CCUHGrowDJN3FUqwN8QLeolni3++Ah9Fa0knaOI5CKy6gs0AQ== 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-SenderADCheck; bh=QygqEhY4mmo9TOg67f6s3oZ006SBh1mhC+tlKcEXnA4=; b=TxGsDcaJlKYqYva1ClhuWkopMwhIvQ4m9o/c2SDRNNgCDodp4U2DP3xUs/sCuWeDP1fLjIP8wNHwbQ5oqO3h4gtKb9fps1zNLj16+4nrMD5TnwYmwzZbb5bj2Qdd/6aEJ3zs44PYtK2wiHMMyubKgZh/jhQGW5eseOOY4mE2cNWDnyj8bxiTkxjK+4/tINC/qY8EwvN4eGzmVjCIXceIcEo1+qF8FTdtWmBqF+W24vdNLpqduHTTCCG5StVAFytj0Cy9FnraE3jyIryWrXPiuZiwMK47Nsah30L+nvzdE5yjt5F5cv0ScMKqKG0g2iXR5aoo+dynmU4nji8pmZYTzA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 13/17] AMD/IOMMU: allow use of superpage mappings From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper , George Dunlap , Ian Jackson , Julien Grall , Stefano Stabellini , Wei Liu References: Message-ID: Date: Tue, 24 Aug 2021 16:25:26 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM3PR07CA0065.eurprd07.prod.outlook.com (2603:10a6:207:4::23) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d904bc00-2a40-4773-8cf8-08d9670b04ef X-MS-TrafficTypeDiagnostic: AM0PR0402MB3460: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: FoTy/ZgJOHw6UfIuxgwieCTWeC0+C0bguwonBHfY7hqlQufEZJfL059dIuBCH/9tHlG6vbKe3z35uahE2fYgThehKvS1JrdjzEXymNel4+mIfxop25mp7uUKWquwktlWhv1k6WfI6z0CEhf/r+0e75nTnypQzlVtOEJWp/PSrOlx5pfbjXbsZMS8VDLln0PNwTwXLTuTjNGwJlSKVfqRBvROhm7f9S0UJqZRJJDakO2+R2AY3ZZHGi9dJqWswbDDFzjazqA1hHbY0A+VjxzTXLhHO/CP+2+E5sRO0cGcqGccQHOSW13P5pyHsnMPNORgfBtXCcyBWEatUjTKoszCAG3aSD+nhyqsVuWqBfhmnpmx1Oj5rNjRkfMTq+QbxKIh3ZIB9IpSWWrTEmFeEERERlpIB3iNh2fybUixTAfJxfBnIgCNion1+DxaU6K1V5wpPVxWwUEfxX/ZdKnH7FhA69T3JuwsEX9G5W0FKC/SBEZK3oXc4ZfSDmUZCBXm4RroAaoE1YOXqSdPP5ld5BQgr/lDkbandgloEmkcYxWLd/L9heQZszB3Ol8lm+mS2yIRj4pHyohkdUEK22Poe42Ilixlyr+ZgqfJqg932krhTBEh+3mUISlbptPLjXC/tLDGhhM/eZRwTM9YiWNCx+/klmf/7TfinfFkU9uEQpjK8nuZC/zaddEtGA6Id2GvX1SGwMHJ05ts1lKbg9BhVZ9lY666LLnQpEVM3ftU38A1K7g= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(346002)(376002)(39860400002)(136003)(396003)(366004)(54906003)(66946007)(16576012)(316002)(26005)(6486002)(83380400001)(66556008)(66476007)(6916009)(8676002)(478600001)(2906002)(8936002)(956004)(2616005)(4326008)(5660300002)(31696002)(86362001)(36756003)(31686004)(38100700002)(186003)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MURrSzZmcnNrbUViYzdoYmRyTE90M2oxRUR1N2VPUlBlOVU2TTlkSmdzNXpB?= =?utf-8?B?VnBIbmhFS2tRL3BJRFh2ZVJKdS8vcXlJRUNNY2xHMURIOGhBU2NkOEVJL0V4?= =?utf-8?B?YUJxMlZoVU8rS3VwTm1pMXArVHBiTmVWK0ZBLzVzMGVaVFY2T3M4WTIrNXZT?= =?utf-8?B?dzhFN1VNclhrVzBoMGtiREI1aW41QTYxY3MvMVlhdzBFWXJQNDRoU3dWbisv?= =?utf-8?B?b0dnT3JHUUUvaXdnb1ZHQmcyVFRRUDdwVmR6aGx0OGxSUXQzNWdlUFpGeW1h?= =?utf-8?B?cHpqWWxIbzRpQ1M4YVRCTklXeSt4ekdwN0ZzVVhIUEdyT0Y2MDQ0NTlpOXZT?= =?utf-8?B?MnhzVmRuZHc1aGZwVzVhbVVjRG5DdlZhelFCTTlhenFFc1NMYmNOODM0V2g2?= =?utf-8?B?UXFCUmIzSy9wY3JUMlMyeldvNmI2NWw0djA4bXphd3g5YVAyTWZ2YmFleHZv?= =?utf-8?B?bXlWbjdZUzluVlk5d1VaU1JZV2Z6dFJLOUZlM1RSTXpJejJBT3E2TmN5eWxX?= =?utf-8?B?clRRRmZKeS9PTEdvMUI5SlRzYzRWNEt2cXU0V0NBenk5WHBEcEtrbmxRVnZL?= =?utf-8?B?bVk4dUJ3VGw3SGQwS214Q3NpdnhobkIyM3lHemhsbExQNjZwaUFFVUxUT3kx?= =?utf-8?B?MjZJRmxUUjdJR0I3WjZaT094cThFRWo3bWFpSHAzMjAvQWY5NnlQMU9mM3hR?= =?utf-8?B?SjlkdU1yTmNjOEFKNjIxdFJ5NWpVOW1ESnFGcUtCam1sYnI2RWtOUHdsbnFv?= =?utf-8?B?bHNWa3gvQnVFNWdJYUVpaS9rMlFEc0FMNE9NdUxnaG0xNlEyNmNpQ0NxYTFK?= =?utf-8?B?VXAyTWNwZENSaHdDbi92d2JaY3J5WTNmYTVyRmt0RFR2WENpYmsyR3FkYXZi?= =?utf-8?B?ZWN5bnowQWRqNWxxUVhOOUphVlZrNGJ5UkxPdE9uNWJpZC83d0JQTDRDcnVl?= =?utf-8?B?b3dQcmJwLyt2U1NOaGhUcTlJajNaay9TNVYyaTRtc0VHVHZvMWRSVmp1UDNw?= =?utf-8?B?Q1dpRkRvSUJBTHJ2ZUFWZ2JQUndTbHBHOU4vWEVTYVozZXVhYm1iQUVTMTlQ?= =?utf-8?B?V2w1bDUxcDlsTlQ1WFNyY3JmVHVtTXF1QWt3cEdpdWZMSWFPY2kzaXpGbytY?= =?utf-8?B?Uk1jSlN5cDRWUllxTERHdWZ3VGxpbjBYaVdyV0VOWXFDZGt1SnBJMnBZeXl1?= =?utf-8?B?cTc2b1RobWtQUlZGVUQ4UThMejNKQTh6czJiRDBuL1VabSttRkgrTDA4TXRL?= =?utf-8?B?amxPQ1JUL2o1d3d1ODhWTS9ySkNwVWs4cVZYM3VJdFYvUzZFZkhtamRabStq?= =?utf-8?B?S005RXJza29VaUNXWnExL0RFTlhyRm5za3Jpd1YrQmhkWGNoSWdnU1FTek8w?= =?utf-8?B?Z2R3d2g5c1FtVEN2NEtqMjF1NUhONTRyZDFiUUNVUVpxeUcvL21JakgvbFlu?= =?utf-8?B?T2lIQW0yeHA3ZGkrZXY4dy9TazE2TEpsdFQ3MjdGcHpmOWFUWjVNZzZ4aFlx?= =?utf-8?B?U0FVM3E1b2d6dXh6UXBWT1Z3dG9JUy9RZEtOaVlEd3RmNElvY1k1cWRnTEl2?= =?utf-8?B?bHRCaS9oYUJ5YkVZWWZ4SDYvNjdhUWpocHNMbFRtSkhtbDFYa2dpQW1WaVVw?= =?utf-8?B?SWRRYmJwRTJ0Uko1U1IvT3F1eTUyM1lrVlQwZXYvZ05jZERleXZhQU95bytl?= =?utf-8?B?Vmh1TktRQmY2MGtudVcvUElveDZXSWlBTzF0cHBJSnE5ZVNDZnhjV01nZHVa?= =?utf-8?Q?cq4g48Q9u0wyR7E87+t6oHndtUFnTSSZFDizix5?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: d904bc00-2a40-4773-8cf8-08d9670b04ef X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:25:27.5614 (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: z8bv04kRuKRTnDWja1J7ozkx7whbf8AA9vuSAI85lLv6TDQXyzw7+5lsi4H+2oUCgO5d+C0Hc1CdKlqffa2Xpw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0402MB3460 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629815154372100001 Content-Type: text/plain; charset="utf-8" No separate feature flags exist which would control availability of these; the only restriction is HATS (establishing the maximum number of page table levels in general), and even that has a lower bound of 4. Thus we can unconditionally announce 2M, 1G, and 512G mappings. (Via non-default page sizes the implementation in principle permits arbitrary size mappings, but these require multiple identical leaf PTEs to be written, which isn't all that different from having to write multiple consecutive PTEs with increasing frame numbers. IMO that's therefore beneficial only on hardware where suitable TLBs exist; I'm unaware of such hardware.) Signed-off-by: Jan Beulich --- I'm not fully sure about allowing 512G mappings: The scheduling-for- freeing of intermediate page tables can take quite a while when replacing a tree of 4k mappings by a single 512G one. Plus (or otoh) there's no present code path via which 512G chunks of memory could be allocated (and hence mapped) anyway. --- 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); @@ -288,10 +289,31 @@ static int iommu_pde_from_dfn(struct dom return 0; } =20 +static void queue_free_pt(struct domain *d, mfn_t mfn, unsigned int next_l= evel) +{ + if ( next_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 < next_level); + queue_free_pt(d, _mfn(pt[i].mfn), pt[i].next_level); + } + + unmap_domain_page(pt); + } + + iommu_queue_free_pgtable(d, mfn_to_page(mfn)); +} + int amd_iommu_map_page(struct domain *d, dfn_t dfn, mfn_t mfn, unsigned int flags, unsigned int *flush_flags) { struct domain_iommu *hd =3D dom_iommu(d); + unsigned int level =3D (IOMMUF_order(flags) / PTE_PER_TABLE_SHIFT) + 1; int rc; unsigned long pt_mfn =3D 0; union amd_iommu_pte old; @@ -320,7 +342,7 @@ int amd_iommu_map_page(struct domain *d, return rc; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, flush_flags, true) = || + if ( iommu_pde_from_dfn(d, dfn_x(dfn), level, &pt_mfn, flush_flags, tr= ue) || !pt_mfn ) { spin_unlock(&hd->arch.mapping_lock); @@ -330,8 +352,8 @@ int amd_iommu_map_page(struct domain *d, return -EFAULT; } =20 - /* Install 4k mapping */ - old =3D set_iommu_pte_present(pt_mfn, dfn_x(dfn), mfn_x(mfn), 1, + /* Install mapping */ + old =3D set_iommu_pte_present(pt_mfn, dfn_x(dfn), mfn_x(mfn), level, (flags & IOMMUF_writable), (flags & IOMMUF_readable)); =20 @@ -339,8 +361,13 @@ int amd_iommu_map_page(struct domain *d, =20 *flush_flags |=3D IOMMU_FLUSHF_added; if ( old.pr ) + { *flush_flags |=3D IOMMU_FLUSHF_modified; =20 + if ( level > 1 && old.next_level ) + queue_free_pt(d, _mfn(old.mfn), old.next_level); + } + return 0; } =20 @@ -349,6 +376,7 @@ int amd_iommu_unmap_page(struct domain * { unsigned long pt_mfn =3D 0; struct domain_iommu *hd =3D dom_iommu(d); + unsigned int level =3D (order / PTE_PER_TABLE_SHIFT) + 1; union amd_iommu_pte old =3D {}; =20 spin_lock(&hd->arch.mapping_lock); @@ -359,7 +387,7 @@ int amd_iommu_unmap_page(struct domain * return 0; } =20 - if ( iommu_pde_from_dfn(d, dfn_x(dfn), 1, &pt_mfn, flush_flags, false)= ) + if ( iommu_pde_from_dfn(d, dfn_x(dfn), level, &pt_mfn, flush_flags, fa= lse) ) { spin_unlock(&hd->arch.mapping_lock); AMD_IOMMU_DEBUG("Invalid IO pagetable entry dfn =3D %"PRI_dfn"\n", @@ -371,14 +399,19 @@ int amd_iommu_unmap_page(struct domain * if ( pt_mfn ) { /* Mark PTE as 'page not present'. */ - old =3D clear_iommu_pte_present(pt_mfn, dfn_x(dfn)); + old =3D clear_iommu_pte_present(pt_mfn, dfn_x(dfn), level); } =20 spin_unlock(&hd->arch.mapping_lock); =20 if ( old.pr ) + { *flush_flags |=3D IOMMU_FLUSHF_modified; =20 + if ( level > 1 && old.next_level ) + queue_free_pt(d, _mfn(old.mfn), old.next_level); + } + return 0; } =20 --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -584,7 +584,7 @@ static void amd_dump_page_tables(struct } =20 static const struct iommu_ops __initconstrel _iommu_ops =3D { - .page_sizes =3D PAGE_SIZE_4K, + .page_sizes =3D PAGE_SIZE_4K | PAGE_SIZE_2M | PAGE_SIZE_1G | PAGE_SIZE= _512G, .init =3D amd_iommu_domain_init, .hwdom_init =3D amd_iommu_hwdom_init, .quarantine_init =3D amd_iommu_quarantine_init, --- a/xen/include/xen/page-defs.h +++ b/xen/include/xen/page-defs.h @@ -21,4 +21,19 @@ #define PAGE_MASK_64K PAGE_MASK_GRAN(64K) #define PAGE_ALIGN_64K(addr) PAGE_ALIGN_GRAN(64K, addr) =20 +#define PAGE_SHIFT_2M 21 +#define PAGE_SIZE_2M PAGE_SIZE_GRAN(2M) +#define PAGE_MASK_2M PAGE_MASK_GRAN(2M) +#define PAGE_ALIGN_2M(addr) PAGE_ALIGN_GRAN(2M, addr) + +#define PAGE_SHIFT_1G 30 +#define PAGE_SIZE_1G PAGE_SIZE_GRAN(1G) +#define PAGE_MASK_1G PAGE_MASK_GRAN(1G) +#define PAGE_ALIGN_1G(addr) PAGE_ALIGN_GRAN(1G, addr) + +#define PAGE_SHIFT_512G 39 +#define PAGE_SIZE_512G PAGE_SIZE_GRAN(512G) +#define PAGE_MASK_512G PAGE_MASK_GRAN(512G) +#define PAGE_ALIGN_512G(addr) PAGE_ALIGN_GRAN(512G, addr) + #endif /* __XEN_PAGE_DEFS_H__ */ From nobody Sun May 5 23:17:00 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=1629815183; cv=pass; d=zohomail.com; s=zohoarc; b=GBDgcojFqMypYyg5E/Clc6re7TS4wZqkwrnWNi5p1IsS4lmAxersxt81yHnvcRzZ3BxZURIagywhq4gsNFF93xZZPe3HMiWeo+sDYTxx4tNn0Ty3T+h38PHuVo0CsGtqxd95OGyB0QKT1pTDH4dA2yL+fHq3V95+qR4XCzWjFbA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629815183; 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=xXNlYzfiI7fao0QvX7Y5nmHcnn3q2cAtFsh8eNUCA1o=; b=iUP5wNztsf/sVHtkLtlbffrdll4ask2qi/wjAKrS8ajkIqwAXw53/bmMUAMg3cmRr1o/iUeYAULiABJ/gdKbHT2wbjIsGPmw9tFH8Ne5pR+wgNgfxD7VLtXyW4AESrvmlbvDmSBVXrsfGz6LoumbnTw4fVBvB5a0OEq2kN3SF8I= 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 1629815183173167.69127904787945; Tue, 24 Aug 2021 07:26:23 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171501.312953 (Exim 4.92) (envelope-from ) id 1mIXNN-0003fK-FU; Tue, 24 Aug 2021 14:26:05 +0000 Received: by outflank-mailman (output) from mailman id 171501.312953; Tue, 24 Aug 2021 14:26: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 1mIXNN-0003fD-C9; Tue, 24 Aug 2021 14:26:05 +0000 Received: by outflank-mailman (input) for mailman id 171501; Tue, 24 Aug 2021 14:26:04 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXNM-0003ev-8C for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:26:04 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 357c1f00-04e7-11ec-a8dd-12813bfff9fa; Tue, 24 Aug 2021 14:26:03 +0000 (UTC) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01lp2058.outbound.protection.outlook.com [104.47.1.58]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-14-t_vBaTXfMFihwvuKcupDMA-1; Tue, 24 Aug 2021 16:26:00 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB5682.eurprd04.prod.outlook.com (2603:10a6:208:131::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.24; Tue, 24 Aug 2021 14:25:59 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:25:57 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM3PR07CA0055.eurprd07.prod.outlook.com (2603:10a6:207:4::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.6 via Frontend Transport; Tue, 24 Aug 2021 14:25:57 +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: 357c1f00-04e7-11ec-a8dd-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629815162; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xXNlYzfiI7fao0QvX7Y5nmHcnn3q2cAtFsh8eNUCA1o=; b=MpyogQjuowVsYQqL0gV+mILP8odHr9ACBLsEQaNj6UlmKwyh7Jm5EYEkJHn0a+VnnyfpUH nXtMCNNB1e/XU0tloLYimwxS0MfPnjNYtG8d7pBOrjRNHu+xV3HqhZlnbx1hxvK0HGgmSD AZLsW63QfUnBOCY/4LZzy2sWuuaU5so= X-MC-Unique: t_vBaTXfMFihwvuKcupDMA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XuDjANfCw+Tv8R2Q7A38N5RBO6/h1PmQAztMS/SLZCzUhYa1voIBsoqsyFCcl4rYVzZ77NCQnOxlTR8EObBBx3xrAGcqlqoVMxHkES7vO98lC5X2ba3UOZerY2yZFU4wuZb7tJMViCeH96wN1Sexu+nlDS5MQnd6j8wAbY4ZhNVCQpy1yJa0BuPLWjaRoXJEZRbVcK+ByBTTKRfN8Xz3DDTQ6NURUqsCvCw1jLrJIvTSomTr2mOUv15MTzT9HnTbmWMA13Z07qX2K2+Ju7E7DyuHdrkakE9ae8PCMNMsnsMhbbZmi3yBMDDjmi9esMPzgHtw1mf+cPlS2JMh02crkg== 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-SenderADCheck; bh=xXNlYzfiI7fao0QvX7Y5nmHcnn3q2cAtFsh8eNUCA1o=; b=i3MtJcKRNrZCQ5RCzUHNhfcVfnKEM6CMYtBW/Y1WNXxGteQhyb7ndjRd+RyO5FfYLXE1w7XgwvXaHTpysVK2pAv+sBZJFG5ukMNWCWdYO6TWqxEt6dqOl9fIjtIOEjZ7au7jOGVcDjX3uNcHcc0vP4u+IgLd4XSuiIY745RU52tpM/+/MyHTmcDWf7YIA/rcWiyZywJRCrOo4P0oVjKfUk1CQ9mZmRRSYhnnLqegJVRZb22yrhZtr72UjAymHInq9Q1E8fXd3M+cD0wQ8FX7UZPjeQwnlMkiSO0WvKWkyAqopFtR5M2Wa1akTMx8ukqJUFtE6pBTsr8wZcXmJVJh5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 14/17] VT-d: allow use of superpage mappings From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , Kevin Tian References: Message-ID: <0af2ff55-4dd4-aa8e-bab6-ca043fc9363f@suse.com> Date: Tue, 24 Aug 2021 16:25:56 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM3PR07CA0055.eurprd07.prod.outlook.com (2603:10a6:207:4::13) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a3382000-24f3-4d1f-7c96-08d9670b16e3 X-MS-TrafficTypeDiagnostic: AM0PR04MB5682: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4502; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2WMPP+gaNYiX9VxduO2HVcToHNa7hvqAdJx8WbGguuScWO96IqkCkWHNr0zZWH1vF+bqNoVdBA5CWNbr5/wT2fkgjnva0vd9CvqEH4oyAmLHoXWV6pg+tZ157XiEyoMPCPDKfFUJLWsTPD3vRt0ROFeCF9XiNCIWcIgxXkq4z8NhEUWF5fv4R/tZAF0Ef4y7NV9UAp9EnBCYgzn8L/xhcxyRyGT3yNERxyhpRL3dA+OudeyzfNpJJnNf17ryG9PiarCJEeJ9Qhdn831QnIpKqiQ5WzVNaqXe0SIjJkYKwfBRXVRceg+CIAgf3A1wNj0KmwlPyhtIYQUuziE2+b/eA3rzCHVAW6rMGSX5Tf6wC+lHLqtb1jprwCPG420WlNtl9WGD5WELA3l37BQlR0uYlFe+45MSMAMDqtVDsRMRoH5Cv9UlszqpC+/Pe3uqIz0HPKTJxekm+uhrodR6dx2Dg7ZVJF0zEklDfv0cz9BZl5CcfOVComghGDKBU26nbhAt+anjYNPmWyU1zc1ZP4IVZu9aj+W6UdZbFyW2mSNeRUfH/pnRFov1LpZE+cO+5Ak8rP9UVdGl5u+qy6FWWK55sEvJzdtQsV69/ufLsv68mF25HsbgUW+GDglnVlWJxYVg+jDzk6YRINRC6s37JJ2h6W8LqmSvN+0cX2OOtF/8362i5jqvLa7+Y2crgmRsHfYI2lUOPSBSdWCya9ihJqlFNwwW+e1YTrbWEebwgCrIf4A= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(16576012)(6916009)(86362001)(4326008)(8936002)(66556008)(31696002)(36756003)(186003)(316002)(54906003)(956004)(26005)(5660300002)(2906002)(66946007)(31686004)(508600001)(38100700002)(6486002)(83380400001)(2616005)(66476007)(8676002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZDUvRWxlVk1NazBjOUVEUXFBRUZwa1NPYzNDaEF6L2lFNjFST0FTNXBydU96?= =?utf-8?B?TUNoOWhNVzNLbTZLTURVSzJZaDhjTGk4d0lZSUV2cDZHTHZRbkU4dW9tTFhr?= =?utf-8?B?dmpWc0dlQ3d4eXZ1Q0gwU2FZOVRoT0JEMnppYk4ySWN5bTJtbEFIdnd5eDdF?= =?utf-8?B?WDVjNXBDM1gxMDBjWHkwODhOdGFoaGtsdUlUd0h1MW5mSGxtQVNEOGpRblJV?= =?utf-8?B?a3gvMW5tOXJzUkl0RGdGbyt1UnBucExSNE5YNk02NkR2STF6UUZsZC92aG9O?= =?utf-8?B?MndEMS9yak51MFJiTnJUcGRKb2JQeHJ5cmJyU1NUbVNRNzZrTEFFUnZZei9l?= =?utf-8?B?S0lrc291TGFPSUdSVnU4THBnUDUweHpHNmdDNWVESmNMbXJYanpCa0NSamNC?= =?utf-8?B?Q2RQTU0yWEVuV0ZJREw0WGFrblpvWGo1K1g3djZ6QUZ1bXZJb3k0aVc1MzN2?= =?utf-8?B?MVA4Q2NkZTRldVhxOUw1YXJhempaQWpDdFNjZUFnV2p4cXFFeGNPZjBEdTdL?= =?utf-8?B?enl6dzdBNjAwVEdHcHNtK2VvYVZ4UEptTXR0b0hWUDN5Q084dGZWOFg0NDFF?= =?utf-8?B?OUpla1VQM3JCbGFWeGdabFUwaXpGenhnVWlnMUpjWHZJeDY1ZW1pdTN6cStW?= =?utf-8?B?YXNpUEllZm00RytGSldTQVVyUXRXaDdDU1hDWGFRVm1YSG43V1drRGx1NTV5?= =?utf-8?B?TUpBbng1SDFWQmZDc2JsSnUvWElQalFrYzgrSDQ5Mjl3dW5oS3p0VUs3bzNt?= =?utf-8?B?UGhpLzh5aWowc096aUJWaU1WVjdNQzIxcXZHbCtuV0NmSlRXQXE4dnkrM1ZR?= =?utf-8?B?S204YW5CRmJMOXlQandDcUhnUW1NMjRZQ0FsZSsvK2xEeGZHWGJOM2JSOUF3?= =?utf-8?B?VjNRT240UEsxTVhEdFhad2xudlU2QkxDMDUrd3hzSDBudVVBVHpiS3RBUW1Y?= =?utf-8?B?SEU5ajFsN2JEKy9pTGNYaDVZWkNTYmd2QXVIb2VNV2xRVkFrcGFQTm1PT1Q2?= =?utf-8?B?dVIzZDZ6RGZsWUN3cWpTVGRMVjRjOUJsRDZaY3RGcFRIb0hmTUlWVWNydXhM?= =?utf-8?B?bm5BNFIwKzJTS2oxY0lTK0NteUt1TnRpQ0dXSkRTK1Z3N3o2b0phWnR1RXBG?= =?utf-8?B?cjBrRGtSUmJJWkJsb1I0QkR3UHVEMzhZY1FhWlUweWh6RTBXTll2dUZuSGNo?= =?utf-8?B?YkNyTWVrc1hEVlRSUVhGZTE1UTA4UE1CcHpJa0NqQ05Kd3FmZjRvSmNNTTI0?= =?utf-8?B?dVJmVEdyZ3Vacitjb29mejZsaUI0S1hRQ2FqWjMrNEtEcElLMkNHRDc4ckJH?= =?utf-8?B?UUF4cElwMWhrUEJIbXF1bW9NTE1mcE1UdEE4M2FrRnorMmxZRktCbVlwU3N6?= =?utf-8?B?UVVmdEJQTnphK21PNkF3UzVSc0pEWHRmSzdXcUpnZnduMW5Wa1V4UzRleWJa?= =?utf-8?B?NjRtWHQ5QkF0SGU4cnFFelJGaVJvOEw4WGs3ZmxHSS83SGJ4WW5IOGthZ1BZ?= =?utf-8?B?NGxzNXRUS0J4cEVSMGppU1YrOFU5YW9VTkZBbG9YaVVIZFN0dXlvN1U5RFlH?= =?utf-8?B?RWpjdnlERklPdEt6Y3loeEN5VXJTYVZlWmZFWFNZeG8rTlk1VXRtZEJDV2dV?= =?utf-8?B?dHY4dGNDWnRMU0NoVTA5RmRzTjlaV1N1dGJIVlhVdllyQkdiZTdQd2FhUVZI?= =?utf-8?B?aUhEMUJNcFNZSCtNNmJybGIyMENSL2tuMWl6UmhtMC9lSzZxN2lTa1QyOHVH?= =?utf-8?Q?MD2Lh/1f7IJwEXhu5mU32LW0qZ/R7+UO9khJtvJ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a3382000-24f3-4d1f-7c96-08d9670b16e3 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:25:57.6783 (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: WphUeIUdObg+mULD00qGb5vHk6afgxbJ5nTd5f1wuEwyWy4tzaoj6/Pdv1QD3in3mOYUd2FH1zWhaTYcAfmsCQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5682 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629815184058100001 Content-Type: text/plain; charset="utf-8" ... depending on feature availability (and absence of quirks). Also make the page table dumping function aware of superpages. Signed-off-by: Jan Beulich --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -756,18 +756,37 @@ static int __must_check iommu_flush_iotl return iommu_flush_iotlb(d, INVALID_DFN, 0, 0); } =20 +static void queue_free_pt(struct domain *d, mfn_t mfn, unsigned int next_l= evel) +{ + if ( next_level > 1 ) + { + struct dma_pte *pt =3D map_domain_page(mfn); + unsigned int i; + + for ( i =3D 0; i < PTE_NUM; ++i ) + if ( dma_pte_present(pt[i]) && !dma_pte_superpage(pt[i]) ) + queue_free_pt(d, maddr_to_mfn(dma_pte_addr(pt[i])), + next_level - 1); + + unmap_domain_page(pt); + } + + iommu_queue_free_pgtable(d, mfn_to_page(mfn)); +} + /* clear one page's page table */ static int dma_pte_clear_one(struct domain *domain, daddr_t addr, unsigned int order, unsigned int *flush_flags) { struct domain_iommu *hd =3D dom_iommu(domain); - struct dma_pte *page =3D NULL, *pte =3D NULL; + struct dma_pte *page =3D NULL, *pte =3D NULL, old; u64 pg_maddr; + unsigned int level =3D (order / LEVEL_STRIDE) + 1; =20 spin_lock(&hd->arch.mapping_lock); - /* get last level pte */ - pg_maddr =3D addr_to_dma_page_maddr(domain, addr, 1, flush_flags, fals= e); + /* get target level pte */ + pg_maddr =3D addr_to_dma_page_maddr(domain, addr, level, flush_flags, = false); if ( pg_maddr < PAGE_SIZE ) { spin_unlock(&hd->arch.mapping_lock); @@ -775,7 +794,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) ) { @@ -784,14 +803,19 @@ 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 ( level > 1 && !dma_pte_superpage(old) ) + queue_free_pt(domain, maddr_to_mfn(dma_pte_addr(old)), level - 1); + return 0; } =20 @@ -1866,6 +1890,7 @@ static int __must_check intel_iommu_map_ struct domain_iommu *hd =3D dom_iommu(d); struct dma_pte *page, *pte, old, new =3D {}; u64 pg_maddr; + unsigned int level =3D (IOMMUF_order(flags) / LEVEL_STRIDE) + 1; int rc =3D 0; =20 /* Do nothing if VT-d shares EPT page table */ @@ -1890,7 +1915,7 @@ static int __must_check intel_iommu_map_ return 0; } =20 - pg_maddr =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), 1, flush_fla= gs, + pg_maddr =3D addr_to_dma_page_maddr(d, dfn_to_daddr(dfn), level, flush= _flags, true); if ( pg_maddr < PAGE_SIZE ) { @@ -1899,13 +1924,15 @@ static int __must_check intel_iommu_map_ } =20 page =3D (struct dma_pte *)map_vtd_domain_page(pg_maddr); - pte =3D &page[dfn_x(dfn) & LEVEL_MASK]; + pte =3D &page[address_level_offset(dfn_to_daddr(dfn), level)]; old =3D *pte; =20 dma_set_pte_addr(new, mfn_to_maddr(mfn)); dma_set_pte_prot(new, ((flags & IOMMUF_readable) ? DMA_PTE_READ : 0) | ((flags & IOMMUF_writable) ? DMA_PTE_WRITE : 0)); + if ( IOMMUF_order(flags) ) + dma_set_pte_superpage(new); =20 /* Set the SNP on leaf page table if Snoop Control available */ if ( iommu_snoop ) @@ -1926,8 +1953,13 @@ static int __must_check intel_iommu_map_ =20 *flush_flags |=3D IOMMU_FLUSHF_added; if ( dma_pte_present(old) ) + { *flush_flags |=3D IOMMU_FLUSHF_modified; =20 + if ( level > 1 && !dma_pte_superpage(old) ) + queue_free_pt(d, maddr_to_mfn(dma_pte_addr(old)), level - 1); + } + return rc; } =20 @@ -2348,6 +2380,7 @@ static int __init vtd_setup(void) { struct acpi_drhd_unit *drhd; struct vtd_iommu *iommu; + unsigned int large_sizes =3D PAGE_SIZE_2M | PAGE_SIZE_1G; int ret; bool reg_inval_supported =3D true; =20 @@ -2390,6 +2423,11 @@ static int __init vtd_setup(void) cap_sps_2mb(iommu->cap) ? ", 2MB" : "", cap_sps_1gb(iommu->cap) ? ", 1GB" : ""); =20 + if ( !cap_sps_2mb(iommu->cap) ) + large_sizes &=3D ~PAGE_SIZE_2M; + if ( !cap_sps_1gb(iommu->cap) ) + large_sizes &=3D ~PAGE_SIZE_1G; + #ifndef iommu_snoop if ( iommu_snoop && !ecap_snp_ctl(iommu->ecap) ) iommu_snoop =3D false; @@ -2461,6 +2499,9 @@ static int __init vtd_setup(void) if ( ret ) goto error; =20 + ASSERT(iommu_ops.page_sizes & PAGE_SIZE_4K); + iommu_ops.page_sizes |=3D large_sizes; + register_keyhandler('V', vtd_dump_iommu_info, "dump iommu info", 1); =20 return 0; @@ -2777,7 +2818,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 Sun May 5 23:17:00 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=1629815229; cv=pass; d=zohomail.com; s=zohoarc; b=iVRuTc9EWAelEjMiHm6YMnJAYHkINHmm71bcDxULMOYmXu7Z4DdQaRrSDMl37FwRG1nN+VrsovAQKxvkRWFFF8F1hG2qvXIkMdn5bBHQ3FdjfBZ/3R4UIcDObGjPRPkAsWkfNJSU/4SPu1Nl7wtSrMq9+FWK0epj0EkTu8gOQQA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629815229; 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=+chUC9y2Lb1G4vN61QIuBBXsqqC6ILv8f/8geNJpSIk=; b=WUMUiqTqmEoaDJH+crLAZ2NIBGlqY1OlUlzoUXNLc1fCW4weraoIJQBluhAuw6KprTeBwpm6LUMFryPXd8WuNyecb17PIpP7s7yXdRnWsPMwgCyy3QqDVkTQPmdOn3akgUCs6RNva3o9pWJZlZwkMHc1YpL9jFRQ4AaJJdrsz3s= 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 1629815229484652.1066155561689; Tue, 24 Aug 2021 07:27:09 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171512.312974 (Exim 4.92) (envelope-from ) id 1mIXO9-0004rK-0T; Tue, 24 Aug 2021 14:26:53 +0000 Received: by outflank-mailman (output) from mailman id 171512.312974; Tue, 24 Aug 2021 14:26:52 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXO8-0004rD-Tg; Tue, 24 Aug 2021 14:26:52 +0000 Received: by outflank-mailman (input) for mailman id 171512; Tue, 24 Aug 2021 14:26:51 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXO7-0004qw-Bz for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:26:51 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 51d0b486-04e7-11ec-a8dd-12813bfff9fa; Tue, 24 Aug 2021 14:26:50 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01lp2059.outbound.protection.outlook.com [104.47.0.59]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-34-7zS0o-UiOU-iCUilfnEdTA-1; Tue, 24 Aug 2021 16:26:48 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB5586.eurprd04.prod.outlook.com (2603:10a6:208:130::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:26:46 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:26:46 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM9P250CA0020.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:21c::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19 via Frontend Transport; Tue, 24 Aug 2021 14:26:46 +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: 51d0b486-04e7-11ec-a8dd-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629815209; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+chUC9y2Lb1G4vN61QIuBBXsqqC6ILv8f/8geNJpSIk=; b=dQDFkgY9/7cCYNmXEXdIIklpsHbzM/hJAbKae/kJwiESuwNcXGWzD3NnNYgxKUXXs5pI3w piImhcNCrYjgV7/97Dz306Y1P6zcpandUHDcB9dn3o318VOFWv710hdgWOJOFY1C93kzWF LfoBUVqr+BEovFK4V1o2bBTcIktmXIg= X-MC-Unique: 7zS0o-UiOU-iCUilfnEdTA-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K0KRIO8eqhFI+9kQygeatb9Kg9FK5Rru0iuKTCFOOV2U2n4N/WokiYeBzy6Q14ZnlkArDes9Kbi7leynJvqrHLrIvp9ElDtW/LeaGMgBPnI2K52M9qH5sSgjdZYRMcW7Jw7QjXUGKDdwAsTrb+EcHXrlHxTlXc7P2Wu2lLYLm3UK7MSQVC4syGx7seMrHnSnz1pvZTw2qWuMeyVf1geJhmXudKT0xmasHQPW/5DcURFdT/wml/8A2iTCLa/6jaLvpQjrgoYZq8UhJ/kqIOra3fNTTp3gaMDFbj0mZHfBsPH68anXRetrNfkkYjnH3TfdEg0J1vZnH+/eSfE6lAUA3Q== 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-SenderADCheck; bh=+chUC9y2Lb1G4vN61QIuBBXsqqC6ILv8f/8geNJpSIk=; b=V+m4gd3hop4Kd6k5SME465aQMkRQ6JfO1OFj8mEC4hyY+mivMHV4Vr9qtXnz3jSIm+a7vVlsMf8Ibl8noifa4v5yYJNGy0nEpoXhLTqRWZPJs+2KAn9F6sbRoc5DZRWBeCS5kH+f3UWlBJYklLXVYD2OpCRZmMCcyFy26SNt5I/sDvnepPFexUhUfONKaCvxuxinBdhb6KVaVzpXvwnvjegtsE225Nk3zpX9jsubZi0+tytvOod4+mJ7GXAEcFH1IMZoH8MrXqBa4WCpdqpzunXgbncYVa39yPf/886wiZtvtDXJUFf5SmSAA0q7mKAn2yXyDTUSQUeHAkwR+F4Emw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=suse.com; Subject: [PATCH 15/17] IOMMU: page table dumping adjustments From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant References: Message-ID: Date: Tue, 24 Aug 2021 16:26:44 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM9P250CA0020.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:21c::25) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d6246664-69e8-4465-ca4a-08d9670b3406 X-MS-TrafficTypeDiagnostic: AM0PR04MB5586: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: sLu+3AMuZuS8WZtxFu2ETtWjXNMb9sAEkQDBQpXGVtcLJ5gSvP//HXfaMJaVPM2S6rOnn2HDhuDCWtaouaZwDlqNgs4HAF+9HzCFbgFmS2yeTBUMZgGZiE78VKLjBfPx+kqmTCzyIj8i0QuCJc0yC+CfwoSTdngQkpG+Ok4zew7IU+g6SArId8NDiISNDO/fj2j/YFOgsOXUwZbqTH6KVOFCj/BXszW6EZA8JMgeM6zGVFVRlArypBfCcCC5gMNLXWxtUxW3/SzrkyYp+/KZQvvsQy9enJL4lzNCYaoSh4hbd1BTSYiL3YRbDM3n5s8fyH6r5hqMSm2ElHfRMpARJXfAG2vatvi7clrMshdhln62liGBMQvyMpfPDpnvbJJZ81s8grevO8/ZxOTNhGNXHKsPwbNLQyJEQZrVOsyNkfJQAs9M1wMEJncnjlWLpanOYY0w1eiLXA0TNF/URK5fJUM2Z4akDH+AqHO5ZPQFSnHnZLHDeOxBlUI/zw73lRBHHO6DICM99Y2abc/nnsPPXPxp4gA45CabxSQhJAF4eZGBCcmNu2jOVRJcxk3dnr7bWUgI4Y1bLlfvb8CGr2ey6bCjAcTcEDz/gdTLGykKy3B8aZs9gr0v4JLV6114C8qOKKNuwc/VnFKqa+YOfFuAzt8/7amEgXmOQ3/LP256wgmgJ/GndwGaxzzUSTUkBrHnBt9VEbHGmbHfRnPbW61CR62240u1rF1fo1/4lUwefhc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(39860400002)(366004)(376002)(346002)(136003)(6486002)(6916009)(478600001)(31696002)(956004)(4326008)(36756003)(2906002)(38100700002)(316002)(66946007)(26005)(8936002)(66476007)(66556008)(5660300002)(31686004)(16576012)(54906003)(8676002)(186003)(2616005)(83380400001)(86362001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?amJ6RVNIY1EzZ0lSc1FIUm4zVTJqV2JZVjFKZ1VsRWpVTzY5cVhvUnNvV09Y?= =?utf-8?B?VFdiS0U2YlRNMnRlQ05RTHZ3TEF5N3R5cEJ1M2xOUm9YRzVqZ2xicWV5SnUx?= =?utf-8?B?NGwwU1RrQVBzMGNoUWxUR2dybHdhblIvVWFpMzJBK2F6clZ4d3E3dGdvU2h4?= =?utf-8?B?QlhyMzhlYlFLeE9tWWttZnhNWm83TmhxU2FtcUliR3dUbVdvMXRWQTJuc0M0?= =?utf-8?B?Z0NhaTBLVDY0OFBNdVI1ZnBaem9RK05lNWYrakFTOHAweWlzRTNtT2wxQ2hY?= =?utf-8?B?VGtJRnE4SURxdWx4WWFCY1MxTGRRTDJDNUtPZS9kb0pxaTBJak9JRGdJUStu?= =?utf-8?B?a0xHdHU2Q3l6bUhnNnZMakNFN2c5c3UxU1g3ZzNzNnZFbG9WUzRtK0U4UDJV?= =?utf-8?B?eHdVZiszUmFuYVVtdEJNU21jYllVSmxwM0hJMURTemhiRVh6UUJWVGtOUWFQ?= =?utf-8?B?NU5HViszZDA0Tk5sZmdTaFF6c1lTYldqVXN1WURIQnliMHJ3MnVua3NNaHZr?= =?utf-8?B?MUpoSTRjK3JIL2RqVTUzdUtnWmlkMnR4VmRGcHZkNEcwVlVvRjRMNTQ1cHNT?= =?utf-8?B?eXhFOFhVTCtNTUVJMm85YWQweGgwN3hLRjRzTXg5SGRWRE10bTdqMjZDcjl6?= =?utf-8?B?eHJtYnZsa3kxS1hRTW5LYXVhK0g3NVlwa3JqSHB0QTk3UXhlNmphUEhkUUd4?= =?utf-8?B?Yzl0U09vVjhHb24rNE8zTi8rMHRmcjJ1blZpVzJYTFU5N2dpc29rNkZDck9U?= =?utf-8?B?ODVidUhCNGtTY0ZET0QrQnA5TndMWVg5SkhiYkxkZk1rNmFxYzVTTDZkeklO?= =?utf-8?B?aGxra080MFlQd2YyN1oyajRHQlZ2YkQvQ0w4TXo5VXBGVlY2TGZXSDVQWllK?= =?utf-8?B?aHJKTVdVMW1Oa1RGR29ibDYzcWtIMmxseUtHZERxVW43dTgrL0xqNERuTFJQ?= =?utf-8?B?Q3pKTnNSNCs0N3ovR3Jya2FKTDNSRTMvTDVESTFnaXk1OUxYc3o4eDdZYy9p?= =?utf-8?B?Rk0wSHVLek9RamxOV2lkcXQ4b0dqUHNWWFVVKzJESTJGaGR5cEh2UHVlYTNV?= =?utf-8?B?RHBIT05OS2JCSEE5dWRoK2VId1FuZGFMd2x0UUpBY0EyNFZnWWduMTdpZWUr?= =?utf-8?B?czIyK2puY09vcGlraG1FMGJmZ0d3QWcrZjlzVXQ3blFFdUtUVG9ZajhaZFpw?= =?utf-8?B?WmcwdEgydlFVMXhNWkgxeFVvb3A2T1NBTkI3U3Zjc2kzU09aN3o5M2FaYzlD?= =?utf-8?B?U3VyOENwalFWYkRmTHFXcnhYcU54SlgxMHpQN3NzNFAwR0tOVHBSTnowdHdi?= =?utf-8?B?WlNBWEZzd3NvOGpnQUh3NVJWeVhkZm10aWpwMDhiRmFOOXFVWjJhNmsxUjhK?= =?utf-8?B?UEZzYVhyQjFnbEw2NHN3UkpnWk40Qk03ckxWeE1GZmwveTJzcnM4TUNzSVMw?= =?utf-8?B?d28zM05OSDJMR2F6bmZHdldVTXVTaWpjL3NJVDc0bUFrUll6V09taEtDQXda?= =?utf-8?B?ZzJLUlJ4b2xTYmlkY2ZuMlM1WFJrVXlmc1hZME1rTlBOc0ZWaiszWWl1VFAx?= =?utf-8?B?STNGSDlHNEQxZS8zSDE3VThydWRqd3NlT0NKQnQwNW5hU3lKQmFEd3dUdFZl?= =?utf-8?B?V01keGw0a0tnVkh3V3ppWm9XQ3QvOU1HY1hYenhWNEgvYlNzcENtVi9iUkNW?= =?utf-8?B?UHRjcjBXQmlxeVM5T2lieEJQQ0FJRUN5NVVSVlB4RWZqV0xTQTNtL3diSC9v?= =?utf-8?Q?JsncqjB32tpgMMqWCrwN1viPCFydhibzWIIdbsZ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: d6246664-69e8-4465-ca4a-08d9670b3406 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:26:46.6046 (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: y1+Ce839BMTongem+xiSfpNoejtAT01mTUlante32TW8N9XstRwTMRIgB+0ENqvO4qhbraN+DYBGiZr3gmaLnA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5586 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629815231651100001 Content-Type: text/plain; charset="utf-8" For one none of the three IOMMU implementations on Arm specify a dumping hook. Generalize VT-d's "don't dump shared page tables" to cover for this. Further in the past I was told that on Arm in principle there could be multiple different IOMMUs, and hence different domains' platform_ops pointers could differ. Use each domain's ops for calling the dump hook. (In the long run all uses of iommu_get_ops() would likely need to disappear for this reason.) Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -640,12 +640,9 @@ bool_t iommu_has_feature(struct domain * static void iommu_dump_page_tables(unsigned char key) { struct domain *d; - const struct iommu_ops *ops; =20 ASSERT(iommu_enabled); =20 - ops =3D iommu_get_ops(); - rcu_read_lock(&domlist_read_lock); =20 for_each_domain(d) @@ -653,7 +650,13 @@ static void iommu_dump_page_tables(unsig if ( is_hardware_domain(d) || !is_iommu_enabled(d) ) continue; =20 - ops->dump_page_tables(d); + if ( iommu_use_hap_pt(d) ) + { + printk("%pd sharing page tables\n", d); + continue; + } + + dom_iommu(d)->platform_ops->dump_page_tables(d); } =20 rcu_read_unlock(&domlist_read_lock); --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2835,12 +2835,6 @@ static void vtd_dump_page_tables(struct { const struct domain_iommu *hd =3D dom_iommu(d); =20 - if ( iommu_use_hap_pt(d) ) - { - printk(VTDPREFIX " %pd sharing EPT table\n", d); - return; - } - printk(VTDPREFIX" %pd table has %d levels\n", d, agaw_to_level(hd->arch.vtd.agaw)); vtd_dump_page_table_level(hd->arch.vtd.pgd_maddr, From nobody Sun May 5 23:17:00 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=1629815258; cv=pass; d=zohomail.com; s=zohoarc; b=Ptk307RYfYYBdO7nXS1dyvZ0EMWs9UhrWGqvcctkF7CEd2z2mwFx5SuY6XiJC9VkfamB1TLCWmApLCLBhupRPUwhFoK7sxELq7svlbLeLNhbiMgnkvnxdY06XRMXfhULdpwdOIFHOz8W4rZrRmGMbuHCENT9ohhdytdphz3spbw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629815258; 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=ekc106SeN5rQ4+mKbVywQpGio0tLIHNqkbPDTkhzXTA=; b=QHVZshdpL5+xkIFkeoGIuLNqyPY4C6RgnlCHbaEVTcPKwYkVm5+2XYu9M31KY/PLFhgLkBwPw6U3dEG4+rM30t9l3JTbDbZtdXI+wrceh/oaup6kbcGVb7El9Y0IB1oQsMJijz69yeeZDFF61O18kGDwNF3l2o9yNwz7VJz1M9A= 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 1629815258833342.3942966854378; Tue, 24 Aug 2021 07:27:38 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171517.312986 (Exim 4.92) (envelope-from ) id 1mIXOa-0005UE-E3; Tue, 24 Aug 2021 14:27:20 +0000 Received: by outflank-mailman (output) from mailman id 171517.312986; Tue, 24 Aug 2021 14:27:20 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXOa-0005U7-B6; Tue, 24 Aug 2021 14:27:20 +0000 Received: by outflank-mailman (input) for mailman id 171517; Tue, 24 Aug 2021 14:27:18 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXOY-0005TS-AF for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:27:18 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.109.102]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 1bf81538-43f9-4e9c-a227-2471f8545398; Tue, 24 Aug 2021 14:27:17 +0000 (UTC) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05lp2109.outbound.protection.outlook.com [104.47.18.109]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-9-v6lPtcefM5CDPuJcGu0F9g-1; Tue, 24 Aug 2021 16:27:15 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB5586.eurprd04.prod.outlook.com (2603:10a6:208:130::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:27:13 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:27:13 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM3PR07CA0104.eurprd07.prod.outlook.com (2603:10a6:207:7::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4457.6 via Frontend Transport; Tue, 24 Aug 2021 14:27:13 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 1bf81538-43f9-4e9c-a227-2471f8545398 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629815236; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ekc106SeN5rQ4+mKbVywQpGio0tLIHNqkbPDTkhzXTA=; b=WnurmuG/rHc80zSPienleiKbu8WsHcALwZszMfGJ1pXDdJGXsQqnKWs0bZXC+6k+j6mMFD VHuBbx+IgNHzdElLPRw7woprQ/9UKaUDh9PXjW8jkww5+Uy53E5wrEIqx1MCTQxvFop5JQ 6NOwkLAS43Uw9cXu/nwNdzWDx25utZk= X-MC-Unique: v6lPtcefM5CDPuJcGu0F9g-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lrm3e6A5wvAUsNu83p6gsmlp44wd9x7J22oJaT4Z91czIqCAqQbgKonA/e7eIfH9DHP1uu0QXrDkTWsyK42VftZ0/ssJIGtGKK317BMbfx1ka6OItm5187QU5OTQ81KO61b8tx8kXu/0UD0LmHv8M9t/97y8lZ5tUuoX8AHDSTGTimBIb1BYLh0llKvMTYGtFVIuU2Ps0Zk5o5KnUSaWv2f5Nn2/ZsQqyEIpYJj8Vd5UqlDVeXiW7IoOqcBK6B/hI8g1FIk6O0EqcD4TTrltYoah7Ggmh/atYxO6LekDSdHceahWVnrxf7RPwMpV6f9mm86ybNZ3iYCGHIE9/VvnNQ== 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-SenderADCheck; bh=ekc106SeN5rQ4+mKbVywQpGio0tLIHNqkbPDTkhzXTA=; b=ZtuX8vqgWMuCVBdRDUtVigE0Gva21eFEEYDLPhK1ZDF1wbdtC4pDF0LgWr0t81oPejBMsZ+g6g3uGdI2ZzncUbKIc04IVn+dYN5WrkuXG4KiAeYTkYwLVwMB26m4aXIGrdTtgCLq/L27i/TNTutCWQDpYdFnLyguHmUXTCmGB73HOqU031+n3Th3vxxDG/caKzhUdMRGyNTFc5iMIXFwXxJ8oGQ9CX0TPpUDhLeukwXF2pTwNuYNRg2nFaNd36F05lupZ4sOgWI88STHaruVl2QcPH1s2SiLRyFrTMch+9II9yp1IUDvg7LuaNHflLK7xYK3tzgMp5E2TXJGmJg4Sg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 16/17] VT-d: show permissions during page table walks From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , Kevin Tian References: Message-ID: Date: Tue, 24 Aug 2021 16:27:12 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM3PR07CA0104.eurprd07.prod.outlook.com (2603:10a6:207:7::14) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a1db4cfe-8a33-4cc0-ad62-08d9670b443a X-MS-TrafficTypeDiagnostic: AM0PR04MB5586: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:913; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Vi4vuJzXxMxq26AOxxsXIwuoIy8VuFEZomq+bypJ4nvr2w0vdbObSNNMGdta9Vv8+iXjleZndJAkEkXH/OBuTTF0BnWF57tgn+q9Slw9B1nzz26SsD+VbTLrJKz29kRGZP6l6J2meQc8Tze4U6BDPuO0wW2pLLI0rJ/aBuUNdO+0wiSx3d6XUnju9BCt7WqaNu45gZk8k5/v8b8ULI/tf8lH9bPtxNt3V3IpF7uWQcmNPlvd5c7OMns+2mWwP4eOFcH2wT7f3Mwjr1MwERnmljI9j3N3S7uT+7c1n8BYMpt/gssa4e58iCU4Ax6v82PxffB1YI9nqRwIpCw+XRVogjig0DBaO7BbWw8t5cCKLovspMZk7TEjIPoQnpTRiQvAu20oLaTs6ZY1tHXu7eBlpdUwcUIGoiETbc/FPsuDd+QQYsKsRsF0lwHRG4skEvdj025Mne8UQ6Xiqdk+u2WsitfoY4KShCJmIJNnOJ/63DuAV5JiyXpCQRTJ6DAnfV9KMFHY8iLDCkVjnKVxwdEpcNTsCNXA0R7/3yj3iMDp7zRQ3nsYf6aBlTtGCh9s7/jc93GPTw1RsZZfCpUQW7kbRwvNr2cHWTHXbBpEpW9CbiqyDEssPYSZ4nUW8ActCzdPUTXvmy9qO8BSg9TebzSEha+HdzmmDu75RVh+qy37YcWJEdSLpDNiA/gNgNLRr6q3ueW2VoGmYfP6w+Kb8gQVpNqIxi1N2vE9tx7CwrIQLLA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(39860400002)(366004)(376002)(346002)(136003)(6486002)(6916009)(478600001)(31696002)(956004)(4326008)(36756003)(2906002)(38100700002)(316002)(66946007)(26005)(8936002)(66476007)(66556008)(5660300002)(31686004)(16576012)(54906003)(8676002)(186003)(2616005)(86362001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a2M4VlNwV0hzZ0FUSHNNa3UrSmZydnZwM24vbWk1QmJlRjdpbzlzVHc0Mlpi?= =?utf-8?B?UXpudmFBZ3JOeHBOc3dVeTN3TXJOcDRpUzRRTDJHZm1hTy9rUGxHb2VCLzRi?= =?utf-8?B?N3F6VzBrVFg5ekwzZGNMN3FRTVVXamwwai9VWnZWUTlNd0p6dUgrbGdFU0Vs?= =?utf-8?B?emVVZHlMa2RnYmRKREZ6OVEwVkdGTDNiYzhtUmtCUEFHWUxKYXRTMmpDZ2ZB?= =?utf-8?B?YmNJcisrZnNHQS84eEkrck9PRWZrUVVKalRNOTZjVFhLdHIrc2pkTUVjaVZ2?= =?utf-8?B?VlRhVGZIaXlQSHJPUTdCUWQ4T3h1UE1OSGhqM244cmJRNE5SQ2d3QnIwY1VG?= =?utf-8?B?QlVCQktLSGRMTzRjTGlBTVpCWXpmNGZSSlFpM254cDV3S2V6L0RRYWZwc25j?= =?utf-8?B?L21WY1JtRmdwZ1VFSHFQMDMvdEhxbVBxd1lMWnBxZ0tKTVlFWHBBeWFPejA4?= =?utf-8?B?cDQ4WWdZVFJOZnJaVWJrUjJFYjB6cnVjRHptYmFLN1kzeThBSUY4Y2svZVRi?= =?utf-8?B?Z3g0V1dCWkFSNUxXcERSb2dZL2g3RFlucFluZy9iZCtTWTEycTFBcG40Z1dZ?= =?utf-8?B?dmpUTUw4NVRiNUtaMUNSZ1BldWZ0MWxXbVQ3cTF2aithN1JNVHpmWFR6cWhu?= =?utf-8?B?M3pIV3RjM3FpODdROWhPZ1d3TlZtY3FTeUNBcFVSb1dpTFpPRjF6NDl5SVJX?= =?utf-8?B?SDFzVWxNU2FyRnBBbnE3aXVDUjJXUlFiQTkxVldRVVRHT3B3NWcxeVZDUmVj?= =?utf-8?B?RWxOejhOWHdOZ3dNV1NXWGJtSURPNklMdllDdWVyc2YycFdDNDFsamhrRGxR?= =?utf-8?B?QlFPMGt3VVNvaExYZ2pwWDQ2em5JTUdSY0xiTnJZejRJc2w2dXZuZVZjdkd4?= =?utf-8?B?MUkxc2s5dUw2bGljRGVTclEwcExEOGlaNmVPY2UvcittYjFsd1lDVW50Ry9G?= =?utf-8?B?YWxGRWE4aTEwNzIwWld2L1FSb09xN3hPYVlMUEQwMG9GajdUZnVHT0l3WWhy?= =?utf-8?B?Nm52d2FoakR3bitBM2JDRko5SDdXSnU5SXg0bEQ2YTJEWmNoMU1wSW9aWjlh?= =?utf-8?B?ZjZJeTNMeE9GQ1d3a1hCMUR6aG5zNmxLcHhtU3krSk5BcHJVQzFFdmdIQ2dQ?= =?utf-8?B?RVk5TExYbkxkbmp5STQ2NFIrZ1F5R1NDc2Z4ZXJJV2UzS21ZSHhhSlFVU3h3?= =?utf-8?B?THQxaFQ2eVRjYUlFeWJ2dk8vZTlDTm9ETzNJamF1ZDJ5N3hXZ1BaMTkwL2xo?= =?utf-8?B?bndUSDhpKzBsNTNLVHdydEc4YU5jbmlWelpZWFJFUjR4ODIvWlpTNGNRRUlM?= =?utf-8?B?bGh1MTZaSlUxR0RMY29KZGc3elN5MG9XS0NxRGFnRllFRXpqTUV5bzNVZlZK?= =?utf-8?B?bmx4T2lycTJ6Qm9YWWQ0R2RNOGJUUXZabVM3QmYvYk9SVEZFczRGTStMV0s2?= =?utf-8?B?NlVKb2loZk9jenVhRlM5Sk1DMUpnb3ZWY1h1b2E2SmxPa09CaE1WUlFzY1Fk?= =?utf-8?B?Rk1DRGNZRklaVGJBQlV2cVEra2h0RWtLMXpXTm5HOWdGMCtscTVBR1VCaUVI?= =?utf-8?B?NHVqT0xUVWZFY0RUbFNYZmplV29ZOHlqM0JXbktUZ0szcXg4UWlnbzdwSytj?= =?utf-8?B?MTA0c0pwME1sdEl2Vi9WVTN3SlNHOWVDRHA5M0ZqQ3pGWnROVW5lbFlUMC9G?= =?utf-8?B?VzRCZ1hZTlYzdVJEMnYvUy9EZnIvNTNTOGRtdGRYRDdidXFTZm5sRmpEaDdS?= =?utf-8?Q?tZ0GmXkIcf0G6a0zBwoeM/AeTznkkP3bto7fkA9?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a1db4cfe-8a33-4cc0-ad62-08d9670b443a X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:27:13.7482 (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: 48UJ3ztd7+K5HHRdKcxqUamBc1p/uAMa4dxgpy3PxJiYil59IfbCZK30V2OWVngOKvQ4FIwR3uXyHekSa98Rbw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5586 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629815259854100001 Content-Type: text/plain; charset="utf-8" Besides the addresses this is the next crucial bit of information one might be after. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2822,10 +2822,12 @@ static void vtd_dump_page_table_level(pa vtd_dump_page_table_level(dma_pte_addr(*pte), next_level, address, indent + 1); else - printk("%*sdfn: %08lx mfn: %08lx\n", + printk("%*sdfn: %08lx mfn: %08lx %c%c\n", indent, "", (unsigned long)(address >> PAGE_SHIFT_4K), - (unsigned long)(dma_pte_addr(*pte) >> PAGE_SHIFT_4K)); + (unsigned long)(dma_pte_addr(*pte) >> PAGE_SHIFT_4K), + dma_pte_read(*pte) ? 'r' : '-', + dma_pte_write(*pte) ? 'w' : '-'); } =20 unmap_vtd_domain_page(pt_vaddr); --- a/xen/drivers/passthrough/vtd/utils.c +++ b/xen/drivers/passthrough/vtd/utils.c @@ -159,14 +159,11 @@ void print_vtd_entries(struct vtd_iommu l_index =3D get_level_index(gmfn, level); pte.val =3D l[l_index]; unmap_vtd_domain_page(l); - printk(" l%u[%03x] =3D %"PRIx64"\n", level, l_index, pte.val); + printk(" l%u[%03x] =3D %"PRIx64" %c%c\n", level, l_index, pte.v= al, + dma_pte_read(pte) ? 'r' : '-', + dma_pte_write(pte) ? 'w' : '-'); =20 - if ( !dma_pte_present(pte) ) - { - printk(" l%u[%03x] not present\n", level, l_index); - break; - } - if ( dma_pte_superpage(pte) ) + if ( !dma_pte_present(pte) || dma_pte_superpage(pte) ) break; val =3D dma_pte_addr(pte); } while ( --level ); From nobody Sun May 5 23:17:00 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=1629815279; cv=pass; d=zohomail.com; s=zohoarc; b=JKU4RFIvu+Dqp6EDT7+6LLmIB9n/S77yBi01I5pdZwwigQXfmUz48ddNUrwKs5p6cwWmjWP1gqDoEgiUJ9ZrHgyp44YxSJX4rMYCkTRdqtAY6x9tJJzoYS4mvGOm4y0gcL+tUvCkxDjWr7XUcbfPYJ8SvP4hkamVOpYI9ub9IYU= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1629815279; 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=+5yL1useIB2A88uC4gSJ+juDvytPE+ii/83FY2OaNQ4=; b=Dk8/5D8SZStgHc1dvHCT22HTvdS7yX9Y3RIhPM083DjAnpydGutxzump2+Mnv7Y49vCLzeA6Z1o89kMMqacvp3caR6yfEdQQFBDs3yA5pAEFOeACDpTXJVcOZF/utAO5F25TMkyzBGOvImdew7DHF6wFjkMkNGWV2hdIeZTRDBE= 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 16298152792781022.1587891096478; Tue, 24 Aug 2021 07:27:59 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.171523.312996 (Exim 4.92) (envelope-from ) id 1mIXOx-00062Z-Nk; Tue, 24 Aug 2021 14:27:43 +0000 Received: by outflank-mailman (output) from mailman id 171523.312996; Tue, 24 Aug 2021 14:27:43 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXOx-00062Q-Kq; Tue, 24 Aug 2021 14:27:43 +0000 Received: by outflank-mailman (input) for mailman id 171523; Tue, 24 Aug 2021 14:27:43 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1mIXOx-00062C-1w for xen-devel@lists.xenproject.org; Tue, 24 Aug 2021 14:27:43 +0000 Received: from de-smtp-delivery-102.mimecast.com (unknown [194.104.111.102]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS id 70848290-04e7-11ec-a8dd-12813bfff9fa; Tue, 24 Aug 2021 14:27:42 +0000 (UTC) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01lp2059.outbound.protection.outlook.com [104.47.0.59]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-34-1PJLEEbCOMW5dBurWVugOg-1; Tue, 24 Aug 2021 16:27:40 +0200 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) by AM0PR04MB5586.eurprd04.prod.outlook.com (2603:10a6:208:130::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.22; Tue, 24 Aug 2021 14:27:39 +0000 Received: from AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf]) by AM0PR04MB5587.eurprd04.prod.outlook.com ([fe80::4822:460f:7561:33bf%5]) with mapi id 15.20.4436.025; Tue, 24 Aug 2021 14:27:39 +0000 Received: from [10.156.60.236] (37.24.206.209) by AM0PR04CA0110.eurprd04.prod.outlook.com (2603:10a6:208:55::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4436.19 via Frontend Transport; Tue, 24 Aug 2021 14:27:38 +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: 70848290-04e7-11ec-a8dd-12813bfff9fa DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1629815261; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+5yL1useIB2A88uC4gSJ+juDvytPE+ii/83FY2OaNQ4=; b=nvi9KBGRzYU5pBbGTr3uV+T13hV0+bMuJWT3ZZRC1PHrS+6FfEdQ7qyBtU+hDq89CTzuOL 1et74RnVObfBSsaAYuDhPjk093ZgpqOLcWFQhZnG10nfY6VyvB73sFjnqqJUnWf1omLOG1 HWBjmbU1g3lTkRLhmkxsqSOGlkt9qVw= X-MC-Unique: 1PJLEEbCOMW5dBurWVugOg-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JVTDmUbxFi1DQ8LwjrKy6oljS1oQiVAk/Zv08EDzg4+clqg9PZbbL4UQFJLSQ62sDovuOTjwQQEFBoHmXiPmTU43zkPMcfolwCtlg1/ILVSqt+/wipHdaoMufCpJC5G0hROK6a7tc64Hmf5KbQt5eFJVeiD/A3oz7SfFyyIXhJfuPamAVd4fpQANo6/SO9jpEd612WA5RxQeYSIVnvzNP/w1A0KwF1gGMpTXGEZNjD2LtYGBb56Hr+x1AkdBPCT+Xab/FZq9U0aTvPkK8ezpaLmXeVEPoBXKqsjZ3mwGcZqK9RTR3UbrySvvwO8jM5ejQ9T/g85rIlqpJfepCsw/7g== 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-SenderADCheck; bh=+5yL1useIB2A88uC4gSJ+juDvytPE+ii/83FY2OaNQ4=; b=LgbRTxjQGyBQ61/punqMJbPbTRxlpvsforoMzVB6OYDDQAx7gBFOZKUXDHFaMPUoWKfqQFUIftV2ch2D+ryfGVl5AKbXztqtI/rUCHv5D7O/tbtPb6f+CdiYe6f66FhlwtJvdGMNt0+Wm3tmr3SL9mkLneB+aRlkekLqQWknGFMbKn3ufFXfRk2hnigzfNn0hK9hoBduaRliYlu6NQz62UMQi3NjvK1WD+0pPJslaRFXvdNLCjh9WhqZzV8I7nD22tFT+rQ7Nkui+ZR42+a2nXqNyPNOhBDhezNugD/eVqQNG+JpBMbGJPaTMgVg74tsW0MLGPYNDX95gIPSAAhIBw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=suse.com; Subject: [PATCH 17/17] IOMMU/x86: drop pointless NULL checks From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Paul Durrant , Kevin Tian References: Message-ID: <25ad2429-df7d-95c6-ec70-4b23e6a023a2@suse.com> Date: Tue, 24 Aug 2021 16:27:37 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR04CA0110.eurprd04.prod.outlook.com (2603:10a6:208:55::15) To AM0PR04MB5587.eurprd04.prod.outlook.com (2603:10a6:208:125::12) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 022cfb7c-c0b7-40f4-cbe9-08d9670b5345 X-MS-TrafficTypeDiagnostic: AM0PR04MB5586: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:240; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VUHcfo6ACj6jl93631RzbKZoLjBFLwVlaNtEimo5xUdUlrUXwT/NeSnKYW2PF7VVBV0o3o9kqN6Gj0k0ZWfhPqPzM1oDgPy3LxF2LNlBzRmtL3lVbccz0I9IxFrGBhjOBAsQPRhmta9+q7ktBVtetlIztFlJDWJuqeBTiLFFPXrghnUAF9z0odAXcUdDz4JpIuwvFs+pZiVuYjdxSs8EieRYqeQHDXTzQIva5JTApF3FtI7xAWmcmBxwYhjJiQ8uTaAUMcGU4yQsd3LpUGaIqk5JKLvlWUa2uth2g/BQit1mrNktWejmX9j54RXK36GeXi3JeS7FZpLEhrp+fDUB6y0TGsW8/qeuSkYVPzDgJ5yQU/hQanVb+R3wdINNffui/B5nW2jfJeZDFHFsClb/O9TvJxf+zBFcs0aoLl3MaJHThYWvw8ZlAuxBYuZVV+UWlpEdPRDepyTz+LHngtwM/YgzXyNH31gVlE8GxqOUa+DU9AS+L8ns2jZ452E+UU+nNSTWJ7s+/3inAvHWiw8KpSnP8NlirTvKWWmzi4RgQIVj2wK4ivwRZa/bjz/MlOtoE9nO4cKV0bNr/YYASocPIrNXbnTYkoBM9YB1uWX/sz6T19MReGkDHnA/KNGz6/JovSrDU6J6KxIFfJf71BBnVX51GyGspQQcQw56osVANE9y8tttpNppk9JjAGw2nwh97Grx8BWpIKOkoUsumnlAFuF7UeYjV0Cojsiei5HdcR8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB5587.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(396003)(39860400002)(366004)(376002)(346002)(136003)(6486002)(6916009)(478600001)(31696002)(956004)(4326008)(36756003)(2906002)(38100700002)(316002)(66946007)(26005)(8936002)(66476007)(66556008)(5660300002)(31686004)(16576012)(54906003)(8676002)(186003)(2616005)(86362001)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TW5scENkZkZaVGdHaGlheG8wZkJjM0lpcVFVenBPN3EvVElsNTJTWXpWRWJn?= =?utf-8?B?QmRaa29sZkl0N2xjS21kdndtK09XaDJRdkk5d3E1VFNrdGtMdVREVXVmWkNI?= =?utf-8?B?VzBLLzdzOFNJVVRtWGErVllHd0FhV2todk9VVkNPU00yeGtMWlY4Zkw0MWFU?= =?utf-8?B?eDFvbzJ5V21sNzh1UFZDWlcyTE5aL2VYRzBMSi91ekppclpzcXQ1alNPdFJ3?= =?utf-8?B?WStQb0NJcUNkZHF2T0NYVHUxL1RidWZYZjEwWThWdjFRQSt0MjUvTUdjaW10?= =?utf-8?B?VTRmS24xSzMrSlBGb1FKVUZYN3dRS0dEU09ZV2ZEc3pkZWQ4aUY0L3dPb2ZD?= =?utf-8?B?QWZJVEtjQm1NL3lISE45NlA3aTFvQXZTZGZOM3FwTFJIbmNyYW0ralRtNUsx?= =?utf-8?B?TzJ4Und5M3Y2UTlMcUVmMW1Cc3IvNGdobHVFYWd6b2lDeWd5eVFZYjQzYnhu?= =?utf-8?B?UXllVmpKZmk1WUMrODFSOSt3bW9jWDcrbi9JR3AxSVBsb0YrNExoR2FkL1Yz?= =?utf-8?B?WGJZbTc3QTcrUndnOHVDLyszQW1BQmhOQm90QnRoRnNGSWhRUGlHVmIwdmcv?= =?utf-8?B?TEIxaWkvbGNoN0NZUG5RU21HVTdTdWltMWZlTjNXdjFRdmMwQzVDT1grdFhY?= =?utf-8?B?dkhhTW5hNm5kV0VUa2NmQkNsQ0lkM05aYSszclVDeXM0bEN4dFNhS2JxRito?= =?utf-8?B?TjE2MWhXMjhTcVlXL29hdDN1UHc0Q1JCMS9PNnZMSTNIVW1yN0ZuTm5oUjg3?= =?utf-8?B?b2pOVVpRNzFObHdnb2FNbHNhMXFYZVhlaFIyQlNtRURlTjFIK0dIY0hDYy84?= =?utf-8?B?c1ZmbzRVUmR3RkdNdXhSTTRyZ2dCUllyOGJqTVA2QmRITGdLYmp1NTV2elow?= =?utf-8?B?N04wejNDcjQyUlFMUTBWelppdXpCTDAwaGg1MHpCQkU0d1lHWnNNWUZBTWRQ?= =?utf-8?B?K1RlRG5NbVRDUmhoL0V5RjlZcXAwZ042SXhoYkhKRnhIRUowak80d1BhRXdk?= =?utf-8?B?aC8yTVFvNlBDZUp1TVo5aGdsMnpXTGVpZ2xIZFU1RSt2SFlwa0xQakRYSTFm?= =?utf-8?B?TURMZGlMb2lWb2YrSExrTGtqZk95Qk9pQ3plN3ZqTkY1b09TaWVkOXQ0SC9L?= =?utf-8?B?WHZFWElwMytoM3BHT0hoamt3S0VqK0FqNmhqU1hZN3VHcjAxTnJ4TFJkZ0kx?= =?utf-8?B?STdZck5VcFN0Y29Hbmp0S3dFODVla2djQVVOcElKRUx2RERodDdaY2RkSWs5?= =?utf-8?B?RHgyb1Q3YWdYWFk2VVExdXNVdFBibUYvZEsrTVY5MC9GVXRudlEwZTgvOWxs?= =?utf-8?B?Vmk3aUlvYW9HYyt4eWhvazdBTnhSUzJwU1JoQ2VnZlNxZjJiNEc1RjZnalMr?= =?utf-8?B?MVF4ZkdscjA4dXJUYy9sOGVBaEFUUWhXOG5YbHNzTFNydGNqY09tSjlxUkJ1?= =?utf-8?B?YlIzdWZBbUpIbjQwYzgwaTVGOFFEVXNVOHNESHMrY0VrQnBtcTh6cWNQaVQ1?= =?utf-8?B?a3ZseDVuUGhteVViN0VFWTQ0T2dKTVNtaVpDZllXUzBiOW43dXR5R2kwZTB2?= =?utf-8?B?VWhvUElkUUQwVWF1ZENOT2JzUlZpT0hMdUxoVEJjdC9WSUp2bUk2SThodjVx?= =?utf-8?B?THRjUE02VHQ5aEJZcENzb0hDaHlBQnEwaHpLYmgzQ2M1S0xWZFdhMXVMcjVS?= =?utf-8?B?dUo0UEovL0FXYWV6clUrRHdoMmJ5elhwek9DTmFqU0xwdVRlRkZsQlVtUXNQ?= =?utf-8?Q?h+lGu84/SH7CBz8Gwsuavf1Y/xCTVBfw7C3Zzap?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 022cfb7c-c0b7-40f4-cbe9-08d9670b5345 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB5587.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2021 14:27:38.9839 (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: jWmxs45Fqndz6A/OBCjhl7yblH2lhZOvMG/icxABb33lAs3dynaT337+fOMopSoVfsMHfl1aXHu5CBhkrYfszw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB5586 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1629815280282100001 Content-Type: text/plain; charset="utf-8" map_domain_page() et al never fail; no need to check their return values against NULL, and no need to carry dead printk()s. Signed-off-by: Jan Beulich Reviewed-by: Kevin Tian --- a/xen/drivers/passthrough/amd/pci_amd_iommu.c +++ b/xen/drivers/passthrough/amd/pci_amd_iommu.c @@ -530,12 +530,6 @@ static void amd_dump_page_table_level(st return; =20 table_vaddr =3D __map_domain_page(pg); - if ( table_vaddr =3D=3D NULL ) - { - printk("AMD IOMMU failed to map domain page %"PRIpaddr"\n", - page_to_maddr(pg)); - return; - } =20 for ( index =3D 0; index < PTE_PER_TABLE_SIZE; index++ ) { --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2800,12 +2800,6 @@ static void vtd_dump_page_table_level(pa return; =20 pt_vaddr =3D map_vtd_domain_page(pt_maddr); - if ( pt_vaddr =3D=3D NULL ) - { - printk(VTDPREFIX " failed to map domain page %"PRIpaddr"\n", - pt_maddr); - return; - } =20 next_level =3D level - 1; for ( i =3D 0; i < PTE_NUM; i++ ) --- a/xen/drivers/passthrough/vtd/utils.c +++ b/xen/drivers/passthrough/vtd/utils.c @@ -106,11 +106,6 @@ void print_vtd_entries(struct vtd_iommu } =20 root_entry =3D (struct root_entry *)map_vtd_domain_page(iommu->root_ma= ddr); - if ( root_entry =3D=3D NULL ) - { - printk(" root_entry =3D=3D NULL\n"); - return; - } =20 printk(" root_entry[%02x] =3D %"PRIx64"\n", bus, root_entry[bus].va= l); if ( !root_present(root_entry[bus]) ) @@ -123,11 +118,6 @@ void print_vtd_entries(struct vtd_iommu val =3D root_entry[bus].val; unmap_vtd_domain_page(root_entry); ctxt_entry =3D map_vtd_domain_page(val); - if ( ctxt_entry =3D=3D NULL ) - { - printk(" ctxt_entry =3D=3D NULL\n"); - return; - } =20 val =3D ctxt_entry[devfn].lo; printk(" context[%02x] =3D %"PRIx64"_%"PRIx64"\n", @@ -151,11 +141,6 @@ void print_vtd_entries(struct vtd_iommu do { l =3D map_vtd_domain_page(val); - if ( l =3D=3D NULL ) - { - printk(" l%u =3D=3D NULL\n", level); - break; - } l_index =3D get_level_index(gmfn, level); pte.val =3D l[l_index]; unmap_vtd_domain_page(l);