On Mon, Feb 06, 2023 at 09:31:20AM +0000, Marc Zyngier wrote:
__check_override assumes that the ID_AA64SMFR0_EL1 value is in x1, and I guess that the intent of the code is to reuse value read a few lines above. But as the comment says at the beginning of the macro, x1 will be clobbered, and the checks always fails.
Yes, it looks like this is a victim of rebasing - I didn't spot the change to make x1 clobbered when the override checking was refactored. Thanks for spotting this.
I presume we're just lucky that sme2_kernel_enable() does the same thing unconditionally, which probably means this was only ever tested with a VHE kernel (it'd otherwise catch fire).
Yes, I'd not be surprised if I'd never run this in nVHE.
The easiest fix is just to reload the id register before checking it, something like the patch below, compile-tested only.
Reviewed-by: Mark Brown broonie@kernel.org