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

Daniel Veillard veillard at redhat.com
Wed May 6 16:08:39 UTC 2009


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 at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/
-------------- next part --------------
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;
     }
 


More information about the libvir-list mailing list