diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2011-09-10 08:39:18 -0400 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2012-03-25 00:29:54 +0100 |
commit | 10c890c0a303070652f5374ea31a0b29350d14d9 (patch) | |
tree | 34077d8fb7d8d81d761f2c28021310ce821f4ceb /arch/um/drivers/chan_kern.c | |
parent | 0fcd719934cd3521ae4a977f454e75e2be60b7ff (diff) | |
download | linux-10c890c0a303070652f5374ea31a0b29350d14d9.tar.bz2 |
um: switch close_chan() to struct line
... and switch chan_interrupt() to directly calling close_one_chan(),
so we can lose delay_free_irq argument of close_chan() as well.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/um/drivers/chan_kern.c')
-rw-r--r-- | arch/um/drivers/chan_kern.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c index 4744b5840fa9..ca4c7ebfd0aa 100644 --- a/arch/um/drivers/chan_kern.c +++ b/arch/um/drivers/chan_kern.c @@ -185,7 +185,7 @@ int enable_chan(struct line *line) return 0; out_close: - close_chan(&line->chan_list, 0); + close_chan(line); return err; } @@ -246,7 +246,7 @@ static void close_one_chan(struct chan *chan, int delay_free_irq) chan->fd = -1; } -void close_chan(struct list_head *chans, int delay_free_irq) +void close_chan(struct line *line) { struct chan *chan; @@ -255,8 +255,8 @@ void close_chan(struct list_head *chans, int delay_free_irq) * state. Then, the first one opened will have the original state, * so it must be the last closed. */ - list_for_each_entry_reverse(chan, chans, list) { - close_one_chan(chan, delay_free_irq); + list_for_each_entry_reverse(chan, &line->chan_list, list) { + close_one_chan(chan, 0); } } @@ -587,10 +587,12 @@ void chan_interrupt(struct line *line, struct tty_struct *tty, int irq) if (chan->primary) { if (tty != NULL) tty_hangup(tty); - close_chan(&line->chan_list, 1); - return; + if (line->chan_out != chan) + close_one_chan(line->chan_out, 1); } - else close_one_chan(chan, 1); + close_one_chan(chan, 1); + if (chan->primary) + return; } out: if (tty) |