irq fixes
Linus,
Please pull the latest irq-fixes-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git irq-fixes-for-linus
Thanks,
Ingo
------------------>
Thomas Gleixner (3):
genirq; Remove the last leftovers of the old sparse irq code
genirq: Provide a lockdep helper
genirq: Provide locked setter for chip, handler, name
include/linux/irqdesc.h | 45 +++++++++++++++++++++++++++++++++------------ kernel/irq/irqdesc.c | 14 -------------- 2 files changed, 33 insertions(+), 26 deletions(-)
include/linux/irqdesc.h +33 -12
@@ -100,13 +100,6 @@ struct irq_desc {extern struct irq_desc irq_desc[NR_IRQS ];#endif -/* Will be removed once the last users in power and sh are gone */ -extern struct irq_desc *irq_to_desc_alloc_node (unsigned int irq,int node); -static inline struct irq_desc *move_irq_desc (struct irq_desc *desc,int node) -{ -return desc; -} -#ifdef CONFIG_GENERIC_HARDIRQS static inline struct irq_data *irq_desc_get_irq_data (struct irq_desc *desc)
@@ -178,24 +171,52 @@ static inline int irq_has_action(unsigned int irq)return desc->action !=NULL ; } -#ifndef CONFIG_GENERIC_HARDIRQS_NO_COMPAT -static inline int irq_balancing_disabled (unsigned int irq) +/* caller has locked the irq_desc and both params are valid */ +static inline void __irq_set_handler_locked (unsigned int irq, +irq_flow_handler_t handler) {struct irq_desc *desc; desc =irq_to_desc (irq); -return desc->status &IRQ_NO_BALANCING_MASK ; + desc->handle_irq = handler; } -#endif /* caller has locked the irq_desc and both params are valid */ +static inline void +__irq_set_chip_handler_name_locked (unsigned int irq,struct irq_chip *chip, +irq_flow_handler_t handler,const char *name) +{ +struct irq_desc *desc; + + desc =irq_to_desc (irq); +irq_desc_get_irq_data (desc)->chip = chip; + desc->handle_irq = handler; + desc->name = name; +} + +#ifndef CONFIG_GENERIC_HARDIRQS_NO_COMPAT static inline void __set_irq_handler_unlocked (int irq,irq_flow_handler_t handler) { +__irq_set_handler_locked (irq, handler); +} + +static inline int irq_balancing_disabled (unsigned int irq) +{struct irq_desc *desc; desc =irq_to_desc (irq); - desc->handle_irq = handler; +return desc->status &IRQ_NO_BALANCING_MASK ; +} +#endif + +static inline void +irq_set_lockdep_class (unsigned int irq,struct lock_class_key *class) +{ +struct irq_desc *desc =irq_to_desc (irq); + +if (desc) +lockdep_set_class (&desc->lock, class); }#ifdef CONFIG_IRQ_PREFLOW_FASTEOI
kernel/irq/irqdesc.c +0 -14
@@ -198,15 +198,6 @@ err:return -ENOMEM ; } -struct irq_desc *__ref irq_to_desc_alloc_node (unsigned int irq,int node) -{ -int res =irq_alloc_descs (irq, irq,1 , node); - -if (res == -EEXIST || res == irq) -return irq_to_desc (irq); -return NULL ; -} -static int irq_expand_nr_irqs (unsigned int nr) {if (nr >IRQ_BITMAP_BITS )
@@ -283,11 +274,6 @@ struct irq_desc *irq_to_desc(unsigned int irq)return (irq <NR_IRQS ) ? irq_desc + irq :NULL ; } -struct irq_desc *irq_to_desc_alloc_node (unsigned int irq,int node) -{ -return irq_to_desc (irq); -} -static void free_desc (unsigned int irq) {dynamic_irq_cleanup (irq);