On 23 January 2015 at 16:28, Steve Capper <steve.cap...@linaro.org> wrote:
> Hi Yazen,
>
> This is looking good, just a few minor comments below.
>
> Cheers,
> --
> Steve
>
> On Fri, Jan 23, 2015 at 09:13:42AM -0600, Yazen Ghannam wrote:
>> ARMv8 defines a set of optional CRC32/CRC32C instructions.
>> This patch defines an optimized function that uses these
>> instructions when available rather than table-based lookup.
>> Optimized function based on a Hadoop patch by Ed Nevill.
>>
>> Autotools updated to check for compiler support.
>> Optimized function is selected at runtime based on HWCAP_CRC32.
>> Added crc32c "performance" unit test and arch unit test.
>>
>> Tested on AMD Seattle.
>> Passes all crc32c unit tests.
>> Unit test shows ~4x performance increase versus sctp.
>>
>> Signed-off-by: Yazen Ghannam <yazen.ghan...@linaro.org>
>> ---
>>  configure.ac                   |  1 +
>>  m4/ax_arm.m4                   | 18 +++++++++++--
>>  src/arch/arm.c                 |  2 ++
>>  src/arch/arm.h                 |  1 +
>>  src/common/Makefile.am         | 10 +++++++-
>>  src/common/crc32c.cc           |  6 +++++
>>  src/common/crc32c_aarch64.c    | 58 
>> ++++++++++++++++++++++++++++++++++++++++++
>>  src/common/crc32c_aarch64.h    | 25 ++++++++++++++++++
>>  src/test/common/test_crc32c.cc | 11 ++++++++
>>  src/test/test_arch.cc          |  3 +++
>>  10 files changed, 132 insertions(+), 3 deletions(-)
>>  create mode 100644 src/common/crc32c_aarch64.c
>>  create mode 100644 src/common/crc32c_aarch64.h
>>
[...]
>> diff --git a/src/test/test_arch.cc b/src/test/test_arch.cc
>> index b129262..27cdd1d 100644
>> --- a/src/test/test_arch.cc
>> +++ b/src/test/test_arch.cc
>> @@ -50,6 +50,9 @@ TEST(Arch, all)
>>    expected = (strstr(flags, " neon ") || strstr(flags, " asimd ")) ? 1 : 0;
>>    EXPECT_EQ(expected, ceph_arch_neon);
>>
>> +  expected = strstr(flags, " crc32 ") ? 1 : 0;
>> +  EXPECT_EQ(expected, ceph_arch_aarch64_crc32);
>> +
>
> The test_arch.cc file looks very dangerous to me, it's strstr scanning
> for CPU flags from /proc/cpuinfo with no regard for architecture.
> (It is quite likely another chip in future introduces the crc32 CPU flag).
>
> I see it's trying to sanity check that the HW_CAPS logic matches up
> with the cpuflags. Could you please surround the crc32 check with:
>
> #ifdef __arch64__
> #endif /* __arch64__ */
>
> Just to pin it down to ARM.
>

Any way we could use getauxval(AT_HWCAP) here? It has been around
since before AArch64 glibc support stabilised, afaik, and parsing
/proc/cpuinfo is one of the things we really get rid of.
(Perhaps in a separate patch)

-- 
Ard.

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to