From 01757b5982f2ee5be616ce0ec5294ff78d51a0fb Mon Sep 17 00:00:00 2001 From: Armin Luntzer <armin.luntzer@univie.ac.at> Date: Thu, 23 Mar 2017 11:59:40 +0100 Subject: [PATCH] IRQ: pass irq number in call to handler --- arch/sparc/kernel/irq.c | 14 +++++++++----- include/kernel/irq.h | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/arch/sparc/kernel/irq.c b/arch/sparc/kernel/irq.c index a372b8a..38d2c37 100644 --- a/arch/sparc/kernel/irq.c +++ b/arch/sparc/kernel/irq.c @@ -424,6 +424,10 @@ static int leon_irq_queue(struct irl_vector_elem *p_elem) /** * * @brief execute deferred (low-priority) handlers + * + * @note see todo + * @todo TODO we do not track deferred handler IRQ numbers, so we'll just + * pass -1 for now and hope the user knows what he's doing -.- */ void leon_irq_queue_execute(void) @@ -442,7 +446,7 @@ void leon_irq_queue_execute(void) if (likely(p_elem->handler)) { - if (p_elem->handler(p_elem->data)) + if (p_elem->handler(-1, p_elem->data)) leon_irq_queue(p_elem); else list_add_tail(&p_elem->handler_node, @@ -480,9 +484,9 @@ static int leon_irq_dispatch(unsigned int irq) list_for_each_entry(p_elem, &irl_vector[irq], handler_node) { if (likely(p_elem->priority == ISR_PRIORITY_NOW)) - p_elem->handler(p_elem->data); + p_elem->handler(irq, p_elem->data); else if (leon_irq_queue(p_elem) < 0) - p_elem->handler(p_elem->data); + p_elem->handler(irq, p_elem->data); } return 0; @@ -557,9 +561,9 @@ static int leon_eirq_dispatch(unsigned int irq) * queueing fails */ if (likely(p_elem->priority == ISR_PRIORITY_NOW)) - p_elem->handler(p_elem->data); + p_elem->handler(eirq, p_elem->data); else if (leon_irq_queue(p_elem) < 0) - p_elem->handler(p_elem->data); + p_elem->handler(eirq, p_elem->data); } } diff --git a/include/kernel/irq.h b/include/kernel/irq.h index dc3afdc..911f76e 100644 --- a/include/kernel/irq.h +++ b/include/kernel/irq.h @@ -29,7 +29,7 @@ enum irqreturn { typedef enum irqreturn irqreturn_t; -typedef irqreturn_t (*irq_handler_t)(void *); +typedef irqreturn_t (*irq_handler_t)(unsigned int irq, void *); enum isr_exec_priority {ISR_PRIORITY_NOW, ISR_PRIORITY_DEFERRED}; -- GitLab