[v3] test/crypto: fix enqueue dequeue callback case

Message ID 20240524171327.885698-1-gakhil@marvell.com (mailing list archive)
State Accepted
Delegated to: akhil goyal
Headers
Series [v3] test/crypto: fix enqueue dequeue callback case |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/github-robot: build success github build: passed
ci/intel-Functional success Functional PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-compile-amd64-testing success Testing PASS
ci/iol-unit-amd64-testing success Testing PASS
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-sample-apps-testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-compile-arm64-testing success Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS

Commit Message

Akhil Goyal May 24, 2024, 5:13 p.m. UTC
  The enqueue/dequeue callback test cases were using the
test_null_burst_operation() for doing enqueue/dequeue.
But this function is only designed to be run for NULL PMD.
Hence for other PMDs, the callback was not getting called.
Now, separate processing thread is removed, instead NULL crypto
operation is created and processed so that callbacks are called.
Also added a check on a global static variable to verify
that the callback is actually called and fail the case if
it is not getting called.

Fixes: 5523a75af539 ("test/crypto: add case for enqueue/dequeue callbacks")
Cc: stable@dpdk.org

Signed-off-by: Akhil Goyal <gakhil@marvell.com>
---
-v3: replaced AES-SHA1 with NULL crypto and removed separate thread.

 app/test/test_cryptodev.c | 106 ++++++++++++++++++++++++++++++++------
 1 file changed, 89 insertions(+), 17 deletions(-)
  

Comments

Kundapura, Ganapati May 27, 2024, 10:48 a.m. UTC | #1
Addressed
Tested cryptodev_qat_autotest and cryptodev_null_autotest this patch along with https://patches.dpdk.org/project/dpdk/patch/20240416081222.3002268-1-ganapati.kundapura@intel.com/, callbacks are getting called for both NULL pmd and qat pmd.

Acked-by: Ganapati Kundapura <ganapati.kundapura@intel.com>

Thanks,
Ganapati

