summaryrefslogtreecommitdiffstats
path: root/drivers/virtio
diff options
context:
space:
mode:
authorJiri Pirko <jiri@nvidia.com>2024-07-16 13:35:43 +0200
committerMichael S. Tsirkin <mst@redhat.com>2024-07-17 11:43:21 +0200
commitb8b4e1a05d41c282e63a1772f00e376f6fb84410 (patch)
tree959cbdb244729a858d00810111969f1cd50bd624 /drivers/virtio
parentvirtio_pci: pass vector policy enum to vp_find_vqs_msix() (diff)
downloadlinux-b8b4e1a05d41c282e63a1772f00e376f6fb84410.tar.xz
linux-b8b4e1a05d41c282e63a1772f00e376f6fb84410.zip
virtio_pci: pass vector policy enum to vp_find_one_vq_msix()
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>
Diffstat (limited to 'drivers/virtio')
-rw-r--r--drivers/virtio/virtio_pci_common.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/virtio/virtio_pci_common.c b/drivers/virtio/virtio_pci_common.c
index 7fec2258d125..628f003db79b 100644
--- a/drivers/virtio/virtio_pci_common.c
+++ b/drivers/virtio/virtio_pci_common.c
@@ -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;