Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 Jun 1999 21:14:37 +0200 (CEST)
From:      Tor Egge <tegge@taskmaster.fast.no>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   kern/12378: pmap_growkernel doesn't update all page directories
Message-ID:  <199906241914.VAA02717@taskmaster.fast.no>

next in thread | raw e-mail | index | archive | help

>Number:         12378
>Category:       kern
>Synopsis:       pmap_growkernel doesn't update all page directories
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jun 24 12:20:01 PDT 1999
>Closed-Date:
>Last-Modified:
>Originator:     Tor Egge
>Release:        FreeBSD 3.2-STABLE i386
>Organization:
Fast Search & Transfer ASA
>Environment:

FreeBSD 4.0-CURRENT and FreeBSD 3.2-STABLE

>Description:

When creating new processes (or performing exec), the new page
directory is initialized too early.  The kernel might grow before
p_vmspace is initialized for the new process.  Since pmap_growkernel()
doesn't yet know about the new page directory, it isn't updated, and
subsequent use causes a failure.

In the following gdb trace, attemting to switch to the new process
caused an immediate trap when attempting to access the pcb:

GDB is free software and you are welcome to distribute copies of it
 under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.16 (i386-unknown-freebsd), 
Copyright 1996 Free Software Foundation, Inc...
IdlePTD 2994176
initial pcb at 26c408
panicstr: page fault
panic messages:
---
Fatal trap 12: page fault while in kernel mode
mp_lock = 00000004; cpuid = 0; lapic.id = 01000000
fault virtual address	= 0xdffce078
fault code		= supervisor read, page not present
instruction pointer	= 0x8:0xe0215143
stack pointer	        = 0x10:0xf37fbac8
frame pointer	        = 0x10:0xf37fbae0
code segment		= base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, def32 1, gran 1
processor eflags	= interrupt enabled, resume, IOPL = 0
current process		= Idle
interrupt mask		= net tty bio cam  <- SMP: XXX
trap number		= 12
panic: page fault
mp_lock = 00000004; cpuid = 0; lapic.id = 01000000
boot() called on cpu#0

syncing disks... 

Fatal trap 12: page fault while in kernel mode
mp_lock = 00000006; cpuid = 0; lapic.id = 01000000
fault virtual address	= 0xdffce000
fault code		= supervisor read, page not present
instruction pointer	= 0x8:0xe0215143
stack pointer	        = 0x10:0xf37fb6ac
frame pointer	        = 0x10:0xf37fb6c4
code segment		= base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, def32 1, gran 1
processor eflags	= interrupt enabled, resume, IOPL = 0
current process		= Idle
interrupt mask		= net tty bio cam  <- SMP: XXX
trap number		= 12
panic: page fault
mp_lock = 00000006; cpuid = 0; lapic.id = 01000000
boot() called on cpu#0


Fatal trap 12: page fault while in kernel mode
mp_lock = 00000008; cpuid = 0; lapic.id = 01000000
fault virtual address	= 0xb8
fault code		= supervisor read, page not present
instruction pointer	= 0x8:0xe0152c63
stack pointer	        = 0x10:0xf37fafcc
frame pointer	        = 0x10:0xf37fafe0
code segment		= base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, def32 1, gran 1
processor eflags	= interrupt enabled, resume, IOPL = 0
current process		= Idle
interrupt mask		= net tty bio cam  <- SMP: XXX
trap number		= 12
panic: page fault
mp_lock = 00000008; cpuid = 0; lapic.id = 01000000
boot() called on cpu#0


Fatal trap 12: page fault while in kernel mode
mp_lock = 0000000a; cpuid = 0; lapic.id = 01000000
fault virtual address	= 0xb8
fault code		= supervisor read, page not present
instruction pointer	= 0x8:0xe0152c63
stack pointer	        = 0x10:0xf37fa8ec
frame pointer	        = 0x10:0xf37fa900
code segment		= base 0x0, limit 0xfffff, type 0x1b
			= DPL 0, pres 1, def32 1, gran 1
