}
priv->configured = 0;
priv->vid = 0;
+ /* The mutex may stay locked after event thread cancel - initiate it. */
+ pthread_mutex_init(&priv->vq_config_lock, NULL);
DRV_LOG(INFO, "vDPA device %d was closed.", vid);
return ret;
}
.reset_stats = mlx5_vdpa_reset_stats,
};
-static struct ibv_device *
-mlx5_vdpa_get_ib_device_match(struct rte_pci_addr *addr)
-{
- int n;
- struct ibv_device **ibv_list = mlx5_glue->get_device_list(&n);
- struct ibv_device *ibv_match = NULL;
-
- if (!ibv_list) {
- rte_errno = ENOSYS;
- return NULL;
- }
- while (n-- > 0) {
- struct rte_pci_addr pci_addr;
-
- DRV_LOG(DEBUG, "Checking device \"%s\"..", ibv_list[n]->name);
- if (mlx5_dev_to_pci_addr(ibv_list[n]->ibdev_path, &pci_addr))
- continue;
- if (rte_pci_addr_cmp(addr, &pci_addr))
- continue;
- ibv_match = ibv_list[n];
- break;
- }
- if (!ibv_match)
- rte_errno = ENOENT;
- mlx5_glue->free_device_list(ibv_list);
- return ibv_match;
-}
-
/* Try to disable ROCE by Netlink\Devlink. */
static int
mlx5_vdpa_nl_roce_disable(const char *addr)
struct ibv_device *ibv_new;
for (r = MLX5_VDPA_MAX_RETRIES; r; r--) {
- ibv_new = mlx5_vdpa_get_ib_device_match(addr);
+ ibv_new = mlx5_os_get_ibv_device(addr);
if (ibv_new) {
*ibv = ibv_new;
return 0;
struct mlx5_hca_attr attr;
int ret;
- ibv = mlx5_vdpa_get_ib_device_match(&pci_dev->addr);
+ ibv = mlx5_os_get_ibv_device(&pci_dev->addr);
if (!ibv) {
DRV_LOG(ERR, "No matching IB device for PCI slot "
PCI_PRI_FMT ".", pci_dev->addr.domain,
priv->caps = attr.vdpa;
priv->log_max_rqt_size = attr.log_max_rqt_size;
priv->num_lag_ports = attr.num_lag_ports;
+ priv->qp_ts_format = attr.qp_ts_format;
if (attr.num_lag_ports == 0)
priv->num_lag_ports = 1;
priv->ctx = ctx;
priv->pci_dev = pci_dev;
priv->var = mlx5_glue->dv_alloc_var(ctx, 0);
if (!priv->var) {
- DRV_LOG(ERR, "Failed to allocate VAR %u.\n", errno);
+ DRV_LOG(ERR, "Failed to allocate VAR %u.", errno);
goto error;
}
priv->vdev = rte_vdpa_register_device(&pci_dev->device,