Implement the kernel part of pr-1891. This allows for a more flexible sized

msgbuf. Note that old 'dmesg' and 'syslogd' binaries will continue running,
though old 'dmesg' binaries will output a few bytes of junk at the start of
the buffer, and will miss a few bytes at the end of the buffer.
This commit is contained in:
leo 1997-09-19 13:52:37 +00:00
parent a36727d108
commit d4713d24c2
58 changed files with 368 additions and 249 deletions

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.85 1997/09/11 23:01:44 mycroft Exp $ */
/* $NetBSD: machdep.c,v 1.86 1997/09/19 13:52:37 leo Exp $ */
/*
* Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
@ -29,7 +29,7 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.85 1997/09/11 23:01:44 mycroft Exp $");
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.86 1997/09/19 13:52:37 leo Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -142,7 +142,8 @@ int bufpages = BUFPAGES;
#else
int bufpages = 0;
#endif
int msgbufmapped = 0; /* set when safe to use msgbuf */
caddr_t msgbufaddr;
int maxmem; /* max memory per process */
int totalphysmem; /* total amount of physical memory in system */
@ -493,10 +494,10 @@ unknown_cputype:
/*
* Initialize error message buffer (at end of core).
*/
lastusablepage -= btoc(sizeof (struct msgbuf));
msgbufp =
(struct msgbuf *)ALPHA_PHYS_TO_K0SEG(ctob(lastusablepage + 1));
msgbufmapped = 1;
lastusablepage -= btoc(MSGBUFSIZE);
msgbufaddr = ALPHA_PHYS_TO_K0SEG(ctob(lastusablepage + 1));
initmsgbuf(msgbufaddr, alpha_round_page(MSGBUFSIZE));
/*
* Allocate space for system data structures.

@ -1,4 +1,4 @@
/* $NetBSD: mem.c,v 1.16 1997/09/02 13:18:26 thorpej Exp $ */
/* $NetBSD: mem.c,v 1.17 1997/09/19 13:52:41 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -46,7 +46,7 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
__KERNEL_RCSID(0, "$NetBSD: mem.c,v 1.16 1997/09/02 13:18:26 thorpej Exp $");
__KERNEL_RCSID(0, "$NetBSD: mem.c,v 1.17 1997/09/19 13:52:41 leo Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@ -66,7 +66,6 @@ cdev_decl(mm);
caddr_t zeropage;
extern int firstusablepage, lastusablepage;
extern struct msgbuf *msgbufp;
/*ARGSUSED*/
int
@ -117,7 +116,7 @@ mmrw(dev, uio, flags)
case 0:
v = uio->uio_offset;
kmemphys:
if (v == ALPHA_K0SEG_TO_PHYS((vm_offset_t)msgbufp)) {
if (v >= ALPHA_K0SEG_TO_PHYS((vm_offset_t)msgbufaddr)) {
extern int msgbufmapped;
if (msgbufmapped == 0) {
printf("Message Buf not Mapped\n");

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.19 1997/05/15 17:27:15 mjacob Exp $ */
/* $NetBSD: param.h,v 1.20 1997/09/19 13:52:53 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -98,6 +98,10 @@
#define UPAGES 2 /* pages of u-area */
#define USPACE (UPAGES * NBPG) /* total size of u-area */
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than CLBYTES (the software page size), and,

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.99 1997/09/12 10:29:20 mycroft Exp $ */
/* $NetBSD: machdep.c,v 1.100 1997/09/19 13:53:02 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -174,7 +174,8 @@ int bufpages = BUFPAGES;
#else
int bufpages = 0;
#endif
int msgbufmapped; /* set when safe to use msgbuf */
caddr_t msgbufaddr;
int maxmem; /* max memory per process */
int physmem = MAXMEM; /* max supported memory, changes to actual */
/*
@ -254,10 +255,10 @@ cpu_startup()
pmapdebug = 0;
#endif
/* avail_end was pre-decremented in pmap_bootstrap to compensate */
for (i = 0; i < btoc(sizeof (struct msgbuf)); i++)
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufp,
for (i = 0; i < btoc(MSGBUFSIZE); i++)
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufaddr + i * NBPG,
avail_end + i * NBPG, VM_PROT_ALL, TRUE);
msgbufmapped = 1;
initmsgbuf(msgbufaddr, m68k_round_page(MSGBUFSIZE));
/*
* Good {morning,afternoon,evening,night}.

@ -1,4 +1,4 @@
/* $NetBSD: pmap.c,v 1.39 1997/06/10 18:26:41 veego Exp $ */
/* $NetBSD: pmap.c,v 1.40 1997/09/19 13:53:05 leo Exp $ */
/*
* Copyright (c) 1991 Regents of the University of California.
@ -79,7 +79,6 @@
#include <sys/systm.h>
#include <sys/proc.h>
#include <sys/malloc.h>
#include <sys/msgbuf.h>
#include <vm/vm.h>
#include <sys/user.h>
#include <vm/vm_kern.h>
@ -242,6 +241,8 @@ static int pmap_ishift; /* segment table index shift */
int protostfree; /* prototype (default) free ST map */
#endif
extern caddr_t msgbufaddr;
#ifdef MACHINE_NONCONTIG
struct physeg {
vm_offset_t start;
@ -284,7 +285,6 @@ void pmap_pvdump __P((vm_offset_t));
*/
caddr_t CADDR1, CADDR2, vmmap;
u_int *CMAP1, *CMAP2, *vmpte, *msgbufmap;
struct msgbuf *msgbufp;
/*
* Bootstrap the system enough to run with virtual memory.
@ -313,7 +313,7 @@ pmap_bootstrap(firstaddr, loadaddr)
avail_end = maxmem << PGSHIFT;
/* XXX: allow for msgbuf */
avail_end -= m68k_round_page(sizeof(struct msgbuf));
avail_end -= m68k_round_page(MSGBUFSIZE);
#ifdef MACHINE_NONCONTIG
/*
* first segment of memory is always the one loadbsd found
@ -411,7 +411,7 @@ pmap_bootstrap(firstaddr, loadaddr)
SYSMAP(caddr_t ,CMAP1 ,CADDR1 ,1 )
SYSMAP(caddr_t ,CMAP2 ,CADDR2 ,1 )
SYSMAP(caddr_t ,vmpte ,vmmap ,1 )
SYSMAP(struct msgbuf * ,msgbufmap ,msgbufp ,1 )
SYSMAP(caddr_t ,msgbufmap ,msgbufaddr ,btoc(MSGBUFSIZE) )
virtual_avail = reserve_dumppages(va);
}

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.35 1997/07/10 08:22:36 veego Exp $ */
/* $NetBSD: param.h,v 1.36 1997/09/19 13:53:10 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -74,6 +74,10 @@
# define NKMEMCLUSTERS (3072 * 1024 / CLBYTES)
#endif
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* spl functions; all are normally done in-line
*/

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.25 1997/09/11 23:01:52 mycroft Exp $ */
/* $NetBSD: machdep.c,v 1.26 1997/09/19 13:53:18 leo Exp $ */
/*
* Copyright (c) 1994-1996 Mark Brinicombe.
@ -54,7 +54,6 @@
#include <sys/user.h>
#include <sys/kernel.h>
#include <sys/mbuf.h>
#include <sys/msgbuf.h>
#include <sys/buf.h>
#include <sys/map.h>
#include <sys/exec.h>
@ -164,7 +163,7 @@ char machine_arch[] = MACHINE_ARCH; /* from <machine/param.h> */
char *boot_args;
extern pt_entry_t msgbufpte;
int msgbufmapped;
caddr_t msgbufaddr;
vm_offset_t msgbufphys;
extern u_int data_abort_handler_address;
@ -1068,8 +1067,8 @@ initarm(bootconf)
- physical_start;
msgbufphys = physical_freestart;
physical_freestart += round_page(sizeof(struct msgbuf));
free_pages -= round_page(sizeof(struct msgbuf)) / NBPG;
physical_freestart += round_page(MSGBUFSIZE);
free_pages -= round_page(MSGBUFSIZE) / NBPG;
/* Ok we have allocated physical pages for the primary kernel page tables */
@ -1775,8 +1774,8 @@ initarm(prom_id)
kernelstack.virtual = KERNEL_BASE + kernelstack.physical - physical_start;
msgbufphys = physical_freestart;
physical_freestart += round_page(sizeof(struct msgbuf));
free_pages -= round_page(sizeof(struct msgbuf)) / NBPG;
physical_freestart += round_page(MSGBUFSIZE);
free_pages -= round_page(MSGBUFSIZE) / NBPG;
#ifdef PROM_DEBUG
printf("physical_fs=%08x next_phys=%08x\n", (u_int)physical_freestart,
@ -2184,10 +2183,9 @@ cpu_startup()
for (loop = 0; loop < btoc(sizeof(struct msgbuf)); ++loop)
pmap_enter(pmap_kernel(),
(vm_offset_t)((caddr_t)msgbufp + loop * NBPG),
(vm_offset_t)((caddr_t)msgbufaddr + loop * NBPG),
msgbufphys + loop * NBPG, VM_PROT_ALL, TRUE);
msgbufmapped = 1;
initmsgbuf(msgbufaddr, round_page(MSGBUFSIZE));
/*
* Identify ourselves for the msgbuf (everything printed earlier will

@ -1,4 +1,4 @@
/* $NetBSD: pmap.c,v 1.12 1997/07/31 00:36:55 mark Exp $ */
/* $NetBSD: pmap.c,v 1.13 1997/09/19 13:53:21 leo Exp $ */
/*
* Copyright (c) 1994-1997 Mark Brinicombe.
@ -79,7 +79,6 @@
#include <sys/systm.h>
#include <sys/proc.h>
#include <sys/malloc.h>
#include <sys/msgbuf.h>
#include <vm/vm.h>
#include <vm/vm_kern.h>
@ -562,9 +561,9 @@ pmap_bootstrap(kernel_l1pt)
memhook = (char *)virtual_start;
virtual_start += NBPG;
msgbufp = (struct msgbuf *)virtual_start;
msgbufaddr = (caddr_t)virtual_start;
msgbufpte = (pt_entry_t)pmap_pte(kernel_pmap, virtual_start);
virtual_start += round_page(sizeof(struct msgbuf));
virtual_start += round_page(MSGBUFSIZE);
#if PMAPDEBUG > 0
printf("pmap_bootstrap: page_hook = V%08x pte = V%08x\n",

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.8 1997/06/03 23:48:36 mark Exp $ */
/* $NetBSD: param.h,v 1.9 1997/09/19 13:53:28 leo Exp $ */
/*
* Copyright (c) 1994,1995 Mark Brinicombe.
@ -85,6 +85,10 @@
#define UPAGES 2 /* pages of u-area */
#define USPACE (UPAGES * NBPG) /* total size of u-area */
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than CLBYTES (the software page size), and,

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.53 1997/09/12 10:29:22 mycroft Exp $ */
/* $NetBSD: machdep.c,v 1.54 1997/09/19 13:53:34 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -111,7 +111,8 @@ int bufpages = BUFPAGES;
#else
int bufpages = 0;
#endif
int msgbufmapped; /* set when safe to use msgbuf */
caddr_t msgbufaddr;
int physmem = MAXMEM; /* max supported memory, changes to actual */
/*
* safepri is a safe priority for sleep to set for a spin-wait
@ -176,10 +177,10 @@ cpu_startup()
pmapdebug = 0;
#endif
/* avail_end was pre-decremented in pmap_bootstrap to compensate */
for(i = 0; i < btoc(sizeof (struct msgbuf)); i++)
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufp,
for (i = 0; i < btoc(MSGBUFSIZE); i++)
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufaddr + i * NBPG,
avail_end + i * NBPG, VM_PROT_ALL, TRUE);
msgbufmapped = 1;
initmsgbuf(msgbufaddr, m68k_round_page(MSGBUFSIZE));
/*
* Good {morning,afternoon,evening,night}.

@ -1,4 +1,4 @@
/* $NetBSD: pmap.c,v 1.20 1997/06/10 18:41:13 veego Exp $ */
/* $NetBSD: pmap.c,v 1.21 1997/09/19 13:53:37 leo Exp $ */
/*
* Copyright (c) 1991 Regents of the University of California.
@ -79,7 +79,6 @@
#include <sys/systm.h>
#include <sys/proc.h>
#include <sys/malloc.h>
#include <sys/msgbuf.h>
#include <vm/vm.h>
#include <sys/user.h>
#include <vm/vm_kern.h>
@ -243,6 +242,8 @@ static int pmap_ishift; /* segment table index shift */
int protostfree; /* prototype (default) free ST map */
#endif
extern caddr_t msgbufaddr;
#ifdef MACHINE_NONCONTIG
static vm_offset_t avail_next;
static vm_size_t avail_remaining;
@ -308,7 +309,7 @@ u_int hw_addr, hw_pages;
for (i = 0; usable_segs[i+1].start; i++)
;
/* XXX: allow for msgbuf */
usable_segs[i].end -= m68k_round_page(sizeof(struct msgbuf));
usable_segs[i].end -= m68k_round_page(MSGBUFSIZE);
avail_start = usable_segs[0].start;
avail_end = usable_segs[i].end;
@ -362,7 +363,7 @@ u_int hw_addr, hw_pages;
SYSMAP(caddr_t ,CMAP1 ,CADDR1 ,1 )
SYSMAP(caddr_t ,CMAP2 ,CADDR2 ,1 )
SYSMAP(caddr_t ,vmpte ,vmmap ,1 )
SYSMAP(struct msgbuf * ,msgbufmap ,msgbufp ,1 )
SYSMAP(caddr_t ,msgbufmap ,msgbufaddr ,btoc(MSGBUFSIZE) )
virtual_avail = reserve_dumppages(va);
}

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.23 1997/07/10 08:22:37 veego Exp $ */
/* $NetBSD: param.h,v 1.24 1997/09/19 13:53:44 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -67,6 +67,10 @@
#define NPTEPG (NBPG/(sizeof (pt_entry_t)))
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Size of kernel malloc arena in CLBYTES-sized logical pages
*/

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.97 1997/09/12 10:29:25 mycroft Exp $ */
/* $NetBSD: machdep.c,v 1.98 1997/09/19 13:54:00 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -126,7 +126,7 @@ int bufpages = BUFPAGES;
#else
int bufpages = 0;
#endif
int msgbufmapped; /* set when safe to use msgbuf */
caddr_t msgbufaddr;
int maxmem; /* max memory per process */
int physmem = MAXMEM; /* max supported memory, changes to actual */
/*
@ -249,10 +249,10 @@ cpu_startup()
* Initialize error message buffer (at end of core).
* avail_end was pre-decremented in pmap_bootstrap to compensate.
*/
for (i = 0; i < btoc(sizeof (struct msgbuf)); i++)
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufp,
for (i = 0; i < btoc(MSGBUFSIZE); i++)
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufaddr + i * NBPG,
avail_end + i * NBPG, VM_PROT_ALL, TRUE);
msgbufmapped = 1;
initmsgbuf(msgbufaddr, m68k_round_page(MSGBUFSIZE));
/*
* Good {morning,afternoon,evening,night}.

@ -1,4 +1,4 @@
/* $NetBSD: pmap_bootstrap.c,v 1.13 1997/06/10 18:56:50 veego Exp $ */
/* $NetBSD: pmap_bootstrap.c,v 1.14 1997/09/19 13:54:03 leo Exp $ */
/*
* Copyright (c) 1991, 1993
@ -40,7 +40,6 @@
*/
#include <sys/param.h>
#include <sys/msgbuf.h>
#include <sys/proc.h>
#include <machine/frame.h>
@ -81,10 +80,10 @@ void pmap_bootstrap __P((vm_offset_t, vm_offset_t));
* CADDR1, CADDR2: pmap zero/copy operations
* vmmap: /dev/mem, crash dumps, parity error checking
* ledbase: SPU LEDs
* msgbufp: kernel message buffer
* msgbufaddr: kernel message buffer
*/
caddr_t CADDR1, CADDR2, vmmap, ledbase;
struct msgbuf *msgbufp;
extern caddr_t msgbufaddr;
/*
* Bootstrap the VM system.
@ -437,7 +436,7 @@ pmap_bootstrap(nextpa, firstpa)
*/
RELOC(avail_start, vm_offset_t) = nextpa;
RELOC(avail_end, vm_offset_t) = m68k_ptob(RELOC(maxmem, int)) -
(m68k_round_page(sizeof(struct msgbuf)) + m68k_ptob(1));
(m68k_round_page(MSGBUFSIZE) + m68k_ptob(1));
RELOC(mem_size, vm_size_t) = m68k_ptob(RELOC(physmem, int));
RELOC(virtual_avail, vm_offset_t) =
VM_MIN_KERNEL_ADDRESS + (nextpa - firstpa);
@ -522,8 +521,8 @@ pmap_bootstrap(nextpa, firstpa)
va += NBPG;
RELOC(ledbase, caddr_t) = (caddr_t)va;
va += NBPG;
RELOC(msgbufp, struct msgbuf *) = (struct msgbuf *)va;
va += NBPG;
RELOC(msgbufaddr, caddr_t) = (caddr_t)va;
va += m68k_round_page(MSGBUFSIZE);
RELOC(virtual_avail, vm_offset_t) = va;
}
}

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.35 1997/07/10 08:22:38 veego Exp $ */
/* $NetBSD: param.h,v 1.36 1997/09/19 13:54:06 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -69,6 +69,10 @@
#define NPTEPG (NBPG/(sizeof (pt_entry_t)))
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Size of kernel malloc arena in CLBYTES-sized logical pages
*/

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.253 1997/09/16 20:34:34 is Exp $ */
/* $NetBSD: machdep.c,v 1.254 1997/09/19 13:54:13 leo Exp $ */
/*-
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@ -205,8 +205,7 @@ int dumpmem_high;
int boothowto;
int cpu_class;
struct msgbuf *msgbufp;
int msgbufmapped;
caddr_t msgbufaddr;
vm_map_t buffer_map;
@ -310,11 +309,10 @@ cpu_startup()
* Initialize error message buffer (at end of core).
*/
/* avail_end was pre-decremented in pmap_bootstrap to compensate */
for (i = 0; i < btoc(sizeof(struct msgbuf)); i++)
pmap_enter(pmap_kernel(),
(vm_offset_t)((caddr_t)msgbufp + i * NBPG),
for (i = 0; i < btoc(MSGBUFSIZE); i++)
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufaddr + i * NBPG,
avail_end + i * NBPG, VM_PROT_ALL, TRUE);
msgbufmapped = 1;
initmsgbuf(msgbufaddr, round_page(MSGBUFSIZE));
printf(version);
identifycpu();

@ -1,4 +1,4 @@
/* $NetBSD: pmap.c,v 1.43 1997/06/12 23:57:28 thorpej Exp $ */
/* $NetBSD: pmap.c,v 1.44 1997/09/19 13:54:17 leo Exp $ */
/*
* Copyright (c) 1993, 1994, 1995 Charles M. Hannum. All rights reserved.
@ -198,7 +198,7 @@ int nkpde = 0;
#endif
#if BSDVM_COMPAT
#include <sys/msgbuf.h>
extern caddr_t msgbufaddr;
/*
* All those kernel PT submaps that BSD is so fond of
@ -229,7 +229,7 @@ pmap_bootstrap(virtual_start)
pt_entry_t *pte;
#endif
/* XXX: allow for msgbuf */
avail_end -= i386_round_page(sizeof(struct msgbuf));
avail_end -= i386_round_page(MSGBUFSIZE);
virtual_avail = virtual_start;
virtual_end = VM_MAX_KERNEL_ADDRESS;
@ -276,7 +276,7 @@ pmap_bootstrap(virtual_start)
SYSMAP(caddr_t ,CMAP1 ,CADDR1 ,1 )
SYSMAP(caddr_t ,CMAP2 ,CADDR2 ,1 )
SYSMAP(caddr_t ,XXX_mmap ,vmmap ,1 )
SYSMAP(struct msgbuf * ,msgbufmap ,msgbufp ,1 )
SYSMAP(caddr_t ,msgbufmap ,msgbufaddr ,btoc(MSGBUFSIZE))
virtual_avail = va;
#endif

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.31 1997/02/26 01:21:18 jonathan Exp $ */
/* $NetBSD: param.h,v 1.32 1997/09/19 13:54:21 leo Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@ -95,6 +95,10 @@
#define UPAGES 2 /* pages of u-area */
#define USPACE (UPAGES * NBPG) /* total size of u-area */
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than CLBYTES (the software page size), and,

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.32 1997/07/10 08:23:03 veego Exp $ */
/* $NetBSD: param.h,v 1.33 1997/09/19 13:54:32 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -103,6 +103,10 @@
#define NPTEPG (NBPG/(sizeof (pt_entry_t)))
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Size of kernel malloc arena in CLBYTES-sized logical pages
*/

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.165 1997/09/16 15:51:09 scottr Exp $ */
/* $NetBSD: machdep.c,v 1.166 1997/09/19 13:54:37 leo Exp $ */
/*
* Copyright (c) 1996 Jason R. Thorpe. All rights reserved.
@ -197,7 +197,7 @@ int bufpages = BUFPAGES;
int bufpages = 0;
#endif
int msgbufmapped; /* set when safe to use msgbuf */
caddr_t msgbufaddr;
int maxmem; /* max memory per process */
int physmem = MAXMEM; /* max supported memory, changes to actual */
@ -291,10 +291,10 @@ cpu_startup(void)
* Initialize error message buffer (at end of core).
* high[numranges-1] was decremented in pmap_bootstrap.
*/
for (i = 0; i < btoc(sizeof(struct msgbuf)); i++)
pmap_enter(pmap_kernel(), (vm_offset_t) msgbufp,
for (i = 0; i < btoc(MSGBUFSIZE); i++)
pmap_enter(pmap_kernel(), (vm_offset_t) msgbufaddr + i * NBPG,
high[numranges - 1] + i * NBPG, VM_PROT_ALL, TRUE);
msgbufmapped = 1;
initmsgbuf(msgbufaddr, atari_round_page(MSGBUFSIZE));
/*
* Good {morning,afternoon,evening,night}.

@ -1,4 +1,4 @@
/* $NetBSD: pmap_bootstrap.c,v 1.36 1997/09/04 00:54:04 scottr Exp $ */
/* $NetBSD: pmap_bootstrap.c,v 1.37 1997/09/19 13:54:41 leo Exp $ */
/*
* Copyright (c) 1991, 1993
@ -41,7 +41,6 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/msgbuf.h>
#include <sys/reboot.h>
#include <vm/vm.h>
@ -101,10 +100,10 @@ extern caddr_t ROMBase;
*
* CADDR1, CADDR2: pmap zero/copy operations
* vmmap: /dev/mem, crash dumps, parity error checking
* msgbufp: kernel message buffer
* msgbufaddr: kernel message buffer
*/
caddr_t CADDR1, CADDR2, vmmap;
struct msgbuf *msgbufp;
extern caddr_t msgbufaddr;
/*
* Bootstrap the VM system.
@ -463,8 +462,8 @@ pmap_bootstrap(nextpa, firstpa)
}
}
physmem = m68k_btop(avail_remaining + nextpa - firstpa);
avail_remaining -= m68k_round_page(sizeof(struct msgbuf));
high[numranges - 1] -= m68k_round_page(sizeof(struct msgbuf));
avail_remaining -= m68k_round_page(MSGBUFSIZE);
high[numranges - 1] -= m68k_round_page(MSGBUFSIZE);
/* XXX -- this doesn't look correct to me. */
while (high[numranges - 1] < low[numranges - 1]) {
@ -546,8 +545,8 @@ pmap_bootstrap(nextpa, firstpa)
va += NBPG;
vmmap = (caddr_t)va;
va += NBPG;
msgbufp = (struct msgbuf *)va;
va += NBPG;
msgbufaddr = (caddr_t)va;
va += m68k_round_page(MSGBUFSIZE);
virtual_avail = reserve_dumppages(va);
}
}

