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@xxxxxxxxxx > 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 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list