Hi there,

Please find attached 2x patches for gnumach (apply cleanly on debian gnumach).

The first patch combines all spls 1-7 into a single spl that disables all 
interrupts.
It boots with just this patch.

The second patch removes all concept of a cached PIC mask, and allows the PIC 
to remain
unmasked for all interrupts individually all the time (except when doing an 
EOI).

This simplifies the interrupt handling because if you need to disable 
interrupts in a driver,
all you need to do is call:

spl_t s = splhi();
/* Do your stuff here */
splx(s);

This also boots with linux drivers enabled on native hw,
and I tested it out by compiling gnumach while running this version with AHCI 
disk driver.

Damien
diff --git a/i386/i386/spl.S b/i386/i386/spl.S
index 307739f..20a8076 100644
--- a/i386/i386/spl.S
+++ b/i386/i386/spl.S
@@ -29,25 +29,6 @@
 #define mb
 #endif
 
-/*
- * Set IPL to the specified value.
- *
- * NOTE: Normally we would not have to enable interrupts
- * here.  Linux drivers, however, use cli()/sti(), so we must
- * guard against the case where a Mach routine which
- * has done an spl() calls a Linux routine that returns
- * with interrupts disabled.  A subsequent splx() can,
- * potentially, return with interrupts disabled.
- */
-#define SETIPL(level)                  \
-       mb;                             \
-       movl    $(level),%edx;          \
-       cmpl    EXT(curr_ipl),%edx;     \
-       jne     spl;                    \
-       sti;                            \
-       movl    %edx,%eax;              \
-       ret
-
 /*
  * Program PICs with mask in %eax.
  */
@@ -117,39 +98,37 @@ ENTRY(spl0)
        popl    %eax                    /* return previous mask */
        ret
 
+
+/*
+ * Historically, SETIPL(level) was called
+ * for spl levels 1-6, now we have combined
+ * all the intermediate levels into the highest level
+ * such that interrupts are either on or off,
+ * since modern hardware can handle it.
+ * This simplifies the interrupt handling
+ * especially for the linux drivers.
+ */
 Entry(splsoftclock)
 ENTRY(spl1)
-       SETIPL(SPL1)
-
 ENTRY(spl2)
-       SETIPL(SPL2)
-
 ENTRY(spl3)
-       SETIPL(SPL3)
-
 Entry(splnet)
 Entry(splhdw)
 ENTRY(spl4)
-       SETIPL(SPL4)
-
 Entry(splbio)
 Entry(spldcm)
 ENTRY(spl5)
-       SETIPL(SPL5)
-
 Entry(spltty)
 Entry(splimp)
 Entry(splvm)
 ENTRY(spl6)
-       SETIPL(SPL6)
-
 Entry(splclock)
 Entry(splsched)
 Entry(splhigh)
 Entry(splhi)
 ENTRY(spl7)
        mb;
-       /* ipl7 just clears IF */
+       /* just clear IF */
        movl    $SPL7,%eax
        xchgl   EXT(curr_ipl),%eax
        cli
diff --git a/i386/i386/pic.c b/i386/i386/pic.c
index e8c881a..ec80589 100644
--- a/i386/i386/pic.c
+++ b/i386/i386/pic.c
@@ -57,8 +57,6 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <i386/pio.h>
 
 spl_t  curr_ipl;
-int    pic_mask[NSPL];
-int    curr_pic_mask;
 
 int    iunit[NINTR] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
 
@@ -72,33 +70,18 @@ u_short PICM_ICW4, PICS_ICW4 ;
 /*
 ** picinit() - This routine
 **             * Establishes a table of interrupt vectors
-**             * Establishes a table of interrupt priority levels
-**             * Establishes a table of interrupt masks to be put
-**                     in the PICs.
 **             * Establishes location of PICs in the system
+**             * Unmasks all interrupts in the PICs
 **             * Initialises them
 **
 **     At this stage the interrupt functionality of this system should be
-**     coplete.
-**
+**     complete.
 */
 