@ -1,4 +1,4 @@
/* $NetBSD: mem.c,v 1.9 1997/06/22 07:43:00 jonathan Exp $ */
/* $NetBSD: mem.c,v 1.10 1997/09/19 13:54:44 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -122,7 +122,7 @@ mmrw(dev, uio, flags)
if (v < MIPS_KSEG0_START)
return (EFAULT);
if (v + c > MIPS_PHYS_TO_KSEG0(avail_end +
sizeof (struct msgbuf)) &&
mips_round_page(MSGBUFSIZE))
(v < MIPS_KSEG2_START ||
!kernacc((caddr_t)v, c,
uio->uio_rw == UIO_READ ? B_READ : B_WRITE)))

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.10 1997/07/10 08:23:04 veego Exp $ */
/* $NetBSD: param.h,v 1.11 1997/09/19 13:54:48 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -64,6 +64,10 @@
#define NPTEPG (NBPG/(sizeof (pt_entry_t)))
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Size of kernel malloc arena in CLBYTES-sized logical pages
*/

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.25 1997/09/12 10:29:30 mycroft Exp $ */
/* $NetBSD: machdep.c,v 1.26 1997/09/19 13:54:52 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -114,7 +114,7 @@ int bufpages = BUFPAGES;
#else
int bufpages = 0;
#endif
int msgbufmapped; /* set when safe to use msgbuf */
caddr_t msgbufaddr;
int maxmem; /* max memory per process */
int physmem = MAXMEM; /* max supported memory, changes to actual */
@ -317,10 +317,10 @@ cpu_startup()
* Initialize error message buffer (at end of core).
* avail_end was pre-decremented in pmap_bootstrap to compensate.
*/
for (i = 0; i < btoc(sizeof (struct msgbuf)); i++)
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufp,
for (i = 0; i < btoc(MSGBUFSIZE); i++)
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufaddr + i * NBPG,
avail_end + i * NBPG, VM_PROT_ALL, TRUE);
msgbufmapped = 1;
initmsgbuf(msgbufaddr, round_page(MSGBUFSIZE));
/*
* Good {morning,afternoon,evening,night}.
@ -808,14 +808,14 @@ cpu_init_kcore_hdr()
/*
* The mvme68k has one contiguous memory segment. Note,
* RAM size is physmem + 1 to account for the msgbuf
* page.
* RAM size is physmem + btoc(MSGBUFSIZE) to account for the msgbuf
* pages.
*
* XXX We'll have to change this a bit when we support
* XXX adding VME memory cards.
*/
m->ram_segs[0].start = lowram;
m->ram_segs[0].size = ctob(physmem + 1);
m->ram_segs[0].size = ctob(physmem + btoc(MSGBUFSIZE));
}
/*

@ -1,4 +1,4 @@
/* $NetBSD: pmap_bootstrap.c,v 1.3 1997/03/18 21:31:48 thorpej Exp $ */
/* $NetBSD: pmap_bootstrap.c,v 1.4 1997/09/19 13:54:53 leo Exp $ */
/*
* Copyright (c) 1991, 1993
@ -40,7 +40,6 @@
*/
#include <sys/param.h>
#include <sys/msgbuf.h>
#include <machine/pte.h>
#include <mvme68k/mvme68k/clockreg.h>
#include <machine/vmparam.h>
@ -71,10 +70,10 @@ extern int pmap_aliasmask;
* CADDR1, CADDR2: pmap zero/copy operations
* vmmap: /dev/mem, crash dumps, parity error checking
* ledbase: SPU LEDs
* msgbufp: kernel message buffer
* msgbufaddr: kernel message buffer
*/
caddr_t CADDR1, CADDR2, vmmap, ledbase;
struct msgbuf *msgbufp;
extern caddr_t msgbufaddr;
extern void *ledatabuf; /* XXXCDC */
/*
@ -403,7 +402,7 @@ pmap_bootstrap(nextpa, firstpa)
RELOC(avail_end, vm_offset_t) =
m68k_ptob(RELOC(maxmem, int))
/* XXX allow for msgbuf */
- m68k_round_page(sizeof(struct msgbuf));
- m68k_round_page(MSGBUFSIZE);
RELOC(mem_size, vm_size_t) = m68k_ptob(RELOC(physmem, int));
RELOC(virtual_avail, vm_offset_t) =
VM_MIN_KERNEL_ADDRESS + (nextpa - firstpa);
@ -488,8 +487,8 @@ pmap_bootstrap(nextpa, firstpa)
va += NBPG;
RELOC(ledbase, caddr_t) = (caddr_t)va;
va += NBPG;
RELOC(msgbufp, struct msgbuf *) = (struct msgbuf *)va;
va += NBPG;
RELOC(msgbufaddr, caddr_t) = va;
va += m68k_round_page(MSGBUFSIZE);
RELOC(virtual_avail, vm_offset_t) = va;
}
}

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.19 1997/03/01 09:50:19 matthias Exp $ */
/* $NetBSD: param.h,v 1.20 1997/09/19 13:55:00 leo Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
@ -95,6 +95,10 @@
#define UPAGES 2 /* pages of u-area */
#define USPACE (UPAGES * NBPG) /* total size of u-area */
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than CLBYTES (the software page size), and,

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.67 1997/09/11 23:02:14 mycroft Exp $ */
/* $NetBSD: machdep.c,v 1.68 1997/09/19 13:55:03 leo Exp $ */
/*-
* Copyright (c) 1996 Matthias Pfaller.
@ -170,8 +170,7 @@ int maxphysmem = 0;
int physmem;
int boothowto;
struct msgbuf *msgbufp;
int msgbufmapped;
caddr_t msgbufaddr;
vm_map_t buffer_map;
@ -206,11 +205,10 @@ cpu_startup()
* Initialize error message buffer (at end of core).
*/
/* avail_end was pre-decremented in pmap_bootstrap to compensate */
for (i = 0; i < btoc(sizeof(struct msgbuf)); i++)
pmap_enter(pmap_kernel(),
(vm_offset_t)((caddr_t)msgbufp + i * NBPG),
for (i = 0; i < btoc(MSGBUFSIZE); i++)
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufaddr + i * NBPG),
avail_end + i * NBPG, VM_PROT_ALL, TRUE);
msgbufmapped = 1;
initmsgbuf(msgbufaddr, round_page(MSGBUFSIZE));
printf(version);
printf("real mem = %d\n", ctob(physmem));

