Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d5c9ffc6c6d15d4f655236e26942a21ad61fe3ad
Commit:     d5c9ffc6c6d15d4f655236e26942a21ad61fe3ad
Parent:     b4ac91a0eac36f347a509afda07e4305e931de61
Author:     Jeff Dike <[EMAIL PROTECTED]>
AuthorDate: Sat Feb 10 01:44:08 2007 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Sun Feb 11 10:51:22 2007 -0800

    [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: Jeff Dike <[EMAIL PROTECTED]>
    Cc: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 arch/um/drivers/line.c          |    7 +++----
 arch/um/drivers/ssl.c           |   16 +++++++---------
 arch/um/drivers/stdio_console.c |   17 +++++++----------
 arch/um/include/line.h          |   36 ++++++++++++++----------------------
 4 files changed, 31 insertions(+), 45 deletions(-)

diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c
index e620ed4..433e572 100644
--- a/arch/um/drivers/line.c
+++ b/arch/um/drivers/line.c
@@ -707,10 +707,9 @@ 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,
-                                      const struct tty_operations *ops,
-                                      struct line *lines, int nlines)
+struct tty_driver *register_lines(struct line_driver *line_driver,
+                                 const struct tty_operations *ops,
+                                 struct line *lines, int nlines)
 {
        int i;
        struct tty_driver *driver = alloc_tty_driver(nlines);
diff --git a/arch/um/drivers/ssl.c b/arch/um/drivers/ssl.c
index 475de52..fc22b9b 100644
--- a/arch/um/drivers/ssl.c
+++ b/arch/um/drivers/ssl.c
@@ -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,9 +189,8 @@ 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,
-                                        ARRAY_SIZE(serial_lines));
+       ssl_driver = register_lines(&driver, &ssl_ops, serial_lines,
+                                   ARRAY_SIZE(serial_lines));
 
        lines_init(serial_lines, ARRAY_SIZE(serial_lines), &opts);
 
diff --git a/arch/um/drivers/stdio_console.c b/arch/um/drivers/stdio_console.c
index a83c42c..8dccdd1 100644
--- a/arch/um/drivers/stdio_console.c
+++ b/arch/um/drivers/stdio_console.c
@@ -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,16 +154,14 @@ 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,
-                                            ARRAY_SIZE(vts));
+       console_driver = register_lines(&driver, &console_ops, vts,
+                                       ARRAY_SIZE(vts));
        if (console_driver == NULL)
                return -1;
        printk(KERN_INFO "Initialized stdio console driver\n");
diff --git a/arch/um/include/line.h b/arch/um/include/line.h
index a2486b4..3477a85 100644
--- a/arch/um/include/line.h
+++ b/arch/um/include/line.h
@@ -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,10 +87,9 @@ 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,
-                                              const struct tty_operations 
*driver,
-                                              struct line *lines, int nlines);
+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);
 extern void close_lines(struct line *lines, int nlines);
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to