Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Aug 2008 19:51:33 GMT
From:      Mayur Shardul <mayur@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 148645 for review
Message-ID:  <200808271951.m7RJpXKJ039690@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=148645

Change 148645 by mayur@mayur_freebsd_vm on 2008/08/27 19:51:04

	Bug fixes and cleanup.

Affected files ...

.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/default_pager.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/device_pager.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/memguard.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/memguard.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/phys_pager.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/pmap.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/radix_tree.c#3 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/radix_tree.h#3 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/redzone.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/redzone.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/swap_pager.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/swap_pager.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/uma.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/uma_core.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/uma_dbg.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/uma_dbg.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/uma_int.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_contig.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_extern.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_fault.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_glue.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_init.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_kern.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_kern.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_map.c#3 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_map.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_meter.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_mmap.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_object.c#4 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_object.h#4 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_page.c#4 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_page.h#3 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_pageout.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_pageout.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_pager.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_pager.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_param.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_phys.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_phys.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_reserv.c#4 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_reserv.h#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_unix.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_zeroidle.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vnode_pager.c#2 edit
.. //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vnode_pager.h#2 edit

Differences ...

==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/default_pager.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/device_pager.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/memguard.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/memguard.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/phys_pager.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/pmap.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/radix_tree.c#3 (text+ko) ====

@@ -253,6 +253,9 @@
 	rtidx_t slot;
 	struct radix_node *tmp;
 
+	if(index > MASK(rtree->rt_height * rtree->rt_bits_per_level)){
+		return NULL;
+	}
 	level = rtree->rt_height - 1;
 	tmp = rtree->rt_root;
 	while (tmp){
@@ -278,6 +281,9 @@
 	SLIST_HEAD(, radix_node) rtree_path =
 	    SLIST_HEAD_INITIALIZER(rtree_path);
 
+	if(index > MASK(rtree->rt_height * rtree->rt_bits_per_level))
+		return NULL;
+
 	level = rtree->rt_height - 1;
 	tmp = rtree->rt_root;
 	while (tmp){
@@ -294,9 +300,9 @@
 		     */
 			tmp = SLIST_FIRST(&rtree_path);
 			SLIST_REMOVE_HEAD(&rtree_path, next);
-			while (level != 0)
+			while (1)
 			{
-		    		while(slot <= MASK(rtree->rt_bits_per_level)
+		    		while (slot <= MASK(rtree->rt_bits_per_level)
 				    && tmp->rn_children[slot] == NULL)
 					slot++;
 				if(slot > MASK(rtree->rt_bits_per_level)){
@@ -316,7 +322,6 @@
 				slot = 0;
 				level--;
 			}
-			return tmp;
 		}
 		level--;
 	}
@@ -336,6 +341,9 @@
 	SLIST_HEAD(, radix_node) rtree_path =
 	    SLIST_HEAD_INITIALIZER(rtree_path);
 
+	if(index > MASK(rtree->rt_height * rtree->rt_bits_per_level))
+		index = MASK(rtree->rt_height * rtree->rt_bits_per_level);
+
 	level = rtree->rt_height - 1;
 	tmp = rtree->rt_root;
 	while (tmp){
@@ -352,11 +360,13 @@
 		     */
 			tmp = SLIST_FIRST(&rtree_path);
 			SLIST_REMOVE_HEAD(&rtree_path, next);
-			while (level != 0)
-			{
-		    		while(slot >= 0 
-				    && tmp->rn_children[slot] == NULL)
+			while (1){
+		    		while (slot > 0 
+					&& tmp->rn_children[slot] == NULL)
+					slot--;
+				if(tmp->rn_children[slot] == NULL){
 					slot--;
+				}
 				if(slot > MASK(rtree->rt_bits_per_level)){
 			    		if(level == rtree->rt_height - 1)
 						return NULL;
@@ -366,15 +376,13 @@
 					slot = get_slot(index,rtree,level) - 1;
 					continue;
 				}
-				if(level == 0){
+				if(level == 0)
 					return tmp->rn_children[slot];
-				}
 				SLIST_INSERT_HEAD(&rtree_path, tmp, next);
 				tmp = tmp->rn_children[slot];
 				slot = MASK(rtree->rt_bits_per_level);
 				level--;
 			}
-			return tmp;
 		}
 		level--;
 	}

==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/radix_tree.h#3 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/redzone.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/redzone.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/swap_pager.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/swap_pager.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/uma.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/uma_core.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/uma_dbg.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/uma_dbg.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/uma_int.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_contig.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_extern.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_fault.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_glue.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_init.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_kern.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_kern.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_map.c#3 (text+ko) ====

@@ -1501,14 +1501,19 @@
 	start = 0;
 	p_start = NULL;
 
+	/*
 	if ((p = TAILQ_FIRST(&object->memq)) != NULL) {
 		if (p->pindex < pindex) {
-			p = vm_page_lookup_geidx(pindex, object);
-			//p = vm_page_splay(pindex, object->root);
-			//if ((object->root = p)->pindex < pindex)
-			//	p = TAILQ_NEXT(p, listq);
+			
+			p = vm_page_splay(pindex, object->root);
+			if ((object->root = p)->pindex < pindex)
+				p = TAILQ_NEXT(p, listq);
+			 
+			r = radix_tree_lookup_ge(pindex, &object->rtree);
+			KASSERT(r == p, ("r != p, lookup_ge failed\n"));
 		}
-	}
+	}*/
+	p = radix_tree_lookup_ge(pindex, &object->rtree);
 	/*
 	 * Assert: the variable p is either (1) the page with the
 	 * least pindex greater than or equal to the parameter pindex

==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_map.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_meter.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_mmap.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_object.c#4 (text+ko) ====

@@ -216,12 +216,13 @@
 	TAILQ_INIT(&object->memq);
 	LIST_INIT(&object->shadow_head);
 
+	//object->root = NULL;
 	object->rtree.rt_bits_per_level = 4;
 	object->rtree.rt_height = 0;
 	object->rtree.rt_root = NULL;
 	object->rtree.rt_max_height = (8*sizeof(rtidx_t))/4;
 	object->rtree.rt_max_index = ~((rtidx_t)0);
-	//object->root = NULL;
+
 	object->type = type;
 	object->size = size;
 	object->generation = 1;
@@ -696,10 +697,6 @@
 #endif
 	if (__predict_false(object->cache != NULL))
 		vm_page_cache_free(object, 0, 0);
-	radix_tree_shrink(&object->rtree);
-	if(object->rtree.rt_root != NULL)
-	    panic("VM_ALGO: rt_root != NULL\n");
-
 
 	/*
 	 * Let the pager know object is dead.
@@ -1365,10 +1362,17 @@
 retry:
 	if ((m = TAILQ_FIRST(&orig_object->memq)) != NULL) {
 		if (m->pindex < offidxstart) {
-			m = vm_page_lookup_geidx(offidxstart, orig_object);
-			//m = vm_page_splay(offidxstart, orig_object->root);
-			//if ((orig_object->root = m)->pindex < offidxstart)
-			//	m = TAILQ_NEXT(m, listq);
+			/*
+			m = vm_page_splay(offidxstart, orig_object->root);
+			if ((orig_object->root = m)->pindex < offidxstart)
+				m = TAILQ_NEXT(m, listq);
+			*/
+			m = radix_tree_lookup_ge(offidxstart, 
+						 &orig_object->rtree);
+			/*
+			KASSERT( r == m, ("VM_ALGO: vm_object_split "
+			                   "lookup_ge failed"));
+			*/
 		}
 	}
 	vm_page_lock_queues();
