xref: /dpdk/lib/eal/common/eal_common_mcfg.c (revision 2a7a42a5918af42dbf229d30dbba13697e68320f)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2019 Intel Corporation
3  */
4 
5 #include <rte_eal_memconfig.h>
6 #include <rte_version.h>
7 
8 #include "eal_internal_cfg.h"
9 #include "eal_memcfg.h"
10 #include "eal_private.h"
11 
12 void
eal_mcfg_complete(void)13 eal_mcfg_complete(void)
14 {
15 	struct rte_config *cfg = rte_eal_get_configuration();
16 	struct rte_mem_config *mcfg = cfg->mem_config;
17 	struct internal_config *internal_conf =
18 		eal_get_internal_configuration();
19 
20 	/* ALL shared mem_config related INIT DONE */
21 	if (cfg->process_type == RTE_PROC_PRIMARY)
22 		mcfg->magic = RTE_MAGIC;
23 
24 	internal_conf->init_complete = 1;
25 }
26 
27 void
eal_mcfg_wait_complete(void)28 eal_mcfg_wait_complete(void)
29 {
30 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
31 
32 	/* wait until shared mem_config finish initialising */
33 	rte_wait_until_equal_32(&mcfg->magic, RTE_MAGIC, rte_memory_order_relaxed);
34 }
35 
36 int
eal_mcfg_check_version(void)37 eal_mcfg_check_version(void)
38 {
39 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
40 
41 	/* check if version from memconfig matches compiled in macro */
42 	if (mcfg->version != RTE_VERSION)
43 		return -1;
44 
45 	return 0;
46 }
47 
48 void
eal_mcfg_update_internal(void)49 eal_mcfg_update_internal(void)
50 {
51 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
52 	struct internal_config *internal_conf =
53 		eal_get_internal_configuration();
54 
55 	internal_conf->legacy_mem = mcfg->legacy_mem;
56 	internal_conf->single_file_segments = mcfg->single_file_segments;
57 }
58 
59 void
eal_mcfg_update_from_internal(void)60 eal_mcfg_update_from_internal(void)
61 {
62 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
63 	const struct internal_config *internal_conf =
64 		eal_get_internal_configuration();
65 
66 	mcfg->legacy_mem = internal_conf->legacy_mem;
67 	mcfg->single_file_segments = internal_conf->single_file_segments;
68 	/* record current DPDK version */
69 	mcfg->version = RTE_VERSION;
70 }
71 
72 rte_rwlock_t *
rte_mcfg_mem_get_lock(void)73 rte_mcfg_mem_get_lock(void)
74 {
75 	return &rte_eal_get_configuration()->mem_config->memory_hotplug_lock;
76 }
77 
78 void
rte_mcfg_mem_read_lock(void)79 rte_mcfg_mem_read_lock(void)
80 {
81 	rte_rwlock_read_lock(rte_mcfg_mem_get_lock());
82 }
83 
84 void
rte_mcfg_mem_read_unlock(void)85 rte_mcfg_mem_read_unlock(void)
86 {
87 	rte_rwlock_read_unlock(rte_mcfg_mem_get_lock());
88 }
89 
90 void
rte_mcfg_mem_write_lock(void)91 rte_mcfg_mem_write_lock(void)
92 {
93 	rte_rwlock_write_lock(rte_mcfg_mem_get_lock());
94 }
95 
96 void
rte_mcfg_mem_write_unlock(void)97 rte_mcfg_mem_write_unlock(void)
98 {
99 	rte_rwlock_write_unlock(rte_mcfg_mem_get_lock());
100 }
101 
102 rte_rwlock_t *
rte_mcfg_tailq_get_lock(void)103 rte_mcfg_tailq_get_lock(void)
104 {
105 	return &rte_eal_get_configuration()->mem_config->qlock;
106 }
107 
108 void
rte_mcfg_tailq_read_lock(void)109 rte_mcfg_tailq_read_lock(void)
110 {
111 	rte_rwlock_read_lock(rte_mcfg_tailq_get_lock());
112 }
113 
114 void
rte_mcfg_tailq_read_unlock(void)115 rte_mcfg_tailq_read_unlock(void)
116 {
117 	rte_rwlock_read_unlock(rte_mcfg_tailq_get_lock());
118 }
119 
120 void
rte_mcfg_tailq_write_lock(void)121 rte_mcfg_tailq_write_lock(void)
122 {
123 	rte_rwlock_write_lock(rte_mcfg_tailq_get_lock());
124 }
125 
126 void
rte_mcfg_tailq_write_unlock(void)127 rte_mcfg_tailq_write_unlock(void)
128 {
129 	rte_rwlock_write_unlock(rte_mcfg_tailq_get_lock());
130 }
131 
132 rte_rwlock_t *
rte_mcfg_mempool_get_lock(void)133 rte_mcfg_mempool_get_lock(void)
134 {
135 	return &rte_eal_get_configuration()->mem_config->mplock;
136 }
137 
138 void
rte_mcfg_mempool_read_lock(void)139 rte_mcfg_mempool_read_lock(void)
140 {
141 	rte_rwlock_read_lock(rte_mcfg_mempool_get_lock());
142 }
143 
144 void
rte_mcfg_mempool_read_unlock(void)145 rte_mcfg_mempool_read_unlock(void)
146 {
147 	rte_rwlock_read_unlock(rte_mcfg_mempool_get_lock());
148 }
149 
150 void
rte_mcfg_mempool_write_lock(void)151 rte_mcfg_mempool_write_lock(void)
152 {
153 	rte_rwlock_write_lock(rte_mcfg_mempool_get_lock());
154 }
155 
156 void
rte_mcfg_mempool_write_unlock(void)157 rte_mcfg_mempool_write_unlock(void)
158 {
159 	rte_rwlock_write_unlock(rte_mcfg_mempool_get_lock());
160 }
161 
162 rte_spinlock_t *
rte_mcfg_timer_get_lock(void)163 rte_mcfg_timer_get_lock(void)
164 {
165 	return &rte_eal_get_configuration()->mem_config->tlock;
166 }
167 
168 void
rte_mcfg_timer_lock(void)169 rte_mcfg_timer_lock(void)
170 {
171 	rte_spinlock_lock(rte_mcfg_timer_get_lock());
172 }
173 
174 void
rte_mcfg_timer_unlock(void)175 rte_mcfg_timer_unlock(void)
176 {
177 	rte_spinlock_unlock(rte_mcfg_timer_get_lock());
178 }
179 
180 rte_spinlock_t *
rte_mcfg_ethdev_get_lock(void)181 rte_mcfg_ethdev_get_lock(void)
182 {
183 	return &rte_eal_get_configuration()->mem_config->ethdev_lock;
184 }
185 
186 bool
rte_mcfg_get_single_file_segments(void)187 rte_mcfg_get_single_file_segments(void)
188 {
189 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
190 	return (bool)mcfg->single_file_segments;
191 }
192