diff --git a/KAELz4/src/kaelz4_adapter.c b/KAELz4/src/kaelz4_adapter.c index e101b662953411f7eaefbbd43478a889c91b71e7..4ac076e7ebdc3682606b7ba022ccff4d13608009 100644 --- a/KAELz4/src/kaelz4_adapter.c +++ b/KAELz4/src/kaelz4_adapter.c @@ -735,7 +735,7 @@ int KAELZ4_compress_async_in_session(void *sess, const struct kaelz4_buffer_list if (unlikely(sess == NULL || kaelz4_check_param_valid(src, dst, callback, result) != KAE_LZ4_SUCC)) { return KAE_LZ4_INVAL_PARA; } - if (result->src_size <= SMALL_BLOCK_SIZE) { + if (result->src_size <= SMALL_BLOCK_SIZE && src->buf_num <= SMALL_BLOCK_MAX_BUF_NUM) { return kaelz4_async_do_comp_in_session(sess, src, dst, callback, result, KAELZ4_ASYNC_SMALL_BLOCK, NULL); } @@ -793,7 +793,7 @@ int KAELZ4_compress_async(const struct kaelz4_buffer_list *src, struct kaelz4_bu return KAE_LZ4_INVAL_PARA; } - if (result->src_size <= SMALL_BLOCK_SIZE) { + if (result->src_size <= SMALL_BLOCK_SIZE && src->buf_num <= SMALL_BLOCK_MAX_BUF_NUM) { return kaelz4_async_do_comp(src, dst, callback, result, KAELZ4_ASYNC_SMALL_BLOCK, NULL); } @@ -840,7 +840,7 @@ size_t KAELZ4_compress_get_tuple_buf_len(size_t src_len) int KAELZ4_rebuild_lz77_to_block(const struct kaelz4_buffer_list *src, struct kaelz4_buffer_list *tuple_buf, struct kaelz4_buffer_list *dst, struct kaelz4_result *result) { - if (result->src_size <= SMALL_BLOCK_SIZE) { + if (result->src_size <= SMALL_BLOCK_SIZE && src->buf_num <= SMALL_BLOCK_MAX_BUF_NUM) { return kaelz4_triples_rebuild_impl(src, tuple_buf, dst, result, KAELZ4_ASYNC_SMALL_BLOCK, NULL); } diff --git a/KAELz4/src/kaelz4_adapter.h b/KAELz4/src/kaelz4_adapter.h index f137f763ae629e19fcea669fef611f3e25445429..ce670e26582f0cf313a410244492946d35e2ccec 100644 --- a/KAELz4/src/kaelz4_adapter.h +++ b/KAELz4/src/kaelz4_adapter.h @@ -24,6 +24,7 @@ enum { #define KAELZ4_TASK_QUEUE_DEPTH 1024 #define ENQUEUE_TIME_OUT_US 1000000 #define SMALL_BLOCK_SIZE (64 * 1024) +#define SMALL_BLOCK_MAX_BUF_NUM (60) #define ASYNC_DEQUEUE_PROCESS_DEFAULT_BUDGET 1 #define ASYNC_POLLING_DEFAULT_BUDGET 1 diff --git a/KAELz4/src/v1/kaelz4_comp.h b/KAELz4/src/v1/kaelz4_comp.h index 66eaa11bf1c163208556c19b191d2a2db90fc0ea..41187cfe91843b714949f21daff0eef8fc943d6d 100644 --- a/KAELz4/src/v1/kaelz4_comp.h +++ b/KAELz4/src/v1/kaelz4_comp.h @@ -29,8 +29,6 @@ #define HARDWARE_BLOCK_SIZE (64 * 1024) // 硬件支持的最大压缩块大小 -#define REQ_BUFFER_MAX 60 // uadk支持最大的sgl buf数量 - #define MAX_NUM_IN_COMP MAX_KAE_CTX_DEPTH // 每个线程最多允许同时进行的压缩任务数 #if !defined(LZ4_memcpy) diff --git a/KAELz4/src/v1/kaelz4_ctx.h b/KAELz4/src/v1/kaelz4_ctx.h index 69d36a3bd1d232e548208abb41c8f7c1049a6e76..7fb5109dff60bc01f4182d8f99a408ba20992fb1 100644 --- a/KAELz4/src/v1/kaelz4_ctx.h +++ b/KAELz4/src/v1/kaelz4_ctx.h @@ -12,6 +12,7 @@ #include "uadk/v1/wd_comp.h" #define MAX_KAE_CTX_DEPTH 64 +#define REQ_BUFFER_MAX 60 // uadk支持最大的sgl buf数量 enum kaelz4_comp_status { KAEZIP_COMP_INIT = 0, @@ -61,8 +62,8 @@ struct kaelz4_ctx { void* wd_ctx; struct wcrypto_zstd_out output; wd_map usr_map; - unsigned char src_sgl_buf[32 + (32 * 60)]; // 32: sizeof(struct wd_sgl) + sizeof(struct wd_sge) * 60 - unsigned char dst_sgl_buf[32 + (32 * 60)]; // 32: sizeof(struct wd_sgl) + sizeof(struct wd_sge) * 60 + unsigned char src_sgl_buf[32 + (32 * (REQ_BUFFER_MAX + 1))]; // 32: sizeof(struct wd_sgl) + sizeof(struct wd_sge) * 60 + 1 * sizeof(struct wd_sge) for hisi_sge + unsigned char dst_sgl_buf[32 + (32 * (REQ_BUFFER_MAX + 1))]; // 32: sizeof(struct wd_sgl) + sizeof(struct wd_sge) * 60 + 1 * sizeof(struct wd_sge) for hisi_sge void *src_sgl; void *dst_sgl_usr; void *dst_sgl_kernel;