diff options
author | Ian Abbott <abbotti@mev.co.uk> | 2015-03-27 15:13:05 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-04-03 13:11:54 +0200 |
commit | aa33122f005069cb3408acf609b78b9a62f58021 (patch) | |
tree | f224a5a19b66c22593c0b9ad4e66fc087da0fbd7 /drivers/staging/comedi/comedi_fops.c | |
parent | 922d9ced718268e464a0884ecee09da436e00d70 (diff) |
staging: comedi: comedi_fops: send SIGIO according to command direction
`comedi_event()` is called from low-level drivers to handle comedi
asynchronous command event flags. Some events cause waiting tasks to be
woken up, and a `SIGIO` signal to be sent via `kill_fasync()`. The
signal code is `POLL_OUT` if the subdevice supports commands in the
"write" direction, or `POLL_IN` for the "read" direction. If the
subdevice supports commands in either direction, it sends two `SIGIO`
signals, one with each code. Change that latter case to only send one
`SIGIO` signal, using the direction of the current command to determine
the signal code. If the `CMDF_WRITE` flag is set in the current
command, it's in the "write" direction, otherwise it's in the "read"
direction.
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 | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 68ced20f5ca5..7ae605f6bbb6 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -2674,11 +2674,11 @@ void comedi_event(struct comedi_device *dev, struct comedi_subdevice *s) } if (async->cb_mask & events) { + int si_code; + wake_up_interruptible(&async->wait_head); - if (s->subdev_flags & SDF_CMD_READ) - kill_fasync(&dev->async_queue, SIGIO, POLL_IN); - if (s->subdev_flags & SDF_CMD_WRITE) - kill_fasync(&dev->async_queue, SIGIO, POLL_OUT); + si_code = async->cmd.flags & CMDF_WRITE ? POLL_OUT : POLL_IN; + kill_fasync(&dev->async_queue, SIGIO, si_code); } } EXPORT_SYMBOL_GPL(comedi_event); |