s390x/css: be more consistent if broken beyond repair
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 <pasic@linux.vnet.ibm.com> Message-Id: <20171004154144.88995-2-pasic@linux.vnet.ibm.com> Reviewed-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> Reviewed-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Cornelia Huck <cohuck@redhat.com>
This commit is contained in:
parent
96f64aa878
commit
9ea63c05d9
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user