diff options
| author | 2008-06-16 11:28:04 +0200 | |
|---|---|---|
| committer | 2008-06-16 11:28:04 +0200 | |
| commit | 7aaaec38fcd9ef3172e69f8c19f20113830a8498 (patch) | |
| tree | b12a1c359ad53ae10601f77b3438bb27c3c8f337 /arch/ia64/kernel/patch.c | |
| parent | x86: untangle pci dependencies (diff) | |
| parent | Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6 (diff) | |
| download | linux-dev-7aaaec38fcd9ef3172e69f8c19f20113830a8498.tar.xz linux-dev-7aaaec38fcd9ef3172e69f8c19f20113830a8498.zip | |
Merge branch 'linus' into x86/kconfig
Diffstat (limited to 'arch/ia64/kernel/patch.c')
| -rw-r--r-- | arch/ia64/kernel/patch.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/arch/ia64/kernel/patch.c b/arch/ia64/kernel/patch.c index e0dca8743dbb..b83b2c516008 100644 --- a/arch/ia64/kernel/patch.c +++ b/arch/ia64/kernel/patch.c @@ -115,6 +115,29 @@ ia64_patch_vtop (unsigned long start, unsigned long end) ia64_srlz_i(); } +/* + * Disable the RSE workaround by turning the conditional branch + * that we tagged in each place the workaround was used into an + * unconditional branch. + */ +void __init +ia64_patch_rse (unsigned long start, unsigned long end) +{ + s32 *offp = (s32 *) start; + u64 ip, *b; + + while (offp < (s32 *) end) { + ip = (u64) offp + *offp; + + b = (u64 *)(ip & -16); + b[1] &= ~0xf800000L; + ia64_fc((void *) ip); + ++offp; + } + ia64_sync_i(); + ia64_srlz_i(); +} + void __init ia64_patch_mckinley_e9 (unsigned long start, unsigned long end) { |
