From patchwork Mon Apr 23 23:54:52 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: 38763 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 17F8F2BE2; Tue, 24 Apr 2018 01:55:49 +0200 (CEST) Received: from mail-wr0-f194.google.com (mail-wr0-f194.google.com [209.85.128.194]) by dpdk.org (Postfix) with ESMTP id E6A371066 for ; Tue, 24 Apr 2018 01:55:26 +0200 (CEST) Received: by mail-wr0-f194.google.com with SMTP id w3-v6so45729401wrg.2 for ; Mon, 23 Apr 2018 16:55:26 -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 :in-reply-to:references; bh=axBTwPnArT9RXMDzZ9JFIjcLJ1vYJPgnXCCl/uCFcSQ=; b=WKFXyRrKwE4gnk3E2b0WHu2CjoqK+u5ZjjanHPq9rW14w1DMOh6QFdPGcRFLRuHkzt 3a0sac15C/tqLE9NpfjZhQsoy8IAv9cbfSfoQFGdWRRqXl0uoZfBepXh2EBB0YG+cISk ttvTRGVwosXScLnbSpJRmQfUGaPnoV6cL92C5GrD62USOW+k9G3dlYfK6mQeLBx3K/1p i2ajIQysMI0+Ag8ikiVv/duVfTSU73lU5hrdKZ7Q1hpaFTt3gP5BavhDAh1gBfGaxCIx djz9jw85ixxW1+SNy87tzYLXvvhKTcHoFz/wOd28gYK3aaMSCNfWQuGunrnqaOcMhJXa MLQQ== 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:in-reply-to:references; bh=axBTwPnArT9RXMDzZ9JFIjcLJ1vYJPgnXCCl/uCFcSQ=; b=f1GjYuciTN8lVX4MRp1uPFistuVGDdFriSdD5Vh1YI7xDTB8Wdbx81txYBM4D5lyNs X8Z/KyTEB4D2SNjQbETNSEPz3EdhTU0t5Eoi0yNr7F1/2vOO9oBgYJm1UN1NOpSvjh59 MxgbA7XmQrD9HoTrbXNLdvUowQZXyX/ammVPRcC8lB+DQEA7JSSeyhbSTu3peOafh6yK agnHDO//ntgxhV/843saO9zAsBtmS3XeADPh+Dcfj2z8aNWjQJMGeUV0L+5PBu4b+bdb gTM7KqfNcMqfU92owfHLFMYFFAM3/2pfaMlDTBG4QsWeKv4ZFfuf4RlrPScG//BXxTb8 QG/Q== X-Gm-Message-State: ALQs6tCx3ZwCsyPAi/vK6NhbtPzmqvhCa48Jnm4seu2Yq9KZECTJTZAF +uoW6kHFj8jMqNXa3UTI0ktHkFxX X-Google-Smtp-Source: AIpwx48dVU858rF3Ol7LpEIqiS7jzYcG/S7NT6+CS6ajq8quB4vr9HetMwIyxldMwd5ycHBRswpYcg== X-Received: by 2002:adf:b90a:: with SMTP id k10-v6mr19634337wrf.283.1524527726124; Mon, 23 Apr 2018 16:55:26 -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 55-v6sm28922279wrw.52.2018.04.23.16.55.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 23 Apr 2018 16:55:25 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Tue, 24 Apr 2018 01:54:52 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: In-Reply-To: References: Subject: [dpdk-dev] [PATCH v5 10/10] devargs: rename legacy API 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 previous symbols were deprecated for two releases. They are now marked as such and cannot be used anymore. They are replaced by ones respecting the new namespace that are marked experimental. As a result, eth_dev attach and detach are slightly reworked to follow the changes. Signed-off-by: Gaetan Rivet Acked-by: Thomas Monjalon --- app/test-pmd/cmdline.c | 2 +- doc/guides/rel_notes/deprecation.rst | 4 --- drivers/net/vdev_netvsc/vdev_netvsc.c | 2 +- examples/bond/Makefile | 1 + examples/bond/main.c | 2 +- lib/librte_eal/common/eal_common_devargs.c | 9 ++++-- lib/librte_eal/common/eal_common_options.c | 2 +- lib/librte_eal/common/include/rte_devargs.h | 46 +++++++++++++++++++++++++++++ lib/librte_eal/rte_eal_version.map | 3 ++ lib/librte_ether/rte_ethdev.c | 44 +++++++++++++-------------- test/test/commands.c | 2 +- 11 files changed, 81 insertions(+), 36 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 0b442c3a6..18470c6fc 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -8754,7 +8754,7 @@ static void cmd_dump_parsed(void *parsed_result, else if (!strcmp(res->dump, "dump_mempool")) rte_mempool_list_dump(stdout); else if (!strcmp(res->dump, "dump_devargs")) - rte_eal_devargs_dump(stdout); + rte_devargs_dump(stdout); else if (!strcmp(res->dump, "dump_log_types")) rte_log_dump(stdout); } diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst index 2165fe4c6..50959025e 100644 --- a/doc/guides/rel_notes/deprecation.rst +++ b/doc/guides/rel_notes/deprecation.rst @@ -18,12 +18,8 @@ Deprecation Notices - The enum ``rte_devtype`` was used to identify a bus and will disappear. - Functions previously deprecated will change or disappear: - + ``rte_eal_devargs_add`` + ``rte_eal_devargs_type_count`` - + ``rte_eal_parse_devargs_str``, replaced by ``rte_eal_devargs_parse`` + ``rte_eal_devargs_parse`` will change its format and use. - + all ``rte_devargs`` related functions will be renamed, changing the - ``rte_eal_devargs_`` prefix to ``rte_devargs_``. * pci: Several exposed functions are misnamed. The following functions are deprecated starting from v17.11 and are replaced: diff --git a/drivers/net/vdev_netvsc/vdev_netvsc.c b/drivers/net/vdev_netvsc/vdev_netvsc.c index 8b85711d4..f902dbe27 100644 --- a/drivers/net/vdev_netvsc/vdev_netvsc.c +++ b/drivers/net/vdev_netvsc/vdev_netvsc.c @@ -803,7 +803,7 @@ vdev_netvsc_scan_callback(__rte_unused void *arg) vdev_netvsc_cmp_rte_device, VDEV_NETVSC_DRIVER_NAME); if (dev) return; - if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, VDEV_NETVSC_DRIVER_NAME)) + if (rte_devargs_add(RTE_DEVTYPE_VIRTUAL, VDEV_NETVSC_DRIVER_NAME)) DRV_LOG(ERR, "unable to add netvsc devargs."); } diff --git a/examples/bond/Makefile b/examples/bond/Makefile index e7afce358..6b0324a42 100644 --- a/examples/bond/Makefile +++ b/examples/bond/Makefile @@ -62,6 +62,7 @@ endif CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += -O3 +CFLAGS += -DALLOW_EXPERIMENTAL_API ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),y) LDLIBS += -lrte_pmd_bond diff --git a/examples/bond/main.c b/examples/bond/main.c index d8edc642b..65e0edd25 100644 --- a/examples/bond/main.c +++ b/examples/bond/main.c @@ -742,7 +742,7 @@ main(int argc, char *argv[]) /* init EAL */ ret = rte_eal_init(argc, argv); - rte_eal_devargs_dump(stdout); + rte_devargs_dump(stdout); if (ret < 0) rte_exit(EXIT_FAILURE, "Error with EAL initialization\n"); argc -= ret; diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c index 24d0f6f44..b0434158b 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -137,8 +137,9 @@ rte_devargs_insert(struct rte_devargs *da) } /* store a whitelist parameter for later parsing */ +__rte_experimental int -rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str) +rte_devargs_add(enum rte_devtype devtype, const char *devargs_str) { struct rte_devargs *devargs = NULL; struct rte_bus *bus = NULL; @@ -192,8 +193,9 @@ rte_devargs_remove(const char *busname, const char *devname) } /* count the number of devices of a specified type */ +__rte_experimental unsigned int -rte_eal_devargs_type_count(enum rte_devtype devtype) +rte_devargs_type_count(enum rte_devtype devtype) { struct rte_devargs *devargs; unsigned int count = 0; @@ -207,8 +209,9 @@ rte_eal_devargs_type_count(enum rte_devtype devtype) } /* dump the user devices on the console */ +__rte_experimental void -rte_eal_devargs_dump(FILE *f) +rte_devargs_dump(FILE *f) { struct rte_devargs *devargs; diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 40c5b26f3..e1a1a3c56 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -153,7 +153,7 @@ eal_option_device_parse(void) TAILQ_FOREACH_SAFE(devopt, &devopt_list, next, tmp) { if (ret == 0) { - ret = rte_eal_devargs_add(devopt->type, devopt->arg); + ret = rte_devargs_add(devopt->type, devopt->arg); if (ret) RTE_LOG(ERR, EAL, "Unable to parse device '%s'\n", devopt->arg); diff --git a/lib/librte_eal/common/include/rte_devargs.h b/lib/librte_eal/common/include/rte_devargs.h index 0806f2319..58fbd90a2 100644 --- a/lib/librte_eal/common/include/rte_devargs.h +++ b/lib/librte_eal/common/include/rte_devargs.h @@ -60,6 +60,7 @@ struct rte_devargs { }; /** + * @deprecated * Parse a devargs string. * * For PCI devices, the format of arguments string is "PCI_ADDR" or @@ -84,6 +85,7 @@ struct rte_devargs { * - 0 on success * - A negative value on error */ +__rte_deprecated int rte_eal_parse_devargs_str(const char *devargs_str, char **drvname, char **drvargs); @@ -153,6 +155,24 @@ rte_devargs_insert(struct rte_devargs *da); * - 0 on success * - A negative value on error */ +__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); /** @@ -184,6 +204,21 @@ int rte_devargs_remove(const char *busname, * @return * The number of devices. */ +__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); @@ -193,6 +228,17 @@ rte_eal_devargs_type_count(enum rte_devtype devtype); * @param f * A pointer to a file for output */ +__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); /** diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map index 67f8dd4fa..21346c703 100644 --- a/lib/librte_eal/rte_eal_version.map +++ b/lib/librte_eal/rte_eal_version.map @@ -216,10 +216,13 @@ EXPERIMENTAL { rte_dev_event_callback_unregister; rte_dev_event_monitor_start; rte_dev_event_monitor_stop; + rte_devargs_add; + rte_devargs_dump; rte_devargs_insert; rte_devargs_next; rte_devargs_parse; rte_devargs_remove; + rte_devargs_type_count; rte_eal_cleanup; rte_eal_hotplug_add; rte_eal_hotplug_remove; diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index 7821a8883..600866de7 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -618,27 +618,26 @@ eth_err(uint16_t port_id, int ret) int rte_eth_dev_attach(const char *devargs, uint16_t *port_id) { - int ret = -1; int current = rte_eth_dev_count_total(); - char *name = NULL; - char *args = NULL; + struct rte_devargs da = {0}; + int ret = -1; if ((devargs == NULL) || (port_id == NULL)) { ret = -EINVAL; goto err; } - /* parse devargs, then retrieve device name and args */ - if (rte_eal_parse_devargs_str(devargs, &name, &args)) + /* parse devargs */ + if (rte_devargs_parse(&da, "%s", devargs)) goto err; - ret = rte_eal_dev_attach(name, args); + ret = rte_eal_hotplug_add(da.bus->name, da.name, da.args); if (ret < 0) goto err; /* no point looking at the port count if no port exists */ if (!rte_eth_dev_count_total()) { - ethdev_log(ERR, "No port found for device (%s)", name); + ethdev_log(ERR, "No port found for device (%s)", da.name); ret = -1; goto err; } @@ -656,45 +655,42 @@ rte_eth_dev_attach(const char *devargs, uint16_t *port_id) ret = 0; err: - free(name); - free(args); + free(da.args); return ret; } /* detach the device, then store the name of the device */ int -rte_eth_dev_detach(uint16_t port_id, char *name) +rte_eth_dev_detach(uint16_t port_id, char *name __rte_unused) { + struct rte_device *dev; + struct rte_bus *bus; uint32_t dev_flags; int ret = -1; RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL); - if (name == NULL) { - ret = -EINVAL; - goto err; - } - dev_flags = rte_eth_devices[port_id].data->dev_flags; if (dev_flags & RTE_ETH_DEV_BONDED_SLAVE) { ethdev_log(ERR, "Port %" PRIu16 " is bonded, cannot detach", port_id); - ret = -ENOTSUP; - goto err; + return -ENOTSUP; } - snprintf(name, sizeof(rte_eth_devices[port_id].data->name), - "%s", rte_eth_devices[port_id].data->name); + dev = rte_eth_devices[port_id].device; + if (dev == NULL) + return -EINVAL; - ret = rte_eal_dev_detach(rte_eth_devices[port_id].device); + bus = rte_bus_find_by_device(dev); + if (bus == NULL) + return -ENOENT; + + ret = rte_eal_hotplug_remove(bus->name, dev->name); if (ret < 0) - goto err; + return ret; rte_eth_dev_release_port(&rte_eth_devices[port_id]); return 0; - -err: - return ret; } static int diff --git a/test/test/commands.c b/test/test/commands.c index 6bfdc0272..94fbc310e 100644 --- a/test/test/commands.c +++ b/test/test/commands.c @@ -132,7 +132,7 @@ static void cmd_dump_parsed(void *parsed_result, else if (!strcmp(res->dump, "dump_mempool")) rte_mempool_list_dump(stdout); else if (!strcmp(res->dump, "dump_devargs")) - rte_eal_devargs_dump(stdout); + rte_devargs_dump(stdout); else if (!strcmp(res->dump, "dump_log_types")) rte_log_dump(stdout); else if (!strcmp(res->dump, "dump_malloc_stats"))