Re: Question about XFree86 4.5.99.901 snapshot

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 08, 2006 at 05:54:02PM -0500, David Dawes wrote:
>On Wed, Mar 08, 2006 at 08:23:17AM -0800, Tom Williams wrote:
>>Hi!  I just installed the XFree86 4.5.99.901 snapshot (which fixed my
>>xterm installation problem, thanks guys!  :)) and it runs fine.  I
>>wanted to try the "-autoconfig" option to see what it would do and it
>>generated these messages:
>
>Autoconfigure works by loading a bunch of drivers, using the one
>that proves to be the best choice, and unloading the others.
>
>The problem is that fbdev registers that it needs fbdevhw.  When
>it is unloaded it doesn't notify the loader that fbdevhw is no
>longer needed.  Since the nv driver refers to fbdevhw (even though
>it isn't using it), these references are being reported as fatal
>unresolved symbols.
>
>The new loader now invalidates symbol references to modules that
>have been unloaded.  To fix this problem, the fbdev module (and all
>modules, really) needs to be modified to register its fbdevhw
>requirements as being specific to itself so that those requirements
>get removed when it is unloaded.
>
>I'll take a look at doing this, and post a patch.
>
>Tom, thanks for reporting the problem!

The attached patch should fix this problem.

David
Index: fbdev.c
===================================================================
RCS file: /home/dhd-cvs/xc/programs/Xserver/hw/xfree86/drivers/fbdev/fbdev.c,v
retrieving revision 1.1.1.6.2.3
diff -u -r1.1.1.6.2.3 fbdev.c
--- fbdev.c	8 Aug 2005 23:38:36 -0000	1.1.1.6.2.3
+++ fbdev.c	9 Mar 2006 01:40:39 -0000
@@ -176,6 +176,8 @@
 	NULL
 };
 
+static void *fbdevModule = NULL;
+
 #ifdef XFree86LOADER
 
 MODULESETUPPROTO(FBDevSetup);
@@ -204,8 +206,9 @@
 	if (!setupDone) {
 		setupDone = TRUE;
 		xf86AddDriver(&FBDEV, module, 0);
-		LoaderRefSymLists(afbSymbols, fbSymbols,
-				  shadowSymbols, fbdevHWSymbols, NULL);
+		LoaderModRefSymLists(module, afbSymbols, fbSymbols,
+				     shadowSymbols, fbdevHWSymbols, NULL);
+		fbdevModule = module;
 		return (pointer)1;
 	} else {
 		if (errmaj) *errmaj = LDR_ONCEONLY;
@@ -293,7 +296,7 @@
 	if (!xf86LoadDrvSubModule(drv, "fbdevhw"))
 	    return FALSE;
 
-	xf86LoaderReqSymLists(fbdevHWSymbols, NULL);
+	xf86LoaderModReqSymLists(fbdevModule, fbdevHWSymbols, NULL);
 
 	for (i = 0; i < numDevSections; i++) {
 	    Bool isIsa = FALSE;
@@ -577,7 +580,7 @@
 		return FALSE;
 	}
 	if (mod && syms) {
-		xf86LoaderReqSymLists(syms, NULL);
+		xf86LoaderModReqSymLists(fbdevModule, syms, NULL);
 	}
 
 	/* Load shadow if needed */
@@ -587,7 +590,7 @@
 			FBDevFreeRec(pScrn);
 			return FALSE;
 		}
-		xf86LoaderReqSymLists(shadowSymbols, NULL);
+		xf86LoaderModReqSymLists(fbdevModule, shadowSymbols, NULL);
 	}
 
 	TRACE_EXIT("PreInit");

[Index of Archives]     [X Forum]     [Xorg]     [XFree86 Newbie]     [IETF Announce]     [Security]     [Font Config]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux Kernel]

  Powered by Linux