Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fe12bc2c authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

genirq: Uninline and sanity check generic_handle_irq()



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: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: Jonathan Cameron <jic23@cam.ac.uk>
parent fe051434
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -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)
+15 −0
Original line number Diff line number Diff line
@@ -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 */

/**