[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[qemu-s390x] [PULL 02/46] s390x/css: be more consistent if broken beyond
From: |
Cornelia Huck |
Subject: |
[qemu-s390x] [PULL 02/46] s390x/css: be more consistent if broken beyond repair |
Date: |
Fri, 20 Oct 2017 13:53:34 +0200 |
From: Halil Pasic <address@hidden>
Calling do_subchannel_work with no function control flags set in SCSW is
a programming error. Currently we handle this differently in
do_subchannel_work_virtual and do_subchannel_work_passthrough. Let's be
consistent and guard with a common assert against this programming error.
Signed-off-by: Halil Pasic <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Dong Jia Shi <address@hidden>
Reviewed-by: Thomas Huth <address@hidden>
Signed-off-by: Cornelia Huck <address@hidden>
---
hw/s390x/css.c | 16 ++++------------
1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index b6d4fcaf06..4f964b7691 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -1245,9 +1245,6 @@ int do_subchannel_work_virtual(SubchDev *sch)
} else if (s->ctrl & SCSW_FCTL_START_FUNC) {
/* Triggered by both ssch and rsch. */
sch_handle_start_func_virtual(sch);
- } else {
- /* Cannot happen. */
- return 0;
}
css_inject_io_interrupt(sch);
return 0;
@@ -1255,22 +1252,17 @@ int do_subchannel_work_virtual(SubchDev *sch)
int do_subchannel_work_passthrough(SubchDev *sch)
{
- int ret;
+ int ret = 0;
SCSW *s = &sch->curr_status.scsw;
if (s->ctrl & SCSW_FCTL_CLEAR_FUNC) {
/* TODO: Clear handling */
sch_handle_clear_func(sch);
- ret = 0;
} else if (s->ctrl & SCSW_FCTL_HALT_FUNC) {
/* TODO: Halt handling */
sch_handle_halt_func(sch);
- ret = 0;
} else if (s->ctrl & SCSW_FCTL_START_FUNC) {
ret = sch_handle_start_func_passthrough(sch);
- } else {
- /* Cannot happen. */
- return -ENODEV;
}
return ret;
@@ -1278,11 +1270,11 @@ int do_subchannel_work_passthrough(SubchDev *sch)
static int do_subchannel_work(SubchDev *sch)
{
- if (sch->do_subchannel_work) {
- return sch->do_subchannel_work(sch);
- } else {
+ if (!sch->do_subchannel_work) {
return -EINVAL;
}
+ g_assert(sch->curr_status.scsw.ctrl & SCSW_CTRL_MASK_FCTL);
+ return sch->do_subchannel_work(sch);
}
static void copy_pmcw_to_guest(PMCW *dest, const PMCW *src)
--
2.13.6
- [qemu-s390x] [PULL 00/46] more s390x patches for 2.11, Cornelia Huck, 2017/10/20
- [qemu-s390x] [PULL 02/46] s390x/css: be more consistent if broken beyond repair,
Cornelia Huck <=
- [qemu-s390x] [PULL 01/46] S390: use g_new() family of functions, Cornelia Huck, 2017/10/20
- [qemu-s390x] [PULL 03/46] s390x/tcg: turn INTERRUPT_EXT into a mask, Cornelia Huck, 2017/10/20
- [qemu-s390x] [PULL 04/46] s390x/tcg: cleanup service interrupt injection, Cornelia Huck, 2017/10/20
- [qemu-s390x] [PULL 05/46] s390x/tcg: injection of emergency signals and external calls, Cornelia Huck, 2017/10/20
- [qemu-s390x] [PULL 08/46] s390x/tcg: STOPPED cpus can never wake up, Cornelia Huck, 2017/10/20
- [qemu-s390x] [PULL 06/46] s390x/tcg: rework checking for deliverable interrupts, Cornelia Huck, 2017/10/20
- [qemu-s390x] [PULL 07/46] s390x/tcg: take care of external interrupt subclasses, Cornelia Huck, 2017/10/20
- [qemu-s390x] [PULL 09/46] s390x/tcg: a CPU cannot switch state due to an interrupt, Cornelia Huck, 2017/10/20
- [qemu-s390x] [PULL 11/46] s390x/tcg: handle WAIT PSWs during interrupt injection, Cornelia Huck, 2017/10/20
- [qemu-s390x] [PULL 10/46] target/s390x: factor out handling of WAIT PSW into s390_handle_wait(), Cornelia Huck, 2017/10/20