public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Claudio Imbrenda <imbrenda@linux.ibm.com>
To: Marc Hartmayer <mhartmay@linux.ibm.com>
Cc: <kvm@vger.kernel.org>, Janosch Frank <frankja@linux.ibm.com>,
	David Hildenbrand <david@redhat.com>,
	Nina Schoetterl-Glausch <nsg@linux.ibm.com>,
	Nico Boehr <nrb@linux.ibm.com>, Thomas Huth <thuth@redhat.com>
Subject: Re: [kvm-unit-tests PATCH v3 6/7] s390x: define a macro for the stack frame size
Date: Wed, 8 Mar 2023 16:12:28 +0100	[thread overview]
Message-ID: <20230308161228.3d4b89bb@p-imbrenda> (raw)
In-Reply-To: <20230307091051.13945-7-mhartmay@linux.ibm.com>

On Tue,  7 Mar 2023 10:10:50 +0100
Marc Hartmayer <mhartmay@linux.ibm.com> wrote:

> Define and use a macro for the stack frame size. While at it, fix
> whitespace in the `gs_handler_asm` block.
> 
> Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
> Co-developed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>

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

> ---
>  lib/s390x/asm-offsets.c     |  1 +
>  s390x/Makefile              |  2 +-
>  s390x/cstart64.S            |  2 +-
>  s390x/flat.lds.S            |  4 +++-
>  s390x/gs.c                  | 38 +++++++++++++++++++++----------------
>  s390x/macros.S              |  4 ++--
>  s390x/snippets/c/flat.lds.S |  6 ++++--
>  7 files changed, 34 insertions(+), 23 deletions(-)
> 
> diff --git a/lib/s390x/asm-offsets.c b/lib/s390x/asm-offsets.c
> index f612f3277a95..188dd2e51181 100644
> --- a/lib/s390x/asm-offsets.c
> +++ b/lib/s390x/asm-offsets.c
> @@ -87,6 +87,7 @@ int main(void)
>  	OFFSET(STACK_FRAME_INT_GRS0, stack_frame_int, grs0);
>  	OFFSET(STACK_FRAME_INT_GRS1, stack_frame_int, grs1);
>  	DEFINE(STACK_FRAME_INT_SIZE, sizeof(struct stack_frame_int));
> +	DEFINE(STACK_FRAME_SIZE, sizeof(struct stack_frame));
>  
>  	return 0;
>  }
> diff --git a/s390x/Makefile b/s390x/Makefile
> index e13a04eecb3e..fc8201f7762b 100644
> --- a/s390x/Makefile
> +++ b/s390x/Makefile
> @@ -160,7 +160,7 @@ $(SNIPPET_DIR)/c/%.gbin: $(SNIPPET_DIR)/c/%.o $(snippet_lib) $(FLATLIBS) $(SNIPP
>  	$(OBJCOPY) -I binary -O elf64-s390 -B "s390:64-bit" $< $@
>  
>  lds-autodepend-flags = -MMD -MF $(dir $*).$(notdir $*).d -MT $@
> -%.lds: %.lds.S
> +%.lds: %.lds.S $(asm-offsets)
>  	$(CPP) $(lds-autodepend-flags) $(CPPFLAGS) -P -C -o $@ $<
>  
>  .SECONDEXPANSION:
> diff --git a/s390x/cstart64.S b/s390x/cstart64.S
> index 6f83da2a6c0a..468ace3ea4df 100644
> --- a/s390x/cstart64.S
> +++ b/s390x/cstart64.S
> @@ -38,7 +38,7 @@ start:
>  	/* setup stack */
>  	larl	%r15, stackptr
>  	/* Clear first stack frame */
> -	xc      0(160,%r15), 0(%r15)
> +	xc      0(STACK_FRAME_SIZE,%r15), 0(%r15)
>  	/* setup initial PSW mask + control registers*/
>  	larl	%r1, initial_psw
>  	lpswe	0(%r1)
> diff --git a/s390x/flat.lds.S b/s390x/flat.lds.S
> index 952f6cd457ed..0cb7e383cc76 100644
> --- a/s390x/flat.lds.S
> +++ b/s390x/flat.lds.S
> @@ -1,3 +1,5 @@
> +#include <asm/asm-offsets.h>
> +
>  SECTIONS
>  {
>  	.lowcore : {
> @@ -44,6 +46,6 @@ SECTIONS
>  	/*
>  	 * stackptr set with initial stack frame preallocated
>  	 */
> -	stackptr = . - 160;
> +	stackptr = . - STACK_FRAME_SIZE;
>  	stacktop = .;
>  }
> diff --git a/s390x/gs.c b/s390x/gs.c
> index 4993eb8f43a9..9ae893eaf89a 100644
> --- a/s390x/gs.c
> +++ b/s390x/gs.c
> @@ -9,6 +9,7 @@
>   *    Janosch Frank <frankja@linux.ibm.com>
>   */
>  #include <libcflat.h>
> +#include <asm/asm-offsets.h>
>  #include <asm/page.h>
>  #include <asm/facility.h>
>  #include <asm/interrupt.h>
> @@ -35,22 +36,27 @@ static inline unsigned long load_guarded(unsigned long *p)
>  
>  /* guarded-storage event handler and finally it calls gs_handler */
>  extern void gs_handler_asm(void);
> -	asm(".globl gs_handler_asm\n"
> -	    "gs_handler_asm:\n"
> -	    "	    lgr	    %r14,%r15\n" 		/* Save current stack address in r14 */
> -	    "	    aghi    %r15,-320\n" 		/* Allocate stack frame */
> -	    "	    stmg    %r0,%r13,192(%r15)\n" 	/* Store regs to save area */
> -	    "	    stg	    %r14,312(%r15)\n"
> -	    "	    la	    %r2,160(%r15)\n" 		/* Store gscb address in this_cb */
> -	    "	    .insn   rxy,0xe30000000049,0,160(%r15)\n" /* stgsc */
> -	    "	    lg	    %r14,24(%r2)\n" 		/* Get GSEPLA from GSCB*/
> -	    "	    lg	    %r14,40(%r14)\n" 		/* Get GSERA from GSEPL*/
> -	    "	    stg	    %r14,304(%r15)\n" 		/* Store GSERA in r14 of reg save area */
> -	    "	    brasl   %r14,gs_handler\n" 		/* Jump to gs_handler */
> -	    "	    lmg	    %r0,%r15,192(%r15)\n" 	/* Restore regs */
> -	    "	    aghi    %r14, 6\n" 			/* Add lgg instr len to GSERA */
> -	    "	    br	    %r14\n" 			/* Jump to next instruction after lgg */
> -	    "	    .size gs_handler_asm,.-gs_handler_asm\n");
> +	asm (          ".macro	STGSC	args:vararg\n"
> +		"	.insn	rxy,0xe30000000049,\\args\n"
> +		"	.endm\n"
> +		"	.globl	gs_handler_asm\n"
> +		"gs_handler_asm:\n"
> +		"	lgr	%r14,%r15\n"				/* Save current stack address in r14 */
> +		".Lgs_handler_frame = 16*8+32+" xstr(STACK_FRAME_SIZE) "\n"
> +		"	aghi	%r15,-(.Lgs_handler_frame)\n"		/* Allocate stack frame */
> +		"	stmg	%r0,%r13,192(%r15)\n"			/* Store regs to save area */
> +		"	stg	%r14,312(%r15)\n"
> +		"	la	%r2," xstr(STACK_FRAME_SIZE) "(%r15)\n"	/* Store gscb address in this_cb */
> +		"	STGSC	%r0," xstr(STACK_FRAME_SIZE) "(%r15)\n"
> +		"	lg	%r14,24(%r2)\n"				/* Get GSEPLA from GSCB*/
> +		"	lg	%r14,40(%r14)\n"			/* Get GSERA from GSEPL*/
> +		"	stg	%r14,304(%r15)\n"			/* Store GSERA in r14 of reg save area */
> +		"	brasl	%r14,gs_handler\n"			/* Jump to gs_handler */
> +		"	lmg	%r0,%r15,192(%r15)\n"			/* Restore regs */
> +		"	aghi	%r14, 6\n"				/* Add lgg instr len to GSERA */
> +		"	br	%r14\n"					/* Jump to next instruction after lgg */
> +		".size gs_handler_asm,.-gs_handler_asm\n"
> +	);
>  
>  void gs_handler(struct gs_cb *this_cb)
>  {
> diff --git a/s390x/macros.S b/s390x/macros.S
> index 13cff299488f..e2a56a366c70 100644
> --- a/s390x/macros.S
> +++ b/s390x/macros.S
> @@ -21,14 +21,14 @@
>  	/* Save the stack address in GR2 which is the first function argument */
>  	lgr     %r2, %r15
>  	/* Allocate stack space for called C function, as specified in s390 ELF ABI */
> -	slgfi   %r15, 160
> +	slgfi   %r15, STACK_FRAME_SIZE
>  	/*
>  	 * Save the address of the interrupt stack into the back chain
>  	 * of the called function.
>  	 */
>  	stg     %r2, STACK_FRAME_INT_BACKCHAIN(%r15)
>  	brasl	%r14, \c_func
> -	algfi   %r15, 160
> +	algfi   %r15, STACK_FRAME_SIZE
>  	RESTORE_REGS_STACK
>  	lpswe	\old_psw
>  	.endm
> diff --git a/s390x/snippets/c/flat.lds.S b/s390x/snippets/c/flat.lds.S
> index 9e5eb66bec23..468b5f1eebe8 100644
> --- a/s390x/snippets/c/flat.lds.S
> +++ b/s390x/snippets/c/flat.lds.S
> @@ -1,3 +1,5 @@
> +#include <asm/asm-offsets.h>
> +
>  SECTIONS
>  {
>  	.lowcore : {
> @@ -18,9 +20,9 @@ SECTIONS
>  	. = 0x4000;
>  	/*
>  	 * The stack grows down from 0x4000 to 0x2000, we pre-allocoate
> -	 * a frame via the -160.
> +	 * a frame via the -STACK_FRAME_SIZE.
>  	 */
> -	stackptr = . - 160;
> +	stackptr = . - STACK_FRAME_SIZE;
>  	stacktop = .;
>  	/* Start text 0x4000 */
>  	.text : {


  reply	other threads:[~2023-03-08 15:20 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-07  9:10 [kvm-unit-tests PATCH v3 0/7] Some cleanup patches Marc Hartmayer
2023-03-07  9:10 ` [kvm-unit-tests PATCH v3 1/7] .gitignore: ignore `s390x/comm.key` file Marc Hartmayer
2023-03-07  9:10 ` [kvm-unit-tests PATCH v3 2/7] s390x/Makefile: simplify `%.hdr` target rules Marc Hartmayer
2023-03-07  9:10 ` [kvm-unit-tests PATCH v3 3/7] s390x/Makefile: fix `*.gbin` target dependencies Marc Hartmayer
2023-03-07  9:10 ` [kvm-unit-tests PATCH v3 4/7] s390x/Makefile: refactor CPPFLAGS Marc Hartmayer
2023-03-07  9:10 ` [kvm-unit-tests PATCH v3 5/7] s390x: use preprocessor for linker script generation Marc Hartmayer
2023-03-08 15:19   ` Claudio Imbrenda
2023-03-08 21:32   ` Nina Schoetterl-Glausch
2023-03-07  9:10 ` [kvm-unit-tests PATCH v3 6/7] s390x: define a macro for the stack frame size Marc Hartmayer
2023-03-08 15:12   ` Claudio Imbrenda [this message]
2023-03-08 21:46   ` Nina Schoetterl-Glausch
2023-03-31  7:30   ` Nico Boehr
2023-03-31  8:03     ` Marc Hartmayer
2023-03-31  8:27     ` [kvm-unit-tests PATCH v4] s390x/Makefile: refactor CPPFLAGS Marc Hartmayer
2023-03-31  9:36       ` Nico Boehr
2023-03-31  9:59         ` Marc Hartmayer
2023-03-31  9:47       ` Nico Boehr
2023-03-07  9:10 ` [kvm-unit-tests PATCH v3 7/7] lib/linux/const.h: test for `__ASSEMBLER__` as well Marc Hartmayer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230308161228.3d4b89bb@p-imbrenda \
    --to=imbrenda@linux.ibm.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=mhartmay@linux.ibm.com \
    --cc=nrb@linux.ibm.com \
    --cc=nsg@linux.ibm.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox