aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorgy Yakovlev <[email protected]>2020-08-27 15:50:13 -0700
committerGitHub <[email protected]>2020-08-27 15:50:13 -0700
commit735ba76104fb5d701641f1785f75b4c74809155c (patch)
treeeb574373de4626235e12e24119894e99a43d83e1
parent770269ef3acb3a5e3fe49213840f00776477d678 (diff)
module/zstd: pass -U__BMI__
If kernel is compiled with -march=znver1 or -march=znver2 zstd module compilation will fail due to SSE register return with SSE disabled. What's interesting, is that -march=skylake also implies -mbmi which defines __BMI__ but compilation succeeds. It is probably due to different BMI implementations on AMD and INTEL processors and the way compiler uses instructions. Reviewed-by: Ryan Moeller <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Georgy Yakovlev <[email protected]> Closes #10758 Closes #10829
-rw-r--r--module/Makefile.bsd2
-rw-r--r--module/zstd/Makefile.in3
2 files changed, 4 insertions, 1 deletions
diff --git a/module/Makefile.bsd b/module/Makefile.bsd
index 53b97dafd..4feb9e1ea 100644
--- a/module/Makefile.bsd
+++ b/module/Makefile.bsd
@@ -356,4 +356,4 @@ CFLAGS.zil.c= -Wno-cast-qual
CFLAGS.zio.c= -Wno-cast-qual
CFLAGS.zrlock.c= -Wno-cast-qual
CFLAGS.zfs_zstd.c= -Wno-cast-qual -Wno-pointer-arith
-CFLAGS.zstd.c= -fno-tree-vectorize
+CFLAGS.zstd.c= -fno-tree-vectorize -U__BMI__
diff --git a/module/zstd/Makefile.in b/module/zstd/Makefile.in
index eea749ea8..f67db710f 100644
--- a/module/zstd/Makefile.in
+++ b/module/zstd/Makefile.in
@@ -20,6 +20,9 @@ ccflags-y += -O3
# Set it for other compilers, too.
$(obj)/lib/zstd.o: c_flags += -fno-tree-vectorize
+# SSE register return with SSE disabled if -march=znverX is passed
+$(obj)/lib/zstd.o: c_flags += -U__BMI__
+
# Quiet warnings about frame size due to unused code in unmodified zstd lib
$(obj)/lib/zstd.o: c_flags += -Wframe-larger-than=20480