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