@ -1,4 +1,4 @@
/* $NetBSD: pmap.c,v 1.20 1997/07/09 19:26:34 matthias Exp $ */
/* $NetBSD: pmap.c,v 1.21 1997/09/19 13:55:06 leo Exp $ */
/*
* Copyright (c) 1993, 1994, 1995 Charles M. Hannum. All rights reserved.
@ -198,7 +198,7 @@ int nkpde = 0;
#endif
#if BSDVM_COMPAT
#include <sys/msgbuf.h>
extern caddr_t msgbufaddr;
/*
* All those kernel PT submaps that BSD is so fond of
@ -261,7 +261,7 @@ pmap_bootstrap(virtual_start)
pt_entry_t *pte;
#endif
/* XXX: allow for msgbuf */
avail_end -= ns532_round_page(sizeof(struct msgbuf));
avail_end -= ns532_round_page(MSGBUFSIZE);
virtual_avail = virtual_start;
virtual_end = VM_MAX_KERNEL_ADDRESS;
@ -290,7 +290,7 @@ pmap_bootstrap(virtual_start)
SYSMAP(caddr_t ,CMAP1 ,CADDR1 ,1 )
SYSMAP(caddr_t ,CMAP2 ,CADDR2 ,1 )
SYSMAP(caddr_t ,XXX_mmap ,vmmap ,1 )
SYSMAP(struct msgbuf * ,msgbufmap ,msgbufp ,1 )
SYSMAP(caddr_t ,msgbufmap ,msgbufaddr ,btoc(MSGBUFSIZE))
virtual_avail = va;
#endif

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.5 1997/06/23 02:56:45 jonathan Exp $ */
/* $NetBSD: param.h,v 1.6 1997/09/19 13:55:12 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -102,6 +102,10 @@
#define UVPN (UADDR>>PGSHIFT)/* virtual page number of u */
#define KERNELSTACK (UADDR+UPAGES*NBPG) /* top of kernel stack */
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than CLBYTES (the software page size), and,

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.14 1997/07/01 09:32:28 jonathan Exp $ */
/* $NetBSD: machdep.c,v 1.15 1997/09/19 13:55:16 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -126,7 +126,8 @@ int bufpages = BUFPAGES;
#else
int bufpages = 0;
#endif
int msgbufmapped = 0; /* set when safe to use msgbuf */
caddr_t msgbufaddr;
int maxmem; /* max memory per process */
int physmem; /* max supported memory, changes to actual */
int memcfg; /* memory config register */
@ -476,9 +477,9 @@ mach_init(argc, argv, code)
/*
* Initialize error message buffer (at end of core).
*/
maxmem -= btoc(sizeof (struct msgbuf));
msgbufp = (struct msgbuf *)(MIPS_PHYS_TO_KSEG0(maxmem << PGSHIFT));
msgbufmapped = 1;
maxmem -= btoc(MSGBUFSIZE);
msgbufaddr = (caddr_t)(MIPS_PHYS_TO_KSEG0(maxmem << PGSHIFT));
initmsgbuf(msgbufaddr, pica_round_page(MSGBUFSIZE));
/*
* Allocate space for system data structures.

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.22 1997/08/20 03:47:19 jonathan Exp $ */
/* $NetBSD: param.h,v 1.23 1997/09/19 13:55:20 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -68,6 +68,10 @@
#define CLSIZE 1
#define CLSIZELOG2 0
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Constants related to network buffer management.

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.96 1997/08/17 18:13:22 mhitch Exp $ */
/* $NetBSD: machdep.c,v 1.97 1997/09/19 13:55:22 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -155,6 +155,7 @@ int bufpages = BUFPAGES;
#else
int bufpages = 0;
#endif
caddr_t msgbufaddr;
int msgbufmapped = 0; /* set when safe to use msgbuf */
int maxmem; /* max memory per process */
int physmem; /* max supported memory, changes to actual */
@ -789,9 +790,9 @@ mach_init(argc, argv, code, cv)
/*
* Initialize error message buffer (at end of core).
*/
maxmem -= btoc(sizeof (struct msgbuf));
msgbufp = (struct msgbuf *)(MIPS_PHYS_TO_KSEG0(maxmem << PGSHIFT));
msgbufmapped = 1;
maxmem -= btoc(MSGBUFSIZE);
msgbufaddr = (caddr_t)(MIPS_PHYS_TO_KSEG0(maxmem << PGSHIFT));
initmsgbuf(msgbufaddr, mips_round_page(MSGBUFSIZE));
/*
* Allocate space for system data structures.

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.29 1997/03/10 22:50:37 pk Exp $ */
/* $NetBSD: param.h,v 1.30 1997/09/19 13:55:26 leo Exp $ */
/*
* Copyright (c) 1992, 1993
@ -123,6 +123,8 @@ extern int nbpg, pgofset, pgshift;
#endif
#endif
#define MSGBUFSIZE (4096 - 3 * sizeof(long))
/*
* Size of kernel malloc arena in CLBYTES-sized logical pages.
*/

