ipc: end multiprocess thread during cleanup
[dpdk.git] / lib / eal / common / malloc_elem.h
index 262d69b..f2aa988 100644 (file)
@@ -27,7 +27,13 @@ struct malloc_elem {
        LIST_ENTRY(malloc_elem) free_list;
        /**< list of free elements in heap */
        struct rte_memseg_list *msl;
-       volatile enum elem_state state;
+       /** Element state, @c dirty and @c pad validity depends on it. */
+       /* An extra bit is needed to represent enum elem_state as signed int. */
+       enum elem_state state : 3;
+       /** If state == ELEM_FREE: the memory is not filled with zeroes. */
+       uint32_t dirty : 1;
+       /** Reserved for future use. */
+       uint32_t reserved : 28;
        uint32_t pad;
        size_t size;
        struct malloc_elem *orig_elem;
@@ -104,8 +110,16 @@ malloc_elem_cookies_ok(const struct malloc_elem *elem)
 
 #ifdef RTE_MALLOC_ASAN
 
+/*
+ * ASAN_SHADOW_OFFSET should match to the corresponding
+ * value defined in gcc/libsanitizer/asan/asan_mapping.h
+ */
 #ifdef RTE_ARCH_X86_64
 #define ASAN_SHADOW_OFFSET    0x00007fff8000
+#elif defined(RTE_ARCH_ARM64)
+#define ASAN_SHADOW_OFFSET    0x001000000000
+#elif defined(RTE_ARCH_PPC_64)
+#define ASAN_SHADOW_OFFSET    0x020000000000
 #endif
 
 #define ASAN_SHADOW_GRAIN_SIZE 8
@@ -312,7 +326,8 @@ malloc_elem_init(struct malloc_elem *elem,
                struct rte_memseg_list *msl,
                size_t size,
                struct malloc_elem *orig_elem,
-               size_t orig_size);
+               size_t orig_size,
+               bool dirty);
 
 void
 malloc_elem_insert(struct malloc_elem *elem);