Commit daa34eb4 authored by Tej Parkash's avatar Tej Parkash Committed by James Bottomley

[SCSI] qla4xxx: Fixed AER reset sequence for ISP83xx/ISP84xx

Signed-off-by: default avatarVikas Chaudhary <vikas.chaudhary@qlogic.com>
Reviewed-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 32436aaa
...@@ -909,7 +909,8 @@ static inline int is_qla80XX(struct scsi_qla_host *ha) ...@@ -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) static inline int is_aer_supported(struct scsi_qla_host *ha)
{ {
return ((ha->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP8022) || 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) static inline int adapter_up(struct scsi_qla_host *ha)
......
...@@ -9579,29 +9579,37 @@ static uint32_t qla4_8xxx_error_recovery(struct scsi_qla_host *ha) ...@@ -9579,29 +9579,37 @@ static uint32_t qla4_8xxx_error_recovery(struct scsi_qla_host *ha)
} }
fn = PCI_FUNC(ha->pdev->devfn); fn = PCI_FUNC(ha->pdev->devfn);
if (is_qla8022(ha)) {
while (fn > 0) { while (fn > 0) {
fn--; fn--;
ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Finding PCI device at " ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Finding PCI device at func %x\n",
"func %x\n", ha->host_no, __func__, fn); ha->host_no, __func__, fn);
/* Get the pci device given the domain, bus, /* Get the pci device given the domain, bus,
* slot/function number */ * slot/function number */
other_pdev = other_pdev = pci_get_domain_bus_and_slot(
pci_get_domain_bus_and_slot(pci_domain_nr(ha->pdev->bus), pci_domain_nr(ha->pdev->bus),
ha->pdev->bus->number, PCI_DEVFN(PCI_SLOT(ha->pdev->devfn), ha->pdev->bus->number,
PCI_DEVFN(PCI_SLOT(ha->pdev->devfn),
fn)); fn));
if (!other_pdev) if (!other_pdev)
continue; continue;
if (atomic_read(&other_pdev->enable_cnt)) { if (atomic_read(&other_pdev->enable_cnt)) {
ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Found PCI " ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Found PCI func in enabled state%x\n",
"func in enabled state%x\n", ha->host_no, ha->host_no, __func__, fn);
__func__, fn);
pci_dev_put(other_pdev); pci_dev_put(other_pdev);
break; break;
} }
pci_dev_put(other_pdev); 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 /* The first function on the card, the reset owner will
* start & initialize the firmware. The other functions * start & initialize the firmware. The other functions
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment