From: "Sachin Saxena (OSS)" <sachin.saxena@oss.nxp.com>
To: rohit.raj@nxp.com, Ray Kinsella <mdr@ashroe.eu>,
Neil Horman <nhorman@tuxdriver.com>
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v3 1/3] eal: add API for bus close
Date: Tue, 29 Sep 2020 10:03:03 +0530 [thread overview]
Message-ID: <d2fa55d9-7667-a23c-378f-a339f68cb168@oss.nxp.com> (raw)
In-Reply-To: <20200826055233.26075-1-rohit.raj@nxp.com>
On 26-Aug-20 11:22 AM, rohit.raj@nxp.com wrote:
> From: Rohit Raj <rohit.raj@nxp.com>
>
> As per the current code we have API for bus probe, but the
> bus close API is missing. This breaks the multi process
> scenarios as objects are not cleaned while terminating the
> secondary processes.
>
> This patch adds a new API rte_bus_close() for cleanup of
> bus objects which were acquired during probe.
>
> Signed-off-by: Rohit Raj <rohit.raj@nxp.com>
> ---
>
> v3:
> * nit: combined nested if statements
>
> v2:
> * Moved rte_bus_close call to rte_eal_cleanup path.
>
> lib/librte_eal/common/eal_common_bus.c | 32 +++++++++++++++++++++++++-
> lib/librte_eal/include/rte_bus.h | 25 +++++++++++++++++++-
> lib/librte_eal/linux/eal.c | 1 +
> lib/librte_eal/rte_eal_version.map | 3 +++
> 4 files changed, 59 insertions(+), 2 deletions(-)
>
> diff --git a/lib/librte_eal/common/eal_common_bus.c b/lib/librte_eal/common/eal_common_bus.c
> index baa5b532a..5fd7cf6c5 100644
> --- a/lib/librte_eal/common/eal_common_bus.c
> +++ b/lib/librte_eal/common/eal_common_bus.c
> @@ -1,5 +1,5 @@
> /* SPDX-License-Identifier: BSD-3-Clause
> - * Copyright 2016 NXP
> + * Copyright 2016,2020 NXP
> */
>
> #include <stdio.h>
> @@ -56,6 +56,36 @@ rte_bus_scan(void)
> return 0;
> }
>
> +int
> +rte_bus_close(void)
> +{
> + int ret;
> + struct rte_bus *bus, *vbus = NULL;
> +
> + TAILQ_FOREACH(bus, &rte_bus_list, next) {
> + if (!strcmp(bus->name, "vdev")) {
> + vbus = bus;
> + continue;
> + }
> +
> + if (bus->close) {
> + ret = bus->close();
> + if (ret)
> + RTE_LOG(ERR, EAL, "Bus (%s) close failed.\n",
> + bus->name);
> + }
> + }
> +
> + if (vbus && vbus->close) {
> + ret = vbus->close();
> + if (ret)
> + RTE_LOG(ERR, EAL, "Bus (%s) close failed.\n",
> + vbus->name);
> + }
> +
> + return 0;
> +}
> +
> /* Probe all devices of all buses */
> int
> rte_bus_probe(void)
> diff --git a/lib/librte_eal/include/rte_bus.h b/lib/librte_eal/include/rte_bus.h
> index d3034d0ed..af4787b18 100644
> --- a/lib/librte_eal/include/rte_bus.h
> +++ b/lib/librte_eal/include/rte_bus.h
> @@ -1,5 +1,5 @@
> /* SPDX-License-Identifier: BSD-3-Clause
> - * Copyright 2016 NXP
> + * Copyright 2016,2020 NXP
> */
>
> #ifndef _RTE_BUS_H_
> @@ -67,6 +67,18 @@ typedef int (*rte_bus_scan_t)(void);
> */
> typedef int (*rte_bus_probe_t)(void);
>
> +/**
> + * Implementation specific close function which is responsible for closing
> + * devices on that bus.
> + *
> + * This is called while iterating over each registered bus.
> + *
> + * @return
> + * 0 for successful close
> + * !0 for any error while closing
> + */
> +typedef int (*rte_bus_close_t)(void);
> +
> /**
> * Device iterator to find a device on a bus.
> *
> @@ -248,6 +260,7 @@ struct rte_bus {
> const char *name; /**< Name of the bus */
> rte_bus_scan_t scan; /**< Scan for devices attached to bus */
> rte_bus_probe_t probe; /**< Probe devices on bus */
> + rte_bus_close_t close; /**< Close devices on bus */
> rte_bus_find_device_t find_device; /**< Find a device on the bus */
> rte_bus_plug_t plug; /**< Probe single device for drivers */
> rte_bus_unplug_t unplug; /**< Remove single device from driver */
> @@ -301,6 +314,16 @@ int rte_bus_scan(void);
> */
> int rte_bus_probe(void);
>
> +/**
> + * For each device on the buses, call the device specific close.
> + *
> + * @return
> + * 0 for successful close
> + * !0 otherwise
> + */
> +__rte_experimental
> +int rte_bus_close(void);
> +
> /**
> * Dump information of all the buses registered with EAL.
> *
> diff --git a/lib/librte_eal/linux/eal.c b/lib/librte_eal/linux/eal.c
> index 0960f01d0..a8a63d8ca 100644
> --- a/lib/librte_eal/linux/eal.c
> +++ b/lib/librte_eal/linux/eal.c
> @@ -1357,6 +1357,7 @@ rte_eal_cleanup(void)
>
> if (rte_eal_process_type() == RTE_PROC_PRIMARY)
> rte_memseg_walk(mark_freeable, NULL);
> + rte_bus_close();
Since this is common framework change, we should introduce similar call
for "rte_bus_close" in FreeBSD and Windows version also.
> rte_service_finalize();
> rte_mp_channel_cleanup();
> rte_trace_save();
> diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map
> index 0b18e2ef8..dc5266f22 100644
> --- a/lib/librte_eal/rte_eal_version.map
> +++ b/lib/librte_eal/rte_eal_version.map
> @@ -397,6 +397,9 @@ EXPERIMENTAL {
> rte_mp_disable;
> rte_thread_register;
> rte_thread_unregister;
> +
> + # added in 20.11
> + rte_bus_close;
> };
>
> INTERNAL {
next prev parent reply other threads:[~2020-09-29 4:33 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-24 8:24 [dpdk-dev] [PATCH v2 " rohit.raj
2020-08-24 8:24 ` [dpdk-dev] [PATCH v2 2/3] examples/multi_process: cleanup bus objects while terminating app rohit.raj
2020-09-08 5:32 ` Hemant Agrawal
2020-08-24 8:24 ` [dpdk-dev] [PATCH v2 3/3] bus/fslmc: support bus close API rohit.raj
2020-08-24 15:14 ` [dpdk-dev] [PATCH v2 1/3] eal: add API for bus close Stephen Hemminger
2020-08-26 5:52 ` [dpdk-dev] [PATCH v3 " rohit.raj
2020-08-26 5:52 ` [dpdk-dev] [PATCH v3 2/3] examples/multi_process: cleanup bus objects while terminating app rohit.raj
2020-09-08 5:32 ` Hemant Agrawal
2020-08-26 5:52 ` [dpdk-dev] [PATCH v3 3/3] bus/fslmc: support bus close API rohit.raj
2020-09-08 5:35 ` Hemant Agrawal (OSS)
2020-09-17 15:35 ` Kinsella, Ray
2020-09-08 4:46 ` [dpdk-dev] [PATCH v3 1/3] eal: add API for bus close Hemant Agrawal
2020-09-23 23:54 ` Thomas Monjalon
2020-09-17 15:34 ` Kinsella, Ray
2020-09-24 11:39 ` Ferruh Yigit
2020-09-29 4:33 ` Sachin Saxena (OSS) [this message]
2020-09-30 11:50 ` Ferruh Yigit
2020-10-08 16:24 ` Ferruh Yigit
2020-10-09 4:53 ` [dpdk-dev] [EXT] " Rohit Raj
2020-10-18 9:25 ` David Marchand
2020-10-08 15:30 ` [dpdk-dev] [PATCH v4 1/5] " rohit.raj
2020-10-08 15:30 ` [dpdk-dev] [PATCH v4 2/5] examples/multi_process: cleanup bus objects while terminating app rohit.raj
2020-10-18 9:25 ` David Marchand
2021-01-25 11:07 ` oulijun
2021-02-04 12:53 ` David Marchand
2023-07-05 23:35 ` Stephen Hemminger
2020-10-08 15:30 ` [dpdk-dev] [PATCH v4 3/5] bus/fslmc: support bus close API rohit.raj
2020-10-08 15:30 ` [dpdk-dev] [PATCH v4 4/5] eal/freebsd: added support for rte_bus_close API rohit.raj
2020-10-08 15:30 ` [dpdk-dev] [PATCH v4 5/5] eal/windows: " rohit.raj
2020-10-11 8:06 ` Tal Shnaiderman
2020-10-27 5:55 ` Narcisa Ana Maria Vasile
2020-10-18 9:21 ` [dpdk-dev] [PATCH v4 1/5] eal: add API for bus close David Marchand
2022-01-10 5:26 ` [PATCH v5 1/2] " rohit.raj
2022-01-10 5:26 ` [PATCH v5 2/2] bus/fslmc: support bus close API rohit.raj
2022-01-19 10:31 ` [PATCH v5 1/2] eal: add API for bus close Thomas Monjalon
2022-01-20 14:51 ` [EXT] " Rohit Raj
2022-01-20 14:58 ` Thomas Monjalon
2022-02-01 5:40 ` Rohit Raj
2022-02-01 7:43 ` Thomas Monjalon
2022-02-09 11:04 ` David Marchand
2022-02-09 13:20 ` Thomas Monjalon
2023-07-05 23:37 ` [dpdk-dev] [PATCH v2 1/3] " Stephen Hemminger
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=d2fa55d9-7667-a23c-378f-a339f68cb168@oss.nxp.com \
--to=sachin.saxena@oss.nxp.com \
--cc=dev@dpdk.org \
--cc=mdr@ashroe.eu \
--cc=nhorman@tuxdriver.com \
--cc=rohit.raj@nxp.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).