* [PATCH] KVM: PPC: paravirt: Avoid patching paravirt template code
@ 2011-11-23 10:05 Liu Yu
2011-11-28 17:32 ` [PATCH] KVM: PPC: paravirt: Avoid patching paravirt template Scott Wood
0 siblings, 1 reply; 2+ messages in thread
From: Liu Yu @ 2011-11-23 10:05 UTC (permalink / raw)
To: kvm-ppc
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 <yu.liu@freescale.com>
---
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;
--
1.6.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] KVM: PPC: paravirt: Avoid patching paravirt template
2011-11-23 10:05 [PATCH] KVM: PPC: paravirt: Avoid patching paravirt template code Liu Yu
@ 2011-11-28 17:32 ` Scott Wood
0 siblings, 0 replies; 2+ messages in thread
From: Scott Wood @ 2011-11-28 17:32 UTC (permalink / raw)
To: kvm-ppc
On 11/23/2011 04:05 AM, Liu Yu wrote:
> 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.
Ouch. This will do bad things to the scratch area.
> Signed-off-by: Liu Yu <yu.liu@freescale.com>
> ---
> 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;
Instead of excluding only the template code for the instruction type
being patched, we should exclude the entire template region in the main
loop.
-Scott
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-11-28 17:32 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-23 10:05 [PATCH] KVM: PPC: paravirt: Avoid patching paravirt template code Liu Yu
2011-11-28 17:32 ` [PATCH] KVM: PPC: paravirt: Avoid patching paravirt template Scott Wood
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.