
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 :|