From patchwork Mon Apr 8 18:25:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 52441 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C953B5592; Mon, 8 Apr 2019 20:25:19 +0200 (CEST) Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by dpdk.org (Postfix) with ESMTP id 7209D3572 for ; Mon, 8 Apr 2019 20:25:16 +0200 (CEST) Received: by mail-pl1-f181.google.com with SMTP id b3so7794871plr.7 for ; Mon, 08 Apr 2019 11:25:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mbQIcA1uhldaEFarsVAa047HrCNJQvNe3d0S2pgozUY=; b=KOIOmdS1192jR0taCOWOJG2ICxauJZfqzkX9NCokWEaqY6nY1Iissh6erQuuwcX+mc uNLiwzWNsAdD5XQnZaPA3aYn6Z3ToiH2bpxPrHqInDtNAAE/f82DWwk8tY0k3jC+tKFJ mI7DkRPL6pFRTNqGeKT292SKV1KxHFGakGD740pRFrRWgCxVWOVtDxbhiOJlVAgDCUmg Dbyp5Nb6mjOLEBInYupmFcNbMl+O271803Th3GsUwidXaejbqV1gmWn1qB9WGXI9t+Tn 658J+Yul4+8Q/HRrvymZ4kZmoi0VoGPcjMnjf7nLXshYeGZDz2+hjAPc6GoI8cnz4CuK 18pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mbQIcA1uhldaEFarsVAa047HrCNJQvNe3d0S2pgozUY=; b=gR1CYby6NoLVZTZO/LelHuBsDQid0d9n6nHithpo7mCzJLvgDCq/ln6GXt6cLBC75I 9Jm+dwpz7Fi0GIZfJQWsFXUe3JHdP66FZg1TqqubGxi6HoGycNay45zah0r8+eN7d+nt y6PfOREyXLGXtVhAaC660xNTAYLd/XF40VlbrU/EaMA2wykniYxRTh+GUT2PTJh7vHIt eAqoJCNsUcR1kRYAxQxb2c539JGZAg1EIVPpGET+hU23g2RDR796pQsHleXsz5BzJRgz czotkhANulhFG//8T34kRIUGNXtNCsfKc/+GMKQqmWimlmtR/cp71j7z2bQcJjJo7gGf eMgw== X-Gm-Message-State: APjAAAXEZCMd7H7FUu4B8acuRAZC5gt+V8JRQ6lb0jgS0DC/5vxcHQvm jUsADUD5nBQixbMe5L7Zuym8Bn7dMIWA8Q== X-Google-Smtp-Source: APXvYqz6HWrA7K83qA8bKh8x6B8GDIzqmYvAKx/PXwHljt76GdKXJh6suHRnWfc9bU1f/56P7P8lBQ== X-Received: by 2002:a17:902:f094:: with SMTP id go20mr31697593plb.159.1554747914922; Mon, 08 Apr 2019 11:25:14 -0700 (PDT) Received: from shemminger-XPS-13-9360.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id d25sm40891081pfn.154.2019.04.08.11.25.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Apr 2019 11:25:13 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger Date: Mon, 8 Apr 2019 11:25:06 -0700 Message-Id: <20190408182510.16078-2-stephen@networkplumber.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190408182510.16078-1-stephen@networkplumber.org> References: <20190408182510.16078-1-stephen@networkplumber.org> Subject: [dpdk-dev] [PATCH v1 1/5] eal: add accessor functions for lcore_config 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" 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 Reviewed-by: David Marchand --- 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;