All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Rybchenko <arybchenko@solarflare.com>
To: Thomas Monjalon <thomas@monjalon.net>, <dev@dpdk.org>
Cc: <gaetan.rivet@6wind.com>, <ophirmu@mellanox.com>,
	<ferruh.yigit@intel.com>
Subject: Re: [PATCH 3/5] ethdev: allow iterating with only class filter
Date: Mon, 8 Oct 2018 10:20:47 +0300	[thread overview]
Message-ID: <a44c1b90-0115-86e0-a89f-cc65bdc8242a@solarflare.com> (raw)
In-Reply-To: <20181007222554.4886-4-thomas@monjalon.net>

On 10/8/18 1:25 AM, Thomas Monjalon wrote:
> If no rte_device is given in the iterator,
> eth_dev_match() is looking at all ports without any restriction,
> except the ethdev kvargs filter.
>
> It allows to iterate with a devargs filter referencing only
> some ethdev parameters. The format (from the new devargs syntax) is:
> 	class=eth,paramY=Y
>
> Fixes: e815a7f69371 ("ethdev: register as a class")
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
>   lib/librte_ethdev/rte_class_eth.c |  2 +-
>   lib/librte_ethdev/rte_ethdev.c    | 13 +++++++++++--
>   2 files changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/lib/librte_ethdev/rte_class_eth.c b/lib/librte_ethdev/rte_class_eth.c
> index 84b646291..f0af51c36 100644
> --- a/lib/librte_ethdev/rte_class_eth.c
> +++ b/lib/librte_ethdev/rte_class_eth.c
> @@ -42,7 +42,7 @@ eth_dev_match(const struct rte_eth_dev *edev,
>   
>   	if (edev->state == RTE_ETH_DEV_UNUSED)
>   		return -1;
> -	if (edev->device != arg->device)
> +	if (arg->device != NULL && arg->device != edev->device)
>   		return -1;
>   	if (kvlist == NULL)
>   		/* Empty string matches everything. */

It looks like it is the only hunk which
Fixes: e815a7f69371 ("ethdev: register as a class")

everything else adjusts the previous patch.
I think this fix should go before and the rest should be squashed
in the previous patch. It was really questionable why it is safe
to dereference iter->bus without checking that it is not NULL.

> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
> index 83ab28c23..a43e0ab3a 100644
> --- a/lib/librte_ethdev/rte_ethdev.c
> +++ b/lib/librte_ethdev/rte_ethdev.c
> @@ -199,10 +199,18 @@ rte_eth_iterator_init(struct rte_dev_iterator *iter, const char *devargs_str)
>   	 * The devargs string may use various syntaxes:
>   	 *   - 0000:08:00.0,representor=[1-3]
>   	 *   - pci:0000:06:00.0,representor=[0,5]
> +	 *   - class=eth,mac=00:11:22:33:44:55
>   	 * A new syntax is in development (not yet supported):
>   	 *   - bus=X,paramX=x/class=Y,paramY=y/driver=Z,paramZ=z
>   	 */
>   
> +	/* Handle a case from future syntax, without any bus-level argument. */
> +	if (strncmp(devargs_str, iter_anybus_str,
> +			strlen(iter_anybus_str)) == 0) {
> +		iter->cls_str = devargs_str + strlen(iter_anybus_str);
> +		goto end;
> +	}
> +

It looks like a hack, but I guess we need it since rte_devargs_parse()
cannot handle the case. May be it is acceptable if we have no time
to solve it, but it would be good to highlight it better in the comments.


>   	/* Split bus, device and parameters. */
>   	ret = rte_devargs_parse(&devargs, devargs_str);
>   	if (ret != 0)
> @@ -239,6 +247,7 @@ rte_eth_iterator_init(struct rte_dev_iterator *iter, const char *devargs_str)
>   	}
>   	iter->bus_str = bus_str;
>   
> +end:
>   	iter->cls = rte_class_find_by_name("eth");
>   	return 0;
>   }
> @@ -250,7 +259,7 @@ rte_eth_iterator_next(struct rte_dev_iterator *iter)
>   		return RTE_MAX_ETHPORTS;
>   
>   	do { /* loop for matching rte_device */
> -		if (iter->class_device == NULL) {
> +		if (iter->bus != NULL && iter->class_device == NULL) {
>   			iter->device = iter->bus->dev_iterate(
>   					iter->device, iter->bus_str, iter);
>   			if (iter->device == NULL)
> @@ -260,7 +269,7 @@ rte_eth_iterator_next(struct rte_dev_iterator *iter)
>   				iter->class_device, iter->cls_str, iter);
>   		if (iter->class_device != NULL)
>   			return eth_dev_to_id(iter->class_device);
> -	} while (iter->class_device == NULL);
> +	} while (iter->bus != NULL && iter->class_device == NULL);
>   
>   	/* No more ethdev port to iterate. */
>   	free(RTE_CAST_FIELD(iter, bus_str, char *)); /* workaround const */

  reply	other threads:[~2018-10-08  7:21 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-07 22:25 [PATCH 0/5] replace attach/detach functions Thomas Monjalon
2018-10-07 22:25 ` [PATCH 1/5] bus/vdev: add iteration filter on name Thomas Monjalon
2018-10-08  6:46   ` Andrew Rybchenko
2018-10-08  7:47     ` Thomas Monjalon
2018-10-07 22:25 ` [PATCH 2/5] ethdev: add an iterator to match some devargs input Thomas Monjalon
2018-10-08  7:06   ` Andrew Rybchenko
2018-10-08  7:58     ` Thomas Monjalon
2018-10-07 22:25 ` [PATCH 3/5] ethdev: allow iterating with only class filter Thomas Monjalon
2018-10-08  7:20   ` Andrew Rybchenko [this message]
2018-10-08  8:07     ` Thomas Monjalon
2018-10-08  9:13       ` Andrew Rybchenko
2018-10-07 22:25 ` [PATCH 4/5] ethdev: remove deprecated attach/detach functions Thomas Monjalon
2018-10-08  7:28   ` Andrew Rybchenko
2018-10-08  8:09     ` Thomas Monjalon
2018-10-07 22:25 ` [PATCH 5/5] eal: " Thomas Monjalon
2018-10-09  0:16 ` [PATCH v2 0/6] replace " Thomas Monjalon
2018-10-09  0:16   ` [PATCH v2 1/6] bus/vdev: add iteration filter on name Thomas Monjalon
2018-10-09  9:17     ` Andrew Rybchenko
2018-10-09  0:16   ` [PATCH v2 2/6] ethdev: add iterator to match devargs input Thomas Monjalon
2018-10-09  9:31     ` Andrew Rybchenko
2018-10-09  9:49       ` Thomas Monjalon
2018-10-09  0:16   ` [PATCH v2 3/6] ethdev: allow iterating with pure class filter Thomas Monjalon
2018-10-09  9:40     ` Andrew Rybchenko
2018-10-09  0:16   ` [PATCH v2 4/6] doc: replace doxygen example in contribution guide Thomas Monjalon
2018-10-09  9:41     ` Andrew Rybchenko
2018-10-09  0:16   ` [PATCH v2 5/6] ethdev: remove deprecated attach/detach functions Thomas Monjalon
2018-10-09  9:43     ` Andrew Rybchenko
2018-10-09  0:16   ` [PATCH v2 6/6] eal: " Thomas Monjalon
2018-10-09  9:44     ` Andrew Rybchenko
2018-10-09 13:34 ` [PATCH v3 0/6] replace " Thomas Monjalon
2018-10-09 13:34   ` [PATCH v3 1/6] bus/vdev: add iteration filter on name Thomas Monjalon
2018-10-09 13:34   ` [PATCH v3 2/6] ethdev: add iterator to match devargs input Thomas Monjalon
2018-10-09 14:17     ` Thomas Monjalon
2018-10-09 13:34   ` [PATCH v3 3/6] ethdev: allow iterating with pure class filter Thomas Monjalon
2018-10-09 13:34   ` [PATCH v3 4/6] doc: replace doxygen example in contribution guide Thomas Monjalon
2018-10-09 13:34   ` [PATCH v3 5/6] ethdev: remove deprecated attach/detach functions Thomas Monjalon
2018-10-09 13:34   ` [PATCH v3 6/6] eal: " Thomas Monjalon
2018-10-09 22:33 ` [PATCH v4 0/6] replace " Thomas Monjalon
2018-10-09 22:33   ` [PATCH v4 1/6] bus/vdev: add iteration filter on name Thomas Monjalon
2018-10-09 22:33   ` [PATCH v4 2/6] ethdev: add iterator to match devargs input Thomas Monjalon
2018-10-16 10:58     ` Ferruh Yigit
2018-10-16 12:06       ` Thomas Monjalon
2018-10-09 22:33   ` [PATCH v4 3/6] ethdev: allow iterating with pure class filter Thomas Monjalon
2018-10-09 22:33   ` [PATCH v4 4/6] doc: replace doxygen example in contribution guide Thomas Monjalon
2018-10-09 22:33   ` [PATCH v4 5/6] ethdev: remove deprecated attach/detach functions Thomas Monjalon
2018-10-16 11:03     ` Ferruh Yigit
2018-10-16 12:12       ` Thomas Monjalon
2018-10-09 22:33   ` [PATCH v4 6/6] eal: " Thomas Monjalon
2018-10-18  1:35 ` [PATCH v5 0/7] replace " Thomas Monjalon
2018-10-18  1:35   ` [PATCH v5 1/7] bus/vdev: add iteration filter on name Thomas Monjalon
2018-10-18  1:35   ` [PATCH v5 2/7] ethdev: add iterator to match devargs input Thomas Monjalon
2018-10-18  1:35   ` [PATCH v5 3/7] ethdev: allow iterating with pure class filter Thomas Monjalon
2018-10-18  1:35   ` [PATCH v5 4/7] doc: replace doxygen example in contribution guide Thomas Monjalon
2018-10-18  1:35   ` [PATCH v5 5/7] ethdev: remove deprecated attach/detach functions Thomas Monjalon
2018-10-18  1:35   ` [PATCH v5 6/7] eal: " Thomas Monjalon
2018-10-18  1:35   ` [PATCH v5 7/7] app/testpmd: check not detaching device twice Thomas Monjalon
2018-10-18  1:45     ` Thomas Monjalon
2018-10-22 12:31 ` [PATCH v6 0/7] replace attach/detach functions Thomas Monjalon
2018-10-22 12:31   ` [PATCH v6 1/7] bus/vdev: add iteration filter on name Thomas Monjalon
2018-10-22 12:31   ` [PATCH v6 2/7] ethdev: add iterator to match devargs input Thomas Monjalon
2018-10-22 12:31   ` [PATCH v6 3/7] ethdev: allow iterating with pure class filter Thomas Monjalon
2018-10-22 12:31   ` [PATCH v6 4/7] doc: replace doxygen example in contribution guide Thomas Monjalon
2018-10-22 12:31   ` [PATCH v6 5/7] ethdev: remove deprecated attach/detach functions Thomas Monjalon
2018-10-22 12:31   ` [PATCH v6 6/7] eal: " Thomas Monjalon
2018-10-22 12:31   ` [PATCH v6 7/7] app/testpmd: check not detaching device twice Thomas Monjalon
2018-10-22 15:11   ` [PATCH v6 0/7] replace attach/detach functions Iremonger, Bernard
2018-10-22 15:38     ` Thomas Monjalon
2018-10-23  8:28 ` [PATCH v7 " Thomas Monjalon
2018-10-23  8:28   ` [PATCH v7 1/7] bus/vdev: add iteration filter on name Thomas Monjalon
2018-10-23  8:28   ` [PATCH v7 2/7] ethdev: add iterator to match devargs input Thomas Monjalon
2018-10-23  8:28   ` [PATCH v7 3/7] ethdev: allow iterating with pure class filter Thomas Monjalon
2018-10-23  8:28   ` [PATCH v7 4/7] doc: replace doxygen example in contribution guide Thomas Monjalon
2018-10-23  8:28   ` [PATCH v7 5/7] ethdev: remove deprecated attach/detach functions Thomas Monjalon
2018-10-23  8:28   ` [PATCH v7 6/7] eal: " Thomas Monjalon
2018-10-23  8:28   ` [PATCH v7 7/7] app/testpmd: check not detaching device twice Thomas Monjalon
2018-10-23 10:01     ` Iremonger, Bernard
2018-10-23 12:03       ` Thomas Monjalon
2018-10-23 12:13         ` Thomas Monjalon
2018-10-23 12:37           ` Thomas Monjalon
2018-10-23 14:06             ` Ferruh Yigit
2018-10-23 12:39           ` Iremonger, Bernard
2018-10-23 14:06   ` [PATCH v7 0/7] replace attach/detach functions 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=a44c1b90-0115-86e0-a89f-cc65bdc8242a@solarflare.com \
    --to=arybchenko@solarflare.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=gaetan.rivet@6wind.com \
    --cc=ophirmu@mellanox.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 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.