Bradley Chapman <[EMAIL PROTECTED]> wrote: > > > --- fix/include/linux/agp_backend.h 2003-11-06 00:50:03.247046605 +0100 > > +++ linux-2.6.0-test9-mm2/include/linux/agp_backend.h 2003-11-06 > > 00:42:38.936727765 +0100 > > @@ -108,8 +108,7 @@ typedef struct { > > int (*copy_info)(struct agp_kern_info *); > > } drm_agp_t; > > > > -/* Used by drm. */ > > -extern const drm_agp_t agp_drm; > > +extern const drm_agp_t *drm_agp_p; > > > > #endif /* __KERNEL__ */ > > #endif /* _AGP_BACKEND_H */ > > > > This patch has fixed the bug introduced by the original module dependency fix > in 2.6.0-test9-mm2. >
But it still generates a warning: drivers/char/drm/drm_agpsupport.h: In function `i810_agp_init': drivers/char/drm/drm_agpsupport.h:398: warning: assignment from incompatible pointer type Because DRM_AGP_GET returns a `const drm_agp_t **' and tries to assign that to a `const drm_agp_t *'. Here's the patch which I currently have. I must say that I'm getting rather bored of it :( Maybe the problem lies in symbol_get(). It is strange that it adds an extra pointer-to in the return type. From: Rusty Russell <[EMAIL PROTECTED]>, "Ronny V. Vindenes" <[EMAIL PROTECTED]> DRM has a soft dependency on AGP (it will use it if it's there). Instead of using inter_module_register et. al, simply export the symbol from agp, and use symbol_get() and symbol_put in DRM. drivers/char/agp/backend.c | 7 ++----- drivers/char/drm/drm_agpsupport.h | 4 ++-- include/linux/agp_backend.h | 6 +----- 3 files changed, 5 insertions(+), 12 deletions(-) diff -puN drivers/char/agp/backend.c~drm-agp-module-dependency-fix drivers/char/agp/backend.c --- 25/drivers/char/agp/backend.c~drm-agp-module-dependency-fix 2003-11-09 22:58:13.000000000 -0800 +++ 25-akpm/drivers/char/agp/backend.c 2003-11-09 22:58:13.000000000 -0800 @@ -214,7 +214,7 @@ static void agp_backend_cleanup(struct a phys_to_virt(bridge->scratch_page_real)); } -static const drm_agp_t drm_agp = { +const drm_agp_t drm_agp = { &agp_free_memory, &agp_allocate_memory, &agp_bind_memory, @@ -224,6 +224,7 @@ static const drm_agp_t drm_agp = { &agp_backend_release, &agp_copy_info }; +EXPORT_SYMBOL(drm_agp); /* XXX Kludge alert: agpgart isn't ready for multiple bridges yet */ struct agp_bridge_data *agp_alloc_bridge(void) @@ -274,9 +275,6 @@ int agp_add_bridge(struct agp_bridge_dat goto frontend_err; } - /* FIXME: What to do with this? */ - inter_module_register("drm_agp", THIS_MODULE, &drm_agp); - agp_count++; return 0; @@ -295,7 +293,6 @@ void agp_remove_bridge(struct agp_bridge bridge->type = NOT_SUPPORTED; agp_frontend_cleanup(); agp_backend_cleanup(bridge); - inter_module_unregister("drm_agp"); agp_count--; module_put(bridge->driver->owner); } diff -puN drivers/char/drm/drm_agpsupport.h~drm-agp-module-dependency-fix drivers/char/drm/drm_agpsupport.h --- 25/drivers/char/drm/drm_agpsupport.h~drm-agp-module-dependency-fix 2003-11-09 22:58:13.000000000 -0800 +++ 25-akpm/drivers/char/drm/drm_agpsupport.h 2003-11-10 00:14:34.000000000 -0800 @@ -37,8 +37,8 @@ #if __REALLY_HAVE_AGP -#define DRM_AGP_GET (drm_agp_t *)inter_module_get("drm_agp") -#define DRM_AGP_PUT inter_module_put("drm_agp") +#define DRM_AGP_GET symbol_get(drm_agp) +#define DRM_AGP_PUT symbol_put(drm_agp) /** * Pointer to the drm_agp_t structure made available by the agpgart module. diff -puN include/linux/agp_backend.h~drm-agp-module-dependency-fix include/linux/agp_backend.h --- 25/include/linux/agp_backend.h~drm-agp-module-dependency-fix 2003-11-09 22:58:13.000000000 -0800 +++ 25-akpm/include/linux/agp_backend.h 2003-11-10 00:14:34.000000000 -0800 @@ -96,11 +96,7 @@ extern void agp_enable(u32); extern int agp_backend_acquire(void); extern void agp_backend_release(void); -/* - * Interface between drm and agp code. When agp initializes, it makes - * the below structure available via inter_module_register(), drm might - * use it. Keith Owens <[EMAIL PROTECTED]> 28 Oct 2000. - */ +/* Interface between drm and agp code. */ typedef struct { void (*free_memory)(struct agp_memory *); struct agp_memory * (*allocate_memory)(size_t, u32); _ ------------------------------------------------------- This SF.Net email sponsored by: ApacheCon 2003, 16-19 November in Las Vegas. Learn firsthand the latest developments in Apache, PHP, Perl, XML, Java, MySQL, WebDAV, and more! http://www.apachecon.com/ _______________________________________________ Dri-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/dri-devel