summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2009-05-28 09:51:31 -0700
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2009-05-28 10:34:02 -0700
commita3ce6ea46cc0d6397d1b92b1a5983bb2935306ed (patch)
tree290d6ca606ad960fda685992b6a087cc6b56c1e1 /drivers
parent346a850e3c3a20159cef2b79235e6d34aa497c65 (diff)
downloadop-kernel-dev-a3ce6ea46cc0d6397d1b92b1a5983bb2935306ed.zip
op-kernel-dev-a3ce6ea46cc0d6397d1b92b1a5983bb2935306ed.tar.gz
Input: libps2 - better handle bad scheduler decisions
Sometimes devices send us their responses in time but due to unfortunate scheduling decisions the receiving thread does not get scheduled till much later and we erroneously decide that device timed out. Work around this problem by checking whether we received the data we needed instead of checking timeout condition. Tested-by: Sitsofe Wheeler <sitsofe@yahoo.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/input/serio/libps2.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/input/serio/libps2.c b/drivers/input/serio/libps2.c
index 67248c3..be5bbbb 100644
--- a/drivers/input/serio/libps2.c
+++ b/drivers/input/serio/libps2.c
@@ -210,7 +210,7 @@ int ps2_command(struct ps2dev *ps2dev, unsigned char *param, int command)
timeout = wait_event_timeout(ps2dev->wait,
!(ps2dev->flags & PS2_FLAG_CMD1), timeout);
- if (ps2dev->cmdcnt && timeout > 0) {
+ if (ps2dev->cmdcnt && !(ps2dev->flags & PS2_FLAG_CMD1)) {
timeout = ps2_adjust_timeout(ps2dev, command, timeout);
wait_event_timeout(ps2dev->wait,
OpenPOWER on IntegriCloud