UML - Move SIGIO testing to sigio.c
PATCH 2/7 UML - Move SIGIO testing to sigio.c
This patch narrows the sigio interface. The boot-time SIGIO testing used to be in start_up.c, which meant that pty_output_sigio and pty_close_sigio needed to be global. By moving that code here, those can become static and the declarations moved from user_util.h.
os_check_bugs is also here because it only does the SIGIO checking. If it does more, it'll probably move back to start_up.c.
--
arch/um/include/user_util.h | 3 arch/um/os-Linux/sigio.c | 145 ++++++++++++++++++++++++++++++++++++++++++++ arch/um/os-Linux/start_up.c | 145 -------------------------------------------- 3 files changed, 145 insertions(+), 148 deletions(-)
arch/um/os-Linux/start_up.c +0 -145
@@ -553,148 +553,3 @@ int __init parse_iomem(char *str, int *a out:return 1 ; } - - -/* Changed during early boot */ -int pty_output_sigio =0 ; -int pty_close_sigio =0 ; - -/* Used as a flag during SIGIO testing early in boot */ -static volatile int got_sigio =0 ; - -static void __init handler (int sig) -{ - got_sigio =1 ; -} - -struct openpty_arg { -int master; -int slave; -int err; -}; - -static void openpty_cb (void *arg) -{ -struct openpty_arg *info = arg; - - info->err =0 ; -if (openpty (&info->master, &info->slave,NULL ,NULL ,NULL )) - info->err = -errno; -} - -static int async_pty (int master,int slave) -{ -int flags; - - flags =fcntl (master,F_GETFL ); -if (flags <0 ) -return -errno; - -if ((fcntl (master,F_SETFL , flags |O_NONBLOCK |O_ASYNC ) <0 ) || - (fcntl (master,F_SETOWN ,os_getpid ()) <0 )) -return -errno; - -if ((fcntl (slave,F_SETFL , flags |O_NONBLOCK ) <0 )) -return -errno; - -return (0 ); -} - -static void __init check_one_sigio (void (*proc)(int ,int )) -{ -struct sigaction old, new; -struct openpty_arg pty = { .master =-1 , .slave =-1 }; -int master, slave, err; - -initial_thread_cb (openpty_cb, &pty); -if (pty.err){ -printk ("openpty failed, errno = %d\n" , -pty.err); -return ; - } - - master = pty.master; - slave = pty.slave; - -if ((master ==-1 ) || (slave ==-1 )){ -printk ("openpty failed to allocate a pty\n" ); -return ; - } - -/* Not now, but complain so we now where we failed. */ - err =raw (master); -if (err <0 ) -panic ("check_sigio : __raw failed, errno = %d\n" , -err); - - err =async_pty (master, slave); -if (err <0 ) -panic ("tty_fds : sigio_async failed, err = %d\n" , -err); - -if (sigaction (SIGIO ,NULL , &old) <0 ) -panic ("check_sigio : sigaction 1 failed, errno = %d\n" , errno); - new = old; - new.sa_handler = handler; -if (sigaction (SIGIO , &new,NULL ) <0 ) -panic ("check_sigio : sigaction 2 failed, errno = %d\n" , errno); - - got_sigio =0 ; - (*proc)(master, slave); - -close (master); -close (slave); - -if (sigaction (SIGIO , &old,NULL ) <0 ) -panic ("check_sigio : sigaction 3 failed, errno = %d\n" , errno); -} - -static void tty_output (int master,int slave) -{ -int n; -char buf[512 ]; - -printk ("Checking that host ptys support output SIGIO..." ); - -memset (buf,0 ,sizeof (buf)); - -while (os_write_file (master, buf,sizeof (buf)) >0 ) ; -if (errno !=EAGAIN ) -panic ("check_sigio : write failed, errno = %d\n" , errno); -while (((n =os_read_file (slave, buf,sizeof (buf))) >0 ) && !got_sigio) ; - -if (got_sigio){ -printk ("Yes\n" ); - pty_output_sigio =1 ; - } -else if (n == -EAGAIN )printk ("No, enabling workaround\n" ); -else panic ("check_sigio : read failed, err = %d\n" , n); -} - -static void tty_close (int master,int slave) -{ -printk ("Checking that host ptys support SIGIO on close..." ); - -close (slave); -if (got_sigio){ -printk ("Yes\n" ); - pty_close_sigio =1 ; - } -else printk ("No, enabling workaround\n" ); -} - -void __init check_sigio (void ) -{ -if ((os_access ("/dev/ptmx" ,OS_ACC_R_OK ) <0 ) && - (os_access ("/dev/ptyp0" ,OS_ACC_R_OK ) <0 )){ -printk ("No pseudo-terminals available - skipping pty SIGIO " -"check\n" ); -return ; - } -check_one_sigio (tty_output); -check_one_sigio (tty_close); -} - -void os_check_bugs (void ) -{ -check_ptrace (); -check_sigio (); -} -
arch/um/os-Linux/sigio.c +145 -0
166 lines not on this page · raw message
arch/um/include/user_util.h +0 -3
@@ -51,9 +51,6 @@ extern unsigned long _stext, _etext, _sdextern unsigned long _unprotected_end;extern unsigned long brk_start; -extern int pty_output_sigio; -extern int pty_close_sigio; -extern void *add_signal_handler (int sig,void (*handler)(int ));extern int linux_main (int argc,char **argv);extern void set_cmdline (char *cmd);
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel