diff options
author | Amit Shah <amit.shah@redhat.com> | 2010-05-20 00:15:47 -0400 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2010-05-19 08:45:48 -0400 |
commit | 69eb9a9f69572c0ebe08a0a46f56bdfdcdaa19a0 (patch) | |
tree | 703a249a72b7f7a9bd53cf769b519701e39d9cbe /drivers/char/virtio_console.c | |
parent | 6dc69f970231387d8fe646a831920da26408b5f5 (diff) |
virtio: console: Don't call hvc_remove() on unplugging console ports
hvc_remove() has some bug which freezes other active hvc ports when one
port is removed.
So disable calling of hvc_remove() which deregisters a port with the
hvc_console.
If the hvc_console code calls into our get_chars() routine as a result
of a poll operation, we will return -EPIPE and the hvc_console code will
then do the necessary cleanup.
This call will be restored when the bug in hvc_remove() is found and
fixed.
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.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c index 11a9573f901e..9a698707e14b 100644 --- a/drivers/char/virtio_console.c +++ b/drivers/char/virtio_console.c | |||
@@ -869,7 +869,18 @@ static int remove_port(struct port *port) | |||
869 | spin_lock_irq(&pdrvdata_lock); | 869 | spin_lock_irq(&pdrvdata_lock); |
870 | list_del(&port->cons.list); | 870 | list_del(&port->cons.list); |
871 | spin_unlock_irq(&pdrvdata_lock); | 871 | spin_unlock_irq(&pdrvdata_lock); |
872 | #if 0 | ||
873 | /* | ||
874 | * hvc_remove() not called as removing one hvc port | ||
875 | * results in other hvc ports getting frozen. | ||
876 | * | ||
877 | * Once this is resolved in hvc, this functionality | ||
878 | * will be enabled. Till that is done, the -EPIPE | ||
879 | * return from get_chars() above will help | ||
880 | * hvc_console.c to clean up on ports we remove here. | ||
881 | */ | ||
872 | hvc_remove(port->cons.hvc); | 882 | hvc_remove(port->cons.hvc); |
883 | #endif | ||
873 | } | 884 | } |
874 | if (port->guest_connected) | 885 | if (port->guest_connected) |
875 | send_control_msg(port, VIRTIO_CONSOLE_PORT_OPEN, 0); | 886 | send_control_msg(port, VIRTIO_CONSOLE_PORT_OPEN, 0); |