DPDK patches and discussions
 help / color / mirror / Atom feed
From: Suanming Mou <suanmingm@nvidia.com>
To: "Jiawei(Jonny) Wang" <jiaweiw@nvidia.com>,
	Ori Kam <orika@nvidia.com>,
	"NBU-Contact-Thomas Monjalon (EXTERNAL)" <thomas@monjalon.net>
Cc: "dev@dpdk.org" <dev@dpdk.org>, Raslan Darawsheh <rasland@nvidia.com>
Subject: RE: [PATCH 2/3] net/mlx5: extend hws send to kernel action support
Date: Fri, 8 Sep 2023 09:35:24 +0000	[thread overview]
Message-ID: <SJ0PR12MB540513320646E6B824F10F76C1EDA@SJ0PR12MB5405.namprd12.prod.outlook.com> (raw)
In-Reply-To: <20230908092100.38587-3-jiaweiw@nvidia.com>



> -----Original Message-----
> From: Jiawei(Jonny) Wang <jiaweiw@nvidia.com>
> Sent: Friday, September 8, 2023 5:21 PM
> To: Suanming Mou <suanmingm@nvidia.com>; Ori Kam <orika@nvidia.com>;
> NBU-Contact-Thomas Monjalon (EXTERNAL) <thomas@monjalon.net>
> Cc: dev@dpdk.org; Raslan Darawsheh <rasland@nvidia.com>
> Subject: [PATCH 2/3] net/mlx5: extend hws send to kernel action support
> 
> The hws send to kernel action was supported in NIC and FDB tables, Currently,
> the send to kernel action is created in NIC RX only.
> 
> This patch adds the FDB and NIC-TX tables support for sending to the kernel
> action for HWS.
> 
> Signed-off-by: Jiawei Wang <jiaweiw@nvidia.com>

Acked-by: Suanming Mou <suanmingm@nvidia.com>

