[ovs-dev] [PATCH 4/4] util: Use posix_memalign for xmalloc_cacheline if available

YAMAMOTO Takashi yamamoto at valinux.co.jp
Sat May 3 00:01:04 UTC 2014


A malloc library is expected to provide a better implementation
using the knowledge of its internal details.

Signed-off-by: YAMAMOTO Takashi <yamamoto at valinux.co.jp>
---
 lib/util.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/lib/util.c b/lib/util.c
index 464d730..37d2ba0 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -189,6 +189,18 @@ BUILD_ASSERT_DECL(CACHE_LINE_SIZE >= MEM_ALIGN);
 void *
 xmalloc_cacheline(size_t size)
 {
+#ifdef HAVE_POSIX_MEMALIGN
+    void *p;
+    int error;
+
+    ovs_assert(size != 0);
+    COVERAGE_INC(util_xalloc);
+    error = posix_memalign(&p, CACHE_LINE_SIZE, size);
+    if (error != 0) {
+        out_of_memory();
+    }
+    return p;
+#else
     void **payload;
     void *base;
 
@@ -212,6 +224,7 @@ xmalloc_cacheline(size_t size)
     *payload = base;
 
     return (char *) payload + MEM_ALIGN;
+#endif
 }
 
 /* Like xmalloc_cacheline() but clears the allocated memory to all zero
@@ -229,9 +242,13 @@ xzalloc_cacheline(size_t size)
 void
 free_cacheline(void *p)
 {
+#ifdef HAVE_POSIX_MEMALIGN
+    free(p);
+#else
     if (p) {
         free(*(void **) ((uintptr_t) p - MEM_ALIGN));
     }
+#endif
 }
 
 char *
-- 
1.8.3.1




More information about the dev mailing list