Module Name:    src
Committed By:   ad
Date:           Fri Dec 27 13:13:17 UTC 2019

Modified Files:
        src/sys/uvm: uvm_page.h uvm_pdpolicy_clock.c uvm_pdpolicy_clockpro.c

Log Message:
vm_page: Now that listq is gone, give the pagedaemon its own private
TAILQ_ENTRY, so that update of page replacement state can be made
asynchronous/lazy.  No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.89 -r1.90 src/sys/uvm/uvm_page.h
cvs rdiff -u -r1.22 -r1.23 src/sys/uvm/uvm_pdpolicy_clock.c
cvs rdiff -u -r1.18 -r1.19 src/sys/uvm/uvm_pdpolicy_clockpro.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/uvm/uvm_page.h
diff -u src/sys/uvm/uvm_page.h:1.89 src/sys/uvm/uvm_page.h:1.90
--- src/sys/uvm/uvm_page.h:1.89	Fri Dec 27 12:51:57 2019
+++ src/sys/uvm/uvm_page.h	Fri Dec 27 13:13:17 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_page.h,v 1.89 2019/12/27 12:51:57 ad Exp $	*/
+/*	$NetBSD: uvm_page.h,v 1.90 2019/12/27 13:13:17 ad Exp $	*/
 
 /*
  * Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -150,12 +150,13 @@ struct vm_page {
 						 * or uvm_pglistalloc output */
 		LIST_ENTRY(vm_page) list;	/* f: global free page queue */
 	} pageq;
+	TAILQ_ENTRY(vm_page)	pdqueue;	/* p: pagedaemon queue */
 	struct vm_anon		*uanon;		/* o,i: anon */
 	struct uvm_object	*uobject;	/* o,i: object */
 	voff_t			offset;		/* o: offset into object */
 	uint16_t		flags;		/* o: object flags */
 	uint16_t		spare;		/*  : spare for now */
-	uint32_t		pqflags;	/* p: pdpolicy queue flags */
+	uint32_t		pqflags;	/* p: pagedaemon flags */
 	uint32_t		loan_count;	/* o,i: num. active loans */
 	uint32_t		wire_count;	/* o,i: wired down map refs */
 	paddr_t			phys_addr;	/* o: physical address of pg */

Index: src/sys/uvm/uvm_pdpolicy_clock.c
diff -u src/sys/uvm/uvm_pdpolicy_clock.c:1.22 src/sys/uvm/uvm_pdpolicy_clock.c:1.23
--- src/sys/uvm/uvm_pdpolicy_clock.c:1.22	Mon Dec 23 19:29:03 2019
+++ src/sys/uvm/uvm_pdpolicy_clock.c	Fri Dec 27 13:13:17 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_pdpolicy_clock.c,v 1.22 2019/12/23 19:29:03 ad Exp $	*/
+/*	$NetBSD: uvm_pdpolicy_clock.c,v 1.23 2019/12/27 13:13:17 ad Exp $	*/
 /*	NetBSD: uvm_pdaemon.c,v 1.72 2006/01/05 10:47:33 yamt Exp $	*/
 
 /*
@@ -69,7 +69,7 @@
 #else /* defined(PDSIM) */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_pdpolicy_clock.c,v 1.22 2019/12/23 19:29:03 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_pdpolicy_clock.c,v 1.23 2019/12/27 13:13:17 ad Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -207,7 +207,7 @@ uvmpdpol_selectvictim(kmutex_t **plock)
 		if (pg == NULL) {
 			break;
 		}
