From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f44.google.com (mail-wm0-f44.google.com [74.125.82.44]) by dpdk.org (Postfix) with ESMTP id DFA7B1B89E for ; Wed, 11 Apr 2018 02:04:43 +0200 (CEST) Received: by mail-wm0-f44.google.com with SMTP id o23so23451149wmf.0 for ; Tue, 10 Apr 2018 17:04:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mVshB2RDvBBNEp02XnoxBtlWazWw6/Izysf8IoBPAro=; b=LNe3+BvbzZg1tyjwB5O5c5UtQ1gUVbhysuwy1ptoMNxrZCeoj0LYq/z6qNyyX1bE2B eHS7aFZuqLM4lz5eiYbbxefjffJqgRf7cPTP36u9EiJK6Sk4UjUoQRhcAbIolc8AiITz 4Mala8hVtzQfVw2Zd+p9e3FGA5rCHOwoo4wj6tDsW5PAJuAjNK/hEECZWjvdXxc6Lbxh oxH3qXsFfk2qHWVtK1FBXAXk42ui9hjzXUMI8gue5AT33ARPUhOpVLrO8N1wwtnwDciG vQn/aoIpoY5/r3fyXYs7yhY6dFxeurRmApYloo0km8WxY0IrKlsrdSIhh61hN8l6Ciks erRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mVshB2RDvBBNEp02XnoxBtlWazWw6/Izysf8IoBPAro=; b=hB3Yguz4NjoLN92fnbYq0m/r4p/RG87XfYjbX44NAmL0u+VpcenYUyEfgfI23XjWPC hqdRQh7pziS4tY1ziVaxUEI0jrKJj7cE2XLRBZlF9cY+kK1B899qG+H4/NbEHdqoE1d5 V085suthw5sZzDsCE2C+2UYxbM8+tGJdkCE5Lnzi23a+uUxC5tB/UHKg3A+UR6gDN9pY Bre/HWl3EYt7LWMT8CFS0XSALTCZ/fDAOa9RtYDM+GPL3V6nwej/l2B5p6M1HPZjuBH8 MRzZ52xLW7cuJHansxFy/Mk5SmNoZEUyaAv8Fvz9GulscUTdzn2w74FXQFdX/I2sh/dG 3CFg== X-Gm-Message-State: ALQs6tCypSKQWXiueCeTkielF7MrSekD6GxbjeaLspDfee98h2r/kIMy Yh/oJpgKfOg90Oo+Dhmy5Eko87Tm X-Google-Smtp-Source: AIpwx4/5YjrZRBO8gOBfnPv0aZRUVRM8pL3JhmEsW2IjSA37TzwVdU6h+s4IKArXgW4TUE3x7otUhA== X-Received: by 10.28.17.142 with SMTP id 136mr865715wmr.38.1523405082864; Tue, 10 Apr 2018 17:04:42 -0700 (PDT) Received: from bidouze.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 39sm7626563wry.89.2018.04.10.17.04.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 10 Apr 2018 17:04:41 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet , Neil Horman , Keith Wiles , Matan Azrad Date: Wed, 11 Apr 2018 02:04:01 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v5 00/21] Device querying 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, 11 Apr 2018 00:04:44 -0000 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. Gaetan Rivet (21): 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: add private generic device iterator 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 | 316 +++++++++++++++++++++ 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 | 97 +++++++ lib/librte_eal/linuxapp/eal/Makefile | 2 + lib/librte_eal/rte_eal_version.map | 4 + lib/librte_ether/Makefile | 4 +- lib/librte_ether/eth_private.c | 32 +++ lib/librte_ether/eth_private.h | 26 ++ lib/librte_ether/rte_class_eth.c | 86 ++++++ 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 28 files changed, 1045 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/eth_private.c create mode 100644 lib/librte_ether/eth_private.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