On 2022/3/14 14:47, Cheng Xu wrote: > Cmdq is the main control plane channel between erdma driver and hardware. > After erdma device is initialized, the cmdq channel will be active in the > whole lifecycle of this driver. <...> > +static int erdma_poll_cmd_completion(struct erdma_comp_wait *comp_ctx, > + struct erdma_cmdq *cmdq, u32 timeout) > +{ > + unsigned long comp_timeout = jiffies + msecs_to_jiffies(timeout); > + > + while (1) { > + erdma_polling_cmd_completions(cmdq); > + if (comp_ctx->cmd_status != ERDMA_CMD_STATUS_ISSUED) > + break; > + > + if (time_is_before_jiffies(comp_timeout)) > + return -ETIME; > + > + msleep(20); > + } Here I feel confused, why not use time_after as an exit condition? I would be grateful if you explain this timeout exit mechanism. Thanks, Wenpeng