Module Name: src Committed By: matt Date: Fri Feb 3 19:25:07 UTC 2012
Modified Files: src/sys/uvm: uvm_km.c Log Message: Always allocate the kmem region. Add UVMHIST support. Approved by releng. To generate a diff of this commit: cvs rdiff -u -r1.117 -r1.118 src/sys/uvm/uvm_km.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/uvm/uvm_km.c diff -u src/sys/uvm/uvm_km.c:1.117 src/sys/uvm/uvm_km.c:1.118 --- src/sys/uvm/uvm_km.c:1.117 Thu Feb 2 18:59:45 2012 +++ src/sys/uvm/uvm_km.c Fri Feb 3 19:25:07 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_km.c,v 1.117 2012/02/02 18:59:45 para Exp $ */ +/* $NetBSD: uvm_km.c,v 1.118 2012/02/03 19:25:07 matt Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -120,7 +120,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.117 2012/02/02 18:59:45 para Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.118 2012/02/03 19:25:07 matt Exp $"); #include "opt_uvmhist.h" @@ -213,6 +213,12 @@ void uvm_km_bootstrap(vaddr_t start, vaddr_t end) { vaddr_t base = VM_MIN_KERNEL_ADDRESS; + struct uvm_map_args args; + int error; + + UVMHIST_FUNC(__func__); UVMHIST_CALLED(maphist); + UVMHIST_LOG(maphist, "start=%"PRIxVADDR" end=%#"PRIxVADDR, + start, end, 0,0); kmeminit_nkmempages(); kmemsize = nkmempages * PAGE_SIZE; @@ -221,6 +227,8 @@ uvm_km_bootstrap(vaddr_t start, vaddr_t ((((vsize_t)uvmexp.npages) * PAGE_SIZE) / 2)); kmemsize = round_page(kmemsize); */ + UVMHIST_LOG(maphist, "kmemsize=%#"PRIxVSIZE, kmemsize, 0,0,0); + /* * next, init kernel memory objects. */ @@ -237,9 +245,6 @@ uvm_km_bootstrap(vaddr_t start, vaddr_t uvm_map_setup(&kernel_map_store, base, end, VM_MAP_PAGEABLE); kernel_map_store.pmap = pmap_kernel(); if (start != base) { - int error; - struct uvm_map_args args; - error = uvm_map_prepare(&kernel_map_store, base, start - base, NULL, UVM_UNKNOWN_OFFSET, 0, @@ -257,25 +262,25 @@ uvm_km_bootstrap(vaddr_t start, vaddr_t "uvm_km_bootstrap: could not reserve space for kernel"); kmembase = args.uma_start + args.uma_size; - error = uvm_map_prepare(&kernel_map_store, - kmembase, kmemsize, - NULL, UVM_UNKNOWN_OFFSET, 0, - UVM_MAPFLAG(UVM_PROT_ALL, UVM_PROT_ALL, UVM_INH_NONE, - UVM_ADV_RANDOM, UVM_FLAG_FIXED), &args); - if (!error) { - kernel_kmem_mapent_store.flags = - UVM_MAP_KERNEL | UVM_MAP_STATIC | UVM_MAP_NOMERGE; - error = uvm_map_enter(&kernel_map_store, &args, - &kernel_kmem_mapent_store); - } - - if (error) - panic( - "uvm_km_bootstrap: could not reserve kernel kmem"); } else { kmembase = base; } + error = uvm_map_prepare(&kernel_map_store, + kmembase, kmemsize, + NULL, UVM_UNKNOWN_OFFSET, 0, + UVM_MAPFLAG(UVM_PROT_ALL, UVM_PROT_ALL, UVM_INH_NONE, + UVM_ADV_RANDOM, UVM_FLAG_FIXED), &args); + if (!error) { + kernel_kmem_mapent_store.flags = + UVM_MAP_KERNEL | UVM_MAP_STATIC | UVM_MAP_NOMERGE; + error = uvm_map_enter(&kernel_map_store, &args, + &kernel_kmem_mapent_store); + } + + if (error) + panic("uvm_km_bootstrap: could not reserve kernel kmem"); + /* * install! */ @@ -291,9 +296,14 @@ uvm_km_bootstrap(vaddr_t start, vaddr_t vmem_init(kmem_arena); + UVMHIST_LOG(maphist, "kmem vmem created (base=%#"PRIxVADDR + ", size=%#"PRIxVSIZE, kmembase, kmemsize, 0,0); + kmem_va_arena = vmem_create("kva", 0, 0, PAGE_SIZE, vmem_alloc, vmem_free, kmem_arena, 16 * PAGE_SIZE, VM_NOSLEEP | VM_BOOTSTRAP, IPL_VM); + + UVMHIST_LOG(maphist, "<- done", 0,0,0,0); } /* @@ -327,6 +337,7 @@ uvm_km_suballoc(struct vm_map *map, vadd struct vm_map *submap) { int mapflags = UVM_FLAG_NOMERGE | (fixed ? UVM_FLAG_FIXED : 0); + UVMHIST_FUNC(__func__); UVMHIST_CALLED(maphist); KASSERT(vm_map_pmap(map) == pmap_kernel()); @@ -339,7 +350,7 @@ uvm_km_suballoc(struct vm_map *map, vadd if (uvm_map(map, vmin, size, NULL, UVM_UNKNOWN_OFFSET, 0, UVM_MAPFLAG(UVM_PROT_ALL, UVM_PROT_ALL, UVM_INH_NONE, UVM_ADV_RANDOM, mapflags)) != 0) { - panic("uvm_km_suballoc: unable to allocate space in parent map"); + panic("%s: unable to allocate space in parent map", __func__); } /* @@ -384,7 +395,7 @@ uvm_km_pgremove(vaddr_t startva, vaddr_t struct vm_page *pg; voff_t curoff, nextoff; int swpgonlydelta = 0; - UVMHIST_FUNC("uvm_km_pgremove"); UVMHIST_CALLED(maphist); + UVMHIST_FUNC(__func__); UVMHIST_CALLED(maphist); KASSERT(VM_MIN_KERNEL_ADDRESS <= startva); KASSERT(startva < endva); @@ -445,7 +456,7 @@ uvm_km_pgremove_intrsafe(struct vm_map * { struct vm_page *pg; paddr_t pa; - UVMHIST_FUNC("uvm_km_pgremove_intrsafe"); UVMHIST_CALLED(maphist); + UVMHIST_FUNC(__func__); UVMHIST_CALLED(maphist); KASSERT(VM_MAP_IS_KERNEL(map)); KASSERT(vm_map_min(map) <= start); @@ -471,6 +482,7 @@ uvm_km_check_empty(struct vm_map *map, v struct vm_page *pg; vaddr_t va; paddr_t pa; + UVMHIST_FUNC(__func__); UVMHIST_CALLED(maphist); KDASSERT(VM_MAP_IS_KERNEL(map)); KDASSERT(vm_map_min(map) <= start); @@ -635,6 +647,7 @@ uvm_km_alloc(struct vm_map *map, vsize_t void uvm_km_free(struct vm_map *map, vaddr_t addr, vsize_t size, uvm_flag_t flags) { + UVMHIST_FUNC(__func__); UVMHIST_CALLED(maphist); KASSERT((flags & UVM_KMF_TYPEMASK) == UVM_KMF_WIRED || (flags & UVM_KMF_TYPEMASK) == UVM_KMF_PAGEABLE ||