Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

lib/raid6: update test program for recovery functions

Test each combination of recovery and syndrome generation
functions.

Signed-off-by: Jim Kukunas <james.t.kukunas@linux.intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>

authored by

Jim Kukunas and committed by
NeilBrown
2dbf7084 048a8b8c

+32 -17
+1 -1
lib/raid6/test/Makefile
··· 23 23 all: raid6.a raid6test 24 24 25 25 raid6.a: int1.o int2.o int4.o int8.o int16.o int32.o mmx.o sse1.o sse2.o \ 26 - altivec1.o altivec2.o altivec4.o altivec8.o recov.o algos.o \ 26 + altivec1.o altivec2.o altivec4.o altivec8.o recov.o recov_ssse3.o algos.o \ 27 27 tables.o 28 28 rm -f $@ 29 29 $(AR) cq $@ $^
+21 -11
lib/raid6/test/test.c
··· 90 90 int main(int argc, char *argv[]) 91 91 { 92 92 const struct raid6_calls *const *algo; 93 + const struct raid6_recov_calls *const *ra; 93 94 int i, j; 94 95 int err = 0; 95 96 96 97 makedata(); 97 98 98 - for (algo = raid6_algos; *algo; algo++) { 99 - if (!(*algo)->valid || (*algo)->valid()) { 100 - raid6_call = **algo; 99 + for (ra = raid6_recov_algos; *ra; ra++) { 100 + if ((*ra)->valid && !(*ra)->valid()) 101 + continue; 102 + raid6_2data_recov = (*ra)->data2; 103 + raid6_datap_recov = (*ra)->datap; 101 104 102 - /* Nuke syndromes */ 103 - memset(data[NDISKS-2], 0xee, 2*PAGE_SIZE); 105 + printf("using recovery %s\n", (*ra)->name); 104 106 105 - /* Generate assumed good syndrome */ 106 - raid6_call.gen_syndrome(NDISKS, PAGE_SIZE, 107 - (void **)&dataptrs); 107 + for (algo = raid6_algos; *algo; algo++) { 108 + if (!(*algo)->valid || (*algo)->valid()) { 109 + raid6_call = **algo; 108 110 109 - for (i = 0; i < NDISKS-1; i++) 110 - for (j = i+1; j < NDISKS; j++) 111 - err += test_disks(i, j); 111 + /* Nuke syndromes */ 112 + memset(data[NDISKS-2], 0xee, 2*PAGE_SIZE); 113 + 114 + /* Generate assumed good syndrome */ 115 + raid6_call.gen_syndrome(NDISKS, PAGE_SIZE, 116 + (void **)&dataptrs); 117 + 118 + for (i = 0; i < NDISKS-1; i++) 119 + for (j = i+1; j < NDISKS; j++) 120 + err += test_disks(i, j); 121 + } 112 122 } 113 123 printf("\n"); 114 124 }
+10 -5
lib/raid6/x86.h
··· 35 35 { 36 36 } 37 37 38 + #define __aligned(x) __attribute__((aligned(x))) 39 + 38 40 #define X86_FEATURE_MMX (0*32+23) /* Multimedia Extensions */ 39 41 #define X86_FEATURE_FXSR (0*32+24) /* FXSAVE and FXRSTOR instructions 40 42 * (fast save and restore) */ 41 43 #define X86_FEATURE_XMM (0*32+25) /* Streaming SIMD Extensions */ 42 44 #define X86_FEATURE_XMM2 (0*32+26) /* Streaming SIMD Extensions-2 */ 45 + #define X86_FEATURE_XMM3 (4*32+ 0) /* "pni" SSE-3 */ 46 + #define X86_FEATURE_SSSE3 (4*32+ 9) /* Supplemental SSE-3 */ 47 + #define X86_FEATURE_AVX (4*32+28) /* Advanced Vector Extensions */ 43 48 #define X86_FEATURE_MMXEXT (1*32+22) /* AMD MMX extensions */ 44 49 45 50 /* Should work well enough on modern CPUs for testing */ 46 51 static inline int boot_cpu_has(int flag) 47 52 { 48 - u32 eax = (flag >> 5) ? 0x80000001 : 1; 49 - u32 edx; 53 + u32 eax = (flag & 0x20) ? 0x80000001 : 1; 54 + u32 ecx, edx; 50 55 51 56 asm volatile("cpuid" 52 - : "+a" (eax), "=d" (edx) 53 - : : "ecx", "ebx"); 57 + : "+a" (eax), "=d" (edx), "=c" (ecx) 58 + : : "ebx"); 54 59 55 - return (edx >> (flag & 31)) & 1; 60 + return ((flag & 0x80 ? ecx : edx) >> (flag & 31)) & 1; 56 61 } 57 62 58 63 #endif /* ndef __KERNEL__ */