[dpdk-dev] [PATCH v3 00/20] Device querying

Gaetan Rivet gaetan.rivet at 6wind.com
Tue Mar 27 01:18:24 CEST 2018


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.

Cc: Bruce Richardson <bruce.richardson at intel.com>
  * @Bruce: I have noted the request for meson support.
    I will install it and attempt it once the bulk of the work is done.

Gaetan Rivet (20):
  kvargs: remove rte log dependency
  kvargs: build before EAL
  eal: list acceptable init priorities
  eal: introduce dtor macros
  eal: introduce device class abstraction
  eal/class: register destructor
  eal/dev: add device iterator interface
  eal/class: add device iteration
  eal/bus: add device iteration
  eal/dev: implement device iteration initialization
  eal/dev: implement device iteration
  bus/pci: fix find device implementation
  bus/pci: implement device iteration and comparison
  bus/pci: add device matching field id
  bus/vdev: fix find device implementation
  bus/vdev: implement device iteration
  bus/vdev: add device matching field driver
  ethdev: register ether layer as a class
  ethdev: add device matching field name
  app/testpmd: add show device command

 app/test-pmd/cmdline.c                             |  52 ++++
 drivers/bus/pci/Makefile                           |   2 +-
 drivers/bus/pci/pci_common.c                       |  77 ++++-
 drivers/bus/pci/rte_bus_pci.h                      |   3 +
 drivers/bus/vdev/Makefile                          |   2 +-
 drivers/bus/vdev/rte_bus_vdev.h                    |   3 +
 drivers/bus/vdev/vdev.c                            |  66 ++++-
 lib/Makefile                                       |   6 +-
 lib/librte_eal/bsdapp/eal/Makefile                 |   2 +
 lib/librte_eal/common/Makefile                     |   4 +-
 lib/librte_eal/common/eal_common_class.c           |  62 ++++
 lib/librte_eal/common/eal_common_dev.c             | 317 +++++++++++++++++++++
 lib/librte_eal/common/eal_common_log.c             |   2 +-
 lib/librte_eal/common/include/rte_bus.h            |   3 +-
 lib/librte_eal/common/include/rte_class.h          | 127 +++++++++
 lib/librte_eal/common/include/rte_common.h         |  32 ++-
 lib/librte_eal/common/include/rte_dev.h            |  95 ++++++
 lib/librte_eal/linuxapp/eal/Makefile               |   2 +
 lib/librte_eal/rte_eal_version.map                 |   4 +
 lib/librte_ether/Makefile                          |   3 +-
 lib/librte_ether/rte_class_eth.c                   |  79 +++++
 lib/librte_kvargs/Makefile                         |   2 +-
 lib/librte_kvargs/rte_kvargs.c                     |  13 +-
 .../include => librte_kvargs}/rte_string_fns.h     |   0
 24 files changed, 925 insertions(+), 33 deletions(-)
 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_ether/rte_class_eth.c
 rename lib/{librte_eal/common/include => librte_kvargs}/rte_string_fns.h (100%)

-- 
2.11.0



More information about the dev mailing list