> >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
|