summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Mosberger <davidm@tiger.hpl.hp.com>2003-06-12 01:12:47 -0700
committerDavid Mosberger <davidm@tiger.hpl.hp.com>2003-06-12 01:12:47 -0700
commit9f3d1b849f047bd8d4fe55b47d3feb3f84c336ff (patch)
treec16afa106631d3f5a6106474f3468f95910aeabf
parent6e43992796d4b587acd0eab43b2d9078d2b96056 (diff)
patch.c:
ia64: don't forget to establish coherence after vtop patching
-rw-r--r--arch/ia64/kernel/patch.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/arch/ia64/kernel/patch.c b/arch/ia64/kernel/patch.c
index aaae5a501d73..6818ce5f850c 100644
--- a/arch/ia64/kernel/patch.c
+++ b/arch/ia64/kernel/patch.c
@@ -87,15 +87,6 @@ ia64_patch_imm60 (u64 insn_addr, u64 val)
* at execution time, but sometimes (either for performance reasons
* or during error recovery) we cannot to this. Patch the marked
* bundles to load the physical address.
- * The 64-bit value in a "movl reg=value" is scattered between the
- * two words of the bundle like this:
- *
- * 6 6 5 4 3 2 1
- * 3210987654321098765432109876543210987654321098765432109876543210
- * ABBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCDEEEEEFFFFFFFFFGGGGGGG
- *
- * CCCCCCCCCCCCCCCCCCxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- * xxxxAFFFFFFFFFEEEEEDxGGGGGGGxxxxxxxxxxxxxBBBBBBBBBBBBBBBBBBBBBBB
*/
void __init
ia64_patch_vtop (unsigned long start, unsigned long end)
@@ -108,8 +99,14 @@ ia64_patch_vtop (unsigned long start, unsigned long end)
/* replace virtual address with corresponding physical address: */
ia64_patch_imm64(ip, ia64_tpa(get_imm64(ip)));
+ ia64_fc(ip);
++offp;
}
+ ia64_insn_group_barrier();
+ ia64_sync_i();
+ ia64_insn_group_barrier();
+ ia64_srlz_i();
+ ia64_insn_group_barrier();
}
void