Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69eb9a9f authored by Amit Shah's avatar Amit Shah Committed by Rusty Russell
Browse files

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: default avatarAmit Shah <amit.shah@redhat.com>
Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 6dc69f97
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -869,7 +869,18 @@ static int remove_port(struct port *port)
		spin_lock_irq(&pdrvdata_lock);
		spin_lock_irq(&pdrvdata_lock);
		list_del(&port->cons.list);
		list_del(&port->cons.list);
		spin_unlock_irq(&pdrvdata_lock);
		spin_unlock_irq(&pdrvdata_lock);
#if 0
		/*
		 * hvc_remove() not called as removing one hvc port
		 * results in other hvc ports getting frozen.
		 *
		 * Once this is resolved in hvc, this functionality
		 * will be enabled.  Till that is done, the -EPIPE
		 * return from get_chars() above will help
		 * hvc_console.c to clean up on ports we remove here.
		 */
		hvc_remove(port->cons.hvc);
		hvc_remove(port->cons.hvc);
#endif
	}
	}
	if (port->guest_connected)
	if (port->guest_connected)
		send_control_msg(port, VIRTIO_CONSOLE_PORT_OPEN, 0);
		send_control_msg(port, VIRTIO_CONSOLE_PORT_OPEN, 0);