From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by dpdk.org (Postfix) with ESMTP id DEED74CB3 for ; Tue, 27 Mar 2018 01:19:05 +0200 (CEST) Received: by mail-wm0-f51.google.com with SMTP id l201so149491wmg.0 for ; Mon, 26 Mar 2018 16:19:05 -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=TEHm/OlQzr40z0RVjfrC/MKtV5i9Su6S4RR0dbTFGPc=; b=TFHP8moM+vc6JVP0RlIBWbrBK/FQOp7hCLGQipX1EYtdbtEp2CbOpRGU5a5BxM4Qjg 75AfU0R5JnGjWgJ2h4FqoJhUAUE2QfPUvzBK1BORTfEybGa2HjpB5bmg+cgRvmNV7747 X9Iral2Ev/GS1sh2Tr318Vah8Mv/xHMFa3QMkds+BmAKFn+/DqcPrdco4O73GBsavFaZ wSDbOLKEhakJpg/+3WTQSrZA49DSK4wYOXU7WEYiPRFR2m8gr1Uluhkk8L/oSyWe2W3B eB2L0xav8loEYKWnPlUX31NiMDhxjYw6Q4BnYFXC+Ot0Ts6lKcPZbrlZhzcREwjKuQ4n wHUA== 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=TEHm/OlQzr40z0RVjfrC/MKtV5i9Su6S4RR0dbTFGPc=; b=PB5DXQActzYPsoSO2jcjIi6NfuOKI+jRIujSzRZG3YGyyof7Av2e+zhk8lkqnjM6U5 VtQn+7mK16NoJEG35zHXZoj2QPI1QxRYc5CWJ8FI+Ys7kSKaIGb/uoha9qidSnwI2DuJ PTnKBPNWcW4ymBU2Or4gilWojYfpXKaKE7Kw5okT12NYJSrZoEc0V0EfJAFPuqWCLrH/ CCQJR56nJVXPFiY5S/1yt8LmKYmqdoTpiv8wy5xcSOWpc7cn+65xvGU0HWHKhoS85uzG q5eMnd/MnTcn4YFeik9BG7fmRW4x5DXSm2H9GfrJuX3NmFyRAApwMYqpe3UqbGjjTEzk yA5w== X-Gm-Message-State: AElRT7FqD4iUpZgkOBYtTHtKTrMUsQlYuT/kxcWpEqwgnfpXllOkK93V Uh/V/M2mvgf4T+Y53D626pXl8fO8 X-Google-Smtp-Source: AIpwx4/0Egt5/KPGMw0txd2ES32T/RhRIxFDow3Is4SseGk1blE1ZTjAhjaonkf+7qQ/GMRCdCXLXA== X-Received: by 10.28.52.17 with SMTP id b17mr2972606wma.142.1522106344855; Mon, 26 Mar 2018 16:19:04 -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 67sm343712wra.9.2018.03.26.16.19.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 26 Mar 2018 16:19:03 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet , Bruce Richardson Date: Tue, 27 Mar 2018 01:18:24 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v3 00/20] 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: Mon, 26 Mar 2018 23:19:06 -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. Cc: Bruce Richardson * @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