Module Name: src Committed By: snj Date: Sun Apr 19 15:43:14 UTC 2009
Modified Files: src/sys/uvm [netbsd-5]: uvm_km.c uvm_km.h uvm_map.c Log Message: Pull up following revision(s) (requested by mrg in ticket #708): sys/uvm/uvm_km.c: revision 1.102 sys/uvm/uvm_km.h: revision 1.18 sys/uvm/uvm_map.c: revision 1.264 PR port-amd64/32816 amd64 can not load lkms Change some assertions to partially allow for VM_MAP_IS_KERNEL(map) where map is outside the range of kernel_map. To generate a diff of this commit: cvs rdiff -u -r1.101.4.1 -r1.101.4.2 src/sys/uvm/uvm_km.c cvs rdiff -u -r1.17 -r1.17.54.1 src/sys/uvm/uvm_km.h cvs rdiff -u -r1.263.4.2 -r1.263.4.3 src/sys/uvm/uvm_map.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.101.4.1 src/sys/uvm/uvm_km.c:1.101.4.2 --- src/sys/uvm/uvm_km.c:1.101.4.1 Sat Dec 27 18:26:22 2008 +++ src/sys/uvm/uvm_km.c Sun Apr 19 15:43:14 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_km.c,v 1.101.4.1 2008/12/27 18:26:22 snj Exp $ */ +/* $NetBSD: uvm_km.c,v 1.101.4.2 2009/04/19 15:43:14 snj Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -128,7 +128,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.101.4.1 2008/12/27 18:26:22 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_km.c,v 1.101.4.2 2009/04/19 15:43:14 snj Exp $"); #include "opt_uvmhist.h" @@ -462,15 +462,16 @@ */ void -uvm_km_pgremove_intrsafe(vaddr_t start, vaddr_t end) +uvm_km_pgremove_intrsafe(struct vm_map *map, vaddr_t start, vaddr_t end) { struct vm_page *pg; paddr_t pa; UVMHIST_FUNC("uvm_km_pgremove_intrsafe"); UVMHIST_CALLED(maphist); - KASSERT(VM_MIN_KERNEL_ADDRESS <= start); + KASSERT(VM_MAP_IS_KERNEL(map)); + KASSERT(vm_map_min(map) <= start); KASSERT(start < end); - KASSERT(end <= VM_MAX_KERNEL_ADDRESS); + KASSERT(end <= vm_map_max(map)); for (; start < end; start += PAGE_SIZE) { if (!pmap_extract(pmap_kernel(), start, &pa)) { @@ -485,23 +486,23 @@ #if defined(DEBUG) void -uvm_km_check_empty(vaddr_t start, vaddr_t end, bool intrsafe) +uvm_km_check_empty(struct vm_map *map, vaddr_t start, vaddr_t end) { + struct vm_page *pg; vaddr_t va; paddr_t pa; - KDASSERT(VM_MIN_KERNEL_ADDRESS <= start); + KDASSERT(VM_MAP_IS_KERNEL(map)); + KDASSERT(vm_map_min(map) <= start); KDASSERT(start < end); - KDASSERT(end <= VM_MAX_KERNEL_ADDRESS); + KDASSERT(end <= vm_map_max(map)); for (va = start; va < end; va += PAGE_SIZE) { if (pmap_extract(pmap_kernel(), va, &pa)) { panic("uvm_km_check_empty: va %p has pa 0x%llx", (void *)va, (long long)pa); } - if (!intrsafe) { - const struct vm_page *pg; - + if ((map->flags & VM_MAP_INTRSAFE) == 0) { mutex_enter(&uvm_kernel_object->vmobjlock); pg = uvm_pagelookup(uvm_kernel_object, va - vm_map_min(kernel_map)); @@ -657,7 +658,7 @@ uvm_km_pgremove(addr, addr + size); pmap_remove(pmap_kernel(), addr, addr + size); } else if (flags & UVM_KMF_WIRED) { - uvm_km_pgremove_intrsafe(addr, addr + size); + uvm_km_pgremove_intrsafe(map, addr, addr + size); pmap_kremove(addr, size); } @@ -767,7 +768,7 @@ } KASSERT(pmap_extract(pmap_kernel(), addr, NULL)); - uvm_km_pgremove_intrsafe(addr, addr + PAGE_SIZE); + uvm_km_pgremove_intrsafe(map, addr, addr + PAGE_SIZE); pmap_kremove(addr, PAGE_SIZE); #if defined(DEBUG) pmap_update(pmap_kernel()); Index: src/sys/uvm/uvm_km.h diff -u src/sys/uvm/uvm_km.h:1.17 src/sys/uvm/uvm_km.h:1.17.54.1 --- src/sys/uvm/uvm_km.h:1.17 Wed Feb 21 23:00:13 2007 +++ src/sys/uvm/uvm_km.h Sun Apr 19 15:43:14 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_km.h,v 1.17 2007/02/21 23:00:13 thorpej Exp $ */ +/* $NetBSD: uvm_km.h,v 1.17.54.1 2009/04/19 15:43:14 snj Exp $ */ /* * @@ -49,9 +49,9 @@ void uvm_km_init(vaddr_t, vaddr_t); void uvm_km_pgremove(vaddr_t, vaddr_t); -void uvm_km_pgremove_intrsafe(vaddr_t, vaddr_t); +void uvm_km_pgremove_intrsafe(struct vm_map *, vaddr_t, vaddr_t); #if defined(DEBUG) -void uvm_km_check_empty(vaddr_t, vaddr_t, bool); +void uvm_km_check_empty(struct vm_map *, vaddr_t, vaddr_t); #else #define uvm_km_check_empty(a, b, c) /* nothing */ #endif /* defined(DEBUG) */ Index: src/sys/uvm/uvm_map.c diff -u src/sys/uvm/uvm_map.c:1.263.4.2 src/sys/uvm/uvm_map.c:1.263.4.3 --- src/sys/uvm/uvm_map.c:1.263.4.2 Mon Feb 2 18:31:37 2009 +++ src/sys/uvm/uvm_map.c Sun Apr 19 15:43:14 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_map.c,v 1.263.4.2 2009/02/02 18:31:37 snj Exp $ */ +/* $NetBSD: uvm_map.c,v 1.263.4.3 2009/04/19 15:43:14 snj Exp $ */ /* * Copyright (c) 1997 Charles D. Cranor and Washington University. @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.263.4.2 2009/02/02 18:31:37 snj Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_map.c,v 1.263.4.3 2009/04/19 15:43:14 snj Exp $"); #include "opt_ddb.h" #include "opt_uvmhist.h" @@ -1198,8 +1198,7 @@ #if defined(DEBUG) if (!error && VM_MAP_IS_KERNEL(map)) { - uvm_km_check_empty(*startp, *startp + size, - (map->flags & VM_MAP_INTRSAFE) != 0); + uvm_km_check_empty(map, *startp, *startp + size); } #endif /* defined(DEBUG) */ @@ -2328,7 +2327,7 @@ */ if ((entry->flags & UVM_MAP_KMAPENT) == 0) { - uvm_km_pgremove_intrsafe(entry->start, + uvm_km_pgremove_intrsafe(map, entry->start, entry->end); pmap_kremove(entry->start, len); } @@ -2406,8 +2405,8 @@ } if (VM_MAP_IS_KERNEL(map)) { - uvm_km_check_empty(entry->start, entry->end, - (map->flags & VM_MAP_INTRSAFE) != 0); + uvm_km_check_empty(map, entry->start, + entry->end); } } #endif /* defined(DEBUG) */