<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>