mousedev_packet() incorrectly clears list->ready when called with
"tail == head - 1".  The effect is that the last mouse event from the
hardware isn't reported to user space until another hardware mouse
event arrives.  This can make the left mouse button get stuck when
tapping on a touchpad.  When this happens, the button doesn't unstick
until the next time you interact with the touchpad.

Signed-off-by: Peter Osterlund <[EMAIL PROTECTED]>
---

 linux-petero/drivers/input/mousedev.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff -puN drivers/input/mousedev.c~mousedev-ready-fix drivers/input/mousedev.c
--- linux/drivers/input/mousedev.c~mousedev-ready-fix   2005-01-30 
03:06:49.000000000 +0100
+++ linux-petero/drivers/input/mousedev.c       2005-01-30 03:06:49.000000000 
+0100
@@ -467,10 +467,10 @@ static void mousedev_packet(struct mouse
        }
 
        if (!p->dx && !p->dy && !p->dz) {
-               if (list->tail != list->head)
-                       list->tail = (list->tail + 1) % PACKET_QUEUE_LEN;
                if (list->tail == list->head)
                        list->ready = 0;
+               else
+                       list->tail = (list->tail + 1) % PACKET_QUEUE_LEN;
        }
 
        spin_unlock_irqrestore(&list->packet_lock, flags);
_

-- 
Peter Osterlund - [EMAIL PROTECTED]
http://web.telia.com/~u89404340
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to