From nobody Fri Sep 12 04:10:17 2025 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 9EB6EC0502C for ; Thu, 1 Sep 2022 14:29:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234814AbiIAO2m (ORCPT ); Thu, 1 Sep 2022 10:28:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234564AbiIAO2Z (ORCPT ); Thu, 1 Sep 2022 10:28:25 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 76CD25A2D3 for ; Thu, 1 Sep 2022 07:28:24 -0700 (PDT) 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 ams.source.kernel.org (Postfix) with ESMTPS id EA46EB826FD for ; Thu, 1 Sep 2022 14:28:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8130DC433B5; Thu, 1 Sep 2022 14:28:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1662042501; bh=LnBC3fB2mOYhP4NE61cF3t75q8/+srAg40Zl2RdR5/8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BNaD/QCLRTi4LB8IXBn+4/5amiei1i/oUyQUJ6WLvMtSWxfFNzmc/uaT1VvmzjEVQ mHn/2EY8np9F9fkh0xpvgl4wXgV7X5laTqCblYVu42WdNbh7XDntxS4WxSK5PoXW7h vLugoSETaF2L8zmBwhRvVFER4nKRZGeEEH5H4gqmE+vOEhJ7Dop3z8k821PUE9Qh+l +TlFmChYrd99yRfRW7a4EJoLYe1vWDyiO+Ahg3G5DG0zN6foYg56r0scM0Fk8JaSd0 lPywSLc0WlbGVPRn3UrZSQwuUcSj919ypJkPbDCF10tTu9NhkM7t/odPUyhwf6Qx2P XprM/kH4tJ2eA== Received: from johan by xi.lan with local (Exim 4.94.2) (envelope-from ) id 1oTlB8-0003Zo-Sl; Thu, 01 Sep 2022 16:28:22 +0200 From: Johan Hovold To: Marc Zyngier Cc: Thomas Gleixner , Greg Kroah-Hartman , Rob Herring , linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH v2 1/4] irqdomain: Look for existing mapping only once Date: Thu, 1 Sep 2022 16:28:13 +0200 Message-Id: <20220901142816.13731-2-johan+linaro@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220901142816.13731-1-johan+linaro@kernel.org> References: <20220901142816.13731-1-johan+linaro@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Avoid looking for an existing mapping twice when creating a new mapping using irq_create_fwspec_mapping() by factoring out the actual allocation which is shared with irq_create_mapping_affinity(). Signed-off-by: Johan Hovold --- kernel/irq/irqdomain.c | 60 +++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 8fe1da9614ee..24ddd8d9b597 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -668,6 +668,34 @@ unsigned int irq_create_direct_mapping(struct irq_doma= in *domain) EXPORT_SYMBOL_GPL(irq_create_direct_mapping); #endif =20 +static unsigned int __irq_create_mapping_affinity(struct irq_domain *domai= n, + irq_hw_number_t hwirq, + const struct irq_affinity_desc *affinity) +{ + struct device_node *of_node =3D irq_domain_get_of_node(domain); + int virq; + + pr_debug("irq_create_mapping(0x%p, 0x%lx)\n", domain, hwirq); + + /* Allocate a virtual interrupt number */ + virq =3D irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node), + affinity); + if (virq <=3D 0) { + pr_debug("-> virq allocation failed\n"); + return 0; + } + + if (irq_domain_associate(domain, virq, hwirq)) { + irq_free_desc(virq); + return 0; + } + + pr_debug("irq %lu on domain %s mapped to virtual irq %u\n", + hwirq, of_node_full_name(of_node), virq); + + return virq; +} + /** * irq_create_mapping_affinity() - Map a hardware interrupt into linux irq= space * @domain: domain owning this hardware interrupt or NULL for default doma= in @@ -680,14 +708,11 @@ EXPORT_SYMBOL_GPL(irq_create_direct_mapping); * on the number returned from that call. */ unsigned int irq_create_mapping_affinity(struct irq_domain *domain, - irq_hw_number_t hwirq, - const struct irq_affinity_desc *affinity) + irq_hw_number_t hwirq, + const struct irq_affinity_desc *affinity) { - struct device_node *of_node; int virq; =20 - pr_debug("irq_create_mapping(0x%p, 0x%lx)\n", domain, hwirq); - /* Look for default domain if necessary */ if (domain =3D=3D NULL) domain =3D irq_default_domain; @@ -695,34 +720,15 @@ unsigned int irq_create_mapping_affinity(struct irq_d= omain *domain, WARN(1, "%s(, %lx) called with NULL domain\n", __func__, hwirq); return 0; } - pr_debug("-> using domain @%p\n", domain); - - of_node =3D irq_domain_get_of_node(domain); =20 /* Check if mapping already exists */ virq =3D irq_find_mapping(domain, hwirq); if (virq) { - pr_debug("-> existing mapping on virq %d\n", virq); + pr_debug("existing mapping on virq %d\n", virq); return virq; } =20 - /* Allocate a virtual interrupt number */ - virq =3D irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node), - affinity); - if (virq <=3D 0) { - pr_debug("-> virq allocation failed\n"); - return 0; - } - - if (irq_domain_associate(domain, virq, hwirq)) { - irq_free_desc(virq); - return 0; - } - - pr_debug("irq %lu on domain %s mapped to virtual irq %u\n", - hwirq, of_node_full_name(of_node), virq); - - return virq; + return __irq_create_mapping_affinity(domain, hwirq, affinity); } EXPORT_SYMBOL_GPL(irq_create_mapping_affinity); =20 @@ -827,7 +833,7 @@ unsigned int irq_create_fwspec_mapping(struct irq_fwspe= c *fwspec) return 0; } else { /* Create mapping */ - virq =3D irq_create_mapping(domain, hwirq); + virq =3D __irq_create_mapping_affinity(domain, hwirq, NULL); if (!virq) return virq; } --=20 2.35.1 From nobody Fri Sep 12 04:10:17 2025 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 9F4FEECAAD1 for ; Thu, 1 Sep 2022 14:28:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234669AbiIAO2a (ORCPT ); Thu, 1 Sep 2022 10:28:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36170 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233348AbiIAO2Y (ORCPT ); Thu, 1 Sep 2022 10:28:24 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D76132D93 for ; Thu, 1 Sep 2022 07:28:22 -0700 (PDT) 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 dfw.source.kernel.org (Postfix) with ESMTPS id 33A3061D10 for ; Thu, 1 Sep 2022 14:28:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 86CF3C4347C; Thu, 1 Sep 2022 14:28:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1662042501; bh=6H3NdcsF1XZsaJlgrF7qf48qrgCNTKj+8GVztoNi+DY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SRIe1LiMDcg/qzTXHySXOgir56mX854wgQ2iVmmj977mh+JHZcizucJ9xtRu5KwKp qLxipWU0PGjGCNolfAgOBrWkTyznYyEn5C96bOB7K3FyPZxf3DZhy8qaBYR73y/92E MyXG6g1ekf+16rKJ3IXfxdGkOsPhDgSkdUxLkNdUEQwtbjlFpIlX2AC3PYx/6Unudu qvDXPY4vgQHz0pX1BidYiaxZNXyRUaM+hn71cQuE/jJe83qw10jpONdDFeKkWl0Y3/ wkBHglpYCvP9Sa6toiuv4E4MLlUdTcq09U89qsafQFcL/fXviTceuqcNDi9OlWDFnd cp/aLqiUROoJg== Received: from johan by xi.lan with local (Exim 4.94.2) (envelope-from ) id 1oTlB8-0003Zq-VK; Thu, 01 Sep 2022 16:28:22 +0200 From: Johan Hovold To: Marc Zyngier Cc: Thomas Gleixner , Greg Kroah-Hartman , Rob Herring , linux-kernel@vger.kernel.org, Johan Hovold , Dmitry Torokhov , Jon Hunter Subject: [PATCH v2 2/4] irqdomain: Fix mapping-creation race Date: Thu, 1 Sep 2022 16:28:14 +0200 Message-Id: <20220901142816.13731-3-johan+linaro@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220901142816.13731-1-johan+linaro@kernel.org> References: <20220901142816.13731-1-johan+linaro@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Parallel probing (e.g. due to asynchronous probing) of devices that share interrupts can currently result in two mappings for the same hardware interrupt to be created. Add a serialising mapping mutex so that looking for an existing mapping before creating a new one is done atomically. Fixes: 765230b5f084 ("driver-core: add asynchronous probing support for dri= vers") Fixes: b62b2cf5759b ("irqdomain: Fix handling of type settings for existing= mappings") Cc: Dmitry Torokhov Cc: Jon Hunter Link: https://lore.kernel.org/r/YuJXMHoT4ijUxnRb@hovoldconsulting.com Signed-off-by: Johan Hovold --- include/linux/irqdomain.h | 2 ++ kernel/irq/irqdomain.c | 33 ++++++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h index 00d577f90883..8df9b9586e29 100644 --- a/include/linux/irqdomain.h +++ b/include/linux/irqdomain.h @@ -144,6 +144,7 @@ struct irq_domain_chip_generic; * core code. * @flags: host per irq_domain flags * @mapcount: The number of mapped interrupts + * @map_mutex: Mapping lock * * Optional elements * @fwnode: Pointer to firmware node associated with the irq_domain. Prett= y easy @@ -168,6 +169,7 @@ struct irq_domain { void *host_data; unsigned int flags; unsigned int mapcount; + struct mutex map_mutex; =20 /* Optional data */ struct fwnode_handle *fwnode; diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 24ddd8d9b597..1af1d141e165 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -215,6 +215,7 @@ struct irq_domain *__irq_domain_add(struct fwnode_handl= e *fwnode, unsigned int s /* Fill structure */ INIT_RADIX_TREE(&domain->revmap_tree, GFP_KERNEL); mutex_init(&domain->revmap_mutex); + mutex_init(&domain->map_mutex); domain->ops =3D ops; domain->host_data =3D host_data; domain->hwirq_max =3D hwirq_max; @@ -721,14 +722,20 @@ unsigned int irq_create_mapping_affinity(struct irq_d= omain *domain, return 0; } =20 + mutex_lock(&domain->map_mutex); + /* Check if mapping already exists */ virq =3D irq_find_mapping(domain, hwirq); if (virq) { pr_debug("existing mapping on virq %d\n", virq); - return virq; + goto out; } =20 - return __irq_create_mapping_affinity(domain, hwirq, affinity); + virq =3D __irq_create_mapping_affinity(domain, hwirq, affinity); +out: + mutex_unlock(&domain->map_mutex); + + return virq; } EXPORT_SYMBOL_GPL(irq_create_mapping_affinity); =20 @@ -795,6 +802,8 @@ unsigned int irq_create_fwspec_mapping(struct irq_fwspe= c *fwspec) if (WARN_ON(type & ~IRQ_TYPE_SENSE_MASK)) type &=3D IRQ_TYPE_SENSE_MASK; =20 + mutex_lock(&domain->map_mutex); + /* * If we've already configured this interrupt, * don't do it again, or hell will break loose. @@ -807,7 +816,7 @@ unsigned int irq_create_fwspec_mapping(struct irq_fwspe= c *fwspec) * interrupt number. */ if (type =3D=3D IRQ_TYPE_NONE || type =3D=3D irq_get_trigger_type(virq)) - return virq; + goto out; =20 /* * If the trigger type has not been set yet, then set @@ -816,26 +825,26 @@ unsigned int irq_create_fwspec_mapping(struct irq_fws= pec *fwspec) if (irq_get_trigger_type(virq) =3D=3D IRQ_TYPE_NONE) { irq_data =3D irq_get_irq_data(virq); if (!irq_data) - return 0; + goto err; =20 irqd_set_trigger_type(irq_data, type); - return virq; + goto out; } =20 pr_warn("type mismatch, failed to map hwirq-%lu for %s!\n", hwirq, of_node_full_name(to_of_node(fwspec->fwnode))); - return 0; + goto err; } =20 if (irq_domain_is_hierarchy(domain)) { virq =3D irq_domain_alloc_irqs(domain, 1, NUMA_NO_NODE, fwspec); if (virq <=3D 0) - return 0; + goto err; } else { /* Create mapping */ virq =3D __irq_create_mapping_affinity(domain, hwirq, NULL); if (!virq) - return virq; + goto err; } =20 irq_data =3D irq_get_irq_data(virq); @@ -844,13 +853,19 @@ unsigned int irq_create_fwspec_mapping(struct irq_fws= pec *fwspec) irq_domain_free_irqs(virq, 1); else irq_dispose_mapping(virq); - return 0; + goto err; } =20 /* Store trigger type */ irqd_set_trigger_type(irq_data, type); +out: + mutex_unlock(&domain->map_mutex); =20 return virq; +err: + mutex_unlock(&domain->map_mutex); + + return 0; } EXPORT_SYMBOL_GPL(irq_create_fwspec_mapping); =20 --=20 2.35.1 From nobody Fri Sep 12 04:10:17 2025 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 34B13ECAAD1 for ; Thu, 1 Sep 2022 14:28:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234611AbiIAO20 (ORCPT ); Thu, 1 Sep 2022 10:28:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36168 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229781AbiIAO2X (ORCPT ); Thu, 1 Sep 2022 10:28:23 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4DF305A2D3 for ; Thu, 1 Sep 2022 07:28:22 -0700 (PDT) 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 dfw.source.kernel.org (Postfix) with ESMTPS id 1850E61D0C for ; Thu, 1 Sep 2022 14:28:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 70B3BC433C1; Thu, 1 Sep 2022 14:28:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1662042501; bh=gu2akoPgYWzpicAL/pzg4dqNYqYhVCGE9d7HIK3+bcA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=n5IOoG6JwbWKl2iQZZNH9mEcv6LS/o8JQXfchSR0sLqknX6MA20hEsUt0rCcXMQMK iouIaw/5tombY2bwj9mSw8ZezY530FESbdgTaOLd6ax0pa5RTcv1lhPXPf1kVWJGBw ZhoC90NocFZzXmnxpcgubcGzW2dbcBL5sdgjjSiQG/SGTSDEPybIq0gbi/DOYNCtej kKPEu50HuQOvkJt00vfEogfN1ZwPu2HmH0VMyF2cDAQFkIT/KHjjSXg9lZPMjW6+Rw 0J4MQhD3pbVvsBCMAp8eMHQBpo23txlIS7ysYJuInn/o5NGAHCbHjOdfZibFgUVqRV IClj412A+wQrQ== Received: from johan by xi.lan with local (Exim 4.94.2) (envelope-from ) id 1oTlB9-0003Zs-1a; Thu, 01 Sep 2022 16:28:23 +0200 From: Johan Hovold To: Marc Zyngier Cc: Thomas Gleixner , Greg Kroah-Hartman , Rob Herring , linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH v2 3/4] irqdomain: Fix domain-association race Date: Thu, 1 Sep 2022 16:28:15 +0200 Message-Id: <20220901142816.13731-4-johan+linaro@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220901142816.13731-1-johan+linaro@kernel.org> References: <20220901142816.13731-1-johan+linaro@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The check for an already mapped virq was done outside of the irq_domain_mutex-protected section which meant that an (unlikely) racing association may not be detected. Fix this by factoring out the association implementation, which will also be used in follow-on changes to clean up the locking. Fixes: ddaf144c61da ("irqdomain: Refactor irq_domain_associate_many()") Signed-off-by: Johan Hovold --- kernel/irq/irqdomain.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 1af1d141e165..9f3203e180c5 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -560,8 +560,8 @@ static void irq_domain_disassociate(struct irq_domain *= domain, unsigned int irq) irq_domain_clear_mapping(domain, hwirq); } =20 -int irq_domain_associate(struct irq_domain *domain, unsigned int virq, - irq_hw_number_t hwirq) +static int __irq_domain_associate(struct irq_domain *domain, unsigned int = virq, + irq_hw_number_t hwirq) { struct irq_data *irq_data =3D irq_get_irq_data(virq); int ret; @@ -574,7 +574,6 @@ int irq_domain_associate(struct irq_domain *domain, uns= igned int virq, if (WARN(irq_data->domain, "error: virq%i is already associated", virq)) return -EINVAL; =20 - mutex_lock(&irq_domain_mutex); irq_data->hwirq =3D hwirq; irq_data->domain =3D domain; if (domain->ops->map) { @@ -591,7 +590,6 @@ int irq_domain_associate(struct irq_domain *domain, uns= igned int virq, } irq_data->domain =3D NULL; irq_data->hwirq =3D 0; - mutex_unlock(&irq_domain_mutex); return ret; } =20 @@ -602,12 +600,23 @@ int irq_domain_associate(struct irq_domain *domain, u= nsigned int virq, =20 domain->mapcount++; irq_domain_set_mapping(domain, hwirq, irq_data); - mutex_unlock(&irq_domain_mutex); =20 irq_clear_status_flags(virq, IRQ_NOREQUEST); =20 return 0; } + +int irq_domain_associate(struct irq_domain *domain, unsigned int virq, + irq_hw_number_t hwirq) +{ + int ret; + + mutex_lock(&irq_domain_mutex); + ret =3D __irq_domain_associate(domain, virq, hwirq); + mutex_unlock(&irq_domain_mutex); + + return ret; +} EXPORT_SYMBOL_GPL(irq_domain_associate); =20 void irq_domain_associate_many(struct irq_domain *domain, unsigned int irq= _base, --=20 2.35.1 From nobody Fri Sep 12 04:10:17 2025 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 DD9B2ECAAD1 for ; Thu, 1 Sep 2022 14:28:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234684AbiIAO2c (ORCPT ); Thu, 1 Sep 2022 10:28:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233856AbiIAO2Y (ORCPT ); Thu, 1 Sep 2022 10:28:24 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 14BB72B60F for ; Thu, 1 Sep 2022 07:28:24 -0700 (PDT) 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 ams.source.kernel.org (Postfix) with ESMTPS id BC01DB8274C for ; Thu, 1 Sep 2022 14:28:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7A59FC433D6; Thu, 1 Sep 2022 14:28:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1662042501; bh=KeVQMW/jzqn+YDQ+gpJVMN2ue0rhR1eGWQBtG7/NbrE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pI3n0Lrpto/7VCyVzJ4GZdYYs/xT5xoKmLzHHrTnn0ksHCKGDv4OgjpnfI6NcyU83 2+uYWQaR5OsyPti51CnvxqVorO5Ev/DfYrX4FwcBLU6Wj37Ujf2BnXjsyxSbQYx+5k AvCc75is62NGNEPRS83UK6t6eDs4LOyU/98kue8lrFuX9dUhzM7SLvpXvFRGQKjue8 USlA6BhrZT4FB4SIeFsJzNkaneNAykhOd9d1ErNjQaxkCRfP+/Ixu3Ei8WK7mfLZlD LjEealQySXRF0FoUIRmT0HUmidwyp+pIbrTwVcQVyobalomphwB1RozgqMtJU068Rh vsvH/B5mMYeYw== Received: from johan by xi.lan with local (Exim 4.94.2) (envelope-from ) id 1oTlB9-0003Zu-3x; Thu, 01 Sep 2022 16:28:23 +0200 From: Johan Hovold To: Marc Zyngier Cc: Thomas Gleixner , Greg Kroah-Hartman , Rob Herring , linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH v2 4/4] irqdomain: use per-domain mutex for associations Date: Thu, 1 Sep 2022 16:28:16 +0200 Message-Id: <20220901142816.13731-5-johan+linaro@kernel.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220901142816.13731-1-johan+linaro@kernel.org> References: <20220901142816.13731-1-johan+linaro@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Use the new per-domain map mutex instead of the global domain mutex for associations, something which may potentially speed up parallel probing somewhat. Note that the global domain mutex is still used for hierarchical domains. Signed-off-by: Johan Hovold --- kernel/irq/irqdomain.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index 9f3203e180c5..7009ef30c09e 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -611,9 +611,9 @@ int irq_domain_associate(struct irq_domain *domain, uns= igned int virq, { int ret; =20 - mutex_lock(&irq_domain_mutex); + mutex_lock(&domain->map_mutex); ret =3D __irq_domain_associate(domain, virq, hwirq); - mutex_unlock(&irq_domain_mutex); + mutex_unlock(&domain->map_mutex); =20 return ret; } @@ -695,7 +695,7 @@ static unsigned int __irq_create_mapping_affinity(struc= t irq_domain *domain, return 0; } =20 - if (irq_domain_associate(domain, virq, hwirq)) { + if (__irq_domain_associate(domain, virq, hwirq)) { irq_free_desc(virq); return 0; } --=20 2.35.1