[PATCH v2 0/1] ASoC: change system_wq with system_dfl_wq

Marco Crivellari posted 1 patch 4 months, 1 week ago
sound/soc/codecs/aw88081.c          |  2 +-
sound/soc/codecs/aw88166.c          |  2 +-
sound/soc/codecs/aw88261.c          |  2 +-
sound/soc/codecs/aw88395/aw88395.c  |  2 +-
sound/soc/codecs/aw88399.c          |  2 +-
sound/soc/codecs/cs42l43-jack.c     |  2 +-
sound/soc/codecs/cs42l43.c          |  4 ++--
sound/soc/codecs/es8326.c           | 12 ++++++------
sound/soc/codecs/rt5663.c           |  6 +++---
sound/soc/intel/boards/sof_es8336.c |  2 +-
sound/soc/sof/intel/cnl.c           |  2 +-
sound/soc/sof/intel/hda-ipc.c       |  2 +-
12 files changed, 20 insertions(+), 20 deletions(-)
[PATCH v2 0/1] ASoC: change system_wq with system_dfl_wq
Posted by Marco Crivellari 4 months, 1 week ago
Hi!

Below is a summary of a discussion about the Workqueue API and cpu isolation
considerations. Details and more information are available here:

        "workqueue: Always use wq_select_unbound_cpu() for WORK_CPU_UNBOUND."
        https://lore.kernel.org/all/20250221112003.1dSuoGyc@linutronix.de/

=== Current situation: problems ===

Let's consider a nohz_full system with isolated CPUs: wq_unbound_cpumask is
set to the housekeeping CPUs, for !WQ_UNBOUND the local CPU is selected.

This leads to different scenarios if a work item is scheduled on an isolated
CPU where "delay" value is 0 or greater then 0:
        schedule_delayed_work(, 0);

This will be handled by __queue_work() that will queue the work item on the
current local (isolated) CPU, while:

        schedule_delayed_work(, 1);

Will move the timer on an housekeeping CPU, and schedule the work there.

Currently if a user enqueue a work item using schedule_delayed_work() the
used wq is "system_wq" (per-cpu wq) while queue_delayed_work() use
WORK_CPU_UNBOUND (used when a cpu is not specified). The same applies to
schedule_work() that is using system_wq and queue_work(), that makes use
again of WORK_CPU_UNBOUND.

This lack of consistentcy cannot be addressed without refactoring the API.

=== Plan and future plans ===

This patchset is the first stone on a refactoring needed in order to
address the points aforementioned; it will have a positive impact also
on the cpu isolation, in the long term, moving away percpu workqueue in
favor to an unbound model.

These are the main steps:
1)  API refactoring (that this patch is introducing)
    -   Make more clear and uniform the system wq names, both per-cpu and
        unbound. This to avoid any possible confusion on what should be
        used.

    -   Introduction of WQ_PERCPU: this flag is the complement of WQ_UNBOUND,
        introduced in this patchset and used on all the callers that are not
        currently using WQ_UNBOUND.

        WQ_UNBOUND will be removed in a future release cycle.

        Most users don't need to be per-cpu, because they don't have
        locality requirements, because of that, a next future step will be
        make "unbound" the default behavior.

2)  Check who really needs to be per-cpu
    -   Remove the WQ_PERCPU flag when is not strictly required.

3)  Add a new API (prefer local cpu)
    -   There are users that don't require a local execution, like mentioned
        above; despite that, local execution yeld to performance gain.

        This new API will prefer the local execution, without requiring it.

=== Introduced Changes by this series ===

1)  [P 1] Replace use of system_wq
    	system_wq is a per-CPU worqueue, replaced by system_percpu_wq. Despite that,
    	system_wq in this change has been replaced by system_dfl_wq, because there
    	aren't per-cpu variables.


Thanks!


---
Changes in v2:

- Removed 1/2 from the series because already applied
- Instead of rename system_wq with system_percpu_wq, [P 1] change the workqueue
  using system_dfl_wq (the new unbound workqueue).


Marco Crivellari (1):
  ASoC: replace use of system_wq with system_dfl_wq

 sound/soc/codecs/aw88081.c          |  2 +-
 sound/soc/codecs/aw88166.c          |  2 +-
 sound/soc/codecs/aw88261.c          |  2 +-
 sound/soc/codecs/aw88395/aw88395.c  |  2 +-
 sound/soc/codecs/aw88399.c          |  2 +-
 sound/soc/codecs/cs42l43-jack.c     |  2 +-
 sound/soc/codecs/cs42l43.c          |  4 ++--
 sound/soc/codecs/es8326.c           | 12 ++++++------
 sound/soc/codecs/rt5663.c           |  6 +++---
 sound/soc/intel/boards/sof_es8336.c |  2 +-
 sound/soc/sof/intel/cnl.c           |  2 +-
 sound/soc/sof/intel/hda-ipc.c       |  2 +-
 12 files changed, 20 insertions(+), 20 deletions(-)

-- 
2.51.0
Re: [PATCH v2 0/1] ASoC: change system_wq with system_dfl_wq
Posted by Mark Brown 3 months, 3 weeks ago
On Mon, 29 Sep 2025 17:50:52 +0200, Marco Crivellari wrote:
> Below is a summary of a discussion about the Workqueue API and cpu isolation
> considerations. Details and more information are available here:
> 
>         "workqueue: Always use wq_select_unbound_cpu() for WORK_CPU_UNBOUND."
>         https://lore.kernel.org/all/20250221112003.1dSuoGyc@linutronix.de/
> 
> === Current situation: problems ===
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/1] ASoC: replace use of system_wq with system_dfl_wq
      commit: 0b0eb7702a9fa410755e86124b4b7cd36e7d1cb4

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark
Re: [PATCH v2 0/1] ASoC: change system_wq with system_dfl_wq
Posted by Marco Crivellari 3 months, 3 weeks ago
On Wed, Oct 15, 2025 at 5:22 PM Mark Brown <broonie@kernel.org> wrote:
> [..]
> Applied to
>
>    https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
>
> Thanks!
>
> [1/1] ASoC: replace use of system_wq with system_dfl_wq
>       commit: 0b0eb7702a9fa410755e86124b4b7cd36e7d1cb4
>

Many thanks, Mark!

-- 

Marco Crivellari

L3 Support Engineer, Technology & Product
Re: [PATCH v2 0/1] ASoC: change system_wq with system_dfl_wq
Posted by Mark Brown 4 months, 1 week ago
On Mon, Sep 29, 2025 at 05:50:52PM +0200, Marco Crivellari wrote:
> Hi!
> 
> Below is a summary of a discussion about the Workqueue API and cpu isolation
> considerations. Details and more information are available here:

Please don't send cover letters for single patches, if there is anything
that needs saying put it in the changelog of the patch or after the ---
if it's administrative stuff.  This reduces mail volume and ensures that 
any important information is recorded in the changelog rather than being
lost. 
Re: [PATCH v2 0/1] ASoC: change system_wq with system_dfl_wq
Posted by Marco Crivellari 4 months, 1 week ago
On Mon, Sep 29, 2025 at 6:58 PM Mark Brown <broonie@kernel.org> wrote:
> Please don't send cover letters for single patches, if there is anything
> that needs saying put it in the changelog of the patch or after the ---
> if it's administrative stuff.  This reduces mail volume and ensures that
> any important information is recorded in the changelog rather than being
> lost.

Ok Mark, thank you. The changelog already contains all the information.

Noted for the next time.

-- 

Marco Crivellari

L3 Support Engineer, Technology & Product