From patchwork Mon Oct 1 20:52:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 45789 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 0E8A15F11; Mon, 1 Oct 2018 22:52:37 +0200 (CEST) Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id D4DAC5B26 for ; Mon, 1 Oct 2018 22:52:33 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 729D32201F; Mon, 1 Oct 2018 16:52:33 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Mon, 01 Oct 2018 16:52:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to:x-me-sender:x-me-sender :x-sasl-enc; s=mesmtp; bh=Ww7RTigvMXMBjAgM+XfSaHH3yS1bEIgHeE+Vgb zipHQ=; b=Kvrq121TsUwyQSGkgN6dNFr9deuXQpPoDppwTMvxAdJzBHQZXW3can SXTHj9LKMbjj0RvfTWo13iu/BC8I5BJX24hPOytWy9ZD8DywzUS/f4Il5m7pXXGu v+jS4m8otH8T161qBVSZQIKOj55OJISBzL1BnQQBVMza/p64UV7O4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=Ww7RTigvMXMBjAgM+ XfSaHH3yS1bEIgHeE+VgbzipHQ=; b=rlLmf6GU7yJx4YrPBatlU7ivh8MLJ0U/2 Ps9kkV4ghWJ83epJGhQbTxk+wrsSoRVJ1/2cQ3/w6AFbP+gIGEOXITAv95acn4pu odiKWhKwKg0MaJBAqlIYbdwZ0O/j9y8V1Em7O8vjZiOnoGmHTdpLjW0V6VxjMcto KDc+Pg3ZPASzopDvFEuAYRiawvPeesU7KcbWjEnEwlB21oA0kRYzH4U7PxT5LfTb zq1isiyPPBIUqra2B0VtshkwI5vbilQsfYYlmgfjGJABA8tc3bUHheEeq7h+vs52 SaSvTLn5h707hQaRXI24tPsYc3grOfHrcplambxes4XgQ1tpZ5XFg== X-ME-Sender: X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id E5460E405E; Mon, 1 Oct 2018 16:52:31 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: gaetan.rivet@6wind.com, ophirmu@mellanox.com, qi.z.zhang@intel.com, ferruh.yigit@intel.com, ktraynor@redhat.com Date: Mon, 1 Oct 2018 22:52:25 +0200 Message-Id: <20181001205228.3503-2-thomas@monjalon.net> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181001205228.3503-1-thomas@monjalon.net> References: <20180907222727.20521-1-thomas@monjalon.net> <20181001205228.3503-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 1/4] devargs: remove deprecated functions 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" rte_eal_parse_devargs_str() does not support parsing the bus name at the start of devargs. So it was renamed and deprecated. rte_eal_devargs_add(), rte_eal_devargs_type_count() and rte_eal_devargs_dump() were declared deprecated and had their implementation body renamed. All these functions were deprecated in release 18.05. Signed-off-by: Thomas Monjalon Reviewed-by: Andrew Rybchenko --- The library version is not updated because it should be done in earlier patch https://patches.dpdk.org/patch/43903/ --- doc/guides/rel_notes/release_18_11.rst | 5 ++ lib/librte_eal/common/eal_common_devargs.c | 30 --------- lib/librte_eal/common/include/rte_devargs.h | 71 --------------------- lib/librte_eal/rte_eal_version.map | 4 -- 4 files changed, 5 insertions(+), 105 deletions(-) diff --git a/doc/guides/rel_notes/release_18_11.rst b/doc/guides/rel_notes/release_18_11.rst index 9c00e33cc..ef902b028 100644 --- a/doc/guides/rel_notes/release_18_11.rst +++ b/doc/guides/rel_notes/release_18_11.rst @@ -102,6 +102,11 @@ API Changes Also, make sure to start the actual text at the margin. ========================================================= +* eal: The following devargs functions, which were deprecated in 18.05, + are removed in 18.11: + ``rte_eal_parse_devargs_str()``, ``rte_eal_devargs_add()``, + ``rte_eal_devargs_type_count()``, and ``rte_eal_devargs_dump()``. + * mbuf: The ``__rte_mbuf_raw_free()`` and ``__rte_pktmbuf_prefree_seg()`` functions were deprecated since 17.05 and are replaced by ``rte_mbuf_raw_free()`` and ``rte_pktmbuf_prefree_seg()``. diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c index dac2402a4..f63d2c663 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -31,36 +31,6 @@ TAILQ_HEAD(rte_devargs_list, rte_devargs); struct rte_devargs_list devargs_list = TAILQ_HEAD_INITIALIZER(devargs_list); -int -rte_eal_parse_devargs_str(const char *devargs_str, - char **drvname, char **drvargs) -{ - char *sep; - - if ((devargs_str) == NULL || (drvname) == NULL || (drvargs == NULL)) - return -1; - - *drvname = strdup(devargs_str); - if (*drvname == NULL) - return -1; - - /* set the first ',' to '\0' to split name and arguments */ - sep = strchr(*drvname, ','); - if (sep != NULL) { - sep[0] = '\0'; - *drvargs = strdup(sep + 1); - } else { - *drvargs = strdup(""); - } - - if (*drvargs == NULL) { - free(*drvname); - *drvname = NULL; - return -1; - } - return 0; -} - static size_t devargs_layer_count(const char *s) { diff --git a/lib/librte_eal/common/include/rte_devargs.h b/lib/librte_eal/common/include/rte_devargs.h index 097a4ce7b..0eef6e9c4 100644 --- a/lib/librte_eal/common/include/rte_devargs.h +++ b/lib/librte_eal/common/include/rte_devargs.h @@ -66,36 +66,6 @@ struct rte_devargs { const char *data; /**< Device string storage. */ }; -/** - * @deprecated - * Parse a devargs string. - * - * For PCI devices, the format of arguments string is "PCI_ADDR" or - * "PCI_ADDR,key=val,key2=val2,...". Examples: "08:00.1", "0000:5:00.0", - * "04:00.0,arg=val". - * - * For virtual devices, the format of arguments string is "DRIVER_NAME*" - * or "DRIVER_NAME*,key=val,key2=val2,...". Examples: "net_ring", - * "net_ring0", "net_pmdAnything,arg=0:arg2=1". - * - * The function parses the arguments string to get driver name and driver - * arguments. - * - * @param devargs_str - * The arguments as given by the user. - * @param drvname - * The pointer to the string to store parsed driver name. - * @param drvargs - * The pointer to the string to store parsed driver arguments. - * - * @return - * - 0 on success - * - A negative value on error - */ -__rte_deprecated -int rte_eal_parse_devargs_str(const char *devargs_str, - char **drvname, char **drvargs); - /** * Parse a device string. * @@ -201,23 +171,6 @@ rte_devargs_insert(struct rte_devargs *da); __rte_experimental int rte_devargs_add(enum rte_devtype devtype, const char *devargs_str); -/** - * @deprecated - * Add a device to the user device list - * See rte_devargs_parse() for details. - * - * @param devtype - * The type of the device. - * @param devargs_str - * The arguments as given by the user. - * - * @return - * - 0 on success - * - A negative value on error - */ -__rte_deprecated -int rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str); - /** * Remove a device from the user device list. * Its resources are freed. @@ -251,20 +204,6 @@ __rte_experimental unsigned int rte_devargs_type_count(enum rte_devtype devtype); -/** - * @deprecated - * Count the number of user devices of a specified type - * - * @param devtype - * The type of the devices to counted. - * - * @return - * The number of devices. - */ -__rte_deprecated -unsigned int -rte_eal_devargs_type_count(enum rte_devtype devtype); - /** * This function dumps the list of user device and their arguments. * @@ -274,16 +213,6 @@ rte_eal_devargs_type_count(enum rte_devtype devtype); __rte_experimental void rte_devargs_dump(FILE *f); -/** - * @deprecated - * This function dumps the list of user device and their arguments. - * - * @param f - * A pointer to a file for output - */ -__rte_deprecated -void rte_eal_devargs_dump(FILE *f); - /** * Find next rte_devargs matching the provided bus name. * diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map index 73282bbb0..3df7f9831 100644 --- a/lib/librte_eal/rte_eal_version.map +++ b/lib/librte_eal/rte_eal_version.map @@ -19,9 +19,6 @@ DPDK_2.0 { rte_dump_tailq; rte_eal_alarm_cancel; rte_eal_alarm_set; - rte_eal_devargs_add; - rte_eal_devargs_dump; - rte_eal_devargs_type_count; rte_eal_get_configuration; rte_eal_get_lcore_state; rte_eal_get_physmem_size; @@ -32,7 +29,6 @@ DPDK_2.0 { rte_eal_lcore_role; rte_eal_mp_remote_launch; rte_eal_mp_wait_lcore; - rte_eal_parse_devargs_str; rte_eal_process_type; rte_eal_remote_launch; rte_eal_tailq_lookup; From patchwork Mon Oct 1 20:52:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 45790 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 CCA305F1A; Mon, 1 Oct 2018 22:52:38 +0200 (CEST) Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id 4D05D568A for ; Mon, 1 Oct 2018 22:52:34 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id E690721D26; Mon, 1 Oct 2018 16:52:33 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Mon, 01 Oct 2018 16:52:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to:x-me-sender:x-me-sender :x-sasl-enc; s=mesmtp; bh=dCoooayVO1v/EsyrpmDWIqN234rEXQmnsTVGii gbAWs=; b=mkpq/DPtXjclhtitp9pYSPCoio8nPc91/Dssuk8blfvKBerFZOTRxV Me7Y8IiGC3un0YSZVU/TKaQfk7G5nCgju3Mgu8IQq0DNtgqOMHJilknu/+Igna34 bey0Ue5P7XH0hhosw8gRsV6um8ofXNSOMNmFWEkDDIk+vz+fRS5pU= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=dCoooayVO1v/Esyrp mDWIqN234rEXQmnsTVGiigbAWs=; b=LjkNMJkvxB6QObK+DIZU1zVTQ7XAkRkhp 7DvXISOWK2p3amk7iixiZpa0Zrz7fYfXornEIx3mJKqjx1qviGKYe6ZfC9b9coLL pL7CBC3FKiAH5izkV5+fDd2EU6OZUZrTWrelFYGFI7NxAmCqViNqmsDYFHqN+6So fzLhiD4wtm98eW9fSxtmB87N0bfceiEeTJdWvIykmCs1n/iHDbv/YK3XjISR85/2 jNbpGO86Aua/XpTjXnLoxeuXIy2LLES816F5TM5K2jnB6eLyoBpZFRzRQ/Qp8Zv4 Sm0ow4epGNW58UHdK2i3l30D+gPOeQsGCt44CYuLwzonwDKTilI4g== X-ME-Sender: X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id D3F81E49D9; Mon, 1 Oct 2018 16:52:32 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: gaetan.rivet@6wind.com, ophirmu@mellanox.com, qi.z.zhang@intel.com, ferruh.yigit@intel.com, ktraynor@redhat.com Date: Mon, 1 Oct 2018 22:52:26 +0200 Message-Id: <20181001205228.3503-3-thomas@monjalon.net> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181001205228.3503-1-thomas@monjalon.net> References: <20180907222727.20521-1-thomas@monjalon.net> <20181001205228.3503-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 2/4] devargs: simplify parameters of removal function 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 function rte_devargs_remove(), which is intended to be internal, can take a devargs structure as argument. The matching is still using string comparison of bus name and device name. It is simpler and may allow a different devargs matching in future. Signed-off-by: Thomas Monjalon Reviewed-by: Andrew Rybchenko --- doc/guides/rel_notes/release_18_11.rst | 3 +++ drivers/bus/ifpga/ifpga_bus.c | 5 +---- drivers/bus/vdev/vdev.c | 8 ++------ lib/librte_eal/common/eal_common_dev.c | 4 ++-- lib/librte_eal/common/eal_common_devargs.c | 11 +++++++---- lib/librte_eal/common/include/rte_devargs.h | 10 +++------- 6 files changed, 18 insertions(+), 23 deletions(-) diff --git a/doc/guides/rel_notes/release_18_11.rst b/doc/guides/rel_notes/release_18_11.rst index ef902b028..54f475fd7 100644 --- a/doc/guides/rel_notes/release_18_11.rst +++ b/doc/guides/rel_notes/release_18_11.rst @@ -107,6 +107,9 @@ API Changes ``rte_eal_parse_devargs_str()``, ``rte_eal_devargs_add()``, ``rte_eal_devargs_type_count()``, and ``rte_eal_devargs_dump()``. +* eal: The parameters of the function ``rte_devargs_remove()`` have changed + from bus and device names to ``struct rte_devargs``. + * mbuf: The ``__rte_mbuf_raw_free()`` and ``__rte_pktmbuf_prefree_seg()`` functions were deprecated since 17.05 and are replaced by ``rte_mbuf_raw_free()`` and ``rte_pktmbuf_prefree_seg()``. diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c index c54b59db2..3ef035b7e 100644 --- a/drivers/bus/ifpga/ifpga_bus.c +++ b/drivers/bus/ifpga/ifpga_bus.c @@ -361,7 +361,6 @@ static int ifpga_unplug(struct rte_device *dev) { struct rte_afu_device *afu_dev = NULL; - struct rte_devargs *devargs = NULL; int ret; if (dev == NULL) @@ -371,15 +370,13 @@ ifpga_unplug(struct rte_device *dev) if (!afu_dev) return -ENOENT; - devargs = dev->devargs; - ret = ifpga_remove_driver(afu_dev); if (ret) return ret; TAILQ_REMOVE(&ifpga_afu_dev_list, afu_dev, next); - rte_devargs_remove(devargs->bus->name, devargs->name); + rte_devargs_remove(dev->devargs); free(afu_dev); return 0; diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c index 69dee89a8..390c2ce70 100644 --- a/drivers/bus/vdev/vdev.c +++ b/drivers/bus/vdev/vdev.c @@ -248,7 +248,6 @@ int rte_vdev_init(const char *name, const char *args) { struct rte_vdev_device *dev; - struct rte_devargs *devargs; int ret; rte_spinlock_recursive_lock(&vdev_device_list_lock); @@ -259,9 +258,8 @@ rte_vdev_init(const char *name, const char *args) if (ret > 0) VDEV_LOG(ERR, "no driver found for %s", name); /* If fails, remove it from vdev list */ - devargs = dev->device.devargs; TAILQ_REMOVE(&vdev_device_list, dev, next); - rte_devargs_remove(devargs->bus->name, devargs->name); + rte_devargs_remove(dev->device.devargs); free(dev); } } @@ -289,7 +287,6 @@ int rte_vdev_uninit(const char *name) { struct rte_vdev_device *dev; - struct rte_devargs *devargs; int ret; if (name == NULL) @@ -308,8 +305,7 @@ rte_vdev_uninit(const char *name) goto unlock; TAILQ_REMOVE(&vdev_device_list, dev, next); - devargs = dev->device.devargs; - rte_devargs_remove(devargs->bus->name, devargs->name); + rte_devargs_remove(dev->device.devargs); free(dev); unlock: diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c index 678dbcac7..e81ff4258 100644 --- a/lib/librte_eal/common/eal_common_dev.c +++ b/lib/librte_eal/common/eal_common_dev.c @@ -186,7 +186,7 @@ int __rte_experimental rte_eal_hotplug_add(const char *busname, const char *devn return 0; err_devarg: - if (rte_devargs_remove(busname, devname)) { + if (rte_devargs_remove(da)) { free(da->args); free(da); } @@ -227,7 +227,7 @@ rte_eal_hotplug_remove(const char *busname, const char *devname) if (ret) RTE_LOG(ERR, EAL, "Driver cannot detach the device (%s)\n", dev->name); - rte_devargs_remove(busname, devname); + rte_devargs_remove(dev->devargs); return ret; } diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c index f63d2c663..d8db45a23 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -266,7 +266,7 @@ rte_devargs_insert(struct rte_devargs *da) { int ret; - ret = rte_devargs_remove(da->bus->name, da->name); + ret = rte_devargs_remove(da); if (ret < 0) return ret; TAILQ_INSERT_TAIL(&devargs_list, da, next); @@ -312,14 +312,17 @@ rte_devargs_add(enum rte_devtype devtype, const char *devargs_str) } int __rte_experimental -rte_devargs_remove(const char *busname, const char *devname) +rte_devargs_remove(struct rte_devargs *devargs) { struct rte_devargs *d; void *tmp; + if (devargs->bus == NULL) + return -1; + TAILQ_FOREACH_SAFE(d, &devargs_list, next, tmp) { - if (strcmp(d->bus->name, busname) == 0 && - strcmp(d->name, devname) == 0) { + if (strcmp(d->bus->name, devargs->bus->name) == 0 && + strcmp(d->name, devargs->name) == 0) { TAILQ_REMOVE(&devargs_list, d, next); free(d->args); free(d); diff --git a/lib/librte_eal/common/include/rte_devargs.h b/lib/librte_eal/common/include/rte_devargs.h index 0eef6e9c4..b1f121f83 100644 --- a/lib/librte_eal/common/include/rte_devargs.h +++ b/lib/librte_eal/common/include/rte_devargs.h @@ -176,11 +176,8 @@ int rte_devargs_add(enum rte_devtype devtype, const char *devargs_str); * Its resources are freed. * If the devargs cannot be found, nothing happens. * - * @param busname - * bus name of the devargs to remove. - * - * @param devname - * device name of the devargs to remove. + * @param devargs + * The instance or a copy of devargs to remove. * * @return * 0 on success. @@ -188,8 +185,7 @@ int rte_devargs_add(enum rte_devtype devtype, const char *devargs_str); * >0 if the devargs was not within the user device list. */ __rte_experimental -int rte_devargs_remove(const char *busname, - const char *devname); +int rte_devargs_remove(struct rte_devargs *devargs); /** * Count the number of user devices of a specified type From patchwork Mon Oct 1 20:52:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 45791 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 8755D5F30; Mon, 1 Oct 2018 22:52:40 +0200 (CEST) Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id 2E54D5B34 for ; Mon, 1 Oct 2018 22:52:35 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id D0D2F220A3; Mon, 1 Oct 2018 16:52:34 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Mon, 01 Oct 2018 16:52:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to:x-me-sender:x-me-sender :x-sasl-enc; s=mesmtp; bh=fzBfXenfOlqMhSU8E2aitTAkAhSxCgnryoe09v etk0w=; b=Te1viBF5m9IwiKaYewoGa0I4B0hvXZiRrTfO1y7Lb+a0ibe25/48Dm SNg3hqW4i8RLU4durnOM10hZDhhjFPAnX0AX4jnSr9Y7BGY3x1JN2f7F9zT2CxQu 7NpDx9wFdHKlCGR/WJpUMEwhKatWFqVODvAevZOW62Xuq23mmsSIM= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=fzBfXenfOlqMhSU8E 2aitTAkAhSxCgnryoe09vetk0w=; b=Y0KOKPNq1oKpRAKkSmdS2m2y3bEP/gLi3 46eFAZq/qrwoBSsTA9297+aRQecoBRmYNRngpB0FumTy6mdQ/sHQTBZNv/OxsgkH LE1VHPCN1y51rTNbUrXbSvYJ6v6Hqd3n0VnktHj9JpGW9/ju1w2fN03IAS13ebP6 WQLiE7/kW4Ap3jso4zv8W+76sk2Efx2iTFLG04gz5X1487IB6Wzi6Gi01C1B6U6y 5/sZZOP3uG5uWYnR/rWhRP9h/aqs+bs6RWxJWO2FlnSWbt4aVulnUPUXu7i0hkJY ntggC+/S5CvzjaSkhSJQbQ3UIDysMkTlkUax4drrBqhqLNn+BSgfQ== X-ME-Sender: X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id BE20DE405E; Mon, 1 Oct 2018 16:52:33 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: gaetan.rivet@6wind.com, ophirmu@mellanox.com, qi.z.zhang@intel.com, ferruh.yigit@intel.com, ktraynor@redhat.com Date: Mon, 1 Oct 2018 22:52:27 +0200 Message-Id: <20181001205228.3503-4-thomas@monjalon.net> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181001205228.3503-1-thomas@monjalon.net> References: <20180907222727.20521-1-thomas@monjalon.net> <20181001205228.3503-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 3/4] eal: remove experimental flag of hotplug functions 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" These functions are quite old and are the only available replacement for the deprecated attach/detach functions. Note: some new functions may (again) replace these hotplug functions, in future, with better parameters. Signed-off-by: Thomas Monjalon Reviewed-by: Andrew Rybchenko --- lib/librte_eal/common/eal_common_dev.c | 7 ++++--- lib/librte_eal/common/include/rte_dev.h | 11 ++--------- lib/librte_eal/rte_eal_version.map | 4 ++-- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c index e81ff4258..a9be58edf 100644 --- a/lib/librte_eal/common/eal_common_dev.c +++ b/lib/librte_eal/common/eal_common_dev.c @@ -127,8 +127,9 @@ int rte_eal_dev_detach(struct rte_device *dev) return ret; } -int __rte_experimental rte_eal_hotplug_add(const char *busname, const char *devname, - const char *devargs) +int +rte_eal_hotplug_add(const char *busname, const char *devname, + const char *devargs) { struct rte_bus *bus; struct rte_device *dev; @@ -193,7 +194,7 @@ int __rte_experimental rte_eal_hotplug_add(const char *busname, const char *devn return ret; } -int __rte_experimental +int rte_eal_hotplug_remove(const char *busname, const char *devname) { struct rte_bus *bus; diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h index b80a80598..d440c4e58 100644 --- a/lib/librte_eal/common/include/rte_dev.h +++ b/lib/librte_eal/common/include/rte_dev.h @@ -189,9 +189,6 @@ __rte_deprecated int rte_eal_dev_detach(struct rte_device *dev); /** - * @warning - * @b EXPERIMENTAL: this API may change without prior notice - * * Hotplug add a given device to a specific bus. * * @param busname @@ -204,13 +201,10 @@ int rte_eal_dev_detach(struct rte_device *dev); * @return * 0 on success, negative on error. */ -int __rte_experimental rte_eal_hotplug_add(const char *busname, const char *devname, +int rte_eal_hotplug_add(const char *busname, const char *devname, const char *devargs); /** - * @warning - * @b EXPERIMENTAL: this API may change without prior notice - * * Hotplug remove a given device from a specific bus. * * @param busname @@ -220,8 +214,7 @@ int __rte_experimental rte_eal_hotplug_add(const char *busname, const char *devn * @return * 0 on success, negative on error. */ -int __rte_experimental rte_eal_hotplug_remove(const char *busname, - const char *devname); +int rte_eal_hotplug_remove(const char *busname, const char *devname); /** * Device comparison function. diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map index 3df7f9831..6bff37f4b 100644 --- a/lib/librte_eal/rte_eal_version.map +++ b/lib/librte_eal/rte_eal_version.map @@ -261,6 +261,8 @@ DPDK_18.08 { DPDK_18.11 { global: + rte_eal_hotplug_add; + rte_eal_hotplug_remove; rte_strscpy; } DPDK_18.08; @@ -288,8 +290,6 @@ EXPERIMENTAL { rte_devargs_remove; rte_devargs_type_count; rte_eal_cleanup; - rte_eal_hotplug_add; - rte_eal_hotplug_remove; rte_fbarray_attach; rte_fbarray_destroy; rte_fbarray_detach; From patchwork Mon Oct 1 20:52:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 45792 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 02A0D5F38; Mon, 1 Oct 2018 22:52:42 +0200 (CEST) Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id 0AF825B34 for ; Mon, 1 Oct 2018 22:52:36 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id AACC62202E; Mon, 1 Oct 2018 16:52:35 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Mon, 01 Oct 2018 16:52:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to:x-me-sender:x-me-sender :x-sasl-enc; s=mesmtp; bh=2I656p67WrAipZZ+rGsuWslJItPOsRXgL//Bof cu51I=; b=kUYMya0u+AGMExmcXbbcEIeMVtTisTxOjh3wA3YaQY/YOAVkSqKy4c fvFXkjK2y4bwmV88+Umvfm6eZD64b8Db7idgJnS7UsKg5f4fZYfiLHQfnj9PFuzP yDACNTNFU+MsAZ54YqWx1qNdPeGMelvKtAs6hu1VQx2DW1kNvuJpU= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=2I656p67WrAipZZ+r GsuWslJItPOsRXgL//Bofcu51I=; b=g3bkKJ2YkWnnEYXDJpmfkY9M7r+9cRq3B hSC2G2elO9+28QQD0r6RtTtiX9hpolS2ihTecFdwKwwpFIgHiU18P8ULM0FgX5sM t7PIDzEwFh2zBsYw+YLW5AQceLYScpoSQr1YG09R7Nw39YbAiWXCX30Nr2zYQpuA 68QRML+GTS2hfn3acxhSPTll9u+GlddKSv+ZHzsT51N+il5fBxBDIYw2bzZ8LjsY cUZsXkfr60TSUM47JyzDH5sRfcXXVLholZ/LOTZZNg1O3wligE5sCiY2JtMkAscK yoQMYXyLC+ZoZsja/iIUrtGz9yIdCt2Sd9OFgUTvl0oi5+1UBgHHw== X-ME-Sender: X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id ACBC0E474F; Mon, 1 Oct 2018 16:52:34 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: gaetan.rivet@6wind.com, ophirmu@mellanox.com, qi.z.zhang@intel.com, ferruh.yigit@intel.com, ktraynor@redhat.com Date: Mon, 1 Oct 2018 22:52:28 +0200 Message-Id: <20181001205228.3503-5-thomas@monjalon.net> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181001205228.3503-1-thomas@monjalon.net> References: <20180907222727.20521-1-thomas@monjalon.net> <20181001205228.3503-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v4 4/4] eal: simplify parameters of hotplug functions 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" All information about a device to probe can be grouped in a common string, which is what we usually call devargs. An application should not have to parse this string before calling the EAL probe function. And the syntax could evolve to be more complex and support matching multiple devices in one string. That's why the bus name and device name should be removed from rte_eal_hotplug_add(). Instead of changing this function, a simpler one is added and used in the old one, which may be deprecated later. When removing a device, we already know its rte_device handle which can be directly passed as parameter of rte_eal_hotplug_remove(). If the rte_device is not known, it can be retrieved with the devargs, by iterating in the device list (future RTE_DEV_FOREACH()). Similarly to the probing case, a new function is added and used in the old one, which may be deprecated later. The new function is used in failsafe, because the replacement is easy. Signed-off-by: Thomas Monjalon Reviewed-by: Andrew Rybchenko --- drivers/net/failsafe/failsafe_eal.c | 3 +- drivers/net/failsafe/failsafe_ether.c | 3 +- lib/librte_eal/common/eal_common_dev.c | 80 ++++++++++++++++--------- lib/librte_eal/common/include/rte_dev.h | 30 +++++++++- lib/librte_eal/rte_eal_version.map | 2 + 5 files changed, 84 insertions(+), 34 deletions(-) diff --git a/drivers/net/failsafe/failsafe_eal.c b/drivers/net/failsafe/failsafe_eal.c index ce1633f13..8a888b1ff 100644 --- a/drivers/net/failsafe/failsafe_eal.c +++ b/drivers/net/failsafe/failsafe_eal.c @@ -144,8 +144,7 @@ fs_bus_uninit(struct rte_eth_dev *dev) int ret = 0; FOREACH_SUBDEV_STATE(sdev, i, dev, DEV_PROBED) { - sdev_ret = rte_eal_hotplug_remove(sdev->bus->name, - sdev->dev->name); + sdev_ret = rte_dev_remove(sdev->dev); if (sdev_ret) { ERROR("Failed to remove requested device %s (err: %d)", sdev->dev->name, sdev_ret); diff --git a/drivers/net/failsafe/failsafe_ether.c b/drivers/net/failsafe/failsafe_ether.c index 51c96f78b..f2512c430 100644 --- a/drivers/net/failsafe/failsafe_ether.c +++ b/drivers/net/failsafe/failsafe_ether.c @@ -282,8 +282,7 @@ fs_dev_remove(struct sub_device *sdev) sdev->state = DEV_PROBED; /* fallthrough */ case DEV_PROBED: - ret = rte_eal_hotplug_remove(sdev->bus->name, - sdev->dev->name); + ret = rte_dev_remove(sdev->dev); if (ret) { ERROR("Bus detach failed for sub_device %u", SUB_ID(sdev)); diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c index a9be58edf..713707b9a 100644 --- a/lib/librte_eal/common/eal_common_dev.c +++ b/lib/librte_eal/common/eal_common_dev.c @@ -129,46 +129,61 @@ int rte_eal_dev_detach(struct rte_device *dev) int rte_eal_hotplug_add(const char *busname, const char *devname, - const char *devargs) + const char *drvargs) { - struct rte_bus *bus; - struct rte_device *dev; - struct rte_devargs *da; int ret; + char *devargs = NULL; + int size, length = -1; - bus = rte_bus_find_by_name(busname); - if (bus == NULL) { - RTE_LOG(ERR, EAL, "Cannot find bus (%s)\n", busname); - return -ENOENT; - } + do { /* 2 iterations: first is to know string length */ + size = length + 1; + length = snprintf(devargs, size, "%s:%s,%s", busname, devname, drvargs); + if (length >= size) + devargs = malloc(length + 1); + if (devargs == NULL) + return -ENOMEM; + } while (size == 0); - if (bus->plug == NULL) { - RTE_LOG(ERR, EAL, "Function plug not supported by bus (%s)\n", - bus->name); - return -ENOTSUP; - } + ret = rte_dev_probe(devargs); + + free(devargs); + return ret; +} + +int __rte_experimental +rte_dev_probe(const char *devargs) +{ + struct rte_device *dev; + struct rte_devargs *da; + int ret; da = calloc(1, sizeof(*da)); if (da == NULL) return -ENOMEM; - ret = rte_devargs_parsef(da, "%s:%s,%s", - busname, devname, devargs); + ret = rte_devargs_parse(da, devargs); if (ret) goto err_devarg; + if (da->bus->plug == NULL) { + RTE_LOG(ERR, EAL, "Function plug not supported by bus (%s)\n", + da->bus->name); + ret = -ENOTSUP; + goto err_devarg; + } + ret = rte_devargs_insert(da); if (ret) goto err_devarg; - ret = bus->scan(); + ret = da->bus->scan(); if (ret) goto err_devarg; - dev = bus->find_device(NULL, cmp_dev_name, devname); + dev = da->bus->find_device(NULL, cmp_dev_name, da->name); if (dev == NULL) { RTE_LOG(ERR, EAL, "Cannot find device (%s)\n", - devname); + da->name); ret = -ENODEV; goto err_devarg; } @@ -178,7 +193,7 @@ rte_eal_hotplug_add(const char *busname, const char *devname, return -EEXIST; } - ret = bus->plug(dev); + ret = da->bus->plug(dev); if (ret) { RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", dev->name); @@ -197,9 +212,8 @@ rte_eal_hotplug_add(const char *busname, const char *devname, int rte_eal_hotplug_remove(const char *busname, const char *devname) { - struct rte_bus *bus; struct rte_device *dev; - int ret; + struct rte_bus *bus; bus = rte_bus_find_by_name(busname); if (bus == NULL) { @@ -207,23 +221,33 @@ rte_eal_hotplug_remove(const char *busname, const char *devname) return -ENOENT; } - if (bus->unplug == NULL) { - RTE_LOG(ERR, EAL, "Function unplug not supported by bus (%s)\n", - bus->name); - return -ENOTSUP; - } - dev = bus->find_device(NULL, cmp_dev_name, devname); if (dev == NULL) { RTE_LOG(ERR, EAL, "Cannot find plugged device (%s)\n", devname); return -EINVAL; } + return rte_dev_remove(dev); +} + +int __rte_experimental +rte_dev_remove(struct rte_device *dev) +{ + struct rte_bus *bus; + int ret; + if (dev->driver == NULL) { RTE_LOG(ERR, EAL, "Device is already unplugged\n"); return -ENOENT; } + bus = dev->devargs->bus; + if (bus->unplug == NULL) { + RTE_LOG(ERR, EAL, "Function unplug not supported by bus (%s)\n", + bus->name); + return -ENOTSUP; + } + ret = bus->unplug(dev); if (ret) RTE_LOG(ERR, EAL, "Driver cannot detach the device (%s)\n", diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h index d440c4e58..ee77e4006 100644 --- a/lib/librte_eal/common/include/rte_dev.h +++ b/lib/librte_eal/common/include/rte_dev.h @@ -196,13 +196,26 @@ int rte_eal_dev_detach(struct rte_device *dev); * @param devname * The device name. Based on this device name, eal will identify a driver * capable of handling it and pass it to the driver probing function. - * @param devargs + * @param drvargs * Device arguments to be passed to the driver. * @return * 0 on success, negative on error. */ int rte_eal_hotplug_add(const char *busname, const char *devname, - const char *devargs); + const char *drvargs); + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice + * + * Add matching devices. + * + * @param devargs + * Device arguments including bus, class and driver properties. + * @return + * 0 on success, negative on error. + */ +int __rte_experimental rte_dev_probe(const char *devargs); /** * Hotplug remove a given device from a specific bus. @@ -216,6 +229,19 @@ int rte_eal_hotplug_add(const char *busname, const char *devname, */ int rte_eal_hotplug_remove(const char *busname, const char *devname); +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice + * + * Remove one device. + * + * @param dev + * Data structure of the device to remove. + * @return + * 0 on success, negative on error. + */ +int __rte_experimental rte_dev_remove(struct rte_device *dev); + /** * Device comparison function. * diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map index 6bff37f4b..2ea7a870a 100644 --- a/lib/librte_eal/rte_eal_version.map +++ b/lib/librte_eal/rte_eal_version.map @@ -281,6 +281,8 @@ EXPERIMENTAL { rte_dev_event_monitor_stop; rte_dev_iterator_init; rte_dev_iterator_next; + rte_dev_probe; + rte_dev_remove; rte_devargs_add; rte_devargs_dump; rte_devargs_insert;