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()
140 static void monitor_qmp_dispatch(MonitorQMP *mon, QObject *req) in monitor_qmp_dispatch() argument
145 rsp = qmp_dispatch(mon->commands, req, qmp_oob_enabled(mon), in monitor_qmp_dispatch()
146 &mon->common); in monitor_qmp_dispatch()
148 if (mon->commands == &qmp_cap_negotiation_commands) { in monitor_qmp_dispatch()
160 monitor_qmp_respond(mon, rsp); in monitor_qmp_dispatch()
179 Monitor *mon; in monitor_qmp_requests_pop_any_with_lock() local
184 QTAILQ_FOREACH(mon, &mon_list, entry) { in monitor_qmp_requests_pop_any_with_lock()
185 if (!monitor_is_qmp(mon)) { in monitor_qmp_requests_pop_any_with_lock()
189 qmp_mon = container_of(mon, MonitorQMP, common); in monitor_qmp_requests_pop_any_with_lock()
204 QTAILQ_REMOVE(&mon_list, mon, entry); in monitor_qmp_requests_pop_any_with_lock()
205 QTAILQ_INSERT_TAIL(&mon_list, mon, entry); in monitor_qmp_requests_pop_any_with_lock()
218 MonitorQMP *mon; in monitor_qmp_dispatcher_co() local
273 mon = req_obj->mon; in monitor_qmp_dispatcher_co()
275 need_resume = !qmp_oob_enabled(mon) || in monitor_qmp_dispatcher_co()
276 mon->qmp_requests->length == QMP_REQ_QUEUE_LEN_MAX - 1; in monitor_qmp_dispatcher_co()
277 qemu_mutex_unlock(&mon->qmp_queue_lock); in monitor_qmp_dispatcher_co()
282 monitor_qmp_dispatch(mon, req_obj->req); in monitor_qmp_dispatcher_co()
287 monitor_qmp_respond(mon, rsp); in monitor_qmp_dispatcher_co()
293 monitor_resume(&mon->common); in monitor_qmp_dispatcher_co()
310 MonitorQMP *mon = opaque; in handle_qmp_command() local
324 trace_handle_qmp_command(mon, qstring_get_str(req_json)); in handle_qmp_command()
331 monitor_qmp_dispatch(mon, req); in handle_qmp_command()
337 req_obj->mon = mon; in handle_qmp_command()
342 qemu_mutex_lock(&mon->qmp_queue_lock); in handle_qmp_command()
351 if (!qmp_oob_enabled(mon) || in handle_qmp_command()
352 mon->qmp_requests->length == QMP_REQ_QUEUE_LEN_MAX - 1) { in handle_qmp_command()
353 monitor_suspend(&mon->common); in handle_qmp_command()
361 assert(mon->qmp_requests->length < QMP_REQ_QUEUE_LEN_MAX); in handle_qmp_command()
362 g_queue_push_tail(mon->qmp_requests, req_obj); in handle_qmp_command()
363 qemu_mutex_unlock(&mon->qmp_queue_lock); in handle_qmp_command()
373 MonitorQMP *mon = opaque; in monitor_qmp_read() local
375 json_message_parser_feed(&mon->parser, (const char *) buf, size); in monitor_qmp_read()
378 static QDict *qmp_greeting(MonitorQMP *mon) in qmp_greeting() argument
390 if (mon->capab_offered[cap]) { in qmp_greeting()
403 MonitorQMP *mon = opaque; in monitor_qmp_event() local
407 mon->commands = &qmp_cap_negotiation_commands; in monitor_qmp_event()
408 monitor_qmp_caps_reset(mon); in monitor_qmp_event()
409 data = qmp_greeting(mon); in monitor_qmp_event()
410 qmp_send_response(mon, data); in monitor_qmp_event()
421 monitor_qmp_cleanup_queue_and_resume(mon); in monitor_qmp_event()
422 json_message_parser_destroy(&mon->parser); in monitor_qmp_event()
423 json_message_parser_init(&mon->parser, handle_qmp_command, in monitor_qmp_event()
424 mon, NULL); in monitor_qmp_event()
436 void monitor_data_destroy_qmp(MonitorQMP *mon) in monitor_data_destroy_qmp() argument
438 json_message_parser_destroy(&mon->parser); in monitor_data_destroy_qmp()
439 qemu_mutex_destroy(&mon->qmp_queue_lock); in monitor_data_destroy_qmp()
440 monitor_qmp_cleanup_req_queue_locked(mon); in monitor_data_destroy_qmp()
441 g_queue_free(mon->qmp_requests); in monitor_data_destroy_qmp()
446 MonitorQMP *mon = opaque; in monitor_qmp_setup_handlers_bh() local
449 assert(mon->common.use_io_thread); in monitor_qmp_setup_handlers_bh()
452 qemu_chr_fe_set_handlers(&mon->common.chr, monitor_can_read, in monitor_qmp_setup_handlers_bh()
454 NULL, &mon->common, context, true); in monitor_qmp_setup_handlers_bh()
455 monitor_list_append(&mon->common); in monitor_qmp_setup_handlers_bh()
460 MonitorQMP *mon = g_new0(MonitorQMP, 1); in monitor_init_qmp() local
462 if (!qemu_chr_fe_init(&mon->common.chr, chr, errp)) { in monitor_init_qmp()
463 g_free(mon); in monitor_init_qmp()
466 qemu_chr_fe_set_echo(&mon->common.chr, true); in monitor_init_qmp()
469 monitor_data_init(&mon->common, true, false, in monitor_init_qmp()
472 mon->pretty = pretty; in monitor_init_qmp()
474 qemu_mutex_init(&mon->qmp_queue_lock); in monitor_init_qmp()
475 mon->qmp_requests = g_queue_new(); in monitor_init_qmp()
477 json_message_parser_init(&mon->parser, handle_qmp_command, mon, NULL); in monitor_init_qmp()
478 if (mon->common.use_io_thread) { in monitor_init_qmp()
490 monitor_qmp_setup_handlers_bh, mon); in monitor_init_qmp()
493 qemu_chr_fe_set_handlers(&mon->common.chr, monitor_can_read, in monitor_init_qmp()
495 NULL, &mon->common, NULL, true); in monitor_init_qmp()
496 monitor_list_append(&mon->common); in monitor_init_qmp()