printk("%s: abort, mbox %d, interrupt pending.\n",
ha->board_name, i);
- if (SCarg->eh_state == SCSI_STATE_TIMEOUT) {
- unmap_dma(i, ha);
- SCarg->host_scribble = NULL;
- ha->cp_stat[i] = FREE;
- printk
- ("%s, abort, mbox %d, eh_state timeout, pid %ld.\n",
- ha->board_name, i, SCarg->pid);
- return SUCCESS;
- }
-
return FAILED;
}
ha->board_name, SCarg->device->channel, SCarg->device->id,
SCarg->device->lun, SCarg->pid);
+ spin_lock_irq(shost->host_lock);
+
if (SCarg->host_scribble == NULL)
printk("%s: reset, pid %ld inactive.\n", ha->board_name, SCarg->pid);
if (ha->in_reset) {
printk("%s: reset, exit, already in reset.\n", ha->board_name);
+ spin_unlock_irq(shost->host_lock);
return FAILED;
}
if (wait_on_busy(shost->io_port, MAXLOOP)) {
printk("%s: reset, exit, timeout error.\n", ha->board_name);
+ spin_unlock_irq(shost->host_lock);
return FAILED;
}
if (do_dma(shost->io_port, 0, RESET_PIO)) {
printk("%s: reset, cannot reset, timeout error.\n", ha->board_name);
+ spin_unlock_irq(shost->host_lock);
return FAILED;
}
ha->in_reset = 1;
spin_unlock_irq(shost->host_lock);
+
+ /* FIXME: use a sleep instead */
time = jiffies;
while ((jiffies - time) < (10 * HZ) && limit++ < 200000)
udelay(100L);
+
spin_lock_irq(shost->host_lock);
printk("%s: reset, interrupts disabled, loops %d.\n", ha->board_name, limit);
else
printk("%s: reset, exit.\n", ha->board_name);
+ spin_unlock_irq(shost->host_lock);
return SUCCESS;
}