summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/mellanox/mlx5/core/esw
diff options
context:
space:
mode:
authorChris Mi <cmi@nvidia.com>2021-08-18 10:52:18 +0300
committerSaeed Mahameed <saeedm@nvidia.com>2021-08-20 07:50:36 +0300
commit0027d70c73c954aacf3e4efb1774dd58151b6e54 (patch)
tree85816754d17e61a8dd2ebecb4b012f6e4b28f171 /drivers/net/ethernet/mellanox/mlx5/core/esw
parent5024fa95a144ef4ce9c0039155a553e59c3850be (diff)
downloadlinux-0027d70c73c954aacf3e4efb1774dd58151b6e54.tar.xz
net/mlx5e: Move esw/sample to en/tc/sample
Module sample belongs to en/tc instead of esw. Move it and rename accordingly. Signed-off-by: Chris Mi <cmi@nvidia.com> Reviewed-by: Roi Dayan <roid@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx5/core/esw')
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/esw/sample.c585
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/esw/sample.h40
2 files changed, 0 insertions, 625 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/sample.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/sample.c
deleted file mode 100644
index 34e1fd908686..000000000000
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/sample.c
+++ /dev/null
@@ -1,585 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
-/* Copyright (c) 2021 Mellanox Technologies. */
-
-#include <linux/skbuff.h>
-#include <net/psample.h>
-#include "en/mapping.h"
-#include "esw/sample.h"
-#include "eswitch.h"
-#include "en_tc.h"
-#include "fs_core.h"
-
-#define MLX5_ESW_VPORT_TBL_SIZE_SAMPLE (64 * 1024)
-
-static const struct esw_vport_tbl_namespace mlx5_esw_vport_tbl_sample_ns = {
- .max_fte = MLX5_ESW_VPORT_TBL_SIZE_SAMPLE,
- .max_num_groups = 0, /* default num of groups */
- .flags = MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT | MLX5_FLOW_TABLE_TUNNEL_EN_DECAP,
-};
-
-struct mlx5_esw_psample {
- struct mlx5_eswitch *esw;
- struct mlx5_flow_table *termtbl;
- struct mlx5_flow_handle *termtbl_rule;
- DECLARE_HASHTABLE(hashtbl, 8);
- struct mutex ht_lock; /* protect hashtbl */
- DECLARE_HASHTABLE(restore_hashtbl, 8);
- struct mutex restore_lock; /* protect restore_hashtbl */
-};
-
-struct mlx5_sampler {
- struct hlist_node hlist;
- u32 sampler_id;
- u32 sample_ratio;
- u32 sample_table_id;
- u32 default_table_id;
- int count;
-};
-
-struct mlx5_sample_flow {
- struct mlx5_sampler *sampler;
- struct mlx5_sample_restore *restore;
- struct mlx5_flow_attr *pre_attr;
- struct mlx5_flow_handle *pre_rule;
- struct mlx5_flow_handle *rule;
-};
-
-struct mlx5_sample_restore {
- struct hlist_node hlist;
- struct mlx5_modify_hdr *modify_hdr;
- struct mlx5_flow_handle *rule;
- u32 obj_id;
- int count;
-};
-
-static int
-sampler_termtbl_create(struct mlx5_esw_psample *esw_psample)
-{
- struct mlx5_eswitch *esw = esw_psample->esw;
- struct mlx5_flow_table_attr ft_attr = {};
- struct mlx5_flow_destination dest = {};
- struct mlx5_core_dev *dev = esw->dev;
- struct mlx5_flow_namespace *root_ns;
- struct mlx5_flow_act act = {};
- int err;
-
- if (!MLX5_CAP_ESW_FLOWTABLE_FDB(dev, termination_table)) {
- mlx5_core_warn(dev, "termination table is not supported\n");
- return -EOPNOTSUPP;
- }
-
- root_ns = mlx5_get_flow_namespace(dev, MLX5_FLOW_NAMESPACE_FDB);
- if (!root_ns) {
- mlx5_core_warn(dev, "failed to get FDB flow namespace\n");
- return -EOPNOTSUPP;
- }
-
- ft_attr.flags = MLX5_FLOW_TABLE_TERMINATION | MLX5_FLOW_TABLE_UNMANAGED;
- ft_attr.autogroup.max_num_groups = 1;
- ft_attr.prio = FDB_SLOW_PATH;
- ft_attr.max_fte = 1;
- ft_attr.level = 1;
- esw_psample->termtbl = mlx5_create_auto_grouped_flow_table(root_ns, &ft_attr);
- if (IS_ERR(esw_psample->termtbl)) {
- err = PTR_ERR(esw_psample->termtbl);
- mlx5_core_warn(dev, "failed to create termtbl, err: %d\n", err);
- return err;
- }
-
- act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
- dest.vport.num = esw->manager_vport;
- esw_psample->termtbl_rule = mlx5_add_flow_rules(esw_psample->termtbl, NULL, &act, &dest, 1);
- if (IS_ERR(esw_psample->termtbl_rule)) {
- err = PTR_ERR(esw_psample->termtbl_rule);
- mlx5_core_warn(dev, "failed to create termtbl rule, err: %d\n", err);
- mlx5_destroy_flow_table(esw_psample->termtbl);
- return err;
- }
-
- return 0;
-}
-
-static void
-sampler_termtbl_destroy(struct mlx5_esw_psample *esw_psample)
-{
- mlx5_del_flow_rules(esw_psample->termtbl_rule);
- mlx5_destroy_flow_table(esw_psample->termtbl);
-}
-
-static int
-sampler_obj_create(struct mlx5_core_dev *mdev, struct mlx5_sampler *sampler)
-{
- u32 in[MLX5_ST_SZ_DW(create_sampler_obj_in)] = {};
- u32 out[MLX5_ST_SZ_DW(general_obj_out_cmd_hdr)];
- u64 general_obj_types;
- void *obj;
- int err;
-
- general_obj_types = MLX5_CAP_GEN_64(mdev, general_obj_types);
- if (!(general_obj_types & MLX5_HCA_CAP_GENERAL_OBJECT_TYPES_SAMPLER))
- return -EOPNOTSUPP;
- if (!MLX5_CAP_ESW_FLOWTABLE_FDB(mdev, ignore_flow_level))
- return -EOPNOTSUPP;
-
- obj = MLX5_ADDR_OF(create_sampler_obj_in, in, sampler_object);
- MLX5_SET(sampler_obj, obj, table_type, FS_FT_FDB);
- MLX5_SET(sampler_obj, obj, ignore_flow_level, 1);
- MLX5_SET(sampler_obj, obj, level, 1);
- MLX5_SET(sampler_obj, obj, sample_ratio, sampler->sample_ratio);
- MLX5_SET(sampler_obj, obj, sample_table_id, sampler->sample_table_id);
- MLX5_SET(sampler_obj, obj, default_table_id, sampler->default_table_id);
- MLX5_SET(general_obj_in_cmd_hdr, in, opcode, MLX5_CMD_OP_CREATE_GENERAL_OBJECT);
- MLX5_SET(general_obj_in_cmd_hdr, in, obj_type, MLX5_GENERAL_OBJECT_TYPES_SAMPLER);
-
- err = mlx5_cmd_exec(mdev, in, sizeof(in), out, sizeof(out));
- if (!err)
- sampler->sampler_id = MLX5_GET(general_obj_out_cmd_hdr, out, obj_id);
-
- return err;
-}
-
-static void
-sampler_obj_destroy(struct mlx5_core_dev *mdev, u32 sampler_id)
-{
- u32 in[MLX5_ST_SZ_DW(general_obj_in_cmd_hdr)] = {};
- u32 out[MLX5_ST_SZ_DW(general_obj_out_cmd_hdr)];
-
- MLX5_SET(general_obj_in_cmd_hdr, in, opcode, MLX5_CMD_OP_DESTROY_GENERAL_OBJECT);
- MLX5_SET(general_obj_in_cmd_hdr, in, obj_type, MLX5_GENERAL_OBJECT_TYPES_SAMPLER);
- MLX5_SET(general_obj_in_cmd_hdr, in, obj_id, sampler_id);
-
- mlx5_cmd_exec(mdev, in, sizeof(in), out, sizeof(out));
-}
-
-static u32
-sampler_hash(u32 sample_ratio, u32 default_table_id)
-{
- return jhash_2words(sample_ratio, default_table_id, 0);
-}
-
-static int
-sampler_cmp(u32 sample_ratio1, u32 default_table_id1, u32 sample_ratio2, u32 default_table_id2)
-{
- return sample_ratio1 != sample_ratio2 || default_table_id1 != default_table_id2;
-}
-
-static struct mlx5_sampler *
-sampler_get(struct mlx5_esw_psample *esw_psample, u32 sample_ratio, u32 default_table_id)
-{
- struct mlx5_sampler *sampler;
- u32 hash_key;
- int err;
-
- mutex_lock(&esw_psample->ht_lock);
- hash_key = sampler_hash(sample_ratio, default_table_id);
- hash_for_each_possible(esw_psample->hashtbl, sampler, hlist, hash_key)
- if (!sampler_cmp(sampler->sample_ratio, sampler->default_table_id,
- sample_ratio, default_table_id))
- goto add_ref;
-
- sampler = kzalloc(sizeof(*sampler), GFP_KERNEL);
- if (!sampler) {
- err = -ENOMEM;
- goto err_alloc;
- }
-
- sampler->sample_table_id = esw_psample->termtbl->id;
- sampler->default_table_id = default_table_id;
- sampler->sample_ratio = sample_ratio;
-
- err = sampler_obj_create(esw_psample->esw->dev, sampler);
- if (err)
- goto err_create;
-
- hash_add(esw_psample->hashtbl, &sampler->hlist, hash_key);
-
-add_ref:
- sampler->count++;
- mutex_unlock(&esw_psample->ht_lock);
- return sampler;
-
-err_create:
- kfree(sampler);
-err_alloc:
- mutex_unlock(&esw_psample->ht_lock);
- return ERR_PTR(err);
-}
-
-static void
-sampler_put(struct mlx5_esw_psample *esw_psample, struct mlx5_sampler *sampler)
-{
- mutex_lock(&esw_psample->ht_lock);
- if (--sampler->count == 0) {
- hash_del(&sampler->hlist);
- sampler_obj_destroy(esw_psample->esw->dev, sampler->sampler_id);
- kfree(sampler);
- }
- mutex_unlock(&esw_psample->ht_lock);
-}
-
-static struct mlx5_modify_hdr *
-sample_metadata_rule_get(struct mlx5_core_dev *mdev, u32 obj_id)
-{
- struct mlx5e_tc_mod_hdr_acts mod_acts = {};
- struct mlx5_modify_hdr *modify_hdr;
- int err;
-
- err = mlx5e_tc_match_to_reg_set(mdev, &mod_acts, MLX5_FLOW_NAMESPACE_FDB,
- CHAIN_TO_REG, obj_id);
- if (err)
- goto err_set_regc0;
-
- modify_hdr = mlx5_modify_header_alloc(mdev, MLX5_FLOW_NAMESPACE_FDB,
- mod_acts.num_actions,
- mod_acts.actions);
- if (IS_ERR(modify_hdr)) {
- err = PTR_ERR(modify_hdr);
- goto err_modify_hdr;
- }
-
- dealloc_mod_hdr_actions(&mod_acts);
- return modify_hdr;
-
-err_modify_hdr:
- dealloc_mod_hdr_actions(&mod_acts);
-err_set_regc0:
- return ERR_PTR(err);
-}
-
-static struct mlx5_sample_restore *
-sample_restore_get(struct mlx5_esw_psample *esw_psample, u32 obj_id)
-{
- struct mlx5_eswitch *esw = esw_psample->esw;
- struct mlx5_core_dev *mdev = esw->dev;
- struct mlx5_sample_restore *restore;
- struct mlx5_modify_hdr *modify_hdr;
- int err;
-
- mutex_lock(&esw_psample->restore_lock);
- hash_for_each_possible(esw_psample->restore_hashtbl, restore, hlist, obj_id)
- if (restore->obj_id == obj_id)
- goto add_ref;
-
- restore = kzalloc(sizeof(*restore), GFP_KERNEL);
- if (!restore) {
- err = -ENOMEM;
- goto err_alloc;
- }
- restore->obj_id = obj_id;
-
- modify_hdr = sample_metadata_rule_get(mdev, obj_id);
- if (IS_ERR(modify_hdr)) {
- err = PTR_ERR(modify_hdr);
- goto err_modify_hdr;
- }
- restore->modify_hdr = modify_hdr;
-
- restore->rule = esw_add_restore_rule(esw, obj_id);
- if (IS_ERR(restore->rule)) {
- err = PTR_ERR(restore->rule);
- goto err_restore;
- }
-
- hash_add(esw_psample->restore_hashtbl, &restore->hlist, obj_id);
-add_ref:
- restore->count++;
- mutex_unlock(&esw_psample->restore_lock);
- return restore;
-
-err_restore:
- mlx5_modify_header_dealloc(mdev, restore->modify_hdr);
-err_modify_hdr:
- kfree(restore);
-err_alloc:
- mutex_unlock(&esw_psample->restore_lock);
- return ERR_PTR(err);
-}
-
-static void
-sample_restore_put(struct mlx5_esw_psample *esw_psample, struct mlx5_sample_restore *restore)
-{
- mutex_lock(&esw_psample->restore_lock);
- if (--restore->count == 0)
- hash_del(&restore->hlist);
- mutex_unlock(&esw_psample->restore_lock);
-
- if (!restore->count) {
- mlx5_del_flow_rules(restore->rule);
- mlx5_modify_header_dealloc(esw_psample->esw->dev, restore->modify_hdr);
- kfree(restore);
- }
-}
-
-void mlx5_esw_sample_skb(struct sk_buff *skb, struct mlx5_mapped_obj *mapped_obj)
-{
- u32 trunc_size = mapped_obj->sample.trunc_size;
- struct psample_group psample_group = {};
- struct psample_metadata md = {};
-
- md.trunc_size = trunc_size ? min(trunc_size, skb->len) : skb->len;
- md.in_ifindex = skb->dev->ifindex;
- psample_group.group_num = mapped_obj->sample.group_id;
- psample_group.net = &init_net;
- skb_push(skb, skb->mac_len);
-
- psample_sample_packet(&psample_group, skb, mapped_obj->sample.rate, &md);
-}
-
-/* For the following typical flow table:
- *
- * +-------------------------------+
- * + original flow table +
- * +-------------------------------+
- * + original match +
- * +-------------------------------+
- * + sample action + other actions +
- * +-------------------------------+
- *
- * We translate the tc filter with sample action to the following HW model:
- *
- * +---------------------+
- * + original flow table +
- * +---------------------+
- * + original match +
- * +---------------------+
- * |
- * v
- * +------------------------------------------------+
- * + Flow Sampler Object +
- * +------------------------------------------------+
- * + sample ratio +
- * +------------------------------------------------+
- * + sample table id | default table id +
- * +------------------------------------------------+
- * | |
- * v v
- * +-----------------------------+ +----------------------------------------+
- * + sample table + + default table per <vport, chain, prio> +
- * +-----------------------------+ +----------------------------------------+
- * + forward to management vport + + original match +
- * +-----------------------------+ +----------------------------------------+
- * + other actions +
- * +----------------------------------------+
- */
-struct mlx5_flow_handle *
-mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample,
- struct mlx5_flow_spec *spec,
- struct mlx5_flow_attr *attr)
-{
- struct mlx5_esw_flow_attr *esw_attr = attr->esw_attr;
- struct mlx5_vport_tbl_attr per_vport_tbl_attr;
- struct mlx5_esw_flow_attr *pre_esw_attr;
- struct mlx5_mapped_obj restore_obj = {};
- struct mlx5_sample_flow *sample_flow;
- struct mlx5_sample_attr *sample_attr;
- struct mlx5_flow_table *default_tbl;
- struct mlx5_flow_attr *pre_attr;
- struct mlx5_eswitch *esw;
- u32 obj_id;
- int err;
-
- if (IS_ERR_OR_NULL(esw_psample))
- return ERR_PTR(-EOPNOTSUPP);
-
- /* If slow path flag is set, eg. when the neigh is invalid for encap,
- * don't offload sample action.
- */
- esw = esw_psample->esw;
- if (attr->flags & MLX5_ESW_ATTR_FLAG_SLOW_PATH)
- return mlx5_eswitch_add_offloaded_rule(esw, spec, attr);
-
- sample_flow = kzalloc(sizeof(*sample_flow), GFP_KERNEL);
- if (!sample_flow)
- return ERR_PTR(-ENOMEM);
- esw_attr->sample->sample_flow = sample_flow;
-
- /* Allocate default table per vport, chain and prio. Otherwise, there is
- * only one default table for the same sampler object. Rules with different
- * prio and chain may overlap. For CT sample action, per vport default
- * table is needed to resotre the metadata.
- */
- per_vport_tbl_attr.chain = attr->chain;
- per_vport_tbl_attr.prio = attr->prio;
- per_vport_tbl_attr.vport = esw_attr->in_rep->vport;
- per_vport_tbl_attr.vport_ns = &mlx5_esw_vport_tbl_sample_ns;
- default_tbl = mlx5_esw_vporttbl_get(esw, &per_vport_tbl_attr);
- if (IS_ERR(default_tbl)) {
- err = PTR_ERR(default_tbl);
- goto err_default_tbl;
- }
-
- /* Perform the original matches on the default table.
- * Offload all actions except the sample action.
- */
- esw_attr->sample->sample_default_tbl = default_tbl;
- /* When offloading sample and encap action, if there is no valid
- * neigh data struct, a slow path rule is offloaded first. Source
- * port metadata match is set at that time. A per vport table is
- * already allocated. No need to match it again. So clear the source
- * port metadata match.
- */
- mlx5_eswitch_clear_rule_source_port(esw, spec);
- sample_flow->rule = mlx5_eswitch_add_offloaded_rule(esw, spec, attr);
- if (IS_ERR(sample_flow->rule)) {
- err = PTR_ERR(sample_flow->rule);
- goto err_offload_rule;
- }
-
- /* Create sampler object. */
- sample_flow->sampler = sampler_get(esw_psample, esw_attr->sample->rate, default_tbl->id);
- if (IS_ERR(sample_flow->sampler)) {
- err = PTR_ERR(sample_flow->sampler);
- goto err_sampler;
- }
-
- /* Create an id mapping reg_c0 value to sample object. */
- restore_obj.type = MLX5_MAPPED_OBJ_SAMPLE;
- restore_obj.sample.group_id = esw_attr->sample->group_num;
- restore_obj.sample.rate = esw_attr->sample->rate;
- restore_obj.sample.trunc_size = esw_attr->sample->trunc_size;
- err = mapping_add(esw->offloads.reg_c0_obj_pool, &restore_obj, &obj_id);
- if (err)
- goto err_obj_id;
- esw_attr->sample->restore_obj_id = obj_id;
-
- /* Create sample restore context. */
- sample_flow->restore = sample_restore_get(esw_psample, obj_id);
- if (IS_ERR(sample_flow->restore)) {
- err = PTR_ERR(sample_flow->restore);
- goto err_sample_restore;
- }
-
- /* Perform the original matches on the original table. Offload the
- * sample action. The destination is the sampler object.
- */
- pre_attr = mlx5_alloc_flow_attr(MLX5_FLOW_NAMESPACE_FDB);
- if (!pre_attr) {
- err = -ENOMEM;
- goto err_alloc_flow_attr;
- }
- sample_attr = kzalloc(sizeof(*sample_attr), GFP_KERNEL);
- if (!sample_attr) {
- err = -ENOMEM;
- goto err_alloc_sample_attr;
- }
- pre_esw_attr = pre_attr->esw_attr;
- pre_attr->action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST | MLX5_FLOW_CONTEXT_ACTION_MOD_HDR;
- pre_attr->modify_hdr = sample_flow->restore->modify_hdr;
- pre_attr->flags = MLX5_ESW_ATTR_FLAG_SAMPLE;
- pre_attr->chain = attr->chain;
- pre_attr->prio = attr->prio;
- pre_esw_attr->sample = sample_attr;
- pre_esw_attr->sample->sampler_id = sample_flow->sampler->sampler_id;
- pre_esw_attr->in_mdev = esw_attr->in_mdev;
- pre_esw_attr->in_rep = esw_attr->in_rep;
- sample_flow->pre_rule = mlx5_eswitch_add_offloaded_rule(esw, spec, pre_attr);
- if (IS_ERR(sample_flow->pre_rule)) {
- err = PTR_ERR(sample_flow->pre_rule);
- goto err_pre_offload_rule;
- }
- sample_flow->pre_attr = pre_attr;
-
- return sample_flow->rule;
-
-err_pre_offload_rule:
- kfree(sample_attr);
-err_alloc_sample_attr:
- kfree(pre_attr);
-err_alloc_flow_attr:
- sample_restore_put(esw_psample, sample_flow->restore);
-err_sample_restore:
- mapping_remove(esw->offloads.reg_c0_obj_pool, obj_id);
-err_obj_id:
- sampler_put(esw_psample, sample_flow->sampler);
-err_sampler:
- /* For sample offload, rule is added in default_tbl. No need to call
- * mlx5_esw_chains_put_table()
- */
- attr->prio = 0;
- attr->chain = 0;
- mlx5_eswitch_del_offloaded_rule(esw, sample_flow->rule, attr);
-err_offload_rule:
- mlx5_esw_vporttbl_put(esw, &per_vport_tbl_attr);
-err_default_tbl:
- kfree(sample_flow);
- return ERR_PTR(err);
-}
-
-void
-mlx5_esw_sample_unoffload(struct mlx5_esw_psample *esw_psample,
- struct mlx5_flow_handle *rule,
- struct mlx5_flow_attr *attr)
-{
- struct mlx5_esw_flow_attr *esw_attr = attr->esw_attr;
- struct mlx5_sample_flow *sample_flow;
- struct mlx5_vport_tbl_attr tbl_attr;
- struct mlx5_flow_attr *pre_attr;
- struct mlx5_eswitch *esw;
-
- if (IS_ERR_OR_NULL(esw_psample))
- return;
-
- /* If slow path flag is set, sample action is not offloaded.
- * No need to delete sample rule.
- */
- esw = esw_psample->esw;
- if (attr->flags & MLX5_ESW_ATTR_FLAG_SLOW_PATH) {
- mlx5_eswitch_del_offloaded_rule(esw, rule, attr);
- return;
- }
-
- sample_flow = esw_attr->sample->sample_flow;
- pre_attr = sample_flow->pre_attr;
- memset(pre_attr, 0, sizeof(*pre_attr));
- mlx5_eswitch_del_offloaded_rule(esw, sample_flow->pre_rule, pre_attr);
- mlx5_eswitch_del_offloaded_rule(esw, sample_flow->rule, attr);
-
- sample_restore_put(esw_psample, sample_flow->restore);
- mapping_remove(esw->offloads.reg_c0_obj_pool, esw_attr->sample->restore_obj_id);
- sampler_put(esw_psample, sample_flow->sampler);
- tbl_attr.chain = attr->chain;
- tbl_attr.prio = attr->prio;
- tbl_attr.vport = esw_attr->in_rep->vport;
- tbl_attr.vport_ns = &mlx5_esw_vport_tbl_sample_ns;
- mlx5_esw_vporttbl_put(esw, &tbl_attr);
-
- kfree(pre_attr->esw_attr->sample);
- kfree(pre_attr);
- kfree(sample_flow);
-}
-
-struct mlx5_esw_psample *
-mlx5_esw_sample_init(struct mlx5_eswitch *esw)
-{
- struct mlx5_esw_psample *esw_psample;
- int err;
-
- esw_psample = kzalloc(sizeof(*esw_psample), GFP_KERNEL);
- if (!esw_psample)
- return ERR_PTR(-ENOMEM);
- esw_psample->esw = esw;
- err = sampler_termtbl_create(esw_psample);
- if (err)
- goto err_termtbl;
-
- mutex_init(&esw_psample->ht_lock);
- mutex_init(&esw_psample->restore_lock);
-
- return esw_psample;
-
-err_termtbl:
- kfree(esw_psample);
- return ERR_PTR(err);
-}
-
-void
-mlx5_esw_sample_cleanup(struct mlx5_esw_psample *esw_psample)
-{
- if (IS_ERR_OR_NULL(esw_psample))
- return;
-
- mutex_destroy(&esw_psample->restore_lock);
- mutex_destroy(&esw_psample->ht_lock);
- sampler_termtbl_destroy(esw_psample);
- kfree(esw_psample);
-}
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/sample.h b/drivers/net/ethernet/mellanox/mlx5/core/esw/sample.h
deleted file mode 100644
index c27525bd82d0..000000000000
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/sample.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
-/* Copyright (c) 2021 Mellanox Technologies. */
-
-#ifndef __MLX5_EN_TC_SAMPLE_H__
-#define __MLX5_EN_TC_SAMPLE_H__
-
-#include "eswitch.h"
-
-struct mlx5_flow_attr;
-struct mlx5_esw_psample;
-
-struct mlx5_sample_attr {
- u32 group_num;
- u32 rate;
- u32 trunc_size;
- u32 restore_obj_id;
- u32 sampler_id;
- struct mlx5_flow_table *sample_default_tbl;
- struct mlx5_sample_flow *sample_flow;
-};
-
-void mlx5_esw_sample_skb(struct sk_buff *skb, struct mlx5_mapped_obj *mapped_obj);
-
-struct mlx5_flow_handle *
-mlx5_esw_sample_offload(struct mlx5_esw_psample *sample_priv,
- struct mlx5_flow_spec *spec,
- struct mlx5_flow_attr *attr);
-
-void
-mlx5_esw_sample_unoffload(struct mlx5_esw_psample *sample_priv,
- struct mlx5_flow_handle *rule,
- struct mlx5_flow_attr *attr);
-
-struct mlx5_esw_psample *
-mlx5_esw_sample_init(struct mlx5_eswitch *esw);
-
-void
-mlx5_esw_sample_cleanup(struct mlx5_esw_psample *esw_psample);
-
-#endif /* __MLX5_EN_TC_SAMPLE_H__ */