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;