processor eflags	= interrupt enabled, resume, IOPL = 0
current process		= Idle
interrupt mask		= net tty bio cam  <- SMP: XXX
trap number		= 12
panic: page fault
mp_lock = 0000000a; cpuid = 0; lapic.id = 01000000
boot() called on cpu#0

dumping to dev 50401, offset 1083718
[snip]
---
#0  cpu_dump (pcb=0xe026c408) at ../../i386/i386/vm_machdep.c:703
#0  cpu_dump (pcb=0xe026c408) at ../../i386/i386/vm_machdep.c:703
#1  0xe0150c5d in boot (howto=260) at ../../kern/kern_shutdown.c:284
#2  0xe0150f11 in panic (fmt=0xe024b7bc "page fault")
    at ../../kern/kern_shutdown.c:443
#3  0xe02182e0 in trap_fatal (frame=0xf37fa8b0, eva=184)
    at ../../i386/i386/trap.c:944
#4  0xe0217f5b in trap_pfault (frame=0xf37fa8b0, usermode=0, eva=184)
    at ../../i386/i386/trap.c:837
#5  0xe0217bb6 in trap (frame={tf_es = -535560176, tf_ds = -534314992, 
      tf_edi = 0, tf_esi = -524802280, tf_ebp = -209737472, 
      tf_isp = -209737512, tf_ebx = 0, tf_edx = -524802280, tf_ecx = 1, 
      tf_eax = -1, tf_trapno = 12, tf_err = 0, tf_eip = -535483293, tf_cs = 8, 
      tf_eflags = 66118, tf_esp = 0, tf_ss = -1}) at ../../i386/i386/trap.c:438
#6  0xe0152c63 in tsleep (ident=0xe0b82718, priority=0, 
    wmesg=0xe024583a "vmpfw", timo=0) at ../../kern/kern_synch.c:383
#7  0xe01eb10a in vm_fault (map=0xe0276974, vaddr=4085374976, 
    fault_type=7 '\a', fault_flags=0) at ../../vm/vm_fault.c:308
#8  0xe0217f08 in trap_pfault (frame=0xf37faa1c, usermode=0, eva=4085378574)
    at ../../i386/i386/trap.c:826
#9  0xe0217bb6 in trap (frame={tf_es = -534642672, tf_ds = -534249456, 
      tf_edi = -338861024, tf_esi = 1024, tf_ebp = -209737072, 
      tf_isp = -209737148, tf_ebx = -209588784, tf_edx = 0, 
      tf_ecx = -526171960, tf_eax = 252, tf_trapno = 12, tf_err = 2, 
      tf_eip = -535361779, tf_cs = 8, tf_eflags = 66118, tf_esp = -338861024, 
      tf_ss = -471714816}) at ../../i386/i386/trap.c:438
#10 0xe017070d in biodone (bp=0xebcd6420) at ../../kern/vfs_bio.c:2021
#11 0xe0124bb1 in dadone (periph=0xe3e24f80, done_ccb=0xe3f9a800)
    at ../../cam/scsi/scsi_da.c:1312
#12 0xe01207d7 in camisr (queue=0xe0269ce4) at ../../cam/cam_xpt.c:6147
#13 0xe01205e9 in swi_cambio () at ../../cam/cam_xpt.c:6054
#14 0xe011dc98 in xpt_polled_action (start_ccb=0xf37fad40)
    at ../../cam/cam_xpt.c:3342
#15 0xe0125081 in dashutdown (howto=260, arg=0x0)
    at ../../cam/scsi/scsi_da.c:1602
#16 0xe0150c29 in boot (howto=260) at ../../kern/kern_shutdown.c:280
#17 0xe0150f11 in panic (fmt=0xe024b7bc "page fault")
    at ../../kern/kern_shutdown.c:443
#18 0xe02182e0 in trap_fatal (frame=0xf37faf90, eva=184)
    at ../../i386/i386/trap.c:944
#19 0xe0217f5b in trap_pfault (frame=0xf37faf90, usermode=0, eva=184)
    at ../../i386/i386/trap.c:837
#20 0xe0217bb6 in trap (frame={tf_es = -535560176, tf_ds = -534314992, 
      tf_edi = 0, tf_esi = -524802280, tf_ebp = -209735712, 
      tf_isp = -209735752, tf_ebx = 0, tf_edx = -524802280, tf_ecx = 1, 
      tf_eax = -1, tf_trapno = 12, tf_err = 0, tf_eip = -535483293, tf_cs = 8, 
      tf_eflags = 66118, tf_esp = 0, tf_ss = -1}) at ../../i386/i386/trap.c:438
#21 0xe0152c63 in tsleep (ident=0xe0b82718, priority=0, 
    wmesg=0xe024583a "vmpfw", timo=0) at ../../kern/kern_synch.c:383
#22 0xe01eb10a in vm_fault (map=0xe0276974, vaddr=4085374976, 
    fault_type=7 '\a', fault_flags=0) at ../../vm/vm_fault.c:308
#23 0xe0217f08 in trap_pfault (frame=0xf37fb0fc, usermode=0, eva=4085378302)
    at ../../i386/i386/trap.c:826
#24 0xe0217bb6 in trap (frame={tf_es = -534642672, tf_ds = -534249456, 
      tf_edi = -338867832, tf_esi = 1024, tf_ebp = -209735312, 
      tf_isp = -209735388, tf_ebx = -209589056, tf_edx = 0, 
      tf_ecx = -524263300, tf_eax = 252, tf_trapno = 12, tf_err = 2, 
      tf_eip = -535361779, tf_cs = 8, tf_eflags = 66118, tf_esp = -338867832, 
      tf_ss = -471720960}) at ../../i386/i386/trap.c:438
#25 0xe017070d in biodone (bp=0xebcd4988) at ../../kern/vfs_bio.c:2021
#26 0xe0124bb1 in dadone (periph=0xe3e14100, done_ccb=0xe3e31800)
    at ../../cam/scsi/scsi_da.c:1312
#27 0xe01207d7 in camisr (queue=0xe0269ce4) at ../../cam/cam_xpt.c:6147
#28 0xe01205e9 in swi_cambio () at ../../cam/cam_xpt.c:6054
#29 0xe011dc98 in xpt_polled_action (start_ccb=0xf37fb420)
    at ../../cam/cam_xpt.c:3342
#30 0xe0125081 in dashutdown (howto=260, arg=0x0)
    at ../../cam/scsi/scsi_da.c:1602
#31 0xe0150c29 in boot (howto=260) at ../../kern/kern_shutdown.c:280
#32 0xe0150f11 in panic (fmt=0xe024b7bc "page fault")
    at ../../kern/kern_shutdown.c:443
#33 0xe02182e0 in trap_fatal (frame=0xf37fb670, eva=3757891584)
    at ../../i386/i386/trap.c:944
#34 0xe0217f5b in trap_pfault (frame=0xf37fb670, usermode=0, eva=3757891584)
    at ../../i386/i386/trap.c:837
#35 0xe0217bb6 in trap (frame={tf_es = -209780720, tf_ds = -534904816, 
      tf_edi = 890245120, tf_esi = -1, tf_ebp = -209733948, 
      tf_isp = -209733992, tf_ebx = -209715200, tf_edx = -541065216, 
      tf_ecx = -537075712, tf_eax = -537075712, tf_trapno = 12, tf_err = 0, 
      tf_eip = -534687421, tf_cs = 8, tf_eflags = 66182, tf_esp = -534287904, 
      tf_ss = -1}) at ../../i386/i386/trap.c:438
#36 0xe0215143 in pmap_enter (pmap=0xe028465c, va=4085252096, pa=890245120, 
    prot=7 '\a', wired=1) at ../../i386/i386/pmap.c:2365
#37 0xe01eb75a in vm_fault (map=0xe0276974, vaddr=4085252096, 
    fault_type=7 '\a', fault_flags=0) at ../../vm/vm_fault.c:749
#38 0xe0217f08 in trap_pfault (frame=0xf37fb7e4, usermode=0, eva=4085252656)
    at ../../i386/i386/trap.c:826
#39 0xe0217bb6 in trap (frame={tf_es = -209780720, tf_ds = -535756784, 
      tf_edi = -1, tf_esi = -1, tf_ebp = -209733588, tf_isp = -209733620, 
      tf_ebx = -534299712, tf_edx = -209714640, tf_ecx = 1, tf_eax = 117, 
      tf_trapno = 12, tf_err = 0, tf_eip = -534807689, tf_cs = 8, 
      tf_eflags = 66179, tf_esp = -335695872, tf_ss = -234924360})
    at ../../i386/i386/trap.c:438
#40 0xe01f7b77 in zalloci (z=0xe0273bc0) at ../../vm/vm_zone.h:87
#41 0xe01ecbff in vm_map_entry_create (map=0xe0276848)
    at ../../vm/vm_zone.h:117
#42 0xe01ed71e in _vm_map_clip_end (map=0xe0276848, entry=0xf1ff56b8, 
    end=3959271424) at ../../vm/vm_map.c:1063
#43 0xe01eeaff in vm_map_delete (map=0xe0276848, start=3959263232, 
    end=3959271424) at ../../vm/vm_map.c:2000
#44 0xe016e472 in bfreekva (bp=0xebceb5c0) at ../../kern/vfs_bio.c:239
#45 0xe016f62b in getnewbuf (vp=0xf1c74ec0, blkno=1664, slpflag=0, slptimeo=0, 
    size=1024, maxsize=4096) at ../../kern/vfs_bio.c:1157
#46 0xe016fd1c in getblk (vp=0xf1c74ec0, blkno=1664, size=1024, slpflag=0, 
    slptimeo=0) at ../../kern/vfs_bio.c:1512
#47 0xe01e0c9a in ffs_sbupdate (mp=0xe3e2aa00, waitfor=2)
    at ../../ufs/ffs/ffs_vfsops.c:1261
#48 0xe01e08a0 in ffs_sync (mp=0xe3e28e00, waitfor=2, cred=0xe1e6b100, 
    p=0xe02856a0) at ../../ufs/ffs/ffs_vfsops.c:1023
#49 0xe0177d4b in sync (p=0xe02856a0, uap=0x0) at ../../kern/vfs_syscalls.c:549
#50 0xe0150aa0 in boot (howto=256) at ../../kern/kern_shutdown.c:203
#51 0xe0150f11 in panic (fmt=0xe024b7bc "page fault")
    at ../../kern/kern_shutdown.c:443
#52 0xe02182e0 in trap_fatal (frame=0xf37fba8c, eva=3757891704)
    at ../../i386/i386/trap.c:944
#53 0xe0217f5b in trap_pfault (frame=0xf37fba8c, usermode=0, eva=3757891704)
    at ../../i386/i386/trap.c:837
#54 0xe0217bb6 in trap (frame={tf_es = -209780720, tf_ds = -534904816, 
      tf_edi = 433451008, tf_esi = -1, tf_ebp = -209732896, 
      tf_isp = -209732940, tf_ebx = -209592320, tf_edx = -541065216, 
      tf_ecx = -537075592, tf_eax = -537075592, tf_trapno = 12, tf_err = 0, 
      tf_eip = -534687421, tf_cs = 8, tf_eflags = 66182, tf_esp = -534287904, 
      tf_ss = -1}) at ../../i386/i386/trap.c:438
#55 0xe0215143 in pmap_enter (pmap=0xe028465c, va=4085374976, pa=433451008, 
    prot=7 '\a', wired=1) at ../../i386/i386/pmap.c:2365
#56 0xe01eb75a in vm_fault (map=0xe0276974, vaddr=4085374976, 
    fault_type=7 '\a', fault_flags=0) at ../../vm/vm_fault.c:749
#57 0xe0217f08 in trap_pfault (frame=0xf37fbc00, usermode=0, eva=4085376064)
    at ../../i386/i386/trap.c:826
#58 0xe0217bb6 in trap (frame={tf_es = 2037514256, tf_ds = 1162280976, 
      tf_edi = -1, tf_esi = -1, tf_ebp = -209732536, tf_isp = -209732568, 
      tf_ebx = -534287616, tf_edx = -209591232, tf_ecx = 1, tf_eax = 39, 
      tf_trapno = 12, tf_err = 0, tf_eip = -534807689, tf_cs = 8, 
      tf_eflags = 66179, tf_esp = 3, tf_ss = 0}) at ../../i386/i386/trap.c:438
#59 0xe01f7b77 in zalloci (z=0xe0276b00) at ../../vm/vm_zone.h:87
#60 0xe01f10f3 in vm_object_allocate (type=OBJT_DEFAULT, size=3)
    at ../../vm/vm_object.c:225
#61 0xe01ef5e8 in vm_map_lookup (var_map=0xf37fbd1c, vaddr=4085256192, 
    fault_typea=1 '\001', out_entry=0xf37fbd20, object=0xf37fbd14, 
    pindex=0xf37fbd18, out_prot=0xf37fbd03 "", wired=0xf37fbcfc)
    at ../../vm/vm_map.c:2668
#62 0xe01eaf57 in vm_fault (map=0xe0276974, vaddr=4085256192, 
    fault_type=1 '\001', fault_flags=0) at ../../vm/vm_fault.c:198
#63 0xe0217f08 in trap_pfault (frame=0xf37fbdd0, usermode=0, eva=4085256424)
    at ../../i386/i386/trap.c:826
#64 0xe0217bb6 in trap (frame={tf_es = -534249456, tf_ds = 16, tf_edi = 0, 
      tf_esi = 6, tf_ebp = -209732052, tf_isp = -209732104, 
      tf_ebx = 1026977792, tf_edx = -209711104, tf_ecx = -210500928, 
      tf_eax = 3026979, tf_trapno = 12, tf_err = 0, tf_eip = -534679513, 
      tf_cs = 8, tf_eflags = 65543, tf_esp = -535481203, tf_ss = -210500224})
    at ../../i386/i386/trap.c:438
#65 0xe0217027 in swtch_com ()
#66 0xe0152d91 in tsleep (ident=0xf13afc44, priority=280, 
    wmesg=0xe023cf9c "sbwait", timo=0) at ../../kern/kern_synch.c:443
#67 0xe016a29f in sbwait (sb=0xf13afc44) at ../../kern/uipc_socket2.c:278
#68 0xe0169187 in soreceive (so=0xf13afc00, psa=0x0, uio=0xf37fbf00, mp0=0x0, 
    controlp=0x0, flagsp=0x0) at ../../kern/uipc_socket.c:676
#69 0xe015efe0 in soo_read (fp=0xe5686140, uio=0xf37fbf00, cred=0xe3fced00, 
    flags=0) at ../../kern/sys_socket.c:70
#70 0xe015ba41 in dofileread (p=0xf3740580, fp=0xe5686140, fd=191, 
    buf=0xdfbfd594, nbyte=996, offset=0xffffffffffffffff, flags=0)
    at ../../kern/sys_generic.c:179
#71 0xe015b94b in read (p=0xf3740580, uap=0xf37fbf84)
    at ../../kern/sys_generic.c:111
