aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/char/virtio_console.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index e8480fe2e1d8..21085515814f 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -2090,6 +2090,7 @@ static int virtcons_probe(struct virtio_device *vdev)
2090 2090
2091 spin_lock_init(&portdev->ports_lock); 2091 spin_lock_init(&portdev->ports_lock);
2092 INIT_LIST_HEAD(&portdev->ports); 2092 INIT_LIST_HEAD(&portdev->ports);
2093 INIT_LIST_HEAD(&portdev->list);
2093 2094
2094 virtio_device_ready(portdev->vdev); 2095 virtio_device_ready(portdev->vdev);
2095 2096
@@ -2107,8 +2108,15 @@ static int virtcons_probe(struct virtio_device *vdev)
2107 if (!nr_added_bufs) { 2108 if (!nr_added_bufs) {
2108 dev_err(&vdev->dev, 2109 dev_err(&vdev->dev,
2109 "Error allocating buffers for control queue\n"); 2110 "Error allocating buffers for control queue\n");
2110 err = -ENOMEM; 2111 /*
2111 goto free_vqs; 2112 * The host might want to notify mgmt sw about device
2113 * add failure.
2114 */
2115 __send_control_msg(portdev, VIRTIO_CONSOLE_BAD_ID,
2116 VIRTIO_CONSOLE_DEVICE_READY, 0);
2117 /* Device was functional: we need full cleanup. */
2118 virtcons_remove(vdev);
2119 return -ENOMEM;
2112 } 2120 }
2113 } else { 2121 } else {
2114 /* 2122 /*
@@ -2139,11 +2147,6 @@ static int virtcons_probe(struct virtio_device *vdev)
2139 2147
2140 return 0; 2148 return 0;
2141 2149
2142free_vqs:
2143 /* The host might want to notify mgmt sw about device add failure */
2144 __send_control_msg(portdev, VIRTIO_CONSOLE_BAD_ID,
2145 VIRTIO_CONSOLE_DEVICE_READY, 0);
2146 remove_vqs(portdev);
2147free_chrdev: 2150free_chrdev:
2148 unregister_chrdev(portdev->chr_major, "virtio-portsdev"); 2151 unregister_chrdev(portdev->chr_major, "virtio-portsdev");
2149free: 2152free: