From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:41675) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UUcUd-0007nS-BV for qemu-devel@nongnu.org; Tue, 23 Apr 2013 08:38:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UUcUb-0000rj-IA for qemu-devel@nongnu.org; Tue, 23 Apr 2013 08:38:43 -0400 Received: from e06smtp13.uk.ibm.com ([195.75.94.109]:38838) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UUcUb-0000rM-7r for qemu-devel@nongnu.org; Tue, 23 Apr 2013 08:38:41 -0400 Received: from /spool/local by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 23 Apr 2013 13:35:46 +0100 Received: from b06cxnps4076.portsmouth.uk.ibm.com (d06relay13.portsmouth.uk.ibm.com [9.149.109.198]) by d06dlp01.portsmouth.uk.ibm.com (Postfix) with ESMTP id 7D4D017D802A for ; Tue, 23 Apr 2013 13:38:26 +0100 (BST) Received: from d06av12.portsmouth.uk.ibm.com (d06av12.portsmouth.uk.ibm.com [9.149.37.247]) by b06cxnps4076.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r3NCbIpw42795202 for ; Tue, 23 Apr 2013 12:37:18 GMT Received: from d06av12.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av12.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id r3NCbRRg003677 for ; Tue, 23 Apr 2013 06:37:28 -0600 From: Cornelia Huck Date: Tue, 23 Apr 2013 14:37:12 +0200 Message-Id: <1366720634-13184-3-git-send-email-cornelia.huck@de.ibm.com> In-Reply-To: <1366720634-13184-1-git-send-email-cornelia.huck@de.ibm.com> References: <1366720634-13184-1-git-send-email-cornelia.huck@de.ibm.com> Subject: [Qemu-devel] [PATCH 2/4] s390-ccw.img: Enhance drain_irqs(). List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexander Graf Cc: Cornelia Huck , Christian Borntraeger , qemu-devel@nongnu.org, Dominik Dingel - Use tpi + tsch to get interrupts. - Return an error if the irb indicates problems. Signed-off-by: Cornelia Huck --- pc-bios/s390-ccw/virtio.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/pc-bios/s390-ccw/virtio.c b/pc-bios/s390-ccw/virtio.c index 79e2941..2a132f8 100644 --- a/pc-bios/s390-ccw/virtio.c +++ b/pc-bios/s390-ccw/virtio.c @@ -38,12 +38,27 @@ 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 = {}; + struct tpi_info tpi_info = {}; + int r = 0; + while (1) { - if (tsch(schid, &irb)) { - return; + if (tpi(&tpi_info)) { + if (tpi_info.schid.sch_no != schid.sch_no) { + /* should not really happen... */ + continue; + } + if (tsch(schid, &irb)) { + /* Might want to differentiate error codes later on. */ + if (irb.scsw.cstat) { + r = -EIO; + } else if (irb.scsw.dstat != 0xc) { + r = -EIO; + } + return r; + } } } } -- 1.7.12.4