Remove dependency of vl.c to KVM, then we can partially revert b33612d03540fda7fa67485f1c20395beb7a2bf0.
Signed-off-by: Blue Swirl <blauwir...@gmail.com> --- Makefile.objs | 2 +- Makefile.target | 2 +- arch_init.c | 5 +++++ arch_init.h | 1 + kvm-all.c | 3 +++ kvm.h | 8 ++++++++ vl.c | 16 +++++----------- 7 files changed, 24 insertions(+), 13 deletions(-) diff --git a/Makefile.objs b/Makefile.objs index 11e44a0..cb2ec2c 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -128,7 +128,7 @@ user-obj-y += cutils.o cache-utils.o # libhw hw-obj-y = -hw-obj-y += loader.o +hw-obj-y += vl.o loader.o hw-obj-y += virtio.o virtio-console.o hw-obj-y += fw_cfg.o pci.o pci_host.o pcie_host.o hw-obj-y += watchdog.o diff --git a/Makefile.target b/Makefile.target index 167fc8d..2aa02f5 100644 --- a/Makefile.target +++ b/Makefile.target @@ -161,7 +161,7 @@ endif #CONFIG_BSD_USER # System emulator target ifdef CONFIG_SOFTMMU -obj-y = arch_init.o cpus.o monitor.o machine.o gdbstub.o vl.o +obj-y = arch_init.o cpus.o monitor.o machine.o gdbstub.o # virtio has to be here due to weird dependency between PCI and virtio-net. # need to fix this properly obj-y += virtio-blk.o virtio-balloon.o virtio-net.o virtio-pci.o virtio-serial-bus.o diff --git a/arch_init.c b/arch_init.c index cfc03ea..055e65d 100644 --- a/arch_init.c +++ b/arch_init.c @@ -508,3 +508,8 @@ int xen_available(void) return 0; #endif } + +int kvm_maybe_init(int smp_cpus) +{ + return kvm_init(smp_cpus); +} diff --git a/arch_init.h b/arch_init.h index 682890c..52dd327 100644 --- a/arch_init.h +++ b/arch_init.h @@ -29,5 +29,6 @@ void cpudef_init(void); int audio_available(void); int kvm_available(void); int xen_available(void); +int kvm_maybe_init(int smp_cpus); #endif diff --git a/kvm-all.c b/kvm-all.c index 7aa5e57..dc99aae 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -51,6 +51,8 @@ typedef struct KVMSlot typedef struct kvm_dirty_log KVMDirtyLog; +int kvm_allowed = 0; + struct KVMState { KVMSlot slots[32]; @@ -670,6 +672,7 @@ int kvm_init(int smp_cpus) kvm_state = s; cpu_register_phys_memory_client(&kvm_cpu_phys_memory_client); + kvm_allowed = 1; return 0; diff --git a/kvm.h b/kvm.h index 1e5be27..979f640 100644 --- a/kvm.h +++ b/kvm.h @@ -34,7 +34,15 @@ struct kvm_run; /* external API */ +#ifdef CONFIG_KVM int kvm_init(int smp_cpus); +#else +static inline +int kvm_init(int smp_cpus) +{ + return -ENOSYS; +} +#endif #ifdef NEED_CPU_H int kvm_init_vcpu(CPUState *env); diff --git a/vl.c b/vl.c index 6768cf1..6958b2c 100644 --- a/vl.c +++ b/vl.c @@ -145,7 +145,6 @@ int main(int argc, char **argv) #include "dma.h" #include "audio/audio.h" #include "migration.h" -#include "kvm.h" #include "balloon.h" #include "qemu-option.h" #include "qemu-config.h" @@ -241,7 +240,6 @@ uint8_t qemu_uuid[16]; static QEMUBootSetHandler *boot_set_handler; static void *boot_set_opaque; -int kvm_allowed = 0; uint32_t xen_domid; enum xen_mode xen_mode = XEN_EMULATE; @@ -2649,6 +2647,7 @@ int main(int argc, char **argv, char **envp) #endif int show_vnc_port = 0; int defconfig = 1; + int enable_kvm = 0; error_set_progname(argv[0]); @@ -3239,7 +3238,7 @@ int main(int argc, char **argv, char **envp) printf("Option %s not supported for this target\n", popt->name); exit(1); } - kvm_allowed = 1; + enable_kvm = 1; break; case QEMU_OPTION_usb: usb_enabled = 1; @@ -3585,14 +3584,9 @@ int main(int argc, char **argv, char **envp) exit(1); } - if (kvm_enabled()) { - int ret; - - ret = kvm_init(smp_cpus); - if (ret < 0) { - fprintf(stderr, "failed to initialize KVM\n"); - exit(1); - } + if (enable_kvm && kvm_maybe_init(smp_cpus) < 0) { + fprintf(stderr, "failed to initialize KVM\n"); + exit(1); } if (qemu_init_main_loop()) { -- 1.6.2.4