summaryrefslogtreecommitdiffstats
path: root/sys/alpha
diff options
context:
space:
mode:
authorgallatin <gallatin@FreeBSD.org>2004-04-26 17:49:05 +0000
committergallatin <gallatin@FreeBSD.org>2004-04-26 17:49:05 +0000
commite227aaaaed35e7c1897526445bed77a02eec29b4 (patch)
tree6c10595f5e68ae60ebefb108dcbc527537451851 /sys/alpha
parentc3d9e01a8fd924d31259a44147237ff1d4770cd2 (diff)
downloadFreeBSD-src-e227aaaaed35e7c1897526445bed77a02eec29b4.zip
FreeBSD-src-e227aaaaed35e7c1897526445bed77a02eec29b4.tar.gz
MFamd64: implement the PG_UNMANAGED flag on vm_pages.
Alan noticed that alpha ignored PG_UNMANAGED when we were looking into pmap_emulate_reference() panics. Perhaps this will help. Reviewed by: alc
Diffstat (limited to 'sys/alpha')
-rw-r--r--sys/alpha/alpha/pmap.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c
index 1d8b531..f038a2f 100644
--- a/sys/alpha/alpha/pmap.c
+++ b/sys/alpha/alpha/pmap.c
@@ -1900,7 +1900,8 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
* raise IPL while manipulating pv_table since pmap_enter can be
* called at interrupt time.
*/
- if (pmap_initialized && (m->flags & PG_FICTITIOUS) == 0) {
+ if (pmap_initialized &&
+ (m->flags & (PG_FICTITIOUS|PG_UNMANAGED)) == 0) {
pmap_insert_entry(pmap, va, mpte, m);
managed |= PG_MANAGED;
}
@@ -1960,7 +1961,7 @@ vm_page_t
pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t mpte)
{
register pt_entry_t *pte;
-
+ int managed;
/*
* In the case that a page table page is not
@@ -2025,7 +2026,11 @@ pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t mpte)
* raise IPL while manipulating pv_table since pmap_enter can be
* called at interrupt time.
*/
- pmap_insert_entry(pmap, va, mpte, m);
+ managed = 0;
+ if ((m->flags & (PG_FICTITIOUS|PG_UNMANAGED)) == 0) {
+ pmap_insert_entry(pmap, va, mpte, m);
+ managed = PG_MANAGED | PG_FOR | PG_FOW | PG_FOE;
+ }
/*
* Increment counters
@@ -2035,7 +2040,7 @@ pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t mpte)
/*
* Now validate mapping with RO protection
*/
- *pte = pmap_phys_to_pte(VM_PAGE_TO_PHYS(m)) | PG_V | PG_KRE | PG_URE | PG_MANAGED | PG_FOR | PG_FOE | PG_FOW;
+ *pte = pmap_phys_to_pte(VM_PAGE_TO_PHYS(m)) | PG_V | PG_KRE | PG_URE | managed;
alpha_pal_imb(); /* XXX overkill? */
return mpte;
OpenPOWER on IntegriCloud