diff options
author | Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> | 2005-05-01 11:58:56 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-01 11:58:56 -0400 |
commit | b97b77cca627b2e3e6d0015e2e14b1d1c12de0c8 (patch) | |
tree | 3fa7a55e316624a72764e5c7eead52b92a500a88 /arch/um/drivers/stdio_console.c | |
parent | 80f9507886076de0cadfdf2b87701e68156829c2 (diff) |
[PATCH] uml: redo console locking
Fix some console locking problems (including scheduling in atomic) and various
reorderings and cleanup in that code. Not yet ready for 2.6.12 probably.
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/um/drivers/stdio_console.c')
-rw-r--r-- | arch/um/drivers/stdio_console.c | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/arch/um/drivers/stdio_console.c b/arch/um/drivers/stdio_console.c index e604d7c87695..361d0be342b3 100644 --- a/arch/um/drivers/stdio_console.c +++ b/arch/um/drivers/stdio_console.c | |||
@@ -116,8 +116,11 @@ static struct tty_operations console_ops = { | |||
116 | .open = con_open, | 116 | .open = con_open, |
117 | .close = line_close, | 117 | .close = line_close, |
118 | .write = line_write, | 118 | .write = line_write, |
119 | .put_char = line_put_char, | ||
119 | .write_room = line_write_room, | 120 | .write_room = line_write_room, |
120 | .chars_in_buffer = line_chars_in_buffer, | 121 | .chars_in_buffer = line_chars_in_buffer, |
122 | .flush_buffer = line_flush_buffer, | ||
123 | .flush_chars = line_flush_chars, | ||
121 | .set_termios = line_set_termios, | 124 | .set_termios = line_set_termios, |
122 | .ioctl = line_ioctl, | 125 | .ioctl = line_ioctl, |
123 | }; | 126 | }; |
@@ -126,10 +129,11 @@ static void uml_console_write(struct console *console, const char *string, | |||
126 | unsigned len) | 129 | unsigned len) |
127 | { | 130 | { |
128 | struct line *line = &vts[console->index]; | 131 | struct line *line = &vts[console->index]; |
132 | unsigned long flags; | ||
129 | 133 | ||
130 | down(&line->sem); | 134 | spin_lock_irqsave(&line->lock, flags); |
131 | console_write_chan(&line->chan_list, string, len); | 135 | console_write_chan(&line->chan_list, string, len); |
132 | up(&line->sem); | 136 | spin_unlock_irqrestore(&line->lock, flags); |
133 | } | 137 | } |
134 | 138 | ||
135 | static struct tty_driver *uml_console_device(struct console *c, int *index) | 139 | static struct tty_driver *uml_console_device(struct console *c, int *index) |
@@ -192,14 +196,3 @@ static int console_chan_setup(char *str) | |||
192 | } | 196 | } |
193 | __setup("con", console_chan_setup); | 197 | __setup("con", console_chan_setup); |
194 | __channel_help(console_chan_setup, "con"); | 198 | __channel_help(console_chan_setup, "con"); |
195 | |||
196 | /* | ||
197 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
198 | * Emacs will notice this stuff at the end of the file and automatically | ||
199 | * adjust the settings for this buffer only. This must remain at the end | ||
200 | * of the file. | ||
201 | * --------------------------------------------------------------------------- | ||
202 | * Local variables: | ||
203 | * c-file-style: "linux" | ||
204 | * End: | ||
205 | */ | ||