From nobody Sun Feb 8 10:03:09 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.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 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550823236341867.7711031536174; Fri, 22 Feb 2019 00:13:56 -0800 (PST) Received: from localhost ([127.0.0.1]:46313 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5xy-0005E9-7b for importer@patchew.org; Fri, 22 Feb 2019 03:13:54 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43328) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5wI-0004GV-PP for qemu-devel@nongnu.org; Fri, 22 Feb 2019 03:12:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5wH-00075a-BB for qemu-devel@nongnu.org; Fri, 22 Feb 2019 03:12:10 -0500 Received: from mx1.redhat.com ([209.132.183.28]:54050) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5wG-00073Y-GH; Fri, 22 Feb 2019 03:12:09 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9383C66220; Fri, 22 Feb 2019 08:12:07 +0000 (UTC) Received: from t460s.redhat.com (ovpn-117-150.ams2.redhat.com [10.36.117.150]) by smtp.corp.redhat.com (Postfix) with ESMTP id 077701001947; Fri, 22 Feb 2019 08:11:58 +0000 (UTC) From: David Hildenbrand To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 09:11:51 +0100 Message-Id: <20190222081153.14206-2-david@redhat.com> In-Reply-To: <20190222081153.14206-1-david@redhat.com> References: <20190222081153.14206-1-david@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Fri, 22 Feb 2019 08:12:07 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v1 1/3] s390x: Use cpu_to_be64 in SIGP STORE ADDITIONAL STATUS 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 , Janosch Frank , David Hildenbrand , Cornelia Huck , Halil Pasic , Christian Borntraeger , qemu-s390x@nongnu.org, Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As we will support vector instructions soon, and vector registers are stored in 64bit host chunks, let's use cpu_to_be64. Same applies to the guarded storage control block. Signed-off-by: David Hildenbrand Reviewed-by: Christian Borntraeger Reviewed-by: Thomas Huth --- target/s390x/helper.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/target/s390x/helper.c b/target/s390x/helper.c index 3d74836a83..f3fcf96482 100644 --- a/target/s390x/helper.c +++ b/target/s390x/helper.c @@ -272,32 +272,43 @@ int s390_store_status(S390CPU *cpu, hwaddr addr, bool= store_arch) return 0; } =20 -#define ADTL_GS_OFFSET 1024 /* offset of GS data in adtl save area */ +typedef struct SigpAdtlSaveArea { + uint64_t vregs[32][2]; /* 0x0000 */ + uint8_t pad_0x0200[0x0400 - 0x0200]; /* 0x0200 */ + uint64_t gscb[4]; /* 0x0400 */ + uint8_t pad_0x0420[0x1000 - 0x0420]; /* 0x0420 */ +} SigpAdtlSaveArea; +QEMU_BUILD_BUG_ON(sizeof(SigpAdtlSaveArea) !=3D 4096); + #define ADTL_GS_MIN_SIZE 2048 /* minimal size of adtl save area for GS */ int s390_store_adtl_status(S390CPU *cpu, hwaddr addr, hwaddr len) { + SigpAdtlSaveArea *sa; hwaddr save =3D len; - void *mem; + int i; =20 - mem =3D cpu_physical_memory_map(addr, &save, 1); - if (!mem) { + sa =3D cpu_physical_memory_map(addr, &save, 1); + if (!sa) { return -EFAULT; } if (save !=3D len) { - cpu_physical_memory_unmap(mem, len, 1, 0); + cpu_physical_memory_unmap(sa, len, 1, 0); return -EFAULT; } =20 - /* FIXME: as soon as TCG supports these features, convert cpu->be */ if (s390_has_feat(S390_FEAT_VECTOR)) { - memcpy(mem, &cpu->env.vregs, 512); + for (i =3D 0; i < 32; i++) { + sa->vregs[i][0] =3D cpu_to_be64(cpu->env.vregs[i][0].ll); + sa->vregs[i][1] =3D cpu_to_be64(cpu->env.vregs[i][1].ll); + } } if (s390_has_feat(S390_FEAT_GUARDED_STORAGE) && len >=3D ADTL_GS_MIN_S= IZE) { - memcpy(mem + ADTL_GS_OFFSET, &cpu->env.gscb, 32); + for (i =3D 0; i < 4; i++) { + sa->gscb[i] =3D cpu_to_be64(cpu->env.gscb[i]); + } } =20 - cpu_physical_memory_unmap(mem, len, 1, len); - + cpu_physical_memory_unmap(sa, len, 1, len); return 0; } #endif /* CONFIG_USER_ONLY */ --=20 2.17.2 From nobody Sun Feb 8 10:03:09 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.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 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550823510146264.47907604750753; Fri, 22 Feb 2019 00:18:30 -0800 (PST) Received: from localhost ([127.0.0.1]:46587 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx62J-0008Ld-5e for importer@patchew.org; Fri, 22 Feb 2019 03:18:23 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43445) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5wL-0004Ik-9v for qemu-devel@nongnu.org; Fri, 22 Feb 2019 03:12:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5wK-0007AH-8t for qemu-devel@nongnu.org; Fri, 22 Feb 2019 03:12:13 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57608) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5wI-00076d-J5; Fri, 22 Feb 2019 03:12:12 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B1C7030014D1; Fri, 22 Feb 2019 08:12:09 +0000 (UTC) Received: from t460s.redhat.com (ovpn-117-150.ams2.redhat.com [10.36.117.150]) by smtp.corp.redhat.com (Postfix) with ESMTP id D93AE1001E64; Fri, 22 Feb 2019 08:12:07 +0000 (UTC) From: David Hildenbrand To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 09:11:52 +0100 Message-Id: <20190222081153.14206-3-david@redhat.com> In-Reply-To: <20190222081153.14206-1-david@redhat.com> References: <20190222081153.14206-1-david@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Fri, 22 Feb 2019 08:12:09 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v1 2/3] s390x: use a QEMU-style typedef + name for SIGP save area struct 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 , Janosch Frank , David Hildenbrand , Cornelia Huck , Halil Pasic , Christian Borntraeger , qemu-s390x@nongnu.org, Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Convert this to QEMU style. Signed-off-by: David Hildenbrand Acked-by: Christian Borntraeger Reviewed-by: Thomas Huth --- target/s390x/helper.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/target/s390x/helper.c b/target/s390x/helper.c index f3fcf96482..a7edd5df7d 100644 --- a/target/s390x/helper.c +++ b/target/s390x/helper.c @@ -211,7 +211,7 @@ void s390_cpu_recompute_watchpoints(CPUState *cs) } } =20 -struct sigp_save_area { +typedef struct SigpSaveArea { uint64_t fprs[16]; /* 0x0000 */ uint64_t grs[16]; /* 0x0080 */ PSW psw; /* 0x0100 */ @@ -225,13 +225,13 @@ struct sigp_save_area { uint8_t pad_0x0138[0x0140 - 0x0138]; /* 0x0138 */ uint32_t ars[16]; /* 0x0140 */ uint64_t crs[16]; /* 0x0384 */ -}; -QEMU_BUILD_BUG_ON(sizeof(struct sigp_save_area) !=3D 512); +} SigpSaveArea; +QEMU_BUILD_BUG_ON(sizeof(SigpSaveArea) !=3D 512); =20 int s390_store_status(S390CPU *cpu, hwaddr addr, bool store_arch) { static const uint8_t ar_id =3D 1; - struct sigp_save_area *sa; + SigpSaveArea *sa; hwaddr len =3D sizeof(*sa); int i; =20 --=20 2.17.2 From nobody Sun Feb 8 10:03:09 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.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 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550823388825551.3914912039286; Fri, 22 Feb 2019 00:16:28 -0800 (PST) Received: from localhost ([127.0.0.1]:46521 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx60Q-0007Fw-SI for importer@patchew.org; Fri, 22 Feb 2019 03:16:26 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43555) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5wN-0004LF-L8 for qemu-devel@nongnu.org; Fri, 22 Feb 2019 03:12:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5wL-0007Cw-NT for qemu-devel@nongnu.org; Fri, 22 Feb 2019 03:12:15 -0500 Received: from mx1.redhat.com ([209.132.183.28]:36736) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5wK-00079o-Nu; Fri, 22 Feb 2019 03:12:13 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D3F77300486F; Fri, 22 Feb 2019 08:12:11 +0000 (UTC) Received: from t460s.redhat.com (ovpn-117-150.ams2.redhat.com [10.36.117.150]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0618C1001947; Fri, 22 Feb 2019 08:12:09 +0000 (UTC) From: David Hildenbrand To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 09:11:53 +0100 Message-Id: <20190222081153.14206-4-david@redhat.com> In-Reply-To: <20190222081153.14206-1-david@redhat.com> References: <20190222081153.14206-1-david@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Fri, 22 Feb 2019 08:12:11 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v1 3/3] s390x/tcg: Save vregs to extended mchk save area 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 , Janosch Frank , David Hildenbrand , Cornelia Huck , Halil Pasic , Christian Borntraeger , qemu-s390x@nongnu.org, Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" If we have vector registers and the designation is not zero, we have to try to write the vector registers. If the designation is zero or if storing fails, we must not indicate validity. s390_build_validity_mcic() automatically already sets validity if the vector instruction facility is installed. As long as we don't support the guarded-storage facility, the alignemnt & size of the area is always 1024 bytes. Signed-off-by: David Hildenbrand Reviewed-by: Thomas Huth --- target/s390x/excp_helper.c | 46 ++++++++++++++++++++++++++++++++++++-- target/s390x/internal.h | 4 +++- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/target/s390x/excp_helper.c b/target/s390x/excp_helper.c index a758649f47..f84bfb1284 100644 --- a/target/s390x/excp_helper.c +++ b/target/s390x/excp_helper.c @@ -347,10 +347,41 @@ static void do_io_interrupt(CPUS390XState *env) load_psw(env, mask, addr); } =20 +typedef struct MchkExtSaveArea { + uint64_t vregs[32][2]; /* 0x0000 */ + uint8_t pad_0x0200[0x0400 - 0x0200]; /* 0x0200 */ +} MchkExtSaveArea; +QEMU_BUILD_BUG_ON(sizeof(MchkExtSaveArea) !=3D 1024); + +static int mchk_store_vregs(CPUS390XState *env, uint64_t mcesao) +{ + hwaddr len =3D sizeof(MchkExtSaveArea); + MchkExtSaveArea *sa; + int i; + + sa =3D cpu_physical_memory_map(mcesao, &len, 1); + if (!sa) { + return -EFAULT; + } + if (len !=3D sizeof(MchkExtSaveArea)) { + cpu_physical_memory_unmap(sa, len, 1, 0); + return -EFAULT; + } + + for (i =3D 0; i < 32; i++) { + sa->vregs[i][0] =3D cpu_to_be64(env->vregs[i][0].ll); + sa->vregs[i][1] =3D cpu_to_be64(env->vregs[i][1].ll); + } + + cpu_physical_memory_unmap(sa, len, 1, len); + return 0; +} + static void do_mchk_interrupt(CPUS390XState *env) { QEMUS390FLICState *flic =3D QEMU_S390_FLIC(s390_get_flic()); - uint64_t mask, addr; + uint64_t mcic =3D s390_build_validity_mcic() | MCIC_SC_CP; + uint64_t mask, addr, mcesao =3D 0; LowCore *lowcore; int i; =20 @@ -362,6 +393,17 @@ static void do_mchk_interrupt(CPUS390XState *env) =20 lowcore =3D cpu_map_lowcore(env); =20 + /* extended save area */ + if (mcic & MCIC_VB_VR) { + /* length and alignment is 1024 bytes */ + mcesao =3D be64_to_cpu(lowcore->mcesad) & ~0x3ffull; + } + + /* try to store vector registers */ + if (!mcesao || mchk_store_vregs(env, mcesao)) { + mcic &=3D ~MCIC_VB_VR; + } + /* we are always in z/Architecture mode */ lowcore->ar_access_id =3D 1; =20 @@ -377,7 +419,7 @@ static void do_mchk_interrupt(CPUS390XState *env) lowcore->cpu_timer_save_area =3D cpu_to_be64(env->cputm); lowcore->clock_comp_save_area =3D cpu_to_be64(env->ckc >> 8); =20 - lowcore->mcic =3D cpu_to_be64(s390_build_validity_mcic() | MCIC_SC_CP); + lowcore->mcic =3D cpu_to_be64(mcic); lowcore->mcck_old_psw.mask =3D cpu_to_be64(get_psw_mask(env)); lowcore->mcck_old_psw.addr =3D cpu_to_be64(env->psw.addr); mask =3D be64_to_cpu(lowcore->mcck_new_psw.mask); diff --git a/target/s390x/internal.h b/target/s390x/internal.h index 122fe037bc..cbeef3515b 100644 --- a/target/s390x/internal.h +++ b/target/s390x/internal.h @@ -101,7 +101,9 @@ typedef struct LowCore { /* whether the kernel died with panic() or not */ uint32_t panic_magic; /* 0xe00 */ =20 - uint8_t pad13[0x11b8 - 0xe04]; /* 0xe04 */ + uint8_t pad13[0x11b0 - 0xe04]; /* 0xe04 */ + + uint64_t mcesad; /* 0x11B0 */ =20 /* 64 bit extparam used for pfault, diag 250 etc */ uint64_t ext_params2; /* 0x11B8 */ --=20 2.17.2