From patchwork Thu May 2 15:29:20 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: 1930652 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=eviden.com header.i=@eviden.com header.a=rsa-sha256 header.s=mail header.b=vVU5wqjE; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=patchwork.ozlabs.org) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VVdGP5hjwz1ydT for ; Fri, 3 May 2024 01:32:13 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s2YNE-0003cv-8v; Thu, 02 May 2024 11:29:28 -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 1s2YND-0003cA-Cn for qemu-devel@nongnu.org; Thu, 02 May 2024 11:29:27 -0400 Received: from smarthost1.eviden.com ([80.78.11.82]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s2YNA-0005yz-B6 for qemu-devel@nongnu.org; Thu, 02 May 2024 11:29:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1714663764; x=1746199764; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=mkr4mAHYujE/VwywrBm3WrIt+MSQrhOwUyjOaK0g24I=; b=vVU5wqjE/kA+b0w+GLGx2rmnLRgWsyjkq89sUazkZyDXbTlDsB+i2/cY XGulaXlI1JGiqbAyUh9UMEIV3RqKVQX0bhNGIi0XOmEU0r/NIzsWdOKsw HdJkWmqY2ZXe31bFGFsgOJDrMA+6QrZthul1NQtsGoZVczoHQHCsqyngk 2D4aWFAkqqRI6iCEPV8A1X5YVtiokYhYqT8Kk/Z/qQ1EvpRgBc8wSe+95 xGXVpgJXU8oo5D0JoPCbraUJezv3S7hAZjdQJYDu01C6s+2+2w5cjJZls Tsw2V+lKy03g0cLJprxT+imucr3bG/teulHoDBP5YyyuFZ9nywAKN6ZIu w==; X-IronPort-AV: E=Sophos;i="6.07,247,1708383600"; d="scan'208";a="11730664" X-MGA-submission: MDGmGmUp/L1b7zUqzQsNQsjhFjIy7Q13EyTvgUCBKvNiVBUjvSiNo1OYm0OAgydn8LGXh4aww3v3TYaWQUelt+2O7vgq92Xhy2QCC3LJytPREwhksmVzp2JxbWQ6/gI405Jyh3D4UWVQ3JC/nhSGocIasmGlu6jD2oxuwWXOoNf1fQ== Received: from mail-am6eur05lp2104.outbound.protection.outlook.com (HELO EUR05-AM6-obe.outbound.protection.outlook.com) ([104.47.18.104]) by smarthost1.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2024 17:29:21 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ux7jYakCEKLmjBecYrf88QrLFXGHSFtu/VCtZPOJSt/tc9P3qP1nNyg55/tf8LGGmW0G1tR+TFucO5xxa7pimLHLHviYN1vagRAz173Dl9oCaEsuZPNK+OFWCEBJckyVTHdUxcUFrqOWUIO5v6LC6Tg2/DC3tGLAu44KMLPn3atv49p+bph6EUadANWnhjS/WJ38oWYDoX0BYzlbA3ZqCT5gY4ITp8NOA7DuIT1vgWhxsVjukNq/wwOVYCJtZsi9X/b0oLcwgdRHPSmgRxA29Mj/4SPn3V+1Gl8qKclJNEYUbf2FAub/ryUijx1ouPxoz7vLkCIqofPv235HERTC3A== 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=mkr4mAHYujE/VwywrBm3WrIt+MSQrhOwUyjOaK0g24I=; b=ccR8W/5lz6fGrksP/zR2sayf5E8A6a27FCLy8itYfFcMtQPVQjaiedMwAJC6WPcpckvHUYXg7SAXrCwbywCGspuKB/JvsK98V4wHfQgnasGkA56prSL5fB5LQqBdJbr9bShRBqfRvq//9Y+8K5SvIIun+2meWEuHz9+FMRstnjUIMksPqIopA65bGoURYxgeAaSWpckBJZf58JjLl4pcKLeThQSGQwe5KU5wC4p7rLuxk780kvG/0gcQX/6oBYo+xPHyCpZ3aV08z5r8zp+aCHyt3w/Dvw6uniG3ew1wnCmS9lkAMGx8j80sWApBGBAz17tHx5RyFHZVpehZviM9cA== 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:20 +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:20 +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 15/24] pci: add a pci-level initialization function for iommu notifiers Thread-Topic: [PATCH ats_vtd v1 15/24] pci: add a pci-level initialization function for iommu notifiers Thread-Index: AQHanKWAjSp/SteTZkWYOxoa9suFmw== Date: Thu, 2 May 2024 15:29:20 +0000 Message-ID: <20240502152810.187492-16-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: f9ca77ec-438d-4017-67f0-08dc6abca307 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?rwe+T5KbW8CDln15ct+hqc6snflVYhH?= =?utf-8?q?cMz0mjGZg8GuGxJgRMvUwIlie7JTE+qOXBIsDg2nYNpx0f+xZKQqa7qPOJPKmktkI?= =?utf-8?q?nHj0z/LaOxi3k/5ifgIMO02jgolKP9oW1XdmZ9eqY8bGa6/oh3prRtRsfmINrPZYA?= =?utf-8?q?BkIOCH3n994QAB8Z9eQlo1sFfPWeWwf/DaVjr+Fj1c3rKC6VgxGzDZ89xK6ghbeyD?= =?utf-8?q?vWFBiYJIeQzleJREQ2pGA/s/Qs0UuA0wVpZ/ACeg/cFkWnnJRWtYw1HQO4K0GBfiA?= =?utf-8?q?3Qvr6ZsfXr1HobF/7K3+0UyqusiVWzZKH7dfmi/usP9qXnxdzR8QImMw9MrIyoaGA?= =?utf-8?q?SDhMEa4yIbcj6b3CO/z7jkzyLaEDrFSUuHM7xI7C9mMme1J3CLggOr+Up6cX4atU9?= =?utf-8?q?YqerphvxE8AVwBFO4+oxCVEIeClAuOIATMmCTtBZ0WAJtPi4c6/sv6YUTLFsCWH8a?= =?utf-8?q?h/SVLSCb/mNeuP48wSkz/osfZbfmx0UE673ux4uZwSzDjNOw9rNyqOLPQbHMhx0cD?= =?utf-8?q?DzQ3cLz53tk0PKUJpG1aR/yUjCFz2XqX5UFsnp6rdIc0GbomTZahr8cEBW82p2aVG?= =?utf-8?q?BkTnLggMuAEpJM1A11OtaJIHitbcTjP0S/zATos+J9JLVo5AjDJTCjvyk/bcgtvMB?= =?utf-8?q?odPUOAIogO4RP/ELE10vZ+kx/AvFSplX8FGOneWXpFwcXwFOzf9V38A8Np9ct5KE9?= =?utf-8?q?oo9dlInk4XZuNgqu2w9dMtaSOgj3flKwj+sZMzM7/oWNsFKnfZBLYAnARulwlf3bN?= =?utf-8?q?EjAchdXZ6X5mia37442apgxiCAYu2E/kHBNdlDIh3OpEHdTwrQvaf8OhXvCSBYc+G?= =?utf-8?q?MSYyUyxMRS4ONSDSVNGa2kefjtIRJr06AE7w4XsdRjuav3oUA6owVsVdIS673H3qh?= =?utf-8?q?Cm68O96kf4+LMMXp2zPfJuwk8sfq0gdM/Bv7gaHGf3hjLet9cXdPSoI0CJP3ScRky?= =?utf-8?q?Zq816ZiKz4C+zTRs3pFu2jTykJLbnn7Ern1VXH1zQKgkh0gNRQyxFRRAtGrKppWd1?= =?utf-8?q?DvOREPq5dVW8DcLCbzUmOpnX2NlXm5ERSOW6Q5y+/mI+5GkcMFxDFfpwEWRSwZv+4?= =?utf-8?q?Gp5tubgEq3IxJnoJydoIkPRTRVup4u+tSIEG4X5llAod35c4cUQrfGV6hJkbYqn7R?= =?utf-8?q?uOj04xcxI/agOHNbgiG4oz7+X3X/HSdJJ9at9M5eSDkz2k0bcASP0rVHmYsAj8lx3?= =?utf-8?q?4i36BdlatAXaxVm9Xw7CQzMkcFLnRTBF4V/B0PXJcO84uNvkBnMAi0p40Kw/hd4OP?= =?utf-8?q?ACmN2qo7ckYq4agwNdfIQQsc/IpD8jW/WHg=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?4s5y3Ymw852L530IUKUx2T51Tg05?= =?utf-8?q?TghcEEbKQ/1BQyOcsl3Tb4gwV+CjC2iwS033dTFQ/fPDcgBO+pX3aO4yQn7BdRAqD?= =?utf-8?q?GbbSjUh02tkpw3GKrWoof8ep4d6FsHBSHuEAgLpBy/QoInLEVklsGmE6boRIXeCVS?= =?utf-8?q?JkieavBt0jz27wFv07ugAbIE+BRjlvN7NAdEOWeeCYwVb+KpzeZCDkBNTLOU0KH60?= =?utf-8?q?cOEJ7Y5fVDrcqgfa9CzoTw1cb9tkeHlHOd44j/29mtdEJbHgvjLGOKbJ2kVRmDBot?= =?utf-8?q?FLVy991PBCM0ezGJMxN7s0FEeot/Z+rHeo5JVE6T/O0qI774JnLrrtM2T5Yz3UsUV?= =?utf-8?q?npW6cwuwCeCbAAS8fw9em0Nb/LV31GTt1qhLC3iKxxSMtqQr02ADTt/cfPsrJYxXH?= =?utf-8?q?3qW01KXzg0rGOEeoc7C0ALZukEsCVhvKeeqK8wfmmPTkv6aPlCtCZFqXWyOWco2TV?= =?utf-8?q?I4M9g9WdQ+8k1saeQDevyayRHjjS0nk9Lm4do4J75P9UvkMO3dgvW4nggTokRZoNw?= =?utf-8?q?n7AdJKldfPgZHQiYDljVUZKEPbfPTztzKyEQpXHzI91ESFi8orfvTuOVzIcToAdsB?= =?utf-8?q?Jb79PkaJ+KCwRoETntXXFxfZHjhn4u1XZro1x5mTezwsKTw5JkQ0ETgBlYcomkxHY?= =?utf-8?q?j1bk91MA6OfJLv9mjDK/BHqpSxEPAtSAh0B7Z6zosoi8LWGvi3QWY3UjMqJujz4Re?= =?utf-8?q?f+2vgqlM/qHmNmKWoRu+W2zYqY7nPqTfV6aIyxfrc5ZL0oq9QM2nkDmqEwowkZg8W?= =?utf-8?q?Ys/hF4Ous3h85HARHIeMwNdxn6JUwF4afa54a6A2aB+cp5iBijxdc8v3Lp9Tcj6tj?= =?utf-8?q?bYH4IVZ9IDKYXsHwouewAsBuVf9hbwMylGvvHvtV0OtFOiDXK1D7qbFr/h6tJqdBZ?= =?utf-8?q?5fbIK+xNT8itvgB9AmdIEYY9y+d7uppXJ2hkB0WBxpjXlY6qrE1H9d3M6BMn0gmGK?= =?utf-8?q?kMYNh1qkUGfY2ev2dYoo2m9J1Tv9sNMQFFJbf2I1r2kgtLdwjipkyCZYuZUHFLHyh?= =?utf-8?q?kru5Nh+HmU8TsprmX2UeqjQkBzw3o/WmFmk6jNH0hsjLtIgLrg7pWwU9Or52IxTTi?= =?utf-8?q?r3D1NzvnVoQlZ7NKZWPa3OF42M5mVdEsDEdW37ZWdXCFcmSjLzXiZE5s5U0Z2idiG?= =?utf-8?q?WRJ6o4oWS7rwo4Oyvz8QbFeD4pfkHZfVrYDqmWD26uGoKhttO+uDTbaz3fAWZMee5?= =?utf-8?q?MggLWbxJAFK6BTyW9I0+627pdcNOgbF24wqSItlhNbQ1MeTy0VoplBekt10siWUEr?= =?utf-8?q?+eAOQnRAlgusBWtiHLHK5wTqrVywe59naLP0CGOuyfvKn5/3ERIUqpQVczet0micC?= =?utf-8?q?cCmVVMEQWWXQmmjJLl0i1MYiNwE2SuB69DrB4ZssqLjInyw09cSWN+ILsXK/5yVvq?= =?utf-8?q?g0lg/15lRHMYg8R8YVfd85URd7xkB6QLoRLD7bfb8LqoQ0O1auYBB98I3627NAnMU?= =?utf-8?q?1YcPN88pV3ScwQDl0MfFoCOsUQqNgqA4ZGTvEOdZjoKPtjqOCuRrf/TfeFwAkC+z1?= =?utf-8?q?zvrHHwiI545gP3e5BSvo7RKlp+92WG7wOmdYFKh80LISuHWBYH2+lSg=3D?= Content-ID: <38FFA72164AA024BBB0D83A6B9C35348@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: f9ca77ec-438d-4017-67f0-08dc6abca307 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 May 2024 15:29:20.1081 (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: 1D/5j90V/BTBQmg9tqnGZPy6GMw2LgB1qg/DRsYEUIMxWiAZyM/mGMT5PIr6olNMtm5w5sKe3/D8d3sG7giAUH3vv19bpV28Yx4pyF3KWWkrYJN4LmyrCsyRH2DrODkp X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR07MB7768 Received-SPF: pass client-ip=80.78.11.82; envelope-from=clement.mathieu--drif@eviden.com; helo=smarthost1.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+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org We add a convenient way to initialize an device-iotlb notifier. This is meant to be used by ATS-capable devices. pci_device_iommu_memory_region_pasid is introduces in this commit and will be used in several other SVM-related functions exposed in the PCI API. Signed-off-by: Clément Mathieu--Drif --- hw/pci/pci.c | 39 +++++++++++++++++++++++++++++++++++++++ include/hw/pci/pci.h | 13 +++++++++++++ 2 files changed, 52 insertions(+) diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 9ed788c95d..d10cdb3d75 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -2747,6 +2747,45 @@ AddressSpace *pci_device_iommu_address_space(PCIDevice *dev) return &address_space_memory; } +static IOMMUMemoryRegion *pci_device_iommu_memory_region_pasid(PCIDevice *dev, + uint32_t pasid) +{ + PCIBus *bus; + PCIBus *iommu_bus; + int devfn; + + /* + * This function is for internal use in the module, + * we can call it with PCI_NO_PASID + */ + if (!dev->is_master || + ((pasid != PCI_NO_PASID) && !pcie_pasid_enabled(dev))) { + return NULL; + } + + pci_device_get_iommu_bus_devfn(dev, &bus, &iommu_bus, &devfn); + if (!pci_bus_bypass_iommu(bus) && iommu_bus->iommu_ops && + iommu_bus->iommu_ops->get_memory_region_pasid) { + return iommu_bus->iommu_ops->get_memory_region_pasid(bus, + iommu_bus->iommu_opaque, devfn, pasid); + } + return NULL; +} + +bool pci_iommu_init_iotlb_notifier(PCIDevice *dev, uint32_t pasid, + IOMMUNotifier *n, IOMMUNotify fn) +{ + IOMMUMemoryRegion *iommu_mr = pci_device_iommu_memory_region_pasid(dev, + pasid); + if (!iommu_mr) { + return false; + } + iommu_notifier_init(n, fn, IOMMU_NOTIFIER_DEVIOTLB_EVENTS, 0, HWADDR_MAX, + memory_region_iommu_attrs_to_index(iommu_mr, + MEMTXATTRS_UNSPECIFIED)); + return true; +} + AddressSpace *pci_device_iommu_address_space_pasid(PCIDevice *dev, uint32_t pasid) { diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h index 0c532c563c..1587c18cd9 100644 --- a/include/hw/pci/pci.h +++ b/include/hw/pci/pci.h @@ -458,6 +458,19 @@ int pci_device_set_iommu_device(PCIDevice *dev, HostIOMMUDevice *hiod, Error **errp); void pci_device_unset_iommu_device(PCIDevice *dev); +/** + * pci_iommu_init_iotlb_notifier: initialize an IOMMU notifier + * + * This function is used by devices before registering an IOTLB notifier + * + * @dev: the device + * @pasid: the pasid of the address space to watch + * @n: the notifier to initialize + * @fn: the callback to be installed + */ +bool pci_iommu_init_iotlb_notifier(PCIDevice *dev, uint32_t pasid, + IOMMUNotifier *n, IOMMUNotify fn); + /** * pci_setup_iommu: Initialize specific IOMMU handlers for a PCIBus *