From patchwork Wed Nov 23 10:05:32 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: KVM: PPC: paravirt: Avoid patching paravirt template code Date: Wed, 23 Nov 2011 00:05:32 -0000 From: Liu Yu-B13201 X-Patchwork-Id: 127267 Message-Id: <1322042732-10285-1-git-send-email-yu.liu@freescale.com> To: Cc: , Liu Yu Currently we patch the whole code include paravirt template code. This doesn't lead into issue for now, but it makes some previlege instructions branch to paravirt code twice. Signed-off-by: Liu Yu --- arch/powerpc/kernel/kvm.c | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-) diff --git a/arch/powerpc/kernel/kvm.c b/arch/powerpc/kernel/kvm.c index 3953fbd..485748c 100644 --- a/arch/powerpc/kernel/kvm.c +++ b/arch/powerpc/kernel/kvm.c @@ -171,6 +171,10 @@ static void kvm_patch_ins_mtmsrd(u32 *inst, u32 rt) if (!p) return; + if ((inst > kvm_emulate_mtmsrd) && + (inst < kvm_emulate_mtmsrd + kvm_emulate_mtmsrd_len)) + return; + /* Find out where we are and put everything there */ distance_start = (ulong)p - (ulong)inst; next_inst = ((ulong)inst + 4); @@ -220,6 +224,11 @@ static void kvm_patch_ins_mtmsr(u32 *inst, u32 rt) int distance_end; ulong next_inst; + if ((inst > kvm_emulate_mtmsr) && + (inst < kvm_emulate_mtmsr + kvm_emulate_mtmsr_len)) + return; + + p = kvm_alloc(kvm_emulate_mtmsr_len * 4); if (!p) return; @@ -281,6 +290,10 @@ static void kvm_patch_ins_wrtee(u32 *inst, u32 rt, int imm_one) int distance_end; ulong next_inst; + if ((inst > kvm_emulate_wrtee) && + (inst < kvm_emulate_wrtee + kvm_emulate_wrtee_len)) + return; + p = kvm_alloc(kvm_emulate_wrtee_len * 4); if (!p) return; @@ -338,6 +351,10 @@ static void kvm_patch_ins_wrteei_0(u32 *inst) int distance_end; ulong next_inst; + if ((inst > kvm_emulate_wrteei_0) && + (inst < kvm_emulate_wrteei_0 + kvm_emulate_wrteei_0_len)) + return; + p = kvm_alloc(kvm_emulate_wrteei_0_len * 4); if (!p) return;