[dpdk-dev] crypto/scheduler: fix multicore rings re-use

Message ID 1526280767-669-1-git-send-email-kirill.rybalchenko@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Pablo de Lara Guarch
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail Compilation issues

Commit Message

Rybalchenko, Kirill May 14, 2018, 6:52 a.m. UTC
  When scheduler mode changed from multicore to roundrobin and
back to multicore, scheduler tries to create memory rings with
the same name and fails. The fix allows to lookup and re-use
previously allocated memory rings.

Fixes: 4c07e0552f0a ("crypto/scheduler: add multicore scheduling mode")

Signed-off-by: Kirill Rybalchenko <kirill.rybalchenko@intel.com>
---
 drivers/crypto/scheduler/scheduler_multicore.c | 28 ++++++++++++++++++--------
 1 file changed, 20 insertions(+), 8 deletions(-)
  

Comments

Fan Zhang May 14, 2018, 10:01 a.m. UTC | #1
Thanks a lot!

> -----Original Message-----
> From: Rybalchenko, Kirill
> Sent: Monday, May 14, 2018 7:53 AM
> To: dev@dpdk.org
> Cc: stable@dpdk.org; Rybalchenko, Kirill <kirill.rybalchenko@intel.com>;
> Zhang, Roy Fan <roy.fan.zhang@intel.com>
> Subject: [PATCH] crypto/scheduler: fix multicore rings re-use
> 
> When scheduler mode changed from multicore to roundrobin and back to
> multicore, scheduler tries to create memory rings with the same name and
> fails. The fix allows to lookup and re-use previously allocated memory rings.
> 
> Fixes: 4c07e0552f0a ("crypto/scheduler: add multicore scheduling mode")
> 
> Signed-off-by: Kirill Rybalchenko <kirill.rybalchenko@intel.com>
> 

Acked-by: Fan Zhang <roy.fan.zhang@intel.com>
  
De Lara Guarch, Pablo May 16, 2018, 8:44 a.m. UTC | #2
> -----Original Message-----
> From: stable [mailto:stable-bounces@dpdk.org] On Behalf Of Kirill Rybalchenko
> Sent: Monday, May 14, 2018 7:53 AM
> To: dev@dpdk.org
> Cc: stable@dpdk.org; Rybalchenko, Kirill <kirill.rybalchenko@intel.com>; Zhang,
> Roy Fan <roy.fan.zhang@intel.com>
> Subject: [dpdk-stable] [PATCH] crypto/scheduler: fix multicore rings re-use
> 
> When scheduler mode changed from multicore to roundrobin and back to
> multicore, scheduler tries to create memory rings with the same name and fails.
> The fix allows to lookup and re-use previously allocated memory rings.
> 
> Fixes: 4c07e0552f0a ("crypto/scheduler: add multicore scheduling mode")
> 
> Signed-off-by: Kirill Rybalchenko <kirill.rybalchenko@intel.com>

Missing Cc: stable@dpdk.org in commit message.

Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
  
Pattan, Reshma May 16, 2018, 12:57 p.m. UTC | #3
Hi Kirill

Not able to apply this patch cleanly either on dpdk.org or crypto next tree. Can you check if you have to rebase it?

Thanks,
Reshma
  

Patch

diff --git a/drivers/crypto/scheduler/scheduler_multicore.c b/drivers/crypto/scheduler/scheduler_multicore.c
index b2ce44c..206bf86 100644
--- a/drivers/crypto/scheduler/scheduler_multicore.c
+++ b/drivers/crypto/scheduler/scheduler_multicore.c
@@ -346,18 +346,30 @@  scheduler_create_private_ctx(struct rte_cryptodev *dev)
 		char r_name[16];
 
 		snprintf(r_name, sizeof(r_name), MC_SCHED_ENQ_RING_NAME_PREFIX "%u", i);
-		mc_ctx->sched_enq_ring[i] = rte_ring_create(r_name, PER_SLAVE_BUFF_SIZE,
-					rte_socket_id(), RING_F_SC_DEQ | RING_F_SP_ENQ);
+		mc_ctx->sched_enq_ring[i] = rte_ring_lookup(r_name);
 		if (!mc_ctx->sched_enq_ring[i]) {
-			CS_LOG_ERR("Cannot create ring for worker %u", i);
-			return -1;
+			mc_ctx->sched_enq_ring[i] = rte_ring_create(r_name,
+						PER_SLAVE_BUFF_SIZE,
+						rte_socket_id(),
+						RING_F_SC_DEQ | RING_F_SP_ENQ);
+			if (!mc_ctx->sched_enq_ring[i]) {
+				CS_LOG_ERR("Cannot create ring for worker %u",
+					   i);
+				return -1;
+			}
 		}
 		snprintf(r_name, sizeof(r_name), MC_SCHED_DEQ_RING_NAME_PREFIX "%u", i);
-		mc_ctx->sched_deq_ring[i] = rte_ring_create(r_name, PER_SLAVE_BUFF_SIZE,
-					rte_socket_id(), RING_F_SC_DEQ | RING_F_SP_ENQ);
+		mc_ctx->sched_deq_ring[i] = rte_ring_lookup(r_name);
 		if (!mc_ctx->sched_deq_ring[i]) {
-			CS_LOG_ERR("Cannot create ring for worker %u", i);
-			return -1;
+			mc_ctx->sched_deq_ring[i] = rte_ring_create(r_name,
+						PER_SLAVE_BUFF_SIZE,
+						rte_socket_id(),
+						RING_F_SC_DEQ | RING_F_SP_ENQ);
+			if (!mc_ctx->sched_deq_ring[i]) {
+				CS_LOG_ERR("Cannot create ring for worker %u",
+					   i);
+				return -1;
+			}
 		}
 	}