PERFORCE change 85709 for review
Alan Cox
alc at FreeBSD.org
Sat Oct 22 12:05:12 PDT 2005
http://perforce.freebsd.org/chv.cgi?CH=85709
Change 85709 by alc at alc_home on 2005/10/22 19:04:57
Rename buddy_alloc() to buddy_alloc_locked(). Introduce buddy_alloc();
buddy_alloc() acquires and releases the free page queues lock.
Affected files ...
.. //depot/projects/superpages/src/sys/vm/vm_buddy.c#2 edit
.. //depot/projects/superpages/src/sys/vm/vm_buddy.h#2 edit
.. //depot/projects/superpages/src/sys/vm/vm_page.c#5 edit
.. //depot/projects/superpages/src/sys/vm/vm_reserve.c#2 edit
Differences ...
==== //depot/projects/superpages/src/sys/vm/vm_buddy.c#2 (text+ko) ====
@@ -153,11 +153,25 @@
}
/*
+ *
+ */
+vm_page_t
+buddy_alloc(int Q, boolean_t prefer_zero)
+{
+ vm_page_t m;
+
+ mtx_lock_spin(&vm_page_queue_free_mtx);
+ m = buddy_alloc_locked(Q, prefer_zero);
+ mtx_unlock_spin(&vm_page_queue_free_mtx);
+ return (m);
+}
+
+/*
* Attempts to allocate a contiguous chunk of magn pages.
* Return starting phys_addr of chunk.
*/
vm_page_t
-buddy_alloc(int Q, boolean_t prefer_zero)
+buddy_alloc_locked(int Q, boolean_t prefer_zero)
{
int q;
vm_page_t m;
==== //depot/projects/superpages/src/sys/vm/vm_buddy.h#2 (text+ko) ====
@@ -3,4 +3,5 @@
void buddy_invariants(char *, int);
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);
==== //depot/projects/superpages/src/sys/vm/vm_page.c#5 (text+ko) ====
@@ -829,7 +829,7 @@
* Allocate from the free queue if the number of free pages
* exceeds the minimum for the request class.
*/
- m = buddy_alloc(0, (req & VM_ALLOC_ZERO) != 0);
+ m = buddy_alloc_locked(0, (req & VM_ALLOC_ZERO) != 0);
} else if (page_req != VM_ALLOC_INTERRUPT) {
mtx_unlock_spin(&vm_page_queue_free_mtx);
/*
==== //depot/projects/superpages/src/sys/vm/vm_reserve.c#2 (text+ko) ====
@@ -509,9 +509,7 @@
retry:
if (free_pool) {
/* 1. try free pool at level level or higher */
- mtx_lock_spin(&vm_page_queue_free_mtx);
m = buddy_alloc(SP_ORDER(lev), FALSE);
- mtx_unlock_spin(&vm_page_queue_free_mtx);
if (m != NULL)
goto done;
@@ -527,9 +525,7 @@
while ( (sp = TAILQ_FIRST(&rres[l])) ) {
KASSERT(sp->rql==l && sp->rql<sp->level,("preempt_contig_alloc: rql invalid"));
preempt(sp, lev, NULL);
- mtx_lock_spin(&vm_page_queue_free_mtx);
m = buddy_alloc(SP_ORDER(lev), FALSE);
- mtx_unlock_spin(&vm_page_queue_free_mtx);
if (m != NULL)
goto done;
}
@@ -541,9 +537,7 @@
if (free_pool) {
/* 4, 6, 8... */
- mtx_lock_spin(&vm_page_queue_free_mtx);
m = buddy_alloc(SP_ORDER(lev), FALSE);
- mtx_unlock_spin(&vm_page_queue_free_mtx);
if (m != NULL)
goto done;
}
@@ -552,9 +546,7 @@
while ( (sp = TAILQ_FIRST(&rres[lev])) ) {
KASSERT(sp->rql==lev && sp->rql<sp->level,("preempt_alloc_contig"));
preempt(sp, lev, NULL);
- mtx_lock_spin(&vm_page_queue_free_mtx);
m = buddy_alloc(SP_ORDER(lev), FALSE);
- mtx_unlock_spin(&vm_page_queue_free_mtx);
if (m != NULL)
goto done;
}
More information about the p4-projects
mailing list