dnl #
dnl # 3.1 API Change
dnl #
dnl # The rw_semaphore.wait_lock member was changed from spinlock_t to
dnl # raw_spinlock_t at commit ddb6c9b58a19edcfac93ac670b066c836ff729f1.
dnl #
AC_DEFUN([ZFS_AC_KERNEL_SRC_RWSEM_SPINLOCK_IS_RAW], [
	ZFS_LINUX_TEST_SRC([rwsem_spinlock_is_raw], [
		#include <linux/rwsem.h>
	],[
		struct rw_semaphore dummy_semaphore __attribute__ ((unused));
		raw_spinlock_t dummy_lock __attribute__ ((unused)) =
		    __RAW_SPIN_LOCK_INITIALIZER(dummy_lock);
		dummy_semaphore.wait_lock = dummy_lock;
	])
])

AC_DEFUN([ZFS_AC_KERNEL_RWSEM_SPINLOCK_IS_RAW], [
	AC_MSG_CHECKING([whether struct rw_semaphore member wait_lock is raw])
	ZFS_LINUX_TEST_RESULT([rwsem_spinlock_is_raw], [
		AC_MSG_RESULT(yes)
		AC_DEFINE(RWSEM_SPINLOCK_IS_RAW, 1,
		    [struct rw_semaphore member wait_lock is raw_spinlock_t])
	],[
		AC_MSG_RESULT(no)
	])
])

dnl #
dnl # 3.16 API Change
dnl #
dnl # rwsem-spinlock "->activity" changed to "->count"
dnl #
AC_DEFUN([ZFS_AC_KERNEL_SRC_RWSEM_ACTIVITY], [
	ZFS_LINUX_TEST_SRC([rwsem_activity], [
		#include <linux/rwsem.h>
	],[
		struct rw_semaphore dummy_semaphore __attribute__ ((unused));
		dummy_semaphore.activity = 0;
	])
])

AC_DEFUN([ZFS_AC_KERNEL_RWSEM_ACTIVITY], [
	AC_MSG_CHECKING([whether struct rw_semaphore has member activity])
	ZFS_LINUX_TEST_RESULT([rwsem_activity], [
		AC_MSG_RESULT(yes)
		AC_DEFINE(HAVE_RWSEM_ACTIVITY, 1,
		    [struct rw_semaphore has member activity])
	],[
		AC_MSG_RESULT(no)
	])
])

dnl #
dnl # 4.8 API Change
dnl #
dnl # rwsem "->count" changed to atomic_long_t type
dnl #
AC_DEFUN([ZFS_AC_KERNEL_SRC_RWSEM_ATOMIC_LONG_COUNT], [
	ZFS_LINUX_TEST_SRC([rwsem_atomic_long_count], [
		#include <linux/rwsem.h>
	],[
		DECLARE_RWSEM(dummy_semaphore);
		(void) atomic_long_read(&dummy_semaphore.count);
	])
])

AC_DEFUN([ZFS_AC_KERNEL_RWSEM_ATOMIC_LONG_COUNT], [
	AC_MSG_CHECKING(
	    [whether struct rw_semaphore has atomic_long_t member count])
	ZFS_LINUX_TEST_RESULT([rwsem_atomic_long_count], [
		AC_MSG_RESULT(yes)
		AC_DEFINE(HAVE_RWSEM_ATOMIC_LONG_COUNT, 1,
		    [struct rw_semaphore has atomic_long_t member count])
	],[
		AC_MSG_RESULT(no)
	])
])

AC_DEFUN([ZFS_AC_KERNEL_SRC_RWSEM], [
	ZFS_AC_KERNEL_SRC_RWSEM_SPINLOCK_IS_RAW
	ZFS_AC_KERNEL_SRC_RWSEM_ACTIVITY
	ZFS_AC_KERNEL_SRC_RWSEM_ATOMIC_LONG_COUNT
])

AC_DEFUN([ZFS_AC_KERNEL_RWSEM], [
	ZFS_AC_KERNEL_RWSEM_SPINLOCK_IS_RAW
	ZFS_AC_KERNEL_RWSEM_ACTIVITY
	ZFS_AC_KERNEL_RWSEM_ATOMIC_LONG_COUNT
])
