From owner-svn-src-user@freebsd.org Tue Mar 8 02:55:20 2016 Return-Path: Delivered-To: svn-src-user@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ECA3CAC2FEB for ; Tue, 8 Mar 2016 02:55:20 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C9557754; Tue, 8 Mar 2016 02:55:20 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u282tJiJ082802; Tue, 8 Mar 2016 02:55:19 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u282tJuj082799; Tue, 8 Mar 2016 02:55:19 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201603080255.u282tJuj082799@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Tue, 8 Mar 2016 02:55:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r296486 - user/alc/PQ_LAUNDRY/sys/vm X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Mar 2016 02:55:21 -0000 Author: markj Date: Tue Mar 8 02:55:19 2016 New Revision: 296486 URL: https://svnweb.freebsd.org/changeset/base/296486 Log: Use predicates instead of explicitly testing the queue field of a page. This makes it easier to split a pagequeue into several logically-related queues. Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_object.c user/alc/PQ_LAUNDRY/sys/vm/vm_page.h user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_object.c ============================================================================== --- user/alc/PQ_LAUNDRY/sys/vm/vm_object.c Tue Mar 8 02:44:32 2016 (r296485) +++ user/alc/PQ_LAUNDRY/sys/vm/vm_object.c Tue Mar 8 02:55:19 2016 (r296486) @@ -2322,9 +2322,9 @@ sysctl_vm_object_list(SYSCTL_HANDLER_ARG * sysctl is only meant to give an * approximation of the system anyway. */ - if (m->queue == PQ_ACTIVE) + if (vm_page_active(m)) kvo.kvo_active++; - else if (m->queue == PQ_INACTIVE) + else if (vm_page_inactive(m)) kvo.kvo_inactive++; } Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_page.h ============================================================================== --- user/alc/PQ_LAUNDRY/sys/vm/vm_page.h Tue Mar 8 02:44:32 2016 (r296485) +++ user/alc/PQ_LAUNDRY/sys/vm/vm_page.h Tue Mar 8 02:55:19 2016 (r296486) @@ -697,5 +697,26 @@ vm_page_replace_checked(vm_page_t mnew, (void)mret; } +static inline bool +vm_page_active(vm_page_t m) +{ + + return (m->queue == PQ_ACTIVE); +} + +static inline bool +vm_page_inactive(vm_page_t m) +{ + + return (m->queue == PQ_INACTIVE); +} + +static inline bool +vm_page_in_laundry(vm_page_t m) +{ + + return (m->queue == PQ_LAUNDRY); +} + #endif /* _KERNEL */ #endif /* !_VM_PAGE_ */ Modified: user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c ============================================================================== --- user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c Tue Mar 8 02:44:32 2016 (r296485) +++ user/alc/PQ_LAUNDRY/sys/vm/vm_pageout.c Tue Mar 8 02:55:19 2016 (r296486) @@ -439,7 +439,7 @@ more: break; } vm_page_lock(p); - if (p->queue != PQ_LAUNDRY || + if (!vm_page_in_laundry(p) || p->hold_count != 0) { /* may be undergoing I/O */ vm_page_unlock(p); ib = 0; @@ -467,7 +467,7 @@ more: if (p->dirty == 0) break; vm_page_lock(p); - if (p->queue != PQ_LAUNDRY || + if (!vm_page_in_laundry(p) || p->hold_count != 0) { /* may be undergoing I/O */ vm_page_unlock(p); break; @@ -651,10 +651,10 @@ vm_pageout_object_deactivate_pages(pmap_ act_delta = 1; vm_page_aflag_clear(p, PGA_REFERENCED); } - if (p->queue != PQ_ACTIVE && act_delta != 0) { + if (!vm_page_active(p) && act_delta != 0) { vm_page_activate(p); p->act_count += act_delta; - } else if (p->queue == PQ_ACTIVE) { + } else if (vm_page_active(p)) { if (act_delta == 0) { p->act_count -= min(p->act_count, ACT_DECLINE); @@ -670,7 +670,7 @@ vm_pageout_object_deactivate_pages(pmap_ p->act_count += ACT_ADVANCE; vm_page_requeue(p); } - } else if (p->queue == PQ_INACTIVE) + } else if (vm_page_inactive(p)) pmap_remove_all(p); vm_page_unlock(p); } @@ -831,7 +831,7 @@ vm_pageout_clean(vm_page_t m, int *numpa * (3) reallocated to a different offset, or * (4) cleaned. */ - if (m->queue != PQ_LAUNDRY || m->object != object || + if (!vm_page_in_laundry(m) || m->object != object || m->pindex != pindex || m->dirty == 0) { vm_page_unlock(m); error = ENXIO; @@ -914,7 +914,7 @@ vm_pageout_launder(struct vm_domain *vmd m = next) { vm_pagequeue_assert_locked(pq); KASSERT(queue_locked, ("unlocked laundry queue")); - KASSERT(m->queue == PQ_LAUNDRY, + KASSERT(vm_page_in_laundry(m), ("page %p has an inconsistent queue", m)); next = TAILQ_NEXT(m, plinks.q); if ((m->flags & PG_MARKER) != 0) @@ -1150,7 +1150,7 @@ vm_pageout_scan(struct vm_domain *vmd, i m = next) { vm_pagequeue_assert_locked(pq); KASSERT(queue_locked, ("unlocked inactive queue")); - KASSERT(m->queue == PQ_INACTIVE, ("Inactive queue %p", m)); + KASSERT(vm_page_inactive(m), ("Inactive queue %p", m)); PCPU_INC(cnt.v_pdpages); next = TAILQ_NEXT(m, plinks.q);