title: what is the difference between simple sleeping (using wait_event_*() functions) and advanced sleeping (using prepare_to_wait() function)?
body: <p>In LDD3 book, it introduces simple sleeping(wait_event*() functions) and advance sleeping(prepare_to_wait() function). </p>
  
  <p>If my understanding is correct, wait_queue_t seems to be a process entry but wait_queue_head_t seems to be the wait queue to store the list of processes which (wait_queue_t) are being added to..</p>
  
  <p>So, it comes my confusion that what situation I should use wait_event_*() functions versus prepare_to_wait with specifying the wait process. </p>
  
  <p>The only reason I can tell is that I can specify the process state before sleeping versus the simple sleeping. However, simple sleeping does offer the interruptible and uninterruptible wait_event functions.. </p>
  
  <p>So, I am a bit confused why we need both two from both design and implementation points of view. Thanks.</p>