* [kvm-unit-tests PATCH v1] s390x: generate asm offsets for the lowcore
@ 2017-05-29 11:06 David Hildenbrand
2017-05-29 11:07 ` Paolo Bonzini
2017-05-29 15:53 ` Thomas Huth
0 siblings, 2 replies; 5+ messages in thread
From: David Hildenbrand @ 2017-05-29 11:06 UTC (permalink / raw)
To: kvm
Cc: Paolo Bonzini, Radim Krčmář,
Thomas Huth, david, Christian Borntraeger
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 <david@redhat.com>
---
lib/s390x/asm-offsets.c | 70 +++++++++++++++++++++++++++++++++++++
lib/s390x/asm/arch_def.h | 85 +++++++++++++++++++++++++++++++++++++++++++++
lib/s390x/asm/asm-offsets.h | 10 ++++++
s390x/Makefile | 8 ++++-
4 files changed, 172 insertions(+), 1 deletion(-)
create mode 100644 lib/s390x/asm-offsets.c
create mode 100644 lib/s390x/asm/arch_def.h
create mode 100644 lib/s390x/asm/asm-offsets.h
diff --git a/lib/s390x/asm-offsets.c b/lib/s390x/asm-offsets.c
new file mode 100644
index 0000000..28915e5
--- /dev/null
+++ b/lib/s390x/asm-offsets.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2017 Red Hat Inc
+ *
+ * Authors:
+ * David Hildenbrand <david@redhat.com>
+ *
+ * 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.
+ */
+#include <libcflat.h>
+#include <kbuild.h>
+#include <asm/arch_def.h>
+
+int main(void)
+{
+ OFFSET(GEN_LC_EXT_INT_PARAM, lowcore, ext_int_param);
+ OFFSET(GEN_LC_CPU_ADDR, lowcore, cpu_addr);
+ OFFSET(GEN_LC_EXT_INT_CODE, lowcore, ext_int_code);
+ OFFSET(GEN_LC_SVC_INT_ID, lowcore, svc_int_id);
+ OFFSET(GEN_LC_SVC_INT_CODE, lowcore, svc_int_code);
+ OFFSET(GEN_LC_PGM_INT_ID, lowcore, pgm_int_id);
+ OFFSET(GEN_LC_PGM_INT_CODE, lowcore, pgm_int_code);
+ OFFSET(GEN_LC_DXC_VXC, lowcore, dxc_vxc);
+ OFFSET(GEN_LC_MON_CLASS_NB, lowcore, mon_class_nb);
+ OFFSET(GEN_LC_PER_CODE, lowcore, per_code);
+ OFFSET(GEN_LC_PER_ATMID, lowcore, per_atmid);
+ OFFSET(GEN_LC_PER_ADDR, lowcore, per_addr);
+ OFFSET(GEN_LC_EXC_ACC_ID, lowcore, exc_acc_id);
+ OFFSET(GEN_LC_PER_ACC_ID, lowcore, per_acc_id);
+ OFFSET(GEN_LC_OP_ACC_ID, lowcore, op_acc_id);
+ OFFSET(GEN_LC_ARCH_MODE_ID, lowcore, arch_mode_id);
+ OFFSET(GEN_LC_TRANS_EXC_ID, lowcore, trans_exc_id);
+ OFFSET(GEN_LC_MON_CODE, lowcore, mon_code);
+ OFFSET(GEN_LC_SUBSYS_ID_WORD, lowcore, subsys_id_word);
+ OFFSET(GEN_LC_IO_INT_PARAM, lowcore, io_int_param);
+ OFFSET(GEN_LC_IO_INT_WORD, lowcore, io_int_word);
+ OFFSET(GEN_LC_STFL, lowcore, stfl);
+ OFFSET(GEN_LC_MCCK_INT_CODE, lowcore, mcck_int_code);
+ OFFSET(GEN_LC_EXT_DAMAGE_CODE, lowcore, ext_damage_code);
+ OFFSET(GEN_LC_FAILING_STORAGE_ADDR, lowcore, failing_storage_addr);
+ OFFSET(GEN_LC_EMON_CA_ORIGIN, lowcore, emon_ca_origin);
+ OFFSET(GEN_LC_EMON_CA_SIZE, lowcore, emon_ca_size);
+ OFFSET(GEN_LC_EMON_EXC_COUNT, lowcore, emon_exc_count);
+ OFFSET(GEN_LC_BREAKING_EVENT_ADDR, lowcore, breaking_event_addr);
+ OFFSET(GEN_LC_RESTART_OLD_PSW, lowcore, restart_old_psw);
+ OFFSET(GEN_LC_EXT_OLD_PSW, lowcore, ext_old_psw);
+ OFFSET(GEN_LC_SVC_OLD_PSW, lowcore, svc_old_psw);
+ OFFSET(GEN_LC_PGM_OLD_PSW, lowcore, pgm_old_psw);
+ OFFSET(GEN_LC_MCCK_OLD_PSW, lowcore, mcck_old_psw);
+ OFFSET(GEN_LC_IO_OLD_PSW, lowcore, io_old_psw);
+ OFFSET(GEN_LC_RESTART_NEW_PSW, lowcore, restart_new_psw);
+ OFFSET(GEN_LC_EXT_NEW_PSW, lowcore, ext_new_psw);
+ OFFSET(GEN_LC_SVC_NEW_PSW, lowcore, svc_new_psw);
+ OFFSET(GEN_LC_PGM_NEW_PSW, lowcore, pgm_new_psw);
+ OFFSET(GEN_LC_MCCK_NEW_PSW, lowcore, mcck_new_psw);
+ OFFSET(GEN_LC_IO_NEW_PSW, lowcore, io_new_psw);
+ OFFSET(GEN_LC_FPRS_SA, lowcore, fprs_sa);
+ OFFSET(GEN_LC_GRS_SA, lowcore, grs_sa);
+ OFFSET(GEN_LC_PSW_SA, lowcore, psw_sa);
+ OFFSET(GEN_LC_PREFIX_SA, lowcore, prefix_sa);
+ OFFSET(GEN_LC_FPC_SA, lowcore, fpc_sa);
+ OFFSET(GEN_LC_TOD_PR_SA, lowcore, tod_pr_sa);
+ OFFSET(GEN_LC_CPUTM_SA, lowcore, cputm_sa);
+ OFFSET(GEN_LC_CC_SA, lowcore, cc_sa);
+ OFFSET(GEN_LC_ARS_SA, lowcore, ars_sa);
+ OFFSET(GEN_LC_CRS_SA, lowcore, crs_sa);
+ OFFSET(GEN_LC_PGM_INT_TDB, lowcore, pgm_int_tdb);
+
+ return 0;
+}
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 <david@redhat.com>
+ *
+ * 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__));
+
+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 */
+ 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
diff --git a/lib/s390x/asm/asm-offsets.h b/lib/s390x/asm/asm-offsets.h
new file mode 100644
index 0000000..a6d7af8
--- /dev/null
+++ b/lib/s390x/asm/asm-offsets.h
@@ -0,0 +1,10 @@
+/*
+ * Copyright (c) 2017 Red Hat Inc
+ *
+ * Authors:
+ * David Hildenbrand <david@redhat.com>
+ *
+ * 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.
+ */
+#include <generated/asm-offsets.h>
diff --git a/s390x/Makefile b/s390x/Makefile
index e80add0..4e4b94a 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -15,6 +15,9 @@ LDFLAGS += -nostdlib
# We want to keep intermediate files
.PRECIOUS: %.o
+asm-offsets = lib/$(ARCH)/asm-offsets.h
+include $(SRCDIR)/scripts/asm-offsets.mak
+
cflatobjs += lib/util.o
cflatobjs += lib/alloc.o
cflatobjs += lib/s390x/io.o
@@ -33,5 +36,8 @@ FLATLIBS = $(libcflat)
$(filter %.o, $^) $(FLATLIBS) $(@:.elf=.aux.o)
$(RM) $(@:.elf=.aux.o)
-arch_clean:
+arch_clean: asm_offsets_clean
$(RM) $(TEST_DIR)/*.{o,elf} $(TEST_DIR)/.*.d lib/s390x/.*.d
+
+generated-files = $(asm-offsets)
+$(test_cases:.elf=.o) $(cstart.o) $(cflatobjs): $(generated-files)
--
2.9.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [kvm-unit-tests PATCH v1] s390x: generate asm offsets for the lowcore
2017-05-29 11:06 [kvm-unit-tests PATCH v1] s390x: generate asm offsets for the lowcore David Hildenbrand
@ 2017-05-29 11:07 ` Paolo Bonzini
2017-05-29 11:08 ` David Hildenbrand
2017-05-29 15:53 ` Thomas Huth
1 sibling, 1 reply; 5+ messages in thread
From: Paolo Bonzini @ 2017-05-29 11:07 UTC (permalink / raw)
To: David Hildenbrand, kvm
Cc: Radim Krčmář, Thomas Huth, Christian Borntraeger
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 <david@redhat.com>
> ---
> lib/s390x/asm-offsets.c | 70 +++++++++++++++++++++++++++++++++++++
> lib/s390x/asm/arch_def.h | 85 +++++++++++++++++++++++++++++++++++++++++++++
> lib/s390x/asm/asm-offsets.h | 10 ++++++
> s390x/Makefile | 8 ++++-
> 4 files changed, 172 insertions(+), 1 deletion(-)
> create mode 100644 lib/s390x/asm-offsets.c
> create mode 100644 lib/s390x/asm/arch_def.h
> create mode 100644 lib/s390x/asm/asm-offsets.h
Can you remind me of this patch when you add the first user?
Thanks,
Paolo
> diff --git a/lib/s390x/asm-offsets.c b/lib/s390x/asm-offsets.c
> new file mode 100644
> index 0000000..28915e5
> --- /dev/null
> +++ b/lib/s390x/asm-offsets.c
> @@ -0,0 +1,70 @@
> +/*
> + * Copyright (c) 2017 Red Hat Inc
> + *
> + * Authors:
> + * David Hildenbrand <david@redhat.com>
> + *
> + * 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.
> + */
> +#include <libcflat.h>
> +#include <kbuild.h>
> +#include <asm/arch_def.h>
> +
> +int main(void)
> +{
> + OFFSET(GEN_LC_EXT_INT_PARAM, lowcore, ext_int_param);
> + OFFSET(GEN_LC_CPU_ADDR, lowcore, cpu_addr);
> + OFFSET(GEN_LC_EXT_INT_CODE, lowcore, ext_int_code);
> + OFFSET(GEN_LC_SVC_INT_ID, lowcore, svc_int_id);
> + OFFSET(GEN_LC_SVC_INT_CODE, lowcore, svc_int_code);
> + OFFSET(GEN_LC_PGM_INT_ID, lowcore, pgm_int_id);
> + OFFSET(GEN_LC_PGM_INT_CODE, lowcore, pgm_int_code);
> + OFFSET(GEN_LC_DXC_VXC, lowcore, dxc_vxc);
> + OFFSET(GEN_LC_MON_CLASS_NB, lowcore, mon_class_nb);
> + OFFSET(GEN_LC_PER_CODE, lowcore, per_code);
> + OFFSET(GEN_LC_PER_ATMID, lowcore, per_atmid);
> + OFFSET(GEN_LC_PER_ADDR, lowcore, per_addr);
> + OFFSET(GEN_LC_EXC_ACC_ID, lowcore, exc_acc_id);
> + OFFSET(GEN_LC_PER_ACC_ID, lowcore, per_acc_id);
> + OFFSET(GEN_LC_OP_ACC_ID, lowcore, op_acc_id);
> + OFFSET(GEN_LC_ARCH_MODE_ID, lowcore, arch_mode_id);
> + OFFSET(GEN_LC_TRANS_EXC_ID, lowcore, trans_exc_id);
> + OFFSET(GEN_LC_MON_CODE, lowcore, mon_code);
> + OFFSET(GEN_LC_SUBSYS_ID_WORD, lowcore, subsys_id_word);
> + OFFSET(GEN_LC_IO_INT_PARAM, lowcore, io_int_param);
> + OFFSET(GEN_LC_IO_INT_WORD, lowcore, io_int_word);
> + OFFSET(GEN_LC_STFL, lowcore, stfl);
> + OFFSET(GEN_LC_MCCK_INT_CODE, lowcore, mcck_int_code);
> + OFFSET(GEN_LC_EXT_DAMAGE_CODE, lowcore, ext_damage_code);
> + OFFSET(GEN_LC_FAILING_STORAGE_ADDR, lowcore, failing_storage_addr);
> + OFFSET(GEN_LC_EMON_CA_ORIGIN, lowcore, emon_ca_origin);
> + OFFSET(GEN_LC_EMON_CA_SIZE, lowcore, emon_ca_size);
> + OFFSET(GEN_LC_EMON_EXC_COUNT, lowcore, emon_exc_count);
> + OFFSET(GEN_LC_BREAKING_EVENT_ADDR, lowcore, breaking_event_addr);
> + OFFSET(GEN_LC_RESTART_OLD_PSW, lowcore, restart_old_psw);
> + OFFSET(GEN_LC_EXT_OLD_PSW, lowcore, ext_old_psw);
> + OFFSET(GEN_LC_SVC_OLD_PSW, lowcore, svc_old_psw);
> + OFFSET(GEN_LC_PGM_OLD_PSW, lowcore, pgm_old_psw);
> + OFFSET(GEN_LC_MCCK_OLD_PSW, lowcore, mcck_old_psw);
> + OFFSET(GEN_LC_IO_OLD_PSW, lowcore, io_old_psw);
> + OFFSET(GEN_LC_RESTART_NEW_PSW, lowcore, restart_new_psw);
> + OFFSET(GEN_LC_EXT_NEW_PSW, lowcore, ext_new_psw);
> + OFFSET(GEN_LC_SVC_NEW_PSW, lowcore, svc_new_psw);
> + OFFSET(GEN_LC_PGM_NEW_PSW, lowcore, pgm_new_psw);
> + OFFSET(GEN_LC_MCCK_NEW_PSW, lowcore, mcck_new_psw);
> + OFFSET(GEN_LC_IO_NEW_PSW, lowcore, io_new_psw);
> + OFFSET(GEN_LC_FPRS_SA, lowcore, fprs_sa);
> + OFFSET(GEN_LC_GRS_SA, lowcore, grs_sa);
> + OFFSET(GEN_LC_PSW_SA, lowcore, psw_sa);
> + OFFSET(GEN_LC_PREFIX_SA, lowcore, prefix_sa);
> + OFFSET(GEN_LC_FPC_SA, lowcore, fpc_sa);
> + OFFSET(GEN_LC_TOD_PR_SA, lowcore, tod_pr_sa);
> + OFFSET(GEN_LC_CPUTM_SA, lowcore, cputm_sa);
> + OFFSET(GEN_LC_CC_SA, lowcore, cc_sa);
> + OFFSET(GEN_LC_ARS_SA, lowcore, ars_sa);
> + OFFSET(GEN_LC_CRS_SA, lowcore, crs_sa);
> + OFFSET(GEN_LC_PGM_INT_TDB, lowcore, pgm_int_tdb);
> +
> + return 0;
> +}
> 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 <david@redhat.com>
> + *
> + * 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__));
> +
> +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 */
> + 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
> diff --git a/lib/s390x/asm/asm-offsets.h b/lib/s390x/asm/asm-offsets.h
> new file mode 100644
> index 0000000..a6d7af8
> --- /dev/null
> +++ b/lib/s390x/asm/asm-offsets.h
> @@ -0,0 +1,10 @@
> +/*
> + * Copyright (c) 2017 Red Hat Inc
> + *
> + * Authors:
> + * David Hildenbrand <david@redhat.com>
> + *
> + * 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.
> + */
> +#include <generated/asm-offsets.h>
> diff --git a/s390x/Makefile b/s390x/Makefile
> index e80add0..4e4b94a 100644
> --- a/s390x/Makefile
> +++ b/s390x/Makefile
> @@ -15,6 +15,9 @@ LDFLAGS += -nostdlib
> # We want to keep intermediate files
> .PRECIOUS: %.o
>
> +asm-offsets = lib/$(ARCH)/asm-offsets.h
> +include $(SRCDIR)/scripts/asm-offsets.mak
> +
> cflatobjs += lib/util.o
> cflatobjs += lib/alloc.o
> cflatobjs += lib/s390x/io.o
> @@ -33,5 +36,8 @@ FLATLIBS = $(libcflat)
> $(filter %.o, $^) $(FLATLIBS) $(@:.elf=.aux.o)
> $(RM) $(@:.elf=.aux.o)
>
> -arch_clean:
> +arch_clean: asm_offsets_clean
> $(RM) $(TEST_DIR)/*.{o,elf} $(TEST_DIR)/.*.d lib/s390x/.*.d
> +
> +generated-files = $(asm-offsets)
> +$(test_cases:.elf=.o) $(cstart.o) $(cflatobjs): $(generated-files)
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [kvm-unit-tests PATCH v1] s390x: generate asm offsets for the lowcore
2017-05-29 11:07 ` Paolo Bonzini
@ 2017-05-29 11:08 ` David Hildenbrand
0 siblings, 0 replies; 5+ messages in thread
From: David Hildenbrand @ 2017-05-29 11:08 UTC (permalink / raw)
To: Paolo Bonzini, kvm
Cc: Radim Krčmář, Thomas Huth, Christian Borntraeger
On 29.05.2017 13:07, Paolo Bonzini wrote:
>
>
> 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 <david@redhat.com>
>> ---
>> lib/s390x/asm-offsets.c | 70 +++++++++++++++++++++++++++++++++++++
>> lib/s390x/asm/arch_def.h | 85 +++++++++++++++++++++++++++++++++++++++++++++
>> lib/s390x/asm/asm-offsets.h | 10 ++++++
>> s390x/Makefile | 8 ++++-
>> 4 files changed, 172 insertions(+), 1 deletion(-)
>> create mode 100644 lib/s390x/asm-offsets.c
>> create mode 100644 lib/s390x/asm/arch_def.h
>> create mode 100644 lib/s390x/asm/asm-offsets.h
>
> Can you remind me of this patch when you add the first user?
>
Sure, that one should pop up either today or tomorrow!
Thanks!
> Thanks,
>
> Paolo
>
--
Thanks,
David
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [kvm-unit-tests PATCH v1] s390x: generate asm offsets for the lowcore
2017-05-29 11:06 [kvm-unit-tests PATCH v1] s390x: generate asm offsets for the lowcore David Hildenbrand
2017-05-29 11:07 ` Paolo Bonzini
@ 2017-05-29 15:53 ` Thomas Huth
2017-05-29 16:33 ` David Hildenbrand
1 sibling, 1 reply; 5+ messages in thread
From: Thomas Huth @ 2017-05-29 15:53 UTC (permalink / raw)
To: David Hildenbrand, kvm
Cc: Paolo Bonzini, Radim Krčmář, Christian Borntraeger
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 <david@redhat.com>
> ---
[...]
> 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 <david@redhat.com>
> + *
> + * 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 <thuth@redhat.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [kvm-unit-tests PATCH v1] s390x: generate asm offsets for the lowcore
2017-05-29 15:53 ` Thomas Huth
@ 2017-05-29 16:33 ` David Hildenbrand
0 siblings, 0 replies; 5+ messages in thread
From: David Hildenbrand @ 2017-05-29 16:33 UTC (permalink / raw)
To: Thomas Huth, kvm
Cc: Paolo Bonzini, Radim Krčmář, Christian Borntraeger
On 29.05.2017 17:53, Thomas Huth wrote:
> 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 <david@redhat.com>
>> ---
> [...]
>> 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 <david@redhat.com>
>> + *
>> + * 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.
Okay, will drop it.
>
>> +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?
>
Thanks, missed that as it does not appear in the table below that
section. Will add it.
>> + 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 <thuth@redhat.com>
>
Thanks!
--
Thanks,
David
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-05-29 16:33 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-29 11:06 [kvm-unit-tests PATCH v1] s390x: generate asm offsets for the lowcore David Hildenbrand
2017-05-29 11:07 ` Paolo Bonzini
2017-05-29 11:08 ` David Hildenbrand
2017-05-29 15:53 ` Thomas Huth
2017-05-29 16:33 ` David Hildenbrand
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.