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)13eal_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)28eal_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)37eal_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)49eal_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)60eal_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)73rte_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)79rte_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)85rte_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)91rte_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)97rte_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)103rte_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)109rte_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)115rte_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)121rte_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)127rte_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)133rte_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)139rte_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)145rte_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)151rte_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)157rte_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)163rte_mcfg_timer_get_lock(void) 164 { 165 return &rte_eal_get_configuration()->mem_config->tlock; 166 } 167 168 void rte_mcfg_timer_lock(void)169rte_mcfg_timer_lock(void) 170 { 171 rte_spinlock_lock(rte_mcfg_timer_get_lock()); 172 } 173 174 void rte_mcfg_timer_unlock(void)175rte_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)181rte_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)187rte_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