Autoconf --enable-debug-* cleanup

Cleanup the --enable-debug-* configure options, this has been pending
for quite some time and I am glad I finally got to it.  To summerize:

1) All SPL_AC_DEBUG_* macros were updated to be a more autoconf
friendly.  This mainly involved shift to the GNU approved usage of
AC_ARG_ENABLE and ensuring AS_IF is used rather than directly using
an if [ test ] construct.

2) --enable-debug-kmem=yes by default.  This simply enabled keeping
a running tally of total memory allocated and freed and reporting a
memory leak if there was one at module unload.  Additionally, it
ensure /proc/spl/kmem/slab will exist by default which is handy.
The overhead is low for this and it should not impact performance.

3) --enable-debug-kmem-tracking=no by default.  This option was added
to provide a configure option to enable to detailed memory allocation
tracking.  This support was always there but you had to know where to
turn it on.  By default this support is disabled because it is known
to badly hurt performence, however it is invaluable when chasing a
memory leak.

4) --enable-debug-kstat removed.  After further reflection I can't see
why you would ever really want to turn this support off.  It is now
always on which had the nice side effect of simplifying the proc handling
code in spl-proc.c.  We can now always assume the top level directory
will be there.

5) --enable-debug-callb removed.  This never really did anything, it was
put in provisionally because it might have been needed.  It turns out
it was not so I am just removing it to prevent confusion.
This commit is contained in:
Brian Behlendorf 2009-10-30 13:58:51 -07:00
parent 302b88e6ab
commit 055ffd98cf
10 changed files with 159 additions and 330 deletions

View File

