[libvirt] [PATCH 2/2] support for multiple graphics devices
Daniel P. Berrange
berrange at redhat.com
Wed May 6 18:33:34 UTC 2009
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 at 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 :|
More information about the libvir-list
mailing list