[ofa-general] Re: [PATCH] opensm: Add new partition keyword for all switches and hca.

Sasha Khapyorsky sashak at voltaire.com
Wed Jan 7 08:35:21 PST 2009


Hi Eli,

On 17:40 Thu 01 Jan     , Eli Dorfman (Voltaire) wrote:
>  Add new partition keyword for all switches and hca.
>  To allow firmware upgrade within managed switches we
>  want all switch port 0 to have full membership.
>  'ALL_SWITCH' means all switch end ports in the subnet
>  'ALL_CA' means all CA end ports in the subnet.

And then we likely will want to extend this set to have all ib node
types by adding ALL_ROUTER(S).

Also I think better keywords would be ALL_SWITCHES and ALL_CAS - parser
cares about abbreviations, so the shorter keyword version will work too
- for example 'ALL_CA' will be interpreted as 'ALL_CAS'.

And of course related addition to OpenSM man page and
doc/partition-config.txt will be useful too.

Sasha

>  New default partition configuration will be:
>  "Default=0x7fff,ipoib:ALL_CA, ALL_SWITCH=full, SELF=full;"
> 
> Signed-off-by: Eli Dorfman <elid at voltaire.com>
> ---
>  opensm/opensm/osm_prtn.c        |   15 +++++++++------
>  opensm/opensm/osm_prtn_config.c |   10 ++++++++--
>  2 files changed, 17 insertions(+), 8 deletions(-)
> 
> diff --git a/opensm/opensm/osm_prtn.c b/opensm/opensm/osm_prtn.c
> index be51410..8b9301e 100644
> --- a/opensm/opensm/osm_prtn.c
> +++ b/opensm/opensm/osm_prtn.c
> @@ -135,7 +135,7 @@ ib_api_status_t osm_prtn_add_port(osm_log_t * p_log, osm_subn_t * p_subn,
>  }
>  
>  ib_api_status_t osm_prtn_add_all(osm_log_t * p_log, osm_subn_t * p_subn,
> -				 osm_prtn_t * p, boolean_t full)
> +				 osm_prtn_t * p, uint8_t type, boolean_t full)
>  {
>  	cl_qmap_t *p_port_tbl = &p_subn->port_guid_tbl;
>  	cl_map_item_t *p_item;
> @@ -146,10 +146,13 @@ ib_api_status_t osm_prtn_add_all(osm_log_t * p_log, osm_subn_t * p_subn,
>  	while (p_item != cl_qmap_end(p_port_tbl)) {
>  		p_port = (osm_port_t *) p_item;
>  		p_item = cl_qmap_next(p_item);
> -		status = osm_prtn_add_port(p_log, p_subn, p,
> -					   osm_port_get_guid(p_port), full);
> -		if (status != IB_SUCCESS)
> -			goto _err;
> +		if (type == 0xff ||
> +			(osm_node_get_type(p_port->p_node) == type)) {
> +			status = osm_prtn_add_port(p_log, p_subn, p,
> +						   osm_port_get_guid(p_port), full);
> +			if (status != IB_SUCCESS)
> +				goto _err;
> +		}
>  	}
>  
>  _err:
> @@ -325,7 +328,7 @@ static ib_api_status_t osm_prtn_make_default(osm_log_t * const p_log,
>  			      IB_DEFAULT_PARTIAL_PKEY);
>  	if (!p)
>  		goto _err;
> -	status = osm_prtn_add_all(p_log, p_subn, p, no_config);
> +	status = osm_prtn_add_all(p_log, p_subn, p, 0xff, no_config);
>  	if (status != IB_SUCCESS)
>  		goto _err;
>  	cl_map_remove(&p->part_guid_tbl, p_subn->sm_port_guid);
> diff --git a/opensm/opensm/osm_prtn_config.c b/opensm/opensm/osm_prtn_config.c
> index 9511608..37f2bd6 100644
> --- a/opensm/opensm/osm_prtn_config.c
> +++ b/opensm/opensm/osm_prtn_config.c
> @@ -64,7 +64,7 @@ extern osm_prtn_t *osm_prtn_make_new(osm_log_t * p_log, osm_subn_t * p_subn,
>  				     const char *name, uint16_t pkey);
>  extern ib_api_status_t osm_prtn_add_all(osm_log_t * p_log,
>  					osm_subn_t * p_subn,
> -					osm_prtn_t * p, boolean_t full);
> +					osm_prtn_t * p, uint8_t type, boolean_t full);
>  extern ib_api_status_t osm_prtn_add_port(osm_log_t * p_log,
>  					 osm_subn_t * p_subn, osm_prtn_t * p,
>  					 ib_net64_t guid, boolean_t full);
> @@ -212,7 +212,13 @@ static int partition_add_port(unsigned lineno, struct part_conf *conf,
>  
>  	if (!strncmp(name, "ALL", strlen(name))) {
>  		return osm_prtn_add_all(conf->p_log, conf->p_subn, p,
> -					full) == IB_SUCCESS ? 0 : -1;
> +					0xff, full) == IB_SUCCESS ? 0 : -1;
> +	} else if (!strncmp(name, "ALL_SWITCH", strlen(name))) {
> +		return osm_prtn_add_all(conf->p_log, conf->p_subn, p,
> +					IB_NODE_TYPE_SWITCH, full) == IB_SUCCESS ? 0 : -1;
> +	} else if (!strncmp(name, "ALL_CA", strlen(name))) {
> +		return osm_prtn_add_all(conf->p_log, conf->p_subn, p,
> +					IB_NODE_TYPE_CA, full) == IB_SUCCESS ? 0 : -1;
>  	} else if (!strncmp(name, "SELF", strlen(name))) {
>  		guid = cl_ntoh64(conf->p_subn->sm_port_guid);
>  	} else {
> -- 
> 1.5.5
> 



More information about the general mailing list