xref: /dpdk/lib/eal/common/eal_thread.h (revision 8b0a1b8cb4818921c7b57b9a656154ccb7ed69db)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(c) 2010-2014 Intel Corporation
399a2dd95SBruce Richardson  */
499a2dd95SBruce Richardson 
599a2dd95SBruce Richardson #ifndef EAL_THREAD_H
699a2dd95SBruce Richardson #define EAL_THREAD_H
799a2dd95SBruce Richardson 
8770ebc06SDavid Marchand #include <rte_common.h>
999a2dd95SBruce Richardson #include <rte_lcore.h>
1099a2dd95SBruce Richardson 
1199a2dd95SBruce Richardson /**
12449e7dbcSDavid Marchand  * Basic loop of EAL thread, called for each worker thread by rte_eal_init().
1399a2dd95SBruce Richardson  *
1499a2dd95SBruce Richardson  * @param arg
15449e7dbcSDavid Marchand  *   The lcore_id (passed as an integer) of this worker thread.
1699a2dd95SBruce Richardson  */
17*8b0a1b8cSTyler Retzlaff __rte_noreturn uint32_t eal_thread_loop(void *arg);
1899a2dd95SBruce Richardson 
1999a2dd95SBruce Richardson /**
2099a2dd95SBruce Richardson  * Get the NUMA socket id from cpu id.
2199a2dd95SBruce Richardson  * This function is private to EAL.
2299a2dd95SBruce Richardson  *
2399a2dd95SBruce Richardson  * @param cpu_id
2499a2dd95SBruce Richardson  *   The logical process id.
2599a2dd95SBruce Richardson  * @return
2699a2dd95SBruce Richardson  *   socket_id or SOCKET_ID_ANY
2799a2dd95SBruce Richardson  */
2899a2dd95SBruce Richardson unsigned eal_cpu_socket_id(unsigned cpu_id);
2999a2dd95SBruce Richardson 
3099a2dd95SBruce Richardson /**
3199a2dd95SBruce Richardson  * Default buffer size to use with eal_thread_dump_affinity()
3299a2dd95SBruce Richardson  */
3399a2dd95SBruce Richardson #define RTE_CPU_AFFINITY_STR_LEN            256
3499a2dd95SBruce Richardson 
3599a2dd95SBruce Richardson /**
3699a2dd95SBruce Richardson  * Dump the cpuset as a human readable string.
3799a2dd95SBruce Richardson  * This function is private to EAL.
3899a2dd95SBruce Richardson  *
3999a2dd95SBruce Richardson  * Note:
4099a2dd95SBruce Richardson  *   If the dump size is greater than the size of given buffer,
4199a2dd95SBruce Richardson  *   the string will be truncated and with '\0' at the end.
4299a2dd95SBruce Richardson  *
4399a2dd95SBruce Richardson  * @param cpuset
4499a2dd95SBruce Richardson  *   The CPU affinity object to dump.
4599a2dd95SBruce Richardson  * @param str
4699a2dd95SBruce Richardson  *   The string buffer the cpuset will dump to.
4799a2dd95SBruce Richardson  * @param size
4899a2dd95SBruce Richardson  *   The string buffer size.
4999a2dd95SBruce Richardson  * @return
5099a2dd95SBruce Richardson  *   0 for success, -1 if truncation happens.
5199a2dd95SBruce Richardson  */
5299a2dd95SBruce Richardson int
5399a2dd95SBruce Richardson eal_thread_dump_affinity(rte_cpuset_t *cpuset, char *str, unsigned int size);
5499a2dd95SBruce Richardson 
5599a2dd95SBruce Richardson /**
5699a2dd95SBruce Richardson  * Dump the current thread cpuset.
5799a2dd95SBruce Richardson  * This is a wrapper on eal_thread_dump_affinity().
5899a2dd95SBruce Richardson  */
5999a2dd95SBruce Richardson int
6099a2dd95SBruce Richardson eal_thread_dump_current_affinity(char *str, unsigned int size);
6199a2dd95SBruce Richardson 
62a95d7054SDavid Marchand /**
63a95d7054SDavid Marchand  * Called by the main thread to wake up a worker in 'WAIT' state.
64a95d7054SDavid Marchand  * This function blocks until the worker acknowledge it started processing a
65a95d7054SDavid Marchand  * new command.
66a95d7054SDavid Marchand  * This function is private to EAL.
67a95d7054SDavid Marchand  *
68a95d7054SDavid Marchand  * @param worker_id
69a95d7054SDavid Marchand  *   The lcore_id of a worker thread.
709856af40SBruce Richardson  * @return
719856af40SBruce Richardson  *   0 on success, negative errno on error
72a95d7054SDavid Marchand  */
739856af40SBruce Richardson int
74a95d7054SDavid Marchand eal_thread_wake_worker(unsigned int worker_id);
75a95d7054SDavid Marchand 
76a95d7054SDavid Marchand /**
77a95d7054SDavid Marchand  * Called by a worker thread to sleep after entering 'WAIT' state.
78a95d7054SDavid Marchand  * This function is private to EAL.
79a95d7054SDavid Marchand  */
80a95d7054SDavid Marchand void
81a95d7054SDavid Marchand eal_thread_wait_command(void);
82a95d7054SDavid Marchand 
83a95d7054SDavid Marchand /**
84a95d7054SDavid Marchand  * Called by a worker thread to acknowledge new command after leaving 'WAIT'
85a95d7054SDavid Marchand  * state.
86a95d7054SDavid Marchand  * This function is private to EAL.
87a95d7054SDavid Marchand  */
88a95d7054SDavid Marchand void
89a95d7054SDavid Marchand eal_thread_ack_command(void);
90a95d7054SDavid Marchand 
9199a2dd95SBruce Richardson #endif /* EAL_THREAD_H */
92