diff options
Diffstat (limited to 'arch/um/drivers/stdio_console.c')
| -rw-r--r-- | arch/um/drivers/stdio_console.c | 46 | 
1 files changed, 23 insertions, 23 deletions
diff --git a/arch/um/drivers/stdio_console.c b/arch/um/drivers/stdio_console.c index 088776f01908..7663541c372e 100644 --- a/arch/um/drivers/stdio_console.c +++ b/arch/um/drivers/stdio_console.c @@ -27,12 +27,6 @@  #define MAX_TTYS (16) -/* Referenced only by tty_driver below - presumably it's locked correctly - * by the tty driver. - */ - -static struct tty_driver *console_driver; -  static void stdio_announce(char *dev_name, int dev)  {  	printk(KERN_INFO "Virtual console %d assigned device '%s'\n", dev, @@ -76,9 +70,9 @@ static struct line_driver driver = {  /* The array is initialized by line_init, at initcall time.  The   * elements are locked individually as needed.   */ -static struct line vts[MAX_TTYS] = { LINE_INIT(CONFIG_CON_ZERO_CHAN, &driver), -				     [ 1 ... MAX_TTYS - 1 ] = -				     LINE_INIT(CONFIG_CON_CHAN, &driver) }; +static char *vt_conf[MAX_TTYS]; +static char *def_conf; +static struct line vts[MAX_TTYS];  static int con_config(char *str, char **error_out)  { @@ -130,14 +124,14 @@ static void uml_console_write(struct console *console, const char *string,  	unsigned long flags;  	spin_lock_irqsave(&line->lock, flags); -	console_write_chan(&line->chan_list, string, len); +	console_write_chan(line->chan_out, string, len);  	spin_unlock_irqrestore(&line->lock, flags);  }  static struct tty_driver *uml_console_device(struct console *c, int *index)  {  	*index = c->index; -	return console_driver; +	return driver.driver;  }  static int uml_console_setup(struct console *co, char *options) @@ -160,18 +154,31 @@ static struct console stdiocons = {  static int stdio_init(void)  {  	char *new_title; +	int err; +	int i; -	console_driver = register_lines(&driver, &console_ops, vts, +	err = register_lines(&driver, &console_ops, vts,  					ARRAY_SIZE(vts)); -	if (console_driver == NULL) -		return -1; +	if (err) +		return err; +  	printk(KERN_INFO "Initialized stdio console driver\n");  	new_title = add_xterm_umid(opts.xterm_title);  	if(new_title != NULL)  		opts.xterm_title = new_title; -	lines_init(vts, ARRAY_SIZE(vts), &opts); +	for (i = 0; i < MAX_TTYS; i++) { +		char *error; +		char *s = vt_conf[i]; +		if (!s) +			s = def_conf; +		if (!s) +			s = i ? CONFIG_CON_CHAN : CONFIG_CON_ZERO_CHAN; +		if (setup_one_line(vts, i, s, &opts, &error)) +			printk(KERN_ERR "setup_one_line failed for " +			       "device %d : %s\n", i, error); +	}  	con_init_done = 1;  	register_console(&stdiocons); @@ -189,14 +196,7 @@ __uml_exitcall(console_exit);  static int console_chan_setup(char *str)  { -	char *error; -	int ret; - -	ret = line_setup(vts, ARRAY_SIZE(vts), str, &error); -	if(ret < 0) -		printk(KERN_ERR "Failed to set up console with " -		       "configuration string \"%s\" : %s\n", str, error); - +	line_setup(vt_conf, MAX_TTYS, &def_conf, str, "console");  	return 1;  }  __setup("con", console_chan_setup);  |