[PATCH v8 20/29] s390: Introduce Start Arm Execution instruction

Ilya Leoshkevich iii at linux.ibm.com
Mon Sep 28 09:18:31 PDT 2026



On 9/28/26 18:15, Steffen Eiden wrote:
> On Mon, Sep 28, 2026 at 05:53:33PM +0200, Ilya Leoshkevich wrote:
>>
>>
>> On 9/18/26 15:30, Steffen Eiden wrote:
>>> The Start Arm Execution (SAE) instruction is the centerpiece for
>>> executing arm64 (KVM) guests on s390. Its purpose is, similar to SIE, to
>>> enable accelerated execution of arm64 virtual machines. SAE expects the
>>> physical address of a control block as the only argument.
>>>
>>> The host is responsible to save & restore
>>>    - GPRs 0-13
>>>    - access register 0-15
>>               ^^^^^^^^
>>               registers>   - breaking event register (BEAR)
>>>    - vector/floating point registers
>>> between SAE executions to guarantee host consistency.
>>>
>>> GPRs and BEAR are save and restores in the asm functions. The other
>>                      ^^^^^^^^^^^^^^^^^
>>                      saved and restored
>>
>>> register are handled in within C code. Access registers are handled in a
>>    ^^^^^^^^             ^^
>>    registers            not needed probably?
>>
>>> later patch and SVEs will be handled when they are introduced in a
>>> future series. Most arm64 registers are handled by a satellite block
>>> called save_area. Some registers, frequently used by hypervisors, are
>>> placed into the SAE control block itself.
>>>
>>> Enlighten asm/kvm_host_types.h for the new header variant. The new
>>> header is chosen instead of asm/kvm_host_s390_types.h if KVM_S390_ARM64
>>> is defined.
>>>
>>> Co-developed-by: Andreas Grapentin <gra at linux.ibm.com>
>>> Signed-off-by: Andreas Grapentin <gra at linux.ibm.com>
>>> Co-developed-by: Nina Schoetterl-Glausch <nsg at linux.ibm.com>
>>> Signed-off-by: Nina Schoetterl-Glausch <nsg at linux.ibm.com>
>>> Signed-off-by: Steffen Eiden <seiden at linux.ibm.com>
>>> ---
>>>    arch/s390/include/asm/asm-prototypes.h       |   1 +
>>>    arch/s390/include/asm/kvm_host_arm64_types.h | 124 +++++++++++++++++++
>>>    arch/s390/include/asm/kvm_host_types.h       |   4 +
>>>    arch/s390/include/asm/sae.h                  |  58 +++++++++
>>>    arch/s390/include/asm/stacktrace.h           |   5 +
>>>    arch/s390/kernel/asm-offsets.c               |   1 +
>>>    arch/s390/kernel/entry.S                     |  22 ++++
>>>    arch/s390/tools/opcodes.txt                  |   3 +
>>>    8 files changed, 218 insertions(+)
>>>    create mode 100644 arch/s390/include/asm/kvm_host_arm64_types.h
>>>    create mode 100644 arch/s390/include/asm/sae.h

[...]
>>> +SYM_FUNC_START(__sae64a)
>>> +	stmg	%r6,%r14,__SF_GPRS(%r15)	# store kernel registers
>>
>> Strictly speaking we don't need to save %r14, but I guess you do this
>> for unwinding?
> yes. Also, some later (unsent) patch needs this and before I forget this, let's
> do it now.

Thanks for the clarification!

Reviewed-by: Ilya Leoshkevich <iii at linux.ibm.com>

with typos fixes.



More information about the linux-arm-kernel mailing list