diff -rup --exclude '*SCCS*' --exclude BitKeeper linux.orig/drivers/char/serial.c linux/drivers/char/serial.c --- linux.orig/drivers/char/serial.c Wed Mar 9 17:47:18 2005 +++ linux/drivers/char/serial.c Wed Mar 9 16:40:09 2005 @@ -265,6 +265,9 @@ static int serial_refcount; static struct timer_list serial_timer; +extern pid_t watched_pid; +extern void dbg_addmsg(char *fmt, ...); + /* serial subtype definitions */ #ifndef SERIAL_TYPE_NORMAL #define SERIAL_TYPE_NORMAL 1 @@ -2945,10 +2948,13 @@ static void rs_wait_until_sent(struct tt printk("In rs_wait_until_sent(%d) check=%lu...", timeout, char_time); printk("jiff=%lu...", jiffies); #endif + dbg_addmsg("In rs_wait_until_sent(%d) check=%lu...", timeout, char_time); + dbg_addmsg("jiff=%lu...", jiffies); while (!((lsr = serial_inp(info, UART_LSR)) & UART_LSR_TEMT)) { #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT printk("lsr = %d (jiff=%lu)...", lsr, jiffies); #endif + dbg_addmsg("lsr = %d (jiff=%lu)...", lsr, jiffies); set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(char_time); if (signal_pending(current)) @@ -2959,6 +2965,7 @@ static void rs_wait_until_sent(struct tt #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT printk("lsr = %d (jiff=%lu)...done\n", lsr, jiffies); #endif + dbg_addmsg("lsr = %d (jiff=%lu)...done\n", lsr, jiffies); } /* diff -rup --exclude '*SCCS*' --exclude BitKeeper linux.orig/drivers/char/tty_ioctl.c linux/drivers/char/tty_ioctl.c --- linux.orig/drivers/char/tty_ioctl.c Wed Mar 9 17:47:18 2005 +++ linux/drivers/char/tty_ioctl.c Wed Mar 9 17:15:31 2005 @@ -25,6 +25,16 @@ #include #include +char dbg_msgbuf[1024*128] = { '\0' }; +char *dbg_msgcur = dbg_msgbuf; +void dbg_addmsg(char *fmt, ...) { + va_list args; + va_start(args, fmt); + dbg_msgcur += vsprintf(dbg_msgcur, fmt, args); + va_end(args); +} + + #undef TTY_DEBUG_WAIT_UNTIL_SENT #undef DEBUG @@ -40,11 +50,12 @@ void tty_wait_until_sent(struct tty_stru { DECLARE_WAITQUEUE(wait, current); -#ifdef TTY_DEBUG_WAIT_UNTIL_SENT char buf[64]; +#ifdef TTY_DEBUG_WAIT_UNTIL_SENT printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty, buf)); #endif + dbg_addmsg("%s wait until sent...\n", tty_name(tty, buf)); if (!tty->driver.chars_in_buffer) return; add_wait_queue(&tty->write_wait, &wait); @@ -55,13 +66,19 @@ void tty_wait_until_sent(struct tty_stru printk(KERN_DEBUG "waiting %s...(%d)\n", tty_name(tty, buf), tty->driver.chars_in_buffer(tty)); #endif + dbg_addmsg("waiting %s...(%d)\n", tty_name(tty, buf), + tty->driver.chars_in_buffer(tty)); set_current_state(TASK_INTERRUPTIBLE); - if (signal_pending(current)) + if (signal_pending(current)) { + dbg_addmsg("interrupted\n"); goto stop_waiting; + } if (!tty->driver.chars_in_buffer(tty)) break; timeout = schedule_timeout(timeout); } while (timeout); + dbg_addmsg("done waiting %s...(%d)\n", tty_name(tty, buf), + tty->driver.chars_in_buffer(tty)); if (tty->driver.wait_until_sent) tty->driver.wait_until_sent(tty, timeout); stop_waiting: