On 08.03.2012, at 00:12, Stuart Yoder wrote:

> From: Liu Yu-B13201 <yu....@freescale.com>
> 
> And add a new flag definition in kvm_ppc_pvinfo to indicate
> whether host support EV_IDLE hcall.
> 
> Signed-off-by: Liu Yu <yu....@freescale.com>
> [stuart.yo...@freescale.com: fixes for conditions allowing idle]
> Signed-off-by: Stuart Yoder <stuart.yo...@freescale.com>
> ---
> -v9: pad hcall instruction array with nops
> 
> arch/powerpc/include/asm/Kbuild     |    1 +
> arch/powerpc/include/asm/kvm_para.h |   14 ++++++++++++--
> arch/powerpc/kvm/booke.c            |    6 ++++++
> arch/powerpc/kvm/powerpc.c          |   19 ++++++++++++++++---
> include/linux/kvm.h                 |    2 ++
> 5 files changed, 37 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/Kbuild b/arch/powerpc/include/asm/Kbuild
> index d51df17..b68cb1c 100644
> --- a/arch/powerpc/include/asm/Kbuild
> +++ b/arch/powerpc/include/asm/Kbuild
> @@ -34,3 +34,4 @@ header-y += termios.h
> header-y += types.h
> header-y += ucontext.h
> header-y += unistd.h
> +header-y += epapr_hcalls.h
> diff --git a/arch/powerpc/include/asm/kvm_para.h 
> b/arch/powerpc/include/asm/kvm_para.h
> index b3b4667..5617c8c 100644
> --- a/arch/powerpc/include/asm/kvm_para.h
> +++ b/arch/powerpc/include/asm/kvm_para.h
> @@ -90,9 +90,19 @@ struct kvm_vcpu_arch_shared {
> };
> 
> #define KVM_SC_MAGIC_R0               0x4b564d21 /* "KVM!" */
> -#define HC_VENDOR_KVM                (42 << 16)
> +
> +#include <asm/epapr_hcalls.h>
> +
> +/* ePAPR Hypercall Vendor ID */
> +#define HC_VENDOR_EPAPR              (EV_EPAPR_VENDOR_ID << 16)
> +#define HC_VENDOR_KVM                (EV_KVM_VENDOR_ID << 16)
> +
> +/* ePAPR Hypercall Token */
> +#define HC_EV_IDLE           EV_IDLE
> +
> +/* ePAPR Hypercall Return Codes */
> #define HC_EV_SUCCESS         0
> -#define HC_EV_UNIMPLEMENTED  12
> +#define HC_EV_UNIMPLEMENTED  EV_UNIMPLEMENTED

Shouldn't all this rather be in an epapr header file?

> 
> #define KVM_FEATURE_MAGIC_PAGE        1
> 
> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
> index f0ef0be..9fde645 100644
> --- a/arch/powerpc/kvm/booke.c
> +++ b/arch/powerpc/kvm/booke.c
> @@ -593,6 +593,12 @@ static void kvmppc_core_check_exceptions(struct kvm_vcpu 
> *vcpu)
>       unsigned int priority;
> 
>       if (vcpu->requests) {
> +             /* kvm_vcpu_block() sets KVM_REQ_UNHALT, but it is
> +              * not cleared elsewhere as on x86.  Clear it here
> +              * for now, otherwise we never go idle.
> +              */
> +             clear_bit(KVM_REQ_UNHALT, &vcpu->requests);

Shouldn't the same thing hit us on non-booke as well? Also, it sounds unrelated 
to me and probably shouldn't be in this patch.

> +
>               if (kvm_check_request(KVM_REQ_PENDING_TIMER, vcpu)) {
>                       smp_mb();
>                       update_timer_ints(vcpu);
> diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
> index ee489f4..2595916 100644
> --- a/arch/powerpc/kvm/powerpc.c
> +++ b/arch/powerpc/kvm/powerpc.c
> @@ -48,8 +48,7 @@ static unsigned int perfmon_refcount;
> 
> int kvm_arch_vcpu_runnable(struct kvm_vcpu *v)
> {
> -     bool ret = !(v->arch.shared->msr & MSR_WE) ||
> -                !!(v->arch.pending_exceptions) ||
> +     bool ret = !!(v->arch.pending_exceptions) ||
>                  v->requests;

Huh?


Alex

--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to