On 4/1/10, Anthony Liguori <anth...@codemonkey.ws> wrote: > On 04/01/2010 03:07 PM, Blue Swirl wrote: > > > 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 | 20 ++++++++++++++++++++ > > arch_init.h | 2 ++ > > vl.c | 14 ++------------ > > 5 files changed, 26 insertions(+), 14 deletions(-) > > > > diff --git a/Makefile.objs b/Makefile.objs > > index 74d7a3d..4cc8ea6 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..001c560 100644 > > --- a/arch_init.c > > +++ b/arch_init.c > > @@ -41,6 +41,8 @@ > > #include "gdbstub.h" > > #include "hw/smbios.h" > > > > +int kvm_allowed = 0; > > + > > #ifdef TARGET_SPARC > > int graphic_width = 1024; > > int graphic_height = 768; > > @@ -508,3 +510,21 @@ int xen_available(void) > > return 0; > > #endif > > } > > + > > +void enable_kvm(void) > > +{ > > + kvm_allowed = 1; > > +} > > > > > > Can we get away with keeping a local to vl.c use_kvm flag and then call > kvm_init() if use_kvm in vl.c?
It will not be safe to use kvm_enabled() in vl.c, so there needs to be a target dependent helper. The call to kvm_init could remain in vl.c, likewise it's not strictly needed to move kvm_allowed to arch_init.c. They just caused problems with the poisoning check in patch 2/2. But with this approach, because kvm.h is no longer included, there will not be any problems. > > We can stick a stub kvm_init() in arch_init.c if !CONFIG_KVM. > > Regards, > > Anthony LIguori > > > > > +void kvm_maybe_init(int smp_cpus) > > +{ > > + if (kvm_enabled()) { > > + int ret; > > + > > + ret = kvm_init(smp_cpus); > > + if (ret< 0) { > > + fprintf(stderr, "failed to initialize KVM\n"); > > + exit(1); > > + } > > + } > > +} > > diff --git a/arch_init.h b/arch_init.h > > index 682890c..dde4309 100644 > > --- a/arch_init.h > > +++ b/arch_init.h > > @@ -29,5 +29,7 @@ void cpudef_init(void); > > int audio_available(void); > > int kvm_available(void); > > int xen_available(void); > > +void enable_kvm(void); > > +void kvm_maybe_init(int smp_cpus); > > > > #endif > > diff --git a/vl.c b/vl.c > > index 03fccbf..cc214dd 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; > > > > @@ -3228,7 +3226,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(); > > break; > > case QEMU_OPTION_usb: > > usb_enabled = 1; > > @@ -3574,15 +3572,7 @@ 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); > > - } > > - } > > + kvm_maybe_init(smp_cpus); > > > > if (qemu_init_main_loop()) { > > fprintf(stderr, "qemu_init_main_loop failed\n"); > > > > > >