From patchwork Fri Apr 11 06:37:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880696 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2081.outbound.protection.outlook.com [40.107.92.81]) (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 8341327CCFA; Fri, 11 Apr 2025 06:38:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.92.81 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353502; cv=fail; b=juz/C+jVgULCTBtl13hr+NKJ5gkZY8CxgUeWkWmQIixD3y7nmQRJ/KJRKO1u+fCbSJ64DaPkYnMAXy1Q7+/T9ag4Xsi9eit9ViRi9eWkqVsUxkUoJhJwsacBp7QmB1vrfsQAg5mXcVO90EQY9Vmd8l+bNVQhvjJGf9HLVSgRqBg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353502; c=relaxed/simple; bh=y9XZ5NbYttRYsiioE4owjFLvfy7kC2A5koTcGaDRG90=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TEIDnpH87Q/qbaZXKfBM+mQerffQqHDqOcJdSiv96P5BzfbKkFKvRFX7Ay2b8aAOEG+8E/HULVq+ZWZU1SP7zCNDDY8j0VH/kmmFBqnh6E3DTd6fPUnKeC/LWXEizBMZ6wqD7jbeWlKIK82C2ZPrgT8kOqbw7t41O9MYPJi2pX8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=LsZfSH32; arc=fail smtp.client-ip=40.107.92.81 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="LsZfSH32" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=s3b2/H1Q4Re1Op5MSf1YzGZrQIN81t7Bm4a3CCUDzpeTp15ToKHrNZt+OTW6rOSMOkKjIWXSCL2Zzlxa4M4f7DyBIM7w3IGFIb4gajAqEr34uiAlwuBfvQ/WvJLrwDWLwAAddxYk+QLXEuT/X7o9TMmDOqxibspoSSpkT/3WLyTwxtS3cyhAlaU/C4YdM6B6swn0GdK0FWNSCjEVinXmnRBLB+ulU38Y5PlueHKgc/TWK8vgOz1NUM3VXoWHX5DNACE6KFDlyCbY/mDHY3/IAfwGXvJb/i9oTPLLvCbpY5TV/7gi0gMs3aUQEBCgOj5TVWGb2bFT4XxNIRcXaFaaOA== 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=LcAgOgX7VVXuUEWNKXjRw6fvcPV106wHDSGblFgdF4A=; b=X8tjmArOZMQJ7wemZ9Jow1zanzMbjrwRU1cERu7gUKITUj2wy3Auj4faYEeZROtfntEQX2B/rDvwJqnRPLfrdDCDoaIbkalyzXY0eTVK7dsiveyt5ExXSjsBEXIbz7uzQw6dglqP7asCOcGzUqkY4xF7/wXElYnvdlyhXKazN17y+k3eFLHVWqut/S9nEoVy8QkDOXSjujJtewK3SxDJ1fzAJmLRulrnF+YbsL9bHiv46HzccogVAbljJD5oNA6NK/j4fMJrZoimL3maYnxD7EWuPKmjQt9fMIN611/aJfd6sGrPtGoaQpPJ8xjGWfpP8PjeJKEoFpmNvXCTotZQzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LcAgOgX7VVXuUEWNKXjRw6fvcPV106wHDSGblFgdF4A=; b=LsZfSH326Jz5UXBa7xKP5HySHl/TRz76tK1v7N5EJl0dTDR5Pnlc1wk5Wbrd7Xh+ajlPPevyQI5ZlnItsyH7mDZQ5yCTuwhx0wxIq5p8oOqIfZYJgU4Rt2TdkU2zB9E7W/JiFMwvnmO3Q/DHBWAwl+LfU5Ykl97tNwJNAMofwhn2MU4i0Rvxyvu4LPRLRg7gyjaobb3uvm3Fx25DS5dH6ssZIYLB4Kr1lOvMcUbHRR5wD8ingvsxcXSHE7plkqRzgnGBz6Lr6ch9cxHe9WgHFrpJHqVt6er9ROndIoMiSe77W3zC5Kq+p34asjNRn3Liof7aPBQBo2vy3mMtcJhUeg== Received: from SJ0PR03CA0050.namprd03.prod.outlook.com (2603:10b6:a03:33e::25) by PH8PR12MB8431.namprd12.prod.outlook.com (2603:10b6:510:25a::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.22; Fri, 11 Apr 2025 06:38:15 +0000 Received: from SJ5PEPF000001F3.namprd05.prod.outlook.com (2603:10b6:a03:33e:cafe::ee) by SJ0PR03CA0050.outlook.office365.com (2603:10b6:a03:33e::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.36 via Frontend Transport; Fri, 11 Apr 2025 06:38:15 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SJ5PEPF000001F3.mail.protection.outlook.com (10.167.242.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.13 via Frontend Transport; Fri, 11 Apr 2025 06:38:15 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:07 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:07 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:05 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 01/16] iommu: Pass in a driver-level user data structure to viommu_alloc op Date: Thu, 10 Apr 2025 23:37:40 -0700 Message-ID: <4613641ff3f67b73eaf1074d5bf9b066014a7813.1744353300.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F3:EE_|PH8PR12MB8431:EE_ X-MS-Office365-Filtering-Correlation-Id: d8306fe1-64ac-4a6a-b889-08dd78c37040 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|7416014|1800799024|376014|36860700013; X-Microsoft-Antispam-Message-Info: pI0O/cX1zT1vP13G072nrI8RPwzlCK0JPzyo5WheH8qYCh4P4pl41dxI8muhQ+BivX6z+gg4iJe/u2DHGbjqvyDtfkx4tFmbW8Egn8jD8gIYBnvvsAsdXi1SVYbZ+F8aD/XE7CWYTw3er9o3pTzFewBGwuCnKLIklVN9A3elttOBYpmXEYTiU115BdC9j2o2bhdm0aBwepnAJsXPAy02sFPB3HN00108vNbWnBLtsreoZG1YrbbuCql1vldLfbBTKZxOI5H6F6NBU3LJuen+ZKRX+qepcA4fIO7PpquMePdV+umQTxpDd2zj2MS/1CElx/tkGABdrikwpLCvsxLu15jbnAMjN/9bOKV6qxpglbSyj8pxtpCo3Lv47DSdjeDDE8UE4H3qVPS4Iz6FhUZyKX6ipwb8omGA1iku5lSwGxgymowIMrmWbu2sHeBcoRjUTHINGJoNA9zpR5gHAu0QrdMzhk909hqNQu+JReRHUseAOvPrCkVPMUmJ/JvhowpDKeFNkodVHjQhu65NNrKyaxM0nGXbEB/dcs2E7O350uwzyNkAtkliBIzjvR50SoJachaEhJ5rW4HyRgXnxuN3t2c5KdQ19AdxgzZcffV5v1hun3Zsrz/pmiCkTaSf5/wBobvOzILKXzzzP3FR8fmgnrZ0s96eyKSmacZuXAfokKyZhJG87VAL4bzzeDWThAGi0KVX0JfULRClgTz8CunScK7jiE3ENdWBuN9OIE6C1P6IBwrcaxEcqxQXqpaYzl+v/5bnTT7u63v3u3GkMj7UWtR1CUiHCYeG2TdnAenA4kVQDPXSLytiHZMzzBmyy2aJmm3PzDaS2K2qgL9aW9AZnEFx27bRoufBHLUtQRWfWkKYVfRkzS60i9wngCfKR8Vpf8WQ8kJgaimWan69Sq0Gj/xUYj5ifhCsu4Rq+LQjrF2ONQt9yghntdYpWnjuvCDz85p8Cgji3MLBiGgN7Nke/6GDFpXMG3qBOoplrTPWKLgAozKz4FMKfCkYFbeX9klvBVFTHphaFJcDXrSE8fuL50f97px5uVzaByS0a30tCQPyvItI4QFtUT2mgwnesfDIHyIhUmSknWYAFeSQQlahSkWUtK3haOLPmMZeXAEr1ZP8QJd0dHIQCwElfXz1wDmaILcJoBBjvHvav3Xy20W/Qn1NC91NQvvaUt1P2hF8YvzehDwr0bPQUkDpDVypBhwAHmHZy39HuHuNnlhLLjqysHdswaBPtbhV6X8q1JODMofgZfdhz2p2yx/LQ2Sa7DVKho2MALDrLl+R8hmaz1ze4Qzqp6PNljgRWFFPxl4rWny34hSN5fZq1VPxZO+4e7s+/rw8VYdol2+S56B5qvIY1mJP6ZTlG0Prs1/RdNGNVhAryTEpZrs8fq3MW3njskvjy63nWRMNeX7pTS5DBvc/0/3yhHZA3XSm2D1hfte5+LNBm5JnqRHEkcBhtTTYT6B8t2Sp7T5M39uhH4B1b/Uv0nKQOr4VgdCggn32wp7ZysCcq+oVTg777cjviVaCOoIJ X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(7416014)(1800799024)(376014)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:15.3411 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d8306fe1-64ac-4a6a-b889-08dd78c37040 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F3.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB8431 The new type of vIOMMU for tegra241-cmdqv needs to pass in a driver-level data structure from user space via iommufd, so add a user_data to the op. Signed-off-by: Nicolin Chen --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 3 ++- include/linux/iommu.h | 3 ++- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c | 3 ++- drivers/iommu/iommufd/selftest.c | 8 ++++---- drivers/iommu/iommufd/viommu.c | 2 +- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h index dd1ad56ce863..6b8f0d20dac3 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h @@ -1062,7 +1062,8 @@ void *arm_smmu_hw_info(struct device *dev, u32 *length, u32 *type); struct iommufd_viommu *arm_vsmmu_alloc(struct device *dev, struct iommu_domain *parent, struct iommufd_ctx *ictx, - unsigned int viommu_type); + unsigned int viommu_type, + const struct iommu_user_data *user_data); int arm_smmu_attach_prepare_vmaster(struct arm_smmu_attach_state *state, struct arm_smmu_nested_domain *nested_domain); void arm_smmu_attach_commit_vmaster(struct arm_smmu_attach_state *state); diff --git a/include/linux/iommu.h b/include/linux/iommu.h index ccce8a751e2a..ebde19aa3c28 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -662,7 +662,8 @@ struct iommu_ops { struct iommufd_viommu *(*viommu_alloc)( struct device *dev, struct iommu_domain *parent_domain, - struct iommufd_ctx *ictx, unsigned int viommu_type); + struct iommufd_ctx *ictx, unsigned int viommu_type, + const struct iommu_user_data *user_data); const struct iommu_domain_ops *default_domain_ops; unsigned long pgsize_bitmap; diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c index e4fd8d522af8..66855cae775e 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c @@ -385,7 +385,8 @@ static const struct iommufd_viommu_ops arm_vsmmu_ops = { struct iommufd_viommu *arm_vsmmu_alloc(struct device *dev, struct iommu_domain *parent, struct iommufd_ctx *ictx, - unsigned int viommu_type) + unsigned int viommu_type, + const struct iommu_user_data *user_data) { struct arm_smmu_device *smmu = iommu_get_iommu_dev(dev, struct arm_smmu_device, iommu); diff --git a/drivers/iommu/iommufd/selftest.c b/drivers/iommu/iommufd/selftest.c index 18d9a216eb30..8b8ba4fb91cd 100644 --- a/drivers/iommu/iommufd/selftest.c +++ b/drivers/iommu/iommufd/selftest.c @@ -733,10 +733,10 @@ static struct iommufd_viommu_ops mock_viommu_ops = { .cache_invalidate = mock_viommu_cache_invalidate, }; -static struct iommufd_viommu *mock_viommu_alloc(struct device *dev, - struct iommu_domain *domain, - struct iommufd_ctx *ictx, - unsigned int viommu_type) +static struct iommufd_viommu * +mock_viommu_alloc(struct device *dev, struct iommu_domain *domain, + struct iommufd_ctx *ictx, unsigned int viommu_type, + const struct iommu_user_data *user_data) { struct mock_iommu_device *mock_iommu = iommu_get_iommu_dev(dev, struct mock_iommu_device, iommu_dev); diff --git a/drivers/iommu/iommufd/viommu.c b/drivers/iommu/iommufd/viommu.c index 01df2b985f02..b861ca49d723 100644 --- a/drivers/iommu/iommufd/viommu.c +++ b/drivers/iommu/iommufd/viommu.c @@ -48,7 +48,7 @@ int iommufd_viommu_alloc_ioctl(struct iommufd_ucmd *ucmd) } viommu = ops->viommu_alloc(idev->dev, hwpt_paging->common.domain, - ucmd->ictx, cmd->type); + ucmd->ictx, cmd->type, NULL); if (IS_ERR(viommu)) { rc = PTR_ERR(viommu); goto out_put_hwpt; From patchwork Fri Apr 11 06:37:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880428 Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2084.outbound.protection.outlook.com [40.107.212.84]) (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 2ED7D27E1AE; Fri, 11 Apr 2025 06:38:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.212.84 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353509; cv=fail; b=eLc3c1D/vSe5ArRuTPEQWOBwrq1H7pXkJhx5S8XRRLE5IzJ/JDs0A1aB/fwZC1mA3VtzSe1izfii3nIFxZKMz3IbrYw4n4w2dScqipFOCZyZHFkaOZxybBZ/d9ALfrgPfOtoHMOQ/tF9zDEFrj737ppW6PS8JsCDg0sYAQC24KE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353509; c=relaxed/simple; bh=E3xUjL5SaomcbIfWTT1XRwyMbMCPya5yeEGAYlyqriU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hcxqgGI+NWGG2V9HzdNqLTnHo/Z9cNBsakX8M6WVmNcm5pS9ViraphJ90yW58eWbKZXYbk3FsuU5gOxvD/fqY0QWMvUp98RGv3cso0jWIt3zUTGcEoUhBShDrZc99VJJuV2rasUysS/0ZKdZCX9Je7ILdDZaz5/3Bg5KztdIc0o= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Kc6Gw5qo; arc=fail smtp.client-ip=40.107.212.84 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Kc6Gw5qo" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NUFONY3ErQSFVF35w2CWpE7wHUUJnrdEG/Bf+Cq5y7MDgM2ay+Qekf8dJxcDlhb5qTQ62LPqAjuXF1WyENKicaCkhsylP+z/2tLZvTh6PZv6adpN1kp+y0NA5NfssJAX/KtJ5TDCqWS9WfGv7fPWHJUxFLByCNuJ12+nLTAemQdyzeq/SC2ZlM6Kuf5VStUjGTxRLv3NCIMtGF8MwWaewFe0YsS02vpK3gLYmg0Y7NSa7od4zzcH/Xl8JdoHknVj1dc2NIvpxSsT5eWodVRQn4i5njJhm+WGeKOj2UKfpzQxyUwO25S+4gANRL5P1QBHsXWZrGX1PtbP5oyHB79nFQ== 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=sAEJs93SC7bB4T5SXHDyQvp/q2UJcl2xzAJBmjYN8/k=; b=jbkmHYZeb+H7344i2lAE/a5g0mZZh97wZgh+2Cp41DtBCi8VOSaax5fpfWmJWj05xvCjxvwObTQUxlc8oTdyXRXr8DNH8Q65t1WKxoHzurLWM7RRQMwz+mqLfY+6LJ34oTDLOBRayu/FMoA+rHFJ1f2fGUnPqGL8HlflzCZg1c8zLy7n4Ysn0hpwFUOHV7UCB0MXjugINiDuaMQ2UK/khIKCkBJObWaRmWEEiPW8UFYzqNPlhSkEvPcs11QuoC3cF4vrdVxHcjhv5ZO8oqA6KZMXFkiFZdCHxugIhRCKCs27A/6lVoWJOPaOxHGxr1Qi4NteX2O9iG0XgZxUCFemBQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sAEJs93SC7bB4T5SXHDyQvp/q2UJcl2xzAJBmjYN8/k=; b=Kc6Gw5qojBdoiNAyDr22NK36TeDmHkaaz5N04e0q+Xy9sQac4R+YM8IyNS4OOnrjdgoKm+iERZvGqwmv8t3u0jOerEge+oAQwgJV44vUYAOh9ujvG5K5b6l/J7kDesY9uAe2tR1Z+bWFOlDOc9hg3lKU/JXYsaLYBFzcBBy7qrfi8prvvJIfCclKLgGF1FC8pG38+0q4AJsWJrA1XUSPwyXPxOJ2QGksPXdOPCgyHXXyVZUVd/IPfEvxG06vxMYHF5IanXKct7ISGijJ0OzF4QDya7F0imTuFZUxcgIo2rgiHqm9JafShwdaN+UH27yE1Mcjzr4TsXHQAwPg3JWSqA== Received: from BYAPR04CA0008.namprd04.prod.outlook.com (2603:10b6:a03:40::21) by SN7PR12MB8602.namprd12.prod.outlook.com (2603:10b6:806:26d::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.32; Fri, 11 Apr 2025 06:38:20 +0000 Received: from SJ5PEPF000001F0.namprd05.prod.outlook.com (2603:10b6:a03:40:cafe::79) by BYAPR04CA0008.outlook.office365.com (2603:10b6:a03:40::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.26 via Frontend Transport; Fri, 11 Apr 2025 06:38:20 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SJ5PEPF000001F0.mail.protection.outlook.com (10.167.242.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.13 via Frontend Transport; Fri, 11 Apr 2025 06:38:20 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:09 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:09 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:07 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 02/16] iommufd/viommu: Allow driver-specific user data for a vIOMMU object Date: Thu, 10 Apr 2025 23:37:41 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F0:EE_|SN7PR12MB8602:EE_ X-MS-Office365-Filtering-Correlation-Id: 0c59669f-ecaa-4650-7e8e-08dd78c37355 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|376014|7416014|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: QAHRFspvsqrzck3pQ7ufmwc3vXzZWQViRBSjhBC7cXQk/GX4tJX4+uVor94STud4dDmf05momDTIdghqHk3z6u5QSP851zU3WbHVcU64u8SBQR+Mu3T9wPmmNQXz4wft52MgYxei90NMZv/zmLh6QxrUZshTQNlYXlWJ3A1SrMotal1JQegAxsNNI6BG9eRCByjzsxWJzuQ0tpCmuV2/spGmKeN87/ZskAevl6kITlwK42xETq4QD/2TIoFjc1R5MNOg3BR/y3qT3u4XMlwk36ojhCygeIcEdswOqWGkaVluvkfc7wst+Ac8kCVjVGjbkZ8m578zUMu1TD5vxLfwMinVJLuk3BFl/HwCotBNKN/Fek9MaD7FQVFdDKUsD2yVS0HzbPk4X4T6XK20eJeih/mdgYjpvkz4WyOFyrM7XDEuaLN/pc9qB60jkJSIxqqUCP8v8YtQjApIho0m3HqXdBPP6Xhv9SCecmrZAopgewQrltY3XQQ+gUpAT/UU+M+BxHQ2zO1xAi/1Y8biVLxQTqzrgbICm09DQlwzM1j8nQ+wF521o/FOEQZWGkLvav0EiwLX2Gyq9hAm6vaG9ShMlVb59iJ0R5vuHGaCARhmWweLSOp4paBBW4Hu4fIP6sAxo4GgYENZ7Zw4x980MTF+PHG1/rnJz1wcx1F1lUH22r9/d4aPpPJ6fZWNB9nJDaVcISKeB2okamT+ZKsW8dl/4PwElHvVIWH5RFptAhR8CszCtewXMcS/68MgTeYYpYFDdzRRqlZJcFzcDfN0uTq+Ki8nG9aYmVpVPE2ojHiqtVacwGRXixgss04QnErjFufZLBYMKD0soop21C6bqIQLxFNVHF14H726pkZsuLurdHMpgzR1W9VYKU/kE6uXGxhnzrVWkFZaT0H9OgSQJAhWcjR/thON6+lH6/LCNL8Sh0SAXvKf1CpQMZ4ntf/+efwrVIDM02cmKL1LsKLhYcxRNRXW85YO1tDvBeg/TSE/zJfgB4B4u4Ua0o7JmZKsedUmUWxnvQHkG8UgV1utJh4oPbBzB6zxgtuh2wyvM5CsH0qBiU26G96D/G9QPnItiJKwfaIMcbImAUKDSr1NAOH/62dntWwDiRE83TR0QaF/wv78Z7J4VtoQudhZhrMaM4Cg2AhHr6vLzv9xajP9GZP8B6wkYScrjcDsj+svTCQ5DavFba5Lm2qWFH1aUPZumTA2p8qcMIXv6cN0wgEAW8c2+gTNSD/eePSPeG3T/qoIt+BUI8B6/wZe1bLvBpKHLVREcBnRIWFi9GsNsX186t/6qWOIXoLgq0LhwiUbMx5elKET8oRmkfIB1EG3P/ofuG3djBrKBL02mBNLnVgBhxZVRzR4S0aoM5wXvbmN7mZh/f5TtGwn84ZbVilm4GMuGhbJ2pJ3A0inYbfJhiUq+4yKp4SzLf6QwmU854ieT/IxEnOc1z2ciXQ7pbUAhs35kqWz80R92stJF4m9qIyWdNyjfZg4G7lqR/drNzIRekgzZukzGXrrVc6VUtbl6hrSFz6X X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(376014)(7416014)(1800799024)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:20.5104 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0c59669f-ecaa-4650-7e8e-08dd78c37355 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F0.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB8602 The new type of vIOMMU for tegra241-cmdqv driver needs a driver-specific user data. So, add data_len/uptr to the iommu_viommu_alloc uAPI and pass it in via the viommu_alloc iommu op. Signed-off-by: Nicolin Chen --- include/uapi/linux/iommufd.h | 6 ++++++ drivers/iommu/iommufd/viommu.c | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/iommufd.h b/include/uapi/linux/iommufd.h index f29b6c44655e..cc90299a08d9 100644 --- a/include/uapi/linux/iommufd.h +++ b/include/uapi/linux/iommufd.h @@ -965,6 +965,9 @@ enum iommu_viommu_type { * @dev_id: The device's physical IOMMU will be used to back the virtual IOMMU * @hwpt_id: ID of a nesting parent HWPT to associate to * @out_viommu_id: Output virtual IOMMU ID for the allocated object + * @data_len: Length of the type specific data + * @__reserved: Must be 0 + * @data_uptr: User pointer to an array of driver-specific virtual IOMMU data * * Allocate a virtual IOMMU object, representing the underlying physical IOMMU's * virtualization support that is a security-isolated slice of the real IOMMU HW @@ -985,6 +988,9 @@ struct iommu_viommu_alloc { __u32 dev_id; __u32 hwpt_id; __u32 out_viommu_id; + __u32 data_len; + __u32 __reserved; + __aligned_u64 data_uptr; }; #define IOMMU_VIOMMU_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VIOMMU_ALLOC) diff --git a/drivers/iommu/iommufd/viommu.c b/drivers/iommu/iommufd/viommu.c index b861ca49d723..3d4d325adeaa 100644 --- a/drivers/iommu/iommufd/viommu.c +++ b/drivers/iommu/iommufd/viommu.c @@ -17,6 +17,11 @@ void iommufd_viommu_destroy(struct iommufd_object *obj) int iommufd_viommu_alloc_ioctl(struct iommufd_ucmd *ucmd) { struct iommu_viommu_alloc *cmd = ucmd->cmd; + const struct iommu_user_data user_data = { + .type = cmd->type, + .uptr = u64_to_user_ptr(cmd->data_uptr), + .len = cmd->data_len, + }; struct iommufd_hwpt_paging *hwpt_paging; struct iommufd_viommu *viommu; struct iommufd_device *idev; @@ -48,7 +53,8 @@ int iommufd_viommu_alloc_ioctl(struct iommufd_ucmd *ucmd) } viommu = ops->viommu_alloc(idev->dev, hwpt_paging->common.domain, - ucmd->ictx, cmd->type, NULL); + ucmd->ictx, cmd->type, + user_data.len ? &user_data : NULL); if (IS_ERR(viommu)) { rc = PTR_ERR(viommu); goto out_put_hwpt; From patchwork Fri Apr 11 06:37:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880695 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2075.outbound.protection.outlook.com [40.107.93.75]) (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 AA58727E1BC; Fri, 11 Apr 2025 06:38:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.93.75 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353511; cv=fail; b=HPPm/IHUMPa5cIekFd+agG6DwSTUA5wK+1RnaJc8q2hQ6DApFmsU1Ix3WqgIKwjEWBiBk66MbvSp5Pgw9NolvE2gdcTl1+xPypEZaz2J64C4p65N4tH/H+z7Tls+JC4+H8jVp3sHwXPvoXGyjX96x3P7OL5+7tPXMZchoLbxFX0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353511; c=relaxed/simple; bh=bA7WVwAvkM5GoOFzZ/pwEodTcZTcyGwE7QKpeWqEGg8=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=RHDlexVCr/cwbOcrmeHI2qwU9SczQ5ESRBc4EmOCKrykR4j4GsK/mnLN3OjzzuI4zUSg2hAcoCyE4bRczv/rzZx1CVMVZ59yJxtbTa2Ekcy7E4OQCmfz3QpMWoCeBugCCUzXKd70vhHctiZQ47K8HYekujQye+K3r1/XD0f5PiA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=a5MZzJUG; arc=fail smtp.client-ip=40.107.93.75 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="a5MZzJUG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LGAtqYujJpnpCUdjZjlnIm4HMq1+pjeDES3EC/yEv32bcF4jOpuumuHJjZkxOislgqIWaB/WqJupVVmtnGxGspC2KL5pZz/iVZouXzJwhFTFrgQk+IZQE21AH1CUFdIjYLp3LLCT8C9Mueu/EvOfguyusHtGvZ9zYrZC7gaVupKCjrTcmVCX/xduVw+zjpw5GotKg5qlLve1lB26JIQc+V0w5WVrLUg85ohcvNIVBgGk6iQMeZ8D3xM/hfHochqW9yKkXYpwfMgfm6nx2ccfRZ7CQZXd5wugwY8fVCYlJNDsR0CvsLANrSOpfdrhjD8LQpqRnfa1TPtSdtWeRNZxQw== 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=FIUAcSh50+u6HMWq1Ss0qHFLFwR1VH1NDftUeNfRcMk=; b=Ec8v1oqBGUIuKiCkAvIx3q3tbGakcRSfnlq5a7Lgk2VfSiISXGQKGo4d7YFI3KDtTup7CKqXJoNIYIPp0JC8yzrD93nc6EVXu8Oehav8Fk9pTIgLFpBf2cRVvcO5OyuoLJZlCPLHD3Wbb6EuKfRLQNic2t8MOTTaYXnVc+dSIENri+IR9SLunufnQ5/7iRykVEz189cEPFxeAgvC0zB+GxzJn8zFwf/eqc6v4xIpYGsxCRD/QqGrGMps5f90QksmVH8l5JYvdbKouoTZK201SnmV73wEu8JJt4B9y6tQLQc5vnupQ+S8Z0UFbT6PdTJt/uNrHE7oS59H9lNFFcDQUA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FIUAcSh50+u6HMWq1Ss0qHFLFwR1VH1NDftUeNfRcMk=; b=a5MZzJUGobEWX+KOSzHfM6CVG0EQfv7emgPtWSysS1MZOR0L25MnlcoY5V4sX1NJNEQ0JW4u6NYhayI+wbvosrOILBV2doWtT5HWQEBi014m3ZTH0YXUFY+b3ePsWdhczJN/16jbFsW4hN1ldNiprhbHycDtr074R1M6p2Cmbngv2mXIsAUoSr4ebd5nA+GbLyLLYaeAOemtPrAOGyFvqN2PPgHPtLcG3uIVQ4bIAAtjaxIODPFlhTEmKkBDhKO/T95wgaGIiOb4lHLrNF3sM4RrwKGa2/PknLYJ7hnkdZTKaFINPQdGDrCx22u91h6gN2ep96z34RBS7BDwbs4izA== Received: from PH5P222CA0011.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:34b::15) by MW4PR12MB6952.namprd12.prod.outlook.com (2603:10b6:303:207::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.35; Fri, 11 Apr 2025 06:38:26 +0000 Received: from CY4PEPF0000E9DC.namprd05.prod.outlook.com (2603:10b6:510:34b:cafe::2b) by PH5P222CA0011.outlook.office365.com (2603:10b6:510:34b::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.23 via Frontend Transport; Fri, 11 Apr 2025 06:38:25 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000E9DC.mail.protection.outlook.com (10.167.241.75) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Fri, 11 Apr 2025 06:38:25 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:11 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:11 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:09 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 03/16] iommu: Add iommu_copy_struct_to_user helper Date: Thu, 10 Apr 2025 23:37:42 -0700 Message-ID: <65b51f57d08069c9da909586faf4e73d247a54f5.1744353300.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9DC:EE_|MW4PR12MB6952:EE_ X-MS-Office365-Filtering-Correlation-Id: e3f80ea3-898e-42cd-9ba0-08dd78c37665 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700013|82310400026|7416014|376014; X-Microsoft-Antispam-Message-Info: 49i3GHqthLAI9Ug0/Pf4Mq/Dl39rZVeskEKV/rbsj0PcJJ4dFMUmlvPbTegv4fRkIrcNCP3gdGJvS6hWTa7Hme0cNaE6zzhJ7N2/23CpbxQTTBWYKbrui4ASDafu/Hxrw+jnFdUD/nuceTZEJmIkpn1HnWH7KsUfqG5843LUrVlQEsrtmnAZjfr8loZPvb1J1P3m+RonKc3fUQEHqJmOXnGDcjnScU+do87UklozrKC1G6DJ6u2XVM4E5PgFTWXObZl9D1wDX5s2NeP8GWf4Em6PGY0ovl0J8I6YbLUJeiGDXqLWaKiOwiHEE7LDZ+kXny955J0WF25mGcQAKJFy1de/RBzCRu7X7RToT+wLQFd6KaejqGP+UoW7uIE/0jAr91sKntRBW++oTN8Y+fdw2JrCSVsqZlfeEkJbPH0NBKkS+LuP0DWWN77mjY0N/UNkGhAMTwwhlM5rL2Rmll6tawrmQp0jU2Xxtx5iWSz3Wmyg1zRLI3oNjd01p8mq7hntJ1qjoCTzn7ItY3KtP5nmt0Dt9oDqRpt6oQ6nWoP7g58KT3l2eOHH2hVI3kxQDitVL2NiHDa68Q800VVYufb1mwezOvNEg8DsshAC0lfcda+f4Hsfl/R42DDWG1lV3XRYNhdr2bnIYB4kY2obBmMPIAyzfwd/lM4l+TDqnPfsRklY2afJufu3siMEvcqOL+fTNGbo7tWGbvUlxZZG64i+M/D5Ce/T7djZxXdu8qiBDtfJD2rAem42+j5OTDYbuUtZA9gb10HDPv1+xAwzjFPmmqA6J+hh0yvdmLKIK+AOPri8NpAdIRgzekJcxqlKOZKxCq/e9Y7yJhW4pe0okmpEt5VRXRdIbYcKoBG3dGzggVBArMqfvb9F3fXnbuHFYMxRkdzauNUlMzXVZR7a7m8n9c2l1SFoFTl1fMs6uWgYpMrbO5qL8vQyVbYHptm//ipNgYGwMRviOeSBXQSyYVPSOzHg2RNacFbYFyy1nTTvZziinMtBhB1tsItbZyf55LwyvsRrtIYE8+UFys1g/DyaZyw85f2uPSff42OBLd97tAFHykTFpYzlsoUN49pkQSSETvGLr0hZLrg5bXPHZm/1exuwEGhLQ1hMPJ4D9+iaURFwspK4vY0I4vkD53qOMT96CqoGcmSnouBAyfVvduq5qlqrZLVfrPYsxES3ZtorLeTiUw7acKvwaSWfAmm1Z3r/jDFx3vy22z/K/bw0DEDo8yb/gOreQ19f4hQ0eVQEnfzs885w1X6lp6PRHkH0tI3570I84qSnHaNj2MVv2ZfRjATuyeKBmG3d5xK22Fe3Wtkh+9HyUuoopeL3goTf7H5NGM0towGHOOJBsz2ac8df29ja3Fj5q6vL90aRgEH9k7IFnBvYLaC0ty/4+4HiOqpMYoCzmfhz8JlAZfKkEpFzUzIsEtlNJilREWBdjGhkwcPL1nJT8b3UsT6FNsXsSEA5NCXc6YhIlhLJch5Y4rJg1SKBZzV9mycT4n4p5//xzhpYXeyeWcGCZxKpYY0oRfoD X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(36860700013)(82310400026)(7416014)(376014); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:25.5242 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e3f80ea3-898e-42cd-9ba0-08dd78c37665 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9DC.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6952 Similar to the iommu_copy_struct_from_user helper receiving data from the user space, add an iommu_copy_struct_to_user helper to report output data back to the user space data pointer. Signed-off-by: Nicolin Chen --- include/linux/iommu.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/include/linux/iommu.h b/include/linux/iommu.h index ebde19aa3c28..ffb00054da33 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -562,6 +562,46 @@ iommu_copy_struct_from_full_user_array(void *kdst, size_t kdst_entry_size, return 0; } +/** + * __iommu_copy_struct_to_user - Report iommu driver specific user space data + * @dst_data: Pointer to a struct iommu_user_data for user space data location + * @src_data: Pointer to an iommu driver specific user data that is defined in + * include/uapi/linux/iommufd.h + * @data_type: The data type of the @dst_data. Must match with @src_data.type + * @data_len: Length of current user data structure, i.e. sizeof(struct _src) + * @min_len: Initial length of user data structure for backward compatibility. + * This should be offsetofend using the last member in the user data + * struct that was initially added to include/uapi/linux/iommufd.h + */ +static inline int +__iommu_copy_struct_to_user(const struct iommu_user_data *dst_data, + void *src_data, unsigned int data_type, + size_t data_len, size_t min_len) +{ + if (dst_data->type != data_type) + return -EINVAL; + if (WARN_ON(!dst_data || !src_data)) + return -EINVAL; + if (dst_data->len < min_len || data_len < dst_data->len) + return -EINVAL; + return copy_struct_to_user(dst_data->uptr, dst_data->len, src_data, + data_len, NULL); +} + +/** + * iommu_copy_struct_to_user - Report iommu driver specific user space data + * @user_data: Pointer to a struct iommu_user_data for user space data location + * @ksrc: Pointer to an iommu driver specific user data that is defined in + * include/uapi/linux/iommufd.h + * @data_type: The data type of the @ksrc. Must match with @user_data->type + * @min_last: The last memember of the data structure @ksrc points in the + * initial version. + * Return 0 for success, otherwise -error. + */ +#define iommu_copy_struct_to_user(user_data, ksrc, data_type, min_last) \ + __iommu_copy_struct_to_user(user_data, ksrc, data_type, sizeof(*ksrc), \ + offsetofend(typeof(*ksrc), min_last)) + /** * struct iommu_ops - iommu ops and capabilities * @capable: check capability From patchwork Fri Apr 11 06:37:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880694 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2041.outbound.protection.outlook.com [40.107.92.41]) (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 4406027EC91; Fri, 11 Apr 2025 06:38:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.92.41 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353517; cv=fail; b=fs0UEeFkOAfQDc8HN0Mfy134lUgTflMnnawxrAduaOqaOIQYvLWiHXy98twNrc7S1dYu9aQTsOjU2PSk6g7sj1TfsuRluQj/blNMmDC7rJ/qXD6XGpx8XJ6Lzir2a5crWMhIOHl9v/gAHdRvp2VsckBaHhJbVJisaYewp10UHtI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353517; c=relaxed/simple; bh=mkEz60uOwBQOrndgf0GsPb6ZG22hy6Erud/COc/sTMc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kYvh010wjBuL/d99xnSY/fUObOvBoFn4vLGaC8YCiYTQHZghPpAXlWzR/EYpCqimUPPdylfvZipJ5WvX6BDH8rleVwP0eMHXHkkOmx3fVKHQjWZ5vtygBg6CGzDaaTzCmU4oxzEp0IKbLCeFqB4yHnYrbZJoMppixk9n9t+Dffc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=l5ZjNQA/; arc=fail smtp.client-ip=40.107.92.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="l5ZjNQA/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tLFhvFEZ4O0KA2ZBrD3ftQ+ncqr4uaA1LlsfbLr8AsTTDKfFYzq7OIkIpyNYUaJkZWzAcr1bGXa7ulXxhm1EgL5Vjz0R7d/vJpcQ5k4x36gOSRwI4He4o+dgkVx2R1Cb9KBp6cjrouSkN17ymimxuGegKb5R+ws9twQXFbcxwwQ115IsGPrAGBbqIgJI3DIwYKkvDzDO0x8/S1jBlVo02WF4AAIejm00cBT1p68Ax8AeRHmubG62uKagEs20cdkISx8onEyv7OG776pySJrovkNSbXar8ykdZmDUm1rLMXzwzZ1r+4ad6G07ZR8y8BDvEeT8HiPh6V0PPOGdUErGEA== 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=JSGqmlbJd4Lw+P6Ky4JDSExa3w0cvMP1pSrcEr8Hvt8=; b=CPbjVqmGifUUO17D39XV8CuQyb5uJcSrolKtYOlD+aKnjVDcC4FF4zMf1c3R2zwRxIVSIw5Tx4/9sD+Vp0AMt9ioluf+MLVP2q+DJT/6gQq4IeCwtAFptCtXw3OqH3Kfmzi8NvozZhCBbLOcdZ+QymF+ONug2Cx2j1S7USy/+ImDZIYBumES8vN1u/AHqjt7kYYm4omaLUUaZztZ6lM1iihfFKx7w2Wkdeu0zoH7K2ZbLeu+vB6j46vswFVxMuOdIUNYTTeKVb0to/S81Xa0szbqQ8YcKZTb6XOBESKTlqe5+9Odr26i/r05weoQe5wXxZ2yPw3DCh/eDHP839AUNg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JSGqmlbJd4Lw+P6Ky4JDSExa3w0cvMP1pSrcEr8Hvt8=; b=l5ZjNQA/dE5ugkU4rjNAnC4VM8GlDLk5Kk4baQwdBV4nyil+oa7AeU6vvlNsEzu5TTKBVdDDgj63yEp7nKwv7U5StmtuZY0+NUysQ5+z410BjKNZ31fp8398DlPgZFvWktBSgxhTwbGOE8cYmwgGf3hxzEdSi8Nl6RhRjYs1WeIBflEtpT2pAba6G5V25yZ94Y9JRFxLlS3Ws/8TWVofl/fXsTFj5ZkBMlqhTV0cj9VZ0rQm2usBWlGEDDb5wFFvK06thLp5tCxA6Hpa5rhKnl0pquiklezsDMY3FnZmRCKsLA6SxoAVqjGM7tennwn5D8PhMrSs5/wgGlf+rfsVGA== Received: from PH7P220CA0111.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:32d::35) by DM4PR12MB7670.namprd12.prod.outlook.com (2603:10b6:8:105::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Fri, 11 Apr 2025 06:38:28 +0000 Received: from CY4PEPF0000E9DA.namprd05.prod.outlook.com (2603:10b6:510:32d:cafe::dd) by PH7P220CA0111.outlook.office365.com (2603:10b6:510:32d::35) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.22 via Frontend Transport; Fri, 11 Apr 2025 06:38:28 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000E9DA.mail.protection.outlook.com (10.167.241.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.13 via Frontend Transport; Fri, 11 Apr 2025 06:38:28 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:13 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:12 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:11 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 04/16] iommufd: Add iommufd_struct_destroy to revert iommufd_viommu_alloc Date: Thu, 10 Apr 2025 23:37:43 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9DA:EE_|DM4PR12MB7670:EE_ X-MS-Office365-Filtering-Correlation-Id: 08972eeb-e180-4454-b40d-08dd78c3780a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|7416014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: eF/wX77UcK090grbGGTsjxfkvW8f5OKRQkfNatah07PENFDdt4K9qtfLl/JcQk/U9E4TIKKobfRcfPj62fydSrLRIqFd5PzNCe4fRv9THlSsS0bNx2FPpfzOJY2/A/9C8dVEfLjVOpWBMTtpXkqVljxh41WwkpEMo/K9OU51zHhp0pbHYn/h3uRcggDDHHj4pfFxy5J/myTg3RKqI5NvDTbURBOkmkF9SGxiF7/c+YcgDmwl2uTzQ2DrL0rzhANysHEnTcAJq72/wmHYGEQOzA+XxV4nnr+BLIZx0XtZ8I5AIwuoaPLqYSa51B1IQpFqkHQhZHuywpAMQ9qZpYrqxFajf5Haz79HjKDw3wZYrRwvukNLUJw6NVNOYjy7ZtFX8KahFuc0yWO8lNTbFXmzsYPkASJrhrtu86WX0z2fC87Cw+OCTVz/b/4kZTWpYPZyhH4haK/ZdGbcJiJmR3pBM8W+EYFdlNhQeyYgMHLSBDJnzMwsotM6zyxsrDqO9sDhkBoXcKl55b6/e3Zw/BEvZwYMqg+LOl5hSTW11GJiIwt8KxJ8bEUQlae92m+iPZyxPZT6Xu3cYq/2iDjWMeywNf5FmVDIG/cxeKMUNvh7u03CzQZOAo1269kIKCrWeFE5TVOkHMHpsyrkyjylw7lD2SVYn+Bz+HdCVE7TQ7suiwVscjSDV6aup30C4sjcsU8IzQVYbAwMRZpKujv+S7lG9NbcEUHv5X/iFk0IiEjSSRVDxFcZbd7Z15Yukh1Va1GTbA+v4fAl03RprP2X9T42uFxMPUPMdLqW99h60BnFZuaVi5UZZ/XLrWCwcUzCMkwh4hUQ4mb84HmqnNQRWB5kEfd5ejmbzE4DO9WB+YsngG1onm4s0TQ0GvQ5++hO+f2Ny9jpZxiY27ePjuHWUtJvqjIuioIg1pJouRuSKJAsmcqSyhjd49BRMr5BrkNy22QcEMQ7Nmyo9EVlHVbIlhtIPx/SW9pU/btLZAarZzKSfvozLMMF/lKKV8l6jWSloyKLLIP8r5k/lbjLr0pOW9SIrZxjtuejo8wYVtbQbwv7hvubQh3PMSfY7ZQdGkKmqC8fTCkcZqpFmSwP4vToLxfQpYPkNvb7x78uDmhRSfeb43BLzURV9dsuDyyYCn8E/yW3bhtLKOMKu1RNbGE8rKoqjdt57mSJDiLgiI66h44IezB9KmojcGsfeie2EfAWWoklsgZUwJ0RXatvfOVBwHu7ZKYw2T8LDbcYK7GQo8zjURiOafZDCsafvn4p1BYbLITJ2Wy0KC2orMPcidiA7e46yZBjx/DrlnOsDBBxg/GscuzpsxHqTeJHxWU1vBrHOaSzqOqTbUGDETvVCdgenV66VUXQ1j6pQ7aBC/rXEp/JMcBenuVO4WlI6hgrLIDMXMSHmzPGYqs0hIPc3iGMl9d88RSGYddU/4J202NI5i0oeRjFtXhPEM1TOfGmXQktdiJqv5+y2UrNiREf0JUM96Chz+5Gte2bcUIMyJxJn+1WS9xxbEvmpSZIRnwrpGvjp90K X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(376014)(7416014)(1800799024)(82310400026)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:28.2995 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 08972eeb-e180-4454-b40d-08dd78c3780a X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9DA.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB7670 An IOMMU driver that allocated a vIOMMU may want to revert the allocation, if it encounters an internal error after the allocation. So, there needs a destroy helper for drivers to use. Move iommufd_object_abort() to the driver.c file and the public header, to introduce common iommufd_struct_destroy() helper that will abort all kinds of driver structures, not confined to iommufd_viommu but also the new ones being added by the following patches. Signed-off-by: Nicolin Chen --- drivers/iommu/iommufd/iommufd_private.h | 1 - include/linux/iommufd.h | 15 +++++++++++++++ drivers/iommu/iommufd/driver.c | 14 ++++++++++++++ drivers/iommu/iommufd/main.c | 13 ------------- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/drivers/iommu/iommufd/iommufd_private.h b/drivers/iommu/iommufd/iommufd_private.h index 80e8c76d25f2..51f1b3938023 100644 --- a/drivers/iommu/iommufd/iommufd_private.h +++ b/drivers/iommu/iommufd/iommufd_private.h @@ -180,7 +180,6 @@ static inline void iommufd_put_object(struct iommufd_ctx *ictx, wake_up_interruptible_all(&ictx->destroy_wait); } -void iommufd_object_abort(struct iommufd_ctx *ictx, struct iommufd_object *obj); void iommufd_object_abort_and_destroy(struct iommufd_ctx *ictx, struct iommufd_object *obj); void iommufd_object_finalize(struct iommufd_ctx *ictx, diff --git a/include/linux/iommufd.h b/include/linux/iommufd.h index 34b6e6ca4bfa..999498ddab75 100644 --- a/include/linux/iommufd.h +++ b/include/linux/iommufd.h @@ -192,6 +192,7 @@ static inline int iommufd_vfio_compat_set_no_iommu(struct iommufd_ctx *ictx) struct iommufd_object *_iommufd_object_alloc(struct iommufd_ctx *ictx, size_t size, enum iommufd_object_type type); +void iommufd_object_abort(struct iommufd_ctx *ictx, struct iommufd_object *obj); struct device *iommufd_viommu_find_dev(struct iommufd_viommu *viommu, unsigned long vdev_id); int iommufd_viommu_get_vdev_id(struct iommufd_viommu *viommu, @@ -207,6 +208,11 @@ _iommufd_object_alloc(struct iommufd_ctx *ictx, size_t size, return ERR_PTR(-EOPNOTSUPP); } +static inline void iommufd_object_abort(struct iommufd_ctx *ictx, + struct iommufd_object *obj) +{ +} + static inline struct device * iommufd_viommu_find_dev(struct iommufd_viommu *viommu, unsigned long vdev_id) { @@ -245,4 +251,13 @@ static inline int iommufd_viommu_report_event(struct iommufd_viommu *viommu, ret->member.ops = viommu_ops; \ ret; \ }) + +/* Helper for IOMMU driver to destroy structures created by allocators above */ +#define iommufd_struct_destroy(ictx, drv_struct, member) \ + ({ \ + static_assert(__same_type(struct iommufd_object, \ + drv_struct->member.obj)); \ + static_assert(offsetof(typeof(*drv_struct), member.obj) == 0); \ + iommufd_object_abort(ictx, &drv_struct->member.obj); \ + }) #endif diff --git a/drivers/iommu/iommufd/driver.c b/drivers/iommu/iommufd/driver.c index 922cd1fe7ec2..7980a09761c2 100644 --- a/drivers/iommu/iommufd/driver.c +++ b/drivers/iommu/iommufd/driver.c @@ -36,6 +36,20 @@ struct iommufd_object *_iommufd_object_alloc(struct iommufd_ctx *ictx, } EXPORT_SYMBOL_NS_GPL(_iommufd_object_alloc, "IOMMUFD"); +/* Undo _iommufd_object_alloc() if iommufd_object_finalize() was not called */ +void iommufd_object_abort(struct iommufd_ctx *ictx, struct iommufd_object *obj) +{ + XA_STATE(xas, &ictx->objects, obj->id); + void *old; + + xa_lock(&ictx->objects); + old = xas_store(&xas, NULL); + xa_unlock(&ictx->objects); + WARN_ON(old != XA_ZERO_ENTRY); + kfree(obj); +} +EXPORT_SYMBOL_NS_GPL(iommufd_object_abort, "IOMMUFD"); + /* Caller should xa_lock(&viommu->vdevs) to protect the return value */ struct device *iommufd_viommu_find_dev(struct iommufd_viommu *viommu, unsigned long vdev_id) diff --git a/drivers/iommu/iommufd/main.c b/drivers/iommu/iommufd/main.c index 3df468f64e7d..2b9ee9b4a424 100644 --- a/drivers/iommu/iommufd/main.c +++ b/drivers/iommu/iommufd/main.c @@ -51,19 +51,6 @@ void iommufd_object_finalize(struct iommufd_ctx *ictx, WARN_ON(old != XA_ZERO_ENTRY); } -/* Undo _iommufd_object_alloc() if iommufd_object_finalize() was not called */ -void iommufd_object_abort(struct iommufd_ctx *ictx, struct iommufd_object *obj) -{ - XA_STATE(xas, &ictx->objects, obj->id); - void *old; - - xa_lock(&ictx->objects); - old = xas_store(&xas, NULL); - xa_unlock(&ictx->objects); - WARN_ON(old != XA_ZERO_ENTRY); - kfree(obj); -} - /* * Abort an object that has been fully initialized and needs destroy, but has * not been finalized. From patchwork Fri Apr 11 06:37:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880427 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2047.outbound.protection.outlook.com [40.107.101.47]) (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 5AE0227D77E; Fri, 11 Apr 2025 06:38:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.101.47 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353512; cv=fail; b=CNMISKOLuEgtd9siAON921y5VAUXw0/ro85G1KgBYQbiKYWIqX8E0I4OvdkupiJg8+5fuNHskCAVNVtemavb2M4ouLBhLG6x6/Q0Byu36tk47QDrXSBWnPRookokWDIR9qKG8CSStNE/1cUhuUWpCxBx3EG4PajpnW/FOoUYHfw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353512; c=relaxed/simple; bh=+0uRN3R/mzCTmXuqInq4Go5cgXmd5Co0AryALVglaDc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BvZfJJkR+AkJAvK9vdZnmsPx9PUkNDXcivFeLUSxVJQ5YU6GSA3PYQ/FjfIPLrrLKBugroF2aduw6XBgBNcIAKIExz3KDuoV4HQfy35zk0BFP7AZ3MgGaRnZU2sHVJKelPefGLk3cuyjjYEgmCSoyeXH3VsoYbKdo8Qa5aENsn0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=uBatZkBw; arc=fail smtp.client-ip=40.107.101.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="uBatZkBw" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=C94K3S2EpGg0RWLMoTy/rSXGhFXte/APkRG5ia70Qs0w22VspxNwBmPw2zx+mX8bYiavXORINUHmSh9rac6QOJSpF1voJfNOnBUc2kTD76P/GwG9GGnxgekZR8dOT9rO9e/OkNRvy4fyj3hfIJErgOnkRErUQ+91L9VUGreurxraYCRR25pAYrR2jSZxg3HjqHT157vLPabIgkvFFSQM/jY2+SizRabkIY8J2Zxg24T5eXUryxfCrmA6iBb4+3JI0/HeDP8EU5gqMQdQpcJN3yRKP0hZ8ohCS21CXZBZLUM10OLzB6O94bMPEkndAXA5nNqEXHigs6eomXPxIREyxw== 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=9rb4dE93GBXOPqFQyMkv7i7yt20JqCEkXJ1wa1LFTUs=; b=TD1L0LqPPW5KqOKrdX77SOspx7Ah/PU0d5e+Mbjen8yhflzYBwXkrqYPwTvxnuvnaPhUhT7/g1F1PbBCowm7wEwK/i++vvB8ujEo/mzPMqAjFqJZmsLTJqvdovRctiNzwJqVUa9PVPyNRnC2ZWYTP7VLf7cAErTcurfdlaPu0wmV0/Xmk/wK7SCFna86640/UE7CP81nevMkDUE9DwtBTTCIGEf24pU6BV/x2j2A9rVC5/NXoob9InWFRUA6wPUYuvGXPKl0l9YLxFj2KjWxJnUClY/dXLoTQ/Hjtxgihh8Oi4E/c+hskpU3e5uWLRJQ9M8/tOD4IyNfXNLbX3OZaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9rb4dE93GBXOPqFQyMkv7i7yt20JqCEkXJ1wa1LFTUs=; b=uBatZkBwKUhl6xmWoYG9gNt189KXxtRgFXYz9V4NlzxuuQKgWigGAavHbcIqkMs/2gDnbKpLpMceB7O+7tlxzJAauW3rO2EBZGO9xDMcL8LGrltjMh5tzOMZDjDjyTQbx8CyM0YXU+WeYIZdCwm1G9vLUE3HCarCC0uINTr06DcxYDCpQhDumLpop72Cp982ToxlpX3znp5wMAAGcDK1g8lBIiIA9cx7ii6whtFn7kei235ICVMmff5mhNvfoW1m202QS4douAiepbvBIG3TLGQo28m8CNT7uuTFR3hOiMOvyx0cmAs5iu6xLo76DoVmY3xHjSUf+VIVZGk5QXhLfA== Received: from SJ0PR05CA0068.namprd05.prod.outlook.com (2603:10b6:a03:332::13) by CH3PR12MB8970.namprd12.prod.outlook.com (2603:10b6:610:176::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.23; Fri, 11 Apr 2025 06:38:26 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:a03:332:cafe::d5) by SJ0PR05CA0068.outlook.office365.com (2603:10b6:a03:332::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.9 via Frontend Transport; Fri, 11 Apr 2025 06:38:26 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.13 via Frontend Transport; Fri, 11 Apr 2025 06:38:26 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:15 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:14 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:13 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 05/16] iommufd/selftest: Support user_data in mock_viommu_alloc Date: Thu, 10 Apr 2025 23:37:44 -0700 Message-ID: <05aa9acfafa0d92f76c9394d49a9a5c7b29ae94a.1744353300.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|CH3PR12MB8970:EE_ X-MS-Office365-Filtering-Correlation-Id: 2439f184-b72d-4353-84e2-08dd78c37701 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|1800799024|82310400026|7416014|376014; X-Microsoft-Antispam-Message-Info: V6BFbwTngqIw0r9I4IRiiWwHU3Q/XDczivDomxlP3v5vxSc9K/OukauRfYQg4NJPu5mMxqNbXMc4L42CZCAHaG/CSaXkHhdnB+Jhyyfx8zPNKtJmx4s/pcWOSLUmrq90VilI0jIZGt9xjbrfcBTuW3B9MUC59OKzHEX1/mxgScp1aBjLWEZSs8rGz8Btnu0VtSwvOutCEAu8OGKduApUe9F1VP79WOK7PRE8JC1LL6eXM7SmWcF5y4yMCEbHV7fQTWtYZvOOJV3ebBeOxs2P1F6qoZrsTtnn54YwawOoSno4ChvqlN+gpLb0XA5z0nwYS5efaqdmfjddginiID/ZiZVP9VYqj10Cx6Ha8YnKI1nUF8twf1DiJTF2hFzIXzLQUYdwtRkzi1/Drqv+502+JkjAlUPhCgj1c0UKVnssfVzhfBIYethfipFBxtYcD19MQf/YLpB9X+a5LHTCnt3W/zLNwrFHqAzLs0g2a8KMkohBL74i+m6DNA7HJXbRZBC1U6mHWrUYSlcqJlQ3g7e2pp5LBNhzOFeT43zfpPBovDRER8iz/WAV1tRNOnFAFyyQ4n0JNUAz97+rq4xh3QVBriE1xKUQcajdGJHafzPNfJm3ZVvm5eYFr18tAhmpg79Vzfz9mDRyjMVwBBHil7AjndNLkhvecrhu0whI8ZMI33ytFUxV8A5XVpreO3sFcnAYmralNfGaOmV9Zp4QpVARRExbyj6LvABx5P6IwsdKRgw0QE4q41EeUb6mlfqtLgKd2aUVrBYd9Rv1CkhI5EBrbCp0/g3AokmD2cRozk3AzY2oafRTrnJwb5+YPJhw89pnTRXmVRcDRRQw4WczvQyS9a0TCy0k4s7ehc3D5dimcZZcIwvpXxXgIkPBQ/J1LI0zdHxtSTcfAN2x/vjWYp9OWv8JYvb5LjIJ2p9dLJ8NFMN5n9JP1sAHrNmYfgPERVxlGz00pDX9FgV/b006LhgKlvePxLtZrptU1wE0dd5T2Q3E4LlkhpfEQ97WEjHK473CvRLE4W5p9LkjzOP1oNhtqkZwDhfPVbYYpLbsAU9CU9WrleH7hwqeW/SD5+WthnY3VJX0pmds7HdpzOSoXBwluGcJzkHqhtx5klgjJDAm7PzLDdTXJ2IsZW7xmKw6cu/8DnMJFZFaCLYhloBXyFNBHngl0jHhLeesuKXXOQ1lMEmd+xFGa0cnX7BnuFQeFdrBbo3rcGbG4bg8u5OgIA2Vwd1xhba+wDcG8iDwezAisc9jRxuOaayykMo/xRTL4A1qHpD98DSdedbcjy50Zwm8zbzXgm7FnOP2i29Rz1hgN98k4DFfPmLpupsaarIkJkFjWq+lqoVJuBak37K5nhK6bmxZv2cGZE/og8VpJmBChLEpLXNGXd5BvV0zb26w9U5evA5DT3t21QVvwmu43j9D4MvOFeL6TxdduEimJosMbr7GX8t5d+nGK8UnUiT4Dj8yeOIqU4Sn8JmkYkgXuJ/2bZ6ujNLZSkFp5IYn54lyDmFm9uOcqnQbfbQMN12UpoVm X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700013)(1800799024)(82310400026)(7416014)(376014); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:26.6241 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2439f184-b72d-4353-84e2-08dd78c37701 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB8970 Add a simple user_data for an input-to-output loopback test. Signed-off-by: Nicolin Chen --- drivers/iommu/iommufd/iommufd_test.h | 13 +++++++++++++ drivers/iommu/iommufd/selftest.c | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/drivers/iommu/iommufd/iommufd_test.h b/drivers/iommu/iommufd/iommufd_test.h index 1cd7e8394129..fbf9ecb35a13 100644 --- a/drivers/iommu/iommufd/iommufd_test.h +++ b/drivers/iommu/iommufd/iommufd_test.h @@ -227,6 +227,19 @@ struct iommu_hwpt_invalidate_selftest { #define IOMMU_VIOMMU_TYPE_SELFTEST 0xdeadbeef +/** + * struct iommu_viommu_selftest - vIOMMU data for Mock driver + * (IOMMU_VIOMMU_TYPE_SELFTEST) + * @in_data: Input random data from user space + * @out_data: Output data (matching @in_data) to user space + * + * Simply set @out_data=@in_data for a loopback test + */ +struct iommu_viommu_selftest { + __u32 in_data; + __u32 out_data; +}; + /* Should not be equal to any defined value in enum iommu_viommu_invalidate_data_type */ #define IOMMU_VIOMMU_INVALIDATE_DATA_SELFTEST 0xdeadbeef #define IOMMU_VIOMMU_INVALIDATE_DATA_SELFTEST_INVALID 0xdadbeef diff --git a/drivers/iommu/iommufd/selftest.c b/drivers/iommu/iommufd/selftest.c index 8b8ba4fb91cd..b04bd2fbc53d 100644 --- a/drivers/iommu/iommufd/selftest.c +++ b/drivers/iommu/iommufd/selftest.c @@ -740,16 +740,35 @@ mock_viommu_alloc(struct device *dev, struct iommu_domain *domain, { struct mock_iommu_device *mock_iommu = iommu_get_iommu_dev(dev, struct mock_iommu_device, iommu_dev); + struct iommu_viommu_selftest data; struct mock_viommu *mock_viommu; + int rc; if (viommu_type != IOMMU_VIOMMU_TYPE_SELFTEST) return ERR_PTR(-EOPNOTSUPP); + if (user_data) { + rc = iommu_copy_struct_from_user( + &data, user_data, IOMMU_VIOMMU_TYPE_SELFTEST, out_data); + if (rc) + return ERR_PTR(rc); + } + mock_viommu = iommufd_viommu_alloc(ictx, struct mock_viommu, core, &mock_viommu_ops); if (IS_ERR(mock_viommu)) return ERR_CAST(mock_viommu); + if (user_data) { + data.out_data = data.in_data; + rc = iommu_copy_struct_to_user( + user_data, &data, IOMMU_VIOMMU_TYPE_SELFTEST, out_data); + if (rc) { + iommufd_struct_destroy(ictx, mock_viommu, core); + return ERR_PTR(rc); + } + } + refcount_inc(&mock_iommu->users); return &mock_viommu->core; } From patchwork Fri Apr 11 06:37:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880425 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2056.outbound.protection.outlook.com [40.107.100.56]) (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 48C0F27D79D; Fri, 11 Apr 2025 06:38:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.100.56 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353522; cv=fail; b=VKyzGKh4D27u3ScYAn6H2nWFPMJb6oqNZteUji5NLT6n4IY+04uV9TXZd68PuliJrN7YWO7kLGe1FcK01WOLBLD2+DzuSdmO80efS3gjG7euhOid/D7d2tEzKukZaOc8A1VEwJt6P9Xq3XW0xO5YNtibcSfsOoO+7l98OgNXJJs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353522; c=relaxed/simple; bh=ih5xQfYNVNLcqyz7LAcUCbSseJwrZqm5wf+4Z/3I6d0=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=MRPm9Gb5ScRHVwZiSuKM2Sk2yGieaGOmUDFzFdkQSh5WALqHoNhteXL6SYf93L5p2seCGLrGozN5uEkss2ZxD7PyhZgIeYEkI8Zg6+kAuM0dxHhvkOTXVT1xl7Mv1vR1dbzcpdIFn6qhhNEDdtYPUp4omHZgEZxmhw+3STCFAfY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=bQS9Lfax; arc=fail smtp.client-ip=40.107.100.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="bQS9Lfax" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kcQQEcuJap25r58Y6fXBSepQj6lt2THvs9756nX5K5AIT6wJDATwpZLXwt0SqxKMOeOtCVoP9bt3K0HF6cpj0J34Kl0D9xUPJGHfEpSlPOlu4Hc7jeP3lge2C14Pg2XFPlHSYsvprDb49PFWpLs57pc8HZQdmwjNiJbEJ5wIaFwJzG94c0MiqPf39otJ8fH/ZMiSZltQb/v/DwNjWT5AOJ9jsUV0KxjBEuHLS/i142sOLZvvc1JWjwPm57GMfT0bz39OtfV+My5X8X8rKWd5KmaLxpME2Uwy56i47YSBkWoe6kQyiq/Ab0oyFuQlfVzkrptVO8KfTB5t/m6R4Q+ULQ== 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=fnlwdjnjsoFem4jnATOTWF4QhoR+5Xsj/mAgs7LBGBA=; b=CDKcb/hoK4tgz+zeO7QjOG/UqPs9biHQ/LpGKI0AbEd2090dYXP3/+gX+mrUa/cCwUgsWvIUHJQtyBxg2Nl4OlHxTsvsleMHWEOAz/9n5IByQtmJxqrTisAHy/nC5j5IifcvSmev0FNySwpYr0myQ4s1guCxLs9bxSnS+mTtQTLLMMVQJePlJ01evvUVLe5XNc4PJJeLmvfunA7Mz3Sc4FmuCzH6ydVmFirbl2i1rkmPMimHR6nmQnWm2WOMkfrBfxfnNr8v85Gev1nbhcbOx3QXJJ/VZ7iDxVY5b7UoaRPy+o94nJNCC+/v/YwHxA39ZBAtqa5kLcRsvNeF4V6k7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fnlwdjnjsoFem4jnATOTWF4QhoR+5Xsj/mAgs7LBGBA=; b=bQS9LfaxuZ0kv8hWPQUlvUh1MIptOH1kZ/wl1f+8OKKElcJy5kS3M3cJBwx1mxpIJ6xARzkffetXxbS8hrLABaosd4oHdt/QwpCO46gvPhflslAEdFZ2IjpUbRSejbTmJSbFSfC+sYvC1VIzeAT35n8zmlRS30bt10XfnKoZRD8kf0pz6s4FjPLOia9+mw2eK5l0AmVrWbIGe+BMG+6atmMfA2NjxGF0ieAxHPSfezNbkpCmGC3nuRdQLCbkSphjn7cY9ihFKjKdFzDg7aLVrcZRCyC8Hwxiu4su3YtGYxhyF5hISRGbXXF2qBq2qyqrwzyxEURS+PKLEuV8THm74Q== Received: from PH7PR17CA0026.namprd17.prod.outlook.com (2603:10b6:510:323::19) by SJ1PR12MB6147.namprd12.prod.outlook.com (2603:10b6:a03:45a::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.21; Fri, 11 Apr 2025 06:38:33 +0000 Received: from CY4PEPF0000E9DB.namprd05.prod.outlook.com (2603:10b6:510:323:cafe::46) by PH7PR17CA0026.outlook.office365.com (2603:10b6:510:323::19) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.25 via Frontend Transport; Fri, 11 Apr 2025 06:38:32 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000E9DB.mail.protection.outlook.com (10.167.241.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Fri, 11 Apr 2025 06:38:32 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:17 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:16 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:15 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 06/16] iommufd/selftest: Add covearge for viommu data Date: Thu, 10 Apr 2025 23:37:45 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9DB:EE_|SJ1PR12MB6147:EE_ X-MS-Office365-Filtering-Correlation-Id: 8dea0703-23b0-47ee-7c53-08dd78c37a97 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|7416014|376014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: 24jZ88fT00iIO7OkZKhpNYnj/fexHLE5D4I43LKQJomTunLYr8vuL684qDDKKrTANy+tAp4xgCLO/1J89fQWAG33cV1heOQCE3vNmVg7m31seDeEOeaK/sIeQFnwL8JootSpxOuJuc59uMQ7N4cWlf1mjF+xjZtbkk55BVoQqlad0RsF/QPpwckfShktpyWhY2tQlvAF5wNaJ/DNaZKCpsMRvKp30rxTjYbE8qrq9n4lEKv2WLlSECRNSwOIjOkogpSbtuFuwxopoD/NK/s4dVF2MDR+c43/y7azACQtEGMEjeOXgbYlJQ1gNl6KWH7t8vAWY07vVMQuceCLewVXcCOooWuA+ppXMKI+mFJ5Kwpu7gbFsKn2o46ipz2qxGca0PKvehJCkzQzXDN9fczZdDcAp8taj1e7doRZM1G4tTvNGus66XwH807p7H8EPp6zLQeGBRBCR9kr9P1pW6AkRroIe8zg6AWt/K9IDJF+gp0H1kali1jgAj0oxFCKz3I01Up+TSO/aG9K/lt4o2txIggqy24x/PIABziLwY7M1JlrJrVn8CNK97ywvFYrr8DEW73RKOSh0NyKv4ziTuxYs6fm1Kpd1RO//hBEulDUEDbx6MegGQQ8FiHRSEOW1EPXDn9ZAZv8+hFdbdK650pRF1gqK01sr1PfL8u+HZ/hkgYUlthZU2iUBSnP2VxNqhZofRJMv/Jnl4j+ebDLlDivh5DoyiudShpJDT2iHR8vegAbQbF+LFaIyxxLo3qFdyFbl6iMNVhyjTuNmnQdH17GM5C4ho8zAdAxqX5v2b6GTfbROm/8UxHsMFeOTifGsFugnfxImhQZDe7mu3uhqqfq24eCvlZB2GYmE74gLhbIcSDp/SIBMnlJwyhbd+IuWZd6flPQMygCCm7l5XxCjnl0oz8xZkDwBXNkwPQBEVpgJ1rwx4d6/GBdtNBn4UN29MNclUrSbqu4qTNUwwOJHWRl+uw6oUZrEXCf6APJHxpEa7m8jWGShXIY3hLfA9mWeyuYSkgPmuWljcxQcI4V+8i2wqK3tNwUIzV1y0OnB/vCZmneJngQOA4u2lUXEbduxXuV03a7vYACAA0T3wbYoaaa5XSvQVsbR78LlQ22KcHAeXar3pc4V8RVFq8XbvFUl4A/9Vyui+bGOrB5kU9DORF6FAg79NRFPfJpXmgiF8gg9q4Jeb6K5w2BB4HlLyFG5839guM3oVlfUJsCZS9yl5D1pYO9QFfJaQWQb0plSur2rG7J0IqT/7cMbuxdwYMioPYzo6mvgHBn0vgHbQaPnD68KlWDWy8rWL1Cz+QQFhW0/Jo3nfQ3dWv5oxk9tDyXoCjxsz6jLHkAMVF+uTtQu03P/RK5P/1Woejn+Dt1aK4h7m3U7gLDXX9LZpkRXqLFFOp6MpZxWyBpIuOycVIfZf9lMNFbUTenkRgAT4zZ3vSNQV2MQXXhAR+AG9P+KXFJizQXWRW9XA23n07ssoF2uDgUtCB8rzp/r4xNc3Jeyvod3IMt8VB/p1aRj4SIjv9SNcpl X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(7416014)(376014)(36860700013)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:32.5619 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8dea0703-23b0-47ee-7c53-08dd78c37a97 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9DB.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6147 Extend the existing test_cmd/err_viommu_alloc helpers to accept optional user data. And add a TEST_F for a loopback test. Signed-off-by: Nicolin Chen --- tools/testing/selftests/iommu/iommufd_utils.h | 21 +++++++++----- tools/testing/selftests/iommu/iommufd.c | 29 +++++++++++++++---- .../selftests/iommu/iommufd_fail_nth.c | 5 ++-- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/tools/testing/selftests/iommu/iommufd_utils.h b/tools/testing/selftests/iommu/iommufd_utils.h index 72f6636e5d90..a5d4cbd089ba 100644 --- a/tools/testing/selftests/iommu/iommufd_utils.h +++ b/tools/testing/selftests/iommu/iommufd_utils.h @@ -897,7 +897,8 @@ static int _test_cmd_trigger_iopf(int fd, __u32 device_id, __u32 pasid, pasid, fault_fd)) static int _test_cmd_viommu_alloc(int fd, __u32 device_id, __u32 hwpt_id, - __u32 type, __u32 flags, __u32 *viommu_id) + __u32 flags, __u32 type, void *data, + __u32 data_len, __u32 *viommu_id) { struct iommu_viommu_alloc cmd = { .size = sizeof(cmd), @@ -905,6 +906,8 @@ static int _test_cmd_viommu_alloc(int fd, __u32 device_id, __u32 hwpt_id, .type = type, .dev_id = device_id, .hwpt_id = hwpt_id, + .data_uptr = (uint64_t)data, + .data_len = data_len, }; int ret; @@ -916,13 +919,15 @@ static int _test_cmd_viommu_alloc(int fd, __u32 device_id, __u32 hwpt_id, return 0; } -#define test_cmd_viommu_alloc(device_id, hwpt_id, type, viommu_id) \ - ASSERT_EQ(0, _test_cmd_viommu_alloc(self->fd, device_id, hwpt_id, \ - type, 0, viommu_id)) -#define test_err_viommu_alloc(_errno, device_id, hwpt_id, type, viommu_id) \ - EXPECT_ERRNO(_errno, \ - _test_cmd_viommu_alloc(self->fd, device_id, hwpt_id, \ - type, 0, viommu_id)) +#define test_cmd_viommu_alloc(device_id, hwpt_id, type, data, data_len, \ + viommu_id) \ + ASSERT_EQ(0, _test_cmd_viommu_alloc(self->fd, device_id, hwpt_id, 0, \ + type, data, data_len, viommu_id)) +#define test_err_viommu_alloc(_errno, device_id, hwpt_id, type, data, \ + data_len, viommu_id) \ + EXPECT_ERRNO(_errno, \ + _test_cmd_viommu_alloc(self->fd, device_id, hwpt_id, 0, \ + type, data, data_len, viommu_id)) static int _test_cmd_vdevice_alloc(int fd, __u32 viommu_id, __u32 idev_id, __u64 virt_id, __u32 *vdev_id) diff --git a/tools/testing/selftests/iommu/iommufd.c b/tools/testing/selftests/iommu/iommufd.c index 1a8e85afe9aa..8ebbb7fda02d 100644 --- a/tools/testing/selftests/iommu/iommufd.c +++ b/tools/testing/selftests/iommu/iommufd.c @@ -2688,7 +2688,7 @@ FIXTURE_SETUP(iommufd_viommu) /* Allocate a vIOMMU taking refcount of the parent hwpt */ test_cmd_viommu_alloc(self->device_id, self->hwpt_id, - IOMMU_VIOMMU_TYPE_SELFTEST, + IOMMU_VIOMMU_TYPE_SELFTEST, NULL, 0, &self->viommu_id); /* Allocate a regular nested hwpt */ @@ -2727,24 +2727,27 @@ TEST_F(iommufd_viommu, viommu_negative_tests) if (self->device_id) { /* Negative test -- invalid hwpt (hwpt_id=0) */ test_err_viommu_alloc(ENOENT, device_id, 0, - IOMMU_VIOMMU_TYPE_SELFTEST, NULL); + IOMMU_VIOMMU_TYPE_SELFTEST, NULL, 0, + NULL); /* Negative test -- not a nesting parent hwpt */ test_cmd_hwpt_alloc(device_id, ioas_id, 0, &hwpt_id); test_err_viommu_alloc(EINVAL, device_id, hwpt_id, - IOMMU_VIOMMU_TYPE_SELFTEST, NULL); + IOMMU_VIOMMU_TYPE_SELFTEST, NULL, 0, + NULL); test_ioctl_destroy(hwpt_id); /* Negative test -- unsupported viommu type */ test_err_viommu_alloc(EOPNOTSUPP, device_id, self->hwpt_id, - 0xdead, NULL); + 0xdead, NULL, 0, NULL); EXPECT_ERRNO(EBUSY, _test_ioctl_destroy(self->fd, self->hwpt_id)); EXPECT_ERRNO(EBUSY, _test_ioctl_destroy(self->fd, self->viommu_id)); } else { test_err_viommu_alloc(ENOENT, self->device_id, self->hwpt_id, - IOMMU_VIOMMU_TYPE_SELFTEST, NULL); + IOMMU_VIOMMU_TYPE_SELFTEST, NULL, 0, + NULL); } } @@ -2791,6 +2794,20 @@ TEST_F(iommufd_viommu, viommu_alloc_nested_iopf) } } +TEST_F(iommufd_viommu, viommu_alloc_with_data) +{ + struct iommu_viommu_selftest data = { + .in_data = 0xbeef, + }; + + if (self->device_id) { + test_cmd_viommu_alloc(self->device_id, self->hwpt_id, + IOMMU_VIOMMU_TYPE_SELFTEST, &data, + sizeof(data), &self->viommu_id); + assert(data.out_data == data.in_data); + } +} + TEST_F(iommufd_viommu, vdevice_alloc) { uint32_t viommu_id = self->viommu_id; @@ -3105,7 +3122,7 @@ TEST_F(iommufd_device_pasid, pasid_attach) /* Allocate a regular nested hwpt based on viommu */ test_cmd_viommu_alloc(self->device_id, parent_hwpt_id, - IOMMU_VIOMMU_TYPE_SELFTEST, + IOMMU_VIOMMU_TYPE_SELFTEST, NULL, 0, &viommu_id); test_cmd_hwpt_alloc_nested(self->device_id, viommu_id, IOMMU_HWPT_ALLOC_PASID, diff --git a/tools/testing/selftests/iommu/iommufd_fail_nth.c b/tools/testing/selftests/iommu/iommufd_fail_nth.c index e11ec4b121fc..f7ccf1822108 100644 --- a/tools/testing/selftests/iommu/iommufd_fail_nth.c +++ b/tools/testing/selftests/iommu/iommufd_fail_nth.c @@ -688,8 +688,9 @@ TEST_FAIL_NTH(basic_fail_nth, device) IOMMU_HWPT_DATA_NONE, 0, 0)) return -1; - if (_test_cmd_viommu_alloc(self->fd, idev_id, hwpt_id, - IOMMU_VIOMMU_TYPE_SELFTEST, 0, &viommu_id)) + if (_test_cmd_viommu_alloc(self->fd, idev_id, hwpt_id, 0, + IOMMU_VIOMMU_TYPE_SELFTEST, NULL, 0, + &viommu_id)) return -1; if (_test_cmd_vdevice_alloc(self->fd, viommu_id, idev_id, 0, &vdev_id)) From patchwork Fri Apr 11 06:37:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880693 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2059.outbound.protection.outlook.com [40.107.220.59]) (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 016A127F4DE; Fri, 11 Apr 2025 06:38:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.59 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353520; cv=fail; b=tdLWSjgzGM4Dy7cIf4r8SqXZw0gXQ+DdsqqNNpQwzvSFDPEmBAnvMtJDjt2dItgVcw0aBhDJP3YHR1jqu3tEWcQLbu1vZ0XpfGOfbX3o/LVzCtzQT5jIZJIUkRX/gnm3N9uoe9ybx11dFV0AYLDDRUjnPzfXxHxw7niG3taTW+c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353520; c=relaxed/simple; bh=ieBZ4Y4IAR9ZDI41GNv6SZB5JjPSp1HOG/W4coBE/ks=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=IgLTdRTP4HuU1jxn8cUaBfv01rKdIhrEsS4rEhzeouZptw/76ShKIcGKoayg+njAaZ1vBSklJh98oUj8DfFk/jEVZd4Nj3Sq3Bbjrk3HTgkBvXNairjAVJKqXCl7CycpmxbGfYzF1A7CRDtixPwpVFIDoCGHfVf630zR783ylvY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=eefr5Rma; arc=fail smtp.client-ip=40.107.220.59 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="eefr5Rma" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GXIR9MGACSEjLHTILBXFo2QxluaWvEZqdWRXccFmM1h6g/jLyIJ8cRKYxynEI7JP0DrFJAY2qDlZcD2jZuE9Y71+D/0oAwr23pbCNqnh3Dc/yPL9v5efM7aybwt7+0jvRL0w4JW3TRfvbFN6hAcuVSvbOYwJEfIlv95afAJIHVFz2EInJulgluJR4dYhC0p0xLe8wRr8HddKkvPDDG0kl3xB7PL3cwWeJgRjurIGD8P994AmV3ymbH6GdLZyFSB9kGKrqBB8P5wyqMGH47+UbHxrq0yGPI8u237os/XB/KN6McMlPvKjuXk0LmVzU+6z5sZMCioNxPbwZ1WwuaQyOA== 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=mpWuHYUCFh63JX4JU3CbKfP+qbz8EPDO3osmJauhaNM=; b=BslGrh0GRkgSw7QB+fFg1+AogCU7bu7EF9x/8WzWRy/eYTmTUzYyvbflQCoKI8Q3UdWxtQ1mlzX28CNIT5SVt3zXi7FF2rSIwlCWNDTMjnRdfL62a6+btBs60wRlUaVdpHFzkNgNx8ljTKClEFSc6c8ESpApTnCTf8Yd1xM/y4VYPdUs5htMgh+CbFo92utt0n4t1uVBdq/GE9xFNkwlwE4UpggxZxVjZy7K63Rl1HxAP42cr2wDmcyRNlyRKVu5IqPELlRfnYyZX/O/Wq4kY35O+YkNdBfkHGgzgmsXL0HVvK1WOeaHNWU2IIeypNyqHau3+aEKXyPoapNtvm0/bA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mpWuHYUCFh63JX4JU3CbKfP+qbz8EPDO3osmJauhaNM=; b=eefr5RmaXvb002nLPIqZr6dVPxOVJK0qD26SY2CBcMYtVmVM1L0WMDa8iE9WUdosFZ3s/JAqgOrHmRLNc/YfZ8m/tyP2+smplRwCJgHtwV+lR023Rfnv0Y8TGS3mc33LcrsC3RVUKfjQOJii4hKReU+7JUnRrqfqjB/aLf8FeFXa8p2jLcgSJ8Rz6LDfV1omMJpCv0GpYcnyNsHdoj3IVdZLe9BbLK7JewepItonjHK44572nSa4m/71mHXxXaY5JqMfRTrUFMvGBGZvS9HkIeTCA+Sl++kJNgMM+pGb0G/I04SeObh8w1iZyMMYTkR2xN7KgaA6gcqcypI8psjimA== Received: from PH5P222CA0004.NAMP222.PROD.OUTLOOK.COM (2603:10b6:510:34b::7) by IA1PR12MB8465.namprd12.prod.outlook.com (2603:10b6:208:457::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Fri, 11 Apr 2025 06:38:34 +0000 Received: from CY4PEPF0000E9DC.namprd05.prod.outlook.com (2603:10b6:510:34b:cafe::c5) by PH5P222CA0004.outlook.office365.com (2603:10b6:510:34b::7) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.26 via Frontend Transport; Fri, 11 Apr 2025 06:38:33 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000E9DC.mail.protection.outlook.com (10.167.241.75) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Fri, 11 Apr 2025 06:38:33 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:19 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:18 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:17 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 07/16] iommufd/viommu: Add driver-allocated vDEVICE support Date: Thu, 10 Apr 2025 23:37:46 -0700 Message-ID: <349fa2c4c291488bb5bae6e4a8bc0dcbd0c51fd4.1744353300.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9DC:EE_|IA1PR12MB8465:EE_ X-MS-Office365-Filtering-Correlation-Id: 7f51a681-7ad6-4313-4f78-08dd78c37b0b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|7416014|36860700013|376014|1800799024; X-Microsoft-Antispam-Message-Info: sKEIAfeq5zdN3mxppL3L17PuanyJ+WzpyNkb/TeFEwwYcLvvBn7EqSLG/YhoThLWtFIT8Mr468//5seYP2ZLEhwsG9EbDmzhR/o72Hi+bin0zJckalEUVYP9Ee8I87PKlewOS/Xs0RMmQcyp71CCqo51ggF/8EpUFB1EncQhYg7J81JJ8QmpdOZ8Zb4ipirDhOPfJUtrdeO0ZzrQye7wOY8JsMVEnHsui8pwGTIYA3UbtMfTmcpCAWwjL3oZDOR6MTZQ4cBvz0BEY8p8w01L2naHxVb0cAyj4HTAiq5pPeatotroq8fGKTA5J6YcaXSVkI3dnsrgjdLukdxXr/h+U/wPzqI/wGNKiRcpVdA+eT7/OYgMQaNSoJUqPdOudkYdQBREgPnWkwYPwd3bdb+1atkR5uuVyBDFQ0zdqfK2H6/tcnsTH1x+bfg8LNQdv6Xiy6zEqvjitBsBmsekqI9XHxUDej8lT2Q0dOb5rkA9EvRHBOs0kXRnUk1kpoU+p6H3ET1xHmsweHnAAsn5VLu68xNnt/wyJwAhBJlVDC0agkngHRdOoAUghL3FMy8mUQv13YN6+9D7HlSZoWN2PjIoUxU56s5iv7xHvKrvjMrXSVjsZaDpiSVaRB9TN1caW4+HzdbGGMzP0MdAZE0+mu5dSZ3F6/iN6UQN/rr6gMIWPup2EAIvGh889X2zZlDZS7OR/yuzVoBTePTJ7Op3D57vn6y1Dg/rGIn85uPomFSb0uoUgMhcgL+ee4op8HpdHYEOK+kPiTFV6/0f2qUN2Bu6g94lKUbYQ/GQCrBTt41hkfo5oHZRwZ/KBL8daP37uVCf+CC1StLmAxLvrP2C3vZkk/N40DyNrbLWwHpl0OJJVWZU86QK+ACDeFeJ0GWxmKJ6WcxJo1AzPW8J7Ev1gPm3KobGSbx2nVUKWu6BtX7zijzLtFPZlK+ybMmtT2MgJtU/Z3S6UzlC+0ArJHGhfg0BqYlrnev190I8kAwvm+jibCy5tLcLVOe6ADrXi66abgZ2VjU111C3WhQdLyOuUY8U+g7p0jRbhmYOvPyM+hgWzt9RASY1ep2IZ+HqVP/KnHG7d2MeOQFFhivV4ZnCp6K3CHuzGc/n6o9DEMd72CPlsR8KgXKyIg0D5BK5KcvkLZtqDSOPhrf8zQIlQo28SPuhD0S7sKMxfjEtT8SuRAeEn4NheK+3pOs1nEOvXMU2E8U1R3lTpFv0r7GV2zLARJfr6SST+smO8NBy7lq/CVSuIfeutGZZ9rFn8rBdpNsQ3x2Z1RfgAV57m4LN8CEr+MerCP+K0oTwoPo4qJMMUZIlgVEYTsuxG4JkLgivCTH7vneLOZHKV/9g4cerlk50h6vGXscmYBsbPsqCnFsdTa2hJVEXMQfg+KYvnN/taAPbq7UHfsfx6Vwplcqf4T7wLH/bUxVKy93exKAlb5m3C+x0ADmusKgqt6j02n3yWnqrVQGfYD0Ofpf1GHto/qerla+xRR3DgtCKm7h7cX0aSlMRbxEquhceenTKg86y+0nccTnU X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(7416014)(36860700013)(376014)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:33.3366 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7f51a681-7ad6-4313-4f78-08dd78c37b0b X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9DC.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB8465 To allow IOMMU drivers to allocate own vDEVICE structures, move the struct iommufd_vdevice to the public header and provide a pair of viommu ops. The iommufd_vdevice_alloc_ioctl will prioritize the callback function from the viommu ops, i.e. a driver-allocated vDEVICE. Signed-off-by: Nicolin Chen --- drivers/iommu/iommufd/iommufd_private.h | 8 ------- include/linux/iommufd.h | 32 +++++++++++++++++++++++++ drivers/iommu/iommufd/viommu.c | 9 ++++++- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/drivers/iommu/iommufd/iommufd_private.h b/drivers/iommu/iommufd/iommufd_private.h index 51f1b3938023..8d96aa514033 100644 --- a/drivers/iommu/iommufd/iommufd_private.h +++ b/drivers/iommu/iommufd/iommufd_private.h @@ -606,14 +606,6 @@ void iommufd_viommu_destroy(struct iommufd_object *obj); int iommufd_vdevice_alloc_ioctl(struct iommufd_ucmd *ucmd); void iommufd_vdevice_destroy(struct iommufd_object *obj); -struct iommufd_vdevice { - struct iommufd_object obj; - struct iommufd_ctx *ictx; - struct iommufd_viommu *viommu; - struct device *dev; - u64 id; /* per-vIOMMU virtual ID */ -}; - #ifdef CONFIG_IOMMUFD_TEST int iommufd_test(struct iommufd_ucmd *ucmd); void iommufd_selftest_destroy(struct iommufd_object *obj); diff --git a/include/linux/iommufd.h b/include/linux/iommufd.h index 999498ddab75..df7a25117e3b 100644 --- a/include/linux/iommufd.h +++ b/include/linux/iommufd.h @@ -104,6 +104,14 @@ struct iommufd_viommu { unsigned int type; }; +struct iommufd_vdevice { + struct iommufd_object obj; + struct iommufd_ctx *ictx; + struct iommufd_viommu *viommu; + struct device *dev; + u64 id; /* per-vIOMMU virtual ID */ +}; + /** * struct iommufd_viommu_ops - vIOMMU specific operations * @destroy: Clean up all driver-specific parts of an iommufd_viommu. The memory @@ -120,6 +128,12 @@ struct iommufd_viommu { * array->entry_num to report the number of handled requests. * The data structure of the array entry must be defined in * include/uapi/linux/iommufd.h + * @vdevice_alloc: Allocate a vDEVICE object and init its driver-level structure + * or HW procedure. Note that the core-level structure is filled + * by the iommufd core after calling this op + * @vdevice_destroy: Clean up all driver-specific parts of an iommufd_vdevice. The + * memory of the vDEVICE will be free-ed by iommufd core after + * calling this op */ struct iommufd_viommu_ops { void (*destroy)(struct iommufd_viommu *viommu); @@ -128,6 +142,9 @@ struct iommufd_viommu_ops { const struct iommu_user_data *user_data); int (*cache_invalidate)(struct iommufd_viommu *viommu, struct iommu_user_data_array *array); + struct iommufd_vdevice *(*vdevice_alloc)(struct iommufd_viommu *viommu, + struct device *dev, u64 id); + void (*vdevice_destroy)(struct iommufd_vdevice *vdev); }; #if IS_ENABLED(CONFIG_IOMMUFD) @@ -252,6 +269,21 @@ static inline int iommufd_viommu_report_event(struct iommufd_viommu *viommu, ret; \ }) +#define iommufd_vdevice_alloc(viommu, drv_struct, member) \ + ({ \ + drv_struct *ret; \ + \ + static_assert(__same_type(struct iommufd_viommu, *viommu)); \ + static_assert(__same_type(struct iommufd_vdevice, \ + ((drv_struct *)NULL)->member)); \ + static_assert(offsetof(drv_struct, member.obj) == 0); \ + ret = (drv_struct *)_iommufd_object_alloc( \ + viommu->ictx, sizeof(drv_struct), IOMMUFD_OBJ_VDEVICE);\ + if (!IS_ERR(ret)) \ + ret->member.viommu = viommu; \ + ret; \ + }) + /* Helper for IOMMU driver to destroy structures created by allocators above */ #define iommufd_struct_destroy(ictx, drv_struct, member) \ ({ \ diff --git a/drivers/iommu/iommufd/viommu.c b/drivers/iommu/iommufd/viommu.c index 3d4d325adeaa..a65153458a26 100644 --- a/drivers/iommu/iommufd/viommu.c +++ b/drivers/iommu/iommufd/viommu.c @@ -96,6 +96,9 @@ void iommufd_vdevice_destroy(struct iommufd_object *obj) container_of(obj, struct iommufd_vdevice, obj); struct iommufd_viommu *viommu = vdev->viommu; + if (viommu->ops && viommu->ops->vdevice_destroy) + viommu->ops->vdevice_destroy(vdev); + /* xa_cmpxchg is okay to fail if alloc failed xa_cmpxchg previously */ xa_cmpxchg(&viommu->vdevs, vdev->id, vdev, NULL, GFP_KERNEL); refcount_dec(&viommu->obj.users); @@ -130,7 +133,11 @@ int iommufd_vdevice_alloc_ioctl(struct iommufd_ucmd *ucmd) goto out_put_idev; } - vdev = iommufd_object_alloc(ucmd->ictx, vdev, IOMMUFD_OBJ_VDEVICE); + if (viommu->ops && viommu->ops->vdevice_alloc) + vdev = viommu->ops->vdevice_alloc(viommu, idev->dev, virt_id); + else + vdev = iommufd_object_alloc(ucmd->ictx, vdev, + IOMMUFD_OBJ_VDEVICE); if (IS_ERR(vdev)) { rc = PTR_ERR(vdev); goto out_put_idev; From patchwork Fri Apr 11 06:37:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880426 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2049.outbound.protection.outlook.com [40.107.223.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 C106027EC79; Fri, 11 Apr 2025 06:38:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353518; cv=fail; b=q6ac7GyVwnhA2Orx+8LyRJbAI/20BXuZJj2KN/7h4tDKX+xse/JjsMJKrWcIoSc3G1W6E74+rQu3JgnCu3tah5v/zNktztUJPjAo0uWVwKqSkAgL3PYWNTuM5S8/YfPCwPDkdRHX8hnez0/hTaZaGCeZk+aPJmVCNsNQtikpIJY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353518; c=relaxed/simple; bh=iAoXGDtUkQqoJcZpgz+LDLyFRsCQVlR2wQx9JNjNgRg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lOwZQTHROpbRR8eIEfg/yXVlb1Pbci68BylHnaW1J0YwzSRL+Xhb/fdVSsIWNCczUkSN/zCXg/UoXfIfNXoegz3LOou6SmNBbvl1/9WZUMyGAr/QzsX/heOyOS+Rdq7ckIDqiJUBa1c+MMPzg7EydAJR+VDfJj5SE9bV4cnNc/g= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=e+gn4Uw5; arc=fail smtp.client-ip=40.107.223.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="e+gn4Uw5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hQW0ovYGgCKdVs4tVT/RBXGNTpDYgVqudXyg8uWolxvvrxBf4InjCWQ6IEPkVNqlKhr8aeIaqDgoOKj25t7UNTPxpTPiDQiTFDoWYl0IGL9eAPBvq3YPLBbwsAoBaVFWAtPwuaC4sASLlF3J7vVq51gaoxeXc5OXfq0/vgRT05MoDpPSCoyLPHYjCS7drF1SNqeoXGH5TNN5pJ8Mp5/rxffH9e9MpESfaLnQIaKxW7RAoad+YDHA/5eK089e8dg11GSERSxXX6Ixqprak52LL9gnrqHpQX9XpG+6/u9xn3Vs0CuFi66sswR8hbAKUx3/GJmRYwjhqC5n30dTsicutw== 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=VFqcBr+ohlPqHDyftPMeCDzZYNoO5ZhtxFwVVEwdyrI=; b=nPoFtv9tut4Z4rKzy6dEbu0Tzcg39o9ngRCDpZ3Irmy4/IBLcJWgkoEtNB3bqf1pOUF2Lxs7j7OQ7mgQ/uKRH7KDpFfQfrqSFPOCRfuh9INJ6pvFGRJ0LbAUBTSB85Li+wJHbkmqDfJ0Vrt+O1LZjSIdCbQTqh069+Rr1gsaVmnzDDzBriSakRggh+GNzqQTfTlGDWIJki0Xq7pdEy1BTjGYMGjRbD478mQ1zGa470XejfH5eN8rEX5S6dYw/qLI3wtzL6UOvrdXBf6A07ar7YApq4s83EZvESt8QPIDyPgGb48OJ3uAywqyh/HL9NgcJWPM7vQ8ru+4OResOlAcYA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VFqcBr+ohlPqHDyftPMeCDzZYNoO5ZhtxFwVVEwdyrI=; b=e+gn4Uw5OYPBD8bi9X3GgPwZbfQftKwZ+EHgaVWh/4aCNp3L6dmoEVdOS5Au0LWfFnpg0kMoE72So4C4eh1T7EOkC73wFHStOBs4u4X6xVV9ZF94hrmtFj0Op2CGZ+ptoqyWb9w4g9YkBXTqYY62/G2H0V6rZVTkhPJfRlcGtzGvZ3HqmSriTmTBhRfyKTMkj/UIDxEtQBMu7IQ9tzgcL5WcyqUTq06QGltM/kn4Gmg+Zoduciz0gMjvJi0MF1TpAiSOKRQoLHSF69ttloczryBFCplptCWwG3Zb5qC2jm4f7DGD6zbv6MDOqy2Eou0WGSSmyic6YQiAmUaZl4pCng== Received: from SJ0PR05CA0078.namprd05.prod.outlook.com (2603:10b6:a03:332::23) by PH7PR12MB5760.namprd12.prod.outlook.com (2603:10b6:510:1d3::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.26; Fri, 11 Apr 2025 06:38:30 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:a03:332:cafe::db) by SJ0PR05CA0078.outlook.office365.com (2603:10b6:a03:332::23) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.10 via Frontend Transport; Fri, 11 Apr 2025 06:38:29 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.13 via Frontend Transport; Fri, 11 Apr 2025 06:38:29 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:20 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:20 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:19 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 08/16] iommufd/viommu: Introduce IOMMUFD_OBJ_VCMDQ and its related struct Date: Thu, 10 Apr 2025 23:37:47 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|PH7PR12MB5760:EE_ X-MS-Office365-Filtering-Correlation-Id: caacb0d9-7c6f-42d4-823c-08dd78c378e5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|1800799024|376014|7416014|82310400026; X-Microsoft-Antispam-Message-Info: otpnm5mxH5aD+0zH105jKLZMGgLU2V6qORpPLA9ZcvjxmvD8nexT7AucQ9E7dN3Kij7kqNkpRanPd00SE/zXwbIHdG9A91x3b9/D6SZNbhbeZ63Vf7h0yn6MrST5vuY7Hgh2L5Xa60Gp+ajilNzOByhMsS6Pe+Iob3maFsQzuLVh5W7XRQlW4GgABYHfIQaKs2w5KrtEvDwAiACU1FmSZEZq8SBkxJMmpA+yO9hpCK5Rp1vV2N8bUF7xL355WTdQQcL42PB39AWWUyE54jKkfRMPqPZ/xKqdWwlQiAfJ46Gu828XBaDmk3tj7UrmnCeFqhV5Tqav3oj4F4b5iv8ictA8zVc/9ZLRFPXNMW9vZNID/I3JOZz9mODbHbJRBGcKF7wUxhO97X3JU2TxBXjlaXaUXfV44nqIIpjIRgIxBUmKtTvUbW/1arlvKSflW2whEIluD+qEzKPM0X8y6mXFS3MLiZ/ZzBI10t5h5DmjTpldnH3jWFxltMSOby0AtJRhmwV03BB46nVNIHPsODpxz2iGDyEQjs0joiuH6E3MdRXotEDmqVm+vGUaldVsK4zwhNwZPk6lVtpeVFnncZTK5qWBMicZSoYFdqDNt4VL9Enbrt6jmsdOLeijK4A6JhHdgtPaAG5ycXWlfxfyup4oXm/g9oy7Qb28LILlUri4b2neEeCfQW6rtkHmXRPFgyWZZIts1GI2yqyFt2Suajkn16vXLVRV5gC/4w8w/avicELJM1I9LIrmbldf6pKdRKGeC3OYZ/aE6lOAvWkfFuwBBubnEYEMWue9glxLkO8qEt9Djh3MG/IZdhiFIlqwWQ2fo2eQj3w1CUv+MLCgEZpMj4TRrOBd152DDOILdZUdQ3dAwYC4nqsRaWiQLrxKkVkfvUdXsIr+OwjSJkX4UDlk2ak9Me0TCeJdbvJ482fXiez1WJxeMrSeWG61twzrZpm0LJjUXvo/QspCEbaAiXG5AZF3DcbgOHB6+VqfyVimc6slry3LOqiVxgd6m3jl1ZriymiprW7m31Lkqds5k9cQa/ub8ivuWCBlCmRlQsP3Z6r7AzCQA0k8IVq3HPhyfVfqEvab3DtwmxZHv2t7xiPbnO5W+/asExw1QFYHcdyj/uBpIqFe0sCVzpSo8frZ53S7FkPC7DySXbZJzIN4LsYmY4jcT/DU1pycYgpIWE499XamJs6/S1aGMwMGbJaEvIPwyqtXAiP5Iv9rl0u0tP9KCWgzfPnx+AJTuSvkCkx8y/amlmyfOeZBkwfENk9VIeIOY12I3hlsNXAA5ODLk887VPOvuD0JGa++tG3wcKJTnwy1kGNDdwQC+L9dedIat6I9wPJeqUYDzmEuBaVqnuVPsTIv+PsRbxOMkj1xGuzSI5ijkhoe5KvRw13+Zk7I3Y3mFYqBxV3Azi+0kr/7NYvpZ6MmeqO9XypUR2NKN5jjsQcmO1cp5hflKjsLk3GRDdi7o03ei2pyj+66wb9SvnUfzkdozJLQp0+m7bHqLRSZRnookte5/jxb5pSi59MHxNwP X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700013)(1800799024)(376014)(7416014)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:29.8116 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: caacb0d9-7c6f-42d4-823c-08dd78c378e5 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB5760 Add a new IOMMUFD_OBJ_VCMDQ with an iommufd_vcmdq structure, representing a command queue type of physical HW passed to or shared with a user space VM. This vCMDQQ object, is a subset of vIOMMU virtualization resources of a physical IOMMU's, such as: - NVIDIA's virtual command queue - AMD vIOMMU's command buffer Inroduce a struct iommufd_vcmdq and its allocator iommufd_vcmdq_alloc(). Also, add a pair of viommu ops for iommufd to forward user space ioctls to IOMMU drivers. Signed-off-by: Nicolin Chen --- include/linux/iommufd.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/include/linux/iommufd.h b/include/linux/iommufd.h index df7a25117e3b..4118eaece1a5 100644 --- a/include/linux/iommufd.h +++ b/include/linux/iommufd.h @@ -37,6 +37,7 @@ enum iommufd_object_type { IOMMUFD_OBJ_VIOMMU, IOMMUFD_OBJ_VDEVICE, IOMMUFD_OBJ_VEVENTQ, + IOMMUFD_OBJ_VCMDQ, #ifdef CONFIG_IOMMUFD_TEST IOMMUFD_OBJ_SELFTEST, #endif @@ -112,6 +113,12 @@ struct iommufd_vdevice { u64 id; /* per-vIOMMU virtual ID */ }; +struct iommufd_vcmdq { + struct iommufd_object obj; + struct iommufd_ctx *ictx; + struct iommufd_viommu *viommu; +}; + /** * struct iommufd_viommu_ops - vIOMMU specific operations * @destroy: Clean up all driver-specific parts of an iommufd_viommu. The memory @@ -134,6 +141,11 @@ struct iommufd_vdevice { * @vdevice_destroy: Clean up all driver-specific parts of an iommufd_vdevice. The * memory of the vDEVICE will be free-ed by iommufd core after * calling this op + * @vcmdq_alloc: Allocate an iommufd_vcmdq as a user space command queue for a + * @viommu instance. Queue specific @user_data must be defined in + * the include/uapi/linux/iommufd.h header. + * @vcmdq_free: Free all driver-specific parts of an iommufd_vcmdq. The memory + * of the iommufd_vcmdq will be free-ed by iommufd core */ struct iommufd_viommu_ops { void (*destroy)(struct iommufd_viommu *viommu); @@ -145,6 +157,10 @@ struct iommufd_viommu_ops { struct iommufd_vdevice *(*vdevice_alloc)(struct iommufd_viommu *viommu, struct device *dev, u64 id); void (*vdevice_destroy)(struct iommufd_vdevice *vdev); + struct iommufd_vcmdq *(*vcmdq_alloc)( + struct iommufd_viommu *viommu, + const struct iommu_user_data *user_data); + void (*vcmdq_free)(struct iommufd_vcmdq *vcmdq); }; #if IS_ENABLED(CONFIG_IOMMUFD) @@ -284,6 +300,21 @@ static inline int iommufd_viommu_report_event(struct iommufd_viommu *viommu, ret; \ }) +#define iommufd_vcmdq_alloc(viommu, drv_struct, member) \ + ({ \ + drv_struct *ret; \ + \ + static_assert(__same_type(struct iommufd_viommu, *viommu)); \ + static_assert(__same_type(struct iommufd_vcmdq, \ + ((drv_struct *)NULL)->member)); \ + static_assert(offsetof(drv_struct, member.obj) == 0); \ + ret = (drv_struct *)_iommufd_object_alloc( \ + viommu->ictx, sizeof(drv_struct), IOMMUFD_OBJ_VCMDQ); \ + if (!IS_ERR(ret)) \ + ret->member.viommu = viommu; \ + ret; \ + }) + /* Helper for IOMMU driver to destroy structures created by allocators above */ #define iommufd_struct_destroy(ictx, drv_struct, member) \ ({ \ From patchwork Fri Apr 11 06:37:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880424 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2050.outbound.protection.outlook.com [40.107.243.50]) (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 33FFC27F4F8; Fri, 11 Apr 2025 06:38:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.243.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353523; cv=fail; b=pizeekgZiTnQluaIKPoNR+1lX+RioBZKK377JTBOVpIoQcrQUhNkj3zWzvRGvLwys6NV+gYSPUTJKwAhq0WeHHt/xxdJf1aeVKWeww0Csw6KvHTDyP1ZtJowZ5B/yEU4+yrLMu8FmMzu8yfwswWVeOOcCDabDSW36k/M+0KZZTY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353523; c=relaxed/simple; bh=qDPBk7iBhP4NzNv1Vf8C5EUudX8yEi+FOGLhLDv/8Mk=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kapW7vxVhCtDWI8F6UuwkjrDmGCf3L+P4l0leFpJPAYfbSYI6hDbxbONQy82mKEB+N8+SgM3U882cE/EXen7smm1rUgROd9ibSjj8Ea2Q9r0rQKMkTVrot30ES8upKWtvjKNFfZ4gfCcuigNPewgHOcg78VYDby1Csu46AARQOk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=XozmCHO+; arc=fail smtp.client-ip=40.107.243.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="XozmCHO+" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ByYD6MDb869XC7BL3doVq7HeHNKtoC8hufWUU1KMbYjt3BkyGiHoXiRuHXWDltVFUZESx0JVKAph6cHltQI33a83HBoWB8TqS/nC188oZsY/TmbaGPh2HaxqdR+2KC74jBsl594g/ycl61Rh9atglTOwHuGr9isgl/V2zdpIVGkUFkxIzG0XCjxhZL0FqELxCKwEdobFpaplRD3sbaKG15pWq0zT/dEnGiPa3s7BubnrvHWWonwZsW8l0nNpZC5A/Qd3FoqNuFKAgk2cDO0gRf99nv7ldI/EUm03RtcJAqkjzRukQhTAo+GrKnJTegG6N+9Dn53aPYiLR4N59f5YcQ== 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=Yw7FhyMnLZ7X1nN+jxulfpmQwgu2NZLbUsJpYinZ/vw=; b=q8WNLhThKEQU+MrXqaYa0Jp9Gcnmr+lV/74m2ufbu/6bX5lCUU9vEEDOxLxdUJ/xtgC44NRxZmNCDOGI5nE9OmFr3zabNWF/X/yZZkYN8oplRf5HC+s+btMllgJCFpNW+k9Iaup14htniQdHvTethLLDWMkd6vvApzP/DABmBNCmz1XieZPTvu6D5oJgLZbjJ9I5ZIlNxrBHzzpPtXVvXe+R08dA/ZwKPbxXwvecmw2CnlQzJojWoS3ue4PjNF90Tn5oV0q3W1UAJQWpeXsqwBCHJal7kqKX1M8w8HVGKHSnQfvA9hvnEUAunqqixd2gUO7m/p3U13nv62aeWnuPuA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Yw7FhyMnLZ7X1nN+jxulfpmQwgu2NZLbUsJpYinZ/vw=; b=XozmCHO+FTWJHrUT3g+EqZCEpSQ/1yG6jzjRIdI5pwkup+nrcYrWYfB5S2TpqRKS25TCNyWPdD3Qs4xQcRLRIe4aUPkG4YirHq4mLUWEaRR12l6mvElhLkkzkmVy+jCq/iuXmJ8r+vpfDKyxmfURHEBwfs5TwCqndyher6CWhpo9kWl5nvkU7xOl8u+0Y8A/4reqAMH/9Cmzayi48q4qvqbvy/fZI4cp0cQg5fRo7WD2J1zFy/JdpEb1Gi2uy3Y03Fms8dNziR4WwdgUdwWz9PvzYIiFksWeS8T62sTifffbG06CZZVwakkBF+WaJP1PGceLj1a8TrntrQBIvWkdZw== Received: from PH7PR17CA0034.namprd17.prod.outlook.com (2603:10b6:510:323::12) by BL1PR12MB5851.namprd12.prod.outlook.com (2603:10b6:208:396::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Fri, 11 Apr 2025 06:38:38 +0000 Received: from CY4PEPF0000E9DB.namprd05.prod.outlook.com (2603:10b6:510:323:cafe::8d) by PH7PR17CA0034.outlook.office365.com (2603:10b6:510:323::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.36 via Frontend Transport; Fri, 11 Apr 2025 06:38:38 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000E9DB.mail.protection.outlook.com (10.167.241.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Fri, 11 Apr 2025 06:38:37 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:22 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:22 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:20 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 09/16] iommufd/viommmu: Add IOMMUFD_CMD_VCMDQ_ALLOC ioctl Date: Thu, 10 Apr 2025 23:37:48 -0700 Message-ID: <5cd2c7c4d92c79baf0cfc59e2a6b3e1db4e86ab8.1744353300.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9DB:EE_|BL1PR12MB5851:EE_ X-MS-Office365-Filtering-Correlation-Id: 53cee890-1170-42bc-9218-08dd78c37db8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|7416014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: k+zt0zlH7AN9Q+hfra3xUZ1OzoZISaxOOum2rJRkCh5mc32TVW4hzMfjp1p95E5xSSxBwT0HHIGeECNZs4WglZ6LyAvNLKKOSEsQ2LU9pZKcZI3/C6mPETwmA3f64IC3qxGaLb0c4h2gZ86vE5nUjEq73N26cvEh9EzSdyIInm8kZ3CxeobLR0/Idrn9BgadbmGjEL6rqa+c7Qo9MbtqqiYMhHqJuF9XkFsGgBdZumBFftDBVNckxucv5BcechsdTGoSvfDZbNvXiasWLtk+HyA4ZT3TI1Rg77o9rhxKXOnPrLDRRPUdQBUL0lezwCj8xlgcQ2sfVMDjtQLY4EjkbB60L0w0eBX5koNwdjRtY4dlt9KkIfYobF7rokgC5vpmCHDHjC8YgAgkxmCOaS6krZvYghxfUPOkFK2RthydxKeJMkIvFfZnbFdJRDCLK9wIKLq4gGpRwnplO8BZXyMp7b4vr+71NiAvtlN5H58mUmPabmVZqZB2rLRZ0+lbznoFHl4IHkcwhZErgCOuMWRVlCQcJYoarzUA5qmVjA+VsRBHpAzXSFFJof//r6uikHqIKWqSXfWrVOrBk1Wjjbh/Llh06YaVqmEdWWEwz83J0RkFxSQ39cvfRTQw3FDn9d07+SlB6x+C25igx/bk/xWLBdQAZ2EI46+nWShAC/0lPhsZmLXmejpfUytWF8DuP9Y4GRUCdtJzNaohmSag07OeMOCk7ovYddc76tOGTMv+HL2zWIfpaqYcvwcCX0D7iE+Lms0J3dahA57bDhh4QhmeI5DAsvIRGvF0H6goe6o4hRDAiuL5FVVC2B7vrB6U25dszGAbmmLWqR4Mbk+kHpilsDR/ILf7+osiZCwX1pIKukbVM+c6v2GrOBKn7xhyH1RQfHKG+Qub2nmba6H2dK2ChXDTUpIRbECR3p2E9gkZN/1n47M4xYWGvrVGsbWixA+MdmMEXRiZzSb13ACEm9XTSbyM+WcPYajeDVvfpOtHEnDq42sNql1GxpoyIbwpCCpIwn9JU/BFx8xY4pLDy+vXAC2zGYfk2avkBK+2lvaLcvXm6loxoHlumBgN/7cIswpIicqo8sXRB8dRYF9+Ed7C5FpNeooHVfi8JFyLkIyRHw2rL0PbE2PjKJkwDfoQgz7f6Lvj2/X1+PhnuC8tuAx1TVY6+9/bYOux/QlCXelQzG/V2oGr5GR/ZQMzQaHG61CPYASds0GDE2zchqNo9YRlizdYP13PAteh5OIOKJbK84qA9R804EQMRo97G8yybk4+vA6EbNJcyW3A9hM9YgBKBqSQtULNOWD338SVxOcmvpeOwE6H6cBFBz2c7N2dszInwHgGUk74P+E2K8MUfWK+OKjWRo25CKmwL4tQat3Uz8pcT7RV8cfs3lZKXZ8YJGOUTwaKWlZrPFiJZ6Mxz196y1+MfD/TdMPU6oI7QX7Oqqp6+YlTL8F1FYmI06E0wGLDtSB1t5FjFG8ita/euL82+dWdbRfJfnOQdPN6NrgkOQHi65Q7omepFMuO+qIoa2o+ X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(7416014)(36860700013)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:37.8119 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 53cee890-1170-42bc-9218-08dd78c37db8 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9DB.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5851 Introduce a new IOMMUFD_CMD_VCMDQ_ALLOC ioctl for user space to allocate a vCMDQ for a vIOMMU object. Simply increase the refcount of the vIOMMU. Signed-off-by: Nicolin Chen --- drivers/iommu/iommufd/iommufd_private.h | 2 + include/uapi/linux/iommufd.h | 32 +++++++++++++ drivers/iommu/iommufd/main.c | 6 +++ drivers/iommu/iommufd/viommu.c | 61 +++++++++++++++++++++++++ 4 files changed, 101 insertions(+) diff --git a/drivers/iommu/iommufd/iommufd_private.h b/drivers/iommu/iommufd/iommufd_private.h index 8d96aa514033..da35ffcc212b 100644 --- a/drivers/iommu/iommufd/iommufd_private.h +++ b/drivers/iommu/iommufd/iommufd_private.h @@ -605,6 +605,8 @@ int iommufd_viommu_alloc_ioctl(struct iommufd_ucmd *ucmd); void iommufd_viommu_destroy(struct iommufd_object *obj); int iommufd_vdevice_alloc_ioctl(struct iommufd_ucmd *ucmd); void iommufd_vdevice_destroy(struct iommufd_object *obj); +int iommufd_vcmdq_alloc_ioctl(struct iommufd_ucmd *ucmd); +void iommufd_vcmdq_destroy(struct iommufd_object *obj); #ifdef CONFIG_IOMMUFD_TEST int iommufd_test(struct iommufd_ucmd *ucmd); diff --git a/include/uapi/linux/iommufd.h b/include/uapi/linux/iommufd.h index cc90299a08d9..428f1e9e6239 100644 --- a/include/uapi/linux/iommufd.h +++ b/include/uapi/linux/iommufd.h @@ -56,6 +56,7 @@ enum { IOMMUFD_CMD_VDEVICE_ALLOC = 0x91, IOMMUFD_CMD_IOAS_CHANGE_PROCESS = 0x92, IOMMUFD_CMD_VEVENTQ_ALLOC = 0x93, + IOMMUFD_CMD_VCMDQ_ALLOC = 0x94, }; /** @@ -1147,4 +1148,35 @@ struct iommu_veventq_alloc { __u32 __reserved; }; #define IOMMU_VEVENTQ_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VEVENTQ_ALLOC) + +/** + * enum iommu_vcmdq_type - Virtual Queue Type + * @IOMMU_VCMDQ_TYPE_DEFAULT: Reserved for future use + */ +enum iommu_vcmdq_data_type { + IOMMU_VCMDQ_TYPE_DEFAULT = 0, +}; + +/** + * struct iommu_vcmdq_alloc - ioctl(IOMMU_VCMDQ_ALLOC) + * @size: sizeof(struct iommu_vcmdq_alloc) + * @flags: Must be 0 + * @viommu_id: viommu ID to associate the virtual queue with + * @type: One of enum iommu_vcmdq_type + * @out_vcmdq_id: The ID of the new virtual queue + * @data_len: Length of the type specific data + * @data_uptr: User pointer to the type specific data + * + * Allocate a virtual queue object for vIOMMU-specific HW-accelerated queue + */ +struct iommu_vcmdq_alloc { + __u32 size; + __u32 flags; + __u32 viommu_id; + __u32 type; + __u32 out_vcmdq_id; + __u32 data_len; + __aligned_u64 data_uptr; +}; +#define IOMMU_VCMDQ_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VCMDQ_ALLOC) #endif diff --git a/drivers/iommu/iommufd/main.c b/drivers/iommu/iommufd/main.c index 2b9ee9b4a424..27473aff150f 100644 --- a/drivers/iommu/iommufd/main.c +++ b/drivers/iommu/iommufd/main.c @@ -303,6 +303,7 @@ union ucmd_buffer { struct iommu_ioas_map map; struct iommu_ioas_unmap unmap; struct iommu_option option; + struct iommu_vcmdq_alloc vcmdq; struct iommu_vdevice_alloc vdev; struct iommu_veventq_alloc veventq; struct iommu_vfio_ioas vfio_ioas; @@ -358,6 +359,8 @@ static const struct iommufd_ioctl_op iommufd_ioctl_ops[] = { IOCTL_OP(IOMMU_IOAS_UNMAP, iommufd_ioas_unmap, struct iommu_ioas_unmap, length), IOCTL_OP(IOMMU_OPTION, iommufd_option, struct iommu_option, val64), + IOCTL_OP(IOMMU_VCMDQ_ALLOC, iommufd_vcmdq_alloc_ioctl, + struct iommu_vcmdq_alloc, data_uptr), IOCTL_OP(IOMMU_VDEVICE_ALLOC, iommufd_vdevice_alloc_ioctl, struct iommu_vdevice_alloc, virt_id), IOCTL_OP(IOMMU_VEVENTQ_ALLOC, iommufd_veventq_alloc, @@ -501,6 +504,9 @@ static const struct iommufd_object_ops iommufd_object_ops[] = { [IOMMUFD_OBJ_IOAS] = { .destroy = iommufd_ioas_destroy, }, + [IOMMUFD_OBJ_VCMDQ] = { + .destroy = iommufd_vcmdq_destroy, + }, [IOMMUFD_OBJ_VDEVICE] = { .destroy = iommufd_vdevice_destroy, }, diff --git a/drivers/iommu/iommufd/viommu.c b/drivers/iommu/iommufd/viommu.c index a65153458a26..c5a0db132e03 100644 --- a/drivers/iommu/iommufd/viommu.c +++ b/drivers/iommu/iommufd/viommu.c @@ -170,3 +170,64 @@ int iommufd_vdevice_alloc_ioctl(struct iommufd_ucmd *ucmd) iommufd_put_object(ucmd->ictx, &viommu->obj); return rc; } + +void iommufd_vcmdq_destroy(struct iommufd_object *obj) +{ + struct iommufd_vcmdq *vcmdq = + container_of(obj, struct iommufd_vcmdq, obj); + struct iommufd_viommu *viommu = vcmdq->viommu; + + if (viommu->ops->vcmdq_free) + viommu->ops->vcmdq_free(vcmdq); + refcount_dec(&viommu->obj.users); +} + +int iommufd_vcmdq_alloc_ioctl(struct iommufd_ucmd *ucmd) +{ + struct iommu_vcmdq_alloc *cmd = ucmd->cmd; + const struct iommu_user_data user_data = { + .type = cmd->type, + .uptr = u64_to_user_ptr(cmd->data_uptr), + .len = cmd->data_len, + }; + struct iommufd_vcmdq *vcmdq; + struct iommufd_viommu *viommu; + int rc; + + if (cmd->flags || cmd->type == IOMMU_VCMDQ_TYPE_DEFAULT) + return -EOPNOTSUPP; + if (!cmd->data_len) + return -EINVAL; + + viommu = iommufd_get_viommu(ucmd, cmd->viommu_id); + if (IS_ERR(viommu)) + return PTR_ERR(viommu); + + if (!viommu->ops || !viommu->ops->vcmdq_alloc) { + rc = -EOPNOTSUPP; + goto out_put_viommu; + } + + vcmdq = viommu->ops->vcmdq_alloc(viommu, + user_data.len ? &user_data : NULL); + if (IS_ERR(vcmdq)) { + rc = PTR_ERR(vcmdq); + goto out_put_viommu; + } + + vcmdq->viommu = viommu; + refcount_inc(&viommu->obj.users); + vcmdq->ictx = ucmd->ictx; + cmd->out_vcmdq_id = vcmdq->obj.id; + rc = iommufd_ucmd_respond(ucmd, sizeof(*cmd)); + if (rc) + goto out_abort; + iommufd_object_finalize(ucmd->ictx, &vcmdq->obj); + goto out_put_viommu; + +out_abort: + iommufd_object_abort_and_destroy(ucmd->ictx, &vcmdq->obj); +out_put_viommu: + iommufd_put_object(ucmd->ictx, &viommu->obj); + return rc; +} From patchwork Fri Apr 11 06:37:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880692 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on2081.outbound.protection.outlook.com [40.107.96.81]) (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 6503027F4E8; Fri, 11 Apr 2025 06:38:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.96.81 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353523; cv=fail; b=Tc02fIyxvjRjeiq1mEZYhbCm0kl3uqZyNqMVtBjvuSeuj3IbA535MeOkbMw9Tx5dOouCvW9LsXqw5NSPsqNa7tPla+Jr1OlSVtmcrUkNNWg/R2ANk07mgfXlQ8Nou4u1WIclTUhDrQh/RZAcn02iKadOERg50ze0fGSIbWvMhPc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353523; c=relaxed/simple; bh=XCbYZHI5uFUj/CvZdhl4I0JX605Iaz3twPRj1zFLfes=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=RX+TVJXATrqgUzQjJQhGgCNt/7R4U0ncvcFM5OOdevfsezoAoHzIpjw3rP+fHWtumamh7CqM0PhehgpqcWyhTEbPavxxcNYn1zGmm1Fr5qVjEglwbXy0NBIg1kAsxnTBwA+5+p/NLps9vGzP8OOYGqgYq8P8cKwrX5frf5SAEY4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=QXxXAohm; arc=fail smtp.client-ip=40.107.96.81 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="QXxXAohm" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=j+NtqnwUQqWjuRMUs60FM4n5NL5hvp/iNl+9A8Ub1wNZCl6g1/inSmnSm/GqWgPF6DT9dGvYUzg52I3y1NtODaY+255z3FXLLbEYNIEJoLFHhi/AgzYm9eHF//YP2pQ51fbMC34lmxNYzsge/IBErGtl7zrlDyXfGi46T12ssB367Dw/tOs1xvcN23yxb6VwPmxkfbvUPleGoa+vtZvRgzo5kFJWm81KypDt07k7t2Dn5MerQ5sxU6/zu5roFMrlMOGxWehH4lZQmJz6qvbsEYmXpQ9gMXrnWN47SISEt9cPFKFqIX/Ve8A3ZOSerVJ9+6eWwgu4+oA9Zv5miaudPw== 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=Wiv4jNCKkK/XFndUVZMB069pW6FTkLz/CLTzAqn3G4Q=; b=kZk+yGwUFeHzQBIMfnY2Dpqwpe4XBskgzRda0yNbTVxq1rrrvrFL9UfW9kLKlBe3kUyR7dNesvgEYiVChYl+h5s7s+DqxJt4pyB/eXBIXEgilonRGB41qpsu21C4685RZcbUdW9z80Ov6DMtbtTMz++3zfci72Fieo1gGuNaWpZhRcBYLusv8VuKjxeejLWZ/gVvp1hUPOsNZUaKFr+t5kd5euQTk4c5s+2/iLBjdDN/Q46xn4xQtEFeoKrxekNH5u1OWrziUv/gBkcJ99nXyvmwxBRDfx+DZoeuVpyVJjIbHGKGq3feyQcPynhbfEAcGvsTULzcsseqeV/JFQELew== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Wiv4jNCKkK/XFndUVZMB069pW6FTkLz/CLTzAqn3G4Q=; b=QXxXAohm+Q4UEAjPILTO/KwGaY6vU2FVcUBv7OcK5U3UUz3B7S+mSrqG7+LSwilDGSRXVY1y+ZVpHhAp+aSiIA1RPnwW8C2QvcNu0QrN6JCgpwaiHbPikaSbm94ZkwXGgS5ppaulvzyweaKwJeHFK6SRJFMKizIy4AEG/C+C1Pc6sB4zPiPO7nuP0GpsOet/R+04XKcoUjz1mEgbG+NSd1IXp0jHVbhXD+rW6z6TVt7aZd3jkoQqWSaF6vPjkEMcxLNUz3guKHK3juNYS8ua/O3li+DiNA/mR36aLAY25nVNIFMD/1aZkHOPXz32/YukReCwTdUAiSjc9e4rt6E4cQ== Received: from SJ0PR13CA0091.namprd13.prod.outlook.com (2603:10b6:a03:2c5::6) by CY8PR12MB7241.namprd12.prod.outlook.com (2603:10b6:930:5a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Fri, 11 Apr 2025 06:38:32 +0000 Received: from SJ5PEPF000001F4.namprd05.prod.outlook.com (2603:10b6:a03:2c5:cafe::ce) by SJ0PR13CA0091.outlook.office365.com (2603:10b6:a03:2c5::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8655.8 via Frontend Transport; Fri, 11 Apr 2025 06:38:32 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SJ5PEPF000001F4.mail.protection.outlook.com (10.167.242.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.13 via Frontend Transport; Fri, 11 Apr 2025 06:38:32 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:24 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:24 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:22 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 10/16] iommufd: Add mmap interface Date: Thu, 10 Apr 2025 23:37:49 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F4:EE_|CY8PR12MB7241:EE_ X-MS-Office365-Filtering-Correlation-Id: 03687d44-0c60-4581-ec93-08dd78c37a89 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|7416014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: NVEP8leBgfWEYXVa6IGHCTSFOappH5bCdPFRqoOjHPiP0kNR0xSHyIjIsqihO9fOX/htyg53vCZPwhsXa1O/Ov+wQDoV9HSOJGc+VdlwKT7dOVODcmlFlLgcoPbVDi5ZZJvfnSRvJyiVAAXicjukIGtCuxBGmd3siLcH9se0+OFEq3bZmmccNqv3D6aNRh1jolTcrWtBC9Mey1fwlCpK3gS0kK0xuOq6EnVaGxHSY0YIcGcGVFyGZp0U+reB0PdJ7ISk5w60Rbjlb1YErpIYoK1q1DrnI+BMkKajEj+dpnjS8oQuQxHv1nIlY88ASaYlJAiUmpk52nU5xXO/H+qh/S10fDjjSK371JVTWrGegjnn8NUiRYqvH5jPkpfee33v3Gst1xtnFUlAO9s8Y7KrfS7mEh3nDjSSkH6JP8d2u9eDzlEstuOsku9xwlbdaso0pep4RVTq0NZIMtvZoVXjK1LtPBfWfxU+oeJ2bSKG6pae2y0AkzJEw41IivanOA2c3qhcj0AE05SXYERaDYEcbIqTCOfS8c2UMHV+61hpp5B8nLkwqgGauokDF5P3/2BbfV12eCFCQ8UddnKANQ90OcqYru5hJMMecDtloOBXVnA1EzpUCPCavQcF5vTXwR/Lyoj8PvrW97wqgWzOK29MXh8RwlFHqzJsaQF/j32GkhXZ0e9zgU5WW6XTQPCiCcB1qutUdzdfXO56w58pxuh9aW+NtmYQCRJZ0PCQwtxNMIb16C+tiDbs+Glkz4H3BFBVIvwVSlJ9oVSbn3JVhyJFFD/3qF6aMF8NTrqW2Ip20Fe0GHiBLAGJs77od0xXTeaao5ziWCSBBZuGlhFYjhf5SS53ecmwxLzv2aB0/Aho/a7tuTs8ei3E0kESt0T8Eb4ecMFRgVMgh4gMX6ELnF6r1dZW/R0UX9aLfsOZsIW8+6hWotdI3rWW4ppcGo68HdUP9czjs6L2TLhu26C78yCC+t1VWhkHYaXkveFM0fG60F7x6ZXJtW6AMMdTIs7YpwmWD3xFr7/Eoslne1RQME/hYhN/Dwj8xMBKdHJvS4djZmanU4DA4k1xzQXUhgVBJB81CJR1kGsCCDE3JJyPrQ0sZHGl11jJQoiSwyAz09vXNKeZvRK38dTB9ck/UxlVMVoWPZ1c6KrCjMdWyiJ2ofOIlICGMyNfR814zaZUYXCb23MAk367VUbL08vGhfSTAs1zFdbgMWjtrbzYtiWa+rZ47cmMaA+3xKop77zaNT6QkI8aY2pVmtm8zlfao4Vg7TSzSQCz5u9Hb8T61kXiAN0B2xwNvbxC1JIAfUadbwdIX1Hx41SRYyepd0M7lNJFU/7jz4t4qvK5dbQN6qK7l5bm/i5KNrk5lRUNM04juWRChsdcqMoqMyby6mZxLns3k/WADf0MD9jx8lYViaR9RzqhpIceb/3ZdaWX2ssOm4QxWqjkleX/QDhQ4S/Gn22Anlh+HD4TfKUFsBIqfCPeO7igAFd6GT3riP7H2cAQSQjajMwwf75Ger8c0TrC/jg8X26g X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(7416014)(36860700013)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:32.5981 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 03687d44-0c60-4581-ec93-08dd78c37a89 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F4.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7241 For vIOMMU passing through HW resources to user space (VMs), add an mmap infrastructure to map a region of hardware MMIO pages. The addr and size should be given previously via a prior IOMMU_VIOMMU_ALLOC ioctl in some output fields of the structure. Maintain an mt_mmap per ictx for validations. And give IOMMU drivers a pair of helpers to add and delete mmap regions onto the mt_mmap. Signed-off-by: Nicolin Chen --- drivers/iommu/iommufd/iommufd_private.h | 9 ++++++ include/linux/iommufd.h | 15 ++++++++++ drivers/iommu/iommufd/driver.c | 40 +++++++++++++++++++++++++ drivers/iommu/iommufd/main.c | 35 ++++++++++++++++++++++ 4 files changed, 99 insertions(+) diff --git a/drivers/iommu/iommufd/iommufd_private.h b/drivers/iommu/iommufd/iommufd_private.h index da35ffcc212b..5be0248966aa 100644 --- a/drivers/iommu/iommufd/iommufd_private.h +++ b/drivers/iommu/iommufd/iommufd_private.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -44,6 +45,7 @@ struct iommufd_ctx { struct xarray groups; wait_queue_head_t destroy_wait; struct rw_semaphore ioas_creation_lock; + struct maple_tree mt_mmap; struct mutex sw_msi_lock; struct list_head sw_msi_list; @@ -55,6 +57,13 @@ struct iommufd_ctx { struct iommufd_ioas *vfio_ioas; }; +/* Entry for iommufd_ctx::mt_mmap */ +struct iommufd_mmap { + unsigned long pfn_start; + unsigned long pfn_end; + bool is_io; +}; + /* * The IOVA to PFN map. The map automatically copies the PFNs into multiple * domains and permits sharing of PFNs between io_pagetable instances. This diff --git a/include/linux/iommufd.h b/include/linux/iommufd.h index 4118eaece1a5..e9394e20c4dd 100644 --- a/include/linux/iommufd.h +++ b/include/linux/iommufd.h @@ -226,6 +226,9 @@ struct iommufd_object *_iommufd_object_alloc(struct iommufd_ctx *ictx, size_t size, enum iommufd_object_type type); void iommufd_object_abort(struct iommufd_ctx *ictx, struct iommufd_object *obj); +int iommufd_ctx_alloc_mmap(struct iommufd_ctx *ictx, phys_addr_t base, + size_t size, bool is_io, unsigned long *immap_id); +void iommufd_ctx_free_mmap(struct iommufd_ctx *ictx, unsigned long immap_id); struct device *iommufd_viommu_find_dev(struct iommufd_viommu *viommu, unsigned long vdev_id); int iommufd_viommu_get_vdev_id(struct iommufd_viommu *viommu, @@ -246,6 +249,18 @@ static inline void iommufd_object_abort(struct iommufd_ctx *ictx, { } +static inline int iommufd_ctx_alloc_mmap(struct iommufd_ctx *ictx, + phys_addr_t base, size_t size, + bool is_io, unsigned long *immap_id) +{ + return -EOPNOTSUPP; +} + +static inline void iommufd_ctx_free_mmap(struct iommufd_ctx *ictx, + unsigned long immap_id) +{ +} + static inline struct device * iommufd_viommu_find_dev(struct iommufd_viommu *viommu, unsigned long vdev_id) { diff --git a/drivers/iommu/iommufd/driver.c b/drivers/iommu/iommufd/driver.c index 7980a09761c2..abe0bdc1e9a3 100644 --- a/drivers/iommu/iommufd/driver.c +++ b/drivers/iommu/iommufd/driver.c @@ -50,6 +50,46 @@ void iommufd_object_abort(struct iommufd_ctx *ictx, struct iommufd_object *obj) } EXPORT_SYMBOL_NS_GPL(iommufd_object_abort, "IOMMUFD"); +/* Driver should report the immap_id to user space for mmap() syscalls */ +int iommufd_ctx_alloc_mmap(struct iommufd_ctx *ictx, phys_addr_t base, + size_t size, bool is_io, unsigned long *immap_id) +{ + struct iommufd_mmap *immap; + int rc; + + if (WARN_ON_ONCE(!immap_id)) + return -EINVAL; + if (base & ~PAGE_MASK) + return -EINVAL; + if (!size || size & ~PAGE_MASK) + return -EINVAL; + + immap = kzalloc(sizeof(*immap), GFP_KERNEL); + if (!immap) + return -ENOMEM; + immap->pfn_start = base >> PAGE_SHIFT; + immap->pfn_end = immap->pfn_start + (size >> PAGE_SHIFT) - 1; + immap->is_io = is_io; + + rc = mtree_alloc_range(&ictx->mt_mmap, immap_id, immap, sizeof(immap), + 0, LONG_MAX >> PAGE_SHIFT, GFP_KERNEL); + if (rc < 0) { + kfree(immap); + return rc; + } + + /* mmap() syscall would right-shift the immap_id to vma->vm_pgoff */ + *immap_id <<= PAGE_SHIFT; + return 0; +} +EXPORT_SYMBOL_NS_GPL(iommufd_ctx_alloc_mmap, "IOMMUFD"); + +void iommufd_ctx_free_mmap(struct iommufd_ctx *ictx, unsigned long immap_id) +{ + kfree(mtree_erase(&ictx->mt_mmap, immap_id >> PAGE_SHIFT)); +} +EXPORT_SYMBOL_NS_GPL(iommufd_ctx_free_mmap, "IOMMUFD"); + /* Caller should xa_lock(&viommu->vdevs) to protect the return value */ struct device *iommufd_viommu_find_dev(struct iommufd_viommu *viommu, unsigned long vdev_id) diff --git a/drivers/iommu/iommufd/main.c b/drivers/iommu/iommufd/main.c index 27473aff150f..d3101c76fcb8 100644 --- a/drivers/iommu/iommufd/main.c +++ b/drivers/iommu/iommufd/main.c @@ -213,6 +213,7 @@ static int iommufd_fops_open(struct inode *inode, struct file *filp) xa_init_flags(&ictx->objects, XA_FLAGS_ALLOC1 | XA_FLAGS_ACCOUNT); xa_init(&ictx->groups); ictx->file = filp; + mt_init_flags(&ictx->mt_mmap, MT_FLAGS_ALLOC_RANGE); init_waitqueue_head(&ictx->destroy_wait); mutex_init(&ictx->sw_msi_lock); INIT_LIST_HEAD(&ictx->sw_msi_list); @@ -410,11 +411,45 @@ static long iommufd_fops_ioctl(struct file *filp, unsigned int cmd, return ret; } +/* + * The pfn and size carried in @vma from the user space mmap call should be + * previously given to user space via a prior ioctl output. + */ +static int iommufd_fops_mmap(struct file *filp, struct vm_area_struct *vma) +{ + struct iommufd_ctx *ictx = filp->private_data; + size_t size = vma->vm_end - vma->vm_start; + struct iommufd_mmap *immap; + + if (size & ~PAGE_MASK) + return -EINVAL; + if (!(vma->vm_flags & VM_SHARED)) + return -EINVAL; + if (vma->vm_flags & VM_EXEC) + return -EPERM; + + /* vm_pgoff carries an index of an mtree entry/immap */ + immap = mtree_load(&ictx->mt_mmap, vma->vm_pgoff); + if (!immap) + return -EINVAL; + if (size >> PAGE_SHIFT > immap->pfn_end - immap->pfn_start + 1) + return -EINVAL; + + vma->vm_pgoff = 0; + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); + vm_flags_set(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP); + if (immap->is_io) + vm_flags_set(vma, VM_IO); + return remap_pfn_range(vma, vma->vm_start, immap->pfn_start, size, + vma->vm_page_prot); +} + static const struct file_operations iommufd_fops = { .owner = THIS_MODULE, .open = iommufd_fops_open, .release = iommufd_fops_release, .unlocked_ioctl = iommufd_fops_ioctl, + .mmap = iommufd_fops_mmap, }; /** From patchwork Fri Apr 11 06:37:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880422 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2072.outbound.protection.outlook.com [40.107.237.72]) (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 43C50283CBB; Fri, 11 Apr 2025 06:38:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.237.72 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353535; cv=fail; b=XYV6wCKZz5CIIi6M2M0ApxPSeC23S/tRNYCTmhgE9HTGiQH+f9twfuheANHCF115Dls127lVys3APDzJdsN2vg/CeCygr1B1fzaoEKgI6z8bk5P0rCP/Opsa0IQqZKUptF4PD0DYIq8CT2oS4vnZ3K0NNMkVNS3xMAq8LN1ZmKI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353535; c=relaxed/simple; bh=X+eUEKocwoHX/IuaXrMMLRw2a4ZVXayE/cSv1/bh/zw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=UVYdJikuNXQb+fmA55gVjdOTdPsx/BN9z10Bl/LPse0qDZRndwcvoaFXSDfuwRDYSTMRm273/DgiFkZmZOSYpIaRNa5CAM0ymzN8MpAu218Xx+bGIiggj+rRdxGK23rcRdKcGEdUz55Un30cA+xzLzfp3gGbPoEFk9PO4Wyjm7o= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Mr7I7bIq; arc=fail smtp.client-ip=40.107.237.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Mr7I7bIq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cWKe5M0t6v1veGHZttwh7safgskQIl3Hlasi0iJXP2yLa7PByhOGZJCMpwjz5xrsDD7lYQjRPjdJ2XuEGcDUpMJxVD8e5tUvCwPwPoi0I80axMQ9mGgB4mmyJi8id23TmaxwEo33R8Nig/o4VRQTEcGl3IrAf1u9WyDu3By/DzkBiK5OiOOP/nBKfQ5rBthejtbyujo3f1t21xAimGO52xmEiNH1h6Wun4gxPb3t57MOyOX5ORvRwan3QamaIM4NVqc95/hi54CvKeXbbfEzvtFXFtJMNrliWRvVDESc2bFKdBifYDI8uhTmTqRzB0szqghNjQPMTRFS4KwL6Mkbmg== 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=concBdNiyvs4c5xn8sAxndmrEeIA0PFYQNUF9Eo4uCM=; b=EVb6dJ8vgNtixQ4qQhaSYbJie9UWDnrAbxLiwA1R+9Q6uH+guvAuokdhXYRB5Hux5NJPlN+39IpMlNPOhb0GSLJF7tS4Jj0745x3O7ZTP2pmK4VsIjFti2suuJ/fGw9a0VoSwW3thUqhmXl8ljJTiMh6DtXq4WJUv1Bw+jKWKn4HhZtipmn4KfK6rzDaDglGv/XO/2WEbUL1fT+xN/8NhaTJoHNB9RmEDjZJiL7xoBWzJCBjSyKoV6shpUZ9LW6G/Wdn90yDHDUyssAoNXmev9CarckEmFq80A9FtaEs1fw+gyGrfTn6UY8/8IfQfgMS8Cje7Uem9iWZru829/iy/g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=concBdNiyvs4c5xn8sAxndmrEeIA0PFYQNUF9Eo4uCM=; b=Mr7I7bIqquRIx50oXg71KjkAk/7tksBH+p0hYUtksgkj6ZpAl2eNjWFzKeOCidbLHxG7YVASaovYFU+ip6oRilDEC+fCHLUQulvD66iVtitOpO6py/UtlV8l9LnNR7UnXNsi7CiVP29dKdcdbCgHaebeEmccYFzXofAkQPEbBLUzLbnlgDeFxwfz0KEpY8xRPUPgQDWiXrN6Rv+Iz2yeoTIeUsqAfLnxcbld+SzIsIukBDoldAFnUj7iqiQqhwhhL8FtpIx1FWB96k7TsWNjegGSaj1mfFhxScQAv6YDJzg2KizKUcOKc7DyGNLs3U+vGGjByJsYh9cgAhg/ME0qyw== Received: from DM6PR08CA0051.namprd08.prod.outlook.com (2603:10b6:5:1e0::25) by DM4PR12MB6494.namprd12.prod.outlook.com (2603:10b6:8:ba::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.22; Fri, 11 Apr 2025 06:38:44 +0000 Received: from CY4PEPF0000E9D5.namprd05.prod.outlook.com (2603:10b6:5:1e0:cafe::dc) by DM6PR08CA0051.outlook.office365.com (2603:10b6:5:1e0::25) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.26 via Frontend Transport; Fri, 11 Apr 2025 06:38:44 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000E9D5.mail.protection.outlook.com (10.167.241.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Fri, 11 Apr 2025 06:38:43 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:26 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:26 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:24 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 11/16] iommufd/selftest: Add coverage for the new mmap interface Date: Thu, 10 Apr 2025 23:37:50 -0700 Message-ID: <7a1f10281adcbc4c59d2b3f1c3e3f7c9ca5477c6.1744353300.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9D5:EE_|DM4PR12MB6494:EE_ X-MS-Office365-Filtering-Correlation-Id: 615cabd5-1bda-4a23-80a4-08dd78c38155 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|7416014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: D/JQmeYoKizuE/NwXv4+BMdkKucr8l8767eJg+Hc8RHAP7LnR70LI59cZYFhIAtlQc4NtT30MEbqo+D/Kmr2Y7HncY4X6KqizJFDiRjH97dHyHIZuCP20fNpb6bpRApjzKSwqOAK1n/Oh5j/B2DweIrboolXcRrM4mkoTvI95EkyvB6rlWcB5PtP+6lackkOee1cCdW7A8gQOk+zhgJjHp6x9v/vX0dZYjSAy5eo+Dm9HWA31dDnprIZK2n2sisUOBfUqHNVh6LyfZz6YWg4vCZ5w9+40tjw7gzg9ST9bIYbf6T1ck2tBp4DS27Ht1XsubKPFY3+YIwag1eliBxYek9BRTyUGqSkgLs7+R0k/jX+dqtc4PxrLxvxeFpHzZXOqGhaZXXInMN6tpKAJ10wbIIGvfIi1pA+Xe3y7AZAZ2ElSRQI5Psu9vGJ9MGMwmQHJvuYvDhO1j2LKlX+9ule9JYqw3mv0+atuQZvMW2xrc2zYoy5U0pGz0PKQ22uR6lkk9babIF3pRvqvzEKDL3V3DQEDzQIwNHpvO9IbRuzzvjtnNwhlImPYbPX7IEPrZIwzJIxGPY6+we7c83Kgo8WlOnSxV3hNuYEfuTKx9s00EL+N27QUwVXefp8c5FDXju44kHrefP6WmN6CUPO2+gbNqLip+0nil2lsqkZ/OkcjTD4isesI/R4G+hvBfz+CFlX9+4TsHJr4iCocIEiWoJLVR5T3YUetgikba5dzBkR4Mnv/TkHN7uxQtxuRMz2FyZTJVlRQyH/i5KPNzUqBUuj2b0jcs0py+JRVCxXAXH1XVo82t1nk2P02GjJ0og+NEHMr/91KPCnQoD+9jpA722NBrGtZbIG2M4Xeelomz5AH3rQ5AbtFohqyUaA+o3iwyrIAaIHWPesiLNb6fLkh8+2JgmBEL/hICFnDJ2mAFy/g/pEUNYJeH754StonDjDAMKJdV9SuORTBUzQHFhS1UBDr6HLBr5w0aQI/BVfA0fbPE9mysr2TLBdJQTB+bulWr2+qK+R0x9DYaNDrkZU+QAuED0vr3Wz43ZSs6+Fuq/iKxA4PRPykoD6mw4jd04+/8k4qNqYHWpdd6fohn5/BEFQ5Vjy/UYB+Ph2K6ed5nkVJPKk/VVKuzwPuAbHL7apUCj33HRIeuEOqFvr5PYVmB596bdCEKnjM01VXlTfmMeXtRZolZSKQr1LcVmtypyszOLJTLfUu0QjuoLDMYABMdiHrQERrK0c5RJV90PRRvj6f1nwWFdu47hu5e433B+7g3en8GdFqlXKB/WU6HbvDnffD7RaLWXkr1iW237d9n7woDXlsKYWbaJ8iCXffTUPgCFglKNxNFhWqKUgFxY69OAh+gzT1++3aW78rkLzR+TVtal9cOjLGauXSLB5JYotGPIph+RpRRPn2VVFO83iyHDYUFiSBT9jUCHOrI9TgKA9eMG0ekkp2okkCmiiztEL6DrwNvwRAbtrnM+LJF5frqorldExBjycuGQ5GQZh447PtBjfN8B46z97ScvP9Vr7pxJ5 X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(7416014)(82310400026)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:43.8892 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 615cabd5-1bda-4a23-80a4-08dd78c38155 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9D5.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6494 Extend the loopback test to a new mmap page. Signed-off-by: Nicolin Chen --- drivers/iommu/iommufd/iommufd_test.h | 4 +++ drivers/iommu/iommufd/selftest.c | 47 ++++++++++++++++++++----- tools/testing/selftests/iommu/iommufd.c | 5 +++ 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/drivers/iommu/iommufd/iommufd_test.h b/drivers/iommu/iommufd/iommufd_test.h index fbf9ecb35a13..4e4be0b73391 100644 --- a/drivers/iommu/iommufd/iommufd_test.h +++ b/drivers/iommu/iommufd/iommufd_test.h @@ -232,12 +232,16 @@ struct iommu_hwpt_invalidate_selftest { * (IOMMU_VIOMMU_TYPE_SELFTEST) * @in_data: Input random data from user space * @out_data: Output data (matching @in_data) to user space + * @out_mmap_pgoff: The offset argument for mmap syscall + * @out_mmap_pgsz: Maximum page size for mmap syscall * * Simply set @out_data=@in_data for a loopback test */ struct iommu_viommu_selftest { __u32 in_data; __u32 out_data; + __aligned_u64 out_mmap_pgoff; + __aligned_u64 out_mmap_pgsz; }; /* Should not be equal to any defined value in enum iommu_viommu_invalidate_data_type */ diff --git a/drivers/iommu/iommufd/selftest.c b/drivers/iommu/iommufd/selftest.c index b04bd2fbc53d..4e6374f4fad2 100644 --- a/drivers/iommu/iommufd/selftest.c +++ b/drivers/iommu/iommufd/selftest.c @@ -148,6 +148,9 @@ to_mock_nested(struct iommu_domain *domain) struct mock_viommu { struct iommufd_viommu core; struct mock_iommu_domain *s2_parent; + + unsigned long mmap_pgoff; + u32 *page; /* Mmap page to test u32 type of in_data */ }; static inline struct mock_viommu *to_mock_viommu(struct iommufd_viommu *viommu) @@ -632,9 +635,12 @@ static void mock_viommu_destroy(struct iommufd_viommu *viommu) { struct mock_iommu_device *mock_iommu = container_of( viommu->iommu_dev, struct mock_iommu_device, iommu_dev); + struct mock_viommu *mock_viommu = to_mock_viommu(viommu); if (refcount_dec_and_test(&mock_iommu->users)) complete(&mock_iommu->complete); + iommufd_ctx_free_mmap(viommu->ictx, mock_viommu->mmap_pgoff); + free_page((unsigned long)mock_viommu->page); /* iommufd core frees mock_viommu and viommu */ } @@ -748,8 +754,9 @@ mock_viommu_alloc(struct device *dev, struct iommu_domain *domain, return ERR_PTR(-EOPNOTSUPP); if (user_data) { - rc = iommu_copy_struct_from_user( - &data, user_data, IOMMU_VIOMMU_TYPE_SELFTEST, out_data); + rc = iommu_copy_struct_from_user(&data, user_data, + IOMMU_VIOMMU_TYPE_SELFTEST, + out_mmap_pgsz); if (rc) return ERR_PTR(rc); } @@ -760,17 +767,41 @@ mock_viommu_alloc(struct device *dev, struct iommu_domain *domain, return ERR_CAST(mock_viommu); if (user_data) { - data.out_data = data.in_data; - rc = iommu_copy_struct_to_user( - user_data, &data, IOMMU_VIOMMU_TYPE_SELFTEST, out_data); - if (rc) { - iommufd_struct_destroy(ictx, mock_viommu, core); - return ERR_PTR(rc); + mock_viommu->page = + (u32 *)__get_free_page(GFP_KERNEL | __GFP_ZERO); + if (!mock_viommu->page) { + rc = -ENOMEM; + goto err_destroy_struct; } + + rc = iommufd_ctx_alloc_mmap(ictx, __pa(mock_viommu->page), + PAGE_SIZE, false, + &mock_viommu->mmap_pgoff); + if (rc) + goto err_free_page; + + /* For loopback tests on both the page and out_data */ + *mock_viommu->page = data.in_data; + data.out_data = data.in_data; + data.out_mmap_pgsz = PAGE_SIZE; + data.out_mmap_pgoff = mock_viommu->mmap_pgoff; + rc = iommu_copy_struct_to_user(user_data, &data, + IOMMU_VIOMMU_TYPE_SELFTEST, + out_mmap_pgsz); + if (rc) + goto err_free_mmap; } refcount_inc(&mock_iommu->users); return &mock_viommu->core; + +err_free_mmap: + iommufd_ctx_free_mmap(ictx, mock_viommu->mmap_pgoff); +err_free_page: + free_page((unsigned long)mock_viommu->page); +err_destroy_struct: + iommufd_struct_destroy(ictx, mock_viommu, core); + return ERR_PTR(rc); } static const struct iommu_ops mock_ops = { diff --git a/tools/testing/selftests/iommu/iommufd.c b/tools/testing/selftests/iommu/iommufd.c index 8ebbb7fda02d..4aa6411e9a76 100644 --- a/tools/testing/selftests/iommu/iommufd.c +++ b/tools/testing/selftests/iommu/iommufd.c @@ -2799,12 +2799,17 @@ TEST_F(iommufd_viommu, viommu_alloc_with_data) struct iommu_viommu_selftest data = { .in_data = 0xbeef, }; + uint32_t *test; if (self->device_id) { test_cmd_viommu_alloc(self->device_id, self->hwpt_id, IOMMU_VIOMMU_TYPE_SELFTEST, &data, sizeof(data), &self->viommu_id); assert(data.out_data == data.in_data); + test = mmap(NULL, data.out_mmap_pgsz, PROT_READ | PROT_WRITE, + MAP_SHARED, self->fd, data.out_mmap_pgoff); + assert(test && *test == data.in_data); + munmap(test, data.out_mmap_pgsz); } } From patchwork Fri Apr 11 06:37:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880691 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on2069.outbound.protection.outlook.com [40.107.102.69]) (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 3407D280CDE; Fri, 11 Apr 2025 06:38:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.102.69 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353526; cv=fail; b=gl31R3NKpMgcq8M1f3HNP/oTjyvrWMsdGTmBq2EEuP6Kx2f+OnWYbRZ5GhS/k/j9E6sJ/qbv8Csek0d3LQRtwDohUNqbyPIezx/cKXNBo5Pxy7cabs6n5qQX2elt7/g+XIecP+jnusNH4gDLP//kSVvKKHqeGLJ779MLImEL00Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353526; c=relaxed/simple; bh=3V/VvZg0o7gFWSAa18qc1kRSoOIdvMzu0wovC5Sz/xI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KME8prjiE1zIfmj9BJeGnirBCw0/PkrZFiSsogHEhnq8mTZTsgzIifieiHPbLJrPF6bZfDLp+29NQRJp5dQxYnmvft52xSZgZEga1OUz11C3xyHwZXoRbO8Q3fXWFSgxxmD5OhQlVM+vtXf6HM78Hbk/VoZTA6iZjknDgMBQi3Y= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=kZSjV9Wu; arc=fail smtp.client-ip=40.107.102.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="kZSjV9Wu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mdWlCvtBrKCxGML/N1aSI8sPK3MSUk39E7qENng6KGYuYUT7gJkaa2hiUvGgArOUXz+fBnogZ7q6TNFHXrN0d4VcvgfRKCtrUQ86VM4KkT4oMP2Jh2EZ6g0qbeNgfTO7StRNR3sKSk9noT6pHYFO1WrrcJlOyeg5NGoHDbrvQ2WUhfboLMYFi8PU6JIS69LLK8tiLOrxxnN8QMDWVkW6G5NDrRu3mGoyNUPjaCELc8Dyflnfp7AXcloI812HmOVN2bDVc9XgWmb0dk+1qRt71Uo72Jp5rms3cqBZUdRpwN/aso9dgE9KzhR+kvKV0XkUVEFC+wKZc/A2OlpXHg++qA== 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=Ns33MTGPE7nilXexh6DDQCvQ9KgbRxu82R2esO3i03Q=; b=KV6oEoVNJNTEyvghw+k6jc0maTM7qqApraK2oFq0YIvqsSReosbqr3jSOZRpqCJ4K4r6OUbui8KPwFAHggAyWoC4xYAOnCg9V9hAxDGt7hhvJz7ZDVM/w8Lkw3bAxdufq7tQvLtQJ42yYw4Xc5inVbgZmlGerKq1g1YMZuSriCedPUyeaL3LJwByfwyxI8BE2/TOEzBt5YHoaUqiWeljCg5GzgsQXIxDWYr0nYxk8jffaIz7yzWoZ5XDKGuY2tweUr/0F23Dn0qzBi0IAz2LoS33727cQ1knFNWdnkJQbOvsefW4GdqBWXq4Ily7id7E4yedxsIjq721+emRKIFW+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ns33MTGPE7nilXexh6DDQCvQ9KgbRxu82R2esO3i03Q=; b=kZSjV9Wu/wMjB5lbtokrWnzVkvhPxekaKhyYoYlibubfDjP2/glf/hV/nZnhY1UONgRIk5OCJH74Lruqksr15/hjENDCT87UWUZ7+n5H9t4w+lpbjpQTAMKHZ18EE1myO12CEqka5+le3IZhtvstFkCgZnloQkrpdDKlOAUNfTkL3yM4cyGTvbtJ4265ajkhVBU9Ozilowvx8NUYTMWCE2wQhFuTwdV6ibZRuF9/dKOwWAVUKc0rWRRcZzwV2zJthsVD8zorIujRBEiYNQ5VgTpPARKmZ5icqAssmBT/JMLHfvRJTVMp99AF2kq7tiZkOjErcT+yHk1E5b4FRMZLQw== Received: from SJ0PR13CA0107.namprd13.prod.outlook.com (2603:10b6:a03:2c5::22) by SA3PR12MB8812.namprd12.prod.outlook.com (2603:10b6:806:312::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.25; Fri, 11 Apr 2025 06:38:40 +0000 Received: from SJ5PEPF000001F4.namprd05.prod.outlook.com (2603:10b6:a03:2c5:cafe::42) by SJ0PR13CA0107.outlook.office365.com (2603:10b6:a03:2c5::22) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.22 via Frontend Transport; Fri, 11 Apr 2025 06:38:39 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SJ5PEPF000001F4.mail.protection.outlook.com (10.167.242.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.13 via Frontend Transport; Fri, 11 Apr 2025 06:38:39 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:28 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:27 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:26 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 12/16] Documentation: userspace-api: iommufd: Update vCMDQ Date: Thu, 10 Apr 2025 23:37:51 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F4:EE_|SA3PR12MB8812:EE_ X-MS-Office365-Filtering-Correlation-Id: 2580f8e4-3a6b-4b8e-303e-08dd78c37ebd 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: psknnQyVzVI6+1coq7tzfh1mP1fhjJAqdLi3zEBAmsyTdm1IPW6HqYockVuZcpevqL90RJZe0Xysj1zN3tpF2PzsrE//CLIdNFWPWwAuS+C4bfXBXM0Nxrp9+5je2lAyZZzKnClJ11lcGbmRYUrUUrXz21E6zgE3j1kJrlbXNG2XrrcBiOaHpes3A48zm7yWZmjqvwETSMDI0xPemfcPPi4SkXKxbxSbgG4kOTZ7EolYLPGmZNk6F+jPE/zSK4e88IHvx65tTeafiI6w2xiPdFEn+CNGdIxy+79LKjKc2kk9751gmrBRP/93EN4vgOxNSCcc63ef5BCRvCTymR5tWqp80pr54nA0AkJIDxdlrFvRObCXFLpRIHDe5CLfTgaE4+81CvxAeTNrVJL3vOczi1buHvot9yPDmAWkh1xW4aGjSKy1NK5/UU70b1+7/3nJzjaHpO0M/gMHoGzMn3dTKcVX0I91wDzDbIfvYNx+9TyBwZceFWH8Xb3HM7p3hY259TQWCAhLYWE9uWsv2MxHvemtX2ozLDjzYsOsCGsKfMUHkN6e62W0wshsGmJC5KUlqY7o8nGww7CUqGPSmNlMi+1/zlw7sSpruSx16OEtE7XVMerrzNuKhEXriw/gFAYHvPs3Qtl23X3yYvJf3XegZj3Kr0cRe6gZUW1OTzJpuTxmD0IG97iWFDikoHv0IwENK+J5L12VDCbdTmeSdt1YQIZ1uR0KyB3mGdPnU3PTxzHomNcmKWlIpK88KZdFmgZ4USSGdVStU6+BjJezErYCmgFhRui7Q9ZUu4OhS1F74I92KrvUMm0hTgjpzbzfelgDcUKyQXncaqMFH7M20cRpqc6HOAcMnTcO6qkhfBnzcwEKgBOTUlt0+53RTUJ5EIcz2FBgX7Pun+P2i8TN/KI8580Q0hjX5S1vrzgiAotbcWfOxuWTyHQIWGfzpDxNjsft4Cc70pqH6Eb29DJxMCfh6JL3fxa3jDmgYvxZJ3poYrNGJOYReeUiYac6+OhNFTVJ+kr3uiqwvcG0zIHR4aJDsoFmF877KQz9iG7qvqfU7sYsvXCmbZTDHzEi0lQn9NUuCtfJsSRAyRnz2Ws5dHS6MYKeZvn6aZiK9i9qr45L1QXfclXO9DUlKKf0EBbr1pKI8vJHzoE/F+fJRJvmswjlqYxXhuifQT2nCUHGP1xkYmsqsCMU8RiqUrYIX0h4Dgsk28PFSDvXeP4LZFDA6TXux9SYgkYAn1DCzHEzUnCN2x6BXjgWCQsaSXD0RHJlyQT4cHiuwcABT0/9n6MMU1vKCHDUDMt0ZhLU9ty3k9bOgo/Sr2nSz3pMiGC0jcGl0Nf8hejGM/4of5xL30qcE8hwkVB6KxXIcgppvxnq1R8Rn6izAs2O/o7Yz/YKyzlB1P7S1sABIil0FBpTRq/gfOtihGOKDuESjUymgBTwWgpiNj/4CoC95yTzr+0z6pBFLGkuIK63peM2XruX0YZqoY3NW9MR7smaQo0xpHpZYrlrwE8CwrZc8kQ5ZGhgMwzVqdu9 X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(376014)(7416014)(82310400026)(36860700013)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:39.6137 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2580f8e4-3a6b-4b8e-303e-08dd78c37ebd X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F4.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR12MB8812 With the introduction of the new object and its infrastructure, update the doc to reflect that. Signed-off-by: Nicolin Chen --- Documentation/userspace-api/iommufd.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Documentation/userspace-api/iommufd.rst b/Documentation/userspace-api/iommufd.rst index b0df15865dec..ace0579432d5 100644 --- a/Documentation/userspace-api/iommufd.rst +++ b/Documentation/userspace-api/iommufd.rst @@ -124,6 +124,16 @@ Following IOMMUFD objects are exposed to userspace: used to allocate a vEVENTQ. Each vIOMMU can support multiple types of vEVENTS, but is confined to one vEVENTQ per vEVENTQ type. +- IOMMUFD_OBJ_VCMDQ, representing a hardware queue as a subset of a vIOMMU's + virtualization feature for a VM to directly execute guest-issued commands to + invalidate HW cache entries holding the mappings or translations of a guest- + owned stage-1 page table. Along with this queue object, iommufd provides the + user space a new mmap interface that the VMM can mmap a physical MMIO region + from the host physical address space to a guest physical address space. To use + this mmap interface, the VMM must define an IOMMU specific driver structure + to ask for a pair of VMA info (vm_pgoff/size) to do mmap after a vCMDQ gets + allocated. + All user-visible objects are destroyed via the IOMMU_DESTROY uAPI. The diagrams below show relationships between user-visible objects and kernel @@ -270,6 +280,7 @@ User visible objects are backed by following datastructures: - iommufd_viommu for IOMMUFD_OBJ_VIOMMU. - iommufd_vdevice for IOMMUFD_OBJ_VDEVICE. - iommufd_veventq for IOMMUFD_OBJ_VEVENTQ. +- iommufd_vcmdq for IOMMUFD_OBJ_VCMDQ. Several terminologies when looking at these datastructures: From patchwork Fri Apr 11 06:37:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880689 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2041.outbound.protection.outlook.com [40.107.237.41]) (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 B7B87284B40; Fri, 11 Apr 2025 06:38:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.237.41 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353535; cv=fail; b=J59ayAzNVhVQobLE1E3gUvJe+eJs+mANCFx3s5sTkiolT9IjS7n/cJxdYGdRXPxN0nsqcOD0RN6858GpqNaJRlc648xtYYkWNWatSLbkGeUsiBebFZ+2HKm8E2DSRH3v8S3a66zoTgZR7+IWXVPfE3KW/TOsTTUN715tsvBsXHI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353535; c=relaxed/simple; bh=siNVqlqwBFScDOG9zjJaFeiENNUR7ups28x6GGTp19Y=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=MAXPkRMRnoK4OvqFzpcmXpgbT8cEh/NzWtl4LfBuVQwImMzq+3owaw4r43CpeD1sB8L6V3oMo7IkmXdXr42v1m2QZ5ic6wTass7IzRYhS8h5t3GtJpVXjtxpomltVa1LJUUS5WFU6upysi0JTu8ewFMpopcmZPyl/9tXu/YgGx8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=s2kGtqtV; arc=fail smtp.client-ip=40.107.237.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="s2kGtqtV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Xz4i9GQW8RkzDr9/bQAIlDAWpyBCtjhdynJpLBRMuLRUjh5EDAHctLKQYT4EfIBJ5tZmyE/L2p+vD0NtoMnoXcyzNqhBndqVHOEY75YLHcEgQ44F3OpW4M0+6+tPGKwXB5EhC+mzsS4H/tEVf6cTWeuFPZaYY1asGmwNNHgMhajixgb1Bdnf2yoHx0K0XojnCRV+YUtycKIA9AX7K2Y3uKQP7vmG3ODk6p9X4AsAje7RZ6UbLHSC0qC9RuONRXbYCOZ0J1u4/d7LXqZJkAaf1z8BRJtTZrnhNIQaPYTG97jqOb7dtWvaqVkoksLRE980qVncwBgZc+I4W5R0T4jQ6Q== 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=OhJ4jHPIPfd9sP3ZZSE/RbD4k2DOj2ay/A1QDkWgtvM=; b=NIqYYpznNd56UFNrwbvRYsd4m1hlvQyCMhwUe0QCnKmvVTlEC0L3A+rkCJPaID9708RdJ+5EnoTtxvkIGifcR8qCzcHfmmqNUCzCEXvNIvcolDm0jSRDZ4xWH3+aRWHrbbW4JxfFYxu7ghp4QiNAXKLurAPqeg7glfiLj2IQmRg5DRqJc3UHm5Ssi01UJeBX7rok3WRBVGofwApTqK20EDAo0Sj9UNRi4tbrP7zLFErWXGdjOdT61l+MDplraimdORtfsOwvvrxSisCCmiLOgf4zZ+kdHCRIj18YoqUpEaGhLywNQlSdngEo3tBxmuLXHVWWcg2ABsAFz+c2ZndMlA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OhJ4jHPIPfd9sP3ZZSE/RbD4k2DOj2ay/A1QDkWgtvM=; b=s2kGtqtVN/r5TI1a9ZMKFG4nOZj3k9bXWDux1wHWVzM7VzplNo495fCn1bblmZjusaakm0LRLuLguQaXUQBnVH/ftZCesJytNk7+qveP5PSHr1PpbSYOVqlJ28BfnXtnnXrRgI4ZrSLpARsmfRKBznaD9tD6ThD80H1XKTU51PX0PNjyVvQ2pJSqE8RGkTT3rE8nr+EM/xgbOhAb9b3sE4Tx46rotFqrVz/xvaOPk6YI8qCM0bHUV02ED/fo28MrzwWIssa5Ap4TlhfEuVFoyPBrZssXkwJjPulSVJd0G3D+H9I96+hrNhN0oJRZv+hmvaxUgzLZTypBFo5cr/fkWg== Received: from PH7PR17CA0040.namprd17.prod.outlook.com (2603:10b6:510:323::26) by PH7PR12MB7793.namprd12.prod.outlook.com (2603:10b6:510:270::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.32; Fri, 11 Apr 2025 06:38:49 +0000 Received: from CY4PEPF0000E9DB.namprd05.prod.outlook.com (2603:10b6:510:323:cafe::7) by PH7PR17CA0040.outlook.office365.com (2603:10b6:510:323::26) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.26 via Frontend Transport; Fri, 11 Apr 2025 06:38:49 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CY4PEPF0000E9DB.mail.protection.outlook.com (10.167.241.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8655.12 via Frontend Transport; Fri, 11 Apr 2025 06:38:48 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:30 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:29 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:28 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 13/16] iommu/tegra241-cmdqv: Use request_threaded_irq Date: Thu, 10 Apr 2025 23:37:52 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000E9DB:EE_|PH7PR12MB7793:EE_ X-MS-Office365-Filtering-Correlation-Id: d54d38c2-5942-4083-a508-08dd78c38463 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700013|82310400026|7416014|376014; X-Microsoft-Antispam-Message-Info: Ht6ikZ+3/DK9SwXzO6+Ui3t5U1N5HnSUPgeaJ2ctDh3KbpJ3PSiX06ZQzizd69m1dTIaDxrFYt2juxFaXw9iXRgbERdzIdqVMojDrgbDpmwj8+eUrvRc5FCo3ZXGce9AIIJ6zCjuSNPKkVIJtSvRKPFXJcDqWspE1+oWihP2QwTh2SPffliKoE728TmJQtqJGa6fau7QBHMqAtN5g2xWz+HB7agFbzMRMMifqFZzdZasrBZImPQYxl6d8JlInJwYfNtFQXXLLjczkVnrPbkaNhGg6K2yN1Q7bzWV+7tPw69A4kdRdCFiC5pPhGvqvIKDoJL1xJZSwytRcsQmiZGg3j4oyLorzQt9cAK26pHWoLamte1iLEejU0RIck8LhppBPG8yZ4/Ga5IrLdGTLk43N15p1eisQvlrrZun6W4sz53tTLGQsCqOAFn/a+rI1KAYXIObH+xxwqgBkFfqokeWNfM6JESTDkp1fa4gAEh9Pn0jPrgOR+1TYLbxzKfO7ccWSJRZfdFD5k64Nysi2YxHGteMEBzkMj8UxoffZASR87mtiTXw/AbVwhOSRaeUsCL3cVaPHwaZgwFedr11KZIeegrNJnEKuY/GdVJv1rg0zx/aKsUsp5RFEpoFT2+kdXzjeW1MV950lUpRyw+2x7SZ1oKQuuGPwpN5k70hFzdlzd2PErVrD0pc0llOFAPFiNZyCM3Si9DFf1hWfkiPBZEfECLQNTlTBatjXUmg/i7wtQRxhvrs1dxjZrSsc+lWkwydzC0jurtByMAAHKKnweFKCRDabL91N9KzZuoTo+l8jLErhngr045wqfdoCmOaJ+qmWu4N0x+U1JNtmyOM0otwLYOqXYCLC5KLgrGYKgsb+XWr2PNXBESznhoTXSJVyGb/MHl4GgIIs1scGBvdpYA+KQPx1RtqgIVSyf0M03SsTGfJEjFOoqMSHcD1MwiS74U/u2Sw4ijqwcAMV6VNtxMHtIGbO62f4loX0UTul5vkhEo8KUYkiy88DsMuWnu1Tfc/sC5xT7otdV1LdH/11eo40jnrRWyhrzIz00AK5ixFALOYc6v1u+ppFLZ4kVNm7mPpkRqnqhH77EYG/nzzIjKM5ZW9NPLJIZwlZR7NHwig/+RMR3Q++yWQbcdz9motMpnwNTS8C5Y7TveGNhGrp+C0nBB6/ydYByFpv3jk8L/p+4xd3kOSDWAisQ0lqDjxwMigY1Iw6YCW48R5Qbh/klIOUw1Y94wNhOegXEYfpNqZC1SNDW1zmi7ERmnPcw/4GRxO6ioqtpWTLI3hDIyvv28xrvjkB05Hwi+Hn5H6DNtVAD1a1cubBu1EpyW+YZM4XE2dxIdqgIa91jsu/oXgeYZovJlyUnpYUZmlDxeX7hpIwyZRWU9Yc3dZG1UiCpx03Jo+6pTcaYfsvcWDLqNbEjcgygI0Ni/Wbsg5BO6TmbU2GeKOHgFVqpzjI5MtrVazs8NaejcA1aIDWgQTd6pqfc4aV2ENJ+k7bVY8Ygkbn6aAS0rFp/O1+DIXov5wuzBzPAzL X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(36860700013)(82310400026)(7416014)(376014); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:48.9994 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d54d38c2-5942-4083-a508-08dd78c38463 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CY4PEPF0000E9DB.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7793 A vIRQ can be reported only from a threaded IRQ context. Change to use to request_threaded_irq to support that. Signed-off-by: Nicolin Chen --- drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c index dd7d030d2e89..ba029f7d24ce 100644 --- a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c +++ b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c @@ -824,8 +824,9 @@ __tegra241_cmdqv_probe(struct arm_smmu_device *smmu, struct resource *res, cmdqv->dev = smmu->impl_dev; if (cmdqv->irq > 0) { - ret = request_irq(irq, tegra241_cmdqv_isr, 0, "tegra241-cmdqv", - cmdqv); + ret = request_threaded_irq(irq, NULL, tegra241_cmdqv_isr, + IRQF_ONESHOT, "tegra241-cmdqv", + cmdqv); if (ret) { dev_err(cmdqv->dev, "failed to request irq (%d): %d\n", cmdqv->irq, ret); From patchwork Fri Apr 11 06:37:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880423 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2082.outbound.protection.outlook.com [40.107.101.82]) (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 04389281371; Fri, 11 Apr 2025 06:38:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.101.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353529; cv=fail; b=RlCA2WRsjl7dc0AZou3tBAsqcdtqO2x9Qsz2XDuBNWI8lDLlI26sTi0mRqN2BHTvw4HNRB4IIfluJOpGago6Tl7eilG+Qzm6wA9k6W8x9FUVedKzoKN3FoKjoNNmYmWuomXYUli196+WJiDKUcC9bkIvjY6P77n04R4Ic+onMvE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353529; c=relaxed/simple; bh=Qceh25T/tRs94eztjBvpCbUYCfBhZOOKsLJi6Aeng8s=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Bec33ToJlAUwjakcMxkx+CQJbxfvSTvynz/tN7z2mEzNe4M801gsHoSZt20WCrC5R1InDONGK+DVISdWttClN97gYgQrTU3cdbj6XtgJl5nockczuNq1Mc6lmj8dVvE7DDkz4tJOW3QEBRRkdR+Xm88tRpj53L17lwcIG311BPc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=HrZDtLeQ; arc=fail smtp.client-ip=40.107.101.82 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="HrZDtLeQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Wr2HaipsicnR+lA+ybJvYozitdU19qxLSl8Qof2HJYsuRlaCpwGjZYjvMXHYyeqtqBj6MXIUD8inUjjOxIHtnbFyGIKQ1LoRGFWLUbQzpBELqDfUFILGARnnh6YWdxYpPj/I+4n+hQZwKkAavDstl2zuY5E/HAeOn15dVXzpR8NeNz3Gb/gUfT+sMJw7U76mxf5o8vLqt7O/wSiHOJyVO4qjdpvvYLALgOrul6aOWRBe1rEgmIwMZBdgU2Kope7aW/6pV/7J0dC6DkOXpF49d5Sby3WB3qG5yg35+AmFY6XZtyZe2aSkF2qQaH5cuZYRrTdtBVhOp1jM9hmFi8sgwA== 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=nQbDphL96i6xWzKqJy+4U1CiWuUVk3FDeEocvyzqdQ8=; b=yBFitigRHJ6Zgt6yXo1YXbl+/vjKwcHRsydAsWC+v0iPGWecolyOmkKBf70H1URvVinI3oLBCQl9md8rijAWHDjtqsQVUZD3cXCHbwTUwU7qe//bEdoRQMeaUKWEDciA9//qRv7PuX6/jHLLNwsVdo53UvPIeEOwUCKw78hJ3APXhyuRZWA/eh+t/ejUqzLxPp15pPB2rnIEGeUihlYOZOl5gUrvWVJoYCi/HgOUXxGON7LWhQ9Cj9xGFji+odPtn5Fp/ZkCM6gheadAb38u9jXbuKQ+Xt4jO+zgMGW9cdxNsChHx0bd43fb3xzqgg9xGaJEgX+tqUL95HNiKlNbzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nQbDphL96i6xWzKqJy+4U1CiWuUVk3FDeEocvyzqdQ8=; b=HrZDtLeQm4YWE2MAzTnNTZXlcZwIQpwprgnENC2Dn+sJzDeNyWdt2tvBN9FWEzkxX8/ShhZkrfuMxLnQk7gJ26codYjFsEpzLQ75gbplZRwjHjvFnydMq+WUzLTus0wiQIVH173rDG8rFMpOEDZaR1o7ilL6xenUn08zsnwmSRck+sbiIo5aFE+pBJyyAJVt8OUY1b9zfR0HTC4qBVmqN0x3GGQs8sFc3y/W6EwXp86wLlhLy3cH62G+CzcxZGWRJFVpPV6mQgoDOG8WgT2A9/aL9NesXN7h2ljiQd+81qtvybu2hmDkpAn8GlZhCZVWFv44z7+Jp9FPmQx8droJOA== Received: from BYAPR04CA0009.namprd04.prod.outlook.com (2603:10b6:a03:40::22) by BN7PPF0FD1DEA27.namprd12.prod.outlook.com (2603:10b6:40f:fc02::6c8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.22; Fri, 11 Apr 2025 06:38:43 +0000 Received: from SJ5PEPF000001F0.namprd05.prod.outlook.com (2603:10b6:a03:40:cafe::c2) by BYAPR04CA0009.outlook.office365.com (2603:10b6:a03:40::22) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.26 via Frontend Transport; Fri, 11 Apr 2025 06:38:42 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SJ5PEPF000001F0.mail.protection.outlook.com (10.167.242.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.13 via Frontend Transport; Fri, 11 Apr 2025 06:38:42 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:31 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:31 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:29 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 14/16] iommu/arm-smmu-v3: Add vsmmu_alloc impl op Date: Thu, 10 Apr 2025 23:37:53 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F0:EE_|BN7PPF0FD1DEA27:EE_ X-MS-Office365-Filtering-Correlation-Id: 3535baf5-f58c-4c9d-bff0-08dd78c38061 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|7416014|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: ULv9ZKOvjh/1WhHFspUGCR0cdFyOuAf/M928Xi0+u+S/4oR8hZUyPa9fLb716XVCKnpM8LQfnT5huv7X7HrkoRDVA98Z1C5xX1QccDAhBi4LV/74Nm6uahirK8tNRRPVX76eyAvE6FrUWQ07Aa0d77Es+/yh5GiRqvWSX6rKdiv/prZRNrPS2eo4FvZg+f/IN9NL70V6bD6Img3Sdu0B1O9bpkaWgraVS/kX6HzpMQG5RlP2ULPLxGhTTRIXOmKpnHJBl3uGrqBzJexlWhVMBZB6wgZ2JwqV3Zo/FyD99CdAnb/soTfSWvcTC7tkOVynwQbTLWTNSCXg9jc3NSqVVmTvVEmzmotrhlSIIa/XQICUWV0rRIsUjYIyHAo7Lqpi/Iqim9cDf5CEagOTplXb2LPycuXOBByiydPc95eMDKLso9OC2iXaTiR+cJuRU8m/gJq65pfcRlZ3g3xPyNN0RmvyLrw2phJzUa4XAAsd2vmBSNW8Iwc1K1EbHktS0HVy4SyLLHkpYd4U2NmjzjkkL9qVXc2TQxPoEwOCMpCJNrO9eaMuNSlJgN0FhOPp0Tenagx/hdm9hMhTbRv+1dkACWASZBPLTpNgI4s7tQdrycPSuoCeC5UoeCED+nPgcZ72Skz2d3nEU5s/YwDbo9bqj34xHIjUwfzm7vGwNI6bw9qZUbr+CAhHU012UMeQtHtsK11FAZGPiJaF+otipZwwXLQYJ9t46XFN6ILay4O2N6wBh+h0EoL/h72OFRkUVcjs3HxnlgJCvh4gSqw+AUbs0XQO87BXTzW2205rfYDxUW5Ghs0PmzMWxULj96aAgN/MPFqBQG4nJRep3V8RhmOWALnGgf1UFEGYkTpzp7uiLpemwwF6ZYw4XjgXGXXBAjkYgObdncRZKyINIUXAYB/En+QKzzSH24O9LKtZ6c1H/vnnFAOXzj2pCfwwzbX4MA3efNPHn1hR9dXj04o7ZYTDFJRoGUUktWDBWS7WEhOQqTcShD4q+rn7YFkqd9TMlcmgaNAaP4pdxHew294dz3icv46YeRBD6BAxJy4AdIvQi7Dx84qw2iW/R5n9vbh6nhGN5eqqoDdde4mKXy2YfE5UCPpZMaP7Yib5iodJxxCwssxWpP0cnZ3/5n+Yv0yWFQ8hH0HcO2FPQlXhDN2m3+ERr5vrSaZl3JhSgkTim/YS8JMD/4owT62PGI3ZS4dDjiyaD9m6CGwpLLTxU8DwIMvI2JljZ2w9f4S8/dvqjWrYQ0btbQgPcbFw1oz9LPzhwCRnA1B/Z6W8xxa0CygbthLY6RrFQDzvjFE3XPOzJtESHj1BohGpCGNKhIKxi8itbN05ofcU+saexxYA7IgXOFzis+kDnV9M2IGR7w8kegQRbY++MfaYfiYjTE5MPQ1SxTtK7RZlQkCRK54gYF56kp8yGkZJ8F8SNjrUyCmx8cokJIldYhMt6vQuCNpdSiGuw95V+eKi3+lTYONS1zAF54p9ljdstW4tVsIpDLmbjvygYMKGMfp11lIozO3w1ujO8pVF X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(7416014)(82310400026)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:42.4011 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3535baf5-f58c-4c9d-bff0-08dd78c38061 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F0.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PPF0FD1DEA27 An impl driver might support its own vIOMMU object, as the following patch will add IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV. Add a vsmmu_alloc op to give impl a try, upon failure fallback to standard vsmmu allocation for IOMMU_VIOMMU_TYPE_ARM_SMMUV3. Signed-off-by: Nicolin Chen --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 6 ++++++ .../iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c | 17 +++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h index 6b8f0d20dac3..a5835af72417 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h @@ -16,6 +16,7 @@ #include struct arm_smmu_device; +struct arm_smmu_domain; /* MMIO registers */ #define ARM_SMMU_IDR0 0x0 @@ -720,6 +721,11 @@ struct arm_smmu_impl_ops { int (*init_structures)(struct arm_smmu_device *smmu); struct arm_smmu_cmdq *(*get_secondary_cmdq)( struct arm_smmu_device *smmu, struct arm_smmu_cmdq_ent *ent); + struct arm_vsmmu *(*vsmmu_alloc)( + struct arm_smmu_device *smmu, + struct arm_smmu_domain *smmu_domain, struct iommufd_ctx *ictx, + unsigned int viommu_type, + const struct iommu_user_data *user_data); }; /* An SMMUv3 instance */ diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c index 66855cae775e..aa8653af50f2 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c @@ -392,10 +392,7 @@ struct iommufd_viommu *arm_vsmmu_alloc(struct device *dev, iommu_get_iommu_dev(dev, struct arm_smmu_device, iommu); struct arm_smmu_master *master = dev_iommu_priv_get(dev); struct arm_smmu_domain *s2_parent = to_smmu_domain(parent); - struct arm_vsmmu *vsmmu; - - if (viommu_type != IOMMU_VIOMMU_TYPE_ARM_SMMUV3) - return ERR_PTR(-EOPNOTSUPP); + struct arm_vsmmu *vsmmu = NULL; if (!(smmu->features & ARM_SMMU_FEAT_NESTING)) return ERR_PTR(-EOPNOTSUPP); @@ -423,8 +420,16 @@ struct iommufd_viommu *arm_vsmmu_alloc(struct device *dev, !(smmu->features & ARM_SMMU_FEAT_S2FWB)) return ERR_PTR(-EOPNOTSUPP); - vsmmu = iommufd_viommu_alloc(ictx, struct arm_vsmmu, core, - &arm_vsmmu_ops); + if (master->smmu->impl_ops && master->smmu->impl_ops->vsmmu_alloc) + vsmmu = master->smmu->impl_ops->vsmmu_alloc( + master->smmu, s2_parent, ictx, viommu_type, user_data); + if (PTR_ERR(vsmmu) == -EOPNOTSUPP) { + if (viommu_type != IOMMU_VIOMMU_TYPE_ARM_SMMUV3) + return ERR_PTR(-EOPNOTSUPP); + /* Fallback to standard SMMUv3 type if viommu_type matches */ + vsmmu = iommufd_viommu_alloc(ictx, struct arm_vsmmu, core, + &arm_vsmmu_ops); + } if (IS_ERR(vsmmu)) return ERR_CAST(vsmmu); From patchwork Fri Apr 11 06:37:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880421 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2087.outbound.protection.outlook.com [40.107.93.87]) (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 5990E284B31; Fri, 11 Apr 2025 06:38:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.93.87 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353536; cv=fail; b=rDQ3rLEc9ji0VFtiwHPDZySrId+o2VKcE+5yvlnwlhqzUfc/zwcMQHZy3x/BEqUZp0hGq21suxeEgm6mvhs/haTNAepHdUTfpzCAJa6SsDxw2eXRiZZYGVEnOxpmHucb5BBgds/XKac1GP60vxlUv4phfEo/j8RIPSSxl/2eXDo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353536; c=relaxed/simple; bh=z5NlAzJduXkp9xNEguVIes9KOrYrZzvndk/bad211h0=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=aqChwCYw4wcsaoky2goyCb1oAKoUHwkDHZa1An2W3m45WABBO2GAWLrgyvjkkP6M2skhU1xfgMuSZQAfXnFANzwvSX1DgFxSqKIhBDFW0lbvsZ0Y7uGup3P3+lHoEo/5lnpEpopX3OOBOUmtBRmFu3Zg6wOGZlRTD+zggcykRPc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=ndaWOxvG; arc=fail smtp.client-ip=40.107.93.87 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="ndaWOxvG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=P66FW+6BxeY+Uokqi034ex0BAAaJ/Dy9GkN9k+vwM0jaXzBArqLGvl7sf0fD5DX15lGYmF3qj5fdNj8X8fGF9Wixh2nzSGYEIOvzNJgcKZXd/M8t0OrDB1mw7XCyl6ueh9jpcJ02FB01dP/z08jS0I5dO0inVclJlUsWRqSZzM/V76/4+wA8GamAgw9NIXur/HBNGwMemsKv8NSyTsUJnDzcpQA8CHLwgNvqXH/zTcvu4iWZos50Ay9ID0QtzGVF+0eTMES6KvjZGUp6sJIITxISBcMmq7X1KnNMdQ7a6kwq0XOg4GLvXPcoiPh3qwqg6qbkcPIo4cpBN5/FeUFDgw== 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=zX8or8fX3h6C8PAcX3PF1BzAeeE7wh0vN68L27cCOmk=; b=opYiG3p2YSGSZqOuJecyyzDsiyQbLgWizxV3+P0fA2eb0aP3KIUtfhhJvfxSYu6aZC++R6dLA8Wa/uZfTeg4RyOzznGEZYQGcbyAOTFoINKiVtaBYaUoAFtbpigncedTI8e3Wu/PLpEg3yqc0XQQVx7kStU2RZk5mEZ3uczqzyZAx++9gFcaiKmNmQrOKluWSyLlKh/HiXKuPvI2MMD7+6hn3woCYgIFIai1d4xm9Sj1sPnBlRbH/P6/DWdseebUgpsZCkWEORXIZsWDg4Y3w0WwYupEl4xBa5edfkPiKpu+GNnp2keNYQCx+Efkz+aseuAHpi+y682dT64JXGih/Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zX8or8fX3h6C8PAcX3PF1BzAeeE7wh0vN68L27cCOmk=; b=ndaWOxvGRn0yZTxHIhclVHXPgLbvJL/+OwYW9lnUynwxmiNVGvhhTFPnR4q8c1pXZ/ljprKn7NjrBAJ+uOW6+93xYS+qrWXibDx2RP4scHkCk+C5TzdsBLbg+Iln99fj5ZDmpfUcS0s03qqVBWnYXVd/a3+kantxwHVoTr0HV5H9rN26dCHpy4d/lfTE4Ib1olc37Nofo6BeSQWV4Tt7mZyYCVFYOLzetZ5TmhWgRraltHo0JNwOlB+HmQ9jpZ3Mk3KyTqAoU8+GK5YXNZWIuqZyS68UztLCh5TCfAAWmWVV1lk3DrjkSQ4HmjTzUWw9wUKw7mkDB0C892U9JfEcww== Received: from BYAPR04CA0016.namprd04.prod.outlook.com (2603:10b6:a03:40::29) by CY5PR12MB6407.namprd12.prod.outlook.com (2603:10b6:930:3c::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.27; Fri, 11 Apr 2025 06:38:44 +0000 Received: from SJ5PEPF000001F0.namprd05.prod.outlook.com (2603:10b6:a03:40:cafe::65) by BYAPR04CA0016.outlook.office365.com (2603:10b6:a03:40::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8606.35 via Frontend Transport; Fri, 11 Apr 2025 06:38:44 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SJ5PEPF000001F0.mail.protection.outlook.com (10.167.242.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.13 via Frontend Transport; Fri, 11 Apr 2025 06:38:44 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:33 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:33 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:31 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 15/16] iommu/tegra241-cmdqv: Add user-space use support Date: Thu, 10 Apr 2025 23:37:54 -0700 Message-ID: <30c7aff68c35040ee637629cb9fc2b6e7f83f76c.1744353300.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F0:EE_|CY5PR12MB6407:EE_ X-MS-Office365-Filtering-Correlation-Id: 57ca90fa-b875-45f1-6526-08dd78c3816a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700013|82310400026|7416014|376014; X-Microsoft-Antispam-Message-Info: rcwDLX7Fyb/V6yQUvbXj/CHWRyhts+ZEO9Pe3zcaLfeBOhre26ZT+g6MBmT0DCuTC6FpKVxkd3/naYn3ZSB4UBV24TvYTqNFbe+rki5OCLDyrLir5cbu5qHHTOVDPw66Wbb1fiZ2vWspeTrA39HJoBrftZkDNvIt2bsVuqO2oebhi0chRfop1IcpIiSmZyrtiDI+ySTHGLQ+rWlgoMDd3Rxq9yXtgThen1hXgJQCiXFVaG9LVYtxNIi2OnAbo1bIL5Z2Q9BbGDAsh7nd+pKSAp1bQkZgy0i+NZPwsrqRD2DMw8n8g/GK5u5jboeGsnkV9aFPjl2tGcHSgS1tp6hUuNoZwSwnvPYTKDxUE3ESAS3A/TBrA7ZWkrKzs+bbdQ/V13T9rc8aZ7Ey4UAik+ODp+tK/yL/b2dVNJOKh/TwKoHp2eToTwxsCHtFwNyfo0yapMCQs8/pQr1oGlm6UYKPL/N2C/hYyx9ny8TdktptFdvE4HUCJF/hHHahpC99p5rkZl47g/U+/og7qcaZuUT2MruLSQ97cDnSJOKe+gQxSOdQn3i/H2LttIRGlrw51EPuIxR4eNh51MWKxuWTD8xAKWXCemerWYZX+6o/91Jzc1r1xB5y73qf/gJXgdd+bXt7QdSLv8Uqp4Rig8HtSGfIu/LViN9gI8SM5/zjThZzaC6i3VBm5xqvXZIseD6YsATQVNHrBkHVk2sNfcAlsZG6HtMBoOw+PEL65HVP/B676rNsdgzZ63o4I8DlB6KzYRyR3tEN9rZWQGtOXzmUB2Zsk5jTXsz3sF7ycyP9yWTlSXbyON4aIryUGVBPJB/KPSro85srIRObMXXsonujPTnsqvsHMrhpSBXzF97v8OtfAQCp+o5AbPuU2+++W3WWz/cJMsEmhsF1WtsXkjZPqD42L6l7w3+DYys1mfz8IUB8XWX/8KsCRctIoKbknQraui1ylsms6tcDBUaRga8qSyij6w6mr17NDRBcXxeaz176wQ0Hwp1opaUptl1sP2JgXggDwdSUnrG2FOjQfe+nu03/fnS2I7V7b4yIDcUbuAQQAN1TPYWiuZwFw28Q6rOojqHyDg6Ta3FXU8R71iZep1d5d+ojISCHvL7aTaVbu8oMhgldZD5eI65P65Q1qEKqsvMSYHsJxoiObJ2Zh9NnUgCkv8Cdxc1aym86Pe2lNNk5+K7G8XPj6wRkMuoNxC/+wLxwLVY2VZFKSIFbndG5JIqgFIzm8DA9atYmFfCUidpnBY2vi+sxEUEV2ano5iyuq3RQNSdfO67BDG7kPMgZDAnvWWMCKqC6D7zq9xOBkmMaXCVoVWu19U73IhLP89AzlxcDS2HOAz8L0bnFLK6gWOY71bX3RyaBYCovrNDiTTv2Hwrzwxg27Pvp6OE+KarYeGzL72rpbNo5wowSDcdi6ZG5ka9lIRLb/1HItY5t83Ma4zOnh7BiYzTlxnHHDcEdqrmNKK/I+/2PCx5XTipD9FcFv5FrbOQpp2cXBtfCR6ZJqwWUbHs3g81Q/qoW7d5PdrAU X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(36860700013)(82310400026)(7416014)(376014); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:44.1355 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 57ca90fa-b875-45f1-6526-08dd78c3816a X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F0.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6407 Add the support via vIOMMU infrastructure for virtualization use case. This basically allows VMM to allocate VINTFs (as a vIOMMU object) and assign VCMDQs (vCMDQ objects) to it. A VINTF's MMIO page0 can be mmap'd to user space for VM to access directly without VMEXIT and corresponding hypercall. As an initial version, the number of VCMDQs per VINTF is fixed to two. Signed-off-by: Nicolin Chen --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 15 + include/uapi/linux/iommufd.h | 34 ++ .../arm/arm-smmu-v3/arm-smmu-v3-iommufd.c | 6 +- .../iommu/arm/arm-smmu-v3/tegra241-cmdqv.c | 322 +++++++++++++++++- 4 files changed, 370 insertions(+), 7 deletions(-) diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h index a5835af72417..84f8dfdd9638 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h @@ -999,6 +999,14 @@ int arm_smmu_cmdq_issue_cmdlist(struct arm_smmu_device *smmu, struct arm_smmu_cmdq *cmdq, u64 *cmds, int n, bool sync); +static inline phys_addr_t +arm_smmu_domain_ipa_to_pa(struct arm_smmu_domain *smmu_domain, u64 ipa) +{ + if (WARN_ON_ONCE(smmu_domain->stage != ARM_SMMU_DOMAIN_S2)) + return 0; + return iommu_iova_to_phys(&smmu_domain->domain, ipa); +} + #ifdef CONFIG_ARM_SMMU_V3_SVA bool arm_smmu_sva_supported(struct arm_smmu_device *smmu); bool arm_smmu_master_sva_supported(struct arm_smmu_master *master); @@ -1075,9 +1083,16 @@ int arm_smmu_attach_prepare_vmaster(struct arm_smmu_attach_state *state, void arm_smmu_attach_commit_vmaster(struct arm_smmu_attach_state *state); void arm_smmu_master_clear_vmaster(struct arm_smmu_master *master); int arm_vmaster_report_event(struct arm_smmu_vmaster *vmaster, u64 *evt); +struct iommu_domain * +arm_vsmmu_alloc_domain_nested(struct iommufd_viommu *viommu, u32 flags, + const struct iommu_user_data *user_data); +int arm_vsmmu_cache_invalidate(struct iommufd_viommu *viommu, + struct iommu_user_data_array *array); #else #define arm_smmu_hw_info NULL #define arm_vsmmu_alloc NULL +#define arm_vsmmu_alloc_domain_nested NULL +#define arm_vsmmu_cache_invalidate NULL static inline int arm_smmu_attach_prepare_vmaster(struct arm_smmu_attach_state *state, diff --git a/include/uapi/linux/iommufd.h b/include/uapi/linux/iommufd.h index 428f1e9e6239..ce20f038b56b 100644 --- a/include/uapi/linux/iommufd.h +++ b/include/uapi/linux/iommufd.h @@ -952,10 +952,28 @@ struct iommu_fault_alloc { * enum iommu_viommu_type - Virtual IOMMU Type * @IOMMU_VIOMMU_TYPE_DEFAULT: Reserved for future use * @IOMMU_VIOMMU_TYPE_ARM_SMMUV3: ARM SMMUv3 driver specific type + * @IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV: NVIDIA Tegra241 CMDQV Extension for SMMUv3 */ enum iommu_viommu_type { IOMMU_VIOMMU_TYPE_DEFAULT = 0, IOMMU_VIOMMU_TYPE_ARM_SMMUV3 = 1, + IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV = 2, +}; + +/** + * struct iommu_viommu_tegra241_cmdqv - NVIDIA Tegra241 CMDQV Virtual Interface + * (IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV) + * @out_vintf_page0_pgoff: Offset of the VINTF page0 for mmap syscall + * @out_vintf_page0_pgsz: Size of the VINTF page0 for mmap syscall + * + * Both @out_vintf_page0_pgoff and @out_vintf_page0_pgsz are given by the kernel + * for user space to mmap the VINTF page0 from the host physical address space + * to the guest physical address space so that a guest kernel can directly R/W + * access to the VINTF page0 in order to control its virtual comamnd queues. + */ +struct iommu_viommu_tegra241_cmdqv { + __aligned_u64 out_vintf_page0_pgoff; + __aligned_u64 out_vintf_page0_pgsz; }; /** @@ -1152,9 +1170,25 @@ struct iommu_veventq_alloc { /** * enum iommu_vcmdq_type - Virtual Queue Type * @IOMMU_VCMDQ_TYPE_DEFAULT: Reserved for future use + * @IOMMU_VCMDQ_TYPE_TEGRA241_CMDQV: NVIDIA Tegra241 CMDQV Extension for SMMUv3 */ enum iommu_vcmdq_data_type { IOMMU_VCMDQ_TYPE_DEFAULT = 0, + IOMMU_VCMDQ_TYPE_TEGRA241_CMDQV = 1, +}; + +/** + * struct iommu_vqueue_tegra241_cmdqv - NVIDIA Tegra241's Virtual Command Queue + * for its CMDQV Extension for ARM SMMUv3 + * (IOMMU_VCMDQ_TYPE_TEGRA241_CMDQV) + * @vcmdq_id: logical ID of a virtual command queue in the vIOMMU instance + * @vcmdq_log2size: (1 << @vcmdq_log2size) will be the size of the vcmdq + * @vcmdq_base: guest physical address (IPA) to the vcmdq base address + */ +struct iommu_vcmdq_tegra241_cmdqv { + __u32 vcmdq_id; + __u32 vcmdq_log2size; + __aligned_u64 vcmdq_base; }; /** diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c index aa8653af50f2..162872d82cd4 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-iommufd.c @@ -216,7 +216,7 @@ static int arm_smmu_validate_vste(struct iommu_hwpt_arm_smmuv3 *arg, return 0; } -static struct iommu_domain * +struct iommu_domain * arm_vsmmu_alloc_domain_nested(struct iommufd_viommu *viommu, u32 flags, const struct iommu_user_data *user_data) { @@ -327,8 +327,8 @@ static int arm_vsmmu_convert_user_cmd(struct arm_vsmmu *vsmmu, return 0; } -static int arm_vsmmu_cache_invalidate(struct iommufd_viommu *viommu, - struct iommu_user_data_array *array) +int arm_vsmmu_cache_invalidate(struct iommufd_viommu *viommu, + struct iommu_user_data_array *array) { struct arm_vsmmu *vsmmu = container_of(viommu, struct arm_vsmmu, core); struct arm_smmu_device *smmu = vsmmu->smmu; diff --git a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c index ba029f7d24ce..b778739f845a 100644 --- a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c +++ b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c @@ -8,7 +8,9 @@ #include #include #include +#include #include +#include #include @@ -26,6 +28,7 @@ #define CMDQV_EN BIT(0) #define TEGRA241_CMDQV_PARAM 0x0004 +#define CMDQV_NUM_SID_PER_VM_LOG2 GENMASK(15, 12) #define CMDQV_NUM_VINTF_LOG2 GENMASK(11, 8) #define CMDQV_NUM_VCMDQ_LOG2 GENMASK(7, 4) @@ -53,6 +56,9 @@ #define VINTF_STATUS GENMASK(3, 1) #define VINTF_ENABLED BIT(0) +#define TEGRA241_VINTF_SID_MATCH(s) (0x0040 + 0x4*(s)) +#define TEGRA241_VINTF_SID_REPLACE(s) (0x0080 + 0x4*(s)) + #define TEGRA241_VINTF_LVCMDQ_ERR_MAP_64(m) \ (0x00C0 + 0x8*(m)) #define LVCMDQ_ERR_MAP_NUM_64 2 @@ -114,6 +120,7 @@ MODULE_PARM_DESC(bypass_vcmdq, /** * struct tegra241_vcmdq - Virtual Command Queue + * @core: Embedded iommufd_vcmdq structure * @idx: Global index in the CMDQV * @lidx: Local index in the VINTF * @enabled: Enable status @@ -124,6 +131,8 @@ MODULE_PARM_DESC(bypass_vcmdq, * @page1: MMIO Page1 base address */ struct tegra241_vcmdq { + struct iommufd_vcmdq core; + u16 idx; u16 lidx; @@ -136,18 +145,26 @@ struct tegra241_vcmdq { void __iomem *page0; void __iomem *page1; }; +#define core_to_vcmdq(v) container_of(v, struct tegra241_vcmdq, core) /** * struct tegra241_vintf - Virtual Interface + * @vsmmue: Embedded arm_vsmmu structure * @idx: Global index in the CMDQV + * @vmid: VMID for configuration * @enabled: Enable status * @hyp_own: Owned by hypervisor (in-kernel) * @cmdqv: Parent CMDQV pointer * @lvcmdqs: List of logical VCMDQ pointers * @base: MMIO base address + * @s2_domain: Stage-2 SMMU domain + * @sid_slots: Stream ID Slot allocator */ struct tegra241_vintf { + struct arm_vsmmu vsmmu; + u16 idx; + u16 vmid; bool enabled; bool hyp_own; @@ -156,6 +173,25 @@ struct tegra241_vintf { struct tegra241_vcmdq **lvcmdqs; void __iomem *base; + struct arm_smmu_domain *s2_domain; + unsigned long mmap_pgoff; + + struct ida sid_slots; +}; +#define viommu_to_vintf(v) container_of(v, struct tegra241_vintf, vsmmu.core) + +/** + * struct tegra241_vintf_slot - Virtual Interface Stream ID Slot + * @core: Embedded iommufd_vdevice structure + * @vintf: Parent VINTF pointer + * @sid: Physical Stream ID + * @id: Slot index in the VINTF + */ +struct tegra241_vintf_slot { + struct iommufd_vdevice core; + struct tegra241_vintf *vintf; + u32 sid; + u8 idx; }; /** @@ -163,10 +199,12 @@ struct tegra241_vintf { * @smmu: SMMUv3 device * @dev: CMDQV device * @base: MMIO base address + * @base_phys: MMIO physical base address, for mmap * @irq: IRQ number * @num_vintfs: Total number of VINTFs * @num_vcmdqs: Total number of VCMDQs * @num_lvcmdqs_per_vintf: Number of logical VCMDQs per VINTF + * @num_sids_per_vintf: Total number of SID replacements per VINTF * @vintf_ids: VINTF id allocator * @vintfs: List of VINTFs */ @@ -175,12 +213,14 @@ struct tegra241_cmdqv { struct device *dev; void __iomem *base; + phys_addr_t base_phys; int irq; /* CMDQV Hardware Params */ u16 num_vintfs; u16 num_vcmdqs; u16 num_lvcmdqs_per_vintf; + u16 num_sids_per_vintf; struct ida vintf_ids; @@ -379,6 +419,11 @@ static void tegra241_vcmdq_hw_deinit(struct tegra241_vcmdq *vcmdq) dev_dbg(vcmdq->cmdqv->dev, "%sdeinited\n", h); } +static void _tegra241_vcmdq_hw_init(struct tegra241_vcmdq *vcmdq) +{ + writeq_relaxed(vcmdq->cmdq.q.q_base, REG_VCMDQ_PAGE1(vcmdq, BASE)); +} + static int tegra241_vcmdq_hw_init(struct tegra241_vcmdq *vcmdq) { char header[64], *h = lvcmdq_error_header(vcmdq, header, 64); @@ -388,7 +433,7 @@ static int tegra241_vcmdq_hw_init(struct tegra241_vcmdq *vcmdq) tegra241_vcmdq_hw_deinit(vcmdq); /* Configure and enable VCMDQ */ - writeq_relaxed(vcmdq->cmdq.q.q_base, REG_VCMDQ_PAGE1(vcmdq, BASE)); + _tegra241_vcmdq_hw_init(vcmdq); ret = vcmdq_write_config(vcmdq, VCMDQ_EN); if (ret) { @@ -407,11 +452,16 @@ static int tegra241_vcmdq_hw_init(struct tegra241_vcmdq *vcmdq) static void tegra241_vintf_hw_deinit(struct tegra241_vintf *vintf) { u16 lidx; + int slot; for (lidx = 0; lidx < vintf->cmdqv->num_lvcmdqs_per_vintf; lidx++) if (vintf->lvcmdqs && vintf->lvcmdqs[lidx]) tegra241_vcmdq_hw_deinit(vintf->lvcmdqs[lidx]); vintf_write_config(vintf, 0); + for (slot = 0; slot < vintf->cmdqv->num_sids_per_vintf; slot++) { + writel_relaxed(0, REG_VINTF(vintf, SID_REPLACE(slot))); + writel_relaxed(0, REG_VINTF(vintf, SID_MATCH(slot))); + } } static int tegra241_vintf_hw_init(struct tegra241_vintf *vintf, bool hyp_own) @@ -429,7 +479,8 @@ static int tegra241_vintf_hw_init(struct tegra241_vintf *vintf, bool hyp_own) * whether enabling it here or not, as !HYP_OWN cmdq HWs only support a * restricted set of supported commands. */ - regval = FIELD_PREP(VINTF_HYP_OWN, hyp_own); + regval = FIELD_PREP(VINTF_HYP_OWN, hyp_own) | + FIELD_PREP(VINTF_VMID, vintf->vmid); writel(regval, REG_VINTF(vintf, CONFIG)); ret = vintf_write_config(vintf, regval | VINTF_EN); @@ -555,7 +606,9 @@ static void tegra241_vintf_free_lvcmdq(struct tegra241_vintf *vintf, u16 lidx) dev_dbg(vintf->cmdqv->dev, "%sdeallocated\n", lvcmdq_error_header(vcmdq, header, 64)); - kfree(vcmdq); + /* Guest-owned VCMDQ is free-ed with vcmdq by iommufd core */ + if (vcmdq->vintf->hyp_own) + kfree(vcmdq); } static struct tegra241_vcmdq * @@ -594,6 +647,9 @@ tegra241_vintf_alloc_lvcmdq(struct tegra241_vintf *vintf, u16 lidx) static void tegra241_cmdqv_deinit_vintf(struct tegra241_cmdqv *cmdqv, u16 idx) { + if (cmdqv->vintfs[idx]->mmap_pgoff) + iommufd_ctx_free_mmap(cmdqv->vintfs[idx]->vsmmu.core.ictx, + cmdqv->vintfs[idx]->mmap_pgoff); kfree(cmdqv->vintfs[idx]->lvcmdqs); ida_free(&cmdqv->vintf_ids, idx); cmdqv->vintfs[idx] = NULL; @@ -649,7 +705,11 @@ static void tegra241_cmdqv_remove_vintf(struct tegra241_cmdqv *cmdqv, u16 idx) dev_dbg(cmdqv->dev, "VINTF%u: deallocated\n", vintf->idx); tegra241_cmdqv_deinit_vintf(cmdqv, idx); - kfree(vintf); + if (!vintf->hyp_own) + ida_destroy(&vintf->sid_slots); + /* Guest-owned VINTF is free-ed with viommu by iommufd core */ + if (vintf->hyp_own) + kfree(vintf); } static void tegra241_cmdqv_remove(struct arm_smmu_device *smmu) @@ -677,10 +737,17 @@ static void tegra241_cmdqv_remove(struct arm_smmu_device *smmu) put_device(cmdqv->dev); /* smmu->impl_dev */ } +static struct arm_vsmmu * +tegra241_cmdqv_vsmmu_alloc(struct arm_smmu_device *smmu, + struct arm_smmu_domain *smmu_domain, + struct iommufd_ctx *ictx, unsigned int viommu_type, + const struct iommu_user_data *user_data); + static struct arm_smmu_impl_ops tegra241_cmdqv_impl_ops = { .get_secondary_cmdq = tegra241_cmdqv_get_cmdq, .device_reset = tegra241_cmdqv_hw_reset, .device_remove = tegra241_cmdqv_remove, + .vsmmu_alloc = tegra241_cmdqv_vsmmu_alloc, }; /* Probe Functions */ @@ -822,6 +889,7 @@ __tegra241_cmdqv_probe(struct arm_smmu_device *smmu, struct resource *res, cmdqv->irq = irq; cmdqv->base = base; cmdqv->dev = smmu->impl_dev; + cmdqv->base_phys = res->start; if (cmdqv->irq > 0) { ret = request_threaded_irq(irq, NULL, tegra241_cmdqv_isr, @@ -838,6 +906,8 @@ __tegra241_cmdqv_probe(struct arm_smmu_device *smmu, struct resource *res, cmdqv->num_vintfs = 1 << FIELD_GET(CMDQV_NUM_VINTF_LOG2, regval); cmdqv->num_vcmdqs = 1 << FIELD_GET(CMDQV_NUM_VCMDQ_LOG2, regval); cmdqv->num_lvcmdqs_per_vintf = cmdqv->num_vcmdqs / cmdqv->num_vintfs; + cmdqv->num_sids_per_vintf = + 1 << FIELD_GET(CMDQV_NUM_SID_PER_VM_LOG2, regval); cmdqv->vintfs = kcalloc(cmdqv->num_vintfs, sizeof(*cmdqv->vintfs), GFP_KERNEL); @@ -891,3 +961,247 @@ struct arm_smmu_device *tegra241_cmdqv_probe(struct arm_smmu_device *smmu) put_device(smmu->impl_dev); return ERR_PTR(-ENODEV); } + +/* User-space vIOMMU and vCMDQ Functions */ + +static int tegra241_vcmdq_hw_init_user(struct tegra241_vcmdq *vcmdq) +{ + char header[64]; + + /* Configure the vcmdq only; User space does the enabling */ + _tegra241_vcmdq_hw_init(vcmdq); + + dev_dbg(vcmdq->cmdqv->dev, "%sinited at host PA 0x%llx size 0x%lx\n", + lvcmdq_error_header(vcmdq, header, 64), + vcmdq->cmdq.q.q_base & VCMDQ_ADDR, + 1UL << (vcmdq->cmdq.q.q_base & VCMDQ_LOG2SIZE)); + return 0; +} + +static struct iommufd_vcmdq * +tegra241_cmdqv_vcmdq_alloc(struct iommufd_viommu *viommu, + const struct iommu_user_data *user_data) +{ + struct tegra241_vintf *vintf = viommu_to_vintf(viommu); + struct tegra241_cmdqv *cmdqv = vintf->cmdqv; + struct iommu_vcmdq_tegra241_cmdqv arg; + struct tegra241_vcmdq *vcmdq; + phys_addr_t q_base; + char header[64]; + int ret; + + ret = iommu_copy_struct_from_user( + &arg, user_data, IOMMU_VCMDQ_TYPE_TEGRA241_CMDQV, vcmdq_base); + if (ret) + return ERR_PTR(ret); + + if (!arg.vcmdq_base || arg.vcmdq_base & ~VCMDQ_ADDR) + return ERR_PTR(-EINVAL); + if (!arg.vcmdq_log2size || arg.vcmdq_log2size > VCMDQ_LOG2SIZE) + return ERR_PTR(-EINVAL); + if (arg.vcmdq_id >= cmdqv->num_lvcmdqs_per_vintf) + return ERR_PTR(-EINVAL); + q_base = arm_smmu_domain_ipa_to_pa(vintf->s2_domain, arg.vcmdq_base); + if (!q_base) + return ERR_PTR(-EINVAL); + + if (vintf->lvcmdqs[arg.vcmdq_id]) { + vcmdq = vintf->lvcmdqs[arg.vcmdq_id]; + + /* deinit the previous setting as a reset, before re-init */ + tegra241_vcmdq_hw_deinit(vcmdq); + + vcmdq->cmdq.q.q_base = q_base & VCMDQ_ADDR; + vcmdq->cmdq.q.q_base |= arg.vcmdq_log2size; + tegra241_vcmdq_hw_init_user(vcmdq); + + return &vcmdq->core; + } + + vcmdq = iommufd_vcmdq_alloc(viommu, struct tegra241_vcmdq, core); + if (!vcmdq) + return ERR_PTR(-ENOMEM); + + ret = tegra241_vintf_init_lvcmdq(vintf, arg.vcmdq_id, vcmdq); + if (ret) + goto free_vcmdq; + dev_dbg(cmdqv->dev, "%sallocated\n", + lvcmdq_error_header(vcmdq, header, 64)); + + vcmdq->cmdq.q.q_base = q_base & VCMDQ_ADDR; + vcmdq->cmdq.q.q_base |= arg.vcmdq_log2size; + + ret = tegra241_vcmdq_hw_init_user(vcmdq); + if (ret) + goto free_vcmdq; + vintf->lvcmdqs[arg.vcmdq_id] = vcmdq; + + return &vcmdq->core; +free_vcmdq: + iommufd_struct_destroy(viommu->ictx, vcmdq, core); + return ERR_PTR(ret); +} + +static void tegra241_cmdqv_vcmdq_free(struct iommufd_vcmdq *core) +{ + struct tegra241_vcmdq *vcmdq = core_to_vcmdq(core); + + tegra241_vintf_remove_lvcmdq(vcmdq->vintf, vcmdq->lidx); + + /* IOMMUFD core frees the memory of vcmdq and vcmdq */ +} + +static void tegra241_cmdqv_viommu_destroy(struct iommufd_viommu *viommu) +{ + struct tegra241_vintf *vintf = viommu_to_vintf(viommu); + + tegra241_cmdqv_remove_vintf(vintf->cmdqv, vintf->idx); + + /* IOMMUFD core frees the memory of vintf and viommu */ +} + +static struct iommufd_vdevice * +tegra241_cmdqv_vdevice_alloc(struct iommufd_viommu *viommu, struct device *dev, + u64 dev_id) +{ + struct tegra241_vintf *vintf = viommu_to_vintf(viommu); + struct arm_smmu_master *master = dev_iommu_priv_get(dev); + struct arm_smmu_stream *stream = &master->streams[0]; + struct tegra241_vintf_slot *slot; + int idx; + + if (dev_id > UINT_MAX) + return ERR_PTR(-EINVAL); + + slot = iommufd_vdevice_alloc(viommu, struct tegra241_vintf_slot, core); + if (!slot) + return ERR_PTR(-ENOMEM); + + WARN_ON_ONCE(master->num_streams != 1); + + /* Find an empty slot of SID_MATCH and SID_REPLACE */ + idx = ida_alloc_max(&vintf->sid_slots, + vintf->cmdqv->num_sids_per_vintf - 1, GFP_KERNEL); + if (idx < 0) { + iommufd_struct_destroy(viommu->ictx, slot, core); + return ERR_PTR(idx); + } + + writel_relaxed(stream->id, REG_VINTF(vintf, SID_REPLACE(idx))); + writel_relaxed(dev_id << 1 | 0x1, REG_VINTF(vintf, SID_MATCH(idx))); + dev_dbg(vintf->cmdqv->dev, + "VINTF%u: allocated a slot (%d) for pSID=%x, vSID=%x\n", + vintf->idx, idx, stream->id, (u32)dev_id); + + slot->idx = idx; + slot->vintf = vintf; + slot->sid = stream->id; + + return &slot->core; +} + +static void tegra241_cmdqv_vdevice_destroy(struct iommufd_vdevice *vdev) +{ + struct tegra241_vintf_slot *slot = + container_of(vdev, struct tegra241_vintf_slot, core); + struct tegra241_vintf *vintf = slot->vintf; + + writel_relaxed(0, REG_VINTF(vintf, SID_REPLACE(slot->idx))); + writel_relaxed(0, REG_VINTF(vintf, SID_MATCH(slot->idx))); + ida_free(&vintf->sid_slots, slot->idx); + dev_dbg(vintf->cmdqv->dev, + "VINTF%u: deallocated a slot (%d) for pSID=%x\n", vintf->idx, + slot->idx, slot->sid); + + /* IOMMUFD core frees the memory of slot and vdev */ +} + +static struct iommufd_viommu_ops tegra241_cmdqv_viommu_ops = { + .destroy = tegra241_cmdqv_viommu_destroy, + .alloc_domain_nested = arm_vsmmu_alloc_domain_nested, + .cache_invalidate = arm_vsmmu_cache_invalidate, + .vdevice_alloc = tegra241_cmdqv_vdevice_alloc, + .vdevice_destroy = tegra241_cmdqv_vdevice_destroy, + .vcmdq_alloc = tegra241_cmdqv_vcmdq_alloc, + .vcmdq_free = tegra241_cmdqv_vcmdq_free, +}; + +static struct arm_vsmmu * +tegra241_cmdqv_vsmmu_alloc(struct arm_smmu_device *smmu, + struct arm_smmu_domain *smmu_domain, + struct iommufd_ctx *ictx, unsigned int viommu_type, + const struct iommu_user_data *user_data) +{ + struct tegra241_cmdqv *cmdqv = + container_of(smmu, struct tegra241_cmdqv, smmu); + struct iommu_viommu_tegra241_cmdqv data; + struct tegra241_vintf *vintf; + phys_addr_t page0_base; + int ret; + + if (viommu_type != IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV) + return ERR_PTR(-EOPNOTSUPP); + if (!smmu_domain || smmu_domain->stage != ARM_SMMU_DOMAIN_S2) + return ERR_PTR(-EINVAL); + if (!user_data) + return ERR_PTR(-EINVAL); + + ret = iommu_copy_struct_from_user(&data, user_data, + IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV, + out_vintf_page0_pgsz); + if (ret) + return ERR_PTR(ret); + + vintf = iommufd_viommu_alloc(ictx, struct tegra241_vintf, vsmmu.core, + &tegra241_cmdqv_viommu_ops); + if (!vintf) + return ERR_PTR(-ENOMEM); + + ret = tegra241_cmdqv_init_vintf(cmdqv, cmdqv->num_vintfs - 1, vintf); + if (ret < 0) { + dev_err(cmdqv->dev, "no more available vintf\n"); + goto free_vintf; + } + + vintf->s2_domain = smmu_domain; + vintf->vmid = smmu_domain->s2_cfg.vmid; + + ret = tegra241_vintf_hw_init(vintf, false); + if (ret) + goto deinit_vintf; + + vintf->lvcmdqs = kcalloc(cmdqv->num_lvcmdqs_per_vintf, + sizeof(*vintf->lvcmdqs), GFP_KERNEL); + if (!vintf->lvcmdqs) { + ret = -ENOMEM; + goto hw_deinit_vintf; + } + + page0_base = cmdqv->base_phys + TEGRA241_VINTFi_PAGE0(vintf->idx); + ret = iommufd_ctx_alloc_mmap(ictx, page0_base, SZ_64K, true, + &vintf->mmap_pgoff); + if (ret) + goto hw_deinit_vintf; + + data.out_vintf_page0_pgsz = SZ_64K; + data.out_vintf_page0_pgoff = vintf->mmap_pgoff; + ret = iommu_copy_struct_to_user(user_data, &data, + IOMMU_VIOMMU_TYPE_TEGRA241_CMDQV, + out_vintf_page0_pgsz); + if (ret) + goto hw_deinit_vintf; + + ida_init(&vintf->sid_slots); + + dev_dbg(cmdqv->dev, "VINTF%u: allocated with vmid (%d)\n", vintf->idx, + vintf->vmid); + + return &vintf->vsmmu; +hw_deinit_vintf: + tegra241_vintf_hw_deinit(vintf); +deinit_vintf: + tegra241_cmdqv_deinit_vintf(cmdqv, vintf->idx); +free_vintf: + iommufd_struct_destroy(ictx, vintf, vsmmu.core); + return ERR_PTR(ret); +} From patchwork Fri Apr 11 06:37:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 880690 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on2063.outbound.protection.outlook.com [40.107.102.63]) (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 6527C28152F; Fri, 11 Apr 2025 06:38:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.102.63 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353532; cv=fail; b=c3lBwctZjOVeaYgOM/XUm6rgUvFxSQn+tNIASVxTKJeBRsAKdeRL1qVcahoYjmEq1zMm/ILxSU/61ccMgFeValTVp39BeprkjOZU0xNq2mh6NQQn9MacgHtggPEd/vi4jwr5jM3W76PlSSyuB8bgr2dRN70BSdpcEJ6L04AdSyI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744353532; c=relaxed/simple; bh=VCc/ll5Dev7wAimiV2e7egiLS8RuzJmRBR/3QmNXoyE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=avebwlZ2EWHbivIiyKj1M52hvwSl6xmgSwPwtKKZY6EKTPQcaghF7dMJ3CFlAVhQZUx/fiHaJKHzbyu7BVsVYWowOCYhYUnhGvcRXGVsDvbU3ckuXlGrnoV9ad5nLTI6EYU5blid7IvaOcPnc1tewpN4tC5AmZV1/QrnS8IOlgQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=IlZZjTQ2; arc=fail smtp.client-ip=40.107.102.63 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="IlZZjTQ2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nuuEAPFVoR87JHhJp7np0pX+xOhCdFLbAeofbG/Uqd9NvSY1zMGSSJznS08y9eKigTQkKvefxYfi4aIgn7k+1hKkbVTUndampj+khHJTEY4oCPqh1GHJtQW8EE7NQW+w92yaZEJ2jrx4nrDdRZ4uIycW7LvEX93sUjnfjPrqeCy3Aw0/UKFRET2XGTgpvGRVqj0wm5tWXgGMsgACZHHkgmJeU+bbba0V0EKFK3PPp3GI1/QLGHOhqWt6lNHd+7zjVRkvI7E8lnMTwiCU73Ed4rqAgo1H1iDKmmsoCeap8qKf9zLMEox1kix19sBwCwcwbzPa5DC0rLrLolzBhD5EMA== 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=d7gPTdDnFSQn+n3MYxvJDXUwZhr+1/Fg90lwDTJNLPI=; b=UPPMTK4uBTjOqBmk2B1AKTK3ajZUuv9alSH7ihQXKPZnASXqC8PKtorN8NRFaWkrOuVf31TggEkeiwf7mh2vIUp3MakXxvAwhefBkDYakvuUNC9Vyv8Z0rH86aQKYPCjAp0K1yZG/GQ2HpcHB+Y+JBS+UfzqZSNOFW5lacrdRFg4XLYxC4BhkUio+I2giV+EzVD4fTk8gRQJGex9Zq63v10pVuAH1fXcdwdAaG2OpDSmd2vwuob2gTc4tXDEz8SOHMf9dgBH+8Ko1t65eXkJ3jnaZPVxiM7YuXYYsKR64lJQz250KUsGo9F6YiQp1YrzvaaycQbg6aR0NF8k4V9E2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=d7gPTdDnFSQn+n3MYxvJDXUwZhr+1/Fg90lwDTJNLPI=; b=IlZZjTQ2+ITK5RHCZUE31ygytFiWkmXIQ74A30HpyqSJZrXT3Ldqh6FYIOqapuC/2V3eshrrIGaD3Y4jtWzXpMhYOfp8mj0YrX0CeMbvJ/8Olr+UMoxJNYVzkgV2a2FUYac206+VjiJrCDbB9YLzynFxLMY/NDAgHakQGk3I2UfKSXfhorUoGwRLIe49K2015vPu6LaEsECS2ONEP10HVz1/o8kogrBCBy4pL0HaRGun/o+CIwQX18b/waZfQ3elFZjCEAF1wCRO5Xq61dMNIzCnTnRyP6dQFRHe+wN81YNSsIYnpMBqZDvbMIwaF20oojSJ4431Zh675Wq+LuKFZw== Received: from BYAPR11CA0060.namprd11.prod.outlook.com (2603:10b6:a03:80::37) by SN7PR12MB8132.namprd12.prod.outlook.com (2603:10b6:806:321::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.34; Fri, 11 Apr 2025 06:38:46 +0000 Received: from SJ5PEPF000001F2.namprd05.prod.outlook.com (2603:10b6:a03:80:cafe::ba) by BYAPR11CA0060.outlook.office365.com (2603:10b6:a03:80::37) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8632.26 via Frontend Transport; Fri, 11 Apr 2025 06:38:46 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SJ5PEPF000001F2.mail.protection.outlook.com (10.167.242.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.13 via Frontend Transport; Fri, 11 Apr 2025 06:38:46 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 10 Apr 2025 23:38:35 -0700 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Thu, 10 Apr 2025 23:38:35 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.9) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Thu, 10 Apr 2025 23:38:33 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , Subject: [PATCH v1 16/16] iommu/tegra241-cmdqv: Add IOMMU_VEVENTQ_TYPE_TEGRA241_CMDQV support Date: Thu, 10 Apr 2025 23:37:55 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F2:EE_|SN7PR12MB8132:EE_ X-MS-Office365-Filtering-Correlation-Id: b0d62232-6d1b-4e65-d974-08dd78c382d1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|36860700013|1800799024|376014|7416014; X-Microsoft-Antispam-Message-Info: tYGHHOoWT4GfFTmXzgTXstoCSnU1VBCCePXgCeikAi+errbZcY9VS+NGR9+ojCZmLVae+rIGLLlcKfa7v/PKi96+w6MgUlYDN2VyTLoJ5emjHnzE2cqhbrC1jDM+h2D32LdH56EYNdnKDkW/intNJt8LA7E89JyNXp5Rk+ei260CxrHPzp9g9bWY6mFTPALMgJvYzpUr4KlFts4zcPlWW04L/YQsspgA6QbWNS2OH+ETkhVfDESiJuyrrygdI8pp3D2m6aMGj9tdLoi3MwB4/e6gr1UfePZbvd3Li0iFlPsPJWsr3xRYjslMa46NqJmUWrUAiKBZSNkmOADxXmBshNGpsHWjtdiySy93rEEeSn6ayFpSUmx8t5s0smSWGwTzsnb73FdnCnaPfvDmskR6BE7YIg2QMF5UAixsFt57c+njOJJpqiG+dbdFLadhrTO5ngH5gSMneURPVeso6H8+2rDBMF/XvIpp6yZt5cv41DmUgJWNoUAVJ8le++VLcYomltqE2u/s+COQswEINL307LsuOGbkCqBK+mdLsCop3KVt2qW1CsYIQeAhvLcHuzWR7AqrCbdHE2f80kzqV62gPKmrARBynndfJ+rsTM/N34j07ZNoug02cRrmDd0xJic6Em2UOiqi3I55EYWWi/+12nIVPBw79PKq9QKQPpfVbDfyapd/IeWVREpa2Vj/NXxnTW/tdtZ2PK5Re7D2gwDkb5OnCp9Vang6htDYT4gXxUMDR8RUwCx3jDRlQ9ftgbzoIo9XNheGdUSYg1WcTBEv/4yi9TiRL8ypUMhzeOlbinbDxbpdnaJpQLXsFAcTpp9xLSvuXokTbfrJnkHqZmMyd+oJseK8DGzL8S6BxUJEwQZw/1SnfrccUlegRUFjHB/8ZzxMhe0lLXwv5n64euOB9IqNamgeEUCsuWBfeNtKoMprlmIVr9exrNksDtXeRjdwbnskagEfBrnFGkrSugmjQV8LeGPdvG+l2qBoNGNpBr2NoTLu3dKxR1GF9YVMTVR3lrWBDhx5EdDUAv25WvIzUbsAHDNhVJN2HEnhrdjV3uKC9jdIuXqUtmubhQP+VCCRBt3ohEkmxl5/Z1GYSuPlgZq7TMhuuMH7cr9y18ggNogGDavxrv0IrHPApZCdJZ2El39BNsNeYutLJJsT3bVZlmW2PP4ui9gDVJU7NY3Ns7T0MqE/Pf1I1aPTk4Knu5lPu3eqb2o64XZ0V5D+2LolKhuqstHouBnozYbyn2SiKmR0CKAimsJbwRxpieziApUjy/B2yN3/xK9f8KJhmV75G15bzi1LdLiUSPlE+IWDLEDdPqgvx06GG9BqY2fTx2EdP44u3gJYMEnlIO4HBdQ90KmkEVOc4W0WRq6wJErFAVn2l+Q597kDFuhozLXXtgvKH3YX+Y+tK0CyDqB4BqnERucx51Ok7pH4zBNyl2jHQgOadm2DRYOfQdyc/pGL93saipQz5AVUmoMhmXb0MQGG8AZ7T2+g89y5rvF8ASUMTUOrV9tLZcibHf+3EKO6RONy X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(36860700013)(1800799024)(376014)(7416014); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2025 06:38:46.5068 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b0d62232-6d1b-4e65-d974-08dd78c382d1 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F2.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB8132 Add a new vEVENTQ type for VINTFs that are assigned to the user space. Simply report the two 64-bit LVCMDQ_ERR_MAPs register values. Signed-off-by: Nicolin Chen --- include/uapi/linux/iommufd.h | 15 +++++++++++++ .../iommu/arm/arm-smmu-v3/tegra241-cmdqv.c | 22 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/include/uapi/linux/iommufd.h b/include/uapi/linux/iommufd.h index ce20f038b56b..dd3f6c021024 100644 --- a/include/uapi/linux/iommufd.h +++ b/include/uapi/linux/iommufd.h @@ -1100,10 +1100,12 @@ struct iommufd_vevent_header { * enum iommu_veventq_type - Virtual Event Queue Type * @IOMMU_VEVENTQ_TYPE_DEFAULT: Reserved for future use * @IOMMU_VEVENTQ_TYPE_ARM_SMMUV3: ARM SMMUv3 Virtual Event Queue + * @IOMMU_VEVENTQ_TYPE_TEGRA241_CMDQV: NVIDIA Tegra241 CMDQV Extension IRQ */ enum iommu_veventq_type { IOMMU_VEVENTQ_TYPE_DEFAULT = 0, IOMMU_VEVENTQ_TYPE_ARM_SMMUV3 = 1, + IOMMU_VEVENTQ_TYPE_TEGRA241_CMDQV = 2, }; /** @@ -1127,6 +1129,19 @@ struct iommu_vevent_arm_smmuv3 { __aligned_le64 evt[4]; }; +/** + * struct iommu_vevent_tegra241_cmdqv - Tegra241 CMDQV Virtual IRQ + * (IOMMU_VEVENTQ_TYPE_TEGRA241_CMDQV) + * @lvcmdq_err_map: 128-bit logical vcmdq error map, little-endian. + * (Refer to register LVCMDQ_ERR_MAPs per VINTF ) + * + * The 128-bit register values from HW exclusively reflect the error bits for a + * Virtual Interface represented by a vIOMMU object. Read and report directly. + */ +struct iommu_vevent_tegra241_cmdqv { + __aligned_le64 lvcmdq_err_map[2]; +}; + /** * struct iommu_veventq_alloc - ioctl(IOMMU_VEVENTQ_ALLOC) * @size: sizeof(struct iommu_veventq_alloc) diff --git a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c index b778739f845a..dafaeff8d51d 100644 --- a/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c +++ b/drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c @@ -292,6 +292,20 @@ static inline int vcmdq_write_config(struct tegra241_vcmdq *vcmdq, u32 regval) /* ISR Functions */ +static void tegra241_vintf_user_handle_error(struct tegra241_vintf *vintf) +{ + struct iommufd_viommu *viommu = &vintf->vsmmu.core; + struct iommu_vevent_tegra241_cmdqv vevent_data; + int i; + + for (i = 0; i < LVCMDQ_ERR_MAP_NUM_64; i++) + vevent_data.lvcmdq_err_map[i] = + readq_relaxed(REG_VINTF(vintf, LVCMDQ_ERR_MAP_64(i))); + + iommufd_viommu_report_event(viommu, IOMMU_VEVENTQ_TYPE_TEGRA241_CMDQV, + &vevent_data, sizeof(vevent_data)); +} + static void tegra241_vintf0_handle_error(struct tegra241_vintf *vintf) { int i; @@ -337,6 +351,14 @@ static irqreturn_t tegra241_cmdqv_isr(int irq, void *devid) vintf_map &= ~BIT_ULL(0); } + /* Handle other user VINTFs and their LVCMDQs */ + while (vintf_map) { + unsigned long idx = __ffs64(vintf_map); + + tegra241_vintf_user_handle_error(cmdqv->vintfs[idx]); + vintf_map &= ~BIT_ULL(idx); + } + return IRQ_HANDLED; }