linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] ARM: KVM: pre-KVM/arm64 patches
@ 2013-04-08 15:47 Marc Zyngier
  2013-04-08 15:47 ` [PATCH 1/2] ARM: KVM: add architecture specific hook for capabilities Marc Zyngier
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Marc Zyngier @ 2013-04-08 15:47 UTC (permalink / raw)
  To: linux-arm-kernel

This series contains two small changes to KVM/ARM, in preparation for
the arm64 patches. None of these changes actually affect the 32bit
implementation.

This has been tested on both arm (VE TC2) and arm64 (Foundation Model).

Marc Zyngier (2):
  ARM: KVM: add architecture specific hook for capabilities
  ARM: KVM: promote vfp_host pointer to generic host cpu context

 arch/arm/include/asm/kvm_host.h | 13 ++++++++++---
 arch/arm/kernel/asm-offsets.c   |  2 +-
 arch/arm/kvm/arm.c              | 30 +++++++++++++++---------------
 3 files changed, 26 insertions(+), 19 deletions(-)

-- 
1.8.1.4

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/2] ARM: KVM: add architecture specific hook for capabilities
  2013-04-08 15:47 [PATCH 0/2] ARM: KVM: pre-KVM/arm64 patches Marc Zyngier
@ 2013-04-08 15:47 ` Marc Zyngier
  2013-04-08 15:53   ` Peter Maydell
  2013-04-08 15:47 ` [PATCH 2/2] ARM: KVM: promote vfp_host pointer to generic host cpu context Marc Zyngier
  2013-04-09 18:31 ` [PATCH 0/2] ARM: KVM: pre-KVM/arm64 patches Christoffer Dall
  2 siblings, 1 reply; 6+ messages in thread
From: Marc Zyngier @ 2013-04-08 15:47 UTC (permalink / raw)
  To: linux-arm-kernel

Most of the capabilities are common to both arm and arm64, but
we still need to handle the exceptions.

Introduce kvm_arch_dev_ioctl_check_extention, which both architectures
implement (in the 32bit case, it just returns 0).

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 arch/arm/include/asm/kvm_host.h | 5 +++++
 arch/arm/kvm/arm.c              | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h
index 78813b8..a81480c 100644
--- a/arch/arm/include/asm/kvm_host.h
+++ b/arch/arm/include/asm/kvm_host.h
@@ -207,6 +207,11 @@ static inline void __cpu_init_hyp_mode(unsigned long long pgd_ptr,
 	kvm_call_hyp((void *)pgd_low, pgd_high, hyp_stack_ptr, vector_ptr);
 }
 
+static inline int kvm_arch_dev_ioctl_check_extention(long ext)
+{
+	return 0;
+}
+
 int kvm_perf_init(void);
 int kvm_perf_teardown(void);
 
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
index 61f7394..ed7b1e3 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
@@ -206,7 +206,7 @@ int kvm_dev_ioctl_check_extension(long ext)
 		r = KVM_MAX_VCPUS;
 		break;
 	default:
-		r = 0;
+		r = kvm_arch_dev_ioctl_check_extention(ext);
 		break;
 	}
 	return r;
-- 
1.8.1.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/2] ARM: KVM: promote vfp_host pointer to generic host cpu context
  2013-04-08 15:47 [PATCH 0/2] ARM: KVM: pre-KVM/arm64 patches Marc Zyngier
  2013-04-08 15:47 ` [PATCH 1/2] ARM: KVM: add architecture specific hook for capabilities Marc Zyngier
@ 2013-04-08 15:47 ` Marc Zyngier
  2013-04-09 18:31 ` [PATCH 0/2] ARM: KVM: pre-KVM/arm64 patches Christoffer Dall
  2 siblings, 0 replies; 6+ messages in thread
From: Marc Zyngier @ 2013-04-08 15:47 UTC (permalink / raw)
  To: linux-arm-kernel

We use the vfp_host pointer to store the host VFP context, should
the guest start using VFP itself.

Actually, we can use this pointer in a more generic way to store
CPU speficic data, and arm64 is using it to dump the whole host
state before switching to the guest.

Simply rename the vfp_host field to host_cpu_context, and the
corresponding type to kvm_cpu_context_t. No change in functionnality.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 arch/arm/include/asm/kvm_host.h |  8 +++++---
 arch/arm/kernel/asm-offsets.c   |  2 +-
 arch/arm/kvm/arm.c              | 28 ++++++++++++++--------------
 3 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h
index a81480c..a856cc2 100644
--- a/arch/arm/include/asm/kvm_host.h
+++ b/arch/arm/include/asm/kvm_host.h
@@ -87,7 +87,7 @@ struct kvm_vcpu_fault_info {
 	u32 hyp_pc;		/* PC when exception was taken from Hyp mode */
 };
 
