[PATCH v20 01/14] arm64/gcs: Ensure FGTs for EL1 GCS instructions are disabled

Lorenzo Stoakes (ARM) ljs at kernel.org
Thu Sep 3 09:10:39 PDT 2026


On Tue, Sep 01, 2026 at 10:46:59PM +0100, Mark Brown wrote:
> The initial EL2 setup for GCS did not include disabling of EL1 usage of
> GCS instructions, also disable these traps.
>
> Fixes: ff5181d8a2a8 ("arm64/gcs: Provide basic EL2 setup to allow GCS usage at EL0 and EL1")
> Reviewed-by: Leonardo Bras <leo.bras at arm.com>
> Signed-off-by: Mark Brown <broonie at kernel.org>
> ---
>  arch/arm64/include/asm/el2_setup.h | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/arch/arm64/include/asm/el2_setup.h b/arch/arm64/include/asm/el2_setup.h
> index aa8ec9df8024..d308c6e6757d 100644
> --- a/arch/arm64/include/asm/el2_setup.h
> +++ b/arch/arm64/include/asm/el2_setup.h
> @@ -393,6 +393,11 @@
>  	orr	x0, x0, #HFGRTR_EL2_nGCS_EL1_MASK
>  	orr	x0, x0, #HFGRTR_EL2_nGCS_EL0_MASK
>
> +	/* Disable traps of GCS instructions at EL1 */
> +	orr	x2, x2, #HFGITR_EL2_nGCSEPP_MASK
> +	orr	x2, x2, #HFGITR_EL2_nGCSSTR_EL1_MASK
> +	orr	x2, x2, #HFGITR_EL2_nGCSPUSHM_EL1_MASK

(Forgive me being verbose here I'm thinking my way through things :)

So this is effectively:

Set bits from these masks:

	HFGITR_EL2_nGCSEPP_MASK |
	HFGITR_EL2_nGCSSTR_EL1_MASK |
	HFGITR_EL2_nGCSPUSHM_EL1_MASK

Then (later instruction):

msr_s	SYS_HFGITR_EL2, x2

I.e. set the hypervisor fine-grained instruction register ([0]).

And I can see from that document that for each bit:

0b1
Execution of the specified instructions is not trapped by this mechanism.

So this correctly disables these instructions:

GCSPUSHX
GCSPOPCX
GCSSTR
GCSSTTR when PSTATE.UAO is 1
GCSSTTR when the Effective value of HCR_EL2.{NV, NV1} is {1, 1}
GCSPUSHM

And these are the only listed GCS sets of instructions there.

On that basis LGTM :)

So:

Reviewed-by: Lorenzo Stoakes (ARM) <ljs at kernel.org>

[0]: https://support.arm.com/documentation/111107/2026-06/AArch64-Registers/HFGITR-EL2--Hypervisor-Fine-Grained-Instruction-Trap-Register


> +
>  .Lskip_gce_fgt_\@:
>
>  .Lset_fgt_\@:
>
> --
> 2.47.3
>
>

--
Cheers, Lorenzo



More information about the linux-arm-kernel mailing list