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-24 19:29:54 -0400 |
commit | 10c890c0a303070652f5374ea31a0b29350d14d9 (patch) | |
tree | 34077d8fb7d8d81d761f2c28021310ce821f4ceb /arch/um/drivers/chan_kern.c | |
parent | 0fcd719934cd3521ae4a977f454e75e2be60b7ff (diff) |
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) | |||
185 | return 0; | 185 | return 0; |
186 | 186 | ||
187 | out_close: | 187 | out_close: |
188 | close_chan(&line->chan_list, 0); | 188 | close_chan(line); |
189 | return err; | 189 | return err; |
190 | } | 190 | } |
191 | 191 | ||
@@ -246,7 +246,7 @@ static void close_one_chan(struct chan *chan, int delay_free_irq) | |||
246 | chan->fd = -1; | 246 | chan->fd = -1; |
247 | } | 247 | } |
248 | 248 | ||
249 | void close_chan(struct list_head *chans, int delay_free_irq) | 249 | void close_chan(struct line *line) |
250 | { | 250 | { |
251 | struct chan *chan; | 251 | struct chan *chan; |
252 | 252 | ||
@@ -255,8 +255,8 @@ void close_chan(struct list_head *chans, int delay_free_irq) | |||
255 | * state. Then, the first one opened will have the original state, | 255 | * state. Then, the first one opened will have the original state, |
256 | * so it must be the last closed. | 256 | * so it must be the last closed. |
257 | */ | 257 | */ |
258 | list_for_each_entry_reverse(chan, chans, list) { | 258 | list_for_each_entry_reverse(chan, &line->chan_list, list) { |
259 | close_one_chan(chan, delay_free_irq); | 259 | close_one_chan(chan, 0); |
260 | } | 260 | } |
261 | } | 261 | } |
262 | 262 | ||
@@ -587,10 +587,12 @@ void chan_interrupt(struct line *line, struct tty_struct *tty, int irq) | |||
587 | if (chan->primary) { | 587 | if (chan->primary) { |
588 | if (tty != NULL) | 588 | if (tty != NULL) |
589 | tty_hangup(tty); | 589 | tty_hangup(tty); |
590 | close_chan(&line->chan_list, 1); | 590 | if (line->chan_out != chan) |
591 | return; | 591 | close_one_chan(line->chan_out, 1); |
592 | } | 592 | } |
593 | else close_one_chan(chan, 1); | 593 | close_one_chan(chan, 1); |
594 | if (chan->primary) | ||
595 | return; | ||
594 | } | 596 | } |
595 | out: | 597 | out: |
596 | if (tty) | 598 | if (tty) |