[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