On 08.03.2012, at 00:12, Stuart Yoder wrote:
> From: Liu Yu-B13201 <[email protected]>
>
> And add a new flag definition in kvm_ppc_pvinfo to indicate
> whether host support EV_IDLE hcall.
>
> Signed-off-by: Liu Yu <[email protected]>
> [[email protected]: fixes for conditions allowing idle]
> Signed-off-by: Stuart Yoder <[email protected]>
> ---
> -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" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html