patches for DPDK stable branches
 help / color / mirror / Atom feed
From: "Kundapura, Ganapati" <ganapati.kundapura@intel.com>
To: Akhil Goyal <gakhil@marvell.com>, "dev@dpdk.org" <dev@dpdk.org>
Cc: "Gujjar, Abhinandan S" <abhinandan.gujjar@intel.com>,
	"fanzhang.oss@gmail.com" <fanzhang.oss@gmail.com>,
	"anoobj@marvell.com" <anoobj@marvell.com>,
	"stable@dpdk.org" <stable@dpdk.org>
Subject: RE: [PATCH v3] test/crypto: fix enqueue dequeue callback case
Date: Mon, 27 May 2024 10:48:33 +0000	[thread overview]
Message-ID: <PH7PR11MB59135ED85B308E0773BE81EB87F02@PH7PR11MB5913.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20240524171327.885698-1-gakhil@marvell.com>

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


  reply	other threads:[~2024-05-27 10:48 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-22 13:48 [PATCH] " Akhil Goyal
2024-05-23 12:48 ` [PATCH v2] " Akhil Goyal
2024-05-23 17:30   ` Kundapura, Ganapati
2024-05-24 17:13   ` [PATCH v3] " Akhil Goyal
2024-05-27 10:48     ` Kundapura, Ganapati [this message]
2024-05-30  9:27       ` Akhil Goyal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=PH7PR11MB59135ED85B308E0773BE81EB87F02@PH7PR11MB5913.namprd11.prod.outlook.com \
    --to=ganapati.kundapura@intel.com \
    --cc=abhinandan.gujjar@intel.com \
    --cc=anoobj@marvell.com \
    --cc=dev@dpdk.org \
    --cc=fanzhang.oss@gmail.com \
    --cc=gakhil@marvell.com \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).