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(a)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 :|