Main core can be different than first core (default behavior) as it can be specified by application argument. It can be useful to determine if given thread is matching main core. Signed-off-by: Jacek Kalwas <jacek.kalwas@intel.com> Change-Id: I25292a91ad677806eaf19ad68acdda0f28da6cfb Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16596 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
87 lines
1.2 KiB
C
87 lines
1.2 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause
|
|
* Copyright (C) 2017 Intel Corporation.
|
|
* All rights reserved.
|
|
*/
|
|
|
|
#include "env_internal.h"
|
|
|
|
#include <rte_config.h>
|
|
#include <rte_lcore.h>
|
|
|
|
uint32_t
|
|
spdk_env_get_core_count(void)
|
|
{
|
|
return rte_lcore_count();
|
|
}
|
|
|
|
uint32_t
|
|
spdk_env_get_current_core(void)
|
|
{
|
|
return rte_lcore_id();
|
|
}
|
|
|
|
uint32_t
|
|
spdk_env_get_main_core(void)
|
|
{
|
|
return rte_get_main_lcore();
|
|
}
|
|
|
|
uint32_t
|
|
spdk_env_get_first_core(void)
|
|
{
|
|
return rte_get_next_lcore(-1, 0, 0);
|
|
}
|
|
|
|
uint32_t
|
|
spdk_env_get_last_core(void)
|
|
{
|
|
uint32_t i;
|
|
uint32_t last_core = UINT32_MAX;
|
|
|
|
SPDK_ENV_FOREACH_CORE(i) {
|
|
last_core = i;
|
|
}
|
|
|
|
assert(last_core != UINT32_MAX);
|
|
|
|
return last_core;
|
|
}
|
|
|
|
uint32_t
|
|
spdk_env_get_next_core(uint32_t prev_core)
|
|
{
|
|
unsigned lcore;
|
|
|
|
lcore = rte_get_next_lcore(prev_core, 0, 0);
|
|
if (lcore == RTE_MAX_LCORE) {
|
|
return UINT32_MAX;
|
|
}
|
|
return lcore;
|
|
}
|
|
|
|
uint32_t
|
|
spdk_env_get_socket_id(uint32_t core)
|
|
{
|
|
if (core >= RTE_MAX_LCORE) {
|
|
return SPDK_ENV_SOCKET_ID_ANY;
|
|
}
|
|
|
|
return rte_lcore_to_socket_id(core);
|
|
}
|
|
|
|
int
|
|
spdk_env_thread_launch_pinned(uint32_t core, thread_start_fn fn, void *arg)
|
|
{
|
|
int rc;
|
|
|
|
rc = rte_eal_remote_launch(fn, arg, core);
|
|
|
|
return rc;
|
|
}
|
|
|
|
void
|
|
spdk_env_thread_wait_all(void)
|
|
{
|
|
rte_eal_mp_wait_lcore();
|
|
}
|