public inbox for linux-s390@vger.kernel.org
 help / color / mirror / Atom feed
* [kvm-unit-tests PATCH 0/4] s390x: split off snippet and sie related code
@ 2024-07-18 10:50 Janosch Frank
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 1/4] s390x: Split snippet makefile rules into new file Janosch Frank
                   ` (3 more replies)
  0 siblings, 4 replies; 16+ messages in thread
From: Janosch Frank @ 2024-07-18 10:50 UTC (permalink / raw)
  To: kvm; +Cc: linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

The makefile is getting long and increasingly complex. Let's move the
snippet part to s390x/snippets/ and sprinkle a couple comments on top.

While we're moving things around we can split lib/s390x/sie.h into sie
architecture code and sie library code and split the sie assembly in
cpu.S into its own file.

Janosch Frank (4):
  s390x: Split snippet makefile rules into new file
  s390x/Makefile: Add more comments
  s390x: Move SIE assembly into new file
  lib: s390x: Split SIE fw structs from lib structs

 lib/s390x/{sie.h => asm/sie-arch.h} |  58 +------
 lib/s390x/sie.h                     | 231 +---------------------------
 s390x/Makefile                      |  41 ++---
 s390x/{cpu.S => cpu-sie.S}          |  59 +------
 s390x/cpu.S                         |  64 --------
 s390x/snippets/Makefile             |  30 ++++
 6 files changed, 45 insertions(+), 438 deletions(-)
 copy lib/s390x/{sie.h => asm/sie-arch.h} (81%)
 copy s390x/{cpu.S => cpu-sie.S} (56%)
 create mode 100644 s390x/snippets/Makefile

-- 
2.43.0


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [kvm-unit-tests PATCH 1/4] s390x: Split snippet makefile rules into new file
  2024-07-18 10:50 [kvm-unit-tests PATCH 0/4] s390x: split off snippet and sie related code Janosch Frank
@ 2024-07-18 10:50 ` Janosch Frank
  2024-07-25 14:27   ` Christoph Schlameuss
  2024-07-25 14:35   ` Claudio Imbrenda
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 2/4] s390x/Makefile: Add more comments Janosch Frank
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 16+ messages in thread
From: Janosch Frank @ 2024-07-18 10:50 UTC (permalink / raw)
  To: kvm; +Cc: linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

It's time to move the snippet related Makefile parts into a new file
to make s390x/Makefile less busy.

Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
 s390x/Makefile          | 34 ++++------------------------------
 s390x/snippets/Makefile | 30 ++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 30 deletions(-)
 create mode 100644 s390x/snippets/Makefile

diff --git a/s390x/Makefile b/s390x/Makefile
index c5c6f92c..2933b452 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -120,9 +120,11 @@ asmlib = $(TEST_DIR)/cstart64.o $(TEST_DIR)/cpu.o
 
 FLATLIBS = $(libcflat)
 
+# Snippets
 SNIPPET_DIR = $(TEST_DIR)/snippets
 snippet_asmlib = $(SNIPPET_DIR)/c/cstart.o
 snippet_lib = $(snippet_asmlib) lib/auxinfo.o
+include $(SNIPPET_DIR)/Makefile
 
 # perquisites (=guests) for the snippet hosts.
 # $(TEST_DIR)/<snippet-host>.elf: snippets = $(SNIPPET_DIR)/<c/asm>/<snippet>.gbin
@@ -148,34 +150,6 @@ else
 snippet-hdr-obj =
 endif
 
-# the asm/c snippets %.o have additional generated files as dependencies
-$(SNIPPET_DIR)/asm/%.o: $(SNIPPET_DIR)/asm/%.S $(asm-offsets)
-	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
-
-$(SNIPPET_DIR)/c/%.o: $(SNIPPET_DIR)/c/%.c $(asm-offsets)
-	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
-
-$(SNIPPET_DIR)/asm/%.gbin: $(SNIPPET_DIR)/asm/%.o $(SNIPPET_DIR)/asm/flat.lds
-	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/asm/flat.lds $<
-	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
-	truncate -s '%4096' $@
-
-$(SNIPPET_DIR)/c/%.gbin: $(SNIPPET_DIR)/c/%.o $(snippet_lib) $(FLATLIBS) $(SNIPPET_DIR)/c/flat.lds
-	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/c/flat.lds $< $(snippet_lib) $(FLATLIBS)
-	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
-	truncate -s '%4096' $@
-
-%.hdr: %.gbin $(HOST_KEY_DOCUMENT)
-	$(GEN_SE_HEADER) -k $(HOST_KEY_DOCUMENT) -c $<,0x0,0x00000000000000420000000000000000 --psw-addr 0x4000 -o $@
-
-.SECONDARY:
-%.gobj: %.gbin
-	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
-
-.SECONDARY:
-%.hdr.obj: %.hdr
-	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
-
 lds-autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d -MT $@
 %.lds: %.lds.S $(asm-offsets)
 	$(CPP) $(lds-autodepend-flags) $(CPPFLAGS) -P -C -o $@ $<
@@ -229,8 +203,8 @@ $(snippet_asmlib): $$(patsubst %.o,%.S,$$@) $(asm-offsets)
 	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
 
 
-arch_clean: asm_offsets_clean
-	$(RM) $(TEST_DIR)/*.{o,elf,bin,lds} $(SNIPPET_DIR)/*/*.{o,elf,*bin,*obj,hdr,lds} $(SNIPPET_DIR)/asm/.*.d $(TEST_DIR)/.*.d lib/s390x/.*.d $(comm-key)
+arch_clean: asm_offsets_clean snippet_clean
+	$(RM) $(TEST_DIR)/*.{o,elf,bin,lds} $(TEST_DIR)/.*.d lib/s390x/.*.d $(comm-key)
 
 generated-files = $(asm-offsets)
 $(tests:.elf=.o) $(asmlib) $(cflatobjs): $(generated-files)
diff --git a/s390x/snippets/Makefile b/s390x/snippets/Makefile
new file mode 100644
index 00000000..a1c479f6
--- /dev/null
+++ b/s390x/snippets/Makefile
@@ -0,0 +1,30 @@
+# the asm/c snippets %.o have additional generated files as dependencies
+$(SNIPPET_DIR)/asm/%.o: $(SNIPPET_DIR)/asm/%.S $(asm-offsets)
+	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
+
+$(SNIPPET_DIR)/c/%.o: $(SNIPPET_DIR)/c/%.c $(asm-offsets)
+	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
+
+$(SNIPPET_DIR)/asm/%.gbin: $(SNIPPET_DIR)/asm/%.o $(SNIPPET_DIR)/asm/flat.lds
+	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/asm/flat.lds $<
+	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
+	truncate -s '%4096' $@
+
+$(SNIPPET_DIR)/c/%.gbin: $(SNIPPET_DIR)/c/%.o $(snippet_lib) $(FLATLIBS) $(SNIPPET_DIR)/c/flat.lds
+	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/c/flat.lds $< $(snippet_lib) $(FLATLIBS)
+	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
+	truncate -s '%4096' $@
+
+%.hdr: %.gbin $(HOST_KEY_DOCUMENT)
+	$(GEN_SE_HEADER) -k $(HOST_KEY_DOCUMENT) -c $<,0x0,0x00000000000000420000000000000000 --psw-addr 0x4000 -o $@
+
+.SECONDARY:
+%.gobj: %.gbin
+	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
+
+.SECONDARY:
+%.hdr.obj: %.hdr
+	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
+
+snippet_clean:
+	$(RM) $(SNIPPET_DIR)/*/*.{o,elf,*bin,*obj,hdr,lds} $(SNIPPET_DIR)/asm/.*.d
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [kvm-unit-tests PATCH 2/4] s390x/Makefile: Add more comments
  2024-07-18 10:50 [kvm-unit-tests PATCH 0/4] s390x: split off snippet and sie related code Janosch Frank
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 1/4] s390x: Split snippet makefile rules into new file Janosch Frank
@ 2024-07-18 10:50 ` Janosch Frank
  2024-07-25 14:30   ` Christoph Schlameuss
  2024-07-25 14:34   ` Claudio Imbrenda
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 3/4] s390x: Move SIE assembly into new file Janosch Frank
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 4/4] lib: s390x: Split SIE fw structs from lib structs Janosch Frank
  3 siblings, 2 replies; 16+ messages in thread
From: Janosch Frank @ 2024-07-18 10:50 UTC (permalink / raw)
  To: kvm; +Cc: linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

More comments in Makefiles can only make them more approachable.

Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
 s390x/Makefile | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/s390x/Makefile b/s390x/Makefile
index 2933b452..457b8455 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -50,12 +50,15 @@ pv-tests += $(TEST_DIR)/pv-icptcode.elf
 pv-tests += $(TEST_DIR)/pv-ipl.elf
 pv-tests += $(TEST_DIR)/pv-edat1.elf
 
+# Add PV host tests if we're able to generate them
+# The host key document and a tool to generate SE headers are the prerequisite
 ifneq ($(HOST_KEY_DOCUMENT),)
 ifneq ($(GEN_SE_HEADER),)
 tests += $(pv-tests)
 endif
 endif
 
+# Add binary flat images for use in non-KVM hypervisors
 tests_binary = $(patsubst %.elf,%.bin,$(tests))
 ifneq ($(HOST_KEY_DOCUMENT),)
 tests_pv_binary = $(patsubst %.bin,%.pv.bin,$(tests_binary))
@@ -142,6 +145,7 @@ $(TEST_DIR)/pv-icptcode.elf: pv-snippets += $(SNIPPET_DIR)/asm/pv-icpt-vir-timin
 $(TEST_DIR)/pv-ipl.elf: pv-snippets += $(SNIPPET_DIR)/asm/pv-diag-308.gbin
 $(TEST_DIR)/pv-edat1.elf: pv-snippets += $(SNIPPET_DIR)/c/pv-memhog.gbin
 
+# Add PV tests and snippets if GEN_SE_HEADER is set
 ifneq ($(GEN_SE_HEADER),)
 snippets += $(pv-snippets)
 tests += $(pv-tests)
@@ -150,6 +154,7 @@ else
 snippet-hdr-obj =
 endif
 
+# Generate loader script
 lds-autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d -MT $@
 %.lds: %.lds.S $(asm-offsets)
 	$(CPP) $(lds-autodepend-flags) $(CPPFLAGS) -P -C -o $@ $<
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [kvm-unit-tests PATCH 3/4] s390x: Move SIE assembly into new file
  2024-07-18 10:50 [kvm-unit-tests PATCH 0/4] s390x: split off snippet and sie related code Janosch Frank
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 1/4] s390x: Split snippet makefile rules into new file Janosch Frank
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 2/4] s390x/Makefile: Add more comments Janosch Frank
@ 2024-07-18 10:50 ` Janosch Frank
  2024-07-25 14:34   ` Christoph Schlameuss
  2024-07-25 14:36   ` Claudio Imbrenda
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 4/4] lib: s390x: Split SIE fw structs from lib structs Janosch Frank
  3 siblings, 2 replies; 16+ messages in thread
From: Janosch Frank @ 2024-07-18 10:50 UTC (permalink / raw)
  To: kvm; +Cc: linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

In contrast to the other functions in cpu.S it's quite lengthy so
let's split it off.

Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
 s390x/Makefile             |  2 +-
 s390x/{cpu.S => cpu-sie.S} | 59 +----------------------------------
 s390x/cpu.S                | 64 --------------------------------------
 3 files changed, 2 insertions(+), 123 deletions(-)
 copy s390x/{cpu.S => cpu-sie.S} (56%)

diff --git a/s390x/Makefile b/s390x/Makefile
index 457b8455..ecf0bc7e 100644
--- a/s390x/Makefile
+++ b/s390x/Makefile
@@ -119,7 +119,7 @@ cflatobjs += lib/s390x/fault.o
 
 OBJDIRS += lib/s390x
 
-asmlib = $(TEST_DIR)/cstart64.o $(TEST_DIR)/cpu.o
+asmlib = $(TEST_DIR)/cstart64.o $(TEST_DIR)/cpu.o $(TEST_DIR)/cpu-sie.o
 
 FLATLIBS = $(libcflat)
 
diff --git a/s390x/cpu.S b/s390x/cpu-sie.S
similarity index 56%
copy from s390x/cpu.S
copy to s390x/cpu-sie.S
index 9155b044..9370b5c0 100644
--- a/s390x/cpu.S
+++ b/s390x/cpu-sie.S
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * s390x assembly library
+ * s390x SIE assembly library
  *
  * Copyright (c) 2019 IBM Corp.
  *
@@ -8,59 +8,6 @@
  *    Janosch Frank <frankja@linux.ibm.com>
  */
 #include <asm/asm-offsets.h>
-#include <asm/sigp.h>
-
-#include "macros.S"
-
-/*
- * load_reset calling convention:
- * %r2 subcode (0 or 1)
- */
-.globl diag308_load_reset
-diag308_load_reset:
-	SAVE_REGS_STACK
-	/* Backup current PSW mask, as we have to restore it on success */
-	epsw	%r0, %r1
-	st	%r0, GEN_LC_SW_INT_PSW
-	st	%r1, GEN_LC_SW_INT_PSW + 4
-	/* Load reset psw mask (short psw, 64 bit) */
-	lg	%r0, reset_psw
-	/* Load the success label address */
-	larl    %r1, 0f
-	/* Or it to the mask */
-	ogr	%r0, %r1
-	/* Store it at the reset PSW location (real 0x0) */
-	stg	%r0, 0
-	stg     %r15, GEN_LC_SW_INT_GRS + 15 * 8
-	/* Do the reset */
-	diag    %r0,%r2,0x308
-	/* Failure path */
-	xgr	%r2, %r2
-	br	%r14
-	/* Success path */
-	/* load a cr0 that has the AFP control bit which enables all FPRs */
-0:	larl	%r1, initial_cr0
-	lctlg	%c0, %c0, 0(%r1)
-	lg      %r15, GEN_LC_SW_INT_GRS + 15 * 8
-	RESTORE_REGS_STACK
-	lhi	%r2, 1
-	larl	%r0, 1f
-	stg	%r0, GEN_LC_SW_INT_PSW + 8
-	lpswe	GEN_LC_SW_INT_PSW
-1:	br	%r14
-
-/* Sets up general registers and cr0 when a new cpu is brought online. */
-.globl smp_cpu_setup_state
-smp_cpu_setup_state:
-	xgr	%r1, %r1
-	lmg     %r0, %r15, GEN_LC_SW_INT_GRS
-	lctlg   %c0, %c0, GEN_LC_SW_INT_CRS
-	/* We should only go once through cpu setup and not for every restart */
-	stg	%r14, GEN_LC_RESTART_NEW_PSW + 8
-	larl	%r14, 0f
-	lpswe	GEN_LC_SW_INT_PSW
-	/* If the function returns, just loop here */
-0:	j	0
 
 /*
  * sie64a calling convention:
@@ -125,7 +72,3 @@ sie_exit:
 .globl sie_exit_gregs
 sie_exit_gregs:
 	br	%r14
-
-	.align	8
-reset_psw:
-	.quad	0x0008000180000000
diff --git a/s390x/cpu.S b/s390x/cpu.S
index 9155b044..2ff4b8e1 100644
--- a/s390x/cpu.S
+++ b/s390x/cpu.S
@@ -62,70 +62,6 @@ smp_cpu_setup_state:
 	/* If the function returns, just loop here */
 0:	j	0
 
-/*
- * sie64a calling convention:
- * %r2 pointer to sie control block
- * %r3 guest register save area
- */
-.globl sie64a
-sie64a:
-	# Save host grs, fprs, fpc
-	stmg	%r0,%r14,SIE_SAVEAREA_HOST_GRS(%r3)	# save kernel registers
-	.irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-	std	\i, \i * 8  + SIE_SAVEAREA_HOST_FPRS(%r3)
-	.endr
-	stfpc	SIE_SAVEAREA_HOST_FPC(%r3)
-
-	stctg	%c1, %c1, SIE_SAVEAREA_HOST_ASCE(%r3)
-	lctlg	%c1, %c1, SIE_SAVEAREA_GUEST_ASCE(%r3)
-
-	# Store scb and save_area pointer into stack frame
-	stg	%r2,__SF_SIE_CONTROL(%r15)	# save control block pointer
-	stg	%r3,__SF_SIE_SAVEAREA(%r15)	# save guest register save area
-.globl sie_entry_gregs
-sie_entry_gregs:
-	# Load guest's gprs, fprs and fpc
-	.irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-	ld	\i, \i * 8 + SIE_SAVEAREA_GUEST_FPRS(%r3)
-	.endr
-	lfpc	SIE_SAVEAREA_GUEST_FPC(%r3)
-	lmg	%r0,%r13,SIE_SAVEAREA_GUEST_GRS(%r3)
-
-	# Move scb ptr into r14 for the sie instruction
-	lg	%r14,__SF_SIE_CONTROL(%r15)
-
-.globl sie_entry
-sie_entry:
-	sie	0(%r14)
-	nopr	7
-	nopr	7
-	nopr	7
-
-.globl sie_exit
-sie_exit:
-	# Load guest register save area
-	lg	%r14,__SF_SIE_SAVEAREA(%r15)
-
-	# Restore the host asce
-	lctlg	%c1, %c1, SIE_SAVEAREA_HOST_ASCE(%r14)
-
-	# Store guest's gprs, fprs and fpc
-	stmg	%r0,%r13,SIE_SAVEAREA_GUEST_GRS(%r14)	# save guest gprs 0-13
-	.irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-	std	\i, \i * 8  + SIE_SAVEAREA_GUEST_FPRS(%r14)
-	.endr
-	stfpc	SIE_SAVEAREA_GUEST_FPC(%r14)
-
-	# Restore host's gprs, fprs and fpc
-	.irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-	ld	\i, \i * 8 + SIE_SAVEAREA_HOST_FPRS(%r14)
-	.endr
-	lfpc	SIE_SAVEAREA_HOST_FPC(%r14)
-	lmg	%r0,%r14,SIE_SAVEAREA_HOST_GRS(%r14)	# restore kernel registers
-.globl sie_exit_gregs
-sie_exit_gregs:
-	br	%r14
-
 	.align	8
 reset_psw:
 	.quad	0x0008000180000000
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [kvm-unit-tests PATCH 4/4] lib: s390x: Split SIE fw structs from lib structs
  2024-07-18 10:50 [kvm-unit-tests PATCH 0/4] s390x: split off snippet and sie related code Janosch Frank
                   ` (2 preceding siblings ...)
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 3/4] s390x: Move SIE assembly into new file Janosch Frank
@ 2024-07-18 10:50 ` Janosch Frank
  2024-07-25 14:38   ` Christoph Schlameuss
  2024-07-25 14:40   ` Claudio Imbrenda
  3 siblings, 2 replies; 16+ messages in thread
From: Janosch Frank @ 2024-07-18 10:50 UTC (permalink / raw)
  To: kvm; +Cc: linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

The SIE control block is huge and takes up too much space.

Additionally sie.h will now only contain sie lib structs and
declarations so we have a clear divide about which header contains
which things.

Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
---
 lib/s390x/{sie.h => asm/sie-arch.h} |  58 +------
 lib/s390x/sie.h                     | 231 +---------------------------
 2 files changed, 4 insertions(+), 285 deletions(-)
 copy lib/s390x/{sie.h => asm/sie-arch.h} (81%)

diff --git a/lib/s390x/sie.h b/lib/s390x/asm/sie-arch.h
similarity index 81%
copy from lib/s390x/sie.h
copy to lib/s390x/asm/sie-arch.h
index c1724cf2..4911c988 100644
--- a/lib/s390x/sie.h
+++ b/lib/s390x/asm/sie-arch.h
@@ -1,6 +1,6 @@
 /* SPDX-License-Identifier: GPL-2.0-or-later */