@ -23,8 +23,7 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
SPL_AC_DEBUG SPL_AC_DEBUG
SPL_AC_DEBUG_KMEM SPL_AC_DEBUG_KMEM
SPL_AC_DEBUG_KSTAT SPL_AC_DEBUG_KMEM_TRACKING
SPL_AC_DEBUG_CALLB
SPL_AC_ATOMIC_SPINLOCK SPL_AC_ATOMIC_SPINLOCK
SPL_AC_TYPE_UINTPTR_T SPL_AC_TYPE_UINTPTR_T
SPL_AC_TYPE_ATOMIC64_T SPL_AC_TYPE_ATOMIC64_T
@ -218,91 +217,71 @@ AC_DEFUN([SPL_AC_CONFIG], [
[test "$SPL_CONFIG" = all]) [test "$SPL_CONFIG" = all])
]) ])
dnl #
dnl # Enable if the SPL should be compiled with internal debugging enabled.
dnl # By default this support is disabled.
dnl #
AC_DEFUN([SPL_AC_DEBUG], [ AC_DEFUN([SPL_AC_DEBUG], [
AC_ARG_ENABLE([debug],
[AS_HELP_STRING([--enable-debug],
[Enable generic debug support @<:@default=no@:>@])],
[],
[enable_debug=no])
AS_IF([test "x$enable_debug" = xyes],
[KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG"],
[KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"])
AC_MSG_CHECKING([whether debugging is enabled]) AC_MSG_CHECKING([whether debugging is enabled])
AC_ARG_ENABLE( [debug], AC_MSG_RESULT([$enable_debug])
AS_HELP_STRING([--enable-debug],
[Enable generic debug support (default off)]),
[ case "$enableval" in
yes) spl_ac_debug=yes ;;
no) spl_ac_debug=no ;;
*) AC_MSG_RESULT([Error!])
AC_MSG_ERROR([Bad value "$enableval" for --enable-debug]) ;;
esac ]
)
if test "$spl_ac_debug" = yes; then
AC_MSG_RESULT([yes])
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG"
else
AC_MSG_RESULT([no])
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
fi
]) ])
dnl #
dnl # Enabled by default it provides a minimal level of memory tracking.
dnl # A total count of bytes allocated is kept for each alloc and free.
dnl # Then at module unload time a report to the console will be printed
dnl # if memory was leaked. Additionally, /proc/spl/kmem/slab will exist
dnl # and provide an easy way to inspect the kmem based slab.
dnl #
AC_DEFUN([SPL_AC_DEBUG_KMEM], [ AC_DEFUN([SPL_AC_DEBUG_KMEM], [
AC_MSG_CHECKING([whether kmem debugging is enabled]) AC_ARG_ENABLE([debug-kmem],
AC_ARG_ENABLE( [debug-kmem], [AS_HELP_STRING([--enable-debug-kmem],
AS_HELP_STRING([--enable-debug-kmem], [Enable basic kmem accounting @<:@default=yes@:>@])],
[Enable kmem debug support (default off)]), [],
[ case "$enableval" in [enable_debug_kmem=yes])
yes) spl_ac_debug_kmem=yes ;;
no) spl_ac_debug_kmem=no ;; AS_IF([test "x$enable_debug_kmem" = xyes],
*) AC_MSG_RESULT([Error!]) [AC_DEFINE([DEBUG_KMEM], [1],
AC_MSG_ERROR([Bad value "$enableval" for --enable-debug-kmem]) ;; [Define to 1 to enable basic kmem accounting])
esac ] KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM"])
)
if test "$spl_ac_debug_kmem" = yes; then AC_MSG_CHECKING([whether basic kmem accounting is enabled])
AC_MSG_RESULT([yes]) AC_MSG_RESULT([$enable_debug_kmem])
AC_DEFINE([DEBUG_KMEM], [1],
[Define to 1 to enable kmem debugging])
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM"
else
AC_MSG_RESULT([no])
fi
]) ])
AC_DEFUN([SPL_AC_DEBUG_KSTAT], [ dnl #
AC_MSG_CHECKING([whether kstat debugging is enabled]) dnl # Disabled by default it provides detailed memory tracking. This
AC_ARG_ENABLE( [debug-kstat], dnl # feature also requires --enable-debug-kmem to be set. When enabled
AS_HELP_STRING([--enable-debug-kstat], dnl # not only will total bytes be tracked but also the location of every
[Enable kstat debug support (default off)]), dnl # alloc and free. When the SPL module is unloaded a list of all leaked
[ case "$enableval" in dnl # addresses and where they were allocated will be dumped to the console.
yes) spl_ac_debug_kstat=yes ;; dnl # Enabling this feature has a significant impact on performance but it
no) spl_ac_debug_kstat=no ;; dnl # makes finding memory leaks pretty straight forward.
*) AC_MSG_RESULT([Error!]) dnl #
AC_MSG_ERROR([Bad value "$enableval" for --enable-debug-kstat]) ;; AC_DEFUN([SPL_AC_DEBUG_KMEM_TRACKING], [
esac ] AC_ARG_ENABLE([debug-kmem-tracking],
) [AS_HELP_STRING([--enable-debug-kmem-tracking],
if test "$spl_ac_debug_kstat" = yes; then [Enable detailed kmem tracking @<:@default=no@:>@])],
AC_MSG_RESULT([yes]) [],
AC_DEFINE([DEBUG_KSTAT], [1], [enable_debug_kmem_tracking=no])
[Define to 1 to enable kstat debugging])
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KSTAT"
else
AC_MSG_RESULT([no])
fi
])
AC_DEFUN([SPL_AC_DEBUG_CALLB], [ AS_IF([test "x$enable_debug_kmem_tracking" = xyes],
AC_MSG_CHECKING([whether callb debugging is enabled]) [AC_DEFINE([DEBUG_KMEM_TRACKING], [1],
AC_ARG_ENABLE( [debug-callb], [Define to 1 to enable detailed kmem tracking])
AS_HELP_STRING([--enable-debug-callb], KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM_TRACKING"])
[Enable callb debug support (default off)]),
[ case "$enableval" in AC_MSG_CHECKING([whether detailed kmem tracking is enabled])
yes) spl_ac_debug_callb=yes ;; AC_MSG_RESULT([$enable_debug_kmem_tracking])
no) spl_ac_debug_callb=no ;;
*) AC_MSG_RESULT([Error!])
AC_MSG_ERROR([Bad value "$enableval" for --enable-debug-callb]) ;;
esac ]
)
if test "$spl_ac_debug_callb" = yes; then
AC_MSG_RESULT([yes])
AC_DEFINE([DEBUG_CALLB], [1],
[Define to 1 to enable callb debugging])
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_CALLB"
else
AC_MSG_RESULT([no])
fi
]) ])
dnl # dnl #

258
configure vendored
View File

