[openib-general] Re: [PATCH] Opensm - client reregistration

Hal Rosenstock halr at voltaire.com
Fri Feb 10 08:59:59 PST 2006


On Thu, 2006-02-09 at 07:10, Yael Kalka wrote:
> Hi Hal,
> 
> Currently, the OpenSM sends PortInfo with ClientReRegistration bit
> turned on only during the first sweep after becoming Master.
> This doesn't cover all cases where ClientReRegistration should be
> turned on. OpenSM should turn on this bit also on new ports it
> discovers (in cases of subnet merging, for example).
> The following patch adds support for turning on ClientReRegistration
> bit on newly discovered ports.

Thanks. Applied (with change below; see comment).

-- Hal

> Thanks,
> Yael
> 
> Signed-off-by:  Yael Kalka <yael at mellanox.co.il>
> 
> Index: opensm/osm_lid_mgr.c
> ===================================================================
> --- opensm/osm_lid_mgr.c	(revision 5337)
> +++ opensm/osm_lid_mgr.c	(working copy)
> @@ -897,6 +897,7 @@ __osm_lid_mgr_get_port_lid(
>  static boolean_t
>  __osm_lid_mgr_set_physp_pi(
>    IN osm_lid_mgr_t *       const p_mgr,
> +  IN osm_port_t*           const p_port,
>    IN osm_physp_t*          const p_physp,
>    IN ib_net16_t               const lid )
>  {
> @@ -910,6 +911,7 @@ __osm_lid_mgr_set_physp_pi(
>    uint8_t               op_vls;
>    uint8_t               port_num;
>    boolean_t             send_set = FALSE;
> +  boolean_t             new_port = FALSE;
>  
>    OSM_LOG_ENTER( p_mgr->p_log, __osm_lid_mgr_set_physp_pi );
>  
> @@ -1140,8 +1142,17 @@ __osm_lid_mgr_set_physp_pi(
>    /*
>      We need to set the cli_rereg bit when we are in first_time_master_sweep for
>      ports supporting the ClientReregistration Vol1 (v1.2) p811 14.4.11
> +    Also, if this port was just now discovered - then we should also set the
> +    cli_rereg bit. We know that the port was just discovered if it is in 
> +    the p_subn->new_port_list list.
>    */
> -  if ( ( p_mgr->p_subn->first_time_master_sweep == TRUE ) &&
> +  if ( cl_is_object_in_list(&p_mgr->p_subn->new_ports_list, p_port) )

missing { here...

> +    /* p_port is in new_ports_list - mark new_port as TRUE */
> +    new_port = TRUE;
> +  }
> +                            
> +  if ( ( p_mgr->p_subn->first_time_master_sweep == TRUE || 
> +         new_port == TRUE ) &&
>         ( (p_old_pi->capability_mask & IB_PORT_CAP_HAS_CLIENT_REREG) != 0 ) )
>      ib_port_info_set_client_rereg( p_pi, 1 );
>    else
> @@ -1243,7 +1254,7 @@ __osm_lid_mgr_process_our_sm_node(
>    */
>    p_physp = osm_port_get_default_phys_ptr( p_port );
>  
> -  __osm_lid_mgr_set_physp_pi( p_mgr, p_physp, cl_hton16( min_lid_ho ) );
> +  __osm_lid_mgr_set_physp_pi( p_mgr, p_port, p_physp, cl_hton16( min_lid_ho ) );
>  
>   Exit:
>    OSM_LOG_EXIT( p_mgr->p_log );
> @@ -1367,7 +1378,7 @@ osm_lid_mgr_process_subnet(
>        
>        p_physp = osm_port_get_default_phys_ptr( p_port );
>        /* the proc returns the fact it sent a set port info */
> -      if (__osm_lid_mgr_set_physp_pi( p_mgr, p_physp, cl_hton16( min_lid_ho )))
> +      if (__osm_lid_mgr_set_physp_pi( p_mgr, p_port, p_physp, cl_hton16( min_lid_ho )))
>          p_mgr->send_set_reqs = TRUE;
>      }
>    } /* all ports */
> 




More information about the general mailing list