lkml.org 
[lkml]   [2011]   [May]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[025/143] Input: xen-kbdfront - fix mouse getting stuck after save/restore
    2.6.32-longterm review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Igor Mammedov <imammedo@redhat.com>

    commit c36b58e8a9112017c2bcc322cc98e71241814303 upstream.

    Mouse gets "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
    5ea5254aa0ad269cfbd2875c973ef25ab5b5e9db
    ("Input: xen-kbdfront - advertise either absolute or relative
    coordinates").

    Driver on restore should ask xen for request-abs-pointer again if it is
    available. So restore parts that did it before 5ea5254.

    Acked-by: Olaf Hering <olaf@aepfle.de>
    Signed-off-by: Igor Mammedov <imammedo@redhat.com>
    [v1: Expanded the commit description]
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

    ---
    drivers/input/xen-kbdfront.c | 12 +++++++++++-
    1 file changed, 11 insertions(+), 1 deletion(-)

    --- a/drivers/input/xen-kbdfront.c
    +++ b/drivers/input/xen-kbdfront.c
    @@ -281,7 +281,7 @@ static void xenkbd_backend_changed(struc
    enum xenbus_state backend_state)
    {
    struct xenkbd_info *info = dev_get_drvdata(&dev->dev);
    - int val;
    + int ret, val;

    switch (backend_state) {
    case XenbusStateInitialising:
    @@ -292,6 +292,16 @@ static void xenkbd_backend_changed(struc

    case XenbusStateInitWait:
    InitWait:
    + 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)
    + pr_warning("can't request abs-pointer\n");
    + }
    xenbus_switch_state(dev, XenbusStateConnected);
    break;




    \
     
     \ /
      Last update: 2011-05-06 03:03    [W:0.020 / U:29.172 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site