From patchwork Sun Oct 7 09:32:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 46201 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 8D14D37B0; Sun, 7 Oct 2018 11:32:57 +0200 (CEST) Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id 8043A2C38 for ; Sun, 7 Oct 2018 11:32:53 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 26E2D21EC1; Sun, 7 Oct 2018 05:32:53 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Sun, 07 Oct 2018 05:32:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=mesmtp; bh=uaoDoSurzg 4kmchmPjcfb5hSjGriGbYkRhioHmeQE9c=; b=jnqL5zENub0AJe3ncXz8WnW1oH 15DFnHhoHpW+/X6RK04okxohaVkET5+QHTTzbpS5G1oQKUKuEGUk+3Su7GooIiom PMTkTFJdsHryOIUVfMRGFQWD2uPOjOC5d4dlyiXCuBH8MSVKWeBHOd6S7TKFaYGC oWIFE97FnOcMVRy8c= 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-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=uaoDoSurzg4kmchmPjcfb5hSjGriGbYkRhioHmeQE9c=; b=mBUu8hMY AnwPYK+ZyV5utDeU06yZxgYnZkS3b47I+IVwLbJlst8Zg7+eNjpT/Cnzuzge5QYV XTnCn8Fufjj6X+QzM6fnK+U6A9mHeAOSxdJtxM884lFET7zhEo0inp4Q8eNSORYv ryOCeHUh1rA8BHqSwZesh5+2u1KoTQdqjmcKuVHOpMx1JG8jUnRAhhZ2t3opg0RD 45x3FojjBw8VBQhmV3sK2ByXF9QTk4e6pk6nFRTTS0W6dQ8b9R9wdlVAd0RYOvEY ZFIXHMPrqfxzUdL+XCd0XESUkhjl+MaqY7j5m9ujc0IAESN6Wx+py2D5wnWL1yUV LqIO1v6AqYkBkQ== 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 03119102EB; Sun, 7 Oct 2018 05:32:51 -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: Sun, 7 Oct 2018 11:32:40 +0200 Message-Id: <20181007093244.20659-2-thomas@monjalon.net> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181007093244.20659-1-thomas@monjalon.net> References: <20180907222727.20521-1-thomas@monjalon.net> <20181007093244.20659-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v6 1/5] 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 Acked-by: Gaetan Rivet --- 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 2133a5b9b..4f4420ad3 100644 --- a/doc/guides/rel_notes/release_18_11.rst +++ b/doc/guides/rel_notes/release_18_11.rst @@ -118,6 +118,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, + were 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 88afece10..5cb5c624d 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -28,36 +28,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 Sun Oct 7 09:32:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 46202 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 BFFEB4C77; Sun, 7 Oct 2018 11:33:00 +0200 (CEST) Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id 489842C28 for ; Sun, 7 Oct 2018 11:32:55 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 05B6621EE9; Sun, 7 Oct 2018 05:32:54 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Sun, 07 Oct 2018 05:32:54 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=mesmtp; bh=rS4eiMx5vM aTHBI5zrH2eZF/dm5kBO2k92ZjCpZ+IPE=; b=ltRh46pDiUoTRS21N/PYTXAjvq vtEDSdExeru4SKpzeZOgiT5xv7LMB1Lje/vqBSZbv6P1Y0E8aIoS7a5RPqdePjJZ RnhShiU6XTZN1jVxlxHpot3HPaQJ0blBHBwl9Qup1SrqtuNe1D8/cUAu1Y3rpa+1 nfu0NwTfOgSKwQlmg= 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-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=rS4eiMx5vMaTHBI5zrH2eZF/dm5kBO2k92ZjCpZ+IPE=; b=oGjxJdJl 8PAZnjhPDJBrS2QhwZmBPxmuLXRKHTKt5n+SaFYEWKWEt8hiLx0KyHzsOghWM5cG vnLsrQHUyks0oMqTjaq5pKSBq80mSMunq5fBVMAv5nnztAzl5XYZvxJalFZSlTWf C13Isrh38QaVEERqEwE4Vtrtzkp9SAIWZapOY37bxhW3PthtUPyhFcfdF/0YoK5f bCp2sC+AGM1dI0oBJ0uYfopuU6DUbM+YclFjxorexHIYu1En9vDzXnuj05cqYLcd v1eBdzMoABCJ1yaMT9Xbi4ndqay+z+TsX6kR/+BS053Ja9TXgAEOLRNoE1+nONkg 0Y2HcyIfD1CL/w== 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 EB988102E8; Sun, 7 Oct 2018 05:32:52 -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: Sun, 7 Oct 2018 11:32:41 +0200 Message-Id: <20181007093244.20659-3-thomas@monjalon.net> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181007093244.20659-1-thomas@monjalon.net> References: <20180907222727.20521-1-thomas@monjalon.net> <20181007093244.20659-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v6 2/5] 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 Acked-by: Gaetan Rivet --- 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 4f4420ad3..d534bb71c 100644 --- a/doc/guides/rel_notes/release_18_11.rst +++ b/doc/guides/rel_notes/release_18_11.rst @@ -123,6 +123,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 ef3ad6d99..efca962f7 100644 --- a/drivers/bus/vdev/vdev.c +++ b/drivers/bus/vdev/vdev.c @@ -249,7 +249,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); @@ -260,9 +259,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); } } @@ -290,7 +288,6 @@ int rte_vdev_uninit(const char *name) { struct rte_vdev_device *dev; - struct rte_devargs *devargs; int ret; if (name == NULL) @@ -309,8 +306,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..e1d9e8ec7 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) != 0) { 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 5cb5c624d..69e9e32e9 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -263,7 +263,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); @@ -309,14 +309,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 == NULL || 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 Sun Oct 7 09:32:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 46203 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 51B6E4C8F; Sun, 7 Oct 2018 11:33:02 +0200 (CEST) Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id 6B8572C38 for ; Sun, 7 Oct 2018 11:32:55 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 1595221EF8; Sun, 7 Oct 2018 05:32:55 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Sun, 07 Oct 2018 05:32:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=mesmtp; bh=JY+o+Nh04w kl88TnVivQzFAqOQwuxcxgzdT3ApdVd6M=; b=XsErw1spZLJQW70CuA9qRBJFAH Cq2ZSHk/iIaSzQYUwrilKNFfOmJeDZwlRU515ufRbcR0zejrNvWsvt/2oKPueZ80 LLUh3AztEllle7/2/eA2ndpE4iZYOffgNYi5h7UV8VtI+lFqwr234sG6JosMkPOs OzL6/O5RIrjcAzMSI= 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-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=JY+o+Nh04wkl88TnVivQzFAqOQwuxcxgzdT3ApdVd6M=; b=iMf2/7XL RMzBTFAD97ELQFkufLVrAIMLHKifGa3CvmvROv21RPySYlK8u/YjEkE974DuTDZo QsYTzOSAVoSGTiWDucFSxqUEK+4DX82QTv/hYqSTw9d0BUe7p97M5nto2QUMjuIt NIflP8+N1dhUIzeQ4Dgoe1R2cj0ogMrSM50Ikqk6vXBkxQNcgJkErxWh3/pq/MjY zJvZq42nHYxWEkf7MDF76cPY8iQEMCHL4PsqYsTsyc+T0VSmIPgWJu0/ifoypOIp RKe1IYSRkBY2pv3PThO1MTK1FWPMjn7S6S6CFZ6yJ81vLqm8bWPoQHLb1KfIEAEJ 49lyDbbJU3bg3A== 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 D35CE102EB; Sun, 7 Oct 2018 05:32:53 -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: Sun, 7 Oct 2018 11:32:42 +0200 Message-Id: <20181007093244.20659-4-thomas@monjalon.net> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181007093244.20659-1-thomas@monjalon.net> References: <20180907222727.20521-1-thomas@monjalon.net> <20181007093244.20659-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v6 3/5] eal: add bus pointer in device structure 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" When a device is added with a devargs (hotplug or whitelist), the bus pointer can be retrieved via its devargs. But there is no such devargs.bus in case of standard scan. A pointer to the rte_bus handle is added to rte_device. When a device is allocated (during a scan), the pointer to its bus is assigned. It will make possible to remove a rte_device, using the function pointer from its bus. The function rte_bus_find_by_device() becomes useless, and may be removed later. Signed-off-by: Thomas Monjalon Acked-by: Gaetan Rivet --- doc/guides/rel_notes/release_18_11.rst | 15 ++++++++++----- drivers/bus/dpaa/Makefile | 2 +- drivers/bus/dpaa/dpaa_bus.c | 2 ++ drivers/bus/dpaa/meson.build | 2 ++ drivers/bus/fslmc/Makefile | 2 +- drivers/bus/fslmc/fslmc_bus.c | 2 ++ drivers/bus/fslmc/meson.build | 2 ++ drivers/bus/ifpga/Makefile | 2 +- drivers/bus/ifpga/ifpga_bus.c | 1 + drivers/bus/ifpga/meson.build | 2 ++ drivers/bus/pci/Makefile | 2 +- drivers/bus/pci/bsd/pci.c | 2 ++ drivers/bus/pci/linux/pci.c | 1 + drivers/bus/pci/meson.build | 2 ++ drivers/bus/pci/private.h | 2 ++ drivers/bus/vdev/Makefile | 2 +- drivers/bus/vdev/meson.build | 2 ++ drivers/bus/vdev/vdev.c | 1 + drivers/bus/vmbus/Makefile | 2 +- drivers/bus/vmbus/linux/vmbus_bus.c | 1 + drivers/bus/vmbus/meson.build | 2 ++ drivers/bus/vmbus/private.h | 3 +++ lib/librte_eal/common/include/rte_dev.h | 1 + 23 files changed, 44 insertions(+), 11 deletions(-) diff --git a/doc/guides/rel_notes/release_18_11.rst b/doc/guides/rel_notes/release_18_11.rst index d534bb71c..c87522f27 100644 --- a/doc/guides/rel_notes/release_18_11.rst +++ b/doc/guides/rel_notes/release_18_11.rst @@ -164,6 +164,10 @@ ABI Changes ``rte_config`` structure on account of improving DPDK usability when using either ``--legacy-mem`` or ``--single-file-segments`` flags. +* eal: The structure ``rte_device`` got a new field to reference a ``rte_bus``. + It is changing the size of the ``struct rte_device`` and the inherited + device structures of all buses. + Removed Items ------------- @@ -199,11 +203,12 @@ The libraries prepended with a plus sign were incremented in this version. librte_bbdev.so.1 librte_bitratestats.so.2 librte_bpf.so.1 - librte_bus_dpaa.so.1 - librte_bus_fslmc.so.1 - librte_bus_pci.so.1 - librte_bus_vdev.so.1 - + librte_bus_vmbus.so.1 + + librte_bus_dpaa.so.2 + + librte_bus_fslmc.so.2 + + librte_bus_ifpga.so.2 + + librte_bus_pci.so.2 + + librte_bus_vdev.so.2 + + librte_bus_vmbus.so.2 librte_cfgfile.so.2 librte_cmdline.so.2 librte_common_octeontx.so.1 diff --git a/drivers/bus/dpaa/Makefile b/drivers/bus/dpaa/Makefile index bffaa9d92..9337b5f92 100644 --- a/drivers/bus/dpaa/Makefile +++ b/drivers/bus/dpaa/Makefile @@ -24,7 +24,7 @@ CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/include # versioning export map EXPORT_MAP := rte_bus_dpaa_version.map -LIBABIVER := 1 +LIBABIVER := 2 # all source are stored in SRCS-y # diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c index 49cd04dbb..138e0f98d 100644 --- a/drivers/bus/dpaa/dpaa_bus.c +++ b/drivers/bus/dpaa/dpaa_bus.c @@ -165,6 +165,8 @@ dpaa_create_device_list(void) goto cleanup; } + dev->device.bus = &rte_dpaa_bus.bus; + cfg = &dpaa_netcfg->port_cfg[i]; fman_intf = cfg->fman_if; diff --git a/drivers/bus/dpaa/meson.build b/drivers/bus/dpaa/meson.build index d10b62c03..5e7705571 100644 --- a/drivers/bus/dpaa/meson.build +++ b/drivers/bus/dpaa/meson.build @@ -1,6 +1,8 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018 NXP +version = 2 + if host_machine.system() != 'linux' build = false endif diff --git a/drivers/bus/fslmc/Makefile b/drivers/bus/fslmc/Makefile index 515d0f534..e95551980 100644 --- a/drivers/bus/fslmc/Makefile +++ b/drivers/bus/fslmc/Makefile @@ -24,7 +24,7 @@ LDLIBS += -lrte_ethdev EXPORT_MAP := rte_bus_fslmc_version.map # library version -LIBABIVER := 1 +LIBABIVER := 2 SRCS-$(CONFIG_RTE_LIBRTE_FSLMC_BUS) += \ qbman/qbman_portal.c \ diff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c index bfe81e236..960f55071 100644 --- a/drivers/bus/fslmc/fslmc_bus.c +++ b/drivers/bus/fslmc/fslmc_bus.c @@ -161,6 +161,8 @@ scan_one_fslmc_device(char *dev_name) return -ENOMEM; } + dev->device.bus = &rte_fslmc_bus.bus; + /* Parse the device name and ID */ t_ptr = strtok(dup_dev_name, "."); if (!t_ptr) { diff --git a/drivers/bus/fslmc/meson.build b/drivers/bus/fslmc/meson.build index 22a56a6fc..54ca92d0c 100644 --- a/drivers/bus/fslmc/meson.build +++ b/drivers/bus/fslmc/meson.build @@ -1,6 +1,8 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright 2018 NXP +version = 2 + if host_machine.system() != 'linux' build = false endif diff --git a/drivers/bus/ifpga/Makefile b/drivers/bus/ifpga/Makefile index 3ff3bdb81..514452b39 100644 --- a/drivers/bus/ifpga/Makefile +++ b/drivers/bus/ifpga/Makefile @@ -19,7 +19,7 @@ LDLIBS += -lrte_kvargs EXPORT_MAP := rte_bus_ifpga_version.map # library version -LIBABIVER := 1 +LIBABIVER := 2 SRCS-$(CONFIG_RTE_LIBRTE_IFPGA_BUS) += ifpga_bus.c SRCS-$(CONFIG_RTE_LIBRTE_IFPGA_BUS) += ifpga_common.c diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c index 3ef035b7e..80663328a 100644 --- a/drivers/bus/ifpga/ifpga_bus.c +++ b/drivers/bus/ifpga/ifpga_bus.c @@ -142,6 +142,7 @@ ifpga_scan_one(struct rte_rawdev *rawdev, if (!afu_dev) goto end; + afu_dev->device.bus = &rte_ifpga_bus; afu_dev->device.devargs = devargs; afu_dev->device.numa_node = SOCKET_ID_ANY; afu_dev->device.name = devargs->name; diff --git a/drivers/bus/ifpga/meson.build b/drivers/bus/ifpga/meson.build index c9b08c862..0b5c38d54 100644 --- a/drivers/bus/ifpga/meson.build +++ b/drivers/bus/ifpga/meson.build @@ -1,6 +1,8 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2010-2018 Intel Corporation +version = 2 + deps += ['pci', 'kvargs', 'rawdev'] install_headers('rte_bus_ifpga.h') sources = files('ifpga_common.c', 'ifpga_bus.c') diff --git a/drivers/bus/pci/Makefile b/drivers/bus/pci/Makefile index 4de953f8f..f33e0120f 100644 --- a/drivers/bus/pci/Makefile +++ b/drivers/bus/pci/Makefile @@ -4,7 +4,7 @@ include $(RTE_SDK)/mk/rte.vars.mk LIB = librte_bus_pci.a -LIBABIVER := 1 +LIBABIVER := 2 EXPORT_MAP := rte_bus_pci_version.map CFLAGS := -I$(SRCDIR) $(CFLAGS) diff --git a/drivers/bus/pci/bsd/pci.c b/drivers/bus/pci/bsd/pci.c index 655b34b7e..40641cad4 100644 --- a/drivers/bus/pci/bsd/pci.c +++ b/drivers/bus/pci/bsd/pci.c @@ -223,6 +223,8 @@ pci_scan_one(int dev_pci_fd, struct pci_conf *conf) } memset(dev, 0, sizeof(*dev)); + dev->device.bus = &rte_pci_bus.bus; + dev->addr.domain = conf->pc_sel.pc_domain; dev->addr.bus = conf->pc_sel.pc_bus; dev->addr.devid = conf->pc_sel.pc_dev; diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c index 04648ac93..e31bbb370 100644 --- a/drivers/bus/pci/linux/pci.c +++ b/drivers/bus/pci/linux/pci.c @@ -228,6 +228,7 @@ pci_scan_one(const char *dirname, const struct rte_pci_addr *addr) return -1; memset(dev, 0, sizeof(*dev)); + dev->device.bus = &rte_pci_bus.bus; dev->addr = *addr; /* get vendor id */ diff --git a/drivers/bus/pci/meson.build b/drivers/bus/pci/meson.build index 23d6a5fec..ef9492bb8 100644 --- a/drivers/bus/pci/meson.build +++ b/drivers/bus/pci/meson.build @@ -1,6 +1,8 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2017 Intel Corporation +version = 2 + deps += ['pci'] install_headers('rte_bus_pci.h') sources = files('pci_common.c', diff --git a/drivers/bus/pci/private.h b/drivers/bus/pci/private.h index 0e689fa74..04bffa6e7 100644 --- a/drivers/bus/pci/private.h +++ b/drivers/bus/pci/private.h @@ -15,6 +15,8 @@ extern struct rte_pci_bus rte_pci_bus; struct rte_pci_driver; struct rte_pci_device; +extern struct rte_pci_bus rte_pci_bus; + /** * Probe the PCI bus * diff --git a/drivers/bus/vdev/Makefile b/drivers/bus/vdev/Makefile index 1f9cd7ebe..803b8ea7b 100644 --- a/drivers/bus/vdev/Makefile +++ b/drivers/bus/vdev/Makefile @@ -16,7 +16,7 @@ CFLAGS += -DALLOW_EXPERIMENTAL_API EXPORT_MAP := rte_bus_vdev_version.map # library version -LIBABIVER := 1 +LIBABIVER := 2 SRCS-y += vdev.c SRCS-y += vdev_params.c diff --git a/drivers/bus/vdev/meson.build b/drivers/bus/vdev/meson.build index 12605e5c7..803785f10 100644 --- a/drivers/bus/vdev/meson.build +++ b/drivers/bus/vdev/meson.build @@ -1,6 +1,8 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2017 Intel Corporation +version = 2 + sources = files('vdev.c', 'vdev_params.c') install_headers('rte_bus_vdev.h') diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c index efca962f7..0142fb2c8 100644 --- a/drivers/bus/vdev/vdev.c +++ b/drivers/bus/vdev/vdev.c @@ -456,6 +456,7 @@ vdev_scan(void) continue; } + dev->device.bus = &rte_vdev_bus; dev->device.devargs = devargs; dev->device.numa_node = SOCKET_ID_ANY; dev->device.name = devargs->name; diff --git a/drivers/bus/vmbus/Makefile b/drivers/bus/vmbus/Makefile index deee9dd10..e54c557c6 100644 --- a/drivers/bus/vmbus/Makefile +++ b/drivers/bus/vmbus/Makefile @@ -3,7 +3,7 @@ include $(RTE_SDK)/mk/rte.vars.mk LIB = librte_bus_vmbus.a -LIBABIVER := 1 +LIBABIVER := 2 EXPORT_MAP := rte_bus_vmbus_version.map CFLAGS += -I$(SRCDIR) diff --git a/drivers/bus/vmbus/linux/vmbus_bus.c b/drivers/bus/vmbus/linux/vmbus_bus.c index 527a6a39f..a4755a387 100644 --- a/drivers/bus/vmbus/linux/vmbus_bus.c +++ b/drivers/bus/vmbus/linux/vmbus_bus.c @@ -229,6 +229,7 @@ vmbus_scan_one(const char *name) if (dev == NULL) return -1; + dev->device.bus = &rte_vmbus_bus.bus; dev->device.name = strdup(name); if (!dev->device.name) goto error; diff --git a/drivers/bus/vmbus/meson.build b/drivers/bus/vmbus/meson.build index 18daabecc..0e4d058ee 100644 --- a/drivers/bus/vmbus/meson.build +++ b/drivers/bus/vmbus/meson.build @@ -1,5 +1,7 @@ # SPDX-License-Identifier: BSD-3-Clause +version = 2 + allow_experimental_apis = true install_headers('rte_bus_vmbus.h','rte_vmbus_reg.h') diff --git a/drivers/bus/vmbus/private.h b/drivers/bus/vmbus/private.h index f2022a68c..211127dd8 100644 --- a/drivers/bus/vmbus/private.h +++ b/drivers/bus/vmbus/private.h @@ -10,11 +10,14 @@ #include #include #include +#include #ifndef PAGE_SIZE #define PAGE_SIZE 4096 #endif +extern struct rte_vmbus_bus rte_vmbus_bus; + extern int vmbus_logtype_bus; #define VMBUS_LOG(level, fmt, args...) \ rte_log(RTE_LOG_ ## level, vmbus_logtype_bus, "%s(): " fmt "\n", \ diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h index b80a80598..d82cba847 100644 --- a/lib/librte_eal/common/include/rte_dev.h +++ b/lib/librte_eal/common/include/rte_dev.h @@ -157,6 +157,7 @@ struct rte_device { TAILQ_ENTRY(rte_device) next; /**< Next device */ const char *name; /**< Device name */ const struct rte_driver *driver;/**< Associated driver */ + const struct rte_bus *bus; /**< Bus handle assigned on scan */ int numa_node; /**< NUMA node connection */ struct rte_devargs *devargs; /**< Device user arguments */ }; From patchwork Sun Oct 7 09:32:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 46204 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 A11D94C95; Sun, 7 Oct 2018 11:33:03 +0200 (CEST) Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id 34AC42C38 for ; Sun, 7 Oct 2018 11:32:56 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id CDCC321F00; Sun, 7 Oct 2018 05:32:55 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Sun, 07 Oct 2018 05:32:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=mesmtp; bh=tC/ZZEBFAk 4P92cF0OzwkfYkNA8jG6tEB++ZvPDE7dg=; b=Wit6l3S01Zn38VAdMcCKgUUQZS jVHnYjkjRaKuEupnDFS1drfoBxFHSds2QQTyHwQrxq/oAqVw/cDkPJNz4sdupTTb cvLLh9/QkV43do2rcrsQ6RJYOrsfepOSi+/9FIvkADB1sLDekRlrO1wgdlZnFAhx UHuHflFQIwx0Ozz3U= 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-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=tC/ZZEBFAk4P92cF0OzwkfYkNA8jG6tEB++ZvPDE7dg=; b=rLYqgRZA ViR3UwSgNYFW5XSIsYO99OGIP5LADGh1cFBQnG5UVv4n06fsPW9chgOOXbe6sCgO XwK8Is8DonCb7b+yxy9HIP73RwgNvvUezQoT3bv6mXLIInfIef36bOKekQnXcMTu YmmgefHlaB8ld/U/PC3iAxbQkL1xfNnlfnDIJ2LUU2a1aQErVb0qO18BHygpz/nc HlRdOvbwOHObz5lGxe0uAb4TQo6PFDadiREL4qECcs+eAzuaLuHtkjw0B4MYneMw BhsL9ul786mY2/t8XaKmXjc7H/OmwdG3pQnMcydecMsBmcOEC07nR7QkQqyR/7sl rRTEhDYFlLNPIA== 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 D5441102E8; Sun, 7 Oct 2018 05:32:54 -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: Sun, 7 Oct 2018 11:32:43 +0200 Message-Id: <20181007093244.20659-5-thomas@monjalon.net> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181007093244.20659-1-thomas@monjalon.net> References: <20180907222727.20521-1-thomas@monjalon.net> <20181007093244.20659-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v6 4/5] 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 Acked-by: Gaetan Rivet --- 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 e1d9e8ec7..ce6d145fb 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 d82cba847..d6c5d48a9 100644 --- a/lib/librte_eal/common/include/rte_dev.h +++ b/lib/librte_eal/common/include/rte_dev.h @@ -190,9 +190,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 @@ -205,13 +202,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 @@ -221,8 +215,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 Sun Oct 7 09:32:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 46205 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 39F344CAB; Sun, 7 Oct 2018 11:33:05 +0200 (CEST) Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id 47DBD378E for ; Sun, 7 Oct 2018 11:32:57 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id DB52621EE9; Sun, 7 Oct 2018 05:32:56 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute1.internal (MEProxy); Sun, 07 Oct 2018 05:32:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=mesmtp; bh=ofaPWdMvGL FxGWKUIW0aeE0KS6PHY11T9nwkO8DieBw=; b=sgirCFrC3UFpTOmmY768d5i4o+ dvlOJnkX5mIGMYEXeK3qVAlJMJJd6hs7SasMVuuoHgpv8igtFYhAjyVHkbMBEDPO GVFS8QBwwtLZvmEO9O/Wwd/h+nFRvpIqhasvZDDQA/K1iOBqLA7g27ZPdeFBqvfq euy7uWmAC0l8oTUCs= 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-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; bh=ofaPWdMvGLFxGWKUIW0aeE0KS6PHY11T9nwkO8DieBw=; b=p+OQbU67 oHkFNBpdmZH7xd6k6OgJfKeSSWcHgE7bySr/HpHbNGCF9qa6gPFQE7ahLwsyTxRH MzEI1PRmDo5SfbPR5JJU4q4xLPZv0KWSMFIr88RyP5uj7bof5JPpXB2TUSC8Ft/i jf9qUXkGeH4U+ZuobKYwzt3oD9phFG1zfjT2wK0KGtEQLI8kUqDhvzBgoDg9QgxT B2M2nSViJZzHzPqKX29kGrbkCFBHc/ngsibDpgQhq0f7ACWE29pNUsCANPQB1ytT JOW+ZG3oOTagkHFmjzBPj+gPGHTxK0yPq1KVq0+1TQl5+7xPDSEIK49T2fzoPvZ7 gB8opezOJR6dvQ== 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 C4EF2102EB; Sun, 7 Oct 2018 05:32:55 -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: Sun, 7 Oct 2018 11:32:44 +0200 Message-Id: <20181007093244.20659-6-thomas@monjalon.net> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20181007093244.20659-1-thomas@monjalon.net> References: <20180907222727.20521-1-thomas@monjalon.net> <20181007093244.20659-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v6 5/5] 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 Acked-by: Gaetan Rivet --- drivers/net/failsafe/failsafe_eal.c | 3 +- drivers/net/failsafe/failsafe_ether.c | 3 +- lib/librte_eal/common/eal_common_dev.c | 81 ++++++++++++++++--------- lib/librte_eal/common/include/rte_dev.h | 30 ++++++++- lib/librte_eal/rte_eal_version.map | 2 + 5 files changed, 84 insertions(+), 35 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 ce6d145fb..7663eaa3f 100644 --- a/lib/librte_eal/common/eal_common_dev.c +++ b/lib/librte_eal/common/eal_common_dev.c @@ -129,46 +129,62 @@ 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 length; - bus = rte_bus_find_by_name(busname); - if (bus == NULL) { - RTE_LOG(ERR, EAL, "Cannot find bus (%s)\n", busname); - return -ENOENT; - } + length = snprintf(NULL, 0, "%s:%s,%s", busname, devname, drvargs); + if (length < 0) + return -EINVAL; + devargs = malloc(length + 1); + if (devargs == NULL) + return -ENOMEM; + ret = snprintf(devargs, length + 1, "%s:%s,%s", busname, devname, drvargs); + if (ret < 0) + return -EINVAL; - 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 +194,7 @@ rte_eal_hotplug_add(const char *busname, const char *devname, return -EEXIST; } - ret = bus->plug(dev); + ret = dev->bus->plug(dev); if (ret) { RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", dev->name); @@ -197,9 +213,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,24 +222,32 @@ 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) +{ + int ret; + if (dev->driver == NULL) { RTE_LOG(ERR, EAL, "Device is already unplugged\n"); return -ENOENT; } - ret = bus->unplug(dev); + if (dev->bus->unplug == NULL) { + RTE_LOG(ERR, EAL, "Function unplug not supported by bus (%s)\n", + dev->bus->name); + return -ENOTSUP; + } + + ret = dev->bus->unplug(dev); if (ret) RTE_LOG(ERR, EAL, "Driver cannot detach the device (%s)\n", dev->name); diff --git a/lib/librte_eal/common/include/rte_dev.h b/lib/librte_eal/common/include/rte_dev.h index d6c5d48a9..036180ff3 100644 --- a/lib/librte_eal/common/include/rte_dev.h +++ b/lib/librte_eal/common/include/rte_dev.h @@ -197,13 +197,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. @@ -217,6 +230,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;