Module Name: src Committed By: uebayasi Date: Thu Feb 25 04:33:44 UTC 2010
Modified Files: src/sys/arch/ia64/ia64 [uebayasi-xip]: pmap.c src/sys/arch/ia64/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.24 -r1.24.2.1 src/sys/arch/ia64/ia64/pmap.c cvs rdiff -u -r1.6 -r1.6.2.1 src/sys/arch/ia64/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/ia64/ia64/pmap.c diff -u src/sys/arch/ia64/ia64/pmap.c:1.24 src/sys/arch/ia64/ia64/pmap.c:1.24.2.1 --- src/sys/arch/ia64/ia64/pmap.c:1.24 Sat Nov 7 07:27:44 2009 +++ src/sys/arch/ia64/ia64/pmap.c Thu Feb 25 04:33:44 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.c,v 1.24 2009/11/07 07:27:44 cegger Exp $ */ +/* $NetBSD: pmap.c,v 1.24.2.1 2010/02/25 04:33:44 uebayasi Exp $ */ /*- @@ -85,7 +85,10 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.24 2009/11/07 07:27:44 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.24.2.1 2010/02/25 04:33:44 uebayasi Exp $"); + +#include "opt_device_page.h" +#include "opt_xip.h" #include <sys/param.h> #include <sys/systm.h> @@ -1233,6 +1236,7 @@ bool pmap_clear_modify(struct vm_page *pg) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); bool rv = false; struct ia64_lpte *pte; pmap_t oldpmap; @@ -1241,7 +1245,7 @@ if (pg->flags & PG_FAKE) return rv; - TAILQ_FOREACH(pv, &pg->mdpage.pv_list, pv_list) { + TAILQ_FOREACH(pv, &md->pv_list, pv_list) { PMAP_LOCK(pv->pv_pmap); oldpmap = pmap_install(pv->pv_pmap); pte = pmap_find_vhpt(pv->pv_va); @@ -1266,6 +1270,7 @@ void pmap_page_protect(struct vm_page *pg, vm_prot_t prot) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); struct ia64_lpte *pte; pmap_t oldpmap, pmap; pv_entry_t pv; @@ -1275,7 +1280,7 @@ if (prot & (VM_PROT_READ | VM_PROT_EXECUTE)) { if (pg->flags & PG_RDONLY) return; - TAILQ_FOREACH(pv, &pg->mdpage.pv_list, pv_list) { + TAILQ_FOREACH(pv, &md->pv_list, pv_list) { pmap = pv->pv_pmap; PMAP_LOCK(pmap); oldpmap = pmap_install(pmap); @@ -1489,8 +1494,9 @@ */ void -pmap_page_purge(struct vm_page * pg) +pmap_page_purge(struct vm_page *pg) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); pmap_t oldpmap; pv_entry_t pv; @@ -1505,7 +1511,7 @@ #endif //UVM_LOCK_ASSERT_PAGEQ(); - while ((pv = TAILQ_FIRST(&pg->mdpage.pv_list)) != NULL) { + while ((pv = TAILQ_FIRST(&md->pv_list)) != NULL) { struct ia64_lpte *pte; pmap_t pmap = pv->pv_pmap; vaddr_t va = pv->pv_va; @@ -1972,11 +1978,13 @@ * Remove an entry from the list of managed mappings. */ static int -pmap_remove_entry(pmap_t pmap, struct vm_page * pg, vaddr_t va, pv_entry_t pv) +pmap_remove_entry(pmap_t pmap, struct vm_page *pg, vaddr_t va, pv_entry_t pv) { + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); + if (!pv) { - if (pg->mdpage.pv_list_count < pmap->pm_stats.resident_count) { - TAILQ_FOREACH(pv, &pg->mdpage.pv_list, pv_list) { + if (md->pv_list_count < pmap->pm_stats.resident_count) { + TAILQ_FOREACH(pv, &md->pv_list, pv_list) { if (pmap == pv->pv_pmap && va == pv->pv_va) break; } @@ -1989,9 +1997,9 @@ } if (pv) { - TAILQ_REMOVE(&pg->mdpage.pv_list, pv, pv_list); - pg->mdpage.pv_list_count--; - if (TAILQ_FIRST(&pg->mdpage.pv_list) == NULL) { + TAILQ_REMOVE(&md->pv_list, pv, pv_list); + md->pv_list_count--; + if (TAILQ_FIRST(&md->pv_list) == NULL) { //UVM_LOCK_ASSERT_PAGEQ(); pg->flags |= PG_RDONLY; } @@ -2012,6 +2020,7 @@ static void pmap_insert_entry(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; pv = get_pv_entry(pmap); @@ -2021,8 +2030,8 @@ //LOCK_ASSERT(simple_lock_held(pmap->slock)); //UVM_LOCK_ASSERT_PAGEQ(); TAILQ_INSERT_TAIL(&pmap->pm_pvlist, pv, pv_plist); - TAILQ_INSERT_TAIL(&pg->mdpage.pv_list, pv, pv_list); - pg->mdpage.pv_list_count++; + TAILQ_INSERT_TAIL(&md->pv_list, pv, pv_list); + md->pv_list_count++; } @@ -2092,13 +2101,14 @@ pa = VM_PAGE_TO_PHYS(pg); #ifdef DEBUG - mutex_enter(&pg->mdpage.pv_mutex); + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); + mutex_enter(&md->pv_mutex); if (pg->wire_count != 0) { printf("pmap_physpage_alloc: page 0x%lx has " "%d references\n", pa, pg->wire_count); panic("pmap_physpage_alloc"); } - mutex_exit(&pg->mdpage.pv_mutex); + mutex_exit(&md->pv_mutex); #endif *pap = pa; return true; @@ -2120,10 +2130,11 @@ panic("pmap_physpage_free: bogus physical page address"); #ifdef DEBUG - mutex_enter(&pg->mdpage.pv_mutex); + struct vm_page_md * const md = VM_PAGE_TO_MD(pg); + mutex_enter(&md->pv_mutex); if (pg->wire_count != 0) panic("pmap_physpage_free: page still has references"); - mutex_exit(&pg->mdpage.pv_mutex); + mutex_exit(&md->pv_mutex); #endif uvm_pagefree(pg); Index: src/sys/arch/ia64/include/pmap.h diff -u src/sys/arch/ia64/include/pmap.h:1.6 src/sys/arch/ia64/include/pmap.h:1.6.2.1 --- src/sys/arch/ia64/include/pmap.h:1.6 Mon Jul 20 04:41:37 2009 +++ src/sys/arch/ia64/include/pmap.h Thu Feb 25 04:33:44 2010 @@ -118,9 +118,9 @@ void pmap_bootstrap(void); #define pmap_is_referenced(pg) \ - (((pg)->mdpage.pvh_attrs & PGA_REFERENCED) != 0) + ((VM_PAGE_TO_MD(pg)->pvh_attrs & PGA_REFERENCED) != 0) #define pmap_is_modified(pg) \ - (((pg)->mdpage.pvh_attrs & PGA_MODIFIED) != 0) + ((VM_PAGE_TO_MD(pg)->pvh_attrs & PGA_MODIFIED) != 0) #define PMAP_STEAL_MEMORY /* enable pmap_steal_memory() */