@ -1,4 +1,4 @@
/* $NetBSD: autoconf.c,v 1.74 1997/09/18 20:25:34 pk Exp $ */
/* $NetBSD: autoconf.c,v 1.75 1997/09/19 13:55:29 leo Exp $ */
/*
* Copyright (c) 1996
@ -186,14 +186,14 @@ bootstrap()
#if defined(SUN4)
if (CPU_ISSUN4) {
extern void oldmon_w_cmd __P((u_long, char *));
extern struct msgbuf *msgbufp;
extern caddr_t msgbufaddr;
/*
* XXX
* Some boot programs mess up physical page 0, which
* is where we want to put the msgbuf. There's some
* room, so shift it over half a page.
*/
msgbufp = (struct msgbuf *)((caddr_t) msgbufp + 4096);
msgbufaddr = (caddr_t) msgbufaddr + 4096;
/*
* XXX:
@ -232,7 +232,7 @@ bootstrap()
pmap_bootstrap(cpuinfo.mmu_ncontext,
cpuinfo.mmu_nregion,
cpuinfo.mmu_nsegment);
msgbufmapped = 1; /* enable message buffer */
initmsgbuf(msgbufaddr, MSGBUFSIZE);
#ifdef KGDB
zs_kgdb_init(); /* XXX */
#endif

@ -1,4 +1,4 @@
/* $NetBSD: locore.s,v 1.73 1997/09/13 20:36:48 pk Exp $ */
/* $NetBSD: locore.s,v 1.74 1997/09/19 13:55:31 leo Exp $ */
/*
* Copyright (c) 1996 Paul Kranenburg
@ -267,8 +267,8 @@ sun4_notsup:
* kernel space we remap it in configure() to another location and
* invalidate the mapping at KERNBASE.
*/
.globl _msgbuf
_msgbuf = KERNBASE
.globl _msgbufaddr
_msgbufaddr = KERNBASE
/*
* Each trap has room for four instructions, of which one perforce must

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.85 1997/09/12 08:55:02 pk Exp $ */
/* $NetBSD: machdep.c,v 1.86 1997/09/19 13:55:33 leo Exp $ */
/*
* Copyright (c) 1992, 1993
@ -110,9 +110,7 @@ int bufpages = 0;
int physmem;
extern struct msgbuf msgbuf;
struct msgbuf *msgbufp = &msgbuf;
int msgbufmapped = 0; /* not mapped until pmap_bootstrap */
extern caddr_t msgbufaddr;
/*
* safepri is a safe priority for sleep to set for a spin-wait
@ -288,9 +286,9 @@ cpu_startup()
pmap_enter(pmap_kernel(), MSGBUF_VA, 0x0, VM_PROT_READ|VM_PROT_WRITE, 1);
if (CPU_ISSUN4)
msgbufp = (struct msgbuf *)(MSGBUF_VA + 4096);
msgbufaddr = (caddr_t)(MSGBUF_VA + 4096);
else
msgbufp = (struct msgbuf *)MSGBUF_VA;
msgbufaddr = (caddr_t)MSGBUF_VA;
pmap_redzone();
}

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.43 1997/07/10 08:23:30 veego Exp $ */
/* $NetBSD: param.h,v 1.44 1997/09/19 13:55:35 leo Exp $ */
/*
* Copyright (c) 1994, 1995 Gordon W. Ross
@ -68,6 +68,8 @@
#include <m68k/param.h>
#define MSGBUFSIZE (4096 - 3 * sizeof(long))
/*
* Size of kernel malloc arena in CLBYTES-sized logical pages
*/

