Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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

parent 32436aaa
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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)
+27 −19
Original line number Diff line number Diff line
@@ -9579,29 +9579,37 @@ static uint32_t qla4_8xxx_error_recovery(struct scsi_qla_host *ha)
	}

	fn = PCI_FUNC(ha->pdev->devfn);
	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);
			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),
			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 (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);
				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);
		}
	} 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
	 * start & initialize the firmware. The other functions