]> Git Repo - qemu.git/blob - monitor.c
target/arm: Convert the VCVT-to-f16 insns to decodetree
[qemu.git] / monitor.c
1 /*
2  * QEMU monitor
3  *
4  * Copyright (c) 2003-2004 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/units.h"
27 #include <dirent.h>
28 #include "cpu.h"
29 #include "hw/hw.h"
30 #include "monitor/qdev.h"
31 #include "hw/usb.h"
32 #include "hw/pci/pci.h"
33 #include "sysemu/watchdog.h"
34 #include "hw/loader.h"
35 #include "exec/gdbstub.h"
36 #include "net/net.h"
37 #include "net/slirp.h"
38 #include "chardev/char-fe.h"
39 #include "chardev/char-io.h"
40 #include "chardev/char-mux.h"
41 #include "ui/qemu-spice.h"
42 #include "sysemu/numa.h"
43 #include "monitor/monitor.h"
44 #include "qemu/config-file.h"
45 #include "qemu/ctype.h"
46 #include "qemu/readline.h"
47 #include "ui/console.h"
48 #include "ui/input.h"
49 #include "sysemu/block-backend.h"
50 #include "audio/audio.h"
51 #include "disas/disas.h"
52 #include "sysemu/balloon.h"
53 #include "qemu/timer.h"
54 #include "sysemu/hw_accel.h"
55 #include "authz/list.h"
56 #include "qapi/util.h"
57 #include "sysemu/tcg.h"
58 #include "sysemu/tpm.h"
59 #include "qapi/qmp/qdict.h"
60 #include "qapi/qmp/qerror.h"
61 #include "qapi/qmp/qnum.h"
62 #include "qapi/qmp/qstring.h"
63 #include "qapi/qmp/qjson.h"
64 #include "qapi/qmp/json-parser.h"
65 #include "qapi/qmp/qlist.h"
66 #include "qom/object_interfaces.h"
67 #include "trace-root.h"
68 #include "trace/control.h"
69 #include "monitor/hmp-target.h"
70 #ifdef CONFIG_TRACE_SIMPLE
71 #include "trace/simple.h"
72 #endif
73 #include "exec/memory.h"
74 #include "exec/exec-all.h"
75 #include "qemu/log.h"
76 #include "qemu/option.h"
77 #include "hmp.h"
78 #include "qemu/thread.h"
79 #include "block/qapi.h"
80 #include "qapi/qapi-commands.h"
81 #include "qapi/qapi-emit-events.h"
82 #include "qapi/error.h"
83 #include "qapi/qmp-event.h"
84 #include "qapi/qapi-introspect.h"
85 #include "sysemu/qtest.h"
86 #include "sysemu/cpus.h"
87 #include "sysemu/iothread.h"
88 #include "qemu/cutils.h"
89 #include "tcg/tcg.h"
90
91 #if defined(TARGET_S390X)
92 #include "hw/s390x/storage-keys.h"
93 #include "hw/s390x/storage-attributes.h"
94 #endif
95
96 /*
97  * Supported types:
98  *
99  * 'F'          filename
100  * 'B'          block device name
101  * 's'          string (accept optional quote)
102  * 'S'          it just appends the rest of the string (accept optional quote)
103  * 'O'          option string of the form NAME=VALUE,...
104  *              parsed according to QemuOptsList given by its name
105  *              Example: 'device:O' uses qemu_device_opts.
106  *              Restriction: only lists with empty desc are supported
107  *              TODO lift the restriction
108  * 'i'          32 bit integer
109  * 'l'          target long (32 or 64 bit)
110  * 'M'          Non-negative target long (32 or 64 bit), in user mode the
111  *              value is multiplied by 2^20 (think Mebibyte)
112  * 'o'          octets (aka bytes)
113  *              user mode accepts an optional E, e, P, p, T, t, G, g, M, m,
114  *              K, k suffix, which multiplies the value by 2^60 for suffixes E
115  *              and e, 2^50 for suffixes P and p, 2^40 for suffixes T and t,
116  *              2^30 for suffixes G and g, 2^20 for M and m, 2^10 for K and k
117  * 'T'          double
118  *              user mode accepts an optional ms, us, ns suffix,
119  *              which divides the value by 1e3, 1e6, 1e9, respectively
120  * '/'          optional gdb-like print format (like "/10x")
121  *
122  * '?'          optional type (for all types, except '/')
123  * '.'          other form of optional type (for 'i' and 'l')
124  * 'b'          boolean
125  *              user mode accepts "on" or "off"
126  * '-'          optional parameter (eg. '-f')
127  *
128  */
129
130 typedef struct mon_cmd_t {
131     const char *name;
132     const char *args_type;
133     const char *params;
134     const char *help;
135     const char *flags; /* p=preconfig */
136     void (*cmd)(Monitor *mon, const QDict *qdict);
137     /* @sub_table is a list of 2nd level of commands. If it does not exist,
138      * cmd should be used. If it exists, sub_table[?].cmd should be
139      * used, and cmd of 1st level plays the role of help function.
140      */
141     struct mon_cmd_t *sub_table;
142     void (*command_completion)(ReadLineState *rs, int nb_args, const char *str);
143 } mon_cmd_t;
144
145 /* file descriptors passed via SCM_RIGHTS */
146 typedef struct mon_fd_t mon_fd_t;
147 struct mon_fd_t {
148     char *name;
149     int fd;
150     QLIST_ENTRY(mon_fd_t) next;
151 };
152
153 /* file descriptor associated with a file descriptor set */
154 typedef struct MonFdsetFd MonFdsetFd;
155 struct MonFdsetFd {
156     int fd;
157     bool removed;
158     char *opaque;
159     QLIST_ENTRY(MonFdsetFd) next;
160 };
161
162 /* file descriptor set containing fds passed via SCM_RIGHTS */
163 typedef struct MonFdset MonFdset;
164 struct MonFdset {
165     int64_t id;
166     QLIST_HEAD(, MonFdsetFd) fds;
167     QLIST_HEAD(, MonFdsetFd) dup_fds;
168     QLIST_ENTRY(MonFdset) next;
169 };
170
171 typedef struct {
172     JSONMessageParser parser;
173     /*
174      * When a client connects, we're in capabilities negotiation mode.
175      * @commands is &qmp_cap_negotiation_commands then.  When command
176      * qmp_capabilities succeeds, we go into command mode, and
177      * @command becomes &qmp_commands.
178      */
179     QmpCommandList *commands;
180     bool capab_offered[QMP_CAPABILITY__MAX]; /* capabilities offered */
181     bool capab[QMP_CAPABILITY__MAX];         /* offered and accepted */
182     /*
183      * Protects qmp request/response queue.
184      * Take monitor_lock first when you need both.
185      */
186     QemuMutex qmp_queue_lock;
187     /* Input queue that holds all the parsed QMP requests */
188     GQueue *qmp_requests;
189 } MonitorQMP;
190
191 /*
192  * To prevent flooding clients, events can be throttled. The
193  * throttling is calculated globally, rather than per-Monitor
194  * instance.
195  */
196 typedef struct MonitorQAPIEventState {
197     QAPIEvent event;    /* Throttling state for this event type and... */
198     QDict *data;        /* ... data, see qapi_event_throttle_equal() */
199     QEMUTimer *timer;   /* Timer for handling delayed events */
200     QDict *qdict;       /* Delayed event (if any) */
201 } MonitorQAPIEventState;
202
203 typedef struct {
204     int64_t rate;       /* Minimum time (in ns) between two events */
205 } MonitorQAPIEventConf;
206
207 struct Monitor {
208     CharBackend chr;
209     int reset_seen;
210     int flags;
211     int suspend_cnt;            /* Needs to be accessed atomically */
212     bool skip_flush;
213     bool use_io_thread;
214
215     /*
216      * State used only in the thread "owning" the monitor.
217      * If @use_io_thread, this is @mon_iothread.
218      * Else, it's the main thread.
219      * These members can be safely accessed without locks.
220      */
221     ReadLineState *rs;
222
223     MonitorQMP qmp;
224     gchar *mon_cpu_path;
225     BlockCompletionFunc *password_completion_cb;
226     void *password_opaque;
227     mon_cmd_t *cmd_table;
228     QTAILQ_ENTRY(Monitor) entry;
229
230     /*
231      * The per-monitor lock. We can't access guest memory when holding
232      * the lock.
233      */
234     QemuMutex mon_lock;
235
236     /*
237      * Members that are protected by the per-monitor lock
238      */
239     QLIST_HEAD(, mon_fd_t) fds;
240     QString *outbuf;
241     guint out_watch;
242     /* Read under either BQL or mon_lock, written with BQL+mon_lock.  */
243     int mux_out;
244 };
245
246 /* Shared monitor I/O thread */
247 IOThread *mon_iothread;
248
249 /* Bottom half to dispatch the requests received from I/O thread */
250 QEMUBH *qmp_dispatcher_bh;
251
252 struct QMPRequest {
253     /* Owner of the request */
254     Monitor *mon;
255     /*
256      * Request object to be handled or Error to be reported
257      * (exactly one of them is non-null)
258      */
259     QObject *req;
260     Error *err;
261 };
262 typedef struct QMPRequest QMPRequest;
263
264 /* QMP checker flags */
265 #define QMP_ACCEPT_UNKNOWNS 1
266
267 /* Protects mon_list, monitor_qapi_event_state, monitor_destroyed.  */
268 static QemuMutex monitor_lock;
269 static GHashTable *monitor_qapi_event_state;
270 static QTAILQ_HEAD(, Monitor) mon_list;
271 static bool monitor_destroyed;
272
273 /* Protects mon_fdsets */
274 static QemuMutex mon_fdsets_lock;
275 static QLIST_HEAD(, MonFdset) mon_fdsets;
276
277 static int mon_refcount;
278
279 static mon_cmd_t mon_cmds[];
280 static mon_cmd_t info_cmds[];
281
282 QmpCommandList qmp_commands, qmp_cap_negotiation_commands;
283
284 __thread Monitor *cur_mon;
285
286 static void monitor_command_cb(void *opaque, const char *cmdline,
287                                void *readline_opaque);
288
289 /**
290  * Is @mon a QMP monitor?
291  */
292 static inline bool monitor_is_qmp(const Monitor *mon)
293 {
294     return (mon->flags & MONITOR_USE_CONTROL);
295 }
296
297 /**
298  * Is @mon is using readline?
299  * Note: not all HMP monitors use readline, e.g., gdbserver has a
300  * non-interactive HMP monitor, so readline is not used there.
301  */
302 static inline bool monitor_uses_readline(const Monitor *mon)
303 {
304     return mon->flags & MONITOR_USE_READLINE;
305 }
306
307 static inline bool monitor_is_hmp_non_interactive(const Monitor *mon)
308 {
309     return !monitor_is_qmp(mon) && !monitor_uses_readline(mon);
310 }
311
312 /*
313  * Return the clock to use for recording an event's time.
314  * It's QEMU_CLOCK_REALTIME, except for qtests it's
315  * QEMU_CLOCK_VIRTUAL, to support testing rate limits.
316  * Beware: result is invalid before configure_accelerator().
317  */
318 static inline QEMUClockType monitor_get_event_clock(void)
319 {
320     return qtest_enabled() ? QEMU_CLOCK_VIRTUAL : QEMU_CLOCK_REALTIME;
321 }
322
323 /**
324  * Is the current monitor, if any, a QMP monitor?
325  */
326 bool monitor_cur_is_qmp(void)
327 {
328     return cur_mon && monitor_is_qmp(cur_mon);
329 }
330
331 void monitor_read_command(Monitor *mon, int show_prompt)
332 {
333     if (!mon->rs)
334         return;
335
336     readline_start(mon->rs, "(qemu) ", 0, monitor_command_cb, NULL);
337     if (show_prompt)
338         readline_show_prompt(mon->rs);
339 }
340
341 int monitor_read_password(Monitor *mon, ReadLineFunc *readline_func,
342                           void *opaque)
343 {
344     if (mon->rs) {
345         readline_start(mon->rs, "Password: ", 1, readline_func, opaque);
346         /* prompt is printed on return from the command handler */
347         return 0;
348     } else {
349         monitor_printf(mon, "terminal does not support password prompting\n");
350         return -ENOTTY;
351     }
352 }
353
354 static void qmp_request_free(QMPRequest *req)
355 {
356     qobject_unref(req->req);
357     error_free(req->err);
358     g_free(req);
359 }
360
361 /* Caller must hold mon->qmp.qmp_queue_lock */
362 static void monitor_qmp_cleanup_req_queue_locked(Monitor *mon)
363 {
364     while (!g_queue_is_empty(mon->qmp.qmp_requests)) {
365         qmp_request_free(g_queue_pop_head(mon->qmp.qmp_requests));
366     }
367 }
368
369 static void monitor_qmp_cleanup_queues(Monitor *mon)
370 {
371     qemu_mutex_lock(&mon->qmp.qmp_queue_lock);
372     monitor_qmp_cleanup_req_queue_locked(mon);
373     qemu_mutex_unlock(&mon->qmp.qmp_queue_lock);
374 }
375
376
377 static void monitor_flush_locked(Monitor *mon);
378
379 static gboolean monitor_unblocked(GIOChannel *chan, GIOCondition cond,
380                                   void *opaque)
381 {
382     Monitor *mon = opaque;
383
384     qemu_mutex_lock(&mon->mon_lock);
385     mon->out_watch = 0;
386     monitor_flush_locked(mon);
387     qemu_mutex_unlock(&mon->mon_lock);
388     return FALSE;
389 }
390
391 /* Caller must hold mon->mon_lock */
392 static void monitor_flush_locked(Monitor *mon)
393 {
394     int rc;
395     size_t len;
396     const char *buf;
397
398     if (mon->skip_flush) {
399         return;
400     }
401
402     buf = qstring_get_str(mon->outbuf);
403     len = qstring_get_length(mon->outbuf);
404
405     if (len && !mon->mux_out) {
406         rc = qemu_chr_fe_write(&mon->chr, (const uint8_t *) buf, len);
407         if ((rc < 0 && errno != EAGAIN) || (rc == len)) {
408             /* all flushed or error */
409             qobject_unref(mon->outbuf);
410             mon->outbuf = qstring_new();
411             return;
412         }
413         if (rc > 0) {
414             /* partial write */
415             QString *tmp = qstring_from_str(buf + rc);
416             qobject_unref(mon->outbuf);
417             mon->outbuf = tmp;
418         }
419         if (mon->out_watch == 0) {
420             mon->out_watch =
421                 qemu_chr_fe_add_watch(&mon->chr, G_IO_OUT | G_IO_HUP,
422                                       monitor_unblocked, mon);
423         }
424     }
425 }
426
427 void monitor_flush(Monitor *mon)
428 {
429     qemu_mutex_lock(&mon->mon_lock);
430     monitor_flush_locked(mon);
431     qemu_mutex_unlock(&mon->mon_lock);
432 }
433
434 /* flush at every end of line */
435 static int monitor_puts(Monitor *mon, const char *str)
436 {
437     int i;
438     char c;
439
440     qemu_mutex_lock(&mon->mon_lock);
441     for (i = 0; str[i]; i++) {
442         c = str[i];
443         if (c == '\n') {
444             qstring_append_chr(mon->outbuf, '\r');
445         }
446         qstring_append_chr(mon->outbuf, c);
447         if (c == '\n') {
448             monitor_flush_locked(mon);
449         }
450     }
451     qemu_mutex_unlock(&mon->mon_lock);
452
453     return i;
454 }
455
456 int monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
457 {
458     char *buf;
459     int n;
460
461     if (!mon)
462         return -1;
463
464     if (monitor_is_qmp(mon)) {
465         return -1;
466     }
467
468     buf = g_strdup_vprintf(fmt, ap);
469     n = monitor_puts(mon, buf);
470     g_free(buf);
471     return n;
472 }
473
474 int monitor_printf(Monitor *mon, const char *fmt, ...)
475 {
476     int ret;
477
478     va_list ap;
479     va_start(ap, fmt);
480     ret = monitor_vprintf(mon, fmt, ap);
481     va_end(ap);
482     return ret;
483 }
484
485 static void qmp_send_response(Monitor *mon, const QDict *rsp)
486 {
487     const QObject *data = QOBJECT(rsp);
488     QString *json;
489
490     json = mon->flags & MONITOR_USE_PRETTY ? qobject_to_json_pretty(data) :
491                                              qobject_to_json(data);
492     assert(json != NULL);
493
494     qstring_append_chr(json, '\n');
495     monitor_puts(mon, qstring_get_str(json));
496
497     qobject_unref(json);
498 }
499
500 static MonitorQAPIEventConf monitor_qapi_event_conf[QAPI_EVENT__MAX] = {
501     /* Limit guest-triggerable events to 1 per second */
502     [QAPI_EVENT_RTC_CHANGE]        = { 1000 * SCALE_MS },
503     [QAPI_EVENT_WATCHDOG]          = { 1000 * SCALE_MS },
504     [QAPI_EVENT_BALLOON_CHANGE]    = { 1000 * SCALE_MS },
505     [QAPI_EVENT_QUORUM_REPORT_BAD] = { 1000 * SCALE_MS },
506     [QAPI_EVENT_QUORUM_FAILURE]    = { 1000 * SCALE_MS },
507     [QAPI_EVENT_VSERPORT_CHANGE]   = { 1000 * SCALE_MS },
508 };
509
510 /*
511  * Broadcast an event to all monitors.
512  * @qdict is the event object.  Its member "event" must match @event.
513  * Caller must hold monitor_lock.
514  */
515 static void monitor_qapi_event_emit(QAPIEvent event, QDict *qdict)
516 {
517     Monitor *mon;
518
519     trace_monitor_protocol_event_emit(event, qdict);
520     QTAILQ_FOREACH(mon, &mon_list, entry) {
521         if (monitor_is_qmp(mon)
522             && mon->qmp.commands != &qmp_cap_negotiation_commands) {
523             qmp_send_response(mon, qdict);
524         }
525     }
526 }
527
528 static void monitor_qapi_event_handler(void *opaque);
529
530 /*
531  * Queue a new event for emission to Monitor instances,
532  * applying any rate limiting if required.
533  */
534 static void
535 monitor_qapi_event_queue_no_reenter(QAPIEvent event, QDict *qdict)
536 {
537     MonitorQAPIEventConf *evconf;
538     MonitorQAPIEventState *evstate;
539
540     assert(event < QAPI_EVENT__MAX);
541     evconf = &monitor_qapi_event_conf[event];
542     trace_monitor_protocol_event_queue(event, qdict, evconf->rate);
543
544     qemu_mutex_lock(&monitor_lock);
545
546     if (!evconf->rate) {
547         /* Unthrottled event */
548         monitor_qapi_event_emit(event, qdict);
549     } else {
550         QDict *data = qobject_to(QDict, qdict_get(qdict, "data"));
551         MonitorQAPIEventState key = { .event = event, .data = data };
552
553         evstate = g_hash_table_lookup(monitor_qapi_event_state, &key);
554         assert(!evstate || timer_pending(evstate->timer));
555
556         if (evstate) {
557             /*
558              * Timer is pending for (at least) evconf->rate ns after
559              * last send.  Store event for sending when timer fires,
560              * replacing a prior stored event if any.
561              */
562             qobject_unref(evstate->qdict);
563             evstate->qdict = qobject_ref(qdict);
564         } else {
565             /*
566              * Last send was (at least) evconf->rate ns ago.
567              * Send immediately, and arm the timer to call
568              * monitor_qapi_event_handler() in evconf->rate ns.  Any
569              * events arriving before then will be delayed until then.
570              */
571             int64_t now = qemu_clock_get_ns(monitor_get_event_clock());
572
573             monitor_qapi_event_emit(event, qdict);
574
575             evstate = g_new(MonitorQAPIEventState, 1);
576             evstate->event = event;
577             evstate->data = qobject_ref(data);
578             evstate->qdict = NULL;
579             evstate->timer = timer_new_ns(monitor_get_event_clock(),
580                                           monitor_qapi_event_handler,
581                                           evstate);
582             g_hash_table_add(monitor_qapi_event_state, evstate);
583             timer_mod_ns(evstate->timer, now + evconf->rate);
584         }
585     }
586
587     qemu_mutex_unlock(&monitor_lock);
588 }
589
590 void qapi_event_emit(QAPIEvent event, QDict *qdict)
591 {
592     /*
593      * monitor_qapi_event_queue_no_reenter() is not reentrant: it
594      * would deadlock on monitor_lock.  Work around by queueing
595      * events in thread-local storage.
596      * TODO: remove this, make it re-enter safe.
597      */
598     typedef struct MonitorQapiEvent {
599         QAPIEvent event;
600         QDict *qdict;
601         QSIMPLEQ_ENTRY(MonitorQapiEvent) entry;
602     } MonitorQapiEvent;
603     static __thread QSIMPLEQ_HEAD(, MonitorQapiEvent) event_queue;
604     static __thread bool reentered;
605     MonitorQapiEvent *ev;
606
607     if (!reentered) {
608         QSIMPLEQ_INIT(&event_queue);
609     }
610
611     ev = g_new(MonitorQapiEvent, 1);
612     ev->qdict = qobject_ref(qdict);
613     ev->event = event;
614     QSIMPLEQ_INSERT_TAIL(&event_queue, ev, entry);
615     if (reentered) {
616         return;
617     }
618
619     reentered = true;
620
621     while ((ev = QSIMPLEQ_FIRST(&event_queue)) != NULL) {
622         QSIMPLEQ_REMOVE_HEAD(&event_queue, entry);
623         monitor_qapi_event_queue_no_reenter(ev->event, ev->qdict);
624         qobject_unref(ev->qdict);
625         g_free(ev);
626     }
627
628     reentered = false;
629 }
630
631 /*
632  * This function runs evconf->rate ns after sending a throttled
633  * event.
634  * If another event has since been stored, send it.
635  */
636 static void monitor_qapi_event_handler(void *opaque)
637 {
638     MonitorQAPIEventState *evstate = opaque;
639     MonitorQAPIEventConf *evconf = &monitor_qapi_event_conf[evstate->event];
640
641     trace_monitor_protocol_event_handler(evstate->event, evstate->qdict);
642     qemu_mutex_lock(&monitor_lock);
643
644     if (evstate->qdict) {
645         int64_t now = qemu_clock_get_ns(monitor_get_event_clock());
646
647         monitor_qapi_event_emit(evstate->event, evstate->qdict);
648         qobject_unref(evstate->qdict);
649         evstate->qdict = NULL;
650         timer_mod_ns(evstate->timer, now + evconf->rate);
651     } else {
652         g_hash_table_remove(monitor_qapi_event_state, evstate);
653         qobject_unref(evstate->data);
654         timer_free(evstate->timer);
655         g_free(evstate);
656     }
657
658     qemu_mutex_unlock(&monitor_lock);
659 }
660
661 static unsigned int qapi_event_throttle_hash(const void *key)
662 {
663     const MonitorQAPIEventState *evstate = key;
664     unsigned int hash = evstate->event * 255;
665
666     if (evstate->event == QAPI_EVENT_VSERPORT_CHANGE) {
667         hash += g_str_hash(qdict_get_str(evstate->data, "id"));
668     }
669
670     if (evstate->event == QAPI_EVENT_QUORUM_REPORT_BAD) {
671         hash += g_str_hash(qdict_get_str(evstate->data, "node-name"));
672     }
673
674     return hash;
675 }
676
677 static gboolean qapi_event_throttle_equal(const void *a, const void *b)
678 {
679     const MonitorQAPIEventState *eva = a;
680     const MonitorQAPIEventState *evb = b;
681
682     if (eva->event != evb->event) {
683         return FALSE;
684     }
685
686     if (eva->event == QAPI_EVENT_VSERPORT_CHANGE) {
687         return !strcmp(qdict_get_str(eva->data, "id"),
688                        qdict_get_str(evb->data, "id"));
689     }
690
691     if (eva->event == QAPI_EVENT_QUORUM_REPORT_BAD) {
692         return !strcmp(qdict_get_str(eva->data, "node-name"),
693                        qdict_get_str(evb->data, "node-name"));
694     }
695
696     return TRUE;
697 }
698
699 static void monitor_qapi_event_init(void)
700 {
701     monitor_qapi_event_state = g_hash_table_new(qapi_event_throttle_hash,
702                                                 qapi_event_throttle_equal);
703 }
704
705 static void handle_hmp_command(Monitor *mon, const char *cmdline);
706
707 static void monitor_iothread_init(void);
708
709 static void monitor_data_init(Monitor *mon, bool skip_flush,
710                               bool use_io_thread)
711 {
712     if (use_io_thread && !mon_iothread) {
713         monitor_iothread_init();
714     }
715     memset(mon, 0, sizeof(Monitor));
716     qemu_mutex_init(&mon->mon_lock);
717     qemu_mutex_init(&mon->qmp.qmp_queue_lock);
718     mon->outbuf = qstring_new();
719     /* Use *mon_cmds by default. */
720     mon->cmd_table = mon_cmds;
721     mon->skip_flush = skip_flush;
722     mon->use_io_thread = use_io_thread;
723     mon->qmp.qmp_requests = g_queue_new();
724 }
725
726 static void monitor_data_destroy(Monitor *mon)
727 {
728     g_free(mon->mon_cpu_path);
729     qemu_chr_fe_deinit(&mon->chr, false);
730     if (monitor_is_qmp(mon)) {
731         json_message_parser_destroy(&mon->qmp.parser);
732     }
733     readline_free(mon->rs);
734     qobject_unref(mon->outbuf);
735     qemu_mutex_destroy(&mon->mon_lock);
736     qemu_mutex_destroy(&mon->qmp.qmp_queue_lock);
737     monitor_qmp_cleanup_req_queue_locked(mon);
738     g_queue_free(mon->qmp.qmp_requests);
739 }
740
741 char *qmp_human_monitor_command(const char *command_line, bool has_cpu_index,
742                                 int64_t cpu_index, Error **errp)
743 {
744     char *output = NULL;
745     Monitor *old_mon, hmp;
746
747     monitor_data_init(&hmp, true, false);
748
749     old_mon = cur_mon;
750     cur_mon = &hmp;
751
752     if (has_cpu_index) {
753         int ret = monitor_set_cpu(cpu_index);
754         if (ret < 0) {
755             cur_mon = old_mon;
756             error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "cpu-index",
757                        "a CPU number");
758             goto out;
759         }
760     }
761
762     handle_hmp_command(&hmp, command_line);
763     cur_mon = old_mon;
764
765     qemu_mutex_lock(&hmp.mon_lock);
766     if (qstring_get_length(hmp.outbuf) > 0) {
767         output = g_strdup(qstring_get_str(hmp.outbuf));
768     } else {
769         output = g_strdup("");
770     }
771     qemu_mutex_unlock(&hmp.mon_lock);
772
773 out:
774     monitor_data_destroy(&hmp);
775     return output;
776 }
777
778 static int compare_cmd(const char *name, const char *list)
779 {
780     const char *p, *pstart;
781     int len;
782     len = strlen(name);
783     p = list;
784     for(;;) {
785         pstart = p;
786         p = qemu_strchrnul(p, '|');
787         if ((p - pstart) == len && !memcmp(pstart, name, len))
788             return 1;
789         if (*p == '\0')
790             break;
791         p++;
792     }
793     return 0;
794 }
795
796 static int get_str(char *buf, int buf_size, const char **pp)
797 {
798     const char *p;
799     char *q;
800     int c;
801
802     q = buf;
803     p = *pp;
804     while (qemu_isspace(*p)) {
805         p++;
806     }
807     if (*p == '\0') {
808     fail:
809         *q = '\0';
810         *pp = p;
811         return -1;
812     }
813     if (*p == '\"') {
814         p++;
815         while (*p != '\0' && *p != '\"') {
816             if (*p == '\\') {
817                 p++;
818                 c = *p++;
819                 switch (c) {
820                 case 'n':
821                     c = '\n';
822                     break;
823                 case 'r':
824                     c = '\r';
825                     break;
826                 case '\\':
827                 case '\'':
828                 case '\"':
829                     break;
830                 default:
831                     printf("unsupported escape code: '\\%c'\n", c);
832                     goto fail;
833                 }
834                 if ((q - buf) < buf_size - 1) {
835                     *q++ = c;
836                 }
837             } else {
838                 if ((q - buf) < buf_size - 1) {
839                     *q++ = *p;
840                 }
841                 p++;
842             }
843         }
844         if (*p != '\"') {
845             printf("unterminated string\n");
846             goto fail;
847         }
848         p++;
849     } else {
850         while (*p != '\0' && !qemu_isspace(*p)) {
851             if ((q - buf) < buf_size - 1) {
852                 *q++ = *p;
853             }
854             p++;
855         }
856     }
857     *q = '\0';
858     *pp = p;
859     return 0;
860 }
861
862 #define MAX_ARGS 16
863
864 static void free_cmdline_args(char **args, int nb_args)
865 {
866     int i;
867
868     assert(nb_args <= MAX_ARGS);
869
870     for (i = 0; i < nb_args; i++) {
871         g_free(args[i]);
872     }
873
874 }
875
876 /*
877  * Parse the command line to get valid args.
878  * @cmdline: command line to be parsed.
879  * @pnb_args: location to store the number of args, must NOT be NULL.
880  * @args: location to store the args, which should be freed by caller, must
881  *        NOT be NULL.
882  *
883  * Returns 0 on success, negative on failure.
884  *
885  * NOTE: this parser is an approximate form of the real command parser. Number
886  *       of args have a limit of MAX_ARGS. If cmdline contains more, it will
887  *       return with failure.
888  */
889 static int parse_cmdline(const char *cmdline,
890                          int *pnb_args, char **args)
891 {
892     const char *p;
893     int nb_args, ret;
894     char buf[1024];
895
896     p = cmdline;
897     nb_args = 0;
898     for (;;) {
899         while (qemu_isspace(*p)) {
900             p++;
901         }
902         if (*p == '\0') {
903             break;
904         }
905         if (nb_args >= MAX_ARGS) {
906             goto fail;
907         }
908         ret = get_str(buf, sizeof(buf), &p);
909         if (ret < 0) {
910             goto fail;
911         }
912         args[nb_args] = g_strdup(buf);
913         nb_args++;
914     }
915     *pnb_args = nb_args;
916     return 0;
917
918  fail:
919     free_cmdline_args(args, nb_args);
920     return -1;
921 }
922
923 /*
924  * Can command @cmd be executed in preconfig state?
925  */
926 static bool cmd_can_preconfig(const mon_cmd_t *cmd)
927 {
928     if (!cmd->flags) {
929         return false;
930     }
931
932     return strchr(cmd->flags, 'p');
933 }
934
935 static void help_cmd_dump_one(Monitor *mon,
936                               const mon_cmd_t *cmd,
937                               char **prefix_args,
938                               int prefix_args_nb)
939 {
940     int i;
941
942     if (runstate_check(RUN_STATE_PRECONFIG) && !cmd_can_preconfig(cmd)) {
943         return;
944     }
945
946     for (i = 0; i < prefix_args_nb; i++) {
947         monitor_printf(mon, "%s ", prefix_args[i]);
948     }
949     monitor_printf(mon, "%s %s -- %s\n", cmd->name, cmd->params, cmd->help);
950 }
951
952 /* @args[@arg_index] is the valid command need to find in @cmds */
953 static void help_cmd_dump(Monitor *mon, const mon_cmd_t *cmds,
954                           char **args, int nb_args, int arg_index)
955 {
956     const mon_cmd_t *cmd;
957     size_t i;
958
959     /* No valid arg need to compare with, dump all in *cmds */
960     if (arg_index >= nb_args) {
961         for (cmd = cmds; cmd->name != NULL; cmd++) {
962             help_cmd_dump_one(mon, cmd, args, arg_index);
963         }
964         return;
965     }
966
967     /* Find one entry to dump */
968     for (cmd = cmds; cmd->name != NULL; cmd++) {
969         if (compare_cmd(args[arg_index], cmd->name) &&
970             ((!runstate_check(RUN_STATE_PRECONFIG) ||
971                 cmd_can_preconfig(cmd)))) {
972             if (cmd->sub_table) {
973                 /* continue with next arg */
974                 help_cmd_dump(mon, cmd->sub_table,
975                               args, nb_args, arg_index + 1);
976             } else {
977                 help_cmd_dump_one(mon, cmd, args, arg_index);
978             }
979             return;
980         }
981     }
982
983     /* Command not found */
984     monitor_printf(mon, "unknown command: '");
985     for (i = 0; i <= arg_index; i++) {
986         monitor_printf(mon, "%s%s", args[i], i == arg_index ? "'\n" : " ");
987     }
988 }
989
990 static void help_cmd(Monitor *mon, const char *name)
991 {
992     char *args[MAX_ARGS];
993     int nb_args = 0;
994
995     /* 1. parse user input */
996     if (name) {
997         /* special case for log, directly dump and return */
998         if (!strcmp(name, "log")) {
999             const QEMULogItem *item;
1000             monitor_printf(mon, "Log items (comma separated):\n");
1001             monitor_printf(mon, "%-10s %s\n", "none", "remove all logs");
1002             for (item = qemu_log_items; item->mask != 0; item++) {
1003                 monitor_printf(mon, "%-10s %s\n", item->name, item->help);
1004             }
1005             return;
1006         }
1007
1008         if (parse_cmdline(name, &nb_args, args) < 0) {
1009             return;
1010         }
1011     }
1012
1013     /* 2. dump the contents according to parsed args */
1014     help_cmd_dump(mon, mon->cmd_table, args, nb_args, 0);
1015
1016     free_cmdline_args(args, nb_args);
1017 }
1018
1019 static void do_help_cmd(Monitor *mon, const QDict *qdict)
1020 {
1021     help_cmd(mon, qdict_get_try_str(qdict, "name"));
1022 }
1023
1024 static void hmp_trace_event(Monitor *mon, const QDict *qdict)
1025 {
1026     const char *tp_name = qdict_get_str(qdict, "name");
1027     bool new_state = qdict_get_bool(qdict, "option");
1028     bool has_vcpu = qdict_haskey(qdict, "vcpu");
1029     int vcpu = qdict_get_try_int(qdict, "vcpu", 0);
1030     Error *local_err = NULL;
1031
1032     if (vcpu < 0) {
1033         monitor_printf(mon, "argument vcpu must be positive");
1034         return;
1035     }
1036
1037     qmp_trace_event_set_state(tp_name, new_state, true, true, has_vcpu, vcpu, &local_err);
1038     if (local_err) {
1039         error_report_err(local_err);
1040     }
1041 }
1042
1043 #ifdef CONFIG_TRACE_SIMPLE
1044 static void hmp_trace_file(Monitor *mon, const QDict *qdict)
1045 {
1046     const char *op = qdict_get_try_str(qdict, "op");
1047     const char *arg = qdict_get_try_str(qdict, "arg");
1048
1049     if (!op) {
1050         st_print_trace_file_status();
1051     } else if (!strcmp(op, "on")) {
1052         st_set_trace_file_enabled(true);
1053     } else if (!strcmp(op, "off")) {
1054         st_set_trace_file_enabled(false);
1055     } else if (!strcmp(op, "flush")) {
1056         st_flush_trace_buffer();
1057     } else if (!strcmp(op, "set")) {
1058         if (arg) {
1059             st_set_trace_file(arg);
1060         }
1061     } else {
1062         monitor_printf(mon, "unexpected argument \"%s\"\n", op);
1063         help_cmd(mon, "trace-file");
1064     }
1065 }
1066 #endif
1067
1068 static void hmp_info_help(Monitor *mon, const QDict *qdict)
1069 {
1070     help_cmd(mon, "info");
1071 }
1072
1073 static void query_commands_cb(QmpCommand *cmd, void *opaque)
1074 {
1075     CommandInfoList *info, **list = opaque;
1076
1077     if (!cmd->enabled) {
1078         return;
1079     }
1080
1081     info = g_malloc0(sizeof(*info));
1082     info->value = g_malloc0(sizeof(*info->value));
1083     info->value->name = g_strdup(cmd->name);
1084     info->next = *list;
1085     *list = info;
1086 }
1087
1088 CommandInfoList *qmp_query_commands(Error **errp)
1089 {
1090     CommandInfoList *list = NULL;
1091
1092     qmp_for_each_command(cur_mon->qmp.commands, query_commands_cb, &list);
1093
1094     return list;
1095 }
1096
1097 EventInfoList *qmp_query_events(Error **errp)
1098 {
1099     /*
1100      * TODO This deprecated command is the only user of
1101      * QAPIEvent_str() and QAPIEvent_lookup[].  When the command goes,
1102      * they should go, too.
1103      */
1104     EventInfoList *info, *ev_list = NULL;
1105     QAPIEvent e;
1106
1107     for (e = 0 ; e < QAPI_EVENT__MAX ; e++) {
1108         const char *event_name = QAPIEvent_str(e);
1109         assert(event_name != NULL);
1110         info = g_malloc0(sizeof(*info));
1111         info->value = g_malloc0(sizeof(*info->value));
1112         info->value->name = g_strdup(event_name);
1113
1114         info->next = ev_list;
1115         ev_list = info;
1116     }
1117
1118     return ev_list;
1119 }
1120
1121 /*
1122  * Minor hack: generated marshalling suppressed for this command
1123  * ('gen': false in the schema) so we can parse the JSON string
1124  * directly into QObject instead of first parsing it with
1125  * visit_type_SchemaInfoList() into a SchemaInfoList, then marshal it
1126  * to QObject with generated output marshallers, every time.  Instead,
1127  * we do it in test-qobject-input-visitor.c, just to make sure
1128  * qapi-gen.py's output actually conforms to the schema.
1129  */
1130 static void qmp_query_qmp_schema(QDict *qdict, QObject **ret_data,
1131                                  Error **errp)
1132 {
1133     *ret_data = qobject_from_qlit(&qmp_schema_qlit);
1134 }
1135
1136 static void monitor_init_qmp_commands(void)
1137 {
1138     /*
1139      * Two command lists:
1140      * - qmp_commands contains all QMP commands
1141      * - qmp_cap_negotiation_commands contains just
1142      *   "qmp_capabilities", to enforce capability negotiation
1143      */
1144
1145     qmp_init_marshal(&qmp_commands);
1146
1147     qmp_register_command(&qmp_commands, "query-qmp-schema",
1148                          qmp_query_qmp_schema, QCO_ALLOW_PRECONFIG);
1149     qmp_register_command(&qmp_commands, "device_add", qmp_device_add,
1150                          QCO_NO_OPTIONS);
1151     qmp_register_command(&qmp_commands, "netdev_add", qmp_netdev_add,
1152                          QCO_NO_OPTIONS);
1153
1154     QTAILQ_INIT(&qmp_cap_negotiation_commands);
1155     qmp_register_command(&qmp_cap_negotiation_commands, "qmp_capabilities",
1156                          qmp_marshal_qmp_capabilities, QCO_ALLOW_PRECONFIG);
1157 }
1158
1159 static bool qmp_oob_enabled(Monitor *mon)
1160 {
1161     return mon->qmp.capab[QMP_CAPABILITY_OOB];
1162 }
1163
1164 static void monitor_qmp_caps_reset(Monitor *mon)
1165 {
1166     memset(mon->qmp.capab_offered, 0, sizeof(mon->qmp.capab_offered));
1167     memset(mon->qmp.capab, 0, sizeof(mon->qmp.capab));
1168     mon->qmp.capab_offered[QMP_CAPABILITY_OOB] = mon->use_io_thread;
1169 }
1170
1171 /*
1172  * Accept QMP capabilities in @list for @mon.
1173  * On success, set mon->qmp.capab[], and return true.
1174  * On error, set @errp, and return false.
1175  */
1176 static bool qmp_caps_accept(Monitor *mon, QMPCapabilityList *list,
1177                             Error **errp)
1178 {
1179     GString *unavailable = NULL;
1180     bool capab[QMP_CAPABILITY__MAX];
1181
1182     memset(capab, 0, sizeof(capab));
1183
1184     for (; list; list = list->next) {
1185         if (!mon->qmp.capab_offered[list->value]) {
1186             if (!unavailable) {
1187                 unavailable = g_string_new(QMPCapability_str(list->value));
1188             } else {
1189                 g_string_append_printf(unavailable, ", %s",
1190                                       QMPCapability_str(list->value));
1191             }
1192         }
1193         capab[list->value] = true;
1194     }
1195
1196     if (unavailable) {
1197         error_setg(errp, "Capability %s not available", unavailable->str);
1198         g_string_free(unavailable, true);
1199         return false;
1200     }
1201
1202     memcpy(mon->qmp.capab, capab, sizeof(capab));
1203     return true;
1204 }
1205
1206 void qmp_qmp_capabilities(bool has_enable, QMPCapabilityList *enable,
1207                           Error **errp)
1208 {
1209     if (cur_mon->qmp.commands == &qmp_commands) {
1210         error_set(errp, ERROR_CLASS_COMMAND_NOT_FOUND,
1211                   "Capabilities negotiation is already complete, command "
1212                   "ignored");
1213         return;
1214     }
1215
1216     if (!qmp_caps_accept(cur_mon, enable, errp)) {
1217         return;
1218     }
1219
1220     cur_mon->qmp.commands = &qmp_commands;
1221 }
1222
1223 /* Set the current CPU defined by the user. Callers must hold BQL. */
1224 int monitor_set_cpu(int cpu_index)
1225 {
1226     CPUState *cpu;
1227
1228     cpu = qemu_get_cpu(cpu_index);
1229     if (cpu == NULL) {
1230         return -1;
1231     }
1232     g_free(cur_mon->mon_cpu_path);
1233     cur_mon->mon_cpu_path = object_get_canonical_path(OBJECT(cpu));
1234     return 0;
1235 }
1236
1237 /* Callers must hold BQL. */
1238 static CPUState *mon_get_cpu_sync(bool synchronize)
1239 {
1240     CPUState *cpu;
1241
1242     if (cur_mon->mon_cpu_path) {
1243         cpu = (CPUState *) object_resolve_path_type(cur_mon->mon_cpu_path,
1244                                                     TYPE_CPU, NULL);
1245         if (!cpu) {
1246             g_free(cur_mon->mon_cpu_path);
1247             cur_mon->mon_cpu_path = NULL;
1248         }
1249     }
1250     if (!cur_mon->mon_cpu_path) {
1251         if (!first_cpu) {
1252             return NULL;
1253         }
1254         monitor_set_cpu(first_cpu->cpu_index);
1255         cpu = first_cpu;
1256     }
1257     if (synchronize) {
1258         cpu_synchronize_state(cpu);
1259     }
1260     return cpu;
1261 }
1262
1263 CPUState *mon_get_cpu(void)
1264 {
1265     return mon_get_cpu_sync(true);
1266 }
1267
1268 CPUArchState *mon_get_cpu_env(void)
1269 {
1270     CPUState *cs = mon_get_cpu();
1271
1272     return cs ? cs->env_ptr : NULL;
1273 }
1274
1275 int monitor_get_cpu_index(void)
1276 {
1277     CPUState *cs = mon_get_cpu_sync(false);
1278
1279     return cs ? cs->cpu_index : UNASSIGNED_CPU_INDEX;
1280 }
1281
1282 static void hmp_info_registers(Monitor *mon, const QDict *qdict)
1283 {
1284     bool all_cpus = qdict_get_try_bool(qdict, "cpustate_all", false);
1285     CPUState *cs;
1286
1287     if (all_cpus) {
1288         CPU_FOREACH(cs) {
1289             monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
1290             cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
1291         }
1292     } else {
1293         cs = mon_get_cpu();
1294
1295         if (!cs) {
1296             monitor_printf(mon, "No CPU available\n");
1297             return;
1298         }
1299
1300         cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
1301     }
1302 }
1303
1304 #ifdef CONFIG_TCG
1305 static void hmp_info_jit(Monitor *mon, const QDict *qdict)
1306 {
1307     if (!tcg_enabled()) {
1308         error_report("JIT information is only available with accel=tcg");
1309         return;
1310     }
1311
1312     dump_exec_info();
1313     dump_drift_info();
1314 }
1315
1316 static void hmp_info_opcount(Monitor *mon, const QDict *qdict)
1317 {
1318     dump_opcount_info();
1319 }
1320 #endif
1321
1322 static void hmp_info_sync_profile(Monitor *mon, const QDict *qdict)
1323 {
1324     int64_t max = qdict_get_try_int(qdict, "max", 10);
1325     bool mean = qdict_get_try_bool(qdict, "mean", false);
1326     bool coalesce = !qdict_get_try_bool(qdict, "no_coalesce", false);
1327     enum QSPSortBy sort_by;
1328
1329     sort_by = mean ? QSP_SORT_BY_AVG_WAIT_TIME : QSP_SORT_BY_TOTAL_WAIT_TIME;
1330     qsp_report(max, sort_by, coalesce);
1331 }
1332
1333 static void hmp_info_history(Monitor *mon, const QDict *qdict)
1334 {
1335     int i;
1336     const char *str;
1337
1338     if (!mon->rs)
1339         return;
1340     i = 0;
1341     for(;;) {
1342         str = readline_get_history(mon->rs, i);
1343         if (!str)
1344             break;
1345         monitor_printf(mon, "%d: '%s'\n", i, str);
1346         i++;
1347     }
1348 }
1349
1350 static void hmp_info_cpustats(Monitor *mon, const QDict *qdict)
1351 {
1352     CPUState *cs = mon_get_cpu();
1353
1354     if (!cs) {
1355         monitor_printf(mon, "No CPU available\n");
1356         return;
1357     }
1358     cpu_dump_statistics(cs, 0);
1359 }
1360
1361 static void hmp_info_trace_events(Monitor *mon, const QDict *qdict)
1362 {
1363     const char *name = qdict_get_try_str(qdict, "name");
1364     bool has_vcpu = qdict_haskey(qdict, "vcpu");
1365     int vcpu = qdict_get_try_int(qdict, "vcpu", 0);
1366     TraceEventInfoList *events;
1367     TraceEventInfoList *elem;
1368     Error *local_err = NULL;
1369
1370     if (name == NULL) {
1371         name = "*";
1372     }
1373     if (vcpu < 0) {
1374         monitor_printf(mon, "argument vcpu must be positive");
1375         return;
1376     }
1377
1378     events = qmp_trace_event_get_state(name, has_vcpu, vcpu, &local_err);
1379     if (local_err) {
1380         error_report_err(local_err);
1381         return;
1382     }
1383
1384     for (elem = events; elem != NULL; elem = elem->next) {
1385         monitor_printf(mon, "%s : state %u\n",
1386                        elem->value->name,
1387                        elem->value->state == TRACE_EVENT_STATE_ENABLED ? 1 : 0);
1388     }
1389     qapi_free_TraceEventInfoList(events);
1390 }
1391
1392 void qmp_client_migrate_info(const char *protocol, const char *hostname,
1393                              bool has_port, int64_t port,
1394                              bool has_tls_port, int64_t tls_port,
1395                              bool has_cert_subject, const char *cert_subject,
1396                              Error **errp)
1397 {
1398     if (strcmp(protocol, "spice") == 0) {
1399         if (!qemu_using_spice(errp)) {
1400             return;
1401         }
1402
1403         if (!has_port && !has_tls_port) {
1404             error_setg(errp, QERR_MISSING_PARAMETER, "port/tls-port");
1405             return;
1406         }
1407
1408         if (qemu_spice_migrate_info(hostname,
1409                                     has_port ? port : -1,
1410                                     has_tls_port ? tls_port : -1,
1411                                     cert_subject)) {
1412             error_setg(errp, QERR_UNDEFINED_ERROR);
1413             return;
1414         }
1415         return;
1416     }
1417
1418     error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "protocol", "spice");
1419 }
1420
1421 static void hmp_logfile(Monitor *mon, const QDict *qdict)
1422 {
1423     Error *err = NULL;
1424
1425     qemu_set_log_filename(qdict_get_str(qdict, "filename"), &err);
1426     if (err) {
1427         error_report_err(err);
1428     }
1429 }
1430
1431 static void hmp_log(Monitor *mon, const QDict *qdict)
1432 {
1433     int mask;
1434     const char *items = qdict_get_str(qdict, "items");
1435
1436     if (!strcmp(items, "none")) {
1437         mask = 0;
1438     } else {
1439         mask = qemu_str_to_log_mask(items);
1440         if (!mask) {
1441             help_cmd(mon, "log");
1442             return;
1443         }
1444     }
1445     qemu_set_log(mask);
1446 }
1447
1448 static void hmp_singlestep(Monitor *mon, const QDict *qdict)
1449 {
1450     const char *option = qdict_get_try_str(qdict, "option");
1451     if (!option || !strcmp(option, "on")) {
1452         singlestep = 1;
1453     } else if (!strcmp(option, "off")) {
1454         singlestep = 0;
1455     } else {
1456         monitor_printf(mon, "unexpected option %s\n", option);
1457     }
1458 }
1459
1460 static void hmp_gdbserver(Monitor *mon, const QDict *qdict)
1461 {
1462     const char *device = qdict_get_try_str(qdict, "device");
1463     if (!device)
1464         device = "tcp::" DEFAULT_GDBSTUB_PORT;
1465     if (gdbserver_start(device) < 0) {
1466         monitor_printf(mon, "Could not open gdbserver on device '%s'\n",
1467                        device);
1468     } else if (strcmp(device, "none") == 0) {
1469         monitor_printf(mon, "Disabled gdbserver\n");
1470     } else {
1471         monitor_printf(mon, "Waiting for gdb connection on device '%s'\n",
1472                        device);
1473     }
1474 }
1475
1476 static void hmp_watchdog_action(Monitor *mon, const QDict *qdict)
1477 {
1478     const char *action = qdict_get_str(qdict, "action");
1479     if (select_watchdog_action(action) == -1) {
1480         monitor_printf(mon, "Unknown watchdog action '%s'\n", action);
1481     }
1482 }
1483
1484 static void monitor_printc(Monitor *mon, int c)
1485 {
1486     monitor_printf(mon, "'");
1487     switch(c) {
1488     case '\'':
1489         monitor_printf(mon, "\\'");
1490         break;
1491     case '\\':
1492         monitor_printf(mon, "\\\\");
1493         break;
1494     case '\n':
1495         monitor_printf(mon, "\\n");
1496         break;
1497     case '\r':
1498         monitor_printf(mon, "\\r");
1499         break;
1500     default:
1501         if (c >= 32 && c <= 126) {
1502             monitor_printf(mon, "%c", c);
1503         } else {
1504             monitor_printf(mon, "\\x%02x", c);
1505         }
1506         break;
1507     }
1508     monitor_printf(mon, "'");
1509 }
1510
1511 static void memory_dump(Monitor *mon, int count, int format, int wsize,
1512                         hwaddr addr, int is_physical)
1513 {
1514     int l, line_size, i, max_digits, len;
1515     uint8_t buf[16];
1516     uint64_t v;
1517     CPUState *cs = mon_get_cpu();
1518
1519     if (!cs && (format == 'i' || !is_physical)) {
1520         monitor_printf(mon, "Can not dump without CPU\n");
1521         return;
1522     }
1523
1524     if (format == 'i') {
1525         monitor_disas(mon, cs, addr, count, is_physical);
1526         return;
1527     }
1528
1529     len = wsize * count;
1530     if (wsize == 1)
1531         line_size = 8;
1532     else
1533         line_size = 16;
1534     max_digits = 0;
1535
1536     switch(format) {
1537     case 'o':
1538         max_digits = DIV_ROUND_UP(wsize * 8, 3);
1539         break;
1540     default:
1541     case 'x':
1542         max_digits = (wsize * 8) / 4;
1543         break;
1544     case 'u':
1545     case 'd':
1546         max_digits = DIV_ROUND_UP(wsize * 8 * 10, 33);
1547         break;
1548     case 'c':
1549         wsize = 1;
1550         break;
1551     }
1552
1553     while (len > 0) {
1554         if (is_physical)
1555             monitor_printf(mon, TARGET_FMT_plx ":", addr);
1556         else
1557             monitor_printf(mon, TARGET_FMT_lx ":", (target_ulong)addr);
1558         l = len;
1559         if (l > line_size)
1560             l = line_size;
1561         if (is_physical) {
1562             AddressSpace *as = cs ? cs->as : &address_space_memory;
1563             MemTxResult r = address_space_read(as, addr,
1564                                                MEMTXATTRS_UNSPECIFIED, buf, l);
1565             if (r != MEMTX_OK) {
1566                 monitor_printf(mon, " Cannot access memory\n");
1567                 break;
1568             }
1569         } else {
1570             if (cpu_memory_rw_debug(cs, addr, buf, l, 0) < 0) {
1571                 monitor_printf(mon, " Cannot access memory\n");
1572                 break;
1573             }
1574         }
1575         i = 0;
1576         while (i < l) {
1577             switch(wsize) {
1578             default:
1579             case 1:
1580                 v = ldub_p(buf + i);
1581                 break;
1582             case 2:
1583                 v = lduw_p(buf + i);
1584                 break;
1585             case 4:
1586                 v = (uint32_t)ldl_p(buf + i);
1587                 break;
1588             case 8:
1589                 v = ldq_p(buf + i);
1590                 break;
1591             }
1592             monitor_printf(mon, " ");
1593             switch(format) {
1594             case 'o':
1595                 monitor_printf(mon, "%#*" PRIo64, max_digits, v);
1596                 break;
1597             case 'x':
1598                 monitor_printf(mon, "0x%0*" PRIx64, max_digits, v);
1599                 break;
1600             case 'u':
1601                 monitor_printf(mon, "%*" PRIu64, max_digits, v);
1602                 break;
1603             case 'd':
1604                 monitor_printf(mon, "%*" PRId64, max_digits, v);
1605                 break;
1606             case 'c':
1607                 monitor_printc(mon, v);
1608                 break;
1609             }
1610             i += wsize;
1611         }
1612         monitor_printf(mon, "\n");
1613         addr += l;
1614         len -= l;
1615     }
1616 }
1617
1618 static void hmp_memory_dump(Monitor *mon, const QDict *qdict)
1619 {
1620     int count = qdict_get_int(qdict, "count");
1621     int format = qdict_get_int(qdict, "format");
1622     int size = qdict_get_int(qdict, "size");
1623     target_long addr = qdict_get_int(qdict, "addr");
1624
1625     memory_dump(mon, count, format, size, addr, 0);
1626 }
1627
1628 static void hmp_physical_memory_dump(Monitor *mon, const QDict *qdict)
1629 {
1630     int count = qdict_get_int(qdict, "count");
1631     int format = qdict_get_int(qdict, "format");
1632     int size = qdict_get_int(qdict, "size");
1633     hwaddr addr = qdict_get_int(qdict, "addr");
1634
1635     memory_dump(mon, count, format, size, addr, 1);
1636 }
1637
1638 static void *gpa2hva(MemoryRegion **p_mr, hwaddr addr, Error **errp)
1639 {
1640     MemoryRegionSection mrs = memory_region_find(get_system_memory(),
1641                                                  addr, 1);
1642
1643     if (!mrs.mr) {
1644         error_setg(errp, "No memory is mapped at address 0x%" HWADDR_PRIx, addr);
1645         return NULL;
1646     }
1647
1648     if (!memory_region_is_ram(mrs.mr) && !memory_region_is_romd(mrs.mr)) {
1649         error_setg(errp, "Memory at address 0x%" HWADDR_PRIx "is not RAM", addr);
1650         memory_region_unref(mrs.mr);
1651         return NULL;
1652     }
1653
1654     *p_mr = mrs.mr;
1655     return qemu_map_ram_ptr(mrs.mr->ram_block, mrs.offset_within_region);
1656 }
1657
1658 static void hmp_gpa2hva(Monitor *mon, const QDict *qdict)
1659 {
1660     hwaddr addr = qdict_get_int(qdict, "addr");
1661     Error *local_err = NULL;
1662     MemoryRegion *mr = NULL;
1663     void *ptr;
1664
1665     ptr = gpa2hva(&mr, addr, &local_err);
1666     if (local_err) {
1667         error_report_err(local_err);
1668         return;
1669     }
1670
1671     monitor_printf(mon, "Host virtual address for 0x%" HWADDR_PRIx
1672                    " (%s) is %p\n",
1673                    addr, mr->name, ptr);
1674
1675     memory_region_unref(mr);
1676 }
1677
1678 static void hmp_gva2gpa(Monitor *mon, const QDict *qdict)
1679 {
1680     target_ulong addr = qdict_get_int(qdict, "addr");
1681     MemTxAttrs attrs;
1682     CPUState *cs = mon_get_cpu();
1683     hwaddr gpa;
1684
1685     if (!cs) {
1686         monitor_printf(mon, "No cpu\n");
1687         return;
1688     }
1689
1690     gpa  = cpu_get_phys_page_attrs_debug(cs, addr & TARGET_PAGE_MASK, &attrs);
1691     if (gpa == -1) {
1692         monitor_printf(mon, "Unmapped\n");
1693     } else {
1694         monitor_printf(mon, "gpa: %#" HWADDR_PRIx "\n",
1695                        gpa + (addr & ~TARGET_PAGE_MASK));
1696     }
1697 }
1698
1699 #ifdef CONFIG_LINUX
1700 static uint64_t vtop(void *ptr, Error **errp)
1701 {
1702     uint64_t pinfo;
1703     uint64_t ret = -1;
1704     uintptr_t addr = (uintptr_t) ptr;
1705     uintptr_t pagesize = getpagesize();
1706     off_t offset = addr / pagesize * sizeof(pinfo);
1707     int fd;
1708
1709     fd = open("/proc/self/pagemap", O_RDONLY);
1710     if (fd == -1) {
1711         error_setg_errno(errp, errno, "Cannot open /proc/self/pagemap");
1712         return -1;
1713     }
1714
1715     /* Force copy-on-write if necessary.  */
1716     atomic_add((uint8_t *)ptr, 0);
1717
1718     if (pread(fd, &pinfo, sizeof(pinfo), offset) != sizeof(pinfo)) {
1719         error_setg_errno(errp, errno, "Cannot read pagemap");
1720         goto out;
1721     }
1722     if ((pinfo & (1ull << 63)) == 0) {
1723         error_setg(errp, "Page not present");
1724         goto out;
1725     }
1726     ret = ((pinfo & 0x007fffffffffffffull) * pagesize) | (addr & (pagesize - 1));
1727
1728 out:
1729     close(fd);
1730     return ret;
1731 }
1732
1733 static void hmp_gpa2hpa(Monitor *mon, const QDict *qdict)
1734 {
1735     hwaddr addr = qdict_get_int(qdict, "addr");
1736     Error *local_err = NULL;
1737     MemoryRegion *mr = NULL;
1738     void *ptr;
1739     uint64_t physaddr;
1740
1741     ptr = gpa2hva(&mr, addr, &local_err);
1742     if (local_err) {
1743         error_report_err(local_err);
1744         return;
1745     }
1746
1747     physaddr = vtop(ptr, &local_err);
1748     if (local_err) {
1749         error_report_err(local_err);
1750     } else {
1751         monitor_printf(mon, "Host physical address for 0x%" HWADDR_PRIx
1752                        " (%s) is 0x%" PRIx64 "\n",
1753                        addr, mr->name, (uint64_t) physaddr);
1754     }
1755
1756     memory_region_unref(mr);
1757 }
1758 #endif
1759
1760 static void do_print(Monitor *mon, const QDict *qdict)
1761 {
1762     int format = qdict_get_int(qdict, "format");
1763     hwaddr val = qdict_get_int(qdict, "val");
1764
1765     switch(format) {
1766     case 'o':
1767         monitor_printf(mon, "%#" HWADDR_PRIo, val);
1768         break;
1769     case 'x':
1770         monitor_printf(mon, "%#" HWADDR_PRIx, val);
1771         break;
1772     case 'u':
1773         monitor_printf(mon, "%" HWADDR_PRIu, val);
1774         break;
1775     default:
1776     case 'd':
1777         monitor_printf(mon, "%" HWADDR_PRId, val);
1778         break;
1779     case 'c':
1780         monitor_printc(mon, val);
1781         break;
1782     }
1783     monitor_printf(mon, "\n");
1784 }
1785
1786 static void hmp_sum(Monitor *mon, const QDict *qdict)
1787 {
1788     uint32_t addr;
1789     uint16_t sum;
1790     uint32_t start = qdict_get_int(qdict, "start");
1791     uint32_t size = qdict_get_int(qdict, "size");
1792
1793     sum = 0;
1794     for(addr = start; addr < (start + size); addr++) {
1795         uint8_t val = address_space_ldub(&address_space_memory, addr,
1796                                          MEMTXATTRS_UNSPECIFIED, NULL);
1797         /* BSD sum algorithm ('sum' Unix command) */
1798         sum = (sum >> 1) | (sum << 15);
1799         sum += val;
1800     }
1801     monitor_printf(mon, "%05d\n", sum);
1802 }
1803
1804 static int mouse_button_state;
1805
1806 static void hmp_mouse_move(Monitor *mon, const QDict *qdict)
1807 {
1808     int dx, dy, dz, button;
1809     const char *dx_str = qdict_get_str(qdict, "dx_str");
1810     const char *dy_str = qdict_get_str(qdict, "dy_str");
1811     const char *dz_str = qdict_get_try_str(qdict, "dz_str");
1812
1813     dx = strtol(dx_str, NULL, 0);
1814     dy = strtol(dy_str, NULL, 0);
1815     qemu_input_queue_rel(NULL, INPUT_AXIS_X, dx);
1816     qemu_input_queue_rel(NULL, INPUT_AXIS_Y, dy);
1817
1818     if (dz_str) {
1819         dz = strtol(dz_str, NULL, 0);
1820         if (dz != 0) {
1821             button = (dz > 0) ? INPUT_BUTTON_WHEEL_UP : INPUT_BUTTON_WHEEL_DOWN;
1822             qemu_input_queue_btn(NULL, button, true);
1823             qemu_input_event_sync();
1824             qemu_input_queue_btn(NULL, button, false);
1825         }
1826     }
1827     qemu_input_event_sync();
1828 }
1829
1830 static void hmp_mouse_button(Monitor *mon, const QDict *qdict)
1831 {
1832     static uint32_t bmap[INPUT_BUTTON__MAX] = {
1833         [INPUT_BUTTON_LEFT]       = MOUSE_EVENT_LBUTTON,
1834         [INPUT_BUTTON_MIDDLE]     = MOUSE_EVENT_MBUTTON,
1835         [INPUT_BUTTON_RIGHT]      = MOUSE_EVENT_RBUTTON,
1836     };
1837     int button_state = qdict_get_int(qdict, "button_state");
1838
1839     if (mouse_button_state == button_state) {
1840         return;
1841     }
1842     qemu_input_update_buttons(NULL, bmap, mouse_button_state, button_state);
1843     qemu_input_event_sync();
1844     mouse_button_state = button_state;
1845 }
1846
1847 static void hmp_ioport_read(Monitor *mon, const QDict *qdict)
1848 {
1849     int size = qdict_get_int(qdict, "size");
1850     int addr = qdict_get_int(qdict, "addr");
1851     int has_index = qdict_haskey(qdict, "index");
1852     uint32_t val;
1853     int suffix;
1854
1855     if (has_index) {
1856         int index = qdict_get_int(qdict, "index");
1857         cpu_outb(addr & IOPORTS_MASK, index & 0xff);
1858         addr++;
1859     }
1860     addr &= 0xffff;
1861
1862     switch(size) {
1863     default:
1864     case 1:
1865         val = cpu_inb(addr);
1866         suffix = 'b';
1867         break;
1868     case 2:
1869         val = cpu_inw(addr);
1870         suffix = 'w';
1871         break;
1872     case 4:
1873         val = cpu_inl(addr);
1874         suffix = 'l';
1875         break;
1876     }
1877     monitor_printf(mon, "port%c[0x%04x] = %#0*x\n",
1878                    suffix, addr, size * 2, val);
1879 }
1880
1881 static void hmp_ioport_write(Monitor *mon, const QDict *qdict)
1882 {
1883     int size = qdict_get_int(qdict, "size");
1884     int addr = qdict_get_int(qdict, "addr");
1885     int val = qdict_get_int(qdict, "val");
1886
1887     addr &= IOPORTS_MASK;
1888
1889     switch (size) {
1890     default:
1891     case 1:
1892         cpu_outb(addr, val);
1893         break;
1894     case 2:
1895         cpu_outw(addr, val);
1896         break;
1897     case 4:
1898         cpu_outl(addr, val);
1899         break;
1900     }
1901 }
1902
1903 static void hmp_boot_set(Monitor *mon, const QDict *qdict)
1904 {
1905     Error *local_err = NULL;
1906     const char *bootdevice = qdict_get_str(qdict, "bootdevice");
1907
1908     qemu_boot_set(bootdevice, &local_err);
1909     if (local_err) {
1910         error_report_err(local_err);
1911     } else {
1912         monitor_printf(mon, "boot device list now set to %s\n", bootdevice);
1913     }
1914 }
1915
1916 static void hmp_info_mtree(Monitor *mon, const QDict *qdict)
1917 {
1918     bool flatview = qdict_get_try_bool(qdict, "flatview", false);
1919     bool dispatch_tree = qdict_get_try_bool(qdict, "dispatch_tree", false);
1920     bool owner = qdict_get_try_bool(qdict, "owner", false);
1921
1922     mtree_info(flatview, dispatch_tree, owner);
1923 }
1924
1925 static void hmp_info_numa(Monitor *mon, const QDict *qdict)
1926 {
1927     int i;
1928     NumaNodeMem *node_mem;
1929     CpuInfoList *cpu_list, *cpu;
1930
1931     cpu_list = qmp_query_cpus(&error_abort);
1932     node_mem = g_new0(NumaNodeMem, nb_numa_nodes);
1933
1934     query_numa_node_mem(node_mem);
1935     monitor_printf(mon, "%d nodes\n", nb_numa_nodes);
1936     for (i = 0; i < nb_numa_nodes; i++) {
1937         monitor_printf(mon, "node %d cpus:", i);
1938         for (cpu = cpu_list; cpu; cpu = cpu->next) {
1939             if (cpu->value->has_props && cpu->value->props->has_node_id &&
1940                 cpu->value->props->node_id == i) {
1941                 monitor_printf(mon, " %" PRIi64, cpu->value->CPU);
1942             }
1943         }
1944         monitor_printf(mon, "\n");
1945         monitor_printf(mon, "node %d size: %" PRId64 " MB\n", i,
1946                        node_mem[i].node_mem >> 20);
1947         monitor_printf(mon, "node %d plugged: %" PRId64 " MB\n", i,
1948                        node_mem[i].node_plugged_mem >> 20);
1949     }
1950     qapi_free_CpuInfoList(cpu_list);
1951     g_free(node_mem);
1952 }
1953
1954 #ifdef CONFIG_PROFILER
1955
1956 int64_t dev_time;
1957
1958 static void hmp_info_profile(Monitor *mon, const QDict *qdict)
1959 {
1960     static int64_t last_cpu_exec_time;
1961     int64_t cpu_exec_time;
1962     int64_t delta;
1963
1964     cpu_exec_time = tcg_cpu_exec_time();
1965     delta = cpu_exec_time - last_cpu_exec_time;
1966
1967     monitor_printf(mon, "async time  %" PRId64 " (%0.3f)\n",
1968                    dev_time, dev_time / (double)NANOSECONDS_PER_SECOND);
1969     monitor_printf(mon, "qemu time   %" PRId64 " (%0.3f)\n",
1970                    delta, delta / (double)NANOSECONDS_PER_SECOND);
1971     last_cpu_exec_time = cpu_exec_time;
1972     dev_time = 0;
1973 }
1974 #else
1975 static void hmp_info_profile(Monitor *mon, const QDict *qdict)
1976 {
1977     monitor_printf(mon, "Internal profiler not compiled\n");
1978 }
1979 #endif
1980
1981 /* Capture support */
1982 static QLIST_HEAD (capture_list_head, CaptureState) capture_head;
1983
1984 static void hmp_info_capture(Monitor *mon, const QDict *qdict)
1985 {
1986     int i;
1987     CaptureState *s;
1988
1989     for (s = capture_head.lh_first, i = 0; s; s = s->entries.le_next, ++i) {
1990         monitor_printf(mon, "[%d]: ", i);
1991         s->ops.info (s->opaque);
1992     }
1993 }
1994
1995 static void hmp_stopcapture(Monitor *mon, const QDict *qdict)
1996 {
1997     int i;
1998     int n = qdict_get_int(qdict, "n");
1999     CaptureState *s;
2000
2001     for (s = capture_head.lh_first, i = 0; s; s = s->entries.le_next, ++i) {
2002         if (i == n) {
2003             s->ops.destroy (s->opaque);
2004             QLIST_REMOVE (s, entries);
2005             g_free (s);
2006             return;
2007         }
2008     }
2009 }
2010
2011 static void hmp_wavcapture(Monitor *mon, const QDict *qdict)
2012 {
2013     const char *path = qdict_get_str(qdict, "path");
2014     int has_freq = qdict_haskey(qdict, "freq");
2015     int freq = qdict_get_try_int(qdict, "freq", -1);
2016     int has_bits = qdict_haskey(qdict, "bits");
2017     int bits = qdict_get_try_int(qdict, "bits", -1);
2018     int has_channels = qdict_haskey(qdict, "nchannels");
2019     int nchannels = qdict_get_try_int(qdict, "nchannels", -1);
2020     CaptureState *s;
2021
2022     s = g_malloc0 (sizeof (*s));
2023
2024     freq = has_freq ? freq : 44100;
2025     bits = has_bits ? bits : 16;
2026     nchannels = has_channels ? nchannels : 2;
2027
2028     if (wav_start_capture (s, path, freq, bits, nchannels)) {
2029         monitor_printf(mon, "Failed to add wave capture\n");
2030         g_free (s);
2031         return;
2032     }
2033     QLIST_INSERT_HEAD (&capture_head, s, entries);
2034 }
2035
2036 static QAuthZList *find_auth(Monitor *mon, const char *name)
2037 {
2038     Object *obj;
2039     Object *container;
2040
2041     container = object_get_objects_root();
2042     obj = object_resolve_path_component(container, name);
2043     if (!obj) {
2044         monitor_printf(mon, "acl: unknown list '%s'\n", name);
2045         return NULL;
2046     }
2047
2048     return QAUTHZ_LIST(obj);
2049 }
2050
2051 static bool warn_acl;
2052 static void hmp_warn_acl(void)
2053 {
2054     if (warn_acl) {
2055         return;
2056     }
2057     error_report("The acl_show, acl_reset, acl_policy, acl_add, acl_remove "
2058                  "commands are deprecated with no replacement. Authorization "
2059                  "for VNC should be performed using the pluggable QAuthZ "
2060                  "objects");
2061     warn_acl = true;
2062 }
2063
2064 static void hmp_acl_show(Monitor *mon, const QDict *qdict)
2065 {
2066     const char *aclname = qdict_get_str(qdict, "aclname");
2067     QAuthZList *auth = find_auth(mon, aclname);
2068     QAuthZListRuleList *rules;
2069     size_t i = 0;
2070
2071     hmp_warn_acl();
2072
2073     if (!auth) {
2074         return;
2075     }
2076
2077     monitor_printf(mon, "policy: %s\n",
2078                    QAuthZListPolicy_str(auth->policy));
2079
2080     rules = auth->rules;
2081     while (rules) {
2082         QAuthZListRule *rule = rules->value;
2083         i++;
2084         monitor_printf(mon, "%zu: %s %s\n", i,
2085                        QAuthZListPolicy_str(rule->policy),
2086                        rule->match);
2087         rules = rules->next;
2088     }
2089 }
2090
2091 static void hmp_acl_reset(Monitor *mon, const QDict *qdict)
2092 {
2093     const char *aclname = qdict_get_str(qdict, "aclname");
2094     QAuthZList *auth = find_auth(mon, aclname);
2095
2096     hmp_warn_acl();
2097
2098     if (!auth) {
2099         return;
2100     }
2101
2102     auth->policy = QAUTHZ_LIST_POLICY_DENY;
2103     qapi_free_QAuthZListRuleList(auth->rules);
2104     auth->rules = NULL;
2105     monitor_printf(mon, "acl: removed all rules\n");
2106 }
2107
2108 static void hmp_acl_policy(Monitor *mon, const QDict *qdict)
2109 {
2110     const char *aclname = qdict_get_str(qdict, "aclname");
2111     const char *policy = qdict_get_str(qdict, "policy");
2112     QAuthZList *auth = find_auth(mon, aclname);
2113     int val;
2114     Error *err = NULL;
2115
2116     hmp_warn_acl();
2117
2118     if (!auth) {
2119         return;
2120     }
2121
2122     val = qapi_enum_parse(&QAuthZListPolicy_lookup,
2123                           policy,
2124                           QAUTHZ_LIST_POLICY_DENY,
2125                           &err);
2126     if (err) {
2127         error_free(err);
2128         monitor_printf(mon, "acl: unknown policy '%s', "
2129                        "expected 'deny' or 'allow'\n", policy);
2130     } else {
2131         auth->policy = val;
2132         if (auth->policy == QAUTHZ_LIST_POLICY_ALLOW) {
2133             monitor_printf(mon, "acl: policy set to 'allow'\n");
2134         } else {
2135             monitor_printf(mon, "acl: policy set to 'deny'\n");
2136         }
2137     }
2138 }
2139
2140 static QAuthZListFormat hmp_acl_get_format(const char *match)
2141 {
2142     if (strchr(match, '*')) {
2143         return QAUTHZ_LIST_FORMAT_GLOB;
2144     } else {
2145         return QAUTHZ_LIST_FORMAT_EXACT;
2146     }
2147 }
2148
2149 static void hmp_acl_add(Monitor *mon, const QDict *qdict)
2150 {
2151     const char *aclname = qdict_get_str(qdict, "aclname");
2152     const char *match = qdict_get_str(qdict, "match");
2153     const char *policystr = qdict_get_str(qdict, "policy");
2154     int has_index = qdict_haskey(qdict, "index");
2155     int index = qdict_get_try_int(qdict, "index", -1);
2156     QAuthZList *auth = find_auth(mon, aclname);
2157     Error *err = NULL;
2158     QAuthZListPolicy policy;
2159     QAuthZListFormat format;
2160     size_t i = 0;
2161
2162     hmp_warn_acl();
2163
2164     if (!auth) {
2165         return;
2166     }
2167
2168     policy = qapi_enum_parse(&QAuthZListPolicy_lookup,
2169                              policystr,
2170                              QAUTHZ_LIST_POLICY_DENY,
2171                              &err);
2172     if (err) {
2173         error_free(err);
2174         monitor_printf(mon, "acl: unknown policy '%s', "
2175                        "expected 'deny' or 'allow'\n", policystr);
2176         return;
2177     }
2178
2179     format = hmp_acl_get_format(match);
2180
2181     if (has_index && index == 0) {
2182         monitor_printf(mon, "acl: unable to add acl entry\n");
2183         return;
2184     }
2185
2186     if (has_index) {
2187         i = qauthz_list_insert_rule(auth, match, policy,
2188                                     format, index - 1, &err);
2189     } else {
2190         i = qauthz_list_append_rule(auth, match, policy,
2191                                     format, &err);
2192     }
2193     if (err) {
2194         monitor_printf(mon, "acl: unable to add rule: %s",
2195                        error_get_pretty(err));
2196         error_free(err);
2197     } else {
2198         monitor_printf(mon, "acl: added rule at position %zu\n", i + 1);
2199     }
2200 }
2201
2202 static void hmp_acl_remove(Monitor *mon, const QDict *qdict)
2203 {
2204     const char *aclname = qdict_get_str(qdict, "aclname");
2205     const char *match = qdict_get_str(qdict, "match");
2206     QAuthZList *auth = find_auth(mon, aclname);
2207     ssize_t i = 0;
2208
2209     hmp_warn_acl();
2210
2211     if (!auth) {
2212         return;
2213     }
2214
2215     i = qauthz_list_delete_rule(auth, match);
2216     if (i >= 0) {
2217         monitor_printf(mon, "acl: removed rule at position %zu\n", i + 1);
2218     } else {
2219         monitor_printf(mon, "acl: no matching acl entry\n");
2220     }
2221 }
2222
2223 void qmp_getfd(const char *fdname, Error **errp)
2224 {
2225     mon_fd_t *monfd;
2226     int fd, tmp_fd;
2227
2228     fd = qemu_chr_fe_get_msgfd(&cur_mon->chr);
2229     if (fd == -1) {
2230         error_setg(errp, QERR_FD_NOT_SUPPLIED);
2231         return;
2232     }
2233
2234     if (qemu_isdigit(fdname[0])) {
2235         close(fd);
2236         error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "fdname",
2237                    "a name not starting with a digit");
2238         return;
2239     }
2240
2241     qemu_mutex_lock(&cur_mon->mon_lock);
2242     QLIST_FOREACH(monfd, &cur_mon->fds, next) {
2243         if (strcmp(monfd->name, fdname) != 0) {
2244             continue;
2245         }
2246
2247         tmp_fd = monfd->fd;
2248         monfd->fd = fd;
2249         qemu_mutex_unlock(&cur_mon->mon_lock);
2250         /* Make sure close() is outside critical section */
2251         close(tmp_fd);
2252         return;
2253     }
2254
2255     monfd = g_malloc0(sizeof(mon_fd_t));
2256     monfd->name = g_strdup(fdname);
2257     monfd->fd = fd;
2258
2259     QLIST_INSERT_HEAD(&cur_mon->fds, monfd, next);
2260     qemu_mutex_unlock(&cur_mon->mon_lock);
2261 }
2262
2263 void qmp_closefd(const char *fdname, Error **errp)
2264 {
2265     mon_fd_t *monfd;
2266     int tmp_fd;
2267
2268     qemu_mutex_lock(&cur_mon->mon_lock);
2269     QLIST_FOREACH(monfd, &cur_mon->fds, next) {
2270         if (strcmp(monfd->name, fdname) != 0) {
2271             continue;
2272         }
2273
2274         QLIST_REMOVE(monfd, next);
2275         tmp_fd = monfd->fd;
2276         g_free(monfd->name);
2277         g_free(monfd);
2278         qemu_mutex_unlock(&cur_mon->mon_lock);
2279         /* Make sure close() is outside critical section */
2280         close(tmp_fd);
2281         return;
2282     }
2283
2284     qemu_mutex_unlock(&cur_mon->mon_lock);
2285     error_setg(errp, QERR_FD_NOT_FOUND, fdname);
2286 }
2287
2288 int monitor_get_fd(Monitor *mon, const char *fdname, Error **errp)
2289 {
2290     mon_fd_t *monfd;
2291
2292     qemu_mutex_lock(&mon->mon_lock);
2293     QLIST_FOREACH(monfd, &mon->fds, next) {
2294         int fd;
2295
2296         if (strcmp(monfd->name, fdname) != 0) {
2297             continue;
2298         }
2299
2300         fd = monfd->fd;
2301
2302         /* caller takes ownership of fd */
2303         QLIST_REMOVE(monfd, next);
2304         g_free(monfd->name);
2305         g_free(monfd);
2306         qemu_mutex_unlock(&mon->mon_lock);
2307
2308         return fd;
2309     }
2310
2311     qemu_mutex_unlock(&mon->mon_lock);
2312     error_setg(errp, "File descriptor named '%s' has not been found", fdname);
2313     return -1;
2314 }
2315
2316 static void monitor_fdset_cleanup(MonFdset *mon_fdset)
2317 {
2318     MonFdsetFd *mon_fdset_fd;
2319     MonFdsetFd *mon_fdset_fd_next;
2320
2321     QLIST_FOREACH_SAFE(mon_fdset_fd, &mon_fdset->fds, next, mon_fdset_fd_next) {
2322         if ((mon_fdset_fd->removed ||
2323                 (QLIST_EMPTY(&mon_fdset->dup_fds) && mon_refcount == 0)) &&
2324                 runstate_is_running()) {
2325             close(mon_fdset_fd->fd);
2326             g_free(mon_fdset_fd->opaque);
2327             QLIST_REMOVE(mon_fdset_fd, next);
2328             g_free(mon_fdset_fd);
2329         }
2330     }
2331
2332     if (QLIST_EMPTY(&mon_fdset->fds) && QLIST_EMPTY(&mon_fdset->dup_fds)) {
2333         QLIST_REMOVE(mon_fdset, next);
2334         g_free(mon_fdset);
2335     }
2336 }
2337
2338 static void monitor_fdsets_cleanup(void)
2339 {
2340     MonFdset *mon_fdset;
2341     MonFdset *mon_fdset_next;
2342
2343     qemu_mutex_lock(&mon_fdsets_lock);
2344     QLIST_FOREACH_SAFE(mon_fdset, &mon_fdsets, next, mon_fdset_next) {
2345         monitor_fdset_cleanup(mon_fdset);
2346     }
2347     qemu_mutex_unlock(&mon_fdsets_lock);
2348 }
2349
2350 AddfdInfo *qmp_add_fd(bool has_fdset_id, int64_t fdset_id, bool has_opaque,
2351                       const char *opaque, Error **errp)
2352 {
2353     int fd;
2354     Monitor *mon = cur_mon;
2355     AddfdInfo *fdinfo;
2356
2357     fd = qemu_chr_fe_get_msgfd(&mon->chr);
2358     if (fd == -1) {
2359         error_setg(errp, QERR_FD_NOT_SUPPLIED);
2360         goto error;
2361     }
2362
2363     fdinfo = monitor_fdset_add_fd(fd, has_fdset_id, fdset_id,
2364                                   has_opaque, opaque, errp);
2365     if (fdinfo) {
2366         return fdinfo;
2367     }
2368
2369 error:
2370     if (fd != -1) {
2371         close(fd);
2372     }
2373     return NULL;
2374 }
2375
2376 void qmp_remove_fd(int64_t fdset_id, bool has_fd, int64_t fd, Error **errp)
2377 {
2378     MonFdset *mon_fdset;
2379     MonFdsetFd *mon_fdset_fd;
2380     char fd_str[60];
2381
2382     qemu_mutex_lock(&mon_fdsets_lock);
2383     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2384         if (mon_fdset->id != fdset_id) {
2385             continue;
2386         }
2387         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2388             if (has_fd) {
2389                 if (mon_fdset_fd->fd != fd) {
2390                     continue;
2391                 }
2392                 mon_fdset_fd->removed = true;
2393                 break;
2394             } else {
2395                 mon_fdset_fd->removed = true;
2396             }
2397         }
2398         if (has_fd && !mon_fdset_fd) {
2399             goto error;
2400         }
2401         monitor_fdset_cleanup(mon_fdset);
2402         qemu_mutex_unlock(&mon_fdsets_lock);
2403         return;
2404     }
2405
2406 error:
2407     qemu_mutex_unlock(&mon_fdsets_lock);
2408     if (has_fd) {
2409         snprintf(fd_str, sizeof(fd_str), "fdset-id:%" PRId64 ", fd:%" PRId64,
2410                  fdset_id, fd);
2411     } else {
2412         snprintf(fd_str, sizeof(fd_str), "fdset-id:%" PRId64, fdset_id);
2413     }
2414     error_setg(errp, QERR_FD_NOT_FOUND, fd_str);
2415 }
2416
2417 FdsetInfoList *qmp_query_fdsets(Error **errp)
2418 {
2419     MonFdset *mon_fdset;
2420     MonFdsetFd *mon_fdset_fd;
2421     FdsetInfoList *fdset_list = NULL;
2422
2423     qemu_mutex_lock(&mon_fdsets_lock);
2424     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2425         FdsetInfoList *fdset_info = g_malloc0(sizeof(*fdset_info));
2426         FdsetFdInfoList *fdsetfd_list = NULL;
2427
2428         fdset_info->value = g_malloc0(sizeof(*fdset_info->value));
2429         fdset_info->value->fdset_id = mon_fdset->id;
2430
2431         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2432             FdsetFdInfoList *fdsetfd_info;
2433
2434             fdsetfd_info = g_malloc0(sizeof(*fdsetfd_info));
2435             fdsetfd_info->value = g_malloc0(sizeof(*fdsetfd_info->value));
2436             fdsetfd_info->value->fd = mon_fdset_fd->fd;
2437             if (mon_fdset_fd->opaque) {
2438                 fdsetfd_info->value->has_opaque = true;
2439                 fdsetfd_info->value->opaque = g_strdup(mon_fdset_fd->opaque);
2440             } else {
2441                 fdsetfd_info->value->has_opaque = false;
2442             }
2443
2444             fdsetfd_info->next = fdsetfd_list;
2445             fdsetfd_list = fdsetfd_info;
2446         }
2447
2448         fdset_info->value->fds = fdsetfd_list;
2449
2450         fdset_info->next = fdset_list;
2451         fdset_list = fdset_info;
2452     }
2453     qemu_mutex_unlock(&mon_fdsets_lock);
2454
2455     return fdset_list;
2456 }
2457
2458 AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id,
2459                                 bool has_opaque, const char *opaque,
2460                                 Error **errp)
2461 {
2462     MonFdset *mon_fdset = NULL;
2463     MonFdsetFd *mon_fdset_fd;
2464     AddfdInfo *fdinfo;
2465
2466     qemu_mutex_lock(&mon_fdsets_lock);
2467     if (has_fdset_id) {
2468         QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2469             /* Break if match found or match impossible due to ordering by ID */
2470             if (fdset_id <= mon_fdset->id) {
2471                 if (fdset_id < mon_fdset->id) {
2472                     mon_fdset = NULL;
2473                 }
2474                 break;
2475             }
2476         }
2477     }
2478
2479     if (mon_fdset == NULL) {
2480         int64_t fdset_id_prev = -1;
2481         MonFdset *mon_fdset_cur = QLIST_FIRST(&mon_fdsets);
2482
2483         if (has_fdset_id) {
2484             if (fdset_id < 0) {
2485                 error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "fdset-id",
2486                            "a non-negative value");
2487                 qemu_mutex_unlock(&mon_fdsets_lock);
2488                 return NULL;
2489             }
2490             /* Use specified fdset ID */
2491             QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2492                 mon_fdset_cur = mon_fdset;
2493                 if (fdset_id < mon_fdset_cur->id) {
2494                     break;
2495                 }
2496             }
2497         } else {
2498             /* Use first available fdset ID */
2499             QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2500                 mon_fdset_cur = mon_fdset;
2501                 if (fdset_id_prev == mon_fdset_cur->id - 1) {
2502                     fdset_id_prev = mon_fdset_cur->id;
2503                     continue;
2504                 }
2505                 break;
2506             }
2507         }
2508
2509         mon_fdset = g_malloc0(sizeof(*mon_fdset));
2510         if (has_fdset_id) {
2511             mon_fdset->id = fdset_id;
2512         } else {
2513             mon_fdset->id = fdset_id_prev + 1;
2514         }
2515
2516         /* The fdset list is ordered by fdset ID */
2517         if (!mon_fdset_cur) {
2518             QLIST_INSERT_HEAD(&mon_fdsets, mon_fdset, next);
2519         } else if (mon_fdset->id < mon_fdset_cur->id) {
2520             QLIST_INSERT_BEFORE(mon_fdset_cur, mon_fdset, next);
2521         } else {
2522             QLIST_INSERT_AFTER(mon_fdset_cur, mon_fdset, next);
2523         }
2524     }
2525
2526     mon_fdset_fd = g_malloc0(sizeof(*mon_fdset_fd));
2527     mon_fdset_fd->fd = fd;
2528     mon_fdset_fd->removed = false;
2529     if (has_opaque) {
2530         mon_fdset_fd->opaque = g_strdup(opaque);
2531     }
2532     QLIST_INSERT_HEAD(&mon_fdset->fds, mon_fdset_fd, next);
2533
2534     fdinfo = g_malloc0(sizeof(*fdinfo));
2535     fdinfo->fdset_id = mon_fdset->id;
2536     fdinfo->fd = mon_fdset_fd->fd;
2537
2538     qemu_mutex_unlock(&mon_fdsets_lock);
2539     return fdinfo;
2540 }
2541
2542 int monitor_fdset_get_fd(int64_t fdset_id, int flags)
2543 {
2544 #ifdef _WIN32
2545     return -ENOENT;
2546 #else
2547     MonFdset *mon_fdset;
2548     MonFdsetFd *mon_fdset_fd;
2549     int mon_fd_flags;
2550     int ret;
2551
2552     qemu_mutex_lock(&mon_fdsets_lock);
2553     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2554         if (mon_fdset->id != fdset_id) {
2555             continue;
2556         }
2557         QLIST_FOREACH(mon_fdset_fd, &mon_fdset->fds, next) {
2558             mon_fd_flags = fcntl(mon_fdset_fd->fd, F_GETFL);
2559             if (mon_fd_flags == -1) {
2560                 ret = -errno;
2561                 goto out;
2562             }
2563
2564             if ((flags & O_ACCMODE) == (mon_fd_flags & O_ACCMODE)) {
2565                 ret = mon_fdset_fd->fd;
2566                 goto out;
2567             }
2568         }
2569         ret = -EACCES;
2570         goto out;
2571     }
2572     ret = -ENOENT;
2573
2574 out:
2575     qemu_mutex_unlock(&mon_fdsets_lock);
2576     return ret;
2577 #endif
2578 }
2579
2580 int monitor_fdset_dup_fd_add(int64_t fdset_id, int dup_fd)
2581 {
2582     MonFdset *mon_fdset;
2583     MonFdsetFd *mon_fdset_fd_dup;
2584
2585     qemu_mutex_lock(&mon_fdsets_lock);
2586     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2587         if (mon_fdset->id != fdset_id) {
2588             continue;
2589         }
2590         QLIST_FOREACH(mon_fdset_fd_dup, &mon_fdset->dup_fds, next) {
2591             if (mon_fdset_fd_dup->fd == dup_fd) {
2592                 goto err;
2593             }
2594         }
2595         mon_fdset_fd_dup = g_malloc0(sizeof(*mon_fdset_fd_dup));
2596         mon_fdset_fd_dup->fd = dup_fd;
2597         QLIST_INSERT_HEAD(&mon_fdset->dup_fds, mon_fdset_fd_dup, next);
2598         qemu_mutex_unlock(&mon_fdsets_lock);
2599         return 0;
2600     }
2601
2602 err:
2603     qemu_mutex_unlock(&mon_fdsets_lock);
2604     return -1;
2605 }
2606
2607 static int monitor_fdset_dup_fd_find_remove(int dup_fd, bool remove)
2608 {
2609     MonFdset *mon_fdset;
2610     MonFdsetFd *mon_fdset_fd_dup;
2611
2612     qemu_mutex_lock(&mon_fdsets_lock);
2613     QLIST_FOREACH(mon_fdset, &mon_fdsets, next) {
2614         QLIST_FOREACH(mon_fdset_fd_dup, &mon_fdset->dup_fds, next) {
2615             if (mon_fdset_fd_dup->fd == dup_fd) {
2616                 if (remove) {
2617                     QLIST_REMOVE(mon_fdset_fd_dup, next);
2618                     if (QLIST_EMPTY(&mon_fdset->dup_fds)) {
2619                         monitor_fdset_cleanup(mon_fdset);
2620                     }
2621                     goto err;
2622                 } else {
2623                     qemu_mutex_unlock(&mon_fdsets_lock);
2624                     return mon_fdset->id;
2625                 }
2626             }
2627         }
2628     }
2629
2630 err:
2631     qemu_mutex_unlock(&mon_fdsets_lock);
2632     return -1;
2633 }
2634
2635 int monitor_fdset_dup_fd_find(int dup_fd)
2636 {
2637     return monitor_fdset_dup_fd_find_remove(dup_fd, false);
2638 }
2639
2640 void monitor_fdset_dup_fd_remove(int dup_fd)
2641 {
2642     monitor_fdset_dup_fd_find_remove(dup_fd, true);
2643 }
2644
2645 int monitor_fd_param(Monitor *mon, const char *fdname, Error **errp)
2646 {
2647     int fd;
2648     Error *local_err = NULL;
2649
2650     if (!qemu_isdigit(fdname[0]) && mon) {
2651         fd = monitor_get_fd(mon, fdname, &local_err);
2652     } else {
2653         fd = qemu_parse_fd(fdname);
2654         if (fd == -1) {
2655             error_setg(&local_err, "Invalid file descriptor number '%s'",
2656                        fdname);
2657         }
2658     }
2659     if (local_err) {
2660         error_propagate(errp, local_err);
2661         assert(fd == -1);
2662     } else {
2663         assert(fd != -1);
2664     }
2665
2666     return fd;
2667 }
2668
2669 /* Please update hmp-commands.hx when adding or changing commands */
2670 static mon_cmd_t info_cmds[] = {
2671 #include "hmp-commands-info.h"
2672     { NULL, NULL, },
2673 };
2674
2675 /* mon_cmds and info_cmds would be sorted at runtime */
2676 static mon_cmd_t mon_cmds[] = {
2677 #include "hmp-commands.h"
2678     { NULL, NULL, },
2679 };
2680
2681 /*******************************************************************/
2682
2683 static const char *pch;
2684 static sigjmp_buf expr_env;
2685
2686
2687 static void GCC_FMT_ATTR(2, 3) QEMU_NORETURN
2688 expr_error(Monitor *mon, const char *fmt, ...)
2689 {
2690     va_list ap;
2691     va_start(ap, fmt);
2692     monitor_vprintf(mon, fmt, ap);
2693     monitor_printf(mon, "\n");
2694     va_end(ap);
2695     siglongjmp(expr_env, 1);
2696 }
2697
2698 /* return 0 if OK, -1 if not found */
2699 static int get_monitor_def(target_long *pval, const char *name)
2700 {
2701     const MonitorDef *md = target_monitor_defs();
2702     CPUState *cs = mon_get_cpu();
2703     void *ptr;
2704     uint64_t tmp = 0;
2705     int ret;
2706
2707     if (cs == NULL || md == NULL) {
2708         return -1;
2709     }
2710
2711     for(; md->name != NULL; md++) {
2712         if (compare_cmd(name, md->name)) {
2713             if (md->get_value) {
2714                 *pval = md->get_value(md, md->offset);
2715             } else {
2716                 CPUArchState *env = mon_get_cpu_env();
2717                 ptr = (uint8_t *)env + md->offset;
2718                 switch(md->type) {
2719                 case MD_I32:
2720                     *pval = *(int32_t *)ptr;
2721                     break;
2722                 case MD_TLONG:
2723                     *pval = *(target_long *)ptr;
2724                     break;
2725                 default:
2726                     *pval = 0;
2727                     break;
2728                 }
2729             }
2730             return 0;
2731         }
2732     }
2733
2734     ret = target_get_monitor_def(cs, name, &tmp);
2735     if (!ret) {
2736         *pval = (target_long) tmp;
2737     }
2738
2739     return ret;
2740 }
2741
2742 static void next(void)
2743 {
2744     if (*pch != '\0') {
2745         pch++;
2746         while (qemu_isspace(*pch))
2747             pch++;
2748     }
2749 }
2750
2751 static int64_t expr_sum(Monitor *mon);
2752
2753 static int64_t expr_unary(Monitor *mon)
2754 {
2755     int64_t n;
2756     char *p;
2757     int ret;
2758
2759     switch(*pch) {
2760     case '+':
2761         next();
2762         n = expr_unary(mon);
2763         break;
2764     case '-':
2765         next();
2766         n = -expr_unary(mon);
2767         break;
2768     case '~':
2769         next();
2770         n = ~expr_unary(mon);
2771         break;
2772     case '(':
2773         next();
2774         n = expr_sum(mon);
2775         if (*pch != ')') {
2776             expr_error(mon, "')' expected");
2777         }
2778         next();
2779         break;
2780     case '\'':
2781         pch++;
2782         if (*pch == '\0')
2783             expr_error(mon, "character constant expected");
2784         n = *pch;
2785         pch++;
2786         if (*pch != '\'')
2787             expr_error(mon, "missing terminating \' character");
2788         next();
2789         break;
2790     case '$':
2791         {
2792             char buf[128], *q;
2793             target_long reg=0;
2794
2795             pch++;
2796             q = buf;
2797             while ((*pch >= 'a' && *pch <= 'z') ||
2798                    (*pch >= 'A' && *pch <= 'Z') ||
2799                    (*pch >= '0' && *pch <= '9') ||
2800                    *pch == '_' || *pch == '.') {
2801                 if ((q - buf) < sizeof(buf) - 1)
2802                     *q++ = *pch;
2803                 pch++;
2804             }
2805             while (qemu_isspace(*pch))
2806                 pch++;
2807             *q = 0;
2808             ret = get_monitor_def(&reg, buf);
2809             if (ret < 0)
2810                 expr_error(mon, "unknown register");
2811             n = reg;
2812         }
2813         break;
2814     case '\0':
2815         expr_error(mon, "unexpected end of expression");
2816         n = 0;
2817         break;
2818     default:
2819         errno = 0;
2820         n = strtoull(pch, &p, 0);
2821         if (errno == ERANGE) {
2822             expr_error(mon, "number too large");
2823         }
2824         if (pch == p) {
2825             expr_error(mon, "invalid char '%c' in expression", *p);
2826         }
2827         pch = p;
2828         while (qemu_isspace(*pch))
2829             pch++;
2830         break;
2831     }
2832     return n;
2833 }
2834
2835
2836 static int64_t expr_prod(Monitor *mon)
2837 {
2838     int64_t val, val2;
2839     int op;
2840
2841     val = expr_unary(mon);
2842     for(;;) {
2843         op = *pch;
2844         if (op != '*' && op != '/' && op != '%')
2845             break;
2846         next();
2847         val2 = expr_unary(mon);
2848         switch(op) {
2849         default:
2850         case '*':
2851             val *= val2;
2852             break;
2853         case '/':
2854         case '%':
2855             if (val2 == 0)
2856                 expr_error(mon, "division by zero");
2857             if (op == '/')
2858                 val /= val2;
2859             else
2860                 val %= val2;
2861             break;
2862         }
2863     }
2864     return val;
2865 }
2866
2867 static int64_t expr_logic(Monitor *mon)
2868 {
2869     int64_t val, val2;
2870     int op;
2871
2872     val = expr_prod(mon);
2873     for(;;) {
2874         op = *pch;
2875         if (op != '&' && op != '|' && op != '^')
2876             break;
2877         next();
2878         val2 = expr_prod(mon);
2879         switch(op) {
2880         default:
2881         case '&':
2882             val &= val2;
2883             break;
2884         case '|':
2885             val |= val2;
2886             break;
2887         case '^':
2888             val ^= val2;
2889             break;
2890         }
2891     }
2892     return val;
2893 }
2894
2895 static int64_t expr_sum(Monitor *mon)
2896 {
2897     int64_t val, val2;
2898     int op;
2899
2900     val = expr_logic(mon);
2901     for(;;) {
2902         op = *pch;
2903         if (op != '+' && op != '-')
2904             break;
2905         next();
2906         val2 = expr_logic(mon);
2907         if (op == '+')
2908             val += val2;
2909         else
2910             val -= val2;
2911     }
2912     return val;
2913 }
2914
2915 static int get_expr(Monitor *mon, int64_t *pval, const char **pp)
2916 {
2917     pch = *pp;
2918     if (sigsetjmp(expr_env, 0)) {
2919         *pp = pch;
2920         return -1;
2921     }
2922     while (qemu_isspace(*pch))
2923         pch++;
2924     *pval = expr_sum(mon);
2925     *pp = pch;
2926     return 0;
2927 }
2928
2929 static int get_double(Monitor *mon, double *pval, const char **pp)
2930 {
2931     const char *p = *pp;
2932     char *tailp;
2933     double d;
2934
2935     d = strtod(p, &tailp);
2936     if (tailp == p) {
2937         monitor_printf(mon, "Number expected\n");
2938         return -1;
2939     }
2940     if (d != d || d - d != 0) {
2941         /* NaN or infinity */
2942         monitor_printf(mon, "Bad number\n");
2943         return -1;
2944     }
2945     *pval = d;
2946     *pp = tailp;
2947     return 0;
2948 }
2949
2950 /*
2951  * Store the command-name in cmdname, and return a pointer to
2952  * the remaining of the command string.
2953  */
2954 static const char *get_command_name(const char *cmdline,
2955                                     char *cmdname, size_t nlen)
2956 {
2957     size_t len;
2958     const char *p, *pstart;
2959
2960     p = cmdline;
2961     while (qemu_isspace(*p))
2962         p++;
2963     if (*p == '\0')
2964         return NULL;
2965     pstart = p;
2966     while (*p != '\0' && *p != '/' && !qemu_isspace(*p))
2967         p++;
2968     len = p - pstart;
2969     if (len > nlen - 1)
2970         len = nlen - 1;
2971     memcpy(cmdname, pstart, len);
2972     cmdname[len] = '\0';
2973     return p;
2974 }
2975
2976 /**
2977  * Read key of 'type' into 'key' and return the current
2978  * 'type' pointer.
2979  */
2980 static char *key_get_info(const char *type, char **key)
2981 {
2982     size_t len;
2983     char *p, *str;
2984
2985     if (*type == ',')
2986         type++;
2987
2988     p = strchr(type, ':');
2989     if (!p) {
2990         *key = NULL;
2991         return NULL;
2992     }
2993     len = p - type;
2994
2995     str = g_malloc(len + 1);
2996     memcpy(str, type, len);
2997     str[len] = '\0';
2998
2999     *key = str;
3000     return ++p;
3001 }
3002
3003 static int default_fmt_format = 'x';
3004 static int default_fmt_size = 4;
3005
3006 static int is_valid_option(const char *c, const char *typestr)
3007 {
3008     char option[3];
3009   
3010     option[0] = '-';
3011     option[1] = *c;
3012     option[2] = '\0';
3013   
3014     typestr = strstr(typestr, option);
3015     return (typestr != NULL);
3016 }
3017
3018 static const mon_cmd_t *search_dispatch_table(const mon_cmd_t *disp_table,
3019                                               const char *cmdname)
3020 {
3021     const mon_cmd_t *cmd;
3022
3023     for (cmd = disp_table; cmd->name != NULL; cmd++) {
3024         if (compare_cmd(cmdname, cmd->name)) {
3025             return cmd;
3026         }
3027     }
3028
3029     return NULL;
3030 }
3031
3032 /*
3033  * Parse command name from @cmdp according to command table @table.
3034  * If blank, return NULL.
3035  * Else, if no valid command can be found, report to @mon, and return
3036  * NULL.
3037  * Else, change @cmdp to point right behind the name, and return its
3038  * command table entry.
3039  * Do not assume the return value points into @table!  It doesn't when
3040  * the command is found in a sub-command table.
3041  */
3042 static const mon_cmd_t *monitor_parse_command(Monitor *mon,
3043                                               const char *cmdp_start,
3044                                               const char **cmdp,
3045                                               mon_cmd_t *table)
3046 {
3047     const char *p;
3048     const mon_cmd_t *cmd;
3049     char cmdname[256];
3050
3051     /* extract the command name */
3052     p = get_command_name(*cmdp, cmdname, sizeof(cmdname));
3053     if (!p)
3054         return NULL;
3055
3056     cmd = search_dispatch_table(table, cmdname);
3057     if (!cmd) {
3058         monitor_printf(mon, "unknown command: '%.*s'\n",
3059                        (int)(p - cmdp_start), cmdp_start);
3060         return NULL;
3061     }
3062     if (runstate_check(RUN_STATE_PRECONFIG) && !cmd_can_preconfig(cmd)) {
3063         monitor_printf(mon, "Command '%.*s' not available with -preconfig "
3064                             "until after exit_preconfig.\n",
3065                        (int)(p - cmdp_start), cmdp_start);
3066         return NULL;
3067     }
3068
3069     /* filter out following useless space */
3070     while (qemu_isspace(*p)) {
3071         p++;
3072     }
3073
3074     *cmdp = p;
3075     /* search sub command */
3076     if (cmd->sub_table != NULL && *p != '\0') {
3077         return monitor_parse_command(mon, cmdp_start, cmdp, cmd->sub_table);
3078     }
3079
3080     return cmd;
3081 }
3082
3083 /*
3084  * Parse arguments for @cmd.
3085  * If it can't be parsed, report to @mon, and return NULL.
3086  * Else, insert command arguments into a QDict, and return it.
3087  * Note: On success, caller has to free the QDict structure.
3088  */
3089
3090 static QDict *monitor_parse_arguments(Monitor *mon,
3091                                       const char **endp,
3092                                       const mon_cmd_t *cmd)
3093 {
3094     const char *typestr;
3095     char *key;
3096     int c;
3097     const char *p = *endp;
3098     char buf[1024];
3099     QDict *qdict = qdict_new();
3100
3101     /* parse the parameters */
3102     typestr = cmd->args_type;
3103     for(;;) {
3104         typestr = key_get_info(typestr, &key);
3105         if (!typestr)
3106             break;
3107         c = *typestr;
3108         typestr++;
3109         switch(c) {
3110         case 'F':
3111         case 'B':
3112         case 's':
3113             {
3114                 int ret;
3115
3116                 while (qemu_isspace(*p))
3117                     p++;
3118                 if (*typestr == '?') {
3119                     typestr++;
3120                     if (*p == '\0') {
3121                         /* no optional string: NULL argument */
3122                         break;
3123                     }
3124                 }
3125                 ret = get_str(buf, sizeof(buf), &p);
3126                 if (ret < 0) {
3127                     switch(c) {
3128                     case 'F':
3129                         monitor_printf(mon, "%s: filename expected\n",
3130                                        cmd->name);
3131                         break;
3132                     case 'B':
3133                         monitor_printf(mon, "%s: block device name expected\n",
3134                                        cmd->name);
3135                         break;
3136                     default:
3137                         monitor_printf(mon, "%s: string expected\n", cmd->name);
3138                         break;
3139                     }
3140                     goto fail;
3141                 }
3142                 qdict_put_str(qdict, key, buf);
3143             }
3144             break;
3145         case 'O':
3146             {
3147                 QemuOptsList *opts_list;
3148                 QemuOpts *opts;
3149
3150                 opts_list = qemu_find_opts(key);
3151                 if (!opts_list || opts_list->desc->name) {
3152                     goto bad_type;
3153                 }
3154                 while (qemu_isspace(*p)) {
3155                     p++;
3156                 }
3157                 if (!*p)
3158                     break;
3159                 if (get_str(buf, sizeof(buf), &p) < 0) {
3160                     goto fail;
3161                 }
3162                 opts = qemu_opts_parse_noisily(opts_list, buf, true);
3163                 if (!opts) {
3164                     goto fail;
3165                 }
3166                 qemu_opts_to_qdict(opts, qdict);
3167                 qemu_opts_del(opts);
3168             }
3169             break;
3170         case '/':
3171             {
3172                 int count, format, size;
3173
3174                 while (qemu_isspace(*p))
3175                     p++;
3176                 if (*p == '/') {
3177                     /* format found */
3178                     p++;
3179                     count = 1;
3180                     if (qemu_isdigit(*p)) {
3181                         count = 0;
3182                         while (qemu_isdigit(*p)) {
3183                             count = count * 10 + (*p - '0');
3184                             p++;
3185                         }
3186                     }
3187                     size = -1;
3188                     format = -1;
3189                     for(;;) {
3190                         switch(*p) {
3191                         case 'o':
3192                         case 'd':
3193                         case 'u':
3194                         case 'x':
3195                         case 'i':
3196                         case 'c':
3197                             format = *p++;
3198                             break;
3199                         case 'b':
3200                             size = 1;
3201                             p++;
3202                             break;
3203                         case 'h':
3204                             size = 2;
3205                             p++;
3206                             break;
3207                         case 'w':
3208                             size = 4;
3209                             p++;
3210                             break;
3211                         case 'g':
3212                         case 'L':
3213                             size = 8;
3214                             p++;
3215                             break;
3216                         default:
3217                             goto next;
3218                         }
3219                     }
3220                 next:
3221                     if (*p != '\0' && !qemu_isspace(*p)) {
3222                         monitor_printf(mon, "invalid char in format: '%c'\n",
3223                                        *p);
3224                         goto fail;
3225                     }
3226                     if (format < 0)
3227                         format = default_fmt_format;
3228                     if (format != 'i') {
3229                         /* for 'i', not specifying a size gives -1 as size */
3230                         if (size < 0)
3231                             size = default_fmt_size;
3232                         default_fmt_size = size;
3233                     }
3234                     default_fmt_format = format;
3235                 } else {
3236                     count = 1;
3237                     format = default_fmt_format;
3238                     if (format != 'i') {
3239                         size = default_fmt_size;
3240                     } else {
3241                         size = -1;
3242                     }
3243                 }
3244                 qdict_put_int(qdict, "count", count);
3245                 qdict_put_int(qdict, "format", format);
3246                 qdict_put_int(qdict, "size", size);
3247             }
3248             break;
3249         case 'i':
3250         case 'l':
3251         case 'M':
3252             {
3253                 int64_t val;
3254
3255                 while (qemu_isspace(*p))
3256                     p++;
3257                 if (*typestr == '?' || *typestr == '.') {
3258                     if (*typestr == '?') {
3259                         if (*p == '\0') {
3260                             typestr++;
3261                             break;
3262                         }
3263                     } else {
3264                         if (*p == '.') {
3265                             p++;
3266                             while (qemu_isspace(*p))
3267                                 p++;
3268                         } else {
3269                             typestr++;
3270                             break;
3271                         }
3272                     }
3273                     typestr++;
3274                 }
3275                 if (get_expr(mon, &val, &p))
3276                     goto fail;
3277                 /* Check if 'i' is greater than 32-bit */
3278                 if ((c == 'i') && ((val >> 32) & 0xffffffff)) {
3279                     monitor_printf(mon, "\'%s\' has failed: ", cmd->name);
3280                     monitor_printf(mon, "integer is for 32-bit values\n");
3281                     goto fail;
3282                 } else if (c == 'M') {
3283                     if (val < 0) {
3284                         monitor_printf(mon, "enter a positive value\n");
3285                         goto fail;
3286                     }
3287                     val *= MiB;
3288                 }
3289                 qdict_put_int(qdict, key, val);
3290             }
3291             break;
3292         case 'o':
3293             {
3294                 int ret;
3295                 uint64_t val;
3296                 const char *end;
3297
3298                 while (qemu_isspace(*p)) {
3299                     p++;
3300                 }
3301                 if (*typestr == '?') {
3302                     typestr++;
3303                     if (*p == '\0') {
3304                         break;
3305                     }
3306                 }
3307                 ret = qemu_strtosz_MiB(p, &end, &val);
3308                 if (ret < 0 || val > INT64_MAX) {
3309                     monitor_printf(mon, "invalid size\n");
3310                     goto fail;
3311                 }
3312                 qdict_put_int(qdict, key, val);
3313                 p = end;
3314             }
3315             break;
3316         case 'T':
3317             {
3318                 double val;
3319
3320                 while (qemu_isspace(*p))
3321                     p++;
3322                 if (*typestr == '?') {
3323                     typestr++;
3324                     if (*p == '\0') {
3325                         break;
3326                     }
3327                 }
3328                 if (get_double(mon, &val, &p) < 0) {
3329                     goto fail;
3330                 }
3331                 if (p[0] && p[1] == 's') {
3332                     switch (*p) {
3333                     case 'm':
3334                         val /= 1e3; p += 2; break;
3335                     case 'u':
3336                         val /= 1e6; p += 2; break;
3337                     case 'n':
3338                         val /= 1e9; p += 2; break;
3339                     }
3340                 }
3341                 if (*p && !qemu_isspace(*p)) {
3342                     monitor_printf(mon, "Unknown unit suffix\n");
3343                     goto fail;
3344                 }
3345                 qdict_put(qdict, key, qnum_from_double(val));
3346             }
3347             break;
3348         case 'b':
3349             {
3350                 const char *beg;
3351                 bool val;
3352
3353                 while (qemu_isspace(*p)) {
3354                     p++;
3355                 }
3356                 beg = p;
3357                 while (qemu_isgraph(*p)) {
3358                     p++;
3359                 }
3360                 if (p - beg == 2 && !memcmp(beg, "on", p - beg)) {
3361                     val = true;
3362                 } else if (p - beg == 3 && !memcmp(beg, "off", p - beg)) {
3363                     val = false;
3364                 } else {
3365                     monitor_printf(mon, "Expected 'on' or 'off'\n");
3366                     goto fail;
3367                 }
3368                 qdict_put_bool(qdict, key, val);
3369             }
3370             break;
3371         case '-':
3372             {
3373                 const char *tmp = p;
3374                 int skip_key = 0;
3375                 /* option */
3376
3377                 c = *typestr++;
3378                 if (c == '\0')
3379                     goto bad_type;
3380                 while (qemu_isspace(*p))
3381                     p++;
3382                 if (*p == '-') {
3383                     p++;
3384                     if(c != *p) {
3385                         if(!is_valid_option(p, typestr)) {
3386                   
3387                             monitor_printf(mon, "%s: unsupported option -%c\n",
3388                                            cmd->name, *p);
3389                             goto fail;
3390                         } else {
3391                             skip_key = 1;
3392                         }
3393                     }
3394                     if(skip_key) {
3395                         p = tmp;
3396                     } else {
3397                         /* has option */
3398                         p++;
3399                         qdict_put_bool(qdict, key, true);
3400                     }
3401                 }
3402             }
3403             break;
3404         case 'S':
3405             {
3406                 /* package all remaining string */
3407                 int len;
3408
3409                 while (qemu_isspace(*p)) {
3410                     p++;
3411                 }
3412                 if (*typestr == '?') {
3413                     typestr++;
3414                     if (*p == '\0') {
3415                         /* no remaining string: NULL argument */
3416                         break;
3417                     }
3418                 }
3419                 len = strlen(p);
3420                 if (len <= 0) {
3421                     monitor_printf(mon, "%s: string expected\n",
3422                                    cmd->name);
3423                     goto fail;
3424                 }
3425                 qdict_put_str(qdict, key, p);
3426                 p += len;
3427             }
3428             break;
3429         default:
3430         bad_type:
3431             monitor_printf(mon, "%s: unknown type '%c'\n", cmd->name, c);
3432             goto fail;
3433         }
3434         g_free(key);
3435         key = NULL;
3436     }
3437     /* check that all arguments were parsed */
3438     while (qemu_isspace(*p))
3439         p++;
3440     if (*p != '\0') {
3441         monitor_printf(mon, "%s: extraneous characters at the end of line\n",
3442                        cmd->name);
3443         goto fail;
3444     }
3445
3446     return qdict;
3447
3448 fail:
3449     qobject_unref(qdict);
3450     g_free(key);
3451     return NULL;
3452 }
3453
3454 static void handle_hmp_command(Monitor *mon, const char *cmdline)
3455 {
3456     QDict *qdict;
3457     const mon_cmd_t *cmd;
3458     const char *cmd_start = cmdline;
3459
3460     trace_handle_hmp_command(mon, cmdline);
3461
3462     cmd = monitor_parse_command(mon, cmdline, &cmdline, mon->cmd_table);
3463     if (!cmd) {
3464         return;
3465     }
3466
3467     qdict = monitor_parse_arguments(mon, &cmdline, cmd);
3468     if (!qdict) {
3469         while (cmdline > cmd_start && qemu_isspace(cmdline[-1])) {
3470             cmdline--;
3471         }
3472         monitor_printf(mon, "Try \"help %.*s\" for more information\n",
3473                        (int)(cmdline - cmd_start), cmd_start);
3474         return;
3475     }
3476
3477     cmd->cmd(mon, qdict);
3478     qobject_unref(qdict);
3479 }
3480
3481 static void cmd_completion(Monitor *mon, const char *name, const char *list)
3482 {
3483     const char *p, *pstart;
3484     char cmd[128];
3485     int len;
3486
3487     p = list;
3488     for(;;) {
3489         pstart = p;
3490         p = qemu_strchrnul(p, '|');
3491         len = p - pstart;
3492         if (len > sizeof(cmd) - 2)
3493             len = sizeof(cmd) - 2;
3494         memcpy(cmd, pstart, len);
3495         cmd[len] = '\0';
3496         if (name[0] == '\0' || !strncmp(name, cmd, strlen(name))) {
3497             readline_add_completion(mon->rs, cmd);
3498         }
3499         if (*p == '\0')
3500             break;
3501         p++;
3502     }
3503 }
3504
3505 static void file_completion(Monitor *mon, const char *input)
3506 {
3507     DIR *ffs;
3508     struct dirent *d;
3509     char path[1024];
3510     char file[1024], file_prefix[1024];
3511     int input_path_len;
3512     const char *p;
3513
3514     p = strrchr(input, '/');
3515     if (!p) {
3516         input_path_len = 0;
3517         pstrcpy(file_prefix, sizeof(file_prefix), input);
3518         pstrcpy(path, sizeof(path), ".");
3519     } else {
3520         input_path_len = p - input + 1;
3521         memcpy(path, input, input_path_len);
3522         if (input_path_len > sizeof(path) - 1)
3523             input_path_len = sizeof(path) - 1;
3524         path[input_path_len] = '\0';
3525         pstrcpy(file_prefix, sizeof(file_prefix), p + 1);
3526     }
3527
3528     ffs = opendir(path);
3529     if (!ffs)
3530         return;
3531     for(;;) {
3532         struct stat sb;
3533         d = readdir(ffs);
3534         if (!d)
3535             break;
3536
3537         if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) {
3538             continue;
3539         }
3540
3541         if (strstart(d->d_name, file_prefix, NULL)) {
3542             memcpy(file, input, input_path_len);
3543             if (input_path_len < sizeof(file))
3544                 pstrcpy(file + input_path_len, sizeof(file) - input_path_len,
3545                         d->d_name);
3546             /* stat the file to find out if it's a directory.
3547              * In that case add a slash to speed up typing long paths
3548              */
3549             if (stat(file, &sb) == 0 && S_ISDIR(sb.st_mode)) {
3550                 pstrcat(file, sizeof(file), "/");
3551             }
3552             readline_add_completion(mon->rs, file);
3553         }
3554     }
3555     closedir(ffs);
3556 }
3557
3558 static const char *next_arg_type(const char *typestr)
3559 {
3560     const char *p = strchr(typestr, ':');
3561     return (p != NULL ? ++p : typestr);
3562 }
3563
3564 static void add_completion_option(ReadLineState *rs, const char *str,
3565                                   const char *option)
3566 {
3567     if (!str || !option) {
3568         return;
3569     }
3570     if (!strncmp(option, str, strlen(str))) {
3571         readline_add_completion(rs, option);
3572     }
3573 }
3574
3575 void chardev_add_completion(ReadLineState *rs, int nb_args, const char *str)
3576 {
3577     size_t len;
3578     ChardevBackendInfoList *list, *start;
3579
3580     if (nb_args != 2) {
3581         return;
3582     }
3583     len = strlen(str);
3584     readline_set_completion_index(rs, len);
3585
3586     start = list = qmp_query_chardev_backends(NULL);
3587     while (list) {
3588         const char *chr_name = list->value->name;
3589
3590         if (!strncmp(chr_name, str, len)) {
3591             readline_add_completion(rs, chr_name);
3592         }
3593         list = list->next;
3594     }
3595     qapi_free_ChardevBackendInfoList(start);
3596 }
3597
3598 void netdev_add_completion(ReadLineState *rs, int nb_args, const char *str)
3599 {
3600     size_t len;
3601     int i;
3602
3603     if (nb_args != 2) {
3604         return;
3605     }
3606     len = strlen(str);
3607     readline_set_completion_index(rs, len);
3608     for (i = 0; i < NET_CLIENT_DRIVER__MAX; i++) {
3609         add_completion_option(rs, str, NetClientDriver_str(i));
3610     }
3611 }
3612
3613 void device_add_completion(ReadLineState *rs, int nb_args, const char *str)
3614 {
3615     GSList *list, *elt;
3616     size_t len;
3617
3618     if (nb_args != 2) {
3619         return;
3620     }
3621
3622     len = strlen(str);
3623     readline_set_completion_index(rs, len);
3624     list = elt = object_class_get_list(TYPE_DEVICE, false);
3625     while (elt) {
3626         const char *name;
3627         DeviceClass *dc = OBJECT_CLASS_CHECK(DeviceClass, elt->data,
3628                                              TYPE_DEVICE);
3629         name = object_class_get_name(OBJECT_CLASS(dc));
3630
3631         if (dc->user_creatable
3632             && !strncmp(name, str, len)) {
3633             readline_add_completion(rs, name);
3634         }
3635         elt = elt->next;
3636     }
3637     g_slist_free(list);
3638 }
3639
3640 void object_add_completion(ReadLineState *rs, int nb_args, const char *str)
3641 {
3642     GSList *list, *elt;
3643     size_t len;
3644
3645     if (nb_args != 2) {
3646         return;
3647     }
3648
3649     len = strlen(str);
3650     readline_set_completion_index(rs, len);
3651     list = elt = object_class_get_list(TYPE_USER_CREATABLE, false);
3652     while (elt) {
3653         const char *name;
3654
3655         name = object_class_get_name(OBJECT_CLASS(elt->data));
3656         if (!strncmp(name, str, len) && strcmp(name, TYPE_USER_CREATABLE)) {
3657             readline_add_completion(rs, name);
3658         }
3659         elt = elt->next;
3660     }
3661     g_slist_free(list);
3662 }
3663
3664 static void peripheral_device_del_completion(ReadLineState *rs,
3665                                              const char *str, size_t len)
3666 {
3667     Object *peripheral = container_get(qdev_get_machine(), "/peripheral");
3668     GSList *list, *item;
3669
3670     list = qdev_build_hotpluggable_device_list(peripheral);
3671     if (!list) {
3672         return;
3673     }
3674
3675     for (item = list; item; item = g_slist_next(item)) {
3676         DeviceState *dev = item->data;
3677
3678         if (dev->id && !strncmp(str, dev->id, len)) {
3679             readline_add_completion(rs, dev->id);
3680         }
3681     }
3682
3683     g_slist_free(list);
3684 }
3685
3686 void chardev_remove_completion(ReadLineState *rs, int nb_args, const char *str)
3687 {
3688     size_t len;
3689     ChardevInfoList *list, *start;
3690
3691     if (nb_args != 2) {
3692         return;
3693     }
3694     len = strlen(str);
3695     readline_set_completion_index(rs, len);
3696
3697     start = list = qmp_query_chardev(NULL);
3698     while (list) {
3699         ChardevInfo *chr = list->value;
3700
3701         if (!strncmp(chr->label, str, len)) {
3702             readline_add_completion(rs, chr->label);
3703         }
3704         list = list->next;
3705     }
3706     qapi_free_ChardevInfoList(start);
3707 }
3708
3709 static void ringbuf_completion(ReadLineState *rs, const char *str)
3710 {
3711     size_t len;
3712     ChardevInfoList *list, *start;
3713
3714     len = strlen(str);
3715     readline_set_completion_index(rs, len);
3716
3717     start = list = qmp_query_chardev(NULL);
3718     while (list) {
3719         ChardevInfo *chr_info = list->value;
3720
3721         if (!strncmp(chr_info->label, str, len)) {
3722             Chardev *chr = qemu_chr_find(chr_info->label);
3723             if (chr && CHARDEV_IS_RINGBUF(chr)) {
3724                 readline_add_completion(rs, chr_info->label);
3725             }
3726         }
3727         list = list->next;
3728     }
3729     qapi_free_ChardevInfoList(start);
3730 }
3731
3732 void ringbuf_write_completion(ReadLineState *rs, int nb_args, const char *str)
3733 {
3734     if (nb_args != 2) {
3735         return;
3736     }
3737     ringbuf_completion(rs, str);
3738 }
3739
3740 void device_del_completion(ReadLineState *rs, int nb_args, const char *str)
3741 {
3742     size_t len;
3743
3744     if (nb_args != 2) {
3745         return;
3746     }
3747
3748     len = strlen(str);
3749     readline_set_completion_index(rs, len);
3750     peripheral_device_del_completion(rs, str, len);
3751 }
3752
3753 void object_del_completion(ReadLineState *rs, int nb_args, const char *str)
3754 {
3755     ObjectPropertyInfoList *list, *start;
3756     size_t len;
3757
3758     if (nb_args != 2) {
3759         return;
3760     }
3761     len = strlen(str);
3762     readline_set_completion_index(rs, len);
3763
3764     start = list = qmp_qom_list("/objects", NULL);
3765     while (list) {
3766         ObjectPropertyInfo *info = list->value;
3767
3768         if (!strncmp(info->type, "child<", 5)
3769             && !strncmp(info->name, str, len)) {
3770             readline_add_completion(rs, info->name);
3771         }
3772         list = list->next;
3773     }
3774     qapi_free_ObjectPropertyInfoList(start);
3775 }
3776
3777 void sendkey_completion(ReadLineState *rs, int nb_args, const char *str)
3778 {
3779     int i;
3780     char *sep;
3781     size_t len;
3782
3783     if (nb_args != 2) {
3784         return;
3785     }
3786     sep = strrchr(str, '-');
3787     if (sep) {
3788         str = sep + 1;
3789     }
3790     len = strlen(str);
3791     readline_set_completion_index(rs, len);
3792     for (i = 0; i < Q_KEY_CODE__MAX; i++) {
3793         if (!strncmp(str, QKeyCode_str(i), len)) {
3794             readline_add_completion(rs, QKeyCode_str(i));
3795         }
3796     }
3797 }
3798
3799 void set_link_completion(ReadLineState *rs, int nb_args, const char *str)
3800 {
3801     size_t len;
3802
3803     len = strlen(str);
3804     readline_set_completion_index(rs, len);
3805     if (nb_args == 2) {
3806         NetClientState *ncs[MAX_QUEUE_NUM];
3807         int count, i;
3808         count = qemu_find_net_clients_except(NULL, ncs,
3809                                              NET_CLIENT_DRIVER_NONE,
3810                                              MAX_QUEUE_NUM);
3811         for (i = 0; i < MIN(count, MAX_QUEUE_NUM); i++) {
3812             const char *name = ncs[i]->name;
3813             if (!strncmp(str, name, len)) {
3814                 readline_add_completion(rs, name);
3815             }
3816         }
3817     } else if (nb_args == 3) {
3818         add_completion_option(rs, str, "on");
3819         add_completion_option(rs, str, "off");
3820     }
3821 }
3822
3823 void netdev_del_completion(ReadLineState *rs, int nb_args, const char *str)
3824 {
3825     int len, count, i;
3826     NetClientState *ncs[MAX_QUEUE_NUM];
3827
3828     if (nb_args != 2) {
3829         return;
3830     }
3831
3832     len = strlen(str);
3833     readline_set_completion_index(rs, len);
3834     count = qemu_find_net_clients_except(NULL, ncs, NET_CLIENT_DRIVER_NIC,
3835                                          MAX_QUEUE_NUM);
3836     for (i = 0; i < MIN(count, MAX_QUEUE_NUM); i++) {
3837         QemuOpts *opts;
3838         const char *name = ncs[i]->name;
3839         if (strncmp(str, name, len)) {
3840             continue;
3841         }
3842         opts = qemu_opts_find(qemu_find_opts_err("netdev", NULL), name);
3843         if (opts) {
3844             readline_add_completion(rs, name);
3845         }
3846     }
3847 }
3848
3849 void info_trace_events_completion(ReadLineState *rs, int nb_args, const char *str)
3850 {
3851     size_t len;
3852
3853     len = strlen(str);
3854     readline_set_completion_index(rs, len);
3855     if (nb_args == 2) {
3856         TraceEventIter iter;
3857         TraceEvent *ev;
3858         char *pattern = g_strdup_printf("%s*", str);
3859         trace_event_iter_init(&iter, pattern);
3860         while ((ev = trace_event_iter_next(&iter)) != NULL) {
3861             readline_add_completion(rs, trace_event_get_name(ev));
3862         }
3863         g_free(pattern);
3864     }
3865 }
3866
3867 void trace_event_completion(ReadLineState *rs, int nb_args, const char *str)
3868 {
3869     size_t len;
3870
3871     len = strlen(str);
3872     readline_set_completion_index(rs, len);
3873     if (nb_args == 2) {
3874         TraceEventIter iter;
3875         TraceEvent *ev;
3876         char *pattern = g_strdup_printf("%s*", str);
3877         trace_event_iter_init(&iter, pattern);
3878         while ((ev = trace_event_iter_next(&iter)) != NULL) {
3879             readline_add_completion(rs, trace_event_get_name(ev));
3880         }
3881         g_free(pattern);
3882     } else if (nb_args == 3) {
3883         add_completion_option(rs, str, "on");
3884         add_completion_option(rs, str, "off");
3885     }
3886 }
3887
3888 void watchdog_action_completion(ReadLineState *rs, int nb_args, const char *str)
3889 {
3890     int i;
3891
3892     if (nb_args != 2) {
3893         return;
3894     }
3895     readline_set_completion_index(rs, strlen(str));
3896     for (i = 0; i < WATCHDOG_ACTION__MAX; i++) {
3897         add_completion_option(rs, str, WatchdogAction_str(i));
3898     }
3899 }
3900
3901 void migrate_set_capability_completion(ReadLineState *rs, int nb_args,
3902                                        const char *str)
3903 {
3904     size_t len;
3905
3906     len = strlen(str);
3907     readline_set_completion_index(rs, len);
3908     if (nb_args == 2) {
3909         int i;
3910         for (i = 0; i < MIGRATION_CAPABILITY__MAX; i++) {
3911             const char *name = MigrationCapability_str(i);
3912             if (!strncmp(str, name, len)) {
3913                 readline_add_completion(rs, name);
3914             }
3915         }
3916     } else if (nb_args == 3) {
3917         add_completion_option(rs, str, "on");
3918         add_completion_option(rs, str, "off");
3919     }
3920 }
3921
3922 void migrate_set_parameter_completion(ReadLineState *rs, int nb_args,
3923                                       const char *str)
3924 {
3925     size_t len;
3926
3927     len = strlen(str);
3928     readline_set_completion_index(rs, len);
3929     if (nb_args == 2) {
3930         int i;
3931         for (i = 0; i < MIGRATION_PARAMETER__MAX; i++) {
3932             const char *name = MigrationParameter_str(i);
3933             if (!strncmp(str, name, len)) {
3934                 readline_add_completion(rs, name);
3935             }
3936         }
3937     }
3938 }
3939
3940 static void vm_completion(ReadLineState *rs, const char *str)
3941 {
3942     size_t len;
3943     BlockDriverState *bs;
3944     BdrvNextIterator it;
3945
3946     len = strlen(str);
3947     readline_set_completion_index(rs, len);
3948
3949     for (bs = bdrv_first(&it); bs; bs = bdrv_next(&it)) {
3950         SnapshotInfoList *snapshots, *snapshot;
3951         AioContext *ctx = bdrv_get_aio_context(bs);
3952         bool ok = false;
3953
3954         aio_context_acquire(ctx);
3955         if (bdrv_can_snapshot(bs)) {
3956             ok = bdrv_query_snapshot_info_list(bs, &snapshots, NULL) == 0;
3957         }
3958         aio_context_release(ctx);
3959         if (!ok) {
3960             continue;
3961         }
3962
3963         snapshot = snapshots;
3964         while (snapshot) {
3965             char *completion = snapshot->value->name;
3966             if (!strncmp(str, completion, len)) {
3967                 readline_add_completion(rs, completion);
3968             }
3969             completion = snapshot->value->id;
3970             if (!strncmp(str, completion, len)) {
3971                 readline_add_completion(rs, completion);
3972             }
3973             snapshot = snapshot->next;
3974         }
3975         qapi_free_SnapshotInfoList(snapshots);
3976     }
3977
3978 }
3979
3980 void delvm_completion(ReadLineState *rs, int nb_args, const char *str)
3981 {
3982     if (nb_args == 2) {
3983         vm_completion(rs, str);
3984     }
3985 }
3986
3987 void loadvm_completion(ReadLineState *rs, int nb_args, const char *str)
3988 {
3989     if (nb_args == 2) {
3990         vm_completion(rs, str);
3991     }
3992 }
3993
3994 static void monitor_find_completion_by_table(Monitor *mon,
3995                                              const mon_cmd_t *cmd_table,
3996                                              char **args,
3997                                              int nb_args)
3998 {
3999     const char *cmdname;
4000     int i;
4001     const char *ptype, *old_ptype, *str, *name;
4002     const mon_cmd_t *cmd;
4003     BlockBackend *blk = NULL;
4004
4005     if (nb_args <= 1) {
4006         /* command completion */
4007         if (nb_args == 0)
4008             cmdname = "";
4009         else
4010             cmdname = args[0];
4011         readline_set_completion_index(mon->rs, strlen(cmdname));
4012         for (cmd = cmd_table; cmd->name != NULL; cmd++) {
4013             if (!runstate_check(RUN_STATE_PRECONFIG) ||
4014                  cmd_can_preconfig(cmd)) {
4015                 cmd_completion(mon, cmdname, cmd->name);
4016             }
4017         }
4018     } else {
4019         /* find the command */
4020         for (cmd = cmd_table; cmd->name != NULL; cmd++) {
4021             if (compare_cmd(args[0], cmd->name) &&
4022                 (!runstate_check(RUN_STATE_PRECONFIG) ||
4023                  cmd_can_preconfig(cmd))) {
4024                 break;
4025             }
4026         }
4027         if (!cmd->name) {
4028             return;
4029         }
4030
4031         if (cmd->sub_table) {
4032             /* do the job again */
4033             monitor_find_completion_by_table(mon, cmd->sub_table,
4034                                              &args[1], nb_args - 1);
4035             return;
4036         }
4037         if (cmd->command_completion) {
4038             cmd->command_completion(mon->rs, nb_args, args[nb_args - 1]);
4039             return;
4040         }
4041
4042         ptype = next_arg_type(cmd->args_type);
4043         for(i = 0; i < nb_args - 2; i++) {
4044             if (*ptype != '\0') {
4045                 ptype = next_arg_type(ptype);
4046                 while (*ptype == '?')
4047                     ptype = next_arg_type(ptype);
4048             }
4049         }
4050         str = args[nb_args - 1];
4051         old_ptype = NULL;
4052         while (*ptype == '-' && old_ptype != ptype) {
4053             old_ptype = ptype;
4054             ptype = next_arg_type(ptype);
4055         }
4056         switch(*ptype) {
4057         case 'F':
4058             /* file completion */
4059             readline_set_completion_index(mon->rs, strlen(str));
4060             file_completion(mon, str);
4061             break;
4062         case 'B':
4063             /* block device name completion */
4064             readline_set_completion_index(mon->rs, strlen(str));
4065             while ((blk = blk_next(blk)) != NULL) {
4066                 name = blk_name(blk);
4067                 if (str[0] == '\0' ||
4068                     !strncmp(name, str, strlen(str))) {
4069                     readline_add_completion(mon->rs, name);
4070                 }
4071             }
4072             break;
4073         case 's':
4074         case 'S':
4075             if (!strcmp(cmd->name, "help|?")) {
4076                 monitor_find_completion_by_table(mon, cmd_table,
4077                                                  &args[1], nb_args - 1);
4078             }
4079             break;
4080         default:
4081             break;
4082         }
4083     }
4084 }
4085
4086 static void monitor_find_completion(void *opaque,
4087                                     const char *cmdline)
4088 {
4089     Monitor *mon = opaque;
4090     char *args[MAX_ARGS];
4091     int nb_args, len;
4092
4093     /* 1. parse the cmdline */
4094     if (parse_cmdline(cmdline, &nb_args, args) < 0) {
4095         return;
4096     }
4097
4098     /* if the line ends with a space, it means we want to complete the
4099        next arg */
4100     len = strlen(cmdline);
4101     if (len > 0 && qemu_isspace(cmdline[len - 1])) {
4102         if (nb_args >= MAX_ARGS) {
4103             goto cleanup;
4104         }
4105         args[nb_args++] = g_strdup("");
4106     }
4107
4108     /* 2. auto complete according to args */
4109     monitor_find_completion_by_table(mon, mon->cmd_table, args, nb_args);
4110
4111 cleanup:
4112     free_cmdline_args(args, nb_args);
4113 }
4114
4115 static int monitor_can_read(void *opaque)
4116 {
4117     Monitor *mon = opaque;
4118
4119     return !atomic_mb_read(&mon->suspend_cnt);
4120 }
4121
4122 /*
4123  * Emit QMP response @rsp with ID @id to @mon.
4124  * Null @rsp can only happen for commands with QCO_NO_SUCCESS_RESP.
4125  * Nothing is emitted then.
4126  */
4127 static void monitor_qmp_respond(Monitor *mon, QDict *rsp)
4128 {
4129     if (rsp) {
4130         qmp_send_response(mon, rsp);
4131     }
4132 }
4133
4134 static void monitor_qmp_dispatch(Monitor *mon, QObject *req)
4135 {
4136     Monitor *old_mon;
4137     QDict *rsp;
4138     QDict *error;
4139
4140     old_mon = cur_mon;
4141     cur_mon = mon;
4142
4143     rsp = qmp_dispatch(mon->qmp.commands, req, qmp_oob_enabled(mon));
4144
4145     cur_mon = old_mon;
4146
4147     if (mon->qmp.commands == &qmp_cap_negotiation_commands) {
4148         error = qdict_get_qdict(rsp, "error");
4149         if (error
4150             && !g_strcmp0(qdict_get_try_str(error, "class"),
4151                     QapiErrorClass_str(ERROR_CLASS_COMMAND_NOT_FOUND))) {
4152             /* Provide a more useful error message */
4153             qdict_del(error, "desc");
4154             qdict_put_str(error, "desc", "Expecting capabilities negotiation"
4155                           " with 'qmp_capabilities'");
4156         }
4157     }
4158
4159     monitor_qmp_respond(mon, rsp);
4160     qobject_unref(rsp);
4161 }
4162
4163 /*
4164  * Pop a QMP request from a monitor request queue.
4165  * Return the request, or NULL all request queues are empty.
4166  * We are using round-robin fashion to pop the request, to avoid
4167  * processing commands only on a very busy monitor.  To achieve that,
4168  * when we process one request on a specific monitor, we put that
4169  * monitor to the end of mon_list queue.
4170  *
4171  * Note: if the function returned with non-NULL, then the caller will
4172  * be with mon->qmp.qmp_queue_lock held, and the caller is responsible
4173  * to release it.
4174  */
4175 static QMPRequest *monitor_qmp_requests_pop_any_with_lock(void)
4176 {
4177     QMPRequest *req_obj = NULL;
4178     Monitor *mon;
4179
4180     qemu_mutex_lock(&monitor_lock);
4181
4182     QTAILQ_FOREACH(mon, &mon_list, entry) {
4183         qemu_mutex_lock(&mon->qmp.qmp_queue_lock);
4184         req_obj = g_queue_pop_head(mon->qmp.qmp_requests);
4185         if (req_obj) {
4186             /* With the lock of corresponding queue held */
4187             break;
4188         }
4189         qemu_mutex_unlock(&mon->qmp.qmp_queue_lock);
4190     }
4191
4192     if (req_obj) {
4193         /*
4194          * We found one request on the monitor. Degrade this monitor's
4195          * priority to lowest by re-inserting it to end of queue.
4196          */
4197         QTAILQ_REMOVE(&mon_list, mon, entry);
4198         QTAILQ_INSERT_TAIL(&mon_list, mon, entry);
4199     }
4200
4201     qemu_mutex_unlock(&monitor_lock);
4202
4203     return req_obj;
4204 }
4205
4206 static void monitor_qmp_bh_dispatcher(void *data)
4207 {
4208     QMPRequest *req_obj = monitor_qmp_requests_pop_any_with_lock();
4209     QDict *rsp;
4210     bool need_resume;
4211     Monitor *mon;
4212
4213     if (!req_obj) {
4214         return;
4215     }
4216
4217     mon = req_obj->mon;
4218     /*  qmp_oob_enabled() might change after "qmp_capabilities" */
4219     need_resume = !qmp_oob_enabled(mon) ||
4220         mon->qmp.qmp_requests->length == QMP_REQ_QUEUE_LEN_MAX - 1;
4221     qemu_mutex_unlock(&mon->qmp.qmp_queue_lock);
4222     if (req_obj->req) {
4223         QDict *qdict = qobject_to(QDict, req_obj->req);
4224         QObject *id = qdict ? qdict_get(qdict, "id") : NULL;
4225         trace_monitor_qmp_cmd_in_band(qobject_get_try_str(id) ?: "");
4226         monitor_qmp_dispatch(mon, req_obj->req);
4227     } else {
4228         assert(req_obj->err);
4229         rsp = qmp_error_response(req_obj->err);
4230         req_obj->err = NULL;
4231         monitor_qmp_respond(mon, rsp);
4232         qobject_unref(rsp);
4233     }
4234
4235     if (need_resume) {
4236         /* Pairs with the monitor_suspend() in handle_qmp_command() */
4237         monitor_resume(mon);
4238     }
4239     qmp_request_free(req_obj);
4240
4241     /* Reschedule instead of looping so the main loop stays responsive */
4242     qemu_bh_schedule(qmp_dispatcher_bh);
4243 }
4244
4245 static void handle_qmp_command(void *opaque, QObject *req, Error *err)
4246 {
4247     Monitor *mon = opaque;
4248     QObject *id = NULL;
4249     QDict *qdict;
4250     QMPRequest *req_obj;
4251
4252     assert(!req != !err);
4253
4254     qdict = qobject_to(QDict, req);
4255     if (qdict) {
4256         id = qdict_get(qdict, "id");
4257     } /* else will fail qmp_dispatch() */
4258
4259     if (req && trace_event_get_state_backends(TRACE_HANDLE_QMP_COMMAND)) {
4260         QString *req_json = qobject_to_json(req);
4261         trace_handle_qmp_command(mon, qstring_get_str(req_json));
4262         qobject_unref(req_json);
4263     }
4264
4265     if (qdict && qmp_is_oob(qdict)) {
4266         /* OOB commands are executed immediately */
4267         trace_monitor_qmp_cmd_out_of_band(qobject_get_try_str(id) ?: "");
4268         monitor_qmp_dispatch(mon, req);
4269         qobject_unref(req);
4270         return;
4271     }
4272
4273     req_obj = g_new0(QMPRequest, 1);
4274     req_obj->mon = mon;
4275     req_obj->req = req;
4276     req_obj->err = err;
4277
4278     /* Protect qmp_requests and fetching its length. */
4279     qemu_mutex_lock(&mon->qmp.qmp_queue_lock);
4280
4281     /*
4282      * Suspend the monitor when we can't queue more requests after
4283      * this one.  Dequeuing in monitor_qmp_bh_dispatcher() will resume
4284      * it.  Note that when OOB is disabled, we queue at most one
4285      * command, for backward compatibility.
4286      */
4287     if (!qmp_oob_enabled(mon) ||
4288         mon->qmp.qmp_requests->length == QMP_REQ_QUEUE_LEN_MAX - 1) {
4289         monitor_suspend(mon);
4290     }
4291
4292     /*
4293      * Put the request to the end of queue so that requests will be
4294      * handled in time order.  Ownership for req_obj, req,
4295      * etc. will be delivered to the handler side.
4296      */
4297     assert(mon->qmp.qmp_requests->length < QMP_REQ_QUEUE_LEN_MAX);
4298     g_queue_push_tail(mon->qmp.qmp_requests, req_obj);
4299     qemu_mutex_unlock(&mon->qmp.qmp_queue_lock);
4300
4301     /* Kick the dispatcher routine */
4302     qemu_bh_schedule(qmp_dispatcher_bh);
4303 }
4304
4305 static void monitor_qmp_read(void *opaque, const uint8_t *buf, int size)
4306 {
4307     Monitor *mon = opaque;
4308
4309     json_message_parser_feed(&mon->qmp.parser, (const char *) buf, size);
4310 }
4311
4312 static void monitor_read(void *opaque, const uint8_t *buf, int size)
4313 {
4314     Monitor *old_mon = cur_mon;
4315     int i;
4316
4317     cur_mon = opaque;
4318
4319     if (cur_mon->rs) {
4320         for (i = 0; i < size; i++)
4321             readline_handle_byte(cur_mon->rs, buf[i]);
4322     } else {
4323         if (size == 0 || buf[size - 1] != 0)
4324             monitor_printf(cur_mon, "corrupted command\n");
4325         else
4326             handle_hmp_command(cur_mon, (char *)buf);
4327     }
4328
4329     cur_mon = old_mon;
4330 }
4331
4332 static void monitor_command_cb(void *opaque, const char *cmdline,
4333                                void *readline_opaque)
4334 {
4335     Monitor *mon = opaque;
4336
4337     monitor_suspend(mon);
4338     handle_hmp_command(mon, cmdline);
4339     monitor_resume(mon);
4340 }
4341
4342 int monitor_suspend(Monitor *mon)
4343 {
4344     if (monitor_is_hmp_non_interactive(mon)) {
4345         return -ENOTTY;
4346     }
4347
4348     atomic_inc(&mon->suspend_cnt);
4349
4350     if (mon->use_io_thread) {
4351         /*
4352          * Kick I/O thread to make sure this takes effect.  It'll be
4353          * evaluated again in prepare() of the watch object.
4354          */
4355         aio_notify(iothread_get_aio_context(mon_iothread));
4356     }
4357
4358     trace_monitor_suspend(mon, 1);
4359     return 0;
4360 }
4361
4362 static void monitor_accept_input(void *opaque)
4363 {
4364     Monitor *mon = opaque;
4365
4366     qemu_chr_fe_accept_input(&mon->chr);
4367 }
4368
4369 void monitor_resume(Monitor *mon)
4370 {
4371     if (monitor_is_hmp_non_interactive(mon)) {
4372         return;
4373     }
4374
4375     if (atomic_dec_fetch(&mon->suspend_cnt) == 0) {
4376         AioContext *ctx;
4377
4378         if (mon->use_io_thread) {
4379             ctx = iothread_get_aio_context(mon_iothread);
4380         } else {
4381             ctx = qemu_get_aio_context();
4382         }
4383
4384         if (!monitor_is_qmp(mon)) {
4385             assert(mon->rs);
4386             readline_show_prompt(mon->rs);
4387         }
4388
4389         aio_bh_schedule_oneshot(ctx, monitor_accept_input, mon);
4390     }
4391
4392     trace_monitor_suspend(mon, -1);
4393 }
4394
4395 static QDict *qmp_greeting(Monitor *mon)
4396 {
4397     QList *cap_list = qlist_new();
4398     QObject *ver = NULL;
4399     QMPCapability cap;
4400
4401     qmp_marshal_query_version(NULL, &ver, NULL);
4402
4403     for (cap = 0; cap < QMP_CAPABILITY__MAX; cap++) {
4404         if (mon->qmp.capab_offered[cap]) {
4405             qlist_append_str(cap_list, QMPCapability_str(cap));
4406         }
4407     }
4408
4409     return qdict_from_jsonf_nofail(
4410         "{'QMP': {'version': %p, 'capabilities': %p}}",
4411         ver, cap_list);
4412 }
4413
4414 static void monitor_qmp_event(void *opaque, int event)
4415 {
4416     QDict *data;
4417     Monitor *mon = opaque;
4418
4419     switch (event) {
4420     case CHR_EVENT_OPENED:
4421         mon->qmp.commands = &qmp_cap_negotiation_commands;
4422         monitor_qmp_caps_reset(mon);
4423         data = qmp_greeting(mon);
4424         qmp_send_response(mon, data);
4425         qobject_unref(data);
4426         mon_refcount++;
4427         break;
4428     case CHR_EVENT_CLOSED:
4429         /*
4430          * Note: this is only useful when the output of the chardev
4431          * backend is still open.  For example, when the backend is
4432          * stdio, it's possible that stdout is still open when stdin
4433          * is closed.
4434          */
4435         monitor_qmp_cleanup_queues(mon);
4436         json_message_parser_destroy(&mon->qmp.parser);
4437         json_message_parser_init(&mon->qmp.parser, handle_qmp_command,
4438                                  mon, NULL);
4439         mon_refcount--;
4440         monitor_fdsets_cleanup();
4441         break;
4442     }
4443 }
4444
4445 static void monitor_event(void *opaque, int event)
4446 {
4447     Monitor *mon = opaque;
4448
4449     switch (event) {
4450     case CHR_EVENT_MUX_IN:
4451         qemu_mutex_lock(&mon->mon_lock);
4452         mon->mux_out = 0;
4453         qemu_mutex_unlock(&mon->mon_lock);
4454         if (mon->reset_seen) {
4455             readline_restart(mon->rs);
4456             monitor_resume(mon);
4457             monitor_flush(mon);
4458         } else {
4459             atomic_mb_set(&mon->suspend_cnt, 0);
4460         }
4461         break;
4462
4463     case CHR_EVENT_MUX_OUT:
4464         if (mon->reset_seen) {
4465             if (atomic_mb_read(&mon->suspend_cnt) == 0) {
4466                 monitor_printf(mon, "\n");
4467             }
4468             monitor_flush(mon);
4469             monitor_suspend(mon);
4470         } else {
4471             atomic_inc(&mon->suspend_cnt);
4472         }
4473         qemu_mutex_lock(&mon->mon_lock);
4474         mon->mux_out = 1;
4475         qemu_mutex_unlock(&mon->mon_lock);
4476         break;
4477
4478     case CHR_EVENT_OPENED:
4479         monitor_printf(mon, "QEMU %s monitor - type 'help' for more "
4480                        "information\n", QEMU_VERSION);
4481         if (!mon->mux_out) {
4482             readline_restart(mon->rs);
4483             readline_show_prompt(mon->rs);
4484         }
4485         mon->reset_seen = 1;
4486         mon_refcount++;
4487         break;
4488
4489     case CHR_EVENT_CLOSED:
4490         mon_refcount--;
4491         monitor_fdsets_cleanup();
4492         break;
4493     }
4494 }
4495
4496 static int
4497 compare_mon_cmd(const void *a, const void *b)
4498 {
4499     return strcmp(((const mon_cmd_t *)a)->name,
4500             ((const mon_cmd_t *)b)->name);
4501 }
4502
4503 static void sortcmdlist(void)
4504 {
4505     int array_num;
4506     int elem_size = sizeof(mon_cmd_t);
4507
4508     array_num = sizeof(mon_cmds)/elem_size-1;
4509     qsort((void *)mon_cmds, array_num, elem_size, compare_mon_cmd);
4510
4511     array_num = sizeof(info_cmds)/elem_size-1;
4512     qsort((void *)info_cmds, array_num, elem_size, compare_mon_cmd);
4513 }
4514
4515 static void monitor_iothread_init(void)
4516 {
4517     mon_iothread = iothread_create("mon_iothread", &error_abort);
4518 }
4519
4520 void monitor_init_globals(void)
4521 {
4522     monitor_init_qmp_commands();
4523     monitor_qapi_event_init();
4524     sortcmdlist();
4525     qemu_mutex_init(&monitor_lock);
4526     qemu_mutex_init(&mon_fdsets_lock);
4527
4528     /*
4529      * The dispatcher BH must run in the main loop thread, since we
4530      * have commands assuming that context.  It would be nice to get
4531      * rid of those assumptions.
4532      */
4533     qmp_dispatcher_bh = aio_bh_new(iohandler_get_aio_context(),
4534                                    monitor_qmp_bh_dispatcher,
4535                                    NULL);
4536 }
4537
4538 /* These functions just adapt the readline interface in a typesafe way.  We
4539  * could cast function pointers but that discards compiler checks.
4540  */
4541 static void GCC_FMT_ATTR(2, 3) monitor_readline_printf(void *opaque,
4542                                                        const char *fmt, ...)
4543 {
4544     va_list ap;
4545     va_start(ap, fmt);
4546     monitor_vprintf(opaque, fmt, ap);
4547     va_end(ap);
4548 }
4549
4550 static void monitor_readline_flush(void *opaque)
4551 {
4552     monitor_flush(opaque);
4553 }
4554
4555 /*
4556  * Print to current monitor if we have one, else to stderr.
4557  */
4558 int error_vprintf(const char *fmt, va_list ap)
4559 {
4560     if (cur_mon && !monitor_cur_is_qmp()) {
4561         return monitor_vprintf(cur_mon, fmt, ap);
4562     }
4563     return vfprintf(stderr, fmt, ap);
4564 }
4565
4566 int error_vprintf_unless_qmp(const char *fmt, va_list ap)
4567 {
4568     if (!cur_mon) {
4569         return vfprintf(stderr, fmt, ap);
4570     }
4571     if (!monitor_cur_is_qmp()) {
4572         return monitor_vprintf(cur_mon, fmt, ap);
4573     }
4574     return -1;
4575 }
4576
4577 static void monitor_list_append(Monitor *mon)
4578 {
4579     qemu_mutex_lock(&monitor_lock);
4580     /*
4581      * This prevents inserting new monitors during monitor_cleanup().
4582      * A cleaner solution would involve the main thread telling other
4583      * threads to terminate, waiting for their termination.
4584      */
4585     if (!monitor_destroyed) {
4586         QTAILQ_INSERT_HEAD(&mon_list, mon, entry);
4587         mon = NULL;
4588     }
4589     qemu_mutex_unlock(&monitor_lock);
4590
4591     if (mon) {
4592         monitor_data_destroy(mon);
4593         g_free(mon);
4594     }
4595 }
4596
4597 static void monitor_qmp_setup_handlers_bh(void *opaque)
4598 {
4599     Monitor *mon = opaque;
4600     GMainContext *context;
4601
4602     assert(mon->use_io_thread);
4603     context = iothread_get_g_main_context(mon_iothread);
4604     assert(context);
4605     qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_qmp_read,
4606                              monitor_qmp_event, NULL, mon, context, true);
4607     monitor_list_append(mon);
4608 }
4609
4610 void monitor_init(Chardev *chr, int flags)
4611 {
4612     Monitor *mon = g_malloc(sizeof(*mon));
4613     bool use_readline = flags & MONITOR_USE_READLINE;
4614
4615     /* Note: we run QMP monitor in I/O thread when @chr supports that */
4616     monitor_data_init(mon, false,
4617                       (flags & MONITOR_USE_CONTROL)
4618                       && qemu_chr_has_feature(chr,
4619                                               QEMU_CHAR_FEATURE_GCONTEXT));
4620
4621     qemu_chr_fe_init(&mon->chr, chr, &error_abort);
4622     mon->flags = flags;
4623     if (use_readline) {
4624         mon->rs = readline_init(monitor_readline_printf,
4625                                 monitor_readline_flush,
4626                                 mon,
4627                                 monitor_find_completion);
4628         monitor_read_command(mon, 0);
4629     }
4630
4631     if (monitor_is_qmp(mon)) {
4632         qemu_chr_fe_set_echo(&mon->chr, true);
4633         json_message_parser_init(&mon->qmp.parser, handle_qmp_command,
4634                                  mon, NULL);
4635         if (mon->use_io_thread) {
4636             /*
4637              * Make sure the old iowatch is gone.  It's possible when
4638              * e.g. the chardev is in client mode, with wait=on.
4639              */
4640             remove_fd_in_watch(chr);
4641             /*
4642              * We can't call qemu_chr_fe_set_handlers() directly here
4643              * since chardev might be running in the monitor I/O
4644              * thread.  Schedule a bottom half.
4645              */
4646             aio_bh_schedule_oneshot(iothread_get_aio_context(mon_iothread),
4647                                     monitor_qmp_setup_handlers_bh, mon);
4648             /* The bottom half will add @mon to @mon_list */
4649             return;
4650         } else {
4651             qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read,
4652                                      monitor_qmp_read, monitor_qmp_event,
4653                                      NULL, mon, NULL, true);
4654         }
4655     } else {
4656         qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_read,
4657                                  monitor_event, NULL, mon, NULL, true);
4658     }
4659
4660     monitor_list_append(mon);
4661 }
4662
4663 void monitor_cleanup(void)
4664 {
4665     /*
4666      * We need to explicitly stop the I/O thread (but not destroy it),
4667      * clean up the monitor resources, then destroy the I/O thread since
4668      * we need to unregister from chardev below in
4669      * monitor_data_destroy(), and chardev is not thread-safe yet
4670      */
4671     if (mon_iothread) {
4672         iothread_stop(mon_iothread);
4673     }
4674
4675     /* Flush output buffers and destroy monitors */
4676     qemu_mutex_lock(&monitor_lock);
4677     monitor_destroyed = true;
4678     while (!QTAILQ_EMPTY(&mon_list)) {
4679         Monitor *mon = QTAILQ_FIRST(&mon_list);
4680         QTAILQ_REMOVE(&mon_list, mon, entry);
4681         /* Permit QAPI event emission from character frontend release */
4682         qemu_mutex_unlock(&monitor_lock);
4683         monitor_flush(mon);
4684         monitor_data_destroy(mon);
4685         qemu_mutex_lock(&monitor_lock);
4686         g_free(mon);
4687     }
4688     qemu_mutex_unlock(&monitor_lock);
4689
4690     /* QEMUBHs needs to be deleted before destroying the I/O thread */
4691     qemu_bh_delete(qmp_dispatcher_bh);
4692     qmp_dispatcher_bh = NULL;
4693     if (mon_iothread) {
4694         iothread_destroy(mon_iothread);
4695         mon_iothread = NULL;
4696     }
4697 }
4698
4699 QemuOptsList qemu_mon_opts = {
4700     .name = "mon",
4701     .implied_opt_name = "chardev",
4702     .head = QTAILQ_HEAD_INITIALIZER(qemu_mon_opts.head),
4703     .desc = {
4704         {
4705             .name = "mode",
4706             .type = QEMU_OPT_STRING,
4707         },{
4708             .name = "chardev",
4709             .type = QEMU_OPT_STRING,
4710         },{
4711             .name = "pretty",
4712             .type = QEMU_OPT_BOOL,
4713         },
4714         { /* end of list */ }
4715     },
4716 };
4717
4718 HotpluggableCPUList *qmp_query_hotpluggable_cpus(Error **errp)
4719 {
4720     MachineState *ms = MACHINE(qdev_get_machine());
4721     MachineClass *mc = MACHINE_GET_CLASS(ms);
4722
4723     if (!mc->has_hotpluggable_cpus) {
4724         error_setg(errp, QERR_FEATURE_DISABLED, "query-hotpluggable-cpus");
4725         return NULL;
4726     }
4727
4728     return machine_query_hotpluggable_cpus(ms);
4729 }
This page took 0.273816 seconds and 4 git commands to generate.