-
 /*
-** 1. First we form a table of PIC masks - rather then calling form_pic_mask()
-**     each time there is a change of interrupt level - we will form a table
-**     of pic masks, as there are only 7 interrupt priority levels.
-**
-** 2. The next thing we must do is to determine which of the PIC interrupt
-**     request lines have to be masked out, this is done by calling
-**     form_pic_mask() with a (int_lev) of zero, this will find all the
-**     interrupt lines that have priority 0, (ie to be ignored).
-**     Then we split this up for the master/slave PICs.
-**
-** 2. Initialise the PICs , master first, then the slave.
-**     All the register field definitions are described in pic_jh.h, also
-**     the settings of these fields for the various registers are selected.
-**
+** Initialise the PICs , master first, then the slave.
+** All the register field definitions are described in pic.h also
+** the settings of these fields for the various registers are selected.
 */
 
 void
@@ -108,23 +91,13 @@ picinit(void)
        asm("cli");
 
        /*
-       ** 1. Form pic mask table
-       */
-#if 0
-       printf (" Let the console driver screw up this line ! \n");
-#endif
-
-       form_pic_mask();
-
-       /*
-       ** 1a. Select current SPL.
+       ** 0. Initialise the current level to match cli() 
        */
 
        curr_ipl = SPLHI;
-       curr_pic_mask = pic_mask[SPLHI];
 
        /*
-       ** 2. Generate addresses to each PIC port.
+       ** 1. Generate addresses to each PIC port.
        */
 
        master_icw = PIC_MASTER_ICW;
@@ -133,7 +106,7 @@ picinit(void)
        slaves_ocw = PIC_SLAVE_OCW;
 
        /*
-       ** 3. Select options for each ICW and each OCW for each PIC.
+       ** 2. Select options for each ICW and each OCW for each PIC.
        */
 
        PICM_ICW1 =
@@ -155,8 +128,8 @@ picinit(void)
        PICS_ICW4 =
        (SNF_MODE_DIS | NONBUFD_MODE | NRML_EOI_MOD | I8086_EMM_MOD);
 
-       PICM_OCW1 = (curr_pic_mask & 0x00FF);
-       PICS_OCW1 = ((curr_pic_mask & 0xFF00)>>8);
+       PICM_OCW1 = (PICMASK & 0x00FF);
+       PICS_OCW1 = ((PICMASK & 0xFF00)>>8);
 
        PICM_OCW2 = NON_SPEC_EOI;
        PICS_OCW2 = NON_SPEC_EOI;
@@ -164,9 +137,8 @@ picinit(void)
        PICM_OCW3 = (OCW_TEMPLATE | READ_NEXT_RD | READ_IR_ONRD );
        PICS_OCW3 = (OCW_TEMPLATE | READ_NEXT_RD | READ_IR_ONRD );
 
-
        /*
-       ** 4.   Initialise master - send commands to master PIC
+       ** 3.   Initialise master - send commands to master PIC
        */
 
        outb ( master_icw, PICM_ICW1 );
@@ -178,7 +150,7 @@ picinit(void)
        outb ( master_icw, PICM_OCW3 );
 
        /*
-       ** 5.   Initialise slave - send commands to slave PIC
+       ** 4.   Initialise slave - send commands to slave PIC
        */
 
        outb ( slaves_icw, PICS_ICW1 );
@@ -191,49 +163,10 @@ picinit(void)
        outb ( slaves_icw, PICS_OCW3 );
 
        /*
-       ** 6. Initialise interrupts
+       ** 5. Initialise interrupts
        */
        outb ( master_ocw, PICM_OCW1 );
 
-#if 0
-       printf(" spl set to %x \n", curr_pic_mask);
-#endif
-
-}
-
-
-/*
-** form_pic_mask(int_lvl)
-**
-**     For a given interrupt priority level (int_lvl), this routine goes out
-** and scans through the interrupt level table, and forms a mask based on the
-** entries it finds there that have the same or lower interrupt priority level
-** as (int_lvl). It returns a 16-bit mask which will have to be split up 
between
-** the 2 pics.
-**
-*/
-
-#if    defined(AT386)
-#define SLAVEMASK       (0xFFFF ^ SLAVE_ON_IR2)
-#endif /* defined(AT386) */
-
-#define SLAVEACTV      0xFF00
-
-void
-form_pic_mask(void)
-{
-       unsigned int i, j, bit, mask;
-
-       for (i=SPL0; i < NSPL; i++) {
-               for (j=0x00, bit=0x01, mask = 0; j < NINTR; j++, bit<<=1)
-                       if (intpri[j] <= i)
-                               mask |= bit;
-
-               if ((mask & SLAVEACTV) != SLAVEACTV )
-                       mask &= SLAVEMASK;
-
-               pic_mask[i] = mask;
-       }
 }
 
 void
