[PATCH v4 19/27] s390: Introduce Start Arm Execution instruction
Steffen Eiden
seiden at linux.ibm.com
Mon Jul 6 04:53:34 PDT 2026
On Mon, Jul 06, 2026 at 01:17:02PM +0200, Janosch Frank wrote:
> On 7/6/26 10:52, 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
> > - 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
> > register are handled in within C code. Access registers are handled in a
> > 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.
> >
>
> [...]
>
> > + u64 gpr[31]; /* 0x0300 */
> > + u64 _03f8; /* 0x03f8 */
> > +
> > + union {
> > + u64 icptd[8]; /* 0x0400 */
> > + /* validity-interception reason; icptr 0x01 */
> > +#define SAE_VIR_UNKNOWN 0x00
> > +#define SAE_VIR_UNSUPP_FORMAT 0x01
> > +#define SAE_VIR_MSO_BOUNDS 0x02
> > +#define SAE_VIR_MSLA 0x03
> > +#define SAE_VIR_MGPAS 0x04
> > +#define SAE_VIR_INVAL_SYSREG 0x05
> > +#define SAE_VIR_HOST_CONTROL 0x06
> > +#define SAE_VIR_SCA 0x07
> > +#define SAE_VIR_MSO_ALIGN 0x08
> > +#define SAE_VIR_HLC 0x09
> > +#define SAE_VIR_IRPTC 0x0a
>
> Will these ever be used for something?
I'll remove them.
More information about the linux-arm-kernel
mailing list