<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: "Sitka Text", Cochin, serif; font-size: 11pt; color: rgb(0, 0, 0);" class="elementToProof ContentPasted0">
Acked-by: Kai Ji <<a href="mailto:kai.ji@intel.com" class="ContentPasted0" data-loopstyle="linkonly">kai.ji@intel.com</a>><br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Power, Ciara <ciara.power@intel.com><br>
<b>Sent:</b> 30 June 2023 09:34<br>
<b>To:</b> dev@dpdk.org <dev@dpdk.org><br>
<b>Cc:</b> Ji, Kai <kai.ji@intel.com>; Power, Ciara <ciara.power@intel.com>; De Lara Guarch, Pablo <pablo.de.lara.guarch@intel.com><br>
<b>Subject:</b> [PATCH] drivers/ipsec_mb: fix aesni_mb set session ID</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">In the case of multiprocess, when the same session is being used for both<br>
primary and secondary processes, the session ID will be the same.<br>
However the pointers are not available to the secondary process, so in this<br>
case when the session was created by a different process ID, then copy<br>
the template session to the job again.<br>
<br>
Fixes: 0fb4834e00af ("crypto/ipsec_mb: set and use session ID")<br>
Cc: pablo.de.lara.guarch@intel.com<br>
<br>
Signed-off-by: Ciara Power <ciara.power@intel.com><br>
---<br>
drivers/crypto/ipsec_mb/pmd_aesni_mb.c | 8 +++++++-<br>
drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h | 2 ++<br>
2 files changed, 9 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c<br>
index f4322d9af4..555b59621d 100644<br>
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c<br>
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c<br>
@@ -2,6 +2,8 @@<br>
* Copyright(c) 2015-2021 Intel Corporation<br>
*/<br>
<br>
+#include <unistd.h><br>
+<br>
#include "pmd_aesni_mb_priv.h"<br>
<br>
struct aesni_mb_op_buf_data {<br>
@@ -847,6 +849,7 @@ aesni_mb_session_configure(IMB_MGR *mb_mgr,<br>
<br>
#if IMB_VERSION(1, 3, 0) < IMB_VERSION_NUM<br>
sess->session_id = imb_set_session(mb_mgr, &sess->template_job);<br>
+ sess->pid = getpid();<br>
#endif<br>
<br>
return 0;<br>
@@ -1482,7 +1485,10 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,<br>
session->template_job.cipher_mode;<br>
<br>
#if IMB_VERSION(1, 3, 0) < IMB_VERSION_NUM<br>
- if (job->session_id != session->session_id)<br>
+ if (session->pid != getpid()) {<br>
+ memcpy(job, &session->template_job, sizeof(IMB_JOB));<br>
+ imb_set_session(mb_mgr, job);<br>
+ } else if (job->session_id != session->session_id)<br>
#endif<br>
memcpy(job, &session->template_job, sizeof(IMB_JOB));<br>
<br>
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h<br>
index 4ffbe4b282..3f6cf30c39 100644<br>
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h<br>
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h<br>
@@ -854,6 +854,8 @@ struct aesni_mb_session {<br>
/*< Template job structure */<br>
uint32_t session_id;<br>
/*< IPSec MB session ID */<br>
+ pid_t pid;<br>
+ /*< Process ID that created session */<br>
struct {<br>
uint16_t offset;<br>
} iv;<br>
-- <br>
2.25.1<br>
<br>
</div>
</span></font></div>
</body>
</html>