All of lore.kernel.org
 help / color / mirror / Atom feed
* [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests
@ 2024-10-23 15:26 Raghavendra Rao Ananta
  2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 1/4] arm: Fix clang error in sve_vl() Raghavendra Rao Ananta
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Raghavendra Rao Ananta @ 2024-10-23 15:26 UTC (permalink / raw)
  To: Subhasish Ghosh, Joey Gouly, Andrew Jones
  Cc: Oliver Upton, Marc Zyngier, Raghavendra Rao Anata,
	linux-arm-kernel, kvmarm, linux-kernel, kvm

When compiled with clang for arm64, some build errors were observed
along the fpu code. Moreover, data aborts were seen while running
the arm/fpu test due to misconfigured input/output args in the inline
assembly.

The series tries to address these issues.

v2:
 - Fix build errors for newer clang versions that push 'q' registers out
   of scope under '-mgeneral-regs-only'. (Andrew)

v1:
https://lore.kernel.org/all/20241022004710.1888067-1-rananta@google.com/

- Raghavendra

Raghavendra Rao Ananta (4):
  arm: Fix clang error in sve_vl()
  arm: fpu: Convert 'q' registers to 'v' to satisfy clang
  arm: fpu: Add '.arch_extension fp' to fpu macros
  arm: fpu: Fix the input/output args for inline asm in fpu.c

 arm/fpu.c                 | 52 ++++++++++++++++++++-------------------
 lib/arm64/asm/processor.h |  2 +-
 2 files changed, 28 insertions(+), 26 deletions(-)


base-commit: f246b16099478a916eab37b9bd1eb07c743a67d5
-- 
2.47.0.105.g07ac214952-goog


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [kvm-unit-tests PATCH v2 1/4] arm: Fix clang error in sve_vl()
  2024-10-23 15:26 [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests Raghavendra Rao Ananta
@ 2024-10-23 15:26 ` Raghavendra Rao Ananta
  2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 2/4] arm: fpu: Convert 'q' registers to 'v' to satisfy clang Raghavendra Rao Ananta
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Raghavendra Rao Ananta @ 2024-10-23 15:26 UTC (permalink / raw)
  To: Subhasish Ghosh, Joey Gouly, Andrew Jones
  Cc: Oliver Upton, Marc Zyngier, Raghavendra Rao Anata,
	linux-arm-kernel, kvmarm, linux-kernel, kvm

Fix the following clang error in sve_vl():

In file included from arm/selftest.c:16:
kvm-unit-tests/lib/asm/processor.h:163:16:
error: value size does not match register size specified by the
constraint and modifier [-Werror,-Wasm-operand-widths]
                     : "=r" (vl));
                             ^
kvm-unit-tests/lib/asm/processor.h:162:14:
note: use constraint modifier "w"
                     "rdvl %0, #8"
                           ^~
                           %w0
1 error generated.

Fixes: d47d370c8f ("arm: Add test for FPU/SIMD context save/restore")
Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
---
 lib/arm64/asm/processor.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/arm64/asm/processor.h b/lib/arm64/asm/processor.h
index b28d41fd..e261e74d 100644
--- a/lib/arm64/asm/processor.h
+++ b/lib/arm64/asm/processor.h
@@ -159,7 +159,7 @@ static inline int sve_vl(void)
 	int vl;
 
 	asm volatile(".arch_extension sve\n"
-		     "rdvl %0, #8"
+		     "rdvl %w0, #8"
 		     : "=r" (vl));
 
 	return vl;
-- 
2.47.0.105.g07ac214952-goog


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [kvm-unit-tests PATCH v2 2/4] arm: fpu: Convert 'q' registers to 'v' to satisfy clang
  2024-10-23 15:26 [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests Raghavendra Rao Ananta
  2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 1/4] arm: Fix clang error in sve_vl() Raghavendra Rao Ananta
@ 2024-10-23 15:26 ` Raghavendra Rao Ananta
  2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 3/4] arm: fpu: Add '.arch_extension fp' to fpu macros Raghavendra Rao Ananta
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Raghavendra Rao Ananta @ 2024-10-23 15:26 UTC (permalink / raw)
  To: Subhasish Ghosh, Joey Gouly, Andrew Jones
  Cc: Oliver Upton, Marc Zyngier, Raghavendra Rao Anata,
	linux-arm-kernel, kvmarm, linux-kernel, kvm

