From patchwork Wed Sep 19 16:03:31 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: 44958 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 6945F58F6; Wed, 19 Sep 2018 18:04:10 +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 D62634CE4 for ; Wed, 19 Sep 2018 18:04:06 +0200 (CEST) Received: by mail-wr1-f67.google.com with SMTP id v90-v6so6402012wrc.0 for ; Wed, 19 Sep 2018 09:04:06 -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=tVNjDY4W8eKHwS9gbAZkkrta7b9NUrNezjY9xUdWh7h85fFRuZupFvHhAEZs3EjALZ VwID3vJKIGb1JXc+dZ/W7+Yl1AVSAp+KKtrM3nAdY39h2EVyB/hROHRG2m08Dfht5nfj 3m4Ooej9jIgZNMdhEBQrnWQksd7NAd31zXXVuAl49dYJXQdSXBfV6VFmdb9Ti2BhCYbx RFoMTO4rMVB+9iZq0ZAP3BObHBtE1pQ/GMD9fmNylfGPMcAl9kxcxKvIZhL+ESu5ogAD Y05cKFfCFZR0RMxEi2uC+zo3NVw45aqV2SIMXjR+y14Z+QX9ef6Vip8ffLFCcLQGlvuW srYA== 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=aeUdQsX2/bd0Im1BBMl8RmoZkN+8wAeWhlaAYkS5EW1Qm7TcJZ6fRrAEf31e7jqB83 QYkztjETgvlBaaNBNcr/2rtcuN5jO0TAtZzL8E9z/lWCrO8255ZDh51vE6JjQ8wOe5Q4 9Qw61lo8Rlv/huidwYkgXikUyA+gZjz1WDUeLrP64QgJb2mMl5BYK6YgHzoLYLziaNtc UjQGHmsqrZxGQYEINEJzUD7OuPezPu79it9ufIGQ19xDO8dJTtMi9CfBnSahwgG2ACO4 kP68p8x3iV9dOtWk1tccbvB0e/CLYH/MwKZNprC9QP+91AhD6kSVSkHnNH3oqmSx3tQZ t3rg== X-Gm-Message-State: APzg51Buh+9A8MQRpFTVuQ1o2kXRNT6vagk+kRKCKWt2A4jye53YL0is pNmcry6ymdlwkUQBBPNF/Br6kSNBUzU= X-Google-Smtp-Source: ANB0VdYMxv5RT0Gr95dYPbxelAIBD6+EruScwa3hZSyN+tCm46mxfWz6iXfgzHzpt6u67WstzEFYmA== X-Received: by 2002:adf:9281:: with SMTP id 1-v6mr31057807wrn.69.1537373045896; Wed, 19 Sep 2018 09:04:05 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:05 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:31 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 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 Wed Sep 19 16:03:32 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: 44959 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 980D95A6E; Wed, 19 Sep 2018 18:04:12 +0200 (CEST) Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by dpdk.org (Postfix) with ESMTP id AF43F5592 for ; Wed, 19 Sep 2018 18:04:07 +0200 (CEST) Received: by mail-wm1-f65.google.com with SMTP id o18-v6so7641583wmc.0 for ; Wed, 19 Sep 2018 09:04:07 -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=EibSwO7jYOx/pdmJ/20uILuf//pfyRkn5kSHi3EfUExmSkC679MK3fCrStWxuXCqxJ VbwEO4B2rt4KY5TW23KrYNQbXDZ88mvl78RwlPq8mo3ohybMI6ZSSv7f6tyUQ3tgo6zN /F5Qsdpyg9F0B1nZd9BadXqwvN4MB73Zout89DlENEk7julecP79iCcKkA6X8SWGIHxh yf8fnVfanGd/TCXC6/Yz69zxrUWljvu6wU8ptmwx94vtsfPZm/19HTcahrNUZNqj6e9J nuE0SewUhBmT0N4Y6V/WOHitiSWWPJ74GOBX9UCznIUraMb3zLPbmBL8bv58/MTrKilC GJKg== 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=ofXodSgSdOKjWTv1E06nMsdoACCaTZjJvF0hSGyInp7q8qq21ECRewDLDsDFq7MIcn qPqdUeUjiDot5BdWgALxItlh8+nO7dzQSs8DoIc53h2VItvG0YUNRWeGQG/4/myztR0i Z6jdMinPGUlXysf2BDiwCnDSHa45s4ztE1eV+tRKTFipgq35OYoBf7fFX2FXM06ygQZX FZNAHUocKMyU3SlSwjw4SKv0L0IMDsFty1A4ZgeqCbXT0WWeZ+c64hrQoy/Ar+wwcn7s UXbDhAunGI1tYT1X2TA7gOzgl5oty5Mo8Z9r5Q/mclvpdOTPf5iGnZcgEFgxJLECtS0z Ce5Q== X-Gm-Message-State: APzg51BcKsW56nDz0q8jl3KHWu1Sy0k1nq7aWl9OYql/2h+ggiDCZlnT e29+Ji/1eVIjVDvztp6wamNiKi+eP8I= X-Google-Smtp-Source: ANB0Vdat2EMsDLl2pEpOAxUs96AaIyDkZZyX+bCbanR1doTf5m3vfIC1dUgvBIYMe7zTWSWRLUNshA== X-Received: by 2002:a1c:8153:: with SMTP id c80-v6mr19289088wmd.123.1537373046861; Wed, 19 Sep 2018 09:04:06 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:06 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:32 +0200 Message-Id: <6a580c90394a57d1ce9e24976d02bf09ddda6a87.1537372746.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 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 Wed Sep 19 16:03:33 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: 44960 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 E506758FE; Wed, 19 Sep 2018 18:04:14 +0200 (CEST) Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by dpdk.org (Postfix) with ESMTP id A84485592 for ; Wed, 19 Sep 2018 18:04:08 +0200 (CEST) Received: by mail-wm1-f65.google.com with SMTP id t25-v6so7587175wmi.3 for ; Wed, 19 Sep 2018 09:04:08 -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=2ktNHEg07US44dnB8N2dYpOT+Gu9W3FwuRYZlnSCcvE=; b=wx3eT+nTFZ/PS12tTfGlIsEmcvuMfotnVMltPgcztFQCp64kh6IyyG/kpf5SdsD3cm /I71GObqP1P8eF3xavlnEmgrthvZGomt08glolRJ3sclwB9d4w55//FZjkg6FUjEgoX5 i1p2UC10Py+dpuvmtKV37vPRwQ8RsZI8ixIIa6r04+LDqKU4HWzM5H0waEcYY9vPsqVx X5NnTvmjy44qgnEPlIkBF1qpppj+LaoHM7AZkSDUujBWg7xUQtDZkYsjMh0TOPbBlBf1 X3crFT57A5N0HXQnt50PWWUuhQOomIg2T2tXMVPeAAhWmWcVd/sBMZA/W9AXbkHb4Ym8 rwxg== 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=2ktNHEg07US44dnB8N2dYpOT+Gu9W3FwuRYZlnSCcvE=; b=GCYv1I9dvd17ybAnu8ZUOe/LOoGNjrts/bMG9C965qe+6imqDR9Wo0l8mt2B7siCVA PZjozdeGFKC8kIImS5vdnY+4qi93kdKDMcC0J/9TdvkDBquMnPgJU+Fdsl2GTUkmRska Ce8AEEQhouHIq3KKOC7MMktyy+DRg3Y0iiZkqM5bEfkEY3pjA1hph5zNL8wnprGQuXyX 52VBsuAQAB1wdVz8rlBkRcZ3ZHwHSKZcu7aEJbmU+OFRW5r/R+I9lEcex36FnhkpxTmE 2/gMIsFUSzxWLB6VT6MlfONO/wce4l6fQhvO+aK7O6g7QFppJsT6SdXp2yFspKm6clZJ 6daQ== X-Gm-Message-State: APzg51DRiEFFHYr40maLVqt4NrYVqvTyDD8XvgdUx+wOFT4WLLeH5ik1 ++qwXawsvIpUXPxCqS1WNr0ieascZ/k= X-Google-Smtp-Source: ANB0VdaulQ0uOifpbxvRZTppPXOqeeEimpKvKdyBbd0Rv9RW1meUFTBGiQRj8OuKBtW26R8jCwuDnA== X-Received: by 2002:a1c:a94d:: with SMTP id s74-v6mr20983622wme.39.1537373047837; Wed, 19 Sep 2018 09:04:07 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:07 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:33 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 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 69dee89a8..ef3ad6d99 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" @@ -497,9 +498,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; @@ -536,10 +537,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 Wed Sep 19 16:03:34 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: 44961 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 DB0205B30; Wed, 19 Sep 2018 18:04:16 +0200 (CEST) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by dpdk.org (Postfix) with ESMTP id 99785568A for ; Wed, 19 Sep 2018 18:04:09 +0200 (CEST) Received: by mail-wm1-f68.google.com with SMTP id s12-v6so6885140wmc.0 for ; Wed, 19 Sep 2018 09:04:09 -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=hjh5Svg/mVFN0UZsG0DDMra8FK6VkGqTqzg3Pwn+Jq5S6DvfPNH9Ytv5uvX9Vm/Pl5 g4dbo8Dz7OpHIdY7qgC5nK/ceiK39k/qm+vFerCGJTScDT0iMBHnzmqNZyq0L2/4pGZa s60wAsNCOxcirkQ3yPlYU4AgQ0PjmZRgWRwYLJVZVcz0Qrsojv4P94hCEsMINYSm7ndJ HuoKrI2EpTT6hO6j5SfGOfZAAxmIoUba76fM2UN86ckOgz/Go6FdLbn4TbAaNi8oImjm A3YxjHi882ZKHyD47jXiltX11Lmf/ro6dAKMreL89q2UJVwY5OnIHBf/E0/goyjcMBoE ZY1Q== 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=B75RUFwO045wrSml1vPI3qbHJK6onLFMrnOtjjK45NkiNUyUNs+pncsL7uUiW/9alN vX4FBSDVTCBEsMt7U9pKtLv3Z+Sy4RkI1q7GgKGelkiLmC49OPD0F8Ea3dFtMDOp3E0S pn0M0FwDYdcX/nfHd4Ml8bW+S2yiqZ6bB2Vl42cJ+roBy3piSFIe9HV8ZU552qqKj59E H+dZgwqyMgf6bZqFSrFxHdy9eZLF9BaGEQwK4D77FgCQprfKuP8hrM5y4hmgj7sYZCVa sOgAEk1fh60mOdi5I/lHdkMVDPjGQ1DZJSwfBfqmvx4octwR7a3ghyaVRlck09pk9L9+ AYfw== X-Gm-Message-State: APzg51DuzkguGDL67RNtmljPEzQX7YfaHEiJ8l+iwTnREk3GgIBv/IH9 2l1Z4GGhYv1MZ+Hyq4bRtmiCW5joZ78= X-Google-Smtp-Source: ANB0VdbBk14/5MadXpyBSR5r9x55INLWvWgsosmK2g2McKxCBAnlIQaV5l8BDS7u2+uN7LNCooZ44Q== X-Received: by 2002:a1c:398b:: with SMTP id g133-v6mr22756116wma.5.1537373048801; Wed, 19 Sep 2018 09:04:08 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:08 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:34 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 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 Wed Sep 19 16:03:35 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: 44962 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 36F4C5B40; Wed, 19 Sep 2018 18:04:19 +0200 (CEST) Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) by dpdk.org (Postfix) with ESMTP id 8EAD258FE for ; Wed, 19 Sep 2018 18:04:10 +0200 (CEST) Received: by mail-wm1-f42.google.com with SMTP id r1-v6so9826004wmh.0 for ; Wed, 19 Sep 2018 09:04:10 -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=XTb1L+T7RmcXKcS3DjXnOnahNwZkE5hFhYI7mthjnJk=; b=QAWJfBDvb2YEYaMwrdtl+brduWQP1uqhfRfAhkX1WO3oywBDRTOo/tYPnHyZPf2ZXB 2GiwqcqVMxpE5ZSQvzF5n/esnuuQcgtaZ+/dOtI+qpDUIcW7Ogh7jA1E9P4K5naDlx+W eJ1zxVCDZe4cRmBLQUB103p9BP6az1Hqg+znhXeIj/c9rFg6Rs5/s+tXEJ5II9LgQD77 eBn8ihulomoVDafEZMW0LDoy8bxG8tUfOFauqjtIgVDwusUwsNElYs5ILvnJOIDw8Eyt 1m0dLEOPTiS2R4FTjRIvKlNkdVfVfJR/LuUviRGAIqpL5COsrlcxW24SL2iq+Ekvj6yG yjrg== 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=XTb1L+T7RmcXKcS3DjXnOnahNwZkE5hFhYI7mthjnJk=; b=rROthU3Bphzcusp+p9AjyKShW4lWvLn76+prtUTAYRMSUZxTV5UQ12oAGZeqIy0NWX BiIGUWanqPJaqQMGCF7dOB4RQXTSMQrem06Sx5PQZ216GHg+pP41Ggm3NBxNw0YXSe4d iRRkxKtwYP4bAC0gGRJ5ZRdw8a0Q22r6a9ew/9bks5j1G//02faZNoDr+OFPBRBUya/G I+trddHyMdbo8E0Dkfa1fLgciGurETbNTDF2UN99JmJgK9qGPPIfv+7nWBTU7qmH/5DP 1GTR7hELEpHvRGI2AAj2SJrWcc9PKrfYYm1Pg7oZtzQAGFfLVXbhPeiLXZ4ViIPeTb43 hVEw== X-Gm-Message-State: APzg51DrKSRiKwp9IayTRq1uGUN8/oxydy4w0vO7OB4lWJne1P5BYbr7 838j8Nah7G4A3xpIUCa72rUKvXiA8ws= X-Google-Smtp-Source: ANB0Vda7jkMWlCihRBV5kq52/Vza8tqkKt8mr45aq8s/tMO/01e821HahD8Z6y87r0SMnatPqe6exw== X-Received: by 2002:a1c:c345:: with SMTP id t66-v6mr1507929wmf.100.1537373049750; Wed, 19 Sep 2018 09:04:09 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:09 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:35 +0200 Message-Id: <0c431b2c36f7ef5df0195a173f1ceeb0ca4d6671.1537372746.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 v2 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 Acked-by: Andrew Rybchenko --- lib/librte_ethdev/Makefile | 1 + lib/librte_ethdev/ethdev_private.c | 31 ++++++++++++++++++++++++++++++ lib/librte_ethdev/ethdev_private.h | 26 +++++++++++++++++++++++++ lib/librte_ethdev/meson.build | 3 ++- 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 lib/librte_ethdev/ethdev_private.c create mode 100644 lib/librte_ethdev/ethdev_private.h diff --git a/lib/librte_ethdev/Makefile b/lib/librte_ethdev/Makefile index 0935a275e..4b0eeaac7 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 += ethdev_private.c SRCS-y += rte_ethdev.c SRCS-y += rte_flow.c SRCS-y += rte_tm.c diff --git a/lib/librte_ethdev/ethdev_private.c b/lib/librte_ethdev/ethdev_private.c new file mode 100644 index 000000000..768c8b2ed --- /dev/null +++ b/lib/librte_ethdev/ethdev_private.c @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Gaëtan Rivet + */ + +#include "rte_ethdev.h" +#include "ethdev_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/ethdev_private.h b/lib/librte_ethdev/ethdev_private.h new file mode 100644 index 000000000..0f5c6d5c4 --- /dev/null +++ b/lib/librte_ethdev/ethdev_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..7798217d0 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('ethdev_private.c', + 'ethdev_profile.c', 'rte_ethdev.c', 'rte_flow.c', 'rte_mtr.c', From patchwork Wed Sep 19 16:03:36 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: 44963 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 021AA5F13; Wed, 19 Sep 2018 18:04:21 +0200 (CEST) Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by dpdk.org (Postfix) with ESMTP id 909F45920 for ; Wed, 19 Sep 2018 18:04:11 +0200 (CEST) Received: by mail-wm1-f66.google.com with SMTP id o18-v6so7641897wmc.0 for ; Wed, 19 Sep 2018 09:04:11 -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=hMCs2bBg9MIWK7fO1XimBPC5t4ITKNvu5mKjlgrObEw=; b=XPsSdGMcjqkQBMWuEi+jOvHFWk+RAlmkWPJsC2hTo9UvlXd9d+A6dFyVxaa9ls1mQ+ U6R9r+50zYOt1/F3HXjl5TzwGMTJihZkYMnV/TfxUL67F/qW+L4IxfkTrabLI/8GtAJg bQ73fWsC06abartjPp7jTwjzOeDlDkQBkhhirISjyC4Wq7lU3JweM/KYJNfh5y3GAHay 9fDSeT99tEhMqgqHL87ABXFlCUKs8YupeAJVSwGoqLPNeS+DeZEq7GRv4h4jbgVPCxwD UIHI68riTH4PbF7o/efE/seiFf9zJqXIkqakMYo0Y0uMhGlzUDT5htrQVdgV80e0uMVf lm1w== 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=hMCs2bBg9MIWK7fO1XimBPC5t4ITKNvu5mKjlgrObEw=; b=PtKVQCXcy2dObeaixYI44PcIE0/zp+pLPjtRUQJm5PxwmwvV6kzNzbtt2FyHwziXbv se0v0FIGvQZSrUPlgDCCM7GbDqFg78/kLwvWRZ//+8epmC9z93V722TtWAoNaaWzqJTy p95tryAf7ugC70xe7B9AVnE8wHUFLCw2yC/Fc3oW6azsxBqfy6nSAZKNaaVU90E5M+z3 LOdSguai4xzCt1oPMLWyX+60sU8eR8Ig39Ubp9kSE2mBPErRNHrv9rT4xWNh2F7b4CsW a9Zkh9ZiS6DL5hUEXV4D7Bfpu7c0EW89uPQFGt1a/z3By93NgnewYI8JbehoiW3IvZIX sYFg== X-Gm-Message-State: APzg51ANN/dgDHv66O6ewkAsPs/2p/d7h66sAz//uagbWnCGp7bvJMrJ dr4r2PshIFb0Rs8pGBRlEgC+FIhhcHQ= X-Google-Smtp-Source: ANB0VdYun9LajMisyfg1ZnA8pH7DKVcJ/HXUhECKJv0pY8HfyXObDPrifeSoGQCWqxnDyz+l1O/Olg== X-Received: by 2002:a1c:e382:: with SMTP id a124-v6mr20481327wmh.121.1537373050753; Wed, 19 Sep 2018 09:04:10 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:10 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:36 +0200 Message-Id: <46632b39b54a833efc150df1e0a107648ec0bb34.1537372746.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 v2 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" Implement the operators of an rte_class for the ethdev abstraction layer. Register the layer as such. 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 4b0eeaac7..d720dd207 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 += ethdev_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 7798217d0..172e302f0 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('ethdev_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..b6557db97 --- /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 "ethdev_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 Wed Sep 19 16:03:37 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: 44964 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 C7EBE5F1F; Wed, 19 Sep 2018 18:04:22 +0200 (CEST) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by dpdk.org (Postfix) with ESMTP id 8F3715A44 for ; Wed, 19 Sep 2018 18:04:12 +0200 (CEST) Received: by mail-wm1-f68.google.com with SMTP id j25-v6so9860093wmc.1 for ; Wed, 19 Sep 2018 09:04:12 -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=0Zv5l7PXCySeYUwhJPdTgL4+3k78WVHfIXDGUz/z6dI=; b=Uc0W3mo52fRanh7V9PFcUGuYFln8873RkfbW0zhSzG0Xy3KLYkJUgsGzwDhcQtsPWq 1bY9bDpsRzzO/U1LjgKtFjV8Qn50tHIRRsQFumz9daN06R4p5wpWUF9X2oIq2FYyt4FI fwp+gbJDhrxZqhM84wWacXYbEO7V1j9EInOppk4urbq9af1k2AvAwqW1uH4RbsSPtuYz YQuAz6FpUrcXoV7PpHWDYqE9qnrAxMRtGWsLDG9GcsNZBhwSGo74uGGp2Cf8ukqmEnNn C9z3tMUBOhwGU/bBWn+LGPJ8HXXQRMc8U9c9u7jhnU8QWZ9eF7xW6Y4GPHWyoaSQxg28 3UwQ== 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=0Zv5l7PXCySeYUwhJPdTgL4+3k78WVHfIXDGUz/z6dI=; b=C82QSNANjPAJMFgdhG1PAJ4Pz/azFzBUteikpTh83e9XwX1gvG+4KRDUgG0OZL6xgt i4Pl36sUtjfCpH+rkj2PwvR+j1xE9xRQn8VeumvgwGFITbPNoCJkNnSby5ilcFVCVE5m kHYxhd0iML5WQPdpFclgwkFk3V2kdYlFDdM4Vj12l1TroiHFfOFQMFb7SCwZbNTbAveP dSmf07yrTfNavz4+39CE+F/260EZbLrQD0LI4zJaj02tsivMKmJuDAa9TVkuaKeS/0el NpgdLoJ4hz08KbqMQjQFf6iX+eK2CBQ89L3EZVH+xgi3P4nUGvm+IDQ+GfJRLPqR+Ngd Vquw== X-Gm-Message-State: APzg51C86aFqo8tW2u2Tt7IBjXhbD+dpEUDHq5IsTmRlKVUBA8h4paiJ a9gRjJswlb1QR9DzQPRyExvf/TdmLLQ= X-Google-Smtp-Source: ANB0VdbolUcw2lqkkt5LhLoIqeJWWVCvSnj5BgXnG2wdJ/CXLii+llGdpVJCjCsxuI82gknC9Niqxg== X-Received: by 2002:a1c:cbc1:: with SMTP id b184-v6mr21665054wmg.149.1537373051712; Wed, 19 Sep 2018 09:04:11 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:11 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:37 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 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 b6557db97..66fd48dc2 100644 --- a/lib/librte_ethdev/rte_class_eth.c +++ b/lib/librte_ethdev/rte_class_eth.c @@ -15,10 +15,12 @@ #include "ethdev_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 Wed Sep 19 16:03:38 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: 44965 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 D20B05F28; Wed, 19 Sep 2018 18:04:24 +0200 (CEST) Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by dpdk.org (Postfix) with ESMTP id 794E65699 for ; Wed, 19 Sep 2018 18:04:13 +0200 (CEST) Received: by mail-wm1-f66.google.com with SMTP id f21-v6so6857224wmc.5 for ; Wed, 19 Sep 2018 09:04:13 -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=FvhY+YAnwiiwZBn48UFQVSUX3r0Tgg2B0Fc2W5fBDyM=; b=sdORt7azUqsYktq1HvsmdC2h6T/raNDIvUa3sqnIxRBlKbBLOoBtqseZV5XL5Tk7To hf6ApLhE05pokyLv5hJbN4/sBUSQLnQ49Dmf5koUPBinpHoyRZSqCHyGlfsDGdXv+a+P 2swfVrWy6cByRr1qiKBXGD0XDFmYp5xT8vR+0LbF6dWR+YQdObT+xDKtOezTbNV5Fm81 Eu+0SIG06Zgp/RN6f44zX/TUCbprc2nZSA2Gm7iCFApl9Ec1ovgZ3+2KlkIN6H0+T415 pIm4Sj1fn4txelmPVN0tkSRc2GNVPy+C84krp9knGWPf6lym19k/4HPLhsPkyiHNdiqy kovw== 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=FvhY+YAnwiiwZBn48UFQVSUX3r0Tgg2B0Fc2W5fBDyM=; b=Q+PlK6ZLHSU5e3jl9EwQjHXyEI3Nc/JX+5jJ8Tw3vHwq43jr1o3K56R0Zg9+PbTCVd SfEtAJJxZ3Nu1w7W3w4c/ZmjjFBL6GkuKT4CsBXfLiyJa0IjhzS6e10IO++dXWVd+zOd vPSJpVEVp/yqh3rZnvEgTQVNO10YUZ5Zcx1u0O+s5y5pX7QVQx8G9B5gKpxdC6JzYhR8 rYSoDNUCiNX7nptJ4fy+1uvIz0EtmagtzVT1vjr+vKYP53NOdBzrx9p3GuVRSUSQ8Bfv Yy7nZyMrLr5ccPzG+jLSYHxqb5FPFw5a2iHF6wWjxmceesnqfrtGuVyDx09MFWmDMrxY 2ElA== X-Gm-Message-State: APzg51CEzBDPRRgBJ0OLqHPbiFD1ZkBu3m6xyBmN7CU9lStmIhoCAKWx brR8DdE33j2dAABFx2D4hqRXNteNoq4= X-Google-Smtp-Source: ANB0VdbxZokAfk7ozoDDMYuULVHhe3Mx6Bq5bWVV1EQD3Gk16C5xWro+S2vzo4x+JlWc6wZdjbG7pQ== X-Received: by 2002:a1c:a60e:: with SMTP id p14-v6mr21481621wme.64.1537373052695; Wed, 19 Sep 2018 09:04:12 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:11 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:38 +0200 Message-Id: <0ef3d5cfdcfb80f8e2a2be7860d59748b1fde3be.1537372746.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 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 0cbd340c1..a4846d9a8 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" + ); } @@ -7115,6 +7118,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; @@ -17608,6 +17661,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 Wed Sep 19 16:03:39 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: 44966 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 557985F2F; Wed, 19 Sep 2018 18:04:26 +0200 (CEST) Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by dpdk.org (Postfix) with ESMTP id 90E595681 for ; Wed, 19 Sep 2018 18:04:14 +0200 (CEST) Received: by mail-wm1-f66.google.com with SMTP id n11-v6so7585071wmc.2 for ; Wed, 19 Sep 2018 09:04:14 -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=AABOkTCcy0DuQy6TmgiXiV739NkVynmRMLiZM0FKyyhgKTxLNcnjkVgFhr7u5AngSe 9vI1pKu3s4wOFW+iCLbLQycAflPFrM46hMKy8sNKyVli2PvbfWmQ23+3IeTcs/90shN6 A/he8XEB4K5nAtO3sArjLTJAJ7agAg5jJidUYwakI1/eMaR+LrTxPecfz/2xhGufVq7k JEgiS9mjw3aHG83vYuEqhfeZKj/gnxxG9/ag6tYEcvUmRyXsYcAAi2PzY/BcOyLKnhyQ s3LYt9dT/ooKhKAyGh6pztUpBDx3xPEpVWNuVQqs9/mjc3o+DoZz25M8EA58dqjH/Esq n8sw== 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=CvLhjLKRiBoFewGFzqILHJY/v1G1IH1ekqAIeawqVArSJJ6Yf6ms3zqJBeL7R8537z zZ/95PfJQZXHm6DdZdSSsrfz+BQp+mbH4NRvMh4EhaA7a5XITjmuLW1lk9JN30ymotqc /Dmejfa5MK9rW/TsPyU8shk5EmlesllswIoJljkcf83zDUnLHTcIYsouh6TpiHjw0RiF ifpu71a0d1fWfFR5Q3MRM52b7B8bsyZnfMB2q/WhxSs3QjTRzfpwjg1BqSz/G3QJbOSO 0XGAKn9RUaNZUo9VaM9tSwv93ROgO2wtxPMxbsTec0D7RyNavJ5NDBXn9fAopXivJ9vO pkxw== X-Gm-Message-State: APzg51DLJr4I9XxBCQrLHPyK8V6PFfchuo5UqKsvsLbwHppqZ7y5ru7y DTLcSKX3F95JrQGZN9uHemEttxpgqjs= X-Google-Smtp-Source: ANB0VdYhgvg2vQ4g5zQif8VITrxuGOhgyFi/daePdg6dnoVR1Gm3bsNYVbZ7kt2DmOtitEL7/+AswA== X-Received: by 2002:a1c:7301:: with SMTP id d1-v6mr2838466wmb.34.1537373053633; Wed, 19 Sep 2018 09:04:13 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:12 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:39 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 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 Wed Sep 19 16:03:40 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: 44967 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 5E4B95F57; Wed, 19 Sep 2018 18:04:28 +0200 (CEST) Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) by dpdk.org (Postfix) with ESMTP id 689835B20 for ; Wed, 19 Sep 2018 18:04:15 +0200 (CEST) Received: by mail-wm1-f50.google.com with SMTP id b19-v6so6876006wme.3 for ; Wed, 19 Sep 2018 09:04:15 -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=LyIKplS9f6Nt6prBvmiliNtk7CBPKndKNWs2mwAkzHU=; b=zBAwA/1kg6/rVH01UWtIBR5ApTdoGUDvHGKuKAFvk+umkbjs0tEKT3X2Ri5mmWtZGE oS4xYdEA8rQPFCPEIzEyeyKVAxSt84XIy7gV/ydU0zWnL3N0ceZNTdQadlwu7/2EfplT V/Q8tM8+u3WiRuC8OnloDbqD+Me+P5CSe7RkTLK1CpTUoTcXrrATV0gmNEEpdxD+BdsY jqWgU+AUdfRbl6dTgWAzN842Fk4LdWG8LQ6APMhKxUHrk+2Gy0w8CtiVDi6Lntv+jDyk +RzgysOrytzy0BoUYIKDBMzKx8iCCgLjJIKLUIxTd4t1aa9GJ82mj/VTxHdL5Izl6mhy VaOw== 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=LyIKplS9f6Nt6prBvmiliNtk7CBPKndKNWs2mwAkzHU=; b=UG9yYyV38egQGlSRFvc+iX9pWRbl+2GIQ7W0ZaDNW5sh/cG46x9B3OjPFbm+eaDgiA jOIZicN3ZrUO+bB20ubbPebtvV1eYM4i4uvU1K/YVIrXpFtcGEe4UcLY84OjiOFCIkY/ a+a4hTLFbUV5P68/MTTDjeNNqB02hiNCUHRMYTrMCLMsgFeP3i4Czauw0k6Ah6tp5ATD fG0K6NnrR0vhV+Cm82i9OCLCyScjiJCgEOro90MoxccuKusoWbL0lQt2Jbepes4BwoL/ nP2g61ekREsXmY049ZWQ+sJuPPS08KEjl3FpWGSzUahE3MycV1kJ+IXad6MAGAvxIwpW 5YDQ== X-Gm-Message-State: APzg51BKz+SSdt+ILl3DN3B5pOXb9vCbSbV21AlovC8OFfYL+6ZUSrBt B9fAGo4nOIJJ2LxGSQRHWK57OeTdyPI= X-Google-Smtp-Source: ANB0VdbX0ap0MUGRTgPmwGW4Z6/Y4lIPiCYma5XwAYkSCsoBT56Rvb+JrNmdl81SsUub901vtvHo5Q== X-Received: by 2002:a1c:a94d:: with SMTP id s74-v6mr20984211wme.39.1537373054578; Wed, 19 Sep 2018 09:04:14 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:13 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:40 +0200 Message-Id: <64dbe73a53b28681244e7a752ebff6185526ec55.1537372746.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 v2 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 ef3ad6d99..5699e0744 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); @@ -447,6 +447,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) @@ -540,7 +542,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 Wed Sep 19 16:03:41 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: 44968 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 9ACC96833; Wed, 19 Sep 2018 18:04:29 +0200 (CEST) Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by dpdk.org (Postfix) with ESMTP id 726DC5B2A for ; Wed, 19 Sep 2018 18:04:16 +0200 (CEST) Received: by mail-wr1-f65.google.com with SMTP id s14-v6so6373899wrw.6 for ; Wed, 19 Sep 2018 09:04:16 -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=Y6jV5XIj0NTjesvwYbUZS2tBpeI8hhXdYdRrFiW7Wpc=; b=JftzbH9LNMP/X59w6NDM4iiHN0fZ3SslwGauVi816e7czv+LpB439SSP6gG1EjCmXS KVpt1sWOSoTH8uxqDXcyDnCtndIaSdik1GGDvet4+acMFGVF1G00gsBX51Ym0PupvQNe hdEtM2FxKoUx+RXGacrt6o9IaX33aIxhfEaLEqhMFm1uZrDlAr1c0xA6+oXGCsYgil61 SfVMix++AK7N2m0o6jtWFc5/YsWn4aONxGdP9Pvn76lsp1Xgl+1L04Oy2AtF3meLANdj She8gIc3ctt55X6svFmGP5V1YoTSPGJH8rpnr5oPkabihIDfJtfj+A5yZGepKI5EeibQ mEQw== 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=Y6jV5XIj0NTjesvwYbUZS2tBpeI8hhXdYdRrFiW7Wpc=; b=MEm6RD5S2NrDo+rh/Ktg5dmVxmggJL1QeomcrhDihD6oZam0lYL0Fgb6sLPfOGXY17 TizzKIls0gJb0Z/koJKRyrItIAV4+x9EPoASOtH3pXDEDjSeu3pF+s7bswaCOZqlQzsa 4tNrnW4pXcILcg3GBJjMcETkzDRDWtxOwU4tSq1CybeSNCDBaTLWoQs4g83xKzMR0W8M HxLS+o+ZzHCxxZBFuxp5DwvKCQqx8H/eKbAw8zEn2XNp4L61WZ4ue0+jDbRHCWugZVDA yfB+3KuOTeJXHPeLrNSUkR/Tab06nteSa8KgXPC7ydN3QSFSRDTeC2BQ+YSyUTKtZu7B H5kA== X-Gm-Message-State: APzg51BsAmZEjK6Z33h2gygCj8b1Bbw5MOA4knQ7VmZlqrUrI1L3ebKa hfHXNseiAum7IoHK6bW+x4FNsXikEJE= X-Google-Smtp-Source: ANB0VdYepXr3dOCltiwbc16cIRQT6q8/bb8+facgeHCzIjs8iBNeEhLpyV01reLJUPifeL1vCZ66FQ== X-Received: by 2002:a05:6000:104a:: with SMTP id c10mr28105334wrx.271.1537373055551; Wed, 19 Sep 2018 09:04:15 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:14 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:41 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 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 | 7 +++++++ drivers/bus/pci/private.h | 13 +++++++++++++ 3 files changed, 23 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..31143c845 100644 --- a/drivers/bus/pci/pci_params.c +++ b/drivers/bus/pci/pci_params.c @@ -127,3 +127,10 @@ rte_pci_devargs_prepare(struct rte_devargs *devargs) rte_kvargs_free(kvargs); return ret; } + +int +rte_pci_devargs_process(struct rte_pci_device *pdev __rte_unused) +{ + /* For the moment, no PCI param needs to be processed. */ + 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 Wed Sep 19 16:03:42 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: 44969 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 31F556CC3; Wed, 19 Sep 2018 18:04:31 +0200 (CEST) Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by dpdk.org (Postfix) with ESMTP id 699575B36 for ; Wed, 19 Sep 2018 18:04:17 +0200 (CEST) Received: by mail-wm1-f52.google.com with SMTP id n11-v6so7585271wmc.2 for ; Wed, 19 Sep 2018 09:04:17 -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=16Hb8UovXCHR9FohgrgsJxW0jLcJyIzOgFOiPw0BzW0=; b=GooncoIKzlmsjpRuhK9ifx77IT8N7Gn+9Scf1VcSEQc0QT7sMFoCElsT7rNs2oJhT8 BZr4I/tFlms7OlfWp2swPTzlssoqyRNxGJtE3V31KY+jzeoPAON+nbzKA0TeH+1jphxG U//2iwZ9vkoVeV/FGt8lIJurirsAEGD9C1Aj3wPenHOkzhP6T9nX0B1rYx7TR+Y21Sbu PTyAPcttMESdAiWrNSX2ZN1zBG7AwI+PSyy/Od5PeeUaR9ANQ6dPzCVfixIg7hftaPy6 pPdFG2DQuEesWD/+cLdvoI20AnRfMmWxkVj29doQ4V/CZYxeuenLiKKs6auX5/yFjIp0 nPGA== 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=16Hb8UovXCHR9FohgrgsJxW0jLcJyIzOgFOiPw0BzW0=; b=e02svKTjX/Jwz2k3MamlzZXxwICp1jjfn74bntII/axzywGnOCVMP2byiqseVQvFZ4 ebfu6ozNZUgnprI6aXbVn777aLt9vAyM+xGuQ8f5r8DMfm9ynjBgTutfeLl/jHM88b5u JkQ5quz7vxUoASA+DGcp0q69P221Y2YFdnzphvlxJD3oYHA+Dn2yypvP2KVrEBxNwhmd 7doPCvO2295BL9ljBqWJ/dz9lz5qfmF5qFP2PVBU63OCWyWNulRpiG+M1v6ACC0t9Zzf +KHmY8gQY+U2uOKhFz33xd8WLhZtYH7ODRhj+/MMoFcNV/BPIj9U/hUKDj8/vBcylsb1 IMng== X-Gm-Message-State: APzg51B0WiZcgZPqQb0vJYQVlokZkorj2hiXIjGqV5C9zWCJddW8BEMR XzoKlY7vmbp8DpKJj+0qtEilQAy0cbc= X-Google-Smtp-Source: ANB0VdaZJGNle6aly2A+tyV7+kg+rfDZiTG2iVUBdUIROh+++RKs3V6TjQHtIL4wUHVHgXkZVY2cUQ== X-Received: by 2002:a1c:501:: with SMTP id 1-v6mr20834864wmf.140.1537373056596; Wed, 19 Sep 2018 09:04:16 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:15 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:42 +0200 Message-Id: <52d2e15926c5c190cb9e98e1b462b3e1e2057842.1537372746.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 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 eth parameters of a devargs. For each parameters that have a setter implemented, the relevant field in rte_eth_dev field is written. Currently only "name" is implemented. Signed-off-by: Gaetan Rivet Acked-by: Andrew Rybchenko --- lib/librte_ethdev/ethdev_private.h | 5 +++ lib/librte_ethdev/rte_class_eth.c | 72 ++++++++++++++++++++++++++++++ lib/librte_ethdev/rte_ethdev.c | 7 +++ 3 files changed, 84 insertions(+) diff --git a/lib/librte_ethdev/ethdev_private.h b/lib/librte_ethdev/ethdev_private.h index 0f5c6d5c4..c0c065165 100644 --- a/lib/librte_ethdev/ethdev_private.h +++ b/lib/librte_ethdev/ethdev_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 66fd48dc2..7a8b81423 100644 --- a/lib/librte_ethdev/rte_class_eth.c +++ b/lib/librte_ethdev/rte_class_eth.c @@ -6,9 +6,11 @@ #include #include +#include #include #include #include +#include #include "rte_ethdev.h" #include "rte_ethdev_core.h" @@ -35,6 +37,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 +94,63 @@ eth_dev_iterate(const void *start, return edev; } +static int +eth_dev_set_name(struct rte_eth_dev *edev, + const char *value) +{ + size_t n; + + n = strlcpy(edev->data->name, value, + sizeof(edev->data->name)); + + /* Name was truncated. */ + if (n >= sizeof(edev->data->name)) { + RTE_LOG(ERR, EAL, "Name %s is too long\n", value); + return -1; + } + 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; + int ret; + + 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; + } + ret = rte_kvargs_process(kvargs, NULL, ethdev_args_process, edev); + rte_kvargs_free(kvargs); + if (ret != 0) + return -1; + 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 aa7730ce2..b03fe7f4b 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 "ethdev_private.h" int rte_eth_dev_logtype; @@ -3504,6 +3505,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 Wed Sep 19 16:03:43 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: 44970 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 7BD8A7CDC; Wed, 19 Sep 2018 18:04:32 +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 521BD5B3A for ; Wed, 19 Sep 2018 18:04:18 +0200 (CEST) Received: by mail-wr1-f66.google.com with SMTP id g33-v6so6403245wrd.1 for ; Wed, 19 Sep 2018 09:04:18 -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=9n/liH3PJLh2eeKwIDG92wTMMNTl7wZomtkWeSppUWY=; b=gbHyEXITxWxJdhKq2zUPPSnWkbLT6BIse0uctBK3U/22lK5WCKwAkZ27qP9Mu+jFtQ c7y81wA9C1UPBP0r817t8ACShg6vZ+lgYKDdVOz73qENv4KuSwnIyYiE6loW3rHkKZ81 Q+BygxlsZTtRoJuKxZd9tkQF4uLN221aO8UCg+Bqrwsrl5rqbLm3Quz6ib+w/61QIK9w hMdJUR84/xhqP1J2CdkSWcGRvaj43sMzu2V/nGDOMVHTOLY3TGlqjfqdZbu+oUnrH8Z1 AQMBeN9yj7hJggktnRuPnFWyYi4uNVlHCgfLj2eHEIxd61ydEIm1TIxYq3Qx8zKgYglj OpaQ== 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=9n/liH3PJLh2eeKwIDG92wTMMNTl7wZomtkWeSppUWY=; b=iMdr+kazzTxQeeMm9vGgErW8SnIY/H/Fmb8zImoEn8uWq1hmk/hSx5Ofo3mAT6talk pu+mmXr1pOEEOqJND+FqEnMBUI3wziEOL0GM7ePONK/5700UGP+lVXUPmYLEk4Z4AD2L TJXArsTh7IH5SgKj0NOnYEyYbrVnrJpE0pa7yrjx+nh4NtpygkhMsbuyxVKzlZ4xMAmY V1zQSniLMlREEJBDq+Fma71r3uLCtavaymi7thi1sYDbG8ZFKv85C9yT2EZjtQlMjUnw VQwuLhTG2roQ2a07l/5BjtPxABNM2xeaYFAgvynhIvDy3HtVQnEND8b2T4wNfodWmin2 Y+/w== X-Gm-Message-State: APzg51A0wahoZuzK3or/t0jQAqp1c37ON6VL4bg39zvRwp16d9SKHQS1 fKQstaZpHcAuqSE/WNdCAf3h6qV6znI= X-Google-Smtp-Source: ANB0VdaIkRkkLW5i64IvPF6B6FH8uXiutL9WWQailRJSSjfZkXDR1JYlN2/BSgq8CQ3dfRgK/QaRyg== X-Received: by 2002:adf:8445:: with SMTP id 63-v6mr29875618wrf.41.1537373057539; Wed, 19 Sep 2018 09:04:17 -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 x24-v6sm34983671wrd.13.2018.09.19.09.04.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 19 Sep 2018 09:04:16 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 19 Sep 2018 18:03:43 +0200 Message-Id: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2 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 ddd624110..703932a30 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: + /* devtype is meaningless in the new format. */ + if (eal_option_device_add(0, 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"