mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 02:39:48 +00:00
[SCSI] qla4xxx: Fixed AER reset sequence for ISP83xx/ISP84xx
Signed-off-by: Vikas Chaudhary <vikas.chaudhary@qlogic.com> Reviewed-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
32436aaa22
commit
daa34eb4a9
2 changed files with 28 additions and 19 deletions
|
@ -909,7 +909,8 @@ static inline int is_qla80XX(struct scsi_qla_host *ha)
|
|||
static inline int is_aer_supported(struct scsi_qla_host *ha)
|
||||
{
|
||||
return ((ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8022) ||
|
||||
(ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8324));
|
||||
(ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8324) ||
|
||||
(ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8042));
|
||||
}
|
||||
|
||||
static inline int adapter_up(struct scsi_qla_host *ha)
|
||||
|
|
|
@ -9579,28 +9579,36 @@ static uint32_t qla4_8xxx_error_recovery(struct scsi_qla_host *ha)
|
|||
}
|
||||
|
||||
fn = PCI_FUNC(ha->pdev->devfn);
|
||||
while (fn > 0) {
|
||||
fn--;
|
||||
ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Finding PCI device at "
|
||||
"func %x\n", ha->host_no, __func__, fn);
|
||||
/* Get the pci device given the domain, bus,
|
||||
* slot/function number */
|
||||
other_pdev =
|
||||
pci_get_domain_bus_and_slot(pci_domain_nr(ha->pdev->bus),
|
||||
ha->pdev->bus->number, PCI_DEVFN(PCI_SLOT(ha->pdev->devfn),
|
||||
fn));
|
||||
if (is_qla8022(ha)) {
|
||||
while (fn > 0) {
|
||||
fn--;
|
||||
ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Finding PCI device at func %x\n",
|
||||
ha->host_no, __func__, fn);
|
||||
/* Get the pci device given the domain, bus,
|
||||
* slot/function number */
|
||||
other_pdev = pci_get_domain_bus_and_slot(
|
||||
pci_domain_nr(ha->pdev->bus),
|
||||
ha->pdev->bus->number,
|
||||
PCI_DEVFN(PCI_SLOT(ha->pdev->devfn),
|
||||
fn));
|
||||
|
||||
if (!other_pdev)
|
||||
continue;
|
||||
if (!other_pdev)
|
||||
continue;
|
||||
|
||||
if (atomic_read(&other_pdev->enable_cnt)) {
|
||||
ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Found PCI "
|
||||
"func in enabled state%x\n", ha->host_no,
|
||||
__func__, fn);
|
||||
if (atomic_read(&other_pdev->enable_cnt)) {
|
||||
ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Found PCI func in enabled state%x\n",
|
||||
ha->host_no, __func__, fn);
|
||||
pci_dev_put(other_pdev);
|
||||
break;
|
||||
}
|
||||
pci_dev_put(other_pdev);
|
||||
break;
|
||||
}
|
||||
pci_dev_put(other_pdev);
|
||||
} else {
|
||||
/* this case is meant for ISP83xx/ISP84xx only */
|
||||
if (qla4_83xx_can_perform_reset(ha)) {
|
||||
/* reset fn as iSCSI is going to perform the reset */
|
||||
fn = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* The first function on the card, the reset owner will
|
||||
|
|
Loading…
Reference in a new issue