All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] PCI legacy I/O port free driver - Making Emulex lpfc driver legacy I/O port free
@ 2007-05-10 10:18 Tomohiro Kusumi
  0 siblings, 0 replies; only message in thread
From: Tomohiro Kusumi @ 2007-05-10 10:18 UTC (permalink / raw)
  To: james.smart, gregkh; +Cc: linux-scsi, linux-kernel

Hi

As you can see in the "10. pci_enable_device_bars() and Legacy I/O
Port space" of the Documentation/pci.txt, the latest kernel has
interfaces for PCI device drivers to tell the kernel which resource
the driver want to use, ex. I/O port or MMIO.

I've made a patch which makes Emulex lpfc driver legacy I/O port
free by using the PCI core changes I mentioned above. The Emulex
lpfc driver can handle some of its devices without using I/O port.
So this patch changes the driver not to enable/request I/O port
region.

As a result, the driver can handle its device even when there are
huge number of PCI devices being used on the system and no I/O
port region assigned to the device.

Tomohiro Kusumi

Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@jp.fujitsu.com>

---
 lpfc_init.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff -uprN linux-2.6.21.orig/drivers/scsi/lpfc/lpfc_init.c linux-2.6.21/drivers/scsi/lpfc/lpfc_init.c
--- linux-2.6.21.orig/drivers/scsi/lpfc/lpfc_init.c	2007-04-26 12:08:32.000000000 +0900
+++ linux-2.6.21/drivers/scsi/lpfc/lpfc_init.c	2007-05-09 18:22:10.000000000 +0900
@@ -1419,10 +1419,11 @@ lpfc_pci_probe_one(struct pci_dev *pdev,
 	int error = -ENODEV, retval;
 	int i;
 	uint16_t iotag;
+	int bars = pci_select_bars(pdev, IORESOURCE_MEM);

-	if (pci_enable_device(pdev))
+	if (pci_enable_device_bars(pdev, bars))
 		goto out;
-	if (pci_request_regions(pdev, LPFC_DRIVER_NAME))
+	if (pci_request_selected_regions(pdev, bars, LPFC_DRIVER_NAME))
 		goto out_disable_device;

 	host = scsi_host_alloc(&lpfc_template, sizeof (struct lpfc_hba));
@@ -1734,7 +1735,7 @@ out_put_host:
 	phba->host = NULL;
 	scsi_host_put(host);
 out_release_regions:
-	pci_release_regions(pdev);
+	pci_release_selected_regions(pdev, bars);
 out_disable_device:
 	pci_disable_device(pdev);
 out:
@@ -1748,6 +1749,7 @@ lpfc_pci_remove_one(struct pci_dev *pdev
 	struct Scsi_Host   *host = pci_get_drvdata(pdev);
 	struct lpfc_hba    *phba = (struct lpfc_hba *)host->hostdata;
 	unsigned long iflag;
+	int bars = pci_select_bars(pdev, IORESOURCE_MEM);

 	lpfc_free_sysfs_attr(phba);

@@ -1792,7 +1794,7 @@ lpfc_pci_remove_one(struct pci_dev *pdev
 	iounmap(phba->ctrl_regs_memmap_p);
 	iounmap(phba->slim_memmap_p);

-	pci_release_regions(phba->pcidev);
+	pci_release_selected_regions(phba->pcidev, bars);
 	pci_disable_device(phba->pcidev);

 	idr_remove(&lpfc_hba_index, phba->brd_no);


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2007-05-10 10:19 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-10 10:18 [PATCH] PCI legacy I/O port free driver - Making Emulex lpfc driver legacy I/O port free Tomohiro Kusumi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.