qemu/vl.c
<<
>>
Prefs
   1/*
   2 * QEMU System Emulator
   3 *
   4 * Copyright (c) 2003-2008 Fabrice Bellard
   5 *
   6 * Permission is hereby granted, free of charge, to any person obtaining a copy
   7 * of this software and associated documentation files (the "Software"), to deal
   8 * in the Software without restriction, including without limitation the rights
   9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10 * copies of the Software, and to permit persons to whom the Software is
  11 * furnished to do so, subject to the following conditions:
  12 *
  13 * The above copyright notice and this permission notice shall be included in
  14 * all copies or substantial portions of the Software.
  15 *
  16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  22 * THE SOFTWARE.
  23 */
  24#include "qemu/osdep.h"
  25#include "qemu-version.h"
  26#include "qemu/cutils.h"
  27#include "qemu/help_option.h"
  28#include "qemu/uuid.h"
  29
  30#ifdef CONFIG_SECCOMP
  31#include "sysemu/seccomp.h"
  32#include "sys/prctl.h"
  33#endif
  34
  35#ifdef CONFIG_SDL
  36#if defined(__APPLE__) || defined(main)
  37#include <SDL.h>
  38int qemu_main(int argc, char **argv, char **envp);
  39int main(int argc, char **argv)
  40{
  41    return qemu_main(argc, argv, NULL);
  42}
  43#undef main
  44#define main qemu_main
  45#endif
  46#endif /* CONFIG_SDL */
  47
  48#ifdef CONFIG_COCOA
  49#undef main
  50#define main qemu_main
  51#endif /* CONFIG_COCOA */
  52
  53
  54#include "qemu/error-report.h"
  55#include "qemu/sockets.h"
  56#include "hw/hw.h"
  57#include "hw/boards.h"
  58#include "sysemu/accel.h"
  59#include "hw/usb.h"
  60#include "hw/i386/pc.h"
  61#include "hw/isa/isa.h"
  62#include "hw/scsi/scsi.h"
  63#include "hw/bt.h"
  64#include "sysemu/watchdog.h"
  65#include "hw/smbios/smbios.h"
  66#include "hw/acpi/acpi.h"
  67#include "hw/xen/xen.h"
  68#include "hw/qdev.h"
  69#include "hw/loader.h"
  70#include "monitor/qdev.h"
  71#include "sysemu/bt.h"
  72#include "net/net.h"
  73#include "net/slirp.h"
  74#include "monitor/monitor.h"
  75#include "ui/console.h"
  76#include "ui/input.h"
  77#include "sysemu/sysemu.h"
  78#include "sysemu/numa.h"
  79#include "exec/gdbstub.h"
  80#include "qemu/timer.h"
  81#include "chardev/char.h"
  82#include "qemu/bitmap.h"
  83#include "qemu/log.h"
  84#include "sysemu/blockdev.h"
  85#include "hw/block/block.h"
  86#include "migration/misc.h"
  87#include "migration/snapshot.h"
  88#include "migration/global_state.h"
  89#include "sysemu/tpm.h"
  90#include "sysemu/dma.h"
  91#include "hw/audio/soundhw.h"
  92#include "audio/audio.h"
  93#include "sysemu/cpus.h"
  94#include "migration/colo.h"
  95#include "sysemu/kvm.h"
  96#include "sysemu/hax.h"
  97#include "qapi/qobject-input-visitor.h"
  98#include "qapi/qobject-input-visitor.h"
  99#include "qapi-visit.h"
 100#include "qapi/qmp/qjson.h"
 101#include "qemu/option.h"
 102#include "qemu/config-file.h"
 103#include "qemu-options.h"
 104#include "qmp-commands.h"
 105#include "qemu/main-loop.h"
 106#ifdef CONFIG_VIRTFS
 107#include "fsdev/qemu-fsdev.h"
 108#endif
 109#include "sysemu/qtest.h"
 110
 111#include "disas/disas.h"
 112
 113
 114#include "slirp/libslirp.h"
 115
 116#include "trace-root.h"
 117#include "trace/control.h"
 118#include "qemu/queue.h"
 119#include "sysemu/arch_init.h"
 120
 121#include "ui/qemu-spice.h"
 122#include "qapi/string-input-visitor.h"
 123#include "qapi/opts-visitor.h"
 124#include "qom/object_interfaces.h"
 125#include "qapi-event.h"
 126#include "exec/semihost.h"
 127#include "crypto/init.h"
 128#include "sysemu/replay.h"
 129#include "qapi/qmp/qerror.h"
 130#include "sysemu/iothread.h"
 131
 132#define MAX_VIRTIO_CONSOLES 1
 133#define MAX_SCLP_CONSOLES 1
 134
 135static const char *data_dir[16];
 136static int data_dir_idx;
 137const char *bios_name = NULL;
 138enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
 139int request_opengl = -1;
 140int display_opengl;
 141const char* keyboard_layout = NULL;
 142ram_addr_t ram_size;
 143const char *mem_path = NULL;
 144int mem_prealloc = 0; /* force preallocation of physical target memory */
 145bool enable_mlock = false;
 146int nb_nics;
 147NICInfo nd_table[MAX_NICS];
 148int autostart;
 149static int rtc_utc = 1;
 150static int rtc_date_offset = -1; /* -1 means no change */
 151QEMUClockType rtc_clock;
 152int vga_interface_type = VGA_NONE;
 153static int full_screen = 0;
 154static int no_frame = 0;
 155int no_quit = 0;
 156static bool grab_on_hover;
 157Chardev *serial_hds[MAX_SERIAL_PORTS];
 158Chardev *parallel_hds[MAX_PARALLEL_PORTS];
 159Chardev *virtcon_hds[MAX_VIRTIO_CONSOLES];
 160Chardev *sclp_hds[MAX_SCLP_CONSOLES];
 161int win2k_install_hack = 0;
 162int singlestep = 0;
 163int smp_cpus;
 164unsigned int max_cpus;
 165int smp_cores = 1;
 166int smp_threads = 1;
 167int acpi_enabled = 1;
 168int no_hpet = 0;
 169int fd_bootchk = 1;
 170static int no_reboot;
 171int no_shutdown = 0;
 172int cursor_hide = 1;
 173int graphic_rotate = 0;
 174const char *watchdog;
 175QEMUOptionRom option_rom[MAX_OPTION_ROMS];
 176int nb_option_roms;
 177int old_param = 0;
 178const char *qemu_name;
 179int alt_grab = 0;
 180int ctrl_grab = 0;
 181unsigned int nb_prom_envs = 0;
 182const char *prom_envs[MAX_PROM_ENVS];
 183int boot_menu;
 184bool boot_strict;
 185uint8_t *boot_splash_filedata;
 186size_t boot_splash_filedata_size;
 187uint8_t qemu_extra_params_fw[2];
 188
 189int icount_align_option;
 190
 191/* The bytes in qemu_uuid are in the order specified by RFC4122, _not_ in the
 192 * little-endian "wire format" described in the SMBIOS 2.6 specification.
 193 */
 194QemuUUID qemu_uuid;
 195bool qemu_uuid_set;
 196
 197static NotifierList exit_notifiers =
 198    NOTIFIER_LIST_INITIALIZER(exit_notifiers);
 199
 200static NotifierList machine_init_done_notifiers =
 201    NOTIFIER_LIST_INITIALIZER(machine_init_done_notifiers);
 202
 203bool xen_allowed;
 204uint32_t xen_domid;
 205enum xen_mode xen_mode = XEN_EMULATE;
 206bool xen_domid_restrict;
 207
 208static int has_defaults = 1;
 209static int default_serial = 1;
 210static int default_parallel = 1;
 211static int default_virtcon = 1;
 212static int default_sclp = 1;
 213static int default_monitor = 1;
 214static int default_floppy = 1;
 215static int default_cdrom = 1;
 216static int default_sdcard = 1;
 217static int default_vga = 1;
 218static int default_net = 1;
 219
 220static struct {
 221    const char *driver;
 222    int *flag;
 223} default_list[] = {
 224    { .driver = "isa-serial",           .flag = &default_serial    },
 225    { .driver = "isa-parallel",         .flag = &default_parallel  },
 226    { .driver = "isa-fdc",              .flag = &default_floppy    },
 227    { .driver = "floppy",               .flag = &default_floppy    },
 228    { .driver = "ide-cd",               .flag = &default_cdrom     },
 229    { .driver = "ide-hd",               .flag = &default_cdrom     },
 230    { .driver = "ide-drive",            .flag = &default_cdrom     },
 231    { .driver = "scsi-cd",              .flag = &default_cdrom     },
 232    { .driver = "scsi-hd",              .flag = &default_cdrom     },
 233    { .driver = "virtio-serial-pci",    .flag = &default_virtcon   },
 234    { .driver = "virtio-serial",        .flag = &default_virtcon   },
 235    { .driver = "VGA",                  .flag = &default_vga       },
 236    { .driver = "isa-vga",              .flag = &default_vga       },
 237    { .driver = "cirrus-vga",           .flag = &default_vga       },
 238    { .driver = "isa-cirrus-vga",       .flag = &default_vga       },
 239    { .driver = "vmware-svga",          .flag = &default_vga       },
 240    { .driver = "qxl-vga",              .flag = &default_vga       },
 241    { .driver = "virtio-vga",           .flag = &default_vga       },
 242};
 243
 244static QemuOptsList qemu_rtc_opts = {
 245    .name = "rtc",
 246    .head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head),
 247    .desc = {
 248        {
 249            .name = "base",
 250            .type = QEMU_OPT_STRING,
 251        },{
 252            .name = "clock",
 253            .type = QEMU_OPT_STRING,
 254        },{
 255            .name = "driftfix",
 256            .type = QEMU_OPT_STRING,
 257        },
 258        { /* end of list */ }
 259    },
 260};
 261
 262static QemuOptsList qemu_sandbox_opts = {
 263    .name = "sandbox",
 264    .implied_opt_name = "enable",
 265    .head = QTAILQ_HEAD_INITIALIZER(qemu_sandbox_opts.head),
 266    .desc = {
 267        {
 268            .name = "enable",
 269            .type = QEMU_OPT_BOOL,
 270        },
 271        {
 272            .name = "obsolete",
 273            .type = QEMU_OPT_STRING,
 274        },
 275        {
 276            .name = "elevateprivileges",
 277            .type = QEMU_OPT_STRING,
 278        },
 279        {
 280            .name = "spawn",
 281            .type = QEMU_OPT_STRING,
 282        },
 283        {
 284            .name = "resourcecontrol",
 285            .type = QEMU_OPT_STRING,
 286        },
 287        { /* end of list */ }
 288    },
 289};
 290
 291static QemuOptsList qemu_option_rom_opts = {
 292    .name = "option-rom",
 293    .implied_opt_name = "romfile",
 294    .head = QTAILQ_HEAD_INITIALIZER(qemu_option_rom_opts.head),
 295    .desc = {
 296        {
 297            .name = "bootindex",
 298            .type = QEMU_OPT_NUMBER,
 299        }, {
 300            .name = "romfile",
 301            .type = QEMU_OPT_STRING,
 302        },
 303        { /* end of list */ }
 304    },
 305};
 306
 307static QemuOptsList qemu_machine_opts = {
 308    .name = "machine",
 309    .implied_opt_name = "type",
 310    .merge_lists = true,
 311    .head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head),
 312    .desc = {
 313        /*
 314         * no elements => accept any
 315         * sanity checking will happen later
 316         * when setting machine properties
 317         */
 318        { }
 319    },
 320};
 321
 322static QemuOptsList qemu_accel_opts = {
 323    .name = "accel",
 324    .implied_opt_name = "accel",
 325    .head = QTAILQ_HEAD_INITIALIZER(qemu_accel_opts.head),
 326    .merge_lists = true,
 327    .desc = {
 328        {
 329            .name = "accel",
 330            .type = QEMU_OPT_STRING,
 331            .help = "Select the type of accelerator",
 332        },
 333        {
 334            .name = "thread",
 335            .type = QEMU_OPT_STRING,
 336            .help = "Enable/disable multi-threaded TCG",
 337        },
 338        { /* end of list */ }
 339    },
 340};
 341
 342static QemuOptsList qemu_boot_opts = {
 343    .name = "boot-opts",
 344    .implied_opt_name = "order",
 345    .merge_lists = true,
 346    .head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head),
 347    .desc = {
 348        {
 349            .name = "order",
 350            .type = QEMU_OPT_STRING,
 351        }, {
 352            .name = "once",
 353            .type = QEMU_OPT_STRING,
 354        }, {
 355            .name = "menu",
 356            .type = QEMU_OPT_BOOL,
 357        }, {
 358            .name = "splash",
 359            .type = QEMU_OPT_STRING,
 360        }, {
 361            .name = "splash-time",
 362            .type = QEMU_OPT_STRING,
 363        }, {
 364            .name = "reboot-timeout",
 365            .type = QEMU_OPT_STRING,
 366        }, {
 367            .name = "strict",
 368            .type = QEMU_OPT_BOOL,
 369        },
 370        { /*End of list */ }
 371    },
 372};
 373
 374static QemuOptsList qemu_add_fd_opts = {
 375    .name = "add-fd",
 376    .head = QTAILQ_HEAD_INITIALIZER(qemu_add_fd_opts.head),
 377    .desc = {
 378        {
 379            .name = "fd",
 380            .type = QEMU_OPT_NUMBER,
 381            .help = "file descriptor of which a duplicate is added to fd set",
 382        },{
 383            .name = "set",
 384            .type = QEMU_OPT_NUMBER,
 385            .help = "ID of the fd set to add fd to",
 386        },{
 387            .name = "opaque",
 388            .type = QEMU_OPT_STRING,
 389            .help = "free-form string used to describe fd",
 390        },
 391        { /* end of list */ }
 392    },
 393};
 394
 395static QemuOptsList qemu_object_opts = {
 396    .name = "object",
 397    .implied_opt_name = "qom-type",
 398    .head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head),
 399    .desc = {
 400        { }
 401    },
 402};
 403
 404static QemuOptsList qemu_tpmdev_opts = {
 405    .name = "tpmdev",
 406    .implied_opt_name = "type",
 407    .head = QTAILQ_HEAD_INITIALIZER(qemu_tpmdev_opts.head),
 408    .desc = {
 409        /* options are defined in the TPM backends */
 410        { /* end of list */ }
 411    },
 412};
 413
 414static QemuOptsList qemu_realtime_opts = {
 415    .name = "realtime",
 416    .head = QTAILQ_HEAD_INITIALIZER(qemu_realtime_opts.head),
 417    .desc = {
 418        {
 419            .name = "mlock",
 420            .type = QEMU_OPT_BOOL,
 421        },
 422        { /* end of list */ }
 423    },
 424};
 425
 426static QemuOptsList qemu_msg_opts = {
 427    .name = "msg",
 428    .head = QTAILQ_HEAD_INITIALIZER(qemu_msg_opts.head),
 429    .desc = {
 430        {
 431            .name = "timestamp",
 432            .type = QEMU_OPT_BOOL,
 433        },
 434        { /* end of list */ }
 435    },
 436};
 437
 438static QemuOptsList qemu_name_opts = {
 439    .name = "name",
 440    .implied_opt_name = "guest",
 441    .merge_lists = true,
 442    .head = QTAILQ_HEAD_INITIALIZER(qemu_name_opts.head),
 443    .desc = {
 444        {
 445            .name = "guest",
 446            .type = QEMU_OPT_STRING,
 447            .help = "Sets the name of the guest.\n"
 448                    "This name will be displayed in the SDL window caption.\n"
 449                    "The name will also be used for the VNC server",
 450        }, {
 451            .name = "process",
 452            .type = QEMU_OPT_STRING,
 453            .help = "Sets the name of the QEMU process, as shown in top etc",
 454        }, {
 455            .name = "debug-threads",
 456            .type = QEMU_OPT_BOOL,
 457            .help = "When enabled, name the individual threads; defaults off.\n"
 458                    "NOTE: The thread names are for debugging and not a\n"
 459                    "stable API.",
 460        },
 461        { /* End of list */ }
 462    },
 463};
 464
 465static QemuOptsList qemu_mem_opts = {
 466    .name = "memory",
 467    .implied_opt_name = "size",
 468    .head = QTAILQ_HEAD_INITIALIZER(qemu_mem_opts.head),
 469    .merge_lists = true,
 470    .desc = {
 471        {
 472            .name = "size",
 473            .type = QEMU_OPT_SIZE,
 474        },
 475        {
 476            .name = "slots",
 477            .type = QEMU_OPT_NUMBER,
 478        },
 479        {
 480            .name = "maxmem",
 481            .type = QEMU_OPT_SIZE,
 482        },
 483        { /* end of list */ }
 484    },
 485};
 486
 487static QemuOptsList qemu_icount_opts = {
 488    .name = "icount",
 489    .implied_opt_name = "shift",
 490    .merge_lists = true,
 491    .head = QTAILQ_HEAD_INITIALIZER(qemu_icount_opts.head),
 492    .desc = {
 493        {
 494            .name = "shift",
 495            .type = QEMU_OPT_STRING,
 496        }, {
 497            .name = "align",
 498            .type = QEMU_OPT_BOOL,
 499        }, {
 500            .name = "sleep",
 501            .type = QEMU_OPT_BOOL,
 502        }, {
 503            .name = "rr",
 504            .type = QEMU_OPT_STRING,
 505        }, {
 506            .name = "rrfile",
 507            .type = QEMU_OPT_STRING,
 508        }, {
 509            .name = "rrsnapshot",
 510            .type = QEMU_OPT_STRING,
 511        },
 512        { /* end of list */ }
 513    },
 514};
 515
 516static QemuOptsList qemu_semihosting_config_opts = {
 517    .name = "semihosting-config",
 518    .implied_opt_name = "enable",
 519    .head = QTAILQ_HEAD_INITIALIZER(qemu_semihosting_config_opts.head),
 520    .desc = {
 521        {
 522            .name = "enable",
 523            .type = QEMU_OPT_BOOL,
 524        }, {
 525            .name = "target",
 526            .type = QEMU_OPT_STRING,
 527        }, {
 528            .name = "arg",
 529            .type = QEMU_OPT_STRING,
 530        },
 531        { /* end of list */ }
 532    },
 533};
 534
 535static QemuOptsList qemu_fw_cfg_opts = {
 536    .name = "fw_cfg",
 537    .implied_opt_name = "name",
 538    .head = QTAILQ_HEAD_INITIALIZER(qemu_fw_cfg_opts.head),
 539    .desc = {
 540        {
 541            .name = "name",
 542            .type = QEMU_OPT_STRING,
 543            .help = "Sets the fw_cfg name of the blob to be inserted",
 544        }, {
 545            .name = "file",
 546            .type = QEMU_OPT_STRING,
 547            .help = "Sets the name of the file from which\n"
 548                    "the fw_cfg blob will be loaded",
 549        }, {
 550            .name = "string",
 551            .type = QEMU_OPT_STRING,
 552            .help = "Sets content of the blob to be inserted from a string",
 553        },
 554        { /* end of list */ }
 555    },
 556};
 557
 558/**
 559 * Get machine options
 560 *
 561 * Returns: machine options (never null).
 562 */
 563QemuOpts *qemu_get_machine_opts(void)
 564{
 565    return qemu_find_opts_singleton("machine");
 566}
 567
 568const char *qemu_get_vm_name(void)
 569{
 570    return qemu_name;
 571}
 572
 573static void res_free(void)
 574{
 575    g_free(boot_splash_filedata);
 576    boot_splash_filedata = NULL;
 577}
 578
 579static int default_driver_check(void *opaque, QemuOpts *opts, Error **errp)
 580{
 581    const char *driver = qemu_opt_get(opts, "driver");
 582    int i;
 583
 584    if (!driver)
 585        return 0;
 586    for (i = 0; i < ARRAY_SIZE(default_list); i++) {
 587        if (strcmp(default_list[i].driver, driver) != 0)
 588            continue;
 589        *(default_list[i].flag) = 0;
 590    }
 591    return 0;
 592}
 593
 594/***********************************************************/
 595/* QEMU state */
 596
 597static RunState current_run_state = RUN_STATE_PRELAUNCH;
 598
 599/* We use RUN_STATE__MAX but any invalid value will do */
 600static RunState vmstop_requested = RUN_STATE__MAX;
 601static QemuMutex vmstop_lock;
 602
 603typedef struct {
 604    RunState from;
 605    RunState to;
 606} RunStateTransition;
 607
 608static const RunStateTransition runstate_transitions_def[] = {
 609    /*     from      ->     to      */
 610    { RUN_STATE_DEBUG, RUN_STATE_RUNNING },
 611    { RUN_STATE_DEBUG, RUN_STATE_FINISH_MIGRATE },
 612    { RUN_STATE_DEBUG, RUN_STATE_PRELAUNCH },
 613
 614    { RUN_STATE_INMIGRATE, RUN_STATE_INTERNAL_ERROR },
 615    { RUN_STATE_INMIGRATE, RUN_STATE_IO_ERROR },
 616    { RUN_STATE_INMIGRATE, RUN_STATE_PAUSED },
 617    { RUN_STATE_INMIGRATE, RUN_STATE_RUNNING },
 618    { RUN_STATE_INMIGRATE, RUN_STATE_SHUTDOWN },
 619    { RUN_STATE_INMIGRATE, RUN_STATE_SUSPENDED },
 620    { RUN_STATE_INMIGRATE, RUN_STATE_WATCHDOG },
 621    { RUN_STATE_INMIGRATE, RUN_STATE_GUEST_PANICKED },
 622    { RUN_STATE_INMIGRATE, RUN_STATE_FINISH_MIGRATE },
 623    { RUN_STATE_INMIGRATE, RUN_STATE_PRELAUNCH },
 624    { RUN_STATE_INMIGRATE, RUN_STATE_POSTMIGRATE },
 625    { RUN_STATE_INMIGRATE, RUN_STATE_COLO },
 626
 627    { RUN_STATE_INTERNAL_ERROR, RUN_STATE_PAUSED },
 628    { RUN_STATE_INTERNAL_ERROR, RUN_STATE_FINISH_MIGRATE },
 629    { RUN_STATE_INTERNAL_ERROR, RUN_STATE_PRELAUNCH },
 630
 631    { RUN_STATE_IO_ERROR, RUN_STATE_RUNNING },
 632    { RUN_STATE_IO_ERROR, RUN_STATE_FINISH_MIGRATE },
 633    { RUN_STATE_IO_ERROR, RUN_STATE_PRELAUNCH },
 634
 635    { RUN_STATE_PAUSED, RUN_STATE_RUNNING },
 636    { RUN_STATE_PAUSED, RUN_STATE_FINISH_MIGRATE },
 637    { RUN_STATE_PAUSED, RUN_STATE_POSTMIGRATE },
 638    { RUN_STATE_PAUSED, RUN_STATE_PRELAUNCH },
 639    { RUN_STATE_PAUSED, RUN_STATE_COLO},
 640
 641    { RUN_STATE_POSTMIGRATE, RUN_STATE_RUNNING },
 642    { RUN_STATE_POSTMIGRATE, RUN_STATE_FINISH_MIGRATE },
 643    { RUN_STATE_POSTMIGRATE, RUN_STATE_PRELAUNCH },
 644
 645    { RUN_STATE_PRELAUNCH, RUN_STATE_RUNNING },
 646    { RUN_STATE_PRELAUNCH, RUN_STATE_FINISH_MIGRATE },
 647    { RUN_STATE_PRELAUNCH, RUN_STATE_INMIGRATE },
 648
 649    { RUN_STATE_FINISH_MIGRATE, RUN_STATE_RUNNING },
 650    { RUN_STATE_FINISH_MIGRATE, RUN_STATE_PAUSED },
 651    { RUN_STATE_FINISH_MIGRATE, RUN_STATE_POSTMIGRATE },
 652    { RUN_STATE_FINISH_MIGRATE, RUN_STATE_PRELAUNCH },
 653    { RUN_STATE_FINISH_MIGRATE, RUN_STATE_COLO},
 654
 655    { RUN_STATE_RESTORE_VM, RUN_STATE_RUNNING },
 656    { RUN_STATE_RESTORE_VM, RUN_STATE_PRELAUNCH },
 657
 658    { RUN_STATE_COLO, RUN_STATE_RUNNING },
 659
 660    { RUN_STATE_RUNNING, RUN_STATE_DEBUG },
 661    { RUN_STATE_RUNNING, RUN_STATE_INTERNAL_ERROR },
 662    { RUN_STATE_RUNNING, RUN_STATE_IO_ERROR },
 663    { RUN_STATE_RUNNING, RUN_STATE_PAUSED },
 664    { RUN_STATE_RUNNING, RUN_STATE_FINISH_MIGRATE },
 665    { RUN_STATE_RUNNING, RUN_STATE_RESTORE_VM },
 666    { RUN_STATE_RUNNING, RUN_STATE_SAVE_VM },
 667    { RUN_STATE_RUNNING, RUN_STATE_SHUTDOWN },
 668    { RUN_STATE_RUNNING, RUN_STATE_WATCHDOG },
 669    { RUN_STATE_RUNNING, RUN_STATE_GUEST_PANICKED },
 670    { RUN_STATE_RUNNING, RUN_STATE_COLO},
 671
 672    { RUN_STATE_SAVE_VM, RUN_STATE_RUNNING },
 673
 674    { RUN_STATE_SHUTDOWN, RUN_STATE_PAUSED },
 675    { RUN_STATE_SHUTDOWN, RUN_STATE_FINISH_MIGRATE },
 676    { RUN_STATE_SHUTDOWN, RUN_STATE_PRELAUNCH },
 677
 678    { RUN_STATE_DEBUG, RUN_STATE_SUSPENDED },
 679    { RUN_STATE_RUNNING, RUN_STATE_SUSPENDED },
 680    { RUN_STATE_SUSPENDED, RUN_STATE_RUNNING },
 681    { RUN_STATE_SUSPENDED, RUN_STATE_FINISH_MIGRATE },
 682    { RUN_STATE_SUSPENDED, RUN_STATE_PRELAUNCH },
 683    { RUN_STATE_SUSPENDED, RUN_STATE_COLO},
 684
 685    { RUN_STATE_WATCHDOG, RUN_STATE_RUNNING },
 686    { RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE },
 687    { RUN_STATE_WATCHDOG, RUN_STATE_PRELAUNCH },
 688    { RUN_STATE_WATCHDOG, RUN_STATE_COLO},
 689
 690    { RUN_STATE_GUEST_PANICKED, RUN_STATE_RUNNING },
 691    { RUN_STATE_GUEST_PANICKED, RUN_STATE_FINISH_MIGRATE },
 692    { RUN_STATE_GUEST_PANICKED, RUN_STATE_PRELAUNCH },
 693
 694    { RUN_STATE__MAX, RUN_STATE__MAX },
 695};
 696
 697static bool runstate_valid_transitions[RUN_STATE__MAX][RUN_STATE__MAX];
 698
 699bool runstate_check(RunState state)
 700{
 701    return current_run_state == state;
 702}
 703
 704bool runstate_store(char *str, size_t size)
 705{
 706    const char *state = RunState_str(current_run_state);
 707    size_t len = strlen(state) + 1;
 708
 709    if (len > size) {
 710        return false;
 711    }
 712    memcpy(str, state, len);
 713    return true;
 714}
 715
 716static void runstate_init(void)
 717{
 718    const RunStateTransition *p;
 719
 720    memset(&runstate_valid_transitions, 0, sizeof(runstate_valid_transitions));
 721    for (p = &runstate_transitions_def[0]; p->from != RUN_STATE__MAX; p++) {
 722        runstate_valid_transitions[p->from][p->to] = true;
 723    }
 724
 725    qemu_mutex_init(&vmstop_lock);
 726}
 727
 728/* This function will abort() on invalid state transitions */
 729void runstate_set(RunState new_state)
 730{
 731    assert(new_state < RUN_STATE__MAX);
 732
 733    if (current_run_state == new_state) {
 734        return;
 735    }
 736
 737    if (!runstate_valid_transitions[current_run_state][new_state]) {
 738        error_report("invalid runstate transition: '%s' -> '%s'",
 739                     RunState_str(current_run_state),
 740                     RunState_str(new_state));
 741        abort();
 742    }
 743    trace_runstate_set(new_state);
 744    current_run_state = new_state;
 745}
 746
 747int runstate_is_running(void)
 748{
 749    return runstate_check(RUN_STATE_RUNNING);
 750}
 751
 752bool runstate_needs_reset(void)
 753{
 754    return runstate_check(RUN_STATE_INTERNAL_ERROR) ||
 755        runstate_check(RUN_STATE_SHUTDOWN);
 756}
 757
 758StatusInfo *qmp_query_status(Error **errp)
 759{
 760    StatusInfo *info = g_malloc0(sizeof(*info));
 761
 762    info->running = runstate_is_running();
 763    info->singlestep = singlestep;
 764    info->status = current_run_state;
 765
 766    return info;
 767}
 768
 769bool qemu_vmstop_requested(RunState *r)
 770{
 771    qemu_mutex_lock(&vmstop_lock);
 772    *r = vmstop_requested;
 773    vmstop_requested = RUN_STATE__MAX;
 774    qemu_mutex_unlock(&vmstop_lock);
 775    return *r < RUN_STATE__MAX;
 776}
 777
 778void qemu_system_vmstop_request_prepare(void)
 779{
 780    qemu_mutex_lock(&vmstop_lock);
 781}
 782
 783void qemu_system_vmstop_request(RunState state)
 784{
 785    vmstop_requested = state;
 786    qemu_mutex_unlock(&vmstop_lock);
 787    qemu_notify_event();
 788}
 789
 790/***********************************************************/
 791/* real time host monotonic timer */
 792
 793static time_t qemu_time(void)
 794{
 795    return qemu_clock_get_ms(QEMU_CLOCK_HOST) / 1000;
 796}
 797
 798/***********************************************************/
 799/* host time/date access */
 800void qemu_get_timedate(struct tm *tm, int offset)
 801{
 802    time_t ti = qemu_time();
 803
 804    ti += offset;
 805    if (rtc_date_offset == -1) {
 806        if (rtc_utc)
 807            gmtime_r(&ti, tm);
 808        else
 809            localtime_r(&ti, tm);
 810    } else {
 811        ti -= rtc_date_offset;
 812        gmtime_r(&ti, tm);
 813    }
 814}
 815
 816int qemu_timedate_diff(struct tm *tm)
 817{
 818    time_t seconds;
 819
 820    if (rtc_date_offset == -1)
 821        if (rtc_utc)
 822            seconds = mktimegm(tm);
 823        else {
 824            struct tm tmp = *tm;
 825            tmp.tm_isdst = -1; /* use timezone to figure it out */
 826            seconds = mktime(&tmp);
 827        }
 828    else
 829        seconds = mktimegm(tm) + rtc_date_offset;
 830
 831    return seconds - qemu_time();
 832}
 833
 834static void configure_rtc_date_offset(const char *startdate, int legacy)
 835{
 836    time_t rtc_start_date;
 837    struct tm tm;
 838
 839    if (!strcmp(startdate, "now") && legacy) {
 840        rtc_date_offset = -1;
 841    } else {
 842        if (sscanf(startdate, "%d-%d-%dT%d:%d:%d",
 843                   &tm.tm_year,
 844                   &tm.tm_mon,
 845                   &tm.tm_mday,
 846                   &tm.tm_hour,
 847                   &tm.tm_min,
 848                   &tm.tm_sec) == 6) {
 849            /* OK */
 850        } else if (sscanf(startdate, "%d-%d-%d",
 851                          &tm.tm_year,
 852                          &tm.tm_mon,
 853                          &tm.tm_mday) == 3) {
 854            tm.tm_hour = 0;
 855            tm.tm_min = 0;
 856            tm.tm_sec = 0;
 857        } else {
 858            goto date_fail;
 859        }
 860        tm.tm_year -= 1900;
 861        tm.tm_mon--;
 862        rtc_start_date = mktimegm(&tm);
 863        if (rtc_start_date == -1) {
 864        date_fail:
 865            error_report("invalid date format");
 866            error_printf("valid formats: "
 867                         "'2006-06-17T16:01:21' or '2006-06-17'\n");
 868            exit(1);
 869        }
 870        rtc_date_offset = qemu_time() - rtc_start_date;
 871    }
 872}
 873
 874static void configure_rtc(QemuOpts *opts)
 875{
 876    const char *value;
 877
 878    value = qemu_opt_get(opts, "base");
 879    if (value) {
 880        if (!strcmp(value, "utc")) {
 881            rtc_utc = 1;
 882        } else if (!strcmp(value, "localtime")) {
 883            Error *blocker = NULL;
 884            rtc_utc = 0;
 885            error_setg(&blocker, QERR_REPLAY_NOT_SUPPORTED,
 886                      "-rtc base=localtime");
 887            replay_add_blocker(blocker);
 888        } else {
 889            configure_rtc_date_offset(value, 0);
 890        }
 891    }
 892    value = qemu_opt_get(opts, "clock");
 893    if (value) {
 894        if (!strcmp(value, "host")) {
 895            rtc_clock = QEMU_CLOCK_HOST;
 896        } else if (!strcmp(value, "rt")) {
 897            rtc_clock = QEMU_CLOCK_REALTIME;
 898        } else if (!strcmp(value, "vm")) {
 899            rtc_clock = QEMU_CLOCK_VIRTUAL;
 900        } else {
 901            error_report("invalid option value '%s'", value);
 902            exit(1);
 903        }
 904    }
 905    value = qemu_opt_get(opts, "driftfix");
 906    if (value) {
 907        if (!strcmp(value, "slew")) {
 908            static GlobalProperty slew_lost_ticks = {
 909                .driver   = "mc146818rtc",
 910                .property = "lost_tick_policy",
 911                .value    = "slew",
 912            };
 913
 914            qdev_prop_register_global(&slew_lost_ticks);
 915        } else if (!strcmp(value, "none")) {
 916            /* discard is default */
 917        } else {
 918            error_report("invalid option value '%s'", value);
 919            exit(1);
 920        }
 921    }
 922}
 923
 924/***********************************************************/
 925/* Bluetooth support */
 926static int nb_hcis;
 927static int cur_hci;
 928static struct HCIInfo *hci_table[MAX_NICS];
 929
 930struct HCIInfo *qemu_next_hci(void)
 931{
 932    if (cur_hci == nb_hcis)
 933        return &null_hci;
 934
 935    return hci_table[cur_hci++];
 936}
 937
 938static int bt_hci_parse(const char *str)
 939{
 940    struct HCIInfo *hci;
 941    bdaddr_t bdaddr;
 942
 943    if (nb_hcis >= MAX_NICS) {
 944        error_report("too many bluetooth HCIs (max %i)", MAX_NICS);
 945        return -1;
 946    }
 947
 948    hci = hci_init(str);
 949    if (!hci)
 950        return -1;
 951
 952    bdaddr.b[0] = 0x52;
 953    bdaddr.b[1] = 0x54;
 954    bdaddr.b[2] = 0x00;
 955    bdaddr.b[3] = 0x12;
 956    bdaddr.b[4] = 0x34;
 957    bdaddr.b[5] = 0x56 + nb_hcis;
 958    hci->bdaddr_set(hci, bdaddr.b);
 959
 960    hci_table[nb_hcis++] = hci;
 961
 962    return 0;
 963}
 964
 965static void bt_vhci_add(int vlan_id)
 966{
 967    struct bt_scatternet_s *vlan = qemu_find_bt_vlan(vlan_id);
 968
 969    if (!vlan->slave)
 970        warn_report("adding a VHCI to an empty scatternet %i",
 971                    vlan_id);
 972
 973    bt_vhci_init(bt_new_hci(vlan));
 974}
 975
 976static struct bt_device_s *bt_device_add(const char *opt)
 977{
 978    struct bt_scatternet_s *vlan;
 979    int vlan_id = 0;
 980    char *endp = strstr(opt, ",vlan=");
 981    int len = (endp ? endp - opt : strlen(opt)) + 1;
 982    char devname[10];
 983
 984    pstrcpy(devname, MIN(sizeof(devname), len), opt);
 985
 986    if (endp) {
 987        vlan_id = strtol(endp + 6, &endp, 0);
 988        if (*endp) {
 989            error_report("unrecognised bluetooth vlan Id");
 990            return 0;
 991        }
 992    }
 993
 994    vlan = qemu_find_bt_vlan(vlan_id);
 995
 996    if (!vlan->slave)
 997        warn_report("adding a slave device to an empty scatternet %i",
 998                    vlan_id);
 999
1000    if (!strcmp(devname, "keyboard"))
1001        return bt_keyboard_init(vlan);
1002
1003    error_report("unsupported bluetooth device '%s'", devname);
1004    return 0;
1005}
1006
1007static int bt_parse(const char *opt)
1008{
1009    const char *endp, *p;
1010    int vlan;
1011
1012    if (strstart(opt, "hci", &endp)) {
1013        if (!*endp || *endp == ',') {
1014            if (*endp)
1015                if (!strstart(endp, ",vlan=", 0))
1016                    opt = endp + 1;
1017
1018            return bt_hci_parse(opt);
1019       }
1020    } else if (strstart(opt, "vhci", &endp)) {
1021        if (!*endp || *endp == ',') {
1022            if (*endp) {
1023                if (strstart(endp, ",vlan=", &p)) {
1024                    vlan = strtol(p, (char **) &endp, 0);
1025                    if (*endp) {
1026                        error_report("bad scatternet '%s'", p);
1027                        return 1;
1028                    }
1029                } else {
1030                    error_report("bad parameter '%s'", endp + 1);
1031                    return 1;
1032                }
1033            } else
1034                vlan = 0;
1035
1036            bt_vhci_add(vlan);
1037            return 0;
1038        }
1039    } else if (strstart(opt, "device:", &endp))
1040        return !bt_device_add(endp);
1041
1042    error_report("bad bluetooth parameter '%s'", opt);
1043    return 1;
1044}
1045
1046static int parse_sandbox(void *opaque, QemuOpts *opts, Error **errp)
1047{
1048    if (qemu_opt_get_bool(opts, "enable", false)) {
1049#ifdef CONFIG_SECCOMP
1050        uint32_t seccomp_opts = QEMU_SECCOMP_SET_DEFAULT
1051                | QEMU_SECCOMP_SET_OBSOLETE;
1052        const char *value = NULL;
1053
1054        value = qemu_opt_get(opts, "obsolete");
1055        if (value) {
1056            if (g_str_equal(value, "allow")) {
1057                seccomp_opts &= ~QEMU_SECCOMP_SET_OBSOLETE;
1058            } else if (g_str_equal(value, "deny")) {
1059                /* this is the default option, this if is here
1060                 * to provide a little bit of consistency for
1061                 * the command line */
1062            } else {
1063                error_report("invalid argument for obsolete");
1064                return -1;
1065            }
1066        }
1067
1068        value = qemu_opt_get(opts, "elevateprivileges");
1069        if (value) {
1070            if (g_str_equal(value, "deny")) {
1071                seccomp_opts |= QEMU_SECCOMP_SET_PRIVILEGED;
1072            } else if (g_str_equal(value, "children")) {
1073                seccomp_opts |= QEMU_SECCOMP_SET_PRIVILEGED;
1074
1075                /* calling prctl directly because we're
1076                 * not sure if host has CAP_SYS_ADMIN set*/
1077                if (prctl(PR_SET_NO_NEW_PRIVS, 1)) {
1078                    error_report("failed to set no_new_privs "
1079                                 "aborting");
1080                    return -1;
1081                }
1082            } else if (g_str_equal(value, "allow")) {
1083                /* default value */
1084            } else {
1085                error_report("invalid argument for elevateprivileges");
1086                return -1;
1087            }
1088        }
1089
1090        value = qemu_opt_get(opts, "spawn");
1091        if (value) {
1092            if (g_str_equal(value, "deny")) {
1093                seccomp_opts |= QEMU_SECCOMP_SET_SPAWN;
1094            } else if (g_str_equal(value, "allow")) {
1095                /* default value */
1096            } else {
1097                error_report("invalid argument for spawn");
1098                return -1;
1099            }
1100        }
1101
1102        value = qemu_opt_get(opts, "resourcecontrol");
1103        if (value) {
1104            if (g_str_equal(value, "deny")) {
1105                seccomp_opts |= QEMU_SECCOMP_SET_RESOURCECTL;
1106            } else if (g_str_equal(value, "allow")) {
1107                /* default value */
1108            } else {
1109                error_report("invalid argument for resourcecontrol");
1110                return -1;
1111            }
1112        }
1113
1114        if (seccomp_start(seccomp_opts) < 0) {
1115            error_report("failed to install seccomp syscall filter "
1116                         "in the kernel");
1117            return -1;
1118        }
1119#else
1120        error_report("seccomp support is disabled");
1121        return -1;
1122#endif
1123    }
1124
1125    return 0;
1126}
1127
1128static int parse_name(void *opaque, QemuOpts *opts, Error **errp)
1129{
1130    const char *proc_name;
1131
1132    if (qemu_opt_get(opts, "debug-threads")) {
1133        qemu_thread_naming(qemu_opt_get_bool(opts, "debug-threads", false));
1134    }
1135    qemu_name = qemu_opt_get(opts, "guest");
1136
1137    proc_name = qemu_opt_get(opts, "process");
1138    if (proc_name) {
1139        os_set_proc_name(proc_name);
1140    }
1141
1142    return 0;
1143}
1144
1145bool defaults_enabled(void)
1146{
1147    return has_defaults;
1148}
1149
1150#ifndef _WIN32
1151static int parse_add_fd(void *opaque, QemuOpts *opts, Error **errp)
1152{
1153    int fd, dupfd, flags;
1154    int64_t fdset_id;
1155    const char *fd_opaque = NULL;
1156    AddfdInfo *fdinfo;
1157
1158    fd = qemu_opt_get_number(opts, "fd", -1);
1159    fdset_id = qemu_opt_get_number(opts, "set", -1);
1160    fd_opaque = qemu_opt_get(opts, "opaque");
1161
1162    if (fd < 0) {
1163        error_report("fd option is required and must be non-negative");
1164        return -1;
1165    }
1166
1167    if (fd <= STDERR_FILENO) {
1168        error_report("fd cannot be a standard I/O stream");
1169        return -1;
1170    }
1171
1172    /*
1173     * All fds inherited across exec() necessarily have FD_CLOEXEC
1174     * clear, while qemu sets FD_CLOEXEC on all other fds used internally.
1175     */
1176    flags = fcntl(fd, F_GETFD);
1177    if (flags == -1 || (flags & FD_CLOEXEC)) {
1178        error_report("fd is not valid or already in use");
1179        return -1;
1180    }
1181
1182    if (fdset_id < 0) {
1183        error_report("set option is required and must be non-negative");
1184        return -1;
1185    }
1186
1187#ifdef F_DUPFD_CLOEXEC
1188    dupfd = fcntl(fd, F_DUPFD_CLOEXEC, 0);
1189#else
1190    dupfd = dup(fd);
1191    if (dupfd != -1) {
1192        qemu_set_cloexec(dupfd);
1193    }
1194#endif
1195    if (dupfd == -1) {
1196        error_report("error duplicating fd: %s", strerror(errno));
1197        return -1;
1198    }
1199
1200    /* add the duplicate fd, and optionally the opaque string, to the fd set */
1201    fdinfo = monitor_fdset_add_fd(dupfd, true, fdset_id, !!fd_opaque, fd_opaque,
1202                                  &error_abort);
1203    g_free(fdinfo);
1204
1205    return 0;
1206}
1207
1208static int cleanup_add_fd(void *opaque, QemuOpts *opts, Error **errp)
1209{
1210    int fd;
1211
1212    fd = qemu_opt_get_number(opts, "fd", -1);
1213    close(fd);
1214
1215    return 0;
1216}
1217#endif
1218
1219/***********************************************************/
1220/* QEMU Block devices */
1221
1222#define HD_OPTS "media=disk"
1223#define CDROM_OPTS "media=cdrom"
1224#define FD_OPTS ""
1225#define PFLASH_OPTS ""
1226#define MTD_OPTS ""
1227#define SD_OPTS ""
1228
1229static int drive_init_func(void *opaque, QemuOpts *opts, Error **errp)
1230{
1231    BlockInterfaceType *block_default_type = opaque;
1232
1233    return drive_new(opts, *block_default_type) == NULL;
1234}
1235
1236static int drive_enable_snapshot(void *opaque, QemuOpts *opts, Error **errp)
1237{
1238    if (qemu_opt_get(opts, "snapshot") == NULL) {
1239        qemu_opt_set(opts, "snapshot", "on", &error_abort);
1240    }
1241    return 0;
1242}
1243
1244static void default_drive(int enable, int snapshot, BlockInterfaceType type,
1245                          int index, const char *optstr)
1246{
1247    QemuOpts *opts;
1248    DriveInfo *dinfo;
1249
1250    if (!enable || drive_get_by_index(type, index)) {
1251        return;
1252    }
1253
1254    opts = drive_add(type, index, NULL, optstr);
1255    if (snapshot) {
1256        drive_enable_snapshot(NULL, opts, NULL);
1257    }
1258
1259    dinfo = drive_new(opts, type);
1260    if (!dinfo) {
1261        exit(1);
1262    }
1263    dinfo->is_default = true;
1264
1265}
1266
1267static QemuOptsList qemu_smp_opts = {
1268    .name = "smp-opts",
1269    .implied_opt_name = "cpus",
1270    .merge_lists = true,
1271    .head = QTAILQ_HEAD_INITIALIZER(qemu_smp_opts.head),
1272    .desc = {
1273        {
1274            .name = "cpus",
1275            .type = QEMU_OPT_NUMBER,
1276        }, {
1277            .name = "sockets",
1278            .type = QEMU_OPT_NUMBER,
1279        }, {
1280            .name = "cores",
1281            .type = QEMU_OPT_NUMBER,
1282        }, {
1283            .name = "threads",
1284            .type = QEMU_OPT_NUMBER,
1285        }, {
1286            .name = "maxcpus",
1287            .type = QEMU_OPT_NUMBER,
1288        },
1289        { /*End of list */ }
1290    },
1291};
1292
1293static void smp_parse(QemuOpts *opts)
1294{
1295    if (opts) {
1296        unsigned cpus    = qemu_opt_get_number(opts, "cpus", 0);
1297        unsigned sockets = qemu_opt_get_number(opts, "sockets", 0);
1298        unsigned cores   = qemu_opt_get_number(opts, "cores", 0);
1299        unsigned threads = qemu_opt_get_number(opts, "threads", 0);
1300
1301        /* compute missing values, prefer sockets over cores over threads */
1302        if (cpus == 0 || sockets == 0) {
1303            sockets = sockets > 0 ? sockets : 1;
1304            cores = cores > 0 ? cores : 1;
1305            threads = threads > 0 ? threads : 1;
1306            if (cpus == 0) {
1307                cpus = cores * threads * sockets;
1308            }
1309        } else if (cores == 0) {
1310            threads = threads > 0 ? threads : 1;
1311            cores = cpus / (sockets * threads);
1312            cores = cores > 0 ? cores : 1;
1313        } else if (threads == 0) {
1314            threads = cpus / (cores * sockets);
1315            threads = threads > 0 ? threads : 1;
1316        } else if (sockets * cores * threads < cpus) {
1317            error_report("cpu topology: "
1318                         "sockets (%u) * cores (%u) * threads (%u) < "
1319                         "smp_cpus (%u)",
1320                         sockets, cores, threads, cpus);
1321            exit(1);
1322        }
1323
1324        max_cpus = qemu_opt_get_number(opts, "maxcpus", cpus);
1325
1326        if (max_cpus < cpus) {
1327            error_report("maxcpus must be equal to or greater than smp");
1328            exit(1);
1329        }
1330
1331        if (sockets * cores * threads > max_cpus) {
1332            error_report("cpu topology: "
1333                         "sockets (%u) * cores (%u) * threads (%u) > "
1334                         "maxcpus (%u)",
1335                         sockets, cores, threads, max_cpus);
1336            exit(1);
1337        }
1338
1339        smp_cpus = cpus;
1340        smp_cores = cores;
1341        smp_threads = threads;
1342    }
1343
1344    if (smp_cpus > 1) {
1345        Error *blocker = NULL;
1346        error_setg(&blocker, QERR_REPLAY_NOT_SUPPORTED, "smp");
1347        replay_add_blocker(blocker);
1348    }
1349}
1350
1351static void realtime_init(void)
1352{
1353    if (enable_mlock) {
1354        if (os_mlock() < 0) {
1355            error_report("locking memory failed");
1356            exit(1);
1357        }
1358    }
1359}
1360
1361
1362static void configure_msg(QemuOpts *opts)
1363{
1364    enable_timestamp_msg = qemu_opt_get_bool(opts, "timestamp", true);
1365}
1366
1367/***********************************************************/
1368/* Semihosting */
1369
1370typedef struct SemihostingConfig {
1371    bool enabled;
1372    SemihostingTarget target;
1373    const char **argv;
1374    int argc;
1375    const char *cmdline; /* concatenated argv */
1376} SemihostingConfig;
1377
1378static SemihostingConfig semihosting;
1379
1380bool semihosting_enabled(void)
1381{
1382    return semihosting.enabled;
1383}
1384
1385SemihostingTarget semihosting_get_target(void)
1386{
1387    return semihosting.target;
1388}
1389
1390const char *semihosting_get_arg(int i)
1391{
1392    if (i >= semihosting.argc) {
1393        return NULL;
1394    }
1395    return semihosting.argv[i];
1396}
1397
1398int semihosting_get_argc(void)
1399{
1400    return semihosting.argc;
1401}
1402
1403const char *semihosting_get_cmdline(void)
1404{
1405    if (semihosting.cmdline == NULL && semihosting.argc > 0) {
1406        semihosting.cmdline = g_strjoinv(" ", (gchar **)semihosting.argv);
1407    }
1408    return semihosting.cmdline;
1409}
1410
1411static int add_semihosting_arg(void *opaque,
1412                               const char *name, const char *val,
1413                               Error **errp)
1414{
1415    SemihostingConfig *s = opaque;
1416    if (strcmp(name, "arg") == 0) {
1417        s->argc++;
1418        /* one extra element as g_strjoinv() expects NULL-terminated array */
1419        s->argv = g_realloc(s->argv, (s->argc + 1) * sizeof(void *));
1420        s->argv[s->argc - 1] = val;
1421        s->argv[s->argc] = NULL;
1422    }
1423    return 0;
1424}
1425
1426/* Use strings passed via -kernel/-append to initialize semihosting.argv[] */
1427static inline void semihosting_arg_fallback(const char *file, const char *cmd)
1428{
1429    char *cmd_token;
1430
1431    /* argv[0] */
1432    add_semihosting_arg(&semihosting, "arg", file, NULL);
1433
1434    /* split -append and initialize argv[1..n] */
1435    cmd_token = strtok(g_strdup(cmd), " ");
1436    while (cmd_token) {
1437        add_semihosting_arg(&semihosting, "arg", cmd_token, NULL);
1438        cmd_token = strtok(NULL, " ");
1439    }
1440}
1441
1442/* Now we still need this for compatibility with XEN. */
1443bool has_igd_gfx_passthru;
1444static void igd_gfx_passthru(void)
1445{
1446    has_igd_gfx_passthru = current_machine->igd_gfx_passthru;
1447}
1448
1449/***********************************************************/
1450/* USB devices */
1451
1452static int usb_device_add(const char *devname)
1453{
1454    USBDevice *dev = NULL;
1455#ifndef CONFIG_LINUX
1456    const char *p;
1457#endif
1458
1459    if (!machine_usb(current_machine)) {
1460        return -1;
1461    }
1462
1463    /* drivers with .usbdevice_name entry in USBDeviceInfo */
1464    dev = usbdevice_create(devname);
1465    if (dev)
1466        goto done;
1467
1468    /* the other ones */
1469#ifndef CONFIG_LINUX
1470    /* only the linux version is qdev-ified, usb-bsd still needs this */
1471    if (strstart(devname, "host:", &p)) {
1472        dev = usb_host_device_open(usb_bus_find(-1), p);
1473    }
1474#endif
1475    if (!dev)
1476        return -1;
1477
1478done:
1479    return 0;
1480}
1481
1482static int usb_device_del(const char *devname)
1483{
1484    int bus_num, addr;
1485    const char *p;
1486
1487    if (strstart(devname, "host:", &p)) {
1488        return -1;
1489    }
1490
1491    if (!machine_usb(current_machine)) {
1492        return -1;
1493    }
1494
1495    p = strchr(devname, '.');
1496    if (!p)
1497        return -1;
1498    bus_num = strtoul(devname, NULL, 0);
1499    addr = strtoul(p + 1, NULL, 0);
1500
1501    return usb_device_delete_addr(bus_num, addr);
1502}
1503
1504static int usb_parse(const char *cmdline)
1505{
1506    int r;
1507    r = usb_device_add(cmdline);
1508    if (r < 0) {
1509        error_report("could not add USB device '%s'", cmdline);
1510    }
1511    return r;
1512}
1513
1514void hmp_usb_add(Monitor *mon, const QDict *qdict)
1515{
1516    const char *devname = qdict_get_str(qdict, "devname");
1517
1518    error_report("usb_add is deprecated, please use device_add instead");
1519
1520    if (usb_device_add(devname) < 0) {
1521        error_report("could not add USB device '%s'", devname);
1522    }
1523}
1524
1525void hmp_usb_del(Monitor *mon, const QDict *qdict)
1526{
1527    const char *devname = qdict_get_str(qdict, "devname");
1528
1529    error_report("usb_del is deprecated, please use device_del instead");
1530
1531    if (usb_device_del(devname) < 0) {
1532        error_report("could not delete USB device '%s'", devname);
1533    }
1534}
1535
1536/***********************************************************/
1537/* machine registration */
1538
1539MachineState *current_machine;
1540
1541static MachineClass *find_machine(const char *name)
1542{
1543    GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
1544    MachineClass *mc = NULL;
1545
1546    for (el = machines; el; el = el->next) {
1547        MachineClass *temp = el->data;
1548
1549        if (!strcmp(temp->name, name)) {
1550            mc = temp;
1551            break;
1552        }
1553        if (temp->alias &&
1554            !strcmp(temp->alias, name)) {
1555            mc = temp;
1556            break;
1557        }
1558    }
1559
1560    g_slist_free(machines);
1561    return mc;
1562}
1563
1564MachineClass *find_default_machine(void)
1565{
1566    GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
1567    MachineClass *mc = NULL;
1568
1569    for (el = machines; el; el = el->next) {
1570        MachineClass *temp = el->data;
1571
1572        if (temp->is_default) {
1573            mc = temp;
1574            break;
1575        }
1576    }
1577
1578    g_slist_free(machines);
1579    return mc;
1580}
1581
1582MachineInfoList *qmp_query_machines(Error **errp)
1583{
1584    GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
1585    MachineInfoList *mach_list = NULL;
1586
1587    for (el = machines; el; el = el->next) {
1588        MachineClass *mc = el->data;
1589        MachineInfoList *entry;
1590        MachineInfo *info;
1591
1592        info = g_malloc0(sizeof(*info));
1593        if (mc->is_default) {
1594            info->has_is_default = true;
1595            info->is_default = true;
1596        }
1597
1598        if (mc->alias) {
1599            info->has_alias = true;
1600            info->alias = g_strdup(mc->alias);
1601        }
1602
1603        info->name = g_strdup(mc->name);
1604        info->cpu_max = !mc->max_cpus ? 1 : mc->max_cpus;
1605        info->hotpluggable_cpus = mc->has_hotpluggable_cpus;
1606
1607        entry = g_malloc0(sizeof(*entry));
1608        entry->value = info;
1609        entry->next = mach_list;
1610        mach_list = entry;
1611    }
1612
1613    g_slist_free(machines);
1614    return mach_list;
1615}
1616
1617static int machine_help_func(QemuOpts *opts, MachineState *machine)
1618{
1619    ObjectProperty *prop;
1620    ObjectPropertyIterator iter;
1621
1622    if (!qemu_opt_has_help_opt(opts)) {
1623        return 0;
1624    }
1625
1626    object_property_iter_init(&iter, OBJECT(machine));
1627    while ((prop = object_property_iter_next(&iter))) {
1628        if (!prop->set) {
1629            continue;
1630        }
1631
1632        error_printf("%s.%s=%s", MACHINE_GET_CLASS(machine)->name,
1633                     prop->name, prop->type);
1634        if (prop->description) {
1635            error_printf(" (%s)\n", prop->description);
1636        } else {
1637            error_printf("\n");
1638        }
1639    }
1640
1641    return 1;
1642}
1643
1644/***********************************************************/
1645/* main execution loop */
1646
1647struct vm_change_state_entry {
1648    VMChangeStateHandler *cb;
1649    void *opaque;
1650    QLIST_ENTRY (vm_change_state_entry) entries;
1651};
1652
1653static QLIST_HEAD(vm_change_state_head, vm_change_state_entry) vm_change_state_head;
1654
1655VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
1656                                                     void *opaque)
1657{
1658    VMChangeStateEntry *e;
1659
1660    e = g_malloc0(sizeof (*e));
1661
1662    e->cb = cb;
1663    e->opaque = opaque;
1664    QLIST_INSERT_HEAD(&vm_change_state_head, e, entries);
1665    return e;
1666}
1667
1668void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
1669{
1670    QLIST_REMOVE (e, entries);
1671    g_free (e);
1672}
1673
1674void vm_state_notify(int running, RunState state)
1675{
1676    VMChangeStateEntry *e, *next;
1677
1678    trace_vm_state_notify(running, state);
1679
1680    QLIST_FOREACH_SAFE(e, &vm_change_state_head, entries, next) {
1681        e->cb(e->opaque, running, state);
1682    }
1683}
1684
1685static ShutdownCause reset_requested;
1686static ShutdownCause shutdown_requested;
1687static int shutdown_signal;
1688static pid_t shutdown_pid;
1689static int powerdown_requested;
1690static int debug_requested;
1691static int suspend_requested;
1692static WakeupReason wakeup_reason;
1693static NotifierList powerdown_notifiers =
1694    NOTIFIER_LIST_INITIALIZER(powerdown_notifiers);
1695static NotifierList suspend_notifiers =
1696    NOTIFIER_LIST_INITIALIZER(suspend_notifiers);
1697static NotifierList wakeup_notifiers =
1698    NOTIFIER_LIST_INITIALIZER(wakeup_notifiers);
1699static uint32_t wakeup_reason_mask = ~(1 << QEMU_WAKEUP_REASON_NONE);
1700
1701ShutdownCause qemu_shutdown_requested_get(void)
1702{
1703    return shutdown_requested;
1704}
1705
1706ShutdownCause qemu_reset_requested_get(void)
1707{
1708    return reset_requested;
1709}
1710
1711static int qemu_shutdown_requested(void)
1712{
1713    return atomic_xchg(&shutdown_requested, SHUTDOWN_CAUSE_NONE);
1714}
1715
1716static void qemu_kill_report(void)
1717{
1718    if (!qtest_driver() && shutdown_signal) {
1719        if (shutdown_pid == 0) {
1720            /* This happens for eg ^C at the terminal, so it's worth
1721             * avoiding printing an odd message in that case.
1722             */
1723            error_report("terminating on signal %d", shutdown_signal);
1724        } else {
1725            char *shutdown_cmd = qemu_get_pid_name(shutdown_pid);
1726
1727            error_report("terminating on signal %d from pid " FMT_pid " (%s)",
1728                         shutdown_signal, shutdown_pid,
1729                         shutdown_cmd ? shutdown_cmd : "<unknown process>");
1730            g_free(shutdown_cmd);
1731        }
1732        shutdown_signal = 0;
1733    }
1734}
1735
1736static ShutdownCause qemu_reset_requested(void)
1737{
1738    ShutdownCause r = reset_requested;
1739
1740    if (r && replay_checkpoint(CHECKPOINT_RESET_REQUESTED)) {
1741        reset_requested = SHUTDOWN_CAUSE_NONE;
1742        return r;
1743    }
1744    return SHUTDOWN_CAUSE_NONE;
1745}
1746
1747static int qemu_suspend_requested(void)
1748{
1749    int r = suspend_requested;
1750    if (r && replay_checkpoint(CHECKPOINT_SUSPEND_REQUESTED)) {
1751        suspend_requested = 0;
1752        return r;
1753    }
1754    return false;
1755}
1756
1757static WakeupReason qemu_wakeup_requested(void)
1758{
1759    return wakeup_reason;
1760}
1761
1762static int qemu_powerdown_requested(void)
1763{
1764    int r = powerdown_requested;
1765    powerdown_requested = 0;
1766    return r;
1767}
1768
1769static int qemu_debug_requested(void)
1770{
1771    int r = debug_requested;
1772    debug_requested = 0;
1773    return r;
1774}
1775
1776/*
1777 * Reset the VM. Issue an event unless @reason is SHUTDOWN_CAUSE_NONE.
1778 */
1779void qemu_system_reset(ShutdownCause reason)
1780{
1781    MachineClass *mc;
1782
1783    mc = current_machine ? MACHINE_GET_CLASS(current_machine) : NULL;
1784
1785    cpu_synchronize_all_states();
1786
1787    if (mc && mc->reset) {
1788        mc->reset();
1789    } else {
1790        qemu_devices_reset();
1791    }
1792    if (reason) {
1793        qapi_event_send_reset(shutdown_caused_by_guest(reason),
1794                              &error_abort);
1795    }
1796    cpu_synchronize_all_post_reset();
1797}
1798
1799void qemu_system_guest_panicked(GuestPanicInformation *info)
1800{
1801    qemu_log_mask(LOG_GUEST_ERROR, "Guest crashed\n");
1802
1803    if (current_cpu) {
1804        current_cpu->crash_occurred = true;
1805    }
1806    qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE,
1807                                   !!info, info, &error_abort);
1808    vm_stop(RUN_STATE_GUEST_PANICKED);
1809    if (!no_shutdown) {
1810        qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF,
1811                                       !!info, info, &error_abort);
1812        qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_PANIC);
1813    }
1814
1815    if (info) {
1816        if (info->type == GUEST_PANIC_INFORMATION_TYPE_HYPER_V) {
1817            qemu_log_mask(LOG_GUEST_ERROR, "HV crash parameters: (%#"PRIx64
1818                          " %#"PRIx64" %#"PRIx64" %#"PRIx64" %#"PRIx64")\n",
1819                          info->u.hyper_v.arg1,
1820                          info->u.hyper_v.arg2,
1821                          info->u.hyper_v.arg3,
1822                          info->u.hyper_v.arg4,
1823                          info->u.hyper_v.arg5);
1824        }
1825        qapi_free_GuestPanicInformation(info);
1826    }
1827}
1828
1829void qemu_system_reset_request(ShutdownCause reason)
1830{
1831    if (no_reboot) {
1832        shutdown_requested = reason;
1833    } else {
1834        reset_requested = reason;
1835    }
1836    cpu_stop_current();
1837    qemu_notify_event();
1838}
1839
1840static void qemu_system_suspend(void)
1841{
1842    pause_all_vcpus();
1843    notifier_list_notify(&suspend_notifiers, NULL);
1844    runstate_set(RUN_STATE_SUSPENDED);
1845    qapi_event_send_suspend(&error_abort);
1846}
1847
1848void qemu_system_suspend_request(void)
1849{
1850    if (runstate_check(RUN_STATE_SUSPENDED)) {
1851        return;
1852    }
1853    suspend_requested = 1;
1854    cpu_stop_current();
1855    qemu_notify_event();
1856}
1857
1858void qemu_register_suspend_notifier(Notifier *notifier)
1859{
1860    notifier_list_add(&suspend_notifiers, notifier);
1861}
1862
1863void qemu_system_wakeup_request(WakeupReason reason)
1864{
1865    trace_system_wakeup_request(reason);
1866
1867    if (!runstate_check(RUN_STATE_SUSPENDED)) {
1868        return;
1869    }
1870    if (!(wakeup_reason_mask & (1 << reason))) {
1871        return;
1872    }
1873    runstate_set(RUN_STATE_RUNNING);
1874    wakeup_reason = reason;
1875    qemu_notify_event();
1876}
1877
1878void qemu_system_wakeup_enable(WakeupReason reason, bool enabled)
1879{
1880    if (enabled) {
1881        wakeup_reason_mask |= (1 << reason);
1882    } else {
1883        wakeup_reason_mask &= ~(1 << reason);
1884    }
1885}
1886
1887void qemu_register_wakeup_notifier(Notifier *notifier)
1888{
1889    notifier_list_add(&wakeup_notifiers, notifier);
1890}
1891
1892void qemu_system_killed(int signal, pid_t pid)
1893{
1894    shutdown_signal = signal;
1895    shutdown_pid = pid;
1896    no_shutdown = 0;
1897
1898    /* Cannot call qemu_system_shutdown_request directly because
1899     * we are in a signal handler.
1900     */
1901    shutdown_requested = SHUTDOWN_CAUSE_HOST_SIGNAL;
1902    qemu_notify_event();
1903}
1904
1905void qemu_system_shutdown_request(ShutdownCause reason)
1906{
1907    trace_qemu_system_shutdown_request(reason);
1908    replay_shutdown_request(reason);
1909    shutdown_requested = reason;
1910    qemu_notify_event();
1911}
1912
1913static void qemu_system_powerdown(void)
1914{
1915    qapi_event_send_powerdown(&error_abort);
1916    notifier_list_notify(&powerdown_notifiers, NULL);
1917}
1918
1919void qemu_system_powerdown_request(void)
1920{
1921    trace_qemu_system_powerdown_request();
1922    powerdown_requested = 1;
1923    qemu_notify_event();
1924}
1925
1926void qemu_register_powerdown_notifier(Notifier *notifier)
1927{
1928    notifier_list_add(&powerdown_notifiers, notifier);
1929}
1930
1931void qemu_system_debug_request(void)
1932{
1933    debug_requested = 1;
1934    qemu_notify_event();
1935}
1936
1937static bool main_loop_should_exit(void)
1938{
1939    RunState r;
1940    ShutdownCause request;
1941
1942    if (qemu_debug_requested()) {
1943        vm_stop(RUN_STATE_DEBUG);
1944    }
1945    if (qemu_suspend_requested()) {
1946        qemu_system_suspend();
1947    }
1948    request = qemu_shutdown_requested();
1949    if (request) {
1950        qemu_kill_report();
1951        qapi_event_send_shutdown(shutdown_caused_by_guest(request),
1952                                 &error_abort);
1953        if (no_shutdown) {
1954            vm_stop(RUN_STATE_SHUTDOWN);
1955        } else {
1956            return true;
1957        }
1958    }
1959    request = qemu_reset_requested();
1960    if (request) {
1961        pause_all_vcpus();
1962        qemu_system_reset(request);
1963        resume_all_vcpus();
1964        if (!runstate_check(RUN_STATE_RUNNING) &&
1965                !runstate_check(RUN_STATE_INMIGRATE)) {
1966            runstate_set(RUN_STATE_PRELAUNCH);
1967        }
1968    }
1969    if (qemu_wakeup_requested()) {
1970        pause_all_vcpus();
1971        qemu_system_reset(SHUTDOWN_CAUSE_NONE);
1972        notifier_list_notify(&wakeup_notifiers, &wakeup_reason);
1973        wakeup_reason = QEMU_WAKEUP_REASON_NONE;
1974        resume_all_vcpus();
1975        qapi_event_send_wakeup(&error_abort);
1976    }
1977    if (qemu_powerdown_requested()) {
1978        qemu_system_powerdown();
1979    }
1980    if (qemu_vmstop_requested(&r)) {
1981        vm_stop(r);
1982    }
1983    return false;
1984}
1985
1986static void main_loop(void)
1987{
1988#ifdef CONFIG_PROFILER
1989    int64_t ti;
1990#endif
1991    do {
1992#ifdef CONFIG_PROFILER
1993        ti = profile_getclock();
1994#endif
1995        main_loop_wait(false);
1996#ifdef CONFIG_PROFILER
1997        dev_time += profile_getclock() - ti;
1998#endif
1999    } while (!main_loop_should_exit());
2000}
2001
2002static void version(void)
2003{
2004    printf("QEMU emulator version " QEMU_VERSION QEMU_PKGVERSION "\n"
2005           QEMU_COPYRIGHT "\n");
2006}
2007
2008static void help(int exitcode)
2009{
2010    version();
2011    printf("usage: %s [options] [disk_image]\n\n"
2012           "'disk_image' is a raw hard disk image for IDE hard disk 0\n\n",
2013            error_get_progname());
2014
2015#define QEMU_OPTIONS_GENERATE_HELP
2016#include "qemu-options-wrapper.h"
2017
2018    printf("\nDuring emulation, the following keys are useful:\n"
2019           "ctrl-alt-f      toggle full screen\n"
2020           "ctrl-alt-n      switch to virtual console 'n'\n"
2021           "ctrl-alt        toggle mouse and keyboard grab\n"
2022           "\n"
2023           "When using -nographic, press 'ctrl-a h' to get some help.\n"
2024           "\n"
2025           QEMU_HELP_BOTTOM "\n");
2026
2027    exit(exitcode);
2028}
2029
2030#define HAS_ARG 0x0001
2031
2032typedef struct QEMUOption {
2033    const char *name;
2034    int flags;
2035    int index;
2036    uint32_t arch_mask;
2037} QEMUOption;
2038
2039static const QEMUOption qemu_options[] = {
2040    { "h", 0, QEMU_OPTION_h, QEMU_ARCH_ALL },
2041#define QEMU_OPTIONS_GENERATE_OPTIONS
2042#include "qemu-options-wrapper.h"
2043    { NULL },
2044};
2045
2046typedef struct VGAInterfaceInfo {
2047    const char *opt_name;    /* option name */
2048    const char *name;        /* human-readable name */
2049    /* Class names indicating that support is available.
2050     * If no class is specified, the interface is always available */
2051    const char *class_names[2];
2052} VGAInterfaceInfo;
2053
2054static VGAInterfaceInfo vga_interfaces[VGA_TYPE_MAX] = {
2055    [VGA_NONE] = {
2056        .opt_name = "none",
2057    },
2058    [VGA_STD] = {
2059        .opt_name = "std",
2060        .name = "standard VGA",
2061        .class_names = { "VGA", "isa-vga" },
2062    },
2063    [VGA_CIRRUS] = {
2064        .opt_name = "cirrus",
2065        .name = "Cirrus VGA",
2066        .class_names = { "cirrus-vga", "isa-cirrus-vga" },
2067    },
2068    [VGA_VMWARE] = {
2069        .opt_name = "vmware",
2070        .name = "VMWare SVGA",
2071        .class_names = { "vmware-svga" },
2072    },
2073    [VGA_VIRTIO] = {
2074        .opt_name = "virtio",
2075        .name = "Virtio VGA",
2076        .class_names = { "virtio-vga" },
2077    },
2078    [VGA_QXL] = {
2079        .opt_name = "qxl",
2080        .name = "QXL VGA",
2081        .class_names = { "qxl-vga" },
2082    },
2083    [VGA_TCX] = {
2084        .opt_name = "tcx",
2085        .name = "TCX framebuffer",
2086        .class_names = { "SUNW,tcx" },
2087    },
2088    [VGA_CG3] = {
2089        .opt_name = "cg3",
2090        .name = "CG3 framebuffer",
2091        .class_names = { "cgthree" },
2092    },
2093    [VGA_XENFB] = {
2094        .opt_name = "xenfb",
2095    },
2096};
2097
2098static bool vga_interface_available(VGAInterfaceType t)
2099{
2100    VGAInterfaceInfo *ti = &vga_interfaces[t];
2101
2102    assert(t < VGA_TYPE_MAX);
2103    return !ti->class_names[0] ||
2104           object_class_by_name(ti->class_names[0]) ||
2105           object_class_by_name(ti->class_names[1]);
2106}
2107
2108static void select_vgahw(const char *p)
2109{
2110    const char *opts;
2111    int t;
2112
2113    assert(vga_interface_type == VGA_NONE);
2114    for (t = 0; t < VGA_TYPE_MAX; t++) {
2115        VGAInterfaceInfo *ti = &vga_interfaces[t];
2116        if (ti->opt_name && strstart(p, ti->opt_name, &opts)) {
2117            if (!vga_interface_available(t)) {
2118                error_report("%s not available", ti->name);
2119                exit(1);
2120            }
2121            vga_interface_type = t;
2122            break;
2123        }
2124    }
2125    if (t == VGA_TYPE_MAX) {
2126    invalid_vga:
2127        error_report("unknown vga type: %s", p);
2128        exit(1);
2129    }
2130    while (*opts) {
2131        const char *nextopt;
2132
2133        if (strstart(opts, ",retrace=", &nextopt)) {
2134            opts = nextopt;
2135            if (strstart(opts, "dumb", &nextopt))
2136                vga_retrace_method = VGA_RETRACE_DUMB;
2137            else if (strstart(opts, "precise", &nextopt))
2138                vga_retrace_method = VGA_RETRACE_PRECISE;
2139            else goto invalid_vga;
2140        } else goto invalid_vga;
2141        opts = nextopt;
2142    }
2143}
2144
2145typedef enum DisplayType {
2146    DT_DEFAULT,
2147    DT_CURSES,
2148    DT_SDL,
2149    DT_COCOA,
2150    DT_GTK,
2151    DT_EGL,
2152    DT_NONE,
2153} DisplayType;
2154
2155static DisplayType select_display(const char *p)
2156{
2157    const char *opts;
2158    DisplayType display = DT_DEFAULT;
2159
2160    if (strstart(p, "sdl", &opts)) {
2161#ifdef CONFIG_SDL
2162        display = DT_SDL;
2163        while (*opts) {
2164            const char *nextopt;
2165
2166            if (strstart(opts, ",frame=", &nextopt)) {
2167                opts = nextopt;
2168                if (strstart(opts, "on", &nextopt)) {
2169                    no_frame = 0;
2170                } else if (strstart(opts, "off", &nextopt)) {
2171                    no_frame = 1;
2172                } else {
2173                    goto invalid_sdl_args;
2174                }
2175            } else if (strstart(opts, ",alt_grab=", &nextopt)) {
2176                opts = nextopt;
2177                if (strstart(opts, "on", &nextopt)) {
2178                    alt_grab = 1;
2179                } else if (strstart(opts, "off", &nextopt)) {
2180                    alt_grab = 0;
2181                } else {
2182                    goto invalid_sdl_args;
2183                }
2184            } else if (strstart(opts, ",ctrl_grab=", &nextopt)) {
2185                opts = nextopt;
2186                if (strstart(opts, "on", &nextopt)) {
2187                    ctrl_grab = 1;
2188                } else if (strstart(opts, "off", &nextopt)) {
2189                    ctrl_grab = 0;
2190                } else {
2191                    goto invalid_sdl_args;
2192                }
2193            } else if (strstart(opts, ",window_close=", &nextopt)) {
2194                opts = nextopt;
2195                if (strstart(opts, "on", &nextopt)) {
2196                    no_quit = 0;
2197                } else if (strstart(opts, "off", &nextopt)) {
2198                    no_quit = 1;
2199                } else {
2200                    goto invalid_sdl_args;
2201                }
2202            } else if (strstart(opts, ",gl=", &nextopt)) {
2203                opts = nextopt;
2204                if (strstart(opts, "on", &nextopt)) {
2205                    request_opengl = 1;
2206                } else if (strstart(opts, "off", &nextopt)) {
2207                    request_opengl = 0;
2208                } else {
2209                    goto invalid_sdl_args;
2210                }
2211            } else {
2212            invalid_sdl_args:
2213                error_report("invalid SDL option string");
2214                exit(1);
2215            }
2216            opts = nextopt;
2217        }
2218#else
2219        error_report("SDL support is disabled");
2220        exit(1);
2221#endif
2222    } else if (strstart(p, "vnc", &opts)) {
2223        if (*opts == '=') {
2224            vnc_parse(opts + 1, &error_fatal);
2225        } else {
2226            error_report("VNC requires a display argument vnc=<display>");
2227            exit(1);
2228        }
2229    } else if (strstart(p, "egl-headless", &opts)) {
2230#ifdef CONFIG_OPENGL_DMABUF
2231        request_opengl = 1;
2232        display_opengl = 1;
2233        display = DT_EGL;
2234#else
2235        fprintf(stderr, "egl support is disabled\n");
2236        exit(1);
2237#endif
2238    } else if (strstart(p, "curses", &opts)) {
2239#ifdef CONFIG_CURSES
2240        display = DT_CURSES;
2241#else
2242        error_report("curses support is disabled");
2243        exit(1);
2244#endif
2245    } else if (strstart(p, "gtk", &opts)) {
2246#ifdef CONFIG_GTK
2247        display = DT_GTK;
2248        while (*opts) {
2249            const char *nextopt;
2250
2251            if (strstart(opts, ",grab_on_hover=", &nextopt)) {
2252                opts = nextopt;
2253                if (strstart(opts, "on", &nextopt)) {
2254                    grab_on_hover = true;
2255                } else if (strstart(opts, "off", &nextopt)) {
2256                    grab_on_hover = false;
2257                } else {
2258                    goto invalid_gtk_args;
2259                }
2260            } else if (strstart(opts, ",gl=", &nextopt)) {
2261                opts = nextopt;
2262                if (strstart(opts, "on", &nextopt)) {
2263                    request_opengl = 1;
2264                } else if (strstart(opts, "off", &nextopt)) {
2265                    request_opengl = 0;
2266                } else {
2267                    goto invalid_gtk_args;
2268                }
2269            } else {
2270            invalid_gtk_args:
2271                error_report("invalid GTK option string");
2272                exit(1);
2273            }
2274            opts = nextopt;
2275        }
2276#else
2277        error_report("GTK support is disabled");
2278        exit(1);
2279#endif
2280    } else if (strstart(p, "none", &opts)) {
2281        display = DT_NONE;
2282    } else {
2283        error_report("unknown display type");
2284        exit(1);
2285    }
2286
2287    return display;
2288}
2289
2290static int balloon_parse(const char *arg)
2291{
2292    QemuOpts *opts;
2293
2294    if (strcmp(arg, "none") == 0) {
2295        return 0;
2296    }
2297
2298    if (!strncmp(arg, "virtio", 6)) {
2299        if (arg[6] == ',') {
2300            /* have params -> parse them */
2301            opts = qemu_opts_parse_noisily(qemu_find_opts("device"), arg + 7,
2302                                           false);
2303            if (!opts)
2304                return  -1;
2305        } else {
2306            /* create empty opts */
2307            opts = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
2308                                    &error_abort);
2309        }
2310        qemu_opt_set(opts, "driver", "virtio-balloon", &error_abort);
2311        return 0;
2312    }
2313
2314    return -1;
2315}
2316
2317char *qemu_find_file(int type, const char *name)
2318{
2319    int i;
2320    const char *subdir;
2321    char *buf;
2322
2323    /* Try the name as a straight path first */
2324    if (access(name, R_OK) == 0) {
2325        trace_load_file(name, name);
2326        return g_strdup(name);
2327    }
2328
2329    switch (type) {
2330    case QEMU_FILE_TYPE_BIOS:
2331        subdir = "";
2332        break;
2333    case QEMU_FILE_TYPE_KEYMAP:
2334        subdir = "keymaps/";
2335        break;
2336    default:
2337        abort();
2338    }
2339
2340    for (i = 0; i < data_dir_idx; i++) {
2341        buf = g_strdup_printf("%s/%s%s", data_dir[i], subdir, name);
2342        if (access(buf, R_OK) == 0) {
2343            trace_load_file(name, buf);
2344            return buf;
2345        }
2346        g_free(buf);
2347    }
2348    return NULL;
2349}
2350
2351static void qemu_add_data_dir(const char *path)
2352{
2353    int i;
2354
2355    if (path == NULL) {
2356        return;
2357    }
2358    if (data_dir_idx == ARRAY_SIZE(data_dir)) {
2359        return;
2360    }
2361    for (i = 0; i < data_dir_idx; i++) {
2362        if (strcmp(data_dir[i], path) == 0) {
2363            return; /* duplicate */
2364        }
2365    }
2366    data_dir[data_dir_idx++] = path;
2367}
2368
2369static inline bool nonempty_str(const char *str)
2370{
2371    return str && *str;
2372}
2373
2374static int parse_fw_cfg(void *opaque, QemuOpts *opts, Error **errp)
2375{
2376    gchar *buf;
2377    size_t size;
2378    const char *name, *file, *str;
2379    FWCfgState *fw_cfg = (FWCfgState *) opaque;
2380
2381    if (fw_cfg == NULL) {
2382        error_report("fw_cfg device not available");
2383        return -1;
2384    }
2385    name = qemu_opt_get(opts, "name");
2386    file = qemu_opt_get(opts, "file");
2387    str = qemu_opt_get(opts, "string");
2388
2389    /* we need name and either a file or the content string */
2390    if (!(nonempty_str(name) && (nonempty_str(file) || nonempty_str(str)))) {
2391        error_report("invalid argument(s)");
2392        return -1;
2393    }
2394    if (nonempty_str(file) && nonempty_str(str)) {
2395        error_report("file and string are mutually exclusive");
2396        return -1;
2397    }
2398    if (strlen(name) > FW_CFG_MAX_FILE_PATH - 1) {
2399        error_report("name too long (max. %d char)", FW_CFG_MAX_FILE_PATH - 1);
2400        return -1;
2401    }
2402    if (strncmp(name, "opt/", 4) != 0) {
2403        warn_report("externally provided fw_cfg item names "
2404                    "should be prefixed with \"opt/\"");
2405    }
2406    if (nonempty_str(str)) {
2407        size = strlen(str); /* NUL terminator NOT included in fw_cfg blob */
2408        buf = g_memdup(str, size);
2409    } else {
2410        if (!g_file_get_contents(file, &buf, &size, NULL)) {
2411            error_report("can't load %s", file);
2412            return -1;
2413        }
2414    }
2415    /* For legacy, keep user files in a specific global order. */
2416    fw_cfg_set_order_override(fw_cfg, FW_CFG_ORDER_OVERRIDE_USER);
2417    fw_cfg_add_file(fw_cfg, name, buf, size);
2418    fw_cfg_reset_order_override(fw_cfg);
2419    return 0;
2420}
2421
2422static int device_help_func(void *opaque, QemuOpts *opts, Error **errp)
2423{
2424    return qdev_device_help(opts);
2425}
2426
2427static int device_init_func(void *opaque, QemuOpts *opts, Error **errp)
2428{
2429    Error *err = NULL;
2430    DeviceState *dev;
2431
2432    dev = qdev_device_add(opts, &err);
2433    if (!dev) {
2434        error_report_err(err);
2435        return -1;
2436    }
2437    object_unref(OBJECT(dev));
2438    return 0;
2439}
2440
2441static int chardev_init_func(void *opaque, QemuOpts *opts, Error **errp)
2442{
2443    Error *local_err = NULL;
2444
2445    if (!qemu_chr_new_from_opts(opts, &local_err)) {
2446        if (local_err) {
2447            error_report_err(local_err);
2448            return -1;
2449        }
2450        exit(0);
2451    }
2452    return 0;
2453}
2454
2455#ifdef CONFIG_VIRTFS
2456static int fsdev_init_func(void *opaque, QemuOpts *opts, Error **errp)
2457{
2458    return qemu_fsdev_add(opts);
2459}
2460#endif
2461
2462static int mon_init_func(void *opaque, QemuOpts *opts, Error **errp)
2463{
2464    Chardev *chr;
2465    const char *chardev;
2466    const char *mode;
2467    int flags;
2468
2469    mode = qemu_opt_get(opts, "mode");
2470    if (mode == NULL) {
2471        mode = "readline";
2472    }
2473    if (strcmp(mode, "readline") == 0) {
2474        flags = MONITOR_USE_READLINE;
2475    } else if (strcmp(mode, "control") == 0) {
2476        flags = MONITOR_USE_CONTROL;
2477    } else {
2478        error_report("unknown monitor mode \"%s\"", mode);
2479        exit(1);
2480    }
2481
2482    if (qemu_opt_get_bool(opts, "pretty", 0))
2483        flags |= MONITOR_USE_PRETTY;
2484
2485    if (qemu_opt_get_bool(opts, "default", 0)) {
2486        error_report("option 'default' does nothing and is deprecated");
2487    }
2488
2489    chardev = qemu_opt_get(opts, "chardev");
2490    chr = qemu_chr_find(chardev);
2491    if (chr == NULL) {
2492        error_report("chardev \"%s\" not found", chardev);
2493        exit(1);
2494    }
2495
2496    monitor_init(chr, flags);
2497    return 0;
2498}
2499
2500static void monitor_parse(const char *optarg, const char *mode, bool pretty)
2501{
2502    static int monitor_device_index = 0;
2503    QemuOpts *opts;
2504    const char *p;
2505    char label[32];
2506
2507    if (strstart(optarg, "chardev:", &p)) {
2508        snprintf(label, sizeof(label), "%s", p);
2509    } else {
2510        snprintf(label, sizeof(label), "compat_monitor%d",
2511                 monitor_device_index);
2512        opts = qemu_chr_parse_compat(label, optarg);
2513        if (!opts) {
2514            error_report("parse error: %s", optarg);
2515            exit(1);
2516        }
2517    }
2518
2519    opts = qemu_opts_create(qemu_find_opts("mon"), label, 1, &error_fatal);
2520    qemu_opt_set(opts, "mode", mode, &error_abort);
2521    qemu_opt_set(opts, "chardev", label, &error_abort);
2522    qemu_opt_set_bool(opts, "pretty", pretty, &error_abort);
2523    monitor_device_index++;
2524}
2525
2526struct device_config {
2527    enum {
2528        DEV_USB,       /* -usbdevice     */
2529        DEV_BT,        /* -bt            */
2530        DEV_SERIAL,    /* -serial        */
2531        DEV_PARALLEL,  /* -parallel      */
2532        DEV_VIRTCON,   /* -virtioconsole */
2533        DEV_DEBUGCON,  /* -debugcon */
2534        DEV_GDB,       /* -gdb, -s */
2535        DEV_SCLP,      /* s390 sclp */
2536    } type;
2537    const char *cmdline;
2538    Location loc;
2539    QTAILQ_ENTRY(device_config) next;
2540};
2541
2542static QTAILQ_HEAD(, device_config) device_configs =
2543    QTAILQ_HEAD_INITIALIZER(device_configs);
2544
2545static void add_device_config(int type, const char *cmdline)
2546{
2547    struct device_config *conf;
2548
2549    conf = g_malloc0(sizeof(*conf));
2550    conf->type = type;
2551    conf->cmdline = cmdline;
2552    loc_save(&conf->loc);
2553    QTAILQ_INSERT_TAIL(&device_configs, conf, next);
2554}
2555
2556static int foreach_device_config(int type, int (*func)(const char *cmdline))
2557{
2558    struct device_config *conf;
2559    int rc;
2560
2561    QTAILQ_FOREACH(conf, &device_configs, next) {
2562        if (conf->type != type)
2563            continue;
2564        loc_push_restore(&conf->loc);
2565        rc = func(conf->cmdline);
2566        loc_pop(&conf->loc);
2567        if (rc) {
2568            return rc;
2569        }
2570    }
2571    return 0;
2572}
2573
2574static int serial_parse(const char *devname)
2575{
2576    static int index = 0;
2577    char label[32];
2578
2579    if (strcmp(devname, "none") == 0)
2580        return 0;
2581    if (index == MAX_SERIAL_PORTS) {
2582        error_report("too many serial ports");
2583        exit(1);
2584    }
2585    snprintf(label, sizeof(label), "serial%d", index);
2586    serial_hds[index] = qemu_chr_new(label, devname);
2587    if (!serial_hds[index]) {
2588        error_report("could not connect serial device"
2589                     " to character backend '%s'", devname);
2590        return -1;
2591    }
2592    index++;
2593    return 0;
2594}
2595
2596static int parallel_parse(const char *devname)
2597{
2598    static int index = 0;
2599    char label[32];
2600
2601    if (strcmp(devname, "none") == 0)
2602        return 0;
2603    if (index == MAX_PARALLEL_PORTS) {
2604        error_report("too many parallel ports");
2605        exit(1);
2606    }
2607    snprintf(label, sizeof(label), "parallel%d", index);
2608    parallel_hds[index] = qemu_chr_new(label, devname);
2609    if (!parallel_hds[index]) {
2610        error_report("could not connect parallel device"
2611                     " to character backend '%s'", devname);
2612        return -1;
2613    }
2614    index++;
2615    return 0;
2616}
2617
2618static int virtcon_parse(const char *devname)
2619{
2620    QemuOptsList *device = qemu_find_opts("device");
2621    static int index = 0;
2622    char label[32];
2623    QemuOpts *bus_opts, *dev_opts;
2624
2625    if (strcmp(devname, "none") == 0)
2626        return 0;
2627    if (index == MAX_VIRTIO_CONSOLES) {
2628        error_report("too many virtio consoles");
2629        exit(1);
2630    }
2631
2632    bus_opts = qemu_opts_create(device, NULL, 0, &error_abort);
2633    qemu_opt_set(bus_opts, "driver", "virtio-serial", &error_abort);
2634
2635    dev_opts = qemu_opts_create(device, NULL, 0, &error_abort);
2636    qemu_opt_set(dev_opts, "driver", "virtconsole", &error_abort);
2637
2638    snprintf(label, sizeof(label), "virtcon%d", index);
2639    virtcon_hds[index] = qemu_chr_new(label, devname);
2640    if (!virtcon_hds[index]) {
2641        error_report("could not connect virtio console"
2642                     " to character backend '%s'", devname);
2643        return -1;
2644    }
2645    qemu_opt_set(dev_opts, "chardev", label, &error_abort);
2646
2647    index++;
2648    return 0;
2649}
2650
2651static int sclp_parse(const char *devname)
2652{
2653    QemuOptsList *device = qemu_find_opts("device");
2654    static int index = 0;
2655    char label[32];
2656    QemuOpts *dev_opts;
2657
2658    if (strcmp(devname, "none") == 0) {
2659        return 0;
2660    }
2661    if (index == MAX_SCLP_CONSOLES) {
2662        error_report("too many sclp consoles");
2663        exit(1);
2664    }
2665
2666    assert(arch_type == QEMU_ARCH_S390X);
2667
2668    dev_opts = qemu_opts_create(device, NULL, 0, NULL);
2669    qemu_opt_set(dev_opts, "driver", "sclpconsole", &error_abort);
2670
2671    snprintf(label, sizeof(label), "sclpcon%d", index);
2672    sclp_hds[index] = qemu_chr_new(label, devname);
2673    if (!sclp_hds[index]) {
2674        error_report("could not connect sclp console"
2675                     " to character backend '%s'", devname);
2676        return -1;
2677    }
2678    qemu_opt_set(dev_opts, "chardev", label, &error_abort);
2679
2680    index++;
2681    return 0;
2682}
2683
2684static int debugcon_parse(const char *devname)
2685{
2686    QemuOpts *opts;
2687
2688    if (!qemu_chr_new("debugcon", devname)) {
2689        exit(1);
2690    }
2691    opts = qemu_opts_create(qemu_find_opts("device"), "debugcon", 1, NULL);
2692    if (!opts) {
2693        error_report("already have a debugcon device");
2694        exit(1);
2695    }
2696    qemu_opt_set(opts, "driver", "isa-debugcon", &error_abort);
2697    qemu_opt_set(opts, "chardev", "debugcon", &error_abort);
2698    return 0;
2699}
2700
2701static gint machine_class_cmp(gconstpointer a, gconstpointer b)
2702{
2703    const MachineClass *mc1 = a, *mc2 = b;
2704    int res;
2705
2706    if (mc1->family == NULL) {
2707        if (mc2->family == NULL) {
2708            /* Compare standalone machine types against each other; they sort
2709             * in increasing order.
2710             */
2711            return strcmp(object_class_get_name(OBJECT_CLASS(mc1)),
2712                          object_class_get_name(OBJECT_CLASS(mc2)));
2713        }
2714
2715        /* Standalone machine types sort after families. */
2716        return 1;
2717    }
2718
2719    if (mc2->family == NULL) {
2720        /* Families sort before standalone machine types. */
2721        return -1;
2722    }
2723
2724    /* Families sort between each other alphabetically increasingly. */
2725    res = strcmp(mc1->family, mc2->family);
2726    if (res != 0) {
2727        return res;
2728    }
2729
2730    /* Within the same family, machine types sort in decreasing order. */
2731    return strcmp(object_class_get_name(OBJECT_CLASS(mc2)),
2732                  object_class_get_name(OBJECT_CLASS(mc1)));
2733}
2734
2735 static MachineClass *machine_parse(const char *name)
2736{
2737    MachineClass *mc = NULL;
2738    GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
2739
2740    if (name) {
2741        mc = find_machine(name);
2742    }
2743    if (mc) {
2744        g_slist_free(machines);
2745        return mc;
2746    }
2747    if (name && !is_help_option(name)) {
2748        error_report("unsupported machine type");
2749        error_printf("Use -machine help to list supported machines\n");
2750    } else {
2751        printf("Supported machines are:\n");
2752        machines = g_slist_sort(machines, machine_class_cmp);
2753        for (el = machines; el; el = el->next) {
2754            MachineClass *mc = el->data;
2755            if (mc->alias) {
2756                printf("%-20s %s (alias of %s)\n", mc->alias, mc->desc, mc->name);
2757            }
2758            printf("%-20s %s%s\n", mc->name, mc->desc,
2759                   mc->is_default ? " (default)" : "");
2760        }
2761    }
2762
2763    g_slist_free(machines);
2764    exit(!name || !is_help_option(name));
2765}
2766
2767void qemu_add_exit_notifier(Notifier *notify)
2768{
2769    notifier_list_add(&exit_notifiers, notify);
2770}
2771
2772void qemu_remove_exit_notifier(Notifier *notify)
2773{
2774    notifier_remove(notify);
2775}
2776
2777static void qemu_run_exit_notifiers(void)
2778{
2779    notifier_list_notify(&exit_notifiers, NULL);
2780}
2781
2782static bool machine_init_done;
2783
2784void qemu_add_machine_init_done_notifier(Notifier *notify)
2785{
2786    notifier_list_add(&machine_init_done_notifiers, notify);
2787    if (machine_init_done) {
2788        notify->notify(notify, NULL);
2789    }
2790}
2791
2792void qemu_remove_machine_init_done_notifier(Notifier *notify)
2793{
2794    notifier_remove(notify);
2795}
2796
2797static void qemu_run_machine_init_done_notifiers(void)
2798{
2799    notifier_list_notify(&machine_init_done_notifiers, NULL);
2800    machine_init_done = true;
2801}
2802
2803static const QEMUOption *lookup_opt(int argc, char **argv,
2804                                    const char **poptarg, int *poptind)
2805{
2806    const QEMUOption *popt;
2807    int optind = *poptind;
2808    char *r = argv[optind];
2809    const char *optarg;
2810
2811    loc_set_cmdline(argv, optind, 1);
2812    optind++;
2813    /* Treat --foo the same as -foo.  */
2814    if (r[1] == '-')
2815        r++;
2816    popt = qemu_options;
2817    for(;;) {
2818        if (!popt->name) {
2819            error_report("invalid option");
2820            exit(1);
2821        }
2822        if (!strcmp(popt->name, r + 1))
2823            break;
2824        popt++;
2825    }
2826    if (popt->flags & HAS_ARG) {
2827        if (optind >= argc) {
2828            error_report("requires an argument");
2829            exit(1);
2830        }
2831        optarg = argv[optind++];
2832        loc_set_cmdline(argv, optind - 2, 2);
2833    } else {
2834        optarg = NULL;
2835    }
2836
2837    *poptarg = optarg;
2838    *poptind = optind;
2839
2840    return popt;
2841}
2842
2843static MachineClass *select_machine(void)
2844{
2845    MachineClass *machine_class = find_default_machine();
2846    const char *optarg;
2847    QemuOpts *opts;
2848    Location loc;
2849
2850    loc_push_none(&loc);
2851
2852    opts = qemu_get_machine_opts();
2853    qemu_opts_loc_restore(opts);
2854
2855    optarg = qemu_opt_get(opts, "type");
2856    if (optarg) {
2857        machine_class = machine_parse(optarg);
2858    }
2859
2860    if (!machine_class) {
2861        error_report("No machine specified, and there is no default");
2862        error_printf("Use -machine help to list supported machines\n");
2863        exit(1);
2864    }
2865
2866    loc_pop(&loc);
2867    return machine_class;
2868}
2869
2870static int machine_set_property(void *opaque,
2871                                const char *name, const char *value,
2872                                Error **errp)
2873{
2874    Object *obj = OBJECT(opaque);
2875    Error *local_err = NULL;
2876    char *p, *qom_name;
2877
2878    if (strcmp(name, "type") == 0) {
2879        return 0;
2880    }
2881
2882    qom_name = g_strdup(name);
2883    for (p = qom_name; *p; p++) {
2884        if (*p == '_') {
2885            *p = '-';
2886        }
2887    }
2888
2889    object_property_parse(obj, value, qom_name, &local_err);
2890    g_free(qom_name);
2891
2892    if (local_err) {
2893        error_report_err(local_err);
2894        return -1;
2895    }
2896
2897    return 0;
2898}
2899
2900
2901/*
2902 * Initial object creation happens before all other
2903 * QEMU data types are created. The majority of objects
2904 * can be created at this point. The rng-egd object
2905 * cannot be created here, as it depends on the chardev
2906 * already existing.
2907 */
2908static bool object_create_initial(const char *type)
2909{
2910    if (g_str_equal(type, "rng-egd") ||
2911        g_str_has_prefix(type, "pr-manager-")) {
2912        return false;
2913    }
2914
2915    /*
2916     * return false for concrete netfilters since
2917     * they depend on netdevs already existing
2918     */
2919    if (g_str_equal(type, "filter-buffer") ||
2920        g_str_equal(type, "filter-dump") ||
2921        g_str_equal(type, "filter-mirror") ||
2922        g_str_equal(type, "filter-redirector") ||
2923        g_str_equal(type, "colo-compare") ||
2924        g_str_equal(type, "filter-rewriter") ||
2925        g_str_equal(type, "filter-replay")) {
2926        return false;
2927    }
2928
2929    /* Memory allocation by backends needs to be done
2930     * after configure_accelerator() (due to the tcg_enabled()
2931     * checks at memory_region_init_*()).
2932     *
2933     * Also, allocation of large amounts of memory may delay
2934     * chardev initialization for too long, and trigger timeouts
2935     * on software that waits for a monitor socket to be created
2936     * (e.g. libvirt).
2937     */
2938    if (g_str_has_prefix(type, "memory-backend-")) {
2939        return false;
2940    }
2941
2942    return true;
2943}
2944
2945
2946/*
2947 * The remainder of object creation happens after the
2948 * creation of chardev, fsdev, net clients and device data types.
2949 */
2950static bool object_create_delayed(const char *type)
2951{
2952    return !object_create_initial(type);
2953}
2954
2955
2956static void set_memory_options(uint64_t *ram_slots, ram_addr_t *maxram_size,
2957                               MachineClass *mc)
2958{
2959    uint64_t sz;
2960    const char *mem_str;
2961    const char *maxmem_str, *slots_str;
2962    const ram_addr_t default_ram_size = mc->default_ram_size;
2963    QemuOpts *opts = qemu_find_opts_singleton("memory");
2964    Location loc;
2965
2966    loc_push_none(&loc);
2967    qemu_opts_loc_restore(opts);
2968
2969    sz = 0;
2970    mem_str = qemu_opt_get(opts, "size");
2971    if (mem_str) {
2972        if (!*mem_str) {
2973            error_report("missing 'size' option value");
2974            exit(EXIT_FAILURE);
2975        }
2976
2977        sz = qemu_opt_get_size(opts, "size", ram_size);
2978
2979        /* Fix up legacy suffix-less format */
2980        if (g_ascii_isdigit(mem_str[strlen(mem_str) - 1])) {
2981            uint64_t overflow_check = sz;
2982
2983            sz <<= 20;
2984            if ((sz >> 20) != overflow_check) {
2985                error_report("too large 'size' option value");
2986                exit(EXIT_FAILURE);
2987            }
2988        }
2989    }
2990
2991    /* backward compatibility behaviour for case "-m 0" */
2992    if (sz == 0) {
2993        sz = default_ram_size;
2994    }
2995
2996    sz = QEMU_ALIGN_UP(sz, 8192);
2997    ram_size = sz;
2998    if (ram_size != sz) {
2999        error_report("ram size too large");
3000        exit(EXIT_FAILURE);
3001    }
3002
3003    /* store value for the future use */
3004    qemu_opt_set_number(opts, "size", ram_size, &error_abort);
3005    *maxram_size = ram_size;
3006
3007    maxmem_str = qemu_opt_get(opts, "maxmem");
3008    slots_str = qemu_opt_get(opts, "slots");
3009    if (maxmem_str && slots_str) {
3010        uint64_t slots;
3011
3012        sz = qemu_opt_get_size(opts, "maxmem", 0);
3013        slots = qemu_opt_get_number(opts, "slots", 0);
3014        if (sz < ram_size) {
3015            error_report("invalid value of -m option maxmem: "
3016                         "maximum memory size (0x%" PRIx64 ") must be at least "
3017                         "the initial memory size (0x" RAM_ADDR_FMT ")",
3018                         sz, ram_size);
3019            exit(EXIT_FAILURE);
3020        } else if (sz > ram_size) {
3021            if (!slots) {
3022                error_report("invalid value of -m option: maxmem was "
3023                             "specified, but no hotplug slots were specified");
3024                exit(EXIT_FAILURE);
3025            }
3026        } else if (slots) {
3027            error_report("invalid value of -m option maxmem: "
3028                         "memory slots were specified but maximum memory size "
3029                         "(0x%" PRIx64 ") is equal to the initial memory size "
3030                         "(0x" RAM_ADDR_FMT ")", sz, ram_size);
3031            exit(EXIT_FAILURE);
3032        }
3033
3034        *maxram_size = sz;
3035        *ram_slots = slots;
3036    } else if ((!maxmem_str && slots_str) ||
3037            (maxmem_str && !slots_str)) {
3038        error_report("invalid -m option value: missing "
3039                "'%s' option", slots_str ? "maxmem" : "slots");
3040        exit(EXIT_FAILURE);
3041    }
3042
3043    loc_pop(&loc);
3044}
3045
3046static int global_init_func(void *opaque, QemuOpts *opts, Error **errp)
3047{
3048    GlobalProperty *g;
3049
3050    g = g_malloc0(sizeof(*g));
3051    g->driver   = qemu_opt_get(opts, "driver");
3052    g->property = qemu_opt_get(opts, "property");
3053    g->value    = qemu_opt_get(opts, "value");
3054    g->user_provided = true;
3055    g->errp = &error_fatal;
3056    qdev_prop_register_global(g);
3057    return 0;
3058}
3059
3060static int qemu_read_default_config_file(void)
3061{
3062    int ret;
3063
3064    ret = qemu_read_config_file(CONFIG_QEMU_CONFDIR "/qemu.conf");
3065    if (ret < 0 && ret != -ENOENT) {
3066        return ret;
3067    }
3068
3069    return 0;
3070}
3071
3072static void user_register_global_props(void)
3073{
3074    qemu_opts_foreach(qemu_find_opts("global"),
3075                      global_init_func, NULL, NULL);
3076}
3077
3078/*
3079 * Note: we should see that these properties are actually having a
3080 * priority: accel < machine < user. This means e.g. when user
3081 * specifies something in "-global", it'll always be used with highest
3082 * priority than either machine/accelerator compat properties.
3083 */
3084static void register_global_properties(MachineState *ms)
3085{
3086    accel_register_compat_props(ms->accelerator);
3087    machine_register_compat_props(ms);
3088    user_register_global_props();
3089}
3090
3091int main(int argc, char **argv, char **envp)
3092{
3093    int i;
3094    int snapshot, linux_boot;
3095    const char *initrd_filename;
3096    const char *kernel_filename, *kernel_cmdline;
3097    const char *boot_order = NULL;
3098    const char *boot_once = NULL;
3099    DisplayState *ds;
3100    int cyls, heads, secs, translation;
3101    QemuOpts *opts, *machine_opts;
3102    QemuOpts *hda_opts = NULL, *icount_opts = NULL, *accel_opts = NULL;
3103    QemuOptsList *olist;
3104    int optind;
3105    const char *optarg;
3106    const char *loadvm = NULL;
3107    MachineClass *machine_class;
3108    const char *cpu_model;
3109    const char *vga_model = NULL;
3110    const char *qtest_chrdev = NULL;
3111    const char *qtest_log = NULL;
3112    const char *pid_file = NULL;
3113    const char *incoming = NULL;
3114    bool userconfig = true;
3115    bool nographic = false;
3116    DisplayType display_type = DT_DEFAULT;
3117    int display_remote = 0;
3118    const char *log_mask = NULL;
3119    const char *log_file = NULL;
3120    char *trace_file = NULL;
3121    ram_addr_t maxram_size;
3122    uint64_t ram_slots = 0;
3123    FILE *vmstate_dump_file = NULL;
3124    Error *main_loop_err = NULL;
3125    Error *err = NULL;
3126    bool list_data_dirs = false;
3127    char **dirs;
3128    typedef struct BlockdevOptions_queue {
3129        BlockdevOptions *bdo;
3130        Location loc;
3131        QSIMPLEQ_ENTRY(BlockdevOptions_queue) entry;
3132    } BlockdevOptions_queue;
3133    QSIMPLEQ_HEAD(, BlockdevOptions_queue) bdo_queue
3134        = QSIMPLEQ_HEAD_INITIALIZER(bdo_queue);
3135
3136    module_call_init(MODULE_INIT_TRACE);
3137
3138    qemu_init_cpu_list();
3139    qemu_init_cpu_loop();
3140    qemu_mutex_lock_iothread();
3141
3142    atexit(qemu_run_exit_notifiers);
3143    error_set_progname(argv[0]);
3144    qemu_init_exec_dir(argv[0]);
3145
3146    module_call_init(MODULE_INIT_QOM);
3147    monitor_init_qmp_commands();
3148
3149    qemu_add_opts(&qemu_drive_opts);
3150    qemu_add_drive_opts(&qemu_legacy_drive_opts);
3151    qemu_add_drive_opts(&qemu_common_drive_opts);
3152    qemu_add_drive_opts(&qemu_drive_opts);
3153    qemu_add_drive_opts(&bdrv_runtime_opts);
3154    qemu_add_opts(&qemu_chardev_opts);
3155    qemu_add_opts(&qemu_device_opts);
3156    qemu_add_opts(&qemu_netdev_opts);
3157    qemu_add_opts(&qemu_net_opts);
3158    qemu_add_opts(&qemu_rtc_opts);
3159    qemu_add_opts(&qemu_global_opts);
3160    qemu_add_opts(&qemu_mon_opts);
3161    qemu_add_opts(&qemu_trace_opts);
3162    qemu_add_opts(&qemu_option_rom_opts);
3163    qemu_add_opts(&qemu_machine_opts);
3164    qemu_add_opts(&qemu_accel_opts);
3165    qemu_add_opts(&qemu_mem_opts);
3166    qemu_add_opts(&qemu_smp_opts);
3167    qemu_add_opts(&qemu_boot_opts);
3168    qemu_add_opts(&qemu_sandbox_opts);
3169    qemu_add_opts(&qemu_add_fd_opts);
3170    qemu_add_opts(&qemu_object_opts);
3171    qemu_add_opts(&qemu_tpmdev_opts);
3172    qemu_add_opts(&qemu_realtime_opts);
3173    qemu_add_opts(&qemu_msg_opts);
3174    qemu_add_opts(&qemu_name_opts);
3175    qemu_add_opts(&qemu_numa_opts);
3176    qemu_add_opts(&qemu_icount_opts);
3177    qemu_add_opts(&qemu_semihosting_config_opts);
3178    qemu_add_opts(&qemu_fw_cfg_opts);
3179    module_call_init(MODULE_INIT_OPTS);
3180
3181    runstate_init();
3182
3183    if (qcrypto_init(&err) < 0) {
3184        error_reportf_err(err, "cannot initialize crypto: ");
3185        exit(1);
3186    }
3187    rtc_clock = QEMU_CLOCK_HOST;
3188
3189    QLIST_INIT (&vm_change_state_head);
3190    os_setup_early_signal_handling();
3191
3192    cpu_model = NULL;
3193    snapshot = 0;
3194    cyls = heads = secs = 0;
3195    translation = BIOS_ATA_TRANSLATION_AUTO;
3196
3197    nb_nics = 0;
3198
3199    bdrv_init_with_whitelist();
3200
3201    autostart = 1;
3202
3203    /* first pass of option parsing */
3204    optind = 1;
3205    while (optind < argc) {
3206        if (argv[optind][0] != '-') {
3207            /* disk image */
3208            optind++;
3209        } else {
3210            const QEMUOption *popt;
3211
3212            popt = lookup_opt(argc, argv, &optarg, &optind);
3213            switch (popt->index) {
3214            case QEMU_OPTION_nodefconfig:
3215            case QEMU_OPTION_nouserconfig:
3216                userconfig = false;
3217                break;
3218            }
3219        }
3220    }
3221
3222    if (userconfig) {
3223        if (qemu_read_default_config_file() < 0) {
3224            exit(1);
3225        }
3226    }
3227
3228    /* second pass of option parsing */
3229    optind = 1;
3230    for(;;) {
3231        if (optind >= argc)
3232            break;
3233        if (argv[optind][0] != '-') {
3234            hda_opts = drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS);
3235        } else {
3236            const QEMUOption *popt;
3237
3238            popt = lookup_opt(argc, argv, &optarg, &optind);
3239            if (!(popt->arch_mask & arch_type)) {
3240                error_report("Option not supported for this target");
3241                exit(1);
3242            }
3243            switch(popt->index) {
3244            case QEMU_OPTION_no_kvm_irqchip: {
3245                olist = qemu_find_opts("machine");
3246                qemu_opts_parse_noisily(olist, "kernel_irqchip=off", false);
3247                break;
3248            }
3249            case QEMU_OPTION_cpu:
3250                /* hw initialization will check this */
3251                cpu_model = optarg;
3252                break;
3253            case QEMU_OPTION_hda:
3254                {
3255                    char buf[256];
3256                    if (cyls == 0)
3257                        snprintf(buf, sizeof(buf), "%s", HD_OPTS);
3258                    else
3259                        snprintf(buf, sizeof(buf),
3260                                 "%s,cyls=%d,heads=%d,secs=%d%s",
3261                                 HD_OPTS , cyls, heads, secs,
3262                                 translation == BIOS_ATA_TRANSLATION_LBA ?
3263                                 ",trans=lba" :
3264                                 translation == BIOS_ATA_TRANSLATION_NONE ?
3265                                 ",trans=none" : "");
3266                    drive_add(IF_DEFAULT, 0, optarg, buf);
3267                    break;
3268                }
3269            case QEMU_OPTION_hdb:
3270            case QEMU_OPTION_hdc:
3271            case QEMU_OPTION_hdd:
3272                drive_add(IF_DEFAULT, popt->index - QEMU_OPTION_hda, optarg,
3273                          HD_OPTS);
3274                break;
3275            case QEMU_OPTION_blockdev:
3276                {
3277                    Visitor *v;
3278                    BlockdevOptions_queue *bdo;
3279
3280                    v = qobject_input_visitor_new_str(optarg, "driver", &err);
3281                    if (!v) {
3282                        error_report_err(err);
3283                        exit(1);
3284                    }
3285
3286                    bdo = g_new(BlockdevOptions_queue, 1);
3287                    visit_type_BlockdevOptions(v, NULL, &bdo->bdo,
3288                                               &error_fatal);
3289                    visit_free(v);
3290                    loc_save(&bdo->loc);
3291                    QSIMPLEQ_INSERT_TAIL(&bdo_queue, bdo, entry);
3292                    break;
3293                }
3294            case QEMU_OPTION_drive:
3295                if (drive_def(optarg) == NULL) {
3296                    exit(1);
3297                }
3298                break;
3299            case QEMU_OPTION_set:
3300                if (qemu_set_option(optarg) != 0)
3301                    exit(1);
3302                break;
3303            case QEMU_OPTION_global:
3304                if (qemu_global_option(optarg) != 0)
3305                    exit(1);
3306                break;
3307            case QEMU_OPTION_mtdblock:
3308                drive_add(IF_MTD, -1, optarg, MTD_OPTS);
3309                break;
3310            case QEMU_OPTION_sd:
3311                drive_add(IF_SD, -1, optarg, SD_OPTS);
3312                break;
3313            case QEMU_OPTION_pflash:
3314                drive_add(IF_PFLASH, -1, optarg, PFLASH_OPTS);
3315                break;
3316            case QEMU_OPTION_snapshot:
3317                snapshot = 1;
3318                break;
3319            case QEMU_OPTION_hdachs:
3320                {
3321                    const char *p;
3322                    p = optarg;
3323                    cyls = strtol(p, (char **)&p, 0);
3324                    if (cyls < 1 || cyls > 16383)
3325                        goto chs_fail;
3326                    if (*p != ',')
3327                        goto chs_fail;
3328                    p++;
3329                    heads = strtol(p, (char **)&p, 0);
3330                    if (heads < 1 || heads > 16)
3331                        goto chs_fail;
3332                    if (*p != ',')
3333                        goto chs_fail;
3334                    p++;
3335                    secs = strtol(p, (char **)&p, 0);
3336                    if (secs < 1 || secs > 63)
3337                        goto chs_fail;
3338                    if (*p == ',') {
3339                        p++;
3340                        if (!strcmp(p, "large")) {
3341                            translation = BIOS_ATA_TRANSLATION_LARGE;
3342                        } else if (!strcmp(p, "rechs")) {
3343                            translation = BIOS_ATA_TRANSLATION_RECHS;
3344                        } else if (!strcmp(p, "none")) {
3345                            translation = BIOS_ATA_TRANSLATION_NONE;
3346                        } else if (!strcmp(p, "lba")) {
3347                            translation = BIOS_ATA_TRANSLATION_LBA;
3348                        } else if (!strcmp(p, "auto")) {
3349                            translation = BIOS_ATA_TRANSLATION_AUTO;
3350                        } else {
3351                            goto chs_fail;
3352                        }
3353                    } else if (*p != '\0') {
3354                    chs_fail:
3355                        error_report("invalid physical CHS format");
3356                        exit(1);
3357                    }
3358                    if (hda_opts != NULL) {
3359                        qemu_opt_set_number(hda_opts, "cyls", cyls,
3360                                            &error_abort);
3361                        qemu_opt_set_number(hda_opts, "heads", heads,
3362                                            &error_abort);
3363                        qemu_opt_set_number(hda_opts, "secs", secs,
3364                                            &error_abort);
3365                        if (translation == BIOS_ATA_TRANSLATION_LARGE) {
3366                            qemu_opt_set(hda_opts, "trans", "large",
3367                                         &error_abort);
3368                        } else if (translation == BIOS_ATA_TRANSLATION_RECHS) {
3369                            qemu_opt_set(hda_opts, "trans", "rechs",
3370                                         &error_abort);
3371                        } else if (translation == BIOS_ATA_TRANSLATION_LBA) {
3372                            qemu_opt_set(hda_opts, "trans", "lba",
3373                                         &error_abort);
3374                        } else if (translation == BIOS_ATA_TRANSLATION_NONE) {
3375                            qemu_opt_set(hda_opts, "trans", "none",
3376                                         &error_abort);
3377                        }
3378                    }
3379                }
3380                error_report("'-hdachs' is deprecated, please use '-device"
3381                             " ide-hd,cyls=c,heads=h,secs=s,...' instead");
3382                break;
3383            case QEMU_OPTION_numa:
3384                opts = qemu_opts_parse_noisily(qemu_find_opts("numa"),
3385                                               optarg, true);
3386                if (!opts) {
3387                    exit(1);
3388                }
3389                break;
3390            case QEMU_OPTION_display:
3391                display_type = select_display(optarg);
3392                break;
3393            case QEMU_OPTION_nographic:
3394                olist = qemu_find_opts("machine");
3395                qemu_opts_parse_noisily(olist, "graphics=off", false);
3396                nographic = true;
3397                display_type = DT_NONE;
3398                break;
3399            case QEMU_OPTION_curses:
3400#ifdef CONFIG_CURSES
3401                display_type = DT_CURSES;
3402#else
3403                error_report("curses support is disabled");
3404                exit(1);
3405#endif
3406                break;
3407            case QEMU_OPTION_portrait:
3408                graphic_rotate = 90;
3409                break;
3410            case QEMU_OPTION_rotate:
3411                graphic_rotate = strtol(optarg, (char **) &optarg, 10);
3412                if (graphic_rotate != 0 && graphic_rotate != 90 &&
3413                    graphic_rotate != 180 && graphic_rotate != 270) {
3414                    error_report("only 90, 180, 270 deg rotation is available");
3415                    exit(1);
3416                }
3417                break;
3418            case QEMU_OPTION_kernel:
3419                qemu_opts_set(qemu_find_opts("machine"), 0, "kernel", optarg,
3420                              &error_abort);
3421                break;
3422            case QEMU_OPTION_initrd:
3423                qemu_opts_set(qemu_find_opts("machine"), 0, "initrd", optarg,
3424                              &error_abort);
3425                break;
3426            case QEMU_OPTION_append:
3427                qemu_opts_set(qemu_find_opts("machine"), 0, "append", optarg,
3428                              &error_abort);
3429                break;
3430            case QEMU_OPTION_dtb:
3431                qemu_opts_set(qemu_find_opts("machine"), 0, "dtb", optarg,
3432                              &error_abort);
3433                break;
3434            case QEMU_OPTION_cdrom:
3435                drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS);
3436                break;
3437            case QEMU_OPTION_boot:
3438                opts = qemu_opts_parse_noisily(qemu_find_opts("boot-opts"),
3439                                               optarg, true);
3440                if (!opts) {
3441                    exit(1);
3442                }
3443                break;
3444            case QEMU_OPTION_fda:
3445            case QEMU_OPTION_fdb:
3446                drive_add(IF_FLOPPY, popt->index - QEMU_OPTION_fda,
3447                          optarg, FD_OPTS);
3448                break;
3449            case QEMU_OPTION_no_fd_bootchk:
3450                fd_bootchk = 0;
3451                break;
3452            case QEMU_OPTION_netdev:
3453                default_net = 0;
3454                if (net_client_parse(qemu_find_opts("netdev"), optarg) == -1) {
3455                    exit(1);
3456                }
3457                break;
3458            case QEMU_OPTION_net:
3459                default_net = 0;
3460                if (net_client_parse(qemu_find_opts("net"), optarg) == -1) {
3461                    exit(1);
3462                }
3463                break;
3464#ifdef CONFIG_LIBISCSI
3465            case QEMU_OPTION_iscsi:
3466                opts = qemu_opts_parse_noisily(qemu_find_opts("iscsi"),
3467                                               optarg, false);
3468                if (!opts) {
3469                    exit(1);
3470                }
3471                break;
3472#endif
3473#ifdef CONFIG_SLIRP
3474            case QEMU_OPTION_tftp:
3475                error_report("The -tftp option is deprecated. "
3476                             "Please use '-netdev user,tftp=...' instead.");
3477                legacy_tftp_prefix = optarg;
3478                break;
3479            case QEMU_OPTION_bootp:
3480                error_report("The -bootp option is deprecated. "
3481                             "Please use '-netdev user,bootfile=...' instead.");
3482                legacy_bootp_filename = optarg;
3483                break;
3484            case QEMU_OPTION_redir:
3485                error_report("The -redir option is deprecated. "
3486                             "Please use '-netdev user,hostfwd=...' instead.");
3487                if (net_slirp_redir(optarg) < 0)
3488                    exit(1);
3489                break;
3490#endif
3491            case QEMU_OPTION_bt:
3492                add_device_config(DEV_BT, optarg);
3493                break;
3494            case QEMU_OPTION_audio_help:
3495                AUD_help ();
3496                exit (0);
3497                break;
3498            case QEMU_OPTION_soundhw:
3499                select_soundhw (optarg);
3500                break;
3501            case QEMU_OPTION_h:
3502                help(0);
3503                break;
3504            case QEMU_OPTION_version:
3505                version();
3506                exit(0);
3507                break;
3508            case QEMU_OPTION_m:
3509                opts = qemu_opts_parse_noisily(qemu_find_opts("memory"),
3510                                               optarg, true);
3511                if (!opts) {
3512                    exit(EXIT_FAILURE);
3513                }
3514                break;
3515#ifdef CONFIG_TPM
3516            case QEMU_OPTION_tpmdev:
3517                if (tpm_config_parse(qemu_find_opts("tpmdev"), optarg) < 0) {
3518                    exit(1);
3519                }
3520                break;
3521#endif
3522            case QEMU_OPTION_mempath:
3523                mem_path = optarg;
3524                break;
3525            case QEMU_OPTION_mem_prealloc:
3526                mem_prealloc = 1;
3527                break;
3528            case QEMU_OPTION_d:
3529                log_mask = optarg;
3530                break;
3531            case QEMU_OPTION_D:
3532                log_file = optarg;
3533                break;
3534            case QEMU_OPTION_DFILTER:
3535                qemu_set_dfilter_ranges(optarg, &error_fatal);
3536                break;
3537            case QEMU_OPTION_s:
3538                add_device_config(DEV_GDB, "tcp::" DEFAULT_GDBSTUB_PORT);
3539                break;
3540            case QEMU_OPTION_gdb:
3541                add_device_config(DEV_GDB, optarg);
3542                break;
3543            case QEMU_OPTION_L:
3544                if (is_help_option(optarg)) {
3545                    list_data_dirs = true;
3546                } else {
3547                    qemu_add_data_dir(optarg);
3548                }
3549                break;
3550            case QEMU_OPTION_bios:
3551                qemu_opts_set(qemu_find_opts("machine"), 0, "firmware", optarg,
3552                              &error_abort);
3553                break;
3554            case QEMU_OPTION_singlestep:
3555                singlestep = 1;
3556                break;
3557            case QEMU_OPTION_S:
3558                autostart = 0;
3559                break;
3560            case QEMU_OPTION_k:
3561                keyboard_layout = optarg;
3562                break;
3563            case QEMU_OPTION_localtime:
3564                rtc_utc = 0;
3565                break;
3566            case QEMU_OPTION_vga:
3567                vga_model = optarg;
3568                default_vga = 0;
3569                break;
3570            case QEMU_OPTION_g:
3571                {
3572                    const char *p;
3573                    int w, h, depth;
3574                    p = optarg;
3575                    w = strtol(p, (char **)&p, 10);
3576                    if (w <= 0) {
3577                    graphic_error:
3578                        error_report("invalid resolution or depth");
3579                        exit(1);
3580                    }
3581                    if (*p != 'x')
3582                        goto graphic_error;
3583                    p++;
3584                    h = strtol(p, (char **)&p, 10);
3585                    if (h <= 0)
3586                        goto graphic_error;
3587                    if (*p == 'x') {
3588                        p++;
3589                        depth = strtol(p, (char **)&p, 10);
3590                        if (depth != 8 && depth != 15 && depth != 16 &&
3591                            depth != 24 && depth != 32)
3592                            goto graphic_error;
3593                    } else if (*p == '\0') {
3594                        depth = graphic_depth;
3595                    } else {
3596                        goto graphic_error;
3597                    }
3598
3599                    graphic_width = w;
3600                    graphic_height = h;
3601                    graphic_depth = depth;
3602                }
3603                break;
3604            case QEMU_OPTION_echr:
3605                {
3606                    char *r;
3607                    term_escape_char = strtol(optarg, &r, 0);
3608                    if (r == optarg)
3609                        printf("Bad argument to echr\n");
3610                    break;
3611                }
3612            case QEMU_OPTION_monitor:
3613                default_monitor = 0;
3614                if (strncmp(optarg, "none", 4)) {
3615                    monitor_parse(optarg, "readline", false);
3616                }
3617                break;
3618            case QEMU_OPTION_qmp:
3619                monitor_parse(optarg, "control", false);
3620                default_monitor = 0;
3621                break;
3622            case QEMU_OPTION_qmp_pretty:
3623                monitor_parse(optarg, "control", true);
3624                default_monitor = 0;
3625                break;
3626            case QEMU_OPTION_mon:
3627                opts = qemu_opts_parse_noisily(qemu_find_opts("mon"), optarg,
3628                                               true);
3629                if (!opts) {
3630                    exit(1);
3631                }
3632                default_monitor = 0;
3633                break;
3634            case QEMU_OPTION_chardev:
3635                opts = qemu_opts_parse_noisily(qemu_find_opts("chardev"),
3636                                               optarg, true);
3637                if (!opts) {
3638                    exit(1);
3639                }
3640                break;
3641            case QEMU_OPTION_fsdev:
3642                olist = qemu_find_opts("fsdev");
3643                if (!olist) {
3644                    error_report("fsdev support is disabled");
3645                    exit(1);
3646                }
3647                opts = qemu_opts_parse_noisily(olist, optarg, true);
3648                if (!opts) {
3649                    exit(1);
3650                }
3651                break;
3652            case QEMU_OPTION_virtfs: {
3653                QemuOpts *fsdev;
3654                QemuOpts *device;
3655                const char *writeout, *sock_fd, *socket, *path, *security_model;
3656
3657                olist = qemu_find_opts("virtfs");
3658                if (!olist) {
3659                    error_report("virtfs support is disabled");
3660                    exit(1);
3661                }
3662                opts = qemu_opts_parse_noisily(olist, optarg, true);
3663                if (!opts) {
3664                    exit(1);
3665                }
3666
3667                if (qemu_opt_get(opts, "fsdriver") == NULL ||
3668                    qemu_opt_get(opts, "mount_tag") == NULL) {
3669                    error_report("Usage: -virtfs fsdriver,mount_tag=tag");
3670                    exit(1);
3671                }
3672                fsdev = qemu_opts_create(qemu_find_opts("fsdev"),
3673                                         qemu_opts_id(opts) ?:
3674                                         qemu_opt_get(opts, "mount_tag"),
3675                                         1, NULL);
3676                if (!fsdev) {
3677                    error_report("duplicate or invalid fsdev id: %s",
3678                                 qemu_opt_get(opts, "mount_tag"));
3679                    exit(1);
3680                }
3681
3682                writeout = qemu_opt_get(opts, "writeout");
3683                if (writeout) {
3684#ifdef CONFIG_SYNC_FILE_RANGE
3685                    qemu_opt_set(fsdev, "writeout", writeout, &error_abort);
3686#else
3687                    error_report("writeout=immediate not supported "
3688                                 "on this platform");
3689                    exit(1);
3690#endif
3691                }
3692                qemu_opt_set(fsdev, "fsdriver",
3693                             qemu_opt_get(opts, "fsdriver"), &error_abort);
3694                path = qemu_opt_get(opts, "path");
3695                if (path) {
3696                    qemu_opt_set(fsdev, "path", path, &error_abort);
3697                }
3698                security_model = qemu_opt_get(opts, "security_model");
3699                if (security_model) {
3700                    qemu_opt_set(fsdev, "security_model", security_model,
3701                                 &error_abort);
3702                }
3703                socket = qemu_opt_get(opts, "socket");
3704                if (socket) {
3705                    qemu_opt_set(fsdev, "socket", socket, &error_abort);
3706                }
3707                sock_fd = qemu_opt_get(opts, "sock_fd");
3708                if (sock_fd) {
3709                    qemu_opt_set(fsdev, "sock_fd", sock_fd, &error_abort);
3710                }
3711
3712                qemu_opt_set_bool(fsdev, "readonly",
3713                                  qemu_opt_get_bool(opts, "readonly", 0),
3714                                  &error_abort);
3715                device = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
3716                                          &error_abort);
3717                qemu_opt_set(device, "driver", "virtio-9p-pci", &error_abort);
3718                qemu_opt_set(device, "fsdev",
3719                             qemu_opts_id(fsdev), &error_abort);
3720                qemu_opt_set(device, "mount_tag",
3721                             qemu_opt_get(opts, "mount_tag"), &error_abort);
3722                break;
3723            }
3724            case QEMU_OPTION_virtfs_synth: {
3725                QemuOpts *fsdev;
3726                QemuOpts *device;
3727
3728                fsdev = qemu_opts_create(qemu_find_opts("fsdev"), "v_synth",
3729                                         1, NULL);
3730                if (!fsdev) {
3731                    error_report("duplicate option: %s", "virtfs_synth");
3732                    exit(1);
3733                }
3734                qemu_opt_set(fsdev, "fsdriver", "synth", &error_abort);
3735
3736                device = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
3737                                          &error_abort);
3738                qemu_opt_set(device, "driver", "virtio-9p-pci", &error_abort);
3739                qemu_opt_set(device, "fsdev", "v_synth", &error_abort);
3740                qemu_opt_set(device, "mount_tag", "v_synth", &error_abort);
3741                break;
3742            }
3743            case QEMU_OPTION_serial:
3744                add_device_config(DEV_SERIAL, optarg);
3745                default_serial = 0;
3746                if (strncmp(optarg, "mon:", 4) == 0) {
3747                    default_monitor = 0;
3748                }
3749                break;
3750            case QEMU_OPTION_watchdog:
3751                if (watchdog) {
3752                    error_report("only one watchdog option may be given");
3753                    return 1;
3754                }
3755                watchdog = optarg;
3756                break;
3757            case QEMU_OPTION_watchdog_action:
3758                if (select_watchdog_action(optarg) == -1) {
3759                    error_report("unknown -watchdog-action parameter");
3760                    exit(1);
3761                }
3762                break;
3763            case QEMU_OPTION_virtiocon:
3764                add_device_config(DEV_VIRTCON, optarg);
3765                default_virtcon = 0;
3766                if (strncmp(optarg, "mon:", 4) == 0) {
3767                    default_monitor = 0;
3768                }
3769                break;
3770            case QEMU_OPTION_parallel:
3771                add_device_config(DEV_PARALLEL, optarg);
3772                default_parallel = 0;
3773                if (strncmp(optarg, "mon:", 4) == 0) {
3774                    default_monitor = 0;
3775                }
3776                break;
3777            case QEMU_OPTION_debugcon:
3778                add_device_config(DEV_DEBUGCON, optarg);
3779                break;
3780            case QEMU_OPTION_loadvm:
3781                loadvm = optarg;
3782                break;
3783            case QEMU_OPTION_full_screen:
3784                full_screen = 1;
3785                break;
3786            case QEMU_OPTION_no_frame:
3787                no_frame = 1;
3788                break;
3789            case QEMU_OPTION_alt_grab:
3790                alt_grab = 1;
3791                break;
3792            case QEMU_OPTION_ctrl_grab:
3793                ctrl_grab = 1;
3794                break;
3795            case QEMU_OPTION_no_quit:
3796                no_quit = 1;
3797                break;
3798            case QEMU_OPTION_sdl:
3799#ifdef CONFIG_SDL
3800                display_type = DT_SDL;
3801                break;
3802#else
3803                error_report("SDL support is disabled");
3804                exit(1);
3805#endif
3806            case QEMU_OPTION_pidfile:
3807                pid_file = optarg;
3808                break;
3809            case QEMU_OPTION_win2k_hack:
3810                win2k_install_hack = 1;
3811                break;
3812            case QEMU_OPTION_rtc_td_hack: {
3813                static GlobalProperty slew_lost_ticks = {
3814                    .driver   = "mc146818rtc",
3815                    .property = "lost_tick_policy",
3816                    .value    = "slew",
3817                };
3818
3819                qdev_prop_register_global(&slew_lost_ticks);
3820                break;
3821            }
3822            case QEMU_OPTION_acpitable:
3823                opts = qemu_opts_parse_noisily(qemu_find_opts("acpi"),
3824                                               optarg, true);
3825                if (!opts) {
3826                    exit(1);
3827                }
3828                acpi_table_add(opts, &error_fatal);
3829                break;
3830            case QEMU_OPTION_smbios:
3831                opts = qemu_opts_parse_noisily(qemu_find_opts("smbios"),
3832                                               optarg, false);
3833                if (!opts) {
3834                    exit(1);
3835                }
3836                smbios_entry_add(opts, &error_fatal);
3837                break;
3838            case QEMU_OPTION_fwcfg:
3839                opts = qemu_opts_parse_noisily(qemu_find_opts("fw_cfg"),
3840                                               optarg, true);
3841                if (opts == NULL) {
3842                    exit(1);
3843                }
3844                break;
3845            case QEMU_OPTION_enable_kvm:
3846                olist = qemu_find_opts("machine");
3847                qemu_opts_parse_noisily(olist, "accel=kvm", false);
3848                break;
3849            case QEMU_OPTION_enable_hax:
3850                olist = qemu_find_opts("machine");
3851                qemu_opts_parse_noisily(olist, "accel=hax", false);
3852                break;
3853            case QEMU_OPTION_M:
3854            case QEMU_OPTION_machine:
3855                olist = qemu_find_opts("machine");
3856                opts = qemu_opts_parse_noisily(olist, optarg, true);
3857                if (!opts) {
3858                    exit(1);
3859                }
3860                break;
3861             case QEMU_OPTION_no_kvm:
3862                olist = qemu_find_opts("machine");
3863                qemu_opts_parse_noisily(olist, "accel=tcg", false);
3864                break;
3865            case QEMU_OPTION_no_kvm_pit: {
3866                warn_report("ignoring deprecated option");
3867                break;
3868            }
3869            case QEMU_OPTION_no_kvm_pit_reinjection: {
3870                static GlobalProperty kvm_pit_lost_tick_policy = {
3871                    .driver   = "kvm-pit",
3872                    .property = "lost_tick_policy",
3873                    .value    = "discard",
3874                };
3875
3876                warn_report("deprecated, replaced by "
3877                            "-global kvm-pit.lost_tick_policy=discard");
3878                qdev_prop_register_global(&kvm_pit_lost_tick_policy);
3879                break;
3880            }
3881            case QEMU_OPTION_accel:
3882                accel_opts = qemu_opts_parse_noisily(qemu_find_opts("accel"),
3883                                                     optarg, true);
3884                optarg = qemu_opt_get(accel_opts, "accel");
3885                if (!optarg || is_help_option(optarg)) {
3886                    error_printf("Possible accelerators: kvm, xen, hax, tcg\n");
3887                    exit(0);
3888                }
3889                opts = qemu_opts_create(qemu_find_opts("machine"), NULL,
3890                                        false, &error_abort);
3891                qemu_opt_set(opts, "accel", optarg, &error_abort);
3892                break;
3893            case QEMU_OPTION_usb:
3894                olist = qemu_find_opts("machine");
3895                qemu_opts_parse_noisily(olist, "usb=on", false);
3896                break;
3897            case QEMU_OPTION_usbdevice:
3898                error_report("'-usbdevice' is deprecated, please use "
3899                             "'-device usb-...' instead");
3900                olist = qemu_find_opts("machine");
3901                qemu_opts_parse_noisily(olist, "usb=on", false);
3902                add_device_config(DEV_USB, optarg);
3903                break;
3904            case QEMU_OPTION_device:
3905                if (!qemu_opts_parse_noisily(qemu_find_opts("device"),
3906                                             optarg, true)) {
3907                    exit(1);
3908                }
3909                break;
3910            case QEMU_OPTION_smp:
3911                if (!qemu_opts_parse_noisily(qemu_find_opts("smp-opts"),
3912                                             optarg, true)) {
3913                    exit(1);
3914                }
3915                break;
3916            case QEMU_OPTION_vnc:
3917                vnc_parse(optarg, &error_fatal);
3918                break;
3919            case QEMU_OPTION_no_acpi:
3920                acpi_enabled = 0;
3921                break;
3922            case QEMU_OPTION_no_hpet:
3923                no_hpet = 1;
3924                break;
3925            case QEMU_OPTION_balloon:
3926                if (balloon_parse(optarg) < 0) {
3927                    error_report("unknown -balloon argument %s", optarg);
3928                    exit(1);
3929                }
3930                break;
3931            case QEMU_OPTION_no_reboot:
3932                no_reboot = 1;
3933                break;
3934            case QEMU_OPTION_no_shutdown:
3935                no_shutdown = 1;
3936                break;
3937            case QEMU_OPTION_show_cursor:
3938                cursor_hide = 0;
3939                break;
3940            case QEMU_OPTION_uuid:
3941                if (qemu_uuid_parse(optarg, &qemu_uuid) < 0) {
3942                    error_report("failed to parse UUID string: wrong format");
3943                    exit(1);
3944                }
3945                qemu_uuid_set = true;
3946                break;
3947            case QEMU_OPTION_option_rom:
3948                if (nb_option_roms >= MAX_OPTION_ROMS) {
3949                    error_report("too many option ROMs");
3950                    exit(1);
3951                }
3952                opts = qemu_opts_parse_noisily(qemu_find_opts("option-rom"),
3953                                               optarg, true);
3954                if (!opts) {
3955                    exit(1);
3956                }
3957                option_rom[nb_option_roms].name = qemu_opt_get(opts, "romfile");
3958                option_rom[nb_option_roms].bootindex =
3959                    qemu_opt_get_number(opts, "bootindex", -1);
3960                if (!option_rom[nb_option_roms].name) {
3961                    error_report("Option ROM file is not specified");
3962                    exit(1);
3963                }
3964                nb_option_roms++;
3965                break;
3966            case QEMU_OPTION_semihosting:
3967                semihosting.enabled = true;
3968                semihosting.target = SEMIHOSTING_TARGET_AUTO;
3969                break;
3970            case QEMU_OPTION_semihosting_config:
3971                semihosting.enabled = true;
3972                opts = qemu_opts_parse_noisily(qemu_find_opts("semihosting-config"),
3973                                               optarg, false);
3974                if (opts != NULL) {
3975                    semihosting.enabled = qemu_opt_get_bool(opts, "enable",
3976                                                            true);
3977                    const char *target = qemu_opt_get(opts, "target");
3978                    if (target != NULL) {
3979                        if (strcmp("native", target) == 0) {
3980                            semihosting.target = SEMIHOSTING_TARGET_NATIVE;
3981                        } else if (strcmp("gdb", target) == 0) {
3982                            semihosting.target = SEMIHOSTING_TARGET_GDB;
3983                        } else  if (strcmp("auto", target) == 0) {
3984                            semihosting.target = SEMIHOSTING_TARGET_AUTO;
3985                        } else {
3986                            error_report("unsupported semihosting-config %s",
3987                                         optarg);
3988                            exit(1);
3989                        }
3990                    } else {
3991                        semihosting.target = SEMIHOSTING_TARGET_AUTO;
3992                    }
3993                    /* Set semihosting argument count and vector */
3994                    qemu_opt_foreach(opts, add_semihosting_arg,
3995                                     &semihosting, NULL);
3996                } else {
3997                    error_report("unsupported semihosting-config %s", optarg);
3998                    exit(1);
3999                }
4000                break;
4001            case QEMU_OPTION_tdf:
4002                warn_report("ignoring deprecated option");
4003                break;
4004            case QEMU_OPTION_name:
4005                opts = qemu_opts_parse_noisily(qemu_find_opts("name"),
4006                                               optarg, true);
4007                if (!opts) {
4008                    exit(1);
4009                }
4010                break;
4011            case QEMU_OPTION_prom_env:
4012                if (nb_prom_envs >= MAX_PROM_ENVS) {
4013                    error_report("too many prom variables");
4014                    exit(1);
4015                }
4016                prom_envs[nb_prom_envs] = optarg;
4017                nb_prom_envs++;
4018                break;
4019            case QEMU_OPTION_old_param:
4020                old_param = 1;
4021                break;
4022            case QEMU_OPTION_clock:
4023                /* Clock options no longer exist.  Keep this option for
4024                 * backward compatibility.
4025                 */
4026                break;
4027            case QEMU_OPTION_startdate:
4028                configure_rtc_date_offset(optarg, 1);
4029                break;
4030            case QEMU_OPTION_rtc:
4031                opts = qemu_opts_parse_noisily(qemu_find_opts("rtc"), optarg,
4032                                               false);
4033                if (!opts) {
4034                    exit(1);
4035                }
4036                configure_rtc(opts);
4037                break;
4038            case QEMU_OPTION_tb_size:
4039#ifndef CONFIG_TCG
4040                error_report("TCG is disabled");
4041                exit(1);
4042#endif
4043                if (qemu_strtoul(optarg, NULL, 0, &tcg_tb_size) < 0) {
4044                    error_report("Invalid argument to -tb-size");
4045                    exit(1);
4046                }
4047                break;
4048            case QEMU_OPTION_icount:
4049                icount_opts = qemu_opts_parse_noisily(qemu_find_opts("icount"),
4050                                                      optarg, true);
4051                if (!icount_opts) {
4052                    exit(1);
4053                }
4054                break;
4055            case QEMU_OPTION_incoming:
4056                if (!incoming) {
4057                    runstate_set(RUN_STATE_INMIGRATE);
4058                }
4059                incoming = optarg;
4060                break;
4061            case QEMU_OPTION_only_migratable:
4062                /*
4063                 * TODO: we can remove this option one day, and we
4064                 * should all use:
4065                 *
4066                 * "-global migration.only-migratable=true"
4067                 */
4068                qemu_global_option("migration.only-migratable=true");
4069                break;
4070            case QEMU_OPTION_nodefaults:
4071                has_defaults = 0;
4072                break;
4073            case QEMU_OPTION_xen_domid:
4074                if (!(xen_available())) {
4075                    error_report("Option not supported for this target");
4076                    exit(1);
4077                }
4078                xen_domid = atoi(optarg);
4079                break;
4080            case QEMU_OPTION_xen_create:
4081                if (!(xen_available())) {
4082                    error_report("Option not supported for this target");
4083                    exit(1);
4084                }
4085                xen_mode = XEN_CREATE;
4086                break;
4087            case QEMU_OPTION_xen_attach:
4088                if (!(xen_available())) {
4089                    error_report("Option not supported for this target");
4090                    exit(1);
4091                }
4092                xen_mode = XEN_ATTACH;
4093                break;
4094            case QEMU_OPTION_xen_domid_restrict:
4095                if (!(xen_available())) {
4096                    error_report("Option not supported for this target");
4097                    exit(1);
4098                }
4099                xen_domid_restrict = true;
4100                break;
4101            case QEMU_OPTION_trace:
4102                g_free(trace_file);
4103                trace_file = trace_opt_parse(optarg);
4104                break;
4105            case QEMU_OPTION_readconfig:
4106                {
4107                    int ret = qemu_read_config_file(optarg);
4108                    if (ret < 0) {
4109                        error_report("read config %s: %s", optarg,
4110                                     strerror(-ret));
4111                        exit(1);
4112                    }
4113                    break;
4114                }
4115            case QEMU_OPTION_spice:
4116                olist = qemu_find_opts("spice");
4117                if (!olist) {
4118                    error_report("spice support is disabled");
4119                    exit(1);
4120                }
4121                opts = qemu_opts_parse_noisily(olist, optarg, false);
4122                if (!opts) {
4123                    exit(1);
4124                }
4125                display_remote++;
4126                break;
4127            case QEMU_OPTION_writeconfig:
4128                {
4129                    FILE *fp;
4130                    if (strcmp(optarg, "-") == 0) {
4131                        fp = stdout;
4132                    } else {
4133                        fp = fopen(optarg, "w");
4134                        if (fp == NULL) {
4135                            error_report("open %s: %s", optarg,
4136                                         strerror(errno));
4137                            exit(1);
4138                        }
4139                    }
4140                    qemu_config_write(fp);
4141                    if (fp != stdout) {
4142                        fclose(fp);
4143                    }
4144                    break;
4145                }
4146            case QEMU_OPTION_qtest:
4147                qtest_chrdev = optarg;
4148                break;
4149            case QEMU_OPTION_qtest_log:
4150                qtest_log = optarg;
4151                break;
4152            case QEMU_OPTION_sandbox:
4153                opts = qemu_opts_parse_noisily(qemu_find_opts("sandbox"),
4154                                               optarg, true);
4155                if (!opts) {
4156                    exit(1);
4157                }
4158                break;
4159            case QEMU_OPTION_add_fd:
4160#ifndef _WIN32
4161                opts = qemu_opts_parse_noisily(qemu_find_opts("add-fd"),
4162                                               optarg, false);
4163                if (!opts) {
4164                    exit(1);
4165                }
4166#else
4167                error_report("File descriptor passing is disabled on this "
4168                             "platform");
4169                exit(1);
4170#endif
4171                break;
4172            case QEMU_OPTION_object:
4173                opts = qemu_opts_parse_noisily(qemu_find_opts("object"),
4174                                               optarg, true);
4175                if (!opts) {
4176                    exit(1);
4177                }
4178                break;
4179            case QEMU_OPTION_realtime:
4180                opts = qemu_opts_parse_noisily(qemu_find_opts("realtime"),
4181                                               optarg, false);
4182                if (!opts) {
4183                    exit(1);
4184                }
4185                enable_mlock = qemu_opt_get_bool(opts, "mlock", true);
4186                break;
4187            case QEMU_OPTION_msg:
4188                opts = qemu_opts_parse_noisily(qemu_find_opts("msg"), optarg,
4189                                               false);
4190                if (!opts) {
4191                    exit(1);
4192                }
4193                configure_msg(opts);
4194                break;
4195            case QEMU_OPTION_dump_vmstate:
4196                if (vmstate_dump_file) {
4197                    error_report("only one '-dump-vmstate' "
4198                                 "option may be given");
4199                    exit(1);
4200                }
4201                vmstate_dump_file = fopen(optarg, "w");
4202                if (vmstate_dump_file == NULL) {
4203                    error_report("open %s: %s", optarg, strerror(errno));
4204                    exit(1);
4205                }
4206                break;
4207            default:
4208                os_parse_cmd_args(popt->index, optarg);
4209            }
4210        }
4211    }
4212    /*
4213     * Clear error location left behind by the loop.
4214     * Best done right after the loop.  Do not insert code here!
4215     */
4216    loc_set_none();
4217
4218    replay_configure(icount_opts);
4219
4220    machine_class = select_machine();
4221
4222    set_memory_options(&ram_slots, &maxram_size, machine_class);
4223
4224    os_daemonize();
4225    rcu_disable_atfork();
4226
4227    if (pid_file && qemu_create_pidfile(pid_file) != 0) {
4228        error_report("could not acquire pid file: %s", strerror(errno));
4229        exit(1);
4230    }
4231
4232    if (qemu_init_main_loop(&main_loop_err)) {
4233        error_report_err(main_loop_err);
4234        exit(1);
4235    }
4236
4237    if (qemu_opts_foreach(qemu_find_opts("sandbox"),
4238                          parse_sandbox, NULL, NULL)) {
4239        exit(1);
4240    }
4241
4242    if (qemu_opts_foreach(qemu_find_opts("name"),
4243                          parse_name, NULL, NULL)) {
4244        exit(1);
4245    }
4246
4247#ifndef _WIN32
4248    if (qemu_opts_foreach(qemu_find_opts("add-fd"),
4249                          parse_add_fd, NULL, NULL)) {
4250        exit(1);
4251    }
4252
4253    if (qemu_opts_foreach(qemu_find_opts("add-fd"),
4254                          cleanup_add_fd, NULL, NULL)) {
4255        exit(1);
4256    }
4257#endif
4258
4259    current_machine = MACHINE(object_new(object_class_get_name(
4260                          OBJECT_CLASS(machine_class))));
4261    if (machine_help_func(qemu_get_machine_opts(), current_machine)) {
4262        exit(0);
4263    }
4264    object_property_add_child(object_get_root(), "machine",
4265                              OBJECT(current_machine), &error_abort);
4266
4267    if (machine_class->minimum_page_bits) {
4268        if (!set_preferred_target_page_bits(machine_class->minimum_page_bits)) {
4269            /* This would be a board error: specifying a minimum smaller than
4270             * a target's compile-time fixed setting.
4271             */
4272            g_assert_not_reached();
4273        }
4274    }
4275
4276    cpu_exec_init_all();
4277
4278    if (machine_class->hw_version) {
4279        qemu_set_hw_version(machine_class->hw_version);
4280    }
4281
4282    if (cpu_model && is_help_option(cpu_model)) {
4283        list_cpus(stdout, &fprintf, cpu_model);
4284        exit(0);
4285    }
4286
4287    if (!trace_init_backends()) {
4288        exit(1);
4289    }
4290    trace_init_file(trace_file);
4291
4292    /* Open the logfile at this point and set the log mask if necessary.
4293     */
4294    if (log_file) {
4295        qemu_set_log_filename(log_file, &error_fatal);
4296    }
4297
4298    if (log_mask) {
4299        int mask;
4300        mask = qemu_str_to_log_mask(log_mask);
4301        if (!mask) {
4302            qemu_print_log_usage(stdout);
4303            exit(1);
4304        }
4305        qemu_set_log(mask);
4306    } else {
4307        qemu_set_log(0);
4308    }
4309
4310    /* add configured firmware directories */
4311    dirs = g_strsplit(CONFIG_QEMU_FIRMWAREPATH, G_SEARCHPATH_SEPARATOR_S, 0);
4312    for (i = 0; dirs[i] != NULL; i++) {
4313        qemu_add_data_dir(dirs[i]);
4314    }
4315
4316    /* try to find datadir relative to the executable path */
4317    qemu_add_data_dir(os_find_datadir());
4318
4319    /* add the datadir specified when building */
4320    qemu_add_data_dir(CONFIG_QEMU_DATADIR);
4321
4322    /* -L help lists the data directories and exits. */
4323    if (list_data_dirs) {
4324        for (i = 0; i < data_dir_idx; i++) {
4325            printf("%s\n", data_dir[i]);
4326        }
4327        exit(0);
4328    }
4329
4330    /* machine_class: default to UP */
4331    machine_class->max_cpus = machine_class->max_cpus ?: 1;
4332    machine_class->min_cpus = machine_class->min_cpus ?: 1;
4333    machine_class->default_cpus = machine_class->default_cpus ?: 1;
4334
4335    /* default to machine_class->default_cpus */
4336    smp_cpus = machine_class->default_cpus;
4337    max_cpus = machine_class->default_cpus;
4338
4339    smp_parse(qemu_opts_find(qemu_find_opts("smp-opts"), NULL));
4340
4341    /* sanity-check smp_cpus and max_cpus against machine_class */
4342    if (smp_cpus < machine_class->min_cpus) {
4343        error_report("Invalid SMP CPUs %d. The min CPUs "
4344                     "supported by machine '%s' is %d", smp_cpus,
4345                     machine_class->name, machine_class->min_cpus);
4346        exit(1);
4347    }
4348    if (max_cpus > machine_class->max_cpus) {
4349        error_report("Invalid SMP CPUs %d. The max CPUs "
4350                     "supported by machine '%s' is %d", max_cpus,
4351                     machine_class->name, machine_class->max_cpus);
4352        exit(1);
4353    }
4354
4355    /*
4356     * Get the default machine options from the machine if it is not already
4357     * specified either by the configuration file or by the command line.
4358     */
4359    if (machine_class->default_machine_opts) {
4360        qemu_opts_set_defaults(qemu_find_opts("machine"),
4361                               machine_class->default_machine_opts, 0);
4362    }
4363
4364    qemu_opts_foreach(qemu_find_opts("device"),
4365                      default_driver_check, NULL, NULL);
4366    qemu_opts_foreach(qemu_find_opts("global"),
4367                      default_driver_check, NULL, NULL);
4368
4369    if (!vga_model && !default_vga) {
4370        vga_interface_type = VGA_DEVICE;
4371    }
4372    if (!has_defaults || machine_class->no_serial) {
4373        default_serial = 0;
4374    }
4375    if (!has_defaults || machine_class->no_parallel) {
4376        default_parallel = 0;
4377    }
4378    if (!has_defaults || !machine_class->use_virtcon) {
4379        default_virtcon = 0;
4380    }
4381    if (!has_defaults || !machine_class->use_sclp) {
4382        default_sclp = 0;
4383    }
4384    if (!has_defaults || machine_class->no_floppy) {
4385        default_floppy = 0;
4386    }
4387    if (!has_defaults || machine_class->no_cdrom) {
4388        default_cdrom = 0;
4389    }
4390    if (!has_defaults || machine_class->no_sdcard) {
4391        default_sdcard = 0;
4392    }
4393    if (!has_defaults) {
4394        default_monitor = 0;
4395        default_net = 0;
4396        default_vga = 0;
4397    }
4398
4399    if (is_daemonized()) {
4400        /* According to documentation and historically, -nographic redirects
4401         * serial port, parallel port and monitor to stdio, which does not work
4402         * with -daemonize.  We can redirect these to null instead, but since
4403         * -nographic is legacy, let's just error out.
4404         * We disallow -nographic only if all other ports are not redirected
4405         * explicitly, to not break existing legacy setups which uses
4406         * -nographic _and_ redirects all ports explicitly - this is valid
4407         * usage, -nographic is just a no-op in this case.
4408         */
4409        if (nographic
4410            && (default_parallel || default_serial
4411                || default_monitor || default_virtcon)) {
4412            error_report("-nographic cannot be used with -daemonize");
4413            exit(1);
4414        }
4415#ifdef CONFIG_CURSES
4416        if (display_type == DT_CURSES) {
4417            error_report("curses display cannot be used with -daemonize");
4418            exit(1);
4419        }
4420#endif
4421    }
4422
4423    if (nographic) {
4424        if (default_parallel)
4425            add_device_config(DEV_PARALLEL, "null");
4426        if (default_serial && default_monitor) {
4427            add_device_config(DEV_SERIAL, "mon:stdio");
4428        } else if (default_virtcon && default_monitor) {
4429            add_device_config(DEV_VIRTCON, "mon:stdio");
4430        } else if (default_sclp && default_monitor) {
4431            add_device_config(DEV_SCLP, "mon:stdio");
4432        } else {
4433            if (default_serial)
4434                add_device_config(DEV_SERIAL, "stdio");
4435            if (default_virtcon)
4436                add_device_config(DEV_VIRTCON, "stdio");
4437            if (default_sclp) {
4438                add_device_config(DEV_SCLP, "stdio");
4439            }
4440            if (default_monitor)
4441                monitor_parse("stdio", "readline", false);
4442        }
4443    } else {
4444        if (default_serial)
4445            add_device_config(DEV_SERIAL, "vc:80Cx24C");
4446        if (default_parallel)
4447            add_device_config(DEV_PARALLEL, "vc:80Cx24C");
4448        if (default_monitor)
4449            monitor_parse("vc:80Cx24C", "readline", false);
4450        if (default_virtcon)
4451            add_device_config(DEV_VIRTCON, "vc:80Cx24C");
4452        if (default_sclp) {
4453            add_device_config(DEV_SCLP, "vc:80Cx24C");
4454        }
4455    }
4456
4457#if defined(CONFIG_VNC)
4458    if (!QTAILQ_EMPTY(&(qemu_find_opts("vnc")->head))) {
4459        display_remote++;
4460    }
4461#endif
4462    if (display_type == DT_DEFAULT && !display_remote) {
4463#if defined(CONFIG_GTK)
4464        display_type = DT_GTK;
4465#elif defined(CONFIG_SDL)
4466        display_type = DT_SDL;
4467#elif defined(CONFIG_COCOA)
4468        display_type = DT_COCOA;
4469#elif defined(CONFIG_VNC)
4470        vnc_parse("localhost:0,to=99,id=default", &error_abort);
4471#else
4472        display_type = DT_NONE;
4473#endif
4474    }
4475
4476    if ((no_frame || alt_grab || ctrl_grab) && display_type != DT_SDL) {
4477        error_report("-no-frame, -alt-grab and -ctrl-grab are only valid "
4478                     "for SDL, ignoring option");
4479    }
4480    if (no_quit && (display_type != DT_GTK && display_type != DT_SDL)) {
4481        error_report("-no-quit is only valid for GTK and SDL, "
4482                     "ignoring option");
4483    }
4484
4485    if (display_type == DT_GTK) {
4486        early_gtk_display_init(request_opengl);
4487    }
4488
4489    if (display_type == DT_SDL) {
4490        sdl_display_early_init(request_opengl);
4491    }
4492
4493    qemu_console_early_init();
4494
4495    if (request_opengl == 1 && display_opengl == 0) {
4496#if defined(CONFIG_OPENGL)
4497        error_report("OpenGL is not supported by the display");
4498#else
4499        error_report("OpenGL support is disabled");
4500#endif
4501        exit(1);
4502    }
4503
4504    page_size_init();
4505    socket_init();
4506
4507    if (qemu_opts_foreach(qemu_find_opts("object"),
4508                          user_creatable_add_opts_foreach,
4509                          object_create_initial, NULL)) {
4510        exit(1);
4511    }
4512
4513    if (qemu_opts_foreach(qemu_find_opts("chardev"),
4514                          chardev_init_func, NULL, NULL)) {
4515        exit(1);
4516    }
4517
4518#ifdef CONFIG_VIRTFS
4519    if (qemu_opts_foreach(qemu_find_opts("fsdev"),
4520                          fsdev_init_func, NULL, NULL)) {
4521        exit(1);
4522    }
4523#endif
4524
4525    if (qemu_opts_foreach(qemu_find_opts("device"),
4526                          device_help_func, NULL, NULL)) {
4527        exit(0);
4528    }
4529
4530    machine_opts = qemu_get_machine_opts();
4531    if (qemu_opt_foreach(machine_opts, machine_set_property, current_machine,
4532                         NULL)) {
4533        object_unref(OBJECT(current_machine));
4534        exit(1);
4535    }
4536
4537    configure_accelerator(current_machine);
4538
4539    /*
4540     * Register all the global properties, including accel properties,
4541     * machine properties, and user-specified ones.
4542     */
4543    register_global_properties(current_machine);
4544
4545    /*
4546     * Migration object can only be created after global properties
4547     * are applied correctly.
4548     */
4549    migration_object_init();
4550
4551    if (qtest_chrdev) {
4552        qtest_init(qtest_chrdev, qtest_log, &error_fatal);
4553    }
4554
4555    machine_opts = qemu_get_machine_opts();
4556    kernel_filename = qemu_opt_get(machine_opts, "kernel");
4557    initrd_filename = qemu_opt_get(machine_opts, "initrd");
4558    kernel_cmdline = qemu_opt_get(machine_opts, "append");
4559    bios_name = qemu_opt_get(machine_opts, "firmware");
4560
4561    opts = qemu_opts_find(qemu_find_opts("boot-opts"), NULL);
4562    if (opts) {
4563        boot_order = qemu_opt_get(opts, "order");
4564        if (boot_order) {
4565            validate_bootdevices(boot_order, &error_fatal);
4566        }
4567
4568        boot_once = qemu_opt_get(opts, "once");
4569        if (boot_once) {
4570            validate_bootdevices(boot_once, &error_fatal);
4571        }
4572
4573        boot_menu = qemu_opt_get_bool(opts, "menu", boot_menu);
4574        boot_strict = qemu_opt_get_bool(opts, "strict", false);
4575    }
4576
4577    if (!boot_order) {
4578        boot_order = machine_class->default_boot_order;
4579    }
4580
4581    if (!kernel_cmdline) {
4582        kernel_cmdline = "";
4583        current_machine->kernel_cmdline = (char *)kernel_cmdline;
4584    }
4585
4586    linux_boot = (kernel_filename != NULL);
4587
4588    if (!linux_boot && *kernel_cmdline != '\0') {
4589        error_report("-append only allowed with -kernel option");
4590        exit(1);
4591    }
4592
4593    if (!linux_boot && initrd_filename != NULL) {
4594        error_report("-initrd only allowed with -kernel option");
4595        exit(1);
4596    }
4597
4598    if (semihosting_enabled() && !semihosting_get_argc() && kernel_filename) {
4599        /* fall back to the -kernel/-append */
4600        semihosting_arg_fallback(kernel_filename, kernel_cmdline);
4601    }
4602
4603    os_set_line_buffering();
4604
4605    /* spice needs the timers to be initialized by this point */
4606    qemu_spice_init();
4607
4608    cpu_ticks_init();
4609    if (icount_opts) {
4610        if (!tcg_enabled()) {
4611            error_report("-icount is not allowed with hardware virtualization");
4612            exit(1);
4613        }
4614        configure_icount(icount_opts, &error_abort);
4615        qemu_opts_del(icount_opts);
4616    }
4617
4618    if (tcg_enabled()) {
4619        qemu_tcg_configure(accel_opts, &error_fatal);
4620    }
4621
4622    if (default_net) {
4623        QemuOptsList *net = qemu_find_opts("net");
4624        qemu_opts_set(net, NULL, "type", "nic", &error_abort);
4625#ifdef CONFIG_SLIRP
4626        qemu_opts_set(net, NULL, "type", "user", &error_abort);
4627#endif
4628    }
4629
4630    colo_info_init();
4631
4632    if (net_init_clients() < 0) {
4633        exit(1);
4634    }
4635
4636    if (qemu_opts_foreach(qemu_find_opts("object"),
4637                          user_creatable_add_opts_foreach,
4638                          object_create_delayed, NULL)) {
4639        exit(1);
4640    }
4641
4642    if (tpm_init() < 0) {
4643        exit(1);
4644    }
4645
4646    /* init the bluetooth world */
4647    if (foreach_device_config(DEV_BT, bt_parse))
4648        exit(1);
4649
4650    if (!xen_enabled()) {
4651        /* On 32-bit hosts, QEMU is limited by virtual address space */
4652        if (ram_size > (2047 << 20) && HOST_LONG_BITS == 32) {
4653            error_report("at most 2047 MB RAM can be simulated");
4654            exit(1);
4655        }
4656    }
4657
4658    blk_mig_init();
4659    ram_mig_init();
4660
4661    /* If the currently selected machine wishes to override the units-per-bus
4662     * property of its default HBA interface type, do so now. */
4663    if (machine_class->units_per_default_bus) {
4664        override_max_devs(machine_class->block_default_type,
4665                          machine_class->units_per_default_bus);
4666    }
4667
4668    /* open the virtual block devices */
4669    while (!QSIMPLEQ_EMPTY(&bdo_queue)) {
4670        BlockdevOptions_queue *bdo = QSIMPLEQ_FIRST(&bdo_queue);
4671
4672        QSIMPLEQ_REMOVE_HEAD(&bdo_queue, entry);
4673        loc_push_restore(&bdo->loc);
4674        qmp_blockdev_add(bdo->bdo, &error_fatal);
4675        loc_pop(&bdo->loc);
4676        qapi_free_BlockdevOptions(bdo->bdo);
4677        g_free(bdo);
4678    }
4679    if (snapshot || replay_mode != REPLAY_MODE_NONE) {
4680        qemu_opts_foreach(qemu_find_opts("drive"), drive_enable_snapshot,
4681                          NULL, NULL);
4682    }
4683    if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func,
4684                          &machine_class->block_default_type, NULL)) {
4685        exit(1);
4686    }
4687
4688    default_drive(default_cdrom, snapshot, machine_class->block_default_type, 2,
4689                  CDROM_OPTS);
4690    default_drive(default_floppy, snapshot, IF_FLOPPY, 0, FD_OPTS);
4691    default_drive(default_sdcard, snapshot, IF_SD, 0, SD_OPTS);
4692
4693    if (qemu_opts_foreach(qemu_find_opts("mon"),
4694                          mon_init_func, NULL, NULL)) {
4695        exit(1);
4696    }
4697
4698    if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
4699        exit(1);
4700    if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
4701        exit(1);
4702    if (foreach_device_config(DEV_VIRTCON, virtcon_parse) < 0)
4703        exit(1);
4704    if (foreach_device_config(DEV_SCLP, sclp_parse) < 0) {
4705        exit(1);
4706    }
4707    if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0)
4708        exit(1);
4709
4710    /* If no default VGA is requested, the default is "none".  */
4711    if (default_vga) {
4712        if (machine_class->default_display) {
4713            vga_model = machine_class->default_display;
4714        } else if (vga_interface_available(VGA_CIRRUS)) {
4715            vga_model = "cirrus";
4716        } else if (vga_interface_available(VGA_STD)) {
4717            vga_model = "std";
4718        }
4719    }
4720    if (vga_model) {
4721        select_vgahw(vga_model);
4722    }
4723
4724    if (watchdog) {
4725        i = select_watchdog(watchdog);
4726        if (i > 0)
4727            exit (i == 1 ? 1 : 0);
4728    }
4729
4730    /* This checkpoint is required by replay to separate prior clock
4731       reading from the other reads, because timer polling functions query
4732       clock values from the log. */
4733    replay_checkpoint(CHECKPOINT_INIT);
4734    qdev_machine_init();
4735
4736    current_machine->ram_size = ram_size;
4737    current_machine->maxram_size = maxram_size;
4738    current_machine->ram_slots = ram_slots;
4739    current_machine->boot_order = boot_order;
4740    current_machine->cpu_model = cpu_model;
4741
4742    parse_numa_opts(current_machine);
4743
4744    /* parse features once if machine provides default cpu_type */
4745    if (machine_class->default_cpu_type) {
4746        current_machine->cpu_type = machine_class->default_cpu_type;
4747        if (cpu_model) {
4748            current_machine->cpu_type =
4749                cpu_parse_cpu_model(machine_class->default_cpu_type, cpu_model);
4750        }
4751    }
4752
4753    machine_run_board_init(current_machine);
4754
4755    realtime_init();
4756
4757    soundhw_init();
4758
4759    if (hax_enabled()) {
4760        hax_sync_vcpus();
4761    }
4762
4763    if (qemu_opts_foreach(qemu_find_opts("fw_cfg"),
4764                          parse_fw_cfg, fw_cfg_find(), NULL) != 0) {
4765        exit(1);
4766    }
4767
4768    /* init USB devices */
4769    if (machine_usb(current_machine)) {
4770        if (foreach_device_config(DEV_USB, usb_parse) < 0)
4771            exit(1);
4772    }
4773
4774    /* Check if IGD GFX passthrough. */
4775    igd_gfx_passthru();
4776
4777    /* init generic devices */
4778    rom_set_order_override(FW_CFG_ORDER_OVERRIDE_DEVICE);
4779    if (qemu_opts_foreach(qemu_find_opts("device"),
4780                          device_init_func, NULL, NULL)) {
4781        exit(1);
4782    }
4783
4784    cpu_synchronize_all_post_init();
4785
4786    rom_reset_order_override();
4787
4788    /*
4789     * Create frontends for -drive if=scsi leftovers.
4790     * Normally, frontends for -drive get created by machine
4791     * initialization for onboard SCSI HBAs.  However, we create a few
4792     * more ever since SCSI qdevification, but this is pretty much an
4793     * implementation accident, and deprecated.
4794     */
4795    scsi_legacy_handle_cmdline();
4796
4797    /* Did we create any drives that we failed to create a device for? */
4798    drive_check_orphaned();
4799
4800    /* Don't warn about the default network setup that you get if
4801     * no command line -net or -netdev options are specified. There
4802     * are two cases that we would otherwise complain about:
4803     * (1) board doesn't support a NIC but the implicit "-net nic"
4804     * requested one
4805     * (2) CONFIG_SLIRP not set, in which case the implicit "-net nic"
4806     * sets up a nic that isn't connected to anything.
4807     */
4808    if (!default_net) {
4809        net_check_clients();
4810    }
4811
4812
4813    if (boot_once) {
4814        qemu_boot_set(boot_once, &error_fatal);
4815        qemu_register_reset(restore_boot_order, g_strdup(boot_order));
4816    }
4817
4818    ds = init_displaystate();
4819
4820    /* init local displays */
4821    switch (display_type) {
4822    case DT_CURSES:
4823        curses_display_init(ds, full_screen);
4824        break;
4825    case DT_SDL:
4826        sdl_display_init(ds, full_screen, no_frame);
4827        break;
4828    case DT_COCOA:
4829        cocoa_display_init(ds, full_screen);
4830        break;
4831    case DT_GTK:
4832        gtk_display_init(ds, full_screen, grab_on_hover);
4833        break;
4834    default:
4835        break;
4836    }
4837
4838    /* must be after terminal init, SDL library changes signal handlers */
4839    os_setup_signal_handling();
4840
4841    /* init remote displays */
4842#ifdef CONFIG_VNC
4843    qemu_opts_foreach(qemu_find_opts("vnc"),
4844                      vnc_init_func, NULL, NULL);
4845#endif
4846
4847    if (using_spice) {
4848        qemu_spice_display_init();
4849    }
4850
4851#ifdef CONFIG_OPENGL_DMABUF
4852    if (display_type == DT_EGL) {
4853        egl_headless_init();
4854    }
4855#endif
4856
4857    if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
4858        exit(1);
4859    }
4860
4861    qdev_machine_creation_done();
4862
4863    /* TODO: once all bus devices are qdevified, this should be done
4864     * when bus is created by qdev.c */
4865    qemu_register_reset(qbus_reset_all_fn, sysbus_get_default());
4866    qemu_run_machine_init_done_notifiers();
4867
4868    if (rom_check_and_register_reset() != 0) {
4869        error_report("rom check and register reset failed");
4870        exit(1);
4871    }
4872
4873    replay_start();
4874
4875    /* This checkpoint is required by replay to separate prior clock
4876       reading from the other reads, because timer polling functions query
4877       clock values from the log. */
4878    replay_checkpoint(CHECKPOINT_RESET);
4879    qemu_system_reset(SHUTDOWN_CAUSE_NONE);
4880    register_global_state();
4881    if (replay_mode != REPLAY_MODE_NONE) {
4882        replay_vmstate_init();
4883    } else if (loadvm) {
4884        Error *local_err = NULL;
4885        if (load_snapshot(loadvm, &local_err) < 0) {
4886            error_report_err(local_err);
4887            autostart = 0;
4888        }
4889    }
4890
4891    qdev_prop_check_globals();
4892    if (vmstate_dump_file) {
4893        /* dump and exit */
4894        dump_vmstate_json_to_file(vmstate_dump_file);
4895        return 0;
4896    }
4897
4898    if (incoming) {
4899        Error *local_err = NULL;
4900        qemu_start_incoming_migration(incoming, &local_err);
4901        if (local_err) {
4902            error_reportf_err(local_err, "-incoming %s: ", incoming);
4903            exit(1);
4904        }
4905    } else if (autostart) {
4906        vm_start();
4907    }
4908
4909    os_setup_post();
4910
4911    main_loop();
4912    replay_disable_events();
4913    iothread_stop_all();
4914
4915    pause_all_vcpus();
4916    bdrv_close_all();
4917    res_free();
4918
4919    /* vhost-user must be cleaned up before chardevs.  */
4920    tpm_cleanup();
4921    net_cleanup();
4922    audio_cleanup();
4923    monitor_cleanup();
4924    qemu_chr_cleanup();
4925    user_creatable_cleanup();
4926    /* TODO: unref root container, check all devices are ok */
4927
4928    return 0;
4929}
4930