On Tue, Oct 10, 2017 at 07:38:35PM +0100, Dave P Martin wrote: > The EFI runtime services ABI allows EFI to make free use of the > FPSIMD registers during EFI runtime service calls, subject to the > callee-save requirements of the AArch64 procedure call standard. > > However, the SVE architecture allows upper bits of the SVE vector > registers to be zeroed as a side-effect of FPSIMD V-register > writes. This means that the SVE vector registers must be saved in > their entirety in order to avoid data loss: non-SVE-aware EFI > implementations cannot restore them correctly. > > The non-IRQ case is already handled gracefully by > kernel_neon_begin(). For the IRQ case, this patch allocates a > suitable per-CPU stash buffer for the full SVE register state and > uses it to preserve the affected registers around EFI calls. It is > currently unclear how the EFI runtime services ABI will be > clarified with respect to SVE, so it safest to assume that the > predicate registers and FFR must be saved and restored too. > > No attempt is made to restore the restore the vector length after > a call, for now. It is deemed rather insane for EFI to change it, > and contemporary EFI implementations certainly won't. > > Signed-off-by: Dave Martin <Dave.Martin@xxxxxxx> > Reviewed-by: Alex Bennée <alex.bennee@xxxxxxxxxx> > Cc: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> Reviewed-by: Catalin Marinas <catalin.marinas@xxxxxxx>