Commit ca081b1d authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: comedi_fops: cleanup comedi_poll()

Consolidate the local variables 'read_subdev' and 'write_subdev' into a
single local variable 's'.

Use comedi_dev_from_minor() to simplify the return -ENODEV tests.

Use a goto in the !dev->attached test so that the mutex_unlock() call
is in a common place.

Cleanup the formating of the || in the read and write subdevice poll
code.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 0e700923
...@@ -1823,49 +1823,40 @@ static unsigned int comedi_poll(struct file *file, poll_table *wait) ...@@ -1823,49 +1823,40 @@ static unsigned int comedi_poll(struct file *file, poll_table *wait)
{ {
unsigned int mask = 0; unsigned int mask = 0;
const unsigned minor = iminor(file->f_dentry->d_inode); const unsigned minor = iminor(file->f_dentry->d_inode);
struct comedi_subdevice *read_subdev;
struct comedi_subdevice *write_subdev;
struct comedi_file_info *info = comedi_file_info_from_minor(minor); struct comedi_file_info *info = comedi_file_info_from_minor(minor);
struct comedi_device *dev; struct comedi_device *dev = comedi_dev_from_minor(minor);
struct comedi_subdevice *s;
if (info == NULL) if (!dev)
return -ENODEV;
dev = info->device;
if (dev == NULL)
return -ENODEV; return -ENODEV;
mutex_lock(&dev->mutex); mutex_lock(&dev->mutex);
if (!dev->attached) { if (!dev->attached) {
DPRINTK("no driver configured on comedi%i\n", dev->minor); DPRINTK("no driver configured on comedi%i\n", dev->minor);
mutex_unlock(&dev->mutex); goto done;
return 0;
} }
mask = 0; s = comedi_read_subdevice(info);
read_subdev = comedi_read_subdevice(info); if (s) {
if (read_subdev) { poll_wait(file, &s->async->wait_head, wait);
poll_wait(file, &read_subdev->async->wait_head, wait); if (!s->busy || !(comedi_get_subdevice_runflags(s) & SRF_RUNNING) ||
if (!read_subdev->busy comedi_buf_read_n_available(s->async) > 0)
|| comedi_buf_read_n_available(read_subdev->async) > 0
|| !(comedi_get_subdevice_runflags(read_subdev) &
SRF_RUNNING)) {
mask |= POLLIN | POLLRDNORM; mask |= POLLIN | POLLRDNORM;
}
} }
write_subdev = comedi_write_subdevice(info);
if (write_subdev) { s = comedi_write_subdevice(info);
poll_wait(file, &write_subdev->async->wait_head, wait); if (s) {
comedi_buf_write_alloc(write_subdev->async, unsigned int bps = bytes_per_sample(s->async->subdevice);
write_subdev->async->prealloc_bufsz);
if (!write_subdev->busy poll_wait(file, &s->async->wait_head, wait);
|| !(comedi_get_subdevice_runflags(write_subdev) & comedi_buf_write_alloc(s->async, s->async->prealloc_bufsz);
SRF_RUNNING) if (!s->busy || !(comedi_get_subdevice_runflags(s) & SRF_RUNNING) ||
|| comedi_buf_write_n_allocated(write_subdev->async) >= comedi_buf_write_n_allocated(s->async) >= bps)
bytes_per_sample(write_subdev->async->subdevice)) {
mask |= POLLOUT | POLLWRNORM; mask |= POLLOUT | POLLWRNORM;
}
} }
done:
mutex_unlock(&dev->mutex); mutex_unlock(&dev->mutex);
return mask; return mask;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment