[PATCH v11 05/40] kselftest/arm64: signal: Allow tests to be incompatible with features
Shuah Khan
skhan at linuxfoundation.org
Mon Feb 7 15:54:31 PST 2022
On 2/7/22 8:20 AM, Mark Brown wrote:
> Some features may invalidate some tests, for example by supporting an
> operation which would trap otherwise. Allow tests to list features that
> they are incompatible with so we can cover the case where a signal will
> be generated without disruption on systems where that won't happen.
>
> Signed-off-by: Mark Brown <broonie at kernel.org>
> ---
> .../selftests/arm64/signal/test_signals.h | 1 +
> .../arm64/signal/test_signals_utils.c | 34 ++++++++++++++-----
> .../arm64/signal/test_signals_utils.h | 2 ++
> 3 files changed, 28 insertions(+), 9 deletions(-)
>
> diff --git a/tools/testing/selftests/arm64/signal/test_signals.h b/tools/testing/selftests/arm64/signal/test_signals.h
> index ebe8694dbef0..f909b70d9e98 100644
> --- a/tools/testing/selftests/arm64/signal/test_signals.h
> +++ b/tools/testing/selftests/arm64/signal/test_signals.h
> @@ -53,6 +53,7 @@ struct tdescr {
> char *name;
> char *descr;
> unsigned long feats_required;
> + unsigned long feats_incompatible;
> /* bitmask of effectively supported feats: populated at run-time */
> unsigned long feats_supported;
> bool initialized;
> diff --git a/tools/testing/selftests/arm64/signal/test_signals_utils.c b/tools/testing/selftests/arm64/signal/test_signals_utils.c
> index 2f8c23af3b5e..5743897984b0 100644
> --- a/tools/testing/selftests/arm64/signal/test_signals_utils.c
> +++ b/tools/testing/selftests/arm64/signal/test_signals_utils.c
> @@ -36,6 +36,8 @@ static inline char *feats_to_string(unsigned long feats)
> {
> size_t flen = MAX_FEATS_SZ - 1;
>
> + feats_string[0] = '\0';
> +
> for (int i = 0; i < FMAX_END; i++) {
> if (feats & (1UL << i)) {
> size_t tlen = strlen(feats_names[i]);
> @@ -256,7 +258,7 @@ int test_init(struct tdescr *td)
> td->minsigstksz = MINSIGSTKSZ;
> fprintf(stderr, "Detected MINSTKSIGSZ:%d\n", td->minsigstksz);
>
> - if (td->feats_required) {
> + if (td->feats_required || td->feats_incompatible) {
> td->feats_supported = 0;
> /*
> * Checking for CPU required features using both the
> @@ -267,15 +269,29 @@ int test_init(struct tdescr *td)
> if (getauxval(AT_HWCAP) & HWCAP_SVE)
> td->feats_supported |= FEAT_SVE;
> if (feats_ok(td)) {
> - fprintf(stderr,
> - "Required Features: [%s] supported\n",
> - feats_to_string(td->feats_required &
> - td->feats_supported));
> + if (td->feats_required & td->feats_supported)
> + fprintf(stderr,
> + "Required Features: [%s] supported\n",
> + feats_to_string(td->feats_required &
> + td->feats_supported));
> + if (!(td->feats_incompatible & td->feats_supported))
> + fprintf(stderr,
> + "Incompatible Features: [%s] absent\n",
> + feats_to_string(td->feats_incompatible));
> } else {
> - fprintf(stderr,
> - "Required Features: [%s] NOT supported\n",
> - feats_to_string(td->feats_required &
> - ~td->feats_supported));
> + if ((td->feats_required & td->feats_supported) !=
> + td->feats_supported)
> + fprintf(stderr,
> + "Required Features: [%s] NOT supported\n",
> + feats_to_string(td->feats_required &
> + ~td->feats_supported));
> + if (td->feats_incompatible & td->feats_supported)
> + fprintf(stderr,
> + "Incompatible Features: [%s] supported\n",
> + feats_to_string(td->feats_incompatible &
> + ~td->feats_supported));
> +
> +
> td->result = KSFT_SKIP;
> return 0;
> }
> diff --git a/tools/testing/selftests/arm64/signal/test_signals_utils.h b/tools/testing/selftests/arm64/signal/test_signals_utils.h
> index 6772b5c8d274..f3aa99ba67bb 100644
> --- a/tools/testing/selftests/arm64/signal/test_signals_utils.h
> +++ b/tools/testing/selftests/arm64/signal/test_signals_utils.h
> @@ -18,6 +18,8 @@ void test_result(struct tdescr *td);
>
> static inline bool feats_ok(struct tdescr *td)
> {
> + if (td->feats_incompatible & td->feats_supported)
> + return false;
> return (td->feats_required & td->feats_supported) == td->feats_required;
> }
>
>
Assuming default_handler() will skip test and return skip test when
feature is unsupported?
Looks good to me.
Reviewed-by: Shuah Khan <skhan at linuxfoundation.org>
thanks,
-- Shuah
More information about the linux-arm-kernel
mailing list