1 /* 2 * QEMU System Emulator 3 * 4 * Copyright (c) 2003-2008 Fabrice Bellard 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 * copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in 14 * all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 * THE SOFTWARE. 23 */ 24 25 #include "qemu/osdep.h" 26 #include "qemu/help-texts.h" 27 #include "qemu/datadir.h" 28 #include "qemu/units.h" 29 #include "exec/cpu-common.h" 30 #include "exec/page-vary.h" 31 #include "hw/qdev-properties.h" 32 #include "qapi/compat-policy.h" 33 #include "qapi/error.h" 34 #include "qapi/qmp/qdict.h" 35 #include "qapi/qmp/qstring.h" 36 #include "qapi/qmp/qjson.h" 37 #include "qemu-version.h" 38 #include "qemu/cutils.h" 39 #include "qemu/help_option.h" 40 #include "qemu/hw-version.h" 41 #include "qemu/uuid.h" 42 #include "sysemu/reset.h" 43 #include "sysemu/runstate.h" 44 #include "sysemu/runstate-action.h" 45 #include "sysemu/seccomp.h" 46 #include "sysemu/tcg.h" 47 #include "sysemu/xen.h" 48 49 #include "qemu/error-report.h" 50 #include "qemu/sockets.h" 51 #include "qemu/accel.h" 52 #include "qemu/async-teardown.h" 53 #include "hw/usb.h" 54 #include "hw/isa/isa.h" 55 #include "hw/scsi/scsi.h" 56 #include "hw/display/vga.h" 57 #include "hw/firmware/smbios.h" 58 #include "hw/acpi/acpi.h" 59 #include "hw/xen/xen.h" 60 #include "hw/loader.h" 61 #include "monitor/qdev.h" 62 #include "net/net.h" 63 #include "net/slirp.h" 64 #include "monitor/monitor.h" 65 #include "ui/console.h" 66 #include "ui/input.h" 67 #include "sysemu/sysemu.h" 68 #include "sysemu/numa.h" 69 #include "sysemu/hostmem.h" 70 #include "exec/gdbstub.h" 71 #include "qemu/timer.h" 72 #include "chardev/char.h" 73 #include "qemu/bitmap.h" 74 #include "qemu/log.h" 75 #include "sysemu/blockdev.h" 76 #include "hw/block/block.h" 77 #include "hw/i386/x86.h" 78 #include "hw/i386/pc.h" 79 #include "migration/misc.h" 80 #include "migration/snapshot.h" 81 #include "sysemu/tpm.h" 82 #include "sysemu/dma.h" 83 #include "hw/audio/soundhw.h" 84 #include "audio/audio.h" 85 #include "sysemu/cpus.h" 86 #include "sysemu/cpu-timers.h" 87 #include "migration/colo.h" 88 #include "migration/postcopy-ram.h" 89 #include "sysemu/kvm.h" 90 #include "qapi/qobject-input-visitor.h" 91 #include "qemu/option.h" 92 #include "qemu/config-file.h" 93 #include "qemu/main-loop.h" 94 #ifdef CONFIG_VIRTFS 95 #include "fsdev/qemu-fsdev.h" 96 #endif 97 #include "sysemu/qtest.h" 98 #ifdef CONFIG_TCG 99 #include "tcg/perf.h" 100 #endif 101 102 #include "disas/disas.h" 103 104 #include "trace.h" 105 #include "trace/control.h" 106 #include "qemu/plugin.h" 107 #include "qemu/queue.h" 108 #include "sysemu/arch_init.h" 109 #include "exec/confidential-guest-support.h" 110 111 #include "ui/qemu-spice.h" 112 #include "qapi/string-input-visitor.h" 113 #include "qapi/opts-visitor.h" 114 #include "qapi/clone-visitor.h" 115 #include "qom/object_interfaces.h" 116 #include "semihosting/semihost.h" 117 #include "crypto/init.h" 118 #include "sysemu/replay.h" 119 #include "qapi/qapi-events-run-state.h" 120 #include "qapi/qapi-types-audio.h" 121 #include "qapi/qapi-visit-audio.h" 122 #include "qapi/qapi-visit-block-core.h" 123 #include "qapi/qapi-visit-compat.h" 124 #include "qapi/qapi-visit-machine.h" 125 #include "qapi/qapi-visit-ui.h" 126 #include "qapi/qapi-commands-block-core.h" 127 #include "qapi/qapi-commands-migration.h" 128 #include "qapi/qapi-commands-misc.h" 129 #include "qapi/qapi-visit-qom.h" 130 #include "qapi/qapi-commands-ui.h" 131 #include "block/qdict.h" 132 #include "qapi/qmp/qerror.h" 133 #include "sysemu/iothread.h" 134 #include "qemu/guest-random.h" 135 #include "qemu/keyval.h" 136 137 #define MAX_VIRTIO_CONSOLES 1 138 139 typedef struct BlockdevOptionsQueueEntry { 140 BlockdevOptions *bdo; 141 Location loc; 142 QSIMPLEQ_ENTRY(BlockdevOptionsQueueEntry) entry; 143 } BlockdevOptionsQueueEntry; 144 145 typedef QSIMPLEQ_HEAD(, BlockdevOptionsQueueEntry) BlockdevOptionsQueue; 146 147 typedef struct ObjectOption { 148 ObjectOptions *opts; 149 QTAILQ_ENTRY(ObjectOption) next; 150 } ObjectOption; 151 152 typedef struct DeviceOption { 153 QDict *opts; 154 Location loc; 155 QTAILQ_ENTRY(DeviceOption) next; 156 } DeviceOption; 157 158 static const char *cpu_option; 159 static const char *mem_path; 160 static const char *incoming; 161 static const char *loadvm; 162 static const char *accelerators; 163 static bool have_custom_ram_size; 164 static const char *ram_memdev_id; 165 static QDict *machine_opts_dict; 166 static QTAILQ_HEAD(, ObjectOption) object_opts = QTAILQ_HEAD_INITIALIZER(object_opts); 167 static QTAILQ_HEAD(, DeviceOption) device_opts = QTAILQ_HEAD_INITIALIZER(device_opts); 168 static int display_remote; 169 static int snapshot; 170 static bool preconfig_requested; 171 static QemuPluginList plugin_list = QTAILQ_HEAD_INITIALIZER(plugin_list); 172 static BlockdevOptionsQueue bdo_queue = QSIMPLEQ_HEAD_INITIALIZER(bdo_queue); 173 static bool nographic = false; 174 static int mem_prealloc; /* force preallocation of physical target memory */ 175 static const char *vga_model = NULL; 176 static DisplayOptions dpy; 177 static int num_serial_hds; 178 static Chardev **serial_hds; 179 static const char *log_mask; 180 static const char *log_file; 181 static bool list_data_dirs; 182 static const char *qtest_chrdev; 183 static const char *qtest_log; 184 185 static int has_defaults = 1; 186 static int default_audio = 1; 187 static int default_serial = 1; 188 static int default_parallel = 1; 189 static int default_monitor = 1; 190 static int default_floppy = 1; 191 static int default_cdrom = 1; 192 static int default_sdcard = 1; 193 static int default_vga = 1; 194 static int default_net = 1; 195 196 static const struct { 197 const char *driver; 198 int *flag; 199 } default_list[] = { 200 { .driver = "xen-console", .flag = &default_serial }, 201 { .driver = "isa-serial", .flag = &default_serial }, 202 { .driver = "isa-parallel", .flag = &default_parallel }, 203 { .driver = "isa-fdc", .flag = &default_floppy }, 204 { .driver = "floppy", .flag = &default_floppy }, 205 { .driver = "ide-cd", .flag = &default_cdrom }, 206 { .driver = "ide-hd", .flag = &default_cdrom }, 207 { .driver = "scsi-cd", .flag = &default_cdrom }, 208 { .driver = "scsi-hd", .flag = &default_cdrom }, 209 { .driver = "VGA", .flag = &default_vga }, 210 { .driver = "isa-vga", .flag = &default_vga }, 211 { .driver = "cirrus-vga", .flag = &default_vga }, 212 { .driver = "isa-cirrus-vga", .flag = &default_vga }, 213 { .driver = "vmware-svga", .flag = &default_vga }, 214 { .driver = "qxl-vga", .flag = &default_vga }, 215 { .driver = "virtio-vga", .flag = &default_vga }, 216 { .driver = "ati-vga", .flag = &default_vga }, 217 { .driver = "vhost-user-vga", .flag = &default_vga }, 218 { .driver = "virtio-vga-gl", .flag = &default_vga }, 219 { .driver = "virtio-vga-rutabaga", .flag = &default_vga }, 220 }; 221 222 static QemuOptsList qemu_rtc_opts = { 223 .name = "rtc", 224 .head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head), 225 .merge_lists = true, 226 .desc = { 227 { 228 .name = "base", 229 .type = QEMU_OPT_STRING, 230 },{ 231 .name = "clock", 232 .type = QEMU_OPT_STRING, 233 },{ 234 .name = "driftfix", 235 .type = QEMU_OPT_STRING, 236 }, 237 { /* end of list */ } 238 }, 239 }; 240 241 static QemuOptsList qemu_option_rom_opts = { 242 .name = "option-rom", 243 .implied_opt_name = "romfile", 244 .head = QTAILQ_HEAD_INITIALIZER(qemu_option_rom_opts.head), 245 .desc = { 246 { 247 .name = "bootindex", 248 .type = QEMU_OPT_NUMBER, 249 }, { 250 .name = "romfile", 251 .type = QEMU_OPT_STRING, 252 }, 253 { /* end of list */ } 254 }, 255 }; 256 257 static QemuOptsList qemu_accel_opts = { 258 .name = "accel", 259 .implied_opt_name = "accel", 260 .head = QTAILQ_HEAD_INITIALIZER(qemu_accel_opts.head), 261 .desc = { 262 /* 263 * no elements => accept any 264 * sanity checking will happen later 265 * when setting accelerator properties 266 */ 267 { } 268 }, 269 }; 270 271 static QemuOptsList qemu_boot_opts = { 272 .name = "boot-opts", 273 .implied_opt_name = "order", 274 .merge_lists = true, 275 .head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head), 276 .desc = { 277 { 278 .name = "order", 279 .type = QEMU_OPT_STRING, 280 }, { 281 .name = "once", 282 .type = QEMU_OPT_STRING, 283 }, { 284 .name = "menu", 285 .type = QEMU_OPT_BOOL, 286 }, { 287 .name = "splash", 288 .type = QEMU_OPT_STRING, 289 }, { 290 .name = "splash-time", 291 .type = QEMU_OPT_NUMBER, 292 }, { 293 .name = "reboot-timeout", 294 .type = QEMU_OPT_NUMBER, 295 }, { 296 .name = "strict", 297 .type = QEMU_OPT_BOOL, 298 }, 299 { /*End of list */ } 300 }, 301 }; 302 303 static QemuOptsList qemu_add_fd_opts = { 304 .name = "add-fd", 305 .head = QTAILQ_HEAD_INITIALIZER(qemu_add_fd_opts.head), 306 .desc = { 307 { 308 .name = "fd", 309 .type = QEMU_OPT_NUMBER, 310 .help = "file descriptor of which a duplicate is added to fd set", 311 },{ 312 .name = "set", 313 .type = QEMU_OPT_NUMBER, 314 .help = "ID of the fd set to add fd to", 315 },{ 316 .name = "opaque", 317 .type = QEMU_OPT_STRING, 318 .help = "free-form string used to describe fd", 319 }, 320 { /* end of list */ } 321 }, 322 }; 323 324 static QemuOptsList qemu_object_opts = { 325 .name = "object", 326 .implied_opt_name = "qom-type", 327 .head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head), 328 .desc = { 329 { } 330 }, 331 }; 332 333 static QemuOptsList qemu_tpmdev_opts = { 334 .name = "tpmdev", 335 .implied_opt_name = "type", 336 .head = QTAILQ_HEAD_INITIALIZER(qemu_tpmdev_opts.head), 337 .desc = { 338 /* options are defined in the TPM backends */ 339 { /* end of list */ } 340 }, 341 }; 342 343 static QemuOptsList qemu_overcommit_opts = { 344 .name = "overcommit", 345 .head = QTAILQ_HEAD_INITIALIZER(qemu_overcommit_opts.head), 346 .desc = { 347 { 348 .name = "mem-lock", 349 .type = QEMU_OPT_BOOL, 350 }, 351 { 352 .name = "cpu-pm", 353 .type = QEMU_OPT_BOOL, 354 }, 355 { /* end of list */ } 356 }, 357 }; 358 359 static QemuOptsList qemu_msg_opts = { 360 .name = "msg", 361 .head = QTAILQ_HEAD_INITIALIZER(qemu_msg_opts.head), 362 .desc = { 363 { 364 .name = "timestamp", 365 .type = QEMU_OPT_BOOL, 366 }, 367 { 368 .name = "guest-name", 369 .type = QEMU_OPT_BOOL, 370 .help = "Prepends guest name for error messages but only if " 371 "-name guest is set otherwise option is ignored\n", 372 }, 373 { /* end of list */ } 374 }, 375 }; 376 377 static QemuOptsList qemu_name_opts = { 378 .name = "name", 379 .implied_opt_name = "guest", 380 .merge_lists = true, 381 .head = QTAILQ_HEAD_INITIALIZER(qemu_name_opts.head), 382 .desc = { 383 { 384 .name = "guest", 385 .type = QEMU_OPT_STRING, 386 .help = "Sets the name of the guest.\n" 387 "This name will be displayed in the SDL window caption.\n" 388 "The name will also be used for the VNC server", 389 }, { 390 .name = "process", 391 .type = QEMU_OPT_STRING, 392 .help = "Sets the name of the QEMU process, as shown in top etc", 393 }, { 394 .name = "debug-threads", 395 .type = QEMU_OPT_BOOL, 396 .help = "When enabled, name the individual threads; defaults off.\n" 397 "NOTE: The thread names are for debugging and not a\n" 398 "stable API.", 399 }, 400 { /* End of list */ } 401 }, 402 }; 403 404 static QemuOptsList qemu_mem_opts = { 405 .name = "memory", 406 .implied_opt_name = "size", 407 .head = QTAILQ_HEAD_INITIALIZER(qemu_mem_opts.head), 408 .merge_lists = true, 409 .desc = { 410 { 411 .name = "size", 412 .type = QEMU_OPT_SIZE, 413 }, 414 { 415 .name = "slots", 416 .type = QEMU_OPT_NUMBER, 417 }, 418 { 419 .name = "maxmem", 420 .type = QEMU_OPT_SIZE, 421 }, 422 { /* end of list */ } 423 }, 424 }; 425 426 static QemuOptsList qemu_icount_opts = { 427 .name = "icount", 428 .implied_opt_name = "shift", 429 .merge_lists = true, 430 .head = QTAILQ_HEAD_INITIALIZER(qemu_icount_opts.head), 431 .desc = { 432 { 433 .name = "shift", 434 .type = QEMU_OPT_STRING, 435 }, { 436 .name = "align", 437 .type = QEMU_OPT_BOOL, 438 }, { 439 .name = "sleep", 440 .type = QEMU_OPT_BOOL, 441 }, { 442 .name = "rr", 443 .type = QEMU_OPT_STRING, 444 }, { 445 .name = "rrfile", 446 .type = QEMU_OPT_STRING, 447 }, { 448 .name = "rrsnapshot", 449 .type = QEMU_OPT_STRING, 450 }, 451 { /* end of list */ } 452 }, 453 }; 454 455 static QemuOptsList qemu_fw_cfg_opts = { 456 .name = "fw_cfg", 457 .implied_opt_name = "name", 458 .head = QTAILQ_HEAD_INITIALIZER(qemu_fw_cfg_opts.head), 459 .desc = { 460 { 461 .name = "name", 462 .type = QEMU_OPT_STRING, 463 .help = "Sets the fw_cfg name of the blob to be inserted", 464 }, { 465 .name = "file", 466 .type = QEMU_OPT_STRING, 467 .help = "Sets the name of the file from which " 468 "the fw_cfg blob will be loaded", 469 }, { 470 .name = "string", 471 .type = QEMU_OPT_STRING, 472 .help = "Sets content of the blob to be inserted from a string", 473 }, { 474 .name = "gen_id", 475 .type = QEMU_OPT_STRING, 476 .help = "Sets id of the object generating the fw_cfg blob " 477 "to be inserted", 478 }, 479 { /* end of list */ } 480 }, 481 }; 482 483 static QemuOptsList qemu_action_opts = { 484 .name = "action", 485 .merge_lists = true, 486 .head = QTAILQ_HEAD_INITIALIZER(qemu_action_opts.head), 487 .desc = { 488 { 489 .name = "shutdown", 490 .type = QEMU_OPT_STRING, 491 },{ 492 .name = "reboot", 493 .type = QEMU_OPT_STRING, 494 },{ 495 .name = "panic", 496 .type = QEMU_OPT_STRING, 497 },{ 498 .name = "watchdog", 499 .type = QEMU_OPT_STRING, 500 }, 501 { /* end of list */ } 502 }, 503 }; 504 505 const char *qemu_get_vm_name(void) 506 { 507 return qemu_name; 508 } 509 510 static void default_driver_disable(const char *driver) 511 { 512 int i; 513 514 if (!driver) { 515 return; 516 } 517 518 for (i = 0; i < ARRAY_SIZE(default_list); i++) { 519 if (strcmp(default_list[i].driver, driver) != 0) 520 continue; 521 *(default_list[i].flag) = 0; 522 } 523 } 524 525 static int default_driver_check(void *opaque, QemuOpts *opts, Error **errp) 526 { 527 const char *driver = qemu_opt_get(opts, "driver"); 528 529 default_driver_disable(driver); 530 return 0; 531 } 532 533 static void default_driver_check_json(void) 534 { 535 DeviceOption *opt; 536 537 QTAILQ_FOREACH(opt, &device_opts, next) { 538 const char *driver = qdict_get_try_str(opt->opts, "driver"); 539 default_driver_disable(driver); 540 } 541 } 542 543 static int parse_name(void *opaque, QemuOpts *opts, Error **errp) 544 { 545 const char *proc_name; 546 547 if (qemu_opt_get(opts, "debug-threads")) { 548 qemu_thread_naming(qemu_opt_get_bool(opts, "debug-threads", false)); 549 } 550 qemu_name = qemu_opt_get(opts, "guest"); 551 552 proc_name = qemu_opt_get(opts, "process"); 553 if (proc_name) { 554 os_set_proc_name(proc_name); 555 } 556 557 return 0; 558 } 559 560 bool defaults_enabled(void) 561 { 562 return has_defaults; 563 } 564 565 #ifndef _WIN32 566 static int parse_add_fd(void *opaque, QemuOpts *opts, Error **errp) 567 { 568 int fd, dupfd, flags; 569 int64_t fdset_id; 570 const char *fd_opaque = NULL; 571 AddfdInfo *fdinfo; 572 573 fd = qemu_opt_get_number(opts, "fd", -1); 574 fdset_id = qemu_opt_get_number(opts, "set", -1); 575 fd_opaque = qemu_opt_get(opts, "opaque"); 576 577 if (fd < 0) { 578 error_setg(errp, "fd option is required and must be non-negative"); 579 return -1; 580 } 581 582 if (fd <= STDERR_FILENO) { 583 error_setg(errp, "fd cannot be a standard I/O stream"); 584 return -1; 585 } 586 587 /* 588 * All fds inherited across exec() necessarily have FD_CLOEXEC 589 * clear, while qemu sets FD_CLOEXEC on all other fds used internally. 590 */ 591 flags = fcntl(fd, F_GETFD); 592 if (flags == -1 || (flags & FD_CLOEXEC)) { 593 error_setg(errp, "fd is not valid or already in use"); 594 return -1; 595 } 596 597 if (fdset_id < 0) { 598 error_setg(errp, "set option is required and must be non-negative"); 599 return -1; 600 } 601 602 #ifdef F_DUPFD_CLOEXEC 603 dupfd = fcntl(fd, F_DUPFD_CLOEXEC, 0); 604 #else 605 dupfd = dup(fd); 606 if (dupfd != -1) { 607 qemu_set_cloexec(dupfd); 608 } 609 #endif 610 if (dupfd == -1) { 611 error_setg(errp, "error duplicating fd: %s", strerror(errno)); 612 return -1; 613 } 614 615 /* add the duplicate fd, and optionally the opaque string, to the fd set */ 616 fdinfo = monitor_fdset_add_fd(dupfd, true, fdset_id, fd_opaque, 617 &error_abort); 618 g_free(fdinfo); 619 620 return 0; 621 } 622 623 static int cleanup_add_fd(void *opaque, QemuOpts *opts, Error **errp) 624 { 625 int fd; 626 627 fd = qemu_opt_get_number(opts, "fd", -1); 628 close(fd); 629 630 return 0; 631 } 632 #endif 633 634 /***********************************************************/ 635 /* QEMU Block devices */ 636 637 #define HD_OPTS "media=disk" 638 #define CDROM_OPTS "media=cdrom" 639 #define FD_OPTS "" 640 #define PFLASH_OPTS "" 641 #define MTD_OPTS "" 642 #define SD_OPTS "" 643 644 static int drive_init_func(void *opaque, QemuOpts *opts, Error **errp) 645 { 646 BlockInterfaceType *block_default_type = opaque; 647 648 return drive_new(opts, *block_default_type, errp) == NULL; 649 } 650 651 static int drive_enable_snapshot(void *opaque, QemuOpts *opts, Error **errp) 652 { 653 if (qemu_opt_get(opts, "snapshot") == NULL) { 654 qemu_opt_set(opts, "snapshot", "on", &error_abort); 655 } 656 return 0; 657 } 658 659 static void default_drive(int enable, int snapshot, BlockInterfaceType type, 660 int index, const char *optstr) 661 { 662 QemuOpts *opts; 663 DriveInfo *dinfo; 664 665 if (!enable || drive_get_by_index(type, index)) { 666 return; 667 } 668 669 opts = drive_add(type, index, NULL, optstr); 670 if (snapshot) { 671 drive_enable_snapshot(NULL, opts, NULL); 672 } 673 674 dinfo = drive_new(opts, type, &error_abort); 675 dinfo->is_default = true; 676 677 } 678 679 static void configure_blockdev(BlockdevOptionsQueue *bdo_queue, 680 MachineClass *machine_class, int snapshot) 681 { 682 /* 683 * If the currently selected machine wishes to override the 684 * units-per-bus property of its default HBA interface type, do so 685 * now. 686 */ 687 if (machine_class->units_per_default_bus) { 688 override_max_devs(machine_class->block_default_type, 689 machine_class->units_per_default_bus); 690 } 691 692 /* open the virtual block devices */ 693 while (!QSIMPLEQ_EMPTY(bdo_queue)) { 694 BlockdevOptionsQueueEntry *bdo = QSIMPLEQ_FIRST(bdo_queue); 695 696 QSIMPLEQ_REMOVE_HEAD(bdo_queue, entry); 697 loc_push_restore(&bdo->loc); 698 qmp_blockdev_add(bdo->bdo, &error_fatal); 699 loc_pop(&bdo->loc); 700 qapi_free_BlockdevOptions(bdo->bdo); 701 g_free(bdo); 702 } 703 if (snapshot) { 704 qemu_opts_foreach(qemu_find_opts("drive"), drive_enable_snapshot, 705 NULL, NULL); 706 } 707 if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func, 708 &machine_class->block_default_type, &error_fatal)) { 709 /* We printed help */ 710 exit(0); 711 } 712 713 default_drive(default_cdrom, snapshot, machine_class->block_default_type, 2, 714 CDROM_OPTS); 715 default_drive(default_floppy, snapshot, IF_FLOPPY, 0, FD_OPTS); 716 default_drive(default_sdcard, snapshot, IF_SD, 0, SD_OPTS); 717 718 } 719 720 static QemuOptsList qemu_smp_opts = { 721 .name = "smp-opts", 722 .implied_opt_name = "cpus", 723 .merge_lists = true, 724 .head = QTAILQ_HEAD_INITIALIZER(qemu_smp_opts.head), 725 .desc = { 726 { 727 .name = "cpus", 728 .type = QEMU_OPT_NUMBER, 729 }, { 730 .name = "drawers", 731 .type = QEMU_OPT_NUMBER, 732 }, { 733 .name = "books", 734 .type = QEMU_OPT_NUMBER, 735 }, { 736 .name = "sockets", 737 .type = QEMU_OPT_NUMBER, 738 }, { 739 .name = "dies", 740 .type = QEMU_OPT_NUMBER, 741 }, { 742 .name = "clusters", 743 .type = QEMU_OPT_NUMBER, 744 }, { 745 .name = "modules", 746 .type = QEMU_OPT_NUMBER, 747 }, { 748 .name = "cores", 749 .type = QEMU_OPT_NUMBER, 750 }, { 751 .name = "threads", 752 .type = QEMU_OPT_NUMBER, 753 }, { 754 .name = "maxcpus", 755 .type = QEMU_OPT_NUMBER, 756 }, 757 { /*End of list */ } 758 }, 759 }; 760 761 #if defined(CONFIG_POSIX) 762 static QemuOptsList qemu_run_with_opts = { 763 .name = "run-with", 764 .head = QTAILQ_HEAD_INITIALIZER(qemu_run_with_opts.head), 765 .desc = { 766 #if defined(CONFIG_LINUX) 767 { 768 .name = "async-teardown", 769 .type = QEMU_OPT_BOOL, 770 }, 771 #endif 772 { 773 .name = "chroot", 774 .type = QEMU_OPT_STRING, 775 }, 776 { 777 .name = "user", 778 .type = QEMU_OPT_STRING, 779 }, 780 { /* end of list */ } 781 }, 782 }; 783 784 #define qemu_add_run_with_opts() qemu_add_opts(&qemu_run_with_opts) 785 786 #else 787 788 #define qemu_add_run_with_opts() 789 790 #endif /* CONFIG_POSIX */ 791 792 static void realtime_init(void) 793 { 794 if (enable_mlock) { 795 if (os_mlock() < 0) { 796 error_report("locking memory failed"); 797 exit(1); 798 } 799 } 800 } 801 802 803 static void configure_msg(QemuOpts *opts) 804 { 805 message_with_timestamp = qemu_opt_get_bool(opts, "timestamp", false); 806 error_with_guestname = qemu_opt_get_bool(opts, "guest-name", false); 807 } 808 809 810 /***********************************************************/ 811 /* USB devices */ 812 813 static int usb_device_add(const char *devname) 814 { 815 USBDevice *dev = NULL; 816 817 if (!machine_usb(current_machine)) { 818 return -1; 819 } 820 821 dev = usbdevice_create(devname); 822 if (!dev) 823 return -1; 824 825 return 0; 826 } 827 828 static int usb_parse(const char *cmdline) 829 { 830 int r; 831 r = usb_device_add(cmdline); 832 if (r < 0) { 833 error_report("could not add USB device '%s'", cmdline); 834 } 835 return r; 836 } 837 838 /***********************************************************/ 839 /* machine registration */ 840 841 static MachineClass *find_machine(const char *name, GSList *machines) 842 { 843 GSList *el; 844 845 for (el = machines; el; el = el->next) { 846 MachineClass *mc = el->data; 847 848 if (!strcmp(mc->name, name) || !g_strcmp0(mc->alias, name)) { 849 return mc; 850 } 851 } 852 853 return NULL; 854 } 855 856 static MachineClass *find_default_machine(GSList *machines) 857 { 858 GSList *el; 859 MachineClass *default_machineclass = NULL; 860 861 for (el = machines; el; el = el->next) { 862 MachineClass *mc = el->data; 863 864 if (mc->is_default) { 865 assert(default_machineclass == NULL && "Multiple default machines"); 866 default_machineclass = mc; 867 } 868 } 869 870 return default_machineclass; 871 } 872 873 static void version(void) 874 { 875 printf("QEMU emulator version " QEMU_FULL_VERSION "\n" 876 QEMU_COPYRIGHT "\n"); 877 } 878 879 static void help(int exitcode) 880 { 881 version(); 882 printf("usage: %s [options] [disk_image]\n\n" 883 "'disk_image' is a raw hard disk image for IDE hard disk 0\n\n", 884 g_get_prgname()); 885 886 #define DEF(option, opt_arg, opt_enum, opt_help, arch_mask) \ 887 if ((arch_mask) & arch_type) \ 888 fputs(opt_help, stdout); 889 890 #define ARCHHEADING(text, arch_mask) \ 891 if ((arch_mask) & arch_type) \ 892 puts(stringify(text)); 893 894 #define DEFHEADING(text) ARCHHEADING(text, QEMU_ARCH_ALL) 895 896 #include "qemu-options.def" 897 898 printf("\nDuring emulation, the following keys are useful:\n" 899 "ctrl-alt-f toggle full screen\n" 900 "ctrl-alt-n switch to virtual console 'n'\n" 901 "ctrl-alt-g toggle mouse and keyboard grab\n" 902 "\n" 903 "When using -nographic, press 'ctrl-a h' to get some help.\n" 904 "\n" 905 QEMU_HELP_BOTTOM "\n"); 906 907 exit(exitcode); 908 } 909 910 enum { 911 912 #define DEF(option, opt_arg, opt_enum, opt_help, arch_mask) \ 913 opt_enum, 914 #define DEFHEADING(text) 915 #define ARCHHEADING(text, arch_mask) 916 917 #include "qemu-options.def" 918 }; 919 920 #define HAS_ARG 0x0001 921 922 typedef struct QEMUOption { 923 const char *name; 924 int flags; 925 int index; 926 uint32_t arch_mask; 927 } QEMUOption; 928 929 static const QEMUOption qemu_options[] = { 930 { "h", 0, QEMU_OPTION_h, QEMU_ARCH_ALL }, 931 932 #define DEF(option, opt_arg, opt_enum, opt_help, arch_mask) \ 933 { option, opt_arg, opt_enum, arch_mask }, 934 #define DEFHEADING(text) 935 #define ARCHHEADING(text, arch_mask) 936 937 #include "qemu-options.def" 938 { /* end of list */ } 939 }; 940 941 typedef struct VGAInterfaceInfo { 942 const char *opt_name; /* option name */ 943 const char *name; /* human-readable name */ 944 /* Class names indicating that support is available. 945 * If no class is specified, the interface is always available */ 946 const char *class_names[2]; 947 } VGAInterfaceInfo; 948 949 static const VGAInterfaceInfo vga_interfaces[VGA_TYPE_MAX] = { 950 [VGA_NONE] = { 951 .opt_name = "none", 952 .name = "no graphic card", 953 }, 954 [VGA_STD] = { 955 .opt_name = "std", 956 .name = "standard VGA", 957 .class_names = { "VGA", "isa-vga" }, 958 }, 959 [VGA_CIRRUS] = { 960 .opt_name = "cirrus", 961 .name = "Cirrus VGA", 962 .class_names = { "cirrus-vga", "isa-cirrus-vga" }, 963 }, 964 [VGA_VMWARE] = { 965 .opt_name = "vmware", 966 .name = "VMWare SVGA", 967 .class_names = { "vmware-svga" }, 968 }, 969 [VGA_VIRTIO] = { 970 .opt_name = "virtio", 971 .name = "Virtio VGA", 972 .class_names = { "virtio-vga" }, 973 }, 974 [VGA_QXL] = { 975 .opt_name = "qxl", 976 .name = "QXL VGA", 977 .class_names = { "qxl-vga" }, 978 }, 979 [VGA_TCX] = { 980 .opt_name = "tcx", 981 .name = "TCX framebuffer", 982 .class_names = { "sun-tcx" }, 983 }, 984 [VGA_CG3] = { 985 .opt_name = "cg3", 986 .name = "CG3 framebuffer", 987 .class_names = { "cgthree" }, 988 }, 989 #ifdef CONFIG_XEN_BACKEND 990 [VGA_XENFB] = { 991 .opt_name = "xenfb", 992 .name = "Xen paravirtualized framebuffer", 993 }, 994 #endif 995 }; 996 997 static bool vga_interface_available(VGAInterfaceType t) 998 { 999 const VGAInterfaceInfo *ti = &vga_interfaces[t]; 1000 1001 assert(t < VGA_TYPE_MAX); 1002 return !ti->class_names[0] || 1003 module_object_class_by_name(ti->class_names[0]) || 1004 module_object_class_by_name(ti->class_names[1]); 1005 } 1006 1007 static const char * 1008 get_default_vga_model(const MachineClass *machine_class) 1009 { 1010 if (machine_class->default_display) { 1011 for (int t = 0; t < VGA_TYPE_MAX; t++) { 1012 const VGAInterfaceInfo *ti = &vga_interfaces[t]; 1013 1014 if (ti->opt_name && vga_interface_available(t) && 1015 g_str_equal(ti->opt_name, machine_class->default_display)) { 1016 return machine_class->default_display; 1017 } 1018 } 1019 1020 warn_report_once("Default display '%s' is not available in this binary", 1021 machine_class->default_display); 1022 return NULL; 1023 } else if (vga_interface_available(VGA_CIRRUS)) { 1024 return "cirrus"; 1025 } else if (vga_interface_available(VGA_STD)) { 1026 return "std"; 1027 } 1028 1029 return NULL; 1030 } 1031 1032 static void select_vgahw(const MachineClass *machine_class, const char *p) 1033 { 1034 const char *opts; 1035 int t; 1036 1037 if (g_str_equal(p, "help")) { 1038 const char *def = get_default_vga_model(machine_class); 1039 1040 for (t = 0; t < VGA_TYPE_MAX; t++) { 1041 const VGAInterfaceInfo *ti = &vga_interfaces[t]; 1042 1043 if (vga_interface_available(t) && ti->opt_name) { 1044 printf("%-20s %s%s\n", ti->opt_name, ti->name ?: "", 1045 (def && g_str_equal(ti->opt_name, def)) ? 1046 " (default)" : ""); 1047 } 1048 } 1049 exit(0); 1050 } 1051 1052 assert(vga_interface_type == VGA_NONE); 1053 for (t = 0; t < VGA_TYPE_MAX; t++) { 1054 const VGAInterfaceInfo *ti = &vga_interfaces[t]; 1055 if (ti->opt_name && strstart(p, ti->opt_name, &opts)) { 1056 if (!vga_interface_available(t)) { 1057 error_report("%s not available", ti->name); 1058 exit(1); 1059 } 1060 vga_interface_type = t; 1061 break; 1062 } 1063 } 1064 if (t == VGA_TYPE_MAX) { 1065 invalid_vga: 1066 error_report("unknown vga type: %s", p); 1067 exit(1); 1068 } 1069 while (*opts) { 1070 const char *nextopt; 1071 1072 if (strstart(opts, ",retrace=", &nextopt)) { 1073 opts = nextopt; 1074 if (strstart(opts, "dumb", &nextopt)) 1075 vga_retrace_method = VGA_RETRACE_DUMB; 1076 else if (strstart(opts, "precise", &nextopt)) 1077 vga_retrace_method = VGA_RETRACE_PRECISE; 1078 else goto invalid_vga; 1079 } else goto invalid_vga; 1080 opts = nextopt; 1081 } 1082 } 1083 1084 static void parse_display_qapi(const char *str) 1085 { 1086 DisplayOptions *opts; 1087 Visitor *v; 1088 1089 v = qobject_input_visitor_new_str(str, "type", &error_fatal); 1090 1091 visit_type_DisplayOptions(v, NULL, &opts, &error_fatal); 1092 QAPI_CLONE_MEMBERS(DisplayOptions, &dpy, opts); 1093 1094 qapi_free_DisplayOptions(opts); 1095 visit_free(v); 1096 } 1097 1098 DisplayOptions *qmp_query_display_options(Error **errp) 1099 { 1100 return QAPI_CLONE(DisplayOptions, &dpy); 1101 } 1102 1103 static void parse_display(const char *p) 1104 { 1105 if (is_help_option(p)) { 1106 qemu_display_help(); 1107 exit(0); 1108 } 1109 1110 #ifdef CONFIG_VNC 1111 const char *opts; 1112 1113 if (strstart(p, "vnc", &opts)) { 1114 /* 1115 * vnc isn't a (local) DisplayType but a protocol for remote 1116 * display access. 1117 */ 1118 if (*opts == '=') { 1119 vnc_parse(opts + 1); 1120 display_remote++; 1121 } else { 1122 error_report("VNC requires a display argument vnc=<display>"); 1123 exit(1); 1124 } 1125 return; 1126 } 1127 #endif 1128 1129 parse_display_qapi(p); 1130 } 1131 1132 static inline bool nonempty_str(const char *str) 1133 { 1134 return str && *str; 1135 } 1136 1137 static int parse_fw_cfg(void *opaque, QemuOpts *opts, Error **errp) 1138 { 1139 gchar *buf; 1140 size_t size; 1141 const char *name, *file, *str, *gen_id; 1142 FWCfgState *fw_cfg = (FWCfgState *) opaque; 1143 1144 if (fw_cfg == NULL) { 1145 error_setg(errp, "fw_cfg device not available"); 1146 return -1; 1147 } 1148 name = qemu_opt_get(opts, "name"); 1149 file = qemu_opt_get(opts, "file"); 1150 str = qemu_opt_get(opts, "string"); 1151 gen_id = qemu_opt_get(opts, "gen_id"); 1152 1153 /* we need the name, and exactly one of: file, content string, gen_id */ 1154 if (!nonempty_str(name) || 1155 nonempty_str(file) + nonempty_str(str) + nonempty_str(gen_id) != 1) { 1156 error_setg(errp, "name, plus exactly one of file," 1157 " string and gen_id, are needed"); 1158 return -1; 1159 } 1160 if (strlen(name) > FW_CFG_MAX_FILE_PATH - 1) { 1161 error_setg(errp, "name too long (max. %d char)", 1162 FW_CFG_MAX_FILE_PATH - 1); 1163 return -1; 1164 } 1165 if (nonempty_str(gen_id)) { 1166 /* 1167 * In this particular case where the content is populated 1168 * internally, the "etc/" namespace protection is relaxed, 1169 * so do not emit a warning. 1170 */ 1171 } else if (strncmp(name, "opt/", 4) != 0) { 1172 warn_report("externally provided fw_cfg item names " 1173 "should be prefixed with \"opt/\""); 1174 } 1175 if (nonempty_str(str)) { 1176 size = strlen(str); /* NUL terminator NOT included in fw_cfg blob */ 1177 buf = g_memdup(str, size); 1178 } else if (nonempty_str(gen_id)) { 1179 if (!fw_cfg_add_from_generator(fw_cfg, name, gen_id, errp)) { 1180 return -1; 1181 } 1182 return 0; 1183 } else { 1184 GError *err = NULL; 1185 if (!g_file_get_contents(file, &buf, &size, &err)) { 1186 error_setg(errp, "can't load %s: %s", file, err->message); 1187 g_error_free(err); 1188 return -1; 1189 } 1190 } 1191 /* For legacy, keep user files in a specific global order. */ 1192 fw_cfg_set_order_override(fw_cfg, FW_CFG_ORDER_OVERRIDE_USER); 1193 fw_cfg_add_file(fw_cfg, name, buf, size); 1194 fw_cfg_reset_order_override(fw_cfg); 1195 return 0; 1196 } 1197 1198 static int device_help_func(void *opaque, QemuOpts *opts, Error **errp) 1199 { 1200 return qdev_device_help(opts); 1201 } 1202 1203 static int device_init_func(void *opaque, QemuOpts *opts, Error **errp) 1204 { 1205 DeviceState *dev; 1206 1207 dev = qdev_device_add(opts, errp); 1208 if (!dev && *errp) { 1209 error_report_err(*errp); 1210 return -1; 1211 } else if (dev) { 1212 object_unref(OBJECT(dev)); 1213 } 1214 return 0; 1215 } 1216 1217 static int chardev_init_func(void *opaque, QemuOpts *opts, Error **errp) 1218 { 1219 Error *local_err = NULL; 1220 1221 if (!qemu_chr_new_from_opts(opts, NULL, &local_err)) { 1222 if (local_err) { 1223 error_propagate(errp, local_err); 1224 return -1; 1225 } 1226 exit(0); 1227 } 1228 return 0; 1229 } 1230 1231 #ifdef CONFIG_VIRTFS 1232 static int fsdev_init_func(void *opaque, QemuOpts *opts, Error **errp) 1233 { 1234 return qemu_fsdev_add(opts, errp); 1235 } 1236 #endif 1237 1238 static int mon_init_func(void *opaque, QemuOpts *opts, Error **errp) 1239 { 1240 return monitor_init_opts(opts, errp); 1241 } 1242 1243 static void monitor_parse(const char *str, const char *mode, bool pretty) 1244 { 1245 static int monitor_device_index = 0; 1246 QemuOpts *opts; 1247 const char *p; 1248 char label[32]; 1249 1250 if (strstart(str, "chardev:", &p)) { 1251 snprintf(label, sizeof(label), "%s", p); 1252 } else { 1253 snprintf(label, sizeof(label), "compat_monitor%d", 1254 monitor_device_index); 1255 opts = qemu_chr_parse_compat(label, str, true); 1256 if (!opts) { 1257 error_report("parse error: %s", str); 1258 exit(1); 1259 } 1260 } 1261 1262 opts = qemu_opts_create(qemu_find_opts("mon"), label, 1, &error_fatal); 1263 qemu_opt_set(opts, "mode", mode, &error_abort); 1264 qemu_opt_set(opts, "chardev", label, &error_abort); 1265 if (!strcmp(mode, "control")) { 1266 qemu_opt_set_bool(opts, "pretty", pretty, &error_abort); 1267 } else { 1268 assert(pretty == false); 1269 } 1270 monitor_device_index++; 1271 } 1272 1273 struct device_config { 1274 enum { 1275 DEV_USB, /* -usbdevice */ 1276 DEV_SERIAL, /* -serial */ 1277 DEV_PARALLEL, /* -parallel */ 1278 DEV_DEBUGCON, /* -debugcon */ 1279 DEV_GDB, /* -gdb, -s */ 1280 DEV_SCLP, /* s390 sclp */ 1281 } type; 1282 const char *cmdline; 1283 Location loc; 1284 QTAILQ_ENTRY(device_config) next; 1285 }; 1286 1287 static QTAILQ_HEAD(, device_config) device_configs = 1288 QTAILQ_HEAD_INITIALIZER(device_configs); 1289 1290 static void add_device_config(int type, const char *cmdline) 1291 { 1292 struct device_config *conf; 1293 1294 conf = g_malloc0(sizeof(*conf)); 1295 conf->type = type; 1296 conf->cmdline = cmdline; 1297 loc_save(&conf->loc); 1298 QTAILQ_INSERT_TAIL(&device_configs, conf, next); 1299 } 1300 1301 static int foreach_device_config(int type, int (*func)(const char *cmdline)) 1302 { 1303 struct device_config *conf; 1304 int rc; 1305 1306 QTAILQ_FOREACH(conf, &device_configs, next) { 1307 if (conf->type != type) 1308 continue; 1309 loc_push_restore(&conf->loc); 1310 rc = func(conf->cmdline); 1311 loc_pop(&conf->loc); 1312 if (rc) { 1313 return rc; 1314 } 1315 } 1316 return 0; 1317 } 1318 1319 static void qemu_disable_default_devices(void) 1320 { 1321 MachineClass *machine_class = MACHINE_GET_CLASS(current_machine); 1322 1323 default_driver_check_json(); 1324 qemu_opts_foreach(qemu_find_opts("device"), 1325 default_driver_check, NULL, NULL); 1326 qemu_opts_foreach(qemu_find_opts("global"), 1327 default_driver_check, NULL, NULL); 1328 1329 if (!vga_model && !default_vga) { 1330 vga_interface_type = VGA_DEVICE; 1331 vga_interface_created = true; 1332 } 1333 if (!has_defaults || machine_class->no_serial) { 1334 default_serial = 0; 1335 } 1336 if (!has_defaults || machine_class->no_parallel) { 1337 default_parallel = 0; 1338 } 1339 if (!has_defaults || machine_class->no_floppy) { 1340 default_floppy = 0; 1341 } 1342 if (!has_defaults || machine_class->no_cdrom) { 1343 default_cdrom = 0; 1344 } 1345 if (!has_defaults || machine_class->no_sdcard) { 1346 default_sdcard = 0; 1347 } 1348 if (!has_defaults) { 1349 default_audio = 0; 1350 default_monitor = 0; 1351 default_net = 0; 1352 default_vga = 0; 1353 } else { 1354 if (default_net && machine_class->default_nic && 1355 !module_object_class_by_name(machine_class->default_nic)) { 1356 warn_report("Default NIC '%s' is not available in this binary", 1357 machine_class->default_nic); 1358 default_net = 0; 1359 } 1360 } 1361 } 1362 1363 static void qemu_setup_display(void) 1364 { 1365 if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) { 1366 if (!qemu_display_find_default(&dpy)) { 1367 dpy.type = DISPLAY_TYPE_NONE; 1368 #if defined(CONFIG_VNC) 1369 vnc_parse("localhost:0,to=99,id=default"); 1370 display_remote++; 1371 #endif 1372 } 1373 } 1374 if (dpy.type == DISPLAY_TYPE_DEFAULT) { 1375 dpy.type = DISPLAY_TYPE_NONE; 1376 } 1377 1378 qemu_display_early_init(&dpy); 1379 } 1380 1381 static void qemu_create_default_devices(void) 1382 { 1383 MachineClass *machine_class = MACHINE_GET_CLASS(current_machine); 1384 const char *vc = qemu_display_get_vc(&dpy); 1385 1386 if (is_daemonized()) { 1387 /* According to documentation and historically, -nographic redirects 1388 * serial port, parallel port and monitor to stdio, which does not work 1389 * with -daemonize. We can redirect these to null instead, but since 1390 * -nographic is legacy, let's just error out. 1391 * We disallow -nographic only if all other ports are not redirected 1392 * explicitly, to not break existing legacy setups which uses 1393 * -nographic _and_ redirects all ports explicitly - this is valid 1394 * usage, -nographic is just a no-op in this case. 1395 */ 1396 if (nographic 1397 && (default_parallel || default_serial || default_monitor)) { 1398 error_report("-nographic cannot be used with -daemonize"); 1399 exit(1); 1400 } 1401 } 1402 1403 if (nographic) { 1404 if (default_parallel) { 1405 add_device_config(DEV_PARALLEL, "null"); 1406 } 1407 if (default_serial && default_monitor) { 1408 add_device_config(DEV_SERIAL, "mon:stdio"); 1409 } else { 1410 if (default_serial) { 1411 add_device_config(DEV_SERIAL, "stdio"); 1412 } 1413 if (default_monitor) { 1414 monitor_parse("stdio", "readline", false); 1415 } 1416 } 1417 } else { 1418 if (default_serial) { 1419 add_device_config(DEV_SERIAL, vc ?: "null"); 1420 } 1421 if (default_parallel) { 1422 add_device_config(DEV_PARALLEL, vc ?: "null"); 1423 } 1424 if (default_monitor && vc) { 1425 monitor_parse(vc, "readline", false); 1426 } 1427 } 1428 1429 if (default_net) { 1430 QemuOptsList *net = qemu_find_opts("net"); 1431 qemu_opts_parse(net, "nic", true, &error_abort); 1432 #ifdef CONFIG_SLIRP 1433 qemu_opts_parse(net, "user", true, &error_abort); 1434 #endif 1435 } 1436 1437 /* If no default VGA is requested, the default is "none". */ 1438 if (default_vga) { 1439 vga_model = get_default_vga_model(machine_class); 1440 } 1441 if (vga_model) { 1442 select_vgahw(machine_class, vga_model); 1443 } 1444 } 1445 1446 static int serial_parse(const char *devname) 1447 { 1448 int index = num_serial_hds; 1449 1450 serial_hds = g_renew(Chardev *, serial_hds, index + 1); 1451 1452 if (strcmp(devname, "none") == 0) { 1453 /* Don't allocate a serial device for this index */ 1454 serial_hds[index] = NULL; 1455 } else { 1456 char label[32]; 1457 snprintf(label, sizeof(label), "serial%d", index); 1458 1459 serial_hds[index] = qemu_chr_new_mux_mon(label, devname, NULL); 1460 if (!serial_hds[index]) { 1461 error_report("could not connect serial device" 1462 " to character backend '%s'", devname); 1463 return -1; 1464 } 1465 } 1466 num_serial_hds++; 1467 return 0; 1468 } 1469 1470 Chardev *serial_hd(int i) 1471 { 1472 assert(i >= 0); 1473 if (i < num_serial_hds) { 1474 return serial_hds[i]; 1475 } 1476 return NULL; 1477 } 1478 1479 static int parallel_parse(const char *devname) 1480 { 1481 static int index = 0; 1482 char label[32]; 1483 1484 if (strcmp(devname, "none") == 0) 1485 return 0; 1486 if (index == MAX_PARALLEL_PORTS) { 1487 error_report("too many parallel ports"); 1488 exit(1); 1489 } 1490 snprintf(label, sizeof(label), "parallel%d", index); 1491 parallel_hds[index] = qemu_chr_new_mux_mon(label, devname, NULL); 1492 if (!parallel_hds[index]) { 1493 error_report("could not connect parallel device" 1494 " to character backend '%s'", devname); 1495 return -1; 1496 } 1497 index++; 1498 return 0; 1499 } 1500 1501 static int debugcon_parse(const char *devname) 1502 { 1503 QemuOpts *opts; 1504 1505 if (!qemu_chr_new_mux_mon("debugcon", devname, NULL)) { 1506 error_report("invalid character backend '%s'", devname); 1507 exit(1); 1508 } 1509 opts = qemu_opts_create(qemu_find_opts("device"), "debugcon", 1, NULL); 1510 if (!opts) { 1511 error_report("already have a debugcon device"); 1512 exit(1); 1513 } 1514 qemu_opt_set(opts, "driver", "isa-debugcon", &error_abort); 1515 qemu_opt_set(opts, "chardev", "debugcon", &error_abort); 1516 return 0; 1517 } 1518 1519 static gint machine_class_cmp(gconstpointer a, gconstpointer b) 1520 { 1521 const MachineClass *mc1 = a, *mc2 = b; 1522 int res; 1523 1524 if (mc1->family == NULL) { 1525 if (mc2->family == NULL) { 1526 /* Compare standalone machine types against each other; they sort 1527 * in increasing order. 1528 */ 1529 return strcmp(object_class_get_name(OBJECT_CLASS(mc1)), 1530 object_class_get_name(OBJECT_CLASS(mc2))); 1531 } 1532 1533 /* Standalone machine types sort after families. */ 1534 return 1; 1535 } 1536 1537 if (mc2->family == NULL) { 1538 /* Families sort before standalone machine types. */ 1539 return -1; 1540 } 1541 1542 /* Families sort between each other alphabetically increasingly. */ 1543 res = strcmp(mc1->family, mc2->family); 1544 if (res != 0) { 1545 return res; 1546 } 1547 1548 /* Within the same family, machine types sort in decreasing order. */ 1549 return strcmp(object_class_get_name(OBJECT_CLASS(mc2)), 1550 object_class_get_name(OBJECT_CLASS(mc1))); 1551 } 1552 1553 static void machine_help_func(const QDict *qdict) 1554 { 1555 g_autoptr(GSList) machines = NULL; 1556 GSList *el; 1557 const char *type = qdict_get_try_str(qdict, "type"); 1558 1559 machines = object_class_get_list(TYPE_MACHINE, false); 1560 if (type) { 1561 ObjectClass *machine_class = OBJECT_CLASS(find_machine(type, machines)); 1562 if (machine_class) { 1563 type_print_class_properties(object_class_get_name(machine_class)); 1564 return; 1565 } 1566 } 1567 1568 printf("Supported machines are:\n"); 1569 machines = g_slist_sort(machines, machine_class_cmp); 1570 for (el = machines; el; el = el->next) { 1571 MachineClass *mc = el->data; 1572 if (mc->alias) { 1573 printf("%-20s %s (alias of %s)\n", mc->alias, mc->desc, mc->name); 1574 } 1575 printf("%-20s %s%s%s\n", mc->name, mc->desc, 1576 mc->is_default ? " (default)" : "", 1577 mc->deprecation_reason ? " (deprecated)" : ""); 1578 } 1579 } 1580 1581 static void 1582 machine_merge_property(const char *propname, QDict *prop, Error **errp) 1583 { 1584 QDict *opts; 1585 1586 opts = qdict_new(); 1587 /* Preserve the caller's reference to prop. */ 1588 qobject_ref(prop); 1589 qdict_put(opts, propname, prop); 1590 keyval_merge(machine_opts_dict, opts, errp); 1591 qobject_unref(opts); 1592 } 1593 1594 static void 1595 machine_parse_property_opt(QemuOptsList *opts_list, const char *propname, 1596 const char *arg) 1597 { 1598 QDict *prop = NULL; 1599 bool help = false; 1600 1601 prop = keyval_parse(arg, opts_list->implied_opt_name, &help, &error_fatal); 1602 if (help) { 1603 qemu_opts_print_help(opts_list, true); 1604 exit(0); 1605 } 1606 machine_merge_property(propname, prop, &error_fatal); 1607 qobject_unref(prop); 1608 } 1609 1610 static const char *pid_file; 1611 struct UnlinkPidfileNotifier { 1612 Notifier notifier; 1613 char *pid_file_realpath; 1614 }; 1615 static struct UnlinkPidfileNotifier qemu_unlink_pidfile_notifier; 1616 1617 static void qemu_unlink_pidfile(Notifier *n, void *data) 1618 { 1619 struct UnlinkPidfileNotifier *upn; 1620 1621 upn = DO_UPCAST(struct UnlinkPidfileNotifier, notifier, n); 1622 unlink(upn->pid_file_realpath); 1623 } 1624 1625 static const QEMUOption *lookup_opt(int argc, char **argv, 1626 const char **poptarg, int *poptind) 1627 { 1628 const QEMUOption *popt; 1629 int optind = *poptind; 1630 char *r = argv[optind]; 1631 const char *optarg; 1632 1633 loc_set_cmdline(argv, optind, 1); 1634 optind++; 1635 /* Treat --foo the same as -foo. */ 1636 if (r[1] == '-') 1637 r++; 1638 popt = qemu_options; 1639 for(;;) { 1640 if (!popt->name) { 1641 error_report("invalid option"); 1642 exit(1); 1643 } 1644 if (!strcmp(popt->name, r + 1)) 1645 break; 1646 popt++; 1647 } 1648 if (popt->flags & HAS_ARG) { 1649 if (optind >= argc) { 1650 error_report("requires an argument"); 1651 exit(1); 1652 } 1653 optarg = argv[optind++]; 1654 loc_set_cmdline(argv, optind - 2, 2); 1655 } else { 1656 optarg = NULL; 1657 } 1658 1659 *poptarg = optarg; 1660 *poptind = optind; 1661 1662 return popt; 1663 } 1664 1665 static MachineClass *select_machine(QDict *qdict, Error **errp) 1666 { 1667 const char *machine_type = qdict_get_try_str(qdict, "type"); 1668 GSList *machines = object_class_get_list(TYPE_MACHINE, false); 1669 MachineClass *machine_class; 1670 Error *local_err = NULL; 1671 1672 if (machine_type) { 1673 machine_class = find_machine(machine_type, machines); 1674 qdict_del(qdict, "type"); 1675 if (!machine_class) { 1676 error_setg(&local_err, "unsupported machine type"); 1677 } 1678 } else { 1679 machine_class = find_default_machine(machines); 1680 if (!machine_class) { 1681 error_setg(&local_err, "No machine specified, and there is no default"); 1682 } 1683 } 1684 1685 g_slist_free(machines); 1686 if (local_err) { 1687 error_append_hint(&local_err, "Use -machine help to list supported machines\n"); 1688 error_propagate(errp, local_err); 1689 } 1690 return machine_class; 1691 } 1692 1693 static int object_parse_property_opt(Object *obj, 1694 const char *name, const char *value, 1695 const char *skip, Error **errp) 1696 { 1697 if (g_str_equal(name, skip)) { 1698 return 0; 1699 } 1700 1701 if (!object_property_parse(obj, name, value, errp)) { 1702 return -1; 1703 } 1704 1705 return 0; 1706 } 1707 1708 /* *Non*recursively replace underscores with dashes in QDict keys. */ 1709 static void keyval_dashify(QDict *qdict, Error **errp) 1710 { 1711 const QDictEntry *ent, *next; 1712 char *p; 1713 1714 for (ent = qdict_first(qdict); ent; ent = next) { 1715 g_autofree char *new_key = NULL; 1716 1717 next = qdict_next(qdict, ent); 1718 if (!strchr(ent->key, '_')) { 1719 continue; 1720 } 1721 new_key = g_strdup(ent->key); 1722 for (p = new_key; *p; p++) { 1723 if (*p == '_') { 1724 *p = '-'; 1725 } 1726 } 1727 if (qdict_haskey(qdict, new_key)) { 1728 error_setg(errp, "Conflict between '%s' and '%s'", ent->key, new_key); 1729 return; 1730 } 1731 qobject_ref(ent->value); 1732 qdict_put_obj(qdict, new_key, ent->value); 1733 qdict_del(qdict, ent->key); 1734 } 1735 } 1736 1737 static void qemu_apply_legacy_machine_options(QDict *qdict) 1738 { 1739 const char *value; 1740 QObject *prop; 1741 1742 keyval_dashify(qdict, &error_fatal); 1743 1744 /* Legacy options do not correspond to MachineState properties. */ 1745 value = qdict_get_try_str(qdict, "accel"); 1746 if (value) { 1747 accelerators = g_strdup(value); 1748 qdict_del(qdict, "accel"); 1749 } 1750 1751 value = qdict_get_try_str(qdict, "igd-passthru"); 1752 if (value) { 1753 object_register_sugar_prop(ACCEL_CLASS_NAME("xen"), "igd-passthru", value, 1754 false); 1755 qdict_del(qdict, "igd-passthru"); 1756 } 1757 1758 value = qdict_get_try_str(qdict, "kvm-shadow-mem"); 1759 if (value) { 1760 object_register_sugar_prop(ACCEL_CLASS_NAME("kvm"), "kvm-shadow-mem", value, 1761 false); 1762 qdict_del(qdict, "kvm-shadow-mem"); 1763 } 1764 1765 value = qdict_get_try_str(qdict, "kernel-irqchip"); 1766 if (value) { 1767 object_register_sugar_prop(ACCEL_CLASS_NAME("kvm"), "kernel-irqchip", value, 1768 false); 1769 object_register_sugar_prop(ACCEL_CLASS_NAME("whpx"), "kernel-irqchip", value, 1770 false); 1771 qdict_del(qdict, "kernel-irqchip"); 1772 } 1773 1774 value = qdict_get_try_str(qdict, "memory-backend"); 1775 if (value) { 1776 if (mem_path) { 1777 error_report("'-mem-path' can't be used together with" 1778 "'-machine memory-backend'"); 1779 exit(EXIT_FAILURE); 1780 } 1781 1782 /* Resolved later. */ 1783 ram_memdev_id = g_strdup(value); 1784 qdict_del(qdict, "memory-backend"); 1785 } 1786 1787 prop = qdict_get(qdict, "memory"); 1788 if (prop) { 1789 have_custom_ram_size = 1790 qobject_type(prop) == QTYPE_QDICT && 1791 qdict_haskey(qobject_to(QDict, prop), "size"); 1792 } 1793 } 1794 1795 static void object_option_foreach_add(bool (*type_opt_predicate)(const char *)) 1796 { 1797 ObjectOption *opt, *next; 1798 1799 QTAILQ_FOREACH_SAFE(opt, &object_opts, next, next) { 1800 const char *type = ObjectType_str(opt->opts->qom_type); 1801 if (type_opt_predicate(type)) { 1802 user_creatable_add_qapi(opt->opts, &error_fatal); 1803 qapi_free_ObjectOptions(opt->opts); 1804 QTAILQ_REMOVE(&object_opts, opt, next); 1805 g_free(opt); 1806 } 1807 } 1808 } 1809 1810 static void object_option_add_visitor(Visitor *v) 1811 { 1812 ObjectOption *opt = g_new0(ObjectOption, 1); 1813 visit_type_ObjectOptions(v, NULL, &opt->opts, &error_fatal); 1814 QTAILQ_INSERT_TAIL(&object_opts, opt, next); 1815 } 1816 1817 static void object_option_parse(const char *str) 1818 { 1819 QemuOpts *opts; 1820 const char *type; 1821 Visitor *v; 1822 1823 if (str[0] == '{') { 1824 QObject *obj = qobject_from_json(str, &error_fatal); 1825 1826 v = qobject_input_visitor_new(obj); 1827 qobject_unref(obj); 1828 } else { 1829 opts = qemu_opts_parse_noisily(qemu_find_opts("object"), 1830 str, true); 1831 if (!opts) { 1832 exit(1); 1833 } 1834 1835 type = qemu_opt_get(opts, "qom-type"); 1836 if (!type) { 1837 error_setg(&error_fatal, QERR_MISSING_PARAMETER, "qom-type"); 1838 } 1839 if (user_creatable_print_help(type, opts)) { 1840 exit(0); 1841 } 1842 1843 v = opts_visitor_new(opts); 1844 } 1845 1846 object_option_add_visitor(v); 1847 visit_free(v); 1848 } 1849 1850 /* 1851 * Very early object creation, before the sandbox options have been activated. 1852 */ 1853 static bool object_create_pre_sandbox(const char *type) 1854 { 1855 /* 1856 * Objects should in general not get initialized "too early" without 1857 * a reason. If you add one, state the reason in a comment! 1858 */ 1859 1860 /* 1861 * Reason: -sandbox on,resourcecontrol=deny disallows setting CPU 1862 * affinity of threads. 1863 */ 1864 if (g_str_equal(type, "thread-context")) { 1865 return true; 1866 } 1867 1868 return false; 1869 } 1870 1871 /* 1872 * Initial object creation happens before all other 1873 * QEMU data types are created. The majority of objects 1874 * can be created at this point. The rng-egd object 1875 * cannot be created here, as it depends on the chardev 1876 * already existing. 1877 */ 1878 static bool object_create_early(const char *type) 1879 { 1880 /* 1881 * Objects should not be made "delayed" without a reason. If you 1882 * add one, state the reason in a comment! 1883 */ 1884 1885 /* Reason: already created. */ 1886 if (object_create_pre_sandbox(type)) { 1887 return false; 1888 } 1889 1890 /* Reason: property "chardev" */ 1891 if (g_str_equal(type, "rng-egd") || 1892 g_str_equal(type, "qtest")) { 1893 return false; 1894 } 1895 1896 #if defined(CONFIG_VHOST_USER) && defined(CONFIG_LINUX) 1897 /* Reason: cryptodev-vhost-user property "chardev" */ 1898 if (g_str_equal(type, "cryptodev-vhost-user")) { 1899 return false; 1900 } 1901 #endif 1902 1903 /* Reason: vhost-user-blk-server property "node-name" */ 1904 if (g_str_equal(type, "vhost-user-blk-server")) { 1905 return false; 1906 } 1907 /* 1908 * Reason: filter-* property "netdev" etc. 1909 */ 1910 if (g_str_equal(type, "filter-buffer") || 1911 g_str_equal(type, "filter-dump") || 1912 g_str_equal(type, "filter-mirror") || 1913 g_str_equal(type, "filter-redirector") || 1914 g_str_equal(type, "colo-compare") || 1915 g_str_equal(type, "filter-rewriter") || 1916 g_str_equal(type, "filter-replay")) { 1917 return false; 1918 } 1919 1920 /* 1921 * Allocation of large amounts of memory may delay 1922 * chardev initialization for too long, and trigger timeouts 1923 * on software that waits for a monitor socket to be created 1924 */ 1925 if (g_str_has_prefix(type, "memory-backend-")) { 1926 return false; 1927 } 1928 1929 return true; 1930 } 1931 1932 static void qemu_apply_machine_options(QDict *qdict) 1933 { 1934 object_set_properties_from_keyval(OBJECT(current_machine), qdict, false, &error_fatal); 1935 1936 if (semihosting_enabled(false) && !semihosting_get_argc()) { 1937 /* fall back to the -kernel/-append */ 1938 semihosting_arg_fallback(current_machine->kernel_filename, current_machine->kernel_cmdline); 1939 } 1940 1941 if (current_machine->smp.cpus > 1) { 1942 replay_add_blocker("multiple CPUs"); 1943 } 1944 } 1945 1946 static void qemu_create_early_backends(void) 1947 { 1948 MachineClass *machine_class = MACHINE_GET_CLASS(current_machine); 1949 #if defined(CONFIG_SDL) 1950 const bool use_sdl = (dpy.type == DISPLAY_TYPE_SDL); 1951 #else 1952 const bool use_sdl = false; 1953 #endif 1954 #if defined(CONFIG_GTK) 1955 const bool use_gtk = (dpy.type == DISPLAY_TYPE_GTK); 1956 #else 1957 const bool use_gtk = false; 1958 #endif 1959 1960 if (dpy.has_window_close && !use_gtk && !use_sdl) { 1961 error_report("window-close is only valid for GTK and SDL, " 1962 "ignoring option"); 1963 } 1964 1965 qemu_console_early_init(); 1966 1967 if (dpy.has_gl && dpy.gl != DISPLAYGL_MODE_OFF && display_opengl == 0) { 1968 #if defined(CONFIG_OPENGL) 1969 error_report("OpenGL is not supported by the display"); 1970 #else 1971 error_report("OpenGL support is disabled"); 1972 #endif 1973 exit(1); 1974 } 1975 1976 object_option_foreach_add(object_create_early); 1977 1978 /* spice needs the timers to be initialized by this point */ 1979 /* spice must initialize before audio as it changes the default audiodev */ 1980 /* spice must initialize before chardevs (for spicevmc and spiceport) */ 1981 qemu_spice.init(); 1982 1983 qemu_opts_foreach(qemu_find_opts("chardev"), 1984 chardev_init_func, NULL, &error_fatal); 1985 1986 #ifdef CONFIG_VIRTFS 1987 qemu_opts_foreach(qemu_find_opts("fsdev"), 1988 fsdev_init_func, NULL, &error_fatal); 1989 #endif 1990 1991 /* 1992 * Note: we need to create audio and block backends before 1993 * setting machine properties, so they can be referred to. 1994 */ 1995 configure_blockdev(&bdo_queue, machine_class, snapshot); 1996 audio_init_audiodevs(); 1997 if (default_audio) { 1998 audio_create_default_audiodevs(); 1999 } 2000 } 2001 2002 2003 /* 2004 * The remainder of object creation happens after the 2005 * creation of chardev, fsdev, net clients and device data types. 2006 */ 2007 static bool object_create_late(const char *type) 2008 { 2009 return !object_create_early(type) && !object_create_pre_sandbox(type); 2010 } 2011 2012 static void qemu_create_late_backends(void) 2013 { 2014 if (qtest_chrdev) { 2015 qtest_server_init(qtest_chrdev, qtest_log, &error_fatal); 2016 } 2017 2018 net_init_clients(); 2019 2020 object_option_foreach_add(object_create_late); 2021 2022 /* 2023 * Wait for any outstanding memory prealloc from created memory 2024 * backends to complete. 2025 */ 2026 if (!qemu_finish_async_prealloc_mem(&error_fatal)) { 2027 exit(1); 2028 } 2029 2030 if (tpm_init() < 0) { 2031 exit(1); 2032 } 2033 2034 qemu_opts_foreach(qemu_find_opts("mon"), 2035 mon_init_func, NULL, &error_fatal); 2036 2037 if (foreach_device_config(DEV_SERIAL, serial_parse) < 0) 2038 exit(1); 2039 if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0) 2040 exit(1); 2041 if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0) 2042 exit(1); 2043 2044 /* now chardevs have been created we may have semihosting to connect */ 2045 qemu_semihosting_chardev_init(); 2046 } 2047 2048 static void qemu_resolve_machine_memdev(void) 2049 { 2050 if (ram_memdev_id) { 2051 Object *backend; 2052 ram_addr_t backend_size; 2053 2054 backend = object_resolve_path_type(ram_memdev_id, 2055 TYPE_MEMORY_BACKEND, NULL); 2056 if (!backend) { 2057 error_report("Memory backend '%s' not found", ram_memdev_id); 2058 exit(EXIT_FAILURE); 2059 } 2060 if (!have_custom_ram_size) { 2061 backend_size = object_property_get_uint(backend, "size", &error_abort); 2062 current_machine->ram_size = backend_size; 2063 } 2064 object_property_set_link(OBJECT(current_machine), 2065 "memory-backend", backend, &error_fatal); 2066 } 2067 } 2068 2069 static void parse_memory_options(void) 2070 { 2071 QemuOpts *opts = qemu_find_opts_singleton("memory"); 2072 QDict *dict, *prop; 2073 const char *mem_str; 2074 Location loc; 2075 2076 loc_push_none(&loc); 2077 qemu_opts_loc_restore(opts); 2078 2079 prop = qdict_new(); 2080 2081 if (qemu_opt_get_size(opts, "size", 0) != 0) { 2082 /* Fix up legacy suffix-less format */ 2083 mem_str = qemu_opt_get(opts, "size"); 2084 if (g_ascii_isdigit(mem_str[strlen(mem_str) - 1])) { 2085 g_autofree char *mib_str = g_strdup_printf("%sM", mem_str); 2086 qdict_put_str(prop, "size", mib_str); 2087 } else { 2088 qdict_put_str(prop, "size", mem_str); 2089 } 2090 } 2091 2092 if (qemu_opt_get(opts, "maxmem")) { 2093 qdict_put_str(prop, "max-size", qemu_opt_get(opts, "maxmem")); 2094 } 2095 if (qemu_opt_get(opts, "slots")) { 2096 qdict_put_str(prop, "slots", qemu_opt_get(opts, "slots")); 2097 } 2098 2099 dict = qdict_new(); 2100 qdict_put(dict, "memory", prop); 2101 keyval_merge(machine_opts_dict, dict, &error_fatal); 2102 qobject_unref(dict); 2103 loc_pop(&loc); 2104 } 2105 2106 static void qemu_create_machine(QDict *qdict) 2107 { 2108 MachineClass *machine_class = select_machine(qdict, &error_fatal); 2109 object_set_machine_compat_props(machine_class->compat_props); 2110 2111 current_machine = MACHINE(object_new_with_class(OBJECT_CLASS(machine_class))); 2112 object_property_add_child(object_get_root(), "machine", 2113 OBJECT(current_machine)); 2114 object_property_add_child(container_get(OBJECT(current_machine), 2115 "/unattached"), 2116 "sysbus", OBJECT(sysbus_get_default())); 2117 2118 if (machine_class->minimum_page_bits) { 2119 if (!set_preferred_target_page_bits(machine_class->minimum_page_bits)) { 2120 /* This would be a board error: specifying a minimum smaller than 2121 * a target's compile-time fixed setting. 2122 */ 2123 g_assert_not_reached(); 2124 } 2125 } 2126 2127 cpu_exec_init_all(); 2128 2129 if (machine_class->hw_version) { 2130 qemu_set_hw_version(machine_class->hw_version); 2131 } 2132 2133 /* 2134 * Get the default machine options from the machine if it is not already 2135 * specified either by the configuration file or by the command line. 2136 */ 2137 if (machine_class->default_machine_opts) { 2138 QDict *default_opts = 2139 keyval_parse(machine_class->default_machine_opts, NULL, NULL, 2140 &error_abort); 2141 qemu_apply_legacy_machine_options(default_opts); 2142 object_set_properties_from_keyval(OBJECT(current_machine), default_opts, 2143 false, &error_abort); 2144 qobject_unref(default_opts); 2145 } 2146 } 2147 2148 static int global_init_func(void *opaque, QemuOpts *opts, Error **errp) 2149 { 2150 GlobalProperty *g; 2151 2152 g = g_malloc0(sizeof(*g)); 2153 g->driver = qemu_opt_get(opts, "driver"); 2154 g->property = qemu_opt_get(opts, "property"); 2155 g->value = qemu_opt_get(opts, "value"); 2156 qdev_prop_register_global(g); 2157 return 0; 2158 } 2159 2160 /* 2161 * Return whether configuration group @group is stored in QemuOpts, or 2162 * recorded as one or more QDicts by qemu_record_config_group. 2163 */ 2164 static bool is_qemuopts_group(const char *group) 2165 { 2166 if (g_str_equal(group, "object") || 2167 g_str_equal(group, "audiodev") || 2168 g_str_equal(group, "machine") || 2169 g_str_equal(group, "smp-opts") || 2170 g_str_equal(group, "boot-opts")) { 2171 return false; 2172 } 2173 return true; 2174 } 2175 2176 static void qemu_record_config_group(const char *group, QDict *dict, 2177 bool from_json, Error **errp) 2178 { 2179 if (g_str_equal(group, "object")) { 2180 Visitor *v = qobject_input_visitor_new_keyval(QOBJECT(dict)); 2181 object_option_add_visitor(v); 2182 visit_free(v); 2183 2184 } else if (g_str_equal(group, "audiodev")) { 2185 Audiodev *dev = NULL; 2186 Visitor *v = qobject_input_visitor_new_keyval(QOBJECT(dict)); 2187 if (visit_type_Audiodev(v, NULL, &dev, errp)) { 2188 audio_define(dev); 2189 } 2190 visit_free(v); 2191 2192 } else if (g_str_equal(group, "machine")) { 2193 /* 2194 * Cannot merge string-valued and type-safe dictionaries, so JSON 2195 * is not accepted yet for -M. 2196 */ 2197 assert(!from_json); 2198 keyval_merge(machine_opts_dict, dict, errp); 2199 } else if (g_str_equal(group, "smp-opts")) { 2200 machine_merge_property("smp", dict, &error_fatal); 2201 } else if (g_str_equal(group, "boot-opts")) { 2202 machine_merge_property("boot", dict, &error_fatal); 2203 } else { 2204 abort(); 2205 } 2206 } 2207 2208 /* 2209 * Parse non-QemuOpts config file groups, pass the rest to 2210 * qemu_config_do_parse. 2211 */ 2212 static void qemu_parse_config_group(const char *group, QDict *qdict, 2213 void *opaque, Error **errp) 2214 { 2215 QObject *crumpled; 2216 if (is_qemuopts_group(group)) { 2217 qemu_config_do_parse(group, qdict, opaque, errp); 2218 return; 2219 } 2220 2221 crumpled = qdict_crumple(qdict, errp); 2222 if (!crumpled) { 2223 return; 2224 } 2225 switch (qobject_type(crumpled)) { 2226 case QTYPE_QDICT: 2227 qemu_record_config_group(group, qobject_to(QDict, crumpled), false, errp); 2228 break; 2229 case QTYPE_QLIST: 2230 error_setg(errp, "Lists cannot be at top level of a configuration section"); 2231 break; 2232 default: 2233 g_assert_not_reached(); 2234 } 2235 qobject_unref(crumpled); 2236 } 2237 2238 static void qemu_read_default_config_file(Error **errp) 2239 { 2240 ERRP_GUARD(); 2241 int ret; 2242 g_autofree char *file = get_relocated_path(CONFIG_QEMU_CONFDIR "/qemu.conf"); 2243 2244 ret = qemu_read_config_file(file, qemu_parse_config_group, errp); 2245 if (ret < 0) { 2246 if (ret == -ENOENT) { 2247 error_free(*errp); 2248 *errp = NULL; 2249 } 2250 } 2251 } 2252 2253 static void qemu_set_option(const char *str, Error **errp) 2254 { 2255 char group[64], id[64], arg[64]; 2256 QemuOptsList *list; 2257 QemuOpts *opts; 2258 int rc, offset; 2259 2260 rc = sscanf(str, "%63[^.].%63[^.].%63[^=]%n", group, id, arg, &offset); 2261 if (rc < 3 || str[offset] != '=') { 2262 error_setg(errp, "can't parse: \"%s\"", str); 2263 return; 2264 } 2265 2266 if (!is_qemuopts_group(group)) { 2267 error_setg(errp, "-set is not supported with %s", group); 2268 } else { 2269 list = qemu_find_opts_err(group, errp); 2270 if (list) { 2271 opts = qemu_opts_find(list, id); 2272 if (!opts) { 2273 error_setg(errp, "there is no %s \"%s\" defined", group, id); 2274 return; 2275 } 2276 qemu_opt_set(opts, arg, str + offset + 1, errp); 2277 } 2278 } 2279 } 2280 2281 static void user_register_global_props(void) 2282 { 2283 qemu_opts_foreach(qemu_find_opts("global"), 2284 global_init_func, NULL, NULL); 2285 } 2286 2287 static int do_configure_icount(void *opaque, QemuOpts *opts, Error **errp) 2288 { 2289 return !icount_configure(opts, errp); 2290 } 2291 2292 static int accelerator_set_property(void *opaque, 2293 const char *name, const char *value, 2294 Error **errp) 2295 { 2296 return object_parse_property_opt(opaque, name, value, "accel", errp); 2297 } 2298 2299 static int do_configure_accelerator(void *opaque, QemuOpts *opts, Error **errp) 2300 { 2301 bool *p_init_failed = opaque; 2302 const char *acc = qemu_opt_get(opts, "accel"); 2303 AccelClass *ac = accel_find(acc); 2304 AccelState *accel; 2305 int ret; 2306 bool qtest_with_kvm; 2307 2308 if (!acc) { 2309 error_setg(errp, QERR_MISSING_PARAMETER, "accel"); 2310 goto bad; 2311 } 2312 2313 qtest_with_kvm = g_str_equal(acc, "kvm") && qtest_chrdev != NULL; 2314 2315 if (!ac) { 2316 if (!qtest_with_kvm) { 2317 error_report("invalid accelerator %s", acc); 2318 } 2319 goto bad; 2320 } 2321 accel = ACCEL(object_new_with_class(OBJECT_CLASS(ac))); 2322 object_apply_compat_props(OBJECT(accel)); 2323 qemu_opt_foreach(opts, accelerator_set_property, 2324 accel, 2325 &error_fatal); 2326 2327 ret = accel_init_machine(accel, current_machine); 2328 if (ret < 0) { 2329 if (!qtest_with_kvm || ret != -ENOENT) { 2330 error_report("failed to initialize %s: %s", acc, strerror(-ret)); 2331 } 2332 goto bad; 2333 } 2334 2335 return 1; 2336 2337 bad: 2338 *p_init_failed = true; 2339 return 0; 2340 } 2341 2342 static void configure_accelerators(const char *progname) 2343 { 2344 bool init_failed = false; 2345 2346 qemu_opts_foreach(qemu_find_opts("icount"), 2347 do_configure_icount, NULL, &error_fatal); 2348 2349 if (QTAILQ_EMPTY(&qemu_accel_opts.head)) { 2350 char **accel_list, **tmp; 2351 2352 if (accelerators == NULL) { 2353 /* Select the default accelerator */ 2354 bool have_tcg = accel_find("tcg"); 2355 bool have_kvm = accel_find("kvm"); 2356 2357 if (have_tcg && have_kvm) { 2358 if (g_str_has_suffix(progname, "kvm")) { 2359 /* If the program name ends with "kvm", we prefer KVM */ 2360 accelerators = "kvm:tcg"; 2361 } else { 2362 accelerators = "tcg:kvm"; 2363 } 2364 } else if (have_kvm) { 2365 accelerators = "kvm"; 2366 } else if (have_tcg) { 2367 accelerators = "tcg"; 2368 } else { 2369 error_report("No accelerator selected and" 2370 " no default accelerator available"); 2371 exit(1); 2372 } 2373 } 2374 accel_list = g_strsplit(accelerators, ":", 0); 2375 2376 for (tmp = accel_list; *tmp; tmp++) { 2377 /* 2378 * Filter invalid accelerators here, to prevent obscenities 2379 * such as "-machine accel=tcg,,thread=single". 2380 */ 2381 if (accel_find(*tmp)) { 2382 qemu_opts_parse_noisily(qemu_find_opts("accel"), *tmp, true); 2383 } else { 2384 init_failed = true; 2385 error_report("invalid accelerator %s", *tmp); 2386 } 2387 } 2388 g_strfreev(accel_list); 2389 } else { 2390 if (accelerators != NULL) { 2391 error_report("The -accel and \"-machine accel=\" options are incompatible"); 2392 exit(1); 2393 } 2394 } 2395 2396 if (!qemu_opts_foreach(qemu_find_opts("accel"), 2397 do_configure_accelerator, &init_failed, &error_fatal)) { 2398 if (!init_failed) { 2399 error_report("no accelerator found"); 2400 } 2401 exit(1); 2402 } 2403 2404 if (init_failed && !qtest_chrdev) { 2405 error_report("falling back to %s", current_accel_name()); 2406 } 2407 2408 if (icount_enabled() && !tcg_enabled()) { 2409 error_report("-icount is not allowed with hardware virtualization"); 2410 exit(1); 2411 } 2412 } 2413 2414 static void qemu_validate_options(const QDict *machine_opts) 2415 { 2416 const char *kernel_filename = qdict_get_try_str(machine_opts, "kernel"); 2417 const char *initrd_filename = qdict_get_try_str(machine_opts, "initrd"); 2418 const char *kernel_cmdline = qdict_get_try_str(machine_opts, "append"); 2419 2420 if (kernel_filename == NULL) { 2421 if (kernel_cmdline != NULL) { 2422 error_report("-append only allowed with -kernel option"); 2423 exit(1); 2424 } 2425 2426 if (initrd_filename != NULL) { 2427 error_report("-initrd only allowed with -kernel option"); 2428 exit(1); 2429 } 2430 } 2431 2432 if (loadvm && incoming) { 2433 error_report("'incoming' and 'loadvm' options are mutually exclusive"); 2434 exit(EXIT_FAILURE); 2435 } 2436 if (loadvm && preconfig_requested) { 2437 error_report("'preconfig' and 'loadvm' options are " 2438 "mutually exclusive"); 2439 exit(EXIT_FAILURE); 2440 } 2441 if (incoming && preconfig_requested && strcmp(incoming, "defer") != 0) { 2442 error_report("'preconfig' supports '-incoming defer' only"); 2443 exit(EXIT_FAILURE); 2444 } 2445 2446 #ifdef CONFIG_CURSES 2447 if (is_daemonized() && dpy.type == DISPLAY_TYPE_CURSES) { 2448 error_report("curses display cannot be used with -daemonize"); 2449 exit(1); 2450 } 2451 #endif 2452 } 2453 2454 static void qemu_process_sugar_options(void) 2455 { 2456 if (mem_prealloc) { 2457 QObject *smp = qdict_get(machine_opts_dict, "smp"); 2458 if (smp && qobject_type(smp) == QTYPE_QDICT) { 2459 QObject *cpus = qdict_get(qobject_to(QDict, smp), "cpus"); 2460 if (cpus && qobject_type(cpus) == QTYPE_QSTRING) { 2461 const char *val = qstring_get_str(qobject_to(QString, cpus)); 2462 object_register_sugar_prop("memory-backend", "prealloc-threads", 2463 val, false); 2464 } 2465 } 2466 object_register_sugar_prop("memory-backend", "prealloc", "on", false); 2467 } 2468 } 2469 2470 /* -action processing */ 2471 2472 /* 2473 * Process all the -action parameters parsed from cmdline. 2474 */ 2475 static int process_runstate_actions(void *opaque, QemuOpts *opts, Error **errp) 2476 { 2477 Error *local_err = NULL; 2478 QDict *qdict = qemu_opts_to_qdict(opts, NULL); 2479 QObject *ret = NULL; 2480 qmp_marshal_set_action(qdict, &ret, &local_err); 2481 qobject_unref(ret); 2482 qobject_unref(qdict); 2483 if (local_err) { 2484 error_propagate(errp, local_err); 2485 return 1; 2486 } 2487 return 0; 2488 } 2489 2490 static void qemu_process_early_options(void) 2491 { 2492 qemu_opts_foreach(qemu_find_opts("name"), 2493 parse_name, NULL, &error_fatal); 2494 2495 object_option_foreach_add(object_create_pre_sandbox); 2496 2497 #ifdef CONFIG_SECCOMP 2498 QemuOptsList *olist = qemu_find_opts_err("sandbox", NULL); 2499 if (olist) { 2500 qemu_opts_foreach(olist, parse_sandbox, NULL, &error_fatal); 2501 } 2502 #endif 2503 2504 if (qemu_opts_foreach(qemu_find_opts("action"), 2505 process_runstate_actions, NULL, &error_fatal)) { 2506 exit(1); 2507 } 2508 2509 #ifndef _WIN32 2510 qemu_opts_foreach(qemu_find_opts("add-fd"), 2511 parse_add_fd, NULL, &error_fatal); 2512 2513 qemu_opts_foreach(qemu_find_opts("add-fd"), 2514 cleanup_add_fd, NULL, &error_fatal); 2515 #endif 2516 2517 /* Open the logfile at this point and set the log mask if necessary. */ 2518 { 2519 int mask = 0; 2520 if (log_mask) { 2521 mask = qemu_str_to_log_mask(log_mask); 2522 if (!mask) { 2523 qemu_print_log_usage(stdout); 2524 exit(1); 2525 } 2526 } 2527 qemu_set_log_filename_flags(log_file, mask, &error_fatal); 2528 } 2529 2530 qemu_add_default_firmwarepath(); 2531 } 2532 2533 static void qemu_process_help_options(void) 2534 { 2535 /* 2536 * Check for -cpu help and -device help before we call select_machine(), 2537 * which will return an error if the architecture has no default machine 2538 * type and the user did not specify one, so that the user doesn't need 2539 * to say '-cpu help -machine something'. 2540 */ 2541 if (cpu_option && is_help_option(cpu_option)) { 2542 list_cpus(); 2543 exit(0); 2544 } 2545 2546 if (qemu_opts_foreach(qemu_find_opts("device"), 2547 device_help_func, NULL, NULL)) { 2548 exit(0); 2549 } 2550 2551 /* -L help lists the data directories and exits. */ 2552 if (list_data_dirs) { 2553 qemu_list_data_dirs(); 2554 exit(0); 2555 } 2556 } 2557 2558 static void qemu_maybe_daemonize(const char *pid_file) 2559 { 2560 Error *err = NULL; 2561 2562 os_daemonize(); 2563 rcu_disable_atfork(); 2564 2565 if (pid_file) { 2566 char *pid_file_realpath = NULL; 2567 2568 if (!qemu_write_pidfile(pid_file, &err)) { 2569 error_reportf_err(err, "cannot create PID file: "); 2570 exit(1); 2571 } 2572 2573 pid_file_realpath = g_malloc0(PATH_MAX); 2574 if (!realpath(pid_file, pid_file_realpath)) { 2575 if (errno != ENOENT) { 2576 warn_report("not removing PID file on exit: cannot resolve PID " 2577 "file path: %s: %s", pid_file, strerror(errno)); 2578 } 2579 return; 2580 } 2581 2582 qemu_unlink_pidfile_notifier = (struct UnlinkPidfileNotifier) { 2583 .notifier = { 2584 .notify = qemu_unlink_pidfile, 2585 }, 2586 .pid_file_realpath = pid_file_realpath, 2587 }; 2588 qemu_add_exit_notifier(&qemu_unlink_pidfile_notifier.notifier); 2589 } 2590 } 2591 2592 static void qemu_init_displays(void) 2593 { 2594 DisplayState *ds; 2595 2596 /* init local displays */ 2597 ds = init_displaystate(); 2598 qemu_display_init(ds, &dpy); 2599 2600 /* must be after terminal init, SDL library changes signal handlers */ 2601 os_setup_signal_handling(); 2602 2603 /* init remote displays */ 2604 #ifdef CONFIG_VNC 2605 qemu_opts_foreach(qemu_find_opts("vnc"), 2606 vnc_init_func, NULL, &error_fatal); 2607 #endif 2608 2609 if (using_spice) { 2610 qemu_spice.display_init(); 2611 } 2612 } 2613 2614 static void qemu_init_board(void) 2615 { 2616 /* process plugin before CPUs are created, but once -smp has been parsed */ 2617 qemu_plugin_load_list(&plugin_list, &error_fatal); 2618 2619 /* From here on we enter MACHINE_PHASE_INITIALIZED. */ 2620 machine_run_board_init(current_machine, mem_path, &error_fatal); 2621 2622 drive_check_orphaned(); 2623 2624 realtime_init(); 2625 } 2626 2627 static void qemu_create_cli_devices(void) 2628 { 2629 DeviceOption *opt; 2630 2631 soundhw_init(); 2632 2633 qemu_opts_foreach(qemu_find_opts("fw_cfg"), 2634 parse_fw_cfg, fw_cfg_find(), &error_fatal); 2635 2636 /* init USB devices */ 2637 if (machine_usb(current_machine)) { 2638 if (foreach_device_config(DEV_USB, usb_parse) < 0) 2639 exit(1); 2640 } 2641 2642 /* init generic devices */ 2643 rom_set_order_override(FW_CFG_ORDER_OVERRIDE_DEVICE); 2644 qemu_opts_foreach(qemu_find_opts("device"), 2645 device_init_func, NULL, &error_fatal); 2646 QTAILQ_FOREACH(opt, &device_opts, next) { 2647 DeviceState *dev; 2648 loc_push_restore(&opt->loc); 2649 /* 2650 * TODO Eventually we should call qmp_device_add() here to make sure it 2651 * behaves the same, but QMP still has to accept incorrectly typed 2652 * options until libvirt is fixed and we want to be strict on the CLI 2653 * from the start, so call qdev_device_add_from_qdict() directly for 2654 * now. 2655 */ 2656 dev = qdev_device_add_from_qdict(opt->opts, true, &error_fatal); 2657 object_unref(OBJECT(dev)); 2658 loc_pop(&opt->loc); 2659 } 2660 rom_reset_order_override(); 2661 } 2662 2663 static bool qemu_machine_creation_done(Error **errp) 2664 { 2665 MachineState *machine = MACHINE(qdev_get_machine()); 2666 2667 /* Did we create any drives that we failed to create a device for? */ 2668 drive_check_orphaned(); 2669 2670 /* Don't warn about the default network setup that you get if 2671 * no command line -net or -netdev options are specified. There 2672 * are two cases that we would otherwise complain about: 2673 * (1) board doesn't support a NIC but the implicit "-net nic" 2674 * requested one 2675 * (2) CONFIG_SLIRP not set, in which case the implicit "-net nic" 2676 * sets up a nic that isn't connected to anything. 2677 */ 2678 if (!default_net && (!qtest_enabled() || has_defaults)) { 2679 net_check_clients(); 2680 } 2681 2682 qdev_prop_check_globals(); 2683 2684 qdev_machine_creation_done(); 2685 2686 if (machine->cgs && !machine->cgs->ready) { 2687 error_setg(errp, "accelerator does not support confidential guest %s", 2688 object_get_typename(OBJECT(machine->cgs))); 2689 exit(1); 2690 } 2691 2692 if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) { 2693 error_setg(errp, "could not start gdbserver"); 2694 return false; 2695 } 2696 if (!vga_interface_created && !default_vga && 2697 vga_interface_type != VGA_NONE) { 2698 warn_report("A -vga option was passed but this machine " 2699 "type does not use that option; " 2700 "No VGA device has been created"); 2701 } 2702 return true; 2703 } 2704 2705 void qmp_x_exit_preconfig(Error **errp) 2706 { 2707 if (phase_check(PHASE_MACHINE_INITIALIZED)) { 2708 error_setg(errp, "The command is permitted only before machine initialization"); 2709 return; 2710 } 2711 2712 qemu_init_board(); 2713 qemu_create_cli_devices(); 2714 if (!qemu_machine_creation_done(errp)) { 2715 return; 2716 } 2717 2718 if (loadvm) { 2719 RunState state = autostart ? RUN_STATE_RUNNING : runstate_get(); 2720 load_snapshot(loadvm, NULL, false, NULL, &error_fatal); 2721 load_snapshot_resume(state); 2722 } 2723 if (replay_mode != REPLAY_MODE_NONE) { 2724 replay_vmstate_init(); 2725 } 2726 2727 if (incoming) { 2728 Error *local_err = NULL; 2729 if (strcmp(incoming, "defer") != 0) { 2730 qmp_migrate_incoming(incoming, false, NULL, true, true, 2731 &local_err); 2732 if (local_err) { 2733 error_reportf_err(local_err, "-incoming %s: ", incoming); 2734 exit(1); 2735 } 2736 } 2737 } else if (autostart) { 2738 qmp_cont(NULL); 2739 } 2740 } 2741 2742 void qemu_init(int argc, char **argv) 2743 { 2744 QemuOpts *opts; 2745 QemuOpts *icount_opts = NULL, *accel_opts = NULL; 2746 QemuOptsList *olist; 2747 int optind; 2748 const char *optarg; 2749 MachineClass *machine_class; 2750 bool userconfig = true; 2751 FILE *vmstate_dump_file = NULL; 2752 2753 qemu_add_opts(&qemu_drive_opts); 2754 qemu_add_drive_opts(&qemu_legacy_drive_opts); 2755 qemu_add_drive_opts(&qemu_common_drive_opts); 2756 qemu_add_drive_opts(&qemu_drive_opts); 2757 qemu_add_drive_opts(&bdrv_runtime_opts); 2758 qemu_add_opts(&qemu_chardev_opts); 2759 qemu_add_opts(&qemu_device_opts); 2760 qemu_add_opts(&qemu_netdev_opts); 2761 qemu_add_opts(&qemu_nic_opts); 2762 qemu_add_opts(&qemu_net_opts); 2763 qemu_add_opts(&qemu_rtc_opts); 2764 qemu_add_opts(&qemu_global_opts); 2765 qemu_add_opts(&qemu_mon_opts); 2766 qemu_add_opts(&qemu_trace_opts); 2767 qemu_plugin_add_opts(); 2768 qemu_add_opts(&qemu_option_rom_opts); 2769 qemu_add_opts(&qemu_accel_opts); 2770 qemu_add_opts(&qemu_mem_opts); 2771 qemu_add_opts(&qemu_smp_opts); 2772 qemu_add_opts(&qemu_boot_opts); 2773 qemu_add_opts(&qemu_add_fd_opts); 2774 qemu_add_opts(&qemu_object_opts); 2775 qemu_add_opts(&qemu_tpmdev_opts); 2776 qemu_add_opts(&qemu_overcommit_opts); 2777 qemu_add_opts(&qemu_msg_opts); 2778 qemu_add_opts(&qemu_name_opts); 2779 qemu_add_opts(&qemu_numa_opts); 2780 qemu_add_opts(&qemu_icount_opts); 2781 qemu_add_opts(&qemu_semihosting_config_opts); 2782 qemu_add_opts(&qemu_fw_cfg_opts); 2783 qemu_add_opts(&qemu_action_opts); 2784 qemu_add_run_with_opts(); 2785 module_call_init(MODULE_INIT_OPTS); 2786 2787 error_init(argv[0]); 2788 qemu_init_exec_dir(argv[0]); 2789 2790 os_setup_limits(); 2791 2792 qemu_init_arch_modules(); 2793 2794 qemu_init_subsystems(); 2795 2796 /* first pass of option parsing */ 2797 optind = 1; 2798 while (optind < argc) { 2799 if (argv[optind][0] != '-') { 2800 /* disk image */ 2801 optind++; 2802 } else { 2803 const QEMUOption *popt; 2804 2805 popt = lookup_opt(argc, argv, &optarg, &optind); 2806 switch (popt->index) { 2807 case QEMU_OPTION_nouserconfig: 2808 userconfig = false; 2809 break; 2810 } 2811 } 2812 } 2813 2814 machine_opts_dict = qdict_new(); 2815 if (userconfig) { 2816 qemu_read_default_config_file(&error_fatal); 2817 } 2818 2819 /* second pass of option parsing */ 2820 optind = 1; 2821 for(;;) { 2822 if (optind >= argc) 2823 break; 2824 if (argv[optind][0] != '-') { 2825 loc_set_cmdline(argv, optind, 1); 2826 drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS); 2827 } else { 2828 const QEMUOption *popt; 2829 2830 popt = lookup_opt(argc, argv, &optarg, &optind); 2831 if (!(popt->arch_mask & arch_type)) { 2832 error_report("Option not supported for this target"); 2833 exit(1); 2834 } 2835 switch(popt->index) { 2836 case QEMU_OPTION_cpu: 2837 /* hw initialization will check this */ 2838 cpu_option = optarg; 2839 break; 2840 case QEMU_OPTION_hda: 2841 case QEMU_OPTION_hdb: 2842 case QEMU_OPTION_hdc: 2843 case QEMU_OPTION_hdd: 2844 drive_add(IF_DEFAULT, popt->index - QEMU_OPTION_hda, optarg, 2845 HD_OPTS); 2846 break; 2847 case QEMU_OPTION_blockdev: 2848 { 2849 Visitor *v; 2850 BlockdevOptionsQueueEntry *bdo; 2851 2852 v = qobject_input_visitor_new_str(optarg, "driver", 2853 &error_fatal); 2854 2855 bdo = g_new(BlockdevOptionsQueueEntry, 1); 2856 visit_type_BlockdevOptions(v, NULL, &bdo->bdo, 2857 &error_fatal); 2858 visit_free(v); 2859 loc_save(&bdo->loc); 2860 QSIMPLEQ_INSERT_TAIL(&bdo_queue, bdo, entry); 2861 break; 2862 } 2863 case QEMU_OPTION_drive: 2864 opts = qemu_opts_parse_noisily(qemu_find_opts("drive"), 2865 optarg, false); 2866 if (opts == NULL) { 2867 exit(1); 2868 } 2869 break; 2870 case QEMU_OPTION_set: 2871 qemu_set_option(optarg, &error_fatal); 2872 break; 2873 case QEMU_OPTION_global: 2874 if (qemu_global_option(optarg) != 0) 2875 exit(1); 2876 break; 2877 case QEMU_OPTION_mtdblock: 2878 drive_add(IF_MTD, -1, optarg, MTD_OPTS); 2879 break; 2880 case QEMU_OPTION_sd: 2881 drive_add(IF_SD, -1, optarg, SD_OPTS); 2882 break; 2883 case QEMU_OPTION_pflash: 2884 drive_add(IF_PFLASH, -1, optarg, PFLASH_OPTS); 2885 break; 2886 case QEMU_OPTION_snapshot: 2887 snapshot = 1; 2888 replay_add_blocker("-snapshot"); 2889 break; 2890 case QEMU_OPTION_numa: 2891 opts = qemu_opts_parse_noisily(qemu_find_opts("numa"), 2892 optarg, true); 2893 if (!opts) { 2894 exit(1); 2895 } 2896 break; 2897 case QEMU_OPTION_display: 2898 parse_display(optarg); 2899 break; 2900 case QEMU_OPTION_nographic: 2901 qdict_put_str(machine_opts_dict, "graphics", "off"); 2902 nographic = true; 2903 dpy.type = DISPLAY_TYPE_NONE; 2904 break; 2905 case QEMU_OPTION_portrait: 2906 graphic_rotate = 90; 2907 break; 2908 case QEMU_OPTION_rotate: 2909 graphic_rotate = strtol(optarg, (char **) &optarg, 10); 2910 if (graphic_rotate != 0 && graphic_rotate != 90 && 2911 graphic_rotate != 180 && graphic_rotate != 270) { 2912 error_report("only 90, 180, 270 deg rotation is available"); 2913 exit(1); 2914 } 2915 break; 2916 case QEMU_OPTION_kernel: 2917 qdict_put_str(machine_opts_dict, "kernel", optarg); 2918 break; 2919 case QEMU_OPTION_initrd: 2920 qdict_put_str(machine_opts_dict, "initrd", optarg); 2921 break; 2922 case QEMU_OPTION_append: 2923 qdict_put_str(machine_opts_dict, "append", optarg); 2924 break; 2925 case QEMU_OPTION_dtb: 2926 qdict_put_str(machine_opts_dict, "dtb", optarg); 2927 break; 2928 case QEMU_OPTION_cdrom: 2929 drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS); 2930 break; 2931 case QEMU_OPTION_boot: 2932 machine_parse_property_opt(qemu_find_opts("boot-opts"), "boot", optarg); 2933 break; 2934 case QEMU_OPTION_fda: 2935 case QEMU_OPTION_fdb: 2936 drive_add(IF_FLOPPY, popt->index - QEMU_OPTION_fda, 2937 optarg, FD_OPTS); 2938 break; 2939 case QEMU_OPTION_no_fd_bootchk: 2940 qdict_put_str(machine_opts_dict, "fd-bootchk", "off"); 2941 break; 2942 case QEMU_OPTION_netdev: 2943 default_net = 0; 2944 if (netdev_is_modern(optarg)) { 2945 netdev_parse_modern(optarg); 2946 } else { 2947 net_client_parse(qemu_find_opts("netdev"), optarg); 2948 } 2949 break; 2950 case QEMU_OPTION_nic: 2951 default_net = 0; 2952 net_client_parse(qemu_find_opts("nic"), optarg); 2953 break; 2954 case QEMU_OPTION_net: 2955 default_net = 0; 2956 net_client_parse(qemu_find_opts("net"), optarg); 2957 break; 2958 #ifdef CONFIG_LIBISCSI 2959 case QEMU_OPTION_iscsi: 2960 opts = qemu_opts_parse_noisily(qemu_find_opts("iscsi"), 2961 optarg, false); 2962 if (!opts) { 2963 exit(1); 2964 } 2965 break; 2966 #endif 2967 case QEMU_OPTION_audiodev: 2968 default_audio = 0; 2969 audio_parse_option(optarg); 2970 break; 2971 case QEMU_OPTION_audio: { 2972 bool help; 2973 char *model = NULL; 2974 Audiodev *dev = NULL; 2975 Visitor *v; 2976 QDict *dict = keyval_parse(optarg, "driver", &help, &error_fatal); 2977 default_audio = 0; 2978 if (help || (qdict_haskey(dict, "driver") && 2979 is_help_option(qdict_get_str(dict, "driver")))) { 2980 audio_help(); 2981 exit(EXIT_SUCCESS); 2982 } 2983 if (!qdict_haskey(dict, "id")) { 2984 qdict_put_str(dict, "id", "audiodev0"); 2985 } 2986 if (qdict_haskey(dict, "model")) { 2987 model = g_strdup(qdict_get_str(dict, "model")); 2988 qdict_del(dict, "model"); 2989 if (is_help_option(model)) { 2990 show_valid_soundhw(); 2991 exit(0); 2992 } 2993 } 2994 v = qobject_input_visitor_new_keyval(QOBJECT(dict)); 2995 qobject_unref(dict); 2996 visit_type_Audiodev(v, NULL, &dev, &error_fatal); 2997 visit_free(v); 2998 if (model) { 2999 audio_define(dev); 3000 select_soundhw(model, dev->id); 3001 g_free(model); 3002 } else { 3003 audio_define_default(dev, &error_fatal); 3004 } 3005 break; 3006 } 3007 case QEMU_OPTION_h: 3008 help(0); 3009 break; 3010 case QEMU_OPTION_version: 3011 version(); 3012 exit(0); 3013 break; 3014 case QEMU_OPTION_m: 3015 opts = qemu_opts_parse_noisily(qemu_find_opts("memory"), optarg, true); 3016 if (opts == NULL) { 3017 exit(1); 3018 } 3019 break; 3020 #ifdef CONFIG_TPM 3021 case QEMU_OPTION_tpmdev: 3022 if (tpm_config_parse(qemu_find_opts("tpmdev"), optarg) < 0) { 3023 exit(1); 3024 } 3025 break; 3026 #endif 3027 case QEMU_OPTION_mempath: 3028 mem_path = optarg; 3029 break; 3030 case QEMU_OPTION_mem_prealloc: 3031 mem_prealloc = 1; 3032 break; 3033 case QEMU_OPTION_d: 3034 log_mask = optarg; 3035 break; 3036 case QEMU_OPTION_D: 3037 log_file = optarg; 3038 break; 3039 case QEMU_OPTION_DFILTER: 3040 qemu_set_dfilter_ranges(optarg, &error_fatal); 3041 break; 3042 #if defined(CONFIG_TCG) && defined(CONFIG_LINUX) 3043 case QEMU_OPTION_perfmap: 3044 perf_enable_perfmap(); 3045 break; 3046 case QEMU_OPTION_jitdump: 3047 perf_enable_jitdump(); 3048 break; 3049 #endif 3050 case QEMU_OPTION_seed: 3051 qemu_guest_random_seed_main(optarg, &error_fatal); 3052 break; 3053 case QEMU_OPTION_s: 3054 add_device_config(DEV_GDB, "tcp::" DEFAULT_GDBSTUB_PORT); 3055 break; 3056 case QEMU_OPTION_gdb: 3057 add_device_config(DEV_GDB, optarg); 3058 break; 3059 case QEMU_OPTION_L: 3060 if (is_help_option(optarg)) { 3061 list_data_dirs = true; 3062 } else { 3063 qemu_add_data_dir(g_strdup(optarg)); 3064 } 3065 break; 3066 case QEMU_OPTION_bios: 3067 qdict_put_str(machine_opts_dict, "firmware", optarg); 3068 break; 3069 case QEMU_OPTION_S: 3070 autostart = 0; 3071 break; 3072 case QEMU_OPTION_k: 3073 keyboard_layout = optarg; 3074 break; 3075 case QEMU_OPTION_vga: 3076 vga_model = optarg; 3077 default_vga = 0; 3078 break; 3079 case QEMU_OPTION_g: 3080 { 3081 const char *p; 3082 int w, h, depth; 3083 p = optarg; 3084 w = strtol(p, (char **)&p, 10); 3085 if (w <= 0) { 3086 graphic_error: 3087 error_report("invalid resolution or depth"); 3088 exit(1); 3089 } 3090 if (*p != 'x') 3091 goto graphic_error; 3092 p++; 3093 h = strtol(p, (char **)&p, 10); 3094 if (h <= 0) 3095 goto graphic_error; 3096 if (*p == 'x') { 3097 p++; 3098 depth = strtol(p, (char **)&p, 10); 3099 if (depth != 1 && depth != 2 && depth != 4 && 3100 depth != 8 && depth != 15 && depth != 16 && 3101 depth != 24 && depth != 32) 3102 goto graphic_error; 3103 } else if (*p == '\0') { 3104 depth = graphic_depth; 3105 } else { 3106 goto graphic_error; 3107 } 3108 3109 graphic_width = w; 3110 graphic_height = h; 3111 graphic_depth = depth; 3112 } 3113 break; 3114 case QEMU_OPTION_echr: 3115 { 3116 char *r; 3117 term_escape_char = strtol(optarg, &r, 0); 3118 if (r == optarg) 3119 printf("Bad argument to echr\n"); 3120 break; 3121 } 3122 case QEMU_OPTION_monitor: 3123 default_monitor = 0; 3124 if (strncmp(optarg, "none", 4)) { 3125 monitor_parse(optarg, "readline", false); 3126 } 3127 break; 3128 case QEMU_OPTION_qmp: 3129 monitor_parse(optarg, "control", false); 3130 default_monitor = 0; 3131 break; 3132 case QEMU_OPTION_qmp_pretty: 3133 monitor_parse(optarg, "control", true); 3134 default_monitor = 0; 3135 break; 3136 case QEMU_OPTION_mon: 3137 opts = qemu_opts_parse_noisily(qemu_find_opts("mon"), optarg, 3138 true); 3139 if (!opts) { 3140 exit(1); 3141 } 3142 default_monitor = 0; 3143 break; 3144 case QEMU_OPTION_chardev: 3145 opts = qemu_opts_parse_noisily(qemu_find_opts("chardev"), 3146 optarg, true); 3147 if (!opts) { 3148 exit(1); 3149 } 3150 break; 3151 case QEMU_OPTION_fsdev: 3152 olist = qemu_find_opts("fsdev"); 3153 if (!olist) { 3154 error_report("fsdev support is disabled"); 3155 exit(1); 3156 } 3157 opts = qemu_opts_parse_noisily(olist, optarg, true); 3158 if (!opts) { 3159 exit(1); 3160 } 3161 break; 3162 case QEMU_OPTION_virtfs: { 3163 QemuOpts *fsdev; 3164 QemuOpts *device; 3165 const char *writeout, *sock_fd, *socket, *path, *security_model, 3166 *multidevs; 3167 3168 olist = qemu_find_opts("virtfs"); 3169 if (!olist) { 3170 error_report("virtfs support is disabled"); 3171 exit(1); 3172 } 3173 opts = qemu_opts_parse_noisily(olist, optarg, true); 3174 if (!opts) { 3175 exit(1); 3176 } 3177 3178 if (qemu_opt_get(opts, "fsdriver") == NULL || 3179 qemu_opt_get(opts, "mount_tag") == NULL) { 3180 error_report("Usage: -virtfs fsdriver,mount_tag=tag"); 3181 exit(1); 3182 } 3183 fsdev = qemu_opts_create(qemu_find_opts("fsdev"), 3184 qemu_opts_id(opts) ?: 3185 qemu_opt_get(opts, "mount_tag"), 3186 1, NULL); 3187 if (!fsdev) { 3188 error_report("duplicate or invalid fsdev id: %s", 3189 qemu_opt_get(opts, "mount_tag")); 3190 exit(1); 3191 } 3192 3193 writeout = qemu_opt_get(opts, "writeout"); 3194 if (writeout) { 3195 #ifdef CONFIG_SYNC_FILE_RANGE 3196 qemu_opt_set(fsdev, "writeout", writeout, &error_abort); 3197 #else 3198 error_report("writeout=immediate not supported " 3199 "on this platform"); 3200 exit(1); 3201 #endif 3202 } 3203 qemu_opt_set(fsdev, "fsdriver", 3204 qemu_opt_get(opts, "fsdriver"), &error_abort); 3205 path = qemu_opt_get(opts, "path"); 3206 if (path) { 3207 qemu_opt_set(fsdev, "path", path, &error_abort); 3208 } 3209 security_model = qemu_opt_get(opts, "security_model"); 3210 if (security_model) { 3211 qemu_opt_set(fsdev, "security_model", security_model, 3212 &error_abort); 3213 } 3214 socket = qemu_opt_get(opts, "socket"); 3215 if (socket) { 3216 qemu_opt_set(fsdev, "socket", socket, &error_abort); 3217 } 3218 sock_fd = qemu_opt_get(opts, "sock_fd"); 3219 if (sock_fd) { 3220 qemu_opt_set(fsdev, "sock_fd", sock_fd, &error_abort); 3221 } 3222 3223 qemu_opt_set_bool(fsdev, "readonly", 3224 qemu_opt_get_bool(opts, "readonly", 0), 3225 &error_abort); 3226 multidevs = qemu_opt_get(opts, "multidevs"); 3227 if (multidevs) { 3228 qemu_opt_set(fsdev, "multidevs", multidevs, &error_abort); 3229 } 3230 device = qemu_opts_create(qemu_find_opts("device"), NULL, 0, 3231 &error_abort); 3232 qemu_opt_set(device, "driver", "virtio-9p-pci", &error_abort); 3233 qemu_opt_set(device, "fsdev", 3234 qemu_opts_id(fsdev), &error_abort); 3235 qemu_opt_set(device, "mount_tag", 3236 qemu_opt_get(opts, "mount_tag"), &error_abort); 3237 break; 3238 } 3239 case QEMU_OPTION_serial: 3240 add_device_config(DEV_SERIAL, optarg); 3241 default_serial = 0; 3242 if (strncmp(optarg, "mon:", 4) == 0) { 3243 default_monitor = 0; 3244 } 3245 break; 3246 case QEMU_OPTION_action: 3247 olist = qemu_find_opts("action"); 3248 if (!qemu_opts_parse_noisily(olist, optarg, false)) { 3249 exit(1); 3250 } 3251 break; 3252 case QEMU_OPTION_watchdog_action: { 3253 opts = qemu_opts_create(qemu_find_opts("action"), NULL, 0, &error_abort); 3254 qemu_opt_set(opts, "watchdog", optarg, &error_abort); 3255 break; 3256 } 3257 case QEMU_OPTION_parallel: 3258 add_device_config(DEV_PARALLEL, optarg); 3259 default_parallel = 0; 3260 if (strncmp(optarg, "mon:", 4) == 0) { 3261 default_monitor = 0; 3262 } 3263 break; 3264 case QEMU_OPTION_debugcon: 3265 add_device_config(DEV_DEBUGCON, optarg); 3266 break; 3267 case QEMU_OPTION_loadvm: 3268 loadvm = optarg; 3269 break; 3270 case QEMU_OPTION_full_screen: 3271 dpy.has_full_screen = true; 3272 dpy.full_screen = true; 3273 break; 3274 case QEMU_OPTION_pidfile: 3275 pid_file = optarg; 3276 break; 3277 case QEMU_OPTION_win2k_hack: 3278 object_register_sugar_prop("ide-device", "win2k-install-hack", "true", true); 3279 break; 3280 case QEMU_OPTION_acpitable: 3281 opts = qemu_opts_parse_noisily(qemu_find_opts("acpi"), 3282 optarg, true); 3283 if (!opts) { 3284 exit(1); 3285 } 3286 acpi_table_add(opts, &error_fatal); 3287 break; 3288 case QEMU_OPTION_smbios: 3289 opts = qemu_opts_parse_noisily(qemu_find_opts("smbios"), 3290 optarg, false); 3291 if (!opts) { 3292 exit(1); 3293 } 3294 smbios_entry_add(opts, &error_fatal); 3295 break; 3296 case QEMU_OPTION_fwcfg: 3297 opts = qemu_opts_parse_noisily(qemu_find_opts("fw_cfg"), 3298 optarg, true); 3299 if (opts == NULL) { 3300 exit(1); 3301 } 3302 break; 3303 case QEMU_OPTION_preconfig: 3304 preconfig_requested = true; 3305 break; 3306 case QEMU_OPTION_enable_kvm: 3307 qdict_put_str(machine_opts_dict, "accel", "kvm"); 3308 break; 3309 case QEMU_OPTION_M: 3310 case QEMU_OPTION_machine: 3311 { 3312 bool help; 3313 3314 keyval_parse_into(machine_opts_dict, optarg, "type", &help, &error_fatal); 3315 if (help) { 3316 machine_help_func(machine_opts_dict); 3317 exit(EXIT_SUCCESS); 3318 } 3319 break; 3320 } 3321 case QEMU_OPTION_accel: 3322 accel_opts = qemu_opts_parse_noisily(qemu_find_opts("accel"), 3323 optarg, true); 3324 optarg = qemu_opt_get(accel_opts, "accel"); 3325 if (!optarg || is_help_option(optarg)) { 3326 printf("Accelerators supported in QEMU binary:\n"); 3327 GSList *el, *accel_list = object_class_get_list(TYPE_ACCEL, 3328 false); 3329 for (el = accel_list; el; el = el->next) { 3330 gchar *typename = g_strdup(object_class_get_name( 3331 OBJECT_CLASS(el->data))); 3332 /* omit qtest which is used for tests only */ 3333 if (g_strcmp0(typename, ACCEL_CLASS_NAME("qtest")) && 3334 g_str_has_suffix(typename, ACCEL_CLASS_SUFFIX)) { 3335 gchar **optname = g_strsplit(typename, 3336 ACCEL_CLASS_SUFFIX, 0); 3337 printf("%s\n", optname[0]); 3338 g_strfreev(optname); 3339 } 3340 g_free(typename); 3341 } 3342 g_slist_free(accel_list); 3343 exit(0); 3344 } 3345 break; 3346 case QEMU_OPTION_usb: 3347 qdict_put_str(machine_opts_dict, "usb", "on"); 3348 break; 3349 case QEMU_OPTION_usbdevice: 3350 qdict_put_str(machine_opts_dict, "usb", "on"); 3351 add_device_config(DEV_USB, optarg); 3352 break; 3353 case QEMU_OPTION_device: 3354 if (optarg[0] == '{') { 3355 QObject *obj = qobject_from_json(optarg, &error_fatal); 3356 DeviceOption *opt = g_new0(DeviceOption, 1); 3357 opt->opts = qobject_to(QDict, obj); 3358 loc_save(&opt->loc); 3359 assert(opt->opts != NULL); 3360 QTAILQ_INSERT_TAIL(&device_opts, opt, next); 3361 } else { 3362 if (!qemu_opts_parse_noisily(qemu_find_opts("device"), 3363 optarg, true)) { 3364 exit(1); 3365 } 3366 } 3367 break; 3368 case QEMU_OPTION_smp: 3369 machine_parse_property_opt(qemu_find_opts("smp-opts"), 3370 "smp", optarg); 3371 break; 3372 #ifdef CONFIG_VNC 3373 case QEMU_OPTION_vnc: 3374 vnc_parse(optarg); 3375 display_remote++; 3376 break; 3377 #endif 3378 case QEMU_OPTION_no_reboot: 3379 olist = qemu_find_opts("action"); 3380 qemu_opts_parse_noisily(olist, "reboot=shutdown", false); 3381 break; 3382 case QEMU_OPTION_no_shutdown: 3383 olist = qemu_find_opts("action"); 3384 qemu_opts_parse_noisily(olist, "shutdown=pause", false); 3385 break; 3386 case QEMU_OPTION_uuid: 3387 if (qemu_uuid_parse(optarg, &qemu_uuid) < 0) { 3388 error_report("failed to parse UUID string: wrong format"); 3389 exit(1); 3390 } 3391 qemu_uuid_set = true; 3392 break; 3393 case QEMU_OPTION_option_rom: 3394 if (nb_option_roms >= MAX_OPTION_ROMS) { 3395 error_report("too many option ROMs"); 3396 exit(1); 3397 } 3398 opts = qemu_opts_parse_noisily(qemu_find_opts("option-rom"), 3399 optarg, true); 3400 if (!opts) { 3401 exit(1); 3402 } 3403 option_rom[nb_option_roms].name = qemu_opt_get(opts, "romfile"); 3404 option_rom[nb_option_roms].bootindex = 3405 qemu_opt_get_number(opts, "bootindex", -1); 3406 if (!option_rom[nb_option_roms].name) { 3407 error_report("Option ROM file is not specified"); 3408 exit(1); 3409 } 3410 nb_option_roms++; 3411 break; 3412 case QEMU_OPTION_semihosting: 3413 qemu_semihosting_enable(); 3414 break; 3415 case QEMU_OPTION_semihosting_config: 3416 if (qemu_semihosting_config_options(optarg) != 0) { 3417 exit(1); 3418 } 3419 break; 3420 case QEMU_OPTION_name: 3421 opts = qemu_opts_parse_noisily(qemu_find_opts("name"), 3422 optarg, true); 3423 if (!opts) { 3424 exit(1); 3425 } 3426 /* Capture guest name if -msg guest-name is used later */ 3427 error_guest_name = qemu_opt_get(opts, "guest"); 3428 break; 3429 case QEMU_OPTION_prom_env: 3430 if (nb_prom_envs >= MAX_PROM_ENVS) { 3431 error_report("too many prom variables"); 3432 exit(1); 3433 } 3434 prom_envs[nb_prom_envs] = optarg; 3435 nb_prom_envs++; 3436 break; 3437 case QEMU_OPTION_old_param: 3438 old_param = 1; 3439 break; 3440 case QEMU_OPTION_rtc: 3441 opts = qemu_opts_parse_noisily(qemu_find_opts("rtc"), optarg, 3442 false); 3443 if (!opts) { 3444 exit(1); 3445 } 3446 break; 3447 case QEMU_OPTION_icount: 3448 icount_opts = qemu_opts_parse_noisily(qemu_find_opts("icount"), 3449 optarg, true); 3450 if (!icount_opts) { 3451 exit(1); 3452 } 3453 break; 3454 case QEMU_OPTION_incoming: 3455 if (!incoming) { 3456 runstate_set(RUN_STATE_INMIGRATE); 3457 } 3458 incoming = optarg; 3459 break; 3460 case QEMU_OPTION_only_migratable: 3461 only_migratable = 1; 3462 break; 3463 case QEMU_OPTION_nodefaults: 3464 has_defaults = 0; 3465 break; 3466 case QEMU_OPTION_xen_domid: 3467 if (!(accel_find("xen")) && !(accel_find("kvm"))) { 3468 error_report("Option not supported for this target"); 3469 exit(1); 3470 } 3471 xen_domid = atoi(optarg); 3472 break; 3473 case QEMU_OPTION_xen_attach: 3474 if (!(accel_find("xen"))) { 3475 error_report("Option not supported for this target"); 3476 exit(1); 3477 } 3478 xen_mode = XEN_ATTACH; 3479 break; 3480 case QEMU_OPTION_xen_domid_restrict: 3481 if (!(accel_find("xen"))) { 3482 error_report("Option not supported for this target"); 3483 exit(1); 3484 } 3485 xen_domid_restrict = true; 3486 break; 3487 case QEMU_OPTION_trace: 3488 trace_opt_parse(optarg); 3489 break; 3490 case QEMU_OPTION_plugin: 3491 qemu_plugin_opt_parse(optarg, &plugin_list); 3492 break; 3493 case QEMU_OPTION_readconfig: 3494 qemu_read_config_file(optarg, qemu_parse_config_group, &error_fatal); 3495 break; 3496 #ifdef CONFIG_SPICE 3497 case QEMU_OPTION_spice: 3498 opts = qemu_opts_parse_noisily(qemu_find_opts("spice"), optarg, false); 3499 if (!opts) { 3500 exit(1); 3501 } 3502 display_remote++; 3503 break; 3504 #endif 3505 case QEMU_OPTION_qtest: 3506 qtest_chrdev = optarg; 3507 break; 3508 case QEMU_OPTION_qtest_log: 3509 qtest_log = optarg; 3510 break; 3511 case QEMU_OPTION_sandbox: 3512 olist = qemu_find_opts("sandbox"); 3513 if (!olist) { 3514 #ifndef CONFIG_SECCOMP 3515 error_report("-sandbox support is not enabled " 3516 "in this QEMU binary"); 3517 #endif 3518 exit(1); 3519 } 3520 3521 opts = qemu_opts_parse_noisily(olist, optarg, true); 3522 if (!opts) { 3523 exit(1); 3524 } 3525 break; 3526 case QEMU_OPTION_add_fd: 3527 #ifndef _WIN32 3528 opts = qemu_opts_parse_noisily(qemu_find_opts("add-fd"), 3529 optarg, false); 3530 if (!opts) { 3531 exit(1); 3532 } 3533 #else 3534 error_report("File descriptor passing is disabled on this " 3535 "platform"); 3536 exit(1); 3537 #endif 3538 break; 3539 case QEMU_OPTION_object: 3540 object_option_parse(optarg); 3541 break; 3542 case QEMU_OPTION_overcommit: 3543 opts = qemu_opts_parse_noisily(qemu_find_opts("overcommit"), 3544 optarg, false); 3545 if (!opts) { 3546 exit(1); 3547 } 3548 enable_mlock = qemu_opt_get_bool(opts, "mem-lock", false); 3549 enable_cpu_pm = qemu_opt_get_bool(opts, "cpu-pm", false); 3550 break; 3551 case QEMU_OPTION_compat: 3552 { 3553 CompatPolicy *opts_policy; 3554 Visitor *v; 3555 3556 v = qobject_input_visitor_new_str(optarg, NULL, 3557 &error_fatal); 3558 3559 visit_type_CompatPolicy(v, NULL, &opts_policy, &error_fatal); 3560 QAPI_CLONE_MEMBERS(CompatPolicy, &compat_policy, opts_policy); 3561 3562 qapi_free_CompatPolicy(opts_policy); 3563 visit_free(v); 3564 break; 3565 } 3566 case QEMU_OPTION_msg: 3567 opts = qemu_opts_parse_noisily(qemu_find_opts("msg"), optarg, 3568 false); 3569 if (!opts) { 3570 exit(1); 3571 } 3572 configure_msg(opts); 3573 break; 3574 case QEMU_OPTION_dump_vmstate: 3575 if (vmstate_dump_file) { 3576 error_report("only one '-dump-vmstate' " 3577 "option may be given"); 3578 exit(1); 3579 } 3580 vmstate_dump_file = fopen(optarg, "w"); 3581 if (vmstate_dump_file == NULL) { 3582 error_report("open %s: %s", optarg, strerror(errno)); 3583 exit(1); 3584 } 3585 break; 3586 case QEMU_OPTION_enable_sync_profile: 3587 qsp_enable(); 3588 break; 3589 case QEMU_OPTION_nouserconfig: 3590 /* Nothing to be parsed here. Especially, do not error out below. */ 3591 break; 3592 #if defined(CONFIG_POSIX) 3593 case QEMU_OPTION_runas: 3594 warn_report("-runas is deprecated, use '-run-with user=...' instead"); 3595 if (!os_set_runas(optarg)) { 3596 error_report("User \"%s\" doesn't exist" 3597 " (and is not <uid>:<gid>)", 3598 optarg); 3599 exit(1); 3600 } 3601 break; 3602 case QEMU_OPTION_daemonize: 3603 os_set_daemonize(true); 3604 break; 3605 case QEMU_OPTION_run_with: { 3606 const char *str; 3607 opts = qemu_opts_parse_noisily(qemu_find_opts("run-with"), 3608 optarg, false); 3609 if (!opts) { 3610 exit(1); 3611 } 3612 #if defined(CONFIG_LINUX) 3613 if (qemu_opt_get_bool(opts, "async-teardown", false)) { 3614 init_async_teardown(); 3615 } 3616 #endif 3617 str = qemu_opt_get(opts, "chroot"); 3618 if (str) { 3619 os_set_chroot(str); 3620 } 3621 str = qemu_opt_get(opts, "user"); 3622 if (str) { 3623 if (!os_set_runas(str)) { 3624 error_report("User \"%s\" doesn't exist" 3625 " (and is not <uid>:<gid>)", 3626 optarg); 3627 exit(1); 3628 } 3629 } 3630 3631 break; 3632 } 3633 #endif /* CONFIG_POSIX */ 3634 3635 default: 3636 error_report("Option not supported in this build"); 3637 exit(1); 3638 } 3639 } 3640 } 3641 /* 3642 * Clear error location left behind by the loop. 3643 * Best done right after the loop. Do not insert code here! 3644 */ 3645 loc_set_none(); 3646 3647 qemu_validate_options(machine_opts_dict); 3648 qemu_process_sugar_options(); 3649 3650 /* 3651 * These options affect everything else and should be processed 3652 * before daemonizing. 3653 */ 3654 qemu_process_early_options(); 3655 3656 qemu_process_help_options(); 3657 qemu_maybe_daemonize(pid_file); 3658 3659 /* 3660 * The trace backend must be initialized after daemonizing. 3661 * trace_init_backends() will call st_init(), which will create the 3662 * trace thread in the parent, and also register st_flush_trace_buffer() 3663 * in atexit(). This function will force the parent to wait for the 3664 * writeout thread to finish, which will not occur, and the parent 3665 * process will be left in the host. 3666 */ 3667 if (!trace_init_backends()) { 3668 exit(1); 3669 } 3670 trace_init_file(); 3671 3672 qemu_init_main_loop(&error_fatal); 3673 cpu_timers_init(); 3674 3675 user_register_global_props(); 3676 replay_configure(icount_opts); 3677 3678 configure_rtc(qemu_find_opts_singleton("rtc")); 3679 3680 /* Transfer QemuOpts options into machine options */ 3681 parse_memory_options(); 3682 3683 qemu_create_machine(machine_opts_dict); 3684 3685 suspend_mux_open(); 3686 3687 qemu_disable_default_devices(); 3688 qemu_setup_display(); 3689 qemu_create_default_devices(); 3690 qemu_create_early_backends(); 3691 3692 qemu_apply_legacy_machine_options(machine_opts_dict); 3693 qemu_apply_machine_options(machine_opts_dict); 3694 qobject_unref(machine_opts_dict); 3695 phase_advance(PHASE_MACHINE_CREATED); 3696 3697 /* 3698 * Note: uses machine properties such as kernel-irqchip, must run 3699 * after qemu_apply_machine_options. 3700 */ 3701 configure_accelerators(argv[0]); 3702 phase_advance(PHASE_ACCEL_CREATED); 3703 3704 /* 3705 * Beware, QOM objects created before this point miss global and 3706 * compat properties. 3707 * 3708 * Global properties get set up by qdev_prop_register_global(), 3709 * called from user_register_global_props(), and certain option 3710 * desugaring. Also in CPU feature desugaring (buried in 3711 * parse_cpu_option()), which happens below this point, but may 3712 * only target the CPU type, which can only be created after 3713 * parse_cpu_option() returned the type. 3714 * 3715 * Machine compat properties: object_set_machine_compat_props(). 3716 * Accelerator compat props: object_set_accelerator_compat_props(), 3717 * called from do_configure_accelerator(). 3718 */ 3719 3720 machine_class = MACHINE_GET_CLASS(current_machine); 3721 if (!qtest_enabled() && machine_class->deprecation_reason) { 3722 warn_report("Machine type '%s' is deprecated: %s", 3723 machine_class->name, machine_class->deprecation_reason); 3724 } 3725 3726 /* 3727 * Create backends before creating migration objects, so that it can 3728 * check against compatibilities on the backend memories (e.g. postcopy 3729 * over memory-backend-file objects). 3730 */ 3731 qemu_create_late_backends(); 3732 phase_advance(PHASE_LATE_BACKENDS_CREATED); 3733 3734 /* 3735 * Note: creates a QOM object, must run only after global and 3736 * compat properties have been set up. 3737 */ 3738 migration_object_init(); 3739 3740 /* parse features once if machine provides default cpu_type */ 3741 current_machine->cpu_type = machine_class_default_cpu_type(machine_class); 3742 if (cpu_option) { 3743 current_machine->cpu_type = parse_cpu_option(cpu_option); 3744 } 3745 /* NB: for machine none cpu_type could STILL be NULL here! */ 3746 3747 qemu_resolve_machine_memdev(); 3748 parse_numa_opts(current_machine); 3749 3750 if (vmstate_dump_file) { 3751 /* dump and exit */ 3752 module_load_qom_all(); 3753 dump_vmstate_json_to_file(vmstate_dump_file); 3754 exit(0); 3755 } 3756 3757 if (!preconfig_requested) { 3758 qmp_x_exit_preconfig(&error_fatal); 3759 } 3760 qemu_init_displays(); 3761 accel_setup_post(current_machine); 3762 os_setup_post(); 3763 resume_mux_open(); 3764 } 3765