From: Tejun Heo Date: Tue, 21 Aug 2012 20:18:24 +0000 (-0700) Subject: workqueue: reimplement cancel_delayed_work() using try_to_grab_pending() X-Git-Tag: omap-for-v3.7-rc1/fixes-cpufreq-signed~52^2~13 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57b30ae77bf00d2318df711ef9a4d2a9be0a3a2a;p=pandora-kernel.git workqueue: reimplement cancel_delayed_work() using try_to_grab_pending() cancel_delayed_work() can't be called from IRQ handlers due to its use of del_timer_sync() and can't cancel work items which are already transferred from timer to worklist. Also, unlike other flush and cancel functions, a canceled delayed_work would still point to the last associated cpu_workqueue. If the workqueue is destroyed afterwards and the work item is re-used on a different workqueue, the queueing code can oops trying to dereference already freed cpu_workqueue. This patch reimplements cancel_delayed_work() using try_to_grab_pending() and set_work_cpu_and_clear_pending(). This allows the function to be called from IRQ handlers and makes its behavior consistent with other flush / cancel functions. Signed-off-by: Tejun Heo Cc: Linus Torvalds Cc: Ingo Molnar Cc: Andrew Morton --- Reading git-diff-tree failed