Solaris Nevada build 20 (for which we are about to release the source
drop) has the following significant bug (6302583):
http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6302583
One side effect of the bug is that 64 bit systems (sparcv9/amd64) will
not be able to start X. Depending on your framebuffer, you will see
errour messages indicating errour trying to load microcode. Example:
gfb: no microcode loader registered
gfb: zfb_ucode_wait timeout
or
jfb: Waiting for microcode to load
The following fix should resolve the bug:
**********************************************
------- usr/src/uts/common/os/modctl.c -------
--- - Fri Aug 5 18:51:53 2005
+++ usr/src/uts/common/os/modctl.c Fri Aug 5 18:48:49 2005
@@ -2262,7 +2262,6 @@
{
struct modctl *modp;
int retval;
- struct _buf *file;
/*
* Verify that that module in question actually exists on disk
@@ -2269,16 +2268,10 @@
* before allocation of module structure by mod_hold_by_name.
*/
if (modrootloaded && swaploaded) {
- file = kobj_open_path(name, usepath, 1);
-#ifdef MODDIR_SUFFIX
- if (file == (struct _buf *)-1)
- file = kobj_open_path(name, usepath, 0);
-#endif /* MODDIR_SUFFIX */
- if (file == (struct _buf *)-1) {
+ if (!kobj_path_exists(name, usepath)) {
*r = ENOENT;
return (NULL);
}
- kobj_close_file(file);
}
/*
------- usr/src/uts/common/sys/kobj.h -------
--- - Fri Aug 5 18:51:53 2005
+++ usr/src/uts/common/sys/kobj.h Fri Aug 5 18:48:50 2005
@@ -189,6 +189,7 @@
extern char *kobj_searchsym(struct module *, uintptr_t, ulong_t *);
extern intptr_t kobj_open(char *);
+extern int kobj_path_exists(char *, int);
extern struct _buf *kobj_open_path(char *, int, int);
extern int kobj_read(intptr_t, char *, unsigned int, unsigned int);
extern void kobj_close(intptr_t);
------- usr/src/uts/common/krtld/kobj.c -------
--- - Fri Aug 5 18:51:53 2005
+++ usr/src/uts/common/krtld/kobj.c Fri Aug 5 18:48:51 2005
@@ -3195,6 +3195,25 @@
}
/*
+ * Determine if the module exists.
+ */
+int
+kobj_path_exists(char *name, int use_path)
+{
+ struct _buf *file;
+
+ file = kobj_open_path(name, use_path, 1);
+#ifdef MODDIR_SUFFIX
+ if (file == (struct _buf *)-1)
+ file = kobj_open_path(name, use_path, 0);
+#endif /* MODDIR_SUFFIX */
+ if (file == (struct _buf *)-1)
+ return (0);
+ kobj_close_file(file);
+ return (1);
+}
+
+/*
* fullname is dynamically allocated to be able to hold the
* maximum size string that can be constructed from name.
* path is exactly like the shell PATH variable.
------- usr/src/uts/common/krtld/kobj_stubs.c -------
--- - Fri Aug 5 18:51:53 2005
+++ usr/src/uts/common/krtld/kobj_stubs.c Fri Aug 5 18:48:52 2005
@@ -55,6 +55,13 @@
{}
/*ARGSUSED*/
+int
+kobj_path_exists(char *name, int use_path)
+{
+ return (0);
+}
+
+/*ARGSUSED*/
struct _buf *
kobj_open_path(char *name, int use_path, int use_moddir_suffix)
{
------- usr/src/uts/common/krtld/mapfile -------
--- - Fri Aug 5 18:51:53 2005
+++ usr/src/uts/common/krtld/mapfile Fri Aug 5 18:48:52 2005
@@ -49,6 +49,7 @@
kobj_notify_remove;
kobj_open;
kobj_open_file;
+ kobj_path_exists;
kobj_open_path;
kobj_read;
kobj_read_file;
------- usr/src/uts/sparc/krtld/mapfile -------
--- - Fri Aug 5 18:51:53 2005
+++ usr/src/uts/sparc/krtld/mapfile Fri Aug 5 18:51:32 2005
@@ -48,6 +48,7 @@
kobj_notify_remove;
kobj_open;
kobj_open_file;
+ kobj_path_exists;
kobj_open_path;
kobj_read;
kobj_read_file;
--
stephen lau // [EMAIL PROTECTED] | 650.786.0845 | http://whacked.net
opensolaris // solaris kernel development
_______________________________________________
opensolaris-code mailing list
[email protected]
https://opensolaris.org:444/mailman/listinfo/opensolaris-code