summaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorXiao Feng Ren2017-05-17 02:48:11 +0200
committerCornelia Huck2017-05-19 12:29:01 +0200
commitbab482d7405f9fe3cac9c213d60f9ca9442c047b (patch)
tree7dc7df9f07152940bbfb2ee1034a982f44b66682 /target
parents390x/css: introduce and realize ccw-request callback (diff)
downloadqemu-bab482d7405f9fe3cac9c213d60f9ca9442c047b.tar.gz
qemu-bab482d7405f9fe3cac9c213d60f9ca9442c047b.tar.xz
qemu-bab482d7405f9fe3cac9c213d60f9ca9442c047b.zip
s390x/css: ccw translation infrastructure
Implement a basic infrastructure of handling channel I/O instruction interception for passed through subchannels: 1. Branch the code path of instruction interception handling by SubChannel type. 2. For a passed-through subchannel, issue the ORB to kernel to do ccw translation and perform an I/O operation. 3. Assign different condition code based on the I/O result, or trigger a program check. Signed-off-by: Xiao Feng Ren <renxiaof@linux.vnet.ibm.com> Signed-off-by: Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com> Message-Id: <20170517004813.58227-12-bjsdjshi@linux.vnet.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Diffstat (limited to 'target')
-rw-r--r--target/s390x/ioinst.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c
index 590bfa4f12..62a777100c 100644
--- a/target/s390x/ioinst.c
+++ b/target/s390x/ioinst.c
@@ -244,6 +244,15 @@ void ioinst_handle_ssch(S390CPU *cpu, uint64_t reg1, uint32_t ipb)
case -EBUSY:
cc = 2;
break;
+ case -EFAULT:
+ /*
+ * TODO:
+ * I'm wondering whether there is something better
+ * to do for us here (like setting some device or
+ * subchannel status).
+ */
+ program_interrupt(env, PGM_ADDRESSING, 4);
+ return;
case 0:
cc = 0;
break;