diff options
author | Shaun Ruffell <sruffell@digium.com> | 2010-12-21 16:09:31 +0000 |
---|---|---|
committer | Shaun Ruffell <sruffell@digium.com> | 2010-12-21 16:09:31 +0000 |
commit | fa6405435ee25f90d7f721f804976e15dba98ac6 (patch) | |
tree | 95b8aafff07e1144e55498c598f3a25c5f77389d /drivers | |
parent | 90fcb5a4c3619f67cc5f696f68c00d22931c6266 (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.c | 38 |
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) |