All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlad Buslov <vladbu@mellanox.com>
To: wenxu <wenxu@ucloud.cn>
Cc: Vlad Buslov <vladbu@mellanox.com>,
	saeedm@mellanox.com, paulb@mellanox.com, netdev@vger.kernel.org
Subject: Re: [PATCH net-next v5 2/2] net/mlx5e: add mlx5e_rep_indr_setup_ft_cb support
Date: Tue, 24 Mar 2020 16:36:16 +0200	[thread overview]
Message-ID: <vbfh7ydes67.fsf@mellanox.com> (raw)
In-Reply-To: <d6e75961-1098-1dc4-b1ea-fa733aeb37c0@ucloud.cn>


On Tue 24 Mar 2020 at 14:49, wenxu <wenxu@ucloud.cn> wrote:
> 在 2020/3/24 20:05, Vlad Buslov 写道:
>> On Tue 24 Mar 2020 at 01:44, wenxu@ucloud.cn wrote:
>>> From: wenxu <wenxu@ucloud.cn>
>>>
>>> Add mlx5e_rep_indr_setup_ft_cb to support indr block setup
>>> in FT mode.
>>>
>>> Signed-off-by: wenxu <wenxu@ucloud.cn>
>>> ---
>>> v5: no change
>>>
>>>   drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 52 ++++++++++++++++++++++++
>>>   1 file changed, 52 insertions(+)
>>>
>>> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
>>> index 057f5f9..30c81c3 100644
>>> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
>>> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
>>> @@ -732,6 +732,55 @@ static int mlx5e_rep_indr_setup_tc_cb(enum tc_setup_type type,
>>>   	}
>>>   }
>>>
>>> +static int mlx5e_rep_indr_setup_ft_cb(enum tc_setup_type type,
>>> +				      void *type_data, void *indr_priv)
>>> +{
>>> +	struct mlx5e_rep_indr_block_priv *priv = indr_priv;
>>> +	struct flow_cls_offload *f = type_data;
>>> +	struct flow_cls_offload tmp;
>>> +	struct mlx5e_priv *mpriv;
>>> +	struct mlx5_eswitch *esw;
>>> +	unsigned long flags;
>>> +	int err;
>>> +
>>> +	mpriv = netdev_priv(priv->rpriv->netdev);
>>> +	esw = mpriv->mdev->priv.eswitch;
>>> +
>>> +	flags = MLX5_TC_FLAG(EGRESS) |
>>> +		MLX5_TC_FLAG(ESW_OFFLOAD) |
>>> +		MLX5_TC_FLAG(FT_OFFLOAD);
>>> +
>>> +	switch (type) {
>>> +	case TC_SETUP_CLSFLOWER:
>>> +		memcpy(&tmp, f, sizeof(*f));
>>> +
>>> +		if (!mlx5_esw_chains_prios_supported(esw))
>>> +			return -EOPNOTSUPP;
>>> +
>>> +		/* Re-use tc offload path by moving the ft flow to the
>>> +		 * reserved ft chain.
>>> +		 *
>>> +		 * FT offload can use prio range [0, INT_MAX], so we normalize
>>> +		 * it to range [1, mlx5_esw_chains_get_prio_range(esw)]
>>> +		 * as with tc, where prio 0 isn't supported.
>>> +		 *
>>> +		 * We only support chain 0 of FT offload.
>>> +		 */
>>> +		if (tmp.common.prio >= mlx5_esw_chains_get_prio_range(esw))
>>> +			return -EOPNOTSUPP;
>>> +		if (tmp.common.chain_index != 0)
>>> +			return -EOPNOTSUPP;
>>> +
>>> +		tmp.common.chain_index = mlx5_esw_chains_get_ft_chain(esw);
>>> +		tmp.common.prio++;
>>> +		err = mlx5e_rep_indr_offload(priv->netdev, &tmp, priv, flags);
>>> +		memcpy(&f->stats, &tmp.stats, sizeof(f->stats));
>> Why do you need to create temporary copy of flow_cls_offload struct and
>> then copy parts of tmp back to the original? Again, this info should
>> probably be in the commit message.
>
> This FT mode using the specficed chain_index which changed by driver adnd
>
> using only in driver. It will move the flow table rules to their steering
> domain.
>
> This scenario just follow the mlx5e_rep_setup_ft_cb which did offload in FT
> mode.
>
> So it's an old scenario, Is it necessary to add to the commit message?

Well, without knowing the reasoning it is hard to understand if the
original scenario is applicable in this case.

>
>>
>>> +		return err;
>>> +	default:
>>> +		return -EOPNOTSUPP;
>>> +	}
>>> +}
>>> +
>>>   static void mlx5e_rep_indr_block_unbind(void *cb_priv)
>>>   {
>>>   	struct mlx5e_rep_indr_block_priv *indr_priv = cb_priv;
>>> @@ -809,6 +858,9 @@ int mlx5e_rep_indr_setup_cb(struct net_device *netdev, void *cb_priv,
>>>   	case TC_SETUP_BLOCK:
>>>   		return mlx5e_rep_indr_setup_block(netdev, cb_priv, type_data,
>>>   						  mlx5e_rep_indr_setup_tc_cb);
>>> +	case TC_SETUP_FT:
>>> +		return mlx5e_rep_indr_setup_block(netdev, cb_priv, type_data,
>>> +						  mlx5e_rep_indr_setup_ft_cb);
>>>   	default:
>>>   		return -EOPNOTSUPP;
>>>   	}


      reply	other threads:[~2020-03-24 14:36 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-23 23:44 [PATCH net-next v5 0/2] net/mlx5e: add indr block support in the FT mode wenxu
2020-03-23 23:44 ` [PATCH net-next v5 1/2] net/mlx5e: refactor indr setup block wenxu
2020-03-23 23:44 ` [PATCH net-next v5 2/2] net/mlx5e: add mlx5e_rep_indr_setup_ft_cb support wenxu
2020-03-24 12:05   ` Vlad Buslov
2020-03-24 12:49     ` wenxu
2020-03-24 14:36       ` Vlad Buslov [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=vbfh7ydes67.fsf@mellanox.com \
    --to=vladbu@mellanox.com \
    --cc=netdev@vger.kernel.org \
    --cc=paulb@mellanox.com \
    --cc=saeedm@mellanox.com \
    --cc=wenxu@ucloud.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.