diff options
author | Ian Abbott <abbotti@mev.co.uk> | 2015-10-09 12:26:52 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-10-13 10:28:40 -0700 |
commit | d5eb3a742109015cd794e536fe0968197b917e05 (patch) | |
tree | 1026682877418570aaea093af554b84b9e5d37a4 | |
parent | 3834234f99a07d1a84918cb15e9431420c5405f4 (diff) |
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>
-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; } |