From patchwork Thu Jan 27 14:47:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 12726877 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B4420C433F5 for ; Thu, 27 Jan 2022 14:48:04 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.261499.452862 (Exim 4.92) (envelope-from ) id 1nD642-00049D-53; Thu, 27 Jan 2022 14:47:54 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 261499.452862; Thu, 27 Jan 2022 14:47:54 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nD642-000496-1i; Thu, 27 Jan 2022 14:47:54 +0000 Received: by outflank-mailman (input) for mailman id 261499; Thu, 27 Jan 2022 14:47:52 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nD640-00048y-Kw for xen-devel@lists.xenproject.org; Thu, 27 Jan 2022 14:47:52 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 19e9cdd1-7f80-11ec-8f75-fffcc8bd4f1a; Thu, 27 Jan 2022 15:47:51 +0100 (CET) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-am5eur03lp2051.outbound.protection.outlook.com [104.47.8.51]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-32-QkxKy3ZaNgqEP2Vqov5T6g-2; Thu, 27 Jan 2022 15:47:49 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by AM6PR04MB4887.eurprd04.prod.outlook.com (2603:10a6:20b:b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.17; Thu, 27 Jan 2022 14:47:48 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::a1a4:21a6:8390:b5d5]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::a1a4:21a6:8390:b5d5%5]) with mapi id 15.20.4930.017; Thu, 27 Jan 2022 14:47:47 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 19e9cdd1-7f80-11ec-8f75-fffcc8bd4f1a DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1643294870; 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=3I1TgTZD2+5dVGqfXHMBx1Zok2HcxjSuWbMR77W+8Ws=; b=cQOT8IBdtZ9Oo73nlaXx8Y80xzutvzOmhTHxE11d6bNMBjWzuF4vzs7D57uQp2XIyZgUtL ONTLSZSkpDDcbxX1tQrlnr63u5/M39GiD2L/UyxgPuXPIJxcQkU6rMAnmHSLzMV8yWGKaB H5iUksDy1dxJ4162gxkejycI49EwY+k= X-MC-Unique: QkxKy3ZaNgqEP2Vqov5T6g-2 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cQpV4RTvgVx18TqU0PPmTGJL48fXXOE1ztN7ZTmddf8XKWIJhAMQV4gJjZb9I1VjUcz9drWzklw+BAratZk47jb6wi3kADV0Q5aepfA3Lq9R6WH+ZgfMYyr1u31BIK24m3qDRMIEtnQgrhHDuoWQZzN/e8y3X8HcMoFbuhSQF8+PrqCOzO/oXrD4am6utCPSmr0mHnNgFpW8OMVtZsL97FIDWEpeCZLAqww0nzMjnXSre3HB1dY72Tr9roU6hXhR0glMbN4qaZjuZ5VRMmNs53+DWK1FSJlX056zB0o90cYMM0uPxr1nURckYE9knlM9QctNQTVuOF0q2m3zbD5LaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3I1TgTZD2+5dVGqfXHMBx1Zok2HcxjSuWbMR77W+8Ws=; b=npiY8yXiJ7YagaTA07oXIy6vY3pB1o3i9D5bx/np6YrYR/eK6Uc4aTypkBYiRL3PDYy4v+6MgQXMbE1in3Gbwpy6MgiF1kknGNKdyj8PLUEsdClJgE+O+PT80wqoXX1Vt+iK8lkB72l+7YC4kOGFSGXLAYy8C4RZ+t6QB7Im7fg1ZxOMsTgL6m+9mGmix+XT+zCSaJPtbUAbHP4Nzmtm8I7yDnDdspnGbkf5kBuejiUZW5TXeeRIpEMqYjPS1HfbIWRVV+9UUomEkAJ8CsXAAPW0Zr/PtksGa4vIhH8UXFFV1KoM8I0R3GeP2qPRmDSUf+pWf2XceJt4vntRUJRkeg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <9f6e1b13-d53f-05d3-0f88-a05bd0da03f9@suse.com> Date: Thu, 27 Jan 2022 15:47:46 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: [PATCH v2 1/4] IOMMU/x86: switch to alternatives-call patching in further instances Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper References: <4b7db7ae-eb84-7ecc-4334-fe5f0f7ef46b@suse.com> In-Reply-To: <4b7db7ae-eb84-7ecc-4334-fe5f0f7ef46b@suse.com> X-ClientProxiedBy: AS8PR07CA0047.eurprd07.prod.outlook.com (2603:10a6:20b:459::35) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c63a46aa-a43f-47ef-e60c-08d9e1a3fc25 X-MS-TrafficTypeDiagnostic: AM6PR04MB4887:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6108; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Oy+1oBsgj5mTYoNqMUyONYC3EvkFF6whnq3Ovi93Vg2iQTdlnNvKkxOKL05IDyPigFPuv1qIWszkTBwCwctHDAH3fF1U5T4zlfGe3hVB72SRaixICi+gnW9B7+ZAFpYV29ZZE80+1e1ULKwuIwQm2HmykPPX4OOUUHAdAz9qrBu7VrmhvAD2UiarjuWRFai8L9IVUHo9Ie2fPgqA2m9jGc5iGDUU/T9guHRojWrjOCBRv2C3JwtojcAKM1MLFns0lk8+SKBy+mC5q4xECM14ob/MyB9/wPYGBF7+R0Ge5R2R6+NYfhhjuOSfpkpmQn/HoxyBRecUBIbHvU0ftVxJFsjeQTxlLKUpWyvLi+TrtKuYIbIDfzU+MJAAJN07w+dcik154I/e1POmgmbWat54mwHHqOAW2CHMgmbLDPsZkl7POw6+cGjSiDB2y9qAtZNVu9qZd54ALPNaPKG0sMMlvHO3Aj3G+8gVKDsrjMg7E2/cXSp9xGDAP1SDUyhbirOsYvM+9MKVCW5DGXnD6RL65P2JBTl4rp4V/DYrAe3geR/opQxP3GzdjR8hpHehLD6vTEDlGjNmbJ/BinyIiVUuj3WME0/kwV7TO5z/hpx9Yl8tI+yVBFIQ5zBQvoq0TUGTaMtAaYnjItM1JDPMxx7zIv5m3GTxQi7rc4gxYtgO8MlSnSZFSXC1B8u0UBd7qB8/ouqe+GhSKh3Xfg44ExpMX1+SkhEnXYUg2R1f0HmdPODhaT3hH0djkkpYVdeWHOFa X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(36756003)(83380400001)(6512007)(6506007)(186003)(26005)(31686004)(31696002)(6486002)(2616005)(54906003)(6916009)(316002)(86362001)(508600001)(2906002)(4326008)(8676002)(8936002)(5660300002)(66556008)(66476007)(38100700002)(66946007)(43740500002)(45980500001)(20210929001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?+hs+5S4J6yG2E4CvtNkrvgPYTO4o?= =?utf-8?q?zaO9bhMrDBotR4sgaAoh8XYvhAl8kmTch3DpK8vTDp3v+ajZXx4bysjOafXLfFN0T?= =?utf-8?q?X06nqUOJNcQBd0Psz+MPQjia2u0hjliYqoRySDxwqTws6AawFKHeZxFXSrspkO/Sh?= =?utf-8?q?12cDPnGyhflfpnKKBo7y+AG8CoYusqc3NyC9XKTM4SpqgU6h8teX3HO66z8cYQKM5?= =?utf-8?q?HSrKlOy+cN2t9Z1M2zlMgK491uFffMSpYJ8lfJcDJ5HzBt7WKbCoHJm98QZubGWMd?= =?utf-8?q?3NTJ3q1a26J69NQXuODw1kBhWAqKbUmAesCC4Yzwc6Jz6qhouCKu+++lELJ+Mv4WD?= =?utf-8?q?9I94Sf2bmBRcdXvG3GGflAYRx8r50+o3KBcHeDWBviBJl8iw7/bnKBTrAOP6H1Y8x?= =?utf-8?q?6Yl6zWss3HIsS0Hgd0zbbJp/lN1afjN6OJBz+6a+uWqxeVJIdfTJ+K+yoH2y4zu2i?= =?utf-8?q?LpAt5aozYczKfgo4zagCKqV1lFnzjPebsKh0SH6Qox9rRCy9Oj20XUT8MR/qvOAlx?= =?utf-8?q?0mgh7Pej3F8H3CcDxWhOe4qaR7rZW/EwGuLVgQm091NTQE5wZWVj9yFxDvSSRPbg0?= =?utf-8?q?VLfQP9rQCCxB7P5dE3vq4PLn6jVXWmtWI4IeEy9lK2FE3JJ+2PATNNj2PV3aRCLfb?= =?utf-8?q?zeNU28u1x75uK2wmx3tNdCjqhPD/jvqfJloEY5XnZUQF25WZ1VhnajUPmmuExnVv9?= =?utf-8?q?bPWeCm26Zppl1vq8cvPvSYjNcvD/STEQ/aBFPJSMDZKCQZPdcxXFFUZc8fgyiY8RY?= =?utf-8?q?GOniuB7pEuiHDwJBfUeeM5blpFalqB/Gs4L9sSbrUUjwuHk/4jqOmq2l2DJ3uDhT5?= =?utf-8?q?/DSvIPnBaiXCibLDzCZ7SiWZGNwtjLK/VkhiyWulxNQAz+Q2mDF7VtBkVMKuiojtf?= =?utf-8?q?WNNCX7NK2Mz6zvLOSjVTlwH5bxLKRQiAdUqMO0qwqEuuuLUwuLRXDywwtbZcOzS6E?= =?utf-8?q?eVH2/adPsDU8T9BjBUwOLecMIIAUVJAA51RrdiLSM5oGcp45RPWrEc3PXOOvMOhiQ?= =?utf-8?q?/pl9hHKQvYWmWBaYM42ysmInueYu6DABHY9kiAGmjCG7qIJTTd9AD+feRCIWXCdqd?= =?utf-8?q?ZZ8DaOLzSWwPqDFrGbfuSDFreKEbdFVVpaln5TyK/Gcnyn8vq91PsUk68fQ5bM+Qe?= =?utf-8?q?+M7nyQEj4CvTOAsS6Xbs02nQwTwEqQ8qoShtU9wfntcLktD0PCXrve9Ovn6Gnn7E/?= =?utf-8?q?hDNEL51HN1q8ctFCH/BPbyDqQjbrAILFs/N23y9YfzZKLgKvdllChVG9/jRXQFj04?= =?utf-8?q?57b7FfoUI7cX/7E3p0zsBGjNKoFhR+OxyPgf8RJQ5o6Pl9CXh4cMo+Xuzrs/kp3rG?= =?utf-8?q?LXXUZvVrxRRzBz3JqLrRV2ZH8PE6dZuhxMQz8/Cg9Jc2kcATPJzNk0g+B2xQEtsDP?= =?utf-8?q?EONX+MLp1NpSAkVXK0LKWbvjfbvVJJ1OKrw6s4XDv70e2TitVzTcMTmnxy2p1/P0f?= =?utf-8?q?r6IvAeVOFCxT46lX3wTGtCC0826gmGRoXj/m9Pe/yrM0RWEKXvbrWYsyFj6GUxB9C?= =?utf-8?q?x6oqDLArL+Ulsm841iANVIXh1l8wibuiA+O1fZdgAo5sUoFPYO1+bUU=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: c63a46aa-a43f-47ef-e60c-08d9e1a3fc25 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jan 2022 14:47:47.8084 (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: XgTQ62oT5ODM3RxKnZjnlxbH9QpUBnc0YkYXvCHnB1z7lAvXGSSastUBuIuzDxrwsX+nO/3U16ZFfR+N8lBWKw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB4887 This is, once again, to limit the number of indirect calls as much as possible. The only hook invocation which isn't sensible to convert is setup(). And of course Arm-only use sites are left alone as well. Note regarding the introduction / use of local variables in pci.c: struct pci_dev's involved fields are const. This const propagates, via typeof(), to the local helper variables in the altcall macros. These helper variables are, however, used as outputs (and hence can't be const). In iommu_get_device_group() make use of the new local variables to also simplify some adjacent code. Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant Reviewed-by: Rahul Singh Tested-by: Rahul Singh --- a/xen/drivers/passthrough/iommu.c +++ b/xen/drivers/passthrough/iommu.c @@ -198,7 +198,7 @@ int iommu_domain_init(struct domain *d, return ret; hd->platform_ops = iommu_get_ops(); - ret = hd->platform_ops->init(d); + ret = iommu_call(hd->platform_ops, init, d); if ( ret || is_system_domain(d) ) return ret; @@ -233,7 +233,7 @@ void __hwdom_init iommu_hwdom_init(struc register_keyhandler('o', &iommu_dump_page_tables, "dump iommu page tables", 0); - hd->platform_ops->hwdom_init(d); + iommu_vcall(hd->platform_ops, hwdom_init, d); } static void iommu_teardown(struct domain *d) @@ -576,7 +576,7 @@ int iommu_get_reserved_device_memory(iom if ( !ops->get_reserved_device_memory ) return 0; - return ops->get_reserved_device_memory(func, ctxt); + return iommu_call(ops, get_reserved_device_memory, func, ctxt); } bool_t iommu_has_feature(struct domain *d, enum iommu_feature feature) @@ -603,7 +603,7 @@ static void iommu_dump_page_tables(unsig continue; } - dom_iommu(d)->platform_ops->dump_page_tables(d); + iommu_vcall(dom_iommu(d)->platform_ops, dump_page_tables, d); } rcu_read_unlock(&domlist_read_lock); --- a/xen/drivers/passthrough/pci.c +++ b/xen/drivers/passthrough/pci.c @@ -861,15 +861,15 @@ static int deassign_device(struct domain devfn += pdev->phantom_stride; if ( PCI_SLOT(devfn) != PCI_SLOT(pdev->devfn) ) break; - ret = hd->platform_ops->reassign_device(d, target, devfn, - pci_to_dev(pdev)); + ret = iommu_call(hd->platform_ops, reassign_device, d, target, devfn, + pci_to_dev(pdev)); if ( ret ) goto out; } devfn = pdev->devfn; - ret = hd->platform_ops->reassign_device(d, target, devfn, - pci_to_dev(pdev)); + ret = iommu_call(hd->platform_ops, reassign_device, d, target, devfn, + pci_to_dev(pdev)); if ( ret ) goto out; @@ -1300,7 +1300,7 @@ static int iommu_add_device(struct pci_d { const struct domain_iommu *hd; int rc; - u8 devfn; + unsigned int devfn = pdev->devfn; if ( !pdev->domain ) return -EINVAL; @@ -1311,16 +1311,16 @@ static int iommu_add_device(struct pci_d if ( !is_iommu_enabled(pdev->domain) ) return 0; - rc = hd->platform_ops->add_device(pdev->devfn, pci_to_dev(pdev)); + rc = iommu_call(hd->platform_ops, add_device, devfn, pci_to_dev(pdev)); if ( rc || !pdev->phantom_stride ) return rc; - for ( devfn = pdev->devfn ; ; ) + for ( ; ; ) { devfn += pdev->phantom_stride; if ( PCI_SLOT(devfn) != PCI_SLOT(pdev->devfn) ) return 0; - rc = hd->platform_ops->add_device(devfn, pci_to_dev(pdev)); + rc = iommu_call(hd->platform_ops, add_device, devfn, pci_to_dev(pdev)); if ( rc ) printk(XENLOG_WARNING "IOMMU: add %pp failed (%d)\n", &pdev->sbdf, rc); @@ -1341,7 +1341,7 @@ static int iommu_enable_device(struct pc !hd->platform_ops->enable_device ) return 0; - return hd->platform_ops->enable_device(pci_to_dev(pdev)); + return iommu_call(hd->platform_ops, enable_device, pci_to_dev(pdev)); } static int iommu_remove_device(struct pci_dev *pdev) @@ -1363,7 +1363,8 @@ static int iommu_remove_device(struct pc devfn += pdev->phantom_stride; if ( PCI_SLOT(devfn) != PCI_SLOT(pdev->devfn) ) break; - rc = hd->platform_ops->remove_device(devfn, pci_to_dev(pdev)); + rc = iommu_call(hd->platform_ops, remove_device, devfn, + pci_to_dev(pdev)); if ( !rc ) continue; @@ -1371,7 +1372,9 @@ static int iommu_remove_device(struct pc return rc; } - return hd->platform_ops->remove_device(pdev->devfn, pci_to_dev(pdev)); + devfn = pdev->devfn; + + return iommu_call(hd->platform_ops, remove_device, devfn, pci_to_dev(pdev)); } static int device_assigned(u16 seg, u8 bus, u8 devfn) @@ -1421,7 +1424,8 @@ static int assign_device(struct domain * pdev->fault.count = 0; - if ( (rc = hd->platform_ops->assign_device(d, devfn, pci_to_dev(pdev), flag)) ) + if ( (rc = iommu_call(hd->platform_ops, assign_device, d, devfn, + pci_to_dev(pdev), flag)) ) goto done; for ( ; pdev->phantom_stride; rc = 0 ) @@ -1429,7 +1433,8 @@ static int assign_device(struct domain * devfn += pdev->phantom_stride; if ( PCI_SLOT(devfn) != PCI_SLOT(pdev->devfn) ) break; - rc = hd->platform_ops->assign_device(d, devfn, pci_to_dev(pdev), flag); + rc = iommu_call(hd->platform_ops, assign_device, d, devfn, + pci_to_dev(pdev), flag); } done: @@ -1457,24 +1462,24 @@ static int iommu_get_device_group( if ( !is_iommu_enabled(d) || !ops->get_device_group_id ) return 0; - group_id = ops->get_device_group_id(seg, bus, devfn); + group_id = iommu_call(ops, get_device_group_id, seg, bus, devfn); pcidevs_lock(); for_each_pdev( d, pdev ) { - if ( (pdev->seg != seg) || - ((pdev->bus == bus) && (pdev->devfn == devfn)) ) + unsigned int b = pdev->bus; + unsigned int df = pdev->devfn; + + if ( (pdev->seg != seg) || ((b == bus) && (df == devfn)) ) continue; - if ( xsm_get_device_group(XSM_HOOK, (seg << 16) | (pdev->bus << 8) | pdev->devfn) ) + if ( xsm_get_device_group(XSM_HOOK, (seg << 16) | (b << 8) | df) ) continue; - sdev_id = ops->get_device_group_id(seg, pdev->bus, pdev->devfn); + sdev_id = iommu_call(ops, get_device_group_id, seg, b, df); if ( (sdev_id == group_id) && (i < max_sdevs) ) { - bdf = 0; - bdf |= (pdev->bus & 0xff) << 16; - bdf |= (pdev->devfn & 0xff) << 8; + bdf = (b << 16) | (df << 8); if ( unlikely(copy_to_guest_offset(buf, i, &bdf, 1)) ) { --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -145,7 +145,7 @@ unsigned int iommu_read_apic_from_ire(un int __init iommu_setup_hpet_msi(struct msi_desc *msi) { const struct iommu_ops *ops = iommu_get_ops(); - return ops->setup_hpet_msi ? ops->setup_hpet_msi(msi) : -ENODEV; + return ops->setup_hpet_msi ? iommu_call(ops, setup_hpet_msi, msi) : -ENODEV; } void __hwdom_init arch_iommu_check_autotranslated_hwdom(struct domain *d) @@ -406,7 +406,7 @@ int iommu_free_pgtables(struct domain *d * Pages will be moved to the free list below. So we want to * clear the root page-table to avoid any potential use after-free. */ - hd->platform_ops->clear_root_pgtable(d); + iommu_vcall(hd->platform_ops, clear_root_pgtable, d); while ( (pg = page_list_remove_head(&hd->arch.pgtables.list)) ) { From patchwork Thu Jan 27 14:48:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 12726880 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4C0C6C433EF for ; Thu, 27 Jan 2022 14:48:46 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.261504.452873 (Exim 4.92) (envelope-from ) id 1nD64f-0004mN-IP; Thu, 27 Jan 2022 14:48:33 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 261504.452873; Thu, 27 Jan 2022 14:48:33 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nD64f-0004mG-Ec; Thu, 27 Jan 2022 14:48:33 +0000 Received: by outflank-mailman (input) for mailman id 261504; Thu, 27 Jan 2022 14:48:32 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nD64d-00048y-VI for xen-devel@lists.xenproject.org; Thu, 27 Jan 2022 14:48:32 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 31a6ca23-7f80-11ec-8f75-fffcc8bd4f1a; Thu, 27 Jan 2022 15:48:30 +0100 (CET) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-am5eur03lp2053.outbound.protection.outlook.com [104.47.8.53]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-29-FYOqhvIEOheojccgRClpvw-1; Thu, 27 Jan 2022 15:48:29 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by AM6PR04MB4887.eurprd04.prod.outlook.com (2603:10a6:20b:b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.17; Thu, 27 Jan 2022 14:48:28 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::a1a4:21a6:8390:b5d5]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::a1a4:21a6:8390:b5d5%5]) with mapi id 15.20.4930.017; Thu, 27 Jan 2022 14:48:28 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 31a6ca23-7f80-11ec-8f75-fffcc8bd4f1a DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1643294910; 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=9uRmQeQ2GIyo2OW1VQw24UUZo9Bo39U2yqak3SzTI9o=; b=fQCcnO0Logkpo3J7KwRkGmJ4AYW7R3uc8rd10P6/+qZ2hbCAVAfpNaPw1921/0O08oQ41u S0OqYmv3IkvO2Zl82d+8lTvOFTtFUlZKEe9Uoo7bhdm9Frcs5qcQhq4sf8UkJXgXsyFDf3 K1oXsat81n96pmttHwg587fzolzt0JU= X-MC-Unique: FYOqhvIEOheojccgRClpvw-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Iaf2ZAEFiph+lboTFgT+gQj387kmVuAt6F1xsUZrzsUYxupz+2c8jmeSs9nYwMNIrCDXpeetjQyc1ZeYmCFX8Rf1JeAq3Jf1J/0q2VUBbsTFolvTSR024Ez98XSXl3JynoNcWxkkz+J/P1lDpGU1Zd+tlQuUXi/yH4TN6w3EAIMR4p+IsORYaHNivg1ufQdmXmwLL00gjl5pt6UUEzuQwrCDf3NAbpRNgnmDSuw5OrikmiPPEXDOg+GhYrtT4+3N0kA/kwj7r0b+jMIx9DSPxFpzkPSizSYpTVf4X6sfZmDhqlINvy/KzTPpjt4dAWPYfiVgGZw79l33dHcxv46Bog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9uRmQeQ2GIyo2OW1VQw24UUZo9Bo39U2yqak3SzTI9o=; b=B2QbSkVWPjNwseaykb2WLX+lrl7PXgLs65Ed+OJGBECu7hAhiZwBXd31dxw4DAR9aWDpbRjuoBV5bQiJwn6OfON+jW7U2eDXvfzKHA/XNusD55I9sLp9sVA0QkyxeHZ1OjcixkaV+G/Z0Ojz+QHyRcZ2WY6qaWfQOa2VXz+/QsyTnyQiGXEwH/b20cbxqag/TlUtIcTw36byd+wS9KZcbg3YbNoyxL3zAzwtkS0lT4oQcN3lzJrFTssJAtH6FPONBD/wEZLM9HsvNfsR9HJPyNafwhELsEhraYjDUwBO4qn7KRt9ES061jYX02lPmg/ifK3DU7x8VsBSolkfdZ1SlQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <54c4539f-0bed-c42d-aa8e-4e31c45c4245@suse.com> Date: Thu, 27 Jan 2022 15:48:26 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: [PATCH v2 2/4] VT-d / x86: re-arrange cache syncing Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Kevin Tian , Andrew Cooper , Wei Liu , =?utf-8?q?Roger_Pau_Monn=C3=A9?= References: <4b7db7ae-eb84-7ecc-4334-fe5f0f7ef46b@suse.com> In-Reply-To: <4b7db7ae-eb84-7ecc-4334-fe5f0f7ef46b@suse.com> X-ClientProxiedBy: AS8PR07CA0058.eurprd07.prod.outlook.com (2603:10a6:20b:459::15) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f8b32988-752b-4555-8ed0-08d9e1a41444 X-MS-TrafficTypeDiagnostic: AM6PR04MB4887:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2zeN7dvCFKzVFE9+qYjDRHT6ox73hyj6qKSq8ajxBYoewhpwunKTLYWI46SxPMgC+S7NI4SH8mVATSaHZBV4kfaGoaNX4okyouZNgQUCEpZ1bv3KsNfj3NM+SomOtqnKOvBwd5Sm8NHAFPJ1t/XvTlMtg50W6Kv0aMuf0rg00f5tw6f2QuDjNiUEV3FBXcQuK9yu/aJ1p+5abuaRtAs5+j1ESjLQ/Ji6Lfx4/MqPQ+5LDeXaNDLrbXUR55whwIcLnHSwUHyOxyj28aYRZvBkDjGi7bNbmUlGxZJ6tWIXktBaN3qwT80w3+nc0uQcT3hYhH/nxC3fHobF8Nypmf1XjEg2fdoh4ZQa0Zel7FMxw8KxE0O2/A+YZvuAfheZfyGUox/jg/L2z6E3aVAlnofZcMUysvVleBhjjVPeA/mmgku6KCjuOu/xAyDn089t/6qCxWz5Byg0Ieg4vBEdf6xXz7Nz03zDVs4nq9xbE2ccwKQAJQj+NkCgppj2id5MUCiRT2A1Lw9T4OXEaH8AjhHJ9uDK0iNxU7EkdsX9E1FMz51+29Z24NkdgAPl1n+8yIJmxukp/e1F/fXyl/aPv+dLPL99bIU1uPLNkLKuxy8rk3MeY85/3n2BBitlExY1zSdvLj9KBGt3iWlOA2GUTR0VXIiu6WhImRqaVRwaESuJUO4CFwjuP3CG0vxdTiYc4aThc8gX/VUXh1wO+aRYWo+pR4IVllb87WOjZYx119Dr6FrGaWRanZPzmf++w8Wc7nSC X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(36756003)(83380400001)(6512007)(6506007)(186003)(26005)(31686004)(31696002)(6486002)(2616005)(54906003)(6916009)(316002)(86362001)(508600001)(2906002)(4326008)(8676002)(8936002)(5660300002)(66556008)(66476007)(38100700002)(66946007)(43740500002)(45980500001)(20210929001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?7rtWiNWKL9EK7jpsFLZJyHgEXiYQ?= =?utf-8?q?FCdiOccoL2i7aH8JxT1YF7AR4F8oD5YHeefCVAqYnHHTwsRYfoFEsHK+tL0q/2Z9r?= =?utf-8?q?esNokyN1KzWGJ518qSAI1wXL4G91PgwcNvTB1H/IAneOnIAlwlbX/gBKXzxwUvJu5?= =?utf-8?q?spxcPhG5/gnFpJ93ayrnAfi0i6O3eWHGF5vxcoO7z6FxrAyZsTwl2JC9IP8b6fiZc?= =?utf-8?q?KWMj8I/cxeSlLJsUsBQ2yUARgYH0ofkboCAx71dZP+TICNshIWVZwp/9YsAZJaRaD?= =?utf-8?q?fYtzjxqQOatBDW8eta3XMHhIOHs2RK/BGRiyOcXJCBqcl5Xr8iUk0CeCs24+5yz2D?= =?utf-8?q?0l5lIQgdWJsNM1jdmZ0SgW3Z0/bZklm5JvixFl2CRUhmp1r0Kh5gG8NNSJPmXkKlm?= =?utf-8?q?cu4rJxXyRzWtnRXPRrDcN6Iokyh0BR1OIxiTkQPknYrtb7/z6I/kLISjs9wK503o6?= =?utf-8?q?3+3aOMcJ2EqOEkqreAtaaMFxey3DN+iEDjaMIKjjkok3WOTmEX8XKYhrQGZgdtSp3?= =?utf-8?q?XNFyJDrNRtAE0mFwfriQOc/73Wr03Ztuu0sVdZlghwthlDtulsiLFq3G4rTy64EfL?= =?utf-8?q?NPkPGkJw69EqTfuQCBPmzSz+HG9RkHcxz3Z+XidExvqkheYi2L6QOfpv+W1oxLhlB?= =?utf-8?q?ktYoohFON8KvW3tnldFbPPspLF6LtxeCayGUBNYcUKGmlOqLUFCwil1YNa6enst+m?= =?utf-8?q?AMqvmw/Oxg1GbEl+zqb/tEoDcQruIK0e7q7g2Ia0h4mEnnn78IaXtZ0F3qS+tzZSi?= =?utf-8?q?CrSY3mERfHZvkR1YMjcXcAGFCoAgSDaaC74IHvLco+I5H72Ozboz9Izt3Zk8o3qNo?= =?utf-8?q?sd4t9GxIWkdtY31NZuC0hqtxMCW3sKCR90Qw4o2dZQurUIB5nUum84XICjH48VFPa?= =?utf-8?q?3GIE4hi5crXujpIQ3eit+KyRtXYnt5YxpMjoOaeb/j12zyFONacPWApoDsbn3scwf?= =?utf-8?q?Qia/R8X8nv6uWswJGUjZCi5C2g9CyFV4eesQXczb3HitRFPtU1sGayWKAAQtKvBQ0?= =?utf-8?q?LqNpEZo/cjapGCPi5KdBiD16LOAlrHnnokm5IOWU/gsCCo9Z3enUzyJQsa1ycu24h?= =?utf-8?q?iPhzeNcshMgG3TKSj1jAdC0rCkIOsVwGyGRSNWSnSJ8LBMGZ5vozvkarrqTTr9p9y?= =?utf-8?q?e9MqOKI6TzkBzPAdg+w1/gOWZHEHE39UrzEFaYCkMHVIWldRkrVz09edLrrR4uMc4?= =?utf-8?q?s5HyUL12JpvZVqg4HFvV59F7OZgP+h6PSEVQ4ON2zJdUw5YHLGrYVsaloVbfiAOpD?= =?utf-8?q?w5vAZbxcR6t4po29rslGlRtxkRhbvYFm+mKNd/zf6h60n+W7u0gXlWboyS4VyqiyI?= =?utf-8?q?7kMijIdY6JTRAdX8SUNpqGZBTqa08pNnFVBKu3uyRnLj4D4YIcVR0XV62DXBxOIrV?= =?utf-8?q?Ntsg4sveBYnetprELHbzhHZzW0ws8EbwO9J70qiEX4TZFucXQm6HUwRssgCiFsRXT?= =?utf-8?q?SdPGg6SOoAVXlOTFg6Y9l1GM+IcQR4zgMQukO1vX6/ALiB51AhffbCnYGT70DzhNO?= =?utf-8?q?NBjiKESZ7ZCqc9TrkS0PcXmo+mAB3bImwe8AU47qzivb7VOZk4khI2c=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: f8b32988-752b-4555-8ed0-08d9e1a41444 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jan 2022 14:48:28.2121 (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: rhnPS8FxfXme2rYRGL1yR4XQHYWaAT+b74XViFOvPZg5gk63lmVQhysQ3fczqaevHcxByva2O+5wOy0kLBT+vw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB4887 The actual function should always have lived in core x86 code; move it there, replacing get_cache_line_size() by readily available (except very early during boot; see the code comment) data. Also rename the function. Drop the respective IOMMU hook, (re)introducing a respective boolean instead. Replace a true and an almost open-coding instance of iommu_sync_cache(). Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant Reviewed-by: Kevin Tian --- Placing the function next to flush_area_local() exposes a curious asymmetry between the SFENCE placements: sync_cache() has it after the flush, while flush_area_local() has it before it. I think the latter one is misplaced. --- v2: Rename sync_cache() to cache_writeback(). --- a/xen/arch/x86/flushtlb.c +++ b/xen/arch/x86/flushtlb.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -265,6 +266,57 @@ unsigned int flush_area_local(const void return flags; } +void cache_writeback(const void *addr, unsigned int size) +{ + /* + * This function may be called before current_cpu_data is established. + * Hence a fallback is needed to prevent the loop below becoming infinite. + */ + unsigned int clflush_size = current_cpu_data.x86_clflush_size ?: 16; + const void *end = addr + size; + + addr -= (unsigned long)addr & (clflush_size - 1); + for ( ; addr < end; addr += clflush_size ) + { +/* + * The arguments to a macro must not include preprocessor directives. Doing so + * results in undefined behavior, so we have to create some defines here in + * order to avoid it. + */ +#if defined(HAVE_AS_CLWB) +# define CLWB_ENCODING "clwb %[p]" +#elif defined(HAVE_AS_XSAVEOPT) +# define CLWB_ENCODING "data16 xsaveopt %[p]" /* clwb */ +#else +# define CLWB_ENCODING ".byte 0x66, 0x0f, 0xae, 0x30" /* clwb (%%rax) */ +#endif + +#define BASE_INPUT(addr) [p] "m" (*(const char *)(addr)) +#if defined(HAVE_AS_CLWB) || defined(HAVE_AS_XSAVEOPT) +# define INPUT BASE_INPUT +#else +# define INPUT(addr) "a" (addr), BASE_INPUT(addr) +#endif + /* + * Note regarding the use of NOP_DS_PREFIX: it's faster to do a clflush + * + prefix than a clflush + nop, and hence the prefix is added instead + * of letting the alternative framework fill the gap by appending nops. + */ + alternative_io_2(".byte " __stringify(NOP_DS_PREFIX) "; clflush %[p]", + "data16 clflush %[p]", /* clflushopt */ + X86_FEATURE_CLFLUSHOPT, + CLWB_ENCODING, + X86_FEATURE_CLWB, /* no outputs */, + INPUT(addr)); +#undef INPUT +#undef BASE_INPUT +#undef CLWB_ENCODING + } + + alternative_2("", "sfence", X86_FEATURE_CLFLUSHOPT, + "sfence", X86_FEATURE_CLWB); +} + unsigned int guest_flush_tlb_flags(const struct domain *d) { bool shadow = paging_mode_shadow(d); --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -240,54 +240,6 @@ domid_t did_to_domain_id(const struct vt return iommu->domid_map[did]; } -static void sync_cache(const void *addr, unsigned int size) -{ - static unsigned long clflush_size = 0; - const void *end = addr + size; - - if ( clflush_size == 0 ) - clflush_size = get_cache_line_size(); - - addr -= (unsigned long)addr & (clflush_size - 1); - for ( ; addr < end; addr += clflush_size ) -/* - * The arguments to a macro must not include preprocessor directives. Doing so - * results in undefined behavior, so we have to create some defines here in - * order to avoid it. - */ -#if defined(HAVE_AS_CLWB) -# define CLWB_ENCODING "clwb %[p]" -#elif defined(HAVE_AS_XSAVEOPT) -# define CLWB_ENCODING "data16 xsaveopt %[p]" /* clwb */ -#else -# define CLWB_ENCODING ".byte 0x66, 0x0f, 0xae, 0x30" /* clwb (%%rax) */ -#endif - -#define BASE_INPUT(addr) [p] "m" (*(const char *)(addr)) -#if defined(HAVE_AS_CLWB) || defined(HAVE_AS_XSAVEOPT) -# define INPUT BASE_INPUT -#else -# define INPUT(addr) "a" (addr), BASE_INPUT(addr) -#endif - /* - * Note regarding the use of NOP_DS_PREFIX: it's faster to do a clflush - * + prefix than a clflush + nop, and hence the prefix is added instead - * of letting the alternative framework fill the gap by appending nops. - */ - alternative_io_2(".byte " __stringify(NOP_DS_PREFIX) "; clflush %[p]", - "data16 clflush %[p]", /* clflushopt */ - X86_FEATURE_CLFLUSHOPT, - CLWB_ENCODING, - X86_FEATURE_CLWB, /* no outputs */, - INPUT(addr)); -#undef INPUT -#undef BASE_INPUT -#undef CLWB_ENCODING - - alternative_2("", "sfence", X86_FEATURE_CLFLUSHOPT, - "sfence", X86_FEATURE_CLWB); -} - /* Allocate page table, return its machine address */ uint64_t alloc_pgtable_maddr(unsigned long npages, nodeid_t node) { @@ -306,8 +258,7 @@ uint64_t alloc_pgtable_maddr(unsigned lo clear_page(vaddr); - if ( (iommu_ops.init ? &iommu_ops : &vtd_ops)->sync_cache ) - sync_cache(vaddr, PAGE_SIZE); + iommu_sync_cache(vaddr, PAGE_SIZE); unmap_domain_page(vaddr); cur_pg++; } @@ -1327,7 +1278,7 @@ int __init iommu_alloc(struct acpi_drhd_ iommu->nr_pt_levels = agaw_to_level(agaw); if ( !ecap_coherent(iommu->ecap) ) - vtd_ops.sync_cache = sync_cache; + iommu_non_coherent = true; nr_dom = cap_ndoms(iommu->cap); --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -28,6 +28,7 @@ const struct iommu_init_ops *__initdata iommu_init_ops; struct iommu_ops __read_mostly iommu_ops; +bool __read_mostly iommu_non_coherent; enum iommu_intremap __read_mostly iommu_intremap = iommu_intremap_full; @@ -438,8 +439,7 @@ struct page_info *iommu_alloc_pgtable(st p = __map_domain_page(pg); clear_page(p); - if ( hd->platform_ops->sync_cache ) - iommu_vcall(hd->platform_ops, sync_cache, p, PAGE_SIZE); + iommu_sync_cache(p, PAGE_SIZE); unmap_domain_page(p); --- a/xen/arch/x86/include/asm/cache.h +++ b/xen/arch/x86/include/asm/cache.h @@ -11,4 +11,10 @@ #define __read_mostly __section(".data.read_mostly") +#ifndef __ASSEMBLY__ + +void cache_writeback(const void *addr, unsigned int size); + +#endif + #endif --- a/xen/arch/x86/include/asm/iommu.h +++ b/xen/arch/x86/include/asm/iommu.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -134,12 +135,13 @@ extern bool untrusted_msi; int pi_update_irte(const struct pi_desc *pi_desc, const struct pirq *pirq, const uint8_t gvec); -#define iommu_sync_cache(addr, size) ({ \ - const struct iommu_ops *ops = iommu_get_ops(); \ - \ - if ( ops->sync_cache ) \ - iommu_vcall(ops, sync_cache, addr, size); \ -}) +extern bool iommu_non_coherent; + +static inline void iommu_sync_cache(const void *addr, unsigned int size) +{ + if ( iommu_non_coherent ) + cache_writeback(addr, size); +} int __must_check iommu_free_pgtables(struct domain *d); struct page_info *__must_check iommu_alloc_pgtable(struct domain *d); --- a/xen/include/xen/iommu.h +++ b/xen/include/xen/iommu.h @@ -268,7 +268,6 @@ struct iommu_ops { int (*setup_hpet_msi)(struct msi_desc *); int (*adjust_irq_affinities)(void); - void (*sync_cache)(const void *addr, unsigned int size); void (*clear_root_pgtable)(struct domain *d); int (*update_ire_from_msi)(struct msi_desc *msi_desc, struct msi_msg *msg); #endif /* CONFIG_X86 */ --- a/xen/drivers/passthrough/vtd/extern.h +++ b/xen/drivers/passthrough/vtd/extern.h @@ -78,7 +78,6 @@ int __must_check qinval_device_iotlb_syn struct pci_dev *pdev, u16 did, u16 size, u64 addr); -unsigned int get_cache_line_size(void); void flush_all_cache(void); uint64_t alloc_pgtable_maddr(unsigned long npages, nodeid_t node); --- a/xen/drivers/passthrough/vtd/x86/vtd.c +++ b/xen/drivers/passthrough/vtd/x86/vtd.c @@ -47,11 +47,6 @@ void unmap_vtd_domain_page(const void *v unmap_domain_page(va); } -unsigned int get_cache_line_size(void) -{ - return ((cpuid_ebx(1) >> 8) & 0xff) * 8; -} - void flush_all_cache() { wbinvd(); From patchwork Thu Jan 27 14:49:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 12726881 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A3CCDC433EF for ; Thu, 27 Jan 2022 14:49:20 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.261508.452884 (Exim 4.92) (envelope-from ) id 1nD65G-0005LQ-Qx; Thu, 27 Jan 2022 14:49:10 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 261508.452884; Thu, 27 Jan 2022 14:49:10 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nD65G-0005LJ-Ng; Thu, 27 Jan 2022 14:49:10 +0000 Received: by outflank-mailman (input) for mailman id 261508; Thu, 27 Jan 2022 14:49:09 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nD65F-0005K3-LD for xen-devel@lists.xenproject.org; Thu, 27 Jan 2022 14:49:09 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.109.102]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 482ca612-7f80-11ec-8eb8-a37418f5ba1a; Thu, 27 Jan 2022 15:49:08 +0100 (CET) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01lp2055.outbound.protection.outlook.com [104.47.0.55]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-31-2arEmq7zMCWOxUNe2YOImQ-1; Thu, 27 Jan 2022 15:49:07 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by AM6PR04MB4887.eurprd04.prod.outlook.com (2603:10a6:20b:b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.17; Thu, 27 Jan 2022 14:49:05 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::a1a4:21a6:8390:b5d5]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::a1a4:21a6:8390:b5d5%5]) with mapi id 15.20.4930.017; Thu, 27 Jan 2022 14:49:05 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 482ca612-7f80-11ec-8eb8-a37418f5ba1a DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1643294948; 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=fOd3RfnzHL4D+dtvfMnfEOwQW5XKehauO+k69wnLAEw=; b=M6EPiyXuqL3d81Ravjv1+E2WXIpNebaYSXl/Lb7gThsL5qEaMWJkParyE1ybzpaVTkVLyI nR6waOqAFaJ7H9lXhGQlpNlPQ4uZZmBJkTnbm4P12w6Cd0J/Ok2CWkwrkIeijr445vaTWQ DeotFTFB/czkA4jVYEa5bv8qOzGsB6Y= X-MC-Unique: 2arEmq7zMCWOxUNe2YOImQ-1 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YJ6PJYJgJkkACtdWpL/oCqimLZ/bYDJAGUwoyUG4mytY342cxzy7DMZGbJZyIfyxI4pdesJXZ8Y2mlucbJjOE/VFn8aQTy9QIaMHDVqk0caUuUC7M6wbwhX/Vp1t1jnMs6q3zHJOU/36fgi4dv0irH1Qe4FhQLZA9bb23CRc8soDGRfp1JA6ayEVNCTmTcMNoUfzxIqzO1z5ZxMY3/ACa7aPDF28YnUvOIVoIS9qN0hKNCxAnqzA5OTzM97CvhH1Tlal8im9KywniGWZTaavDyppTXaILR/jxBNZHwBuRs/ejnEPdVJnDRCYASS/tPmZWGG7YBVU74NPkpE1nlRB8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=fOd3RfnzHL4D+dtvfMnfEOwQW5XKehauO+k69wnLAEw=; b=kA8RgK2JTtCtBJvER5pC7crfGfyEwyRKja1zx2l82TvgK/L8Gpnc8eCGD//DxoBbHPeUHJnJYU5Qo+sbIWR7Qfc9LhjVqP7rbXKYpIplQhJbA0McqDyVfsqxg07BCDdewZP/Hk9xM1gQAI/YUO5glnG7dFe39tslGyyk+6fdjaO8yPoEBJeJsp/yn0odgGtj/cNIe7oaLvRf43c2JpRaaCYLvJeoVnT3xkXsZ8gv4NpbgIkMAkdQdrxtenM8ZQAKTBCRYbq3DJntmJZQ6az0i3OjPXTCbXohiHtb7tI1Stb2Ri9Vd0x9A0QEOUKNuygz7z9JWqVZ14mVgA9SN6+12g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <2a39cb48-7d38-6d7e-0557-fd93d377a31b@suse.com> Date: Thu, 27 Jan 2022 15:49:04 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: [PATCH v2 3/4] VT-d: replace flush_all_cache() Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper , Kevin Tian References: <4b7db7ae-eb84-7ecc-4334-fe5f0f7ef46b@suse.com> In-Reply-To: <4b7db7ae-eb84-7ecc-4334-fe5f0f7ef46b@suse.com> X-ClientProxiedBy: AS8PR05CA0025.eurprd05.prod.outlook.com (2603:10a6:20b:311::30) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b9a8ddff-2c5c-4221-b4dc-08d9e1a42ab3 X-MS-TrafficTypeDiagnostic: AM6PR04MB4887:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1468; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jWaf/7f4fo1ZwZ1+QAYkdaQbjMwwrhCCnU1y9mn1Vm9jvCW2kdp24RYW6y94ib2mYNfBGWdP4fw9jTw06Vz80M5fHoX0nolNakG6Sh2OM6StizWw1W+ynsPBxN3+/HFpgnH+ILabUciUErONuHisfTAC4rqNuEvpAwjtbYB3F8L6owEL63mpUiu+KXLUUEyP2TUBzg4EPpXwKqM3/kvvhOIz4lEJGIIFHfFE4NS4eXNpix2MnCObhD2fccmIoteBzP2I72dHzMe6ByosWIcEG7csfK6iWLcbyQfIqcHIK6OSnnb1tMgTAi1JM76wjGyhoeoATcG8YdrpiL+/DlawXGEdDow+LP91q2tq2QD1qFExaFdhK5Z1SH4Y/gVtSeEftfzKTBr6lZxABbqobqgI9R5+Uvsj0/wX5BTBDqCMHx1OaI81xySrYTZpzXh6wyqJIkUH6IbcnMPONZPToTn252T46k3LT0bClZeUxtWaM0WHQR0To7CrwcbJEu4YmbeJ3Bp5BJ1MvsSqhY42O7HwbZIFKQSip+8IbHmvwKqvb2VG6k7LmG1sxK+WobR7NESHS9RQFAVIroeOGqOIxNtKvynGcFPujVDvV+YSmVe1WONFu41NE8Darh3sAwKzK4FnuRCDwNnyp1AzxHH50OLVglV6MjmXS1YRbP5bOCcg8kgi202sC+9iSoA+QDg2gbdiaG1b/rHnB2sBC+6Ba+brc2Au+PCSgWLVWLmBvIjNxOJj+bjUt6ejJeOrUk7qcjzE X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(36756003)(6512007)(6506007)(186003)(26005)(31686004)(31696002)(6486002)(2616005)(54906003)(6916009)(316002)(86362001)(508600001)(2906002)(4326008)(8676002)(8936002)(5660300002)(66556008)(66476007)(38100700002)(66946007)(43740500002)(45980500001)(20210929001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?PaT03xFamqhVE4AXLBiIdtulfgyh?= =?utf-8?q?97WPTm4ubO0jwWrWx/PRlPxL+p3/++ZzL7CbtiyfvCTyYovNiPrqRK/hwhnlh1nFF?= =?utf-8?q?UWtljf/+zkGZ8fT9Gn1AmomW+r0tH6qg6Wx2EOWZw3qhL9bJp246RxMAMou4zvEEE?= =?utf-8?q?//NhQFVoAB2ovq5S1lHQG64FJCgb1WrNUKQMDnl2YFXoQT7r3dgZRiMTzY6qOH9Sy?= =?utf-8?q?hcmuy6fqFxSOlg9GSjHoeak6lLKm+tPqS1Cx3hY9aQmmMawaPPuD0vl73EqNEIDRB?= =?utf-8?q?lUxO12q0wSFkU9QZZYOIgCRYsflD1CwZJ4DD/cHVwlV1QtKiN5/U/UZcpFvJWjBZH?= =?utf-8?q?86VIZ9oowTA9Ogg3m0RGppIe03GpLgFzSnDBWoEZcq/fguKoOLe+uGTUmtBjgLy9O?= =?utf-8?q?tdnCUvxLyzwqJDnWGTvFzgmatuf5cJ+QA2g4XO5rEv755h7hJvxjKpEo/EZxbamCD?= =?utf-8?q?MUtsBPi62h7jGQbVXyHTnrgKtQN/svhZd0pJJxEU+ngLHfmDBGOfj6EJRymdI3cAG?= =?utf-8?q?Rds+bJrQoKM4kUYj798DP1Rz2/xS6nBLzGd/U4efNTwVm0nA8lQaz17VHhb2txSt3?= =?utf-8?q?Et/LU+dzVTeFGUUJ73jnq/Ww30SdC5izUYdhMHu2SdUZxHcYwymptr7F9o1xTe4dZ?= =?utf-8?q?1JhtHWW0MYwQmXoqp+rcefLu4Kp2fLA5jVO2gJq2dXc8kWzeZNRrEtVtbsUIYzXwH?= =?utf-8?q?j/as7BymYPYOfOmrZ+c+uxPm7nqFvVWiJ/CJAgCDQJQFIvLbc1I7Kp4hYFZXAeuj0?= =?utf-8?q?bC546BlX5OpytvNFP14FZ3lMc0KAUxR+P/ECv21gLr/h49tMX74TEs1/8xUXoajYn?= =?utf-8?q?pKIi6Q8N1753UWuAmvGDyeBmueaECjfcwj6DDkJCL4qKeQAdKaOjM+jdp5xgVvEL5?= =?utf-8?q?I0GHfoQY0LXw2P6Br0NbjYcju8tZHzSIhW2HxFUEmuxLr7WXgAnr3GxkUlz+4pjfl?= =?utf-8?q?NQJkG3NLg8z2vgbrMVbECfU4pJ+Jf5xYtSxzo7KqlEinTHyNOy7/KMitur7fmBQZu?= =?utf-8?q?xT3Qvqa6IcXaZkYONsffnJ3adX2St2+56zVQy7cDk8rtwdOsfcqRIfA/GYIHr6v86?= =?utf-8?q?D6vGwqdZxppEq7sY4AWVLIgPd5HC9QAJ8mD5WR1QnFLstfuUlyLVm/ujwZzlZbfxO?= =?utf-8?q?cfx3TEiCk/xF5uxgxcjqZPtyFi848uygKuDym0bto1CNAjFz0hUdwE6PCtCvW+gQ9?= =?utf-8?q?qZWVl8t+TH0uiunZwFVY2saiDrgkTLhYVDnR0vswa28ji6rj4VUmPxhhxi3tMd5ob?= =?utf-8?q?9Qf82pUXILX+sUo+64Y53VbOh9FGwLlk6+8Y41bK91eAD5i2SSmDzHvrDakRn6Do4?= =?utf-8?q?nLF9omVW7Bocm75Irmhaag2wyQcvO8MJQ5E0fiuL6AGtht++dbq3+fKwM1dgIBYxD?= =?utf-8?q?7RySdPqyfsTVV/2Pt+gmtzlWQHGTCjIoT16eZ3KwplloIQ7qgoG66JS0GqwbAhm2I?= =?utf-8?q?B8turweXYNJQUUiD3YyZvEseAfRNXoGkZAmkHXcbzii+dHvHVSO33pPuNN+JufayG?= =?utf-8?q?no2oaZ94KKcA9XQKpxKiXgQsUNK4fc9oYCF30gS6GVa7P1gsdTcbCWM=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: b9a8ddff-2c5c-4221-b4dc-08d9e1a42ab3 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jan 2022 14:49:05.8348 (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: wJ49VW/FBLu+GdS0nXSlr0OZW+WqQLMQGM56ly6z5Dx2znq8875HDUwQe7O4sgj9h1r8pFJh9rhhO3QqPvSe4g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB4887 Let's use infrastructure we have available instead of an open-coded wbinvd() invocation. Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant Reviewed-by: Kevin Tian --- a/xen/drivers/passthrough/vtd/extern.h +++ b/xen/drivers/passthrough/vtd/extern.h @@ -78,8 +78,6 @@ int __must_check qinval_device_iotlb_syn struct pci_dev *pdev, u16 did, u16 size, u64 addr); -void flush_all_cache(void); - uint64_t alloc_pgtable_maddr(unsigned long npages, nodeid_t node); void free_pgtable_maddr(u64 maddr); void *map_vtd_domain_page(u64 maddr); --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -623,7 +623,8 @@ static int __must_check iommu_flush_all( bool_t flush_dev_iotlb; int rc = 0; - flush_all_cache(); + flush_local(FLUSH_CACHE); + for_each_drhd_unit ( drhd ) { int context_rc, iotlb_rc; --- a/xen/drivers/passthrough/vtd/x86/vtd.c +++ b/xen/drivers/passthrough/vtd/x86/vtd.c @@ -46,8 +46,3 @@ void unmap_vtd_domain_page(const void *v { unmap_domain_page(va); } - -void flush_all_cache() -{ - wbinvd(); -} From patchwork Thu Jan 27 14:49:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 12726882 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6C098C433F5 for ; Thu, 27 Jan 2022 14:50:04 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.261512.452895 (Exim 4.92) (envelope-from ) id 1nD65x-0005w7-4y; Thu, 27 Jan 2022 14:49:53 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 261512.452895; Thu, 27 Jan 2022 14:49:53 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nD65x-0005w0-1K; Thu, 27 Jan 2022 14:49:53 +0000 Received: by outflank-mailman (input) for mailman id 261512; Thu, 27 Jan 2022 14:49:52 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nD65v-0005tu-R2 for xen-devel@lists.xenproject.org; Thu, 27 Jan 2022 14:49:51 +0000 Received: from de-smtp-delivery-102.mimecast.com (de-smtp-delivery-102.mimecast.com [194.104.111.102]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 616d1d63-7f80-11ec-8f75-fffcc8bd4f1a; Thu, 27 Jan 2022 15:49:51 +0100 (CET) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-am5eur03lp2058.outbound.protection.outlook.com [104.47.8.58]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id de-mta-20-Po1JJaETOXuNNo_YttVhCw-2; Thu, 27 Jan 2022 15:49:49 +0100 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) by AM6PR04MB4887.eurprd04.prod.outlook.com (2603:10a6:20b:b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.17; Thu, 27 Jan 2022 14:49:48 +0000 Received: from VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::a1a4:21a6:8390:b5d5]) by VI1PR04MB5600.eurprd04.prod.outlook.com ([fe80::a1a4:21a6:8390:b5d5%5]) with mapi id 15.20.4930.017; Thu, 27 Jan 2022 14:49:48 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 616d1d63-7f80-11ec-8f75-fffcc8bd4f1a DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=mimecast20200619; t=1643294990; 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=DMhzatDsyvqO50atIdsWIGLVtdsSYBlhlA7D8k9xKVo=; b=jl8bcgX6X07E9rkSPLl1M0sD5xkms2J0WSnsorow1Gn4zF3E9w3lYx2svr2tJMSNElIUYD 3GFEVaOGESDZSYA1AogezaDLd+KjtKVz7QlAlujpus5KXgV1IqcTSp959WhpJlxwaC/o/H jcvApHBlrPCkILJIiADi9Tyi0TTLjy8= X-MC-Unique: Po1JJaETOXuNNo_YttVhCw-2 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iYfCO8JDt1Qf5ZdUj6PM2osKZmogIqPbjcvnELZeTH/Wu3XKGLpTUkfRodHb7/tWZEyVO+3/3JgYfgXoHY9XZC8lPBbfddw6/vAJMFD9c5dujmY+aC8rAv9PfYoC80YdBzI3mYldOHpAW+SjOU7ptz67ks9v4zW4/WawP6qtHMrCOsO/8jSfB5oOBNVkaAyJ/gckfzJk324hcX/zEbNbh+lYKr02OGRlmZ8mOcrn/xI0sTokR6FWPuFSceCa0GdG0wyUeQJqjvfAvnvmSdgk2kUzv9FT+2iZgCxfinX4GGFtByVFozzVri71jduYK/z5h8EV5WZBhWw3qRIGhQEcVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DMhzatDsyvqO50atIdsWIGLVtdsSYBlhlA7D8k9xKVo=; b=F2qQ3HUCbgpyGRc3HGGv+pI7BljmFMJ+MwACJxWa9maIGqRCov7BnwW6yhwmy/1OyjyH+Opjy4yogHRoPGPaXlRNRypHeYdJx8owDW7gwwDr67NfkCl2vT8tG7cuH8600DK5RJIqsl6Qcu+6y7EWe1DJW/Rxcbw/pGyLQ/MI+cyardErKEKWPOsATBuSTMG2UGZ3H0iW9Dux2M5yEkjhEzGyqIF1W4QAYhzEgeaz6YEi+dRHez1N7oGA+4jZaLGcWS9TyhL868AiVrecHlRqFIYXuVVB7YjSamfhdkNB6QtrGl4j3Lqa5WdCl1Gvov4jvVVrJwMaHFrLyyIxhiJqCA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <998f6587-d64a-7336-a44b-d05ca486b4bc@suse.com> Date: Thu, 27 Jan 2022 15:49:47 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: [PATCH v2 4/4] IOMMU/PCI: propagate get_device_group_id() failure Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Paul Durrant , Andrew Cooper , Kevin Tian References: <4b7db7ae-eb84-7ecc-4334-fe5f0f7ef46b@suse.com> In-Reply-To: <4b7db7ae-eb84-7ecc-4334-fe5f0f7ef46b@suse.com> X-ClientProxiedBy: AS8PR04CA0145.eurprd04.prod.outlook.com (2603:10a6:20b:127::30) To VI1PR04MB5600.eurprd04.prod.outlook.com (2603:10a6:803:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a2a96b44-7209-40c8-e3fb-08d9e1a44443 X-MS-TrafficTypeDiagnostic: AM6PR04MB4887:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4502; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NzdifO8MSmmZZIFUaqJxtOO9QOiRH8c4HEm/oshoocWUt80Evcc2HgZcilL+yHUPHV4oiF1RwYdw5FKZw/PU6mxYssEYbtMFEaZzgHPOYD1TXqW3ElJkaFb7uHBviDQ7y+/oxPdkJd6dp923hT11bXZdZK4k6Qpfa8Bx4EU63wrsm4GY2dOpPYuXfAIaJSkxrZBEFLjs1pjIsfccRSVfkafMod9sGggQFidthCjg7BiB+t13FVLcTpw274fYmCaXX94+Jsr8HRID1fKra1FOukW4EInpN+2FcQh4oa9A6dbBcH9yPzP5fuanmia9TKntuG9eS5zic2hoP1hXw11kVTILkdptC3HvTgOLjOVQxYkSvaFluLH34tLhBjLDhfofSj0FNNG8PXTSKM0uZM4LPubgt2J7Ym4Yc3fi1C5FTE9JLIGEeI8BVH8vTrL4h5vBJuPR7OzIHXmAMyGAmzm4rijeDvejAHPe3yWNkzlMZm+hfu774zyzviBErqvbdAZVAjCsr6L1JobWPenJ/LzNhWbjzjGtHKbcm8aT45og1Hsw2zTaO+V/w1yFgZNeDYP6w5TggIKQJUcN0BNL7dKPW22LifuJ3+mzMuytRXco7h+VPqthx0hpK2/iq+ejou8nMU06plg7Amfzm5gzPnJw0D9EaH+6dsSe37+WnLLhpFNeFCRg/wX5SWkyY52uxRQIQ9Lu2nz/1p03nXdoY5AO9oEkWVFluHxYaih1S0cXLKFWWjVwAflkIhDaFq5/nTyD X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR04MB5600.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(36756003)(83380400001)(6512007)(6506007)(186003)(26005)(31686004)(31696002)(6486002)(2616005)(54906003)(6916009)(316002)(86362001)(508600001)(2906002)(4326008)(8676002)(8936002)(5660300002)(66556008)(66476007)(38100700002)(66946007)(43740500002)(45980500001)(20210929001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?8TgYrLxQ0uZNPsixBK+pv4AlkInA?= =?utf-8?q?amt0vLg/N3CWy/t7/+mufPPM4V0LdkYDpFb15SL1Z57ROeQTUL2j/hVSluNF+3BQG?= =?utf-8?q?EbeG4Qnu90VE5i6S6AWlp3mBCfgu/TUkbBEHc3V/8nrKHziiBS9WgBRaM/Sk6TdVM?= =?utf-8?q?C9E5e5t/ygUbiFrmCPiAiKA+WoUB3cIzPGJMJkp/O9bjGUEVhy7ujPQ+ulK/G/zOA?= =?utf-8?q?6yFxiT2vmjZ2lQ3taP4C+uqErHTJLFWe5ZVx7jHG7Eie8gOOkpi364NcYtVPp12VW?= =?utf-8?q?nB5lDP0zVXxK6p4kffNnKR3hQvL3MjxxO7E6eqtPT1MfxngGqG7IQ+q4yKnwFs/RG?= =?utf-8?q?PmPov8lRojhzWh3ZgVQxanrcRL5hDMxyKdbeMbI4WhvcGX4saeXTXmrJN+Lk+/lzg?= =?utf-8?q?n2M1o37AkLKai27kztK+KwcCQNpUjzsKgiFSyDtwneE2S1Bnvgs3QaA8Y1ERNe29u?= =?utf-8?q?GD5tsKFy8/i5Pb/kIVOI6RaJXuaP3zDGaZx4EJxjddALDG24PDrcKU0+PQa7wn/Eo?= =?utf-8?q?fr9qIpuAoZfC3H9aKwMnIyoiLXafzdRc7XrD0By/fJ+FAZndzjpbiF4TiACFOqk/M?= =?utf-8?q?fNLOdpJwZYRT3HyhWOgR0GwtBwxc0Z7Dh7Et7ocoBAaR9fzcM2El8jzeiE+zGbKmk?= =?utf-8?q?KGYd9DDDKx+XY+pmS79y6v9D9uNSS+fINwy+IGjXwTgf4MDwhkC8v6EjoXfpmZBhO?= =?utf-8?q?n6cClJf8HrsOz/NskMLVQPA4Tjtrm7sWFMuo4yq6KBIE9u/+crm740YCsoc2IhOZm?= =?utf-8?q?GAuIoWsQr6hA3mtWHn4WeSVi0Zjnis2LIBfHsfAY0GLBhSUWUBrVlZyOzuHuJhlOD?= =?utf-8?q?MVIEFbtuDmtC9HfItCQRSLI1kpXwUI3LBlO9UnlUYlTudeMMyxCBxBQQ8ICeD8aA4?= =?utf-8?q?qJa7NQPeYmPam7IC4nPJuJpr6tdo6v85eaRjUmiUjTPaHuCbvyIi464/UdcAls2FV?= =?utf-8?q?mRkBW/mxBUeQ+DiGGCo43X9j1b2sVvGsCEsEFo2jl7ZALfkjJZpCbVRKl+2bR3RUc?= =?utf-8?q?xZryH5mKw+nOpElH6tRFpcoVe1SHoulhCTIf77Duscs5hxu2iAm9ZP92RSrdUiJmM?= =?utf-8?q?nk9BcmxIh77tYOShTdtuXko2gwvrQbJOgPXLtOJnd091z+C+Bo87e2g0S7/j4VTbl?= =?utf-8?q?a5O5yT7efLsxKEklKNMSxTIi2xlaOKGGq71bp/h0Wxeix6hSRwkn5ptK8DRJPyUS/?= =?utf-8?q?5Y8C5isodONJoDO32oXPRH8GQJ89rER6564GezUq47jkB7ixHXPa8Vdwj4Sp4ohmM?= =?utf-8?q?+PjnTeLT2Y5p0pc4aUFoqVEc0UP4cK8L3+qFEPjm3/cDFH2CSB9XMfS20hLEm2rDR?= =?utf-8?q?HfQE8QMfwZ57yLRA2a2+q56nR39eOb1JRC9OGdUOWrc5cvuDpPL4VVZ6T6YvGliNV?= =?utf-8?q?gjRsbgCiTzGbEd/VEp+fcC+3M6n5u5NAHTiu2PabD+6DfhMmCmUhRqeJ18VqKy+tc?= =?utf-8?q?q6bGfX2cnYRiVUWNxo/JDjt+ThDKMjTmpnTc7yk7mu5LlT1qIH+uTG98J4y3kMYID?= =?utf-8?q?RETJGBn40bcN/By32uvbfWbNbPFhxC5itercPkYVM0Z5WV75AirCFDw=3D?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a2a96b44-7209-40c8-e3fb-08d9e1a44443 X-MS-Exchange-CrossTenant-AuthSource: VI1PR04MB5600.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jan 2022 14:49:48.7071 (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: SdxYT07Bx6nxXI0qhZFc6gIc+ncim8bEA526PCr/uVhMvkHoJG5X8RQDm5YAMIGxzbCLXzRzlBQwn1MxsBeulw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB4887 The VT-d hook can indicate an error, which shouldn't be ignored. Convert the hook's return value to a proper error code, and let that bubble up. Signed-off-by: Jan Beulich Reviewed-by: Paul Durrant --- I'm not convinced of the XSM related behavior here: It's neither clear why the check gets performed on the possible further group members instead of on the passed in device, nor - if the former is indeed intended behavior - why the loop then simply gets continued instead of returning an error. After all in such a case the reported "group" is actually incomplete, which can't result in anything good. I'm further unconvinced that it is correct for the AMD hook to never return an error. --- v2: New. --- a/xen/drivers/passthrough/pci.c +++ b/xen/drivers/passthrough/pci.c @@ -1463,6 +1463,8 @@ static int iommu_get_device_group( return 0; group_id = iommu_call(ops, get_device_group_id, seg, bus, devfn); + if ( group_id < 0 ) + return group_id; pcidevs_lock(); for_each_pdev( d, pdev ) @@ -1477,6 +1479,12 @@ static int iommu_get_device_group( continue; sdev_id = iommu_call(ops, get_device_group_id, seg, b, df); + if ( sdev_id < 0 ) + { + pcidevs_unlock(); + return sdev_id; + } + if ( (sdev_id == group_id) && (i < max_sdevs) ) { bdf = (b << 16) | (df << 8); @@ -1484,7 +1492,7 @@ static int iommu_get_device_group( if ( unlikely(copy_to_guest_offset(buf, i, &bdf, 1)) ) { pcidevs_unlock(); - return -1; + return -EFAULT; } i++; } @@ -1552,8 +1560,7 @@ int iommu_do_pci_domctl( ret = iommu_get_device_group(d, seg, bus, devfn, sdevs, max_sdevs); if ( ret < 0 ) { - dprintk(XENLOG_ERR, "iommu_get_device_group() failed!\n"); - ret = -EFAULT; + dprintk(XENLOG_ERR, "iommu_get_device_group() failed: %d\n", ret); domctl->u.get_device_group.num_sdevs = 0; } else --- a/xen/drivers/passthrough/vtd/iommu.c +++ b/xen/drivers/passthrough/vtd/iommu.c @@ -2564,10 +2564,11 @@ static int intel_iommu_assign_device( static int intel_iommu_group_id(u16 seg, u8 bus, u8 devfn) { u8 secbus; + if ( find_upstream_bridge(seg, &bus, &devfn, &secbus) < 0 ) - return -1; - else - return PCI_BDF2(bus, devfn); + return -ENODEV; + + return PCI_BDF2(bus, devfn); } static int __must_check vtd_suspend(void)