diff --git a/i386/i386/pic.h b/i386/i386/pic.h
index 80bf65d..abf0993 100644
--- a/i386/i386/pic.h
+++ b/i386/i386/pic.h
@@ -176,11 +176,18 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #define READ_IR_ONRD           0x00
 #define READ_IS_ONRD           0x01
 
+/*
+ * The mask registers will be set only once at boot:
+ * PICMASK contains the final mask to be split among the two PICs
+ */
+#if defined(AT386)
+#define PICMASK                        (0x0000 ^ SLAVE_ON_IR2)
+#else
+#define PICMASK                        0x0000
+#endif
+
 #ifndef __ASSEMBLER__
-extern void form_pic_mask (void);
 extern void picinit (void);
-extern int curr_pic_mask;
-extern int pic_mask[];
 extern void prtnull(int unit);
 extern void intnull(int unit);
 #endif /* __ASSEMBLER__ */
diff --git a/i386/i386/pit.c b/i386/i386/pit.c
index da68330..b5b811a 100644
--- a/i386/i386/pit.c
+++ b/i386/i386/pit.c
@@ -71,7 +71,6 @@ clkstart(void)
        unsigned long s;
 
        intpri[0] = SPLHI;
-       form_pic_mask();
 
        s = sploff();         /* disable interrupts */
 
diff --git a/i386/i386/spl.S b/i386/i386/spl.S
index 20a8076..215142c 100644
--- a/i386/i386/spl.S
+++ b/i386/i386/spl.S
@@ -19,7 +19,6 @@
 
 #include <mach/machine/asm.h>
 #include <i386/ipl.h>
-#include <i386/pic.h>
 #include <i386/i386asm.h>
 #include <i386/xen.h>
 
@@ -30,20 +29,9 @@
 #endif
 
 /*
- * Program PICs with mask in %eax.
+ * Program XEN evt masks from %eax.
  */
-#ifndef        MACH_XEN
-#define SETMASK()                              \
-       cmpl    EXT(curr_pic_mask),%eax;        \
-       je      9f;                             \
-       outb    %al,$(PIC_MASTER_OCW);          \
-       movl    %eax,EXT(curr_pic_mask);        \
-       movb    %ah,%al;                        \
-       outb    %al,$(PIC_SLAVE_OCW);           \
-9:
-#else  /* MACH_XEN */
-#define pic_mask int_mask
-#define SETMASK()                              \
+#define XEN_SETMASK()                          \
        pushl   %ebx;                           \
        movl    %eax,%ebx;                      \
        xchgl   %eax,hyp_shared_info+EVTMASK;   \
@@ -55,7 +43,6 @@
 lock   orl     $1,hyp_shared_info+CPU_PENDING_SEL; /* Yes, activate it */ \
        movb    $1,hyp_shared_info+CPU_PENDING; \
 9:
-#endif /* MACH_XEN */
 
 ENTRY(spl0)
        mb;
@@ -90,9 +77,11 @@ ENTRY(spl0)
        cmpl    $(SPL0),EXT(curr_ipl)   /* are we at spl0? */
        je      1f                      /* yes, all done */
        movl    $(SPL0),EXT(curr_ipl)   /* set ipl */
-       movl    EXT(pic_mask)+SPL0*4,%eax
-                                       /* get PIC mask */
-       SETMASK()                       /* program PICs with new mask */
+#ifdef MACH_XEN
+       movl    EXT(int_mask)+SPL0*4,%eax
+                                       /* get xen mask */
+       XEN_SETMASK()                   /* program xen evts */
+#endif
 1:
        sti                             /* enable interrupts */
        popl    %eax                    /* return previous mask */
@@ -129,9 +118,9 @@ Entry(splhi)
 ENTRY(spl7)
        mb;
        /* just clear IF */
-       movl    $SPL7,%eax
-       xchgl   EXT(curr_ipl),%eax
        cli
+       movl    $SPL7,%eax
+       xchgl   EXT(curr_ipl),%eax
        ret
 
 ENTRY(splx)
