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		#include <linux/slab.h>
68	],[
69		void *p __attribute__ ((unused));
70
71		p = kvmalloc(0, GFP_KERNEL);
72	])
73])
74
75AC_DEFUN([ZFS_AC_KERNEL_KVMALLOC], [
76	AC_MSG_CHECKING([whether kvmalloc(ptr, flags) is available])
77	ZFS_LINUX_TEST_RESULT([kvmalloc], [
78		AC_MSG_RESULT(yes)
79		AC_DEFINE(HAVE_KVMALLOC, 1, [kvmalloc exists])
80	],[
81		AC_MSG_RESULT(no)
82	])
83])
84
85dnl #
86dnl # 5.8 API,
87dnl # __vmalloc PAGE_KERNEL removal
88dnl #
89AC_DEFUN([ZFS_AC_KERNEL_SRC_VMALLOC_PAGE_KERNEL], [
90	ZFS_LINUX_TEST_SRC([__vmalloc], [
91		#include <linux/mm.h>
92		#include <linux/vmalloc.h>
93	],[
94		void *p __attribute__ ((unused));
95
96		p = __vmalloc(0, GFP_KERNEL, PAGE_KERNEL);
97	])
98])
99
100AC_DEFUN([ZFS_AC_KERNEL_VMALLOC_PAGE_KERNEL], [
101	AC_MSG_CHECKING([whether __vmalloc(ptr, flags, pageflags) is available])
102	ZFS_LINUX_TEST_RESULT([__vmalloc], [
103		AC_MSG_RESULT(yes)
104		AC_DEFINE(HAVE_VMALLOC_PAGE_KERNEL, 1, [__vmalloc page flags exists])
105	],[
106		AC_MSG_RESULT(no)
107	])
108])
109-