aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorMarcel Moolenaar <marcel@FreeBSD.org>2008-02-14 19:15:46 +0000
committerMarcel Moolenaar <marcel@FreeBSD.org>2008-02-14 19:15:46 +0000
commit0850678e468e4b53813fb7988adadbb16dcd0663 (patch)
treefaa55ad014e10e4a4a729c442b5c370a5c4c87c7 /sys
parent76288e93f2550e2be55c8bb47468bfdbd9b17593 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/ia64/ia64/machdep.c6
-rw-r--r--sys/ia64/ia64/pmap.c13
2 files changed, 19 insertions, 0 deletions
diff --git a/sys/ia64/ia64/machdep.c b/sys/ia64/ia64/machdep.c
index b0854fcfd751..2980d61ed93f 100644
--- a/sys/ia64/ia64/machdep.c
+++ b/sys/ia64/ia64/machdep.c
@@ -100,6 +100,9 @@ __FBSDID("$FreeBSD$");
#include <i386/include/specialreg.h>
+/* XXX fc.i kluge (quick fix) */
+extern int ia64_icache_sync_kluge;
+
u_int64_t processor_frequency;
u_int64_t bus_frequency;
u_int64_t itc_frequency;
@@ -222,6 +225,9 @@ identifycpu(void)
}
break;
case 0x20:
+ /* XXX fc.i kluge (quick fix) */
+ ia64_icache_sync_kluge = 1;
+
family_name = "Itanium 2";
switch (model) {
case 0x00:
diff --git a/sys/ia64/ia64/pmap.c b/sys/ia64/ia64/pmap.c
index 253211c338ca..820f914ff8b5 100644
--- a/sys/ia64/ia64/pmap.c
+++ b/sys/ia64/ia64/pmap.c
@@ -118,6 +118,9 @@ __FBSDID("$FreeBSD$");
/* XXX move to a header. */
extern uint64_t ia64_gateway_page[];
+/* XXX fc.i kluge (quick fix) */
+int ia64_icache_sync_kluge;
+
MALLOC_DEFINE(M_PMAP, "PMAP", "PMAP Structures");
#ifndef PMAP_SHPGPERPROC
@@ -1183,6 +1186,7 @@ static void
pmap_set_pte(struct ia64_lpte *pte, vm_offset_t va, vm_offset_t pa,
boolean_t wired, boolean_t managed)
{
+ vm_offset_t lim;
pte->pte &= PTE_PROT_MASK | PTE_PL_MASK | PTE_AR_MASK | PTE_ED;
pte->pte |= PTE_PRESENT | PTE_MA_WB;
@@ -1193,6 +1197,15 @@ pmap_set_pte(struct ia64_lpte *pte, vm_offset_t va, vm_offset_t pa,
pte->itir = PAGE_SHIFT << 2;
pte->tag = ia64_ttag(va);
+
+ /* XXX fc.i kluge (quick fix) */
+ if (ia64_icache_sync_kluge) {
+ lim = va + PAGE_SIZE;
+ while (va < lim) {
+ __asm __volatile("fc.i %0" :: "r"(va));
+ va += 32;
+ }
+ }
}
/*