diff options
author | dfr <dfr@FreeBSD.org> | 2001-10-24 21:22:08 +0000 |
---|---|---|
committer | dfr <dfr@FreeBSD.org> | 2001-10-24 21:22:08 +0000 |
commit | aa73531f830478b3ae949cf2d2109ff126da0998 (patch) | |
tree | f50bb76c87a0a3f3d3c5e9fa0f7318e302731fb9 | |
parent | c0bfb6b8ea6b9968e88cf0bb88c6c5b4c36882e4 (diff) | |
download | FreeBSD-src-aa73531f830478b3ae949cf2d2109ff126da0998.zip FreeBSD-src-aa73531f830478b3ae949cf2d2109ff126da0998.tar.gz |
* Clear the TLB on boot.
* If a pte for a location given to pmap_enter_quick is valid, just give
up - don't panic, even if the mapping is different.
-rw-r--r-- | sys/ia64/ia64/pmap.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/ia64/ia64/pmap.c b/sys/ia64/ia64/pmap.c index a3dda85..e4a88a1 100644 --- a/sys/ia64/ia64/pmap.c +++ b/sys/ia64/ia64/pmap.c @@ -256,6 +256,7 @@ static PMAP_INLINE void free_pv_entry __P((pv_entry_t pv)); static pv_entry_t get_pv_entry __P((void)); static void ia64_protection_init __P((void)); +static void pmap_invalidate_all __P((pmap_t pmap)); static void pmap_remove_all __P((vm_page_t m)); static void pmap_enter_quick __P((pmap_t pmap, vm_offset_t va, vm_page_t m)); @@ -391,6 +392,11 @@ pmap_bootstrap() pvbootentries = (struct pv_entry *) pmap_steal_memory(pvbootmax * sizeof(struct pv_entry)); pvbootnext = 0; + + /* + * Clear out any random TLB entries left over from booting. + */ + pmap_invalidate_all(kernel_pmap); } /* @@ -1689,11 +1695,8 @@ pmap_enter_quick(pmap_t pmap, vm_offset_t va, vm_page_t m) oldpmap = pmap_install(pmap); pte = pmap_find_pte(va); - if (pte->pte_p) { - if (pmap_pte_pa(pte) != VM_PAGE_TO_PHYS(m)) - panic("pmap_enter_quick: page is already mapped to different address"); + if (pte->pte_p) return; - } PMAP_DEBUG_VA(va); pmap_insert_entry(pmap, va, m); |