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

Hal Rosenstock halr at voltaire.com
Thu Mar 30 09:20:58 PST 2006


On Thu, 2006-03-30 at 11:26, Sasha Khapyorsky wrote:
> Hello Hal,
> 
> On 06:41 Thu 30 Mar     , Hal Rosenstock wrote:
> > 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 ?
> 
> For me Rolf's patch looks fine. I don't see any good reason for pkey
> dummy table preallocation (probably historical reasons?).
> 
> > Also, is PortInfo:PartitionEnforcementInbound/Outbound set properly (0)
> > for these ports which don't support partition enforcement ? (That might
> > be another issue).
> 
> Partititon manager will try to update PortInfo in this case too. I don't
> know could it hurt anything or not, but it is obviously unnecessary
> action. There is the patch.
> 
> Sasha.
> 
> 
> Check Partition Enfocement capabilities before switch external ports'
> pkey tables update and partiton enforcement.
> 
> Signed-off-by: Sasha Khapyorsky <sashak at voltaire.com>
> ---
> 
>  osm/opensm/osm_pkey_mgr.c |   10 ++++++++++
>  1 files changed, 10 insertions(+), 0 deletions(-)
> 
> diff --git a/osm/opensm/osm_pkey_mgr.c b/osm/opensm/osm_pkey_mgr.c
> index 28b475c..577fcc6 100644
> --- a/osm/opensm/osm_pkey_mgr.c
> +++ b/osm/opensm/osm_pkey_mgr.c
> @@ -55,6 +55,7 @@
>  #include <complib/cl_qmap.h>
>  #include <complib/cl_debug.h>
>  #include <opensm/osm_node.h>
> +#include <opensm/osm_switch.h>
>  #include <opensm/osm_pkey_mgr.h>
>  #include <opensm/osm_partition.h>
>  
> @@ -325,6 +326,15 @@ osm_pkey_mgr_update_peer_port(
>     p_node = osm_physp_get_node_ptr( peer );
>     if ( osm_node_get_type( p_node ) == IB_NODE_TYPE_CA )
>        return;
> +   else if ( osm_node_get_type( p_node ) == IB_NODE_TYPE_SWITCH ) {
> +      osm_switch_t *p_sw;
> +      ib_switch_info_t *p_si;
> +      if (!(p_sw = osm_get_switch_by_guid( p_mgr->p_subn,
> +                                           osm_node_get_node_guid( p_node ))) ||
> +	  !(p_si = osm_switch_get_si_ptr( p_sw )) ||
> +	  !p_si->enforce_cap)

Should switch port 0 be excepted from this ?

-- Hal

> +	  return;
> +   }
>  
>     if (p_mgr->p_subn->opt.no_partition_enforcement == TRUE)
>        goto _enforce_port;




More information about the general mailing list