The PVFB frontend can get confused and send a screen update to the
backend when the screen is actually clean. Such an update asks for
the impossible rectangle (x1, x2, y1, y2) = (INT_MAX, 0, INT_MAX, 0).
Fix by setting the dirty flag in the obvious place: when the dirty
rectangle is grown.
Signed-off-by: Markus Armbruster <armbru@xxxxxxxxxx>
diff -r cf8b6cafa2f0 drivers/xen/fbfront/xenfb.c
--- a/drivers/xen/fbfront/xenfb.c Thu Nov 08 18:26:08 2007 +0000
+++ b/drivers/xen/fbfront/xenfb.c Tue Nov 13 17:32:48 2007 +0100
@@ -201,6 +201,11 @@ static void xenfb_update_screen(struct x
mutex_unlock(&info->mm_lock);
+ if (x2 < x1 || y2 < y1) {
+ printk("xenfb_update_screen bogus rect %d %d %d %d\n",
+ x1, x2, y1, y2);
+ WARN_ON(1);
+ }
xenfb_do_update(info, x1, y1, x2 - x1, y2 - y1);
}
@@ -252,7 +257,6 @@ static void xenfb_timer(unsigned long da
static void xenfb_timer(unsigned long data)
{
struct xenfb_info *info = (struct xenfb_info *)data;
- info->dirty = 1;
wake_up(&info->wq);
}
@@ -272,6 +276,7 @@ static void __xenfb_refresh(struct xenfb
info->x1 = x1;
if (info->x2 < x2)
info->x2 = x2;
+ info->dirty = 1;
if (timer_pending(&info->refresh))
return;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|