mirror of
https://github.com/intel/isa-l.git
synced 2025-07-03 17:27:11 +02:00
ex: Allow erasure list in any order in ec example
Previous gf_gen_decode_matrix_simple() assumed that all source errors were listed first before any erasures in parity. Generalized to work in any order. Change-Id: I31b9c0c0db5d0155473424ccd0ecdcdd787ef71f Signed-off-by: Greg Tucker <greg.b.tucker@intel.com>
This commit is contained in:
parent
19f2c46d1b
commit
9edac4799d
@ -99,10 +99,9 @@ int main(int argc, char *argv[])
|
|||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
srand(atoi(optarg));
|
srand(atoi(optarg));
|
||||||
k = rand() % MMAX;
|
k = (rand() % (MMAX - 1)) + 1; // Pick k {1 to MMAX - 1}
|
||||||
k++; // Pick k (1 to MMAX)
|
p = (rand() % (MMAX - k)) + 1; // Pick p {1 to MMAX - k}
|
||||||
p = rand() % (MMAX - k);
|
|
||||||
p++; // Pick p (1 to MMAX - k)
|
|
||||||
for (i = 0; i < k + p && nerrs < p; i++)
|
for (i = 0; i < k + p && nerrs < p; i++)
|
||||||
if (rand() & 1)
|
if (rand() & 1)
|
||||||
frag_err_list[nerrs++] = i;
|
frag_err_list[nerrs++] = i;
|
||||||
@ -255,22 +254,24 @@ static int gf_gen_decode_matrix_simple(u8 * encode_matrix,
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
// Get decode matrix with only wanted recovery rows
|
// Get decode matrix with only wanted recovery rows
|
||||||
for (i = 0; i < nsrcerrs; i++) {
|
for (i = 0; i < nerrs; i++) {
|
||||||
for (j = 0; j < k; j++) {
|
if (frag_err_list[i] < k) // A src err
|
||||||
decode_matrix[k * i + j] = invert_matrix[k * frag_err_list[i] + j];
|
for (j = 0; j < k; j++)
|
||||||
}
|
decode_matrix[k * i + j] =
|
||||||
|
invert_matrix[k * frag_err_list[i] + j];
|
||||||
}
|
}
|
||||||
|
|
||||||
// For non-src (parity) erasures need to multiply encode matrix * invert
|
// For non-src (parity) erasures need to multiply encode matrix * invert
|
||||||
for (p = nsrcerrs; p < nerrs; p++) {
|
for (p = 0; p < nerrs; p++) {
|
||||||
|
if (frag_err_list[p] >= k) { // A parity err
|
||||||
for (i = 0; i < k; i++) {
|
for (i = 0; i < k; i++) {
|
||||||
s = 0;
|
s = 0;
|
||||||
for (j = 0; j < k; j++)
|
for (j = 0; j < k; j++)
|
||||||
s ^= gf_mul(invert_matrix[j * k + i],
|
s ^= gf_mul(invert_matrix[j * k + i],
|
||||||
encode_matrix[k * frag_err_list[p] + j]);
|
encode_matrix[k * frag_err_list[p] + j]);
|
||||||
|
|
||||||
decode_matrix[k * p + i] = s;
|
decode_matrix[k * p + i] = s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user