[SCSI] ipr: SATA reset - wait for host reset completion
If an ipr adapter hits a fatal microcode error requiring a reset while a SATA device is going through EH, it can result in a command getting issued to the ipr adapter while it is getting reset, which can cause PCI bus errors. Wait for any outstanding adapter reset to finish prior to issuing a SATA device reset. Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
7feb6b3fbb
commit
73d98ff0fa
|
@ -3573,6 +3573,12 @@ static int ipr_sata_reset(struct ata_port *ap, unsigned int *classes)
|
||||||
|
|
||||||
ENTER;
|
ENTER;
|
||||||
spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
|
spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
|
||||||
|
while(ioa_cfg->in_reset_reload) {
|
||||||
|
spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
|
||||||
|
wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
|
||||||
|
spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
|
||||||
|
}
|
||||||
|
|
||||||
res = sata_port->res;
|
res = sata_port->res;
|
||||||
if (res) {
|
if (res) {
|
||||||
rc = ipr_device_reset(ioa_cfg, res);
|
rc = ipr_device_reset(ioa_cfg, res);
|
||||||
|
@ -4776,6 +4782,12 @@ static void ipr_ata_post_internal(struct ata_queued_cmd *qc)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(ioa_cfg->host->host_lock, flags);
|
spin_lock_irqsave(ioa_cfg->host->host_lock, flags);
|
||||||
|
while(ioa_cfg->in_reset_reload) {
|
||||||
|
spin_unlock_irqrestore(ioa_cfg->host->host_lock, flags);
|
||||||
|
wait_event(ioa_cfg->reset_wait_q, !ioa_cfg->in_reset_reload);
|
||||||
|
spin_lock_irqsave(ioa_cfg->host->host_lock, flags);
|
||||||
|
}
|
||||||
|
|
||||||
list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) {
|
list_for_each_entry(ipr_cmd, &ioa_cfg->pending_q, queue) {
|
||||||
if (ipr_cmd->qc == qc) {
|
if (ipr_cmd->qc == qc) {
|
||||||
ipr_device_reset(ioa_cfg, sata_port->res);
|
ipr_device_reset(ioa_cfg, sata_port->res);
|
||||||
|
|
Loading…
Reference in New Issue