The migration notifier may run in a context where it is not safe to enqueue a work item. For example: (__queue_work+0x1f4/0x40c) (queue_work_on+0x34/0x44) (dbs_migration_notify+0x2c/0x40) (notifier_call_chain+0x38/0x68) (__atomic_notifier_call_chain+0x34/0x44) (atomic_notifier_call_chain+0x14/0x18) (try_to_wake_up+0x350/0x36c) (autoremove_wake_function+0xc/0x34) (__wake_up_common+0x48/0x7c) (__wake_up+0x3c/0x50) (trustee_thread+0x1d0/0x528) (kthread+0x80/0x8c) The trustee code already takes a lock internal to the workqueue implementation and is not expecting a wake up to come around and enter the workqueue code again, where the same lock will be needed. Instead of relying on a workqueue, use a per-CPU kthread to do the frequency syncing. Change-Id: I7555ee40867792fa8ec4ea8f9a6309323775e797 Signed-off-by: Steve Muckle <smuckle@codeaurora.org> Signed-off-by: Ajay Dudani <adudani@codeaurora.org>