Commit 55814b74 authored by Bjorn Helgaas's avatar Bjorn Helgaas Committed by Dave Airlie

amd64-agp: run fallback when no bridges found, not when driver registration fails

I think the intent was that if no bridges matched agp_amd64_pci_table[],
we would fall back to checking for any bridge with the AGP capability.
But in the current code, we execute the fallback path only when
pci_register_driver() itself fails, which is unrelated to whether any
matching devices were found.

This patch counts the AGP bridges found in the probe() method and executes
the fallback path when none is found.
Signed-off-by: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 99d32bd5
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
static struct resource *aperture_resource; static struct resource *aperture_resource;
static int __initdata agp_try_unsupported = 1; static int __initdata agp_try_unsupported = 1;
static int agp_bridges_found;
static void amd64_tlbflush(struct agp_memory *temp) static void amd64_tlbflush(struct agp_memory *temp)
{ {
...@@ -489,6 +490,7 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev, ...@@ -489,6 +490,7 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev,
{ {
struct agp_bridge_data *bridge; struct agp_bridge_data *bridge;
u8 cap_ptr; u8 cap_ptr;
int err;
cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP); cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
if (!cap_ptr) if (!cap_ptr)
...@@ -536,7 +538,12 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev, ...@@ -536,7 +538,12 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev,
} }
pci_set_drvdata(pdev, bridge); pci_set_drvdata(pdev, bridge);
return agp_add_bridge(bridge); err = agp_add_bridge(bridge);
if (err < 0)
return err;
agp_bridges_found++;
return 0;
} }
static void __devexit agp_amd64_remove(struct pci_dev *pdev) static void __devexit agp_amd64_remove(struct pci_dev *pdev)
...@@ -713,7 +720,11 @@ int __init agp_amd64_init(void) ...@@ -713,7 +720,11 @@ int __init agp_amd64_init(void)
if (agp_off) if (agp_off)
return -EINVAL; return -EINVAL;
if (pci_register_driver(&agp_amd64_pci_driver) < 0) { err = pci_register_driver(&agp_amd64_pci_driver);
if (err < 0)
return err;
if (agp_bridges_found == 0) {
struct pci_dev *dev; struct pci_dev *dev;
if (!agp_try_unsupported && !agp_try_unsupported_boot) { if (!agp_try_unsupported && !agp_try_unsupported_boot) {
printk(KERN_INFO PFX "No supported AGP bridge found.\n"); printk(KERN_INFO PFX "No supported AGP bridge found.\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment