summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordfr <dfr@FreeBSD.org>2001-10-24 21:22:08 +0000
committerdfr <dfr@FreeBSD.org>2001-10-24 21:22:08 +0000
commitaa73531f830478b3ae949cf2d2109ff126da0998 (patch)
treef50bb76c87a0a3f3d3c5e9fa0f7318e302731fb9 /sys
parentc0bfb6b8ea6b9968e88cf0bb88c6c5b4c36882e4 (diff)
downloadFreeBSD-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.
Diffstat (limited to 'sys')
-rw-r--r--sys/ia64/ia64/pmap.c11
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);
OpenPOWER on IntegriCloud