Insert internal list element to internal list before
register vdpa device, in order to call vdpa ops during
vdpa device registration.

Signed-off-by: Andy Pei <andy....@intel.com>
---
 drivers/vdpa/ifc/ifcvf_vdpa.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c
index c16e263..8dfd493 100644
--- a/drivers/vdpa/ifc/ifcvf_vdpa.c
+++ b/drivers/vdpa/ifc/ifcvf_vdpa.c
@@ -1737,17 +1737,20 @@ struct rte_vdpa_dev_info dev_info[] = {
        }
        internal->sw_lm = sw_fallback_lm;
 
+       pthread_mutex_lock(&internal_list_lock);
+       TAILQ_INSERT_TAIL(&internal_list, list, next);
+       pthread_mutex_unlock(&internal_list_lock);
+
        internal->vdev = rte_vdpa_register_device(&pci_dev->device,
                                dev_info[internal->hw.device_type].ops);
        if (internal->vdev == NULL) {
                DRV_LOG(ERR, "failed to register device %s", pci_dev->name);
+               pthread_mutex_lock(&internal_list_lock);
+               TAILQ_REMOVE(&internal_list, list, next);
+               pthread_mutex_unlock(&internal_list_lock);
                goto error;
        }
 
-       pthread_mutex_lock(&internal_list_lock);
-       TAILQ_INSERT_TAIL(&internal_list, list, next);
-       pthread_mutex_unlock(&internal_list_lock);
-
        rte_atomic32_set(&internal->started, 1);
        update_datapath(internal);
 
-- 
1.8.3.1

Reply via email to