if (unlikely(ch & UART_ANY_ERR)) goto handle_error; 
if (unlikely(ch & UART_ANY_ERR)) { if (ch & UARTDR_PARERR) port->icount.parity++; else if (ch & UARTDR_FRMERR) port->icount.frame++; if (ch & UARTDR_OVERR) port->icount.overrun++;  ch &= port->read_status_mask;  if (ch & UARTDR_PARERR) flg = TTY_PARITY; else if (ch & UARTDR_FRMERR) flg = TTY_FRAME;  #ifdef SUPPORT_SYSRQ port->sysrq = 0; #endif } 
static irqreturn_t clps711xuart_int_rx(int irq, void *dev_id, struct pt_regs *regs){	struct uart_port *port = dev_id;	struct tty_struct *tty = port->info->tty;	unsigned int status, ch, flg, ignored = 0;	status = clps_readl(SYSFLG(port));	while (!(status & SYSFLG_URXFE)) {		ch = clps_readl(UARTDR(port));		if (tty->flip.count >= TTY_FLIPBUF_SIZE)			goto ignore_char;		port->icount.rx++;		flg = TTY_NORMAL;		/*		 * Note that the error handling code is		 * out of the main execution path		 */		if (unlikely(ch & UART_ANY_ERR))			goto handle_error;		if (uart_handle_sysrq_char(port, ch, regs))			goto ignore_char;	error_return:		tty_insert_flip_char(tty, ch, flg);	ignore_char:		status = clps_readl(SYSFLG(port));	} out:	tty_flip_buffer_push(tty);	return IRQ_HANDLED; handle_error:	if (ch & UARTDR_PARERR)		port->icount.parity++;	else if (ch & UARTDR_FRMERR)		port->icount.frame++;	if (ch & UARTDR_OVERR)		port->icount.overrun++;	if (ch & port->ignore_status_mask) {		if (++ignored > 100)			goto out;		goto ignore_char;	}	ch &= port->read_status_mask;	if (ch & UARTDR_PARERR)		flg = TTY_PARITY;	else if (ch & UARTDR_FRMERR)		flg = TTY_FRAME;	if (ch & UARTDR_OVERR) {		/*		 * CHECK: does overrun affect the current character?		 * ASSUMPTION: it does not.		 */		tty_insert_flip_char(tty, ch, flg);		ch = 0;		flg = TTY_OVERRUN;	}#ifdef SUPPORT_SYSRQ	port->sysrq = 0;#endif	goto error_return;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/2a9604b863c854e5bee409157aabb35b6ce8ecd3/clps711x.c/buggy/drivers/serial/clps711x.c