diff mbox series

[kvm-unit-tests,3/4] s390x: Move SIE assembly into new file

Message ID 20240718105104.34154-4-frankja@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series s390x: split off snippet and sie related code | expand

Commit Message

Janosch Frank July 18, 2024, 10:50 a.m. UTC
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%)

Comments

Christoph Schlameuss July 25, 2024, 2:34 p.m. UTC | #1
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."?

[...]
Claudio Imbrenda July 25, 2024, 2:36 p.m. UTC | #2
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
Janosch Frank Aug. 2, 2024, 9:33 a.m. UTC | #3
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.
Christoph Schlameuss Aug. 2, 2024, 1:21 p.m. UTC | #4
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>
diff mbox series

Patch

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