From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by dpdk.org (Postfix) with ESMTP id 950E62BAE for ; Wed, 19 Apr 2017 08:51:01 +0200 (CEST) Received: by mail-wm0-f47.google.com with SMTP id w64so72261451wma.0 for ; Tue, 18 Apr 2017 23:51:01 -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=jxRabOsij3qr04UhppUM0Ysvm+lSUnthQkN33/MSE7c=; b=A5dLg3d8T4iac4SMhWXfxF1uDdTaBY4j4uuvvNajm5A24v3AXdkNvCdUMBRlfR74GS NdX/NjIm6y1PZILwtrZzQymsbrOK+FXQAEfUBtWz55WRxejIkXWHeOpq5Tl5IxeeqRfC PNL1ywoMkLOkZl11I3XI4mF+tM9PgErINhOgmD4pPfWq4HI8FFQsjRnnmnMqe4uiUL1f bbKdktFyziDNwdQo6waeRsRBUzVvt2DNELAXeLyYJdJxWQVAnJmx8f3+iSjTSnxo8AcP FUY/EKY8gr9OKwBiwzx1wTTIgrlplPB1/XB8As4mL1l/H/PMkjXoz8SHcyVtHRCFY1tH 854g== 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=jxRabOsij3qr04UhppUM0Ysvm+lSUnthQkN33/MSE7c=; b=SlXa0t8meze1XqIWm7MoVpcVOQq20nwNnGo76Ml8udg+X9CS95xNa1mYqR3VMI5eRU 9Ej7OjKwmivSke4OKVNBgih7mRpEmK5Oux30En3fySao/GgFl+3+RtxoImicOvYYDWPf bfUOuNbE4ITpRCAHl/IjOHd1ynE6GAxTbUXx8xLUyz2hk7jSfrk5MpU1UhX9gGcWfVgd m4lHhtBKKLBZvE1+dNgGiGPzdRZ1IU24QewPGbTLFcSiQgiQg6RNoZVDJ4AsNLJyzXaS UqZN7+aGGJMUfDtWgDeFYgio4LYdUTvT5kikO0RCl/1RrtaPdNylZ3UZ8Rz8aQla/Z2Y caYg== X-Gm-Message-State: AN3rC/7RS9egOix9kUOmgt4GiJanscwUuZlrf6H9S3bkEm2Gx18JhFBk C5tXTwRVwV49CGnb X-Received: by 10.28.17.70 with SMTP id 67mr1407626wmr.78.1492584660961; Tue, 18 Apr 2017 23:51:00 -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 w126sm17495112wmb.25.2017.04.18.23.51.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 18 Apr 2017 23:51:00 -0700 (PDT) Date: Wed, 19 Apr 2017 08:50:53 +0200 From: =?iso-8859-1?Q?N=E9lio?= Laranjeiro To: Shahaf Shuler Cc: adrien.mazarguil@6wind.com, dev@dpdk.org Message-ID: <20170419065053.GL14075@autoinstall.dev.6wind.com> References: <20170416074640.171390-1-shahafs@mellanox.com> <20170418102228.145971-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: <20170418102228.145971-1-shahafs@mellanox.com> User-Agent: Mutt/1.5.23 (2014-03-12) Subject: Re: [dpdk-dev] [PATCH v2 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: Wed, 19 Apr 2017 06:51:01 -0000 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 > Acked-by: Yongseok Koh > --- > 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 -- Nélio Laranjeiro 6WIND