Commit e1af4980 authored by Chris Rankin's avatar Chris Rankin Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (5178): Avoid race when deregistering the IR control for dvb-usb



The work item function is dvb_usb_read_remote_control():
        INIT_WORK(&d->rc_query_work, dvb_usb_read_remote_control, d);
and the last piece of work it does is:
        schedule_delayed_work(&d->rc_query_work,msecs_to_jiffies(d->props.rc_interval));
Hence you need to call "cancel_rearming_delayed_work()" and not
"cancel_delayed_work()", correct?  I certainly haven't seen this oops
reoccur since I applied this patch.
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 705d41e5
...@@ -151,7 +151,7 @@ int dvb_usb_remote_init(struct dvb_usb_device *d) ...@@ -151,7 +151,7 @@ int dvb_usb_remote_init(struct dvb_usb_device *d)
int dvb_usb_remote_exit(struct dvb_usb_device *d) int dvb_usb_remote_exit(struct dvb_usb_device *d)
{ {
if (d->state & DVB_USB_STATE_REMOTE) { if (d->state & DVB_USB_STATE_REMOTE) {
cancel_delayed_work(&d->rc_query_work); cancel_rearming_delayed_work(&d->rc_query_work);
flush_scheduled_work(); flush_scheduled_work();
input_unregister_device(d->rc_input_dev); input_unregister_device(d->rc_input_dev);
} }
......
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