From nobody Mon May 6 19:12:41 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 1507131991219731.5654764301233; Wed, 4 Oct 2017 08:46:31 -0700 (PDT) Received: from localhost ([::1]:35727 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzlsN-0005mN-Nm for importer@patchew.org; Wed, 04 Oct 2017 11:46:23 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37149) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzloD-00027h-4A for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dzlo7-0003Le-Hd for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:05 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:53558 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 1dzlo7-0003Kt-CG for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:41:59 -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 v94FdbTB139038 for ; Wed, 4 Oct 2017 11:41:53 -0400 Received: from e06smtp15.uk.ibm.com (e06smtp15.uk.ibm.com [195.75.94.111]) by mx0b-001b2d01.pphosted.com with ESMTP id 2dd0qef8vg-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 04 Oct 2017 11:41:52 -0400 Received: from localhost by e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 4 Oct 2017 16:41:51 +0100 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp15.uk.ibm.com (192.168.101.145) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 4 Oct 2017 16:41:49 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v94Ffn9m16777338; Wed, 4 Oct 2017 15:41:49 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B5B374C044; Wed, 4 Oct 2017 16:37:54 +0100 (BST) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8298F4C040; Wed, 4 Oct 2017 16:37:54 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 4 Oct 2017 16:37:54 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Wed, 4 Oct 2017 17:41:37 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> References: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17100415-0020-0000-0000-000003BD60FD X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17100415-0021-0000-0000-0000424FB29B Message-Id: <20171004154144.88995-2-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-04_07:, , 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-1710040220 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 v2 1/8] 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: Dong Jia Shi --- 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 c59be1aad1..4f47dbc8b0 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1067,9 +1067,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; @@ -1077,22 +1074,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; @@ -1100,11 +1092,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 Mon May 6 19:12:41 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 15071318448271011.253218723285; Wed, 4 Oct 2017 08:44:04 -0700 (PDT) Received: from localhost ([::1]:35712 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzlq3-0003P5-3s for importer@patchew.org; Wed, 04 Oct 2017 11:43:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37101) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzlo9-00026c-49 for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dzlo5-0003It-UW for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:01 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:45980) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dzlo5-0003Hn-Mf for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:41:57 -0400 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v94FeqwV037353 for ; Wed, 4 Oct 2017 11:41:56 -0400 Received: from e06smtp12.uk.ibm.com (e06smtp12.uk.ibm.com [195.75.94.108]) by mx0a-001b2d01.pphosted.com with ESMTP id 2dcyft4c8u-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 04 Oct 2017 11:41:56 -0400 Received: from localhost by e06smtp12.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 4 Oct 2017 16:41:54 +0100 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp12.uk.ibm.com (192.168.101.142) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 4 Oct 2017 16:41:50 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v94FfoR722806634; Wed, 4 Oct 2017 15:41:50 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F36B44C044; Wed, 4 Oct 2017 16:37:55 +0100 (BST) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C02D24C040; Wed, 4 Oct 2017 16:37:55 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 4 Oct 2017 16:37:55 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Wed, 4 Oct 2017 17:41:38 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> References: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17100415-0008-0000-0000-0000049C6145 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17100415-0009-0000-0000-00001E2DCC1E Message-Id: <20171004154144.88995-3-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-04_07:, , 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-1710040220 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 v2 2/8] 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 struct 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 --- include/hw/s390x/css.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h index 0653d3c9be..66916b6546 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -75,6 +75,18 @@ typedef struct CMBE { uint32_t reserved[7]; } QEMU_PACKED CMBE; =20 +/* IO instructions conclude according this */ +typedef struct IOInstEnding { + /* + * General semantic of cc codes of IO instructions is (brief): + * 0 -- produced expected result + * 1 -- status conditions were present or produced alternate resu= lt + * 2 -- ineffective, because busy with previously initiated functi= on + * 3 -- ineffective, not operational + */ + int cc; +} IOInstEnding; + typedef struct SubchDev SubchDev; struct SubchDev { /* channel-subsystem related things: */ --=20 2.13.5 From nobody Mon May 6 19:12:41 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 1507131845017464.76985323398185; Wed, 4 Oct 2017 08:44:05 -0700 (PDT) Received: from localhost ([::1]:35711 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzlq3-0003O4-In for importer@patchew.org; Wed, 04 Oct 2017 11:43:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37122) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzloA-00026k-Ji for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dzlo6-0003KE-Oq for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:02 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:44162 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 1dzlo6-0003J5-He for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:41:58 -0400 Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v94FdJH8112253 for ; Wed, 4 Oct 2017 11:41:55 -0400 Received: from e06smtp14.uk.ibm.com (e06smtp14.uk.ibm.com [195.75.94.110]) by mx0b-001b2d01.pphosted.com with ESMTP id 2dcxvfe6b7-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 04 Oct 2017 11:41:54 -0400 Received: from localhost by e06smtp14.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 4 Oct 2017 16:41:53 +0100 Received: from b06cxnps4074.portsmouth.uk.ibm.com (9.149.109.196) by e06smtp14.uk.ibm.com (192.168.101.144) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 4 Oct 2017 16:41:52 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v94Ffpgg25624674; Wed, 4 Oct 2017 15:41:51 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 46F4D4C044; Wed, 4 Oct 2017 16:37:57 +0100 (BST) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 097AE4C040; Wed, 4 Oct 2017 16:37:57 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 4 Oct 2017 16:37:56 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Wed, 4 Oct 2017 17:41:39 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> References: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17100415-0016-0000-0000-000004F267DC X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17100415-0017-0000-0000-0000282CD6DA Message-Id: <20171004154144.88995-4-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-04_07:, , 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-1710040220 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 v2 3/8] 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. Signed-off-by: Halil Pasic --- AFAIR we decided in the previous round to rather do transformation and fixing in one patch than touch stuff twice. Hence this patch ain't pure transformation any more. --- hw/s390x/css.c | 83 +++++++++++++----------------------------= ---- hw/s390x/s390-ccw.c | 11 +++--- hw/vfio/ccw.c | 30 ++++++++++++---- include/hw/s390x/css.h | 24 +++++++++---- include/hw/s390x/s390-ccw.h | 2 +- target/s390x/ioinst.c | 53 ++++------------------------- 6 files changed, 77 insertions(+), 126 deletions(-) diff --git a/hw/s390x/css.c b/hw/s390x/css.c index 4f47dbc8b0..b2978c3bae 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1003,12 +1003,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)) { @@ -1022,31 +1021,11 @@ 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; + sch_gen_unit_exception(sch); + css_inject_io_interrupt(sch); + return (IOInstEnding){.cc =3D 0}; } - - 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 /* @@ -1055,7 +1034,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; @@ -1069,12 +1048,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 (IOInstEnding){.cc =3D 0}; } =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) { @@ -1084,16 +1063,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 (IOInstEnding){.cc =3D 0}; } =20 -static int do_subchannel_work(SubchDev *sch) +static IOInstEnding do_subchannel_work(SubchDev *sch) { if (!sch->do_subchannel_work) { - return -EINVAL; + return (IOInstEnding){.cc =3D 1}; } g_assert(sch->curr_status.scsw.ctrl & SCSW_CTRL_MASK_FCTL); return sch->do_subchannel_work(sch); @@ -1383,27 +1361,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 (IOInstEnding){.cc =3D 3}; } =20 if (s->ctrl & SCSW_STCTL_STATUS_PEND) { - ret =3D -EINPROGRESS; - goto out; + return (IOInstEnding){.cc =3D 1}; } =20 if (s->ctrl & (SCSW_FCTL_START_FUNC | SCSW_FCTL_HALT_FUNC | SCSW_FCTL_CLEAR_FUNC)) { - ret =3D -EBUSY; - goto out; + return (IOInstEnding){.cc =3D 2}; } =20 /* If monitoring is active, update counter. */ @@ -1416,10 +1390,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, @@ -1666,27 +1637,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 (IOInstEnding){.cc =3D 3}; } =20 if (s->ctrl & SCSW_STCTL_STATUS_PEND) { - ret =3D -EINPROGRESS; - goto out; + return (IOInstEnding){.cc =3D 1}; } =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 (IOInstEnding){.cc =3D 2}; } =20 /* If monitoring is active, update counter. */ @@ -1695,11 +1662,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..5d2c305b71 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 (IOInstEnding){.cc =3D 1}; } + 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 a8baadf57a..dbb5b201de 100644 --- a/hw/vfio/ccw.c +++ b/hw/vfio/ccw.c @@ -23,6 +23,7 @@ #include "hw/s390x/s390-ccw.h" #include "hw/s390x/ccw-device.h" #include "qemu/error-report.h" +#include "cpu.h" =20 #define TYPE_VFIO_CCW "vfio-ccw" typedef struct VFIOCCWDevice { @@ -47,9 +48,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 +61,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 +72,25 @@ 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) { + /* Currently we don't update control block and just return the cc code= . */ + case 0: + return (IOInstEnding){.cc =3D 0}; + case EBUSY: + return (IOInstEnding){.cc =3D 2}; + case ENODEV: + case EACCES: + return (IOInstEnding){.cc =3D 3}; + case EFAULT: + default: + sch_gen_unit_exception(sch); + css_inject_io_interrupt(sch); + return (IOInstEnding){.cc =3D 0}; } - - 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 66916b6546..2116c6b3c7 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -107,11 +107,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 /* @@ -170,9 +181,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, @@ -197,13 +208,14 @@ SubchDev *css_find_subch(uint8_t m, uint8_t cssid, ui= nt8_t ssid, uint16_t schid); 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); 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); @@ -214,7 +226,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..582287ff6c 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).cc); } =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).cc); } =20 #define RCHP_REG1_RES(_reg) (_reg & 0x00000000ff00ff00) --=20 2.13.5 From nobody Mon May 6 19:12:41 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 1507131853099935.9607538037554; Wed, 4 Oct 2017 08:44:13 -0700 (PDT) Received: from localhost ([::1]:35713 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzlq6-0003RC-7y for importer@patchew.org; Wed, 04 Oct 2017 11:44:02 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37119) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzloA-00026j-Fv for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dzlo6-0003K4-NN for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:02 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:44164 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 1dzlo6-0003J6-Hb for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:41:58 -0400 Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v94FdKfh112324 for ; Wed, 4 Oct 2017 11:41:56 -0400 Received: from e06smtp13.uk.ibm.com (e06smtp13.uk.ibm.com [195.75.94.109]) by mx0b-001b2d01.pphosted.com with ESMTP id 2dcxvfe6cd-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 04 Oct 2017 11:41:56 -0400 Received: from localhost by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 4 Oct 2017 16:41:54 +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; Wed, 4 Oct 2017 16:41:53 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v94FfqAu14024866; Wed, 4 Oct 2017 15:41:52 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 84B564C040; Wed, 4 Oct 2017 16:37:58 +0100 (BST) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 519724C044; Wed, 4 Oct 2017 16:37:58 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 4 Oct 2017 16:37:58 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Wed, 4 Oct 2017 17:41:40 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> References: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17100415-0012-0000-0000-0000057E6D13 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17100415-0013-0000-0000-000018F7DC4D Message-Id: <20171004154144.88995-5-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-04_07:, , 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-1710040220 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 v2 4/8] 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 --- 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 b2978c3bae..175624d1c8 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1223,20 +1223,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 (IOInstEnding){.cc =3D 3}; } =20 if (s->ctrl & SCSW_CTRL_MASK_STCTL) { - ret =3D -EINPROGRESS; - goto out; + return (IOInstEnding){.cc =3D 1}; } =20 if (!(s->ctrl & SCSW_CTRL_MASK_FCTL) || @@ -1244,8 +1241,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 (IOInstEnding){.cc =3D 2}; } =20 /* Cancel the current operation. */ @@ -1257,10 +1253,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 (IOInstEnding){.cc =3D 0}; } =20 int css_do_csch(SubchDev *sch) diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h index 2116c6b3c7..4c89d77893 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -212,7 +212,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 582287ff6c..85f5be6ca3 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).cc); } =20 void ioinst_handle_csch(S390CPU *cpu, uint64_t reg1) --=20 2.13.5 From nobody Mon May 6 19:12:41 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 1507132003828378.4609048288057; Wed, 4 Oct 2017 08:46:43 -0700 (PDT) Received: from localhost ([::1]:35728 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzlsa-0005xd-N2 for importer@patchew.org; Wed, 04 Oct 2017 11:46:36 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37146) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzloC-00027U-TF for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dzlo8-0003MH-Aj for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:04 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:46200) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dzlo8-0003LR-2I for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:00 -0400 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v94Ff3YY037750 for ; Wed, 4 Oct 2017 11:41:59 -0400 Received: from e06smtp14.uk.ibm.com (e06smtp14.uk.ibm.com [195.75.94.110]) by mx0a-001b2d01.pphosted.com with ESMTP id 2dcyft4cac-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 04 Oct 2017 11:41:58 -0400 Received: from localhost by e06smtp14.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 4 Oct 2017 16:41:56 +0100 Received: from b06cxnps4076.portsmouth.uk.ibm.com (9.149.109.198) by e06smtp14.uk.ibm.com (192.168.101.144) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 4 Oct 2017 16:41:54 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4076.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v94FfsDh19792082; Wed, 4 Oct 2017 15:41:54 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C6B414C046; Wed, 4 Oct 2017 16:37:59 +0100 (BST) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8EFCB4C040; Wed, 4 Oct 2017 16:37:59 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 4 Oct 2017 16:37:59 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Wed, 4 Oct 2017 17:41:41 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> References: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17100415-0016-0000-0000-000004F267DD X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17100415-0017-0000-0000-0000282CD6DB Message-Id: <20171004154144.88995-6-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-04_07:, , 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-1710040220 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 v2 5/8] 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 --- 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 175624d1c8..1839f40408 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1256,26 +1256,20 @@ IOInstEnding css_do_xsch(SubchDev *sch) return (IOInstEnding){.cc =3D 0}; } =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 (IOInstEnding){.cc =3D 3}; } =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 4c89d77893..6ca9999077 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -213,7 +213,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 85f5be6ca3..b12b3d1d41 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).cc); } =20 void ioinst_handle_hsch(S390CPU *cpu, uint64_t reg1) --=20 2.13.5 From nobody Mon May 6 19:12:41 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 1507132165114718.9781902489992; Wed, 4 Oct 2017 08:49:25 -0700 (PDT) Received: from localhost ([::1]:35736 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzlv0-0008KN-Uk for importer@patchew.org; Wed, 04 Oct 2017 11:49:07 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37210) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzloN-0002Fi-6p for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dzloG-0003Zf-FX for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:15 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:37632 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 1dzloG-0003Yn-9s for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:08 -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 v94Fe4lQ083355 for ; Wed, 4 Oct 2017 11:42:00 -0400 Received: from e06smtp10.uk.ibm.com (e06smtp10.uk.ibm.com [195.75.94.106]) by mx0b-001b2d01.pphosted.com with ESMTP id 2dcxvfp9ya-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 04 Oct 2017 11:42:00 -0400 Received: from localhost by e06smtp10.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 4 Oct 2017 16:41:58 +0100 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp10.uk.ibm.com (192.168.101.140) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 4 Oct 2017 16:41:55 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v94FftjD28311666; Wed, 4 Oct 2017 15:41:55 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 10B214C044; Wed, 4 Oct 2017 16:38:01 +0100 (BST) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D0E6B4C040; Wed, 4 Oct 2017 16:38:00 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 4 Oct 2017 16:38:00 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Wed, 4 Oct 2017 17:41:42 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> References: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17100415-0040-0000-0000-000003DF6144 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17100415-0041-0000-0000-000025E0CCA9 Message-Id: <20171004154144.88995-7-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-04_07:, , 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-1710040220 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 v2 6/8] 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 --- 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 1839f40408..6da3e4ea61 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1272,28 +1272,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 (IOInstEnding){.cc =3D 3}; } =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 (IOInstEnding){.cc =3D 1}; } =20 if (s->ctrl & (SCSW_FCTL_HALT_FUNC | SCSW_FCTL_CLEAR_FUNC)) { - ret =3D -EBUSY; - goto out; + return (IOInstEnding){.cc =3D 2}; } =20 /* Trigger the halt function. */ @@ -1306,11 +1302,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 6ca9999077..a4064711e2 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -214,7 +214,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 b12b3d1d41..12102bab0f 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).cc); } =20 static int ioinst_schib_valid(SCHIB *schib) --=20 2.13.5 From nobody Mon May 6 19:12:41 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 1507132166296842.285300143898; Wed, 4 Oct 2017 08:49:26 -0700 (PDT) Received: from localhost ([::1]:35737 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzlvE-0008VM-3Y for importer@patchew.org; Wed, 04 Oct 2017 11:49:20 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37198) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzloL-0002F7-BO for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dzloE-0003W9-8O for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:13 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:46172) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dzloD-0003UK-W9 for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:06 -0400 Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v94FfkL7125776 for ; Wed, 4 Oct 2017 11:42:01 -0400 Received: from e06smtp15.uk.ibm.com (e06smtp15.uk.ibm.com [195.75.94.111]) by mx0a-001b2d01.pphosted.com with ESMTP id 2dd1rcjt1f-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 04 Oct 2017 11:42:01 -0400 Received: from localhost by e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 4 Oct 2017 16:41:58 +0100 Received: from b06cxnps4074.portsmouth.uk.ibm.com (9.149.109.196) by e06smtp15.uk.ibm.com (192.168.101.145) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 4 Oct 2017 16:41:57 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v94Ffu3F21299234; Wed, 4 Oct 2017 15:41:56 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 559854C044; Wed, 4 Oct 2017 16:38:02 +0100 (BST) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2065B4C040; Wed, 4 Oct 2017 16:38:02 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 4 Oct 2017 16:38:02 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Wed, 4 Oct 2017 17:41:43 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> References: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17100415-0020-0000-0000-000003BD60FF X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17100415-0021-0000-0000-0000424FB29D Message-Id: <20171004154144.88995-8-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-04_07:, , 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-1710040220 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 v2 7/8] 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 --- 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 6da3e4ea61..98d0a6123b 100644 --- a/hw/s390x/css.c +++ b/hw/s390x/css.c @@ -1168,28 +1168,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 (IOInstEnding){.cc =3D 0}; } =20 if (s->ctrl & SCSW_STCTL_STATUS_PEND) { - ret =3D -EINPROGRESS; - goto out; + return (IOInstEnding){.cc =3D 1}; } =20 if (s->ctrl & (SCSW_FCTL_START_FUNC|SCSW_FCTL_HALT_FUNC|SCSW_FCTL_CLEAR_FUNC)) { - ret =3D -EBUSY; - goto out; + return (IOInstEnding){.cc =3D 1}; } =20 copy_schib_from_guest(&schib, orig_schib); @@ -1216,11 +1212,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 (IOInstEnding){.cc =3D 0}; } =20 IOInstEnding css_do_xsch(SubchDev *sch) diff --git a/include/hw/s390x/css.h b/include/hw/s390x/css.h index a4064711e2..e3685e73d9 100644 --- a/include/hw/s390x/css.h +++ b/include/hw/s390x/css.h @@ -211,7 +211,7 @@ void css_conditional_io_interrupt(SubchDev *sch); =20 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 12102bab0f..0c256baa70 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).cc); } =20 static void copy_orb_from_guest(ORB *dest, const ORB *src) --=20 2.13.5 From nobody Mon May 6 19:12:41 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 1507132003568345.56435042985765; Wed, 4 Oct 2017 08:46:43 -0700 (PDT) Received: from localhost ([::1]:35729 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzlsd-0005zQ-DT for importer@patchew.org; Wed, 04 Oct 2017 11:46:39 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37162) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzloF-00029D-1F for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dzloA-0003RB-Ie for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:07 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:44604 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 1dzloA-0003QG-Cn for qemu-devel@nongnu.org; Wed, 04 Oct 2017 11:42:02 -0400 Received: from pps.filterd (m0098419.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v94FeSrn116281 for ; Wed, 4 Oct 2017 11:42:01 -0400 Received: from e06smtp10.uk.ibm.com (e06smtp10.uk.ibm.com [195.75.94.106]) by mx0b-001b2d01.pphosted.com with ESMTP id 2dcxvfe6fq-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 04 Oct 2017 11:42:01 -0400 Received: from localhost by e06smtp10.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 4 Oct 2017 16:41:59 +0100 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp10.uk.ibm.com (192.168.101.140) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 4 Oct 2017 16:41:58 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v94Ffver18088126; Wed, 4 Oct 2017 15:41:57 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 933474C044; Wed, 4 Oct 2017 16:38:03 +0100 (BST) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6016C4C040; Wed, 4 Oct 2017 16:38:03 +0100 (BST) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 4 Oct 2017 16:38:03 +0100 (BST) From: Halil Pasic To: Cornelia Huck , "Dong Jia Shi" Date: Wed, 4 Oct 2017 17:41:44 +0200 X-Mailer: git-send-email 2.13.5 In-Reply-To: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> References: <20171004154144.88995-1-pasic@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17100415-0040-0000-0000-000003DF6147 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17100415-0041-0000-0000-000025E0CCAB Message-Id: <20171004154144.88995-9-pasic@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-04_07:, , 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-1710040220 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 v2 8/8] s390x: factor out common ioinst handler logic 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" Some of ioinst the handlers look very much the same: they basically delegate the work to the appropriate css function (doing some always the same stuff before and after the call to the appropriate css function). Let us create a template and get rid of some code. Signed-off-by: Halil Pasic Suggested-by: Marc Hartmayer --- target/s390x/ioinst.c | 59 ++++++++++++-----------------------------------= ---- 1 file changed, 14 insertions(+), 45 deletions(-) diff --git a/target/s390x/ioinst.c b/target/s390x/ioinst.c index 0c256baa70..9c7d6a222c 100644 --- a/target/s390x/ioinst.c +++ b/target/s390x/ioinst.c @@ -38,7 +38,10 @@ int ioinst_disassemble_sch_ident(uint32_t value, int *m,= int *cssid, int *ssid, return 0; } =20 -void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1) +/* many ionst handlers look the same: they just delegate to a some css fun= c */ +static void ioinst_handler_template_sch(S390CPU *cpu, uint64_t reg1, + const char *iname, + IOInstEnding (*handler_css)(SubchDev= *)) { int cssid, ssid, schid, m; SubchDev *sch; @@ -47,49 +50,28 @@ void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1) program_interrupt(&cpu->env, PGM_OPERAND, 4); return; } - trace_ioinst_sch_id("xsch", cssid, ssid, schid); + trace_ioinst_sch_id(iname, cssid, ssid, schid); sch =3D css_find_subch(m, cssid, ssid, schid); if (!sch || !css_subch_visible(sch)) { setcc(cpu, 3); return; } - setcc(cpu, css_do_xsch(sch).cc); + setcc(cpu, handler_css(sch).cc); } =20 -void ioinst_handle_csch(S390CPU *cpu, uint64_t reg1) +void ioinst_handle_xsch(S390CPU *cpu, uint64_t reg1) { - int cssid, ssid, schid, m; - SubchDev *sch; + ioinst_handler_template_sch(cpu, reg1, "xsch", css_do_xsch); +} =20 - if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) { - program_interrupt(&cpu->env, PGM_OPERAND, 4); - return; - } - trace_ioinst_sch_id("csch", cssid, ssid, schid); - sch =3D css_find_subch(m, cssid, ssid, schid); - if (!sch || !css_subch_visible(sch)) { - setcc(cpu, 3); - return; - } - setcc(cpu, css_do_csch(sch).cc); +void ioinst_handle_csch(S390CPU *cpu, uint64_t reg1) +{ + ioinst_handler_template_sch(cpu, reg1, "csch", css_do_csch); } =20 void ioinst_handle_hsch(S390CPU *cpu, uint64_t reg1) { - int cssid, ssid, schid, m; - SubchDev *sch; - - if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) { - program_interrupt(&cpu->env, PGM_OPERAND, 4); - return; - } - trace_ioinst_sch_id("hsch", cssid, ssid, schid); - sch =3D css_find_subch(m, cssid, ssid, schid); - if (!sch || !css_subch_visible(sch)) { - setcc(cpu, 3); - return; - } - setcc(cpu, css_do_hsch(sch).cc); + ioinst_handler_template_sch(cpu, reg1, "hsch", css_do_hsch); } =20 static int ioinst_schib_valid(SCHIB *schib) @@ -707,20 +689,7 @@ void ioinst_handle_schm(S390CPU *cpu, uint64_t reg1, u= int64_t reg2, =20 void ioinst_handle_rsch(S390CPU *cpu, uint64_t reg1) { - int cssid, ssid, schid, m; - SubchDev *sch; - - if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) { - program_interrupt(&cpu->env, PGM_OPERAND, 4); - return; - } - trace_ioinst_sch_id("rsch", cssid, ssid, schid); - sch =3D css_find_subch(m, cssid, ssid, schid); - if (!sch || !css_subch_visible(sch)) { - setcc(cpu, 3); - return; - } - setcc(cpu, css_do_rsch(sch).cc); + ioinst_handler_template_sch(cpu, reg1, "rsch", css_do_rsch); } =20 #define RCHP_REG1_RES(_reg) (_reg & 0x00000000ff00ff00) --=20 2.13.5