This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


[Xen-devel] [PATCH] [PV Xen] Mouse stuck after save/restore of guest.

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] [PV Xen] Mouse stuck after save/restore of guest.
From: Igor Mammedov <imammedo@xxxxxxxxxx>
Date: Thu, 14 Apr 2011 17:45:07 +0200
Delivery-date: Thu, 14 Apr 2011 08:46:02 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
    Mouse stuck after restore of PV guest but buttons are
    in working condition.
    If driver has been configured for ABS coordinates at
    start it will get XENKBD_TYPE_POS events and then
    suddenly after restore it'll start getting
    XENKBD_TYPE_MOTION events, that will be dropped later
    and they won't get into user-space.

    Regression was introduced by hunk 5 and 6 of 5ea5254
    in upstream.

    Driver on restore should ask xen for request-abs-pointer
    again if it's available. So restore parts that did it 
    before 5ea5254.
 drivers/input/xen-kbdfront.c |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/drivers/input/xen-kbdfront.c b/drivers/input/xen-kbdfront.c
index 53e6273..71e2fc5 100644
--- a/drivers/input/xen-kbdfront.c
+++ b/drivers/input/xen-kbdfront.c
@@ -286,7 +286,7 @@ static void xenkbd_backend_changed(struct xenbus_device 
                                   enum xenbus_state backend_state)
        struct xenkbd_info *info = dev_get_drvdata(&dev->dev);
-       int val;
+       int ret, val;
        switch (backend_state) {
        case XenbusStateInitialising:
@@ -299,6 +299,18 @@ static void xenkbd_backend_changed(struct xenbus_device 
        case XenbusStateInitWait:
+               ret = xenbus_scanf(XBT_NIL, info->xbdev->otherend,
+                                   "feature-abs-pointer", "%d", &val);
+                if (ret < 0)
+                        val = 0;
+                if (val) {
+                        ret = xenbus_printf(XBT_NIL, info->xbdev->nodename,
+                                            "request-abs-pointer", "1");
+                        if (ret)
+                                printk(KERN_WARNING
+                                       "xenkbd: can't request abs-pointer");
+                }
                xenbus_switch_state(dev, XenbusStateConnected);

Xen-devel mailing list