[openib-general] Gen2 OpenSM
Roland Dreier
roland at topspin.com
Thu Dec 23 14:22:11 PST 2004
shaharf> Ok, I will send the relevant function from user_mad
shaharf> file. Please forgive me not to send you a proper patch. I
shaharf> am already at home and I don't want to mess up my Wife's
shaharf> computer ;-) Aha - BTW, what I really meant is that
shaharf> OpenSM can bring up IPoIB (small mistake for me, big
shaharf> progress for the openib...;-).
Here's the patch that I committed, I think I got the idea.
By the way, I had the umad module set the TID when sending traps,
since we do expect to get a response in the form of a trap repress.
- Roland
Index: infiniband/core/user_mad.c
===================================================================
--- infiniband/core/user_mad.c (revision 1375)
+++ infiniband/core/user_mad.c (working copy)
@@ -236,6 +236,8 @@
.num_sge = 1,
.send_flags = IB_SEND_SIGNALED,
};
+ u8 method;
+ u64 *tid;
int ret;
if (count < sizeof (struct ib_user_mad))
@@ -263,11 +265,22 @@
goto err_up;
}
- ((struct ib_mad_hdr *) packet->mad.data)->tid =
- cpu_to_be64(((u64) agent->hi_tid) << 32 |
- (be64_to_cpu(((struct ib_mad_hdr *) packet->mad.data)->tid) &
- 0xffffffff));
+ /*
+ * If userspace is generating a request that will generate a
+ * response, we need to make sure the high-order part of the
+ * transaction ID matches the agent being used to send the
+ * MAD.
+ */
+ method = ((struct ib_mad_hdr *) packet->mad.data)->method;
+ if (!(method & IB_MGMT_METHOD_RESP) &&
+ method != IB_MGMT_METHOD_TRAP_REPRESS &&
+ method != IB_MGMT_METHOD_SEND) {
+ tid = &((struct ib_mad_hdr *) packet->mad.data)->tid;
+ *tid = cpu_to_be64(((u64) agent->hi_tid) << 32 |
+ (be64_to_cpup(tid) & 0xffffffff));
+ }
+
memset(&ah_attr, 0, sizeof ah_attr);
ah_attr.dlid = be16_to_cpu(packet->mad.lid);
ah_attr.sl = packet->mad.sl;
More information about the general
mailing list