xtensa: ISS: don't hang if stdin EOF is reached
Subsystems (2)
Max Filippov
maintainerPATCH 1/1 xtensa: ISS: don't hang if stdin EOF is reached
Simulator stdin may be connected to file, when its end is reached kernel hangs in infinite loop inside rs_poll, because simc_poll always signals that descriptor 0 is readable and simc_read always returns 0. Check simc_read return value and exit loop if it's not positive. Also don't rewind polling timer if it's zero.
Signed-off-by Max Filippov <[email protected]>
--- arch/xtensa/platforms/iss/console.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
arch/xtensa/platforms/iss/console.c +6 -4
@@ -100,21 +100,23 @@ static void rs_poll(unsigned long priv) {struct tty_port *port = (struct tty_port *)priv;int i =0 ; +int rd =1 ;unsigned char c;spin_lock (&timer_lock);while (simc_poll (0 )) { -simc_read (0 , &c,1 ); + rd =simc_read (0 , &c,1 ); +if (rd <=0 ) +break ;tty_insert_flip_char (port, c,TTY_NORMAL ); i++; }if (i)tty_flip_buffer_push (port); - - -mod_timer (&serial_timer, jiffies +SERIAL_TIMER_VALUE ); +if (rd) +mod_timer (&serial_timer, jiffies +SERIAL_TIMER_VALUE );spin_unlock (&timer_lock); }
Signature · 1 line
2.1.4