aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/virtio_console.c
diff options
context:
space:
mode:
authorAmit Shah <amit.shah@redhat.com>2010-05-20 00:15:49 -0400
committerRusty Russell <rusty@rustcorp.com.au>2010-05-19 08:45:49 -0400
commit1d05160be743c506b1d6926e7c637496fa750cd3 (patch)
treedd4d366c0a6cbdef3f5747f104c515d558d00f55 /drivers/char/virtio_console.c
parentf909f850d666e3dbac1ee7c9d5d83416bd02f84e (diff)
virtio: console: Don't always create a port 0 if using multiport
If we're using multiport, there's no point in always creating a console port. Create the console port only if the host doesn't support multiport. Signed-off-by: Amit Shah <amit.shah@redhat.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'drivers/char/virtio_console.c')
-rw-r--r--drivers/char/virtio_console.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index 7671914be17..6207e372992 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -784,6 +784,13 @@ int init_port_console(struct port *port)
784 spin_unlock_irq(&pdrvdata_lock); 784 spin_unlock_irq(&pdrvdata_lock);
785 port->guest_connected = true; 785 port->guest_connected = true;
786 786
787 /*
788 * Start using the new console output if this is the first
789 * console to come up.
790 */
791 if (early_put_chars)
792 early_put_chars = NULL;
793
787 /* Notify host of port being opened */ 794 /* Notify host of port being opened */
788 send_control_msg(port, VIRTIO_CONSOLE_PORT_OPEN, 1); 795 send_control_msg(port, VIRTIO_CONSOLE_PORT_OPEN, 1);
789 796
@@ -1058,14 +1065,8 @@ static void handle_control_message(struct ports_device *portdev,
1058 switch (cpkt->event) { 1065 switch (cpkt->event) {
1059 case VIRTIO_CONSOLE_PORT_ADD: 1066 case VIRTIO_CONSOLE_PORT_ADD:
1060 if (port) { 1067 if (port) {
1061 /* 1068 dev_dbg(&portdev->vdev->dev,
1062 * This can happen for port 0: we have to 1069 "Port %u already added\n", port->id);
1063 * create a console port during probe() as was
1064 * the behaviour before the MULTIPORT feature.
1065 * On a newer host, when the host tells us
1066 * that a port 0 is available, we should just
1067 * say we have the port all set up.
1068 */
1069 send_control_msg(port, VIRTIO_CONSOLE_PORT_READY, 1); 1070 send_control_msg(port, VIRTIO_CONSOLE_PORT_READY, 1);
1070 break; 1071 break;
1071 } 1072 }
@@ -1409,17 +1410,14 @@ static int __devinit virtcons_probe(struct virtio_device *vdev)
1409 err = -ENOMEM; 1410 err = -ENOMEM;
1410 goto free_vqs; 1411 goto free_vqs;
1411 } 1412 }
1413 } else {
1414 /*
1415 * For backward compatibility: Create a console port
1416 * if we're running on older host.
1417 */
1418 add_port(portdev, 0);
1412 } 1419 }
1413 1420
1414 /*
1415 * For backward compatibility: if we're running on an older
1416 * host, we always want to create a console port.
1417 */
1418 add_port(portdev, 0);
1419
1420 /* Start using the new console output. */
1421 early_put_chars = NULL;
1422
1423 __send_control_msg(portdev, VIRTIO_CONSOLE_BAD_ID, 1421 __send_control_msg(portdev, VIRTIO_CONSOLE_BAD_ID,
1424 VIRTIO_CONSOLE_DEVICE_READY, 1); 1422 VIRTIO_CONSOLE_DEVICE_READY, 1);
1425 return 0; 1423 return 0;