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: 13986703 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 214DFC021B2 for ; Sat, 22 Feb 2025 16:00:49 +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=nsWWP0PMo9clPmeQ1+hfgUkQ6H wz6A+7vt85nEe1uFFuNKvJxFW6kw1R8ynXf0YaYxiZPbwYyUR9K6N1sUovy6od6+yEF6+/6gQ3YhK Wo41592+ND5GTRgSxG2PIwu6hsp3c8QT3hfgvFwXzcP564izs6/zzBsyWw00dQRglMVKO2rpotr3A 0xGU7CcEwTmsZ83puymvNRpY4b0fC9XkyvvckZhuhe9y5adsD3+3Ke5bc1zXwy5ysIp9wKsQoMrFo ZvNhAReugvYC3rjl23BLls9nyvbX0hR+JNWh/dMHhYKrVx1PzQplUIxDFz0ExmkQ76fH6lGa6TxK+ 3qienx7g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tlrvh-00000008JYB-4B63; Sat, 22 Feb 2025 16:00:38 +0000 Received: from mail-bn7nam10on2060d.outbound.protection.outlook.com ([2a01:111:f403:2009::60d] helo=NAM10-BN7-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tlrq0-00000008ICk-3c1v for linux-arm-kernel@lists.infradead.org; Sat, 22 Feb 2025 15:54:46 +0000 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: 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250222_075444_896006_D2ADE79D X-CRM114-Status: GOOD ( 14.21 ) 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);