summaryrefslogtreecommitdiffstats
path: root/config/kernel-declare-event-class.m4
blob: 7867d751749d556b8c86d5ed73c692e9b9e8ed56 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
dnl #
dnl # Ensure the DECLARE_EVENT_CLASS macro is available to non-GPL modules.
dnl #
AC_DEFUN([ZFS_AC_KERNEL_DECLARE_EVENT_CLASS], [
	tmp_flags="$EXTRA_KCFLAGS"
	EXTRA_KCFLAGS="-I\$(src)"

	AC_MSG_CHECKING([whether DECLARE_EVENT_CLASS() is available])
	ZFS_LINUX_TRY_COMPILE_HEADER([
		#include <linux/module.h>
		MODULE_LICENSE(ZFS_META_LICENSE);

		#define CREATE_TRACE_POINTS
		#include "conftest.h"
	],[
		trace_zfs_autoconf_event_one(1UL);
		trace_zfs_autoconf_event_two(2UL);
	],[
		AC_MSG_RESULT(yes)
		AC_DEFINE(HAVE_DECLARE_EVENT_CLASS, 1,
		          [DECLARE_EVENT_CLASS() is available])
	],[
		AC_MSG_RESULT(no)
	],[
		#if !defined(_CONFTEST_H) || defined(TRACE_HEADER_MULTI_READ)
		#define _CONFTEST_H

		#undef  TRACE_SYSTEM
		#define TRACE_SYSTEM zfs
		#include <linux/tracepoint.h>

		DECLARE_EVENT_CLASS(zfs_autoconf_event_class,
			TP_PROTO(unsigned long i),
			TP_ARGS(i),
			TP_STRUCT__entry(
				__field(unsigned long, i)
			),
			TP_fast_assign(
				__entry->i = i;
			),
			TP_printk("i = %lu", __entry->i)
		);

		#define DEFINE_AUTOCONF_EVENT(name) \
		DEFINE_EVENT(zfs_autoconf_event_class, name, \
			TP_PROTO(unsigned long i), \
			TP_ARGS(i))
		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 <trace/define_trace.h>
	])
	EXTRA_KCFLAGS="$tmp_flags"
])