7104e2d5a8
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>
25 lines
893 B
C
25 lines
893 B
C
/*
|
|
* linux/drivers/mmc/mmc.h
|
|
*
|
|
* Copyright (C) 2003 Russell King, All Rights Reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
#ifndef _MMC_H
|
|
#define _MMC_H
|
|
/* core-internal functions */
|
|
void mmc_init_card(struct mmc_card *card, struct mmc_host *host);
|
|
int mmc_register_card(struct mmc_card *card);
|
|
void mmc_remove_card(struct mmc_card *card);
|
|
|
|
struct mmc_host *mmc_alloc_host_sysfs(int extra, struct device *dev);
|
|
int mmc_add_host_sysfs(struct mmc_host *host);
|
|
void mmc_remove_host_sysfs(struct mmc_host *host);
|
|
void mmc_free_host_sysfs(struct mmc_host *host);
|
|
|
|
int mmc_schedule_work(struct work_struct *work);
|
|
int mmc_schedule_delayed_work(struct work_struct *work, unsigned long delay);
|
|
void mmc_flush_scheduled_work(void);
|
|
#endif
|