Commit cd54c623 authored by Jiri Pirko's avatar Jiri Pirko Committed by Michael S. Tsirkin

virtio_console: 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: default avatarXuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: default avatarJiri Pirko <jiri@nvidia.com>
Message-Id: <20240708074814.1739223-12-jiri@resnulli.us>
Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 0c60458b
...@@ -1804,8 +1804,7 @@ static void config_work_handler(struct work_struct *work) ...@@ -1804,8 +1804,7 @@ static void config_work_handler(struct work_struct *work)
static int init_vqs(struct ports_device *portdev) static int init_vqs(struct ports_device *portdev)
{ {
vq_callback_t **io_callbacks; struct virtqueue_info *vqs_info;
char **io_names;
struct virtqueue **vqs; struct virtqueue **vqs;
u32 i, j, nr_ports, nr_queues; u32 i, j, nr_ports, nr_queues;
int err; int err;
...@@ -1814,15 +1813,12 @@ static int init_vqs(struct ports_device *portdev) ...@@ -1814,15 +1813,12 @@ static int init_vqs(struct ports_device *portdev)
nr_queues = use_multiport(portdev) ? (nr_ports + 1) * 2 : 2; nr_queues = use_multiport(portdev) ? (nr_ports + 1) * 2 : 2;
vqs = kmalloc_array(nr_queues, sizeof(struct virtqueue *), GFP_KERNEL); vqs = kmalloc_array(nr_queues, sizeof(struct virtqueue *), GFP_KERNEL);
io_callbacks = kmalloc_array(nr_queues, sizeof(vq_callback_t *), vqs_info = kcalloc(nr_queues, sizeof(*vqs_info), GFP_KERNEL);
GFP_KERNEL);
io_names = kmalloc_array(nr_queues, sizeof(char *), GFP_KERNEL);
portdev->in_vqs = kmalloc_array(nr_ports, sizeof(struct virtqueue *), portdev->in_vqs = kmalloc_array(nr_ports, sizeof(struct virtqueue *),
GFP_KERNEL); GFP_KERNEL);
portdev->out_vqs = kmalloc_array(nr_ports, sizeof(struct virtqueue *), portdev->out_vqs = kmalloc_array(nr_ports, sizeof(struct virtqueue *),
GFP_KERNEL); GFP_KERNEL);
if (!vqs || !io_callbacks || !io_names || !portdev->in_vqs || if (!vqs || !vqs_info || !portdev->in_vqs || !portdev->out_vqs) {
!portdev->out_vqs) {
err = -ENOMEM; err = -ENOMEM;
goto free; goto free;
} }
...@@ -1833,30 +1829,28 @@ static int init_vqs(struct ports_device *portdev) ...@@ -1833,30 +1829,28 @@ static int init_vqs(struct ports_device *portdev)
* 0 before others. * 0 before others.
*/ */
j = 0; j = 0;
io_callbacks[j] = in_intr; vqs_info[j].callback = in_intr;
io_callbacks[j + 1] = out_intr; vqs_info[j + 1].callback = out_intr;
io_names[j] = "input"; vqs_info[j].name = "input";
io_names[j + 1] = "output"; vqs_info[j + 1].name = "output";
j += 2; j += 2;
if (use_multiport(portdev)) { if (use_multiport(portdev)) {
io_callbacks[j] = control_intr; vqs_info[j].callback = control_intr;
io_callbacks[j + 1] = NULL; vqs_info[j].name = "control-i";
io_names[j] = "control-i"; vqs_info[j + 1].name = "control-o";
io_names[j + 1] = "control-o";
for (i = 1; i < nr_ports; i++) { for (i = 1; i < nr_ports; i++) {
j += 2; j += 2;
io_callbacks[j] = in_intr; vqs_info[j].callback = in_intr;
io_callbacks[j + 1] = out_intr; vqs_info[j + 1].callback = out_intr;
io_names[j] = "input"; vqs_info[j].name = "input";
io_names[j + 1] = "output"; vqs_info[j + 1].name = "output";
} }
} }
/* Find the queues. */ /* Find the queues. */
err = virtio_find_vqs(portdev->vdev, nr_queues, vqs, err = virtio_find_vqs_info(portdev->vdev, nr_queues, vqs,
io_callbacks, vqs_info, NULL);
(const char **)io_names, NULL);
if (err) if (err)
goto free; goto free;
...@@ -1874,8 +1868,7 @@ static int init_vqs(struct ports_device *portdev) ...@@ -1874,8 +1868,7 @@ static int init_vqs(struct ports_device *portdev)
portdev->out_vqs[i] = vqs[j + 1]; portdev->out_vqs[i] = vqs[j + 1];
} }
} }
kfree(io_names); kfree(vqs_info);
kfree(io_callbacks);
kfree(vqs); kfree(vqs);
return 0; return 0;
...@@ -1883,8 +1876,7 @@ static int init_vqs(struct ports_device *portdev) ...@@ -1883,8 +1876,7 @@ static int init_vqs(struct ports_device *portdev)
free: free:
kfree(portdev->out_vqs); kfree(portdev->out_vqs);
kfree(portdev->in_vqs); kfree(portdev->in_vqs);
kfree(io_names); kfree(vqs_info);
kfree(io_callbacks);
kfree(vqs); kfree(vqs);
return err; return err;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment