+++ /dev/null
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg?rev/c9783c08495c
-# HG changeset 781+783+788+789 patch
-# User Keir Fraser <keir.fraser@citrix.com>
-# Date 1233150093 0
-# Node ID c9783c08495c56337dec371582b3f948e3b5ed8d
-# Parent 83b71f4b5cb216d09856391d8616ee2cb6525c73
-Subject: xenfb: fix xenfb_update_screen bogus rect
-References: bnc#474335
-
-Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
-
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg?rev/8197c86e6729
-# HG changeset patch
-# User Keir Fraser <keir.fraser@citrix.com>
-# Date 1233228538 0
-# Node ID 8197c86e67294835c9d90540cf776c373664c3ef
-# Parent 51decc39e5e73ea201d0b96108f8a893106a6864
-xenfb: eliminate the update_wanted field.
-
-Signed-off-by: Akio Takebe <takebe_akio@jp.fujitsu.com>
-
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg?rev/26ddc59c674d
-# HG changeset patch
-# User Keir Fraser <keir.fraser@citrix.com>
-# Date 1233312850 0
-# Node ID 26ddc59c674df460cb36651ffe58bf30e46b1638
-# Parent 98897f04b338f08686eba199d6234a95cf0939f1
-xenfb: Revert mm_lock changes. They're not needed.
-Signed-off-by: Akio Takebe <takebe_akio@jp.fujitsu.com>
-
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg?rev/25cc543a02e8
-# HG changeset patch
-# User Keir Fraser <keir.fraser@citrix.com>
-# Date 1233669557 0
-# Node ID 25cc543a02e88c090d117ee362ad006d1930f47b
-# Parent 26ddc59c674df460cb36651ffe58bf30e46b1638
-fbfront: Improve diagnostics when kthread_run() fails
-
-Failure is reported with xenbus_dev_fatal(..."register_framebuffer"),
-which was already suboptimal before it got moved away from
-register_framebuffer(), and is outright misleading now.
-
-Signed-off-by: Markus Armbruster <armbru@redhat.com>
-
-Acked-by: jbeulich@novell.com
-
---- sle11-2009-02-16.orig/drivers/xen/fbfront/xenfb.c 2009-02-16 15:55:51.000000000 +0100
-+++ sle11-2009-02-16/drivers/xen/fbfront/xenfb.c 2009-02-16 15:59:55.000000000 +0100
-@@ -61,7 +61,6 @@ struct xenfb_info
- int irq;
- struct xenfb_page *page;
- unsigned long *mfns;
-- int update_wanted; /* XENFB_TYPE_UPDATE wanted */
- int feature_resize; /* Backend has resize feature */
- struct xenfb_resize resize;
- int resize_dpy;
-@@ -208,20 +207,25 @@ static void xenfb_update_screen(struct x
- int y1, y2, x1, x2;
- struct xenfb_mapping *map;
-
-- if (!info->update_wanted)
-- return;
- if (xenfb_queue_full(info))
- return;
-
- mutex_lock(&info->mm_lock);
-
- spin_lock_irqsave(&info->dirty_lock, flags);
-- y1 = info->y1;
-- y2 = info->y2;
-- x1 = info->x1;
-- x2 = info->x2;
-- info->x1 = info->y1 = INT_MAX;
-- info->x2 = info->y2 = 0;
-+ if (info->dirty){
-+ info->dirty = 0;
-+ y1 = info->y1;
-+ y2 = info->y2;
-+ x1 = info->x1;
-+ x2 = info->x2;
-+ info->x1 = info->y1 = INT_MAX;
-+ info->x2 = info->y2 = 0;
-+ } else {
-+ spin_unlock_irqrestore(&info->dirty_lock, flags);
-+ mutex_unlock(&info->mm_lock);
-+ return;
-+ }
- spin_unlock_irqrestore(&info->dirty_lock, flags);
-
- list_for_each_entry(map, &info->mappings, link) {
-@@ -262,10 +266,7 @@ static int xenfb_thread(void *data)
-
- while (!kthread_should_stop()) {
- xenfb_handle_resize_dpy(info);
-- if (info->dirty) {
-- info->dirty = 0;
-- xenfb_update_screen(info);
-- }
-+ xenfb_update_screen(info);
- wait_event_interruptible(info->wq,
- kthread_should_stop() || info->dirty);
- try_to_freeze();
-@@ -666,15 +667,6 @@ static int __devinit xenfb_probe(struct
- if (ret < 0)
- goto error;
-
-- /* FIXME should this be delayed until backend XenbusStateConnected? */
-- info->kthread = kthread_run(xenfb_thread, info, "xenfb thread");
-- if (IS_ERR(info->kthread)) {
-- ret = PTR_ERR(info->kthread);
-- info->kthread = NULL;
-- xenbus_dev_fatal(dev, ret, "register_framebuffer");
-- goto error;
-- }
--
- return 0;
-
- error_nomem:
-@@ -829,16 +821,25 @@ static void xenfb_backend_changed(struct
- if (dev->state != XenbusStateConnected)
- goto InitWait; /* no InitWait seen yet, fudge it */
-
-- if (xenbus_scanf(XBT_NIL, info->xbdev->otherend,
-- "request-update", "%d", &val) < 0)
-- val = 0;
-- if (val)
-- info->update_wanted = 1;
-
- if (xenbus_scanf(XBT_NIL, dev->otherend,
- "feature-resize", "%d", &val) < 0)
- val = 0;
- info->feature_resize = val;
-+
-+ if (xenbus_scanf(XBT_NIL, info->xbdev->otherend,
-+ "request-update", "%d", &val) < 0)
-+ val = 0;
-+
-+ if (val){
-+ info->kthread = kthread_run(xenfb_thread, info,
-+ "xenfb thread");
-+ if (IS_ERR(info->kthread)) {
-+ info->kthread = NULL;
-+ xenbus_dev_fatal(dev, PTR_ERR(info->kthread),
-+ "xenfb_thread");
-+ }
-+ }
- break;
-
- case XenbusStateClosing: