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 Richardsoneal_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 Richardsoneal_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 Richardsoneal_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 Richardsoneal_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 Richardsoneal_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 Marchandrte_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 Richardsonrte_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 Richardsonrte_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 Richardsonrte_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 Richardsonrte_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 Marchandrte_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 Richardsonrte_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 Richardsonrte_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 Richardsonrte_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 Richardsonrte_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 Marchandrte_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 Richardsonrte_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 Richardsonrte_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 Richardsonrte_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 Richardsonrte_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 Marchandrte_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 Richardsonrte_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 Richardsonrte_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 Marchandrte_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 Richardsonrte_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