spin_lock(&up->port.lock); 
receive_chars(struct uart_txx9_port *up, unsigned int *status, struct pt_regs *regs){	struct tty_struct *tty = up->port.info->tty;	unsigned char ch;	unsigned int disr = *status;	int max_count = 256;	char flag;	do {		/* The following is not allowed by the tty layer and		   unsafe. It should be fixed ASAP */		if (unlikely(tty->flip.count >= TTY_FLIPBUF_SIZE)) {			if(tty->low_latency)				tty_flip_buffer_push(tty);			/* If this failed then we will throw away the			   bytes but must do so to clear interrupts */		}		ch = sio_in(up, TXX9_SIRFIFO);		flag = TTY_NORMAL;		up->port.icount.rx++;		if (unlikely(disr & (TXX9_SIDISR_UBRK | TXX9_SIDISR_UPER |				     TXX9_SIDISR_UFER | TXX9_SIDISR_UOER))) {			/*			 * For statistics only			 */			if (disr & TXX9_SIDISR_UBRK) {				disr &= ~(TXX9_SIDISR_UFER | TXX9_SIDISR_UPER);				up->port.icount.brk++;				/*				 * We do the SysRQ and SAK checking				 * here because otherwise the break				 * may get masked by ignore_status_mask				 * or read_status_mask.				 */				if (uart_handle_break(&up->port))					goto ignore_char;			} else if (disr & TXX9_SIDISR_UPER)				up->port.icount.parity++;			else if (disr & TXX9_SIDISR_UFER)				up->port.icount.frame++;			if (disr & TXX9_SIDISR_UOER)				up->port.icount.overrun++;			/*			 * Mask off conditions which should be ingored.			 */			disr &= up->port.read_status_mask;			if (disr & TXX9_SIDISR_UBRK) {				flag = TTY_BREAK;			} else if (disr & TXX9_SIDISR_UPER)				flag = TTY_PARITY;			else if (disr & TXX9_SIDISR_UFER)				flag = TTY_FRAME;		}		if (uart_handle_sysrq_char(&up->port, ch, regs))			goto ignore_char;		uart_insert_char(&up->port, disr, TXX9_SIDISR_UOER, ch, flag);	ignore_char:		disr = sio_in(up, TXX9_SIDISR);	} while (!(disr & TXX9_SIDISR_UVALID) && (max_count-- > 0));	tty_flip_buffer_push(tty);	*status = disr;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/f5ee56cc184e0944ebc9ff1691985219959596f6/serial_txx9.c/clean/drivers/serial/serial_txx9.c