From: Bjorn Helgaas <helgaas@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Karthikeyan Mitran <m.karthikeyan@mobiveil.co.in>,
Marc Gonzalez <marc.w.gonzalez@free.fr>,
linux-pci@vger.kernel.org,
Linus Walleij <linus.walleij@linaro.org>,
Aman Sharma <amanharitsh123@gmail.com>,
linux-kernel@vger.kernel.org, Ryder Lee <ryder.lee@mediatek.com>,
linux-mediatek@lists.infradead.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Marc Zyngier <maz@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
Mans Rullgard <mans@mansr.com>,
Hou Zhiqiang <Zhiqiang.Hou@nxp.com>,
linux-arm-kernel@lists.infradead.org,
Andrew Murray <amurray@thegoodpenguin.co.uk>
Subject: Re: [PATCH 4/5] pci: handled return value of platform_get_irq correctly
Date: Wed, 18 Mar 2020 17:22:38 -0500 [thread overview]
Message-ID: <20200318222238.GA247500@google.com> (raw)
In-Reply-To: <874kulbwyv.fsf@nanos.tec.linutronix.de>
On Wed, Mar 18, 2020 at 02:42:48PM +0100, Thomas Gleixner wrote:
> Bjorn Helgaas <helgaas@kernel.org> writes:
> > On Fri, Mar 13, 2020 at 04:56:42PM -0500, Bjorn Helgaas wrote:
> >> On Fri, Mar 13, 2020 at 10:05:58PM +0100, Thomas Gleixner wrote:
> >> > > I think the best pattern is:
> >> > >
> >> > > irq = platform_get_irq(pdev, i);
> >> > > if (irq < 0)
> >> > > return irq;
> >> >
> >> > Careful. 0 is not a valid interrupt.
> >>
> >> Should callers of platform_get_irq() check for a 0 return value?
> >> About 900 of them do not.
>
> I don't know what I was looking at.
>
> platform_get_irq() does the right thing already, so checking for irq < 0
> is sufficient.
>
> Sorry for the confusion!
Thanks, I was indeed confused! Maybe we could reduce future confusion
by strengthening the comments slightly, e.g.,
- * Return: IRQ number on success, negative error number on failure.
+ * Return: non-zero IRQ number on success, negative error number on failure.
I don't want to push my luck, but it's pretty hard to prove that
platform_get_irq() never returns 0. What would you think of something
like the following?
@@ -133,23 +133,24 @@ EXPORT_SYMBOL_GPL(devm_platform_ioremap_resource_byname);
* if (irq < 0)
* return irq;
*
- * Return: IRQ number on success, negative error number on failure.
+ * Return: non-zero IRQ number on success, negative error number on failure.
*/
int platform_get_irq_optional(struct platform_device *dev, unsigned int num)
{
+ int ret;
#ifdef CONFIG_SPARC
/* sparc does not have irqs represented as IORESOURCE_IRQ resources */
if (!dev || num >= dev->archdata.num_irqs)
return -ENXIO;
- return dev->archdata.irqs[num];
+ ret = dev->archdata.irqs[num];
+ goto out;
#else
struct resource *r;
- int ret;
if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node) {
ret = of_irq_get(dev->dev.of_node, num);
if (ret > 0 || ret == -EPROBE_DEFER)
- return ret;
+ goto out;
}
r = platform_get_resource(dev, IORESOURCE_IRQ, num);
@@ -157,7 +158,7 @@ int platform_get_irq_optional(struct platform_device *dev, unsigned int num)
if (r && r->flags & IORESOURCE_DISABLED) {
ret = acpi_irq_get(ACPI_HANDLE(&dev->dev), num, r);
if (ret)
- return ret;
+ goto out;
}
}
@@ -171,13 +172,17 @@ int platform_get_irq_optional(struct platform_device *dev, unsigned int num)
struct irq_data *irqd;
irqd = irq_get_irq_data(r->start);
- if (!irqd)
- return -ENXIO;
+ if (!irqd) {
+ ret = -ENXIO;
+ goto out;
+ }
irqd_set_trigger_type(irqd, r->flags & IORESOURCE_BITS);
}
- if (r)
- return r->start;
+ if (r) {
+ ret = r->start;
+ goto out;
+ }
/*
* For the index 0 interrupt, allow falling back to GpioInt
@@ -190,11 +195,14 @@ int platform_get_irq_optional(struct platform_device *dev, unsigned int num)
ret = acpi_dev_gpio_irq_get(ACPI_COMPANION(&dev->dev), num);
/* Our callers expect -ENXIO for missing IRQs. */
if (ret >= 0 || ret == -EPROBE_DEFER)
- return ret;
+ goto out;
}
- return -ENXIO;
+ ret = -ENXIO;
#endif
+out:
+ WARN(ret == 0, "0 is an invalid IRQ number\n");
+ return ret;
}
EXPORT_SYMBOL_GPL(platform_get_irq_optional);
@@ -212,7 +220,7 @@ EXPORT_SYMBOL_GPL(platform_get_irq_optional);
* if (irq < 0)
* return irq;
*
- * Return: IRQ number on success, negative error number on failure.
+ * Return: non-zero IRQ number on success, negative error number on failure.
*/
int platform_get_irq(struct platform_device *dev, unsigned int num)
{
@@ -284,8 +292,10 @@ static int __platform_get_irq_byname(struct platform_device *dev,
}
r = platform_get_resource_byname(dev, IORESOURCE_IRQ, name);
- if (r)
+ if (r) {
+ WARN(r->start == 0, "0 is an invalid IRQ number\n");
return r->start;
+ }
return -ENXIO;
}
@@ -297,7 +307,7 @@ static int __platform_get_irq_byname(struct platform_device *dev,
*
* Get an IRQ like platform_get_irq(), but then by name rather then by index.
*
- * Return: IRQ number on success, negative error number on failure.
+ * Return: non-zero IRQ number on success, negative error number on failure.
*/
int platform_get_irq_byname(struct platform_device *dev, const char *name)
{
@@ -319,7 +329,7 @@ EXPORT_SYMBOL_GPL(platform_get_irq_byname);
* Get an optional IRQ by name like platform_get_irq_byname(). Except that it
* does not print an error message if an IRQ can not be obtained.
*
- * Return: IRQ number on success, negative error number on failure.
+ * Return: non-zero IRQ number on success, negative error number on failure.
*/
int platform_get_irq_byname_optional(struct platform_device *dev,
const char *name)
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-03-18 22:22 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-11 19:19 [PATCH 0/5] Handled return value of platform_get_irq correctly Aman Sharma
2020-03-11 19:19 ` [PATCH 1/5] pci: handled " Aman Sharma
2020-03-12 14:07 ` Linus Walleij
2020-03-12 19:02 ` Bjorn Helgaas
2020-03-12 22:45 ` Linus Walleij
2020-03-11 19:19 ` [PATCH 2/5] pci: added check for return value of platform_get_irq Aman Sharma
2020-03-11 19:19 ` [PATCH 3/5] pci: handled return value of platform_get_irq correctly Aman Sharma
2020-03-11 19:19 ` [PATCH 4/5] " Aman Sharma
2020-03-12 9:53 ` Marc Gonzalez
2020-03-12 14:11 ` Bjorn Helgaas
2020-03-12 15:53 ` Marc Gonzalez
2020-03-13 21:05 ` Thomas Gleixner
2020-03-13 21:56 ` Bjorn Helgaas
2020-03-17 22:03 ` Bjorn Helgaas
2020-03-18 13:42 ` Thomas Gleixner
2020-03-18 22:22 ` Bjorn Helgaas [this message]
2020-03-19 8:47 ` Thomas Gleixner
2020-03-19 21:35 ` Bjorn Helgaas
2020-03-11 19:19 ` [PATCH 5/5] pci: added check for return value of platform_get_irq Aman Sharma
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=20200318222238.GA247500@google.com \
--to=helgaas@kernel.org \
--cc=Zhiqiang.Hou@nxp.com \
--cc=amanharitsh123@gmail.com \
--cc=amurray@thegoodpenguin.co.uk \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-pci@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=m.karthikeyan@mobiveil.co.in \
--cc=mans@mansr.com \
--cc=marc.w.gonzalez@free.fr \
--cc=matthias.bgg@gmail.com \
--cc=maz@kernel.org \
--cc=ryder.lee@mediatek.com \
--cc=tglx@linutronix.de \
--cc=thomas.petazzoni@bootlin.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).