On 3/18/22 8:57 PM, Wenpeng Liang wrote:
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.
They are the same, You can review the definition in <linux/jiffies.h> :
/* time_is_before_jiffies(a) return true if a is before jiffies */
#define time_is_before_jiffies(a) time_after(jiffies, a)
Thanks,
Cheng Xu
Thanks,
Wenpeng