From: Andrew Morton - Fix sleep/wakeup race - Make the sleep terminate early if the interrupt happened, as appears to have been intended. Cc: Sukadev Bhattiprolu Cc: Javier Achirica Cc: Christoph Hellwig Cc: John Linville Signed-off-by: Andrew Morton --- drivers/net/wireless/airo.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff -puN drivers/net/wireless/airo.c~kthread-airoc-race-fix drivers/net/wireless/airo.c --- a/drivers/net/wireless/airo.c~kthread-airoc-race-fix +++ a/drivers/net/wireless/airo.c @@ -1733,11 +1733,11 @@ static int readBSSListRid(struct airo_in cmd.cmd=CMD_LISTBSS; if (down_interruptible(&ai->sem)) return -ERESTARTSYS; + ai->list_bss_task = current; issuecommand(ai, &cmd, &rsp); up(&ai->sem); /* Let the command take effect */ - ai->list_bss_task = current; - ssleep(3); + schedule_timeout_uninterruptible(3 * HZ); ai->list_bss_task = NULL; } rc = PC4500_readrid(ai, first ? ai->bssListFirst : ai->bssListNext, _