vdpa/mlx5: support device cleanup callback
[dpdk.git] / drivers / vdpa / ifc / ifcvf_vdpa.c
index 7a06f97..9f05595 100644 (file)
@@ -17,7 +17,7 @@
 #include <rte_bus_pci.h>
 #include <rte_vhost.h>
 #include <rte_vdpa.h>
-#include <rte_vdpa_dev.h>
+#include <vdpa_driver.h>
 #include <rte_vfio.h>
 #include <rte_spinlock.h>
 #include <rte_log.h>
@@ -37,6 +37,8 @@ RTE_LOG_REGISTER(ifcvf_vdpa_logtype, pmd.vdpa.ifcvf, NOTICE);
 #define IFCVF_VDPA_MODE                "vdpa"
 #define IFCVF_SW_FALLBACK_LM   "sw-live-migration"
 
+#define THREAD_NAME_LEN        16
+
 static const char * const ifcvf_valid_arguments[] = {
        IFCVF_VDPA_MODE,
        IFCVF_SW_FALLBACK_LM,
@@ -160,7 +162,7 @@ ifcvf_vfio_setup(struct ifcvf_internal *internal)
        if (rte_pci_map_device(dev))
                goto err;
 
-       internal->vfio_dev_fd = dev->intr_handle.vfio_dev_fd;
+       internal->vfio_dev_fd = rte_intr_dev_fd_get(dev->intr_handle);
 
        for (i = 0; i < RTE_MIN(PCI_MAX_RESOURCE, IFCVF_PCI_MAX_RESOURCE);
                        i++) {
@@ -180,7 +182,7 @@ err:
 }
 
 static int
-ifcvf_dma_map(struct ifcvf_internal *internal, int do_map)
+ifcvf_dma_map(struct ifcvf_internal *internal, bool do_map)
 {
        uint32_t i;
        int ret;
@@ -224,8 +226,7 @@ ifcvf_dma_map(struct ifcvf_internal *internal, int do_map)
        }
 
 exit:
-       if (mem)
-               free(mem);
+       free(mem);
        return ret;
 }
 
@@ -251,8 +252,7 @@ hva_to_gpa(int vid, uint64_t hva)
        }
 
 exit:
-       if (mem)
-               free(mem);
+       free(mem);
        return gpa;
 }
 
@@ -363,7 +363,8 @@ vdpa_enable_vfio_intr(struct ifcvf_internal *internal, bool m_rx)
        irq_set->index = VFIO_PCI_MSIX_IRQ_INDEX;
        irq_set->start = 0;
        fd_ptr = (int *)&irq_set->data;
-       fd_ptr[RTE_INTR_VEC_ZERO_OFFSET] = internal->pdev->intr_handle.fd;
+       fd_ptr[RTE_INTR_VEC_ZERO_OFFSET] =
+               rte_intr_fd_get(internal->pdev->intr_handle);
 
        for (i = 0; i < nr_vring; i++)
                internal->intr_fd[i] = -1;
@@ -494,14 +495,17 @@ notify_relay(void *arg)
 static int
 setup_notify_relay(struct ifcvf_internal *internal)
 {
+       char name[THREAD_NAME_LEN];
        int ret;
 
-       ret = pthread_create(&internal->tid, NULL, notify_relay,
-                       (void *)internal);
-       if (ret) {
+       snprintf(name, sizeof(name), "ifc-notify-%d", internal->vid);
+       ret = rte_ctrl_thread_create(&internal->tid, name, NULL, notify_relay,
+                                    (void *)internal);
+       if (ret != 0) {
                DRV_LOG(ERR, "failed to create notify relay pthread.");
                return -1;
        }
+
        return 0;
 }
 
@@ -533,11 +537,11 @@ update_datapath(struct ifcvf_internal *internal)
        if (!rte_atomic32_read(&internal->running) &&
            (rte_atomic32_read(&internal->started) &&
             rte_atomic32_read(&internal->dev_attached))) {
-               ret = ifcvf_dma_map(internal, 1);
+               ret = ifcvf_dma_map(internal, true);
                if (ret)
                        goto err;
 
-               ret = vdpa_enable_vfio_intr(internal, 0);
+               ret = vdpa_enable_vfio_intr(internal, false);
                if (ret)
                        goto err;
 
@@ -563,7 +567,7 @@ update_datapath(struct ifcvf_internal *internal)
                if (ret)
                        goto err;
 
-               ret = ifcvf_dma_map(internal, 0);
+               ret = ifcvf_dma_map(internal, false);
                if (ret)
                        goto err;
 
@@ -655,8 +659,7 @@ m_ifcvf_start(struct ifcvf_internal *internal)
 
 error:
        for (i = 0; i < nr_vring; i++)
-               if (internal->m_vring[i].desc)
-                       rte_free(internal->m_vring[i].desc);
+               rte_free(internal->m_vring[i].desc);
 
        return -1;
 }
@@ -797,14 +800,17 @@ vring_relay(void *arg)
 static int
 setup_vring_relay(struct ifcvf_internal *internal)
 {
+       char name[THREAD_NAME_LEN];
        int ret;
 
-       ret = pthread_create(&internal->tid, NULL, vring_relay,
-                       (void *)internal);
-       if (ret) {
+       snprintf(name, sizeof(name), "ifc-vring-%d", internal->vid);
+       ret = rte_ctrl_thread_create(&internal->tid, name, NULL, vring_relay,
+                                    (void *)internal);
+       if (ret != 0) {
                DRV_LOG(ERR, "failed to create ring relay pthread.");
                return -1;
        }
+
        return 0;
 }
 
@@ -842,7 +848,7 @@ ifcvf_sw_fallback_switchover(struct ifcvf_internal *internal)
                goto error;
 
        /* set up interrupt for interrupt relay */
-       ret = vdpa_enable_vfio_intr(internal, 1);
+       ret = vdpa_enable_vfio_intr(internal, true);
        if (ret)
                goto unmap;
 
@@ -867,7 +873,7 @@ stop_vf:
 unset_intr:
        vdpa_disable_vfio_intr(internal);
 unmap:
-       ifcvf_dma_map(internal, 0);
+       ifcvf_dma_map(internal, false);
 error:
        return -1;
 }
@@ -926,7 +932,7 @@ ifcvf_dev_close(int vid)
                vdpa_disable_vfio_intr(internal);
 
                /* unset DMA map for guest memory */
-               ifcvf_dma_map(internal, 0);
+               ifcvf_dma_map(internal, false);
 
                internal->sw_fallback_running = false;
        } else {
@@ -1122,7 +1128,7 @@ ifcvf_set_vring_state(int vid, int vring, int state)
        }
 
        if (state && !hw->vring[vring].enable) {
-               ret = vdpa_enable_vfio_intr(internal, 0);
+               ret = vdpa_enable_vfio_intr(internal, false);
                if (ret)
                        return ret;
        }