-#ifndef _S390X_SIE_H_
-#define _S390X_SIE_H_
+#ifndef _S390X_SIE_ARCH_H_
+#define _S390X_SIE_ARCH_H_
 
 #include <stdint.h>
 #include <asm/arch_def.h>
@@ -235,56 +235,4 @@ struct esca_block {
 	struct esca_entry cpu[256];
 };
 
-struct vm_uv {
-	uint64_t vm_handle;
-	uint64_t vcpu_handle;
-	uint64_t asce;
-	void *conf_base_stor;
-	void *conf_var_stor;
-	void *cpu_stor;
-};
-
-struct vm_save_regs {
-	uint64_t asce;
-	uint64_t grs[16];
-	uint64_t fprs[16];
-	uint32_t fpc;
-};
-
-/* We might be able to nestle all of this into the stack frame. But
- * having a dedicated save area that saves more than the s390 ELF ABI
- * defines leaves us more freedom in the implementation.
-*/
-struct vm_save_area {
-	struct vm_save_regs guest;
-	struct vm_save_regs host;
-};
-
-struct vm {
-	struct kvm_s390_sie_block *sblk;
-	struct vm_save_area save_area;
-	struct esca_block *sca;			/* System Control Area */
-	uint8_t *crycb;				/* Crypto Control Block */
-	struct vm_uv uv;			/* PV UV information */
-	/* Ptr to first guest page */
-	uint8_t *guest_mem;
-	bool validity_expected;
-};
-
-extern void sie_entry(void);
-extern void sie_exit(void);
-extern void sie_entry_gregs(void);
-extern void sie_exit_gregs(void);
-extern void sie64a(struct kvm_s390_sie_block *sblk, struct vm_save_area *save_area);
-void sie(struct vm *vm);
-void sie_expect_validity(struct vm *vm);
-uint16_t sie_get_validity(struct vm *vm);
-void sie_check_validity(struct vm *vm, uint16_t vir_exp);
-void sie_handle_validity(struct vm *vm);
-void sie_guest_sca_create(struct vm *vm);
-void sie_guest_create(struct vm *vm, uint64_t guest_mem, uint64_t guest_mem_len);
-void sie_guest_destroy(struct vm *vm);
-
-uint8_t *sie_guest_alloc(uint64_t guest_size);
-
-#endif /* _S390X_SIE_H_ */
+#endif /* _S390X_SIE_ARCH_H_ */
diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h
index c1724cf2..f13e698f 100644
--- a/lib/s390x/sie.h
+++ b/lib/s390x/sie.h
@@ -4,236 +4,7 @@
 
 #include <stdint.h>
 #include <asm/arch_def.h>
-
-#define CPUSTAT_STOPPED    0x80000000
-#define CPUSTAT_WAIT       0x10000000
-#define CPUSTAT_ECALL_PEND 0x08000000
-#define CPUSTAT_STOP_INT   0x04000000
-#define CPUSTAT_IO_INT     0x02000000
-#define CPUSTAT_EXT_INT    0x01000000
-#define CPUSTAT_RUNNING    0x00800000
-#define CPUSTAT_RETAINED   0x00400000
-#define CPUSTAT_TIMING_SUB 0x00020000
-#define CPUSTAT_SIE_SUB    0x00010000
-#define CPUSTAT_RRF        0x00008000
-#define CPUSTAT_SLSV       0x00004000
-#define CPUSTAT_SLSR       0x00002000
-#define CPUSTAT_ZARCH      0x00000800
-#define CPUSTAT_MCDS       0x00000100
-#define CPUSTAT_KSS        0x00000200
-#define CPUSTAT_SM         0x00000080
-#define CPUSTAT_IBS        0x00000040
-#define CPUSTAT_GED2       0x00000010
-#define CPUSTAT_G          0x00000008
-#define CPUSTAT_GED        0x00000004
-#define CPUSTAT_J          0x00000002
-#define CPUSTAT_P          0x00000001
-
-struct kvm_s390_sie_block {
-	uint32_t 	cpuflags;		/* 0x0000 */
-	uint32_t : 1;			/* 0x0004 */
-	uint32_t 	prefix : 18;
-	uint32_t : 1;
-	uint32_t 	ibc : 12;
-	uint8_t		reserved08[4];		/* 0x0008 */
-#define PROG_IN_SIE (1<<0)
-	uint32_t	prog0c;			/* 0x000c */
-union {
-		uint8_t	reserved10[16];		/* 0x0010 */
-		struct {
-			uint64_t	pv_handle_cpu;
-			uint64_t	pv_handle_config;
-		};
-	};
-#define PROG_BLOCK_SIE	(1<<0)
-#define PROG_REQUEST	(1<<1)
-	uint32_t 	prog20;		/* 0x0020 */
-	uint8_t		reserved24[4];		/* 0x0024 */
-	uint64_t	cputm;			/* 0x0028 */
-	uint64_t	ckc;			/* 0x0030 */
-	uint64_t	epoch;			/* 0x0038 */
-	uint32_t	svcc;			/* 0x0040 */
-#define LCTL_CR0	0x8000
-#define LCTL_CR6	0x0200
-#define LCTL_CR9	0x0040
-#define LCTL_CR10	0x0020
-#define LCTL_CR11	0x0010
-#define LCTL_CR14	0x0002
-	uint16_t   	lctl;			/* 0x0044 */
-	int16_t		icpua;			/* 0x0046 */
-#define ICTL_OPEREXC	0x80000000
-#define ICTL_PINT	0x20000000
-#define ICTL_LPSW	0x00400000
-#define ICTL_STCTL	0x00040000
-#define ICTL_ISKE	0x00004000
-#define ICTL_SSKE	0x00002000
-#define ICTL_RRBE	0x00001000
-#define ICTL_TPROT	0x00000200
-	uint32_t	ictl;			/* 0x0048 */
-#define ECA_CEI		0x80000000
-#define ECA_IB		0x40000000
-#define ECA_SIGPI	0x10000000
-#define ECA_MVPGI	0x01000000
-#define ECA_AIV		0x00200000
-#define ECA_VX		0x00020000
-#define ECA_PROTEXCI	0x00002000
-#define ECA_APIE	0x00000008
-#define ECA_SII		0x00000001
-	uint32_t	eca;			/* 0x004c */
-#define ICPT_INST	0x04
-#define ICPT_PROGI	0x08
-#define ICPT_INSTPROGI	0x0C
-#define ICPT_EXTREQ	0x10
-#define ICPT_EXTINT	0x14
-#define ICPT_IOREQ	0x18
-#define ICPT_WAIT	0x1c
-#define ICPT_VALIDITY	0x20
-#define ICPT_STOP	0x28
-#define ICPT_OPEREXC	0x2C
-#define ICPT_PARTEXEC	0x38
-#define ICPT_IOINST	0x40
-#define ICPT_KSS	0x5c
-#define ICPT_INT_ENABLE	0x64
-#define ICPT_PV_INSTR	0x68
-#define ICPT_PV_NOTIFY	0x6c
-#define ICPT_PV_PREF	0x70
-	uint8_t		icptcode;		/* 0x0050 */
-	uint8_t		icptstatus;		/* 0x0051 */
-	uint16_t	ihcpu;			/* 0x0052 */
-	uint8_t		reserved54;		/* 0x0054 */
-#define IICTL_CODE_NONE		 0x00
-#define IICTL_CODE_MCHK		 0x01
-#define IICTL_CODE_EXT		 0x02
-#define IICTL_CODE_IO		 0x03
-#define IICTL_CODE_RESTART	 0x04
-#define IICTL_CODE_SPECIFICATION 0x10
-#define IICTL_CODE_OPERAND	 0x11
-	uint8_t		iictl;			/* 0x0055 */
-	uint16_t	ipa;			/* 0x0056 */
-	uint32_t	ipb;			/* 0x0058 */
-	uint32_t	scaoh;			/* 0x005c */
-#define FPF_BPBC 	0x20
-	uint8_t		fpf;			/* 0x0060 */
-#define ECB_GS		0x40
-#define ECB_TE		0x10
-#define ECB_SPECI	0x08
-#define ECB_SRSI	0x04
-#define ECB_HOSTPROTINT	0x02
-	uint8_t		ecb;			/* 0x0061 */
-#define ECB2_CMMA	0x80
-#define ECB2_IEP	0x20
-#define ECB2_PFMFI	0x08
-#define ECB2_ESCA	0x04
-	uint8_t    	ecb2;                   /* 0x0062 */
-#define ECB3_DEA 0x08
-#define ECB3_AES 0x04
-#define ECB3_RI  0x01
-	uint8_t    	ecb3;			/* 0x0063 */
-	uint32_t	scaol;			/* 0x0064 */
-	uint8_t		sdf;			/* 0x0068 */
-	uint8_t    	epdx;			/* 0x0069 */
-	uint8_t    	reserved6a[2];		/* 0x006a */
-	uint32_t	todpr;			/* 0x006c */
-#define GISA_FORMAT1 0x00000001
-	uint32_t	gd;			/* 0x0070 */
-	uint8_t		reserved74[12];		/* 0x0074 */
-	uint64_t	mso;			/* 0x0080 */
-	uint64_t	msl;			/* 0x0088 */
-	struct psw	gpsw;			/* 0x0090 */
-	uint64_t	gg14;			/* 0x00a0 */
-	uint64_t	gg15;			/* 0x00a8 */
-	uint8_t		reservedb0[8];		/* 0x00b0 */
-#define HPID_KVM	0x4
-#define HPID_VSIE	0x5
-	uint8_t		hpid;			/* 0x00b8 */
-	uint8_t		reservedb9[7];		/* 0x00b9 */
-	union {
-		struct {
-			uint32_t	eiparams;	/* 0x00c0 */
-			uint16_t	extcpuaddr;	/* 0x00c4 */
-			uint16_t	eic;		/* 0x00c6 */
-		};
-		uint64_t	mcic;			/* 0x00c0 */
-	} __attribute__ ((__packed__));
-	uint32_t	reservedc8;		/* 0x00c8 */
-	uint16_t	pgmilc;			/* 0x00cc */
-	uint16_t	iprcc;			/* 0x00ce */
-	uint32_t	dxc;			/* 0x00d0 */
-	uint16_t	mcn;			/* 0x00d4 */
-	uint8_t		perc;			/* 0x00d6 */
-	uint8_t		peratmid;		/* 0x00d7 */
-	uint64_t	peraddr;		/* 0x00d8 */
-	uint8_t		eai;			/* 0x00e0 */
-	uint8_t		peraid;			/* 0x00e1 */
-	uint8_t		oai;			/* 0x00e2 */
-	uint8_t		armid;			/* 0x00e3 */
-	uint8_t		reservede4[4];		/* 0x00e4 */
-	uint64_t	tecmc;			/* 0x00e8 */
-	uint8_t		reservedf0[12];		/* 0x00f0 */
-#define CRYCB_FORMAT_MASK 0x00000003
-#define CRYCB_FORMAT0 0x00000000
-#define CRYCB_FORMAT1 0x00000001
-#define CRYCB_FORMAT2 0x00000003
-	uint32_t	crycbd;			/* 0x00fc */
-	uint64_t	gcr[16];		/* 0x0100 */
-	union {
-		uint64_t	gbea;			/* 0x0180 */
-		uint64_t	sidad;
-	};
-	uint8_t		reserved188[8];		/* 0x0188 */
-	uint64_t   	sdnxo;			/* 0x0190 */
-	uint8_t    	reserved198[8];		/* 0x0198 */
-	uint32_t	fac;			/* 0x01a0 */
-	uint8_t		reserved1a4[20];	/* 0x01a4 */
-	uint64_t	cbrlo;			/* 0x01b8 */
-	uint8_t		reserved1c0[8];		/* 0x01c0 */
-#define ECD_HOSTREGMGMT	0x20000000
-#define ECD_MEF		0x08000000
-#define ECD_ETOKENF	0x02000000
-#define ECD_ECC		0x00200000
-	uint32_t	ecd;			/* 0x01c8 */
-	uint8_t		reserved1cc[18];	/* 0x01cc */
-	uint64_t	pp;			/* 0x01de */
-	uint8_t		reserved1e6[2];		/* 0x01e6 */
-	uint64_t	itdba;			/* 0x01e8 */
-	uint64_t   	riccbd;			/* 0x01f0 */
-	uint64_t	gvrd;			/* 0x01f8 */
-	uint64_t	reserved200[48];	/* 0x0200 */
-	uint64_t	pv_grregs[16];		/* 0x0380 */
-} __attribute__((packed));
-
-union esca_sigp_ctrl {
-	uint16_t value;
-	struct {
-		uint8_t c : 1;
-		uint8_t reserved: 7;
-		uint8_t scn;
-	};
-};
-
-struct esca_entry {
-	union esca_sigp_ctrl sigp_ctrl;
-	uint16_t   reserved1[3];
-	uint64_t   sda;
-	uint64_t   reserved2[6];
-};
-
-union ipte_control {
-	unsigned long val;
-	struct {
-		unsigned long k  : 1;
-		unsigned long kh : 31;
-		unsigned long kg : 32;
-	};
-};
-
-struct esca_block {
-	union ipte_control ipte_control;
-	uint64_t   reserved1[7];
-	uint64_t   mcn[4];
-	uint64_t   reserved2[20];
-	struct esca_entry cpu[256];
-};
+#include <asm/sie-arch.h>
 
 struct vm_uv {
 	uint64_t vm_handle;
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [kvm-unit-tests PATCH 1/4] s390x: Split snippet makefile rules into new file
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 1/4] s390x: Split snippet makefile rules into new file Janosch Frank
@ 2024-07-25 14:27   ` Christoph Schlameuss
  2024-08-02  9:34     ` Janosch Frank
  2024-07-25 14:35   ` Claudio Imbrenda
  1 sibling, 1 reply; 16+ messages in thread
From: Christoph Schlameuss @ 2024-07-25 14:27 UTC (permalink / raw)
  To: Janosch Frank; +Cc: kvm, linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

On Thu, 18 Jul 2024 10:50:16 +0000
Janosch Frank <frankja@linux.ibm.com> wrote:

> It's time to move the snippet related Makefile parts into a new file
> to make s390x/Makefile less busy.
> 
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
> ---
>  s390x/Makefile          | 34 ++++------------------------------
>  s390x/snippets/Makefile | 30 ++++++++++++++++++++++++++++++
>  2 files changed, 34 insertions(+), 30 deletions(-)
>  create mode 100644 s390x/snippets/Makefile

IMHO the commit message should start with "s390x/Makefile: Split snippet
makefile rules into new file" for more consistency.

With that fixed:
Reviewed-by: Christoph Schlameuss <schlameuss@linux.ibm.com>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [kvm-unit-tests PATCH 2/4] s390x/Makefile: Add more comments
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 2/4] s390x/Makefile: Add more comments Janosch Frank
@ 2024-07-25 14:30   ` Christoph Schlameuss
  2024-07-25 14:34   ` Claudio Imbrenda
  1 sibling, 0 replies; 16+ messages in thread
From: Christoph Schlameuss @ 2024-07-25 14:30 UTC (permalink / raw)
  To: Janosch Frank; +Cc: kvm, linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

On Thu, 18 Jul 2024 10:50:17 +0000
Janosch Frank <frankja@linux.ibm.com> wrote:

> More comments in Makefiles can only make them more approachable.
> 
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
> ---
>  s390x/Makefile | 5 +++++
>  1 file changed, 5 insertions(+)

Reviewed-by: Christoph Schlameuss <schlameuss@linux.ibm.com>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [kvm-unit-tests PATCH 3/4] s390x: Move SIE assembly into new file
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 3/4] s390x: Move SIE assembly into new file Janosch Frank
@ 2024-07-25 14:34   ` Christoph Schlameuss
  2024-08-02  9:33     ` Janosch Frank
  2024-07-25 14:36   ` Claudio Imbrenda
  1 sibling, 1 reply; 16+ messages in thread