@@ -202,9 +191,11 @@ splx_cli:
        cmpl    EXT(curr_ipl),%edx      /* same ipl as current? */
        je      1f                      /* yes, all done */
        movl    %edx,EXT(curr_ipl)      /* set ipl */
-       movl    EXT(pic_mask)(,%edx,4),%eax
-                                       /* get PIC mask */
-       SETMASK()                       /* program PICs with new mask */
+#ifdef MACH_XEN
+       movl    EXT(int_mask)(,%edx,4),%eax
+                                       /* get int mask */
+       XEN_SETMASK()                   /* program xen evts with new mask */
+#endif
 1:
        ret
 
@@ -229,11 +220,15 @@ spl:
 #endif /* (MACH_KDB || MACH_TTD) && !MACH_XEN */
        cmpl    $SPL7,%edx              /* spl7? */
        je      EXT(spl7)               /* yes, handle specially */
-       movl    EXT(pic_mask)(,%edx,4),%eax
-                                       /* get PIC mask */
+#ifdef MACH_XEN
+       movl    EXT(int_mask)(,%edx,4),%eax
+                                       /* get int mask */
+#endif
        cli                             /* disable interrupts */
        xchgl   EXT(curr_ipl),%edx      /* set ipl */
-       SETMASK()                       /* program PICs with new mask */
+#ifdef MACH_XEN
+       XEN_SETMASK()                   /* program PICs with new mask */
+#endif
        sti                             /* enable interrupts */
        movl    %edx,%eax               /* return previous ipl */
        ret
