Hi Jeff,

Thanks for the patch. We have made several tests with a 2.6.18-1 kernel
compiled with your patch and all the reported problems are gone.

Best regards and happy christmas,
David

  > -----Mensaje original-----
  > De: Jeff Dike [mailto:[EMAIL PROTECTED] 
  > Enviado el: martes, 27 de noviembre de 2007 20:13
  > Para: Fermín Galán Márquez
  > CC: [EMAIL PROTECTED]; user-mode-linux-user@lists.sourceforge.net
  > Asunto: Re: [uml-user] Hanging using 'iptables -L' in UML 
  > vm booted with con0=pts
  > 
  > On Wed, Sep 12, 2007 at 11:52:32PM +0200, Fermín Galán 
  > Márquez wrote:
  > > This is the trace (as you can see I're repeated the 
  > experiment twice, 
  > > the result is basically the same), hoping it could be useful to 
  > > diagnose the problem and fix eventual bugs in the UML kernel. See 
  > > below regarding the test procedure.
  > > 
  > > (gdb) bt
  > > #0  0xb7f9d7f2 in ?? () from /lib/ld-linux.so.2
  > > #1  0xb7f19ab0 in tcsetattr () from /lib/i686/cmov/libc.so.6
  > > #2  0x080610d5 in generic_console_write (fd=7,
  > >     buf=0x828fc13 "ip_tables: (C) 2000-2006 Netfilter 
  > Core Team\n", n=45)
  > >     at arch/um/drivers/chan_user.c:37
  > > #3  0x0806096e in console_write_chan (chans=0x82756f0,
  > >     buf=0x828fc13 "ip_tables: (C) 2000-2006 Netfilter 
  > Core Team\n", len=45)
  > >     at arch/um/drivers/chan_kern.c:352
  > 
  > My reaction to this has been that you are running UML under 
  > a script which isn't reading UML output correctly, 
  > therefore the pts device fills up, and UML hangs during 
  > console output because the pts device buffer is full and 
  > tcsetattr is waiting for it to empty.
  > 
  > However, after looking at this, it turns up a host bug 
  > where, under the conditions that UML is using it, tcsetattr 
  > will always, guaranteed, return -EINTR.  UML will then hang 
  > because it will loop, making the call until it returns 
  > something other than -EINTR.  See
  > http://marc.info/?l=linux-kernel&m=119618990807182&w=2 for 
  > my analysis.
  > 
  > There is a workaround in UML, attached below.  I basically 
  > block SIGIO over the block of code which is fiddling 
  > terminal attributes.
  > 
  >                             Jeff
  > 
  > --
  > Work email - jdike at linux dot intel dot com
  > 
  > Index: linux-2.6.22/arch/um/drivers/chan_user.c
  > ===================================================================
  > --- linux-2.6.22.orig/arch/um/drivers/chan_user.c   
  > 2007-11-21 11:43:50.000000000 -0500
  > +++ linux-2.6.22/arch/um/drivers/chan_user.c        
  > 2007-11-27 14:03:10.000000000 -0500
  > @@ -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;
  > 


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
User-mode-linux-user mailing list
User-mode-linux-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-user

Reply via email to