All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: Is IRQ number 0 a valid IRQ ?
Date: Mon, 14 Oct 2019 14:25:28 +0200 (CEST)	[thread overview]
Message-ID: <alpine.DEB.2.21.1910141414210.2531@nanos.tec.linutronix.de> (raw)
In-Reply-To: <4ef7a462-5ded-0ac7-242e-888a9d36362b@redhat.com>

Hans,

On Sat, 5 Oct 2019, Hans de Goede wrote:

> This is something which I have been wondering for ever since there are
> several places in the kernel where IRQ number 0 is treated as not being
> valid (as no IRQ found mostly I guess). Where as other places do treat
> IRQ number 0 as valid... ?

IRQ0 is a historical x86 nuisance. On x86 irq0 is still valid - it's the
legacy timer irq. I'd be happy to fix that up, but there are quite some
assumptions vs. the irq numbering of the x86 legacy interrupt numbers in
general. BIOS/ACPI has them hard coded as well, so it's not entirely
trivial to fix that up.

For everything else than x86 (and maybe ia64( irq 0 should not exist and DT
based irq enumeration treated it as invalid interrupt number forever.

Though there were some old ARM subarchs which used to have hardcoded legacy
interrupt numbers including 0 as well.
 
> Some examples which treat IRQ 0 special:
> 
> drivers/base/platform.c: __platform_get_irq() :
> 
>         if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node) {
>                 int ret;
> 
>                 ret = of_irq_get(dev->dev.of_node, num);
>                 if (ret > 0 || ret == -EPROBE_DEFER)
>                         return ret;
>         }
> 
> Note if (ret > 0) not if (ret >= 0)

Yeah. It makes the code fall through when ret == 0 so it can try the other
methods. What a mess...

> Other example: drivers/usb/dwc3/gadget.c: dwc3_gadget_get_irq() :
> 
>         if (!irq)
>                 irq = -EINVAL;

That one translates irq0 into an error code.
 
> So 2 questions:
> 
> 1) Is this special handling of IRQ number 0 valid code, or just
> mostly some leftover from older days when IRQ number 0 was maybe
> special ?

Kinda both.

> 2) Either way (*) I think we (I volunteer) should document this somewhere,
> other then adding a note about this to the platform_get_irq docs any
> other place where it would be good to specify this?
> 
> *) Either IRQ number 0 is not special and then we need to stop the
> cargo-culting of treating it special, or it is special and then we
> need to document that.

One way to solve it would be to change the '0' return value from the core
functions (irqdomain) to -EINVAL or such, but that needs some thorough
analysis whether there is valid irq 0 usage outside of x86/ia64.

Thanks,

	tglx

  reply	other threads:[~2019-10-14 12:25 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-05 10:47 Is IRQ number 0 a valid IRQ ? Hans de Goede
2019-10-14 12:25 ` Thomas Gleixner [this message]
2019-10-16  8:41   ` Hans de Goede

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=alpine.DEB.2.21.1910141414210.2531@nanos.tec.linutronix.de \
    --to=tglx@linutronix.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=hdegoede@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    /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.