From 16bad28fd2c103b75d8190da67d4aa4e66facf81 Mon Sep 17 00:00:00 2001 From: Damien Zammit Date: Sun, 28 Mar 2021 23:28:44 +0200 Subject: linux irq: Avoid hardcoding the number of interrupts. * linux/dev/arch/i386/kernel/irq.c: Include instead of . (irq_action): Use NINTR instead of 16, do not bother expliciting the initialization. (install_user_intr_handler, request_irq, free_irq, probe_irq_on, probe_irq_off, reserve_mach_irqs): Use NINTR instead of 16. --- linux/dev/arch/i386/kernel/irq.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/linux/dev/arch/i386/kernel/irq.c b/linux/dev/arch/i386/kernel/irq.c index 06889e58..b6729c12 100644 --- a/linux/dev/arch/i386/kernel/irq.c +++ b/linux/dev/arch/i386/kernel/irq.c @@ -29,7 +29,7 @@ #include #include -#include +#include #include #define MACH_INCLUDE @@ -84,13 +84,7 @@ struct linux_action user_intr_t *user_intr; }; -static struct linux_action *irq_action[16] = -{ - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL, - NULL, NULL, NULL, NULL -}; +static struct linux_action *irq_action[NINTR] = {0}; /* * Generic interrupt handler for Linux devices. @@ -232,7 +226,7 @@ install_user_intr_handler (struct irqdev *dev, int id, unsigned long flags, unsigned int irq = dev->irq[id]; - assert (irq < 16); + assert (irq < NINTR); /* Test whether the irq handler has been set */ // TODO I need to protect the array when iterating it. @@ -279,7 +273,7 @@ request_irq (unsigned int irq, void (*handler) (int, void *, struct pt_regs *), struct linux_action *action; int retval; - assert (irq < 16); + assert (irq < NINTR); if (!handler) return -EINVAL; @@ -315,7 +309,7 @@ free_irq (unsigned int irq, void *dev_id) struct linux_action *action, **p; unsigned long flags; - if (irq > 15) + if (irq >= NINTR) panic ("free_irq: bad irq number"); for (p = irq_action + irq; (action = *p) != NULL; p = &action->next) @@ -354,7 +348,7 @@ probe_irq_on (void) /* * Allocate all available IRQs. */ - for (i = 15; i > 0; i--) + for (i = NINTR - 1; i > 0; i--) { if (!irq_action[i] && ivect[i] == intnull) { @@ -387,7 +381,7 @@ probe_irq_off (unsigned long irqs) /* * Disable unnecessary IRQs. */ - for (i = 15; i > 0; i--) + for (i = NINTR - 1; i > 0; i--) { if (!irq_action[i] && ivect[i] == intnull) { @@ -427,7 +421,7 @@ reserve_mach_irqs (void) { unsigned int i; - for (i = 0; i < 16; i++) + for (i = 0; i < NINTR; i++) { if (ivect[i] != intnull) /* This dummy action does not specify SA_SHIRQ, so -- cgit v1.2.3