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 Thu Mar 17 12:04:54 2005 @@ -140,10 +140,10 @@ static char *serial_revdate = "2001-07-0 /* Set of debugging defines */ -#undef SERIAL_DEBUG_INTR +#define SERIAL_DEBUG_INTR #undef SERIAL_DEBUG_OPEN #undef SERIAL_DEBUG_FLOW -#undef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT +#define SERIAL_DEBUG_RS_WAIT_UNTIL_SENT #undef SERIAL_DEBUG_PCI #undef SERIAL_DEBUG_AUTOCONF @@ -265,6 +265,10 @@ static int serial_refcount; static struct timer_list serial_timer; +extern pid_t watched_pid; +extern void dbg_addmsg(char *fmt, ...); +#define printk(...) dbg_addmsg(__VA_ARGS__) + /* serial subtype definitions */ #ifndef SERIAL_TYPE_NORMAL #define SERIAL_TYPE_NORMAL 1 @@ -927,7 +931,7 @@ static void rs_interrupt_single(int irq, ((iir & UART_IIR_ID) == UART_IIR_THRI)) transmit_chars(info, 0); if (pass_counter++ > RS_ISR_PASS_LIMIT) { -#if SERIAL_DEBUG_INTR +#ifdef SERIAL_DEBUG_INTR printk("rs_single loop break.\n"); #endif break; @@ -2942,12 +2946,12 @@ static void rs_wait_until_sent(struct tt if (!timeout || timeout > 2*info->timeout) timeout = 2*info->timeout; #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT - printk("In rs_wait_until_sent(%d) check=%lu...", timeout, char_time); - printk("jiff=%lu...", jiffies); + if (tty->driver.type != TTY_DRIVER_TYPE_PTY) printk("In rs_wait_until_sent(%d) check=%lu...", timeout, char_time); + if (tty->driver.type != TTY_DRIVER_TYPE_PTY) printk("jiff=%lu...", jiffies); #endif while (!((lsr = serial_inp(info, UART_LSR)) & UART_LSR_TEMT)) { #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT - printk("lsr = %d (jiff=%lu)...", lsr, jiffies); + if (tty->driver.type != TTY_DRIVER_TYPE_PTY) printk("lsr = %d (jiff=%lu)...", lsr, jiffies); #endif set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(char_time); @@ -2957,7 +2961,7 @@ static void rs_wait_until_sent(struct tt break; } #ifdef SERIAL_DEBUG_RS_WAIT_UNTIL_SENT - printk("lsr = %d (jiff=%lu)...done\n", lsr, jiffies); + if (tty->driver.type != TTY_DRIVER_TYPE_PTY) printk("lsr = %d (jiff=%lu)...done\n", lsr, jiffies); #endif } 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 Thu Mar 17 12:04:56 2005 @@ -25,7 +25,21 @@ #include #include -#undef TTY_DEBUG_WAIT_UNTIL_SENT +char dbg_msgbuf[1024*256] = { '\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); + if (dbg_msgcur >= (dbg_msgbuf + sizeof(dbg_msgbuf))) { + panic("debug message buffer overflow"); + } +} + + +#define TTY_DEBUG_WAIT_UNTIL_SENT +#define printk(...) dbg_addmsg(__VA_ARGS__) #undef DEBUG @@ -43,7 +57,7 @@ void tty_wait_until_sent(struct tty_stru #ifdef TTY_DEBUG_WAIT_UNTIL_SENT char buf[64]; - printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty, buf)); + if (tty->driver.type != TTY_DRIVER_TYPE_PTY) printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty, buf)); #endif if (!tty->driver.chars_in_buffer) return; @@ -52,16 +66,21 @@ void tty_wait_until_sent(struct tty_stru timeout = MAX_SCHEDULE_TIMEOUT; do { #ifdef TTY_DEBUG_WAIT_UNTIL_SENT - printk(KERN_DEBUG "waiting %s...(%d)\n", tty_name(tty, buf), + if (tty->driver.type != TTY_DRIVER_TYPE_PTY) printk(KERN_DEBUG "waiting %s...(%d)\n", tty_name(tty, buf), tty->driver.chars_in_buffer(tty)); #endif set_current_state(TASK_INTERRUPTIBLE); - if (signal_pending(current)) + if (signal_pending(current)) { + if (tty->driver.type != TTY_DRIVER_TYPE_PTY) printk(KERN_DEBUG "waiting on %s interrupted\n", tty_name(tty, buf)); goto stop_waiting; + } if (!tty->driver.chars_in_buffer(tty)) break; timeout = schedule_timeout(timeout); } while (timeout); +#ifdef TTY_DEBUG_WAIT_UNTIL_SENT + if (tty->driver.type != TTY_DRIVER_TYPE_PTY) printk("done waiting %s...(%d)\n", tty_name(tty, buf), tty->driver.chars_in_buffer(tty)); +#endif if (tty->driver.wait_until_sent) tty->driver.wait_until_sent(tty, timeout); stop_waiting: