From: Janosch Frank <frankja@linux.ibm.com>
To: kvm@vger.kernel.org
Cc: linux-s390@vger.kernel.org, imbrenda@linux.ibm.com,
thuth@redhat.com, nrb@linux.ibm.com, david@redhat.com
Subject: [kvm-unit-tests PATCH v4 2/7] lib: s390x: uv: Add intercept data check library function
Date: Tue, 2 May 2023 11:59:26 +0000 [thread overview]
Message-ID: <20230502115931.86280-3-frankja@linux.ibm.com> (raw)
In-Reply-To: <20230502115931.86280-1-frankja@linux.ibm.com>
When working with guests it's essential to check the SIE intercept
data for the correct values. Fortunately on PV guests these values are
constants so we can create check functions which test for the
constants.
While we're at it let's make pv-diags.c use this new function.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
---
lib/s390x/pv_icptdata.h | 42 +++++++++++++++++++++++++++++++++++++++++
s390x/pv-diags.c | 14 ++++++--------
2 files changed, 48 insertions(+), 8 deletions(-)
create mode 100644 lib/s390x/pv_icptdata.h
diff --git a/lib/s390x/pv_icptdata.h b/lib/s390x/pv_icptdata.h
new file mode 100644
index 00000000..4746117e
--- /dev/null
+++ b/lib/s390x/pv_icptdata.h
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Commonly used checks for PV SIE intercept data
+ *
+ * Copyright IBM Corp. 2023
+ * Author: Janosch Frank <frankja@linux.ibm.com>
+ */
+
+#ifndef _S390X_PV_ICPTDATA_H_
+#define _S390X_PV_ICPTDATA_H_
+
+#include <sie.h>
+
+/*
+ * Checks the diagnose instruction intercept data for consistency with
+ * the constants defined by the PV SIE architecture
+ *
+ * Supports: 0x44, 0x9c, 0x288, 0x308, 0x500
+ */
+static bool pv_icptdata_check_diag(struct vm *vm, int diag)
+{
+ int icptcode;
+
+ switch (diag) {
+ case 0x44:
+ case 0x9c:
+ case 0x288:
+ case 0x308:
+ icptcode = ICPT_PV_NOTIFY;
+ break;
+ case 0x500:
+ icptcode = ICPT_PV_INSTR;
+ break;
+ default:
+ /* If a new diag is introduced add it to the cases above! */
+ assert(0);
+ }
+
+ return vm->sblk->icptcode == icptcode && vm->sblk->ipa == 0x8302 &&
+ vm->sblk->ipb == 0x50000000 && vm->save_area.guest.grs[5] == diag;
+}
+#endif
diff --git a/s390x/pv-diags.c b/s390x/pv-diags.c
index 5165937a..096ac61f 100644
--- a/s390x/pv-diags.c
+++ b/s390x/pv-diags.c
@@ -9,6 +9,7 @@
*/
#include <libcflat.h>
#include <snippet.h>
+#include <pv_icptdata.h>
#include <sie.h>
#include <sclp.h>
#include <asm/facility.h>
@@ -31,8 +32,7 @@ static void test_diag_500(void)
size_gbin, size_hdr, SNIPPET_UNPACK_OFF);
sie(&vm);
- report(vm.sblk->icptcode == ICPT_PV_INSTR && vm.sblk->ipa == 0x8302 &&
- vm.sblk->ipb == 0x50000000 && vm.save_area.guest.grs[5] == 0x500,
+ report(pv_icptdata_check_diag(&vm, 0x500),
"intercept values");
report(vm.save_area.guest.grs[1] == 1 &&
vm.save_area.guest.grs[2] == 2 &&
@@ -45,9 +45,8 @@ static void test_diag_500(void)
*/
vm.sblk->iictl = IICTL_CODE_OPERAND;
sie(&vm);
- report(vm.sblk->icptcode == ICPT_PV_NOTIFY && vm.sblk->ipa == 0x8302 &&
- vm.sblk->ipb == 0x50000000 && vm.save_area.guest.grs[5] == 0x9c
- && vm.save_area.guest.grs[0] == PGM_INT_CODE_OPERAND,
+ report(pv_icptdata_check_diag(&vm, 0x9c) &&
+ vm.save_area.guest.grs[0] == PGM_INT_CODE_OPERAND,
"operand exception");
/*
@@ -58,9 +57,8 @@ static void test_diag_500(void)
vm.sblk->iictl = IICTL_CODE_SPECIFICATION;
/* Inject PGM, next exit should be 9c */
sie(&vm);
- report(vm.sblk->icptcode == ICPT_PV_NOTIFY && vm.sblk->ipa == 0x8302 &&
- vm.sblk->ipb == 0x50000000 && vm.save_area.guest.grs[5] == 0x9c
- && vm.save_area.guest.grs[0] == PGM_INT_CODE_SPECIFICATION,
+ report(pv_icptdata_check_diag(&vm, 0x9c) &&
+ vm.save_area.guest.grs[0] == PGM_INT_CODE_SPECIFICATION,
"specification exception");
/* No need for cleanup, just tear down the VM */
--
2.34.1
next prev parent reply other threads:[~2023-05-02 12:08 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-02 11:59 [kvm-unit-tests PATCH v4 0/7] s390x: Add PV SIE intercepts and ipl tests Janosch Frank
2023-05-02 11:59 ` [kvm-unit-tests PATCH v4 1/7] lib: s390x: uv: Introduce UV validity function Janosch Frank
2023-05-02 11:59 ` Janosch Frank [this message]
2023-05-02 11:59 ` [kvm-unit-tests PATCH v4 3/7] s390x: pv-diags: Drop snippet from snippet names Janosch Frank
2023-05-02 11:59 ` [kvm-unit-tests PATCH v4 4/7] lib: s390x: uv: Add pv host requirement check function Janosch Frank
2023-05-02 11:59 ` [kvm-unit-tests PATCH v4 5/7] s390x: pv: Add sie entry intercept and validity test Janosch Frank
2023-05-10 7:28 ` Nico Boehr
2023-05-15 11:53 ` [kvm-unit-tests PATCH v5] " Janosch Frank
2023-05-15 14:00 ` Nico Boehr
2023-05-02 11:59 ` [kvm-unit-tests PATCH v4 6/7] s390x: pv: Add IPL reset tests Janosch Frank
2023-05-10 7:32 ` Nico Boehr
2023-05-02 11:59 ` [kvm-unit-tests PATCH v4 7/7] s390x: pv-diags: Add the test to unittests.conf Janosch Frank
2023-05-10 7:33 ` Nico Boehr
2023-05-31 10:58 ` [kvm-unit-tests PATCH v4 0/7] s390x: Add PV SIE intercepts and ipl tests Nico Boehr
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=20230502115931.86280-3-frankja@linux.ibm.com \
--to=frankja@linux.ibm.com \
--cc=david@redhat.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=nrb@linux.ibm.com \
--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