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