diff options
author | Jiri Slaby <jslaby@suse.cz> | 2013-01-03 09:53:06 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-01-16 01:30:15 -0500 |
commit | 2e124b4a390ca85325fae75764bef92f0547fa25 (patch) | |
tree | 5519fbcdbe954e79b271ea6d31ac5a4dc754c4f5 /drivers/ipack | |
parent | d6c53c0e9bd0a83f9f9ddbc9fd80141a54d83896 (diff) |
TTY: switch tty_flip_buffer_push
Now, we start converting tty buffer functions to actually use
tty_port. This will allow us to get rid of the need of tty in many
call sites. Only tty_port will needed and hence no more
tty_port_tty_get in those paths.
Now, the one where most of tty_port_tty_get gets removed:
tty_flip_buffer_push.
IOW we also closed all the races in drivers not using tty_port_tty_get
at all yet.
Also we move tty_flip_buffer_push declaration from include/linux/tty.h
to include/linux/tty_flip.h to all others while we are changing it
anyway.
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/ipack')
-rw-r--r-- | drivers/ipack/devices/ipoctal.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/drivers/ipack/devices/ipoctal.c b/drivers/ipack/devices/ipoctal.c index 8e0ed663ba9b..ab20a0851dd2 100644 --- a/drivers/ipack/devices/ipoctal.c +++ b/drivers/ipack/devices/ipoctal.c | |||
@@ -133,8 +133,7 @@ static int ipoctal_get_icount(struct tty_struct *tty, | |||
133 | return 0; | 133 | return 0; |
134 | } | 134 | } |
135 | 135 | ||
136 | static void ipoctal_irq_rx(struct ipoctal_channel *channel, | 136 | static void ipoctal_irq_rx(struct ipoctal_channel *channel, u8 sr) |
137 | struct tty_struct *tty, u8 sr) | ||
138 | { | 137 | { |
139 | struct tty_port *port = &channel->tty_port; | 138 | struct tty_port *port = &channel->tty_port; |
140 | unsigned char value; | 139 | unsigned char value; |
@@ -176,7 +175,7 @@ static void ipoctal_irq_rx(struct ipoctal_channel *channel, | |||
176 | sr = ioread8(&channel->regs->r.sr); | 175 | sr = ioread8(&channel->regs->r.sr); |
177 | } while (isr & channel->isr_rx_rdy_mask); | 176 | } while (isr & channel->isr_rx_rdy_mask); |
178 | 177 | ||
179 | tty_flip_buffer_push(tty); | 178 | tty_flip_buffer_push(port); |
180 | } | 179 | } |
181 | 180 | ||
182 | static void ipoctal_irq_tx(struct ipoctal_channel *channel) | 181 | static void ipoctal_irq_tx(struct ipoctal_channel *channel) |
@@ -209,15 +208,11 @@ static void ipoctal_irq_tx(struct ipoctal_channel *channel) | |||
209 | static void ipoctal_irq_channel(struct ipoctal_channel *channel) | 208 | static void ipoctal_irq_channel(struct ipoctal_channel *channel) |
210 | { | 209 | { |
211 | u8 isr, sr; | 210 | u8 isr, sr; |
212 | struct tty_struct *tty; | ||
213 | 211 | ||
214 | /* If there is no client, skip the check */ | 212 | /* If there is no client, skip the check */ |
215 | if (!atomic_read(&channel->open)) | 213 | if (!atomic_read(&channel->open)) |
216 | return; | 214 | return; |
217 | 215 | ||
218 | tty = tty_port_tty_get(&channel->tty_port); | ||
219 | if (!tty) | ||
220 | return; | ||
221 | /* The HW is organized in pair of channels. See which register we need | 216 | /* The HW is organized in pair of channels. See which register we need |
222 | * to read from */ | 217 | * to read from */ |
223 | isr = ioread8(&channel->block_regs->r.isr); | 218 | isr = ioread8(&channel->block_regs->r.isr); |
@@ -236,14 +231,13 @@ static void ipoctal_irq_channel(struct ipoctal_channel *channel) | |||
236 | 231 | ||
237 | /* RX data */ | 232 | /* RX data */ |
238 | if ((isr & channel->isr_rx_rdy_mask) && (sr & SR_RX_READY)) | 233 | if ((isr & channel->isr_rx_rdy_mask) && (sr & SR_RX_READY)) |
239 | ipoctal_irq_rx(channel, tty, sr); | 234 | ipoctal_irq_rx(channel, sr); |
240 | 235 | ||
241 | /* TX of each character */ | 236 | /* TX of each character */ |
242 | if ((isr & channel->isr_tx_rdy_mask) && (sr & SR_TX_READY)) | 237 | if ((isr & channel->isr_tx_rdy_mask) && (sr & SR_TX_READY)) |
243 | ipoctal_irq_tx(channel); | 238 | ipoctal_irq_tx(channel); |
244 | 239 | ||
245 | tty_flip_buffer_push(tty); | 240 | tty_flip_buffer_push(&channel->tty_port); |
246 | tty_kref_put(tty); | ||
247 | } | 241 | } |
248 | 242 | ||
249 | static irqreturn_t ipoctal_irq_handler(void *arg) | 243 | static irqreturn_t ipoctal_irq_handler(void *arg) |