linux/lib/raid6
Ard Biesheuvel 35129dde88 md/raid6: use faster multiplication for ARM NEON delta syndrome
The P/Q left side optimization in the delta syndrome simply involves
repeatedly multiplying a value by polynomial 'x' in GF(2^8). Given
that 'x * x * x * x' equals 'x^4' even in the polynomial world, we
can accelerate this substantially by performing up to 4 such operations
at once, using the NEON instructions for polynomial multiplication.

Results on a Cortex-A57 running in 64-bit mode:

  Before:
  -------
  raid6: neonx1   xor()  1680 MB/s
  raid6: neonx2   xor()  2286 MB/s
  raid6: neonx4   xor()  3162 MB/s
  raid6: neonx8   xor()  3389 MB/s

  After:
  ------
  raid6: neonx1   xor()  2281 MB/s
  raid6: neonx2   xor()  3362 MB/s
  raid6: neonx4   xor()  3787 MB/s
  raid6: neonx8   xor()  4239 MB/s

While we're at it, simplify MASK() by using a signed shift rather than
a vector compare involving a temp register.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2017-08-09 18:51:57 +01:00
..
test raid6/test/test.c: bug fix: Specify aligned(alignment) attributes to the char arrays 2016-09-26 16:18:21 -07:00
.gitignore RAID/s390: add SIMD implementation for raid6 gen/xor 2016-08-29 11:05:04 +02:00
algos.c Merge tag 'md/4.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md 2016-10-07 09:45:43 -07:00
altivec.uc powerpc: Create disable_kernel_{fp,altivec,vsx,spe}() 2015-12-01 13:52:25 +11:00
avx2.c lib/raid6: Add AVX2 optimized xor_syndrome functions 2016-11-07 15:08:20 -08:00
avx512.c lib/raid6: Add AVX512 optimized xor_syndrome functions 2016-09-21 09:09:44 -07:00
int.uc md/raid6 algorithms: xor_syndrome() for generic int 2015-04-22 08:00:42 +10:00
Makefile Merge tag 'md/4.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md 2016-10-07 09:45:43 -07:00
mktables.c lib/raid6: Add log-of-2 table for RAID6 HW requiring disk position 2017-05-16 10:01:57 +05:30
mmx.c md/raid6 algorithms: delta syndrome functions 2015-04-22 08:00:41 +10:00
neon.c md/raid6: delta syndrome for ARM NEON 2015-08-31 19:29:05 +02:00
neon.uc md/raid6: use faster multiplication for ARM NEON delta syndrome 2017-08-09 18:51:57 +01:00
recov_avx2.c x86/raid6: correctly check for assembler capabilities 2015-02-04 08:35:51 +11:00
recov_avx512.c lib/raid6: Add AVX512 optimized recovery functions 2016-09-21 09:09:44 -07:00
recov_s390xc.c RAID/s390: provide raid6 recovery optimization 2016-09-01 16:13:25 +02:00
recov_ssse3.c x86/raid6: correctly check for assembler capabilities 2015-02-04 08:35:51 +11:00
recov.c lib/raid6: fix sparse warnings in recovery functions 2012-05-28 14:10:22 +10:00
s390vx.uc RAID/s390: add SIMD implementation for raid6 gen/xor 2016-08-29 11:05:04 +02:00
sse1.c md/raid6 algorithms: delta syndrome functions 2015-04-22 08:00:41 +10:00
sse2.c md/raid6 algorithms: xor_syndrome() for SSE2 2015-04-22 08:00:42 +10:00
tilegx.uc md/raid6 algorithms: delta syndrome functions 2015-04-22 08:00:41 +10:00
unroll.awk
x86.h lib/raid6: Add AVX512 optimized gen_syndrome functions 2016-09-21 09:09:44 -07:00