I'm thinking about how to add support for the various invalidate
operations to libibverbs (ie send with invalidate, RDMA read with inv,
local inv, and receive completions with an invalidated key in them).

My current feeling is that using unnamed unions is the way to go -- it
preserves source and binary compatibility, and pretty much any compiler
that anyone is ever going to use will support them.  I feel a little bad
about using non-standard C, but I don't see a better way -- there's room
in the ibv_send_wr structure, but I don't see any way to squeeze another
32 bits into struct ibv_wc.

ie I'm proposing the change below (of course I'm leaving out the new
opcode etc definitions, this is just the part I don't feel confident
about).  Any suggestions of a better way or comments pro or con would
be nice to get...

Thanks

diff --git a/include/infiniband/verbs.h b/include/infiniband/verbs.h
index acc1b82..fcf587e 100644
--- a/include/infiniband/verbs.h
+++ b/include/infiniband/verbs.h
@@ -265,7 +265,10 @@ struct ibv_wc {
        enum ibv_wc_opcode      opcode;
        uint32_t                vendor_err;
        uint32_t                byte_len;
-       uint32_t                imm_data;       /* in network byte order */
+       union {
+               uint32_t        imm_data;       /* in network byte order */
+               uint32_t        invalidate_rkey;
+       };
        uint32_t                qp_num;
        uint32_t                src_qp;
        enum ibv_wc_flags       wc_flags;
@@ -508,7 +511,10 @@ struct ibv_send_wr {
        int                     num_sge;
        enum ibv_wr_opcode      opcode;
        enum ibv_send_flags     send_flags;
-       uint32_t                imm_data;       /* in network byte order */
+       union {
+               uint32_t        imm_data;       /* in network byte order */
+               uint32_t        invalidate_rkey;
+       };
        union {
                struct {
                        uint64_t        remote_addr;
_______________________________________________
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