Re: [kvm-unit-tests PATCH v6 01/10] s390x: saving regs for interrupts

Pierre Morel
2020-04-27T10:50:58Z

On 2020-04-27 10:59, David Hildenbrand wrote:
> On 24.04.20 12:45, Pierre Morel wrote:
>> If we use multiple source of interrupts, for example, using SCLP
>> console to print information while using I/O interrupts, we need
>> to have a re-entrant register saving interruption handling.
>
> So the primary reason is to print during I/O interrupts (which we
> already do, but usually never trigger - handle_io_int())
>
>>
>> Instead of saving at a static memory address, let's save the base
>> registers and the floating point registers on the stack.
>
> ".. in case of I/O interrupts".

OK

>
>>
>> Note that we keep the static register saving to recover from the
>> RESET tests.
>
> and for all other types of interrupts.

OK

>
>>
>> Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
>> ---
>> s390x/cstart64.S | 34 ++++++++++++++++++++++++++++++++--
>> 1 file changed, 32 insertions(+), 2 deletions(-)
>>
>> diff --git a/s390x/cstart64.S b/s390x/cstart64.S
>> index 9af6bb3..ba2e67c 100644
>> --- a/s390x/cstart64.S
>> +++ b/s390x/cstart64.S
>> @@ -118,6 +118,36 @@ memsetxc:
>> lmg %r0, %r15, GEN_LC_SW_INT_GRS
>> .endm
>>
>> +/* Save registers on the stack (r15), so we can have stacked interrupts. */
>> + .macro SAVE_IRQ_REGS
>
> s/SAVE_IRQ_REGS/SAVE_REGS_STACK/ ?
>
> Same for the other macro.

OK

>
>> + /* Allocate a stack frame for 15 integer registers */
>
> not integers. sizeof(int) == 4.

hum, yes, I just do not know from where I took the word "integer" here!.

>
> "doublewords" should be the right s390x speak.

in fact they are named general registers in the POP.
(which indeed are doublewords :) )

>
>> + slgfi %r15, 15 * 8
>> + /* Store all registers from r0 to r14 on the stack */
>> + stmg %r0, %r14, 0(%r15)
>> + /* Allocate a stack frame for 16 floating point registers */
>> + /* The size of a FP register is the size of an integer */
>> + slgfi %r15, 16 * 8
>> + /* Save fp register on stack: offset to SP is multiple of reg number */
>> + .irp i, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
>> + std \i, \i * 8(%r15)
>> + .endr
>> + .endm
>
> What about the FPC?

Seems I forgot it.
I will update.
Thanks.

Regards,
Pierre

--
Pierre Morel
IBM Lab Boeblingen