summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/advansys.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/advansys.c')
-rw-r--r--drivers/scsi/advansys.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c
index 315de3935..c67a96258 100644
--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -598,7 +598,7 @@
Erik Ratcliffe <erik@caldera.com> has done testing of the
AdvanSys driver in the Caldera releases.
- Rik van Riel <H.H.vanRiel@fys.ruu.nl> provided a patch to
+ Rik van Riel <H.H.vanRiel@phys.uu.nl> provided a patch to
AscWaitTixISRDone() which he found necessary to make the
driver work with a SCSI-1 disk.
@@ -668,6 +668,9 @@
#include <linux/blk.h>
#include <linux/stat.h>
#endif /* version >= v1.3.0 */
+#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(2,1,95)
+#include <asm/spinlock.h>
+#endif
#include "scsi.h"
#include "hosts.h"
#include "sd.h"
@@ -3841,8 +3844,11 @@ STATIC int asc_proc_copy(off_t, off_t, char *, int , char *, int);
#endif /* version >= v1.3.0 */
#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(1,3,70)
STATIC void advansys_interrupt(int, struct pt_regs *);
-#else /* version >= v1.3.70 */
+#elif LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,1,95)
+STATIC void advansys_interrupt(int, void *, struct pt_regs *);
+#else /* version >= 2.1.95 */
STATIC void advansys_interrupt(int, void *, struct pt_regs *);
+STATIC void do_advansys_interrupt(int, void *, struct pt_regs *);
#endif /* version >= v1.3.70 */
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89)
STATIC void advansys_select_queue_depths(struct Scsi_Host *,
@@ -4880,10 +4886,14 @@ advansys_detect(Scsi_Host_Template *tpnt)
#if LINUX_VERSION_CODE < ASC_LINUX_VERSION(1,3,70)
if ((ret = request_irq(shp->irq, advansys_interrupt,
SA_INTERRUPT, "advansys")) != 0)
-#else /* version >= v1.3.70 */
+#elif LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,1,95)
if ((ret = request_irq(shp->irq, advansys_interrupt,
SA_INTERRUPT | (share_irq == TRUE ? SA_SHIRQ : 0),
"advansys", boardp)) != 0)
+#else /* version >= 2.1.95 */
+ if ((ret = request_irq(shp->irq, do_advansys_interrupt,
+ SA_INTERRUPT | (share_irq == TRUE ? SA_SHIRQ : 0),
+ "advansys", boardp)) != 0)
#endif /* version >= v1.3.70 */
{
ASC_PRINT2(
@@ -6205,6 +6215,18 @@ advansys_interrupt(int irq, void *dev_id, struct pt_regs *regs)
return;
}
+#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(2,1,95)
+static void
+do_advansys_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&io_request_lock, flags);
+ advansys_interrupt(irq, dev_id, regs);
+ spin_unlock_irqrestore(&io_request_lock, flags);
+}
+#endif
+
#if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(1,3,89)
/*
* Set the number of commands to queue per device for the