Andrew Morton a écrit :
ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.12-rc1/2.6.12-rc1-mm1/


- We might have a fix here for the recent AGP/DRM problems. If you were having problems with that, please test and report.

+fix-agp_backend-usage-in-drm_agp_init.patch

Might fix the DRM problems

Hi Andrew,

After tracking down this bug in the X code, Mike Werner asked me to
change my patch so that we directly use agp_find_bridge instead of
defining a new wrapper (agp_backend_find).
A new patch is attached.

Note that agp-make-some-code-static.patch makes agp_find_bridge
static in drivers/char/agp/backend.c while my new patch exports it.
That's why I also attach a patch to revert this part of agp-make-some-code-static.patch.


Regards,
Brice


Signed-off-by: Brice Goglin <[EMAIL PROTECTED]>

--- linux-mm/include/linux/agp_backend.h.old	2005-03-21 11:08:33.000000000 +0100
+++ linux-mm/include/linux/agp_backend.h	2005-03-21 11:08:47.000000000 +0100
@@ -100,6 +100,7 @@ extern int agp_copy_info(struct agp_brid
 extern int agp_bind_memory(struct agp_memory *, off_t);
 extern int agp_unbind_memory(struct agp_memory *);
 extern void agp_enable(struct agp_bridge_data *, u32);
+extern struct agp_bridge_data *(*agp_find_bridge)(struct pci_dev *);
 extern struct agp_bridge_data *agp_backend_acquire(struct pci_dev *);
 extern void agp_backend_release(struct agp_bridge_data *);
 
--- linux-mm/drivers/char/agp/backend.c.old	2005-03-21 11:07:29.000000000 +0100
+++ linux-mm/drivers/char/agp/backend.c	2005-03-21 11:08:11.000000000 +0100
@@ -50,6 +50,7 @@ static struct agp_version agp_current_ve
 
 struct agp_bridge_data *(*agp_find_bridge)(struct pci_dev *) =
 	&agp_generic_find_bridge;
+EXPORT_SYMBOL(agp_find_bridge);
 
 struct agp_bridge_data *agp_bridge;
 LIST_HEAD(agp_bridges);
--- linux-mm/drivers/char/drm/drm_agpsupport.c.old	2005-03-21 11:08:59.000000000 +0100
+++ linux-mm/drivers/char/drm/drm_agpsupport.c	2005-03-21 11:09:25.000000000 +0100
@@ -387,12 +387,11 @@ drm_agp_head_t *drm_agp_init(drm_device_
 	if (!(head = drm_alloc(sizeof(*head), DRM_MEM_AGPLISTS)))
 		return NULL;
 	memset((void *)head, 0, sizeof(*head));
-	if (!(head->bridge = agp_backend_acquire(dev->pdev))) {
+	if (!(head->bridge = agp_find_bridge(dev->pdev))) {
 		drm_free(head, sizeof(*head), DRM_MEM_AGPLISTS);
 		return NULL;
 	}
 	agp_copy_info(head->bridge, &head->agp_info);
-	agp_backend_release(head->bridge);
 	if (head->agp_info.chipset == NOT_SUPPORTED) {
 		drm_free(head, sizeof(*head), DRM_MEM_AGPLISTS);
 		return NULL;
--- linux-mm/drivers/char/agp/backend.c.old	2005-03-21 11:07:29.000000000 +0100
+++ linux-mm/drivers/char/agp/backend.c	2005-03-21 11:08:11.000000000 +0100
@@ -50,7 +50,7 @@ static struct agp_version agp_current_ve
 	.minor = AGPGART_VERSION_MINOR,
 };
 
-static struct agp_bridge_data *(*agp_find_bridge)(struct pci_dev *) =
+struct agp_bridge_data *(*agp_find_bridge)(struct pci_dev *) =
 	&agp_generic_find_bridge;
 
 struct agp_bridge_data *agp_bridge;

Reply via email to