From b55d9ecfd5b0941480cd616f58f2c28913fe0749 Mon Sep 17 00:00:00 2001 From: Mike Hibler Date: Tue, 22 Mar 1994 00:32:20 -0800 Subject: [PATCH 1/1] allocate segment tables out of a private submap that doesn't require pre-allocated kernel map entries SCCS-vsn: sys/hp300/hp300/pmap.c 8.5 --- usr/src/sys/hp300/hp300/pmap.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/usr/src/sys/hp300/hp300/pmap.c b/usr/src/sys/hp300/hp300/pmap.c index 004cf75e57..033f927b7f 100644 --- a/usr/src/sys/hp300/hp300/pmap.c +++ b/usr/src/sys/hp300/hp300/pmap.c @@ -8,7 +8,7 @@ * * %sccs.include.redist.c% * - * @(#)pmap.c 8.4 (Berkeley) %G% + * @(#)pmap.c 8.5 (Berkeley) %G% */ /* @@ -236,7 +236,7 @@ st_entry_t *Segtabzero, *Segtabzeropa; vm_size_t Sysptsize = VM_KERNEL_PT_PAGES; struct pmap kernel_pmap_store; -vm_map_t pt_map; +vm_map_t st_map, pt_map; vm_offset_t avail_start; /* PA of first available physical page */ vm_offset_t avail_end; /* PA of last available physical page */ @@ -420,6 +420,12 @@ bogons: atop(s), addr, addr + s); #endif + /* + * Allocate the segment table map + */ + s = maxproc * HP_STSIZE; + st_map = kmem_suballoc(kernel_map, &addr, &addr2, s, TRUE); + /* * Slightly modified version of kmem_suballoc() to get page table * map where we want it. @@ -604,7 +610,8 @@ pmap_release(pmap) kmem_free_wakeup(pt_map, (vm_offset_t)pmap->pm_ptab, HP_MAX_PTSIZE); if (pmap->pm_stab != Segtabzero) - kmem_free(kernel_map, (vm_offset_t)pmap->pm_stab, HP_STSIZE); + kmem_free_wakeup(st_map, (vm_offset_t)pmap->pm_stab, + HP_STSIZE); } /* @@ -1983,9 +1990,9 @@ pmap_remove_mapping(pmap, va, pte, flags) printf("remove: free stab %x\n", ptpmap->pm_stab); #endif - kmem_free(kernel_map, - (vm_offset_t)ptpmap->pm_stab, - HP_STSIZE); + kmem_free_wakeup(st_map, + (vm_offset_t)ptpmap->pm_stab, + HP_STSIZE); ptpmap->pm_stab = Segtabzero; ptpmap->pm_stpa = Segtabzeropa; #if defined(HP380) @@ -2218,14 +2225,14 @@ pmap_enter_ptpage(pmap, va) #endif /* * Allocate a segment table if necessary. Note that it is allocated - * from kernel_map and not pt_map. This keeps user page tables + * from a private map and not pt_map. This keeps user page tables * aligned on segment boundaries in the kernel address space. * The segment table is wired down. It will be freed whenever the * reference count drops to zero. */ if (pmap->pm_stab == Segtabzero) { pmap->pm_stab = (st_entry_t *) - kmem_alloc(kernel_map, HP_STSIZE); + kmem_alloc(st_map, HP_STSIZE); pmap->pm_stpa = (st_entry_t *) pmap_extract(kernel_pmap, (vm_offset_t)pmap->pm_stab); #if defined(HP380) -- 2.20.1