]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
virtio_pci_modern: treat vp_dev->admin_vq.info.vq pointer as static
authorJiri Pirko <jiri@nvidia.com>
Tue, 16 Jul 2024 11:35:45 +0000 (13:35 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 17 Jul 2024 09:43:21 +0000 (05:43 -0400)
It is guaranteed by the virtio_pci and PCI layers that none of the VFs
is probed before setup_vq() is called for admin queue and after del_vq()
is called for admin queue. Therefore treat vp_dev->admin_vq.info.vq as
static, don't null it and don't take cmd lock during assign.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Message-Id: <20240716113552.80599-7-jiri@resnulli.us>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/virtio/virtio_pci_common.h
drivers/virtio/virtio_pci_modern.c

index 0cb6fdc8c354b99488f799d65f3e4d1ce4c64e95..aa43875b6353b6514a78a8a2939dba8da38dac65 100644 (file)
@@ -45,7 +45,7 @@ struct virtio_pci_vq_info {
 struct virtio_pci_admin_vq {
        /* Virtqueue info associated with this admin queue. */
        struct virtio_pci_vq_info info;
-       /* serializing admin commands execution and virtqueue deletion */
+       /* serializing admin commands execution. */
        struct mutex cmd_lock;
        u64 supported_cmds;
        /* Name of the admin queue: avq.$vq_index. */
index 3b5b9499a53a658be513cdbe6ebc26805d699f44..6d653bea9a872a7b36044e8cd9fd1e28e31da941 100644 (file)
@@ -580,11 +580,8 @@ static struct virtqueue *setup_vq(struct virtio_pci_device *vp_dev,
                goto err;
        }
 
-       if (is_avq) {
-               mutex_lock(&vp_dev->admin_vq.cmd_lock);
+       if (is_avq)
                vp_dev->admin_vq.info.vq = vq;
-               mutex_unlock(&vp_dev->admin_vq.cmd_lock);
-       }
 
        return vq;
 
@@ -620,12 +617,6 @@ static void del_vq(struct virtio_pci_vq_info *info)
        struct virtio_pci_device *vp_dev = to_vp_device(vq->vdev);
        struct virtio_pci_modern_device *mdev = &vp_dev->mdev;
 
-       if (vp_is_avq(&vp_dev->vdev, vq->index)) {
-               mutex_lock(&vp_dev->admin_vq.cmd_lock);
-               vp_dev->admin_vq.info.vq = NULL;
-               mutex_unlock(&vp_dev->admin_vq.cmd_lock);
-       }
-
        if (vp_dev->msix_enabled)
                vp_modern_queue_vector(mdev, vq->index,
                                       VIRTIO_MSI_NO_VECTOR);