* [PATCH] s390x: split migration test into vector and gs test
@ 2022-07-04 13:30 Nico Boehr
2022-07-06 10:56 ` Thomas Huth
0 siblings, 1 reply; 2+ messages in thread
From: Nico Boehr @ 2022-07-04 13:30 UTC (permalink / raw)
To: kvm, linux-s390; +Cc: frankja, imbrenda, thuth
Since we now have a few more migration tests, let's split migration.c
into two files for vector and gs facilities. Since guarded-storage and vector
facilities can be en-/disabled independant of each other, this simplifies the
code a bit and makes it clear what the scope of the tests is.
Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
---
s390x/Makefile | 3 +-
s390x/migration-gs.c | 122 +++++++++++++++++++++++++
s390x/{migration.c => migration-vec.c} | 54 +----------
s390x/unittests.cfg | 15 ++-
4 files changed, 136 insertions(+), 58 deletions(-)
create mode 100644 s390x/migration-gs.c
rename s390x/{migration.c => migration-vec.c} (77%)
diff --git a/s390x/Makefile b/s390x/Makefile
index efd5e0c13102..90df45285b0b 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -30,10 +30,11 @@ tests += $(TEST_DIR)/spec_ex-sie.elf
tests += $(TEST_DIR)/firq.elf
tests += $(TEST_DIR)/epsw.elf
tests += $(TEST_DIR)/adtl-status.elf
-tests += $(TEST_DIR)/migration.elf
tests += $(TEST_DIR)/pv-attest.elf
tests += $(TEST_DIR)/migration-cmm.elf
tests += $(TEST_DIR)/migration-skey.elf
+tests += $(TEST_DIR)/migration-gs.elf
+tests += $(TEST_DIR)/migration-vec.elf
pv-tests += $(TEST_DIR)/pv-diags.elf
diff --git a/s390x/migration-gs.c b/s390x/migration-gs.c
new file mode 100644
index 000000000000..c702d7493635
--- /dev/null
+++ b/s390x/migration-gs.c
@@ -0,0 +1,122 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * s390x Migration Test for Guarded-Storage Extension
+ *
+ * Copyright IBM Corp. 2022
+ *
+ * Authors:
+ * Nico Boehr <nrb@linux.ibm.com>
+ */
+#include <libcflat.h>
+#include <asm/arch_def.h>
+#include <asm/barrier.h>
+#include <asm/facility.h>
+#include <gs.h>
+#include <bitops.h>
+#include <smp.h>
+
+static struct gs_cb gs_cb;
+static struct gs_epl gs_epl;
+
+/* set by CPU1 to signal it has completed */
+static int flag_thread_complete;
+/* set by CPU0 to signal migration has completed */
+static int flag_migration_complete;
+
+static void write_gs_regs(void)
+{
+ const unsigned long gs_area = 0x2000000;
+ const unsigned long gsc = 25; /* align = 32 M, section size = 512K */
+
+ gs_cb.gsd = gs_area | gsc;
+ gs_cb.gssm = 0xfeedc0ffe;
+ gs_cb.gs_epl_a = (uint64_t) &gs_epl;
+
+ load_gs_cb(&gs_cb);
+}
+
+static void check_gs_regs(void)
+{
+ struct gs_cb gs_cb_after_migration;
+
+ store_gs_cb(&gs_cb_after_migration);
+
+ report_prefix_push("guarded-storage registers");
+
+ report(gs_cb_after_migration.gsd == gs_cb.gsd, "gsd matches");
+ report(gs_cb_after_migration.gssm == gs_cb.gssm, "gssm matches");
+ report(gs_cb_after_migration.gs_epl_a == gs_cb.gs_epl_a, "gs_epl_a matches");
+
+ report_prefix_pop();
+}
+
+static bool have_guarded_storage_facility(void)
+{
+ return test_facility(133);
+}
+
+static void test_func(void)
+{
+ if (have_guarded_storage_facility()) {
+ ctl_set_bit(2, CTL2_GUARDED_STORAGE);
+
+ write_gs_regs();
+ }
+
+ flag_thread_complete = 1;
+ while(!flag_migration_complete)
+ mb();
+
+ report_pass("Migrated");
+
+ if (have_guarded_storage_facility()) {
+ check_gs_regs();
+
+ report(stctg(2) & BIT(CTL2_GUARDED_STORAGE), "ctl2 guarded-storage bit set");
+
+ ctl_clear_bit(2, CTL2_GUARDED_STORAGE);
+ }
+
+ flag_thread_complete = 1;
+}
+
+int main(void)
+{
+ struct psw psw;
+
+ /* don't say migrate here otherwise we will migrate right away */
+ report_prefix_push("migration-gs");
+
+ if (smp_query_num_cpus() == 1) {
+ report_skip("need at least 2 cpus for this test");
+ goto done;
+ }
+
+ /* Second CPU does the actual tests */
+ psw.mask = extract_psw_mask();
+ psw.addr = (unsigned long)test_func;
+ smp_cpu_setup(1, psw);
+
+ /* wait for thread setup */
+ while(!flag_thread_complete)
+ mb();
+ flag_thread_complete = 0;
+
+ /* ask migrate_cmd to migrate (it listens for 'migrate') */
+ puts("Please migrate me, then press return\n");
+
+ /* wait for migration to finish, we will read a newline */
+ (void)getchar();
+
+ flag_migration_complete = 1;
+
+ /* wait for thread to complete assertions */
+ while(!flag_thread_complete)
+ mb();
+
+ smp_cpu_destroy(1);
+
+done:
+ report_prefix_pop();
+ return report_summary();
+}
diff --git a/s390x/migration.c b/s390x/migration-vec.c
similarity index 77%
rename from s390x/migration.c
rename to s390x/migration-vec.c
index a45296374cd8..2aab540f781b 100644
--- a/s390x/migration.c
+++ b/s390x/migration-vec.c
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/*
- * Migration Test for s390x
+ * s390x Migration Test for Vector Extensions
*
* Copyright IBM Corp. 2022
*
@@ -12,55 +12,19 @@
#include <asm/vector.h>
#include <asm/barrier.h>
#include <asm/facility.h>
-#include <gs.h>
#include <bitops.h>
#include <smp.h>
-static struct gs_cb gs_cb;
-static struct gs_epl gs_epl;
-
/* set by CPU1 to signal it has completed */
static int flag_thread_complete;
/* set by CPU0 to signal migration has completed */
static int flag_migration_complete;
-static void write_gs_regs(void)
-{
- const unsigned long gs_area = 0x2000000;
- const unsigned long gsc = 25; /* align = 32 M, section size = 512K */
-
- gs_cb.gsd = gs_area | gsc;
- gs_cb.gssm = 0xfeedc0ffe;
- gs_cb.gs_epl_a = (uint64_t) &gs_epl;
-
- load_gs_cb(&gs_cb);
-}
-
-static void check_gs_regs(void)
-{
- struct gs_cb gs_cb_after_migration;
-
- store_gs_cb(&gs_cb_after_migration);
-
- report_prefix_push("guarded-storage registers");
-
- report(gs_cb_after_migration.gsd == gs_cb.gsd, "gsd matches");
- report(gs_cb_after_migration.gssm == gs_cb.gssm, "gssm matches");
- report(gs_cb_after_migration.gs_epl_a == gs_cb.gs_epl_a, "gs_epl_a matches");
-
- report_prefix_pop();
-}
-
static bool have_vector_facility(void)
{
return test_facility(129);
}
-static bool have_guarded_storage_facility(void)
-{
- return test_facility(133);
-}
-
static void test_func(void)
{
uint8_t expected_vec_contents[VEC_REGISTER_NUM][VEC_REGISTER_SIZE];
@@ -69,12 +33,6 @@ static void test_func(void)
int i;
int vec_result = 0;
- if (have_guarded_storage_facility()) {
- ctl_set_bit(2, CTL2_GUARDED_STORAGE);
-
- write_gs_regs();
- }
-
if (have_vector_facility()) {
for (i = 0; i < VEC_REGISTER_NUM; i++) {
vec_reg = &expected_vec_contents[i][0];
@@ -145,14 +103,6 @@ static void test_func(void)
report_pass("Migrated");
- if (have_guarded_storage_facility()) {
- check_gs_regs();
-
- report(stctg(2) & BIT(CTL2_GUARDED_STORAGE), "ctl2 guarded-storage bit set");
-
- ctl_clear_bit(2, CTL2_GUARDED_STORAGE);
- }
-
flag_thread_complete = 1;
}
@@ -161,7 +111,7 @@ int main(void)
struct psw psw;
/* don't say migrate here otherwise we will migrate right away */
- report_prefix_push("migration");
+ report_prefix_push("migration-vec");
if (smp_query_num_cpus() == 1) {
report_skip("need at least 2 cpus for this test");
diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg
index 8e52f560bb1e..04d9f0761a1f 100644
--- a/s390x/unittests.cfg
+++ b/s390x/unittests.cfg
@@ -172,11 +172,6 @@ smp = 2
accel = tcg
extra_params = -cpu qemu,gs=off,vx=off
-[migration]
-file = migration.elf
-groups = migration
-smp = 2
-
[migration-cmm]
file = migration-cmm.elf
groups = migration
@@ -184,3 +179,13 @@ groups = migration
[migration-skey]
file = migration-skey.elf
groups = migration
+
+[migration-gs]
+file = migration-gs.elf
+groups = migration
+smp = 2
+
+[migration-vec]
+file = migration-vec.elf
+groups = migration
+smp = 2
--
2.36.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] s390x: split migration test into vector and gs test
2022-07-04 13:30 [PATCH] s390x: split migration test into vector and gs test Nico Boehr
@ 2022-07-06 10:56 ` Thomas Huth
0 siblings, 0 replies; 2+ messages in thread
From: Thomas Huth @ 2022-07-06 10:56 UTC (permalink / raw)
To: Nico Boehr, kvm, linux-s390; +Cc: frankja, imbrenda
On 04/07/2022 15.30, Nico Boehr wrote:
> Since we now have a few more migration tests, let's split migration.c
> into two files for vector and gs facilities. Since guarded-storage and vector
> facilities can be en-/disabled independant of each other, this simplifies the
> code a bit and makes it clear what the scope of the tests is.
>
> Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
> ---
> s390x/Makefile | 3 +-
> s390x/migration-gs.c | 122 +++++++++++++++++++++++++
> s390x/{migration.c => migration-vec.c} | 54 +----------
> s390x/unittests.cfg | 15 ++-
> 4 files changed, 136 insertions(+), 58 deletions(-)
> create mode 100644 s390x/migration-gs.c
> rename s390x/{migration.c => migration-vec.c} (77%)
Makes sense.
Acked-by: Thomas Huth <thuth@redhat.com>
PS: Please have a look at the end of the README.md file to see how to set a
better default subjectprefix for k-u-t patches. Thanks!
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-07-06 10:56 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-04 13:30 [PATCH] s390x: split migration test into vector and gs test Nico Boehr
2022-07-06 10:56 ` Thomas Huth
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.