All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Monjalon <thomas@monjalon.net>
To: Rohit Raj <rohit.raj@nxp.com>
Cc: dev@dpdk.org, Bruce Richardson <bruce.richardson@intel.com>,
	Ray Kinsella <mdr@ashroe.eu>,
	Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>,
	Narcisa Ana Maria Vasile <navasile@linux.microsoft.com>,
	Dmitry Malloy <dmitrym@microsoft.com>,
	Pallavi Kadam <pallavi.kadam@intel.com>, dev <dev@dpdk.org>,
	Nipun Gupta <nipun.gupta@nxp.com>,
	Sachin Saxena <sachin.saxena@nxp.com>,
	Hemant Agrawal <hemant.agrawal@nxp.com>,
	David Marchand <david.marchand@redhat.com>
Subject: Re: [PATCH v5 1/2] eal: add API for bus close
Date: Wed, 09 Feb 2022 14:20:57 +0100	[thread overview]
Message-ID: <4782321.0VBMTVartN@thomas> (raw)
In-Reply-To: <CAJFAV8x3W+G9tBZwFfd69QMPE1dxYvhTUnxXjTg+2Xt0V8n_aw@mail.gmail.com>

09/02/2022 12:04, David Marchand:
> On Mon, Jan 10, 2022 at 6:26 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.
> 
> After an application crash, how does this bus resets the associated resources?
> 
> > This patch adds a new API rte_bus_close() for cleanup of
> > bus objects which were acquired during probe.
> 
> The patch in its current form breaks the ABI on rte_bus object.
> This can be seen in GHA, or calling DPDK_ABI_REF_VERSION=v21.11
> ./devtools/test-meson-builds.sh.

[...]
> > +/* Close all devices of all buses */
> > +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")) {

Please do an explicit comparison "== 0".

> > +                       vbus = bus;
> > +                       continue;
> > +               }
> > +
> > +               if (bus->close) {

Please do an explicit comparison with "!= NULL".
We can also completely remove this check and implement the callback
in all buses. It should loop in all remaining devices and remove them.

> > +                       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);
> > +       }
> 
> The vdev bus is special in that some drivers can reference objects
> from other buses (see f4ce209a8ce5 ("eal: postpone vdev
> initialization") and da76cc02342b ("eal: probe new virtual bus after
> other bus devices")).
> For this reason, I would expect that the vdev bus is closed before the
> other buses.

Yes, good catch.

We don't have to expose this function as API.
This can be an internal function called only in rte_eal_cleanup().

Instead, it would be more useful to have a public function
to close a single bus by its name.

> > @@ -263,6 +280,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 */

As David said, it is breaking the ABI.

[...]
> > @@ -1362,6 +1362,14 @@ rte_eal_cleanup(void)
> >
> >         if (rte_eal_process_type() == RTE_PROC_PRIMARY)
> >                 rte_memseg_walk(mark_freeable, NULL);
> > +
> > +       /* Close all the buses and devices/drivers on them */
> > +       if (rte_bus_close()) {
> > +               rte_eal_init_alert("Cannot close devices");
> 
> You can't call rte_eal_*init*_alert in rte_eal_cleanup.
> 
> There is not much to do if the bus close fails, I'd rather leave the
> cleanup continue.

+1, just log and save the error code for return at the end.



  reply	other threads:[~2022-02-09 13:21 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-24  8:24 [dpdk-dev] [PATCH v2 1/3] eal: add API for bus close 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)
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 [this message]
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=4782321.0VBMTVartN@thomas \
    --to=thomas@monjalon.net \
    --cc=bruce.richardson@intel.com \
    --cc=david.marchand@redhat.com \
    --cc=dev@dpdk.org \
    --cc=dmitry.kozliuk@gmail.com \
    --cc=dmitrym@microsoft.com \
    --cc=hemant.agrawal@nxp.com \
    --cc=mdr@ashroe.eu \
    --cc=navasile@linux.microsoft.com \
    --cc=nipun.gupta@nxp.com \
    --cc=pallavi.kadam@intel.com \
    --cc=rohit.raj@nxp.com \
    --cc=sachin.saxena@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.