Skip to content

Commit a6da214

Browse files
Jiri Pirkomstsirkin
authored andcommitted
scsi: virtio_scsi: convert to use virtio_find_vqs_info()
Instead of passing separate names and callbacks arrays to virtio_find_vqs(), allocate one of virtual_queue_info structs and pass it to virtio_find_vqs_info(). Suggested-by: Xuan Zhuo <[email protected]> Signed-off-by: Jiri Pirko <[email protected]> Message-Id: <[email protected]> Signed-off-by: Michael S. Tsirkin <[email protected]>
1 parent c2c6325 commit a6da214

File tree

1 file changed

+13
-19
lines changed

1 file changed

+13
-19
lines changed

drivers/scsi/virtio_scsi.c

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -841,19 +841,16 @@ static int virtscsi_init(struct virtio_device *vdev,
841841
int err;
842842
u32 i;
843843
u32 num_vqs, num_poll_vqs, num_req_vqs;
844-
vq_callback_t **callbacks;
845-
const char **names;
844+
struct virtqueue_info *vqs_info;
846845
struct virtqueue **vqs;
847846
struct irq_affinity desc = { .pre_vectors = 2 };
848847

849848
num_req_vqs = vscsi->num_queues;
850849
num_vqs = num_req_vqs + VIRTIO_SCSI_VQ_BASE;
851850
vqs = kmalloc_array(num_vqs, sizeof(struct virtqueue *), GFP_KERNEL);
852-
callbacks = kmalloc_array(num_vqs, sizeof(vq_callback_t *),
853-
GFP_KERNEL);
854-
names = kmalloc_array(num_vqs, sizeof(char *), GFP_KERNEL);
851+
vqs_info = kcalloc(num_vqs, sizeof(*vqs_info), GFP_KERNEL);
855852

856-
if (!callbacks || !vqs || !names) {
853+
if (!vqs || !vqs_info) {
857854
err = -ENOMEM;
858855
goto out;
859856
}
@@ -869,22 +866,20 @@ static int virtscsi_init(struct virtio_device *vdev,
869866
vscsi->io_queues[HCTX_TYPE_READ],
870867
vscsi->io_queues[HCTX_TYPE_POLL]);
871868

872-
callbacks[0] = virtscsi_ctrl_done;
873-
callbacks[1] = virtscsi_event_done;
874-
names[0] = "control";
875-
names[1] = "event";
869+
vqs_info[0].callback = virtscsi_ctrl_done;
870+
vqs_info[0].name = "control";
871+
vqs_info[1].callback = virtscsi_event_done;
872+
vqs_info[1].name = "event";
876873
for (i = VIRTIO_SCSI_VQ_BASE; i < num_vqs - num_poll_vqs; i++) {
877-
callbacks[i] = virtscsi_req_done;
878-
names[i] = "request";
874+
vqs_info[i].callback = virtscsi_req_done;
875+
vqs_info[i].name = "request";
879876
}
880877

881-
for (; i < num_vqs; i++) {
882-
callbacks[i] = NULL;
883-
names[i] = "request_poll";
884-
}
878+
for (; i < num_vqs; i++)
879+
vqs_info[i].name = "request_poll";
885880

886881
/* Discover virtqueues and write information to configuration. */
887-
err = virtio_find_vqs(vdev, num_vqs, vqs, callbacks, names, &desc);
882+
err = virtio_find_vqs_info(vdev, num_vqs, vqs, vqs_info, &desc);
888883
if (err)
889884
goto out;
890885

@@ -900,8 +895,7 @@ static int virtscsi_init(struct virtio_device *vdev,
900895
err = 0;
901896

902897
out:
903-
kfree(names);
904-
kfree(callbacks);
898+
kfree(vqs_info);
905899
kfree(vqs);
906900
if (err)
907901
virtscsi_remove_vqs(vdev);

0 commit comments

Comments
 (0)