[libvirt] [PATCH 2/2] support for multiple graphics devices

Hi All, I have added support for multiple graphics devices, the patches are as below. I have checked them against current cvs head and works fine PATCH 1/2: contains changes in libvirt for multiple graphics devices PATCH 2/2: contains corresponding changes in qemu driver. Regards, Pritesh

On Thu, Apr 30, 2009 at 11:28:31AM +0200, Pritesh Kothari wrote:
Hi All,
I have added support for multiple graphics devices, the patches are as below. I have checked them against current cvs head and works fine
ACK, also looks fine.
diff --git a/src/qemu_conf.c b/src/qemu_conf.c index 64415ec..07c7c44 100644 --- a/src/qemu_conf.c +++ b/src/qemu_conf.c @@ -1348,21 +1348,21 @@ int qemudBuildCommandLine(virConnectPtr conn, } }
- if (def->graphics && - def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) { + if ((def->ngraphics == 1) && + def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) { virBuffer opt = VIR_BUFFER_INITIALIZER; char *optstr;
if (qemuCmdFlags & QEMUD_CMD_FLAG_VNC_COLON) { - if (def->graphics->data.vnc.listenAddr) - virBufferAdd(&opt, def->graphics->data.vnc.listenAddr, -1); + if (def->graphics[0]->data.vnc.listenAddr) + virBufferAdd(&opt, def->graphics[0]->data.vnc.listenAddr, -1); else if (driver->vncListen) virBufferAdd(&opt, driver->vncListen, -1);
virBufferVSprintf(&opt, ":%d", - def->graphics->data.vnc.port - 5900); + def->graphics[0]->data.vnc.port - 5900);
- if (def->graphics->data.vnc.passwd || + if (def->graphics[0]->data.vnc.passwd || driver->vncPassword) virBufferAddLit(&opt, ",password");
@@ -1387,7 +1387,7 @@ int qemudBuildCommandLine(virConnectPtr conn, } } else { virBufferVSprintf(&opt, "%d", - def->graphics->data.vnc.port - 5900); + def->graphics[0]->data.vnc.port - 5900); } if (virBufferError(&opt)) goto no_memory; @@ -1396,22 +1396,22 @@ int qemudBuildCommandLine(virConnectPtr conn,
ADD_ARG_LIT("-vnc"); ADD_ARG(optstr); - if (def->graphics->data.vnc.keymap) { + if (def->graphics[0]->data.vnc.keymap) { ADD_ARG_LIT("-k"); - ADD_ARG_LIT(def->graphics->data.vnc.keymap); + ADD_ARG_LIT(def->graphics[0]->data.vnc.keymap); } - } else if (def->graphics && - def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { + } else if ((def->ngraphics == 1) && + def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { char *xauth = NULL; char *display = NULL;
- if (def->graphics->data.sdl.xauth && + if (def->graphics[0]->data.sdl.xauth && virAsprintf(&xauth, "XAUTHORITY=%s", - def->graphics->data.sdl.xauth) < 0) + def->graphics[0]->data.sdl.xauth) < 0) goto no_memory; - if (def->graphics->data.sdl.display && + if (def->graphics[0]->data.sdl.display && virAsprintf(&display, "DISPLAY=%s", - def->graphics->data.sdl.display) < 0) { + def->graphics[0]->data.sdl.display) < 0) { VIR_FREE(xauth); goto no_memory; } @@ -1420,7 +1420,7 @@ int qemudBuildCommandLine(virConnectPtr conn, ADD_ENV(xauth); if (display) ADD_ENV(display); - if (def->graphics->data.sdl.fullscreen) + if (def->graphics[0]->data.sdl.fullscreen) ADD_ARG_LIT("-full-screen"); }
diff --git a/src/qemu_driver.c b/src/qemu_driver.c index f9fe2ba..1da4a61 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -1140,13 +1140,13 @@ qemudInitPasswords(virConnectPtr conn, * for that yet... */
- if (vm->def->graphics && - vm->def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && - (vm->def->graphics->data.vnc.passwd || driver->vncPassword)) { + if ((vm->def->ngraphics == 1) && + vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && + (vm->def->graphics[0]->data.vnc.passwd || driver->vncPassword)) {
if (qemudMonitorCommandExtra(vm, "change vnc password", - vm->def->graphics->data.vnc.passwd ? - vm->def->graphics->data.vnc.passwd : + vm->def->graphics[0]->data.vnc.passwd ? + vm->def->graphics[0]->data.vnc.passwd : driver->vncPassword, QEMU_PASSWD_PROMPT, &info) < 0) { @@ -1338,16 +1338,16 @@ static int qemudStartVMDaemon(virConnectPtr conn, driver->securityDriver->domainGenSecurityLabel(conn, vm) < 0) return -1;
- if (vm->def->graphics && - vm->def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && - vm->def->graphics->data.vnc.autoport) { + if ((vm->def->ngraphics == 1) && + vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && + vm->def->graphics[0]->data.vnc.autoport) { int port = qemudNextFreeVNCPort(driver); if (port < 0) { qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, "%s", _("Unable to find an unused VNC port")); goto cleanup; } - vm->def->graphics->data.vnc.port = port; + vm->def->graphics[0]->data.vnc.port = port; }
if (virFileMakePath(driver->logDir) < 0) { @@ -1504,10 +1504,10 @@ cleanup: VIR_FREE(vm->def->seclabel.label); VIR_FREE(vm->def->seclabel.imagelabel); } - if (vm->def->graphics && - vm->def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && - vm->def->graphics->data.vnc.autoport) - vm->def->graphics->data.vnc.port = -1; + if ((vm->def->ngraphics == 1) && + vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && + vm->def->graphics[0]->data.vnc.autoport) + vm->def->graphics[0]->data.vnc.port = -1; if (vm->logfile != -1) { close(vm->logfile); vm->logfile = -1;
-- Libvir-list mailing list Libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
-- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

On Thu, Apr 30, 2009 at 11:28:31AM +0200, Pritesh Kothari wrote:
Hi All,
I have added support for multiple graphics devices, the patches are as below. I have checked them against current cvs head and works fine
PATCH 1/2: contains changes in libvirt for multiple graphics devices PATCH 2/2: contains corresponding changes in qemu driver.
Okay, both patches looks sane, but can't be applied until the Xen drivers are updated too, patch enclosed, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/

On Wednesday 06 May 2009 18:08:39 you wrote:
On Thu, Apr 30, 2009 at 11:28:31AM +0200, Pritesh Kothari wrote:
Hi All,
I have added support for multiple graphics devices, the patches are as below. I have checked them against current cvs head and works fine
PATCH 1/2: contains changes in libvirt for multiple graphics devices PATCH 2/2: contains corresponding changes in qemu driver.
Okay, both patches looks sane, but can't be applied until the Xen drivers are updated too, patch enclosed,
patch seems fine, ACK. Regards, Pritesh

On Wed, May 06, 2009 at 06:08:39PM +0200, Daniel Veillard wrote:
On Thu, Apr 30, 2009 at 11:28:31AM +0200, Pritesh Kothari wrote:
Hi All,
I have added support for multiple graphics devices, the patches are as below. I have checked them against current cvs head and works fine
PATCH 1/2: contains changes in libvirt for multiple graphics devices PATCH 2/2: contains corresponding changes in qemu driver.
Okay, both patches looks sane, but can't be applied until the Xen drivers are updated too, patch enclosed,
ACK, xen changes look fine. Daniel
Index: src/xm_internal.c =================================================================== RCS file: /data/cvs/libxen/src/xm_internal.c,v retrieving revision 1.125 diff -u -r1.125 xm_internal.c --- src/xm_internal.c 24 Apr 2009 12:17:50 -0000 1.125 +++ src/xm_internal.c 6 May 2009 16:07:11 -0000 @@ -1257,7 +1257,10 @@ if (xenXMConfigCopyStringOpt(conn, conf, "keymap", &graphics->data.vnc.keymap) < 0) goto cleanup;
- def->graphics = graphics; + if (VIR_ALLOC_N(def->graphics, 1) < 0) + goto no_memory; + def->graphics[0] = graphics; + def->ngraphics = 1; graphics = NULL; } else { if (xenXMConfigGetBool(conn, conf, "sdl", &val, 0) < 0) @@ -1270,7 +1273,10 @@ goto cleanup; if (xenXMConfigCopyStringOpt(conn, conf, "xauthority", &graphics->data.sdl.xauth) < 0) goto cleanup; - def->graphics = graphics; + if (VIR_ALLOC_N(def->graphics, 1) < 0) + goto no_memory; + def->graphics[0] = graphics; + def->ngraphics = 1; graphics = NULL; } } @@ -1339,7 +1345,10 @@ nextkey++; key = nextkey; } - def->graphics = graphics; + if (VIR_ALLOC_N(def->graphics, 1) < 0) + goto no_memory; + def->graphics[0] = graphics; + def->ngraphics = 1; graphics = NULL; } } @@ -2305,20 +2314,20 @@ } }
- if (def->graphics) { + if (def->ngraphics == 1) { if (priv->xendConfigVersion < (hvm ? 4 : XEND_CONFIG_MIN_VERS_PVFB_NEWCONF)) { - if (def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { + if (def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { if (xenXMConfigSetInt(conf, "sdl", 1) < 0) goto no_memory; if (xenXMConfigSetInt(conf, "vnc", 0) < 0) goto no_memory; - if (def->graphics->data.sdl.display && + if (def->graphics[0]->data.sdl.display && xenXMConfigSetString(conf, "display", - def->graphics->data.sdl.display) < 0) + def->graphics[0]->data.sdl.display) < 0) goto no_memory; - if (def->graphics->data.sdl.xauth && + if (def->graphics[0]->data.sdl.xauth && xenXMConfigSetString(conf, "xauthority", - def->graphics->data.sdl.xauth) < 0) + def->graphics[0]->data.sdl.xauth) < 0) goto no_memory; } else { if (xenXMConfigSetInt(conf, "sdl", 0) < 0) @@ -2326,53 +2335,53 @@ if (xenXMConfigSetInt(conf, "vnc", 1) < 0) goto no_memory; if (xenXMConfigSetInt(conf, "vncunused", - def->graphics->data.vnc.autoport ? 1 : 0) < 0) + def->graphics[0]->data.vnc.autoport ? 1 : 0) < 0) goto no_memory; - if (!def->graphics->data.vnc.autoport && + if (!def->graphics[0]->data.vnc.autoport && xenXMConfigSetInt(conf, "vncdisplay", - def->graphics->data.vnc.port - 5900) < 0) + def->graphics[0]->data.vnc.port - 5900) < 0) goto no_memory; - if (def->graphics->data.vnc.listenAddr && + if (def->graphics[0]->data.vnc.listenAddr && xenXMConfigSetString(conf, "vnclisten", - def->graphics->data.vnc.listenAddr) < 0) + def->graphics[0]->data.vnc.listenAddr) < 0) goto no_memory; - if (def->graphics->data.vnc.passwd && + if (def->graphics[0]->data.vnc.passwd && xenXMConfigSetString(conf, "vncpasswd", - def->graphics->data.vnc.passwd) < 0) + def->graphics[0]->data.vnc.passwd) < 0) goto no_memory; - if (def->graphics->data.vnc.keymap && + if (def->graphics[0]->data.vnc.keymap && xenXMConfigSetString(conf, "keymap", - def->graphics->data.vnc.keymap) < 0) + def->graphics[0]->data.vnc.keymap) < 0) goto no_memory; } } else { virConfValuePtr vfb, disp; char *vfbstr = NULL; virBuffer buf = VIR_BUFFER_INITIALIZER; - if (def->graphics->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { + if (def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { virBufferAddLit(&buf, "type=sdl"); - if (def->graphics->data.sdl.display) + if (def->graphics[0]->data.sdl.display) virBufferVSprintf(&buf, ",display=%s", - def->graphics->data.sdl.display); - if (def->graphics->data.sdl.xauth) + def->graphics[0]->data.sdl.display); + if (def->graphics[0]->data.sdl.xauth) virBufferVSprintf(&buf, ",xauthority=%s", - def->graphics->data.sdl.xauth); + def->graphics[0]->data.sdl.xauth); } else { virBufferAddLit(&buf, "type=vnc"); virBufferVSprintf(&buf, ",vncunused=%d", - def->graphics->data.vnc.autoport ? 1 : 0); - if (!def->graphics->data.vnc.autoport) + def->graphics[0]->data.vnc.autoport ? 1 : 0); + if (!def->graphics[0]->data.vnc.autoport) virBufferVSprintf(&buf, ",vncdisplay=%d", - def->graphics->data.vnc.port - 5900); - if (def->graphics->data.vnc.listenAddr) + def->graphics[0]->data.vnc.port - 5900); + if (def->graphics[0]->data.vnc.listenAddr) virBufferVSprintf(&buf, ",vnclisten=%s", - def->graphics->data.vnc.listenAddr); - if (def->graphics->data.vnc.passwd) + def->graphics[0]->data.vnc.listenAddr); + if (def->graphics[0]->data.vnc.passwd) virBufferVSprintf(&buf, ",vncpasswd=%s", - def->graphics->data.vnc.passwd); - if (def->graphics->data.vnc.keymap) + def->graphics[0]->data.vnc.passwd); + if (def->graphics[0]->data.vnc.keymap) virBufferVSprintf(&buf, ",keymap=%s", - def->graphics->data.vnc.keymap); + def->graphics[0]->data.vnc.keymap); } if (virBufferError(&buf)) goto no_memory; Index: src/xend_internal.c =================================================================== RCS file: /data/cvs/libxen/src/xend_internal.c,v retrieving revision 1.260 diff -u -r1.260 xend_internal.c --- src/xend_internal.c 24 Apr 2009 12:17:50 -0000 1.260 +++ src/xend_internal.c 6 May 2009 16:07:11 -0000 @@ -2023,7 +2023,11 @@ !(graphics->data.vnc.keymap = strdup(keymap))) goto no_memory;
- def->graphics = graphics; + if (VIR_ALLOC_N(def->graphics, 1) < 0) + goto no_memory; + def->graphics[0] = graphics; + def->ngraphics = 1; + graphics = NULL; } else if ((tmp = sexpr_fmt_node(root, "domain/image/%s/sdl", hvm ? "hvm" : "linux")) && tmp[0] == '1') { /* Graphics device (HVM, or old (pre-3.0.4) style PV sdl config) */ @@ -2041,7 +2045,11 @@ !(graphics->data.sdl.xauth = strdup(xauth))) goto no_memory;
- def->graphics = graphics; + if (VIR_ALLOC_N(def->graphics, 1) < 0) + goto no_memory; + def->graphics[0] = graphics; + def->ngraphics = 1; + graphics = NULL; }
return 0; @@ -2130,7 +2138,11 @@ goto no_memory; }
- def->graphics = graphics; + if (VIR_ALLOC_N(def->graphics, 1) < 0) + goto no_memory; + def->graphics[0] = graphics; + def->ngraphics = 1; + graphics = NULL; break; } } @@ -2447,7 +2459,7 @@ goto error;
/* Graphics device (HVM <= 3.0.4, or PV <= 3.0.3) vnc config */ - if (!def->graphics && + if ((def->ngraphics == 0) && xenDaemonParseSxprGraphicsOld(conn, def, root, hvm, xendConfigVersion) < 0) goto error;
@@ -5731,8 +5743,9 @@ /* PV graphics for xen <= 3.0.4, or HVM graphics for xen <= 3.1.0 */ if ((!hvm && xendConfigVersion < XEND_CONFIG_MIN_VERS_PVFB_NEWCONF) || (hvm && xendConfigVersion < 4)) { - if (def->graphics && - xenDaemonFormatSxprGraphicsOld(conn, def->graphics, &buf, xendConfigVersion) < 0) + if ((def->ngraphics == 1) && + xenDaemonFormatSxprGraphicsOld(conn, def->graphics[0], + &buf, xendConfigVersion) < 0) goto error; }
@@ -5756,8 +5769,8 @@ * or HVM graphics config xen >= 3.0.5 */ if ((xendConfigVersion >= XEND_CONFIG_MIN_VERS_PVFB_NEWCONF && !hvm) || (xendConfigVersion >= 4 && hvm)) { - if (def->graphics && - xenDaemonFormatSxprGraphicsNew(conn, def->graphics, &buf) < 0) + if ((def->ngraphics == 1) && + xenDaemonFormatSxprGraphicsNew(conn, def->graphics[0], &buf) < 0) goto error; }
-- Libvir-list mailing list Libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
-- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

On Wed, May 06, 2009 at 07:33:34PM +0100, Daniel P. Berrange wrote:
On Wed, May 06, 2009 at 06:08:39PM +0200, Daniel Veillard wrote:
On Thu, Apr 30, 2009 at 11:28:31AM +0200, Pritesh Kothari wrote:
Hi All,
I have added support for multiple graphics devices, the patches are as below. I have checked them against current cvs head and works fine
PATCH 1/2: contains changes in libvirt for multiple graphics devices PATCH 2/2: contains corresponding changes in qemu driver.
Okay, both patches looks sane, but can't be applied until the Xen drivers are updated too, patch enclosed,
ACK, xen changes look fine.
Okay, all 3 patches commited now, thanks ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/
participants (3)
-
Daniel P. Berrange
-
Daniel Veillard
-
Pritesh Kothari