From: Halil Pasic <pasic@linux.vnet.ibm.com>
To: Cornelia Huck <cohuck@redhat.com>
Cc: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>,
Pierre Morel <pmorel@linux.vnet.ibm.com>,
qemu-devel@nongnu.org, Halil Pasic <pasic@linux.vnet.ibm.com>
Subject: [Qemu-devel] [PATCH 5/9] s390x: refactor error handling for XSCH handler
Date: Wed, 30 Aug 2017 18:36:05 +0200 [thread overview]
Message-ID: <20170830163609.50260-6-pasic@linux.vnet.ibm.com> (raw)
In-Reply-To: <20170830163609.50260-1-pasic@linux.vnet.ibm.com>
Simplify the error handling of the XSCH handler avoiding arbitrary and
cryptic error codes being mapped to what a subchannel is supposed to do.
Let the code detecting the condition tell how it's to be handled in a
less ambiguous way.
Signed-off-by: Halil Pasic <pasic@linux.vnet.ibm.com>
Acked-by: Pierre Morel<pmorel@linux.vnet.ibm.com>
---
hw/s390x/css.c | 19 +++++++------------
include/hw/s390x/css.h | 2 +-
target/s390x/ioinst.c | 27 +++++++++------------------
3 files changed, 17 insertions(+), 31 deletions(-)
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 1102642c10..7880c2c025 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -1237,15 +1237,14 @@ out:
return ret;
}
-int css_do_xsch(SubchDev *sch)
+void css_do_xsch(SubchDev *sch)
{
SCSW *s = &sch->curr_status.scsw;
PMCW *p = &sch->curr_status.pmcw;
- int ret;
if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) {
- ret = -ENODEV;
- goto out;
+ sch->iret.cc = 3;
+ return;
}
if (!(s->ctrl & SCSW_CTRL_MASK_FCTL) ||
@@ -1253,13 +1252,13 @@ int css_do_xsch(SubchDev *sch)
(!(s->ctrl &
(SCSW_ACTL_RESUME_PEND | SCSW_ACTL_START_PEND | SCSW_ACTL_SUSP))) ||
(s->ctrl & SCSW_ACTL_SUBCH_ACTIVE)) {
- ret = -EBUSY;
- goto out;
+ sch->iret.cc = 2;
+ return;
}
if (s->ctrl & SCSW_CTRL_MASK_STCTL) {
- ret = -EINPROGRESS;
- goto out;
+ sch->iret.cc = 1;
+ return;
}
/* Cancel the current operation. */
@@ -1271,10 +1270,6 @@ int css_do_xsch(SubchDev *sch)
sch->last_cmd_valid = false;
s->dstat = 0;
s->cstat = 0;
- ret = 0;
-
-out:
- return ret;
}
int css_do_csch(SubchDev *sch)
diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h
index d093181a9e..d78ee5714b 100644
--- a/include/hw/s390x/css.h
+++ b/include/hw/s390x/css.h
@@ -204,7 +204,7 @@ void css_conditional_io_interrupt(SubchDev *sch);
int css_do_stsch(SubchDev *sch, SCHIB *schib);
bool css_schid_final(int m, uint8_t cssid, uint8_t ssid, uint16_t schid);
int css_do_msch(SubchDev *sch, const SCHIB *schib);
-int css_do_xsch(SubchDev *sch);
+void css_do_xsch(SubchDev *sch);
int css_do_csch(SubchDev *sch);
int css_do_hsch(SubchDev *sch);
void css_do_ssch(SubchDev *sch, ORB *orb);
diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c
index e8044068c2..f8e038fac7 100644
--- a/target/s390x/ioinst.c
+++ b/target/s390x/ioinst.c
@@ -41,8 +41,6 @@ void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1)
{
int cssid, ssid, schid, m;
SubchDev *sch;
- int ret = -ENODEV;
- int cc;
if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) {
program_interrupt(&cpu->env, PGM_OPERAND, 4);
@@ -50,24 +48,17 @@ void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1)
}
trace_ioinst_sch_id("xsch", cssid, ssid, schid);
sch = css_find_subch(m, cssid, ssid, schid);
- if (sch && css_subch_visible(sch)) {
- ret = css_do_xsch(sch);
+ if (!sch || !css_subch_visible(sch)) {
+ setcc(cpu, 3);
+ return;
}
- switch (ret) {
- case -ENODEV:
- cc = 3;
- break;
- case -EBUSY:
- cc = 2;
- break;
- case 0:
- cc = 0;
- break;
- default:
- cc = 1;
- break;
+ css_subch_clear_iret(sch);
+ css_do_xsch(sch);
+ if (sch->iret.pgm_chk) {
+ program_interrupt(&cpu->env, sch->iret.irq_code, 4);
+ return;
}
- setcc(cpu, cc);
+ setcc(cpu, sch->iret.cc);
}
void ioinst_handle_csch(S390CPU *cpu, uint64_t reg1)
--
2.13.5
next prev parent reply other threads:[~2017-08-30 16:36 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-30 16:36 [Qemu-devel] [PATCH 0/9] Halil Pasic
2017-08-30 16:36 ` [Qemu-devel] [PATCH 1/9] s390x/css: fix cc handling for XSCH Halil Pasic
2017-08-31 5:51 ` Thomas Huth
2017-08-31 6:38 ` Cornelia Huck
2017-08-31 7:32 ` Thomas Huth
2017-08-31 8:42 ` Cornelia Huck
2017-08-31 10:19 ` Halil Pasic
2017-08-31 9:09 ` Halil Pasic
2017-08-31 9:16 ` Thomas Huth
2017-08-30 16:36 ` [Qemu-devel] [PATCH 2/9] s390x: fix invalid use of cc 1 for SSCH Halil Pasic
2017-08-31 7:50 ` Thomas Huth
2017-08-31 10:54 ` Halil Pasic
2017-08-31 9:19 ` Cornelia Huck
2017-08-31 10:41 ` Halil Pasic
2017-09-05 8:02 ` Cornelia Huck
2017-09-05 15:24 ` Halil Pasic
2017-09-05 15:46 ` Cornelia Huck
2017-09-05 17:20 ` Halil Pasic
2017-09-06 8:27 ` Dong Jia Shi
2017-09-06 11:25 ` Cornelia Huck
2017-09-07 8:02 ` Dong Jia Shi
2017-09-07 11:01 ` Halil Pasic
2017-09-13 10:08 ` Cornelia Huck
2017-09-13 14:05 ` Halil Pasic
2017-09-06 11:37 ` Cornelia Huck
2017-09-06 8:37 ` Dong Jia Shi
2017-09-06 11:38 ` Cornelia Huck
2017-08-30 16:36 ` [Qemu-devel] [PATCH 3/9] s390x/css: be more consistent if broken beyond repair Halil Pasic
2017-08-31 6:10 ` Thomas Huth
2017-08-31 7:44 ` Thomas Huth
2017-08-31 9:33 ` Cornelia Huck
2017-08-30 16:36 ` [Qemu-devel] [PATCH 4/9] s390x: refactor error handling for SSCH and RSCH Halil Pasic
2017-08-31 9:55 ` Cornelia Huck
2017-09-05 15:55 ` Halil Pasic
2017-09-05 16:25 ` Cornelia Huck
2017-09-05 22:30 ` Halil Pasic
2017-09-06 4:31 ` Dong Jia Shi
2017-09-06 12:25 ` Halil Pasic
2017-09-06 14:20 ` Cornelia Huck
2017-09-06 14:43 ` Halil Pasic
2017-09-07 8:58 ` Dong Jia Shi
2017-09-07 10:15 ` Halil Pasic
2017-09-07 10:24 ` Cornelia Huck
2017-09-07 11:32 ` Halil Pasic
2017-09-07 11:41 ` Cornelia Huck
2017-09-08 3:41 ` Dong Jia Shi
2017-09-08 9:21 ` Halil Pasic
2017-09-08 9:59 ` Cornelia Huck
2017-09-25 7:31 ` Dong Jia Shi
2017-09-25 10:57 ` Halil Pasic
2017-09-27 7:55 ` Dong Jia Shi
2017-09-08 10:02 ` Cornelia Huck
2017-09-25 7:14 ` Dong Jia Shi
2017-08-30 16:36 ` Halil Pasic [this message]
2017-08-30 16:36 ` [Qemu-devel] [PATCH 6/9] s390x: refactor error handling for CSCH handler Halil Pasic
2017-08-30 16:36 ` [Qemu-devel] [PATCH 7/9] s390x: refactor error handling for HSCH handler Halil Pasic
2017-08-30 16:36 ` [Qemu-devel] [PATCH 8/9] s390x: refactor error handling for MSCH handler Halil Pasic
2017-08-30 16:36 ` [Qemu-devel] [PATCH 9/9] s390x: factor out common ioinst handler logic Halil Pasic
2017-08-31 10:04 ` [Qemu-devel] [PATCH 0/9] Cornelia Huck
2017-08-31 10:43 ` Halil Pasic
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=20170830163609.50260-6-pasic@linux.vnet.ibm.com \
--to=pasic@linux.vnet.ibm.com \
--cc=bjsdjshi@linux.vnet.ibm.com \
--cc=cohuck@redhat.com \
--cc=pmorel@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/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.