From: Christoph Schlameuss @ 2024-07-25 14:34 UTC (permalink / raw)
  To: Janosch Frank; +Cc: kvm, linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

On Thu, 18 Jul 2024 10:50:18 +0000
Janosch Frank <frankja@linux.ibm.com> wrote:

> In contrast to the other functions in cpu.S it's quite lengthy so
> let's split it off.
> 
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
> ---
>  s390x/Makefile             |  2 +-
>  s390x/{cpu.S => cpu-sie.S} | 59 +----------------------------------
>  s390x/cpu.S                | 64 --------------------------------------
>  3 files changed, 2 insertions(+), 123 deletions(-)
>  copy s390x/{cpu.S => cpu-sie.S} (56%)

[...]

> diff --git a/s390x/cpu.S b/s390x/cpu-sie.S
> similarity index 56%
> copy from s390x/cpu.S
> copy to s390x/cpu-sie.S
> index 9155b044..9370b5c0 100644
> --- a/s390x/cpu.S
> +++ b/s390x/cpu-sie.S
> @@ -1,6 +1,6 @@
>  /* SPDX-License-Identifier: GPL-2.0-only */
>  /*
> - * s390x assembly library
> + * s390x SIE assembly library
>   *
>   * Copyright (c) 2019 IBM Corp.
>   *

Should we not also update the Copyright here? At least to 
"Copyright (c) 2019, 2024 IBM Corp."?

[...]

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [kvm-unit-tests PATCH 2/4] s390x/Makefile: Add more comments
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 2/4] s390x/Makefile: Add more comments Janosch Frank
  2024-07-25 14:30   ` Christoph Schlameuss
@ 2024-07-25 14:34   ` Claudio Imbrenda
  1 sibling, 0 replies; 16+ messages in thread
From: Claudio Imbrenda @ 2024-07-25 14:34 UTC (permalink / raw)
  To: Janosch Frank; +Cc: kvm, linux-s390, nrb, npiggin, nsg, mhartmay

On Thu, 18 Jul 2024 10:50:17 +0000
Janosch Frank <frankja@linux.ibm.com> wrote:

> More comments in Makefiles can only make them more approachable.
> 
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>

Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>

> ---
>  s390x/Makefile | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/s390x/Makefile b/s390x/Makefile
> index 2933b452..457b8455 100644
> --- a/s390x/Makefile
> +++ b/s390x/Makefile
> @@ -50,12 +50,15 @@ pv-tests += $(TEST_DIR)/pv-icptcode.elf
>  pv-tests += $(TEST_DIR)/pv-ipl.elf
>  pv-tests += $(TEST_DIR)/pv-edat1.elf
>  
> +# Add PV host tests if we're able to generate them
> +# The host key document and a tool to generate SE headers are the prerequisite
>  ifneq ($(HOST_KEY_DOCUMENT),)
>  ifneq ($(GEN_SE_HEADER),)
>  tests += $(pv-tests)
>  endif
>  endif
>  
> +# Add binary flat images for use in non-KVM hypervisors
>  tests_binary = $(patsubst %.elf,%.bin,$(tests))
>  ifneq ($(HOST_KEY_DOCUMENT),)
>  tests_pv_binary = $(patsubst %.bin,%.pv.bin,$(tests_binary))
> @@ -142,6 +145,7 @@ $(TEST_DIR)/pv-icptcode.elf: pv-snippets += $(SNIPPET_DIR)/asm/pv-icpt-vir-timin
>  $(TEST_DIR)/pv-ipl.elf: pv-snippets += $(SNIPPET_DIR)/asm/pv-diag-308.gbin
>  $(TEST_DIR)/pv-edat1.elf: pv-snippets += $(SNIPPET_DIR)/c/pv-memhog.gbin
>  
> +# Add PV tests and snippets if GEN_SE_HEADER is set
>  ifneq ($(GEN_SE_HEADER),)
>  snippets += $(pv-snippets)
>  tests += $(pv-tests)
> @@ -150,6 +154,7 @@ else
>  snippet-hdr-obj =
>  endif
>  
> +# Generate loader script
>  lds-autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d -MT $@
>  %.lds: %.lds.S $(asm-offsets)
>  	$(CPP) $(lds-autodepend-flags) $(CPPFLAGS) -P -C -o $@ $<


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [kvm-unit-tests PATCH 1/4] s390x: Split snippet makefile rules into new file
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 1/4] s390x: Split snippet makefile rules into new file Janosch Frank
  2024-07-25 14:27   ` Christoph Schlameuss
@ 2024-07-25 14:35   ` Claudio Imbrenda
  1 sibling, 0 replies; 16+ messages in thread
From: Claudio Imbrenda @ 2024-07-25 14:35 UTC (permalink / raw)
  To: Janosch Frank; +Cc: kvm, linux-s390, nrb, npiggin, nsg, mhartmay

On Thu, 18 Jul 2024 10:50:16 +0000
Janosch Frank <frankja@linux.ibm.com> wrote:

> It's time to move the snippet related Makefile parts into a new file
> to make s390x/Makefile less busy.
> 
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>

Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>

> ---
>  s390x/Makefile          | 34 ++++------------------------------
>  s390x/snippets/Makefile | 30 ++++++++++++++++++++++++++++++
>  2 files changed, 34 insertions(+), 30 deletions(-)
>  create mode 100644 s390x/snippets/Makefile
> 
> diff --git a/s390x/Makefile b/s390x/Makefile
> index c5c6f92c..2933b452 100644
> --- a/s390x/Makefile
> +++ b/s390x/Makefile
> @@ -120,9 +120,11 @@ asmlib = $(TEST_DIR)/cstart64.o $(TEST_DIR)/cpu.o
>  
>  FLATLIBS = $(libcflat)
>  
> +# Snippets
>  SNIPPET_DIR = $(TEST_DIR)/snippets
>  snippet_asmlib = $(SNIPPET_DIR)/c/cstart.o
>  snippet_lib = $(snippet_asmlib) lib/auxinfo.o
> +include $(SNIPPET_DIR)/Makefile
>  
>  # perquisites (=guests) for the snippet hosts.
>  # $(TEST_DIR)/<snippet-host>.elf: snippets = $(SNIPPET_DIR)/<c/asm>/<snippet>.gbin
> @@ -148,34 +150,6 @@ else
>  snippet-hdr-obj =
>  endif
>  
> -# the asm/c snippets %.o have additional generated files as dependencies
> -$(SNIPPET_DIR)/asm/%.o: $(SNIPPET_DIR)/asm/%.S $(asm-offsets)
> -	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
> -
> -$(SNIPPET_DIR)/c/%.o: $(SNIPPET_DIR)/c/%.c $(asm-offsets)
> -	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
> -
> -$(SNIPPET_DIR)/asm/%.gbin: $(SNIPPET_DIR)/asm/%.o $(SNIPPET_DIR)/asm/flat.lds
> -	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/asm/flat.lds $<
> -	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
> -	truncate -s '%4096' $@
> -
> -$(SNIPPET_DIR)/c/%.gbin: $(SNIPPET_DIR)/c/%.o $(snippet_lib) $(FLATLIBS) $(SNIPPET_DIR)/c/flat.lds
> -	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/c/flat.lds $< $(snippet_lib) $(FLATLIBS)
> -	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
> -	truncate -s '%4096' $@
> -
> -%.hdr: %.gbin $(HOST_KEY_DOCUMENT)
> -	$(GEN_SE_HEADER) -k $(HOST_KEY_DOCUMENT) -c $<,0x0,0x00000000000000420000000000000000 --psw-addr 0x4000 -o $@
> -
> -.SECONDARY:
> -%.gobj: %.gbin
> -	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
> -
> -.SECONDARY:
> -%.hdr.obj: %.hdr
> -	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
> -
>  lds-autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d -MT $@
>  %.lds: %.lds.S $(asm-offsets)
>  	$(CPP) $(lds-autodepend-flags) $(CPPFLAGS) -P -C -o $@ $<
> @@ -229,8 +203,8 @@ $(snippet_asmlib): $$(patsubst %.o,%.S,$$@) $(asm-offsets)
>  	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
>  
>  
> -arch_clean: asm_offsets_clean
> -	$(RM) $(TEST_DIR)/*.{o,elf,bin,lds} $(SNIPPET_DIR)/*/*.{o,elf,*bin,*obj,hdr,lds} $(SNIPPET_DIR)/asm/.*.d $(TEST_DIR)/.*.d lib/s390x/.*.d $(comm-key)
> +arch_clean: asm_offsets_clean snippet_clean
> +	$(RM) $(TEST_DIR)/*.{o,elf,bin,lds} $(TEST_DIR)/.*.d lib/s390x/.*.d $(comm-key)
>  
>  generated-files = $(asm-offsets)
>  $(tests:.elf=.o) $(asmlib) $(cflatobjs): $(generated-files)
> diff --git a/s390x/snippets/Makefile b/s390x/snippets/Makefile
> new file mode 100644
> index 00000000..a1c479f6
> --- /dev/null
> +++ b/s390x/snippets/Makefile
> @@ -0,0 +1,30 @@
> +# the asm/c snippets %.o have additional generated files as dependencies
> +$(SNIPPET_DIR)/asm/%.o: $(SNIPPET_DIR)/asm/%.S $(asm-offsets)
> +	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
> +
> +$(SNIPPET_DIR)/c/%.o: $(SNIPPET_DIR)/c/%.c $(asm-offsets)
> +	$(CC) $(CFLAGS) -c -nostdlib -o $@ $<
> +
> +$(SNIPPET_DIR)/asm/%.gbin: $(SNIPPET_DIR)/asm/%.o $(SNIPPET_DIR)/asm/flat.lds
> +	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/asm/flat.lds $<
> +	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
> +	truncate -s '%4096' $@
> +
> +$(SNIPPET_DIR)/c/%.gbin: $(SNIPPET_DIR)/c/%.o $(snippet_lib) $(FLATLIBS) $(SNIPPET_DIR)/c/flat.lds
> +	$(CC) $(LDFLAGS) -o $@ -T $(SNIPPET_DIR)/c/flat.lds $< $(snippet_lib) $(FLATLIBS)
> +	$(OBJCOPY) -O binary -j ".rodata" -j ".lowcore" -j ".text" -j ".data" -j ".bss" --set-section-flags .bss=alloc,load,contents $@ $@
> +	truncate -s '%4096' $@
> +
> +%.hdr: %.gbin $(HOST_KEY_DOCUMENT)
> +	$(GEN_SE_HEADER) -k $(HOST_KEY_DOCUMENT) -c $<,0x0,0x00000000000000420000000000000000 --psw-addr 0x4000 -o $@
> +
> +.SECONDARY:
> +%.gobj: %.gbin
> +	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
> +
> +.SECONDARY:
> +%.hdr.obj: %.hdr
> +	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
> +
> +snippet_clean:
> +	$(RM) $(SNIPPET_DIR)/*/*.{o,elf,*bin,*obj,hdr,lds} $(SNIPPET_DIR)/asm/.*.d


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [kvm-unit-tests PATCH 3/4] s390x: Move SIE assembly into new file
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 3/4] s390x: Move SIE assembly into new file Janosch Frank
  2024-07-25 14:34   ` Christoph Schlameuss
@ 2024-07-25 14:36   ` Claudio Imbrenda
  1 sibling, 0 replies; 16+ messages in thread
