#include <stdint.h>
#include <rte_os.h>
#include <rte_compat.h>
Go to the source code of this file.
|
int | rte_thread_create (rte_thread_t *thread_id, const rte_thread_attr_t *thread_attr, rte_thread_func thread_func, void *arg) |
|
int | rte_thread_create_control (rte_thread_t *thread, const char *name, rte_thread_func thread_func, void *arg) |
|
__rte_internal int | rte_thread_create_internal_control (rte_thread_t *id, const char *name, rte_thread_func func, void *arg) |
|
int | rte_thread_join (rte_thread_t thread_id, uint32_t *value_ptr) |
|
int | rte_thread_detach (rte_thread_t thread_id) |
|
rte_thread_t | rte_thread_self (void) |
|
void | rte_thread_set_name (rte_thread_t thread_id, const char *thread_name) |
|
__rte_internal void | rte_thread_set_prefixed_name (rte_thread_t id, const char *name) |
|
int | rte_thread_equal (rte_thread_t t1, rte_thread_t t2) |
|
int | rte_thread_attr_init (rte_thread_attr_t *attr) |
|
int | rte_thread_attr_set_priority (rte_thread_attr_t *thread_attr, enum rte_thread_priority priority) |
|
int | rte_thread_attr_set_affinity (rte_thread_attr_t *thread_attr, rte_cpuset_t *cpuset) |
|
int | rte_thread_attr_get_affinity (rte_thread_attr_t *thread_attr, rte_cpuset_t *cpuset) |
|
int | rte_thread_set_affinity_by_id (rte_thread_t thread_id, const rte_cpuset_t *cpuset) |
|
int | rte_thread_get_affinity_by_id (rte_thread_t thread_id, rte_cpuset_t *cpuset) |
|
int | rte_thread_set_affinity (rte_cpuset_t *cpusetp) |
|
void | rte_thread_get_affinity (rte_cpuset_t *cpusetp) |
|
int | rte_thread_get_priority (rte_thread_t thread_id, enum rte_thread_priority *priority) |
|
int | rte_thread_set_priority (rte_thread_t thread_id, enum rte_thread_priority priority) |
|
int | rte_thread_key_create (rte_thread_key *key, void(*destructor)(void *)) |
|
int | rte_thread_key_delete (rte_thread_key key) |
|
int | rte_thread_value_set (rte_thread_key key, const void *value) |
|
void * | rte_thread_value_get (rte_thread_key key) |
|
Threading functions
Simple threads functionality supplied by EAL.
Definition in file rte_thread.h.
◆ RTE_THREAD_NAME_SIZE
#define RTE_THREAD_NAME_SIZE 16 |
Maximum thread name length (including '\0').
Definition at line 27 of file rte_thread.h.
◆ RTE_THREAD_INTERNAL_PREFIX
#define RTE_THREAD_INTERNAL_PREFIX "dpdk-" |
Thread name prefix automatically added to all internal threads.
Definition at line 32 of file rte_thread.h.
◆ RTE_THREAD_INTERNAL_NAME_SIZE
#define RTE_THREAD_INTERNAL_NAME_SIZE 11 |
Maximum internal thread name length (including '\0').
Definition at line 34 of file rte_thread.h.
◆ rte_thread_func
typedef uint32_t(* rte_thread_func) (void *arg) |
Thread function
Function pointer to thread start routine.
- Parameters
-
- Returns
- Thread function exit value.
Definition at line 53 of file rte_thread.h.
◆ rte_thread_key
TLS key type, an opaque pointer.
Definition at line 78 of file rte_thread.h.
◆ rte_thread_priority
Thread priority values.
Enumerator |
---|
RTE_THREAD_PRIORITY_NORMAL | normal thread priority, the default
|
RTE_THREAD_PRIORITY_REALTIME_CRITICAL | highest thread priority allowed
|
Definition at line 58 of file rte_thread.h.
◆ rte_thread_create()
Create a new thread that will invoke the 'thread_func' routine.
- Parameters
-
thread_id | A pointer that will store the id of the newly created thread. |
thread_attr | Attributes that are used at the creation of the new thread. |
thread_func | The routine that the new thread will invoke when starting execution. |
arg | Argument to be passed to the 'thread_func' routine. |
- Returns
- On success, return 0. On failure, return a positive errno-style error number.
◆ rte_thread_create_control()
Create a control thread.
Creates a control thread with the given name and attributes. The affinity of the new thread is based on the CPU affinity retrieved at the time rte_eal_init() was called, the EAL threads are then excluded. If setting the name of the thread fails, the error is ignored and a debug message is logged.
- Parameters
-
thread | Filled with the thread id of the new created thread. |
name | The name of the control thread (max RTE_THREAD_NAME_SIZE characters including '\0'). |
thread_func | Function to be executed by the new thread. |
arg | Argument passed to thread_func. |
- Returns
- On success, returns 0; on error, it returns a negative value corresponding to the error number.
- Examples:
- examples/vhost/main.c, and examples/vhost_blk/vhost_blk.c.
◆ rte_thread_create_internal_control()
Create an internal control thread.
Creates a control thread with the given name prefixed. If setting the name of the thread fails, the error is ignored and logged.
The affinity of the new thread is based on the CPU affinity retrieved at the time rte_eal_init() was called, the EAL threads are then excluded.
- Parameters
-
id | Filled with the thread ID of the new created thread. |
name | The name of the control thread. See RTE_THREAD_INTERNAL_NAME_SIZE for maximum length. The name of the driver or library should be first, then followed by a hyphen and more details. It will be prefixed with RTE_THREAD_INTERNAL_PREFIX by this function. |
func | Function to be executed by the new thread. |
arg | Argument passed to func. |
- Returns
- On success, returns 0; a negative value otherwise.
◆ rte_thread_join()
int rte_thread_join |
( |
rte_thread_t |
thread_id, |
|
|
uint32_t * |
value_ptr |
|
) |
| |
Waits for the thread identified by 'thread_id' to terminate
- Parameters
-
thread_id | The identifier of the thread. |
value_ptr | Stores the exit status of the thread. |
- Returns
- On success, return 0. On failure, return a positive errno-style error number.
◆ rte_thread_detach()
Indicate that the return value of the thread is not needed and all thread resources should be release when the thread terminates.
- Parameters
-
thread_id | The id of the thread to be detached. |
- Returns
- On success, return 0. On failure, return a positive errno-style error number.
- Examples:
- examples/vhost_blk/vhost_blk.c.
◆ rte_thread_self()
Get the id of the calling thread.
- Returns
- Return the thread id of the calling thread.
◆ rte_thread_set_name()
void rte_thread_set_name |
( |
rte_thread_t |
thread_id, |
|
|
const char * |
thread_name |
|
) |
| |
Set the name of the thread.
This API is a noop if the underlying platform does not support setting the thread name or the platform-specific API used to set the thread name fails.
- Parameters
-
thread_id | The id of the thread to set name. |
thread_name | The name to set. Truncated to RTE_THREAD_NAME_SIZE, including terminating NUL if necessary. |
◆ rte_thread_set_prefixed_name()
__rte_internal void rte_thread_set_prefixed_name |
( |
rte_thread_t |
id, |
|
|
const char * |
name |
|
) |
| |
Set the name of an internal thread with the common prefix.
This API is a noop if the underlying platform does not support setting the thread name, or if it fails.
- Parameters
-
id | The ID of the thread to set name. |
name | The name to set after being prefixed. See RTE_THREAD_INTERNAL_NAME_SIZE for maximum length. The name of the driver or library should be first, then followed by a hyphen and more details. It will be prefixed with RTE_THREAD_INTERNAL_PREFIX by this function. |
◆ rte_thread_equal()
Check if 2 thread ids are equal.
- Parameters
-
t1 | First thread id. |
t2 | Second thread id. |
- Returns
- If the ids are equal, return nonzero. Otherwise, return 0.
◆ rte_thread_attr_init()
Initialize the attributes of a thread. These attributes can be passed to the rte_thread_create() function that will create a new thread and set its attributes according to attr.
- Parameters
-
attr | Thread attributes to initialize. |
- Returns
- On success, return 0. On failure, return a positive errno-style error number.
◆ rte_thread_attr_set_priority()
Set the thread priority value in the thread attributes pointed to by 'thread_attr'.
- Parameters
-
thread_attr | Points to the thread attributes in which priority will be updated. |
priority | Points to the value of the priority to be set. |
- Returns
- On success, return 0. On failure, return a positive errno-style error number.
◆ rte_thread_attr_set_affinity()
int rte_thread_attr_set_affinity |
( |
rte_thread_attr_t * |
thread_attr, |
|
|
rte_cpuset_t * |
cpuset |
|
) |
| |
Set the CPU affinity value in the thread attributes pointed to by 'thread_attr'.
- Parameters
-
thread_attr | Points to the thread attributes in which affinity will be updated. |
cpuset | Points to the value of the affinity to be set. |
- Returns
- On success, return 0. On failure, return a positive errno-style error number.
◆ rte_thread_attr_get_affinity()
int rte_thread_attr_get_affinity |
( |
rte_thread_attr_t * |
thread_attr, |
|
|
rte_cpuset_t * |
cpuset |
|
) |
| |
Get the value of CPU affinity that is set in the thread attributes pointed to by 'thread_attr'.
- Parameters
-
thread_attr | Points to the thread attributes from which affinity will be retrieved. |
cpuset | Pointer to the memory that will store the affinity. |
- Returns
- On success, return 0. On failure, return a positive errno-style error number.
◆ rte_thread_set_affinity_by_id()
int rte_thread_set_affinity_by_id |
( |
rte_thread_t |
thread_id, |
|
|
const rte_cpuset_t * |
cpuset |
|
) |
| |
Set the affinity of thread 'thread_id' to the cpu set specified by 'cpuset'.
- Parameters
-
thread_id | Id of the thread for which to set the affinity. |
cpuset | Pointer to CPU affinity to set. |
- Returns
- On success, return 0. On failure, return a positive errno-style error number.
◆ rte_thread_get_affinity_by_id()
int rte_thread_get_affinity_by_id |
( |
rte_thread_t |
thread_id, |
|
|
rte_cpuset_t * |
cpuset |
|
) |
| |
Get the affinity of thread 'thread_id' and store it in 'cpuset'.
- Parameters
-
thread_id | Id of the thread for which to get the affinity. |
cpuset | Pointer for storing the affinity value. |
- Returns
- On success, return 0. On failure, return a positive errno-style error number.
◆ rte_thread_set_affinity()
int rte_thread_set_affinity |
( |
rte_cpuset_t * |
cpusetp | ) |
|
Set core affinity of the current thread. Support both EAL and non-EAL thread and update TLS.
- Parameters
-
cpusetp | Pointer to CPU affinity to set. |
- Returns
- On success, return 0; otherwise return -1;
◆ rte_thread_get_affinity()
void rte_thread_get_affinity |
( |
rte_cpuset_t * |
cpusetp | ) |
|
Get core affinity of the current thread.
- Parameters
-
cpusetp | Pointer to CPU affinity of current thread. It presumes input is not NULL, otherwise it causes panic. |
◆ rte_thread_get_priority()
Get the priority of a thread.
- Parameters
-
thread_id | Id of the thread for which to get priority. |
priority | Location to store the retrieved priority. |
- Returns
- On success, return 0. On failure, return a positive errno-style error number.
◆ rte_thread_set_priority()
Set the priority of a thread.
- Parameters
-
thread_id | Id of the thread for which to set priority. |
priority | Priority value to be set. |
- Returns
- On success, return 0. On failure, return a positive errno-style error number.
◆ rte_thread_key_create()
int rte_thread_key_create |
( |
rte_thread_key * |
key, |
|
|
void(*)(void *) |
destructor |
|
) |
| |
Create a TLS data key visible to all threads in the process. the created key is later used to get/set a value. and optional destructor can be set to be called when a thread exits.
- Parameters
-
key | Pointer to store the allocated key. |
destructor | The function to be called when the thread exits. Ignored on Windows OS. |
- Returns
- On success, zero. On failure, a negative number and an error number is set in rte_errno. rte_errno can be: ENOMEM - Memory allocation error. ENOEXEC - Specific OS error.
◆ rte_thread_key_delete()
Delete a TLS data key visible to all threads in the process.
- Parameters
-
- Returns
- On success, zero. On failure, a negative number and an error number is set in rte_errno. rte_errno can be: EINVAL - Invalid parameter passed. ENOEXEC - Specific OS error.
◆ rte_thread_value_set()
Set value bound to the TLS key on behalf of the calling thread.
- Parameters
-
key | The key allocated by rte_thread_key_create(). |
value | The value bound to the rte_thread_key key for the calling thread. |
- Returns
- On success, zero. On failure, a negative number and an error number is set in rte_errno. rte_errno can be: EINVAL - Invalid parameter passed. ENOEXEC - Specific OS error.
◆ rte_thread_value_get()
Get value bound to the TLS key on behalf of the calling thread.
- Parameters
-
- Returns
- On success, value data pointer (can also be NULL). On failure, NULL and an error number is set in rte_errno. rte_errno can be: EINVAL - Invalid parameter passed. ENOEXEC - Specific OS error.