root/opal/mca/mpool/base/mpool_base_default.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. mca_mpool_default_alloc
  2. mca_mpool_default_realloc
  3. mca_mpool_default_free
  4. mca_mpool_default_finalize

   1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
   2 /*
   3  * Copyright (c) 2015      Los Alamos National Security, LLC. All rights
   4  *                         reserved.
   5  * Copyright (c) 2016      Intel, Inc. All rights reserved.
   6  * $COPYRIGHT$
   7  *
   8  * Additional copyrights may follow
   9  *
  10  * $HEADER$
  11  */
  12 
  13 #include "opal_config.h"
  14 #include "opal/align.h"
  15 
  16 #include <stdio.h>
  17 #include <stdlib.h>
  18 #ifdef HAVE_UNISTD_H
  19 #include <unistd.h>
  20 #endif  /* HAVE_UNISTD_H */
  21 
  22 #include "opal/mca/mca.h"
  23 #include "opal/mca/base/base.h"
  24 #include "opal/mca/mpool/base/base.h"
  25 #include "opal/constants.h"
  26 #include "opal/util/sys_limits.h"
  27 
  28 static void *mca_mpool_default_alloc (mca_mpool_base_module_t *mpool, size_t size,
  29                                       size_t align, uint32_t flags)
  30 {
  31 #if HAVE_POSIX_MEMALIGN
  32     void *addr = NULL;
  33 
  34     if (align <= sizeof(void *)) {
  35         addr = malloc (size);
  36     } else {
  37         (void) posix_memalign (&addr, align, size);
  38     }
  39     return addr;
  40 #else
  41     void *addr, *ret;
  42 
  43     addr = malloc (size + align + sizeof (void *));
  44     ret = OPAL_ALIGN_PTR((intptr_t) addr + 8, align, void *);
  45     *((void **) ret - 1) = addr;
  46     return ret;
  47 #endif
  48 }
  49 
  50 static void *mca_mpool_default_realloc (mca_mpool_base_module_t *mpool, void *addr, size_t size)
  51 {
  52 #if HAVE_POSIX_MEMALIGN
  53     return realloc (addr, size);
  54 #else
  55     if (NULL != addr) {
  56         void *base = *((void **) addr - 1);
  57         void *ptr = realloc (base, size + (intptr_t) addr - (intptr_t) - size);
  58         void *ret = (void *)((intptr_t) ptr + (intptr_t) addr - (intptr_t) - size);
  59         *((void **) ret - 1) = ptr;
  60         return ret;
  61     } else {
  62         return mca_mpool_default_alloc (mpool, size, 8, 0);
  63     }
  64 #endif
  65 }
  66 
  67 static void mca_mpool_default_free (mca_mpool_base_module_t *mpool, void *addr)
  68 {
  69 #if HAVE_POSIX_MEMALIGN
  70     free (addr);
  71 #else
  72     if (NULL != addr) {
  73         void *base = *((void **) addr - 1);
  74         free (base);
  75     }
  76 #endif
  77 }
  78 
  79 static void mca_mpool_default_finalize (struct mca_mpool_base_module_t *mpool)
  80 {
  81 }
  82 
  83 static mca_mpool_base_module_t mca_mpool_malloc_module = {
  84     .mpool_alloc = mca_mpool_default_alloc,
  85     .mpool_realloc = mca_mpool_default_realloc,
  86     .mpool_free = mca_mpool_default_free,
  87     .mpool_finalize = mca_mpool_default_finalize,
  88     .flags = MCA_MPOOL_FLAGS_MPI_ALLOC_MEM,
  89 };
  90 
  91 mca_mpool_base_module_t *mca_mpool_base_default_module = &mca_mpool_malloc_module;

/* [<][>][^][v][top][bottom][index][help] */