From patchwork Fri May 3 17:25:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 53264 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 6B29F1B11A; Fri, 3 May 2019 19:25:22 +0200 (CEST) Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) by dpdk.org (Postfix) with ESMTP id 16DAC1B107 for ; Fri, 3 May 2019 19:25:19 +0200 (CEST) Received: by mail-pg1-f181.google.com with SMTP id j26so3032445pgl.5 for ; Fri, 03 May 2019 10:25:19 -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 :mime-version:content-transfer-encoding; bh=gsT8g95CdCyxJl6epoAfw3UyifKXpWKn2cCa/f9AIzQ=; b=Hl73ZHp6o8zVVOVW26LhVLgo9DHbZc+f8AFaerpLltycSb18EF5X8Zfu4XuRP61dfr I1vsDxKKB9z1RDb3cGs+etEy3TlvB3cjmjGfXbkaJGQ8JboA/6EsorA1DwSUNACp5HCG A+p73nVEWDJ4XQzUKbIgfLT+DhAx9uU+ZzxhYfOFoIXAKNxntl0KHADzIP5oArGqa1QT 3dpspj8IdUQ1OGUnf+zJ61j1Xi9SJaceih26XZG6b45f4Bz9VOamyUlK/EttHDM4gy+7 JinQc3/AI0llC8JB4J1B8L+R6Kbd970eDfVFBFMdk8GngQ1wUJTGrUUP60CdkeHqTg9I Qf1A== 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:mime-version:content-transfer-encoding; bh=gsT8g95CdCyxJl6epoAfw3UyifKXpWKn2cCa/f9AIzQ=; b=rS1rMGk+MVAAjeiR2xhkzxTKHz34FU4Y90bB+02PcMcPBfY+0AvlUqOVoV5rdCCUd5 zhz6zKdhbOKC2jGRluOO4n6ksrSLrkIl6NGtwj1pC4S6RRrC9AQK8fHIstUuh6cwnDU0 rLb1QuJHN3iYmVoOTHLfI8z7Cq2k9hL8MUIyMNF6Ps6Yl68BYVE8ALHTRm5pRlaBuXhn 4uYBHrye4bE41P5taxedkEKLPLWcMbNwm7Zb2/E2W5dZbwVzpN8rh3h0h3pYCj5MoPgB C7gau3vd2eZ3O94aqP9yIBVsLphGWasczo+BWllM9hLsF0IUfwgJFuEBH5yA/QX95a39 kHEg== X-Gm-Message-State: APjAAAXmq33b1fqtRNSaZqDRY/2xcgKwWzS1FdLpPWVc1kdsN+CrGoXU P7F900aKqJduEENEQ+/xlsZtZ72oS4k= X-Google-Smtp-Source: APXvYqydQ8QQAW+bqVCvDtM2h/NESHN3FXruqG4vYpxqPQVZ21teAsiPuXz1LQC9vYZ5SfxuguZQkw== X-Received: by 2002:a63:d408:: with SMTP id a8mr11646702pgh.184.1556904318062; Fri, 03 May 2019 10:25:18 -0700 (PDT) Received: from hermes.lan (204-195-22-127.wavecable.com. [204.195.22.127]) by smtp.gmail.com with ESMTPSA id t13sm3109578pgj.49.2019.05.03.10.25.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 03 May 2019 10:25:16 -0700 (PDT) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , David Marchand Date: Fri, 3 May 2019 10:25:04 -0700 Message-Id: <20190503172507.5272-3-stephen@networkplumber.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190503172507.5272-1-stephen@networkplumber.org> References: <20190410171603.8979-1-stephen@networkplumber.org> <20190503172507.5272-1-stephen@networkplumber.org> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 2/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 return code functions as experimental since this value might change in the future and probably shouldn't have been used by non EAL code anyway. Signed-off-by: Stephen Hemminger Reviewed-by: David Marchand --- doc/guides/rel_notes/release_19_05.rst | 6 +++ lib/librte_eal/common/eal_common_lcore.c | 39 ++++++++++++++++++ lib/librte_eal/common/include/rte_lcore.h | 49 ++++++++++++++++------- lib/librte_eal/rte_eal_version.map | 11 +++++ 4 files changed, 91 insertions(+), 14 deletions(-) diff --git a/doc/guides/rel_notes/release_19_05.rst b/doc/guides/rel_notes/release_19_05.rst index 468e325395c7..35c0c9081958 100644 --- a/doc/guides/rel_notes/release_19_05.rst +++ b/doc/guides/rel_notes/release_19_05.rst @@ -275,6 +275,12 @@ 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 8c2744fabcbf..ae59c98ca43a 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 int +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 705594acbb5e..d0006a077fae 100644 --- a/lib/librte_eal/common/include/rte_lcore.h +++ b/lib/librte_eal/common/include/rte_lcore.h @@ -121,15 +121,7 @@ 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 +169,40 @@ rte_socket_id_by_idx(unsigned int idx); * @return * the ID of lcoreid's physical socket */ -static inline unsigned int -rte_lcore_to_socket_id(unsigned int 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. diff --git a/lib/librte_eal/rte_eal_version.map b/lib/librte_eal/rte_eal_version.map index 245493461c36..b4aec1667122 100644 --- a/lib/librte_eal/rte_eal_version.map +++ b/lib/librte_eal/rte_eal_version.map @@ -287,6 +287,16 @@ DPDK_19.05 { } DPDK_18.11; +DPDK_19.05 { + global: + + rte_lcore_cpuset; + rte_lcore_index; + rte_lcore_to_cpu_id; + rte_lcore_to_socket_id; + +} DPDK_18.11; + EXPERIMENTAL { global: @@ -337,6 +347,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;