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