cryptodev: change queue pair configure structure
[dpdk.git] / app / test-crypto-perf / main.c
index 74e2165..38a2e42 100644 (file)
@@ -21,7 +21,6 @@
 #include "cperf_test_verify.h"
 #include "cperf_test_pmd_cyclecount.h"
 
-#define SESS_MEMPOOL_CACHE_SIZE 64
 
 const char *cperf_test_type_strs[] = {
        [CPERF_TEST_TYPE_THROUGHPUT] = "throughput",
@@ -149,6 +148,23 @@ cperf_initialize_cryptodev(struct cperf_options *opts, uint8_t *enabled_cdevs,
                        .nb_descriptors = opts->nb_descriptors
                };
 
+               /**
+                * Device info specifies the min headroom and tailroom
+                * requirement for the crypto PMD. This need to be honoured
+                * by the application, while creating mbuf.
+                */
+               if (opts->headroom_sz < cdev_info.min_mbuf_headroom_req) {
+                       /* Update headroom */
+                       opts->headroom_sz = cdev_info.min_mbuf_headroom_req;
+               }
+               if (opts->tailroom_sz < cdev_info.min_mbuf_tailroom_req) {
+                       /* Update tailroom */
+                       opts->tailroom_sz = cdev_info.min_mbuf_tailroom_req;
+               }
+
+               /* Update segment size to include headroom & tailroom */
+               opts->segment_sz += (opts->headroom_sz + opts->tailroom_sz);
+
                uint32_t dev_max_nb_sess = cdev_info.sym.max_nb_sessions;
                /*
                 * Two sessions objects are required for each session
@@ -172,7 +188,7 @@ cperf_initialize_cryptodev(struct cperf_options *opts, uint8_t *enabled_cdevs,
                 * A single session is required per queue pair
                 * in each device
                 */
-               if (dev_max_nb_sess < opts->nb_qps) {
+               if (dev_max_nb_sess != 0 && dev_max_nb_sess < opts->nb_qps) {
                        RTE_LOG(ERR, USER1,
                                "Device does not support at least "
                                "%u sessions\n", opts->nb_qps);
@@ -187,7 +203,7 @@ cperf_initialize_cryptodev(struct cperf_options *opts, uint8_t *enabled_cdevs,
                        sess_mp = rte_mempool_create(mp_name,
                                                sessions_needed,
                                                max_sess_size,
-                                               SESS_MEMPOOL_CACHE_SIZE,
+                                               0,
                                                0, NULL, NULL, NULL,
                                                NULL, socket_id,
                                                0);
@@ -202,6 +218,9 @@ cperf_initialize_cryptodev(struct cperf_options *opts, uint8_t *enabled_cdevs,
                        session_pool_socket[socket_id] = sess_mp;
                }
 
+               qp_conf.mp_session = session_pool_socket[socket_id];
+               qp_conf.mp_session_private = session_pool_socket[socket_id];
+
                ret = rte_cryptodev_configure(cdev_id, &conf);
                if (ret < 0) {
                        printf("Failed to configure cryptodev %u", cdev_id);
@@ -210,8 +229,7 @@ cperf_initialize_cryptodev(struct cperf_options *opts, uint8_t *enabled_cdevs,
 
                for (j = 0; j < opts->nb_qps; j++) {
                        ret = rte_cryptodev_queue_pair_setup(cdev_id, j,
-                               &qp_conf, socket_id,
-                               session_pool_socket[socket_id]);
+                               &qp_conf, socket_id);
                        if (ret < 0) {
                                printf("Failed to setup queue pair %u on "
                                        "cryptodev %u", j, cdev_id);
@@ -326,7 +344,9 @@ cperf_check_test_vector(struct cperf_options *opts,
                                return -1;
                        if (test_vec->ciphertext.length < opts->max_buffer_size)
                                return -1;
-                       if (test_vec->cipher_iv.data == NULL)
+                       /* Cipher IV is only required for some algorithms */
+                       if (opts->cipher_iv_sz &&
+                                       test_vec->cipher_iv.data == NULL)
                                return -1;
                        if (test_vec->cipher_iv.length != opts->cipher_iv_sz)
                                return -1;
@@ -341,7 +361,9 @@ cperf_check_test_vector(struct cperf_options *opts,
                                return -1;
                        if (test_vec->plaintext.length < opts->max_buffer_size)
                                return -1;
-                       if (test_vec->auth_key.data == NULL)
+                       /* Auth key is only required for some algorithms */
+                       if (opts->auth_key_sz &&
+                                       test_vec->auth_key.data == NULL)
                                return -1;
                        if (test_vec->auth_key.length != opts->auth_key_sz)
                                return -1;
@@ -405,6 +427,10 @@ cperf_check_test_vector(struct cperf_options *opts,
                        return -1;
                if (test_vec->ciphertext.length < opts->max_buffer_size)
                        return -1;
+               if (test_vec->aead_key.data == NULL)
+                       return -1;
+               if (test_vec->aead_key.length != opts->aead_key_sz)
+                       return -1;
                if (test_vec->aead_iv.data == NULL)
                        return -1;
                if (test_vec->aead_iv.length != opts->aead_iv_sz)