Date: Sat, 22 Oct 2005 19:05:10 GMT From: Alan Cox <alc@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 85709 for review Message-ID: <200510221905.j9MJ5AC2026126@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=85709 Change 85709 by alc@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; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200510221905.j9MJ5AC2026126>