[PATCH 03/18] arm64: elf: advertise 8.1 atomic instructions as new hwcap
Russell King - ARM Linux
linux at arm.linux.org.uk
Fri Jul 17 06:57:30 PDT 2015
On Fri, Jul 17, 2015 at 02:48:46PM +0100, Catalin Marinas wrote:
> On Mon, Jul 13, 2015 at 10:25:04AM +0100, Will Deacon wrote:
> > #endif /* _UAPI__ASM_HWCAP_H */
> > diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
> > index f3067d4d4e35..c7fd2c946374 100644
> > --- a/arch/arm64/kernel/setup.c
> > +++ b/arch/arm64/kernel/setup.c
> > @@ -280,6 +280,19 @@ static void __init setup_processor(void)
> > if (block && !(block & 0x8))
> > elf_hwcap |= HWCAP_CRC32;
> >
> > + block = (features >> 20) & 0xf;
> > + if (!(block & 0x8)) {
> > + switch (block) {
> > + default:
> > + case 2:
> > + elf_hwcap |= HWCAP_ATOMICS;
> > + case 1:
> > + /* RESERVED */
> > + case 0:
> > + break;
> > + }
> > + }
>
> At some point, we should move the elf_hwcap setting to the cpu features
> infrastructure. The PAN patch series introduces an "enable" method for
> detected CPU features (can be cleaned up for 4.4).
On 32-bit ARM, we have this accessor:
cpuid_feature_extract_field()
which is there to properly deal with sign extending the 4-bit values, and
avoids all the if (!(block & 8)) { crap.
The above could then become the much simpler:
block = cpuid_feature_extract_field(...);
if (block > 0)
elf_hwcap |= HWCAP_CRC32;
block = cpuid_feature_extract_field(isarN, 20);
if (block > 1)
elf_hwcap |= HWCAP_ATOMICS;
--
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up
according to speedtest.net.
More information about the linux-arm-kernel
mailing list