Hi Alex,
I think I have found the bug that causes the strange behaviour you are
describing, but I have no way to be sure because I cannot test it on a
ia64 machine.
Could you please try the patch I am attaching (to be applied on top of
the other one)?
Best Regards,
Stefano Stabellini
Alex Williamson wrote:
On Wed, 2008-03-19 at 17:24 +0000, Stefano Stabellini wrote:
Hi all,
the patch I am attaching enables buffer sharing for vnc when the
linesize != width * depth.
Hi Stefano,
I'm seeing some odd issues with this on ia64, see the attached
screenshot. I'm using VNC, not SDL, and have specified opengl=0 in my
domain config file. The left side of the screen is wrapped around
overtop of the right side of the screen. The copy on the left side is
not updated unless I change the resolution the guest is running or force
the VNC client to manually refresh. Updates are normal on the copy on
the right side of the screen. Any ideas? Thanks,
diff -r 491a3b62ae5b tools/ioemu/vnc.c
--- a/tools/ioemu/vnc.c Thu Mar 20 17:48:02 2008 +0000
+++ b/tools/ioemu/vnc.c Thu Mar 20 18:03:52 2008 +0000
@@ -370,16 +370,20 @@ static void vnc_dpy_resize(DisplayState
int o;
if (!ds->shared_buf) {
+ ds->linesize = w * vs->depth;
if (allocated)
- ds->data = realloc(ds->data, h * linesize);
+ ds->data = realloc(ds->data, h * ds->linesize);
else
- ds->data = malloc(h * linesize);
+ ds->data = malloc(h * ds->linesize);
allocated = 1;
- } else if (allocated) {
- free(ds->data);
- allocated = 0;
- }
- vs->old_data = realloc(vs->old_data, h * linesize);
+ } else {
+ ds->linesize = linesize;
+ if (allocated) {
+ free(ds->data);
+ allocated = 0;
+ }
+ }
+ vs->old_data = realloc(vs->old_data, h * ds->linesize);
vs->dirty_row = realloc(vs->dirty_row, h * sizeof(vs->dirty_row[0]));
vs->update_row = realloc(vs->update_row, h * sizeof(vs->dirty_row[0]));
@@ -396,7 +400,6 @@ static void vnc_dpy_resize(DisplayState
size_changed = ds->width != w || ds->height != h;
ds->width = w;
ds->height = h;
- ds->linesize = linesize;
if (vs->csock != -1 && vs->has_resize && size_changed) {
vs->width = ds->width;
vs->height = ds->height;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|