hvc_console: display printk messages on console.
authorMiche Baker-Harvey <miche@google.com>
Wed, 5 Oct 2011 17:48:51 +0000 (10:48 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 18 Oct 2011 21:17:10 +0000 (14:17 -0700)
printk only works for "registered consoles."  Currently, the hvc_console
code calls register_console() from hvc_instantiate(), but that's only
used in the early console case.  In hvc_alloc(), register_console() was
not called.

Add a call to register_console() in hvc_alloc(), set up the index in
the hvc_console, and set up the necessary vtermnos[] and cons_op[]
entries so that printk functions work.

Signed-off-by: Miche Baker-Harvey <miche@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/tty/hvc/hvc_console.c

index b6b2d18fa38dc9827f47a297cfeb6d013f6b21f7..7430bc3c8d53643e0616b27c5cf08db0380892bb 100644 (file)
@@ -852,7 +852,7 @@ struct hvc_struct *hvc_alloc(uint32_t vtermno, int data,
         * find index to use:
         * see if this vterm id matches one registered for console.
         */
-       for (i=0; i < MAX_NR_HVC_CONSOLES; i++)
+       for (i = 0; i < MAX_NR_HVC_CONSOLES; i++)
                if (vtermnos[i] == hp->vtermno &&
                    cons_ops[i] == hp->ops)
                        break;
@@ -862,9 +862,13 @@ struct hvc_struct *hvc_alloc(uint32_t vtermno, int data,
                i = ++last_hvc;
 
        hp->index = i;
+       hvc_console.index = i;
+       vtermnos[i] = vtermno;
+       cons_ops[i] = ops;
 
        list_add_tail(&(hp->next), &hvc_structs);
        spin_unlock(&hvc_structs_lock);
+       register_console(&hvc_console);
 
        return hp;
 }
@@ -875,6 +879,7 @@ int hvc_remove(struct hvc_struct *hp)
        unsigned long flags;
        struct tty_struct *tty;
 
+       unregister_console(&hvc_console);
        spin_lock_irqsave(&hp->lock, flags);
        tty = tty_kref_get(hp->tty);