mirror of https://gitee.com/openkylin/qemu.git
qmp: Add more tracepoints
Add tracepoints for in-band request enqueue and dequeue, processing of queued in-band errors, and responses. Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20210201161504.1976989-3-armbru@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
395a95080a
commit
f680405f45
|
@ -113,6 +113,7 @@ void qmp_send_response(MonitorQMP *mon, const QDict *rsp)
|
||||||
|
|
||||||
json = qobject_to_json_pretty(data, mon->pretty);
|
json = qobject_to_json_pretty(data, mon->pretty);
|
||||||
assert(json != NULL);
|
assert(json != NULL);
|
||||||
|
trace_monitor_qmp_respond(mon, json->str);
|
||||||
|
|
||||||
g_string_append_c(json, '\n');
|
g_string_append_c(json, '\n');
|
||||||
monitor_puts(&mon->common, json->str);
|
monitor_puts(&mon->common, json->str);
|
||||||
|
@ -251,6 +252,9 @@ void coroutine_fn monitor_qmp_dispatcher_co(void *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace_monitor_qmp_in_band_dequeue(req_obj,
|
||||||
|
req_obj->mon->qmp_requests->length);
|
||||||
|
|
||||||
if (qatomic_xchg(&qmp_dispatcher_co_busy, true) == true) {
|
if (qatomic_xchg(&qmp_dispatcher_co_busy, true) == true) {
|
||||||
/*
|
/*
|
||||||
* Someone rescheduled us (probably because a new requests
|
* Someone rescheduled us (probably because a new requests
|
||||||
|
@ -287,6 +291,7 @@ void coroutine_fn monitor_qmp_dispatcher_co(void *data)
|
||||||
monitor_qmp_dispatch(mon, req_obj->req);
|
monitor_qmp_dispatch(mon, req_obj->req);
|
||||||
} else {
|
} else {
|
||||||
assert(req_obj->err);
|
assert(req_obj->err);
|
||||||
|
trace_monitor_qmp_err_in_band(error_get_pretty(req_obj->err));
|
||||||
rsp = qmp_error_response(req_obj->err);
|
rsp = qmp_error_response(req_obj->err);
|
||||||
req_obj->err = NULL;
|
req_obj->err = NULL;
|
||||||
monitor_qmp_respond(mon, rsp);
|
monitor_qmp_respond(mon, rsp);
|
||||||
|
@ -364,6 +369,8 @@ static void handle_qmp_command(void *opaque, QObject *req, Error *err)
|
||||||
* handled in time order. Ownership for req_obj, req,
|
* handled in time order. Ownership for req_obj, req,
|
||||||
* etc. will be delivered to the handler side.
|
* etc. will be delivered to the handler side.
|
||||||
*/
|
*/
|
||||||
|
trace_monitor_qmp_in_band_enqueue(req_obj, mon,
|
||||||
|
mon->qmp_requests->length);
|
||||||
assert(mon->qmp_requests->length < QMP_REQ_QUEUE_LEN_MAX);
|
assert(mon->qmp_requests->length < QMP_REQ_QUEUE_LEN_MAX);
|
||||||
g_queue_push_tail(mon->qmp_requests, req_obj);
|
g_queue_push_tail(mon->qmp_requests, req_obj);
|
||||||
qemu_mutex_unlock(&mon->qmp_queue_lock);
|
qemu_mutex_unlock(&mon->qmp_queue_lock);
|
||||||
|
|
|
@ -10,6 +10,10 @@ monitor_protocol_event_queue(uint32_t event, void *qdict, uint64_t rate) "event=
|
||||||
monitor_suspend(void *ptr, int cnt) "mon %p: %d"
|
monitor_suspend(void *ptr, int cnt) "mon %p: %d"
|
||||||
|
|
||||||
# qmp.c
|
# qmp.c
|
||||||
|
monitor_qmp_in_band_enqueue(void *req, void *mon, unsigned len) "%p mon %p len %u"
|
||||||
|
monitor_qmp_in_band_dequeue(void *req, unsigned len) "%p len %u"
|
||||||
monitor_qmp_cmd_in_band(const char *id) "%s"
|
monitor_qmp_cmd_in_band(const char *id) "%s"
|
||||||
|
monitor_qmp_err_in_band(const char *desc) "%s"
|
||||||
monitor_qmp_cmd_out_of_band(const char *id) "%s"
|
monitor_qmp_cmd_out_of_band(const char *id) "%s"
|
||||||
|
monitor_qmp_respond(void *mon, const char *json) "mon %p resp: %s"
|
||||||
handle_qmp_command(void *mon, const char *req) "mon %p req: %s"
|
handle_qmp_command(void *mon, const char *req) "mon %p req: %s"
|
||||||
|
|
Loading…
Reference in New Issue