Clang doesn't seem to support 'q' register notation in the clobbered
list, and hence throws the following error:

arm/fpu.c:235:3: error: unknown register name 'q0' in asm
                fpu_reg_read(outdata);
                ^
arm/fpu.c:59:10: note: expanded from macro 'fpu_reg_read'
                     : "q0", "q1", "q2", "q3",          \
                       ^
arm/fpu.c:281:3: error: unknown register name 'q0' in asm
                fpu_reg_write(*indata);
                ^
arm/fpu.c:92:10: note: expanded from macro 'fpu_reg_write'
                     : "q0", "q1", "q2", "q3",          \
                       ^
2 errors generated.

Hence, replace 'q' with 'v' registers for the clobbered list.

Fixes: d47d370c8f ("arm: Add test for FPU/SIMD context save/restore")
Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
---
 arm/fpu.c | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/arm/fpu.c b/arm/fpu.c
index edbd9a94..587b6ea3 100644
--- a/arm/fpu.c
+++ b/arm/fpu.c
@@ -56,16 +56,16 @@ static inline bool arch_collect_entropy(uint64_t *random)
 		     "stp q30, q31, [%0], #32\n\t"	\
 		     : "=r" (__val)			\
 		     :					\
-		     : "q0", "q1", "q2", "q3",		\
-			"q4", "q5", "q6", "q7",		\
-			"q8", "q9", "q10", "q11",	\
-			"q12", "q13", "q14",		\
-			"q15", "q16", "q17",		\
-			"q18", "q19", "q20",		\
-			"q21", "q22", "q23",		\
-			"q24", "q25", "q26",		\
-			"q27", "q28", "q29",		\
-			"q30", "q31", "memory");	\
+		     : "v0", "v1", "v2", "v3",		\
+			"v4", "v5", "v6", "v7",		\
+			"v8", "v9", "v10", "v11",	\
+			"v12", "v13", "v14",		\
+			"v15", "v16", "v17",		\
+			"v18", "v19", "v20",		\
+			"v21", "v22", "v23",		\
+			"v24", "v25", "v26",		\
+			"v27", "v28", "v29",		\
+			"v30", "v31", "memory");	\
 })
 
 #define fpu_reg_write(val)				\
@@ -89,16 +89,16 @@ do {							\
 		     "ldp q30, q31, [%0], #32\n\t"	\
 		     :					\
 		     : "r" (__val)			\
-		     : "q0", "q1", "q2", "q3",		\
-			"q4", "q5", "q6", "q7",		\
-			"q8", "q9", "q10", "q11",	\
-			"q12", "q13", "q14",		\
-			"q15", "q16", "q17",		\
-			"q18", "q19", "q20",		\
-			"q21", "q22", "q23",		\
-			"q24", "q25", "q26",		\
-			"q27", "q28", "q29",		\
-			"q30", "q31", "memory");	\
+		     : "v0", "v1", "v2", "v3",		\
+			"v4", "v5", "v6", "v7",		\
+			"v8", "v9", "v10", "v11",	\
+			"v12", "v13", "v14",		\
+			"v15", "v16", "v17",		\
+			"v18", "v19", "v20",		\
+			"v21", "v22", "v23",		\
+			"v24", "v25", "v26",		\
+			"v27", "v28", "v29",		\
+			"v30", "v31", "memory");	\
 } while (0)
 
 #ifdef CC_HAS_SVE
-- 
2.47.0.105.g07ac214952-goog


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [kvm-unit-tests PATCH v2 3/4] arm: fpu: Add '.arch_extension fp' to fpu macros
  2024-10-23 15:26 [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests Raghavendra Rao Ananta
  2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 1/4] arm: Fix clang error in sve_vl() Raghavendra Rao Ananta
  2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 2/4] arm: fpu: Convert 'q' registers to 'v' to satisfy clang Raghavendra Rao Ananta
