summaryrefslogtreecommitdiff
path: root/pc-bios/s390-ccw/virtio.c
diff options
context:
space:
mode:
authorCornelia Huck <cornelia.huck@de.ibm.com>2013-04-26 02:12:53 +0000
committerAlexander Graf <agraf@suse.de>2013-04-26 20:18:24 +0200
commit776e7f0f215dd11dde85277723408fae3d319143 (patch)
tree8347dd6ee07b2e12ae6c25c7c3323889c04b8a96 /pc-bios/s390-ccw/virtio.c
parent22d67ab55aad82383a0e5628b902a1a0556b2fc9 (diff)
downloadqemu-776e7f0f215dd11dde85277723408fae3d319143.zip
s390-ccw.img: Enhance drain_irqs().
- Use tpi + tsch to get interrupts. - Return an error if the irb indicates problems. Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'pc-bios/s390-ccw/virtio.c')
-rw-r--r--pc-bios/s390-ccw/virtio.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c
index 1968fc6619..1bd17d4781 100644
--- a/pc-bios/s390-ccw/virtio.c
+++ b/pc-bios/s390-ccw/virtio.c
@@ -38,12 +38,21 @@ static void virtio_notify(struct subchannel_id schid)
* Virtio functions *
***********************************************/
-static void drain_irqs(struct subchannel_id schid)
+static int drain_irqs(struct subchannel_id schid)
{
struct irb irb = {};
+ int r = 0;
+
while (1) {
+ /* FIXME: make use of TPI, for that enable subchannel and isc */
if (tsch(schid, &irb)) {
- return;
+ /* Might want to differentiate error codes later on. */
+ if (irb.scsw.cstat) {
+ r = -EIO;
+ } else if (irb.scsw.dstat != 0xc) {
+ r = -EIO;
+ }
+ return r;
}
}
}