Skip to contentSkip to conversation

ib/mlx4: add IB_CQ_REPORT_MISSED_EVENTS support

PATCH In review Or Gerlitz 3 participants 4 messages Jul 27, 2010 2 messages not in the archive

Subsystems (2)
lore
Share & tools
lore

Or Gerlitz

author
#0 lore raw

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
index 5a219a2..4366811 100644
@@ -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]

#2 lore raw

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_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 -1
index 5a219a2..4366811 100644
@@ -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

#4 lore raw

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_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 29 lines · Or Gerlitz

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
index 5a219a2..4366811 100644
@@ -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