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

[Xen-changelog] [xen-unstable] [LINUX] Fix booting with e.g. xencons=tty3, so that tty1/tty2 are valid (dummy) devices.



# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxxxx
# Node ID 9fd92e7e91a58b5d09dc2f4f2f520ed01e69834f
# Parent  856caf975abd50b78c15f41cc8ab52372059fcf3
[LINUX] Fix booting with e.g. xencons=tty3, so that tty1/tty2 are valid (dummy) 
devices.

Attached patch makes it always create valid devices on tty1-tty63, but
all but the one specified by xencons are dummy devices.

From: Mark McLoughlin <markmc@xxxxxxxxxx>
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 linux-2.6-xen-sparse/drivers/xen/console/console.c |   35 +++++++++------------
 1 files changed, 16 insertions(+), 19 deletions(-)

diff -r 856caf975abd -r 9fd92e7e91a5 
linux-2.6-xen-sparse/drivers/xen/console/console.c
--- a/linux-2.6-xen-sparse/drivers/xen/console/console.c        Mon Jul 03 
08:35:12 2006 +0100
+++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c        Mon Jul 03 
08:52:27 2006 +0100
@@ -267,7 +267,8 @@ void xencons_force_flush(void)
 /******************** User-space console driver (/dev/console) ************/
 
 #define DRV(_d)         (_d)
-#define TTY_INDEX(_tty) ((_tty)->index)
+#define DUMMY_TTY(_tty) ((xc_mode != XC_SERIAL) &&             \
+                        ((_tty)->index != (xc_num - 1)))
 
 static struct termios *xencons_termios[MAX_NR_CONSOLES];
 static struct termios *xencons_termios_locked[MAX_NR_CONSOLES];
@@ -391,7 +392,7 @@ static void xencons_send_xchar(struct tt
 {
        unsigned long flags;
 
-       if (TTY_INDEX(tty) != 0)
+       if (DUMMY_TTY(tty))
                return;
 
        spin_lock_irqsave(&xencons_lock, flags);
@@ -402,7 +403,7 @@ static void xencons_send_xchar(struct tt
 
 static void xencons_throttle(struct tty_struct *tty)
 {
-       if (TTY_INDEX(tty) != 0)
+       if (DUMMY_TTY(tty))
                return;
 
        if (I_IXOFF(tty))
@@ -411,7 +412,7 @@ static void xencons_throttle(struct tty_
 
 static void xencons_unthrottle(struct tty_struct *tty)
 {
-       if (TTY_INDEX(tty) != 0)
+       if (DUMMY_TTY(tty))
                return;
 
        if (I_IXOFF(tty)) {
@@ -426,7 +427,7 @@ static void xencons_flush_buffer(struct 
 {
        unsigned long flags;
 
-       if (TTY_INDEX(tty) != 0)
+       if (DUMMY_TTY(tty))
                return;
 
        spin_lock_irqsave(&xencons_lock, flags);
@@ -451,7 +452,7 @@ static int xencons_write(
        int i;
        unsigned long flags;
 
-       if (TTY_INDEX(tty) != 0)
+       if (DUMMY_TTY(tty))
                return count;
 
        spin_lock_irqsave(&xencons_lock, flags);
@@ -472,7 +473,7 @@ static void xencons_put_char(struct tty_
 {
        unsigned long flags;
 
-       if (TTY_INDEX(tty) != 0)
+       if (DUMMY_TTY(tty))
                return;
 
        spin_lock_irqsave(&xencons_lock, flags);
@@ -484,7 +485,7 @@ static void xencons_flush_chars(struct t
 {
        unsigned long flags;
 
-       if (TTY_INDEX(tty) != 0)
+       if (DUMMY_TTY(tty))
                return;
 
        spin_lock_irqsave(&xencons_lock, flags);
@@ -496,7 +497,7 @@ static void xencons_wait_until_sent(stru
 {
        unsigned long orig_jiffies = jiffies;
 
-       if (TTY_INDEX(tty) != 0)
+       if (DUMMY_TTY(tty))
                return;
 
        while (DRV(tty->driver)->chars_in_buffer(tty)) {
@@ -515,7 +516,7 @@ static int xencons_open(struct tty_struc
 {
        unsigned long flags;
 
-       if (TTY_INDEX(tty) != 0)
+       if (DUMMY_TTY(tty))
                return 0;
 
        spin_lock_irqsave(&xencons_lock, flags);
@@ -532,7 +533,7 @@ static void xencons_close(struct tty_str
 {
        unsigned long flags;
 
-       if (TTY_INDEX(tty) != 0)
+       if (DUMMY_TTY(tty))
                return;
 
        if (tty->count == 1) {
@@ -588,8 +589,7 @@ static int __init xencons_init(void)
        DRV(xencons_driver)->init_termios    = tty_std_termios;
        DRV(xencons_driver)->flags           =
                TTY_DRIVER_REAL_RAW |
-               TTY_DRIVER_RESET_TERMIOS |
-               TTY_DRIVER_NO_DEVFS;
+               TTY_DRIVER_RESET_TERMIOS;
        DRV(xencons_driver)->termios         = xencons_termios;
        DRV(xencons_driver)->termios_locked  = xencons_termios_locked;
 
@@ -599,8 +599,8 @@ static int __init xencons_init(void)
                DRV(xencons_driver)->name_base   = 0 + xc_num;
        } else {
                DRV(xencons_driver)->name        = "tty";
-               DRV(xencons_driver)->minor_start = xc_num;
-               DRV(xencons_driver)->name_base   = xc_num;
+               DRV(xencons_driver)->minor_start = 1;
+               DRV(xencons_driver)->name_base   = 1;
        }
 
        tty_set_operations(xencons_driver, &xencons_ops);
@@ -614,8 +614,6 @@ static int __init xencons_init(void)
                xencons_driver = NULL;
                return rc;
        }
-
-       tty_register_device(xencons_driver, 0, NULL);
 
        if (xen_start_info->flags & SIF_INITDOMAIN) {
                xencons_priv_irq = bind_virq_to_irqhandler(
@@ -629,8 +627,7 @@ static int __init xencons_init(void)
        }
 
        printk("Xen virtual console successfully installed as %s%d\n",
-              DRV(xencons_driver)->name,
-              DRV(xencons_driver)->name_base );
+              DRV(xencons_driver)->name, xc_num);
 
        return 0;
 }

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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