* [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