From: Daniel Ritz init_socket() enables interrupts, and the interrupt handler does a wakeup. Let's initialise that waitqueue head before turning on the interrupts. drivers/pcmcia/cs.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff -puN drivers/pcmcia/cs.c~yenta_socket-init-fix drivers/pcmcia/cs.c --- 25/drivers/pcmcia/cs.c~yenta_socket-init-fix 2003-07-05 16:08:51.000000000 -0700 +++ 25-akpm/drivers/pcmcia/cs.c 2003-07-05 16:08:51.000000000 -0700 @@ -338,13 +338,13 @@ static int pcmcia_add_socket(struct clas socket->erase_busy.next = socket->erase_busy.prev = &socket->erase_busy; INIT_LIST_HEAD(&socket->cis_cache); spin_lock_init(&socket->lock); - - init_socket(socket); - init_completion(&socket->thread_done); init_waitqueue_head(&socket->thread_wait); init_MUTEX(&socket->skt_sem); spin_lock_init(&socket->thread_lock); + + init_socket(socket); + ret = kernel_thread(pccardd, socket, CLONE_KERNEL); if (ret < 0) return ret; _