[dpdk-dev] [PATCH v4 00/20] Device querying
Gaetan Rivet
gaetan.rivet at 6wind.com
Thu Mar 29 23:23: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.
* @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.
Gaetan Rivet (20):
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
kvargs: add generic string matching callback
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 | 87 +++++-
drivers/bus/pci/rte_bus_pci.h | 3 +
drivers/bus/vdev/Makefile | 3 +-
drivers/bus/vdev/rte_bus_vdev.h | 3 +
drivers/bus/vdev/vdev.c | 66 +++-
lib/Makefile | 7 +-
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 | 334 +++++++++++++++++++++
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 | 3 +-
lib/librte_kvargs/rte_kvargs.c | 12 +-
lib/librte_kvargs/rte_kvargs.h | 28 ++
lib/librte_kvargs/rte_kvargs_version.map | 7 +
.../include => librte_kvargs}/rte_string_fns.h | 0
26 files changed, 995 insertions(+), 27 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