[SCSI] ipr: PCI error recovery fix
Since the pci_block_user_cfg_access API was modified to track block/unblocks, it was discovered that the ipr driver had a path through its code (in PCI error recovery) which would unblock when not previously blocked. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
7dce0e1c84
commit
e619e1a7cb
@ -6308,7 +6308,6 @@ static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd)
|
|||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
ENTER;
|
ENTER;
|
||||||
pci_unblock_user_cfg_access(ioa_cfg->pdev);
|
|
||||||
rc = pci_restore_state(ioa_cfg->pdev);
|
rc = pci_restore_state(ioa_cfg->pdev);
|
||||||
|
|
||||||
if (rc != PCIBIOS_SUCCESSFUL) {
|
if (rc != PCIBIOS_SUCCESSFUL) {
|
||||||
@ -6348,6 +6347,24 @@ static int ipr_reset_restore_cfg_space(struct ipr_cmnd *ipr_cmd)
|
|||||||
return IPR_RC_JOB_CONTINUE;
|
return IPR_RC_JOB_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ipr_reset_bist_done - BIST has completed on the adapter.
|
||||||
|
* @ipr_cmd: ipr command struct
|
||||||
|
*
|
||||||
|
* Description: Unblock config space and resume the reset process.
|
||||||
|
*
|
||||||
|
* Return value:
|
||||||
|
* IPR_RC_JOB_CONTINUE
|
||||||
|
**/
|
||||||
|
static int ipr_reset_bist_done(struct ipr_cmnd *ipr_cmd)
|
||||||
|
{
|
||||||
|
ENTER;
|
||||||
|
pci_unblock_user_cfg_access(ipr_cmd->ioa_cfg->pdev);
|
||||||
|
ipr_cmd->job_step = ipr_reset_restore_cfg_space;
|
||||||
|
LEAVE;
|
||||||
|
return IPR_RC_JOB_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ipr_reset_start_bist - Run BIST on the adapter.
|
* ipr_reset_start_bist - Run BIST on the adapter.
|
||||||
* @ipr_cmd: ipr command struct
|
* @ipr_cmd: ipr command struct
|
||||||
@ -6370,7 +6387,7 @@ static int ipr_reset_start_bist(struct ipr_cmnd *ipr_cmd)
|
|||||||
ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
|
ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
|
||||||
rc = IPR_RC_JOB_CONTINUE;
|
rc = IPR_RC_JOB_CONTINUE;
|
||||||
} else {
|
} else {
|
||||||
ipr_cmd->job_step = ipr_reset_restore_cfg_space;
|
ipr_cmd->job_step = ipr_reset_bist_done;
|
||||||
ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT);
|
ipr_reset_start_timer(ipr_cmd, IPR_WAIT_FOR_BIST_TIMEOUT);
|
||||||
rc = IPR_RC_JOB_RETURN;
|
rc = IPR_RC_JOB_RETURN;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user