@ -1,4 +1,4 @@
/* $NetBSD: param3.h,v 1.43 1997/07/10 08:23:30 veego Exp $ */
/* $NetBSD: param3.h,v 1.44 1997/09/19 13:55:35 leo Exp $ */
/*
* Copyright (c) 1994, 1995 Gordon W. Ross
@ -68,6 +68,8 @@
#include <m68k/param.h>
#define MSGBUFSIZE (4096 - 3 * sizeof(long))
/*
* Size of kernel malloc arena in CLBYTES-sized logical pages
*/

@ -1,4 +1,4 @@
/* $NetBSD: param3x.h,v 1.7 1997/07/10 08:23:31 veego Exp $ */
/* $NetBSD: param3x.h,v 1.8 1997/09/19 13:55:40 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -66,6 +66,10 @@
#include <m68k/param.h>
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Size of kernel malloc arena in CLBYTES-sized logical pages
*/

@ -1,4 +1,4 @@
/* $NetBSD: locore2.c,v 1.66 1997/06/10 19:25:28 veego Exp $ */
/* $NetBSD: locore2.c,v 1.67 1997/09/19 13:55:38 leo Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@ -106,8 +106,6 @@ int delay_divisor = 82; /* assume the fastest (3/260) */
vm_offset_t high_segment_free_start = 0;
vm_offset_t high_segment_free_end = 0;
int msgbufmapped = 0;
struct msgbuf *msgbufp = NULL;
extern vm_offset_t tmp_vpages[];
extern int physmem;
@ -355,7 +353,7 @@ _vm_init(kehp)
pte = get_pte(va);
pte |= PG_NC;
set_pte(va, pte);
/* Initialize msgbufp later, in machdep.c */
/* Initialize msgbufaddr later, in machdep.c */
/*
* Virtual and physical pages for proc[0] u-area (already mapped)

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.99 1997/09/12 10:29:32 mycroft Exp $ */
/* $NetBSD: machdep.c,v 1.100 1997/09/19 13:55:37 leo Exp $ */
/*
* Copyright (c) 1994, 1995 Gordon W. Ross
@ -106,8 +106,7 @@ extern char etext[];
int physmem;
int fputype;
int msgbufmapped;
struct msgbuf *msgbufp;
caddr_t msgbufaddr;
vm_offset_t vmmap;
@ -252,8 +251,8 @@ cpu_startup()
* Also, offset some to avoid PROM scribbles.
*/
v = (caddr_t) KERNBASE;
msgbufp = (struct msgbuf *)(v + 0x1000);
msgbufmapped = 1;
msgbufaddr = (caddr_t)(v + 0x1000);
initmsgbuf(msgbufaddr, MSGBUFSIZE);
/*
* Good {morning,afternoon,evening,night}.

@ -1,4 +1,4 @@
/* $NetBSD: sun3_startup.c,v 1.66 1997/06/10 19:25:28 veego Exp $ */
/* $NetBSD: sun3_startup.c,v 1.67 1997/09/19 13:55:38 leo Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@ -106,8 +106,6 @@ int delay_divisor = 82; /* assume the fastest (3/260) */
vm_offset_t high_segment_free_start = 0;
vm_offset_t high_segment_free_end = 0;
int msgbufmapped = 0;
struct msgbuf *msgbufp = NULL;
extern vm_offset_t tmp_vpages[];
extern int physmem;
@ -355,7 +353,7 @@ _vm_init(kehp)
pte = get_pte(va);
pte |= PG_NC;
set_pte(va, pte);
/* Initialize msgbufp later, in machdep.c */
/* Initialize msgbufaddr later, in machdep.c */
/*
* Virtual and physical pages for proc[0] u-area (already mapped)

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.21 1997/09/12 10:29:33 mycroft Exp $ */
/* $NetBSD: machdep.c,v 1.22 1997/09/19 13:55:42 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -104,8 +104,8 @@ extern char etext[];
int physmem;
int fputype;
int msgbufmapped;
struct msgbuf *msgbufp;
caddr_t msgbufaddr;
vm_offset_t vmmap;
@ -255,8 +255,8 @@ cpu_startup()
* Also, offset some to avoid PROM scribbles.
*/
v = (caddr_t) KERNBASE;
msgbufp = (struct msgbuf *)(v + 0x1000);
msgbufmapped = 1;
msgbufaddr = (caddr_t)(v + 0x1000);
initmsgbuf(msgbufaddr, m68k_round_page(MSGBUFSIZE));
/*
* Good {morning,afternoon,evening,night}.

@ -1,4 +1,4 @@
/* $NetBSD: pmap.c,v 1.26 1997/07/02 03:23:57 jeremy Exp $ */
/* $NetBSD: pmap.c,v 1.27 1997/09/19 13:55:44 leo Exp $ */
/*-
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@ -867,8 +867,10 @@ pmap_bootstrap(nextva)
* the address is assigned to this global pointer in cpu_startup().
* XXX - Make it non-cached?
*/
for (i = 0; i < btoc(MSGBUFSIZE); i++) {
pmap_enter_kernel(va, pa|PMAP_NC, VM_PROT_ALL);
va += NBPG; pa += NBPG;
}
/* Next page is used as the temporary stack. */
pmap_enter_kernel(va, pa, VM_PROT_ALL);

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.7 1997/07/10 08:23:31 veego Exp $ */
/* $NetBSD: param.h,v 1.8 1997/09/19 13:55:40 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -66,6 +66,10 @@
#include <m68k/param.h>
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Size of kernel malloc arena in CLBYTES-sized logical pages
*/

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.21 1997/09/12 10:29:33 mycroft Exp $ */
/* $NetBSD: machdep.c,v 1.22 1997/09/19 13:55:42 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -104,8 +104,8 @@ extern char etext[];
int physmem;
int fputype;
int msgbufmapped;
struct msgbuf *msgbufp;
caddr_t msgbufaddr;
vm_offset_t vmmap;
@ -255,8 +255,8 @@ cpu_startup()
* Also, offset some to avoid PROM scribbles.
*/
v = (caddr_t) KERNBASE;
msgbufp = (struct msgbuf *)(v + 0x1000);
msgbufmapped = 1;
msgbufaddr = (caddr_t)(v + 0x1000);
initmsgbuf(msgbufaddr, m68k_round_page(MSGBUFSIZE));
/*
* Good {morning,afternoon,evening,night}.

@ -1,4 +1,4 @@
/* $NetBSD: pmap.c,v 1.26 1997/07/02 03:23:57 jeremy Exp $ */
/* $NetBSD: pmap.c,v 1.27 1997/09/19 13:55:44 leo Exp $ */
/*-
* Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@ -867,8 +867,10 @@ pmap_bootstrap(nextva)
* the address is assigned to this global pointer in cpu_startup().
* XXX - Make it non-cached?
*/
for (i = 0; i < btoc(MSGBUFSIZE); i++) {
pmap_enter_kernel(va, pa|PMAP_NC, VM_PROT_ALL);
va += NBPG; pa += NBPG;
}
/* Next page is used as the temporary stack. */
pmap_enter_kernel(va, pa, VM_PROT_ALL);

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.24 1997/08/05 13:28:51 ragge Exp $ */
/* $NetBSD: param.h,v 1.25 1997/09/19 13:55:47 leo Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@ -94,6 +94,10 @@
#define UPAGES 16 /* pages of u-area */
#define USPACE (NBPG*UPAGES)
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Constants related to network buffer management.
* MCLBYTES must be no larger than CLBYTES (the software page size), and,

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.45 1997/07/26 10:12:49 ragge Exp $ */
/* $NetBSD: machdep.c,v 1.46 1997/09/19 13:55:49 leo Exp $ */
/*
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
@ -128,8 +128,7 @@ int want_resched;
char machine[] = MACHINE; /* from <machine/param.h> */
char machine_arch[] = MACHINE_ARCH; /* from <machine/param.h> */
char cpu_model[100];
int msgbufmapped = 0;
struct msgbuf *msgbufp;
caddr_t msgbufaddr;
int physmem;
struct cfdriver nexuscd;
int todrstopped = 0, glurg;
@ -165,7 +164,7 @@ cpu_startup()
/*
* Initialize error message buffer.
*/
msgbufmapped = 1;
initmsgbuf(msgbufaddr, round_page(MSGBUFSIZE));
#if VAX750 || VAX650
if (vax_cputype == VAX_750 || vax_cputype == VAX_650)