From: Claudio Imbrenda @ 2024-07-25 14:36 UTC (permalink / raw)
  To: Janosch Frank; +Cc: kvm, linux-s390, nrb, npiggin, nsg, mhartmay

On Thu, 18 Jul 2024 10:50:18 +0000
Janosch Frank <frankja@linux.ibm.com> wrote:

> In contrast to the other functions in cpu.S it's quite lengthy so
> let's split it off.
> 
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>

Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>

> ---
>  s390x/Makefile             |  2 +-
>  s390x/{cpu.S => cpu-sie.S} | 59 +----------------------------------
>  s390x/cpu.S                | 64 --------------------------------------
>  3 files changed, 2 insertions(+), 123 deletions(-)
>  copy s390x/{cpu.S => cpu-sie.S} (56%)
> 
> diff --git a/s390x/Makefile b/s390x/Makefile
> index 457b8455..ecf0bc7e 100644
> --- a/s390x/Makefile
> +++ b/s390x/Makefile
> @@ -119,7 +119,7 @@ cflatobjs += lib/s390x/fault.o
>  
>  OBJDIRS += lib/s390x
>  
> -asmlib = $(TEST_DIR)/cstart64.o $(TEST_DIR)/cpu.o
> +asmlib = $(TEST_DIR)/cstart64.o $(TEST_DIR)/cpu.o $(TEST_DIR)/cpu-sie.o
>  
>  FLATLIBS = $(libcflat)
>  
> diff --git a/s390x/cpu.S b/s390x/cpu-sie.S
> similarity index 56%
> copy from s390x/cpu.S
> copy to s390x/cpu-sie.S
> index 9155b044..9370b5c0 100644
> --- a/s390x/cpu.S
> +++ b/s390x/cpu-sie.S
> @@ -1,6 +1,6 @@
>  /* SPDX-License-Identifier: GPL-2.0-only */
>  /*
> - * s390x assembly library
> + * s390x SIE assembly library
>   *
>   * Copyright (c) 2019 IBM Corp.
>   *
> @@ -8,59 +8,6 @@
>   *    Janosch Frank <frankja@linux.ibm.com>
>   */
>  #include <asm/asm-offsets.h>
> -#include <asm/sigp.h>
> -
> -#include "macros.S"
> -
> -/*
> - * load_reset calling convention:
> - * %r2 subcode (0 or 1)
> - */
> -.globl diag308_load_reset
> -diag308_load_reset:
> -	SAVE_REGS_STACK
> -	/* Backup current PSW mask, as we have to restore it on success */
> -	epsw	%r0, %r1
> -	st	%r0, GEN_LC_SW_INT_PSW
> -	st	%r1, GEN_LC_SW_INT_PSW + 4
> -	/* Load reset psw mask (short psw, 64 bit) */
> -	lg	%r0, reset_psw
> -	/* Load the success label address */
> -	larl    %r1, 0f
> -	/* Or it to the mask */
> -	ogr	%r0, %r1
> -	/* Store it at the reset PSW location (real 0x0) */
> -	stg	%r0, 0
> -	stg     %r15, GEN_LC_SW_INT_GRS + 15 * 8
> -	/* Do the reset */
> -	diag    %r0,%r2,0x308
> -	/* Failure path */
> -	xgr	%r2, %r2
> -	br	%r14
> -	/* Success path */
> -	/* load a cr0 that has the AFP control bit which enables all FPRs */
> -0:	larl	%r1, initial_cr0
> -	lctlg	%c0, %c0, 0(%r1)
> -	lg      %r15, GEN_LC_SW_INT_GRS + 15 * 8
> -	RESTORE_REGS_STACK
> -	lhi	%r2, 1
> -	larl	%r0, 1f
> -	stg	%r0, GEN_LC_SW_INT_PSW + 8
> -	lpswe	GEN_LC_SW_INT_PSW
> -1:	br	%r14
> -
> -/* Sets up general registers and cr0 when a new cpu is brought online. */
> -.globl smp_cpu_setup_state
> -smp_cpu_setup_state:
> -	xgr	%r1, %r1
> -	lmg     %r0, %r15, GEN_LC_SW_INT_GRS
> -	lctlg   %c0, %c0, GEN_LC_SW_INT_CRS
> -	/* We should only go once through cpu setup and not for every restart */
> -	stg	%r14, GEN_LC_RESTART_NEW_PSW + 8
> -	larl	%r14, 0f
> -	lpswe	GEN_LC_SW_INT_PSW
> -	/* If the function returns, just loop here */
> -0:	j	0
>  
>  /*
>   * sie64a calling convention:
> @@ -125,7 +72,3 @@ sie_exit:
>  .globl sie_exit_gregs
>  sie_exit_gregs:
>  	br	%r14
> -
> -	.align	8
> -reset_psw:
> -	.quad	0x0008000180000000
> diff --git a/s390x/cpu.S b/s390x/cpu.S
> index 9155b044..2ff4b8e1 100644
> --- a/s390x/cpu.S
> +++ b/s390x/cpu.S
> @@ -62,70 +62,6 @@ smp_cpu_setup_state:
>  	/* If the function returns, just loop here */
>  0:	j	0
>  
> -/*
> - * sie64a calling convention:
> - * %r2 pointer to sie control block
> - * %r3 guest register save area
> - */
> -.globl sie64a
> -sie64a:
> -	# Save host grs, fprs, fpc
> -	stmg	%r0,%r14,SIE_SAVEAREA_HOST_GRS(%r3)	# save kernel registers
> -	.irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -	std	\i, \i * 8  + SIE_SAVEAREA_HOST_FPRS(%r3)
> -	.endr
> -	stfpc	SIE_SAVEAREA_HOST_FPC(%r3)
> -
> -	stctg	%c1, %c1, SIE_SAVEAREA_HOST_ASCE(%r3)
> -	lctlg	%c1, %c1, SIE_SAVEAREA_GUEST_ASCE(%r3)
> -
> -	# Store scb and save_area pointer into stack frame
> -	stg	%r2,__SF_SIE_CONTROL(%r15)	# save control block pointer
> -	stg	%r3,__SF_SIE_SAVEAREA(%r15)	# save guest register save area
> -.globl sie_entry_gregs
> -sie_entry_gregs:
> -	# Load guest's gprs, fprs and fpc
> -	.irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -	ld	\i, \i * 8 + SIE_SAVEAREA_GUEST_FPRS(%r3)
> -	.endr
> -	lfpc	SIE_SAVEAREA_GUEST_FPC(%r3)
> -	lmg	%r0,%r13,SIE_SAVEAREA_GUEST_GRS(%r3)
> -
> -	# Move scb ptr into r14 for the sie instruction
> -	lg	%r14,__SF_SIE_CONTROL(%r15)
> -
> -.globl sie_entry
> -sie_entry:
> -	sie	0(%r14)
> -	nopr	7
> -	nopr	7
> -	nopr	7
> -
> -.globl sie_exit
> -sie_exit:
> -	# Load guest register save area
> -	lg	%r14,__SF_SIE_SAVEAREA(%r15)
> -
> -	# Restore the host asce
> -	lctlg	%c1, %c1, SIE_SAVEAREA_HOST_ASCE(%r14)
> -
> -	# Store guest's gprs, fprs and fpc
> -	stmg	%r0,%r13,SIE_SAVEAREA_GUEST_GRS(%r14)	# save guest gprs 0-13
> -	.irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -	std	\i, \i * 8  + SIE_SAVEAREA_GUEST_FPRS(%r14)
> -	.endr
> -	stfpc	SIE_SAVEAREA_GUEST_FPC(%r14)
> -
> -	# Restore host's gprs, fprs and fpc
> -	.irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
> -	ld	\i, \i * 8 + SIE_SAVEAREA_HOST_FPRS(%r14)
> -	.endr
> -	lfpc	SIE_SAVEAREA_HOST_FPC(%r14)
> -	lmg	%r0,%r14,SIE_SAVEAREA_HOST_GRS(%r14)	# restore kernel registers
> -.globl sie_exit_gregs
> -sie_exit_gregs:
> -	br	%r14
> -
>  	.align	8
>  reset_psw:
>  	.quad	0x0008000180000000


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [kvm-unit-tests PATCH 4/4] lib: s390x: Split SIE fw structs from lib structs
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 4/4] lib: s390x: Split SIE fw structs from lib structs Janosch Frank
@ 2024-07-25 14:38   ` Christoph Schlameuss
  2024-07-25 14:40   ` Claudio Imbrenda
  1 sibling, 0 replies; 16+ messages in thread
