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

staging: comedi: drivers: fix possible bug in comedi_handle_events()

This function assumes that the async subdevice has a cancel() function.
It looks like all the current comedi drivers implement a cancel() for
the async subdevices except for the dt2814 analog input usbdevice.

Fix comedi_handle_events() so it does not try to call a non-existent
cancel() function.

Add a dev_warn() to __comedi_device_postconfig_async() so that any new
driver authors will be reminded to implement the cancel().
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f91852ce
...@@ -564,7 +564,7 @@ unsigned int comedi_handle_events(struct comedi_device *dev, ...@@ -564,7 +564,7 @@ unsigned int comedi_handle_events(struct comedi_device *dev,
if (events == 0) if (events == 0)
return events; return events;
if (events & COMEDI_CB_CANCEL_MASK) if ((events & COMEDI_CB_CANCEL_MASK) && s->cancel)
s->cancel(dev, s); s->cancel(dev, s);
comedi_event(dev, s); comedi_event(dev, s);
...@@ -625,6 +625,9 @@ static int __comedi_device_postconfig_async(struct comedi_device *dev, ...@@ -625,6 +625,9 @@ static int __comedi_device_postconfig_async(struct comedi_device *dev,
"async subdevices must have a do_cmdtest() function\n"); "async subdevices must have a do_cmdtest() function\n");
return -EINVAL; return -EINVAL;
} }
if (!s->cancel)
dev_warn(dev->class_dev,
"async subdevices should have a cancel() function\n");
async = kzalloc(sizeof(*async), GFP_KERNEL); async = kzalloc(sizeof(*async), GFP_KERNEL);
if (!async) if (!async)
......
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