examples/ip_frag: fix use of ethdev internal device array
[dpdk.git] / lib / librte_eal / common / eal_memcfg.h
index e5b90e3..359beb2 100644 (file)
@@ -11,6 +11,7 @@
 #include <rte_memory.h>
 #include <rte_memzone.h>
 #include <rte_pause.h>
+#include <rte_spinlock.h>
 #include <rte_rwlock.h>
 #include <rte_tailq.h>
 
@@ -19,6 +20,8 @@
  */
 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). */
@@ -34,6 +37,7 @@ struct rte_mem_config {
        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. */
@@ -69,12 +73,24 @@ struct rte_mem_config {
        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 */