Sean, On the linux side you have RDMA_MAX_PRIVATE_DATA defined in rdma_cma_abi.h as:
#define RDMA_MAX_PRIVATE_DATA 256 This is the user/kernel interface max value. Where do I get the actual private data max value for the rdma_cm protocol? -arlin >-----Original Message----- >From: Hefty, Sean >Sent: Saturday, January 23, 2010 12:19 AM >To: Hefty, Sean; ofw_list; Davis, Arlin R >Subject: [PATCH] dapl: use private_data_len for mem copies > >When copying private_data out of rdma_cm events, use the >reported private_data_len for the size, and not IB maximums. >This fixes a bug running over the librdmacm on windows, where >DAPL accessed invalid memory. > >Signed-off-by: Sean Hefty <[email protected]> >--- >This is a more substantial fix to the private data length issue. >This fix is for review and the upstream dapl.git tree (eventually >making its way back into the trunk). I do NOT recommend this for >the 2.2 release given the scope of the changes. > >This change has only been lightly tested. > > trunk/ulp/dapl2/dapl/common/dapl_adapter_util.h | 6 - > trunk/ulp/dapl2/dapl/common/dapl_cr_callback.c | 19 ++-- > trunk/ulp/dapl2/dapl/common/dapl_cr_util.h | 3 - > trunk/ulp/dapl2/dapl/common/dapl_ep_connect.c | 11 --- > trunk/ulp/dapl2/dapl/common/dapl_ep_util.c | 4 - > .../dapl2/dapl/common/dapl_evd_connection_callb.c | 20 ----- > trunk/ulp/dapl2/dapl/common/dapl_evd_util.h | 3 - > trunk/ulp/dapl2/dapl/common/dapl_ia_query.c | 3 - > trunk/ulp/dapl2/dapl/ibal/dapl_ibal_cm.c | 88 >+++----------------- > trunk/ulp/dapl2/dapl/openib_cma/cm.c | 77 >+++--------------- > trunk/ulp/dapl2/dapl/openib_scm/cm.c | 58 >+++---------- > trunk/ulp/dapl2/dapl/openib_ucm/cm.c | 58 >+++---------- > 12 files changed, 65 insertions(+), 285 deletions(-) > >diff --git a/trunk/ulp/dapl2/dapl/common/dapl_adapter_util.h >b/trunk/ulp/dapl2/dapl/common/dapl_adapter_util.h >index 97ab42e..92cb9b7 100644 >--- a/trunk/ulp/dapl2/dapl/common/dapl_adapter_util.h >+++ b/trunk/ulp/dapl2/dapl/common/dapl_adapter_util.h >@@ -239,10 +239,8 @@ DAT_RETURN dapls_ib_cm_remote_addr ( > IN DAT_HANDLE dat_handle, > OUT DAT_SOCK_ADDR6 *remote_ia_address); > >-int dapls_ib_private_data_size ( >- IN DAPL_PRIVATE *prd_ptr, >- IN DAPL_PDATA_OP conn_op, >- IN DAPL_HCA *hca_ptr); >+int dapls_ib_private_data_size( >+ IN DAPL_HCA *hca_ptr); > > void > dapls_query_provider_specific_attr( >diff --git a/trunk/ulp/dapl2/dapl/common/dapl_cr_callback.c >b/trunk/ulp/dapl2/dapl/common/dapl_cr_callback.c >index 2340489..af68f85 100644 >--- a/trunk/ulp/dapl2/dapl/common/dapl_cr_callback.c >+++ b/trunk/ulp/dapl2/dapl/common/dapl_cr_callback.c >@@ -51,6 +51,7 @@ > DAT_RETURN dapli_connection_request(IN dp_ib_cm_handle_t ib_cm_handle, > IN DAPL_SP * sp_ptr, > IN DAPL_PRIVATE * prd_ptr, >+ IN int private_data_size, > IN DAPL_EVD * evd_ptr); > > DAPL_EP *dapli_get_sp_ep(IN dp_ib_cm_handle_t ib_cm_handle, >@@ -74,7 +75,8 @@ DAPL_EP *dapli_get_sp_ep(IN >dp_ib_cm_handle_t ib_cm_handle, > * None > * > */ >-void dapls_cr_callback(IN dp_ib_cm_handle_t ib_cm_handle, IN >const ib_cm_events_t ib_cm_event, IN const void *private_data_ptr, >/* event data */ >+void dapls_cr_callback(IN dp_ib_cm_handle_t ib_cm_handle, IN >const ib_cm_events_t ib_cm_event, >+ IN const void *private_data_ptr, IN >const int private_data_size, > IN const void *context) > { > DAPL_EP *ep_ptr; >@@ -174,8 +176,7 @@ void dapls_cr_callback(IN >dp_ib_cm_handle_t ib_cm_handle, IN const ib_cm_events_ > * event if appropriate. > */ > dat_status = >dapli_connection_request(ib_cm_handle, >- sp_ptr, >- >prd_ptr, evd_ptr); >+ >sp_ptr, prd_ptr, private_data_size, evd_ptr); > /* Set evd_ptr = NULL so we don't >generate an event below */ > evd_ptr = NULL; > >@@ -308,7 +309,8 @@ void dapls_cr_callback(IN >dp_ib_cm_handle_t ib_cm_handle, IN const ib_cm_events_ > DAT_RETURN > dapli_connection_request(IN dp_ib_cm_handle_t ib_cm_handle, > IN DAPL_SP * sp_ptr, >- IN DAPL_PRIVATE * prd_ptr, IN DAPL_EVD >* evd_ptr) >+ IN DAPL_PRIVATE * prd_ptr, IN int >private_data_size, >+ IN DAPL_EVD * evd_ptr) > { > DAT_RETURN dat_status; > >@@ -346,14 +348,7 @@ dapli_connection_request(IN >dp_ib_cm_handle_t ib_cm_handle, > > /* Private data size will be determined by the provider layer */ > cr_ptr->param.private_data = cr_ptr->private_data; >- if (prd_ptr == NULL) { >- cr_ptr->param.private_data_size = 0; >- } else { >- cr_ptr->param.private_data_size = >- dapls_ib_private_data_size(prd_ptr, >DAPL_PDATA_CONN_REQ, >- sp_ptr->header.owner_ia-> >- hca_ptr); >- } >+ cr_ptr->param.private_data_size = private_data_size; > if (cr_ptr->param.private_data_size > 0) { > dapl_os_memcpy(cr_ptr->private_data, > prd_ptr->private_data, >diff --git a/trunk/ulp/dapl2/dapl/common/dapl_cr_util.h >b/trunk/ulp/dapl2/dapl/common/dapl_cr_util.h >index 33aed7c..cec980f 100644 >--- a/trunk/ulp/dapl2/dapl/common/dapl_cr_util.h >+++ b/trunk/ulp/dapl2/dapl/common/dapl_cr_util.h >@@ -52,7 +52,8 @@ void > dapls_cr_callback ( > IN dp_ib_cm_handle_t ib_cm_handle, > IN const ib_cm_events_t ib_cm_event, >- IN const void *instant_data_p, >+ IN const void *private_data_ptr, >+ IN const int private_data_size, > IN const void *context); > > #endif /* _DAPL_CR_UTIL_H_ */ >diff --git a/trunk/ulp/dapl2/dapl/common/dapl_ep_connect.c >b/trunk/ulp/dapl2/dapl/common/dapl_ep_connect.c >index 5e4dc41..4e5e112 100644 >--- a/trunk/ulp/dapl2/dapl/common/dapl_ep_connect.c >+++ b/trunk/ulp/dapl2/dapl/common/dapl_ep_connect.c >@@ -79,7 +79,6 @@ dapl_ep_connect(IN DAT_EP_HANDLE ep_handle, > DAPL_EP alloc_ep; > DAT_RETURN dat_status; > DAT_COUNT req_hdr_size; >- DAT_UINT32 max_req_pdata_size; > void *private_data_ptr; > > dapl_dbg_log(DAPL_DBG_TYPE_API | DAPL_DBG_TYPE_CM, >@@ -258,16 +257,6 @@ dapl_ep_connect(IN DAT_EP_HANDLE ep_handle, > */ > req_hdr_size = (sizeof(DAPL_PRIVATE) - >DAPL_MAX_PRIVATE_DATA_SIZE); > >- max_req_pdata_size = >- dapls_ib_private_data_size(NULL, DAPL_PDATA_CONN_REQ, >- >ep_ptr->header.owner_ia->hca_ptr); >- >- if (private_data_size + req_hdr_size > (DAT_COUNT) >max_req_pdata_size) { >- dapl_os_unlock(&ep_ptr->header.lock); >- dat_status = DAT_ERROR(DAT_INVALID_PARAMETER, >DAT_INVALID_ARG5); >- goto bail; >- } >- > /* transition the state before requesting a connection to avoid > * race conditions > */ >diff --git a/trunk/ulp/dapl2/dapl/common/dapl_ep_util.c >b/trunk/ulp/dapl2/dapl/common/dapl_ep_util.c >index a50a6cb..505a9f2 100644 >--- a/trunk/ulp/dapl2/dapl/common/dapl_ep_util.c >+++ b/trunk/ulp/dapl2/dapl/common/dapl_ep_util.c >@@ -565,11 +565,11 @@ dapl_ep_legacy_post_disconnect(DAPL_EP * ep_ptr, > ep_ptr, cr_ptr->ib_cm_handle); > > dapls_cr_callback(cr_ptr->ib_cm_handle, >- ib_cm_event, NULL, >cr_ptr->sp_ptr); >+ ib_cm_event, NULL, 0, >cr_ptr->sp_ptr); > } else { > dapl_evd_connection_callback(ep_ptr->cm_handle, > ib_cm_event, >- NULL, >(void *)ep_ptr); >+ NULL, 0, >(void *)ep_ptr); > } > } else { > dapl_os_unlock(&ep_ptr->header.lock); >diff --git >a/trunk/ulp/dapl2/dapl/common/dapl_evd_connection_callb.c >b/trunk/ulp/dapl2/dapl/common/dapl_evd_connection_callb.c >index e2fb93b..8881362 100644 >--- a/trunk/ulp/dapl2/dapl/common/dapl_evd_connection_callb.c >+++ b/trunk/ulp/dapl2/dapl/common/dapl_evd_connection_callb.c >@@ -65,6 +65,7 @@ void > dapl_evd_connection_callback(IN dp_ib_cm_handle_t ib_cm_handle, > IN const ib_cm_events_t ib_cm_event, > IN const void *private_data_ptr, >+ IN const int private_data_size, > IN const void *context) > { > DAPL_EP *ep_ptr; >@@ -72,7 +73,6 @@ dapl_evd_connection_callback(IN >dp_ib_cm_handle_t ib_cm_handle, > DAPL_PRIVATE *prd_ptr; > DAT_EVENT_NUMBER dat_event_num; > DAT_RETURN dat_status; >- int private_data_size; > > dapl_dbg_log(DAPL_DBG_TYPE_CM | DAPL_DBG_TYPE_CALLBACK, > "--> dapl_evd_connection_callback: ctxt: >%p event: %x cm_handle %p\n", >@@ -96,7 +96,6 @@ dapl_evd_connection_callback(IN >dp_ib_cm_handle_t ib_cm_handle, > DAPL_CNTR(evd_ptr, DCNT_EVD_CONN_CALLBACK); > > prd_ptr = (DAPL_PRIVATE *) private_data_ptr; >- private_data_size = 0; > /* > * All operations effect the EP, so lock it once and unlock > * when necessary >@@ -132,16 +131,6 @@ dapl_evd_connection_callback(IN >dp_ib_cm_handle_t ib_cm_handle, > } > ep_ptr->param.ep_state = DAT_EP_STATE_CONNECTED; > ep_ptr->cm_handle = ib_cm_handle; >- if (prd_ptr == NULL) { >- private_data_size = 0; >- } else { >- private_data_size = >- dapls_ib_private_data_size(prd_ptr, >- DAPL_PDATA_CONN_REP, >- >ep_ptr->header. >- >owner_ia-> >- hca_ptr); >- } > > if (private_data_size > 0) { > /* copy in the private data */ >@@ -157,13 +146,6 @@ dapl_evd_connection_callback(IN >dp_ib_cm_handle_t ib_cm_handle, > case DAT_CONNECTION_EVENT_PEER_REJECTED: > { > /* peer reject may include private data */ >- if (prd_ptr != NULL) >- private_data_size = >- dapls_ib_private_data_size(prd_ptr, >- DAPL_PDATA_CONN_REJ, >- >ep_ptr->header. >- >owner_ia-> >- hca_ptr); > > if (private_data_size > 0) > >dapl_os_memcpy(ep_ptr->private.private_data, >diff --git a/trunk/ulp/dapl2/dapl/common/dapl_evd_util.h >b/trunk/ulp/dapl2/dapl/common/dapl_evd_util.h >index 2304435..e5a7c3f 100644 >--- a/trunk/ulp/dapl2/dapl/common/dapl_evd_util.h >+++ b/trunk/ulp/dapl2/dapl/common/dapl_evd_util.h >@@ -137,7 +137,8 @@ dapls_evd_post_connection_event_ext ( > extern void dapl_evd_connection_callback ( > IN dp_ib_cm_handle_t ib_cm_handle, > IN const ib_cm_events_t ib_cm_events, >- IN const void *instant_data_p, >+ IN const void *private_data_ptr, >+ IN const int private_data_size, > IN const void * context ); > > /* dto verb callback */ >diff --git a/trunk/ulp/dapl2/dapl/common/dapl_ia_query.c >b/trunk/ulp/dapl2/dapl/common/dapl_ia_query.c >index 6fcc4a2..d530d72 100644 >--- a/trunk/ulp/dapl2/dapl/common/dapl_ia_query.c >+++ b/trunk/ulp/dapl2/dapl/common/dapl_ia_query.c >@@ -150,8 +150,7 @@ dapl_ia_query(IN DAT_IA_HANDLE ia_handle, > * to 0 unless IBHOSTS_NAMING is enabled. > */ > provider_attr->max_private_data_size = >- dapls_ib_private_data_size(NULL, >DAPL_PDATA_CONN_REQ, >- ia_ptr->hca_ptr) - >+ dapls_ib_private_data_size(ia_ptr->hca_ptr) - > (sizeof(DAPL_PRIVATE) - DAPL_MAX_PRIVATE_DATA_SIZE); > provider_attr->supports_multipath = DAT_FALSE; > provider_attr->ep_creator = DAT_PSP_CREATES_EP_NEVER; >diff --git a/trunk/ulp/dapl2/dapl/ibal/dapl_ibal_cm.c >b/trunk/ulp/dapl2/dapl/ibal/dapl_ibal_cm.c >index 149bcbf..fac567a 100644 >--- a/trunk/ulp/dapl2/dapl/ibal/dapl_ibal_cm.c >+++ b/trunk/ulp/dapl2/dapl/ibal/dapl_ibal_cm.c >@@ -216,6 +216,7 @@ dapli_ib_cm_dreq_cb ( > dapls_cr_callback ( ep_ptr->cm_handle, > IB_CME_DISCONNECTED, > (void * __ptr64) >p_cm_dreq_rec->p_dreq_pdata, >+ IB_DREQ_PDATA_SIZE, > (void *) (((DAPL_CR *) >ep_ptr->cr_ptr)->sp_ptr) ); > } > else >@@ -226,6 +227,7 @@ dapli_ib_cm_dreq_cb ( > IB_CME_DISCONNECTED, > (void * __ptr64) > p_cm_dreq_rec->p_dreq_pdata, >+ IB_DREQ_PDATA_SIZE, > p_cm_dreq_rec->qp_context ); > } > } >@@ -285,6 +287,7 @@ dapli_ib_cm_drep_cb ( > dapls_cr_callback ( ep_ptr->cm_handle, > IB_CME_DISCONNECTED, > (void * __ptr64) >p_cm_drep_rec->p_drep_pdata, >+ IB_DREP_PDATA_SIZE, > (void *) (((DAPL_CR *) >ep_ptr->cr_ptr)->sp_ptr) ); > } > else >@@ -294,6 +297,7 @@ dapli_ib_cm_drep_cb ( > ep_ptr->cm_handle, > IB_CME_DISCONNECTED, > (void * __ptr64) >p_cm_drep_rec->p_drep_pdata, >+ IB_DREP_PDATA_SIZE, > p_cm_drep_rec->qp_context ); > } > } >@@ -371,6 +375,7 @@ dapli_ib_cm_rep_cb ( > >(dp_ib_cm_handle_t)&p_cm_rep_rec->h_cm_rep, > cm_cb_op, > (void *) prd_ptr, >+ IB_REP_PDATA_SIZE, > (void * __ptr64) >p_cm_rep_rec->qp_context); > } > >@@ -454,6 +459,7 @@ dapli_ib_cm_rej_cb ( > dapls_cr_callback ( ep_ptr->cm_handle, > cm_event, > (void * __ptr64) >p_cm_rej_rec->p_rej_pdata, >+ IB_REJ_PDATA_SIZE, > (void *) ((DAPL_CR *) >ep_ptr->cr_ptr)->sp_ptr); > } > else >@@ -462,6 +468,7 @@ dapli_ib_cm_rej_cb ( > ep_ptr->cm_handle, > cm_event, > (void * __ptr64) >p_cm_rej_rec->p_rej_pdata, >+ IB_REJ_PDATA_SIZE, > (void * __ptr64) >p_cm_rej_rec->qp_context ); > } > >@@ -610,6 +617,7 @@ dapli_ib_cm_req_cb ( IN ib_cm_req_rec_t >*p_cm_req_rec ) > dapls_cr_callback ( cm_handle, > IB_CME_CONNECTION_REQUEST_PENDING, > (void * __ptr64) p_cm_req_rec->p_req_pdata, >+ IB_REQ_PDATA_SIZE, > (void * __ptr64) sp_ptr ); > } > >@@ -652,6 +660,7 @@ dapli_ib_cm_rtu_cb ( > dapls_cr_callback ( ep_ptr->cm_handle, > IB_CME_CONNECTED, > (void * __ptr64) >p_cm_rtu_rec->p_rtu_pdata, >+ IB_RTU_PDATA_SIZE, > (void *) sp_ptr); > > } >@@ -661,6 +670,7 @@ dapli_ib_cm_rtu_cb ( > ep_ptr->cm_handle, > IB_CME_CONNECTED, > (void * __ptr64) >p_cm_rtu_rec->p_rtu_pdata, >+ IB_RTU_PDATA_SIZE, > (void *) ep_ptr); > } > } >@@ -1297,15 +1307,6 @@ dapls_ib_reject_connection ( IN >dp_ib_cm_handle_t ib_cm_handle, > cm_rej.p_ari = (ib_ari_t *)&rej_table[reject_reason]; > cm_rej.ari_length = (uint8_t)strlen (rej_table[reject_reason]); > >- if (private_data_size > >- dapls_ib_private_data_size(NULL,DAPL_PDATA_CONN_REJ,NULL)) >- { >- dapl_dbg_log ( DAPL_DBG_TYPE_ERR, >- "--> DsRjC: private_data size(%d) > >Max(%d)\n", >- private_data_size, IB_MAX_REJ_PDATA_SIZE ); >- return DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG3); >- } >- > cm_rej.p_rej_pdata = private_data; > cm_rej.rej_length = private_data_size; > >@@ -1723,78 +1724,11 @@ dapls_ib_cr_handoff ( > } > #endif > >-/* >- * dapls_ib_private_data_size >- * >- * Return the size of private data given a connection op type >- * >- * Input: >- * prd_ptr private data pointer >- * conn_op connection operation type >- * hca_ptr hca pointer, needed for transport type >- * >- * If prd_ptr is NULL, this is a query for the max size supported by >- * the provider, otherwise it is the actual size of the private data >- * contained in prd_ptr. >- * >- * Infiniband has fixed size private data, so prd_ptr is ignored. >- * >- * Output: >- * None >- * >- * Returns: >- * length of private data >- * >- */ > int > dapls_ib_private_data_size ( >- IN DAPL_PRIVATE *prd_ptr, >- IN DAPL_PDATA_OP conn_op, > IN DAPL_HCA *hca_ptr) > { >- int size; >- >- UNUSED_PARAM( prd_ptr ); >- UNUSED_PARAM( hca_ptr ); >- >- switch (conn_op) >- { >- case DAPL_PDATA_CONN_REQ: >- { >- size = IB_MAX_REQ_PDATA_SIZE; >- break; >- } >- case DAPL_PDATA_CONN_REP: >- { >- size = IB_MAX_REP_PDATA_SIZE; >- break; >- } >- case DAPL_PDATA_CONN_REJ: >- { >- size = IB_MAX_REJ_PDATA_SIZE; >- break; >- } >- case DAPL_PDATA_CONN_DREQ: >- { >- size = IB_MAX_DREQ_PDATA_SIZE; >- break; >- } >- case DAPL_PDATA_CONN_DREP: >- { >- size = IB_MAX_DREP_PDATA_SIZE; >- break; >- } >- default: >- { >- size = 0; >- } >- } /* end case */ >- >-#if defined(DAPL_DBG) && 0 >- dapl_dbg_log (DAPL_DBG_TYPE_CM, "%s: returns %d\n", >__FUNCTION__, size ); >-#endif >- >- return size; >+ return IB_MAX_REQ_PDATA_SIZE; > } > > >diff --git a/trunk/ulp/dapl2/dapl/openib_cma/cm.c >b/trunk/ulp/dapl2/dapl/openib_cma/cm.c >index c52e716..e0e034b 100644 >--- a/trunk/ulp/dapl2/dapl/openib_cma/cm.c >+++ b/trunk/ulp/dapl2/dapl/openib_cma/cm.c >@@ -95,7 +95,7 @@ static void dapli_addr_resolve(struct >dapl_cm_id *conn) > ret, strerror(errno)); > dapl_evd_connection_callback(conn, > IB_CME_LOCAL_FAILURE, >- NULL, conn->ep); >+ NULL, 0, conn->ep); > } > } > >@@ -149,7 +149,7 @@ static void dapli_route_resolve(struct >dapl_cm_id *conn) > > bail: > dapl_evd_connection_callback(conn, >- IB_CME_LOCAL_FAILURE, >NULL, conn->ep); >+ IB_CME_LOCAL_FAILURE, >NULL, 0, conn->ep); > } > > dp_ib_cm_handle_t dapls_ib_cm_create(DAPL_EP *ep) >@@ -416,7 +416,8 @@ static void dapli_cm_active_cb(struct >dapl_cm_id *conn, > > dapl_os_unlock(lock); > if (conn) >- dapl_evd_connection_callback(conn, ib_cm_event, >pdata, conn->ep); >+ dapl_evd_connection_callback(conn, ib_cm_event, pdata, >+ >event->param.conn.private_data_len, conn->ep); > } > > static void dapli_cm_passive_cb(struct dapl_cm_id *conn, >@@ -496,7 +497,8 @@ static void dapli_cm_passive_cb(struct >dapl_cm_id *conn, > > dapl_os_unlock(&conn->lock); > if (conn_recv) >- dapls_cr_callback(conn_recv, ib_cm_event, >pdata, conn_recv->sp); >+ dapls_cr_callback(conn_recv, ib_cm_event, pdata, >+ >event->param.conn.private_data_len, conn_recv->sp); > } > > /************************ DAPL provider entry points >**********************/ >@@ -922,11 +924,6 @@ dapls_ib_reject_connection(IN >dp_ib_cm_handle_t cm_handle, > return DAT_ERROR(DAT_INVALID_HANDLE, >DAT_INVALID_HANDLE_CR); > } > >- if (private_data_size > >- dapls_ib_private_data_size(NULL, DAPL_PDATA_CONN_REJ, >- cm_handle->hca)) >- return DAT_ERROR(DAT_INVALID_PARAMETER, >DAT_INVALID_ARG3); >- > /* setup pdata_hdr and users data, in CR pdata buffer */ > dapl_os_memcpy(cm_handle->p_data, &pdata_hdr, offset); > if (private_data_size) >@@ -998,60 +995,10 @@ dapls_ib_cm_remote_addr(IN DAT_HANDLE >dat_handle, OUT DAT_SOCK_ADDR6 * raddr) > return DAT_SUCCESS; > } > >-/* >- * dapls_ib_private_data_size >- * >- * Return the size of private data given a connection op type >- * >- * Input: >- * prd_ptr private data pointer >- * conn_op connection operation type >- * hca_ptr hca pointer, needed for transport type >- * >- * If prd_ptr is NULL, this is a query for the max size supported by >- * the provider, otherwise it is the actual size of the private data >- * contained in prd_ptr. >- * >- * >- * Output: >- * None >- * >- * Returns: >- * length of private data >- * >- */ >-int dapls_ib_private_data_size(IN DAPL_PRIVATE * prd_ptr, >- IN DAPL_PDATA_OP conn_op, IN >DAPL_HCA * hca_ptr) >+int dapls_ib_private_data_size( >+ IN DAPL_HCA *hca_ptr) > { >- int size; >- >- if (hca_ptr->ib_hca_handle->device->transport_type >- == IBV_TRANSPORT_IWARP) >- return (IWARP_MAX_PDATA_SIZE - sizeof(struct >dapl_pdata_hdr)); >- >- switch (conn_op) { >- >- case DAPL_PDATA_CONN_REQ: >- size = IB_MAX_REQ_PDATA_SIZE; >- break; >- case DAPL_PDATA_CONN_REP: >- size = IB_MAX_REP_PDATA_SIZE; >- break; >- case DAPL_PDATA_CONN_REJ: >- size = IB_MAX_REJ_PDATA_SIZE - sizeof(struct >dapl_pdata_hdr); >- break; >- case DAPL_PDATA_CONN_DREQ: >- size = IB_MAX_DREQ_PDATA_SIZE; >- break; >- case DAPL_PDATA_CONN_DREP: >- size = IB_MAX_DREP_PDATA_SIZE; >- break; >- default: >- size = 0; >- >- } /* end case */ >- >- return size; >+ return RDMA_MAX_PRIVATE_DATA; > } > > /* >@@ -1238,7 +1185,7 @@ void dapli_cma_event_cb(void) > > dapl_evd_connection_callback(conn, > IB_CME_DESTINATION_UNREACHABLE, >- NULL, conn->ep); >+ NULL, 0, conn->ep); > break; > > case RDMA_CM_EVENT_ROUTE_ERROR: >@@ -1267,14 +1214,14 @@ void dapli_cma_event_cb(void) > > dapl_evd_connection_callback(conn, > IB_CME_DESTINATION_UNREACHABLE, >- >NULL, conn->ep); >+ >NULL, 0, conn->ep); > } > break; > > case RDMA_CM_EVENT_DEVICE_REMOVAL: > dapl_evd_connection_callback(conn, > IB_CME_LOCAL_FAILURE, >- NULL, conn->ep); >+ NULL, 0, conn->ep); > break; > case RDMA_CM_EVENT_CONNECT_REQUEST: > case RDMA_CM_EVENT_CONNECT_ERROR: >diff --git a/trunk/ulp/dapl2/dapl/openib_scm/cm.c >b/trunk/ulp/dapl2/dapl/openib_scm/cm.c >index 105351c..4ac54dc 100644 >--- a/trunk/ulp/dapl2/dapl/openib_scm/cm.c >+++ b/trunk/ulp/dapl2/dapl/openib_scm/cm.c >@@ -430,12 +430,12 @@ DAT_RETURN >dapli_socket_disconnect(dp_ib_cm_handle_t cm_ptr) > if (ep_ptr->cr_ptr) { > dapls_cr_callback(cm_ptr, > IB_CME_DISCONNECTED, >- NULL, >+ NULL, 0, > ((DAPL_CR *) >ep_ptr->cr_ptr)->sp_ptr); > } else { > dapl_evd_connection_callback(ep_ptr->cm_handle, > IB_CME_DISCONNECTED, >- NULL, ep_ptr); >+ NULL, 0, ep_ptr); > } > } > >@@ -506,7 +506,7 @@ static void >dapli_socket_connected(dp_ib_cm_handle_t cm_ptr, int err) > bail: > /* close socket, free cm structure and post error event */ > dapls_ib_cm_free(cm_ptr, cm_ptr->ep); >- dapl_evd_connection_callback(NULL, >IB_CME_LOCAL_FAILURE, NULL, ep_ptr); >+ dapl_evd_connection_callback(NULL, >IB_CME_LOCAL_FAILURE, NULL, 0, ep_ptr); > } > > /* >@@ -833,7 +833,8 @@ ud_bail: > #endif > { > ep_ptr->cm_handle = cm_ptr; /* only RC, multi >CR's on UD */ >- dapl_evd_connection_callback(cm_ptr, event, >cm_ptr->msg.p_data, ep_ptr); >+ dapl_evd_connection_callback(cm_ptr, event, >cm_ptr->msg.p_data, >+ >DCM_MAX_PDATA_SIZE, ep_ptr); > } > return; > >@@ -847,7 +848,8 @@ bail: > dapls_modify_qp_state(ep_ptr->qp_handle, IBV_QPS_ERR, 0, 0, 0); > closesocket(cm_ptr->socket); > cm_ptr->socket = DAPL_INVALID_SOCKET; >- dapl_evd_connection_callback(NULL, event, >cm_ptr->msg.p_data, ep_ptr); >+ dapl_evd_connection_callback(NULL, event, cm_ptr->msg.p_data, >+ DCM_MAX_PDATA_SIZE, ep_ptr); > } > > /* >@@ -1044,7 +1046,7 @@ static void >dapli_socket_accept_data(ib_cm_srvc_handle_t acm_ptr) > /* trigger CR event and return SUCCESS */ > dapls_cr_callback(acm_ptr, > IB_CME_CONNECTION_REQUEST_PENDING, >- p_data, acm_ptr->sp); >+ p_data, exp, acm_ptr->sp); > return; > bail: > /* close socket, free cm structure, active will see >close as rej */ >@@ -1274,7 +1276,7 @@ ud_bail: > #endif > { > cm_ptr->ep->cm_handle = cm_ptr; /* only RC, >multi CR's on UD */ >- dapls_cr_callback(cm_ptr, event, NULL, cm_ptr->sp); >+ dapls_cr_callback(cm_ptr, event, NULL, 0, cm_ptr->sp); > } > return; > >@@ -1285,7 +1287,7 @@ bail: > #endif > dapls_modify_qp_state(cm_ptr->ep->qp_handle, >IBV_QPS_ERR, 0, 0, 0); > dapls_ib_cm_free(cm_ptr, cm_ptr->ep); >- dapls_cr_callback(cm_ptr, event, NULL, cm_ptr->sp); >+ dapls_cr_callback(cm_ptr, event, NULL, 0, cm_ptr->sp); > } > > /* >@@ -1604,44 +1606,10 @@ dapls_ib_cm_remote_addr(IN DAT_HANDLE >dat_handle, > return DAT_SUCCESS; > } > >-/* >- * dapls_ib_private_data_size >- * >- * Return the size of private data given a connection op type >- * >- * Input: >- * prd_ptr private data pointer >- * conn_op connection operation type >- * >- * If prd_ptr is NULL, this is a query for the max size supported by >- * the provider, otherwise it is the actual size of the private data >- * contained in prd_ptr. >- * >- * >- * Output: >- * None >- * >- * Returns: >- * length of private data >- * >- */ >-int dapls_ib_private_data_size(IN DAPL_PRIVATE * prd_ptr, >- IN DAPL_PDATA_OP conn_op, IN >DAPL_HCA * hca_ptr) >+int dapls_ib_private_data_size( >+ IN DAPL_HCA *hca_ptr) > { >- int size; >- >- switch (conn_op) { >- case DAPL_PDATA_CONN_REQ: >- case DAPL_PDATA_CONN_REP: >- case DAPL_PDATA_CONN_REJ: >- case DAPL_PDATA_CONN_DREQ: >- case DAPL_PDATA_CONN_DREP: >- size = DCM_MAX_PDATA_SIZE; >- break; >- default: >- size = 0; >- } >- return size; >+ return DCM_MAX_PDATA_SIZE; > } > > /* >diff --git a/trunk/ulp/dapl2/dapl/openib_ucm/cm.c >b/trunk/ulp/dapl2/dapl/openib_ucm/cm.c >index b51556a..d05d112 100644 >--- a/trunk/ulp/dapl2/dapl/openib_ucm/cm.c >+++ b/trunk/ulp/dapl2/dapl/openib_ucm/cm.c >@@ -798,9 +798,9 @@ static void >ucm_disconnect_final(dp_ib_cm_handle_t cm) > dapl_os_unlock(&cm->lock); > > if (cm->sp) >- dapls_cr_callback(cm, IB_CME_DISCONNECTED, >NULL, cm->sp); >+ dapls_cr_callback(cm, IB_CME_DISCONNECTED, >NULL, 0, cm->sp); > else >- dapl_evd_connection_callback(cm, >IB_CME_DISCONNECTED, NULL, cm->ep); >+ dapl_evd_connection_callback(cm, >IB_CME_DISCONNECTED, NULL, 0, cm->ep); > } > > /* >@@ -911,7 +911,7 @@ dapli_cm_connect(DAPL_EP *ep, dp_ib_cm_handle_t cm) > #endif > dapl_evd_connection_callback(cm, > IB_CME_DESTINATION_UNREACHABLE, >- NULL, ep); >+ NULL, 0, ep); > > return DAT_ERROR(DAT_INVALID_ADDRESS, > DAT_INVALID_ADDRESS_UNREACHABLE); >@@ -1126,14 +1126,14 @@ ud_bail: > cm->ep->cm_handle = cm; /* only RC, multi CR's on UD */ > dapl_evd_connection_callback(cm, > IB_CME_CONNECTED, >- cm->msg.p_data, cm->ep); >+ cm->msg.p_data, >ntohs(cm->msg.p_size), cm->ep); > } > return; > bail: > if (cm->msg.saddr.ib.qp_type != IBV_QPT_UD) > dapls_ib_reinit_ep(cm->ep); /* reset QP state */ > >- dapl_evd_connection_callback(NULL, event, >cm->msg.p_data, cm->ep); >+ dapl_evd_connection_callback(NULL, event, >cm->msg.p_data, ntohs(cm->msg.p_size), cm->ep); > dapls_ib_cm_free(cm, NULL); > } > >@@ -1204,7 +1204,7 @@ static void >ucm_accept(ib_cm_srvc_handle_t cm, ib_cm_msg_t *msg) > /* trigger CR event and return SUCCESS */ > dapls_cr_callback(acm, > IB_CME_CONNECTION_REQUEST_PENDING, >- acm->msg.p_data, acm->sp); >+ acm->msg.p_data, >ntohs(msg->p_size), acm->sp); > return; > > bail: >@@ -1295,14 +1295,14 @@ static void >ucm_accept_rtu(dp_ib_cm_handle_t cm, ib_cm_msg_t *msg) > } else { > #endif > cm->ep->cm_handle = cm; /* only RC, multi CR's on UD */ >- dapls_cr_callback(cm, IB_CME_CONNECTED, NULL, cm->sp); >+ dapls_cr_callback(cm, IB_CME_CONNECTED, NULL, >0, cm->sp); > } > return; > bail: > if (cm->msg.saddr.ib.qp_type != IBV_QPT_UD) > dapls_ib_reinit_ep(cm->ep); /* reset QP state */ > dapls_ib_cm_free(cm, cm->ep); >- dapls_cr_callback(cm, IB_CME_LOCAL_FAILURE, NULL, cm->sp); >+ dapls_cr_callback(cm, IB_CME_LOCAL_FAILURE, NULL, 0, cm->sp); > } > > /* >@@ -1354,7 +1354,7 @@ static int ucm_reply(dp_ib_cm_handle_t cm) > } else > #endif > dapls_cr_callback(cm, IB_CME_LOCAL_FAILURE, >- NULL, cm->sp); >+ NULL, 0, cm->sp); > return -1; > } > dapl_os_get_time(&cm->timer); /* RTU expected */ >@@ -1842,44 +1842,10 @@ dapls_ib_cm_remote_addr(IN DAT_HANDLE >dat_handle, > return DAT_SUCCESS; > } > >-/* >- * dapls_ib_private_data_size >- * >- * Return the size of private data given a connection op type >- * >- * Input: >- * prd_ptr private data pointer >- * conn_op connection operation type >- * >- * If prd_ptr is NULL, this is a query for the max size supported by >- * the provider, otherwise it is the actual size of the private data >- * contained in prd_ptr. >- * >- * >- * Output: >- * None >- * >- * Returns: >- * length of private data >- * >- */ >-int dapls_ib_private_data_size(IN DAPL_PRIVATE * prd_ptr, >- IN DAPL_PDATA_OP conn_op, IN >DAPL_HCA * hca_ptr) >+int dapls_ib_private_data_size( >+ IN DAPL_HCA *hca_ptr) > { >- int size; >- >- switch (conn_op) { >- case DAPL_PDATA_CONN_REQ: >- case DAPL_PDATA_CONN_REP: >- case DAPL_PDATA_CONN_REJ: >- case DAPL_PDATA_CONN_DREQ: >- case DAPL_PDATA_CONN_DREP: >- size = DCM_MAX_PDATA_SIZE; >- break; >- default: >- size = 0; >- } >- return size; >+ return DCM_MAX_PDATA_SIZE; > } > > /* > > > > _______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