> -----Original Message-----
> From: Akhil Goyal <gakhil@marvell.com>
> Sent: Friday, May 24, 2024 10:43 PM
> To: dev@dpdk.org
> Cc: Kundapura, Ganapati <ganapati.kundapura@intel.com>; Gujjar,
> Abhinandan S <abhinandan.gujjar@intel.com>; fanzhang.oss@gmail.com;
> anoobj@marvell.com; Akhil Goyal <gakhil@marvell.com>; stable@dpdk.org
> Subject: [PATCH v3] test/crypto: fix enqueue dequeue callback case
> 
> The enqueue/dequeue callback test cases were using the
> test_null_burst_operation() for doing enqueue/dequeue.
> But this function is only designed to be run for NULL PMD.
> Hence for other PMDs, the callback was not getting called.
> Now, separate processing thread is removed, instead NULL crypto operation is
> created and processed so that callbacks are called.
> Also added a check on a global static variable to verify that the callback is
> actually called and fail the case if it is not getting called.
> 
> Fixes: 5523a75af539 ("test/crypto: add case for enqueue/dequeue callbacks")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Akhil Goyal <gakhil@marvell.com>
> ---
> -v3: replaced AES-SHA1 with NULL crypto and removed separate thread.
> 
>  app/test/test_cryptodev.c | 106 ++++++++++++++++++++++++++++++++--
> ----
>  1 file changed, 89 insertions(+), 17 deletions(-)
> 
> diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c index
> 1703ebccf1..b644e87106 100644
> --- a/app/test/test_cryptodev.c
> +++ b/app/test/test_cryptodev.c
> @@ -199,6 +199,8 @@ post_process_raw_dp_op(void *user_data,
> 	uint32_t index __rte_unused,
>  static struct crypto_testsuite_params testsuite_params = { NULL };  struct
> crypto_testsuite_params *p_testsuite_params = &testsuite_params;  static
> struct crypto_unittest_params unittest_params;
> +static bool enq_cb_called;
> +static bool deq_cb_called;
> 
>  int
>  process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id, @@ -14556,6
> +14558,7 @@ test_enq_callback(uint16_t dev_id, uint16_t qp_id, struct
> rte_crypto_op **ops,
>  	RTE_SET_USED(ops);
>  	RTE_SET_USED(user_param);
> 
> +	enq_cb_called = true;
>  	printf("crypto enqueue callback called\n");
>  	return nb_ops;
>  }
> @@ -14569,21 +14572,58 @@ test_deq_callback(uint16_t dev_id, uint16_t
> qp_id, struct rte_crypto_op **ops,
>  	RTE_SET_USED(ops);
>  	RTE_SET_USED(user_param);
> 
> +	deq_cb_called = true;
>  	printf("crypto dequeue callback called\n");
>  	return nb_ops;
>  }
> 
>  /*
> - * Thread using enqueue/dequeue callback with RCU.
> + * Process enqueue/dequeue NULL crypto request to verify callback with
> RCU.
>   */
>  static int
> -test_enqdeq_callback_thread(void *arg)
> +test_enqdeq_callback_null_cipher(void)
>  {
> -	RTE_SET_USED(arg);
> -	/* DP thread calls rte_cryptodev_enqueue_burst()/
> -	 * rte_cryptodev_dequeue_burst() and invokes callback.
> -	 */
> -	test_null_burst_operation();
> +	struct crypto_testsuite_params *ts_params = &testsuite_params;
> +	struct crypto_unittest_params *ut_params = &unittest_params;
> +
> +	/* Setup Cipher Parameters */
> +	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
> +	ut_params->cipher_xform.next = &ut_params->auth_xform;
> +
> +	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
> +	ut_params->cipher_xform.cipher.op =
> RTE_CRYPTO_CIPHER_OP_ENCRYPT;
> +
> +	/* Setup HMAC Parameters */
> +	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
> +	ut_params->auth_xform.next = NULL;
> +
> +	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
> +	ut_params->auth_xform.auth.op =
> RTE_CRYPTO_AUTH_OP_GENERATE;
> +
> +	/* Create Crypto session*/
> +	ut_params->sess = rte_cryptodev_sym_session_create(ts_params-
> >valid_devs[0],
> +				&ut_params->auth_xform, ts_params-
> >session_mpool);
> +	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
> +
> +	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool,
> RTE_CRYPTO_OP_TYPE_SYMMETRIC);
> +	TEST_ASSERT_NOT_NULL(ut_params->op, "Failed to allocate
> symmetric
> +crypto op");
> +
> +	/* Generate an operation for each mbuf in burst */
> +	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
> +	TEST_ASSERT_NOT_NULL(ut_params->ibuf, "Failed to allocate mbuf");
> +
> +	/* Append some random data */
> +	TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(ut_params->ibuf,
> sizeof(unsigned int)),
> +			"no room to append data");
> +
> +	rte_crypto_op_attach_sym_session(ut_params->op, ut_params-
> >sess);
> +
> +	ut_params->op->sym->m_src = ut_params->ibuf;
> +
> +	/* Process crypto operation */
> +	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params-
> >valid_devs[0], ut_params->op),
> +			"failed to process sym crypto op");
> +
>  	return 0;
>  }
> 
> @@ -14591,6 +14631,7 @@ static int
>  test_enq_callback_setup(void)
>  {
>  	struct crypto_testsuite_params *ts_params = &testsuite_params;
> +	struct rte_cryptodev_sym_capability_idx cap_idx;
>  	struct rte_cryptodev_info dev_info;
>  	struct rte_cryptodev_qp_conf qp_conf = {
>  		.nb_descriptors = MAX_NUM_OPS_INFLIGHT @@ -14598,6
> +14639,19 @@ test_enq_callback_setup(void)
> 
>  	struct rte_cryptodev_cb *cb;
>  	uint16_t qp_id = 0;
> +	int j = 0;
> +
> +	/* Verify the crypto capabilities for which enqueue/dequeue is done.
> */
> +	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
> +	cap_idx.algo.auth = RTE_CRYPTO_AUTH_NULL;
> +	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
> +			&cap_idx) == NULL)
> +		return TEST_SKIPPED;
> +	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
> +	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_NULL;
> +	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
> +			&cap_idx) == NULL)
> +		return TEST_SKIPPED;
> 
>  	/* Stop the device in case it's started so it can be configured */
>  	rte_cryptodev_stop(ts_params->valid_devs[0]);
> @@ -14621,6 +14675,7 @@ test_enq_callback_setup(void)
>  			qp_conf.nb_descriptors, qp_id,
>  			ts_params->valid_devs[0]);
> 
> +	enq_cb_called = false;
>  	/* Test with invalid crypto device */
>  	cb = rte_cryptodev_add_enq_callback(RTE_CRYPTO_MAX_DEVS,
>  			qp_id, test_enq_callback, NULL);
> @@ -14653,12 +14708,11 @@ test_enq_callback_setup(void)
> 
>  	rte_cryptodev_start(ts_params->valid_devs[0]);
> 
> -	/* Launch a thread */
> -	rte_eal_remote_launch(test_enqdeq_callback_thread, NULL,
> -				rte_get_next_lcore(-1, 1, 0));
> +	TEST_ASSERT_SUCCESS(test_enqdeq_callback_null_cipher(), "Crypto
> +Processing failed");
> 
> -	/* Wait until reader exited. */
> -	rte_eal_mp_wait_lcore();
> +	/* Wait until callback not called. */
> +	while (!enq_cb_called && (j++ < 10))
> +		rte_delay_ms(10);
> 
>  	/* Test with invalid crypto device */
>  	TEST_ASSERT_FAIL(rte_cryptodev_remove_enq_callback(
> @@ -14683,6 +14737,8 @@ test_enq_callback_setup(void)
>  			"qp %u on cryptodev %u",
>  			qp_id, ts_params->valid_devs[0]);
> 
> +	TEST_ASSERT(enq_cb_called == true, "Crypto enqueue callback not
> +called");
> +
>  	return TEST_SUCCESS;
>  }
> 
> @@ -14690,6 +14746,7 @@ static int
>  test_deq_callback_setup(void)
>  {
>  	struct crypto_testsuite_params *ts_params = &testsuite_params;
> +	struct rte_cryptodev_sym_capability_idx cap_idx;
>  	struct rte_cryptodev_info dev_info;
>  	struct rte_cryptodev_qp_conf qp_conf = {
>  		.nb_descriptors = MAX_NUM_OPS_INFLIGHT @@ -14697,6
> +14754,19 @@ test_deq_callback_setup(void)
> 
>  	struct rte_cryptodev_cb *cb;
>  	uint16_t qp_id = 0;
> +	int j = 0;
> +
> +	/* Verify the crypto capabilities for which enqueue/dequeue is done.
> */
> +	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
> +	cap_idx.algo.auth = RTE_CRYPTO_AUTH_NULL;
> +	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
> +			&cap_idx) == NULL)
> +		return TEST_SKIPPED;
> +	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
> +	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_NULL;
> +	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
> +			&cap_idx) == NULL)
> +		return TEST_SKIPPED;
> 
>  	/* Stop the device in case it's started so it can be configured */
>  	rte_cryptodev_stop(ts_params->valid_devs[0]);
> @@ -14720,6 +14790,7 @@ test_deq_callback_setup(void)
>  			qp_conf.nb_descriptors, qp_id,
>  			ts_params->valid_devs[0]);
> 
> +	deq_cb_called = false;
>  	/* Test with invalid crypto device */
>  	cb = rte_cryptodev_add_deq_callback(RTE_CRYPTO_MAX_DEVS,
>  			qp_id, test_deq_callback, NULL);
> @@ -14752,12 +14823,11 @@ test_deq_callback_setup(void)
> 
>  	rte_cryptodev_start(ts_params->valid_devs[0]);
> 
> -	/* Launch a thread */
> -	rte_eal_remote_launch(test_enqdeq_callback_thread, NULL,
> -				rte_get_next_lcore(-1, 1, 0));
> +	TEST_ASSERT_SUCCESS(test_enqdeq_callback_null_cipher(), "Crypto
> +processing failed");
> 
> -	/* Wait until reader exited. */
> -	rte_eal_mp_wait_lcore();
> +	/* Wait until callback not called. */
> +	while (!deq_cb_called && (j++ < 10))
> +		rte_delay_ms(10);
> 
>  	/* Test with invalid crypto device */
>  	TEST_ASSERT_FAIL(rte_cryptodev_remove_deq_callback(
> @@ -14782,6 +14852,8 @@ test_deq_callback_setup(void)
>  			"qp %u on cryptodev %u",
>  			qp_id, ts_params->valid_devs[0]);
> 
> +	TEST_ASSERT(deq_cb_called == true, "Crypto dequeue callback not
> +called");
> +
>  	return TEST_SUCCESS;
>  }
> 
> --
> 2.25.1
  
Akhil Goyal May 30, 2024, 9:27 a.m. UTC | #2
> Tested cryptodev_qat_autotest and cryptodev_null_autotest this patch along
> with https://patches.dpdk.org/project/dpdk/patch/20240416081222.3002268-1-ganapati.kundapura@intel.com/ , callbacks are getting called for both NULL pmd and qat
> pmd.
> 
> Acked-by: Ganapati Kundapura <ganapati.kundapura@intel.com>
Applied to dpdk-next-crypto
Fixed a couple of minor typos in comments.
  

Patch

diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index 1703ebccf1..b644e87106 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -199,6 +199,8 @@  post_process_raw_dp_op(void *user_data,	uint32_t index __rte_unused,
 static struct crypto_testsuite_params testsuite_params = { NULL };
 struct crypto_testsuite_params *p_testsuite_params = &testsuite_params;
 static struct crypto_unittest_params unittest_params;
+static bool enq_cb_called;
+static bool deq_cb_called;
 
 int
 process_sym_raw_dp_op(uint8_t dev_id, uint16_t qp_id,
@@ -14556,6 +14558,7 @@  test_enq_callback(uint16_t dev_id, uint16_t qp_id, struct rte_crypto_op **ops,
 	RTE_SET_USED(ops);
 	RTE_SET_USED(user_param);
 
+	enq_cb_called = true;
 	printf("crypto enqueue callback called\n");
 	return nb_ops;
 }
@@ -14569,21 +14572,58 @@  test_deq_callback(uint16_t dev_id, uint16_t qp_id, struct rte_crypto_op **ops,
 	RTE_SET_USED(ops);
 	RTE_SET_USED(user_param);
 
+	deq_cb_called = true;
 	printf("crypto dequeue callback called\n");
 	return nb_ops;
 }
 
 /*
- * Thread using enqueue/dequeue callback with RCU.
+ * Process enqueue/dequeue NULL crypto request to verify callback with RCU.
  */
 static int
-test_enqdeq_callback_thread(void *arg)
+test_enqdeq_callback_null_cipher(void)
 {
-	RTE_SET_USED(arg);
-	/* DP thread calls rte_cryptodev_enqueue_burst()/
-	 * rte_cryptodev_dequeue_burst() and invokes callback.
-	 */
-	test_null_burst_operation();
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct crypto_unittest_params *ut_params = &unittest_params;
+
+	/* Setup Cipher Parameters */
+	ut_params->cipher_xform.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+	ut_params->cipher_xform.next = &ut_params->auth_xform;
+
+	ut_params->cipher_xform.cipher.algo = RTE_CRYPTO_CIPHER_NULL;
+	ut_params->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
+
+	/* Setup HMAC Parameters */
+	ut_params->auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
+	ut_params->auth_xform.next = NULL;
+
+	ut_params->auth_xform.auth.algo = RTE_CRYPTO_AUTH_NULL;
+	ut_params->auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
+
+	/* Create Crypto session*/
+	ut_params->sess = rte_cryptodev_sym_session_create(ts_params->valid_devs[0],
+				&ut_params->auth_xform, ts_params->session_mpool);
+	TEST_ASSERT_NOT_NULL(ut_params->sess, "Session creation failed");
+
+	ut_params->op = rte_crypto_op_alloc(ts_params->op_mpool, RTE_CRYPTO_OP_TYPE_SYMMETRIC);
+	TEST_ASSERT_NOT_NULL(ut_params->op, "Failed to allocate symmetric crypto op");
+
+	/* Generate an operation for each mbuf in burst */
+	ut_params->ibuf = rte_pktmbuf_alloc(ts_params->mbuf_pool);
+	TEST_ASSERT_NOT_NULL(ut_params->ibuf, "Failed to allocate mbuf");
+
+	/* Append some random data */
+	TEST_ASSERT_NOT_NULL(rte_pktmbuf_append(ut_params->ibuf, sizeof(unsigned int)),
+			"no room to append data");
+
+	rte_crypto_op_attach_sym_session(ut_params->op, ut_params->sess);
+
+	ut_params->op->sym->m_src = ut_params->ibuf;
+
+	/* Process crypto operation */
+	TEST_ASSERT_NOT_NULL(process_crypto_request(ts_params->valid_devs[0], ut_params->op),
+			"failed to process sym crypto op");
+
 	return 0;
 }
 
@@ -14591,6 +14631,7 @@  static int
 test_enq_callback_setup(void)
 {
 	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct rte_cryptodev_sym_capability_idx cap_idx;
 	struct rte_cryptodev_info dev_info;
 	struct rte_cryptodev_qp_conf qp_conf = {
 		.nb_descriptors = MAX_NUM_OPS_INFLIGHT
@@ -14598,6 +14639,19 @@  test_enq_callback_setup(void)
 
 	struct rte_cryptodev_cb *cb;
 	uint16_t qp_id = 0;
+	int j = 0;
+
+	/* Verify the crypto capabilities for which enqueue/dequeue is done. */
+	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
+	cap_idx.algo.auth = RTE_CRYPTO_AUTH_NULL;
+	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
+			&cap_idx) == NULL)
+		return TEST_SKIPPED;
+	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_NULL;
+	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
+			&cap_idx) == NULL)
+		return TEST_SKIPPED;
 
 	/* Stop the device in case it's started so it can be configured */
 	rte_cryptodev_stop(ts_params->valid_devs[0]);
@@ -14621,6 +14675,7 @@  test_enq_callback_setup(void)
 			qp_conf.nb_descriptors, qp_id,
 			ts_params->valid_devs[0]);
 
+	enq_cb_called = false;
 	/* Test with invalid crypto device */
 	cb = rte_cryptodev_add_enq_callback(RTE_CRYPTO_MAX_DEVS,
 			qp_id, test_enq_callback, NULL);
@@ -14653,12 +14708,11 @@  test_enq_callback_setup(void)
 
 	rte_cryptodev_start(ts_params->valid_devs[0]);
 
-	/* Launch a thread */
-	rte_eal_remote_launch(test_enqdeq_callback_thread, NULL,
-				rte_get_next_lcore(-1, 1, 0));
+	TEST_ASSERT_SUCCESS(test_enqdeq_callback_null_cipher(), "Crypto Processing failed");
 
-	/* Wait until reader exited. */
-	rte_eal_mp_wait_lcore();
+	/* Wait until callback not called. */
+	while (!enq_cb_called && (j++ < 10))
+		rte_delay_ms(10);
 
 	/* Test with invalid crypto device */
 	TEST_ASSERT_FAIL(rte_cryptodev_remove_enq_callback(
@@ -14683,6 +14737,8 @@  test_enq_callback_setup(void)
 			"qp %u on cryptodev %u",
 			qp_id, ts_params->valid_devs[0]);
 
+	TEST_ASSERT(enq_cb_called == true, "Crypto enqueue callback not called");
+
 	return TEST_SUCCESS;
 }
 
@@ -14690,6 +14746,7 @@  static int
 test_deq_callback_setup(void)
 {
 	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	struct rte_cryptodev_sym_capability_idx cap_idx;
 	struct rte_cryptodev_info dev_info;
 	struct rte_cryptodev_qp_conf qp_conf = {
 		.nb_descriptors = MAX_NUM_OPS_INFLIGHT
@@ -14697,6 +14754,19 @@  test_deq_callback_setup(void)
 
 	struct rte_cryptodev_cb *cb;
 	uint16_t qp_id = 0;
+	int j = 0;
+
+	/* Verify the crypto capabilities for which enqueue/dequeue is done. */
+	cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
+	cap_idx.algo.auth = RTE_CRYPTO_AUTH_NULL;
+	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
+			&cap_idx) == NULL)
+		return TEST_SKIPPED;
+	cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
+	cap_idx.algo.cipher = RTE_CRYPTO_CIPHER_NULL;
+	if (rte_cryptodev_sym_capability_get(ts_params->valid_devs[0],
+			&cap_idx) == NULL)
+		return TEST_SKIPPED;
 
 	/* Stop the device in case it's started so it can be configured */
 	rte_cryptodev_stop(ts_params->valid_devs[0]);
@@ -14720,6 +14790,7 @@  test_deq_callback_setup(void)
 			qp_conf.nb_descriptors, qp_id,
 			ts_params->valid_devs[0]);
 
