DPDK
19.02.0
Main Page
Related Pages
Data Structures
Files
Examples
File List
Globals
lib
librte_eal
common
include
rte_lcore.h
Go to the documentation of this file.
1
/* SPDX-License-Identifier: BSD-3-Clause
2
* Copyright(c) 2010-2014 Intel Corporation
3
*/
4
5
#ifndef _RTE_LCORE_H_
6
#define _RTE_LCORE_H_
7
14
#include <rte_config.h>
15
#include <
rte_per_lcore.h
>
16
#include <
rte_eal.h
>
17
#include <
rte_launch.h
>
18
19
#ifdef __cplusplus
20
extern
"C"
{
21
#endif
22
23
#define LCORE_ID_ANY UINT32_MAX
25
#if defined(__linux__)
26
typedef
cpu_set_t rte_cpuset_t;
27
#elif defined(__FreeBSD__)
28
#include <pthread_np.h>
29
typedef
cpuset_t rte_cpuset_t;
30
#endif
31
35
struct
lcore_config
{
36
unsigned
detected
;
37
pthread_t
thread_id
;
38
int
pipe_master2slave
[2];
39
int
pipe_slave2master
[2];
40
lcore_function_t
*
volatile
f
;
41
void
*
volatile
arg
;
42
volatile
int
ret
;
43
volatile
enum
rte_lcore_state_t
state
;
44
unsigned
socket_id
;
45
unsigned
core_id
;
46
int
core_index
;
47
rte_cpuset_t
cpuset
;
48
uint8_t
core_role
;
49
};
50
54
extern
struct
lcore_config
lcore_config
[RTE_MAX_LCORE];
55
56
RTE_DECLARE_PER_LCORE
(
unsigned
, _lcore_id);
57
RTE_DECLARE_PER_LCORE
(rte_cpuset_t, _cpuset);
71
static
inline
unsigned
72
rte_lcore_id
(
void
)
73
{
74
return
RTE_PER_LCORE
(_lcore_id);
75
}
76
83
static
inline
unsigned
84
rte_get_master_lcore
(
void
)
85
{
86
return
rte_eal_get_configuration
()->
master_lcore
;
87
}
88
95
static
inline
unsigned
96
rte_lcore_count
(
void
)
97
{
98
const
struct
rte_config
*cfg =
rte_eal_get_configuration
();
99
return
cfg->
lcore_count
;
100
}
101
116
static
inline
int
117
rte_lcore_index
(
int
lcore_id)
118
{
119
if
(lcore_id >= RTE_MAX_LCORE)
120
return
-1;
121
if
(lcore_id < 0)
122
lcore_id = (int)
rte_lcore_id
();
123
return
lcore_config
[lcore_id].
core_index
;
124
}
125
132
unsigned
rte_socket_id
(
void
);
133
144
unsigned
int
__rte_experimental
145
rte_socket_count
(
void
);
146
161
int
__rte_experimental
162
rte_socket_id_by_idx
(
unsigned
int
idx);
163
172
static
inline
unsigned
173
rte_lcore_to_socket_id
(
unsigned
lcore_id)
174
{
175
return
lcore_config
[lcore_id].
socket_id
;
176
}
177
187
static
inline
int
188
rte_lcore_is_enabled
(
unsigned
lcore_id)
189
{
190
struct
rte_config
*cfg =
rte_eal_get_configuration
();
191
if
(lcore_id >= RTE_MAX_LCORE)
192
return
0;
193
return
cfg->
lcore_role
[lcore_id] == ROLE_RTE;
194
}
195
209
static
inline
unsigned
210
rte_get_next_lcore
(
unsigned
i,
int
skip_master,
int
wrap)
211
{
212
i++;
213
if
(wrap)
214
i %= RTE_MAX_LCORE;
215
216
while
(i < RTE_MAX_LCORE) {
217
if
(!
rte_lcore_is_enabled
(i) ||
218
(skip_master && (i ==
rte_get_master_lcore
()))) {
219
i++;
220
if
(wrap)
221
i %= RTE_MAX_LCORE;
222
continue
;
223
}
224
break
;
225
}
226
return
i;
227
}
231
#define RTE_LCORE_FOREACH(i) \
232
for (i = rte_get_next_lcore(-1, 0, 0); \
233
i<RTE_MAX_LCORE; \
234
i = rte_get_next_lcore(i, 0, 0))
235
239
#define RTE_LCORE_FOREACH_SLAVE(i) \
240
for (i = rte_get_next_lcore(-1, 1, 0); \
241
i<RTE_MAX_LCORE; \
242
i = rte_get_next_lcore(i, 1, 0))
243
253
int
rte_thread_set_affinity
(rte_cpuset_t *cpusetp);
254
263
void
rte_thread_get_affinity
(rte_cpuset_t *cpusetp);
264
277
int
rte_thread_setname
(pthread_t
id
,
const
char
*name);
278
300
__rte_experimental
int
301
rte_ctrl_thread_create
(pthread_t *thread,
const
char
*name,
302
const
pthread_attr_t *attr,
303
void
*(*start_routine)(
void
*),
void
*arg);
304
316
int
317
rte_lcore_has_role
(
unsigned
int
lcore_id,
enum
rte_lcore_role_t
role);
318
319
#ifdef __cplusplus
320
}
321
#endif
322
323
324
#endif
/* _RTE_LCORE_H_ */
Generated by
1.8.1.2