[SCSI] allow sleeping in ->eh_bus_reset_handler()
[deliverable/linux.git] / drivers / scsi / fd_mcs.c
index 4a358aec2e597065e6d79dddddc478a275af41a8..fa652f8aa64392548ddf6097cec52a0a1e752e56 100644 (file)
@@ -1243,6 +1243,7 @@ static int fd_mcs_abort(Scsi_Cmnd * SCpnt)
 
 static int fd_mcs_bus_reset(Scsi_Cmnd * SCpnt) {
        struct Scsi_Host *shpnt = SCpnt->device->host;
+       unsigned long flags;
 
 #if DEBUG_RESET
        static int called_once = 0;
@@ -1259,6 +1260,8 @@ static int fd_mcs_bus_reset(Scsi_Cmnd * SCpnt) {
        called_once = 1;
 #endif
 
+       spin_lock_irqsave(shpnt->host_lock, flags);
+
        outb(1, SCSI_Cntl_port);
        do_pause(2);
        outb(0, SCSI_Cntl_port);
@@ -1266,6 +1269,8 @@ static int fd_mcs_bus_reset(Scsi_Cmnd * SCpnt) {
        outb(0, SCSI_Mode_Cntl_port);
        outb(PARITY_MASK, TMC_Cntl_port);
 
+       spin_unlock_irqrestore(shpnt->host_lock, flags);
+
        /* Unless this is the very first call (i.e., SCPnt == NULL), everything
           is probably hosed at this point.  We will, however, try to keep
           things going by informing the high-level code that we need help. */
This page took 0.023848 seconds and 5 git commands to generate.