]> www.infradead.org Git - linux.git/commitdiff
virtio_pci: pass vector policy enum to vp_find_one_vq_msix()
authorJiri Pirko <jiri@nvidia.com>
Tue, 16 Jul 2024 11:35:43 +0000 (13:35 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 17 Jul 2024 09:43:21 +0000 (05:43 -0400)
Instead of accessing vp_dev->per_vq_vectors, pass vector policy enum
as an argument of vp_find_one_vq_msix() in preparation for another irq
allocation policy.

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

index 7fec2258d125791566fc1bb9448aad6ee41c17ca..628f003db79ba78468ba3fa4769e0236136442e9 100644 (file)
@@ -292,11 +292,11 @@ enum vp_vq_vector_policy {
        VP_VQ_VECTOR_POLICY_SHARED,
 };
 
-static struct virtqueue *vp_find_one_vq_msix(struct virtio_device *vdev,
-                                            int queue_idx,
-                                            vq_callback_t *callback,
-                                            const char *name, bool ctx,
-                                            int *allocated_vectors)
+static struct virtqueue *
+vp_find_one_vq_msix(struct virtio_device *vdev, int queue_idx,
+                   vq_callback_t *callback, const char *name, bool ctx,
+                   int *allocated_vectors,
+                   enum vp_vq_vector_policy vector_policy)
 {
        struct virtio_pci_device *vp_dev = to_vp_device(vdev);
        struct virtqueue *vq;
@@ -305,7 +305,7 @@ static struct virtqueue *vp_find_one_vq_msix(struct virtio_device *vdev,
 
        if (!callback)
                msix_vec = VIRTIO_MSI_NO_VECTOR;
-       else if (vp_dev->per_vq_vectors)
+       else if (vector_policy == VP_VQ_VECTOR_POLICY_EACH)
                msix_vec = (*allocated_vectors)++;
        else
                msix_vec = VP_MSIX_VQ_VECTOR;
@@ -313,7 +313,8 @@ static struct virtqueue *vp_find_one_vq_msix(struct virtio_device *vdev,
        if (IS_ERR(vq))
                return vq;
 
-       if (!vp_dev->per_vq_vectors || msix_vec == VIRTIO_MSI_NO_VECTOR)
+       if (vector_policy == VP_VQ_VECTOR_POLICY_SHARED ||
+           msix_vec == VIRTIO_MSI_NO_VECTOR)
                return vq;
 
        /* allocate per-vq irq if available and necessary */
@@ -374,7 +375,7 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned int nvqs,
                }
                vqs[i] = vp_find_one_vq_msix(vdev, queue_idx++, vqi->callback,
                                             vqi->name, vqi->ctx,
-                                            &allocated_vectors);
+                                            &allocated_vectors, vector_policy);
                if (IS_ERR(vqs[i])) {
                        err = PTR_ERR(vqs[i]);
                        goto error_find;