@@ -1888,10 +1892,16 @@
 	vm_page_lock_queues();
 	if ((p = TAILQ_FIRST(&object->memq)) != NULL) {
 		if (p->pindex < start) {
-			p = vm_page_lookup_geidx(start,object);
-			//p = vm_page_splay(start, object->root);
-			//if ((object->root = p)->pindex < start)
-			//	p = TAILQ_NEXT(p, listq);
+			/*
+			p = vm_page_splay(start, object->root);
+			if ((object->root = p)->pindex < start)
+				p = TAILQ_NEXT(p, listq);
+			*/
+			p = radix_tree_lookup_ge(start, &object->rtree);
+			/*
+			KASSERT(r == p, ("VM_ALGO: vm_object_page_remove "
+					  "lookup_ge failed\n"));
+			*/
 		}
 	}
 	/*

==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_object.h#4 (text+ko) ====

@@ -90,7 +90,7 @@
 	LIST_ENTRY(vm_object) shadow_list; /* chain of shadow objects */
 	TAILQ_HEAD(, vm_page) memq;	/* list of resident pages */
 	//vm_page_t root;			/* root of the resident page splay tree */
-	struct radix_tree rtree;	/* root of the resident page radix tree */
+	struct radix_tree rtree;
 	vm_pindex_t size;		/* Object size */
 	int generation;			/* generation ID */
 	int ref_count;			/* How many refs?? */

==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_page.c#4 (text+ko) ====

@@ -289,7 +289,6 @@
 		    next);
 		mapped += rnode_size;
 	}
-
 	/*
 	 * Allocate memory for use when boot strapping the kernel memory
 	 * allocator.
@@ -350,6 +349,9 @@
 	mapped = pmap_map(&vaddr, new_end, end,
 	    VM_PROT_READ | VM_PROT_WRITE);
 	vm_page_array = (vm_page_t) mapped;
+	
+
+
 #if VM_NRESERVLEVEL > 0
 	/*
 	 * Allocate memory for the reservation management system's data
@@ -655,7 +657,7 @@
 void
 vm_page_insert(vm_page_t m, vm_object_t object, vm_pindex_t pindex)
 {
-	//vm_page_t root;
+	vm_page_t neighbour;
 
 	VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
 	if (m->object != NULL)
@@ -692,9 +694,26 @@
 			TAILQ_INSERT_AFTER(&object->memq, root, m, listq);
 		}
 	}
-	object->root = m;*/
+	object->root = m;
+	*/
+	if(object->resident_page_count == 0){
+		TAILQ_INSERT_TAIL(&object->memq, m, listq);
+	}
+	else{ 
+		if((neighbour = radix_tree_lookup_ge(pindex, 
+		     &object->rtree)) != NULL){
+		    	KASSERT( pindex != neighbour->pindex, ("vm_page_insert"
+				    ": offset already allocated"));
+			TAILQ_INSERT_BEFORE(neighbour, m, listq);
+		}else{
+			neighbour = radix_tree_lookup_le(pindex, 
+							 &object->rtree);
+			TAILQ_INSERT_AFTER(&object->memq, neighbour, m, listq);
+		}
+	}
+
 	object->generation++;
-	radix_tree_insert(pindex,&object->rtree,m);
+	radix_tree_insert(pindex, &object->rtree, m);
 
 	/*
 	 * show that the object has one more resident page.
@@ -753,9 +772,8 @@
 		root = vm_page_splay(m->pindex, m->left);
 		root->right = m->right;
 	}
-	object->root = root;*/
-
-	radix_tree_remove(m->pindex,&object->rtree);
+	object->root = root;
+	*/
 	TAILQ_REMOVE(&object->memq, m, listq);
 
 	/*
@@ -763,6 +781,7 @@
 	 */
 	object->resident_page_count--;
 	object->generation++;
+	radix_tree_remove(m->pindex,&object->rtree);
 	/*
 	 * The vnode may now be recycled.
 	 */
