@@ -50,6 +50,7 @@ static TAILQ_HEAD(mlx5_drivers, mlx5_class_driver) drivers_list =
/* Head of devices. */
static TAILQ_HEAD(mlx5_devices, mlx5_common_device) devices_list =
TAILQ_HEAD_INITIALIZER(devices_list);
+static pthread_mutex_t devices_list_lock;
static const struct {
const char *name;
@@ -222,7 +223,9 @@ mlx5_dev_to_pci_str(const struct rte_device *dev, char *addr, size_t size)
static void
dev_release(struct mlx5_common_device *dev)
{
+ pthread_mutex_lock(&devices_list_lock);
TAILQ_REMOVE(&devices_list, dev, next);
+ pthread_mutex_unlock(&devices_list_lock);
rte_free(dev);
}
@@ -315,7 +318,9 @@ mlx5_common_dev_probe(struct rte_device *eal_dev)
if (!dev)
return -ENOMEM;
dev->dev = eal_dev;
+ pthread_mutex_lock(&devices_list_lock);
TAILQ_INSERT_HEAD(&devices_list, dev, next);
+ pthread_mutex_unlock(&devices_list_lock);
new_device = true;
}
/*
@@ -440,6 +445,7 @@ mlx5_common_init(void)
if (mlx5_common_initialized)
return;
+ pthread_mutex_init(&devices_list_lock, NULL);
mlx5_glue_constructor();
mlx5_common_driver_init();
mlx5_common_initialized = true;