[openib-general] [PATCH] opensm: observe PartitionEnforcementCap ofzero

Eitan Zahavi eitan at mellanox.co.il
Thu Mar 30 00:33:07 PST 2006


I would rather have the PartitionManager inspect the IB attributes
defining the port P_Key table length then change the pre-allocation of
PKey entry. Even if this does not break anything.

So I propose the partition manager inspect:
NodeInfo.PartitionCap - for Switch Port 0, HCA and Router)
SwitchInfo.PartitionEnforcementCap - for Switch Extarnal ports

Eitan Zahavi
Design Technology Director
Mellanox Technologies LTD
Tel:+972-4-9097208
Fax:+972-4-9593245
P.O. Box 586 Yokneam 20692 ISRAEL


> -----Original Message-----
> From: openib-general-bounces at openib.org [mailto:openib-general-
> bounces at openib.org] On Behalf Of Rolf Manderscheid
> Sent: Thursday, March 30, 2006 1:55 AM
> To: halr at voltaire.com
> Cc: openib-general at openib.org
> Subject: [openib-general] [PATCH] opensm: observe
PartitionEnforcementCap ofzero
> 
> 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.
> 
> 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.
> 
>     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);
>  }
> _______________________________________________
> openib-general mailing list
> openib-general at openib.org
> http://openib.org/mailman/listinfo/openib-general
> 
> To unsubscribe, please visit
http://openib.org/mailman/listinfo/openib-general



More information about the general mailing list