summaryrefslogtreecommitdiffstats
path: root/sys/vm/phys_pager.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-06-22 07:54:42 +0000
committeralc <alc@FreeBSD.org>2002-06-22 07:54:42 +0000
commit3e6234b7f895c11692cf0735b4a03973010d2ebf (patch)
tree0c641e34526847cde8e756de590a73b6ba930f4d /sys/vm/phys_pager.c
parentb81ea3e3e56beba1059bab00cba957c257d43be5 (diff)
downloadFreeBSD-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.c11
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)
{
OpenPOWER on IntegriCloud