Lines Matching refs:mon

39     MonitorQMP *mon;  member
51 static bool qmp_oob_enabled(MonitorQMP *mon) in qmp_oob_enabled() argument
53 return mon->capab[QMP_CAPABILITY_OOB]; in qmp_oob_enabled()
56 static void monitor_qmp_caps_reset(MonitorQMP *mon) in monitor_qmp_caps_reset() argument
58 memset(mon->capab_offered, 0, sizeof(mon->capab_offered)); in monitor_qmp_caps_reset()
59 memset(mon->capab, 0, sizeof(mon->capab)); in monitor_qmp_caps_reset()
60 mon->capab_offered[QMP_CAPABILITY_OOB] = mon->common.use_io_thread; in monitor_qmp_caps_reset()
71 static void monitor_qmp_cleanup_req_queue_locked(MonitorQMP *mon) in monitor_qmp_cleanup_req_queue_locked() argument
73 while (!g_queue_is_empty(mon->qmp_requests)) { in monitor_qmp_cleanup_req_queue_locked()
74 qmp_request_free(g_queue_pop_head(mon->qmp_requests)); in monitor_qmp_cleanup_req_queue_locked()
78 static void monitor_qmp_cleanup_queue_and_resume(MonitorQMP *mon) in monitor_qmp_cleanup_queue_and_resume() argument
80 qemu_mutex_lock(&mon->qmp_queue_lock); in monitor_qmp_cleanup_queue_and_resume()
88 bool need_resume = (!qmp_oob_enabled(mon) || in monitor_qmp_cleanup_queue_and_resume()
89 mon->qmp_requests->length == QMP_REQ_QUEUE_LEN_MAX) in monitor_qmp_cleanup_queue_and_resume()
90 && !g_queue_is_empty(mon->qmp_requests); in monitor_qmp_cleanup_queue_and_resume()
92 monitor_qmp_cleanup_req_queue_locked(mon); in monitor_qmp_cleanup_queue_and_resume()
104 monitor_resume(&mon->common); in monitor_qmp_cleanup_queue_and_resume()
107 qemu_mutex_unlock(&mon->qmp_queue_lock); in monitor_qmp_cleanup_queue_and_resume()
110 void qmp_send_response(MonitorQMP *mon, const QDict *rsp) in qmp_send_response() argument
115 json = mon->pretty ? qobject_to_json_pretty(data) : qobject_to_json(data); in qmp_send_response()
119 monitor_puts(&mon->common, qstring_get_str(json)); in qmp_send_response()
129 static void monitor_qmp_respond(MonitorQMP *mon, QDict *rsp) in monitor_qmp_respond() argument
132 qmp_send_response(mon, rsp); in monitor_qmp_respond()
136 static void monitor_qmp_dispatch(MonitorQMP *mon, QObject *req) in monitor_qmp_dispatch() argument
143 cur_mon = &mon->common; in monitor_qmp_dispatch()
145 rsp = qmp_dispatch(mon->commands, req, qmp_oob_enabled(mon)); in monitor_qmp_dispatch()
149 if (mon->commands == &qmp_cap_negotiation_commands) { in monitor_qmp_dispatch()
161 monitor_qmp_respond(mon, rsp); in monitor_qmp_dispatch()
180 Monitor *mon; in monitor_qmp_requests_pop_any_with_lock() local
185 QTAILQ_FOREACH(mon, &mon_list, entry) { in monitor_qmp_requests_pop_any_with_lock()
186 if (!monitor_is_qmp(mon)) { in monitor_qmp_requests_pop_any_with_lock()
190 qmp_mon = container_of(mon, MonitorQMP, common); in monitor_qmp_requests_pop_any_with_lock()
205 QTAILQ_REMOVE(&mon_list, mon, entry); in monitor_qmp_requests_pop_any_with_lock()
206 QTAILQ_INSERT_TAIL(&mon_list, mon, entry); in monitor_qmp_requests_pop_any_with_lock()
219 MonitorQMP *mon; in monitor_qmp_bh_dispatcher() local
225 mon = req_obj->mon; in monitor_qmp_bh_dispatcher()
227 need_resume = !qmp_oob_enabled(mon) || in monitor_qmp_bh_dispatcher()
228 mon->qmp_requests->length == QMP_REQ_QUEUE_LEN_MAX - 1; in monitor_qmp_bh_dispatcher()
229 qemu_mutex_unlock(&mon->qmp_queue_lock); in monitor_qmp_bh_dispatcher()
234 monitor_qmp_dispatch(mon, req_obj->req); in monitor_qmp_bh_dispatcher()
239 monitor_qmp_respond(mon, rsp); in monitor_qmp_bh_dispatcher()
245 monitor_resume(&mon->common); in monitor_qmp_bh_dispatcher()
255 MonitorQMP *mon = opaque; in handle_qmp_command() local
269 trace_handle_qmp_command(mon, qstring_get_str(req_json)); in handle_qmp_command()
276 monitor_qmp_dispatch(mon, req); in handle_qmp_command()
282 req_obj->mon = mon; in handle_qmp_command()
287 qemu_mutex_lock(&mon->qmp_queue_lock); in handle_qmp_command()
296 if (!qmp_oob_enabled(mon) || in handle_qmp_command()
297 mon->qmp_requests->length == QMP_REQ_QUEUE_LEN_MAX - 1) { in handle_qmp_command()
298 monitor_suspend(&mon->common); in handle_qmp_command()
306 assert(mon->qmp_requests->length < QMP_REQ_QUEUE_LEN_MAX); in handle_qmp_command()
307 g_queue_push_tail(mon->qmp_requests, req_obj); in handle_qmp_command()
308 qemu_mutex_unlock(&mon->qmp_queue_lock); in handle_qmp_command()
316 MonitorQMP *mon = opaque; in monitor_qmp_read() local
318 json_message_parser_feed(&mon->parser, (const char *) buf, size); in monitor_qmp_read()
321 static QDict *qmp_greeting(MonitorQMP *mon) in qmp_greeting() argument
330 if (mon->capab_offered[cap]) { in qmp_greeting()
343 MonitorQMP *mon = opaque; in monitor_qmp_event() local
347 mon->commands = &qmp_cap_negotiation_commands; in monitor_qmp_event()
348 monitor_qmp_caps_reset(mon); in monitor_qmp_event()
349 data = qmp_greeting(mon); in monitor_qmp_event()
350 qmp_send_response(mon, data); in monitor_qmp_event()
361 monitor_qmp_cleanup_queue_and_resume(mon); in monitor_qmp_event()
362 json_message_parser_destroy(&mon->parser); in monitor_qmp_event()
363 json_message_parser_init(&mon->parser, handle_qmp_command, in monitor_qmp_event()
364 mon, NULL); in monitor_qmp_event()
376 void monitor_data_destroy_qmp(MonitorQMP *mon) in monitor_data_destroy_qmp() argument
378 json_message_parser_destroy(&mon->parser); in monitor_data_destroy_qmp()
379 qemu_mutex_destroy(&mon->qmp_queue_lock); in monitor_data_destroy_qmp()
380 monitor_qmp_cleanup_req_queue_locked(mon); in monitor_data_destroy_qmp()
381 g_queue_free(mon->qmp_requests); in monitor_data_destroy_qmp()
386 MonitorQMP *mon = opaque; in monitor_qmp_setup_handlers_bh() local
389 assert(mon->common.use_io_thread); in monitor_qmp_setup_handlers_bh()
392 qemu_chr_fe_set_handlers(&mon->common.chr, monitor_can_read, in monitor_qmp_setup_handlers_bh()
394 NULL, &mon->common, context, true); in monitor_qmp_setup_handlers_bh()
395 monitor_list_append(&mon->common); in monitor_qmp_setup_handlers_bh()
400 MonitorQMP *mon = g_new0(MonitorQMP, 1); in monitor_init_qmp() local
402 if (!qemu_chr_fe_init(&mon->common.chr, chr, errp)) { in monitor_init_qmp()
403 g_free(mon); in monitor_init_qmp()
406 qemu_chr_fe_set_echo(&mon->common.chr, true); in monitor_init_qmp()
409 monitor_data_init(&mon->common, true, false, in monitor_init_qmp()
412 mon->pretty = pretty; in monitor_init_qmp()
414 qemu_mutex_init(&mon->qmp_queue_lock); in monitor_init_qmp()
415 mon->qmp_requests = g_queue_new(); in monitor_init_qmp()
417 json_message_parser_init(&mon->parser, handle_qmp_command, mon, NULL); in monitor_init_qmp()
418 if (mon->common.use_io_thread) { in monitor_init_qmp()
430 monitor_qmp_setup_handlers_bh, mon); in monitor_init_qmp()
433 qemu_chr_fe_set_handlers(&mon->common.chr, monitor_can_read, in monitor_init_qmp()
435 NULL, &mon->common, NULL, true); in monitor_init_qmp()
436 monitor_list_append(&mon->common); in monitor_init_qmp()