+	deq_cb_called = false;
 	/* Test with invalid crypto device */
 	cb = rte_cryptodev_add_deq_callback(RTE_CRYPTO_MAX_DEVS,
 			qp_id, test_deq_callback, NULL);
@@ -14752,12 +14823,11 @@  test_deq_callback_setup(void)
 
 	rte_cryptodev_start(ts_params->valid_devs[0]);
 
-	/* Launch a thread */
-	rte_eal_remote_launch(test_enqdeq_callback_thread, NULL,
-				rte_get_next_lcore(-1, 1, 0));
+	TEST_ASSERT_SUCCESS(test_enqdeq_callback_null_cipher(), "Crypto processing failed");
 
-	/* Wait until reader exited. */
-	rte_eal_mp_wait_lcore();
+	/* Wait until callback not called. */
+	while (!deq_cb_called && (j++ < 10))
+		rte_delay_ms(10);
 
 	/* Test with invalid crypto device */
 	TEST_ASSERT_FAIL(rte_cryptodev_remove_deq_callback(
@@ -14782,6 +14852,8 @@  test_deq_callback_setup(void)
 			"qp %u on cryptodev %u",
 			qp_id, ts_params->valid_devs[0]);
 
+	TEST_ASSERT(deq_cb_called == true, "Crypto dequeue callback not called");
+
 	return TEST_SUCCESS;
 }