mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	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(); | ||||
| 	], [], [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], [ | ||||
| @ -105,9 +111,20 @@ AC_DEFUN([ZFS_AC_KERNEL_FPU], [ | ||||
| 			AC_DEFINE(KERNEL_EXPORTS_X86_FPU, 1, | ||||
| 			    [kernel exports FPU functions]) | ||||
| 		],[ | ||||
| 			AC_MSG_RESULT(internal) | ||||
| 			AC_DEFINE(HAVE_KERNEL_FPU_INTERNAL, 1, | ||||
| 			    [kernel fpu internal]) | ||||
| 			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_DEFINE(HAVE_KERNEL_FPU_INTERNAL, 1, | ||||
| 				    [kernel fpu internal]) | ||||
| 			]) | ||||
| 		]) | ||||
| 	]) | ||||
| ]) | ||||
|  | ||||
| @ -71,9 +71,15 @@ | ||||
| #define	ID_AA64PFR0_EL1		sys_reg(3, 0, 0, 1, 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_begin()		kernel_neon_begin() | ||||
| #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_fini()		do {} while (0) | ||||
| 
 | ||||
|  | ||||
| @ -53,9 +53,15 @@ | ||||
| #include <asm/elf.h> | ||||
| #include <asm/hwcap.h> | ||||
| 
 | ||||
| #if (defined(HAVE_KERNEL_NEON) && defined(CONFIG_KERNEL_MODE_NEON)) | ||||
| #define	kfpu_allowed()		1 | ||||
| #define	kfpu_begin()		kernel_neon_begin() | ||||
| #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_fini()		do {} while (0) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Shengqi Chen
						Shengqi Chen