Skip to contentSkip to conversation

KVM: PPC: e500: Emulate TMCFG0 TMRN register

PATCH Superseded Laurentiu Tudor 2 participants 2 messages Sep 24, 2015

Subsystems (2)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 KVM: PPC: e500: Emulate TMCFG0 TMRN register

Emulate TMCFG0 TMRN register exposing one HW thread per vcpu.

[[email protected]: rebased on latest kernel,
use define instead of hardcoded value]

---
Needs this patch: https://patchwork.ozlabs.org/patch/521752/

 arch/powerpc/include/asm/disassemble.h |  5 +++++
 arch/powerpc/kvm/e500_emulate.c        | 11 +++++++++++
 2 files changed, 16 insertions(+)
arch/powerpc/include/asm/disassemble.h +5 -0
index 6330a61..4852e84 100644
@@ -42,6 +42,11 @@ static inline unsigned int get_dcrn(u32 inst)
 	return ((inst >> 16) & 0x1f) | ((inst >> 6) & 0x3e0);
 }
 
+static inline unsigned int get_tmrn(u32 inst)
+{
+	return ((inst >> 16) & 0x1f) | ((inst >> 6) & 0x3e0);
+}
+
 static inline unsigned int get_rt(u32 inst)
 {
 	return (inst >> 21) & 0x1f;
arch/powerpc/kvm/e500_emulate.c +11 -0
index ce7291c..44ac54b 100644
@@ -15,6 +15,7 @@
 #include <asm/kvm_ppc.h>
 #include <asm/disassemble.h>
 #include <asm/dbell.h>
+#include <asm/reg_booke.h>
 
 #include "booke.h"
 #include "e500.h"
@@ -22,6 +23,7 @@
 #define XOP_DCBTLS  166
 #define XOP_MSGSND  206
 #define XOP_MSGCLR  238
+#define XOP_MFTMR   366
 #define XOP_TLBIVAX 786
 #define XOP_TLBSX   914
 #define XOP_TLBRE   946
@@ -165,6 +167,15 @@ int kvmppc_core_emulate_op_e500(struct kvm_run *run, struct kvm_vcpu *vcpu,
 			emulated = kvmppc_e500_emul_tlbivax(vcpu, ea);
 			break;
 
+		case XOP_MFTMR:
+			/* Expose one thread per vcpu */
+			if (get_tmrn(inst) = TMRN_TMCFG0)
+				kvmppc_set_gpr(vcpu, rt,
+					       1 | (1 << TMRN_TMCFG0_NATHRD_SHIFT));
+			else
+				emulated = EMULATE_FAIL;
+			break;
+
 		case XOP_EHPRIV:
 			emulated = kvmppc_e500_emul_ehpriv(run, vcpu, inst,
 							   advance);
Signature · 1 line
1.8.3.1
#1 lore raw
Quoted 5 lines · Laurentiu Tudor

Emulate TMCFG0 TMRN register exposing one HW thread per vcpu.

[[email protected]: rebased on latest kernel,
use define instead of hardcoded value]

Quoted 7 lines

---
Needs this patch: https://patchwork.ozlabs.org/patch/521752/

 arch/powerpc/include/asm/disassemble.h |  5 +++++
 arch/powerpc/kvm/e500_emulate.c        | 11 +++++++++++
 2 files changed, 16 insertions(+)

KVM patches should be sent to [email protected] in addition to kvm- [email protected].

arch/powerpc/kvm/e500_emulate.c int kvmppc_core_emulate_op_e500(struct kvm_run *run, · line 178

Quoted 13 lines
arch/powerpc/kvm/e500_emulate.c +8 -0
@@ -165,6 +167,15 @@ int kvmppc_core_emulate_op_e500(struct kvm_run *run, 
 struct kvm_vcpu *vcpu,
                      emulated = kvmppc_e500_emul_tlbivax(vcpu, ea);
                      break;
 
+             case XOP_MFTMR:
+                     /* Expose one thread per vcpu */
+                     if (get_tmrn(inst) = TMRN_TMCFG0)
+                             kvmppc_set_gpr(vcpu, rt,
+                                            1 | (1 << TMRN_TMCFG0_NATHRD_SHIFT));
+                     else
+                             emulated = EMULATE_FAIL;
+                     break;

Line length. Please move the implementation into its own function like all the others.

-Scott