aboutsummaryrefslogtreecommitdiff
path: root/target/s390x/ioinst.c
diff options
context:
space:
mode:
Diffstat (limited to 'target/s390x/ioinst.c')
-rw-r--r--target/s390x/ioinst.c23
1 files changed, 4 insertions, 19 deletions
diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c
index fd659e77a5..8e4dacafd8 100644
--- a/target/s390x/ioinst.c
+++ b/target/s390x/ioinst.c
@@ -78,8 +78,6 @@ void ioinst_handle_hsch(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);
@@ -87,24 +85,11 @@ void ioinst_handle_hsch(S390CPU *cpu, uint64_t reg1)
}
trace_ioinst_sch_id("hsch", cssid, ssid, schid);
sch = css_find_subch(m, cssid, ssid, schid);
- if (sch && css_subch_visible(sch)) {
- ret = css_do_hsch(sch);
- }
- switch (ret) {
- case -ENODEV:
- cc = 3;
- break;
- case -EBUSY:
- cc = 2;
- break;
- case 0:
- cc = 0;
- break;
- default:
- cc = 1;
- break;
+ if (!sch || !css_subch_visible(sch)) {
+ setcc(cpu, 3);
+ return;
}
- setcc(cpu, cc);
+ setcc(cpu, css_do_hsch(sch));
}
static int ioinst_schib_valid(SCHIB *schib)