sdio: make sleep on error interruptable
Make sure we can be woken from the forced sleep that is done on errors. Removing a card often results in -ENOMEDIUM or -EILSEQ so we previously locked up the removal process for a second. We could completely exit on -ENOMEDIUM, but it might be a transient glitch so treat it like any other error. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
This commit is contained in:
parent
04cf585d29
commit
e633b7bcec
|
@ -5,6 +5,8 @@
|
||||||
* Created: June 18, 2007
|
* Created: June 18, 2007
|
||||||
* Copyright: MontaVista Software Inc.
|
* Copyright: MontaVista Software Inc.
|
||||||
*
|
*
|
||||||
|
* Copyright 2008 Pierre Ossman
|
||||||
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or (at
|
* the Free Software Foundation; either version 2 of the License, or (at
|
||||||
|
@ -107,11 +109,14 @@ static int sdio_irq_thread(void *_host)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Give other threads a chance to run in the presence of
|
* Give other threads a chance to run in the presence of
|
||||||
* errors. FIXME: determine if due to card removal and
|
* errors.
|
||||||
* possibly exit this thread if so.
|
|
||||||
*/
|
*/
|
||||||
if (ret < 0)
|
if (ret < 0) {
|
||||||
ssleep(1);
|
set_current_state(TASK_INTERRUPTIBLE);
|
||||||
|
if (!kthread_should_stop())
|
||||||
|
schedule_timeout(HZ);
|
||||||
|
set_current_state(TASK_RUNNING);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Adaptive polling frequency based on the assumption
|
* Adaptive polling frequency based on the assumption
|
||||||
|
|
Loading…
Reference in New Issue