diff options
author | Chris Rankin <rankincj@yahoo.com> | 2007-02-06 20:29:07 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2007-02-21 13:35:31 -0200 |
commit | e1af498063007cee5d7ec5af1e0cf25c088d05c7 (patch) | |
tree | 39067ca8764c1993aca6ed777f9eae4dae43335d | |
parent | 705d41e5da674b449f900df97ad13ebe53e82b82 (diff) | |
download | op-kernel-dev-e1af498063007cee5d7ec5af1e0cf25c088d05c7.zip op-kernel-dev-e1af498063007cee5d7ec5af1e0cf25c088d05c7.tar.gz |
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: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
-rw-r--r-- | drivers/media/dvb/dvb-usb/dvb-usb-remote.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-remote.c b/drivers/media/dvb/dvb-usb/dvb-usb-remote.c index 19ff597..9511a31 100644 --- a/drivers/media/dvb/dvb-usb/dvb-usb-remote.c +++ b/drivers/media/dvb/dvb-usb/dvb-usb-remote.c @@ -151,7 +151,7 @@ int dvb_usb_remote_init(struct dvb_usb_device *d) int dvb_usb_remote_exit(struct dvb_usb_device *d) { 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(); input_unregister_device(d->rc_input_dev); } |