On 19.04.2013, at 04:44, Tiejun Chen wrote:

> We can provide this emulation to simplify more extension later.

Works for me, but this should really be part of a series that makes use of 
ehpriv.


Alex

> 
> Signed-off-by: Tiejun Chen <tiejun.c...@windriver.com>
> ---
> arch/powerpc/include/asm/disassemble.h |    4 ++++
> arch/powerpc/kvm/e500_emulate.c        |   17 +++++++++++++++++
> 2 files changed, 21 insertions(+)
> 
> diff --git a/arch/powerpc/include/asm/disassemble.h 
> b/arch/powerpc/include/asm/disassemble.h
> index 9b198d1..856f8de 100644
> --- a/arch/powerpc/include/asm/disassemble.h
> +++ b/arch/powerpc/include/asm/disassemble.h
> @@ -77,4 +77,8 @@ static inline unsigned int get_d(u32 inst)
>       return inst & 0xffff;
> }
> 
> +static inline unsigned int get_oc(u32 inst)
> +{
> +     return (inst >> 11) & 0x7fff;
> +}
> #endif /* __ASM_PPC_DISASSEMBLE_H__ */
> diff --git a/arch/powerpc/kvm/e500_emulate.c b/arch/powerpc/kvm/e500_emulate.c
> index e78f353..36492cf 100644
> --- a/arch/powerpc/kvm/e500_emulate.c
> +++ b/arch/powerpc/kvm/e500_emulate.c
> @@ -26,6 +26,7 @@
> #define XOP_TLBRE   946
> #define XOP_TLBWE   978
> #define XOP_TLBILX  18
> +#define XOP_EHPRIV  270
> 
> #ifdef CONFIG_KVM_E500MC
> static int dbell2prio(ulong param)
> @@ -80,6 +81,18 @@ static int kvmppc_e500_emul_msgsnd(struct kvm_vcpu *vcpu, 
> int rb)
> 
>       return EMULATE_DONE;
> }
> +
> +static int kvmppc_e500_emul_ehpriv(struct kvm_run *run, struct kvm_vcpu 
> *vcpu,
> +                                     unsigned int inst)
> +{
> +     int emulated = EMULATE_DONE;
> +
> +     switch (get_oc(inst)) {
> +     default:
> +             emulated = EMULATE_FAIL;
> +     }
> +     return emulated;
> +}
> #endif
> 
> int kvmppc_core_emulate_op(struct kvm_run *run, struct kvm_vcpu *vcpu,
> @@ -130,6 +143,10 @@ int kvmppc_core_emulate_op(struct kvm_run *run, struct 
> kvm_vcpu *vcpu,
>                       emulated = kvmppc_e500_emul_tlbivax(vcpu, ea);
>                       break;
> 
> +             case XOP_EHPRIV:
> +                     emulated = kvmppc_e500_emul_ehpriv(run, vcpu, inst);
> +                     break;
> +
>               default:
>                       emulated = EMULATE_FAIL;
>               }
> -- 
> 1.7.9.5
> 

--
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