Skip to contentSkip to conversation

IRQ: Check for PERCPU flag only when adding first irqaction.

PATCH In review Ahmed S. Darwish 1 participant 2 messages Mar 26, 2007 – Mar 27, 2007 IRQ

lore
Share & tools
lore
#0 lore raw

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
index 5597c15..ea82a54 100644
@@ -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
#1 lore raw
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_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.

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
index 5597c15..ea82a54 100644
@@ -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