[dpdk-dev] test: adding AES cipher-only tests on QAT PMD

Message ID 1480012164-17395-1-git-send-email-fiona.trahe@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Pablo de Lara Guarch
Headers

Checks

Context Check Description
checkpatch/checkpatch success coding style OK

Commit Message

Fiona Trahe Nov. 24, 2016, 6:29 p.m. UTC
  Extended functional AES-CBC and AES-CTR cipher-only
tests to run on QAT PMD.
Added AES_CBC cipher-only performance tests on QAT PMD.
No driver changes, but as now tested, QAT documentation
is updated to remove constraint.

Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
---
 app/test/test_cryptodev.c                  | 18 ++++++
 app/test/test_cryptodev_aes_test_vectors.h | 36 +++++++----
 app/test/test_cryptodev_perf.c             | 96 +++++++++++++++++++-----------
 doc/guides/cryptodevs/qat.rst              |  1 -
 4 files changed, 102 insertions(+), 49 deletions(-)
  

Comments

Arkadiusz Kusztal Nov. 25, 2016, 2:13 p.m. UTC | #1
> -----Original Message-----
> From: Trahe, Fiona
> Sent: Thursday, November 24, 2016 6:29 PM
> To: dev@dpdk.org
> Cc: De Lara Guarch, Pablo <pablo.de.lara.guarch@intel.com>; Trahe, Fiona
> <fiona.trahe@intel.com>; Griffin, John <john.griffin@intel.com>; Kusztal,
> ArkadiuszX <arkadiuszx.kusztal@intel.com>
> Subject: [PATCH] test: adding AES cipher-only tests on QAT PMD
> 
> Extended functional AES-CBC and AES-CTR cipher-only tests to run on QAT
> PMD.
> Added AES_CBC cipher-only performance tests on QAT PMD.
> No driver changes, but as now tested, QAT documentation is updated to
> remove constraint.
> 
> Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
> ---
>  app/test/test_cryptodev.c                  | 18 ++++++
>  app/test/test_cryptodev_aes_test_vectors.h | 36 +++++++----
>  app/test/test_cryptodev_perf.c             | 96 +++++++++++++++++++----------
> -
>  doc/guides/cryptodevs/qat.rst              |  1 -
>  4 files changed, 102 insertions(+), 49 deletions(-)
> 
> --
> 2.5.0
Acked-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>
  
De Lara Guarch, Pablo Nov. 30, 2016, 3:16 p.m. UTC | #2
> -----Original Message-----
> From: Kusztal, ArkadiuszX
> Sent: Friday, November 25, 2016 2:14 PM
> To: Trahe, Fiona; dev@dpdk.org
> Cc: De Lara Guarch, Pablo; Griffin, John
> Subject: RE: [PATCH] test: adding AES cipher-only tests on QAT PMD
> 
> 
> 
> > -----Original Message-----
> > From: Trahe, Fiona
> > Sent: Thursday, November 24, 2016 6:29 PM
> > To: dev@dpdk.org
> > Cc: De Lara Guarch, Pablo <pablo.de.lara.guarch@intel.com>; Trahe, Fiona
> > <fiona.trahe@intel.com>; Griffin, John <john.griffin@intel.com>; Kusztal,
> > ArkadiuszX <arkadiuszx.kusztal@intel.com>
> > Subject: [PATCH] test: adding AES cipher-only tests on QAT PMD
> >
> > Extended functional AES-CBC and AES-CTR cipher-only tests to run on QAT
> > PMD.
> > Added AES_CBC cipher-only performance tests on QAT PMD.
> > No driver changes, but as now tested, QAT documentation is updated to
> > remove constraint.
> >
> > Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
> > ---
> >  app/test/test_cryptodev.c                  | 18 ++++++
> >  app/test/test_cryptodev_aes_test_vectors.h | 36 +++++++----
> >  app/test/test_cryptodev_perf.c             | 96 +++++++++++++++++++------
> ----
> > -
> >  doc/guides/cryptodevs/qat.rst              |  1 -
> >  4 files changed, 102 insertions(+), 49 deletions(-)
> >
> > --
> > 2.5.0
> Acked-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>

