ChangeSet 1.1537.6.5, 2005/02/13 20:03:31-05:00, [EMAIL PROTECTED]

        [libata] do not call pci_disable_device() for certain errors
        
        If PCI request regions fails, then someone else is using the
        hardware we wish to use.  For that one case, calling 
pci_disable_device()
        is rather rude.



 ahci.c         |    8 ++++++--
 libata-core.c  |   18 ++++++++++++------
 sata_nv.c      |    8 ++++++--
 sata_promise.c |    8 ++++++--
 sata_sil.c     |    8 ++++++--
 sata_sis.c     |    8 ++++++--
 sata_svw.c     |    8 ++++++--
 sata_sx4.c     |    8 ++++++--
 sata_uli.c     |    8 ++++++--
 sata_via.c     |    8 ++++++--
 sata_vsc.c     |    8 ++++++--
 11 files changed, 72 insertions(+), 26 deletions(-)


diff -Nru a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c
--- a/drivers/scsi/ahci.c       2005-03-04 12:02:17 -08:00
+++ b/drivers/scsi/ahci.c       2005-03-04 12:02:17 -08:00
@@ -924,6 +924,7 @@
        unsigned long base;
        void *mmio_base;
        unsigned int board_idx = (unsigned int) ent->driver_data;
+       int pci_dev_busy = 0;
        int rc;
 
        VPRINTK("ENTER\n");
@@ -936,8 +937,10 @@
                return rc;
 
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               pci_dev_busy = 1;
                goto err_out;
+       }
 
        pci_enable_intx(pdev);
 
@@ -997,7 +1000,8 @@
 err_out_regions:
        pci_release_regions(pdev);
 err_out:
-       pci_disable_device(pdev);
+       if (!pci_dev_busy)
+               pci_disable_device(pdev);
        return rc;
 }
 
diff -Nru a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
--- a/drivers/scsi/libata-core.c        2005-03-04 12:02:17 -08:00
+++ b/drivers/scsi/libata-core.c        2005-03-04 12:02:17 -08:00
@@ -3674,6 +3674,7 @@
        struct ata_port_info *port[2];
        u8 tmp8, mask;
        unsigned int legacy_mode = 0;
+       int disable_dev_on_err = 1;
        int rc;
 
        DPRINTK("ENTER\n");
@@ -3704,18 +3705,22 @@
                return rc;
 
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               disable_dev_on_err = 0;
                goto err_out;
+       }
 
        if (legacy_mode) {
-               if (!request_region(0x1f0, 8, "libata"))
+               if (!request_region(0x1f0, 8, "libata")) {
+                       disable_dev_on_err = 0;
                        printk(KERN_WARNING "ata: 0x1f0 IDE port busy\n");
-               else
+               } else
                        legacy_mode |= (1 << 0);
 
-               if (!request_region(0x170, 8, "libata"))
+               if (!request_region(0x170, 8, "libata")) {
+                       disable_dev_on_err = 0;
                        printk(KERN_WARNING "ata: 0x170 IDE port busy\n");
-               else
+               } else
                        legacy_mode |= (1 << 1);
        }
 
@@ -3764,7 +3769,8 @@
                release_region(0x170, 8);
        pci_release_regions(pdev);
 err_out:
-       pci_disable_device(pdev);
+       if (disable_dev_on_err)
+               pci_disable_device(pdev);
        return rc;
 }
 
diff -Nru a/drivers/scsi/sata_nv.c b/drivers/scsi/sata_nv.c
--- a/drivers/scsi/sata_nv.c    2005-03-04 12:02:17 -08:00
+++ b/drivers/scsi/sata_nv.c    2005-03-04 12:02:17 -08:00
@@ -333,6 +333,7 @@
        struct nv_host *host;
        struct ata_port_info *ppi;
        struct ata_probe_ent *probe_ent;
+       int pci_dev_busy = 0;
        int rc;
        u32 bar;
 
@@ -351,8 +352,10 @@
                goto err_out;
 
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               pci_dev_busy = 1;
                goto err_out_disable;
