[PATCH v6] arm64: smccc: Support SMCCC v1.3 SVE register saving hint

Will Deacon will at kernel.org
Tue Jun 8 05:15:33 PDT 2021


On Thu, Jun 03, 2021 at 07:41:18PM +0100, Mark Brown wrote:
> SMCCC v1.2 requires that all SVE state be preserved over SMC calls which
> introduces substantial overhead in the common case where there is no SVE
> state in the registers. To avoid this SMCCC v1.3 introduces a flag which
> allows the caller to say that there is no state that needs to be preserved
> in the registers. Make use of this flag, setting it if the SMCCC version
> indicates support for it and the TIF_ flags indicate that there is no live
> SVE state in the registers, this avoids placing any constraints on when
> SMCCC calls can be done or triggering extra saving and reloading of SVE
> register state in the kernel.
> 
> This would be straightforward enough except for the rather entertaining
> inline assembly we use to do SMCCC v1.1 calls to allow us to take advantage
> of the limited number of registers it clobbers. Deal with this by having a
> function which we call immediately before issuing the SMCCC call to make
> our checks and set the flag. Using alternatives the overhead if SVE is
> supported but not detected at runtime can be reduced to a single NOP.
> 
> Signed-off-by: Mark Brown <broonie at kernel.org>
> Reviewed-by: Ard Biesheuvel <ardb at kernel.org>
> Reviewed-by: Marc Zyngier <maz at kernel.org>
> ---
> 
> v6:
>  - Prototype __arm_smccc_sve_check add add the _arm to the name to fix
>    issues with symbol versioning.

Can you elaborate on what was going wrong with symbol versioning, please?
Are we papering over another genksyms bug here?

Will



More information about the linux-arm-kernel mailing list