@@ -785,19 +804,18 @@
 vm_page_t
 vm_page_lookup(vm_object_t object, vm_pindex_t pindex)
 {
-	
 	vm_page_t m;
+
+	VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
 	/*
-	VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
 	if ((m = object->root) != NULL && m->pindex != pindex) {
 		m = vm_page_splay(pindex, m);
 		if ((object->root = m)->pindex != pindex)
 			m = NULL;
 	}
 	*/
-	m = radix_tree_lookup(pindex,&object->rtree);
-	//if(r != m && m != NULL && m->pindex == pindex)
-	//	panic("VM_ALGO: vm_page_lookup r != m\n");
+	m = radix_tree_lookup(pindex, &object->rtree);
+	//KASSERT( r == m, ("VM_ALGO: r != m, lookup failed."));
 	return (m);
 }
 
@@ -1678,10 +1696,10 @@
 	}
 	object->root = root;
 	*/
+	radix_tree_remove(m->pindex, &object->rtree);
 	TAILQ_REMOVE(&object->memq, m, listq);
 	object->resident_page_count--;
 	object->generation++;
-	radix_tree_remove(m->pindex,&object->rtree);
 
 	/*
 	 * Insert the page into the object's collection of cached pages
@@ -2144,33 +2162,6 @@
 	pmap_remove_write(m);
 }
 
-/*
- * vm_page_lookup_geidx:
- * returns index which is grater than or equal to given index from the tree.
- *
- */
-
-vm_page_t
-vm_page_lookup_geidx(vm_pindex_t index, vm_object_t object)
-{
-	vm_pindex_t i = 0;
-	vm_page_t p;
-
-	do{
-		p = (vm_page_t) radix_tree_lookup(index - i, 
-		    &object->rtree);
-		i++;
-	}while (i <= index);
-	if(i > index)
-	    return NULL;
-	if(p != NULL){
-	    if(i == 0)
-		return p;
-	    return TAILQ_NEXT(p, listq);
-	}
-	return p;
-}
-
 #include "opt_ddb.h"
 #ifdef DDB
 #include <sys/kernel.h>

==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_page.h#3 (text+ko) ====

@@ -325,7 +325,6 @@
 void vm_page_deactivate (vm_page_t);
 void vm_page_insert (vm_page_t, vm_object_t, vm_pindex_t);
 vm_page_t vm_page_lookup (vm_object_t, vm_pindex_t);
-vm_page_t vm_page_lookup_geidx (vm_pindex_t , vm_object_t);
 void vm_page_remove (vm_page_t);
 void vm_page_rename (vm_page_t, vm_object_t, vm_pindex_t);
 void vm_page_requeue(vm_page_t m);

==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_pageout.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_pageout.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_pager.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_pager.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_param.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_phys.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_phys.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_reserv.c#4 (text+ko) ====

@@ -311,51 +311,16 @@
 	/*
 	 * Look for an existing reservation.
 	 */
-	msucc = NULL;
+	//msucc = NULL;
 	//mpred = object->root;
