[PATCH] mmc: use own work queue
The MMC layer uses the standard work queue for doing card detection. As this queue is shared with other crucial subsystems, the effects of a long (and perhaps buggy) detection can cause the system to be unusable. E.g. the keyboard stops working while the detection routine is running. The solution is to add a specific mmc work queue to run the detection code in. This is similar to how other subsystems handle detection (a full kernel thread is the most common theme). Signed-off-by: Pierre Ossman <drzeus@drzeus.cx> Cc: Russell King <rmk@arm.linux.org.uk> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
8a4da1430f
commit
7104e2d5a8
@ -1166,9 +1166,9 @@ static void mmc_setup(struct mmc_host *host)
|
||||
void mmc_detect_change(struct mmc_host *host, unsigned long delay)
|
||||
{
|
||||
if (delay)
|
||||
schedule_delayed_work(&host->detect, delay);
|
||||
mmc_schedule_delayed_work(&host->detect, delay);
|
||||
else
|
||||
schedule_work(&host->detect);
|
||||
mmc_schedule_work(&host->detect);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(mmc_detect_change);
|
||||
@ -1311,7 +1311,7 @@ EXPORT_SYMBOL(mmc_remove_host);
|
||||
*/
|
||||
void mmc_free_host(struct mmc_host *host)
|
||||
{
|
||||
flush_scheduled_work();
|
||||
mmc_flush_scheduled_work();
|
||||
mmc_free_host_sysfs(host);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user