@ -1034,10 +1034,10 @@ Optional Features:
--enable-fast-install[=PKGS] --enable-fast-install[=PKGS]
optimize for fast installation [default=yes] optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds) --disable-libtool-lock avoid locking (might break parallel builds)
--enable-debug Enable generic debug support (default off) --enable-debug Enable generic debug support [default=no]
--enable-debug-kmem Enable kmem debug support (default off) --enable-debug-kmem Enable basic kmem accounting [default=yes]
--enable-debug-kstat Enable kstat debug support (default off) --enable-debug-kmem-tracking
--enable-debug-callb Enable callb debug support (default off) Enable detailed kmem tracking [default=no]
--enable-atomic-spinlocks --enable-atomic-spinlocks
Atomic types use spinlocks [default=no] Atomic types use spinlocks [default=no]
@ -19086,124 +19086,73 @@ echo "${ECHO_T}$LINUX_SYMBOLS" >&6
echo "$as_me:$LINENO: checking whether debugging is enabled" >&5
echo $ECHO_N "checking whether debugging is enabled... $ECHO_C" >&6
# Check whether --enable-debug or --disable-debug was given. # Check whether --enable-debug or --disable-debug was given.
if test "${enable_debug+set}" = set; then if test "${enable_debug+set}" = set; then
enableval="$enable_debug" enableval="$enable_debug"
case "$enableval" in
yes) spl_ac_debug=yes ;;
no) spl_ac_debug=no ;;
*) echo "$as_me:$LINENO: result: Error!" >&5
echo "${ECHO_T}Error!" >&6
{ { echo "$as_me:$LINENO: error: Bad value \"$enableval\" for --enable-debug" >&5
echo "$as_me: error: Bad value \"$enableval\" for --enable-debug" >&2;}
{ (exit 1); exit 1; }; } ;;
esac
else
enable_debug=no
fi; fi;
if test "$spl_ac_debug" = yes; then
echo "$as_me:$LINENO: result: yes" >&5 if test "x$enable_debug" = xyes; then
echo "${ECHO_T}yes" >&6
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG" KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG"
else else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG" KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
fi fi
echo "$as_me:$LINENO: checking whether debugging is enabled" >&5
echo $ECHO_N "checking whether debugging is enabled... $ECHO_C" >&6
echo "$as_me:$LINENO: result: $enable_debug" >&5
echo "${ECHO_T}$enable_debug" >&6
echo "$as_me:$LINENO: checking whether kmem debugging is enabled" >&5
echo $ECHO_N "checking whether kmem debugging is enabled... $ECHO_C" >&6
# Check whether --enable-debug-kmem or --disable-debug-kmem was given. # Check whether --enable-debug-kmem or --disable-debug-kmem was given.
if test "${enable_debug_kmem+set}" = set; then if test "${enable_debug_kmem+set}" = set; then
enableval="$enable_debug_kmem" enableval="$enable_debug_kmem"
case "$enableval" in
yes) spl_ac_debug_kmem=yes ;;
no) spl_ac_debug_kmem=no ;;
*) echo "$as_me:$LINENO: result: Error!" >&5
echo "${ECHO_T}Error!" >&6
{ { echo "$as_me:$LINENO: error: Bad value \"$enableval\" for --enable-debug-kmem" >&5
echo "$as_me: error: Bad value \"$enableval\" for --enable-debug-kmem" >&2;}
{ (exit 1); exit 1; }; } ;;
esac
else
enable_debug_kmem=yes
fi; fi;
if test "$spl_ac_debug_kmem" = yes; then
echo "$as_me:$LINENO: result: yes" >&5 if test "x$enable_debug_kmem" = xyes; then
echo "${ECHO_T}yes" >&6
cat >>confdefs.h <<\_ACEOF cat >>confdefs.h <<\_ACEOF
#define DEBUG_KMEM 1 #define DEBUG_KMEM 1
_ACEOF _ACEOF
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM" KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM"
else fi
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
echo "$as_me:$LINENO: checking whether kstat debugging is enabled" >&5 echo "$as_me:$LINENO: checking whether basic kmem accounting is enabled" >&5
echo $ECHO_N "checking whether kstat debugging is enabled... $ECHO_C" >&6 echo $ECHO_N "checking whether basic kmem accounting is enabled... $ECHO_C" >&6
# Check whether --enable-debug-kstat or --disable-debug-kstat was given. echo "$as_me:$LINENO: result: $enable_debug_kmem" >&5
if test "${enable_debug_kstat+set}" = set; then echo "${ECHO_T}$enable_debug_kmem" >&6
enableval="$enable_debug_kstat"
case "$enableval" in
yes) spl_ac_debug_kstat=yes ;;
no) spl_ac_debug_kstat=no ;;
*) echo "$as_me:$LINENO: result: Error!" >&5
echo "${ECHO_T}Error!" >&6
{ { echo "$as_me:$LINENO: error: Bad value \"$enableval\" for --enable-debug-kstat" >&5
echo "$as_me: error: Bad value \"$enableval\" for --enable-debug-kstat" >&2;}
{ (exit 1); exit 1; }; } ;;
esac
# Check whether --enable-debug-kmem-tracking or --disable-debug-kmem-tracking was given.
if test "${enable_debug_kmem_tracking+set}" = set; then
enableval="$enable_debug_kmem_tracking"
else
enable_debug_kmem_tracking=no
fi; fi;
if test "$spl_ac_debug_kstat" = yes; then
echo "$as_me:$LINENO: result: yes" >&5 if test "x$enable_debug_kmem_tracking" = xyes; then
echo "${ECHO_T}yes" >&6
cat >>confdefs.h <<\_ACEOF cat >>confdefs.h <<\_ACEOF
#define DEBUG_KSTAT 1 #define DEBUG_KMEM_TRACKING 1
_ACEOF _ACEOF
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KSTAT" KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM_TRACKING"
else fi
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
echo "$as_me:$LINENO: checking whether callb debugging is enabled" >&5 echo "$as_me:$LINENO: checking whether detailed kmem tracking is enabled" >&5
echo $ECHO_N "checking whether callb debugging is enabled... $ECHO_C" >&6 echo $ECHO_N "checking whether detailed kmem tracking is enabled... $ECHO_C" >&6
# Check whether --enable-debug-callb or --disable-debug-callb was given. echo "$as_me:$LINENO: result: $enable_debug_kmem_tracking" >&5
if test "${enable_debug_callb+set}" = set; then echo "${ECHO_T}$enable_debug_kmem_tracking" >&6
enableval="$enable_debug_callb"
case "$enableval" in
yes) spl_ac_debug_callb=yes ;;
no) spl_ac_debug_callb=no ;;
*) echo "$as_me:$LINENO: result: Error!" >&5
echo "${ECHO_T}Error!" >&6
{ { echo "$as_me:$LINENO: error: Bad value \"$enableval\" for --enable-debug-callb" >&5
echo "$as_me: error: Bad value \"$enableval\" for --enable-debug-callb" >&2;}
{ (exit 1); exit 1; }; } ;;
esac
fi;
if test "$spl_ac_debug_callb" = yes; then
echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
cat >>confdefs.h <<\_ACEOF
#define DEBUG_CALLB 1
_ACEOF
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_CALLB"
else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
# Check whether --enable-atomic-spinlocks or --disable-atomic-spinlocks was given. # Check whether --enable-atomic-spinlocks or --disable-atomic-spinlocks was given.
@ -22385,124 +22334,73 @@ echo "${ECHO_T}$LINUX_SYMBOLS" >&6
echo "$as_me:$LINENO: checking whether debugging is enabled" >&5
echo $ECHO_N "checking whether debugging is enabled... $ECHO_C" >&6
# Check whether --enable-debug or --disable-debug was given. # Check whether --enable-debug or --disable-debug was given.
if test "${enable_debug+set}" = set; then if test "${enable_debug+set}" = set; then
enableval="$enable_debug" enableval="$enable_debug"
case "$enableval" in
yes) spl_ac_debug=yes ;;
no) spl_ac_debug=no ;;
*) echo "$as_me:$LINENO: result: Error!" >&5
echo "${ECHO_T}Error!" >&6
{ { echo "$as_me:$LINENO: error: Bad value \"$enableval\" for --enable-debug" >&5
echo "$as_me: error: Bad value \"$enableval\" for --enable-debug" >&2;}
{ (exit 1); exit 1; }; } ;;
esac
else
enable_debug=no
fi; fi;
if test "$spl_ac_debug" = yes; then
echo "$as_me:$LINENO: result: yes" >&5 if test "x$enable_debug" = xyes; then
echo "${ECHO_T}yes" >&6
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG" KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG"
else else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG" KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
fi fi
echo "$as_me:$LINENO: checking whether debugging is enabled" >&5
echo $ECHO_N "checking whether debugging is enabled... $ECHO_C" >&6
echo "$as_me:$LINENO: result: $enable_debug" >&5
echo "${ECHO_T}$enable_debug" >&6
echo "$as_me:$LINENO: checking whether kmem debugging is enabled" >&5
echo $ECHO_N "checking whether kmem debugging is enabled... $ECHO_C" >&6
# Check whether --enable-debug-kmem or --disable-debug-kmem was given. # Check whether --enable-debug-kmem or --disable-debug-kmem was given.
if test "${enable_debug_kmem+set}" = set; then if test "${enable_debug_kmem+set}" = set; then
enableval="$enable_debug_kmem" enableval="$enable_debug_kmem"
case "$enableval" in
yes) spl_ac_debug_kmem=yes ;;
no) spl_ac_debug_kmem=no ;;
*) echo "$as_me:$LINENO: result: Error!" >&5
echo "${ECHO_T}Error!" >&6
{ { echo "$as_me:$LINENO: error: Bad value \"$enableval\" for --enable-debug-kmem" >&5
echo "$as_me: error: Bad value \"$enableval\" for --enable-debug-kmem" >&2;}
{ (exit 1); exit 1; }; } ;;
esac
else
enable_debug_kmem=yes
fi; fi;
if test "$spl_ac_debug_kmem" = yes; then
echo "$as_me:$LINENO: result: yes" >&5 if test "x$enable_debug_kmem" = xyes; then
echo "${ECHO_T}yes" >&6
cat >>confdefs.h <<\_ACEOF cat >>confdefs.h <<\_ACEOF
#define DEBUG_KMEM 1 #define DEBUG_KMEM 1
_ACEOF _ACEOF
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM" KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM"
else fi
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
echo "$as_me:$LINENO: checking whether kstat debugging is enabled" >&5 echo "$as_me:$LINENO: checking whether basic kmem accounting is enabled" >&5
echo $ECHO_N "checking whether kstat debugging is enabled... $ECHO_C" >&6 echo $ECHO_N "checking whether basic kmem accounting is enabled... $ECHO_C" >&6
# Check whether --enable-debug-kstat or --disable-debug-kstat was given. echo "$as_me:$LINENO: result: $enable_debug_kmem" >&5
if test "${enable_debug_kstat+set}" = set; then echo "${ECHO_T}$enable_debug_kmem" >&6
enableval="$enable_debug_kstat"
case "$enableval" in
yes) spl_ac_debug_kstat=yes ;;
no) spl_ac_debug_kstat=no ;;
*) echo "$as_me:$LINENO: result: Error!" >&5
echo "${ECHO_T}Error!" >&6
{ { echo "$as_me:$LINENO: error: Bad value \"$enableval\" for --enable-debug-kstat" >&5
echo "$as_me: error: Bad value \"$enableval\" for --enable-debug-kstat" >&2;}
{ (exit 1); exit 1; }; } ;;
esac
# Check whether --enable-debug-kmem-tracking or --disable-debug-kmem-tracking was given.
if test "${enable_debug_kmem_tracking+set}" = set; then
enableval="$enable_debug_kmem_tracking"
else
enable_debug_kmem_tracking=no
fi; fi;
if test "$spl_ac_debug_kstat" = yes; then
echo "$as_me:$LINENO: result: yes" >&5 if test "x$enable_debug_kmem_tracking" = xyes; then
echo "${ECHO_T}yes" >&6
cat >>confdefs.h <<\_ACEOF cat >>confdefs.h <<\_ACEOF
#define DEBUG_KSTAT 1 #define DEBUG_KMEM_TRACKING 1
_ACEOF _ACEOF
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KSTAT" KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_KMEM_TRACKING"
else fi
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
echo "$as_me:$LINENO: checking whether callb debugging is enabled" >&5 echo "$as_me:$LINENO: checking whether detailed kmem tracking is enabled" >&5
echo $ECHO_N "checking whether callb debugging is enabled... $ECHO_C" >&6 echo $ECHO_N "checking whether detailed kmem tracking is enabled... $ECHO_C" >&6
# Check whether --enable-debug-callb or --disable-debug-callb was given. echo "$as_me:$LINENO: result: $enable_debug_kmem_tracking" >&5
if test "${enable_debug_callb+set}" = set; then echo "${ECHO_T}$enable_debug_kmem_tracking" >&6
enableval="$enable_debug_callb"
case "$enableval" in
yes) spl_ac_debug_callb=yes ;;
no) spl_ac_debug_callb=no ;;
*) echo "$as_me:$LINENO: result: Error!" >&5
echo "${ECHO_T}Error!" >&6
{ { echo "$as_me:$LINENO: error: Bad value \"$enableval\" for --enable-debug-callb" >&5
echo "$as_me: error: Bad value \"$enableval\" for --enable-debug-callb" >&2;}
{ (exit 1); exit 1; }; } ;;
esac
fi;
if test "$spl_ac_debug_callb" = yes; then
echo "$as_me:$LINENO: result: yes" >&5
echo "${ECHO_T}yes" >&6
cat >>confdefs.h <<\_ACEOF
#define DEBUG_CALLB 1
_ACEOF
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG_CALLB"
else
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
# Check whether --enable-atomic-spinlocks or --disable-atomic-spinlocks was given. # Check whether --enable-atomic-spinlocks or --disable-atomic-spinlocks was given.

