diff options
author | Ian Abbott | 2015-10-09 13:26:52 +0200 |
---|---|---|
committer | Greg Kroah-Hartman | 2015-10-13 19:28:40 +0200 |
commit | d5eb3a742109015cd794e536fe0968197b917e05 (patch) | |
tree | 1026682877418570aaea093af554b84b9e5d37a4 /drivers/staging/comedi/comedi_fops.c | |
parent | staging: comedi: check command started by file being polled (diff) | |
download | kernel-qcow2-linux-d5eb3a742109015cd794e536fe0968197b917e05.tar.gz kernel-qcow2-linux-d5eb3a742109015cd794e536fe0968197b917e05.tar.xz kernel-qcow2-linux-d5eb3a742109015cd794e536fe0968197b917e05.zip |
staging: comedi: don't use mutex when polling file
The main mutex in a comedi device can get held for quite a while when
processing comedi instructions, so for performance reasons, the "read"
and "write" file operations do not use it; they use use the
`attach_lock` rwsemaphore to protect against the comedi device becoming
detached at an inopportune moment. Do the same for the "poll" file
operation.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/comedi_fops.c')
-rw-r--r-- | drivers/staging/comedi/comedi_fops.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 1d6bef285821..fe25287c5688 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -2264,7 +2264,7 @@ static unsigned int comedi_poll(struct file *file, poll_table *wait) struct comedi_device *dev = cfp->dev; struct comedi_subdevice *s, *s_read; - mutex_lock(&dev->mutex); + down_read(&dev->attach_lock); if (!dev->attached) { dev_dbg(dev->class_dev, "no driver attached\n"); @@ -2294,7 +2294,7 @@ static unsigned int comedi_poll(struct file *file, poll_table *wait) } done: - mutex_unlock(&dev->mutex); + up_read(&dev->attach_lock); return mask; } |