[openib-general] Re: [PATCH] opensm: observe PartitionEnforcementCap of zero

Hal Rosenstock halr at voltaire.com
Thu Mar 30 03:41:37 PST 2006


Hi Rolf,

On Wed, 2006-03-29 at 18:54, Rolf Manderscheid wrote:
> Hi Hal,
> 
> opensm attempts to set pkey table entries on external switch ports
> even if the switch declares a PartitionEnforcementCap of zero.  The
> consequence is ERR 4108.

I presume this is with the trunk version, right ?

> The decision to set the block is based on the size of the
> pkeys->blocks vector, which is initialized to one.  There is a
> comment that claims there must be a pre-allocated block in said vector
> "for the sake of empty table test", but I can't see why it's
> necessary.  Is this comment wrong or am I missing something?
> 
> The vector size grows, if necessary, when processing the response from
> a SubnGet(PKeyTable).  The query happens during a sweep after
> obtaining the portinfo, and the query code is careful to observe the
> partition cap.  All this means that the vector size can still be used
> to decide whether to do the set provided the vector size starts out at
> zero.  So, the patch below just initializes the vector to size zero
> and removes the code that inserts the pre-allocated block.

This appears like it would get past the ERR 4108 but wouldn't OpenSM
then insert the block several lines down in
osm_port.c::osm_physp_set_pkey_tbl where it calls osm_pkey_tbl_set ?

Also, is PortInfo:PartitionEnforcementInbound/Outbound set properly (0)
for these ports which don't support partition enforcement ? (That might
be another issue).

-- Hal

>     Rolf
> 
> Index: osm_pkey.c
> ===================================================================
> --- osm_pkey.c	(revision 5971)
> +++ osm_pkey.c	(working copy)
> @@ -91,21 +91,7 @@
>  int osm_pkey_tbl_init( 
>    IN osm_pkey_tbl_t *p_pkey_tbl)
>  {
> -  ib_pkey_table_t *p_pkey_block;
> -  /* 
> -     we always need one block to be pre-allocated for the sake of
> -     empty table test
> -  */
> -  cl_ptr_vector_init( &p_pkey_tbl->blocks, 1, 1);
> -  p_pkey_block = (ib_pkey_table_t *)cl_zalloc(sizeof(ib_pkey_table_t));
> -  if (! p_pkey_block)
> -  {
> -    return(IB_ERROR);
> -  }
> -
> -  cl_ptr_vector_set(&p_pkey_tbl->blocks, 0, p_pkey_block);
> -
> -  /* deal with the map */
> +  cl_ptr_vector_init( &p_pkey_tbl->blocks, 0, 1);
>    cl_map_init( &p_pkey_tbl->keys, 1 );
>    return(IB_SUCCESS);
>  }




More information about the general mailing list