mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-20 03:04:01 +08:00
[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@gmx.ch> Cc: Dominik Brodowski <linux@brodo.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
b3743fa444
commit
bf4de6f2db
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user