From: Janosch Frank <frankja@linux.ibm.com>
To: Thomas Huth <thuth@redhat.com>, kvm@vger.kernel.org
Cc: linux-s390@vger.kernel.org, imbrenda@linux.ibm.com,
pmorel@linux.ibm.com, david@redhat.com
Subject: Re: [kvm-unit-tests PATCH v2 4/8] s390x: Introduce and use CALL_INT_HANDLER macro
Date: Thu, 18 Feb 2021 10:16:03 +0100 [thread overview]
Message-ID: <1ff30077-ec0c-7bee-3770-d0ff0f4593a9@linux.ibm.com> (raw)
In-Reply-To: <bf4f49dd-5255-91c6-5a65-4d346d7d2701@redhat.com>
On 2/17/21 6:03 PM, Thomas Huth wrote:
> On 17/02/2021 17.22, Janosch Frank wrote:
>> On 2/17/21 4:55 PM, Thomas Huth wrote:
>>> On 17/02/2021 15.41, Janosch Frank wrote:
>>>> The ELF ABI dictates that we need to allocate 160 bytes of stack space
>>>> for the C functions we're calling. Since we would need to do that for
>>>> every interruption handler which, combined with the new stack argument
>>>> being saved in GR2, makes cstart64.S look a bit messy.
>>>>
>>>> So let's introduce the CALL_INT_HANDLER macro that handles all of
>>>> that, calls the C interrupt handler and handles cleanup afterwards.
>>>>
>>>> Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
>>>> ---
>>>> s390x/cstart64.S | 28 +++++-----------------------
>>>> s390x/macros.S | 17 +++++++++++++++++
>>>> 2 files changed, 22 insertions(+), 23 deletions(-)
>>>>
>>>> diff --git a/s390x/cstart64.S b/s390x/cstart64.S
>>>> index 35d20293..666a9567 100644
>>>> --- a/s390x/cstart64.S
>>>> +++ b/s390x/cstart64.S
>>>> @@ -92,37 +92,19 @@ memsetxc:
>>>>
>>>> .section .text
>>>> pgm_int:
>>>> - SAVE_REGS_STACK
>>>> - lgr %r2, %r15
>>>> - brasl %r14, handle_pgm_int
>>>> - RESTORE_REGS_STACK
>>>> - lpswe GEN_LC_PGM_OLD_PSW
>>>> + CALL_INT_HANDLER handle_pgm_int, GEN_LC_PGM_OLD_PSW
>>>>
>>>> ext_int:
>>>> - SAVE_REGS_STACK
>>>> - lgr %r2, %r15
>>>> - brasl %r14, handle_ext_int
>>>> - RESTORE_REGS_STACK
>>>> - lpswe GEN_LC_EXT_OLD_PSW
>>>> + CALL_INT_HANDLER handle_ext_int, GEN_LC_EXT_OLD_PSW
>>>>
>>>> mcck_int:
>>>> - SAVE_REGS_STACK
>>>> - brasl %r14, handle_mcck_int
>>>> - RESTORE_REGS_STACK
>>>> - lpswe GEN_LC_MCCK_OLD_PSW
>>>> + CALL_INT_HANDLER handle_mcck_int, GEN_LC_MCCK_OLD_PSW
>>>>
>>>> io_int:
>>>> - SAVE_REGS_STACK
>>>> - lgr %r2, %r15
>>>> - brasl %r14, handle_io_int
>>>> - RESTORE_REGS_STACK
>>>> - lpswe GEN_LC_IO_OLD_PSW
>>>> + CALL_INT_HANDLER handle_io_int, GEN_LC_IO_OLD_PSW
>>>>
>>>> svc_int:
>>>> - SAVE_REGS_STACK
>>>> - brasl %r14, handle_svc_int
>>>> - RESTORE_REGS_STACK
>>>> - lpswe GEN_LC_SVC_OLD_PSW
>>>> + CALL_INT_HANDLER handle_svc_int, GEN_LC_SVC_OLD_PSW
>>>>
>>>> .align 8
>>>> initial_psw:
>>>> diff --git a/s390x/macros.S b/s390x/macros.S
>>>> index a7d62c6f..212a3823 100644
>>>> --- a/s390x/macros.S
>>>> +++ b/s390x/macros.S
>>>> @@ -11,6 +11,23 @@
>>>> * David Hildenbrand <david@redhat.com>
>>>> */
>>>> #include <asm/asm-offsets.h>
>>>> +/*
>>>> + * Exception handler macro that saves registers on the stack,
>>>> + * allocates stack space and calls the C handler function. Afterwards
>>>> + * we re-load the registers and load the old PSW.
>>>> + */
>>>> + .macro CALL_INT_HANDLER c_func, old_psw
>>>> + SAVE_REGS_STACK
>>>> + /* Save the stack address in GR2 which is the first function argument */
>>>> + lgr %r2, %r15
>>>> + /* Allocate stack pace for called C function, as specified in s390 ELF ABI */
>>>> + slgfi %r15, 160
>>>
>>> By the way, don't you have to store a back chain pointer at the bottom of
>>> that area, too, if you want to use -mbackchoin in the next patch?
>>
>> Don't I already do that in #2?
>
> You do it in the SAVE_REGS_STACK patch, yes. But not on the bottom of the
> new 160 bytes stack frame that you've added here. But I guess it doesn't
> really matter for your back traces, since you load %r2 with %r15 before
> decrementing the stack by 160, so this new stack frame simply gets ignored
> anyway.
>
> Thomas
>
Right, I'm currently fixing that up for the next version.
diff --git i/s390x/macros.S w/s390x/macros.S
index b4275c77..13cff299 100644
--- i/s390x/macros.S
+++ w/s390x/macros.S
@@ -22,6 +22,11 @@
lgr %r2, %r15
/* Allocate stack space for called C function, as specified in
s390 ELF ABI */
slgfi %r15, 160
+ /*
+ * 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
RESTORE_REGS_STACK
next prev parent reply other threads:[~2021-02-18 10:24 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-17 14:41 [kvm-unit-tests PATCH v2 0/8] s390x: Cleanup exception register save/restore and implement backtrace Janosch Frank
2021-02-17 14:41 ` [kvm-unit-tests PATCH v2 1/8] s390x: Fix fpc store address in RESTORE_REGS_STACK Janosch Frank
2021-02-17 14:41 ` [kvm-unit-tests PATCH v2 2/8] s390x: Fully commit to stack save area for exceptions Janosch Frank
2021-02-17 15:35 ` Thomas Huth
2021-02-17 16:54 ` Janosch Frank
2021-02-17 14:41 ` [kvm-unit-tests PATCH v2 3/8] RFC: s390x: Define STACK_FRAME_INT_SIZE macro Janosch Frank
2021-02-17 15:38 ` Thomas Huth
2021-02-17 16:08 ` Janosch Frank
2021-02-17 16:10 ` Thomas Huth
2021-02-17 14:41 ` [kvm-unit-tests PATCH v2 4/8] s390x: Introduce and use CALL_INT_HANDLER macro Janosch Frank
2021-02-17 15:49 ` Thomas Huth
2021-02-17 15:55 ` Thomas Huth
2021-02-17 16:22 ` Janosch Frank
2021-02-17 17:03 ` Thomas Huth
2021-02-18 9:16 ` Janosch Frank [this message]
2021-02-17 14:41 ` [kvm-unit-tests PATCH v2 5/8] s390x: Provide preliminary backtrace support Janosch Frank
2021-02-17 16:01 ` Thomas Huth
2021-02-17 16:12 ` Janosch Frank
2021-02-17 14:41 ` [kvm-unit-tests PATCH v2 6/8] s390x: Print more information on program exceptions Janosch Frank
2021-02-17 14:41 ` [kvm-unit-tests PATCH v2 7/8] s390x: Move diag308_load_reset to stack saving Janosch Frank
2021-02-17 14:41 ` [kvm-unit-tests PATCH v2 8/8] s390x: Remove SAVE/RESTORE_stack Janosch Frank
2021-02-17 16:18 ` Thomas Huth
2021-02-17 16:46 ` Janosch Frank
2021-02-17 16:50 ` Thomas Huth
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=1ff30077-ec0c-7bee-3770-d0ff0f4593a9@linux.ibm.com \
--to=frankja@linux.ibm.com \
--cc=david@redhat.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=pmorel@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.