[ofw] [PATCH 12/12] uvp/av: change create/modify calls to take SGID index
Sean Hefty
sean.hefty at intel.com
Mon Jul 21 09:40:41 PDT 2008
The uvp requires the SGID index to create/modify address handles.
Modify the API and UVPs to take the SGID index as input. This avoids
the UVP needing to cache the CA attributes, which can lead to accessing
a stale GID table. The SGID index is passed into the UVP through the
resv1 field of the GRH.
Signed-off-by: Sean Hefty <sean.hefty at intel.com>
---
I reworked this patch several times, and this ended up being the cleanest solution
that I could come up with. The use of the ib_grh_t structure and the sgid is
widespread throughout the existing codebase. To minimize changes, I use the recv1
field of the grh to indicate the sgid index to the uvp. The UVPs end up quite a
bit simpler because of this change, with several functions removed.
diff -up -r -X trunk\docs\dontdiff.txt -I '\$Id:' trunk/core/al/user/ual_av.c branches\winverbs/core/al/user/ual_av.c
--- trunk/core/al/user/ual_av.c 2008-07-18 10:19:45.534452000 -0700
+++ branches\winverbs/core/al/user/ual_av.c 2008-07-18 10:02:28.767239400 -0700
@@ -46,6 +46,32 @@
#endif
+static ib_api_status_t
+ual_get_gid_index(
+ IN struct _al_ci_ca *p_ci_ca,
+ IN uint8_t port_num,
+ IN ib_gid_t *p_gid,
+ OUT uint16_t *p_index)
+{
+ ib_port_attr_t *p_port_attr;
+ ib_api_status_t status = IB_INVALID_GID;
+ uint16_t i;
+
+ ci_ca_lock_attr( p_ci_ca );
+ p_port_attr = &p_ci_ca->p_user_attr->p_port_attr[port_num];
+ for( i = 0; i < p_port_attr->num_gids; i++ )
+ {
+ if( !cl_memcmp(p_gid, &p_port_attr->p_gid_table[i], sizeof(ib_gid_t)) )
+ {
+ *p_index = i;
+ status = IB_SUCCESS;
+ break;
+ }
+ }
+ ci_ca_unlock_attr( p_ci_ca );
+
+ return status;
+}
ib_api_status_t
ual_create_av(
@@ -58,16 +84,28 @@ ual_create_av(
cl_status_t cl_status = CL_ERROR;
ib_api_status_t status = IB_ERROR;
uvp_interface_t uvp_intf = h_pd->obj.p_ci_ca->verbs.user_verbs;
+ ib_av_attr_t av_attr;
+ uint16_t index;
AL_ENTER( AL_DBG_AV );
/* Clear the ioctl_buf */
cl_memclr( &ioctl_buf, sizeof(ioctl_buf) );
+ av_attr = *p_av_attr;
/* Pre call to the UVP library */
if( h_pd->h_ci_pd && uvp_intf.pre_create_av )
{
+ if( p_av_attr->grh_valid )
+ {
+ status = ual_get_gid_index(h_pd->obj.p_ci_ca, av_attr.port_num,
+ &av_attr.grh.src_gid, &index);
+ if( status != IB_SUCCESS )
+ goto out;
+ av_attr.grh.resv1 = index;
+ }
+
status = uvp_intf.pre_create_av( h_pd->h_ci_pd,
- p_av_attr, &ioctl_buf.in.umv_buf, &h_av->h_ci_av );
+ &av_attr, &ioctl_buf.in.umv_buf, &h_av->h_ci_av );
if( status != IB_SUCCESS )
{
AL_EXIT( AL_DBG_AV );
@@ -98,6 +136,7 @@ ual_create_av(
status, &h_av->h_ci_av, &ioctl_buf.out.umv_buf);
}
+out:
AL_EXIT( AL_DBG_AV );
return status;
}
@@ -229,17 +268,29 @@ ual_modify_av(
ib_api_status_t status = IB_ERROR;
ib_av_t* p_av = (ib_av_t*) h_av;
uvp_interface_t uvp_intf = p_av->obj.p_ci_ca->verbs.user_verbs;
+ ib_av_attr_t av_attr;
+ uint16_t index;
AL_ENTER( AL_DBG_AV );
/* Clear the ioctl_buf */
cl_memclr( &ioctl_buf, sizeof(ioctl_buf) );
+ av_attr = *p_av_attr;
/* Call the uvp pre call if the vendor library provided a valid ca handle */
if( p_av->h_ci_av && uvp_intf.pre_modify_av )
{
+ if( p_av_attr->grh_valid )
+ {
+ status = ual_get_gid_index(p_av->obj.p_ci_ca, av_attr.port_num,
+ &av_attr.grh.src_gid, &index);
+ if( status != IB_SUCCESS )
+ goto out;
+ av_attr.grh.resv1 = index;
+ }
+
/* Pre call to the UVP library */
status = uvp_intf.pre_modify_av( p_av->h_ci_av,
- p_av_attr, &ioctl_buf.in.umv_buf );
+ &av_attr, &ioctl_buf.in.umv_buf );
if( status == IB_VERBS_PROCESSING_DONE )
{
/* Modification is done in user mode. Issue the post call */
@@ -285,6 +336,7 @@ ual_modify_av(
p_av->h_ci_av, status, &ioctl_buf.out.umv_buf );
}
+out:
AL_EXIT( AL_DBG_AV );
return status;
}
diff -up -r -X trunk\docs\dontdiff.txt -I '\$Id:' trunk/hw/mlx4/user/hca/mlx4.c branches\winverbs/hw/mlx4/user/hca/mlx4.c
--- trunk/hw/mlx4/user/hca/mlx4.c 2008-07-18 10:19:43.160637600 -0700
+++ branches\winverbs/hw/mlx4/user/hca/mlx4.c 2008-07-18 10:19:17.236085600 -0700
@@ -154,7 +154,6 @@ found:
GetSystemInfo(&sys_info);
context->ibv_ctx.page_size = sys_info.dwPageSize;
- context->ibv_ctx.p_hca_attr = NULL;
return &context->ibv_ctx;
@@ -175,8 +174,6 @@ void mlx4_free_context(struct ibv_contex
CloseHandle(context->xrc_srq_table_mutex);
#endif
CloseHandle(context->qp_table_mutex);
- if (context->ibv_ctx.p_hca_attr)
- cl_free(context->ibv_ctx.p_hca_attr);
cl_free(context);
}
@@ -184,8 +181,8 @@ static void __get_uvp_interface(uvp_inte
{
p_uvp->pre_open_ca = mlx4_pre_open_ca;
p_uvp->post_open_ca = mlx4_post_open_ca;
- p_uvp->pre_query_ca = mlx4_pre_query_ca;
- p_uvp->post_query_ca = mlx4_post_query_ca;
+ p_uvp->pre_query_ca = NULL;
+ p_uvp->post_query_ca = NULL;
p_uvp->pre_modify_ca = NULL;
p_uvp->post_modify_ca = NULL;
p_uvp->pre_close_ca = NULL;
diff -up -r -X trunk\docs\dontdiff.txt -I '\$Id:' trunk/hw/mlx4/user/hca/verbs.c branches\winverbs/hw/mlx4/user/hca/verbs.c
--- trunk/hw/mlx4/user/hca/verbs.c 2008-07-18 10:19:45.268959600 -0700
+++ branches\winverbs/hw/mlx4/user/hca/verbs.c 2008-07-18 10:17:53.980792400 -0700
@@ -106,102 +106,6 @@ end:
}
ib_api_status_t
-mlx4_pre_query_ca (
- IN ib_ca_handle_t h_uvp_ca,
- IN ib_ca_attr_t *p_ca_attr,
- IN size_t byte_count,
- IN ci_umv_buf_t *p_umv_buf )
-{
- ib_api_status_t status = IB_SUCCESS;
-
- UNREFERENCED_PARAMETER(h_uvp_ca);
-
- /* Note that query_ca calls *always* get their attributes from the kernel.
- *
- * Assume if user buffer is valid then byte_cnt is valid too
- * so we can preallocate ca attr buffer for post ioctl data saving
- *
- * Note that we squirrel the buffer away into the umv_buf and only
- * set it into the HCA if the query is successful.
- */
- if ( p_ca_attr != NULL )
- {
- p_umv_buf->p_inout_buf = (ULONG_PTR)cl_malloc(byte_count);
- if ( !p_umv_buf->p_inout_buf )
- {
- status = IB_INSUFFICIENT_RESOURCES;
- goto end;
- }
- }
-
-end:
- return status;
-}
-
-void
-__fixup_ca_attr(
- IN ib_ca_attr_t* const p_dest,
- IN const ib_ca_attr_t* const p_src )
-{
- uint8_t i;
- uintn_t offset = (uintn_t)p_dest - (uintn_t)p_src;
- ib_port_attr_t *p_tmp_port_attr = NULL;
-
- CL_ASSERT( p_dest );
- CL_ASSERT( p_src );
-
- /* Fix up the pointers to point within the destination buffer. */
- p_dest->p_page_size =
- (uint32_t*)(((uint8_t*)p_dest->p_page_size) + offset);
-
- p_tmp_port_attr =
- (ib_port_attr_t*)(((uint8_t*)p_dest->p_port_attr) + offset);
-
- /* Fix up each port attribute's gid and pkey table pointers. */
- for( i = 0; i < p_dest->num_ports; i++ )
- {
- p_tmp_port_attr[i].p_gid_table = (ib_gid_t*)
- (((uint8_t*)p_tmp_port_attr[i].p_gid_table) + offset);
-
- p_tmp_port_attr[i].p_pkey_table =(ib_net16_t*)
- (((uint8_t*)p_tmp_port_attr[i].p_pkey_table) + offset);
- }
- p_dest->p_port_attr = p_tmp_port_attr;
-}
-
-void
-mlx4_post_query_ca (
- IN ib_ca_handle_t h_uvp_ca,
- IN ib_api_status_t ioctl_status,
- IN ib_ca_attr_t *p_ca_attr,
- IN size_t byte_count,
- IN ci_umv_buf_t *p_umv_buf )
-{
- struct ibv_context *context = (struct ibv_context *)h_uvp_ca;
-
- CL_ASSERT(context && p_umv_buf);
-
- if ( ioctl_status == IB_SUCCESS && p_ca_attr && byte_count)
- {
- CL_ASSERT( byte_count >= p_ca_attr->size );
-
- pthread_mutex_lock(&context->mutex);
-
- if (context->p_hca_attr)
- cl_free(context->p_hca_attr);
- context->p_hca_attr = (ib_ca_attr_t*)(ULONG_PTR)p_umv_buf->p_inout_buf;
- cl_memcpy( context->p_hca_attr, p_ca_attr, p_ca_attr->size );
- __fixup_ca_attr( context->p_hca_attr, p_ca_attr );
-
- pthread_mutex_unlock(&context->mutex);
- }
- else if (p_umv_buf->p_inout_buf)
- {
- cl_free( (void*)(ULONG_PTR)p_umv_buf->p_inout_buf );
- }
-}
-
-ib_api_status_t
mlx4_post_close_ca (
IN ib_ca_handle_t h_uvp_ca,
IN ib_api_status_t ioctl_status )
@@ -1131,32 +1035,6 @@ mlx4_nd_get_qp_state (
return __from_qp_state(ibv_qp->state);
}
-static uint8_t
-__gid_to_index_lookup (
- IN ib_ca_attr_t *p_ca_attr,
- IN uint8_t port_num,
- IN uint8_t *raw_gid )
-{
- ib_gid_t *p_gid_table = NULL;
- uint8_t i, index = 0;
- uint16_t num_gids;
-
- p_gid_table = p_ca_attr->p_port_attr[port_num-1].p_gid_table;
- CL_ASSERT (p_gid_table);
-
- num_gids = p_ca_attr->p_port_attr[port_num-1].num_gids;
-
- for (i = 0; i < num_gids; i++)
- {
- if (cl_memcmp (raw_gid, p_gid_table[i].raw, 16))
- {
- index = i;
- break;
- }
- }
- return index;
-}
-
static enum ibv_rate __to_rate(uint8_t rate)
{
if (rate == IB_PATH_RECORD_RATE_2_5_GBS) return IBV_RATE_2_5_GBPS;
@@ -1194,17 +1072,9 @@ __grh_get_ver_class_flow(
static ib_api_status_t
__to_ah (
- IN ib_ca_attr_t *p_ca_attr,
IN const ib_av_attr_t *p_av_attr,
OUT struct ibv_ah_attr *p_attr )
{
- if (p_av_attr->port_num == 0 ||
- p_av_attr->port_num > p_ca_attr->num_ports) {
- MLX4_PRINT(TRACE_LEVEL_WARNING ,MLX4_DBG_AV ,
- (" invalid port number specified (%d)\n",p_av_attr->port_num));
- return IB_INVALID_PORT;
- }
-
p_attr->port_num = p_av_attr->port_num;
p_attr->sl = p_av_attr->sl;
p_attr->dlid = cl_ntoh16 (p_av_attr->dlid);
@@ -1218,8 +1088,7 @@ __to_ah (
p_attr->grh.hop_limit = p_av_attr->grh.hop_limit;
__grh_get_ver_class_flow( p_av_attr->grh.ver_class_flow, NULL,
&p_attr->grh.traffic_class, &p_attr->grh.flow_label );
- p_attr->grh.sgid_index = __gid_to_index_lookup (p_ca_attr, p_av_attr->port_num,
- (uint8_t *)
p_av_attr->grh.src_gid.raw);
+ p_attr->grh.sgid_index = (uint8_t) p_av_attr->grh.resv1;
cl_memcpy (p_attr->grh.dgid.raw, p_av_attr->grh.dest_gid.raw, 16);
}
else
@@ -1266,28 +1135,15 @@ mlx4_pre_create_ah (
UNREFERENCED_PARAMETER(p_umv_buf);
- if (pd->context->p_hca_attr == NULL) {
- status = IB_ERROR;
- goto end;
- }
-
ah = cl_malloc(sizeof *ah);
if (!ah) {
status = IB_INSUFFICIENT_MEMORY;
goto end;
}
- // sanity check
- if (p_av_attr->port_num == 0 ||
- p_av_attr->port_num > pd->context->p_hca_attr->num_ports)
- {
- status = IB_INVALID_PORT;
- goto end;
- }
-
// convert parameters
cl_memset(&attr, 0, sizeof(attr));
- status = __to_ah(pd->context->p_hca_attr, p_av_attr, &attr);
+ status = __to_ah(p_av_attr, &attr);
if (status)
goto end;
@@ -1352,7 +1208,7 @@ mlx4_pre_modify_ah (
CL_ASSERT (h_uvp_av);
- status = __to_ah(ah->context->p_hca_attr, p_addr_vector, &attr);
+ status = __to_ah(p_addr_vector, &attr);
if (status)
return status;
diff -up -r -X trunk\docs\dontdiff.txt -I '\$Id:' trunk/hw/mlx4/user/hca/verbs.h branches\winverbs/hw/mlx4/user/hca/verbs.h
--- trunk/hw/mlx4/user/hca/verbs.h 2008-07-18 10:19:41.208487600 -0700
+++ branches\winverbs/hw/mlx4/user/hca/verbs.h 2008-07-18 10:19:19.078915200 -0700
@@ -209,7 +209,6 @@ struct ibv_ah {
};
struct ibv_context {
- ib_ca_attr_t *p_hca_attr;
int page_size;
pthread_mutex_t mutex;
};
@@ -230,21 +229,6 @@ mlx4_post_open_ca (
IN ci_umv_buf_t *p_umv_buf );
ib_api_status_t
-mlx4_pre_query_ca (
- IN ib_ca_handle_t h_uvp_ca,
- IN ib_ca_attr_t *p_ca_attr,
- IN size_t byte_count,
- IN ci_umv_buf_t *p_umv_buf );
-
-void
-mlx4_post_query_ca (
- IN ib_ca_handle_t h_uvp_ca,
- IN ib_api_status_t ioctl_status,
- IN ib_ca_attr_t *p_ca_attr,
- IN size_t byte_count,
- IN ci_umv_buf_t *p_umv_buf );
-
-ib_api_status_t
mlx4_post_close_ca (
IN ib_ca_handle_t h_uvp_ca,
IN ib_api_status_t ioctl_status );
diff -up -r -X trunk\docs\dontdiff.txt -I '\$Id:' trunk/hw/mthca/user/mlnx_ual_av.c branches\winverbs/hw/mthca/user/mlnx_ual_av.c
--- trunk/hw/mthca/user/mlnx_ual_av.c 2008-07-18 10:19:45.550069200 -0700
+++ branches\winverbs/hw/mthca/user/mlnx_ual_av.c 2008-07-18 09:56:33.895021000 -0700
@@ -48,51 +48,12 @@ __post_create_av (
IN OUT ci_umv_buf_t *p_umv_buf);
-uint8_t
-gid_to_index_lookup (
- IN ib_ca_attr_t *p_ca_attr,
- IN uint8_t port_num,
- IN uint8_t *raw_gid)
-{
- ib_gid_t *p_gid_table = NULL;
- uint8_t i, index = 0;
- uint16_t num_gids;
-
- p_gid_table = p_ca_attr->p_port_attr[port_num-1].p_gid_table;
- CL_ASSERT (p_gid_table);
-
- num_gids = p_ca_attr->p_port_attr[port_num-1].num_gids;
- UVP_PRINT(TRACE_LEVEL_INFORMATION, UVP_DBG_AV,
- ("Port %d has %d gids\n", port_num, num_gids));
-
- for (i = 0; i < num_gids; i++)
- {
- if (cl_memcmp (raw_gid, p_gid_table[i].raw, sizeof (ib_gid_t)))
- {
- UVP_PRINT(TRACE_LEVEL_INFORMATION ,UVP_DBG_AV ,
- ("found GID at index %d\n", i));
- index = i;
- break;
- }
- }
- return index;
-}
-
ib_api_status_t
map_itom_av_attr (
- IN ib_ca_attr_t *p_ca_attr,
IN const ib_av_attr_t *p_av_attr,
OUT struct ibv_ah_attr *p_attr)
{
-
-
ib_api_status_t status = IB_SUCCESS;
- if (p_av_attr->port_num == 0 ||
- p_av_attr->port_num > p_ca_attr->num_ports) {
- UVP_PRINT(TRACE_LEVEL_WARNING ,UVP_DBG_AV ,
- (" invalid port number specified (%d)\n",p_av_attr->port_num));
- return IB_INVALID_PORT;
- }
p_attr->sl = p_av_attr->sl;
p_attr->port_num = p_av_attr->port_num;
@@ -109,8 +70,7 @@ map_itom_av_attr (
p_attr->grh.hop_limit = p_av_attr->grh.hop_limit;
ib_grh_get_ver_class_flow( p_av_attr->grh.ver_class_flow, NULL,
&p_attr->grh.traffic_class, &p_attr->grh.flow_label );
- p_attr->grh.sgid_index = gid_to_index_lookup (p_ca_attr,
- p_av_attr->port_num, (uint8_t *) p_av_attr->grh.src_gid.raw);
+ p_attr->grh.sgid_index = (uint8_t) p_av_attr->grh.resv1;
cl_memcpy (p_attr->grh.dgid.raw, p_av_attr->grh.dest_gid.raw,
sizeof (IB_gid_t));
}else{
@@ -142,17 +102,9 @@ __pre_create_av (
CL_ASSERT(p_umv_buf);
- // sanity check
- if (p_av_attr->port_num == 0 || p_av_attr->port_num > p_hobul->p_hca_attr->num_ports) {
- UVP_PRINT(TRACE_LEVEL_WARNING ,UVP_DBG_AV ,
- (" invalid port number specified (%d)\n",p_av_attr->port_num));
- status = IB_INVALID_PORT;
- goto end;
- }
-
// convert parameters
cl_memset( &attr, 0, sizeof(attr));
- status = map_itom_av_attr (p_hobul->p_hca_attr, p_av_attr, &attr);
+ status = map_itom_av_attr (p_av_attr, &attr);
if(status != IB_SUCCESS )
goto end;
@@ -328,7 +280,7 @@ __pre_modify_av (
p_hobul = p_pd_info->p_hobul;
CL_ASSERT (p_hobul);
- status = map_itom_av_attr (p_hobul->p_hca_attr, p_addr_vector, &attr);
+ status = map_itom_av_attr (p_addr_vector, &attr);
if(status != IB_SUCCESS) return status;
mthca_set_av_params( mthca_ah, &attr);
diff -up -r -X trunk\docs\dontdiff.txt -I '\$Id:' trunk/hw/mthca/user/mlnx_ual_ca.c branches\winverbs/hw/mthca/user/mlnx_ual_ca.c
--- trunk/hw/mthca/user/mlnx_ual_ca.c 2008-07-18 10:19:45.019084400 -0700
+++ branches\winverbs/hw/mthca/user/mlnx_ual_ca.c 2008-07-18 10:08:17.041968000 -0700
@@ -107,7 +107,6 @@ __post_open_ca (
/* return results */
new_ca->ibv_ctx = ibvcontext;
- new_ca->p_hca_attr = NULL;
*ph_uvp_ca = (ib_ca_handle_t)new_ca;
}
@@ -119,81 +118,6 @@ err_alloc_context:
return status;
}
-static ib_api_status_t
-__pre_query_ca (
- IN ib_ca_handle_t h_uvp_ca,
- IN ib_ca_attr_t *p_ca_attr,
- IN size_t byte_count,
- IN ci_umv_buf_t *p_umv_buf )
-{
- ib_api_status_t status = IB_SUCCESS;
-
- UVP_ENTER(UVP_DBG_SHIM);
-
- CL_ASSERT(h_uvp_ca);
-
- /*
- * First time call query_ca - populate our internal cached attributes
- * so we can access the GID table. Note that query_ca calls *always*
- * get their attributes from the kernel.
- */
- if ( !h_uvp_ca->p_hca_attr )
- {
- /*
- * Assume if user buffer is valid then byte_cnt is valid too
- * so we can preallocate ca attr buffer for post ioctl data saving
- *
- * Note that we squirel the buffer away into the umv_buf and only
- * set it into the HCA if the query is successful.
- */
- if ( p_ca_attr != NULL )
- {
- p_umv_buf->p_inout_buf = (ULONG_PTR)cl_zalloc(byte_count);
- if ( !p_umv_buf->p_inout_buf )
- {
- UVP_PRINT(TRACE_LEVEL_ERROR ,UVP_DBG_SHIM ,
- ("Failed to alloc new_ca\n"));
- status = IB_INSUFFICIENT_RESOURCES;
- return status;
- }
- }
- p_umv_buf->input_size = p_umv_buf->output_size = 0;
- }
-
- UVP_EXIT(UVP_DBG_SHIM);
- return status;
-}
-
-
-static void
-__post_query_ca (
- IN ib_ca_handle_t h_uvp_ca,
- IN ib_api_status_t ioctl_status,
- IN ib_ca_attr_t *p_ca_attr,
- IN size_t byte_count,
- IN ci_umv_buf_t *p_umv_buf )
-{
- UVP_ENTER(UVP_DBG_SHIM);
-
- CL_ASSERT(h_uvp_ca);
- CL_ASSERT(p_umv_buf);
-
- if ( ioctl_status == IB_SUCCESS && p_ca_attr &&
- byte_count && !h_uvp_ca->p_hca_attr )
- {
- CL_ASSERT( byte_count >= p_ca_attr->size );
- h_uvp_ca->p_hca_attr = (ib_ca_attr_t*)(ULONG_PTR)p_umv_buf->p_inout_buf;
- ib_copy_ca_attr( h_uvp_ca->p_hca_attr, p_ca_attr );
- }
- else if (p_umv_buf->p_inout_buf)
- {
- cl_free( (void*)(ULONG_PTR)p_umv_buf->p_inout_buf );
- }
-
- UVP_EXIT(UVP_DBG_SHIM);
- return;
-}
-
static ib_api_status_t
__pre_modify_ca (
@@ -245,11 +169,6 @@ __post_close_ca (
p_hobul->ibv_ctx = NULL;
}
- if (p_hobul->p_hca_attr) {
- cl_free( p_hobul->p_hca_attr);
- p_hobul->p_hca_attr = NULL;
- }
-
cl_free(p_hobul);
}
@@ -270,8 +189,8 @@ mlnx_get_ca_interface (
p_uvp->post_open_ca = __post_open_ca;
- p_uvp->pre_query_ca = __pre_query_ca;
- p_uvp->post_query_ca = __post_query_ca;
+ p_uvp->pre_query_ca = NULL;
+ p_uvp->post_query_ca = NULL;
p_uvp->pre_modify_ca = NULL;
p_uvp->post_modify_ca = NULL;
diff -up -r -X trunk\docs\dontdiff.txt -I '\$Id:' trunk/hw/mthca/user/mlnx_ual_data.h
branches\winverbs/hw/mthca/user/mlnx_ual_data.h
--- trunk/hw/mthca/user/mlnx_ual_data.h 2008-07-16 08:54:03.875375000 -0700
+++ branches\winverbs/hw/mthca/user/mlnx_ual_data.h 2008-07-18 10:07:40.471638000 -0700
@@ -41,7 +41,6 @@ typedef uint32_t IB_ts_t;
typedef struct _ib_ca
{
struct ibv_context *ibv_ctx;
- ib_ca_attr_t *p_hca_attr;
} mlnx_ual_hobul_t;
diff -up -r -X trunk\docs\dontdiff.txt -I '\$Id:' trunk/inc/iba/ib_types.h branches\winverbs/inc/iba/ib_types.h
--- trunk/inc/iba/ib_types.h 2008-07-18 10:19:46.002968000 -0700
+++ branches\winverbs/inc/iba/ib_types.h 2008-07-18 02:32:15.906250000 -0700
@@ -6461,7 +6461,7 @@ typedef struct _ib_vl_arb_table_record
typedef struct _ib_grh
{
ib_net32_t ver_class_flow;
- ib_net16_t resv1;
+ uint16_t resv1;
uint8_t resv2;
uint8_t hop_limit;
ib_gid_t src_gid;
diff -up -r -X trunk\docs\dontdiff.txt -I '\$Id:' trunk/inc/user/iba/ib_uvp.h branches\winverbs/inc/user/iba/ib_uvp.h
--- trunk/inc/user/iba/ib_uvp.h 2008-07-18 10:19:43.223106400 -0700
+++ branches\winverbs/inc/user/iba/ib_uvp.h 2008-07-18 10:00:10.720935000 -0700
@@ -798,7 +798,9 @@ typedef ib_api_status_t
* [in] Vendor's user-mode library handle to the Protection domain
* to which this AV is associated.
* p_addr_vector
-* [in] Parameters to create the address vector.
+* [in] Parameters to create the address vector. If the grh of the
+* address vector is valid, then the grh resv1 field should be set to
+* the index of the src_gid.
* p_umv_buf
* [in out] On input, UAL provides this buffer template.
* On return from this function, p_umv_buf contains
@@ -991,7 +993,9 @@ typedef ib_api_status_t
* h_uvp_av
* [in] Vendor's AV handle in user-mode library.
* p_addr_vector
-* [in] Parameters to modify the address vector handle
+* [in] Parameters to modify the address vector handle. If the grh of the
+* address vector is valid, then the grh resv1 field should be set to
+* the index of the src_gid.
* p_umv_buf
* [in out] On input, UAL provides this buffer template.
* On return from this function, p_umv_buf contains
More information about the ofw
mailing list