diff --git a/config/kernel-assign_str.m4 b/config/kernel-assign_str.m4 new file mode 100644 index 000000000000..cf4b00e7cbf2 --- /dev/null +++ b/config/kernel-assign_str.m4 @@ -0,0 +1,62 @@ +dnl # +dnl # 6.10 kernel, check number of args of __assign_str() for trace: +dnl +dnl # 6.10+: one arg +dnl # 6.9 and older: two args +dnl # +dnl # More specifically, this will test to see if __assign_str() takes one +dnl # arg. If __assign_str() takes two args, or is not defined, then +dnl # HAVE_1ARG_ASSIGN_STR will not be set. +dnl # +AC_DEFUN([ZFS_AC_KERNEL_1ARG_ASSIGN_STR], [ + AC_MSG_CHECKING([whether __assign_str() has one arg]) + ZFS_LINUX_TRY_COMPILE_HEADER([ + #include + MODULE_LICENSE("$ZFS_META_LICENSE"); + + #define CREATE_TRACE_POINTS + #include "conftest.h" + ],[ + trace_zfs_autoconf_event_one("1"); + trace_zfs_autoconf_event_two("2"); + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_1ARG_ASSIGN_STR, 1, + [__assign_str() has one arg]) + ],[ + AC_MSG_RESULT(no) + ],[ + #if !defined(_CONFTEST_H) || defined(TRACE_HEADER_MULTI_READ) + #define _CONFTEST_H + + #undef TRACE_SYSTEM + #define TRACE_SYSTEM zfs + #include + + DECLARE_EVENT_CLASS(zfs_autoconf_event_class, + TP_PROTO(char *string), + TP_ARGS(string), + TP_STRUCT__entry( + __string(str, string) + ), + TP_fast_assign( + __assign_str(str); + ), + TP_printk("str = %s", __get_str(str)) + ); + + #define DEFINE_AUTOCONF_EVENT(name) \ + DEFINE_EVENT(zfs_autoconf_event_class, name, \ + TP_PROTO(char * str), \ + TP_ARGS(str)) + DEFINE_AUTOCONF_EVENT(zfs_autoconf_event_one); + DEFINE_AUTOCONF_EVENT(zfs_autoconf_event_two); + + #endif /* _CONFTEST_H */ + + #undef TRACE_INCLUDE_PATH + #define TRACE_INCLUDE_PATH . + #define TRACE_INCLUDE_FILE conftest + #include + ]) +])