+       }
 
        rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
        if (rc)
@@ -418,7 +421,8 @@
 err_out_regions:
        pci_release_regions(pdev);
 err_out_disable:
-       pci_disable_device(pdev);
+       if (!pci_dev_busy)
+               pci_disable_device(pdev);
 err_out:
        return rc;
 }
diff -Nru a/drivers/scsi/sata_promise.c b/drivers/scsi/sata_promise.c
--- a/drivers/scsi/sata_promise.c       2005-03-04 12:02:17 -08:00
+++ b/drivers/scsi/sata_promise.c       2005-03-04 12:02:17 -08:00
@@ -556,6 +556,7 @@
        unsigned long base;
        void *mmio_base;
        unsigned int board_idx = (unsigned int) ent->driver_data;
+       int pci_dev_busy = 0;
        int rc;
 
        if (!printed_version++)
@@ -570,8 +571,10 @@
                return rc;
 
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               pci_dev_busy = 1;
                goto err_out;
+       }
 
        rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
        if (rc)
@@ -645,7 +648,8 @@
 err_out_regions:
        pci_release_regions(pdev);
 err_out:
-       pci_disable_device(pdev);
+       if (!pci_dev_busy)
+               pci_disable_device(pdev);
        return rc;
 }
 
diff -Nru a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c
--- a/drivers/scsi/sata_sil.c   2005-03-04 12:02:17 -08:00
+++ b/drivers/scsi/sata_sil.c   2005-03-04 12:02:17 -08:00
@@ -337,6 +337,7 @@
        void *mmio_base;
        int rc;
        unsigned int i;
+       int pci_dev_busy = 0;
        u32 tmp, irq_mask;
 
        if (!printed_version++)
@@ -351,8 +352,10 @@
                return rc;
 
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               pci_dev_busy = 1;
                goto err_out;
+       }
 
        rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
        if (rc)
@@ -434,7 +437,8 @@
 err_out_regions:
        pci_release_regions(pdev);
 err_out:
-       pci_disable_device(pdev);
+       if (!pci_dev_busy)
+               pci_disable_device(pdev);
        return rc;
 }
 
diff -Nru a/drivers/scsi/sata_sis.c b/drivers/scsi/sata_sis.c
--- a/drivers/scsi/sata_sis.c   2005-03-04 12:02:17 -08:00
+++ b/drivers/scsi/sata_sis.c   2005-03-04 12:02:17 -08:00
@@ -201,14 +201,17 @@
        int rc;
        u32 genctl;
        struct ata_port_info *ppi;
+       int pci_dev_busy = 0;
 
        rc = pci_enable_device(pdev);
        if (rc)
                return rc;
 
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               pci_dev_busy = 1;
                goto err_out;
+       }
 
        rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
        if (rc)
@@ -255,7 +258,8 @@
        pci_release_regions(pdev);
 
 err_out:
-       pci_disable_device(pdev);
+       if (!pci_dev_busy)
+               pci_disable_device(pdev);
        return rc;
 
 }
diff -Nru a/drivers/scsi/sata_svw.c b/drivers/scsi/sata_svw.c
--- a/drivers/scsi/sata_svw.c   2005-03-04 12:02:17 -08:00
+++ b/drivers/scsi/sata_svw.c   2005-03-04 12:02:17 -08:00
@@ -339,6 +339,7 @@
        struct ata_probe_ent *probe_ent = NULL;
        unsigned long base;
        void *mmio_base;
+       int pci_dev_busy = 0;
        int rc;
 
        if (!printed_version++)
@@ -360,8 +361,10 @@
 
        /* Request PCI regions */
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               pci_dev_busy = 1;
                goto err_out;
+       }
 
        rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
        if (rc)
@@ -429,7 +432,8 @@
 err_out_regions:
        pci_release_regions(pdev);
 err_out:
-       pci_disable_device(pdev);
+       if (!pci_dev_busy)
+               pci_disable_device(pdev);
        return rc;
 }
 
