|
@@ -488,6 +488,22 @@ static int kvm_trap_emul_handle_msa_disabled(struct kvm_vcpu *vcpu)
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int kvm_trap_emul_check_extension(struct kvm *kvm, long ext)
|
|
|
|
+{
|
|
|
|
+ int r;
|
|
|
|
+
|
|
|
|
+ switch (ext) {
|
|
|
|
+ case KVM_CAP_MIPS_TE:
|
|
|
|
+ r = 1;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ r = 0;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return r;
|
|
|
|
+}
|
|
|
|
+
|
|
static int kvm_trap_emul_vcpu_init(struct kvm_vcpu *vcpu)
|
|
static int kvm_trap_emul_vcpu_init(struct kvm_vcpu *vcpu)
|
|
{
|
|
{
|
|
struct mm_struct *kern_mm = &vcpu->arch.guest_kernel_mm;
|
|
struct mm_struct *kern_mm = &vcpu->arch.guest_kernel_mm;
|
|
@@ -1238,6 +1254,7 @@ static struct kvm_mips_callbacks kvm_trap_emul_callbacks = {
|
|
.handle_fpe = kvm_trap_emul_handle_fpe,
|
|
.handle_fpe = kvm_trap_emul_handle_fpe,
|
|
.handle_msa_disabled = kvm_trap_emul_handle_msa_disabled,
|
|
.handle_msa_disabled = kvm_trap_emul_handle_msa_disabled,
|
|
|
|
|
|
|
|
+ .check_extension = kvm_trap_emul_check_extension,
|
|
.vcpu_init = kvm_trap_emul_vcpu_init,
|
|
.vcpu_init = kvm_trap_emul_vcpu_init,
|
|
.vcpu_uninit = kvm_trap_emul_vcpu_uninit,
|
|
.vcpu_uninit = kvm_trap_emul_vcpu_uninit,
|
|
.vcpu_setup = kvm_trap_emul_vcpu_setup,
|
|
.vcpu_setup = kvm_trap_emul_vcpu_setup,
|