From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 15871CCF9E3 for ; Fri, 7 Nov 2025 19:42:15 +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:MIME-Version:In-Reply-To: Content-Type:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=NqtnPgtF5yctwk76pSe0qteHYUJjfn3HlddK4ffPwEM=; b=s9edttPWYvsiI1sia6dcveXdpi 0xYK6FQEUcDh8A9SuroIydycNQUywZuxvMN2A4n41LN5/vVBB534XRqzUl9blyBaAjGcpQrl1QUw/ SBEQY8rdVPB8c/tzVVM2i42odV3i+0JEkabpJvJXcV171XFKWOtdzJTzP0SFPBKqRnFw7XMKQpf3I 730OpcKyiTAq2qZkZaNmaplNjsiyOI8mQW0xA2z+DwDYqD5c0eBv2SMCFoJBYUn9qeCwjZ9kSLCfJ 6buoSTUkCXPoStvJ1zGD/Qq2aKYS206HVFMRsGpyWedrhCfdPueMc8EmuIXye0Wj7BvowMiWicpTA p05l9luQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vHSLY-00000000mIP-1L9C; Fri, 07 Nov 2025 19:42:08 +0000 Received: from mail-northcentralusazon11010025.outbound.protection.outlook.com ([52.101.193.25] helo=CH1PR05CU001.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vHSLW-00000000mHe-1WNK for linux-arm-kernel@lists.infradead.org; Fri, 07 Nov 2025 19:42:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rlk59HjkiT0NiavK6JmQme+7x/VFNeJuNwDdb1GkJNnHsXWXb1BrQz4+6vdoI1BP4uHgMpXexm9xe/oT9OhI5KEbFANKUYQbntsHRcPfFy+2CRQZPQchTdVqFiWmCBrR2WIPwGKsO3W6W1HjDiAMi5WehCG5loO9+m2z4pTQJd1fyoVRZYNkYT2Wln2/T708eEGsATEun8fUOJjP82Pi+2jXNmhDfST/CjQAB++gUi/7pcho4wZ3dma/Bgp+BgB5x7PdTPKAx1S7ZryQhGWcMoNRxf+QYctupZcakiMgA7ws9CCOYALj5UNo024Hfab2ovA0V+CCim7H9yzeWPdQMA== 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=NqtnPgtF5yctwk76pSe0qteHYUJjfn3HlddK4ffPwEM=; b=Sw/AvQjPTYuK9KtwFzR00Zt/56dxjcw9vGv+Kwk57HZkzrPth7VwX9hGfta5EBnGnUh6509FaXlgqQnSrdM+k1pQMh5OWiUDmVIv6YHzBTE/RQSVON9EzVDxEZ+EKnyAvCRtZymZoVBXQCtoP/LsWAUelrr8SpjF7esW9W+43xHnGpOoHboKV11QoHuq3uORlEQd2k9ONs7Ct/dSSiPiv/T7rv9ZZ1Ft3CQ2+xsAPsIbh3LEUCrsLfNheDfvhyPdXxtqIvEpugIHFFi8btmTymUFSEmA0on0c6EExa4koVjxD6p0Ynpc1EBskBgzvc7lKqU3V+GOsOtB4gzMOU58LA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none 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=NqtnPgtF5yctwk76pSe0qteHYUJjfn3HlddK4ffPwEM=; b=Osj8V4Ipz755IEGHi7JYDSgCJt5QdN4FwvTCbJY/8dOlQ0jQtKfhi04oVyRhxjcqp0OQUNB1ojim/XJEEQTIY/YPru14oNuz/JrjEbYuZNAZkWKXx2nMoEUN4G22neOntfaTBANJFVA5VEvS1U3pyHTRCFqr7+Ia/O9ZGtXwJTTymW1UvdQEUyaR4TglS1LS/oiUqvC8uTnnBAYYAaBiN2GljER42QdzpKlPa4IMW45M4umauEfP6hWDkwjw6k2PZ6H0CPam4EQcDARRZlFTVSHsr6t4E21VTiQiIrHu1z0bk8mWgyLZfsQkAT/oOSU/orDWNhkWPoEKbqLoemtheg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from MN2PR12MB3613.namprd12.prod.outlook.com (2603:10b6:208:c1::17) by PH8PR12MB7280.namprd12.prod.outlook.com (2603:10b6:510:220::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9298.12; Fri, 7 Nov 2025 19:41:59 +0000 Received: from MN2PR12MB3613.namprd12.prod.outlook.com ([fe80::1b3b:64f5:9211:608b]) by MN2PR12MB3613.namprd12.prod.outlook.com ([fe80::1b3b:64f5:9211:608b%4]) with mapi id 15.20.9298.006; Fri, 7 Nov 2025 19:41:59 +0000 Date: Fri, 7 Nov 2025 15:41:58 -0400 From: Jason Gunthorpe To: Nicolin Chen Cc: will@kernel.org, jean-philippe@linaro.org, robin.murphy@arm.com, joro@8bytes.org, balbirs@nvidia.com, miko.lenczewski@arm.com, peterz@infradead.org, kevin.tian@intel.com, praan@google.com, linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, linux-kernel@vger.kernel.org Subject: Re: [PATCH v4 3/7] iommu/arm-smmu-v3: Introduce a per-domain arm_smmu_invs array Message-ID: <20251107194158.GB1932966@nvidia.com> References: Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: BL1PR13CA0238.namprd13.prod.outlook.com (2603:10b6:208:2bf::33) To MN2PR12MB3613.namprd12.prod.outlook.com (2603:10b6:208:c1::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MN2PR12MB3613:EE_|PH8PR12MB7280:EE_ X-MS-Office365-Filtering-Correlation-Id: afc48fb9-2583-443e-09bd-08de1e35b752 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Nlq45Ylt9ADmvigiyAOvcyxkpSltEmz+Slo61nMdJMvFiPxkfylDyotwh2Y2?= =?us-ascii?Q?LyhzGbjp/3o70stsJHrZiPtmeRWDBC07qyKkaZi1Dze6FhJ4Ljrf8I88MueR?= =?us-ascii?Q?irk2KAaQJs9qwZcUI86eGuETMNAv578klGdjgOR9Ih3yVb4b5z6+ROAk7YKL?= =?us-ascii?Q?mExXi85y5p+Sf9fcT2JiTNwrhGT1Gp/lJhNL2NMknMjYdFowXw+/Dafs8TLh?= =?us-ascii?Q?FrYyvyRH50RvhwXuu8zgw09uyo+/JtzLmunHN2Ehf/SFyh1lI5g2/qwV+bcx?= =?us-ascii?Q?dBDXDLjQ3vvdFXzaOcV4w6Otav/pTiuCdrTZRAdHbZ60228tfBJsjvxw7L+t?= =?us-ascii?Q?0SRB4cmw++o4qTcBCJm17sQAz9TbaJm/BTiNeQFOzBkaemvZz1DZFBxhe+TF?= =?us-ascii?Q?CddQowKMPSHN8XZlMSNi0OcSjyLjFWXbUBP+D7lJ7rFo5TFW5J4qm/PGb3cO?= =?us-ascii?Q?zQOMyU/sk8yyAYxMOmtwoa1iLkvIOM09ufbq8pHQx9IK1i60obUx5T8lGLSn?= =?us-ascii?Q?q5WvIMnZPbQqUPjg+KcQu6GHDobyJ8R+faDLFYomYfsh5js6rKhXc6Z+Wkr6?= =?us-ascii?Q?QYhinfW4LX6VI3ALaQ1/xiUT7M6b3PQf0ty1AgDMgBqvnhkOvXr1oNpGs3Go?= =?us-ascii?Q?aqXWeRda/FveGRPV6rF7AJoG4J8+CKBlV5DZxnWx2y0arog0kmMFEPlJl2n8?= =?us-ascii?Q?HK+Lqqo7xafoYPgAVGsPALGkUl0wpmpF4saKLgnqvWoSOB50ZUVCfZooQe6f?= =?us-ascii?Q?cyfBYgMaDG5sSY4LDUSmd8R6YQ9dCBRNaPMqUG+1h57MtwwPmgGyLxIVRkSB?= =?us-ascii?Q?tdv1InzE8FSNmkv3DGHZJZKZG8tmzFYLmKRsTCUDbr9Go0UdjgkuQGTGHyBM?= =?us-ascii?Q?pw0j+QaJC3tYlwyfjl7wWbgQ7/uxTFF7iva+2BdfTkQKW65jbZZqjpvZPD+s?= =?us-ascii?Q?ghwOBPU75XUwNDURk8z7gqqOyZNkmWbF6pypYd4UYWlLjLNr8XoAX1RBfrwl?= =?us-ascii?Q?aPSE2u6Bsct2yAi6eOjfiWQT3HSXMfawt+hwBzejTEaoZ7L/kF8ih7MNLMZu?= =?us-ascii?Q?yisIrIcyGpULoZuKiPmWaTpTgC7PvEDxWLJQNv8QGg1vvhrxMZZ1wBXBaeoi?= =?us-ascii?Q?F/xTNIwOgvFx2IbE8jtOqS3StmEjTsq+cu37xRI9iB/+SANZa3g1P5o1JJaZ?= =?us-ascii?Q?tcQ4FC2urqvS+nePYPAnosqLpX9xY8EDmopYqJKmRxbw7Eg8AMTC1XccTBcG?= =?us-ascii?Q?d8oA1Asj1vICeC0hUy22gx09+66PjnGGEAi3fIpmbJYtEuZxG4D0mPyjUpLW?= =?us-ascii?Q?HWoNCglGUle7aA22QKjICATF1ynkp8PQFGiL/sTp7Vqn4u/6rqXDlGKcYW3D?= =?us-ascii?Q?nvbJxEFqH6DgeHIifhBRFJbsMbmQooTDw56pyt4spq3r5zS4gomzlUtNttBN?= =?us-ascii?Q?Cu0fjTPUeCDfrO1RRLUFpUneYCQ/OsLt?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR12MB3613.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TLcYpZx3i0pWxFNTTAxib9+QhptW5q6QUdpaKc7pTYJgprs/ExL9pCj718h0?= =?us-ascii?Q?tSyQpwa/6sygJfitek/BOgq+HUu0ZmSIYWYvO6/4ABJ6/5A7R0M9WduP+MKs?= =?us-ascii?Q?TBBPkDovyOnhmmB/YyOWlw0T3JEfP4U1EdOhBAIexse6hmS52Qmya3FSC4W8?= =?us-ascii?Q?01nMex/b7ORU89e68D7nYthgEo+AMqfnRHJT39vlU2mEeFEOKO0jZMjnoNVW?= =?us-ascii?Q?EoIbI/8cXE/hpF6x/kAJXaWtKiSNjK/j0VdKxN6u8UTnpaDi4pvMO5w3ol/s?= =?us-ascii?Q?iVb1U75dbbAGX9MPhucNvjQNSTLvdAWw2x9AD5RQ9AIKkFZd3WrBXP1e8OVz?= =?us-ascii?Q?LSaoktI5Lgk/qXQ87kKBKm4oe4C06fLPJLDuYdXh6YOSPKh5xeE+bLvT9bc0?= =?us-ascii?Q?h2aoSmkwIq5BhkGMERQ1uPq4tXxOTq1MBedUafHtH1eZGikiDnRdTDfgOWfN?= =?us-ascii?Q?4pAPhNoVAvEXpjsljdHthJCG/bf2LH9GoadqbGnbTd31NlssegOxcHoquRK5?= =?us-ascii?Q?rtl0JZzU2U6AMNmnulMPcxdrRU7jB2qiQc2UoVPilXbNw1jSSzQcYSUNcWDE?= =?us-ascii?Q?8yHPXffaOx7M8oZMJFDdcq9eehzUuCtNDXGGvPyQwEFjbVzN6Qq7fX763waJ?= =?us-ascii?Q?6MJiWMCTYCNNkh3Q70A5MOYcjsp4h64n+UbiUyTFH+paCKW+laxzK5x/iC70?= =?us-ascii?Q?PxZD4ANM1ULwvmW5RMbFAqPM4sJ7zmn8AHSs2p0Or0W53OeaJvH8FiotKEf2?= =?us-ascii?Q?59dN9Cn4T7J2+wqMxUduZMhf8mGsO+49/024e13jdeKZ0DlqoBSxjDllWg+8?= =?us-ascii?Q?e49UYzMr+oTO4/kDofUcdFw1PxiGboSOU90e4FBpNjJ4DoFs4gtarGuKeasZ?= =?us-ascii?Q?gVZ7tx3TwTytLDGRylgIZgaT9Zam1V60hR8oBbv3rpFlFhMPI+t/ZInjTDrK?= =?us-ascii?Q?gq69vHMm1iZoqW6GGy4Ds9IA1YAqKqLb1mVAC8BwVDkvNy/2zpek8S4MEprJ?= =?us-ascii?Q?isYKM/AmpPEBfI1t6JrifgDZ722TIVU7UgY2k4C7guXn0T3sM8DumEnlJ1TN?= =?us-ascii?Q?4fj9j3AAQ5XRtmlyfpLUFHa4HtNgwndza21WAXFO2XKK8kKZKKPCZdv+XFTy?= =?us-ascii?Q?kdFbBf0izxVSzM+eYx9/Qn3GWuWIafX2+tjqO7zAeh7YzZuBskcDlQ1MIOFt?= =?us-ascii?Q?H8IWzgr+9L0nz2ilgohaTSAUJ12eWKSPTtQZh4F8Drfm2OTvLJsI2WSJe8bO?= =?us-ascii?Q?XzzZ1x+AL0pK0OH8H0wHwQ4tpEij2SMYmsoy8+SnN6c2IcQOsxgQznBvttJp?= =?us-ascii?Q?JZnPQa7AVLin4yE5y+bYIBGR52ZxCtGcaiuw6DOy/HPaNuPVpSnS0lpBR/SX?= =?us-ascii?Q?XwRZx2Uph9JidkzWK2cv3tyGlA1pYnNI0/ds9tnK0hS/gJnPO2j+Lhf4X8iC?= =?us-ascii?Q?k3SfVopqaQ9Bp2YhxlZhLIBMtQE8CWpKlKF5OvsPo0rldsqq9um29F3zIeIY?= =?us-ascii?Q?+sxCL//pQ+rRydwNIcSXXbAGfMo69SrwUIiLfwFE+SfDESWC06pXcp9SjhWN?= =?us-ascii?Q?l9IHVb70BgUKoCkvlO4=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: afc48fb9-2583-443e-09bd-08de1e35b752 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3613.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Nov 2025 19:41:59.3485 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6THDymQid7Ho9jN2HhajswRo9kjqstLdeDMFFD4PcBzUoC3nUzVD7wY7iET6Ck37 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB7280 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251107_114206_406119_990AA6DA X-CRM114-Status: GOOD ( 20.36 ) 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 On Mon, Oct 27, 2025 at 11:54:17AM -0700, Nicolin Chen wrote: > +struct arm_smmu_invs *arm_smmu_invs_merge(struct arm_smmu_invs *invs, > + struct arm_smmu_invs *to_merge) > +{ > + struct arm_smmu_invs *new_invs; > + struct arm_smmu_inv *new; > + size_t num_trashes = 0; > + size_t num_adds = 0; > + size_t i, j; > + > + for (i = j = 0; i != invs->num_invs || j != to_merge->num_invs;) { > + int cmp = arm_smmu_invs_cmp(invs, i, to_merge, j); > + > + /* Skip any unwanted trash entry */ > + if (cmp < 0 && !refcount_read(&invs->inv[i].users)) { Do we need cmp < 0 here and in all these other similar ifs? Can't we just fully ignore trash entries no matter how they cmopare to the other list? If cmp ==0 and we do num_trash++ then the next iteration will see j ass cmp > 1 so it will do num_adds++ and the two will cancel out. > + num_trashes++; > + i++; > + continue; > + } > + > + if (cmp < 0) { > + /* not found in to_merge, leave alone */ > + i++; > + } else if (cmp == 0) { > + /* same item */ > + i++; > + j++; > + } else { > + /* unique to to_merge */ > + num_adds++; > + j++; > + } > + } > + > + new_invs = arm_smmu_invs_alloc(invs->num_invs - num_trashes + num_adds); > + if (IS_ERR(new_invs)) > + return new_invs; > + > + new = new_invs->inv; > + for (i = j = 0; i != invs->num_invs || j != to_merge->num_invs;) { > + int cmp = arm_smmu_invs_cmp(invs, i, to_merge, j); > + > + if (cmp <= 0 && !refcount_read(&invs->inv[i].users)) { > + i++; > + continue; > + } > + > + if (cmp < 0) { > + *new = invs->inv[i]; > + i++; > + } else if (cmp == 0) { > + *new = invs->inv[i]; > + refcount_inc(&new->users); > + i++; > + j++; > + } else { > + *new = to_merge->inv[j]; > + refcount_set(&new->users, 1); > + j++; > + } > + > + if (new != new_invs->inv) > + WARN_ON_ONCE(arm_smmu_inv_cmp(new - 1, new) == 1); I'd add a little comment here: Check that the resulting list is sorted, this also checks that to_merge is sorted. > static inline void arm_smmu_domain_free(struct arm_smmu_domain *smmu_domain) > { > + kfree_rcu(rcu_dereference_protected(smmu_domain->invs, true), rcu); It is working as is, but maybe a small comment No concurrency with invalidation is possible at this point And you can just use kfree instead of kfree_rcu. When the domain is destroyed the caller has to guarentee it isn't calling map/unmap/etc anymore from any parallel threds or it will UAF. So we know there can be, and will never be, no concurrent read side cricitical regions on the RCU. Reviewed-by: Jason Gunthorpe Jason