mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:17 +00:00
monitor: pass chardev ID into monitor constructor instead of object
Current the monitor_new_hmp/monitor_new_qmp constructors accept a Chardev object pointer. To facilitate the next commit which will introduce a QOM property for the character device ID, switch to accepting an chardev ID in the constructor. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Message-ID: <20260706135824.2623960-7-berrange@redhat.com> Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
committed by
Markus Armbruster
parent
f96eac8a4f
commit
7e3ce81383
@@ -804,8 +804,9 @@ static Chardev *qemu_chr_new_from_name(const char *label, const char *filename,
|
||||
}
|
||||
|
||||
if (qemu_opt_get_bool(opts, "mux", 0)) {
|
||||
const char *chardev_id = qemu_opts_id(opts);
|
||||
assert(permit_mux_mon);
|
||||
monitor_new_hmp(NULL, chr, true, &err);
|
||||
monitor_new_hmp(NULL, chardev_id, true, &err);
|
||||
if (err) {
|
||||
error_report_err(err);
|
||||
object_unparent(OBJECT(chr));
|
||||
|
||||
@@ -390,7 +390,7 @@ bool gdbserver_start(const char *device, Error **errp)
|
||||
/* Initialize a monitor terminal for gdb */
|
||||
mon_chr = qemu_chardev_new(NULL, TYPE_CHARDEV_GDB,
|
||||
NULL, NULL, &error_abort);
|
||||
monitor_new_hmp(NULL, mon_chr, false, &error_abort);
|
||||
monitor_new_hmp(NULL, mon_chr->label, false, &error_abort);
|
||||
} else {
|
||||
qemu_chr_fe_deinit(&gdbserver_system_state.chr, true);
|
||||
mon_chr = gdbserver_system_state.mon_chr;
|
||||
|
||||
@@ -29,9 +29,9 @@ bool monitor_cur_is_qmp(void);
|
||||
void monitor_init_globals(void);
|
||||
void monitor_init_globals_core(void);
|
||||
char *monitor_compat_id(void);
|
||||
void monitor_new_qmp(const char *id, Chardev *chr,
|
||||
void monitor_new_qmp(const char *id, const char *chardev_id,
|
||||
bool pretty, Error **errp);
|
||||
void monitor_new_hmp(const char *id, Chardev *chr,
|
||||
void monitor_new_hmp(const char *id, const char *chardev_id,
|
||||
bool use_readline, Error **errp);
|
||||
int monitor_new(MonitorOptions *opts, bool allow_hmp, Error **errp);
|
||||
int monitor_new_opts(QemuOpts *opts, Error **errp);
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "qemu/base-arch-defs.h"
|
||||
#include "qemu/target-info.h"
|
||||
#include "qemu/units.h"
|
||||
#include "qapi/error.h"
|
||||
#include "exec/gdbstub.h"
|
||||
#include "system/block-backend.h"
|
||||
#include "trace.h"
|
||||
@@ -1538,16 +1539,25 @@ static void monitor_readline_flush(void *opaque)
|
||||
monitor_flush(&mon->parent_obj);
|
||||
}
|
||||
|
||||
void monitor_new_hmp(const char *id, Chardev *chr,
|
||||
void monitor_new_hmp(const char *id, const char *chardev_id,
|
||||
bool use_readline, Error **errp)
|
||||
{
|
||||
MonitorHMP *mon;
|
||||
g_autofree char *autoid = id ? NULL : monitor_compat_id();
|
||||
Object *obj = object_new_with_props(TYPE_MONITOR_HMP,
|
||||
object_get_objects_root(),
|
||||
id ? id : autoid,
|
||||
errp,
|
||||
NULL);
|
||||
Chardev *chr;
|
||||
Object *obj;
|
||||
|
||||
chr = qemu_chr_find(chardev_id);
|
||||
if (chr == NULL) {
|
||||
error_setg(errp, "chardev \"%s\" not found", chardev_id);
|
||||
return;
|
||||
}
|
||||
|
||||
obj = object_new_with_props(TYPE_MONITOR_HMP,
|
||||
object_get_objects_root(),
|
||||
id ? id : autoid,
|
||||
errp,
|
||||
NULL);
|
||||
if (!obj) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -741,13 +741,6 @@ char *monitor_compat_id(void)
|
||||
int monitor_new(MonitorOptions *opts, bool allow_hmp, Error **errp)
|
||||
{
|
||||
ERRP_GUARD();
|
||||
Chardev *chr;
|
||||
|
||||
chr = qemu_chr_find(opts->chardev);
|
||||
if (chr == NULL) {
|
||||
error_setg(errp, "chardev \"%s\" not found", opts->chardev);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!opts->has_mode) {
|
||||
opts->mode = allow_hmp ? MONITOR_MODE_READLINE : MONITOR_MODE_CONTROL;
|
||||
@@ -755,7 +748,7 @@ int monitor_new(MonitorOptions *opts, bool allow_hmp, Error **errp)
|
||||
|
||||
switch (opts->mode) {
|
||||
case MONITOR_MODE_CONTROL:
|
||||
monitor_new_qmp(opts->id, chr, opts->pretty, errp);
|
||||
monitor_new_qmp(opts->id, opts->chardev, opts->pretty, errp);
|
||||
break;
|
||||
case MONITOR_MODE_READLINE:
|
||||
if (!allow_hmp) {
|
||||
@@ -766,7 +759,7 @@ int monitor_new(MonitorOptions *opts, bool allow_hmp, Error **errp)
|
||||
error_setg(errp, "'pretty' is not compatible with HMP monitors");
|
||||
return -1;
|
||||
}
|
||||
monitor_new_hmp(opts->id, chr, true, errp);
|
||||
monitor_new_hmp(opts->id, opts->chardev, true, errp);
|
||||
break;
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
|
||||
@@ -527,16 +527,25 @@ static void monitor_qmp_setup_handlers_bh(void *opaque)
|
||||
monitor_list_append(&mon->parent_obj);
|
||||
}
|
||||
|
||||
void monitor_new_qmp(const char *id, Chardev *chr,
|
||||
void monitor_new_qmp(const char *id, const char *chardev_id,
|
||||
bool pretty, Error **errp)
|
||||
{
|
||||
MonitorQMP *mon;
|
||||
g_autofree char *autoid = id ? NULL : monitor_compat_id();
|
||||
Object *obj = object_new_with_props(TYPE_MONITOR_QMP,
|
||||
object_get_objects_root(),
|
||||
id ? id : autoid,
|
||||
errp,
|
||||
NULL);
|
||||
Chardev *chr;
|
||||
Object *obj;
|
||||
|
||||
chr = qemu_chr_find(chardev_id);
|
||||
if (chr == NULL) {
|
||||
error_setg(errp, "chardev \"%s\" not found", chardev_id);
|
||||
return;
|
||||
}
|
||||
|
||||
obj = object_new_with_props(TYPE_MONITOR_QMP,
|
||||
object_get_objects_root(),
|
||||
id ? id : autoid,
|
||||
errp,
|
||||
NULL);
|
||||
if (!obj) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ int monitor_get_fd(Monitor *mon, const char *name, Error **errp)
|
||||
return -1;
|
||||
}
|
||||
|
||||
void monitor_new_hmp(const char *id, Chardev *chr,
|
||||
void monitor_new_hmp(const char *id, const char *chardev_id,
|
||||
bool use_readline, Error **errp)
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user