[PATCH v3 33/38] arm64: Avoid cpus_have_const_cap() for ARM64_WORKAROUND_1742098

Mark Rutland mark.rutland at arm.com
Mon Oct 16 03:08:19 PDT 2023


On Fri, Oct 13, 2023 at 07:04:57PM +0100, Catalin Marinas wrote:
> On Fri, Oct 13, 2023 at 11:53:53AM +0100, Mark Rutland wrote:
> > On Tue, Oct 10, 2023 at 11:31:34AM +0100, Mark Rutland wrote:
> > >  static void elf_hwcap_fixup(void)
> > >  {
> > > -#ifdef CONFIG_ARM64_ERRATUM_1742098
> > > -	if (cpus_have_const_cap(ARM64_WORKAROUND_1742098))
> > > +	if (cpus_have_cap(ARM64_WORKAROUND_1742098))
> > >  		compat_elf_hwcap2 &= ~COMPAT_HWCAP2_AES;
> > > -#endif /* ARM64_ERRATUM_1742098 */
> > >  }
> > 
> > The kbuild test robot pointed out that this is broken for CONFIG_COMPAT=n,
> > since compat_elf_hwcap2 is only defined when CONFIG_COMPAT=y. As
> > CONFIG_ARM64_ERRATUM_1742098 depends on CONFIG_COMPAT, this worked prior to this patch.
> > 
> > I've changed that locally to:
> > 
> > | static void elf_hwcap_fixup(void)
> > | {
> > | #ifdef CONFIG_COMPAT
> > | 	if (cpus_have_cap(ARM64_WORKAROUND_1742098))
> > | 		compat_elf_hwcap2 &= ~COMPAT_HWCAP2_AES;
> > | #endif /* CONFIG_COMPAT */
> > | }
> > 
> > ... since the ifdeffery is protecting the use of 'compat_elf_hwcap2', and the
> > cpucap is now elided by virtue of cpucap_is_possible().
> > 
> > Catalin, aside from the minor fixup above, are you happy to pick this for v6.7?
> > 
> > I can post a v4 with that change (and the commit message updated accordingly).
> 
> I can pick it up and fold the above in.

I've just spotted another ifdeffery issue (leading to cpu_enable_fpsimd() not
bdeing defined in some configs), so I'll send a v4 with both issues fixed.

> Not sure what you want to update the commit message to (just mention the need
> for #ifdef CONFIG_COMPAT?)

I was thinknig to replace the last paragraph of the commit message with:

| This patch replaces the use of cpus_have_const_cap() with
| cpus_have_cap(), which will only generate the bitmap test and avoid
| generating an alternative sequence, resulting in slightly simpler annd
| smaller code being generated. For consistenct with other cpucaps, the
| ARM64_WORKAROUND_1742098 cpucap is added to cpucap_is_possible() so that
| code can be elided when this is not possible. However, as we only define
| compat_elf_hwcap2 when CONFIG_COMPAT=y, some ifdeffery is still required
| within user_feature_fixup() to avoid build errors when CONFIG_COMPAT=n.

As above, I'll send a v4 with that folded in.

Thanks,
Mark.



More information about the linux-arm-kernel mailing list