* [patch net-next 0/3] mlxsw: Introduce support for "pass" gact action offloading
@ 2017-09-25 8:58 Jiri Pirko
2017-09-25 8:58 ` [patch net-next 1/3] mlxsw: spectrum_acl: Propagate errors from mlxsw_afa_block_jump/continue Jiri Pirko
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Jiri Pirko @ 2017-09-25 8:58 UTC (permalink / raw)
To: netdev; +Cc: davem, idosch, mlxsw, jhs, xiyou.wangcong
From: Jiri Pirko <jiri@mellanox.com>
Very simple patchset adds ability for user to insert filters with "pass"
gact action and offload it. That allows scenarios like this:
$ tc filter add dev enp3s0np19 ingress protocol ip pref 10 flower skip_sw dst_ip 192.168.101.0/24 action drop
$ tc filter add dev enp3s0np19 ingress protocol ip pref 9 flower skip_sw dst_ip 192.168.101.1 action pass
Jiri Pirko (3):
mlxsw: spectrum_acl: Propagate errors from
mlxsw_afa_block_jump/continue
net: sched: introduce helper to identify gact pass action
mlxsw: spectrum_flower: Offload "ok" termination action
.../net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c | 14 ++++++++------
.../net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h | 4 ++--
drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 6 +++---
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c | 10 +++++-----
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c | 6 +++++-
drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c | 10 ++++++++--
include/net/tc_act/tc_gact.h | 5 +++++
7 files changed, 36 insertions(+), 19 deletions(-)
--
2.9.5
^ permalink raw reply [flat|nested] 5+ messages in thread
* [patch net-next 1/3] mlxsw: spectrum_acl: Propagate errors from mlxsw_afa_block_jump/continue
2017-09-25 8:58 [patch net-next 0/3] mlxsw: Introduce support for "pass" gact action offloading Jiri Pirko
@ 2017-09-25 8:58 ` Jiri Pirko
2017-09-25 8:58 ` [patch net-next 2/3] net: sched: introduce helper to identify gact pass action Jiri Pirko
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Jiri Pirko @ 2017-09-25 8:58 UTC (permalink / raw)
To: netdev; +Cc: davem, idosch, mlxsw, jhs, xiyou.wangcong
From: Jiri Pirko <jiri@mellanox.com>
Propagate error instead of doing WARN_ON right away.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
.../net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c | 14 ++++++++------
.../net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h | 4 ++--
drivers/net/ethernet/mellanox/mlxsw/spectrum.h | 6 +++---
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c | 10 +++++-----
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c | 6 +++++-
drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c | 4 +++-
6 files changed, 26 insertions(+), 18 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c
index ab3ffe7a..bc55d0e 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c
@@ -399,23 +399,25 @@ u32 mlxsw_afa_block_first_set_kvdl_index(struct mlxsw_afa_block *block)
}
EXPORT_SYMBOL(mlxsw_afa_block_first_set_kvdl_index);
-void mlxsw_afa_block_continue(struct mlxsw_afa_block *block)
+int mlxsw_afa_block_continue(struct mlxsw_afa_block *block)
{
- if (WARN_ON(block->finished))
- return;
+ if (block->finished)
+ return -EINVAL;
mlxsw_afa_set_goto_set(block->cur_set,
MLXSW_AFA_SET_GOTO_BINDING_CMD_NONE, 0);
block->finished = true;
+ return 0;
}
EXPORT_SYMBOL(mlxsw_afa_block_continue);
-void mlxsw_afa_block_jump(struct mlxsw_afa_block *block, u16 group_id)
+int mlxsw_afa_block_jump(struct mlxsw_afa_block *block, u16 group_id)
{
- if (WARN_ON(block->finished))
- return;
+ if (block->finished)
+ return -EINVAL;
mlxsw_afa_set_goto_set(block->cur_set,
MLXSW_AFA_SET_GOTO_BINDING_CMD_JUMP, group_id);
block->finished = true;
+ return 0;
}
EXPORT_SYMBOL(mlxsw_afa_block_jump);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h
index 501819c..06b0be4 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h
@@ -57,8 +57,8 @@ void mlxsw_afa_block_destroy(struct mlxsw_afa_block *block);
int mlxsw_afa_block_commit(struct mlxsw_afa_block *block);
char *mlxsw_afa_block_first_set(struct mlxsw_afa_block *block);
u32 mlxsw_afa_block_first_set_kvdl_index(struct mlxsw_afa_block *block);
-void mlxsw_afa_block_continue(struct mlxsw_afa_block *block);
-void mlxsw_afa_block_jump(struct mlxsw_afa_block *block, u16 group_id);
+int mlxsw_afa_block_continue(struct mlxsw_afa_block *block);
+int mlxsw_afa_block_jump(struct mlxsw_afa_block *block, u16 group_id);
int mlxsw_afa_block_append_drop(struct mlxsw_afa_block *block);
int mlxsw_afa_block_append_trap(struct mlxsw_afa_block *block, u16 trap_id);
int mlxsw_afa_block_append_fwd(struct mlxsw_afa_block *block,
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
index d06f7fe..ae67e60 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.h
@@ -470,9 +470,9 @@ void mlxsw_sp_acl_rulei_keymask_buf(struct mlxsw_sp_acl_rule_info *rulei,
enum mlxsw_afk_element element,
const char *key_value,
const char *mask_value, unsigned int len);
-void mlxsw_sp_acl_rulei_act_continue(struct mlxsw_sp_acl_rule_info *rulei);
-void mlxsw_sp_acl_rulei_act_jump(struct mlxsw_sp_acl_rule_info *rulei,
- u16 group_id);
+int mlxsw_sp_acl_rulei_act_continue(struct mlxsw_sp_acl_rule_info *rulei);
+int mlxsw_sp_acl_rulei_act_jump(struct mlxsw_sp_acl_rule_info *rulei,
+ u16 group_id);
int mlxsw_sp_acl_rulei_act_drop(struct mlxsw_sp_acl_rule_info *rulei);
int mlxsw_sp_acl_rulei_act_trap(struct mlxsw_sp_acl_rule_info *rulei);
int mlxsw_sp_acl_rulei_act_fwd(struct mlxsw_sp *mlxsw_sp,
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
index eede75f..93dcd31 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
@@ -378,15 +378,15 @@ void mlxsw_sp_acl_rulei_keymask_buf(struct mlxsw_sp_acl_rule_info *rulei,
key_value, mask_value, len);
}
-void mlxsw_sp_acl_rulei_act_continue(struct mlxsw_sp_acl_rule_info *rulei)
+int mlxsw_sp_acl_rulei_act_continue(struct mlxsw_sp_acl_rule_info *rulei)
{
- mlxsw_afa_block_continue(rulei->act_block);
+ return mlxsw_afa_block_continue(rulei->act_block);
}
-void mlxsw_sp_acl_rulei_act_jump(struct mlxsw_sp_acl_rule_info *rulei,
- u16 group_id)
+int mlxsw_sp_acl_rulei_act_jump(struct mlxsw_sp_acl_rule_info *rulei,
+ u16 group_id)
{
- mlxsw_afa_block_jump(rulei->act_block, group_id);
+ return mlxsw_afa_block_jump(rulei->act_block, group_id);
}
int mlxsw_sp_acl_rulei_act_drop(struct mlxsw_sp_acl_rule_info *rulei)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
index 50b40de..7e8284b 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
@@ -608,7 +608,10 @@ mlxsw_sp_acl_tcam_region_catchall_add(struct mlxsw_sp *mlxsw_sp,
goto err_rulei_create;
}
- mlxsw_sp_acl_rulei_act_continue(rulei);
+ err = mlxsw_sp_acl_rulei_act_continue(rulei);
+ if (WARN_ON(err))
+ goto err_rulei_act_continue;
+
err = mlxsw_sp_acl_rulei_commit(rulei);
if (err)
goto err_rulei_commit;
@@ -623,6 +626,7 @@ mlxsw_sp_acl_tcam_region_catchall_add(struct mlxsw_sp *mlxsw_sp,
err_rule_insert:
err_rulei_commit:
+err_rulei_act_continue:
mlxsw_sp_acl_rulei_destroy(rulei);
err_rulei_create:
parman_item_remove(region->parman, parman_prio, parman_item);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c
index 8aace9a..f1cedcc 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c
@@ -84,7 +84,9 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
return PTR_ERR(ruleset);
group_id = mlxsw_sp_acl_ruleset_group_id(ruleset);
- mlxsw_sp_acl_rulei_act_jump(rulei, group_id);
+ err = mlxsw_sp_acl_rulei_act_jump(rulei, group_id);
+ if (err)
+ return err;
} else if (is_tcf_mirred_egress_redirect(a)) {
int ifindex = tcf_mirred_ifindex(a);
struct net_device *out_dev;
--
2.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [patch net-next 2/3] net: sched: introduce helper to identify gact pass action
2017-09-25 8:58 [patch net-next 0/3] mlxsw: Introduce support for "pass" gact action offloading Jiri Pirko
2017-09-25 8:58 ` [patch net-next 1/3] mlxsw: spectrum_acl: Propagate errors from mlxsw_afa_block_jump/continue Jiri Pirko
@ 2017-09-25 8:58 ` Jiri Pirko
2017-09-25 8:58 ` [patch net-next 3/3] mlxsw: spectrum_flower: Offload "ok" termination action Jiri Pirko
2017-09-27 3:35 ` [patch net-next 0/3] mlxsw: Introduce support for "pass" gact action offloading David Miller
3 siblings, 0 replies; 5+ messages in thread
From: Jiri Pirko @ 2017-09-25 8:58 UTC (permalink / raw)
To: netdev; +Cc: davem, idosch, mlxsw, jhs, xiyou.wangcong
From: Jiri Pirko <jiri@mellanox.com>
Introduce a helper called is_tcf_gact_pass which could be used to
tell if the action is gact pass or not.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
include/net/tc_act/tc_gact.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/include/net/tc_act/tc_gact.h b/include/net/tc_act/tc_gact.h
index 41afe1c..d979a0d 100644
--- a/include/net/tc_act/tc_gact.h
+++ b/include/net/tc_act/tc_gact.h
@@ -33,6 +33,11 @@ static inline bool __is_tcf_gact_act(const struct tc_action *a, int act,
return false;
}
+static inline bool is_tcf_gact_ok(const struct tc_action *a)
+{
+ return __is_tcf_gact_act(a, TC_ACT_OK, false);
+}
+
static inline bool is_tcf_gact_shot(const struct tc_action *a)
{
return __is_tcf_gact_act(a, TC_ACT_SHOT, false);
--
2.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [patch net-next 3/3] mlxsw: spectrum_flower: Offload "ok" termination action
2017-09-25 8:58 [patch net-next 0/3] mlxsw: Introduce support for "pass" gact action offloading Jiri Pirko
2017-09-25 8:58 ` [patch net-next 1/3] mlxsw: spectrum_acl: Propagate errors from mlxsw_afa_block_jump/continue Jiri Pirko
2017-09-25 8:58 ` [patch net-next 2/3] net: sched: introduce helper to identify gact pass action Jiri Pirko
@ 2017-09-25 8:58 ` Jiri Pirko
2017-09-27 3:35 ` [patch net-next 0/3] mlxsw: Introduce support for "pass" gact action offloading David Miller
3 siblings, 0 replies; 5+ messages in thread
From: Jiri Pirko @ 2017-09-25 8:58 UTC (permalink / raw)
To: netdev; +Cc: davem, idosch, mlxsw, jhs, xiyou.wangcong
From: Jiri Pirko <jiri@mellanox.com>
If action is "gact_ok", offload it to HW.
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c
index f1cedcc..2f0e578 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c
@@ -63,7 +63,11 @@ static int mlxsw_sp_flower_parse_actions(struct mlxsw_sp *mlxsw_sp,
tcf_exts_to_list(exts, &actions);
list_for_each_entry(a, &actions, list) {
- if (is_tcf_gact_shot(a)) {
+ if (is_tcf_gact_ok(a)) {
+ err = mlxsw_sp_acl_rulei_act_continue(rulei);
+ if (err)
+ return err;
+ } else if (is_tcf_gact_shot(a)) {
err = mlxsw_sp_acl_rulei_act_drop(rulei);
if (err)
return err;
--
2.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [patch net-next 0/3] mlxsw: Introduce support for "pass" gact action offloading
2017-09-25 8:58 [patch net-next 0/3] mlxsw: Introduce support for "pass" gact action offloading Jiri Pirko
` (2 preceding siblings ...)
2017-09-25 8:58 ` [patch net-next 3/3] mlxsw: spectrum_flower: Offload "ok" termination action Jiri Pirko
@ 2017-09-27 3:35 ` David Miller
3 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2017-09-27 3:35 UTC (permalink / raw)
To: jiri; +Cc: netdev, idosch, mlxsw, jhs, xiyou.wangcong
From: Jiri Pirko <jiri@resnulli.us>
Date: Mon, 25 Sep 2017 10:58:19 +0200
> From: Jiri Pirko <jiri@mellanox.com>
>
> Very simple patchset adds ability for user to insert filters with "pass"
> gact action and offload it. That allows scenarios like this:
>
> $ tc filter add dev enp3s0np19 ingress protocol ip pref 10 flower skip_sw dst_ip 192.168.101.0/24 action drop
> $ tc filter add dev enp3s0np19 ingress protocol ip pref 9 flower skip_sw dst_ip 192.168.101.1 action pass
Series applied, thanks.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-09-27 3:35 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-25 8:58 [patch net-next 0/3] mlxsw: Introduce support for "pass" gact action offloading Jiri Pirko
2017-09-25 8:58 ` [patch net-next 1/3] mlxsw: spectrum_acl: Propagate errors from mlxsw_afa_block_jump/continue Jiri Pirko
2017-09-25 8:58 ` [patch net-next 2/3] net: sched: introduce helper to identify gact pass action Jiri Pirko
2017-09-25 8:58 ` [patch net-next 3/3] mlxsw: spectrum_flower: Offload "ok" termination action Jiri Pirko
2017-09-27 3:35 ` [patch net-next 0/3] mlxsw: Introduce support for "pass" gact action offloading David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).