aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia/cs.c
diff options
context:
space:
mode:
authorDominik Brodowski <linux@dominikbrodowski.net>2010-01-17 13:30:53 -0500
committerDominik Brodowski <linux@dominikbrodowski.net>2010-02-17 11:48:26 -0500
commitaf461fc1875b6ec18e23b5f670af36c4ed35c84e (patch)
treefa09a446c94d533c169b9e28e97c0e8c03d36912 /drivers/pcmcia/cs.c
parentf971dbd5da4e2fbf756d07b938a9c65a9c75178b (diff)
pcmcia: delay re-scanning and re-querying of PCMCIA bus
After a CIS update -- or the finalization of the resource database --, proceed with the re-scanning or re-querying of PCMCIA cards only in a separate thread to avoid deadlocks. Tested-by: Wolfram Sang <w.sang@pengutronix.de> Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Diffstat (limited to 'drivers/pcmcia/cs.c')
-rw-r--r--drivers/pcmcia/cs.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c
index 823ecda32216..d529e02c2d54 100644
--- a/drivers/pcmcia/cs.c
+++ b/drivers/pcmcia/cs.c
@@ -728,6 +728,11 @@ static int pccardd(void *__skt)
728 if (!ret) 728 if (!ret)
729 socket_suspend(skt); 729 socket_suspend(skt);
730 } 730 }
731 if ((sysfs_events & PCMCIA_UEVENT_REQUERY) &&
732 !(skt->state & SOCKET_CARDBUS)) {
733 if (!ret && skt->callback)
734 skt->callback->requery(skt);
735 }
731 } 736 }
732 mutex_unlock(&skt->skt_mutex); 737 mutex_unlock(&skt->skt_mutex);
733 738
@@ -783,7 +788,8 @@ EXPORT_SYMBOL(pcmcia_parse_events);
783 * userspace-issued insert, eject, suspend and resume commands must be 788 * userspace-issued insert, eject, suspend and resume commands must be
784 * handled by pccardd to avoid any sysfs-related deadlocks. Valid events 789 * handled by pccardd to avoid any sysfs-related deadlocks. Valid events
785 * are PCMCIA_UEVENT_EJECT (for eject), PCMCIA_UEVENT__INSERT (for insert), 790 * are PCMCIA_UEVENT_EJECT (for eject), PCMCIA_UEVENT__INSERT (for insert),
786 * PCMCIA_UEVENT_RESUME (for resume) and PCMCIA_UEVENT_SUSPEND (for suspend). 791 * PCMCIA_UEVENT_RESUME (for resume), PCMCIA_UEVENT_SUSPEND (for suspend)
792 * and PCMCIA_UEVENT_REQUERY (for re-querying the PCMCIA card).
787 */ 793 */
788void pcmcia_parse_uevents(struct pcmcia_socket *s, u_int events) 794void pcmcia_parse_uevents(struct pcmcia_socket *s, u_int events)
789{ 795{