All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.