From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 78EC7A04B0; Sun, 18 Oct 2020 11:21:35 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3DD36C93E; Sun, 18 Oct 2020 11:21:33 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by dpdk.org (Postfix) with ESMTP id 7E611BCFF for ; Sun, 18 Oct 2020 11:21:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1603012888; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=nmS2nMMmA2+QflIjOSPtm8i7OljM8W2yQlfZjNWgSko=; b=A3uoyOqS7X7rWmXMaU8bdYlCdfD8TZeqOPJ1gWl9SXBgocOHz6XRfiEilac1OyLmxAwTVV Ei8Ymkgd90BlKFg9Vo9qZijK6ErAdeGCuKaLQVN0m9KFH1ZXE6lHTHpctOYtCUoX3CrQwL tqQ19CZhQ0ZAsFETa/DE8mpsb2cwjj4= Received: from mail-vk1-f197.google.com (mail-vk1-f197.google.com [209.85.221.197]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-571-pd5Lm6r-OPSnGteUOU0cVQ-1; Sun, 18 Oct 2020 05:21:26 -0400 X-MC-Unique: pd5Lm6r-OPSnGteUOU0cVQ-1 Received: by mail-vk1-f197.google.com with SMTP id b75so2280649vke.12 for ; Sun, 18 Oct 2020 02:21:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=nmS2nMMmA2+QflIjOSPtm8i7OljM8W2yQlfZjNWgSko=; b=Ajz1itUlfdrYaIIvdXlcF0Z8LZ4gdZcCmJkCvMoN0oZBivOJ7GmK65N90eWLwzFJtx VCHVZVEj7FQAAfYI9zOnXBXEVcSQxQcgfN6m77cM/VDNOBP/JcFnGvJQevaoMYGL1/JU OHz0yCkYK+w1TwdhefxqPqF6pGWkI/5vFdzbOTe2/L9PYMwJ3buMAY7ai23XXT2XtjAb lV+5hkYcRiYJt7TKg1BdFyvRIn+XwfheG/D6bbPUtgLeunEm4E968UG/H+nyuR6+63Py Gh1W2OdeduyECSVjqFneCJs8vz0LtpICDH2IbECxSzPvzI19luElwrUsHhTynfOx3St3 MRlw== X-Gm-Message-State: AOAM531bykQPubLPFDFTePuhSzZjpuXb73D3Gaq/I9K9UzMVmC7GOU52 2IVuUMgG4wgThXNC0kUdvL7Cg//XzIFnSz66z/CmQ4x6ndaWP0LJmu+RC4lJQHTQlkm0q2/99pY MEr8QnblqGtp0/84uog8= X-Received: by 2002:ab0:a94:: with SMTP id d20mr5001731uak.86.1603012886132; Sun, 18 Oct 2020 02:21:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwhlW3VV4AdTWGMZIhqAG1aNaQDDQdu99NVeAwzVJxzH1RZwxgj5upGmQP8dFuajoHsKgLopa48Qfy9WUQblHI= X-Received: by 2002:ab0:a94:: with SMTP id d20mr5001724uak.86.1603012885806; Sun, 18 Oct 2020 02:21:25 -0700 (PDT) MIME-Version: 1.0 References: <20200826055233.26075-1-rohit.raj@nxp.com> <20201008153048.19369-1-rohit.raj@nxp.com> In-Reply-To: <20201008153048.19369-1-rohit.raj@nxp.com> From: David Marchand Date: Sun, 18 Oct 2020 11:21:14 +0200 Message-ID: To: rohit.raj@nxp.com Cc: Ray Kinsella , Neil Horman , dev Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=dmarchan@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" Subject: Re: [dpdk-dev] [PATCH v4 1/5] eal: add API for bus close 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" On Thu, Oct 8, 2020 at 5:31 PM wrote: > > From: Rohit Raj > > 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 > --- > lib/librte_eal/common/eal_common_bus.c | 32 +++++++++++++++++++++++++- > lib/librte_eal/include/rte_bus.h | 27 +++++++++++++++++++++- > lib/librte_eal/linux/eal.c | 1 + > lib/librte_eal/rte_eal_version.map | 1 + > 4 files changed, 59 insertions(+), 2 deletions(-) This is a new EAL API, please update the release notes. > > 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 > @@ -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; We should propagate that an error occurred so that the caller is aware something went wrong. > +} > + > /* 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..7bf7e81b2 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,20 @@ typedef int (*rte_bus_scan_t)(void); > */ > typedef int (*rte_bus_probe_t)(void); > > +/** > + * Implementation specific close function which is responsible for resetting all > + * detected devices on the bus to a default state, closing UIO nodes or VFIO > + * groups and also freeing any memory allocated during rte_bus_probe like > + * private resources for device list. > + * > + * 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 +262,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 +316,16 @@ int rte_bus_scan(void); > */ > int rte_bus_probe(void); > > +/** Missing a banner: + * @warning + * @b EXPERIMENTAL: this API may change, or be removed, without prior notice > + * 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 9cf0e2ec0..1e1256f07 100644 > --- a/lib/librte_eal/linux/eal.c > +++ b/lib/librte_eal/linux/eal.c > @@ -1358,6 +1358,7 @@ rte_eal_cleanup(void) > > if (rte_eal_process_type() == RTE_PROC_PRIMARY) > rte_memseg_walk(mark_freeable, NULL); > + rte_bus_close(); > rte_service_finalize(); > rte_mp_channel_cleanup(); > rte_trace_save(); You can squash patch 4 and patch 5 in this patch so that we update all OS-specific bits at once. > diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map > index a93dea9fe..8e226b297 100644 > --- a/lib/librte_eal/rte_eal_version.map > +++ b/lib/librte_eal/rte_eal_version.map > @@ -400,6 +400,7 @@ EXPERIMENTAL { > # added in 20.11 > __rte_eal_trace_generic_size_t; > rte_service_lcore_may_be_active; > + rte_bus_close; Please, alphabetical order. > }; > > INTERNAL { > -- > 2.17.1 > -- David Marchand