IRQ: Check for PERCPU flag only when adding first irqaction.
PATCH 1/1 IRQ: Check for PERCPU flag only when adding first irqaction.
Hi,
An irqaction structure won't be added to the IRQ line irqaction list if they don't agree wrt the IRQF_PERCPU flag. Only check and set this flag in IRQ descriptor `status' field when the first irqaction is added to the line list.
---
Patch over 2.6.21-rc5.
kernel/irq/manage.c +6 -4
@@ -317,10 +317,7 @@ int setup_irq(unsigned int irq, struct irqaction *new) } *p = new; -#if defined(CONFIG_IRQ_PER_CPU ) -if (new->flags &IRQF_PERCPU ) - desc->status |=IRQ_PER_CPU ; -#endif +/* Exclude IRQ from balancing */ if (new->flags &IRQF_NOBALANCING ) desc->status |=IRQ_NO_BALANCING ;
@@ -328,6 +325,11 @@ int setup_irq(unsigned int irq, struct irqaction *new)if (!shared) {irq_chip_set_defaults (desc->chip); +#if defined(CONFIG_IRQ_PER_CPU ) +if (new->flags &IRQF_PERCPU ) + desc->status |=IRQ_PER_CPU ; +#endif +/* Setup the type (level, edge polarity) if configured: */ if (new->flags &IRQF_TRIGGER_MASK ) {if (desc->chip && desc->chip->set_type)
Signature · 2 lines
Ahmed S. Darwish http://darwish.07.googlepages.com
Quoted 10 lines · ahmed
Hi,
An irqaction structure won't be added to the IRQ line irqaction list if they don't agree wrt the
IRQF_PERCPUflag. Only check and set this flag in IRQ descriptor `status' field when the first irqaction is added to the line list.Signed-off-by Ahmed S. Darwish <[email protected]>---
Patch over 2.6.21-rc5.
Maybe just a better description (with the same patch below):
An irqaction structure won't be added to an IRQ descriptor irqaction list if it don't agree with other irqactions on the IRQF_PERCPU flag. Don't check for this flag to change IRQ descriptor `status' for every irqaction added to the list, Doing the check only for the first irqaction added is enough.
---
kernel/irq/manage.c +6 -4
@@ -317,10 +317,7 @@ int setup_irq(unsigned int irq, struct irqaction *new) } *p = new; -#if defined(CONFIG_IRQ_PER_CPU ) -if (new->flags &IRQF_PERCPU ) - desc->status |=IRQ_PER_CPU ; -#endif +/* Exclude IRQ from balancing */ if (new->flags &IRQF_NOBALANCING ) desc->status |=IRQ_NO_BALANCING ;
@@ -328,6 +325,11 @@ int setup_irq(unsigned int irq, struct irqaction *new)if (!shared) {irq_chip_set_defaults (desc->chip); +#if defined(CONFIG_IRQ_PER_CPU ) +if (new->flags &IRQF_PERCPU ) + desc->status |=IRQ_PER_CPU ; +#endif +/* Setup the type (level, edge polarity) if configured: */ if (new->flags &IRQF_TRIGGER_MASK ) {if (desc->chip && desc->chip->set_type)
Signature · 2 lines
Ahmed S. Darwish http://darwish.07.googlepages.com