diff -Nru a/drivers/scsi/sata_sx4.c b/drivers/scsi/sata_sx4.c
--- a/drivers/scsi/sata_sx4.c   2005-03-04 12:02:17 -08:00
+++ b/drivers/scsi/sata_sx4.c   2005-03-04 12:02:17 -08:00
@@ -1367,6 +1367,7 @@
        void *mmio_base, *dimm_mmio = NULL;
        struct pdc_host_priv *hpriv = NULL;
        unsigned int board_idx = (unsigned int) ent->driver_data;
+       int pci_dev_busy = 0;
        int rc;
 
        if (!printed_version++)
@@ -1381,8 +1382,10 @@
                return rc;
 
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               pci_dev_busy = 1;
                goto err_out;
+       }
 
        rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
        if (rc)
@@ -1467,7 +1470,8 @@
 err_out_regions:
        pci_release_regions(pdev);
 err_out:
-       pci_disable_device(pdev);
+       if (!pci_dev_busy)
+               pci_disable_device(pdev);
        return rc;
 }
 
diff -Nru a/drivers/scsi/sata_uli.c b/drivers/scsi/sata_uli.c
--- a/drivers/scsi/sata_uli.c   2005-03-04 12:02:17 -08:00
+++ b/drivers/scsi/sata_uli.c   2005-03-04 12:02:17 -08:00
@@ -186,14 +186,17 @@
        struct ata_port_info *ppi;
        int rc;
        unsigned int board_idx = (unsigned int) ent->driver_data;
+       int pci_dev_busy = 0;
 
        rc = pci_enable_device(pdev);
        if (rc)
                return rc;
 
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               pci_dev_busy = 1;
                goto err_out;
+       }
 
        rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
        if (rc)
@@ -256,7 +259,8 @@
        pci_release_regions(pdev);
 
 err_out:
-       pci_disable_device(pdev);
+       if (!pci_dev_busy)
+               pci_disable_device(pdev);
        return rc;
 
 }
diff -Nru a/drivers/scsi/sata_via.c b/drivers/scsi/sata_via.c
--- a/drivers/scsi/sata_via.c   2005-03-04 12:02:17 -08:00
+++ b/drivers/scsi/sata_via.c   2005-03-04 12:02:17 -08:00
@@ -291,6 +291,7 @@
        struct ata_probe_ent *probe_ent;
        int board_id = (int) ent->driver_data;
        const int *bar_sizes;
+       int pci_dev_busy = 0;
        u8 tmp8;
 
        if (!printed_version++)
@@ -301,8 +302,10 @@
                return rc;
 
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               pci_dev_busy = 1;
                goto err_out;
+       }
 
        if (board_id == vt6420) {
                pci_read_config_byte(pdev, SATA_PATA_SHARING, &tmp8);
@@ -356,7 +359,8 @@
 err_out_regions:
        pci_release_regions(pdev);
 err_out:
-       pci_disable_device(pdev);
+       if (!pci_dev_busy)
+               pci_disable_device(pdev);
        return rc;
 }
 
diff -Nru a/drivers/scsi/sata_vsc.c b/drivers/scsi/sata_vsc.c
--- a/drivers/scsi/sata_vsc.c   2005-03-04 12:02:17 -08:00
+++ b/drivers/scsi/sata_vsc.c   2005-03-04 12:02:17 -08:00
@@ -256,6 +256,7 @@
        static int printed_version;
        struct ata_probe_ent *probe_ent = NULL;
        unsigned long base;
+       int pci_dev_busy = 0;
        void *mmio_base;
        int rc;
 
@@ -275,8 +276,10 @@
        }
 
        rc = pci_request_regions(pdev, DRV_NAME);
-       if (rc)
+       if (rc) {
+               pci_dev_busy = 1;
                goto err_out;
+       }
 
        /*
         * Use 32 bit DMA mask, because 64 bit address support is poor.
@@ -348,7 +351,8 @@
 err_out_regions:
        pci_release_regions(pdev);
 err_out:
-       pci_disable_device(pdev);
+       if (!pci_dev_busy)
+               pci_disable_device(pdev);
        return rc;
 }
 
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-24" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to