diff --git a/i386/i386at/autoconf.c b/i386/i386at/autoconf.c
index 908c3ec..6ed2270 100644
--- a/i386/i386at/autoconf.c
+++ b/i386/i386at/autoconf.c
@@ -130,7 +130,6 @@ void take_dev_irq(
                iunit[pic] = dev->unit;
                ivect[pic] = dev->intr;
                intpri[pic] = (int)dev->sysdep;
-               form_pic_mask();
        } else {
                printf("The device below will clobber IRQ %d.\n", pic);
                printf("You have two devices at the same IRQ.\n");
@@ -151,7 +150,6 @@ void take_ctlr_irq(
                iunit[pic] = ctlr->unit;
                ivect[pic] = ctlr->intr;
                intpri[pic] = (int)ctlr->sysdep;
-               form_pic_mask();
        } else {
                printf("The device below will clobber IRQ %d.\n", pic);
                printf("You have two devices at the same IRQ.  This won't 
work.\n");
diff --git a/i386/i386at/interrupt.S b/i386/i386at/interrupt.S
index cdb385c..8a4cd73 100644
--- a/i386/i386at/interrupt.S
+++ b/i386/i386at/interrupt.S
@@ -42,11 +42,18 @@ ENTRY(interrupt)
        cli                             /* XXX no more nested interrupts */
        popl    %eax                    /* restore irq number */
        movl    %eax,%ecx               /* copy irq number */
+       movb    $0xff,%al               /* mask for all interrupts */
+       outb    %al,$(PIC_MASTER_OCW)   /* mask master out */
+       outb    %al,$(PIC_SLAVE_OCW)    /* mask slave out */
+       movl    %ecx,%eax               /* restore eax */
        movb    $(NON_SPEC_EOI),%al     /* non-specific EOI */
        outb    %al,$(PIC_MASTER_ICW)   /* ack interrupt to master */
        cmpl    $8,%ecx                 /* do we need to ack slave? */
        jl      1f                      /* no, skip it */
        outb    %al,$(PIC_SLAVE_ICW)
 1:
+       movb    $0,%al                  /* empty mask */
+       outb    %al,$(PIC_MASTER_OCW)   /* unmask master */
+       outb    %al,$(PIC_SLAVE_OCW)    /* unmask slave */
        ret                             /* return */
 END(interrupt)
diff --git a/i386/i386at/kd_mouse.c b/i386/i386at/kd_mouse.c
index 20a8c88..0528005 100644
--- a/i386/i386at/kd_mouse.c
+++ b/i386/i386at/kd_mouse.c
@@ -228,7 +228,6 @@ kd_mouse_open(
        ivect[mouse_pic] = kdintr;
        oldspl = intpri[mouse_pic];
        intpri[mouse_pic] = SPL6;
-       form_pic_mask();
        splx(s);
 }
 
@@ -291,7 +290,6 @@ kd_mouse_close(
 
        ivect[mouse_pic] = oldvect;
        intpri[mouse_pic] = oldspl;
-       form_pic_mask();
        splx(s);
 }
 
diff --git a/linux/dev/arch/i386/kernel/irq.c b/linux/dev/arch/i386/kernel/irq.c
index 99c9ca7..43c0a0f 100644
--- a/linux/dev/arch/i386/kernel/irq.c
+++ b/linux/dev/arch/i386/kernel/irq.c
@@ -154,50 +154,16 @@ linux_intr (int irq)
   intr_count--;
 }
 
-/*
- * Mask an IRQ.
- */
 static inline void
 mask_irq (unsigned int irq_nr)
 {
-  int i;
-
-  for (i = 0; i < intpri[irq_nr]; i++)
-    pic_mask[i] |= 1 << irq_nr;
-
-  if (curr_pic_mask != pic_mask[curr_ipl])
-    {
-      curr_pic_mask = pic_mask[curr_ipl];
-      if (irq_nr < 8)
-       outb (curr_pic_mask & 0xff, PIC_MASTER_OCW);
-      else
-       outb (curr_pic_mask >> 8, PIC_SLAVE_OCW);
-    }
+  /* empty */
 }
 
-/*
- * Unmask an IRQ.
- */
 static inline void
 unmask_irq (unsigned int irq_nr)
 {
-  int mask, i;
-
-  mask = 1 << irq_nr;
-  if (irq_nr >= 8)
-    mask |= 1 << 2;
-
-  for (i = 0; i < intpri[irq_nr]; i++)
-    pic_mask[i] &= ~mask;
-
-  if (curr_pic_mask != pic_mask[curr_ipl])
-    {
-      curr_pic_mask = pic_mask[curr_ipl];
-      if (irq_nr < 8)
-       outb (curr_pic_mask & 0xff, PIC_MASTER_OCW);
-      else
-       outb (curr_pic_mask >> 8, PIC_SLAVE_OCW);
-    }
+  /* empty */
 }
 
 void
@@ -430,7 +396,7 @@ probe_irq_on (void)
   for (delay = jiffies + HZ / 10; delay > jiffies;)
     ;
 
-  return (irqs & ~curr_pic_mask);
+  return (irqs & ~PICMASK);
 }
 
 /*
@@ -443,7 +409,7 @@ probe_irq_off (unsigned long irqs)
 
   assert (curr_ipl == 0);
 
-  irqs &= curr_pic_mask;
+  irqs &= PICMASK;
 
   /*
    * Disable unnecessary IRQs.
@@ -816,8 +782,6 @@ init_IRQ (void)
        }
     }
   
-  form_pic_mask ();
-  
   /*
    * Enable interrupts.
    */
@@ -856,6 +820,5 @@ restore_IRQ (void)
    */
   ivect[0] = old_clock_handler;
   intpri[0] = old_clock_pri;
-  form_pic_mask ();
 }
   
diff --git a/linux/dev/drivers/block/ahci.c b/linux/dev/drivers/block/ahci.c
index 3cb003c..59eb5bc 100644
--- a/linux/dev/drivers/block/ahci.c
+++ b/linux/dev/drivers/block/ahci.c
@@ -16,6 +16,8 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#include <i386/spl.h>
+
 #include <ahci.h>
 #include <kern/assert.h>
 #include <linux/kernel.h>
