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