Applied to dpdk-next-crypto.
Thanks,

Pablo
  
yang yang Dec. 13, 2016, 8:09 a.m. UTC | #3
Tested-by: Yang Gang < gangx.yang@intel.com >
- Check patch: success
- Apply patch: success
- compilation: success
      OS: fedora21
      GCC: gcc_x86-64, 4.8.3
      Commit: dpdk-next-crypto( e6c7b6ec57f3527ce55fa3e0d2a8ed1533722253 )
      x86_64-native-linuxapp-gcc: compile pass
- dts validation:
-- Test Commit: 44a66e026d772dd626be32ad3fb0506839136f58
-- OS/Kernel: Fedora21/3.11.10-301.fc20.x86_64
-- GCC: gcc version 4.8.3
-- CPU: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
-- NIC: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ [8086:1572]
-- total 2,failed 0 (case1: contain cryptodev_qat_perftest and all of others cryptodev cases on unit test .
		 case 2: all of the related cases about AES cipher only on l2fwd-crypto test)


> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of De Lara Guarch, 
> Pablo
> Sent: Wednesday, November 30, 2016 11:16 PM
> To: Kusztal, ArkadiuszX <arkadiuszx.kusztal@intel.com>; Trahe, Fiona 
> <fiona.trahe@intel.com>; dev@dpdk.org
> Cc: Griffin, John <john.griffin@intel.com>
> Subject: Re: [dpdk-dev] [PATCH] test: adding AES cipher-only tests on 
> QAT PMD
> 
> 
> 
> > -----Original Message-----
> > From: Kusztal, ArkadiuszX
> > Sent: Friday, November 25, 2016 2:14 PM
> > To: Trahe, Fiona; dev@dpdk.org
> > Cc: De Lara Guarch, Pablo; Griffin, John
> > Subject: RE: [PATCH] test: adding AES cipher-only tests on QAT PMD
> >
> >
> >
> > > -----Original Message-----
> > > From: Trahe, Fiona
> > > Sent: Thursday, November 24, 2016 6:29 PM
> > > To: dev@dpdk.org
> > > Cc: De Lara Guarch, Pablo <pablo.de.lara.guarch@intel.com>; Trahe, 
> > > Fiona <fiona.trahe@intel.com>; Griffin, John 
> > > <john.griffin@intel.com>; Kusztal, ArkadiuszX 
> > > <arkadiuszx.kusztal@intel.com>
> > > Subject: [PATCH] test: adding AES cipher-only tests on QAT PMD
> > >
> > > Extended functional AES-CBC and AES-CTR cipher-only tests to run 
> > > on QAT PMD.
> > > Added AES_CBC cipher-only performance tests on QAT PMD.
> > > No driver changes, but as now tested, QAT documentation is updated 
> > > to remove constraint.
> > >
> > > Signed-off-by: Fiona Trahe <fiona.trahe@intel.com>
> > > ---
> > >  app/test/test_cryptodev.c                  | 18 ++++++
> > >  app/test/test_cryptodev_aes_test_vectors.h | 36 +++++++----
> > >  app/test/test_cryptodev_perf.c             | 96 +++++++++++++++++++------
> > ----
> > > -
> > >  doc/guides/cryptodevs/qat.rst              |  1 -
> > >  4 files changed, 102 insertions(+), 49 deletions(-)
> > >
> > > --
> > > 2.5.0
> > Acked-by: Arek Kusztal <arkadiuszx.kusztal@intel.com>
> 
> Applied to dpdk-next-crypto.
> Thanks,
> 
> Pablo
  

Patch

diff --git a/app/test/test_cryptodev.c b/app/test/test_cryptodev.c
index 872f8b4..00dced5 100644
--- a/app/test/test_cryptodev.c
+++ b/app/test/test_cryptodev.c
@@ -1530,6 +1530,22 @@  test_AES_chain_qat_all(void)
 }
 
 static int
+test_AES_cipheronly_qat_all(void)
+{
+	struct crypto_testsuite_params *ts_params = &testsuite_params;
+	int status;
+
+	status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+		ts_params->op_mpool, ts_params->valid_devs[0],
+		RTE_CRYPTODEV_QAT_SYM_PMD,
+		BLKCIPHER_AES_CIPHERONLY_TYPE);
+
+	TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+	return TEST_SUCCESS;
+}
+
+static int
 test_authonly_openssl_all(void)
 {
 	struct crypto_testsuite_params *ts_params = &testsuite_params;
@@ -6032,6 +6048,8 @@  static struct unit_test_suite cryptodev_qat_testsuite  = {
 				test_multi_session),
 
 		TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_qat_all),
+		TEST_CASE_ST(ut_setup, ut_teardown,
+						test_AES_cipheronly_qat_all),
 		TEST_CASE_ST(ut_setup, ut_teardown, test_3DES_chain_qat_all),
 		TEST_CASE_ST(ut_setup, ut_teardown,
 						test_3DES_cipheronly_qat_all),
diff --git a/app/test/test_cryptodev_aes_test_vectors.h b/app/test/test_cryptodev_aes_test_vectors.h
index 1c68f93..efbe7da 100644
--- a/app/test/test_cryptodev_aes_test_vectors.h
+++ b/app/test/test_cryptodev_aes_test_vectors.h
@@ -1024,73 +1024,85 @@  static const struct blockcipher_test_case aes_cipheronly_test_cases[] = {
 		.test_descr = "AES-128-CBC Encryption",
 		.test_data = &aes_test_data_4,
 		.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 	{
 		.test_descr = "AES-128-CBC Decryption",
 		.test_data = &aes_test_data_4,
 		.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 	{
 		.test_descr = "AES-192-CBC Encryption",
 		.test_data = &aes_test_data_10,
 		.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 	{
 		.test_descr = "AES-192-CBC Decryption",
 		.test_data = &aes_test_data_10,
 		.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 	{
 		.test_descr = "AES-256-CBC Encryption",
 		.test_data = &aes_test_data_11,
 		.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 	{
 		.test_descr = "AES-256-CBC Decryption",
 		.test_data = &aes_test_data_11,
 		.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 	{
 		.test_descr = "AES-128-CTR Encryption",
 		.test_data = &aes_test_data_1,
 		.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 	{
 		.test_descr = "AES-128-CTR Decryption",
 		.test_data = &aes_test_data_1,
 		.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 	{
 		.test_descr = "AES-192-CTR Encryption",
 		.test_data = &aes_test_data_2,
 		.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 	{
 		.test_descr = "AES-192-CTR Decryption",
 		.test_data = &aes_test_data_2,
 		.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 	{
 		.test_descr = "AES-256-CTR Encryption",
 		.test_data = &aes_test_data_3,
 		.op_mask = BLOCKCIPHER_TEST_OP_ENCRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 	{
 		.test_descr = "AES-256-CTR Decryption",
 		.test_data = &aes_test_data_3,
 		.op_mask = BLOCKCIPHER_TEST_OP_DECRYPT,
-		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL
+		.pmd_mask = BLOCKCIPHER_TEST_TARGET_PMD_OPENSSL |
+			BLOCKCIPHER_TEST_TARGET_PMD_QAT
 	},
 };
 
diff --git a/app/test/test_cryptodev_perf.c b/app/test/test_cryptodev_perf.c
index 59a6891..7751ff2 100644
--- a/app/test/test_cryptodev_perf.c
+++ b/app/test/test_cryptodev_perf.c
@@ -166,15 +166,15 @@  test_perf_set_crypto_op_snow3g(struct rte_crypto_op *op, struct rte_mbuf *m,
 static inline struct rte_crypto_op *
 test_perf_set_crypto_op_aes(struct rte_crypto_op *op, struct rte_mbuf *m,
 		struct rte_cryptodev_sym_session *sess, unsigned int data_len,
-		unsigned int digest_len);
+		unsigned int digest_len, enum chain_mode chain);
 static inline struct rte_crypto_op *
 test_perf_set_crypto_op_aes_gcm(struct rte_crypto_op *op, struct rte_mbuf *m,
 		struct rte_cryptodev_sym_session *sess, unsigned int data_len,
-		unsigned int digest_len);
+		unsigned int digest_len, enum chain_mode chain __rte_unused);
 static inline struct rte_crypto_op *
 test_perf_set_crypto_op_3des(struct rte_crypto_op *op, struct rte_mbuf *m,
 		struct rte_cryptodev_sym_session *sess, unsigned int data_len,
-		unsigned int digest_len);
+		unsigned int digest_len, enum chain_mode chain __rte_unused);
 static uint32_t get_auth_digest_length(enum rte_crypto_auth_algorithm algo);
 
 
@@ -2285,7 +2285,8 @@  test_perf_openssl_optimise_cyclecount(struct perf_test_params *pparams)
 	static struct rte_crypto_op *(*test_perf_set_crypto_op)
 			(struct rte_crypto_op *, struct rte_mbuf *,
 					struct rte_cryptodev_sym_session *,
-					unsigned int, unsigned int);
+					unsigned int, unsigned int,
+					enum chain_mode);
 
 	unsigned int digest_length = get_auth_digest_length(pparams->auth_algo);
 
@@ -2323,14 +2324,14 @@  test_perf_openssl_optimise_cyclecount(struct perf_test_params *pparams)
 			break;
 		case RTE_CRYPTO_CIPHER_AES_GCM:
 			test_perf_set_crypto_op =
-					test_perf_set_crypto_op_aes_gcm;
+						test_perf_set_crypto_op_aes_gcm;
 			break;
 		default:
 			return TEST_FAILED;
 		}
 
 		op = test_perf_set_crypto_op(op, m, sess, pparams->buf_size,
-				digest_length);
+				digest_length, pparams->chain);
 		TEST_ASSERT_NOT_NULL(op, "Failed to attach op to session");
 
 		c_ops[i] = op;
@@ -2539,16 +2540,16 @@  test_perf_create_aes_sha_session(uint8_t dev_id, enum chain_mode chain,
 
 	cipher_xform.cipher.key.data = aes_key;
 	cipher_xform.cipher.key.length = cipher_key_len;
-
-	/* Setup HMAC Parameters */
-	auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
-	auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
-	auth_xform.auth.algo = auth_algo;
-
-	auth_xform.auth.key.data = hmac_sha_key;
-	auth_xform.auth.key.length =  get_auth_key_max_length(auth_algo);
-	auth_xform.auth.digest_length = get_auth_digest_length(auth_algo);
-
+	if (chain != CIPHER_ONLY) {
+		/* Setup HMAC Parameters */
+		auth_xform.type = RTE_CRYPTO_SYM_XFORM_AUTH;
+		auth_xform.auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
+		auth_xform.auth.algo = auth_algo;
+		auth_xform.auth.key.data = hmac_sha_key;
+		auth_xform.auth.key.length = get_auth_key_max_length(auth_algo);
+		auth_xform.auth.digest_length =
+					get_auth_digest_length(auth_algo);
+	}
 	switch (chain) {
 	case CIPHER_HASH:
 		cipher_xform.next = &auth_xform;
@@ -2560,6 +2561,10 @@  test_perf_create_aes_sha_session(uint8_t dev_id, enum chain_mode chain,
 		cipher_xform.next = NULL;
 		/* Create Crypto session*/
 		return rte_cryptodev_sym_session_create(dev_id,	&auth_xform);
+	case CIPHER_ONLY:
+		cipher_xform.next = NULL;
+		/* Create Crypto session*/
+		return rte_cryptodev_sym_session_create(dev_id,	&cipher_xform);
 	default:
 		return NULL;
 	}
@@ -2706,8 +2711,8 @@  test_perf_create_pktmbuf(struct rte_mempool *mpool, unsigned buf_sz)
 
 static inline struct rte_crypto_op *
 test_perf_set_crypto_op_aes(struct rte_crypto_op *op, struct rte_mbuf *m,
-		struct rte_cryptodev_sym_session *sess, unsigned data_len,
-		unsigned digest_len)
+		struct rte_cryptodev_sym_session *sess, unsigned int data_len,
+		unsigned int digest_len, enum chain_mode chain)
 {
 	if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
 		rte_crypto_op_free(op);
@@ -2715,13 +2720,26 @@  test_perf_set_crypto_op_aes(struct rte_crypto_op *op, struct rte_mbuf *m,
 	}
 
 	/* Authentication Parameters */
-	op->sym->auth.digest.data = rte_pktmbuf_mtod_offset(m, uint8_t *,
-			AES_CIPHER_IV_LENGTH + data_len);
-	op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(m,
-			AES_CIPHER_IV_LENGTH + data_len);
-	op->sym->auth.digest.length = digest_len;
-	op->sym->auth.aad.data = aes_iv;
-	op->sym->auth.aad.length = AES_CIPHER_IV_LENGTH;
+	if (chain == CIPHER_ONLY) {
+		op->sym->auth.digest.data = NULL;
+		op->sym->auth.digest.phys_addr = 0;
+		op->sym->auth.digest.length = 0;
+		op->sym->auth.aad.data = NULL;
+		op->sym->auth.aad.length = 0;
+		op->sym->auth.data.offset = 0;
+		op->sym->auth.data.length = 0;
+	} else {
+		op->sym->auth.digest.data = rte_pktmbuf_mtod_offset(m,
+				 uint8_t *, AES_CIPHER_IV_LENGTH + data_len);
+		op->sym->auth.digest.phys_addr = rte_pktmbuf_mtophys_offset(m,
+				AES_CIPHER_IV_LENGTH + data_len);
+		op->sym->auth.digest.length = digest_len;
+		op->sym->auth.aad.data = aes_iv;
+		op->sym->auth.aad.length = AES_CIPHER_IV_LENGTH;
+		op->sym->auth.data.offset = AES_CIPHER_IV_LENGTH;
+		op->sym->auth.data.length = data_len;
+	}
+
 
 	/* Cipher Parameters */
 	op->sym->cipher.iv.data = rte_pktmbuf_mtod(m, uint8_t *);
@@ -2730,10 +2748,6 @@  test_perf_set_crypto_op_aes(struct rte_crypto_op *op, struct rte_mbuf *m,
 
 	rte_memcpy(op->sym->cipher.iv.data, aes_iv, AES_CIPHER_IV_LENGTH);
 
-	/* Data lengths/offsets Parameters */
-	op->sym->auth.data.offset = AES_CIPHER_IV_LENGTH;
-	op->sym->auth.data.length = data_len;
-
 	op->sym->cipher.data.offset = AES_CIPHER_IV_LENGTH;
 	op->sym->cipher.data.length = data_len;
 
@@ -2745,7 +2759,7 @@  test_perf_set_crypto_op_aes(struct rte_crypto_op *op, struct rte_mbuf *m,
 static inline struct rte_crypto_op *
 test_perf_set_crypto_op_aes_gcm(struct rte_crypto_op *op, struct rte_mbuf *m,
 		struct rte_cryptodev_sym_session *sess, unsigned int data_len,
-		unsigned int digest_len)
+		unsigned int digest_len, enum chain_mode chain __rte_unused)
 {
 	if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
 		rte_crypto_op_free(op);
@@ -2878,7 +2892,7 @@  test_perf_set_crypto_op_snow3g_hash(struct rte_crypto_op *op,
 static inline struct rte_crypto_op *
 test_perf_set_crypto_op_3des(struct rte_crypto_op *op, struct rte_mbuf *m,
 		struct rte_cryptodev_sym_session *sess, unsigned int data_len,
-		unsigned int digest_len)
+		unsigned int digest_len, enum chain_mode chain __rte_unused)
 {
 	if (rte_crypto_op_attach_sym_session(op, sess) != 0) {
 		rte_crypto_op_free(op);
@@ -2961,8 +2975,10 @@  test_perf_aes_sha(uint8_t dev_id, uint16_t queue_id,
 				rte_pktmbuf_free(mbufs[k]);
 			return -1;
 		}
+
 		/* Make room for Digest and IV in mbuf */
-		rte_pktmbuf_append(mbufs[i], digest_length);
+		if (pparams->chain != CIPHER_ONLY)
+			rte_pktmbuf_append(mbufs[i], digest_length);
 		rte_pktmbuf_prepend(mbufs[i], AES_CIPHER_IV_LENGTH);
 	}
 
@@ -2984,7 +3000,8 @@  test_perf_aes_sha(uint8_t dev_id, uint16_t queue_id,
 				ops[i] = test_perf_set_crypto_op_aes(ops[i],
 					mbufs[i + (pparams->burst_size *
 						(j % NUM_MBUF_SETS))],
-					sess, pparams->buf_size, digest_length);
+					sess, pparams->buf_size, digest_length,
+					pparams->chain);
 
 			/* enqueue burst */
 			burst_enqueued = rte_cryptodev_enqueue_burst(dev_id,
@@ -3233,7 +3250,8 @@  test_perf_openssl(uint8_t dev_id, uint16_t queue_id,
 	static struct rte_crypto_op *(*test_perf_set_crypto_op)
 			(struct rte_crypto_op *, struct rte_mbuf *,
 					struct rte_cryptodev_sym_session *,
-					unsigned int, unsigned int);
+					unsigned int, unsigned int,
+					enum chain_mode);
 
 	switch (pparams->cipher_algo) {
 	case RTE_CRYPTO_CIPHER_3DES_CBC:
@@ -3294,7 +3312,8 @@  test_perf_openssl(uint8_t dev_id, uint16_t queue_id,
 				ops[i] = test_perf_set_crypto_op(ops[i],
 					mbufs[i + (pparams->burst_size *
 						(j % NUM_MBUF_SETS))],
-					sess, pparams->buf_size, digest_length);
+					sess, pparams->buf_size, digest_length,
+					pparams->chain);
 
 			/* enqueue burst */
 			burst_enqueued = rte_cryptodev_enqueue_burst(dev_id,
@@ -3380,8 +3399,13 @@  test_perf_aes_cbc_encrypt_digest_vary_pkt_size(void)
 
 	struct perf_test_params params_set[] = {
 		{
+			.chain = CIPHER_ONLY,
+			.cipher_algo  = RTE_CRYPTO_CIPHER_AES_CBC,
+			.cipher_key_length = 16,
+			.auth_algo = RTE_CRYPTO_AUTH_NULL
+		},
+		{
 			.chain = CIPHER_HASH,
-
 			.cipher_algo  = RTE_CRYPTO_CIPHER_AES_CBC,
 			.cipher_key_length = 16,
 			.auth_algo = RTE_CRYPTO_AUTH_SHA1_HMAC
diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst
index 52a9ae3..607d244 100644
--- a/doc/guides/cryptodevs/qat.rst
+++ b/doc/guides/cryptodevs/qat.rst
@@ -75,7 +75,6 @@  Limitations
 
 * Chained mbufs are not supported.
 * Hash only is not supported except SNOW 3G UIA2 and KASUMI F9.
-* Cipher only is not supported except SNOW 3G UEA2, KASUMI F8 and 3DES.
 * Only supports the session-oriented API implementation (session-less APIs are not supported).
 * SNOW 3G (UEA2) and KASUMI (F8) supported only if cipher length, cipher offset fields are byte-aligned.
 * SNOW 3G (UIA2) and KASUMI (F9) supported only if hash length, hash offset fields are byte-aligned.