From: Christoph Schlameuss @ 2024-07-25 14:38 UTC (permalink / raw)
  To: Janosch Frank; +Cc: kvm, linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

On Thu, 18 Jul 2024 10:50:19 +0000
Janosch Frank <frankja@linux.ibm.com> wrote:

> The SIE control block is huge and takes up too much space.
> 
> Additionally sie.h will now only contain sie lib structs and
> declarations so we have a clear divide about which header contains
> which things.
> 
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
> ---
>  lib/s390x/{sie.h => asm/sie-arch.h} |  58 +------
>  lib/s390x/sie.h                     | 231 +---------------------------
>  2 files changed, 4 insertions(+), 285 deletions(-)
>  copy lib/s390x/{sie.h => asm/sie-arch.h} (81%)

Reviewed-by: Christoph Schlameuss <schlameuss@linux.ibm.com>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [kvm-unit-tests PATCH 4/4] lib: s390x: Split SIE fw structs from lib structs
  2024-07-18 10:50 ` [kvm-unit-tests PATCH 4/4] lib: s390x: Split SIE fw structs from lib structs Janosch Frank
  2024-07-25 14:38   ` Christoph Schlameuss
@ 2024-07-25 14:40   ` Claudio Imbrenda
  1 sibling, 0 replies; 16+ messages in thread
From: Claudio Imbrenda @ 2024-07-25 14:40 UTC (permalink / raw)
  To: Janosch Frank; +Cc: kvm, linux-s390, nrb, npiggin, nsg, mhartmay

On Thu, 18 Jul 2024 10:50:19 +0000
Janosch Frank <frankja@linux.ibm.com> wrote:

> The SIE control block is huge and takes up too much space.

this is ok ^

> 
> Additionally sie.h will now only contain sie lib structs and
> declarations so we have a clear divide about which header contains
> which things.

the rest is a little confusing

maybe rephrase it to something like "split the hardware definitions
from sie.h into its own header, so that sie.h will only contain library
functions and structs"

> 
> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>

with the commit message fixed:
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>

> ---
>  lib/s390x/{sie.h => asm/sie-arch.h} |  58 +------
>  lib/s390x/sie.h                     | 231 +---------------------------
>  2 files changed, 4 insertions(+), 285 deletions(-)
>  copy lib/s390x/{sie.h => asm/sie-arch.h} (81%)
> 
> diff --git a/lib/s390x/sie.h b/lib/s390x/asm/sie-arch.h
> similarity index 81%
> copy from lib/s390x/sie.h
> copy to lib/s390x/asm/sie-arch.h
> index c1724cf2..4911c988 100644
> --- a/lib/s390x/sie.h
> +++ b/lib/s390x/asm/sie-arch.h
> @@ -1,6 +1,6 @@
>  /* SPDX-License-Identifier: GPL-2.0-or-later */
> -#ifndef _S390X_SIE_H_
> -#define _S390X_SIE_H_
> +#ifndef _S390X_SIE_ARCH_H_
> +#define _S390X_SIE_ARCH_H_
>  
>  #include <stdint.h>
>  #include <asm/arch_def.h>
> @@ -235,56 +235,4 @@ struct esca_block {
>  	struct esca_entry cpu[256];
>  };
>  
> -struct vm_uv {
> -	uint64_t vm_handle;
> -	uint64_t vcpu_handle;
> -	uint64_t asce;
> -	void *conf_base_stor;
> -	void *conf_var_stor;
> -	void *cpu_stor;
> -};
> -
> -struct vm_save_regs {
> -	uint64_t asce;
> -	uint64_t grs[16];
> -	uint64_t fprs[16];
> -	uint32_t fpc;
> -};
> -
> -/* We might be able to nestle all of this into the stack frame. But
> - * having a dedicated save area that saves more than the s390 ELF ABI
> - * defines leaves us more freedom in the implementation.
> -*/
> -struct vm_save_area {
> -	struct vm_save_regs guest;
> -	struct vm_save_regs host;
> -};
> -
> -struct vm {
> -	struct kvm_s390_sie_block *sblk;
> -	struct vm_save_area save_area;
> -	struct esca_block *sca;			/* System Control Area */
> -	uint8_t *crycb;				/* Crypto Control Block */
> -	struct vm_uv uv;			/* PV UV information */
> -	/* Ptr to first guest page */
> -	uint8_t *guest_mem;
> -	bool validity_expected;
> -};
> -
> -extern void sie_entry(void);
> -extern void sie_exit(void);
> -extern void sie_entry_gregs(void);
> -extern void sie_exit_gregs(void);
> -extern void sie64a(struct kvm_s390_sie_block *sblk, struct vm_save_area *save_area);
> -void sie(struct vm *vm);
> -void sie_expect_validity(struct vm *vm);
> -uint16_t sie_get_validity(struct vm *vm);
> -void sie_check_validity(struct vm *vm, uint16_t vir_exp);
> -void sie_handle_validity(struct vm *vm);
> -void sie_guest_sca_create(struct vm *vm);
> -void sie_guest_create(struct vm *vm, uint64_t guest_mem, uint64_t guest_mem_len);
> -void sie_guest_destroy(struct vm *vm);
> -
> -uint8_t *sie_guest_alloc(uint64_t guest_size);
> -
> -#endif /* _S390X_SIE_H_ */
> +#endif /* _S390X_SIE_ARCH_H_ */
> diff --git a/lib/s390x/sie.h b/lib/s390x/sie.h
> index c1724cf2..f13e698f 100644
> --- a/lib/s390x/sie.h
> +++ b/lib/s390x/sie.h
> @@ -4,236 +4,7 @@
>  
>  #include <stdint.h>
>  #include <asm/arch_def.h>
> -
> -#define CPUSTAT_STOPPED    0x80000000
> -#define CPUSTAT_WAIT       0x10000000
> -#define CPUSTAT_ECALL_PEND 0x08000000
> -#define CPUSTAT_STOP_INT   0x04000000
> -#define CPUSTAT_IO_INT     0x02000000
> -#define CPUSTAT_EXT_INT    0x01000000
> -#define CPUSTAT_RUNNING    0x00800000
> -#define CPUSTAT_RETAINED   0x00400000
> -#define CPUSTAT_TIMING_SUB 0x00020000
> -#define CPUSTAT_SIE_SUB    0x00010000
> -#define CPUSTAT_RRF        0x00008000
> -#define CPUSTAT_SLSV       0x00004000
> -#define CPUSTAT_SLSR       0x00002000
> -#define CPUSTAT_ZARCH      0x00000800
> -#define CPUSTAT_MCDS       0x00000100
> -#define CPUSTAT_KSS        0x00000200
> -#define CPUSTAT_SM         0x00000080
> -#define CPUSTAT_IBS        0x00000040
> -#define CPUSTAT_GED2       0x00000010
> -#define CPUSTAT_G          0x00000008
> -#define CPUSTAT_GED        0x00000004
> -#define CPUSTAT_J          0x00000002
> -#define CPUSTAT_P          0x00000001
> -
> -struct kvm_s390_sie_block {
> -	uint32_t 	cpuflags;		/* 0x0000 */
> -	uint32_t : 1;			/* 0x0004 */
> -	uint32_t 	prefix : 18;
> -	uint32_t : 1;
> -	uint32_t 	ibc : 12;
> -	uint8_t		reserved08[4];		/* 0x0008 */
> -#define PROG_IN_SIE (1<<0)
> -	uint32_t	prog0c;			/* 0x000c */
> -union {
> -		uint8_t	reserved10[16];		/* 0x0010 */
> -		struct {
> -			uint64_t	pv_handle_cpu;
> -			uint64_t	pv_handle_config;
> -		};
> -	};
> -#define PROG_BLOCK_SIE	(1<<0)
> -#define PROG_REQUEST	(1<<1)
> -	uint32_t 	prog20;		/* 0x0020 */
> -	uint8_t		reserved24[4];		/* 0x0024 */
> -	uint64_t	cputm;			/* 0x0028 */
> -	uint64_t	ckc;			/* 0x0030 */
> -	uint64_t	epoch;			/* 0x0038 */
> -	uint32_t	svcc;			/* 0x0040 */
> -#define LCTL_CR0	0x8000
> -#define LCTL_CR6	0x0200
> -#define LCTL_CR9	0x0040
> -#define LCTL_CR10	0x0020
> -#define LCTL_CR11	0x0010
> -#define LCTL_CR14	0x0002
> -	uint16_t   	lctl;			/* 0x0044 */
> -	int16_t		icpua;			/* 0x0046 */
> -#define ICTL_OPEREXC	0x80000000
> -#define ICTL_PINT	0x20000000
> -#define ICTL_LPSW	0x00400000
> -#define ICTL_STCTL	0x00040000
> -#define ICTL_ISKE	0x00004000
> -#define ICTL_SSKE	0x00002000
> -#define ICTL_RRBE	0x00001000
> -#define ICTL_TPROT	0x00000200
> -	uint32_t	ictl;			/* 0x0048 */
> -#define ECA_CEI		0x80000000
> -#define ECA_IB		0x40000000
> -#define ECA_SIGPI	0x10000000
> -#define ECA_MVPGI	0x01000000
> -#define ECA_AIV		0x00200000
> -#define ECA_VX		0x00020000
> -#define ECA_PROTEXCI	0x00002000
> -#define ECA_APIE	0x00000008
> -#define ECA_SII		0x00000001
> -	uint32_t	eca;			/* 0x004c */
> -#define ICPT_INST	0x04
> -#define ICPT_PROGI	0x08
> -#define ICPT_INSTPROGI	0x0C
> -#define ICPT_EXTREQ	0x10
> -#define ICPT_EXTINT	0x14
> -#define ICPT_IOREQ	0x18
> -#define ICPT_WAIT	0x1c
> -#define ICPT_VALIDITY	0x20
> -#define ICPT_STOP	0x28
> -#define ICPT_OPEREXC	0x2C
> -#define ICPT_PARTEXEC	0x38
> -#define ICPT_IOINST	0x40
> -#define ICPT_KSS	0x5c
> -#define ICPT_INT_ENABLE	0x64
> -#define ICPT_PV_INSTR	0x68
> -#define ICPT_PV_NOTIFY	0x6c
> -#define ICPT_PV_PREF	0x70
> -	uint8_t		icptcode;		/* 0x0050 */
> -	uint8_t		icptstatus;		/* 0x0051 */
> -	uint16_t	ihcpu;			/* 0x0052 */
> -	uint8_t		reserved54;		/* 0x0054 */
> -#define IICTL_CODE_NONE		 0x00
> -#define IICTL_CODE_MCHK		 0x01
> -#define IICTL_CODE_EXT		 0x02
> -#define IICTL_CODE_IO		 0x03
> -#define IICTL_CODE_RESTART	 0x04
> -#define IICTL_CODE_SPECIFICATION 0x10
> -#define IICTL_CODE_OPERAND	 0x11
> -	uint8_t		iictl;			/* 0x0055 */
> -	uint16_t	ipa;			/* 0x0056 */
> -	uint32_t	ipb;			/* 0x0058 */
> -	uint32_t	scaoh;			/* 0x005c */
> -#define FPF_BPBC 	0x20
> -	uint8_t		fpf;			/* 0x0060 */
> -#define ECB_GS		0x40
> -#define ECB_TE		0x10
> -#define ECB_SPECI	0x08
> -#define ECB_SRSI	0x04
> -#define ECB_HOSTPROTINT	0x02
> -	uint8_t		ecb;			/* 0x0061 */
> -#define ECB2_CMMA	0x80
> -#define ECB2_IEP	0x20
> -#define ECB2_PFMFI	0x08
> -#define ECB2_ESCA	0x04
> -	uint8_t    	ecb2;                   /* 0x0062 */
> -#define ECB3_DEA 0x08
> -#define ECB3_AES 0x04
> -#define ECB3_RI  0x01
> -	uint8_t    	ecb3;			/* 0x0063 */
> -	uint32_t	scaol;			/* 0x0064 */
> -	uint8_t		sdf;			/* 0x0068 */
> -	uint8_t    	epdx;			/* 0x0069 */
> -	uint8_t    	reserved6a[2];		/* 0x006a */
> -	uint32_t	todpr;			/* 0x006c */
> -#define GISA_FORMAT1 0x00000001
> -	uint32_t	gd;			/* 0x0070 */
> -	uint8_t		reserved74[12];		/* 0x0074 */
> -	uint64_t	mso;			/* 0x0080 */
> -	uint64_t	msl;			/* 0x0088 */
> -	struct psw	gpsw;			/* 0x0090 */
> -	uint64_t	gg14;			/* 0x00a0 */
> -	uint64_t	gg15;			/* 0x00a8 */
> -	uint8_t		reservedb0[8];		/* 0x00b0 */
> -#define HPID_KVM	0x4
> -#define HPID_VSIE	0x5
> -	uint8_t		hpid;			/* 0x00b8 */
> -	uint8_t		reservedb9[7];		/* 0x00b9 */
> -	union {
> -		struct {
> -			uint32_t	eiparams;	/* 0x00c0 */
> -			uint16_t	extcpuaddr;	/* 0x00c4 */
> -			uint16_t	eic;		/* 0x00c6 */
> -		};
> -		uint64_t	mcic;			/* 0x00c0 */
> -	} __attribute__ ((__packed__));
> -	uint32_t	reservedc8;		/* 0x00c8 */
> -	uint16_t	pgmilc;			/* 0x00cc */
> -	uint16_t	iprcc;			/* 0x00ce */
> -	uint32_t	dxc;			/* 0x00d0 */
> -	uint16_t	mcn;			/* 0x00d4 */
> -	uint8_t		perc;			/* 0x00d6 */
> -	uint8_t		peratmid;		/* 0x00d7 */
> -	uint64_t	peraddr;		/* 0x00d8 */
> -	uint8_t		eai;			/* 0x00e0 */
> -	uint8_t		peraid;			/* 0x00e1 */
> -	uint8_t		oai;			/* 0x00e2 */
> -	uint8_t		armid;			/* 0x00e3 */
> -	uint8_t		reservede4[4];		/* 0x00e4 */
> -	uint64_t	tecmc;			/* 0x00e8 */
> -	uint8_t		reservedf0[12];		/* 0x00f0 */
> -#define CRYCB_FORMAT_MASK 0x00000003
> -#define CRYCB_FORMAT0 0x00000000
> -#define CRYCB_FORMAT1 0x00000001
> -#define CRYCB_FORMAT2 0x00000003
> -	uint32_t	crycbd;			/* 0x00fc */
> -	uint64_t	gcr[16];		/* 0x0100 */
> -	union {
> -		uint64_t	gbea;			/* 0x0180 */
> -		uint64_t	sidad;
> -	};
> -	uint8_t		reserved188[8];		/* 0x0188 */
> -	uint64_t   	sdnxo;			/* 0x0190 */
> -	uint8_t    	reserved198[8];		/* 0x0198 */
> -	uint32_t	fac;			/* 0x01a0 */
> -	uint8_t		reserved1a4[20];	/* 0x01a4 */
> -	uint64_t	cbrlo;			/* 0x01b8 */
> -	uint8_t		reserved1c0[8];		/* 0x01c0 */
> -#define ECD_HOSTREGMGMT	0x20000000
> -#define ECD_MEF		0x08000000
> -#define ECD_ETOKENF	0x02000000
> -#define ECD_ECC		0x00200000
> -	uint32_t	ecd;			/* 0x01c8 */
> -	uint8_t		reserved1cc[18];	/* 0x01cc */
> -	uint64_t	pp;			/* 0x01de */
> -	uint8_t		reserved1e6[2];		/* 0x01e6 */
> -	uint64_t	itdba;			/* 0x01e8 */
> -	uint64_t   	riccbd;			/* 0x01f0 */
> -	uint64_t	gvrd;			/* 0x01f8 */
> -	uint64_t	reserved200[48];	/* 0x0200 */
> -	uint64_t	pv_grregs[16];		/* 0x0380 */
> -} __attribute__((packed));
> -
> -union esca_sigp_ctrl {
> -	uint16_t value;
> -	struct {
> -		uint8_t c : 1;
> -		uint8_t reserved: 7;
> -		uint8_t scn;
> -	};
> -};
> -
> -struct esca_entry {
> -	union esca_sigp_ctrl sigp_ctrl;
> -	uint16_t   reserved1[3];
> -	uint64_t   sda;
> -	uint64_t   reserved2[6];
> -};
> -
> -union ipte_control {
> -	unsigned long val;
> -	struct {
> -		unsigned long k  : 1;
> -		unsigned long kh : 31;
> -		unsigned long kg : 32;
> -	};
> -};
> -
> -struct esca_block {
> -	union ipte_control ipte_control;
> -	uint64_t   reserved1[7];
> -	uint64_t   mcn[4];
> -	uint64_t   reserved2[20];
> -	struct esca_entry cpu[256];
> -};
> +#include <asm/sie-arch.h>
>  
>  struct vm_uv {
>  	uint64_t vm_handle;


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [kvm-unit-tests PATCH 3/4] s390x: Move SIE assembly into new file
  2024-07-25 14:34   ` Christoph Schlameuss
