diff options
author | alc <alc@FreeBSD.org> | 2010-05-03 17:35:31 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2010-05-03 17:35:31 +0000 |
commit | 0ec9744723453231e9fd60b03b8c68d4ce625cf7 (patch) | |
tree | 9d191e34674db9a2754ac117636f950b9334e903 /sys | |
parent | 77a3b0ef9e6b06d4ee34650022fbf4cf4af410c9 (diff) | |
download | FreeBSD-src-0ec9744723453231e9fd60b03b8c68d4ce625cf7.zip FreeBSD-src-0ec9744723453231e9fd60b03b8c68d4ce625cf7.tar.gz |
It makes more sense for the object-based backend allocator to use OBJT_PHYS
objects instead of OBJT_DEFAULT objects because we never reclaim or pageout
the allocated pages. Moreover, they are mapped with pmap_qenter(), which
creates unmanaged mappings.
Reviewed by: kib
Diffstat (limited to 'sys')
-rw-r--r-- | sys/vm/uma_core.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index 00a8276..e1b9a08 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -1022,12 +1022,8 @@ obj_alloc(uma_zone_t zone, int bytes, u_int8_t *flags, int wait) while (pages != startpages) { pages--; p = TAILQ_LAST(&object->memq, pglist); - vm_page_lock(p); - vm_page_lock_queues(); vm_page_unwire(p, 0); vm_page_free(p); - vm_page_unlock_queues(); - vm_page_unlock(p); } retkva = 0; goto done; @@ -2893,13 +2889,11 @@ uma_zone_set_obj(uma_zone_t zone, struct vm_object *obj, int count) if (kva == 0) return (0); - if (obj == NULL) { - obj = vm_object_allocate(OBJT_DEFAULT, - pages); - } else { + if (obj == NULL) + obj = vm_object_allocate(OBJT_PHYS, pages); + else { VM_OBJECT_LOCK_INIT(obj, "uma object"); - _vm_object_allocate(OBJT_DEFAULT, - pages, obj); + _vm_object_allocate(OBJT_PHYS, pages, obj); } ZONE_LOCK(zone); keg->uk_kva = kva; |