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 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.