@ 2024-10-23 15:26 ` Raghavendra Rao Ananta
  2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 4/4] arm: fpu: Fix the input/output args for inline asm in fpu.c Raghavendra Rao Ananta
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Raghavendra Rao Ananta @ 2024-10-23 15:26 UTC (permalink / raw)
  To: Subhasish Ghosh, Joey Gouly, Andrew Jones
  Cc: Oliver Upton, Marc Zyngier, Raghavendra Rao Anata,
	linux-arm-kernel, kvmarm, linux-kernel, kvm

Since the tests are built with '-mgeneral-regs-only', clang-18 tends to
push 'q' registers out of the scope and hence, the following error is
observed:

arm/fpu.c:281:3: error: instruction requires: fp-armv8
  281 |                 fpu_reg_write(*indata);
      |                 ^
arm/fpu.c:74:15: note: expanded from macro 'fpu_reg_write'
   74 |         asm volatile("ldp q0, q1, [%0], #32\n\t"        \
      |                      ^
<inline asm>:1:2: note: instantiated into assembly here
    1 |         ldp q0, q1, [x8], #32
      |         ^

Hence, explicitly add fp support where these registers are used.

Reported-by: Andrew Jones <andrew.jones@linux.dev>
Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
---
 arm/fpu.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/arm/fpu.c b/arm/fpu.c
index 587b6ea3..f327a349 100644
--- a/arm/fpu.c
+++ b/arm/fpu.c
@@ -38,7 +38,8 @@ static inline bool arch_collect_entropy(uint64_t *random)
 #define fpu_reg_read(val)				\
 ({							\
 	uint64_t *__val = (val);			\
-	asm volatile("stp q0, q1, [%0], #32\n\t"	\
+	asm volatile(".arch_extension fp\n"		\
+		     "stp q0, q1, [%0], #32\n\t"	\
 		     "stp q2, q3, [%0], #32\n\t"	\
 		     "stp q4, q5, [%0], #32\n\t"	\
 		     "stp q6, q7, [%0], #32\n\t"	\
@@ -71,7 +72,8 @@ static inline bool arch_collect_entropy(uint64_t *random)
 #define fpu_reg_write(val)				\
 do {							\
 	uint64_t *__val = (val);			\
-	asm volatile("ldp q0, q1, [%0], #32\n\t"	\
+	asm volatile(".arch_extension fp\n"		\
+		     "ldp q0, q1, [%0], #32\n\t"	\
 		     "ldp q2, q3, [%0], #32\n\t"	\
 		     "ldp q4, q5, [%0], #32\n\t"	\
 		     "ldp q6, q7, [%0], #32\n\t"	\
-- 
2.47.0.105.g07ac214952-goog


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [kvm-unit-tests PATCH v2 4/4] arm: fpu: Fix the input/output args for inline asm in fpu.c
  2024-10-23 15:26 [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests Raghavendra Rao Ananta
                   ` (2 preceding siblings ...)
  2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 3/4] arm: fpu: Add '.arch_extension fp' to fpu macros Raghavendra Rao Ananta
