On Wed, 12 Apr 2006, Greg KH wrote:

> So, care to break the patches out into different parts so I can apply
> them?

Ok, below is #1. #2, 3, and 4 will follow.

Tnanks
Guennadi
---
Guennadi Liakhovetski

Prevent sending further output to a USB-serial console after the dongle is
disconnected.

Signed-off-by: Guennadi Liakhovetski <[EMAIL PROTECTED]>

diff -u a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c
--- a/drivers/usb/serial/console.c      13 Jan 2005 21:09:08 -0000
+++ b/drivers/usb/serial/console.c      11 Apr 2006 18:03:29 -0000
@@ -202,7 +202,7 @@
        struct usb_serial *serial;
        int retval = -ENODEV;
 
-       if (!port)
+       if (!port || port->serial->dev->state == USB_STATE_NOTATTACHED)
                return;
        serial = port->serial;
 
@@ -234,6 +234,14 @@
        .index =        -1,
 };
 
+void usb_serial_console_disconnect(struct usb_serial *serial)
+{
+       if (serial && serial->port && serial->port[0] && serial->port[0] == 
usbcons_info.port) {
+               usbcons_info.port->open_count--;
+               usbcons_info.port = NULL;
+       }
+}
+
 void usb_serial_console_init (int serial_debug, int minor)
 {
        debug = serial_debug;
diff -u a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c
--- a/drivers/usb/serial/usb-serial.c   30 Mar 2006 19:18:07 -0000
+++ b/drivers/usb/serial/usb-serial.c   11 Apr 2006 18:02:12 -0000
@@ -271,7 +271,7 @@
        struct usb_serial_port *port = tty->driver_data;
        int retval = -EINVAL;
 
-       if (!port)
+       if (!port || port->serial->dev->state == USB_STATE_NOTATTACHED)
                goto exit;
 
        dbg("%s - port %d, %d byte(s)", __FUNCTION__, port->number, count);
@@ -982,6 +982,7 @@
        struct device *dev = &interface->dev;
        struct usb_serial_port *port;
 
+       usb_serial_console_disconnect(serial);
        dbg ("%s", __FUNCTION__);
 
        usb_set_intfdata (interface, NULL);
diff -u a/drivers/usb/serial/usb-serial.h b/drivers/usb/serial/usb-serial.h
--- a/drivers/usb/serial/usb-serial.h   30 Mar 2006 19:18:07 -0000
+++ b/drivers/usb/serial/usb-serial.h   11 Apr 2006 18:02:12 -0000
@@ -248,9 +248,11 @@
 #ifdef CONFIG_USB_SERIAL_CONSOLE
 extern void usb_serial_console_init (int debug, int minor);
 extern void usb_serial_console_exit (void);
+extern void usb_serial_console_disconnect(struct usb_serial *serial);
 #else
 static inline void usb_serial_console_init (int debug, int minor) { }
 static inline void usb_serial_console_exit (void) { }
+static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
 #endif
 
 /* Functions needed by other parts of the usbserial core */


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to