Modify checksum obtain method of QAT

CpaDcGeneratefooter function that obtain the checksum code
does not support the CPA_DC_STATELESS mode. So we get the
adler32 chencksum of the end of the zlib from dc_results.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Chengfei Zhu <chengfeix.zhu@intel.com>
Signed-off-by: hedong.zhang <h_d_zhang@163.com>
Closes #12343
This commit is contained in:
hedongzhang 2021-08-04 01:46:33 +08:00 committed by Tony Hutter
parent 451d6da988
commit ddb732e2c8
1 changed files with 4 additions and 23 deletions

View File

@ -419,30 +419,11 @@ qat_compress_impl(qat_compress_dir_t dir, char *src, int src_len,
goto fail; goto fail;
} }
flat_buf_dst = (CpaFlatBuffer *)(buf_list_dst + 1); /* get adler32 checksum and append footer */
/* move to the last page */ *(Cpa32U*)(dst + hdr_sz + compressed_sz) =
flat_buf_dst += (compressed_sz + hdr_sz) >> PAGE_SHIFT; BSWAP_32(dc_results.checksum);
/* no space for gzip footer in the last page */ *c_len = hdr_sz + compressed_sz + ZLIB_FOOT_SZ;
if (((compressed_sz + hdr_sz) % PAGE_SIZE)
+ ZLIB_FOOT_SZ > PAGE_SIZE) {
status = CPA_STATUS_INCOMPRESSIBLE;
goto fail;
}
/* jump to the end of the buffer and append footer */
flat_buf_dst->pData =
(char *)((unsigned long)flat_buf_dst->pData & PAGE_MASK)
+ ((compressed_sz + hdr_sz) % PAGE_SIZE);
flat_buf_dst->dataLenInBytes = ZLIB_FOOT_SZ;
dc_results.produced = 0;
status = cpaDcGenerateFooter(session_handle,
flat_buf_dst, &dc_results);
if (status != CPA_STATUS_SUCCESS)
goto fail;
*c_len = compressed_sz + dc_results.produced + hdr_sz;
QAT_STAT_INCR(comp_total_out_bytes, *c_len); QAT_STAT_INCR(comp_total_out_bytes, *c_len);
} else { } else {
ASSERT3U(dir, ==, QAT_DECOMPRESS); ASSERT3U(dir, ==, QAT_DECOMPRESS);