Skip to content

Device querying

Gaetan Rivet dpdk-dev 11 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v11 Latest25 patches 10 repliesIn review
  2. v1027 patches 18 repliesSuperseded
  3. v927 patches 4 repliesSuperseded
Earlier versions · 8
VersionPostedPatchesRepliesStatus
v821 patches6 repliesSuperseded
v722 patches5 repliesSuperseded
v622 patches2 repliesSuperseded
v521 patches9 repliesSuperseded
v420 patches10 repliesSuperseded
v320 patches24 repliesSuperseded
v218 patches15 repliesSuperseded
v118 patches2 repliesSuperseded

Changes in v11 from the cover letter

* Some cleanup, rewriting of comments
and commit logs.
* New fields in devargs and dev_it renamed.

Patches in v11 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/25devargs: use rte-log functionslib/librte_eal/common/eal_common_devargs.c+4 -30 replies
2/25devargs: add non-variadic parsing functiondrivers/net/failsafe/failsafe_args.c drivers/net/failsafe/failsafe_eal.c lib/librte_eal/common/eal_common_dev.c +4 more+76 -170 replies
3/25kvargs: remove error logslib/librte_kvargs/rte_kvargs.c+5 -170 replies
4/25kvargs: build before EALlib/Makefile lib/librte_eal/meson.build lib/librte_kvargs/Makefile +2 more+12 -50 replies
5/25kvargs: introduce a more flexible parsing functionlib/Makefile lib/librte_kvargs/meson.build lib/librte_kvargs/rte_kvargs.c +2 more+67 -00 replies
6/25eal: introduce dtor macroslib/librte_eal/common/include/rte_common.h+23 -00 replies
7/25eal: introduce device class abstractionlib/librte_eal/bsdapp/eal/Makefile lib/librte_eal/common/Makefile lib/librte_eal/common/eal_common_class.c +5 more+201 -14 replies
8/25devargs: add function to parse device layerslib/librte_eal/common/eal_common_devargs.c lib/librte_eal/common/eal_private.h lib/librte_eal/common/include/rte_devargs.h+188 -32 replies
9/25eal/dev: add device iterator interfacelib/librte_eal/common/include/rte_bus.h lib/librte_eal/common/include/rte_class.h lib/librte_eal/common/include/rte_dev.h+49 -00 replies
10/25eal/dev: implement device iteration initializationlib/Makefile lib/librte_eal/bsdapp/eal/Makefile lib/librte_eal/common/eal_common_dev.c +3 more+83 -00 replies
11/25eal/dev: implement device iterationlib/librte_eal/common/eal_common_dev.c lib/librte_eal/common/include/rte_dev.h lib/librte_eal/rte_eal_version.map+195 -03 replies
12/25kvargs: add generic string matching callbacklib/librte_kvargs/rte_kvargs.c lib/librte_kvargs/rte_kvargs.h lib/librte_kvargs/rte_kvargs_version.map+37 -00 replies
13/25bus/pci: implement device iteration and comparisondrivers/bus/pci/Makefile drivers/bus/pci/meson.build drivers/bus/pci/pci_common.c +2 more+86 -40 replies
14/25bus/pci: add device matching field iddrivers/bus/pci/pci_params.c+27 -20 replies
15/25bus/vdev: implement device iterationdrivers/bus/vdev/Makefile drivers/bus/vdev/meson.build drivers/bus/vdev/vdev.c +2 more+89 -60 replies
16/25bus/vdev: add device matching field driverdrivers/bus/vdev/vdev_params.c+13 -20 replies
17/25ethdev: add private generic device iteratorlib/librte_ethdev/Makefile lib/librte_ethdev/eth_private.c lib/librte_ethdev/eth_private.h +1 more+60 -10 replies
18/25ethdev: register ether layer as a classlib/librte_ethdev/Makefile lib/librte_ethdev/meson.build lib/librte_ethdev/rte_class_eth.c+82 -10 replies
19/25ethdev: add device matching field namelib/librte_ethdev/rte_class_eth.c+7 -00 replies
20/25app/testpmd: add show device commandapp/test-pmd/cmdline.c doc/guides/testpmd_app_ug/testpmd_funcs.rst+78 -00 replies
21/25bus/pci: pre-process declarative PCI devargsdrivers/bus/pci/bsd/pci.c drivers/bus/pci/linux/pci.c drivers/bus/pci/pci_params.c +1 more+77 -00 replies
22/25bus/vdev: pre-process declarative vdev devargsdrivers/bus/vdev/vdev.c drivers/bus/vdev/vdev_params.c drivers/bus/vdev/vdev_private.h+62 -40 replies
23/25bus/pci: process declarative PCI devargsdrivers/bus/pci/pci_common.c drivers/bus/pci/pci_params.c drivers/bus/pci/private.h+26 -00 replies
24/25ethdev: process declarative eth devargslib/librte_ethdev/eth_private.h lib/librte_ethdev/rte_class_eth.c lib/librte_ethdev/rte_ethdev.c+74 -00 replies
25/25eal: add generic dev parameterlib/librte_eal/common/eal_common_devargs.c lib/librte_eal/common/eal_common_options.c lib/librte_eal/common/eal_options.h+37 -50 replies

Reviews trailers per patch

6 of 25 patches have a Reviewed-by or Acked-by.

PatchShreyansh JainThomas MonjalonBernard Iremonger
1/25
2/25A-b A-b
3/25A-b
4/25
5/25A-b A-b
6/25A-b
7/25
8/25A-b
9/25
10/25
11/25
12/25
13/25
14/25
15/25
16/25
17/25
18/25
19/25
20/25A-b
21/25
22/25
23/25
24/25
25/25

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 3 reviewers.

Read the v11 thread

Cover letter [PATCH v11 00/25] Device querying

This patchset introduces a new EAL API for querying devices, filtered by arbitrary properties.

The following elements are introduced to this end:

* A new object, "rte_class", is used to describe the device class abstraction layer (eth, crypto, ...).

* Both rte_bus and rte_class now offer a way to
list their devices and filter the result
using locally defined properties.

* The rte_dev API now has an rte_dev_iterator, which is the way for the user to define the device filter and iterate upon the resulting set.

As an example, the "eth" device class is implemented.

Additionally, the device filters for

+ rte_bus_pci
+ rte_bus_vdev
+ rte_class_eth

are implemented and can be used with some
properties each, to show how to extend those.

Some example of filters:

"bus=pci/class=eth"
"bus=pci"
"class=eth"
"class=eth,name=net_ring0"
"bus=pci,id=00:00.0"
"bus=vdev,driver=net_ring"

---

v2:

* Reworked the dev_iterate callback to simplify
its implementation.

Now dev_iterate implementation do not need to learn about the intricacies of the rte_dev_iterator. The rte_dev_iterator is managed purely by the rte_dev_iterator_next function. Buses and classes then do not have to care about settings things right.

Additionally, dev_iterate implementations do not have to sanitize their dev string anymore, they are prepared by the rte_dev layer prior, which also reduces the number of dynamic allocations.

v3:

* Introduced central constructor priority list.
* Removed lightweight kvarg parsing utility,
using librte_kvargs instead.
* Reversed dependencies of librte_kvargs and
librte_eal.
* Fixed a few bugs.
* @Bruce: I have noted the request for meson support.
I will install it and attempt it once the bulk of the work is done.

v4:

* Fixed a few bugs, added relevant acks,
fixed some typos.
* Made each matching functions actually check for a proper list of accepted properties.
* rte_kvargs now includes rte_eal directly and keeps rte_log.
* added generic string comparison function to rte_kvargs, as some kind of comparison should probably be shared by many layers.

v5:

* Rebased on master
* Use strcspn instead of custom function.
* Introduce private generic rte_eth_dev iterator. This could be generalized to other iterators (port_next, owner_id-aware, etc).
* Attempted to support meson.build.
Got lost in the implicit variables declared when inversing dependencies between kvargs and EAL. Removed anything related to meson.
* Postponed genericization of work from device query to device declaration.
Much bigger than anticipated, will let this part get in first and iterate over it.

v6:

* Rebased on master
* Introduce RTE_PRIORITY_LAST, to explicitly set the lowest constructor priority.
* Fix copyright notice for eth_privage.* files.

v7:

* Rebased on master
* Fix rte_kvargs_strcmp return value.
* Fix layer parsing error
devstr "bus=pci/onemorelayer" now tells
that the additional layer is not recognized.

v8:

* Rebased on master
* Cleaned kvargs use: introduced
a new parser function, that simplifies using the library for DPDK devargs.
* Refactored devargs parsing in a single function within rte_devargs.
This function is useful both for rte_dev parsing its iterator, and for rte_devargs parsing --dev parameters (not yet implemented).
* A few small bugfixes.

v9:

* Rebased on master
* Fixed cyclic dependency kvargs <-> eal
* Fixed a few checkpatch issues
* Added dynamic help to testpmd for new "show device" command
* Added devargs processing stubs to
primary buses / classes
* Added new --dev generic device declaration option

v10:

* Support meson build

v11:

* Some cleanup, rewriting of comments
and commit logs.
* New fields in devargs and dev_it renamed.

