From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 032E4A00C4; Thu, 29 Sep 2022 11:38:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E9F7540694; Thu, 29 Sep 2022 11:38:46 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mails.dpdk.org (Postfix) with ESMTP id 2108B40395 for ; Thu, 29 Sep 2022 11:38:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1664444325; x=1695980325; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=Lm4LGS8J/Ok/lDrUziiMLoqJsis0P2hx7uJHp8h47Js=; b=jKFTEy9xEHVFCtLGO3Z4kzfRzLisYwewSflEjJCToVZnEocy11obCwrC 6rdHIzSXOnv5owrxIQb5WD43B/oYrz8Eefpua0Mcs140UbHo9JMfL+nCg FngQgH2LHhVyWAGw1GYBZGei+UDHh5YLWZIbKgICrNU/2WvNiwS8W4DE2 4vYFe9vt0OZfIdFVtbawLFZwC/SRLJU4iIn8pGPm4kiW5lbl8ZcLYVT9Y MCuPEldhCFcRHvcjqqoYMeUu6jTrz24wuMXhRUUVG2LvVn7TJs6g1LVsQ /MlGdU6qz5NNVbVGcGokpVn2W/lCzzKViasNmJh8o0o6tWiZpiEvsHkd+ g==; X-IronPort-AV: E=McAfee;i="6500,9779,10484"; a="289008404" X-IronPort-AV: E=Sophos;i="5.93,354,1654585200"; d="scan'208";a="289008404" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Sep 2022 02:38:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10484"; a="684768519" X-IronPort-AV: E=Sophos;i="5.93,354,1654585200"; d="scan'208";a="684768519" Received: from silpixa00401385.ir.intel.com ([10.237.214.41]) by fmsmga008.fm.intel.com with ESMTP; 29 Sep 2022 02:38:42 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: thomas@monjalon.net, Bruce Richardson Subject: [PATCH] metrics: return error code on initialization failures Date: Thu, 29 Sep 2022 10:38:29 +0100 Message-Id: <20220929093829.10218-1-bruce.richardson@intel.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org DPDK libraries should never call rte_exit on failure, so change the function return type of rte_metrics_init to "int" to allow returning an error code to the application rather than exiting the whole app on init failure. Signed-off-by: Bruce Richardson --- doc/guides/rel_notes/deprecation.rst | 3 --- lib/metrics/rte_metrics.c | 12 +++++++----- lib/metrics/rte_metrics.h | 8 +++++++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst index db261d33f7..688b8c2606 100644 --- a/doc/guides/rel_notes/deprecation.rst +++ b/doc/guides/rel_notes/deprecation.rst @@ -175,8 +175,5 @@ Deprecation Notices ``rte_event_vector::elem_offset`` gives the number of valid elements left to process from the ``rte_event_vector::elem_offset``. -* metrics: The function ``rte_metrics_init`` will have a non-void return - in order to notify errors instead of calling ``rte_exit``. - * raw/dpaa2_cmdif: The ``dpaa2_cmdif`` rawdev driver will be deprecated in DPDK 22.11, as it is no longer in use, no active user known. diff --git a/lib/metrics/rte_metrics.c b/lib/metrics/rte_metrics.c index 6adcda501c..0ccdbabc04 100644 --- a/lib/metrics/rte_metrics.c +++ b/lib/metrics/rte_metrics.c @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -54,28 +55,29 @@ struct rte_metrics_data_s { rte_spinlock_t lock; }; -void +int rte_metrics_init(int socket_id) { struct rte_metrics_data_s *stats; const struct rte_memzone *memzone; if (metrics_initialized) - return; + return 0; if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return; + return -E_RTE_SECONDARY; memzone = rte_memzone_lookup(RTE_METRICS_MEMZONE_NAME); if (memzone != NULL) - return; + return -EEXIST; memzone = rte_memzone_reserve(RTE_METRICS_MEMZONE_NAME, sizeof(struct rte_metrics_data_s), socket_id, 0); if (memzone == NULL) - rte_exit(EXIT_FAILURE, "Unable to allocate stats memzone\n"); + return -ENOMEM; stats = memzone->addr; memset(stats, 0, sizeof(struct rte_metrics_data_s)); rte_spinlock_init(&stats->lock); metrics_initialized = 1; + return 0; } int diff --git a/lib/metrics/rte_metrics.h b/lib/metrics/rte_metrics.h index c2815a252c..5c33af9999 100644 --- a/lib/metrics/rte_metrics.h +++ b/lib/metrics/rte_metrics.h @@ -79,8 +79,14 @@ struct rte_metric_value { * * @param socket_id * Socket to use for shared memory allocation. + * @return + * 0 on success + * Negative error code (from rte_errno.h) on error: + * -EEXIST - a memzone for metrics already exists but metrics is not initialized + * -ENOMEM - cannot allocate metrics memzone + * -E_RTE_SECONDARY - function called from secondary process */ -void rte_metrics_init(int socket_id); +int rte_metrics_init(int socket_id); /** * Deinitialize metric module. This function must be called from -- 2.34.1