examples/packet_ordering: enhance getopt_long usage
[dpdk.git] / lib / librte_eal / include / rte_thread.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2021 Mellanox Technologies, Ltd
3  */
4
5 #include <rte_os.h>
6 #include <rte_compat.h>
7
8 #ifndef _RTE_THREAD_H_
9 #define _RTE_THREAD_H_
10
11 /**
12  * @file
13  *
14  * Threading functions
15  *
16  * Simple threads functionality supplied by EAL.
17  */
18
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22
23 /**
24  * TLS key type, an opaque pointer.
25  */
26 typedef struct eal_tls_key *rte_tls_key;
27
28 #ifdef RTE_HAS_CPUSET
29
30 /**
31  * Set core affinity of the current thread.
32  * Support both EAL and non-EAL thread and update TLS.
33  *
34  * @param cpusetp
35  *   Pointer to CPU affinity to set.
36  * @return
37  *   On success, return 0; otherwise return -1;
38  */
39 int rte_thread_set_affinity(rte_cpuset_t *cpusetp);
40
41 /**
42  * Get core affinity of the current thread.
43  *
44  * @param cpusetp
45  *   Pointer to CPU affinity of current thread.
46  *   It presumes input is not NULL, otherwise it causes panic.
47  *
48  */
49 void rte_thread_get_affinity(rte_cpuset_t *cpusetp);
50
51 #endif /* RTE_HAS_CPUSET */
52
53 /**
54  * Create a TLS data key visible to all threads in the process.
55  * the created key is later used to get/set a value.
56  * and optional destructor can be set to be called when a thread exits.
57  *
58  * @param key
59  *   Pointer to store the allocated key.
60  * @param destructor
61  *   The function to be called when the thread exits.
62  *   Ignored on Windows OS.
63  *
64  * @return
65  *   On success, zero.
66  *   On failure, a negative number.
67  */
68
69 __rte_experimental
70 int rte_thread_tls_key_create(rte_tls_key *key, void (*destructor)(void *));
71
72 /**
73  * Delete a TLS data key visible to all threads in the process.
74  *
75  * @param key
76  *   The key allocated by rte_thread_tls_key_create().
77  *
78  * @return
79  *   On success, zero.
80  *   On failure, a negative number.
81  */
82 __rte_experimental
83 int rte_thread_tls_key_delete(rte_tls_key key);
84
85 /**
86  * Set value bound to the TLS key on behalf of the calling thread.
87  *
88  * @param key
89  *   The key allocated by rte_thread_tls_key_create().
90  * @param value
91  *   The value bound to the rte_tls_key key for the calling thread.
92  *
93  * @return
94  *   On success, zero.
95  *   On failure, a negative number.
96  */
97 __rte_experimental
98 int rte_thread_tls_value_set(rte_tls_key key, const void *value);
99
100 /**
101  * Get value bound to the TLS key on behalf of the calling thread.
102  *
103  * @param key
104  *   The key allocated by rte_thread_tls_key_create().
105  *
106  * @return
107  *   On success, value data pointer (can also be NULL).
108  *   On failure, NULL and an error number is set in rte_errno.
109  */
110 __rte_experimental
111 void *rte_thread_tls_value_get(rte_tls_key key);
112
113 #ifdef __cplusplus
114 }
115 #endif
116
117 #endif /* _RTE_THREAD_H_ */