[ofa-general] Re: [PATCH] opensm/osm_qos_policy.c : set SL for IPoIB broadcast groups
Sasha Khapyorsky
sashak at voltaire.com
Sun Mar 23 23:14:21 PDT 2008
Hi Yevgeny,
On 17:45 Sun 23 Mar , Yevgeny Kliteynik wrote:
>
> QoS manager should set the right SL in the IPoIB broadcast groups
> to enforce the right SL for IPoIB traffic.
>
> At start it seemed to me that it won't work in the following scenario:
> - IPoIB partition created
> - IPoIB mcast group created
> - IPoIB connectivity was established between two ports
> - SL in the QoS policy file was changed
> - SM is doing heavy sweep, and setting new SL in the
> partition and mcast group, but the nodes already have
> connectivity, so they will continue to transmit on the
> previous SL
> But then I realized that this scenario will be a problem for any
> communication (not only IPoIB), because as long as clients are not
> issuing new PR request, they will have the old parameters that won't
> be affected by the changes in QoS policy.
>
> This patch is for ofed_1_3 branch.
Is it really OFED 1.3 materials and it is not enough (for already
stabilized version) to have just a warning about SL value mismatch
between partition and QoS managers?
> Please review and let me know what you think.
>
> Signed-off-by: Yevgeny Kliteynik <kliteyn at dev.mellanox.co.il>
> ---
> opensm/opensm/osm_qos_policy.c | 39 +++++++++++++++++++++++++++++++++++++++
> 1 files changed, 39 insertions(+), 0 deletions(-)
>
> diff --git a/opensm/opensm/osm_qos_policy.c b/opensm/opensm/osm_qos_policy.c
> index bde1e7e..4586a77 100644
> --- a/opensm/opensm/osm_qos_policy.c
> +++ b/opensm/opensm/osm_qos_policy.c
> @@ -920,6 +920,13 @@ int osm_qos_policy_validate(osm_qos_policy_t * p_qos_policy,
>
> if (p_qos_match_rule->p_qos_level->sl_set &&
> p_prtn->sl != p_qos_match_rule->p_qos_level->sl) {
> + uint8_t sl;
> + uint32_t flow;
> + uint8_t hop;
> + cl_qmap_t * p_mlid_tbl;
> + osm_mgrp_t * p_mgrp;
> + osm_mgrp_t * p_next_mgrp;
> +
> /* overriding partition's SL */
> osm_log(p_log,
> OSM_LOG_ERROR,
> @@ -931,6 +938,38 @@ int osm_qos_policy_validate(osm_qos_policy_t * p_qos_policy,
> p_prtn->sl,
> p_qos_match_rule->p_qos_level->sl);
> p_prtn->sl = p_qos_match_rule->p_qos_level->sl;
> +
> + /* If this partition is an IPoIB partition,
> + there should be a matching MCast group.
> + Fix this group's SL too */
> +
> + p_mlid_tbl = &p_qos_policy->p_subn->mgrp_mlid_tbl;
> + p_next_mgrp = (osm_mgrp_t *) cl_qmap_head(p_mlid_tbl);
> + while (p_next_mgrp != (osm_mgrp_t *)
> + cl_qmap_end(p_mlid_tbl)) {
Instead of looping here you could just keep osm_mgrp_t reference as
field in partition structure.
> + p_mgrp = p_next_mgrp;
> + p_next_mgrp = (osm_mgrp_t *)
> + cl_qmap_next(&p_mgrp->map_item);
> + if (!p_mgrp->well_known)
> + continue;
> + if ((cl_ntoh16(p_mgrp->mcmember_rec.pkey) & 0x7fff) !=
> + (cl_ntoh16(pkey) & 0x7fff))
> + continue;
> + ib_member_get_sl_flow_hop(
> + p_mgrp->mcmember_rec.sl_flow_hop,
> + &sl, &flow, &hop);
> + if (sl != p_prtn->sl) {
> + osm_log(p_log, OSM_LOG_DEBUG,
> + "osm_qos_policy_validate: "
> + "Updating MCGroup (MLID 0x%04x) SL to "
> + "match partition SL %u\n",
> + cl_hton16(p_mgrp->mcmember_rec.mlid),
> + p_prtn->sl);
> + p_mgrp->mcmember_rec.sl_flow_hop =
> + ib_member_set_sl_flow_hop(
> + p_prtn->sl, flow, hop);
> + }
> + }
> }
> }
> }
What about to reduce a number of flow nesting? We have a functions in C.
Sasha
More information about the general
mailing list