From patchwork Tue Jul 2 05:52:45 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: 13718977 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 855CEC41513 for ; Tue, 2 Jul 2024 05:53:32 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sOWRk-00083P-Vc; Tue, 02 Jul 2024 01:52:57 -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 1sOWRf-00081F-4F for qemu-devel@nongnu.org; Tue, 02 Jul 2024 01:52:51 -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 1sOWRc-0006V4-P1 for qemu-devel@nongnu.org; Tue, 02 Jul 2024 01:52:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1719899569; x=1751435569; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=/O+mtv7iGC4Iped3cO7OznRrUDiVe9yyGqDmP9G6CCM=; b=XyQziFCtIoMuuuUpCeTJRM0yT+jqKhFl8rVt+ben/u7F2AZzvOOsZtr/ Jk/4Tn5lNLewMGBrJs42Zb9seuCe6JoLBHZ9XRn36thuwaiEMaTK9krm2 6iYa3f5xfHH81D7hv0tnNPMifx3QjYw3/Lp3Fl8EBlrY91WVYQQotNG5v rt12wxRWtJ3gx+P/46pViJnXVRrEZ8GAqgT9edPWv5//yL1ZkT1y67Xy6 jtejyEHr20sHCqTi9Q7OWrHTagKDgB6hhfqbdQd3lOezKwzK0JxEQp2tW jucGvh6rXafXHi9OCZ55sp3xyNKYEMSBXelj+zrgk2Uo7Uq2QT9gwgbaH A==; X-IronPort-AV: E=Sophos;i="6.09,178,1716242400"; d="scan'208";a="15721603" X-MGA-submission: MDEVTH79yo0QbUiM7sydyK2Ls+JqGG2Ug+2kDWhAJouLMHpZcfDZkhTVgv70m5tcGaTZbmUcOa8L2bEyTy2QHK6A/FnzsF35FMJnyXTml1yJAwj4zzbczbB+7q46dZGc0vej0nDC5fvwuR5gJSdWlCp5imytcGYEmD/KmPYn27vK/Q== Received: from mail-db8eur05lp2104.outbound.protection.outlook.com (HELO EUR05-DB8-obe.outbound.protection.outlook.com) ([104.47.17.104]) by smarthost3.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jul 2024 07:52:47 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bWqf1KMjqZK9C69zre3tfDqx5PTtQdZ8c/6L5xtphyAJ2XtpnaBA8TuTSYZ92zRQXcRrFxyS9lOw9LkLQbxegGSjoIFRzFxxZ2xPWgpxk0L0mT2kGUROxfIYx10/HA31Key4vqrRbSdG4/2TIH2bRN9VTMfqv6T16ZK2ncx0Flyal0Z4/orMyJun5cQDZxOqbdGJfXhCgOo2bQfNacu5XlCFTAzWwxOO7HWtW64DLla4Gytx3qEIcJ8me7njkimuumBoP3fAEF8XR47D41q4wqf0oRMRCN4DjvCbbgM66T2rWQNP/Cg87IH9exte/h7XuLSzkucpfPikTPDj0yJDCQ== 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=/O+mtv7iGC4Iped3cO7OznRrUDiVe9yyGqDmP9G6CCM=; b=JbBiyQvMUy+tBbiv88MosOV6XeR+CTBEvG4AzqHvrHks1FyUYxfdZzv3BTvK4IUmiRnBHUvdHTK1HPRQNjr81pKpf5iUFbUZONjdUiYQGNJsaJULZ/lt9+YOoqLA/aBBOZGogQ5STAqjs88OD7U2c3IPkh/Fk4+rmA+V6kKh0ka8jFVR5X92gJ3NxmwNFpzqf0s0H4N//UhpdhNVhFRJVZFzsalBjKY/HsWnJPfLKxXTws9i5SORSxaZIpzpHDxIeDe19pcoCgnQkw32rsaUgEO7rJme7gjbmdHzQAS4u3TaBTgdQdnTmpsqNcQ+LYpNKDdo6HF3KBwa1LoWxatIYQ== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Eviden.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/O+mtv7iGC4Iped3cO7OznRrUDiVe9yyGqDmP9G6CCM=; b=qvKBsZcMQKzEoQLQqA+ba24aJADKcvDPQNXtUN5KNhqvVitX7SEUDFGl+aOLVe9vCE3FG/nL1fvgNU/5/Xn6P3S2I0NIXVMPU6fOBOp2EPL2HMWg4jGXQKmmNVW7G1yAVD75q3rs98RCHXImpch6zfbPEd2gDStdElPHYdt3KFbiXbeDB3SgEfZ+8YIse0QHQqz0BhQX0bW2V/f/KzTtE0mzJhYp3MOJ/nSw6BYcsN5fPPhxBco83M0V8FiaJ1KBs/hW7EKSFQR/q74xYXStkRKzt2fKhJ0ZLnN4J7tIFqUYv7A9tRQQA3xY7GXhmDgR7lbJ/N8Ncv7b+fqWNqfLIA== Received: from AM8PR07MB7602.eurprd07.prod.outlook.com (2603:10a6:20b:24b::7) by AM7PR07MB6215.eurprd07.prod.outlook.com (2603:10a6:20b:13d::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7741.21; Tue, 2 Jul 2024 05:52:45 +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.7741.017; Tue, 2 Jul 2024 05:52:45 +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" , "mst@redhat.com" , CLEMENT MATHIEU--DRIF Subject: [PATCH ats_vtd v5 20/22] pci: add a pci-level API for ATS Thread-Topic: [PATCH ats_vtd v5 20/22] pci: add a pci-level API for ATS Thread-Index: AQHazEQPZma3+RPBzE6mhYIQQIOAhw== Date: Tue, 2 Jul 2024 05:52:45 +0000 Message-ID: <20240702055221.1337035-21-clement.mathieu--drif@eviden.com> References: <20240702055221.1337035-1-clement.mathieu--drif@eviden.com> In-Reply-To: <20240702055221.1337035-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_|AM7PR07MB6215:EE_ x-ms-office365-filtering-correlation-id: f8881609-e551-4e79-32c4-08dc9a5b322b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|366016|4022899009|1800799024|376014|38070700018; x-microsoft-antispam-message-info: =?utf-8?q?hAzT74dpETQ6ZiLEZNCo8PL7jw/QOUg?= =?utf-8?q?zq8x6CF4PrKIwI/MQjP1eylwqOv+/k26m5BeqkmdsdMUYGRUBpKPJQQlLtdfwB1XJ?= =?utf-8?q?ZLxgXrnbXTKHajgmIE6Wz/Fjvdw5Cq7LV9NOXuC0hrEVCOdU0Vrxt4jeF/AekcmUN?= =?utf-8?q?P981MMv0T4D+50imS7f4pQ/TmG5OgurqV75zVHblnOq7mIS0RFHQGGPPcs1Tj2xdz?= =?utf-8?q?338ZjT9IGBsv40W2Oy1FvUnPibl3i7N7s+wwjV0U+QsW4D7bPbS39LYM4r/4PFI2x?= =?utf-8?q?55rBSDNY9/JJlE+kLjGCmgy7DZZUac23R9GGdffrYHBz7ki5ikSldLbzh1nwRb4OW?= =?utf-8?q?AqeA5tWDfeE2lJ/DHXxwH4/IKiEIBXzqXWBgrrn4salgoTO4iAzrenmiBMtUGrTnd?= =?utf-8?q?xLiu3eEn9uEjxpq7jgdyQsEgC/SRs0+HR33EqOqbUTXxOflE6XtSVOZ8F5ICYys55?= =?utf-8?q?vkPe7aZMCB7sg17LEgiwWeiO/eEtM2GohB78wyZ8Ty9WoxPq4e72adwg8Go8DNzlH?= =?utf-8?q?PlVU+KO41ajNprhWcCtdarQ0ipGFC02/bHYwke+sJFoGORQ6vhdcESIc8X+vm7UZ+?= =?utf-8?q?8Go9cb58OCo0LRgwmiN2kovMNik/a/HgUQa14yUUSS0vDR4Fwxqsz038Brxe9oS8s?= =?utf-8?q?FtteZBUzRAQKtmPVh4wJKJIp3Mi+1rN+sn+WirWeeiw2VtSpL0pKey0I7FPBe6WTf?= =?utf-8?q?6Rylg+VhOtD4ooDDJZKKPWBQfcKNWFoFhJTyLZ2JFcr6ccNfqHv35j1csYpWxyV88?= =?utf-8?q?i4X4uksQ9xob8q5TKugVVgAxdSq8LmXxTHa0qX18+H52QZMloGpIcKnn+OFp7eUB5?= =?utf-8?q?60C/3fjM/wx65sq+9Hcd2T35Ck3skCVTJ4Se1LcXGHcqPb0J54xnhiTQGKe3lDkz1?= =?utf-8?q?I9xxT85mia8Tys99yfqHkqGORT8twPy8Om6BVhmJJs7Gw93tegueWZu9kn8JCAFOp?= =?utf-8?q?QizfmcyX0GdFIx9LanlsCTHeW4V8xOg45Kuy7DUeM23LZFNYzuK/w4zXt/jXaWWvC?= =?utf-8?q?1H2Sjl7PO+KGa8GZ+b4rzPFZ0p2dBhAl4nQivWJPlyW0Di77weYn1wBG3PaghkNxU?= =?utf-8?q?dEK73TkwFbzawKSnhS/5Gsnlv2pqnAkfAbAuP9ifTWZ1QMHBgZAyGvzniifJFu2FP?= =?utf-8?q?S7DQaKzX4KmCHjxPwbdj5I4cs1OedGFk4r6u+dEmhk69T5c5s0Jl1qn0OIvbgliFO?= =?utf-8?q?WGP6ap1QGZB3Y9Pp+fUb5tthrTAAY1h6bGujUdaXwnGkLqAqT12uJ2+zNGTdXzRb7?= =?utf-8?q?iEB+FAJPqmo4BIBSxXmulOY4uU19FT65ovNo4U+ciImcpbVKj6BzhGpxnkGJ0/4j/?= =?utf-8?q?Mq4jyKYboQrJkfkp5GrQFs6f2Y85jwFwFA=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:(13230040)(366016)(4022899009)(1800799024)(376014)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?97glmMYp7IkpGRed81GFmbNA9rWM?= =?utf-8?q?k0G4McUixaw7NtRikge0Z/RGETccY8ryYyJrK+9HtxTBcJo/GFDUU5f6ucumiN9R+?= =?utf-8?q?MM5w+lU8aNdsY0qcYXEo5JMJLtKN/Znl95meCrHhXSWbH7R6TsnC30U7PQh4h06N2?= =?utf-8?q?Uyoc1Y+cYnnJD7AMtqqkku6uBx78OHVOV4egvBh8e+OCRnhSSdcLc8GATLBpyUeFF?= =?utf-8?q?SYgTrJKs5UvGjaxfyYdrjnfQxtsXO0DNtpHsR0Xs5CpXVYrA2gLqqSQ5XSUtifzzy?= =?utf-8?q?o25BIxS2hFKu2xZBPdDZUUShuNaqjsqtywTCo9TVyHY5/tDqwkW1SsluwkOhFqPEv?= =?utf-8?q?07o5v6gKwN7rD92585EoqPjrTLfvpDksSduCNKd9llGhPxjTrQcrQN5oPTKmD0USg?= =?utf-8?q?LKX+w7EiWm5mB83ED7sPYRvZRPaM7Z+M0KQji2VYV00zbnm2J8mpMwYpQSqI0/WNX?= =?utf-8?q?rWcIPTtJdz7Qd/5MQiqBSl8AIWSuogc+n4ehAi+h0GAnDywUc2rolPxVxqrku6ZXb?= =?utf-8?q?EHJ8i53VWnkEYmDVft5kvDS4GukvyaQ5j1Tnx/2Pr4wXb9q2g9qK1EsWkRd+1EWNI?= =?utf-8?q?SpjBrAYZyn6fPGSSncB8R3iMIrum2GtkMFGfScLDpTTGsuP4W9v3pOchfUQXkUhKy?= =?utf-8?q?m2w05IOZ9p92nGoMD1Bdq9k3t2ZXXhwkYGZqq2nuYlqhnhQF68mu3oBpKN8E733mV?= =?utf-8?q?CWaFXA1j21NtIi7hbxKHxoOdOYDMp4BjP+p1qyA48m7KSeFie3vorz2vLsQkbZtsf?= =?utf-8?q?oBSl5BzGxW0Rw36+WpStJQXJxcCK9LS4qz1NssqvXYJrl4MCTsb/aKT/+1g+84Sxf?= =?utf-8?q?RKcOKiTbc3VSXv16XobaKAeSrYUiP8+Iyl7Ha7KL52BJ20JOaTdmq1ZGZvqh9VTg+?= =?utf-8?q?oW7H0RkUX9ner0UM3JOaGvOaAOiiwX0ldByn/zw1vv+gN+p9B1/YPnui0xdn6/O/o?= =?utf-8?q?uS9jXvVGArUgoh1ib1A26TxyvMmIeSIFnNmTh6Kjl/FerMZ/hTvJ7+OmTnzs66HoW?= =?utf-8?q?/2z4eT/heYbNOip9Ayea1dfDztMQksL1sa5B9CNHboM5m+vABrgydEoCP4+cTML5m?= =?utf-8?q?FjrAJKs4kU16vUUbk7KykHCPRAcmBr5mJzmOasBkR1660+T22PQz9BEbNGfgAQP4C?= =?utf-8?q?iHWnaiRamMUV8Za0dS+w/YLLZldsxZ44wS2BnpBsl3RWr/Yw/BoLNhT9fBfJIAqoB?= =?utf-8?q?thMCmo58cuUoIg7khORenwgb228zcqQ5p3mbCWqgKlJ0X+krHbgzmde26CX5CQAhV?= =?utf-8?q?zZ0fa0ZnkfT+3l7exk4CnWVCtQNwlSOpAGwa1A9G8qtrqUGWYIVRXM4OFzeyZtKFw?= =?utf-8?q?pH+5kIm7ucENrNfTIQvVm5WjyRCIedr1qwGC7v1PiyerFkoCSQsIE41ONpi6BlplI?= =?utf-8?q?EhCIGyNH21ygCYNbEol05TPcrlt++Fma+WmhDGTEBqmUEfbr98W4J6FZoODcycUl4?= =?utf-8?q?mN+gmdUYvl0jZoLjRkoYGwbXCIGMbDkjuXqOHNnuDDfrO7Tjqx3XRXpLBA1CDUTBR?= =?utf-8?q?e55Vwe+h9sVc68vnY+uIQoZvyWVCejX+jDH/mkTZHjTOIWwTstgKIyI=3D?= Content-ID: <2F75A87E24A24243A16D9647F6509AFB@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: f8881609-e551-4e79-32c4-08dc9a5b322b X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jul 2024 05:52:45.3700 (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: azTOQJaY9WjExLgKCkjLxUCQZWCn/g3FEgTCbaG32Jfv5WfJeuc4vN4hX7zRgpaaiXhh3N2baN4aAY34Mvnh6h7P5DtBcRmNzBpmsvaZBGQUQ69SsNwGOuU987vPtesU X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR07MB6215 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 From: Clément Mathieu--Drif 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 7a483dd05d..93b816aff2 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 b2a9ed7782..d656f2656a 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -473,6 +473,58 @@ bool pci_iommu_init_iotlb_notifier(PCIDevice *dev, uint32_t pasid, IOMMUNotifier *n, IOMMUNotify fn, void *opaque); +/** + * 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 *