ib/mlx4: add IB_CQ_REPORT_MISSED_EVENTS support
Subsystems (2)
PATCH 1/1 ib/mlx4: add IB_CQ_REPORT_MISSED_EVENTS support
enhance the cq arming code to support IB_CQ_REPORT_MISSED_EVENTS
----
I noted that the IB_CQ_REPORT_MISSED_EVENTS flag was added in the same cycle with mlx4 and maybe as of this, mlx4 didn't implement the flag, which is used by IPoIB
The patch is compile tested only, if the patch seems okay, I can conduct further testing.
drivers/infiniband/hw/mlx4/cq.c +7 -0
@@ -755,6 +755,13 @@ int mlx4_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags)to_mdev (ibcq->device)->uar_map, MLX4_GET_DOORBELL_LOCK(&to_mdev(ibcq->device)->uar_lock)); +if (flags &IB_CQ_REPORT_MISSED_EVENTS ) { +struct mlx4_cqe *cqe; + cqe =next_cqe_sw (to_mcq (ibcq)); +if (cqe) +return 1 ; + } +return 0 ; }
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 4C4E96F9.4040503-hKgKHo2Ms0FWk0Htik3J/[email protected]
I don't think this patch is required for mlx4.
< 0 means an error occurred while requesting notification
== 0 means notification was requested successfully, and if
IB_CQ_REPORT_MISSED_EVENTS was passed in, then no events were missed and it is safe to wait for another event.
> 0 is only returned if IB_CQ_REPORT_MISSED_EVENTS was
passed in. It means that the consumer must poll the CQ again to make sure it is empty to avoid the race described above.
returning 1 means that you must poll the CQ to avoid a race condition which is not true for mlx4. For example if you return always 0 than you don't violate what the changelog says.
Quoted 30 lines · Or Gerlitz
enhance the cq arming code to support
IB_CQ_REPORT_MISSED_EVENTS----
I noted that the
IB_CQ_REPORT_MISSED_EVENTSflag was added in the same cycle with mlx4 and maybe as of this, mlx4 didn't implement the flag, which is used by IPoIBThe patch is compile tested only, if the patch seems okay, I can conduct further testing.
drivers/infiniband/hw/mlx4/cq.c +7
-1@@ -755,6 +755,13 @@ int mlx4_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags) to_mdev(ibcq->device)->uar_map, MLX4_GET_DOORBELL_LOCK(&to_mdev(ibcq->device)->uar_lock)); + if (flags & IB_CQ_REPORT_MISSED_EVENTS) { + struct mlx4_cqe *cqe; + cqe = next_cqe_sw(to_mcq(ibcq)); + if (cqe) + return 1; + } + return 0; } --
Quoted 4 lines
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): AANLkTinPRO6mOnCS-SJynkRXmt6J1uV3w5+8PfF6ubxN-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org
Can I conclude from this that the polling loop (2) from
http://www.mail-archive.com/[email protected]/msg04907.html
won't trigger a race on a multiprocessor when using mlx4 hardware ?
Bart.
Quoted 47 lines · Eli Cohen
I don't think this patch is required for mlx4.
< 0 means an error occurred while requesting notification == 0 means notification was requested successfully, and if
IB_CQ_REPORT_MISSED_EVENTSwas passed in, then no events were missed and it is safe to wait for another event.
> 0 is only returned ifIB_CQ_REPORT_MISSED_EVENTSwas passed in. It means that the consumer must poll the CQ again to make sure it is empty to avoid the race described above.returning 1 means that you must poll the CQ to avoid a race condition which is not true for mlx4. For example if you return always 0 than you don't violate what the changelog says.
Quoted 29 lines · Or Gerlitz
enhance the cq arming code to support
IB_CQ_REPORT_MISSED_EVENTS----
I noted that the
IB_CQ_REPORT_MISSED_EVENTSflag was added in the same cycle with mlx4 and maybe as of this, mlx4 didn't implement the flag, which is used by IPoIBThe patch is compile tested only, if the patch seems okay, I can conduct further testing.
drivers/infiniband/hw/mlx4/cq.c +7
-0@@ -755,6 +755,13 @@ int mlx4_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags) to_mdev(ibcq->device)->uar_map, MLX4_GET_DOORBELL_LOCK(&to_mdev(ibcq->device)->uar_lock)); + if (flags & IB_CQ_REPORT_MISSED_EVENTS) { + struct mlx4_cqe *cqe; + cqe = next_cqe_sw(to_mcq(ibcq)); + if (cqe) + return 1; + } + return 0; }
Quoted 9 lines
Quoted 5 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 2 lines · Eli Cohen
returning 1 means that you must poll the CQ to avoid a race condition which is not true for mlx4.
makes sense, thanks for clarifying that.
Or.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html