svn commit: r238269 - user/attilio/vmc-playground/sys/vm
Attilio Rao
attilio at FreeBSD.org
Sun Jul 8 23:50:58 UTC 2012
Author: attilio
Date: Sun Jul 8 23:50:57 2012
New Revision: 238269
URL: http://svn.freebsd.org/changeset/base/238269
Log:
- Move VM_RADIX_STACK in vm_object.c because it is the only consumer
- Import the check for the return value of vm_radix_lookup() directly
in the while removing the need to use a spourious check.
Modified:
user/attilio/vmc-playground/sys/vm/vm_object.c
user/attilio/vmc-playground/sys/vm/vm_radix.h
Modified: user/attilio/vmc-playground/sys/vm/vm_object.c
==============================================================================
--- user/attilio/vmc-playground/sys/vm/vm_object.c Sun Jul 8 23:20:15 2012 (r238268)
+++ user/attilio/vmc-playground/sys/vm/vm_object.c Sun Jul 8 23:50:57 2012 (r238269)
@@ -96,6 +96,8 @@ __FBSDID("$FreeBSD$");
#include <vm/vm_reserv.h>
#include <vm/uma.h>
+#define VM_RADIX_STACK 8 /* Nodes to store on stack for ranged ops. */
+
static int old_msync;
SYSCTL_INT(_vm, OID_AUTO, old_msync, CTLFLAG_RW, &old_msync, 0,
"Use old (insecure) msync behavior");
@@ -729,8 +731,10 @@ vm_object_terminate(vm_object_t object)
*/
start = 0;
exhausted = 0;
- while (exhausted == 0 && (n = vm_radix_lookupn(&object->rtree, start,
- 0, (void **)pa, VM_RADIX_STACK, &start, &exhausted)) != 0) {
+ n = VM_RADIX_STACK;
+ while (n == VM_RADIX_STACK && exhausted == 0 &&
+ (n = vm_radix_lookupn(&object->rtree, start, 0, (void **)pa,
+ VM_RADIX_STACK, &start, &exhausted)) != 0) {
for (i = 0; i < n; i++) {
p = pa[i];
KASSERT(!p->busy && (p->oflags & VPO_BUSY) == 0,
@@ -755,8 +759,6 @@ vm_object_terminate(vm_object_t object)
}
vm_page_unlock(p);
}
- if (n < VM_RADIX_STACK)
- break;
}
vm_radix_reclaim_allnodes(&object->rtree);
vp = NULL;
@@ -764,9 +766,10 @@ vm_object_terminate(vm_object_t object)
mtx_lock(&vm_page_queue_free_mtx);
start = 0;
exhausted = 0;
- while (exhausted == 0 && (n = vm_radix_lookupn(&object->cache,
- start, 0, (void **)pa, VM_RADIX_STACK, &start,
- &exhausted)) != 0) {
+ n = VM_RADIX_STACK;
+ while (n == VM_RADIX_STACK && exhausted == 0 &&
+ (n = vm_radix_lookupn(&object->cache, start, 0,
+ (void **)pa, VM_RADIX_STACK, &start, &exhausted)) != 0) {
for (i = 0; i < n; i++) {
p = pa[i];
MPASS(p->object == object);
@@ -787,8 +790,6 @@ vm_object_terminate(vm_object_t object)
if (object->type == OBJT_VNODE)
vp = object->handle;
}
- if (n < VM_RADIX_STACK)
- break;
}
vm_radix_reclaim_allnodes(&object->cache);
mtx_unlock(&vm_page_queue_free_mtx);
@@ -1389,8 +1390,10 @@ vm_object_split(vm_map_entry_t entry)
start = offidxstart;
retry:
exhausted = 0;
- while (exhausted == 0 && (n = vm_radix_lookupn(&orig_object->rtree,
- start, offidxstart + size, (void **)ma, VM_RADIX_STACK, &start,
+ n = VM_RADIX_STACK;
+ while (n == VM_RADIX_STACK && exhausted == 0 &&
+ (n = vm_radix_lookupn(&orig_object->rtree, start,
+ offidxstart + size, (void **)ma, VM_RADIX_STACK, &start,
&exhausted)) != 0) {
for (i = 0; i < n; i++) {
m = ma[i];
@@ -1438,8 +1441,6 @@ retry:
*/
vm_page_busy(m);
}
- if (n < VM_RADIX_STACK)
- break;
}
if (orig_object->type == OBJT_SWAP) {
/*
@@ -1454,8 +1455,9 @@ retry:
if (!vm_object_cache_is_empty(orig_object)) {
start = offidxstart;
exhausted = 0;
+ n = VM_RADIX_STACK;
mtx_lock(&vm_page_queue_free_mtx);
- while (exhausted == 0 &&
+ while (n == VM_RADIX_STACK && exhausted == 0 &&
(n = vm_radix_lookupn(&orig_object->cache, start,
offidxstart + size, (void **)ma, VM_RADIX_STACK,
&start, &exhausted)) != 0) {
@@ -1465,8 +1467,6 @@ retry:
vm_page_cache_rename(m, new_object,
idx);
}
- if (n < VM_RADIX_STACK)
- break;
}
mtx_unlock(&vm_page_queue_free_mtx);
}
@@ -1532,9 +1532,7 @@ restart:
exhausted = 0;
for (;;) {
if (i == n) {
- if (n < VM_RADIX_STACK)
- break;
- if (exhausted != 0 ||
+ if (n < VM_RADIX_STACK || exhausted != 0 ||
(n = vm_radix_lookupn(&backing_object->rtree,
start, 0, (void **)pa, VM_RADIX_STACK,
&start, &exhausted)) == 0)
@@ -1827,16 +1825,16 @@ vm_object_collapse(vm_object_t object)
*/
start = 0;
exhausted = 0;
+ n = VM_RADIX_STACK;
mtx_lock(&vm_page_queue_free_mtx);
- while (exhausted == 0 && (n =
+ while (n == VM_RADIX_STACK &&
+ exhausted == 0 && (n =
vm_radix_lookupn(&backing_object->cache,
start, 0, (void **)pa,
VM_RADIX_STACK, &start,
&exhausted)) != 0) {
for (i = 0; i < n; i++)
vm_page_cache_free(pa[i]);
- if (n < VM_RADIX_STACK)
- break;
}
mtx_unlock(&vm_page_queue_free_mtx);
}
@@ -1981,8 +1979,10 @@ vm_object_page_remove(vm_object_t object
cstart = start;
restart:
exhausted = 0;
- while (exhausted == 0 && (n = vm_radix_lookupn(&object->rtree, start,
- end, (void **)pa, VM_RADIX_STACK, &start, &exhausted)) != 0) {
+ n = VM_RADIX_STACK;
+ while (n == VM_RADIX_STACK && exhausted == 0 &&
+ (n = vm_radix_lookupn(&object->rtree, start, end, (void **)pa,
+ VM_RADIX_STACK, &start, &exhausted)) != 0) {
for (i = 0; i < n; i++) {
p = pa[i];
@@ -2039,17 +2039,16 @@ restart:
vm_page_free(p);
vm_page_unlock(p);
}
- if (n < VM_RADIX_STACK)
- break;
}
vm_object_pip_wakeup(object);
if (!vm_object_cache_is_empty(object)) {
start = cstart;
exhausted = 0;
+ n = VM_RADIX_STACK;
mtx_lock(&vm_page_queue_free_mtx);
- while (exhausted == 0 && (n = vm_radix_lookupn(&object->cache,
- start, end, (void **)pa, VM_RADIX_STACK, &start,
- &exhausted)) != 0) {
+ while (n == VM_RADIX_STACK && exhausted == 0 &&
+ (n = vm_radix_lookupn(&object->cache, start, end,
+ (void **)pa, VM_RADIX_STACK, &start, &exhausted)) != 0) {
for (i = 0; i < n; i++) {
p = pa[i];
vm_page_cache_free(p);
@@ -2057,8 +2056,6 @@ restart:
object->type == OBJT_VNODE)
vp = object->handle;
}
- if (n < VM_RADIX_STACK)
- break;
}
mtx_unlock(&vm_page_queue_free_mtx);
}
Modified: user/attilio/vmc-playground/sys/vm/vm_radix.h
==============================================================================
--- user/attilio/vmc-playground/sys/vm/vm_radix.h Sun Jul 8 23:20:15 2012 (r238268)
+++ user/attilio/vmc-playground/sys/vm/vm_radix.h Sun Jul 8 23:50:57 2012 (r238269)
@@ -29,8 +29,6 @@
#ifndef _VM_RADIX_H_
#define _VM_RADIX_H_
-#define VM_RADIX_STACK 8 /* Nodes to store on stack. */
-
/*
* Radix tree root. The height and pointer are set together to permit
* coherent lookups while the root is modified.
More information about the svn-src-user
mailing list