From nobody Fri May 3 23:59:36 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 15082492427541013.5962352787632; Tue, 17 Oct 2017 07:07:22 -0700 (PDT) Received: from localhost ([::1]:39692 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4SWa-0007n6-Go for importer@patchew.org; Tue, 17 Oct 2017 10:07:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55544) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4SUY-0006U3-KA for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e4SUU-0004Vk-Gx for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:10 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:45115 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e4SUU-0004VW-9U for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:06 -0400 Received: from pps.filterd (m0098416.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v9HE4k3M092642 for ; Tue, 17 Oct 2017 10:05:01 -0400 Received: from e06smtp13.uk.ibm.com (e06smtp13.uk.ibm.com [195.75.94.109]) by mx0b-001b2d01.pphosted.com with ESMTP id 2dnjt4291f-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 17 Oct 2017 10:05:01 -0400 Received: from localhost by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 17 Oct 2017 15:04:59 +0100 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp13.uk.ibm.com (192.168.101.143) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 17 Oct 2017 15:04:57 +0100 Received: from d06av24.portsmouth.uk.ibm.com (mk.ibm.com [9.149.105.60]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v9HE4uNx24445056; Tue, 17 Oct 2017 14:04:56 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 637654204D; Tue, 17 Oct 2017 15:00:30 +0100 (BST) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2BFD642042; Tue, 17 Oct 2017 15:00:30 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Tue, 17 Oct 2017 15:00:30 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Tue, 17 Oct 2017 16:04:47 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> References: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17101714-0012-0000-0000-00000582AD2E X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17101714-0013-0000-0000-000018FCFF42 Message-Id: <20171017140453.51099-2-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-17_10:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1710170197 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 148.163.158.5 Subject: [Qemu-devel] [PATCH v3 1/7] s390x/css: be more consistent if broken beyond repair X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth , Halil Pasic , Pierre Morel , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Calling do_subchannel_work with no function control flags set in SCSW is a programming error. Currently the 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 Reviewed-by: Thomas Huth Tested-by: Dong Jia Shi --- Already applied to Connies s390-next. Included for the sake of completenes (with) the old typo in the commit message. --- hw/s390x/css.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/hw/s390x/css.c b/hw/s390x/css.c index 35683d7954..aa233d5f8a 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -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) =20 int do_subchannel_work_passthrough(SubchDev *sch) { - int ret; + int ret =3D 0; SCSW *s =3D &sch->curr_status.scsw; =20 if (s->ctrl & SCSW_FCTL_CLEAR_FUNC) { /* TODO: Clear handling */ sch_handle_clear_func(sch); - ret =3D 0; } else if (s->ctrl & SCSW_FCTL_HALT_FUNC) { /* TODO: Halt handling */ sch_handle_halt_func(sch); - ret =3D 0; } else if (s->ctrl & SCSW_FCTL_START_FUNC) { ret =3D sch_handle_start_func_passthrough(sch); - } else { - /* Cannot happen. */ - return -ENODEV; } =20 return ret; @@ -1278,11 +1270,11 @@ int do_subchannel_work_passthrough(SubchDev *sch) =20 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); } =20 static void copy_pmcw_to_guest(PMCW *dest, const PMCW *src) --=20 2.13.5 From nobody Fri May 3 23:59:36 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1508249483192492.7102291225982; Tue, 17 Oct 2017 07:11:23 -0700 (PDT) Received: from localhost ([::1]:39740 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4SaO-0002ck-BK for importer@patchew.org; Tue, 17 Oct 2017 10:11:12 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55825) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4SVC-000738-Vc for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e4SV7-0004xg-2u for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:50 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:49876) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e4SV6-0004xF-Qp for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:45 -0400 Received: from pps.filterd (m0098399.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v9HE5WdP039757 for ; Tue, 17 Oct 2017 10:05:41 -0400 Received: from e06smtp10.uk.ibm.com (e06smtp10.uk.ibm.com [195.75.94.106]) by mx0a-001b2d01.pphosted.com with ESMTP id 2dnk4w0r83-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 17 Oct 2017 10:05:39 -0400 Received: from localhost by e06smtp10.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 17 Oct 2017 15:05:00 +0100 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp10.uk.ibm.com (192.168.101.140) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 17 Oct 2017 15:04:58 +0100 Received: from d06av24.portsmouth.uk.ibm.com (d06av24.portsmouth.uk.ibm.com [9.149.105.60]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v9HE4vgk20381882; Tue, 17 Oct 2017 14:04:57 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 969F142045; Tue, 17 Oct 2017 15:00:31 +0100 (BST) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6DADE4203F; Tue, 17 Oct 2017 15:00:31 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Tue, 17 Oct 2017 15:00:31 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Tue, 17 Oct 2017 16:04:48 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> References: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17101714-0040-0000-0000-000003E3ABEA X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17101714-0041-0000-0000-000025E5F648 Message-Id: <20171017140453.51099-3-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-17_10:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1710170197 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 148.163.156.1 Subject: [Qemu-devel] [PATCH v3 2/7] s390x/css: IO instr handler ending control X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth , Halil Pasic , Pierre Morel , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" CSS code needs to tell the IO instruction handlers located in how should the emulated instruction be ended. Currently this is done by returning generic (POSIX) error codes, and mapping them to outcomes like condition codes. This makes bugs easy to create and hard to recognise. As a preparation for moving a way form (mis)using generic error codes for flow control let us introduce a type which tells the instruction handler function how to end the instruction, in a more straight-forward and less ambiguous way. Signed-off-by: Halil Pasic Reviewed-by: Dong Jia Shi Reviewed-by: Thomas Huth Tested-by: Dong Jia Shi --- include/hw/s390x/css.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h index 69b374730e..7e0dbd162f 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -99,6 +99,22 @@ typedef struct CcwDataStream { hwaddr cda; } CcwDataStream; =20 +/* + * IO instructions conclude according this. Currently we have only + * cc codes. Valid values are 0,1,2,3 and the generic semantic for + * IO instructions is described briefly. For more details consult the PoP. + */ +typedef enum IOInstEnding { + /* produced expected result */ + IOINST_CC_EXPECTED =3D 0, + /* status conditions were present or produced alternate result */ + IOINST_CC_STATUS_PRESENT =3D 1, + /* inst. ineffective because busy with previously initiated function */ + IOINST_CC_BUSY =3D 2, + /* inst. ineffective because not operational */ + IOINST_CC_NOT_OPERATIONAL =3D 3 +} IOInstEnding; + typedef struct SubchDev SubchDev; struct SubchDev { /* channel-subsystem related things: */ --=20 2.13.5 From nobody Fri May 3 23:59:36 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1508249634060910.9419663663627; Tue, 17 Oct 2017 07:13:54 -0700 (PDT) Received: from localhost ([::1]:39748 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4Scu-0004Wz-07 for importer@patchew.org; Tue, 17 Oct 2017 10:13:48 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55688) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4SUn-0006ip-An for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e4SUc-0004ax-Fh for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:25 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:52692) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e4SUc-0004ZL-7C for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:14 -0400 Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v9HE4kYI052582 for ; Tue, 17 Oct 2017 10:05:06 -0400 Received: from e06smtp14.uk.ibm.com (e06smtp14.uk.ibm.com [195.75.94.110]) by mx0a-001b2d01.pphosted.com with ESMTP id 2dnjrw28hn-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 17 Oct 2017 10:05:06 -0400 Received: from localhost by e06smtp14.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 17 Oct 2017 15:05:01 +0100 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp14.uk.ibm.com (192.168.101.144) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 17 Oct 2017 15:04:59 +0100 Received: from d06av24.portsmouth.uk.ibm.com (d06av24.portsmouth.uk.ibm.com [9.149.105.60]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v9HE4xfw26214444; Tue, 17 Oct 2017 14:04:59 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E8F224204B; Tue, 17 Oct 2017 15:00:32 +0100 (BST) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AAB4642045; Tue, 17 Oct 2017 15:00:32 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Tue, 17 Oct 2017 15:00:32 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Tue, 17 Oct 2017 16:04:49 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> References: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17101714-0016-0000-0000-000004F6AD21 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17101714-0017-0000-0000-00002831FCFB Message-Id: <20171017140453.51099-4-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-17_10:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1710170197 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 148.163.156.1 Subject: [Qemu-devel] [PATCH v3 3/7] s390x: improve error handling for SSCH and RSCH X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth , Halil Pasic , Pierre Morel , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Simplify the error handling of the SSCH and RSCH handler avoiding arbitrary and cryptic error codes being used to tell how the instruction is supposed to end. Let the code detecting the condition tell how it's to be handled in a less ambiguous way. It's best to handle SSCH and RSCH in one go as the emulation of the two shares a lot of code. For passthrough this change isn't pure refactoring, but changes the way kernel reported EFAULT is handled. After clarifying the kernel interface we decided that EFAULT shall be mapped to unit exception. Same goes for unexpected error codes and absence of required ORB flags. Signed-off-by: Halil Pasic Reviewed-by: Dong Jia Shi Tested-by: Dong Jia Shi --- hw/s390x/css.c | 84 +++++++++++++----------------------------= ---- hw/s390x/s390-ccw.c | 11 +++--- hw/vfio/ccw.c | 28 +++++++++++---- include/hw/s390x/css.h | 23 +++++++++---- include/hw/s390x/s390-ccw.h | 2 +- target/s390x/ioinst.c | 53 ++++------------------------ 6 files changed, 75 insertions(+), 126 deletions(-) diff --git a/hw/s390x/css.c b/hw/s390x/css.c index aa233d5f8a..ff5a05c34b 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1181,12 +1181,11 @@ static void sch_handle_start_func_virtual(SubchDev = *sch) =20 } =20 -static int sch_handle_start_func_passthrough(SubchDev *sch) +static IOInstEnding sch_handle_start_func_passthrough(SubchDev *sch) { =20 PMCW *p =3D &sch->curr_status.pmcw; SCSW *s =3D &sch->curr_status.scsw; - int ret; =20 ORB *orb =3D &sch->orb; if (!(s->ctrl & SCSW_ACTL_SUSP)) { @@ -1200,31 +1199,12 @@ static int sch_handle_start_func_passthrough(SubchD= ev *sch) */ if (!(orb->ctrl0 & ORB_CTRL0_MASK_PFCH) || !(orb->ctrl0 & ORB_CTRL0_MASK_C64)) { - return -EINVAL; + warn_report("vfio-ccw requires PFCH and C64 flags set..."); + sch_gen_unit_exception(sch); + css_inject_io_interrupt(sch); + return IOINST_CC_EXPECTED; } - - ret =3D s390_ccw_cmd_request(orb, s, sch->driver_data); - switch (ret) { - /* Currently we don't update control block and just return the cc code= . */ - case 0: - break; - case -EBUSY: - break; - case -ENODEV: - break; - case -EACCES: - /* Let's reflect an inaccessible host device by cc 3. */ - ret =3D -ENODEV; - break; - default: - /* - * All other return codes will trigger a program check, - * or set cc to 1. - */ - break; - }; - - return ret; + return s390_ccw_cmd_request(sch); } =20 /* @@ -1233,7 +1213,7 @@ static int sch_handle_start_func_passthrough(SubchDev= *sch) * read/writes) asynchronous later on if we start supporting more than * our current very simple devices. */ -int do_subchannel_work_virtual(SubchDev *sch) +IOInstEnding do_subchannel_work_virtual(SubchDev *sch) { =20 SCSW *s =3D &sch->curr_status.scsw; @@ -1247,12 +1227,12 @@ int do_subchannel_work_virtual(SubchDev *sch) sch_handle_start_func_virtual(sch); } css_inject_io_interrupt(sch); - return 0; + /* inst must succeed if this func is called */ + return IOINST_CC_EXPECTED; } =20 -int do_subchannel_work_passthrough(SubchDev *sch) +IOInstEnding do_subchannel_work_passthrough(SubchDev *sch) { - int ret =3D 0; SCSW *s =3D &sch->curr_status.scsw; =20 if (s->ctrl & SCSW_FCTL_CLEAR_FUNC) { @@ -1262,16 +1242,15 @@ int do_subchannel_work_passthrough(SubchDev *sch) /* TODO: Halt handling */ sch_handle_halt_func(sch); } else if (s->ctrl & SCSW_FCTL_START_FUNC) { - ret =3D sch_handle_start_func_passthrough(sch); + return sch_handle_start_func_passthrough(sch); } - - return ret; + return IOINST_CC_EXPECTED; } =20 -static int do_subchannel_work(SubchDev *sch) +static IOInstEnding do_subchannel_work(SubchDev *sch) { if (!sch->do_subchannel_work) { - return -EINVAL; + return IOINST_CC_STATUS_PRESENT; } g_assert(sch->curr_status.scsw.ctrl & SCSW_CTRL_MASK_FCTL); return sch->do_subchannel_work(sch); @@ -1561,27 +1540,23 @@ static void css_update_chnmon(SubchDev *sch) } } =20 -int css_do_ssch(SubchDev *sch, ORB *orb) +IOInstEnding css_do_ssch(SubchDev *sch, ORB *orb) { SCSW *s =3D &sch->curr_status.scsw; PMCW *p =3D &sch->curr_status.pmcw; - int ret; =20 if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) { - ret =3D -ENODEV; - goto out; + return IOINST_CC_NOT_OPERATIONAL; } =20 if (s->ctrl & SCSW_STCTL_STATUS_PEND) { - ret =3D -EINPROGRESS; - goto out; + return IOINST_CC_STATUS_PRESENT; } =20 if (s->ctrl & (SCSW_FCTL_START_FUNC | SCSW_FCTL_HALT_FUNC | SCSW_FCTL_CLEAR_FUNC)) { - ret =3D -EBUSY; - goto out; + return IOINST_CC_BUSY; } =20 /* If monitoring is active, update counter. */ @@ -1594,10 +1569,7 @@ int css_do_ssch(SubchDev *sch, ORB *orb) s->ctrl |=3D (SCSW_FCTL_START_FUNC | SCSW_ACTL_START_PEND); s->flags &=3D ~SCSW_FLAGS_MASK_PNO; =20 - ret =3D do_subchannel_work(sch); - -out: - return ret; + return do_subchannel_work(sch); } =20 static void copy_irb_to_guest(IRB *dest, const IRB *src, PMCW *pmcw, @@ -1844,27 +1816,23 @@ void css_do_schm(uint8_t mbk, int update, int dct, = uint64_t mbo) } } =20 -int css_do_rsch(SubchDev *sch) +IOInstEnding css_do_rsch(SubchDev *sch) { SCSW *s =3D &sch->curr_status.scsw; PMCW *p =3D &sch->curr_status.pmcw; - int ret; =20 if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) { - ret =3D -ENODEV; - goto out; + return IOINST_CC_NOT_OPERATIONAL; } =20 if (s->ctrl & SCSW_STCTL_STATUS_PEND) { - ret =3D -EINPROGRESS; - goto out; + return IOINST_CC_STATUS_PRESENT; } =20 if (((s->ctrl & SCSW_CTRL_MASK_FCTL) !=3D SCSW_FCTL_START_FUNC) || (s->ctrl & SCSW_ACTL_RESUME_PEND) || (!(s->ctrl & SCSW_ACTL_SUSP))) { - ret =3D -EINVAL; - goto out; + return IOINST_CC_BUSY; } =20 /* If monitoring is active, update counter. */ @@ -1873,11 +1841,7 @@ int css_do_rsch(SubchDev *sch) } =20 s->ctrl |=3D SCSW_ACTL_RESUME_PEND; - do_subchannel_work(sch); - ret =3D 0; - -out: - return ret; + return do_subchannel_work(sch); } =20 int css_do_rchp(uint8_t cssid, uint8_t chpid) diff --git a/hw/s390x/s390-ccw.c b/hw/s390x/s390-ccw.c index 8614dda6f8..0ef232ec27 100644 --- a/hw/s390x/s390-ccw.c +++ b/hw/s390x/s390-ccw.c @@ -18,15 +18,14 @@ #include "hw/s390x/css-bridge.h" #include "hw/s390x/s390-ccw.h" =20 -int s390_ccw_cmd_request(ORB *orb, SCSW *scsw, void *data) +IOInstEnding s390_ccw_cmd_request(SubchDev *sch) { - S390CCWDeviceClass *cdc =3D S390_CCW_DEVICE_GET_CLASS(data); + S390CCWDeviceClass *cdc =3D S390_CCW_DEVICE_GET_CLASS(sch->driver_data= ); =20 - if (cdc->handle_request) { - return cdc->handle_request(orb, scsw, data); - } else { - return -ENOSYS; + if (!cdc->handle_request) { + return IOINST_CC_STATUS_PRESENT; } + return cdc->handle_request(sch); } =20 static void s390_ccw_get_dev_info(S390CCWDevice *cdev, diff --git a/hw/vfio/ccw.c b/hw/vfio/ccw.c index 76323c6bde..1cc2e5d873 100644 --- a/hw/vfio/ccw.c +++ b/hw/vfio/ccw.c @@ -47,9 +47,9 @@ struct VFIODeviceOps vfio_ccw_ops =3D { .vfio_compute_needs_reset =3D vfio_ccw_compute_needs_reset, }; =20 -static int vfio_ccw_handle_request(ORB *orb, SCSW *scsw, void *data) +static IOInstEnding vfio_ccw_handle_request(SubchDev *sch) { - S390CCWDevice *cdev =3D data; + S390CCWDevice *cdev =3D sch->driver_data; VFIOCCWDevice *vcdev =3D DO_UPCAST(VFIOCCWDevice, cdev, cdev); struct ccw_io_region *region =3D vcdev->io_region; int ret; @@ -60,8 +60,8 @@ static int vfio_ccw_handle_request(ORB *orb, SCSW *scsw, = void *data) =20 memset(region, 0, sizeof(*region)); =20 - memcpy(region->orb_area, orb, sizeof(ORB)); - memcpy(region->scsw_area, scsw, sizeof(SCSW)); + memcpy(region->orb_area, &sch->orb, sizeof(ORB)); + memcpy(region->scsw_area, &sch->curr_status.scsw, sizeof(SCSW)); =20 again: ret =3D pwrite(vcdev->vdev.fd, region, @@ -71,10 +71,24 @@ again: goto again; } error_report("vfio-ccw: wirte I/O region failed with errno=3D%d", = errno); - return -errno; + ret =3D -errno; + } else { + ret =3D region->ret_code; + } + switch (-ret) { + case 0: + return IOINST_CC_EXPECTED; + case EBUSY: + return IOINST_CC_BUSY; + case ENODEV: + case EACCES: + return IOINST_CC_NOT_OPERATIONAL; + case EFAULT: + default: + sch_gen_unit_exception(sch); + css_inject_io_interrupt(sch); + return IOINST_CC_EXPECTED; } - - return region->ret_code; } =20 static void vfio_ccw_reset(DeviceState *dev) diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h index 7e0dbd162f..10bde18452 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -136,11 +136,22 @@ struct SubchDev { /* transport-provided data: */ int (*ccw_cb) (SubchDev *, CCW1); void (*disable_cb)(SubchDev *); - int (*do_subchannel_work) (SubchDev *); + IOInstEnding (*do_subchannel_work) (SubchDev *); SenseId id; void *driver_data; }; =20 +static inline void sch_gen_unit_exception(SubchDev *sch) +{ + sch->curr_status.scsw.ctrl &=3D ~SCSW_ACTL_START_PEND; + sch->curr_status.scsw.ctrl |=3D SCSW_STCTL_PRIMARY | + SCSW_STCTL_SECONDARY | + SCSW_STCTL_ALERT | + SCSW_STCTL_STATUS_PEND; + sch->curr_status.scsw.cpa =3D sch->channel_prog + 8; + sch->curr_status.scsw.dstat =3D SCSW_DSTAT_UNIT_EXCEP; +} + extern const VMStateDescription vmstate_subch_dev; =20 /* @@ -199,9 +210,9 @@ void css_generate_sch_crws(uint8_t cssid, uint8_t ssid,= uint16_t schid, void css_generate_chp_crws(uint8_t cssid, uint8_t chpid); void css_generate_css_crws(uint8_t cssid); void css_clear_sei_pending(void); -int s390_ccw_cmd_request(ORB *orb, SCSW *scsw, void *data); -int do_subchannel_work_virtual(SubchDev *sub); -int do_subchannel_work_passthrough(SubchDev *sub); +IOInstEnding s390_ccw_cmd_request(SubchDev *sch); +IOInstEnding do_subchannel_work_virtual(SubchDev *sub); +IOInstEnding do_subchannel_work_passthrough(SubchDev *sub); =20 typedef enum { CSS_IO_ADAPTER_VIRTIO =3D 0, @@ -232,7 +243,7 @@ int css_do_msch(SubchDev *sch, const SCHIB *schib); int css_do_xsch(SubchDev *sch); int css_do_csch(SubchDev *sch); int css_do_hsch(SubchDev *sch); -int css_do_ssch(SubchDev *sch, ORB *orb); +IOInstEnding css_do_ssch(SubchDev *sch, ORB *orb); int css_do_tsch_get_irb(SubchDev *sch, IRB *irb, int *irb_len); void css_do_tsch_update_subch(SubchDev *sch); int css_do_stcrw(CRW *crw); @@ -243,7 +254,7 @@ int css_collect_chp_desc(int m, uint8_t cssid, uint8_t = f_chpid, uint8_t l_chpid, void css_do_schm(uint8_t mbk, int update, int dct, uint64_t mbo); int css_enable_mcsse(void); int css_enable_mss(void); -int css_do_rsch(SubchDev *sch); +IOInstEnding css_do_rsch(SubchDev *sch); int css_do_rchp(uint8_t cssid, uint8_t chpid); bool css_present(uint8_t cssid); #endif diff --git a/include/hw/s390x/s390-ccw.h b/include/hw/s390x/s390-ccw.h index 9f45cf1347..7d15a1a5d4 100644 --- a/include/hw/s390x/s390-ccw.h +++ b/include/hw/s390x/s390-ccw.h @@ -33,7 +33,7 @@ typedef struct S390CCWDeviceClass { CCWDeviceClass parent_class; void (*realize)(S390CCWDevice *dev, char *sysfsdev, Error **errp); void (*unrealize)(S390CCWDevice *dev, Error **errp); - int (*handle_request) (ORB *, SCSW *, void *); + IOInstEnding (*handle_request) (SubchDev *sch); } S390CCWDeviceClass; =20 #endif diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c index 47490f838a..16b5cf2fed 100644 --- a/target/s390x/ioinst.c +++ b/target/s390x/ioinst.c @@ -218,8 +218,6 @@ void ioinst_handle_ssch(S390CPU *cpu, uint64_t reg1, ui= nt32_t ipb) SubchDev *sch; ORB orig_orb, orb; uint64_t addr; - int ret =3D -ENODEV; - int cc; CPUS390XState *env =3D &cpu->env; uint8_t ar; =20 @@ -239,33 +237,11 @@ void ioinst_handle_ssch(S390CPU *cpu, uint64_t reg1, = uint32_t ipb) } trace_ioinst_sch_id("ssch", cssid, ssid, schid); sch =3D css_find_subch(m, cssid, ssid, schid); - if (sch && css_subch_visible(sch)) { - ret =3D css_do_ssch(sch, &orb); - } - switch (ret) { - case -ENODEV: - cc =3D 3; - break; - case -EBUSY: - cc =3D 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); + if (!sch || !css_subch_visible(sch)) { + setcc(cpu, 3); return; - case 0: - cc =3D 0; - break; - default: - cc =3D 1; - break; } - setcc(cpu, cc); + setcc(cpu, css_do_ssch(sch, &orb)); } =20 void ioinst_handle_stcrw(S390CPU *cpu, uint32_t ipb) @@ -784,8 +760,6 @@ void ioinst_handle_rsch(S390CPU *cpu, uint64_t reg1) { int cssid, ssid, schid, m; SubchDev *sch; - int ret =3D -ENODEV; - int cc; =20 if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) { program_interrupt(&cpu->env, PGM_OPERAND, 4); @@ -793,24 +767,11 @@ void ioinst_handle_rsch(S390CPU *cpu, uint64_t reg1) } trace_ioinst_sch_id("rsch", cssid, ssid, schid); sch =3D css_find_subch(m, cssid, ssid, schid); - if (sch && css_subch_visible(sch)) { - ret =3D css_do_rsch(sch); - } - switch (ret) { - case -ENODEV: - cc =3D 3; - break; - case -EINVAL: - cc =3D 2; - break; - case 0: - cc =3D 0; - break; - default: - cc =3D 1; - break; + if (!sch || !css_subch_visible(sch)) { + setcc(cpu, 3); + return; } - setcc(cpu, cc); + setcc(cpu, css_do_rsch(sch)); } =20 #define RCHP_REG1_RES(_reg) (_reg & 0x00000000ff00ff00) --=20 2.13.5 From nobody Fri May 3 23:59:36 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1508249517332799.1921002097334; Tue, 17 Oct 2017 07:11:57 -0700 (PDT) Received: from localhost ([::1]:39743 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4Sb1-00031T-DW for importer@patchew.org; Tue, 17 Oct 2017 10:11:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55590) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4SUe-0006bT-L2 for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e4SUY-0004XM-L1 for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:16 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:33576) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e4SUY-0004Wx-CY for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:10 -0400 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v9HE4ngl050545 for ; Tue, 17 Oct 2017 10:05:06 -0400 Received: from e06smtp10.uk.ibm.com (e06smtp10.uk.ibm.com [195.75.94.106]) by mx0a-001b2d01.pphosted.com with ESMTP id 2dnen1ph12-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 17 Oct 2017 10:05:06 -0400 Received: from localhost by e06smtp10.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 17 Oct 2017 15:05:03 +0100 Received: from b06cxnps4074.portsmouth.uk.ibm.com (9.149.109.196) by e06smtp10.uk.ibm.com (192.168.101.140) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 17 Oct 2017 15:05:00 +0100 Received: from d06av24.portsmouth.uk.ibm.com (mk.ibm.com [9.149.105.60]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v9HE50fp27590872; Tue, 17 Oct 2017 14:05:00 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 31FE442042; Tue, 17 Oct 2017 15:00:34 +0100 (BST) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F35FA42041; Tue, 17 Oct 2017 15:00:33 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Tue, 17 Oct 2017 15:00:33 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Tue, 17 Oct 2017 16:04:50 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> References: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17101714-0040-0000-0000-000003E3ABEE X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17101714-0041-0000-0000-000025E5F649 Message-Id: <20171017140453.51099-5-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-17_10:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1710170197 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 148.163.156.1 Subject: [Qemu-devel] [PATCH v3 4/7] s390x: refactor error handling for XSCH handler X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth , Halil Pasic , Pierre Morel , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Simplify the error handling of the XSCH. Let the code detecting the condition tell (in a less ambiguous way) how it's to be handled. No changes in behavior. Signed-off-by: Halil Pasic Reviewed-by: Dong Jia Shi Reviewed-by: Thomas Huth Tested-by: Dong Jia Shi --- hw/s390x/css.c | 17 +++++------------ include/hw/s390x/css.h | 2 +- target/s390x/ioinst.c | 23 ++++------------------- 3 files changed, 10 insertions(+), 32 deletions(-) diff --git a/hw/s390x/css.c b/hw/s390x/css.c index ff5a05c34b..1b3be7729d 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1402,20 +1402,17 @@ out: return ret; } =20 -int css_do_xsch(SubchDev *sch) +IOInstEnding css_do_xsch(SubchDev *sch) { SCSW *s =3D &sch->curr_status.scsw; PMCW *p =3D &sch->curr_status.pmcw; - int ret; =20 if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) { - ret =3D -ENODEV; - goto out; + return IOINST_CC_NOT_OPERATIONAL; } =20 if (s->ctrl & SCSW_CTRL_MASK_STCTL) { - ret =3D -EINPROGRESS; - goto out; + return IOINST_CC_STATUS_PRESENT; } =20 if (!(s->ctrl & SCSW_CTRL_MASK_FCTL) || @@ -1423,8 +1420,7 @@ int css_do_xsch(SubchDev *sch) (!(s->ctrl & (SCSW_ACTL_RESUME_PEND | SCSW_ACTL_START_PEND | SCSW_ACTL_SUSP)= )) || (s->ctrl & SCSW_ACTL_SUBCH_ACTIVE)) { - ret =3D -EBUSY; - goto out; + return IOINST_CC_BUSY; } =20 /* Cancel the current operation. */ @@ -1436,10 +1432,7 @@ int css_do_xsch(SubchDev *sch) sch->last_cmd_valid =3D false; s->dstat =3D 0; s->cstat =3D 0; - ret =3D 0; - -out: - return ret; + return IOINST_CC_EXPECTED; } =20 int css_do_csch(SubchDev *sch) diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h index 10bde18452..3c319c9096 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -240,7 +240,7 @@ void css_conditional_io_interrupt(SubchDev *sch); int css_do_stsch(SubchDev *sch, SCHIB *schib); bool css_schid_final(int m, uint8_t cssid, uint8_t ssid, uint16_t schid); int css_do_msch(SubchDev *sch, const SCHIB *schib); -int css_do_xsch(SubchDev *sch); +IOInstEnding css_do_xsch(SubchDev *sch); int css_do_csch(SubchDev *sch); int css_do_hsch(SubchDev *sch); IOInstEnding css_do_ssch(SubchDev *sch, ORB *orb); diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c index 16b5cf2fed..4ad07e9181 100644 --- a/target/s390x/ioinst.c +++ b/target/s390x/ioinst.c @@ -42,8 +42,6 @@ void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1) { int cssid, ssid, schid, m; SubchDev *sch; - int ret =3D -ENODEV; - int cc; =20 if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) { program_interrupt(&cpu->env, PGM_OPERAND, 4); @@ -51,24 +49,11 @@ void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1) } trace_ioinst_sch_id("xsch", cssid, ssid, schid); sch =3D css_find_subch(m, cssid, ssid, schid); - if (sch && css_subch_visible(sch)) { - ret =3D css_do_xsch(sch); - } - switch (ret) { - case -ENODEV: - cc =3D 3; - break; - case -EBUSY: - cc =3D 2; - break; - case 0: - cc =3D 0; - break; - default: - cc =3D 1; - break; + if (!sch || !css_subch_visible(sch)) { + setcc(cpu, 3); + return; } - setcc(cpu, cc); + setcc(cpu, css_do_xsch(sch)); } =20 void ioinst_handle_csch(S390CPU *cpu, uint64_t reg1) --=20 2.13.5 From nobody Fri May 3 23:59:36 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 150824935109571.49930750329338; Tue, 17 Oct 2017 07:09:11 -0700 (PDT) Received: from localhost ([::1]:39724 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4SYJ-0000pt-6H for importer@patchew.org; Tue, 17 Oct 2017 10:09:03 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55578) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4SUd-0006ag-OI for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e4SUX-0004Ww-OG for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:15 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:35748 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e4SUX-0004Wl-Ib for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:09 -0400 Received: from pps.filterd (m0098413.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v9HE4jLS020996 for ; Tue, 17 Oct 2017 10:05:06 -0400 Received: from e06smtp12.uk.ibm.com (e06smtp12.uk.ibm.com [195.75.94.108]) by mx0b-001b2d01.pphosted.com with ESMTP id 2dnfuwj2jc-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 17 Oct 2017 10:05:06 -0400 Received: from localhost by e06smtp12.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 17 Oct 2017 15:05:04 +0100 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp12.uk.ibm.com (192.168.101.142) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 17 Oct 2017 15:05:02 +0100 Received: from d06av24.portsmouth.uk.ibm.com (d06av24.portsmouth.uk.ibm.com [9.149.105.60]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v9HE51vv22413434; Tue, 17 Oct 2017 14:05:01 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 72EA142042; Tue, 17 Oct 2017 15:00:35 +0100 (BST) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3E74742041; Tue, 17 Oct 2017 15:00:35 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Tue, 17 Oct 2017 15:00:35 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Tue, 17 Oct 2017 16:04:51 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> References: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17101714-0008-0000-0000-000004A0AF89 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17101714-0009-0000-0000-00001E32F813 Message-Id: <20171017140453.51099-6-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-17_10:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1710170197 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 148.163.158.5 Subject: [Qemu-devel] [PATCH v3 5/7] s390x: refactor error handling for CSCH handler X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth , Halil Pasic , Pierre Morel , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Simplify the error handling of the cSCH. Let the code detecting the condition tell (in a less ambiguous way) how it's to be handled. No changes in behavior. Signed-off-by: Halil Pasic Reviewed-by: Dong Jia Shi Reviewed-by: Thomas Huth Tested-by: Dong Jia Shi --- hw/s390x/css.c | 12 +++--------- include/hw/s390x/css.h | 2 +- target/s390x/ioinst.c | 14 ++++---------- 3 files changed, 8 insertions(+), 20 deletions(-) diff --git a/hw/s390x/css.c b/hw/s390x/css.c index 1b3be7729d..9935d48b72 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1435,26 +1435,20 @@ IOInstEnding css_do_xsch(SubchDev *sch) return IOINST_CC_EXPECTED; } =20 -int css_do_csch(SubchDev *sch) +IOInstEnding css_do_csch(SubchDev *sch) { SCSW *s =3D &sch->curr_status.scsw; PMCW *p =3D &sch->curr_status.pmcw; - int ret; =20 if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) { - ret =3D -ENODEV; - goto out; + return IOINST_CC_NOT_OPERATIONAL; } =20 /* Trigger the clear function. */ s->ctrl &=3D ~(SCSW_CTRL_MASK_FCTL | SCSW_CTRL_MASK_ACTL); s->ctrl |=3D SCSW_FCTL_CLEAR_FUNC | SCSW_ACTL_CLEAR_PEND; =20 - do_subchannel_work(sch); - ret =3D 0; - -out: - return ret; + return do_subchannel_work(sch); } =20 int css_do_hsch(SubchDev *sch) diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h index 3c319c9096..f38c59c9b7 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -241,7 +241,7 @@ int css_do_stsch(SubchDev *sch, SCHIB *schib); bool css_schid_final(int m, uint8_t cssid, uint8_t ssid, uint16_t schid); int css_do_msch(SubchDev *sch, const SCHIB *schib); IOInstEnding css_do_xsch(SubchDev *sch); -int css_do_csch(SubchDev *sch); +IOInstEnding css_do_csch(SubchDev *sch); int css_do_hsch(SubchDev *sch); IOInstEnding css_do_ssch(SubchDev *sch, ORB *orb); int css_do_tsch_get_irb(SubchDev *sch, IRB *irb, int *irb_len); diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c index 4ad07e9181..fd659e77a5 100644 --- a/target/s390x/ioinst.c +++ b/target/s390x/ioinst.c @@ -60,8 +60,6 @@ void ioinst_handle_csch(S390CPU *cpu, uint64_t reg1) { int cssid, ssid, schid, m; SubchDev *sch; - int ret =3D -ENODEV; - int cc; =20 if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) { program_interrupt(&cpu->env, PGM_OPERAND, 4); @@ -69,15 +67,11 @@ void ioinst_handle_csch(S390CPU *cpu, uint64_t reg1) } trace_ioinst_sch_id("csch", cssid, ssid, schid); sch =3D css_find_subch(m, cssid, ssid, schid); - if (sch && css_subch_visible(sch)) { - ret =3D css_do_csch(sch); - } - if (ret =3D=3D -ENODEV) { - cc =3D 3; - } else { - cc =3D 0; + if (!sch || !css_subch_visible(sch)) { + setcc(cpu, 3); + return; } - setcc(cpu, cc); + setcc(cpu, css_do_csch(sch)); } =20 void ioinst_handle_hsch(S390CPU *cpu, uint64_t reg1) --=20 2.13.5 From nobody Fri May 3 23:59:36 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1508249750269347.9022755352463; Tue, 17 Oct 2017 07:15:50 -0700 (PDT) Received: from localhost ([::1]:39759 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4Sem-000618-BX for importer@patchew.org; Tue, 17 Oct 2017 10:15:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55915) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4SVT-0007I3-7c for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:06:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e4SVN-00053m-91 for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:06:07 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:53498 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e4SVN-00053Z-2H for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:06:01 -0400 Received: from pps.filterd (m0098421.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v9HE5dO9126713 for ; Tue, 17 Oct 2017 10:05:56 -0400 Received: from e06smtp11.uk.ibm.com (e06smtp11.uk.ibm.com [195.75.94.107]) by mx0a-001b2d01.pphosted.com with ESMTP id 2dnk890b2j-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 17 Oct 2017 10:05:54 -0400 Received: from localhost by e06smtp11.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 17 Oct 2017 15:05:05 +0100 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp11.uk.ibm.com (192.168.101.141) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 17 Oct 2017 15:05:03 +0100 Received: from d06av24.portsmouth.uk.ibm.com (mk.ibm.com [9.149.105.60]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v9HE52ja11010216; Tue, 17 Oct 2017 14:05:02 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B4D8D42041; Tue, 17 Oct 2017 15:00:36 +0100 (BST) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7D8124203F; Tue, 17 Oct 2017 15:00:36 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Tue, 17 Oct 2017 15:00:36 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Tue, 17 Oct 2017 16:04:52 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> References: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17101714-0040-0000-0000-00000403AD52 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17101714-0041-0000-0000-000020A5F84A Message-Id: <20171017140453.51099-7-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-17_10:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1710170197 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 148.163.158.5 Subject: [Qemu-devel] [PATCH v3 6/7] s390x: refactor error handling for HSCH handler X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth , Halil Pasic , Pierre Morel , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Simplify the error handling of the HSCH. Let the code detecting the condition tell (in a less ambiguous way) how it's to be handled. No changes in behavior. Signed-off-by: Halil Pasic Reviewed-by: Dong Jia Shi Reviewed-by: Thomas Huth Tested-by: Dong Jia Shi --- hw/s390x/css.c | 18 +++++------------- include/hw/s390x/css.h | 2 +- target/s390x/ioinst.c | 23 ++++------------------- 3 files changed, 10 insertions(+), 33 deletions(-) diff --git a/hw/s390x/css.c b/hw/s390x/css.c index 9935d48b72..b9e0329825 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1451,28 +1451,24 @@ IOInstEnding css_do_csch(SubchDev *sch) return do_subchannel_work(sch); } =20 -int css_do_hsch(SubchDev *sch) +IOInstEnding css_do_hsch(SubchDev *sch) { SCSW *s =3D &sch->curr_status.scsw; PMCW *p =3D &sch->curr_status.pmcw; - int ret; =20 if (~(p->flags) & (PMCW_FLAGS_MASK_DNV | PMCW_FLAGS_MASK_ENA)) { - ret =3D -ENODEV; - goto out; + return IOINST_CC_NOT_OPERATIONAL; } =20 if (((s->ctrl & SCSW_CTRL_MASK_STCTL) =3D=3D SCSW_STCTL_STATUS_PEND) || (s->ctrl & (SCSW_STCTL_PRIMARY | SCSW_STCTL_SECONDARY | SCSW_STCTL_ALERT))) { - ret =3D -EINPROGRESS; - goto out; + return IOINST_CC_STATUS_PRESENT; } =20 if (s->ctrl & (SCSW_FCTL_HALT_FUNC | SCSW_FCTL_CLEAR_FUNC)) { - ret =3D -EBUSY; - goto out; + return IOINST_CC_BUSY; } =20 /* Trigger the halt function. */ @@ -1485,11 +1481,7 @@ int css_do_hsch(SubchDev *sch) } s->ctrl |=3D SCSW_ACTL_HALT_PEND; =20 - do_subchannel_work(sch); - ret =3D 0; - -out: - return ret; + return do_subchannel_work(sch); } =20 static void css_update_chnmon(SubchDev *sch) diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h index f38c59c9b7..0c1efbae39 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -242,7 +242,7 @@ bool css_schid_final(int m, uint8_t cssid, uint8_t ssid= , uint16_t schid); int css_do_msch(SubchDev *sch, const SCHIB *schib); IOInstEnding css_do_xsch(SubchDev *sch); IOInstEnding css_do_csch(SubchDev *sch); -int css_do_hsch(SubchDev *sch); +IOInstEnding css_do_hsch(SubchDev *sch); IOInstEnding css_do_ssch(SubchDev *sch, ORB *orb); int css_do_tsch_get_irb(SubchDev *sch, IRB *irb, int *irb_len); void css_do_tsch_update_subch(SubchDev *sch); 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 =3D -ENODEV; - int cc; =20 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 =3D css_find_subch(m, cssid, ssid, schid); - if (sch && css_subch_visible(sch)) { - ret =3D css_do_hsch(sch); - } - switch (ret) { - case -ENODEV: - cc =3D 3; - break; - case -EBUSY: - cc =3D 2; - break; - case 0: - cc =3D 0; - break; - default: - cc =3D 1; - break; + if (!sch || !css_subch_visible(sch)) { + setcc(cpu, 3); + return; } - setcc(cpu, cc); + setcc(cpu, css_do_hsch(sch)); } =20 static int ioinst_schib_valid(SCHIB *schib) --=20 2.13.5 From nobody Fri May 3 23:59:36 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 150824939504169.62916720544297; Tue, 17 Oct 2017 07:09:55 -0700 (PDT) Received: from localhost ([::1]:39727 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4SZ3-0001UO-6C for importer@patchew.org; Tue, 17 Oct 2017 10:09:49 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55635) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1e4SUj-0006fg-7C for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1e4SUd-0004cP-5c for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:21 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:54284 helo=mx0a-001b2d01.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1e4SUd-0004bF-0k for qemu-devel@nongnu.org; Tue, 17 Oct 2017 10:05:15 -0400 Received: from pps.filterd (m0098414.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v9HE4kDo087133 for ; Tue, 17 Oct 2017 10:05:10 -0400 Received: from e06smtp14.uk.ibm.com (e06smtp14.uk.ibm.com [195.75.94.110]) by mx0b-001b2d01.pphosted.com with ESMTP id 2dnjcp3pat-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Tue, 17 Oct 2017 10:05:09 -0400 Received: from localhost by e06smtp14.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 17 Oct 2017 15:05:07 +0100 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp14.uk.ibm.com (192.168.101.144) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Tue, 17 Oct 2017 15:05:04 +0100 Received: from d06av24.portsmouth.uk.ibm.com (d06av24.portsmouth.uk.ibm.com [9.149.105.60]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v9HE54Dh22610130; Tue, 17 Oct 2017 14:05:04 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 00C8C42045; Tue, 17 Oct 2017 15:00:38 +0100 (BST) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BEF1742049; Tue, 17 Oct 2017 15:00:37 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Tue, 17 Oct 2017 15:00:37 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Tue, 17 Oct 2017 16:04:53 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> References: <20171017140453.51099-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17101714-0016-0000-0000-000004F6AD25 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17101714-0017-0000-0000-00002831FCFE Message-Id: <20171017140453.51099-8-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-17_10:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1710170197 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy] X-Received-From: 148.163.158.5 Subject: [Qemu-devel] [PATCH v3 7/7] s390x: refactor error handling for MSCH handler X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth , Halil Pasic , Pierre Morel , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Simplify the error handling of the MSCH. Let the code detecting the condition tell (in a less ambiguous way) how it's to be handled. No changes in behavior. Signed-off-by: Halil Pasic Reviewed-by: Dong Jia Shi Tested-by: Dong Jia Shi --- hw/s390x/css.c | 18 +++++------------- include/hw/s390x/css.h | 2 +- target/s390x/ioinst.c | 23 ++++------------------- 3 files changed, 10 insertions(+), 33 deletions(-) diff --git a/hw/s390x/css.c b/hw/s390x/css.c index b9e0329825..30fc236946 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1347,28 +1347,24 @@ static void copy_schib_from_guest(SCHIB *dest, cons= t SCHIB *src) } } =20 -int css_do_msch(SubchDev *sch, const SCHIB *orig_schib) +IOInstEnding css_do_msch(SubchDev *sch, const SCHIB *orig_schib) { SCSW *s =3D &sch->curr_status.scsw; PMCW *p =3D &sch->curr_status.pmcw; uint16_t oldflags; - int ret; SCHIB schib; =20 if (!(sch->curr_status.pmcw.flags & PMCW_FLAGS_MASK_DNV)) { - ret =3D 0; - goto out; + return IOINST_CC_EXPECTED; } =20 if (s->ctrl & SCSW_STCTL_STATUS_PEND) { - ret =3D -EINPROGRESS; - goto out; + return IOINST_CC_STATUS_PRESENT; } =20 if (s->ctrl & (SCSW_FCTL_START_FUNC|SCSW_FCTL_HALT_FUNC|SCSW_FCTL_CLEAR_FUNC)) { - ret =3D -EBUSY; - goto out; + return IOINST_CC_STATUS_PRESENT; } =20 copy_schib_from_guest(&schib, orig_schib); @@ -1395,11 +1391,7 @@ int css_do_msch(SubchDev *sch, const SCHIB *orig_sch= ib) && (p->flags & PMCW_FLAGS_MASK_ENA) =3D=3D 0) { sch->disable_cb(sch); } - - ret =3D 0; - -out: - return ret; + return IOINST_CC_EXPECTED; } =20 IOInstEnding css_do_xsch(SubchDev *sch) diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h index 0c1efbae39..a74f6cc274 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -239,7 +239,7 @@ bool css_subch_visible(SubchDev *sch); void css_conditional_io_interrupt(SubchDev *sch); int css_do_stsch(SubchDev *sch, SCHIB *schib); bool css_schid_final(int m, uint8_t cssid, uint8_t ssid, uint16_t schid); -int css_do_msch(SubchDev *sch, const SCHIB *schib); +IOInstEnding css_do_msch(SubchDev *sch, const SCHIB *schib); IOInstEnding css_do_xsch(SubchDev *sch); IOInstEnding css_do_csch(SubchDev *sch); IOInstEnding css_do_hsch(SubchDev *sch); diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c index 8e4dacafd8..23962fbebc 100644 --- a/target/s390x/ioinst.c +++ b/target/s390x/ioinst.c @@ -111,8 +111,6 @@ void ioinst_handle_msch(S390CPU *cpu, uint64_t reg1, ui= nt32_t ipb) SubchDev *sch; SCHIB schib; uint64_t addr; - int ret =3D -ENODEV; - int cc; CPUS390XState *env =3D &cpu->env; uint8_t ar; =20 @@ -131,24 +129,11 @@ void ioinst_handle_msch(S390CPU *cpu, uint64_t reg1, = uint32_t ipb) } trace_ioinst_sch_id("msch", cssid, ssid, schid); sch =3D css_find_subch(m, cssid, ssid, schid); - if (sch && css_subch_visible(sch)) { - ret =3D css_do_msch(sch, &schib); - } - switch (ret) { - case -ENODEV: - cc =3D 3; - break; - case -EBUSY: - cc =3D 2; - break; - case 0: - cc =3D 0; - break; - default: - cc =3D 1; - break; + if (!sch || !css_subch_visible(sch)) { + setcc(cpu, 3); + return; } - setcc(cpu, cc); + setcc(cpu, css_do_msch(sch, &schib)); } =20 static void copy_orb_from_guest(ORB *dest, const ORB *src) --=20 2.13.5