ipw2200: Fix race condition in the command completion acknowledge
authorStanislav Yakovlev <stas.yakovlev@gmail.com>
Thu, 19 Apr 2012 19:55:09 +0000 (15:55 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 23 Apr 2012 18:57:49 +0000 (14:57 -0400)
commitdd447319895d0c0af423e483d9b63f84f3f8869a
tree21c7c322adb4b9117c89331a9e61c0e47603b601
parent8db4c7e25d153fb049e81715d72fa3be3a0c3b69
ipw2200: Fix race condition in the command completion acknowledge

Driver incorrectly validates command completion: instead of waiting
for a command to be acknowledged it continues execution.  Most of the
time driver gets acknowledge of the command completion in a tasklet
before it executes the next one. But sometimes it sends the next
command before it gets acknowledge for the previous one. In such a
case one of the following error messages appear in the log:

Failed to send SYSTEM_CONFIG: Already sending a command.
Failed to send ASSOCIATE: Already sending a command.
Failed to send TX_POWER: Already sending a command.

After that you need to reload the driver to get it working again.

This bug occurs during roaming (reported by Sam Varshavchik)
https://bugzilla.redhat.com/show_bug.cgi?id=738508
and machine booting (reported by Tom Gundersen and Mads Kiilerich)
https://bugs.archlinux.org/task/28097
https://bugzilla.redhat.com/show_bug.cgi?id=802106

This patch doesn't fix the delay issue during firmware load.
But at least device now works as usual after boot.

Cc: stable@kernel.org
Signed-off-by: Stanislav Yakovlev <stas.yakovlev@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ipw2x00/ipw2200.c