* [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.