Package: zfs-dkms Version: 0.8.4-2~bpo10+1 Severity: important Dear Maintainer,
Currently the zfs-0.8 kernel module is broken on the 32-bit ARMv7 platform (armhf). The issue has been reported upstream [1] and was fixed in a recent pull request [2]. However, the patch [3] is did not make it into the zfs 0.8.4 release, which is the latest release version. I have applied the patch (attached) in a local Debian-package build on my ARMv7 system (i.e. a helios4 NAS) and it fixes the issue on my system as expected. I would like to propose this patch to be included in the current Debian package until a new zfs patch-release (i.e. 0.8.5) is available. Cheers, Armin [1] https://github.com/openzfs/zfs/issues/9957 [2] https://github.com/openzfs/zfs/pull/9967 [3] https://github.com/openzfs/zfs/commit/ab16c87e5560b5d8554386cfaded72e7f61465b8 -- System Information: Debian Release: 10.5 APT prefers stable-updates APT policy: (500, 'stable-updates'), (500, 'stable') Architecture: armhf (armv7l) Kernel: Linux 5.4.43-mvebu (SMP w/2 CPU cores) Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to en_US.UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to en_US.UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages zfs-dkms depends on: ii debconf [debconf-2.0] 1.5.71 ii dkms 2.6.1-4 ii file 1:5.35-4+deb10u1 ii libc6-dev [libc-dev] 2.28-10 ii libpython3-stdlib 3.7.3-1 ii lsb-release 10.2019051400 ii perl 5.28.1-6+deb10u1 ii python3-distutils 3.7.3-1 Versions of packages zfs-dkms recommends: ii linux-libc-dev 4.19.132-1 ii zfs-zed 0.8.4-2~bpo10+1 ii zfsutils-linux 0.8.4-2~bpo10+1 Versions of packages zfs-dkms suggests: ii debhelper 12.1.1 -- debconf information: * zfs-dkms/stop-build-for-32bit-kernel: false * zfs-dkms/note-incompatible-licenses: zfs-dkms/stop-build-for-unknown-kernel: true
commit ab16c87e5560b5d8554386cfaded72e7f61465b8 Author: Brian Behlendorf <behlendo...@llnl.gov> Date: Wed Apr 29 17:30:13 2020 -0700 Add longjmp support for Thumb-2 When a Thumb-2 kernel is being used, then longjmp must be implemented using the Thumb-2 instruction set in module/lua/setjmp/setjmp_arm.S. Original-patch-by: @jsrlabs Reviewed-by: @awehrfritz Signed-off-by: Brian Behlendorf <behlendo...@llnl.gov> Closes #7408 Closes #9957 Closes #9967 diff --git a/module/lua/setjmp/setjmp_arm.S b/module/lua/setjmp/setjmp_arm.S index 8c08f4e6f..78bc3e0b3 100644 --- a/module/lua/setjmp/setjmp_arm.S +++ b/module/lua/setjmp/setjmp_arm.S @@ -31,12 +31,19 @@ #if defined(__arm__) && !defined(__aarch64__) +#if defined(__thumb2__) +#define _FUNC_MODE .code 16; .thumb_func +#else +#define _FUNC_MODE .code 32 +#endif + #define ENTRY(x) \ .text; \ + .syntax unified; \ .align 2; \ .global x; \ .type x,#function; \ - .code 32; \ + _FUNC_MODE; \ x: #define END(x) \ @@ -49,13 +56,23 @@ x: * setjump + longjmp */ ENTRY(setjmp) +#if defined(__thumb2__) + mov ip, sp + stmia r0, {r4-r12,r14} +#else stmia r0, {r4-r14} +#endif mov r0, #0x00000000 RET END(setjmp) ENTRY(longjmp) +#if defined(__thumb2__) + ldmia r0, {r4-r12,r14} + mov sp, ip +#else ldmia r0, {r4-r14} +#endif mov r0, #0x00000001 RET END(longjmp)