From 735ba76104fb5d701641f1785f75b4c74809155c Mon Sep 17 00:00:00 2001 From: Georgy Yakovlev <168902+gyakovlev@users.noreply.github.com> Date: Thu, 27 Aug 2020 15:50:13 -0700 Subject: [PATCH] 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 Reviewed-by: Brian Behlendorf Signed-off-by: Georgy Yakovlev Closes #10758 Closes #10829 --- module/Makefile.bsd | 2 +- module/zstd/Makefile.in | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) 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