aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/kernel-types.m440
-rw-r--r--config/kernel.m42
-rw-r--r--include/os/linux/spl/sys/types.h2
3 files changed, 44 insertions, 0 deletions
diff --git a/config/kernel-types.m4 b/config/kernel-types.m4
new file mode 100644
index 000000000..ed76af283
--- /dev/null
+++ b/config/kernel-types.m4
@@ -0,0 +1,40 @@
+dnl #
+dnl # check if kernel provides definitions for given types
+dnl #
+
+dnl _ZFS_AC_KERNEL_SRC_TYPE(type)
+AC_DEFUN([_ZFS_AC_KERNEL_SRC_TYPE], [
+ ZFS_LINUX_TEST_SRC([type_$1], [
+ #include <linux/types.h>
+ ],[
+ const $1 __attribute__((unused)) x = ($1) 0;
+ ])
+])
+
+dnl _ZFS_AC_KERNEL_TYPE(type)
+AC_DEFUN([_ZFS_AC_KERNEL_TYPE], [
+ AC_MSG_CHECKING([whether kernel defines $1])
+ ZFS_LINUX_TEST_RESULT([type_$1], [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_KERNEL_]m4_quote(m4_translit([$1], [a-z], [A-Z])),
+ 1, [kernel defines $1])
+ ], [
+ AC_MSG_RESULT([no])
+ ])
+])
+
+dnl ZFS_AC_KERNEL_TYPES([types...])
+AC_DEFUN([ZFS_AC_KERNEL_TYPES], [
+ AC_DEFUN([ZFS_AC_KERNEL_SRC_TYPES], [
+ m4_foreach_w([type], [$1], [
+ _ZFS_AC_KERNEL_SRC_TYPE(type)
+ ])
+ ])
+ AC_DEFUN([ZFS_AC_KERNEL_TYPES], [
+ m4_foreach_w([type], [$1], [
+ _ZFS_AC_KERNEL_TYPE(type)
+ ])
+ ])
+])
+
+ZFS_AC_KERNEL_TYPES([intptr_t])
diff --git a/config/kernel.m4 b/config/kernel.m4
index 548905ccd..b51477b6a 100644
--- a/config/kernel.m4
+++ b/config/kernel.m4
@@ -37,6 +37,7 @@ dnl # only once the compilation can be done in parallel significantly
dnl # speeding up the process.
dnl #
AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
+ ZFS_AC_KERNEL_SRC_TYPES
ZFS_AC_KERNEL_SRC_OBJTOOL
ZFS_AC_KERNEL_SRC_GLOBAL_PAGE_STATE
ZFS_AC_KERNEL_SRC_ACCESS_OK_TYPE
@@ -187,6 +188,7 @@ dnl #
dnl # Check results of kernel interface tests.
dnl #
AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
+ ZFS_AC_KERNEL_TYPES
ZFS_AC_KERNEL_ACCESS_OK_TYPE
ZFS_AC_KERNEL_GLOBAL_PAGE_STATE
ZFS_AC_KERNEL_OBJTOOL
diff --git a/include/os/linux/spl/sys/types.h b/include/os/linux/spl/sys/types.h
index 20ba457f7..94ba7b6ad 100644
--- a/include/os/linux/spl/sys/types.h
+++ b/include/os/linux/spl/sys/types.h
@@ -38,7 +38,9 @@ typedef unsigned long ulong_t;
typedef unsigned long long u_longlong_t;
typedef long long longlong_t;
+#ifndef HAVE_KERNEL_INTPTR_T
typedef long intptr_t;
+#endif
typedef unsigned long long rlim64_t;
typedef struct task_struct kthread_t;