Module Name: src Committed By: uebayasi Date: Sat Oct 30 17:44:04 UTC 2010
Modified Files: src/sys/arch/mips/mips: pmap.c Log Message: Use VM_PAGE_TO_MD() to locate struct vm_page_md. No functional changes. To generate a diff of this commit: cvs rdiff -u -r1.189 -r1.190 src/sys/arch/mips/mips/pmap.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/arch/mips/mips/pmap.c diff -u src/sys/arch/mips/mips/pmap.c:1.189 src/sys/arch/mips/mips/pmap.c:1.190 --- src/sys/arch/mips/mips/pmap.c:1.189 Tue Jul 6 20:50:34 2010 +++ src/sys/arch/mips/mips/pmap.c Sat Oct 30 17:44:04 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.189 2010/07/06 20:50:34 cegger Exp $ */ +/* $NetBSD: pmap.c,v 1.190 2010/10/30 17:44:04 uebayasi Exp $ */ /*- * Copyright (c) 1998, 2001 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.189 2010/07/06 20:50:34 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.190 2010/10/30 17:44:04 uebayasi Exp $"); /* * Manages physical address maps. @@ -134,6 +134,8 @@ #include <mips/locore.h> #include <mips/pte.h> +#define VM_PAGE_TO_MD(pg) (&(pg)->mdpage) + CTASSERT(MIPS_KSEG0_START < 0); CTASSERT((intptr_t)MIPS_PHYS_TO_KSEG0(0x1000) < 0); CTASSERT(MIPS_KSEG1_START < 0); @@ -265,6 +267,7 @@ mips_flushcache_allpvh(paddr_t pa) { struct vm_page *pg; + struct vm_page_md *md; struct pv_entry *pv; pg = PHYS_TO_VM_PAGE(pa); @@ -277,7 +280,8 @@ return; } - pv = pg->mdpage.pvh_list; + md = VM_PAGE_TO_MD(pg); + pv = md->pvh_list; #if defined(MIPS3_NO_PV_UNCACHED) /* No current mapping. Cache was flushed by pmap_remove_pv() */ @@ -522,7 +526,7 @@ for (bank = 0; bank < vm_nphysseg; bank++) { s = vm_physmem[bank].end - vm_physmem[bank].start; for (i = 0; i < s; i++) - vm_physmem[bank].pgs[i].mdpage.pvh_list = pv++; + VM_PAGE_TO_MD(&vm_physmem[bank].pgs[i])->pvh_list = pv++; } /* @@ -861,6 +865,7 @@ void pmap_page_protect(struct vm_page *pg, vm_prot_t prot) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); pv_entry_t pv; vaddr_t va; @@ -878,7 +883,7 @@ /* copy_on_write */ case VM_PROT_READ: case VM_PROT_READ|VM_PROT_EXECUTE: - pv = pg->mdpage.pvh_list; + pv = md->pvh_list; /* * Loop over all current mappings setting/clearing as appropos. */ @@ -894,7 +899,7 @@ /* remove_all */ default: - pv = pg->mdpage.pvh_list; + pv = md->pvh_list; while (pv->pv_pmap != NULL) { pmap_remove(pv->pv_pmap, pv->pv_va, pv->pv_va + PAGE_SIZE); @@ -1079,6 +1084,7 @@ static void pmap_page_cache(struct vm_page *pg, int mode) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); pv_entry_t pv; pt_entry_t *pte; unsigned entry; @@ -1090,7 +1096,7 @@ printf("pmap_page_uncache(%#"PRIxPADDR")\n", VM_PAGE_TO_PHYS(pg)); #endif newmode = mode & PV_UNCACHED ? MIPS3_PG_UNCACHED : MIPS3_PG_CACHED; - pv = pg->mdpage.pvh_list; + pv = md->pvh_list; asid = pv->pv_pmap->pm_asid; needupdate = (pv->pv_pmap->pm_asidgen == pmap_asid_generation); @@ -1192,7 +1198,8 @@ pg = PHYS_TO_VM_PAGE(pa); if (pg) { - int *attrs = &pg->mdpage.pvh_attrs; + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); + int *attrs = &md->pvh_attrs; /* Set page referenced/modified status based on flags */ if (flags & VM_PROT_WRITE) @@ -1646,7 +1653,8 @@ #if defined(MIPS3_PLUS) /* XXX mmu XXX */ pg = PHYS_TO_VM_PAGE(phys); if (mips_cache_virtual_alias) { - pv = pg->mdpage.pvh_list; + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); + pv = md->pvh_list; if ((pv->pv_flags & PV_UNCACHED) == 0 && mips_cache_indexof(pv->pv_va) != mips_cache_indexof(va)) mips_dcache_wbinv_range_index(pv->pv_va, PAGE_SIZE); @@ -1748,6 +1756,7 @@ bool pmap_clear_reference(struct vm_page *pg) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); int *attrp; bool rv; @@ -1756,7 +1765,7 @@ printf("pmap_clear_reference(%#"PRIxPADDR")\n", VM_PAGE_TO_PHYS(pg)); #endif - attrp = &pg->mdpage.pvh_attrs; + attrp = &md->pvh_attrs; rv = *attrp & PGA_REFERENCED; *attrp &= ~PGA_REFERENCED; return rv; @@ -1771,8 +1780,9 @@ bool pmap_is_referenced(struct vm_page *pg) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); - return pg->mdpage.pvh_attrs & PGA_REFERENCED; + return md->pvh_attrs & PGA_REFERENCED; } /* @@ -1781,6 +1791,7 @@ bool pmap_clear_modify(struct vm_page *pg) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); struct pmap *pmap; struct pv_entry *pv; pt_entry_t *pte; @@ -1793,13 +1804,13 @@ if (pmapdebug & PDB_FOLLOW) printf("pmap_clear_modify(%#"PRIxPADDR")\n", VM_PAGE_TO_PHYS(pg)); #endif - attrp = &pg->mdpage.pvh_attrs; + attrp = &md->pvh_attrs; rv = *attrp & PGA_MODIFIED; *attrp &= ~PGA_MODIFIED; if (!rv) { return rv; } - pv = pg->mdpage.pvh_list; + pv = md->pvh_list; if (pv->pv_pmap == NULL) { return true; } @@ -1849,8 +1860,9 @@ bool pmap_is_modified(struct vm_page *pg) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); - return pg->mdpage.pvh_attrs & PGA_MODIFIED; + return md->pvh_attrs & PGA_MODIFIED; } /* @@ -1862,9 +1874,11 @@ pmap_set_modified(paddr_t pa) { struct vm_page *pg; + struct vm_page_md *md; pg = PHYS_TO_VM_PAGE(pa); - pg->mdpage.pvh_attrs |= PGA_MODIFIED | PGA_REFERENCED; + md = VM_PAGE_TO_MD(pg); + md->pvh_attrs |= PGA_MODIFIED | PGA_REFERENCED; } /******************** misc. functions ********************/ @@ -1914,9 +1928,10 @@ void pmap_enter_pv(pmap_t pmap, vaddr_t va, struct vm_page *pg, u_int *npte) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); pv_entry_t pv, npv; - pv = pg->mdpage.pvh_list; + pv = md->pvh_list; #ifdef DEBUG if (pmapdebug & PDB_ENTER) printf("pmap_enter: pv %p: was %#"PRIxVADDR"/%p/%p\n", @@ -2066,6 +2081,7 @@ void pmap_remove_pv(pmap_t pmap, vaddr_t va, struct vm_page *pg) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); pv_entry_t pv, npv; int last; @@ -2075,7 +2091,7 @@ VM_PAGE_TO_PHYS(pg)); #endif - pv = pg->mdpage.pvh_list; + pv = md->pvh_list; /* * If it is the first entry on the list, it is actually @@ -2119,7 +2135,7 @@ * removed. If it was, then reenable caching. */ - pv = pg->mdpage.pvh_list; + pv = md->pvh_list; for (npv = pv->pv_next; npv; npv = npv->pv_next) { if (mips_cache_indexof(pv->pv_va ^ npv->pv_va)) break; @@ -2142,6 +2158,7 @@ pmap_pv_page_alloc(struct pool *pp, int flags) { struct vm_page *pg; + struct vm_page_md *md; paddr_t phys; #if defined(MIPS3_PLUS) pv_entry_t pv; @@ -2152,6 +2169,7 @@ if (pg == NULL) return NULL; + md = VM_PAGE_TO_MD(pg); phys = VM_PAGE_TO_PHYS(pg); #ifdef _LP64 KASSERT(mips3_xkphys_cached); @@ -2162,7 +2180,7 @@ #if defined(MIPS3_PLUS) if (mips_cache_virtual_alias) { pg = PHYS_TO_VM_PAGE(phys); - pv = pg->mdpage.pvh_list; + pv = md->pvh_list; if ((pv->pv_flags & PV_UNCACHED) == 0 && mips_cache_indexof(pv->pv_va) != mips_cache_indexof(va)) mips_dcache_wbinv_range_index(pv->pv_va, PAGE_SIZE); @@ -2251,7 +2269,8 @@ #if defined(MIPS3_PLUS) if (mips_cache_virtual_alias) { pg = PHYS_TO_VM_PAGE(pa); - pv = pg->mdpage.pvh_list; + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); + pv = md->pvh_list; if ((pv->pv_flags & PV_UNCACHED) == 0 && mips_cache_indexof(pv->pv_va) != mips_cache_indexof(va)) mips_dcache_wbinv_range_index(pv->pv_va, PAGE_SIZE);