All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] workqueue: Use raise_softirq() to trigger softirq in irq_work handler
@ 2026-07-16  9:56 Zqiang
  2026-07-16 16:41 ` Bradley Morgan
  2026-07-16 19:05 ` Tejun Heo
  0 siblings, 2 replies; 3+ messages in thread
From: Zqiang @ 2026-07-16  9:56 UTC (permalink / raw)
  To: tj, jiangshanlai; +Cc: linux-kernel, qiang.zhang

The bh_pool_kick_normal() and bh_pool_kick_highpri() are registered via
init_irq_work() without IRQ_WORK_HARD_IRQ flag. On PREEMPT_RT, such
work items are processed by the per-CPU irq_workd kthread in preemptible
task context with IRQs enabled. However calling raise_softirq_irqoff()
requires IRQS must be disabled, This commit therefore replace
raise_softirq_irqoff() with raise_softirq() in irq_work handler.

Signed-off-by: Zqiang <qiang.zhang@linux.dev>
---
 kernel/workqueue.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index 78068ae8f28a..0bb978df0200 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -7923,12 +7923,12 @@ static inline void wq_watchdog_init(void) { }
 
 static void bh_pool_kick_normal(struct irq_work *irq_work)
 {
-	raise_softirq_irqoff(TASKLET_SOFTIRQ);
+	raise_softirq(TASKLET_SOFTIRQ);
 }
 
 static void bh_pool_kick_highpri(struct irq_work *irq_work)
 {
-	raise_softirq_irqoff(HI_SOFTIRQ);
+	raise_softirq(HI_SOFTIRQ);
 }
 
 static void __init restrict_unbound_cpumask(const char *name, const struct cpumask *mask)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] workqueue: Use raise_softirq() to trigger softirq in irq_work handler
  2026-07-16  9:56 [PATCH] workqueue: Use raise_softirq() to trigger softirq in irq_work handler Zqiang
@ 2026-07-16 16:41 ` Bradley Morgan
  2026-07-16 19:05 ` Tejun Heo
  1 sibling, 0 replies; 3+ messages in thread
From: Bradley Morgan @ 2026-07-16 16:41 UTC (permalink / raw)
  To: qiang.zhang; +Cc: jiangshanlai, linux-kernel, tj

> The bh_pool_kick_normal() and bh_pool_kick_highpri() are registered via
> init_irq_work() without IRQ_WORK_HARD_IRQ flag. On PREEMPT_RT, such
> work items are processed by the per-CPU irq_workd kthread in preemptible
> task context with IRQs enabled. However calling raise_softirq_irqoff()
> requires IRQS must be disabled, This commit therefore replace
> raise_softirq_irqoff() with raise_softirq() in irq_work handler.

Hi zhang!

Could you add

Fixes: 4cb1ef64609f ("workqueue: Implement BH workqueues to eventually replace tasklets")

?

Also, if you would like this to go to stable, could you write a small
part of the description about the user-space effects and why this is
bad?


After all changes.


Reviewed-by: Bradley Morgan <include@grrlz.net>


> Signed-off-by: Zqiang <qiang.zhang@linux.dev>
> ---
>  kernel/workqueue.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/workqueue.c b/kernel/workqueue.c
> index 78068ae8f28a..0bb978df0200 100644
> --- a/kernel/workqueue.c
> +++ b/kernel/workqueue.c
> @@ -7923,12 +7923,12 @@ static inline void wq_watchdog_init(void) { }
>  
>  static void bh_pool_kick_normal(struct irq_work *irq_work)
>  {
> -	raise_softirq_irqoff(TASKLET_SOFTIRQ);
> +	raise_softirq(TASKLET_SOFTIRQ);
>  }
>  
>  static void bh_pool_kick_highpri(struct irq_work *irq_work)
>  {
> -	raise_softirq_irqoff(HI_SOFTIRQ);
> +	raise_softirq(HI_SOFTIRQ);
>  }
>  
>  static void __init restrict_unbound_cpumask(const char *name, const struct cpumask *mask)
> -- 
> 2.17.1

Thanks!

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] workqueue: Use raise_softirq() to trigger softirq in irq_work handler
  2026-07-16  9:56 [PATCH] workqueue: Use raise_softirq() to trigger softirq in irq_work handler Zqiang
  2026-07-16 16:41 ` Bradley Morgan
@ 2026-07-16 19:05 ` Tejun Heo
  1 sibling, 0 replies; 3+ messages in thread
From: Tejun Heo @ 2026-07-16 19:05 UTC (permalink / raw)
  To: Zqiang; +Cc: jiangshanlai, linux-kernel, Bradley Morgan

Hello,

Applied to wq/for-7.1-fixes with the description reworded and the
following tags added:

  Fixes: 2f34d7337d98 ("workqueue: Fix queue_work_on() with BH workqueues")
  Cc: stable@vger.kernel.org # v6.9+

The Fixes target differs from the suggested 4cb1ef64609f. There, the
raises ran under pool->lock with IRQs disabled. The irq_work handlers
were added later by 2f34d7337d98 which moved the remote-CPU raise out of
kick_pool(). Also picked up Bradley's Reviewed-by.

Thanks.

-- 
tejun

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-07-16 19:12 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-16  9:56 [PATCH] workqueue: Use raise_softirq() to trigger softirq in irq_work handler Zqiang
2026-07-16 16:41 ` Bradley Morgan
2026-07-16 19:05 ` Tejun Heo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.