From b4722ec943b3c51e103aaf7c6c77fe7b9c2c716d Mon Sep 17 00:00:00 2001 From: Rik Faith Date: Thu, 20 Jul 2000 05:17:49 +0000 Subject: [PATCH] More fixups for kernel build: EXPORT_SYMTAB warning removal put_module_symbol clean up of tdfx tdfx_cleanup routine Makefile.kernel fix --- linux-core/Makefile.kernel | 4 ++-- linux-core/drmP.h | 1 + linux-core/i810_drv.c | 3 +++ linux-core/mga_drv.c | 3 +++ linux-core/r128_drv.c | 4 +++- linux-core/tdfx_drv.c | 13 ++++++++++--- linux/Makefile.kernel | 4 ++-- linux/agpsupport.c | 12 ++++++++++++ linux/drmP.h | 1 + linux/gamma_drv.c | 2 ++ linux/i810_drv.c | 3 +++ linux/mga_drv.c | 3 +++ linux/r128_drv.c | 4 +++- linux/tdfx_drv.c | 13 ++++++++++--- 14 files changed, 58 insertions(+), 12 deletions(-) diff --git a/linux-core/Makefile.kernel b/linux-core/Makefile.kernel index bf92d77..2937898 100644 --- a/linux-core/Makefile.kernel +++ b/linux-core/Makefile.kernel @@ -66,7 +66,7 @@ ifeq ($(CONFIG_DRM_R128),y) OX_OBJS += r128_drv.o O_OBJS += r128_context.o r128_bufs.o r128_dma.o else - ifeq ($(CONFIG_DRM_I810),m) + ifeq ($(CONFIG_DRM_R128),m) MIX_OBJS += r128_drv.o MI_OBJS += r128_context.o r128_bufs.o r128_dma.o M_OBJS += r128.o @@ -102,7 +102,7 @@ i810.o: i810_drv.o i810_context.o i810_bufs.o i810_dma.o $(L_OBJS) $(LD) $(LD_RFLAG) -r -o $@ i810_drv.o i810_bufs.o i810_dma.o \ i810_context.o $(L_OBJS) -r128.o: r128_drv.o r128_context.o r128_bufs.o $(L_OBJS) +r128.o: r128_drv.o r128_context.o r128_bufs.o r128_dma.o $(L_OBJS) $(LD) $(LD_RFLAG) -r -o $@ r128_drv.o r128_bufs.o r128_dma.o \ r128_context.o $(L_OBJS) diff --git a/linux-core/drmP.h b/linux-core/drmP.h index 866aabf..d8791bf 100644 --- a/linux-core/drmP.h +++ b/linux-core/drmP.h @@ -728,6 +728,7 @@ extern void drm_ctxbitmap_free(drm_device_t *dev, int ctx_handle); #ifdef DRM_AGP /* AGP/GART support (agpsupport.c) */ extern drm_agp_head_t *drm_agp_init(void); +extern void drm_agp_uninit(void); extern int drm_agp_acquire(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); extern int drm_agp_release(struct inode *inode, struct file *filp, diff --git a/linux-core/i810_drv.c b/linux-core/i810_drv.c index c01008e..d8c49a5 100644 --- a/linux-core/i810_drv.c +++ b/linux-core/i810_drv.c @@ -30,7 +30,9 @@ */ #include +#ifndef EXPORT_SYMTAB #define EXPORT_SYMTAB +#endif #include "drmP.h" #include "i810_drv.h" @@ -420,6 +422,7 @@ void i810_cleanup(void) drm_ctxbitmap_cleanup(dev); i810_takedown(dev); if (dev->agp) { + drm_agp_uninit(); drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS); dev->agp = NULL; } diff --git a/linux-core/mga_drv.c b/linux-core/mga_drv.c index 75f14be..30c8880 100644 --- a/linux-core/mga_drv.c +++ b/linux-core/mga_drv.c @@ -31,7 +31,9 @@ */ #include +#ifndef EXPORT_SYMTAB #define EXPORT_SYMTAB +#endif #include "drmP.h" #include "mga_drv.h" EXPORT_SYMBOL(mga_init); @@ -434,6 +436,7 @@ void mga_cleanup(void) mga_takedown(dev); if (dev->agp) { + drm_agp_uninit(); drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS); dev->agp = NULL; } diff --git a/linux-core/r128_drv.c b/linux-core/r128_drv.c index 125de17..e78d023 100644 --- a/linux-core/r128_drv.c +++ b/linux-core/r128_drv.c @@ -30,7 +30,9 @@ */ #include +#ifndef EXPORT_SYMTAB #define EXPORT_SYMTAB +#endif #include "drmP.h" #include "r128_drv.h" EXPORT_SYMBOL(r128_init); @@ -409,7 +411,7 @@ void r128_cleanup(void) r128_takedown(dev); #ifdef DRM_AGP if (dev->agp) { - /* FIXME -- free other information, too */ + drm_agp_uninit(); drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS); dev->agp = NULL; } diff --git a/linux-core/tdfx_drv.c b/linux-core/tdfx_drv.c index b8e2ec3..97bd418 100644 --- a/linux-core/tdfx_drv.c +++ b/linux-core/tdfx_drv.c @@ -31,7 +31,9 @@ */ #include +#ifndef EXPORT_SYMTAB #define EXPORT_SYMTAB +#endif #include "drmP.h" #include "tdfx_drv.h" EXPORT_SYMBOL(tdfx_init); @@ -241,9 +243,7 @@ static int tdfx_takedown(drm_device_t *dev) drm_free(temp, sizeof(*temp), DRM_MEM_AGPLISTS); temp = temp_next; } - if(dev->agp->acquired) (*drm_agp.release)(); - drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS); - dev->agp = NULL; + if (dev->agp->acquired) (*drm_agp.release)(); } #endif /* Clear vma list (only built for debugging) */ @@ -368,6 +368,13 @@ void tdfx_cleanup(void) } drm_ctxbitmap_cleanup(dev); tdfx_takedown(dev); +#ifdef DRM_AGP + if (dev->agp) { + drm_agp_uninit(); + drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS); + dev->agp = NULL; + } +#endif } int tdfx_version(struct inode *inode, struct file *filp, unsigned int cmd, diff --git a/linux/Makefile.kernel b/linux/Makefile.kernel index bf92d77..2937898 100644 --- a/linux/Makefile.kernel +++ b/linux/Makefile.kernel @@ -66,7 +66,7 @@ ifeq ($(CONFIG_DRM_R128),y) OX_OBJS += r128_drv.o O_OBJS += r128_context.o r128_bufs.o r128_dma.o else - ifeq ($(CONFIG_DRM_I810),m) + ifeq ($(CONFIG_DRM_R128),m) MIX_OBJS += r128_drv.o MI_OBJS += r128_context.o r128_bufs.o r128_dma.o M_OBJS += r128.o @@ -102,7 +102,7 @@ i810.o: i810_drv.o i810_context.o i810_bufs.o i810_dma.o $(L_OBJS) $(LD) $(LD_RFLAG) -r -o $@ i810_drv.o i810_bufs.o i810_dma.o \ i810_context.o $(L_OBJS) -r128.o: r128_drv.o r128_context.o r128_bufs.o $(L_OBJS) +r128.o: r128_drv.o r128_context.o r128_bufs.o r128_dma.o $(L_OBJS) $(LD) $(LD_RFLAG) -r -o $@ r128_drv.o r128_bufs.o r128_dma.o \ r128_context.o $(L_OBJS) diff --git a/linux/agpsupport.c b/linux/agpsupport.c index c89c3e2..628e8ca 100644 --- a/linux/agpsupport.c +++ b/linux/agpsupport.c @@ -313,3 +313,15 @@ drm_agp_head_t *drm_agp_init(void) } return head; } + +void drm_agp_uninit(void) +{ + drm_agp_fill_t *fill; + + for (fill = &drm_agp_fill[0]; fill->name; fill++) { +#if LINUX_VERSION_CODE >= 0x020400 + if ((*fill->f).address) put_module_symbol((*fill->f).address); +#endif + (*fill->f).address = 0; + } +} diff --git a/linux/drmP.h b/linux/drmP.h index 866aabf..d8791bf 100644 --- a/linux/drmP.h +++ b/linux/drmP.h @@ -728,6 +728,7 @@ extern void drm_ctxbitmap_free(drm_device_t *dev, int ctx_handle); #ifdef DRM_AGP /* AGP/GART support (agpsupport.c) */ extern drm_agp_head_t *drm_agp_init(void); +extern void drm_agp_uninit(void); extern int drm_agp_acquire(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); extern int drm_agp_release(struct inode *inode, struct file *filp, diff --git a/linux/gamma_drv.c b/linux/gamma_drv.c index cfe20ad..7290bc2 100644 --- a/linux/gamma_drv.c +++ b/linux/gamma_drv.c @@ -30,7 +30,9 @@ */ #include +#ifndef EXPORT_SYMTAB #define EXPORT_SYMTAB +#endif #include "drmP.h" #include "gamma_drv.h" #include diff --git a/linux/i810_drv.c b/linux/i810_drv.c index c01008e..d8c49a5 100644 --- a/linux/i810_drv.c +++ b/linux/i810_drv.c @@ -30,7 +30,9 @@ */ #include +#ifndef EXPORT_SYMTAB #define EXPORT_SYMTAB +#endif #include "drmP.h" #include "i810_drv.h" @@ -420,6 +422,7 @@ void i810_cleanup(void) drm_ctxbitmap_cleanup(dev); i810_takedown(dev); if (dev->agp) { + drm_agp_uninit(); drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS); dev->agp = NULL; } diff --git a/linux/mga_drv.c b/linux/mga_drv.c index 75f14be..30c8880 100644 --- a/linux/mga_drv.c +++ b/linux/mga_drv.c @@ -31,7 +31,9 @@ */ #include +#ifndef EXPORT_SYMTAB #define EXPORT_SYMTAB +#endif #include "drmP.h" #include "mga_drv.h" EXPORT_SYMBOL(mga_init); @@ -434,6 +436,7 @@ void mga_cleanup(void) mga_takedown(dev); if (dev->agp) { + drm_agp_uninit(); drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS); dev->agp = NULL; } diff --git a/linux/r128_drv.c b/linux/r128_drv.c index 125de17..e78d023 100644 --- a/linux/r128_drv.c +++ b/linux/r128_drv.c @@ -30,7 +30,9 @@ */ #include +#ifndef EXPORT_SYMTAB #define EXPORT_SYMTAB +#endif #include "drmP.h" #include "r128_drv.h" EXPORT_SYMBOL(r128_init); @@ -409,7 +411,7 @@ void r128_cleanup(void) r128_takedown(dev); #ifdef DRM_AGP if (dev->agp) { - /* FIXME -- free other information, too */ + drm_agp_uninit(); drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS); dev->agp = NULL; } diff --git a/linux/tdfx_drv.c b/linux/tdfx_drv.c index b8e2ec3..97bd418 100644 --- a/linux/tdfx_drv.c +++ b/linux/tdfx_drv.c @@ -31,7 +31,9 @@ */ #include +#ifndef EXPORT_SYMTAB #define EXPORT_SYMTAB +#endif #include "drmP.h" #include "tdfx_drv.h" EXPORT_SYMBOL(tdfx_init); @@ -241,9 +243,7 @@ static int tdfx_takedown(drm_device_t *dev) drm_free(temp, sizeof(*temp), DRM_MEM_AGPLISTS); temp = temp_next; } - if(dev->agp->acquired) (*drm_agp.release)(); - drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS); - dev->agp = NULL; + if (dev->agp->acquired) (*drm_agp.release)(); } #endif /* Clear vma list (only built for debugging) */ @@ -368,6 +368,13 @@ void tdfx_cleanup(void) } drm_ctxbitmap_cleanup(dev); tdfx_takedown(dev); +#ifdef DRM_AGP + if (dev->agp) { + drm_agp_uninit(); + drm_free(dev->agp, sizeof(*dev->agp), DRM_MEM_AGPLISTS); + dev->agp = NULL; + } +#endif } int tdfx_version(struct inode *inode, struct file *filp, unsigned int cmd, -- 2.7.4