-		ss->ss_nextpg = TAILQ_NEXT(pg, pageq.queue);
+		ss->ss_nextpg = TAILQ_NEXT(pg, pdqueue);
 		uvmexp.pdscans++;
 
 		/*
@@ -313,7 +313,7 @@ uvmpdpol_balancequeue(int swap_shortage)
 	for (p = TAILQ_FIRST(&pdpol_state.s_activeq);
 	     p != NULL && (inactive_shortage > 0 || swap_shortage > 0);
 	     p = nextpg) {
-		nextpg = TAILQ_NEXT(p, pageq.queue);
+		nextpg = TAILQ_NEXT(p, pdqueue);
 
 		/*
 		 * if there's a shortage of swap slots, try to free it.
@@ -371,7 +371,7 @@ uvmpdpol_pagedeactivate_locked(struct vm
 	KASSERT(uvm_page_locked_p(pg));
 
 	if (pg->pqflags & PQ_ACTIVE) {
-		TAILQ_REMOVE(&pdpol_state.s_activeq, pg, pageq.queue);
+		TAILQ_REMOVE(&pdpol_state.s_activeq, pg, pdqueue);
 		pg->pqflags &= ~(PQ_ACTIVE | PQ_TIME);
 		KASSERT(pdpol_state.s_active > 0);
 		pdpol_state.s_active--;
@@ -379,7 +379,7 @@ uvmpdpol_pagedeactivate_locked(struct vm
 	if ((pg->pqflags & PQ_INACTIVE) == 0) {
 		KASSERT(pg->wire_count == 0);
 		pmap_clear_reference(pg);
-		TAILQ_INSERT_TAIL(&pdpol_state.s_inactiveq, pg, pageq.queue);
+		TAILQ_INSERT_TAIL(&pdpol_state.s_inactiveq, pg, pdqueue);
 		pg->pqflags |= PQ_INACTIVE;
 		pdpol_state.s_inactive++;
 	}
@@ -400,7 +400,7 @@ uvmpdpol_pageactivate_locked(struct vm_p
 {
 
 	uvmpdpol_pagedequeue_locked(pg);
-	TAILQ_INSERT_TAIL(&pdpol_state.s_activeq, pg, pageq.queue);
+	TAILQ_INSERT_TAIL(&pdpol_state.s_activeq, pg, pdqueue);
 	pg->pqflags = PQ_ACTIVE | (hardclock_ticks & PQ_TIME);
 	pdpol_state.s_active++;
 }
@@ -424,12 +424,12 @@ uvmpdpol_pagedequeue_locked(struct vm_pa
 {
 
 	if (pg->pqflags & PQ_ACTIVE) {
-		TAILQ_REMOVE(&pdpol_state.s_activeq, pg, pageq.queue);
+		TAILQ_REMOVE(&pdpol_state.s_activeq, pg, pdqueue);
 		pg->pqflags &= ~(PQ_ACTIVE | PQ_TIME);
 		KASSERT(pdpol_state.s_active > 0);
 		pdpol_state.s_active--;
 	} else if (pg->pqflags & PQ_INACTIVE) {
-		TAILQ_REMOVE(&pdpol_state.s_inactiveq, pg, pageq.queue);
+		TAILQ_REMOVE(&pdpol_state.s_inactiveq, pg, pdqueue);
 		pg->pqflags &= ~PQ_INACTIVE;
 		KASSERT(pdpol_state.s_inactive > 0);
 		pdpol_state.s_inactive--;

Index: src/sys/uvm/uvm_pdpolicy_clockpro.c
diff -u src/sys/uvm/uvm_pdpolicy_clockpro.c:1.18 src/sys/uvm/uvm_pdpolicy_clockpro.c:1.19
--- src/sys/uvm/uvm_pdpolicy_clockpro.c:1.18	Fri Dec 13 20:10:22 2019
+++ src/sys/uvm/uvm_pdpolicy_clockpro.c	Fri Dec 27 13:13:17 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: uvm_pdpolicy_clockpro.c,v 1.18 2019/12/13 20:10:22 ad Exp $	*/
+/*	$NetBSD: uvm_pdpolicy_clockpro.c,v 1.19 2019/12/27 13:13:17 ad Exp $	*/
 
 /*-
  * Copyright (c)2005, 2006 YAMAMOTO Takashi,
@@ -43,7 +43,7 @@
 #else /* defined(PDSIM) */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_pdpolicy_clockpro.c,v 1.18 2019/12/13 20:10:22 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_pdpolicy_clockpro.c,v 1.19 2019/12/27 13:13:17 ad Exp $");
 
 #include "opt_ddb.h"
 
@@ -234,7 +234,7 @@ static void
 pageq_insert_tail(pageq_t *q, struct vm_page *pg)
 {
 
-	TAILQ_INSERT_TAIL(&q->q_q, pg, pageq.queue);
+	TAILQ_INSERT_TAIL(&q->q_q, pg, pdqueue);
 	q->q_len++;
 }
 
