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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 18 Jul 2024 10:50:18 +0000
Janosch Frank <frankja@xxxxxxxxxxxxx> 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@xxxxxxxxxxxxx>

Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx>

> ---
>  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@xxxxxxxxxxxxx>
>   */
>  #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





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux