svn commit: r331448 - user/markj/vm-playground/sys/vm
Mark Johnston
markj at FreeBSD.org
Fri Mar 23 18:15:02 UTC 2018
Author: markj
Date: Fri Mar 23 18:15:01 2018
New Revision: 331448
URL: https://svnweb.freebsd.org/changeset/base/331448
Log:
Avoid taking the queue lock in _vm_page_deactivate() when requeuing.
Modified:
user/markj/vm-playground/sys/vm/vm_page.c
Modified: user/markj/vm-playground/sys/vm/vm_page.c
==============================================================================
--- user/markj/vm-playground/sys/vm/vm_page.c Fri Mar 23 18:11:06 2018 (r331447)
+++ user/markj/vm-playground/sys/vm/vm_page.c Fri Mar 23 18:15:01 2018 (r331448)
@@ -3863,15 +3863,10 @@ _vm_page_deactivate(vm_page_t m, bool noreuse)
if (m->wire_count > 0 || (m->oflags & VPO_UNMANAGED) != 0)
return;
- /*
- * XXX we can do this with only one lock acquisition if m is already
- * in PQ_INACTIVE
- */
- vm_page_remque(m);
-
- pq = &vm_pagequeue_domain(m)->vmd_pagequeues[PQ_INACTIVE];
if (noreuse) {
- /* This is a slow path. */
+ /* This is slower than it could be. */
+ vm_page_remque(m);
+ pq = &vm_pagequeue_domain(m)->vmd_pagequeues[PQ_INACTIVE];
vm_pagequeue_lock(pq);
m->queue = PQ_INACTIVE;
TAILQ_INSERT_BEFORE(&vm_pagequeue_domain(m)->vmd_inacthead, m,
@@ -3881,8 +3876,11 @@ _vm_page_deactivate(vm_page_t m, bool noreuse)
if ((m->aflags & PGA_REQUEUE) != 0)
vm_page_aflag_clear(m, PGA_REQUEUE);
vm_pagequeue_unlock(pq);
- } else
+ } else if (!vm_page_inactive(m)) {
+ vm_page_remque(m);
vm_page_enqueue_lazy(m, PQ_INACTIVE);
+ } else
+ vm_page_requeue(m);
}
/*
More information about the svn-src-user
mailing list