[ofw] [PATCH] dapl: use private_data_len for mem copies
Davis, Arlin R
arlin.r.davis at intel.com
Fri Jan 29 10:35:58 PST 2010
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 <sean.hefty at intel.com>
>---
>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;
> }
>
> /*
>
>
>
>
More information about the ofw
mailing list