xref: /dpdk/lib/eal/common/eal_common_mcfg.c (revision 2a7a42a5918af42dbf229d30dbba13697e68320f)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(c) 2019 Intel Corporation
399a2dd95SBruce Richardson  */
499a2dd95SBruce Richardson 
599a2dd95SBruce Richardson #include <rte_eal_memconfig.h>
699a2dd95SBruce Richardson #include <rte_version.h>
799a2dd95SBruce Richardson 
899a2dd95SBruce Richardson #include "eal_internal_cfg.h"
999a2dd95SBruce Richardson #include "eal_memcfg.h"
1099a2dd95SBruce Richardson #include "eal_private.h"
1199a2dd95SBruce Richardson 
1299a2dd95SBruce Richardson void
eal_mcfg_complete(void)1399a2dd95SBruce Richardson eal_mcfg_complete(void)
1499a2dd95SBruce Richardson {
1599a2dd95SBruce Richardson 	struct rte_config *cfg = rte_eal_get_configuration();
1699a2dd95SBruce Richardson 	struct rte_mem_config *mcfg = cfg->mem_config;
1799a2dd95SBruce Richardson 	struct internal_config *internal_conf =
1899a2dd95SBruce Richardson 		eal_get_internal_configuration();
1999a2dd95SBruce Richardson 
2099a2dd95SBruce Richardson 	/* ALL shared mem_config related INIT DONE */
2199a2dd95SBruce Richardson 	if (cfg->process_type == RTE_PROC_PRIMARY)
2299a2dd95SBruce Richardson 		mcfg->magic = RTE_MAGIC;
2399a2dd95SBruce Richardson 
2499a2dd95SBruce Richardson 	internal_conf->init_complete = 1;
2599a2dd95SBruce Richardson }
2699a2dd95SBruce Richardson 
2799a2dd95SBruce Richardson void
eal_mcfg_wait_complete(void)2899a2dd95SBruce Richardson eal_mcfg_wait_complete(void)
2999a2dd95SBruce Richardson {
3099a2dd95SBruce Richardson 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
3199a2dd95SBruce Richardson 
3299a2dd95SBruce Richardson 	/* wait until shared mem_config finish initialising */
33*2a7a42a5STyler Retzlaff 	rte_wait_until_equal_32(&mcfg->magic, RTE_MAGIC, rte_memory_order_relaxed);
3499a2dd95SBruce Richardson }
3599a2dd95SBruce Richardson 
3699a2dd95SBruce Richardson int
eal_mcfg_check_version(void)3799a2dd95SBruce Richardson eal_mcfg_check_version(void)
3899a2dd95SBruce Richardson {
3999a2dd95SBruce Richardson 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
4099a2dd95SBruce Richardson 
4199a2dd95SBruce Richardson 	/* check if version from memconfig matches compiled in macro */
4299a2dd95SBruce Richardson 	if (mcfg->version != RTE_VERSION)
4399a2dd95SBruce Richardson 		return -1;
4499a2dd95SBruce Richardson 
4599a2dd95SBruce Richardson 	return 0;
4699a2dd95SBruce Richardson }
4799a2dd95SBruce Richardson 
4899a2dd95SBruce Richardson void
eal_mcfg_update_internal(void)4999a2dd95SBruce Richardson eal_mcfg_update_internal(void)
5099a2dd95SBruce Richardson {
5199a2dd95SBruce Richardson 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
5299a2dd95SBruce Richardson 	struct internal_config *internal_conf =
5399a2dd95SBruce Richardson 		eal_get_internal_configuration();
5499a2dd95SBruce Richardson 
5599a2dd95SBruce Richardson 	internal_conf->legacy_mem = mcfg->legacy_mem;
5699a2dd95SBruce Richardson 	internal_conf->single_file_segments = mcfg->single_file_segments;
5799a2dd95SBruce Richardson }
5899a2dd95SBruce Richardson 
5999a2dd95SBruce Richardson void
eal_mcfg_update_from_internal(void)6099a2dd95SBruce Richardson eal_mcfg_update_from_internal(void)
6199a2dd95SBruce Richardson {
6299a2dd95SBruce Richardson 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
6399a2dd95SBruce Richardson 	const struct internal_config *internal_conf =
6499a2dd95SBruce Richardson 		eal_get_internal_configuration();
6599a2dd95SBruce Richardson 
6699a2dd95SBruce Richardson 	mcfg->legacy_mem = internal_conf->legacy_mem;
6799a2dd95SBruce Richardson 	mcfg->single_file_segments = internal_conf->single_file_segments;
6899a2dd95SBruce Richardson 	/* record current DPDK version */
6999a2dd95SBruce Richardson 	mcfg->version = RTE_VERSION;
7099a2dd95SBruce Richardson }
7199a2dd95SBruce Richardson 
720c156487SDavid Marchand rte_rwlock_t *
rte_mcfg_mem_get_lock(void)730c156487SDavid Marchand rte_mcfg_mem_get_lock(void)
740c156487SDavid Marchand {
750c156487SDavid Marchand 	return &rte_eal_get_configuration()->mem_config->memory_hotplug_lock;
760c156487SDavid Marchand }
770c156487SDavid Marchand 
7899a2dd95SBruce Richardson void
rte_mcfg_mem_read_lock(void)7999a2dd95SBruce Richardson rte_mcfg_mem_read_lock(void)
8099a2dd95SBruce Richardson {
810c156487SDavid Marchand 	rte_rwlock_read_lock(rte_mcfg_mem_get_lock());
8299a2dd95SBruce Richardson }
8399a2dd95SBruce Richardson 
8499a2dd95SBruce Richardson void
rte_mcfg_mem_read_unlock(void)8599a2dd95SBruce Richardson rte_mcfg_mem_read_unlock(void)
8699a2dd95SBruce Richardson {
870c156487SDavid Marchand 	rte_rwlock_read_unlock(rte_mcfg_mem_get_lock());
8899a2dd95SBruce Richardson }
8999a2dd95SBruce Richardson 
9099a2dd95SBruce Richardson void
rte_mcfg_mem_write_lock(void)9199a2dd95SBruce Richardson rte_mcfg_mem_write_lock(void)
9299a2dd95SBruce Richardson {
930c156487SDavid Marchand 	rte_rwlock_write_lock(rte_mcfg_mem_get_lock());
9499a2dd95SBruce Richardson }
9599a2dd95SBruce Richardson 
9699a2dd95SBruce Richardson void
rte_mcfg_mem_write_unlock(void)9799a2dd95SBruce Richardson rte_mcfg_mem_write_unlock(void)
9899a2dd95SBruce Richardson {
990c156487SDavid Marchand 	rte_rwlock_write_unlock(rte_mcfg_mem_get_lock());
1000c156487SDavid Marchand }
1010c156487SDavid Marchand 
1020c156487SDavid Marchand rte_rwlock_t *
rte_mcfg_tailq_get_lock(void)1030c156487SDavid Marchand rte_mcfg_tailq_get_lock(void)
1040c156487SDavid Marchand {
1050c156487SDavid Marchand 	return &rte_eal_get_configuration()->mem_config->qlock;
10699a2dd95SBruce Richardson }
10799a2dd95SBruce Richardson 
10899a2dd95SBruce Richardson void
rte_mcfg_tailq_read_lock(void)10999a2dd95SBruce Richardson rte_mcfg_tailq_read_lock(void)
11099a2dd95SBruce Richardson {
1110c156487SDavid Marchand 	rte_rwlock_read_lock(rte_mcfg_tailq_get_lock());
11299a2dd95SBruce Richardson }
11399a2dd95SBruce Richardson 
11499a2dd95SBruce Richardson void
rte_mcfg_tailq_read_unlock(void)11599a2dd95SBruce Richardson rte_mcfg_tailq_read_unlock(void)
11699a2dd95SBruce Richardson {
1170c156487SDavid Marchand 	rte_rwlock_read_unlock(rte_mcfg_tailq_get_lock());
11899a2dd95SBruce Richardson }
11999a2dd95SBruce Richardson 
12099a2dd95SBruce Richardson void
rte_mcfg_tailq_write_lock(void)12199a2dd95SBruce Richardson rte_mcfg_tailq_write_lock(void)
12299a2dd95SBruce Richardson {
1230c156487SDavid Marchand 	rte_rwlock_write_lock(rte_mcfg_tailq_get_lock());
12499a2dd95SBruce Richardson }
12599a2dd95SBruce Richardson 
12699a2dd95SBruce Richardson void
rte_mcfg_tailq_write_unlock(void)12799a2dd95SBruce Richardson rte_mcfg_tailq_write_unlock(void)
12899a2dd95SBruce Richardson {
1290c156487SDavid Marchand 	rte_rwlock_write_unlock(rte_mcfg_tailq_get_lock());
1300c156487SDavid Marchand }
1310c156487SDavid Marchand 
1320c156487SDavid Marchand rte_rwlock_t *
rte_mcfg_mempool_get_lock(void)1330c156487SDavid Marchand rte_mcfg_mempool_get_lock(void)
1340c156487SDavid Marchand {
1350c156487SDavid Marchand 	return &rte_eal_get_configuration()->mem_config->mplock;
13699a2dd95SBruce Richardson }
13799a2dd95SBruce Richardson 
13899a2dd95SBruce Richardson void
rte_mcfg_mempool_read_lock(void)13999a2dd95SBruce Richardson rte_mcfg_mempool_read_lock(void)
14099a2dd95SBruce Richardson {
1410c156487SDavid Marchand 	rte_rwlock_read_lock(rte_mcfg_mempool_get_lock());
14299a2dd95SBruce Richardson }
14399a2dd95SBruce Richardson 
14499a2dd95SBruce Richardson void
rte_mcfg_mempool_read_unlock(void)14599a2dd95SBruce Richardson rte_mcfg_mempool_read_unlock(void)
14699a2dd95SBruce Richardson {
1470c156487SDavid Marchand 	rte_rwlock_read_unlock(rte_mcfg_mempool_get_lock());
14899a2dd95SBruce Richardson }
14999a2dd95SBruce Richardson 
15099a2dd95SBruce Richardson void
rte_mcfg_mempool_write_lock(void)15199a2dd95SBruce Richardson rte_mcfg_mempool_write_lock(void)
15299a2dd95SBruce Richardson {
1530c156487SDavid Marchand 	rte_rwlock_write_lock(rte_mcfg_mempool_get_lock());
15499a2dd95SBruce Richardson }
15599a2dd95SBruce Richardson 
15699a2dd95SBruce Richardson void
rte_mcfg_mempool_write_unlock(void)15799a2dd95SBruce Richardson rte_mcfg_mempool_write_unlock(void)
15899a2dd95SBruce Richardson {
1590c156487SDavid Marchand 	rte_rwlock_write_unlock(rte_mcfg_mempool_get_lock());
1600c156487SDavid Marchand }
1610c156487SDavid Marchand 
1620c156487SDavid Marchand rte_spinlock_t *
rte_mcfg_timer_get_lock(void)1630c156487SDavid Marchand rte_mcfg_timer_get_lock(void)
1640c156487SDavid Marchand {
1650c156487SDavid Marchand 	return &rte_eal_get_configuration()->mem_config->tlock;
16699a2dd95SBruce Richardson }
16799a2dd95SBruce Richardson 
16899a2dd95SBruce Richardson void
rte_mcfg_timer_lock(void)16999a2dd95SBruce Richardson rte_mcfg_timer_lock(void)
17099a2dd95SBruce Richardson {
1710c156487SDavid Marchand 	rte_spinlock_lock(rte_mcfg_timer_get_lock());
17299a2dd95SBruce Richardson }
17399a2dd95SBruce Richardson 
17499a2dd95SBruce Richardson void
rte_mcfg_timer_unlock(void)17599a2dd95SBruce Richardson rte_mcfg_timer_unlock(void)
17699a2dd95SBruce Richardson {
1770c156487SDavid Marchand 	rte_spinlock_unlock(rte_mcfg_timer_get_lock());
17899a2dd95SBruce Richardson }
17999a2dd95SBruce Richardson 
1805fa33785SDavid Marchand rte_spinlock_t *
rte_mcfg_ethdev_get_lock(void)1815fa33785SDavid Marchand rte_mcfg_ethdev_get_lock(void)
1825fa33785SDavid Marchand {
1835fa33785SDavid Marchand 	return &rte_eal_get_configuration()->mem_config->ethdev_lock;
1845fa33785SDavid Marchand }
1855fa33785SDavid Marchand 
18699a2dd95SBruce Richardson bool
rte_mcfg_get_single_file_segments(void)18799a2dd95SBruce Richardson rte_mcfg_get_single_file_segments(void)
18899a2dd95SBruce Richardson {
18999a2dd95SBruce Richardson 	struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
19099a2dd95SBruce Richardson 	return (bool)mcfg->single_file_segments;
19199a2dd95SBruce Richardson }
192