From: Marc Zyngier <maz@kernel.org>
To: Johan Hovold <johan+linaro@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Rob Herring <robh@kernel.org>,
linux-kernel@vger.kernel.org, Dmitry Torokhov <dtor@chromium.org>,
Jon Hunter <jonathanh@nvidia.com>
Subject: Re: [PATCH v2 2/4] irqdomain: Fix mapping-creation race
Date: Thu, 15 Sep 2022 09:54:25 +0100 [thread overview]
Message-ID: <87v8ppkofy.wl-maz@kernel.org> (raw)
In-Reply-To: <20220901142816.13731-3-johan+linaro@kernel.org>
Johan,
On Thu, 01 Sep 2022 15:28:14 +0100,
Johan Hovold <johan+linaro@kernel.org> wrote:
>
> 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 drivers")
> Fixes: b62b2cf5759b ("irqdomain: Fix handling of type settings for existing mappings")
> Cc: Dmitry Torokhov <dtor@chromium.org>
> Cc: Jon Hunter <jonathanh@nvidia.com>
> Link: https://lore.kernel.org/r/YuJXMHoT4ijUxnRb@hovoldconsulting.com
> Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
> ---
> 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. Pretty easy
> @@ -168,6 +169,7 @@ struct irq_domain {
> void *host_data;
> unsigned int flags;
> unsigned int mapcount;
> + struct mutex map_mutex;
>
> /* 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_handle *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 = ops;
> domain->host_data = host_data;
> domain->hwirq_max = hwirq_max;
> @@ -721,14 +722,20 @@ unsigned int irq_create_mapping_affinity(struct irq_domain *domain,
> return 0;
> }
>
> + mutex_lock(&domain->map_mutex);
> +
I must confess I have a hard time figuring out the semantic difference
between map_mutex and revmap_mutex. or rather, what is the use of
revmap_mutex once map_mutex is taken. They fundamentally overlap, and
I have the feeling one should eventually replace the other.
If anything, you should absolutely define/document how these two locks
interact.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
next prev parent reply other threads:[~2022-09-15 8:54 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-01 14:28 [PATCH v2 0/4] irqdomain: Fix mapping-creation race Johan Hovold
2022-09-01 14:28 ` [PATCH v2 1/4] irqdomain: Look for existing mapping only once Johan Hovold
2022-09-01 14:28 ` [PATCH v2 2/4] irqdomain: Fix mapping-creation race Johan Hovold
2022-09-15 8:54 ` Marc Zyngier [this message]
2022-12-09 14:18 ` Johan Hovold
2022-09-01 14:28 ` [PATCH v2 3/4] irqdomain: Fix domain-association race Johan Hovold
2022-09-01 14:28 ` [PATCH v2 4/4] irqdomain: use per-domain mutex for associations Johan Hovold
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87v8ppkofy.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=dtor@chromium.org \
--cc=gregkh@linuxfoundation.org \
--cc=johan+linaro@kernel.org \
--cc=jonathanh@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=robh@kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.