diff options
author | Pierre Ossman <drzeus@drzeus.cx> | 2006-10-04 05:15:41 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-04 10:55:15 -0400 |
commit | 7104e2d5a85b4b786d6a63568beffe1e185547bb (patch) | |
tree | 1478b1076a66476a121e687dd9547d5c08d9c3ba /drivers/mmc/mmc.c | |
parent | 8a4da1430f7f2a16df3be9c7b5d55ba4e75b708c (diff) |
[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>
Diffstat (limited to 'drivers/mmc/mmc.c')
-rw-r--r-- | drivers/mmc/mmc.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 5b9caa7978d3..ee8863c123e3 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c | |||
@@ -1166,9 +1166,9 @@ static void mmc_setup(struct mmc_host *host) | |||
1166 | void mmc_detect_change(struct mmc_host *host, unsigned long delay) | 1166 | void mmc_detect_change(struct mmc_host *host, unsigned long delay) |
1167 | { | 1167 | { |
1168 | if (delay) | 1168 | if (delay) |
1169 | schedule_delayed_work(&host->detect, delay); | 1169 | mmc_schedule_delayed_work(&host->detect, delay); |
1170 | else | 1170 | else |
1171 | schedule_work(&host->detect); | 1171 | mmc_schedule_work(&host->detect); |
1172 | } | 1172 | } |
1173 | 1173 | ||
1174 | EXPORT_SYMBOL(mmc_detect_change); | 1174 | EXPORT_SYMBOL(mmc_detect_change); |
@@ -1311,7 +1311,7 @@ EXPORT_SYMBOL(mmc_remove_host); | |||
1311 | */ | 1311 | */ |
1312 | void mmc_free_host(struct mmc_host *host) | 1312 | void mmc_free_host(struct mmc_host *host) |
1313 | { | 1313 | { |
1314 | flush_scheduled_work(); | 1314 | mmc_flush_scheduled_work(); |
1315 | mmc_free_host_sysfs(host); | 1315 | mmc_free_host_sysfs(host); |
1316 | } | 1316 | } |
1317 | 1317 | ||