From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Huth Subject: Re: [kvm-unit-tests PATCH v1] s390x: generate asm offsets for the lowcore Date: Mon, 29 May 2017 17:53:50 +0200 Message-ID: References: <20170529110631.23071-1-david@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: Paolo Bonzini , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Christian Borntraeger To: David Hildenbrand , kvm@vger.kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:56832 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750985AbdE2Px6 (ORCPT ); Mon, 29 May 2017 11:53:58 -0400 In-Reply-To: <20170529110631.23071-1-david@redhat.com> Content-Language: en-US Sender: kvm-owner@vger.kernel.org List-ID: On 29.05.2017 13:06, David Hildenbrand wrote: > Add the s390x psw and lowcore structs and generate asm offsets for lowcore > fields. Add all lowcore fields defined in the current PoP (z13). > > Signed-off-by: David Hildenbrand > --- [...] > diff --git a/lib/s390x/asm/arch_def.h b/lib/s390x/asm/arch_def.h > new file mode 100644 > index 0000000..25c9516 > --- /dev/null > +++ b/lib/s390x/asm/arch_def.h > @@ -0,0 +1,85 @@ > +/* > + * Copyright (c) 2017 Red Hat Inc > + * > + * Authors: > + * David Hildenbrand > + * > + * This code is free software; you can redistribute it and/or modify it > + * under the terms of the GNU Library General Public License version 2. > + */ > +#ifndef _ASM_S390X_ARCH_DEF_H_ > +#define _ASM_S390X_ARCH_DEF_H_ > + > +struct psw { > + uint64_t mask; > + uint64_t addr; > +} __attribute__ ((__packed__)); The struct is naturally aligned - I think you don't need the packed attribute here. > +struct lowcore { > + uint8_t pad_0x0000[0x0080 - 0x0000]; /* 0x0000 */ > + uint32_t ext_int_param; /* 0x0080 */ > + uint16_t cpu_addr; /* 0x0084 */ > + uint16_t ext_int_code; /* 0x0086 */ > + uint16_t svc_int_id; /* 0x0088 */ > + uint16_t svc_int_code; /* 0x008a */ > + uint16_t pgm_int_id; /* 0x008c */ > + uint16_t pgm_int_code; /* 0x008e */ > + uint32_t dxc_vxc; /* 0x0090 */ > + uint16_t mon_class_nb; /* 0x0094 */ > + uint8_t per_code; /* 0x0096 */ > + uint8_t per_atmid; /* 0x0097 */ > + uint64_t per_addr; /* 0x0098 */ > + uint8_t exc_acc_id; /* 0x00a0 */ > + uint8_t per_acc_id; /* 0x00a1 */ > + uint8_t op_acc_id; /* 0x00a2 */ > + uint8_t arch_mode_id; /* 0x00a3 */ > + uint8_t pad_0x00a4[0x00a8 - 0x00a4]; /* 0x00a4 */ > + uint64_t trans_exc_id; /* 0x00a8 */ > + uint64_t mon_code; /* 0x00b0 */ > + uint32_t subsys_id_word; /* 0x00b8 */ > + uint32_t io_int_param; /* 0x00bc */ > + uint32_t io_int_word; /* 0x00c0 */ > + uint8_t pad_0x00c4[0x00c8 - 0x00c4]; /* 0x00c4 */ > + uint32_t stfl; /* 0x00c8 */ > + uint8_t pad_0x00cc[0x00e8 - 0x00cc]; /* 0x00cc */ > + uint64_t mcck_int_code; /* 0x00e8 */ > + uint8_t pad_0x00f0[0x00f4 - 0x00f0]; /* 0x00f0 */ > + uint32_t ext_damage_code; /* 0x00f4 */ > + uint64_t failing_storage_addr; /* 0x00f8 */ > + uint64_t emon_ca_origin; /* 0x0100 */ > + uint32_t emon_ca_size; /* 0x0108 */ > + uint32_t emon_exc_count; /* 0x010c */ > + uint64_t breaking_event_addr; /* 0x0110 */ > + uint8_t pad_0x0118[0x0120 - 0x0118]; /* 0x0118 */ > + struct psw restart_old_psw; /* 0x0120 */ > + struct psw ext_old_psw; /* 0x0130 */ > + struct psw svc_old_psw; /* 0x0140 */ > + struct psw pgm_old_psw; /* 0x0150 */ > + struct psw mcck_old_psw; /* 0x0160 */ > + struct psw io_old_psw; /* 0x0170 */ > + uint8_t pad_0x0180[0x01a0 - 0x0180]; /* 0x0180 */ > + struct psw restart_new_psw; /* 0x01a0 */ > + struct psw ext_new_psw; /* 0x01b0 */ > + struct psw svc_new_psw; /* 0x01c0 */ > + struct psw pgm_new_psw; /* 0x01d0 */ > + struct psw mcck_new_psw; /* 0x01e0 */ > + struct psw io_new_psw; /* 0x01f0 */ > + uint8_t pad_0x0200[0x1200 - 0x0200]; /* 0x0200 */ In my version of the PoP, there is one more additional field at 0x11b0 ("Machine-Check-Extended-Save-Area Address") ... maybe add that, too? > + uint64_t fprs_sa[16]; /* 0x1200 */ > + uint64_t grs_sa[16]; /* 0x1280 */ > + struct psw psw_sa; /* 0x1300 */ > + uint8_t pad_0x1310[0x1318 - 0x1310]; /* 0x1310 */ > + uint32_t prefix_sa; /* 0x1318 */ > + uint32_t fpc_sa; /* 0x131c */ > + uint8_t pad_0x1320[0x1324 - 0x1320]; /* 0x1320 */ > + uint32_t tod_pr_sa; /* 0x1324 */ > + uint64_t cputm_sa; /* 0x1328 */ > + uint64_t cc_sa; /* 0x1330 */ > + uint8_t pad_0x1338[0x1340 - 0x1338]; /* 0x1338 */ > + uint32_t ars_sa[16]; /* 0x1340 */ > + uint64_t crs_sa[16]; /* 0x1380 */ > + uint8_t pad_0x1400[0x1800 - 0x1400]; /* 0x1400 */ > + uint8_t pgm_int_tdb[0x1900 - 0x1800]; /* 0x1800 */ > +} __attribute__ ((__packed__)); > + > +#endif Patch looks fine to me. With or without fixing the nits above: Reviewed-by: Thomas Huth