[IBAL] compare TID based on user contolled area only
authorleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Wed, 17 Dec 2008 10:10:32 +0000 (10:10 +0000)
committerleonidk <leonidk@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Wed, 17 Dec 2008 10:10:32 +0000 (10:10 +0000)
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

core/al/al_mad.c

index 5d52cfc..389305b 100644 (file)
@@ -2150,7 +2150,8 @@ __mad_svc_match_recv(
 \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