From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by dpdk.org (Postfix) with ESMTP id 0A954F94 for ; Tue, 18 Apr 2017 08:50:04 +0200 (CEST) Received: by mail-wm0-f50.google.com with SMTP id w64so48181543wma.0 for ; Mon, 17 Apr 2017 23:50:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=GJXq2Wbxk2zpHrurgM5QDvLeGXJNgBWe8YQ+XpYKAFE=; b=rCknjP2Al4SAEOPadyoP6TnEKK6NBUpmpQOasd54qoSnvEanyM577cTHvnMXBDJj2L WbxV31PmbTiKOvEqkNIPWU7e78SBPcuBGXhHWqt0gyOJOHsyvfhPtHRUEpcWFQcgq+6O /8E0tkW+uG2X45eqmi9tBAb5dkC6apHOmPuZzWZzA9I0kywkpCmfW9E+AZRre+zr8FRJ mxIveMehqqwBKLpgf1iyQEVqrvabthrM09u3CFvBnxm+0AP16UzFVYUTESRlDyIBK2AT 5sP8LCbimckFYvRwwC175md4rAUxfvoyR9i7e9wZzdDmJFdOwV/2M84r57AibJSqoEae Rj8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=GJXq2Wbxk2zpHrurgM5QDvLeGXJNgBWe8YQ+XpYKAFE=; b=ps4WWJ6La2zn4kiFuGOecNirN/tovt7eP9pAEshwLQGK5ETRGeuD8vplsevdP8cwAt wLoimIN1dj0aVS5cXEUCWyLT6HNkfjyS+hIz2n9UzPUQpykpIvVCZ4y0QB6/lNOLk9fF nhlgkGVh/wIouIFK1Dn+Kg8tkIf6pqW1kT/NVD16d1AeqOLCwH5eLKDE34RCYd7cTZ8N nz3I6ChO3LozXA8WEpFCsZKYrRGh8IerCYp+3oZxV22eSA7DmaHw3OUALi7j9ByJbii9 bYirN2d7aXj5PgfnQJh3O7h/EB01BHbbqnQ3wRPw8RYVOE/1Yzd88kHvgFY7QyUiP1PS aucQ== X-Gm-Message-State: AN3rC/7YLHR1maQH08DU3MAfRGDl2yHN2f8Bsadd05w9AQ3E7t7BOput Bg5W/bAkem15lX199J+m9g== X-Received: by 10.28.15.14 with SMTP id 14mr12136669wmp.106.1492498204572; Mon, 17 Apr 2017 23:50:04 -0700 (PDT) Received: from autoinstall.dev.6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 13sm13558700wml.25.2017.04.17.23.50.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 17 Apr 2017 23:50:04 -0700 (PDT) Date: Tue, 18 Apr 2017 08:49:56 +0200 From: =?iso-8859-1?Q?N=E9lio?= Laranjeiro To: Shahaf Shuler Cc: adrien.mazarguil@6wind.com, dev@dpdk.org Message-ID: <20170418064956.GH14075@autoinstall.dev.6wind.com> References: <20170416074640.171390-1-shahafs@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20170416074640.171390-1-shahafs@mellanox.com> User-Agent: Mutt/1.5.23 (2014-03-12) Subject: Re: [dpdk-dev] [PATCH 1/2] net/mlx5: modify PMD args process X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Apr 2017 06:50:05 -0000 Hi Shahaf, On Sun, Apr 16, 2017 at 10:46:39AM +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 > Acked-by: Yongseok Koh > --- > 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..9d850dbbd 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_UNSET (-1) I'll suggest a stronger name space like MLX5_ARG_UNSET. > +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_UNSET) > + priv->cqe_comp = args->cqe_comp; > + if (args->txq_inline != MLX5_UNSET) > + priv->txq_inline = args->txq_inline; > + if (args->txqs_inline != MLX5_UNSET) > + priv->txqs_inline = args->txqs_inline; > + if (args->mps != MLX5_UNSET) > + priv->mps = args->mps ? priv->mps : 0; > + if (args->mpw_hdr_dseg != MLX5_UNSET) > + priv->mpw_hdr_dseg = args->mpw_hdr_dseg; > + if (args->inline_max_packet_sz != MLX5_UNSET) > + priv->inline_max_packet_sz = args->inline_max_packet_sz; > + if (args->tso != MLX5_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_UNSET, > + .txq_inline = MLX5_UNSET, > + .txqs_inline = MLX5_UNSET, > + .mps = MLX5_UNSET, > + .mpw_hdr_dseg = MLX5_UNSET, > + .inline_max_packet_sz = MLX5_UNSET, > + .tso = MLX5_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 > -- Nélio Laranjeiro 6WIND