]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - config/kernel-rwsem.m4
Linux compat: Minimum kernel version 3.10
[FreeBSD/FreeBSD.git] / config / kernel-rwsem.m4
1 dnl #
2 dnl # 3.1 API Change
3 dnl #
4 dnl # The rw_semaphore.wait_lock member was changed from spinlock_t to
5 dnl # raw_spinlock_t at commit ddb6c9b58a19edcfac93ac670b066c836ff729f1.
6 dnl #
7 AC_DEFUN([ZFS_AC_KERNEL_SRC_RWSEM_SPINLOCK_IS_RAW], [
8         ZFS_LINUX_TEST_SRC([rwsem_spinlock_is_raw], [
9                 #include <linux/rwsem.h>
10         ],[
11                 struct rw_semaphore dummy_semaphore __attribute__ ((unused));
12                 raw_spinlock_t dummy_lock __attribute__ ((unused)) =
13                     __RAW_SPIN_LOCK_INITIALIZER(dummy_lock);
14                 dummy_semaphore.wait_lock = dummy_lock;
15         ])
16 ])
17
18 AC_DEFUN([ZFS_AC_KERNEL_RWSEM_SPINLOCK_IS_RAW], [
19         AC_MSG_CHECKING([whether struct rw_semaphore member wait_lock is raw])
20         ZFS_LINUX_TEST_RESULT([rwsem_spinlock_is_raw], [
21                 AC_MSG_RESULT(yes)
22         ],[
23                 ZFS_LINUX_TEST_ERROR([rwsem_spinlock_is_raw])
24         ])
25 ])
26
27 dnl #
28 dnl # 3.16 API Change
29 dnl #
30 dnl # rwsem-spinlock "->activity" changed to "->count"
31 dnl #
32 AC_DEFUN([ZFS_AC_KERNEL_SRC_RWSEM_ACTIVITY], [
33         ZFS_LINUX_TEST_SRC([rwsem_activity], [
34                 #include <linux/rwsem.h>
35         ],[
36                 struct rw_semaphore dummy_semaphore __attribute__ ((unused));
37                 dummy_semaphore.activity = 0;
38         ])
39 ])
40
41 AC_DEFUN([ZFS_AC_KERNEL_RWSEM_ACTIVITY], [
42         AC_MSG_CHECKING([whether struct rw_semaphore has member activity])
43         ZFS_LINUX_TEST_RESULT([rwsem_activity], [
44                 AC_MSG_RESULT(yes)
45                 AC_DEFINE(HAVE_RWSEM_ACTIVITY, 1,
46                     [struct rw_semaphore has member activity])
47         ],[
48                 AC_MSG_RESULT(no)
49         ])
50 ])
51
52 dnl #
53 dnl # 4.8 API Change
54 dnl #
55 dnl # rwsem "->count" changed to atomic_long_t type
56 dnl #
57 AC_DEFUN([ZFS_AC_KERNEL_SRC_RWSEM_ATOMIC_LONG_COUNT], [
58         ZFS_LINUX_TEST_SRC([rwsem_atomic_long_count], [
59                 #include <linux/rwsem.h>
60         ],[
61                 DECLARE_RWSEM(dummy_semaphore);
62                 (void) atomic_long_read(&dummy_semaphore.count);
63         ])
64 ])
65
66 AC_DEFUN([ZFS_AC_KERNEL_RWSEM_ATOMIC_LONG_COUNT], [
67         AC_MSG_CHECKING(
68             [whether struct rw_semaphore has atomic_long_t member count])
69         ZFS_LINUX_TEST_RESULT([rwsem_atomic_long_count], [
70                 AC_MSG_RESULT(yes)
71                 AC_DEFINE(HAVE_RWSEM_ATOMIC_LONG_COUNT, 1,
72                     [struct rw_semaphore has atomic_long_t member count])
73         ],[
74                 AC_MSG_RESULT(no)
75         ])
76 ])
77
78 AC_DEFUN([ZFS_AC_KERNEL_SRC_RWSEM], [
79         ZFS_AC_KERNEL_SRC_RWSEM_SPINLOCK_IS_RAW
80         ZFS_AC_KERNEL_SRC_RWSEM_ACTIVITY
81         ZFS_AC_KERNEL_SRC_RWSEM_ATOMIC_LONG_COUNT
82 ])
83
84 AC_DEFUN([ZFS_AC_KERNEL_RWSEM], [
85         ZFS_AC_KERNEL_RWSEM_SPINLOCK_IS_RAW
86         ZFS_AC_KERNEL_RWSEM_ACTIVITY
87         ZFS_AC_KERNEL_RWSEM_ATOMIC_LONG_COUNT
88 ])