diff options
author | Marc Zyngier <marc.zyngier@arm.com> | 2012-12-10 11:40:18 -0500 |
---|---|---|
committer | Marc Zyngier <marc.zyngier@arm.com> | 2013-06-12 11:39:55 -0400 |
commit | 55c7401d92e16360e0987afe39355f1eb6300f31 (patch) | |
tree | ec3bb125b9c74727acd65ff8204dac94d9598c0e /arch/arm64/kernel/asm-offsets.c | |
parent | 092bd143cbb481b4ce1d55247a2987eaaf61f967 (diff) |
arm64: KVM: HYP mode world switch implementation
The HYP mode world switch in all its glory.
Implements save/restore of host/guest registers, EL2 trapping,
IPA resolution, and additional services (tlb invalidation).
Reviewed-by: Christopher Covington <cov@codeaurora.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Diffstat (limited to 'arch/arm64/kernel/asm-offsets.c')
-rw-r--r-- | arch/arm64/kernel/asm-offsets.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c index a2a4d810bea3..49c162c03b69 100644 --- a/arch/arm64/kernel/asm-offsets.c +++ b/arch/arm64/kernel/asm-offsets.c | |||
@@ -104,5 +104,38 @@ int main(void) | |||
104 | BLANK(); | 104 | BLANK(); |
105 | DEFINE(TZ_MINWEST, offsetof(struct timezone, tz_minuteswest)); | 105 | DEFINE(TZ_MINWEST, offsetof(struct timezone, tz_minuteswest)); |
106 | DEFINE(TZ_DSTTIME, offsetof(struct timezone, tz_dsttime)); | 106 | DEFINE(TZ_DSTTIME, offsetof(struct timezone, tz_dsttime)); |
107 | BLANK(); | ||
108 | #ifdef CONFIG_KVM_ARM_HOST | ||
109 | DEFINE(VCPU_CONTEXT, offsetof(struct kvm_vcpu, arch.ctxt)); | ||
110 | DEFINE(CPU_GP_REGS, offsetof(struct kvm_cpu_context, gp_regs)); | ||
111 | DEFINE(CPU_USER_PT_REGS, offsetof(struct kvm_regs, regs)); | ||
112 | DEFINE(CPU_FP_REGS, offsetof(struct kvm_regs, fp_regs)); | ||
113 | DEFINE(CPU_SP_EL1, offsetof(struct kvm_regs, sp_el1)); | ||
114 | DEFINE(CPU_ELR_EL1, offsetof(struct kvm_regs, elr_el1)); | ||
115 | DEFINE(CPU_SPSR, offsetof(struct kvm_regs, spsr)); | ||
116 | DEFINE(CPU_SYSREGS, offsetof(struct kvm_cpu_context, sys_regs)); | ||
117 | DEFINE(VCPU_ESR_EL2, offsetof(struct kvm_vcpu, arch.fault.esr_el2)); | ||
118 | DEFINE(VCPU_FAR_EL2, offsetof(struct kvm_vcpu, arch.fault.far_el2)); | ||
119 | DEFINE(VCPU_HPFAR_EL2, offsetof(struct kvm_vcpu, arch.fault.hpfar_el2)); | ||
120 | DEFINE(VCPU_HCR_EL2, offsetof(struct kvm_vcpu, arch.hcr_el2)); | ||
121 | DEFINE(VCPU_IRQ_LINES, offsetof(struct kvm_vcpu, arch.irq_lines)); | ||
122 | DEFINE(VCPU_HOST_CONTEXT, offsetof(struct kvm_vcpu, arch.host_cpu_context)); | ||
123 | DEFINE(VCPU_TIMER_CNTV_CTL, offsetof(struct kvm_vcpu, arch.timer_cpu.cntv_ctl)); | ||
124 | DEFINE(VCPU_TIMER_CNTV_CVAL, offsetof(struct kvm_vcpu, arch.timer_cpu.cntv_cval)); | ||
125 | DEFINE(KVM_TIMER_CNTVOFF, offsetof(struct kvm, arch.timer.cntvoff)); | ||
126 | DEFINE(KVM_TIMER_ENABLED, offsetof(struct kvm, arch.timer.enabled)); | ||
127 | DEFINE(VCPU_KVM, offsetof(struct kvm_vcpu, kvm)); | ||
128 | DEFINE(VCPU_VGIC_CPU, offsetof(struct kvm_vcpu, arch.vgic_cpu)); | ||
129 | DEFINE(VGIC_CPU_HCR, offsetof(struct vgic_cpu, vgic_hcr)); | ||
130 | DEFINE(VGIC_CPU_VMCR, offsetof(struct vgic_cpu, vgic_vmcr)); | ||
131 | DEFINE(VGIC_CPU_MISR, offsetof(struct vgic_cpu, vgic_misr)); | ||
132 | DEFINE(VGIC_CPU_EISR, offsetof(struct vgic_cpu, vgic_eisr)); | ||
133 | DEFINE(VGIC_CPU_ELRSR, offsetof(struct vgic_cpu, vgic_elrsr)); | ||
134 | DEFINE(VGIC_CPU_APR, offsetof(struct vgic_cpu, vgic_apr)); | ||
135 | DEFINE(VGIC_CPU_LR, offsetof(struct vgic_cpu, vgic_lr)); | ||
136 | DEFINE(VGIC_CPU_NR_LR, offsetof(struct vgic_cpu, nr_lr)); | ||
137 | DEFINE(KVM_VTTBR, offsetof(struct kvm, arch.vttbr)); | ||
138 | DEFINE(KVM_VGIC_VCTRL, offsetof(struct kvm, arch.vgic.vctrl_base)); | ||
139 | #endif | ||
107 | return 0; | 140 | return 0; |
108 | } | 141 | } |