diff options
| author | Marcel Moolenaar <marcel@FreeBSD.org> | 2008-02-14 19:15:46 +0000 |
|---|---|---|
| committer | Marcel Moolenaar <marcel@FreeBSD.org> | 2008-02-14 19:15:46 +0000 |
| commit | 0850678e468e4b53813fb7988adadbb16dcd0663 (patch) | |
| tree | faa55ad014e10e4a4a729c442b5c370a5c4c87c7 /sys | |
| parent | 76288e93f2550e2be55c8bb47468bfdbd9b17593 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/ia64/ia64/machdep.c | 6 | ||||
| -rw-r--r-- | sys/ia64/ia64/pmap.c | 13 |
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; + } + } } /* |
