Date: Sun, 23 Oct 2005 22:14:24 GMT From: Alan Cox <alc@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 85754 for review Message-ID: <200510232214.j9NMEOrQ042186@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=85754 Change 85754 by alc@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"));
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200510232214.j9NMEOrQ042186>