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