From f2801ae6caf010d660fe302970dabddc8948e1bf Mon Sep 17 00:00:00 2001 From: James Lentini Date: Thu, 11 Aug 2005 19:46:39 +0000 Subject: [PATCH] r3069: Updates from SourceForge DAPL: size EP IOV correctly Signed-off-by: James Lentini --- dapl/common/dapl_ep_modify.c | 45 +++++++++++++++++++++++++++++++++--- dapl/common/dapl_ep_util.c | 13 +++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/dapl/common/dapl_ep_modify.c b/dapl/common/dapl_ep_modify.c index 515c892..f2628af 100644 --- a/dapl/common/dapl_ep_modify.c +++ b/dapl/common/dapl_ep_modify.c @@ -172,14 +172,27 @@ dapl_ep_modify ( recv_cb_allocated = DAT_TRUE; alloc_ep.send_iov_num = ep_attr1.max_request_iov; - alloc_ep.send_iov = dapl_os_alloc (ep_attr1.max_request_iov + + /* + * Ensure that send_iov_num is big enough for all types + * of send requests. + */ + if (ep_attr1.max_rdma_read_iov > alloc_ep.send_iov_num) + { + alloc_ep.send_iov_num = ep_attr1.max_rdma_read_iov; + } + if (ep_attr1.max_rdma_write_iov > alloc_ep.send_iov_num) + { + alloc_ep.send_iov_num = ep_attr1.max_rdma_write_iov; + } + alloc_ep.send_iov = dapl_os_alloc (alloc_ep.send_iov_num * sizeof (ib_data_segment_t)); - if ( alloc_ep.recv_iov == NULL ) + if ( alloc_ep.send_iov == NULL ) { dat_status = DAT_ERROR (DAT_INSUFFICIENT_RESOURCES, DAT_RESOURCE_MEMORY); goto bail; } - recv_iov_allocated = DAT_TRUE; + rqst_iov_allocated = DAT_TRUE; alloc_ep.recv_iov_num = ep_attr1.max_recv_iov; alloc_ep.recv_iov = dapl_os_alloc (ep_attr1.max_recv_iov @@ -734,6 +747,32 @@ dapli_ep_modify_validate_parameters ( } } + if ( ep_param_mask & DAT_EP_FIELD_EP_ATTR_MAX_RDMA_READ_IOV ) + { + if ( ep_attr_request.max_rdma_read_iov > ep_attr_limit.max_rdma_read_iov) + { + dat_status = DAT_ERROR (DAT_INVALID_PARAMETER, DAT_INVALID_ARG3); + goto bail; + } + else + { + ep_attr.max_rdma_read_iov = ep_attr_request.max_rdma_read_iov; + } + } + + if ( ep_param_mask & DAT_EP_FIELD_EP_ATTR_MAX_RDMA_WRITE_IOV ) + { + if ( ep_attr_request.max_rdma_write_iov > ep_attr_limit.max_rdma_write_iov) + { + dat_status = DAT_ERROR (DAT_INVALID_PARAMETER, DAT_INVALID_ARG3); + goto bail; + } + else + { + ep_attr.max_rdma_write_iov = ep_attr_request.max_rdma_write_iov; + } + } + *ia_ptr = ia; *ep_ptr = ep; *ep_attr_ptr = ep_attr; diff --git a/dapl/common/dapl_ep_util.c b/dapl/common/dapl_ep_util.c index d2feb92..e019d52 100644 --- a/dapl/common/dapl_ep_util.c +++ b/dapl/common/dapl_ep_util.c @@ -156,6 +156,19 @@ dapl_ep_alloc ( ep_ptr->recv_iov_num = ep_ptr->param.ep_attr.max_recv_iov; ep_ptr->send_iov_num = ep_ptr->param.ep_attr.max_request_iov; + /* + * Ensure that send_iov_num is big enough for all types + * of send requests. + */ + if (ep_ptr->param.ep_attr.max_rdma_read_iov > ep_ptr->send_iov_num) + { + ep_ptr->send_iov_num = ep_ptr->param.ep_attr.max_rdma_read_iov; + } + if (ep_ptr->param.ep_attr.max_rdma_write_iov > ep_ptr->send_iov_num) + { + ep_ptr->send_iov_num = ep_ptr->param.ep_attr.max_rdma_write_iov; + } + ep_ptr->recv_iov = dapl_os_alloc ( ep_ptr->recv_iov_num * sizeof (ib_data_segment_t)); -- 2.41.0