Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/uvm vm_page: Now that listq is gone, give the pagedaemon...
details: https://anonhg.NetBSD.org/src/rev/2c37252b74d3
branches: trunk
changeset: 967923:2c37252b74d3
user: ad <ad%NetBSD.org@localhost>
date: Fri Dec 27 13:13:17 2019 +0000
description:
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.
diffstat:
sys/uvm/uvm_page.h | 5 +++--
sys/uvm/uvm_pdpolicy_clock.c | 18 +++++++++---------
sys/uvm/uvm_pdpolicy_clockpro.c | 22 +++++++++++-----------
3 files changed, 23 insertions(+), 22 deletions(-)
diffs (201 lines):
diff -r 9ea4ab78c020 -r 2c37252b74d3 sys/uvm/uvm_page.h
--- a/sys/uvm/uvm_page.h Fri Dec 27 12:53:40 2019 +0000
+++ b/sys/uvm/uvm_page.h Fri Dec 27 13:13:17 2019 +0000
@@ -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 @@
* 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 */
diff -r 9ea4ab78c020 -r 2c37252b74d3 sys/uvm/uvm_pdpolicy_clock.c
--- a/sys/uvm/uvm_pdpolicy_clock.c Fri Dec 27 12:53:40 2019 +0000
+++ b/sys/uvm/uvm_pdpolicy_clock.c Fri Dec 27 13:13:17 2019 +0000
@@ -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 @@
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 @@
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 @@
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 @@
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_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 @@
{
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--;
diff -r 9ea4ab78c020 -r 2c37252b74d3 sys/uvm/uvm_pdpolicy_clockpro.c
--- a/sys/uvm/uvm_pdpolicy_clockpro.c Fri Dec 27 12:53:40 2019 +0000
+++ b/sys/uvm/uvm_pdpolicy_clockpro.c Fri Dec 27 13:13:17 2019 +0000
@@ -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 @@
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 @@
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 @@
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 @@
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 @@
(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 @@
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 @@
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 @@
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 @@
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" : "",
Home |
Main Index |
Thread Index |
Old Index