From nobody Sat Oct 4 05:01:33 2025 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2067.outbound.protection.outlook.com [40.107.220.67]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 46FE323C516 for ; Wed, 20 Aug 2025 11:30:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.67 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689437; cv=fail; b=EfkEChRUCaXdEjIU8/UMA3PqsAdAxgLUEDCNJ+Nf85Pyp30MUiFVUJSZ8R+lTZhbByJOJX1bcXDRl3I0MsvxGNE69Hgq3XJ7OhgY73PAWCQfXHTR6nWNAJD7e9mYFwvBwooel9hiJEBDeeswbZRrhKPx6cfXvRfUPEHWHv7yCXU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689437; c=relaxed/simple; bh=4C4/rQWSmWPw89Kxy6/nuaztBGtFXBQ18L1oX544gNQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OT4Sug8jIVy7oyl+wTQFBNcqPCeutl8AFfZSrq5QlnPOvAeOP/6V84ifjs2w2JLYr4DhRsZppuJxAJLfSLrjKSsNhyUuM8Cru0E/HhNLwQPsSx+vu8V7REziOKpa3PgiOVc9JOFQW/pf0V/2M4f94IT3lYki8W4uQF3s7ufi9II= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=Ej2zfOvS; arc=fail smtp.client-ip=40.107.220.67 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="Ej2zfOvS" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=a2HJCQL3EYte48pB31dEbEKV3RTDxnoRNBwJoGQyQQbZrUmzaEfF8JhXKUq0jfkNqpCXIsQmlvYcHEQoyaZPWz9ywBDOvhXu9cOqrGcavj9qFxgHIdgcCgASgR65aPzd/bmLJQy631VUikSl4j/pnzg+ubcaQRJmBsX1560ukyN/ufz3K3LEvqp8BVbVLK0dlHrdUUgwzLENSlh1kU7N5JrINrc1xDwIvq/lOTmD7gXnK5+UQLpDVcPjmPVtwfeyCakZw0y+8r4+yBcaDZz4GCGcHmbntpqnuqRymx0VesF7OWTDd/O1aflsimGFXX02Kng4GSIX8/wRWZ5wd2r1zQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=Kg3XlE45XRr6UsH2nbWiOLd54ujKHYooNiH6Ky4zrUQ=; b=F2DmnoAUqtCWU99eiTeRzJ1FYO04CZW4Mmo+rqwJRHc4tsUaqWGKSIL8giK8BiZ8y+FWRCssUPM/WU+1tj8T4k4hJu3xa8taeQ11LrrXNOaydLoUDm+N8k5uvTKVyxb2MHw2281nj6myzHRojspZbRnZm96lluHhP6HM/j+CuD5BTr3segsa+RJitMSLWG2mQuiDzPnzHCiKNtY3ub2yX9wMtatDFHvvBJ5AC6HODzS9oTj3/VxESiYDEwFUkj57K0aUFmHqvkMkPLnFAO7n3labqv0HRfh5NKW1X6yDXaxS0u9fnnbXXPZD6/eno7b7nfcWPX4zYeaQW7yNW+fzJA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=nvidia.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Kg3XlE45XRr6UsH2nbWiOLd54ujKHYooNiH6Ky4zrUQ=; b=Ej2zfOvSaUcWMm7laZAcrIjW7u94PXmAXW0iwLlyKDVC3QF+BHCgexY2uoUX+pehXJAIiN/TSRXWBJveEm3t5mjOVhK7VR7qzD/q9OlgV7xQHiQgJvHpXLEBtZ9iy13jnq9HQr5PIIHgYtUzewL6TTY62J2a5KMo5tH4pIXq9Ho= Received: from BLAP220CA0016.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:32c::21) by MW6PR12MB8899.namprd12.prod.outlook.com (2603:10b6:303:248::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.24; Wed, 20 Aug 2025 11:30:34 +0000 Received: from BN3PEPF0000B374.namprd21.prod.outlook.com (2603:10b6:208:32c:cafe::48) by BLAP220CA0016.outlook.office365.com (2603:10b6:208:32c::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9052.14 via Frontend Transport; Wed, 20 Aug 2025 11:30:34 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN3PEPF0000B374.mail.protection.outlook.com (10.167.243.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.9073.0 via Frontend Transport; Wed, 20 Aug 2025 11:30:34 +0000 Received: from purico-ed03host.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 20 Aug 2025 06:30:29 -0500 From: Suravee Suthikulpanit To: , CC: , , , , , , , , , , , , , , , , Suravee Suthikulpanit Subject: [PATCH 1/8] iommu/amd: Make amd_iommu_pdom_id_alloc() non-static Date: Wed, 20 Aug 2025 11:30:02 +0000 Message-ID: <20250820113009.5233-2-suravee.suthikulpanit@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> References: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B374:EE_|MW6PR12MB8899:EE_ X-MS-Office365-Filtering-Correlation-Id: bfaebbc0-d262-4c05-936f-08dddfdcfa49 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700013|82310400026|376014|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?SwkaPR6LKeNPWkhrc3HFmRAxTSkAFW8sRfmWNKOT6NOg1M3LamXo22F98QYF?= =?us-ascii?Q?ortkpOYvXuKAahO/oX/pgZLMXnNsc5fsSArMPqVhLFC8AhE4MfvIYTvRgtKE?= =?us-ascii?Q?qr5AqKTAdVtPdNhDEJqMONcCubB5AACDMIIdTcKTlKmAVJsr/RHdhAVQEOwm?= =?us-ascii?Q?aIaML8CIBVCU+K5Ezcz+vxrmGoAUpN/4c5PmLOt33ow4l+AiNY7/TTBPy3US?= =?us-ascii?Q?rL8WCaPz3FxQmEzbFEzW9WzPzi6+JMp5rSEjGKkNNuWpcEPDR6+VSfN4Xbr0?= =?us-ascii?Q?GhUmzi9fK+Fhl3ZsAFkjVWKySL8wh9L78kbGeTSXF8l6bgLsGHStworSfMMp?= =?us-ascii?Q?vInJxAoIXbtVUNfXAQrqL0UGyl4co2QlaGwQW74duTHiOqAGQNvR0NC9+uvj?= =?us-ascii?Q?8ePwgLILErXyzMk4vttwnHfO3dDuLgvdq+bI2+/TuhhBZ0ZO9y0DQiOHe5kD?= =?us-ascii?Q?QkgkQqHjAopfw7wNS3OO7ugD4SaIPSVa5ExYNfB/Px7Ay0iPXUnXnUksa2ss?= =?us-ascii?Q?ObLu/Zg8zWlu1O/EYsQxBEYQlTB94iZQFMuZpUbgDYxguYRuJ9F7mF24vGGC?= =?us-ascii?Q?TgxF18wFUVWZ2T4z/mfLy81hIX9IpmqP19YXqfw1hbjnGXYJEtYBDwDgpUDo?= =?us-ascii?Q?dj0YQaj1b2tacyyDY8Yi3aqDtctJIO+Sa5NKF8eYs6p7TNthQLfmg7TEYWhx?= =?us-ascii?Q?dkDumd4z9wNlBUGxm7CDDzRV50cqO5jpbRZP+jcP/CswLIa72A+Dm6wQPHGY?= =?us-ascii?Q?eLnXqKv76uQ7ceGrLs1Vn660GQtZGOIlm4LsNHtVzR9kl06ZnE3b/0Z70fcS?= =?us-ascii?Q?UUypVoZ1r+SkL7wr452YxJZSwNVA3OAH0LcZU3W7CUM04gR2+NHzwRVJSPra?= =?us-ascii?Q?E0eL9XHatqoB8P8gRDhcwUoV0Uz7R4eXcRjHtBagTEzBZLHETjv/7lR/pub1?= =?us-ascii?Q?zBd+fEvVY3q/TB3b+gX7g2wG3zuge2wT9XkIW1/7rjjCf8r0xIjaGg3z83Ip?= =?us-ascii?Q?d82Pn05seUjFxXU1xzL2RLdmfnrg95dXc0BCDCBPH/FxDh3KiYJ93fxNXUqa?= =?us-ascii?Q?17722WU4h1rtBTW2RaYEo13xQmxoFfR8+4aSAdlJuDscG4LlDFYD31o/w/3r?= =?us-ascii?Q?ZppXxCpQi+pk2oZaj+NiTsOJw/QPN7jGX8CrfUX+Q1zlg5RwMkDhcnDCyV93?= =?us-ascii?Q?59wbGO9CS/fXYdbzYrYS4XBw6ECoqMwXhQvsLCZmV/GpEDRDrG8fG1y4y2x8?= =?us-ascii?Q?eN/j0V24AeDvvKC1IYc4Nu3o71SNEmvP4ZyfhE+TCP5cSE2Xu3p523IdRKQ3?= =?us-ascii?Q?2GH4bxSu2sTkSto2Fo0w1+iqLXnrF3c135dUkQ0hTAbkU67pNNVgmuqeKKQT?= =?us-ascii?Q?6oWXhp3FE+XMN4RJgXfmQ38qPjp3o+a0X7FxAX755F1lOFRk20KOq5VNk8Y2?= =?us-ascii?Q?x4t/e1HO5JfbPGsojMhDgBuRkjwjkqI7TKDrNZl/22Zmh/ttqsT3HA=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(36860700013)(82310400026)(376014)(7416014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2025 11:30:34.0973 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bfaebbc0-d262-4c05-936f-08dddfdcfa49 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B374.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR12MB8899 Content-Type: text/plain; charset="utf-8" To allow reuse in other files in subsequent patches. Signed-off-by: Suravee Suthikulpanit Reviewed-by: Jason Gunthorpe --- drivers/iommu/amd/amd_iommu.h | 1 + drivers/iommu/amd/iommu.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/iommu/amd/amd_iommu.h b/drivers/iommu/amd/amd_iommu.h index 9b4b589a54b5..6ea549816a1f 100644 --- a/drivers/iommu/amd/amd_iommu.h +++ b/drivers/iommu/amd/amd_iommu.h @@ -26,6 +26,7 @@ void amd_iommu_set_rlookup_table(struct amd_iommu *iommu,= u16 devid); void iommu_feature_enable(struct amd_iommu *iommu, u8 bit); void *__init iommu_alloc_4k_pages(struct amd_iommu *iommu, gfp_t gfp, size_t size); +int amd_iommu_pdom_id_alloc(void); =20 #ifdef CONFIG_AMD_IOMMU_DEBUGFS void amd_iommu_debugfs_setup(void); diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index ebe1cb9b0807..a05b7f69ac74 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -1816,7 +1816,7 @@ int amd_iommu_complete_ppr(struct device *dev, u32 pa= sid, int status, int tag) * *************************************************************************= ***/ =20 -static int pdom_id_alloc(void) +int amd_iommu_pdom_id_alloc(void) { return ida_alloc_range(&pdom_ids, 1, MAX_DOMAIN_ID - 1, GFP_ATOMIC); } @@ -1904,7 +1904,7 @@ static int setup_gcr3_table(struct gcr3_tbl_info *gcr= 3_info, return -EBUSY; =20 /* Allocate per device domain ID */ - domid =3D pdom_id_alloc(); + domid =3D amd_iommu_pdom_id_alloc(); if (domid <=3D 0) return -ENOSPC; gcr3_info->domid =3D domid; @@ -2487,7 +2487,7 @@ struct protection_domain *protection_domain_alloc(voi= d) if (!domain) return NULL; =20 - domid =3D pdom_id_alloc(); + domid =3D amd_iommu_pdom_id_alloc(); if (domid <=3D 0) { kfree(domain); return NULL; @@ -2679,7 +2679,7 @@ void amd_iommu_init_identity_domain(void) domain->ops =3D &identity_domain_ops; domain->owner =3D &amd_iommu_ops; =20 - identity_domain.id =3D pdom_id_alloc(); + identity_domain.id =3D amd_iommu_pdom_id_alloc(); =20 protection_domain_init(&identity_domain); } --=20 2.34.1 From nobody Sat Oct 4 05:01:33 2025 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2049.outbound.protection.outlook.com [40.107.236.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48FF523AB88 for ; Wed, 20 Aug 2025 11:30:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689444; cv=fail; b=NLC8WlkCkKcefL73tvSDJK+3GsI/TE57aMfYg3SrsjFbBRh9Vu9iTB5bA/gNX0uB07GZ1e1pJystRmA7gU9aAXZ8qcNbAlzR2b2p09X9CQsjN5Yb3c8HV50PKZQCpT88FavMI+82cqMi0grgF7e0trnlqoWKXudVVabL/ufvSBA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689444; c=relaxed/simple; bh=bLW4T4Or+cN8kQFnj67sX1u8UA1H3RmUwZUul9W5sfo=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Ek79Q6Qb2DlqjabKUKtWBbUrpj9vFREG5dM+/swVEyG6z4gnuV98csA45nrcyNv/2Z/wUrw+VQ54uuAyvG8tnyedcaqPbzxvHrhl8YfZKiH8JbwchjTdyeI5wF+uLiICWLegI4Si+Y6V2kbAXZFYSTcLxFymkKSrhh+lN6oeLMQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=3aJr7W0K; arc=fail smtp.client-ip=40.107.236.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="3aJr7W0K" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ADNnVE7AgsmN3560WkwwOwWDbOX227cyUwmy6FQiGwJD/1sEfYIiw9JBXfziNLkvwhvXBcN2BjNkCaq5W+vazaFfkKiJa85IiQRlZyTYKJvqdLTcD5rFAHz6qibkmX7V5VNUH19KwIe3ZZWCiz6QK8zdsRyCaEvRlt5bcQU3KA5ynB7NAzwRISIYiSe9sIQTD0n3+HVcYaZb1YQEdK4kb8HQrUgx7Dwvp6Ol7k4yzGld23qmkupekCqA8nQ5oGtU9JA3WKl8hR70YgVi3xNX7VWURheSnvxb6GNiORKrczk5r/OSA8PzFc/2hQ5zYz8j02x/EpjC8mqdmFWlhZnsTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=TyTZ8caLnvYQ+1ih6KQGwrIc6kgz32BWjKgL+7oW0ZQ=; b=M4LIgkm/klNjMWcZ3lDpBkMkZMk6Aiwl3oOxrEh8CZUQZ4pgidZi4kTdcn75Ch6P1Kstp33ovXgm4fj+cA8Za65RgWRLCC+HymccU27Yj9omKAc5uSDLCxXtnXkzrt7Q4Ytd6iqQcjcQ+y9WgUId/y0ukp1w/cZO6MVn9LytenOlsH3U9A3YRmNTLS24zgo0c3bTidwY4zz0HKHRsVua4yyxpTSTX0zWNUBRzOzZjCQ7/IHJCAcWI+XZE7oxDU3oyZ9H+cvmyo+CP5fhkgPi8RErpqFqk8AyQ2oTZwKqVRdXja6OBI91Bqem/n64rATsqKwyH7KCc8akb/ah1wBJHQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=nvidia.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TyTZ8caLnvYQ+1ih6KQGwrIc6kgz32BWjKgL+7oW0ZQ=; b=3aJr7W0K8JjIRohkBzPAS+/kEuJcE6wXwckLCSWCrLnCROh7efJpPK7DCZAz58y4k2l5ISWhVvDn4ly1YFnFWlkMQ8bAUcPW5KWOg1HjsBPrgDLOmdYiQisyP3NSKwJN7cw1bST5OWGcdZcretMwNciBQ9G2cAI+zQ0ippBTaK0= Received: from BN9PR03CA0298.namprd03.prod.outlook.com (2603:10b6:408:f5::33) by DS0PR12MB9323.namprd12.prod.outlook.com (2603:10b6:8:1b3::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.24; Wed, 20 Aug 2025 11:30:39 +0000 Received: from BN3PEPF0000B36F.namprd21.prod.outlook.com (2603:10b6:408:f5:cafe::45) by BN9PR03CA0298.outlook.office365.com (2603:10b6:408:f5::33) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8989.21 via Frontend Transport; Wed, 20 Aug 2025 11:30:39 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN3PEPF0000B36F.mail.protection.outlook.com (10.167.243.166) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.9073.0 via Frontend Transport; Wed, 20 Aug 2025 11:30:39 +0000 Received: from purico-ed03host.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 20 Aug 2025 06:30:34 -0500 From: Suravee Suthikulpanit To: , CC: , , , , , , , , , , , , , , , , Suravee Suthikulpanit Subject: [PATCH 2/8] iommu/amd: Making device attach / detach helpers non-static Date: Wed, 20 Aug 2025 11:30:03 +0000 Message-ID: <20250820113009.5233-3-suravee.suthikulpanit@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> References: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B36F:EE_|DS0PR12MB9323:EE_ X-MS-Office365-Filtering-Correlation-Id: fa032317-223a-4ec8-6087-08dddfdcfd54 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|36860700013|376014|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?LfI1HFpJM438VqQMpbiTi7OQJgekV5vjZNQSyp/dTH58AYsq3m8Bz/sictG2?= =?us-ascii?Q?yq5eitf/tsQYQ7C6exJL162BYH+MpoAWqblR7lZk8X/0qAwcHhZ+g1WnVZH6?= =?us-ascii?Q?wluODfcX6582FyTjUW+4XAKm98lkY9whvtEAk+QNxjQgzdkmQYLVrXd5gggi?= =?us-ascii?Q?Fb4zYz1KfJFtqd45VtfhyQOcQeW8tXQNWmrjeRGafq3ePU5sWp12ivh51QHP?= =?us-ascii?Q?ooFrm5o1FJ5b8OeJ5mcU8QVUUj3tnYlqFSfq7CV5RVwpqtU3wgHDvJ3U044O?= =?us-ascii?Q?Jcd3zVWhw34IbyIZAWYOVEwpTAZ2lujlbkHlBuoWsqHiTDIl2ERy17KWMfc/?= =?us-ascii?Q?7YWuT1N0eAvRXVbqgJXyxC524CbNwGPQWfPhvMtfFfIERvmBEJ9WwnHyMG1p?= =?us-ascii?Q?3VLBl6MqtvaqNpkb5tVMMyyA7KkixbQZozuyqSH508k1myx3paJfp6ts1JwK?= =?us-ascii?Q?uIMMrM47glpRR+y7Z7LqzDAg3RqrsBc0nl6+T0T0n/UFbaHGElOQ81n84pVL?= =?us-ascii?Q?0pGM5l+EhrGltSbA6ATEpIdSHZ3u3PPaf+h3sfEuUDHEsea21DAy2qYP4YbZ?= =?us-ascii?Q?apkmRA4dIvP6/7tCWepzlb+2AtBYBdGtrPW1YaaWe2vnvQLDKwptw+K5ej+P?= =?us-ascii?Q?g41/pLP8pkQN8J3rgSpvjQ6sBn5GdcHAxgkqSf5rBRVrcYyM3oWQ7IqlaH3l?= =?us-ascii?Q?gCSSiswmSkscUYvmW8J9yc2ZPt/1oDPW6UCQHqGvqLhHdarlYP+9mtGLKcwZ?= =?us-ascii?Q?ETON3QWWpAJQ/0WNDCbSnEov1xzFMLW8n4xvAAP5h44g3ljkLXiXR5xEGfGc?= =?us-ascii?Q?0QFmiDK4oA0mZWSSeu81ZFkCViINUIXOwvQm+EhJjQz3eYGysM21dsavc+Kj?= =?us-ascii?Q?mGU4AstASZ3Jeg2C0M/tjP46eLIBY18jNAky2s6cSRl1EAAzbUHVZC7JxQ7P?= =?us-ascii?Q?mOVriR+/HIcj5Gehaf3UNTUigEO/1EZ6uq3LXx8a4tNth0OsmQjAhxYUBZxN?= =?us-ascii?Q?rmQPdpSVVUEywa9djg6S5T9R8dI8Iv+nETQnGb5IoVhFbbTSOrSXEgqj59RB?= =?us-ascii?Q?qNn1W3r57O+wtkJ4gt9RDU21QizRs/ZAMBUKcTEQ6F7wN/dXcahGFYHiQ7nm?= =?us-ascii?Q?gpNdfF6ZibRrcQo4sXPI8wmGS98o5+732EmHllKgPlwb5deNuXMLTs2hj7C0?= =?us-ascii?Q?eXSEojXMK7MVExKtWAzA3VeLYkW+c9lvD3YJxoUDzeT/c0f39Yk50/yUsGqp?= =?us-ascii?Q?/czjwTfk5Gzs2UV415E4fn4u6LlxOjHdenbIkU4z6wtmPyYTeqTN5EoJVfsk?= =?us-ascii?Q?yec4vyFt1Xp3CsxrUjijovSWrpXrqtFfNn22wwPbhPGhpScv9xbluZCp2JUM?= =?us-ascii?Q?/S3MshbUNDeE3rcKmy6+tE0qnxibtCzJa3SGUY42A/3XV3exo6lFVXHUnsC9?= =?us-ascii?Q?VLiud6kreSE1N5KBMDRykIgnFa/fv04d2urKDmxxWKK6FzkW3x36V0e3z7m5?= =?us-ascii?Q?v4UoA7lTaA5h081oojXrHhhBWhVi3FL06Vdw?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(36860700013)(376014)(7416014);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2025 11:30:39.2016 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fa032317-223a-4ec8-6087-08dddfdcfd54 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B36F.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB9323 Content-Type: text/plain; charset="utf-8" To allow reuse in subsequent patches. Signed-off-by: Suravee Suthikulpanit Reviewed-by: Jason Gunthorpe --- drivers/iommu/amd/amd_iommu.h | 2 ++ drivers/iommu/amd/iommu.c | 11 +++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/iommu/amd/amd_iommu.h b/drivers/iommu/amd/amd_iommu.h index 6ea549816a1f..5085aa353522 100644 --- a/drivers/iommu/amd/amd_iommu.h +++ b/drivers/iommu/amd/amd_iommu.h @@ -88,6 +88,8 @@ int amd_iommu_complete_ppr(struct device *dev, u32 pasid,= int status, int tag); * This function flushes all internal caches of * the IOMMU used by this driver. */ +int __amd_iommu_attach_device(struct device *dev, struct protection_domain= *domain); +void amd_iommu_detach_device(struct device *dev); void amd_iommu_flush_all_caches(struct amd_iommu *iommu); void amd_iommu_update_and_flush_device_table(struct protection_domain *dom= ain); void amd_iommu_domain_flush_pages(struct protection_domain *domain, diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index a05b7f69ac74..207fef84a4c5 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -2262,8 +2262,7 @@ static void pdom_detach_iommu(struct amd_iommu *iommu, * If a device is not yet associated with a domain, this function makes the * device visible in the domain */ -static int attach_device(struct device *dev, - struct protection_domain *domain) +int __amd_iommu_attach_device(struct device *dev, struct protection_domain= *domain) { struct iommu_dev_data *dev_data =3D dev_iommu_priv_get(dev); struct amd_iommu *iommu =3D get_amd_iommu_from_dev_data(dev_data); @@ -2325,7 +2324,7 @@ static int attach_device(struct device *dev, /* * Removes a device from a protection domain (with devtable_lock held) */ -static void detach_device(struct device *dev) +void amd_iommu_detach_device(struct device *dev) { struct iommu_dev_data *dev_data =3D dev_iommu_priv_get(dev); struct amd_iommu *iommu =3D get_amd_iommu_from_dev_data(dev_data); @@ -2639,7 +2638,7 @@ static int blocked_domain_attach_device(struct iommu_= domain *domain, struct iommu_dev_data *dev_data =3D dev_iommu_priv_get(dev); =20 if (dev_data->domain) - detach_device(dev); + amd_iommu_detach_device(dev); =20 /* Clear DTE and flush the entry */ mutex_lock(&dev_data->mutex); @@ -2717,9 +2716,9 @@ static int amd_iommu_attach_device(struct iommu_domai= n *dom, return -EINVAL; =20 if (dev_data->domain) - detach_device(dev); + amd_iommu_detach_device(dev); =20 - ret =3D attach_device(dev, domain); + ret =3D __amd_iommu_attach_device(dev, domain); =20 #ifdef CONFIG_IRQ_REMAP if (AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir)) { --=20 2.34.1 From nobody Sat Oct 4 05:01:33 2025 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2048.outbound.protection.outlook.com [40.107.237.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FAB42E5B2E for ; Wed, 20 Aug 2025 11:30:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.237.48 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689449; cv=fail; b=nYR0GACLgAq9e3b5JIbbQXd39KlOQNIWp6X8ai16Gu0JmkYVJOxuntdzqwGTXZfqowNR7vBxqJ+9vCMFaKqNKkTy3B3Xm4VRuCerAiM+XY+K3uCg5s/xjapeoN0beXCjrfxJJ0e5idKVPe4IZ4sPaxzqeUfrDZi7mzln4f103/g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689449; c=relaxed/simple; bh=byqtmsmD3XsyUzfT4TtDRZ9zZ/H2eVW4RoBlciqjPOQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tbl+3i5hCoc3EXZqPG13rBIXwMr9gMorP4m3xc6oYsSIuBi4w+ScjJgf7gMYXzNIKJ5JTVjlAojOGYxwjEmdqxBbI81q1vdIA8JErde3RRMdJZYU5nON2h1+GqhMLednkFBN4I3ockTWgcQavLQPG4yiboAfoJ6CkFVw7sKP0qw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=cYrpKbHh; arc=fail smtp.client-ip=40.107.237.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="cYrpKbHh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IS5J7YC68biYkUYOdTX6SC0HUZDryhMf1375fFhgKv6DvvvoFQqK/BwZ7BAgbkhaTAboPYfv4R6koVtaQ9/EkQuYUvIGCYqA34giuOBw4+PT8iobFw7mOsuu8Clbrn2FaqX5TfzjcS7BPpql5r2zt+88rTzxd4qpXcn8X/dEXht647FueMQNz73n0bnee1MpZF9sTdo3llx6h98f9Er04Z7bUAvbHZy4/eTt06TC0/NXGOLg3LW/d+So/SCCBu1uUu/EchF/iCkXMaiP8ict0t4Uf8JLUDtdKMQrgI6JFdS/p4ZVt63QuTbmdkD85XOtIhghJ6wyII1f0S9XoV42FA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=3+m3phihemuvFtcvv3H9+TtHD4DsYKt5jjhIdSYVAWY=; b=btIpKfQmH4r6l16M3oB+X1yLlfH8EU39nmMrQr31g/A0MPMFGbpe4okRrqAYzdziwhfeXu8lHgKyd/5AQREDNGWrVetWjpQEmryBW3EXdt2FSRt6WiU13KMMcK42O4rkNc/ndJeFP3Q2hekLlmqZy5Axe/FkiuMU0atRWdPKY57w1v0NE2GHhC4NS3LwEroCv7U45OV9g4pFzDT6piuQtGIFW9HxGBnWy5IQ/BGMTkNNhR057Q+j2TB0xL/WEbcVqN5ByP/Hiq1OXzgBgl1AQ/B4HO/YLMWpSPV68ccLCc12SwP3IvluT57i+KddeoLX3wHFngJKnlbnSMaDig2C5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=nvidia.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=3+m3phihemuvFtcvv3H9+TtHD4DsYKt5jjhIdSYVAWY=; b=cYrpKbHhRVelrRSxhhAhIR3m+Zq9lhprscOnsHm8MMjukBFnZBSuvoT04fOek3PlljKBcVIZHv+PR1mXjSX/7FNloEf5x2vv3xrCktxraWiA+UpR7oWl60DC4YHHl2+GBqjbOMMJagdn3B6Q0hO++cHCjtoNdCnHpManVRz/Bek= Received: from BN9PR03CA0692.namprd03.prod.outlook.com (2603:10b6:408:ef::7) by DS7PR12MB6117.namprd12.prod.outlook.com (2603:10b6:8:9b::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.24; Wed, 20 Aug 2025 11:30:44 +0000 Received: from BN3PEPF0000B372.namprd21.prod.outlook.com (2603:10b6:408:ef:cafe::3b) by BN9PR03CA0692.outlook.office365.com (2603:10b6:408:ef::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9052.14 via Frontend Transport; Wed, 20 Aug 2025 11:30:44 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN3PEPF0000B372.mail.protection.outlook.com (10.167.243.169) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.9073.0 via Frontend Transport; Wed, 20 Aug 2025 11:30:44 +0000 Received: from purico-ed03host.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 20 Aug 2025 06:30:39 -0500 From: Suravee Suthikulpanit To: , CC: , , , , , , , , , , , , , , , , Suravee Suthikulpanit Subject: [PATCH 3/8] iommu/amd: Making amd_iommu_pdev_enable_cap_ats non-static Date: Wed, 20 Aug 2025 11:30:04 +0000 Message-ID: <20250820113009.5233-4-suravee.suthikulpanit@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> References: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B372:EE_|DS7PR12MB6117:EE_ X-MS-Office365-Filtering-Correlation-Id: e582840f-9774-42de-e2ca-08dddfdd0075 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|7416014|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?n2cxh4N55WeEhB3+6pMIGVn1NmVKJOsyq+WRP1rKzcdBL4ZI8BUPEhgkJ78k?= =?us-ascii?Q?46/elbisUW0U/aRoeVFD4ufDcjbEb1drBlxPumyABJJU9FwXx2CcYIQjHn74?= =?us-ascii?Q?A+wdgmgdy896/8k9Y/TWOY77bjQ1uBn0Jth+26Qf/ptwUFhJCrYMV9NX4wi0?= =?us-ascii?Q?QgElV2kExOT+NJYl6Xs68PiWEF5+mdLioUnxAZEIBLm90rlnXNRqapjaW6dB?= =?us-ascii?Q?AVfCasA2dAMtXn6H/yMf0otgSStJf1FlWF5x11p684yUdihjfc3CK3rogNwU?= =?us-ascii?Q?NCJSaBNZzxkVoQS2seFR9phw+nlFhQxzCslM64dalGK/EC/+dUCH+WhmvthW?= =?us-ascii?Q?snDb/I8CqswbtSUP1/grub0ksY7W+G3iikIHz0cQ/QY0dFEnlqKX8n64hcY8?= =?us-ascii?Q?KODJRUHn8/kwONwBcdNFHNCPwsmj0AoxLcTqAiBHfMDHPBM+w1kqn6uFbPT2?= =?us-ascii?Q?BE/2i6WYCPVbno4BKJdX9H2R8gIiQO6SpZ4J0Fn3jgWC9Nu5J2w1WE4D8dz2?= =?us-ascii?Q?JAG56UXwoCQ+MVE2SZBvyg6PbEvGzn2pFeL7ksvmXkOg0w4QCcB9ncWpW0QP?= =?us-ascii?Q?gK6tYmzHizquEen3wLuKuj7IcWXx/pWnZNg+0mox1d+kniNI6KoPRjEYC0Vi?= =?us-ascii?Q?2qBgQ9swJeHCJB2b3pzuir0lHojxBt1xYAiOT88742PLZw1MwfELzLvpuChy?= =?us-ascii?Q?nP7SCQJdVwV1KlHr44yGSSC/dDoeNPF8zbYYP6hj9NOs2z7qW+ynLDTJLkJN?= =?us-ascii?Q?jYsPIWon0kQ9Rve/xoQnSiz/yT+fE+SPQ+m5ACpTosrrpmCihqfddjJEN/r3?= =?us-ascii?Q?1Jp7EqcF/Xc4UNgbsqnRaLv4bCHshMXIEKd0DU+Dv8V9kG5vUDCgDrfnPcjm?= =?us-ascii?Q?LTwupS6NNEUJy0sXlSf2EELF5yIOcImnxg7SuNB4LzGOSPYZ6OMFAXekg/vQ?= =?us-ascii?Q?r8cu4VRjMQEt3a9gVlmBJ4v/3/4fwYsTYPE6dWlqPzcppVLPZfnyv+W3QuGi?= =?us-ascii?Q?GKDINQTxTA6LDlvLCmpi0WPfTqV8K3IU2oLPH+IWiYQ3XzKbu8uWcq9zHtFE?= =?us-ascii?Q?TnsHo8BGreb3p7v8TpPY7bC/A8DoWNI4WdGwEMbshrQ1Ugk+nGT/SQEquRPD?= =?us-ascii?Q?a3eo9gpjrlEXNTphXBjc1z0FhEpFVP/JEX8L89kqfpauK4Y9NeLTTQJWoPcg?= =?us-ascii?Q?3sZuZZFPjtKqmukClonhywSxjDuwrEQTWMjFvgCaR+3EyYPmaAaf+A1l1czy?= =?us-ascii?Q?GdV8c+cjdYHIsc2+76Tepz93P1q8K2yk5ua2+teyLIuLjua6ZyKJYqohWWIs?= =?us-ascii?Q?VYlhOqr4b+TxSpi3lHJHk7vdGb2dEodVISclcOPt/Zr+pkmKsc+04tc42nQI?= =?us-ascii?Q?LTrN7BYUVLuhE21fDkAEF+9M4j7M/ZYOdefRWxst8grosG7kZHS9J2ElAxhK?= =?us-ascii?Q?A3o7JIS9V1D+AQLI549PvtSw+F7P+pXMM+nzq6GHNHvmHgqDbPkt5Ex6kq7n?= =?us-ascii?Q?R9w1/lcO89CwKyEoSm0tAkRtbB6grtBX9f5F?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(7416014)(376014)(1800799024)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2025 11:30:44.4477 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e582840f-9774-42de-e2ca-08dddfdd0075 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B372.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB6117 Content-Type: text/plain; charset="utf-8" To allow reuse in subsequent patches. Signed-off-by: Suravee Suthikulpanit --- drivers/iommu/amd/amd_iommu.h | 1 + drivers/iommu/amd/iommu.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/amd/amd_iommu.h b/drivers/iommu/amd/amd_iommu.h index 5085aa353522..3ff380afb9f4 100644 --- a/drivers/iommu/amd/amd_iommu.h +++ b/drivers/iommu/amd/amd_iommu.h @@ -27,6 +27,7 @@ void iommu_feature_enable(struct amd_iommu *iommu, u8 bit= ); void *__init iommu_alloc_4k_pages(struct amd_iommu *iommu, gfp_t gfp, size_t size); int amd_iommu_pdom_id_alloc(void); +int amd_iommu_pdev_enable_cap_ats(struct pci_dev *pdev); =20 #ifdef CONFIG_AMD_IOMMU_DEBUGFS void amd_iommu_debugfs_setup(void); diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 207fef84a4c5..44f9a8990d87 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -531,7 +531,7 @@ static u32 pdev_get_caps(struct pci_dev *pdev) return flags; } =20 -static inline int pdev_enable_cap_ats(struct pci_dev *pdev) +int amd_iommu_pdev_enable_cap_ats(struct pci_dev *pdev) { struct iommu_dev_data *dev_data =3D dev_iommu_priv_get(&pdev->dev); int ret =3D -EINVAL; @@ -629,7 +629,7 @@ static inline void pdev_disable_cap_pasid(struct pci_de= v *pdev) static void pdev_enable_caps(struct pci_dev *pdev) { pdev_enable_cap_pasid(pdev); - pdev_enable_cap_ats(pdev); + amd_iommu_pdev_enable_cap_ats(pdev); pdev_enable_cap_pri(pdev); } =20 @@ -2303,7 +2303,7 @@ int __amd_iommu_attach_device(struct device *dev, str= uct protection_domain *doma if (amd_iommu_iopf_add_device(iommu, dev_data)) pdev_disable_cap_pri(pdev); } else if (pdev) { - pdev_enable_cap_ats(pdev); + amd_iommu_pdev_enable_cap_ats(pdev); } =20 /* Update data structures */ --=20 2.34.1 From nobody Sat Oct 4 05:01:33 2025 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2062.outbound.protection.outlook.com [40.107.243.62]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B21C2EE610 for ; Wed, 20 Aug 2025 11:30:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.62 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689453; cv=fail; b=gH2q3aBTykQpnX9nV+9sM6cfWRj9jpx+wpckg+35LnewxV9X5kHF3tFVSl7hoElwed/sZ6tpGmhwx8x8Kh60yf5DUXf3BWIz8w4so6OreIUMOPHEjoVEO0WEKpasyq2gal/drpOYn9mp8FabxL7D0eLXzEGPEY7Lt+I3UKbqV1U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689453; c=relaxed/simple; bh=q5wh5FxCPW584OnPAT2eXy/sddCspMtnJNP5r8m4+WI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BgV+UBYn4tF6r4SVyF0dWFWaLXOFI3kQHb8m8gYkY5bGh62WUWaBGzoO3ltmbsWdS4eEbWdUhNPHK+8E2/ipIDdSzA1mAiYZRuIc7p1BrrkLAfLLEv2cbZkTCgPhw4jsPJk/JIyxjFC6+BzRrjaj6kNG0t+AQQUDjAKRhmbgVCs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=5Ho1syvB; arc=fail smtp.client-ip=40.107.243.62 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="5Ho1syvB" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Ti5UJfZjg5Acej5BWZaZkCZ/o+2oe4UDWS0Pur7TF2sxMs3sQ3Re6j5oszmFKJeJpH/nLuNRgmOrKQFCA000B1XT5t2pff5GZUUz/7TTXSpZOrgpDW4yOO7IkpjRFm1ZDBhQgenvLw9UE74Hk+h7qPXv+cRT+v5g+ZEi6IqcSKCn8kpdpJ9ON+0FVYRrByhlUf/NzJcLt/WNI7ZUISVJBAAzWMmeckDkn5h2DW6hpIc3yy/L43MfcR9pPXcgztFQpLxCCHuLIfaVJkVhXyRAwacXqfWcFHon0tZZisRTtJZyoCm38yNrus1AiyGfKzJ4vQoHscqSwCwkjjVPFGASMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=Fl+6VUXRW1R/Gv+EvG5wjZqPJUGk6rckhIKNDltwjx8=; b=mVratSQk5zySC7PBhfwJBZMEcjz1YjsVOU9NTfLgc8aSzpis526dart96q1CgK1IYF/sDpX47herQLTbgJYz4J/yTKVsoxtPt2vtP1usSeFBcZF9aXfQ/+2DMCOnwRABubNWiOQLvEWA7+FrPkKUIoF1MKGMu6vOB82GQR/Fb18f7sdPuTY6i8h/d0OPykDy5wF2zKtdsZ9C+Df4IhC43MsE8rrfZ1Cfsn+gW6C/LQFWSzWCVTK8NkrvDEX2C3WCYYZmE1eOSdut+4PFrvj30+3xxGJqI+d8KDSxkhizNalAWvelhe1BjBq65WY1zxklUtaJMan3ofVEd7SstuyO4w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=nvidia.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Fl+6VUXRW1R/Gv+EvG5wjZqPJUGk6rckhIKNDltwjx8=; b=5Ho1syvBKY1XY6evKzMfn1FP6/hmIiqxriDbIPfJsr1O7qZrwH1NFlmOaJu+NjvNa7EqHYVk5vYyvQk26ZMacvGXSL1Zm6CWVyjWTlDzWVXnXnELQPvgv32ck/Zmc9DLbAk1Ner/fWpiqW/rniocdmCt+diqUMWJ9LR8PygmXmE= Received: from BLAPR03CA0080.namprd03.prod.outlook.com (2603:10b6:208:329::25) by MN2PR12MB4223.namprd12.prod.outlook.com (2603:10b6:208:1d3::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.24; Wed, 20 Aug 2025 11:30:49 +0000 Received: from BN3PEPF0000B370.namprd21.prod.outlook.com (2603:10b6:208:329:cafe::32) by BLAPR03CA0080.outlook.office365.com (2603:10b6:208:329::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9052.14 via Frontend Transport; Wed, 20 Aug 2025 11:30:49 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN3PEPF0000B370.mail.protection.outlook.com (10.167.243.167) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.9073.0 via Frontend Transport; Wed, 20 Aug 2025 11:30:49 +0000 Received: from purico-ed03host.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 20 Aug 2025 06:30:44 -0500 From: Suravee Suthikulpanit To: , CC: , , , , , , , , , , , , , , , , Suravee Suthikulpanit Subject: [PATCH 4/8] iommu/amd: Introduce struct gcr3_tbl_info.giov Date: Wed, 20 Aug 2025 11:30:05 +0000 Message-ID: <20250820113009.5233-5-suravee.suthikulpanit@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> References: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B370:EE_|MN2PR12MB4223:EE_ X-MS-Office365-Filtering-Correlation-Id: 6f6c6f34-61e9-4db1-935b-08dddfdd0363 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|7416014|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?v7f/TFhUbZSbP+Z0rkyQZjVOOUSdCV3VZNAUVXedj3/cJENR0aZHAg86N1ko?= =?us-ascii?Q?mJfpVV5ojICIx70cOvnDABNhBiI0lZxmZZ37LX3gm5L9RxR0AuIjuLkytlpY?= =?us-ascii?Q?HjvhvOhmO6SxW7rJBqKqGxBqgp8ZvqTaNhccM13NU8LKAr7WTD90Zb45Xf/B?= =?us-ascii?Q?slSo8A/4oc95ckp/+inlZg8fLLskNe+vZ90yf7muD6k+sksCD1wuCzCvI1Vm?= =?us-ascii?Q?5WjP8BqNtl/UCctwwItrvg2j7Yfcx/x9ddS0mE6ZN0pnJzitb0LR6Auxjhk5?= =?us-ascii?Q?CMQtrTzb68RDWaYNoem9sXnC18i+kDCyUEcpoIZYgWsonGeRXDPXVxDBTmbZ?= =?us-ascii?Q?4zFJmw6sCqfmyLIcsTy6y05to3HWaFT2rx00ysHt9y0kKJYunt7Admo1OoG3?= =?us-ascii?Q?unk8/31P9BXf4rjoLOcN1OD216SEJhXOscdCBpJByyhPcpOBckBW50yYNoa3?= =?us-ascii?Q?/z8qONvYORcxny9EEbgD613XtMOjiURHlsXIogPuVbH4SaknNv/rNFCmblf6?= =?us-ascii?Q?gLSO+d8Xw+jMf3fsn5yCgR2zO9o4v2uTiNrR3M8xFeQLaYTGEi3r34Y7Bac/?= =?us-ascii?Q?ABl00oAfhaW80JCVxsQdY+yI7PMBcUUimrG3/mMVqzIzy/GtQC2E74R9cCea?= =?us-ascii?Q?f4fp+ykfJq0Z0jfBc1GARQwnzEr9sh15yiJMN1GGVjjWA2X5/YKbZ0HYte8E?= =?us-ascii?Q?tHuM0KcS7RS+ypdSMtCyuOiQUzFRLSOz3jj8wlmtxF53Fa/8j4INAZLoGrWG?= =?us-ascii?Q?oFjr6jaDM2CnWQ3qzWEez9dwI0kwnzQisHvbAkoChGAh6cOoXpxy94bvdVHc?= =?us-ascii?Q?yD/BWGBjWq47n/xuGYCIbTrXgxYjOiYcUOndRX1RyY3Tzpw7FgYAtXAVNIif?= =?us-ascii?Q?iylckh/duvWEg/l63+mufcjCakRDfAG7FBIIgsMQPF0toxUiMs3j6o0UdepU?= =?us-ascii?Q?/n2vZtUE42zvXupLlf4NCYla2j2bW5uzqQpMx5teahP8GEblGtj/dh1/bOmR?= =?us-ascii?Q?Llku2O8FoegIiv6BS4fWHk2m6J560v34aBYkMJB11gSrpN66p2e+sPKpBF81?= =?us-ascii?Q?eHk0nxZttPbGiXYhq22RNGtMVL2YjMigUqMXOIdNJH2vNpdwv8Fud4EolXFQ?= =?us-ascii?Q?mzkedqWkAUPgsINhn6wJB0lkntoVccCUkXUxPbA1TfD6SLQYfBcVkH6R9G/a?= =?us-ascii?Q?+NmrHGtBxy2T1r6apOz7JVWLYNYTFSVEo+h/BQTdtZap4gXL3vZCKTndM+qk?= =?us-ascii?Q?ezjD6Xc5ifd0yjONLROQwRkGOa0ajsJqyKJF/uHLSKFtEkP/Df7v9XnP8W2y?= =?us-ascii?Q?40hf7VlIRuBI2MJu7KABRkaJAkNn88VgzXHyEB1Bv+N4UnEqRrt1TB4crU5B?= =?us-ascii?Q?SIVsmyAFpC/JSBRtQIeBsRMEBxBzIusNxZlHGjOG7+VoR0AEF1qc5p75PJQR?= =?us-ascii?Q?rAphTGV/AIy9YCgv76f7/kfKRrKgeQ5zsWB1JihlKd4F6pyE4zA3AY3krnSo?= =?us-ascii?Q?g8PbMrTq2fmge0o=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(7416014)(376014)(1800799024)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2025 11:30:49.3677 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6f6c6f34-61e9-4db1-935b-08dddfdd0363 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B370.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4223 Content-Type: text/plain; charset="utf-8" To track DTE[GIOV] programming during IOMMU domain attach, also add logic to determine if the GIOV is required, and set the variable accordinglly. Then check the variable before programming the DTE. Signed-off-by: Suravee Suthikulpanit --- drivers/iommu/amd/amd_iommu_types.h | 1 + drivers/iommu/amd/iommu.c | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/iommu/amd/amd_iommu_types.h b/drivers/iommu/amd/amd_io= mmu_types.h index efdd0cbda1df..44c44943802c 100644 --- a/drivers/iommu/amd/amd_iommu_types.h +++ b/drivers/iommu/amd/amd_iommu_types.h @@ -555,6 +555,7 @@ struct gcr3_tbl_info { int glx; /* Number of levels for GCR3 table */ u32 pasid_cnt; /* Track attached PASIDs */ u16 domid; /* Per device domain ID */ + bool giov; /* Track DTE[GIOV] */ }; =20 struct amd_io_pgtable { diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 44f9a8990d87..f463774e4b71 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -1872,6 +1872,7 @@ static void free_gcr3_table(struct gcr3_tbl_info *gcr= 3_info) =20 iommu_free_pages(gcr3_info->gcr3_tbl); gcr3_info->gcr3_tbl =3D NULL; + gcr3_info->giov =3D false; } =20 /* @@ -2027,8 +2028,8 @@ static void set_dte_gcr3_table(struct amd_iommu *iomm= u, if (!gcr3_info->gcr3_tbl) return; =20 - pr_debug("%s: devid=3D%#x, glx=3D%#x, gcr3_tbl=3D%#llx\n", - __func__, dev_data->devid, gcr3_info->glx, + pr_debug("%s: devid=3D%#x, glx=3D%#x, giov=3D%#x, gcr3_tbl=3D%#llx\n", + __func__, dev_data->devid, gcr3_info->glx, gcr3_info->giov, (unsigned long long)gcr3_info->gcr3_tbl); =20 gcr3 =3D iommu_virt_to_phys(gcr3_info->gcr3_tbl); @@ -2036,7 +2037,7 @@ static void set_dte_gcr3_table(struct amd_iommu *iomm= u, target->data[0] |=3D DTE_FLAG_GV | FIELD_PREP(DTE_GLX, gcr3_info->glx) | FIELD_PREP(DTE_GCR3_14_12, gcr3 >> 12); - if (pdom_is_v2_pgtbl_mode(dev_data->domain)) + if (gcr3_info->giov) target->data[0] |=3D DTE_FLAG_GIOV; =20 target->data[1] |=3D FIELD_PREP(DTE_GCR3_30_15, gcr3 >> 15) | @@ -2178,8 +2179,17 @@ static int init_gcr3_table(struct iommu_dev_data *de= v_data, return ret; =20 ret =3D update_gcr3(dev_data, 0, iommu_virt_to_phys(pdom->iop.pgd), true); - if (ret) + if (!ret) { + /* + * GIOV is required for PD_MODE_V2 because we need + * to support the case where the end-point device + * does not have PASID in the TLP prefix when setting + * up to use the v2 table. + */ + dev_data->gcr3_info.giov =3D true; + } else { free_gcr3_table(&dev_data->gcr3_info); + } =20 return ret; } --=20 2.34.1 From nobody Sat Oct 4 05:01:33 2025 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2068.outbound.protection.outlook.com [40.107.212.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E8402DFA2E for ; Wed, 20 Aug 2025 11:30:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.212.68 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689460; cv=fail; b=lyfftvoiJNd1WeRhk6vzA4EDtE4GdkwURC3dhdDFO6t3AzOxzhp2tljSuc4QpK7cKO9nAqqYVea4kTw9Uwx1hd6XGUl42IfchZwBZY3zlH/L5S0sYwbFPES6H6GBN4giUn8jFMSm5H1SBIOEw/AtEoCU63zUQyMBuX7WBK+FQkc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689460; c=relaxed/simple; bh=GuUS+V6/Kq+K6Q9lYzGYTp9rbAFZFi1y+Fmn06kyv2k=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=THJrQuBlIaMn2I5rNOAxnsZPeklWr9i237bkdxUCNjbf1fbhC2z9a5vM8NNWcwhgzTta3hzLgdelU/0d3UHy4yAH8JBYhavuumc4/enDALOzl9EO/1S8vjp7bn+ImSYXHYdgqT0hOZ2SQbajZXJXnHXUvpNJFXaUl6fd2f/ZV8A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=lXSCVdPn; arc=fail smtp.client-ip=40.107.212.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="lXSCVdPn" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qsmqPswGU592fhWeJcJiR618l91T9GmjNtMAIPbN0Lgv+utDAqUSrk/z6JrT4YP1rkFmqpzZ+LWFgqyTvcYu31s6SeC1FMs1JGrOd0YMIXUT0UUpqx1EM1OmDdYbujbP7dSHMIAYdM0h7EshlYu+y8s+y+Jv//GkTykH2VSB+ZYN1Pd0kl27K3+JeeiD/kx1EmkXohGbTGo0MYuGHsTE6XCoFOIQFeHe3VHYWNFMN+0hudJ59dkUrpnHXwCrww9fqznq7zZ8F30i5Lkdb7aoWUxji5CnQXEjuA+svopygNPx9V3LOgNIwEqlmd1izqwWj+mfLJ3LFc80CYASEVeDtg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=/o2GSEeWwviTNPDK8lA51t4p3LtCF2qDdXcD0CKUhdc=; b=qFDzXZW3EFkjnljNM5KkMGTlvZ2+WMpa427mkqRZb9RHACqRcI3QvtlZ0C0mDZib8rhiLoUxy2hVQJ6tYzgYAuTNy6qqOJtilA8R6m1zmvUkDUEFosPUF/4fxQQQ01791lIVzNvEIKl4QSmE4T4/hHoUqxeyDj9R5OWVWf5DQD68Bhzg24du0XeWocjmRpYTq7FEnyLJ2eoMr/1FA1x/iYdhWqf/bMO5lFMuUJIo+bSOJY9xR+7yYulGraembTa/GlMNNMMOcY/k3vS52xpfJFLroNCZBhBBZ3bkYv9vKUypVlICIIQ2lLlRjNZSsMuPQFQsBUa2XyrWP0GfouT/LA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=nvidia.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/o2GSEeWwviTNPDK8lA51t4p3LtCF2qDdXcD0CKUhdc=; b=lXSCVdPn01OU1Dl5U471kx+s4OhjkQeYyrMIJdePBM2kQ2yQNMVwrkcfaeWDNlCgSpKKYSozo1c8zECjwFnfLFOERqtR50sxiSDYw1HOCsFqb80O5PvaxnzJSd38Axc5LQQDzUQPkQexI8fOoAmvAhbTd5TMKwxzVMhlsreNPB0= Received: from BLAP220CA0005.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:32c::10) by IA1PR12MB7496.namprd12.prod.outlook.com (2603:10b6:208:418::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.24; Wed, 20 Aug 2025 11:30:55 +0000 Received: from BN3PEPF0000B374.namprd21.prod.outlook.com (2603:10b6:208:32c:cafe::76) by BLAP220CA0005.outlook.office365.com (2603:10b6:208:32c::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9052.14 via Frontend Transport; Wed, 20 Aug 2025 11:30:54 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN3PEPF0000B374.mail.protection.outlook.com (10.167.243.171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.9073.0 via Frontend Transport; Wed, 20 Aug 2025 11:30:54 +0000 Received: from purico-ed03host.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 20 Aug 2025 06:30:49 -0500 From: Suravee Suthikulpanit To: , CC: , , , , , , , , , , , , , , , , Suravee Suthikulpanit Subject: [PATCH 5/8] iommufd: Introduce data struct for AMD nested domain allocation Date: Wed, 20 Aug 2025 11:30:06 +0000 Message-ID: <20250820113009.5233-6-suravee.suthikulpanit@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> References: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B374:EE_|IA1PR12MB7496:EE_ X-MS-Office365-Filtering-Correlation-Id: bfd9a445-1cac-406e-8a1b-08dddfdd0677 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700013|376014|7416014|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?hxkzaDvY2fp1o7CgbhHuUQRGgc016oGI5ScO7etKePpWXNukiENbf+yLK+d+?= =?us-ascii?Q?3tWFRD209gTb8dYXOtZEm9l+5g6aQWAdW1XsKwV9Wim61W1evp+wVNdcDlPr?= =?us-ascii?Q?kHwx0Dy78fA4givoT18G1jv8OWZhRnGwKUB0jQFH+BiaDJbj3z/TDbAif8sz?= =?us-ascii?Q?2gv4cAbWtTswy81+ICEaTkcdKcLCtV8AZL/Jh1S8rihGbETImWFW0GsvLo/X?= =?us-ascii?Q?cIz2Ccdr4xo8N4uOg/DTeX2f1jGIVF3crWzj8+lPudiAfpWwfhvviM1Wv2tH?= =?us-ascii?Q?xkMghKzVBbS/yoSFxRXFT0Z8wpRKEUYWkshzgxZ6j6V2bCj2435Zf6JG8OY5?= =?us-ascii?Q?KynuXBhoA5hzawijF+bAlkUsuhtlrthiKGjq71sHTsMbZoJdSFcof/8vIY/c?= =?us-ascii?Q?zskxc8VkOWlZVAe81jA6D77iE6KfO/BNENrsF7JPMFkzQiB+lKSU27VW20tF?= =?us-ascii?Q?KJhj8RGZEgFbhqzqqA+iZsDlz5dcv1vikCOVlz7e5netBPzZeDpw3MProZ2n?= =?us-ascii?Q?q4hiJqY4xy9naWgLSz/XoX70zdxIXf9M0loqJFakzH0wqtL6jf+sT8c8n9vi?= =?us-ascii?Q?6IKtJpA5OprBXXym4mOtYVj0IANzyEbyAHkXu/BsZUoyXQsX4Ywf5F/B8mU2?= =?us-ascii?Q?MPMznxzeQErm5LcznBlreSfZs+/9hmquXWUriLzlk6ymyX3eude3jSj2+u6q?= =?us-ascii?Q?eo3Vx2w3QsKkaN5GgCb9fqTNBbpnfAM2op05r/YY6yC8YzFh9cvSpEfe7Zwo?= =?us-ascii?Q?KZE4XvFLdygy8b8UoKjww0ZeJAhxi+ySDyaeY2CTsvMvhYgM8FPCNePQvIo3?= =?us-ascii?Q?uWGfxj0045udlUQoaJ7sV+b1qVXS2E4p01j+Zs+SY/4mRFJHoQTfg4lOxa+0?= =?us-ascii?Q?2u0K++e05y02nyglho0JX29p8NMiDrNnQ3TocfWoJXwhophLwi7814gZFWvb?= =?us-ascii?Q?sdalK7jiwEiLAb5R3V9Or3caSEql1z5fCEwszqWxec0wAFJCbggY/vT+qAHo?= =?us-ascii?Q?re+yIPvo80REt6JHY/W2n2JEDHfvY4QY505B5wQOQR0CZy4Pl9UxYqgUo3k4?= =?us-ascii?Q?b74f53OwlZUhgBB1BBa1CnhwuLMvQGZZYEQM4lcoJ7/6PZ0toDlTdjO6rf1P?= =?us-ascii?Q?j+w4fTm8+wmrFve7GPfIta61GuDYSHaZarcSTQstmipAGhlwpNHVu585FSQd?= =?us-ascii?Q?bV9AU1gekRqH7ZFNTp+lEVdoPNbsT1wSNPtX4YC2w2st/hTlai2cPFkD2igV?= =?us-ascii?Q?EwhvsZjia5aWHHsP4xOSdXm0BLoy9lZvRhWJ8LMq/orPtN95F0y6nRJkw4fg?= =?us-ascii?Q?62scRk10LN1EgWaAmKc+plu4hSsfbKLciXeJVIFFo9esXdAAC0vG9qElernc?= =?us-ascii?Q?LuVlNviirLHqLsUk8gQQkoUjy6Y7cZNxv7I8QqzIiiPXXmCylRWid2D2Dqmj?= =?us-ascii?Q?LsWJkQELljLlkFwYVcykhxLdyvmf7t2hoDSSFM3CmjturTnnF95hrA=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(36860700013)(376014)(7416014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2025 11:30:54.5313 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bfd9a445-1cac-406e-8a1b-08dddfdd0677 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B374.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB7496 Content-Type: text/plain; charset="utf-8" Introduce IOMMU_HWPT_DATA_AMD_V2 data type for AMD IOMMU v2 page table, which is used for stage-1 in nested translation. The data structure contains information necessary for setting up the AMD HW-vIOMMU support. Signed-off-by: Suravee Suthikulpanit Reviewed-by: Jason Gunthorpe --- include/uapi/linux/iommufd.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/include/uapi/linux/iommufd.h b/include/uapi/linux/iommufd.h index 0f7212f9e0ce..a12353488c83 100644 --- a/include/uapi/linux/iommufd.h +++ b/include/uapi/linux/iommufd.h @@ -455,16 +455,27 @@ struct iommu_hwpt_arm_smmuv3 { __aligned_le64 ste[2]; }; =20 +/** + * struct iommu_hwpt_amd_v2 - AMD IOMMU specific user-managed + * v2 I/O page table data + * @dte: Guest Device Table Entry (DTE) + */ +struct iommu_hwpt_amd_v2 { + __aligned_u64 dte[4]; +}; + /** * enum iommu_hwpt_data_type - IOMMU HWPT Data Type * @IOMMU_HWPT_DATA_NONE: no data * @IOMMU_HWPT_DATA_VTD_S1: Intel VT-d stage-1 page table * @IOMMU_HWPT_DATA_ARM_SMMUV3: ARM SMMUv3 Context Descriptor Table + * @IOMMU_HWPT_DATA_AMD_V2: AMD IOMMUv2 page table */ enum iommu_hwpt_data_type { IOMMU_HWPT_DATA_NONE =3D 0, IOMMU_HWPT_DATA_VTD_S1 =3D 1, IOMMU_HWPT_DATA_ARM_SMMUV3 =3D 2, + IOMMU_HWPT_DATA_AMD_V2 =3D 3, }; =20 /** --=20 2.34.1 From nobody Sat Oct 4 05:01:33 2025 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2062.outbound.protection.outlook.com [40.107.236.62]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AC01D2DFA2E for ; Wed, 20 Aug 2025 11:31:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.62 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689466; cv=fail; b=m6OC+FfEksqu03UpLVpJTbfk62YLrx3FXd2AsFfO8cZQKZ+OoqiUD7wLz6XRU9KQq2ngBrR6HUPp9cp1WkQQ4JRYq3Ie59UIlhgrIoQvrNUwc2wntMEdTYDAHO5LfgQ2r+hgTrtJY/voIjzH8TiDZ2UAQcjmkn6wHU85ryFyijs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689466; c=relaxed/simple; bh=dAGzko4PV8GyFjKqLie4tGEAP4AlZRx5/ooOEYyOMA4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JI3aaQgB5LlicXMUtEUlXj3NDsq/CzlGEM0DByWjx56Jn82G5hdsq6a2KLw8CWWFnXoCqd4aND+vO1mJx7bpiaISmRqHc2q22xEEn7dqbT69kj/2D9ifOnyZCQwmelb9KqDCgSK4LxrBXMGnvrDYgOmLVNFN/8QZOBPlaLABT5I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=oMmY2twM; arc=fail smtp.client-ip=40.107.236.62 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="oMmY2twM" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VHB58vNseWul5fd/BGfWlvr8pc7fAYSmMkySvCdYSi+a+/cWc4oa0tZSFiwHHyoPlgDWlxDPVmIyx8sung8+MwJHCB23ZyMhHwoPWTTFXESvskXj3WVdAxKO5yU0mU2vnc5XEP6SqxpL0+vepJJgsscx1lz/XHM9FiTKWh0iQ+fJIGAPNOviQipqLXme1KenL51yT85dl+bnRPEyhpKxhI+ekl6rBlu+UCwf/sNktmHljuxxmmGv1BSopVJGx9/LBErokO7ginFCU/N20Xd788W5yszsjldEJzMsdVeouRdXucLHnSpF0Z9X5M5/lrN1z8UTTjPfoiMEHFuzZ/Yc3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=K2eY91uStOMbjxVpX+Ooj1pyTqHzjlfcd+b9VlOanmU=; b=QqtpLSQp0CNzz7pOxPRIkYbf5i0UuSFz1QL8ycXHEZqru8h2c1dZxuexTwEoW8DeS3aG+fag3xo9fPMczSNwNkd25FJoZi/ncuiQCgjXb/St5pNXTxlC1VAJoQVyd6eniUFwjRkx1sbnVmHhrYvF7TDorhDS6Sk8EeOB/dd0eVS+4sHudORUGTKp3xkj5XsxQKyOi9prc+DxprrQSP7FnFaiWGCAVnis0W0NKaMLYYu/2uI13AJpMPC9I8F5k6CknzAAhS2QHYYmaTbE6kP6FBxPlWWRkrmynj/otSFBXn/VggP9i07F7ktnkmx64fUsySnjoVKZ5c4l+ITWNRuECw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=nvidia.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K2eY91uStOMbjxVpX+Ooj1pyTqHzjlfcd+b9VlOanmU=; b=oMmY2twMjYIWxQDEOfVChoe3c4or1dN0MZVa3y/TfLj+tMvhFaAHAXmk/nFKPjOPOIIs5KVWrlzxnRM7k2+jPg+7ZTWcE+bDlNrEDO/cCGORFaAiaYEVfH/vbFDolusNoK+lDZVLVKyBCY2HcX0bV+dAzPVm+7fK8FbKHmREiX4= Received: from BLAP220CA0030.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:32c::35) by MN0PR12MB5908.namprd12.prod.outlook.com (2603:10b6:208:37c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9052.14; Wed, 20 Aug 2025 11:30:59 +0000 Received: from BN3PEPF0000B373.namprd21.prod.outlook.com (2603:10b6:208:32c:cafe::5e) by BLAP220CA0030.outlook.office365.com (2603:10b6:208:32c::35) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9052.14 via Frontend Transport; Wed, 20 Aug 2025 11:30:59 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN3PEPF0000B373.mail.protection.outlook.com (10.167.243.170) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.9073.0 via Frontend Transport; Wed, 20 Aug 2025 11:30:59 +0000 Received: from purico-ed03host.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 20 Aug 2025 06:30:54 -0500 From: Suravee Suthikulpanit To: , CC: , , , , , , , , , , , , , , , , Suravee Suthikulpanit Subject: [PATCH 6/8] iommu/amd: Add support for nest parent domain allocation Date: Wed, 20 Aug 2025 11:30:07 +0000 Message-ID: <20250820113009.5233-7-suravee.suthikulpanit@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> References: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B373:EE_|MN0PR12MB5908:EE_ X-MS-Office365-Filtering-Correlation-Id: cac1c507-68e6-471c-2ec2-08dddfdd097a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|376014|7416014|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?jBauyU1E1yhlh/YHXPIa7NS6+3DLr7mKSz3pSpgtgDgIK6qmM88XBfKlvrZ5?= =?us-ascii?Q?8cwxqDQ3oT2o3P/a2HcndrPBgXIP2np0aYRciHbCY3dX3teA2qflH5eUv1U7?= =?us-ascii?Q?IaEDcSzoPx1GHv1qBY8TmxO6ftSQhLhZt7IPXgNHVZaxnsGtTmfBo3bZ2eW7?= =?us-ascii?Q?wiTkRrayP+9MTOOe9exTLrT4zAaXrj1Q0wNBQ84H7Ar3PC9yByLCkTPMckVQ?= =?us-ascii?Q?2H5HltN9nCpGEpL/r+wI0FJzskAn+UUi9o4KrKe7s1oqu4IOROJuJHdY2VhI?= =?us-ascii?Q?GV5Rs6VzfmjflyqiFXd01YpdPsenU9RFCFamd/4dQB2G9L1/cTGKlJ+mh4hz?= =?us-ascii?Q?XqDBoUrMLGiXZ4i9eoGQyHM+6vcvyvYQncwFNojEsh4mWv9MIoZFJnwiRG1P?= =?us-ascii?Q?TPpKGmRt+4ZS0893/zSrzF300MffwtdQk7/7izRydElLTurE9InKUrlEuxSq?= =?us-ascii?Q?KjQm+rkZtEL1Zkj6WKJmre7hTPleuHXYiwMh5y5Y1lZBGoPuunXo7re9AMI0?= =?us-ascii?Q?YmEfcpuXkD+S3tuhiVZHMSxg7YqHKpkSA13GHhL7yJTfT22/aZ3VNJT5mWV6?= =?us-ascii?Q?QzNdiRoohygdxhafoDyoroTWNdqUS/fylLdcwxntJzuqrUSNXIYyrvSls61G?= =?us-ascii?Q?HENgSViKFJi9WVPtAU8T28MvOyUukmuRwYnY0tSmdaYbmhVUlWVZulPnjJ7v?= =?us-ascii?Q?veR+7H8Epbtz5EQbGbv7br/xpbg3GLgVBM60vzPxCDdwXIjR5dRdaFvpbLEk?= =?us-ascii?Q?zH4bgFn6jQszmMMq1QI0MpyH7KlkrVHmY66dFpsW6uB1knksmTpq9Y3wyhuA?= =?us-ascii?Q?zTdoC1y8lcMcDL0ICI2dxiBvm4XciDKAYY4zHyBeAGtPmbvm4icm3IIU7xeo?= =?us-ascii?Q?Ub7Zk6EukYG181kVm4LDf1sMVF5BC1R9Gkk/DMGnBV06TZ/Cobg2CaHTe13f?= =?us-ascii?Q?XJCOTQa0JOQam3/NsSRTRRmY9Gt3JsYYTBRDC/nNuLJKct5hRidIhHTEsVEP?= =?us-ascii?Q?QqJTgMFt2uCWn0D7nFF3BqaLXmbK4AFiTGTEI/jzGBb9f69XRAGnTwy5TJf/?= =?us-ascii?Q?BTAU+44WwCXL6VQcTkDKpAkTuc+qHkEInv4YBCgfED3npLDljatAaaGHOf51?= =?us-ascii?Q?dOcMMYcgT4Zdf4gkBQ1bYN6jz52g/7rx0D3awFhm5prVgizhlstIkz/RDzOH?= =?us-ascii?Q?V4eoasdBQgLi/yxLwx671f0sXWEta/mm5Ue7wQAfhxqkwfwccS8CYBtRwCqm?= =?us-ascii?Q?zkLTqoiTAlEaA+K/3fiZNVhgawTK4M7hZfzwtk+BX2hsh7cvaYXDSZwU5uwg?= =?us-ascii?Q?xtsEUHILFuNfHI71RzqCv9I0BXfBaFCnGQF8TLT4Frd37VjvfDjND4g3FFMT?= =?us-ascii?Q?Mq6aOIb2MbvJQeZvvHcmSvgHOXUH/L1d6RApu7uoJ53krRVXkGcgCLyoc3YN?= =?us-ascii?Q?CU2pyzYOY9q2iUkgLz6Q7fJV0Yk3+i24ZBGSEGdamGQF7U3YHz5Uu+rvH/hi?= =?us-ascii?Q?TurjDwpj1lZcEZo=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(82310400026)(376014)(7416014)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2025 11:30:59.5822 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cac1c507-68e6-471c-2ec2-08dddfdd097a X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B373.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB5908 Content-Type: text/plain; charset="utf-8" To support nested translation, the nest parent domain is allocated with IOMMU_HWPT_ALLOC_NEST_PARENT flag, and stores information of the v1 page table for stage 2 (i.e. GPA->SPA). Also, only support nest parent domain on AMD system, which can support the Guest CR3 Table (GCR3TRPMode) feature. This feature is required in order to program DTE[GCR3 Table Root Pointer] with the GPA. Signed-off-by: Suravee Suthikulpanit --- drivers/iommu/amd/amd_iommu_types.h | 1 + drivers/iommu/amd/iommu.c | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/amd/amd_iommu_types.h b/drivers/iommu/amd/amd_io= mmu_types.h index 44c44943802c..5343b99913e4 100644 --- a/drivers/iommu/amd/amd_iommu_types.h +++ b/drivers/iommu/amd/amd_iommu_types.h @@ -110,6 +110,7 @@ =20 =20 /* Extended Feature 2 Bits */ +#define FEATURE_GCR3TRPMODE BIT_ULL(3) #define FEATURE_SNPAVICSUP GENMASK_ULL(7, 5) #define FEATURE_SNPAVICSUP_GAM(x) \ (FIELD_GET(FEATURE_SNPAVICSUP, x) =3D=3D 0x1) diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index f463774e4b71..46682c8ba28d 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -2599,20 +2599,39 @@ do_iommu_domain_alloc(struct device *dev, u32 flags, return &domain->domain; } =20 +static inline bool is_nest_parent_supported(u32 flags) +{ + /* Only allow nest parent when these features are supported */ + if ((flags & IOMMU_HWPT_ALLOC_NEST_PARENT) && + (!check_feature(FEATURE_GT) || + !check_feature(FEATURE_GIOSUP) || + !check_feature2(FEATURE_GCR3TRPMODE))) + return false; + + return true; +} + static struct iommu_domain * amd_iommu_domain_alloc_paging_flags(struct device *dev, u32 flags, const struct iommu_user_data *user_data) =20 { + struct iommu_dev_data *dev_data =3D dev_iommu_priv_get(dev); struct amd_iommu *iommu =3D get_amd_iommu_from_dev(dev); const u32 supported_flags =3D IOMMU_HWPT_ALLOC_DIRTY_TRACKING | - IOMMU_HWPT_ALLOC_PASID; + IOMMU_HWPT_ALLOC_PASID | + IOMMU_HWPT_ALLOC_NEST_PARENT; =20 - if ((flags & ~supported_flags) || user_data) + /* Check supported flags */ + if ((flags & ~supported_flags) || user_data || !is_nest_parent_supported(= flags)) return ERR_PTR(-EOPNOTSUPP); =20 + pr_debug("%s: IOMMU devid=3D%#x, flags=3D%#x\n", __func__, dev_data->devi= d, flags); + switch (flags & supported_flags) { case IOMMU_HWPT_ALLOC_DIRTY_TRACKING: + case IOMMU_HWPT_ALLOC_DIRTY_TRACKING | IOMMU_HWPT_ALLOC_NEST_PARENT: + case IOMMU_HWPT_ALLOC_NEST_PARENT: /* Allocate domain with v1 page table for dirty tracking */ if (!amd_iommu_hd_support(iommu)) break; @@ -2626,6 +2645,7 @@ amd_iommu_domain_alloc_paging_flags(struct device *de= v, u32 flags, /* If nothing specific is required use the kernel commandline default */ return do_iommu_domain_alloc(dev, 0, amd_iommu_pgtable); default: + pr_err("%s: Unhandled flag : 0x%x\n", __func__, flags); break; } return ERR_PTR(-EOPNOTSUPP); --=20 2.34.1 From nobody Sat Oct 4 05:01:33 2025 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2061.outbound.protection.outlook.com [40.107.237.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F6A42DFA2E for ; Wed, 20 Aug 2025 11:31:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.237.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689474; cv=fail; b=efiNW8MnklEQZw5hJDvaujMcD3zjVU+2CkFixQmFZmsXXVcvX2CrGHyC/OZuzfB+dUpFyf4kFP0TFd1BKOiTsxdoGCJXallie726r4delMCJlstMqZWxLptAi9X+cQVXHMIWzUB/VuWOdyqLX7itNyuyLUe32pkWJw3ipJYLu5Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689474; c=relaxed/simple; bh=QUIwbAJO6Yw+Rk02l6krgNJqXOjeSzZoV/Hkwhgh+xQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QaX8yXaBhgefISzD4x9ppo/DLVNK0fwIIfDzCTl3UiuzF4DLFoYk7CW9Ht5VGNsnj42ixzxuSRpgKrhcogRpnUoyV643LYG53GbhzI2FE+s0i40t7q5gbF7YtnoZe4FR+6HCQKDsd6YTwKCoL3TiOHT+D3b32B2HfzCsnD7n4M4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=clUEc8au; arc=fail smtp.client-ip=40.107.237.61 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="clUEc8au" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZWsand1YObnv5HTdijwYLWARa7iTVDimEfkWB+/P6U42DxA6IBafGTcJARc3Dwn+nXH4gptRr1L9gRf3cjs7jNeNXBNGCJ3iitERIAoaHAcoFva7G6SIRp/Ht5pG33xLAu/T9SNeu43jLjJinUJwTUp2tCdj5mLU5vZbBgx4KC+O74rx9Ycuvznw8KXD8ZAcvIffAZPQCxxvzXUcTDSXcx7kFEiwrw+g/mTnWJNTqDTaru/eug04YQaGDLfX58yYRSEK/NIhG6tyZcgeu149rHpPECkEnjXzI/4Ucxz8EMbcwXrCMBn3rDrNWbPtpTAawyvjzktaVbk6JckNI+myUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=GBYyCFxBbDrAzCAWq11jWWx1cGwAyOzYRlODBenSZeQ=; b=LU0Bss8V6MTNjj89/ZFox1jvKQrrq8Vb1QNDRkinfUO47PXOV3XyW1cxk1AcTQtOi83HsDE7tTkQ1KNJ/rjrq/k5R6TV/cqiil4ODW55d0bXLyoa/kQ9ynC8NyNsvBNHtZbg80kYtWHb1nLiHofAyEtd9VS6hgAc/aOufAMd8UGd5ari6oHrXrEuwmn4st9XBihPYTbbd0Ljyk2fRkvH+j3MNEXohZuodEke0R/IIXKQ56ywUGpVbzn4UZyc3lJj54emi6aM5MCJeEES5RJ6hzE89BoyW2Q7XJU4PJsjPyUkAZaPBzWq5HCUfHA2xYDoc9vAeZo61eT6CGpR32jMmw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=nvidia.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GBYyCFxBbDrAzCAWq11jWWx1cGwAyOzYRlODBenSZeQ=; b=clUEc8au5rV0feI6nz0N8WKQUEpomgdjZIJwqSH8urM+/+rNiuostkAu9Uy+2SBDw0eZGfmqsK2anN1HfVesFhyPeqLTAtZNMEjTtp163FhDnxMA2w/yBUqCvRZlmHc4gy+JRp5HIrCoQUVfKsTy8Nh8nnfPNsNv6zVUs7rZQi8= Received: from BN9PR03CA0278.namprd03.prod.outlook.com (2603:10b6:408:f5::13) by DM6PR12MB4105.namprd12.prod.outlook.com (2603:10b6:5:217::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.24; Wed, 20 Aug 2025 11:31:08 +0000 Received: from BN3PEPF0000B36F.namprd21.prod.outlook.com (2603:10b6:408:f5:cafe::24) by BN9PR03CA0278.outlook.office365.com (2603:10b6:408:f5::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9052.14 via Frontend Transport; Wed, 20 Aug 2025 11:31:07 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN3PEPF0000B36F.mail.protection.outlook.com (10.167.243.166) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.9073.0 via Frontend Transport; Wed, 20 Aug 2025 11:31:07 +0000 Received: from purico-ed03host.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 20 Aug 2025 06:30:59 -0500 From: Suravee Suthikulpanit To: , CC: , , , , , , , , , , , , , , , , Suravee Suthikulpanit Subject: [PATCH 7/8] iommu/amd: Add support for nested domain allocation Date: Wed, 20 Aug 2025 11:30:08 +0000 Message-ID: <20250820113009.5233-8-suravee.suthikulpanit@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> References: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B36F:EE_|DM6PR12MB4105:EE_ X-MS-Office365-Filtering-Correlation-Id: 6679dde6-2f80-4d4f-fa2e-08dddfdd0e62 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|82310400026|36860700013|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?6NJhpOUSm44omjC/33DZwMmC8W680UFdNDjJCxA+3eLhosYnISt2mazy3fsU?= =?us-ascii?Q?moXrUMqGvQtTsCDdnx/F7EkevAaDYcwPsiNQ8IU8+uoF6ihppi0fmjhqcKBo?= =?us-ascii?Q?LvXpURbTyZ5eMbZ83OUBWdAsjSvxr4bVq5uiVHQBEW2mGIKVgBNOuWY+vF4W?= =?us-ascii?Q?p+/BV2EJu4eUmsD/R/Wrn5UZ6be8W0tjS0pgDmLJTrRuoV6yPYKUN5xFj5wI?= =?us-ascii?Q?fOXnT0TR3U2FFj7iqtNnQvXl+24dSCFkjuOvgt3CsykYQI8La+b6IMfLWIkb?= =?us-ascii?Q?x+vJFfSs40HBmGplS1TsMqRu3MRm8eGL6UXpdoWnw3MLQBdbUpiFdD+9q5Be?= =?us-ascii?Q?9sxeHFVWZkSyOI6BbTLR/YgLmmhB5BsKd9SJYeKoaflfxaRWjRgG5sY0W7lM?= =?us-ascii?Q?eVOOU2zzlx88E06csXsf2sqv8YVWlqj5SoxR0zO3gc/BQiCEj6oibWWJjvL+?= =?us-ascii?Q?DYuYrjbqgvwehxc4ve4H/J+PadXjqYZllmRxXWAb78re3iCAcm2Xs50QlUtd?= =?us-ascii?Q?ccBJ0mdPgbrV7PSOtIyH9IY0oiWfWyEPIZ6UQ52iXtnPsujxW6KyFMrV+sRA?= =?us-ascii?Q?CfQHGMGzo82VWqnG+w6r/XQbDrYr2ktPjPEyrQYlhh8iTEpKaCqABuqLiUEG?= =?us-ascii?Q?3uClEo6nH1SrvqvgDk436GoTp7D5kSic+MQzEkFDV1/OtmFli4Yz3rmiu2MT?= =?us-ascii?Q?KzdQsxx8QWXO0Bn2CMeG7iFLMBSXvHb22IUVKvzrPwlfJaKju622pKuIeI6s?= =?us-ascii?Q?632LGL8JVG9KDaIiwGqIeETcESbVaujyq1ErvWeWx0a6eXfpRCGvD8W4WduY?= =?us-ascii?Q?/h3mIXjXH3zGK6/jFv6vNz6xP0URzQIDPv86jRdEsNqFzsKIWij9LiWHdV1/?= =?us-ascii?Q?0OUJc4haOwcvDBrKSYS0v18MAAX7vQ50YFWzAhO6F7mgm/Jf+XoimGE9htya?= =?us-ascii?Q?I/x3l8M7ZB40FzUBE9yNUyI33B9wnutAZeAlRt/VELHBsDaCjyzHE01Seq4T?= =?us-ascii?Q?nNThZi0PZwrKu3e0HN+8UYyF5YP/XdV+7UdrCHT5iJ/FYkArib7vCd4RjPdj?= =?us-ascii?Q?v2m58b8UalQcVyG39vKR2OpmQ5eX9zIEa8uVQWmH3VBJ2O/7Say1UevnU/8i?= =?us-ascii?Q?bqSR+HAIPXfIGUn0dDK06gBVKMzM/kvDk7YY/MPvH0Ul6cASmYjz550ffBNA?= =?us-ascii?Q?BEm4RBrtMZR5JFwb0RSEf3D/S8muj0uft9gfiC0I+mRhtRwo3HS2+8EgeOsS?= =?us-ascii?Q?/rc+mE2zi21wJY5pwEXozRn6UN1CACj7y5n5C8IRw+3S1/6qZIsi17rV+Gp1?= =?us-ascii?Q?qzg7J3ORNMDqL3+h0f1nh/BMgKAoDe/S0eo4MT4NENzeQqkhfPtSLKxwvy6j?= =?us-ascii?Q?FePjxpoj7Jl5dF8ZacYScxmOtwtE14aWlMfnFwqcWgtGWMODoJhcw8zX7hZ9?= =?us-ascii?Q?g9mqRT02lvzqZHP9WxOoZn7nWN31IOARCxzLRE8KaRMaGJpha7pOMroBDEU4?= =?us-ascii?Q?7FxFOGuMcwm3FRjp2/R0JSjNiqyKIrYXonrW?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(7416014)(82310400026)(36860700013)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2025 11:31:07.8198 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6679dde6-2f80-4d4f-fa2e-08dddfdd0e62 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B36F.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4105 Content-Type: text/plain; charset="utf-8" The child domain is allocated with IOMMU_DOMAIN_NESTED type to store stage-1 translation (i.e. GVA->GPA). This includes the GCR3 root pointer table along with guest (v2) page tables. The struct iommu_hwpt_amd_v2 contains this information, and is passed from user-space as a parameter of the struct iommu_ops.domain_alloc_nested(). The parent domain is tracked using the struct protection_domain.parent. Signed-off-by: Suravee Suthikulpanit --- drivers/iommu/amd/Makefile | 2 +- drivers/iommu/amd/amd_iommu.h | 5 ++ drivers/iommu/amd/amd_iommu_types.h | 5 ++ drivers/iommu/amd/iommu.c | 22 ++++---- drivers/iommu/amd/nested.c | 79 +++++++++++++++++++++++++++++ 5 files changed, 103 insertions(+), 10 deletions(-) create mode 100644 drivers/iommu/amd/nested.c diff --git a/drivers/iommu/amd/Makefile b/drivers/iommu/amd/Makefile index 59c04a67f398..9ccf9d61810c 100644 --- a/drivers/iommu/amd/Makefile +++ b/drivers/iommu/amd/Makefile @@ -1,3 +1,3 @@ # SPDX-License-Identifier: GPL-2.0-only -obj-y +=3D iommu.o init.o quirks.o io_pgtable.o io_pgtable_v2.o ppr.o pasi= d.o +obj-y +=3D iommu.o init.o quirks.o io_pgtable.o io_pgtable_v2.o ppr.o pasi= d.o nested.o obj-$(CONFIG_AMD_IOMMU_DEBUGFS) +=3D debugfs.o diff --git a/drivers/iommu/amd/amd_iommu.h b/drivers/iommu/amd/amd_iommu.h index 3ff380afb9f4..8e86d5b1d915 100644 --- a/drivers/iommu/amd/amd_iommu.h +++ b/drivers/iommu/amd/amd_iommu.h @@ -8,6 +8,7 @@ #define AMD_IOMMU_H =20 #include +#include =20 #include "amd_iommu_types.h" =20 @@ -190,4 +191,8 @@ void amd_iommu_domain_set_pgtable(struct protection_dom= ain *domain, struct dev_table_entry *get_dev_table(struct amd_iommu *iommu); struct iommu_dev_data *search_dev_data(struct amd_iommu *iommu, u16 devid); =20 +/* NESTED */ +struct iommu_domain * +amd_iommu_domain_alloc_nested(struct device *dev, struct iommu_domain *par= ent, + u32 flags, const struct iommu_user_data *user_data); #endif /* AMD_IOMMU_H */ diff --git a/drivers/iommu/amd/amd_iommu_types.h b/drivers/iommu/amd/amd_io= mmu_types.h index 5343b99913e4..94f51a09b364 100644 --- a/drivers/iommu/amd/amd_iommu_types.h +++ b/drivers/iommu/amd/amd_iommu_types.h @@ -20,6 +20,8 @@ #include #include =20 +#include + /* * Maximum number of IOMMUs supported */ @@ -605,6 +607,9 @@ struct protection_domain { =20 struct mmu_notifier mn; /* mmu notifier for the SVA domain */ struct list_head dev_data_list; /* List of pdom_dev_data */ + + struct protection_domain *parent; /* Nested parent domain */ + struct iommu_hwpt_amd_v2 guest_hwpt; }; =20 /* diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 46682c8ba28d..ea790a8997ee 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -2616,6 +2616,7 @@ amd_iommu_domain_alloc_paging_flags(struct device *de= v, u32 flags, const struct iommu_user_data *user_data) =20 { + struct iommu_domain *dom =3D ERR_PTR(-EOPNOTSUPP); struct iommu_dev_data *dev_data =3D dev_iommu_priv_get(dev); struct amd_iommu *iommu =3D get_amd_iommu_from_dev(dev); const u32 supported_flags =3D IOMMU_HWPT_ALLOC_DIRTY_TRACKING | @@ -2626,29 +2627,31 @@ amd_iommu_domain_alloc_paging_flags(struct device *= dev, u32 flags, if ((flags & ~supported_flags) || user_data || !is_nest_parent_supported(= flags)) return ERR_PTR(-EOPNOTSUPP); =20 - pr_debug("%s: IOMMU devid=3D%#x, flags=3D%#x\n", __func__, dev_data->devi= d, flags); + pr_debug("%s: IOMMU devid=3D%#x, flags=3D%#x, supported_flags=3D%#x\n", _= _func__, dev_data->devid, flags, supported_flags); =20 switch (flags & supported_flags) { case IOMMU_HWPT_ALLOC_DIRTY_TRACKING: case IOMMU_HWPT_ALLOC_DIRTY_TRACKING | IOMMU_HWPT_ALLOC_NEST_PARENT: case IOMMU_HWPT_ALLOC_NEST_PARENT: /* Allocate domain with v1 page table for dirty tracking */ - if (!amd_iommu_hd_support(iommu)) - break; - return do_iommu_domain_alloc(dev, flags, PD_MODE_V1); + if (amd_iommu_hd_support(iommu)) + dom =3D do_iommu_domain_alloc(dev, flags, PD_MODE_V1); + break; case IOMMU_HWPT_ALLOC_PASID: /* Allocate domain with v2 page table if IOMMU supports PASID. */ - if (!amd_iommu_pasid_supported()) - break; - return do_iommu_domain_alloc(dev, flags, PD_MODE_V2); + if (amd_iommu_pasid_supported()) + dom =3D do_iommu_domain_alloc(dev, flags, PD_MODE_V2); + break; case 0: /* If nothing specific is required use the kernel commandline default */ - return do_iommu_domain_alloc(dev, 0, amd_iommu_pgtable); + dom =3D do_iommu_domain_alloc(dev, 0, amd_iommu_pgtable); + break; default: pr_err("%s: Unhandled flag : 0x%x\n", __func__, flags); break; } - return ERR_PTR(-EOPNOTSUPP); + + return dom; } =20 void amd_iommu_domain_free(struct iommu_domain *dom) @@ -3113,6 +3116,7 @@ const struct iommu_ops amd_iommu_ops =3D { .release_domain =3D &release_domain, .identity_domain =3D &identity_domain.domain, .domain_alloc_paging_flags =3D amd_iommu_domain_alloc_paging_flags, + .domain_alloc_nested =3D amd_iommu_domain_alloc_nested, .domain_alloc_sva =3D amd_iommu_domain_alloc_sva, .probe_device =3D amd_iommu_probe_device, .release_device =3D amd_iommu_release_device, diff --git a/drivers/iommu/amd/nested.c b/drivers/iommu/amd/nested.c new file mode 100644 index 000000000000..09f2a455af33 --- /dev/null +++ b/drivers/iommu/amd/nested.c @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2023 Advanced Micro Devices, Inc. + */ + +#define pr_fmt(fmt) "AMD-Vi: " fmt +#define dev_fmt(fmt) pr_fmt(fmt) + +#include +#include + +#include "amd_iommu.h" +#include "amd_iommu_types.h" + +const struct iommu_domain_ops nested_domain_ops =3D { + .free =3D amd_iommu_domain_free, +}; + +static int udata_to_iommu_hwpt_amd_v2(const struct iommu_user_data *user_d= ata, + struct iommu_hwpt_amd_v2 *hwpt) +{ + if (!user_data) + return -EINVAL; + + if (user_data->type !=3D IOMMU_HWPT_DATA_AMD_V2) + return -EOPNOTSUPP; + + return iommu_copy_struct_from_user(hwpt, user_data, + IOMMU_HWPT_DATA_AMD_V2, + dte); +} + +struct iommu_domain * +amd_iommu_domain_alloc_nested(struct device *dev, struct iommu_domain *par= ent, + u32 flags, const struct iommu_user_data *user_data) +{ + int ret; + struct iommu_hwpt_amd_v2 hwpt; + struct protection_domain *pdom; + + if (parent->ops !=3D amd_iommu_ops.default_domain_ops) + return ERR_PTR(-EINVAL); + + ret =3D udata_to_iommu_hwpt_amd_v2(user_data, &hwpt); + if (ret) + return ERR_PTR(ret); + + pdom =3D kzalloc(sizeof(*pdom), GFP_KERNEL); + if (IS_ERR(pdom)) + return ERR_PTR(-ENOMEM); + + pdom->id =3D amd_iommu_pdom_id_alloc(); + if (!pdom->id) + goto out_err; + + pr_debug("%s: Allocating nested domain with parent domid=3D%#x\n", + __func__, to_pdomain(parent)->id); + + spin_lock_init(&pdom->lock); + INIT_LIST_HEAD(&pdom->dev_list); + INIT_LIST_HEAD(&pdom->dev_data_list); + xa_init(&pdom->iommu_array); + + pdom->pd_mode =3D PD_MODE_V2; + pdom->iop.pgtbl.cfg.amd.nid =3D NUMA_NO_NODE; + pdom->parent =3D to_pdomain(parent); + pdom->domain.ops =3D &nested_domain_ops; + pdom->domain.type =3D IOMMU_DOMAIN_NESTED; + pdom->domain.geometry.aperture_start =3D 0; + pdom->domain.geometry.aperture_end =3D ((1ULL << PM_LEVEL_SHIFT(amd_iommu= _gpt_level)) - 1); + pdom->domain.geometry.force_aperture =3D true; + pdom->domain.pgsize_bitmap =3D pdom->iop.pgtbl.cfg.pgsize_bitmap; + memcpy(&pdom->guest_hwpt, &hwpt, sizeof(struct iommu_hwpt_amd_v2)); + + return &pdom->domain; +out_err: + kfree(pdom); + return ERR_PTR(-EINVAL); +} --=20 2.34.1 From nobody Sat Oct 4 05:01:33 2025 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2080.outbound.protection.outlook.com [40.107.101.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9E464233D7B for ; Wed, 20 Aug 2025 11:31:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.101.80 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689474; cv=fail; b=tDd5qyonpkZ5mqlz9Dy8gb7UxLRu+fKUMpI0/VDExhkVoIdznrgblvHPy2necGqcopWFl4ARaZr69Wbg2YmfDDJQitWSAz8dWTpMZSoC1nXyH1n1vayhmbErP0hCmm0oO0MY5P9PevrbtTA3kxu7fqR5uzSgHW5d+Dfwd7g0I84= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755689474; c=relaxed/simple; bh=uVe6bOT+mQxRhTx8YD7C3b3RqFi5gimon2r08kYcVxo=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TSDSP2DywRz3BPvpT8mZtyUAJuHpX/b+gtmhWEKaBPxcIbmpKSb9XXEf8lVFHvVMpG8NvzU5CPs0AP/lfFLWNuIP56bxM2hl76LQ8KH7ZzqmncxrV2rcpX5neH+e3+prvy1OxvN6LqZvN5Ro3gr+BoT5YVZ3npCRPbys1D7G4FM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b=BUopBDcp; arc=fail smtp.client-ip=40.107.101.80 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=amd.com header.i=@amd.com header.b="BUopBDcp" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=u4dYvSN9h61mArMblYVsdKQPeB94HxtObfswi+E9PfSXpEAjT8lyqu8iJpgKVBgpruDSFqtaK0gv4NR9ftdDWOn/hnCmV+y0DxC1xZw7Ak7Xo4FHkGdjFSZO0ydO8aqxLQ+Bpi5yVj2wlFJFjlYVYg1vov8ZJwh/I2Z6JMjixdH+BVFqrsz2+qq/ekOLGblwQI/21XkZmQ+0xft6Nzr0qgDe4ph1flQJExKKe/JG9SHXqt97AqTEMQOP7dwD3B+i7uefi/zLMXmFQaPE5SYqXP27RM6NjTOeYWdjVO//XFo+WM8dnAAPrR02st3gUUNbUMD2S2RubVWVmsUjW8aAmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=o1kONVt9iZJ2EqyJWpQzyiEbQbEHFDWPUdLH2mjTno8=; b=u6CsOzZN40jsXxwJqPBdZJEtoe0VSzbwLK12K041pa7uE5MPh2hqiVvL2QSqqzwkxb2Aef8IRkMSncTFphcKu21Qa/rsZXVSPOoEaulo3QrWbXkykZzbhAIaivoUsNZx10iYiNLcrSscrtI1gzrXo5Lbx9pY+NU9ukGf+NCGas0Aw/7BkxB+8eodqFjZHcf2ZmtBGL2g4wFwAORuyB0qDcmigRNA8v57SioxCMBNf7qNw2FJ+Dvey63lNsL12t/Fg9NfW77jiquaIiRCysuhH0KcJOvsPGGEs4Wg0BF+x6kwrFIvBazm+LAjvPXBcU9MaNRVk5kAAZ5lTMMdP45uXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=nvidia.com smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=o1kONVt9iZJ2EqyJWpQzyiEbQbEHFDWPUdLH2mjTno8=; b=BUopBDcpwz+YfANrZrOXHUCRWp2w+GbhnQ8GxiWZBduXYf+kvVIDRqSvMh7BFt5qcpMzQj459XTsZhUVKRy7/7YG/BCH8koYxR8ANnB/u+D7yIfgSzwM/5IBsIo751V5DsgapG1JovPvHG2FHHtb8iBzW+ofVi+QzIy+WjSa0Tc= Received: from BLAP220CA0024.NAMP220.PROD.OUTLOOK.COM (2603:10b6:208:32c::29) by SA0PR12MB4382.namprd12.prod.outlook.com (2603:10b6:806:9a::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9009.16; Wed, 20 Aug 2025 11:31:10 +0000 Received: from BN3PEPF0000B373.namprd21.prod.outlook.com (2603:10b6:208:32c:cafe::79) by BLAP220CA0024.outlook.office365.com (2603:10b6:208:32c::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9052.14 via Frontend Transport; Wed, 20 Aug 2025 11:31:10 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by BN3PEPF0000B373.mail.protection.outlook.com (10.167.243.170) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.9073.0 via Frontend Transport; Wed, 20 Aug 2025 11:31:10 +0000 Received: from purico-ed03host.amd.com (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Wed, 20 Aug 2025 06:31:04 -0500 From: Suravee Suthikulpanit To: , CC: , , , , , , , , , , , , , , , , Suravee Suthikulpanit Subject: [PATCH 8/8] iommu/amd: Add support for nested domain attach/detach Date: Wed, 20 Aug 2025 11:30:09 +0000 Message-ID: <20250820113009.5233-9-suravee.suthikulpanit@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> References: <20250820113009.5233-1-suravee.suthikulpanit@amd.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN3PEPF0000B373:EE_|SA0PR12MB4382:EE_ X-MS-Office365-Filtering-Correlation-Id: 9f772652-7391-4596-05f8-08dddfdd0ff2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|376014|7416014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?3ud3ojJGMYKy/4o/ULhfd/TzZVFQFUjzTIEL7eFC5+ZuJAnlNDSFBP5+dncE?= =?us-ascii?Q?hFg+ER5Ap5Yw1EsDChJsNnPIZ/XBzQmRYU9QY9AUk+cPZZhKiR5YTBr9q68k?= =?us-ascii?Q?wnrqUQrcKeVDLichCy6cm42KA97nuugOsUQP/+zc+u2f2MohdffH5x4yeEIK?= =?us-ascii?Q?/JqAiYGXjMb6YZ/F47o0elVjNn9WcUb+nzaEM5y4kqCS0BbmDiznWJlpIj0q?= =?us-ascii?Q?qVR78pfYog1vk33Jd8+QZ/yb2FcrAdf6PcAWx23u1Ncxbtmi+rjTo7DcBhKY?= =?us-ascii?Q?OQyBOzHGTwHzMTXPlF3jnFKAj2jv0LNjdlLAeL8USOVfWMqutI15rIm2a0bQ?= =?us-ascii?Q?SUu2PWFWMoYybIRVzz2w1CxbIZHUjM/vMs0qC0fkfCNPwbMFAfj2ykIE5BB1?= =?us-ascii?Q?C4H9OHAjTUUT0PEies8rusjuc/5dH1z0ZDGRN5Wf0hVb52eGalbY3d7vjj8t?= =?us-ascii?Q?xVPHXbaXlWacp4yCl4Zd7m5HqBdjzZPu3UPJoP2Z2JGuKMpAcxkUnCARqlJa?= =?us-ascii?Q?pWHMugO7DlnDgIydBUAj9p2fG7eRZ4L0aWLnfwIibNdxcFr3B/m+Soplluaa?= =?us-ascii?Q?0D8REJZkm1U/pezCDo9bejcwv/O26Yse/msZBQxTQ87SlQd2AWLBp7nAdIfH?= =?us-ascii?Q?EL/hz903YNwaoTfsTQ4ZGiyUUvy8MjW3T+807/+xqFSgQFkPGU31i3APLwhY?= =?us-ascii?Q?+9CmcsxHgmXj0eFHwgSWr7BuEY10WQs2P1mrP5eKYs2Ol9w3EFa338npTPpg?= =?us-ascii?Q?MGKREC/Ko0h0tmIQ7O6nRnW1lAtfmLx9wdo1rYEKU1q6i+uonfAJhNs9co0p?= =?us-ascii?Q?O2eHzPiPGewAMChVijGLP25Qqb3CGSAtBwT+1tTMN67v0nEu5n8IqfQCwP03?= =?us-ascii?Q?Q+T2a+k3QGCChLObSBbytWL3+AZ4W+cO9DFa+F5co1Fu0qzw/BDSF3vcz2Y0?= =?us-ascii?Q?G7ifTVEgG2Qpq6ef//Z66O5Qujy3HhV5/E4Q6utUFA5EzK2m8BEbChOkTjSM?= =?us-ascii?Q?rd76oV68R3lGgoBn8GDPpSsMCZGi/mc3bac19ps1+EBX2xRBfzBcO0izKa1J?= =?us-ascii?Q?DGF2ja8jKyjSO59YXm4efK4WT+jYABeQ5Q7hAAvLzzmPnRsmaVckILGf49xD?= =?us-ascii?Q?oofDERNnVHbbT2kjipMRICEayOFDm+UqzMtb+eRQCwmPInPhxI25gyBQPsim?= =?us-ascii?Q?fVHyEJSTgZydmaBH37m22qkoBnPYgcUh4F+ccnUgqqW7077r3/jwVkkJAAKw?= =?us-ascii?Q?XcC49V3W2ULeKK0Equ8TuloH6CTHrh7lAm6w2WRvFJ1/2VydVAezwkJI7Fp5?= =?us-ascii?Q?tVAZODVoa0CL4CgLneKoQ4LwNbx4P8XbHDB7cZp9NtIVmds9+TgT675/4piw?= =?us-ascii?Q?DgmfMZUe8l2ItwGjEt+M5D2lt/m70vBG5zMdu9npHRkeSSU+pWeuDixCb8F5?= =?us-ascii?Q?1sL+x1bnkNP4h7VjR/7KIWGKNAXozCwsNNKiavSDDo5R5ZpJUjjuQQ=3D=3D?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(36860700013)(376014)(7416014)(1800799024)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2025 11:31:10.3371 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9f772652-7391-4596-05f8-08dddfdd0ff2 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: BN3PEPF0000B373.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR12MB4382 Content-Type: text/plain; charset="utf-8" Programs guest translation settings in the host DTE when attaches the nested domain to a device. Also, enable the GCR3TRPMode feature when supported. Note that nested translation is only supported with the GCR3TRP mode. When it is enabled, the AMD IOMMU driver programs the GCR3 Table Root Pointer field of the device table entry with the GPA provided by the guest. Signed-off-by: Suravee Suthikulpanit --- drivers/iommu/amd/amd_iommu_types.h | 5 ++ drivers/iommu/amd/init.c | 3 ++ drivers/iommu/amd/iommu.c | 49 +++++++++++++++--- drivers/iommu/amd/nested.c | 80 +++++++++++++++++++++++++++-- 4 files changed, 127 insertions(+), 10 deletions(-) diff --git a/drivers/iommu/amd/amd_iommu_types.h b/drivers/iommu/amd/amd_io= mmu_types.h index 94f51a09b364..f8c392aadeb1 100644 --- a/drivers/iommu/amd/amd_iommu_types.h +++ b/drivers/iommu/amd/amd_iommu_types.h @@ -191,6 +191,7 @@ #define CONTROL_EPH_EN 45 #define CONTROL_XT_EN 50 #define CONTROL_INTCAPXT_EN 51 +#define CONTROL_GCR3TRPMODE 58 #define CONTROL_IRTCACHEDIS 59 #define CONTROL_SNPAVIC_EN 61 =20 @@ -420,6 +421,8 @@ #define DTE_FLAG_V BIT_ULL(0) #define DTE_FLAG_TV BIT_ULL(1) #define DTE_FLAG_HAD (3ULL << 7) +#define DTE_FLAG_PPR BIT_ULL(52) +#define DTE_FLAG_GLX BIT_ULL(53) #define DTE_FLAG_GIOV BIT_ULL(54) #define DTE_FLAG_GV BIT_ULL(55) #define DTE_GLX GENMASK_ULL(57, 56) @@ -555,6 +558,7 @@ struct amd_irte_ops; =20 struct gcr3_tbl_info { u64 *gcr3_tbl; /* Guest CR3 table */ + u64 trp_gpa; /* Guest CR3 TRP GPA for nested domain */ int glx; /* Number of levels for GCR3 table */ u32 pasid_cnt; /* Track attached PASIDs */ u16 domid; /* Per device domain ID */ @@ -610,6 +614,7 @@ struct protection_domain { =20 struct protection_domain *parent; /* Nested parent domain */ struct iommu_hwpt_amd_v2 guest_hwpt; + u16 guest_paging_mode; /* Guest paging mode */ }; =20 /* diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c index 8de689b2c5ed..b340afd6901f 100644 --- a/drivers/iommu/amd/init.c +++ b/drivers/iommu/amd/init.c @@ -971,6 +971,9 @@ static void iommu_enable_gt(struct amd_iommu *iommu) return; =20 iommu_feature_enable(iommu, CONTROL_GT_EN); + + if (check_feature2(FEATURE_GCR3TRPMODE)) + iommu_feature_enable(iommu, CONTROL_GCR3TRPMODE); } =20 /* sets a specific bit in the device table entry. */ diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index ea790a8997ee..935eaffb6814 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -1856,6 +1856,18 @@ static void free_gcr3_tbl_level2(u64 *tbl) } } =20 +static inline bool amd_iommu_domain_is_nested(struct protection_domain *pd= om) +{ + return (pdom && (pdom->domain.type =3D=3D IOMMU_DOMAIN_NESTED)); +} + +static inline bool has_gcr3_table(struct gcr3_tbl_info *gcr3_info) +{ + if (!gcr3_info || (!gcr3_info->gcr3_tbl && !gcr3_info->trp_gpa)) + return false; + return true; +} + static void free_gcr3_table(struct gcr3_tbl_info *gcr3_info) { if (gcr3_info->glx =3D=3D 2) @@ -1901,7 +1913,7 @@ static int setup_gcr3_table(struct gcr3_tbl_info *gcr= 3_info, if (levels > amd_iommu_max_glx_val) return -EINVAL; =20 - if (gcr3_info->gcr3_tbl) + if (has_gcr3_table(gcr3_info)) return -EBUSY; =20 /* Allocate per device domain ID */ @@ -2023,17 +2035,31 @@ static void set_dte_gcr3_table(struct amd_iommu *io= mmu, struct dev_table_entry *target) { struct gcr3_tbl_info *gcr3_info =3D &dev_data->gcr3_info; + struct protection_domain *pdom =3D dev_data->domain; u64 gcr3; =20 - if (!gcr3_info->gcr3_tbl) + if (!has_gcr3_table(gcr3_info)) return; =20 - pr_debug("%s: devid=3D%#x, glx=3D%#x, giov=3D%#x, gcr3_tbl=3D%#llx\n", + /* We need to check host capability before setting the mode. */ + if ((pdom->guest_paging_mode =3D=3D PAGE_MODE_5_LEVEL) && + (amd_iommu_gpt_level < PAGE_MODE_5_LEVEL)) { + pr_err("Cannot support Guest paging mode=3D%#x (dom_id=3D%#x).\n", + pdom->guest_paging_mode, pdom->id); + return; + } + + pr_debug("%s: devid=3D%#x, glx=3D%#x, giov=3D%#x, gcr3_tbl=3D%#llx, trp_g= pa=3D%#llx, type=3D%#x\n", __func__, dev_data->devid, gcr3_info->glx, gcr3_info->giov, - (unsigned long long)gcr3_info->gcr3_tbl); + (unsigned long long)gcr3_info->gcr3_tbl, gcr3_info->trp_gpa, + pdom->domain.type); =20 gcr3 =3D iommu_virt_to_phys(gcr3_info->gcr3_tbl); =20 + /* For nested domain, use GCR3 GPA provided */ + if (gcr3_info->trp_gpa) + gcr3 =3D gcr3_info->trp_gpa; + target->data[0] |=3D DTE_FLAG_GV | FIELD_PREP(DTE_GLX, gcr3_info->glx) | FIELD_PREP(DTE_GCR3_14_12, gcr3 >> 12); @@ -2044,7 +2070,7 @@ static void set_dte_gcr3_table(struct amd_iommu *iomm= u, FIELD_PREP(DTE_GCR3_51_31, gcr3 >> 31); =20 /* Guest page table can only support 4 and 5 levels */ - if (amd_iommu_gpt_level =3D=3D PAGE_MODE_5_LEVEL) + if (pdom->guest_paging_mode =3D=3D PAGE_MODE_5_LEVEL) target->data[2] |=3D FIELD_PREP(DTE_GPT_LEVEL_MASK, GUEST_PGTABLE_5_LEVE= L); else target->data[2] |=3D FIELD_PREP(DTE_GPT_LEVEL_MASK, GUEST_PGTABLE_4_LEVE= L); @@ -2061,7 +2087,14 @@ static void set_dte_entry(struct amd_iommu *iommu, struct gcr3_tbl_info *gcr3_info =3D &dev_data->gcr3_info; struct dev_table_entry *dte =3D &get_dev_table(iommu)[dev_data->devid]; =20 - if (gcr3_info && gcr3_info->gcr3_tbl) + /* + * For nested domain, use parent domain to setup v1 table + * information and domain id. + */ + if (amd_iommu_domain_is_nested(domain)) + domain =3D domain->parent; + + if (has_gcr3_table(gcr3_info)) domid =3D dev_data->gcr3_info.domid; else domid =3D domain->id; @@ -2293,7 +2326,8 @@ int __amd_iommu_attach_device(struct device *dev, str= uct protection_domain *doma goto out; =20 /* Setup GCR3 table */ - if (pdom_is_sva_capable(domain)) { + if (!amd_iommu_domain_is_nested(domain) && pdom_is_sva_capable(domain)) { + pr_warn("%s: Allocating guest page table\n", __func__); ret =3D init_gcr3_table(dev_data, domain); if (ret) { pdom_detach_iommu(iommu, domain); @@ -2519,6 +2553,7 @@ static int pdom_setup_pgtable(struct protection_domai= n *domain, fmt =3D AMD_IOMMU_V1; break; case PD_MODE_V2: + domain->guest_paging_mode =3D amd_iommu_gpt_level; fmt =3D AMD_IOMMU_V2; break; case PD_MODE_NONE: diff --git a/drivers/iommu/amd/nested.c b/drivers/iommu/amd/nested.c index 09f2a455af33..c9bf44e6298d 100644 --- a/drivers/iommu/amd/nested.c +++ b/drivers/iommu/amd/nested.c @@ -12,9 +12,7 @@ #include "amd_iommu.h" #include "amd_iommu_types.h" =20 -const struct iommu_domain_ops nested_domain_ops =3D { - .free =3D amd_iommu_domain_free, -}; +const struct iommu_domain_ops nested_domain_ops; =20 static int udata_to_iommu_hwpt_amd_v2(const struct iommu_user_data *user_d= ata, struct iommu_hwpt_amd_v2 *hwpt) @@ -77,3 +75,79 @@ amd_iommu_domain_alloc_nested(struct device *dev, struct= iommu_domain *parent, kfree(pdom); return ERR_PTR(-EINVAL); } + +static inline u64 hwpt_to_gcr3_trp(u64 *dte) +{ + u64 gcr3; + + gcr3 =3D (FIELD_GET(DTE_GCR3_14_12, dte[0]) << 12); + gcr3 |=3D (FIELD_GET(DTE_GCR3_30_15, dte[1]) << 15); + gcr3 |=3D (FIELD_GET(DTE_GCR3_51_31, dte[1]) << 31); + return gcr3; +} + +static int nested_gcr3_update(struct protection_domain *pdom, struct devic= e *dev) +{ + struct iommu_dev_data *dev_data =3D dev_iommu_priv_get(dev); + struct iommu_hwpt_amd_v2 *hwpt =3D &pdom->guest_hwpt; + struct pci_dev *pdev =3D to_pci_dev(dev); + + if (!pdev || !hwpt) + return -EINVAL; + + /* Note: Currently only support GCR3TRPMode with nested translation */ + if (!check_feature2(FEATURE_GCR3TRPMODE)) + return -EOPNOTSUPP; + + if (FIELD_GET(DTE_GPT_LEVEL_MASK, hwpt->dte[2]) =3D=3D GUEST_PGTABLE_5_LE= VEL) + pdom->guest_paging_mode =3D PAGE_MODE_5_LEVEL; + else + pdom->guest_paging_mode =3D PAGE_MODE_4_LEVEL; + + dev_data->ppr =3D FIELD_GET(DTE_FLAG_PPR, hwpt->dte[0]); + dev_data->gcr3_info.glx =3D FIELD_GET(DTE_FLAG_GLX, hwpt->dte[0]); + dev_data->gcr3_info.giov =3D FIELD_GET(DTE_FLAG_GIOV, hwpt->dte[0]); + dev_data->gcr3_info.trp_gpa =3D hwpt_to_gcr3_trp(hwpt->dte); + /* Due to possible aliasing issue use nested domain ID */ + dev_data->gcr3_info.domid =3D pdom->id; + pr_debug("%s: devid=3D%#x, domid=3D%#x, trp_gpa=3D%#llx, glx=3D%#x\n", __= func__, + pci_dev_id(pdev), + dev_data->gcr3_info.domid, + dev_data->gcr3_info.trp_gpa, + dev_data->gcr3_info.glx); + + return 0; +} + +static int amd_iommu_nested_attach_device(struct iommu_domain *dom, struct= device *dev) +{ + struct iommu_dev_data *dev_data =3D dev_iommu_priv_get(dev); + struct protection_domain *pdom =3D to_pdomain(dom); + struct pci_dev *pdev; + int ret; + + if (dev_data->domain =3D=3D pdom) + return 0; + + ret =3D nested_gcr3_update(pdom, dev); + if (ret) + return ret; + + if (dev_data->domain) + amd_iommu_detach_device(dev); + + ret =3D __amd_iommu_attach_device(dev, pdom); + if (ret) + return ret; + + pdev =3D dev_is_pci(dev_data->dev) ? to_pci_dev(dev_data->dev) : NULL; + if (pdev) + amd_iommu_pdev_enable_cap_ats(pdev); + + return ret; +} + +const struct iommu_domain_ops nested_domain_ops =3D { + .attach_dev =3D amd_iommu_nested_attach_device, + .free =3D amd_iommu_domain_free, +}; --=20 2.34.1