On Sun, Jul 03, 2005 at 11:58:54AM +0100, Deepak Joshi wrote: > > --- Deepak Joshi <deepak_cins@xxxxxxxxxxx> wrote: > > > #include <linux/module.h> > > #include <linux/kernel.h> > > #include <linux/wait.h> > > #include <linux/sched.h> > > #include <linux/list.h> > > MODULE_LICENSE("GPL"); > > > > > > > > static DECLARE_WAIT_QUEUE_HEAD (my_queue); > > int init_module(void) > > { > > struct task_struct *my_task ; > > my_task = find_task_by_pid(1477); > > DECLARE_WAITQUEUE(wait, my_task); > > my_task->state = TASK_UNINTERRUPTIBLE ; > > init_waitqueue_entry( &wait, my_task); > > add_wait_queue( &my_queue , &wait); > > sleep_on(&my_queue); > > interruptible_sleep_on(&my_queue); > > schedule( ); the last 3 calls all operate on the current process, not my_task (read the sources). Also, you are sleeping twice here and only waking up once below. > > return 0; > > } > > > > > > void cleanuo_module() > > { > > printk("Bye"); > > wake_up( &my_queue ); > > } AFAICT what you are trying to do is not really possible using waitqueues, try to look at kernel/signal.c and SIGSTOP and SIGCONT instead. bye -- mattia :wq! -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/