crypto/aesni_mb: call buffer manager allocation
authorPablo de Lara <pablo.de.lara.guarch@intel.com>
Tue, 3 Jul 2018 05:58:01 +0000 (06:58 +0100)
committerPablo de Lara <pablo.de.lara.guarch@intel.com>
Mon, 23 Jul 2018 23:48:10 +0000 (01:48 +0200)
Instead of having a static field for the buffer manager
MB_MGR in the queue pair structure, use the provided API
that allocates memory for it and store a pointer to it.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c
drivers/crypto/aesni_mb/rte_aesni_mb_pmd_ops.c
drivers/crypto/aesni_mb/rte_aesni_mb_pmd_private.h

index b99e43b..8dd849f 100644 (file)
@@ -721,7 +721,7 @@ handle_completed_jobs(struct aesni_mb_qp *qp, JOB_AES_HMAC *job,
                if (processed_jobs == nb_ops)
                        break;
 
-               job = (*qp->op_fns->job.get_completed_job)(&qp->mb_mgr);
+               job = (*qp->op_fns->job.get_completed_job)(qp->mb_mgr);
        }
 
        return processed_jobs;
@@ -734,7 +734,7 @@ flush_mb_mgr(struct aesni_mb_qp *qp, struct rte_crypto_op **ops,
        int processed_ops = 0;
 
        /* Flush the remaining jobs */
-       JOB_AES_HMAC *job = (*qp->op_fns->job.flush_job)(&qp->mb_mgr);
+       JOB_AES_HMAC *job = (*qp->op_fns->job.flush_job)(qp->mb_mgr);
 
        if (job)
                processed_ops += handle_completed_jobs(qp, job,
@@ -779,14 +779,14 @@ aesni_mb_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
                        break;
 
                /* Get next free mb job struct from mb manager */
-               job = (*qp->op_fns->job.get_next)(&qp->mb_mgr);
+               job = (*qp->op_fns->job.get_next)(qp->mb_mgr);
                if (unlikely(job == NULL)) {
                        /* if no free mb job structs we need to flush mb_mgr */
                        processed_jobs += flush_mb_mgr(qp,
                                        &ops[processed_jobs],
                                        (nb_ops - processed_jobs) - 1);
 
-                       job = (*qp->op_fns->job.get_next)(&qp->mb_mgr);
+                       job = (*qp->op_fns->job.get_next)(qp->mb_mgr);
                }
 
                retval = set_mb_job_params(job, qp, op, &digest_idx);
@@ -796,7 +796,7 @@ aesni_mb_pmd_dequeue_burst(void *queue_pair, struct rte_crypto_op **ops,
                }
 
                /* Submit job to multi-buffer for processing */
-               job = (*qp->op_fns->job.submit)(&qp->mb_mgr);
+               job = (*qp->op_fns->job.submit)(qp->mb_mgr);
 
                /*
                 * If submit returns a processed job then handle it,
index fa3e963..c3c349d 100644 (file)
@@ -403,6 +403,8 @@ aesni_mb_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)
                r = rte_ring_lookup(qp->name);
                if (r)
                        rte_ring_free(r);
+               if (qp->mb_mgr)
+                       free_mb_mgr(qp->mb_mgr);
                rte_free(qp);
                dev->data->queue_pairs[qp_id] = NULL;
        }
@@ -464,6 +466,7 @@ aesni_mb_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
 {
        struct aesni_mb_qp *qp = NULL;
        struct aesni_mb_private *internals = dev->data->dev_private;
+       int ret = -1;
 
        /* Free memory prior to re-allocation if needed. */
        if (dev->data->queue_pairs[qp_id] != NULL)
@@ -482,12 +485,20 @@ aesni_mb_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
                goto qp_setup_cleanup;
 
 
+       qp->mb_mgr = alloc_mb_mgr(0);
+       if (qp->mb_mgr == NULL) {
+               ret = -ENOMEM;
+               goto qp_setup_cleanup;
+       }
+
        qp->op_fns = &job_ops[internals->vector_mode];
 
        qp->ingress_queue = aesni_mb_pmd_qp_create_processed_ops_ring(qp,
                        "ingress", qp_conf->nb_descriptors, socket_id);
-       if (qp->ingress_queue == NULL)
+       if (qp->ingress_queue == NULL) {
+               ret = -1;
                goto qp_setup_cleanup;
+       }
 
        qp->sess_mp = session_pool;
 
@@ -499,14 +510,17 @@ aesni_mb_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
                                "digest_mp_%u_%u", dev->data->dev_id, qp_id);
 
        /* Initialise multi-buffer manager */
-       (*qp->op_fns->job.init_mgr)(&qp->mb_mgr);
+       (*qp->op_fns->job.init_mgr)(qp->mb_mgr);
        return 0;
 
 qp_setup_cleanup:
-       if (qp)
+       if (qp) {
+               if (qp->mb_mgr == NULL)
+                       free_mb_mgr(qp->mb_mgr);
                rte_free(qp);
+       }
 
-       return -1;
+       return ret;
 }
 
 /** Return the number of allocated queue pairs */
index 91fd740..30922da 100644 (file)
@@ -123,7 +123,7 @@ struct aesni_mb_qp {
        /**< Unique Queue Pair Name */
        const struct aesni_mb_op_fns *op_fns;
        /**< Vector mode dependent pointer table of the multi-buffer APIs */
-       MB_MGR mb_mgr;
+       MB_MGR *mb_mgr;
        /**< Multi-buffer instance */
        struct rte_ring *ingress_queue;
        /**< Ring for placing operations ready for processing */