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,28 +9579,36 @@ static uint32_t qla4_8xxx_error_recovery(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); fn = PCI_FUNC(ha->pdev->devfn);
while (fn > 0) { if (is_qla8022(ha)) {
fn--; while (fn > 0) {
ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Finding PCI device at " fn--;
"func %x\n", ha->host_no, __func__, fn); ql4_printk(KERN_INFO, ha, "scsi%ld: %s: Finding PCI device at func %x\n",
/* Get the pci device given the domain, bus, ha->host_no, __func__, fn);
* slot/function number */ /* Get the pci device given the domain, bus,
other_pdev = * slot/function number */
pci_get_domain_bus_and_slot(pci_domain_nr(ha->pdev->bus), other_pdev = pci_get_domain_bus_and_slot(
ha->pdev->bus->number, PCI_DEVFN(PCI_SLOT(ha->pdev->devfn), pci_domain_nr(ha->pdev->bus),
fn)); ha->pdev->bus->number,
PCI_DEVFN(PCI_SLOT(ha->pdev->devfn),
if (!other_pdev) fn));
continue;
if (!other_pdev)
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);
break;
}
pci_dev_put(other_pdev); 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 /* The first function on the card, the reset owner will
......
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