@ -1,4 +1,4 @@
/* $NetBSD: pmap.c,v 1.37 1997/07/25 21:54:48 ragge Exp $ */
/* $NetBSD: pmap.c,v 1.38 1997/09/19 13:55:51 leo Exp $ */
/*
* Copyright (c) 1994 Ludd, University of Lule}, Sweden.
* All rights reserved.
@ -35,7 +35,6 @@
#include <sys/malloc.h>
#include <sys/proc.h>
#include <sys/user.h>
#include <sys/msgbuf.h>
#include <sys/systm.h>
#include <sys/device.h>
@ -77,6 +76,8 @@ unsigned *pte_cmap;
void *scratch;
struct pmap p0pmap;
extern caddr_t msgbufaddr;
#ifdef PMAPDEBUG
int startpmapdebug = 0;
/* extern int startsysc, faultdebug; */
@ -205,7 +206,7 @@ pmap_bootstrap()
MAPPHYS(scratch, 4, VM_PROT_READ|VM_PROT_WRITE);
/* Kernel message buffer */
MAPPHYS(msgbufp, btoc(ROUND_PAGE(sizeof(struct msgbuf))),
MAPPHYS(msgbufaddr, btoc(ROUND_PAGE(MSGBUFSIZE)),
VM_PROT_READ|VM_PROT_WRITE);
/* Physical-to-virtual translation table */

@ -1,4 +1,4 @@
/* $NetBSD: param.h,v 1.6 1997/07/10 08:23:05 veego Exp $ */
/* $NetBSD: param.h,v 1.7 1997/09/19 13:55:52 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -64,6 +64,10 @@
#define NPTEPG (NBPG/(sizeof (pt_entry_t)))
#ifndef MSGBUFSIZE
#define MSGBUFSIZE NBPG /* default message buffer size */
#endif
/*
* Size of kernel malloc arena in CLBYTES-sized logical pages
*/

@ -1,4 +1,4 @@
/* $NetBSD: machdep.c,v 1.17 1997/09/12 10:29:34 mycroft Exp $ */
/* $NetBSD: machdep.c,v 1.18 1997/09/19 13:55:55 leo Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@ -123,7 +123,7 @@ int bufpages = BUFPAGES;
#else
int bufpages = 0;
#endif
int msgbufmapped; /* set when safe to use msgbuf */
caddr_t msgbufaddr;
int maxmem; /* max memory per process */
int physmem = MAXMEM; /* max supported memory, changes to actual */
/*
@ -198,15 +198,15 @@ cpu_startup()
* Initialize error message buffer (at end of core).
* avail_end was pre-decremented in pmap_bootstrap to compensate.
*/
for (i = 0; i < btoc(sizeof (struct msgbuf)); i++)
for (i = 0; i < btoc(MSGBUFSIZE); i++)
#ifdef MACHINE_NONCONTIG
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufp,
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufaddr + i * NBPG,
high[numranges - 1] + i * NBPG, VM_PROT_ALL, TRUE);
#else
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufp,
pmap_enter(pmap_kernel(), (vm_offset_t)msgbufaddr + i * NBPG,
avail_end + i * NBPG, VM_PROT_ALL, TRUE);
#endif
msgbufmapped = 1;
initmsgbuf(msgbufaddr, m68k_round_page(MSGBUFSIZE));
/*
* Good {morning,afternoon,evening,night}.

@ -1,4 +1,4 @@
/* $NetBSD: pmap_bootstrap.c,v 1.6 1997/06/10 20:18:35 veego Exp $ */
/* $NetBSD: pmap_bootstrap.c,v 1.7 1997/09/19 13:55:56 leo Exp $ */
/*
* Copyright (c) 1991, 1993
@ -40,7 +40,6 @@
*/
#include <sys/param.h>
#include <sys/msgbuf.h>
#include <machine/pte.h>
#include <x68k/x68k/iodevice.h>
#include <machine/vmparam.h>
@ -82,10 +81,10 @@ u_long high[8];
*
* CADDR1, CADDR2: pmap zero/copy operations
* vmmap: /dev/mem, crash dumps, parity error checking
* msgbufp: kernel message buffer
* msgbufaddr: kernel message buffer
*/
caddr_t CADDR1, CADDR2, vmmap;
struct msgbuf *msgbufp;
extern caddr_t msgbufaddr;
/*
* Bootstrap the VM system.
@ -442,7 +441,7 @@ pmap_bootstrap(nextpa, firstpa)
RELOC(avail_end, vm_offset_t) =
m68k_ptob(RELOC(maxmem, int))
/* XXX allow for msgbuf */
- m68k_round_page(sizeof(struct msgbuf));
- m68k_round_page(MSGBUFSIZE);
RELOC(avail_next, vm_offset_t) = nextpa;
RELOC(avail_remaining, vm_size_t) = 0;
RELOC(avail_range, int) = -1;
@ -459,8 +458,8 @@ int i;
}
}
physmem = m68k_btop(avail_remaining + nextpa - firstpa);
avail_remaining -= m68k_round_page(sizeof(struct msgbuf));
high[numranges - 1] -= m68k_round_page(sizeof(struct msgbuf));
avail_remaining -= m68k_round_page(MSGBUFSIZE);
high[numranges - 1] -= m68k_round_page(MSGBUFSIZE);
/* XXX -- this doesn't look correct to me. */
while (high[numranges - 1] < low[numranges - 1]) {
numranges--;
@ -554,8 +553,8 @@ int i;
va += NBPG;
RELOC(vmmap, caddr_t) = (caddr_t)va;
va += NBPG;
RELOC(msgbufp, struct msgbuf *) = (struct msgbuf *)va;
va += NBPG;
RELOC(msgbufaddr, caddr_t) = va;
va += m68k_round_page(MSGBUFSIZE);
RELOC(virtual_avail, vm_offset_t) = va;
}
}

@ -1,4 +1,4 @@
/* $NetBSD: kern_sysctl.c,v 1.27 1997/06/06 23:14:36 veego Exp $ */
/* $NetBSD: kern_sysctl.c,v 1.28 1997/09/19 13:56:39 leo Exp $ */
/*-
* Copyright (c) 1982, 1986, 1989, 1993
@ -57,6 +57,7 @@
#include <sys/device.h>
#include <vm/vm.h>
#include <sys/sysctl.h>
#include <sys/msgbuf.h>
#include <sys/mount.h>
#include <sys/syscallargs.h>
@ -310,6 +311,16 @@ kern_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
case KERN_ROOT_DEVICE:
return (sysctl_rdstring(oldp, oldlenp, newp,
root_device->dv_xname));
case KERN_MSGBUFSIZE:
/*
* deal with cases where the message buffer has
* become corrupted.
*/
if (!msgbufenabled || msgbufp->msg_magic != MSG_MAGIC) {
msgbufenabled = 0;
return (ENXIO);
}
return (sysctl_rdint(oldp, oldlenp, newp, msgbufp->msg_bufs));
default:
return (EOPNOTSUPP);
}

