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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EED6DC05027 for ; Fri, 10 Feb 2023 15:07:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232160AbjBJPHI (ORCPT ); Fri, 10 Feb 2023 10:07:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34470 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231874AbjBJPHG (ORCPT ); Fri, 10 Feb 2023 10:07:06 -0500 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 132A5211E7; Fri, 10 Feb 2023 07:06:43 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id 7CFF2CE277C; Fri, 10 Feb 2023 15:06:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id BFD07C433EF; Fri, 10 Feb 2023 15:06:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1676041599; bh=eWmjVbXsukdLgJ7Kgr8ptABU8UpeBzpCUjII2j9Sisk=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=sw3qZgbse+nlMohjzKSGUOFHwiET+0CzHIQiV9QCGxVY/m8K6wlvqPaKeS71vFWDh ocxwvoqQsI08JXk7HivB2m0ubLN5oo2PYf6ma2fPvMFRRnOzXRVdiqQgPQRzRKZ5yX 878upQnO9tcbiHgFjyS/JQcjpTWfoj5DGrqu6l2tJt/xs/zBYZr2crz5idRv96zHGt t8hP1oyLBNcR9AaAxar1rLqxCqKAGMRob+RdJWdaocPUgYJKsnb5b9WaBB1wUJ7wwx VsO7JtvHMH9YBBlIACiXC8SzdVr9ho1rSGz+JqPViBq5v3mLTG1ZnZjagQxgp+RAhv dmhYhJjVgx8iw== Received: from sofa.misterjones.org ([185.219.108.64] helo=goblin-girl.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pQUyz-009IeY-G3; Fri, 10 Feb 2023 15:06:37 +0000 Date: Fri, 10 Feb 2023 15:06:37 +0000 Message-ID: <868rh5zhj6.wl-maz@kernel.org> From: Marc Zyngier To: Johan Hovold Cc: Johan Hovold , Thomas Gleixner , x86@kernel.org, platform-driver-x86@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, Hsin-Yi Wang , Mark-PK Tsai Subject: Re: [PATCH v5 19/19] irqdomain: Switch to per-domain locking In-Reply-To: References: <20230209132323.4599-1-johan+linaro@kernel.org> <20230209132323.4599-20-johan+linaro@kernel.org> <86cz6izv48.wl-maz@kernel.org> <86bkm1zr59.wl-maz@kernel.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.2 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: johan@kernel.org, johan+linaro@kernel.org, tglx@linutronix.de, x86@kernel.org, platform-driver-x86@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, hsinyi@chromium.org, mark-pk.tsai@mediatek.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 10 Feb 2023 12:57:40 +0000, Johan Hovold wrote: > > On Fri, Feb 10, 2023 at 11:38:58AM +0000, Marc Zyngier wrote: > > On Fri, 10 Feb 2023 09:56:03 +0000, > > Johan Hovold wrote: > > > > > > On Thu, Feb 09, 2023 at 04:00:55PM +0000, Marc Zyngier wrote: > > > > On Thu, 09 Feb 2023 13:23:23 +0000, > > > > Johan Hovold wrote: > > > > I went back and forth over that a bit, but decided to only use > > > domain->root->mutex in paths that can be called for hierarchical > > > domains (i.e. the "shared code paths" mentioned above). > > > > > > Using it in paths that are clearly only called for non-hierarchical > > > domains where domain->root == domain felt a bit lazy. > > > > My concern here is that as this code gets further refactored, it may > > become much harder to reason about what is the correct level of > > locking. > > Yeah, that's conceivable. > > > > The counter argument is of course that using domain->root->lock allows > > > people to think less about the code they are changing, but that's not > > > necessarily always a good thing. > > > > Eventually, non-hierarchical domains should simply die and be replaced > > with a single level hierarchy. Having a unified locking in place will > > definitely make the required work clearer. > > > > > Also note that the lockdep asserts in the revmap helpers would catch > > > anyone using domain->mutex where they should not (i.e. using > > > domain->mutex for an hierarchical domain). > > > > Lockdep is great, but lockdep is a runtime thing. It doesn't help > > reasoning about what gets locked when changing this code. > > Contributers are expected to test their changes with lockdep enabled, > right? > > But sure, using root->domain->mutex throughout may prevent prevent > people from getting this wrong. > > I'll update this for v6. > > > > > > @@ -1132,6 +1147,7 @@ struct irq_domain *irq_domain_create_hierarchy(struct irq_domain *parent, > > > > > else > > > > > domain = irq_domain_create_tree(fwnode, ops, host_data); > > > > > if (domain) { > > > > > + domain->root = parent->root; > > > > > domain->parent = parent; > > > > > domain->flags |= flags; > > > > > > > > So we still have a bug here, as we have published a domain that we > > > > keep updating. A parallel probing could find it in the interval and do > > > > something completely wrong. > > > > > > Indeed we do, even if device links should make this harder to hit these > > > days. > > > > > > > Splitting the work would help, as per the following patch. > > > > > > Looks good to me. Do you want to submit that as a patch that I'll rebase > > > on or should I submit it as part of a v6? > > > > Just take it directly. > > Ok, thanks. > > I guess this turns the "Use irq_domain_create_hierarchy()" patches into > fixes that should be backported as well. Maybe. Backports are not my immediate concern. > But note that your proposed diff may not be sufficient to prevent > lookups from racing with domain registration generally. Many drivers > still update the bus token after the domain has been added (and > apparently some still set flags also after creating hierarchies I just > noticed, e.g. amd_iommu_create_irq_domain). The bus token should only rarely be a problem, as it is often set on an intermediate level which isn't directly looked-up by anything else. And if it did happen, it would probably result in a the domain not being found. Flags, on the other hand, are more problematic. But I consider this a driver bug which should be fixed independently. > It seems we'd need to expose a separate allocation and registration > interface, or at least pass in the bus token to a new combined > interface. Potentially, yes. But this could come later down the line. I'm more concerned in getting this series into -next, as the merge window is fast approaching. Thanks, M. -- Without deviation from the norm, progress is not possible.