Messages in this thread Patch in this message |  | | Date | Thu, 21 Sep 2000 02:01:49 -0500 | | From | "M.H.VanLeeuwen" <> | | Subject | [PATCH] ISAPNP using an invalid IO_APIC IRQ |
| |
Linus,
Is this patch acceptable?
info & patch below.
Martin ---------------------------------------------------------------- >>Jaroslav >> >>Basically, this patch discards any unusable IO_APIC IRQs from the list of IRQs >>that ISA PNP is trying to allocate from - but only if IO_APIC IRQs are available. >> >>Comments? >>Martin
Jaroslav Kysela wrote: > >It works only for i386. > >I suggest to add: > >#ifndef IO_APIC_IRQ I used CONFIG_X86_IO_APIC instead >#define IO_APIC_IRQ(x) >#define io_apic_irqs 0 >#endif > >Also, isapnp_proc.c shouldn't be changed. I prefer to see all possible >IRQs, although they can't be used. Feel free to post this patch to Linus >and lkml.
I left in the patch for isapnp_proc.c just in case...
> > Jaroslav updated patch
--- /home/mhvl/linux.orig/drivers/pnp/isapnp.c Tue Jul 25 20:25:14 2000 +++ /home/mhvl/linux/drivers/pnp/isapnp.c Wed Sep 20 20:59:56 2000 @@ -33,10 +33,10 @@ #include <linux/delay.h> #include <asm/io.h> #include <asm/dma.h> -#include <asm/irq.h> #include <linux/pci.h> #include <linux/init.h> #include <linux/isapnp.h> +#include <linux/irq.h>
LIST_HEAD(isapnp_cards); LIST_HEAD(isapnp_devices); @@ -48,6 +48,11 @@ #define ISAPNP_DEBUG #endif
+#ifndef CONFIG_X86_IO_APIC +#define IO_APIC_IRQ(x) 0 +#define io_apic_irqs 0 +#endif + struct resource *pidxr_res = NULL; struct resource *pnpwrp_res = NULL; struct resource *isapnp_rdp_res = NULL; @@ -1598,6 +1603,8 @@
if (irq < 0 || irq > 15) return 1; + if (!IO_APIC_IRQ(irq) && io_apic_irqs) + return 1; for (i = 0; i < 16; i++) { if (isapnp_reserve_irq[i] == irq) return 1; --- /home/mhvl/linux.orig/drivers/pnp/isapnp_proc.c Wed Jul 12 23:58:43 2000 +++ /home/mhvl/linux/drivers/pnp/isapnp_proc.c Tue Sep 19 17:52:25 2000 @@ -30,6 +30,12 @@ #include <asm/uaccess.h> #include <linux/smp_lock.h> #include <linux/isapnp.h> +#include <linux/irq.h> + +#ifndef CONFIG_X86_IO_APIC +#define IO_APIC_IRQ(x) 0 +#define io_apic_irqs 0 +#endif
struct isapnp_info_buffer { char *buffer; /* pointer to begin of buffer */ @@ -448,7 +454,7 @@
isapnp_printf(buffer, "%sIRQ ", space); for (i = 0; i < 16; i++) - if (irq->map & (1<<i)) { + if (irq->map & (1<<i) && (IO_APIC_IRQ(i) || !io_apic_irqs)) { if (!first) { isapnp_printf(buffer, ","); } else {
-------------------------------------------------------------------------- From previous e-mails "M.H.VanLeeuwen" wrote: > > Jaroslav Kysela wrote: > > > > On Tue, 29 Aug 2000, M.H.VanLeeuwen wrote: > > > > > With default BIOS settings, IRQ 5 is unavailable for ISA yet > > > it is being assigned by the ne.c driver and NFS root system > > > doesn't finish booting. > > > > > > Is this a driver problem or a ISAPNP problem? > > > > It is general IRQ manager problem. ISA PnP code cannot determine which > > interrupts cannot be used. I think that we need some next layer between > > IO APIC control code and Plug & Play routines to exchange this information > > to prevent allocation of a free but unuseable IRQ for ISA PnP devices. > > > > Jaroslav - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
|  |