]> Git Repo - qemu.git/blob - vl.c
hmp: drop Error pointer indirection in hmp_handle_error
[qemu.git] / vl.c
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-common.h"
27 #include "qemu/units.h"
28 #include "hw/qdev-properties.h"
29 #include "qapi/error.h"
30 #include "qemu-version.h"
31 #include "qemu/cutils.h"
32 #include "qemu/help_option.h"
33 #include "qemu/uuid.h"
34 #include "sysemu/reset.h"
35 #include "sysemu/runstate.h"
36 #include "sysemu/seccomp.h"
37 #include "sysemu/tcg.h"
38
39 #ifdef CONFIG_SDL
40 #if defined(__APPLE__) || defined(main)
41 #include <SDL.h>
42 int qemu_main(int argc, char **argv, char **envp);
43 int main(int argc, char **argv)
44 {
45     return qemu_main(argc, argv, NULL);
46 }
47 #undef main
48 #define main qemu_main
49 #endif
50 #endif /* CONFIG_SDL */
51
52 #ifdef CONFIG_COCOA
53 #undef main
54 #define main qemu_main
55 #endif /* CONFIG_COCOA */
56
57
58 #include "qemu/error-report.h"
59 #include "qemu/sockets.h"
60 #include "sysemu/accel.h"
61 #include "hw/usb.h"
62 #include "hw/isa/isa.h"
63 #include "hw/scsi/scsi.h"
64 #include "hw/display/vga.h"
65 #include "sysemu/watchdog.h"
66 #include "hw/firmware/smbios.h"
67 #include "hw/acpi/acpi.h"
68 #include "hw/xen/xen.h"
69 #include "hw/loader.h"
70 #include "monitor/qdev.h"
71 #include "net/net.h"
72 #include "net/slirp.h"
73 #include "monitor/monitor.h"
74 #include "ui/console.h"
75 #include "ui/input.h"
76 #include "sysemu/sysemu.h"
77 #include "sysemu/numa.h"
78 #include "exec/gdbstub.h"
79 #include "qemu/timer.h"
80 #include "chardev/char.h"
81 #include "qemu/bitmap.h"
82 #include "qemu/log.h"
83 #include "sysemu/blockdev.h"
84 #include "hw/block/block.h"
85 #include "migration/misc.h"
86 #include "migration/snapshot.h"
87 #include "migration/global_state.h"
88 #include "sysemu/tpm.h"
89 #include "sysemu/dma.h"
90 #include "hw/audio/soundhw.h"
91 #include "audio/audio.h"
92 #include "sysemu/cpus.h"
93 #include "migration/colo.h"
94 #include "migration/postcopy-ram.h"
95 #include "sysemu/kvm.h"
96 #include "sysemu/hax.h"
97 #include "qapi/qobject-input-visitor.h"
98 #include "qemu/option.h"
99 #include "qemu/config-file.h"
100 #include "qemu-options.h"
101 #include "qemu/main-loop.h"
102 #ifdef CONFIG_VIRTFS
103 #include "fsdev/qemu-fsdev.h"
104 #endif
105 #include "sysemu/qtest.h"
106
107 #include "disas/disas.h"
108
109 #include "trace-root.h"
110 #include "trace/control.h"
111 #include "qemu/plugin.h"
112 #include "qemu/queue.h"
113 #include "sysemu/arch_init.h"
114
115 #include "ui/qemu-spice.h"
116 #include "qapi/string-input-visitor.h"
117 #include "qapi/opts-visitor.h"
118 #include "qapi/clone-visitor.h"
119 #include "qom/object_interfaces.h"
120 #include "hw/semihosting/semihost.h"
121 #include "crypto/init.h"
122 #include "sysemu/replay.h"
123 #include "qapi/qapi-events-run-state.h"
124 #include "qapi/qapi-visit-block-core.h"
125 #include "qapi/qapi-visit-ui.h"
126 #include "qapi/qapi-commands-block-core.h"
127 #include "qapi/qapi-commands-run-state.h"
128 #include "qapi/qapi-commands-ui.h"
129 #include "qapi/qmp/qerror.h"
130 #include "sysemu/iothread.h"
131 #include "qemu/guest-random.h"
132
133 #define MAX_VIRTIO_CONSOLES 1
134
135 static const char *data_dir[16];
136 static int data_dir_idx;
137 const char *bios_name = NULL;
138 enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB;
139 int display_opengl;
140 const char* keyboard_layout = NULL;
141 ram_addr_t ram_size;
142 const char *mem_path = NULL;
143 int mem_prealloc = 0; /* force preallocation of physical target memory */
144 bool enable_mlock = false;
145 bool enable_cpu_pm = false;
146 int nb_nics;
147 NICInfo nd_table[MAX_NICS];
148 int autostart;
149 static enum {
150     RTC_BASE_UTC,
151     RTC_BASE_LOCALTIME,
152     RTC_BASE_DATETIME,
153 } rtc_base_type = RTC_BASE_UTC;
154 static time_t rtc_ref_start_datetime;
155 static int rtc_realtime_clock_offset; /* used only with QEMU_CLOCK_REALTIME */
156 static int rtc_host_datetime_offset = -1; /* valid & used only with
157                                              RTC_BASE_DATETIME */
158 QEMUClockType rtc_clock;
159 int vga_interface_type = VGA_NONE;
160 static DisplayOptions dpy;
161 static int num_serial_hds;
162 static Chardev **serial_hds;
163 Chardev *parallel_hds[MAX_PARALLEL_PORTS];
164 int win2k_install_hack = 0;
165 int singlestep = 0;
166 int acpi_enabled = 1;
167 int no_hpet = 0;
168 int fd_bootchk = 1;
169 static int no_reboot;
170 int no_shutdown = 0;
171 int cursor_hide = 1;
172 int graphic_rotate = 0;
173 const char *watchdog;
174 QEMUOptionRom option_rom[MAX_OPTION_ROMS];
175 int nb_option_roms;
176 int old_param = 0;
177 const char *qemu_name;
178 int alt_grab = 0;
179 int ctrl_grab = 0;
180 unsigned int nb_prom_envs = 0;
181 const char *prom_envs[MAX_PROM_ENVS];
182 int boot_menu;
183 bool boot_strict;
184 uint8_t *boot_splash_filedata;
185 int only_migratable; /* turn it off unless user states otherwise */
186 bool wakeup_suspend_enabled;
187
188 int icount_align_option;
189
190 /* The bytes in qemu_uuid are in the order specified by RFC4122, _not_ in the
191  * little-endian "wire format" described in the SMBIOS 2.6 specification.
192  */
193 QemuUUID qemu_uuid;
194 bool qemu_uuid_set;
195
196 static NotifierList exit_notifiers =
197     NOTIFIER_LIST_INITIALIZER(exit_notifiers);
198
199 static NotifierList machine_init_done_notifiers =
200     NOTIFIER_LIST_INITIALIZER(machine_init_done_notifiers);
201
202 bool xen_allowed;
203 uint32_t xen_domid;
204 enum xen_mode xen_mode = XEN_EMULATE;
205 bool xen_domid_restrict;
206
207 static int has_defaults = 1;
208 static int default_serial = 1;
209 static int default_parallel = 1;
210 static int default_monitor = 1;
211 static int default_floppy = 1;
212 static int default_cdrom = 1;
213 static int default_sdcard = 1;
214 static int default_vga = 1;
215 static int default_net = 1;
216
217 static struct {
218     const char *driver;
219     int *flag;
220 } default_list[] = {
221     { .driver = "isa-serial",           .flag = &default_serial    },
222     { .driver = "isa-parallel",         .flag = &default_parallel  },
223     { .driver = "isa-fdc",              .flag = &default_floppy    },
224     { .driver = "floppy",               .flag = &default_floppy    },
225     { .driver = "ide-cd",               .flag = &default_cdrom     },
226     { .driver = "ide-hd",               .flag = &default_cdrom     },
227     { .driver = "ide-drive",            .flag = &default_cdrom     },
228     { .driver = "scsi-cd",              .flag = &default_cdrom     },
229     { .driver = "scsi-hd",              .flag = &default_cdrom     },
230     { .driver = "VGA",                  .flag = &default_vga       },
231     { .driver = "isa-vga",              .flag = &default_vga       },
232     { .driver = "cirrus-vga",           .flag = &default_vga       },
233     { .driver = "isa-cirrus-vga",       .flag = &default_vga       },
234     { .driver = "vmware-svga",          .flag = &default_vga       },
235     { .driver = "qxl-vga",              .flag = &default_vga       },
236     { .driver = "virtio-vga",           .flag = &default_vga       },
237     { .driver = "ati-vga",              .flag = &default_vga       },
238     { .driver = "vhost-user-vga",       .flag = &default_vga       },
239 };
240
241 static QemuOptsList qemu_rtc_opts = {
242     .name = "rtc",
243     .head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head),
244     .merge_lists = true,
245     .desc = {
246         {
247             .name = "base",
248             .type = QEMU_OPT_STRING,
249         },{
250             .name = "clock",
251             .type = QEMU_OPT_STRING,
252         },{
253             .name = "driftfix",
254             .type = QEMU_OPT_STRING,
255         },
256         { /* end of list */ }
257     },
258 };
259
260 static QemuOptsList qemu_option_rom_opts = {
261     .name = "option-rom",
262     .implied_opt_name = "romfile",
263     .head = QTAILQ_HEAD_INITIALIZER(qemu_option_rom_opts.head),
264     .desc = {
265         {
266             .name = "bootindex",
267             .type = QEMU_OPT_NUMBER,
268         }, {
269             .name = "romfile",
270             .type = QEMU_OPT_STRING,
271         },
272         { /* end of list */ }
273     },
274 };
275
276 static QemuOptsList qemu_machine_opts = {
277     .name = "machine",
278     .implied_opt_name = "type",
279     .merge_lists = true,
280     .head = QTAILQ_HEAD_INITIALIZER(qemu_machine_opts.head),
281     .desc = {
282         /*
283          * no elements => accept any
284          * sanity checking will happen later
285          * when setting machine properties
286          */
287         { }
288     },
289 };
290
291 static QemuOptsList qemu_accel_opts = {
292     .name = "accel",
293     .implied_opt_name = "accel",
294     .head = QTAILQ_HEAD_INITIALIZER(qemu_accel_opts.head),
295     .merge_lists = true,
296     .desc = {
297         {
298             .name = "accel",
299             .type = QEMU_OPT_STRING,
300             .help = "Select the type of accelerator",
301         },
302         {
303             .name = "thread",
304             .type = QEMU_OPT_STRING,
305             .help = "Enable/disable multi-threaded TCG",
306         },
307         { /* end of list */ }
308     },
309 };
310
311 static QemuOptsList qemu_boot_opts = {
312     .name = "boot-opts",
313     .implied_opt_name = "order",
314     .merge_lists = true,
315     .head = QTAILQ_HEAD_INITIALIZER(qemu_boot_opts.head),
316     .desc = {
317         {
318             .name = "order",
319             .type = QEMU_OPT_STRING,
320         }, {
321             .name = "once",
322             .type = QEMU_OPT_STRING,
323         }, {
324             .name = "menu",
325             .type = QEMU_OPT_BOOL,
326         }, {
327             .name = "splash",
328             .type = QEMU_OPT_STRING,
329         }, {
330             .name = "splash-time",
331             .type = QEMU_OPT_NUMBER,
332         }, {
333             .name = "reboot-timeout",
334             .type = QEMU_OPT_NUMBER,
335         }, {
336             .name = "strict",
337             .type = QEMU_OPT_BOOL,
338         },
339         { /*End of list */ }
340     },
341 };
342
343 static QemuOptsList qemu_add_fd_opts = {
344     .name = "add-fd",
345     .head = QTAILQ_HEAD_INITIALIZER(qemu_add_fd_opts.head),
346     .desc = {
347         {
348             .name = "fd",
349             .type = QEMU_OPT_NUMBER,
350             .help = "file descriptor of which a duplicate is added to fd set",
351         },{
352             .name = "set",
353             .type = QEMU_OPT_NUMBER,
354             .help = "ID of the fd set to add fd to",
355         },{
356             .name = "opaque",
357             .type = QEMU_OPT_STRING,
358             .help = "free-form string used to describe fd",
359         },
360         { /* end of list */ }
361     },
362 };
363
364 static QemuOptsList qemu_object_opts = {
365     .name = "object",
366     .implied_opt_name = "qom-type",
367     .head = QTAILQ_HEAD_INITIALIZER(qemu_object_opts.head),
368     .desc = {
369         { }
370     },
371 };
372
373 static QemuOptsList qemu_tpmdev_opts = {
374     .name = "tpmdev",
375     .implied_opt_name = "type",
376     .head = QTAILQ_HEAD_INITIALIZER(qemu_tpmdev_opts.head),
377     .desc = {
378         /* options are defined in the TPM backends */
379         { /* end of list */ }
380     },
381 };
382
383 static QemuOptsList qemu_realtime_opts = {
384     .name = "realtime",
385     .head = QTAILQ_HEAD_INITIALIZER(qemu_realtime_opts.head),
386     .desc = {
387         {
388             .name = "mlock",
389             .type = QEMU_OPT_BOOL,
390         },
391         { /* end of list */ }
392     },
393 };
394
395 static QemuOptsList qemu_overcommit_opts = {
396     .name = "overcommit",
397     .head = QTAILQ_HEAD_INITIALIZER(qemu_overcommit_opts.head),
398     .desc = {
399         {
400             .name = "mem-lock",
401             .type = QEMU_OPT_BOOL,
402         },
403         {
404             .name = "cpu-pm",
405             .type = QEMU_OPT_BOOL,
406         },
407         { /* end of list */ }
408     },
409 };
410
411 static QemuOptsList qemu_msg_opts = {
412     .name = "msg",
413     .head = QTAILQ_HEAD_INITIALIZER(qemu_msg_opts.head),
414     .desc = {
415         {
416             .name = "timestamp",
417             .type = QEMU_OPT_BOOL,
418         },
419         { /* end of list */ }
420     },
421 };
422
423 static QemuOptsList qemu_name_opts = {
424     .name = "name",
425     .implied_opt_name = "guest",
426     .merge_lists = true,
427     .head = QTAILQ_HEAD_INITIALIZER(qemu_name_opts.head),
428     .desc = {
429         {
430             .name = "guest",
431             .type = QEMU_OPT_STRING,
432             .help = "Sets the name of the guest.\n"
433                     "This name will be displayed in the SDL window caption.\n"
434                     "The name will also be used for the VNC server",
435         }, {
436             .name = "process",
437             .type = QEMU_OPT_STRING,
438             .help = "Sets the name of the QEMU process, as shown in top etc",
439         }, {
440             .name = "debug-threads",
441             .type = QEMU_OPT_BOOL,
442             .help = "When enabled, name the individual threads; defaults off.\n"
443                     "NOTE: The thread names are for debugging and not a\n"
444                     "stable API.",
445         },
446         { /* End of list */ }
447     },
448 };
449
450 static QemuOptsList qemu_mem_opts = {
451     .name = "memory",
452     .implied_opt_name = "size",
453     .head = QTAILQ_HEAD_INITIALIZER(qemu_mem_opts.head),
454     .merge_lists = true,
455     .desc = {
456         {
457             .name = "size",
458             .type = QEMU_OPT_SIZE,
459         },
460         {
461             .name = "slots",
462             .type = QEMU_OPT_NUMBER,
463         },
464         {
465             .name = "maxmem",
466             .type = QEMU_OPT_SIZE,
467         },
468         { /* end of list */ }
469     },
470 };
471
472 static QemuOptsList qemu_icount_opts = {
473     .name = "icount",
474     .implied_opt_name = "shift",
475     .merge_lists = true,
476     .head = QTAILQ_HEAD_INITIALIZER(qemu_icount_opts.head),
477     .desc = {
478         {
479             .name = "shift",
480             .type = QEMU_OPT_STRING,
481         }, {
482             .name = "align",
483             .type = QEMU_OPT_BOOL,
484         }, {
485             .name = "sleep",
486             .type = QEMU_OPT_BOOL,
487         }, {
488             .name = "rr",
489             .type = QEMU_OPT_STRING,
490         }, {
491             .name = "rrfile",
492             .type = QEMU_OPT_STRING,
493         }, {
494             .name = "rrsnapshot",
495             .type = QEMU_OPT_STRING,
496         },
497         { /* end of list */ }
498     },
499 };
500
501 static QemuOptsList qemu_fw_cfg_opts = {
502     .name = "fw_cfg",
503     .implied_opt_name = "name",
504     .head = QTAILQ_HEAD_INITIALIZER(qemu_fw_cfg_opts.head),
505     .desc = {
506         {
507             .name = "name",
508             .type = QEMU_OPT_STRING,
509             .help = "Sets the fw_cfg name of the blob to be inserted",
510         }, {
511             .name = "file",
512             .type = QEMU_OPT_STRING,
513             .help = "Sets the name of the file from which "
514                     "the fw_cfg blob will be loaded",
515         }, {
516             .name = "string",
517             .type = QEMU_OPT_STRING,
518             .help = "Sets content of the blob to be inserted from a string",
519         },
520         { /* end of list */ }
521     },
522 };
523
524 /**
525  * Get machine options
526  *
527  * Returns: machine options (never null).
528  */
529 QemuOpts *qemu_get_machine_opts(void)
530 {
531     return qemu_find_opts_singleton("machine");
532 }
533
534 const char *qemu_get_vm_name(void)
535 {
536     return qemu_name;
537 }
538
539 static void res_free(void)
540 {
541     g_free(boot_splash_filedata);
542     boot_splash_filedata = NULL;
543 }
544
545 static int default_driver_check(void *opaque, QemuOpts *opts, Error **errp)
546 {
547     const char *driver = qemu_opt_get(opts, "driver");
548     int i;
549
550     if (!driver)
551         return 0;
552     for (i = 0; i < ARRAY_SIZE(default_list); i++) {
553         if (strcmp(default_list[i].driver, driver) != 0)
554             continue;
555         *(default_list[i].flag) = 0;
556     }
557     return 0;
558 }
559
560 /***********************************************************/
561 /* QEMU state */
562
563 static RunState current_run_state = RUN_STATE_PRECONFIG;
564
565 /* We use RUN_STATE__MAX but any invalid value will do */
566 static RunState vmstop_requested = RUN_STATE__MAX;
567 static QemuMutex vmstop_lock;
568
569 typedef struct {
570     RunState from;
571     RunState to;
572 } RunStateTransition;
573
574 static const RunStateTransition runstate_transitions_def[] = {
575     /*     from      ->     to      */
576     { RUN_STATE_PRECONFIG, RUN_STATE_PRELAUNCH },
577       /* Early switch to inmigrate state to allow  -incoming CLI option work
578        * as it used to. TODO: delay actual switching to inmigrate state to
579        * the point after machine is built and remove this hack.
580        */
581     { RUN_STATE_PRECONFIG, RUN_STATE_INMIGRATE },
582
583     { RUN_STATE_DEBUG, RUN_STATE_RUNNING },
584     { RUN_STATE_DEBUG, RUN_STATE_FINISH_MIGRATE },
585     { RUN_STATE_DEBUG, RUN_STATE_PRELAUNCH },
586
587     { RUN_STATE_INMIGRATE, RUN_STATE_INTERNAL_ERROR },
588     { RUN_STATE_INMIGRATE, RUN_STATE_IO_ERROR },
589     { RUN_STATE_INMIGRATE, RUN_STATE_PAUSED },
590     { RUN_STATE_INMIGRATE, RUN_STATE_RUNNING },
591     { RUN_STATE_INMIGRATE, RUN_STATE_SHUTDOWN },
592     { RUN_STATE_INMIGRATE, RUN_STATE_SUSPENDED },
593     { RUN_STATE_INMIGRATE, RUN_STATE_WATCHDOG },
594     { RUN_STATE_INMIGRATE, RUN_STATE_GUEST_PANICKED },
595     { RUN_STATE_INMIGRATE, RUN_STATE_FINISH_MIGRATE },
596     { RUN_STATE_INMIGRATE, RUN_STATE_PRELAUNCH },
597     { RUN_STATE_INMIGRATE, RUN_STATE_POSTMIGRATE },
598     { RUN_STATE_INMIGRATE, RUN_STATE_COLO },
599
600     { RUN_STATE_INTERNAL_ERROR, RUN_STATE_PAUSED },
601     { RUN_STATE_INTERNAL_ERROR, RUN_STATE_FINISH_MIGRATE },
602     { RUN_STATE_INTERNAL_ERROR, RUN_STATE_PRELAUNCH },
603
604     { RUN_STATE_IO_ERROR, RUN_STATE_RUNNING },
605     { RUN_STATE_IO_ERROR, RUN_STATE_FINISH_MIGRATE },
606     { RUN_STATE_IO_ERROR, RUN_STATE_PRELAUNCH },
607
608     { RUN_STATE_PAUSED, RUN_STATE_RUNNING },
609     { RUN_STATE_PAUSED, RUN_STATE_FINISH_MIGRATE },
610     { RUN_STATE_PAUSED, RUN_STATE_POSTMIGRATE },
611     { RUN_STATE_PAUSED, RUN_STATE_PRELAUNCH },
612     { RUN_STATE_PAUSED, RUN_STATE_COLO},
613
614     { RUN_STATE_POSTMIGRATE, RUN_STATE_RUNNING },
615     { RUN_STATE_POSTMIGRATE, RUN_STATE_FINISH_MIGRATE },
616     { RUN_STATE_POSTMIGRATE, RUN_STATE_PRELAUNCH },
617
618     { RUN_STATE_PRELAUNCH, RUN_STATE_RUNNING },
619     { RUN_STATE_PRELAUNCH, RUN_STATE_FINISH_MIGRATE },
620     { RUN_STATE_PRELAUNCH, RUN_STATE_INMIGRATE },
621
622     { RUN_STATE_FINISH_MIGRATE, RUN_STATE_RUNNING },
623     { RUN_STATE_FINISH_MIGRATE, RUN_STATE_PAUSED },
624     { RUN_STATE_FINISH_MIGRATE, RUN_STATE_POSTMIGRATE },
625     { RUN_STATE_FINISH_MIGRATE, RUN_STATE_PRELAUNCH },
626     { RUN_STATE_FINISH_MIGRATE, RUN_STATE_COLO},
627
628     { RUN_STATE_RESTORE_VM, RUN_STATE_RUNNING },
629     { RUN_STATE_RESTORE_VM, RUN_STATE_PRELAUNCH },
630
631     { RUN_STATE_COLO, RUN_STATE_RUNNING },
632
633     { RUN_STATE_RUNNING, RUN_STATE_DEBUG },
634     { RUN_STATE_RUNNING, RUN_STATE_INTERNAL_ERROR },
635     { RUN_STATE_RUNNING, RUN_STATE_IO_ERROR },
636     { RUN_STATE_RUNNING, RUN_STATE_PAUSED },
637     { RUN_STATE_RUNNING, RUN_STATE_FINISH_MIGRATE },
638     { RUN_STATE_RUNNING, RUN_STATE_RESTORE_VM },
639     { RUN_STATE_RUNNING, RUN_STATE_SAVE_VM },
640     { RUN_STATE_RUNNING, RUN_STATE_SHUTDOWN },
641     { RUN_STATE_RUNNING, RUN_STATE_WATCHDOG },
642     { RUN_STATE_RUNNING, RUN_STATE_GUEST_PANICKED },
643     { RUN_STATE_RUNNING, RUN_STATE_COLO},
644
645     { RUN_STATE_SAVE_VM, RUN_STATE_RUNNING },
646
647     { RUN_STATE_SHUTDOWN, RUN_STATE_PAUSED },
648     { RUN_STATE_SHUTDOWN, RUN_STATE_FINISH_MIGRATE },
649     { RUN_STATE_SHUTDOWN, RUN_STATE_PRELAUNCH },
650
651     { RUN_STATE_DEBUG, RUN_STATE_SUSPENDED },
652     { RUN_STATE_RUNNING, RUN_STATE_SUSPENDED },
653     { RUN_STATE_SUSPENDED, RUN_STATE_RUNNING },
654     { RUN_STATE_SUSPENDED, RUN_STATE_FINISH_MIGRATE },
655     { RUN_STATE_SUSPENDED, RUN_STATE_PRELAUNCH },
656     { RUN_STATE_SUSPENDED, RUN_STATE_COLO},
657
658     { RUN_STATE_WATCHDOG, RUN_STATE_RUNNING },
659     { RUN_STATE_WATCHDOG, RUN_STATE_FINISH_MIGRATE },
660     { RUN_STATE_WATCHDOG, RUN_STATE_PRELAUNCH },
661     { RUN_STATE_WATCHDOG, RUN_STATE_COLO},
662
663     { RUN_STATE_GUEST_PANICKED, RUN_STATE_RUNNING },
664     { RUN_STATE_GUEST_PANICKED, RUN_STATE_FINISH_MIGRATE },
665     { RUN_STATE_GUEST_PANICKED, RUN_STATE_PRELAUNCH },
666
667     { RUN_STATE__MAX, RUN_STATE__MAX },
668 };
669
670 static bool runstate_valid_transitions[RUN_STATE__MAX][RUN_STATE__MAX];
671
672 bool runstate_check(RunState state)
673 {
674     return current_run_state == state;
675 }
676
677 bool runstate_store(char *str, size_t size)
678 {
679     const char *state = RunState_str(current_run_state);
680     size_t len = strlen(state) + 1;
681
682     if (len > size) {
683         return false;
684     }
685     memcpy(str, state, len);
686     return true;
687 }
688
689 static void runstate_init(void)
690 {
691     const RunStateTransition *p;
692
693     memset(&runstate_valid_transitions, 0, sizeof(runstate_valid_transitions));
694     for (p = &runstate_transitions_def[0]; p->from != RUN_STATE__MAX; p++) {
695         runstate_valid_transitions[p->from][p->to] = true;
696     }
697
698     qemu_mutex_init(&vmstop_lock);
699 }
700
701 /* This function will abort() on invalid state transitions */
702 void runstate_set(RunState new_state)
703 {
704     assert(new_state < RUN_STATE__MAX);
705
706     trace_runstate_set(current_run_state, RunState_str(current_run_state),
707                        new_state, RunState_str(new_state));
708
709     if (current_run_state == new_state) {
710         return;
711     }
712
713     if (!runstate_valid_transitions[current_run_state][new_state]) {
714         error_report("invalid runstate transition: '%s' -> '%s'",
715                      RunState_str(current_run_state),
716                      RunState_str(new_state));
717         abort();
718     }
719
720     current_run_state = new_state;
721 }
722
723 int runstate_is_running(void)
724 {
725     return runstate_check(RUN_STATE_RUNNING);
726 }
727
728 bool runstate_needs_reset(void)
729 {
730     return runstate_check(RUN_STATE_INTERNAL_ERROR) ||
731         runstate_check(RUN_STATE_SHUTDOWN);
732 }
733
734 StatusInfo *qmp_query_status(Error **errp)
735 {
736     StatusInfo *info = g_malloc0(sizeof(*info));
737
738     info->running = runstate_is_running();
739     info->singlestep = singlestep;
740     info->status = current_run_state;
741
742     return info;
743 }
744
745 bool qemu_vmstop_requested(RunState *r)
746 {
747     qemu_mutex_lock(&vmstop_lock);
748     *r = vmstop_requested;
749     vmstop_requested = RUN_STATE__MAX;
750     qemu_mutex_unlock(&vmstop_lock);
751     return *r < RUN_STATE__MAX;
752 }
753
754 void qemu_system_vmstop_request_prepare(void)
755 {
756     qemu_mutex_lock(&vmstop_lock);
757 }
758
759 void qemu_system_vmstop_request(RunState state)
760 {
761     vmstop_requested = state;
762     qemu_mutex_unlock(&vmstop_lock);
763     qemu_notify_event();
764 }
765
766 /***********************************************************/
767 /* RTC reference time/date access */
768 static time_t qemu_ref_timedate(QEMUClockType clock)
769 {
770     time_t value = qemu_clock_get_ms(clock) / 1000;
771     switch (clock) {
772     case QEMU_CLOCK_REALTIME:
773         value -= rtc_realtime_clock_offset;
774         /* fall through */
775     case QEMU_CLOCK_VIRTUAL:
776         value += rtc_ref_start_datetime;
777         break;
778     case QEMU_CLOCK_HOST:
779         if (rtc_base_type == RTC_BASE_DATETIME) {
780             value -= rtc_host_datetime_offset;
781         }
782         break;
783     default:
784         assert(0);
785     }
786     return value;
787 }
788
789 void qemu_get_timedate(struct tm *tm, int offset)
790 {
791     time_t ti = qemu_ref_timedate(rtc_clock);
792
793     ti += offset;
794
795     switch (rtc_base_type) {
796     case RTC_BASE_DATETIME:
797     case RTC_BASE_UTC:
798         gmtime_r(&ti, tm);
799         break;
800     case RTC_BASE_LOCALTIME:
801         localtime_r(&ti, tm);
802         break;
803     }
804 }
805
806 int qemu_timedate_diff(struct tm *tm)
807 {
808     time_t seconds;
809
810     switch (rtc_base_type) {
811     case RTC_BASE_DATETIME:
812     case RTC_BASE_UTC:
813         seconds = mktimegm(tm);
814         break;
815     case RTC_BASE_LOCALTIME:
816     {
817         struct tm tmp = *tm;
818         tmp.tm_isdst = -1; /* use timezone to figure it out */
819         seconds = mktime(&tmp);
820         break;
821     }
822     default:
823         abort();
824     }
825
826     return seconds - qemu_ref_timedate(QEMU_CLOCK_HOST);
827 }
828
829 static void configure_rtc_base_datetime(const char *startdate)
830 {
831     time_t rtc_start_datetime;
832     struct tm tm;
833
834     if (sscanf(startdate, "%d-%d-%dT%d:%d:%d", &tm.tm_year, &tm.tm_mon,
835                &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec) == 6) {
836         /* OK */
837     } else if (sscanf(startdate, "%d-%d-%d",
838                       &tm.tm_year, &tm.tm_mon, &tm.tm_mday) == 3) {
839         tm.tm_hour = 0;
840         tm.tm_min = 0;
841         tm.tm_sec = 0;
842     } else {
843         goto date_fail;
844     }
845     tm.tm_year -= 1900;
846     tm.tm_mon--;
847     rtc_start_datetime = mktimegm(&tm);
848     if (rtc_start_datetime == -1) {
849     date_fail:
850         error_report("invalid datetime format");
851         error_printf("valid formats: "
852                      "'2006-06-17T16:01:21' or '2006-06-17'\n");
853         exit(1);
854     }
855     rtc_host_datetime_offset = rtc_ref_start_datetime - rtc_start_datetime;
856     rtc_ref_start_datetime = rtc_start_datetime;
857 }
858
859 static void configure_rtc(QemuOpts *opts)
860 {
861     const char *value;
862
863     /* Set defaults */
864     rtc_clock = QEMU_CLOCK_HOST;
865     rtc_ref_start_datetime = qemu_clock_get_ms(QEMU_CLOCK_HOST) / 1000;
866     rtc_realtime_clock_offset = qemu_clock_get_ms(QEMU_CLOCK_REALTIME) / 1000;
867
868     value = qemu_opt_get(opts, "base");
869     if (value) {
870         if (!strcmp(value, "utc")) {
871             rtc_base_type = RTC_BASE_UTC;
872         } else if (!strcmp(value, "localtime")) {
873             Error *blocker = NULL;
874             rtc_base_type = RTC_BASE_LOCALTIME;
875             error_setg(&blocker, QERR_REPLAY_NOT_SUPPORTED,
876                       "-rtc base=localtime");
877             replay_add_blocker(blocker);
878         } else {
879             rtc_base_type = RTC_BASE_DATETIME;
880             configure_rtc_base_datetime(value);
881         }
882     }
883     value = qemu_opt_get(opts, "clock");
884     if (value) {
885         if (!strcmp(value, "host")) {
886             rtc_clock = QEMU_CLOCK_HOST;
887         } else if (!strcmp(value, "rt")) {
888             rtc_clock = QEMU_CLOCK_REALTIME;
889         } else if (!strcmp(value, "vm")) {
890             rtc_clock = QEMU_CLOCK_VIRTUAL;
891         } else {
892             error_report("invalid option value '%s'", value);
893             exit(1);
894         }
895     }
896     value = qemu_opt_get(opts, "driftfix");
897     if (value) {
898         if (!strcmp(value, "slew")) {
899             static GlobalProperty slew_lost_ticks = {
900                 .driver   = "mc146818rtc",
901                 .property = "lost_tick_policy",
902                 .value    = "slew",
903             };
904
905             qdev_prop_register_global(&slew_lost_ticks);
906         } else if (!strcmp(value, "none")) {
907             /* discard is default */
908         } else {
909             error_report("invalid option value '%s'", value);
910             exit(1);
911         }
912     }
913 }
914
915 static int parse_name(void *opaque, QemuOpts *opts, Error **errp)
916 {
917     const char *proc_name;
918
919     if (qemu_opt_get(opts, "debug-threads")) {
920         qemu_thread_naming(qemu_opt_get_bool(opts, "debug-threads", false));
921     }
922     qemu_name = qemu_opt_get(opts, "guest");
923
924     proc_name = qemu_opt_get(opts, "process");
925     if (proc_name) {
926         os_set_proc_name(proc_name);
927     }
928
929     return 0;
930 }
931
932 bool defaults_enabled(void)
933 {
934     return has_defaults;
935 }
936
937 #ifndef _WIN32
938 static int parse_add_fd(void *opaque, QemuOpts *opts, Error **errp)
939 {
940     int fd, dupfd, flags;
941     int64_t fdset_id;
942     const char *fd_opaque = NULL;
943     AddfdInfo *fdinfo;
944
945     fd = qemu_opt_get_number(opts, "fd", -1);
946     fdset_id = qemu_opt_get_number(opts, "set", -1);
947     fd_opaque = qemu_opt_get(opts, "opaque");
948
949     if (fd < 0) {
950         error_setg(errp, "fd option is required and must be non-negative");
951         return -1;
952     }
953
954     if (fd <= STDERR_FILENO) {
955         error_setg(errp, "fd cannot be a standard I/O stream");
956         return -1;
957     }
958
959     /*
960      * All fds inherited across exec() necessarily have FD_CLOEXEC
961      * clear, while qemu sets FD_CLOEXEC on all other fds used internally.
962      */
963     flags = fcntl(fd, F_GETFD);
964     if (flags == -1 || (flags & FD_CLOEXEC)) {
965         error_setg(errp, "fd is not valid or already in use");
966         return -1;
967     }
968
969     if (fdset_id < 0) {
970         error_setg(errp, "set option is required and must be non-negative");
971         return -1;
972     }
973
974 #ifdef F_DUPFD_CLOEXEC
975     dupfd = fcntl(fd, F_DUPFD_CLOEXEC, 0);
976 #else
977     dupfd = dup(fd);
978     if (dupfd != -1) {
979         qemu_set_cloexec(dupfd);
980     }
981 #endif
982     if (dupfd == -1) {
983         error_setg(errp, "error duplicating fd: %s", strerror(errno));
984         return -1;
985     }
986
987     /* add the duplicate fd, and optionally the opaque string, to the fd set */
988     fdinfo = monitor_fdset_add_fd(dupfd, true, fdset_id, !!fd_opaque, fd_opaque,
989                                   &error_abort);
990     g_free(fdinfo);
991
992     return 0;
993 }
994
995 static int cleanup_add_fd(void *opaque, QemuOpts *opts, Error **errp)
996 {
997     int fd;
998
999     fd = qemu_opt_get_number(opts, "fd", -1);
1000     close(fd);
1001
1002     return 0;
1003 }
1004 #endif
1005
1006 /***********************************************************/
1007 /* QEMU Block devices */
1008
1009 #define HD_OPTS "media=disk"
1010 #define CDROM_OPTS "media=cdrom"
1011 #define FD_OPTS ""
1012 #define PFLASH_OPTS ""
1013 #define MTD_OPTS ""
1014 #define SD_OPTS ""
1015
1016 static int drive_init_func(void *opaque, QemuOpts *opts, Error **errp)
1017 {
1018     BlockInterfaceType *block_default_type = opaque;
1019
1020     return drive_new(opts, *block_default_type, errp) == NULL;
1021 }
1022
1023 static int drive_enable_snapshot(void *opaque, QemuOpts *opts, Error **errp)
1024 {
1025     if (qemu_opt_get(opts, "snapshot") == NULL) {
1026         qemu_opt_set(opts, "snapshot", "on", &error_abort);
1027     }
1028     return 0;
1029 }
1030
1031 static void default_drive(int enable, int snapshot, BlockInterfaceType type,
1032                           int index, const char *optstr)
1033 {
1034     QemuOpts *opts;
1035     DriveInfo *dinfo;
1036
1037     if (!enable || drive_get_by_index(type, index)) {
1038         return;
1039     }
1040
1041     opts = drive_add(type, index, NULL, optstr);
1042     if (snapshot) {
1043         drive_enable_snapshot(NULL, opts, NULL);
1044     }
1045
1046     dinfo = drive_new(opts, type, &error_abort);
1047     dinfo->is_default = true;
1048
1049 }
1050
1051 typedef struct BlockdevOptionsQueueEntry {
1052     BlockdevOptions *bdo;
1053     Location loc;
1054     QSIMPLEQ_ENTRY(BlockdevOptionsQueueEntry) entry;
1055 } BlockdevOptionsQueueEntry;
1056
1057 typedef QSIMPLEQ_HEAD(, BlockdevOptionsQueueEntry) BlockdevOptionsQueue;
1058
1059 static void configure_blockdev(BlockdevOptionsQueue *bdo_queue,
1060                                MachineClass *machine_class, int snapshot)
1061 {
1062     /*
1063      * If the currently selected machine wishes to override the
1064      * units-per-bus property of its default HBA interface type, do so
1065      * now.
1066      */
1067     if (machine_class->units_per_default_bus) {
1068         override_max_devs(machine_class->block_default_type,
1069                           machine_class->units_per_default_bus);
1070     }
1071
1072     /* open the virtual block devices */
1073     while (!QSIMPLEQ_EMPTY(bdo_queue)) {
1074         BlockdevOptionsQueueEntry *bdo = QSIMPLEQ_FIRST(bdo_queue);
1075
1076         QSIMPLEQ_REMOVE_HEAD(bdo_queue, entry);
1077         loc_push_restore(&bdo->loc);
1078         qmp_blockdev_add(bdo->bdo, &error_fatal);
1079         loc_pop(&bdo->loc);
1080         qapi_free_BlockdevOptions(bdo->bdo);
1081         g_free(bdo);
1082     }
1083     if (snapshot) {
1084         qemu_opts_foreach(qemu_find_opts("drive"), drive_enable_snapshot,
1085                           NULL, NULL);
1086     }
1087     if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func,
1088                           &machine_class->block_default_type, &error_fatal)) {
1089         /* We printed help */
1090         exit(0);
1091     }
1092
1093     default_drive(default_cdrom, snapshot, machine_class->block_default_type, 2,
1094                   CDROM_OPTS);
1095     default_drive(default_floppy, snapshot, IF_FLOPPY, 0, FD_OPTS);
1096     default_drive(default_sdcard, snapshot, IF_SD, 0, SD_OPTS);
1097
1098 }
1099
1100 static QemuOptsList qemu_smp_opts = {
1101     .name = "smp-opts",
1102     .implied_opt_name = "cpus",
1103     .merge_lists = true,
1104     .head = QTAILQ_HEAD_INITIALIZER(qemu_smp_opts.head),
1105     .desc = {
1106         {
1107             .name = "cpus",
1108             .type = QEMU_OPT_NUMBER,
1109         }, {
1110             .name = "sockets",
1111             .type = QEMU_OPT_NUMBER,
1112         }, {
1113             .name = "dies",
1114             .type = QEMU_OPT_NUMBER,
1115         }, {
1116             .name = "cores",
1117             .type = QEMU_OPT_NUMBER,
1118         }, {
1119             .name = "threads",
1120             .type = QEMU_OPT_NUMBER,
1121         }, {
1122             .name = "maxcpus",
1123             .type = QEMU_OPT_NUMBER,
1124         },
1125         { /*End of list */ }
1126     },
1127 };
1128
1129 static void realtime_init(void)
1130 {
1131     if (enable_mlock) {
1132         if (os_mlock() < 0) {
1133             error_report("locking memory failed");
1134             exit(1);
1135         }
1136     }
1137 }
1138
1139
1140 static void configure_msg(QemuOpts *opts)
1141 {
1142     error_with_timestamp = qemu_opt_get_bool(opts, "timestamp", false);
1143 }
1144
1145
1146 /* Now we still need this for compatibility with XEN. */
1147 bool has_igd_gfx_passthru;
1148 static void igd_gfx_passthru(void)
1149 {
1150     has_igd_gfx_passthru = current_machine->igd_gfx_passthru;
1151 }
1152
1153 /***********************************************************/
1154 /* USB devices */
1155
1156 static int usb_device_add(const char *devname)
1157 {
1158     USBDevice *dev = NULL;
1159
1160     if (!machine_usb(current_machine)) {
1161         return -1;
1162     }
1163
1164     dev = usbdevice_create(devname);
1165     if (!dev)
1166         return -1;
1167
1168     return 0;
1169 }
1170
1171 static int usb_parse(const char *cmdline)
1172 {
1173     int r;
1174     r = usb_device_add(cmdline);
1175     if (r < 0) {
1176         error_report("could not add USB device '%s'", cmdline);
1177     }
1178     return r;
1179 }
1180
1181 /***********************************************************/
1182 /* machine registration */
1183
1184 MachineState *current_machine;
1185
1186 static MachineClass *find_machine(const char *name, GSList *machines)
1187 {
1188     GSList *el;
1189
1190     for (el = machines; el; el = el->next) {
1191         MachineClass *mc = el->data;
1192
1193         if (!strcmp(mc->name, name) || !g_strcmp0(mc->alias, name)) {
1194             return mc;
1195         }
1196     }
1197
1198     return NULL;
1199 }
1200
1201 static MachineClass *find_default_machine(GSList *machines)
1202 {
1203     GSList *el;
1204
1205     for (el = machines; el; el = el->next) {
1206         MachineClass *mc = el->data;
1207
1208         if (mc->is_default) {
1209             return mc;
1210         }
1211     }
1212
1213     return NULL;
1214 }
1215
1216 static int machine_help_func(QemuOpts *opts, MachineState *machine)
1217 {
1218     ObjectProperty *prop;
1219     ObjectPropertyIterator iter;
1220
1221     if (!qemu_opt_has_help_opt(opts)) {
1222         return 0;
1223     }
1224
1225     object_property_iter_init(&iter, OBJECT(machine));
1226     while ((prop = object_property_iter_next(&iter))) {
1227         if (!prop->set) {
1228             continue;
1229         }
1230
1231         printf("%s.%s=%s", MACHINE_GET_CLASS(machine)->name,
1232                prop->name, prop->type);
1233         if (prop->description) {
1234             printf(" (%s)\n", prop->description);
1235         } else {
1236             printf("\n");
1237         }
1238     }
1239
1240     return 1;
1241 }
1242
1243 struct VMChangeStateEntry {
1244     VMChangeStateHandler *cb;
1245     void *opaque;
1246     QTAILQ_ENTRY(VMChangeStateEntry) entries;
1247     int priority;
1248 };
1249
1250 static QTAILQ_HEAD(, VMChangeStateEntry) vm_change_state_head;
1251
1252 /**
1253  * qemu_add_vm_change_state_handler_prio:
1254  * @cb: the callback to invoke
1255  * @opaque: user data passed to the callback
1256  * @priority: low priorities execute first when the vm runs and the reverse is
1257  *            true when the vm stops
1258  *
1259  * Register a callback function that is invoked when the vm starts or stops
1260  * running.
1261  *
1262  * Returns: an entry to be freed using qemu_del_vm_change_state_handler()
1263  */
1264 VMChangeStateEntry *qemu_add_vm_change_state_handler_prio(
1265         VMChangeStateHandler *cb, void *opaque, int priority)
1266 {
1267     VMChangeStateEntry *e;
1268     VMChangeStateEntry *other;
1269
1270     e = g_malloc0(sizeof(*e));
1271     e->cb = cb;
1272     e->opaque = opaque;
1273     e->priority = priority;
1274
1275     /* Keep list sorted in ascending priority order */
1276     QTAILQ_FOREACH(other, &vm_change_state_head, entries) {
1277         if (priority < other->priority) {
1278             QTAILQ_INSERT_BEFORE(other, e, entries);
1279             return e;
1280         }
1281     }
1282
1283     QTAILQ_INSERT_TAIL(&vm_change_state_head, e, entries);
1284     return e;
1285 }
1286
1287 VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
1288                                                      void *opaque)
1289 {
1290     return qemu_add_vm_change_state_handler_prio(cb, opaque, 0);
1291 }
1292
1293 void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
1294 {
1295     QTAILQ_REMOVE(&vm_change_state_head, e, entries);
1296     g_free(e);
1297 }
1298
1299 void vm_state_notify(int running, RunState state)
1300 {
1301     VMChangeStateEntry *e, *next;
1302
1303     trace_vm_state_notify(running, state, RunState_str(state));
1304
1305     if (running) {
1306         QTAILQ_FOREACH_SAFE(e, &vm_change_state_head, entries, next) {
1307             e->cb(e->opaque, running, state);
1308         }
1309     } else {
1310         QTAILQ_FOREACH_REVERSE_SAFE(e, &vm_change_state_head, entries, next) {
1311             e->cb(e->opaque, running, state);
1312         }
1313     }
1314 }
1315
1316 static ShutdownCause reset_requested;
1317 static ShutdownCause shutdown_requested;
1318 static int shutdown_signal;
1319 static pid_t shutdown_pid;
1320 static int powerdown_requested;
1321 static int debug_requested;
1322 static int suspend_requested;
1323 static bool preconfig_exit_requested = true;
1324 static WakeupReason wakeup_reason;
1325 static NotifierList powerdown_notifiers =
1326     NOTIFIER_LIST_INITIALIZER(powerdown_notifiers);
1327 static NotifierList suspend_notifiers =
1328     NOTIFIER_LIST_INITIALIZER(suspend_notifiers);
1329 static NotifierList wakeup_notifiers =
1330     NOTIFIER_LIST_INITIALIZER(wakeup_notifiers);
1331 static NotifierList shutdown_notifiers =
1332     NOTIFIER_LIST_INITIALIZER(shutdown_notifiers);
1333 static uint32_t wakeup_reason_mask = ~(1 << QEMU_WAKEUP_REASON_NONE);
1334
1335 ShutdownCause qemu_shutdown_requested_get(void)
1336 {
1337     return shutdown_requested;
1338 }
1339
1340 ShutdownCause qemu_reset_requested_get(void)
1341 {
1342     return reset_requested;
1343 }
1344
1345 static int qemu_shutdown_requested(void)
1346 {
1347     return atomic_xchg(&shutdown_requested, SHUTDOWN_CAUSE_NONE);
1348 }
1349
1350 static void qemu_kill_report(void)
1351 {
1352     if (!qtest_driver() && shutdown_signal) {
1353         if (shutdown_pid == 0) {
1354             /* This happens for eg ^C at the terminal, so it's worth
1355              * avoiding printing an odd message in that case.
1356              */
1357             error_report("terminating on signal %d", shutdown_signal);
1358         } else {
1359             char *shutdown_cmd = qemu_get_pid_name(shutdown_pid);
1360
1361             error_report("terminating on signal %d from pid " FMT_pid " (%s)",
1362                          shutdown_signal, shutdown_pid,
1363                          shutdown_cmd ? shutdown_cmd : "<unknown process>");
1364             g_free(shutdown_cmd);
1365         }
1366         shutdown_signal = 0;
1367     }
1368 }
1369
1370 static ShutdownCause qemu_reset_requested(void)
1371 {
1372     ShutdownCause r = reset_requested;
1373
1374     if (r && replay_checkpoint(CHECKPOINT_RESET_REQUESTED)) {
1375         reset_requested = SHUTDOWN_CAUSE_NONE;
1376         return r;
1377     }
1378     return SHUTDOWN_CAUSE_NONE;
1379 }
1380
1381 static int qemu_suspend_requested(void)
1382 {
1383     int r = suspend_requested;
1384     if (r && replay_checkpoint(CHECKPOINT_SUSPEND_REQUESTED)) {
1385         suspend_requested = 0;
1386         return r;
1387     }
1388     return false;
1389 }
1390
1391 static WakeupReason qemu_wakeup_requested(void)
1392 {
1393     return wakeup_reason;
1394 }
1395
1396 static int qemu_powerdown_requested(void)
1397 {
1398     int r = powerdown_requested;
1399     powerdown_requested = 0;
1400     return r;
1401 }
1402
1403 static int qemu_debug_requested(void)
1404 {
1405     int r = debug_requested;
1406     debug_requested = 0;
1407     return r;
1408 }
1409
1410 void qemu_exit_preconfig_request(void)
1411 {
1412     preconfig_exit_requested = true;
1413 }
1414
1415 /*
1416  * Reset the VM. Issue an event unless @reason is SHUTDOWN_CAUSE_NONE.
1417  */
1418 void qemu_system_reset(ShutdownCause reason)
1419 {
1420     MachineClass *mc;
1421
1422     mc = current_machine ? MACHINE_GET_CLASS(current_machine) : NULL;
1423
1424     cpu_synchronize_all_states();
1425
1426     if (mc && mc->reset) {
1427         mc->reset(current_machine);
1428     } else {
1429         qemu_devices_reset();
1430     }
1431     if (reason && reason != SHUTDOWN_CAUSE_SUBSYSTEM_RESET) {
1432         qapi_event_send_reset(shutdown_caused_by_guest(reason), reason);
1433     }
1434     cpu_synchronize_all_post_reset();
1435 }
1436
1437 /*
1438  * Wake the VM after suspend.
1439  */
1440 static void qemu_system_wakeup(void)
1441 {
1442     MachineClass *mc;
1443
1444     mc = current_machine ? MACHINE_GET_CLASS(current_machine) : NULL;
1445
1446     if (mc && mc->wakeup) {
1447         mc->wakeup(current_machine);
1448     }
1449 }
1450
1451 void qemu_system_guest_panicked(GuestPanicInformation *info)
1452 {
1453     qemu_log_mask(LOG_GUEST_ERROR, "Guest crashed");
1454
1455     if (current_cpu) {
1456         current_cpu->crash_occurred = true;
1457     }
1458     qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE,
1459                                    !!info, info);
1460     vm_stop(RUN_STATE_GUEST_PANICKED);
1461     if (!no_shutdown) {
1462         qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF,
1463                                        !!info, info);
1464         qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_PANIC);
1465     }
1466
1467     if (info) {
1468         if (info->type == GUEST_PANIC_INFORMATION_TYPE_HYPER_V) {
1469             qemu_log_mask(LOG_GUEST_ERROR, "\nHV crash parameters: (%#"PRIx64
1470                           " %#"PRIx64" %#"PRIx64" %#"PRIx64" %#"PRIx64")\n",
1471                           info->u.hyper_v.arg1,
1472                           info->u.hyper_v.arg2,
1473                           info->u.hyper_v.arg3,
1474                           info->u.hyper_v.arg4,
1475                           info->u.hyper_v.arg5);
1476         } else if (info->type == GUEST_PANIC_INFORMATION_TYPE_S390) {
1477             qemu_log_mask(LOG_GUEST_ERROR, " on cpu %d: %s\n"
1478                           "PSW: 0x%016" PRIx64 " 0x%016" PRIx64"\n",
1479                           info->u.s390.core,
1480                           S390CrashReason_str(info->u.s390.reason),
1481                           info->u.s390.psw_mask,
1482                           info->u.s390.psw_addr);
1483         }
1484         qapi_free_GuestPanicInformation(info);
1485     }
1486 }
1487
1488 void qemu_system_reset_request(ShutdownCause reason)
1489 {
1490     if (no_reboot && reason != SHUTDOWN_CAUSE_SUBSYSTEM_RESET) {
1491         shutdown_requested = reason;
1492     } else {
1493         reset_requested = reason;
1494     }
1495     cpu_stop_current();
1496     qemu_notify_event();
1497 }
1498
1499 static void qemu_system_suspend(void)
1500 {
1501     pause_all_vcpus();
1502     notifier_list_notify(&suspend_notifiers, NULL);
1503     runstate_set(RUN_STATE_SUSPENDED);
1504     qapi_event_send_suspend();
1505 }
1506
1507 void qemu_system_suspend_request(void)
1508 {
1509     if (runstate_check(RUN_STATE_SUSPENDED)) {
1510         return;
1511     }
1512     suspend_requested = 1;
1513     cpu_stop_current();
1514     qemu_notify_event();
1515 }
1516
1517 void qemu_register_suspend_notifier(Notifier *notifier)
1518 {
1519     notifier_list_add(&suspend_notifiers, notifier);
1520 }
1521
1522 void qemu_system_wakeup_request(WakeupReason reason, Error **errp)
1523 {
1524     trace_system_wakeup_request(reason);
1525
1526     if (!runstate_check(RUN_STATE_SUSPENDED)) {
1527         error_setg(errp,
1528                    "Unable to wake up: guest is not in suspended state");
1529         return;
1530     }
1531     if (!(wakeup_reason_mask & (1 << reason))) {
1532         return;
1533     }
1534     runstate_set(RUN_STATE_RUNNING);
1535     wakeup_reason = reason;
1536     qemu_notify_event();
1537 }
1538
1539 void qemu_system_wakeup_enable(WakeupReason reason, bool enabled)
1540 {
1541     if (enabled) {
1542         wakeup_reason_mask |= (1 << reason);
1543     } else {
1544         wakeup_reason_mask &= ~(1 << reason);
1545     }
1546 }
1547
1548 void qemu_register_wakeup_notifier(Notifier *notifier)
1549 {
1550     notifier_list_add(&wakeup_notifiers, notifier);
1551 }
1552
1553 void qemu_register_wakeup_support(void)
1554 {
1555     wakeup_suspend_enabled = true;
1556 }
1557
1558 bool qemu_wakeup_suspend_enabled(void)
1559 {
1560     return wakeup_suspend_enabled;
1561 }
1562
1563 void qemu_system_killed(int signal, pid_t pid)
1564 {
1565     shutdown_signal = signal;
1566     shutdown_pid = pid;
1567     no_shutdown = 0;
1568
1569     /* Cannot call qemu_system_shutdown_request directly because
1570      * we are in a signal handler.
1571      */
1572     shutdown_requested = SHUTDOWN_CAUSE_HOST_SIGNAL;
1573     qemu_notify_event();
1574 }
1575
1576 void qemu_system_shutdown_request(ShutdownCause reason)
1577 {
1578     trace_qemu_system_shutdown_request(reason);
1579     replay_shutdown_request(reason);
1580     shutdown_requested = reason;
1581     qemu_notify_event();
1582 }
1583
1584 static void qemu_system_powerdown(void)
1585 {
1586     qapi_event_send_powerdown();
1587     notifier_list_notify(&powerdown_notifiers, NULL);
1588 }
1589
1590 static void qemu_system_shutdown(ShutdownCause cause)
1591 {
1592     qapi_event_send_shutdown(shutdown_caused_by_guest(cause), cause);
1593     notifier_list_notify(&shutdown_notifiers, &cause);
1594 }
1595
1596 void qemu_system_powerdown_request(void)
1597 {
1598     trace_qemu_system_powerdown_request();
1599     powerdown_requested = 1;
1600     qemu_notify_event();
1601 }
1602
1603 void qemu_register_powerdown_notifier(Notifier *notifier)
1604 {
1605     notifier_list_add(&powerdown_notifiers, notifier);
1606 }
1607
1608 void qemu_register_shutdown_notifier(Notifier *notifier)
1609 {
1610     notifier_list_add(&shutdown_notifiers, notifier);
1611 }
1612
1613 void qemu_system_debug_request(void)
1614 {
1615     debug_requested = 1;
1616     qemu_notify_event();
1617 }
1618
1619 static bool main_loop_should_exit(void)
1620 {
1621     RunState r;
1622     ShutdownCause request;
1623
1624     if (runstate_check(RUN_STATE_FINISH_MIGRATE)) {
1625         return false;
1626     }
1627     if (preconfig_exit_requested) {
1628         if (runstate_check(RUN_STATE_PRECONFIG)) {
1629             runstate_set(RUN_STATE_PRELAUNCH);
1630         }
1631         preconfig_exit_requested = false;
1632         return true;
1633     }
1634     if (qemu_debug_requested()) {
1635         vm_stop(RUN_STATE_DEBUG);
1636     }
1637     if (qemu_suspend_requested()) {
1638         qemu_system_suspend();
1639     }
1640     request = qemu_shutdown_requested();
1641     if (request) {
1642         qemu_kill_report();
1643         qemu_system_shutdown(request);
1644         if (no_shutdown) {
1645             vm_stop(RUN_STATE_SHUTDOWN);
1646         } else {
1647             return true;
1648         }
1649     }
1650     request = qemu_reset_requested();
1651     if (request) {
1652         pause_all_vcpus();
1653         qemu_system_reset(request);
1654         resume_all_vcpus();
1655         if (!runstate_check(RUN_STATE_RUNNING) &&
1656                 !runstate_check(RUN_STATE_INMIGRATE)) {
1657             runstate_set(RUN_STATE_PRELAUNCH);
1658         }
1659     }
1660     if (qemu_wakeup_requested()) {
1661         pause_all_vcpus();
1662         qemu_system_wakeup();
1663         notifier_list_notify(&wakeup_notifiers, &wakeup_reason);
1664         wakeup_reason = QEMU_WAKEUP_REASON_NONE;
1665         resume_all_vcpus();
1666         qapi_event_send_wakeup();
1667     }
1668     if (qemu_powerdown_requested()) {
1669         qemu_system_powerdown();
1670     }
1671     if (qemu_vmstop_requested(&r)) {
1672         vm_stop(r);
1673     }
1674     return false;
1675 }
1676
1677 static void main_loop(void)
1678 {
1679 #ifdef CONFIG_PROFILER
1680     int64_t ti;
1681 #endif
1682     while (!main_loop_should_exit()) {
1683 #ifdef CONFIG_PROFILER
1684         ti = profile_getclock();
1685 #endif
1686         main_loop_wait(false);
1687 #ifdef CONFIG_PROFILER
1688         dev_time += profile_getclock() - ti;
1689 #endif
1690     }
1691 }
1692
1693 static void version(void)
1694 {
1695     printf("QEMU emulator version " QEMU_FULL_VERSION "\n"
1696            QEMU_COPYRIGHT "\n");
1697 }
1698
1699 static void help(int exitcode)
1700 {
1701     version();
1702     printf("usage: %s [options] [disk_image]\n\n"
1703            "'disk_image' is a raw hard disk image for IDE hard disk 0\n\n",
1704             error_get_progname());
1705
1706 #define QEMU_OPTIONS_GENERATE_HELP
1707 #include "qemu-options-wrapper.h"
1708
1709     printf("\nDuring emulation, the following keys are useful:\n"
1710            "ctrl-alt-f      toggle full screen\n"
1711            "ctrl-alt-n      switch to virtual console 'n'\n"
1712            "ctrl-alt        toggle mouse and keyboard grab\n"
1713            "\n"
1714            "When using -nographic, press 'ctrl-a h' to get some help.\n"
1715            "\n"
1716            QEMU_HELP_BOTTOM "\n");
1717
1718     exit(exitcode);
1719 }
1720
1721 #define HAS_ARG 0x0001
1722
1723 typedef struct QEMUOption {
1724     const char *name;
1725     int flags;
1726     int index;
1727     uint32_t arch_mask;
1728 } QEMUOption;
1729
1730 static const QEMUOption qemu_options[] = {
1731     { "h", 0, QEMU_OPTION_h, QEMU_ARCH_ALL },
1732 #define QEMU_OPTIONS_GENERATE_OPTIONS
1733 #include "qemu-options-wrapper.h"
1734     { NULL },
1735 };
1736
1737 typedef struct VGAInterfaceInfo {
1738     const char *opt_name;    /* option name */
1739     const char *name;        /* human-readable name */
1740     /* Class names indicating that support is available.
1741      * If no class is specified, the interface is always available */
1742     const char *class_names[2];
1743 } VGAInterfaceInfo;
1744
1745 static const VGAInterfaceInfo vga_interfaces[VGA_TYPE_MAX] = {
1746     [VGA_NONE] = {
1747         .opt_name = "none",
1748         .name = "no graphic card",
1749     },
1750     [VGA_STD] = {
1751         .opt_name = "std",
1752         .name = "standard VGA",
1753         .class_names = { "VGA", "isa-vga" },
1754     },
1755     [VGA_CIRRUS] = {
1756         .opt_name = "cirrus",
1757         .name = "Cirrus VGA",
1758         .class_names = { "cirrus-vga", "isa-cirrus-vga" },
1759     },
1760     [VGA_VMWARE] = {
1761         .opt_name = "vmware",
1762         .name = "VMWare SVGA",
1763         .class_names = { "vmware-svga" },
1764     },
1765     [VGA_VIRTIO] = {
1766         .opt_name = "virtio",
1767         .name = "Virtio VGA",
1768         .class_names = { "virtio-vga" },
1769     },
1770     [VGA_QXL] = {
1771         .opt_name = "qxl",
1772         .name = "QXL VGA",
1773         .class_names = { "qxl-vga" },
1774     },
1775     [VGA_TCX] = {
1776         .opt_name = "tcx",
1777         .name = "TCX framebuffer",
1778         .class_names = { "SUNW,tcx" },
1779     },
1780     [VGA_CG3] = {
1781         .opt_name = "cg3",
1782         .name = "CG3 framebuffer",
1783         .class_names = { "cgthree" },
1784     },
1785     [VGA_XENFB] = {
1786         .opt_name = "xenfb",
1787         .name = "Xen paravirtualized framebuffer",
1788     },
1789 };
1790
1791 static bool vga_interface_available(VGAInterfaceType t)
1792 {
1793     const VGAInterfaceInfo *ti = &vga_interfaces[t];
1794
1795     assert(t < VGA_TYPE_MAX);
1796     return !ti->class_names[0] ||
1797            object_class_by_name(ti->class_names[0]) ||
1798            object_class_by_name(ti->class_names[1]);
1799 }
1800
1801 static const char *
1802 get_default_vga_model(const MachineClass *machine_class)
1803 {
1804     if (machine_class->default_display) {
1805         return machine_class->default_display;
1806     } else if (vga_interface_available(VGA_CIRRUS)) {
1807         return "cirrus";
1808     } else if (vga_interface_available(VGA_STD)) {
1809         return "std";
1810     }
1811
1812     return NULL;
1813 }
1814
1815 static void select_vgahw(const MachineClass *machine_class, const char *p)
1816 {
1817     const char *opts;
1818     int t;
1819
1820     if (g_str_equal(p, "help")) {
1821         const char *def = get_default_vga_model(machine_class);
1822
1823         for (t = 0; t < VGA_TYPE_MAX; t++) {
1824             const VGAInterfaceInfo *ti = &vga_interfaces[t];
1825
1826             if (vga_interface_available(t) && ti->opt_name) {
1827                 printf("%-20s %s%s\n", ti->opt_name, ti->name ?: "",
1828                        g_str_equal(ti->opt_name, def) ? " (default)" : "");
1829             }
1830         }
1831         exit(0);
1832     }
1833
1834     assert(vga_interface_type == VGA_NONE);
1835     for (t = 0; t < VGA_TYPE_MAX; t++) {
1836         const VGAInterfaceInfo *ti = &vga_interfaces[t];
1837         if (ti->opt_name && strstart(p, ti->opt_name, &opts)) {
1838             if (!vga_interface_available(t)) {
1839                 error_report("%s not available", ti->name);
1840                 exit(1);
1841             }
1842             vga_interface_type = t;
1843             break;
1844         }
1845     }
1846     if (t == VGA_TYPE_MAX) {
1847     invalid_vga:
1848         error_report("unknown vga type: %s", p);
1849         exit(1);
1850     }
1851     while (*opts) {
1852         const char *nextopt;
1853
1854         if (strstart(opts, ",retrace=", &nextopt)) {
1855             opts = nextopt;
1856             if (strstart(opts, "dumb", &nextopt))
1857                 vga_retrace_method = VGA_RETRACE_DUMB;
1858             else if (strstart(opts, "precise", &nextopt))
1859                 vga_retrace_method = VGA_RETRACE_PRECISE;
1860             else goto invalid_vga;
1861         } else goto invalid_vga;
1862         opts = nextopt;
1863     }
1864 }
1865
1866 static void parse_display_qapi(const char *optarg)
1867 {
1868     DisplayOptions *opts;
1869     Visitor *v;
1870
1871     v = qobject_input_visitor_new_str(optarg, "type", &error_fatal);
1872
1873     visit_type_DisplayOptions(v, NULL, &opts, &error_fatal);
1874     QAPI_CLONE_MEMBERS(DisplayOptions, &dpy, opts);
1875
1876     qapi_free_DisplayOptions(opts);
1877     visit_free(v);
1878 }
1879
1880 DisplayOptions *qmp_query_display_options(Error **errp)
1881 {
1882     return QAPI_CLONE(DisplayOptions, &dpy);
1883 }
1884
1885 static void parse_display(const char *p)
1886 {
1887     const char *opts;
1888
1889     if (strstart(p, "sdl", &opts)) {
1890         /*
1891          * sdl DisplayType needs hand-crafted parser instead of
1892          * parse_display_qapi() due to some options not in
1893          * DisplayOptions, specifically:
1894          *   - frame
1895          *     Already deprecated.
1896          *   - ctrl_grab + alt_grab
1897          *     Not clear yet what happens to them long-term.  Should
1898          *     replaced by something better or deprecated and dropped.
1899          */
1900         dpy.type = DISPLAY_TYPE_SDL;
1901         while (*opts) {
1902             const char *nextopt;
1903
1904             if (strstart(opts, ",alt_grab=", &nextopt)) {
1905                 opts = nextopt;
1906                 if (strstart(opts, "on", &nextopt)) {
1907                     alt_grab = 1;
1908                 } else if (strstart(opts, "off", &nextopt)) {
1909                     alt_grab = 0;
1910                 } else {
1911                     goto invalid_sdl_args;
1912                 }
1913             } else if (strstart(opts, ",ctrl_grab=", &nextopt)) {
1914                 opts = nextopt;
1915                 if (strstart(opts, "on", &nextopt)) {
1916                     ctrl_grab = 1;
1917                 } else if (strstart(opts, "off", &nextopt)) {
1918                     ctrl_grab = 0;
1919                 } else {
1920                     goto invalid_sdl_args;
1921                 }
1922             } else if (strstart(opts, ",window_close=", &nextopt)) {
1923                 opts = nextopt;
1924                 dpy.has_window_close = true;
1925                 if (strstart(opts, "on", &nextopt)) {
1926                     dpy.window_close = true;
1927                 } else if (strstart(opts, "off", &nextopt)) {
1928                     dpy.window_close = false;
1929                 } else {
1930                     goto invalid_sdl_args;
1931                 }
1932             } else if (strstart(opts, ",gl=", &nextopt)) {
1933                 opts = nextopt;
1934                 dpy.has_gl = true;
1935                 if (strstart(opts, "on", &nextopt)) {
1936                     dpy.gl = DISPLAYGL_MODE_ON;
1937                 } else if (strstart(opts, "core", &nextopt)) {
1938                     dpy.gl = DISPLAYGL_MODE_CORE;
1939                 } else if (strstart(opts, "es", &nextopt)) {
1940                     dpy.gl = DISPLAYGL_MODE_ES;
1941                 } else if (strstart(opts, "off", &nextopt)) {
1942                     dpy.gl = DISPLAYGL_MODE_OFF;
1943                 } else {
1944                     goto invalid_sdl_args;
1945                 }
1946             } else {
1947             invalid_sdl_args:
1948                 error_report("invalid SDL option string");
1949                 exit(1);
1950             }
1951             opts = nextopt;
1952         }
1953     } else if (strstart(p, "vnc", &opts)) {
1954         /*
1955          * vnc isn't a (local) DisplayType but a protocol for remote
1956          * display access.
1957          */
1958         if (*opts == '=') {
1959             vnc_parse(opts + 1, &error_fatal);
1960         } else {
1961             error_report("VNC requires a display argument vnc=<display>");
1962             exit(1);
1963         }
1964     } else {
1965         parse_display_qapi(p);
1966     }
1967 }
1968
1969 char *qemu_find_file(int type, const char *name)
1970 {
1971     int i;
1972     const char *subdir;
1973     char *buf;
1974
1975     /* Try the name as a straight path first */
1976     if (access(name, R_OK) == 0) {
1977         trace_load_file(name, name);
1978         return g_strdup(name);
1979     }
1980
1981     switch (type) {
1982     case QEMU_FILE_TYPE_BIOS:
1983         subdir = "";
1984         break;
1985     case QEMU_FILE_TYPE_KEYMAP:
1986         subdir = "keymaps/";
1987         break;
1988     default:
1989         abort();
1990     }
1991
1992     for (i = 0; i < data_dir_idx; i++) {
1993         buf = g_strdup_printf("%s/%s%s", data_dir[i], subdir, name);
1994         if (access(buf, R_OK) == 0) {
1995             trace_load_file(name, buf);
1996             return buf;
1997         }
1998         g_free(buf);
1999     }
2000     return NULL;
2001 }
2002
2003 static void qemu_add_data_dir(const char *path)
2004 {
2005     int i;
2006
2007     if (path == NULL) {
2008         return;
2009     }
2010     if (data_dir_idx == ARRAY_SIZE(data_dir)) {
2011         return;
2012     }
2013     for (i = 0; i < data_dir_idx; i++) {
2014         if (strcmp(data_dir[i], path) == 0) {
2015             return; /* duplicate */
2016         }
2017     }
2018     data_dir[data_dir_idx++] = g_strdup(path);
2019 }
2020
2021 static inline bool nonempty_str(const char *str)
2022 {
2023     return str && *str;
2024 }
2025
2026 static int parse_fw_cfg(void *opaque, QemuOpts *opts, Error **errp)
2027 {
2028     gchar *buf;
2029     size_t size;
2030     const char *name, *file, *str;
2031     FWCfgState *fw_cfg = (FWCfgState *) opaque;
2032
2033     if (fw_cfg == NULL) {
2034         error_setg(errp, "fw_cfg device not available");
2035         return -1;
2036     }
2037     name = qemu_opt_get(opts, "name");
2038     file = qemu_opt_get(opts, "file");
2039     str = qemu_opt_get(opts, "string");
2040
2041     /* we need name and either a file or the content string */
2042     if (!(nonempty_str(name) && (nonempty_str(file) || nonempty_str(str)))) {
2043         error_setg(errp, "invalid argument(s)");
2044         return -1;
2045     }
2046     if (nonempty_str(file) && nonempty_str(str)) {
2047         error_setg(errp, "file and string are mutually exclusive");
2048         return -1;
2049     }
2050     if (strlen(name) > FW_CFG_MAX_FILE_PATH - 1) {
2051         error_setg(errp, "name too long (max. %d char)",
2052                    FW_CFG_MAX_FILE_PATH - 1);
2053         return -1;
2054     }
2055     if (strncmp(name, "opt/", 4) != 0) {
2056         warn_report("externally provided fw_cfg item names "
2057                     "should be prefixed with \"opt/\"");
2058     }
2059     if (nonempty_str(str)) {
2060         size = strlen(str); /* NUL terminator NOT included in fw_cfg blob */
2061         buf = g_memdup(str, size);
2062     } else {
2063         GError *err = NULL;
2064         if (!g_file_get_contents(file, &buf, &size, &err)) {
2065             error_setg(errp, "can't load %s: %s", file, err->message);
2066             g_error_free(err);
2067             return -1;
2068         }
2069     }
2070     /* For legacy, keep user files in a specific global order. */
2071     fw_cfg_set_order_override(fw_cfg, FW_CFG_ORDER_OVERRIDE_USER);
2072     fw_cfg_add_file(fw_cfg, name, buf, size);
2073     fw_cfg_reset_order_override(fw_cfg);
2074     return 0;
2075 }
2076
2077 static int device_help_func(void *opaque, QemuOpts *opts, Error **errp)
2078 {
2079     return qdev_device_help(opts);
2080 }
2081
2082 static int device_init_func(void *opaque, QemuOpts *opts, Error **errp)
2083 {
2084     DeviceState *dev;
2085
2086     dev = qdev_device_add(opts, errp);
2087     if (!dev && *errp) {
2088         error_report_err(*errp);
2089         return -1;
2090     } else if (dev) {
2091         object_unref(OBJECT(dev));
2092     }
2093     return 0;
2094 }
2095
2096 static int chardev_init_func(void *opaque, QemuOpts *opts, Error **errp)
2097 {
2098     Error *local_err = NULL;
2099
2100     if (!qemu_chr_new_from_opts(opts, NULL, &local_err)) {
2101         if (local_err) {
2102             error_propagate(errp, local_err);
2103             return -1;
2104         }
2105         exit(0);
2106     }
2107     return 0;
2108 }
2109
2110 #ifdef CONFIG_VIRTFS
2111 static int fsdev_init_func(void *opaque, QemuOpts *opts, Error **errp)
2112 {
2113     return qemu_fsdev_add(opts, errp);
2114 }
2115 #endif
2116
2117 static int mon_init_func(void *opaque, QemuOpts *opts, Error **errp)
2118 {
2119     Chardev *chr;
2120     bool qmp;
2121     bool pretty = false;
2122     const char *chardev;
2123     const char *mode;
2124
2125     mode = qemu_opt_get(opts, "mode");
2126     if (mode == NULL) {
2127         mode = "readline";
2128     }
2129     if (strcmp(mode, "readline") == 0) {
2130         qmp = false;
2131     } else if (strcmp(mode, "control") == 0) {
2132         qmp = true;
2133     } else {
2134         error_setg(errp, "unknown monitor mode \"%s\"", mode);
2135         return -1;
2136     }
2137
2138     if (!qmp && qemu_opt_get(opts, "pretty")) {
2139         warn_report("'pretty' is deprecated for HMP monitors, it has no effect "
2140                     "and will be removed in future versions");
2141     }
2142     if (qemu_opt_get_bool(opts, "pretty", 0)) {
2143         pretty = true;
2144     }
2145
2146     chardev = qemu_opt_get(opts, "chardev");
2147     if (!chardev) {
2148         error_report("chardev is required");
2149         exit(1);
2150     }
2151     chr = qemu_chr_find(chardev);
2152     if (chr == NULL) {
2153         error_setg(errp, "chardev \"%s\" not found", chardev);
2154         return -1;
2155     }
2156
2157     if (qmp) {
2158         monitor_init_qmp(chr, pretty);
2159     } else {
2160         monitor_init_hmp(chr, true);
2161     }
2162     return 0;
2163 }
2164
2165 static void monitor_parse(const char *optarg, const char *mode, bool pretty)
2166 {
2167     static int monitor_device_index = 0;
2168     QemuOpts *opts;
2169     const char *p;
2170     char label[32];
2171
2172     if (strstart(optarg, "chardev:", &p)) {
2173         snprintf(label, sizeof(label), "%s", p);
2174     } else {
2175         snprintf(label, sizeof(label), "compat_monitor%d",
2176                  monitor_device_index);
2177         opts = qemu_chr_parse_compat(label, optarg, true);
2178         if (!opts) {
2179             error_report("parse error: %s", optarg);
2180             exit(1);
2181         }
2182     }
2183
2184     opts = qemu_opts_create(qemu_find_opts("mon"), label, 1, &error_fatal);
2185     qemu_opt_set(opts, "mode", mode, &error_abort);
2186     qemu_opt_set(opts, "chardev", label, &error_abort);
2187     if (!strcmp(mode, "control")) {
2188         qemu_opt_set_bool(opts, "pretty", pretty, &error_abort);
2189     } else {
2190         assert(pretty == false);
2191     }
2192     monitor_device_index++;
2193 }
2194
2195 struct device_config {
2196     enum {
2197         DEV_USB,       /* -usbdevice     */
2198         DEV_SERIAL,    /* -serial        */
2199         DEV_PARALLEL,  /* -parallel      */
2200         DEV_DEBUGCON,  /* -debugcon */
2201         DEV_GDB,       /* -gdb, -s */
2202         DEV_SCLP,      /* s390 sclp */
2203     } type;
2204     const char *cmdline;
2205     Location loc;
2206     QTAILQ_ENTRY(device_config) next;
2207 };
2208
2209 static QTAILQ_HEAD(, device_config) device_configs =
2210     QTAILQ_HEAD_INITIALIZER(device_configs);
2211
2212 static void add_device_config(int type, const char *cmdline)
2213 {
2214     struct device_config *conf;
2215
2216     conf = g_malloc0(sizeof(*conf));
2217     conf->type = type;
2218     conf->cmdline = cmdline;
2219     loc_save(&conf->loc);
2220     QTAILQ_INSERT_TAIL(&device_configs, conf, next);
2221 }
2222
2223 static int foreach_device_config(int type, int (*func)(const char *cmdline))
2224 {
2225     struct device_config *conf;
2226     int rc;
2227
2228     QTAILQ_FOREACH(conf, &device_configs, next) {
2229         if (conf->type != type)
2230             continue;
2231         loc_push_restore(&conf->loc);
2232         rc = func(conf->cmdline);
2233         loc_pop(&conf->loc);
2234         if (rc) {
2235             return rc;
2236         }
2237     }
2238     return 0;
2239 }
2240
2241 static int serial_parse(const char *devname)
2242 {
2243     int index = num_serial_hds;
2244     char label[32];
2245
2246     if (strcmp(devname, "none") == 0)
2247         return 0;
2248     snprintf(label, sizeof(label), "serial%d", index);
2249     serial_hds = g_renew(Chardev *, serial_hds, index + 1);
2250
2251     serial_hds[index] = qemu_chr_new_mux_mon(label, devname, NULL);
2252     if (!serial_hds[index]) {
2253         error_report("could not connect serial device"
2254                      " to character backend '%s'", devname);
2255         return -1;
2256     }
2257     num_serial_hds++;
2258     return 0;
2259 }
2260
2261 Chardev *serial_hd(int i)
2262 {
2263     assert(i >= 0);
2264     if (i < num_serial_hds) {
2265         return serial_hds[i];
2266     }
2267     return NULL;
2268 }
2269
2270 int serial_max_hds(void)
2271 {
2272     return num_serial_hds;
2273 }
2274
2275 static int parallel_parse(const char *devname)
2276 {
2277     static int index = 0;
2278     char label[32];
2279
2280     if (strcmp(devname, "none") == 0)
2281         return 0;
2282     if (index == MAX_PARALLEL_PORTS) {
2283         error_report("too many parallel ports");
2284         exit(1);
2285     }
2286     snprintf(label, sizeof(label), "parallel%d", index);
2287     parallel_hds[index] = qemu_chr_new_mux_mon(label, devname, NULL);
2288     if (!parallel_hds[index]) {
2289         error_report("could not connect parallel device"
2290                      " to character backend '%s'", devname);
2291         return -1;
2292     }
2293     index++;
2294     return 0;
2295 }
2296
2297 static int debugcon_parse(const char *devname)
2298 {
2299     QemuOpts *opts;
2300
2301     if (!qemu_chr_new_mux_mon("debugcon", devname, NULL)) {
2302         error_report("invalid character backend '%s'", devname);
2303         exit(1);
2304     }
2305     opts = qemu_opts_create(qemu_find_opts("device"), "debugcon", 1, NULL);
2306     if (!opts) {
2307         error_report("already have a debugcon device");
2308         exit(1);
2309     }
2310     qemu_opt_set(opts, "driver", "isa-debugcon", &error_abort);
2311     qemu_opt_set(opts, "chardev", "debugcon", &error_abort);
2312     return 0;
2313 }
2314
2315 static gint machine_class_cmp(gconstpointer a, gconstpointer b)
2316 {
2317     const MachineClass *mc1 = a, *mc2 = b;
2318     int res;
2319
2320     if (mc1->family == NULL) {
2321         if (mc2->family == NULL) {
2322             /* Compare standalone machine types against each other; they sort
2323              * in increasing order.
2324              */
2325             return strcmp(object_class_get_name(OBJECT_CLASS(mc1)),
2326                           object_class_get_name(OBJECT_CLASS(mc2)));
2327         }
2328
2329         /* Standalone machine types sort after families. */
2330         return 1;
2331     }
2332
2333     if (mc2->family == NULL) {
2334         /* Families sort before standalone machine types. */
2335         return -1;
2336     }
2337
2338     /* Families sort between each other alphabetically increasingly. */
2339     res = strcmp(mc1->family, mc2->family);
2340     if (res != 0) {
2341         return res;
2342     }
2343
2344     /* Within the same family, machine types sort in decreasing order. */
2345     return strcmp(object_class_get_name(OBJECT_CLASS(mc2)),
2346                   object_class_get_name(OBJECT_CLASS(mc1)));
2347 }
2348
2349 static MachineClass *machine_parse(const char *name, GSList *machines)
2350 {
2351     MachineClass *mc;
2352     GSList *el;
2353
2354     if (is_help_option(name)) {
2355         printf("Supported machines are:\n");
2356         machines = g_slist_sort(machines, machine_class_cmp);
2357         for (el = machines; el; el = el->next) {
2358             MachineClass *mc = el->data;
2359             if (mc->alias) {
2360                 printf("%-20s %s (alias of %s)\n", mc->alias, mc->desc, mc->name);
2361             }
2362             printf("%-20s %s%s%s\n", mc->name, mc->desc,
2363                    mc->is_default ? " (default)" : "",
2364                    mc->deprecation_reason ? " (deprecated)" : "");
2365         }
2366         exit(0);
2367     }
2368
2369     mc = find_machine(name, machines);
2370     if (!mc) {
2371         error_report("unsupported machine type");
2372         error_printf("Use -machine help to list supported machines\n");
2373         exit(1);
2374     }
2375     return mc;
2376 }
2377
2378 void qemu_add_exit_notifier(Notifier *notify)
2379 {
2380     notifier_list_add(&exit_notifiers, notify);
2381 }
2382
2383 void qemu_remove_exit_notifier(Notifier *notify)
2384 {
2385     notifier_remove(notify);
2386 }
2387
2388 static void qemu_run_exit_notifiers(void)
2389 {
2390     notifier_list_notify(&exit_notifiers, NULL);
2391 }
2392
2393 static const char *pid_file;
2394 static Notifier qemu_unlink_pidfile_notifier;
2395
2396 static void qemu_unlink_pidfile(Notifier *n, void *data)
2397 {
2398     if (pid_file) {
2399         unlink(pid_file);
2400     }
2401 }
2402
2403 bool machine_init_done;
2404
2405 void qemu_add_machine_init_done_notifier(Notifier *notify)
2406 {
2407     notifier_list_add(&machine_init_done_notifiers, notify);
2408     if (machine_init_done) {
2409         notify->notify(notify, NULL);
2410     }
2411 }
2412
2413 void qemu_remove_machine_init_done_notifier(Notifier *notify)
2414 {
2415     notifier_remove(notify);
2416 }
2417
2418 static void qemu_run_machine_init_done_notifiers(void)
2419 {
2420     machine_init_done = true;
2421     notifier_list_notify(&machine_init_done_notifiers, NULL);
2422 }
2423
2424 static const QEMUOption *lookup_opt(int argc, char **argv,
2425                                     const char **poptarg, int *poptind)
2426 {
2427     const QEMUOption *popt;
2428     int optind = *poptind;
2429     char *r = argv[optind];
2430     const char *optarg;
2431
2432     loc_set_cmdline(argv, optind, 1);
2433     optind++;
2434     /* Treat --foo the same as -foo.  */
2435     if (r[1] == '-')
2436         r++;
2437     popt = qemu_options;
2438     for(;;) {
2439         if (!popt->name) {
2440             error_report("invalid option");
2441             exit(1);
2442         }
2443         if (!strcmp(popt->name, r + 1))
2444             break;
2445         popt++;
2446     }
2447     if (popt->flags & HAS_ARG) {
2448         if (optind >= argc) {
2449             error_report("requires an argument");
2450             exit(1);
2451         }
2452         optarg = argv[optind++];
2453         loc_set_cmdline(argv, optind - 2, 2);
2454     } else {
2455         optarg = NULL;
2456     }
2457
2458     *poptarg = optarg;
2459     *poptind = optind;
2460
2461     return popt;
2462 }
2463
2464 static MachineClass *select_machine(void)
2465 {
2466     GSList *machines = object_class_get_list(TYPE_MACHINE, false);
2467     MachineClass *machine_class = find_default_machine(machines);
2468     const char *optarg;
2469     QemuOpts *opts;
2470     Location loc;
2471
2472     loc_push_none(&loc);
2473
2474     opts = qemu_get_machine_opts();
2475     qemu_opts_loc_restore(opts);
2476
2477     optarg = qemu_opt_get(opts, "type");
2478     if (optarg) {
2479         machine_class = machine_parse(optarg, machines);
2480     }
2481
2482     if (!machine_class) {
2483         error_report("No machine specified, and there is no default");
2484         error_printf("Use -machine help to list supported machines\n");
2485         exit(1);
2486     }
2487
2488     loc_pop(&loc);
2489     g_slist_free(machines);
2490     return machine_class;
2491 }
2492
2493 static int machine_set_property(void *opaque,
2494                                 const char *name, const char *value,
2495                                 Error **errp)
2496 {
2497     Object *obj = OBJECT(opaque);
2498     Error *local_err = NULL;
2499     char *p, *qom_name;
2500
2501     if (strcmp(name, "type") == 0) {
2502         return 0;
2503     }
2504
2505     qom_name = g_strdup(name);
2506     for (p = qom_name; *p; p++) {
2507         if (*p == '_') {
2508             *p = '-';
2509         }
2510     }
2511
2512     object_property_parse(obj, value, qom_name, &local_err);
2513     g_free(qom_name);
2514
2515     if (local_err) {
2516         error_propagate(errp, local_err);
2517         return -1;
2518     }
2519
2520     return 0;
2521 }
2522
2523
2524 /*
2525  * Initial object creation happens before all other
2526  * QEMU data types are created. The majority of objects
2527  * can be created at this point. The rng-egd object
2528  * cannot be created here, as it depends on the chardev
2529  * already existing.
2530  */
2531 static bool object_create_initial(const char *type, QemuOpts *opts)
2532 {
2533     if (user_creatable_print_help(type, opts)) {
2534         exit(0);
2535     }
2536
2537     /*
2538      * Objects should not be made "delayed" without a reason.  If you
2539      * add one, state the reason in a comment!
2540      */
2541
2542     /* Reason: rng-egd property "chardev" */
2543     if (g_str_equal(type, "rng-egd")) {
2544         return false;
2545     }
2546
2547 #if defined(CONFIG_VHOST_USER) && defined(CONFIG_LINUX)
2548     /* Reason: cryptodev-vhost-user property "chardev" */
2549     if (g_str_equal(type, "cryptodev-vhost-user")) {
2550         return false;
2551     }
2552 #endif
2553
2554     /*
2555      * Reason: filter-* property "netdev" etc.
2556      */
2557     if (g_str_equal(type, "filter-buffer") ||
2558         g_str_equal(type, "filter-dump") ||
2559         g_str_equal(type, "filter-mirror") ||
2560         g_str_equal(type, "filter-redirector") ||
2561         g_str_equal(type, "colo-compare") ||
2562         g_str_equal(type, "filter-rewriter") ||
2563         g_str_equal(type, "filter-replay")) {
2564         return false;
2565     }
2566
2567     /* Memory allocation by backends needs to be done
2568      * after configure_accelerator() (due to the tcg_enabled()
2569      * checks at memory_region_init_*()).
2570      *
2571      * Also, allocation of large amounts of memory may delay
2572      * chardev initialization for too long, and trigger timeouts
2573      * on software that waits for a monitor socket to be created
2574      * (e.g. libvirt).
2575      */
2576     if (g_str_has_prefix(type, "memory-backend-")) {
2577         return false;
2578     }
2579
2580     return true;
2581 }
2582
2583
2584 /*
2585  * The remainder of object creation happens after the
2586  * creation of chardev, fsdev, net clients and device data types.
2587  */
2588 static bool object_create_delayed(const char *type, QemuOpts *opts)
2589 {
2590     return !object_create_initial(type, opts);
2591 }
2592
2593
2594 static void set_memory_options(uint64_t *ram_slots, ram_addr_t *maxram_size,
2595                                MachineClass *mc)
2596 {
2597     uint64_t sz;
2598     const char *mem_str;
2599     const ram_addr_t default_ram_size = mc->default_ram_size;
2600     QemuOpts *opts = qemu_find_opts_singleton("memory");
2601     Location loc;
2602
2603     loc_push_none(&loc);
2604     qemu_opts_loc_restore(opts);
2605
2606     sz = 0;
2607     mem_str = qemu_opt_get(opts, "size");
2608     if (mem_str) {
2609         if (!*mem_str) {
2610             error_report("missing 'size' option value");
2611             exit(EXIT_FAILURE);
2612         }
2613
2614         sz = qemu_opt_get_size(opts, "size", ram_size);
2615
2616         /* Fix up legacy suffix-less format */
2617         if (g_ascii_isdigit(mem_str[strlen(mem_str) - 1])) {
2618             uint64_t overflow_check = sz;
2619
2620             sz *= MiB;
2621             if (sz / MiB != overflow_check) {
2622                 error_report("too large 'size' option value");
2623                 exit(EXIT_FAILURE);
2624             }
2625         }
2626     }
2627
2628     /* backward compatibility behaviour for case "-m 0" */
2629     if (sz == 0) {
2630         sz = default_ram_size;
2631     }
2632
2633     sz = QEMU_ALIGN_UP(sz, 8192);
2634     ram_size = sz;
2635     if (ram_size != sz) {
2636         error_report("ram size too large");
2637         exit(EXIT_FAILURE);
2638     }
2639
2640     /* store value for the future use */
2641     qemu_opt_set_number(opts, "size", ram_size, &error_abort);
2642     *maxram_size = ram_size;
2643
2644     if (qemu_opt_get(opts, "maxmem")) {
2645         uint64_t slots;
2646
2647         sz = qemu_opt_get_size(opts, "maxmem", 0);
2648         slots = qemu_opt_get_number(opts, "slots", 0);
2649         if (sz < ram_size) {
2650             error_report("invalid value of -m option maxmem: "
2651                          "maximum memory size (0x%" PRIx64 ") must be at least "
2652                          "the initial memory size (0x" RAM_ADDR_FMT ")",
2653                          sz, ram_size);
2654             exit(EXIT_FAILURE);
2655         } else if (slots && sz == ram_size) {
2656             error_report("invalid value of -m option maxmem: "
2657                          "memory slots were specified but maximum memory size "
2658                          "(0x%" PRIx64 ") is equal to the initial memory size "
2659                          "(0x" RAM_ADDR_FMT ")", sz, ram_size);
2660             exit(EXIT_FAILURE);
2661         }
2662
2663         *maxram_size = sz;
2664         *ram_slots = slots;
2665     } else if (qemu_opt_get(opts, "slots")) {
2666         error_report("invalid -m option value: missing 'maxmem' option");
2667         exit(EXIT_FAILURE);
2668     }
2669
2670     loc_pop(&loc);
2671 }
2672
2673 static int global_init_func(void *opaque, QemuOpts *opts, Error **errp)
2674 {
2675     GlobalProperty *g;
2676
2677     g = g_malloc0(sizeof(*g));
2678     g->driver   = qemu_opt_get(opts, "driver");
2679     g->property = qemu_opt_get(opts, "property");
2680     g->value    = qemu_opt_get(opts, "value");
2681     qdev_prop_register_global(g);
2682     return 0;
2683 }
2684
2685 static int qemu_read_default_config_file(void)
2686 {
2687     int ret;
2688
2689     ret = qemu_read_config_file(CONFIG_QEMU_CONFDIR "/qemu.conf");
2690     if (ret < 0 && ret != -ENOENT) {
2691         return ret;
2692     }
2693
2694     return 0;
2695 }
2696
2697 static void user_register_global_props(void)
2698 {
2699     qemu_opts_foreach(qemu_find_opts("global"),
2700                       global_init_func, NULL, NULL);
2701 }
2702
2703 int main(int argc, char **argv, char **envp)
2704 {
2705     int i;
2706     int snapshot, linux_boot;
2707     const char *initrd_filename;
2708     const char *kernel_filename, *kernel_cmdline;
2709     const char *boot_order = NULL;
2710     const char *boot_once = NULL;
2711     DisplayState *ds;
2712     QemuOpts *opts, *machine_opts;
2713     QemuOpts *icount_opts = NULL, *accel_opts = NULL;
2714     QemuOptsList *olist;
2715     int optind;
2716     const char *optarg;
2717     const char *loadvm = NULL;
2718     MachineClass *machine_class;
2719     const char *cpu_option;
2720     const char *vga_model = NULL;
2721     const char *qtest_chrdev = NULL;
2722     const char *qtest_log = NULL;
2723     const char *incoming = NULL;
2724     bool userconfig = true;
2725     bool nographic = false;
2726     int display_remote = 0;
2727     const char *log_mask = NULL;
2728     const char *log_file = NULL;
2729     char *trace_file = NULL;
2730     ram_addr_t maxram_size;
2731     uint64_t ram_slots = 0;
2732     FILE *vmstate_dump_file = NULL;
2733     Error *main_loop_err = NULL;
2734     Error *err = NULL;
2735     bool list_data_dirs = false;
2736     char *dir, **dirs;
2737     BlockdevOptionsQueue bdo_queue = QSIMPLEQ_HEAD_INITIALIZER(bdo_queue);
2738     QemuPluginList plugin_list = QTAILQ_HEAD_INITIALIZER(plugin_list);
2739
2740     os_set_line_buffering();
2741
2742     error_init(argv[0]);
2743     module_call_init(MODULE_INIT_TRACE);
2744
2745     qemu_init_cpu_list();
2746     qemu_init_cpu_loop();
2747
2748     qemu_mutex_lock_iothread();
2749
2750     atexit(qemu_run_exit_notifiers);
2751     qemu_init_exec_dir(argv[0]);
2752
2753     module_call_init(MODULE_INIT_QOM);
2754
2755     qemu_add_opts(&qemu_drive_opts);
2756     qemu_add_drive_opts(&qemu_legacy_drive_opts);
2757     qemu_add_drive_opts(&qemu_common_drive_opts);
2758     qemu_add_drive_opts(&qemu_drive_opts);
2759     qemu_add_drive_opts(&bdrv_runtime_opts);
2760     qemu_add_opts(&qemu_chardev_opts);
2761     qemu_add_opts(&qemu_device_opts);
2762     qemu_add_opts(&qemu_netdev_opts);
2763     qemu_add_opts(&qemu_nic_opts);
2764     qemu_add_opts(&qemu_net_opts);
2765     qemu_add_opts(&qemu_rtc_opts);
2766     qemu_add_opts(&qemu_global_opts);
2767     qemu_add_opts(&qemu_mon_opts);
2768     qemu_add_opts(&qemu_trace_opts);
2769     qemu_plugin_add_opts();
2770     qemu_add_opts(&qemu_option_rom_opts);
2771     qemu_add_opts(&qemu_machine_opts);
2772     qemu_add_opts(&qemu_accel_opts);
2773     qemu_add_opts(&qemu_mem_opts);
2774     qemu_add_opts(&qemu_smp_opts);
2775     qemu_add_opts(&qemu_boot_opts);
2776     qemu_add_opts(&qemu_add_fd_opts);
2777     qemu_add_opts(&qemu_object_opts);
2778     qemu_add_opts(&qemu_tpmdev_opts);
2779     qemu_add_opts(&qemu_realtime_opts);
2780     qemu_add_opts(&qemu_overcommit_opts);
2781     qemu_add_opts(&qemu_msg_opts);
2782     qemu_add_opts(&qemu_name_opts);
2783     qemu_add_opts(&qemu_numa_opts);
2784     qemu_add_opts(&qemu_icount_opts);
2785     qemu_add_opts(&qemu_semihosting_config_opts);
2786     qemu_add_opts(&qemu_fw_cfg_opts);
2787     module_call_init(MODULE_INIT_OPTS);
2788
2789     runstate_init();
2790     precopy_infrastructure_init();
2791     postcopy_infrastructure_init();
2792     monitor_init_globals();
2793
2794     if (qcrypto_init(&err) < 0) {
2795         error_reportf_err(err, "cannot initialize crypto: ");
2796         exit(1);
2797     }
2798
2799     QTAILQ_INIT(&vm_change_state_head);
2800     os_setup_early_signal_handling();
2801
2802     cpu_option = NULL;
2803     snapshot = 0;
2804
2805     nb_nics = 0;
2806
2807     bdrv_init_with_whitelist();
2808
2809     autostart = 1;
2810
2811     /* first pass of option parsing */
2812     optind = 1;
2813     while (optind < argc) {
2814         if (argv[optind][0] != '-') {
2815             /* disk image */
2816             optind++;
2817         } else {
2818             const QEMUOption *popt;
2819
2820             popt = lookup_opt(argc, argv, &optarg, &optind);
2821             switch (popt->index) {
2822             case QEMU_OPTION_nouserconfig:
2823                 userconfig = false;
2824                 break;
2825             }
2826         }
2827     }
2828
2829     if (userconfig) {
2830         if (qemu_read_default_config_file() < 0) {
2831             exit(1);
2832         }
2833     }
2834
2835     /* second pass of option parsing */
2836     optind = 1;
2837     for(;;) {
2838         if (optind >= argc)
2839             break;
2840         if (argv[optind][0] != '-') {
2841             loc_set_cmdline(argv, optind, 1);
2842             drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS);
2843         } else {
2844             const QEMUOption *popt;
2845
2846             popt = lookup_opt(argc, argv, &optarg, &optind);
2847             if (!(popt->arch_mask & arch_type)) {
2848                 error_report("Option not supported for this target");
2849                 exit(1);
2850             }
2851             switch(popt->index) {
2852             case QEMU_OPTION_cpu:
2853                 /* hw initialization will check this */
2854                 cpu_option = optarg;
2855                 break;
2856             case QEMU_OPTION_hda:
2857             case QEMU_OPTION_hdb:
2858             case QEMU_OPTION_hdc:
2859             case QEMU_OPTION_hdd:
2860                 drive_add(IF_DEFAULT, popt->index - QEMU_OPTION_hda, optarg,
2861                           HD_OPTS);
2862                 break;
2863             case QEMU_OPTION_blockdev:
2864                 {
2865                     Visitor *v;
2866                     BlockdevOptionsQueueEntry *bdo;
2867
2868                     v = qobject_input_visitor_new_str(optarg, "driver",
2869                                                       &error_fatal);
2870
2871                     bdo = g_new(BlockdevOptionsQueueEntry, 1);
2872                     visit_type_BlockdevOptions(v, NULL, &bdo->bdo,
2873                                                &error_fatal);
2874                     visit_free(v);
2875                     loc_save(&bdo->loc);
2876                     QSIMPLEQ_INSERT_TAIL(&bdo_queue, bdo, entry);
2877                     break;
2878                 }
2879             case QEMU_OPTION_drive:
2880                 if (drive_def(optarg) == NULL) {
2881                     exit(1);
2882                 }
2883                 break;
2884             case QEMU_OPTION_set:
2885                 if (qemu_set_option(optarg) != 0)
2886                     exit(1);
2887                 break;
2888             case QEMU_OPTION_global:
2889                 if (qemu_global_option(optarg) != 0)
2890                     exit(1);
2891                 break;
2892             case QEMU_OPTION_mtdblock:
2893                 drive_add(IF_MTD, -1, optarg, MTD_OPTS);
2894                 break;
2895             case QEMU_OPTION_sd:
2896                 drive_add(IF_SD, -1, optarg, SD_OPTS);
2897                 break;
2898             case QEMU_OPTION_pflash:
2899                 drive_add(IF_PFLASH, -1, optarg, PFLASH_OPTS);
2900                 break;
2901             case QEMU_OPTION_snapshot:
2902                 {
2903                     Error *blocker = NULL;
2904                     snapshot = 1;
2905                     error_setg(&blocker, QERR_REPLAY_NOT_SUPPORTED,
2906                                "-snapshot");
2907                     replay_add_blocker(blocker);
2908                 }
2909                 break;
2910             case QEMU_OPTION_numa:
2911                 opts = qemu_opts_parse_noisily(qemu_find_opts("numa"),
2912                                                optarg, true);
2913                 if (!opts) {
2914                     exit(1);
2915                 }
2916                 break;
2917             case QEMU_OPTION_display:
2918                 parse_display(optarg);
2919                 break;
2920             case QEMU_OPTION_nographic:
2921                 olist = qemu_find_opts("machine");
2922                 qemu_opts_parse_noisily(olist, "graphics=off", false);
2923                 nographic = true;
2924                 dpy.type = DISPLAY_TYPE_NONE;
2925                 break;
2926             case QEMU_OPTION_curses:
2927 #ifdef CONFIG_CURSES
2928                 dpy.type = DISPLAY_TYPE_CURSES;
2929 #else
2930                 error_report("curses or iconv support is disabled");
2931                 exit(1);
2932 #endif
2933                 break;
2934             case QEMU_OPTION_portrait:
2935                 graphic_rotate = 90;
2936                 break;
2937             case QEMU_OPTION_rotate:
2938                 graphic_rotate = strtol(optarg, (char **) &optarg, 10);
2939                 if (graphic_rotate != 0 && graphic_rotate != 90 &&
2940                     graphic_rotate != 180 && graphic_rotate != 270) {
2941                     error_report("only 90, 180, 270 deg rotation is available");
2942                     exit(1);
2943                 }
2944                 break;
2945             case QEMU_OPTION_kernel:
2946                 qemu_opts_set(qemu_find_opts("machine"), 0, "kernel", optarg,
2947                               &error_abort);
2948                 break;
2949             case QEMU_OPTION_initrd:
2950                 qemu_opts_set(qemu_find_opts("machine"), 0, "initrd", optarg,
2951                               &error_abort);
2952                 break;
2953             case QEMU_OPTION_append:
2954                 qemu_opts_set(qemu_find_opts("machine"), 0, "append", optarg,
2955                               &error_abort);
2956                 break;
2957             case QEMU_OPTION_dtb:
2958                 qemu_opts_set(qemu_find_opts("machine"), 0, "dtb", optarg,
2959                               &error_abort);
2960                 break;
2961             case QEMU_OPTION_cdrom:
2962                 drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS);
2963                 break;
2964             case QEMU_OPTION_boot:
2965                 opts = qemu_opts_parse_noisily(qemu_find_opts("boot-opts"),
2966                                                optarg, true);
2967                 if (!opts) {
2968                     exit(1);
2969                 }
2970                 break;
2971             case QEMU_OPTION_fda:
2972             case QEMU_OPTION_fdb:
2973                 drive_add(IF_FLOPPY, popt->index - QEMU_OPTION_fda,
2974                           optarg, FD_OPTS);
2975                 break;
2976             case QEMU_OPTION_no_fd_bootchk:
2977                 fd_bootchk = 0;
2978                 break;
2979             case QEMU_OPTION_netdev:
2980                 default_net = 0;
2981                 if (net_client_parse(qemu_find_opts("netdev"), optarg) == -1) {
2982                     exit(1);
2983                 }
2984                 break;
2985             case QEMU_OPTION_nic:
2986                 default_net = 0;
2987                 if (net_client_parse(qemu_find_opts("nic"), optarg) == -1) {
2988                     exit(1);
2989                 }
2990                 break;
2991             case QEMU_OPTION_net:
2992                 default_net = 0;
2993                 if (net_client_parse(qemu_find_opts("net"), optarg) == -1) {
2994                     exit(1);
2995                 }
2996                 break;
2997 #ifdef CONFIG_LIBISCSI
2998             case QEMU_OPTION_iscsi:
2999                 opts = qemu_opts_parse_noisily(qemu_find_opts("iscsi"),
3000                                                optarg, false);
3001                 if (!opts) {
3002                     exit(1);
3003                 }
3004                 break;
3005 #endif
3006             case QEMU_OPTION_audio_help:
3007                 audio_legacy_help();
3008                 exit (0);
3009                 break;
3010             case QEMU_OPTION_audiodev:
3011                 audio_parse_option(optarg);
3012                 break;
3013             case QEMU_OPTION_soundhw:
3014                 select_soundhw (optarg);
3015                 break;
3016             case QEMU_OPTION_h:
3017                 help(0);
3018                 break;
3019             case QEMU_OPTION_version:
3020                 version();
3021                 exit(0);
3022                 break;
3023             case QEMU_OPTION_m:
3024                 opts = qemu_opts_parse_noisily(qemu_find_opts("memory"),
3025                                                optarg, true);
3026                 if (!opts) {
3027                     exit(EXIT_FAILURE);
3028                 }
3029                 break;
3030 #ifdef CONFIG_TPM
3031             case QEMU_OPTION_tpmdev:
3032                 if (tpm_config_parse(qemu_find_opts("tpmdev"), optarg) < 0) {
3033                     exit(1);
3034                 }
3035                 break;
3036 #endif
3037             case QEMU_OPTION_mempath:
3038                 mem_path = optarg;
3039                 break;
3040             case QEMU_OPTION_mem_prealloc:
3041                 mem_prealloc = 1;
3042                 break;
3043             case QEMU_OPTION_d:
3044                 log_mask = optarg;
3045                 break;
3046             case QEMU_OPTION_D:
3047                 log_file = optarg;
3048                 break;
3049             case QEMU_OPTION_DFILTER:
3050                 qemu_set_dfilter_ranges(optarg, &error_fatal);
3051                 break;
3052             case QEMU_OPTION_seed:
3053                 qemu_guest_random_seed_main(optarg, &error_fatal);
3054                 break;
3055             case QEMU_OPTION_s:
3056                 add_device_config(DEV_GDB, "tcp::" DEFAULT_GDBSTUB_PORT);
3057                 break;
3058             case QEMU_OPTION_gdb:
3059                 add_device_config(DEV_GDB, optarg);
3060                 break;
3061             case QEMU_OPTION_L:
3062                 if (is_help_option(optarg)) {
3063                     list_data_dirs = true;
3064                 } else {
3065                     qemu_add_data_dir(optarg);
3066                 }
3067                 break;
3068             case QEMU_OPTION_bios:
3069                 qemu_opts_set(qemu_find_opts("machine"), 0, "firmware", optarg,
3070                               &error_abort);
3071                 break;
3072             case QEMU_OPTION_singlestep:
3073                 singlestep = 1;
3074                 break;
3075             case QEMU_OPTION_S:
3076                 autostart = 0;
3077                 break;
3078             case QEMU_OPTION_k:
3079                 keyboard_layout = optarg;
3080                 break;
3081             case QEMU_OPTION_vga:
3082                 vga_model = optarg;
3083                 default_vga = 0;
3084                 break;
3085             case QEMU_OPTION_g:
3086                 {
3087                     const char *p;
3088                     int w, h, depth;
3089                     p = optarg;
3090                     w = strtol(p, (char **)&p, 10);
3091                     if (w <= 0) {
3092                     graphic_error:
3093                         error_report("invalid resolution or depth");
3094                         exit(1);
3095                     }
3096                     if (*p != 'x')
3097                         goto graphic_error;
3098                     p++;
3099                     h = strtol(p, (char **)&p, 10);
3100                     if (h <= 0)
3101                         goto graphic_error;
3102                     if (*p == 'x') {
3103                         p++;
3104                         depth = strtol(p, (char **)&p, 10);
3105                         if (depth != 1 && depth != 2 && depth != 4 &&
3106                             depth != 8 && depth != 15 && depth != 16 &&
3107                             depth != 24 && depth != 32)
3108                             goto graphic_error;
3109                     } else if (*p == '\0') {
3110                         depth = graphic_depth;
3111                     } else {
3112                         goto graphic_error;
3113                     }
3114
3115                     graphic_width = w;
3116                     graphic_height = h;
3117                     graphic_depth = depth;
3118                 }
3119                 break;
3120             case QEMU_OPTION_echr:
3121                 {
3122                     char *r;
3123                     term_escape_char = strtol(optarg, &r, 0);
3124                     if (r == optarg)
3125                         printf("Bad argument to echr\n");
3126                     break;
3127                 }
3128             case QEMU_OPTION_monitor:
3129                 default_monitor = 0;
3130                 if (strncmp(optarg, "none", 4)) {
3131                     monitor_parse(optarg, "readline", false);
3132                 }
3133                 break;
3134             case QEMU_OPTION_qmp:
3135                 monitor_parse(optarg, "control", false);
3136                 default_monitor = 0;
3137                 break;
3138             case QEMU_OPTION_qmp_pretty:
3139                 monitor_parse(optarg, "control", true);
3140                 default_monitor = 0;
3141                 break;
3142             case QEMU_OPTION_mon:
3143                 opts = qemu_opts_parse_noisily(qemu_find_opts("mon"), optarg,
3144                                                true);
3145                 if (!opts) {
3146                     exit(1);
3147                 }
3148                 default_monitor = 0;
3149                 break;
3150             case QEMU_OPTION_chardev:
3151                 opts = qemu_opts_parse_noisily(qemu_find_opts("chardev"),
3152                                                optarg, true);
3153                 if (!opts) {
3154                     exit(1);
3155                 }
3156                 break;
3157             case QEMU_OPTION_fsdev:
3158                 olist = qemu_find_opts("fsdev");
3159                 if (!olist) {
3160                     error_report("fsdev support is disabled");
3161                     exit(1);
3162                 }
3163                 opts = qemu_opts_parse_noisily(olist, optarg, true);
3164                 if (!opts) {
3165                     exit(1);
3166                 }
3167                 break;
3168             case QEMU_OPTION_virtfs: {
3169                 QemuOpts *fsdev;
3170                 QemuOpts *device;
3171                 const char *writeout, *sock_fd, *socket, *path, *security_model,
3172                            *multidevs;
3173
3174                 olist = qemu_find_opts("virtfs");
3175                 if (!olist) {
3176                     error_report("virtfs support is disabled");
3177                     exit(1);
3178                 }
3179                 opts = qemu_opts_parse_noisily(olist, optarg, true);
3180                 if (!opts) {
3181                     exit(1);
3182                 }
3183
3184                 if (qemu_opt_get(opts, "fsdriver") == NULL ||
3185                     qemu_opt_get(opts, "mount_tag") == NULL) {
3186                     error_report("Usage: -virtfs fsdriver,mount_tag=tag");
3187                     exit(1);
3188                 }
3189                 fsdev = qemu_opts_create(qemu_find_opts("fsdev"),
3190                                          qemu_opts_id(opts) ?:
3191                                          qemu_opt_get(opts, "mount_tag"),
3192                                          1, NULL);
3193                 if (!fsdev) {
3194                     error_report("duplicate or invalid fsdev id: %s",
3195                                  qemu_opt_get(opts, "mount_tag"));
3196                     exit(1);
3197                 }
3198
3199                 writeout = qemu_opt_get(opts, "writeout");
3200                 if (writeout) {
3201 #ifdef CONFIG_SYNC_FILE_RANGE
3202                     qemu_opt_set(fsdev, "writeout", writeout, &error_abort);
3203 #else
3204                     error_report("writeout=immediate not supported "
3205                                  "on this platform");
3206                     exit(1);
3207 #endif
3208                 }
3209                 qemu_opt_set(fsdev, "fsdriver",
3210                              qemu_opt_get(opts, "fsdriver"), &error_abort);
3211                 path = qemu_opt_get(opts, "path");
3212                 if (path) {
3213                     qemu_opt_set(fsdev, "path", path, &error_abort);
3214                 }
3215                 security_model = qemu_opt_get(opts, "security_model");
3216                 if (security_model) {
3217                     qemu_opt_set(fsdev, "security_model", security_model,
3218                                  &error_abort);
3219                 }
3220                 socket = qemu_opt_get(opts, "socket");
3221                 if (socket) {
3222                     qemu_opt_set(fsdev, "socket", socket, &error_abort);
3223                 }
3224                 sock_fd = qemu_opt_get(opts, "sock_fd");
3225                 if (sock_fd) {
3226                     qemu_opt_set(fsdev, "sock_fd", sock_fd, &error_abort);
3227                 }
3228
3229                 qemu_opt_set_bool(fsdev, "readonly",
3230                                   qemu_opt_get_bool(opts, "readonly", 0),
3231                                   &error_abort);
3232                 multidevs = qemu_opt_get(opts, "multidevs");
3233                 if (multidevs) {
3234                     qemu_opt_set(fsdev, "multidevs", multidevs, &error_abort);
3235                 }
3236                 device = qemu_opts_create(qemu_find_opts("device"), NULL, 0,
3237                                           &error_abort);
3238                 qemu_opt_set(device, "driver", "virtio-9p-pci", &error_abort);
3239                 qemu_opt_set(device, "fsdev",
3240                              qemu_opts_id(fsdev), &error_abort);
3241                 qemu_opt_set(device, "mount_tag",
3242                              qemu_opt_get(opts, "mount_tag"), &error_abort);
3243                 break;
3244             }
3245             case QEMU_OPTION_serial:
3246                 add_device_config(DEV_SERIAL, optarg);
3247                 default_serial = 0;
3248                 if (strncmp(optarg, "mon:", 4) == 0) {
3249                     default_monitor = 0;
3250                 }
3251                 break;
3252             case QEMU_OPTION_watchdog:
3253                 if (watchdog) {
3254                     error_report("only one watchdog option may be given");
3255                     return 1;
3256                 }
3257                 watchdog = optarg;
3258                 break;
3259             case QEMU_OPTION_watchdog_action:
3260                 if (select_watchdog_action(optarg) == -1) {
3261                     error_report("unknown -watchdog-action parameter");
3262                     exit(1);
3263                 }
3264                 break;
3265             case QEMU_OPTION_parallel:
3266                 add_device_config(DEV_PARALLEL, optarg);
3267                 default_parallel = 0;
3268                 if (strncmp(optarg, "mon:", 4) == 0) {
3269                     default_monitor = 0;
3270                 }
3271                 break;
3272             case QEMU_OPTION_debugcon:
3273                 add_device_config(DEV_DEBUGCON, optarg);
3274                 break;
3275             case QEMU_OPTION_loadvm:
3276                 loadvm = optarg;
3277                 break;
3278             case QEMU_OPTION_full_screen:
3279                 dpy.has_full_screen = true;
3280                 dpy.full_screen = true;
3281                 break;
3282             case QEMU_OPTION_alt_grab:
3283                 alt_grab = 1;
3284                 break;
3285             case QEMU_OPTION_ctrl_grab:
3286                 ctrl_grab = 1;
3287                 break;
3288             case QEMU_OPTION_no_quit:
3289                 dpy.has_window_close = true;
3290                 dpy.window_close = false;
3291                 break;
3292             case QEMU_OPTION_sdl:
3293 #ifdef CONFIG_SDL
3294                 dpy.type = DISPLAY_TYPE_SDL;
3295                 break;
3296 #else
3297                 error_report("SDL support is disabled");
3298                 exit(1);
3299 #endif
3300             case QEMU_OPTION_pidfile:
3301                 pid_file = optarg;
3302                 break;
3303             case QEMU_OPTION_win2k_hack:
3304                 win2k_install_hack = 1;
3305                 break;
3306             case QEMU_OPTION_acpitable:
3307                 opts = qemu_opts_parse_noisily(qemu_find_opts("acpi"),
3308                                                optarg, true);
3309                 if (!opts) {
3310                     exit(1);
3311                 }
3312                 acpi_table_add(opts, &error_fatal);
3313                 break;
3314             case QEMU_OPTION_smbios:
3315                 opts = qemu_opts_parse_noisily(qemu_find_opts("smbios"),
3316                                                optarg, false);
3317                 if (!opts) {
3318                     exit(1);
3319                 }
3320                 smbios_entry_add(opts, &error_fatal);
3321                 break;
3322             case QEMU_OPTION_fwcfg:
3323                 opts = qemu_opts_parse_noisily(qemu_find_opts("fw_cfg"),
3324                                                optarg, true);
3325                 if (opts == NULL) {
3326                     exit(1);
3327                 }
3328                 break;
3329             case QEMU_OPTION_preconfig:
3330                 preconfig_exit_requested = false;
3331                 break;
3332             case QEMU_OPTION_enable_kvm:
3333                 olist = qemu_find_opts("machine");
3334                 qemu_opts_parse_noisily(olist, "accel=kvm", false);
3335                 break;
3336             case QEMU_OPTION_M:
3337             case QEMU_OPTION_machine:
3338                 olist = qemu_find_opts("machine");
3339                 opts = qemu_opts_parse_noisily(olist, optarg, true);
3340                 if (!opts) {
3341                     exit(1);
3342                 }
3343                 break;
3344              case QEMU_OPTION_no_kvm:
3345                 olist = qemu_find_opts("machine");
3346                 qemu_opts_parse_noisily(olist, "accel=tcg", false);
3347                 break;
3348             case QEMU_OPTION_accel:
3349                 accel_opts = qemu_opts_parse_noisily(qemu_find_opts("accel"),
3350                                                      optarg, true);
3351                 optarg = qemu_opt_get(accel_opts, "accel");
3352                 if (!optarg || is_help_option(optarg)) {
3353                     printf("Accelerators supported in QEMU binary:\n");
3354                     GSList *el, *accel_list = object_class_get_list(TYPE_ACCEL,
3355                                                                     false);
3356                     for (el = accel_list; el; el = el->next) {
3357                         gchar *typename = g_strdup(object_class_get_name(
3358                                                    OBJECT_CLASS(el->data)));
3359                         /* omit qtest which is used for tests only */
3360                         if (g_strcmp0(typename, ACCEL_CLASS_NAME("qtest")) &&
3361                             g_str_has_suffix(typename, ACCEL_CLASS_SUFFIX)) {
3362                             gchar **optname = g_strsplit(typename,
3363                                                          ACCEL_CLASS_SUFFIX, 0);
3364                             printf("%s\n", optname[0]);
3365                             g_free(optname);
3366                         }
3367                         g_free(typename);
3368                     }
3369                     g_slist_free(accel_list);
3370                     exit(0);
3371                 }
3372                 if (optarg && strchr(optarg, ':')) {
3373                     error_report("Don't use ':' with -accel, "
3374                                  "use -M accel=... for now instead");
3375                     exit(1);
3376                 }
3377                 opts = qemu_opts_create(qemu_find_opts("machine"), NULL,
3378                                         false, &error_abort);
3379                 qemu_opt_set(opts, "accel", optarg, &error_abort);
3380                 break;
3381             case QEMU_OPTION_usb:
3382                 olist = qemu_find_opts("machine");
3383                 qemu_opts_parse_noisily(olist, "usb=on", false);
3384                 break;
3385             case QEMU_OPTION_usbdevice:
3386                 error_report("'-usbdevice' is deprecated, please use "
3387                              "'-device usb-...' instead");
3388                 olist = qemu_find_opts("machine");
3389                 qemu_opts_parse_noisily(olist, "usb=on", false);
3390                 add_device_config(DEV_USB, optarg);
3391                 break;
3392             case QEMU_OPTION_device:
3393                 if (!qemu_opts_parse_noisily(qemu_find_opts("device"),
3394                                              optarg, true)) {
3395                     exit(1);
3396                 }
3397                 break;
3398             case QEMU_OPTION_smp:
3399                 if (!qemu_opts_parse_noisily(qemu_find_opts("smp-opts"),
3400                                              optarg, true)) {
3401                     exit(1);
3402                 }
3403                 break;
3404             case QEMU_OPTION_vnc:
3405                 vnc_parse(optarg, &error_fatal);
3406                 break;
3407             case QEMU_OPTION_no_acpi:
3408                 acpi_enabled = 0;
3409                 break;
3410             case QEMU_OPTION_no_hpet:
3411                 no_hpet = 1;
3412                 break;
3413             case QEMU_OPTION_no_reboot:
3414                 no_reboot = 1;
3415                 break;
3416             case QEMU_OPTION_no_shutdown:
3417                 no_shutdown = 1;
3418                 break;
3419             case QEMU_OPTION_show_cursor:
3420                 cursor_hide = 0;
3421                 break;
3422             case QEMU_OPTION_uuid:
3423                 if (qemu_uuid_parse(optarg, &qemu_uuid) < 0) {
3424                     error_report("failed to parse UUID string: wrong format");
3425                     exit(1);
3426                 }
3427                 qemu_uuid_set = true;
3428                 break;
3429             case QEMU_OPTION_option_rom:
3430                 if (nb_option_roms >= MAX_OPTION_ROMS) {
3431                     error_report("too many option ROMs");
3432                     exit(1);
3433                 }
3434                 opts = qemu_opts_parse_noisily(qemu_find_opts("option-rom"),
3435                                                optarg, true);
3436                 if (!opts) {
3437                     exit(1);
3438                 }
3439                 option_rom[nb_option_roms].name = qemu_opt_get(opts, "romfile");
3440                 option_rom[nb_option_roms].bootindex =
3441                     qemu_opt_get_number(opts, "bootindex", -1);
3442                 if (!option_rom[nb_option_roms].name) {
3443                     error_report("Option ROM file is not specified");
3444                     exit(1);
3445                 }
3446                 nb_option_roms++;
3447                 break;
3448             case QEMU_OPTION_semihosting:
3449                 qemu_semihosting_enable();
3450                 break;
3451             case QEMU_OPTION_semihosting_config:
3452                 if (qemu_semihosting_config_options(optarg) != 0) {
3453                     exit(1);
3454                 }
3455                 break;
3456             case QEMU_OPTION_name:
3457                 opts = qemu_opts_parse_noisily(qemu_find_opts("name"),
3458                                                optarg, true);
3459                 if (!opts) {
3460                     exit(1);
3461                 }
3462                 break;
3463             case QEMU_OPTION_prom_env:
3464                 if (nb_prom_envs >= MAX_PROM_ENVS) {
3465                     error_report("too many prom variables");
3466                     exit(1);
3467                 }
3468                 prom_envs[nb_prom_envs] = optarg;
3469                 nb_prom_envs++;
3470                 break;
3471             case QEMU_OPTION_old_param:
3472                 old_param = 1;
3473                 break;
3474             case QEMU_OPTION_rtc:
3475                 opts = qemu_opts_parse_noisily(qemu_find_opts("rtc"), optarg,
3476                                                false);
3477                 if (!opts) {
3478                     exit(1);
3479                 }
3480                 break;
3481             case QEMU_OPTION_tb_size:
3482 #ifndef CONFIG_TCG
3483                 error_report("TCG is disabled");
3484                 exit(1);
3485 #endif
3486                 if (qemu_strtoul(optarg, NULL, 0, &tcg_tb_size) < 0) {
3487                     error_report("Invalid argument to -tb-size");
3488                     exit(1);
3489                 }
3490                 break;
3491             case QEMU_OPTION_icount:
3492                 icount_opts = qemu_opts_parse_noisily(qemu_find_opts("icount"),
3493                                                       optarg, true);
3494                 if (!icount_opts) {
3495                     exit(1);
3496                 }
3497                 break;
3498             case QEMU_OPTION_incoming:
3499                 if (!incoming) {
3500                     runstate_set(RUN_STATE_INMIGRATE);
3501                 }
3502                 incoming = optarg;
3503                 break;
3504             case QEMU_OPTION_only_migratable:
3505                 only_migratable = 1;
3506                 break;
3507             case QEMU_OPTION_nodefaults:
3508                 has_defaults = 0;
3509                 break;
3510             case QEMU_OPTION_xen_domid:
3511                 if (!(xen_available())) {
3512                     error_report("Option not supported for this target");
3513                     exit(1);
3514                 }
3515                 xen_domid = atoi(optarg);
3516                 break;
3517             case QEMU_OPTION_xen_attach:
3518                 if (!(xen_available())) {
3519                     error_report("Option not supported for this target");
3520                     exit(1);
3521                 }
3522                 xen_mode = XEN_ATTACH;
3523                 break;
3524             case QEMU_OPTION_xen_domid_restrict:
3525                 if (!(xen_available())) {
3526                     error_report("Option not supported for this target");
3527                     exit(1);
3528                 }
3529                 xen_domid_restrict = true;
3530                 break;
3531             case QEMU_OPTION_trace:
3532                 g_free(trace_file);
3533                 trace_file = trace_opt_parse(optarg);
3534                 break;
3535             case QEMU_OPTION_plugin:
3536                 qemu_plugin_opt_parse(optarg, &plugin_list);
3537                 break;
3538             case QEMU_OPTION_readconfig:
3539                 {
3540                     int ret = qemu_read_config_file(optarg);
3541                     if (ret < 0) {
3542                         error_report("read config %s: %s", optarg,
3543                                      strerror(-ret));
3544                         exit(1);
3545                     }
3546                     break;
3547                 }
3548             case QEMU_OPTION_spice:
3549                 olist = qemu_find_opts("spice");
3550                 if (!olist) {
3551                     error_report("spice support is disabled");
3552                     exit(1);
3553                 }
3554                 opts = qemu_opts_parse_noisily(olist, optarg, false);
3555                 if (!opts) {
3556                     exit(1);
3557                 }
3558                 display_remote++;
3559                 break;
3560             case QEMU_OPTION_writeconfig:
3561                 {
3562                     FILE *fp;
3563                     if (strcmp(optarg, "-") == 0) {
3564                         fp = stdout;
3565                     } else {
3566                         fp = fopen(optarg, "w");
3567                         if (fp == NULL) {
3568                             error_report("open %s: %s", optarg,
3569                                          strerror(errno));
3570                             exit(1);
3571                         }
3572                     }
3573                     qemu_config_write(fp);
3574                     if (fp != stdout) {
3575                         fclose(fp);
3576                     }
3577                     break;
3578                 }
3579             case QEMU_OPTION_qtest:
3580                 qtest_chrdev = optarg;
3581                 break;
3582             case QEMU_OPTION_qtest_log:
3583                 qtest_log = optarg;
3584                 break;
3585             case QEMU_OPTION_sandbox:
3586                 olist = qemu_find_opts("sandbox");
3587                 if (!olist) {
3588 #ifndef CONFIG_SECCOMP
3589                     error_report("-sandbox support is not enabled "
3590                                  "in this QEMU binary");
3591 #endif
3592                     exit(1);
3593                 }
3594
3595                 opts = qemu_opts_parse_noisily(olist, optarg, true);
3596                 if (!opts) {
3597                     exit(1);
3598                 }
3599                 break;
3600             case QEMU_OPTION_add_fd:
3601 #ifndef _WIN32
3602                 opts = qemu_opts_parse_noisily(qemu_find_opts("add-fd"),
3603                                                optarg, false);
3604                 if (!opts) {
3605                     exit(1);
3606                 }
3607 #else
3608                 error_report("File descriptor passing is disabled on this "
3609                              "platform");
3610                 exit(1);
3611 #endif
3612                 break;
3613             case QEMU_OPTION_object:
3614                 opts = qemu_opts_parse_noisily(qemu_find_opts("object"),
3615                                                optarg, true);
3616                 if (!opts) {
3617                     exit(1);
3618                 }
3619                 break;
3620             case QEMU_OPTION_realtime:
3621                 warn_report("'-realtime mlock=...' is deprecated, please use "
3622                              "'-overcommit mem-lock=...' instead");
3623                 opts = qemu_opts_parse_noisily(qemu_find_opts("realtime"),
3624                                                optarg, false);
3625                 if (!opts) {
3626                     exit(1);
3627                 }
3628                 /* Don't override the -overcommit option if set */
3629                 enable_mlock = enable_mlock ||
3630                     qemu_opt_get_bool(opts, "mlock", true);
3631                 break;
3632             case QEMU_OPTION_overcommit:
3633                 opts = qemu_opts_parse_noisily(qemu_find_opts("overcommit"),
3634                                                optarg, false);
3635                 if (!opts) {
3636                     exit(1);
3637                 }
3638                 /* Don't override the -realtime option if set */
3639                 enable_mlock = enable_mlock ||
3640                     qemu_opt_get_bool(opts, "mem-lock", false);
3641                 enable_cpu_pm = qemu_opt_get_bool(opts, "cpu-pm", false);
3642                 break;
3643             case QEMU_OPTION_msg:
3644                 opts = qemu_opts_parse_noisily(qemu_find_opts("msg"), optarg,
3645                                                false);
3646                 if (!opts) {
3647                     exit(1);
3648                 }
3649                 configure_msg(opts);
3650                 break;
3651             case QEMU_OPTION_dump_vmstate:
3652                 if (vmstate_dump_file) {
3653                     error_report("only one '-dump-vmstate' "
3654                                  "option may be given");
3655                     exit(1);
3656                 }
3657                 vmstate_dump_file = fopen(optarg, "w");
3658                 if (vmstate_dump_file == NULL) {
3659                     error_report("open %s: %s", optarg, strerror(errno));
3660                     exit(1);
3661                 }
3662                 break;
3663             case QEMU_OPTION_enable_sync_profile:
3664                 qsp_enable();
3665                 break;
3666             case QEMU_OPTION_nouserconfig:
3667                 /* Nothing to be parsed here. Especially, do not error out below. */
3668                 break;
3669             default:
3670                 if (os_parse_cmd_args(popt->index, optarg)) {
3671                     error_report("Option not supported in this build");
3672                     exit(1);
3673                 }
3674             }
3675         }
3676     }
3677     /*
3678      * Clear error location left behind by the loop.
3679      * Best done right after the loop.  Do not insert code here!
3680      */
3681     loc_set_none();
3682
3683     user_register_global_props();
3684
3685     replay_configure(icount_opts);
3686
3687     if (incoming && !preconfig_exit_requested) {
3688         error_report("'preconfig' and 'incoming' options are "
3689                      "mutually exclusive");
3690         exit(EXIT_FAILURE);
3691     }
3692
3693     configure_rtc(qemu_find_opts_singleton("rtc"));
3694
3695     machine_class = select_machine();
3696     object_set_machine_compat_props(machine_class->compat_props);
3697
3698     set_memory_options(&ram_slots, &maxram_size, machine_class);
3699
3700     os_daemonize();
3701     rcu_disable_atfork();
3702
3703     if (pid_file && !qemu_write_pidfile(pid_file, &err)) {
3704         error_reportf_err(err, "cannot create PID file: ");
3705         exit(1);
3706     }
3707
3708     qemu_unlink_pidfile_notifier.notify = qemu_unlink_pidfile;
3709     qemu_add_exit_notifier(&qemu_unlink_pidfile_notifier);
3710
3711     if (qemu_init_main_loop(&main_loop_err)) {
3712         error_report_err(main_loop_err);
3713         exit(1);
3714     }
3715
3716 #ifdef CONFIG_SECCOMP
3717     olist = qemu_find_opts_err("sandbox", NULL);
3718     if (olist) {
3719         qemu_opts_foreach(olist, parse_sandbox, NULL, &error_fatal);
3720     }
3721 #endif
3722
3723     qemu_opts_foreach(qemu_find_opts("name"),
3724                       parse_name, NULL, &error_fatal);
3725
3726 #ifndef _WIN32
3727     qemu_opts_foreach(qemu_find_opts("add-fd"),
3728                       parse_add_fd, NULL, &error_fatal);
3729
3730     qemu_opts_foreach(qemu_find_opts("add-fd"),
3731                       cleanup_add_fd, NULL, &error_fatal);
3732 #endif
3733
3734     current_machine = MACHINE(object_new(object_class_get_name(
3735                           OBJECT_CLASS(machine_class))));
3736     if (machine_help_func(qemu_get_machine_opts(), current_machine)) {
3737         exit(0);
3738     }
3739     object_property_add_child(object_get_root(), "machine",
3740                               OBJECT(current_machine), &error_abort);
3741     object_property_add_child(container_get(OBJECT(current_machine),
3742                                             "/unattached"),
3743                               "sysbus", OBJECT(sysbus_get_default()),
3744                               NULL);
3745
3746     if (machine_class->minimum_page_bits) {
3747         if (!set_preferred_target_page_bits(machine_class->minimum_page_bits)) {
3748             /* This would be a board error: specifying a minimum smaller than
3749              * a target's compile-time fixed setting.
3750              */
3751             g_assert_not_reached();
3752         }
3753     }
3754
3755     cpu_exec_init_all();
3756
3757     if (machine_class->hw_version) {
3758         qemu_set_hw_version(machine_class->hw_version);
3759     }
3760
3761     if (cpu_option && is_help_option(cpu_option)) {
3762         list_cpus(cpu_option);
3763         exit(0);
3764     }
3765
3766     if (!trace_init_backends()) {
3767         exit(1);
3768     }
3769     trace_init_file(trace_file);
3770
3771     /* Open the logfile at this point and set the log mask if necessary.
3772      */
3773     if (log_file) {
3774         qemu_set_log_filename(log_file, &error_fatal);
3775     }
3776
3777     if (log_mask) {
3778         int mask;
3779         mask = qemu_str_to_log_mask(log_mask);
3780         if (!mask) {
3781             qemu_print_log_usage(stdout);
3782             exit(1);
3783         }
3784         qemu_set_log(mask);
3785     } else {
3786         qemu_set_log(0);
3787     }
3788
3789     /* add configured firmware directories */
3790     dirs = g_strsplit(CONFIG_QEMU_FIRMWAREPATH, G_SEARCHPATH_SEPARATOR_S, 0);
3791     for (i = 0; dirs[i] != NULL; i++) {
3792         qemu_add_data_dir(dirs[i]);
3793     }
3794     g_strfreev(dirs);
3795
3796     /* try to find datadir relative to the executable path */
3797     dir = os_find_datadir();
3798     qemu_add_data_dir(dir);
3799     g_free(dir);
3800
3801     /* add the datadir specified when building */
3802     qemu_add_data_dir(CONFIG_QEMU_DATADIR);
3803
3804     /* -L help lists the data directories and exits. */
3805     if (list_data_dirs) {
3806         for (i = 0; i < data_dir_idx; i++) {
3807             printf("%s\n", data_dir[i]);
3808         }
3809         exit(0);
3810     }
3811
3812     /* machine_class: default to UP */
3813     machine_class->max_cpus = machine_class->max_cpus ?: 1;
3814     machine_class->min_cpus = machine_class->min_cpus ?: 1;
3815     machine_class->default_cpus = machine_class->default_cpus ?: 1;
3816
3817     /* default to machine_class->default_cpus */
3818     current_machine->smp.cpus = machine_class->default_cpus;
3819     current_machine->smp.max_cpus = machine_class->default_cpus;
3820     current_machine->smp.cores = 1;
3821     current_machine->smp.threads = 1;
3822
3823     machine_class->smp_parse(current_machine,
3824         qemu_opts_find(qemu_find_opts("smp-opts"), NULL));
3825
3826     /* sanity-check smp_cpus and max_cpus against machine_class */
3827     if (current_machine->smp.cpus < machine_class->min_cpus) {
3828         error_report("Invalid SMP CPUs %d. The min CPUs "
3829                      "supported by machine '%s' is %d",
3830                      current_machine->smp.cpus,
3831                      machine_class->name, machine_class->min_cpus);
3832         exit(1);
3833     }
3834     if (current_machine->smp.max_cpus > machine_class->max_cpus) {
3835         error_report("Invalid SMP CPUs %d. The max CPUs "
3836                      "supported by machine '%s' is %d",
3837                      current_machine->smp.max_cpus,
3838                      machine_class->name, machine_class->max_cpus);
3839         exit(1);
3840     }
3841
3842     /*
3843      * Get the default machine options from the machine if it is not already
3844      * specified either by the configuration file or by the command line.
3845      */
3846     if (machine_class->default_machine_opts) {
3847         qemu_opts_set_defaults(qemu_find_opts("machine"),
3848                                machine_class->default_machine_opts, 0);
3849     }
3850
3851     /* process plugin before CPUs are created, but once -smp has been parsed */
3852     if (qemu_plugin_load_list(&plugin_list)) {
3853         exit(1);
3854     }
3855
3856     qemu_opts_foreach(qemu_find_opts("device"),
3857                       default_driver_check, NULL, NULL);
3858     qemu_opts_foreach(qemu_find_opts("global"),
3859                       default_driver_check, NULL, NULL);
3860
3861     if (!vga_model && !default_vga) {
3862         vga_interface_type = VGA_DEVICE;
3863     }
3864     if (!has_defaults || machine_class->no_serial) {
3865         default_serial = 0;
3866     }
3867     if (!has_defaults || machine_class->no_parallel) {
3868         default_parallel = 0;
3869     }
3870     if (!has_defaults || machine_class->no_floppy) {
3871         default_floppy = 0;
3872     }
3873     if (!has_defaults || machine_class->no_cdrom) {
3874         default_cdrom = 0;
3875     }
3876     if (!has_defaults || machine_class->no_sdcard) {
3877         default_sdcard = 0;
3878     }
3879     if (!has_defaults) {
3880         default_monitor = 0;
3881         default_net = 0;
3882         default_vga = 0;
3883     }
3884
3885     if (is_daemonized()) {
3886         if (!preconfig_exit_requested) {
3887             error_report("'preconfig' and 'daemonize' options are "
3888                          "mutually exclusive");
3889             exit(EXIT_FAILURE);
3890         }
3891
3892         /* According to documentation and historically, -nographic redirects
3893          * serial port, parallel port and monitor to stdio, which does not work
3894          * with -daemonize.  We can redirect these to null instead, but since
3895          * -nographic is legacy, let's just error out.
3896          * We disallow -nographic only if all other ports are not redirected
3897          * explicitly, to not break existing legacy setups which uses
3898          * -nographic _and_ redirects all ports explicitly - this is valid
3899          * usage, -nographic is just a no-op in this case.
3900          */
3901         if (nographic
3902             && (default_parallel || default_serial || default_monitor)) {
3903             error_report("-nographic cannot be used with -daemonize");
3904             exit(1);
3905         }
3906 #ifdef CONFIG_CURSES
3907         if (dpy.type == DISPLAY_TYPE_CURSES) {
3908             error_report("curses display cannot be used with -daemonize");
3909             exit(1);
3910         }
3911 #endif
3912     }
3913
3914     if (nographic) {
3915         if (default_parallel)
3916             add_device_config(DEV_PARALLEL, "null");
3917         if (default_serial && default_monitor) {
3918             add_device_config(DEV_SERIAL, "mon:stdio");
3919         } else {
3920             if (default_serial)
3921                 add_device_config(DEV_SERIAL, "stdio");
3922             if (default_monitor)
3923                 monitor_parse("stdio", "readline", false);
3924         }
3925     } else {
3926         if (default_serial)
3927             add_device_config(DEV_SERIAL, "vc:80Cx24C");
3928         if (default_parallel)
3929             add_device_config(DEV_PARALLEL, "vc:80Cx24C");
3930         if (default_monitor)
3931             monitor_parse("vc:80Cx24C", "readline", false);
3932     }
3933
3934 #if defined(CONFIG_VNC)
3935     if (!QTAILQ_EMPTY(&(qemu_find_opts("vnc")->head))) {
3936         display_remote++;
3937     }
3938 #endif
3939     if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
3940         if (!qemu_display_find_default(&dpy)) {
3941             dpy.type = DISPLAY_TYPE_NONE;
3942 #if defined(CONFIG_VNC)
3943             vnc_parse("localhost:0,to=99,id=default", &error_abort);
3944 #endif
3945         }
3946     }
3947     if (dpy.type == DISPLAY_TYPE_DEFAULT) {
3948         dpy.type = DISPLAY_TYPE_NONE;
3949     }
3950
3951     if ((alt_grab || ctrl_grab) && dpy.type != DISPLAY_TYPE_SDL) {
3952         error_report("-alt-grab and -ctrl-grab are only valid "
3953                      "for SDL, ignoring option");
3954     }
3955     if (dpy.has_window_close &&
3956         (dpy.type != DISPLAY_TYPE_GTK && dpy.type != DISPLAY_TYPE_SDL)) {
3957         error_report("-no-quit is only valid for GTK and SDL, "
3958                      "ignoring option");
3959     }
3960
3961     qemu_display_early_init(&dpy);
3962     qemu_console_early_init();
3963
3964     if (dpy.has_gl && dpy.gl != DISPLAYGL_MODE_OFF && display_opengl == 0) {
3965 #if defined(CONFIG_OPENGL)
3966         error_report("OpenGL is not supported by the display");
3967 #else
3968         error_report("OpenGL support is disabled");
3969 #endif
3970         exit(1);
3971     }
3972
3973     page_size_init();
3974     socket_init();
3975
3976     qemu_opts_foreach(qemu_find_opts("object"),
3977                       user_creatable_add_opts_foreach,
3978                       object_create_initial, &error_fatal);
3979
3980     qemu_opts_foreach(qemu_find_opts("chardev"),
3981                       chardev_init_func, NULL, &error_fatal);
3982     /* now chardevs have been created we may have semihosting to connect */
3983     qemu_semihosting_connect_chardevs();
3984
3985 #ifdef CONFIG_VIRTFS
3986     qemu_opts_foreach(qemu_find_opts("fsdev"),
3987                       fsdev_init_func, NULL, &error_fatal);
3988 #endif
3989
3990     if (qemu_opts_foreach(qemu_find_opts("device"),
3991                           device_help_func, NULL, NULL)) {
3992         exit(0);
3993     }
3994
3995     /*
3996      * Note: we need to create block backends before
3997      * machine_set_property(), so machine properties can refer to
3998      * them.
3999      */
4000     configure_blockdev(&bdo_queue, machine_class, snapshot);
4001
4002     machine_opts = qemu_get_machine_opts();
4003     qemu_opt_foreach(machine_opts, machine_set_property, current_machine,
4004                      &error_fatal);
4005     current_machine->ram_size = ram_size;
4006     current_machine->maxram_size = maxram_size;
4007     current_machine->ram_slots = ram_slots;
4008
4009     /*
4010      * Note: uses machine properties such as kernel-irqchip, must run
4011      * after machine_set_property().
4012      */
4013     configure_accelerator(current_machine, argv[0]);
4014
4015     /*
4016      * Beware, QOM objects created before this point miss global and
4017      * compat properties.
4018      *
4019      * Global properties get set up by qdev_prop_register_global(),
4020      * called from user_register_global_props(), and certain option
4021      * desugaring.  Also in CPU feature desugaring (buried in
4022      * parse_cpu_option()), which happens below this point, but may
4023      * only target the CPU type, which can only be created after
4024      * parse_cpu_option() returned the type.
4025      *
4026      * Machine compat properties: object_set_machine_compat_props().
4027      * Accelerator compat props: object_set_accelerator_compat_props(),
4028      * called from configure_accelerator().
4029      */
4030
4031     if (!qtest_enabled() && machine_class->deprecation_reason) {
4032         error_report("Machine type '%s' is deprecated: %s",
4033                      machine_class->name, machine_class->deprecation_reason);
4034     }
4035
4036     /*
4037      * Note: creates a QOM object, must run only after global and
4038      * compat properties have been set up.
4039      */
4040     migration_object_init();
4041
4042     if (qtest_chrdev) {
4043         qtest_server_init(qtest_chrdev, qtest_log, &error_fatal);
4044     }
4045
4046     machine_opts = qemu_get_machine_opts();
4047     kernel_filename = qemu_opt_get(machine_opts, "kernel");
4048     initrd_filename = qemu_opt_get(machine_opts, "initrd");
4049     kernel_cmdline = qemu_opt_get(machine_opts, "append");
4050     bios_name = qemu_opt_get(machine_opts, "firmware");
4051
4052     opts = qemu_opts_find(qemu_find_opts("boot-opts"), NULL);
4053     if (opts) {
4054         boot_order = qemu_opt_get(opts, "order");
4055         if (boot_order) {
4056             validate_bootdevices(boot_order, &error_fatal);
4057         }
4058
4059         boot_once = qemu_opt_get(opts, "once");
4060         if (boot_once) {
4061             validate_bootdevices(boot_once, &error_fatal);
4062         }
4063
4064         boot_menu = qemu_opt_get_bool(opts, "menu", boot_menu);
4065         boot_strict = qemu_opt_get_bool(opts, "strict", false);
4066     }
4067
4068     if (!boot_order) {
4069         boot_order = machine_class->default_boot_order;
4070     }
4071
4072     if (!kernel_cmdline) {
4073         kernel_cmdline = "";
4074         current_machine->kernel_cmdline = (char *)kernel_cmdline;
4075     }
4076
4077     linux_boot = (kernel_filename != NULL);
4078
4079     if (!linux_boot && *kernel_cmdline != '\0') {
4080         error_report("-append only allowed with -kernel option");
4081         exit(1);
4082     }
4083
4084     if (!linux_boot && initrd_filename != NULL) {
4085         error_report("-initrd only allowed with -kernel option");
4086         exit(1);
4087     }
4088
4089     if (semihosting_enabled() && !semihosting_get_argc() && kernel_filename) {
4090         /* fall back to the -kernel/-append */
4091         semihosting_arg_fallback(kernel_filename, kernel_cmdline);
4092     }
4093
4094     /* spice needs the timers to be initialized by this point */
4095     qemu_spice_init();
4096
4097     cpu_ticks_init();
4098     if (icount_opts) {
4099         if (!tcg_enabled()) {
4100             error_report("-icount is not allowed with hardware virtualization");
4101             exit(1);
4102         }
4103         configure_icount(icount_opts, &error_abort);
4104         qemu_opts_del(icount_opts);
4105     }
4106
4107     if (tcg_enabled()) {
4108         qemu_tcg_configure(accel_opts, &error_fatal);
4109     }
4110
4111     if (default_net) {
4112         QemuOptsList *net = qemu_find_opts("net");
4113         qemu_opts_set(net, NULL, "type", "nic", &error_abort);
4114 #ifdef CONFIG_SLIRP
4115         qemu_opts_set(net, NULL, "type", "user", &error_abort);
4116 #endif
4117     }
4118
4119     if (net_init_clients(&err) < 0) {
4120         error_report_err(err);
4121         exit(1);
4122     }
4123
4124     qemu_opts_foreach(qemu_find_opts("object"),
4125                       user_creatable_add_opts_foreach,
4126                       object_create_delayed, &error_fatal);
4127
4128     tpm_init();
4129
4130     if (!xen_enabled()) {
4131         /* On 32-bit hosts, QEMU is limited by virtual address space */
4132         if (ram_size > (2047 << 20) && HOST_LONG_BITS == 32) {
4133             error_report("at most 2047 MB RAM can be simulated");
4134             exit(1);
4135         }
4136     }
4137
4138     blk_mig_init();
4139     ram_mig_init();
4140     dirty_bitmap_mig_init();
4141
4142     qemu_opts_foreach(qemu_find_opts("mon"),
4143                       mon_init_func, NULL, &error_fatal);
4144
4145     if (foreach_device_config(DEV_SERIAL, serial_parse) < 0)
4146         exit(1);
4147     if (foreach_device_config(DEV_PARALLEL, parallel_parse) < 0)
4148         exit(1);
4149     if (foreach_device_config(DEV_DEBUGCON, debugcon_parse) < 0)
4150         exit(1);
4151
4152     /* If no default VGA is requested, the default is "none".  */
4153     if (default_vga) {
4154         vga_model = get_default_vga_model(machine_class);
4155     }
4156     if (vga_model) {
4157         select_vgahw(machine_class, vga_model);
4158     }
4159
4160     if (watchdog) {
4161         i = select_watchdog(watchdog);
4162         if (i > 0)
4163             exit (i == 1 ? 1 : 0);
4164     }
4165
4166     /* This checkpoint is required by replay to separate prior clock
4167        reading from the other reads, because timer polling functions query
4168        clock values from the log. */
4169     replay_checkpoint(CHECKPOINT_INIT);
4170     qdev_machine_init();
4171
4172     current_machine->boot_order = boot_order;
4173
4174     /* parse features once if machine provides default cpu_type */
4175     current_machine->cpu_type = machine_class->default_cpu_type;
4176     if (cpu_option) {
4177         current_machine->cpu_type = parse_cpu_option(cpu_option);
4178     }
4179     parse_numa_opts(current_machine);
4180
4181     /* do monitor/qmp handling at preconfig state if requested */
4182     main_loop();
4183
4184     audio_init_audiodevs();
4185
4186     /* from here on runstate is RUN_STATE_PRELAUNCH */
4187     machine_run_board_init(current_machine);
4188
4189     realtime_init();
4190
4191     soundhw_init();
4192
4193     if (hax_enabled()) {
4194         hax_sync_vcpus();
4195     }
4196
4197     qemu_opts_foreach(qemu_find_opts("fw_cfg"),
4198                       parse_fw_cfg, fw_cfg_find(), &error_fatal);
4199
4200     /* init USB devices */
4201     if (machine_usb(current_machine)) {
4202         if (foreach_device_config(DEV_USB, usb_parse) < 0)
4203             exit(1);
4204     }
4205
4206     /* Check if IGD GFX passthrough. */
4207     igd_gfx_passthru();
4208
4209     /* init generic devices */
4210     rom_set_order_override(FW_CFG_ORDER_OVERRIDE_DEVICE);
4211     qemu_opts_foreach(qemu_find_opts("device"),
4212                       device_init_func, NULL, &error_fatal);
4213
4214     cpu_synchronize_all_post_init();
4215
4216     rom_reset_order_override();
4217
4218     /* Did we create any drives that we failed to create a device for? */
4219     drive_check_orphaned();
4220
4221     /* Don't warn about the default network setup that you get if
4222      * no command line -net or -netdev options are specified. There
4223      * are two cases that we would otherwise complain about:
4224      * (1) board doesn't support a NIC but the implicit "-net nic"
4225      * requested one
4226      * (2) CONFIG_SLIRP not set, in which case the implicit "-net nic"
4227      * sets up a nic that isn't connected to anything.
4228      */
4229     if (!default_net && (!qtest_enabled() || has_defaults)) {
4230         net_check_clients();
4231     }
4232
4233     if (boot_once) {
4234         qemu_boot_set(boot_once, &error_fatal);
4235         qemu_register_reset(restore_boot_order, g_strdup(boot_order));
4236     }
4237
4238     /* init local displays */
4239     ds = init_displaystate();
4240     qemu_display_init(ds, &dpy);
4241
4242     /* must be after terminal init, SDL library changes signal handlers */
4243     os_setup_signal_handling();
4244
4245     /* init remote displays */
4246 #ifdef CONFIG_VNC
4247     qemu_opts_foreach(qemu_find_opts("vnc"),
4248                       vnc_init_func, NULL, &error_fatal);
4249 #endif
4250
4251     if (using_spice) {
4252         qemu_spice_display_init();
4253     }
4254
4255     if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
4256         exit(1);
4257     }
4258
4259     qdev_machine_creation_done();
4260
4261     /* TODO: once all bus devices are qdevified, this should be done
4262      * when bus is created by qdev.c */
4263     qemu_register_reset(qbus_reset_all_fn, sysbus_get_default());
4264     qemu_run_machine_init_done_notifiers();
4265
4266     if (rom_check_and_register_reset() != 0) {
4267         error_report("rom check and register reset failed");
4268         exit(1);
4269     }
4270
4271     replay_start();
4272
4273     /* This checkpoint is required by replay to separate prior clock
4274        reading from the other reads, because timer polling functions query
4275        clock values from the log. */
4276     replay_checkpoint(CHECKPOINT_RESET);
4277     qemu_system_reset(SHUTDOWN_CAUSE_NONE);
4278     register_global_state();
4279     if (loadvm) {
4280         Error *local_err = NULL;
4281         if (load_snapshot(loadvm, &local_err) < 0) {
4282             error_report_err(local_err);
4283             autostart = 0;
4284             exit(1);
4285         }
4286     }
4287     if (replay_mode != REPLAY_MODE_NONE) {
4288         replay_vmstate_init();
4289     }
4290
4291     qdev_prop_check_globals();
4292     if (vmstate_dump_file) {
4293         /* dump and exit */
4294         dump_vmstate_json_to_file(vmstate_dump_file);
4295         return 0;
4296     }
4297
4298     if (incoming) {
4299         Error *local_err = NULL;
4300         qemu_start_incoming_migration(incoming, &local_err);
4301         if (local_err) {
4302             error_reportf_err(local_err, "-incoming %s: ", incoming);
4303             exit(1);
4304         }
4305     } else if (autostart) {
4306         vm_start();
4307     }
4308
4309     accel_setup_post(current_machine);
4310     os_setup_post();
4311
4312     main_loop();
4313
4314     gdbserver_cleanup();
4315
4316     /*
4317      * cleaning up the migration object cancels any existing migration
4318      * try to do this early so that it also stops using devices.
4319      */
4320     migration_shutdown();
4321
4322     /*
4323      * We must cancel all block jobs while the block layer is drained,
4324      * or cancelling will be affected by throttling and thus may block
4325      * for an extended period of time.
4326      * vm_shutdown() will bdrv_drain_all(), so we may as well include
4327      * it in the drained section.
4328      * We do not need to end this section, because we do not want any
4329      * requests happening from here on anyway.
4330      */
4331     bdrv_drain_all_begin();
4332
4333     /* No more vcpu or device emulation activity beyond this point */
4334     vm_shutdown();
4335     replay_finish();
4336
4337     job_cancel_sync_all();
4338     bdrv_close_all();
4339
4340     res_free();
4341
4342     /* vhost-user must be cleaned up before chardevs.  */
4343     tpm_cleanup();
4344     net_cleanup();
4345     audio_cleanup();
4346     monitor_cleanup();
4347     qemu_chr_cleanup();
4348     user_creatable_cleanup();
4349     /* TODO: unref root container, check all devices are ok */
4350
4351     return 0;
4352 }
This page took 0.256046 seconds and 4 git commands to generate.