[PATCH] pcmcia/cs: fix possible missed wakeup
Daniel Ritz
daniel.ritz at gmx.ch
Mon Aug 15 11:07:48 EDT 2005
hi andrew, dominik, andreas
the patch fixes one of the problems andreas steinmetz reported a while ago.
akmp, please queue up in -mm, andreas please test. should fix the last
testcase in your test script:
http://marc.theaimsgroup.com/?l=linux-kernel&m=112293392628128&w=4
rgds
-daniel
-------------
[PATCH] pcmcia/cs: fix possible missed wakeup
- thread_done should only be completed when the wait_queue is installed.
- all wake up conditions should be checked before schedule()
this fixes a hang of rmmod in the sequence modprobe yenta_socket; rmmod yenta_socket
as reported by Andreas Steinmetz. w/o this rmmod yenta_socket can hang on
wait_for_completion() in pcmcia_unregister_socket()
Signed-off-by: Daniel Ritz <daniel.ritz at gmx.ch>
diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c
--- a/drivers/pcmcia/cs.c
+++ b/drivers/pcmcia/cs.c
@@ -654,9 +654,10 @@ static int pccardd(void *__skt)
skt->thread = NULL;
complete_and_exit(&skt->thread_done, 0);
}
- complete(&skt->thread_done);
add_wait_queue(&skt->thread_wait, &wait);
+ complete(&skt->thread_done);
+
for (;;) {
unsigned long flags;
unsigned int events;
@@ -682,11 +683,11 @@ static int pccardd(void *__skt)
continue;
}
- schedule();
- try_to_freeze();
-
if (!skt->thread)
break;
+
+ schedule();
+ try_to_freeze();
}
remove_wait_queue(&skt->thread_wait, &wait);
More information about the linux-pcmcia
mailing list