[dpdk-dev] [PATCH 25/25] eal: hide shared memory config

David Marchand david.marchand at redhat.com
Wed May 29 22:14:57 CEST 2019


On Wed, May 29, 2019 at 6:32 PM Anatoly Burakov <anatoly.burakov at intel.com>
wrote:

> diff --git a/lib/librte_eal/common/eal_memcfg.h
> b/lib/librte_eal/common/eal_memcfg.h
> new file mode 100644
> index 000000000..75891e6cb
> --- /dev/null
> +++ b/lib/librte_eal/common/eal_memcfg.h
> @@ -0,0 +1,75 @@
>

Missing a license banner here ?


+#ifndef EAL_MEMCFG_H
> +#define EAL_MEMCFG_H
> +
> +#include <rte_config.h>
> +#include <rte_eal_memconfig.h>
> +#include <rte_malloc_heap.h>
> +#include <rte_memory.h>
> +#include <rte_memzone.h>
> +#include <rte_pause.h>
> +#include <rte_rwlock.h>
> +#include <rte_tailq.h>
> +
> +/**
> + * the structure for the memory configuration for the RTE.
> + * Used by the rte_config structure. It is separated out, as for
> multi-process
> + * support, the memory details should be shared across instances
> + */
> +struct rte_mem_config {
> +       volatile uint32_t magic;   /**< Magic number - Sanity check. */
> +
> +       /* memory topology */
> +       uint32_t nchannel;    /**< Number of channels (0 if unknown). */
> +       uint32_t nrank;       /**< Number of ranks (0 if unknown). */
> +
> +       /**
> +        * current lock nest order
> +        *  - qlock->mlock (ring/hash/lpm)
> +        *  - mplock->qlock->mlock (mempool)
> +        * Notice:
> +        *  *ALWAYS* obtain qlock first if having to obtain both qlock and
> mlock
> +        */
> +       rte_rwlock_t mlock;   /**< only used by memzone LIB for
> thread-safe. */
> +       rte_rwlock_t qlock;   /**< used for tailq operation for thread
> safe. */
> +       rte_rwlock_t mplock;  /**< only used by mempool LIB for
> thread-safe. */
> +
> +       rte_rwlock_t memory_hotplug_lock;
> +       /**< indicates whether memory hotplug request is in progress. */
> +
> +       /* memory segments and zones */
> +       struct rte_fbarray memzones; /**< Memzone descriptors. */
> +
> +       struct rte_memseg_list memsegs[RTE_MAX_MEMSEG_LISTS];
> +       /**< list of dynamic arrays holding memsegs */
> +
> +       struct rte_tailq_head tailq_head[RTE_MAX_TAILQ];
> +       /**< Tailqs for objects */
> +
> +       /* Heaps of Malloc */
> +       struct malloc_heap malloc_heaps[RTE_MAX_HEAPS];
> +
> +       /* next socket ID for external malloc heap */
> +       int next_socket_id;
> +
> +       /* address of mem_config in primary process. used to map shared
> config
> +        * into exact same address the primary process maps it.
> +        */
> +       uint64_t mem_cfg_addr;
> +
> +       /* legacy mem and single file segments options are shared */
> +       uint32_t legacy_mem;
> +       uint32_t single_file_segments;
> +
> +       /* keeps the more restricted dma mask */
> +       uint8_t dma_maskbits;
> +} __attribute__((packed));
> +
> +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();
> +}
>

A bit similar to what Stephen said, this could be in a .c.


-- 
David Marchand


More information about the dev mailing list