#72 0xe021855b in syscall (frame={tf_es = 39, tf_ds = 39, tf_edi = 191, 
      tf_esi = -541076076, tf_ebp = -541075076, tf_isp = -209731628, 
      tf_ebx = 191, tf_edx = -541077092, tf_ecx = 9, tf_eax = 3, 
      tf_trapno = 12, tf_err = 2, tf_eip = 973696924, tf_cs = 31, 
      tf_eflags = 646, tf_esp = -541077132, tf_ss = 39})
    at ../../i386/i386/trap.c:1102
#73 0xe02074bc in Xint0x80_syscall ()
(kgdb) disassemble swtch_com
Dump of assembler code for function swtch_com:
0xe0216fc1 <swtch_com>: movl   $0x0,%eax
0xe0216fc6 <swtch_com+5>:       movl   %eax,0xe0263fa4
0xe0216fcb <swtch_com+10>:      movl   %eax,0x4(%ecx)
0xe0216fce <swtch_com+13>:      movl   0x11c(%ecx),%edx
0xe0216fd4 <swtch_com+19>:      movl   0x60(%ecx),%eax
0xe0216fd7 <swtch_com+22>:      movl   0x64(%eax),%esi
0xe0216fda <swtch_com+25>:      cmpl   %esi,0xff8000c0
0xe0216fe0 <swtch_com+31>:      jne    0xe0216fee <swtch_com+45>
0xe0216fe2 <swtch_com+33>:      movl   0xff8000bc,%edi
0xe0216fe8 <swtch_com+39>:      btrl   %edi,0x10(%esi)
0xe0216fec <swtch_com+43>:      jmp    0xe0217021 <swtch_com+96>
0xe0216fee <swtch_com+45>:      bsfl   0x10(%esi),%edi
0xe0216ff2 <swtch_com+49>:      btrl   %edi,0x10(%esi)
0xe0216ff6 <swtch_com+53>:      movl   $0xdff7f000,%eax
0xe0216ffb <swtch_com+58>:      movl   0xff8(%eax),%eax
0xe0217001 <swtch_com+64>:      movl   0x0(%esi,%edi,4),%ebx
0xe0217005 <swtch_com+68>:      movl   %eax,0xff8(%ebx)
0xe021700b <swtch_com+74>:      movl   0x8(%esi,%edi,4),%ebx
0xe021700f <swtch_com+78>:      movl   %ebx,0x0(%edx)
0xe0217012 <swtch_com+81>:      movl   %ebx,%cr3
0xe0217015 <swtch_com+84>:      movl   %esi,0xff8000c0
0xe021701b <swtch_com+90>:      movl   %edi,0xff8000bc
0xe0217021 <swtch_com+96>:      movl   0xff80008c,%esi
0xe0217027 <swtch_com+102>:     cmpl   $0x0,0xe8(%edx)
(kgdb) print ((struct proc *) -210500928)
$1 = (struct proc *) 0xf37402c0
(kgdb) print ((struct proc *) -210500928)->p_addr
$2 = (struct user *) 0xf3801000
(kgdb) print ((struct proc *) -210500928)->p_vmspace.vm_pmap->pm_pdirs[0]
$3 = (unsigned int **) 0xf37ff000


>How-To-Repeat:

Start many processes on a newly rebooted machine.  Add a suitable
amount of bad luck.

>Fix:

Clear p_vmspace early, to stop pmap_growkernel from stomping on
memory.

Defer part of the initialization of new page directories until
p_vmspace is initialized.

(diff for 4.0-current)

Index: sys/kern/kern_fork.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_fork.c,v
retrieving revision 1.61
diff -u -r1.61 kern_fork.c
--- kern_fork.c	1999/04/28 11:36:53	1.61
+++ kern_fork.c	1999/06/24 17:31:56
@@ -227,6 +227,8 @@
 
 	newproc->p_wakeup = 0;
 