@ -1,4 +1,4 @@
/* $NetBSD: subr_log.c,v 1.12 1996/09/07 12:40:58 mycroft Exp $ */
/* $NetBSD: subr_log.c,v 1.13 1997/09/19 13:56:40 leo Exp $ */
/*
* Copyright (c) 1982, 1986, 1993
@ -64,6 +64,44 @@ struct logsoftc {
} logsoftc;
int log_open; /* also used in log() */
int msgbufmapped; /* is the message buffer mapped */
int msgbufenabled; /* is logging to the buffer enabled */
struct kern_msgbuf *msgbufp; /* the mapped buffer, itself. */
void
initmsgbuf(buf, bufsize)
caddr_t buf;
size_t bufsize;
{
register struct kern_msgbuf *mbp;
long new_bufs;
/* Sanity-check the given size. */
if (bufsize < sizeof(struct kern_msgbuf))
return;
mbp = msgbufp = (struct kern_msgbuf *)buf;
#define offsetof(type, member) ((size_t)(&((type *)0)->member))
new_bufs = bufsize - offsetof(struct kern_msgbuf, msg_bufc);
#undef offsetof
if ((mbp->msg_magic != MSG_MAGIC) || (mbp->msg_bufs != new_bufs) ||
(mbp->msg_bufr < 0) || (mbp->msg_bufr >= mbp->msg_bufs) ||
(mbp->msg_bufx < 0) || (mbp->msg_bufx >= mbp->msg_bufs)) {
/*
* If the buffer magic number is wrong, has changed
* size (which shouldn't happen often), or is
* internally inconsistent, initialize it.
*/
bzero(buf, bufsize);
mbp->msg_magic = MSG_MAGIC;
mbp->msg_bufs = new_bufs;
}
/* mark it as ready for use. */
msgbufmapped = msgbufenabled = 1;
}
/*ARGSUSED*/
int
@ -72,25 +110,23 @@ logopen(dev, flags, mode, p)
int flags, mode;
struct proc *p;
{
register struct msgbuf *mbp = msgbufp;
register struct kern_msgbuf *mbp = msgbufp;
if (log_open)
return (EBUSY);
log_open = 1;
logsoftc.sc_pgid = p->p_pid; /* signal process only */
/*
* Potential race here with putchar() but since putchar should be
* called by autoconf, msg_magic should be initialized by the time
* we get here.
* The message buffer is initialized during system configuration.
* If it's been clobbered, note that and return an error. (This
* allows a user to potentially read the buffer via /dev/kmem,
* and try to figure out what clobbered it.
*/
if (mbp->msg_magic != MSG_MAGIC) {
register int i;
mbp->msg_magic = MSG_MAGIC;
mbp->msg_bufx = mbp->msg_bufr = 0;
for (i=0; i < MSG_BSIZE; i++)
mbp->msg_bufc[i] = 0;
msgbufenabled = 0;
return (ENXIO);
}
return (0);
}
@ -114,7 +150,7 @@ logread(dev, uio, flag)
struct uio *uio;
int flag;
{
register struct msgbuf *mbp = msgbufp;
register struct kern_msgbuf *mbp = msgbufp;
register long l;
register int s;
int error = 0;
@ -139,7 +175,7 @@ logread(dev, uio, flag)
while (uio->uio_resid > 0) {
l = mbp->msg_bufx - mbp->msg_bufr;
if (l < 0)
l = MSG_BSIZE - mbp->msg_bufr;
l = mbp->msg_bufs - mbp->msg_bufr;
l = min(l, uio->uio_resid);
if (l == 0)
break;
@ -148,7 +184,7 @@ logread(dev, uio, flag)
if (error)
break;
mbp->msg_bufr += l;
if (mbp->msg_bufr < 0 || mbp->msg_bufr >= MSG_BSIZE)
if (mbp->msg_bufr < 0 || mbp->msg_bufr >= mbp->msg_bufs)
mbp->msg_bufr = 0;
}
return (error);
@ -214,7 +250,7 @@ logioctl(dev, com, data, flag, p)
l = msgbufp->msg_bufx - msgbufp->msg_bufr;
splx(s);
if (l < 0)
l += MSG_BSIZE;
l += msgbufp->msg_bufs;
*(int *)data = l;
break;

@ -1,4 +1,4 @@
/* $NetBSD: subr_prf.c,v 1.43 1997/06/26 05:17:45 thorpej Exp $ */
/* $NetBSD: subr_prf.c,v 1.44 1997/09/19 13:56:41 leo Exp $ */
/*-
* Copyright (c) 1986, 1988, 1991, 1993
@ -553,8 +553,7 @@ putchar(c, flags, tp)
int flags;
struct tty *tp;
{
extern int msgbufmapped;
register struct msgbuf *mbp;
register struct kern_msgbuf *mbp;
if (panicstr)
constty = NULL;
@ -566,16 +565,25 @@ putchar(c, flags, tp)
(flags & TOCONS) && tp == constty)
constty = NULL;
if ((flags & TOLOG) &&
c != '\0' && c != '\r' && c != 0177 && msgbufmapped) {
c != '\0' && c != '\r' && c != 0177 && msgbufenabled) {
mbp = msgbufp;
if (mbp->msg_magic != MSG_MAGIC) {
bzero((caddr_t)mbp, sizeof(*mbp));
mbp->msg_magic = MSG_MAGIC;
}
/*
* Arguably should panic or somehow notify the
* user... but how? Panic may be too drastic,
* and would obliterate the message being kicked
* out (maybe a panic itself), and printf
* would invoke us recursively. Silently punt
* for now. If syslog is running, it should
* notice.
*/
msgbufenabled = 0;
} else {
mbp->msg_bufc[mbp->msg_bufx++] = c;
if (mbp->msg_bufx < 0 || mbp->msg_bufx >= MSG_BSIZE)
if (mbp->msg_bufx < 0 || mbp->msg_bufx >= mbp->msg_bufs)
mbp->msg_bufx = 0;
}
}
if ((flags & TOCONS) && constty == NULL && c != '\0')
(*v_putc)(c);
}

@ -1,4 +1,4 @@
/* $NetBSD: msgbuf.h,v 1.9 1997/01/22 07:09:20 mikel Exp $ */
/* $NetBSD: msgbuf.h,v 1.10 1997/09/19 13:57:30 leo Exp $ */
/*
* Copyright (c) 1981, 1984, 1993
@ -38,16 +38,21 @@
#ifndef _SYS_MSGBUF_H_
#define _SYS_MSGBUF_H_
#define MSG_BSIZE (4096 - 3 * sizeof(long))
struct msgbuf {
struct kern_msgbuf {
#define MSG_MAGIC 0x063061
long msg_magic;
long msg_bufx; /* write pointer */
long msg_bufr; /* read pointer */
char msg_bufc[MSG_BSIZE]; /* buffer */
long msg_bufs; /* real msg_bufc size (bytes) */
char msg_bufc[1]; /* buffer */
};
#ifdef _KERNEL
struct msgbuf *msgbufp;
extern int msgbufmapped; /* is the message buffer mapped */
extern int msgbufenabled; /* is logging to the buffer enabled */
extern struct kern_msgbuf *msgbufp; /* the mapped buffer, itself. */
void initmsgbuf __P((caddr_t buf, size_t bufsize));
#endif
#endif /* !_SYS_MSGBUF_H_ */

@ -1,4 +1,4 @@
/* $NetBSD: sysctl.h,v 1.23 1997/06/06 23:14:38 veego Exp $ */
/* $NetBSD: sysctl.h,v 1.24 1997/09/19 14:05:53 leo Exp $ */
/*
* Copyright (c) 1989, 1993
@ -140,7 +140,8 @@ struct ctlname {
#define KERN_AUTONICEVAL 28 /* int: auto nice value */
#define KERN_RTC_OFFSET 29 /* int: offset of rtc from gmt */
#define KERN_ROOT_DEVICE 30 /* string: root device */
#define KERN_MAXID 31 /* number of valid kern ids */
#define KERN_MSGBUFSIZE 31 /* int: max # of chars in msg buffer */
#define KERN_MAXID 32 /* number of valid kern ids */
#define CTL_KERN_NAMES { \
{ 0, 0 }, \
@ -174,6 +175,7 @@ struct ctlname {
{ "autoniceval", CTLTYPE_INT }, \
{ "rtc_offset", CTLTYPE_INT }, \
{ "root_device", CTLTYPE_STRING }, \
{ "msgbufsize", CTLTYPE_INT }, \
}
/*