All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next v2 0/2] net/mlx5e: add indr block support in the FT mode
@ 2020-03-18  9:32 wenxu
  2020-03-18  9:32 ` [PATCH net-next v2 1/2] net/mlx5e: refactor indr setup block wenxu
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: wenxu @ 2020-03-18  9:32 UTC (permalink / raw)
  To: saeedm, paulb; +Cc: netdev

From: wenxu <wenxu@ucloud.cn>


wenxu (2):
  net/mlx5e: refactor indr setup block
  net/mlx5e: add mlx5e_rep_indr_setup_ft_cb support

 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 92 ++++++++++++++++++------
 1 file changed, 71 insertions(+), 21 deletions(-)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH net-next v2 1/2] net/mlx5e: refactor indr setup block
  2020-03-18  9:32 [PATCH net-next v2 0/2] net/mlx5e: add indr block support in the FT mode wenxu
@ 2020-03-18  9:32 ` wenxu
  2020-03-18  9:32 ` [PATCH net-next v2 2/2] net/mlx5e: add mlx5e_rep_indr_setup_ft_cb support wenxu
  2020-03-19 13:57 ` [PATCH net-next v2 0/2] net/mlx5e: add indr block support in the FT mode Paul Blakey
  2 siblings, 0 replies; 6+ messages in thread
From: wenxu @ 2020-03-18  9:32 UTC (permalink / raw)
  To: saeedm, paulb; +Cc: netdev

From: wenxu <wenxu@ucloud.cn>

Refactor indr setup block for support ft indr setup in the
next patch

Signed-off-by: wenxu <wenxu@ucloud.cn>
---
v2: no change

 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 42 ++++++++++++------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
index a33d151..057f5f9 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
@@ -694,9 +694,9 @@ static void mlx5e_rep_indr_clean_block_privs(struct mlx5e_rep_priv *rpriv)
 static int
 mlx5e_rep_indr_offload(struct net_device *netdev,
 		       struct flow_cls_offload *flower,
-		       struct mlx5e_rep_indr_block_priv *indr_priv)
+		       struct mlx5e_rep_indr_block_priv *indr_priv,
+		       unsigned long flags)
 {
-	unsigned long flags = MLX5_TC_FLAG(EGRESS) | MLX5_TC_FLAG(ESW_OFFLOAD);
 	struct mlx5e_priv *priv = netdev_priv(indr_priv->rpriv->netdev);
 	int err = 0;
 
@@ -717,20 +717,22 @@ static void mlx5e_rep_indr_clean_block_privs(struct mlx5e_rep_priv *rpriv)
 	return err;
 }
 
-static int mlx5e_rep_indr_setup_block_cb(enum tc_setup_type type,
-					 void *type_data, void *indr_priv)
+static int mlx5e_rep_indr_setup_tc_cb(enum tc_setup_type type,
+				      void *type_data, void *indr_priv)
 {
+	unsigned long flags = MLX5_TC_FLAG(EGRESS) | MLX5_TC_FLAG(ESW_OFFLOAD);
 	struct mlx5e_rep_indr_block_priv *priv = indr_priv;
 
 	switch (type) {
 	case TC_SETUP_CLSFLOWER:
-		return mlx5e_rep_indr_offload(priv->netdev, type_data, priv);
+		return mlx5e_rep_indr_offload(priv->netdev, type_data, priv,
+					      flags);
 	default:
 		return -EOPNOTSUPP;
 	}
 }
 
