|
@@ -79,7 +79,19 @@ static int kvm_handle_wfx(struct kvm_vcpu *vcpu, struct kvm_run *run)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+static int kvm_handle_unknown_ec(struct kvm_vcpu *vcpu, struct kvm_run *run)
|
|
|
+{
|
|
|
+ u32 hsr = kvm_vcpu_get_hsr(vcpu);
|
|
|
+
|
|
|
+ kvm_pr_unimpl("Unknown exception class: hsr: %#08x\n",
|
|
|
+ hsr);
|
|
|
+
|
|
|
+ kvm_inject_undefined(vcpu);
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
static exit_handle_fn arm_exit_handlers[] = {
|
|
|
+ [0 ... HSR_EC_MAX] = kvm_handle_unknown_ec,
|
|
|
[HSR_EC_WFI] = kvm_handle_wfx,
|
|
|
[HSR_EC_CP15_32] = kvm_handle_cp15_32,
|
|
|
[HSR_EC_CP15_64] = kvm_handle_cp15_64,
|
|
@@ -98,13 +110,6 @@ static exit_handle_fn kvm_get_exit_handler(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
u8 hsr_ec = kvm_vcpu_trap_get_class(vcpu);
|
|
|
|
|
|
- if (hsr_ec >= ARRAY_SIZE(arm_exit_handlers) ||
|
|
|
- !arm_exit_handlers[hsr_ec]) {
|
|
|
- kvm_err("Unknown exception class: hsr: %#08x\n",
|
|
|
- (unsigned int)kvm_vcpu_get_hsr(vcpu));
|
|
|
- BUG();
|
|
|
- }
|
|
|
-
|
|
|
return arm_exit_handlers[hsr_ec];
|
|
|
}
|
|
|
|