+	newproc->p_vmspace = NULL;
+
 	/*
 	 * Find an unused process ID.  We remember a range of unused IDs
 	 * ready to use (from nextpid+1 through pidchecked-1).
Index: sys/vm/vm_glue.c
===================================================================
RCS file: /home/ncvs/src/sys/vm/vm_glue.c,v
retrieving revision 1.86
diff -u -r1.86 vm_glue.c
--- vm_glue.c	1999/06/19 18:42:49	1.86
+++ vm_glue.c	1999/06/24 17:53:14
@@ -226,6 +226,8 @@
 	if ((flags & RFMEM) == 0) {
 		p2->p_vmspace = vmspace_fork(p1->p_vmspace);
 
+		pmap_pinit2(vmspace_pmap(p2->p_vmspace));
+
 		if (p1->p_vmspace->vm_shm)
 			shmfork(p1, p2);
 	}
Index: sys/vm/vm_map.c
===================================================================
RCS file: /home/ncvs/src/sys/vm/vm_map.c,v
retrieving revision 1.170
diff -u -r1.170 vm_map.c
--- vm_map.c	1999/06/17 21:29:38	1.170
+++ vm_map.c	1999/06/24 17:52:56
@@ -2363,6 +2369,7 @@
 	 */
 	vmspace_free(oldvmspace);
 	p->p_vmspace = newvmspace;
+	pmap_pinit2(vmspace_pmap(newvmspace));
 	if (p == curproc)
 		pmap_activate(p);
 }
@@ -2382,6 +2389,7 @@
 	newvmspace = vmspace_fork(oldvmspace);
 	vmspace_free(oldvmspace);
 	p->p_vmspace = newvmspace;
+	pmap_pinit2(vmspace_pmap(newvmspace));
 	if (p == curproc)
 		pmap_activate(p);
 }
Index: sys/vm/pmap.h
===================================================================
RCS file: /home/ncvs/src/sys/vm/pmap.h,v
retrieving revision 1.30
diff -u -r1.30 pmap.h
--- pmap.h	1999/04/23 20:29:57	1.30
+++ pmap.h	1999/06/24 17:51:52
@@ -121,6 +121,7 @@
 vm_offset_t	 pmap_phys_address __P((int));
 void		 pmap_pinit __P((pmap_t));
 void		 pmap_pinit0 __P((pmap_t));
+void		 pmap_pinit2 __P((pmap_t));
 void		 pmap_protect __P((pmap_t, vm_offset_t, vm_offset_t,
 		    vm_prot_t));
 void		 pmap_qenter __P((vm_offset_t, vm_page_t *, int));
Index: sys/i386/i386/pmap.c
===================================================================
RCS file: /home/ncvs/src/sys/i386/i386/pmap.c,v
retrieving revision 1.240
diff -u -r1.240 pmap.c
--- pmap.c	1999/06/23 21:47:21	1.240
+++ pmap.c	1999/06/24 18:10:46
@@ -1172,9 +1176,6 @@
 	if ((ptdpg->flags & PG_ZERO) == 0)
 		bzero(pmap->pm_pdir, PAGE_SIZE);
 
-	/* wire in kernel global address entries */
-	/* XXX copies current process, does not fill in MPPTDI */
-	bcopy(PTD + KPTDI, pmap->pm_pdir + KPTDI, nkpt * PTESIZE);
 #ifdef SMP
 	pmap->pm_pdir[MPPTDI] = PTD[MPPTDI];
 #endif
@@ -1190,6 +1191,15 @@
 	bzero(&pmap->pm_stats, sizeof pmap->pm_stats);
 }
 
+void
+pmap_pinit2(pmap)
+	register struct pmap *pmap;
+{
+	/* wire in kernel global address entries */
+	/* XXX copies current process, does not fill in MPPTDI */
+	bcopy(PTD + KPTDI, pmap->pm_pdir + KPTDI, nkpt * PTESIZE);
+}
+
 static int
 pmap_release_free_page(pmap, p)
 	struct pmap *pmap;

>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199906241914.VAA02717>