This is an addendum to Roland's commit 561da8d10e419ffb333fe6faf05004d9a3670e7a
(June 13). This addendum adds prefetch headroom marking processing for s/g 
segments.

We write s/g segments in reverse order into the WQE, in order to guarantee
that the first dword of all cachelines containing s/g segments is written last
(overwriting the headroom invalidation pattern). The entire cacheline will thus
contain valid data when the invalidation pattern is overwritten.

Signed-off-by: Jack Morgenstein <[EMAIL PROTECTED]>

Index: libmlx4/src/qp.c
===================================================================
--- libmlx4.orig/src/qp.c       2007-09-04 10:03:38.264742000 +0300
+++ libmlx4/src/qp.c    2007-09-04 10:04:35.536784000 +0300
@@ -312,10 +312,19 @@ int mlx4_post_send(struct ibv_qp *ibqp, 
                } else {
                        struct mlx4_wqe_data_seg *seg = wqe;
 
-                       for (i = 0; i < wr->num_sge; ++i) {
-                               seg[i].byte_count = 
htonl(wr->sg_list[i].length);
+                       /*
+                        * Write the s/g entries in reverse order, so that the
+                        * first dword of all cachelines is written last.
+                        */
+                       for (i = wr->num_sge - 1; i >= 0; --i) {
                                seg[i].lkey       = htonl(wr->sg_list[i].lkey);
                                seg[i].addr       = htonll(wr->sg_list[i].addr);
+                               /*
+                                * This entry may start a new cacheline.
+                                * See barrier comment above.
+                                */
+                               wmb();
+                               seg[i].byte_count = 
htonl(wr->sg_list[i].length);
                        }
 
                        size += wr->num_sge * (sizeof *seg / 16);
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to