Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/uebayasi-xip]: src/sys/arch/mips/mips Use VM_PAGE_TO_MD(). Only compile...



details:   https://anonhg.NetBSD.org/src/rev/c69f529e8132
branches:  uebayasi-xip
changeset: 751605:c69f529e8132
user:      uebayasi <uebayasi%NetBSD.org@localhost>
date:      Thu Feb 25 04:46:28 2010 +0000

description:
Use VM_PAGE_TO_MD().  Only compile tested.

diffstat:

 sys/arch/mips/mips/pmap.c |  57 ++++++++++++++++++++++++++++++----------------
 1 files changed, 37 insertions(+), 20 deletions(-)

diffs (257 lines):

diff -r c888cfc835ac -r c69f529e8132 sys/arch/mips/mips/pmap.c
--- a/sys/arch/mips/mips/pmap.c Thu Feb 25 04:33:44 2010 +0000
+++ b/sys/arch/mips/mips/pmap.c Thu Feb 25 04:46:28 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pmap.c,v 1.188 2009/12/14 00:46:07 matt Exp $  */
+/*     $NetBSD: pmap.c,v 1.188.2.1 2010/02/25 04:46:28 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.188 2009/12/14 00:46:07 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.188.2.1 2010/02/25 04:46:28 uebayasi Exp $");
 
 /*
  *     Manages physical address maps.
@@ -265,6 +265,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 +278,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 +524,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 +863,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 +881,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 +897,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 +1082,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 +1094,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);
 
@@ -1189,7 +1193,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)
@@ -1643,7 +1648,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);
@@ -1745,6 +1751,7 @@
 bool
 pmap_clear_reference(struct vm_page *pg)
 {
+       struct vm_page_md * const md = VM_PAGE_TO_MD(pg);
        int *attrp;
        bool rv;
 
@@ -1753,7 +1760,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;
@@ -1768,8 +1775,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;
 }
 
 /*
@@ -1778,6 +1786,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;
@@ -1790,13 +1799,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;
        }
@@ -1846,8 +1855,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;
 }
 
 /*
@@ -1859,9 +1869,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 ********************/
@@ -1911,9 +1923,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",
@@ -2063,6 +2076,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;
 
@@ -2072,7 +2086,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
@@ -2116,7 +2130,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;
@@ -2139,6 +2153,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;
@@ -2149,6 +2164,7 @@
        if (pg == NULL)
                return NULL;
 
+       md = VM_PAGE_TO_MD(pg);
        phys = VM_PAGE_TO_PHYS(pg);
 #ifdef _LP64
        KASSERT(mips3_xkphys_cached);
@@ -2159,7 +2175,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);
@@ -2248,7 +2264,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);



Home | Main Index | Thread Index | Old Index