* [PATCH 0/3] HID: Replace deprecated create_singlethread_workqueue
@ 2026-10-28 11:18 George Karagounis
2026-10-28 11:18 ` [PATCH 1/3] HID: haptic: Replace create_singlethread_workqueue with alloc_ordered_workqueue George Karagounis
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: George Karagounis @ 2026-10-28 11:18 UTC (permalink / raw)
To: Jiri Kosina, Benjamin Tissoires
Cc: Filipe Laíns, Bastien Nocera, linux-input, linux-kernel,
mail
Hi maintainers,
This patch series replaces the deprecated create_singlethread_workqueue()
with the more efficient alloc_ordered_workqueue() in three HID drivers.
WQ_MEM_RECLAIM is added to ensure the workqueues can process hardware
events under memory pressure.
All three patches have been compile-tested with W=1 and produce no warnings.
Best regards,
George
George Karagounis (3):
HID: haptic: Replace create_singlethread_workqueue with
alloc_ordered_workqueue
HID: elo: Replace create_singlethread_workqueue with
alloc_ordered_workqueue
HID: logitech-hidpp: Replace create_singlethread_workqueue with
alloc_ordered_workqueue
drivers/hid/hid-elo.c | 2 +-
drivers/hid/hid-haptic.c | 2 +-
drivers/hid/hid-logitech-hidpp.c | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
--
2.56.0
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 1/3] HID: haptic: Replace create_singlethread_workqueue with alloc_ordered_workqueue 2026-10-28 11:18 [PATCH 0/3] HID: Replace deprecated create_singlethread_workqueue George Karagounis @ 2026-10-28 11:18 ` George Karagounis 2026-10-28 11:33 ` sashiko-bot 2026-10-28 11:18 ` [PATCH 2/3] HID: elo: " George Karagounis 2026-10-28 11:18 ` [PATCH 3/3] HID: logitech-hidpp: " George Karagounis 2 siblings, 1 reply; 6+ messages in thread From: George Karagounis @ 2026-10-28 11:18 UTC (permalink / raw) To: Jiri Kosina, Benjamin Tissoires Cc: Filipe Laíns, Bastien Nocera, linux-input, linux-kernel, mail create_singlethread_workqueue() is deprecated. Replace it with alloc_ordered_workqueue() for the haptic workqueue. WQ_MEM_RECLAIM is added to ensure hardware events can be processed under memory pressure. Signed-off-by: George Karagounis <mail@taterr.org> --- drivers/hid/hid-haptic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hid/hid-haptic.c b/drivers/hid/hid-haptic.c index 8760eeb08b2c..2f4fcb56aba1 100644 --- a/drivers/hid/hid-haptic.c +++ b/drivers/hid/hid-haptic.c @@ -460,7 +460,7 @@ int hid_haptic_init(struct hid_device *hdev, name = kmalloc(strlen(prefix) + strlen(hdev->name) + 2, GFP_KERNEL); if (name) { sprintf(name, "%s %s", prefix, hdev->name); - haptic->wq = create_singlethread_workqueue(name); + haptic->wq = alloc_ordered_workqueue(name, WQ_MEM_RECLAIM); kfree(name); } if (!haptic->wq) { -- 2.56.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/3] HID: haptic: Replace create_singlethread_workqueue with alloc_ordered_workqueue 2026-10-28 11:18 ` [PATCH 1/3] HID: haptic: Replace create_singlethread_workqueue with alloc_ordered_workqueue George Karagounis @ 2026-10-28 11:33 ` sashiko-bot 0 siblings, 0 replies; 6+ messages in thread From: sashiko-bot @ 2026-10-28 11:33 UTC (permalink / raw) To: George Karagounis; +Cc: linux-input, dmitry.torokhov Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider: - [Critical] HID: haptic: format string bug in hid_haptic_init() workqueue allocation - [Medium] HID: haptic: misuse of WQ_MEM_RECLAIM in hid_haptic_init() -- commit 7db50def49522def9f10d7cdd2d640a9ac167fa3 Author: George Karagounis <taterraster@gmail.com> HID: haptic: Replace create_singlethread_workqueue with alloc_ordered_workqueue This commit replaces the deprecated create_singlethread_workqueue() call in hid_haptic_init() with alloc_ordered_workqueue() using the WQ_MEM_RECLAIM flag. > diff --git a/drivers/hid/hid-haptic.c b/drivers/hid/hid-haptic.c > index 8760eeb08b2cd..2f4fcb56aba13 100644 > --- a/drivers/hid/hid-haptic.c > +++ b/drivers/hid/hid-haptic.c > @@ -460,7 +460,7 @@ int hid_haptic_init(struct hid_device *hdev, > name = kmalloc(strlen(prefix) + strlen(hdev->name) + 2, GFP_KERNEL); > if (name) { > sprintf(name, "%s %s", prefix, hdev->name); > - haptic->wq = create_singlethread_workqueue(name); > + haptic->wq = alloc_ordered_workqueue(name, WQ_MEM_RECLAIM); [Severity: Critical] Does passing name directly as the first argument to alloc_ordered_workqueue() in hid_haptic_init() introduce a format string regression when hdev->name contains % characters? Previously, create_singlethread_workqueue(name) expanded to: include/linux/workqueue.h: #define create_singlethread_workqueue(name) \ alloc_ordered_workqueue("%s", __WQ_LEGACY | WQ_MEM_RECLAIM, name) With alloc_ordered_workqueue(name, WQ_MEM_RECLAIM), name is passed as the printf format string fmt to alloc_workqueue() -> __alloc_workqueue() -> vsnprintf(wq->name, sizeof(wq->name), fmt, args) with no variadic format arguments. Because hdev->name comes from external HID device descriptors or userspace via uhid, any % specifiers in hdev->name will be interpreted by vsnprintf(). Since alloc_ordered_workqueue() accepts a format string and variadic arguments directly, could this pass "%s %s", 0, prefix, hdev->name and avoid the intermediate kmalloc(), sprintf(), and kfree() of name altogether? [Severity: Medium] Also, is WQ_MEM_RECLAIM appropriate for haptic->wq in hid_haptic_init()? The commit message notes that WQ_MEM_RECLAIM is added to ensure hardware events can be processed under memory pressure, but WQ_MEM_RECLAIM is intended for workqueues depended upon during memory reclaim paths and allocates a dedicated rescuer kthread per device. haptic->wq only runs haptic_work_handler() -> play_effect() to transmit force-feedback output reports via hid_hw_output_report() and hid_hw_raw_request(), which is not part of memory reclaim. Dropping __WQ_LEGACY while keeping WQ_MEM_RECLAIM also enables check_flush_dependency() warnings in kernel/workqueue.c if the underlying transport flushes a non-WQ_MEM_RECLAIM workqueue. Should the flags argument be 0 instead? -- Sashiko AI review · https://sashiko.dev/#/patchset/20261028111853.22429-1-mail@taterr.org?part=1 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 2/3] HID: elo: Replace create_singlethread_workqueue with alloc_ordered_workqueue 2026-10-28 11:18 [PATCH 0/3] HID: Replace deprecated create_singlethread_workqueue George Karagounis 2026-10-28 11:18 ` [PATCH 1/3] HID: haptic: Replace create_singlethread_workqueue with alloc_ordered_workqueue George Karagounis @ 2026-10-28 11:18 ` George Karagounis 2026-10-28 11:18 ` [PATCH 3/3] HID: logitech-hidpp: " George Karagounis 2 siblings, 0 replies; 6+ messages in thread From: George Karagounis @ 2026-10-28 11:18 UTC (permalink / raw) To: Jiri Kosina, Benjamin Tissoires Cc: Filipe Laíns, Bastien Nocera, linux-input, linux-kernel, mail create_singlethread_workqueue() is deprecated. Replace it with alloc_ordered_workqueue() for the elousb workqueue. WQ_MEM_RECLAIM is added to ensure hardware events can be processed under memory pressure. Signed-off-by: George Karagounis <mail@taterr.org> --- drivers/hid/hid-elo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hid/hid-elo.c b/drivers/hid/hid-elo.c index 86e8729e1975..72fdc073ae39 100644 --- a/drivers/hid/hid-elo.c +++ b/drivers/hid/hid-elo.c @@ -296,7 +296,7 @@ static int __init elo_driver_init(void) { int ret; - wq = create_singlethread_workqueue("elousb"); + wq = alloc_ordered_workqueue("elousb", WQ_MEM_RECLAIM); if (!wq) return -ENOMEM; -- 2.56.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] HID: logitech-hidpp: Replace create_singlethread_workqueue with alloc_ordered_workqueue 2026-10-28 11:18 [PATCH 0/3] HID: Replace deprecated create_singlethread_workqueue George Karagounis 2026-10-28 11:18 ` [PATCH 1/3] HID: haptic: Replace create_singlethread_workqueue with alloc_ordered_workqueue George Karagounis 2026-10-28 11:18 ` [PATCH 2/3] HID: elo: " George Karagounis @ 2026-10-28 11:18 ` George Karagounis 2026-10-28 11:31 ` sashiko-bot 2 siblings, 1 reply; 6+ messages in thread From: George Karagounis @ 2026-10-28 11:18 UTC (permalink / raw) To: Jiri Kosina, Benjamin Tissoires Cc: Filipe Laíns, Bastien Nocera, linux-input, linux-kernel, mail create_singlethread_workqueue() is deprecated. Replace it with alloc_ordered_workqueue() for the force feedback sendqueue. WQ_MEM_RECLAIM is added to ensure hardware events can be processed under memory pressure. Signed-off-by: George Karagounis <mail@taterr.org> --- drivers/hid/hid-logitech-hidpp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c index 27d83b8bbaaf..4efd26450539 100644 --- a/drivers/hid/hid-logitech-hidpp.c +++ b/drivers/hid/hid-logitech-hidpp.c @@ -2875,7 +2875,7 @@ static int hidpp_ff_init(struct hidpp_device *hidpp, error = -ENOMEM; goto err_free_data; } - data->wq = create_singlethread_workqueue("hidpp-ff-sendqueue"); + data->wq = alloc_ordered_workqueue("hidpp-ff-sendqueue", WQ_MEM_RECLAIM); if (!data->wq) { error = -ENOMEM; goto err_free_effect_ids; -- 2.56.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 3/3] HID: logitech-hidpp: Replace create_singlethread_workqueue with alloc_ordered_workqueue 2026-10-28 11:18 ` [PATCH 3/3] HID: logitech-hidpp: " George Karagounis @ 2026-10-28 11:31 ` sashiko-bot 0 siblings, 0 replies; 6+ messages in thread From: sashiko-bot @ 2026-10-28 11:31 UTC (permalink / raw) To: George Karagounis; +Cc: linux-input, dmitry.torokhov Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] HID: logitech-hidpp: misuse of WQ_MEM_RECLAIM in hidpp_ff_init() -- commit 652f6e8738d9258b57261902879ab9a6f517f7aa Author: George Karagounis <taterraster@gmail.com> HID: logitech-hidpp: Replace create_singlethread_workqueue with alloc_ordered_workqueue This commit replaces create_singlethread_workqueue() with alloc_ordered_workqueue() using the WQ_MEM_RECLAIM flag for the force-feedback sendqueue in hidpp_ff_init(). > diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c > index 27d83b8bbaaf3..4efd26450539c 100644 > --- a/drivers/hid/hid-logitech-hidpp.c > +++ b/drivers/hid/hid-logitech-hidpp.c > @@ -2875,7 +2875,7 @@ static int hidpp_ff_init(struct hidpp_device *hidpp, > error = -ENOMEM; > goto err_free_data; > } > - data->wq = create_singlethread_workqueue("hidpp-ff-sendqueue"); > + data->wq = alloc_ordered_workqueue("hidpp-ff-sendqueue", WQ_MEM_RECLAIM); [Severity: Medium] Should the flags argument to alloc_ordered_workqueue() in hidpp_ff_init() be 0 instead of WQ_MEM_RECLAIM? Per Documentation/core-api/workqueue.rst, WQ_MEM_RECLAIM is intended only for workqueues that may be depended upon during memory reclaim. create_singlethread_workqueue() was deprecated because it unconditionally set __WQ_LEGACY | WQ_MEM_RECLAIM even on workqueues outside the reclaim path. Passing WQ_MEM_RECLAIM to alloc_ordered_workqueue() drops __WQ_LEGACY while keeping WQ_MEM_RECLAIM. This spawns an unnecessary rescuer kthread via init_rescuer() and enables check_flush_dependency() warnings: kernel/workqueue.c:check_flush_dependency() { ... WARN_ONCE(worker && worker->current_pwq && ((worker->current_pwq->wq->flags & (WQ_MEM_RECLAIM | __WQ_LEGACY)) == WQ_MEM_RECLAIM), "workqueue: WQ_MEM_RECLAIM %s:%ps is flushing !WQ_MEM_RECLAIM %s:%ps", ... } Furthermore, the commit message states that WQ_MEM_RECLAIM is added to ensure hardware events can be processed under memory pressure, but hidpp-ff-sendqueue only sends outgoing force-feedback commands and relies on GFP_KERNEL allocations both when queueing work in hidpp_ff_queue_work(): drivers/hid/hid-logitech-hidpp.c:hidpp_ff_queue_work() { struct hidpp_ff_work_data *wd = kzalloc_obj(*wd); ... } and when executing work via hidpp_ff_work_handler() -> hidpp_send_fap_command_sync(): drivers/hid/hid-logitech-hidpp.c:hidpp_send_fap_command_sync() { struct hidpp_report *message; int ret; message = kzalloc_obj(struct hidpp_report); if (!message) return -ENOMEM; ... } -- Sashiko AI review · https://sashiko.dev/#/patchset/20261028111853.22429-1-mail@taterr.org?part=3 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-10-28 11:33 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-10-28 11:18 [PATCH 0/3] HID: Replace deprecated create_singlethread_workqueue George Karagounis 2026-10-28 11:18 ` [PATCH 1/3] HID: haptic: Replace create_singlethread_workqueue with alloc_ordered_workqueue George Karagounis 2026-10-28 11:33 ` sashiko-bot 2026-10-28 11:18 ` [PATCH 2/3] HID: elo: " George Karagounis 2026-10-28 11:18 ` [PATCH 3/3] HID: logitech-hidpp: " George Karagounis 2026-10-28 11:31 ` sashiko-bot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox