On Thu, 30 Aug 2018, subhra mazumdar wrote: > > +void pipe_busy_wait(struct pipe_inode_info *pipe) > +{ > + 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();
You are not really serious about busy looping with preemption disabled? 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