aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/asm-offsets.c
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2013-02-04 13:10:51 -0500
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2013-02-15 00:54:33 -0500
commit0acb91112a148fbb31678e66839ef757f3be3aa4 (patch)
tree9516f90d03a55bc07f8b13b67d497dea8062430c /arch/powerpc/kernel/asm-offsets.c
parent1707dd161349e6c54170c88d94fed012e3d224e3 (diff)
powerpc/kvm/book3s_hv: Preserve guest CFAR register value
The CFAR (Come-From Address Register) is a useful debugging aid that exists on POWER7 processors. Currently HV KVM doesn't save or restore the CFAR register for guest vcpus, making the CFAR of limited use in guests. This adds the necessary code to capture the CFAR value saved in the early exception entry code (it has to be saved before any branch is executed), save it in the vcpu.arch struct, and restore it on entry to the guest. Signed-off-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/asm-offsets.c')
-rw-r--r--arch/powerpc/kernel/asm-offsets.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index beddba432518..e295a09b1f06 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -479,6 +479,7 @@ int main(void)
479 DEFINE(VCPU_LAST_INST, offsetof(struct kvm_vcpu, arch.last_inst)); 479 DEFINE(VCPU_LAST_INST, offsetof(struct kvm_vcpu, arch.last_inst));
480 DEFINE(VCPU_TRAP, offsetof(struct kvm_vcpu, arch.trap)); 480 DEFINE(VCPU_TRAP, offsetof(struct kvm_vcpu, arch.trap));
481 DEFINE(VCPU_PTID, offsetof(struct kvm_vcpu, arch.ptid)); 481 DEFINE(VCPU_PTID, offsetof(struct kvm_vcpu, arch.ptid));
482 DEFINE(VCPU_CFAR, offsetof(struct kvm_vcpu, arch.cfar));
482 DEFINE(VCORE_ENTRY_EXIT, offsetof(struct kvmppc_vcore, entry_exit_count)); 483 DEFINE(VCORE_ENTRY_EXIT, offsetof(struct kvmppc_vcore, entry_exit_count));
483 DEFINE(VCORE_NAP_COUNT, offsetof(struct kvmppc_vcore, nap_count)); 484 DEFINE(VCORE_NAP_COUNT, offsetof(struct kvmppc_vcore, nap_count));
484 DEFINE(VCORE_IN_GUEST, offsetof(struct kvmppc_vcore, in_guest)); 485 DEFINE(VCORE_IN_GUEST, offsetof(struct kvmppc_vcore, in_guest));
@@ -558,6 +559,10 @@ int main(void)
558 DEFINE(IPI_PRIORITY, IPI_PRIORITY); 559 DEFINE(IPI_PRIORITY, IPI_PRIORITY);
559#endif /* CONFIG_KVM_BOOK3S_64_HV */ 560#endif /* CONFIG_KVM_BOOK3S_64_HV */
560 561
562#ifdef CONFIG_PPC_BOOK3S_64
563 HSTATE_FIELD(HSTATE_CFAR, cfar);
564#endif /* CONFIG_PPC_BOOK3S_64 */
565
561#else /* CONFIG_PPC_BOOK3S */ 566#else /* CONFIG_PPC_BOOK3S */
562 DEFINE(VCPU_CR, offsetof(struct kvm_vcpu, arch.cr)); 567 DEFINE(VCPU_CR, offsetof(struct kvm_vcpu, arch.cr));
563 DEFINE(VCPU_XER, offsetof(struct kvm_vcpu, arch.xer)); 568 DEFINE(VCPU_XER, offsetof(struct kvm_vcpu, arch.xer));