diff options
author | James Smart <James.Smart@Emulex.Com> | 2006-12-02 13:34:56 -0500 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-12-03 10:31:04 -0500 |
commit | 4ff43246e45943200ae3233732adf8708c2faef6 (patch) | |
tree | 28204d5a11c4ca0de54c36a9e0bca9cfd3317f1c /drivers/scsi/lpfc/lpfc_init.c | |
parent | c7743956f8cb7b496c05d8444050eba908662a14 (diff) |
[SCSI] lpfc 8.1.11 : Add MSI (Message Signalled Interrupts) support
Add MSI (Message Signalled Interrupts) support
Actual use must be enabled via the new module parameter "lpfc_use_msi"
Defaults to no use
Many thanks to Frederic Temporelli who implemented the initial patch.
Signed-off-by: Frederic Temporelli <frederic.temporelli@ext.bull.net>
Signed-off-by: James Smart <James.Smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_init.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index 6b0718573ac5..71ee0cd32216 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -1653,6 +1653,14 @@ lpfc_pci_probe_one(struct pci_dev *pdev, const struct pci_device_id *pid) | |||
1653 | if (error) | 1653 | if (error) |
1654 | goto out_remove_host; | 1654 | goto out_remove_host; |
1655 | 1655 | ||
1656 | if (phba->cfg_use_msi) { | ||
1657 | error = pci_enable_msi(phba->pcidev); | ||
1658 | if (error) | ||
1659 | lpfc_printf_log(phba, KERN_INFO, LOG_INIT, "%d:0452 " | ||
1660 | "Enable MSI failed, continuing with " | ||
1661 | "IRQ\n", phba->brd_no); | ||
1662 | } | ||
1663 | |||
1656 | error = request_irq(phba->pcidev->irq, lpfc_intr_handler, IRQF_SHARED, | 1664 | error = request_irq(phba->pcidev->irq, lpfc_intr_handler, IRQF_SHARED, |
1657 | LPFC_DRIVER_NAME, phba); | 1665 | LPFC_DRIVER_NAME, phba); |
1658 | if (error) { | 1666 | if (error) { |
@@ -1732,6 +1740,7 @@ out_free_irq: | |||
1732 | lpfc_stop_timer(phba); | 1740 | lpfc_stop_timer(phba); |
1733 | phba->work_hba_events = 0; | 1741 | phba->work_hba_events = 0; |
1734 | free_irq(phba->pcidev->irq, phba); | 1742 | free_irq(phba->pcidev->irq, phba); |
1743 | pci_disable_msi(phba->pcidev); | ||
1735 | out_free_sysfs_attr: | 1744 | out_free_sysfs_attr: |
1736 | lpfc_free_sysfs_attr(phba); | 1745 | lpfc_free_sysfs_attr(phba); |
1737 | out_remove_host: | 1746 | out_remove_host: |
@@ -1798,6 +1807,7 @@ lpfc_pci_remove_one(struct pci_dev *pdev) | |||
1798 | 1807 | ||
1799 | /* Release the irq reservation */ | 1808 | /* Release the irq reservation */ |
1800 | free_irq(phba->pcidev->irq, phba); | 1809 | free_irq(phba->pcidev->irq, phba); |
1810 | pci_disable_msi(phba->pcidev); | ||
1801 | 1811 | ||
1802 | lpfc_cleanup(phba, 0); | 1812 | lpfc_cleanup(phba, 0); |
1803 | lpfc_stop_timer(phba); | 1813 | lpfc_stop_timer(phba); |