Re: [PATCH 07/13] IB: add a proper completion queue abstraction
From: Parav Pandit <hidden>
Date: 2016-01-17 11:01:50
Also in:
linux-scsi, lkml
Hi Sagi, On Sun, Jan 17, 2016 at 2:54 PM, Sagi Grimberg [off-list ref] wrote:
quoted
Hi Christoph, Sagi, On Tue, Dec 8, 2015 at 2:21 AM, Christoph Hellwig [off-list ref] wrote:quoted
+static void ib_cq_poll_work(struct work_struct *work) +{ + struct ib_cq *cq = container_of(work, struct ib_cq, work); + int completed; + + completed = __ib_process_cq(cq, IB_POLL_BUDGET_WORKQUEUE); + if (completed >= IB_POLL_BUDGET_WORKQUEUE || + ib_req_notify_cq(cq, IB_POLL_FLAGS) > 0) + queue_work(ib_comp_wq, &cq->work); +}In above code, Let says completion is added in a time window where ib_process_cq is completed (CQ is diarmed in hw at that point) and ib_req_notify_cq is yet to be called. Provider vendor driver say mlx4 or mlx5 as specific case always returns ib_req_notify_cq = 0. Will it result into a missed notification? (so queue_work is not done).If we have not drained the CQ (consumed budget or more) the second condition (ib_req_notify_cq) will not be invoked. We are only rearming the CQ when we drained it completely. So I don't see how we can end up with missed notifications.
We drain the CQ completely for whatever CQEs available at that time, say for example, 33 CQEs drained at time t1. So now req_notify_cq will be invoked at time t2. During time delta t2-t1, CQ in hardware remains unarmed. If cqes are added during that time delta, Will event/interrupt raised for it, for CQ in unarmed state? At time time t2, CQ is armed containing pending CQEs. Will event/interrupt raised for those pending CQEs on next arming? -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html