<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE> [PATCH] async_enent </TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>Fab</FONT>
</P>

<P><FONT SIZE=2>Attached bug fix for async event in user space</FONT>
<BR><FONT SIZE=2>Our verification team found that CQ\QP async events does not reach the user level applications</FONT>
<BR><FONT SIZE=2>The bug was that in hca_data.c line 812 (mlnx_async_dpc) the code compare obj_idx against the qpn , that wrong it first need to mask the qpn and then compare it.(same with the CQ)</FONT></P>

<P><FONT SIZE=2>-                       obj_idx = hh_er_p->event_modifier.qpn;</FONT>
<BR><FONT SIZE=2>+                       obj_idx = hh_er_p->event_modifier.qpn & hobul_p->qp_idx_mask;</FONT>
<BR><FONT SIZE=2>                        if (obj_idx < hobul_p->max_qp)</FONT>
<BR><FONT SIZE=2>                                event_r.context = (void *)hobul_p->qp_info_tbl[obj_idx].qp_context;</FONT>
<BR><FONT SIZE=2>                        else</FONT>
</P>

<P><FONT SIZE=2>This patch fix this.</FONT>
<BR><FONT SIZE=2>It also include fixes to the alts test (handling of CQE with error and few debug prints)</FONT>
<BR><FONT SIZE=2>I use the alts test to reproduce the problem by simply sending READ req in the loop back scenario.</FONT>
<BR><FONT SIZE=2>And on the way while debugging the async event flow I add the relevant ENTER/EXIT macros</FONT>
</P>

<P><FONT SIZE=2>10x</FONT>
<BR><FONT SIZE=2>Yossi  </FONT>
</P>

