linux-kselftest.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/4] selftests: arm64: vec-syscfg updates
@ 2021-09-29 15:19 Mark Brown
  2021-09-29 15:19 ` [PATCH v3 1/4] selftests: arm64: Fix printf() format mismatch in vec-syscfg Mark Brown
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Mark Brown @ 2021-09-29 15:19 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Shuah Khan, Shuah Khan
  Cc: linux-arm-kernel, linux-kselftest, misono.tomohiro, Mark Brown

This series fixes up a few issues introduced into vec-syscfg during
refactoring in the review process, then adds a new test which ensures
that the behaviour when we attempt to set a vector length which is not
supported by the current system matches what is documented in the SVE
ABI documentation.

v3:
 - Rebased onto v5.14-rc3.
 - Check to see if we discovered the system vector lengths before trying
   to set all possible vector lengths since we need that information to
   validate the results.
v2:
 - Fix handling of missing VLs when checking that vector length setting
   works as expected.

Mark Brown (4):
  selftests: arm64: Fix printf() format mismatch in vec-syscfg
  selftests: arm64: Remove bogus error check on writing to files
  selftests: arm64: Fix and enable test for setting current VL in
    vec-syscfg
  selftests: arm64: Verify that all possible vector lengths are handled

 tools/testing/selftests/arm64/fp/vec-syscfg.c | 95 ++++++++++++++++---
 1 file changed, 82 insertions(+), 13 deletions(-)


base-commit: 5816b3e6577eaa676ceb00a848f0fd65fe2adc29
-- 
2.20.1


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

* [PATCH v3 1/4] selftests: arm64: Fix printf() format mismatch in vec-syscfg
  2021-09-29 15:19 [PATCH v3 0/4] selftests: arm64: vec-syscfg updates Mark Brown
@ 2021-09-29 15:19 ` Mark Brown
  2021-09-29 15:19 ` [PATCH v3 2/4] selftests: arm64: Remove bogus error check on writing to files Mark Brown
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Mark Brown @ 2021-09-29 15:19 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Shuah Khan, Shuah Khan
  Cc: linux-arm-kernel, linux-kselftest, misono.tomohiro, Mark Brown

The format for this error message calls for the plain text version of the
error but we weren't supply it.

Signed-off-by: Mark Brown <broonie@kernel.org>
---
 tools/testing/selftests/arm64/fp/vec-syscfg.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/arm64/fp/vec-syscfg.c b/tools/testing/selftests/arm64/fp/vec-syscfg.c
index c02071dcb563..b2de002ee325 100644
--- a/tools/testing/selftests/arm64/fp/vec-syscfg.c
+++ b/tools/testing/selftests/arm64/fp/vec-syscfg.c
@@ -109,7 +109,7 @@ static int get_child_rdvl(struct vec_data *data)
 
 		/* exec() a new binary which puts the VL on stdout */
 		ret = execl(data->rdvl_binary, data->rdvl_binary, NULL);
-		fprintf(stderr, "execl(%s) failed: %d\n",
+		fprintf(stderr, "execl(%s) failed: %d (%s)\n",
 			data->rdvl_binary, errno, strerror(errno));
 
 		exit(EXIT_FAILURE);
-- 
2.20.1


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

* [PATCH v3 2/4] selftests: arm64: Remove bogus error check on writing to files
  2021-09-29 15:19 [PATCH v3 0/4] selftests: arm64: vec-syscfg updates Mark Brown
  2021-09-29 15:19 ` [PATCH v3 1/4] selftests: arm64: Fix printf() format mismatch in vec-syscfg Mark Brown
@ 2021-09-29 15:19 ` Mark Brown
  2021-09-29 15:19 ` [PATCH v3 3/4] selftests: arm64: Fix and enable test for setting current VL in vec-syscfg Mark Brown
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Mark Brown @ 2021-09-29 15:19 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Shuah Khan, Shuah Khan
  Cc: linux-arm-kernel, linux-kselftest, misono.tomohiro, Mark Brown

