Commit 31555213 authored by Linus Torvalds's avatar Linus Torvalds

Revert "hvc_console: display printk messages on console."

This reverts commit 36116245.

It causes an infinite loop when booting Linux under Xen, as so:

  [    2.382984] console [hvc0] enabled
  [    2.382984] console [hvc0] enabled
  [    2.382984] console [hvc0] enabled
  ...

as reported by Konrad Rzeszutek Wilk.  And Rusty reports the same for
lguest.  He goes on to say:

   "This is not a concurrency problem: the issue seems to be that
    calling register_console() twice on the same struct console is a bad
    idea."

and Greg says he'll fix it up properly at some point later. Revert for now.
Reported-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reported-by: default avatarRusty Russell <rusty@ozlabs.org>
Requested-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Cc: Miche Baker-Harvey <miche@google.com>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 0084e475
...@@ -852,7 +852,7 @@ struct hvc_struct *hvc_alloc(uint32_t vtermno, int data, ...@@ -852,7 +852,7 @@ struct hvc_struct *hvc_alloc(uint32_t vtermno, int data,
* find index to use: * find index to use:
* see if this vterm id matches one registered for console. * 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 && if (vtermnos[i] == hp->vtermno &&
cons_ops[i] == hp->ops) cons_ops[i] == hp->ops)
break; break;
...@@ -862,13 +862,9 @@ struct hvc_struct *hvc_alloc(uint32_t vtermno, int data, ...@@ -862,13 +862,9 @@ struct hvc_struct *hvc_alloc(uint32_t vtermno, int data,
i = ++last_hvc; i = ++last_hvc;
hp->index = i; hp->index = i;
hvc_console.index = i;
vtermnos[i] = vtermno;
cons_ops[i] = ops;
list_add_tail(&(hp->next), &hvc_structs); list_add_tail(&(hp->next), &hvc_structs);
spin_unlock(&hvc_structs_lock); spin_unlock(&hvc_structs_lock);
register_console(&hvc_console);
return hp; return hp;
} }
...@@ -879,7 +875,6 @@ int hvc_remove(struct hvc_struct *hp) ...@@ -879,7 +875,6 @@ int hvc_remove(struct hvc_struct *hp)
unsigned long flags; unsigned long flags;
struct tty_struct *tty; struct tty_struct *tty;
unregister_console(&hvc_console);
spin_lock_irqsave(&hp->lock, flags); spin_lock_irqsave(&hp->lock, flags);
tty = tty_kref_get(hp->tty); tty = tty_kref_get(hp->tty);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment