Eliminate raid_delta_gen and convert int/neon32 REC1/REC2 to single-pass fused recovery

This commit is contained in:
Andrea Mazzoleni 2026-09-02 18:19:26 +02:00
parent 0ce89aa35d
commit ec1daddc8e
13 changed files with 70 additions and 429 deletions

View file

@ -1263,8 +1263,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
fflush(stdout);
SPEED_START {
/* force the parity generator used by raid_delta_gen() */
raid_gen_force(2, sizeof(void *) == 8 ? raid_gen2_int64_raid : raid_gen2_int32_raid);
/* +1 to avoid GEN1 optimized case */
raid_rec1_int8(1, id, ip + 1, nd, size, v);
} SPEED_STOP
@ -1367,8 +1365,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
fflush(stdout);
SPEED_START {
/* force the parity generator used by raid_delta_gen() */
raid_gen_force(3, raid_gen3_int8);
/* +2 to select R instead of Q */
raid_rec1_int8(1, id, ip + 2, nd, size, v);
} SPEED_STOP
@ -1471,8 +1467,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
fflush(stdout);
SPEED_START {
/* force the parity generator used by raid_delta_gen() */
raid_gen_force(2, sizeof(void *) == 8 ? raid_gen2_int64_raid : raid_gen2_int32_raid);
raid_rec2_int8(2, id, ip, nd, size, v);
} SPEED_STOP
@ -1489,8 +1483,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
#endif
#ifdef CONFIG_NEON32
SPEED_START {
/* force the parity generator used by raid_delta_gen() */
raid_gen_force(2, raid_gen2_neon32_raid);
raid_rec2_neon32(2, id, ip, nd, size, v);
} SPEED_STOP
@ -1501,8 +1493,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
#ifdef CONFIG_X86
if (raid_cpu_has_ssse3()) {
SPEED_START {
/* force the parity generator used by raid_delta_gen() */
raid_gen_force(2, raid_gen2_sse2_raid);
raid_rec2_ssse3(2, id, ip, nd, size, v);
} SPEED_STOP
@ -1511,8 +1501,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
#ifdef CONFIG_X86_64
SPEED_START {
/* force the parity generator used by raid_delta_gen() */
raid_gen_force(2, raid_gen2_sse2ext_raid);
raid_rec2_ssse3ext(2, id, ip, nd, size, v);
} SPEED_STOP
@ -1571,8 +1559,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
fflush(stdout);
SPEED_START {
/* force the parity generator used by raid_delta_gen() */
raid_gen_force(3, raid_gen3_int8);
/* +1 to avoid GEN2 optimized case */
raid_rec2_int8(2, id, ip + 1, nd, size, v);
} SPEED_STOP
@ -1675,8 +1661,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
fflush(stdout);
SPEED_START {
/* force the parity generator used by raid_delta_gen() */
raid_gen_force(4, raid_gen4_int8);
/* +2 to select R,S instead of Q,R */
raid_rec2_int8(2, id, ip + 2, nd, size, v);
} SPEED_STOP
@ -1779,7 +1763,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
fflush(stdout);
SPEED_START {
raid_gen_force(3, raid_gen3_int8);
raid_rec3_int8(3, id, ip, nd, size, v);
} SPEED_STOP
@ -1872,7 +1855,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
fflush(stdout);
SPEED_START {
raid_gen_force(4, raid_gen4_int8);
raid_rec4_int8(4, id, ip, nd, size, v);
} SPEED_STOP
@ -1965,7 +1947,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
fflush(stdout);
SPEED_START {
raid_gen_force(5, raid_gen5_int8);
raid_rec5_int8(5, id, ip, nd, size, v);
} SPEED_STOP
@ -2058,7 +2039,6 @@ void speed_rec(int nd, void **v, int size, int delta, int period)
fflush(stdout);
SPEED_START {
raid_gen_force(6, raid_gen6_int8);
raid_rec6_int8(6, id, ip, nd, size, v);
} SPEED_STOP