@@ -243,7 +243,7 @@ static void
 pageq_insert_head(pageq_t *q, struct vm_page *pg)
 {
 
-	TAILQ_INSERT_HEAD(&q->q_q, pg, pageq.queue);
+	TAILQ_INSERT_HEAD(&q->q_q, pg, pdqueue);
 	q->q_len++;
 }
 #endif
@@ -256,7 +256,7 @@ pageq_remove(pageq_t *q, struct vm_page 
 	KASSERT(clockpro_queue(&clockpro, clockpro_getq(pg)) == q);
 #endif
 	KASSERT(q->q_len > 0);
-	TAILQ_REMOVE(&q->q_q, pg, pageq.queue);
+	TAILQ_REMOVE(&q->q_q, pg, pdqueue);
 	q->q_len--;
 }
 
@@ -1308,7 +1308,7 @@ clockpro_dropswap(pageq_t *q, int *todo)
 
 	KASSERT(mutex_owned(&clockpro.lock));
 
-	TAILQ_FOREACH_REVERSE(pg, &q->q_q, pglist, pageq.queue) {
+	TAILQ_FOREACH_REVERSE(pg, &q->q_q, pglist, pdqueue) {
 		if (*todo <= 0) {
 			break;
 		}
@@ -1439,7 +1439,7 @@ clockpro_dump(void)
 	    (name), nhot, ncold, ntest, nspeculative, ninitialref, nref)
 
 	INITCOUNT();
-	TAILQ_FOREACH(pg, &clockpro_queue(s, CLOCKPRO_NEWQ)->q_q, pageq.queue) {
+	TAILQ_FOREACH(pg, &clockpro_queue(s, CLOCKPRO_NEWQ)->q_q, pdqueue) {
 		if (clockpro_getq(pg) != CLOCKPRO_NEWQ) {
 			printf("newq corrupt %p\n", pg);
 		}
@@ -1449,7 +1449,7 @@ clockpro_dump(void)
 	PRINTCOUNT("newq");
 
 	INITCOUNT();
-	TAILQ_FOREACH(pg, &clockpro_queue(s, CLOCKPRO_COLDQ)->q_q, pageq.queue) {
+	TAILQ_FOREACH(pg, &clockpro_queue(s, CLOCKPRO_COLDQ)->q_q, pdqueue) {
 		if (clockpro_getq(pg) != CLOCKPRO_COLDQ) {
 			printf("coldq corrupt %p\n", pg);
 		}
@@ -1459,7 +1459,7 @@ clockpro_dump(void)
 	PRINTCOUNT("coldq");
 
 	INITCOUNT();
-	TAILQ_FOREACH(pg, &clockpro_queue(s, CLOCKPRO_HOTQ)->q_q, pageq.queue) {
+	TAILQ_FOREACH(pg, &clockpro_queue(s, CLOCKPRO_HOTQ)->q_q, pdqueue) {
 		if (clockpro_getq(pg) != CLOCKPRO_HOTQ) {
 			printf("hotq corrupt %p\n", pg);
 		}
@@ -1474,7 +1474,7 @@ clockpro_dump(void)
 	PRINTCOUNT("hotq");
 
 	INITCOUNT();
-	TAILQ_FOREACH(pg, &clockpro_queue(s, CLOCKPRO_LISTQ)->q_q, pageq.queue) {
+	TAILQ_FOREACH(pg, &clockpro_queue(s, CLOCKPRO_LISTQ)->q_q, pdqueue) {
 #if !defined(LISTQ)
 		printf("listq %p\n", pg);
 #endif /* !defined(LISTQ) */
@@ -1504,7 +1504,7 @@ pdsim_dumpq(int qidx)
 	pageq_t *q = clockpro_queue(s, qidx);
 	struct vm_page *pg;
 
-	TAILQ_FOREACH(pg, &q->q_q, pageq.queue) {
+	TAILQ_FOREACH(pg, &q->q_q, pdqueue) {
 		DPRINTF(" %" PRIu64 "%s%s%s%s%s%s",
 		    pg->offset >> PAGE_SHIFT,
 		    (pg->pqflags & PQ_HOT) ? "H" : "",

Reply via email to