public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Nico Boehr <nrb@linux.ibm.com>
To: frankja@linux.ibm.com, imbrenda@linux.ibm.com, thuth@redhat.com
Cc: kvm@vger.kernel.org, linux-s390@vger.kernel.org
Subject: [kvm-unit-tests PATCH v5 5/6] s390x: lib: sie: don't reenter SIE on pgm int
Date: Wed, 12 Jul 2023 13:41:48 +0200	[thread overview]
Message-ID: <20230712114149.1291580-6-nrb@linux.ibm.com> (raw)
In-Reply-To: <20230712114149.1291580-1-nrb@linux.ibm.com>

At the moment, when a PGM int occurs while in SIE, we will just reenter
SIE after the interrupt handler was called.

This is because sie() has a loop which checks icptcode and re-enters SIE
if it is zero.

However, this behaviour is quite undesirable for SIE tests, since it
doesn't give the host the chance to assert on the PGM int. Instead, we
will just re-enter SIE, on nullifing conditions even causing the
exception again.

In sie(), check whether a pgm int code is set in lowcore. If it has,
exit the loop so the test can react to the interrupt. Add a new function
read_pgm_int_code() to obtain the interrupt code.

Note that this introduces a slight oddity with sie and pgm int in
certain cases: If a PGM int occurs between a expect_pgm_int() and sie(),
we will now never enter SIE until the pgm_int_code is cleared by e.g.
clear_pgm_int().

Also add missing include of facility.h to mem.h.

Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
---
 lib/s390x/asm/interrupt.h | 14 ++++++++++++++
 lib/s390x/asm/mem.h       |  1 +
 lib/s390x/sie.c           |  4 +++-
 3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/lib/s390x/asm/interrupt.h b/lib/s390x/asm/interrupt.h
index 55759002dce2..9e509d2f4f1e 100644
--- a/lib/s390x/asm/interrupt.h
+++ b/lib/s390x/asm/interrupt.h
@@ -99,4 +99,18 @@ static inline void low_prot_disable(void)
 	ctl_clear_bit(0, CTL0_LOW_ADDR_PROT);
 }
 
+/**
+ * read_pgm_int_code - Get the program interruption code of the last pgm int
+ * on the current CPU.
+ *
+ * This is similar to clear_pgm_int(), except that it doesn't clear the
+ * interruption information from lowcore.
+ *
+ * Returns 0 when none occurred.
+ */
+static inline uint16_t read_pgm_int_code(void)
+{
+	return lowcore.pgm_int_code;
+}
+
 #endif
diff --git a/lib/s390x/asm/mem.h b/lib/s390x/asm/mem.h
index 64ef59b546a4..94d58c34f53f 100644
--- a/lib/s390x/asm/mem.h
+++ b/lib/s390x/asm/mem.h
@@ -8,6 +8,7 @@
 #ifndef _ASMS390X_MEM_H_
 #define _ASMS390X_MEM_H_
 #include <asm/arch_def.h>
+#include <asm/facility.h>
 
 /* create pointer while avoiding compiler warnings */
 #define OPAQUE_PTR(x) ((void *)(((uint64_t)&lowcore) + (x)))
diff --git a/lib/s390x/sie.c b/lib/s390x/sie.c
index ffa8ec91a423..632740edd431 100644
--- a/lib/s390x/sie.c
+++ b/lib/s390x/sie.c
@@ -13,6 +13,7 @@
 #include <libcflat.h>
 #include <sie.h>
 #include <asm/page.h>
+#include <asm/interrupt.h>
 #include <libcflat.h>
 #include <alloc_page.h>
 
@@ -65,7 +66,8 @@ void sie(struct vm *vm)
 	/* also handle all interruptions in home space while in SIE */
 	irq_set_dat_mode(IRQ_DAT_ON, AS_HOME);
 
-	while (vm->sblk->icptcode == 0) {
+	/* leave SIE when we have an intercept or an interrupt so the test can react to it */
+	while (vm->sblk->icptcode == 0 && !read_pgm_int_code()) {
 		sie64a(vm->sblk, &vm->save_area);
 		sie_handle_validity(vm);
 	}
-- 
2.40.1


  parent reply	other threads:[~2023-07-12 11:42 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-12 11:41 [kvm-unit-tests PATCH v5 0/6] s390x: Add support for running guests without MSO/MSL Nico Boehr
2023-07-12 11:41 ` [kvm-unit-tests PATCH v5 1/6] lib: s390x: introduce bitfield for PSW mask Nico Boehr
2023-07-13  6:56   ` Thomas Huth
2023-07-13  6:57     ` Thomas Huth
2023-07-13  9:25     ` Nico Boehr
2023-07-13  8:20   ` Claudio Imbrenda
2023-07-13  9:35     ` Nico Boehr
2023-07-12 11:41 ` [kvm-unit-tests PATCH v5 2/6] s390x: add function to set DAT mode for all interrupts Nico Boehr
2023-07-13  7:17   ` Thomas Huth
2023-07-13  8:23     ` Claudio Imbrenda
2023-07-13 15:30     ` Nico Boehr
2023-07-14  6:44       ` Thomas Huth
2023-07-14 10:38         ` Nico Boehr
2023-07-13  8:24   ` Claudio Imbrenda
2023-07-13 15:35     ` Nico Boehr
2023-07-12 11:41 ` [kvm-unit-tests PATCH v5 3/6] s390x: sie: switch to home space mode before entering SIE Nico Boehr
2023-07-13  7:28   ` Thomas Huth
2023-07-13  8:17     ` Claudio Imbrenda
2023-07-13  8:21       ` Thomas Huth
2023-07-14  8:21         ` Nico Boehr
2023-07-14  8:30           ` Thomas Huth
2023-07-14 10:31             ` Nico Boehr
2023-07-12 11:41 ` [kvm-unit-tests PATCH v5 4/6] s390x: lib: don't forward PSW when handling exception in SIE Nico Boehr
2023-07-12 11:41 ` Nico Boehr [this message]
2023-07-13  7:51   ` [kvm-unit-tests PATCH v5 5/6] s390x: lib: sie: don't reenter SIE on pgm int Thomas Huth
2023-07-12 11:41 ` [kvm-unit-tests PATCH v5 6/6] s390x: add a test for SIE without MSO/MSL Nico Boehr
2023-07-13  8:29   ` Thomas Huth
2023-07-14  8:35     ` Nico Boehr
2023-07-14  8:40       ` Thomas Huth
2023-07-14 10:39         ` Nico Boehr
2023-07-14 10:52           ` Thomas Huth
2023-08-01  6:51             ` Nico Boehr
2023-08-14 14:59               ` Thomas Huth
2023-08-15 11:30                 ` Janosch Frank
2023-08-15 14:07                   ` Thomas Huth
2023-08-15 14:26                     ` Janosch Frank

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=20230712114149.1291580-6-nrb@linux.ibm.com \
    --to=nrb@linux.ibm.com \
    --cc=frankja@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --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