The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=058ce52660fb52ada41462d339fb1ce6aca48cf3
commit 058ce52660fb52ada41462d339fb1ce6aca48cf3 Author: Bjoern A. Zeeb <[email protected]> AuthorDate: 2026-01-21 13:53:34 +0000 Commit: Bjoern A. Zeeb <[email protected]> CommitDate: 2026-07-13 14:58:23 +0000 LinuxKPI: add system_percpu_wq In Linux v6.17 system_wq was replaced (renamed to) system_percpu_wq, with the old name still present. We just alias system_percpu_wq to linux_system_short_wq like we do for system_wq to keep both around for the forseeable future. Note: the original system_wq was a per-cpu queue upstream as well based on my understanding but we never implemented it as such. That means we are still lacking a per-cpu implementation for system_percpu_wq but at least we do not change the status-quo of the LinuxKPI implementation with this. Note2: we should add a check somewhere for LINUXKPI_VESION >= 61700 to print a warning if anyone still uses the system_wq to detect any possible sami-native or out-of-tree drivers relying on this and not properly updating. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: dumbbell; emaste (comments on previous review) Differential Revision: https://reviews.freebsd.org/D57730 --- sys/compat/linuxkpi/common/include/linux/workqueue.h | 1 + sys/compat/linuxkpi/common/src/linux_work.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/sys/compat/linuxkpi/common/include/linux/workqueue.h b/sys/compat/linuxkpi/common/include/linux/workqueue.h index 66d3981d4229..b531d4f34658 100644 --- a/sys/compat/linuxkpi/common/include/linux/workqueue.h +++ b/sys/compat/linuxkpi/common/include/linux/workqueue.h @@ -237,6 +237,7 @@ extern struct workqueue_struct *system_long_wq; extern struct workqueue_struct *system_unbound_wq; extern struct workqueue_struct *system_highpri_wq; extern struct workqueue_struct *system_power_efficient_wq; +extern struct workqueue_struct *system_percpu_wq; extern void linux_init_delayed_work(struct delayed_work *, work_func_t); extern void linux_work_fn(void *, int); diff --git a/sys/compat/linuxkpi/common/src/linux_work.c b/sys/compat/linuxkpi/common/src/linux_work.c index b1975d16025e..bb25893d9c71 100644 --- a/sys/compat/linuxkpi/common/src/linux_work.c +++ b/sys/compat/linuxkpi/common/src/linux_work.c @@ -57,6 +57,7 @@ struct workqueue_struct *system_long_wq; struct workqueue_struct *system_unbound_wq; struct workqueue_struct *system_highpri_wq; struct workqueue_struct *system_power_efficient_wq; +struct workqueue_struct *system_percpu_wq; struct taskqueue *linux_irq_work_tq; @@ -721,7 +722,14 @@ linux_work_init(void *arg) /* populate the workqueue pointers */ system_long_wq = linux_system_long_wq; + /* + * With Linux v6.17 system_wq was "renamed" to system_percpu_wq with the + * old name staying around. + * Note: neither implementation here does fully implement the per-cpu + * characteristics upstream expects. + */ system_wq = linux_system_short_wq; + system_percpu_wq = linux_system_short_wq; system_power_efficient_wq = linux_system_short_wq; system_unbound_wq = linux_system_short_wq; system_highpri_wq = linux_system_short_wq; @@ -737,6 +745,7 @@ linux_work_uninit(void *arg) /* clear workqueue pointers */ system_long_wq = NULL; system_wq = NULL; + system_percpu_wq = NULL; system_power_efficient_wq = NULL; system_unbound_wq = NULL; system_highpri_wq = NULL;
