aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/kvm/handle_exit.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm64/kvm/handle_exit.c')
-rw-r--r--arch/arm64/kvm/handle_exit.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c
index 1bfe30dfbfe7..fa1b18e364fc 100644
--- a/arch/arm64/kvm/handle_exit.c
+++ b/arch/arm64/kvm/handle_exit.c
@@ -135,7 +135,19 @@ static int kvm_handle_guest_debug(struct kvm_vcpu *vcpu, struct kvm_run *run)
135 return ret; 135 return ret;
136} 136}
137 137
138static int kvm_handle_unknown_ec(struct kvm_vcpu *vcpu, struct kvm_run *run)
139{
140 u32 hsr = kvm_vcpu_get_hsr(vcpu);
141
142 kvm_pr_unimpl("Unknown exception class: hsr: %#08x -- %s\n",
143 hsr, esr_get_class_string(hsr));
144
145 kvm_inject_undefined(vcpu);
146 return 1;
147}
148
138static exit_handle_fn arm_exit_handlers[] = { 149static exit_handle_fn arm_exit_handlers[] = {
150 [0 ... ESR_ELx_EC_MAX] = kvm_handle_unknown_ec,
139 [ESR_ELx_EC_WFx] = kvm_handle_wfx, 151 [ESR_ELx_EC_WFx] = kvm_handle_wfx,
140 [ESR_ELx_EC_CP15_32] = kvm_handle_cp15_32, 152 [ESR_ELx_EC_CP15_32] = kvm_handle_cp15_32,
141 [ESR_ELx_EC_CP15_64] = kvm_handle_cp15_64, 153 [ESR_ELx_EC_CP15_64] = kvm_handle_cp15_64,
@@ -162,13 +174,6 @@ static exit_handle_fn kvm_get_exit_handler(struct kvm_vcpu *vcpu)
162 u32 hsr = kvm_vcpu_get_hsr(vcpu); 174 u32 hsr = kvm_vcpu_get_hsr(vcpu);
163 u8 hsr_ec = ESR_ELx_EC(hsr); 175 u8 hsr_ec = ESR_ELx_EC(hsr);
164 176
165 if (hsr_ec >= ARRAY_SIZE(arm_exit_handlers) ||
166 !arm_exit_handlers[hsr_ec]) {
167 kvm_err("Unknown exception class: hsr: %#08x -- %s\n",
168 hsr, esr_get_class_string(hsr));
169 BUG();
170 }
171
172 return arm_exit_handlers[hsr_ec]; 177 return arm_exit_handlers[hsr_ec];
173} 178}
174 179