[Libvir] PATCH: Fix paravirt FB with xm driver
Daniel P. Berrange
berrange at redhat.com
Fri Aug 10 15:39:03 UTC 2007
The code for dealing with the paravirt framebuffer was missing code to deal
with an explicit vncdisplay=N setting - only working for vncunused=1. It
was also not flexible enough in processing the 2 different styles of FB
config.
Dan.
--
|=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=|
|=- Perl modules: http://search.cpan.org/~danberr/ -=|
|=- Projects: http://freshmeat.net/~danielpb/ -=|
|=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|
-------------- next part --------------
diff -rup libvirt-0.2.3.orig/src/xm_internal.c libvirt-0.2.3.new/src/xm_internal.c
--- libvirt-0.2.3.orig/src/xm_internal.c 2007-07-24 14:32:41.000000000 -0400
+++ libvirt-0.2.3.new/src/xm_internal.c 2007-08-09 12:46:58.000000000 -0400
@@ -916,7 +916,8 @@ char *xenXMDomainFormatXML(virConnectPtr
}
if (xenXMConfigGetInt(conf, "sdl", &val) == 0 && val)
sdl = 1;
- } else { /* New PV guests use this format */
+ }
+ if (!hvm && !sdl && !vnc) { /* New PV guests use this format */
list = virConfGetValue(conf, "vfb");
if (list && list->type == VIR_CONF_LIST &&
list->list && list->list->type == VIR_CONF_STRING &&
@@ -943,6 +944,8 @@ char *xenXMDomainFormatXML(virConnectPtr
sdl = 1;
} else if (!strncmp(key, "type=vnc", 8)) {
vnc = 1;
+ } else if (!strncmp(key, "vncunused=", 10)) {
+ vncunused = strtol(key+10, NULL, 10);
} else if (!strncmp(key, "vnclisten=", 10)) {
vnclisten = key + 10;
} else if (!strncmp(key, "vncpasswd=", 10)) {
@@ -950,11 +953,7 @@ char *xenXMDomainFormatXML(virConnectPtr
} else if (!strncmp(key, "keymap=", 7)) {
keymap = key + 7;
} else if (!strncmp(key, "vncdisplay=", 11)) {
- int port = strtol(key+11, NULL, 10);
- if (port == -1)
- vncunused = 1;
- else
- port = port - 5900;
+ vncdisplay = strtol(key+11, NULL, 10);
}
while (nextkey && (nextkey[0] == ',' ||
@@ -1899,11 +1917,18 @@ virConfPtr xenXMParseXMLToConfig(virConn
"cannot set the keymap parameter") < 0)
goto error;
- /* XXX vncdisplay */
- /*
- if (xenXMConfigSetIntFromXPath(conn, conf, ctxt, "vncdisplay", "string(int(/domain/devices/graphics[@type='vnc']/@vncport) - 5900))", 0, 0) < 0)
- goto error;
- */
+ obj = xmlXPathEval(BAD_CAST "string(/domain/devices/graphics[@type='vnc']/@port)", ctxt);
+ if ((obj != NULL) && (obj->type == XPATH_STRING) &&
+ (obj->stringval != NULL)) {
+ int port = strtol((const char *)obj->stringval, NULL, 10);
+ if (port != -1) {
+ char portstr[50];
+ snprintf(portstr, sizeof(portstr), "%d", port-5900);
+ if (xenXMConfigSetString(conf, "vncdisplay", portstr) < 0)
+ goto error;
+ }
+ }
+ xmlXPathFreeObject(obj);
} else {
virConfValuePtr vfb;
obj = xmlXPathEval(BAD_CAST "/domain/devices/graphics", ctxt);
More information about the libvir-list
mailing list