All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <marc.zyngier@arm.com>
To: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>
Cc: "Alex Bennée" <alex.bennee@linaro.org>,
	"Amit Daniel Kachhap" <amit.kachhap@arm.com>,
	"Andrew Jones" <drjones@redhat.com>,
	"Andrew Murray" <andrew.murray@arm.com>,
	"Christoffer Dall" <christoffer.dall@arm.com>,
	"Dave Martin" <Dave.Martin@arm.com>,
	"Julien Grall" <julien.grall@arm.com>,
	"Julien Thierry" <julien.thierry@arm.com>,
	"Kristina Martsenko" <kristina.martsenko@arm.com>,
	"Mark Rutland" <mark.rutland@arm.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Suzuki K Poulose" <suzuki.poulose@arm.com>,
	"Will Deacon" <will.deacon@arm.com>,
	"zhang . lei" <zhang.lei@jp.fujitsu.com>,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org
Subject: [PATCH 48/56] arm64: KVM: Encapsulate kvm_cpu_context in kvm_host_data
Date: Fri,  3 May 2019 13:44:19 +0100	[thread overview]
Message-ID: <20190503124427.190206-49-marc.zyngier@arm.com> (raw)
In-Reply-To: <20190503124427.190206-1-marc.zyngier@arm.com>

From: Andrew Murray <andrew.murray@arm.com>

The virt/arm core allocates a kvm_cpu_context_t percpu, at present this is
a typedef to kvm_cpu_context and is used to store host cpu context. The
kvm_cpu_context structure is also used elsewhere to hold vcpu context.
In order to use the percpu to hold additional future host information we
encapsulate kvm_cpu_context in a new structure and rename the typedef and
percpu to match.

Signed-off-by: Andrew Murray <andrew.murray@arm.com>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 arch/arm/include/asm/kvm_host.h   | 10 +++++++---
 arch/arm64/include/asm/kvm_asm.h  |  3 ++-
 arch/arm64/include/asm/kvm_host.h | 16 ++++++++++------
 arch/arm64/kernel/asm-offsets.c   |  1 +
 virt/kvm/arm/arm.c                | 14 ++++++++------
 5 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h
index fe7754315e9c..2d721ab05925 100644
--- a/arch/arm/include/asm/kvm_host.h
+++ b/arch/arm/include/asm/kvm_host.h
@@ -153,9 +153,13 @@ struct kvm_cpu_context {
 	u32 cp15[NR_CP15_REGS];
 };
 
-typedef struct kvm_cpu_context kvm_cpu_context_t;
+struct kvm_host_data {
+	struct kvm_cpu_context host_ctxt;
+};
+
+typedef struct kvm_host_data kvm_host_data_t;
 