View File

@ -8,11 +8,7 @@ extern "C" {
#include <linux/module.h> #include <linux/module.h>
#include <sys/mutex.h> #include <sys/mutex.h>
#ifdef DEBUG_CALLB
#define CALLB_CPR_ASSERT(cp) ASSERT(MUTEX_HELD((cp)->cc_lockp)); #define CALLB_CPR_ASSERT(cp) ASSERT(MUTEX_HELD((cp)->cc_lockp));
#else
#define CALLB_CPR_ASSERT(cp) (void)0
#endif
typedef struct callb_cpr { typedef struct callb_cpr {
kmutex_t *cc_lockp; kmutex_t *cc_lockp;

View File

@ -32,7 +32,6 @@ extern "C" {
#endif #endif
#undef DEBUG_KMEM_UNIMPLEMENTED #undef DEBUG_KMEM_UNIMPLEMENTED
#undef DEBUG_KMEM_TRACKING /* Per-allocation memory tracking */
#include <linux/module.h> #include <linux/module.h>
#include <linux/slab.h> #include <linux/slab.h>

View File

@ -27,10 +27,6 @@
#ifndef _SPL_KSTAT_H #ifndef _SPL_KSTAT_H
#define _SPL_KSTAT_H #define _SPL_KSTAT_H
#ifdef __cplusplus
extern "C" {
#endif
#include <linux/module.h> #include <linux/module.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/time.h> #include <sys/time.h>
@ -155,7 +151,6 @@ typedef struct kstat_timer {
int kstat_init(void); int kstat_init(void);
void kstat_fini(void); void kstat_fini(void);
#ifdef DEBUG_KSTAT
extern kstat_t *__kstat_create(const char *ks_module, int ks_instance, extern kstat_t *__kstat_create(const char *ks_module, int ks_instance,
const char *ks_name, const char *ks_class, const char *ks_name, const char *ks_class,
uchar_t ks_type, uint_t ks_ndata, uchar_t ks_type, uint_t ks_ndata,
@ -167,17 +162,5 @@ extern void __kstat_delete(kstat_t *ksp);
#define kstat_install(k) __kstat_install(k) #define kstat_install(k) __kstat_install(k)
#define kstat_delete(k) __kstat_delete(k) #define kstat_delete(k) __kstat_delete(k)
#else
#define kstat_create(m,i,n,c,t,s,f) (NULL)
#define kstat_install(k) ((void)0)
#define kstat_delete(k) ((void)0)
#endif /* DEBUG_KSTAT */
#ifdef __cplusplus
}
#endif
#endif /* _SPL_KSTAT_H */ #endif /* _SPL_KSTAT_H */

View File

@ -48,12 +48,10 @@
#define spl_unregister_sysctl_table(t) unregister_sysctl_table(t) #define spl_unregister_sysctl_table(t) unregister_sysctl_table(t)
#endif /* CONFIG_SYSCTL */ #endif /* CONFIG_SYSCTL */
#ifdef DEBUG_KSTAT
extern struct proc_dir_entry *proc_spl_kstat; extern struct proc_dir_entry *proc_spl_kstat;
struct proc_dir_entry *proc_dir_entry_find(struct proc_dir_entry *root, struct proc_dir_entry *proc_dir_entry_find(struct proc_dir_entry *root,
const char *str); const char *str);
int proc_dir_entries(struct proc_dir_entry *root); int proc_dir_entries(struct proc_dir_entry *root);
#endif
int proc_init(void); int proc_init(void);
void proc_fini(void); void proc_fini(void);

View File

@ -210,12 +210,9 @@ EXPORT_SYMBOL(vmem_size);
/* /*
* Memory allocation interfaces and debugging for basic kmem_* * Memory allocation interfaces and debugging for basic kmem_*
* and vmem_* style memory allocation. When DEBUG_KMEM is enable * and vmem_* style memory allocation. When DEBUG_KMEM is enabled
* all allocations will be tracked when they are allocated and * the SPL will keep track of the total memory allocated, and
* freed. When the SPL module is unload a list of all leaked * report any memory leaked when the module is unloaded.
* addresses and where they were allocated will be dumped to the
* console. Enabling this feature has a significant impant on
* performance but it makes finding memory leaks staight forward.
*/ */
#ifdef DEBUG_KMEM #ifdef DEBUG_KMEM
/* Shim layer memory accounting */ /* Shim layer memory accounting */
@ -231,13 +228,18 @@ EXPORT_SYMBOL(vmem_alloc_used);
EXPORT_SYMBOL(vmem_alloc_max); EXPORT_SYMBOL(vmem_alloc_max);
EXPORT_SYMBOL(kmem_warning_flag); EXPORT_SYMBOL(kmem_warning_flag);
# ifdef DEBUG_KMEM_TRACKING /* When DEBUG_KMEM_TRACKING is enabled not only will total bytes be tracked
* but also the location of every alloc and free. When the SPL module is
/* XXX - Not to surprisingly with debugging enabled the xmem_locks are very * unloaded a list of all leaked addresses and where they were allocated
* highly contended particularly on xfree(). If we want to run with this * will be dumped to the console. Enabling this feature has a significant
* detailed debugging enabled for anything other than debugging we need to * impact on performance but it makes finding memory leaks straight forward.
* minimize the contention by moving to a lock per xmem_table entry model. *
* Not surprisingly with debugging enabled the xmem_locks are very highly
* contended particularly on xfree(). If we want to run with this detailed
* debugging enabled for anything other than debugging we need to minimize
* the contention by moving to a lock per xmem_table entry model.
*/ */
# ifdef DEBUG_KMEM_TRACKING
# define KMEM_HASH_BITS 10 # define KMEM_HASH_BITS 10
# define KMEM_TABLE_SIZE (1 << KMEM_HASH_BITS) # define KMEM_TABLE_SIZE (1 << KMEM_HASH_BITS)

View File

@ -26,8 +26,6 @@
#include <sys/kstat.h> #include <sys/kstat.h>
#ifdef DEBUG_KSTAT
static spinlock_t kstat_lock; static spinlock_t kstat_lock;
static struct list_head kstat_list; static struct list_head kstat_list;
static kid_t kstat_id; static kid_t kstat_id;
@ -470,17 +468,13 @@ __kstat_delete(kstat_t *ksp)
} }
EXPORT_SYMBOL(__kstat_delete); EXPORT_SYMBOL(__kstat_delete);
#endif /* DEBUG_KSTAT */
int int
kstat_init(void) kstat_init(void)
{ {
ENTRY; ENTRY;
#ifdef DEBUG_KSTAT
spin_lock_init(&kstat_lock); spin_lock_init(&kstat_lock);
INIT_LIST_HEAD(&kstat_list); INIT_LIST_HEAD(&kstat_list);
kstat_id = 0; kstat_id = 0;
#endif /* DEBUG_KSTAT */
RETURN(0); RETURN(0);
} }
@ -488,9 +482,7 @@ void
kstat_fini(void) kstat_fini(void)
{ {
ENTRY; ENTRY;
#ifdef DEBUG_KSTAT
ASSERT(list_empty(&kstat_list)); ASSERT(list_empty(&kstat_list));
#endif /* DEBUG_KSTAT */
EXIT; EXIT;
} }

View File

@ -41,16 +41,12 @@ static unsigned long table_max = ~0;
static struct ctl_table_header *spl_header = NULL; static struct ctl_table_header *spl_header = NULL;
#endif /* CONFIG_SYSCTL */ #endif /* CONFIG_SYSCTL */
#if defined(DEBUG_KMEM) || defined(DEBUG_KSTAT)
static struct proc_dir_entry *proc_spl = NULL; static struct proc_dir_entry *proc_spl = NULL;
#ifdef DEBUG_KMEM #ifdef DEBUG_KMEM
static struct proc_dir_entry *proc_spl_kmem = NULL; static struct proc_dir_entry *proc_spl_kmem = NULL;
static struct proc_dir_entry *proc_spl_kmem_slab = NULL; static struct proc_dir_entry *proc_spl_kmem_slab = NULL;
#endif /* DEBUG_KMEM */ #endif /* DEBUG_KMEM */
#ifdef DEBUG_KSTAT
struct proc_dir_entry *proc_spl_kstat = NULL; struct proc_dir_entry *proc_spl_kstat = NULL;
#endif /* DEBUG_KSTAT */
#endif /* DEBUG_KMEM || DEBUG_KSTAT */
#ifdef HAVE_CTL_UNNUMBERED #ifdef HAVE_CTL_UNNUMBERED
@ -901,11 +897,9 @@ static struct ctl_table spl_kmem_table[] = {
}; };
#endif /* DEBUG_KMEM */ #endif /* DEBUG_KMEM */
#ifdef DEBUG_KSTAT
static struct ctl_table spl_kstat_table[] = { static struct ctl_table spl_kstat_table[] = {
{0}, {0},
}; };
#endif /* DEBUG_KSTAT */
static struct ctl_table spl_table[] = { static struct ctl_table spl_table[] = {
/* NB No .strategy entries have been provided since /* NB No .strategy entries have been provided since
@ -965,14 +959,12 @@ static struct ctl_table spl_table[] = {
.child = spl_kmem_table, .child = spl_kmem_table,
}, },
#endif #endif
#ifdef DEBUG_KSTAT
{ {
.ctl_name = CTL_SPL_KSTAT, .ctl_name = CTL_SPL_KSTAT,
.procname = "kstat", .procname = "kstat",
.mode = 0555, .mode = 0555,
.child = spl_kstat_table, .child = spl_kstat_table,
}, },
#endif
{ 0 }, { 0 },
}; };
@ -1041,7 +1033,6 @@ proc_init(void)
RETURN(-EUNATCH); RETURN(-EUNATCH);
#endif /* CONFIG_SYSCTL */ #endif /* CONFIG_SYSCTL */
#if defined(DEBUG_KMEM) || defined(DEBUG_KSTAT)
proc_spl = proc_mkdir("spl", NULL); proc_spl = proc_mkdir("spl", NULL);
if (proc_spl == NULL) if (proc_spl == NULL)
GOTO(out, rc = -EUNATCH); GOTO(out, rc = -EUNATCH);
@ -1058,25 +1049,21 @@ proc_init(void)
proc_spl_kmem_slab->proc_fops = &proc_slab_operations; proc_spl_kmem_slab->proc_fops = &proc_slab_operations;
#endif /* DEBUG_KMEM */ #endif /* DEBUG_KMEM */
#ifdef DEBUG_KSTAT
proc_spl_kstat = proc_mkdir("kstat", proc_spl); proc_spl_kstat = proc_mkdir("kstat", proc_spl);
if (proc_spl_kstat == NULL) if (proc_spl_kstat == NULL)
GOTO(out, rc = -EUNATCH); GOTO(out, rc = -EUNATCH);
#endif /* DEBUG_KSTAT */
out: out:
if (rc) { if (rc) {
remove_proc_entry("kstat", proc_spl); remove_proc_entry("kstat", proc_spl);
#ifdef DEBUG_KMEM #ifdef DEBUG_KMEM
remove_proc_entry("slab", proc_spl_kmem); remove_proc_entry("slab", proc_spl_kmem);
#endif
remove_proc_entry("kmem", proc_spl); remove_proc_entry("kmem", proc_spl);
#endif
remove_proc_entry("spl", NULL); remove_proc_entry("spl", NULL);
#ifdef CONFIG_SYSCTL #ifdef CONFIG_SYSCTL
spl_unregister_sysctl_table(spl_header); spl_unregister_sysctl_table(spl_header);
#endif /* CONFIG_SYSCTL */ #endif /* CONFIG_SYSCTL */
} }
#endif /* DEBUG_KMEM || DEBUG_KSTAT */
RETURN(rc); RETURN(rc);
} }
@ -1086,14 +1073,12 @@ proc_fini(void)
{ {
ENTRY; ENTRY;
#if defined(DEBUG_KMEM) || defined(DEBUG_KSTAT)
remove_proc_entry("kstat", proc_spl); remove_proc_entry("kstat", proc_spl);
#ifdef DEBUG_KMEM #ifdef DEBUG_KMEM
remove_proc_entry("slab", proc_spl_kmem); remove_proc_entry("slab", proc_spl_kmem);
#endif
remove_proc_entry("kmem", proc_spl); remove_proc_entry("kmem", proc_spl);
#endif
remove_proc_entry("spl", NULL); remove_proc_entry("spl", NULL);
#endif /* DEBUG_KMEM || DEBUG_KSTAT */
#ifdef CONFIG_SYSCTL #ifdef CONFIG_SYSCTL
ASSERT(spl_header != NULL); ASSERT(spl_header != NULL);

View File

@ -3,14 +3,11 @@
/* Atomic types use spinlocks */ /* Atomic types use spinlocks */
#undef ATOMIC_SPINLOCK #undef ATOMIC_SPINLOCK
/* Define to 1 to enable callb debugging */ /* Define to 1 to enable basic kmem accounting */
#undef DEBUG_CALLB
/* Define to 1 to enable kmem debugging */
#undef DEBUG_KMEM #undef DEBUG_KMEM
/* Define to 1 to enable kstat debugging */ /* Define to 1 to enable detailed kmem tracking */
#undef DEBUG_KSTAT #undef DEBUG_KMEM_TRACKING
/* register_sysctl_table() wants 2 args */ /* register_sysctl_table() wants 2 args */
#undef HAVE_2ARGS_REGISTER_SYSCTL #undef HAVE_2ARGS_REGISTER_SYSCTL