mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-13 08:04:45 +08:00
staging: comedi: check command direction in poll() file operation
`comedi_poll()` handles the poll() file operation for comedi devices. If no asynchronous command has been set up on the current "read" subdevice, it sets the `POLLIN` and `POLLRDNORM` bits in the return value to indicate that the read() file operation would not block as it would return an error. Add a check so it also does that if the asynchronous command has been set up in the "write" direction as that also causes the read() file operation to return an error. Similarly, if no asynchronous command has need set up on the current "write" subdevice, it sets the `POLLOUT` and `POLLWRNORM` bits in the return value to indicate that the write() file operation would not block as it would return an error. Add a check so it also does that if the asynchronous command has been set up in the "read" direction as that also causes the write() file operation to return an error. 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>
This commit is contained in:
parent
f739850941
commit
662c722b64
@ -2017,6 +2017,7 @@ static unsigned int comedi_poll(struct file *file, poll_table *wait)
|
||||
if (s && s->async) {
|
||||
poll_wait(file, &s->async->wait_head, wait);
|
||||
if (!s->busy || !comedi_is_subdevice_running(s) ||
|
||||
(s->async->cmd.flags & CMDF_WRITE) ||
|
||||
comedi_buf_read_n_available(s) > 0)
|
||||
mask |= POLLIN | POLLRDNORM;
|
||||
}
|
||||
@ -2028,6 +2029,7 @@ static unsigned int comedi_poll(struct file *file, poll_table *wait)
|
||||
poll_wait(file, &s->async->wait_head, wait);
|
||||
comedi_buf_write_alloc(s, s->async->prealloc_bufsz);
|
||||
if (!s->busy || !comedi_is_subdevice_running(s) ||
|
||||
!(s->async->cmd.flags & CMDF_WRITE) ||
|
||||
comedi_buf_write_n_allocated(s) >= bps)
|
||||
mask |= POLLOUT | POLLWRNORM;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user