#include <rte_memory.h>
#include <rte_memzone.h>
#include <rte_pause.h>
+#include <rte_spinlock.h>
#include <rte_rwlock.h>
#include <rte_tailq.h>
*/
struct rte_mem_config {
volatile uint32_t magic; /**< Magic number - sanity check. */
+ uint32_t version;
+ /**< Prevent secondary processes using different DPDK versions. */
/* memory topology */
uint32_t nchannel; /**< Number of channels (0 if unknown). */
rte_rwlock_t mlock; /**< used by memzones for thread safety. */
rte_rwlock_t qlock; /**< used by tailqs for thread safety. */
rte_rwlock_t mplock; /**< used by mempool library for thread safety. */
+ rte_spinlock_t tlock; /**< used by timer library for thread safety. */
rte_rwlock_t memory_hotplug_lock;
/**< Indicates whether memory hotplug request is in progress. */
uint8_t dma_maskbits; /**< Keeps the more restricted dma mask. */
};
-static inline void
-rte_eal_mcfg_wait_complete(struct rte_mem_config *mcfg)
-{
- /* wait until shared mem_config finish initialising */
- while (mcfg->magic != RTE_MAGIC)
- rte_pause();
-}
+/* update internal config from shared mem config */
+void
+eal_mcfg_update_internal(void);
+
+/* update shared mem config from internal config */
+void
+eal_mcfg_update_from_internal(void);
+
+/* wait until primary process initialization is complete */
+void
+eal_mcfg_wait_complete(void);
+
+/* check if DPDK version of current process matches one stored in the config */
+int
+eal_mcfg_check_version(void);
+
+/* set mem config as complete */
+void
+eal_mcfg_complete(void);
#endif /* EAL_MEMCFG_H */