Skip to content

Commit

Permalink
Input: libps2 - better handle bad scheduler decisions
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Dmitry Torokhov committed May 28, 2009
1 parent 346a850 commit a3ce6ea
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion drivers/input/serio/libps2.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit a3ce6ea

Please sign in to comment.