PERFORCE change 85754 for review

Alan Cox alc at FreeBSD.org
Sun Oct 23 15:14:26 PDT 2005


http://perforce.freebsd.org/chv.cgi?CH=85754

Change 85754 by alc at alc_home on 2005/10/23 22:13:32

	Rename buddy_free() to buddy_free_locked().  Introduce buddy_free();
	it acquires and releases the free page queues lock.

Affected files ...

.. //depot/projects/superpages/src/sys/vm/vm_buddy.c#3 edit
.. //depot/projects/superpages/src/sys/vm/vm_buddy.h#3 edit
.. //depot/projects/superpages/src/sys/vm/vm_page.c#7 edit
.. //depot/projects/superpages/src/sys/vm/vm_pageq.c#3 edit
.. //depot/projects/superpages/src/sys/vm/vm_reserve.c#4 edit

Differences ...

==== //depot/projects/superpages/src/sys/vm/vm_buddy.c#3 (text+ko) ====

@@ -210,6 +210,18 @@
 void
 buddy_free(vm_page_t m, int q)
 {
+
+	mtx_lock_spin(&vm_page_queue_free_mtx);
+	buddy_free_locked(m, q);
+	mtx_unlock_spin(&vm_page_queue_free_mtx);
+}
+
+/*
+ * Free a contiguous, power of two-sized set of physical pages.
+ */
+void
+buddy_free_locked(vm_page_t m, int q)
+{
 	vm_paddr_t pa, pa_buddy;
 	vm_page_t buddy;
 
@@ -333,7 +345,7 @@
 		KASSERT(m->queue == PQ_NONE,
 		    ("vm_page_alloc_contig: page %p has unexpected queue %d",
 		    m, m->queue));
-		buddy_free(m, 0);
+		buddy_free_locked(m, 0);
 	}
         mtx_unlock_spin(&vm_page_queue_free_mtx);
 	return (m_ret);

==== //depot/projects/superpages/src/sys/vm/vm_buddy.h#3 (text+ko) ====

@@ -5,3 +5,4 @@
 vm_page_t buddy_alloc(int magn, boolean_t prefer_zero);
 vm_page_t buddy_alloc_locked(int magn, boolean_t prefer_zero);
 void buddy_free(vm_page_t m, int magn);
+void buddy_free_locked(vm_page_t m, int magn);

==== //depot/projects/superpages/src/sys/vm/vm_page.c#7 (text+ko) ====

@@ -1097,7 +1097,7 @@
 		mtx_lock_spin(&vm_page_queue_free_mtx);
 		if (m->flags & PG_ZERO)
 			++vm_page_zero_count;
-		buddy_free(m, 0);
+		buddy_free_locked(m, 0);
 		mtx_unlock_spin(&vm_page_queue_free_mtx);
 		vm_page_free_wakeup();
 	}

==== //depot/projects/superpages/src/sys/vm/vm_pageq.c#3 (text+ko) ====

@@ -144,9 +144,7 @@
 	m->phys_addr = pa;
 	m->flags = 0;
 	pmap_page_init(m);
-	mtx_lock_spin(&vm_page_queue_free_mtx);
 	buddy_free(m, 0);
-	mtx_unlock_spin(&vm_page_queue_free_mtx);
 	return (m);
 }
 

==== //depot/projects/superpages/src/sys/vm/vm_reserve.c#4 (text+ko) ====

@@ -439,9 +439,7 @@
 				if (p->reserv != NULL)
 					reserve_lazy_update(p);	/* to perform dealloc */
 				else {
-					mtx_lock_spin(&vm_page_queue_free_mtx);
 					buddy_free(p, 0);
-					mtx_unlock_spin(&vm_page_queue_free_mtx);
 					if (recovered < 1)
 						recovered = 1;
 				}
@@ -456,9 +454,7 @@
 				if (ch == NULL) {
 					magn = 1 << (sp->order - SP_FACTOR_SHIFT);
 					p = &sp->first_page[i * magn];
-					mtx_lock_spin(&vm_page_queue_free_mtx);
 					buddy_free(p, sp->order - SP_FACTOR_SHIFT);
-					mtx_unlock_spin(&vm_page_queue_free_mtx);
 					if (recovered < magn)
 						recovered = magn;
 				} else {
@@ -586,9 +582,7 @@
 		;
 	else if (sp->refcnt == 0) { /* empty: free */
 		KASSERT(sp->maxavail == 1 << sp->order, ("preempt_move maxavail=%d\n", sp->maxavail));
-		mtx_lock_spin(&vm_page_queue_free_mtx);
 		buddy_free(sp->first_page, sp->order);
-		mtx_unlock_spin(&vm_page_queue_free_mtx);
 		uma_zfree(sp_zone, sp);
 	} else {
 		KASSERT(sp->popto != sp->popfrom,("preempt_move: popto = popfrom"));


More information about the p4-projects mailing list