Gaetan Rivet (25):
devargs: use rte-log functions
devargs: add non-variadic parsing function
kvargs: remove error logs
kvargs: build before EAL
kvargs: introduce a more flexible parsing function
eal: introduce dtor macros
eal: introduce device class abstraction
devargs: add function to parse device layers eal/dev: add device iterator interface eal/dev: implement device iteration initialization eal/dev: implement device iteration
kvargs: add generic string matching callback bus/pci: implement device iteration and comparison bus/pci: add device matching field id bus/vdev: implement device iteration bus/vdev: add device matching field driver
ethdev: add private generic device iterator
ethdev: register ether layer as a class
ethdev: add device matching field name app/testpmd: add show device command bus/pci: pre-process declarative PCI devargs bus/vdev: pre-process declarative vdev devargs bus/pci: process declarative PCI devargs
ethdev: process declarative eth devargs
eal: add generic dev parameter

 app/test-pmd/cmdline.c                      |  54 +++++
 doc/guides/testpmd_app_ug/testpmd_funcs.rst |  24 +++
 drivers/bus/pci/Makefile                    |   3 +-
 drivers/bus/pci/bsd/pci.c                   |   5 +
 drivers/bus/pci/linux/pci.c                 |   5 +
 drivers/bus/pci/meson.build                 |   6 +-
 drivers/bus/pci/pci_common.c                |   6 +-
 drivers/bus/pci/pci_params.c                | 139 ++++++++++++
 drivers/bus/pci/private.h                   |  54 +++++
 drivers/bus/vdev/Makefile                   |   3 +-
 drivers/bus/vdev/meson.build                |   5 +-
 drivers/bus/vdev/vdev.c                     |  20 +-
 drivers/bus/vdev/vdev_params.c              | 112 ++++++++++
 drivers/bus/vdev/vdev_private.h             |  32 +++
 drivers/net/failsafe/failsafe_args.c        |   2 +-
 drivers/net/failsafe/failsafe_eal.c         |   2 +-
 lib/Makefile                                |   5 +-
 lib/librte_eal/bsdapp/eal/Makefile          |   2 +
 lib/librte_eal/common/Makefile              |   2 +-
 lib/librte_eal/common/eal_common_class.c    |  62 ++++++
 lib/librte_eal/common/eal_common_dev.c      | 227 +++++++++++++++++++-
 lib/librte_eal/common/eal_common_devargs.c  | 197 +++++++++++++++--
 lib/librte_eal/common/eal_common_options.c  |  36 +++-
 lib/librte_eal/common/eal_options.h         |   2 +
 lib/librte_eal/common/eal_private.h         |  34 +++
 lib/librte_eal/common/include/rte_bus.h     |   1 +
 lib/librte_eal/common/include/rte_class.h   | 132 ++++++++++++
 lib/librte_eal/common/include/rte_common.h  |  24 +++
 lib/librte_eal/common/include/rte_dev.h     |  97 +++++++++
 lib/librte_eal/common/include/rte_devargs.h |  53 ++++-
 lib/librte_eal/common/meson.build           |   2 +
 lib/librte_eal/linuxapp/eal/Makefile        |   2 +
 lib/librte_eal/meson.build                  |   1 +
 lib/librte_eal/rte_eal_version.map          |   5 +
 lib/librte_ethdev/Makefile                  |   4 +-
 lib/librte_ethdev/eth_private.c             |  31 +++
 lib/librte_ethdev/eth_private.h             |  31 +++
 lib/librte_ethdev/meson.build               |   4 +-
 lib/librte_ethdev/rte_class_eth.c           | 148 +++++++++++++
 lib/librte_ethdev/rte_ethdev.c              |   9 +-
 lib/librte_kvargs/Makefile                  |   2 +-
 lib/librte_kvargs/meson.build               |   5 +
 lib/librte_kvargs/rte_kvargs.c              |  57 +++--
 lib/librte_kvargs/rte_kvargs.h              |  58 +++++
 lib/librte_kvargs/rte_kvargs_version.map    |   8 +
 lib/meson.build                             |   8 +-
 46 files changed, 1654 insertions(+), 67 deletions(-)
 create mode 100644 drivers/bus/pci/pci_params.c
 create mode 100644 drivers/bus/vdev/vdev_params.c
 create mode 100644 drivers/bus/vdev/vdev_private.h
 create mode 100644 lib/librte_eal/common/eal_common_class.c
 create mode 100644 lib/librte_eal/common/include/rte_class.h
 create mode 100644 lib/librte_ethdev/eth_private.c
 create mode 100644 lib/librte_ethdev/eth_private.h
 create mode 100644 lib/librte_ethdev/rte_class_eth.c
Signature · 1 line
2.18.0