Linux 6.2 compat: add check for kernel_neon_* availability
This patch adds check for `kernel_neon_*` symbols on arm and arm64 platforms to address the following issues: 1. Linux 6.2+ on arm64 has exported them with `EXPORT_SYMBOL_GPL`, so license compatibility must be checked before use. 2. On both arm and arm64, the definitions of these symbols are guarded by `CONFIG_KERNEL_MODE_NEON`, but their declarations are still present. Checking in configuration phase only leads to MODPOST errors (undefined references). Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Shengqi Chen <harry-chen@outlook.com> Closes #15711 Closes #14555 Closes: #15401
This commit is contained in:
parent
f71c16a661
commit
976bf9b6a6
|
@ -79,6 +79,12 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_FPU], [
|
||||||
__kernel_fpu_end();
|
__kernel_fpu_end();
|
||||||
], [], [ZFS_META_LICENSE])
|
], [], [ZFS_META_LICENSE])
|
||||||
|
|
||||||
|
ZFS_LINUX_TEST_SRC([kernel_neon], [
|
||||||
|
#include <asm/neon.h>
|
||||||
|
], [
|
||||||
|
kernel_neon_begin();
|
||||||
|
kernel_neon_end();
|
||||||
|
], [], [ZFS_META_LICENSE])
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN([ZFS_AC_KERNEL_FPU], [
|
AC_DEFUN([ZFS_AC_KERNEL_FPU], [
|
||||||
|
@ -105,9 +111,20 @@ AC_DEFUN([ZFS_AC_KERNEL_FPU], [
|
||||||
AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1,
|
AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1,
|
||||||
[kernel exports FPU functions])
|
[kernel exports FPU functions])
|
||||||
],[
|
],[
|
||||||
|
dnl #
|
||||||
|
dnl # ARM neon symbols (only on arm and arm64)
|
||||||
|
dnl # could be GPL-only on arm64 after Linux 6.2
|
||||||
|
dnl #
|
||||||
|
ZFS_LINUX_TEST_RESULT([kernel_neon_license],[
|
||||||
|
AC_MSG_RESULT(kernel_neon_*)
|
||||||
|
AC_DEFINE(HAVE_KERNEL_NEON, 1,
|
||||||
|
[kernel has kernel_neon_* functions])
|
||||||
|
],[
|
||||||
|
# catch-all
|
||||||
AC_MSG_RESULT(internal)
|
AC_MSG_RESULT(internal)
|
||||||
AC_DEFINE(HAVE_KERNEL_FPU_INTERNAL, 1,
|
AC_DEFINE(HAVE_KERNEL_FPU_INTERNAL, 1,
|
||||||
[kernel fpu internal])
|
[kernel fpu internal])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
|
])
|
||||||
|
|
|
@ -71,9 +71,15 @@
|
||||||
#define ID_AA64PFR0_EL1 sys_reg(3, 0, 0, 1, 0)
|
#define ID_AA64PFR0_EL1 sys_reg(3, 0, 0, 1, 0)
|
||||||
#define ID_AA64ISAR0_EL1 sys_reg(3, 0, 0, 6, 0)
|
#define ID_AA64ISAR0_EL1 sys_reg(3, 0, 0, 6, 0)
|
||||||
|
|
||||||
|
#if (defined(HAVE_KERNEL_NEON) && defined(CONFIG_KERNEL_MODE_NEON))
|
||||||
#define kfpu_allowed() 1
|
#define kfpu_allowed() 1
|
||||||
#define kfpu_begin() kernel_neon_begin()
|
#define kfpu_begin() kernel_neon_begin()
|
||||||
#define kfpu_end() kernel_neon_end()
|
#define kfpu_end() kernel_neon_end()
|
||||||
|
#else
|
||||||
|
#define kfpu_allowed() 0
|
||||||
|
#define kfpu_begin() do {} while (0)
|
||||||
|
#define kfpu_end() do {} while (0)
|
||||||
|
#endif
|
||||||
#define kfpu_init() (0)
|
#define kfpu_init() (0)
|
||||||
#define kfpu_fini() do {} while (0)
|
#define kfpu_fini() do {} while (0)
|
||||||
|
|
||||||
|
|
|
@ -53,9 +53,15 @@
|
||||||
#include <asm/elf.h>
|
#include <asm/elf.h>
|
||||||
#include <asm/hwcap.h>
|
#include <asm/hwcap.h>
|
||||||
|
|
||||||
|
#if (defined(HAVE_KERNEL_NEON) && defined(CONFIG_KERNEL_MODE_NEON))
|
||||||
#define kfpu_allowed() 1
|
#define kfpu_allowed() 1
|
||||||
#define kfpu_begin() kernel_neon_begin()
|
#define kfpu_begin() kernel_neon_begin()
|
||||||
#define kfpu_end() kernel_neon_end()
|
#define kfpu_end() kernel_neon_end()
|
||||||
|
#else
|
||||||
|
#define kfpu_allowed() 0
|
||||||
|
#define kfpu_begin() do {} while (0)
|
||||||
|
#define kfpu_end() do {} while (0)
|
||||||
|
#endif
|
||||||
#define kfpu_init() (0)
|
#define kfpu_init() (0)
|
||||||
#define kfpu_fini() do {} while (0)
|
#define kfpu_fini() do {} while (0)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue