mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
chardev: add qmp hotplug commands, with null chardev support
Add chardev-add and chardev-remove qmp commands. Hotplugging a null chardev is supported for now, more will be added later. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
e551498e72
commit
f1a1a35638
3 changed files with 152 additions and 0 deletions
53
qemu-char.c
53
qemu-char.c
|
@ -3010,3 +3010,56 @@ QemuOptsList qemu_chardev_opts = {
|
|||
{ /* end of list */ }
|
||||
},
|
||||
};
|
||||
|
||||
ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
|
||||
Error **errp)
|
||||
{
|
||||
ChardevReturn *ret = g_new0(ChardevReturn, 1);
|
||||
CharDriverState *chr = NULL;
|
||||
|
||||
chr = qemu_chr_find(id);
|
||||
if (chr) {
|
||||
error_setg(errp, "Chardev '%s' already exists", id);
|
||||
g_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch (backend->kind) {
|
||||
case CHARDEV_BACKEND_KIND_NULL:
|
||||
chr = qemu_chr_open_null(NULL);
|
||||
break;
|
||||
default:
|
||||
error_setg(errp, "unknown chardev backend (%d)", backend->kind);
|
||||
break;
|
||||
}
|
||||
|
||||
if (chr == NULL && !error_is_set(errp)) {
|
||||
error_setg(errp, "Failed to create chardev");
|
||||
}
|
||||
if (chr) {
|
||||
chr->label = g_strdup(id);
|
||||
chr->avail_connections = 1;
|
||||
QTAILQ_INSERT_TAIL(&chardevs, chr, next);
|
||||
return ret;
|
||||
} else {
|
||||
g_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void qmp_chardev_remove(const char *id, Error **errp)
|
||||
{
|
||||
CharDriverState *chr;
|
||||
|
||||
chr = qemu_chr_find(id);
|
||||
if (NULL == chr) {
|
||||
error_setg(errp, "Chardev '%s' not found", id);
|
||||
return;
|
||||
}
|
||||
if (chr->chr_can_read || chr->chr_read ||
|
||||
chr->chr_event || chr->handler_opaque) {
|
||||
error_setg(errp, "Chardev '%s' is busy", id);
|
||||
return;
|
||||
}
|
||||
qemu_chr_delete(chr);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue