diff options
Diffstat (limited to 'drivers/scsi/advansys.c')
-rw-r--r-- | drivers/scsi/advansys.c | 28 |
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 |