-static inline void kvm_init_host_cpu_context(kvm_cpu_context_t *cpu_ctxt,
+static inline void kvm_init_host_cpu_context(struct kvm_cpu_context *cpu_ctxt,
 					     int cpu)
 {
 	/* The host's MPIDR is immutable, so let's set it up at boot time */
@@ -185,7 +189,7 @@ struct kvm_vcpu_arch {
 	struct kvm_vcpu_fault_info fault;
 
 	/* Host FP context */
-	kvm_cpu_context_t *host_cpu_context;
+	struct kvm_cpu_context *host_cpu_context;
 
 	/* VGIC state */
 	struct vgic_cpu vgic_cpu;
diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
index f5b79e995f40..ff73f5462aca 100644
--- a/arch/arm64/include/asm/kvm_asm.h
+++ b/arch/arm64/include/asm/kvm_asm.h
@@ -108,7 +108,8 @@ extern u32 __kvm_get_mdcr_el2(void);
 .endm
 
 .macro get_host_ctxt reg, tmp
-	hyp_adr_this_cpu \reg, kvm_host_cpu_state, \tmp
+	hyp_adr_this_cpu \reg, kvm_host_data, \tmp
+	add	\reg, \reg, #HOST_DATA_CONTEXT
 .endm
 
 .macro get_vcpu_ptr vcpu, ctxt
diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
index f772ac2fb3e9..9ba59832b71a 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -233,7 +233,11 @@ struct kvm_cpu_context {
 	struct kvm_vcpu *__hyp_running_vcpu;
 };
 
-typedef struct kvm_cpu_context kvm_cpu_context_t;
+struct kvm_host_data {
+	struct kvm_cpu_context host_ctxt;
+};
+
+typedef struct kvm_host_data kvm_host_data_t;
 
 struct vcpu_reset_state {
 	unsigned long	pc;
@@ -278,7 +282,7 @@ struct kvm_vcpu_arch {
 	struct kvm_guest_debug_arch external_debug_state;
 
 	/* Pointer to host CPU context */
-	kvm_cpu_context_t *host_cpu_context;
+	struct kvm_cpu_context *host_cpu_context;
 
 	struct thread_info *host_thread_info;	/* hyp VA */
 	struct user_fpsimd_state *host_fpsimd_state;	/* hyp VA */
@@ -483,9 +487,9 @@ void kvm_set_sei_esr(struct kvm_vcpu *vcpu, u64 syndrome);
 
 struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr);
 
-DECLARE_PER_CPU(kvm_cpu_context_t, kvm_host_cpu_state);
+DECLARE_PER_CPU(kvm_host_data_t, kvm_host_data);
 
-static inline void kvm_init_host_cpu_context(kvm_cpu_context_t *cpu_ctxt,
+static inline void kvm_init_host_cpu_context(struct kvm_cpu_context *cpu_ctxt,
 					     int cpu)
 {
 	/* The host's MPIDR is immutable, so let's set it up at boot time */
@@ -503,8 +507,8 @@ static inline void __cpu_init_hyp_mode(phys_addr_t pgd_ptr,
 	 * kernel's mapping to the linear mapping, and store it in tpidr_el2
 	 * so that we can use adr_l to access per-cpu variables in EL2.
 	 */
-	u64 tpidr_el2 = ((u64)this_cpu_ptr(&kvm_host_cpu_state) -
-			 (u64)kvm_ksym_ref(kvm_host_cpu_state));
+	u64 tpidr_el2 = ((u64)this_cpu_ptr(&kvm_host_data) -
+			 (u64)kvm_ksym_ref(kvm_host_data));
 
 	/*
 	 * Call initialization code, and switch to the full blown HYP code.
diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c
index 8178330a9f7a..768b23101ff0 100644
--- a/arch/arm64/kernel/asm-offsets.c
+++ b/arch/arm64/kernel/asm-offsets.c
@@ -134,6 +134,7 @@ int main(void)
   DEFINE(CPU_APGAKEYLO_EL1,	offsetof(struct kvm_cpu_context, sys_regs[APGAKEYLO_EL1]));
   DEFINE(CPU_USER_PT_REGS,	offsetof(struct kvm_regs, regs));
   DEFINE(HOST_CONTEXT_VCPU,	offsetof(struct kvm_cpu_context, __hyp_running_vcpu));
+  DEFINE(HOST_DATA_CONTEXT,	offsetof(struct kvm_host_data, host_ctxt));
 #endif
 #ifdef CONFIG_CPU_PM
   DEFINE(CPU_CTX_SP,		offsetof(struct cpu_suspend_ctx, sp));
diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c
index 156c09da9e2b..e960b91551d6 100644
--- a/virt/kvm/arm/arm.c
+++ b/virt/kvm/arm/arm.c
@@ -56,7 +56,7 @@
 __asm__(".arch_extension	virt");
 #endif
 
-DEFINE_PER_CPU(kvm_cpu_context_t, kvm_host_cpu_state);
+DEFINE_PER_CPU(kvm_host_data_t, kvm_host_data);
 static DEFINE_PER_CPU(unsigned long, kvm_arm_hyp_stack_page);
 
 /* Per-CPU variable containing the currently running vcpu. */
@@ -360,8 +360,10 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 {
 	int *last_ran;
+	kvm_host_data_t *cpu_data;
 
 	last_ran = this_cpu_ptr(vcpu->kvm->arch.last_vcpu_ran);
+	cpu_data = this_cpu_ptr(&kvm_host_data);
 
 	/*
 	 * We might get preempted before the vCPU actually runs, but
@@ -373,7 +375,7 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 	}
 
 	vcpu->cpu = cpu;
-	vcpu->arch.host_cpu_context = this_cpu_ptr(&kvm_host_cpu_state);
+	vcpu->arch.host_cpu_context = &cpu_data->host_ctxt;
 
 	kvm_arm_set_running_vcpu(vcpu);
 	kvm_vgic_load(vcpu);
@@ -1569,11 +1571,11 @@ static int init_hyp_mode(void)
 	}
 
 	for_each_possible_cpu(cpu) {
-		kvm_cpu_context_t *cpu_ctxt;
+		kvm_host_data_t *cpu_data;
 
-		cpu_ctxt = per_cpu_ptr(&kvm_host_cpu_state, cpu);
-		kvm_init_host_cpu_context(cpu_ctxt, cpu);
-		err = create_hyp_mappings(cpu_ctxt, cpu_ctxt + 1, PAGE_HYP);
+		cpu_data = per_cpu_ptr(&kvm_host_data, cpu);
+		kvm_init_host_cpu_context(&cpu_data->host_ctxt, cpu);
+		err = create_hyp_mappings(cpu_data, cpu_data + 1, PAGE_HYP);
 
 		if (err) {
 			kvm_err("Cannot map host CPU state: %d\n", err);
-- 
2.20.1


WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <marc.zyngier@arm.com>
To: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>
Cc: kvm@vger.kernel.org, Will Deacon <will.deacon@arm.com>,
	Kristina Martsenko <kristina.martsenko@arm.com>,
	"zhang . lei" <zhang.lei@jp.fujitsu.com>,
	Julien Grall <julien.grall@arm.com>,
	kvmarm@lists.cs.columbia.edu,
	Amit Daniel Kachhap <amit.kachhap@arm.com>,
	Dave Martin <Dave.Martin@arm.com>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH 48/56] arm64: KVM: Encapsulate kvm_cpu_context in kvm_host_data
Date: Fri,  3 May 2019 13:44:19 +0100	[thread overview]
Message-ID: <20190503124427.190206-49-marc.zyngier@arm.com> (raw)
In-Reply-To: <20190503124427.190206-1-marc.zyngier@arm.com>

From: Andrew Murray <andrew.murray@arm.com>

The virt/arm core allocates a kvm_cpu_context_t percpu, at present this is
a typedef to kvm_cpu_context and is used to store host cpu context. The
kvm_cpu_context structure is also used elsewhere to hold vcpu context.
In order to use the percpu to hold additional future host information we
encapsulate kvm_cpu_context in a new structure and rename the typedef and
percpu to match.

Signed-off-by: Andrew Murray <andrew.murray@arm.com>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 arch/arm/include/asm/kvm_host.h   | 10 +++++++---
 arch/arm64/include/asm/kvm_asm.h  |  3 ++-
 arch/arm64/include/asm/kvm_host.h | 16 ++++++++++------
 arch/arm64/kernel/asm-offsets.c   |  1 +
 virt/kvm/arm/arm.c                | 14 ++++++++------
 5 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h
index fe7754315e9c..2d721ab05925 100644
--- a/arch/arm/include/asm/kvm_host.h
+++ b/arch/arm/include/asm/kvm_host.h
@@ -153,9 +153,13 @@ struct kvm_cpu_context {
 	u32 cp15[NR_CP15_REGS];
 };
 
-typedef struct kvm_cpu_context kvm_cpu_context_t;
+struct kvm_host_data {
+	struct kvm_cpu_context host_ctxt;
+};
+
+typedef struct kvm_host_data kvm_host_data_t;
 
-static inline void kvm_init_host_cpu_context(kvm_cpu_context_t *cpu_ctxt,
+static inline void kvm_init_host_cpu_context(struct kvm_cpu_context *cpu_ctxt,
 					     int cpu)
 {
 	/* The host's MPIDR is immutable, so let's set it up at boot time */
@@ -185,7 +189,7 @@ struct kvm_vcpu_arch {
 	struct kvm_vcpu_fault_info fault;
 
 	/* Host FP context */
-	kvm_cpu_context_t *host_cpu_context;
+	struct kvm_cpu_context *host_cpu_context;
 
 	/* VGIC state */
 	struct vgic_cpu vgic_cpu;
diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
index f5b79e995f40..ff73f5462aca 100644
--- a/arch/arm64/include/asm/kvm_asm.h
+++ b/arch/arm64/include/asm/kvm_asm.h
@@ -108,7 +108,8 @@ extern u32 __kvm_get_mdcr_el2(void);
 .endm
 
 .macro get_host_ctxt reg, tmp
-	hyp_adr_this_cpu \reg, kvm_host_cpu_state, \tmp
+	hyp_adr_this_cpu \reg, kvm_host_data, \tmp
+	add	\reg, \reg, #HOST_DATA_CONTEXT
 .endm
 
 .macro get_vcpu_ptr vcpu, ctxt
diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
index f772ac2fb3e9..9ba59832b71a 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -233,7 +233,11 @@ struct kvm_cpu_context {
 	struct kvm_vcpu *__hyp_running_vcpu;
 };
 
-typedef struct kvm_cpu_context kvm_cpu_context_t;
+struct kvm_host_data {
+	struct kvm_cpu_context host_ctxt;
+};
+
+typedef struct kvm_host_data kvm_host_data_t;
 
 struct vcpu_reset_state {
 	unsigned long	pc;
@@ -278,7 +282,7 @@ struct kvm_vcpu_arch {
 	struct kvm_guest_debug_arch external_debug_state;
 
 	/* Pointer to host CPU context */
-	kvm_cpu_context_t *host_cpu_context;
+	struct kvm_cpu_context *host_cpu_context;
 
 	struct thread_info *host_thread_info;	/* hyp VA */
 	struct user_fpsimd_state *host_fpsimd_state;	/* hyp VA */
@@ -483,9 +487,9 @@ void kvm_set_sei_esr(struct kvm_vcpu *vcpu, u64 syndrome);
 
 struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr);
 
-DECLARE_PER_CPU(kvm_cpu_context_t, kvm_host_cpu_state);
+DECLARE_PER_CPU(kvm_host_data_t, kvm_host_data);
 
-static inline void kvm_init_host_cpu_context(kvm_cpu_context_t *cpu_ctxt,
+static inline void kvm_init_host_cpu_context(struct kvm_cpu_context *cpu_ctxt,
 					     int cpu)
 {
 	/* The host's MPIDR is immutable, so let's set it up at boot time */
@@ -503,8 +507,8 @@ static inline void __cpu_init_hyp_mode(phys_addr_t pgd_ptr,
 	 * kernel's mapping to the linear mapping, and store it in tpidr_el2
 	 * so that we can use adr_l to access per-cpu variables in EL2.
 	 */
-	u64 tpidr_el2 = ((u64)this_cpu_ptr(&kvm_host_cpu_state) -
-			 (u64)kvm_ksym_ref(kvm_host_cpu_state));
+	u64 tpidr_el2 = ((u64)this_cpu_ptr(&kvm_host_data) -
+			 (u64)kvm_ksym_ref(kvm_host_data));
 
 	/*
 	 * Call initialization code, and switch to the full blown HYP code.
diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c
index 8178330a9f7a..768b23101ff0 100644
--- a/arch/arm64/kernel/asm-offsets.c
+++ b/arch/arm64/kernel/asm-offsets.c
@@ -134,6 +134,7 @@ int main(void)
   DEFINE(CPU_APGAKEYLO_EL1,	offsetof(struct kvm_cpu_context, sys_regs[APGAKEYLO_EL1]));
   DEFINE(CPU_USER_PT_REGS,	offsetof(struct kvm_regs, regs));
   DEFINE(HOST_CONTEXT_VCPU,	offsetof(struct kvm_cpu_context, __hyp_running_vcpu));
+  DEFINE(HOST_DATA_CONTEXT,	offsetof(struct kvm_host_data, host_ctxt));
 #endif
 #ifdef CONFIG_CPU_PM
   DEFINE(CPU_CTX_SP,		offsetof(struct cpu_suspend_ctx, sp));
diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c
index 156c09da9e2b..e960b91551d6 100644
--- a/virt/kvm/arm/arm.c
+++ b/virt/kvm/arm/arm.c
@@ -56,7 +56,7 @@
 __asm__(".arch_extension	virt");
 #endif
 
-DEFINE_PER_CPU(kvm_cpu_context_t, kvm_host_cpu_state);
+DEFINE_PER_CPU(kvm_host_data_t, kvm_host_data);
 static DEFINE_PER_CPU(unsigned long, kvm_arm_hyp_stack_page);
 
 /* Per-CPU variable containing the currently running vcpu. */
@@ -360,8 +360,10 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 {
 	int *last_ran;
+	kvm_host_data_t *cpu_data;
 
 	last_ran = this_cpu_ptr(vcpu->kvm->arch.last_vcpu_ran);
+	cpu_data = this_cpu_ptr(&kvm_host_data);
 
 	/*
 	 * We might get preempted before the vCPU actually runs, but
@@ -373,7 +375,7 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 	}
 
 	vcpu->cpu = cpu;
-	vcpu->arch.host_cpu_context = this_cpu_ptr(&kvm_host_cpu_state);
+	vcpu->arch.host_cpu_context = &cpu_data->host_ctxt;
 
 	kvm_arm_set_running_vcpu(vcpu);
 	kvm_vgic_load(vcpu);
@@ -1569,11 +1571,11 @@ static int init_hyp_mode(void)
 	}
 
 	for_each_possible_cpu(cpu) {
-		kvm_cpu_context_t *cpu_ctxt;
+		kvm_host_data_t *cpu_data;
 
-		cpu_ctxt = per_cpu_ptr(&kvm_host_cpu_state, cpu);
-		kvm_init_host_cpu_context(cpu_ctxt, cpu);
-		err = create_hyp_mappings(cpu_ctxt, cpu_ctxt + 1, PAGE_HYP);
+		cpu_data = per_cpu_ptr(&kvm_host_data, cpu);
+		kvm_init_host_cpu_context(&cpu_data->host_ctxt, cpu);
+		err = create_hyp_mappings(cpu_data, cpu_data + 1, PAGE_HYP);
 
 		if (err) {
 			kvm_err("Cannot map host CPU state: %d\n", err);
-- 
2.20.1

_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <marc.zyngier@arm.com>
To: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>
Cc: "Mark Rutland" <mark.rutland@arm.com>,
	"Peter Maydell" <peter.maydell@linaro.org>,
	"Andrew Jones" <drjones@redhat.com>,
	kvm@vger.kernel.org, "Julien Thierry" <julien.thierry@arm.com>,
	"Suzuki K Poulose" <suzuki.poulose@arm.com>,
	"Will Deacon" <will.deacon@arm.com>,
	"Christoffer Dall" <christoffer.dall@arm.com>,
	"Kristina Martsenko" <kristina.martsenko@arm.com>,
	"zhang . lei" <zhang.lei@jp.fujitsu.com>,
	"Julien Grall" <julien.grall@arm.com>,
	kvmarm@lists.cs.columbia.edu,
	"Amit Daniel Kachhap" <amit.kachhap@arm.com>,
	"Andrew Murray" <andrew.murray@arm.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Dave Martin" <Dave.Martin@arm.com>,
	linux-arm-kernel@lists.infradead.org
Subject: [PATCH 48/56] arm64: KVM: Encapsulate kvm_cpu_context in kvm_host_data
Date: Fri,  3 May 2019 13:44:19 +0100	[thread overview]
Message-ID: <20190503124427.190206-49-marc.zyngier@arm.com> (raw)
In-Reply-To: <20190503124427.190206-1-marc.zyngier@arm.com>

From: Andrew Murray <andrew.murray@arm.com>

The virt/arm core allocates a kvm_cpu_context_t percpu, at present this is
a typedef to kvm_cpu_context and is used to store host cpu context. The
kvm_cpu_context structure is also used elsewhere to hold vcpu context.
In order to use the percpu to hold additional future host information we
encapsulate kvm_cpu_context in a new structure and rename the typedef and
percpu to match.

Signed-off-by: Andrew Murray <andrew.murray@arm.com>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 arch/arm/include/asm/kvm_host.h   | 10 +++++++---
 arch/arm64/include/asm/kvm_asm.h  |  3 ++-
 arch/arm64/include/asm/kvm_host.h | 16 ++++++++++------
 arch/arm64/kernel/asm-offsets.c   |  1 +
 virt/kvm/arm/arm.c                | 14 ++++++++------
 5 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h
index fe7754315e9c..2d721ab05925 100644
--- a/arch/arm/include/asm/kvm_host.h
+++ b/arch/arm/include/asm/kvm_host.h
@@ -153,9 +153,13 @@ struct kvm_cpu_context {
 	u32 cp15[NR_CP15_REGS];
 };
 
-typedef struct kvm_cpu_context kvm_cpu_context_t;
+struct kvm_host_data {
+	struct kvm_cpu_context host_ctxt;
+};
+
+typedef struct kvm_host_data kvm_host_data_t;
 
-static inline void kvm_init_host_cpu_context(kvm_cpu_context_t *cpu_ctxt,
+static inline void kvm_init_host_cpu_context(struct kvm_cpu_context *cpu_ctxt,
 					     int cpu)
 {
 	/* The host's MPIDR is immutable, so let's set it up at boot time */
@@ -185,7 +189,7 @@ struct kvm_vcpu_arch {
 	struct kvm_vcpu_fault_info fault;
 
 	/* Host FP context */
-	kvm_cpu_context_t *host_cpu_context;
+	struct kvm_cpu_context *host_cpu_context;
 
 	/* VGIC state */
 	struct vgic_cpu vgic_cpu;
diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
index f5b79e995f40..ff73f5462aca 100644
--- a/arch/arm64/include/asm/kvm_asm.h
+++ b/arch/arm64/include/asm/kvm_asm.h
@@ -108,7 +108,8 @@ extern u32 __kvm_get_mdcr_el2(void);
 .endm
 
 .macro get_host_ctxt reg, tmp
-	hyp_adr_this_cpu \reg, kvm_host_cpu_state, \tmp
+	hyp_adr_this_cpu \reg, kvm_host_data, \tmp
+	add	\reg, \reg, #HOST_DATA_CONTEXT
 .endm
 
 .macro get_vcpu_ptr vcpu, ctxt
diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
index f772ac2fb3e9..9ba59832b71a 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -233,7 +233,11 @@ struct kvm_cpu_context {
 	struct kvm_vcpu *__hyp_running_vcpu;
 };
 
-typedef struct kvm_cpu_context kvm_cpu_context_t;
+struct kvm_host_data {
+	struct kvm_cpu_context host_ctxt;
+};
+
+typedef struct kvm_host_data kvm_host_data_t;
 
 struct vcpu_reset_state {
 	unsigned long	pc;
@@ -278,7 +282,7 @@ struct kvm_vcpu_arch {
 	struct kvm_guest_debug_arch external_debug_state;
 
 	/* Pointer to host CPU context */
-	kvm_cpu_context_t *host_cpu_context;
+	struct kvm_cpu_context *host_cpu_context;
 
 	struct thread_info *host_thread_info;	/* hyp VA */
 	struct user_fpsimd_state *host_fpsimd_state;	/* hyp VA */
@@ -483,9 +487,9 @@ void kvm_set_sei_esr(struct kvm_vcpu *vcpu, u64 syndrome);
 
 struct kvm_vcpu *kvm_mpidr_to_vcpu(struct kvm *kvm, unsigned long mpidr);
 
-DECLARE_PER_CPU(kvm_cpu_context_t, kvm_host_cpu_state);
+DECLARE_PER_CPU(kvm_host_data_t, kvm_host_data);
 
-static inline void kvm_init_host_cpu_context(kvm_cpu_context_t *cpu_ctxt,
+static inline void kvm_init_host_cpu_context(struct kvm_cpu_context *cpu_ctxt,
 					     int cpu)
 {
 	/* The host's MPIDR is immutable, so let's set it up at boot time */
@@ -503,8 +507,8 @@ static inline void __cpu_init_hyp_mode(phys_addr_t pgd_ptr,
 	 * kernel's mapping to the linear mapping, and store it in tpidr_el2
 	 * so that we can use adr_l to access per-cpu variables in EL2.
 	 */
-	u64 tpidr_el2 = ((u64)this_cpu_ptr(&kvm_host_cpu_state) -
-			 (u64)kvm_ksym_ref(kvm_host_cpu_state));
+	u64 tpidr_el2 = ((u64)this_cpu_ptr(&kvm_host_data) -
+			 (u64)kvm_ksym_ref(kvm_host_data));
 
 	/*
 	 * Call initialization code, and switch to the full blown HYP code.
diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c
index 8178330a9f7a..768b23101ff0 100644
--- a/arch/arm64/kernel/asm-offsets.c
+++ b/arch/arm64/kernel/asm-offsets.c
@@ -134,6 +134,7 @@ int main(void)
   DEFINE(CPU_APGAKEYLO_EL1,	offsetof(struct kvm_cpu_context, sys_regs[APGAKEYLO_EL1]));
   DEFINE(CPU_USER_PT_REGS,	offsetof(struct kvm_regs, regs));
   DEFINE(HOST_CONTEXT_VCPU,	offsetof(struct kvm_cpu_context, __hyp_running_vcpu));
+  DEFINE(HOST_DATA_CONTEXT,	offsetof(struct kvm_host_data, host_ctxt));
 #endif
 #ifdef CONFIG_CPU_PM
   DEFINE(CPU_CTX_SP,		offsetof(struct cpu_suspend_ctx, sp));
diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c
index 156c09da9e2b..e960b91551d6 100644
--- a/virt/kvm/arm/arm.c
+++ b/virt/kvm/arm/arm.c
@@ -56,7 +56,7 @@
 __asm__(".arch_extension	virt");
 #endif
 
-DEFINE_PER_CPU(kvm_cpu_context_t, kvm_host_cpu_state);
+DEFINE_PER_CPU(kvm_host_data_t, kvm_host_data);
 static DEFINE_PER_CPU(unsigned long, kvm_arm_hyp_stack_page);
 
 /* Per-CPU variable containing the currently running vcpu. */
@@ -360,8 +360,10 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 {
 	int *last_ran;
+	kvm_host_data_t *cpu_data;
 
 	last_ran = this_cpu_ptr(vcpu->kvm->arch.last_vcpu_ran);
+	cpu_data = this_cpu_ptr(&kvm_host_data);
 
 	/*
 	 * We might get preempted before the vCPU actually runs, but
@@ -373,7 +375,7 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 	}
 
 	vcpu->cpu = cpu;
-	vcpu->arch.host_cpu_context = this_cpu_ptr(&kvm_host_cpu_state);
+	vcpu->arch.host_cpu_context = &cpu_data->host_ctxt;
 
 	kvm_arm_set_running_vcpu(vcpu);
 	kvm_vgic_load(vcpu);
@@ -1569,11 +1571,11 @@ static int init_hyp_mode(void)
 	}
 
 	for_each_possible_cpu(cpu) {
-		kvm_cpu_context_t *cpu_ctxt;
+		kvm_host_data_t *cpu_data;
 
-		cpu_ctxt = per_cpu_ptr(&kvm_host_cpu_state, cpu);
-		kvm_init_host_cpu_context(cpu_ctxt, cpu);
-		err = create_hyp_mappings(cpu_ctxt, cpu_ctxt + 1, PAGE_HYP);
+		cpu_data = per_cpu_ptr(&kvm_host_data, cpu);
+		kvm_init_host_cpu_context(&cpu_data->host_ctxt, cpu);
+		err = create_hyp_mappings(cpu_data, cpu_data + 1, PAGE_HYP);
 
 		if (err) {
 			kvm_err("Cannot map host CPU state: %d\n", err);
-- 
2.20.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2019-05-03 12:47 UTC|newest]

Thread overview: 174+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-03 12:43 [GIT PULL] KVM/arm updates for 5.2 Marc Zyngier
2019-05-03 12:43 ` Marc Zyngier
2019-05-03 12:43 ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 01/56] KVM: Documentation: Document arm64 core registers in detail Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 02/56] arm64: fpsimd: Always set TIF_FOREIGN_FPSTATE on task state flush Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 03/56] KVM: arm64: Delete orphaned declaration for __fpsimd_enabled() Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 04/56] KVM: arm64: Refactor kvm_arm_num_regs() for easier maintenance Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 05/56] KVM: arm64: Add missing #includes to kvm_host.h Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 06/56] arm64/sve: Clarify role of the VQ map maintenance functions Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 07/56] arm64/sve: Check SVE virtualisability Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 08/56] arm64/sve: Enable SVE state tracking for non-task contexts Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 09/56] KVM: arm64: Add a vcpu flag to control SVE visibility for the guest Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 10/56] KVM: arm64: Propagate vcpu into read_id_reg() Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 11/56] KVM: arm64: Support runtime sysreg visibility filtering Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 12/56] KVM: arm64/sve: System register context switch and access support Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 13/56] KVM: arm64/sve: Context switch the SVE registers Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 14/56] KVM: Allow 2048-bit register access via ioctl interface Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 15/56] KVM: arm64: Add missing #include of <linux/string.h> in guest.c Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 16/56] KVM: arm64: Factor out core register ID enumeration Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 17/56] KVM: arm64: Reject ioctl access to FPSIMD V-regs on SVE vcpus Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 18/56] KVM: arm64/sve: Add SVE support to register access ioctl interface Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 19/56] KVM: arm64: Enumerate SVE register indices for KVM_GET_REG_LIST Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 20/56] arm64/sve: In-kernel vector length availability query interface Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 21/56] KVM: arm/arm64: Add hook for arch-specific KVM initialisation Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 22/56] KVM: arm/arm64: Add KVM_ARM_VCPU_FINALIZE ioctl Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 23/56] KVM: arm64/sve: Add pseudo-register for the guest's vector lengths Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 24/56] KVM: arm64/sve: Allow userspace to enable SVE for vcpus Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 25/56] KVM: arm64: Add a capability to advertise SVE support Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 26/56] KVM: Document errors for KVM_GET_ONE_REG and KVM_SET_ONE_REG Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 27/56] KVM: arm64/sve: Document KVM API extensions for SVE Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43 ` [PATCH 28/56] arm64: KVM: Fix system register enumeration Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:43   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 29/56] arm64/sve: Clarify vq map semantics Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 30/56] KVM: arm/arm64: Demote kvm_arm_init_arch_resources() to just set up SVE Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 31/56] KVM: arm: Make vcpu finalization stubs into inline functions Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 32/56] KVM: arm64/sve: sys_regs: Demote redundant vcpu_has_sve() checks to WARNs Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 33/56] KVM: arm64/sve: Clean up UAPI register ID definitions Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 34/56] KVM: arm64/sve: Miscellaneous tidyups in guest.c Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 35/56] KVM: arm64/sve: Make register ioctl access errors more consistent Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 36/56] KVM: arm64/sve: WARN when avoiding divide-by-zero in sve_reg_to_region() Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 37/56] KVM: arm64/sve: Simplify KVM_REG_ARM64_SVE_VLS array sizing Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 38/56] KVM: arm64/sve: Explain validity checks in set_sve_vls() Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 39/56] KVM: arm/arm64: Clean up vcpu finalization function parameter naming Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 40/56] KVM: Clarify capability requirements for KVM_ARM_VCPU_FINALIZE Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 41/56] KVM: Clarify KVM_{SET,GET}_ONE_REG error code documentation Marc Zyngier
2019-05-03 12:44   ` [PATCH 41/56] KVM: Clarify KVM_{SET, GET}_ONE_REG " Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 42/56] KVM: arm64: Clarify access behaviour for out-of-range SVE register slice IDs Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 43/56] KVM: arm64: Add a vcpu flag to control ptrauth for guest Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 44/56] KVM: arm/arm64: Context-switch ptrauth registers Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 45/56] KVM: arm64: Add userspace flag to enable pointer authentication Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 46/56] KVM: arm64: Add capability to advertise ptrauth for guest Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 47/56] arm64: arm_pmu: Remove unnecessary isb instruction Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` Marc Zyngier [this message]
2019-05-03 12:44   ` [PATCH 48/56] arm64: KVM: Encapsulate kvm_cpu_context in kvm_host_data Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 49/56] arm64: KVM: Add accessors to track guest/host only counters Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 50/56] arm64: arm_pmu: Add !VHE support for exclude_host/exclude_guest attributes Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 51/56] arm64: KVM: Enable !VHE support for :G/:H perf event modifiers Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 52/56] arm64: KVM: Enable VHE " Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 53/56] arm64: KVM: Avoid isb's by using direct pmxevtyper sysreg Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 54/56] arm64: docs: Document perf event attributes Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 55/56] arm64: KVM: Fix perf cycle counter support for VHE Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44 ` [PATCH 56/56] KVM: arm64: Fix ptrauth ID register masking logic Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-03 12:44   ` Marc Zyngier
2019-05-15 21:42 ` [GIT PULL] KVM/arm updates for 5.2 Paolo Bonzini
2019-05-15 21:42   ` Paolo Bonzini
2019-05-15 21:42   ` Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190503124427.190206-49-marc.zyngier@arm.com \
    --to=marc.zyngier@arm.com \
    --cc=Dave.Martin@arm.com \
    --cc=alex.bennee@linaro.org \
    --cc=amit.kachhap@arm.com \
    --cc=andrew.murray@arm.com \
    --cc=christoffer.dall@arm.com \
    --cc=drjones@redhat.com \
    --cc=julien.grall@arm.com \
    --cc=julien.thierry@arm.com \
    --cc=kristina.martsenko@arm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=mark.rutland@arm.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=rkrcmar@redhat.com \
    --cc=suzuki.poulose@arm.com \
    --cc=will.deacon@arm.com \
    --cc=zhang.lei@jp.fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.