Got it working, here's the scoop should anyone run into the same brick wall: 1) cleared out all previous fglrx stuff removed /lib/modules/fglrx directory rpm -e fglrx reboot 2) downloaded fglrx-4.3.0-3.9.0.i386.rpm rpm -Uvh --replacefiles fglrx-4.3.0-3.9.0.i386.rpm got an error message saying that I would have to compile my own kernel. got the patches (at end of file) vmalloc.patch fglrx-3.9.0-fc2.patch badPointer.patch ran the patch's patch -p1 -i /dir_to_patch/patchname.patch cd /lib/modules/fglrx/build_mod/ sh make.sh cd .. sh make_install.sh 3) Set up the XF86config file in /etc/X11 linked it to xorg.conf 4) reboot and it works. I'm getting around 1800 fps in glxgears on screen double that offscreen, I have no idea if that's good. And 350 fps in fgl_glxgears double that off screen. In any case it beats the 95 I was getting before. Hardware: amd 2400 athlon xp, a7n8x-vm 1gb ram. sapphire radeon 9600 atlantis. fedora core 2 (kernel 2.6.6-1.435) These patch files were obtained from from rage3d. I had no part in making them. This one seems to solve an invalid pointer issue, I'm curious as to where the issue originates. There is one patch that I'm not including (Too large) but here's a link: http://rambo.its.tudelft.nl/~ewald/patches/fglrx-3.9.0-fc2.patch (http://www.rage3d.com/board/showthread.php?s=&threadid=33737573) ----------------------------------------------------------------------------------- diff -uprN build_mod-mreg_new/agpgart_be.c build_mod-mreg_new-mm/agpgart_be.c --- build_mod-mreg_new/agpgart_be.c 2004-05-15 03:45:48.000000000 +0300 +++ build_mod-mreg_new-mm/agpgart_be.c 2004-05-15 03:18:30.000000000 +0300 @@ -1402,7 +1402,8 @@ unsigned long agp_generic_alloc_page(voi } #endif - atomic_inc(&page->count); + //atomic_inc(&page->count); + get_page(page); set_bit(PG_locked, &page->flags); atomic_inc(&agp_bridge.current_memory_agp); @@ -4413,7 +4414,8 @@ static unsigned long ali_alloc_page(void if (page == NULL) return 0; - atomic_inc(&page->count); + //atomic_inc(&page->count); + get_page(page); set_bit(PG_locked, &page->flags); atomic_inc(&agp_bridge.current_memory_agp); diff -uprN build_mod-mreg_new/firegl_public.c build_mod-mreg_new-mm/firegl_public.c --- build_mod-mreg_new/firegl_public.c 2004-05-15 03:45:06.000000000 +0300 +++ build_mod-mreg_new-mm/firegl_public.c 2004-05-15 03:25:13.000000000 +0300 @@ -2066,7 +2066,8 @@ static vm_nopage_ret_t vm_shm_nopage(str pMmPage = virt_to_page(kaddr); #endif /* LINUX_VERSION_CODE < 0x020400 */ - atomic_inc(&(pMmPage->count)); /* inc usage count of page */ + //atomic_inc(&(pMmPage->count)); /* inc usage count of page */ + get_page(pMmPage); #if LINUX_VERSION_CODE >= 0x020400 // __KE_DEBUG3("vm-address 0x%08lx => kernel-page-address 0x%p\n", ----------------------------------------------------------------------------------------- vmalloc.patch ----------------------------------------------------------------------------------------- diff -ruN build_mod.orig/firegl_public.c build_mod/firegl_public.c --- build_mod.orig/firegl_public.c 2003-09-05 00:45:33.539384168 +0200 +++ build_mod/firegl_public.c 2003-09-05 00:47:13.193234480 +0200 @@ -129,7 +129,9 @@ #define pte_offset pte_offset_map #endif #endif - +#ifndef VMALLOC_VMADDR +#define VMALLOC_VMADDR(x) ((unsigned long)(x)) +#endif // ============================================================ #ifndef TRUE #define TRUE 1 ------------------------------------------------------------------------------------------