Re: [PATCH v9 2/4] KVM: PPC: epapr: Add idle hcall support for host

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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-ppc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM Development]     [KVM ARM]     [KVM ia64]     [Linux Virtualization]     [Linux USB Devel]     [Linux Video]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux