From patchwork Sat Feb 22 15:53:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 867599 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2046.outbound.protection.outlook.com [40.107.92.46]) (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 5797B1DDA1B; Sat, 22 Feb 2025 15:54:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.92.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239677; cv=fail; b=bTWO/9Wgz4PZzQ+VNIOHqmizithMRyqe0JUNDcPlEOOR9X+OK2NrnNQlLtg5MEywMcg8oc2qvhtMS2Wqh0RyGTjiAysoslImY4I2WMVdEgyq0MCvEZPtyds7mfBHPelVrauMuXu+lgqWBj27EZDYoYz/mgA7W7yJcq391LVclA0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239677; c=relaxed/simple; bh=wTio0yv2gBQ6U/iSzwRqq4uQ62BJLdo0YHTuy/VvcuY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=p8yiUoDDdNJZfzt4NsdhPfA16RXXwY8Dh9wNxPAAw7qOOiqtgD3iSuJoVXmxPmRapXpo5WRHiMsuxbxoIcxxB3RkvFO0w4U8onNPBM1l/a10X/4HWbu0SFqZVa9tTBSx45Qb3cEdjmrDNIMtAY9aJWI8ogj3YfMOIm5t6n9e5i8= 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=lZUu0XuX; arc=fail smtp.client-ip=40.107.92.46 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="lZUu0XuX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TmxPLJkjA9NafZBACh6vdpXnNJhuSg2lI/aKCcPDKElJ2pbf8zt9yrjzwTRgrGZ1htmmj8E3mfhEsUvbj8lH0lU6tYb9mzr7dz/hO2dHe2LRwdBMefEVho4Z1N6W2G5ZoORG759Yjdp3p3dIWxjEJxRdOrv5qHEzxhQ1N/FMsU2exOd/NvUpPn7v2YFbfMOLF/kCxZX8iVQ/Nx9CdZuSSomerHa2LFjDJgl5LRXBCT0aidy4800Gvunai8S6NRs38PUqsAOakq3k1ePE4AYlSQ7OMolPeML0qe6/bJIwyo8LioIzn6RvtkJf74kU46LEcXbW6zFbWXo1mToQDqm98Q== 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=HUNM+8Bv5Nfzbqa7qDebAIwRc+J2TKyqV+0Ykxi7QjI=; b=mIhad3JB2ANzoh+jf0Ri4A/jJxYyu43gp/2b1p/f1z6Tz/IQmkVAw3EfanjHPqreKDf7ZVywXf6dNbJoxRdQ33sXpM6aCdZJub++GVV1vIfHHvJ1kO8pDtBk3IaG7MljgRdCaBADgvk7dNGamrQg0TLXkFgQJQFMgACWIA4OSgde4YdCeYESULy9jyQq5o3GbAalO+lsLThkM3GCSRqMhKUc6JBg3a4tW4rInHrzn8HvkgBtS8KvphdD4fcSKbiNKd/55keqsbXaPzX3ztdj35JNpPeIeWrg8JLuIyl46F8XvWIUcL/Vxq1wOp+Uo54mTJmTwoIimOrDB2SMD869tw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=intel.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=HUNM+8Bv5Nfzbqa7qDebAIwRc+J2TKyqV+0Ykxi7QjI=; b=lZUu0XuX+sUo6xzzfoGFHGBZgkSq91ia+WHRFWT/Vq/dSQMa0wV56pDjLrwYkyXI6CELAnVsGxUhfuP7CrJxbig6Gml5QKYWXsahaFIKIoiFm6oilx7+E1Y6UHEQdm+RRrFTf2+pj8NPJMQVdEsw9mXF73EJZoNNfdf2xbZlqMeiaJ3NpnzrI707nxjY7G3lgitqGZzsSYgxNkwR8R1s3nMWhu7Z7iCR5MvvTuMiU2LjYMyTyxxgUNApUuKEwWu1B+r3aiLFQb/YS0JgqNvuiZk69SnzybukmtUgSrXKjcgcLKhKuYZDhrlbR8i03zFMrFSbZWlaTKfsR8vLatC9ww== Received: from DM6PR17CA0010.namprd17.prod.outlook.com (2603:10b6:5:1b3::23) by SA1PR12MB7247.namprd12.prod.outlook.com (2603:10b6:806:2bb::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.15; Sat, 22 Feb 2025 15:54:25 +0000 Received: from DS2PEPF0000343B.namprd02.prod.outlook.com (2603:10b6:5:1b3:cafe::f9) by DM6PR17CA0010.outlook.office365.com (2603:10b6:5:1b3::23) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.17 via Frontend Transport; Sat, 22 Feb 2025 15:54: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 DS2PEPF0000343B.mail.protection.outlook.com (10.167.18.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.11 via Frontend Transport; Sat, 22 Feb 2025 15:54:24 +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; Sat, 22 Feb 2025 07:54:16 -0800 Received: from rnnvmail204.nvidia.com (10.129.68.6) 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; Sat, 22 Feb 2025 07:54:16 -0800 Received: from Asurada-Nvidia.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Sat, 22 Feb 2025 07:54:14 -0800 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v7 01/14] iommufd/fault: Move two fault functions out of the header Date: Sat, 22 Feb 2025 07:53:58 -0800 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: DS2PEPF0000343B:EE_|SA1PR12MB7247:EE_ X-MS-Office365-Filtering-Correlation-Id: 8191abdb-da61-4281-507f-08dd53592e53 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: M6PSmU9xp3LgCxIuV17O5CcMtn92KB8jfaOtsd0ePq9o/9CGHv5eBoV0g8WjlU4niPDCaPtIHSleFZkh8qqf+LCF2yubW/S6+1TK4t9XEHd1rwmsmJxHCDzhaxYCHvsvI/zg+8giDa5mt0hwWgu8GzVQqZ7t0OEJRs++hxtbO2lAQnHKfzoDQ10PeMcRryliHjAB1XUF++8rkzWebfVYcYgL4WXvmhBXrhNY6XKAHE4nxuu8s/ylxyDHITHfxONvTRZb20qSS7erGxPVrnXvUJZ2msUHBmZuNLGd/napnWwO1oeRPJtRNt9+EQE5VhmcufEU6GVfp1M6tc9T28lXlE5hPgYqyD6OLzqQ781dbCeC7dwrma/z3EjR9cMmGV/vOMebbhb0oRL5GY6XS/ioapqX40fPFIYKc9glQtp/mD6bSn2xPQgQxD4K4vdjBZ+Q1sJLqrvo4nF/JEfB1pY0L61Sz9IfHgbZnv1BYeKI+QfCW1I4mcE3zKh+byYaNes20TqFCOwWZS2NhNuMPVkQGz82k+7ijZrMoSO/RopKAx5aq2pJryzz3USJKvol6MP4nfSC8Rn0xUlZvZNZbS8QsNPsWK5cxUW0z5cKNUG12rktnrsVjpCBBkEKKJsb2Lj9u45kiYKynJKgIBE5AlIYY4wh6bgbrZ+qR3Bjm0+CWYphLGU8DZukr7dI2Tjbmp7LWvH5WBhqjMv83lvxQG690zrZ92Ogoyt3g/FGcn4c2aloe6cWJf8YjhzgIriCnlLS2X3PAs+thNsBV+ub6naLfceml0rCVLkp8JQo+qq1fG8UtxdoJJxDP2Nsv1RJIrpcJbEdITlNiXPKuzmZPO23jjpIs2yYG0K+wGYVPpbIMB3RmTVZtoe8GEhLPsJ9fRVCMSyLwAn1dxGCJDM1L/v2E9H5SvdVYav3P97KERvhxsQqzgoR1xQFGYd1sOJ3AIYhe5g5XpKIh+aAm4KZLe1TB5mk9SE6ZmLEQvruauGqlyS2wewJw8+PIQzYwssNcven6rfg7uuzGw5RZWz0KgoG8iW/wWRtqdwM0qIUxsACzUpZwHygtplVlkeA8WYTncuKvRWuH26GIx7QYqcuIvGzNWaAqwHfbvBx6IuxMkJAv5/XGzps+yxbOAPTvBbaMoKUSa/P/WYUp028nOpBpRo41H9fGu91lCdPVWJvYaIjXX9g61g7OiojW/xV2gI4xpHCN/6g5e8jbVUfj9AOgEge9YY45Sp+iLHh6h331OmyB/b2+obknTaiGfAWyyKKMgwz2CcsEKQKju/Zxg/7rJZl/f/CJd8OpYY0I0qL3NmOcegMoO0/th/IrBtAag1GgLYGSOT5zj8KZu71fFcT1TQoF2mG8cmVZjyzoIBGq6O5xgNLcD7Q+DxH+qFid7NPOTM9hTuF9bhDbh4FbGazyFRLRJCvKU+aOHTzw2SD4qTjZ8Gb5cAMnH9JfZsG1DTv6K0/xi0z2B1+8pW2Wa/yf3sHE2TwUrR2DnQz3mYJy01kIo0= 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)(82310400026)(36860700013)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2025 15:54:24.9478 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8191abdb-da61-4281-507f-08dd53592e53 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: DS2PEPF0000343B.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB7247 There is no need to keep them in the header. The vEVENTQ version of these two functions will turn out to be a different implementation and will not share with this fault version. Thus, move them out of the header. Reviewed-by: Jason Gunthorpe Reviewed-by: Kevin Tian Signed-off-by: Nicolin Chen --- drivers/iommu/iommufd/iommufd_private.h | 25 ------------------------- drivers/iommu/iommufd/fault.c | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/drivers/iommu/iommufd/iommufd_private.h b/drivers/iommu/iommufd/iommufd_private.h index 246297452a44..1c58f5fe17b4 100644 --- a/drivers/iommu/iommufd/iommufd_private.h +++ b/drivers/iommu/iommufd/iommufd_private.h @@ -472,31 +472,6 @@ struct iommufd_fault { struct wait_queue_head wait_queue; }; -/* Fetch the first node out of the fault->deliver list */ -static inline struct iopf_group * -iommufd_fault_deliver_fetch(struct iommufd_fault *fault) -{ - struct list_head *list = &fault->deliver; - struct iopf_group *group = NULL; - - spin_lock(&fault->lock); - if (!list_empty(list)) { - group = list_first_entry(list, struct iopf_group, node); - list_del(&group->node); - } - spin_unlock(&fault->lock); - return group; -} - -/* Restore a node back to the head of the fault->deliver list */ -static inline void iommufd_fault_deliver_restore(struct iommufd_fault *fault, - struct iopf_group *group) -{ - spin_lock(&fault->lock); - list_add(&group->node, &fault->deliver); - spin_unlock(&fault->lock); -} - struct iommufd_attach_handle { struct iommu_attach_handle handle; struct iommufd_device *idev; diff --git a/drivers/iommu/iommufd/fault.c b/drivers/iommu/iommufd/fault.c index c48d72c9668c..29e3a97c73c6 100644 --- a/drivers/iommu/iommufd/fault.c +++ b/drivers/iommu/iommufd/fault.c @@ -138,6 +138,31 @@ static void iommufd_compose_fault_message(struct iommu_fault *fault, hwpt_fault->cookie = cookie; } +/* Fetch the first node out of the fault->deliver list */ +static struct iopf_group * +iommufd_fault_deliver_fetch(struct iommufd_fault *fault) +{ + struct list_head *list = &fault->deliver; + struct iopf_group *group = NULL; + + spin_lock(&fault->lock); + if (!list_empty(list)) { + group = list_first_entry(list, struct iopf_group, node); + list_del(&group->node); + } + spin_unlock(&fault->lock); + return group; +} + +/* Restore a node back to the head of the fault->deliver list */ +static void iommufd_fault_deliver_restore(struct iommufd_fault *fault, + struct iopf_group *group) +{ + spin_lock(&fault->lock); + list_add(&group->node, &fault->deliver); + spin_unlock(&fault->lock); +} + static ssize_t iommufd_fault_fops_read(struct file *filep, char __user *buf, size_t count, loff_t *ppos) { From patchwork Sat Feb 22 15:53:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 867598 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2078.outbound.protection.outlook.com [40.107.93.78]) (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 A008A2010E8; Sat, 22 Feb 2025 15:54:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.93.78 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239684; cv=fail; b=eWgr/eOvyaFuAI+fjpaYVhy8wwkyt4BwJPpbVehYjBUQFRlWztnE+Jiqvfp4VBOOBc8FUdv04svBSC+p21lAOi0uY6HAgtHX9gMw9dMILZ6OaKfBr+AYhJpiNlQMD65/5UGUx2WN6b9j8elQhW4kbiuT4xVtUlsBWzrkG0IzMQg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239684; c=relaxed/simple; bh=jwmbXWsKHQeOJR3HOFPWBzPFUrQyMWI4MhPF2noMiLU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ihq6v+1QDVKhs1b5KIv8UatVGtBwt/At2smIRVLzdrbRj5wAD/43fOUcqkhPLzsPyukP1cQIGSWJCQGOMoLP48sHjfmS2C2fa02hYaxtQ+SrEjg4m4BtFIbd12fqKbSNzzfcgQpQvhjA1Kr6ZKDZpcQmw6D79tdZy6FTyrxhbog= 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=JpylDs+n; arc=fail smtp.client-ip=40.107.93.78 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="JpylDs+n" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jMbLL5sHMmYCgn0Alj75ZKDyV/ZFApryfVSbuKURZOp2KLX2JtaSmc3YidhDSI+znRDsV9VGD4fj3ruafisw5dmu5ppDFSd/W9mgX0nvctLlOhwfV9IdyQGIapk6zQl0IEVkwvv/rAGO3OltLz3dxu4Bgy0XwiM8qMMxA3vcmrjs2ifOMT/zUQDaRnUJL0T6mqOUcN12qhF0GUHFUr5TOZJfzkb8JyVyo7PWNTIUlceU/I4HAEx/szd96gUnCj1oklYuGZSfQnulC9eAXIZe0dtUA8IiHXXAB6CMeENY4YFPsCGkBPierD5vreuVPzA7NZCiBK4LHrLfFbdBRkCnJQ== 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=Udh1PVsxB2jdZQ8I8XJZCTTBX3qW8VMd7f89xgxZ7Xo=; b=MkMYX+QnS/LrOJHM55bb1of6Pmktbe5BuTw2s8N5ZA8MMghhfh8LvYjKaO3UO+abKFj5TJAHXUyqwA+HzF7gddz2XRzTJ0uXpz0Tw20oEBpHzagqS4R+s54kedhay+1o8Sf2EoaGp2QADUbiK7ASfj/EsR+SFlzIRJCW0fxObMBeLqIx3rbg1fcnd9PqV9bLbdkL6aMT+jljM63z1pWEVB27i7s1ezvgrm6IqDDe1sVIzDlFJalmt6Ek4YT3rD0OyY9JKIVpJDyHlxldj0919XzcbLhwm9QLBdd2QJ9ZLRwwEaNaBvRpw2RMo+LauXfWsNTsLnggneYuJJk6Wdqk7A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=intel.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=Udh1PVsxB2jdZQ8I8XJZCTTBX3qW8VMd7f89xgxZ7Xo=; b=JpylDs+n2U+S1xYM9vXXhMYHJ0hPLaU8oGW1AU9osRKiAaspT79FdsHj8kOz9aM3Wc1A/QFpUdNPHS/Ukj9Mp2rhcGjfRbw7smlZMET1S7emCgBoNAPdSdBCzfY6+YaXFxXU9t63a0aaQp2jCL2vnfGzSUljh+XfiLqpuCn4CDD+TC1vRUEi9ywCAMr4Zg+MYJKx3qnz2dt/vY5NwoIMYKLjSWB/o5Dy+WwFhmAdD/FRHXC0LKe7XRZ7cs+bbIa4WhoorUfmjivswmrr4/v1S0bXWgdEyPaTPUoUmpSM165QzEmQRbHYW+eg7kRPmgW4QHVkSqx4bavb3KsQs+8nDQ== Received: from PH7PR17CA0014.namprd17.prod.outlook.com (2603:10b6:510:324::29) by MW6PR12MB8866.namprd12.prod.outlook.com (2603:10b6:303:24c::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Sat, 22 Feb 2025 15:54:34 +0000 Received: from SN1PEPF000397AE.namprd05.prod.outlook.com (2603:10b6:510:324:cafe::de) by PH7PR17CA0014.outlook.office365.com (2603:10b6:510:324::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.17 via Frontend Transport; Sat, 22 Feb 2025 15:54:34 +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 SN1PEPF000397AE.mail.protection.outlook.com (10.167.248.52) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.11 via Frontend Transport; Sat, 22 Feb 2025 15:54:33 +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; Sat, 22 Feb 2025 07:54:18 -0800 Received: from rnnvmail204.nvidia.com (10.129.68.6) 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; Sat, 22 Feb 2025 07:54:17 -0800 Received: from Asurada-Nvidia.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Sat, 22 Feb 2025 07:54:16 -0800 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v7 02/14] iommufd/fault: Add an iommufd_fault_init() helper Date: Sat, 22 Feb 2025 07:53:59 -0800 Message-ID: <5907d5a780b83b033b99c4e3b2fda1f5b9f1830c.1740238876.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: SN1PEPF000397AE:EE_|MW6PR12MB8866:EE_ X-MS-Office365-Filtering-Correlation-Id: 45c99cde-34c4-4754-e0b8-08dd53593395 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: aXhoL6uRk5QCGrsuW8OR1T9hpnkAE/VPgkbU/J94zKMELhsVDcfBpQo6pvIfBjBcUboufSF640puf2t8CFz71KZzxhfuPw2l8bZDV+SNzp21j2hJ7CBd+YtRFkUY2OK7Q3Duj09UMzr2/PfLetVlTwlWrvh2k0dli/xX9ohu02GdYH4kwi4sHcKtCsM3cRIzjcZ5z0zqQK+VLfj1FQbxZyBOrgcqrruJyx5L4W55N9mRrFT3SHYzKpnn5QRJL3SYtggQPmQ9TQwOSr6eZ0zT9qx9crFMy4azPKeiP5b+rpjgUzEnh9ns185svcSKkRwt8pdyKLYuALEY94S/nYDLXHoC4BKlX0Sa05KNKO3h+mJ2pfsBQOAr1qUtonyfjZ/8xjr4q2NtFI7DPyrRJ9ay4/tnIMz3tXoF0KbiQ5fDCdZfTtcEMTUhUZXosRdDsc8XSDGQ3ULvVx5y43d/umKxV7f3jogBnZ7jJQWXuILUfmQyGfn2Xf8RrK147FqIT2Jr7fHxmeMalwTuaCNQ3nbvfEOknZYssNMntksdBgKYrkQNaAuNi/Z16pV+N92JEoD+PnhqqY6QQQJQOqQW8KXklAGtUMjYQ74fEJjgS2z8FsEzTgc0qJsaVpOzxVRgEgXCw4rznesQ3u/Im5EUzpq9wVbaueX4rb8lrwNwRKD2FkDnIOIERH6N/Pu46oMWZ8tRge6Q5rBFt1A2WteMCQMWyZMUjdoKDCm8tZk+YsFkvTabXfX0e0hCUnL+mX7ixur3watdFyY7k+hYPvhJM7DpBP35K8+pMUuQ3Ea85Ec4L0WolyQKJfGBSvRA5EErLkiR3zbmSyg4rgyB2yKegU8WOJTuWTa0BXUajsxu9xWmbo9xqjztQpA5jvjxW56GW5/rbJCgDqWMeIiwk2Wfr/jYCWtDL373C0NwQPIW1MPIKbGUKjSn2KjPMOOOABfx3dwOuwz0CmbORNW78Zvb3YOK/Sealu3kJJcxY4qkBDqPM/wUnDt8hqxFyyiarDBzV+M68yvQlNgdLhzah3iy8VtNJXm2QJYk7o5FG8v33aRuVi1UpITZhj3r72Jh9WzPqmKQG0497ZJy6+jK/tRa78eojC1XPFEEZzZGjC/JMOturU/tyzn+QMVfVU7tvwid6KbavQolC2c/l0bQhfzYsgRfMDAZCKi0JyFYTVDRgy9Ni167O0i3NX5nyVmuPAkwBzZdon4DS4QbgHvPt9/bdWqrFjE9I88t3JYZmOqbv/NudCiV5frblD1cMHJgUfwEpNe8oFlpaHlN/etOKMThGfmz/bI5F3FbVxR94yWW2/V+o6FIQ3QGCVncZ8kI9EVxVsXbj0SDH7R70L44M9x9QdvAcxckgGFiB37S2AQ06t5KPyk1wTPyMutJCsSTP58wgTfjkgikA3xG8AWojCLuIL5QDcV+5OMdo9HmN0psbma7Tdx+Yly6/gqTPmghMo20Km/mNRCtmi5TI3y6dxE9BR3IpxnONN5K6ebUfPtOZh7k59M= 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)(1800799024)(82310400026)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2025 15:54:33.7727 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 45c99cde-34c4-4754-e0b8-08dd53593395 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: SN1PEPF000397AE.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR12MB8866 The infrastructure of a fault object will be shared with a new vEVENTQ object in a following change. Add an iommufd_fault_init helper and an INIT_EVENTQ_FOPS marco for a vEVENTQ allocator to use too. Reorder the iommufd_ctx_get and refcount_inc, to keep them symmetrical with the iommufd_fault_fops_release(). Since the new vEVENTQ doesn't need "response" and its "mutex", so keep the xa_init_flags and mutex_init in their original locations. Reviewed-by: Kevin Tian Reviewed-by: Lu Baolu Reviewed-by: Jason Gunthorpe Signed-off-by: Nicolin Chen --- drivers/iommu/iommufd/fault.c | 70 +++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 28 deletions(-) diff --git a/drivers/iommu/iommufd/fault.c b/drivers/iommu/iommufd/fault.c index 29e3a97c73c6..5d8de98732b6 100644 --- a/drivers/iommu/iommufd/fault.c +++ b/drivers/iommu/iommufd/fault.c @@ -280,20 +280,49 @@ static int iommufd_fault_fops_release(struct inode *inode, struct file *filep) return 0; } -static const struct file_operations iommufd_fault_fops = { - .owner = THIS_MODULE, - .open = nonseekable_open, - .read = iommufd_fault_fops_read, - .write = iommufd_fault_fops_write, - .poll = iommufd_fault_fops_poll, - .release = iommufd_fault_fops_release, -}; +#define INIT_FAULT_FOPS(read_op, write_op) \ + ((const struct file_operations){ \ + .owner = THIS_MODULE, \ + .open = nonseekable_open, \ + .read = read_op, \ + .write = write_op, \ + .poll = iommufd_fault_fops_poll, \ + .release = iommufd_fault_fops_release, \ + }) + +static int iommufd_fault_init(struct iommufd_fault *fault, char *name, + struct iommufd_ctx *ictx, + const struct file_operations *fops) +{ + struct file *filep; + int fdno; + + spin_lock_init(&fault->lock); + INIT_LIST_HEAD(&fault->deliver); + init_waitqueue_head(&fault->wait_queue); + + filep = anon_inode_getfile(name, fops, fault, O_RDWR); + if (IS_ERR(filep)) + return PTR_ERR(filep); + + fault->ictx = ictx; + iommufd_ctx_get(fault->ictx); + fault->filep = filep; + refcount_inc(&fault->obj.users); + + fdno = get_unused_fd_flags(O_CLOEXEC); + if (fdno < 0) + fput(filep); + return fdno; +} + +static const struct file_operations iommufd_fault_fops = + INIT_FAULT_FOPS(iommufd_fault_fops_read, iommufd_fault_fops_write); int iommufd_fault_alloc(struct iommufd_ucmd *ucmd) { struct iommu_fault_alloc *cmd = ucmd->cmd; struct iommufd_fault *fault; - struct file *filep; int fdno; int rc; @@ -304,28 +333,14 @@ int iommufd_fault_alloc(struct iommufd_ucmd *ucmd) if (IS_ERR(fault)) return PTR_ERR(fault); - fault->ictx = ucmd->ictx; - INIT_LIST_HEAD(&fault->deliver); xa_init_flags(&fault->response, XA_FLAGS_ALLOC1); mutex_init(&fault->mutex); - spin_lock_init(&fault->lock); - init_waitqueue_head(&fault->wait_queue); - - filep = anon_inode_getfile("[iommufd-pgfault]", &iommufd_fault_fops, - fault, O_RDWR); - if (IS_ERR(filep)) { - rc = PTR_ERR(filep); - goto out_abort; - } - refcount_inc(&fault->obj.users); - iommufd_ctx_get(fault->ictx); - fault->filep = filep; - - fdno = get_unused_fd_flags(O_CLOEXEC); + fdno = iommufd_fault_init(fault, "[iommufd-pgfault]", ucmd->ictx, + &iommufd_fault_fops); if (fdno < 0) { rc = fdno; - goto out_fput; + goto out_abort; } cmd->out_fault_id = fault->obj.id; @@ -341,8 +356,7 @@ int iommufd_fault_alloc(struct iommufd_ucmd *ucmd) return 0; out_put_fdno: put_unused_fd(fdno); -out_fput: - fput(filep); + fput(fault->filep); out_abort: iommufd_object_abort_and_destroy(ucmd->ictx, &fault->obj); From patchwork Sat Feb 22 15:54:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 867597 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2051.outbound.protection.outlook.com [40.107.237.51]) (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 64F511422D8; Sat, 22 Feb 2025 15:54:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.237.51 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239690; cv=fail; b=mAIKf2fHYUC9k0Aj2ucTd/Q50cFOFlsRucDXrfA8udPwlMLhjyclGeEsUxkNOe7lY3IY8hRNLkwwbrnvqsJbrgU59Sr9fGi4kAvZuplKc3Hiydtv2PhN/8l6SicwxL8M9XQ5T3FcoSAsoABe31zo3k5mR4e5TTdDNx9dWlTdsjc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239690; c=relaxed/simple; bh=iecy4fIFlsJi6mG0vyn2Kzx2uCT5cKHBhUEZhmYTA0Y=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=bQGHPcXlq3bnaqUWA7ODzurIZJktK4Odk9OJWBa5n6d2/guvvJvqH4x9UF4YFE+kTEqVbze6o7+ZOGJ/yeK/gVq4ZSZCDr0TsJ8m9xsTgx2Mi1j8fmn2b0etW+tWwGI4xxANdcSgSg+Fygm3HcYfDTCiI86d9NYWzygUW49Z/jw= 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=mobNaWDB; arc=fail smtp.client-ip=40.107.237.51 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="mobNaWDB" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xpGKA2HsrXKlWhCwEA2PPjW/vaARYiyEQhZQHsPE9Tq7HPS/D7G9Lmfoanlhi6M+z6Qd/9CMrEtm/3A/aOkpACcZJW0yTib3ye78Hzys7ImBuq6qhKKJr0/1d11/O9kvUqka4exhjPZ2B2hPz8lAtLqDxqHltO7gVHdqvZXAgolUsJJZgRzko0CKFmDRJNirDPu1/e//3tFVH/Ex503vZXtVXSvrgEgA07EQj924t0u35pW71Nz0WO8Owldn8tWa2t2zhJI7HoIhCdaELTFIStyxPVYqVd+9Q1U5xqFk6e8K4XyTwKgDvTNS6XYDMuId0ACtsBBTAGPxGv9wrAk2sA== 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=WvhDhdq8BqMWYZAy8VZpGH4FR6q5dbcFBgzSx7Z7lc0=; b=Ye8ZKapU3uZ4FzLjiamvIngLQ867RtSdRmTv9kfmPTF60i2Wym15eS9UKxLR2W76iuEnOfZpn0SY0RRjpzgE71N3JYuh/F2CSSAdRz22d3f9QP7bbyaZnNhjY2qfjvJjM6qJD+Gky/psRt7UDkXF+34PmV/avkQqf2znQ+8TFuZax5oB9hLgc3b7etTIEEiij9uqpmjYxALqEB+f2pESr2inN2LhaKYrt/XeisijkQ1YXltQgUnLW3q7PTFbwz+e5YsJ7bTOYDboAmZlFoiqtmuEk9gR1H9hMgnt6sn6sd4SxFyrUtrDQrP/z4t+4dezhAihiYnXlkmrnCowBTWrsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=intel.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=WvhDhdq8BqMWYZAy8VZpGH4FR6q5dbcFBgzSx7Z7lc0=; b=mobNaWDBJOmhRa0Ccr1DS1g8AHXfZ5R5vUcXMhx4iKu8NGYv0tAZwMa7d4x0xVL6y3t9wnlZ/HnCBfl6A74Aj1pnI3GtL/pSzfvLCSpGP1hu4iKWptZfbMWmmcVp/q4ocz7KzQWQpCqJiThD7/OBcRqI94MREqbfQ+ESURYpIewI8Hj/Byc7qG30GVzZPw8eY9Ne8brX3G5yuBl2BI6RcN7gBMOeUdBfC4AaSdqSS4LplSpluwp2C3qDxXwVfkQoVFhUAcjLN1/5x0hScGl0udZump/ve8S8AF5r4+lQfkNFW73IUdN+/GAmMEdCONNBcEUEBMd7VeN0j6Sn4QkIWw== Received: from PH7P220CA0135.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:327::35) by LV2PR12MB5942.namprd12.prod.outlook.com (2603:10b6:408:171::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.19; Sat, 22 Feb 2025 15:54:40 +0000 Received: from SN1PEPF000397B5.namprd05.prod.outlook.com (2603:10b6:510:327:cafe::de) by PH7P220CA0135.outlook.office365.com (2603:10b6:510:327::35) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.17 via Frontend Transport; Sat, 22 Feb 2025 15:54:40 +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 SN1PEPF000397B5.mail.protection.outlook.com (10.167.248.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.11 via Frontend Transport; Sat, 22 Feb 2025 15:54:39 +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; Sat, 22 Feb 2025 07:54:25 -0800 Received: from rnnvmail204.nvidia.com (10.129.68.6) 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; Sat, 22 Feb 2025 07:54:24 -0800 Received: from Asurada-Nvidia.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Sat, 22 Feb 2025 07:54:23 -0800 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v7 06/14] iommufd/viommu: Add iommufd_viommu_get_vdev_id helper Date: Sat, 22 Feb 2025 07:54:03 -0800 Message-ID: <7101a2607f98650e105a038a7a80cd8b4d52506b.1740238876.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: SN1PEPF000397B5:EE_|LV2PR12MB5942:EE_ X-MS-Office365-Filtering-Correlation-Id: aa1d6152-9968-4e2a-90bd-08dd53593745 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|1800799024|82310400026|36860700013; X-Microsoft-Antispam-Message-Info: Da+G3WlaNFfq9/h8tGrd6AhOCmQRq3ZXE1Eaz4b89XZTVfcbZqjXdSDsD9XVeTtvURo0y7oN43thgszdSWNeITICTy+UD95SaHt3gl407guaHMcB9sGrg8MwrQ6EKZGN213qImsrriw2cwidZvhj7Qit5uwga9n9gXfRX0mfpGUVr96R5g+V7bLcH+eaw9a1YToho/K4e3xMtg+dHRmVLd5JgiYeuNP6JGTr1O49uuFeIRQKdDgIvTkXczyXgUdL6dEEmPe77kZDacyufcMSmx0ysRtX8SeO9deShMxqi1Y0Gw2LuGg9e+CNdY1FjJ8LhBqCqqtF4Xao05s1rFnswUhzgaHZL8eia2eTET+5mmSkwS+9u9qGN5j7+fzcTLGamy3fwj19cL/VYjVcoowcdpARPNbTjlBVRhgwvmDiRwISH60H47W4wo73L+NwrGmpT0pROYPioX2Arpn6cxUlPD7gxHrPN4EgCnOSaKaOZ98tHrggROAjqgl6rIA0yly0wFkV6cZgvjkZdN/Lgat56ARWB6NJOrUx992q7O2w1m829K9qqp8LLE2xiEz8Uz0TLhWR82D1y27sqULDXmQJJDKWlCIb3mSTfkkKJZ4kLCrtOwcacQog1P7JDM2gJ53kgo+A/eVTutY/mPgvcLKXXQO5MFZv40lsmyC04sgGdaMz28ANH6kxryRgWplQmNDVNaR8i6P86cecn7cCOsjly82Lo1cqzvgEHc9eVC+/yzX6xU/5CVTo0rByFvOZpYM0utVYtBrYREG92QMGb2AyU854I1eS0p2DH3qa9gCI3jsjWcJ9OtcW1frKQ8McXDdwHxWBMXcjg2XUm65wlBS/SsPoxchExtpKCAamW10UflxSDSSDOlDPrIbeHFwiUCRQJ6qJ5OkfWTtQk16V51hpkg8bbxiyP+gxF1habRVV+vNKhj60FuTf1DHwOBrcAbDb0iahrRT6SQGauizwoq+01+lAYF2wPEa83MsxKDMh+GQnrmN5Do0OZX2AqrtoQPm/MQ0NoBdN+i0JgiaveixvX2viijuTJc+FHvK9JUifQV4TOhVIsRS6TQbvAe0+ugGtD56uzAg1n9FCXXvcOZE9r6UbRkrN+tUCmStkI3lbp4Z9NMLdpyeVT7KkFV/6ETeLx0z0/DYS265fYYQDTFIWX7yi0LDPT9tvtmiSafJG4R1lcTSaHQCSmqDKx4inPDcfufra2JKMn5lUhLjZcUaPvnVk7sOjwn8JF5pgf5h1u6BJ+0bc3CEoDxy1X47h9pjGtT5Cwl8I6fBp8gAmn7BiFpKjADtNiiA5wFcw/IoVbU0wKXuldDiqvpvjEGhejmBXKy+GgkhCLqMhetXwCijS1j3q7vIwxSL7ND5rgR3VAAoF9W+ukkezvsCThv/5I32gGjNtqr9AvP4CCtSRFlvFRG0u/E3AA7RKMUq+vwa7VNmNa2ZuFCy0ZAX3uwWtSlqE7O/RtfpiWz08WbrWqB9hGBQNyBQdOH/ERPAJUeMVryg= 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)(7416014)(376014)(1800799024)(82310400026)(36860700013); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2025 15:54:39.9885 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: aa1d6152-9968-4e2a-90bd-08dd53593745 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: SN1PEPF000397B5.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB5942 This is a reverse search v.s. iommufd_viommu_find_dev, as drivers may want to convert a struct device pointer (physical) to its virtual device ID for an event injection to the user space VM. Again, this avoids exposing more core structures to the drivers, than the iommufd_viommu alone. Reviewed-by: Lu Baolu Reviewed-by: Kevin Tian Reviewed-by: Jason Gunthorpe Signed-off-by: Nicolin Chen --- include/linux/iommufd.h | 9 +++++++++ drivers/iommu/iommufd/driver.c | 24 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/include/linux/iommufd.h b/include/linux/iommufd.h index 8948b1836940..05cb393aff0a 100644 --- a/include/linux/iommufd.h +++ b/include/linux/iommufd.h @@ -190,6 +190,8 @@ struct iommufd_object *_iommufd_object_alloc(struct iommufd_ctx *ictx, enum iommufd_object_type type); struct device *iommufd_viommu_find_dev(struct iommufd_viommu *viommu, unsigned long vdev_id); +int iommufd_viommu_get_vdev_id(struct iommufd_viommu *viommu, + struct device *dev, unsigned long *vdev_id); #else /* !CONFIG_IOMMUFD_DRIVER_CORE */ static inline struct iommufd_object * _iommufd_object_alloc(struct iommufd_ctx *ictx, size_t size, @@ -203,6 +205,13 @@ iommufd_viommu_find_dev(struct iommufd_viommu *viommu, unsigned long vdev_id) { return NULL; } + +static inline int iommufd_viommu_get_vdev_id(struct iommufd_viommu *viommu, + struct device *dev, + unsigned long *vdev_id) +{ + return -ENOENT; +} #endif /* CONFIG_IOMMUFD_DRIVER_CORE */ /* diff --git a/drivers/iommu/iommufd/driver.c b/drivers/iommu/iommufd/driver.c index 2d98b04ff1cb..f132b98fb899 100644 --- a/drivers/iommu/iommufd/driver.c +++ b/drivers/iommu/iommufd/driver.c @@ -49,5 +49,29 @@ struct device *iommufd_viommu_find_dev(struct iommufd_viommu *viommu, } EXPORT_SYMBOL_NS_GPL(iommufd_viommu_find_dev, "IOMMUFD"); +/* Return -ENOENT if device is not associated to the vIOMMU */ +int iommufd_viommu_get_vdev_id(struct iommufd_viommu *viommu, + struct device *dev, unsigned long *vdev_id) +{ + struct iommufd_vdevice *vdev; + unsigned long index; + int rc = -ENOENT; + + if (WARN_ON_ONCE(!vdev_id)) + return -EINVAL; + + xa_lock(&viommu->vdevs); + xa_for_each(&viommu->vdevs, index, vdev) { + if (vdev->dev == dev) { + *vdev_id = vdev->id; + rc = 0; + break; + } + } + xa_unlock(&viommu->vdevs); + return rc; +} +EXPORT_SYMBOL_NS_GPL(iommufd_viommu_get_vdev_id, "IOMMUFD"); + MODULE_DESCRIPTION("iommufd code shared with builtin modules"); MODULE_LICENSE("GPL"); From patchwork Sat Feb 22 15:54:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 867595 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2045.outbound.protection.outlook.com [40.107.92.45]) (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 85C5A207A35; Sat, 22 Feb 2025 15:54:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.92.45 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239694; cv=fail; b=j2Ae4ex7R8ksKhkjjoMYevrlYNFppFW8G74Ytwry52t8lYdhLXp6CjbxtMSjZJU8btV892YXMk+DruuMkUyyfo4a0+beGjXkpE4Cc8rpL6c0HfXTlwu5cTfZQGcmT/3YZgyWM/zYqGP/6YXakOIuR4esPTDxtz/e7MddONHDvjo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239694; c=relaxed/simple; bh=y9EwuhnZ4+htKahcyfG7QKERsMxBHRmJhcDtCf5qHZw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=a8AeYqPfZqi/j1og7DYP2aL4ALvFZOXS1CBbEE8yy1QH2hai3/HLp3ZUT2h1JcRrxqhE62bq7kWpapAaKVLuf8vtrPn8TydGM3B5HZaK/uQlukF6h7pumeZW4iZ8fkU5SFeYtbqFOZSlsOId/rFSYC4RWK06+DW5kbZY7zBixR8= 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=eXxka8i4; arc=fail smtp.client-ip=40.107.92.45 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="eXxka8i4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PRn8EyLHSlWh6BKT4dpVVo4HzVbgDPYVa+ERBdbtlYcLIzMtpII2VDMXM7NC65agJ2FhlvjAOFORckmO/oy+wd62oEi3N2kchDVoUEDmBWnQsGl6ml4CiF0QsiFWjIkdmiuegS9ljoK340EXCFwpgirHVf0imWozwUcQgKYyGX9X+jinE6Gr2SraNHnmQuNBrjOgLmiT78adEu/kkyGdX+9RtAm9aAxMcykgeuTkYbex8aZrxadmj7IjTCPzpd0giGsZYGTWU7p/cDvCo7mlGlwrvDsKcSwgaG2k5eVEsQEC7mfl75s88UCoxo3wupyjv2NfOcvnOiPz72mbeNc5/g== 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=N1PBtA0nWPMf1GqEAuJn+ZSwJlfKukhl+iKUn1Pwuzk=; b=KY964QZuDJV9WuQhOZI0ywpkLjtH/da9Whau3Ytc7dTuLZtbduHfzEp8EcDbYeyEFOROsm49KZVcZgZzK0n5R0fIak93MQs7+wxrdmCbJB2Uqv6Bz1x97dACaHbscFKQ5BSYVMqPkrCpR4rQbE66/dCwIGJr+wp5D4z9jfSj5Eq4/YGUa0DFw3DYwh63xYIhsjfzE46IjE/KY0Obp4jTF355M5Ecop7z8R4j/YTr7hSA0wNNA8Sl/nOuzYA3HMJNVsJ73ic6eVwwBDH4a4HOsVfejhkgRNMBKG0woP4HgpQs85BcAtUJcT0Z85thhygp5RGDQL4il1kmI8VyaXaxpw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=intel.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=N1PBtA0nWPMf1GqEAuJn+ZSwJlfKukhl+iKUn1Pwuzk=; b=eXxka8i4mzv1j2zf24IjOBRAwz3LiM0rVozpADteb+RLEI/BJ4UmNOXw+xIhbSY7f/mUWkp5XWDKWXNJBgXl4QMySeWzChR67ujkNwx73v2JJORQwTi+zRjeKxdM6N5Nrt0+CxNvGFQakVd4duWTiRjRoOS0ZfTpwDhHN36GzUEbG//izG8ujSKwG8UhTi1uTUU5yA+x/toUZdSEztBKx6i7ssqRnn2CgpHPHAfIiYNhL1mWtMJxsRKY3Ep7g7PLfTltQKwd4fK6MMSKapTDc4IRXLjwTBuJZ7kP7iiB1E3qg5Cx7UDxWUyFhBqDloBqjrtDDNjUhl6BwTzTrz5dxg== Received: from PH7P220CA0136.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:327::8) by IA1PR12MB8554.namprd12.prod.outlook.com (2603:10b6:208:450::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.16; Sat, 22 Feb 2025 15:54:44 +0000 Received: from SN1PEPF000397B5.namprd05.prod.outlook.com (2603:10b6:510:327:cafe::ba) by PH7P220CA0136.outlook.office365.com (2603:10b6:510:327::8) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.17 via Frontend Transport; Sat, 22 Feb 2025 15:54: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 SN1PEPF000397B5.mail.protection.outlook.com (10.167.248.59) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.11 via Frontend Transport; Sat, 22 Feb 2025 15:54:43 +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; Sat, 22 Feb 2025 07:54:28 -0800 Received: from rnnvmail204.nvidia.com (10.129.68.6) 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; Sat, 22 Feb 2025 07:54:28 -0800 Received: from Asurada-Nvidia.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Sat, 22 Feb 2025 07:54:26 -0800 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v7 08/14] iommufd/selftest: Require vdev_id when attaching to a nested domain Date: Sat, 22 Feb 2025 07:54:05 -0800 Message-ID: <295464f7f635a4fde7e772674136901662f74f4b.1740238876.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: SN1PEPF000397B5:EE_|IA1PR12MB8554:EE_ X-MS-Office365-Filtering-Correlation-Id: a2b28863-0889-483c-87de-08dd535939a5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|1800799024|7416014|82310400026; X-Microsoft-Antispam-Message-Info: qcOceyzv/sPR8RIJETX1TK6CuUQwCPBFYRC2voSIpFRZd3IPbXMWlQwu2UGju+6t6xvzXsGIf+jiYrePT2Z/QJNCSBw0hjdErDNPioD+vF3u36vNIFYqtAmoU0zPq6XBfx2xJSyhlyIFBCXZPlep+epbeaW4Om93mNEGL810kaqRYQWtvb335+S3HcsIuf0hATo++FoMg28MrPxfpL6iUdGkn4Xzbl2iO8tvTY7H9mOeIvyw89rh7sm8VC0RXOw1I67ek12dZLNSZsFdYz1d44XgYVTkhe9C7Sl/HSWH/f+fLWKxd7WbbXN3v86jp4PuJ8N/mZHQo+9NIQFsTzYBSjqgu3FTV+2UzKvBNm500SQ53Lyh4bjLGpU/o0s1HexZOjO9TJSM10nMr1wvWiyNYz6dJpgvgfFGferfEWSxjehOZQ8xxokmROR88TM9my4YlBgfHycED79MfTjCqy0k3T9T4haWkIuVYVEhH+DpBI/TuhGqrtSAJOCReuV+Ju48eW8sYr0tCxKhPUCaRzRIO2FUimVPlZX489RahVtGKDxD90fpWJ9V3K232kt7kqM+cMOeWnW2XBpoRhRhG9qEf51iYGI5ipr6qndnF5EInveZi+TULXxaSqtjR7b+xMY1A3Ak8C8fSCXgxAhF8klii2cOQWhcAXR8op/dUrWFEPAZJwm99qd4R2HLOENVveC09i3JEWtjkIJPumNfEcXaAQEjrAiDN2LxpBNDXyqWMxkhK8FoY4KVbnRNP/HX2XeHPxrNhUJzXmLC1FGPsVedQp0yXSawpFwFOYGkt58MuSSOdJG3ZXAmV6PCkBWVlX+HakbMZ8MQ5SvF3OGElZ9nLTQKOkWvt1iOWoL1CeozkhpL7nbl2sp6C7fitfwtt34eTg9zerRWnpuSYw8CheR1/Bxpa+8EZVo7NxeCFuQ3ZGD+GSdLftaK5yYpMGVfSyCzxThdRZVGf71yGVhcbv/2WQmzkS8wqd/5fe3doZn2rzTgzJLntl+Ud7kaLhkW3fR/ljiMiFvJoGudd43ASxmC8HkFsdLhRWWtvLcJaLz8oY0xm5h3yz1E/pKKo89gft5u2ugvOcMkuQK/nIPfEILwP6zXFSfUVPfiQBRgkg5ZiK/oTUeEhUgBSb0752YWI2muROYmfTqBWxnzqQmRBrn47A8rbf5x3T7mURqmZB5UvnFzw4EvEMcQeBCkrQSGET539CVHsWImr7plmcVjs7/vy+Qyj/hSPp9tadJcS07knZU5XsIw16y5uLldPcbhPMkQkgQiepPfOCSld4jU5bBGpRu2VF0vciW6UWDWsGzzHA73DwuvttDWnKk8i0OEpUXAlhPtDb5I7e/WrM+JzP1C4/wqbBwqzL8kL1AHG7Go5ARR2u/m0zhTp3KjXGNIdvyvu/axBSj6pIu94dEy/+fFWXcCRAHkLSwGGQEmSynrSgfRo6o184lxk0KkJXRYJ/GJqyp+YX6Z2XpswEq1DBBx36ojwDayq8FpeL1VrXvOJC4= 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)(376014)(1800799024)(7416014)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Feb 2025 15:54:43.9572 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a2b28863-0889-483c-87de-08dd535939a5 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: SN1PEPF000397B5.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB8554 When attaching a device to a vIOMMU-based nested domain, vdev_id must be present. Add a piece of code hard-requesting it, preparing for a vEVENTQ support in the following patch. Then, update the TEST_F. A HWPT-based nested domain will return a NULL new_viommu, thus no such a vDEVICE requirement. Reviewed-by: Kevin Tian Signed-off-by: Nicolin Chen --- drivers/iommu/iommufd/selftest.c | 24 ++++++++++++++++++++++++ tools/testing/selftests/iommu/iommufd.c | 5 +++++ 2 files changed, 29 insertions(+) diff --git a/drivers/iommu/iommufd/selftest.c b/drivers/iommu/iommufd/selftest.c index d40deb0a4f06..ba84bacbce2e 100644 --- a/drivers/iommu/iommufd/selftest.c +++ b/drivers/iommu/iommufd/selftest.c @@ -161,7 +161,10 @@ enum selftest_obj_type { struct mock_dev { struct device dev; + struct mock_viommu *viommu; + struct rw_semaphore viommu_rwsem; unsigned long flags; + unsigned long vdev_id; int id; u32 cache[MOCK_DEV_CACHE_NUM]; }; @@ -193,10 +196,30 @@ static int mock_domain_nop_attach(struct iommu_domain *domain, struct device *dev) { struct mock_dev *mdev = to_mock_dev(dev); + struct mock_viommu *new_viommu = NULL; + unsigned long vdev_id = 0; + int rc; if (domain->dirty_ops && (mdev->flags & MOCK_FLAGS_DEVICE_NO_DIRTY)) return -EINVAL; + iommu_group_mutex_assert(dev); + if (domain->type == IOMMU_DOMAIN_NESTED) { + new_viommu = to_mock_nested(domain)->mock_viommu; + if (new_viommu) { + rc = iommufd_viommu_get_vdev_id(&new_viommu->core, dev, + &vdev_id); + if (rc) + return rc; + } + } + if (new_viommu != mdev->viommu) { + down_write(&mdev->viommu_rwsem); + mdev->viommu = new_viommu; + mdev->vdev_id = vdev_id; + up_write(&mdev->viommu_rwsem); + } + return 0; } @@ -850,6 +873,7 @@ static struct mock_dev *mock_dev_create(unsigned long dev_flags) if (!mdev) return ERR_PTR(-ENOMEM); + init_rwsem(&mdev->viommu_rwsem); device_initialize(&mdev->dev); mdev->flags = dev_flags; mdev->dev.release = mock_dev_release; diff --git a/tools/testing/selftests/iommu/iommufd.c b/tools/testing/selftests/iommu/iommufd.c index a1b2b657999d..212e5d62e13d 100644 --- a/tools/testing/selftests/iommu/iommufd.c +++ b/tools/testing/selftests/iommu/iommufd.c @@ -2736,6 +2736,7 @@ TEST_F(iommufd_viommu, viommu_alloc_nested_iopf) uint32_t iopf_hwpt_id; uint32_t fault_id; uint32_t fault_fd; + uint32_t vdev_id; if (self->device_id) { test_ioctl_fault_alloc(&fault_id, &fault_fd); @@ -2752,6 +2753,10 @@ TEST_F(iommufd_viommu, viommu_alloc_nested_iopf) &iopf_hwpt_id, IOMMU_HWPT_DATA_SELFTEST, &data, sizeof(data)); + /* Must allocate vdevice before attaching to a nested hwpt */ + test_err_mock_domain_replace(ENOENT, self->stdev_id, + iopf_hwpt_id); + test_cmd_vdevice_alloc(viommu_id, dev_id, 0x99, &vdev_id); test_cmd_mock_domain_replace(self->stdev_id, iopf_hwpt_id); EXPECT_ERRNO(EBUSY, _test_ioctl_destroy(self->fd, iopf_hwpt_id)); From patchwork Sat Feb 22 15:54:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 867596 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2044.outbound.protection.outlook.com [40.107.92.44]) (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 029A6207DFB; Sat, 22 Feb 2025 15:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.92.44 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239692; cv=fail; b=cAv5alkhZ9JXqQZW0syQWVaY4Lh4jNElwzpPo1IfCd4lu4YH51K2EWXycIv0MIrsLXx6MBFEAMagGrU8+OsoSb99VhY14o3es8ZQ4ColBSMncmMaChOi+1nASNQBIESpsq9wzYGDD1C7/mdc0A5/VmjVInM6DY9ea5xCxGQ0OQQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239692; c=relaxed/simple; bh=2Q+la1Vr7KdS12V/vYxQZgWA60+Htge+0ih7MtG1OTc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NMSN7q+FmlXsE4xC8fshS3wVEM8ShZ0KxFt+LZCGOoEuW+iz9eIv7QCVv7SxTnweB1hC2LVwQrkUQfeZQXbNTmLpNbho0S/jHqLt+QowWkiEbzJzWxrYneFQo42EyvT1YAO8S53F8pS6/nwx1NPXZSNAZHLQ4793DU9919Lp0n8= 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=JsiYooea; arc=fail smtp.client-ip=40.107.92.44 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="JsiYooea" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LlWNzZwufwfHY/y7NLECJ3FHIEWtcZXbPZKx6qyBsWHvVjqiFyDRKjybAjg+4WL4EoJD/+b4/733WtTBR5w1I/9pt534JhZvnQMxl7GZnu53Dxc+Cz3eWMrJ7Cm7d/1SZJmTLjL6ZlqIWZDElPpqaJlSXuvCwuSredAariiRgRsiQ4NVfVGd9A3drpJT0rmsffYIb2MloI47sZpBH42vsv6rOvycLrl4Yon6WtfF5EAZ41TZGEP0wJ9n0fHQKaoyVT+07UOYSyHjDj5ERWYyPlTY5DXt0Q178WEa2Ma6FIVvwm/6ivhOEnfbKep7qMaUDDNiSnLkvzH0eEh/ciaLpQ== 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=6NYHNYHk4Eskt64jA06hjjLb7nD8fIqO7zbe3QJ7OYY=; b=sG4y+QQVAipEjPvzu15zWrV6QUYIJkfglLVRth4flAtn1Z3/y2Z+TJjWXhwa2iUxXQLgvSkF+iBlbvilyfcTuntyIrHtT5XBtoieGT6gv4CYawQjlXJLxihhgr8L1ZvY3IVSrPTjnFaeeaD00QMhQSC+SN7glKccBP7ApNWl/IkQ9FCdIQ96ibr0z2NefoS4d17X/udYK9C3c73QxHKcdED9d0Fcvjd9mv1zbsDy8KyZhl0rVgwAkhqrX5J4I1mUhdIlS2BkpcQAVz0iKojDvm1ZZ/CkTs2JknzV3NhoRbPCjQhp1t3DWd4BAhkBTBNbcAID4xW2F0zMeXqs6Ubz1A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=intel.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=6NYHNYHk4Eskt64jA06hjjLb7nD8fIqO7zbe3QJ7OYY=; b=JsiYooeahFcupWKMU/WDEBGgPOIVSw35IMrzpubmkV0Bi2sfmLNQhvpLXWxVl6Ey5BrwHbyqx28z5Earr6FX2u2NV3dnYk5UAAv/l1cAFXSPNuCPw5PW2+HyeSySPL+gfu0QQLO0JWMt/6Ma09c43bh88zk+cuz3OwcFk2dgEEPaYVeCClG4G5V/EmeAyHh7ixuxJ+vIoQMu2MmOyTxiRgdupXQFnk/dOPvaO63A5uBeejAs8K0vurBrdzOCIYxRrsbRFOH9/sOEQRPMTKibiHT3GZnknXVExIbvCM+LY6cTKKuUgHLLz8NAXh/3kLZ+mUDbsJaYxNDGUfZ8MZSR+Q== Received: from DM6PR17CA0011.namprd17.prod.outlook.com (2603:10b6:5:1b3::24) by CY8PR12MB7563.namprd12.prod.outlook.com (2603:10b6:930:96::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Sat, 22 Feb 2025 15:54:42 +0000 Received: from DS2PEPF0000343B.namprd02.prod.outlook.com (2603:10b6:5:1b3:cafe::16) by DM6PR17CA0011.outlook.office365.com (2603:10b6:5:1b3::24) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.16 via Frontend Transport; Sat, 22 Feb 2025 15:54:42 +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 DS2PEPF0000343B.mail.protection.outlook.com (10.167.18.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.11 via Frontend Transport; Sat, 22 Feb 2025 15:54:42 +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; Sat, 22 Feb 2025 07:54:33 -0800 Received: from rnnvmail204.nvidia.com (10.129.68.6) 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; Sat, 22 Feb 2025 07:54:33 -0800 Received: from Asurada-Nvidia.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Sat, 22 Feb 2025 07:54:31 -0800 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v7 11/14] Documentation: userspace-api: iommufd: Update FAULT and VEVENTQ Date: Sat, 22 Feb 2025 07:54:08 -0800 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: DS2PEPF0000343B:EE_|CY8PR12MB7563:EE_ X-MS-Office365-Filtering-Correlation-Id: 22c72a2b-ffab-430c-bc98-08dd535938c8 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: +WACB6bGbm+NVljmJfWACJrWFCHTxhkuw1gXWPrURlJi5tCG6FTpYwc/7jQOo9wpsiyW2vXN+e/1+a9XxjQDhEDWa7fA7gygsfxldVUrQzLhq9S6eJX++bf0vAny3oGMwIbaB8520IxqPtio/xKob5XgQN7xfYIwNiOMkZNTsK/kIaC1JvLhTQp/BsFR6gNVWv4FDtO8MWsmaQbYqCFKD6owcva8q3u2UV+5PGBGzLRkvq60eqWgBTjkFN06IHJ/QsB+QaUJFoHdpNpPnkq8cDQhna+sRgwUAcrX93XjuIkznkapw0K89LbErnXTPxo1TOg5e49z0TXFQAKgidExfVbbU7M5mZuDJhcKErPSeVW0WSkvkJ5IYwgvWClU4smDYzkFEd9giJlYUGXNODxjGMR83BzDoTHqdU9xih+b2lS5TWULGd7EAAJliV/cFjYNiMFu/r8cv0XRGah//zThW1SmwfGnrn4T90D3QU/hkjt1gUtVimSEGKt7WPKA2SWoR/anxK+9dnXBpO1IJRs+9aWzlGQZKYkxcGo+gRDavTVHgqYgefkGTJoMIt6sBo+pRxbuT5v9zxhOtk/+Dg1rRKU28ty8LTqe3czfMDOEjiMzu8VusPaqHIjzh6An6EJJOXtT07erbgnbCvRetnhD61e6XowdaIP8JXacr7FH1usd+J/M6Tj6FSFPZIX1r4NCcyB7QIzwCYo4HK7/Rzwy1KyVzu2CL4xcb6QPnXn0taaKJNU9b0fhrk/KUCP5dDZT5q0ObQHjnYzUbmPJJA3ReYsuRjF+5o9Ld9qCRcrnODEvah85kk2XVsm2QSO7E0V2/KGyZRpr9U0IKZNw4Fqp05lAzs4EUklqK65RwBaNyxPr9YGskNb+lHUqWwX37lDxaaPySuzs4YQocRlB8v+/nLAgAvG27bIqVwB4JN9pNJ3R9+dYfR5wTU7h7q0Dy5nCwfdTIsGnbNpIaM3XPmNHZwuSIJFzvE1N46/BJBYGgI4363rBAa4yboadY5tjgOWuQ+4Fl153gpd9wVyRbPAwKEvQTII6zNwIvSx1aLSjhtUkqot9q71nc54gza78HSxLEK4lPTo4Sb+VYX4x3B6T/et2DSNEPaW/q98LNVCIhv1Fb4ddrYUaYCJwa83LUx1wesu7JEzCNV0PSVy9is3fTYEtUls1SZg2AwsshRm9y0RpnNKrufNenkytDIHiB6Gb52Kf8m5Qk1Xy6e1JlAoDlwWyNLKY8MKsF9+jauv+wqaeRLqs3gUTtHS9XK4v60Eny6nQe7Bq/o0BYiBAWmBjfj7AtWoTDTqhEnnS5QJ3Vky9Th8Lm4QHOaJH/pekjXK6YSGKZGCZSzEGIpO/vpY2GdU/Qzxizn+XanuSiGAHYCx3nqL0rwleYilE2brCIqvS90E0R16jCGz9gSEP58fZMzX82YjoWSFxiQtdxLmwLxvTvOpT9lTXTCJBftSBKQ8uI9JaLWf0k26C7/EHaKYQjy/oVIxZ0wcbqktGDvEPmkE= 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: 22 Feb 2025 15:54:42.4790 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 22c72a2b-ffab-430c-bc98-08dd535938c8 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: DS2PEPF0000343B.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7563 With the introduction of the new objects, update the doc to reflect that. Reviewed-by: Lu Baolu Reviewed-by: Kevin Tian Reviewed-by: Bagas Sanjaya Reviewed-by: Jason Gunthorpe Signed-off-by: Nicolin Chen --- Documentation/userspace-api/iommufd.rst | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Documentation/userspace-api/iommufd.rst b/Documentation/userspace-api/iommufd.rst index 70289d6815d2..b0df15865dec 100644 --- a/Documentation/userspace-api/iommufd.rst +++ b/Documentation/userspace-api/iommufd.rst @@ -63,6 +63,13 @@ Following IOMMUFD objects are exposed to userspace: space usually has mappings from guest-level I/O virtual addresses to guest- level physical addresses. +- IOMMUFD_FAULT, representing a software queue for an HWPT reporting IO page + faults using the IOMMU HW's PRI (Page Request Interface). This queue object + provides user space an FD to poll the page fault events and also to respond + to those events. A FAULT object must be created first to get a fault_id that + could be then used to allocate a fault-enabled HWPT via the IOMMU_HWPT_ALLOC + command by setting the IOMMU_HWPT_FAULT_ID_VALID bit in its flags field. + - IOMMUFD_OBJ_VIOMMU, representing a slice of the physical IOMMU instance, passed to or shared with a VM. It may be some HW-accelerated virtualization features and some SW resources used by the VM. For examples: @@ -109,6 +116,14 @@ Following IOMMUFD objects are exposed to userspace: vIOMMU, which is a separate ioctl call from attaching the same device to an HWPT_PAGING that the vIOMMU holds. +- IOMMUFD_OBJ_VEVENTQ, representing a software queue for a vIOMMU to report its + events such as translation faults occurred to a nested stage-1 (excluding I/O + page faults that should go through IOMMUFD_OBJ_FAULT) and HW-specific events. + This queue object provides user space an FD to poll/read the vIOMMU events. A + vIOMMU object must be created first to get its viommu_id, which could be then + used to allocate a vEVENTQ. Each vIOMMU can support multiple types of vEVENTS, + but is confined to one vEVENTQ per vEVENTQ type. + All user-visible objects are destroyed via the IOMMU_DESTROY uAPI. The diagrams below show relationships between user-visible objects and kernel @@ -251,8 +266,10 @@ User visible objects are backed by following datastructures: - iommufd_device for IOMMUFD_OBJ_DEVICE. - iommufd_hwpt_paging for IOMMUFD_OBJ_HWPT_PAGING. - iommufd_hwpt_nested for IOMMUFD_OBJ_HWPT_NESTED. +- iommufd_fault for IOMMUFD_OBJ_FAULT. - iommufd_viommu for IOMMUFD_OBJ_VIOMMU. - iommufd_vdevice for IOMMUFD_OBJ_VDEVICE. +- iommufd_veventq for IOMMUFD_OBJ_VEVENTQ. Several terminologies when looking at these datastructures: From patchwork Sat Feb 22 15:54:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 867594 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2073.outbound.protection.outlook.com [40.107.94.73]) (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 8B29820B7EE; Sat, 22 Feb 2025 15:54:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.94.73 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239697; cv=fail; b=c7QNF969nGATNfxYQK7KBIKVg6rpdd4p8E0+E09oWrhOgH1Ys3aBhHug9K+Gcu6uUsGjmEpPrnmf0bj7yJ+3PDkEGUWLLxPAYC86cYNdWDH383vR0CxEjAsEdO4RQ+8CN3gdhkvU8j5Af/ZYtMLG9xZbuH6oFt7PwjHQvxz7P/w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239697; c=relaxed/simple; bh=bC7jnA0GQgQBdr2wDvP7KrRtON4oviHEA94DhpxkHLk=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VmWoitVL/4r3AIUbz253w6lzHiCJkL52/H6LAYM0J3dgMYW1zL2qQtiS8LzcrgchgdaCKGoLmg8tl0xL6VieuTrtYdoqp3ZFWxi53zub/KwTVarYNwpWF710GqXfBIrs3uhie+d4TN8ki786lWQWpz1FCjWIk9D5RLbaH6lQjY0= 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=q0WCw7Re; arc=fail smtp.client-ip=40.107.94.73 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="q0WCw7Re" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BrOuQaZ9tIev4IJcTHZxxpTxlyMwLDMf+txoyWY+PCgoBk8kbPmo0cZmnpl1AeVaY1/dwPkCkl057W/YGQgydB+rxuGlr3+26IzIK5Q9fWE6KDYrDbVBznuswoYEwf5JUWEQFhGYF4n59ge/67TSL8WKLBF6t+KHNzerVz2fufQ2UReHaehvMi4Cpsqsx0wiDExPzg7fs4FIsyfLDPGbEQAdgTCM2gQ5ByjbJGBTIaYA0JlNHHSoKipMNVhNNMljuLTwIrR0d3Q4My4YcandoVkFrGo0jCdX1oBorV0c5N9GdSNLG2MEnjBLFiQhHa35gpmDBSiRK1///9yZRyD0RQ== 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=K4XC1t9uE9d98oCKXv3ySINEv8fP+ET7TRg95FMhJXE=; b=l17GvPHb1Qu7xj+aO2yWsfCDAyKVhZu3+VFLVCLiYtiGSRByuIelShK4jtkvN+16bStK65hdguyRgJ6gnd2LA1e8C8mwyAl+h6hi4g8lbnTeJ9hOTyyaMfMvM9SnOq8FGDIn9w3EURBqnE98/NCzqwDAd23ch5dgGbpg6f0nevp0HM/D9QY97iaarYZ8cyRz2Nw6QA0RZJTCpw6HmOxDyrkqDQVKhOpnMATQjri86D3TL40PH7110SbzvJmc/jFUT7SENJvShTGWvXS1vQK9MtvXgQh+PRgtB1h8EAnO9ZxaiFgzvQ+XRsCgZzsoo23w5wma9rVVIEadGJsXI8wTzw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=intel.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=K4XC1t9uE9d98oCKXv3ySINEv8fP+ET7TRg95FMhJXE=; b=q0WCw7ReutA8tUDu958zUvakean67JcTzxIk3S2U5EkqmlzGYeG5qb8lviFEf02CfhEfrHD2elB0KC1SeavzAEfI0tCjc1bNF2D6y7h6yTS+eIiLYe/m0xMLFt+9k/4QyKDDhLHXGdEMzU5MVqnjVu4OsHNPiANqW27u2U0Ak53mgH6nT+g9/gYM1i/8A6L57hkqGogkinGxjlvaHbfJeEA7RhzbQZqYY1lxSpoRRusJHFF9LpUI7if2VjGXOW9TUraNBScX8vbPHQpclKI4PTs7Uks7rafQ4qN46gNB/UD05yCv5bOVyASg9lMgAQmVSPE5YeVtfPrgfRPSIrxFHg== Received: from DM6PR17CA0024.namprd17.prod.outlook.com (2603:10b6:5:1b3::37) by SJ2PR12MB8883.namprd12.prod.outlook.com (2603:10b6:a03:538::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.19; Sat, 22 Feb 2025 15:54:46 +0000 Received: from DS2PEPF0000343B.namprd02.prod.outlook.com (2603:10b6:5:1b3:cafe::ba) by DM6PR17CA0024.outlook.office365.com (2603:10b6:5:1b3::37) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.16 via Frontend Transport; Sat, 22 Feb 2025 15:54:46 +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 DS2PEPF0000343B.mail.protection.outlook.com (10.167.18.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.11 via Frontend Transport; Sat, 22 Feb 2025 15:54:46 +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; Sat, 22 Feb 2025 07:54:35 -0800 Received: from rnnvmail204.nvidia.com (10.129.68.6) 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; Sat, 22 Feb 2025 07:54:35 -0800 Received: from Asurada-Nvidia.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Sat, 22 Feb 2025 07:54:33 -0800 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v7 12/14] iommu/arm-smmu-v3: Introduce struct arm_smmu_vmaster Date: Sat, 22 Feb 2025 07:54:09 -0800 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: DS2PEPF0000343B:EE_|SJ2PR12MB8883:EE_ X-MS-Office365-Filtering-Correlation-Id: 4f45937e-c91a-45b1-7974-08dd53593b0e 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: fLNbZW7bUKcMjhq2HHsaUnbXxCE4HBvw3Bt8RjwluH65Xaa3sC/sV8XdyZLqMJw7eTKdTct7daOoEttIYfK3iocUio3+d3C2Y4kA7zA7SkriYGSM3XX/1FO33Llu3X3Fmkrmg+E39DhGblPdYcnbR4VTc615kIYktIroTSRoWyVtbpFeiVnkA86w8UTvqAS6J63QC1HuYO/6T21+1Mo6144GaiN7m/Wg/ZkVrHlZ8bpVZKQJXh9YwA9IDjl3kgtb5kZQxAhSdpfnc3SdQRm50SbbsF13AvAI3BEUs1lz97/yPVzVA1RQPfZbW5ZqiteJwTJgvr0e5riLwx7rDKf+HUC33wnknIRKbc2JCP908PAKPRAD4Ml0J6yxZKY6DY6qgQHIm3zvGPGXGubFIVaHXaWfG1CpMZhz5nCNb0PMIPmtPq1hX0xar1CvDvgqjB4z5PO9LLY0ApA4cH43MTt1DtQvJGd1rZHd0e+eAYUGrgXoywXvgLwO+xwwXE21g49IOSddt4iSESwoUHEaL+s2JxUuJLzdhnTUzniUwNu3/QqaZ5Etc2DyaabiE4LL3AD7T70vL73+QzzV3pHO1fiy5cWUvN164wJm+FpBRCZ4/NzCqlMG7U+C/ZGUyiTZq5Ti50fIs2J/YZ0Srfw5CRw4c5xW3e9Xfjh2l9RzXnG26kK+tQBH+2raADcdlnaIjGEPyMiKBL6yjf0yAnOHPZFDQcsiaUp+f8+hESOwefDOyB9gDGPMsRs8pMmvNK83a1L7z8Lj5dALyegPrUqiwzwWl3hc/EBv0V8GpjzAS1E6CsDi1AEnnYSmiRKC/lemVSHb378cBsJXhK2/B8a5M6cCJraqKbaN+LtfYZ4YmExEszAHVfzN/lpTUmD32nF69e8p5EPsjiwh5PZCj/1Xmt810i8vUAmgPrFLsV1I+KgMoSmOXBGDkRr3Am9/hZifRo/7YvIp4kC3wU6sKG5wbu0DtUjh7V98F1XR5F4gVQ6SHRjQNkDc0k79vEzTMb+4U6l8gKtbUHd29xEW0v1OfzMaLAH3oJV3OdbIpCUbw76M/QHu4ohXm0qNbRok9QS/VlpgVY/K7eAVl+sNJXsQTTopZXJJA20VJUnpHvJOsZcUYTvPl7RyGuSEQChme1Jsc998nsOzcbYhMfbh0FUuzqFPqs1Oa4kkJEUsBcfK8RSf41na2ankASmu6XJZ3ZaCZ+hl5OD48YhHnk+cqsrofI51XAFt1bNLNN5IfAfEojp3VMGGYbAkmR2mS0erxLIXC+/jRlgYsF3Y66rDgK05DZa3AxRr54TeBlTP1eFOx8mnNKFgeQFmjyZ9kdtC3VqqUjYVws8uPQ4fTXIJRJ8VL7lc+k3/t5bkDbqHMkEvOnleRZbta7xRmb2cExvoa+g9TpLIZYybJqNyNN0XMTbNuskyvJc2B5F0eLm39bwEeNdhIF8oFD+1JhRzEFWU5G11NSG9koWFAVbHx2nPSY7gdRr7y8CckmqaxmHBV+JXopcWS1M= 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: 22 Feb 2025 15:54:46.3071 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4f45937e-c91a-45b1-7974-08dd53593b0e 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: DS2PEPF0000343B.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8883 Use it to store all vSMMU-related data. The vsid (Virtual Stream ID) will be the first use case. Since the vsid reader will be the eventq handler that already holds a streams_mutex, reuse that to fenche the vmaster too. Also add a pair of arm_smmu_attach_prepare/commit_vmaster helpers to set or unset the master->vmaster point. Put these helpers inside the existing arm_smmu_attach_prepare/commit(). For identity/blocked ops that don't call arm_smmu_attach_prepare/commit(), add a simpler arm_smmu_master_clear_vmaster helper to unset the vmaster. Signed-off-by: Nicolin Chen --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 27 ++++++++++ .../arm/arm-smmu-v3/arm-smmu-v3-iommufd.c | 53 +++++++++++++++++++ drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 15 +++++- 3 files changed, 94 insertions(+), 1 deletion(-) 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 bd9d7c85576a..85352504343b 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h @@ -799,6 +799,11 @@ struct arm_smmu_stream { struct rb_node node; }; +struct arm_smmu_vmaster { + struct arm_vsmmu *vsmmu; + unsigned long vsid; +}; + struct arm_smmu_event { u8 stall : 1, ssv : 1, @@ -824,6 +829,8 @@ struct arm_smmu_master { struct arm_smmu_device *smmu; struct device *dev; struct arm_smmu_stream *streams; + /* Locked by smmu->streams_mutex */ + struct arm_smmu_vmaster *vmaster; /* Locked by the iommu core using the group mutex */ struct arm_smmu_ctx_desc_cfg cd_table; unsigned int num_streams; @@ -972,6 +979,7 @@ struct arm_smmu_attach_state { bool disable_ats; ioasid_t ssid; /* Resulting state */ + struct arm_smmu_vmaster *vmaster; bool ats_enabled; }; @@ -1055,9 +1063,28 @@ struct iommufd_viommu *arm_vsmmu_alloc(struct device *dev, struct iommu_domain *parent, struct iommufd_ctx *ictx, unsigned int viommu_type); +int arm_smmu_attach_prepare_vmaster(struct arm_smmu_attach_state *state, + struct iommu_domain *domain); +void arm_smmu_attach_commit_vmaster(struct arm_smmu_attach_state *state); +void arm_smmu_master_clear_vmaster(struct arm_smmu_master *master); #else #define arm_smmu_hw_info NULL #define arm_vsmmu_alloc NULL + +static inline int +arm_smmu_attach_prepare_vmaster(struct arm_smmu_attach_state *state, + struct iommu_domain *domain) +{ + return 0; /* NOP */ +} + +static inline void +arm_smmu_attach_commit_vmaster(struct arm_smmu_attach_state *state) +{ +} +static inline void arm_smmu_master_clear_vmaster(struct arm_smmu_master *master) +{ +} #endif /* CONFIG_ARM_SMMU_V3_IOMMUFD */ #endif /* _ARM_SMMU_V3_H */ 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 5aa2e7af58b4..364d8469a480 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 @@ -85,6 +85,59 @@ static void arm_smmu_make_nested_domain_ste( } } +int arm_smmu_attach_prepare_vmaster(struct arm_smmu_attach_state *state, + struct iommu_domain *domain) +{ + struct arm_smmu_nested_domain *nested_domain; + struct arm_smmu_vmaster *vmaster; + unsigned long vsid; + int ret; + + iommu_group_mutex_assert(state->master->dev); + + if (domain->type != IOMMU_DOMAIN_NESTED) + return 0; + nested_domain = to_smmu_nested_domain(domain); + + /* Skip invalid vSTE */ + if (!(nested_domain->ste[0] & cpu_to_le64(STRTAB_STE_0_V))) + return 0; + + ret = iommufd_viommu_get_vdev_id(&nested_domain->vsmmu->core, + state->master->dev, &vsid); + if (ret) + return ret; + + vmaster = kzalloc(sizeof(*vmaster), GFP_KERNEL); + if (!vmaster) + return -ENOMEM; + vmaster->vsmmu = nested_domain->vsmmu; + vmaster->vsid = vsid; + state->vmaster = vmaster; + + return 0; +} + +void arm_smmu_attach_commit_vmaster(struct arm_smmu_attach_state *state) +{ + struct arm_smmu_master *master = state->master; + + mutex_lock(&master->smmu->streams_mutex); + if (state->vmaster != master->vmaster) { + kfree(master->vmaster); + master->vmaster = state->vmaster; + } + mutex_unlock(&master->smmu->streams_mutex); +} + +void arm_smmu_master_clear_vmaster(struct arm_smmu_master *master) +{ + mutex_lock(&master->smmu->streams_mutex); + kfree(master->vmaster); + master->vmaster = NULL; + mutex_unlock(&master->smmu->streams_mutex); +} + static int arm_smmu_attach_dev_nested(struct iommu_domain *domain, struct device *dev) { diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c index 358072b4e293..9e50bcee69d1 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c @@ -2803,6 +2803,7 @@ int arm_smmu_attach_prepare(struct arm_smmu_attach_state *state, struct arm_smmu_domain *smmu_domain = to_smmu_domain_devices(new_domain); unsigned long flags; + int ret; /* * arm_smmu_share_asid() must not see two domains pointing to the same @@ -2832,9 +2833,15 @@ int arm_smmu_attach_prepare(struct arm_smmu_attach_state *state, } if (smmu_domain) { + ret = arm_smmu_attach_prepare_vmaster(state, new_domain); + if (ret) + return ret; + master_domain = kzalloc(sizeof(*master_domain), GFP_KERNEL); - if (!master_domain) + if (!master_domain) { + kfree(state->vmaster); return -ENOMEM; + } master_domain->master = master; master_domain->ssid = state->ssid; if (new_domain->type == IOMMU_DOMAIN_NESTED) @@ -2861,6 +2868,7 @@ int arm_smmu_attach_prepare(struct arm_smmu_attach_state *state, spin_unlock_irqrestore(&smmu_domain->devices_lock, flags); kfree(master_domain); + kfree(state->vmaster); return -EINVAL; } @@ -2893,6 +2901,8 @@ void arm_smmu_attach_commit(struct arm_smmu_attach_state *state) lockdep_assert_held(&arm_smmu_asid_lock); + arm_smmu_attach_commit_vmaster(state); + if (state->ats_enabled && !master->ats_enabled) { arm_smmu_enable_ats(master); } else if (state->ats_enabled && master->ats_enabled) { @@ -3162,6 +3172,7 @@ static int arm_smmu_attach_dev_identity(struct iommu_domain *domain, struct arm_smmu_ste ste; struct arm_smmu_master *master = dev_iommu_priv_get(dev); + arm_smmu_master_clear_vmaster(master); arm_smmu_make_bypass_ste(master->smmu, &ste); arm_smmu_attach_dev_ste(domain, dev, &ste, STRTAB_STE_1_S1DSS_BYPASS); return 0; @@ -3180,7 +3191,9 @@ static int arm_smmu_attach_dev_blocked(struct iommu_domain *domain, struct device *dev) { struct arm_smmu_ste ste; + struct arm_smmu_master *master = dev_iommu_priv_get(dev); + arm_smmu_master_clear_vmaster(master); arm_smmu_make_abort_ste(&ste); arm_smmu_attach_dev_ste(domain, dev, &ste, STRTAB_STE_1_S1DSS_TERMINATE); From patchwork Sat Feb 22 15:54:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 867593 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2040.outbound.protection.outlook.com [40.107.244.40]) (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 E2DCA20CCF4; Sat, 22 Feb 2025 15:54:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.244.40 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239700; cv=fail; b=nIFBtJHH7Zkww8r1zg10aZdYpb7DtKhqTHdyJs14OL5HqAcWrSi86Dv4WeWwemOP8jLKvjRyrHMNtaSxCNDecStXOhH4X8McOSnblzRGVSu2qKlWTkgJIP5/INCx8kysK3qZZ7dvQvg6bPZK31dx9T/cL53UpGkmLILEnSKT7KQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740239700; c=relaxed/simple; bh=1pxnHPoBJ14AYx2x5nf1rpQZJDgD/CaqSiEnUcK+MGE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Ex3fDzzpEDJQy27nFR03PuKwNiX3bjGti375+GYUsbFEO6OiiiEsLwqI+PoHPZWK0+czGphZPTvO8DW1FEYTF8F8lUiFC9b4AQNAuoFABfcMJGuix6KcyW1m7x6lSaY/rlBU7A7W7V7hedN9NssdgrZXeKN7+wI66KQ4JRmu4ho= 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=eDTfdZ7M; arc=fail smtp.client-ip=40.107.244.40 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="eDTfdZ7M" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FqGwX/0Lony2UBQQLKZE6XwkYyMTzm+DLKfOisf1SMnAMQE0g0gdLCWUZ2aCNIxCwQsQbVvQ8B9xAya8j5FTC6COJ/E539qnE8r1uoEmhpqHfUfWUsebiI1ufiIOVagu5pi0K0NlHz5cwhjLP8TEnQKsr234Rlu3NmdC1I11HGfd+eQBU8tX1UeNKnSCt6+KWcx+n7d0+c65nbH5IlBaPnIPy9CyZTUlqnFCYzWoXNUosh5Krh3UFGhzpxByjEvG9p6Vzxfjhae6wJ8E6qSkRXSOJmfuZ+IL4t0WYcciDQgndh9jo0fx6gAno9xT8wWpbVdqzEN0qVDyvCTuyI0j/w== 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=lrtTbc5CQziED69p9FmcpuzNc3Jz+cizNlIOb2T2l/g=; b=YFo5OTR5NG3s4uAPrbzsjkBAuYT/7HNIp5vu2g5uw6GwXkdjV4cxruizh2lcZHrT6lS84FP2z0YH/9AagejSl2EMOUMNX9RriFDzzs8TY/vOKKp9JB7C+wbrfKoJr8ZjMhlnaMCQGS178vzBX/6IQ6/lCsEKFs7T0eu790yc6DhA386udVfN1JPXDFA7VrSh1iY08ygzT8SpK6lWjyZ3BVCGf3JvYnFa+lMaiK9guDxbuT5LcNIVxub3pOd8Ltc3Hwa/r8ePhi3UvtTQ01bfo2fC48XqkHnvOce9a6Op7BJkknY/3i0Hdm8Iijmuc7DHXdtzIZ2Iiw3R6vq6od9Zqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=intel.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=lrtTbc5CQziED69p9FmcpuzNc3Jz+cizNlIOb2T2l/g=; b=eDTfdZ7MZ+4rfjnfl6NUcN6HGp12EZAjE0qf4OEwkq6Iw9ezPdFB9DVw+dAG8IL/UEnGm0LCRXUKRwyeKkoXtxf+7EN5FJXIsokFSCCIJoZVT1l05LN+YrcHsY6vQURgFSlCuS74f6IKYuApzEDaS6DMZ0DcIQAbjysbC+BV52UuSLiyo6yM92wi0Tl0FMhy1ybOPFbDtlktRBNAYEFajw/PDt7qk7oruytfVELv+xKdb+TVvgfbneYhwCxaM66uFGHizioXpfzbDyQRswW3NftO234wFksl0B9WWflQknN2d3xb+9Y3sGZ+4IdHt+c6hfXmdWFREh8NN43L6DiFpA== Received: from CH2PR15CA0025.namprd15.prod.outlook.com (2603:10b6:610:51::35) by BY5PR12MB4052.namprd12.prod.outlook.com (2603:10b6:a03:209::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.18; Sat, 22 Feb 2025 15:54:49 +0000 Received: from DS2PEPF0000343A.namprd02.prod.outlook.com (2603:10b6:610:51:cafe::7f) by CH2PR15CA0025.outlook.office365.com (2603:10b6:610:51::35) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8466.15 via Frontend Transport; Sat, 22 Feb 2025 15:54: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 DS2PEPF0000343A.mail.protection.outlook.com (10.167.18.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.11 via Frontend Transport; Sat, 22 Feb 2025 15:54:49 +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; Sat, 22 Feb 2025 07:54:37 -0800 Received: from rnnvmail204.nvidia.com (10.129.68.6) 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; Sat, 22 Feb 2025 07:54:36 -0800 Received: from Asurada-Nvidia.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Sat, 22 Feb 2025 07:54:35 -0800 From: Nicolin Chen To: , , , CC: , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v7 13/14] iommu/arm-smmu-v3: Report events that belong to devices attached to vIOMMU Date: Sat, 22 Feb 2025 07:54:10 -0800 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: DS2PEPF0000343A:EE_|BY5PR12MB4052:EE_ X-MS-Office365-Filtering-Correlation-Id: 0b83a5fd-a0a6-4e49-2062-08dd53593cb8 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: bMwEKbcRY7Vqzc7vhC6pw1/QeZ4s/NWuZgDlyO7UoIn1MqYRhQWc/TG/jNvQKk5ECSw2ssuhWFNh3jz7Mjl7w3yRt8deaYF8QTSNnDbj+qnaTqOGN7l2byYFOsLiIXFHH+e2BHEkyzB93Ll9E5kCDL1RwJVNHMWph+wLi3ahRavxRk6ndcvai69BRSsftK5S+kgbeZmNUGQBmOkvc+TaAvsUXncwg5i7YsL2b99oDtT+tMMQR2JX9sHyOSj9n9bxyDbQdGNRi5DS0xD8PozeXMVnqcFDQQS7AaHph91QsjmJUyNB8UPT/kKD5vCIgE4dyOSWJ4R0v8B0SJN7nouM1yscLNpvCMV1Qa5ABQB/3yH59HUvfwqDrvqS9npbTRXj2fj/08womxUTaQopVjX90mb3e6LgY707hnpDtKQDEB0q3xyvGW3IsdiVtxtrdmXj9lpkrvtAitVLPucQbRT1L9OIRQUioQ69zG+v3QJjIGdm7mnGnn2ZB+nfzUVOGj6HK/jlm38oUwWYTn7cCnXlwKMLijIhOF0dbS6fSq4CEUKLe0B75q6OKVxQSzmvkqypLKOAQR7buGlfZBJIX8MHlWwzlgcssjoi/bX4Xuz3nwuixd9XPQ+Mu7FHaKTplosSgximP6E2HRjiZif9rGHR0M43ACO9OcTusAXvr1gFZi5upkNH1Vfm6aY5L8uX44emrf2E1X3BUwiiSmj2FOedElLbtXAOUg/kLOvp76jjQtlrILYi68qXGzCZe9rB0vFIxWby1N1H6OlGzbu9KqNBiXlZwZ2jcYVtXG/BYN6UIlKm1GaHDhE8gDvJBj6F8pAFct2kiPmuzAcPA4Su/IKrBCCvC66T4MQ6UgwI0pys/4lN5pQEs2+Q0euEJ57Rco8B5qwF3af4zNn0a8Y9nj+I0rt79XLWz42PCGu0ndcTqF0zbEhZl/liJ5cM348lv/4cZZwGejd8MaoXEt6j7TVKbSHfB1+0bsTZww/FIQVDeo5zt47a16Zaq5hUwClsbxoHp2gMHJjMaI+ukVmmt7F94ESP5F774xV9bJ7dqIsxNgKU+Nv6DY7fdBYy1D64JWYsLL9EkNBiaftk76K8S/hcDFZ7+TMah9GWGb9dsUZ58acGG1UEKwr3RnCpXI5KVXZ112VPxzbrlKkgcj/EdSrGvl0m391Wi4q88upidAsPyulGLY/NoJZOT3ua91LhUZckTtqy5rHr9WmMtu3Om0/V3EoV4BrtH5adX8DCnGhOGGzN4N72MdK870eJ95kMI6VAo1nfPMF2JPhRVyGcL0EAk1nIDdUnGKJKbdHUdtzC0xc3ZqcA3JJA7RAAYVKJ9xq8RHo3/vQlwCMbdtORv54FQbPLA1MNLHsF0uEsuG91J+yOQqS0ld1XMYfCYS9WH76j1m/aUWY7m3PU/csBlNuHxgSXwe6c4wsmvBYTRrEa1AoG7+GFXZePihGpnTtuh1MfGTST3Hb7HVqsUt3MM4P5PEmvldh/AFGKcXJ4Mz+PlvU= 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: 22 Feb 2025 15:54:49.0966 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0b83a5fd-a0a6-4e49-2062-08dd53593cb8 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: DS2PEPF0000343A.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4052 Aside from the IOPF framework, iommufd provides an additional pathway to report hardware events, via the vEVENTQ of vIOMMU infrastructure. Define an iommu_vevent_arm_smmuv3 uAPI structure, and report stage-1 events in the threaded IRQ handler. Also, add another four event record types that can be forwarded to a VM. Reviewed-by: Kevin Tian Signed-off-by: Nicolin Chen --- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 7 +++ include/uapi/linux/iommufd.h | 23 +++++++ .../arm/arm-smmu-v3/arm-smmu-v3-iommufd.c | 17 ++++++ drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 60 +++++++++++-------- 4 files changed, 82 insertions(+), 25 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 85352504343b..c8574969e700 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h @@ -1067,6 +1067,7 @@ int arm_smmu_attach_prepare_vmaster(struct arm_smmu_attach_state *state, struct iommu_domain *domain); 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); #else #define arm_smmu_hw_info NULL #define arm_vsmmu_alloc NULL @@ -1085,6 +1086,12 @@ arm_smmu_attach_commit_vmaster(struct arm_smmu_attach_state *state) static inline void arm_smmu_master_clear_vmaster(struct arm_smmu_master *master) { } + +static inline int arm_vmaster_report_event(struct arm_smmu_vmaster *vmaster, + u64 *evt) +{ + return -EOPNOTSUPP; +} #endif /* CONFIG_ARM_SMMU_V3_IOMMUFD */ #endif /* _ARM_SMMU_V3_H */ diff --git a/include/uapi/linux/iommufd.h b/include/uapi/linux/iommufd.h index 2ade4839880d..5fc7e27804b7 100644 --- a/include/uapi/linux/iommufd.h +++ b/include/uapi/linux/iommufd.h @@ -1054,9 +1054,32 @@ 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 */ enum iommu_veventq_type { IOMMU_VEVENTQ_TYPE_DEFAULT = 0, + IOMMU_VEVENTQ_TYPE_ARM_SMMUV3 = 1, +}; + +/** + * struct iommu_vevent_arm_smmuv3 - ARM SMMUv3 Virtual Event + * (IOMMU_VEVENTQ_TYPE_ARM_SMMUV3) + * @evt: 256-bit ARM SMMUv3 Event record, little-endian. + * Reported event records: (Refer to "7.3 Event records" in SMMUv3 HW Spec) + * - 0x04 C_BAD_STE + * - 0x06 F_STREAM_DISABLED + * - 0x08 C_BAD_SUBSTREAMID + * - 0x0a C_BAD_CD + * - 0x10 F_TRANSLATION + * - 0x11 F_ADDR_SIZE + * - 0x12 F_ACCESS + * - 0x13 F_PERMISSION + * + * StreamID field reports a virtual device ID. To receive a virtual event for a + * device, a vDEVICE must be allocated via IOMMU_VDEVICE_ALLOC. + */ +struct iommu_vevent_arm_smmuv3 { + __aligned_le64 evt[4]; }; /** 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 364d8469a480..42c7daf4c8c7 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 @@ -445,4 +445,21 @@ struct iommufd_viommu *arm_vsmmu_alloc(struct device *dev, return &vsmmu->core; } +int arm_vmaster_report_event(struct arm_smmu_vmaster *vmaster, u64 *evt) +{ + struct iommu_vevent_arm_smmuv3 vevt; + int i; + + lockdep_assert_held(&vmaster->vsmmu->smmu->streams_mutex); + + vevt.evt[0] = cpu_to_le64((evt[0] & ~EVTQ_0_SID) | + FIELD_PREP(EVTQ_0_SID, vmaster->vsid)); + for (i = 1; i < EVTQ_ENT_DWORDS; i++) + vevt.evt[i] = cpu_to_le64(evt[i]); + + return iommufd_viommu_report_event(&vmaster->vsmmu->core, + IOMMU_VEVENTQ_TYPE_ARM_SMMUV3, &vevt, + sizeof(vevt)); +} + MODULE_IMPORT_NS("IOMMUFD"); diff --git a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c index 9e50bcee69d1..fdf8bba14303 100644 --- a/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c +++ b/drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c @@ -1813,8 +1813,8 @@ static void arm_smmu_decode_event(struct arm_smmu_device *smmu, u64 *raw, mutex_unlock(&smmu->streams_mutex); } -static int arm_smmu_handle_event(struct arm_smmu_device *smmu, - struct arm_smmu_event *event) +static int arm_smmu_handle_event(struct arm_smmu_device *smmu, u64 *evt, + struct arm_smmu_event *event) { int ret = 0; u32 perm = 0; @@ -1823,6 +1823,10 @@ static int arm_smmu_handle_event(struct arm_smmu_device *smmu, struct iommu_fault *flt = &fault_evt.fault; switch (event->id) { + case EVT_ID_BAD_STE_CONFIG: + case EVT_ID_STREAM_DISABLED_FAULT: + case EVT_ID_BAD_SUBSTREAMID_CONFIG: + case EVT_ID_BAD_CD_CONFIG: case EVT_ID_TRANSLATION_FAULT: case EVT_ID_ADDR_SIZE_FAULT: case EVT_ID_ACCESS_FAULT: @@ -1832,31 +1836,30 @@ static int arm_smmu_handle_event(struct arm_smmu_device *smmu, return -EOPNOTSUPP; } - if (!event->stall) - return -EOPNOTSUPP; - - if (event->read) - perm |= IOMMU_FAULT_PERM_READ; - else - perm |= IOMMU_FAULT_PERM_WRITE; + if (event->stall) { + if (event->read) + perm |= IOMMU_FAULT_PERM_READ; + else + perm |= IOMMU_FAULT_PERM_WRITE; - if (event->instruction) - perm |= IOMMU_FAULT_PERM_EXEC; + if (event->instruction) + perm |= IOMMU_FAULT_PERM_EXEC; - if (event->privileged) - perm |= IOMMU_FAULT_PERM_PRIV; + if (event->privileged) + perm |= IOMMU_FAULT_PERM_PRIV; - flt->type = IOMMU_FAULT_PAGE_REQ; - flt->prm = (struct iommu_fault_page_request) { - .flags = IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE, - .grpid = event->stag, - .perm = perm, - .addr = event->iova, - }; + flt->type = IOMMU_FAULT_PAGE_REQ; + flt->prm = (struct iommu_fault_page_request){ + .flags = IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE, + .grpid = event->stag, + .perm = perm, + .addr = event->iova, + }; - if (event->ssv) { - flt->prm.flags |= IOMMU_FAULT_PAGE_REQUEST_PASID_VALID; - flt->prm.pasid = event->ssid; + if (event->ssv) { + flt->prm.flags |= IOMMU_FAULT_PAGE_REQUEST_PASID_VALID; + flt->prm.pasid = event->ssid; + } } mutex_lock(&smmu->streams_mutex); @@ -1866,7 +1869,14 @@ static int arm_smmu_handle_event(struct arm_smmu_device *smmu, goto out_unlock; } - ret = iommu_report_device_fault(master->dev, &fault_evt); + if (event->stall) { + ret = iommu_report_device_fault(master->dev, &fault_evt); + } else { + if (master->vmaster && !event->s2) + ret = arm_vmaster_report_event(master->vmaster, evt); + else + ret = -EFAULT; /* Unhandled events should be pinned */ + } out_unlock: mutex_unlock(&smmu->streams_mutex); return ret; @@ -1944,7 +1954,7 @@ static irqreturn_t arm_smmu_evtq_thread(int irq, void *dev) do { while (!queue_remove_raw(q, evt)) { arm_smmu_decode_event(smmu, evt, &event); - if (arm_smmu_handle_event(smmu, &event)) + if (arm_smmu_handle_event(smmu, evt, &event)) arm_smmu_dump_event(smmu, evt, &event, &rs); put_device(event.dev);