[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