Skip to content

Commit cd54c62

Browse files
Jiri Pirkomstsirkin
authored andcommitted
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: 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 0c60458 commit cd54c62

File tree

1 file changed

+18
-26
lines changed

1 file changed

+18
-26
lines changed

drivers/char/virtio_console.c

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1804,8 +1804,7 @@ static void config_work_handler(struct work_struct *work)
18041804

18051805
static int init_vqs(struct ports_device *portdev)
18061806
{
1807-
vq_callback_t **io_callbacks;
1808-
char **io_names;
1807+
struct virtqueue_info *vqs_info;
18091808
struct virtqueue **vqs;
18101809
u32 i, j, nr_ports, nr_queues;
18111810
int err;
@@ -1814,15 +1813,12 @@ static int init_vqs(struct ports_device *portdev)
18141813
nr_queues = use_multiport(portdev) ? (nr_ports + 1) * 2 : 2;
18151814

18161815
vqs = kmalloc_array(nr_queues, sizeof(struct virtqueue *), GFP_KERNEL);
1817-
io_callbacks = kmalloc_array(nr_queues, sizeof(vq_callback_t *),
1818-
GFP_KERNEL);
1819-
io_names = kmalloc_array(nr_queues, sizeof(char *), GFP_KERNEL);
1816+
vqs_info = kcalloc(nr_queues, sizeof(*vqs_info), GFP_KERNEL);
18201817
portdev->in_vqs = kmalloc_array(nr_ports, sizeof(struct virtqueue *),
18211818
GFP_KERNEL);
18221819
portdev->out_vqs = kmalloc_array(nr_ports, sizeof(struct virtqueue *),
18231820
GFP_KERNEL);
1824-
if (!vqs || !io_callbacks || !io_names || !portdev->in_vqs ||
1825-
!portdev->out_vqs) {
1821+
if (!vqs || !vqs_info || !portdev->in_vqs || !portdev->out_vqs) {
18261822
err = -ENOMEM;
18271823
goto free;
18281824
}
@@ -1833,30 +1829,28 @@ static int init_vqs(struct ports_device *portdev)
18331829
* 0 before others.
18341830
*/
18351831
j = 0;
1836-
io_callbacks[j] = in_intr;
1837-
io_callbacks[j + 1] = out_intr;
1838-
io_names[j] = "input";
1839-
io_names[j + 1] = "output";
1832+
vqs_info[j].callback = in_intr;
1833+
vqs_info[j + 1].callback = out_intr;
1834+
vqs_info[j].name = "input";
1835+
vqs_info[j + 1].name = "output";
18401836
j += 2;
18411837

18421838
if (use_multiport(portdev)) {
1843-
io_callbacks[j] = control_intr;
1844-
io_callbacks[j + 1] = NULL;
1845-
io_names[j] = "control-i";
1846-
io_names[j + 1] = "control-o";
1839+
vqs_info[j].callback = control_intr;
1840+
vqs_info[j].name = "control-i";
1841+
vqs_info[j + 1].name = "control-o";
18471842

18481843
for (i = 1; i < nr_ports; i++) {
18491844
j += 2;
1850-
io_callbacks[j] = in_intr;
1851-
io_callbacks[j + 1] = out_intr;
1852-
io_names[j] = "input";
1853-
io_names[j + 1] = "output";
1845+
vqs_info[j].callback = in_intr;
1846+
vqs_info[j + 1].callback = out_intr;
1847+
vqs_info[j].name = "input";
1848+
vqs_info[j + 1].name = "output";
18541849
}
18551850
}
18561851
/* Find the queues. */
1857-
err = virtio_find_vqs(portdev->vdev, nr_queues, vqs,
1858-
io_callbacks,
1859-
(const char **)io_names, NULL);
1852+
err = virtio_find_vqs_info(portdev->vdev, nr_queues, vqs,
1853+
vqs_info, NULL);
18601854
if (err)
18611855
goto free;
18621856

@@ -1874,17 +1868,15 @@ static int init_vqs(struct ports_device *portdev)
18741868
portdev->out_vqs[i] = vqs[j + 1];
18751869
}
18761870
}
1877-
kfree(io_names);
1878-
kfree(io_callbacks);
1871+
kfree(vqs_info);
18791872
kfree(vqs);
18801873

18811874
return 0;
18821875

18831876
free:
18841877
kfree(portdev->out_vqs);
18851878
kfree(portdev->in_vqs);
1886-
kfree(io_names);
1887-
kfree(io_callbacks);
1879+
kfree(vqs_info);
18881880
kfree(vqs);
18891881

18901882
return err;

0 commit comments

Comments
 (0)