-static void mlx5e_rep_indr_tc_block_unbind(void *cb_priv)
+static void mlx5e_rep_indr_block_unbind(void *cb_priv)
 {
 	struct mlx5e_rep_indr_block_priv *indr_priv = cb_priv;
 
@@ -741,9 +743,10 @@ static void mlx5e_rep_indr_tc_block_unbind(void *cb_priv)
 static LIST_HEAD(mlx5e_block_cb_list);
 
 static int
-mlx5e_rep_indr_setup_tc_block(struct net_device *netdev,
-			      struct mlx5e_rep_priv *rpriv,
-			      struct flow_block_offload *f)
+mlx5e_rep_indr_setup_block(struct net_device *netdev,
+			   struct mlx5e_rep_priv *rpriv,
+			   struct flow_block_offload *f,
+			   flow_setup_cb_t *setup_cb)
 {
 	struct mlx5e_rep_indr_block_priv *indr_priv;
 	struct flow_block_cb *block_cb;
@@ -769,9 +772,8 @@ static void mlx5e_rep_indr_tc_block_unbind(void *cb_priv)
 		list_add(&indr_priv->list,
 			 &rpriv->uplink_priv.tc_indr_block_priv_list);
 
-		block_cb = flow_block_cb_alloc(mlx5e_rep_indr_setup_block_cb,
-					       indr_priv, indr_priv,
-					       mlx5e_rep_indr_tc_block_unbind);
+		block_cb = flow_block_cb_alloc(setup_cb, indr_priv, indr_priv,
+					       mlx5e_rep_indr_block_unbind);
 		if (IS_ERR(block_cb)) {
 			list_del(&indr_priv->list);
 			kfree(indr_priv);
@@ -786,9 +788,7 @@ static void mlx5e_rep_indr_tc_block_unbind(void *cb_priv)
 		if (!indr_priv)
 			return -ENOENT;
 
-		block_cb = flow_block_cb_lookup(f->block,
-						mlx5e_rep_indr_setup_block_cb,
-						indr_priv);
+		block_cb = flow_block_cb_lookup(f->block, setup_cb, indr_priv);
 		if (!block_cb)
 			return -ENOENT;
 
@@ -802,13 +802,13 @@ static void mlx5e_rep_indr_tc_block_unbind(void *cb_priv)
 }
 
 static
-int mlx5e_rep_indr_setup_tc_cb(struct net_device *netdev, void *cb_priv,
-			       enum tc_setup_type type, void *type_data)
+int mlx5e_rep_indr_setup_cb(struct net_device *netdev, void *cb_priv,
+			    enum tc_setup_type type, void *type_data)
 {
 	switch (type) {
 	case TC_SETUP_BLOCK:
-		return mlx5e_rep_indr_setup_tc_block(netdev, cb_priv,
-						      type_data);
+		return mlx5e_rep_indr_setup_block(netdev, cb_priv, type_data,
+						  mlx5e_rep_indr_setup_tc_cb);
 	default:
 		return -EOPNOTSUPP;
 	}
@@ -820,7 +820,7 @@ static int mlx5e_rep_indr_register_block(struct mlx5e_rep_priv *rpriv,
 	int err;
 
 	err = __flow_indr_block_cb_register(netdev, rpriv,
-					    mlx5e_rep_indr_setup_tc_cb,
+					    mlx5e_rep_indr_setup_cb,
 					    rpriv);
 	if (err) {
 		struct mlx5e_priv *priv = netdev_priv(rpriv->netdev);
@@ -834,7 +834,7 @@ static int mlx5e_rep_indr_register_block(struct mlx5e_rep_priv *rpriv,
 static void mlx5e_rep_indr_unregister_block(struct mlx5e_rep_priv *rpriv,
 					    struct net_device *netdev)
 {
-	__flow_indr_block_cb_unregister(netdev, mlx5e_rep_indr_setup_tc_cb,
+	__flow_indr_block_cb_unregister(netdev, mlx5e_rep_indr_setup_cb,
 					rpriv);
 }
 
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH net-next v2 2/2] net/mlx5e: add mlx5e_rep_indr_setup_ft_cb support
  2020-03-18  9:32 [PATCH net-next v2 0/2] net/mlx5e: add indr block support in the FT mode wenxu
  2020-03-18  9:32 ` [PATCH net-next v2 1/2] net/mlx5e: refactor indr setup block wenxu
@ 2020-03-18  9:32 ` wenxu
  2020-03-21  2:45   ` Saeed Mahameed
  2020-03-19 13:57 ` [PATCH net-next v2 0/2] net/mlx5e: add indr block support in the FT mode Paul Blakey
  2 siblings, 1 reply; 6+ messages in thread
From: wenxu @ 2020-03-18  9:32 UTC (permalink / raw)
  To: saeedm, paulb; +Cc: netdev

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>
---
v2: rebase to master

 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 49 ++++++++++++++++++++++++
 1 file changed, 49 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..a88c70b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
@@ -732,6 +732,52 @@ 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 mlx5e_priv *mpriv = netdev_priv(priv->rpriv->netdev);
+	struct mlx5_eswitch *esw = mpriv->mdev->priv.eswitch;
+	struct flow_cls_offload *f = type_data;
+	struct flow_cls_offload tmp;
+	unsigned long flags;
+	int err;
+
+	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));
+		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 +855,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;
 	}
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next v2 0/2] net/mlx5e: add indr block support in the FT mode
  2020-03-18  9:32 [PATCH net-next v2 0/2] net/mlx5e: add indr block support in the FT mode wenxu
  2020-03-18  9:32 ` [PATCH net-next v2 1/2] net/mlx5e: refactor indr setup block wenxu
  2020-03-18  9:32 ` [PATCH net-next v2 2/2] net/mlx5e: add mlx5e_rep_indr_setup_ft_cb support wenxu
@ 2020-03-19 13:57 ` Paul Blakey
  2 siblings, 0 replies; 6+ messages in thread
From: Paul Blakey @ 2020-03-19 13:57 UTC (permalink / raw)
  To: wenxu, Saeed Mahameed; +Cc: netdev, Vlad Buslov

+cc vlad

________________________________________
From: wenxu@ucloud.cn <wenxu@ucloud.cn>
Sent: Wednesday, March 18, 2020 11:32 AM
To: Saeed Mahameed; Paul Blakey
Cc: netdev@vger.kernel.org
Subject: [PATCH net-next v2 0/2] net/mlx5e: add indr block support in the FT mode

From: wenxu <wenxu@ucloud.cn>


wenxu (2):
  net/mlx5e: refactor indr setup block
  net/mlx5e: add mlx5e_rep_indr_setup_ft_cb support

 drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 92 ++++++++++++++++++------
 1 file changed, 71 insertions(+), 21 deletions(-)

--
1.8.3.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next v2 2/2] net/mlx5e: add mlx5e_rep_indr_setup_ft_cb support
  2020-03-18  9:32 ` [PATCH net-next v2 2/2] net/mlx5e: add mlx5e_rep_indr_setup_ft_cb support wenxu
@ 2020-03-21  2:45   ` Saeed Mahameed
  2020-03-21  3:57     ` wenxu
  0 siblings, 1 reply; 6+ messages in thread
From: Saeed Mahameed @ 2020-03-21  2:45 UTC (permalink / raw)
  To: wenxu, Paul Blakey; +Cc: netdev

On Wed, 2020-03-18 at 17:32 +0800, 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>
> ---
> v2: rebase to master
> 
>  drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 49
> ++++++++++++++++++++++++
>  1 file changed, 49 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..a88c70b 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
> @@ -732,6 +732,52 @@ 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 mlx5e_priv *mpriv = netdev_priv(priv->rpriv->netdev);

Hi Wenxu,

let's fix reverse xmas tree style here, while vlad is looking at this.

> +	struct mlx5_eswitch *esw = mpriv->mdev->priv.eswitch;
> +	struct flow_cls_offload *f = type_data;
> +	struct flow_cls_offload tmp;
> +	unsigned long flags;
> +	int err;
> +
> +	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));
> +		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 +855,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;
>  	}

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH net-next v2 2/2] net/mlx5e: add mlx5e_rep_indr_setup_ft_cb support
  2020-03-21  2:45   ` Saeed Mahameed
@ 2020-03-21  3:57     ` wenxu
  0 siblings, 0 replies; 6+ messages in thread
