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

Re: [Xen-devel] PATCH [xenconsoled]: makes pty slave raw early



Is this plausible to slip in for 3.2.0?

 -- Keir

On 16/1/08 12:20, "John Levon" <levon@xxxxxxxxxxxxxxxxx> wrote:

> On Wed, Jan 16, 2008 at 10:57:07AM +0000, Samuel Thibault wrote:
> 
>>> on my system (Linux 2.6.18.8 - ia64), if a domain write on the xencons
>>> before xenconsole is initialized the domain gets back what it wrote.
>> 
>> Argh, indeed, and it seems to fix things for mini-os as well.  John,
>> could you please check that it works correctly on Solaris before Keir
>> applies it?
> 
> Works fine. Below is the version of the patch that compiles on Solaris.
> 
> cheers
> john
> 
> diff --git a/tools/console/daemon/io.c b/tools/console/daemon/io.c
> --- a/tools/console/daemon/io.c
> +++ b/tools/console/daemon/io.c
> @@ -246,7 +246,6 @@ static void domain_close_tty(struct doma
>  }
>  
>  #ifdef __sun__
> -/* Once Solaris has openpty(), this is going to be removed. */
>  static int openpty(int *amaster, int *aslave, char *name,
>                     struct termios *termp, struct winsize *winp)
>  {
> @@ -278,8 +277,10 @@ static int openpty(int *amaster, int *as
> if (winp)
> ioctl(sfd, TIOCSWINSZ, winp);
>  
> + if (termp)
> +  tcsetattr(sfd, TCSAFLUSH, termp);
> +
> assert(name == NULL);
> - assert(termp == NULL);
>  
> return 0;
>  
> @@ -289,7 +290,20 @@ err:
> close(mfd);
> return -1;
>  }
> -#endif
> +
> +void cfmakeraw(struct termios *termios_p)
> +{
> + termios_p->c_iflag &=
> +     ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON);
> + termios_p->c_oflag &= ~OPOST;
> + termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
> + termios_p->c_cflag &= ~(CSIZE|PARENB);
> + termios_p->c_cflag |= CS8;
> +
> + termios_p->c_cc[VMIN] = 0;
> + termios_p->c_cc[VTIME] = 0;
> +}
> +#endif /* __sun__ */
>  
>  static int domain_create_tty(struct domain *dom)
>  {
> @@ -299,11 +313,14 @@ static int domain_create_tty(struct doma
> bool success;
> char *data;
> unsigned int len;
> + struct termios term;
>  
> assert(dom->slave_fd == -1);
> assert(dom->master_fd == -1);
>  
> - if (openpty(&dom->master_fd, &dom->slave_fd, NULL, NULL, NULL) < 0) {
> + cfmakeraw(&term);
> +
> + if (openpty(&dom->master_fd, &dom->slave_fd, NULL, &term, NULL) < 0) {
> err = errno;
> dolog(LOG_ERR, "Failed to create tty for domain-%d (errno = %i, %s)",
>      dom->domid, err, strerror(err));
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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