Re: [PATCH 5.15 049/230] net/mlx5e: Check action fwd/drop flag exists also for nic flows

From: dann frazier
Date: Thu Jan 12 2023 - 17:14:47 EST


On Mon, Jul 11, 2022 at 11:05:05AM +0200, Greg Kroah-Hartman wrote:
> From: Roi Dayan <roid@xxxxxxxxxx>
>
> [ Upstream commit 6b50cf45b6a0e99f3cab848a72ecca8da56b7460 ]
>
> The driver should add offloaded rules with either a fwd or drop action.
> The check existed in parsing fdb flows but not when parsing nic flows.
> Move the test into actions_match_supported() which is called for
> checking nic flows and fdb flows.
>
> Signed-off-by: Roi Dayan <roid@xxxxxxxxxx>
> Reviewed-by: Maor Dickman <maord@xxxxxxxxxx>
> Signed-off-by: Saeed Mahameed <saeedm@xxxxxxxxxx>
> Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

hey Sasha,

A contact at Nvidia tells me that this has caused a regression w/
OVN HW offload. To fix that, commit 7f8770c7 ("net/mlx5e: Set action
fwd flag when parsing tc action goto") is also required.

I'm not really sure what flagged this patch for stable, so I don't
know whether to suggest it be reverted, or that additonal patch be
applied. Roi - what's your thought?

-dann

> ---
> drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 13 ++++++-------
> 1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> index 3aa8d0b83d10..fe52db591121 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> @@ -3305,6 +3305,12 @@ static bool actions_match_supported(struct mlx5e_priv *priv,
> ct_flow = flow_flag_test(flow, CT) && !ct_clear;
> actions = flow->attr->action;
>
> + if (!(actions &
> + (MLX5_FLOW_CONTEXT_ACTION_FWD_DEST | MLX5_FLOW_CONTEXT_ACTION_DROP))) {
> + NL_SET_ERR_MSG_MOD(extack, "Rule must have at least one forward/drop action");
> + return false;
> + }
> +
> if (mlx5e_is_eswitch_flow(flow)) {
> if (flow->attr->esw_attr->split_count && ct_flow &&
> !MLX5_CAP_GEN(flow->attr->esw_attr->in_mdev, reg_c_preserve)) {
> @@ -4207,13 +4213,6 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
> attr->action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
> }
>
> - if (!(attr->action &
> - (MLX5_FLOW_CONTEXT_ACTION_FWD_DEST | MLX5_FLOW_CONTEXT_ACTION_DROP))) {
> - NL_SET_ERR_MSG_MOD(extack,
> - "Rule must have at least one forward/drop action");
> - return -EOPNOTSUPP;
> - }
> -
> if (esw_attr->split_count > 0 && !mlx5_esw_has_fwd_fdb(priv->mdev)) {
> NL_SET_ERR_MSG_MOD(extack,
> "current firmware doesn't support split rule for port mirroring");