[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH]fix VMX "xm console" issue
There's a problem with xm console and VMX guests, the handshaking isn't exactly right. I can run xm console on the VMX guest in one window - seeing the handshaking being off, run minicom on the /dev/pts/? in another window, and see the original xm console window correct itself so it's usable. Before minicom, you can't interact with the xm console - it doesn't seem to receive the input. I don't know about the patch here... but I've seen some odd things trying to discover what's wrong. I see where xenconsoled sets the cfmakeraw() - but it's like those settings aren't taking. I do an stty -f /dev/pts/? -a and the settings don't match. I've done a stty -f /dev/pts/? -a before and after minicom is invoked and seen the differences. I've tried changing some of the terminos settings to match minicom's in xenconsoled, but it doesn't seem to make a difference or even seem to be set at all. I'm probably doing something wrong. I'll look at this more this week. I started on it last week and was off for the holiday. Thanks, Dan On Tuesday 29 November 2005 06:10, Anthony Liguori wrote: > I'm not sure what this patch does. cfmakeraw() will already set all of > those flags. You shouldn't have to set a baud rate on a PTY either. Is > the real bug that somehow init_term() wasn't being called when it should > have been? > > What flag, in particular, did you need set that wasn't being set by > cfmakeraw()? xenconsoled sets it's end of the PTY with cfmakeraw() so > if we modify the client to use different termios settings we probably > need to update the server too. > > Regards, > > Anthony Liguori > > Ian Pratt wrote: > >>>Please expand upon what this issue with the console client is. Why > >>>hasn't the issue been seen with paravirtualized domains? > >> > >>"xm console" in VMX could not work well now, as we know. We > >>can see the output of the console, but it keeps scrolling > >>like hitting enter. > >>When I investigate this bug, I found that the serial > >>parameter has not been set anywhere, which might be the cause > >>of this issue. > > > >I'd prefer to understand the issue a bit more first/ > > > >>The VMX console model for VMX is somewhat different with > >>domU's. When the serial port is redirect to pty, write the > >>allocated device to xenstore, then xm console can get it, > >>thus xenconsole is independent of xenconsoled in VMX. > > > >But xenconsole is used by paravirt guests too. What effect does this > >patch have on them? > > > >Ian > > > >>>What behaviour does the tcsetattr alter, and why not just set that > >>>particular bit? > >> > >>I found that Minicom can work well in "xm console" VMX, and > >>borrow minicom's behavior to set some parameter for "xen > >>console" and domU is working well too. > >> > >>>Thanks, > >>>Ian > >>> > >>>># HG changeset patch > >>>># User Ping Yu <ping.y.yu@xxxxxxxxx> > >>>># Node ID 71111788840f0dd557d7cfc4e919beb511c0237c > >>>># Parent 8451c65671238604e2678a1f44c2f582ec6ebf96 > >>>>Fix an issue for VMX console. > >>>>Add a function to set serial parameter, thus make "xm > >> > >>console" work > >> > >>>>well both in domU and VMX > >>>> > >>>>Signed-off-by: Ping Yu <ping.y.yu@xxxxxxxxx> > >>>> > >>>>diff -r 8451c6567123 -r 71111788840f tools/console/client/main.c > >>>>--- a/tools/console/client/main.c Wed Nov 23 19:37:33 2005 > >>>>+++ b/tools/console/client/main.c Mon Nov 28 15:53:17 2005 > >>>>@@ -87,6 +87,92 @@ > >>>> tcsetattr(fd, TCSAFLUSH, &new_term); } > >>>> > >>>>+/* Code borrowed from Minicom > >>>>+ * Set baudrate, parity and number of bits */ static void > >>>>+set_serial_argument(int fd, char *baudr, char *par, > >>>>+ char *bits, char *stopb, int hwf, int swf) { > >>>>+ int spd = -1; > >>>>+ int newbaud; > >>>>+ int bit = bits[0]; > >>>>+ > >>>>+ struct termios tty; > >>>>+ > >>>>+ tcgetattr(fd, &tty); > >>>>+ > >>>>+ /* We generate mark and space parity ourself. */ > >>>>+ if (bit == '7' && (par[0] == 'M' || par[0] == 'S')) > >>>>+ bit = '8'; > >>>>+ > >>>>+ /* Check if 'baudr' is really a number */ > >>>>+ if ((newbaud = (atol(baudr) / 100)) == 0 && baudr[0] != '0') > >>>>+ newbaud = -1; > >>>>+ > >>>>+ switch(newbaud) { > >>>>+ case 0: > >>>>+ case 3: spd = B300; break; > >>>>+ case 6: spd = B600; break; > >>>>+ case 12: spd = B1200; break; > >>>>+ case 24: spd = B2400; break; > >>>>+ case 48: spd = B4800; break; > >>>>+ case 96: spd = B9600; break; > >>>>+ case 192: spd = B19200; break; > >>>>+ case 384: spd = B38400; break; > >>>>+ case 576: spd = B57600; break; > >>>>+ case 1152: spd = B115200; break; > >>>>+ case 2304: spd = B230400; break; > >>>>+ } > >>>>+ > >>>>+ if (spd != -1) { > >>>>+ cfsetospeed(&tty, (speed_t)spd); > >>>>+ cfsetispeed(&tty, (speed_t)spd); > >>>>+ } > >>>>+ > >>>>+ switch (bit) { > >>>>+ case '5': > >>>>+ tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS5; > >>>>+ break; > >>>>+ case '6': > >>>>+ tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS6; > >>>>+ break; > >>>>+ case '7': > >>>>+ tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS7; > >>>>+ break; > >>>>+ case '8': > >>>>+ default: > >>>>+ tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; > >>>>+ break; > >>>>+ } > >>>>+ > >>>>+ /* Set into raw, no echo mode */ > >>>>+ tty.c_iflag = IGNBRK; > >>>>+ tty.c_lflag = 0; > >>>>+ tty.c_oflag = 0; > >>>>+ tty.c_cflag |= CLOCAL | CREAD; > >>>>+ tty.c_cc[VMIN] = 1; > >>>>+ tty.c_cc[VTIME] = 5; > >>>>+ > >>>>+ if (swf) > >>>>+ tty.c_iflag |= IXON | IXOFF; > >>>>+ else > >>>>+ tty.c_iflag &= ~(IXON|IXOFF|IXANY); > >>>>+ > >>>>+ tty.c_cflag &= ~(PARENB | PARODD); > >>>>+ if (par[0] == 'E') > >>>>+ tty.c_cflag |= PARENB; > >>>>+ else if (par[0] == 'O') > >>>>+ tty.c_cflag |= (PARENB | PARODD); > >>>>+ > >>>>+ if (stopb[0] == '2') > >>>>+ tty.c_cflag |= CSTOPB; > >>>>+ else > >>>>+ tty.c_cflag &= ~CSTOPB; > >>>>+ > >>>>+ tcsetattr(fd, TCSANOW, &tty); > >>>>+ > >>>>+} > >>>>+ > >>>> static void restore_term(int fd, struct termios *old) { > >>>> tcsetattr(fd, TCSAFLUSH, old); > >>>>@@ -260,6 +346,7 @@ > >>>> free(path); > >>>> > >>>> init_term(STDIN_FILENO, &attr); > >>>>+ set_serial_argument(spty, "115200", "N", "8", "1", 1, 0); > >>>> console_loop(xc_handle, domid, spty); > >>>> restore_term(STDIN_FILENO, &attr); > >>>> > >>>> > >>>> > >>>> > >>>>Sincerely Yours > >>>> > >>>>Yu Ping > > > >_______________________________________________ > >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 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |