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