Blame include/memkind/internal/memkind_private.h

Packit Service 724aca
/*
Packit Service 724aca
 * Copyright (C) 2016 - 2019 Intel Corporation.
Packit Service 724aca
 * All rights reserved.
Packit Service 724aca
 *
Packit Service 724aca
 * Redistribution and use in source and binary forms, with or without
Packit Service 724aca
 * modification, are permitted provided that the following conditions are met:
Packit Service 724aca
 * 1. Redistributions of source code must retain the above copyright notice(s),
Packit Service 724aca
 *    this list of conditions and the following disclaimer.
Packit Service 724aca
 * 2. Redistributions in binary form must reproduce the above copyright notice(s),
Packit Service 724aca
 *    this list of conditions and the following disclaimer in the documentation
Packit Service 724aca
 *    and/or other materials provided with the distribution.
Packit Service 724aca
 *
Packit Service 724aca
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
Packit Service 724aca
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
Packit Service 724aca
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
Packit Service 724aca
 * EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
Packit Service 724aca
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Packit Service 724aca
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
Packit Service 724aca
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
Packit Service 724aca
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
Packit Service 724aca
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
Packit Service 724aca
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit Service 724aca
 */
Packit Service 724aca
Packit Service 724aca
#pragma once
Packit Service 724aca
#ifdef __cplusplus
Packit Service 724aca
extern "C" {
Packit Service 724aca
#endif
Packit Service 724aca
Packit Service 724aca
#include "memkind.h"
Packit Service 724aca
Packit Service 724aca
#include <stdbool.h>
Packit Service 724aca
#include <pthread.h>
Packit Service 724aca
Packit Service 724aca
#ifdef __GNUC__
Packit Service 724aca
#   define MEMKIND_LIKELY(x)       __builtin_expect(!!(x), 1)
Packit Service 724aca
#   define MEMKIND_UNLIKELY(x)     __builtin_expect(!!(x), 0)
Packit Service 724aca
#else
Packit Service 724aca
#   define MEMKIND_LIKELY(x)       (x)
Packit Service 724aca
#   define MEMKIND_UNLIKELY(x)     (x)
Packit Service 724aca
#endif
Packit Service 724aca
Packit Service 724aca
#ifndef MEMKIND_EXPORT
Packit Service 724aca
#   define MEMKIND_EXPORT __attribute__((visibility("default")))
Packit Service 724aca
#endif
Packit Service 724aca
Packit Service 724aca
// This ladder call is required due to meanders of C's preprocessor logic.
Packit Service 724aca
// Without it, JE_PREFIX would be used directly (i.e. 'JE_PREFIX') and not
Packit Service 724aca
// substituted with defined value.
Packit Service 724aca
#define JE_SYMBOL2(a, b) a ## b
Packit Service 724aca
#define JE_SYMBOL1(a, b) JE_SYMBOL2(a, b)
Packit Service 724aca
#define JE_SYMBOL(b)     JE_SYMBOL1(JE_PREFIX, b)
Packit Service 724aca
Packit Service 724aca
// Redefine symbols
Packit Service 724aca
#define jemk_malloc                 JE_SYMBOL(malloc)
Packit Service 724aca
#define jemk_mallocx                JE_SYMBOL(mallocx)
Packit Service 724aca
#define jemk_calloc                 JE_SYMBOL(calloc)
Packit Service 724aca
#define jemk_rallocx                JE_SYMBOL(rallocx)
Packit Service 724aca
#define jemk_realloc                JE_SYMBOL(realloc)
Packit Service 724aca
#define jemk_mallctl                JE_SYMBOL(mallctl)
Packit Service 724aca
#define jemk_memalign               JE_SYMBOL(memalign)
Packit Service 724aca
#define jemk_posix_memalign         JE_SYMBOL(posix_memalign)
Packit Service 724aca
#define jemk_free                   JE_SYMBOL(free)
Packit Service 724aca
#define jemk_dallocx                JE_SYMBOL(dallocx)
Packit Service 724aca
#define jemk_malloc_usable_size     JE_SYMBOL(malloc_usable_size)
Packit Service 724aca
Packit Service 724aca
enum memkind_const_private {
Packit Service 724aca
    MEMKIND_NAME_LENGTH_PRIV = 64
Packit Service 724aca
};
Packit Service 724aca
Packit Service 724aca
struct memkind_ops {
Packit Service 724aca
    int (* create)(struct memkind *kind, struct memkind_ops *ops, const char *name);
Packit Service 724aca
    int (* destroy)(struct memkind *kind);
Packit Service 724aca
    void *(* malloc)(struct memkind *kind, size_t size);
Packit Service 724aca
    void *(* calloc)(struct memkind *kind, size_t num, size_t size);
Packit Service 724aca
    int (* posix_memalign)(struct memkind *kind, void **memptr, size_t alignment,
Packit Service 724aca
                           size_t size);
Packit Service 724aca
    void *(* realloc)(struct memkind *kind, void *ptr, size_t size);
Packit Service 724aca
    void (* free)(struct memkind *kind, void *ptr);
Packit Service 724aca
    void *(* mmap)(struct memkind *kind, void *addr, size_t size);
Packit Service 724aca
    int (* mbind)(struct memkind *kind, void *ptr, size_t size);
Packit Service 724aca
    int (* madvise)(struct memkind *kind, void *addr, size_t size);
Packit Service 724aca
    int (* get_mmap_flags)(struct memkind *kind, int *flags);
Packit Service 724aca
    int (* get_mbind_mode)(struct memkind *kind, int *mode);
Packit Service 724aca
    int (* get_mbind_nodemask)(struct memkind *kind, unsigned long *nodemask,
Packit Service 724aca
                               unsigned long maxnode);
Packit Service 724aca
    int (* get_arena)(struct memkind *kind, unsigned int *arena, size_t size);
Packit Service 724aca
    int (* check_available)(struct memkind *kind);
Packit Service 724aca
    void (* init_once)(void);
Packit Service 724aca
    int (* finalize)(struct memkind *kind);
Packit Service 724aca
    size_t (* malloc_usable_size)(struct memkind *kind, void *ptr);
Packit Service 724aca
    int (* update_memory_usage_policy)(struct memkind *kind,
Packit Service 724aca
                                       memkind_mem_usage_policy policy);
Packit Service 724aca
    int (* get_stat)(memkind_t kind, memkind_stat_type stat, size_t *value);
Packit Service 724aca
    void *(* defrag_reallocate)(struct memkind *kind, void *ptr);
Packit Service 724aca
};
Packit Service 724aca
Packit Service 724aca
struct memkind {
Packit Service 724aca
    struct memkind_ops *ops;
Packit Service 724aca
    unsigned int partition;
Packit Service 724aca
    char name[MEMKIND_NAME_LENGTH_PRIV];
Packit Service 724aca
    pthread_once_t init_once;
Packit Service 724aca
    unsigned int arena_map_len; // is power of 2
Packit Service 724aca
    unsigned int *arena_map; // To be deleted beyond 1.2.0+
Packit Service 724aca
    pthread_key_t arena_key;
Packit Service 724aca
    void *priv;
Packit Service 724aca
    unsigned int
Packit Service 724aca
    arena_map_mask; // arena_map_len - 1 to optimize modulo operation on arena_map_len
Packit Service 724aca
    unsigned int arena_zero; // index first jemalloc arena of this kind
Packit Service 724aca
};
Packit Service 724aca
Packit Service 724aca
struct memkind_config {
Packit Service 724aca
    const char *pmem_dir;            //PMEM kind path
Packit Service 724aca
    size_t pmem_size;                //PMEM kind size
Packit Service 724aca
    memkind_mem_usage_policy policy; //kind memory usage policy
Packit Service 724aca
};
Packit Service 724aca
Packit Service 724aca
void memkind_init(memkind_t kind, bool check_numa);
Packit Service 724aca
Packit Service 724aca
void *kind_mmap(struct memkind *kind, void *addr, size_t size);
Packit Service 724aca
Packit Service 724aca
#ifdef __cplusplus
Packit Service 724aca
}
Packit Service 724aca
#endif
Packit Service 724aca