Define MADV_FREE on our own when needed.
On x86 Linux, we define our own MADV_FREE if madvise(2) is available, but no MADV_FREE is detected. This allows the feature to be built in and enabled with runtime detection.
This commit is contained in:
parent
fc83de0384
commit
31ab38be5f
@ -1824,6 +1824,15 @@ if test "x${je_cv_madvise}" = "xyes" ; then
|
|||||||
], [je_cv_madv_free])
|
], [je_cv_madv_free])
|
||||||
if test "x${je_cv_madv_free}" = "xyes" ; then
|
if test "x${je_cv_madv_free}" = "xyes" ; then
|
||||||
AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
|
AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
|
||||||
|
elif test "x${je_cv_madvise}" = "xyes" ; then
|
||||||
|
case "${host_cpu}" in i686|x86_64)
|
||||||
|
case "${host}" in *-*-linux*)
|
||||||
|
AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
|
||||||
|
AC_DEFINE([JEMALLOC_DEFINE_MADVISE_FREE], [ ])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl Check for madvise(..., MADV_DONTNEED).
|
dnl Check for madvise(..., MADV_DONTNEED).
|
||||||
|
@ -285,6 +285,9 @@
|
|||||||
#undef JEMALLOC_PURGE_MADVISE_DONTNEED
|
#undef JEMALLOC_PURGE_MADVISE_DONTNEED
|
||||||
#undef JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS
|
#undef JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS
|
||||||
|
|
||||||
|
/* Defined if madvise(2) is available but MADV_FREE is not (x86 Linux only). */
|
||||||
|
#undef JEMALLOC_DEFINE_MADVISE_FREE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defined if transparent huge pages (THPs) are supported via the
|
* Defined if transparent huge pages (THPs) are supported via the
|
||||||
* MADV_[NO]HUGEPAGE arguments to madvise(2), and THP support is enabled.
|
* MADV_[NO]HUGEPAGE arguments to madvise(2), and THP support is enabled.
|
||||||
|
@ -47,6 +47,10 @@
|
|||||||
#endif
|
#endif
|
||||||
#include "jemalloc/internal/hooks.h"
|
#include "jemalloc/internal/hooks.h"
|
||||||
|
|
||||||
|
#ifdef JEMALLOC_DEFINE_MADVISE_FREE
|
||||||
|
# define JEMALLOC_MADV_FREE 8
|
||||||
|
#endif
|
||||||
|
|
||||||
static const bool config_debug =
|
static const bool config_debug =
|
||||||
#ifdef JEMALLOC_DEBUG
|
#ifdef JEMALLOC_DEBUG
|
||||||
true
|
true
|
||||||
|
@ -269,7 +269,13 @@ pages_purge_lazy(void *addr, size_t size) {
|
|||||||
VirtualAlloc(addr, size, MEM_RESET, PAGE_READWRITE);
|
VirtualAlloc(addr, size, MEM_RESET, PAGE_READWRITE);
|
||||||
return false;
|
return false;
|
||||||
#elif defined(JEMALLOC_PURGE_MADVISE_FREE)
|
#elif defined(JEMALLOC_PURGE_MADVISE_FREE)
|
||||||
return (madvise(addr, size, MADV_FREE) != 0);
|
return (madvise(addr, size,
|
||||||
|
# ifdef MADV_FREE
|
||||||
|
MADV_FREE
|
||||||
|
# else
|
||||||
|
JEMALLOC_MADV_FREE
|
||||||
|
# endif
|
||||||
|
) != 0);
|
||||||
#elif defined(JEMALLOC_PURGE_MADVISE_DONTNEED) && \
|
#elif defined(JEMALLOC_PURGE_MADVISE_DONTNEED) && \
|
||||||
!defined(JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS)
|
!defined(JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS)
|
||||||
return (madvise(addr, size, MADV_DONTNEED) != 0);
|
return (madvise(addr, size, MADV_DONTNEED) != 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user