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 <[email protected]>
> ---
>  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
> 
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to