Module Name:src
Committed By: uebayasi
Date: Thu Feb 25 04:11:29 UTC 2010
Modified Files:
src/sys/arch/hppa/hppa [uebayasi-xip]: pmap.c
src/sys/arch/hppa/include [uebayasi-xip]: pmap.h
Log Message:
Use VM_PAGE_TO_MD(). Only compile tested.
To generate a diff of this commit:
cvs rdiff -u -r1.63 -r1.63.2.1 src/sys/arch/hppa/hppa/pmap.c
cvs rdiff -u -r1.23 -r1.23.2.1 src/sys/arch/hppa/include/pmap.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/hppa/hppa/pmap.c
diff -u src/sys/arch/hppa/hppa/pmap.c:1.63 src/sys/arch/hppa/hppa/pmap.c:1.63.2.1
--- src/sys/arch/hppa/hppa/pmap.c:1.63 Fri Dec 18 19:20:35 2009
+++ src/sys/arch/hppa/hppa/pmap.c Thu Feb 25 04:11:29 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.63 2009/12/18 19:20:35 skrll Exp $ */
+/* $NetBSD: pmap.c,v 1.63.2.1 2010/02/25 04:11:29 uebayasi Exp $ */
/*-
* Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
@@ -65,7 +65,10 @@
*/
#include sys/cdefs.h
-__KERNEL_RCSID(0, $NetBSD: pmap.c,v 1.63 2009/12/18 19:20:35 skrll Exp $);
+__KERNEL_RCSID(0, $NetBSD: pmap.c,v 1.63.2.1 2010/02/25 04:11:29 uebayasi Exp $);
+
+#include opt_device_page.h
+#include opt_xip.h
#include sys/param.h
#include sys/systm.h
@@ -486,16 +489,18 @@
pmap_dump_pv(paddr_t pa)
{
struct vm_page *pg;
+ struct vm_page_md *md;
struct pv_entry *pve;
pg = PHYS_TO_VM_PAGE(pa);
- mutex_enter(pg-mdpage.pvh_lock);
- printf(pg %p attr 0x%08x aliases %d\n, pg, pg-mdpage.pvh_attrs,
- pg-mdpage.pvh_aliases);
- for (pve = pg-mdpage.pvh_list; pve; pve = pve-pv_next)
+ md = VM_PAGE_TO_MD(pg);
+ mutex_enter(md-pvh_lock);
+ printf(pg %p attr 0x%08x aliases %d\n, pg, md-pvh_attrs,
+ md-pvh_aliases);
+ for (pve = md-pvh_list; pve; pve = pve-pv_next)
printf(%x:%lx\n, pve-pv_pmap-pm_space,
pve-pv_va PV_VAMASK);
- mutex_exit(pg-mdpage.pvh_lock);
+ mutex_exit(md-pvh_lock);
}
#endif
@@ -507,12 +512,13 @@
*
* - Shouldn't be called for pages that have been marked uncacheable by
* pmap_kenter_pa.
- * - Must be called with pg-mdpage.pvh_lock held.
+ * - Must be called with md-pvh_lock held.
*/
void
pmap_check_alias(struct vm_page *pg, struct pv_entry *pve, vaddr_t va,
pt_entry_t *ptep)
{
+ struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
bool nonequiv = false;
struct pv_entry *tpve;
u_int attrs;
@@ -521,8 +527,8 @@
(%s(%p, %p, 0x%lx, %p)\n, __func__, pg, pve, va, ptep));
/* we should only be looking if we're not PVF_NC */
- KASSERT((pg-mdpage.pvh_attrs PVF_NC) == 0);
- KASSERT(mutex_owned(pg-mdpage.pvh_lock));
+ KASSERT((md-pvh_attrs PVF_NC) == 0);
+ KASSERT(mutex_owned(md-pvh_lock));
if (ptep) {
attrs = pmap_pvh_attrs(*ptep);
@@ -578,7 +584,7 @@
* mark all mappings as uncacheable (if they're not
* already marked as such).
*/
- pg-mdpage.pvh_aliases++;
+ md-pvh_aliases++;
if ((attrs PVF_UNCACHEABLE) == 0)
__changebit(pg, PVF_UNCACHEABLE, 0);
@@ -595,8 +601,8 @@
* it cacheable if all non-equiv aliases are gone.
*/
- pg-mdpage.pvh_aliases--;
- if (pg-mdpage.pvh_aliases == 0) {
+ md-pvh_aliases--;
+ if (md-pvh_aliases == 0) {
__changebit(pg, 0, PVF_UNCACHEABLE);
DPRINTF(PDB_FOLLOW|PDB_ALIAS,
@@ -639,26 +645,29 @@
pmap_pv_enter(struct vm_page *pg, struct pv_entry *pve, pmap_t pm,
vaddr_t va, struct vm_page *pdep, u_int flags)
{
+ struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
+
DPRINTF(PDB_FOLLOW|PDB_PV, (%s(%p, %p, %p, 0x%lx, %p, 0x%x)\n,
__func__, pg, pve, pm, va, pdep, flags));
- KASSERT(mutex_owned(pg-mdpage.pvh_lock));
+ KASSERT(mutex_owned(md-pvh_lock));
pve-pv_pmap = pm;
pve-pv_va = va | flags;
pve-pv_ptp = pdep;
- pve-pv_next = pg-mdpage.pvh_list;
- pg-mdpage.pvh_list = pve;
+ pve-pv_next = md-pvh_list;
+ md-pvh_list = pve;
}
static inline struct pv_entry *
pmap_pv_remove(struct vm_page *pg, pmap_t pmap, vaddr_t va)
{
+ struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
struct pv_entry **pve, *pv;
- KASSERT(mutex_owned(pg-mdpage.pvh_lock));
+ KASSERT(mutex_owned(md-pvh_lock));
- for (pv = *(pve = pg-mdpage.pvh_list);
+ for (pv = *(pve = md-pvh_list);
pv; pv = *(pve = (*pve)-pv_next))
if (pv-pv_pmap == pmap (pv-pv_va PV_VAMASK) == va) {
*pve = pv-pv_next;
@@ -1182,7 +1191,8 @@
continue;
sheep = PHYS_TO_VM_PAGE(PTE_PAGE(*pde));
- for (haggis = sheep-mdpage.pvh_list; haggis != NULL; )
+ struct vm_page_md * const md = VM_PAGE_TO_MD(sheap);
+ for (haggis = md-pvh_list; haggis != NULL; )
if (haggis-pv_pmap == pmap) {
DPRINTF(PDB_FOLLOW, ( 0x%lx,
@@ -1196,7 +1206,7 @@
* exploit the sacred knowledge of
* lambeous ozzmosis
*/
- haggis = sheep-mdpage.pvh_list;
+ haggis = md-pvh_list;
} else
haggis = haggis-pv_next;
}
@@ -1279,10 +1289,11 @@
}
pg = PHYS_TO_VM_PAGE(PTE_PAGE(pte));
-