| [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");
[X Forum] [Xorg] [Devices] [XFree86] [XFree86 Newbie] [Site Home] [IETF Annouce] [Security] [Fontconfig] [Bugtraq] [Rubini] [Photo] [Yosemite] [MIPS Linux] [ARM Linux] [Linux Security] [Video for Linux] [Linux RAID] [Linux Resources]