* [PATCH 0/2 v2] kvm/powerpc: hypercall related cleanup
@ 2013-10-07 16:53 Bharat Bhushan
2013-10-07 16:53 ` [PATCH 1/2 v2] kvm/powerpc: rename kvm_hypercall() to epapr_hypercall() Bharat Bhushan
2013-10-07 16:53 ` [PATCH 2/2 v2] kvm/powerpc: move kvm_hypercall0() and friends to epapr_hypercall0() Bharat Bhushan
0 siblings, 2 replies; 4+ messages in thread
From: Bharat Bhushan @ 2013-10-07 16:53 UTC (permalink / raw)
To: agraf, scottwood, stuart.yoder, kvm-ppc, kvm; +Cc: Bharat Bhushan
From: Bharat Bhushan <bharat.bhushan@freescale.com>
This patchset does some code cleanup around kvm-hypercall.
v1->v2:
- Review comment of previous patch. More information available in individual patch.
Bharat Bhushan (2):
kvm/powerpc: rename kvm_hypercall() to epapr_hypercall()
kvm/powerpc: move kvm_hypercall0() and friends to epapr_hypercall0()
arch/powerpc/include/asm/epapr_hcalls.h | 111 +++++++++++++++++++++++++++++++
arch/powerpc/include/asm/kvm_para.h | 80 +----------------------
arch/powerpc/kernel/kvm.c | 41 +-----------
3 files changed, 114 insertions(+), 118 deletions(-)
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2 v2] kvm/powerpc: rename kvm_hypercall() to epapr_hypercall()
2013-10-07 16:53 [PATCH 0/2 v2] kvm/powerpc: hypercall related cleanup Bharat Bhushan
@ 2013-10-07 16:53 ` Bharat Bhushan
2013-10-07 22:05 ` Scott Wood
2013-10-07 16:53 ` [PATCH 2/2 v2] kvm/powerpc: move kvm_hypercall0() and friends to epapr_hypercall0() Bharat Bhushan
1 sibling, 1 reply; 4+ messages in thread
From: Bharat Bhushan @ 2013-10-07 16:53 UTC (permalink / raw)
To: agraf, scottwood, stuart.yoder, kvm-ppc, kvm
Cc: Bharat Bhushan, Bharat Bhushan
kvm_hypercall() have nothing KVM specific, so renamed to epapr_hypercall().
Also this in moved to arch/powerpc/include/asm/epapr_hcalls.h
Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
---
v1->v2
- epapr_hypercall() is always defined and returns EV_UNIMPLEMENTED
when CONFIG_KVM_GUEST or CONFIG_EPAPR_PARAVIRT not defined.
arch/powerpc/include/asm/epapr_hcalls.h | 46 +++++++++++++++++++++++++++++++
arch/powerpc/include/asm/kvm_para.h | 23 ++++-----------
arch/powerpc/kernel/kvm.c | 41 +--------------------------
3 files changed, 54 insertions(+), 56 deletions(-)
diff --git a/arch/powerpc/include/asm/epapr_hcalls.h b/arch/powerpc/include/asm/epapr_hcalls.h
index d3d6342..6b8e007 100644
--- a/arch/powerpc/include/asm/epapr_hcalls.h
+++ b/arch/powerpc/include/asm/epapr_hcalls.h
@@ -454,5 +454,51 @@ static inline unsigned int ev_idle(void)
return r3;
}
+
+#if defined(CONFIG_KVM_GUEST) || defined(CONFIG_EPAPR_PARAVIRT)
+static inline unsigned long epapr_hypercall(unsigned long *in,
+ unsigned long *out,
+ unsigned long nr)
+{
+ unsigned long register r0 asm("r0");
+ unsigned long register r3 asm("r3") = in[0];
+ unsigned long register r4 asm("r4") = in[1];
+ unsigned long register r5 asm("r5") = in[2];
+ unsigned long register r6 asm("r6") = in[3];
+ unsigned long register r7 asm("r7") = in[4];
+ unsigned long register r8 asm("r8") = in[5];
+ unsigned long register r9 asm("r9") = in[6];
+ unsigned long register r10 asm("r10") = in[7];
+ unsigned long register r11 asm("r11") = nr;
+ unsigned long register r12 asm("r12");
+
+ asm volatile("bl epapr_hypercall_start"
+ : "=r"(r0), "=r"(r3), "=r"(r4), "=r"(r5), "=r"(r6),
+ "=r"(r7), "=r"(r8), "=r"(r9), "=r"(r10), "=r"(r11),
+ "=r"(r12)
+ : "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7), "r"(r8),
+ "r"(r9), "r"(r10), "r"(r11)
+ : "memory", "cc", "xer", "ctr", "lr");
+
+ out[0] = r4;
+ out[1] = r5;
+ out[2] = r6;
+ out[3] = r7;
+ out[4] = r8;
+ out[5] = r9;
+ out[6] = r10;
+ out[7] = r11;
+
+ return r3;
+}
+#else
+static unsigned long epapr_hypercall(unsigned long *in,
+ unsigned long *out,
+ unsigned long nr)
+{
+ return EV_UNIMPLEMENTED;
+}
+#endif
+
#endif /* !__ASSEMBLY__ */
#endif /* _EPAPR_HCALLS_H */
diff --git a/arch/powerpc/include/asm/kvm_para.h b/arch/powerpc/include/asm/kvm_para.h
index 2b11965..c18660e 100644
--- a/arch/powerpc/include/asm/kvm_para.h
+++ b/arch/powerpc/include/asm/kvm_para.h
@@ -39,10 +39,6 @@ static inline int kvm_para_available(void)
return 1;
}
-extern unsigned long kvm_hypercall(unsigned long *in,
- unsigned long *out,
- unsigned long nr);
-
#else
static inline int kvm_para_available(void)
@@ -50,13 +46,6 @@ static inline int kvm_para_available(void)
return 0;
}
-static unsigned long kvm_hypercall(unsigned long *in,
- unsigned long *out,
- unsigned long nr)
-{
- return EV_UNIMPLEMENTED;
-}
-
#endif
static inline long kvm_hypercall0_1(unsigned int nr, unsigned long *r2)
@@ -65,7 +54,7 @@ static inline long kvm_hypercall0_1(unsigned int nr, unsigned long *r2)
unsigned long out[8];
unsigned long r;
- r = kvm_hypercall(in, out, KVM_HCALL_TOKEN(nr));
+ r = epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
*r2 = out[0];
return r;
@@ -76,7 +65,7 @@ static inline long kvm_hypercall0(unsigned int nr)
unsigned long in[8];
unsigned long out[8];
- return kvm_hypercall(in, out, KVM_HCALL_TOKEN(nr));
+ return epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
}
static inline long kvm_hypercall1(unsigned int nr, unsigned long p1)
@@ -85,7 +74,7 @@ static inline long kvm_hypercall1(unsigned int nr, unsigned long p1)
unsigned long out[8];
in[0] = p1;
- return kvm_hypercall(in, out, KVM_HCALL_TOKEN(nr));
+ return epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
}
static inline long kvm_hypercall2(unsigned int nr, unsigned long p1,
@@ -96,7 +85,7 @@ static inline long kvm_hypercall2(unsigned int nr, unsigned long p1,
in[0] = p1;
in[1] = p2;
- return kvm_hypercall(in, out, KVM_HCALL_TOKEN(nr));
+ return epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
}
static inline long kvm_hypercall3(unsigned int nr, unsigned long p1,
@@ -108,7 +97,7 @@ static inline long kvm_hypercall3(unsigned int nr, unsigned long p1,
in[0] = p1;
in[1] = p2;
in[2] = p3;
- return kvm_hypercall(in, out, KVM_HCALL_TOKEN(nr));
+ return epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
}
static inline long kvm_hypercall4(unsigned int nr, unsigned long p1,
@@ -122,7 +111,7 @@ static inline long kvm_hypercall4(unsigned int nr, unsigned long p1,
in[1] = p2;
in[2] = p3;
in[3] = p4;
- return kvm_hypercall(in, out, KVM_HCALL_TOKEN(nr));
+ return epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
}
diff --git a/arch/powerpc/kernel/kvm.c b/arch/powerpc/kernel/kvm.c
index db28032..6a01752 100644
--- a/arch/powerpc/kernel/kvm.c
+++ b/arch/powerpc/kernel/kvm.c
@@ -413,13 +413,13 @@ static void kvm_map_magic_page(void *data)
{
u32 *features = data;
- ulong in[8];
+ ulong in[8] = {0};
ulong out[8];
in[0] = KVM_MAGIC_PAGE;
in[1] = KVM_MAGIC_PAGE;
- kvm_hypercall(in, out, KVM_HCALL_TOKEN(KVM_HC_PPC_MAP_MAGIC_PAGE));
+ epapr_hypercall(in, out, KVM_HCALL_TOKEN(KVM_HC_PPC_MAP_MAGIC_PAGE));
*features = out[0];
}
@@ -711,43 +711,6 @@ static void kvm_use_magic_page(void)
kvm_patching_worked ? "worked" : "failed");
}
-unsigned long kvm_hypercall(unsigned long *in,
- unsigned long *out,
- unsigned long nr)
-{
- unsigned long register r0 asm("r0");
- unsigned long register r3 asm("r3") = in[0];
- unsigned long register r4 asm("r4") = in[1];
- unsigned long register r5 asm("r5") = in[2];
- unsigned long register r6 asm("r6") = in[3];
- unsigned long register r7 asm("r7") = in[4];
- unsigned long register r8 asm("r8") = in[5];
- unsigned long register r9 asm("r9") = in[6];
- unsigned long register r10 asm("r10") = in[7];
- unsigned long register r11 asm("r11") = nr;
- unsigned long register r12 asm("r12");
-
- asm volatile("bl epapr_hypercall_start"
- : "=r"(r0), "=r"(r3), "=r"(r4), "=r"(r5), "=r"(r6),
- "=r"(r7), "=r"(r8), "=r"(r9), "=r"(r10), "=r"(r11),
- "=r"(r12)
- : "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7), "r"(r8),
- "r"(r9), "r"(r10), "r"(r11)
- : "memory", "cc", "xer", "ctr", "lr");
-
- out[0] = r4;
- out[1] = r5;
- out[2] = r6;
- out[3] = r7;
- out[4] = r8;
- out[5] = r9;
- out[6] = r10;
- out[7] = r11;
-
- return r3;
-}
-EXPORT_SYMBOL_GPL(kvm_hypercall);
-
static __init void kvm_free_tmp(void)
{
free_reserved_area(&kvm_tmp[kvm_tmp_index],
--
1.7.0.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2 v2] kvm/powerpc: move kvm_hypercall0() and friends to epapr_hypercall0()
2013-10-07 16:53 [PATCH 0/2 v2] kvm/powerpc: hypercall related cleanup Bharat Bhushan
2013-10-07 16:53 ` [PATCH 1/2 v2] kvm/powerpc: rename kvm_hypercall() to epapr_hypercall() Bharat Bhushan
@ 2013-10-07 16:53 ` Bharat Bhushan
1 sibling, 0 replies; 4+ messages in thread
From: Bharat Bhushan @ 2013-10-07 16:53 UTC (permalink / raw)
To: agraf, scottwood, stuart.yoder, kvm-ppc, kvm
Cc: Bharat Bhushan, Bharat Bhushan
kvm_hypercall0() and friends have nothing KVM specific so moved to
epapr_hypercall0() and friends. Also they are moved from
arch/powerpc/include/asm/kvm_para.h to arch/powerpc/include/asm/epapr_hcalls.h
Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
---
v1->v2
- No change
arch/powerpc/include/asm/epapr_hcalls.h | 65 +++++++++++++++++++++++++++++
arch/powerpc/include/asm/kvm_para.h | 69 +------------------------------
2 files changed, 66 insertions(+), 68 deletions(-)
diff --git a/arch/powerpc/include/asm/epapr_hcalls.h b/arch/powerpc/include/asm/epapr_hcalls.h
index 6b8e007..223297e 100644
--- a/arch/powerpc/include/asm/epapr_hcalls.h
+++ b/arch/powerpc/include/asm/epapr_hcalls.h
@@ -500,5 +500,70 @@ static unsigned long epapr_hypercall(unsigned long *in,
}
#endif
+static inline long epapr_hypercall0_1(unsigned int nr, unsigned long *r2)
+{
+ unsigned long in[8];
+ unsigned long out[8];
+ unsigned long r;
+
+ r = epapr_hypercall(in, out, nr);
+ *r2 = out[0];
+
+ return r;
+}
+
+static inline long epapr_hypercall0(unsigned int nr)
+{
+ unsigned long in[8];
+ unsigned long out[8];
+
+ return epapr_hypercall(in, out, nr);
+}
+
+static inline long epapr_hypercall1(unsigned int nr, unsigned long p1)
+{
+ unsigned long in[8];
+ unsigned long out[8];
+
+ in[0] = p1;
+ return epapr_hypercall(in, out, nr);
+}
+
+static inline long epapr_hypercall2(unsigned int nr, unsigned long p1,
+ unsigned long p2)
+{
+ unsigned long in[8];
+ unsigned long out[8];
+
+ in[0] = p1;
+ in[1] = p2;
+ return epapr_hypercall(in, out, nr);
+}
+
+static inline long epapr_hypercall3(unsigned int nr, unsigned long p1,
+ unsigned long p2, unsigned long p3)
+{
+ unsigned long in[8];
+ unsigned long out[8];
+
+ in[0] = p1;
+ in[1] = p2;
+ in[2] = p3;
+ return epapr_hypercall(in, out, nr);
+}
+
+static inline long epapr_hypercall4(unsigned int nr, unsigned long p1,
+ unsigned long p2, unsigned long p3,
+ unsigned long p4)
+{
+ unsigned long in[8];
+ unsigned long out[8];
+
+ in[0] = p1;
+ in[1] = p2;
+ in[2] = p3;
+ in[3] = p4;
+ return epapr_hypercall(in, out, nr);
+}
#endif /* !__ASSEMBLY__ */
#endif /* _EPAPR_HCALLS_H */
diff --git a/arch/powerpc/include/asm/kvm_para.h b/arch/powerpc/include/asm/kvm_para.h
index c18660e..336a91a 100644
--- a/arch/powerpc/include/asm/kvm_para.h
+++ b/arch/powerpc/include/asm/kvm_para.h
@@ -48,73 +48,6 @@ static inline int kvm_para_available(void)
#endif
-static inline long kvm_hypercall0_1(unsigned int nr, unsigned long *r2)
-{
- unsigned long in[8];
- unsigned long out[8];
- unsigned long r;
-
- r = epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
- *r2 = out[0];
-
- return r;
-}
-
-static inline long kvm_hypercall0(unsigned int nr)
-{
- unsigned long in[8];
- unsigned long out[8];
-
- return epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
-}
-
-static inline long kvm_hypercall1(unsigned int nr, unsigned long p1)
-{
- unsigned long in[8];
- unsigned long out[8];
-
- in[0] = p1;
- return epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
-}
-
-static inline long kvm_hypercall2(unsigned int nr, unsigned long p1,
- unsigned long p2)
-{
- unsigned long in[8];
- unsigned long out[8];
-
- in[0] = p1;
- in[1] = p2;
- return epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
-}
-
-static inline long kvm_hypercall3(unsigned int nr, unsigned long p1,
- unsigned long p2, unsigned long p3)
-{
- unsigned long in[8];
- unsigned long out[8];
-
- in[0] = p1;
- in[1] = p2;
- in[2] = p3;
- return epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
-}
-
-static inline long kvm_hypercall4(unsigned int nr, unsigned long p1,
- unsigned long p2, unsigned long p3,
- unsigned long p4)
-{
- unsigned long in[8];
- unsigned long out[8];
-
- in[0] = p1;
- in[1] = p2;
- in[2] = p3;
- in[3] = p4;
- return epapr_hypercall(in, out, KVM_HCALL_TOKEN(nr));
-}
-
-
static inline unsigned int kvm_arch_para_features(void)
{
unsigned long r;
@@ -122,7 +55,7 @@ static inline unsigned int kvm_arch_para_features(void)
if (!kvm_para_available())
return 0;
- if(kvm_hypercall0_1(KVM_HC_FEATURES, &r))
+ if(epapr_hypercall0_1(KVM_HCALL_TOKEN(KVM_HC_FEATURES), &r))
return 0;
return r;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2 v2] kvm/powerpc: rename kvm_hypercall() to epapr_hypercall()
2013-10-07 16:53 ` [PATCH 1/2 v2] kvm/powerpc: rename kvm_hypercall() to epapr_hypercall() Bharat Bhushan
@ 2013-10-07 22:05 ` Scott Wood
0 siblings, 0 replies; 4+ messages in thread
From: Scott Wood @ 2013-10-07 22:05 UTC (permalink / raw)
To: Bharat Bhushan; +Cc: agraf, stuart.yoder, kvm-ppc, kvm, Bharat Bhushan
On Mon, 2013-10-07 at 22:23 +0530, Bharat Bhushan wrote:
> kvm_hypercall() have nothing KVM specific, so renamed to epapr_hypercall().
> Also this in moved to arch/powerpc/include/asm/epapr_hcalls.h
>
> Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
> ---
> v1->v2
> - epapr_hypercall() is always defined and returns EV_UNIMPLEMENTED
> when CONFIG_KVM_GUEST or CONFIG_EPAPR_PARAVIRT not defined.
>
> arch/powerpc/include/asm/epapr_hcalls.h | 46 +++++++++++++++++++++++++++++++
> arch/powerpc/include/asm/kvm_para.h | 23 ++++-----------
> arch/powerpc/kernel/kvm.c | 41 +--------------------------
> 3 files changed, 54 insertions(+), 56 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/epapr_hcalls.h b/arch/powerpc/include/asm/epapr_hcalls.h
> index d3d6342..6b8e007 100644
> --- a/arch/powerpc/include/asm/epapr_hcalls.h
> +++ b/arch/powerpc/include/asm/epapr_hcalls.h
> @@ -454,5 +454,51 @@ static inline unsigned int ev_idle(void)
>
> return r3;
> }
> +
> +#if defined(CONFIG_KVM_GUEST) || defined(CONFIG_EPAPR_PARAVIRT)
CONFIG_KVM_GUEST implies CONFIG_EPAPR_PARAVIRT, so you only need to
check for the latter.
-Scott
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-10-07 22:05 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-07 16:53 [PATCH 0/2 v2] kvm/powerpc: hypercall related cleanup Bharat Bhushan
2013-10-07 16:53 ` [PATCH 1/2 v2] kvm/powerpc: rename kvm_hypercall() to epapr_hypercall() Bharat Bhushan
2013-10-07 22:05 ` Scott Wood
2013-10-07 16:53 ` [PATCH 2/2 v2] kvm/powerpc: move kvm_hypercall0() and friends to epapr_hypercall0() Bharat Bhushan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).