From: Albert H. <he...@us...> - 2008-03-04 06:11:20
|
Update of /cvsroot/gc-linux/linux/drivers/serial In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv3705 Modified Files: usbgecko.c Log Message: Added informer to detect remove-while-in-use condition. Index: usbgecko.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/serial/usbgecko.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- usbgecko.c 24 Feb 2008 18:08:15 -0000 1.1 +++ usbgecko.c 4 Mar 2008 06:11:22 -0000 1.2 @@ -261,8 +261,11 @@ struct ug_adapter *adapter = co->data; char *b = (char *)buf; - while(count--) + while(count--) { + if (*b == '\n') + ug_safe_putc(adapter, '\r'); ug_safe_putc(adapter, *b++); + } } /* @@ -320,9 +323,9 @@ static int ug_tty_poller(void *tty_) { - struct tty_struct *tty = tty_; - struct ug_adapter *adapter = tty->driver_data; struct sched_param param = { .sched_priority = 1 }; + struct tty_struct *tty = tty_; + struct ug_adapter *adapter; int count; char ch; @@ -330,13 +333,15 @@ set_task_state(current, TASK_RUNNING); while(!kthread_should_stop()) { - count = ug_safe_getc(adapter, &ch); + count = 0; + adapter = tty->driver_data; + if (adapter) + count = ug_safe_getc(adapter, &ch); set_task_state(current, TASK_INTERRUPTIBLE); if (count) { tty_insert_flip_char(tty, ch, TTY_NORMAL); tty_flip_buffer_push(tty); } - schedule_timeout(1); set_task_state(current, TASK_RUNNING); } @@ -527,6 +532,10 @@ console = &ug_consoles[slot]; adapter = console->data; + if (adapter->refcnt) { + ug_printk(KERN_ERR, "adapter removed while in use!\n"); + } + ug_tty_exit(); unregister_console(console); |