<!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>