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: H Hartley Sweeten <hswee...@visionengravers.com>
Cc: Ian Abbott <abbo...@mev.co.uk>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 drivers/staging/comedi/drivers.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c
index e3bbc8f..44511d7 100644
--- a/drivers/staging/comedi/drivers.c
+++ b/drivers/staging/comedi/drivers.c
@@ -564,7 +564,7 @@ unsigned int comedi_handle_events(struct comedi_device *dev,
        if (events == 0)
                return events;
 
-       if (events & COMEDI_CB_CANCEL_MASK)
+       if ((events & COMEDI_CB_CANCEL_MASK) && s->cancel)
                s->cancel(dev, s);
 
        comedi_event(dev, s);
@@ -625,6 +625,9 @@ static int __comedi_device_postconfig_async(struct 
comedi_device *dev,
                         "async subdevices must have a do_cmdtest() 
function\n");
                return -EINVAL;
        }
+       if (!s->cancel)
+               dev_warn(dev->class_dev,
+                        "async subdevices should have a cancel() function\n");
 
        async = kzalloc(sizeof(*async), GFP_KERNEL);
        if (!async)
-- 
2.6.3

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to