summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/ultrastor.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/ultrastor.c')
-rw-r--r--drivers/scsi/ultrastor.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/scsi/ultrastor.c b/drivers/scsi/ultrastor.c
index 20f90e6e0..793875190 100644
--- a/drivers/scsi/ultrastor.c
+++ b/drivers/scsi/ultrastor.c
@@ -137,6 +137,7 @@
#include <asm/io.h>
#include <asm/bitops.h>
#include <asm/system.h>
+#include <asm/spinlock.h>
#include <asm/dma.h>
#define ULTRASTOR_PRIVATE /* Get the private stuff from ultrastor.h */
@@ -294,6 +295,7 @@ static const unsigned short ultrastor_ports_14f[] = {
#endif
static void ultrastor_interrupt(int, void *, struct pt_regs *);
+static void do_ultrastor_interrupt(int, void *, struct pt_regs *);
static inline void build_sg_list(struct mscp *, Scsi_Cmnd *SCpnt);
@@ -507,7 +509,7 @@ static int ultrastor_14f_detect(Scsi_Host_Template * tpnt)
config.mscp_free = ~0;
#endif
- if (request_irq(config.interrupt, ultrastor_interrupt, 0, "Ultrastor", NULL)) {
+ if (request_irq(config.interrupt, do_ultrastor_interrupt, 0, "Ultrastor", NULL)) {
printk("Unable to allocate IRQ%u for UltraStor controller.\n",
config.interrupt);
return FALSE;
@@ -577,7 +579,7 @@ static int ultrastor_24f_detect(Scsi_Host_Template * tpnt)
printk("U24F: invalid IRQ\n");
return FALSE;
}
- if (request_irq(config.interrupt, ultrastor_interrupt, 0, "Ultrastor", NULL))
+ if (request_irq(config.interrupt, do_ultrastor_interrupt, 0, "Ultrastor", NULL))
{
printk("Unable to allocate IRQ%u for UltraStor controller.\n",
config.interrupt);
@@ -1157,6 +1159,15 @@ static void ultrastor_interrupt(int irq, void *dev_id, struct pt_regs *regs)
#endif
}
+static void do_ultrastor_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&io_request_lock, flags);
+ ultrastor_interrupt(irq, dev_id, regs);
+ spin_unlock_irqrestore(&io_request_lock, flags);
+}
+
#ifdef MODULE
/* Eventually this will go into an include file, but this will be later */
Scsi_Host_Template driver_template = ULTRASTOR_14F;