Hi Binoy, 2016-10-25 17:08 GMT+02:00 Binoy Jayan <binoy.ja...@linaro.org>: > On 25 October 2016 at 18:13, Jack Wang <xjtu...@gmail.com> wrote: >> Hi Binoy, >> >> snip >>> >>> port->ib_dev = device; >>> port->port_num = port_num; >>> - sema_init(&port->sm_sem, 1); >>> + init_completion(&port->sm_comp); >>> + complete(&port->sm_comp); >> >> Why complete here? >> >>> mutex_init(&port->file_mutex); >>> INIT_LIST_HEAD(&port->file_list); >>> >>> -- >> KR, >> Jinpu > > > Hi Jack, > > ib_umad_sm_open() calls wait_for_completion_interruptible() which comes before > ib_umad_sm_close() that calls complete(). In the initial open() there > will not be > anybody to signal the completion, so the complete is called to mark > the initial state. > I am not sure if this is the right way to do it, though. > > -Binoy
>From Documentation/scheduler/completion.txt , " 117 This is not implying any temporal order on wait_for_completion() and the 118 call to complete() - if the call to complete() happened before the call 119 to wait_for_completion() then the waiting side simply will continue 120 immediately as all dependencies are satisfied if not it will block until 121 completion is signaled by complete(). " In this case here, if sm_open/sm_close are paired, it should work. KR Jack