Hi , __wait_event_interruptible is defined in include/linux/wait.h as : #define __wait_event_interruptible(wq, condition, ret) \ do { \ DEFINE_WAIT(__wait); \ \ for (;;) { \ prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ if (condition) \ break; \ if (!signal_pending(current)) { \ schedule(); \ continue; \ } \ ret = -ERESTARTSYS; \ break; \ } \ finish_wait(&wq, &__wait); \ } while (0) here , can i be guided why in every for loop iteration , we need to call prepare_to_wait ? instead why not prepare_to_wait() be used once only like finish_wait() above and after schedule() call returns , set the current state = TASK_INTERRUPTIBLE (before continue statement ) something like below : #define __wait_event_interruptible(wq, condition, ret) \ do { \ DEFINE_WAIT(__wait); \ prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ \ for (;;) { \ if (condition) \ break; \ if (!signal_pending(current)) { \ schedule(); \ set_current_state(TASK_INTERRUPTIBLE) \ continue; \ } \ ret = -ERESTARTSYS; \ break; \ } \ finish_wait(&wq, &__wait); \ } while (0) kindly share facts related to above . Regards Amit Nagal _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies