This workaround, though the original submitter doesn't think it does much, seems to at least prevent my machine from crashing...
diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c index 6d9e0b2..a4f4fa9 100644 --- a/drivers/tty/tty_port.c +++ b/drivers/tty/tty_port.c @@ -140,6 +140,10 @@ EXPORT_SYMBOL(tty_port_destroy); static void tty_port_destructor(struct kref *kref) { struct tty_port *port = container_of(kref, struct tty_port, kref); + + /* check if last port ref was dropped before tty release */ + if (WARN_ON(port->itty)) + return; if (port->xmit_buf) free_page((unsigned long)port->xmit_buf); tty_port_destroy(port);
So far the machine still oopses but no hang at least, bluetooth is completely hosed but it was already hosed anyway...
This workaround, though the original submitter doesn't think it does much, seems to at least prevent my machine from crashing...
diff --git a/drivers/ tty/tty_ port.c b/drivers/ tty/tty_ port.c tty/tty_ port.c tty/tty_ port.c SYMBOL( tty_port_ destroy) ; destructor( struct kref *kref) port->itty) ) page((unsigned long)port- >xmit_buf) ; port_destroy( port);
index 6d9e0b2..a4f4fa9 100644
--- a/drivers/
+++ b/drivers/
@@ -140,6 +140,10 @@ EXPORT_
static void tty_port_
{
struct tty_port *port = container_of(kref, struct tty_port, kref);
+
+ /* check if last port ref was dropped before tty release */
+ if (WARN_ON(
+ return;
if (port->xmit_buf)
free_
tty_
So far the machine still oopses but no hang at least, bluetooth is completely hosed but it was already hosed anyway...