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

[Xen-devel] [PATCH] Virtual console driver on /dev/xvc0



On Thu, Aug 03, 2006 at 09:01:15AM +0100, Keir Fraser wrote:
> On 2 Aug 2006, at 22:42, Amos Waterland wrote:
> > I am currently using the below patch, but would really prefer not
> > to.  It's basic approach is to have the Xen virtual console driver
> > react "gracefully" in the case that a real serial driver has already
> > registered ttyS0-ttyS3.  It's current behavior is to fail if the
> > 8250 driver was initialized ahead of it, and console is lost.  In
> > the process I found a bug in Linux, and have included the patch for
> > it since otherwise the Xen driver initialization will succeed but
> > with negative side effects in the kobject subsystem.
> >
> > What is the story?
> 
> We need to obtain our own device number and then patch the driver. It'd 
> be great if someone else wants to look into this.
> 
>  -- Keir

The below is the least invasive approach I can find, and works well on
my PPC64 blades: I can boot the exact same kernel on bare hardware and
as a dom0.  I am sure there will be distro concerns (such as
/etc/inittab and /etc/securetty), but I'd like to get the ball rolling
with this initial submission.  

Note that you have to put `xencons=xvc0' in your Linux .config, and run
`mknod /dev/xvc0 c 232 0' in your rootfs.

Signed-off-by: Amos Waterland <apw@xxxxxxxxxx>

---

 drivers/xen/console/console.c |   19 +++++++++++++++++--
 include/linux/major.h         |    2 ++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff -r 17aa29a18b08 drivers/xen/console/console.c
--- a/drivers/xen/console/console.c     Thu Jul 27 18:57:20 2006 -0400
+++ b/drivers/xen/console/console.c     Thu Aug 03 18:57:28 2006 -0400
@@ -63,12 +63,14 @@
  *  'xencons=off'  [XC_OFF]:     Console is disabled.
  *  'xencons=tty'  [XC_TTY]:     Console attached to '/dev/tty[0-9]+'.
  *  'xencons=ttyS' [XC_SERIAL]:  Console attached to '/dev/ttyS[0-9]+'.
+ *  'xencons=xvc'  [XC_XVC]:     Console attached to '/dev/xvc[0-9]+'.
  *                 [XC_DEFAULT]: DOM0 -> XC_SERIAL ; all others -> XC_TTY.
  * 
  * NB. In mode XC_TTY, we create dummy consoles for tty2-63. This suppresses
  * warnings from standard distro startup scripts.
  */
-static enum { XC_OFF, XC_DEFAULT, XC_TTY, XC_SERIAL } xc_mode = XC_DEFAULT;
+static enum { XC_OFF, XC_DEFAULT, XC_TTY, XC_SERIAL, XC_XVC } 
+    xc_mode = XC_DEFAULT;
 static int xc_num = -1;
 
 #ifdef CONFIG_MAGIC_SYSRQ
@@ -85,6 +87,8 @@ static int __init xencons_setup(char *st
                xc_mode = XC_SERIAL;
        else if (!strncmp(str, "tty", 3))
                xc_mode = XC_TTY;
+       else if (!strncmp(str, "xvc", 3))
+               xc_mode = XC_XVC;
        else if (!strncmp(str, "off", 3))
                xc_mode = XC_OFF;
 
@@ -192,7 +196,7 @@ static int __init xen_console_init(void)
                if (xc_mode == XC_DEFAULT)
                        xc_mode = XC_SERIAL;
                kcons_info.write = kcons_write_dom0;
-               if (xc_mode == XC_SERIAL)
+               if (xc_mode == XC_SERIAL || xc_mode == XC_XVC)
                        kcons_info.flags |= CON_ENABLED;
        } else {
                if (xc_mode == XC_DEFAULT)
@@ -201,6 +205,12 @@ static int __init xen_console_init(void)
        }
 
        switch (xc_mode) {
+       case XC_XVC:
+               strcpy(kcons_info.name, "xvc");
+               if (xc_num == -1)
+                       xc_num = 0;
+               break;
+
        case XC_SERIAL:
                strcpy(kcons_info.name, "ttyS");
                if (xc_num == -1)
@@ -597,6 +607,11 @@ static int __init xencons_init(void)
                DRV(xencons_driver)->name        = "ttyS";
                DRV(xencons_driver)->minor_start = 64 + xc_num;
                DRV(xencons_driver)->name_base   = 0 + xc_num;
+       } else if (xc_mode == XC_XVC) {
+               DRV(xencons_driver)->name        = "xvc";
+               DRV(xencons_driver)->major       = XEN_VIRTUAL_CONSOLE;
+               DRV(xencons_driver)->minor_start = 0;
+               DRV(xencons_driver)->name_base   = 0;
        } else {
                DRV(xencons_driver)->name        = "tty";
                DRV(xencons_driver)->minor_start = xc_num;
diff -r 17aa29a18b08 include/linux/major.h
--- a/include/linux/major.h     Thu Jul 27 18:57:20 2006 -0400
+++ b/include/linux/major.h     Thu Aug 03 18:57:28 2006 -0400
@@ -166,4 +166,6 @@
 
 #define VIOTAPE_MAJOR          230
 
+#define XEN_VIRTUAL_CONSOLE    232
+
 #endif

_______________________________________________
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®.