From patchwork Thu May 2 15:29:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: CLEMENT MATHIEU--DRIF X-Patchwork-Id: 13651826 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.gnu.org (lists.gnu.org [209.51.188.17]) (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 49DD4C25B5C for ; Thu, 2 May 2024 15:34:00 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s2YNO-0003ih-LO; Thu, 02 May 2024 11:29:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s2YNM-0003i3-Tn for qemu-devel@nongnu.org; Thu, 02 May 2024 11:29:36 -0400 Received: from smarthost3.eviden.com ([80.78.11.84]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s2YNI-00060W-KC for qemu-devel@nongnu.org; Thu, 02 May 2024 11:29:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1714663772; x=1746199772; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=0dyCf//UOltd40tgWVe301nYDvZlQODv3yCaC6nBVp4=; b=mgcBf9kQq69iZITSJAnhtndR++rG8mTIpEG1o2y8Xh1vgr0bymhmUsxT 7CYXkMoVicutC1WTzpEydx5Qc/IhpkJkIZUYO3w9xWnvf/OWdq73hNMjD HMVvRmVZ5/3QN8ahnQcH9maq1qa2VvRb6ySg3UUXTC9rOIYttLD3a+A1H LM+t1zrXnM+YluKMOMZ9MnOKN3CJ5bvE6wXhL0ceV5+74FRYw6CREppmc 2ZM2CDh0EoQjk86BdmhpMxipkixzIeYnh8M2okFCaWLo9vqX4EkW7EV0U jPpLoU3rkK50eLgjKHP3E0u8Sb2lYhvlHJXGZuqDcLk82Sl86aZR+OkmU w==; X-IronPort-AV: E=Sophos;i="6.07,247,1708383600"; d="scan'208";a="11730622" X-MGA-submission: MDGQsfRvSsSaehLIfacEuktvZvdiwWESRB9SPAMIjQKpH88tJ7pg50BzfPWToXVDjel8WgkrQaeV+bQNK8Pg7ZaVpwJJIAHx3CQN3LU+jC3f+etr0ovbxgnNcb8YEOfKwOwpULn1OtF5YxJzWb7t1fa/IIIaqPy4y4ThJKwv9h4qAA== Received: from mail-am6eur05lp2105.outbound.protection.outlook.com (HELO EUR05-AM6-obe.outbound.protection.outlook.com) ([104.47.18.105]) by smarthost3.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2024 17:29:23 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QsA9s/DAunlOnu+yWLcQnDOm47fKNoXLLTp17WtJd0KYLayciIOHWTq2xyoorPfWKY/p3XTIQG2sxeYeJCT/cYE8xRfyobss3kvSehbCFrhQ7RAQ2eKFV0WwQ+4ZpCOapQ9RLT544eiANTBxAaxegCHrPnIYcPXAp6NB0PFo1KSrgaCTE5qxrkzNefsI9yJ/3KrFtg+UQ7CZtaNPPJD1LsyBEqUSh8yLGerxQoyMCUOPcB35KUMLDCPTdbWNqVQg6D38EQW31eBuEiFZZdIVaqpUtrPIybTAMFfXAYDZ3n6UCmPnB/cwWmBp7qXJi6+4iuxVqZdD/4UwOxsY9bPYOg== 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=0dyCf//UOltd40tgWVe301nYDvZlQODv3yCaC6nBVp4=; b=RORHlQwZPuqEqccJ239FVOJOCsjLsT8jig9WG4S6L06mH+UPoED5f2oreVDkVYifhJ/3hpjINTjKkJ5GfjY+WDJUBIDxnXP72Cht2bWI2lNzkrjmqmzle+aCgqeI7ktB5jSiHcrpzk1B5ME9UrWH2z6Wc3Si9YcAxurEFdHQZpgqLqnieYZeWe6e87/yZkYtB1STB6CzFOTqV5J2xStb5RjjEk4y4Gw5lx4OFqmytKGKUuJZrQ1qiUCh9t+0SZW9E2bNbuUXvtwvlc3S8e8uXJzG8mmUNGyvaUiLzqO/YZrZ7Kc/F0Mp+sNP8tZTCwVPVeMVj3YQDawKMNGCPGZZRg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=eviden.com; dmarc=pass action=none header.from=eviden.com; dkim=pass header.d=eviden.com; arc=none Received: from AM8PR07MB7602.eurprd07.prod.outlook.com (2603:10a6:20b:24b::7) by AS8PR07MB7768.eurprd07.prod.outlook.com (2603:10a6:20b:351::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.29; Thu, 2 May 2024 15:29:22 +0000 Received: from AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d]) by AM8PR07MB7602.eurprd07.prod.outlook.com ([fe80::fbd7:ca71:b636:6f9d%4]) with mapi id 15.20.7519.035; Thu, 2 May 2024 15:29:22 +0000 From: CLEMENT MATHIEU--DRIF To: "qemu-devel@nongnu.org" CC: "jasowang@redhat.com" , "zhenzhong.duan@intel.com" , "kevin.tian@intel.com" , "yi.l.liu@intel.com" , "joao.m.martins@oracle.com" , "peterx@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH ats_vtd v1 22/24] pci: add a pci-level API for ATS Thread-Topic: [PATCH ats_vtd v1 22/24] pci: add a pci-level API for ATS Thread-Index: AQHanKWBzgAlAYPHMkWgdFDysW7Q5A== Date: Thu, 2 May 2024 15:29:21 +0000 Message-ID: <20240502152810.187492-23-clement.mathieu--drif@eviden.com> References: <20240502152810.187492-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240502152810.187492-1-clement.mathieu--drif@eviden.com> Accept-Language: en-GB, fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=eviden.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AM8PR07MB7602:EE_|AS8PR07MB7768:EE_ x-ms-office365-filtering-correlation-id: 86226a82-0315-4713-cd5c-08dc6abca441 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230031|1800799015|366007|376005|38070700009; x-microsoft-antispam-message-info: =?utf-8?q?kSLJ2TTQ1iof1qAp5u/19LGeM0P8rhv?= =?utf-8?q?RldDw+5W5qwQdZlT9K6pdnVkaKp1TUE/lqtiQUdiCTTAUkMXcwPq3TRiMAVuvjSEF?= =?utf-8?q?meW35oJ0+kpei+ZIPhmDONUDF+FLIWIfaeHzgcP5tGJOGyrKfrghSLlYfJBli4m77?= =?utf-8?q?8L+auMzdM5KltAjKLuuAN/bhjie/ZAjqUMMGfmSfFORB5IyUu7mt+Oq11367zEg19?= =?utf-8?q?Gi/KthBo33hG+4L50nyxfEoWFWTxjImRo9bhh3jP244jQDzg5lCMVnSM5Ej/xryKS?= =?utf-8?q?szTsn5u6hSJGZUvNqD6CarIZpoNG8q6i6VwGYTIK/zmgwUDUErlO35T+UW++abSac?= =?utf-8?q?wpmP9d3fp+M8/AHEQbpLui8Wg40lZKn7VOiklB1boG3+dmtb86ndkVoup6YTNIMOD?= =?utf-8?q?UFaF4jNTGKTaGLT7sjGor4aWVFMqu3Z1La999VncIsagzLozUoAN2JIFXCyEbKfu7?= =?utf-8?q?28YMEPU33+ZGeBZxpkYjApoy8+UCtpR1gKxbQBXzzlO3cSVxElftTMcIe0XeWXjpa?= =?utf-8?q?yG9yM2IL4fmaDKzkNS76vDVv2XzkqrAsgA6pKe4JtP0Xl5pY6AEdGY2rU0Pkg1LIr?= =?utf-8?q?DYH67rQgtxqjgUyfBlhiyMqiQNN++9oEnx0wakDp1VZ626jI9tTbhpLkhydIkhlP0?= =?utf-8?q?/Ly6JxCrx/Z7xXXAthjRtqEkj0GpRvYG1cqyCNsH30eAofodIXyrJl3FtBdXLB3La?= =?utf-8?q?ZAPjJV8tO6eq8Tijg676GdAMUJQRhLAHegmOgYYiy07R94DR3BJIGfcGDFWIm9q8q?= =?utf-8?q?w5FwXuD5b1U9RHad+U4xY7Dm3ExJJXxAv3YPJPcEcse2oHmXaEyNKlSVD8wIbSWgA?= =?utf-8?q?ccm+a2zyua7cEBv+Z25YNKuR2VV2HBHliPD+K+EiE2B+qDcbPqVTz2dxqNKwRMnwb?= =?utf-8?q?8AfiH8seFmbJCh3xP4AZMTtmAAOIRIbzuqR5ZQnw9AomH/PmzBT5d+sTGxFXTikr8?= =?utf-8?q?ToSWrtj9Z5pEIc7GB3605EG6oGCkT6GMpUfYukrkQ6L5Kfc80nqEk3hKYTUm52jpd?= =?utf-8?q?ZfTIQiFEnezkb2dDx0QcXpy6mTcImmo1ypCxDfgsy/XKMsK3RHrUSmtqAOtPPhm5d?= =?utf-8?q?e/qCnlBYU2qDkVsTJjFphrucO4PbceQZBymGndugO1ZEJ0EBUHikMCx155EgWGDy5?= =?utf-8?q?4vdnp7on0g3ccQoT/N04fmimw7ug2saUupNk5Jfdak+zZDwZPKhgGH5HoBsyi6zLt?= =?utf-8?q?xx2kbmWCzGYn+UF9OAviHO9x1pt95N6t9iXjBjhXdnAsdHbs7igsawbsjYgOratMD?= =?utf-8?q?UAKMcW193bg2Tci9nuJZLTbCwtGRntblVSg=3D=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM8PR07MB7602.eurprd07.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(1800799015)(366007)(376005)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?YeTk2fVADUfb0RXd/fgFfyS/hLom?= =?utf-8?q?umw7F1RNFoQwjk6ejwW3hfXbhaNSswFgWPLZm2aXIClpcZ38qfxhSthsGQM24TVGi?= =?utf-8?q?xu/XAxUeIhQJdfJ8jZuGCO4EA1hGDn1fOa8DJNqRmQ8xTOgjHxeM9zry2z7cPtcKc?= =?utf-8?q?YMfcVzDkfaYuZxcGKpYGV9z9VmfvUQn3nFBPkwqOMdqUAFQn3ze66udogVnmrg4Md?= =?utf-8?q?URUDxIUeW/4trxhc1IY8RTtro3QYz0J8LbUidrQzBuyYwRvnnmek9lCFCb/94Xo6j?= =?utf-8?q?8mpfHb9QJz2fRz7cPQ35Dodr9WOI9h+nxHS5u0qQEPfNJfy+uEIdWJhVRhY+pac3+?= =?utf-8?q?HlVc0qU2111/QwOwBxiAx7OXxceSq1CCbu6Ow+IrT1CwF8oCljR3OyCQcFnINEFFO?= =?utf-8?q?v6cMWt+7fLb64nu297WTxhc1qxPwRfVhzSR3ElP7W2aoJ+p0C4MDFnJiRBeyBbWdH?= =?utf-8?q?s4oCicOCSpVmk4ZpgJcK3ftl7nfR2NC/7GSTW5DYeEBNmnSy5M7rvvroi3qqmRqeW?= =?utf-8?q?8fPplngxeTUFp3CCGQG5NwEjorEFHpHt4+hF4ttIP3nqHJOav/+F8q2mp1Ka3tjwg?= =?utf-8?q?3WspF+xwcPK2zvJiNMRBxiNRShPpA+o+HPkUFziO2GRv0jrGOW4fx8wjK7IcZtnuy?= =?utf-8?q?8ETSbrpAWxJq+dabRPwk+x32voZC94mllPmQxEWOAtBKoEgOgtUOX7HqvavJ5ER0G?= =?utf-8?q?O1f5uBDD8D3iXdqkZEiuOxKwaxSYGl5BsVDvBtdAHnFFCUWDdIeAgp8SG6oLUOQde?= =?utf-8?q?HaOVS5NSOWzfZqGyWWefGo+F0b9i9C9jvhykdtGCoIjT9qdm8G3cvXtmIU2BERFox?= =?utf-8?q?6CfT6LEmZtYZE3FJMrx4dKDbKvt3wtkacwG4Ym/8bSc/9P+1/ho+z1M0Wcz7HFG5D?= =?utf-8?q?1Kj79I2xgcBwBl3yP8u2fl7qrU2+cjDUsQ9e4YVizRavUhIHAnI3dJXv4QXE5QSY2?= =?utf-8?q?lC+4Zj+XnNKoGCACwc8Kbumbr335nAgzB78VFaeVRpZOVp9ffk6lKiyGYTxU/mYy/?= =?utf-8?q?lRjKh9t9oUSDfETUUAyMzxN1e8e5QeTb+enR4/2xBOKIMI9xgyFwLYPAS/1D69VzR?= =?utf-8?q?imBN8vwRXZtwxAcKq75f5Nfy3e7VUKGVNMNH/241Yw9P7XQiDh9h31+yYkrMg5/+1?= =?utf-8?q?fXzt9EaRYuXESKbBblDnK4SYzxjodUlD24Ng34K3Dn65eeaRNOy8OqSF6zO5eg6s6?= =?utf-8?q?b3LBkYkwlJ5A9od33hIdCQryzc+BeyDNHSS+i/S+pvqPV+diBncagrs8kXIo74vmU?= =?utf-8?q?9kqs77jt+P46822qvwfvKnm9fnzMiMJ34NvHv5hDeJ5iaxm02LTSAlB41ztJCIcnG?= =?utf-8?q?UJ8ZwXVyFUeo73Ts4c+Oiz0Mh4ni8rVR1iiw+nk7649rL8Zg3khZvHQuyDWit9fuL?= =?utf-8?q?3rIZHv5mEwXxmFAupU3M8lSuB+eukkKXl4PQksWAiugqZM0u1B5ZJZl9Ds2mzyBu/?= =?utf-8?q?SKDS7YV9TgprlQ9Sr4P+4eGPnKZ2aiVWkCH9EE9qbjRejqJrFtc91HwnLT5yKpooA?= =?utf-8?q?rFiP531b8uJ6sCIkGspHov7Hf+3XhFZWxgyoW49m8yCRzEiaRxasxbk=3D?= Content-ID: <6BF640420CC32443963EAF491B25EBC3@eurprd07.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: eviden.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM8PR07MB7602.eurprd07.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 86226a82-0315-4713-cd5c-08dc6abca441 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 May 2024 15:29:21.8888 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 7d1c7785-2d8a-437d-b842-1ed5d8fbe00a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: yl/n3JGOMXxpUyLUZgx7FHFm4tIF0iBZfesjBRh17p58vUdnJHhYhagFgrDwOSQynEHvsyczPbp40iS9p5HzWLb622sJ9Onk5HfzCi10eWRZXjvV5AF+UlCYRIfWsoN2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR07MB7768 Received-SPF: pass client-ip=80.78.11.84; envelope-from=clement.mathieu--drif@eviden.com; helo=smarthost3.eviden.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Devices implementing ATS can send translation requests using pci_ats_request_translation_pasid. The invalidation events are sent back to the device using the iommu notifier managed with pci_register_iommu_tlb_event_notifier and pci_unregister_iommu_tlb_event_notifier Signed-off-by: Clément Mathieu--Drif --- hw/pci/pci.c | 44 +++++++++++++++++++++++++++++++++++++ include/hw/pci/pci.h | 52 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index d10cdb3d75..fea9b57006 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -2833,6 +2833,50 @@ void pci_device_unset_iommu_device(PCIDevice *dev) } } +ssize_t pci_ats_request_translation_pasid(PCIDevice *dev, uint32_t pasid, + bool priv_req, bool exec_req, hwaddr addr, + size_t length, bool no_write, + IOMMUTLBEntry *result, + size_t result_length, + uint32_t *err_count) +{ + assert(result_length); + IOMMUMemoryRegion *iommu_mr = pci_device_iommu_memory_region_pasid(dev, + pasid); + if (!iommu_mr || !pcie_ats_enabled(dev)) { + return -EPERM; + } + return memory_region_iommu_ats_request_translation(iommu_mr, priv_req, + exec_req, addr, length, + no_write, result, + result_length, + err_count); +} + +int pci_register_iommu_tlb_event_notifier(PCIDevice *dev, uint32_t pasid, + IOMMUNotifier *n) +{ + IOMMUMemoryRegion *iommu_mr = pci_device_iommu_memory_region_pasid(dev, + pasid); + if (!iommu_mr) { + return -EPERM; + } + return memory_region_register_iommu_notifier(MEMORY_REGION(iommu_mr), n, + &error_fatal); +} + +int pci_unregister_iommu_tlb_event_notifier(PCIDevice *dev, uint32_t pasid, + IOMMUNotifier *n) +{ + IOMMUMemoryRegion *iommu_mr = pci_device_iommu_memory_region_pasid(dev, + pasid); + if (!iommu_mr) { + return -EPERM; + } + memory_region_unregister_iommu_notifier(MEMORY_REGION(iommu_mr), n); + return 0; +} + void pci_setup_iommu(PCIBus *bus, const PCIIOMMUOps *ops, void *opaque) { /* diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 1587c18cd9..dc247d24bd 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -471,6 +471,58 @@ void pci_device_unset_iommu_device(PCIDevice *dev); bool pci_iommu_init_iotlb_notifier(PCIDevice *dev, uint32_t pasid, IOMMUNotifier *n, IOMMUNotify fn); +/** + * pci_ats_request_translation_pasid: perform an ATS request + * + * Return the number of translations stored in @result in case of success, + * a negative error code otherwise. + * -ENOMEM is returned when the result buffer is not large enough to store + * all the translations + * + * @dev: the ATS-capable PCI device + * @pasid: the pasid of the address space in which the translation will be made + * @priv_req: privileged mode bit (PASID TLP) + * @exec_req: execute request bit (PASID TLP) + * @addr: start address of the memory range to be translated + * @length: length of the memory range in bytes + * @no_write: request a read-only access translation (if supported by the IOMMU) + * @result: buffer in which the TLB entries will be stored + * @result_length: result buffer length + * @err_count: number of untranslated subregions + */ +ssize_t pci_ats_request_translation_pasid(PCIDevice *dev, uint32_t pasid, + bool priv_req, bool exec_req, hwaddr addr, + size_t length, bool no_write, + IOMMUTLBEntry *result, + size_t result_length, + uint32_t *err_count); + +/** + * pci_register_iommu_tlb_event_notifier: register a notifier for changes to + * IOMMU translation entries in a specific address space. + * + * Returns 0 on success, or a negative errno otherwise. + * + * @dev: the device that wants to get notified + * @pasid: the pasid of the address space to track + * @n: the notifier to register + */ +int pci_register_iommu_tlb_event_notifier(PCIDevice *dev, uint32_t pasid, + IOMMUNotifier *n); + +/** + * pci_unregister_iommu_tlb_event_notifier: unregister a notifier that has been + * registerd with pci_register_iommu_tlb_event_notifier + * + * Returns 0 on success, or a negative errno otherwise. + * + * @dev: the device that wants to unsubscribe + * @pasid: the pasid of the address space to be untracked + * @n: the notifier to unregister + */ +int pci_unregister_iommu_tlb_event_notifier(PCIDevice *dev, uint32_t pasid, + IOMMUNotifier *n); + /** * pci_setup_iommu: Initialize specific IOMMU handlers for a PCIBus *