Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 23 Mar 2018 18:15:01 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r331448 - user/markj/vm-playground/sys/vm
Message-ID:  <201803231815.w2NIF1ke055747@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 }
 
 /*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201803231815.w2NIF1ke055747>