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);
|