From: Janosch Frank <frankja@linux.ibm.com>
To: kvm@vger.kernel.org
Cc: linux-s390@vger.kernel.org, david@redhat.com, thuth@redhat.com
Subject: [kvm-unit-tests PATCH 5/6] s390x: Prepare for external calls
Date: Thu, 29 Aug 2019 14:14:58 +0200 [thread overview]
Message-ID: <20190829121459.1708-6-frankja@linux.ibm.com> (raw)
In-Reply-To: <20190829121459.1708-1-frankja@linux.ibm.com>
With SMP we also get new external interrupts like external call and
emergency call. Let's make them known.
Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
lib/s390x/asm/arch_def.h | 5 +++++
lib/s390x/asm/interrupt.h | 3 +++
lib/s390x/interrupt.c | 24 ++++++++++++++++++++----
3 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/lib/s390x/asm/arch_def.h b/lib/s390x/asm/arch_def.h
index d5a7f51..5ece2ce 100644
--- a/lib/s390x/asm/arch_def.h
+++ b/lib/s390x/asm/arch_def.h
@@ -19,6 +19,11 @@ struct psw {
#define PSW_MASK_DAT 0x0400000000000000UL
#define PSW_MASK_PSTATE 0x0001000000000000UL
+#define CR0_EXTM_SCLP 0X0000000000000200UL
+#define CR0_EXTM_EXTC 0X0000000000004000UL
+#define CR0_EXTM_EMGC 0X0000000000008000UL
+#define CR0_EXTM_MASK 0X000000000001DD40UL
+
struct lowcore {
uint8_t pad_0x0000[0x0080 - 0x0000]; /* 0x0000 */
uint32_t ext_int_param; /* 0x0080 */
diff --git a/lib/s390x/asm/interrupt.h b/lib/s390x/asm/interrupt.h
index f485e96..4cfade9 100644
--- a/lib/s390x/asm/interrupt.h
+++ b/lib/s390x/asm/interrupt.h
@@ -11,6 +11,8 @@
#define _ASMS390X_IRQ_H_
#include <asm/arch_def.h>
+#define EXT_IRQ_EMERGENCY_SIG 0x1201
+#define EXT_IRQ_EXTERNAL_CALL 0x1202
#define EXT_IRQ_SERVICE_SIG 0x2401
void handle_pgm_int(void);
@@ -19,6 +21,7 @@ void handle_mcck_int(void);
void handle_io_int(void);
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(uint16_t code);
diff --git a/lib/s390x/interrupt.c b/lib/s390x/interrupt.c
index 7832711..d4f279a 100644
--- a/lib/s390x/interrupt.c
+++ b/lib/s390x/interrupt.c
@@ -15,6 +15,7 @@
#include <sclp.h>
static bool pgm_int_expected;
+static bool ext_int_expected;
static struct lowcore *lc;
void expect_pgm_int(void)
@@ -24,6 +25,13 @@ void expect_pgm_int(void)
mb();
}
+void expect_ext_int(void)
+{
+ ext_int_expected = true;
+ lc->ext_int_code = 0;
+ mb();
+}
+
uint16_t clear_pgm_int(void)
{
uint16_t code;
@@ -108,15 +116,23 @@ void handle_pgm_int(void)
void handle_ext_int(void)
{
- if (lc->ext_int_code != EXT_IRQ_SERVICE_SIG) {
+ if (!ext_int_expected &&
+ lc->ext_int_code != EXT_IRQ_SERVICE_SIG) {
report_abort("Unexpected external call interrupt: at %#lx",
lc->ext_old_psw.addr);
- } else {
- lc->ext_old_psw.mask &= ~PSW_MASK_EXT;
+ return;
+ }
+
+ if (lc->ext_int_code == EXT_IRQ_SERVICE_SIG) {
lc->sw_int_cr0 &= ~(1UL << 9);
sclp_handle_ext();
- lc->ext_int_code = 0;
}
+ if (lc->ext_int_code != EXT_IRQ_SERVICE_SIG) {
+ ext_int_expected = false;
+ }
+
+ if (!(lc->sw_int_cr0 & CR0_EXTM_MASK))
+ lc->ext_old_psw.mask &= ~PSW_MASK_EXT;
}
void handle_mcck_int(void)
--
2.17.0
next prev parent reply other threads:[~2019-08-29 12:15 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-29 12:14 [kvm-unit-tests PATCH 0/6] s390x: Add multiboot and smp Janosch Frank
2019-08-29 12:14 ` [kvm-unit-tests PATCH 1/6] s390x: Use interrupts in SCLP and add locking Janosch Frank
2019-08-30 12:21 ` David Hildenbrand
2019-09-02 11:42 ` Thomas Huth
2019-09-03 7:53 ` Janosch Frank
2019-09-03 8:52 ` David Hildenbrand
2019-08-29 12:14 ` [kvm-unit-tests PATCH 2/6] s390x: Add linemode console Janosch Frank
2019-09-02 11:59 ` Thomas Huth
2019-08-29 12:14 ` [kvm-unit-tests PATCH 3/6] s390x: Add linemode buffer to fix newline on every print Janosch Frank
2019-08-29 12:14 ` [kvm-unit-tests PATCH 4/6] s390x: Add initial smp code Janosch Frank
2019-09-02 13:21 ` Thomas Huth
2019-09-03 8:10 ` Janosch Frank
2019-08-29 12:14 ` Janosch Frank [this message]
2019-09-02 13:58 ` [kvm-unit-tests PATCH 5/6] s390x: Prepare for external calls Thomas Huth
2019-09-02 14:17 ` Janosch Frank
2019-08-29 12:14 ` [kvm-unit-tests PATCH 6/6] s390x: SMP test Janosch Frank
2019-09-02 15:40 ` Thomas Huth
2019-09-03 8:44 ` Janosch Frank
2019-09-03 8:56 ` Thomas Huth
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=20190829121459.1708-6-frankja@linux.ibm.com \
--to=frankja@linux.ibm.com \
--cc=david@redhat.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 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.