[PATCH] RAS/CEC: replace use of system_wq with system_percpu_wq

Marco Crivellari posted 1 patch 3 months ago
There is a newer version of this series
drivers/ras/cec.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] RAS/CEC: replace use of system_wq with system_percpu_wq
Posted by Marco Crivellari 3 months ago
Currently if a user enqueues 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 consistency cannot be addressed without refactoring the API.

This patch continues the effort to refactor worqueue APIs, which has begun
with the change introducing new workqueues and a new alloc_workqueue flag:

commit 128ea9f6ccfb ("workqueue: Add system_percpu_wq and system_dfl_wq")
commit 930c2ea566af ("workqueue: Add new WQ_PERCPU flag")

Replace system_wq with system_percpu_wq, keeping the old behavior.
The old wq (system_wq) will be kept for a few release cycles.

Suggested-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Marco Crivellari <marco.crivellari@suse.com>
---
 drivers/ras/cec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/ras/cec.c b/drivers/ras/cec.c
index e440b15fbabc..15f7f043c8ef 100644
--- a/drivers/ras/cec.c
+++ b/drivers/ras/cec.c
@@ -166,7 +166,7 @@ static void cec_mod_work(unsigned long interval)
 	unsigned long iv;
 
 	iv = interval * HZ;
-	mod_delayed_work(system_wq, &cec_work, round_jiffies(iv));
+	mod_delayed_work(system_percpu_wq, &cec_work, round_jiffies(iv));
 }
 
 static void cec_work_fn(struct work_struct *work)
-- 
2.51.1
Re: [PATCH] RAS/CEC: replace use of system_wq with system_percpu_wq
Posted by Borislav Petkov 3 months ago
On Wed, Nov 05, 2025 at 05:08:19PM +0100, Marco Crivellari wrote:
> Currently if a user enqueues a work item using schedule_delayed_work() the
> used wq is "system_wq" (per-cpu wq) while queue_delayed_work() use

Please write out "wq" - the commit message should be for humans and not
contain variables or entities from the code.

> WORK_CPU_UNBOUND (used when a cpu is not specified). The same applies to

s/cpu/CPU/

> schedule_work() that is using system_wq and queue_work(), that makes use
> again of WORK_CPU_UNBOUND.
> 
> This lack of consistency cannot be addressed without refactoring the API.
> 
> This patch continues the effort to refactor worqueue APIs, which has begun

Avoid having "This patch" or "This commit" in the commit message. It is
tautologically useless.

Also, do

$ git grep 'This patch' Documentation/process

for more details.

> with the change introducing new workqueues and a new alloc_workqueue flag:
> 
> commit 128ea9f6ccfb ("workqueue: Add system_percpu_wq and system_dfl_wq")
> commit 930c2ea566af ("workqueue: Add new WQ_PERCPU flag")
> 
> Replace system_wq with system_percpu_wq, keeping the old behavior.

What is the new behavior?

Should this driver be converted to it?

Thx.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [PATCH] RAS/CEC: replace use of system_wq with system_percpu_wq
Posted by Marco Crivellari 3 months ago
Hi,

Many thanks for all the information. I've already changed the commit
log for the v2.

> > with the change introducing new workqueues and a new alloc_workqueue flag:
> >
> > commit 128ea9f6ccfb ("workqueue: Add system_percpu_wq and system_dfl_wq")
> > commit 930c2ea566af ("workqueue: Add new WQ_PERCPU flag")
> >
> > Replace system_wq with system_percpu_wq, keeping the old behavior.
>
> What is the new behavior?
>
> Should this driver be converted to it?

The code is using system_wq, this is the per-cpu workqueue. This
change will only
replace system_wq with system_percpu_wq. So the behavior is the same as before.

Thanks!

-- 

Marco Crivellari

L3 Support Engineer, Technology & Product
Re: [PATCH] RAS/CEC: replace use of system_wq with system_percpu_wq
Posted by Borislav Petkov 3 months ago
On Wed, Nov 05, 2025 at 05:55:49PM +0100, Marco Crivellari wrote:
> The code is using system_wq, this is the per-cpu workqueue. This change will
> only replace system_wq with system_percpu_wq. So the behavior is the same as
> before.

What does that mean?

We're going away from system_wq in favor or system_percpu_wq? Or?

It is not clear to me what the issue is what the new correct way should be...

