From: "Gaëtan Rivet" <grive@u256.net>
To: Maxime Coquelin <maxime.coquelin@redhat.com>
Cc: dev@dpdk.org, david.marchand@redhat.com, wenzhuo.lu@intel.com,
beilei.xing@intel.com, bernard.iremonger@intel.com
Subject: Re: [dpdk-dev] [PATCH v20.11 2/2] eal: improve device probing API
Date: Wed, 10 Jun 2020 14:06:41 +0200 [thread overview]
Message-ID: <20200610120641.xtfonyyjahx5wiqo@u256.net> (raw)
In-Reply-To: <20200608155330.163874-3-maxime.coquelin@redhat.com>
Hello Maxime,
On 08/06/20 17:53 +0200, Maxime Coquelin wrote:
> This patch makes rte_dev_probe() to return the
> rte_device pointer on success and NULL on error
> instead of returning 0 on success and negative
> value on error.
>
> The goal is to avoid that the calling application
> iterates the devices list afterwards to retrieve
> the pointer. Retrieving the pointer is required
> for calling rte_dev_remove() later.
>
I agree with the idea. I recall starting to do it on the legacy functions
(rte_eal_hotplug_*), but it was scrapped for API compat.
> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> ---
> app/test-pmd/testpmd.c | 2 +-
> drivers/net/failsafe/failsafe.c | 5 +++--
> lib/librte_eal/common/eal_common_dev.c | 18 ++++++++++--------
> lib/librte_eal/include/rte_dev.h | 4 ++--
> 4 files changed, 16 insertions(+), 13 deletions(-)
>
> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
> index 4989d22ca8..f777f449a8 100644
> --- a/app/test-pmd/testpmd.c
> +++ b/app/test-pmd/testpmd.c
> @@ -2764,7 +2764,7 @@ attach_port(char *identifier)
> return;
> }
>
> - if (rte_dev_probe(identifier) < 0) {
> + if (rte_dev_probe(identifier) == NULL) {
> TESTPMD_LOG(ERR, "Failed to attach port %s\n", identifier);
> return;
> }
> diff --git a/drivers/net/failsafe/failsafe.c b/drivers/net/failsafe/failsafe.c
> index 72362f35de..e32effdef2 100644
> --- a/drivers/net/failsafe/failsafe.c
> +++ b/drivers/net/failsafe/failsafe.c
> @@ -341,6 +341,7 @@ rte_pmd_failsafe_probe(struct rte_vdev_device *vdev)
> struct rte_eth_dev *eth_dev;
> struct sub_device *sdev;
> struct rte_devargs devargs;
> + struct rte_device *dev;
> uint8_t i;
> int ret;
>
> @@ -378,8 +379,8 @@ rte_pmd_failsafe_probe(struct rte_vdev_device *vdev)
> continue;
> }
> if (!devargs_already_listed(&devargs)) {
> - ret = rte_dev_probe(devargs.name);
> - if (ret < 0) {
> + dev = rte_dev_probe(devargs.name);
> + if (dev == NULL) {
> ERROR("Failed to probe devargs %s",
> devargs.name);
> continue;
> diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c
> index 9e4f09d83e..72baae2e48 100644
> --- a/lib/librte_eal/common/eal_common_dev.c
> +++ b/lib/librte_eal/common/eal_common_dev.c
> @@ -120,7 +120,9 @@ rte_eal_hotplug_add(const char *busname, const char *devname,
> if (ret != 0)
> return ret;
>
> - ret = rte_dev_probe(devargs);
> + if (rte_dev_probe(devargs) == NULL)
> + ret = -1;
> +
> free(devargs);
>
> return ret;
> @@ -192,7 +194,7 @@ local_dev_probe(const char *devargs, struct rte_device **new_dev)
> return ret;
> }
>
> -int
> +struct rte_device *
> rte_dev_probe(const char *devargs)
> {
> struct eal_dev_mp_req req;
> @@ -212,12 +214,12 @@ rte_dev_probe(const char *devargs)
> if (ret != 0) {
> RTE_LOG(ERR, EAL,
> "Failed to send hotplug request to primary\n");
> - return -ENOMSG;
> + return NULL;
Is is a problem to keep the ENOMSG through rte_errno?
> }
> if (req.result != 0)
> RTE_LOG(ERR, EAL,
> "Failed to hotplug add device\n");
> - return req.result;
> + return NULL;
> }
>
> /* attach a shared device from primary start from here: */
> @@ -236,7 +238,7 @@ rte_dev_probe(const char *devargs)
> * process.
> */
> if (ret != -EEXIST)
> - return ret;
> + return dev;
> }
>
> /* primary send attach sync request to secondary. */
> @@ -261,11 +263,11 @@ rte_dev_probe(const char *devargs)
>
> /* for -EEXIST, we don't need to rollback. */
> if (ret == -EEXIST)
> - return ret;
> + return dev;
> goto rollback;
> }
>
> - return 0;
> + return dev;
>
> rollback:
> req.t = EAL_DEV_REQ_TYPE_ATTACH_ROLLBACK;
> @@ -282,7 +284,7 @@ rte_dev_probe(const char *devargs)
> "Failed to rollback device attach on primary."
> "Devices in secondary may not sync with primary\n");
>
> - return ret;
> + return NULL;
> }
>
> int
> diff --git a/lib/librte_eal/include/rte_dev.h b/lib/librte_eal/include/rte_dev.h
> index c8d985fb5c..9cf7c7fd71 100644
> --- a/lib/librte_eal/include/rte_dev.h
> +++ b/lib/librte_eal/include/rte_dev.h
> @@ -148,9 +148,9 @@ int rte_eal_hotplug_add(const char *busname, const char *devname,
> * @param devargs
> * Device arguments including bus, class and driver properties.
> * @return
> - * 0 on success, negative on error.
> + * Generic device pointer on success, NULL on error.
If rte_errno is set, mapping codes to meanings would be helpful here.
Acked-by: Gaetan Rivet <grive@u256.net>
--
Gaëtan
next prev parent reply other threads:[~2020-06-10 12:06 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-08 15:53 [dpdk-dev] [PATCH 0/2] rte_dev_probe() API change Maxime Coquelin
2020-06-08 15:53 ` [dpdk-dev] [PATCH 1/2] doc: announce " Maxime Coquelin
2020-06-11 8:08 ` Gaëtan Rivet
2020-06-25 7:50 ` Maxime Coquelin
2020-06-08 15:53 ` [dpdk-dev] [PATCH v20.11 2/2] eal: improve device probing API Maxime Coquelin
2020-06-10 12:06 ` Gaëtan Rivet [this message]
2020-06-10 17:08 ` Maxime Coquelin
2020-06-10 18:13 ` Gaëtan Rivet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200610120641.xtfonyyjahx5wiqo@u256.net \
--to=grive@u256.net \
--cc=beilei.xing@intel.com \
--cc=bernard.iremonger@intel.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=maxime.coquelin@redhat.com \
--cc=wenzhuo.lu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).