The current MAD processing code operates as follows when sending a request and trying to match a received response:
1. It saves the user's transaction ID (TID) to client_tid.
2. It clears the upper 32-bits of the TID.
3. It sets the upper 32-bits of the TID to an internal index.
4. It clears the upper 32-bits of a received response.
5. It tries to match the received response against client_tid.
Responses are only matched successfully if the user has already cleared the upper 32-bits of the TID before sending the MAD. It would be better to only match responses using the lower, user-controlled, 32-bits of the TID.
Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@1794
ad392aa1-c5ef-ae45-8dd8-
e69d62a5ef86
\r
/* Match on the transaction ID, ignoring internally generated sends. */\r
AL_EXIT( AL_DBG_MAD_SVC );\r
- if( (p_recv_hdr->trans_id == h_send->mad_wr.client_tid) &&\r
+ if( al_get_user_tid(p_recv_hdr->trans_id) ==\r
+ al_get_user_tid(h_send->mad_wr.client_tid) &&\r
!__is_internal_send( h_mad_svc->svc_type, h_send->p_send_mad ) )\r
{\r
return h_send;\r