[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 20/20] libxl: ao: Convert libxl_run_bootloader



On Wed, 2012-03-21 at 12:17 +0000, Ian Jackson wrote:
> Ian Campbell writes ("Re: [Xen-devel] [PATCH 20/20] libxl: ao: Convert 
> libxl_run_bootloader"):
> > On Fri, 2012-03-16 at 16:26 +0000, Ian Jackson wrote:
> > > @@ -92,309 +241,360 @@ static int open_xenconsoled_pty(int *master, int 
> > > *slave, char *slave_path, size_
> > >       * for it.
> > >       */
> > >  #if !defined(__sun__) && !defined(__NetBSD__)
> > > +    tcgetattr(master, &termattr);
> > >      cfmakeraw(&termattr);
> > > +    tcsetattr(master, TCSANOW, &termattr);
> > >
> > > +    close(slave);
> > > +    slave = -1;
> > >  #else
> > > +    tcgetattr(slave, &termattr);
> > >      cfmakeraw(&termattr);
> > > +    tcsetattr(slave, TCSANOW, &termattr);
> > >  #endif
> > 
> > Could this stuff be usefully pushed into libxl__openpty?
> 
> Hmm.  This is a bit of a can of worms I think.  When I wrote my patch
> I left it well alone.  TBH I think the current code is arguably wrong.
> I can see no reason why we would try to do termios operations on the
> pty master at all.  I think these functions should be performed on the
> slave on all platforms.
> 
> But I don't want to introduce a perhaps-not-wonderfully-portable
> change like that in this series.

That's very reasonable...

FWIW most of this code was copied from the xend equivalent (actually a C
python binding) which I think was actually cobbled together from actual
users of the platforms in question, not that this makes it correct
necessarily.

> This is now done with libxl_fd_set_nonblock immediately after the call
> to carefd.
[...]
> This code has not actually been removed by my patch.  It's still there
> at the end of bootloader_gotptys.

Sorry, I spotted both of these later and neglected to come back and
remove these comments.

> > > +    } else if (!libxl__ev_fd_isregistered(&dc->toread)) {
> > > +        /* we have had eof */
> > > +        libxl__datacopier_kill(gc, dc);
> > > +        dc->callback(egc, dc, 0, 0);
> > > +        return;
> > > +    } else {
> > > +        /* nothing buffered, but still reading */
> > > +        libxl__ev_fd_deregister(gc, &dc->towrite);
> > 
> > is it worth the effort to handle only registering for write events when
> > something is buffered? It would be simpler to just set it up at start of
> > day and leave it until done?
> 
> If you register for write events that means the event loop will spin
> continually offering you the chance to write something.  Or to put it
> another way, the event callback function must either make the original
> condition it was triggering on not true, or it must disable the event.

Right, this is obvious when you put it that way. In my defence it had
been a long review session...

Ian.


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.