DPDK
17.08.2
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
uint8_t
core_role
;
77
};
78
82
extern
struct
lcore_config
lcore_config
[RTE_MAX_LCORE];
83
84
RTE_DECLARE_PER_LCORE
(
unsigned
, _lcore_id);
85
RTE_DECLARE_PER_LCORE
(rte_cpuset_t, _cpuset);
92
static
inline
unsigned
93
rte_lcore_id
(
void
)
94
{
95
return
RTE_PER_LCORE
(_lcore_id);
96
}
97
104
static
inline
unsigned
105
rte_get_master_lcore
(
void
)
106
{
107
return
rte_eal_get_configuration
()->
master_lcore
;
108
}
109
116
static
inline
unsigned
117
rte_lcore_count
(
void
)
118
{
119
const
struct
rte_config
*cfg =
rte_eal_get_configuration
();
120
return
cfg->
lcore_count
;
121
}
122
132
static
inline
int
133
rte_lcore_index
(
int
lcore_id)
134
{
135
if
(lcore_id >= RTE_MAX_LCORE)
136
return
-1;
137
if
(lcore_id < 0)
138
lcore_id =
rte_lcore_id
();
139
return
lcore_config
[lcore_id].
core_index
;
140
}
141
148
unsigned
rte_socket_id
(
void
);
149
158
static
inline
unsigned
159
rte_lcore_to_socket_id
(
unsigned
lcore_id)
160
{
161
return
lcore_config
[lcore_id].
socket_id
;
162
}
163
173
static
inline
int
174
rte_lcore_is_enabled
(
unsigned
lcore_id)
175
{
176
struct
rte_config
*cfg =
rte_eal_get_configuration
();
177
if
(lcore_id >= RTE_MAX_LCORE)
178
return
0;
179
return
cfg->
lcore_role
[lcore_id] == ROLE_RTE;
180
}
181
195
static
inline
unsigned
196
rte_get_next_lcore
(
unsigned
i,
int
skip_master,
int
wrap)
197
{
198
i++;
199
if
(wrap)
200
i %= RTE_MAX_LCORE;
201
202
while
(i < RTE_MAX_LCORE) {
203
if
(!
rte_lcore_is_enabled
(i) ||
204
(skip_master && (i ==
rte_get_master_lcore
()))) {
205
i++;
206
if
(wrap)
207
i %= RTE_MAX_LCORE;
208
continue
;
209
}
210
break
;
211
}
212
return
i;
213
}
217
#define RTE_LCORE_FOREACH(i) \
218
for (i = rte_get_next_lcore(-1, 0, 0); \
219
i<RTE_MAX_LCORE; \
220
i = rte_get_next_lcore(i, 0, 0))
221
225
#define RTE_LCORE_FOREACH_SLAVE(i) \
226
for (i = rte_get_next_lcore(-1, 1, 0); \
227
i<RTE_MAX_LCORE; \
228
i = rte_get_next_lcore(i, 1, 0))
229
239
int
rte_thread_set_affinity
(rte_cpuset_t *cpusetp);
240
249
void
rte_thread_get_affinity
(rte_cpuset_t *cpusetp);
250
263
int
rte_thread_setname
(pthread_t
id
,
const
char
*name);
264
265
#ifdef __cplusplus
266
}
267
#endif
268
269
270
#endif
/* _RTE_LCORE_H_ */
Generated by
1.8.1.2