@@ -612,15 +614,17 @@ static int ahci_identify(const volatile struct ahci_host 
*ahci_host, const volat
        timeout = jiffies + WAIT_MAX;
        while (readl(&ahci_port->tfd) & (BUSY_STAT | DRQ_STAT))
                if (jiffies > timeout) {
-                       printk("sd%u: timeout waiting for ready\n", port-ports);
+                       printk("sd%u: timeout waiting for ready0\n", 
port-ports);
                        port->ahci_host = NULL;
                        port->ahci_port = NULL;
                        return 3;
                }
 
+       /* Disable interrupts */
        save_flags(flags);
        cli();
 
+
        port->identify = 1;
        port->status = 0;
 
@@ -634,7 +638,7 @@ static int ahci_identify(const volatile struct ahci_host 
*ahci_host, const volat
        add_timer(&identify_timer);
        while (!port->status) {
                if (jiffies >= timeout) {
-                       printk("sd%u: timeout waiting for ready\n", port-ports);
+                       printk("sd%u: timeout waiting for ready1\n", 
port-ports);
                        port->ahci_host = NULL;
                        port->ahci_port = NULL;
                        del_timer(&identify_timer);
diff --git a/linux/dev/include/asm-i386/system.h 
b/linux/dev/include/asm-i386/system.h
index f26a33e..41eb65a 100644
--- a/linux/dev/include/asm-i386/system.h
+++ b/linux/dev/include/asm-i386/system.h
@@ -1,6 +1,8 @@
 #ifndef __ASM_SYSTEM_H
 #define __ASM_SYSTEM_H
 
+#include <i386/ipl.h> /* curr_ipl, splx */
+
 #include <asm/segment.h>
 
 /*
@@ -223,10 +225,8 @@ static inline unsigned long __xchg(unsigned long x, void * 
ptr, int size)
 #define mb()  __asm__ __volatile__ (""   : : :"memory")
 #define __sti() __asm__ __volatile__ ("sti": : :"memory")
 #define __cli() __asm__ __volatile__ ("cli": : :"memory")
-#define __save_flags(x) \
-__asm__ __volatile__("pushf ; pop %0" : "=r" (x): /* no input */ :"memory")
-#define __restore_flags(x) \
-__asm__ __volatile__("push %0 ; popf": /* no output */ :"g" (x):"memory")
+#define __save_flags(x) (x = ((curr_ipl > 0) ? 0 : (1 << 9)))
+#define __restore_flags(x) splx((x & (1 << 9)) ? 0 : 7)
 
 #ifdef __SMP__
 
diff --git a/linux/dev/init/main.c b/linux/dev/init/main.c
index 3740c12..6d85395 100644
--- a/linux/dev/init/main.c
+++ b/linux/dev/init/main.c
@@ -151,7 +151,6 @@ linux_init (void)
   linux_net_emulation_init ();
 #endif
 
-  cli ();
   device_setup ();
 
 #ifdef CONFIG_PCMCIA
diff --git a/linux/dev/kernel/sched.c b/linux/dev/kernel/sched.c
index 87906a4..2a9eeb3 100644
--- a/linux/dev/kernel/sched.c
+++ b/linux/dev/kernel/sched.c
@@ -622,6 +622,6 @@ linux_timer_intr (void)
     mark_bh (TQUEUE_BH);
 #if 0
   if (linux_timer_print)
-    printf ("linux_timer_intr: pic_mask[0] %x\n", pic_mask[0]);
+    printf ("linux_timer_intr: hello\n");
 #endif
 }
diff --git a/linux/src/drivers/block/ide.c b/linux/src/drivers/block/ide.c
index dc20fcb..1b9757e 100644
--- a/linux/src/drivers/block/ide.c
+++ b/linux/src/drivers/block/ide.c
@@ -2702,6 +2702,8 @@ static int try_to_identify (ide_drive_t *drive, byte cmd)
        int irq_off;
 
        if (!HWIF(drive)->irq) {                /* already got an IRQ? */
+               printk("%s: Not probing legacy IRQs)\n", drive->name);
+               return 2;
                probe_irq_off(probe_irq_on());  /* clear dangling irqs */
                irqs_on = probe_irq_on();       /* start monitoring irqs */
                OUT_BYTE(drive->ctl,IDE_CONTROL_REG);   /* enable device irq */
diff --git a/linux/src/drivers/scsi/NCR53c406a.c 
b/linux/src/drivers/scsi/NCR53c406a.c
index 9f2de9a..7745f5a 100644
--- a/linux/src/drivers/scsi/NCR53c406a.c
+++ b/linux/src/drivers/scsi/NCR53c406a.c
@@ -525,7 +525,7 @@ NCR53c406a_detect(Scsi_Host_Template * tpnt){
     
 #ifndef IRQ_LEV
     if (irq_level < 0) {               /* LILO override if >= 0*/
-        irq_level=irq_probe();
+        irq_level = -1; // XXX No probing irq_probe();
         if (irq_level < 0) {           /* Trouble */
             printk("NCR53c406a: IRQ problem, irq_level=%d, giving up\n", 
irq_level);
             return 0;

Reply via email to