Commit 0027d70c authored by Chris Mi's avatar Chris Mi Committed by Saeed Mahameed

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: default avatarChris Mi <cmi@nvidia.com>
Reviewed-by: default avatarRoi Dayan <roid@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
parent 5024fa95
...@@ -46,6 +46,7 @@ mlx5_core-$(CONFIG_MLX5_CLS_ACT) += en_tc.o en/rep/tc.o en/rep/neigh.o \ ...@@ -46,6 +46,7 @@ mlx5_core-$(CONFIG_MLX5_CLS_ACT) += en_tc.o en/rep/tc.o en/rep/neigh.o \
en/tc_tun_vxlan.o en/tc_tun_gre.o en/tc_tun_geneve.o \ en/tc_tun_vxlan.o en/tc_tun_gre.o en/tc_tun_geneve.o \
en/tc_tun_mplsoudp.o diag/en_tc_tracepoint.o en/tc_tun_mplsoudp.o diag/en_tc_tracepoint.o
mlx5_core-$(CONFIG_MLX5_TC_CT) += en/tc_ct.o mlx5_core-$(CONFIG_MLX5_TC_CT) += en/tc_ct.o
mlx5_core-$(CONFIG_MLX5_TC_SAMPLE) += en/tc/sample.o
# #
# Core extra # Core extra
...@@ -56,7 +57,6 @@ mlx5_core-$(CONFIG_MLX5_ESWITCH) += esw/acl/helper.o \ ...@@ -56,7 +57,6 @@ mlx5_core-$(CONFIG_MLX5_ESWITCH) += esw/acl/helper.o \
esw/acl/egress_lgcy.o esw/acl/egress_ofld.o \ esw/acl/egress_lgcy.o esw/acl/egress_ofld.o \
esw/acl/ingress_lgcy.o esw/acl/ingress_ofld.o \ esw/acl/ingress_lgcy.o esw/acl/ingress_ofld.o \
esw/devlink_port.o esw/vporttbl.o esw/devlink_port.o esw/vporttbl.o
mlx5_core-$(CONFIG_MLX5_TC_SAMPLE) += esw/sample.o
mlx5_core-$(CONFIG_MLX5_BRIDGE) += esw/bridge.o en/rep/bridge.o mlx5_core-$(CONFIG_MLX5_BRIDGE) += esw/bridge.o en/rep/bridge.o
mlx5_core-$(CONFIG_MLX5_MPFS) += lib/mpfs.o mlx5_core-$(CONFIG_MLX5_MPFS) += lib/mpfs.o
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include "en/mapping.h" #include "en/mapping.h"
#include "en/tc_tun.h" #include "en/tc_tun.h"
#include "lib/port_tun.h" #include "lib/port_tun.h"
#include "esw/sample.h" #include "en/tc/sample.h"
struct mlx5e_rep_indr_block_priv { struct mlx5e_rep_indr_block_priv {
struct net_device *netdev; struct net_device *netdev;
...@@ -677,7 +677,7 @@ bool mlx5e_rep_tc_update_skb(struct mlx5_cqe64 *cqe, ...@@ -677,7 +677,7 @@ bool mlx5e_rep_tc_update_skb(struct mlx5_cqe64 *cqe,
#endif /* CONFIG_NET_TC_SKB_EXT */ #endif /* CONFIG_NET_TC_SKB_EXT */
#if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE) #if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE)
if (mapped_obj.type == MLX5_MAPPED_OBJ_SAMPLE) { if (mapped_obj.type == MLX5_MAPPED_OBJ_SAMPLE) {
mlx5_esw_sample_skb(skb, &mapped_obj); mlx5e_tc_sample_skb(skb, &mapped_obj);
return false; return false;
} }
#endif /* CONFIG_MLX5_TC_SAMPLE */ #endif /* CONFIG_MLX5_TC_SAMPLE */
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#include <linux/skbuff.h> #include <linux/skbuff.h>
#include <net/psample.h> #include <net/psample.h>
#include "en/mapping.h" #include "en/mapping.h"
#include "esw/sample.h" #include "sample.h"
#include "eswitch.h" #include "eswitch.h"
#include "en_tc.h" #include "en_tc.h"
#include "fs_core.h" #include "fs_core.h"
...@@ -17,7 +17,7 @@ static const struct esw_vport_tbl_namespace mlx5_esw_vport_tbl_sample_ns = { ...@@ -17,7 +17,7 @@ static const struct esw_vport_tbl_namespace mlx5_esw_vport_tbl_sample_ns = {
.flags = MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT | MLX5_FLOW_TABLE_TUNNEL_EN_DECAP, .flags = MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT | MLX5_FLOW_TABLE_TUNNEL_EN_DECAP,
}; };
struct mlx5_esw_psample { struct mlx5e_tc_psample {
struct mlx5_eswitch *esw; struct mlx5_eswitch *esw;
struct mlx5_flow_table *termtbl; struct mlx5_flow_table *termtbl;
struct mlx5_flow_handle *termtbl_rule; struct mlx5_flow_handle *termtbl_rule;
...@@ -27,7 +27,7 @@ struct mlx5_esw_psample { ...@@ -27,7 +27,7 @@ struct mlx5_esw_psample {
struct mutex restore_lock; /* protect restore_hashtbl */ struct mutex restore_lock; /* protect restore_hashtbl */
}; };
struct mlx5_sampler { struct mlx5e_sampler {
struct hlist_node hlist; struct hlist_node hlist;
u32 sampler_id; u32 sampler_id;
u32 sample_ratio; u32 sample_ratio;
...@@ -36,15 +36,15 @@ struct mlx5_sampler { ...@@ -36,15 +36,15 @@ struct mlx5_sampler {
int count; int count;
}; };
struct mlx5_sample_flow { struct mlx5e_sample_flow {
struct mlx5_sampler *sampler; struct mlx5e_sampler *sampler;
struct mlx5_sample_restore *restore; struct mlx5e_sample_restore *restore;
struct mlx5_flow_attr *pre_attr; struct mlx5_flow_attr *pre_attr;
struct mlx5_flow_handle *pre_rule; struct mlx5_flow_handle *pre_rule;
struct mlx5_flow_handle *rule; struct mlx5_flow_handle *rule;
}; };
struct mlx5_sample_restore { struct mlx5e_sample_restore {
struct hlist_node hlist; struct hlist_node hlist;
struct mlx5_modify_hdr *modify_hdr; struct mlx5_modify_hdr *modify_hdr;
struct mlx5_flow_handle *rule; struct mlx5_flow_handle *rule;
...@@ -53,9 +53,9 @@ struct mlx5_sample_restore { ...@@ -53,9 +53,9 @@ struct mlx5_sample_restore {
}; };
static int static int
sampler_termtbl_create(struct mlx5_esw_psample *esw_psample) sampler_termtbl_create(struct mlx5e_tc_psample *tc_psample)
{ {
struct mlx5_eswitch *esw = esw_psample->esw; struct mlx5_eswitch *esw = tc_psample->esw;
struct mlx5_flow_table_attr ft_attr = {}; struct mlx5_flow_table_attr ft_attr = {};
struct mlx5_flow_destination dest = {}; struct mlx5_flow_destination dest = {};
struct mlx5_core_dev *dev = esw->dev; struct mlx5_core_dev *dev = esw->dev;
...@@ -79,20 +79,20 @@ sampler_termtbl_create(struct mlx5_esw_psample *esw_psample) ...@@ -79,20 +79,20 @@ sampler_termtbl_create(struct mlx5_esw_psample *esw_psample)
ft_attr.prio = FDB_SLOW_PATH; ft_attr.prio = FDB_SLOW_PATH;
ft_attr.max_fte = 1; ft_attr.max_fte = 1;
ft_attr.level = 1; ft_attr.level = 1;
esw_psample->termtbl = mlx5_create_auto_grouped_flow_table(root_ns, &ft_attr); tc_psample->termtbl = mlx5_create_auto_grouped_flow_table(root_ns, &ft_attr);
if (IS_ERR(esw_psample->termtbl)) { if (IS_ERR(tc_psample->termtbl)) {
err = PTR_ERR(esw_psample->termtbl); err = PTR_ERR(tc_psample->termtbl);
mlx5_core_warn(dev, "failed to create termtbl, err: %d\n", err); mlx5_core_warn(dev, "failed to create termtbl, err: %d\n", err);
return err; return err;
} }
act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST; act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
dest.vport.num = esw->manager_vport; dest.vport.num = esw->manager_vport;
esw_psample->termtbl_rule = mlx5_add_flow_rules(esw_psample->termtbl, NULL, &act, &dest, 1); tc_psample->termtbl_rule = mlx5_add_flow_rules(tc_psample->termtbl, NULL, &act, &dest, 1);
if (IS_ERR(esw_psample->termtbl_rule)) { if (IS_ERR(tc_psample->termtbl_rule)) {
err = PTR_ERR(esw_psample->termtbl_rule); err = PTR_ERR(tc_psample->termtbl_rule);
mlx5_core_warn(dev, "failed to create termtbl rule, err: %d\n", err); mlx5_core_warn(dev, "failed to create termtbl rule, err: %d\n", err);
mlx5_destroy_flow_table(esw_psample->termtbl); mlx5_destroy_flow_table(tc_psample->termtbl);
return err; return err;
} }
...@@ -100,14 +100,14 @@ sampler_termtbl_create(struct mlx5_esw_psample *esw_psample) ...@@ -100,14 +100,14 @@ sampler_termtbl_create(struct mlx5_esw_psample *esw_psample)
} }
static void static void
sampler_termtbl_destroy(struct mlx5_esw_psample *esw_psample) sampler_termtbl_destroy(struct mlx5e_tc_psample *tc_psample)
{ {
mlx5_del_flow_rules(esw_psample->termtbl_rule); mlx5_del_flow_rules(tc_psample->termtbl_rule);
mlx5_destroy_flow_table(esw_psample->termtbl); mlx5_destroy_flow_table(tc_psample->termtbl);
} }
static int static int
sampler_obj_create(struct mlx5_core_dev *mdev, struct mlx5_sampler *sampler) sampler_obj_create(struct mlx5_core_dev *mdev, struct mlx5e_sampler *sampler)
{ {
u32 in[MLX5_ST_SZ_DW(create_sampler_obj_in)] = {}; u32 in[MLX5_ST_SZ_DW(create_sampler_obj_in)] = {};
u32 out[MLX5_ST_SZ_DW(general_obj_out_cmd_hdr)]; u32 out[MLX5_ST_SZ_DW(general_obj_out_cmd_hdr)];
...@@ -163,16 +163,16 @@ sampler_cmp(u32 sample_ratio1, u32 default_table_id1, u32 sample_ratio2, u32 def ...@@ -163,16 +163,16 @@ sampler_cmp(u32 sample_ratio1, u32 default_table_id1, u32 sample_ratio2, u32 def
return sample_ratio1 != sample_ratio2 || default_table_id1 != default_table_id2; return sample_ratio1 != sample_ratio2 || default_table_id1 != default_table_id2;
} }
static struct mlx5_sampler * static struct mlx5e_sampler *
sampler_get(struct mlx5_esw_psample *esw_psample, u32 sample_ratio, u32 default_table_id) sampler_get(struct mlx5e_tc_psample *tc_psample, u32 sample_ratio, u32 default_table_id)
{ {
struct mlx5_sampler *sampler; struct mlx5e_sampler *sampler;
u32 hash_key; u32 hash_key;
int err; int err;
mutex_lock(&esw_psample->ht_lock); mutex_lock(&tc_psample->ht_lock);
hash_key = sampler_hash(sample_ratio, default_table_id); hash_key = sampler_hash(sample_ratio, default_table_id);
hash_for_each_possible(esw_psample->hashtbl, sampler, hlist, hash_key) hash_for_each_possible(tc_psample->hashtbl, sampler, hlist, hash_key)
if (!sampler_cmp(sampler->sample_ratio, sampler->default_table_id, if (!sampler_cmp(sampler->sample_ratio, sampler->default_table_id,
sample_ratio, default_table_id)) sample_ratio, default_table_id))
goto add_ref; goto add_ref;
...@@ -183,38 +183,38 @@ sampler_get(struct mlx5_esw_psample *esw_psample, u32 sample_ratio, u32 default_ ...@@ -183,38 +183,38 @@ sampler_get(struct mlx5_esw_psample *esw_psample, u32 sample_ratio, u32 default_
goto err_alloc; goto err_alloc;
} }
sampler->sample_table_id = esw_psample->termtbl->id; sampler->sample_table_id = tc_psample->termtbl->id;
sampler->default_table_id = default_table_id; sampler->default_table_id = default_table_id;
sampler->sample_ratio = sample_ratio; sampler->sample_ratio = sample_ratio;
err = sampler_obj_create(esw_psample->esw->dev, sampler); err = sampler_obj_create(tc_psample->esw->dev, sampler);
if (err) if (err)
goto err_create; goto err_create;
hash_add(esw_psample->hashtbl, &sampler->hlist, hash_key); hash_add(tc_psample->hashtbl, &sampler->hlist, hash_key);
add_ref: add_ref:
sampler->count++; sampler->count++;
mutex_unlock(&esw_psample->ht_lock); mutex_unlock(&tc_psample->ht_lock);
return sampler; return sampler;
err_create: err_create:
kfree(sampler); kfree(sampler);
err_alloc: err_alloc:
mutex_unlock(&esw_psample->ht_lock); mutex_unlock(&tc_psample->ht_lock);
return ERR_PTR(err); return ERR_PTR(err);
} }
static void static void
sampler_put(struct mlx5_esw_psample *esw_psample, struct mlx5_sampler *sampler) sampler_put(struct mlx5e_tc_psample *tc_psample, struct mlx5e_sampler *sampler)
{ {
mutex_lock(&esw_psample->ht_lock); mutex_lock(&tc_psample->ht_lock);
if (--sampler->count == 0) { if (--sampler->count == 0) {
hash_del(&sampler->hlist); hash_del(&sampler->hlist);
sampler_obj_destroy(esw_psample->esw->dev, sampler->sampler_id); sampler_obj_destroy(tc_psample->esw->dev, sampler->sampler_id);
kfree(sampler); kfree(sampler);
} }
mutex_unlock(&esw_psample->ht_lock); mutex_unlock(&tc_psample->ht_lock);
} }
static struct mlx5_modify_hdr * static struct mlx5_modify_hdr *
...@@ -246,17 +246,17 @@ sample_metadata_rule_get(struct mlx5_core_dev *mdev, u32 obj_id) ...@@ -246,17 +246,17 @@ sample_metadata_rule_get(struct mlx5_core_dev *mdev, u32 obj_id)
return ERR_PTR(err); return ERR_PTR(err);
} }
static struct mlx5_sample_restore * static struct mlx5e_sample_restore *
sample_restore_get(struct mlx5_esw_psample *esw_psample, u32 obj_id) sample_restore_get(struct mlx5e_tc_psample *tc_psample, u32 obj_id)
{ {
struct mlx5_eswitch *esw = esw_psample->esw; struct mlx5_eswitch *esw = tc_psample->esw;
struct mlx5_core_dev *mdev = esw->dev; struct mlx5_core_dev *mdev = esw->dev;
struct mlx5_sample_restore *restore; struct mlx5e_sample_restore *restore;
struct mlx5_modify_hdr *modify_hdr; struct mlx5_modify_hdr *modify_hdr;
int err; int err;
mutex_lock(&esw_psample->restore_lock); mutex_lock(&tc_psample->restore_lock);
hash_for_each_possible(esw_psample->restore_hashtbl, restore, hlist, obj_id) hash_for_each_possible(tc_psample->restore_hashtbl, restore, hlist, obj_id)
if (restore->obj_id == obj_id) if (restore->obj_id == obj_id)
goto add_ref; goto add_ref;
...@@ -280,10 +280,10 @@ sample_restore_get(struct mlx5_esw_psample *esw_psample, u32 obj_id) ...@@ -280,10 +280,10 @@ sample_restore_get(struct mlx5_esw_psample *esw_psample, u32 obj_id)
goto err_restore; goto err_restore;
} }
hash_add(esw_psample->restore_hashtbl, &restore->hlist, obj_id); hash_add(tc_psample->restore_hashtbl, &restore->hlist, obj_id);
add_ref: add_ref:
restore->count++; restore->count++;
mutex_unlock(&esw_psample->restore_lock); mutex_unlock(&tc_psample->restore_lock);
return restore; return restore;
err_restore: err_restore:
...@@ -291,26 +291,26 @@ sample_restore_get(struct mlx5_esw_psample *esw_psample, u32 obj_id) ...@@ -291,26 +291,26 @@ sample_restore_get(struct mlx5_esw_psample *esw_psample, u32 obj_id)
err_modify_hdr: err_modify_hdr:
kfree(restore); kfree(restore);
err_alloc: err_alloc:
mutex_unlock(&esw_psample->restore_lock); mutex_unlock(&tc_psample->restore_lock);
return ERR_PTR(err); return ERR_PTR(err);
} }
static void static void
sample_restore_put(struct mlx5_esw_psample *esw_psample, struct mlx5_sample_restore *restore) sample_restore_put(struct mlx5e_tc_psample *tc_psample, struct mlx5e_sample_restore *restore)
{ {
mutex_lock(&esw_psample->restore_lock); mutex_lock(&tc_psample->restore_lock);
if (--restore->count == 0) if (--restore->count == 0)
hash_del(&restore->hlist); hash_del(&restore->hlist);
mutex_unlock(&esw_psample->restore_lock); mutex_unlock(&tc_psample->restore_lock);
if (!restore->count) { if (!restore->count) {
mlx5_del_flow_rules(restore->rule); mlx5_del_flow_rules(restore->rule);
mlx5_modify_header_dealloc(esw_psample->esw->dev, restore->modify_hdr); mlx5_modify_header_dealloc(tc_psample->esw->dev, restore->modify_hdr);
kfree(restore); kfree(restore);
} }
} }
void mlx5_esw_sample_skb(struct sk_buff *skb, struct mlx5_mapped_obj *mapped_obj) void mlx5e_tc_sample_skb(struct sk_buff *skb, struct mlx5_mapped_obj *mapped_obj)
{ {
u32 trunc_size = mapped_obj->sample.trunc_size; u32 trunc_size = mapped_obj->sample.trunc_size;
struct psample_group psample_group = {}; struct psample_group psample_group = {};
...@@ -362,7 +362,7 @@ void mlx5_esw_sample_skb(struct sk_buff *skb, struct mlx5_mapped_obj *mapped_obj ...@@ -362,7 +362,7 @@ void mlx5_esw_sample_skb(struct sk_buff *skb, struct mlx5_mapped_obj *mapped_obj
* +----------------------------------------+ * +----------------------------------------+
*/ */
struct mlx5_flow_handle * struct mlx5_flow_handle *
mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample, mlx5e_tc_sample_offload(struct mlx5e_tc_psample *tc_psample,
struct mlx5_flow_spec *spec, struct mlx5_flow_spec *spec,
struct mlx5_flow_attr *attr) struct mlx5_flow_attr *attr)
{ {
...@@ -370,21 +370,21 @@ mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample, ...@@ -370,21 +370,21 @@ mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample,
struct mlx5_vport_tbl_attr per_vport_tbl_attr; struct mlx5_vport_tbl_attr per_vport_tbl_attr;
struct mlx5_esw_flow_attr *pre_esw_attr; struct mlx5_esw_flow_attr *pre_esw_attr;
struct mlx5_mapped_obj restore_obj = {}; struct mlx5_mapped_obj restore_obj = {};
struct mlx5_sample_flow *sample_flow; struct mlx5e_sample_flow *sample_flow;
struct mlx5_sample_attr *sample_attr; struct mlx5e_sample_attr *sample_attr;
struct mlx5_flow_table *default_tbl; struct mlx5_flow_table *default_tbl;
struct mlx5_flow_attr *pre_attr; struct mlx5_flow_attr *pre_attr;
struct mlx5_eswitch *esw; struct mlx5_eswitch *esw;
u32 obj_id; u32 obj_id;
int err; int err;
if (IS_ERR_OR_NULL(esw_psample)) if (IS_ERR_OR_NULL(tc_psample))
return ERR_PTR(-EOPNOTSUPP); return ERR_PTR(-EOPNOTSUPP);
/* If slow path flag is set, eg. when the neigh is invalid for encap, /* If slow path flag is set, eg. when the neigh is invalid for encap,
* don't offload sample action. * don't offload sample action.
*/ */
esw = esw_psample->esw; esw = tc_psample->esw;
if (attr->flags & MLX5_ESW_ATTR_FLAG_SLOW_PATH) if (attr->flags & MLX5_ESW_ATTR_FLAG_SLOW_PATH)
return mlx5_eswitch_add_offloaded_rule(esw, spec, attr); return mlx5_eswitch_add_offloaded_rule(esw, spec, attr);
...@@ -426,7 +426,7 @@ mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample, ...@@ -426,7 +426,7 @@ mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample,
} }
/* Create sampler object. */ /* Create sampler object. */
sample_flow->sampler = sampler_get(esw_psample, esw_attr->sample->rate, default_tbl->id); sample_flow->sampler = sampler_get(tc_psample, esw_attr->sample->rate, default_tbl->id);
if (IS_ERR(sample_flow->sampler)) { if (IS_ERR(sample_flow->sampler)) {
err = PTR_ERR(sample_flow->sampler); err = PTR_ERR(sample_flow->sampler);
goto err_sampler; goto err_sampler;
...@@ -443,7 +443,7 @@ mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample, ...@@ -443,7 +443,7 @@ mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample,
esw_attr->sample->restore_obj_id = obj_id; esw_attr->sample->restore_obj_id = obj_id;
/* Create sample restore context. */ /* Create sample restore context. */
sample_flow->restore = sample_restore_get(esw_psample, obj_id); sample_flow->restore = sample_restore_get(tc_psample, obj_id);
if (IS_ERR(sample_flow->restore)) { if (IS_ERR(sample_flow->restore)) {
err = PTR_ERR(sample_flow->restore); err = PTR_ERR(sample_flow->restore);
goto err_sample_restore; goto err_sample_restore;
...@@ -486,11 +486,11 @@ mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample, ...@@ -486,11 +486,11 @@ mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample,
err_alloc_sample_attr: err_alloc_sample_attr:
kfree(pre_attr); kfree(pre_attr);
err_alloc_flow_attr: err_alloc_flow_attr:
sample_restore_put(esw_psample, sample_flow->restore); sample_restore_put(tc_psample, sample_flow->restore);
err_sample_restore: err_sample_restore:
mapping_remove(esw->offloads.reg_c0_obj_pool, obj_id); mapping_remove(esw->offloads.reg_c0_obj_pool, obj_id);
err_obj_id: err_obj_id:
sampler_put(esw_psample, sample_flow->sampler); sampler_put(tc_psample, sample_flow->sampler);
err_sampler: err_sampler:
/* For sample offload, rule is added in default_tbl. No need to call /* For sample offload, rule is added in default_tbl. No need to call
* mlx5_esw_chains_put_table() * mlx5_esw_chains_put_table()
...@@ -506,23 +506,23 @@ mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample, ...@@ -506,23 +506,23 @@ mlx5_esw_sample_offload(struct mlx5_esw_psample *esw_psample,
} }
void void
mlx5_esw_sample_unoffload(struct mlx5_esw_psample *esw_psample, mlx5e_tc_sample_unoffload(struct mlx5e_tc_psample *tc_psample,
struct mlx5_flow_handle *rule, struct mlx5_flow_handle *rule,
struct mlx5_flow_attr *attr) struct mlx5_flow_attr *attr)
{ {
struct mlx5_esw_flow_attr *esw_attr = attr->esw_attr; struct mlx5_esw_flow_attr *esw_attr = attr->esw_attr;
struct mlx5_sample_flow *sample_flow; struct mlx5e_sample_flow *sample_flow;
struct mlx5_vport_tbl_attr tbl_attr; struct mlx5_vport_tbl_attr tbl_attr;
struct mlx5_flow_attr *pre_attr; struct mlx5_flow_attr *pre_attr;
struct mlx5_eswitch *esw; struct mlx5_eswitch *esw;
if (IS_ERR_OR_NULL(esw_psample)) if (IS_ERR_OR_NULL(tc_psample))
return; return;
/* If slow path flag is set, sample action is not offloaded. /* If slow path flag is set, sample action is not offloaded.
* No need to delete sample rule. * No need to delete sample rule.
*/ */
esw = esw_psample->esw; esw = tc_psample->esw;
if (attr->flags & MLX5_ESW_ATTR_FLAG_SLOW_PATH) { if (attr->flags & MLX5_ESW_ATTR_FLAG_SLOW_PATH) {
mlx5_eswitch_del_offloaded_rule(esw, rule, attr); mlx5_eswitch_del_offloaded_rule(esw, rule, attr);
return; return;
...@@ -534,9 +534,9 @@ mlx5_esw_sample_unoffload(struct mlx5_esw_psample *esw_psample, ...@@ -534,9 +534,9 @@ mlx5_esw_sample_unoffload(struct mlx5_esw_psample *esw_psample,
mlx5_eswitch_del_offloaded_rule(esw, sample_flow->pre_rule, pre_attr); mlx5_eswitch_del_offloaded_rule(esw, sample_flow->pre_rule, pre_attr);
mlx5_eswitch_del_offloaded_rule(esw, sample_flow->rule, attr); mlx5_eswitch_del_offloaded_rule(esw, sample_flow->rule, attr);
sample_restore_put(esw_psample, sample_flow->restore); sample_restore_put(tc_psample, sample_flow->restore);
mapping_remove(esw->offloads.reg_c0_obj_pool, esw_attr->sample->restore_obj_id); mapping_remove(esw->offloads.reg_c0_obj_pool, esw_attr->sample->restore_obj_id);
sampler_put(esw_psample, sample_flow->sampler); sampler_put(tc_psample, sample_flow->sampler);
tbl_attr.chain = attr->chain; tbl_attr.chain = attr->chain;
tbl_attr.prio = attr->prio; tbl_attr.prio = attr->prio;
tbl_attr.vport = esw_attr->in_rep->vport; tbl_attr.vport = esw_attr->in_rep->vport;
...@@ -548,38 +548,38 @@ mlx5_esw_sample_unoffload(struct mlx5_esw_psample *esw_psample, ...@@ -548,38 +548,38 @@ mlx5_esw_sample_unoffload(struct mlx5_esw_psample *esw_psample,
kfree(sample_flow); kfree(sample_flow);
} }
struct mlx5_esw_psample * struct mlx5e_tc_psample *
mlx5_esw_sample_init(struct mlx5_eswitch *esw) mlx5e_tc_sample_init(struct mlx5_eswitch *esw)
{ {
struct mlx5_esw_psample *esw_psample; struct mlx5e_tc_psample *tc_psample;
int err; int err;
esw_psample = kzalloc(sizeof(*esw_psample), GFP_KERNEL); tc_psample = kzalloc(sizeof(*tc_psample), GFP_KERNEL);
if (!esw_psample) if (!tc_psample)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
esw_psample->esw = esw; tc_psample->esw = esw;
err = sampler_termtbl_create(esw_psample); err = sampler_termtbl_create(tc_psample);
if (err) if (err)
goto err_termtbl; goto err_termtbl;
mutex_init(&esw_psample->ht_lock); mutex_init(&tc_psample->ht_lock);
mutex_init(&esw_psample->restore_lock); mutex_init(&tc_psample->restore_lock);
return esw_psample; return tc_psample;
err_termtbl: err_termtbl:
kfree(esw_psample); kfree(tc_psample);
return ERR_PTR(err); return ERR_PTR(err);
} }
void void
mlx5_esw_sample_cleanup(struct mlx5_esw_psample *esw_psample) mlx5e_tc_sample_cleanup(struct mlx5e_tc_psample *tc_psample)
{ {
if (IS_ERR_OR_NULL(esw_psample)) if (IS_ERR_OR_NULL(tc_psample))
return; return;
mutex_destroy(&esw_psample->restore_lock); mutex_destroy(&tc_psample->restore_lock);
mutex_destroy(&esw_psample->ht_lock); mutex_destroy(&tc_psample->ht_lock);
sampler_termtbl_destroy(esw_psample); sampler_termtbl_destroy(tc_psample);
kfree(esw_psample); kfree(tc_psample);
} }
...@@ -7,34 +7,34 @@ ...@@ -7,34 +7,34 @@
#include "eswitch.h" #include "eswitch.h"
struct mlx5_flow_attr; struct mlx5_flow_attr;
struct mlx5_esw_psample; struct mlx5e_tc_psample;
struct mlx5_sample_attr { struct mlx5e_sample_attr {
u32 group_num; u32 group_num;
u32 rate; u32 rate;
u32 trunc_size; u32 trunc_size;
u32 restore_obj_id; u32 restore_obj_id;
u32 sampler_id; u32 sampler_id;
struct mlx5_flow_table *sample_default_tbl; struct mlx5_flow_table *sample_default_tbl;
struct mlx5_sample_flow *sample_flow; struct mlx5e_sample_flow *sample_flow;
}; };
void mlx5_esw_sample_skb(struct sk_buff *skb, struct mlx5_mapped_obj *mapped_obj); void mlx5e_tc_sample_skb(struct sk_buff *skb, struct mlx5_mapped_obj *mapped_obj);
struct mlx5_flow_handle * struct mlx5_flow_handle *
mlx5_esw_sample_offload(struct mlx5_esw_psample *sample_priv, mlx5e_tc_sample_offload(struct mlx5e_tc_psample *sample_priv,
struct mlx5_flow_spec *spec, struct mlx5_flow_spec *spec,
struct mlx5_flow_attr *attr); struct mlx5_flow_attr *attr);
void void
mlx5_esw_sample_unoffload(struct mlx5_esw_psample *sample_priv, mlx5e_tc_sample_unoffload(struct mlx5e_tc_psample *sample_priv,
struct mlx5_flow_handle *rule, struct mlx5_flow_handle *rule,
struct mlx5_flow_attr *attr); struct mlx5_flow_attr *attr);
struct mlx5_esw_psample * struct mlx5e_tc_psample *
mlx5_esw_sample_init(struct mlx5_eswitch *esw); mlx5e_tc_sample_init(struct mlx5_eswitch *esw);
void void
mlx5_esw_sample_cleanup(struct mlx5_esw_psample *esw_psample); mlx5e_tc_sample_cleanup(struct mlx5e_tc_psample *tc_psample);
#endif /* __MLX5_EN_TC_SAMPLE_H__ */ #endif /* __MLX5_EN_TC_SAMPLE_H__ */
...@@ -89,7 +89,7 @@ struct mlx5_rep_uplink_priv { ...@@ -89,7 +89,7 @@ struct mlx5_rep_uplink_priv {
struct mapping_ctx *tunnel_enc_opts_mapping; struct mapping_ctx *tunnel_enc_opts_mapping;
struct mlx5_tc_ct_priv *ct_priv; struct mlx5_tc_ct_priv *ct_priv;
struct mlx5_esw_psample *esw_psample; struct mlx5e_tc_psample *tc_psample;
/* support eswitch vports bonding */ /* support eswitch vports bonding */
struct mlx5e_rep_bond *bond; struct mlx5e_rep_bond *bond;
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
#include "en/mod_hdr.h" #include "en/mod_hdr.h"
#include "en/tc_priv.h" #include "en/tc_priv.h"
#include "en/tc_tun_encap.h" #include "en/tc_tun_encap.h"
#include "esw/sample.h" #include "en/tc/sample.h"
#include "lib/devcom.h" #include "lib/devcom.h"
#include "lib/geneve.h" #include "lib/geneve.h"
#include "lib/fs_chains.h" #include "lib/fs_chains.h"
...@@ -246,7 +246,7 @@ get_ct_priv(struct mlx5e_priv *priv) ...@@ -246,7 +246,7 @@ get_ct_priv(struct mlx5e_priv *priv)
} }
#if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE) #if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE)
static struct mlx5_esw_psample * static struct mlx5e_tc_psample *
get_sample_priv(struct mlx5e_priv *priv) get_sample_priv(struct mlx5e_priv *priv)
{ {
struct mlx5_eswitch *esw = priv->mdev->priv.eswitch; struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
...@@ -257,7 +257,7 @@ get_sample_priv(struct mlx5e_priv *priv) ...@@ -257,7 +257,7 @@ get_sample_priv(struct mlx5e_priv *priv)
uplink_rpriv = mlx5_eswitch_get_uplink_priv(esw, REP_ETH); uplink_rpriv = mlx5_eswitch_get_uplink_priv(esw, REP_ETH);
uplink_priv = &uplink_rpriv->uplink_priv; uplink_priv = &uplink_rpriv->uplink_priv;
return uplink_priv->esw_psample; return uplink_priv->tc_psample;
} }
return NULL; return NULL;
...@@ -1147,7 +1147,7 @@ mlx5e_tc_offload_fdb_rules(struct mlx5_eswitch *esw, ...@@ -1147,7 +1147,7 @@ mlx5e_tc_offload_fdb_rules(struct mlx5_eswitch *esw,
mod_hdr_acts); mod_hdr_acts);
#if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE) #if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE)
} else if (flow_flag_test(flow, SAMPLE)) { } else if (flow_flag_test(flow, SAMPLE)) {
rule = mlx5_esw_sample_offload(get_sample_priv(flow->priv), spec, attr); rule = mlx5e_tc_sample_offload(get_sample_priv(flow->priv), spec, attr);
#endif #endif
} else { } else {
rule = mlx5_eswitch_add_offloaded_rule(esw, spec, attr); rule = mlx5_eswitch_add_offloaded_rule(esw, spec, attr);
...@@ -1186,7 +1186,7 @@ void mlx5e_tc_unoffload_fdb_rules(struct mlx5_eswitch *esw, ...@@ -1186,7 +1186,7 @@ void mlx5e_tc_unoffload_fdb_rules(struct mlx5_eswitch *esw,
#if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE) #if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE)
if (flow_flag_test(flow, SAMPLE)) { if (flow_flag_test(flow, SAMPLE)) {
mlx5_esw_sample_unoffload(get_sample_priv(flow->priv), flow->rule[0], attr); mlx5e_tc_sample_unoffload(get_sample_priv(flow->priv), flow->rule[0], attr);
return; return;
} }
#endif #endif
...@@ -3722,7 +3722,7 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, ...@@ -3722,7 +3722,7 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
bool ft_flow = mlx5e_is_ft_flow(flow); bool ft_flow = mlx5e_is_ft_flow(flow);
const struct flow_action_entry *act; const struct flow_action_entry *act;
struct mlx5_esw_flow_attr *esw_attr; struct mlx5_esw_flow_attr *esw_attr;
struct mlx5_sample_attr sample = {}; struct mlx5e_sample_attr sample = {};
bool encap = false, decap = false; bool encap = false, decap = false;
u32 action = attr->action; u32 action = attr->action;
int err, i, if_count = 0; int err, i, if_count = 0;
...@@ -4976,7 +4976,7 @@ int mlx5e_tc_esw_init(struct rhashtable *tc_ht) ...@@ -4976,7 +4976,7 @@ int mlx5e_tc_esw_init(struct rhashtable *tc_ht)
MLX5_FLOW_NAMESPACE_FDB); MLX5_FLOW_NAMESPACE_FDB);
#if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE) #if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE)
uplink_priv->esw_psample = mlx5_esw_sample_init(esw); uplink_priv->tc_psample = mlx5e_tc_sample_init(esw);
#endif #endif
mapping_id = mlx5_query_nic_system_image_guid(esw->dev); mapping_id = mlx5_query_nic_system_image_guid(esw->dev);
...@@ -5022,7 +5022,7 @@ int mlx5e_tc_esw_init(struct rhashtable *tc_ht) ...@@ -5022,7 +5022,7 @@ int mlx5e_tc_esw_init(struct rhashtable *tc_ht)
mapping_destroy(uplink_priv->tunnel_mapping); mapping_destroy(uplink_priv->tunnel_mapping);
err_tun_mapping: err_tun_mapping:
#if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE) #if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE)
mlx5_esw_sample_cleanup(uplink_priv->esw_psample); mlx5e_tc_sample_cleanup(uplink_priv->tc_psample);
#endif #endif
mlx5_tc_ct_clean(uplink_priv->ct_priv); mlx5_tc_ct_clean(uplink_priv->ct_priv);
netdev_warn(priv->netdev, netdev_warn(priv->netdev,
...@@ -5043,7 +5043,7 @@ void mlx5e_tc_esw_cleanup(struct rhashtable *tc_ht) ...@@ -5043,7 +5043,7 @@ void mlx5e_tc_esw_cleanup(struct rhashtable *tc_ht)
mapping_destroy(uplink_priv->tunnel_mapping); mapping_destroy(uplink_priv->tunnel_mapping);
#if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE) #if IS_ENABLED(CONFIG_MLX5_TC_SAMPLE)
mlx5_esw_sample_cleanup(uplink_priv->esw_psample); mlx5e_tc_sample_cleanup(uplink_priv->tc_psample);
#endif #endif
mlx5_tc_ct_clean(uplink_priv->ct_priv); mlx5_tc_ct_clean(uplink_priv->ct_priv);
} }
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
#include "lib/fs_chains.h" #include "lib/fs_chains.h"
#include "sf/sf.h" #include "sf/sf.h"
#include "en/tc_ct.h" #include "en/tc_ct.h"
#include "esw/sample.h" #include "en/tc/sample.h"
enum mlx5_mapped_obj_type { enum mlx5_mapped_obj_type {
MLX5_MAPPED_OBJ_CHAIN, MLX5_MAPPED_OBJ_CHAIN,
...@@ -469,7 +469,7 @@ struct mlx5_esw_flow_attr { ...@@ -469,7 +469,7 @@ struct mlx5_esw_flow_attr {
} dests[MLX5_MAX_FLOW_FWD_VPORTS]; } dests[MLX5_MAX_FLOW_FWD_VPORTS];
struct mlx5_rx_tun_attr *rx_tun_attr; struct mlx5_rx_tun_attr *rx_tun_attr;
struct mlx5_pkt_reformat *decap_pkt_reformat; struct mlx5_pkt_reformat *decap_pkt_reformat;
struct mlx5_sample_attr *sample; struct mlx5e_sample_attr *sample;
}; };
int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode, int mlx5_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment