Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

vdpa/mlx5: Add support for modifying the virtio_version VQ field

This is done in preparation for the pre-creation of hardware virtqueues
at device add time.

Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com>
Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com>
Message-Id: <20240626-stage-vdpa-vq-precreate-v2-10-560c491078df@nvidia.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

authored by

Dragos Tatulea and committed by
Michael S. Tsirkin
f70080c5 4a19f294

+17
+16
drivers/vdpa/mlx5/net/mlx5_vnet.c
··· 1283 1283 if (mvq->modified_fields & MLX5_VIRTQ_MODIFY_MASK_VIRTIO_Q_USED_IDX) 1284 1284 MLX5_SET(virtio_net_q_object, obj_context, hw_used_index, mvq->used_idx); 1285 1285 1286 + if (mvq->modified_fields & MLX5_VIRTQ_MODIFY_MASK_QUEUE_VIRTIO_VERSION) 1287 + MLX5_SET(virtio_q, vq_ctx, virtio_version_1_0, 1288 + !!(ndev->mvdev.actual_features & BIT_ULL(VIRTIO_F_VERSION_1))); 1289 + 1286 1290 if (mvq->modified_fields & MLX5_VIRTQ_MODIFY_MASK_VIRTIO_Q_MKEY) { 1287 1291 vq_mr = mvdev->mr[mvdev->group2asid[MLX5_VDPA_DATAVQ_GROUP]]; 1288 1292 ··· 2713 2709 { 2714 2710 struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev); 2715 2711 struct mlx5_vdpa_net *ndev = to_mlx5_vdpa_ndev(mvdev); 2712 + u64 old_features = mvdev->actual_features; 2716 2713 int err; 2717 2714 2718 2715 print_features(mvdev, features, true); ··· 2727 2722 ndev->rqt_size = mlx5vdpa16_to_cpu(mvdev, ndev->config.max_virtqueue_pairs); 2728 2723 else 2729 2724 ndev->rqt_size = 1; 2725 + 2726 + /* Interested in changes of vq features only. */ 2727 + if (get_features(old_features) != get_features(mvdev->actual_features)) { 2728 + for (int i = 0; i < mvdev->max_vqs; ++i) { 2729 + struct mlx5_vdpa_virtqueue *mvq = &ndev->vqs[i]; 2730 + 2731 + mvq->modified_fields |= ( 2732 + MLX5_VIRTQ_MODIFY_MASK_QUEUE_VIRTIO_VERSION 2733 + ); 2734 + } 2735 + } 2730 2736 2731 2737 update_cvq_info(mvdev); 2732 2738 return err;
+1
include/linux/mlx5/mlx5_ifc_vdpa.h
··· 148 148 MLX5_VIRTQ_MODIFY_MASK_VIRTIO_Q_ADDRS = (u64)1 << 6, 149 149 MLX5_VIRTQ_MODIFY_MASK_VIRTIO_Q_AVAIL_IDX = (u64)1 << 7, 150 150 MLX5_VIRTQ_MODIFY_MASK_VIRTIO_Q_USED_IDX = (u64)1 << 8, 151 + MLX5_VIRTQ_MODIFY_MASK_QUEUE_VIRTIO_VERSION = (u64)1 << 10, 151 152 MLX5_VIRTQ_MODIFY_MASK_VIRTIO_Q_MKEY = (u64)1 << 11, 152 153 MLX5_VIRTQ_MODIFY_MASK_DESC_GROUP_MKEY = (u64)1 << 14, 153 154 };