From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9464BC8303D for ; Sat, 5 Jul 2025 02:09:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Type: Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-ID:Date :Subject:CC:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=E1V5AQjmmsK5hL0iMgoOJSM6TUZTNMgyem8EQFASaZc=; b=TloPFgQSBTEvuaMR192RlSErYD Nht+FU6LWCXeCsNdNZrF23hZLrjQBacLutiQo4fWGRjUGqsdHyUGdq8PYEfQVqE7Kq4ZCqZccOjKK VIKtBDzx2aU5OvldFawjA1tTeoGmkt0lkWvJSiYKNnkse9sbYribW89ra/54e5sutljuhUyACjN64 YpYyF4cgVhzrCZn6I3F1PMrOhL7BEJig+M+TzZOW/D0xzD+V+7Wgz+Zia0z4eMC1EWrITaBCZHUPm tIjNlyKm0Cgk76aBNa7Rr2IJGP37QMj1iIGH1IirI0x6339cUQ29M5utBzkV/HsaXu6HV7FJfOO8Q 34OSiIGw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uXsLG-0000000FrUi-1hYl; Sat, 05 Jul 2025 02:09:26 +0000 Received: from mail-co1nam11on20629.outbound.protection.outlook.com ([2a01:111:f403:2416::629] helo=NAM11-CO1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uXrUP-0000000Flk0-2DbW for linux-arm-kernel@lists.infradead.org; Sat, 05 Jul 2025 01:14:51 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RjF8DwbhTXsvYomkVWc8aqn4SFTZSMbCVtxsjURM7pYvAr3ZjvU7L6AaFhebcYlVBMjCuIc85IgA+0XikFnZsQgCe18tdMpw1uRMdI7Tdrmnfe+GiTgTsBwWVeOIxVFYfY7Y4Ruw2UaNTkl0VJngzhicjZbjYdG8JxvLbGe92NmV1UhIphmOjA1jgH3X0u1odfmtbcgNZpNL38vijIcan5QKA2ldnBBWdenOpsFPlgiUpwsGP3iVm9lctCAKYy2DYvZpqfBY9HIxa19XhFVuyGdfM2pPj4lVA7P46w+V+FfzZB95jBZj/r65ugoQe8wDLeRQ5xKSSHBLCzMBY/2Gow== 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=E1V5AQjmmsK5hL0iMgoOJSM6TUZTNMgyem8EQFASaZc=; b=RDsazSlFO6hLr8zDIXHrxH3yQm++fDLiF7Jpj6aJapjltpU6lsOtOzkxgOiqZ591nDYrduSkzMMynOHIRyeLoi9MkcnjmD/M9m4pTS5GyCaGYUVyTMK6ekPTyk5jyqSgY8R9WPLrSrl5EZyWYmQIuvnEuS0oZaQhc7dQqOdlphZZJZNt5as2RE18UMRFHHqdy/2GjyCkOTdsMNlpwxyQPG08TagCUMbNEkMTbXMSj3IYHT9A6Yxnt39M/iR7ef7w+xe9WxgVDsOMgJu26MLx8Z26LF5Io4RVcwVfnLCj4sdcwE/Z2Y9Wx5jOSFLMrC2piky6ESrE2rWQYeBxOZBJOw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=amd.com 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=E1V5AQjmmsK5hL0iMgoOJSM6TUZTNMgyem8EQFASaZc=; b=nkdlUIxr4BbH4y5/qyKXesd2znaW2Og6PmCXJog5CpLmarzw0cKBWWtHWCvdks/iarOegm3yaMoCoe7Z2IIt/96GEMvSWDKEd8T9ZZuXuNhkv10yFhoHBWyyHuLZCg8QwDdzXWfBGRf6Fd4Wt8CA0PS7CoVmVYYwrY83ntxJugsXw1iXjOTbvj/UUDMvX0NCkDFXGFmbe93oqyi6aiVLCvN7IsfmWcbqHWIRFifwHtKj4zJQwIt8dMgr/uCMBowiN18ol9t15K6etMHPZ/UI2B37MHQzKHYnNBQt/jJ5ociglUFipo9pNXpE8JX2ol5WdavSIGoIqBwMq4HCv094OQ== Received: from SJ0PR05CA0148.namprd05.prod.outlook.com (2603:10b6:a03:33d::33) by DM6PR12MB4076.namprd12.prod.outlook.com (2603:10b6:5:213::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.21; Sat, 5 Jul 2025 01:14:43 +0000 Received: from CO1PEPF000042AE.namprd03.prod.outlook.com (2603:10b6:a03:33d:cafe::5) by SJ0PR05CA0148.outlook.office365.com (2603:10b6:a03:33d::33) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8922.16 via Frontend Transport; Sat, 5 Jul 2025 01:14:42 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by CO1PEPF000042AE.mail.protection.outlook.com (10.167.243.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.15 via Frontend Transport; Sat, 5 Jul 2025 01:14:42 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 4 Jul 2025 18:14:28 -0700 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Fri, 4 Jul 2025 18:14:28 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Fri, 4 Jul 2025 18:14:26 -0700 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v8 21/29] iommufd: Allow an input data_type via iommu_hw_info Date: Fri, 4 Jul 2025 18:13:37 -0700 Message-ID: <39a97049854980238304131c83a0cbd2e84a689c.1751677708.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AE:EE_|DM6PR12MB4076:EE_ X-MS-Office365-Filtering-Correlation-Id: ce72388e-43ee-4970-d7ce-08ddbb61527e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|82310400026|376014|7416014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Yd/99UIJkfaiu9ZODR4oTcLGmYdD3cFWubvnoJBinbHxLyIX9DFY+WPTqFWN?= =?us-ascii?Q?hmfDWtFFo7z8YRdKAdx4gxJjjEjSjQJzoG3RnEQDG66Ni6V3LBdn1zaTJVBW?= =?us-ascii?Q?3d8z1y4GWbC02FYMpRHkSdSKI+FwmjqCopC4ih9JcVcFN/ZjwM8AGxPqLqT6?= =?us-ascii?Q?rT+P9HzJQkThyvkxBmLlfUoSXH44F4cjO/gTf92hbq2CDtZapmO0sShVJqK9?= =?us-ascii?Q?LS7a7K8ogGF/2OYXguAyJ9zkIJ23grSALUrodwfHB7WrYPAltT2/n5X15xGa?= =?us-ascii?Q?nzSAvUVoe+CslwB8NqZSGKFayuVfl8r14Sh3cWEEeT8j8EFjwAzypP9khPws?= =?us-ascii?Q?iYrMYWH2GacbOnDaIJDlwit3/6rWMYpcnt2BjXfRa/5RNi1kK4C5qZ+2vN4M?= =?us-ascii?Q?LwpCoDwQS3+ksIJOREB/Q3DiA4pGst7S6tkL6KsRjsZHtsgw8K9Leek5yf8G?= =?us-ascii?Q?ibbO4Ro6J2SwIeH4rmkPczN/hlgHnqY/UcJZJqk8fLIBfZu3j2RZG6wXyDKD?= =?us-ascii?Q?GQuMvNvZgArzFlKQGm/1lPq8PX4FTx8AtQBAqwrvUujfQUJh+jYifRZf4UYh?= =?us-ascii?Q?gqn1MEvNL5JNwde2NDCHDHmlTVStA02kj2lHiJZ9TmyWHrPqrTllyeaGdIue?= =?us-ascii?Q?xxyz906r5M0nm+jNYXyADuQ/g2OmYYEdD2KH2KFanXmZfnXwSlOelyrD4LXK?= =?us-ascii?Q?pUQZzE/JPki4dDCzVqeV3otywh8g4iE1wGUqhMnDaRA1fFsEMugfsOxqvCwp?= =?us-ascii?Q?cH6gVQV5OLh51bZNHHfe9jQ8H47skmdOImts4/YxLR6rIPoZPgrYvBKHQevo?= =?us-ascii?Q?WvrMrGrlY0zz+QN7ItbwysPKIhTwsccPQi9q7Z9hgpyihVSe5Ma294qr5LBq?= =?us-ascii?Q?wps7JmwCNFXy1hGFV+9pONiIax8yVrYUdAeUnXOeCUxRiebfEuSRvZ0KZaMx?= =?us-ascii?Q?oJW+gzYWlA+O9XC0Jvxk8rjNHRSjkMH6PIidxdN7LZ8N8P82D6urNbhWUedP?= =?us-ascii?Q?HjYCpQJ+wJ0hC5Lx5jV9atMCh8a1VTgOMle82ivR8QnghPwCAnRCT1Tew41O?= =?us-ascii?Q?DsalXLEM51CHBOUzP1uK9aDNjZZmsXXHfeUsDEVLZJriOXe+WNYV7ytz/exy?= =?us-ascii?Q?A9ZLz0ieT5pfCz0stTDTD+SXJtUsWBp2TMEb/xeQobyAPjm1Bq/1A0mdazaX?= =?us-ascii?Q?L3wMYNbonYc2Z90MrEMBcFM8D4qd5ZACk4wyMXMEY3MVCxoVNq93JGAZ5JOG?= =?us-ascii?Q?LsRm1u+AuwkcPxoTBlVvSfX2lE+4gkdvJXeSifHb8Z1yhtSmdpTIYjIeujne?= =?us-ascii?Q?qftg58x0AfiIflLSRGk9GxFKpGM97V+FYKRJ3C44VWNiiCI4gNBKK3waXDi0?= =?us-ascii?Q?N80/S/sSMzhP9DbxRXvegyYHmlU7zFKHfXRnfZ/JPJwPUIS2lSwIY/n/uU2V?= =?us-ascii?Q?UrxzNAQpxf8FS2glGz+wV9gPUQStTM7VaV6oX5HeIbXwkJOHZoWLWVuMuo1X?= =?us-ascii?Q?63I4+bvuckRT6JgCimtlbePH5Lk/ZrH+Hw3M?= X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(82310400026)(376014)(7416014);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2025 01:14:42.5784 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ce72388e-43ee-4970-d7ce-08ddbb61527e X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000042AE.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4076 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250704_181449_640163_832ED982 X-CRM114-Status: GOOD ( 16.82 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The iommu_hw_info can output via the out_data_type field the vendor data type from a driver, but this only allows driver to report one data type. Now, with SMMUv3 having a Tegra241 CMDQV implementation, it has two sets of types and data structs to report. One way to support that is to use the same type field bidirectionally. Reuse the same field by adding an "in_data_type", allowing user space to request for a specific type and to get the corresponding data. For backward compatibility, since the ioctl handler has never checked an input value, add an IOMMU_HW_INFO_FLAG_INPUT_TYPE to switch between the old output-only field and the new bidirectional field. Reviewed-by: Kevin Tian Reviewed-by: Jason Gunthorpe Reviewed-by: Lu Baolu Reviewed-by: Pranjal Shrivastava Signed-off-by: Nicolin Chen --- include/uapi/linux/iommufd.h | 20 +++++++++++++++++++- drivers/iommu/iommufd/device.c | 9 ++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/include/uapi/linux/iommufd.h b/include/uapi/linux/iommufd.h index fe4b8f9a3403..d6a3376d5608 100644 --- a/include/uapi/linux/iommufd.h +++ b/include/uapi/linux/iommufd.h @@ -628,6 +628,15 @@ enum iommufd_hw_capabilities { IOMMU_HW_CAP_PCI_PASID_PRIV = 1 << 2, }; +/** + * enum iommufd_hw_info_flags - Flags for iommu_hw_info + * @IOMMU_HW_INFO_FLAG_INPUT_TYPE: If set, @in_data_type carries an input type + * for user space to request for a specific info + */ +enum iommufd_hw_info_flags { + IOMMU_HW_INFO_FLAG_INPUT_TYPE = 1 << 0, +}; + /** * struct iommu_hw_info - ioctl(IOMMU_GET_HW_INFO) * @size: sizeof(struct iommu_hw_info) @@ -637,6 +646,12 @@ enum iommufd_hw_capabilities { * data that kernel supports * @data_uptr: User pointer to a user-space buffer used by the kernel to fill * the iommu type specific hardware information data + * @in_data_type: This shares the same field with @out_data_type, making it be + * a bidirectional field. When IOMMU_HW_INFO_FLAG_INPUT_TYPE is + * set, an input type carried via this @in_data_type field will + * be valid, requesting for the info data to the given type. If + * IOMMU_HW_INFO_FLAG_INPUT_TYPE is unset, any input value will + * be seen as IOMMU_HW_INFO_TYPE_DEFAULT * @out_data_type: Output the iommu hardware info type as defined in the enum * iommu_hw_info_type. * @out_capabilities: Output the generic iommu capability info type as defined @@ -666,7 +681,10 @@ struct iommu_hw_info { __u32 dev_id; __u32 data_len; __aligned_u64 data_uptr; - __u32 out_data_type; + union { + __u32 in_data_type; + __u32 out_data_type; + }; __u8 out_max_pasid_log2; __u8 __reserved[3]; __aligned_u64 out_capabilities; diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c index 14955dc43892..e2ba21c43ad2 100644 --- a/drivers/iommu/iommufd/device.c +++ b/drivers/iommu/iommufd/device.c @@ -1499,6 +1499,7 @@ EXPORT_SYMBOL_NS_GPL(iommufd_access_rw, "IOMMUFD"); int iommufd_get_hw_info(struct iommufd_ucmd *ucmd) { + const u32 SUPPORTED_FLAGS = IOMMU_HW_INFO_FLAG_INPUT_TYPE; struct iommu_hw_info *cmd = ucmd->cmd; void __user *user_ptr = u64_to_user_ptr(cmd->data_uptr); const struct iommu_ops *ops; @@ -1508,12 +1509,14 @@ int iommufd_get_hw_info(struct iommufd_ucmd *ucmd) void *data; int rc; - if (cmd->flags || cmd->__reserved[0] || cmd->__reserved[1] || - cmd->__reserved[2]) + if (cmd->flags & ~SUPPORTED_FLAGS) + return -EOPNOTSUPP; + if (cmd->__reserved[0] || cmd->__reserved[1] || cmd->__reserved[2]) return -EOPNOTSUPP; /* Clear the type field since drivers don't support a random input */ - cmd->out_data_type = IOMMU_HW_INFO_TYPE_DEFAULT; + if (!(cmd->flags & IOMMU_HW_INFO_FLAG_INPUT_TYPE)) + cmd->in_data_type = IOMMU_HW_INFO_TYPE_DEFAULT; idev = iommufd_get_device(ucmd, cmd->dev_id); if (IS_ERR(idev)) -- 2.43.0