diff options
author | Paul Mackerras <paulus@samba.org> | 2013-02-04 13:10:51 -0500 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-02-15 00:54:33 -0500 |
commit | 0acb91112a148fbb31678e66839ef757f3be3aa4 (patch) | |
tree | 9516f90d03a55bc07f8b13b67d497dea8062430c /arch/powerpc/kernel/asm-offsets.c | |
parent | 1707dd161349e6c54170c88d94fed012e3d224e3 (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.c | 5 |
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)); |