On the libata side of things, does this patch produce any useful results?

        Jeff



diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 46c4cdb..4691f8d 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -4794,7 +4794,14 @@ ata_pci_init_native_mode(struct pci_dev 
                        pci_resource_start(pdev, 1) | ATA_PCI_CTL_OFS;
                probe_ent->port[p].bmdma_addr = pci_resource_start(pdev, 4);
                ata_std_ports(&probe_ent->port[p]);
-               p++;
+
+               if (pci_resource_start(pdev, 0) &&
+                   pci_resource_len(pdev, 0) &&
+                   pci_resource_start(pdev, 1) &&
+                   pci_resource_len(pdev, 1) &&
+                   pci_resource_start(pdev, 4) &&
+                   pci_resource_len(pdev, 4))
+                       p++;
        }
 
        if (ports & ATA_PORT_SECONDARY) {
@@ -4804,10 +4811,23 @@ ata_pci_init_native_mode(struct pci_dev 
                        pci_resource_start(pdev, 3) | ATA_PCI_CTL_OFS;
                probe_ent->port[p].bmdma_addr = pci_resource_start(pdev, 4) + 8;
                ata_std_ports(&probe_ent->port[p]);
-               p++;
+
+               if (pci_resource_start(pdev, 2) &&
+                   pci_resource_len(pdev, 2) &&
+                   pci_resource_start(pdev, 3) &&
+                   pci_resource_len(pdev, 3) &&
+                   pci_resource_start(pdev, 4) &&
+                   pci_resource_len(pdev, 4) > 8)
+                       p++;
        }
 
        probe_ent->n_ports = p;
+
+       if (p == 0) {
+               kfree(probe_ent);
+               probe_ent = NULL;
+       }
+
        return probe_ent;
 }
 
@@ -4815,6 +4835,10 @@ static struct ata_probe_ent *ata_pci_ini
 {
        struct ata_probe_ent *probe_ent;
 
+       if (!pci_resource_start(pdev, 4) ||
+           !pci_resource_len(pdev, 4))
+               return NULL;
+
        probe_ent = ata_probe_ent_alloc(pci_dev_to_dev(pdev), port);
        if (!probe_ent)
                return NULL;

Reply via email to