From patchwork Thu Aug 30 13:41:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44023 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 370B54CA0; Thu, 30 Aug 2018 15:42:37 +0200 (CEST) Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by dpdk.org (Postfix) with ESMTP id 390462BF7 for ; Thu, 30 Aug 2018 15:42:34 +0200 (CEST) Received: by mail-wm0-f65.google.com with SMTP id s12-v6so2059146wmc.0 for ; Thu, 30 Aug 2018 06:42:34 -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 :mime-version:content-transfer-encoding; bh=P+2HyqC4ZvrPG7gLe4w+bgYhBL0eNkfSbx9QrWWRZQA=; b=1+qrP+qljLAlSLmnlTgkSLX5Fo7croLWVX4VFJrpWKptqk539tFUpZwPZY1sqE8Sm8 MDWy/GHqVVc3A7IJqlUA3QZpFZRN6r8JqWLRHThWfFbdZ1iQgiyXFtzJ0T1DgtkEokzt YrMBIywDmSOYSNJCCUHw4fILO6A90EevSMbS5ukLNO+m5ifXo1UuThBb7LxNz75A9Xx6 TCeCfEFNpAzqZYpZe+IQbEHsiQ6nGCXvWwITIxlz3IZczIS7xsoNWacjaeF5wE04AGBR 9p2cN/vn1bSZRwgPxoBk59WGjqzgeXZxMNLtRObEIBXIHjDOp0F1jB5+fMVXcFcJDVKG 4zbQ== 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:mime-version:content-transfer-encoding; bh=P+2HyqC4ZvrPG7gLe4w+bgYhBL0eNkfSbx9QrWWRZQA=; b=dDAIfiKipno1pOAEz7TI6ogZbbUZ4X+kCNbg/Z7x/1eabFJB51T01MkIWtjY7tFkfb RwSMOkRPQKibZEuYDRHbmelqf/gLJU7T72iYvsIBIkNuIVYhgWYv1E709c0mHfxQSxqk yma7Y5HMBWg6oHk6YjtOy1JkkVM8CzVOhgAv3H3n9tH+jTRluUGNqxQJOLripfXqswT8 kiZPHgtsfRIpAj1usaUNUIKg58nAiFEunjvaSLwhtEsdmaqRksXv7Q9X5Wj6m/kFmiIy 6Xo1Ev4QcIjlPrYojCv1pXxadFiLLhAjIU6vYmbXqzncPKSlxLpi2fqpsw1og4it6bv+ RctQ== X-Gm-Message-State: APzg51A1+V+HRyFdEu9p3Tw8V0yTVTYN1vd/x4XOhQpycnUPw+58S/WY nrdFjkAXo8zxoFrPJ7kdeSUPmiW4tvE= X-Google-Smtp-Source: ANB0VdakmcdaWRYzzaw5eg2/C2e8QvlNk8s0sTVT0sjZQVLnzaaLDKjyz8M3DGUMEiUGQkeFIkOLJw== X-Received: by 2002:a1c:889:: with SMTP id 131-v6mr1793863wmi.142.1535636553601; Thu, 30 Aug 2018 06:42:33 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:32 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:41:52 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 01/13] bus/pci: implement device iteration and comparison 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Signed-off-by: Gaetan Rivet --- drivers/bus/pci/Makefile | 3 +- drivers/bus/pci/meson.build | 6 +++- drivers/bus/pci/pci_common.c | 3 +- drivers/bus/pci/pci_params.c | 53 ++++++++++++++++++++++++++++++++++++ drivers/bus/pci/private.h | 25 +++++++++++++++++ 5 files changed, 86 insertions(+), 4 deletions(-) create mode 100644 drivers/bus/pci/pci_params.c diff --git a/drivers/bus/pci/Makefile b/drivers/bus/pci/Makefile index cf373068a..4de953f8f 100644 --- a/drivers/bus/pci/Makefile +++ b/drivers/bus/pci/Makefile @@ -26,10 +26,11 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/$(SYSTEM)app/eal CFLAGS += -DALLOW_EXPERIMENTAL_API LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring -LDLIBS += -lrte_ethdev -lrte_pci +LDLIBS += -lrte_ethdev -lrte_pci -lrte_kvargs include $(RTE_SDK)/drivers/bus/pci/$(SYSTEM)/Makefile SRCS-$(CONFIG_RTE_LIBRTE_PCI_BUS) := $(addprefix $(SYSTEM)/,$(SRCS)) +SRCS-$(CONFIG_RTE_LIBRTE_PCI_BUS) += pci_params.c SRCS-$(CONFIG_RTE_LIBRTE_PCI_BUS) += pci_common.c SRCS-$(CONFIG_RTE_LIBRTE_PCI_BUS) += pci_common_uio.c diff --git a/drivers/bus/pci/meson.build b/drivers/bus/pci/meson.build index 72939e598..23d6a5fec 100644 --- a/drivers/bus/pci/meson.build +++ b/drivers/bus/pci/meson.build @@ -3,7 +3,9 @@ deps += ['pci'] install_headers('rte_bus_pci.h') -sources = files('pci_common.c', 'pci_common_uio.c') +sources = files('pci_common.c', + 'pci_common_uio.c', + 'pci_params.c') if host_machine.system() == 'linux' sources += files('linux/pci.c', 'linux/pci_uio.c', @@ -17,3 +19,5 @@ endif # memseg walk is not part of stable API yet allow_experimental_apis = true + +deps += ['kvargs'] diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c index 7736b3f9c..c7695d108 100644 --- a/drivers/bus/pci/pci_common.c +++ b/drivers/bus/pci/pci_common.c @@ -27,8 +27,6 @@ #include "private.h" -extern struct rte_pci_bus rte_pci_bus; - #define SYSFS_PCI_DEVICES "/sys/bus/pci/devices" const char *rte_pci_get_sysfs_path(void) @@ -435,6 +433,7 @@ struct rte_pci_bus rte_pci_bus = { .unplug = pci_unplug, .parse = pci_parse, .get_iommu_class = rte_pci_get_iommu_class, + .dev_iterate = rte_pci_dev_iterate, }, .device_list = TAILQ_HEAD_INITIALIZER(rte_pci_bus.device_list), .driver_list = TAILQ_HEAD_INITIALIZER(rte_pci_bus.driver_list), diff --git a/drivers/bus/pci/pci_params.c b/drivers/bus/pci/pci_params.c new file mode 100644 index 000000000..0fde75803 --- /dev/null +++ b/drivers/bus/pci/pci_params.c @@ -0,0 +1,53 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2018 Gaëtan Rivet + */ + +#include +#include +#include +#include +#include + +#include "private.h" + +enum pci_params { + RTE_PCI_PARAMS_MAX, +}; + +static const char * const pci_params_keys[] = { + [RTE_PCI_PARAMS_MAX] = NULL, +}; + +static int +pci_dev_match(const struct rte_device *dev, + const void *_kvlist) +{ + const struct rte_kvargs *kvlist = _kvlist; + + (void) dev; + (void) kvlist; + return 0; +} + +void * +rte_pci_dev_iterate(const void *start, + const char *str, + const struct rte_dev_iterator *it __rte_unused) +{ + rte_bus_find_device_t find_device; + struct rte_kvargs *kvargs = NULL; + struct rte_device *dev; + + if (str != NULL) { + kvargs = rte_kvargs_parse(str, pci_params_keys); + if (kvargs == NULL) { + RTE_LOG(ERR, EAL, "cannot parse argument list\n"); + rte_errno = EINVAL; + return NULL; + } + } + find_device = rte_pci_bus.bus.find_device; + dev = find_device(start, pci_dev_match, kvargs); + rte_kvargs_free(kvargs); + return dev; +} diff --git a/drivers/bus/pci/private.h b/drivers/bus/pci/private.h index 8ddd03e16..0e689fa74 100644 --- a/drivers/bus/pci/private.h +++ b/drivers/bus/pci/private.h @@ -10,6 +10,8 @@ #include #include +extern struct rte_pci_bus rte_pci_bus; + struct rte_pci_driver; struct rte_pci_device; @@ -166,4 +168,27 @@ rte_pci_match(const struct rte_pci_driver *pci_drv, enum rte_iova_mode rte_pci_get_iommu_class(void); +/* + * Iterate over internal devices, + * matching any device against the provided + * string. + * + * @param start + * Iteration starting point. + * + * @param str + * Device string to match against. + * + * @param it + * (unused) iterator structure. + * + * @return + * A pointer to the next matching device if any. + * NULL otherwise. + */ +void * +rte_pci_dev_iterate(const void *start, + const char *str, + const struct rte_dev_iterator *it); + #endif /* _PCI_PRIVATE_H_ */ From patchwork Thu Aug 30 13:41:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44024 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id DBDBC4CAB; Thu, 30 Aug 2018 15:42:38 +0200 (CEST) Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by dpdk.org (Postfix) with ESMTP id AB47A4C99 for ; Thu, 30 Aug 2018 15:42:35 +0200 (CEST) Received: by mail-wm0-f67.google.com with SMTP id 207-v6so2061347wme.5 for ; Thu, 30 Aug 2018 06:42:35 -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=r4ztlloUtcLCOt/o1+wTBrXUXycouEUdDNJOvdSjiec=; b=ctVKM/EGNz3n8OwbQE9xetXtxbxAAGFdW86zSx64nSTI4Tm+9V0uVDQIbikd89Y3e+ nH6CxT1jkhVfF3lieG42QGvdRe6SECoXmwBv1AbVbpZ5uja0ucDXDgSU5fCcSo+83+NQ rX1MJvUYdg1+ejlbS+Fb27WNyGMdrsRlPCAjxL3K0EZIF2aEl0W70kWkbVE+jJDV4xaq zByZ0vjpA6kArp84VTKO5vHG2FTV63nSqgyFTc4ZKn3PqZ9To23cKipqhZYu8/ahN/Yt PiFobReWSKpXTWhK9TKuC7xkNYn+v+IrH5nLGq6/fnOFoPdf3C0l67//HQ64JdWyLmPN kOcQ== 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=r4ztlloUtcLCOt/o1+wTBrXUXycouEUdDNJOvdSjiec=; b=mQf1tNbH+3JxhWo2FUlq5EwtCrjRokoO81gz1Arq5knq85/6Q61GB3GX0cmBlNFwo6 62hxcf2DaJoRJv35L5kQZ5V1oCAAJCRPrdlw4RqPTsYdi9tv92uVMRHacGWd9qJoWLIb MohweGcTey7AixjgYIIyinzXl8eppHqmFcPen24/jkjyLakpF7B/iPsa7lEzc7M4bFAJ hht/+ieObzo9kVuvwirG8TAqzW7MjmBW+WcDYINmuOpWssFGZiyCxo0hUW7Adz+BfEUp OrXet2v8mdp2A43BvIrIkUHOMEjx1mabPQ3A1aZqq+WHVsnu+An7jnMJFbpFJESLr9tn tOUQ== X-Gm-Message-State: APzg51D1qNz8GffV4sT2paU6VB0G/iKZ9jHtPPC0yVz0ydSCYulgNiss HnRf4XOVJ0xJvZRark+8flMH0g2Kf1o= X-Google-Smtp-Source: ANB0VdYXzVNfXb8saFeB79X2NnpXJDvykqzDGZ/2h/QUAJVpIgjVY2anDQi7eTYLvSt5xHAt2pOAvw== X-Received: by 2002:a1c:9550:: with SMTP id x77-v6mr1779120wmd.135.1535636554861; Thu, 30 Aug 2018 06:42:34 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:33 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:41:53 +0200 Message-Id: <826b5fdf55228723141a0d75d576a262c9759e5b.1535633784.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 02/13] bus/pci: add device matching field id 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The PCI bus can now parse a matching field "id" as follows: "bus=pci,id=0000:00:00.0" or "bus=pci,id=00:00.0" Signed-off-by: Gaetan Rivet --- drivers/bus/pci/pci_params.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/drivers/bus/pci/pci_params.c b/drivers/bus/pci/pci_params.c index 0fde75803..7630d4845 100644 --- a/drivers/bus/pci/pci_params.c +++ b/drivers/bus/pci/pci_params.c @@ -3,6 +3,7 @@ */ #include +#include #include #include #include @@ -11,21 +12,45 @@ #include "private.h" enum pci_params { + RTE_PCI_PARAMS_ID, RTE_PCI_PARAMS_MAX, }; static const char * const pci_params_keys[] = { + [RTE_PCI_PARAMS_ID] = "id", [RTE_PCI_PARAMS_MAX] = NULL, }; +static int +pci_addr_kv_cmp(const char *key __rte_unused, + const char *value, + void *_addr2) +{ + struct rte_pci_addr _addr1; + struct rte_pci_addr *addr1 = &_addr1; + struct rte_pci_addr *addr2 = _addr2; + + if (rte_pci_addr_parse(value, addr1)) + return -1; + return -abs(rte_pci_addr_cmp(addr1, addr2)); +} + static int pci_dev_match(const struct rte_device *dev, const void *_kvlist) { const struct rte_kvargs *kvlist = _kvlist; + const struct rte_pci_device *pdev; - (void) dev; - (void) kvlist; + if (kvlist == NULL) + /* Empty string matches everything. */ + return 0; + pdev = RTE_DEV_TO_PCI_CONST(dev); + /* if any field does not match. */ + if (rte_kvargs_process(kvlist, "id", + &pci_addr_kv_cmp, + (void *)(intptr_t)&pdev->addr)) + return 1; return 0; } From patchwork Thu Aug 30 13:41:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44025 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0811F4CB9; Thu, 30 Aug 2018 15:42:41 +0200 (CEST) Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by dpdk.org (Postfix) with ESMTP id C571F4C99 for ; Thu, 30 Aug 2018 15:42:36 +0200 (CEST) Received: by mail-wr1-f68.google.com with SMTP id m27-v6so8131693wrf.3 for ; Thu, 30 Aug 2018 06:42:36 -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 :mime-version:content-transfer-encoding; bh=5OM1VqWbunFM8wPdgB3OgPPGvAxoucxEVAX0oAGkDdI=; b=yhogIElvUyXPgXnbU5z4eymqf9F74kq06tV601MlnXxhgRWqMHiXgsX7prGjjwHEXN aU0kGeXTKCYCejH7CV8h/yOU7WLz2F652T4CA/NQH7pIgRGnsMO0IuxZYmDp/0bFmeT7 BkEafoFtrketHHwJDLEzCfz37V6MtGwT1l+Bu+qQl8UNcNDJWfFhAfN94/ZiQf/FyvAR WYoo9IM/wFEuUpy6hVaM/opR7dF2Y1nCo/kknzvr5DY7uXRQmzLsZqWJsm/qufJefdRn 5+kl5vn5DPgf2egqeLXzKPnuzP/EqMaKRhCW86Zy60hSDIBLv6ZmRWHHBkgI4hCHQy5w wIxw== 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:mime-version:content-transfer-encoding; bh=5OM1VqWbunFM8wPdgB3OgPPGvAxoucxEVAX0oAGkDdI=; b=hEPyf9Kz+LvzmwHsLsn7stiBp8hFwqKUGBJcupYcDe64ddg6TbhJgrHynQ7AfVkKw1 WqR+16H1zpbyZ2BvJNFcc/QqepQK5IKKPEG7ZzBPjqe5cGqKw7SRR/fANejOTHnUVk64 Qdn76E1IIVjJtieOTR8u1k2cDkUWFwqLWUw4hiwNdogLDNFPSydhk4ZeZCUdFhoTNcaN C80fNahAknR5BOO357Dooyulcdm+D+yc5dzptgM3t/XRcHVcbot8z6/tRY5OTDqfY/A/ x4+PFGgeZD81xVynAuEHOswykVx/x0VDC0QdUohuZrFwqpWcZRP/40ep3Lfwlp0wsaRC VOug== X-Gm-Message-State: APzg51CDDOhAi7oiauaqq+e7xfJud4KIo9FcnT3uW/i/w6C+MnYDLjPJ szq7Vq9XX8D/S5giRE3XaI27M6iNswc= X-Google-Smtp-Source: ANB0VdanYLY3EV35o5QOHyrVfvszp9w2Z4gmBH8v75lt1L1Rkxzy2zroBL6xlnTdG+rJFLcz4ABUww== X-Received: by 2002:adf:d08c:: with SMTP id y12-v6mr7731850wrh.152.1535636556131; Thu, 30 Aug 2018 06:42:36 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:35 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:41:54 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 03/13] bus/vdev: implement device iteration 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Signed-off-by: Gaetan Rivet --- drivers/bus/vdev/Makefile | 3 +- drivers/bus/vdev/meson.build | 5 +++- drivers/bus/vdev/vdev.c | 10 ++++--- drivers/bus/vdev/vdev_params.c | 51 +++++++++++++++++++++++++++++++++ drivers/bus/vdev/vdev_private.h | 26 +++++++++++++++++ 5 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 drivers/bus/vdev/vdev_params.c create mode 100644 drivers/bus/vdev/vdev_private.h diff --git a/drivers/bus/vdev/Makefile b/drivers/bus/vdev/Makefile index bd0bb8955..1f9cd7ebe 100644 --- a/drivers/bus/vdev/Makefile +++ b/drivers/bus/vdev/Makefile @@ -19,8 +19,9 @@ EXPORT_MAP := rte_bus_vdev_version.map LIBABIVER := 1 SRCS-y += vdev.c +SRCS-y += vdev_params.c -LDLIBS += -lrte_eal +LDLIBS += -lrte_eal -lrte_kvargs # # Export include files diff --git a/drivers/bus/vdev/meson.build b/drivers/bus/vdev/meson.build index 2ee648b49..12605e5c7 100644 --- a/drivers/bus/vdev/meson.build +++ b/drivers/bus/vdev/meson.build @@ -1,7 +1,10 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2017 Intel Corporation -sources = files('vdev.c') +sources = files('vdev.c', + 'vdev_params.c') install_headers('rte_bus_vdev.h') allow_experimental_apis = true + +deps += ['kvargs'] diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c index 6139dd551..e8518833d 100644 --- a/drivers/bus/vdev/vdev.c +++ b/drivers/bus/vdev/vdev.c @@ -23,6 +23,7 @@ #include "rte_bus_vdev.h" #include "vdev_logs.h" +#include "vdev_private.h" #define VDEV_MP_KEY "bus_vdev_mp" @@ -493,9 +494,9 @@ vdev_probe(void) return ret; } -static struct rte_device * -vdev_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, - const void *data) +struct rte_device * +rte_vdev_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, + const void *data) { const struct rte_vdev_device *vstart; struct rte_vdev_device *dev; @@ -532,10 +533,11 @@ vdev_unplug(struct rte_device *dev) static struct rte_bus rte_vdev_bus = { .scan = vdev_scan, .probe = vdev_probe, - .find_device = vdev_find_device, + .find_device = rte_vdev_find_device, .plug = vdev_plug, .unplug = vdev_unplug, .parse = vdev_parse, + .dev_iterate = rte_vdev_dev_iterate, }; RTE_REGISTER_BUS(vdev, rte_vdev_bus); diff --git a/drivers/bus/vdev/vdev_params.c b/drivers/bus/vdev/vdev_params.c new file mode 100644 index 000000000..842a4684e --- /dev/null +++ b/drivers/bus/vdev/vdev_params.c @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2018 Gaëtan Rivet + */ + +#include +#include +#include +#include + +#include "vdev_logs.h" +#include "vdev_private.h" + +enum vdev_params { + RTE_VDEV_PARAMS_MAX, +}; + +static const char * const vdev_params_keys[] = { + [RTE_VDEV_PARAMS_MAX] = NULL, +}; + +static int +vdev_dev_match(const struct rte_device *dev, + const void *_kvlist) +{ + const struct rte_kvargs *kvlist = _kvlist; + + (void) kvlist; + (void) dev; + return 0; +} + +void * +rte_vdev_dev_iterate(const void *start, + const char *str, + const struct rte_dev_iterator *it __rte_unused) +{ + struct rte_kvargs *kvargs = NULL; + struct rte_device *dev; + + if (str != NULL) { + kvargs = rte_kvargs_parse(str, vdev_params_keys); + if (kvargs == NULL) { + VDEV_LOG(ERR, "cannot parse argument list\n"); + rte_errno = EINVAL; + return NULL; + } + } + dev = rte_vdev_find_device(start, vdev_dev_match, kvargs); + rte_kvargs_free(kvargs); + return dev; +} diff --git a/drivers/bus/vdev/vdev_private.h b/drivers/bus/vdev/vdev_private.h new file mode 100644 index 000000000..ba6dc48ff --- /dev/null +++ b/drivers/bus/vdev/vdev_private.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2018 Gaëtan Rivet + */ + +#ifndef _VDEV_PRIVATE_H_ +#define _VDEV_PRIVATE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +struct rte_device * +rte_vdev_find_device(const struct rte_device *start, + rte_dev_cmp_t cmp, + const void *data); + +void * +rte_vdev_dev_iterate(const void *start, + const char *str, + const struct rte_dev_iterator *it); + +#ifdef __cplusplus +} +#endif + +#endif /* _VDEV_PRIVATE_H_ */ From patchwork Thu Aug 30 13:41:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44026 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6BCE44F91; Thu, 30 Aug 2018 15:42:43 +0200 (CEST) Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by dpdk.org (Postfix) with ESMTP id 0B5A84CA5 for ; Thu, 30 Aug 2018 15:42:38 +0200 (CEST) Received: by mail-wr1-f66.google.com with SMTP id m27-v6so8131768wrf.3 for ; Thu, 30 Aug 2018 06:42:38 -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=c4pvHB/dkgeBIxWKVss7FpOOVZCeyZrc/FE2WAjRLfo=; b=BSwyRBaptRfxlqzjpH2rk2SZMzxR3hESl3qsAuIzBCNcqcZ5wEfgDuIj53ycgQO2rL LPzMa/zhUvyY6adSQOI9PtdjJoNDVqCrCj+m5+1JU9hRqb6g7bPRm+wvoOHtJUZGP31C zZxgPmlE8RyKiUdvr3m+tYZWtLNPn7aQLZncT2UICQPTOaIVY5t5U1VPBjrpc1D0GDsh Rh0vilkxGouSKBg/e1KsQ1knvpbUXtQ5gXuc6xOHSosQ2uhhVQy356MdG57TS9fA4WnH 6YG89uGHXc0dIsJHIp7MKMjFha7vNBMkgrem1NJblxdd1GbuIK06WPfKd56WzQOO1TLq ebaw== 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=c4pvHB/dkgeBIxWKVss7FpOOVZCeyZrc/FE2WAjRLfo=; b=OoZk9MA6sfo61c8sslmd77PmkBpt9+83rYHZ136sgIJewK1n7WIwGUQz6fMy4epLFG tb1nTYiy+yUd6ZGeBT7bKVTgkETniTKAin1XlkxH8vaMgS3PW0Z6PWwxRobycE7FJFQV X+j7cvTCmdfwk7IemmlRYr18kzQSDZZuPyrUHbJl1lgBL6EorDsiESkFiCoBIlSEY2Xz 8yCe+gM7fH95Tm/6qlq/yan/kR9bLIa3rD9wbLkzEfJqLRvmLV2MEFJvYvVMitt9EjXp 4xioCi+y//aunYF0+0jtn+V/lVl5+uUBIe9fvpyt7RC6Kz8BrYxcS8NR3pmt71Wu3lrN /j6w== X-Gm-Message-State: APzg51CkVPehwfGMeU1R//ff8ITLTIyD3IlwC7qLPJxkjEkR8M1/KOSP dAMZVdGbFDiG0UFdxPQK+HQ5KLnCcK0= X-Google-Smtp-Source: ANB0VdbhqIMinTzq1+SWarmZO0/syBOF0Jgx8TvnPZ/QIR8pF+0oOWXJztvEuAzeaiDnSdxbK4Uz4Q== X-Received: by 2002:a5d:490b:: with SMTP id x11-v6mr7272267wrq.114.1535636557408; Thu, 30 Aug 2018 06:42:37 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:36 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:41:55 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 04/13] bus/vdev: add device matching field driver 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The vdev bus parses a field "driver", matching a vdev driver name with one passed as follows: "bus=vdev,driver=xxxx" Signed-off-by: Gaetan Rivet --- drivers/bus/vdev/vdev_params.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/bus/vdev/vdev_params.c b/drivers/bus/vdev/vdev_params.c index 842a4684e..2f55f451f 100644 --- a/drivers/bus/vdev/vdev_params.c +++ b/drivers/bus/vdev/vdev_params.c @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -11,10 +12,12 @@ #include "vdev_private.h" enum vdev_params { + RTE_VDEV_PARAMS_DRIVER, RTE_VDEV_PARAMS_MAX, }; static const char * const vdev_params_keys[] = { + [RTE_VDEV_PARAMS_DRIVER] = "driver", [RTE_VDEV_PARAMS_MAX] = NULL, }; @@ -23,9 +26,17 @@ vdev_dev_match(const struct rte_device *dev, const void *_kvlist) { const struct rte_kvargs *kvlist = _kvlist; + const struct rte_vdev_device *vdev; - (void) kvlist; - (void) dev; + if (kvlist == NULL) + /* Empty string matches everything. */ + return 0; + vdev = RTE_DEV_TO_VDEV_CONST(dev); + /* if any field does not match. */ + if (rte_kvargs_process(kvlist, "driver", + rte_kvargs_strcmp, + (void *)(intptr_t)vdev->device.driver->name)) + return -1; return 0; } From patchwork Thu Aug 30 13:41:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44027 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EBFD8532C; Thu, 30 Aug 2018 15:42:44 +0200 (CEST) Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) by dpdk.org (Postfix) with ESMTP id 39A014CB1 for ; Thu, 30 Aug 2018 15:42:39 +0200 (CEST) Received: by mail-wr1-f42.google.com with SMTP id w11-v6so8115738wrc.5 for ; Thu, 30 Aug 2018 06:42:39 -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 :mime-version:content-transfer-encoding; bh=vf6BtGYuBn+3R66fSCynak34q++F3TYKspOzkVzfhuo=; b=WyujyV/oJK2ttF4gpOy/HWA4JDTNodwygUO7oBKHo0D02b8r836rg4SB9nPKYgLGBq yV3E23DnD43dCcUCj1zD3npmaQQqVq9SQfffhrKp6jzmHQ/RtefK4YHADSDe0Kkmy0Ov p3TsHoQbiq8zEJWEdnIDundXqC8Kim2Ik4nEPhQzgMa7MJCBWXkd/kdiT17NV/BJrOr6 3l3BAcp+nTmrE9SzuA/3zyDe0wSUHzFvpmlCR4QQWHtNU8Y+cB+sjUz98pliRCUZ/qNg TkHL1rNcuXBN+Nm6t5NmIlojclFqiT7I6igChwCBJwxVsisFTLhR7t03bRuryuII9IlK WjFw== 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:mime-version:content-transfer-encoding; bh=vf6BtGYuBn+3R66fSCynak34q++F3TYKspOzkVzfhuo=; b=e4FE9oM1Q8/qhBBYXIStE4VsxrRmwxjeBfHBiooLkfQxOB4WJlj2XmukB3z23H1aBW Gh0N++juIKspMT7GEWpkZAcJHdB6CrSa+a9RbAsJQWhgebc6BE2foklY0W3nbVhQJafm ZhweJqc6rxhhPD/4+v2RZfycE9mGFFhToFdApj5LJJ2v83LpPA533ilGokhdx0pX+YUg n1is6/EHzt9JM9Yag7kIboW/b8Mrsze1nHueQZ8PCdDESembEgcB6uUThhFs8rzQ6vzt g9r8jLpt2w76tEi6CWM2EWOsxcRT+ksX/sekjniea/nfmn42P324qUB+H97vkWnA+XxV L15Q== X-Gm-Message-State: APzg51C8ghqSRsCBq+e7uh+hCUuWMCpW6tpIxjpLSEvwrtJLTOSkv+J9 SMQIzCodQk2p2yH2y35cLK0pvL8ikwc= X-Google-Smtp-Source: ANB0VdbgWagqtUUn8iyPbi8nqhECKTb109upTrPBbjnLdaMwVTsgppmeZtven4arulk4Wygfknk4Ew== X-Received: by 2002:adf:a708:: with SMTP id c8-v6mr7704497wrd.56.1535636558564; Thu, 30 Aug 2018 06:42:38 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:37 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:41:56 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 05/13] ethdev: add private generic device iterator 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This iterator can be customized with a comparison function that will trigger a stopping condition. It can be leveraged to write several different iterators that have similar but non-identical purposes. It is private to librte_ethdev. Signed-off-by: Gaetan Rivet --- lib/librte_ethdev/Makefile | 1 + lib/librte_ethdev/eth_private.c | 31 +++++++++++++++++++++++++++++++ lib/librte_ethdev/eth_private.h | 26 ++++++++++++++++++++++++++ lib/librte_ethdev/meson.build | 3 ++- 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 lib/librte_ethdev/eth_private.c create mode 100644 lib/librte_ethdev/eth_private.h diff --git a/lib/librte_ethdev/Makefile b/lib/librte_ethdev/Makefile index 0935a275e..3c1c92cb9 100644 --- a/lib/librte_ethdev/Makefile +++ b/lib/librte_ethdev/Makefile @@ -18,6 +18,7 @@ EXPORT_MAP := rte_ethdev_version.map LIBABIVER := 10 +SRCS-y += eth_private.c SRCS-y += rte_ethdev.c SRCS-y += rte_flow.c SRCS-y += rte_tm.c diff --git a/lib/librte_ethdev/eth_private.c b/lib/librte_ethdev/eth_private.c new file mode 100644 index 000000000..d565568a0 --- /dev/null +++ b/lib/librte_ethdev/eth_private.c @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Gaëtan Rivet + */ + +#include "rte_ethdev.h" +#include "eth_private.h" + +struct rte_eth_dev * +eth_find_device(const struct rte_eth_dev *start, rte_eth_cmp_t cmp, + const void *data) +{ + struct rte_eth_dev *edev; + ptrdiff_t idx; + + /* Avoid Undefined Behaviour */ + if (start != NULL && + (start < &rte_eth_devices[0] || + start > &rte_eth_devices[RTE_MAX_ETHPORTS])) + return NULL; + if (start != NULL) + idx = start - &rte_eth_devices[0] + 1; + else + idx = 0; + for (; idx < RTE_MAX_ETHPORTS; idx++) { + edev = &rte_eth_devices[idx]; + if (cmp(edev, data) == 0) + return edev; + } + return NULL; +} + diff --git a/lib/librte_ethdev/eth_private.h b/lib/librte_ethdev/eth_private.h new file mode 100644 index 000000000..0f5c6d5c4 --- /dev/null +++ b/lib/librte_ethdev/eth_private.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Gaëtan Rivet + */ + +#ifndef _RTE_ETH_PRIVATE_H_ +#define _RTE_ETH_PRIVATE_H_ + +#include "rte_ethdev.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Generic rte_eth_dev comparison function. */ +typedef int (*rte_eth_cmp_t)(const struct rte_eth_dev *, const void *); + +/* Generic rte_eth_dev iterator. */ +struct rte_eth_dev * +eth_find_device(const struct rte_eth_dev *_start, rte_eth_cmp_t cmp, + const void *data); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTE_ETH_PRIVATE_H_ */ diff --git a/lib/librte_ethdev/meson.build b/lib/librte_ethdev/meson.build index 596cd0f39..372d3ca06 100644 --- a/lib/librte_ethdev/meson.build +++ b/lib/librte_ethdev/meson.build @@ -4,7 +4,8 @@ name = 'ethdev' version = 10 allow_experimental_apis = true -sources = files('ethdev_profile.c', +sources = files('eth_private.c', + 'ethdev_profile.c', 'rte_ethdev.c', 'rte_flow.c', 'rte_mtr.c', From patchwork Thu Aug 30 13:41:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44028 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9A0F35688; Thu, 30 Aug 2018 15:42:47 +0200 (CEST) Received: from mail-wm0-f52.google.com (mail-wm0-f52.google.com [74.125.82.52]) by dpdk.org (Postfix) with ESMTP id 3B6A84CC0 for ; Thu, 30 Aug 2018 15:42:40 +0200 (CEST) Received: by mail-wm0-f52.google.com with SMTP id y2-v6so2062305wma.1 for ; Thu, 30 Aug 2018 06:42:40 -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 :mime-version:content-transfer-encoding; bh=XB4u6ztlcFZchgUUwyF20KwybT6lb85VMQYYVNGn9gY=; b=V5+bghsupMTFtOLqgF7zBmKzpL44llac2kHN4GbTfbUQy4PVqz5MI4/t/qci4KFGXE /LT+nU4KmYj8svtHF0IN5vYnnVlkkBpAt/1NfVdU9pYKGNV9lVhCKZo5+O1yuLFg2Xhr OEpmluR9XvhtQMNG7AlpyCg6s1hvKEQ8ZGH7DV8jrNl1Y01MiiI+KyI4RmxGNWMc4UDR XWkDUR/1Ht9cnd0LqQTCh4FRG8GflhNl4WF031sYE4HaCsAbqOfcnPed9kxSJ7cbddT2 LpRGvGx9vn6Ybm4V6IzZ8PB+Cv51jbnRFoKXOP8oqyrJT8lt5h0VhovYj2CfVATByjke OwbA== 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:mime-version:content-transfer-encoding; bh=XB4u6ztlcFZchgUUwyF20KwybT6lb85VMQYYVNGn9gY=; b=SD6eGRqd3guJUmloPle0SBWsUEHWUscqDXJkZ5AFy14jh4LZoxTx7QdKbcf5Kub2EP bCJKJXpZAqNgYaX876D7MAh/EAsE3FGh+R5AVQx1Yb97AF54Oplh7r+KnVbtC9QqiMGv Uo1LUvfD/r1YMKnUoEBRE05Wc4hFXQ9SQb9+g4kOprzYYff7LTZIHcsRAEkB4GOVUq9m K7zkMs6D0SWjl5tPXCt2kEgg5Y75KqFG/aCP+5o76Ol14j6qw0J9DoK7VYf8HnbIBidU 1GKWow7v9PuEn9ATC9lDdpmddsSzPPoNQFpMTpNoI9LHSB74jLtv2VadTSXIOs4dkTRV KaRg== X-Gm-Message-State: APzg51Bz33l1m0fds4kU0YYFFRA9SWgUUaFVCq1Lx+JweG8tcsHGJgAP oyCH3oY5D6s2RHeCQ1/GXnrQWaOXlic= X-Google-Smtp-Source: ANB0Vda9BBbQVC8JoO+wGJOuS6jl0H5+EmohLnUGYAcXZpotSNiSinbWM6b3jIIk8VyKiK4WBHHRzg== X-Received: by 2002:a1c:9744:: with SMTP id z65-v6mr1764534wmd.105.1535636559813; Thu, 30 Aug 2018 06:42:39 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:38 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:41:57 +0200 Message-Id: <262be7b626fdae02441a2613b3d46419d5dc782d.1535633784.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 06/13] ethdev: register ether layer as a class 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Signed-off-by: Gaetan Rivet Acked-by: Andrew Rybchenko --- lib/librte_ethdev/Makefile | 3 +- lib/librte_ethdev/meson.build | 1 + lib/librte_ethdev/rte_class_eth.c | 79 +++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 lib/librte_ethdev/rte_class_eth.c diff --git a/lib/librte_ethdev/Makefile b/lib/librte_ethdev/Makefile index 3c1c92cb9..91899b083 100644 --- a/lib/librte_ethdev/Makefile +++ b/lib/librte_ethdev/Makefile @@ -12,7 +12,7 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) LDLIBS += -lrte_net -lrte_eal -lrte_mempool -lrte_ring -LDLIBS += -lrte_mbuf +LDLIBS += -lrte_mbuf -lrte_kvargs EXPORT_MAP := rte_ethdev_version.map @@ -20,6 +20,7 @@ LIBABIVER := 10 SRCS-y += eth_private.c SRCS-y += rte_ethdev.c +SRCS-y += rte_class_eth.c SRCS-y += rte_flow.c SRCS-y += rte_tm.c SRCS-y += rte_mtr.c diff --git a/lib/librte_ethdev/meson.build b/lib/librte_ethdev/meson.build index 372d3ca06..8d2e2bf4e 100644 --- a/lib/librte_ethdev/meson.build +++ b/lib/librte_ethdev/meson.build @@ -6,6 +6,7 @@ version = 10 allow_experimental_apis = true sources = files('eth_private.c', 'ethdev_profile.c', + 'rte_class_eth.c', 'rte_ethdev.c', 'rte_flow.c', 'rte_mtr.c', diff --git a/lib/librte_ethdev/rte_class_eth.c b/lib/librte_ethdev/rte_class_eth.c new file mode 100644 index 000000000..32c736d32 --- /dev/null +++ b/lib/librte_ethdev/rte_class_eth.c @@ -0,0 +1,79 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Gaëtan Rivet + */ + +#include + +#include +#include +#include +#include +#include + +#include "rte_ethdev.h" +#include "rte_ethdev_core.h" +#include "eth_private.h" + +enum eth_params { + RTE_ETH_PARAMS_MAX, +}; + +static const char * const eth_params_keys[] = { + [RTE_ETH_PARAMS_MAX] = NULL, +}; + +struct eth_dev_match_arg { + struct rte_device *device; + struct rte_kvargs *kvlist; +}; + +#define eth_dev_match_arg(d, k) \ + (&(const struct eth_dev_match_arg) { \ + .device = (d), \ + .kvlist = (k), \ + }) + +static int +eth_dev_match(const struct rte_eth_dev *edev, + const void *_arg) +{ + const struct eth_dev_match_arg *arg = _arg; + const struct rte_kvargs *kvlist = arg->kvlist; + + if (edev->state == RTE_ETH_DEV_UNUSED) + return -1; + if (edev->device != arg->device) + return -1; + if (kvlist == NULL) + /* Empty string matches everything. */ + return 0; + return 0; +} + +static void * +eth_dev_iterate(const void *start, + const char *str, + const struct rte_dev_iterator *it) +{ + struct rte_kvargs *kvargs = NULL; + struct rte_eth_dev *edev = NULL; + + if (str != NULL) { + kvargs = rte_kvargs_parse(str, eth_params_keys); + if (kvargs == NULL) { + RTE_LOG(ERR, EAL, "cannot parse argument list\n"); + rte_errno = EINVAL; + return NULL; + } + } + edev = eth_find_device(start, eth_dev_match, + eth_dev_match_arg(it->device, kvargs)); + rte_kvargs_free(kvargs); + return edev; +} + +struct rte_class rte_class_eth = { + .dev_iterate = eth_dev_iterate, +}; + +RTE_REGISTER_CLASS(eth, rte_class_eth); From patchwork Thu Aug 30 13:41:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44029 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BEEE358C3; Thu, 30 Aug 2018 15:42:50 +0200 (CEST) Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by dpdk.org (Postfix) with ESMTP id 84A0D4CC0 for ; Thu, 30 Aug 2018 15:42:41 +0200 (CEST) Received: by mail-wm0-f65.google.com with SMTP id j25-v6so954076wmc.1 for ; Thu, 30 Aug 2018 06:42:41 -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=IHVbPwTSTQaAHXkciYMdEqxygXilHaYNt1PzQ3kYkLo=; b=ACHVSeYotKAmaAwxpUsufBrV6ydDDGajaWLQpQfEKE33gqOlRqjgU36UdOtNOSYXdL IMycC3ZvWqMk6soT4FlpqyVFb9EsoKudSi29I1PZXQgxhFsZA5kLkRcYX9YTZTwNLiRM nyP6U2qcgbVBjGcZG6QZWWUzVQDxpf2C0RUIHRH4y9N4vXqDOBZWQP8WnjV7+g6VPePv QmC7ciz5e3k4cQCjADfmunRxbwZmfwJgJXpMpNoWHXFlIQMRLW50LqTaSr5sn35XY3P8 998K36u0KfMzgKTfFT8TnqqnQMLmzA1F5l+dwpwyWuFMQpEnvVBjOg53eBALP2QxWAt/ 6vmw== 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=IHVbPwTSTQaAHXkciYMdEqxygXilHaYNt1PzQ3kYkLo=; b=oZhvn1Tfy/vTLN2z4VXpgLEF1/2xf3WBfxsZjfk98qdRrKa8X3fZ5UToJyGqXre5VE ZVaqfdjyu7I/k1T0aZChCgRRPIGtQxhCJzCUk18TBKXOtykdaE94J5NrJqi+7Nzqr8+x kAB+9Mmxj7Te+NivpuHcYlYR5xF7RkkEx4CnBQ17EuVVD1T5uMnc/kOjs2L21KiNv0ot g7KdKI3sJswRO5WT5pJtEEt1iKywjtdtA8D+ZGgdZ0p/7v2LxftPz2jqcIscNHIcluhc Nl1hOM3GYbY+O4wWCYxVK1hdg20HbQMZmVHwQF1AAkk/vt7Z7wVffII5/NdMdCCBeYKt BJwA== X-Gm-Message-State: APzg51Cgjjaf4qrvIt1L6fNgeve8tgW81su65dLV2PwVn6CjBF8jYXqm xygaksYNQm2FfhUtw7TBMXPgw8MXkAE= X-Google-Smtp-Source: ANB0VdbG5a7oUIKPEnoWYGfeOUXSEdQNqpOfHF3T6BUvFtnhF4PBRmPXDBZC6oEFSmWCzR5geNTtjw== X-Received: by 2002:a1c:2e11:: with SMTP id u17-v6mr1856886wmu.102.1535636560943; Thu, 30 Aug 2018 06:42:40 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:40 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:41:58 +0200 Message-Id: <96bc18c75198d6644f87f7e4e16f343fcbbc18ee.1535633784.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 07/13] ethdev: add device matching field name 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The eth device class can now parse a field name, matching the eth_dev name with one passed as "class=eth,name=xxxxxx" Signed-off-by: Gaetan Rivet Acked-by: Andrew Rybchenko --- lib/librte_ethdev/rte_class_eth.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/librte_ethdev/rte_class_eth.c b/lib/librte_ethdev/rte_class_eth.c index 32c736d32..d8d8e8845 100644 --- a/lib/librte_ethdev/rte_class_eth.c +++ b/lib/librte_ethdev/rte_class_eth.c @@ -15,10 +15,12 @@ #include "eth_private.h" enum eth_params { + RTE_ETH_PARAMS_NAME, RTE_ETH_PARAMS_MAX, }; static const char * const eth_params_keys[] = { + [RTE_ETH_PARAMS_NAME] = "name", [RTE_ETH_PARAMS_MAX] = NULL, }; @@ -39,6 +41,7 @@ eth_dev_match(const struct rte_eth_dev *edev, { const struct eth_dev_match_arg *arg = _arg; const struct rte_kvargs *kvlist = arg->kvlist; + struct rte_eth_dev_data *data; if (edev->state == RTE_ETH_DEV_UNUSED) return -1; @@ -47,6 +50,10 @@ eth_dev_match(const struct rte_eth_dev *edev, if (kvlist == NULL) /* Empty string matches everything. */ return 0; + data = edev->data; + if (rte_kvargs_process(kvlist, "name", + rte_kvargs_strcmp, data->name)) + return -1; return 0; } From patchwork Thu Aug 30 13:41:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44030 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 962AB58FA; Thu, 30 Aug 2018 15:42:54 +0200 (CEST) Received: from mail-wm0-f65.google.com (mail-wm0-f65.google.com [74.125.82.65]) by dpdk.org (Postfix) with ESMTP id B3D7B4C8D for ; Thu, 30 Aug 2018 15:42:42 +0200 (CEST) Received: by mail-wm0-f65.google.com with SMTP id j192-v6so2097134wmj.1 for ; Thu, 30 Aug 2018 06:42:42 -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=og+AYVr4tU1QvPzkWvSbNbNtfe/sya7HWmKUGLXNTAc=; b=shQc9x2SL2yYUFSHnv4uP4G/Wz5FC6Plv103lxioxhBb/3a9t4xqp704TSuUMbaijh gmCpcnjc5W5ScMEn76JBeSwTJ0A3EIQ8lO/gv1TipxclvU1H4PdvKWqQE6dVlcju91ZM 7beOAGxdTjJlQaaHrIa2Y07tS4V9epC5Nej3Mz0V5zUtS76ji//+uxkrEBrPg7fsswf9 PD/UexPfYs8ZQiLA8tkWx8XrRiMBLQ0Oit7/hkFt9rBPso6lfwMLAXYVtYGO4fk7B0Da 03IN0J6StMZMk8gdc3yUgzHcokFXc5KAOez68jWmXtQQxWtSEd+Ba7sUWDs+Q5YZDmpo gbnA== 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=og+AYVr4tU1QvPzkWvSbNbNtfe/sya7HWmKUGLXNTAc=; b=DHlpMNAVQxUjxs2xRGRa8r80sKci1vAwjhrEmabp0juieX4rmjfROTrY0rKEGT3DrA LMpkqxUkROPWRi2z9FmPn2Sh0YG8RD2YGh/xwta01glO2J1sIOeeUSpiazolFWatpx0s gQ0wIBxfOohPUR9ld0Py9GrQX1ye3mKDWstAX87Y1qsbUdM4twLyCMj5eXKi5OJ5jOzp rTBFM2qSBnrn7/lfJ4yxpQr8iSmkrj3EhwCdYVW66IoMDe6x7JBYvJEuznklZ4nudHSk TCbw4HWr7lisFk3uM9kiSsZenX9jNOpUDGlZ4pczj2+cAgQ/cTMTZO4RjuWBPfDRzSPg Fe5A== X-Gm-Message-State: APzg51Dv+gxPsH7YmDy/lU/SDhDmA7vm72pFxxp9eHaOoW6F/wC+4ovK 3tBDYCx3d1agcISziwhsSY5CiNEIkjE= X-Google-Smtp-Source: ANB0VdadKJtDra9UG5T1P6FS1KgQJmGTu1dL71VRlJ238CaBQMNS//47HSjY9Nubp9Y+So1MWCntCg== X-Received: by 2002:a1c:a941:: with SMTP id s62-v6mr1997459wme.76.1535636562073; Thu, 30 Aug 2018 06:42: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 w10-v6sm5247731wrp.31.2018.08.30.06.42.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:41 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:41:59 +0200 Message-Id: <92b192aa67cec3d4b41680fa05e72a138b9cc92d.1535633784.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 08/13] app/testpmd: add show device command 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" A new interactive command is offered: show device This commands lists all rte_device element matching the device description. e.g.: show device bus=pci show device bus=vdev show device bus=vdev/class=eth show device bus=vdev,driver=net_ring/class=eth show device bus=vdev/class=eth,name=net_ring0 These devices may not be otherwise useful, some buses will spawn devices to keep track of their assets without having a driver to use them. Signed-off-by: Gaetan Rivet Acked-by: Bernard Iremonger --- app/test-pmd/cmdline.c | 54 +++++++++++++++++++++ doc/guides/testpmd_app_ug/testpmd_funcs.rst | 24 +++++++++ 2 files changed, 78 insertions(+) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 589121d69..a7c0e622a 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -228,6 +228,9 @@ static void cmd_help_long_parsed(void *parsed_result, "show port tm node stats (port_id) (node_id) (clear)\n" " Display the port TM node stats.\n\n" + "show device (device_string)\n" + " Display devices matching the device string.\n\n" + ); } @@ -7117,6 +7120,56 @@ cmdline_parse_inst_t cmd_showportall = { }, }; +/* *** SHOW DEVICE INFO *** */ +struct cmd_showdevice_result { + cmdline_fixed_string_t show; + cmdline_fixed_string_t device; + cmdline_fixed_string_t filter; +}; + +static void +cmd_showdevice_dump_device(const struct rte_device *dev) +{ + const struct rte_driver *drv = dev->driver; + + printf("0x%p: %s:%s\n", (const void *)dev, dev->name, + drv ? drv->name : ""); +} + +static void cmd_showdevice_parsed(void *parsed_result, + __attribute__((unused)) struct cmdline *cl, + __attribute__((unused)) void *data) +{ + struct cmd_showdevice_result *res = parsed_result; + struct rte_dev_iterator it; + const struct rte_device *dev; + + RTE_DEV_FOREACH(dev, res->filter, &it) + cmd_showdevice_dump_device(dev); +} + +cmdline_parse_token_string_t cmd_showdevice_show = + TOKEN_STRING_INITIALIZER(struct cmd_showdevice_result, + show, "show"); +cmdline_parse_token_string_t cmd_showdevice_device = + TOKEN_STRING_INITIALIZER(struct cmd_showdevice_result, + device, "device"); +cmdline_parse_token_string_t cmd_showdevice_filter = + TOKEN_STRING_INITIALIZER(struct cmd_showdevice_result, + filter, NULL); + +cmdline_parse_inst_t cmd_showdevice = { + .f = cmd_showdevice_parsed, + .data = NULL, + .help_str = "show device ", + .tokens = { + (void *)&cmd_showdevice_show, + (void *)&cmd_showdevice_device, + (void *)&cmd_showdevice_filter, + NULL, + }, +}; + /* *** SHOW PORT INFO *** */ struct cmd_showport_result { cmdline_fixed_string_t show; @@ -17610,6 +17663,7 @@ cmdline_parse_ctx_t main_ctx[] = { (cmdline_parse_inst_t *)&cmd_help_long, (cmdline_parse_inst_t *)&cmd_quit, (cmdline_parse_inst_t *)&cmd_load_from_file, + (cmdline_parse_inst_t *)&cmd_showdevice, (cmdline_parse_inst_t *)&cmd_showport, (cmdline_parse_inst_t *)&cmd_showqueue, (cmdline_parse_inst_t *)&cmd_showportall, diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index dde205a2b..417072cce 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -2663,6 +2663,30 @@ set the traffic management default hierarchy on the port:: testpmd> set port tm hierarchy default (port_id) +Device functions +---------------- + +Show devices +~~~~~~~~~~~~ + +Display any registered devices:: + + testpmd> show device + +where: + +* ``device_string``: Device description string, of the format + + layer[/layer[/layer]] + + where one layer is in the form + + layer_key=layer_name[,key1=value1[,...]] + + Valid layer keys are ``bus`` and ``class``. + Their respective values is defined by registered ``bus`` and ``class`` + drivers. + Filter Functions ---------------- From patchwork Thu Aug 30 13:42:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44031 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C05065B12; Thu, 30 Aug 2018 15:42:57 +0200 (CEST) Received: from mail-wm0-f68.google.com (mail-wm0-f68.google.com [74.125.82.68]) by dpdk.org (Postfix) with ESMTP id F03D94F98 for ; Thu, 30 Aug 2018 15:42:43 +0200 (CEST) Received: by mail-wm0-f68.google.com with SMTP id b19-v6so2051579wme.3 for ; Thu, 30 Aug 2018 06:42: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 :mime-version:content-transfer-encoding; bh=Y8K45UJQ09MUdfAKjo3IIq4OhsoAko2Z85k+Px7chNw=; b=ucdjm+n1rmg/+xwpEERH17kTVUj3lO6QqQnWWabjtvuK56PQPDPcz01CUoAEgwFs54 iZe1Mcqq21+CnatCd155yXUTP83Hi9nKIPNCHIrfncAi4lciaKE4OZSl5aGoLqQ3rIqd TZdmanlgu+LJSxgoyaCHYGRh097rdXJdaBpxGvWhuklHjA5S4VVmGMkHl2W04LugMbff 9H+evxs6uU+eLEvyT0xwH0lyKOYQeMc/bEKGIEydvjYmYj3Q30b+7f04z+R1slxDwlLv CCJFEXTxWFcp0kjNtXWubG5kqWCHhRjZy+6Zfs0y0ToXTHcQKiNlrIgYIB/D12zH6E+T C19A== 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:mime-version:content-transfer-encoding; bh=Y8K45UJQ09MUdfAKjo3IIq4OhsoAko2Z85k+Px7chNw=; b=JQgWbMCVuXNErVy/CAeGOq98736fee3Odf0Vw7VfUjDQ4XAe006XKWHSNSCptHxwRK VPEAx7X91xz3Fk/gZp/eiL9JFmKh2K28G46BgVATJZqpdcv5nHPt5UMwfAORKFrMieus b1HXeV8ls0yOnnKAEpaukrsIpTSYkhZE+JfQwLjV1/16vw6o9HK0jebUTB3Ea41iaN8G LYwAMs001IfSkOXwXmXnzi87QoY2N6n/qPal25BLvfA0lyf4oy2l5nqL/oQF6MTXOJPK fM8o9r89viSqfMoz+SZsmS7TvUlRg9HCyiFQOiRTZhfVllXzx+dJuxMSyAWDybByZM/S 1HXQ== X-Gm-Message-State: APzg51AsxPOeVMTF/RAzUCuwN2ieRbR5g5/URnaUn8LbHThkMXigFIsj TM94inQHRXioal0JZ+1oHFlvj7DuF8A= X-Google-Smtp-Source: ANB0VdabVoRoCxv9gMDUD5xThnT3fBlsNnDEIrIH2uUEqfdUfNEYu7gGuzSPuXdk8X9b/E0I857DJw== X-Received: by 2002:a1c:889:: with SMTP id 131-v6mr1794237wmi.142.1535636563278; Thu, 30 Aug 2018 06:42:43 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:42 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:42:00 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 09/13] bus/pci: pre-process declarative PCI devargs 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The new devargs format does not recognize a particular device name. Each bus uses its specific format. Instead of introducing a new bus API, process those devargs privately for the moment. Prepare them for matching during scan against the bus devices. Signed-off-by: Gaetan Rivet --- drivers/bus/pci/bsd/pci.c | 5 ++++ drivers/bus/pci/linux/pci.c | 5 ++++ drivers/bus/pci/pci_params.c | 51 ++++++++++++++++++++++++++++++++++++ drivers/bus/pci/private.h | 16 +++++++++++ 4 files changed, 77 insertions(+) diff --git a/drivers/bus/pci/bsd/pci.c b/drivers/bus/pci/bsd/pci.c index 655b34b7e..046cd11d5 100644 --- a/drivers/bus/pci/bsd/pci.c +++ b/drivers/bus/pci/bsd/pci.c @@ -327,6 +327,7 @@ pci_scan_one(int dev_pci_fd, struct pci_conf *conf) int rte_pci_scan(void) { + struct rte_devargs *devargs; int fd; unsigned dev_count = 0; struct pci_conf matches[16]; @@ -342,6 +343,10 @@ rte_pci_scan(void) if (!rte_eal_has_pci()) return 0; + RTE_EAL_DEVARGS_FOREACH("pci", devargs) + if (rte_pci_devargs_prepare(devargs)) + continue; + fd = open("/dev/pci", O_RDONLY); if (fd < 0) { RTE_LOG(ERR, EAL, "%s(): error opening /dev/pci\n", __func__); diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c index 04648ac93..12f246089 100644 --- a/drivers/bus/pci/linux/pci.c +++ b/drivers/bus/pci/linux/pci.c @@ -429,6 +429,7 @@ parse_pci_addr_format(const char *buf, int bufsize, struct rte_pci_addr *addr) int rte_pci_scan(void) { + struct rte_devargs *devargs; struct dirent *e; DIR *dir; char dirname[PATH_MAX]; @@ -438,6 +439,10 @@ rte_pci_scan(void) if (!rte_eal_has_pci()) return 0; + RTE_EAL_DEVARGS_FOREACH("pci", devargs) + if (rte_pci_devargs_prepare(devargs)) + continue; + #ifdef VFIO_PRESENT if (!pci_vfio_is_enabled()) RTE_LOG(DEBUG, EAL, "VFIO PCI modules not loaded\n"); diff --git a/drivers/bus/pci/pci_params.c b/drivers/bus/pci/pci_params.c index 7630d4845..a09af3b1c 100644 --- a/drivers/bus/pci/pci_params.c +++ b/drivers/bus/pci/pci_params.c @@ -2,9 +2,12 @@ * Copyright 2018 Gaëtan Rivet */ +#include + #include #include #include +#include #include #include #include @@ -76,3 +79,51 @@ rte_pci_dev_iterate(const void *start, rte_kvargs_free(kvargs); return dev; } + +static int +pci_addr_kv_parse(const char *key __rte_unused, + const char *value, + void *_devargs) +{ + struct rte_devargs *devargs = _devargs; + struct rte_pci_addr addr; + + /* Verify address is valid. */ + if (rte_pci_addr_parse(value, &addr)) { + rte_errno = ENODEV; + return -1; + } + /* Write down the address as the devargs name. */ + rte_pci_device_name(&addr, devargs->name, sizeof(devargs->name)); + return 0; +} + +int +rte_pci_devargs_prepare(struct rte_devargs *devargs) +{ + struct rte_kvargs *kvargs = NULL; + char *args; + int ret; + + if (devargs->bus_str == NULL) + return 0; + + args = strchr(devargs->bus_str, ','); + if (args == NULL) + return 0; + args++; + + kvargs = rte_kvargs_parse(args, pci_params_keys); + if (kvargs == NULL) { + RTE_LOG(ERR, EAL, "unable to parse parameter list: %s\n", + devargs->bus_str); + rte_errno = EINVAL; + return -1; + } + + ret = rte_kvargs_process(kvargs, "id", + &pci_addr_kv_parse, devargs); + + rte_kvargs_free(kvargs); + return ret; +} diff --git a/drivers/bus/pci/private.h b/drivers/bus/pci/private.h index 0e689fa74..9beb24c6a 100644 --- a/drivers/bus/pci/private.h +++ b/drivers/bus/pci/private.h @@ -191,4 +191,20 @@ rte_pci_dev_iterate(const void *start, const char *str, const struct rte_dev_iterator *it); +/* + * Prepare a devargs meant for this bus. + * This function is only used for a transitory period, + * to translate the new devargs format in one + * compatible with the old form. + * + * @param da + * Devargs to process. + * + * @return + * 0 on success. + * <0 on error. + */ +int +rte_pci_devargs_prepare(struct rte_devargs *da); + #endif /* _PCI_PRIVATE_H_ */ From patchwork Thu Aug 30 13:42:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44032 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 000565B2E; Thu, 30 Aug 2018 15:42:59 +0200 (CEST) Received: from mail-wm0-f46.google.com (mail-wm0-f46.google.com [74.125.82.46]) by dpdk.org (Postfix) with ESMTP id 34BE7559A for ; Thu, 30 Aug 2018 15:42:45 +0200 (CEST) Received: by mail-wm0-f46.google.com with SMTP id s12-v6so2059751wmc.0 for ; Thu, 30 Aug 2018 06:42:45 -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 :mime-version:content-transfer-encoding; bh=UCDR0M0DtcuI3oK7gjdz+Az6MHSirgQY9BaN5ez27SQ=; b=Tp98UgZtquoQ+acX7r+WAzhIV9EMxh6pUzVx5/NQ/RieAmsSN1NOs6zVo23nS3eZtJ 7DD2jHKdP3vZsLdTbxKovt8pZ4Hj3gjSO3097FlIepTuyAc1VPksc/Y5oi4IPqAJhTIk bkC6r1ojJl/ymkOrt82W8PkDceeOj9giWmqwM+CK/ZaTuthmQfePkeWaBu6nwDdsWuXD C/ZK4+1N4kcvV1XOjR+r7zKVqergxr1aqt9Oz7wX43IoEapyZHoHA4On6hwItqtXemUC fUaZgi66l67afSsbAmPnt1ksiVjWplEj1MDEqpUCErJ7UqYxP/5/Acnl/mtHcAH3Gjt9 GP1A== 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:mime-version:content-transfer-encoding; bh=UCDR0M0DtcuI3oK7gjdz+Az6MHSirgQY9BaN5ez27SQ=; b=lSLYy7wwczqO1GyEVLRWz2jQGyiZjoPfwbreaa8t92A8PkiPszVhMDyG+0bMKXgHW1 xweY5dpHm1T366sJBWFPatizoRvRuCBSlkwHNiAlzy2TLYWMkINMo1R+krd3RfSetbNP PxyZNc4lzxq1BeqzB2ourdacvcxUrKoAMD9/4BCnoBYxeeIGargG8ZOpTmBEQqfiQ3Tc hxhjaLTyd678QIvaOQ6rJoxCj0krWvBf3e53xQllJsO9th8Tpp/4Uy89SF32aw8L38kw pZd3SbwQ4eNSqSz6A3LagxIjpI2Hi7Ef0n0c4FyotH4FhTlpWmqAeS6ZBhHggPXWzSho ftUA== X-Gm-Message-State: APzg51Aw/FNYWwLalEOCkDN0MOuvGmAwcJYz0VQLqyWZC+H87qMsP8+5 7OAPQ91yRJzCtF858q0/h/ubYEKCVHM= X-Google-Smtp-Source: ANB0VdYyKI0pKniONASQhwsqTqCLUxcEUo1exyOfR0NvP/Ed3uI8iMD6wxXcBBFe5GWo7JLy/VwBXg== X-Received: by 2002:a1c:b709:: with SMTP id h9-v6mr1772829wmf.130.1535636564489; Thu, 30 Aug 2018 06:42:44 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:43 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:42:01 +0200 Message-Id: <16def86390aad22bab0cab129f1a01a535bdb7c3.1535633784.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v1 10/13] bus/vdev: pre-process declarative vdev devargs 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The new devargs format does not recognize a particular device name. Each bus uses its specific format. Process each devargs privately prior to attempting a bus scan. Prepare them if they are using the new devargs format. Signed-off-by: Gaetan Rivet --- drivers/bus/vdev/vdev.c | 10 ++++--- drivers/bus/vdev/vdev_params.c | 50 +++++++++++++++++++++++++++++++++ drivers/bus/vdev/vdev_private.h | 6 ++++ 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c index e8518833d..f2dace245 100644 --- a/drivers/bus/vdev/vdev.c +++ b/drivers/bus/vdev/vdev.c @@ -115,8 +115,8 @@ rte_vdev_remove_custom_scan(rte_vdev_scan_callback callback, void *user_arg) return 0; } -static int -vdev_parse(const char *name, void *addr) +int +rte_vdev_parse(const char *name, void *addr) { struct rte_vdev_driver **out = addr; struct rte_vdev_driver *driver = NULL; @@ -148,7 +148,7 @@ vdev_probe_all_drivers(struct rte_vdev_device *dev) VDEV_LOG(DEBUG, "Search driver %s to probe device %s", name, rte_vdev_device_name(dev)); - if (vdev_parse(name, &driver)) + if (rte_vdev_parse(name, &driver)) return -1; dev->device.driver = &driver->driver; ret = driver->probe(dev); @@ -443,6 +443,8 @@ vdev_scan(void) /* for virtual devices we scan the devargs_list populated via cmdline */ RTE_EAL_DEVARGS_FOREACH("vdev", devargs) { + if (rte_vdev_devargs_prepare(devargs)) + continue; dev = calloc(1, sizeof(*dev)); if (!dev) @@ -536,7 +538,7 @@ static struct rte_bus rte_vdev_bus = { .find_device = rte_vdev_find_device, .plug = vdev_plug, .unplug = vdev_unplug, - .parse = vdev_parse, + .parse = rte_vdev_parse, .dev_iterate = rte_vdev_dev_iterate, }; diff --git a/drivers/bus/vdev/vdev_params.c b/drivers/bus/vdev/vdev_params.c index 2f55f451f..aafaf3330 100644 --- a/drivers/bus/vdev/vdev_params.c +++ b/drivers/bus/vdev/vdev_params.c @@ -2,11 +2,14 @@ * Copyright 2018 Gaëtan Rivet */ +#include + #include #include #include #include #include +#include #include "vdev_logs.h" #include "vdev_private.h" @@ -60,3 +63,50 @@ rte_vdev_dev_iterate(const void *start, rte_kvargs_free(kvargs); return dev; } + +static int +vdev_driver_kv_parse(const char *key __rte_unused, + const char *value, + void *_devargs) +{ + struct rte_devargs *devargs = _devargs; + struct rte_vdev_driver *driver; + + /* Verify that the driver matches. */ + if (rte_vdev_parse(value, &driver)) + return -1; + + /* Copy the driver name as-is. */ + snprintf(devargs->name, sizeof(devargs->name), "%s", value); + return 0; +} + +int +rte_vdev_devargs_prepare(struct rte_devargs *devargs) +{ + struct rte_kvargs *kvargs = NULL; + char *args; + int ret; + + if (devargs->bus_str == NULL) + return 0; + + args = strchr(devargs->bus_str, ','); + if (args == NULL) + return 0; + args++; + + kvargs = rte_kvargs_parse(args, vdev_params_keys); + if (kvargs == NULL) { + VDEV_LOG(ERR, "unable to parse parameter list: %s\n", + devargs->bus_str); + rte_errno = EINVAL; + return -1; + } + + ret = rte_kvargs_process(kvargs, "driver", + vdev_driver_kv_parse, devargs); + + rte_kvargs_free(kvargs); + return ret; +} diff --git a/drivers/bus/vdev/vdev_private.h b/drivers/bus/vdev/vdev_private.h index ba6dc48ff..da57b84dd 100644 --- a/drivers/bus/vdev/vdev_private.h +++ b/drivers/bus/vdev/vdev_private.h @@ -19,6 +19,12 @@ rte_vdev_dev_iterate(const void *start, const char *str, const struct rte_dev_iterator *it); +int +rte_vdev_parse(const char *name, void *addr); + +int +rte_vdev_devargs_prepare(struct rte_devargs *da); + #ifdef __cplusplus } #endif From patchwork Thu Aug 30 13:42:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44033 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6AE075B36; Thu, 30 Aug 2018 15:43:02 +0200 (CEST) Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by dpdk.org (Postfix) with ESMTP id 6D5A2559A for ; Thu, 30 Aug 2018 15:42:46 +0200 (CEST) Received: by mail-wr1-f67.google.com with SMTP id v17-v6so8122077wrr.9 for ; Thu, 30 Aug 2018 06:42:46 -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=ylUx+ghvrvoDPaMDlCnJf/Edx7IHTy261wDIFPUFjyY=; b=wzl37XGh0q09bhbKc/GvKHuyEQgKpYftAU7PpV/78cpApw3ThhtuyWqVNR5SkXKY/N 2Q94qzY/yo0w4bXsESpd5Qx5w2lBmRT/P6XtNC9i6OPJCAbUbnQ0glA711ua5RoL2lex Ot/TmkRAAKPEL13ao47UXgxmivejR7AX0V9tUKk7qodCOYrgLz+Mp6a3HwJ4M3XVos2L eK673sr/iRY1Kd3YEQENjC7d2tHuUXhZL/u2gBrExou7T7CK+KzUQNUzSM+m22ihf9qV ay/1YLlt/1/Zl/9NSqe27g2Uv6QB28/QQDS1cUjHJotVkjID0fPgs5J5bcRO4FjPxaJu 75JQ== 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=ylUx+ghvrvoDPaMDlCnJf/Edx7IHTy261wDIFPUFjyY=; b=ty+pMwJhQIBYsNhq03UNvrEA0cFOLt8u6LDBdDgfPTHwthhxN2wKd1C73ATD8aSql7 RvMUF+6Nkob2rSdwKYZ+S+3vVTmruO/DGzGHqSwBugdQG8I02JbwTeJY17PozwnSI1xB 5NsNXB9gblymqCvQI1aWIzryNTQUIXRdD1V1BILdLRLZedmM7wfpX3CM589aRvbn4mfd X4WFt65DJ8i+F4T6rbb0JP+P0W1enNqMJIvqp8tIBOGrRMz+DJOL3Z80Hig4c8RCQ6KO mD8E9On2l8fqW2yAmRvFM7DuXclucAQsJ4IJxGQ8ndY0iuSyE1UaMfISA6M2BGRV9E3T 5rkg== X-Gm-Message-State: APzg51Cj6L0BIv7ho+Y3K6rEoY3aEmkSiwvuwSB+IgIqrjsdgqkZ6M7v ERCB+chfNRHz42HUlkHY4kChPwlNuAE= X-Google-Smtp-Source: ANB0VdZMuhKplUz+/lO1jLNGdQ6JqvKu6PsiAJSxTicY/pnIS+SMUo0Ltk4uQe6NjOhIYVBiKWW4qw== X-Received: by 2002:adf:ffc7:: with SMTP id x7-v6mr3131470wrs.137.1535636565698; Thu, 30 Aug 2018 06:42:45 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:44 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:42:02 +0200 Message-Id: <1cd54c876b80f441c483a2f43c1c1fba219b9237.1535633784.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 11/13] bus/pci: process declarative PCI devargs 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Introduce the facility to process future PCI parameters. Once the matching between PCI devices and devargs has been done, it is possible to process each devargs. New parameters would have the PCI device handle to work with when parsing the device (bus specific) parameters. Signed-off-by: Gaetan Rivet --- drivers/bus/pci/pci_common.c | 3 +++ drivers/bus/pci/pci_params.c | 10 ++++++++++ drivers/bus/pci/private.h | 13 +++++++++++++ 3 files changed, 26 insertions(+) diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c index c7695d108..900cd9090 100644 --- a/drivers/bus/pci/pci_common.c +++ b/drivers/bus/pci/pci_common.c @@ -247,6 +247,9 @@ pci_probe_all_drivers(struct rte_pci_device *dev) if (dev->driver != NULL) return 0; + if (rte_pci_devargs_process(dev) < 0) + return -1; + FOREACH_DRIVER_ON_PCIBUS(dr) { rc = rte_pci_probe_one_driver(dr, dev); if (rc < 0) diff --git a/drivers/bus/pci/pci_params.c b/drivers/bus/pci/pci_params.c index a09af3b1c..f34bf3da9 100644 --- a/drivers/bus/pci/pci_params.c +++ b/drivers/bus/pci/pci_params.c @@ -127,3 +127,13 @@ rte_pci_devargs_prepare(struct rte_devargs *devargs) rte_kvargs_free(kvargs); return ret; } + +int +rte_pci_devargs_process(struct rte_pci_device *pdev) +{ + /* For the moment, no PCI param + * needs to be processed. + */ + (void) pdev; + return 0; +} diff --git a/drivers/bus/pci/private.h b/drivers/bus/pci/private.h index 9beb24c6a..06dc85e85 100644 --- a/drivers/bus/pci/private.h +++ b/drivers/bus/pci/private.h @@ -207,4 +207,17 @@ rte_pci_dev_iterate(const void *start, int rte_pci_devargs_prepare(struct rte_devargs *da); +/* + * Process the device devargs, if any. + * + * @param pdev + * PCI device + * + * @return + * 0 on success. + * <0 on error. + */ +int +rte_pci_devargs_process(struct rte_pci_device *pdev); + #endif /* _PCI_PRIVATE_H_ */ From patchwork Thu Aug 30 13:42:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44034 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id BDB865F0D; Thu, 30 Aug 2018 15:43:04 +0200 (CEST) Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) by dpdk.org (Postfix) with ESMTP id 73EBB559A for ; Thu, 30 Aug 2018 15:42:47 +0200 (CEST) Received: by mail-wr1-f47.google.com with SMTP id v16-v6so8113621wro.11 for ; Thu, 30 Aug 2018 06:42:47 -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=KW0k/wg4c/tlyFq0Qo9mW75M4ncJIyCls2QoUCXssyk=; b=JcLlZc716WIXRHjWcxh2wdLcnbSOv07rEPwsoz2f7aOIj/S9zEtFBl0GdNdUagIV0E KEfMFWrR2zfwMXIK58EIKCX5KirgnC8/aNsdNQ5n/Z6TGOs5fgoO5pDRoy5QI7TJtsUQ M0Nhdk2u/NWYPjtqg+VRooJX0WQbR/LjdaDGsCgD21ENU4q5MbLOOTx1ghY45vsmgK/1 0Sofco87HZIt6QXlqVDoPC9OL9X4+e25cuqwxEFMYP8bNV7ornJibXNMPQhD06KU9hcc cSbFUp3JRNstudPgs4UntmV2Q7gZHEAWnmhFhYP/KLVBQpNPaUDigKoSOUF5HGDwB5BJ MJDg== 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=KW0k/wg4c/tlyFq0Qo9mW75M4ncJIyCls2QoUCXssyk=; b=IijzQfQvidQx6kqmx5bY5PEcUYu0SPXZyYSiNRkxOyLd8ne7+NqarWxX0iW8EKEKlP xFb/WNulstaCcBnmkYef4CsyZtKi9+Aj2ewKhURs4CXA4p9P0rKflt6HZqey3+bJNYn5 kS2RRPo+rsC2y0CRS9YjXoOMjLErR9Lh1aqnznD89IRYddsK8W0FEx+vxUZ1Xf3eocV5 Msrjd359zoZ2LwN6lHzkW6nODKVoOqfnVSknIMWSWyxA1wAM/r06zlpsuqBaf/7KhzGJ U/3o1WzcTSxLEtUQmg4xqHQ4XAv9jkO+49LSAsmm/64cp/NpdSeWkXvvrK25nJpV4ste Ka6A== X-Gm-Message-State: APzg51C3RBky+1Ic5pPFzvkCbP9jo2aK4xkbP/kpESZmpqvIoliLE/J7 AaPuQMlGDXadHpaabX+llymBwNm1zX0= X-Google-Smtp-Source: ANB0VdakDTy1PSyCnsrXlqvVRgCTpSi9QV+12cM4Z1Cm4IToh8bY8KH2pjPzf3bXD5Tl/ewC5SOGBA== X-Received: by 2002:adf:c4b1:: with SMTP id m46-v6mr8030218wrf.103.1535636566845; Thu, 30 Aug 2018 06:42:46 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:45 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:42:03 +0200 Message-Id: <712878880719df833be5c45f866fae04ba5379aa.1535633784.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 12/13] ethdev: process declarative eth devargs 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Process the class-specific arguments in a devargs. This processing takes the form of setting the proper eth_dev fields when relevant. Signed-off-by: Gaetan Rivet --- lib/librte_ethdev/eth_private.h | 5 +++ lib/librte_ethdev/rte_class_eth.c | 62 +++++++++++++++++++++++++++++++ lib/librte_ethdev/rte_ethdev.c | 7 ++++ 3 files changed, 74 insertions(+) diff --git a/lib/librte_ethdev/eth_private.h b/lib/librte_ethdev/eth_private.h index 0f5c6d5c4..c0c065165 100644 --- a/lib/librte_ethdev/eth_private.h +++ b/lib/librte_ethdev/eth_private.h @@ -19,6 +19,11 @@ struct rte_eth_dev * eth_find_device(const struct rte_eth_dev *_start, rte_eth_cmp_t cmp, const void *data); +/* Generic rte_eth_dev parameters processor. */ +int +rte_eth_dev_args_parse(struct rte_eth_dev *eth_dev, + struct rte_devargs *da); + #ifdef __cplusplus } #endif diff --git a/lib/librte_ethdev/rte_class_eth.c b/lib/librte_ethdev/rte_class_eth.c index d8d8e8845..18fdef605 100644 --- a/lib/librte_ethdev/rte_class_eth.c +++ b/lib/librte_ethdev/rte_class_eth.c @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -35,6 +36,19 @@ struct eth_dev_match_arg { .kvlist = (k), \ }) +typedef int (*eth_dev_set_t)(struct rte_eth_dev *edev, const char *value); + +static enum eth_params +ethdev_param_id(const char *key) +{ + int i; + + for (i = 0; i < RTE_ETH_PARAMS_MAX; i++) + if (strcmp(key, eth_params_keys[i]) == 0) + return i; + return RTE_ETH_PARAMS_MAX; +} + static int eth_dev_match(const struct rte_eth_dev *edev, const void *_arg) @@ -79,6 +93,54 @@ eth_dev_iterate(const void *start, return edev; } +static int +eth_dev_set_name(struct rte_eth_dev *edev, + const char *value) +{ + snprintf(edev->data->name, + sizeof(edev->data->name), + "%s", value); + return 0; +} + +static int +ethdev_args_process(const char *key, + const char *value, + void *_edev) +{ + static eth_dev_set_t eth_dev_set[] = { + [RTE_ETH_PARAMS_NAME] = eth_dev_set_name, + [RTE_ETH_PARAMS_MAX] = NULL, + }; + struct rte_eth_dev *edev = _edev; + int param; + + param = ethdev_param_id(key); + if (eth_dev_set[param]) + return eth_dev_set[param](edev, value); + return 0; +} + +int +rte_eth_dev_args_parse(struct rte_eth_dev *edev, + struct rte_devargs *devargs) +{ + struct rte_kvargs *kvargs = NULL; + + if (devargs == NULL || devargs->cls_str == NULL) + return 0; + + kvargs = rte_kvargs_parse_delim(devargs->cls_str, eth_params_keys, "/"); + if (kvargs == NULL) { + RTE_LOG(ERR, EAL, "cannot parse argument list\n"); + return -EINVAL; + } + if (rte_kvargs_process(kvargs, NULL, ethdev_args_process, edev)) + return -1; + rte_kvargs_free(kvargs); + return 0; +} + struct rte_class rte_class_eth = { .dev_iterate = eth_dev_iterate, }; diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 4c3202505..633c7ee82 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -41,6 +41,7 @@ #include "rte_ethdev.h" #include "rte_ethdev_driver.h" #include "ethdev_profile.h" +#include "eth_private.h" int rte_eth_dev_logtype; @@ -3496,6 +3497,12 @@ rte_eth_dev_create(struct rte_device *device, const char *name, } } + retval = rte_eth_dev_args_parse(ethdev, device->devargs); + if (retval) { + RTE_LOG(ERR, EAL, "ethdev parsing failed"); + goto probe_failed; + } + retval = ethdev_init(ethdev, init_params); if (retval) { RTE_LOG(ERR, EAL, "ethdev initialisation failed"); From patchwork Thu Aug 30 13:42:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 44035 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4D9AB5F17; Thu, 30 Aug 2018 15:43:06 +0200 (CEST) Received: from mail-wm0-f66.google.com (mail-wm0-f66.google.com [74.125.82.66]) by dpdk.org (Postfix) with ESMTP id A16245699 for ; Thu, 30 Aug 2018 15:42:48 +0200 (CEST) Received: by mail-wm0-f66.google.com with SMTP id j192-v6so2097448wmj.1 for ; Thu, 30 Aug 2018 06:42:48 -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=WTL7FZHHM0N1Hoq86X5ykuhokltoO+RdDvGFDi7Ue4U=; b=hMlGixDi84yZ5mZugOPC0qBQkne756CKB9asFWTj2w8cDwE2PUh5BnHClisg6PcpBV 3t8lAPRBdPEEjtyNW94hUW4wSkMSjLdoBS93UY7kTuk+gJwcQyLroCCftYxloHriAuyq RD4NOKqHMKhI9XpCvWhhE2pStV8A0mi1LRVRk1SGGF3Efvbnap7/S2RKVMopDTrla9Yk fBUZMUg/PrpXqJiB5hdhPpwveOyEVMwpYHaScHtW3KsqlvVIyJwZrSIDQR3AoBRs2bcm oHr4GScGYlClQxcr6o8Pc6HMaa6GGz6jp8OGQK+8ULK2Ma450aAhkTED/ug1bYR9hfl1 Fauw== 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=WTL7FZHHM0N1Hoq86X5ykuhokltoO+RdDvGFDi7Ue4U=; b=obdWEiwrqz0h1ytfzf1ZbKEkaX5RVxfEraNKBkwNBC966AwkkCQ9Ms6g4CmwzQB3Ao Xtj/6jiol/2n6XcIAFknicyVz/ThXcWEqj4ip0qidYxpqSMUSF4tXOrNhErlnfk9eIGH dSdif76cEDvfVZD25ywNGpeZ7jJ+c1kk4e+ESpwjPDtZwJczaeOc32uZ2UnwBW5kqChs X1PdShBr7pabAsMGHHxgD7HiZrsDhWw3xsqfOfGhAM187xqC1NOskV3Hwwuw3ivdbpPx f//obE0PPZ0OUZZi4PJ7JC53wowlulpLMRqhtvVCTlYdvlV5YVqAjbc9VQ4MvpFoze2V y0Vg== X-Gm-Message-State: APzg51BQKvgcserHzdCaveWOqm/h9aVfXcERM0yTRFSfbkJ8zN1XM7vK mPv9ToSJe2/X/AoqJirCdggHRLaHDu0= X-Google-Smtp-Source: ANB0VdbaaDt78QmluZ6OxFtnwHPQA+1iwTFUfUBegBgFv1z16Xn2EJ2h2OMuqt6cIMgrrCEB7T3Fbw== X-Received: by 2002:a1c:7915:: with SMTP id l21-v6mr2034214wme.136.1535636568055; Thu, 30 Aug 2018 06:42:48 -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 w10-v6sm5247731wrp.31.2018.08.30.06.42.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Aug 2018 06:42:47 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 30 Aug 2018 15:42:04 +0200 Message-Id: <008cd730fca7697fab8b5b6391cca29043dee2f5.1535633784.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v1 13/13] eal: add generic dev parameter 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add the --dev parameter to the EAL. This new parameter takes a generic device declaration as argument. It uses the new devargs parsing API. Signed-off-by: Gaetan Rivet --- lib/librte_eal/common/eal_common_devargs.c | 4 +++ lib/librte_eal/common/eal_common_options.c | 36 +++++++++++++++++++--- lib/librte_eal/common/eal_options.h | 2 ++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c index dac2402a4..f1f4628db 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -219,6 +219,10 @@ rte_devargs_parse(struct rte_devargs *da, const char *dev) if (da == NULL) return -EINVAL; + if (strncmp(dev, "bus=", 4) == 0 || + strncmp(dev, "class=", 6) == 0) + return rte_devargs_layers_parse(da, dev); + /* Retrieve eventual bus info */ do { devname = dev; diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index dd5f97402..4a8b87676 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -54,6 +54,7 @@ const struct option eal_long_options[] = { {OPT_BASE_VIRTADDR, 1, NULL, OPT_BASE_VIRTADDR_NUM }, {OPT_CREATE_UIO_DEV, 0, NULL, OPT_CREATE_UIO_DEV_NUM }, + {OPT_DEV, 1, NULL, OPT_DEV_NUM }, {OPT_FILE_PREFIX, 1, NULL, OPT_FILE_PREFIX_NUM }, {OPT_HELP, 0, NULL, OPT_HELP_NUM }, {OPT_HUGE_DIR, 1, NULL, OPT_HUGE_DIR_NUM }, @@ -111,6 +112,7 @@ TAILQ_HEAD(device_option_list, device_option); struct device_option { TAILQ_ENTRY(device_option) next; + int new; enum rte_devtype type; char arg[]; }; @@ -123,7 +125,8 @@ static int mem_parsed; static int core_parsed; static int -eal_option_device_add(enum rte_devtype type, const char *optarg) +eal_option_device_add(enum rte_devtype type, const char *optarg, + int new) { struct device_option *devopt; size_t optlen; @@ -137,6 +140,7 @@ eal_option_device_add(enum rte_devtype type, const char *optarg) } devopt->type = type; + devopt->new = new; ret = snprintf(devopt->arg, optlen, "%s", optarg); if (ret < 0) { RTE_LOG(ERR, EAL, "Unable to copy device option\n"); @@ -156,7 +160,22 @@ eal_option_device_parse(void) TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) { if (ret == 0) { - ret = rte_devargs_add(devopt->type, devopt->arg); + if (devopt->new) { + struct rte_devargs *da; + + da = calloc(1, sizeof(*da)); + ret = rte_devargs_parse(da, devopt->arg); + if (ret) { + free(da); + } else { + ret = rte_devargs_insert(da); + if (ret) + free(da); + } + } else { + ret = rte_devargs_add(devopt->type, + devopt->arg); + } if (ret) RTE_LOG(ERR, EAL, "Unable to parse device '%s'\n", devopt->arg); @@ -1088,7 +1107,7 @@ eal_parse_common_option(int opt, const char *optarg, if (w_used) goto bw_used; if (eal_option_device_add(RTE_DEVTYPE_BLACKLISTED_PCI, - optarg) < 0) { + optarg, 0) < 0) { return -1; } b_used = 1; @@ -1098,7 +1117,7 @@ eal_parse_common_option(int opt, const char *optarg, if (b_used) goto bw_used; if (eal_option_device_add(RTE_DEVTYPE_WHITELISTED_PCI, - optarg) < 0) { + optarg, 0) < 0) { return -1; } w_used = 1; @@ -1234,9 +1253,16 @@ eal_parse_common_option(int opt, const char *optarg, } break; + case OPT_DEV_NUM: + if (eal_option_device_add(RTE_DEVTYPE_VIRTUAL, + optarg, 1) < 0) { + return -1; + } + break; + case OPT_VDEV_NUM: if (eal_option_device_add(RTE_DEVTYPE_VIRTUAL, - optarg) < 0) { + optarg, 0) < 0) { return -1; } break; diff --git a/lib/librte_eal/common/eal_options.h b/lib/librte_eal/common/eal_options.h index 96e166787..8a17eb22c 100644 --- a/lib/librte_eal/common/eal_options.h +++ b/lib/librte_eal/common/eal_options.h @@ -21,6 +21,8 @@ enum { OPT_BASE_VIRTADDR_NUM, #define OPT_CREATE_UIO_DEV "create-uio-dev" OPT_CREATE_UIO_DEV_NUM, +#define OPT_DEV "dev" + OPT_DEV_NUM, #define OPT_FILE_PREFIX "file-prefix" OPT_FILE_PREFIX_NUM, #define OPT_HUGE_DIR "huge-dir"