All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>
Subject: [dpdk-dev] [PATCH v1 1/5] eal: add accessor functions for lcore_config
Date: Mon,  8 Apr 2019 11:25:06 -0700	[thread overview]
Message-ID: <20190408182510.16078-2-stephen@networkplumber.org> (raw)
In-Reply-To: <20190408182510.16078-1-stephen@networkplumber.org>

The fields of the internal EAL core configuration are currently
laid bare as part of the API. This is not good practice and limits
fixing issues with layout and sizes.

Make new accessor functions for the fields used by current drivers
and examples. Mark the state and return code functions as experimental
since these values might change in the future and probably shouldn't
have been used by non EAL code anyway.

Most of these functions are not marked as experimental since
we want applications to convert over asap. The one exception is
the return_code, which is only used by some tests now and not
clear that it is even that useful.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 doc/guides/rel_notes/release_19_05.rst    |  7 +++
 lib/librte_eal/common/eal_common_lcore.c  | 39 +++++++++++++++++
 lib/librte_eal/common/include/rte_lcore.h | 52 ++++++++++++++++-------
 lib/librte_eal/rte_eal_version.map        | 11 +++++
 4 files changed, 94 insertions(+), 15 deletions(-)

diff --git a/doc/guides/rel_notes/release_19_05.rst b/doc/guides/rel_notes/release_19_05.rst
index dbdf07a0c05b..4beea5705be7 100644
--- a/doc/guides/rel_notes/release_19_05.rst
+++ b/doc/guides/rel_notes/release_19_05.rst
@@ -222,6 +222,13 @@ ABI Changes
   alignment for ``rte_crypto_asym_op`` to restore expected ``rte_crypto_op``
   layout and alignment.
 
+* eal: the lcore config structure ``struct lcore_config`` will be made
+  internal to the EAL in a future release. This will allow the structure to
+  change without impacting API or ABI. All accesses to fields of this
+  structure should be done by the corresponding accessor functions.
+  For example, instead of using ``lcore_config[lcore_id].socket_id``
+  the function ``rte_lcore_socket_id(lcore_id)`` should be used instead.
+
 
 Shared Library Versions
 -----------------------
diff --git a/lib/librte_eal/common/eal_common_lcore.c b/lib/librte_eal/common/eal_common_lcore.c
index 1cbac42286ba..c3cf5a06269d 100644
--- a/lib/librte_eal/common/eal_common_lcore.c
+++ b/lib/librte_eal/common/eal_common_lcore.c
@@ -16,6 +16,45 @@
 #include "eal_private.h"
 #include "eal_thread.h"
 
+int rte_lcore_index(int lcore_id)
+{
+	if (unlikely(lcore_id >= RTE_MAX_LCORE))
+		return -1;
+
+	if (lcore_id < 0)
+		lcore_id = (int)rte_lcore_id();
+
+	return lcore_config[lcore_id].core_index;
+}
+
+int rte_lcore_to_cpu_id(int lcore_id)
+{
+	if (unlikely(lcore_id >= RTE_MAX_LCORE))
+		return -1;
+
+	if (lcore_id < 0)
+		lcore_id = (int)rte_lcore_id();
+
+	return lcore_config[lcore_id].core_id;
+}
+
+rte_cpuset_t rte_lcore_cpuset(unsigned int lcore_id)
+{
+	return lcore_config[lcore_id].cpuset;
+}
+
+unsigned
+rte_lcore_to_socket_id(unsigned int lcore_id)
+{
+	return lcore_config[lcore_id].socket_id;
+}
+
+int
+rte_lcore_return_code(unsigned int lcore_id)
+{
+	return lcore_config[lcore_id].ret;
+}
+
 static int
 socket_id_cmp(const void *a, const void *b)
 {
diff --git a/lib/librte_eal/common/include/rte_lcore.h b/lib/librte_eal/common/include/rte_lcore.h
index dea17f500065..7687fe650f64 100644
--- a/lib/librte_eal/common/include/rte_lcore.h
+++ b/lib/librte_eal/common/include/rte_lcore.h
@@ -121,15 +121,8 @@ rte_lcore_count(void)
  * @return
  *   The relative index, or -1 if not enabled.
  */
-static inline int
-rte_lcore_index(int lcore_id)
-{
-	if (lcore_id >= RTE_MAX_LCORE)
-		return -1;
-	if (lcore_id < 0)
-		lcore_id = (int)rte_lcore_id();
-	return lcore_config[lcore_id].core_index;
-}
+int
+rte_lcore_index(int lcore_id);
 
 /**
  * Return the ID of the physical socket of the logical core we are
@@ -177,11 +170,40 @@ rte_socket_id_by_idx(unsigned int idx);
  * @return
  *   the ID of lcoreid's physical socket
  */
-static inline unsigned
-rte_lcore_to_socket_id(unsigned lcore_id)
-{
-	return lcore_config[lcore_id].socket_id;
-}
+unsigned int
+rte_lcore_to_socket_id(unsigned int lcore_id);
+
+/**
+ * Return the id of the lcore on a socket starting from zero.
+ *
+ * @param lcore_id
+ *   The targeted lcore, or -1 for the current one.
+ * @return
+ *   The relative index, or -1 if not enabled.
+ */
+int
+rte_lcore_to_cpu_id(int lcore_id);
+
+/**
+ * Return the cpuset for a given lcore.
+ * @param lcore_id
+ *   the targeted lcore, which MUST be between 0 and RTE_MAX_LCORE-1.
+ * @return
+ *   The cpuset of that lcore
+ */
+rte_cpuset_t
+rte_lcore_cpuset(unsigned int lcore_id);
+
+/**
+ * Get the return code from a lcore thread.
+ * @param lcore_id
+ *   the targeted lcore, which MUST be between 0 and RTE_MAX_LCORE-1
+ *   and finished
+ * @return
+ *   the return code from the lcore thread
+ */
+int __rte_experimental
+rte_lcore_return_code(unsigned int lcore_id);
 
 /**
  * Test if an lcore is enabled.
@@ -193,7 +215,7 @@ rte_lcore_to_socket_id(unsigned lcore_id)
  *   True if the given lcore is enabled; false otherwise.
  */
 static inline int
-rte_lcore_is_enabled(unsigned lcore_id)
+rte_lcore_is_enabled(unsigned int lcore_id)
 {
 	struct rte_config *cfg = rte_eal_get_configuration();
 	if (lcore_id >= RTE_MAX_LCORE)
diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map
index d6e375135ad1..f6688327cad3 100644
--- a/lib/librte_eal/rte_eal_version.map
+++ b/lib/librte_eal/rte_eal_version.map
@@ -268,6 +268,16 @@ DPDK_18.11 {
 
 } DPDK_18.08;
 
+DPDK_19.05 {
+	global:
+
+	rte_lcore_cpuset;
+	rte_lcore_index;
+	rte_lcore_to_cpu_id;
+	rte_lcore_to_socket_id;
+
+} DPDK_18.08;
+
 EXPERIMENTAL {
 	global:
 
@@ -329,6 +339,7 @@ EXPERIMENTAL {
 	rte_fbarray_set_free;
 	rte_fbarray_set_used;
 	rte_intr_callback_unregister_pending;
+	rte_lcore_return_code;
 	rte_log_register_type_and_pick_level;
 	rte_malloc_dump_heaps;
 	rte_malloc_heap_create;
-- 
2.17.1


  reply	other threads:[~2019-04-08 18:25 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-08 18:25 [dpdk-dev] [PATCH v1 0/5] make lcore_config internal Stephen Hemminger
2019-04-08 18:25 ` Stephen Hemminger [this message]
2019-04-09  7:43   ` [dpdk-dev] [PATCH v1 1/5] eal: add accessor functions for lcore_config David Marchand
2019-04-08 18:25 ` [dpdk-dev] [PATCH v1 2/5] bus: use lcore accessor functions Stephen Hemminger
2019-04-09  7:43   ` David Marchand
2019-04-08 18:25 ` [dpdk-dev] [PATCH v1 3/5] examples/bond: use lcore accessor Stephen Hemminger
2019-04-09  7:43   ` David Marchand
2019-04-08 18:25 ` [dpdk-dev] [PATCH v1 4/5] app/test: use lcore accessor functions Stephen Hemminger
2019-04-09  7:43   ` David Marchand
2019-04-08 18:25 ` [dpdk-dev] [PATCH v1 5/5] eal: make lcore_config private Stephen Hemminger
2019-04-10 17:15 ` [dpdk-dev] [PATCH v2 0/5] make lcore_config internal Stephen Hemminger
2019-04-10 17:15   ` [dpdk-dev] [PATCH v2 1/5] eal: use unsigned int in rte_lcore.h functions Stephen Hemminger
2019-05-03  7:24     ` David Marchand
2019-04-10 17:16   ` [dpdk-dev] [PATCH v2 2/5] eal: add accessor functions for lcore_config Stephen Hemminger
2019-04-16 17:03     ` Jerin Jacob Kollanukkaran
2019-04-30 20:53       ` Stephen Hemminger
2019-05-01  2:12         ` [dpdk-dev] [EXT] " Jerin Jacob Kollanukkaran
2019-05-03  7:22     ` [dpdk-dev] " David Marchand
2019-04-10 17:16   ` [dpdk-dev] [PATCH v2 3/5] bus: use lcore accessor functions Stephen Hemminger
2019-04-10 17:16   ` [dpdk-dev] [PATCH v2 4/5] examples/bond: use lcore accessor Stephen Hemminger
2019-05-03  7:29     ` David Marchand
2019-04-10 17:16   ` [dpdk-dev] [PATCH v2 5/5] app/test: use lcore accessor functions Stephen Hemminger
2019-05-02 23:15   ` [dpdk-dev] [PATCH v2 0/5] make lcore_config internal Stephen Hemminger
2019-05-03 17:25   ` [dpdk-dev] [PATCH v3 0/5] prepare to make lcore_config not visible in ABI Stephen Hemminger
2019-05-03 17:25     ` [dpdk-dev] [PATCH v3 1/5] eal: use unsigned int in rte_lcore.h functions Stephen Hemminger
2019-05-03 17:25     ` [dpdk-dev] [PATCH v3 2/5] eal: add accessor functions for lcore_config Stephen Hemminger
2019-05-03 17:25     ` [dpdk-dev] [PATCH v3 3/5] bus: use lcore accessor functions Stephen Hemminger
2019-05-03 17:25     ` [dpdk-dev] [PATCH v3 4/5] examples/bond: use lcore accessor Stephen Hemminger
2019-05-03 17:25     ` [dpdk-dev] [PATCH v3 5/5] app/test: use lcore accessor functions Stephen Hemminger
2019-05-06  7:20     ` [dpdk-dev] [PATCH v3 0/5] prepare to make lcore_config not visible in ABI David Marchand
2019-05-23 13:58 ` [dpdk-dev] [PATCH v4 0/5] make lcore_config internal David Marchand
2019-05-23 13:58   ` [dpdk-dev] [PATCH v4 1/5] eal: use unsigned int in lcore API prototypes David Marchand
2019-05-23 13:58   ` [dpdk-dev] [PATCH v4 2/5] eal: add lcore accessors David Marchand
2019-05-29 22:46     ` Thomas Monjalon
2019-05-29 22:51       ` Stephen Hemminger
2019-05-30  7:31         ` David Marchand
2019-05-30  7:40           ` Thomas Monjalon
2019-05-30 10:11             ` Bruce Richardson
2019-05-30 13:39               ` Thomas Monjalon
2019-05-30 17:00                 ` David Marchand
2019-05-30 20:08                   ` Bruce Richardson
2019-05-23 13:58   ` [dpdk-dev] [PATCH v4 3/5] drivers/bus: use " David Marchand
2019-05-23 13:59   ` [dpdk-dev] [PATCH v4 4/5] examples/bond: " David Marchand
2019-05-23 13:59   ` [dpdk-dev] [PATCH v4 5/5] test: " David Marchand
2019-05-23 15:14   ` [dpdk-dev] [PATCH v4 0/5] make lcore_config internal Stephen Hemminger
2019-05-31 15:36 ` [dpdk-dev] [PATCH v5 " David Marchand
2019-05-31 15:36   ` [dpdk-dev] [PATCH v5 1/5] eal: use unsigned int in lcore API prototypes David Marchand
2019-05-31 15:36   ` [dpdk-dev] [PATCH v5 2/5] eal: add lcore accessors David Marchand
2019-05-31 15:37   ` [dpdk-dev] [PATCH v5 3/5] drivers/bus: use " David Marchand
2019-05-31 15:37   ` [dpdk-dev] [PATCH v5 4/5] examples/bond: " David Marchand
2019-05-31 15:37   ` [dpdk-dev] [PATCH v5 5/5] test: " David Marchand
2019-06-04 15:11     ` Eads, Gage
2019-06-03 10:32   ` [dpdk-dev] [PATCH v5 0/5] make lcore_config internal Thomas Monjalon
2019-06-03 20:15     ` 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=20190408182510.16078-2-stephen@networkplumber.org \
    --to=stephen@networkplumber.org \
    --cc=dev@dpdk.org \
    /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.