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 while (mcfg->magic != RTE_MAGIC) 34 rte_pause(); 35 } 36 37 int eal_mcfg_check_version(void)38eal_mcfg_check_version(void) 39 { 40 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 41 42 /* check if version from memconfig matches compiled in macro */ 43 if (mcfg->version != RTE_VERSION) 44 return -1; 45 46 return 0; 47 } 48 49 void eal_mcfg_update_internal(void)50eal_mcfg_update_internal(void) 51 { 52 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 53 struct internal_config *internal_conf = 54 eal_get_internal_configuration(); 55 56 internal_conf->legacy_mem = mcfg->legacy_mem; 57 internal_conf->single_file_segments = mcfg->single_file_segments; 58 } 59 60 void eal_mcfg_update_from_internal(void)61eal_mcfg_update_from_internal(void) 62 { 63 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 64 const struct internal_config *internal_conf = 65 eal_get_internal_configuration(); 66 67 mcfg->legacy_mem = internal_conf->legacy_mem; 68 mcfg->single_file_segments = internal_conf->single_file_segments; 69 /* record current DPDK version */ 70 mcfg->version = RTE_VERSION; 71 } 72 73 void rte_mcfg_mem_read_lock(void)74rte_mcfg_mem_read_lock(void) 75 { 76 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 77 rte_rwlock_read_lock(&mcfg->memory_hotplug_lock); 78 } 79 80 void rte_mcfg_mem_read_unlock(void)81rte_mcfg_mem_read_unlock(void) 82 { 83 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 84 rte_rwlock_read_unlock(&mcfg->memory_hotplug_lock); 85 } 86 87 void rte_mcfg_mem_write_lock(void)88rte_mcfg_mem_write_lock(void) 89 { 90 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 91 rte_rwlock_write_lock(&mcfg->memory_hotplug_lock); 92 } 93 94 void rte_mcfg_mem_write_unlock(void)95rte_mcfg_mem_write_unlock(void) 96 { 97 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 98 rte_rwlock_write_unlock(&mcfg->memory_hotplug_lock); 99 } 100 101 void rte_mcfg_tailq_read_lock(void)102rte_mcfg_tailq_read_lock(void) 103 { 104 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 105 rte_rwlock_read_lock(&mcfg->qlock); 106 } 107 108 void rte_mcfg_tailq_read_unlock(void)109rte_mcfg_tailq_read_unlock(void) 110 { 111 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 112 rte_rwlock_read_unlock(&mcfg->qlock); 113 } 114 115 void rte_mcfg_tailq_write_lock(void)116rte_mcfg_tailq_write_lock(void) 117 { 118 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 119 rte_rwlock_write_lock(&mcfg->qlock); 120 } 121 122 void rte_mcfg_tailq_write_unlock(void)123rte_mcfg_tailq_write_unlock(void) 124 { 125 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 126 rte_rwlock_write_unlock(&mcfg->qlock); 127 } 128 129 void rte_mcfg_mempool_read_lock(void)130rte_mcfg_mempool_read_lock(void) 131 { 132 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 133 rte_rwlock_read_lock(&mcfg->mplock); 134 } 135 136 void rte_mcfg_mempool_read_unlock(void)137rte_mcfg_mempool_read_unlock(void) 138 { 139 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 140 rte_rwlock_read_unlock(&mcfg->mplock); 141 } 142 143 void rte_mcfg_mempool_write_lock(void)144rte_mcfg_mempool_write_lock(void) 145 { 146 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 147 rte_rwlock_write_lock(&mcfg->mplock); 148 } 149 150 void rte_mcfg_mempool_write_unlock(void)151rte_mcfg_mempool_write_unlock(void) 152 { 153 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 154 rte_rwlock_write_unlock(&mcfg->mplock); 155 } 156 157 void rte_mcfg_timer_lock(void)158rte_mcfg_timer_lock(void) 159 { 160 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 161 rte_spinlock_lock(&mcfg->tlock); 162 } 163 164 void rte_mcfg_timer_unlock(void)165rte_mcfg_timer_unlock(void) 166 { 167 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 168 rte_spinlock_unlock(&mcfg->tlock); 169 } 170 171 bool rte_mcfg_get_single_file_segments(void)172rte_mcfg_get_single_file_segments(void) 173 { 174 struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; 175 return (bool)mcfg->single_file_segments; 176 } 177