aboutsummaryrefslogtreecommitdiffstats
path: root/arch/um/drivers/chan_kern.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2011-09-10 08:39:18 -0400
committerRichard Weinberger <richard@nod.at>2012-03-24 19:29:54 -0400
commit10c890c0a303070652f5374ea31a0b29350d14d9 (patch)
tree34077d8fb7d8d81d761f2c28021310ce821f4ceb /arch/um/drivers/chan_kern.c
parent0fcd719934cd3521ae4a977f454e75e2be60b7ff (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.c16
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
249void close_chan(struct list_head *chans, int delay_free_irq) 249void 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)