summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/kvm.c
diff options
context:
space:
mode:
authorLiu Yu-B13201 <Yu.Liu@freescale.com>2011-12-01 21:22:53 +0100
committerAvi Kivity <avi@redhat.com>2012-03-05 13:52:34 +0100
commitbefdc0a65afd17181392eff3d43c63407f266a9f (patch)
tree1adf9e1cbef1f5d555334de5ce2a9b71ae8dd490 /arch/powerpc/kernel/kvm.c
parentKVM: PPC: e500: use hardware hint when loading TLB0 entries (diff)
downloadlinux-befdc0a65afd17181392eff3d43c63407f266a9f.tar.xz
linux-befdc0a65afd17181392eff3d43c63407f266a9f.zip
KVM: PPC: Avoid patching paravirt template code
Currently we patch the whole code include paravirt template code. This isn't safe for scratch area and has impact to performance. Signed-off-by: Liu Yu <yu.liu@freescale.com> Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/powerpc/kernel/kvm.c')
-rw-r--r--arch/powerpc/kernel/kvm.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/kvm.c b/arch/powerpc/kernel/kvm.c
index 04d4b5aa6dca..62bdf2389669 100644
--- a/arch/powerpc/kernel/kvm.c
+++ b/arch/powerpc/kernel/kvm.c
@@ -665,6 +665,9 @@ static void kvm_check_ins(u32 *inst, u32 features)
}
}
+extern u32 kvm_template_start[];
+extern u32 kvm_template_end[];
+
static void kvm_use_magic_page(void)
{
u32 *p;
@@ -692,8 +695,14 @@ static void kvm_use_magic_page(void)
*/
local_irq_disable();
- for (p = start; p < end; p++)
+ for (p = start; p < end; p++) {
+ /* Avoid patching the template code */
+ if (p >= kvm_template_start && p < kvm_template_end) {
+ p = kvm_template_end - 1;
+ continue;
+ }
kvm_check_ins(p, features);
+ }
local_irq_enable();