[kvm-unit-tests PATCH v2 9/9] s390x: stsi: check zero and ignored bits in r0 and r1

Nico Boehr
2022-03-23T17:03:40Z

We previously only checked for two zero bits, one in r0 and one in r1.
Let's check all the bits which must be zero and which are ignored
to extend the coverage.

Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
---
s390x/stsi.c | 42 ++++++++++++++++++++++++++++++++----------
1 file changed, 32 insertions(+), 10 deletions(-)

diff --git a/s390x/stsi.c b/s390x/stsi.c
index dccc53e7a816..94a579dc3b58 100644
--- a/s390x/stsi.c
+++ b/s390x/stsi.c
@@ -9,6 +9,7 @@
*/

#include <libcflat.h>
+#include <bitops.h>
#include <asm/page.h>
#include <asm/asm-offsets.h>
#include <asm/interrupt.h>
@@ -19,19 +20,40 @@ static uint8_t pagebuf[PAGE_SIZE * 2] __attribute__((aligned(PAGE_SIZE * 2)));

static void test_specs(void)
{
+ int i;
+ int cc;
+
report_prefix_push("specification");

- report_prefix_push("inv r0");
- expect_pgm_int();
- stsi(pagebuf, 0, 1 << 8, 0);
- check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
- report_prefix_pop();
+ for (i = 36; i <= 55; i++) {
+ report_prefix_pushf("set invalid r0 bit %d", i);
+ expect_pgm_int();
+ stsi(pagebuf, 0, BIT(63 - i), 0);
+ check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
+ report_prefix_pop();
+ }

- report_prefix_push("inv r1");
- expect_pgm_int();
- stsi(pagebuf, 1, 0, 1 << 16);
- check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
- report_prefix_pop();
+ for (i = 32; i <= 47; i++) {
+ report_prefix_pushf("set invalid r1 bit %d", i);
+ expect_pgm_int();
+ stsi(pagebuf, 1, 0, BIT(63 - i));
+ check_pgm_int_code(PGM_INT_CODE_SPECIFICATION);
+ report_prefix_pop();
+ }
+
+ for (i = 0; i < 32; i++) {
+ report_prefix_pushf("r0 bit %d ignored", i);
+ cc = stsi(pagebuf, 3, 2 | BIT(63 - i), 2);
+ report(!cc, "CC = 0");
+ report_prefix_pop();
+ }
+
+ for (i = 0; i < 32; i++) {
+ report_prefix_pushf("r1 bit %d ignored", i);
+ cc = stsi(pagebuf, 3, 2, 2 | BIT(63 - i));
+ report(!cc, "CC = 0");
+ report_prefix_pop();
+ }

report_prefix_push("unaligned");
expect_pgm_int();
--
2.31.1