[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [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 issue is the following: VMX is a unmodified guest OS, and to enable serial output, we should configure the following items in grub. console=tty0 console=ttyS0,9600n8 for details please refer to: http://people.redhat.com/steved/RemoteConsoleNotes.txt Once we configure ttyS0, VMX will use qemu to create a pty in dom0 directly, bypassing xenconsoled. To better support serial output, I add parameter setting function to fix this issue, which is the reason of my patch. :-) > >> 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? I tested domU and VMX, and it is fine if parameter setting function is enabled. > >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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |