summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorShaun Ruffell <sruffell@digium.com>2010-12-21 16:09:31 +0000
committerShaun Ruffell <sruffell@digium.com>2010-12-21 16:09:31 +0000
commitfa6405435ee25f90d7f721f804976e15dba98ac6 (patch)
tree95b8aafff07e1144e55498c598f3a25c5f77389d /drivers
parent90fcb5a4c3619f67cc5f696f68c00d22931c6266 (diff)
dahdi: Cleanup in the dahdi_chan_poll function.
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Acked-by: Russ Meyerreicks <rmeyerreicks@digium.com> git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9550 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers')
-rw-r--r--drivers/dahdi/dahdi-base.c38
1 files changed, 14 insertions, 24 deletions
diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c
index f26eab9..adf31c3 100644
--- a/drivers/dahdi/dahdi-base.c
+++ b/drivers/dahdi/dahdi-base.c
@@ -8189,32 +8189,22 @@ static unsigned int dahdi_timer_poll(struct file *file, struct poll_table_struct
static unsigned int
dahdi_chan_poll(struct file *file, struct poll_table_struct *wait_table)
{
-
- struct dahdi_chan *const chan = file->private_data;
- int ret;
+ struct dahdi_chan *const c = file->private_data;
+ int ret = 0;
unsigned long flags;
- /* do the poll wait */
- if (chan) {
- poll_wait(file, &chan->waitq, wait_table);
- ret = 0; /* start with nothing to return */
- spin_lock_irqsave(&chan->lock, flags);
- /* if at least 1 write buffer avail */
- if (chan->inwritebuf > -1) {
- ret |= POLLOUT | POLLWRNORM;
- }
- if ((chan->outreadbuf > -1) && !chan->rxdisable) {
- ret |= POLLIN | POLLRDNORM;
- }
- if (chan->eventoutidx != chan->eventinidx)
- {
- /* Indicate an exception */
- ret |= POLLPRI;
- }
- spin_unlock_irqrestore(&chan->lock, flags);
- } else
- ret = -EINVAL;
- return(ret); /* return what we found */
+ if (unlikely(!c))
+ return -EINVAL;
+
+ poll_wait(file, &c->waitq, wait_table);
+
+ spin_lock_irqsave(&c->lock, flags);
+ ret |= (c->inwritebuf > -1) ? POLLOUT|POLLWRNORM : 0;
+ ret |= ((c->outreadbuf > -1) && !c->rxdisable) ? POLLIN|POLLRDNORM : 0;
+ ret |= (c->eventoutidx != c->eventinidx) ? POLLPRI : 0;
+ spin_unlock_irqrestore(&c->lock, flags);
+
+ return ret;
}
static unsigned int dahdi_poll(struct file *file, struct poll_table_struct *wait_table)