Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/yamt-pagecache]: src/sys/arch/sparc64 adapt sparc64. compile tested.
details: https://anonhg.NetBSD.org/src/rev/4e4eac386d02
branches: yamt-pagecache
changeset: 770844:4e4eac386d02
user: yamt <yamt%NetBSD.org@localhost>
date: Fri Dec 02 16:33:09 2011 +0000
description:
adapt sparc64. compile tested.
diffstat:
sys/arch/sparc64/include/pmap.h | 8 +++-----
sys/arch/sparc64/sparc64/pmap.c | 24 +++++++++---------------
2 files changed, 12 insertions(+), 20 deletions(-)
diffs (105 lines):
diff -r 7992f70cc9ea -r 4e4eac386d02 sys/arch/sparc64/include/pmap.h
--- a/sys/arch/sparc64/include/pmap.h Wed Nov 30 14:36:36 2011 +0000
+++ b/sys/arch/sparc64/include/pmap.h Fri Dec 02 16:33:09 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.h,v 1.55 2011/10/06 06:55:34 mrg Exp $ */
+/* $NetBSD: pmap.h,v 1.55.2.1 2011/12/02 16:33:09 yamt Exp $ */
/*-
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -118,10 +118,8 @@
#endif
struct pmap {
- struct uvm_object pm_obj;
- kmutex_t pm_obj_lock;
-#define pm_lock pm_obj.vmobjlock
-#define pm_refs pm_obj.uo_refs
+ unsigned int pm_refs;
+ TAILQ_HEAD(, vm_page) pm_ptps;
LIST_ENTRY(pmap) pm_list[PMAP_LIST_MAXNUMCPU]; /* per cpu ctx used list */
struct pmap_statistics pm_stats;
diff -r 7992f70cc9ea -r 4e4eac386d02 sys/arch/sparc64/sparc64/pmap.c
--- a/sys/arch/sparc64/sparc64/pmap.c Wed Nov 30 14:36:36 2011 +0000
+++ b/sys/arch/sparc64/sparc64/pmap.c Fri Dec 02 16:33:09 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.275 2011/07/12 07:51:34 mrg Exp $ */
+/* $NetBSD: pmap.c,v 1.275.2.1 2011/12/02 16:33:09 yamt Exp $ */
/*
*
* Copyright (C) 1996-1999 Eduardo Horvath.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.275 2011/07/12 07:51:34 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.275.2.1 2011/12/02 16:33:09 yamt Exp $");
#undef NO_VCACHE /* Don't forget the locked TLB in dostart */
#define HWREF
@@ -1379,10 +1379,8 @@
memset(pm, 0, sizeof *pm);
DPRINTF(PDB_CREATE, ("pmap_create(): created %p\n", pm));
- mutex_init(&pm->pm_obj_lock, MUTEX_DEFAULT, IPL_NONE);
- uvm_obj_init(&pm->pm_obj, NULL, false, 1);
- uvm_obj_setlock(&pm->pm_obj, &pm->pm_obj_lock);
-
+ pm->pm_refs = 1;
+ TAILQ_INIT(&pm->pm_ptps);
if (pm != pmap_kernel()) {
while (!pmap_get_page(&pm->pm_physaddr)) {
uvm_wait("pmap_create");
@@ -1416,7 +1414,7 @@
#else
#define pmap_cpus_active 0
#endif
- struct vm_page *pg, *nextpg;
+ struct vm_page *pg;
if ((int)atomic_dec_uint_nv(&pm->pm_refs) > 0) {
return;
@@ -1444,22 +1442,18 @@
#endif
/* we could be a little smarter and leave pages zeroed */
- for (pg = TAILQ_FIRST(&pm->pm_obj.memq); pg != NULL; pg = nextpg) {
+ while ((pg = TAILQ_FIRST(&pm->pm_ptps)) != NULL) {
#ifdef DIAGNOSTIC
struct vm_page_md *md = VM_PAGE_TO_MD(pg);
#endif
- KASSERT((pg->flags & PG_MARKER) == 0);
- nextpg = TAILQ_NEXT(pg, listq.queue);
- TAILQ_REMOVE(&pm->pm_obj.memq, pg, listq.queue);
+ TAILQ_REMOVE(&pm->pm_ptps, pg, pageq.queue);
KASSERT(md->mdpg_pvh.pv_pmap == NULL);
dcache_flush_page_cpuset(VM_PAGE_TO_PHYS(pg), pmap_cpus_active);
uvm_pagefree(pg);
}
pmap_free_page((paddr_t)(u_long)pm->pm_segs, pmap_cpus_active);
- uvm_obj_destroy(&pm->pm_obj, false);
- mutex_destroy(&pm->pm_obj_lock);
pool_cache_put(&pmap_cache, pm);
}
@@ -1809,7 +1803,7 @@
ptpg = PHYS_TO_VM_PAGE(ptp);
if (ptpg) {
ptpg->offset = (uint64_t)va & (0xfffffLL << 23);
- TAILQ_INSERT_TAIL(&pm->pm_obj.memq, ptpg, listq.queue);
+ TAILQ_INSERT_TAIL(&pm->pm_ptps, ptpg, pageq.queue);
} else {
KASSERT(pm == pmap_kernel());
}
@@ -1821,7 +1815,7 @@
ptpg = PHYS_TO_VM_PAGE(ptp);
if (ptpg) {
ptpg->offset = (((uint64_t)va >> 43) & 0x3ffLL) << 13;
- TAILQ_INSERT_TAIL(&pm->pm_obj.memq, ptpg, listq.queue);
+ TAILQ_INSERT_TAIL(&pm->pm_ptps, ptpg, pageq.queue);
} else {
KASSERT(pm == pmap_kernel());
}
Home |
Main Index |
Thread Index |
Old Index