diff options
author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2009-05-28 09:51:31 -0700 |
---|---|---|
committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2009-05-28 10:34:02 -0700 |
commit | a3ce6ea46cc0d6397d1b92b1a5983bb2935306ed (patch) | |
tree | 290d6ca606ad960fda685992b6a087cc6b56c1e1 | |
parent | 346a850e3c3a20159cef2b79235e6d34aa497c65 (diff) | |
download | kernel_samsung_tuna-a3ce6ea46cc0d6397d1b92b1a5983bb2935306ed.zip kernel_samsung_tuna-a3ce6ea46cc0d6397d1b92b1a5983bb2935306ed.tar.gz kernel_samsung_tuna-a3ce6ea46cc0d6397d1b92b1a5983bb2935306ed.tar.bz2 |
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>
-rw-r--r-- | drivers/input/serio/libps2.c | 2 |
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, |