From: wenxu @ 2020-03-21  3:57 UTC (permalink / raw)
  To: Saeed Mahameed, Paul Blakey; +Cc: netdev


在 2020/3/21 10:45, Saeed Mahameed 写道:
> On Wed, 2020-03-18 at 17:32 +0800, 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>
>> ---
>> v2: rebase to master
>>
>>   drivers/net/ethernet/mellanox/mlx5/core/en_rep.c | 49
>> ++++++++++++++++++++++++
>>   1 file changed, 49 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..a88c70b 100644
>> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
>> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
>> @@ -732,6 +732,52 @@ 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 mlx5e_priv *mpriv = netdev_priv(priv->rpriv->netdev);
> Hi Wenxu,
>
> let's fix reverse xmas tree style here, while vlad is looking at this.

But the second line depends on the first line.  the mpriv ptr get from 
the priv ptr.


>
>> +	struct mlx5_eswitch *esw = mpriv->mdev->priv.eswitch;
>> +	struct flow_cls_offload *f = type_data;
>> +	struct flow_cls_offload tmp;
>> +	unsigned long flags;
>> +	int err;
>> +
>> +	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));
>> +		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 +855,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;
>>   	}

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-03-21  3:58 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-18  9:32 [PATCH net-next v2 0/2] net/mlx5e: add indr block support in the FT mode wenxu
2020-03-18  9:32 ` [PATCH net-next v2 1/2] net/mlx5e: refactor indr setup block wenxu
2020-03-18  9:32 ` [PATCH net-next v2 2/2] net/mlx5e: add mlx5e_rep_indr_setup_ft_cb support wenxu
2020-03-21  2:45   ` Saeed Mahameed
2020-03-21  3:57     ` wenxu
2020-03-19 13:57 ` [PATCH net-next v2 0/2] net/mlx5e: add indr block support in the FT mode Paul Blakey

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.