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

RE: [Xen-devel] [PATCH]fix VMX "xm console" issue


  • To: "Yu, Ping Y" <ping.y.yu@xxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: "Ian Pratt" <m+Ian.Pratt@xxxxxxxxxxxx>
  • Date: Tue, 29 Nov 2005 11:51:11 -0000
  • Delivery-date: Tue, 29 Nov 2005 11:51:11 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: AcX0kXm6P3GPNQq0SLeZDjrEEl/V+wAO9f4AAAA+AqAAAy+gEA==
  • Thread-topic: [Xen-devel] [PATCH]fix VMX "xm console" issue

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


 


Rackspace

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