diff options
author | alc <alc@FreeBSD.org> | 2002-06-22 07:54:42 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2002-06-22 07:54:42 +0000 |
commit | 3e6234b7f895c11692cf0735b4a03973010d2ebf (patch) | |
tree | 0c641e34526847cde8e756de590a73b6ba930f4d /sys/vm/phys_pager.c | |
parent | b81ea3e3e56beba1059bab00cba957c257d43be5 (diff) | |
download | FreeBSD-src-3e6234b7f895c11692cf0735b4a03973010d2ebf.zip FreeBSD-src-3e6234b7f895c11692cf0735b4a03973010d2ebf.tar.gz |
o Remove GIANT_REQUIRED from phys_pager_alloc(). If handle isn't NULL,
acquire and release Giant. If handle is NULL, Giant isn't needed.
o Annotate phys_pager_alloc() and phys_pager_dealloc() as MPSAFE.
Diffstat (limited to 'sys/vm/phys_pager.c')
-rw-r--r-- | sys/vm/phys_pager.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sys/vm/phys_pager.c b/sys/vm/phys_pager.c index 76b7efc..a93dda1 100644 --- a/sys/vm/phys_pager.c +++ b/sys/vm/phys_pager.c @@ -56,14 +56,15 @@ phys_pager_init(void) mtx_init(&phys_pager_mtx, "phys_pager list", NULL, MTX_DEF); } +/* + * MPSAFE + */ static vm_object_t phys_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot, vm_ooffset_t foff) { vm_object_t object; - GIANT_REQUIRED; - /* * Offset should be page aligned. */ @@ -73,6 +74,7 @@ phys_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot, size = round_page(size); if (handle != NULL) { + mtx_lock(&Giant); /* * Lock to prevent object creation race condition. */ @@ -108,7 +110,7 @@ phys_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot, if (phys_pager_alloc_lock == -1) wakeup(&phys_pager_alloc_lock); phys_pager_alloc_lock = 0; - + mtx_unlock(&Giant); } else { object = vm_object_allocate(OBJT_PHYS, OFF_TO_IDX(foff + size)); @@ -117,6 +119,9 @@ phys_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot, return (object); } +/* + * MPSAFE + */ static void phys_pager_dealloc(vm_object_t object) { |