[kernel] r15692 - in dists/sid/linux-2.6/debian: . patches/bugfix/x86 patches/series
Ben Hutchings
benh at alioth.debian.org
Sun May 16 22:14:41 UTC 2010
Author: benh
Date: Sun May 16 22:14:39 2010
New Revision: 15692
Log:
amd64-agp: Probe unknown AGP devices the right way (Closes: #548090)
Added:
dists/sid/linux-2.6/debian/patches/bugfix/x86/amd64-agp-Probe-unknown-AGP-devices-the-right-way.patch
Modified:
dists/sid/linux-2.6/debian/changelog
dists/sid/linux-2.6/debian/patches/series/13
Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog Sun May 16 22:14:19 2010 (r15691)
+++ dists/sid/linux-2.6/debian/changelog Sun May 16 22:14:39 2010 (r15692)
@@ -40,6 +40,7 @@
* V4L/DVB: budget: Select correct frontend drivers (Closes: #575223)
* 3c503: Fix IRQ probing (Closes: #566522)
* sis-agp: Remove SIS 760, handled by amd64-agp
+ * amd64-agp: Probe unknown AGP devices the right way (Closes: #548090)
[ Aurelien Jarno ]
* mips/swarm: fix boot from IDE based media (Sebastian Andrzej Siewior)
Added: dists/sid/linux-2.6/debian/patches/bugfix/x86/amd64-agp-Probe-unknown-AGP-devices-the-right-way.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/bugfix/x86/amd64-agp-Probe-unknown-AGP-devices-the-right-way.patch Sun May 16 22:14:39 2010 (r15692)
@@ -0,0 +1,89 @@
+Subject: [PATCH 2/2] amd64-agp: Probe unknown AGP devices the right way
+From: Ben Hutchings <ben at decadent.org.uk>
+To: David Airlie <airlied at linux.ie>
+Cc: FUJITA Tomonori <fujita.tomonori at lab.ntt.co.jp>, Greg Kroah-Hartman <gregkh at suse.de>, LKML <linux-kernel at vger.kernel.org>
+Date: Wed, 24 Mar 2010 03:36:32 +0000
+
+The current initialisation code probes 'unsupported' AGP devices
+simply by calling its own probe function. It does not lock these
+devices or even check whether another driver is already bound to
+them.
+
+We must use the device core to manage this. So if the specific
+device id table didn't match anything and agp_try_unsupported=1,
+switch the device id table and call driver_attach() again.
+
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ drivers/char/agp/amd64-agp.c | 27 +++++++++++++++------------
+ 1 files changed, 15 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c
+index fd50ead..93f56d6 100644
+--- a/drivers/char/agp/amd64-agp.c
++++ b/drivers/char/agp/amd64-agp.c
+@@ -499,6 +499,10 @@ static int __devinit agp_amd64_probe(struct pci_dev *pdev,
+ u8 cap_ptr;
+ int err;
+
++ /* The Highlander principle */
++ if (agp_bridges_found)
++ return -ENODEV;
++
+ cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
+ if (!cap_ptr)
+ return -ENODEV;
+@@ -562,6 +566,8 @@ static void __devexit agp_amd64_remove(struct pci_dev *pdev)
+ amd64_aperture_sizes[bridge->aperture_size_idx].size);
+ agp_remove_bridge(bridge);
+ agp_put_bridge(bridge);
++
++ agp_bridges_found--;
+ }
+
+ #ifdef CONFIG_PM
+@@ -709,6 +715,11 @@ static struct pci_device_id agp_amd64_pci_table[] = {
+
+ MODULE_DEVICE_TABLE(pci, agp_amd64_pci_table);
+
++static DEFINE_PCI_DEVICE_TABLE(agp_amd64_pci_promisc_table) = {
++ { PCI_DEVICE_CLASS(0, 0) },
++ { }
++};
++
+ static struct pci_driver agp_amd64_pci_driver = {
+ .name = "agpgart-amd64",
+ .id_table = agp_amd64_pci_table,
+@@ -734,7 +745,6 @@ int __init agp_amd64_init(void)
+ return err;
+
+ if (agp_bridges_found == 0) {
+- struct pci_dev *dev;
+ if (!agp_try_unsupported && !agp_try_unsupported_boot) {
+ printk(KERN_INFO PFX "No supported AGP bridge found.\n");
+ #ifdef MODULE
+@@ -750,17 +760,10 @@ int __init agp_amd64_init(void)
+ return -ENODEV;
+
+ /* Look for any AGP bridge */
+- dev = NULL;
+- err = -ENODEV;
+- for_each_pci_dev(dev) {
+- if (!pci_find_capability(dev, PCI_CAP_ID_AGP))
+- continue;
+- /* Only one bridge supported right now */
+- if (agp_amd64_probe(dev, NULL) == 0) {
+- err = 0;
+- break;
+- }
+- }
++ agp_amd64_pci_driver.id_table = agp_amd64_pci_promisc_table;
++ err = driver_attach(&agp_amd64_pci_driver.driver);
++ if (err == 0 && agp_bridges_found == 0)
++ err = -ENODEV;
+ }
+ return err;
+ }
+--
+1.7.0
+
Modified: dists/sid/linux-2.6/debian/patches/series/13
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/13 Sun May 16 22:14:19 2010 (r15691)
+++ dists/sid/linux-2.6/debian/patches/series/13 Sun May 16 22:14:39 2010 (r15692)
@@ -34,3 +34,4 @@
+ bugfix/all/3c503-Fix-IRQ-probing.patch
+ features/all/input-add-support-of-synaptics-clickpad-device.patch
+ bugfix/x86/sis-agp-Remove-SIS-760-handled-by-amd64-agp.patch
++ bugfix/x86/amd64-agp-Probe-unknown-AGP-devices-the-right-way.patch
More information about the Kernel-svn-changes
mailing list