All of lore.kernel.org
 help / color / mirror / Atom feed
* [kvm-unit-tests PATCH v4 0/1] s390x: add migration test for storage keys
@ 2022-06-08 13:13 Nico Boehr
  2022-06-08 13:13 ` [kvm-unit-tests PATCH v4 1/1] " Nico Boehr
  2022-06-08 13:39 ` [kvm-unit-tests PATCH v4 0/1] s390x: add migration test for storage keys Claudio Imbrenda
  0 siblings, 2 replies; 6+ messages in thread
From: Nico Boehr @ 2022-06-08 13:13 UTC (permalink / raw)
  To: kvm, linux-s390; +Cc: frankja, imbrenda, thuth, scgl

v3->v4:
----
* remove useless goto (Thanks Thomas)

v2->v3:
----
* remove some useless variables, style suggestions, improve commit description
  (thanks Janis)
* reverse christmas tree (thanks Claudio)

v1->v2:
----
* As per discussion with Janis and Claudio, remove the actual access check from
  the test. This also allows us to remove the check_pgm_int_code_xfail() patch.
* Typos/Style suggestions (thanks Janis)

Upon migration, we expect storage keys set by the guest to be preserved,
so add a test for it.

We keep 128 pages and set predictable storage keys. Then, we migrate and check
they can be read back.

Nico Boehr (1):
  s390x: add migration test for storage keys

 s390x/Makefile         |  1 +
 s390x/migration-skey.c | 73 ++++++++++++++++++++++++++++++++++++++++++
 s390x/unittests.cfg    |  4 +++
 3 files changed, 78 insertions(+)
 create mode 100644 s390x/migration-skey.c

-- 
2.36.1


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

* [kvm-unit-tests PATCH v4 1/1] s390x: add migration test for storage keys
  2022-06-08 13:13 [kvm-unit-tests PATCH v4 0/1] s390x: add migration test for storage keys Nico Boehr
@ 2022-06-08 13:13 ` Nico Boehr
  2022-06-10  8:49   ` Janosch Frank
  2022-06-08 13:39 ` [kvm-unit-tests PATCH v4 0/1] s390x: add migration test for storage keys Claudio Imbrenda
  1 sibling, 1 reply; 6+ messages in thread
From: Nico Boehr @ 2022-06-08 13:13 UTC (permalink / raw)
  To: kvm, linux-s390; +Cc: frankja, imbrenda, thuth, scgl

Upon migration, we expect storage keys set by the guest to be preserved, so add
a test for it.

We keep 128 pages and set predictable storage keys. Then, we migrate and check
that they can be read back and match the value originally set.

Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
---
 s390x/Makefile         |  1 +
 s390x/migration-skey.c | 73 ++++++++++++++++++++++++++++++++++++++++++
 s390x/unittests.cfg    |  4 +++
 3 files changed, 78 insertions(+)
 create mode 100644 s390x/migration-skey.c

diff --git a/s390x/Makefile b/s390x/Makefile
index 25802428fa13..94fc5c1a3527 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -33,6 +33,7 @@ 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
 
 pv-tests += $(TEST_DIR)/pv-diags.elf
 
diff --git a/s390x/migration-skey.c b/s390x/migration-skey.c
new file mode 100644
index 000000000000..323aa83202bb
--- /dev/null
+++ b/s390x/migration-skey.c
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Storage Key migration tests
+ *
+ * Copyright IBM Corp. 2022
+ *
+ * Authors:
+ *  Nico Boehr <nrb@linux.ibm.com>
+ */
+
+#include <libcflat.h>
+#include <asm/facility.h>
+#include <asm/page.h>
+#include <asm/mem.h>
+#include <asm/interrupt.h>
+#include <hardware.h>
+
+#define NUM_PAGES 128
+static uint8_t pagebuf[NUM_PAGES][PAGE_SIZE] __attribute__((aligned(PAGE_SIZE)));
+
+static void test_migration(void)
+{
+	union skey expected_key, actual_key;
+	int i, key_to_set;
+
+	for (i = 0; i < NUM_PAGES; i++) {
+		/*
+		 * Storage keys are 7 bit, lowest bit is always returned as zero
+		 * by iske
+		 */
+		key_to_set = i * 2;
+		set_storage_key(pagebuf[i], key_to_set, 1);
+	}
+
+	puts("Please migrate me, then press return\n");
+	(void)getchar();
+
+	for (i = 0; i < NUM_PAGES; i++) {
+		report_prefix_pushf("page %d", i);
+
+		actual_key.val = get_storage_key(pagebuf[i]);
+		expected_key.val = i * 2;
+
+		/* ignore reference bit */
+		actual_key.str.rf = 0;
+		expected_key.str.rf = 0;
+
+		report(actual_key.val == expected_key.val, "expected_key=0x%x actual_key=0x%x", expected_key.val, actual_key.val);
+
+		report_prefix_pop();
+	}
+}
+
+int main(void)
+{
+	report_prefix_push("migration-skey");
+	if (test_facility(169)) {
+		report_skip("storage key removal facility is active");
+
+		/*
+		 * If we just exit and don't ask migrate_cmd to migrate us, it
+		 * will just hang forever. Hence, also ask for migration when we
+		 * skip this test altogether.
+		 */
+		puts("Please migrate me, then press return\n");
+		(void)getchar();
+	} else {
+		test_migration();
+	}
+
+	report_prefix_pop();
+	return report_summary();
+}
diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg
index 9b97d0471bcf..8e52f560bb1e 100644
--- a/s390x/unittests.cfg
+++ b/s390x/unittests.cfg
@@ -180,3 +180,7 @@ smp = 2
 [migration-cmm]
 file = migration-cmm.elf
 groups = migration
+
+[migration-skey]
+file = migration-skey.elf
+groups = migration
-- 
2.36.1


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

* Re: [kvm-unit-tests PATCH v4 0/1] s390x: add migration test for storage keys
  2022-06-08 13:13 [kvm-unit-tests PATCH v4 0/1] s390x: add migration test for storage keys Nico Boehr
  2022-06-08 13:13 ` [kvm-unit-tests PATCH v4 1/1] " Nico Boehr
@ 2022-06-08 13:39 ` Claudio Imbrenda
  1 sibling, 0 replies; 6+ messages in thread
From: Claudio Imbrenda @ 2022-06-08 13:39 UTC (permalink / raw)
  To: Nico Boehr; +Cc: kvm, linux-s390, frankja, thuth, scgl

On Wed,  8 Jun 2022 15:13:27 +0200
Nico Boehr <nrb@linux.ibm.com> wrote:

thanks, queued

> v3->v4:
> ----
> * remove useless goto (Thanks Thomas)
> 
> v2->v3:
> ----
> * remove some useless variables, style suggestions, improve commit description
>   (thanks Janis)
> * reverse christmas tree (thanks Claudio)
> 
> v1->v2:
> ----
> * As per discussion with Janis and Claudio, remove the actual access check from
>   the test. This also allows us to remove the check_pgm_int_code_xfail() patch.
> * Typos/Style suggestions (thanks Janis)
> 
> Upon migration, we expect storage keys set by the guest to be preserved,
> so add a test for it.
> 
> We keep 128 pages and set predictable storage keys. Then, we migrate and check
> they can be read back.
> 
> Nico Boehr (1):
>   s390x: add migration test for storage keys
> 
>  s390x/Makefile         |  1 +
>  s390x/migration-skey.c | 73 ++++++++++++++++++++++++++++++++++++++++++
>  s390x/unittests.cfg    |  4 +++
>  3 files changed, 78 insertions(+)
>  create mode 100644 s390x/migration-skey.c
> 


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

* Re: [kvm-unit-tests PATCH v4 1/1] s390x: add migration test for storage keys
  2022-06-08 13:13 ` [kvm-unit-tests PATCH v4 1/1] " Nico Boehr
@ 2022-06-10  8:49   ` Janosch Frank
  2022-06-10 11:56     ` Claudio Imbrenda
  2022-06-13  9:19     ` [kvm-unit-tests PATCH v4 1/1] s390x: add migration test for storage keys:q! Nico Boehr
  0 siblings, 2 replies; 6+ messages in thread
From: Janosch Frank @ 2022-06-10  8:49 UTC (permalink / raw)
  To: Nico Boehr, kvm, linux-s390; +Cc: imbrenda, thuth, scgl

On 6/8/22 15:13, Nico Boehr wrote:
> Upon migration, we expect storage keys set by the guest to be preserved, so add
> a test for it.
> 
> We keep 128 pages and set predictable storage keys. Then, we migrate and check
> that they can be read back and match the value originally set.
> 
> Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
> Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> Reviewed-by: Thomas Huth <thuth@redhat.com>
> ---
>   s390x/Makefile         |  1 +
>   s390x/migration-skey.c | 73 ++++++++++++++++++++++++++++++++++++++++++
>   s390x/unittests.cfg    |  4 +++
>   3 files changed, 78 insertions(+)
>   create mode 100644 s390x/migration-skey.c
> 
> diff --git a/s390x/Makefile b/s390x/Makefile
> index 25802428fa13..94fc5c1a3527 100644
> --- a/s390x/Makefile
> +++ b/s390x/Makefile
> @@ -33,6 +33,7 @@ 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
>   
>   pv-tests += $(TEST_DIR)/pv-diags.elf
>   
> diff --git a/s390x/migration-skey.c b/s390x/migration-skey.c
> new file mode 100644
> index 000000000000..323aa83202bb
> --- /dev/null
> +++ b/s390x/migration-skey.c
> @@ -0,0 +1,73 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +/*
> + * Storage Key migration tests
> + *
> + * Copyright IBM Corp. 2022
> + *
> + * Authors:
> + *  Nico Boehr <nrb@linux.ibm.com>
> + */
> +
> +#include <libcflat.h>
> +#include <asm/facility.h>
> +#include <asm/page.h>
> +#include <asm/mem.h>
> +#include <asm/interrupt.h>
> +#include <hardware.h>
> +
> +#define NUM_PAGES 128
> +static uint8_t pagebuf[NUM_PAGES][PAGE_SIZE] __attribute__((aligned(PAGE_SIZE)));
> +
> +static void test_migration(void)
> +{
> +	union skey expected_key, actual_key;
> +	int i, key_to_set;
> +
> +	for (i = 0; i < NUM_PAGES; i++) {
> +		/*
> +		 * Storage keys are 7 bit, lowest bit is always returned as zero
> +		 * by iske
> +		 */

Maybe add:
This loop will set all 7 bits which means we set fetch protection as 
well as reference and change indication for some keys.

> +		key_to_set = i * 2;
> +		set_storage_key(pagebuf[i], key_to_set, 1);
> +	}
> +
> +	puts("Please migrate me, then press return\n");
> +	(void)getchar();
> +
> +	for (i = 0; i < NUM_PAGES; i++) {
> +		report_prefix_pushf("page %d", i);
> +
> +		actual_key.val = get_storage_key(pagebuf[i]);

iske is nice but I think it would also be interesting to check if the 
actual memory protection was carried over. The iske check is enough for 
now though.

> +		expected_key.val = i * 2;
> +
> +		/* ignore reference bit */
> +		actual_key.str.rf = 0;
> +		expected_key.str.rf = 0;
> +
> +		report(actual_key.val == expected_key.val, "expected_key=0x%x actual_key=0x%x", expected_key.val, actual_key.val);

This spams the log with useless information and hence I generally try to 
avoid printing large loops.

Instead we should print all fails or a simple success message if all 
comparisons were successful.

> +
> +		report_prefix_pop();
> +	}
> +}
> +
> +int main(void)
> +{
> +	report_prefix_push("migration-skey");
> +	if (test_facility(169)) {
> +		report_skip("storage key removal facility is active");
> +
> +		/*
> +		 * If we just exit and don't ask migrate_cmd to migrate us, it
> +		 * will just hang forever. Hence, also ask for migration when we
> +		 * skip this test altogether.
> +		 */
> +		puts("Please migrate me, then press return\n");
> +		(void)getchar();
> +	} else {
> +		test_migration();
> +	}
> +
> +	report_prefix_pop();
> +	return report_summary();
> +}
> diff --git a/s390x/unittests.cfg b/s390x/unittests.cfg
> index 9b97d0471bcf..8e52f560bb1e 100644
> --- a/s390x/unittests.cfg
> +++ b/s390x/unittests.cfg
> @@ -180,3 +180,7 @@ smp = 2
>   [migration-cmm]
>   file = migration-cmm.elf
>   groups = migration
> +
> +[migration-skey]
> +file = migration-skey.elf
> +groups = migration


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

* Re: [kvm-unit-tests PATCH v4 1/1] s390x: add migration test for storage keys
  2022-06-10  8:49   ` Janosch Frank
@ 2022-06-10 11:56     ` Claudio Imbrenda
  2022-06-13  9:19     ` [kvm-unit-tests PATCH v4 1/1] s390x: add migration test for storage keys:q! Nico Boehr
  1 sibling, 0 replies; 6+ messages in thread
