[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v6 15/27] monitor: let suspend/resume work even wi
From: |
Fam Zheng |
Subject: |
Re: [Qemu-devel] [RFC v6 15/27] monitor: let suspend/resume work even with QMPs |
Date: |
Thu, 21 Dec 2017 19:27:38 +0800 |
User-agent: |
Mutt/1.9.1 (2017-09-22) |
On Tue, 12/19 16:45, Peter Xu wrote:
> One thing to mention is that for QMPs that are using IOThreads, we need
> an explicit kick for the IOThread in case it is sleeping.
>
> Since at it, add traces for the operations.
>
> Signed-off-by: Peter Xu <address@hidden>
> ---
> monitor.c | 26 +++++++++++++++++++++-----
> trace-events | 1 +
> 2 files changed, 22 insertions(+), 5 deletions(-)
>
> diff --git a/monitor.c b/monitor.c
> index 844508d134..5f05f2e9da 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -3992,19 +3992,35 @@ static void monitor_command_cb(void *opaque, const
> char *cmdline,
>
> int monitor_suspend(Monitor *mon)
> {
> - if (!mon->rs)
> - return -ENOTTY;
Please add to the commit message why the mon->rs check is dropped, for this and
the other one.
Fam
> atomic_inc(&mon->suspend_cnt);
> + if (monitor_is_qmp(mon)) {
> + /*
> + * Kick iothread to make sure this takes effect. It'll be
> + * evaluated again in prepare() of the watch object.
> + */
> + aio_notify(iothread_get_aio_context(mon_global.mon_iothread));
> + }
> + trace_monitor_suspend(mon, 1);
> return 0;
> }
>
> void monitor_resume(Monitor *mon)
> {
> - if (!mon->rs)
> - return;
> if (atomic_dec_fetch(&mon->suspend_cnt) == 0) {
> - readline_show_prompt(mon->rs);
> + if (monitor_is_qmp(mon)) {
> + /*
> + * For QMP monitors that are running in IOThread, let's
> + * kick the thread in case it's sleeping.
> + */
> + if (mon->use_io_thr) {
> +
> aio_notify(iothread_get_aio_context(mon_global.mon_iothread));
> + }
> + } else {
> + assert(mon->rs);
> + readline_show_prompt(mon->rs);
> + }
> }
> + trace_monitor_suspend(mon, -1);
> }
>
> static QObject *get_qmp_greeting(Monitor *mon)
> diff --git a/trace-events b/trace-events
> index 1d2eb5d3e4..2646241a0f 100644
> --- a/trace-events
> +++ b/trace-events
> @@ -47,6 +47,7 @@ monitor_protocol_event_emit(uint32_t event, void *data)
> "event=%d data=%p"
> monitor_protocol_event_queue(uint32_t event, void *qdict, uint64_t rate)
> "event=%d data=%p rate=%" PRId64
> handle_hmp_command(void *mon, const char *cmdline) "mon %p cmdline: %s"
> handle_qmp_command(void *mon, const char *req) "mon %p req: %s"
> +monitor_suspend(void *ptr, int cnt) "mon %p: %d"
>
> # dma-helpers.c
> dma_blk_io(void *dbs, void *bs, int64_t offset, bool to_dev) "dbs=%p bs=%p
> offset=%" PRId64 " to_dev=%d"
> --
> 2.14.3
>
- Re: [Qemu-devel] [RFC v6 10/27] monitor: allow to use IO thread for parsing, (continued)
- [Qemu-devel] [RFC v6 11/27] qmp: introduce QMPCapability, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 12/27] qmp: negotiate QMP capabilities, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 13/27] monitor: introduce monitor_qmp_respond(), Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 14/27] monitor: let suspend_cnt be thread safe, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 15/27] monitor: let suspend/resume work even with QMPs, Peter Xu, 2017/12/19
- Re: [Qemu-devel] [RFC v6 15/27] monitor: let suspend/resume work even with QMPs,
Fam Zheng <=
- [Qemu-devel] [RFC v6 16/27] monitor: separate QMP parser and dispatcher, Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 17/27] qmp: add new event "command-dropped", Peter Xu, 2017/12/19
- [Qemu-devel] [RFC v6 18/27] monitor: send event when command queue full, Peter Xu, 2017/12/19