qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Collin L. Walling" <walling@linux.vnet.ibm.com>
To: qemu-s390x@nongnu.org, qemu-devel@nongnu.org
Cc: borntraeger@de.ibm.com, frankja@linux.vnet.ibm.com,
	cohuck@redhat.com, thuth@redhat.com, david@redhat.com,
	alifm@linux.vnet.ibm.com, eblake@redhat.com,
	mihajlov@linux.vnet.ibm.com
Subject: [Qemu-devel] [PATCH v5 11/12] s390-ccw: clear pending irqs
Date: Mon,  5 Feb 2018 15:57:25 -0500	[thread overview]
Message-ID: <1517864246-11101-12-git-send-email-walling@linux.vnet.ibm.com> (raw)
In-Reply-To: <1517864246-11101-1-git-send-email-walling@linux.vnet.ibm.com>

It is possible while waiting for multiple types of external
interrupts that we might have pending irqs remaining between
irq consumption and irq disabling. Those interrupts could
propagate to the guest after IPL completes and cause unwanted
behavior.

To avoid this, we clear the write event mask to prevent further
service interrupts from ASCII events and then consume all pending
irqs for a miniscule duration. Once finished, we reset the write
event mask and resume business as usual.

Signed-off-by: Collin L. Walling <walling@linux.vnet.ibm.com>
---
 pc-bios/s390-ccw/menu.c | 16 ++++++++++++++++
 pc-bios/s390-ccw/sclp.c | 12 ++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/pc-bios/s390-ccw/menu.c b/pc-bios/s390-ccw/menu.c
index 85d285f..971f6b6 100644
--- a/pc-bios/s390-ccw/menu.c
+++ b/pc-bios/s390-ccw/menu.c
@@ -64,6 +64,20 @@ static inline bool check_clock_int(void)
     return *code == 0x1004;
 }
 
+static void clear_pending_irqs(void)
+{
+    uint64_t time = 50 * TOD_CLOCK_SECOND / 0x3e8;
+
+    sclp_clear_write_mask();
+
+    set_clock_comparator(get_clock() + time);
+    enable_clock_int();
+    consume_sclp_int();
+    disable_clock_int();
+
+    sclp_setup(); /* re-enable write mask */
+}
+
 static int read_prompt(char *buf, size_t len)
 {
     char inp[2] = {};
@@ -165,6 +179,8 @@ static int get_boot_index(int entries)
     sclp_print("\nBooting entry #");
     sclp_print(itostr(boot_index, tmp, sizeof(tmp)));
 
+    clear_pending_irqs();
+
     return boot_index;
 }
 
diff --git a/pc-bios/s390-ccw/sclp.c b/pc-bios/s390-ccw/sclp.c
index 5902d5b..025eb2d 100644
--- a/pc-bios/s390-ccw/sclp.c
+++ b/pc-bios/s390-ccw/sclp.c
@@ -46,6 +46,18 @@ static int sclp_service_call(unsigned int command, void *sccb)
         return 0;
 }
 