> ---
>  drivers/net/mlx5/mlx5.h         |  2 +-
>  drivers/net/mlx5/mlx5_flow_hw.c | 45 +++++++++++++++++++++++----------
>  2 files changed, 33 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index
> 6960a07d40..d49b81a360 100644
> --- a/drivers/net/mlx5/mlx5.h
> +++ b/drivers/net/mlx5/mlx5.h
> @@ -1858,7 +1858,7 @@ struct mlx5_priv {
>  	/* HW steering global tag action. */
>  	struct mlx5dr_action *hw_tag[2];
>  	/* HW steering global send to kernel action. */
> -	struct mlx5dr_action *hw_send_to_kernel;
> +	struct mlx5dr_action *hw_send_to_kernel[MLX5DR_TABLE_TYPE_MAX];
>  	/* HW steering create ongoing rte flow table list header. */
>  	LIST_HEAD(flow_hw_tbl_ongo, rte_flow_template_table)
> flow_hw_tbl_ongo;
>  	struct mlx5_indexed_pool *acts_ipool; /* Action data indexed pool. */
> diff --git a/drivers/net/mlx5/mlx5_flow_hw.c
> b/drivers/net/mlx5/mlx5_flow_hw.c index 92a5c92669..84d869a686 100644
> --- a/drivers/net/mlx5/mlx5_flow_hw.c
> +++ b/drivers/net/mlx5/mlx5_flow_hw.c
> @@ -1439,6 +1439,7 @@ __flow_hw_actions_translate(struct rte_eth_dev
> *dev,
>  	uint32_t ct_idx;
>  	int err;
>  	uint32_t target_grp = 0;
> +	int table_type;
> 
>  	flow_hw_modify_field_init(&mhdr, at);
>  	if (attr->transfer)
> @@ -1635,7 +1636,10 @@ __flow_hw_actions_translate(struct rte_eth_dev
> *dev,
>  						"Send to kernel action on root
> table is not supported in HW steering mode");
>  			}
>  			action_pos = at->actions_off[actions - at->actions];
> -			acts->rule_acts[action_pos].action = priv-
> >hw_send_to_kernel;
> +			table_type = attr->ingress ?
> MLX5DR_TABLE_TYPE_NIC_RX :
> +				     ((attr->egress) ?
> MLX5DR_TABLE_TYPE_NIC_TX :
> +				     MLX5DR_TABLE_TYPE_FDB);
> +			acts->rule_acts[action_pos].action =
> +priv->hw_send_to_kernel[table_type];
>  			break;
>  		case RTE_FLOW_ACTION_TYPE_MODIFY_FIELD:
>  			err = flow_hw_modify_field_compile(dev, attr,
> action_start, @@ -4345,8 +4349,11 @@ mlx5_flow_hw_actions_validate(struct
> rte_eth_dev *dev,
>  	const struct rte_flow_action_count *count_mask = NULL;
>  	bool fixed_cnt = false;
>  	uint64_t action_flags = 0;
> -	uint16_t i;
>  	bool actions_end = false;
> +#ifdef HAVE_MLX5DV_DR_ACTION_CREATE_DEST_ROOT_TABLE
> +	int table_type;
> +#endif
> +	uint16_t i;
>  	int ret;
> 
>  	/* FDB actions are only valid to proxy port. */ @@ -4397,7 +4404,10
> @@ mlx5_flow_hw_actions_validate(struct rte_eth_dev *dev,
> 
> RTE_FLOW_ERROR_TYPE_ACTION,
>  							  action,
>  							  "action not supported
> in guest port");
> -			if (!priv->hw_send_to_kernel)
> +			table_type = attr->ingress ?
> MLX5DR_TABLE_TYPE_NIC_RX :
> +				     ((attr->egress) ?
> MLX5DR_TABLE_TYPE_NIC_TX :
> +				     MLX5DR_TABLE_TYPE_FDB);
> +			if (!priv->hw_send_to_kernel[table_type])
>  				return rte_flow_error_set(error, ENOTSUP,
> 
> RTE_FLOW_ERROR_TYPE_ACTION,
>  							  action,
> @@ -5955,13 +5965,19 @@ static void
>  flow_hw_create_send_to_kernel_actions(struct mlx5_priv *priv __rte_unused)
> {  #ifdef HAVE_MLX5DV_DR_ACTION_CREATE_DEST_ROOT_TABLE
> -	priv->hw_send_to_kernel =
> -			mlx5dr_action_create_dest_root(priv->dr_ctx,
> -
> MLX5_HW_LOWEST_PRIO_ROOT,
> -
> MLX5DR_ACTION_FLAG_HWS_RX);
> -	if (!priv->hw_send_to_kernel) {
> -		DRV_LOG(WARNING, "Unable to create HWS send to kernel
> action");
> -		return;
> +	int action_flag;
> +	int i;
> +
> +	for (i = MLX5DR_TABLE_TYPE_NIC_RX; i < MLX5DR_TABLE_TYPE_MAX;
> i++) {
> +		action_flag = mlx5_hw_act_flag[1][i];
> +		priv->hw_send_to_kernel[i] =
> +				mlx5dr_action_create_dest_root(priv->dr_ctx,
> +
> 	MLX5_HW_LOWEST_PRIO_ROOT,
> +							action_flag);
> +		if (!priv->hw_send_to_kernel[i]) {
> +			DRV_LOG(WARNING, "Unable to create HWS send to
> kernel action");
> +			return;
> +		}
>  	}
>  #endif
>  }
> @@ -5969,9 +5985,12 @@ flow_hw_create_send_to_kernel_actions(struct
> mlx5_priv *priv __rte_unused)  static void
> flow_hw_destroy_send_to_kernel_action(struct mlx5_priv *priv)  {
> -	if (priv->hw_send_to_kernel) {
> -		mlx5dr_action_destroy(priv->hw_send_to_kernel);
> -		priv->hw_send_to_kernel = NULL;
> +	int i;
> +	for (i = MLX5DR_TABLE_TYPE_NIC_RX; i < MLX5DR_TABLE_TYPE_MAX;
> i++) {
> +		if (priv->hw_send_to_kernel[i]) {
> +			mlx5dr_action_destroy(priv->hw_send_to_kernel[i]);
> +			priv->hw_send_to_kernel[i] = NULL;
> +		}
>  	}
>  }
> 
> --
> 2.18.1


  reply	other threads:[~2023-09-08  9:35 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-08  9:20 [PATCH 0/3] net/mlx5: extend " Jiawei Wang
2023-09-08  9:20 ` [PATCH 1/3] " Jiawei Wang
2023-09-08  9:35   ` Suanming Mou
2023-09-18 12:52   ` Raslan Darawsheh
2023-09-08  9:20 ` [PATCH 2/3] net/mlx5: extend hws " Jiawei Wang
2023-09-08  9:35   ` Suanming Mou [this message]
2023-09-08  9:21 ` [PATCH 3/3] doc: adds the description for send to kernel Jiawei Wang

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=SJ0PR12MB540513320646E6B824F10F76C1EDA@SJ0PR12MB5405.namprd12.prod.outlook.com \
    --to=suanmingm@nvidia.com \
    --cc=dev@dpdk.org \
    --cc=jiaweiw@nvidia.com \
    --cc=orika@nvidia.com \
    --cc=rasland@nvidia.com \
    --cc=thomas@monjalon.net \
    /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 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).