aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/drivers/chan_kern.c
diff options
context:
space:
mode:
authorJeff Dike <jdike@addtoit.com>2006-01-06 03:18:55 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-06 11:33:46 -0500
commit1f80171e81ed0d08dcdb6efe239d7b929aef498f (patch)
treef6f72268ddee265b46ceb698cdff6daa7cba6250 /arch/um/drivers/chan_kern.c
parent418e55d49b0ec7d2e7a033f2dd083f5b2ab7d119 (diff)
[PATCH] uml: move console configuration
This patch changes when console devices are configured in order to prepare the ground for the next patch. parse_chan_pair is now done earlier, when initcalls are run, rather than when the device is opened. When a host device disappears, the channel list is closed, but not freed. This is required by the previous change. line_config now takes the options structure as an argument, and line_open doesn't. Signed-off-by: Jeff Dike <jdike@addtoit.com> Cc: 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/chan_kern.c')
-rw-r--r--arch/um/drivers/chan_kern.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c
index 59c9b3f7c840..31b69c4ea800 100644
--- a/arch/um/drivers/chan_kern.c
+++ b/arch/um/drivers/chan_kern.c
@@ -311,14 +311,12 @@ int console_write_chan(struct list_head *chans, const char *buf, int len)
311int console_open_chan(struct line *line, struct console *co, 311int console_open_chan(struct line *line, struct console *co,
312 struct chan_opts *opts) 312 struct chan_opts *opts)
313{ 313{
314 if (!list_empty(&line->chan_list)) 314 int err;
315 return 0; 315
316 err = open_chan(&line->chan_list);
317 if(err)
318 return err;
316 319
317 if (0 != parse_chan_pair(line->init_str, &line->chan_list,
318 co->index, opts))
319 return -1;
320 if (0 != open_chan(&line->chan_list))
321 return -1;
322 printk("Console initialized on /dev/%s%d\n",co->name,co->index); 320 printk("Console initialized on /dev/%s%d\n",co->name,co->index);
323 return 0; 321 return 0;
324} 322}
@@ -596,13 +594,11 @@ void chan_interrupt(struct list_head *chans, struct work_struct *task,
596 tty_hangup(tty); 594 tty_hangup(tty);
597 line_disable(tty, irq); 595 line_disable(tty, irq);
598 close_chan(chans); 596 close_chan(chans);
599 free_chan(chans);
600 return; 597 return;
601 } 598 }
602 else { 599 else {
603 if(chan->ops->close != NULL) 600 if(chan->ops->close != NULL)
604 chan->ops->close(chan->fd, chan->data); 601 chan->ops->close(chan->fd, chan->data);
605 free_one_chan(chan);
606 } 602 }
607 } 603 }
608 } 604 }