From c93a1be72bccb1fe439910ab62060fbd513b94c2 Mon Sep 17 00:00:00 2001 From: alfred Date: Wed, 23 May 2001 22:17:28 +0000 Subject: pmap_mapdev needs the vm_mtx, aquire it if not already locked --- sys/amd64/amd64/pmap.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'sys/amd64') diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index fd4fed3..c6db00b 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -3135,10 +3135,15 @@ pmap_mapdev(pa, size) { vm_offset_t va, tmpva, offset; unsigned *pte; + int hadvmlock; offset = pa & PAGE_MASK; size = roundup(offset + size, PAGE_SIZE); + hadvmlock = mtx_owned(&vm_mtx); + if (!hadvmlock) + mtx_lock(&vm_mtx); + va = kmem_alloc_pageable(kernel_map, size); if (!va) panic("pmap_mapdev: Couldn't alloc kernel virtual memory"); @@ -3153,6 +3158,9 @@ pmap_mapdev(pa, size) } invltlb(); + if (!hadvmlock) + mtx_unlock(&vm_mtx); + return ((void *)(va + offset)); } -- cgit v1.1