From owner-p4-projects@FreeBSD.ORG Sun Oct 23 22:14:25 2005 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 62DFF16A421; Sun, 23 Oct 2005 22:14:25 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2319016A41F for ; Sun, 23 Oct 2005 22:14:25 +0000 (GMT) (envelope-from alc@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id E070343D48 for ; Sun, 23 Oct 2005 22:14:24 +0000 (GMT) (envelope-from alc@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j9NMEOqe042189 for ; Sun, 23 Oct 2005 22:14:24 GMT (envelope-from alc@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j9NMEOrQ042186 for perforce@freebsd.org; Sun, 23 Oct 2005 22:14:24 GMT (envelope-from alc@freebsd.org) Date: Sun, 23 Oct 2005 22:14:24 GMT Message-Id: <200510232214.j9NMEOrQ042186@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to alc@freebsd.org using -f From: Alan Cox To: Perforce Change Reviews Cc: Subject: PERFORCE change 85754 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 23 Oct 2005 22:14:26 -0000 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"));