mirror of https://github.com/xemu-project/xemu.git
hw/mips: Implement the kvm_type() hook in MachineClass
MIPS has two types of KVM: TE & VZ, and TE is the default type. Now we can't create a VZ guest in QEMU because it lacks the kvm_type() hook in MachineClass. This patch add the the kvm_type() hook to support both of the two types. [AM: Added "if defined" guards.] Reviewed-by: Aleksandar Markovic <aleksandar.qemu.devel@gmail.com> Signed-off-by: Aleksandar Markovic <aleksandar.qemu.devel@gmail.com> Signed-off-by: Huacai Chen <chenhc@lemote.com> Co-developed-by: Jiaxun Yang <jiaxun.yang@flygoat.com> Message-Id: <1592995531-32600-2-git-send-email-chenhc@lemote.com>
This commit is contained in:
parent
553cf5d7c4
commit
719d109b7f
|
@ -21,10 +21,12 @@
|
|||
#include "qemu/main-loop.h"
|
||||
#include "qemu/timer.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "sysemu/kvm_int.h"
|
||||
#include "sysemu/runstate.h"
|
||||
#include "sysemu/cpus.h"
|
||||
#include "kvm_mips.h"
|
||||
#include "exec/memattrs.h"
|
||||
#include "hw/boards.h"
|
||||
|
||||
#define DEBUG_KVM 0
|
||||
|
||||
|
@ -1270,3 +1272,27 @@ int kvm_arch_msi_data_to_gsi(uint32_t data)
|
|||
{
|
||||
abort();
|
||||
}
|
||||
|
||||
int mips_kvm_type(MachineState *machine, const char *vm_type)
|
||||
{
|
||||
#if defined(KVM_CAP_MIPS_VZ) || defined(KVM_CAP_MIPS_TE)
|
||||
int r;
|
||||
KVMState *s = KVM_STATE(machine->accelerator);
|
||||
#endif
|
||||
|
||||
#if defined(KVM_CAP_MIPS_VZ)
|
||||
r = kvm_check_extension(s, KVM_CAP_MIPS_VZ);
|
||||
if (r > 0) {
|
||||
return KVM_VM_MIPS_VZ;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(KVM_CAP_MIPS_TE)
|
||||
r = kvm_check_extension(s, KVM_CAP_MIPS_TE);
|
||||
if (r > 0) {
|
||||
return KVM_VM_MIPS_TE;
|
||||
}
|
||||
#endif
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
#ifndef KVM_MIPS_H
|
||||
#define KVM_MIPS_H
|
||||
|
||||
#include "cpu.h"
|
||||
|
||||
/**
|
||||
* kvm_mips_reset_vcpu:
|
||||
* @cpu: MIPSCPU
|
||||
|
@ -23,4 +25,13 @@ void kvm_mips_reset_vcpu(MIPSCPU *cpu);
|
|||
int kvm_mips_set_interrupt(MIPSCPU *cpu, int irq, int level);
|
||||
int kvm_mips_set_ipi_interrupt(MIPSCPU *cpu, int irq, int level);
|
||||
|
||||
#ifdef CONFIG_KVM
|
||||
int mips_kvm_type(MachineState *machine, const char *vm_type);
|
||||
#else
|
||||
static inline int mips_kvm_type(MachineState *machine, const char *vm_type)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* KVM_MIPS_H */
|
||||
|
|
Loading…
Reference in New Issue