@ 2024-08-02  9:33     ` Janosch Frank
  2024-08-02 13:21       ` Christoph Schlameuss
  0 siblings, 1 reply; 16+ messages in thread
From: Janosch Frank @ 2024-08-02  9:33 UTC (permalink / raw)
  To: Christoph Schlameuss
  Cc: kvm, linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

On 7/25/24 4:34 PM, Christoph Schlameuss wrote:
> On Thu, 18 Jul 2024 10:50:18 +0000
> Janosch Frank <frankja@linux.ibm.com> wrote:
> 
>> In contrast to the other functions in cpu.S it's quite lengthy so
>> let's split it off.
>>
>> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
>> ---
>>   s390x/Makefile             |  2 +-
>>   s390x/{cpu.S => cpu-sie.S} | 59 +----------------------------------
>>   s390x/cpu.S                | 64 --------------------------------------
>>   3 files changed, 2 insertions(+), 123 deletions(-)
>>   copy s390x/{cpu.S => cpu-sie.S} (56%)
> 
> [...]
> 
>> diff --git a/s390x/cpu.S b/s390x/cpu-sie.S
>> similarity index 56%
>> copy from s390x/cpu.S
>> copy to s390x/cpu-sie.S
>> index 9155b044..9370b5c0 100644
>> --- a/s390x/cpu.S
>> +++ b/s390x/cpu-sie.S
>> @@ -1,6 +1,6 @@
>>   /* SPDX-License-Identifier: GPL-2.0-only */
>>   /*
>> - * s390x assembly library
>> + * s390x SIE assembly library
>>    *
>>    * Copyright (c) 2019 IBM Corp.
>>    *
> 
> Should we not also update the Copyright here? At least to
> "Copyright (c) 2019, 2024 IBM Corp."?
> 

Why?
Did I add something important to this file?
I'm effectively moving code around.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [kvm-unit-tests PATCH 1/4] s390x: Split snippet makefile rules into new file
  2024-07-25 14:27   ` Christoph Schlameuss
@ 2024-08-02  9:34     ` Janosch Frank
  0 siblings, 0 replies; 16+ messages in thread
From: Janosch Frank @ 2024-08-02  9:34 UTC (permalink / raw)
  To: Christoph Schlameuss
  Cc: kvm, linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

On 7/25/24 4:27 PM, Christoph Schlameuss wrote:
> On Thu, 18 Jul 2024 10:50:16 +0000
> Janosch Frank <frankja@linux.ibm.com> wrote:
> 
>> It's time to move the snippet related Makefile parts into a new file
>> to make s390x/Makefile less busy.
>>
>> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
>> ---
>>   s390x/Makefile          | 34 ++++------------------------------
>>   s390x/snippets/Makefile | 30 ++++++++++++++++++++++++++++++
>>   2 files changed, 34 insertions(+), 30 deletions(-)
>>   create mode 100644 s390x/snippets/Makefile
> 
> IMHO the commit message should start with "s390x/Makefile: Split snippet
> makefile rules into new file" for more consistency.
> 
> With that fixed:
> Reviewed-by: Christoph Schlameuss <schlameuss@linux.ibm.com>

Sure
I'll send a new version around anyway, since I've rebased the series on 
Marc's make file patch.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [kvm-unit-tests PATCH 3/4] s390x: Move SIE assembly into new file
  2024-08-02  9:33     ` Janosch Frank
@ 2024-08-02 13:21       ` Christoph Schlameuss
  0 siblings, 0 replies; 16+ messages in thread
From: Christoph Schlameuss @ 2024-08-02 13:21 UTC (permalink / raw)
  To: Janosch Frank; +Cc: kvm, linux-s390, imbrenda, nrb, npiggin, nsg, mhartmay

On Fri, 2 Aug 2024 11:33:06 +0200
Janosch Frank <frankja@linux.ibm.com> wrote:

> On 7/25/24 4:34 PM, Christoph Schlameuss wrote:
> > On Thu, 18 Jul 2024 10:50:18 +0000
> > Janosch Frank <frankja@linux.ibm.com> wrote:
> >   
> >> In contrast to the other functions in cpu.S it's quite lengthy so
> >> let's split it off.
> >>
> >> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
> >> ---
> >>   s390x/Makefile             |  2 +-
> >>   s390x/{cpu.S => cpu-sie.S} | 59 +----------------------------------
> >>   s390x/cpu.S                | 64 --------------------------------------
> >>   3 files changed, 2 insertions(+), 123 deletions(-)
> >>   copy s390x/{cpu.S => cpu-sie.S} (56%)  
> > 
> > [...]
> >   
> >> diff --git a/s390x/cpu.S b/s390x/cpu-sie.S
> >> similarity index 56%
> >> copy from s390x/cpu.S
> >> copy to s390x/cpu-sie.S
> >> index 9155b044..9370b5c0 100644
> >> --- a/s390x/cpu.S
> >> +++ b/s390x/cpu-sie.S
> >> @@ -1,6 +1,6 @@
> >>   /* SPDX-License-Identifier: GPL-2.0-only */
> >>   /*
> >> - * s390x assembly library
> >> + * s390x SIE assembly library
> >>    *
> >>    * Copyright (c) 2019 IBM Corp.
> >>    *  
> > 
> > Should we not also update the Copyright here? At least to
> > "Copyright (c) 2019, 2024 IBM Corp."?
> >   
> 
> Why?
> Did I add something important to this file?
> I'm effectively moving code around.
> 

That is how interpreted the copyright rules so far. But I might
absolutely be wrong about that when only moving existing code.
I do agree that this change is only moving the code to a new file.

I would leave this decision up to you.

Reviewed-by: Christoph Schlameuss <schlameuss@linux.ibm.com>


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2024-08-02 13:21 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-18 10:50 [kvm-unit-tests PATCH 0/4] s390x: split off snippet and sie related code Janosch Frank
2024-07-18 10:50 ` [kvm-unit-tests PATCH 1/4] s390x: Split snippet makefile rules into new file Janosch Frank
2024-07-25 14:27   ` Christoph Schlameuss
2024-08-02  9:34     ` Janosch Frank
2024-07-25 14:35   ` Claudio Imbrenda
2024-07-18 10:50 ` [kvm-unit-tests PATCH 2/4] s390x/Makefile: Add more comments Janosch Frank
2024-07-25 14:30   ` Christoph Schlameuss
2024-07-25 14:34   ` Claudio Imbrenda
2024-07-18 10:50 ` [kvm-unit-tests PATCH 3/4] s390x: Move SIE assembly into new file Janosch Frank
2024-07-25 14:34   ` Christoph Schlameuss
2024-08-02  9:33     ` Janosch Frank
2024-08-02 13:21       ` Christoph Schlameuss
2024-07-25 14:36   ` Claudio Imbrenda
2024-07-18 10:50 ` [kvm-unit-tests PATCH 4/4] lib: s390x: Split SIE fw structs from lib structs Janosch Frank
2024-07-25 14:38   ` Christoph Schlameuss
2024-07-25 14:40   ` Claudio Imbrenda

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox