All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] sched_ext: Fix the memleak for sch->helper objects
@ 2025-12-08 11:23 Zqiang
  2025-12-08 11:23 ` [PATCH] sched_ext: Fix lockdep warnings in the ops_dump_init() Zqiang
  2025-12-08 17:12 ` [PATCH] sched_ext: Fix the memleak for sch->helper objects Tejun Heo
  0 siblings, 2 replies; 5+ messages in thread
From: Zqiang @ 2025-12-08 11:23 UTC (permalink / raw)
  To: tj, void, arighi, changwoo; +Cc: sched-ext, linux-kernel, qiang.zhang

This commit use kthread_destroy_worker() to release sch->helper
objects to fix the following kmemleak:

unreferenced object 0xffff888121ec7b00 (size 128):
  comm "scx_simple", pid 1197, jiffies 4295884415
  hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 00 00 00 ad 4e ad de  .............N..
    ff ff ff ff 00 00 00 00 ff ff ff ff ff ff ff ff  ................
  backtrace (crc 587b3352):
    kmemleak_alloc+0x62/0xa0
    __kmalloc_cache_noprof+0x28d/0x3e0
    kthread_create_worker_on_node+0xd5/0x1f0
    scx_enable.isra.210+0x6c2/0x25b0
    bpf_scx_reg+0x12/0x20
    bpf_struct_ops_link_create+0x2c3/0x3b0
    __sys_bpf+0x3102/0x4b00
    __x64_sys_bpf+0x79/0xc0
    x64_sys_call+0x15d9/0x1dd0
    do_syscall_64+0xf0/0x470
    entry_SYSCALL_64_after_hwframe+0x77/0x7f

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

diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
index df00df359067..59fa391636c7 100644
--- a/kernel/sched/ext.c
+++ b/kernel/sched/ext.c
@@ -3516,7 +3516,7 @@ static void scx_sched_free_rcu_work(struct work_struct *work)
 	int node;
 
 	irq_work_sync(&sch->error_irq_work);
-	kthread_stop(sch->helper->task);
+	kthread_destroy_worker(sch->helper);
 
 	free_percpu(sch->pcpu);
 
@@ -4508,7 +4508,7 @@ static struct scx_sched *scx_alloc_and_add_sched(struct sched_ext_ops *ops)
 	return sch;
 
 err_stop_helper:
-	kthread_stop(sch->helper->task);
+	kthread_destroy_worker(sch->helper);
 err_free_pcpu:
 	free_percpu(sch->pcpu);
 err_free_gdsqs:
-- 
2.17.1


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

* [PATCH] sched_ext: Fix lockdep warnings in the ops_dump_init()
  2025-12-08 11:23 [PATCH] sched_ext: Fix the memleak for sch->helper objects Zqiang
@ 2025-12-08 11:23 ` Zqiang
  2025-12-08 11:29   ` Christian Loehle
  2025-12-08 17:12 ` [PATCH] sched_ext: Fix the memleak for sch->helper objects Tejun Heo
  1 sibling, 1 reply; 5+ messages in thread
From: Zqiang @ 2025-12-08 11:23 UTC (permalink / raw)
  To: tj, void, arighi, changwoo; +Cc: sched-ext, linux-kernel, qiang.zhang

For builts with PREEMPT_RT=y kernel, the dump_lock convert to
sleepable rt-spinlock and not disable-irq, the following lockdep
warning will appear:

WARNING: CPU: 3 PID: 47 at kernel/sched/ext.c:4130 ops_dump_init+0x60/0xa0
Modules linked in:
CPU: 3 UID: 0 PID: 47 Comm: irq_work/3
RIP: 0010:ops_dump_init+0x60/0xa0
Call Trace:
<TASK>
scx_dump_state+0x1091/0x1620
? __schedule+0xf1c/0x3ec0
? rcu_is_watching+0x19/0xb0
? __pfx_scx_dump_state+0x10/0x10
? kvm_sched_clock_read+0x15/0x30
? __lock_acquire+0x98b/0x1ae0
? __this_cpu_preempt_check+0x17/0x20
? insn_get_modrm+0x107/0x6e0
scx_error_irq_workfn+0xeb/0x120
irq_work_single+0x113/0x260
irq_work_run_list.part.7+0x44/0x70
run_irq_workd+0x6b/0x90
? __pfx_run_irq_workd+0x10/0x10
smpboot_thread_fn+0x34c/0xa50
? trace_preempt_on+0x54/0x120
? __pfx_smpboot_thread_fn+0x10/0x10
kthread+0x411/0x8a0
? __pfx_kthread+0x10/0x10
? rt_spin_unlock+0x9f/0x210
? __pfx_kthread+0x10/0x10
ret_from_fork+0x406/0x500
? __switch_to_asm+0x33/0x70
? __pfx_kthread+0x10/0x10
ret_from_fork_asm+0x1a/0x30
</TASK>

This commit therefore convert dump_lock to raw spinlock.

Signed-off-by: Zqiang <qiang.zhang@linux.dev>
---
 kernel/sched/ext.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
index 59fa391636c7..2e19e3689f1c 100644
--- a/kernel/sched/ext.c
+++ b/kernel/sched/ext.c
@@ -4235,7 +4235,7 @@ static void scx_dump_task(struct seq_buf *s, struct scx_dump_ctx *dctx,
 
 static void scx_dump_state(struct scx_exit_info *ei, size_t dump_len)
 {
-	static DEFINE_SPINLOCK(dump_lock);
+	static DEFINE_RAW_SPINLOCK(dump_lock);
 	static const char trunc_marker[] = "\n\n~~~~ TRUNCATED ~~~~\n";
 	struct scx_sched *sch = scx_root;
 	struct scx_dump_ctx dctx = {
@@ -4251,7 +4251,7 @@ static void scx_dump_state(struct scx_exit_info *ei, size_t dump_len)
 	char *buf;
 	int cpu;
 
-	spin_lock_irqsave(&dump_lock, flags);
+	raw_spin_lock_irqsave(&dump_lock, flags);
 
 	seq_buf_init(&s, ei->dump, dump_len);
 
@@ -4375,7 +4375,7 @@ static void scx_dump_state(struct scx_exit_info *ei, size_t dump_len)
 		memcpy(ei->dump + dump_len - sizeof(trunc_marker),
 		       trunc_marker, sizeof(trunc_marker));
 
-	spin_unlock_irqrestore(&dump_lock, flags);
+	raw_spin_unlock_irqrestore(&dump_lock, flags);
 }
 
 static void scx_error_irq_workfn(struct irq_work *irq_work)
-- 
2.17.1


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

* Re: [PATCH] sched_ext: Fix lockdep warnings in the ops_dump_init()
  2025-12-08 11:23 ` [PATCH] sched_ext: Fix lockdep warnings in the ops_dump_init() Zqiang
@ 2025-12-08 11:29   ` Christian Loehle
  2025-12-08 13:25     ` Zqiang
  0 siblings, 1 reply; 5+ messages in thread
From: Christian Loehle @ 2025-12-08 11:29 UTC (permalink / raw)
  To: Zqiang, tj, void, arighi, changwoo; +Cc: sched-ext, linux-kernel

On 12/8/25 11:23, Zqiang wrote:
> For builts with PREEMPT_RT=y kernel, the dump_lock convert to
> sleepable rt-spinlock and not disable-irq, the following lockdep
> warning will appear:
> 
> WARNING: CPU: 3 PID: 47 at kernel/sched/ext.c:4130 ops_dump_init+0x60/0xa0
> Modules linked in:
> CPU: 3 UID: 0 PID: 47 Comm: irq_work/3
> RIP: 0010:ops_dump_init+0x60/0xa0
> Call Trace:
> <TASK>
> scx_dump_state+0x1091/0x1620
> ? __schedule+0xf1c/0x3ec0
> ? rcu_is_watching+0x19/0xb0
> ? __pfx_scx_dump_state+0x10/0x10
> ? kvm_sched_clock_read+0x15/0x30
> ? __lock_acquire+0x98b/0x1ae0
> ? __this_cpu_preempt_check+0x17/0x20
> ? insn_get_modrm+0x107/0x6e0
> scx_error_irq_workfn+0xeb/0x120
> irq_work_single+0x113/0x260
> irq_work_run_list.part.7+0x44/0x70
> run_irq_workd+0x6b/0x90
> ? __pfx_run_irq_workd+0x10/0x10
> smpboot_thread_fn+0x34c/0xa50
> ? trace_preempt_on+0x54/0x120
> ? __pfx_smpboot_thread_fn+0x10/0x10
> kthread+0x411/0x8a0
> ? __pfx_kthread+0x10/0x10
> ? rt_spin_unlock+0x9f/0x210
> ? __pfx_kthread+0x10/0x10
> ret_from_fork+0x406/0x500
> ? __switch_to_asm+0x33/0x70
> ? __pfx_kthread+0x10/0x10
> ret_from_fork_asm+0x1a/0x30
> </TASK>
> 
> This commit therefore convert dump_lock to raw spinlock.
> 
> Signed-off-by: Zqiang <qiang.zhang@linux.dev>
> ---
>  kernel/sched/ext.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
> index 59fa391636c7..2e19e3689f1c 100644
> --- a/kernel/sched/ext.c
> +++ b/kernel/sched/ext.c
> @@ -4235,7 +4235,7 @@ static void scx_dump_task(struct seq_buf *s, struct scx_dump_ctx *dctx,
>  
>  static void scx_dump_state(struct scx_exit_info *ei, size_t dump_len)
>  {
> -	static DEFINE_SPINLOCK(dump_lock);
> +	static DEFINE_RAW_SPINLOCK(dump_lock);
>  	static const char trunc_marker[] = "\n\n~~~~ TRUNCATED ~~~~\n";
>  	struct scx_sched *sch = scx_root;
>  	struct scx_dump_ctx dctx = {
> @@ -4251,7 +4251,7 @@ static void scx_dump_state(struct scx_exit_info *ei, size_t dump_len)
>  	char *buf;
>  	int cpu;
>  
> -	spin_lock_irqsave(&dump_lock, flags);
> +	raw_spin_lock_irqsave(&dump_lock, flags);
>  
>  	seq_buf_init(&s, ei->dump, dump_len);
>  
> @@ -4375,7 +4375,7 @@ static void scx_dump_state(struct scx_exit_info *ei, size_t dump_len)
>  		memcpy(ei->dump + dump_len - sizeof(trunc_marker),
>  		       trunc_marker, sizeof(trunc_marker));
>  
> -	spin_unlock_irqrestore(&dump_lock, flags);
> +	raw_spin_unlock_irqrestore(&dump_lock, flags);
>  }
>  
>  static void scx_error_irq_workfn(struct irq_work *irq_work)

This is already part of Tejun's cgroup sub-scheduler support series:
https://lore.kernel.org/lkml/20250920005931.2753828-39-tj@kernel.org/

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

* Re: [PATCH] sched_ext: Fix lockdep warnings in the ops_dump_init()
  2025-12-08 11:29   ` Christian Loehle
@ 2025-12-08 13:25     ` Zqiang
  0 siblings, 0 replies; 5+ messages in thread
From: Zqiang @ 2025-12-08 13:25 UTC (permalink / raw)
  To: Christian Loehle, tj, void, arighi, changwoo; +Cc: sched-ext, linux-kernel

> On 12/8/25 11:23, Zqiang wrote:  
> 
> > For builts with PREEMPT\_RT=y kernel, the dump\_lock convert to  
> > sleepable rt-spinlock and not disable-irq, the following lockdep  
> > warning will appear:  
> >   
> > WARNING: CPU: 3 PID: 47 at kernel/sched/ext.c:4130 ops\_dump\_init+0x60/0xa0  
> > Modules linked in:  
> > CPU: 3 UID: 0 PID: 47 Comm: irq\_work/3  
> > RIP: 0010:ops\_dump\_init+0x60/0xa0  
> > Call Trace:  
> > <TASK>  
> > scx\_dump\_state+0x1091/0x1620  
> > ? \_\_schedule+0xf1c/0x3ec0  
> > ? rcu\_is\_watching+0x19/0xb0  
> > ? \_\_pfx\_scx\_dump\_state+0x10/0x10  
> > ? kvm\_sched\_clock\_read+0x15/0x30  
> > ? \_\_lock\_acquire+0x98b/0x1ae0  
> > ? \_\_this\_cpu\_preempt\_check+0x17/0x20  
> > ? insn\_get\_modrm+0x107/0x6e0  
> > scx\_error\_irq\_workfn+0xeb/0x120  
> > irq\_work\_single+0x113/0x260  
> > irq\_work\_run\_list.part.7+0x44/0x70  
> > run\_irq\_workd+0x6b/0x90  
> > ? \_\_pfx\_run\_irq\_workd+0x10/0x10  
> > smpboot\_thread\_fn+0x34c/0xa50  
> > ? trace\_preempt\_on+0x54/0x120  
> > ? \_\_pfx\_smpboot\_thread\_fn+0x10/0x10  
> > kthread+0x411/0x8a0  
> > ? \_\_pfx\_kthread+0x10/0x10  
> > ? rt\_spin\_unlock+0x9f/0x210  
> > ? \_\_pfx\_kthread+0x10/0x10  
> > ret\_from\_fork+0x406/0x500  
> > ? \_\_switch\_to\_asm+0x33/0x70  
> > ? \_\_pfx\_kthread+0x10/0x10  
> > ret\_from\_fork\_asm+0x1a/0x30  
> > </TASK>  
> >   
> > This commit therefore convert dump\_lock to raw spinlock.  
> >   
> > Signed-off-by: Zqiang <qiang.zhang@linux.dev>  
> > \---  
> > kernel/sched/ext.c | 6 +++---  
> > 1 file changed, 3 insertions(+), 3 deletions(-)  
> >   
> > diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c  
> > index 59fa391636c7..2e19e3689f1c 100644  
> > \--- a/kernel/sched/ext.c  
> > +++ b/kernel/sched/ext.c  
> > @@ -4235,7 +4235,7 @@ static void scx\_dump\_task(struct seq\_buf \*s, struct scx\_dump\_ctx \*dctx,  
> >   
> > static void scx\_dump\_state(struct scx\_exit\_info \*ei, size\_t dump\_len)  
> > {  
> > \- static DEFINE\_SPINLOCK(dump\_lock);  
> > \+ static DEFINE\_RAW\_SPINLOCK(dump\_lock);  
> > static const char trunc\_marker\[\] = "\\n\\n~~~~ TRUNCATED ~~~~\\n";  
> > struct scx\_sched \*sch = scx\_root;  
> > struct scx\_dump\_ctx dctx = {  
> > @@ -4251,7 +4251,7 @@ static void scx\_dump\_state(struct scx\_exit\_info \*ei, size\_t dump\_len)  
> > char \*buf;  
> > int cpu;  
> >   
> > \- spin\_lock\_irqsave(&dump\_lock, flags);  
> > \+ raw\_spin\_lock\_irqsave(&dump\_lock, flags);  
> >   
> > seq\_buf\_init(&s, ei->dump, dump\_len);  
> >   
> > @@ -4375,7 +4375,7 @@ static void scx\_dump\_state(struct scx\_exit\_info \*ei, size\_t dump\_len)  
> > memcpy(ei->dump + dump\_len - sizeof(trunc\_marker),  
> > trunc\_marker, sizeof(trunc\_marker));  
> >   
> > \- spin\_unlock\_irqrestore(&dump\_lock, flags);  
> > \+ raw\_spin\_unlock\_irqrestore(&dump\_lock, flags);  
> > }  
> >   
> > static void scx\_error\_irq\_workfn(struct irq\_work \*irq\_work)
> 
>   
> This is already part of Tejun's cgroup sub-scheduler support series:  
> [https://lore.kernel.org/lkml/20250920005931.2753828-39-tj@kernel.org/](https://lore.kernel.org/lkml/20250920005931.2753828-39-tj@kernel.org/)


Thank you for pointing it :),  please this patch.

Thanks
Zqiang

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

* Re: [PATCH] sched_ext: Fix the memleak for sch->helper objects
  2025-12-08 11:23 [PATCH] sched_ext: Fix the memleak for sch->helper objects Zqiang
  2025-12-08 11:23 ` [PATCH] sched_ext: Fix lockdep warnings in the ops_dump_init() Zqiang
@ 2025-12-08 17:12 ` Tejun Heo
  1 sibling, 0 replies; 5+ messages in thread
From: Tejun Heo @ 2025-12-08 17:12 UTC (permalink / raw)
  To: Zqiang; +Cc: void, arighi, changwoo, sched-ext, linux-kernel

Applied to sched_ext/for-6.19-fixes with Fixes and stable tags.

Thanks.

--
tejun

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

end of thread, other threads:[~2025-12-08 17:12 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-08 11:23 [PATCH] sched_ext: Fix the memleak for sch->helper objects Zqiang
2025-12-08 11:23 ` [PATCH] sched_ext: Fix lockdep warnings in the ops_dump_init() Zqiang
2025-12-08 11:29   ` Christian Loehle
2025-12-08 13:25     ` Zqiang
2025-12-08 17:12 ` [PATCH] sched_ext: Fix the memleak for sch->helper objects 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.