-typedef struct vfp_hard_struct kvm_kernel_vfp_t;
+typedef struct vfp_hard_struct kvm_cpu_context_t;
 
 struct kvm_vcpu_arch {
 	struct kvm_regs regs;
@@ -105,8 +105,10 @@ struct kvm_vcpu_arch {
 	struct kvm_vcpu_fault_info fault;
 
 	/* Floating point registers (VFP and Advanced SIMD/NEON) */
-	kvm_kernel_vfp_t vfp_guest;
-	kvm_kernel_vfp_t *vfp_host;
+	struct vfp_hard_struct vfp_guest;
+
+	/* Host FP context */
+	kvm_cpu_context_t *host_cpu_context;
 
 	/* VGIC state */
 	struct vgic_cpu vgic_cpu;
diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c
index ee1ac39..92562a2 100644
--- a/arch/arm/kernel/asm-offsets.c
+++ b/arch/arm/kernel/asm-offsets.c
@@ -154,7 +154,7 @@ int main(void)
   DEFINE(VCPU_MIDR,		offsetof(struct kvm_vcpu, arch.midr));
   DEFINE(VCPU_CP15,		offsetof(struct kvm_vcpu, arch.cp15));
   DEFINE(VCPU_VFP_GUEST,	offsetof(struct kvm_vcpu, arch.vfp_guest));
-  DEFINE(VCPU_VFP_HOST,		offsetof(struct kvm_vcpu, arch.vfp_host));
+  DEFINE(VCPU_VFP_HOST,		offsetof(struct kvm_vcpu, arch.host_cpu_context));
   DEFINE(VCPU_REGS,		offsetof(struct kvm_vcpu, arch.regs));
   DEFINE(VCPU_USR_REGS,		offsetof(struct kvm_vcpu, arch.regs.usr_regs));
   DEFINE(VCPU_SVC_REGS,		offsetof(struct kvm_vcpu, arch.regs.svc_regs));
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
index ed7b1e3..47cfcc3 100644
--- a/arch/arm/kvm/arm.c
+++ b/arch/arm/kvm/arm.c
@@ -48,7 +48,7 @@ __asm__(".arch_extension	virt");
 #endif
 
 static DEFINE_PER_CPU(unsigned long, kvm_arm_hyp_stack_page);
-static kvm_kernel_vfp_t __percpu *kvm_host_vfp_state;
+static kvm_cpu_context_t __percpu *kvm_host_cpu_state;
 static unsigned long hyp_default_vectors;
 
 /* Per-CPU variable containing the currently running vcpu. */
@@ -326,7 +326,7 @@ void kvm_arch_vcpu_uninit(struct kvm_vcpu *vcpu)
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 {
 	vcpu->cpu = cpu;
-	vcpu->arch.vfp_host = this_cpu_ptr(kvm_host_vfp_state);
+	vcpu->arch.host_cpu_context = this_cpu_ptr(kvm_host_cpu_state);
 
 	/*
 	 * Check whether this vcpu requires the cache to be flushed on
@@ -890,24 +890,24 @@ static int init_hyp_mode(void)
 	}
 
 	/*
-	 * Map the host VFP structures
+	 * Map the host CPU structures
 	 */
-	kvm_host_vfp_state = alloc_percpu(kvm_kernel_vfp_t);
-	if (!kvm_host_vfp_state) {
+	kvm_host_cpu_state = alloc_percpu(kvm_cpu_context_t);
+	if (!kvm_host_cpu_state) {
 		err = -ENOMEM;
-		kvm_err("Cannot allocate host VFP state\n");
+		kvm_err("Cannot allocate host CPU state\n");
 		goto out_free_mappings;
 	}
 
 	for_each_possible_cpu(cpu) {
-		kvm_kernel_vfp_t *vfp;
+		kvm_cpu_context_t *cpu_ctxt;
 
-		vfp = per_cpu_ptr(kvm_host_vfp_state, cpu);
-		err = create_hyp_mappings(vfp, vfp + 1);
+		cpu_ctxt = per_cpu_ptr(kvm_host_cpu_state, cpu);
+		err = create_hyp_mappings(cpu_ctxt, cpu_ctxt + 1);
 
 		if (err) {
-			kvm_err("Cannot map host VFP state: %d\n", err);
-			goto out_free_vfp;
+			kvm_err("Cannot map host CPU state: %d\n", err);
+			goto out_free_context;
 		}
 	}
 
@@ -916,7 +916,7 @@ static int init_hyp_mode(void)
 	 */
 	err = kvm_vgic_hyp_init();
 	if (err)
-		goto out_free_vfp;
+		goto out_free_context;
 
 #ifdef CONFIG_KVM_ARM_VGIC
 		vgic_present = true;
@@ -934,8 +934,8 @@ static int init_hyp_mode(void)
 	kvm_info("Hyp mode initialized successfully\n");
 
 	return 0;
-out_free_vfp:
-	free_percpu(kvm_host_vfp_state);
+out_free_context:
+	free_percpu(kvm_host_cpu_state);
 out_free_mappings:
 	free_hyp_pmds();
 out_free_stack_pages:
-- 
1.8.1.4

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 1/2] ARM: KVM: add architecture specific hook for capabilities
  2013-04-08 15:47 ` [PATCH 1/2] ARM: KVM: add architecture specific hook for capabilities Marc Zyngier
@ 2013-04-08 15:53   ` Peter Maydell
  2013-04-09  8:37     ` Marc Zyngier
  0 siblings, 1 reply; 6+ messages in thread
From: Peter Maydell @ 2013-04-08 15:53 UTC (permalink / raw)
  To: linux-arm-kernel

On 8 April 2013 16:47, Marc Zyngier <marc.zyngier@arm.com> wrote:
> Most of the capabilities are common to both arm and arm64, but
> we still need to handle the exceptions.
>
> Introduce kvm_arch_dev_ioctl_check_extention, which both architectures

"extension" (here and in the code itself).

-- PMM

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/2] ARM: KVM: add architecture specific hook for capabilities
  2013-04-08 15:53   ` Peter Maydell
@ 2013-04-09  8:37     ` Marc Zyngier
  0 siblings, 0 replies; 6+ messages in thread
From: Marc Zyngier @ 2013-04-09  8:37 UTC (permalink / raw)
  To: linux-arm-kernel

On 08/04/13 16:53, Peter Maydell wrote:
> On 8 April 2013 16:47, Marc Zyngier <marc.zyngier@arm.com> wrote:
>> Most of the capabilities are common to both arm and arm64, but
>> we still need to handle the exceptions.
>>
>> Introduce kvm_arch_dev_ioctl_check_extention, which both architectures
> 
> "extension" (here and in the code itself).

Damn. My native language has crept back. Thanks for pointing it out.

	M.
-- 
Jazz is not dead. It just smells funny...

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 0/2] ARM: KVM: pre-KVM/arm64 patches
  2013-04-08 15:47 [PATCH 0/2] ARM: KVM: pre-KVM/arm64 patches Marc Zyngier
  2013-04-08 15:47 ` [PATCH 1/2] ARM: KVM: add architecture specific hook for capabilities Marc Zyngier
  2013-04-08 15:47 ` [PATCH 2/2] ARM: KVM: promote vfp_host pointer to generic host cpu context Marc Zyngier
@ 2013-04-09 18:31 ` Christoffer Dall
  2 siblings, 0 replies; 6+ messages in thread
From: Christoffer Dall @ 2013-04-09 18:31 UTC (permalink / raw)
  To: linux-arm-kernel

On Mon, Apr 8, 2013 at 8:47 AM, Marc Zyngier <marc.zyngier@arm.com> wrote:
> This series contains two small changes to KVM/ARM, in preparation for
> the arm64 patches. None of these changes actually affect the 32bit
> implementation.
>
> This has been tested on both arm (VE TC2) and arm64 (Foundation Model).
>
> Marc Zyngier (2):
>   ARM: KVM: add architecture specific hook for capabilities
>   ARM: KVM: promote vfp_host pointer to generic host cpu context

they look good to me, I can just do that rename Peter pointed out when
applying them, thanks.


>
>  arch/arm/include/asm/kvm_host.h | 13 ++++++++++---
>  arch/arm/kernel/asm-offsets.c   |  2 +-
>  arch/arm/kvm/arm.c              | 30 +++++++++++++++---------------
>  3 files changed, 26 insertions(+), 19 deletions(-)
>
> --
> 1.8.1.4
>
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-04-09 18:31 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-08 15:47 [PATCH 0/2] ARM: KVM: pre-KVM/arm64 patches Marc Zyngier
2013-04-08 15:47 ` [PATCH 1/2] ARM: KVM: add architecture specific hook for capabilities Marc Zyngier
2013-04-08 15:53   ` Peter Maydell
2013-04-09  8:37     ` Marc Zyngier
2013-04-08 15:47 ` [PATCH 2/2] ARM: KVM: promote vfp_host pointer to generic host cpu context Marc Zyngier
2013-04-09 18:31 ` [PATCH 0/2] ARM: KVM: pre-KVM/arm64 patches Christoffer Dall

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