From: Jiri Pirko <j...@nvidia.com>

Convert existing vp_find_vqs() and vp_modern_find_vqs() implementations
to find_vqs_info() config op.

Signed-off-by: Jiri Pirko <j...@nvidia.com>
---
 drivers/virtio/virtio_pci_common.c | 49 ++++++++++++++++--------------
 drivers/virtio/virtio_pci_common.h |  4 +--
 drivers/virtio/virtio_pci_legacy.c |  2 +-
 drivers/virtio/virtio_pci_modern.c |  9 +++---
 4 files changed, 34 insertions(+), 30 deletions(-)

diff --git a/drivers/virtio/virtio_pci_common.c 
b/drivers/virtio/virtio_pci_common.c
index f6b0b00e4599..ce9cce6f6a08 100644
--- a/drivers/virtio/virtio_pci_common.c
+++ b/drivers/virtio/virtio_pci_common.c
@@ -285,12 +285,13 @@ void vp_del_vqs(struct virtio_device *vdev)
 }
 
 static int vp_find_vqs_msix(struct virtio_device *vdev, unsigned int nvqs,
-               struct virtqueue *vqs[], vq_callback_t *callbacks[],
-               const char * const names[], bool per_vq_vectors,
-               const bool *ctx,
-               struct irq_affinity *desc)
+                           struct virtqueue *vqs[],
+                           struct virtio_queue_info vqs_info[],
+                           bool per_vq_vectors,
+                           struct irq_affinity *desc)
 {
        struct virtio_pci_device *vp_dev = to_vp_device(vdev);
+       struct virtio_queue_info *vqi;
        u16 msix_vec;
        int i, err, nvectors, allocated_vectors, queue_idx = 0;
 
@@ -301,9 +302,11 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, 
unsigned int nvqs,
        if (per_vq_vectors) {
                /* Best option: one for change interrupt, one per vq. */
                nvectors = 1;
-               for (i = 0; i < nvqs; ++i)
-                       if (names[i] && callbacks[i])
+               for (i = 0; i < nvqs; ++i) {
+                       vqi = &vqs_info[i];
+                       if (vqi->name && vqi->callback)
                                ++nvectors;
+               }
        } else {
                /* Second best: one for change, shared for all vqs. */
                nvectors = 2;
@@ -317,20 +320,20 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, 
unsigned int nvqs,
        vp_dev->per_vq_vectors = per_vq_vectors;
        allocated_vectors = vp_dev->msix_used_vectors;
        for (i = 0; i < nvqs; ++i) {
-               if (!names[i]) {
+               vqi = &vqs_info[i];
+               if (!vqi->name) {
                        vqs[i] = NULL;
                        continue;
                }
 
-               if (!callbacks[i])
+               if (!vqi->callback)
                        msix_vec = VIRTIO_MSI_NO_VECTOR;
                else if (vp_dev->per_vq_vectors)
                        msix_vec = allocated_vectors++;
                else
                        msix_vec = VP_MSIX_VQ_VECTOR;
-               vqs[i] = vp_setup_vq(vdev, queue_idx++, callbacks[i], names[i],
-                                    ctx ? ctx[i] : false,
-                                    msix_vec);
+               vqs[i] = vp_setup_vq(vdev, queue_idx++, vqi->callback,
+                                    vqi->name, vqi->ctx, msix_vec);
                if (IS_ERR(vqs[i])) {
                        err = PTR_ERR(vqs[i]);
                        goto error_find;
@@ -343,7 +346,7 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, 
unsigned int nvqs,
                snprintf(vp_dev->msix_names[msix_vec],
                         sizeof *vp_dev->msix_names,
                         "%s-%s",
-                        dev_name(&vp_dev->vdev.dev), names[i]);
+                        dev_name(&vp_dev->vdev.dev), vqi->name);
                err = request_irq(pci_irq_vector(vp_dev->pci_dev, msix_vec),
                                  vring_interrupt, 0,
                                  vp_dev->msix_names[msix_vec],
@@ -361,10 +364,11 @@ static int vp_find_vqs_msix(struct virtio_device *vdev, 
unsigned int nvqs,
 }
 
 static int vp_find_vqs_intx(struct virtio_device *vdev, unsigned int nvqs,
-               struct virtqueue *vqs[], vq_callback_t *callbacks[],
-               const char * const names[], const bool *ctx)
+                           struct virtqueue *vqs[],
+                           struct virtio_queue_info vqs_info[])
 {
        struct virtio_pci_device *vp_dev = to_vp_device(vdev);
+       struct virtio_queue_info *vqi;
        int i, err, queue_idx = 0;
 
        vp_dev->vqs = kcalloc(nvqs, sizeof(*vp_dev->vqs), GFP_KERNEL);
@@ -379,12 +383,13 @@ static int vp_find_vqs_intx(struct virtio_device *vdev, 
unsigned int nvqs,
        vp_dev->intx_enabled = 1;
        vp_dev->per_vq_vectors = false;
        for (i = 0; i < nvqs; ++i) {
-               if (!names[i]) {
+               vqi = &vqs_info[i];
+               if (!vqi->name) {
                        vqs[i] = NULL;
                        continue;
                }
-               vqs[i] = vp_setup_vq(vdev, queue_idx++, callbacks[i], names[i],
-                                    ctx ? ctx[i] : false,
+               vqs[i] = vp_setup_vq(vdev, queue_idx++, vqi->callback,
+                                    vqi->name, vqi->ctx,
                                     VIRTIO_MSI_NO_VECTOR);
                if (IS_ERR(vqs[i])) {
                        err = PTR_ERR(vqs[i]);
@@ -400,25 +405,25 @@ static int vp_find_vqs_intx(struct virtio_device *vdev, 
unsigned int nvqs,
 
 /* the config->find_vqs() implementation */
 int vp_find_vqs(struct virtio_device *vdev, unsigned int nvqs,
-               struct virtqueue *vqs[], vq_callback_t *callbacks[],
-               const char * const names[], const bool *ctx,
+               struct virtqueue *vqs[],
+               struct virtio_queue_info vqs_info[],
                struct irq_affinity *desc)
 {
        int err;
 
        /* Try MSI-X with one vector per queue. */
-       err = vp_find_vqs_msix(vdev, nvqs, vqs, callbacks, names, true, ctx, 
desc);
+       err = vp_find_vqs_msix(vdev, nvqs, vqs, vqs_info, true, desc);
        if (!err)
                return 0;
        /* Fallback: MSI-X with one vector for config, one shared for queues. */
-       err = vp_find_vqs_msix(vdev, nvqs, vqs, callbacks, names, false, ctx, 
desc);
+       err = vp_find_vqs_msix(vdev, nvqs, vqs, vqs_info, false, desc);
        if (!err)
                return 0;
        /* Is there an interrupt? If not give up. */
        if (!(to_vp_device(vdev)->pci_dev->irq))
                return err;
        /* Finally fall back to regular interrupts. */
-       return vp_find_vqs_intx(vdev, nvqs, vqs, callbacks, names, ctx);
+       return vp_find_vqs_intx(vdev, nvqs, vqs, vqs_info);
 }
 
 const char *vp_bus_name(struct virtio_device *vdev)
diff --git a/drivers/virtio/virtio_pci_common.h 
b/drivers/virtio/virtio_pci_common.h
index 7fef52bee455..d7e65631b5f6 100644
--- a/drivers/virtio/virtio_pci_common.h
+++ b/drivers/virtio/virtio_pci_common.h
@@ -127,8 +127,8 @@ bool vp_notify(struct virtqueue *vq);
 void vp_del_vqs(struct virtio_device *vdev);
 /* the config->find_vqs() implementation */
 int vp_find_vqs(struct virtio_device *vdev, unsigned int nvqs,
-               struct virtqueue *vqs[], vq_callback_t *callbacks[],
-               const char * const names[], const bool *ctx,
+               struct virtqueue *vqs[],
+               struct virtio_queue_info vqs_info[],
                struct irq_affinity *desc);
 const char *vp_bus_name(struct virtio_device *vdev);
 
diff --git a/drivers/virtio/virtio_pci_legacy.c 
b/drivers/virtio/virtio_pci_legacy.c
index d9cbb02b35a1..a9786e38d763 100644
--- a/drivers/virtio/virtio_pci_legacy.c
+++ b/drivers/virtio/virtio_pci_legacy.c
@@ -192,7 +192,7 @@ static const struct virtio_config_ops virtio_pci_config_ops 
= {
        .get_status     = vp_get_status,
        .set_status     = vp_set_status,
        .reset          = vp_reset,
-       .find_vqs       = vp_find_vqs,
+       .find_vqs_info  = vp_find_vqs,
        .del_vqs        = vp_del_vqs,
        .synchronize_cbs = vp_synchronize_vectors,
        .get_features   = vp_get_features,
diff --git a/drivers/virtio/virtio_pci_modern.c 
b/drivers/virtio/virtio_pci_modern.c
index f62b530aa3b5..20933b9f2568 100644
--- a/drivers/virtio/virtio_pci_modern.c
+++ b/drivers/virtio/virtio_pci_modern.c
@@ -595,13 +595,12 @@ static struct virtqueue *setup_vq(struct 
virtio_pci_device *vp_dev,
 
 static int vp_modern_find_vqs(struct virtio_device *vdev, unsigned int nvqs,
                              struct virtqueue *vqs[],
-                             vq_callback_t *callbacks[],
-                             const char * const names[], const bool *ctx,
+                             struct virtio_queue_info vqs_info[],
                              struct irq_affinity *desc)
 {
        struct virtio_pci_device *vp_dev = to_vp_device(vdev);
        struct virtqueue *vq;
-       int rc = vp_find_vqs(vdev, nvqs, vqs, callbacks, names, ctx, desc);
+       int rc = vp_find_vqs(vdev, nvqs, vqs, vqs_info, desc);
 
        if (rc)
                return rc;
@@ -782,7 +781,7 @@ static const struct virtio_config_ops 
virtio_pci_config_nodev_ops = {
        .get_status     = vp_get_status,
        .set_status     = vp_set_status,
        .reset          = vp_reset,
-       .find_vqs       = vp_modern_find_vqs,
+       .find_vqs_info  = vp_modern_find_vqs,
        .del_vqs        = vp_del_vqs,
        .synchronize_cbs = vp_synchronize_vectors,
        .get_features   = vp_get_features,
@@ -804,7 +803,7 @@ static const struct virtio_config_ops virtio_pci_config_ops 
= {
        .get_status     = vp_get_status,
        .set_status     = vp_set_status,
        .reset          = vp_reset,
-       .find_vqs       = vp_modern_find_vqs,
+       .find_vqs_info  = vp_modern_find_vqs,
        .del_vqs        = vp_del_vqs,
        .synchronize_cbs = vp_synchronize_vectors,
        .get_features   = vp_get_features,
-- 
2.45.2


Reply via email to