@ 2024-10-23 15:26 ` Raghavendra Rao Ananta
  2024-10-24  8:31 ` [kvm-unit-tests PATCH 5/4] arm64: gitlab-ci: Add clang build tests Andrew Jones
  2024-10-24  8:40 ` [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests Andrew Jones
  5 siblings, 0 replies; 7+ messages in thread
From: Raghavendra Rao Ananta @ 2024-10-23 15:26 UTC (permalink / raw)
  To: Subhasish Ghosh, Joey Gouly, Andrew Jones
  Cc: Oliver Upton, Marc Zyngier, Raghavendra Rao Anata,
	linux-arm-kernel, kvmarm, linux-kernel, kvm

The macros fpu_reg_{read,write} post-increment the '__val'
pointer register as a part of 'stp' and 'ldp' instructions.
As a result, mark it with "+r" for the compiler to treat it
as read-write operand.

On the contrary, sve_reg_read() never updates the value of the
pointer/register. Hence, mark this as "r" for the compiler to
treat it as read-only operand.

Without these adjustments, the compiler can potentially perform
optimizations over the registers holding the pointers that could
lead to data aborts.

Fixes: d47d370c8f ("arm: Add test for FPU/SIMD context save/restore")
Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
---
 arm/fpu.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arm/fpu.c b/arm/fpu.c
index f327a349..f44ed82a 100644
--- a/arm/fpu.c
+++ b/arm/fpu.c
@@ -55,7 +55,7 @@ static inline bool arch_collect_entropy(uint64_t *random)
 		     "stp q26, q27, [%0], #32\n\t"	\
 		     "stp q28, q29, [%0], #32\n\t"	\
 		     "stp q30, q31, [%0], #32\n\t"	\
-		     : "=r" (__val)			\
+		     : "+r" (__val)			\
 		     :					\
 		     : "v0", "v1", "v2", "v3",		\
 			"v4", "v5", "v6", "v7",		\
@@ -89,8 +89,8 @@ do {							\
 		     "ldp q26, q27, [%0], #32\n\t"	\
 		     "ldp q28, q29, [%0], #32\n\t"	\
 		     "ldp q30, q31, [%0], #32\n\t"	\
+		     : "+r" (__val)			\
 		     :					\
-		     : "r" (__val)			\
 		     : "v0", "v1", "v2", "v3",		\
 			"v4", "v5", "v6", "v7",		\
 			"v8", "v9", "v10", "v11",	\
@@ -140,8 +140,8 @@ do {							\
 		     "str z29, [%0, #29, MUL VL]\n"	\
 		     "str z30, [%0, #30, MUL VL]\n"	\
 		     "str z31, [%0, #31, MUL VL]\n"	\
-		     : "=r" (__val)			\
 		     :					\
+		     : "r" (__val)			\
 		     : "z0", "z1", "z2", "z3",		\
 			"z4", "z5", "z6", "z7",		\
 			"z8", "z9", "z10", "z11",	\
-- 
2.47.0.105.g07ac214952-goog


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [kvm-unit-tests PATCH 5/4] arm64: gitlab-ci: Add clang build tests
  2024-10-23 15:26 [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests Raghavendra Rao Ananta
                   ` (3 preceding siblings ...)
  2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 4/4] arm: fpu: Fix the input/output args for inline asm in fpu.c Raghavendra Rao Ananta
