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