#include "sysemu/qtest.h"
#include "hw/pci/pci.h"
#include "hw/mem/nvdimm.h"
+ #include "migration/vmstate.h"
GlobalProperty hw_compat_4_2[] = {
+ { "virtio-blk-device", "queue-size", "128"},
+ { "virtio-scsi-device", "virtqueue_size", "128"},
{ "virtio-blk-device", "x-enable-wce-if-config-wce", "off" },
{ "virtio-blk-device", "seg-max-adjust", "off"},
{ "virtio-scsi-device", "seg_max_adjust", "off"},
}
}
-int main(int argc, char **argv, char **envp)
+ static void create_default_memdev(MachineState *ms, const char *path)
+ {
+ Object *obj;
+ MachineClass *mc = MACHINE_GET_CLASS(ms);
+
+ obj = object_new(path ? TYPE_MEMORY_BACKEND_FILE : TYPE_MEMORY_BACKEND_RAM);
+ if (path) {
+ object_property_set_str(obj, path, "mem-path", &error_fatal);
+ }
+ object_property_set_int(obj, ms->ram_size, "size", &error_fatal);
+ object_property_add_child(object_get_objects_root(), mc->default_ram_id,
+ obj, &error_fatal);
+ user_creatable_complete(USER_CREATABLE(obj), &error_fatal);
+ object_unref(obj);
+ object_property_set_str(OBJECT(ms), mc->default_ram_id, "memory-backend",
+ &error_fatal);
+ }
+
+void qemu_init(int argc, char **argv, char **envp)
{
int i;
int snapshot, linux_boot;
machine_class = select_machine();
object_set_machine_compat_props(machine_class->compat_props);
- set_memory_options(&ram_slots, &maxram_size, machine_class);
-
os_daemonize();
- rcu_disable_atfork();
+
+ /*
+ * If QTest is enabled, keep the rcu_atfork enabled, since system processes
+ * may be forked testing purposes (e.g. fork-server based fuzzing) The fork
+ * should happen before a signle cpu instruction is executed, to prevent
+ * deadlocks. See commit 73c6e40, rcu: "completely disable pthread_atfork
+ * callbacks as soon as possible"
+ */
+ if (!qtest_enabled()) {
+ rcu_disable_atfork();
+ }
if (pid_file && !qemu_write_pidfile(pid_file, &err)) {
error_reportf_err(err, "cannot create PID file: ");
if (cpu_option) {
current_machine->cpu_type = parse_cpu_option(cpu_option);
}
+
+ set_memory_options(&ram_slots, &maxram_size, machine_class);
+ current_machine->ram_size = ram_size;
+ current_machine->maxram_size = maxram_size;
+ current_machine->ram_slots = ram_slots;
+
parse_numa_opts(current_machine);
+ if (machine_class->default_ram_id && current_machine->ram_size &&
+ numa_uses_legacy_mem() && !current_machine->ram_memdev_id) {
+ create_default_memdev(current_machine, mem_path);
+ }
/* do monitor/qmp handling at preconfig state if requested */
- main_loop();
+ qemu_main_loop();
audio_init_audiodevs();