summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2013-02-05 09:35:43 -0800
committerBrian Behlendorf <[email protected]>2013-02-05 10:05:46 -0800
commitdd3678fc29d75286b57e705454bbd7e60e1b44e0 (patch)
treefc9f976254da7357fe71cd5e88e8251dcaf399c4
parent869f30f1aecbb9fbd03c43980beb2ee16975f2a4 (diff)
Fix atomic64_* autoconf checks
The SPL_AC_ATOMIC_SPINLOCK, SPL_AC_TYPE_ATOMIC64_CMPXCHG, and SPL_AC_TYPE_ATOMIC64_XCHG were all directly including the 'asm/atomic.h' header. As of Linux 3.4 this header was removed which results in a build failure. The right thing to do is include 'linux/atomic.h' however we can't safely do this because it doesn't exist in 2.6.26 kernels. Therefore, we include 'linux/fs.h' which in turn includes the correct atomic header regardless of the kernel version. When these incorrect APIs are used in ZFS the following build failure results. arc.c:791:80: warning: '__ret' may be used uninitialized in this function [-Wuninitialized] arc.c:791:1875: error: call to '__cmpxchg_wrong_size' declared with attribute error: Bad argument size for cmpxchg Since this is all Linux 2.6.24 compatibility code there's an argument to be made that it should be removed because kernels this old are not supported. However, because we're so close to a release I'm going to leave it in place for now. Signed-off-by: Brian Behlendorf <[email protected]> Closes zfsonlinux/zfs#814 Closes zfsonlinux/zfs#1254
-rw-r--r--config/spl-build.m47
1 files changed, 3 insertions, 4 deletions
diff --git a/config/spl-build.m4 b/config/spl-build.m4
index e9695de9a..85184043c 100644
--- a/config/spl-build.m4
+++ b/config/spl-build.m4
@@ -777,7 +777,7 @@ AC_DEFUN([SPL_AC_ATOMIC_SPINLOCK], [
[enable_atomic_spinlocks=check])
SPL_LINUX_TRY_COMPILE([
- #include <asm/atomic.h>
+ #include <linux/fs.h>
],[
atomic64_t *ptr __attribute__ ((unused));
],[
@@ -820,8 +820,7 @@ dnl #
AC_DEFUN([SPL_AC_TYPE_ATOMIC64_CMPXCHG],
[AC_MSG_CHECKING([whether kernel defines atomic64_cmpxchg])
SPL_LINUX_TRY_COMPILE([
- #include <asm/atomic.h>
- #include <asm/system.h>
+ #include <linux/fs.h>
],[
atomic64_cmpxchg((atomic64_t *)NULL, 0, 0);
],[
@@ -840,7 +839,7 @@ dnl #
AC_DEFUN([SPL_AC_TYPE_ATOMIC64_XCHG],
[AC_MSG_CHECKING([whether kernel defines atomic64_xchg])
SPL_LINUX_TRY_COMPILE([
- #include <asm/atomic.h>
+ #include <linux/fs.h>
],[
atomic64_xchg((atomic64_t *)NULL, 0);
],[