On Thu, 30 Aug 2018, subhra mazumdar wrote:Makes sense. I will remove it.
+void pipe_busy_wait(struct pipe_inode_info *pipe)You are not really serious about busy looping with preemption disabled?
+{
+ unsigned long wait_flag = pipe->pipe_wait_flag;
+ unsigned long start_time = pipe_busy_loop_current_time();
+
+ pipe_unlock(pipe);
+ preempt_disable();
+ for (;;) {
+ if (pipe->pipe_wait_flag > wait_flag) {
+ preempt_enable();
+ pipe_lock(pipe);
+ return;
+ }
+ if (pipe_busy_loop_timeout(pipe, start_time))
+ break;
+ cpu_relax();
+ }
+ preempt_enable();
That's just wrong. Why do you want to block others from getting on the CPU
if there is nothing in the pipe?
There is no point in doing so, really. If the wait loop is preempted
because there is more important work to do, then it will come back and
either see new data, or leave due to wait time reached.
Thanks,
tglx