Lines Matching refs:group

44 static int esw_qos_group_config(struct mlx5_eswitch *esw, struct mlx5_esw_rate_group *group,  in esw_qos_group_config()  argument
52 group->tsar_ix, in esw_qos_group_config()
57 trace_mlx5_esw_group_qos_config(dev, group, group->tsar_ix, bw_share, max_rate); in esw_qos_group_config()
90 struct mlx5_esw_rate_group *group, in esw_qos_calculate_min_rate_divider() argument
99 struct mlx5_esw_rate_group *group; in esw_qos_calculate_min_rate_divider() local
101 list_for_each_entry(group, &esw->qos.groups, list) { in esw_qos_calculate_min_rate_divider()
102 if (group->min_rate < max_guarantee) in esw_qos_calculate_min_rate_divider()
104 max_guarantee = group->min_rate; in esw_qos_calculate_min_rate_divider()
109 evport->qos.group != group || evport->qos.min_rate < max_guarantee) in esw_qos_calculate_min_rate_divider()
121 if (!group_level && !max_guarantee && group && group->bw_share) in esw_qos_calculate_min_rate_divider()
135 struct mlx5_esw_rate_group *group, in esw_qos_normalize_vports_min_rate() argument
139 u32 divider = esw_qos_calculate_min_rate_divider(esw, group, false); in esw_qos_normalize_vports_min_rate()
146 if (!evport->enabled || !evport->qos.enabled || evport->qos.group != group) in esw_qos_normalize_vports_min_rate()
167 struct mlx5_esw_rate_group *group; in esw_qos_normalize_groups_min_rate() local
171 list_for_each_entry(group, &esw->qos.groups, list) { in esw_qos_normalize_groups_min_rate()
172 bw_share = esw_qos_calc_bw_share(group->min_rate, divider, fw_max_bw_share); in esw_qos_normalize_groups_min_rate()
174 if (bw_share == group->bw_share) in esw_qos_normalize_groups_min_rate()
177 err = esw_qos_group_config(esw, group, group->max_rate, bw_share, extack); in esw_qos_normalize_groups_min_rate()
181 group->bw_share = bw_share; in esw_qos_normalize_groups_min_rate()
186 err = esw_qos_normalize_vports_min_rate(esw, group, extack); in esw_qos_normalize_groups_min_rate()
213 err = esw_qos_normalize_vports_min_rate(esw, evport->qos.group, extack); in esw_qos_set_vport_min_rate()
238 if (evport->qos.group && !max_rate) in esw_qos_set_vport_max_rate()
239 act_max_rate = evport->qos.group->max_rate; in esw_qos_set_vport_max_rate()
249 static int esw_qos_set_group_min_rate(struct mlx5_eswitch *esw, struct mlx5_esw_rate_group *group, in esw_qos_set_group_min_rate() argument
260 if (min_rate == group->min_rate) in esw_qos_set_group_min_rate()
263 previous_min_rate = group->min_rate; in esw_qos_set_group_min_rate()
264 group->min_rate = min_rate; in esw_qos_set_group_min_rate()
265 divider = esw_qos_calculate_min_rate_divider(esw, group, true); in esw_qos_set_group_min_rate()
268 group->min_rate = previous_min_rate; in esw_qos_set_group_min_rate()
272 divider = esw_qos_calculate_min_rate_divider(esw, group, true); in esw_qos_set_group_min_rate()
281 struct mlx5_esw_rate_group *group, in esw_qos_set_group_max_rate() argument
288 if (group->max_rate == max_rate) in esw_qos_set_group_max_rate()
291 err = esw_qos_group_config(esw, group, max_rate, group->bw_share, extack); in esw_qos_set_group_max_rate()
295 group->max_rate = max_rate; in esw_qos_set_group_max_rate()
302 vport->qos.group != group || vport->qos.max_rate) in esw_qos_set_group_max_rate()
319 struct mlx5_esw_rate_group *group = vport->qos.group; in esw_qos_vport_create_sched_element() local
325 parent_tsar_ix = group ? group->tsar_ix : esw->qos.root_tsar_ix; in esw_qos_vport_create_sched_element()
364 vport->qos.group = new_group; in esw_qos_update_group_scheduling_element()
380 vport->qos.group = curr_group; in esw_qos_update_group_scheduling_element()
391 struct mlx5_esw_rate_group *group, in esw_qos_vport_update_group() argument
400 curr_group = vport->qos.group; in esw_qos_vport_update_group()
401 new_group = group ?: esw->qos.group0; in esw_qos_vport_update_group()
422 struct mlx5_esw_rate_group *group; in __esw_qos_create_rate_group() local
426 group = kzalloc(sizeof(*group), GFP_KERNEL); in __esw_qos_create_rate_group()
427 if (!group) in __esw_qos_create_rate_group()
435 &group->tsar_ix); in __esw_qos_create_rate_group()
441 list_add_tail(&group->list, &esw->qos.groups); in __esw_qos_create_rate_group()
443 divider = esw_qos_calculate_min_rate_divider(esw, group, true); in __esw_qos_create_rate_group()
451 trace_mlx5_esw_group_qos_create(esw->dev, group, group->tsar_ix); in __esw_qos_create_rate_group()
453 return group; in __esw_qos_create_rate_group()
456 list_del(&group->list); in __esw_qos_create_rate_group()
459 group->tsar_ix)) in __esw_qos_create_rate_group()
462 kfree(group); in __esw_qos_create_rate_group()
472 struct mlx5_esw_rate_group *group; in esw_qos_create_rate_group() local
482 group = __esw_qos_create_rate_group(esw, extack); in esw_qos_create_rate_group()
483 if (IS_ERR(group)) in esw_qos_create_rate_group()
486 return group; in esw_qos_create_rate_group()
490 struct mlx5_esw_rate_group *group, in __esw_qos_destroy_rate_group() argument
496 list_del(&group->list); in __esw_qos_destroy_rate_group()
505 group->tsar_ix); in __esw_qos_destroy_rate_group()
509 trace_mlx5_esw_group_qos_destroy(esw->dev, group, group->tsar_ix); in __esw_qos_destroy_rate_group()
511 kfree(group); in __esw_qos_destroy_rate_group()
517 struct mlx5_esw_rate_group *group, in esw_qos_destroy_rate_group() argument
522 err = __esw_qos_destroy_rate_group(esw, group, extack); in esw_qos_destroy_rate_group()
647 vport->qos.group = esw->qos.group0; in esw_qos_vport_enable()
671 WARN(vport->qos.group && vport->qos.group != esw->qos.group0, in mlx5_esw_qos_vport_disable()
831 struct mlx5_esw_rate_group *group = priv; in mlx5_esw_devlink_rate_node_tx_share_set() local
839 err = esw_qos_set_group_min_rate(esw, group, tx_share, extack); in mlx5_esw_devlink_rate_node_tx_share_set()
849 struct mlx5_esw_rate_group *group = priv; in mlx5_esw_devlink_rate_node_tx_max_set() local
857 err = esw_qos_set_group_max_rate(esw, group, tx_max, extack); in mlx5_esw_devlink_rate_node_tx_max_set()
865 struct mlx5_esw_rate_group *group; in mlx5_esw_devlink_rate_node_new() local
881 group = esw_qos_create_rate_group(esw, extack); in mlx5_esw_devlink_rate_node_new()
882 if (IS_ERR(group)) { in mlx5_esw_devlink_rate_node_new()
883 err = PTR_ERR(group); in mlx5_esw_devlink_rate_node_new()
887 *priv = group; in mlx5_esw_devlink_rate_node_new()
896 struct mlx5_esw_rate_group *group = priv; in mlx5_esw_devlink_rate_node_del() local
905 err = esw_qos_destroy_rate_group(esw, group, extack); in mlx5_esw_devlink_rate_node_del()
912 struct mlx5_esw_rate_group *group, in mlx5_esw_qos_vport_update_group() argument
918 if (!vport->qos.enabled && !group) in mlx5_esw_qos_vport_update_group()
923 err = esw_qos_vport_update_group(esw, vport, group, extack); in mlx5_esw_qos_vport_update_group()
934 struct mlx5_esw_rate_group *group; in mlx5_esw_devlink_rate_parent_set() local
941 group = parent_priv; in mlx5_esw_devlink_rate_parent_set()
942 return mlx5_esw_qos_vport_update_group(vport->dev->priv.eswitch, vport, group, extack); in mlx5_esw_devlink_rate_parent_set()