From 2791027d0b8c92a9577266cbc664210ce2aa2321 Mon Sep 17 00:00:00 2001 From: ftillier Date: Mon, 19 Sep 2005 07:14:09 +0000 Subject: [PATCH] [HCA] Fix async event handling. Signed-off-by: Yossi Leybovich (sleybo@mellanox.co.il) git-svn-id: svn://openib.tc.cornell.edu/gen1@74 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- trunk/core/al/kernel/al_proxy_verbs.c | 7 ++ trunk/hw/mt23108/kernel/hca_data.c | 4 +- trunk/tests/alts/multisendrecv.c | 121 +++++++++++++++----------- 3 files changed, 79 insertions(+), 53 deletions(-) diff --git a/trunk/core/al/kernel/al_proxy_verbs.c b/trunk/core/al/kernel/al_proxy_verbs.c index 69160211..2652bcda 100644 --- a/trunk/core/al/kernel/al_proxy_verbs.c +++ b/trunk/core/al/kernel/al_proxy_verbs.c @@ -246,6 +246,8 @@ proxy_queue_cb_buf( cl_ioctl_handle_t *ph_ioctl, h_ioctl; uintn_t ioctl_size; + AL_ENTER( AL_DBG_DEV ); + /* Set up the appropriate callback list. */ switch( cb_type ) { @@ -311,6 +313,7 @@ proxy_queue_cb_buf( } cl_spinlock_release( &p_context->cb_lock ); + AL_EXIT(AL_DBG_DEV); return TRUE; } @@ -962,6 +965,8 @@ proxy_qp_err_cb( al_dev_open_context_t *p_context = h_qp->obj.h_al->p_context; misc_cb_ioctl_info_t cb_info; + AL_ENTER( AL_DBG_DEV | AL_DBG_QP ); + /* * If we're already closing the device - do not queue a callback, since * we're cleaning up the callback lists. @@ -986,6 +991,8 @@ proxy_qp_err_cb( UAL_GET_MISC_CB_INFO, p_context, &cb_info, &h_qp->obj ); proxy_context_deref( p_context ); + + AL_EXIT( AL_DBG_DEV | AL_DBG_QP ); } diff --git a/trunk/hw/mt23108/kernel/hca_data.c b/trunk/hw/mt23108/kernel/hca_data.c index 029813bd..6d1075ce 100644 --- a/trunk/hw/mt23108/kernel/hca_data.c +++ b/trunk/hw/mt23108/kernel/hca_data.c @@ -812,7 +812,7 @@ mlnx_async_dpc( case E_EV_QP: { - obj_idx = hh_er_p->event_modifier.qpn; + obj_idx = hh_er_p->event_modifier.qpn & hobul_p->qp_idx_mask; if (obj_idx < hobul_p->max_qp) event_r.context = (void *)hobul_p->qp_info_tbl[obj_idx].qp_context; else @@ -825,7 +825,7 @@ mlnx_async_dpc( case E_EV_CQ: { - obj_idx = hh_er_p->event_modifier.cq; + obj_idx = hh_er_p->event_modifier.cq & hobul_p->cq_idx_mask; if (obj_idx < hobul_p->max_cq) event_r.context = (void *)hobul_p->cq_info_tbl[obj_idx].cq_context; else diff --git a/trunk/tests/alts/multisendrecv.c b/trunk/tests/alts/multisendrecv.c index 78dcaa0c..6c1ca0dd 100644 --- a/trunk/tests/alts/multisendrecv.c +++ b/trunk/tests/alts/multisendrecv.c @@ -1,4 +1,5 @@ /* +* Copyright (c) 2005 Mellanox Technologies. All rights reserved. * Copyright (c) 2005 SilverStorm Technologies. All rights reserved. * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. * @@ -751,7 +752,7 @@ multisend_post_sends( p_s_wr->remote_ops.rkey = 0; ALTS_PRINT(ALTS_DBG_VERBOSE, - ("******vaddr(x%"PRIx64") lkey(x%x) len(%d)*****\n", + ("***** Send ******vaddr(0x%"PRIx64") lkey(0x%x) len(%d)*****\n", (void*)(uintn_t)p_s_wr->ds_array[0].vaddr, p_s_wr->ds_array[0].lkey, p_s_wr->ds_array[0].length)); @@ -806,7 +807,7 @@ multisend_post_recvs( p_r_wr->wr_id = i+reg_index; ALTS_PRINT(ALTS_DBG_VERBOSE, - ("******vaddr(x%"PRIx64") lkey(x%x) len(%d)*****\n", + ("***** Recv ******vaddr(0x%"PRIx64") lkey(0x%x) len(%d)*****\n", (void*)(uintn_t)p_r_wr->ds_array[0].vaddr, p_r_wr->ds_array[0].lkey, p_r_wr->ds_array[0].length)); @@ -922,7 +923,7 @@ alts_activate_qp( qp_mod_attr.state.init.access_ctrl = IB_AC_LOCAL_WRITE | IB_AC_MW_BIND; ALTS_PRINT(ALTS_DBG_VERBOSE, - ("******** port num = %d ***************\n", + ("****INIT***** port num = %d \n", qp_mod_attr.state.init.primary_port)); qp_mod_attr.req_state = IB_QPS_INIT; @@ -997,7 +998,7 @@ alts_activate_qp( qp_mod_attr.state.rtr.rnr_nak_timeout = 7; ALTS_PRINT(ALTS_DBG_VERBOSE, - ("****RTR***** dlid = x%x (x%x) *port_num = %d *dest_qp = %d ***\n", + ("****RTR***** dlid = x%x (x%x) port_num = %d dest_qp = %d \n", qp_mod_attr.state.rtr.primary_av.dlid, CL_NTOH16(qp_mod_attr.state.rtr.primary_av.dlid), qp_mod_attr.state.rtr.primary_av.port_num, @@ -1031,6 +1032,8 @@ alts_activate_qp( qp_mod_attr.state.rts.init_depth = 3; //3; qp_mod_attr.req_state = IB_QPS_RTS; + ALTS_PRINT(ALTS_DBG_VERBOSE, + ("****RTS***** \n")); ib_status = ib_modify_qp(h_qp, &qp_mod_attr); CL_ASSERT(ib_status == IB_SUCCESS); @@ -1112,7 +1115,7 @@ alts_check_active_ports(alts_multisr_ca_obj_t *p_ca_obj) p_ca_obj->src_port_num = p_src_port_attr->port_num; ALTS_PRINT(ALTS_DBG_VERBOSE, - ("**** slid = x%x (x%x) ***dlid = x%x (x%x) ***************\n", + ("****** slid = x%x (x%x) ***dlid = x%x (x%x) ***************\n", p_ca_obj->slid, CL_NTOH16(p_ca_obj->slid), p_ca_obj->dlid, @@ -1311,58 +1314,70 @@ poll_loop: while(p_done_cl) { - /* - * print output - */ - ALTS_PRINT(ALTS_DBG_VERBOSE, - ("Got a completion:\n" - "\ttype....:%s\n" - "\twr_id...:%"PRIx64"\n", - ib_get_wc_type_str(p_done_cl->wc_type), - p_done_cl->wr_id )); - - - if (p_done_cl->wc_type == IB_WC_RECV) + if(p_done_cl->status != IB_WCS_SUCCESS) + { + ALTS_PRINT(ALTS_DBG_VERBOSE, + ("Got a completion with error !!!!!!!! status = %s type=%s\n", + ib_get_wc_status_str(p_done_cl->status), + ib_get_wc_type_str( p_done_cl->wc_type))); + + } + else { + /* + * print output + */ ALTS_PRINT(ALTS_DBG_VERBOSE, - ("message length..:%d bytes\n", - p_done_cl->length )); + ("Got a completion:\n" + "\ttype....:%s\n" + "\twr_id...:%"PRIx64"\n", + ib_get_wc_type_str(p_done_cl->wc_type), + p_done_cl->wr_id )); - id = (uint32_t)p_done_cl->wr_id; - buff = (char *)p_ca_obj->mem_region[id].buffer; - if (qp_type == IB_QPT_UNRELIABLE_DGRM) - { - ALTS_PRINT(ALTS_DBG_VERBOSE, - ("---MSG--->%s\n",&buff[40])); - ALTS_PRINT(ALTS_DBG_VERBOSE, - ("RecvUD info:\n" - "\trecv_opt...:x%x\n" - "\timm_data...:x%x\n" - "\tremote_qp..:x%x\n" - "\tpkey_index.:%d\n" - "\tremote_lid.:x%x\n" - "\tremote_sl..:x%x\n" - "\tpath_bits..:x%x\n" - "\tsrc_lid....:x%x\n", - p_done_cl->recv.ud.recv_opt, - p_done_cl->recv.ud.immediate_data, - CL_NTOH32(p_done_cl->recv.ud.remote_qp), - p_done_cl->recv.ud.pkey_index, - CL_NTOH16(p_done_cl->recv.ud.remote_lid), - p_done_cl->recv.ud.remote_sl, - p_done_cl->recv.ud.path_bits, - CL_NTOH16(p_ca_obj->mem_region[id].my_lid))); - } - else + + + if (p_done_cl->wc_type == IB_WC_RECV) { ALTS_PRINT(ALTS_DBG_VERBOSE, - ("RecvRC info:\n" - "\trecv_opt...:x%x\n" - "\timm_data...:x%x\n", - p_done_cl->recv.conn.recv_opt, - p_done_cl->recv.ud.immediate_data )); - } + ("message length..:%d bytes\n", + p_done_cl->length )); + + id = (uint32_t)p_done_cl->wr_id; + buff = (char *)p_ca_obj->mem_region[id].buffer; + if (qp_type == IB_QPT_UNRELIABLE_DGRM) + { + ALTS_PRINT(ALTS_DBG_VERBOSE, + ("---MSG--->%s\n",&buff[40])); + ALTS_PRINT(ALTS_DBG_VERBOSE, + ("RecvUD info:\n" + "\trecv_opt...:x%x\n" + "\timm_data...:x%x\n" + "\tremote_qp..:x%x\n" + "\tpkey_index.:%d\n" + "\tremote_lid.:x%x\n" + "\tremote_sl..:x%x\n" + "\tpath_bits..:x%x\n" + "\tsrc_lid....:x%x\n", + p_done_cl->recv.ud.recv_opt, + p_done_cl->recv.ud.immediate_data, + CL_NTOH32(p_done_cl->recv.ud.remote_qp), + p_done_cl->recv.ud.pkey_index, + CL_NTOH16(p_done_cl->recv.ud.remote_lid), + p_done_cl->recv.ud.remote_sl, + p_done_cl->recv.ud.path_bits, + CL_NTOH16(p_ca_obj->mem_region[id].my_lid))); + } + else + { + ALTS_PRINT(ALTS_DBG_VERBOSE, + ("RecvRC info:\n" + "\trecv_opt...:x%x\n" + "\timm_data...:x%x\n", + p_done_cl->recv.conn.recv_opt, + p_done_cl->recv.ud.immediate_data )); + } + } } p_free_wcl = p_done_cl; @@ -1422,6 +1437,8 @@ multisend_cq_err_cb( UNUSED_PARAM( p_err_rec ); + ALTS_PRINT(ALTS_DBG_VERBOSE,("ERROR: Async CQ error !!!!!!!!!\n")); + ALTS_EXIT( ALTS_DBG_VERBOSE); } @@ -1434,6 +1451,8 @@ multisend_qp_err_cb( UNUSED_PARAM( p_err_rec ); + ALTS_PRINT(ALTS_DBG_VERBOSE,("ERROR: Async QP error !!!!!!!!!\n")); + ALTS_EXIT( ALTS_DBG_VERBOSE); } -- 2.41.0