From: Eric Auger <eauger@redhat.com>
To: Cornelia Huck <cohuck@redhat.com>,
Peter Maydell <peter.maydell@linaro.org>,
Thomas Huth <thuth@redhat.com>,
Laurent Vivier <lvivier@redhat.com>
Cc: qemu-arm@nongnu.org, qemu-devel@nongnu.org, kvm@vger.kernel.org,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
"Juan Quintela" <quintela@redhat.com>,
"Gavin Shan" <gshan@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Richard Henderson" <richard.henderson@linaro.org>
Subject: Re: [PATCH v5 3/3] qtests/arm: add some mte tests
Date: Mon, 6 Feb 2023 19:23:15 +0100 [thread overview]
Message-ID: <a7904d6e-c8e5-055b-34f7-8ea2956ec65f@redhat.com> (raw)
In-Reply-To: <20230203134433.31513-4-cohuck@redhat.com>
Hi,
On 2/3/23 14:44, Cornelia Huck wrote:
> Acked-by: Thomas Huth <thuth@redhat.com>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Still as you need to respin I think adding a short commit msg wouldn't
hurt ;-) Add new cpu MTE feature tests with TCG+virt tag memory and
TCG-no tag memory (default) attempting to set cpu mte option on/off. No
real test for KVM because ../..
> ---
> tests/qtest/arm-cpu-features.c | 75 ++++++++++++++++++++++++++++++++++
> 1 file changed, 75 insertions(+)
>
> diff --git a/tests/qtest/arm-cpu-features.c b/tests/qtest/arm-cpu-features.c
> index 8691802950ca..c5dbf66e938a 100644
> --- a/tests/qtest/arm-cpu-features.c
> +++ b/tests/qtest/arm-cpu-features.c
> @@ -22,6 +22,7 @@
>
> #define MACHINE "-machine virt,gic-version=max -accel tcg "
> #define MACHINE_KVM "-machine virt,gic-version=max -accel kvm -accel tcg "
> +#define MACHINE_MTE "-machine virt,gic-version=max,mte=on -accel tcg "
> #define QUERY_HEAD "{ 'execute': 'query-cpu-model-expansion', " \
> " 'arguments': { 'type': 'full', "
> #define QUERY_TAIL "}}"
> @@ -156,6 +157,18 @@ static bool resp_get_feature(QDict *resp, const char *feature)
> g_assert(qdict_get_bool(_props, feature) == (expected_value)); \
> })
>
> +#define resp_assert_feature_str(resp, feature, expected_value) \
> +({ \
> + QDict *_props; \
> + \
> + g_assert(_resp); \
> + g_assert(resp_has_props(_resp)); \
> + _props = resp_get_props(_resp); \
> + g_assert(qdict_get(_props, feature)); \
> + g_assert_cmpstr(qdict_get_try_str(_props, feature), ==, \
> + expected_value); \
> +})
> +
> #define assert_feature(qts, cpu_type, feature, expected_value) \
> ({ \
> QDict *_resp; \
> @@ -166,6 +179,16 @@ static bool resp_get_feature(QDict *resp, const char *feature)
> qobject_unref(_resp); \
> })
>
> +#define assert_feature_str(qts, cpu_type, feature, expected_value) \
> +({ \
> + QDict *_resp; \
> + \
> + _resp = do_query_no_props(qts, cpu_type); \
> + g_assert(_resp); \
> + resp_assert_feature_str(_resp, feature, expected_value); \
> + qobject_unref(_resp); \
> +})
> +
> #define assert_set_feature(qts, cpu_type, feature, value) \
> ({ \
> const char *_fmt = (value) ? "{ %s: true }" : "{ %s: false }"; \
> @@ -177,6 +200,17 @@ static bool resp_get_feature(QDict *resp, const char *feature)
> qobject_unref(_resp); \
> })
>
Not really related to your series but those macros become increasingly
difficult to follow. Especially the feature param versus format that are
partly redundant look weird: "mte", "off", "{ 'mte': 'off' }
Starting adding comments may help the reading.
> +#define assert_set_feature_str(qts, cpu_type, feature, value, _fmt) \
> +({ \
> + const char *__fmt = _fmt; \
> + QDict *_resp; \
> + \
> + _resp = do_query(qts, cpu_type, __fmt, feature); \
> + g_assert(_resp); \
> + resp_assert_feature_str(_resp, feature, value); \
> + qobject_unref(_resp); \
> +})
> +
> #define assert_has_feature_enabled(qts, cpu_type, feature) \
> assert_feature(qts, cpu_type, feature, true)
>
> @@ -413,6 +447,24 @@ static void sve_tests_sve_off_kvm(const void *data)
> qtest_quit(qts);
> }
>
> +static void mte_tests_tag_memory_on(const void *data)
> +{
> + QTestState *qts;
> +
> + qts = qtest_init(MACHINE_MTE "-cpu max");
> +
> + /*
> + * With tag memory, "mte" should default to on, and explicitly specifying
> + * either on or off should be fine.
> + */
the above comment rather applies to assert_set_feature_str's, right?
> + assert_has_feature(qts, "max", "mte");
> +
> + assert_set_feature_str(qts, "max", "mte", "off", "{ 'mte': 'off' }");
> + assert_set_feature_str(qts, "max", "mte", "on", "{ 'mte': 'on' }");
> +
> + qtest_quit(qts);
> +}
> +
> static void pauth_tests_default(QTestState *qts, const char *cpu_type)
> {
> assert_has_feature_enabled(qts, cpu_type, "pauth");
> @@ -425,6 +477,19 @@ static void pauth_tests_default(QTestState *qts, const char *cpu_type)
> "{ 'pauth': false, 'pauth-impdef': true }");
> }
>
> +static void mte_tests_default(QTestState *qts, const char *cpu_type)
> +{
> + assert_has_feature(qts, cpu_type, "mte");
> +
> + /*
> + * Without tag memory, mte will be off under tcg.
> + * Explicitly enabling it yields an error.
> + */
> + assert_set_feature_str(qts, "max", "mte", "off", "{ 'mte': 'off' }");
> + assert_error(qts, cpu_type, "mte=on requires tag memory",
> + "{ 'mte': 'on' }");
Sorry in v4 I reported I preferred the pauth msg, clarifying now:
assert_error(qts, cpu_type, "cannot enable pauth-impdef without pauth",
"{ 'pauth': false, 'pauth-impdef': true }");
Here would translate into cannot enable mte without tag memory.
> +}
> +
> static void test_query_cpu_model_expansion(const void *data)
> {
> QTestState *qts;
> @@ -474,6 +539,7 @@ static void test_query_cpu_model_expansion(const void *data)
>
> sve_tests_default(qts, "max");
> pauth_tests_default(qts, "max");
> + mte_tests_default(qts, "max");
>
> /* Test that features that depend on KVM generate errors without. */
> assert_error(qts, "max",
> @@ -517,6 +583,13 @@ static void test_query_cpu_model_expansion_kvm(const void *data)
> assert_set_feature(qts, "host", "pmu", false);
> assert_set_feature(qts, "host", "pmu", true);
>
> + /*
> + * Unfortunately, there's no easy way to test whether this instance
> + * of KVM supports MTE. So we can only assert that the feature
> + * is present, but not whether it can be toggled.
> + */
> + assert_has_feature(qts, "host", "mte");
I know you replied in v4 but I am still confused:
What does
(QEMU) query-cpu-model-expansion type=full model={"name":"host"}
return on a MTE capable host and and on a non MTE capable host?
If I remember correctly qmp_query_cpu_model_expansion loops over the
advertised features and try to set them explicitly so if the host does
not support it this should fail and the result should be different from
the case where the host supports it (even if it is off by default)
Does assert_has_feature_enabled() returns false?
Thanks
Eric
> +
> /*
> * Some features would be enabled by default, but they're disabled
> * because this instance of KVM doesn't support them. Test that the
> @@ -631,6 +704,8 @@ int main(int argc, char **argv)
> NULL, sve_tests_sve_off);
> qtest_add_data_func("/arm/kvm/query-cpu-model-expansion/sve-off",
> NULL, sve_tests_sve_off_kvm);
> + qtest_add_data_func("/arm/max/query-cpu-model-expansion/tag-memory",
> + NULL, mte_tests_tag_memory_on);
> }
>
> return g_test_run();
next prev parent reply other threads:[~2023-02-06 18:24 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-03 13:44 [PATCH v5 0/3] arm: enable MTE for QEMU + kvm Cornelia Huck
2023-02-03 13:44 ` [PATCH v5 1/3] arm/virt: don't try to spell out the accelerator Cornelia Huck
2023-02-03 19:32 ` Richard Henderson
2023-02-06 12:46 ` Eric Auger
2023-02-03 13:44 ` [PATCH v5 2/3] arm/kvm: add support for MTE Cornelia Huck
2023-02-03 20:40 ` Richard Henderson
2023-02-06 13:10 ` Eric Auger
2023-02-06 16:15 ` Cornelia Huck
2023-02-27 15:12 ` Cornelia Huck
2023-02-06 16:41 ` Cornelia Huck
2023-02-06 13:32 ` Eric Auger
2023-02-06 18:27 ` Richard Henderson
2023-02-15 10:36 ` Eric Auger
2023-02-27 15:11 ` Cornelia Huck
2023-02-03 13:44 ` [PATCH v5 3/3] qtests/arm: add some mte tests Cornelia Huck
2023-02-06 18:23 ` Eric Auger [this message]
2023-02-10 15:35 ` Cornelia Huck
2023-02-27 15:16 ` Cornelia Huck
2023-02-15 10:59 ` Cornelia Huck
2023-02-16 17:30 ` Eric Auger
2023-02-16 11:40 ` [PATCH v5 0/3] arm: enable MTE for QEMU + kvm Peter Maydell
2023-02-16 11:46 ` Cornelia Huck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a7904d6e-c8e5-055b-34f7-8ea2956ec65f@redhat.com \
--to=eauger@redhat.com \
--cc=cohuck@redhat.com \
--cc=dgilbert@redhat.com \
--cc=gshan@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=lvivier@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).