<P><FONT SIZE=2>Signed-off-by: Yossi Leybovich (sleybo@mellanox.co.il)</FONT>
<BR><FONT SIZE=2>Index: core/al/al_qp.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- core/al/al_qp.c     (revision 388)</FONT>
<BR><FONT SIZE=2>+++ core/al/al_qp.c     (working copy)</FONT>
<BR><FONT SIZE=2>@@ -2010,6 +2010,7 @@</FONT>
<BR><FONT SIZE=2> {</FONT>
<BR><FONT SIZE=2>        ib_qp_handle_t                  h_qp;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>+       AL_ENTER(AL_DBG_QP);</FONT>
<BR><FONT SIZE=2>        CL_ASSERT( p_event_rec );</FONT>
<BR><FONT SIZE=2>        h_qp = (ib_qp_handle_t)p_event_rec->context;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>@@ -2038,6 +2039,7 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        if( h_qp->pfn_event_cb )</FONT>
<BR><FONT SIZE=2>                h_qp->pfn_event_cb( p_event_rec );</FONT>
<BR><FONT SIZE=2>+       AL_ENTER(AL_DBG_QP);</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: core/al/kernel/al_ci_ca.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- core/al/kernel/al_ci_ca.c   (revision 388)</FONT>
<BR><FONT SIZE=2>+++ core/al/kernel/al_ci_ca.c   (working copy)</FONT>
<BR><FONT SIZE=2>@@ -332,7 +332,7 @@</FONT>
<BR><FONT SIZE=2> {</FONT>
<BR><FONT SIZE=2>        ib_async_event_rec_t    event_rec;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-       CL_ENTER( AL_DBG_CA, g_al_dbg_lvl );</FONT>
<BR><FONT SIZE=2>+       CL_ENTER( AL_DBG_ERROR, g_al_dbg_lvl );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        CL_ASSERT( p_event_record );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>@@ -342,7 +342,7 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        ci_ca_async_event( &event_rec );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-       CL_EXIT( AL_DBG_CA, g_al_dbg_lvl );</FONT>
<BR><FONT SIZE=2>+       CL_EXIT( AL_DBG_ERROR, g_al_dbg_lvl );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: core/al/kernel/al_proxy_verbs.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- core/al/kernel/al_proxy_verbs.c     (revision 388)</FONT>
<BR><FONT SIZE=2>+++ core/al/kernel/al_proxy_verbs.c     (working copy)</FONT>
<BR><FONT SIZE=2>@@ -246,6 +246,8 @@</FONT>
<BR><FONT SIZE=2>        cl_ioctl_handle_t                       *ph_ioctl, h_ioctl;</FONT>
<BR><FONT SIZE=2>        uintn_t                                         ioctl_size;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>+       AL_ENTER( AL_DBG_DEV );</FONT>
<BR><FONT SIZE=2>+       </FONT>
<BR><FONT SIZE=2>        /* Set up the appropriate callback list. */</FONT>
<BR><FONT SIZE=2>        switch( cb_type )</FONT>
<BR><FONT SIZE=2>        {</FONT>
<BR><FONT SIZE=2>@@ -310,7 +312,7 @@</FONT>
<BR><FONT SIZE=2>                proxy_context_deref( p_context );</FONT>
<BR><FONT SIZE=2>        }</FONT>
<BR><FONT SIZE=2>        cl_spinlock_release( &p_context->cb_lock );</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>+       AL_EXIT(AL_DBG_DEV);</FONT>
<BR><FONT SIZE=2>        return TRUE;</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>@@ -961,7 +963,8 @@</FONT>
<BR><FONT SIZE=2>        ib_qp_handle_t                  h_qp = p_err_rec->handle.h_qp;</FONT>
<BR><FONT SIZE=2>        al_dev_open_context_t   *p_context = h_qp->obj.h_al->p_context;</FONT>
<BR><FONT SIZE=2>        misc_cb_ioctl_info_t    cb_info;</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>+       </FONT>
<BR><FONT SIZE=2>+       AL_ENTER( AL_DBG_DEV | AL_DBG_QP );</FONT>
<BR><FONT SIZE=2>        /*</FONT>
<BR><FONT SIZE=2>         * If we're already closing the device - do not queue a callback, since</FONT>
<BR><FONT SIZE=2>         * we're cleaning up the callback lists.</FONT>
<BR><FONT SIZE=2>@@ -986,6 +989,7 @@</FONT>
<BR><FONT SIZE=2>                UAL_GET_MISC_CB_INFO, p_context, &cb_info, &h_qp->obj );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        proxy_context_deref( p_context );</FONT>
<BR><FONT SIZE=2>+       AL_EXIT( AL_DBG_DEV | AL_DBG_QP );</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Index: hw/mt23108/kernel/hca_data.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/kernel/hca_data.c        (revision 388)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/kernel/hca_data.c        (working copy)</FONT>
<BR><FONT SIZE=2>@@ -808,7 +808,7 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        case E_EV_QP:</FONT>
<BR><FONT SIZE=2>                {</FONT>
<BR><FONT SIZE=2>-                       obj_idx = hh_er_p->event_modifier.qpn;</FONT>
<BR><FONT SIZE=2>+                       obj_idx = hh_er_p->event_modifier.qpn & hobul_p->qp_idx_mask;</FONT>
<BR><FONT SIZE=2>                        if (obj_idx < hobul_p->max_qp)</FONT>
<BR><FONT SIZE=2>                                event_r.context = (void *)hobul_p->qp_info_tbl[obj_idx].qp_context;</FONT>
<BR><FONT SIZE=2>                        else</FONT>
<BR><FONT SIZE=2>@@ -821,7 +821,7 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        case E_EV_CQ:</FONT>
<BR><FONT SIZE=2>                {</FONT>
<BR><FONT SIZE=2>-                       obj_idx = hh_er_p->event_modifier.cq;</FONT>
<BR><FONT SIZE=2>+                       obj_idx = hh_er_p->event_modifier.cq & hobul_p->cq_idx_mask;</FONT>
<BR><FONT SIZE=2>                        if (obj_idx < hobul_p->max_cq)</FONT>
<BR><FONT SIZE=2>                                event_r.context = (void *)hobul_p->cq_info_tbl[obj_idx].cq_context;</FONT>
<BR><FONT SIZE=2>                        else</FONT>
<BR><FONT SIZE=2>Index: tests/alts/multisendrecv.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- tests/alts/multisendrecv.c  (revision 388)</FONT>
<BR><FONT SIZE=2>+++ tests/alts/multisendrecv.c  (working copy)</FONT>
<BR><FONT SIZE=2>@@ -1,4 +1,5 @@</FONT>
<BR><FONT SIZE=2> /*</FONT>
<BR><FONT SIZE=2>+* Copyright (c) 2005 Mellanox Technologies.  All rights reserved.</FONT>
<BR><FONT SIZE=2>  * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.</FONT>
<BR><FONT SIZE=2>  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. </FONT>
<BR><FONT SIZE=2>  *</FONT>
<BR><FONT SIZE=2>@@ -751,7 +752,7 @@</FONT>
<BR><FONT SIZE=2>                p_s_wr->remote_ops.rkey = 0;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>                ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>-                       ("******vaddr(x%"PRIx64") lkey(x%x) len(%d)*****\n",</FONT>
<BR><FONT SIZE=2>+                       ("***** Send ******vaddr(0x%"PRIx64") lkey(0x%x) len(%d)*****\n",</FONT>
<BR><FONT SIZE=2>                        (void*)(uintn_t)p_s_wr->ds_array[0].vaddr,</FONT>
<BR><FONT SIZE=2>                        p_s_wr->ds_array[0].lkey,</FONT>
<BR><FONT SIZE=2>                        p_s_wr->ds_array[0].length));</FONT>
<BR><FONT SIZE=2>@@ -806,7 +807,7 @@</FONT>
<BR><FONT SIZE=2>                p_r_wr->wr_id = i+reg_index;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>                ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>-                       ("******vaddr(x%"PRIx64") lkey(x%x) len(%d)*****\n",</FONT>
<BR><FONT SIZE=2>+                       ("***** Recv ******vaddr(0x%"PRIx64") lkey(0x%x) len(%d)*****\n",</FONT>
<BR><FONT SIZE=2>                        (void*)(uintn_t)p_r_wr->ds_array[0].vaddr,</FONT>
<BR><FONT SIZE=2>                        p_r_wr->ds_array[0].lkey,</FONT>
<BR><FONT SIZE=2>                        p_r_wr->ds_array[0].length));</FONT>
<BR><FONT SIZE=2>@@ -922,7 +923,7 @@</FONT>
<BR><FONT SIZE=2>        qp_mod_attr.state.init.access_ctrl = IB_AC_LOCAL_WRITE | IB_AC_MW_BIND;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>-               ("******** port num = %d ***************\n",</FONT>
<BR><FONT SIZE=2>+               ("****INIT***** port num = %d \n",              </FONT>
<BR><FONT SIZE=2>                qp_mod_attr.state.init.primary_port));</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        qp_mod_attr.req_state = IB_QPS_INIT;</FONT>
<BR><FONT SIZE=2>@@ -997,7 +998,7 @@</FONT>
<BR><FONT SIZE=2>        qp_mod_attr.state.rtr.rnr_nak_timeout = 7;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>-               ("****RTR***** dlid = x%x (x%x) *port_num = %d *dest_qp = %d ***\n",</FONT>
<BR><FONT SIZE=2>+               ("****RTR***** dlid = x%x (x%x) port_num = %d dest_qp = %d \n",</FONT>
<BR><FONT SIZE=2>                qp_mod_attr.state.rtr.primary_av.dlid,</FONT>
<BR><FONT SIZE=2>                CL_NTOH16(qp_mod_attr.state.rtr.primary_av.dlid),</FONT>
<BR><FONT SIZE=2>                qp_mod_attr.state.rtr.primary_av.port_num,</FONT>
<BR><FONT SIZE=2>@@ -1031,6 +1032,8 @@</FONT>
<BR><FONT SIZE=2>        qp_mod_attr.state.rts.init_depth = 3;           //3;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        qp_mod_attr.req_state = IB_QPS_RTS;</FONT>
<BR><FONT SIZE=2>+       ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>+               ("****RTS*****  \n"));</FONT>
<BR><FONT SIZE=2>        ib_status = ib_modify_qp(h_qp, &qp_mod_attr);</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        CL_ASSERT(ib_status == IB_SUCCESS);</FONT>
<BR><FONT SIZE=2>@@ -1112,7 +1115,7 @@</FONT>
<BR><FONT SIZE=2>                p_ca_obj->src_port_num = p_src_port_attr->port_num;</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>                ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>-                       ("**** slid = x%x (x%x) ***dlid = x%x (x%x) ***************\n",</FONT>
<BR><FONT SIZE=2>+                       ("****** slid = x%x (x%x) ***dlid = x%x (x%x) ***************\n",</FONT>
<BR><FONT SIZE=2>                        p_ca_obj->slid,</FONT>
<BR><FONT SIZE=2>                        CL_NTOH16(p_ca_obj->slid),</FONT>
<BR><FONT SIZE=2>                        p_ca_obj->dlid,</FONT>
<BR><FONT SIZE=2>@@ -1311,58 +1314,68 @@</FONT>
<BR><FONT SIZE=2>        while(p_done_cl)</FONT>
<BR><FONT SIZE=2>        {</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-               /*</FONT>
<BR><FONT SIZE=2>-                *  print output</FONT>
<BR><FONT SIZE=2>-                */</FONT>
<BR><FONT SIZE=2>-               ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>-                       ("Got a completion:\n"</FONT>
<BR><FONT SIZE=2>-                       "\ttype....:%s\n"</FONT>
<BR><FONT SIZE=2>-                       "\twr_id...:%"PRIx64"\n",</FONT>
<BR><FONT SIZE=2>-                       ib_get_wc_type_str(p_done_cl->wc_type),</FONT>
<BR><FONT SIZE=2>-                       p_done_cl->wr_id ));</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>-               if (p_done_cl->wc_type == IB_WC_RECV)</FONT>
<BR><FONT SIZE=2>+               if(p_done_cl->status != IB_WCS_SUCCESS)</FONT>
<BR><FONT SIZE=2>                {</FONT>
<BR><FONT SIZE=2>                        ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>-                               ("message length..:%d bytes\n",</FONT>
<BR><FONT SIZE=2>-                               p_done_cl->length ));</FONT>
<BR><FONT SIZE=2>+                       ("Got a completion with error !!!!!!!! status = %s type=%s\n",</FONT>
<BR><FONT SIZE=2>+                               ib_get_wc_status_str(p_done_cl->status),</FONT>
<BR><FONT SIZE=2>+                               ib_get_wc_type_str( p_done_cl->wc_type)));</FONT>
<BR><FONT SIZE=2>+                       </FONT>
<BR><FONT SIZE=2>+               }else{</FONT>
<BR><FONT SIZE=2>+                       /*</FONT>
<BR><FONT SIZE=2>+                        *  print output</FONT>
<BR><FONT SIZE=2>+                        */</FONT>
<BR><FONT SIZE=2>+                       ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>+                               ("Got a completion:\n"</FONT>
<BR><FONT SIZE=2>+                               "\ttype....:%s\n"</FONT>
<BR><FONT SIZE=2>+                               "\twr_id...:%"PRIx64"\n",</FONT>
<BR><FONT SIZE=2>+                               ib_get_wc_type_str(p_done_cl->wc_type),</FONT>
<BR><FONT SIZE=2>+                               p_done_cl->wr_id ));</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-                       id = (uint32_t)p_done_cl->wr_id;</FONT>
<BR><FONT SIZE=2>-                       buff = (char *)p_ca_obj->mem_region[id].buffer;</FONT>
<BR><FONT SIZE=2>-                       if (qp_type == IB_QPT_UNRELIABLE_DGRM)</FONT>
<BR><FONT SIZE=2>+                       </FONT>
<BR><FONT SIZE=2>+                               </FONT>
<BR><FONT SIZE=2>+                       if (p_done_cl->wc_type == IB_WC_RECV)</FONT>
<BR><FONT SIZE=2>                        {</FONT>
<BR><FONT SIZE=2>                                ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>-                                       ("---MSG--->%s\n",&buff[40]));</FONT>
<BR><FONT SIZE=2>-                               ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>-                                       ("RecvUD info:\n"</FONT>
<BR><FONT SIZE=2>-                                       "\trecv_opt...:x%x\n"</FONT>
<BR><FONT SIZE=2>-                                       "\timm_data...:x%x\n"</FONT>
<BR><FONT SIZE=2>-                                       "\tremote_qp..:x%x\n"</FONT>
<BR><FONT SIZE=2>-                                       "\tpkey_index.:%d\n"</FONT>
<BR><FONT SIZE=2>-                                       "\tremote_lid.:x%x\n"</FONT>
<BR><FONT SIZE=2>-                                       "\tremote_sl..:x%x\n"</FONT>
<BR><FONT SIZE=2>-                                       "\tpath_bits..:x%x\n"</FONT>
<BR><FONT SIZE=2>-                                       "\tsrc_lid....:x%x\n",</FONT>
<BR><FONT SIZE=2>-                                       p_done_cl->recv.ud.recv_opt,</FONT>
<BR><FONT SIZE=2>-                                       p_done_cl->recv.ud.immediate_data,</FONT>
<BR><FONT SIZE=2>-                                       CL_NTOH32(p_done_cl->recv.ud.remote_qp),</FONT>
<BR><FONT SIZE=2>-                                       p_done_cl->recv.ud.pkey_index,</FONT>
<BR><FONT SIZE=2>-                                       CL_NTOH16(p_done_cl->recv.ud.remote_lid),</FONT>
<BR><FONT SIZE=2>-                                       p_done_cl->recv.ud.remote_sl,</FONT>
<BR><FONT SIZE=2>-                                       p_done_cl->recv.ud.path_bits,</FONT>
<BR><FONT SIZE=2>-                                       CL_NTOH16(p_ca_obj->mem_region[id].my_lid)));</FONT>
<BR><FONT SIZE=2>+                                       ("message length..:%d bytes\n",</FONT>
<BR><FONT SIZE=2>+                                       p_done_cl->length ));</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>+                               id = (uint32_t)p_done_cl->wr_id;</FONT>
<BR><FONT SIZE=2>+                               buff = (char *)p_ca_obj->mem_region[id].buffer;</FONT>
<BR><FONT SIZE=2>+                               if (qp_type == IB_QPT_UNRELIABLE_DGRM)</FONT>
<BR><FONT SIZE=2>+                               {</FONT>
<BR><FONT SIZE=2>+                                       ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>+                                               ("---MSG--->%s\n",&buff[40]));</FONT>
<BR><FONT SIZE=2>+                                       ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>+                                               ("RecvUD info:\n"</FONT>
<BR><FONT SIZE=2>+                                               "\trecv_opt...:x%x\n"</FONT>
<BR><FONT SIZE=2>+                                               "\timm_data...:x%x\n"</FONT>
<BR><FONT SIZE=2>+                                               "\tremote_qp..:x%x\n"</FONT>
<BR><FONT SIZE=2>+                                               "\tpkey_index.:%d\n"</FONT>
<BR><FONT SIZE=2>+                                               "\tremote_lid.:x%x\n"</FONT>
<BR><FONT SIZE=2>+                                               "\tremote_sl..:x%x\n"</FONT>
<BR><FONT SIZE=2>+                                               "\tpath_bits..:x%x\n"</FONT>
<BR><FONT SIZE=2>+                                               "\tsrc_lid....:x%x\n",</FONT>
<BR><FONT SIZE=2>+                                               p_done_cl->recv.ud.recv_opt,</FONT>
<BR><FONT SIZE=2>+                                               p_done_cl->recv.ud.immediate_data,</FONT>
<BR><FONT SIZE=2>+                                               CL_NTOH32(p_done_cl->recv.ud.remote_qp),</FONT>
<BR><FONT SIZE=2>+                                               p_done_cl->recv.ud.pkey_index,</FONT>
<BR><FONT SIZE=2>+                                               CL_NTOH16(p_done_cl->recv.ud.remote_lid),</FONT>
<BR><FONT SIZE=2>+                                               p_done_cl->recv.ud.remote_sl,</FONT>
<BR><FONT SIZE=2>+                                               p_done_cl->recv.ud.path_bits,</FONT>
<BR><FONT SIZE=2>+                                               CL_NTOH16(p_ca_obj->mem_region[id].my_lid)));</FONT>
<BR><FONT SIZE=2>+                               }</FONT>
<BR><FONT SIZE=2>+                               else</FONT>
<BR><FONT SIZE=2>+                               {</FONT>
<BR><FONT SIZE=2>+                                       ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>+                                               ("RecvRC info:\n"</FONT>
<BR><FONT SIZE=2>+                                               "\trecv_opt...:x%x\n"</FONT>
<BR><FONT SIZE=2>+                                               "\timm_data...:x%x\n",</FONT>
<BR><FONT SIZE=2>+                                               p_done_cl->recv.conn.recv_opt,</FONT>
<BR><FONT SIZE=2>+                                               p_done_cl->recv.ud.immediate_data ));</FONT>
<BR><FONT SIZE=2>+                               }</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>                        }</FONT>
<BR><FONT SIZE=2>-                       else</FONT>
<BR><FONT SIZE=2>-                       {</FONT>
<BR><FONT SIZE=2>-                               ALTS_PRINT(ALTS_DBG_VERBOSE,</FONT>
<BR><FONT SIZE=2>-                                       ("RecvRC info:\n"</FONT>
<BR><FONT SIZE=2>-                                       "\trecv_opt...:x%x\n"</FONT>
<BR><FONT SIZE=2>-                                       "\timm_data...:x%x\n",</FONT>
<BR><FONT SIZE=2>-                                       p_done_cl->recv.conn.recv_opt,</FONT>
<BR><FONT SIZE=2>-                                       p_done_cl->recv.ud.immediate_data ));</FONT>
<BR><FONT SIZE=2>-                       }</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>                }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>                p_free_wcl = p_done_cl;</FONT>
<BR><FONT SIZE=2>@@ -1422,6 +1435,8 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        UNUSED_PARAM( p_err_rec );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>+       ALTS_PRINT(ALTS_DBG_VERBOSE,("ERROR: Async CQ error  !!!!!!!!!\n"));</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2>        ALTS_EXIT( ALTS_DBG_VERBOSE);</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>@@ -1434,6 +1449,8 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>        UNUSED_PARAM( p_err_rec );</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>+       ALTS_PRINT(ALTS_DBG_VERBOSE,("ERROR: Async QP error  !!!!!!!!!\n"));</FONT>
<BR><FONT SIZE=2>+       </FONT>
<BR><FONT SIZE=2>        ALTS_EXIT( ALTS_DBG_VERBOSE);</FONT>
<BR><FONT SIZE=2> }</FONT>
<BR><FONT SIZE=2> </FONT>
</P>

<P><FONT FACE="Arial" SIZE=2 COLOR="#000000"></FONT> 

</BODY>
</HTML>