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