From patchwork Tue Mar 11 19:44:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicolin Chen X-Patchwork-Id: 14012670 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 0186BC28B2F for ; Tue, 11 Mar 2025 20:03:16 +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=Udh1PVsxB2jdZQ8I8XJZCTTBX3qW8VMd7f89xgxZ7Xo=; b=fgHMVCA03MzRMVTexqOk9RO24u EOiv6RBQMj0P7qBUZL4EcFT7v+J275V+8DUpEV44cChbVqfo6xklZEc3Uo/r7UMbylQbNZ2Zgcnq1 bCjXlpnn/AfYNo5iHoaybpsqJSTRDr7dtD6lUd85UoSln/91WzwBHGwZnw2hhGRJCjgtqlrWWgO+6 uujIIkM8Hibi2k3XhR5PtRYZUGIIqVBs6PAbqMNxF/DZC3EutFa0UwPGwt8/6Q5zLbn7PrJ12DN27 frzjr3cN8uQ86jRD47lCVjHWOiX9ef2spYHAu5YWwLljbV9Gwv+H3IlJ75so/R2QNVdEjiFA/M9Kj OoIw3pWg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1ts5oe-00000006s2D-0CuH; Tue, 11 Mar 2025 20:03:04 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1ts5Xr-00000006oR9-1cny for linux-arm-kernel@bombadil.infradead.org; Tue, 11 Mar 2025 19:45:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Type:Content-Transfer-Encoding :MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From: Sender:Reply-To:Content-ID:Content-Description; bh=Udh1PVsxB2jdZQ8I8XJZCTTBX3qW8VMd7f89xgxZ7Xo=; b=jQ+bC/Kr7t+L0MwzSAAuQMq+hg 3uka8YjItiJa6mgnfKw/NNVfsgmQWAPZ8+3sS/nCDKrXRNI/pOfoh43NU6CdNqGKCuqtsOLdl7DRX Y8mZfDEauw2z597hVTDrH2tDF4lbLPiH0TpmLWD4cdfajc15V0lXzQKl3PNRE5HfdWBdU1uvGCsB2 Wz1kEZoJ/yA8KB7UD1HMh1BVt3OGo88Xee+CRUSFC8HNoMmmXHf69caATCW0G2IRnKMOjEdu1YbyA 9nLPMPyxBmOD1En/ZR58OYqZcZoH+0gmEFEV08Hi2ByTqBPurxvi1pwWGXH4NFCxgWy6xv5yu6WzX aKjJGEVA==; Received: from mail-bn8nam04on20617.outbound.protection.outlook.com ([2a01:111:f403:2408::617] helo=NAM04-BN8-obe.outbound.protection.outlook.com) by desiato.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1ts5Xo-00000002Ek1-1i3I for linux-arm-kernel@lists.infradead.org; Tue, 11 Mar 2025 19:45:42 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Doj6d+5zOCq31hVnfsQlifonGls6KaUXQD/HEiPFZi2YtqE4K3oMeWRaOBFe3LMJfITOyp+FJYCZ143gSWehMYFZG2bqGGMzpB7ZHwSeiKA58ryMoz289by/hYJYgiNs7CT67q/V5E8qE1NDU+wD+Mr1uMXacVx9Ia3IvZuznEi4Z2M7rGBEjKasz3jrFUSYJu7sL1Ryevy7PHak2LbtXEk74CDrxRTHU/2J/To/Mr4PXN7b6GCtwMiGNHYtfGC3DqFW/+IWV6iH3EoMSuKs803A/4+128A+j0AkJmf7UIVDZ1HG+SKts0hItOxade2lNanXzG0ZNhCb9IaJBZLAzg== 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=OGPZswpnHl3fPdiIBVeeR3o1ATXZMfmVszp9do9mH0Pq4wHOHHUdIj9C5v2cArEmPusgGvhMzpca4ek8fBlSorADp8TVrbQJ+z0ElbcDzU2peYKRsUtR5Be6QetycEujLGwZutb1tnWwZaHIf/lV3ZXvVCWjKYh6f8X4btcWPVFz/OfnR7jpri8NLZWfXXAsS3DdOxgImgJnL+Elh0u9ihAU8gPmSrAQYiSDCx/obMH1ndrfvEd7obZY2EkZiejU8WfjkoFQr0AoebF2xFtXMsaa0xTKx6KAZoUDSkWq5u7AZgP7eQ493NCEKfiMgLFkwp6dtaXYbzS116L7BLlB6w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) 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=ojOi+zqG9JPpfesZ7NqBLYWFTjounkT/PDGUBc39UJXSru6pweULlNjV7XgpubCG2+PghF5DInC2AVDtqiWfYnZfIW7CN8/S7JfpCkyo4TTC16YZl3+5gckKvgJyYlPwWyo7cT8B1YYUuOGxku1cBfs13Xy3rMmaE8h71pHQa+t12SxPCPEodeSpwTh0XebkIB8lE2sJaoGRXfKUTqKjc9RXtquyBl+ZPbuuiX5Wgu5BJ3bql/HhcgkfRe0Fnw/FpEq5EWv7Let+bxP31uIx7Ja2btWsxs+GgvksP847RT+/PUqMoSxLgYP8XYbi0MfrMbSOsaIAK6Bcl77WGIBMpA== Received: from SJ0PR05CA0176.namprd05.prod.outlook.com (2603:10b6:a03:339::31) by CY8PR12MB8193.namprd12.prod.outlook.com (2603:10b6:930:71::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8511.27; Tue, 11 Mar 2025 19:45:26 +0000 Received: from SJ1PEPF00001CDC.namprd05.prod.outlook.com (2603:10b6:a03:339:cafe::38) by SJ0PR05CA0176.outlook.office365.com (2603:10b6:a03:339::31) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8534.20 via Frontend Transport; Tue, 11 Mar 2025 19:45:26 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) 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.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by SJ1PEPF00001CDC.mail.protection.outlook.com (10.167.242.4) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.20 via Frontend Transport; Tue, 11 Mar 2025 19:45:26 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Tue, 11 Mar 2025 12:45:10 -0700 Received: from drhqmail202.nvidia.com (10.126.190.181) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Tue, 11 Mar 2025 12:45:09 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.13) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.1544.14 via Frontend Transport; Tue, 11 Mar 2025 12:45:08 -0700 From: Nicolin Chen To: CC: , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v9 02/14] iommufd/fault: Add an iommufd_fault_init() helper Date: Tue, 11 Mar 2025 12:44:20 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF00001CDC:EE_|CY8PR12MB8193:EE_ X-MS-Office365-Filtering-Correlation-Id: bbae5dc0-c0b1-4fa4-2c9f-08dd60d54551 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|376014|82310400026|7416014; X-Microsoft-Antispam-Message-Info: eZMEsrZ2ss3swJbxSd9G+ia5ad4l8bdZCICRq4HU/IVOy6u0Q4Bfh2RW+COKhFeS0kn3u8XXhsZZd1perBez2qXQGf2QJ87tFZYHfezosL+WHFnsfk/brgeAfFJHh9wi44CKLQ9g5CzjlS4CcKoSoXtp+/aomGF3rTpWiUYZ7RyppLLqzjeBxNQJoBFyURCPP6nzTPVPqvLWczmXbus5WTu+8sTtqfqUpjXTr8/yIxqa65TX7IB5UoQmd4xDdmNAQ0zE7co5S4nkKtmc6ULaMWI6ALSB7v10ChO1kkYLRnKjg/xXeFFe1YhA1coO4fHVRJeLJjNJG6fNVxcYmveoyEP2fQXfFVSgrYT436XdMaYf+heuTmdsczdXWHUyzXumIEY/VFXSHGQFtn5QLtPIVL6/SA1+apbj2KhHIgt1FKE2bmVmDYqcqxy0DL+ytgM4daqnnTHQ6H/Ia7QxiLR0INBt5E8fxXQdyqjmqkaX+D6U9EP8jz6r+XIGUZXp6DZP/3SMxY/XBkajjdiAzJ0mZS7LrACUauhzfnLb2nbYhcaIzNbapxR73r1bQHbvIr23yZIepVBcWAzRr4TBNROm4y1ztv+O7YyBkGmi4nC82NB5bltj6dycs2o3vSQonlHYEFhw4sUJ3dYxpObto5s5+HL2Sm/7eZ7dZ5Rw9+anqfy/P2GKYRhvMx+okiBnQWDZcTkjWSJf10VQ6xmoyA72UfA5ogIJcdMDQ6l06ntjI4ydLhTFcQJRFZ4pKLIaOD2yfxuDS9byLlV3M0XBhf/An5cF+ABlFbC9ctjKnhZ7Ca7RRRfOINqnYhTGpzE1FWW8ywdnoq+4pSixDbZKUifV0owiaRx9AG4GcUccE81Bt7cwtOTkDRPyFdPQV7dHHSAR1VY82h2g+1lImiFrIRNfQM4yX6adLd8jVpkZfIJJ91IZ9Y5hCqNjpc61/MCctLELigBwySoBMKTL4iIp+FGZypcYdQVW83nAgj+5B5V0DVBwtC601ZHruZx1yjiDMm/q4pzi9LPxM3LVB8h/sFdaDNsRchzjzxmI/2+53RjgE4otypkIWQ0ubpAm84FK2oYQZAg/Q6gEy0MlGKcS+HVEcbpa8SgLS4I7bAVlkjsqk3pOoHELjCFCBPGUKK+L0iTCNZLDz1JE1zH0XAdTxuc91XhK3VbjtrTFXGw5bWpPn3zPptSUw+PCYVoCgqPY98tYlRScr/fNA79oe9WCkgL3krHfFZnN0SjXu+nEk/Op4U48V9GLvL6Rjc2t68zkFlxQZCdQMM3BcKi8fsBnWQqTHhnkZ7QYDVCVt37yq9t7JgRF16TgmTRJhpZM5O6sFsg3JUsRSQ3yRNcbp4i4XkX97OVDh3/6j4vxfeCUnIh94Qtsc8TQYFUE/WnDVIK/Q3tZT9mSc4HfphZAUDaq/V+iAbuRMlPfqxERf90nwHZY2XoHwMOJzWpJigUCFanqjNAFdoaF1NzuFbyqiUWvINgGP37EjsCLywWzBbQ3qw6hgUs= X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(376014)(82310400026)(7416014);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Mar 2025 19:45:26.3101 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bbae5dc0-c0b1-4fa4-2c9f-08dd60d54551 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.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF00001CDC.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB8193 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250311_194540_508199_082A18EB X-CRM114-Status: GOOD ( 14.61 ) 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 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);