Messages in this thread Patch in this message | | | Subject | RE: [BUG][RFC] [GENERIC IRQ] irq_chip_set_defaults shutdown / disable | Date | Tue, 19 Feb 2008 08:58:34 -0000 | From | "Hennerich, Michael" <> |
| |
>From: Thomas Gleixner Montag, 18. Februar 2008 21:38 > >On Mon, 18 Feb 2008, Hennerich, Michael wrote: >> >The patch below fixes the shutdown case and keeps the delayed disable >> >logic intact. >> >> >How did you notice ? I guess you got spurious interrupts after calling >> >free_irq(), right ? >> >> Exactly > >Can you please confirm, whether my version of the fix works for you as >well. > >Thanks, > > tglx
Thomas,
Works - no problems. There was another typo
>+ chip_disable : default_shutdown; Should be better: + chip->disable : default_shutdown;
Best regards, Michael
Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Index: kernel/irq/chip.c =================================================================== --- kernel/irq/chip.c (revision 4270) +++ kernel/irq/chip.c (working copy) @@ -245,7 +245,20 @@ return 0; }
+ /* + * default shutdown function + */ +static void default_shutdown(unsigned int irq) +{ + struct irq_desc *desc = irq_desc + irq; + + desc->chip->mask(irq); + desc->status |= IRQ_MASKED; +} + + +/* * Fixup enable/disable function pointers */ void irq_chip_set_defaults(struct irq_chip *chip) @@ -257,7 +270,8 @@ if (!chip->startup) chip->startup = default_startup; if (!chip->shutdown) - chip->shutdown = chip->disable; + chip->shutdown = chip->disable != default_disable ? + chip->disable : default_shutdown; if (!chip->name) chip->name = chip->typename; if (!chip->end)
| |