From patchwork Thu May 2 15:29:19 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: 1930657 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=jSdHWi3m; 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 4VVdGn2PMWz23hd for ; Fri, 3 May 2024 01:32:33 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1s2YNs-000432-FW; Thu, 02 May 2024 11:30:08 -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 1s2YNj-0003vv-Bh for qemu-devel@nongnu.org; Thu, 02 May 2024 11:30:00 -0400 Received: from smarthost4.eviden.com ([80.78.11.85]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1s2YNh-0005ys-6J for qemu-devel@nongnu.org; Thu, 02 May 2024 11:29:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=eviden.com; i=@eviden.com; q=dns/txt; s=mail; t=1714663797; x=1746199797; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=HqPBv4MByZu0WvDVOh1KhT9RsB1lIMuoLhy+mBu7tCY=; b=jSdHWi3m3X4vLq3ucmyZag02HT0STfwBAGiEerPfNavJQJLk/+ivmcUV lAG7EaoUB0N16wBuuQ9dcXsevNoP3ghYOXrs2EkNoNRoYYQIh5uP76LZJ 8Yab/6lY+/QSWmzXw/anLEPPxy8vgVkIZsjr6/OmhdoHPgUg9MUmqW0YR eDG7Firj32aQnxylYrMKbRF7bcnHW237h4+JnV5vM+u7Uw3rdOFnBk9cQ 0z43mqJQ5Dqy/iBW38F3OME8K3MxMTbaFMQfUdRBAD7ME7vBEgYNoI27F reZrfoXJXMxEXF4KlsDC1Xb1LE8KXkDAicI3Tm6ulSevgOez5hpWMPQQX A==; X-IronPort-AV: E=Sophos;i="6.07,247,1708383600"; d="scan'208";a="11785885" X-MGA-submission: MDH8ClsssreG0UR25H0CWpte79oVApOYudlbCZO/y9Opi4QbVi968rzfgXcR7CfWQ+aAG4CUsbzNorls9nt/BW1Nb9O0wFRKsG6ckqPn4nNjB+uksuB09ZkWOrkLQogoGVt1KDNKbcKicXbTsS5ng9wsUDU9/+rye2fWZLefiZyMxA== Received: from mail-db8eur05lp2104.outbound.protection.outlook.com (HELO EUR05-DB8-obe.outbound.protection.outlook.com) ([104.47.17.104]) by smarthost4.eviden.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 May 2024 17:29:22 +0200 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L+IE+9TNGsoCYK5+KLDNYFbzIzHmwHitcf5yJsF430NgOhbIDikvYf2An6NAfaLReKfOSRFOVk/kVWbNxXHOKoFv2Rhre6kkgVxhuE+V4kA9og6xwhssnQhapsT9EOpU2gHXBUrBD/lN5sMZVYBLn/b53JhN/NUuYaGepKwVRnnmP5S2YQ+Kj/rue2uXFPz1wdcQUzzRAfmqqqN0/eCgbUISl4yea2GNYaUTuCttSimheq89+3UVCPYkbiq7QrqQZtaVEtBgxoVXaHYa2ZUo8vhsiC0/5Ji5jt2X01UKWXk2dkXugfdlr5ZbtjgWDZsh+hZR2rceKN9PuHUATwptPA== 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=HqPBv4MByZu0WvDVOh1KhT9RsB1lIMuoLhy+mBu7tCY=; b=I6zmWww2imCwV/APp2H2NcggPdb/57BUwcrdKSojwai5AthCjU51AQedNZ1+1ZLXAiTEf/2Fy6oAuJLDfpl9qdk5Q7Lc7zHnF7Yy6n/uJeBIZiXTQwgQiNt8TaE4iPKQnxAU8VvhzgsDqlhMg85jeznFvvHck197COIVOnYoT35GbO0nacALVV9zTawpNNIBApUi96GedL98/vNc2Iwzdkr4GxXf6CSKygrezfkfm6sYpBQ87D7RhsTpQ+ncznNSWA8+3Ekx+sBzKhMxN7PiuNUehhtnZ2dY7pRv/OoYTpeya0T/0uwruUtWVh0ahCE7y/8fGNZ6kP3pH20wc/OaRQ== 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 PAWPR07MB9661.eurprd07.prod.outlook.com (2603:10a6:102:389::19) 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:19 +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:19 +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 11/24] intel_iommu: add an internal API to find an address space with PASID Thread-Topic: [PATCH ats_vtd v1 11/24] intel_iommu: add an internal API to find an address space with PASID Thread-Index: AQHanKV/Ps259jorIE2wmk52NNnsNQ== Date: Thu, 2 May 2024 15:29:19 +0000 Message-ID: <20240502152810.187492-12-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_|PAWPR07MB9661:EE_ x-ms-office365-filtering-correlation-id: 8bdee101-becf-4a08-388d-08dc6abca285 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230031|366007|1800799015|376005|38070700009; x-microsoft-antispam-message-info: =?utf-8?q?EUt/pZL5lxJykHmpyPnsiaJxTWxAZwk?= =?utf-8?q?7F92imRJhAU/WOIWleDrXkj6vDGtJbfsAwDS+2+A7p3VSxPVnEwfAptwTnKyuvVMZ?= =?utf-8?q?UeSDPgkRFojW7XbcTv4yWUMK8gKK/wZP0IHgJlUtqAYK4a+nnnfHHc6rT0A1tFXAp?= =?utf-8?q?z83pdC7MnFk0zOu+qh3YDGOls9cTIMRQ0oWxH53yEY3oivGnsZ7LvzP6MdtJQzLrq?= =?utf-8?q?vOv/JOgYUl8KIweI9TAEW7jNhK1O2Ru18zgv4JNZsw+E53sJTPV5alE3B/pLrbfW+?= =?utf-8?q?9ZYFmK7ZbwQitbkQ5Lh8x5VoT/FErlCKOMl/7PTSDz5AzOsm3ydazqZLLb/R/Z8id?= =?utf-8?q?+aaVKz6VTMqEs54zsYgUu9WQKdz0eTb7T4yTqXAyKnkJNzpJa34Li1cUqro1wF+vk?= =?utf-8?q?zHMJDipl5z90vTGuvaBGvtScsC+sjSUIoau/VtXGdcZDYm/NE++advgjeSZNCSU5l?= =?utf-8?q?Um41AYsbGkuZzM1P52XiJ/tFyb6nR2SsqU/OfTi5lOgVCTHIwdUGoOq775/Z5LCfI?= =?utf-8?q?Xx70WTtMYbJnfPkal+AfRaXGsOYqT6nPaiSls4rdxh9nkE4Dxf4VqGAARPbPtfgAO?= =?utf-8?q?BK9mW3TJcrqw9f/YvxAae9iHOIFP0pWJAmKqGb6PX0JhS+iZnTTAkm4CA5KpYTNPd?= =?utf-8?q?vEbGXus84+PFedFz7Wpzb5Q5l+0hJ/UM/i3g7BrtKP2T9I2qpQeD1DsNBqDFMI92x?= =?utf-8?q?e7ujQNjt5WxjDDRWAxWCxc4ZPlUcESgfGwEQLFN3iXYeR2I8sAwrYoDaNnUTG9O1X?= =?utf-8?q?FJVteS3xCnAR4tTQc7cdm3prlmZZeDX3HdDdjklh4c7IPplIEqTT87YTpqv7dzxjV?= =?utf-8?q?oOKwa12jbF92ieK7319MFxYVJ6S2wwo5cELaJMtksDlaI59v1SI2k0vKtE29IwXhh?= =?utf-8?q?i4dBkTyoE4igzEZiWPsgztDx4o29HqG5pTl4fZ7Bn/oSNMtyiFMwwCpaiSh7gJ7jE?= =?utf-8?q?u89dBUtucf5wFB3yyjCdkjwgys4k3ieskVjzkfH6JotTOo2/YCnmytQV1YGK9GAGI?= =?utf-8?q?Qqq+VBzHe2UCY9aZQeXHGmt6oeeL21hrp+oexOetpcshkfQkQ79jm0bwdQzGA3hqr?= =?utf-8?q?B+F6zUjoRNvuzBCKK+cED9qmiAemU45LTfSo/pMpQUGGVFH1uh9c/SngWEcptszaG?= =?utf-8?q?uqtdE4UV6KUJ1jlIxIwzxFglYfVq0yZsOFTUqR+9rQ2Hok0emWJNJjZBKJl3O5OoW?= =?utf-8?q?o0+HaI4jWb2BwhETlxbA6cR13LQTCpQInQJXy/3ra7ik4XqVkQpGU8WHJ3RUVIBfz?= =?utf-8?q?aZH6KNTq8x/lWEOzjeZUxSAZi7QKgkuhJ6A=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)(366007)(1800799015)(376005)(38070700009); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?Dy6trMJ9/jGY1qiZQW9AK/tNUoFJ?= =?utf-8?q?eDa3VM5Isjtkzp67ndgIIKlMr6rlMpY3yLQKeJAPtjN1uwLarMqhCxITDO8Wllm9+?= =?utf-8?q?i3DoKzI+kgQ+uI2MgoHVxTrk4FKUTemNvPKfjQS+HUCG7yjffIPVj4RSxKDq5U5Pq?= =?utf-8?q?y3ErV1U+jGJsaz7PfMKE/fQhaeHQ6FDzkgxEyvNmBY6UbzsRcGUhWRSVhRHWxJNx7?= =?utf-8?q?py3dkCz8hgDLTjDGKdwKPwPxv7GIj4xpt0zkVPY0t3TF8n3Nc7/t53Lbzm2b4M6db?= =?utf-8?q?NgAfJtZfZmRQviD23pAd+RPXG+TBd0pYggNeMXx8fCGmzHzncAJobxh7IQaTfPnnP?= =?utf-8?q?nkygICMxBehFheClJ9leEZgdgD9ORktGXBz6DK5uQYSPz7DuVz2Y44TpmwVfNrQI9?= =?utf-8?q?rcG0hzKd2ji6w+Nll8gUWZrT20s8jQApgQxym0SXUcEPDwndoATMHZqZf4ev3dTeq?= =?utf-8?q?a1eNCUsOtbVKXwSvQ2pv5rrujOXNe+i+KtbOZiNrs89lXzNsb0tgyIj4P1zfKO616?= =?utf-8?q?lMp7XATRk+Be8M2Gz2Yy564CD4JTb5AQ+5M5KF6JKEt5fzbi78l4IuQ2Pjhm9wi2M?= =?utf-8?q?BljVOFTkqL4H/BWKp6cgXNt3ppbk2bIrpc4C4ZkuvjEyVPxO6t8xdEGg1tAFehBsI?= =?utf-8?q?+t3Nkmj0TGoBMP7EiRMLxQ9LnPlrS9B8FansuzWsmPBocYryrA1ha5C8UebBi/CjQ?= =?utf-8?q?s3EhbAMwaryzKbs3eajJErgklh3FdncN1BxdZ+8DA0VFCvmmx87SKkQcXxtLru2No?= =?utf-8?q?9Nz9GeWCHGSwRgUUmd0y2nyuUaiOnheph9iRmF/TXZn/wlwve21CHJOUiEi5spwHm?= =?utf-8?q?bML6G9uGFrJphku1Qz6/vS2cHr9V7d255o5Y/x7urxAqQ0Ob96grcn5taNeGarzPu?= =?utf-8?q?K3mrWy0thqeJdV2mGZJKCqWySwNa6qf/9cAIkPxIaTnpk/hEVJ0VpRYt4929bKFOU?= =?utf-8?q?pONgW3YHPh9CLhescpucxK5A9V5KT5WFVjL1rE6mwj2oyrMxN6iDdQxcUspHAIKCZ?= =?utf-8?q?Nz6usk7070dIe586DOnh5YXEkCRDJbtxN87SLWYNVgMuJmY138bbN+MEdq5mZ2U1G?= =?utf-8?q?xpQr6w6VZm7vMRNhY4HRVXf9sNj64IrjQN18F9vzPhpTteTOOjEBvG5DbLTqQPVaA?= =?utf-8?q?uZ0A+sSpyopV2olk5FsXW1i+DksKOU7YavqTTbsZkgmUtu/JZkXuiqF0qeZY+BP5L?= =?utf-8?q?Mz75iNllYvpEBxP+UAsfPqDkqV+gi7si7VoVnX/88Sc8EMngl7YCVfvF9Rh6yUo1b?= =?utf-8?q?Nclq+PXe54gQcYtmWrRifa5zFjiBMufIkFJRs4FS9blosB3nIkeaJDpgj7CV5mCeO?= =?utf-8?q?Z2TJLqMlrYk2fyrw5fcOXB+KhivdYy7iXx3Af3GF61dwxtzFQq0qiF9iBeoSYMaMG?= =?utf-8?q?nOh3l9RFFvUo4oMXDXGvKByt2FN8rqaQt0mQ+HJwoTqvVfKJb6bFTepfsCMPDm7cj?= =?utf-8?q?USO2K/nvSW6D0e92aEvEn4R4EkgwL2juoJu7GMif+k0EE0v53g/Crc+aBqMt9gVHk?= =?utf-8?q?NYMF6sRlFy3be0cLRcz5tFouqNn74zxZcgeyISxk0Bi8bri+0VDZuCE=3D?= Content-ID: <5CDCFE5E0FFC314BB30D213F84C6F7B2@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: 8bdee101-becf-4a08-388d-08dc6abca285 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 May 2024 15:29:19.2063 (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: 1JnPc2ibXG8cOiI2nG5jVrIYTWZE+CIKUuP7vW3uczk94QmJ4GlRIQqJl1PtT712f06lZ/cepAHyOdY1tDPoigcMz896+JdiRqQudj++1zCMKmqat3uYE3BIr4DHvI38 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAWPR07MB9661 Received-SPF: pass client-ip=80.78.11.85; envelope-from=clement.mathieu--drif@eviden.com; helo=smarthost4.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 This will be used to implement the device IOTLB invalidation Signed-off-by: Clément Mathieu--Drif --- hw/i386/intel_iommu.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 98c4a70fe0..fe97930774 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -65,6 +65,11 @@ struct vtd_as_key { uint32_t pasid; }; +struct vtd_as_raw_key { + uint16_t sid; + uint32_t pasid; +}; + struct vtd_iotlb_key { uint64_t gfn; uint32_t pasid; @@ -1931,29 +1936,33 @@ static inline bool vtd_is_interrupt_addr(hwaddr addr) return VTD_INTERRUPT_ADDR_FIRST <= addr && addr <= VTD_INTERRUPT_ADDR_LAST; } -static gboolean vtd_find_as_by_sid(gpointer key, gpointer value, - gpointer user_data) +static gboolean vtd_find_as_by_sid_and_pasid(gpointer key, gpointer value, + gpointer user_data) { struct vtd_as_key *as_key = (struct vtd_as_key *)key; - uint16_t target_sid = *(uint16_t *)user_data; + struct vtd_as_raw_key target = *(struct vtd_as_raw_key *)user_data; uint16_t sid = PCI_BUILD_BDF(pci_bus_num(as_key->bus), as_key->devfn); - return sid == target_sid; + + return (as_key->pasid == target.pasid) && + (sid == target.sid); } -static VTDAddressSpace *vtd_get_as_by_sid(IntelIOMMUState *s, uint16_t sid) +static VTDAddressSpace *vtd_get_as_by_sid_and_pasid(IntelIOMMUState *s, + uint16_t sid, + uint32_t pasid) { - uint8_t bus_num = PCI_BUS_NUM(sid); - VTDAddressSpace *vtd_as = s->vtd_as_cache[bus_num]; - - if (vtd_as && - (sid == PCI_BUILD_BDF(pci_bus_num(vtd_as->bus), vtd_as->devfn))) { - return vtd_as; - } + struct vtd_as_raw_key key = { + .sid = sid, + .pasid = pasid + }; - vtd_as = g_hash_table_find(s->vtd_address_spaces, vtd_find_as_by_sid, &sid); - s->vtd_as_cache[bus_num] = vtd_as; + return g_hash_table_find(s->vtd_address_spaces, + vtd_find_as_by_sid_and_pasid, &key); +} - return vtd_as; +static VTDAddressSpace *vtd_get_as_by_sid(IntelIOMMUState *s, uint16_t sid) +{ + return vtd_get_as_by_sid_and_pasid(s, sid, PCI_NO_PASID); } static void vtd_pt_enable_fast_path(IntelIOMMUState *s, uint16_t source_id)