+void sclp_clear_write_mask(void)
+{
+    WriteEventMask *sccb = (void *)_sccb;
+
+    sccb->h.length = sizeof(WriteEventMask);
+    sccb->mask_length = sizeof(unsigned int);
+    sccb->cp_receive_mask = 0;
+    sccb->cp_send_mask = 0;
+
+    sclp_service_call(SCLP_CMD_WRITE_EVENT_MASK, sccb);
+}
+
 static void sclp_set_write_mask(void)
 {
     WriteEventMask *sccb = (void *)_sccb;
-- 
2.7.4

  parent reply	other threads:[~2018-02-05 21:01 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-05 20:57 [Qemu-devel] [PATCH v5 00/12]Interactive Boot Menu for DASD and SCSI Guests on s390x Collin L. Walling
2018-02-05 20:57 ` [Qemu-devel] [PATCH v5 01/12] s390-ccw: refactor boot map table code Collin L. Walling
2018-02-06  5:52   ` [Qemu-devel] [qemu-s390x] " Thomas Huth
2018-02-06 17:05     ` Collin L. Walling
2018-02-05 20:57 ` [Qemu-devel] [PATCH v5 02/12] s390-ccw: refactor eckd_block_num to use CHS Collin L. Walling
2018-02-06  6:00   ` [Qemu-devel] [qemu-s390x] " Thomas Huth
2018-02-05 20:57 ` [Qemu-devel] [PATCH v5 03/12] s390-ccw: refactor IPL structs Collin L. Walling
2018-02-05 20:57 ` [Qemu-devel] [PATCH v5 04/12] s390-ccw: update libc Collin L. Walling
2018-02-06  6:14   ` [Qemu-devel] [qemu-s390x] " Thomas Huth
2018-02-06 17:07     ` Collin L. Walling
2018-02-05 20:57 ` [Qemu-devel] [PATCH v5 05/12] s390-ccw: move auxiliary IPL data to separate location Collin L. Walling
2018-02-06  9:23   ` [Qemu-devel] [qemu-s390x] " Thomas Huth
2018-02-06 10:13     ` Viktor Mihajlovski
2018-02-06 17:10       ` Collin L. Walling
2018-02-14 14:51       ` Collin L. Walling
2018-02-14 15:07         ` Christian Borntraeger
2018-02-06  9:45   ` [Qemu-devel] " Christian Borntraeger
2018-02-06  9:57     ` Viktor Mihajlovski
2018-02-05 20:57 ` [Qemu-devel] [PATCH v5 06/12] s390-ccw: parse and set boot menu options Collin L. Walling
2018-02-06 10:00   ` Viktor Mihajlovski
2018-02-14 17:46   ` [Qemu-devel] [qemu-s390x] " Collin L. Walling
2018-02-15  6:38     ` Thomas Huth
2018-02-15  7:57       ` Viktor Mihajlovski
2018-02-05 20:57 ` [Qemu-devel] [PATCH v5 07/12] s390-ccw: set up interactive boot menu parameters Collin L. Walling
2018-02-05 20:57 ` [Qemu-devel] [PATCH v5 08/12] s390-ccw: read stage2 boot loader data to find menu Collin L. Walling
2018-02-05 20:57 ` [Qemu-devel] [PATCH v5 09/12] s390-ccw: print zipl boot menu Collin L. Walling
2018-02-05 20:57 ` [Qemu-devel] [PATCH v5 10/12] s390-ccw: read user input for boot index via the SCLP console Collin L. Walling
2018-02-05 20:57 ` Collin L. Walling [this message]
2018-02-06 10:07   ` [Qemu-devel] [qemu-s390x] [PATCH v5 11/12] s390-ccw: clear pending irqs Thomas Huth
2018-02-06 16:37     ` Collin L. Walling
2018-02-14 10:57   ` David Hildenbrand
2018-02-14 15:33     ` Collin L. Walling
2018-02-15  7:04       ` Thomas Huth
2018-02-15 15:47         ` Collin L. Walling
2018-02-15 16:12           ` David Hildenbrand
2018-02-05 20:57 ` [Qemu-devel] [PATCH v5 12/12] s390-ccw: interactive boot menu for scsi Collin L. Walling
2018-02-05 21:20 ` [Qemu-devel] [PATCH v5 00/12]Interactive Boot Menu for DASD and SCSI Guests on s390x no-reply
2018-02-05 21:37   ` [Qemu-devel] [qemu-s390x] " Collin L. Walling

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=1517864246-11101-12-git-send-email-walling@linux.vnet.ibm.com \
    --to=walling@linux.vnet.ibm.com \
    --cc=alifm@linux.vnet.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=eblake@redhat.com \
    --cc=frankja@linux.vnet.ibm.com \
    --cc=mihajlov@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-s390x@nongnu.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;
as well as URLs for NNTP newsgroup(s).