* [PATCH 1/6 v2] kvm: ppc: bookehv: Added wrapper macros for shadow registers
[not found] <1405596700-2699-1-git-send-email-Bharat.Bhushan@freescale.com>
@ 2014-07-17 11:43 ` Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
` (5 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:31 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
There are shadow registers like, GSPRG[0-3], GSRR0, GSRR1 etc on
BOOKE-HV and these shadow registers are guest accessible.
So these shadow registers needs to be updated on BOOKE-HV.
This patch adds new macro for get/set helper of shadow register .
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
v1->v2
- Fix compilation for book3s (separate macro etc)
arch/powerpc/include/asm/kvm_ppc.h | 44 +++++++++++++++++++++++++++++++-------
1 file changed, 36 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
index f3f7611..7646994 100644
--- a/arch/powerpc/include/asm/kvm_ppc.h
+++ b/arch/powerpc/include/asm/kvm_ppc.h
@@ -475,8 +475,20 @@ static inline bool kvmppc_shared_big_endian(struct kvm_vcpu *vcpu)
#endif
}
+#define SPRNG_WRAPPER_GET(reg, e500hv_spr) \
+static inline ulong kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
+{ \
+ return mfspr(e500hv_spr); \
+} \
+
+#define SPRNG_WRAPPER_SET(reg, e500hv_spr) \
+static inline void kvmppc_set_##reg(struct kvm_vcpu *vcpu, ulong val) \
+{ \
+ mtspr(e500hv_spr, val); \
+} \
+
#define SHARED_WRAPPER_GET(reg, size) \
-static inline u##size kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
+static inline u##size kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
{ \
if (kvmppc_shared_big_endian(vcpu)) \
return be##size##_to_cpu(vcpu->arch.shared->reg); \
@@ -497,14 +509,30 @@ static inline void kvmppc_set_##reg(struct kvm_vcpu *vcpu, u##size val) \
SHARED_WRAPPER_GET(reg, size) \
SHARED_WRAPPER_SET(reg, size) \
+#define SPRNG_WRAPPER(reg, e500hv_spr) \
+ SPRNG_WRAPPER_GET(reg, e500hv_spr) \
+ SPRNG_WRAPPER_SET(reg, e500hv_spr) \
+
+#ifdef CONFIG_KVM_BOOKE_HV
+
+#define SHARED_SPRNG_WRAPPER(reg, size, e500hv_spr) \
+ SPRNG_WRAPPER(reg, e500hv_spr) \
+
+#else
+
+#define SHARED_SPRNG_WRAPPER(reg, size, e500hv_spr) \
+ SHARED_WRAPPER(reg, size) \
+
+#endif
+
SHARED_WRAPPER(critical, 64)
-SHARED_WRAPPER(sprg0, 64)
-SHARED_WRAPPER(sprg1, 64)
-SHARED_WRAPPER(sprg2, 64)
-SHARED_WRAPPER(sprg3, 64)
-SHARED_WRAPPER(srr0, 64)
-SHARED_WRAPPER(srr1, 64)
-SHARED_WRAPPER(dar, 64)
+SHARED_SPRNG_WRAPPER(sprg0, 64, SPRN_GSPRG0)
+SHARED_SPRNG_WRAPPER(sprg1, 64, SPRN_GSPRG1)
+SHARED_SPRNG_WRAPPER(sprg2, 64, SPRN_GSPRG2)
+SHARED_SPRNG_WRAPPER(sprg3, 64, SPRN_GSPRG3)
+SHARED_SPRNG_WRAPPER(srr0, 64, SPRN_GSRR0)
+SHARED_SPRNG_WRAPPER(srr1, 64, SPRN_GSRR1)
+SHARED_SPRNG_WRAPPER(dar, 64, SPRN_GDEAR)
SHARED_WRAPPER_GET(msr, 64)
static inline void kvmppc_set_msr_fast(struct kvm_vcpu *vcpu, u64 val)
{
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 2/6 v2] kvm: ppc: booke: Use the shared struct helpers of SRR0 and SRR1
[not found] <1405596700-2699-1-git-send-email-Bharat.Bhushan@freescale.com>
@ 2014-07-17 11:43 ` Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
` (5 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:31 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
Use kvmppc_set_srr0/srr1() and kvmppc_get_srr0/srr1() helper functions
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
arch/powerpc/kvm/booke.c | 17 ++++++-----------
1 file changed, 6 insertions(+), 11 deletions(-)
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index c2471ed..096998a 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -276,13 +276,8 @@ void kvmppc_core_dequeue_debug(struct kvm_vcpu *vcpu)
static void set_guest_srr(struct kvm_vcpu *vcpu, unsigned long srr0, u32 srr1)
{
-#ifdef CONFIG_KVM_BOOKE_HV
- mtspr(SPRN_GSRR0, srr0);
- mtspr(SPRN_GSRR1, srr1);
-#else
- vcpu->arch.shared->srr0 = srr0;
- vcpu->arch.shared->srr1 = srr1;
-#endif
+ kvmppc_set_srr0(vcpu, srr0);
+ kvmppc_set_srr1(vcpu, srr1);
}
static void set_guest_csrr(struct kvm_vcpu *vcpu, unsigned long srr0, u32 srr1)
@@ -1296,8 +1291,8 @@ int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
regs->lr = vcpu->arch.lr;
regs->xer = kvmppc_get_xer(vcpu);
regs->msr = vcpu->arch.shared->msr;
- regs->srr0 = vcpu->arch.shared->srr0;
- regs->srr1 = vcpu->arch.shared->srr1;
+ regs->srr0 = kvmppc_get_srr0(vcpu);
+ regs->srr1 = kvmppc_get_srr1(vcpu);
regs->pid = vcpu->arch.pid;
regs->sprg0 = vcpu->arch.shared->sprg0;
regs->sprg1 = vcpu->arch.shared->sprg1;
@@ -1324,8 +1319,8 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
vcpu->arch.lr = regs->lr;
kvmppc_set_xer(vcpu, regs->xer);
kvmppc_set_msr(vcpu, regs->msr);
- vcpu->arch.shared->srr0 = regs->srr0;
- vcpu->arch.shared->srr1 = regs->srr1;
+ kvmppc_set_srr0(vcpu, regs->srr0);
+ kvmppc_set_srr1(vcpu, regs->srr1);
kvmppc_set_pid(vcpu, regs->pid);
vcpu->arch.shared->sprg0 = regs->sprg0;
vcpu->arch.shared->sprg1 = regs->sprg1;
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 3/6 v2] kvm: ppc: booke: Use the shared struct helpers of SPRN_DEAR
[not found] <1405596700-2699-1-git-send-email-Bharat.Bhushan@freescale.com>
@ 2014-07-17 11:43 ` Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
` (5 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:31 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
Uses kvmppc_set_dar() and kvmppc_get_dar() helper functions
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
arch/powerpc/kvm/booke.c | 24 +++---------------------
1 file changed, 3 insertions(+), 21 deletions(-)
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index 096998a..20296c8 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -302,24 +302,6 @@ static void set_guest_mcsrr(struct kvm_vcpu *vcpu, unsigned long srr0, u32 srr1)
vcpu->arch.mcsrr1 = srr1;
}
-static unsigned long get_guest_dear(struct kvm_vcpu *vcpu)
-{
-#ifdef CONFIG_KVM_BOOKE_HV
- return mfspr(SPRN_GDEAR);
-#else
- return vcpu->arch.shared->dar;
-#endif
-}
-
-static void set_guest_dear(struct kvm_vcpu *vcpu, unsigned long dear)
-{
-#ifdef CONFIG_KVM_BOOKE_HV
- mtspr(SPRN_GDEAR, dear);
-#else
- vcpu->arch.shared->dar = dear;
-#endif
-}
-
static unsigned long get_guest_esr(struct kvm_vcpu *vcpu)
{
#ifdef CONFIG_KVM_BOOKE_HV
@@ -461,7 +443,7 @@ static int kvmppc_booke_irqprio_deliver(struct kvm_vcpu *vcpu,
if (update_esr == true)
set_guest_esr(vcpu, vcpu->arch.queued_esr);
if (update_dear == true)
- set_guest_dear(vcpu, vcpu->arch.queued_dear);
+ kvmppc_set_dar(vcpu, vcpu->arch.queued_dear);
if (update_epr == true) {
if (vcpu->arch.epr_flags & KVMPPC_EPR_USER)
kvm_make_request(KVM_REQ_EPR_EXIT, vcpu);
@@ -1348,7 +1330,7 @@ static void get_sregs_base(struct kvm_vcpu *vcpu,
sregs->u.e.csrr1 = vcpu->arch.csrr1;
sregs->u.e.mcsr = vcpu->arch.mcsr;
sregs->u.e.esr = get_guest_esr(vcpu);
- sregs->u.e.dear = get_guest_dear(vcpu);
+ sregs->u.e.dear = kvmppc_get_dar(vcpu);
sregs->u.e.tsr = vcpu->arch.tsr;
sregs->u.e.tcr = vcpu->arch.tcr;
sregs->u.e.dec = kvmppc_get_dec(vcpu, tb);
@@ -1366,7 +1348,7 @@ static int set_sregs_base(struct kvm_vcpu *vcpu,
vcpu->arch.csrr1 = sregs->u.e.csrr1;
vcpu->arch.mcsr = sregs->u.e.mcsr;
set_guest_esr(vcpu, sregs->u.e.esr);
- set_guest_dear(vcpu, sregs->u.e.dear);
+ kvmppc_set_dar(vcpu, sregs->u.e.dear);
vcpu->arch.vrsave = sregs->u.e.vrsave;
kvmppc_set_tcr(vcpu, sregs->u.e.tcr);
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 4/6 v2] kvm: ppc: booke: Add shared struct helpers of SPRN_ESR
[not found] <1405596700-2699-1-git-send-email-Bharat.Bhushan@freescale.com>
@ 2014-07-17 11:43 ` Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
` (5 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:31 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
Add and use kvmppc_set_esr() and kvmppc_get_esr() helper functions
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
arch/powerpc/include/asm/kvm_ppc.h | 1 +
arch/powerpc/kvm/booke.c | 24 +++---------------------
2 files changed, 4 insertions(+), 21 deletions(-)
diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
index 7646994..58a5202 100644
--- a/arch/powerpc/include/asm/kvm_ppc.h
+++ b/arch/powerpc/include/asm/kvm_ppc.h
@@ -533,6 +533,7 @@ SHARED_SPRNG_WRAPPER(sprg3, 64, SPRN_GSPRG3)
SHARED_SPRNG_WRAPPER(srr0, 64, SPRN_GSRR0)
SHARED_SPRNG_WRAPPER(srr1, 64, SPRN_GSRR1)
SHARED_SPRNG_WRAPPER(dar, 64, SPRN_GDEAR)
+SHARED_SPRNG_WRAPPER(esr, 64, SPRN_GESR)
SHARED_WRAPPER_GET(msr, 64)
static inline void kvmppc_set_msr_fast(struct kvm_vcpu *vcpu, u64 val)
{
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index 20296c8..81484d9 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -302,24 +302,6 @@ static void set_guest_mcsrr(struct kvm_vcpu *vcpu, unsigned long srr0, u32 srr1)
vcpu->arch.mcsrr1 = srr1;
}
-static unsigned long get_guest_esr(struct kvm_vcpu *vcpu)
-{
-#ifdef CONFIG_KVM_BOOKE_HV
- return mfspr(SPRN_GESR);
-#else
- return vcpu->arch.shared->esr;
-#endif
-}
-
-static void set_guest_esr(struct kvm_vcpu *vcpu, u32 esr)
-{
-#ifdef CONFIG_KVM_BOOKE_HV
- mtspr(SPRN_GESR, esr);
-#else
- vcpu->arch.shared->esr = esr;
-#endif
-}
-
static unsigned long get_guest_epr(struct kvm_vcpu *vcpu)
{
#ifdef CONFIG_KVM_BOOKE_HV
@@ -441,7 +423,7 @@ static int kvmppc_booke_irqprio_deliver(struct kvm_vcpu *vcpu,
vcpu->arch.pc = vcpu->arch.ivpr | vcpu->arch.ivor[priority];
if (update_esr == true)
- set_guest_esr(vcpu, vcpu->arch.queued_esr);
+ kvmppc_set_esr(vcpu, vcpu->arch.queued_esr);
if (update_dear == true)
kvmppc_set_dar(vcpu, vcpu->arch.queued_dear);
if (update_epr == true) {
@@ -1329,7 +1311,7 @@ static void get_sregs_base(struct kvm_vcpu *vcpu,
sregs->u.e.csrr0 = vcpu->arch.csrr0;
sregs->u.e.csrr1 = vcpu->arch.csrr1;
sregs->u.e.mcsr = vcpu->arch.mcsr;
- sregs->u.e.esr = get_guest_esr(vcpu);
+ sregs->u.e.esr = kvmppc_get_esr(vcpu);
sregs->u.e.dear = kvmppc_get_dar(vcpu);
sregs->u.e.tsr = vcpu->arch.tsr;
sregs->u.e.tcr = vcpu->arch.tcr;
@@ -1347,7 +1329,7 @@ static int set_sregs_base(struct kvm_vcpu *vcpu,
vcpu->arch.csrr0 = sregs->u.e.csrr0;
vcpu->arch.csrr1 = sregs->u.e.csrr1;
vcpu->arch.mcsr = sregs->u.e.mcsr;
- set_guest_esr(vcpu, sregs->u.e.esr);
+ kvmppc_set_esr(vcpu, sregs->u.e.esr);
kvmppc_set_dar(vcpu, sregs->u.e.dear);
vcpu->arch.vrsave = sregs->u.e.vrsave;
kvmppc_set_tcr(vcpu, sregs->u.e.tcr);
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 5/6 v2] kvm: ppc: booke: Use the shared struct helpers for SPRN_SPRG0-7
[not found] <1405596700-2699-1-git-send-email-Bharat.Bhushan@freescale.com>
@ 2014-07-17 11:43 ` Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
` (5 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:31 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
Use kvmppc_set_sprg[0-7]() and kvmppc_get_sprg[0-7]() helper
functions
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
arch/powerpc/kvm/booke.c | 32 ++++++++++++++++----------------
arch/powerpc/kvm/booke_emulate.c | 8 ++++----
2 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index 81484d9..9606139 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -1258,14 +1258,14 @@ int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
regs->srr0 = kvmppc_get_srr0(vcpu);
regs->srr1 = kvmppc_get_srr1(vcpu);
regs->pid = vcpu->arch.pid;
- regs->sprg0 = vcpu->arch.shared->sprg0;
- regs->sprg1 = vcpu->arch.shared->sprg1;
- regs->sprg2 = vcpu->arch.shared->sprg2;
- regs->sprg3 = vcpu->arch.shared->sprg3;
- regs->sprg4 = vcpu->arch.shared->sprg4;
- regs->sprg5 = vcpu->arch.shared->sprg5;
- regs->sprg6 = vcpu->arch.shared->sprg6;
- regs->sprg7 = vcpu->arch.shared->sprg7;
+ regs->sprg0 = kvmppc_get_sprg0(vcpu);
+ regs->sprg1 = kvmppc_get_sprg1(vcpu);
+ regs->sprg2 = kvmppc_get_sprg2(vcpu);
+ regs->sprg3 = kvmppc_get_sprg3(vcpu);
+ regs->sprg4 = kvmppc_get_sprg4(vcpu);
+ regs->sprg5 = kvmppc_get_sprg5(vcpu);
+ regs->sprg6 = kvmppc_get_sprg6(vcpu);
+ regs->sprg7 = kvmppc_get_sprg7(vcpu);
for (i = 0; i < ARRAY_SIZE(regs->gpr); i++)
regs->gpr[i] = kvmppc_get_gpr(vcpu, i);
@@ -1286,14 +1286,14 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
kvmppc_set_srr0(vcpu, regs->srr0);
kvmppc_set_srr1(vcpu, regs->srr1);
kvmppc_set_pid(vcpu, regs->pid);
- vcpu->arch.shared->sprg0 = regs->sprg0;
- vcpu->arch.shared->sprg1 = regs->sprg1;
- vcpu->arch.shared->sprg2 = regs->sprg2;
- vcpu->arch.shared->sprg3 = regs->sprg3;
- vcpu->arch.shared->sprg4 = regs->sprg4;
- vcpu->arch.shared->sprg5 = regs->sprg5;
- vcpu->arch.shared->sprg6 = regs->sprg6;
- vcpu->arch.shared->sprg7 = regs->sprg7;
+ kvmppc_set_sprg0(vcpu, regs->sprg0);
+ kvmppc_set_sprg1(vcpu, regs->sprg1);
+ kvmppc_set_sprg2(vcpu, regs->sprg2);
+ kvmppc_set_sprg3(vcpu, regs->sprg3);
+ kvmppc_set_sprg4(vcpu, regs->sprg4);
+ kvmppc_set_sprg5(vcpu, regs->sprg5);
+ kvmppc_set_sprg6(vcpu, regs->sprg6);
+ kvmppc_set_sprg7(vcpu, regs->sprg7);
for (i = 0; i < ARRAY_SIZE(regs->gpr); i++)
kvmppc_set_gpr(vcpu, i, regs->gpr[i]);
diff --git a/arch/powerpc/kvm/booke_emulate.c b/arch/powerpc/kvm/booke_emulate.c
index 3d143fe..3330faf 100644
--- a/arch/powerpc/kvm/booke_emulate.c
+++ b/arch/powerpc/kvm/booke_emulate.c
@@ -310,16 +310,16 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val)
* guest (PR-mode only).
*/
case SPRN_SPRG4:
- vcpu->arch.shared->sprg4 = spr_val;
+ kvmppc_set_sprg4(vcpu, spr_val);
break;
case SPRN_SPRG5:
- vcpu->arch.shared->sprg5 = spr_val;
+ kvmppc_set_sprg5(vcpu, spr_val);
break;
case SPRN_SPRG6:
- vcpu->arch.shared->sprg6 = spr_val;
+ kvmppc_set_sprg6(vcpu, spr_val);
break;
case SPRN_SPRG7:
- vcpu->arch.shared->sprg7 = spr_val;
+ kvmppc_set_sprg7(vcpu, spr_val);
break;
case SPRN_IVPR:
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6/6 v2] kvm: ppc: Add SPRN_EPR get helper function
[not found] <1405596700-2699-1-git-send-email-Bharat.Bhushan@freescale.com>
@ 2014-07-17 11:43 ` Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
` (5 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:31 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
kvmppc_set_epr() is already defined in asm/kvm_ppc.h, So
rename and move get_epr helper function to same file.
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
v1->v2
- vcpu->arch.epr under CONFIG_BOOKE
arch/powerpc/include/asm/kvm_ppc.h | 10 ++++++++++
arch/powerpc/kvm/booke.c | 11 +----------
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
index 58a5202..14e2d87 100644
--- a/arch/powerpc/include/asm/kvm_ppc.h
+++ b/arch/powerpc/include/asm/kvm_ppc.h
@@ -395,6 +395,16 @@ static inline int kvmppc_xics_hcall(struct kvm_vcpu *vcpu, u32 cmd)
{ return 0; }
#endif
+static inline unsigned long kvmppc_get_epr(struct kvm_vcpu *vcpu)
+{
+#ifdef CONFIG_KVM_BOOKE_HV
+ return mfspr(SPRN_GEPR);
+#elif defined(CONFIG_BOOKE)
+ return vcpu->arch.epr;
+#endif
+ return 0;
+}
+
static inline void kvmppc_set_epr(struct kvm_vcpu *vcpu, u32 epr)
{
#ifdef CONFIG_KVM_BOOKE_HV
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index 9606139..5e9a380 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -302,15 +302,6 @@ static void set_guest_mcsrr(struct kvm_vcpu *vcpu, unsigned long srr0, u32 srr1)
vcpu->arch.mcsrr1 = srr1;
}
-static unsigned long get_guest_epr(struct kvm_vcpu *vcpu)
-{
-#ifdef CONFIG_KVM_BOOKE_HV
- return mfspr(SPRN_GEPR);
-#else
- return vcpu->arch.epr;
-#endif
-}
-
/* Deliver the interrupt of the corresponding priority, if possible. */
static int kvmppc_booke_irqprio_deliver(struct kvm_vcpu *vcpu,
unsigned int priority)
@@ -1483,7 +1474,7 @@ int kvm_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg)
val = get_reg_val(reg->id, vcpu->arch.dbg_reg.dac2);
break;
case KVM_REG_PPC_EPR: {
- u32 epr = get_guest_epr(vcpu);
+ u32 epr = kvmppc_get_epr(vcpu);
val = get_reg_val(reg->id, epr);
break;
}
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 1/6 v2] kvm: ppc: bookehv: Added wrapper macros for shadow registers
@ 2014-07-17 11:43 ` Bharat Bhushan
0 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:43 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
There are shadow registers like, GSPRG[0-3], GSRR0, GSRR1 etc on
BOOKE-HV and these shadow registers are guest accessible.
So these shadow registers needs to be updated on BOOKE-HV.
This patch adds new macro for get/set helper of shadow register .
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
v1->v2
- Fix compilation for book3s (separate macro etc)
arch/powerpc/include/asm/kvm_ppc.h | 44 +++++++++++++++++++++++++++++++-------
1 file changed, 36 insertions(+), 8 deletions(-)
diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
index f3f7611..7646994 100644
--- a/arch/powerpc/include/asm/kvm_ppc.h
+++ b/arch/powerpc/include/asm/kvm_ppc.h
@@ -475,8 +475,20 @@ static inline bool kvmppc_shared_big_endian(struct kvm_vcpu *vcpu)
#endif
}
+#define SPRNG_WRAPPER_GET(reg, e500hv_spr) \
+static inline ulong kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
+{ \
+ return mfspr(e500hv_spr); \
+} \
+
+#define SPRNG_WRAPPER_SET(reg, e500hv_spr) \
+static inline void kvmppc_set_##reg(struct kvm_vcpu *vcpu, ulong val) \
+{ \
+ mtspr(e500hv_spr, val); \
+} \
+
#define SHARED_WRAPPER_GET(reg, size) \
-static inline u##size kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
+static inline u##size kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
{ \
if (kvmppc_shared_big_endian(vcpu)) \
return be##size##_to_cpu(vcpu->arch.shared->reg); \
@@ -497,14 +509,30 @@ static inline void kvmppc_set_##reg(struct kvm_vcpu *vcpu, u##size val) \
SHARED_WRAPPER_GET(reg, size) \
SHARED_WRAPPER_SET(reg, size) \
+#define SPRNG_WRAPPER(reg, e500hv_spr) \
+ SPRNG_WRAPPER_GET(reg, e500hv_spr) \
+ SPRNG_WRAPPER_SET(reg, e500hv_spr) \
+
+#ifdef CONFIG_KVM_BOOKE_HV
+
+#define SHARED_SPRNG_WRAPPER(reg, size, e500hv_spr) \
+ SPRNG_WRAPPER(reg, e500hv_spr) \
+
+#else
+
+#define SHARED_SPRNG_WRAPPER(reg, size, e500hv_spr) \
+ SHARED_WRAPPER(reg, size) \
+
+#endif
+
SHARED_WRAPPER(critical, 64)
-SHARED_WRAPPER(sprg0, 64)
-SHARED_WRAPPER(sprg1, 64)
-SHARED_WRAPPER(sprg2, 64)
-SHARED_WRAPPER(sprg3, 64)
-SHARED_WRAPPER(srr0, 64)
-SHARED_WRAPPER(srr1, 64)
-SHARED_WRAPPER(dar, 64)
+SHARED_SPRNG_WRAPPER(sprg0, 64, SPRN_GSPRG0)
+SHARED_SPRNG_WRAPPER(sprg1, 64, SPRN_GSPRG1)
+SHARED_SPRNG_WRAPPER(sprg2, 64, SPRN_GSPRG2)
+SHARED_SPRNG_WRAPPER(sprg3, 64, SPRN_GSPRG3)
+SHARED_SPRNG_WRAPPER(srr0, 64, SPRN_GSRR0)
+SHARED_SPRNG_WRAPPER(srr1, 64, SPRN_GSRR1)
+SHARED_SPRNG_WRAPPER(dar, 64, SPRN_GDEAR)
SHARED_WRAPPER_GET(msr, 64)
static inline void kvmppc_set_msr_fast(struct kvm_vcpu *vcpu, u64 val)
{
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 2/6 v2] kvm: ppc: booke: Use the shared struct helpers of SRR0 and SRR1
@ 2014-07-17 11:43 ` Bharat Bhushan
0 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:43 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
Use kvmppc_set_srr0/srr1() and kvmppc_get_srr0/srr1() helper functions
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
arch/powerpc/kvm/booke.c | 17 ++++++-----------
1 file changed, 6 insertions(+), 11 deletions(-)
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index c2471ed..096998a 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -276,13 +276,8 @@ void kvmppc_core_dequeue_debug(struct kvm_vcpu *vcpu)
static void set_guest_srr(struct kvm_vcpu *vcpu, unsigned long srr0, u32 srr1)
{
-#ifdef CONFIG_KVM_BOOKE_HV
- mtspr(SPRN_GSRR0, srr0);
- mtspr(SPRN_GSRR1, srr1);
-#else
- vcpu->arch.shared->srr0 = srr0;
- vcpu->arch.shared->srr1 = srr1;
-#endif
+ kvmppc_set_srr0(vcpu, srr0);
+ kvmppc_set_srr1(vcpu, srr1);
}
static void set_guest_csrr(struct kvm_vcpu *vcpu, unsigned long srr0, u32 srr1)
@@ -1296,8 +1291,8 @@ int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
regs->lr = vcpu->arch.lr;
regs->xer = kvmppc_get_xer(vcpu);
regs->msr = vcpu->arch.shared->msr;
- regs->srr0 = vcpu->arch.shared->srr0;
- regs->srr1 = vcpu->arch.shared->srr1;
+ regs->srr0 = kvmppc_get_srr0(vcpu);
+ regs->srr1 = kvmppc_get_srr1(vcpu);
regs->pid = vcpu->arch.pid;
regs->sprg0 = vcpu->arch.shared->sprg0;
regs->sprg1 = vcpu->arch.shared->sprg1;
@@ -1324,8 +1319,8 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
vcpu->arch.lr = regs->lr;
kvmppc_set_xer(vcpu, regs->xer);
kvmppc_set_msr(vcpu, regs->msr);
- vcpu->arch.shared->srr0 = regs->srr0;
- vcpu->arch.shared->srr1 = regs->srr1;
+ kvmppc_set_srr0(vcpu, regs->srr0);
+ kvmppc_set_srr1(vcpu, regs->srr1);
kvmppc_set_pid(vcpu, regs->pid);
vcpu->arch.shared->sprg0 = regs->sprg0;
vcpu->arch.shared->sprg1 = regs->sprg1;
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 3/6 v2] kvm: ppc: booke: Use the shared struct helpers of SPRN_DEAR
@ 2014-07-17 11:43 ` Bharat Bhushan
0 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:43 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
Uses kvmppc_set_dar() and kvmppc_get_dar() helper functions
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
arch/powerpc/kvm/booke.c | 24 +++---------------------
1 file changed, 3 insertions(+), 21 deletions(-)
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index 096998a..20296c8 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -302,24 +302,6 @@ static void set_guest_mcsrr(struct kvm_vcpu *vcpu, unsigned long srr0, u32 srr1)
vcpu->arch.mcsrr1 = srr1;
}
-static unsigned long get_guest_dear(struct kvm_vcpu *vcpu)
-{
-#ifdef CONFIG_KVM_BOOKE_HV
- return mfspr(SPRN_GDEAR);
-#else
- return vcpu->arch.shared->dar;
-#endif
-}
-
-static void set_guest_dear(struct kvm_vcpu *vcpu, unsigned long dear)
-{
-#ifdef CONFIG_KVM_BOOKE_HV
- mtspr(SPRN_GDEAR, dear);
-#else
- vcpu->arch.shared->dar = dear;
-#endif
-}
-
static unsigned long get_guest_esr(struct kvm_vcpu *vcpu)
{
#ifdef CONFIG_KVM_BOOKE_HV
@@ -461,7 +443,7 @@ static int kvmppc_booke_irqprio_deliver(struct kvm_vcpu *vcpu,
if (update_esr = true)
set_guest_esr(vcpu, vcpu->arch.queued_esr);
if (update_dear = true)
- set_guest_dear(vcpu, vcpu->arch.queued_dear);
+ kvmppc_set_dar(vcpu, vcpu->arch.queued_dear);
if (update_epr = true) {
if (vcpu->arch.epr_flags & KVMPPC_EPR_USER)
kvm_make_request(KVM_REQ_EPR_EXIT, vcpu);
@@ -1348,7 +1330,7 @@ static void get_sregs_base(struct kvm_vcpu *vcpu,
sregs->u.e.csrr1 = vcpu->arch.csrr1;
sregs->u.e.mcsr = vcpu->arch.mcsr;
sregs->u.e.esr = get_guest_esr(vcpu);
- sregs->u.e.dear = get_guest_dear(vcpu);
+ sregs->u.e.dear = kvmppc_get_dar(vcpu);
sregs->u.e.tsr = vcpu->arch.tsr;
sregs->u.e.tcr = vcpu->arch.tcr;
sregs->u.e.dec = kvmppc_get_dec(vcpu, tb);
@@ -1366,7 +1348,7 @@ static int set_sregs_base(struct kvm_vcpu *vcpu,
vcpu->arch.csrr1 = sregs->u.e.csrr1;
vcpu->arch.mcsr = sregs->u.e.mcsr;
set_guest_esr(vcpu, sregs->u.e.esr);
- set_guest_dear(vcpu, sregs->u.e.dear);
+ kvmppc_set_dar(vcpu, sregs->u.e.dear);
vcpu->arch.vrsave = sregs->u.e.vrsave;
kvmppc_set_tcr(vcpu, sregs->u.e.tcr);
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 4/6 v2] kvm: ppc: booke: Add shared struct helpers of SPRN_ESR
@ 2014-07-17 11:43 ` Bharat Bhushan
0 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:43 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
Add and use kvmppc_set_esr() and kvmppc_get_esr() helper functions
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
arch/powerpc/include/asm/kvm_ppc.h | 1 +
arch/powerpc/kvm/booke.c | 24 +++---------------------
2 files changed, 4 insertions(+), 21 deletions(-)
diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
index 7646994..58a5202 100644
--- a/arch/powerpc/include/asm/kvm_ppc.h
+++ b/arch/powerpc/include/asm/kvm_ppc.h
@@ -533,6 +533,7 @@ SHARED_SPRNG_WRAPPER(sprg3, 64, SPRN_GSPRG3)
SHARED_SPRNG_WRAPPER(srr0, 64, SPRN_GSRR0)
SHARED_SPRNG_WRAPPER(srr1, 64, SPRN_GSRR1)
SHARED_SPRNG_WRAPPER(dar, 64, SPRN_GDEAR)
+SHARED_SPRNG_WRAPPER(esr, 64, SPRN_GESR)
SHARED_WRAPPER_GET(msr, 64)
static inline void kvmppc_set_msr_fast(struct kvm_vcpu *vcpu, u64 val)
{
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index 20296c8..81484d9 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -302,24 +302,6 @@ static void set_guest_mcsrr(struct kvm_vcpu *vcpu, unsigned long srr0, u32 srr1)
vcpu->arch.mcsrr1 = srr1;
}
-static unsigned long get_guest_esr(struct kvm_vcpu *vcpu)
-{
-#ifdef CONFIG_KVM_BOOKE_HV
- return mfspr(SPRN_GESR);
-#else
- return vcpu->arch.shared->esr;
-#endif
-}
-
-static void set_guest_esr(struct kvm_vcpu *vcpu, u32 esr)
-{
-#ifdef CONFIG_KVM_BOOKE_HV
- mtspr(SPRN_GESR, esr);
-#else
- vcpu->arch.shared->esr = esr;
-#endif
-}
-
static unsigned long get_guest_epr(struct kvm_vcpu *vcpu)
{
#ifdef CONFIG_KVM_BOOKE_HV
@@ -441,7 +423,7 @@ static int kvmppc_booke_irqprio_deliver(struct kvm_vcpu *vcpu,
vcpu->arch.pc = vcpu->arch.ivpr | vcpu->arch.ivor[priority];
if (update_esr = true)
- set_guest_esr(vcpu, vcpu->arch.queued_esr);
+ kvmppc_set_esr(vcpu, vcpu->arch.queued_esr);
if (update_dear = true)
kvmppc_set_dar(vcpu, vcpu->arch.queued_dear);
if (update_epr = true) {
@@ -1329,7 +1311,7 @@ static void get_sregs_base(struct kvm_vcpu *vcpu,
sregs->u.e.csrr0 = vcpu->arch.csrr0;
sregs->u.e.csrr1 = vcpu->arch.csrr1;
sregs->u.e.mcsr = vcpu->arch.mcsr;
- sregs->u.e.esr = get_guest_esr(vcpu);
+ sregs->u.e.esr = kvmppc_get_esr(vcpu);
sregs->u.e.dear = kvmppc_get_dar(vcpu);
sregs->u.e.tsr = vcpu->arch.tsr;
sregs->u.e.tcr = vcpu->arch.tcr;
@@ -1347,7 +1329,7 @@ static int set_sregs_base(struct kvm_vcpu *vcpu,
vcpu->arch.csrr0 = sregs->u.e.csrr0;
vcpu->arch.csrr1 = sregs->u.e.csrr1;
vcpu->arch.mcsr = sregs->u.e.mcsr;
- set_guest_esr(vcpu, sregs->u.e.esr);
+ kvmppc_set_esr(vcpu, sregs->u.e.esr);
kvmppc_set_dar(vcpu, sregs->u.e.dear);
vcpu->arch.vrsave = sregs->u.e.vrsave;
kvmppc_set_tcr(vcpu, sregs->u.e.tcr);
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 5/6 v2] kvm: ppc: booke: Use the shared struct helpers for SPRN_SPRG0-7
@ 2014-07-17 11:43 ` Bharat Bhushan
0 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:43 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
Use kvmppc_set_sprg[0-7]() and kvmppc_get_sprg[0-7]() helper
functions
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
arch/powerpc/kvm/booke.c | 32 ++++++++++++++++----------------
arch/powerpc/kvm/booke_emulate.c | 8 ++++----
2 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index 81484d9..9606139 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -1258,14 +1258,14 @@ int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
regs->srr0 = kvmppc_get_srr0(vcpu);
regs->srr1 = kvmppc_get_srr1(vcpu);
regs->pid = vcpu->arch.pid;
- regs->sprg0 = vcpu->arch.shared->sprg0;
- regs->sprg1 = vcpu->arch.shared->sprg1;
- regs->sprg2 = vcpu->arch.shared->sprg2;
- regs->sprg3 = vcpu->arch.shared->sprg3;
- regs->sprg4 = vcpu->arch.shared->sprg4;
- regs->sprg5 = vcpu->arch.shared->sprg5;
- regs->sprg6 = vcpu->arch.shared->sprg6;
- regs->sprg7 = vcpu->arch.shared->sprg7;
+ regs->sprg0 = kvmppc_get_sprg0(vcpu);
+ regs->sprg1 = kvmppc_get_sprg1(vcpu);
+ regs->sprg2 = kvmppc_get_sprg2(vcpu);
+ regs->sprg3 = kvmppc_get_sprg3(vcpu);
+ regs->sprg4 = kvmppc_get_sprg4(vcpu);
+ regs->sprg5 = kvmppc_get_sprg5(vcpu);
+ regs->sprg6 = kvmppc_get_sprg6(vcpu);
+ regs->sprg7 = kvmppc_get_sprg7(vcpu);
for (i = 0; i < ARRAY_SIZE(regs->gpr); i++)
regs->gpr[i] = kvmppc_get_gpr(vcpu, i);
@@ -1286,14 +1286,14 @@ int kvm_arch_vcpu_ioctl_set_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs)
kvmppc_set_srr0(vcpu, regs->srr0);
kvmppc_set_srr1(vcpu, regs->srr1);
kvmppc_set_pid(vcpu, regs->pid);
- vcpu->arch.shared->sprg0 = regs->sprg0;
- vcpu->arch.shared->sprg1 = regs->sprg1;
- vcpu->arch.shared->sprg2 = regs->sprg2;
- vcpu->arch.shared->sprg3 = regs->sprg3;
- vcpu->arch.shared->sprg4 = regs->sprg4;
- vcpu->arch.shared->sprg5 = regs->sprg5;
- vcpu->arch.shared->sprg6 = regs->sprg6;
- vcpu->arch.shared->sprg7 = regs->sprg7;
+ kvmppc_set_sprg0(vcpu, regs->sprg0);
+ kvmppc_set_sprg1(vcpu, regs->sprg1);
+ kvmppc_set_sprg2(vcpu, regs->sprg2);
+ kvmppc_set_sprg3(vcpu, regs->sprg3);
+ kvmppc_set_sprg4(vcpu, regs->sprg4);
+ kvmppc_set_sprg5(vcpu, regs->sprg5);
+ kvmppc_set_sprg6(vcpu, regs->sprg6);
+ kvmppc_set_sprg7(vcpu, regs->sprg7);
for (i = 0; i < ARRAY_SIZE(regs->gpr); i++)
kvmppc_set_gpr(vcpu, i, regs->gpr[i]);
diff --git a/arch/powerpc/kvm/booke_emulate.c b/arch/powerpc/kvm/booke_emulate.c
index 3d143fe..3330faf 100644
--- a/arch/powerpc/kvm/booke_emulate.c
+++ b/arch/powerpc/kvm/booke_emulate.c
@@ -310,16 +310,16 @@ int kvmppc_booke_emulate_mtspr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val)
* guest (PR-mode only).
*/
case SPRN_SPRG4:
- vcpu->arch.shared->sprg4 = spr_val;
+ kvmppc_set_sprg4(vcpu, spr_val);
break;
case SPRN_SPRG5:
- vcpu->arch.shared->sprg5 = spr_val;
+ kvmppc_set_sprg5(vcpu, spr_val);
break;
case SPRN_SPRG6:
- vcpu->arch.shared->sprg6 = spr_val;
+ kvmppc_set_sprg6(vcpu, spr_val);
break;
case SPRN_SPRG7:
- vcpu->arch.shared->sprg7 = spr_val;
+ kvmppc_set_sprg7(vcpu, spr_val);
break;
case SPRN_IVPR:
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6/6 v2] kvm: ppc: Add SPRN_EPR get helper function
@ 2014-07-17 11:43 ` Bharat Bhushan
0 siblings, 0 replies; 21+ messages in thread
From: Bharat Bhushan @ 2014-07-17 11:43 UTC (permalink / raw)
To: agraf, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder, Bharat Bhushan
kvmppc_set_epr() is already defined in asm/kvm_ppc.h, So
rename and move get_epr helper function to same file.
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
---
v1->v2
- vcpu->arch.epr under CONFIG_BOOKE
arch/powerpc/include/asm/kvm_ppc.h | 10 ++++++++++
arch/powerpc/kvm/booke.c | 11 +----------
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
index 58a5202..14e2d87 100644
--- a/arch/powerpc/include/asm/kvm_ppc.h
+++ b/arch/powerpc/include/asm/kvm_ppc.h
@@ -395,6 +395,16 @@ static inline int kvmppc_xics_hcall(struct kvm_vcpu *vcpu, u32 cmd)
{ return 0; }
#endif
+static inline unsigned long kvmppc_get_epr(struct kvm_vcpu *vcpu)
+{
+#ifdef CONFIG_KVM_BOOKE_HV
+ return mfspr(SPRN_GEPR);
+#elif defined(CONFIG_BOOKE)
+ return vcpu->arch.epr;
+#endif
+ return 0;
+}
+
static inline void kvmppc_set_epr(struct kvm_vcpu *vcpu, u32 epr)
{
#ifdef CONFIG_KVM_BOOKE_HV
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index 9606139..5e9a380 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -302,15 +302,6 @@ static void set_guest_mcsrr(struct kvm_vcpu *vcpu, unsigned long srr0, u32 srr1)
vcpu->arch.mcsrr1 = srr1;
}
-static unsigned long get_guest_epr(struct kvm_vcpu *vcpu)
-{
-#ifdef CONFIG_KVM_BOOKE_HV
- return mfspr(SPRN_GEPR);
-#else
- return vcpu->arch.epr;
-#endif
-}
-
/* Deliver the interrupt of the corresponding priority, if possible. */
static int kvmppc_booke_irqprio_deliver(struct kvm_vcpu *vcpu,
unsigned int priority)
@@ -1483,7 +1474,7 @@ int kvm_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu, struct kvm_one_reg *reg)
val = get_reg_val(reg->id, vcpu->arch.dbg_reg.dac2);
break;
case KVM_REG_PPC_EPR: {
- u32 epr = get_guest_epr(vcpu);
+ u32 epr = kvmppc_get_epr(vcpu);
val = get_reg_val(reg->id, epr);
break;
}
--
1.9.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 6/6 v2] kvm: ppc: Add SPRN_EPR get helper function
2014-07-17 11:43 ` Bharat Bhushan
@ 2014-07-17 13:44 ` Alexander Graf
-1 siblings, 0 replies; 21+ messages in thread
From: Alexander Graf @ 2014-07-17 13:44 UTC (permalink / raw)
To: Bharat Bhushan, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder
On 17.07.14 13:31, Bharat Bhushan wrote:
> kvmppc_set_epr() is already defined in asm/kvm_ppc.h, So
> rename and move get_epr helper function to same file.
>
> Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
> ---
> v1->v2
> - vcpu->arch.epr under CONFIG_BOOKE
>
> arch/powerpc/include/asm/kvm_ppc.h | 10 ++++++++++
> arch/powerpc/kvm/booke.c | 11 +----------
> 2 files changed, 11 insertions(+), 10 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
> index 58a5202..14e2d87 100644
> --- a/arch/powerpc/include/asm/kvm_ppc.h
> +++ b/arch/powerpc/include/asm/kvm_ppc.h
> @@ -395,6 +395,16 @@ static inline int kvmppc_xics_hcall(struct kvm_vcpu *vcpu, u32 cmd)
> { return 0; }
> #endif
>
> +static inline unsigned long kvmppc_get_epr(struct kvm_vcpu *vcpu)
> +{
> +#ifdef CONFIG_KVM_BOOKE_HV
> + return mfspr(SPRN_GEPR);
> +#elif defined(CONFIG_BOOKE)
> + return vcpu->arch.epr;
> +#endif
> + return 0;
Let me change that to
#else
return 0;
#endif
Alex
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 6/6 v2] kvm: ppc: Add SPRN_EPR get helper function
@ 2014-07-17 13:44 ` Alexander Graf
0 siblings, 0 replies; 21+ messages in thread
From: Alexander Graf @ 2014-07-17 13:44 UTC (permalink / raw)
To: Bharat Bhushan, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder
On 17.07.14 13:31, Bharat Bhushan wrote:
> kvmppc_set_epr() is already defined in asm/kvm_ppc.h, So
> rename and move get_epr helper function to same file.
>
> Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
> ---
> v1->v2
> - vcpu->arch.epr under CONFIG_BOOKE
>
> arch/powerpc/include/asm/kvm_ppc.h | 10 ++++++++++
> arch/powerpc/kvm/booke.c | 11 +----------
> 2 files changed, 11 insertions(+), 10 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
> index 58a5202..14e2d87 100644
> --- a/arch/powerpc/include/asm/kvm_ppc.h
> +++ b/arch/powerpc/include/asm/kvm_ppc.h
> @@ -395,6 +395,16 @@ static inline int kvmppc_xics_hcall(struct kvm_vcpu *vcpu, u32 cmd)
> { return 0; }
> #endif
>
> +static inline unsigned long kvmppc_get_epr(struct kvm_vcpu *vcpu)
> +{
> +#ifdef CONFIG_KVM_BOOKE_HV
> + return mfspr(SPRN_GEPR);
> +#elif defined(CONFIG_BOOKE)
> + return vcpu->arch.epr;
> +#endif
> + return 0;
Let me change that to
#else
return 0;
#endif
Alex
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 0/6 v2] Cleanup and fixes related to helper SPRN_XX functions
[not found] <1405596700-2699-1-git-send-email-Bharat.Bhushan@freescale.com>
@ 2014-07-17 13:46 ` Alexander Graf
2014-07-17 11:43 ` Bharat Bhushan
` (5 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Alexander Graf @ 2014-07-17 13:46 UTC (permalink / raw)
To: Bharat Bhushan, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder
On 17.07.14 13:31, Bharat Bhushan wrote:
> These are primarily the cleanup patches, where shared struct get/set
> helper function are enhanced to handle shadow registers and uses those
> helper functions.
> Eventually this also fix SRR0/1 synchronization from userspace
>
> v1->v2
> - Compilation fix for book3s
Thanks, applied all to kvm-ppc-queue.
(resend without triple-x again)
Alex
>
> Bharat Bhushan (6):
> kvm: ppc: bookehv: Added wrapper macros for shadow registers
> kvm: ppc: booke: Use the shared struct helpers of SRR0 and SRR1
> kvm: ppc: booke: Use the shared struct helpers of SPRN_DEAR
> kvm: ppc: booke: Add shared struct helpers of SPRN_ESR
> kvm: ppc: booke: Use the shared struct helpers for SPRN_SPRG0-7
> kvm: ppc: Add SPRN_EPR get helper function
>
> arch/powerpc/include/asm/kvm_ppc.h | 55 ++++++++++++++++---
> arch/powerpc/kvm/booke.c | 108 ++++++++++---------------------------
> arch/powerpc/kvm/booke_emulate.c | 8 +--
> 3 files changed, 80 insertions(+), 91 deletions(-)
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 0/6 v2] Cleanup and fixes related to helper SPRN_XX functions
@ 2014-07-17 13:46 ` Alexander Graf
0 siblings, 0 replies; 21+ messages in thread
From: Alexander Graf @ 2014-07-17 13:46 UTC (permalink / raw)
To: Bharat Bhushan, kvm-ppc; +Cc: kvm, scottwood, stuart.yoder
On 17.07.14 13:31, Bharat Bhushan wrote:
> These are primarily the cleanup patches, where shared struct get/set
> helper function are enhanced to handle shadow registers and uses those
> helper functions.
> Eventually this also fix SRR0/1 synchronization from userspace
>
> v1->v2
> - Compilation fix for book3s
Thanks, applied all to kvm-ppc-queue.
(resend without triple-x again)
Alex
>
> Bharat Bhushan (6):
> kvm: ppc: bookehv: Added wrapper macros for shadow registers
> kvm: ppc: booke: Use the shared struct helpers of SRR0 and SRR1
> kvm: ppc: booke: Use the shared struct helpers of SPRN_DEAR
> kvm: ppc: booke: Add shared struct helpers of SPRN_ESR
> kvm: ppc: booke: Use the shared struct helpers for SPRN_SPRG0-7
> kvm: ppc: Add SPRN_EPR get helper function
>
> arch/powerpc/include/asm/kvm_ppc.h | 55 ++++++++++++++++---
> arch/powerpc/kvm/booke.c | 108 ++++++++++---------------------------
> arch/powerpc/kvm/booke_emulate.c | 8 +--
> 3 files changed, 80 insertions(+), 91 deletions(-)
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* RE: [PATCH 6/6 v2] kvm: ppc: Add SPRN_EPR get helper function
2014-07-17 11:43 ` Bharat Bhushan
(?)
(?)
@ 2014-07-17 13:51 ` mihai.caraman
-1 siblings, 0 replies; 21+ messages in thread
From: mihai.caraman @ 2014-07-17 13:51 UTC (permalink / raw)
To: Bharat.Bhushan, agraf, kvm-ppc
Cc: kvm, Scott Wood, Stuart Yoder, Bharat.Bhushan
> -----Original Message-----
> From: kvm-ppc-owner@vger.kernel.org [mailto:kvm-ppc-
> owner@vger.kernel.org] On Behalf Of Bharat Bhushan
> Sent: Thursday, July 17, 2014 2:32 PM
> To: agraf@suse.de; kvm-ppc@vger.kernel.org
> Cc: kvm@vger.kernel.org; Wood Scott-B07421; Yoder Stuart-B08248; Bhushan
> Bharat-R65777
> Subject: [PATCH 6/6 v2] kvm: ppc: Add SPRN_EPR get helper function
>
> kvmppc_set_epr() is already defined in asm/kvm_ppc.h, So
> rename and move get_epr helper function to same file.
>
> Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
> ---
> v1->v2
> - vcpu->arch.epr under CONFIG_BOOKE
>
> arch/powerpc/include/asm/kvm_ppc.h | 10 ++++++++++
> arch/powerpc/kvm/booke.c | 11 +----------
> 2 files changed, 11 insertions(+), 10 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_ppc.h
> b/arch/powerpc/include/asm/kvm_ppc.h
> index 58a5202..14e2d87 100644
> --- a/arch/powerpc/include/asm/kvm_ppc.h
> +++ b/arch/powerpc/include/asm/kvm_ppc.h
> @@ -395,6 +395,16 @@ static inline int kvmppc_xics_hcall(struct kvm_vcpu
> *vcpu, u32 cmd)
> { return 0; }
> #endif
>
> +static inline unsigned long kvmppc_get_epr(struct kvm_vcpu *vcpu)
> +{
> +#ifdef CONFIG_KVM_BOOKE_HV
> + return mfspr(SPRN_GEPR);
> +#elif defined(CONFIG_BOOKE)
> + return vcpu->arch.epr;
> +#endif
> + return 0;
> +}
> +
> static inline void kvmppc_set_epr(struct kvm_vcpu *vcpu, u32 epr)
> {
> #ifdef CONFIG_KVM_BOOKE_HV
EPR is a BookE resource, why don't we move the helpers to kvm_booke.h?
-Mike
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 1/6 v2] kvm: ppc: bookehv: Added wrapper macros for shadow registers
2014-07-17 11:43 ` Bharat Bhushan
@ 2014-07-18 0:55 ` Scott Wood
-1 siblings, 0 replies; 21+ messages in thread
From: Scott Wood @ 2014-07-18 0:55 UTC (permalink / raw)
To: Bharat Bhushan; +Cc: agraf, kvm-ppc, kvm, stuart.yoder
On Thu, 2014-07-17 at 17:01 +0530, Bharat Bhushan wrote:
> There are shadow registers like, GSPRG[0-3], GSRR0, GSRR1 etc on
> BOOKE-HV and these shadow registers are guest accessible.
> So these shadow registers needs to be updated on BOOKE-HV.
> This patch adds new macro for get/set helper of shadow register .
>
> Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
> ---
> v1->v2
> - Fix compilation for book3s (separate macro etc)
>
> arch/powerpc/include/asm/kvm_ppc.h | 44 +++++++++++++++++++++++++++++++-------
> 1 file changed, 36 insertions(+), 8 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
> index f3f7611..7646994 100644
> --- a/arch/powerpc/include/asm/kvm_ppc.h
> +++ b/arch/powerpc/include/asm/kvm_ppc.h
> @@ -475,8 +475,20 @@ static inline bool kvmppc_shared_big_endian(struct kvm_vcpu *vcpu)
> #endif
> }
>
> +#define SPRNG_WRAPPER_GET(reg, e500hv_spr) \
> +static inline ulong kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
> +{ \
> + return mfspr(e500hv_spr); \
> +} \
> +
> +#define SPRNG_WRAPPER_SET(reg, e500hv_spr) \
> +static inline void kvmppc_set_##reg(struct kvm_vcpu *vcpu, ulong val) \
> +{ \
> + mtspr(e500hv_spr, val); \
> +} \
Why "e500hv" rather than "bookehv"?
-Scott
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 1/6 v2] kvm: ppc: bookehv: Added wrapper macros for shadow registers
@ 2014-07-18 0:55 ` Scott Wood
0 siblings, 0 replies; 21+ messages in thread
From: Scott Wood @ 2014-07-18 0:55 UTC (permalink / raw)
To: Bharat Bhushan; +Cc: agraf, kvm-ppc, kvm, stuart.yoder
On Thu, 2014-07-17 at 17:01 +0530, Bharat Bhushan wrote:
> There are shadow registers like, GSPRG[0-3], GSRR0, GSRR1 etc on
> BOOKE-HV and these shadow registers are guest accessible.
> So these shadow registers needs to be updated on BOOKE-HV.
> This patch adds new macro for get/set helper of shadow register .
>
> Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
> ---
> v1->v2
> - Fix compilation for book3s (separate macro etc)
>
> arch/powerpc/include/asm/kvm_ppc.h | 44 +++++++++++++++++++++++++++++++-------
> 1 file changed, 36 insertions(+), 8 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
> index f3f7611..7646994 100644
> --- a/arch/powerpc/include/asm/kvm_ppc.h
> +++ b/arch/powerpc/include/asm/kvm_ppc.h
> @@ -475,8 +475,20 @@ static inline bool kvmppc_shared_big_endian(struct kvm_vcpu *vcpu)
> #endif
> }
>
> +#define SPRNG_WRAPPER_GET(reg, e500hv_spr) \
> +static inline ulong kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
> +{ \
> + return mfspr(e500hv_spr); \
> +} \
> +
> +#define SPRNG_WRAPPER_SET(reg, e500hv_spr) \
> +static inline void kvmppc_set_##reg(struct kvm_vcpu *vcpu, ulong val) \
> +{ \
> + mtspr(e500hv_spr, val); \
> +} \
Why "e500hv" rather than "bookehv"?
-Scott
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 1/6 v2] kvm: ppc: bookehv: Added wrapper macros for shadow registers
2014-07-18 0:55 ` Scott Wood
@ 2014-07-24 15:04 ` Alexander Graf
-1 siblings, 0 replies; 21+ messages in thread
From: Alexander Graf @ 2014-07-24 15:04 UTC (permalink / raw)
To: Scott Wood, Bharat Bhushan; +Cc: kvm-ppc, kvm, stuart.yoder
On 18.07.14 02:55, Scott Wood wrote:
> On Thu, 2014-07-17 at 17:01 +0530, Bharat Bhushan wrote:
>> There are shadow registers like, GSPRG[0-3], GSRR0, GSRR1 etc on
>> BOOKE-HV and these shadow registers are guest accessible.
>> So these shadow registers needs to be updated on BOOKE-HV.
>> This patch adds new macro for get/set helper of shadow register .
>>
>> Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
>> ---
>> v1->v2
>> - Fix compilation for book3s (separate macro etc)
>>
>> arch/powerpc/include/asm/kvm_ppc.h | 44 +++++++++++++++++++++++++++++++-------
>> 1 file changed, 36 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
>> index f3f7611..7646994 100644
>> --- a/arch/powerpc/include/asm/kvm_ppc.h
>> +++ b/arch/powerpc/include/asm/kvm_ppc.h
>> @@ -475,8 +475,20 @@ static inline bool kvmppc_shared_big_endian(struct kvm_vcpu *vcpu)
>> #endif
>> }
>>
>> +#define SPRNG_WRAPPER_GET(reg, e500hv_spr) \
>> +static inline ulong kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
>> +{ \
>> + return mfspr(e500hv_spr); \
>> +} \
>> +
>> +#define SPRNG_WRAPPER_SET(reg, e500hv_spr) \
>> +static inline void kvmppc_set_##reg(struct kvm_vcpu *vcpu, ulong val) \
>> +{ \
>> + mtspr(e500hv_spr, val); \
>> +} \
> Why "e500hv" rather than "bookehv"?
No good reason. Bharat, could you please send a quick patch to rename them?
Alex
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 1/6 v2] kvm: ppc: bookehv: Added wrapper macros for shadow registers
@ 2014-07-24 15:04 ` Alexander Graf
0 siblings, 0 replies; 21+ messages in thread
From: Alexander Graf @ 2014-07-24 15:04 UTC (permalink / raw)
To: Scott Wood, Bharat Bhushan; +Cc: kvm-ppc, kvm, stuart.yoder
On 18.07.14 02:55, Scott Wood wrote:
> On Thu, 2014-07-17 at 17:01 +0530, Bharat Bhushan wrote:
>> There are shadow registers like, GSPRG[0-3], GSRR0, GSRR1 etc on
>> BOOKE-HV and these shadow registers are guest accessible.
>> So these shadow registers needs to be updated on BOOKE-HV.
>> This patch adds new macro for get/set helper of shadow register .
>>
>> Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
>> ---
>> v1->v2
>> - Fix compilation for book3s (separate macro etc)
>>
>> arch/powerpc/include/asm/kvm_ppc.h | 44 +++++++++++++++++++++++++++++++-------
>> 1 file changed, 36 insertions(+), 8 deletions(-)
>>
>> diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
>> index f3f7611..7646994 100644
>> --- a/arch/powerpc/include/asm/kvm_ppc.h
>> +++ b/arch/powerpc/include/asm/kvm_ppc.h
>> @@ -475,8 +475,20 @@ static inline bool kvmppc_shared_big_endian(struct kvm_vcpu *vcpu)
>> #endif
>> }
>>
>> +#define SPRNG_WRAPPER_GET(reg, e500hv_spr) \
>> +static inline ulong kvmppc_get_##reg(struct kvm_vcpu *vcpu) \
>> +{ \
>> + return mfspr(e500hv_spr); \
>> +} \
>> +
>> +#define SPRNG_WRAPPER_SET(reg, e500hv_spr) \
>> +static inline void kvmppc_set_##reg(struct kvm_vcpu *vcpu, ulong val) \
>> +{ \
>> + mtspr(e500hv_spr, val); \
>> +} \
> Why "e500hv" rather than "bookehv"?
No good reason. Bharat, could you please send a quick patch to rename them?
Alex
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2014-07-24 15:04 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <1405596700-2699-1-git-send-email-Bharat.Bhushan@freescale.com>
2014-07-17 11:31 ` [PATCH 1/6 v2] kvm: ppc: bookehv: Added wrapper macros for shadow registers Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
2014-07-18 0:55 ` Scott Wood
2014-07-18 0:55 ` Scott Wood
2014-07-24 15:04 ` Alexander Graf
2014-07-24 15:04 ` Alexander Graf
2014-07-17 11:31 ` [PATCH 2/6 v2] kvm: ppc: booke: Use the shared struct helpers of SRR0 and SRR1 Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
2014-07-17 11:31 ` [PATCH 3/6 v2] kvm: ppc: booke: Use the shared struct helpers of SPRN_DEAR Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
2014-07-17 11:31 ` [PATCH 4/6 v2] kvm: ppc: booke: Add shared struct helpers of SPRN_ESR Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
2014-07-17 11:31 ` [PATCH 5/6 v2] kvm: ppc: booke: Use the shared struct helpers for SPRN_SPRG0-7 Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
2014-07-17 11:31 ` [PATCH 6/6 v2] kvm: ppc: Add SPRN_EPR get helper function Bharat Bhushan
2014-07-17 11:43 ` Bharat Bhushan
2014-07-17 13:44 ` Alexander Graf
2014-07-17 13:44 ` Alexander Graf
2014-07-17 13:51 ` mihai.caraman
2014-07-17 13:46 ` [PATCH 0/6 v2] Cleanup and fixes related to helper SPRN_XX functions Alexander Graf
2014-07-17 13:46 ` Alexander Graf
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.