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
|