lkml.org 
[lkml]   [2000]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: PATCH 2.4.0.10.3: pc_keyb and q40_keyb cleanup
On Mon, Oct 16, 2000 at 05:31:47PM -0400, Jeff Garzik wrote:
> Andrea Arcangeli wrote:
> >
> > On Sun, Oct 15, 2000 at 03:48:55PM -0400, Jeff Garzik wrote:
> > > Changes:
> > > * both: we know we are in an interrupt, so
> > > s/spin_lock_irqsave/spin_lock/
> >
> > There request_irq is not called passing the SA_INTERRUPT flag so the irq
> > handler is recalled with irqs enabled and in turn irqsave is necessary.
>
> hmmm. Can you elaborate on this a bit?
>
> I didn't know that bit about !SA_INTERRUPT, but why is irqsave necessary
> in these drivers? [..]

if you do:

request_irq(&my_irq_handler,... 0, ...)

then my_irq_handler will be recalled with irq enabled.

If you do:

request_irq(&my_irq_handler,... SA_INTERRUPT, ...)

then my_irq_handler will be recalled with irq disabled.

SA_INTERRUPT only controls if an irq handler is recalled with irq
enabled or disabled (locally of course).

keyboard_interrupt is registered w/o SA_INTERRUPT so it will be
recalled with irq enabled and so you someway need to do a __cli() before
spinning on the lock.

>[..] I don't see handle_kbd_event() being called from a
> timer or anything special like that..

Timer, bottomhalves (softirq) and tasklets (and softnet) are always
recalled with irq enabled. So if it would be called by timer/tasklet/bhhandler
it should use irq version of the spinlocks too if it needs to run with irq
locally disabled.

One thing you could safely change in keyboard_interrupt is to remove the save
part of the spinlock by using spin_lock_irq (we don't need to save anything
since keyboard_interrupt is only recalled as an irq handler).

Andrea
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 12:41    [W:0.062 / U:0.492 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site