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

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



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


 


Rackspace

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