patch-2.1.96 linux/drivers/scsi/seagate.c

Next file: linux/drivers/scsi/sg.c
Previous file: linux/drivers/scsi/scsiiom.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.1.95/linux/drivers/scsi/seagate.c linux/drivers/scsi/seagate.c
@@ -91,6 +91,7 @@
 
 #include <asm/io.h>
 #include <asm/system.h>
+#include <asm/spinlock.h>
 #include <linux/signal.h>
 #include <linux/sched.h>
 #include <linux/string.h>
@@ -343,6 +344,7 @@
 
 static int hostno = -1;
 static void seagate_reconnect_intr (int, void *, struct pt_regs *);
+static void do_seagate_reconnect_intr (int, void *, struct pt_regs *);
 
 #ifdef FAST
 static int fast = 1;
@@ -505,7 +507,7 @@
  */
     instance = scsi_register (tpnt, 0);
     hostno = instance->host_no;
-    if (request_irq ((int) irq, seagate_reconnect_intr, SA_INTERRUPT,
+    if (request_irq ((int) irq, do_seagate_reconnect_intr, SA_INTERRUPT,
                 (controller_type == SEAGATE) ? "seagate" : "tmc-8xx", NULL))
     {
       printk ("scsi%d : unable to allocate IRQ%d\n", hostno, (int) irq);
@@ -630,6 +632,16 @@
  * host adapter.  This occurs on the interrupt triggered by the target
  * asserting SEL.
  */
+
+static void do_seagate_reconnect_intr (int irq, void *dev_id, 
+                                    struct pt_regs *regs)
+{
+  unsigned long flags;
+
+  spin_lock_irqsave(&io_request_lock, flags);
+  seagate_reconnect_intr(irq, dev_id, regs);
+  spin_unlock_irqrestore(&io_request_lock, flags);
+}
 
 static void seagate_reconnect_intr (int irq, void *dev_id, 
                                     struct pt_regs *regs)

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov