Many architectures call initmsgbuf() really really early, before uvm is
authorkettenis <kettenis@openbsd.org>
Tue, 13 Jan 2015 18:51:27 +0000 (18:51 +0000)
committerkettenis <kettenis@openbsd.org>
Tue, 13 Jan 2015 18:51:27 +0000 (18:51 +0000)
initialized.  Calling malloc(9) at that point is not a good idea.  So
initialize consbuf later.

Fixes dmesg -s on sparc64 (and probably a few other architectures).

ok miod@, deraadt@

sys/kern/init_main.c
sys/kern/subr_log.c
sys/sys/msgbuf.h

index b517006..4c32b6a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: init_main.c,v 1.231 2014/12/31 15:32:05 jsing Exp $   */
+/*     $OpenBSD: init_main.c,v 1.232 2015/01/13 18:51:27 kettenis Exp $        */
 /*     $NetBSD: init_main.c,v 1.84.4.1 1996/06/02 09:08:06 mrg Exp $   */
 
 /*
@@ -72,6 +72,7 @@
 #include <sys/msg.h>
 #endif
 #include <sys/domain.h>
+#include <sys/msgbuf.h>
 #include <sys/mbuf.h>
 #include <sys/pipe.h>
 #include <sys/task.h>
@@ -405,6 +406,8 @@ main(void *framep)
        if_attachdomain();
        splx(s);
 
+       initconsbuf();
+
 #ifdef GPROF
        /* Initialize kernel profiling. */
        kmstartup();
index 6720d5e..8a4746f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: subr_log.c,v 1.26 2015/01/13 10:07:58 mpf Exp $       */
+/*     $OpenBSD: subr_log.c,v 1.27 2015/01/13 18:51:27 kettenis Exp $  */
 /*     $NetBSD: subr_log.c,v 1.11 1996/03/30 22:24:44 christos Exp $   */
 
 /*
@@ -117,6 +117,12 @@ initmsgbuf(caddr_t buf, size_t bufsize)
 
        /* mark it as ready for use. */
        msgbufmapped = 1;
+}
+
+void
+initconsbuf(void)
+{
+       long new_bufs;
 
        /* Set up a buffer to collect /dev/console output */
        consbufp = malloc(CONSBUFSIZE, M_TEMP, M_NOWAIT|M_ZERO);
index 8ca1511..de4e5be 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: msgbuf.h,v 1.9 2015/01/13 10:07:58 mpf Exp $  */
+/*     $OpenBSD: msgbuf.h,v 1.10 2015/01/13 18:51:27 kettenis Exp $    */
 /*     $NetBSD: msgbuf.h,v 1.8 1995/03/26 20:24:27 jtc Exp $   */
 
 /*
@@ -47,5 +47,6 @@ extern struct msgbuf *msgbufp;
 extern struct msgbuf *consbufp;
 
 void   initmsgbuf(caddr_t buf, size_t bufsize);
+void   initconsbuf(void);
 void   msgbuf_putchar(struct msgbuf *, const char c);
 #endif