Hi, Here's my 2nd try of the following post. http://marc.info/?l=linux-scsi&m=124962265606425&w=2 I made a patch for MegaRAID sas driver to make PCI legacy I/O port free. The way to make PCI legacy I/O port free is the same as Fusion-MPT driver's and it has been merged into 2.6.30.4. This has already been fixed in e1000 and lpfc. As a result of the above, the driver can handle its device even when there are a huge number of PCI devices being used on the system and no I/O port region assigned to the device. I'm not in the linux-scsi mailing list. Please reply to the following address. E-Mail: n-fujii@xxxxxxxxxxxxxxxxxx Thanks, Noriyuki Fujii
--- megaraid_sasOrg.c 2009-07-02 16:31:17.000000000 +0900 +++ megaraid_sasMod.c 2009-08-06 11:24:42.000000000 +0900 @@ -2573,7 +2573,9 @@ static int megasas_init_mfi(struct megas instance->base_addr = pci_resource_start(instance->pdev, 0); } - if (pci_request_regions(instance->pdev, "megasas: LSI")) { + if (pci_request_selected_regions(instance->pdev, + pci_select_bars(instance->pdev, IORESOURCE_MEM), + "megasas: LSI")) { printk(KERN_DEBUG "megasas: IO memory region busy!\n"); return -EBUSY; } @@ -2719,7 +2721,8 @@ static int megasas_init_mfi(struct megas iounmap(instance->reg_set); fail_ioremap: - pci_release_regions(instance->pdev); + pci_release_selected_regions(instance->pdev, + pci_select_bars(instance->pdev, IORESOURCE_MEM)); return -EINVAL; } @@ -2739,7 +2742,8 @@ static void megasas_release_mfi(struct m iounmap(instance->reg_set); - pci_release_regions(instance->pdev); + pci_release_selected_regions(instance->pdev, + pci_select_bars(instance->pdev, IORESOURCE_MEM)); } /** @@ -3049,7 +3053,7 @@ megasas_probe_one(struct pci_dev *pdev, /* * PCI prepping: enable device set bus mastering and dma mask */ - rval = pci_enable_device(pdev); + rval = pci_enable_device_mem(pdev); if (rval) { return rval; @@ -3343,7 +3347,7 @@ megasas_resume(struct pci_dev *pdev) /* * PCI prepping: enable device set bus mastering and dma mask */ - rval = pci_enable_device(pdev); + rval = pci_enable_device_mem(pdev); if (rval) { printk(KERN_INFO "megasas: Enable device failed\n");