Lines Matching refs:fg

599 	struct mlx5_flow_group *fg;
603 fs_get_obj(fg, fte->node.parent);
604 fs_get_obj(ft, fg->node.parent);
608 err = root->cmds->update_fte(root, ft, fg, fte->modify_mask, fte);
611 "%s can't del rule fg id=%d fte_index=%d\n",
612 __func__, fg->id, fte->index);
665 struct mlx5_flow_group *fg;
671 fs_get_obj(fg, fte->node.parent);
672 fs_get_obj(ft, fg->node.parent);
683 fte->index, fg->id);
691 struct mlx5_flow_group *fg;
696 fs_get_obj(fg, fte->node.parent);
698 err = rhashtable_remove_fast(&fg->ftes_hash,
702 ida_free(&fg->fte_allocator, fte->index - fg->start_index);
709 struct mlx5_flow_group *fg;
713 fs_get_obj(fg, node);
714 fs_get_obj(ft, fg->node.parent);
716 trace_mlx5_fs_del_fg(fg);
719 if (fg->node.active && root->cmds->destroy_flow_group(root, ft, fg))
720 mlx5_core_warn(dev, "flow steering can't destroy fg %d of ft %d\n",
721 fg->id, ft->id);
727 struct mlx5_flow_group *fg;
731 fs_get_obj(fg, node);
732 fs_get_obj(ft, fg->node.parent);
734 rhashtable_destroy(&fg->ftes_hash);
735 ida_destroy(&fg->fte_allocator);
737 fg->max_ftes == ft->autogroup.group_size &&
738 fg->start_index < ft->autogroup.max_fte)
741 &fg->hash,
744 kmem_cache_free(steering->fgs_cache, fg);
747 static int insert_fte(struct mlx5_flow_group *fg, struct fs_fte *fte)
752 index = ida_alloc_max(&fg->fte_allocator, fg->max_ftes - 1, GFP_KERNEL);
756 fte->index = index + fg->start_index;
757 ret = rhashtable_insert_fast(&fg->ftes_hash,
763 tree_add_node(&fte->node, &fg->node);
764 list_add_tail(&fte->node.list, &fg->node.children);
768 ida_free(&fg->fte_allocator, index);
794 struct mlx5_flow_group *fg)
796 rhashtable_destroy(&fg->ftes_hash);
797 kmem_cache_free(steering->fgs_cache, fg);
806 struct mlx5_flow_group *fg;
809 fg = kmem_cache_zalloc(steering->fgs_cache, GFP_KERNEL);
810 if (!fg)
813 ret = rhashtable_init(&fg->ftes_hash, &rhash_fte);
815 kmem_cache_free(steering->fgs_cache, fg);
819 ida_init(&fg->fte_allocator);
820 fg->mask.match_criteria_enable = match_criteria_enable;
821 memcpy(&fg->mask.match_criteria, match_criteria,
822 sizeof(fg->mask.match_criteria));
823 fg->node.type = FS_TYPE_FLOW_GROUP;
824 fg->start_index = start_index;
825 fg->max_ftes = end_index - start_index + 1;
827 return fg;
838 struct mlx5_flow_group *fg;
841 fg = alloc_flow_group(steering, match_criteria_enable, match_criteria,
843 if (IS_ERR(fg))
844 return fg;
848 &fg->hash,
851 dealloc_flow_group(steering, fg);
855 tree_init_node(&fg->node, del_hw_flow_group, del_sw_flow_group);
856 tree_add_node(&fg->node, &ft->node);
858 list_add(&fg->node.list, prev);
861 return fg;
1111 struct mlx5_flow_group *fg;
1120 fs_get_obj(fg, fte->node.parent);
1121 fs_get_obj(ft, fg->node.parent);
1125 err = root->cmds->update_fte(root, ft, fg,
1399 struct mlx5_flow_group *fg;
1406 fg = alloc_insert_flow_group(ft, match_criteria_enable, match_criteria,
1410 if (IS_ERR(fg))
1411 return fg;
1413 err = root->cmds->create_flow_group(root, ft, fg_in, fg);
1415 tree_put_node(&fg->node, false);
1418 trace_mlx5_fs_add_fg(fg);
1419 fg->node.active = true;
1421 return fg;
1536 struct mlx5_flow_group *fg,
1556 fs_get_obj(ft, fg->node.parent);
1557 root = find_root(&fg->node);
1559 err = root->cmds->create_fte(root, ft, fg, fte);
1561 err = root->cmds->update_fte(root, ft, fg, modify_mask, fte);
1567 atomic_inc(&fg->node.version);
1584 struct mlx5_flow_group *fg;
1597 fs_for_each_fg(fg, ft) {
1598 if (candidate_index + group_size > fg->start_index)
1599 candidate_index = fg->start_index + fg->max_ftes;
1602 prev = &fg->node.list;
1608 fg = alloc_insert_flow_group(ft,
1614 if (IS_ERR(fg))
1621 return fg;
1625 struct mlx5_flow_group *fg)
1640 fg->mask.match_criteria_enable);
1641 MLX5_SET(create_flow_group_in, in, start_flow_index, fg->start_index);
1642 MLX5_SET(create_flow_group_in, in, end_flow_index, fg->start_index +
1643 fg->max_ftes - 1);
1645 misc = MLX5_ADDR_OF(fte_match_param, fg->mask.match_criteria,
1654 memcpy(match_criteria_addr, fg->mask.match_criteria,
1655 sizeof(fg->mask.match_criteria));
1657 err = root->cmds->create_flow_group(root, ft, in, fg);
1659 fg->node.active = true;
1660 trace_mlx5_fs_add_fg(fg);
1795 static struct mlx5_flow_handle *add_rule_fg(struct mlx5_flow_group *fg,
1813 handle = add_rule_fte(fte, fg, dest, dest_num,
1889 struct mlx5_flow_group *fg,
1903 if (fg && fg != g)
2010 * Try to add a new fte to any matching fg.
2085 if (flow_act->fg && ft->autogroup.active)
2100 err = build_match_list(&match_head, ft, spec, flow_act->fg, take_write);
2398 void mlx5_destroy_flow_group(struct mlx5_flow_group *fg)
2400 if (tree_remove_node(&fg->node, false))
2401 mlx5_core_warn(get_dev(&fg->node), "Flow group %d wasn't destroyed, refcount > 1\n",
2402 fg->id);