[問題] add_wait_queue在kthread的使用方式

作者: rtt2008 (rtt)   2014-11-12 14:07:07
小弟讀到ldd3關於wait_queue的sample
ssize_t sleepy_read (struct file *filp, char _ _user *buf, size_t count,
loff_t *pos)
{
wait_event_interruptible(wq, flag != 0);
flag = 0;
return 0;
}
ssize_t sleepy_write (struct file *filp, const char _ _user *buf, size_t
count,
loff_t *pos)
{
flag = 1;
wake_up_interruptible(&wq);
return count;
}
我現在將"sleepy_read" 用kernel thread替換
每次呼叫sleepy_write就會wake_up wait_queue去讀資料
static int Mykthread(void *arg)
{
DECLARE_WAITQUEUE(wait, current);
add_wait_queue(&waitqueue, &wait);
while (1) {
set_current_state(TASK_INTERRUPTIBLE);
if (kthread_should_stop())
break;
wait_event_interruptible(waitqueue, flag != 0);
flag = 0;
schedule_timeout(10 * HZ); //sleep
set_current_state(TASK_RUNNING);
// read data
}
remove_wait_queue(&wee_wait, &wait);
return 0;
}
請問這裡add_wait_queue要放在while-loop外面還是裡面呢?
感謝各位大大回覆!

Links booklink

Contact Us: admin [ a t ] ucptt.com