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)

Reply via email to