[openib-general] [PATCHv2] osm: pkey manager fail to clear unused block

Hal Rosenstock halr at voltaire.com
Mon Jun 26 08:15:53 PDT 2006


On Mon, 2006-06-26 at 10:42, Sasha Khapyorsky wrote:
> Hi Eitan,
> 
> On 10:00 Mon 26 Jun     , Eitan Zahavi wrote:
> > Hi Hal
> > 
> > Had some second thought (slept on it) about this patch. 
> > It has a problem as it would continuously set a block if it is all empty (since the new
> > block does not exist)
> > 
> > The new patch fixes it by catching the case of null new_block and
> > still comparing to the old block. 
> > 
> > I also hope I did better job on the indentation (at least I used untabify).
> > 
> > > Done some basic test with the simulator. Seems that the manager miss all
> > > blocks needed to be cleared (as they used to have some pkeys that are not part of 
> > > the policy). The following trivial patch fixes the issue. The bug sneaked in 
> > > through the last few patched.
> 
> And what with peer port's pkey table update. Is there the same problem?

Looks to me like the same logic is there.

-- Hal

> 
> Sasha
> 
> > 
> > Eitan
> > 
> > Signed-off-by:  Eitan Zahavi <eitan at mellanox.co.il>
> > Index: opensm/osm_pkey_mgr.c
> > ===================================================================
> > --- opensm/osm_pkey_mgr.c	(revision 8189)
> > +++ opensm/osm_pkey_mgr.c	(working copy)
> > @@ -276,6 +276,7 @@ static boolean_t pkey_mgr_update_port(
> >    boolean_t ret_val = FALSE;
> >    osm_pending_pkey_t *p_pending;
> >    boolean_t found;
> > +  ib_pkey_table_t empty_block = {.pkey_entry = {0}, };
> >  
> >    p_physp = osm_port_get_default_phys_ptr( p_port );
> >    if ( !osm_physp_is_valid( p_physp ) )
> > @@ -360,7 +361,8 @@ static boolean_t pkey_mgr_update_port(
> >      block = osm_pkey_tbl_block_get( p_pkey_tbl, block_index );
> >      new_block = osm_pkey_tbl_new_block_get( p_pkey_tbl, block_index );
> >  
> > -    if (block && (!new_block || !memcmp( new_block, block, sizeof( *block ) ))) 
> > +    if (!new_block) new_block = &empty_block;
> > +    if (block && !memcmp( new_block, block, sizeof( *block ) ))
> >  	continue;
> >  
> >      status = pkey_mgr_update_pkey_entry( p_req, p_physp , new_block, block_index );
> > 
> > 
> > _______________________________________________
> > 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