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