On 02.12.2011, at 07:22, Liu Yu wrote:
> 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 <[email protected]>
Thanks, applied to kvm-ppc-next. Please CC kvm@vger for KVM related patches in
the future.
Alex
> ---
> v2:
> exclude the entire template region in the main loop
>
> v3:
> make the boundary test more safe
>
> arch/powerpc/kernel/kvm.c | 11 ++++++++++-
> arch/powerpc/kernel/kvm_emul.S | 6 ++++++
> 2 files changed, 16 insertions(+), 1 deletions(-)
>
> diff --git a/arch/powerpc/kernel/kvm.c b/arch/powerpc/kernel/kvm.c
> index 3953fbd..55e999d 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();
>
> diff --git a/arch/powerpc/kernel/kvm_emul.S b/arch/powerpc/kernel/kvm_emul.S
> index 801058d..e291cf3 100644
> --- a/arch/powerpc/kernel/kvm_emul.S
> +++ b/arch/powerpc/kernel/kvm_emul.S
> @@ -66,6 +66,9 @@ kvm_hypercall_start:
> shared->critical == r1 and r2 is always != r1 */ \
> STL64(r2, KVM_MAGIC_PAGE + KVM_MAGIC_CRITICAL, 0);
>
> +.global kvm_template_start
> +kvm_template_start:
> +
> .global kvm_emulate_mtmsrd
> kvm_emulate_mtmsrd:
>
> @@ -350,3 +353,6 @@ kvm_emulate_mtsrin_orig_ins_offs:
> .global kvm_emulate_mtsrin_len
> kvm_emulate_mtsrin_len:
> .long (kvm_emulate_mtsrin_end - kvm_emulate_mtsrin) / 4
> +
> +.global kvm_template_end
> +kvm_template_end:
> --
> 1.6.4
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html