aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/kvm/handle_exit.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2015-01-23 07:39:51 -0500
committerPaolo Bonzini <pbonzini@redhat.com>2015-01-23 07:39:51 -0500
commit1c6007d59a20762052cc92c0a2889ff11030d23a (patch)
tree40bd72fe4e4d38a811312e5ae35bafd04c995d40 /arch/arm64/kvm/handle_exit.c
parentc6156df9d32141e5f1abb43078c56f2e5a0cb294 (diff)
parent4b990589952f0e30aa860184ac6c76219a74632e (diff)
Merge tag 'kvm-arm-for-3.20' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into kvm-next
KVM/ARM changes for v3.20 including GICv3 emulation, dirty page logging, added trace symbols, and adding an explicit VGIC init device control IOCTL. Conflicts: arch/arm64/include/asm/kvm_arm.h arch/arm64/kvm/handle_exit.c
Diffstat (limited to 'arch/arm64/kvm/handle_exit.c')
-rw-r--r--arch/arm64/kvm/handle_exit.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c
index 29b184a8f3f8..524fa25671fc 100644
--- a/arch/arm64/kvm/handle_exit.c
+++ b/arch/arm64/kvm/handle_exit.c
@@ -28,12 +28,18 @@
28#include <asm/kvm_mmu.h> 28#include <asm/kvm_mmu.h>
29#include <asm/kvm_psci.h> 29#include <asm/kvm_psci.h>
30 30
31#define CREATE_TRACE_POINTS
32#include "trace.h"
33
31typedef int (*exit_handle_fn)(struct kvm_vcpu *, struct kvm_run *); 34typedef int (*exit_handle_fn)(struct kvm_vcpu *, struct kvm_run *);
32 35
33static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run) 36static int handle_hvc(struct kvm_vcpu *vcpu, struct kvm_run *run)
34{ 37{
35 int ret; 38 int ret;
36 39
40 trace_kvm_hvc_arm64(*vcpu_pc(vcpu), *vcpu_reg(vcpu, 0),
41 kvm_vcpu_hvc_get_imm(vcpu));
42
37 ret = kvm_psci_call(vcpu); 43 ret = kvm_psci_call(vcpu);
38 if (ret < 0) { 44 if (ret < 0) {
39 kvm_inject_undefined(vcpu); 45 kvm_inject_undefined(vcpu);
@@ -63,10 +69,13 @@ static int handle_smc(struct kvm_vcpu *vcpu, struct kvm_run *run)
63 */ 69 */
64static int kvm_handle_wfx(struct kvm_vcpu *vcpu, struct kvm_run *run) 70static int kvm_handle_wfx(struct kvm_vcpu *vcpu, struct kvm_run *run)
65{ 71{
66 if (kvm_vcpu_get_hsr(vcpu) & ESR_ELx_WFx_ISS_WFE) 72 if (kvm_vcpu_get_hsr(vcpu) & ESR_ELx_WFx_ISS_WFE) {
73 trace_kvm_wfx_arm64(*vcpu_pc(vcpu), true);
67 kvm_vcpu_on_spin(vcpu); 74 kvm_vcpu_on_spin(vcpu);
68 else 75 } else {
76 trace_kvm_wfx_arm64(*vcpu_pc(vcpu), false);
69 kvm_vcpu_block(vcpu); 77 kvm_vcpu_block(vcpu);
78 }
70 79
71 kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu)); 80 kvm_skip_instr(vcpu, kvm_vcpu_trap_il_is32bit(vcpu));
72 81