From: Grant Likely <grant.likely@secretlab.ca>
To: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Bjorn Helgaas <bhelgaas@google.com>,
linux-pci@vger.kernel.org, Russell King <linux@arm.linux.org.uk>,
Rob Herring <rob.herring@calxeda.com>,
Thomas Gleixner <tglx@linutronix.de>,
Jason Cooper <jason@lakedaemon.net>, Andrew Lunn <andrew@lunn.ch>,
Gregory Clement <gregory.clement@free-electrons.com>
Cc: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>,
linux-arm-kernel@lists.infradead.org,
Maen Suleiman <maen@marvell.com>,
Lior Amsalem <alior@marvell.com>,
Thierry Reding <thierry.reding@gmail.com>
Subject: Re: [PATCHv5 01/11] irqdomain: add irq_alloc_mapping() function
Date: Sat, 27 Jul 2013 22:11:26 -0600 [thread overview]
Message-ID: <20130728041127.068613E08F8@localhost> (raw)
In-Reply-To: <1373889167-27878-2-git-send-email-thomas.petazzoni@free-electrons.com>
On Mon, 15 Jul 2013 13:52:37 +0200, Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote:
> This commit extends the irqdomain subsystem with an
> irq_alloc_mapping() function which allows to let the irqdomain code
> find an available hwirq number in the range [ 0 ; domain size ] for
> the given domain, and create a virq mapping for it.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
> include/linux/irqdomain.h | 2 ++
> kernel/irq/irqdomain.c | 32 ++++++++++++++++++++++++++++++++
> 2 files changed, 34 insertions(+)
>
> diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
> index c983ed1..1ffa336 100644
> --- a/include/linux/irqdomain.h
> +++ b/include/linux/irqdomain.h
> @@ -195,6 +195,8 @@ static inline unsigned int irq_linear_revmap(struct irq_domain *domain,
> extern unsigned int irq_find_mapping(struct irq_domain *host,
> irq_hw_number_t hwirq);
> extern unsigned int irq_create_direct_mapping(struct irq_domain *host);
> +extern unsigned int irq_alloc_mapping(struct irq_domain *host,
> + irq_hw_number_t *hwirq);
> extern int irq_create_strict_mappings(struct irq_domain *domain,
> unsigned int irq_base,
> irq_hw_number_t hwirq_base, int count);
> diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
> index 706724e..b9ddb94 100644
> --- a/kernel/irq/irqdomain.c
> +++ b/kernel/irq/irqdomain.c
> @@ -375,6 +375,38 @@ unsigned int irq_create_direct_mapping(struct irq_domain *domain)
> EXPORT_SYMBOL_GPL(irq_create_direct_mapping);
>
> /**
> + * irq_alloc_mapping() - Allocate an irq for mapping
> + * @domain: domain to allocate the irq for or NULL for default domain
> + * @hwirq: reference to the returned hwirq
> + *
> + * This routine are used for irq controllers which can choose the
> + * hardware interrupt number from a range [ 0 ; domain size ], such as
> + * is often the case with PCI MSI controllers. The function will
> + * returned the allocated hwirq number in the hwirq pointer, and the
> + * corresponding virq number as the return value.
> + */
> +unsigned int irq_alloc_mapping(struct irq_domain *domain,
> + irq_hw_number_t *out_hwirq)
> +{
> + irq_hw_number_t hwirq;
> +
> + pr_debug("irq_alloc_mapping(0x%p)\n", domain);
> +
> + for (hwirq = 0; hwirq < domain->hwirq_max; hwirq++)
> + if (!irq_find_mapping(domain, hwirq))
> + break;
Okay, you can add my acked-by, but only if you change the above hunk to:
for (hwirq = 0; hwirq < domain->revmap_size; hwirq++)
if (domain->linear_revmap[hwirq] == 0)
break;
In some cases hwirq_max will be set to ~0, which means calling
irq_find_mapping about 4 billion times. Not safe. The above change
prevents that problem, but it also means the function won't work for the
tree map. A followup patch can be crafted to add support for the tree
mapping.
> +
> + if (hwirq == domain->hwirq_max) {
> + pr_debug("-> no available hwirq found\n");
> + return 0;
> + }
> +
> + *out_hwirq = hwirq;
> + return irq_create_mapping(domain, hwirq);
out_hwirq should *not* be modified if irq_create_mapping fails. You'll
need to rework the above to:
rc = irq_create_mapping(domain, hwirq);
if (rc)
*out_hwirq = hwirq;
return rc;
When the above two issues are fixed:
Acked-by: Grant Likely <grant.likely@linaro.org>
> +}
> +EXPORT_SYMBOL_GPL(irq_alloc_mapping);
> +
> +/**
> * irq_create_mapping() - Map a hardware interrupt into linux irq space
> * @domain: domain owning this hardware interrupt or NULL for default domain
> * @hwirq: hardware irq number in that domain space
> --
> 1.8.1.2
>
WARNING: multiple messages have this Message-ID (diff)
From: grant.likely@secretlab.ca (Grant Likely)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv5 01/11] irqdomain: add irq_alloc_mapping() function
Date: Sat, 27 Jul 2013 22:11:26 -0600 [thread overview]
Message-ID: <20130728041127.068613E08F8@localhost> (raw)
In-Reply-To: <1373889167-27878-2-git-send-email-thomas.petazzoni@free-electrons.com>
On Mon, 15 Jul 2013 13:52:37 +0200, Thomas Petazzoni <thomas.petazzoni@free-electrons.com> wrote:
> This commit extends the irqdomain subsystem with an
> irq_alloc_mapping() function which allows to let the irqdomain code
> find an available hwirq number in the range [ 0 ; domain size ] for
> the given domain, and create a virq mapping for it.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
> include/linux/irqdomain.h | 2 ++
> kernel/irq/irqdomain.c | 32 ++++++++++++++++++++++++++++++++
> 2 files changed, 34 insertions(+)
>
> diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
> index c983ed1..1ffa336 100644
> --- a/include/linux/irqdomain.h
> +++ b/include/linux/irqdomain.h
> @@ -195,6 +195,8 @@ static inline unsigned int irq_linear_revmap(struct irq_domain *domain,
> extern unsigned int irq_find_mapping(struct irq_domain *host,
> irq_hw_number_t hwirq);
> extern unsigned int irq_create_direct_mapping(struct irq_domain *host);
> +extern unsigned int irq_alloc_mapping(struct irq_domain *host,
> + irq_hw_number_t *hwirq);
> extern int irq_create_strict_mappings(struct irq_domain *domain,
> unsigned int irq_base,
> irq_hw_number_t hwirq_base, int count);
> diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
> index 706724e..b9ddb94 100644
> --- a/kernel/irq/irqdomain.c
> +++ b/kernel/irq/irqdomain.c
> @@ -375,6 +375,38 @@ unsigned int irq_create_direct_mapping(struct irq_domain *domain)
> EXPORT_SYMBOL_GPL(irq_create_direct_mapping);
>
> /**
> + * irq_alloc_mapping() - Allocate an irq for mapping
> + * @domain: domain to allocate the irq for or NULL for default domain
> + * @hwirq: reference to the returned hwirq
> + *
> + * This routine are used for irq controllers which can choose the
> + * hardware interrupt number from a range [ 0 ; domain size ], such as
> + * is often the case with PCI MSI controllers. The function will
> + * returned the allocated hwirq number in the hwirq pointer, and the
> + * corresponding virq number as the return value.
> + */
> +unsigned int irq_alloc_mapping(struct irq_domain *domain,
> + irq_hw_number_t *out_hwirq)
> +{
> + irq_hw_number_t hwirq;
> +
> + pr_debug("irq_alloc_mapping(0x%p)\n", domain);
> +
> + for (hwirq = 0; hwirq < domain->hwirq_max; hwirq++)
> + if (!irq_find_mapping(domain, hwirq))
> + break;
Okay, you can add my acked-by, but only if you change the above hunk to:
for (hwirq = 0; hwirq < domain->revmap_size; hwirq++)
if (domain->linear_revmap[hwirq] == 0)
break;
In some cases hwirq_max will be set to ~0, which means calling
irq_find_mapping about 4 billion times. Not safe. The above change
prevents that problem, but it also means the function won't work for the
tree map. A followup patch can be crafted to add support for the tree
mapping.
> +
> + if (hwirq == domain->hwirq_max) {
> + pr_debug("-> no available hwirq found\n");
> + return 0;
> + }
> +
> + *out_hwirq = hwirq;
> + return irq_create_mapping(domain, hwirq);
out_hwirq should *not* be modified if irq_create_mapping fails. You'll
need to rework the above to:
rc = irq_create_mapping(domain, hwirq);
if (rc)
*out_hwirq = hwirq;
return rc;
When the above two issues are fixed:
Acked-by: Grant Likely <grant.likely@linaro.org>
> +}
> +EXPORT_SYMBOL_GPL(irq_alloc_mapping);
> +
> +/**
> * irq_create_mapping() - Map a hardware interrupt into linux irq space
> * @domain: domain owning this hardware interrupt or NULL for default domain
> * @hwirq: hardware irq number in that domain space
> --
> 1.8.1.2
>
next prev parent reply other threads:[~2013-07-28 4:11 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-15 11:52 [PATCHv5 00/11] MSI support for Marvell EBU PCIe driver Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` [PATCHv5 01/11] irqdomain: add irq_alloc_mapping() function Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-16 8:31 ` Thomas Petazzoni
2013-07-16 8:31 ` Thomas Petazzoni
2013-07-28 4:11 ` Grant Likely [this message]
2013-07-28 4:11 ` Grant Likely
2013-07-15 11:52 ` [PATCHv5 02/11] PCI: use weak functions for MSI arch-specific functions Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-25 18:37 ` Thierry Reding
2013-07-25 18:37 ` Thierry Reding
2013-07-25 18:37 ` Thierry Reding
2013-07-25 20:27 ` Bjorn Helgaas
2013-07-25 20:27 ` Bjorn Helgaas
2013-07-25 20:27 ` Bjorn Helgaas
2013-07-15 11:52 ` [PATCHv5 03/11] PCI: remove ARCH_SUPPORTS_MSI kconfig option Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` [PATCHv5 04/11] PCI: Introduce new MSI chip infrastructure Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-25 18:40 ` Thierry Reding
2013-07-25 18:40 ` Thierry Reding
2013-07-25 20:26 ` Bjorn Helgaas
2013-07-25 20:26 ` Bjorn Helgaas
2013-07-15 11:52 ` [PATCHv5 05/11] of: pci: add registry of MSI chips Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 16:12 ` Rob Herring
2013-07-15 16:12 ` Rob Herring
2013-07-28 4:33 ` Grant Likely
2013-07-28 4:33 ` Grant Likely
2013-07-28 14:27 ` Thomas Petazzoni
2013-07-28 14:27 ` Thomas Petazzoni
2013-07-29 6:54 ` Thierry Reding
2013-07-29 6:54 ` Thierry Reding
2013-07-29 12:26 ` Thomas Petazzoni
2013-07-29 12:26 ` Thomas Petazzoni
2013-07-29 12:58 ` Thierry Reding
2013-07-29 12:58 ` Thierry Reding
2013-07-29 13:04 ` Thomas Petazzoni
2013-07-29 13:04 ` Thomas Petazzoni
2013-08-01 9:17 ` Thomas Petazzoni
2013-08-01 9:17 ` Thomas Petazzoni
2013-07-31 15:14 ` Thomas Petazzoni
2013-07-31 15:14 ` Thomas Petazzoni
2013-07-15 11:52 ` [PATCHv5 06/11] irqchip: armada-370-xp: properly request resources Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` [PATCHv5 07/11] irqchip: armada-370-xp: implement MSI support Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` [PATCHv5 08/11] ARM: pci: add ->add_bus() and ->remove_bus() hooks to hw_pci Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-16 8:29 ` Thomas Petazzoni
2013-07-16 8:29 ` Thomas Petazzoni
2013-07-25 16:53 ` Thierry Reding
2013-07-25 16:53 ` Thierry Reding
2013-08-07 9:13 ` Thomas Petazzoni
2013-08-07 9:13 ` Thomas Petazzoni
2013-08-07 13:37 ` Thierry Reding
2013-08-07 13:37 ` Thierry Reding
2013-08-07 15:06 ` Thomas Petazzoni
2013-08-07 15:06 ` Thomas Petazzoni
2013-07-25 16:57 ` Thierry Reding
2013-07-25 16:57 ` Thierry Reding
2013-07-26 8:13 ` Thomas Petazzoni
2013-07-26 8:13 ` Thomas Petazzoni
2013-07-26 11:49 ` Jason Cooper
2013-07-26 11:49 ` Jason Cooper
2013-07-26 22:46 ` Russell King - ARM Linux
2013-07-26 22:46 ` Russell King - ARM Linux
2013-07-29 12:31 ` Thierry Reding
2013-07-29 12:31 ` Thierry Reding
2013-07-15 11:52 ` [PATCHv5 09/11] ARM: mvebu: the MPIC now provides MSI controller features Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` [PATCHv5 10/11] PCI: mvebu: add support for MSI Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 11:52 ` [PATCHv5 11/11] ARM: mvebu: link PCIe controllers to the MSI controller Thomas Petazzoni
2013-07-15 11:52 ` Thomas Petazzoni
2013-07-15 15:34 ` [PATCHv5 00/11] MSI support for Marvell EBU PCIe driver Stephen Warren
2013-07-15 15:34 ` Stephen Warren
2013-07-15 16:27 ` Thierry Reding
2013-07-15 16:27 ` Thierry Reding
2013-07-16 8:33 ` Thomas Petazzoni
2013-07-16 8:33 ` Thomas Petazzoni
2013-07-16 21:05 ` Thierry Reding
2013-07-16 21:05 ` Thierry Reding
2013-07-16 21:43 ` Thomas Petazzoni
2013-07-16 21:43 ` Thomas Petazzoni
2013-07-23 0:30 ` Bjorn Helgaas
2013-07-23 0:30 ` Bjorn Helgaas
2013-07-15 17:33 ` Jason Cooper
2013-07-15 17:33 ` Jason Cooper
2013-07-16 8:43 ` Thomas Petazzoni
2013-07-16 8:43 ` Thomas Petazzoni
2013-07-16 13:15 ` Jason Cooper
2013-07-16 13:15 ` Jason Cooper
2013-07-16 13:39 ` Thomas Petazzoni
2013-07-16 13:39 ` Thomas Petazzoni
2013-07-25 18:49 ` Thierry Reding
2013-07-25 18:49 ` Thierry Reding
2013-07-25 19:02 ` Jason Cooper
2013-07-25 19:02 ` Jason Cooper
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=20130728041127.068613E08F8@localhost \
--to=grant.likely@secretlab.ca \
--cc=alior@marvell.com \
--cc=andrew@lunn.ch \
--cc=bhelgaas@google.com \
--cc=ezequiel.garcia@free-electrons.com \
--cc=gregory.clement@free-electrons.com \
--cc=jason@lakedaemon.net \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=maen@marvell.com \
--cc=rob.herring@calxeda.com \
--cc=tglx@linutronix.de \
--cc=thierry.reding@gmail.com \
--cc=thomas.petazzoni@free-electrons.com \
/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.