]> www.infradead.org Git - users/willy/xarray.git/commitdiff
virtio_pci: convert vp_*find_vqs() ops to find_vqs_info()
authorJiri Pirko <jiri@nvidia.com>
Mon, 8 Jul 2024 07:48:00 +0000 (09:48 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Wed, 17 Jul 2024 09:20:57 +0000 (05:20 -0400)
Convert existing vp_find_vqs() and vp_modern_find_vqs() implementations
to find_vqs_info() config op.

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

index f6b0b00e4599f4e2d88e8429212f6f62f265c660..7d82facafd75ee98f8867e4d8b16ad5052da4eb2 100644 (file)
@@ -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 virtqueue_info vqs_info[],
+                           bool per_vq_vectors,
+                           struct irq_affinity *desc)
 {
        struct virtio_pci_device *vp_dev = to_vp_device(vdev);
+       struct virtqueue_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,8 +364,8 @@ error_find:
 }
 
 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 virtqueue_info vqs_info[])
 {
        struct virtio_pci_device *vp_dev = to_vp_device(vdev);
        int i, err, queue_idx = 0;
@@ -379,12 +382,14 @@ 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]) {
+               struct virtqueue_info *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,24 @@ out_del_vqs:
 
 /* 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 virtqueue_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)
index 7fef52bee4557cc5cadf492ba6e49b76a00e3c3a..3c4bb2d6163a92f918923a8cef65a901fb3c7e1f 100644 (file)
@@ -127,8 +127,7 @@ 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 virtqueue_info vqs_info[],
                struct irq_affinity *desc);
 const char *vp_bus_name(struct virtio_device *vdev);
 
index d9cbb02b35a112e0940fa45999dd98261ba5e690..a9786e38d763520a7c8e7f404728b66582fb0c34 100644 (file)
@@ -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,
index f62b530aa3b5b0e6d555ffef8e39c7bd5fda63a5..adba4a29fdf4d99fa0698c4ffa5c26fe748f550e 100644 (file)
@@ -595,13 +595,12 @@ err:
 
 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 virtqueue_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,