diff options
author | gallatin <gallatin@FreeBSD.org> | 2004-04-26 17:49:05 +0000 |
---|---|---|
committer | gallatin <gallatin@FreeBSD.org> | 2004-04-26 17:49:05 +0000 |
commit | e227aaaaed35e7c1897526445bed77a02eec29b4 (patch) | |
tree | 6c10595f5e68ae60ebefb108dcbc527537451851 /sys/alpha | |
parent | c3d9e01a8fd924d31259a44147237ff1d4770cd2 (diff) | |
download | FreeBSD-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.c | 13 |
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; |