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-