aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kvm/handle_exit.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/kvm/handle_exit.c')
-rw-r--r--arch/arm/kvm/handle_exit.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/arch/arm/kvm/handle_exit.c b/arch/arm/kvm/handle_exit.c
index 4e40d1955e35..96af65a30d78 100644
--- a/arch/arm/kvm/handle_exit.c
+++ b/arch/arm/kvm/handle_exit.c
@@ -79,7 +79,19 @@ static int kvm_handle_wfx(struct kvm_vcpu *vcpu, struct kvm_run *run)
79 return 1; 79 return 1;
80} 80}
81 81
82static int kvm_handle_unknown_ec(struct kvm_vcpu *vcpu, struct kvm_run *run)
83{
84 u32 hsr = kvm_vcpu_get_hsr(vcpu);
85
86 kvm_pr_unimpl("Unknown exception class: hsr: %#08x\n",
87 hsr);
88
89 kvm_inject_undefined(vcpu);
90 return 1;
91}
92
82static exit_handle_fn arm_exit_handlers[] = { 93static exit_handle_fn arm_exit_handlers[] = {
94 [0 ... HSR_EC_MAX] = kvm_handle_unknown_ec,
83 [HSR_EC_WFI] = kvm_handle_wfx, 95 [HSR_EC_WFI] = kvm_handle_wfx,
84 [HSR_EC_CP15_32] = kvm_handle_cp15_32, 96 [HSR_EC_CP15_32] = kvm_handle_cp15_32,
85 [HSR_EC_CP15_64] = kvm_handle_cp15_64, 97 [HSR_EC_CP15_64] = kvm_handle_cp15_64,
@@ -98,13 +110,6 @@ static exit_handle_fn kvm_get_exit_handler(struct kvm_vcpu *vcpu)
98{ 110{
99 u8 hsr_ec = kvm_vcpu_trap_get_class(vcpu); 111 u8 hsr_ec = kvm_vcpu_trap_get_class(vcpu);
100 112
101 if (hsr_ec >= ARRAY_SIZE(arm_exit_handlers) ||
102 !arm_exit_handlers[hsr_ec]) {
103 kvm_err("Unknown exception class: hsr: %#08x\n",
104 (unsigned int)kvm_vcpu_get_hsr(vcpu));
105 BUG();
106 }
107
108 return arm_exit_handlers[hsr_ec]; 113 return arm_exit_handlers[hsr_ec];
109} 114}
110 115