Due to some refactoring with the error handling we ended up mangling things
so we never actually set ret and therefore shouldn't be checking it.

Signed-off-by: Mark Brown <broonie@kernel.org>
---
 tools/testing/selftests/arm64/fp/vec-syscfg.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/tools/testing/selftests/arm64/fp/vec-syscfg.c b/tools/testing/selftests/arm64/fp/vec-syscfg.c
index b2de002ee325..d48d3ee1bc36 100644
--- a/tools/testing/selftests/arm64/fp/vec-syscfg.c
+++ b/tools/testing/selftests/arm64/fp/vec-syscfg.c
@@ -180,7 +180,6 @@ static int file_read_integer(const char *name, int *val)
 static int file_write_integer(const char *name, int val)
 {
 	FILE *f;
-	int ret;
 
 	f = fopen(name, "w");
 	if (!f) {
@@ -192,11 +191,6 @@ static int file_write_integer(const char *name, int val)
 
 	fprintf(f, "%d", val);
 	fclose(f);
-	if (ret < 0) {
-		ksft_test_result_fail("Error writing %d to %s\n",
-				      val, name);
-		return -1;
-	}
 
 	return 0;
 }
-- 
2.20.1


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

* [PATCH v3 3/4] selftests: arm64: Fix and enable test for setting current VL in vec-syscfg
  2021-09-29 15:19 [PATCH v3 0/4] selftests: arm64: vec-syscfg updates Mark Brown
  2021-09-29 15:19 ` [PATCH v3 1/4] selftests: arm64: Fix printf() format mismatch in vec-syscfg Mark Brown
  2021-09-29 15:19 ` [PATCH v3 2/4] selftests: arm64: Remove bogus error check on writing to files Mark Brown
@ 2021-09-29 15:19 ` Mark Brown
  2021-09-29 15:19 ` [PATCH v3 4/4] selftests: arm64: Verify that all possible vector lengths are handled Mark Brown
  2021-09-29 17:48 ` [PATCH v3 0/4] selftests: arm64: vec-syscfg updates Will Deacon
  4 siblings, 0 replies; 6+ messages in thread
From: Mark Brown @ 2021-09-29 15:19 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Shuah Khan, Shuah Khan
  Cc: linux-arm-kernel, linux-kselftest, misono.tomohiro, Mark Brown

We had some test code for verifying that we can write the current VL via
the prctl() interface but the condition for the test was inverted which
wasn't noticed as it was never actually hooked up to the array of tests
we execute. Fix this.

Signed-off-by: Mark Brown <broonie@kernel.org>
---
 tools/testing/selftests/arm64/fp/vec-syscfg.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/tools/testing/selftests/arm64/fp/vec-syscfg.c b/tools/testing/selftests/arm64/fp/vec-syscfg.c
index d48d3ee1bc36..9d6ac843e651 100644
--- a/tools/testing/selftests/arm64/fp/vec-syscfg.c
+++ b/tools/testing/selftests/arm64/fp/vec-syscfg.c
@@ -329,12 +329,9 @@ static void prctl_set_same(struct vec_data *data)
 		return;
 	}
 
-	if (cur_vl != data->rdvl())
-		ksft_test_result_pass("%s current VL is %d\n",
-				      data->name, ret);
-	else
-		ksft_test_result_fail("%s prctl() VL %d but RDVL is %d\n",
-				      data->name, ret, data->rdvl());
+	ksft_test_result(cur_vl == data->rdvl(),
+			 "%s set VL %d and have VL %d\n",
+			 data->name, cur_vl, data->rdvl());
 }
 
 /* Can we set a new VL for this process? */
@@ -555,6 +552,7 @@ static const test_type tests[] = {
 	proc_write_max,
 
 	prctl_get,
+	prctl_set_same,
 	prctl_set,
 	prctl_set_no_child,
 	prctl_set_for_child,
-- 
2.20.1


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

* [PATCH v3 4/4] selftests: arm64: Verify that all possible vector lengths are handled
  2021-09-29 15:19 [PATCH v3 0/4] selftests: arm64: vec-syscfg updates Mark Brown
                   ` (2 preceding siblings ...)
  2021-09-29 15:19 ` [PATCH v3 3/4] selftests: arm64: Fix and enable test for setting current VL in vec-syscfg Mark Brown
@ 2021-09-29 15:19 ` Mark Brown
  2021-09-29 17:48 ` [PATCH v3 0/4] selftests: arm64: vec-syscfg updates Will Deacon
  4 siblings, 0 replies; 6+ messages in thread
From: Mark Brown @ 2021-09-29 15:19 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon, Shuah Khan, Shuah Khan
  Cc: linux-arm-kernel, linux-kselftest, misono.tomohiro, Mark Brown,
	Tomohiro Misono

As part of the enumeration interface for setting vector lengths it is valid
to set vector lengths not supported in the system, these will be rounded to
a supported vector length and returned from the prctl(). Add a test which
exercises this for every valid vector length and makes sure that the return
value is as expected and that this is reflected in the actual system state.

Signed-off-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Tomohiro Misono <misono.tomohiro@jp.fujitsu.com>
---
 tools/testing/selftests/arm64/fp/vec-syscfg.c | 77 +++++++++++++++++++
 1 file changed, 77 insertions(+)

diff --git a/tools/testing/selftests/arm64/fp/vec-syscfg.c b/tools/testing/selftests/arm64/fp/vec-syscfg.c
index 9d6ac843e651..272b888e018e 100644
--- a/tools/testing/selftests/arm64/fp/vec-syscfg.c
+++ b/tools/testing/selftests/arm64/fp/vec-syscfg.c
@@ -540,6 +540,82 @@ static void prctl_set_onexec(struct vec_data *data)
 	file_write_integer(data->default_vl_file, data->default_vl);
 }
 
+/* For each VQ verify that setting via prctl() does the right thing */
+static void prctl_set_all_vqs(struct vec_data *data)
+{
+	int ret, vq, vl, new_vl;
+	int errors = 0;
+
+	if (!data->min_vl || !data->max_vl) {
+		ksft_test_result_skip("%s Failed to enumerate VLs, not testing VL setting\n",
+				      data->name);
+		return;
+	}
+
+	for (vq = SVE_VQ_MIN; vq <= SVE_VQ_MAX; vq++) {
+		vl = sve_vl_from_vq(vq);
+
+		/* Attempt to set the VL */
+		ret = prctl(data->prctl_set, vl);
+		if (ret < 0) {
+			errors++;
+			ksft_print_msg("%s prctl set failed for %d: %d (%s)\n",
+				       data->name, vl,
+				       errno, strerror(errno));
+			continue;
+		}
+
+		new_vl = ret & PR_SVE_VL_LEN_MASK;
+
+		/* Check that we actually have the reported new VL */
+		if (data->rdvl() != new_vl) {
+			ksft_print_msg("Set %s VL %d but RDVL reports %d\n",
+				       data->name, new_vl, data->rdvl());
+			errors++;
+		}
+
+		/* Was that the VL we asked for? */
+		if (new_vl == vl)
+			continue;
+
+		/* Should round up to the minimum VL if below it */
+		if (vl < data->min_vl) {
+			if (new_vl != data->min_vl) {
+				ksft_print_msg("%s VL %d returned %d not minimum %d\n",
+					       data->name, vl, new_vl,
+					       data->min_vl);
+				errors++;
+			}
+
+			continue;
+		}
+
+		/* Should round down to maximum VL if above it */
+		if (vl > data->max_vl) {
+			if (new_vl != data->max_vl) {
+				ksft_print_msg("%s VL %d returned %d not maximum %d\n",
+					       data->name, vl, new_vl,
+					       data->max_vl);
+				errors++;
+			}
+
+			continue;
+		}
+
+		/* Otherwise we should've rounded down */
+		if (!(new_vl < vl)) {
+			ksft_print_msg("%s VL %d returned %d, did not round down\n",
+				       data->name, vl, new_vl);
+			errors++;
+
+			continue;
+		}
+	}
+
+	ksft_test_result(errors == 0, "%s prctl() set all VLs, %d errors\n",
+			 data->name, errors);
+}
+
 typedef void (*test_type)(struct vec_data *);
 
 static const test_type tests[] = {
@@ -557,6 +633,7 @@ static const test_type tests[] = {
 	prctl_set_no_child,
 	prctl_set_for_child,
 	prctl_set_onexec,
+	prctl_set_all_vqs,
 };
 
 int main(void)
-- 
2.20.1


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

* Re: [PATCH v3 0/4] selftests: arm64: vec-syscfg updates
  2021-09-29 15:19 [PATCH v3 0/4] selftests: arm64: vec-syscfg updates Mark Brown
                   ` (3 preceding siblings ...)
  2021-09-29 15:19 ` [PATCH v3 4/4] selftests: arm64: Verify that all possible vector lengths are handled Mark Brown
@ 2021-09-29 17:48 ` Will Deacon
  4 siblings, 0 replies; 6+ messages in thread
From: Will Deacon @ 2021-09-29 17:48 UTC (permalink / raw)
  To: Catalin Marinas, Mark Brown, Shuah Khan, Shuah Khan
  Cc: kernel-team, Will Deacon, linux-arm-kernel, linux-kselftest,
	misono.tomohiro

On Wed, 29 Sep 2021 16:19:21 +0100, Mark Brown wrote:
> This series fixes up a few issues introduced into vec-syscfg during
> refactoring in the review process, then adds a new test which ensures
> that the behaviour when we attempt to set a vector length which is not
> supported by the current system matches what is documented in the SVE
> ABI documentation.
> 
> v3:
>  - Rebased onto v5.14-rc3.
>  - Check to see if we discovered the system vector lengths before trying
>    to set all possible vector lengths since we need that information to
>    validate the results.
> v2:
>  - Fix handling of missing VLs when checking that vector length setting
>    works as expected.
> 
> [...]

Applied to arm64 (for-next/kselftest), thanks!

[1/4] selftests: arm64: Fix printf() format mismatch in vec-syscfg
      https://git.kernel.org/arm64/c/ff944c44b782
[2/4] selftests: arm64: Remove bogus error check on writing to files
      https://git.kernel.org/arm64/c/4caf339c037c
[3/4] selftests: arm64: Fix and enable test for setting current VL in vec-syscfg
      https://git.kernel.org/arm64/c/e42391150eab
[4/4] selftests: arm64: Verify that all possible vector lengths are handled
      https://git.kernel.org/arm64/c/8694e5e63886

Cheers,
-- 
Will

https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev

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

end of thread, other threads:[~2021-09-29 17:48 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-29 15:19 [PATCH v3 0/4] selftests: arm64: vec-syscfg updates Mark Brown
2021-09-29 15:19 ` [PATCH v3 1/4] selftests: arm64: Fix printf() format mismatch in vec-syscfg Mark Brown
2021-09-29 15:19 ` [PATCH v3 2/4] selftests: arm64: Remove bogus error check on writing to files Mark Brown
2021-09-29 15:19 ` [PATCH v3 3/4] selftests: arm64: Fix and enable test for setting current VL in vec-syscfg Mark Brown
2021-09-29 15:19 ` [PATCH v3 4/4] selftests: arm64: Verify that all possible vector lengths are handled Mark Brown
2021-09-29 17:48 ` [PATCH v3 0/4] selftests: arm64: vec-syscfg updates Will Deacon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).