summaryrefslogtreecommitdiffstats
path: root/drivers/staging/comedi/comedi_fops.c
diff options
context:
space:
mode:
authorIan Abbott2015-10-09 13:26:52 +0200
committerGreg Kroah-Hartman2015-10-13 19:28:40 +0200
commitd5eb3a742109015cd794e536fe0968197b917e05 (patch)
tree1026682877418570aaea093af554b84b9e5d37a4 /drivers/staging/comedi/comedi_fops.c
parentstaging: comedi: check command started by file being polled (diff)
downloadkernel-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.c4
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;
}