@ 2024-10-24  8:31 ` Andrew Jones
  2024-10-24  8:40 ` [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests Andrew Jones
  5 siblings, 0 replies; 7+ messages in thread
From: Andrew Jones @ 2024-10-24  8:31 UTC (permalink / raw)
  To: kvm, kvmarm
  Cc: rananta, pbonzini, thuth, subhasish.ghosh, joey.gouly,
	oliver.upton, maz

Test building aarch64 with clang both with and without --enable-efi.
Use in-tree building for one and out-of-tree building for the other
to get more coverage there too.

Signed-off-by: Andrew Jones <andrew.jones@linux.dev>
---
 .gitlab-ci.yml | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b7ad99870e5a..aa69ca594ba3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -80,6 +80,52 @@ build-aarch64-efi-acpi:
       | tee results.txt
  - grep -q PASS results.txt && ! grep -q FAIL results.txt
 
+build-aarch64-clang:
+ extends: .outoftree_template
+ script:
+ - dnf install -y qemu-system-aarch64 gcc-aarch64-linux-gnu clang
+ - mkdir build
+ - cd build
+ - ../configure --arch=arm64 --cc=clang --cflags='--target=aarch64' --cross-prefix=aarch64-linux-gnu-
+ - make -j2
+ - ACCEL=tcg MAX_SMP=8 ./run_tests.sh
+      cache
+      debug-bp
+      debug-sstep
+      debug-wp
+      gicv2-active
+      gicv2-ipi
+      gicv2-mmio
+      gicv3-active
+      gicv3-ipi
+      its-introspection
+      its-trigger
+      pci-test
+      pmu-cycle-counter
+      pmu-event-counter-config
+      pmu-sw-incr
+      selftest-setup
+      selftest-smp
+      selftest-vectors-kernel
+      selftest-vectors-user
+      timer
+      | tee results.txt
+ - grep -q PASS results.txt && ! grep -q FAIL results.txt
+
+build-aarch64-clang-efi:
+ extends: .intree_template
+ script:
+ - dnf install -y edk2-aarch64 qemu-system-aarch64 gcc-aarch64-linux-gnu clang
+ - ./configure --arch=arm64 --cc=clang --cflags='--target=aarch64' --cross-prefix=aarch64-linux-gnu- --enable-efi --enable-efi-direct
+ - make -j2
+ - ACCEL=tcg MAX_SMP=8 ./run_tests.sh
+      selftest-setup
+      selftest-smp
+      selftest-vectors-kernel
+      selftest-vectors-user
+      | tee results.txt
+ - grep -q PASS results.txt && ! grep -q FAIL results.txt
+
 build-arm:
  extends: .outoftree_template
  script:
-- 
2.47.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests
  2024-10-23 15:26 [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests Raghavendra Rao Ananta
                   ` (4 preceding siblings ...)
  2024-10-24  8:31 ` [kvm-unit-tests PATCH 5/4] arm64: gitlab-ci: Add clang build tests Andrew Jones
@ 2024-10-24  8:40 ` Andrew Jones
  5 siblings, 0 replies; 7+ messages in thread
From: Andrew Jones @ 2024-10-24  8:40 UTC (permalink / raw)
  To: Raghavendra Rao Ananta
  Cc: Subhasish Ghosh, Joey Gouly, Oliver Upton, Marc Zyngier,
	linux-arm-kernel, kvmarm, linux-kernel, kvm

On Wed, Oct 23, 2024 at 03:26:34PM +0000, Raghavendra Rao Ananta wrote:
> When compiled with clang for arm64, some build errors were observed
> along the fpu code. Moreover, data aborts were seen while running
> the arm/fpu test due to misconfigured input/output args in the inline
> assembly.
> 
> The series tries to address these issues.
> 
> v2:
>  - Fix build errors for newer clang versions that push 'q' registers out
>    of scope under '-mgeneral-regs-only'. (Andrew)
> 
> v1:
> https://lore.kernel.org/all/20241022004710.1888067-1-rananta@google.com/
> 
> - Raghavendra
> 
> Raghavendra Rao Ananta (4):
>   arm: Fix clang error in sve_vl()
>   arm: fpu: Convert 'q' registers to 'v' to satisfy clang
>   arm: fpu: Add '.arch_extension fp' to fpu macros
>   arm: fpu: Fix the input/output args for inline asm in fpu.c
> 
>  arm/fpu.c                 | 52 ++++++++++++++++++++-------------------
>  lib/arm64/asm/processor.h |  2 +-
>  2 files changed, 28 insertions(+), 26 deletions(-)
> 
> 
> base-commit: f246b16099478a916eab37b9bd1eb07c743a67d5
> -- 
> 2.47.0.105.g07ac214952-goog
>

I've merged this along with the cross clang series and the 5/4 patch I
tacked onto this series which adds aarch64 clang testing to gitlab CI.

Thanks,
drew

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-10-24  8:40 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-23 15:26 [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests Raghavendra Rao Ananta
2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 1/4] arm: Fix clang error in sve_vl() Raghavendra Rao Ananta
2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 2/4] arm: fpu: Convert 'q' registers to 'v' to satisfy clang Raghavendra Rao Ananta
2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 3/4] arm: fpu: Add '.arch_extension fp' to fpu macros Raghavendra Rao Ananta
2024-10-23 15:26 ` [kvm-unit-tests PATCH v2 4/4] arm: fpu: Fix the input/output args for inline asm in fpu.c Raghavendra Rao Ananta
2024-10-24  8:31 ` [kvm-unit-tests PATCH 5/4] arm64: gitlab-ci: Add clang build tests Andrew Jones
2024-10-24  8:40 ` [kvm-unit-tests PATCH v2 0/4] Fix arm64 clang errors on fpu tests Andrew Jones

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.