[PATCH v2 01/10] workqueue: devres: Add device-managed allocate workqueue
Tejun Heo
tj at kernel.org
Thu Mar 5 20:08:43 PST 2026
On Thu, Mar 05, 2026 at 10:45:40PM +0100, Krzysztof Kozlowski wrote:
> Add a Resource-managed version of alloc_workqueue() to fix common
> problem of drivers mixing devm() calls with destroy_workqueue. Such
> naive and discouraged driver approach leads to difficult to debug bugs
> when the driver:
>
> 1. Allocates workqueue in standard way and destroys it in driver
> remove() callback,
> 2. Sets work struct with devm_work_autocancel(),
> 3. Registers interrupt handler with devm_request_threaded_irq().
>
> Which leads to following unbind/removal path:
>
> 1. destroy_workqueue() via driver remove(),
> Any interrupt coming now would still execute the interrupt handler,
> which queues work on destroyed workqueue.
> 2. devm_irq_release(),
> 3. devm_work_drop() -> cancel_work_sync() on destroyed workqueue.
>
> devm_alloc_workqueue() has two benefits:
> 1. Solves above problem of mix-and-match devres and non-devres code in
> driver,
> 2. Simplify any sane drivers which were correctly using
> alloc_workqueue() + devm_add_action_or_reset().
>
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski at oss.qualcomm.com>
Acked-by: Tejun Heo <tj at kernel.org>
Please let me know how you wanna route the patch.
Thanks.
--
tejun
More information about the Linux-mediatek
mailing list