[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