From nobody Mon Feb 9 00:42:26 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1530695567122118.96460740825466; Wed, 4 Jul 2018 02:12:47 -0700 (PDT) Received: from localhost ([::1]:44798 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fadq7-0005kG-9T for importer@patchew.org; Wed, 04 Jul 2018 05:12:43 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50785) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fadoH-0004YW-O7 for qemu-devel@nongnu.org; Wed, 04 Jul 2018 05:10:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fadoF-00010S-CM for qemu-devel@nongnu.org; Wed, 04 Jul 2018 05:10:49 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:41210 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1fadoF-0000za-7V for qemu-devel@nongnu.org; Wed, 04 Jul 2018 05:10:47 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DF7877262D for ; Wed, 4 Jul 2018 09:10:46 +0000 (UTC) Received: from xz-mi.redhat.com (ovpn-12-35.pek2.redhat.com [10.72.12.35]) by smtp.corp.redhat.com (Postfix) with ESMTP id CBF821117629; Wed, 4 Jul 2018 09:10:44 +0000 (UTC) From: Peter Xu To: Markus Armbruster , qemu-devel@nongnu.org Date: Wed, 4 Jul 2018 17:10:36 +0800 Message-Id: <20180704091038.29449-2-peterx@redhat.com> In-Reply-To: <20180704091038.29449-1-peterx@redhat.com> References: <20180704091038.29449-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Wed, 04 Jul 2018 09:10:46 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Wed, 04 Jul 2018 09:10:46 +0000 (UTC) for IP:'10.11.54.3' DOMAIN:'int-mx03.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'peterx@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [RFC 1/3] monitor: allow monitor_qapi_event_emit specify mon X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peterx@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This is an internal change to allow monitor_qapi_event_emit() to pass in specific monitor to send the event. No functional change. Signed-off-by: Peter Xu --- monitor.c | 37 ++++++++++++++++++++++++++----------- trace-events | 2 +- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/monitor.c b/monitor.c index 9eb9f06599..94ae7f1c79 100644 --- a/monitor.c +++ b/monitor.c @@ -637,20 +637,35 @@ static MonitorQAPIEventConf monitor_qapi_event_conf[Q= API_EVENT__MAX] =3D { [QAPI_EVENT_VSERPORT_CHANGE] =3D { 1000 * SCALE_MS }, }; =20 +static bool monitor_allows_events(Monitor *mon) +{ + return monitor_is_qmp(mon) && + mon->qmp.commands !=3D &qmp_cap_negotiation_commands; +} + +static void monitor_queue_event(Monitor *mon, QDict *qdict) +{ + if (monitor_allows_events(mon)) { + qmp_queue_response(mon, qdict); + } +} + /* - * Broadcast an event to all monitors. + * Broadcast an event to the monitor specified by @mon, or all + * monitors if @mon is NULL. * @qdict is the event object. Its member "event" must match @event. * Caller must hold monitor_lock. */ -static void monitor_qapi_event_emit(QAPIEvent event, QDict *qdict) +static void monitor_qapi_event_emit(Monitor *mon, QAPIEvent event, + QDict *qdict) { - Monitor *mon; + trace_monitor_protocol_event_emit(mon, event, qdict); =20 - trace_monitor_protocol_event_emit(event, qdict); - QTAILQ_FOREACH(mon, &mon_list, entry) { - if (monitor_is_qmp(mon) - && mon->qmp.commands !=3D &qmp_cap_negotiation_commands) { - qmp_queue_response(mon, qdict); + if (mon) { + monitor_queue_event(mon, qdict); + } else { + QTAILQ_FOREACH(mon, &mon_list, entry) { + monitor_queue_event(mon, qdict); } } } @@ -675,7 +690,7 @@ monitor_qapi_event_queue(QAPIEvent event, QDict *qdict) =20 if (!evconf->rate) { /* Unthrottled event */ - monitor_qapi_event_emit(event, qdict); + monitor_qapi_event_emit(NULL, event, qdict); } else { QDict *data =3D qobject_to(QDict, qdict_get(qdict, "data")); MonitorQAPIEventState key =3D { .event =3D event, .data =3D data }; @@ -700,7 +715,7 @@ monitor_qapi_event_queue(QAPIEvent event, QDict *qdict) */ int64_t now =3D qemu_clock_get_ns(monitor_get_event_clock()); =20 - monitor_qapi_event_emit(event, qdict); + monitor_qapi_event_emit(NULL, event, qdict); =20 evstate =3D g_new(MonitorQAPIEventState, 1); evstate->event =3D event; @@ -733,7 +748,7 @@ static void monitor_qapi_event_handler(void *opaque) if (evstate->qdict) { int64_t now =3D qemu_clock_get_ns(monitor_get_event_clock()); =20 - monitor_qapi_event_emit(evstate->event, evstate->qdict); + monitor_qapi_event_emit(NULL, evstate->event, evstate->qdict); qobject_unref(evstate->qdict); evstate->qdict =3D NULL; timer_mod_ns(evstate->timer, now + evconf->rate); diff --git a/trace-events b/trace-events index c445f54773..d8074bb721 100644 --- a/trace-events +++ b/trace-events @@ -43,7 +43,7 @@ qemu_system_powerdown_request(void) "" =20 # monitor.c monitor_protocol_event_handler(uint32_t event, void *qdict) "event=3D%d da= ta=3D%p" -monitor_protocol_event_emit(uint32_t event, void *data) "event=3D%d data= =3D%p" +monitor_protocol_event_emit(void *mon, uint32_t event, void *data) "mon=3D= %p event=3D%d data=3D%p" monitor_protocol_event_queue(uint32_t event, void *qdict, uint64_t rate) "= event=3D%d data=3D%p rate=3D%" 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" --=20 2.17.1