<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: "IntelOne Text"; font-size: 10pt; color: rgb(0, 0, 0);" class="elementToProof">
Acked-by: Kai Ji <kai.ji@intel.com></div>
<div class="elementToProof"><span style="font-family: "IntelOne Text"; font-size: 10pt; color: rgb(0, 0, 0);"></span><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<hr style="display: inline-block; width: 98%;">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<b>From:</b> Nicolau, Radu <radu.nicolau@intel.com><br>
<b>Sent:</b> Tuesday, December 02, 2025 10:57<br>
<b>To:</b> dev@dpdk.org <dev@dpdk.org><br>
<b>Cc:</b> Nicolau, Radu <radu.nicolau@intel.com>; stable@dpdk.org <stable@dpdk.org>; Ji, Kai <kai.ji@intel.com><br>
<b>Subject:</b> [PATCH] crypto/qat: align the the vector address </div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-size: 11pt;">Align the vector address rather than computed source address to<br>
make sure the alignment is properly propagated.<br>
<br>
Fixes: 253174309ff7 ("crypto/qat: fix source buffer alignment")<br>
Cc: stable@dpdk.org<br>
<br>
Signed-off-by: Radu Nicolau <radu.nicolau@intel.com><br>
---<br>
drivers/crypto/qat/dev/qat_crypto_pmd_gens.h | 33 +++++++++-----------<br>
1 file changed, 15 insertions(+), 18 deletions(-)<br>
<br>
diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h b/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h<br>
index 67dc889b50..22ee0fe4fe 100644<br>
--- a/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h<br>
+++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gens.h<br>
@@ -443,6 +443,21 @@ qat_sym_build_req_set_data(struct icp_qat_fw_la_bulk_req *req,<br>
n_dst > QAT_SYM_SGL_MAX_NUMBER))<br>
return -1;<br>
<br>
+ /* For crypto API only: try to align the in-place buffers*/<br>
+ if (op != NULL && likely(n_dst == 0) && likely(!is_sgl)) {<br>
+ rte_iova_t offset = src_vec[0].iova & RTE_CACHE_LINE_MASK;<br>
+ if (offset) {<br>
+ rte_iova_t buff_addr = rte_mbuf_iova_get(op->sym->m_src);<br>
+ /* make sure src_data_start is still within the buffer */<br>
+ if (src_vec[0].iova - offset >= buff_addr) {<br>
+ src_vec[0].iova -= offset;<br>
+ src_vec[0].len += offset;<br>
+ ofs->ofs.auth.head += offset;<br>
+ ofs->ofs.cipher.head += offset;<br>
+ }<br>
+ }<br>
+ }<br>
+<br>
if (likely(!is_sgl)) {<br>
src_data_start = src_vec[0].iova;<br>
tl_src = total_len_src =<br>
@@ -503,24 +518,6 @@ qat_sym_build_req_set_data(struct icp_qat_fw_la_bulk_req *req,<br>
dst_data_start = src_data_start;<br>
}<br>
<br>
- /* For crypto API only try to align the in-place buffers*/<br>
- if (op != NULL && likely(n_dst == 0)) {<br>
- uint16_t offset = src_data_start & RTE_CACHE_LINE_MASK;<br>
- if (offset) {<br>
- rte_iova_t buff_addr = rte_mbuf_iova_get(op->sym->m_src);<br>
- /* make sure src_data_start is still within the buffer */<br>
- if (src_data_start - offset >= buff_addr) {<br>
- src_data_start -= offset;<br>
- dst_data_start = src_data_start;<br>
- ofs->ofs.auth.head += offset;<br>
- ofs->ofs.cipher.head += offset;<br>
- tl_src += offset;<br>
- total_len_src = tl_src;<br>
- total_len_dst = tl_src;<br>
- }<br>
- }<br>
- }<br>
-<br>
req->comn_mid.src_data_addr = src_data_start;<br>
req->comn_mid.dest_data_addr = dst_data_start;<br>
req->comn_mid.src_length = total_len_src;<br>
--<br>
2.50.1<br>
<br>
</div>
</body>
</html>