Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md into for-linus
Pull the pending 4.21 changes for md from Shaohua. * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md: md: fix raid10 hang issue caused by barrier raid10: refactor common wait code from regular read/write request md: remvoe redundant condition check lib/raid6: add option to skip algo benchmarking lib/raid6: sort algos in rough performance order lib/raid6: check for assembler SSSE3 support lib/raid6: avoid __attribute_const__ redefinition lib/raid6: add missing include for raid6test md: remove set but not used variable 'bi_rdev'
This commit is contained in:
@@ -10,6 +10,14 @@ menu "Library routines"
|
||||
config RAID6_PQ
|
||||
tristate
|
||||
|
||||
config RAID6_PQ_BENCHMARK
|
||||
bool "Automatically choose fastest RAID6 PQ functions"
|
||||
depends on RAID6_PQ
|
||||
default y
|
||||
help
|
||||
Benchmark all available RAID6 PQ functions on init and choose the
|
||||
fastest one.
|
||||
|
||||
config BITREVERSE
|
||||
tristate
|
||||
|
||||
|
@@ -34,64 +34,64 @@ struct raid6_calls raid6_call;
|
||||
EXPORT_SYMBOL_GPL(raid6_call);
|
||||
|
||||
const struct raid6_calls * const raid6_algos[] = {
|
||||
#if defined(__ia64__)
|
||||
&raid6_intx16,
|
||||
&raid6_intx32,
|
||||
#endif
|
||||
#if defined(__i386__) && !defined(__arch_um__)
|
||||
&raid6_mmxx1,
|
||||
&raid6_mmxx2,
|
||||
&raid6_sse1x1,
|
||||
&raid6_sse1x2,
|
||||
&raid6_sse2x1,
|
||||
&raid6_sse2x2,
|
||||
#ifdef CONFIG_AS_AVX2
|
||||
&raid6_avx2x1,
|
||||
&raid6_avx2x2,
|
||||
#endif
|
||||
#ifdef CONFIG_AS_AVX512
|
||||
&raid6_avx512x1,
|
||||
&raid6_avx512x2,
|
||||
&raid6_avx512x1,
|
||||
#endif
|
||||
#ifdef CONFIG_AS_AVX2
|
||||
&raid6_avx2x2,
|
||||
&raid6_avx2x1,
|
||||
#endif
|
||||
&raid6_sse2x2,
|
||||
&raid6_sse2x1,
|
||||
&raid6_sse1x2,
|
||||
&raid6_sse1x1,
|
||||
&raid6_mmxx2,
|
||||
&raid6_mmxx1,
|
||||
#endif
|
||||
#if defined(__x86_64__) && !defined(__arch_um__)
|
||||
&raid6_sse2x1,
|
||||
&raid6_sse2x2,
|
||||
&raid6_sse2x4,
|
||||
#ifdef CONFIG_AS_AVX2
|
||||
&raid6_avx2x1,
|
||||
&raid6_avx2x2,
|
||||
&raid6_avx2x4,
|
||||
#endif
|
||||
#ifdef CONFIG_AS_AVX512
|
||||
&raid6_avx512x1,
|
||||
&raid6_avx512x2,
|
||||
&raid6_avx512x4,
|
||||
&raid6_avx512x2,
|
||||
&raid6_avx512x1,
|
||||
#endif
|
||||
#ifdef CONFIG_AS_AVX2
|
||||
&raid6_avx2x4,
|
||||
&raid6_avx2x2,
|
||||
&raid6_avx2x1,
|
||||
#endif
|
||||
&raid6_sse2x4,
|
||||
&raid6_sse2x2,
|
||||
&raid6_sse2x1,
|
||||
#endif
|
||||
#ifdef CONFIG_ALTIVEC
|
||||
&raid6_altivec1,
|
||||
&raid6_altivec2,
|
||||
&raid6_altivec4,
|
||||
&raid6_altivec8,
|
||||
&raid6_vpermxor1,
|
||||
&raid6_vpermxor2,
|
||||
&raid6_vpermxor4,
|
||||
&raid6_vpermxor8,
|
||||
&raid6_vpermxor4,
|
||||
&raid6_vpermxor2,
|
||||
&raid6_vpermxor1,
|
||||
&raid6_altivec8,
|
||||
&raid6_altivec4,
|
||||
&raid6_altivec2,
|
||||
&raid6_altivec1,
|
||||
#endif
|
||||
#if defined(CONFIG_S390)
|
||||
&raid6_s390vx8,
|
||||
#endif
|
||||
&raid6_intx1,
|
||||
&raid6_intx2,
|
||||
&raid6_intx4,
|
||||
&raid6_intx8,
|
||||
#ifdef CONFIG_KERNEL_MODE_NEON
|
||||
&raid6_neonx1,
|
||||
&raid6_neonx2,
|
||||
&raid6_neonx4,
|
||||
&raid6_neonx8,
|
||||
&raid6_neonx4,
|
||||
&raid6_neonx2,
|
||||
&raid6_neonx1,
|
||||
#endif
|
||||
#if defined(__ia64__)
|
||||
&raid6_intx32,
|
||||
&raid6_intx16,
|
||||
#endif
|
||||
&raid6_intx8,
|
||||
&raid6_intx4,
|
||||
&raid6_intx2,
|
||||
&raid6_intx1,
|
||||
NULL
|
||||
};
|
||||
|
||||
@@ -163,6 +163,11 @@ static inline const struct raid6_calls *raid6_choose_gen(
|
||||
if ((*algo)->valid && !(*algo)->valid())
|
||||
continue;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_RAID6_PQ_BENCHMARK)) {
|
||||
best = *algo;
|
||||
break;
|
||||
}
|
||||
|
||||
perf = 0;
|
||||
|
||||
preempt_disable();
|
||||
|
@@ -34,6 +34,9 @@ endif
|
||||
|
||||
ifeq ($(IS_X86),yes)
|
||||
OBJS += mmx.o sse1.o sse2.o avx2.o recov_ssse3.o recov_avx2.o avx512.o recov_avx512.o
|
||||
CFLAGS += $(shell echo "pshufb %xmm0, %xmm0" | \
|
||||
gcc -c -x assembler - >&/dev/null && \
|
||||
rm ./-.o && echo -DCONFIG_AS_SSSE3=1)
|
||||
CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1" | \
|
||||
gcc -c -x assembler - >&/dev/null && \
|
||||
rm ./-.o && echo -DCONFIG_AS_AVX2=1)
|
||||
|
Reference in New Issue
Block a user