Remove multiple invocations of virtio_crypto_queue_release,
and set virtio crypto queue as null upon free to avoid
segfaults.

Signed-off-by: Rajesh Mudimadugula <rmudimadu...@marvell.com>
---
 .mailmap                                 |  1 +
 drivers/crypto/virtio/virtio_cryptodev.c | 11 +++++------
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/.mailmap b/.mailmap
index 7334ad58a9..66e275c262 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1246,6 +1246,7 @@ Rahul Gupta <rahul.gu...@broadcom.com>
 Rahul Lakkireddy <rahul.lakkire...@chelsio.com>
 Rahul Shah <rahul.r.s...@intel.com>
 Raja Zidane <rzid...@nvidia.com>
+Rajesh Mudimadugula <rmudimadu...@marvell.com>
 Rajesh Ravi <rajesh.r...@broadcom.com>
 Rakesh Kudurumalla <rkuduruma...@marvell.com> <rkuduruma...@caviumnetworks.com>
 Ralf Hoffmann <ralf.hoffm...@allegro-packets.com>
diff --git a/drivers/crypto/virtio/virtio_cryptodev.c 
b/drivers/crypto/virtio/virtio_cryptodev.c
index 643921dc02..98415af123 100644
--- a/drivers/crypto/virtio/virtio_cryptodev.c
+++ b/drivers/crypto/virtio/virtio_cryptodev.c
@@ -478,10 +478,13 @@ virtio_crypto_free_queues(struct rte_cryptodev *dev)
 
        /* control queue release */
        virtio_crypto_queue_release(hw->cvq);
+       hw->cvq = NULL;
 
        /* data queue release */
-       for (i = 0; i < hw->max_dataqueues; i++)
+       for (i = 0; i < hw->max_dataqueues; i++) {
                virtio_crypto_queue_release(dev->data->queue_pairs[i]);
+               dev->data->queue_pairs[i] = NULL;
+       }
 }
 
 static int
@@ -613,6 +616,7 @@ virtio_crypto_qp_release(struct rte_cryptodev *dev, 
uint16_t queue_pair_id)
        }
 
        virtio_crypto_queue_release(vq);
+       dev->data->queue_pairs[queue_pair_id] = NULL;
        return 0;
 }
 
@@ -760,8 +764,6 @@ crypto_virtio_create(const char *name, struct 
rte_pci_device *pci_dev,
 static int
 virtio_crypto_dev_uninit(struct rte_cryptodev *cryptodev)
 {
-       struct virtio_crypto_hw *hw = cryptodev->data->dev_private;
-
        PMD_INIT_FUNC_TRACE();
 
        if (rte_eal_process_type() == RTE_PROC_SECONDARY)
@@ -776,9 +778,6 @@ virtio_crypto_dev_uninit(struct rte_cryptodev *cryptodev)
        cryptodev->enqueue_burst = NULL;
        cryptodev->dequeue_burst = NULL;
 
-       /* release control queue */
-       virtio_crypto_queue_release(hw->cvq);
-
        rte_free(cryptodev->data);
        cryptodev->data = NULL;
 
-- 
2.34.1

Reply via email to