Skip to content

Commit

Permalink
genirq: Uninline and sanity check generic_handle_irq()
Browse files Browse the repository at this point in the history
generic_handle_irq() is missing a NULL pointer check for the result of
irq_to_desc. This was a not a big problem, but we want to expose it to
drivers, so we better have sanity checks in place. Add a return value
as well, which indicates that the irq number was valid and the handler
was invoked.

Based on the pure code move from Jonathan Cameron.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Jonathan Cameron <jic23@cam.ac.uk>
  • Loading branch information
Thomas Gleixner committed May 18, 2011
1 parent fe05143 commit fe12bc2
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
5 changes: 1 addition & 4 deletions include/linux/irqdesc.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,7 @@ static inline void generic_handle_irq_desc(unsigned int irq, struct irq_desc *de
desc->handle_irq(irq, desc);
}

static inline void generic_handle_irq(unsigned int irq)
{
generic_handle_irq_desc(irq, irq_to_desc(irq));
}
int generic_handle_irq(unsigned int irq);

/* Test to see if a driver has successfully requested an irq */
static inline int irq_has_action(unsigned int irq)
Expand Down
15 changes: 15 additions & 0 deletions kernel/irq/irqdesc.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,21 @@ static int irq_expand_nr_irqs(unsigned int nr)

#endif /* !CONFIG_SPARSE_IRQ */

/**
* generic_handle_irq - Invoke the handler for a particular irq
* @irq: The irq number to handle
*
*/
int generic_handle_irq(unsigned int irq)
{
struct irq_desc *desc = irq_to_desc(irq);

if (!desc)
return -EINVAL;
generic_handle_irq_desc(irq, desc);
return 0;
}

/* Dynamic interrupt handling */

/**
Expand Down

0 comments on commit fe12bc2

Please sign in to comment.