1dnl # 2dnl # Enabled by default it provides a minimal level of memory tracking. 3dnl # A total count of bytes allocated is kept for each alloc and free. 4dnl # Then at module unload time a report to the console will be printed 5dnl # if memory was leaked. 6dnl # 7AC_DEFUN([SPL_AC_DEBUG_KMEM], [ 8 AC_ARG_ENABLE([debug-kmem], 9 [AS_HELP_STRING([--enable-debug-kmem], 10 [Enable basic kmem accounting @<:@default=no@:>@])], 11 [], 12 [enable_debug_kmem=no]) 13 14 AS_IF([test "x$enable_debug_kmem" = xyes], 15 [ 16 KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM" 17 DEBUG_KMEM="_with_debug_kmem" 18 AC_DEFINE([DEBUG_KMEM], [1], 19 [Define to 1 to enable basic kmem accounting]) 20 ], [ 21 DEBUG_KMEM="_without_debug_kmem" 22 ]) 23 24 AC_SUBST(DEBUG_KMEM) 25 AC_MSG_CHECKING([whether basic kmem accounting is enabled]) 26 AC_MSG_RESULT([$enable_debug_kmem]) 27]) 28 29dnl # 30dnl # Disabled by default it provides detailed memory tracking. This 31dnl # feature also requires --enable-debug-kmem to be set. When enabled 32dnl # not only will total bytes be tracked but also the location of every 33dnl # alloc and free. When the SPL module is unloaded a list of all leaked 34dnl # addresses and where they were allocated will be dumped to the console. 35dnl # Enabling this feature has a significant impact on performance but it 36dnl # makes finding memory leaks pretty straight forward. 37dnl # 38AC_DEFUN([SPL_AC_DEBUG_KMEM_TRACKING], [ 39 AC_ARG_ENABLE([debug-kmem-tracking], 40 [AS_HELP_STRING([--enable-debug-kmem-tracking], 41 [Enable detailed kmem tracking @<:@default=no@:>@])], 42 [], 43 [enable_debug_kmem_tracking=no]) 44 45 AS_IF([test "x$enable_debug_kmem_tracking" = xyes], 46 [ 47 KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM_TRACKING" 48 DEBUG_KMEM_TRACKING="_with_debug_kmem_tracking" 49 AC_DEFINE([DEBUG_KMEM_TRACKING], [1], 50 [Define to 1 to enable detailed kmem tracking]) 51 ], [ 52 DEBUG_KMEM_TRACKING="_without_debug_kmem_tracking" 53 ]) 54 55 AC_SUBST(DEBUG_KMEM_TRACKING) 56 AC_MSG_CHECKING([whether detailed kmem tracking is enabled]) 57 AC_MSG_RESULT([$enable_debug_kmem_tracking]) 58]) 59 60dnl # 61dnl # 4.12 API, 62dnl # Added kvmalloc allocation strategy 63dnl # 64AC_DEFUN([ZFS_AC_KERNEL_SRC_KVMALLOC], [ 65 ZFS_LINUX_TEST_SRC([kvmalloc], [ 66 #include <linux/mm.h> 67 ],[ 68 void *p __attribute__ ((unused)); 69 70 p = kvmalloc(0, GFP_KERNEL); 71 ]) 72]) 73 74AC_DEFUN([ZFS_AC_KERNEL_KVMALLOC], [ 75 AC_MSG_CHECKING([whether kvmalloc(ptr, flags) is available]) 76 ZFS_LINUX_TEST_RESULT([kvmalloc], [ 77 AC_MSG_RESULT(yes) 78 AC_DEFINE(HAVE_KVMALLOC, 1, [kvmalloc exists]) 79 ],[ 80 AC_MSG_RESULT(no) 81 ]) 82]) 83 84dnl # 85dnl # 5.8 API, 86dnl # __vmalloc PAGE_KERNEL removal 87dnl # 88AC_DEFUN([ZFS_AC_KERNEL_SRC_VMALLOC_PAGE_KERNEL], [ 89 ZFS_LINUX_TEST_SRC([__vmalloc], [ 90 #include <linux/mm.h> 91 #include <linux/vmalloc.h> 92 ],[ 93 void *p __attribute__ ((unused)); 94 95 p = __vmalloc(0, GFP_KERNEL, PAGE_KERNEL); 96 ]) 97]) 98 99AC_DEFUN([ZFS_AC_KERNEL_VMALLOC_PAGE_KERNEL], [ 100 AC_MSG_CHECKING([whether __vmalloc(ptr, flags, pageflags) is available]) 101 ZFS_LINUX_TEST_RESULT([__vmalloc], [ 102 AC_MSG_RESULT(yes) 103 AC_DEFINE(HAVE_VMALLOC_PAGE_KERNEL, 1, [__vmalloc page flags exists]) 104 ],[ 105 AC_MSG_RESULT(no) 106 ]) 107]) 108-