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