diff options
author | Jenkins <jenkins@review.openstack.org> | 2017-03-29 06:49:40 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2017-03-29 06:49:41 +0000 |
commit | 7c4ef60c9d9e69dd23e43ec59d6c03e139a32723 (patch) | |
tree | 5480c5659bade1bbdb1ed0e587f21179ccb4997f /src | |
parent | 26e47421407634a270806ff396d99c69f3fa861c (diff) | |
parent | 90679884efa7bc277ced354032ca655e1e99faa2 (diff) | |
download | liberasurecode-7c4ef60c9d9e69dd23e43ec59d6c03e139a32723.tar.gz |
Merge "ISA-L: Only calculate gf tables on init, not every encode"
Diffstat (limited to 'src')
-rw-r--r-- | src/backends/isa-l/isa_l_common.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/backends/isa-l/isa_l_common.c b/src/backends/isa-l/isa_l_common.c index b7fb05e..63e7cca 100644 --- a/src/backends/isa-l/isa_l_common.c +++ b/src/backends/isa-l/isa_l_common.c @@ -41,22 +41,13 @@ int isa_l_encode(void *desc, char **data, char **parity, { isa_l_descriptor *isa_l_desc = (isa_l_descriptor*) desc; - unsigned char *g_tbls = NULL; + unsigned char *g_tbls = isa_l_desc->encode_tables; int k = isa_l_desc->k; int m = isa_l_desc->m; - // Generate g_tbls from encode matrix encode_matrix - g_tbls = malloc(sizeof(unsigned char) * (k * m * 32)); - if (NULL == g_tbls) { - return -1; - } - - isa_l_desc->ec_init_tables(k, m, &isa_l_desc->matrix[k * k], g_tbls); - /* FIXME - make ec_encode_data return a value */ isa_l_desc->ec_encode_data(blocksize, k, m, g_tbls, (unsigned char**)data, (unsigned char**)parity); - free(g_tbls); return 0; } @@ -444,6 +435,7 @@ int isa_l_exit(void *desc) isa_l_desc = (isa_l_descriptor*) desc; + free(isa_l_desc->encode_tables); free(isa_l_desc->matrix); free(isa_l_desc); @@ -536,8 +528,24 @@ void * isa_l_common_init(struct ec_backend_args *args, void *backend_sohandle, */ desc->gf_gen_encoding_matrix(desc->matrix, desc->k + desc->m, desc->k); + + /** + * Generate the tables for encoding + */ + desc->encode_tables = malloc(sizeof(unsigned char) * + (desc->k * desc->m * 32)); + if (NULL == desc->encode_tables) { + goto error_free; + } + + desc->ec_init_tables(desc->k, desc->m, + &desc->matrix[desc->k * desc->k], + desc->encode_tables); + return desc; +error_free: + free(desc->matrix); error: free(desc); |