From: "Nélio Laranjeiro" <nelio.laranjeiro@6wind.com>
To: Shahaf Shuler <shahafs@mellanox.com>
Cc: adrien.mazarguil@6wind.com, dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v2 1/2] net/mlx5: modify PMD args process
Date: Wed, 19 Apr 2017 08:50:53 +0200 [thread overview]
Message-ID: <20170419065053.GL14075@autoinstall.dev.6wind.com> (raw)
In-Reply-To: <20170418102228.145971-1-shahafs@mellanox.com>
On Tue, Apr 18, 2017 at 01:22:27PM +0300, Shahaf Shuler wrote:
> Currently the argument process is done without indication which
> parameter was forced by the application and which one is on it
> default value.
> This becomes problematic when different features requires different
> defaults. For example, Enhanced multi packet send and TSO.
>
> This commit modifies the argument process, enabling to differ
> which parameter was forced by the application.
>
> Signed-off-by: Shahaf Shuler <shahafs@mellanox.com>
> Acked-by: Yongseok Koh <yskoh@mellanox.com>
> ---
> on v2:
> * changed MLX5_UNSET to MLX5_ARG_UNSET.
> ---
> drivers/net/mlx5/mlx5.c | 72 +++++++++++++++++++++++++++++++++++++++++--------
> 1 file changed, 61 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
> index b7eb9b56a..78724a1bb 100644
> --- a/drivers/net/mlx5/mlx5.c
> +++ b/drivers/net/mlx5/mlx5.c
> @@ -93,6 +93,18 @@
> /* Device parameter to enable hardware TSO offload. */
> #define MLX5_TSO "tso"
>
> +/* Default PMD specific parameter value. */
> +#define MLX5_ARG_UNSET (-1)
> +
> +struct mlx5_args {
> + int cqe_comp;
> + int txq_inline;
> + int txqs_inline;
> + int mps;
> + int mpw_hdr_dseg;
> + int inline_max_packet_sz;
> + int tso;
> +};
> /**
> * Retrieve integer value from environment variable.
> *
> @@ -286,7 +298,7 @@ mlx5_dev_idx(struct rte_pci_addr *pci_addr)
> static int
> mlx5_args_check(const char *key, const char *val, void *opaque)
> {
> - struct priv *priv = opaque;
> + struct mlx5_args *args = opaque;
> unsigned long tmp;
>
> errno = 0;
> @@ -296,19 +308,19 @@ mlx5_args_check(const char *key, const char *val, void *opaque)
> return errno;
> }
> if (strcmp(MLX5_RXQ_CQE_COMP_EN, key) == 0) {
> - priv->cqe_comp = !!tmp;
> + args->cqe_comp = !!tmp;
> } else if (strcmp(MLX5_TXQ_INLINE, key) == 0) {
> - priv->txq_inline = tmp;
> + args->txq_inline = tmp;
> } else if (strcmp(MLX5_TXQS_MIN_INLINE, key) == 0) {
> - priv->txqs_inline = tmp;
> + args->txqs_inline = tmp;
> } else if (strcmp(MLX5_TXQ_MPW_EN, key) == 0) {
> - priv->mps = !!tmp ? priv->mps : MLX5_MPW_DISABLED;
> + args->mps = !!tmp;
> } else if (strcmp(MLX5_TXQ_MPW_HDR_DSEG_EN, key) == 0) {
> - priv->mpw_hdr_dseg = !!tmp;
> + args->mpw_hdr_dseg = !!tmp;
> } else if (strcmp(MLX5_TXQ_MAX_INLINE_LEN, key) == 0) {
> - priv->inline_max_packet_sz = tmp;
> + args->inline_max_packet_sz = tmp;
> } else if (strcmp(MLX5_TSO, key) == 0) {
> - priv->tso = !!tmp;
> + args->tso = !!tmp;
> } else {
> WARN("%s: unknown parameter", key);
> return -EINVAL;
> @@ -328,7 +340,7 @@ mlx5_args_check(const char *key, const char *val, void *opaque)
> * 0 on success, errno value on failure.
> */
> static int
> -mlx5_args(struct priv *priv, struct rte_devargs *devargs)
> +mlx5_args(struct mlx5_args *args, struct rte_devargs *devargs)
> {
> const char **params = (const char *[]){
> MLX5_RXQ_CQE_COMP_EN,
> @@ -354,7 +366,7 @@ mlx5_args(struct priv *priv, struct rte_devargs *devargs)
> for (i = 0; (params[i] != NULL); ++i) {
> if (rte_kvargs_count(kvlist, params[i])) {
> ret = rte_kvargs_process(kvlist, params[i],
> - mlx5_args_check, priv);
> + mlx5_args_check, args);
> if (ret != 0) {
> rte_kvargs_free(kvlist);
> return ret;
> @@ -368,6 +380,34 @@ mlx5_args(struct priv *priv, struct rte_devargs *devargs)
> static struct eth_driver mlx5_driver;
>
> /**
> + * Assign parameters from args into priv, only non default
> + * values are considered.
> + *
> + * @param[out] priv
> + * Pointer to private structure.
> + * @param[in] args
> + * Pointer to args values.
> + */
> +static void
> +mlx5_args_assign(struct priv *priv, struct mlx5_args *args)
> +{
> + if (args->cqe_comp != MLX5_ARG_UNSET)
> + priv->cqe_comp = args->cqe_comp;
> + if (args->txq_inline != MLX5_ARG_UNSET)
> + priv->txq_inline = args->txq_inline;
> + if (args->txqs_inline != MLX5_ARG_UNSET)
> + priv->txqs_inline = args->txqs_inline;
> + if (args->mps != MLX5_ARG_UNSET)
> + priv->mps = args->mps ? priv->mps : 0;
> + if (args->mpw_hdr_dseg != MLX5_ARG_UNSET)
> + priv->mpw_hdr_dseg = args->mpw_hdr_dseg;
> + if (args->inline_max_packet_sz != MLX5_ARG_UNSET)
> + priv->inline_max_packet_sz = args->inline_max_packet_sz;
> + if (args->tso != MLX5_ARG_UNSET)
> + priv->tso = args->tso;
> +}
> +
> +/**
> * DPDK callback to register a PCI device.
> *
> * This function creates an Ethernet device for each port of a given
> @@ -502,6 +542,15 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
> struct ibv_exp_device_attr exp_device_attr;
> struct ether_addr mac;
> uint16_t num_vfs = 0;
> + struct mlx5_args args = {
> + .cqe_comp = MLX5_ARG_UNSET,
> + .txq_inline = MLX5_ARG_UNSET,
> + .txqs_inline = MLX5_ARG_UNSET,
> + .mps = MLX5_ARG_UNSET,
> + .mpw_hdr_dseg = MLX5_ARG_UNSET,
> + .inline_max_packet_sz = MLX5_ARG_UNSET,
> + .tso = MLX5_ARG_UNSET,
> + };
>
> exp_device_attr.comp_mask =
> IBV_EXP_DEVICE_ATTR_EXP_CAP_FLAGS |
> @@ -570,12 +619,13 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
> }
> priv->cqe_comp = 1; /* Enable compression by default. */
> priv->tunnel_en = tunnel_en;
> - err = mlx5_args(priv, pci_dev->device.devargs);
> + err = mlx5_args(&args, pci_dev->device.devargs);
> if (err) {
> ERROR("failed to process device arguments: %s",
> strerror(err));
> goto port_error;
> }
> + mlx5_args_assign(priv, &args);
> if (ibv_exp_query_device(ctx, &exp_device_attr)) {
> ERROR("ibv_exp_query_device() failed");
> goto port_error;
> --
> 2.12.0
>
For the series,
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
--
Nélio Laranjeiro
6WIND
next prev parent reply other threads:[~2017-04-19 6:51 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-16 7:46 [dpdk-dev] [PATCH " Shahaf Shuler
2017-04-16 7:46 ` [dpdk-dev] [PATCH 2/2] net/mlx5: fix PMD specific parameters defaults Shahaf Shuler
2017-04-18 6:49 ` [dpdk-dev] [PATCH 1/2] net/mlx5: modify PMD args process Nélio Laranjeiro
2017-04-18 10:22 ` [dpdk-dev] [PATCH v2 " Shahaf Shuler
2017-04-18 10:22 ` [dpdk-dev] [PATCH v2 2/2] net/mlx5: fix PMD specific parameters defaults Shahaf Shuler
2017-04-19 10:57 ` Ferruh Yigit
2017-04-19 11:32 ` Shahaf Shuler
2017-04-19 12:25 ` Ferruh Yigit
2017-04-19 12:31 ` Shahaf Shuler
2017-04-19 6:50 ` Nélio Laranjeiro [this message]
2017-04-19 12:40 ` [dpdk-dev] [PATCH v2 1/2] net/mlx5: modify PMD args process Ferruh Yigit
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=20170419065053.GL14075@autoinstall.dev.6wind.com \
--to=nelio.laranjeiro@6wind.com \
--cc=adrien.mazarguil@6wind.com \
--cc=dev@dpdk.org \
--cc=shahafs@mellanox.com \
/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).