All of lore.kernel.org
 help / color / mirror / Atom feed
* genirq default_disable()
@ 2009-06-23 16:23 Pawel MOLL
  2009-06-23 16:31 ` Thomas Gleixner
  0 siblings, 1 reply; 2+ messages in thread
From: Pawel MOLL @ 2009-06-23 16:23 UTC (permalink / raw)
  To: linux-kernel; +Cc: Thomas Gleixner

Folks,

A quick question about the interrupt management... (the story takes
place in kernel/irq/chip.c ;-)

Here we have the default_enable():

static void default_enable(unsigned int irq)
{
        struct irq_desc *desc = irq_to_desc(irq);

        desc->chip->unmask(irq);
        desc->status &= ~IRQ_MASKED;
}

It calls chip->unmask(), which absolutely makes sense...

The default_disable(), however, is not symmetric:

static void default_disable(unsigned int irq)
{
}

Is there any reason why it shouldn't call chip->mask()?

I'll be more then happy to prepare a patch doing so, but maybe it's a
feature not a bug and I'm just missing something?

Best regards

Paweł


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: genirq default_disable()
  2009-06-23 16:23 genirq default_disable() Pawel MOLL
@ 2009-06-23 16:31 ` Thomas Gleixner
  0 siblings, 0 replies; 2+ messages in thread
From: Thomas Gleixner @ 2009-06-23 16:31 UTC (permalink / raw)
  To: Pawel MOLL; +Cc: linux-kernel

On Tue, 23 Jun 2009, Pawel MOLL wrote:
> Folks,
> 
> A quick question about the interrupt management... (the story takes
> place in kernel/irq/chip.c ;-)
> 
> Here we have the default_enable():
> 
> static void default_enable(unsigned int irq)
> {
>         struct irq_desc *desc = irq_to_desc(irq);
> 
>         desc->chip->unmask(irq);
>         desc->status &= ~IRQ_MASKED;
> }
> 
> It calls chip->unmask(), which absolutely makes sense...
> 
> The default_disable(), however, is not symmetric:
> 
> static void default_disable(unsigned int irq)
> {
> }
> 
> Is there any reason why it shouldn't call chip->mask()?
> 
> I'll be more then happy to prepare a patch doing so, but maybe it's a
> feature not a bug and I'm just missing something?

Yup, it's a feature: delayed irq disable.

Disabling irqs on the hardware level can be expensive. So we keep them
enabled and mark the irq as disabled. When an interrupt comes in
during that time then we disable the irq on the hardware level for
real and note internaly that it happened. On enable we replay the
interrupt so nothing is lost. That replay can be in hardware or in
software.

Thanks,

	tglx

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-06-23 16:55 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-06-23 16:23 genirq default_disable() Pawel MOLL
2009-06-23 16:31 ` Thomas Gleixner

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.