The code for handling the messages buffer wasn't up to date in the 2.7 source. Access to /kern/msgbuf would hang the system and dmesg would just fail with illegal address. This patch fixes both problems. Apply by doing: cd /usr/src patch -p0 < 020_pmax_msgbuf.patch And then rebuild your kernel. Index: sys/arch/pmax/include/param.h =================================================================== RCS file: /cvs/src/sys/arch/pmax/include/param.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- sys/arch/pmax/include/param.h 1997/06/10 14:19:01 1.8 +++ sys/arch/pmax/include/param.h 2000/07/04 05:46:23 1.9 @@ -1,3 +1,4 @@ +/* $OpenBSD: param.h,v 1.9 2000/07/04 05:46:23 maja Exp $ */ /* $NetBSD: param.h,v 1.18 1997/02/26 01:45:41 jonathan Exp $ */ /* @@ -104,6 +105,8 @@ #define NMBCLUSTERS 1024 /* map size, max cluster allocation */ #endif #endif + +#define MSGBUFSIZE NBPG #ifdef _KERNEL #ifndef _LOCORE Index: sys/arch/pmax/pmax/machdep.c =================================================================== RCS file: /cvs/src/sys/arch/pmax/pmax/machdep.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- sys/arch/pmax/pmax/machdep.c 2000/03/23 09:59:55 1.23 +++ sys/arch/pmax/pmax/machdep.c 2000/07/04 05:46:23 1.24 @@ -1,3 +1,4 @@ +/* $OpenBSD: machdep.c,v 1.24 2000/07/04 05:46:23 maja Exp $ */ /* $NetBSD: machdep.c,v 1.67 1996/10/23 20:04:40 mhitch Exp $ */ /* @@ -147,7 +148,6 @@ #else int bufpages = 0; #endif -int msgbufmapped = 0; /* set when safe to use msgbuf */ int maxmem; /* max memory per process */ int physmem; /* max supported memory, changes to actual */ int physmem_boardmax; /* {model,simm}-specific bound on physmem */ @@ -678,10 +678,10 @@ /* * Initialize error message buffer (at end of core). */ - maxmem -= btoc(sizeof (struct msgbuf)); + maxmem -= btoc(MSGBUFSIZE); msgbufp = (struct msgbuf *)(MIPS_PHYS_TO_KSEG0(maxmem << PGSHIFT)); - msgbufmapped = 1; - + initmsgbuf((caddr_t)msgbufp, round_page(MSGBUFSIZE)); + /* * Allocate space for system data structures. * The first available kernel virtual address is in "v". @@ -792,6 +792,11 @@ pmapdebug = 0; #endif + for (i = 0; i < btoc(MSGBUFSIZE); i++) + pmap_enter(pmap_kernel(), (vm_offset_t)msgbufp, + maxmem + i * NBPG, VM_PROT_READ|VM_PROT_WRITE, TRUE, + VM_PROT_READ|VM_PROT_WRITE); + /* * Good {morning,afternoon,evening,night}. */ @@ -1195,6 +1200,7 @@ dumpsys() { int error; + extern int msgbufmapped; /* Save registers. */ savectx((struct user *)&dumppcb, 0); Index: sys/arch/pmax/pmax/mem.c =================================================================== RCS file: /cvs/src/sys/arch/pmax/pmax/mem.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- sys/arch/pmax/pmax/mem.c 1999/11/22 19:22:01 1.8 +++ sys/arch/pmax/pmax/mem.c 2000/07/04 05:46:23 1.9 @@ -1,3 +1,4 @@ +/* $OpenBSD: mem.c,v 1.9 2000/07/04 05:46:23 maja Exp $ */ /* $NetBSD: mem.c,v 1.7 1995/09/29 21:53:29 jonathan Exp $ */ /* @@ -129,8 +130,9 @@ c = min(iov->iov_len, MAXPHYS); if (v < MIPS_KSEG0_START) return (EFAULT); - if (v + c > MIPS_PHYS_TO_KSEG0(avail_end + - sizeof (struct msgbuf)) && + if (v + c > MIPS_PHYS_TO_KSEG0(avail_end) && + !((caddr_t)v >= (caddr_t)msgbufp && + (caddr_t)v < (caddr_t)msgbufp+MSGBUFSIZE) && (v < MIPS_KSEG2_START || !kernacc((caddr_t)v, c, uio->uio_rw == UIO_READ ? B_READ : B_WRITE)))