From: Claudio Imbrenda @ 2022-06-10 11:56 UTC (permalink / raw)
  To: Janosch Frank; +Cc: Nico Boehr, kvm, linux-s390, thuth, scgl

On Fri, 10 Jun 2022 10:49:28 +0200
Janosch Frank <frankja@linux.ibm.com> wrote:

[...]

> > +		key_to_set = i * 2;
> > +		set_storage_key(pagebuf[i], key_to_set, 1);
> > +	}
> > +
> > +	puts("Please migrate me, then press return\n");
> > +	(void)getchar();
> > +
> > +	for (i = 0; i < NUM_PAGES; i++) {
> > +		report_prefix_pushf("page %d", i);
> > +
> > +		actual_key.val = get_storage_key(pagebuf[i]);  
> 
> iske is nice but I think it would also be interesting to check if the 
> actual memory protection was carried over. The iske check is enough for 
> now though.

we had that in a previous version, but I think it's overkill, there are
separate tests to check for key protection, I think?

also, under TCG the value of the storage keys is migrated, but there is
no protection, this makes the test unnecessarily complex

[...]

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

* Re: [kvm-unit-tests PATCH v4 1/1] s390x: add migration test for storage keys:q!
  2022-06-10  8:49   ` Janosch Frank
  2022-06-10 11:56     ` Claudio Imbrenda
@ 2022-06-13  9:19     ` Nico Boehr
  1 sibling, 0 replies; 6+ messages in thread
From: Nico Boehr @ 2022-06-13  9:19 UTC (permalink / raw)
  To: Janosch Frank; +Cc: kvm, linux-s390, imbrenda, thuth, scgl

On Fri, 10 Jun 2022 10:49:28 +0200
Janosch Frank <frankja@linux.ibm.com> wrote:

> On 6/8/22 15:13, Nico Boehr wrote:
> > diff --git a/s390x/migration-skey.c b/s390x/migration-skey.c
> > new file mode 100644
> > index 000000000000..323aa83202bb
[...]
> > +static void test_migration(void)
> > +{
> > +	union skey expected_key, actual_key;
> > +	int i, key_to_set;
> > +
> > +	for (i = 0; i < NUM_PAGES; i++) {
> > +		/*
> > +		 * Storage keys are 7 bit, lowest bit is always returned as zero
> > +		 * by iske
> > +		 */  
> 
> Maybe add:
> This loop will set all 7 bits which means we set fetch protection as 
> well as reference and change indication for some keys.

OK, done.

> 
> > +		key_to_set = i * 2;
> > +		set_storage_key(pagebuf[i], key_to_set, 1);
> > +	}
> > +
> > +	puts("Please migrate me, then press return\n");
> > +	(void)getchar();
> > +
> > +	for (i = 0; i < NUM_PAGES; i++) {
> > +		report_prefix_pushf("page %d", i);
> > +
> > +		actual_key.val = get_storage_key(pagebuf[i]);  
> 
> iske is nice but I think it would also be interesting to check if the 
> actual memory protection was carried over. The iske check is enough for 
> now though.

OK, we can add an access check later on if we think it's needed.

> 
> > +		expected_key.val = i * 2;
> > +
> > +		/* ignore reference bit */
> > +		actual_key.str.rf = 0;
> > +		expected_key.str.rf = 0;
> > +
> > +		report(actual_key.val == expected_key.val, "expected_key=0x%x actual_key=0x%x", expected_key.val, actual_key.val);  
> 
> This spams the log with useless information and hence I generally try to 
> avoid printing large loops.
> 
> Instead we should print all fails or a simple success message if all 
> comparisons were successful.

OK will be in the next version.

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

end of thread, other threads:[~2022-06-13  9:19 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-08 13:13 [kvm-unit-tests PATCH v4 0/1] s390x: add migration test for storage keys Nico Boehr
2022-06-08 13:13 ` [kvm-unit-tests PATCH v4 1/1] " Nico Boehr
2022-06-10  8:49   ` Janosch Frank
2022-06-10 11:56     ` Claudio Imbrenda
2022-06-13  9:19     ` [kvm-unit-tests PATCH v4 1/1] s390x: add migration test for storage keys:q! Nico Boehr
2022-06-08 13:39 ` [kvm-unit-tests PATCH v4 0/1] s390x: add migration test for storage keys Claudio Imbrenda

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.