Thx.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [PATCH] RAS/CEC: replace use of system_wq with system_percpu_wq
Posted by Marco Crivellari 3 months ago
On Wed, Nov 5, 2025 at 10:08 PM Borislav Petkov <bp@alien8.de> wrote:
> On Wed, Nov 05, 2025 at 05:55:49PM +0100, Marco Crivellari wrote:
> > The code is using system_wq, this is the per-cpu workqueue. This change will
> > only replace system_wq with system_percpu_wq. So the behavior is the same as
> > before.
>
> What does that mean?
>
> We're going away from system_wq in favor or system_percpu_wq? Or?
>


It's just a "rename" from system_wq to system_percpu_wq.
system_percpu_wq is a per-cpu workqueue, exactly as system_wq.

But in a few release cycles system_wq will be removed from the code.

If you want to have more details, you can read this discussion:

https://lore.kernel.org/all/20250221112003.1dSuoGyc@linutronix.de/

> It is not clear to me what the issue is what the new correct way should be...

There is no issue, except that system_wq will be removed. In order to
achieve the same result as system_wq, the correct workqueue to use
is system_percpu_wq.

As you can see from:

commit 128ea9f6ccfb ("workqueue: Add system_percpu_wq and system_dfl_wq")

system_percpu_wq is defined as a per-cpu workqueue, exactly as system_wq.

Thanks!

-- 

Marco Crivellari

L3 Support Engineer, Technology & Product
Re: [PATCH] RAS/CEC: replace use of system_wq with system_percpu_wq
Posted by Borislav Petkov 3 months ago
On Thu, Nov 06, 2025 at 10:17:18AM +0100, Marco Crivellari wrote:
> It's just a "rename" from system_wq to system_percpu_wq.

So why don't you call it that?

Instead of beating around the bush and confusing me? :-)

IOW, just do this:

"Rename system_wq to system_percpu_wq as part of workqueue refactoring.

For more details see the Link tag below.

...

Link: https://lore.kernel.org/all/20250221112003.1dSuoGyc@linutronix.de"

And now all those people who are interested in the details can go look it up.

Thx.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [PATCH] RAS/CEC: replace use of system_wq with system_percpu_wq
Posted by Marco Crivellari 3 months ago
On Thu, Nov 6, 2025 at 11:49 AM Borislav Petkov <bp@alien8.de> wrote:
>
> On Thu, Nov 06, 2025 at 10:17:18AM +0100, Marco Crivellari wrote:
> > It's just a "rename" from system_wq to system_percpu_wq.
>
> So why don't you call it that?
>
> Instead of beating around the bush and confusing me? :-)
>
> IOW, just do this:
>
> "Rename system_wq to system_percpu_wq as part of workqueue refactoring.
>
> For more details see the Link tag below.
>
> ...
>
> Link: https://lore.kernel.org/all/20250221112003.1dSuoGyc@linutronix.de"
>
> And now all those people who are interested in the details can go look it up.

I was torn between "replace" and "rename", because there is a new workqueue,
not only a rename of the old one, because for now it is still existing. :-)

BTW,  thanks for your advice, I will send the v2 improving the commit log!

-- 

Marco Crivellari

L3 Support Engineer, Technology & Product
Re: [PATCH] RAS/CEC: replace use of system_wq with system_percpu_wq
Posted by Borislav Petkov 3 months ago
On Thu, Nov 06, 2025 at 12:03:51PM +0100, Marco Crivellari wrote:
> I was torn between "replace" and "rename", because there is a new workqueue,
> not only a rename of the old one, because for now it is still existing. :-)

You can also say:

"Switch to using system_percpu_wq because system_wq is going away as part of
a workqueue restructuring."

Now it is perfectly clear what's going on.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [PATCH] RAS/CEC: replace use of system_wq with system_percpu_wq
Posted by Marco Crivellari 3 months ago
On Thu, Nov 6, 2025 at 12:12 PM Borislav Petkov <bp@alien8.de> wrote:
>
> On Thu, Nov 06, 2025 at 12:03:51PM +0100, Marco Crivellari wrote:
> > I was torn between "replace" and "rename", because there is a new workqueue,
> > not only a rename of the old one, because for now it is still existing. :-)
>
> You can also say:
>
> "Switch to using system_percpu_wq because system_wq is going away as part of
> a workqueue restructuring."
>
> Now it is perfectly clear what's going on.

Cool, I like this version.

Thank you!

-- 

Marco Crivellari

L3 Support Engineer, Technology & Product