From: viro@parcelfarce.linux.theplanet.co.uk
To: Linus Torvalds <torvalds@osdl.org>
Cc: linux-kernel@vger.kernel.org,
Marcelo Tosatti <marcelo.tosatti@cyclades.com>,
Bartlomiej Zolnierkiewicz <B.Zolnierkiewicz@elka.pw.edu.pl>
Subject: Re: [RFC] disable_irq()/enable_irq() semantics and ide-probe.c
Date: Thu, 9 Oct 2003 18:46:04 +0100 [thread overview]
Message-ID: <20031009174604.GC7665@parcelfarce.linux.theplanet.co.uk> (raw)
In-Reply-To: <Pine.LNX.4.44.0310090851390.10041-100000@home.osdl.org>
On Thu, Oct 09, 2003 at 09:01:36AM -0700, Linus Torvalds wrote:
>
> On Thu, 9 Oct 2003 viro@parcelfarce.linux.theplanet.co.uk wrote:
> >
> > IOW, the question is: do we want enable_irq() to undo all effects of
> > disable_irq()? Whether the current behaviour is intentional or not,
> > it's worth documenting, IMO...
>
> I think yes, it would be clean to make enable_irq() clean up properly.
> That includes clearing the IRQ_INPROGRESS bit along with the IRQ_DISABLED
> but. It won't even make the codepath longer, it just changes a constant.
>
> And yes, I think we should just remove the clearing of depth in
> setup_irq(), _and_ make the enabling of the irq be dependent on depth
> being non-zero.
>
> In 2.6.x terms, we'd like to go towards something like the appended, but
> this actually has a _different_ problem: we have separate "->startup()" vs
> "->enable()" functions for the irq controller, and this means that if the
> interrupt was disabled when the first irq handler was requested,
> "->startup()" wouldn't be called at all.
>
> So my suggestion would be:
> - do the IRQ_INPROGRESS clearing (safe, since disable_irq() will have
> waited for it if it was valid)
> - leave the depth reset as-is for now, and think about how we'd like to
> solve it.
> - make the synchronize_irq() conditional in irq_disable() (2.6.x now
> already does that part, so it's not in the patch)
>
> Hmm?
I've looked through the uses of IRQ_DISABLED in 2.6. Fun things found:
a) on alpha:
void
i8259a_end_irq(unsigned int irq)
{
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
i8259a_enable_irq(irq);
}
and similar in other ->end()
on x86:
static void end_8259A_irq (unsigned int irq)
{
if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)) &&
irq_desc[irq].action)
enable_8259A_irq(irq);
}
b) if we get *two* interrupts while irq is enabled and not registered, we'll
be stuck with IRQ_PENDING in addition to IRQ_INPROGRESS. Which can, AFAICS,
confuse other code.
c) mind-boggling amount of code duplication - are there any plans to take
that stuff to kernel/*?
next prev parent reply other threads:[~2003-10-09 17:46 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-10-09 2:00 [RFC] disable_irq()/enable_irq() semantics and ide-probe.c viro
2003-10-09 2:29 ` Linus Torvalds
2003-10-09 2:43 ` viro
2003-10-09 2:53 ` Linus Torvalds
2003-10-09 8:03 ` Russell King
2003-10-09 22:46 ` Zwane Mwaikambo
2003-10-09 8:07 ` Benjamin Herrenschmidt
2003-10-09 15:46 ` viro
2003-10-09 16:01 ` Linus Torvalds
2003-10-09 17:46 ` viro [this message]
2003-10-09 18:03 ` Linus Torvalds
2003-10-09 18:27 ` viro
2003-10-09 19:05 ` Linus Torvalds
2003-10-15 17:14 ` Anton Blanchard
2003-10-17 9:19 ` Russell King
2003-10-17 10:32 ` Benjamin Herrenschmidt
2003-10-09 12:55 ` Roman Zippel
-- strict thread matches above, loose matches on Subject: below --
2003-10-09 16:10 Manfred Spraul
2003-10-09 16:38 ` Jeff Garzik
2003-10-09 16:57 ` Benjamin Herrenschmidt
2003-10-09 17:03 ` Jeff Garzik
2003-10-09 17:07 ` Benjamin Herrenschmidt
2003-10-09 17:16 ` Jeff Garzik
2003-10-09 17:29 ` Linus Torvalds
2003-10-09 17:52 ` Jeff Garzik
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=20031009174604.GC7665@parcelfarce.linux.theplanet.co.uk \
--to=viro@parcelfarce.linux.theplanet.co.uk \
--cc=B.Zolnierkiewicz@elka.pw.edu.pl \
--cc=linux-kernel@vger.kernel.org \
--cc=marcelo.tosatti@cyclades.com \
--cc=torvalds@osdl.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox