X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fvdpa%2Fmlx5%2Fmlx5_vdpa_lm.c;h=6c4284f7f76173934f87b53de40955c36b138e7b;hb=537399a91b93243795fcea2fbf8e8945950afc9c;hp=44577601a67bbbd125705ce34fcae34c4b383a94;hpb=53ac93f71ad152156d84241c5ee0e1a0d0321378;p=dpdk.git diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_lm.c b/drivers/vdpa/mlx5/mlx5_vdpa_lm.c index 44577601a6..6c4284f7f7 100644 --- a/drivers/vdpa/mlx5/mlx5_vdpa_lm.c +++ b/drivers/vdpa/mlx5/mlx5_vdpa_lm.c @@ -15,13 +15,17 @@ mlx5_vdpa_logging_enable(struct mlx5_vdpa_priv *priv, int enable) .type = MLX5_VIRTQ_MODIFY_TYPE_DIRTY_BITMAP_DUMP_ENABLE, .dirty_bitmap_dump_enable = enable, }; - struct mlx5_vdpa_virtq *virtq; + int i; - SLIST_FOREACH(virtq, &priv->virtq_list, next) { - attr.queue_index = virtq->index; - if (mlx5_devx_cmd_modify_virtq(virtq->virtq, &attr)) { - DRV_LOG(ERR, "Failed to modify virtq %d logging.", - virtq->index); + for (i = 0; i < priv->nr_virtqs; ++i) { + attr.queue_index = i; + if (!priv->virtqs[i].virtq) { + DRV_LOG(DEBUG, "virtq %d is invalid for dirty bitmap " + "enabling.", i); + } else if (mlx5_devx_cmd_modify_virtq(priv->virtqs[i].virtq, + &attr)) { + DRV_LOG(ERR, "Failed to modify virtq %d for dirty " + "bitmap enabling.", i); return -1; } } @@ -39,7 +43,8 @@ mlx5_vdpa_dirty_bitmap_set(struct mlx5_vdpa_priv *priv, uint64_t log_base, .pg_access = 1, .klm_array = NULL, .klm_num = 0, - .relaxed_ordering = 0, + .relaxed_ordering_read = 0, + .relaxed_ordering_write = 0, }; struct mlx5_devx_virtq_attr attr = { .type = MLX5_VIRTQ_MODIFY_TYPE_DIRTY_BITMAP_PARAMS, @@ -47,7 +52,7 @@ mlx5_vdpa_dirty_bitmap_set(struct mlx5_vdpa_priv *priv, uint64_t log_base, .dirty_bitmap_size = log_size, }; struct mlx5_vdpa_query_mr *mr = rte_malloc(__func__, sizeof(*mr), 0); - struct mlx5_vdpa_virtq *virtq; + int i; if (!mr) { DRV_LOG(ERR, "Failed to allocate mem for lm mr."); @@ -67,11 +72,13 @@ mlx5_vdpa_dirty_bitmap_set(struct mlx5_vdpa_priv *priv, uint64_t log_base, goto err; } attr.dirty_bitmap_mkey = mr->mkey->id; - SLIST_FOREACH(virtq, &priv->virtq_list, next) { - attr.queue_index = virtq->index; - if (mlx5_devx_cmd_modify_virtq(virtq->virtq, &attr)) { - DRV_LOG(ERR, "Failed to modify virtq %d for lm.", - virtq->index); + for (i = 0; i < priv->nr_virtqs; ++i) { + attr.queue_index = i; + if (!priv->virtqs[i].virtq) { + DRV_LOG(DEBUG, "virtq %d is invalid for LM.", i); + } else if (mlx5_devx_cmd_modify_virtq(priv->virtqs[i].virtq, + &attr)) { + DRV_LOG(ERR, "Failed to modify virtq %d for LM.", i); goto err; } } @@ -93,10 +100,9 @@ err: int mlx5_vdpa_lm_log(struct mlx5_vdpa_priv *priv) { - struct mlx5_devx_virtq_attr attr = {0}; - struct mlx5_vdpa_virtq *virtq; uint64_t features; int ret = rte_vhost_get_negotiated_features(priv->vid, &features); + int i; if (ret) { DRV_LOG(ERR, "Failed to get negotiated features."); @@ -104,27 +110,19 @@ mlx5_vdpa_lm_log(struct mlx5_vdpa_priv *priv) } if (!RTE_VHOST_NEED_LOG(features)) return 0; - SLIST_FOREACH(virtq, &priv->virtq_list, next) { - ret = mlx5_vdpa_virtq_modify(virtq, 0); - if (ret) - return -1; - if (mlx5_devx_cmd_query_virtq(virtq->virtq, &attr)) { - DRV_LOG(ERR, "Failed to query virtq %d.", virtq->index); - return -1; - } - DRV_LOG(INFO, "Query vid %d vring %d: hw_available_idx=%d, " - "hw_used_index=%d", priv->vid, virtq->index, - attr.hw_available_index, attr.hw_used_index); - ret = rte_vhost_set_vring_base(priv->vid, virtq->index, - attr.hw_available_index, - attr.hw_used_index); - if (ret) { - DRV_LOG(ERR, "Failed to set virtq %d base.", - virtq->index); - return -1; + for (i = 0; i < priv->nr_virtqs; ++i) { + if (!priv->virtqs[i].virtq) { + DRV_LOG(DEBUG, "virtq %d is invalid for LM log.", i); + } else { + ret = mlx5_vdpa_virtq_stop(priv, i); + if (ret) { + DRV_LOG(ERR, "Failed to stop virtq %d for LM " + "log.", i); + return -1; + } } - rte_vhost_log_used_vring(priv->vid, virtq->index, 0, - MLX5_VDPA_USED_RING_LEN(virtq->vq_size)); + rte_vhost_log_used_vring(priv->vid, i, 0, + MLX5_VDPA_USED_RING_LEN(priv->virtqs[i].vq_size)); } return 0; }