[kvm-unit-tests PATCH v1 1/2] lib: s390x: introduce check_pgm_int_code_xfail()

Nico Boehr
2022-05-12T14:01:19Z

Right now, it is not very convenient to have expected failures when checking for
program interrupts. Let's introduce check_pgm_int_code_xfail() with an API
similar to report_xfail() to make the programmer's life easier.

With this, we can express check_pgm_int_code() as a special case of
check_pgm_int_code_xfail() with xfail = false.

Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
---
lib/s390x/asm/interrupt.h | 1 +
lib/s390x/interrupt.c | 9 +++++++--
2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/lib/s390x/asm/interrupt.h b/lib/s390x/asm/interrupt.h
index d9ab0bd781c9..88731da9e341 100644
--- a/lib/s390x/asm/interrupt.h
+++ b/lib/s390x/asm/interrupt.h
@@ -46,6 +46,7 @@ void handle_svc_int(void);
void expect_pgm_int(void);
void expect_ext_int(void);
uint16_t clear_pgm_int(void);
+void check_pgm_int_code_xfail(bool xfail, uint16_t code);
void check_pgm_int_code(uint16_t code);

/* Activate low-address protection */
diff --git a/lib/s390x/interrupt.c b/lib/s390x/interrupt.c
index 27d3b767210f..b61f7d588550 100644
--- a/lib/s390x/interrupt.c
+++ b/lib/s390x/interrupt.c
@@ -47,14 +47,19 @@ uint16_t clear_pgm_int(void)
return code;
}

-void check_pgm_int_code(uint16_t code)
+void check_pgm_int_code_xfail(bool xfail, uint16_t code)
{
mb();
- report(code == lc->pgm_int_code,
+ report_xfail(xfail, code == lc->pgm_int_code,
"Program interrupt: expected(%d) == received(%d)", code,
lc->pgm_int_code);
}

+void check_pgm_int_code(uint16_t code)
+{
+ check_pgm_int_code_xfail(false, code);
+}
+
void register_pgm_cleanup_func(void (*f)(void))
{
pgm_cleanup_func = f;
--
2.31.1