-	mpred = radix_tree_lookup_le(pindex, &object->rtree);
-	if(mpred != NULL && mpred->object == object){
-		KASSERT(mpred->pindex != pindex,
-			    ("vm_reserv_alloc_page: pindex already allocated"));
-		rv = vm_reserv_from_page(mpred);
-		KASSERT( rv != NULL, ("vm_reserv_alloc_page: null rv"));
-		if (rv->object == object && vm_reserv_has_pindex(rv, pindex)) {
-			m = &rv->pages[VM_RESERV_INDEX(object, pindex)];
-			 //Handle vm_page_rename(m, new_object, ...). 
-			if ((m->flags & (PG_CACHED | PG_FREE)) == 0)
-				return (NULL);
-			vm_reserv_populate(rv);
-			return (m);
-		}
-	}else{
-		mpred = NULL;
-	}
-
-	msucc = radix_tree_lookup_ge(pindex, &object->rtree);
-	if(msucc != NULL && msucc->object == object){
-		KASSERT(msucc->pindex != pindex,
-			    ("vm_reserv_alloc_page: pindex already allocated"));
-		rv = vm_reserv_from_page(msucc);
-		KASSERT( rv != NULL, ("vm_reserv_alloc_page: null rv"));
-		if (rv->object == object && vm_reserv_has_pindex(rv, pindex)) {
-			m = &rv->pages[VM_RESERV_INDEX(object, pindex)];
-			 //Handle vm_page_rename(m, new_object, ...). 
-			if ((m->flags & (PG_CACHED | PG_FREE)) == 0)
-				return (NULL);
-			vm_reserv_populate(rv);
-			return (m);
-		}
-	}else{
-		msucc = NULL;
-	}
 	/*
-	   while (mpred != NULL) {
+	while (mpred != NULL) {
 		KASSERT(mpred->pindex != pindex,
 		    ("vm_reserv_alloc_page: pindex already allocated"));
 		rv = vm_reserv_from_page(mpred);
 		if (rv->object == object && vm_reserv_has_pindex(rv, pindex)) {
 			m = &rv->pages[VM_RESERV_INDEX(object, pindex)];
-			 Handle vm_page_rename(m, new_object, ...). 
+			// Handle vm_page_rename(m, new_object, ...). 
 			if ((m->flags & (PG_CACHED | PG_FREE)) == 0)
 				return (NULL);
 			vm_reserv_populate(rv);
@@ -370,7 +335,7 @@
 			if (rv->object == object &&
 			    vm_reserv_has_pindex(rv, pindex)) {
 				m = &rv->pages[VM_RESERV_INDEX(object, pindex)];
-				 Handle vm_page_rename(m, new_object, ...). 
+				// Handle vm_page_rename(m, new_object, ...). 
 				if ((m->flags & (PG_CACHED | PG_FREE)) == 0)
 					return (NULL);
 				vm_reserv_populate(rv);
@@ -386,7 +351,37 @@
 		mpred = object->root = vm_page_splay(pindex, object->root);
 	}
 	*/
+	mpred = radix_tree_lookup_le(pindex, &object->rtree);
+	if(mpred != NULL){
+		KASSERT(mpred->pindex != pindex,
+		    ("vm_reserv_alloc_page: pindex already allocated"));
+		rv = vm_reserv_from_page(mpred);
+		if (rv->object == object && vm_reserv_has_pindex(rv, pindex)) {
+			m = &rv->pages[VM_RESERV_INDEX(object, pindex)];
+			// Handle vm_page_rename(m, new_object, ...). 
+			if ((m->flags & (PG_CACHED | PG_FREE)) == 0)
+				return (NULL);
+			vm_reserv_populate(rv);
+			return (m);
+		}
+	}
+	msucc = radix_tree_lookup_ge(pindex, &object->rtree);
 
+	if(msucc != NULL){
+		KASSERT(msucc->pindex != pindex,
+		    ("vm_reserv_alloc_page: pindex already allocated"));
+		rv = vm_reserv_from_page(msucc);
+		if (rv->object == object && vm_reserv_has_pindex(rv, pindex)) {
+			m = &rv->pages[VM_RESERV_INDEX(object, pindex)];
+			// Handle vm_page_rename(m, new_object, ...). 
+			if ((m->flags & (PG_CACHED | PG_FREE)) == 0)
+				return (NULL);
+			vm_reserv_populate(rv);
+			return (m);
+		}
+	}
+	//KASSERT(rpred == mpred, ("rpred != mpred\n"));
+	//KASSERT(msucc == rsucc, ("msucc != rsucc\n"));
 	/*
 	 * Determine the first index to the left that can be used.
 	 */

==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_reserv.h#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_unix.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vm_zeroidle.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vnode_pager.c#2 (text+ko) ====


==== //depot/projects/soc2008/mayur_vmalgo/kern/src/sys/vm/vnode_pager.h#2 (text+ko) ====




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200808271951.m7RJpXKJ039690>