[PATCH 08/15] KVM: PPC: Implement mfsr emulation

2010-03-08 Thread Alexander Graf
We emulate the mfsrin instruction already, that passes the SR number
in a register value. But we lacked support for mfsr that encoded the
SR number in the opcode.

So let's implement it.

Signed-off-by: Alexander Graf ag...@suse.de
---
 arch/powerpc/kvm/book3s_64_emulate.c |   13 +
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/kvm/book3s_64_emulate.c 
b/arch/powerpc/kvm/book3s_64_emulate.c
index c989214..8d7a78d 100644
--- a/arch/powerpc/kvm/book3s_64_emulate.c
+++ b/arch/powerpc/kvm/book3s_64_emulate.c
@@ -35,6 +35,7 @@
 #define OP_31_XOP_SLBMTE   402
 #define OP_31_XOP_SLBIE434
 #define OP_31_XOP_SLBIA498
+#define OP_31_XOP_MFSR 595
 #define OP_31_XOP_MFSRIN   659
 #define OP_31_XOP_SLBMFEV  851
 #define OP_31_XOP_EIOIO854
@@ -90,6 +91,18 @@ int kvmppc_core_emulate_op(struct kvm_run *run, struct 
kvm_vcpu *vcpu,
case OP_31_XOP_MTMSR:
kvmppc_set_msr(vcpu, kvmppc_get_gpr(vcpu, 
get_rs(inst)));
break;
+   case OP_31_XOP_MFSR:
+   {
+   int srnum;
+
+   srnum = kvmppc_get_field(inst, 12 + 32, 15 + 32);
+   if (vcpu-arch.mmu.mfsrin) {
+   u32 sr;
+   sr = vcpu-arch.mmu.mfsrin(vcpu, srnum);
+   kvmppc_set_gpr(vcpu, get_rt(inst), sr);
+   }
+   break;
+   }
case OP_31_XOP_MFSRIN:
{
int srnum;
-- 
1.6.0.2

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


[PATCH 08/15] KVM: PPC: Implement mfsr emulation

2010-03-08 Thread Alexander Graf
We emulate the mfsrin instruction already, that passes the SR number
in a register value. But we lacked support for mfsr that encoded the
SR number in the opcode.

So let's implement it.

Signed-off-by: Alexander Graf ag...@suse.de
---
 arch/powerpc/kvm/book3s_64_emulate.c |   13 +
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/kvm/book3s_64_emulate.c 
b/arch/powerpc/kvm/book3s_64_emulate.c
index c989214..8d7a78d 100644
--- a/arch/powerpc/kvm/book3s_64_emulate.c
+++ b/arch/powerpc/kvm/book3s_64_emulate.c
@@ -35,6 +35,7 @@
 #define OP_31_XOP_SLBMTE   402
 #define OP_31_XOP_SLBIE434
 #define OP_31_XOP_SLBIA498
+#define OP_31_XOP_MFSR 595
 #define OP_31_XOP_MFSRIN   659
 #define OP_31_XOP_SLBMFEV  851
 #define OP_31_XOP_EIOIO854
@@ -90,6 +91,18 @@ int kvmppc_core_emulate_op(struct kvm_run *run, struct 
kvm_vcpu *vcpu,
case OP_31_XOP_MTMSR:
kvmppc_set_msr(vcpu, kvmppc_get_gpr(vcpu, 
get_rs(inst)));
break;
+   case OP_31_XOP_MFSR:
+   {
+   int srnum;
+
+   srnum = kvmppc_get_field(inst, 12 + 32, 15 + 32);
+   if (vcpu-arch.mmu.mfsrin) {
+   u32 sr;
+   sr = vcpu-arch.mmu.mfsrin(vcpu, srnum);
+   kvmppc_set_gpr(vcpu, get_rt(inst), sr);
+   }
+   break;
+   }
case OP_31_XOP_MFSRIN:
{
int srnum;
-- 
1.6.0.2

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