summaryrefslogtreecommitdiff
blob: 9ac8a4308dd6399089b4b84200ca9762cb1a18da (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
60
61
62
63
64
65
66
67
68
69
70
From dd3678fc29d75286b57e705454bbd7e60e1b44e0 Mon Sep 17 00:00:00 2001
From: Brian Behlendorf <behlendorf1@llnl.gov>
Date: Tue, 5 Feb 2013 09:35:43 -0800
Subject: [PATCH] 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 <behlendorf1@llnl.gov>
Closes zfsonlinux/zfs#814
Closes zfsonlinux/zfs#1254
---
 config/spl-build.m4 |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/config/spl-build.m4 b/config/spl-build.m4
index e9695de..8518404 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);
 	],[
-- 
1.7.10