xref: /freebsd/sys/contrib/openzfs/config/kernel-kthread.m4 (revision 187d8a3ce55a4e2d41fbe61465d5ff4ac0fc6bd5)
1dnl # SPDX-License-Identifier: CDDL-1.0
2AC_DEFUN([ZFS_AC_KERNEL_KTHREAD_COMPLETE_AND_EXIT], [
3	dnl #
4	dnl # 5.17 API,
5	dnl # cead18552660702a4a46f58e65188fe5f36e9dfe ("exit: Rename complete_and_exit to kthread_complete_and_exit")
6	dnl #
7	dnl # Also moves the definition from include/linux/kernel.h to include/linux/kthread.h
8	dnl #
9	AC_MSG_CHECKING([whether kthread_complete_and_exit() is available])
10	ZFS_LINUX_TEST_RESULT([kthread_complete_and_exit], [
11		AC_MSG_RESULT(yes)
12		AC_DEFINE(SPL_KTHREAD_COMPLETE_AND_EXIT, kthread_complete_and_exit, [kthread_complete_and_exit() available])
13	], [
14		AC_MSG_RESULT(no)
15		AC_DEFINE(SPL_KTHREAD_COMPLETE_AND_EXIT, complete_and_exit, [using complete_and_exit() instead])
16	])
17])
18
19AC_DEFUN([ZFS_AC_KERNEL_KTHREAD_DEQUEUE_SIGNAL], [
20	dnl #
21	dnl # prehistory:
22	dnl #     int dequeue_signal(struct task_struct *task, sigset_t *mask,
23	dnl #         siginfo_t *info)
24	dnl #
25	dnl # 4.20: kernel_siginfo_t introduced, replaces siginfo_t
26	dnl #     int dequeue_signal(struct task_struct *task, sigset_t *mask,
27	dnl           kernel_siginfo_t *info)
28	dnl #
29	dnl # 5.17: enum pid_type introduced as 4th arg
30	dnl #     int dequeue_signal(struct task_struct *task, sigset_t *mask,
31	dnl #         kernel_siginfo_t *info, enum pid_type *type)
32	dnl #
33	dnl # 6.12: first arg struct_task* removed
34	dnl #     int dequeue_signal(sigset_t *mask, kernel_siginfo_t *info,
35	dnl #         enum pid_type *type)
36	dnl #
37	AC_MSG_CHECKING([whether dequeue_signal() takes 4 arguments])
38	ZFS_LINUX_TEST_RESULT([kthread_dequeue_signal_4arg], [
39		AC_MSG_RESULT(yes)
40		AC_DEFINE(HAVE_DEQUEUE_SIGNAL_4ARG, 1,
41		    [dequeue_signal() takes 4 arguments])
42	], [
43		AC_MSG_RESULT(no)
44		AC_MSG_CHECKING([whether 3-arg dequeue_signal() takes a type argument])
45		ZFS_LINUX_TEST_RESULT([kthread_dequeue_signal_3arg_type], [
46			AC_MSG_RESULT(yes)
47			AC_DEFINE(HAVE_DEQUEUE_SIGNAL_3ARG_TYPE, 1,
48			    [3-arg dequeue_signal() takes a type argument])
49		], [
50			AC_MSG_RESULT(no)
51		])
52	])
53])
54
55AC_DEFUN([ZFS_AC_KERNEL_SRC_KTHREAD_COMPLETE_AND_EXIT], [
56	ZFS_LINUX_TEST_SRC([kthread_complete_and_exit], [
57		#include <linux/kthread.h>
58	], [
59		struct completion *completion = NULL;
60		long code = 0;
61
62		kthread_complete_and_exit(completion, code);
63	])
64])
65
66AC_DEFUN([ZFS_AC_KERNEL_SRC_KTHREAD_DEQUEUE_SIGNAL], [
67	ZFS_LINUX_TEST_SRC([kthread_dequeue_signal_4arg], [
68		#include <linux/sched/signal.h>
69	], [
70		struct task_struct *task = NULL;
71		sigset_t *mask = NULL;
72		kernel_siginfo_t *info = NULL;
73		enum pid_type *type = NULL;
74		int error __attribute__ ((unused));
75
76		error = dequeue_signal(task, mask, info, type);
77	])
78
79	ZFS_LINUX_TEST_SRC([kthread_dequeue_signal_3arg_type], [
80		#include <linux/sched/signal.h>
81	], [
82		sigset_t *mask = NULL;
83		kernel_siginfo_t *info = NULL;
84		enum pid_type *type = NULL;
85		int error __attribute__ ((unused));
86
87		error = dequeue_signal(mask, info, type);
88	])
89])
90
91AC_DEFUN([ZFS_AC_KERNEL_KTHREAD], [
92	ZFS_AC_KERNEL_KTHREAD_COMPLETE_AND_EXIT
93	ZFS_AC_KERNEL_KTHREAD_DEQUEUE_SIGNAL
94])
95
96AC_DEFUN([ZFS_AC_KERNEL_SRC_KTHREAD], [
97	ZFS_AC_KERNEL_SRC_KTHREAD_COMPLETE_AND_EXIT
98	ZFS_AC_KERNEL_SRC_KTHREAD_DEQUEUE_SIGNAL
99])
100