UML - Work around host tcsetattr bug
PATCH 4/4 UML - Work around host tcsetattr bug
Under the conditions that UML uses it, tcgetattr is guaranteed to return -EINTR when the console is attached to /dev/ptmx, making generic_console_write hang because it loops, calling tcgetattr until it succeeds. This is a host bug - see
http://marc.info/?l=linux-kernel&m=119618990807182&w=2 for the details.
This patch works around it by blocking SIGIO while the terminal attributes are being fiddled.
--- arch/um/drivers/chan_user.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
arch/um/drivers/chan_user.c +10 -1
@@ -74,10 +74,16 @@ void generic_free(void *data)int generic_console_write (int fd,const char *buf,int n) { +sigset_t old, no_sigio;struct termios save, new;int err;if (isatty (fd)) { +sigemptyset (&no_sigio); +sigaddset (&no_sigio,SIGIO ); +if (sigprocmask (SIG_BLOCK , &no_sigio, &old)) + goto error; +CATCH_EINTR (err =tcgetattr (fd, &save));if (err) goto error;
@@ -97,8 +103,11 @@ int generic_console_write(int fd, const* Restore raw mode, in any case; we *must* ignore any error apart * EINTR, except for debug. */ -if (isatty (fd)) +if (isatty (fd)) {CATCH_EINTR (tcsetattr (fd,TCSAFLUSH , &save)); +sigprocmask (SIG_SETMASK , &old,NULL ); + } +return err; error:return -errno;
-------------------------------------------------------------------------
SF.Net email is sponsored by: The Future of Linux Business White Paper from Novell. From the desktop to the data center, Linux is going mainstream. Let it simplify your IT future.
http://altfarm.mediaplex.com/ad/ck/8857-50307-18918-4
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel