Messages in this thread Patch in this message | | | Date | Wed, 22 Jul 2009 21:01:01 -0300 | From | Kevin Winchester <> | Subject | [PATCH] irq: Add compiling definition of irq_thread_check_affinity for !CONFIG_SMP |
| |
The addition and use of irq_thread_check_affinity neglected the fact that struct irq_desc does not have an affinity member when CONFIG_SMP=n.
Fix this by adding an empty definition of the method for !SMP.
Signed-off-by: Kevin Winchester <kjwinchester@gmail.com> ---
I'll try not to be lazy and send a real patch. Please let me know if I've done it wrong.
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index f0de36f..82f01c8 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -190,11 +190,46 @@ int irq_select_affinity_usr(unsigned int irq) return ret; } +/* + * Check whether we need to change the affinity of the interrupt thread. + */ +static void +irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) +{ + cpumask_var_t mask; + + if (!test_and_clear_bit(IRQTF_AFFINITY, &action->thread_flags)) + return; + + /* + * In case we are out of memory we set IRQTF_AFFINITY again and + * try again next time + */ + if (!alloc_cpumask_var(&mask, GFP_KERNEL)) { + set_bit(IRQTF_AFFINITY, &action->thread_flags); + return; + } + + spin_lock_irq(&desc->lock); + cpumask_copy(mask, desc->affinity); + spin_unlock_irq(&desc->lock); + + set_cpus_allowed_ptr(current, mask); + free_cpumask_var(mask); +} + #else + static inline int setup_affinity(unsigned int irq, struct irq_desc *desc) { return 0; } + +static void +irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) +{ +} + #endif void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend) @@ -452,34 +487,6 @@ static int irq_wait_for_interrupt(struct irqaction *action) } /* - * Check whether we need to change the affinity of the interrupt thread. - */ -static void -irq_thread_check_affinity(struct irq_desc *desc, struct irqaction *action) -{ - cpumask_var_t mask; - - if (!test_and_clear_bit(IRQTF_AFFINITY, &action->thread_flags)) - return; - - /* - * In case we are out of memory we set IRQTF_AFFINITY again and - * try again next time - */ - if (!alloc_cpumask_var(&mask, GFP_KERNEL)) { - set_bit(IRQTF_AFFINITY, &action->thread_flags); - return; - } - - spin_lock_irq(&desc->lock); - cpumask_copy(mask, desc->affinity); - spin_unlock_irq(&desc->lock); - - set_cpus_allowed_ptr(current, mask); - free_cpumask_var(mask); -} - -/* * Interrupt handler thread */ static int irq_thread(void *data)
| |