Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5c9ffc6 authored by Jeff Dike's avatar Jeff Dike Committed by Linus Torvalds
Browse files

[PATCH] uml: console locking commentary and code cleanup



Remove the last vestiges of devfs from console registration.  Change the name
of the function, plus remove a couple of unused fields from the line_driver
structure.

struct lines is no longer needed, all traces of it are gone.

The only way that I can see to mark a structure as being almost-const is to
individually const the fields.  This is the case for the line_driver
structure, which has only one modifiable field - a list_head in a
sub-structure.

Signed-off-by: default avatarJeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent b4ac91a0
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -707,8 +707,7 @@ int line_remove(struct line *lines, unsigned int num, int n, char **error_out)
	return err;
}

struct tty_driver *line_register_devfs(struct lines *set,
				       struct line_driver *line_driver,
struct tty_driver *register_lines(struct line_driver *line_driver,
				  const struct tty_operations *ops,
				  struct line *lines, int nlines)
{
+7 −9
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ static int ssl_config(char *str, char **error_out);
static int ssl_get_config(char *dev, char *str, int size, char **error_out);
static int ssl_remove(int n, char **error_out);


/* Const, except for .mc.list */
static struct line_driver driver = {
	.name 			= "UML serial line",
	.device_name 		= "ttyS",
@@ -62,8 +64,6 @@ static struct line_driver driver = {
	.read_irq_name 		= "ssl",
	.write_irq 		= SSL_WRITE_IRQ,
	.write_irq_name 	= "ssl-write",
	.symlink_from 		= "serial",
	.symlink_to 		= "tts",
	.mc  = {
		.list		= LIST_HEAD_INIT(driver.mc.list),
		.name  		= "ssl",
@@ -74,14 +74,12 @@ static struct line_driver driver = {
	},
};

/* The array is initialized by line_init, which is an initcall.  The 
 * individual elements are protected by individual semaphores.
/* The array is initialized by line_init, at initcall time.  The
 * elements are locked individually as needed.
 */
static struct line serial_lines[NR_PORTS] =
	{ [0 ... NR_PORTS - 1] = LINE_INIT(CONFIG_SSL_CHAN, &driver) };

static struct lines lines = LINES_INIT(NR_PORTS);

static int ssl_config(char *str, char **error_out)
{
	return line_config(serial_lines, ARRAY_SIZE(serial_lines), str, &opts,
@@ -175,6 +173,7 @@ static int ssl_console_setup(struct console *co, char *options)
	return console_open_chan(line, co);
}

/* No locking for register_console call - relies on single-threaded initcalls */
static struct console ssl_cons = {
	.name		= "ttyS",
	.write		= ssl_console_write,
@@ -190,8 +189,7 @@ static int ssl_init(void)

	printk(KERN_INFO "Initializing software serial port version %d\n",
	       ssl_version);
	ssl_driver = line_register_devfs(&lines, &driver, &ssl_ops,
					 serial_lines,
	ssl_driver = register_lines(&driver, &ssl_ops, serial_lines,
				    ARRAY_SIZE(serial_lines));

	lines_init(serial_lines, ARRAY_SIZE(serial_lines), &opts);
+7 −10
Original line number Diff line number Diff line
@@ -55,6 +55,8 @@ static int con_config(char *str, char **error_out);
static int con_get_config(char *dev, char *str, int size, char **error_out);
static int con_remove(int n, char **con_remove);


/* Const, except for .mc.list */
static struct line_driver driver = {
	.name 			= "UML console",
	.device_name 		= "tty",
@@ -66,8 +68,6 @@ static struct line_driver driver = {
	.read_irq_name 		= "console",
	.write_irq 		= CONSOLE_WRITE_IRQ,
	.write_irq_name 	= "console-write",
	.symlink_from 		= "ttys",
	.symlink_to 		= "vc",
	.mc  = {
		.name  		= "con",
		.config 	= con_config,
@@ -77,10 +77,8 @@ static struct line_driver driver = {
	},
};

static struct lines console_lines = LINES_INIT(MAX_TTYS);

/* The array is initialized by line_init, which is an initcall.  The 
 * individual elements are protected by individual semaphores.
/* 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 ] =
@@ -148,6 +146,7 @@ static int uml_console_setup(struct console *co, char *options)
	return console_open_chan(line, co);
}

/* No locking for register_console call - relies on single-threaded initcalls */
static struct console stdiocons = {
	.name		= "tty",
	.write		= uml_console_write,
@@ -155,15 +154,13 @@ static struct console stdiocons = {
	.setup		= uml_console_setup,
	.flags		= CON_PRINTBUFFER,
	.index		= -1,
	.data		= &vts,
};

int stdio_init(void)
{
	char *new_title;

	console_driver = line_register_devfs(&console_lines, &driver,
					     &console_ops, vts,
	console_driver = register_lines(&driver, &console_ops, vts,
					ARRAY_SIZE(vts));
	if (console_driver == NULL)
		return -1;
+14 −22
Original line number Diff line number Diff line
@@ -15,19 +15,18 @@
#include "chan_user.h"
#include "mconsole_kern.h"

/* There's only one modifiable field in this - .mc.list */
struct line_driver {
	char *name;
	char *device_name;
	short major;
	short minor_start;
	short type;
	short subtype;
	int read_irq;
	char *read_irq_name;
	int write_irq;
	char *write_irq_name;
	char *symlink_from;
	char *symlink_to;
	const char *name;
	const char *device_name;
	const short major;
	const short minor_start;
	const short type;
	const short subtype;
	const int read_irq;
	const char *read_irq_name;
	const int write_irq;
	const char *write_irq_name;
	struct mc_device mc;
};

@@ -67,12 +66,6 @@ struct line {
	  .lock =	SPIN_LOCK_UNLOCKED, \
	  .driver =	d }

struct lines {
	int num;
};

#define LINES_INIT(n) {  .num =	n }

extern void line_close(struct tty_struct *tty, struct file * filp);
extern int line_open(struct line *lines, struct tty_struct *tty);
extern int line_setup(struct line *lines, unsigned int sizeof_lines,
@@ -94,8 +87,7 @@ extern char *add_xterm_umid(char *base);
extern int line_setup_irq(int fd, int input, int output, struct line *line,
			  void *data);
extern void line_close_chan(struct line *line);
extern struct tty_driver * line_register_devfs(struct lines *set,
					       struct line_driver *line_driver,
extern struct tty_driver *register_lines(struct line_driver *line_driver,
					 const struct tty_operations *driver,
					 struct line *lines, int nlines);
extern void lines_init(struct line *lines, int nlines, struct chan_opts *opts);