Lines Matching defs:group

45 static int esw_qos_group_config(struct mlx5_eswitch *esw, struct mlx5_esw_rate_group *group,
53 group->tsar_ix,
56 NL_SET_ERR_MSG_MOD(extack, "E-Switch modify group TSAR element failed");
58 trace_mlx5_esw_group_qos_config(dev, group, group->tsar_ix, bw_share, max_rate);
91 struct mlx5_esw_rate_group *group,
100 struct mlx5_esw_rate_group *group;
102 list_for_each_entry(group, &esw->qos.groups, list) {
103 if (group->min_rate < max_guarantee)
105 max_guarantee = group->min_rate;
110 evport->qos.group != group || evport->qos.min_rate < max_guarantee)
119 /* If vports min rate divider is 0 but their group has bw_share configured, then
122 if (!group_level && !max_guarantee && group && group->bw_share)
136 struct mlx5_esw_rate_group *group,
140 u32 divider = esw_qos_calculate_min_rate_divider(esw, group, false);
147 if (!evport->enabled || !evport->qos.enabled || evport->qos.group != group)
168 struct mlx5_esw_rate_group *group;
172 list_for_each_entry(group, &esw->qos.groups, list) {
173 bw_share = esw_qos_calc_bw_share(group->min_rate, divider, fw_max_bw_share);
175 if (bw_share == group->bw_share)
178 err = esw_qos_group_config(esw, group, group->max_rate, bw_share, extack);
182 group->bw_share = bw_share;
184 /* All the group's vports need to be set with default bw_share
187 err = esw_qos_normalize_vports_min_rate(esw, group, extack);
214 err = esw_qos_normalize_vports_min_rate(esw, evport->qos.group, extack);
236 /* If parent group has rate limit need to set to group
239 if (evport->qos.group && !max_rate)
240 act_max_rate = evport->qos.group->max_rate;
250 static int esw_qos_set_group_min_rate(struct mlx5_eswitch *esw, struct mlx5_esw_rate_group *group,
261 if (min_rate == group->min_rate)
264 previous_min_rate = group->min_rate;
265 group->min_rate = min_rate;
266 divider = esw_qos_calculate_min_rate_divider(esw, group, true);
269 group->min_rate = previous_min_rate;
270 NL_SET_ERR_MSG_MOD(extack, "E-Switch group min rate setting failed");
273 divider = esw_qos_calculate_min_rate_divider(esw, group, true);
282 struct mlx5_esw_rate_group *group,
289 if (group->max_rate == max_rate)
292 err = esw_qos_group_config(esw, group, max_rate, group->bw_share, extack);
296 group->max_rate = max_rate;
298 /* Any unlimited vports in the group should be set
299 * with the value of the group.
303 vport->qos.group != group || vport->qos.max_rate)
320 struct mlx5_esw_rate_group *group = vport->qos.group;
326 parent_tsar_ix = group ? group->tsar_ix : esw->qos.root_tsar_ix;
365 vport->qos.group = new_group;
368 /* If vport is unlimited, we set the group's value.
369 * Therefore, if the group is limited it will apply to
374 NL_SET_ERR_MSG_MOD(extack, "E-Switch vport group set failed.");
381 vport->qos.group = curr_group;
384 esw_warn(esw->dev, "E-Switch vport group restore failed (vport=%d)\n",
392 struct mlx5_esw_rate_group *group,
401 curr_group = vport->qos.group;
402 new_group = group ?: esw->qos.group0;
423 struct mlx5_esw_rate_group *group;
427 group = kzalloc(sizeof(*group), GFP_KERNEL);
428 if (!group)
436 &group->tsar_ix);
438 NL_SET_ERR_MSG_MOD(extack, "E-Switch create TSAR for group failed");
442 list_add_tail(&group->list, &esw->qos.groups);
444 divider = esw_qos_calculate_min_rate_divider(esw, group, true);
452 trace_mlx5_esw_group_qos_create(esw->dev, group, group->tsar_ix);
454 return group;
457 list_del(&group->list);
460 group->tsar_ix))
461 NL_SET_ERR_MSG_MOD(extack, "E-Switch destroy TSAR for group failed");
463 kfree(group);
473 struct mlx5_esw_rate_group *group;
483 group = __esw_qos_create_rate_group(esw, extack);
484 if (IS_ERR(group))
487 return group;
491 struct mlx5_esw_rate_group *group,
497 list_del(&group->list);
506 group->tsar_ix);
510 trace_mlx5_esw_group_qos_destroy(esw->dev, group, group->tsar_ix);
512 kfree(group);
518 struct mlx5_esw_rate_group *group,
523 err = __esw_qos_destroy_rate_group(esw, group, extack);
580 esw_warn(dev, "E-Switch create rate group 0 failed (%ld)\n",
648 vport->qos.group = esw->qos.group0;
672 WARN(vport->qos.group && vport->qos.group != esw->qos.group0,
673 "Disabling QoS on port before detaching it from group");
903 struct mlx5_esw_rate_group *group = priv;
911 err = esw_qos_set_group_min_rate(esw, group, tx_share, extack);
921 struct mlx5_esw_rate_group *group = priv;
929 err = esw_qos_set_group_max_rate(esw, group, tx_max, extack);
937 struct mlx5_esw_rate_group *group;
953 group = esw_qos_create_rate_group(esw, extack);
954 if (IS_ERR(group)) {
955 err = PTR_ERR(group);
959 *priv = group;
968 struct mlx5_esw_rate_group *group = priv;
977 err = esw_qos_destroy_rate_group(esw, group, extack);
984 struct mlx5_esw_rate_group *group,
990 if (!vport->qos.enabled && !group)
995 err = esw_qos_vport_update_group(esw, vport, group, extack);
1006 struct mlx5_esw_rate_group *group;
1013 group = parent_priv;
1014 return mlx5_esw_qos_vport_update_group(vport->dev->priv.eswitch, vport, group, extack);