Patchwork [1/2] Move KVM init to arch_init.c, compile vl.c once

login
register
mail settings
Submitter Blue Swirl
Date April 2, 2010, 3:46 p.m.
Message ID <p2nf43fc5581004020846j43d3ea6bt8cb9955a2b1db0b@mail.gmail.com>
Download mbox | patch
Permalink /patch/49297/
State New
Headers show

Comments

Blue Swirl - April 2, 2010, 3:46 p.m.
Remove dependency of vl.c to KVM, then we can partially revert
b33612d03540fda7fa67485f1c20395beb7a2bf0.

Signed-off-by: Blue Swirl <blauwirbel@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(-)

                 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()) {

Patch

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: