DPDK
16.04.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
/*-
2
* BSD LICENSE
3
*
4
* Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
*
11
* * Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* * Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in
15
* the documentation and/or other materials provided with the
16
* distribution.
17
* * Neither the name of Intel Corporation nor the names of its
18
* contributors may be used to endorse or promote products derived
19
* from this software without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
*/
33
34
#ifndef _RTE_LCORE_H_
35
#define _RTE_LCORE_H_
36
43
#include <
rte_per_lcore.h
>
44
#include <
rte_eal.h
>
45
#include <
rte_launch.h
>
46
47
#ifdef __cplusplus
48
extern
"C"
{
49
#endif
50
51
#define LCORE_ID_ANY UINT32_MAX
53
#if defined(__linux__)
54
typedef
cpu_set_t rte_cpuset_t;
55
#elif defined(__FreeBSD__)
56
#include <pthread_np.h>
57
typedef
cpuset_t rte_cpuset_t;
58
#endif
59
63
struct
lcore_config
{
64
unsigned
detected
;
65
pthread_t
thread_id
;
66
int
pipe_master2slave
[2];
67
int
pipe_slave2master
[2];
68
lcore_function_t
*
volatile
f
;
69
void
*
volatile
arg
;
70
volatile
int
ret
;
71
volatile
enum
rte_lcore_state_t
state
;
72
unsigned
socket_id
;
73
unsigned
core_id
;
74
int
core_index
;
75
rte_cpuset_t
cpuset
;
76
};
77
81
extern
struct
lcore_config
lcore_config
[RTE_MAX_LCORE];
82
83
RTE_DECLARE_PER_LCORE
(
unsigned
, _lcore_id);
84
RTE_DECLARE_PER_LCORE
(rte_cpuset_t, _cpuset);
91
static
inline
unsigned
92
rte_lcore_id
(
void
)
93
{
94
return
RTE_PER_LCORE
(_lcore_id);
95
}
96
103
static
inline
unsigned
104
rte_get_master_lcore
(
void
)
105
{
106
return
rte_eal_get_configuration
()->
master_lcore
;
107
}
108
115
static
inline
unsigned
116
rte_lcore_count
(
void
)
117
{
118
const
struct
rte_config
*cfg =
rte_eal_get_configuration
();
119
return
cfg->
lcore_count
;
120
}
121
131
static
inline
int
132
rte_lcore_index
(
int
lcore_id)
133
{
134
if
(lcore_id >= RTE_MAX_LCORE)
135
return
-1;
136
if
(lcore_id < 0)
137
lcore_id =
rte_lcore_id
();
138
return
lcore_config
[lcore_id].
core_index
;
139
}
140
147
unsigned
rte_socket_id
(
void
);
148
157
static
inline
unsigned
158
rte_lcore_to_socket_id
(
unsigned
lcore_id)
159
{
160
return
lcore_config
[lcore_id].
socket_id
;
161
}
162
172
static
inline
int
173
rte_lcore_is_enabled
(
unsigned
lcore_id)
174
{
175
struct
rte_config
*cfg =
rte_eal_get_configuration
();
176
if
(lcore_id >= RTE_MAX_LCORE)
177
return
0;
178
return
cfg->
lcore_role
[lcore_id] != ROLE_OFF;
179
}
180
194
static
inline
unsigned
195
rte_get_next_lcore
(
unsigned
i,
int
skip_master,
int
wrap)
196
{
197
i++;
198
if
(wrap)
199
i %= RTE_MAX_LCORE;
200
201
while
(i < RTE_MAX_LCORE) {
202
if
(!
rte_lcore_is_enabled
(i) ||
203
(skip_master && (i ==
rte_get_master_lcore
()))) {
204
i++;
205
if
(wrap)
206
i %= RTE_MAX_LCORE;
207
continue
;
208
}
209
break
;
210
}
211
return
i;
212
}
216
#define RTE_LCORE_FOREACH(i) \
217
for (i = rte_get_next_lcore(-1, 0, 0); \
218
i<RTE_MAX_LCORE; \
219
i = rte_get_next_lcore(i, 0, 0))
220
224
#define RTE_LCORE_FOREACH_SLAVE(i) \
225
for (i = rte_get_next_lcore(-1, 1, 0); \
226
i<RTE_MAX_LCORE; \
227
i = rte_get_next_lcore(i, 1, 0))
228
238
int
rte_thread_set_affinity
(rte_cpuset_t *cpusetp);
239
248
void
rte_thread_get_affinity
(rte_cpuset_t *cpusetp);
249
259
#if defined(__DOXYGEN__)
260
#define rte_thread_setname(...) pthread_setname_np(__VA_ARGS__)
261
#endif
262
263
#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
264
#if __GLIBC_PREREQ(2, 12)
265
#define rte_thread_setname(...) pthread_setname_np(__VA_ARGS__)
266
#else
267
#define rte_thread_setname(...) 0
268
#endif
269
#endif
270
271
#ifdef __cplusplus
272
}
273
#endif
274
275
276
#endif
/* _RTE_LCORE_H_ */
Generated by
1.8.1.2