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 : {
next prev parent 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