Commit e633b7bc authored by Pierre Ossman's avatar Pierre Ossman

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: default avatarPierre Ossman <drzeus@drzeus.cx>
parent 04cf585d
...@@ -5,6 +5,8 @@ ...@@ -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) ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment