aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/drivers/stdio_console.c
diff options
context:
space:
mode:
authorJeff Dike <jdike@addtoit.com>2007-02-10 04:43:53 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-02-11 13:51:21 -0500
commitf28169d2000177e8b72ccc6d72887be779dceca8 (patch)
tree0ef842014c67d8a136cc26c99113b69e2ede87ea /arch/um/drivers/stdio_console.c
parentd79a580936396bbcd2f4fae2c6215f9cf81e3c0d (diff)
[PATCH] uml: return hotplug errors to host
I noticed that errors happening while hotplugging devices from the host were never returned back to the mconsole client. In some cases, success was returned instead of even an information-free error. This patch cleans that up by having the low-level configuration code pass back an error string along with an error code. At the top level, which knows whether it is early boot time or responding to an mconsole request, the string is printk'd or returned to the mconsole client. There are also whitespace and trivial code cleanups in the surrounding code. Signed-off-by: Jeff Dike <jdike@addtoit.com> Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/um/drivers/stdio_console.c')
-rw-r--r--arch/um/drivers/stdio_console.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/arch/um/drivers/stdio_console.c b/arch/um/drivers/stdio_console.c
index 9b2dd0b8a43b..3cbfe3a88607 100644
--- a/arch/um/drivers/stdio_console.c
+++ b/arch/um/drivers/stdio_console.c
@@ -52,9 +52,9 @@ static struct chan_opts opts = {
52 .in_kernel = 1, 52 .in_kernel = 1,
53}; 53};
54 54
55static int con_config(char *str); 55static int con_config(char *str, char **error_out);
56static int con_get_config(char *dev, char *str, int size, char **error_out); 56static int con_get_config(char *dev, char *str, int size, char **error_out);
57static int con_remove(int n); 57static int con_remove(int n, char **con_remove);
58 58
59static struct line_driver driver = { 59static struct line_driver driver = {
60 .name = "UML console", 60 .name = "UML console",
@@ -87,9 +87,9 @@ static struct line vts[MAX_TTYS] = { LINE_INIT(CONFIG_CON_ZERO_CHAN, &driver),
87 [ 1 ... MAX_TTYS - 1 ] = 87 [ 1 ... MAX_TTYS - 1 ] =
88 LINE_INIT(CONFIG_CON_CHAN, &driver) }; 88 LINE_INIT(CONFIG_CON_CHAN, &driver) };
89 89
90static int con_config(char *str) 90static int con_config(char *str, char **error_out)
91{ 91{
92 return line_config(vts, ARRAY_SIZE(vts), str, &opts); 92 return line_config(vts, ARRAY_SIZE(vts), str, &opts, error_out);
93} 93}
94 94
95static int con_get_config(char *dev, char *str, int size, char **error_out) 95static int con_get_config(char *dev, char *str, int size, char **error_out)
@@ -97,9 +97,9 @@ static int con_get_config(char *dev, char *str, int size, char **error_out)
97 return line_get_config(dev, vts, ARRAY_SIZE(vts), str, size, error_out); 97 return line_get_config(dev, vts, ARRAY_SIZE(vts), str, size, error_out);
98} 98}
99 99
100static int con_remove(int n) 100static int con_remove(int n, char **error_out)
101{ 101{
102 return line_remove(vts, ARRAY_SIZE(vts), n); 102 return line_remove(vts, ARRAY_SIZE(vts), n, error_out);
103} 103}
104 104
105static int con_open(struct tty_struct *tty, struct file *filp) 105static int con_open(struct tty_struct *tty, struct file *filp)
@@ -192,7 +192,15 @@ __uml_exitcall(console_exit);
192 192
193static int console_chan_setup(char *str) 193static int console_chan_setup(char *str)
194{ 194{
195 return line_setup(vts, ARRAY_SIZE(vts), str); 195 char *error;
196 int ret;
197
198 ret = line_setup(vts, ARRAY_SIZE(vts), str, &error);
199 if(ret < 0)
200 printk(KERN_ERR "Failed to set up console with "
201 "configuration string \"%s\" : %s\n", str, error);
202
203 return 1;
196} 204}
197__setup("con", console_chan_setup); 205__setup("con", console_chan_setup);
198__channel_help(console_chan_setup, "con"); 206__channel_help(console_chan_setup, "con");