调用epoll的进程会在这个waitqueue上睡眠???
wait_queue_head_t poll_wait;
每个epoll也是一个文件,所以他可以被其他epoll在监测,这个poll_wait就是文件的一个waitqueue,当把这个文件添加到另一个epoll监测时,会创建一个等待结构挂载到poll_wait上。
};
每个epoll对应一个eventpoll。
至于epoll的唤醒,就拿socket文件举例,当他可用时会调用到ep_poll_callback(当文件加入到epoll的监控时,会创建等待节点然后挂载到各自的等待队列上,而这个等待节点中的wakeup是ep_poll_callback,因为在ep_ptable_queue_proc中调用了init_waitqueue_func_entry,它没用到default_wake_function(可以唤醒一个进程)),该函数前半部的功能可查百度,后半部是调用wake_up_locked(&ep->wq),当调用epoll的进程发现无可用的文件描述符时就会睡眠在ep->wq这个waitqueue,wake_up_locked(&ep->wq)会调用到default_wake_function,从而唤醒进程,至于ep_poll_safewake(&ep->poll_wait),是为了一种迭代的情况(一个epoll监测另一个epoll的情况)。
原文地址:http://blog.51cto.com/2839840/2049467