From: WANG Xuerui <[email protected]>
Hi,
While working on porting the RAID6 math to the LoongArch SIMD
extensions, I found out the raid6test tool build is broken for some
time (seemingly on all arches), so I took some time to fix it and did
some cleanups while at it.
Before the fix:
> In file included from ../../../include/linux/export.h:5,
> from recov.c:16:
> ../../../include/linux/compiler.h:246:10: fatal error: asm/rwonce.h: No such file or directory
> 246 | #include <asm/rwonce.h>
> | ^~~~~~~~~~~~~~
> compilation terminated.
> make: *** [Makefile:58: recov.o] Error 1
After the fix I was able to build and test it on x86_64 and loongarch64,
with clean `git status` output after building.
WANG Xuerui (5):
raid6: remove the <linux/export.h> include from recov.c
raid6: guard the tables.c include of <linux/export.h> with __KERNEL__
raid6: test: cosmetic cleanups for the test Makefile
raid6: test: make sure all intermediate and artifact files are
.gitignored
raid6: test: only check for Altivec if building on powerpc hosts
lib/raid6/mktables.c | 2 ++
lib/raid6/recov.c | 1 -
lib/raid6/test/.gitignore | 2 ++
lib/raid6/test/Makefile | 50 ++++++++++++++++++++-------------------
4 files changed, 30 insertions(+), 25 deletions(-)
create mode 100644 lib/raid6/test/.gitignore
--
2.40.0
From: WANG Xuerui <[email protected]>
Currently when the raid6test utility is built, the resulting binary and
an int.uc file are not being ignored, which can get inadvertently
committed as a result when one works on the raid6 code. Ignore them to
make `git status` clean at all times.
Signed-off-by: WANG Xuerui <[email protected]>
---
lib/raid6/test/.gitignore | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 lib/raid6/test/.gitignore
diff --git a/lib/raid6/test/.gitignore b/lib/raid6/test/.gitignore
new file mode 100644
index 0000000000000..bb92e11396c6e
--- /dev/null
+++ b/lib/raid6/test/.gitignore
@@ -0,0 +1,2 @@
+/int.uc
+/raid6test
--
2.40.0
From: WANG Xuerui <[email protected]>
There is no exported symbol left in recov.c, so the include is now
unnecessary, and breaks the raid6test build. Remove it.
Signed-off-by: WANG Xuerui <[email protected]>
---
lib/raid6/recov.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/lib/raid6/recov.c b/lib/raid6/recov.c
index e49d519de6cbe..a7c1b2bbe40d8 100644
--- a/lib/raid6/recov.c
+++ b/lib/raid6/recov.c
@@ -13,7 +13,6 @@
* the syndrome.)
*/
-#include <linux/export.h>
#include <linux/raid/pq.h>
/* Recover two failed data blocks. */
--
2.40.0
From: WANG Xuerui <[email protected]>
Altivec is only available for powerpc hosts, so only check for its
availability when the host is powerpc, to avoid error messages being
shown on architectures other than x86, arm or powerpc.
Signed-off-by: WANG Xuerui <[email protected]>
---
lib/raid6/test/Makefile | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/lib/raid6/test/Makefile b/lib/raid6/test/Makefile
index 143cda60faa12..1f693ea3b980c 100644
--- a/lib/raid6/test/Makefile
+++ b/lib/raid6/test/Makefile
@@ -35,6 +35,12 @@ ifeq ($(ARCH),aarch64)
HAS_NEON = yes
endif
+ifeq ($(findstring ppc,$(ARCH)),ppc)
+ CFLAGS += -I../../../arch/powerpc/include
+ HAS_ALTIVEC := $(shell printf '$(pound)include <altivec.h>\nvector int a;\n' |\
+ gcc -c -x c - >/dev/null && rm ./-.o && echo yes)
+endif
+
ifeq ($(IS_X86),yes)
OBJS += mmx.o sse1.o sse2.o avx2.o recov_ssse3.o recov_avx2.o avx512.o recov_avx512.o
CFLAGS += -DCONFIG_X86
@@ -44,15 +50,10 @@ ifeq ($(IS_X86),yes)
else ifeq ($(HAS_NEON),yes)
OBJS += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1
-else
- HAS_ALTIVEC := $(shell printf '$(pound)include <altivec.h>\nvector int a;\n' |\
- gcc -c -x c - >/dev/null && rm ./-.o && echo yes)
- ifeq ($(HAS_ALTIVEC),yes)
- CFLAGS += -I../../../arch/powerpc/include
- CFLAGS += -DCONFIG_ALTIVEC
- OBJS += altivec1.o altivec2.o altivec4.o altivec8.o \
- vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o
- endif
+else ifeq ($(HAS_ALTIVEC),yes)
+ CFLAGS += -DCONFIG_ALTIVEC
+ OBJS += altivec1.o altivec2.o altivec4.o altivec8.o \
+ vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o
endif
.c.o:
--
2.40.0
From: WANG Xuerui <[email protected]>
Use tabs/spaces consistently: hard tabs for marking recipe lines only,
spaces for everything else.
Also, the OPTFLAGS declaration actually included the tabs preceding the
line comment, making compiler invocation lines unnecessarily long. As
the entire block of declarations are meant for ad-hoc customization
(otherwise they would probably make use of `?=` instead of `=`), move
the "Adjust as desired" comment above the block too to fix the long
invocation lines.
Signed-off-by: WANG Xuerui <[email protected]>
---
lib/raid6/test/Makefile | 31 ++++++++++++++++---------------
1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/lib/raid6/test/Makefile b/lib/raid6/test/Makefile
index 4fb7700a741bd..143cda60faa12 100644
--- a/lib/raid6/test/Makefile
+++ b/lib/raid6/test/Makefile
@@ -6,14 +6,15 @@
pound := \#
-CC = gcc
-OPTFLAGS = -O2 # Adjust as desired
-CFLAGS = -I.. -I ../../../include -g $(OPTFLAGS)
-LD = ld
-AWK = awk -f
-AR = ar
-RANLIB = ranlib
-OBJS = int1.o int2.o int4.o int8.o int16.o int32.o recov.o algos.o tables.o
+# Adjust as desired
+CC = gcc
+OPTFLAGS = -O2
+CFLAGS = -I.. -I ../../../include -g $(OPTFLAGS)
+LD = ld
+AWK = awk -f
+AR = ar
+RANLIB = ranlib
+OBJS = int1.o int2.o int4.o int8.o int16.o int32.o recov.o algos.o tables.o
ARCH := $(shell uname -m 2>/dev/null | sed -e /s/i.86/i386/)
ifeq ($(ARCH),i386)
@@ -37,9 +38,9 @@ endif
ifeq ($(IS_X86),yes)
OBJS += mmx.o sse1.o sse2.o avx2.o recov_ssse3.o recov_avx2.o avx512.o recov_avx512.o
CFLAGS += -DCONFIG_X86
- CFLAGS += $(shell echo "vpmovm2b %k1, %zmm5" | \
- gcc -c -x assembler - >/dev/null 2>&1 && \
- rm ./-.o && echo -DCONFIG_AS_AVX512=1)
+ CFLAGS += $(shell echo "vpmovm2b %k1, %zmm5" | \
+ gcc -c -x assembler - >/dev/null 2>&1 && \
+ rm ./-.o && echo -DCONFIG_AS_AVX512=1)
else ifeq ($(HAS_NEON),yes)
OBJS += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1
@@ -63,12 +64,12 @@ endif
%.uc: ../%.uc
cp -f $< $@
-all: raid6.a raid6test
+all: raid6.a raid6test
raid6.a: $(OBJS)
- rm -f $@
- $(AR) cq $@ $^
- $(RANLIB) $@
+ rm -f $@
+ $(AR) cq $@ $^
+ $(RANLIB) $@
raid6test: test.c raid6.a
$(CC) $(CFLAGS) -o raid6test $^
--
2.40.0
From: WANG Xuerui <[email protected]>
The export directives for the tables are already emitted with __KERNEL__
guards, but the <linux/export.h> include is not, causing errors when
building the raid6test program. Guard this include too to fix the
raid6test build.
Signed-off-by: WANG Xuerui <[email protected]>
---
lib/raid6/mktables.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/lib/raid6/mktables.c b/lib/raid6/mktables.c
index f02e10fa62381..3be03793237c2 100644
--- a/lib/raid6/mktables.c
+++ b/lib/raid6/mktables.c
@@ -56,7 +56,9 @@ int main(int argc, char *argv[])
uint8_t v;
uint8_t exptbl[256], invtbl[256];
+ printf("#ifdef __KERNEL__\n");
printf("#include <linux/export.h>\n");
+ printf("#endif\n");
printf("#include <linux/raid/pq.h>\n");
/* Compute multiplication table */
--
2.40.0
On Mon, Jul 31, 2023 at 2:49 PM WANG Xuerui <[email protected]> wrote:
>
> From: WANG Xuerui <[email protected]>
>
> Currently when the raid6test utility is built, the resulting binary and
> an int.uc file are not being ignored, which can get inadvertently
> committed as a result when one works on the raid6 code. Ignore them to
> make `git status` clean at all times.
>
> Signed-off-by: WANG Xuerui <[email protected]>
> ---
> lib/raid6/test/.gitignore | 2 ++
> 1 file changed, 2 insertions(+)
> create mode 100644 lib/raid6/test/.gitignore
>
> diff --git a/lib/raid6/test/.gitignore b/lib/raid6/test/.gitignore
> new file mode 100644
> index 0000000000000..bb92e11396c6e
> --- /dev/null
> +++ b/lib/raid6/test/.gitignore
> @@ -0,0 +1,2 @@
> +/int.uc
We also need neon.uc, right?
Song
> +/raid6test
> --
> 2.40.0
>