[libvirt] [PATCH 02/10] Convert character devices over to use -device
Daniel Veillard
veillard at redhat.com
Thu Dec 17 09:00:19 UTC 2009
On Tue, Dec 15, 2009 at 03:14:42PM +0000, Daniel P. Berrange wrote:
> The current character device syntax uses either
>
> -serial tty,path=/dev/ttyS2
>
> Or
>
> -chardev tty,id=serial0,path=/dev/ttyS2 -serial chardev:serial0
>
> With the new -device support, we now prefer
>
> -chardev file,id=serial0,path=/tmp/serial.log -device isa-serial,chardev=serial0
>
> This patch changes the existing -chardev syntax to use this new
> scheme, and fallbacks to the old plain -serial syntax for old
> QEMU.
>
> The monitor device changes to
>
> -chardev socket,id=monitor,path=/tmp/test-monitor,server,nowait -mon chardev=monitor
>
> In addition, this patch adds --nodefaults, which kills off the
> default serial, parallel, vga and nic devices. THis avoids the
> need for us to explicitly turn each off
> ---
> src/qemu/qemu_conf.c | 74 +++++++++++++-------
> src/qemu/qemu_conf.h | 1 +
> .../qemuxml2argv-channel-guestfwd.args | 2 +-
> .../qemuxml2argv-console-compat-chardev.args | 2 +-
> .../qemuxml2argv-parallel-tcp-chardev.args | 2 +-
> .../qemuxml2argv-serial-dev-chardev.args | 2 +-
> .../qemuxml2argv-serial-file-chardev.args | 2 +-
> .../qemuxml2argv-serial-many-chardev.args | 2 +-
> .../qemuxml2argv-serial-pty-chardev.args | 2 +-
> .../qemuxml2argv-serial-tcp-chardev.args | 2 +-
> .../qemuxml2argv-serial-tcp-telnet-chardev.args | 2 +-
> .../qemuxml2argv-serial-udp-chardev.args | 2 +-
> .../qemuxml2argv-serial-unix-chardev.args | 2 +-
> .../qemuxml2argv-serial-vc-chardev.args | 2 +-
> tests/qemuxml2argvtest.c | 26 ++++----
> 15 files changed, 74 insertions(+), 51 deletions(-)
>
> diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
> index 61e719d..16e8d2c 100644
> --- a/src/qemu/qemu_conf.c
> +++ b/src/qemu/qemu_conf.c
> @@ -909,6 +909,8 @@ static unsigned int qemudComputeCmdFlags(const char *help,
> flags |= QEMUD_CMD_FLAG_MEM_PATH;
> if (strstr(help, "-chardev"))
> flags |= QEMUD_CMD_FLAG_CHARDEV;
> + if (strstr(help, "-device"))
> + flags |= QEMUD_CMD_FLAG_DEVICE;
hum ... shouldn't we look for a space of some sort after the option
strings, to make sure we match the right string. Not specific to this
but might be safer.
> if (version >= 9000)
> flags |= QEMUD_CMD_FLAG_VNC_COLON;
> @@ -1945,6 +1947,9 @@ int qemudBuildCommandLine(virConnectPtr conn,
> if (!def->graphics)
> ADD_ARG_LIT("-nographic");
>
> + if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)
> + ADD_ARG_LIT("-nodefaults");
> +
> if (monitor_chr) {
> virBuffer buf = VIR_BUFFER_INITIALIZER;
>
> @@ -1959,26 +1964,32 @@ int qemudBuildCommandLine(virConnectPtr conn,
> ADD_ARG_LIT("-chardev");
> ADD_ARG(virBufferContentAndReset(&buf));
>
> - if (monitor_json)
> - virBufferAddLit(&buf, "control,");
> + virBufferAddLit(&buf, "chardev=monitor");
>
> - virBufferAddLit(&buf, "chardev:monitor");
> - }
> + if (virBufferError(&buf)) {
> + virBufferFreeAndReset(&buf);
> + goto no_memory;
> + }
>
> - else {
> + ADD_ARG_LIT("-mon");
> + if (monitor_json)
> + ADD_ARG_LIT("chardev=monitor,mode=control");
> + else
> + ADD_ARG_LIT("chardev=monitor,mode=readline");
> + } else {
> if (monitor_json)
> virBufferAddLit(&buf, "control,");
>
> qemudBuildCommandLineChrDevStr(monitor_chr, &buf);
> - }
>
> - if (virBufferError(&buf)) {
> - virBufferFreeAndReset(&buf);
> - goto no_memory;
> - }
> + if (virBufferError(&buf)) {
> + virBufferFreeAndReset(&buf);
> + goto no_memory;
> + }
>
> - ADD_ARG_LIT("-monitor");
> - ADD_ARG_LIT(virBufferContentAndReset(&buf));
> + ADD_ARG_LIT("-monitor");
> + ADD_ARG(virBufferContentAndReset(&buf));
> + }
> }
>
> if (def->localtime)
> @@ -2172,8 +2183,11 @@ int qemudBuildCommandLine(virConnectPtr conn,
> }
>
> if (!def->nnets) {
> - ADD_ARG_LIT("-net");
> - ADD_ARG_LIT("none");
> + /* If we have -device, then we set -nodefault alrady */
> + if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) {
> + ADD_ARG_LIT("-net");
> + ADD_ARG_LIT("none");
> + }
> } else {
> for (i = 0 ; i < def->nnets ; i++) {
> virDomainNetDefPtr net = def->nets[i];
> @@ -2232,15 +2246,19 @@ int qemudBuildCommandLine(virConnectPtr conn,
> }
>
> if (!def->nserials) {
> - ADD_ARG_LIT("-serial");
> - ADD_ARG_LIT("none");
> + /* If we have -device, then we set -nodefault alrady */
> + if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) {
> + ADD_ARG_LIT("-serial");
> + ADD_ARG_LIT("none");
> + }
> } else {
> for (i = 0 ; i < def->nserials ; i++) {
> virBuffer buf = VIR_BUFFER_INITIALIZER;
> virDomainChrDefPtr serial = def->serials[i];
>
> - /* Use -chardev if it's available */
> - if (qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) {
> + /* Use -chardev with -device if they are available */
> + if ((qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) &&
> + (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) {
> char id[16];
>
> if (snprintf(id, sizeof(id), "serial%i", i) > sizeof(id))
> @@ -2255,13 +2273,13 @@ int qemudBuildCommandLine(virConnectPtr conn,
> ADD_ARG_LIT("-chardev");
> ADD_ARG(virBufferContentAndReset(&buf));
>
> - virBufferVSprintf(&buf, "chardev:%s", id);
> + virBufferVSprintf(&buf, "isa-serial,chardev=%s", id);
> if (virBufferError(&buf)) {
> virBufferFreeAndReset(&buf);
> goto no_memory;
> }
>
> - ADD_ARG_LIT("-serial");
> + ADD_ARG_LIT("-device");
> ADD_ARG(virBufferContentAndReset(&buf));
> }
>
> @@ -2279,15 +2297,19 @@ int qemudBuildCommandLine(virConnectPtr conn,
> }
>
> if (!def->nparallels) {
> - ADD_ARG_LIT("-parallel");
> - ADD_ARG_LIT("none");
> + /* If we have -device, then we set -nodefault alrady */
> + if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) {
> + ADD_ARG_LIT("-parallel");
> + ADD_ARG_LIT("none");
> + }
> } else {
> for (i = 0 ; i < def->nparallels ; i++) {
> virBuffer buf = VIR_BUFFER_INITIALIZER;
> virDomainChrDefPtr parallel = def->parallels[i];
>
> - /* Use -chardev if it's available */
> - if (qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) {
> + /* Use -chardev with -device if they are available */
> + if ((qemuCmdFlags & QEMUD_CMD_FLAG_CHARDEV) &&
> + (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) {
> char id[16];
>
> if (snprintf(id, sizeof(id), "parallel%i", i) > sizeof(id))
> @@ -2302,13 +2324,13 @@ int qemudBuildCommandLine(virConnectPtr conn,
> ADD_ARG_LIT("-chardev");
> ADD_ARG(virBufferContentAndReset(&buf));
>
> - virBufferVSprintf(&buf, "chardev:%s", id);
> + virBufferVSprintf(&buf, "isa-parallel,chardev=%s", id);
> if (virBufferError(&buf)) {
> virBufferFreeAndReset(&buf);
> goto no_memory;
> }
>
> - ADD_ARG_LIT("-parallel");
> + ADD_ARG_LIT("-device");
> ADD_ARG(virBufferContentAndReset(&buf));
> }
>
> diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
> index cd59d4c..840b749 100644
> --- a/src/qemu/qemu_conf.h
> +++ b/src/qemu/qemu_conf.h
> @@ -76,6 +76,7 @@ enum qemud_cmd_flags {
> QEMUD_CMD_FLAG_ENABLE_KVM = (1 << 23), /* Is the -enable-kvm flag available to "enable KVM full virtualization support" */
> QEMUD_CMD_FLAG_0_12 = (1 << 24),
> QEMUD_CMD_FLAG_MONITOR_JSON = QEMUD_CMD_FLAG_0_12, /* JSON mode for monitor */
> + QEMUD_CMD_FLAG_DEVICE = (1 << 25), /* Is the new -chardev arg available */
> };
>
> /* Main driver state */
I'm starting to worry about exhausting the enum size ... we are
getting close, and something allowing for the continuous expansion of
QEmu options will be needed soon !
ACK
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list