aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/in2000.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/in2000.c')
-rw-r--r--drivers/scsi/in2000.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/drivers/scsi/in2000.c b/drivers/scsi/in2000.c
index 0bb0369efb2d..aed7e64865fa 100644
--- a/drivers/scsi/in2000.c
+++ b/drivers/scsi/in2000.c
@@ -1644,14 +1644,16 @@ static int in2000_bus_reset(Scsi_Cmnd * cmd)
1644 struct Scsi_Host *instance; 1644 struct Scsi_Host *instance;
1645 struct IN2000_hostdata *hostdata; 1645 struct IN2000_hostdata *hostdata;
1646 int x; 1646 int x;
1647 unsigned long flags;
1647 1648
1648 instance = cmd->device->host; 1649 instance = cmd->device->host;
1649 hostdata = (struct IN2000_hostdata *) instance->hostdata; 1650 hostdata = (struct IN2000_hostdata *) instance->hostdata;
1650 1651
1651 printk(KERN_WARNING "scsi%d: Reset. ", instance->host_no); 1652 printk(KERN_WARNING "scsi%d: Reset. ", instance->host_no);
1652 1653
1653 /* do scsi-reset here */ 1654 spin_lock_irqsave(instance->host_lock, flags);
1654 1655
1656 /* do scsi-reset here */
1655 reset_hardware(instance, RESET_CARD_AND_BUS); 1657 reset_hardware(instance, RESET_CARD_AND_BUS);
1656 for (x = 0; x < 8; x++) { 1658 for (x = 0; x < 8; x++) {
1657 hostdata->busy[x] = 0; 1659 hostdata->busy[x] = 0;
@@ -1668,21 +1670,12 @@ static int in2000_bus_reset(Scsi_Cmnd * cmd)
1668 hostdata->outgoing_len = 0; 1670 hostdata->outgoing_len = 0;
1669 1671
1670 cmd->result = DID_RESET << 16; 1672 cmd->result = DID_RESET << 16;
1671 return SUCCESS;
1672}
1673 1673
1674static int in2000_host_reset(Scsi_Cmnd * cmd) 1674 spin_unlock_irqrestore(instance->host_lock, flags);
1675{ 1675 return SUCCESS;
1676 return FAILED;
1677}
1678
1679static int in2000_device_reset(Scsi_Cmnd * cmd)
1680{
1681 return FAILED;
1682} 1676}
1683 1677
1684 1678static int __in2000_abort(Scsi_Cmnd * cmd)
1685static int in2000_abort(Scsi_Cmnd * cmd)
1686{ 1679{
1687 struct Scsi_Host *instance; 1680 struct Scsi_Host *instance;
1688 struct IN2000_hostdata *hostdata; 1681 struct IN2000_hostdata *hostdata;
@@ -1803,6 +1796,16 @@ static int in2000_abort(Scsi_Cmnd * cmd)
1803 return SUCCESS; 1796 return SUCCESS;
1804} 1797}
1805 1798
1799static int in2000_abort(Scsi_Cmnd * cmd)
1800{
1801 int rc;
1802
1803 spin_lock_irq(cmd->device->host->host_lock);
1804 rc = __in2000_abort(cmd);
1805 spin_unlock_irq(cmd->device->host->host_lock);
1806
1807 return rc;
1808}
1806 1809
1807 1810
1808#define MAX_IN2000_HOSTS 3 1811#define MAX_IN2000_HOSTS 3
@@ -2311,8 +2314,6 @@ static Scsi_Host_Template driver_template = {
2311 .queuecommand = in2000_queuecommand, 2314 .queuecommand = in2000_queuecommand,
2312 .eh_abort_handler = in2000_abort, 2315 .eh_abort_handler = in2000_abort,
2313 .eh_bus_reset_handler = in2000_bus_reset, 2316 .eh_bus_reset_handler = in2000_bus_reset,
2314 .eh_device_reset_handler = in2000_device_reset,
2315 .eh_host_reset_handler = in2000_host_reset,
2316 .bios_param = in2000_biosparam, 2317 .bios_param = in2000_biosparam,
2317 .can_queue = IN2000_CAN_Q, 2318 .can_queue = IN2000_CAN_Q,
2318 .this_id = IN2000_HOST_ID, 2319 .this_id = IN2000_HOST_ID,