Messages in this thread | | | Date | Wed, 5 Jan 2022 15:30:34 -0800 | From | "Paul E. McKenney" <> | Subject | Re: [PATCH 7/8] sched/isolation: Fix housekeeping_mask memory leak |
| |
On Tue, Jan 04, 2022 at 03:49:43PM +0100, Frederic Weisbecker wrote: > If "nohz_full=" or "isolcpus=nohz" are called with CONFIG_NO_HZ_FULL=n, > housekeeping_mask doesn't get freed despite it being unused if > housekeeping_setup() is called for the first time. > > Check this scenario first to fix this, so that no useless allocation > is performed. > > Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
> Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Juri Lelli <juri.lelli@redhat.com> > Cc: Marcelo Tosatti <mtosatti@redhat.com> > Cc: Nitesh Lal <nilal@redhat.com> > Cc: Nicolas Saenz <nsaenzju@redhat.com> > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: Christoph Lameter <cl@gentwo.de> > Cc: Tejun Heo <tj@kernel.org> > Cc: Zefan Li <lizefan.x@bytedance.com> > Cc: Alex Belits <abelits@marvell.com> > --- > kernel/sched/isolation.c | 19 ++++++++++--------- > 1 file changed, 10 insertions(+), 9 deletions(-) > > diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c > index 828dacec483e..883eee9fae22 100644 > --- a/kernel/sched/isolation.c > +++ b/kernel/sched/isolation.c > @@ -94,6 +94,14 @@ static int __init housekeeping_setup(char *str, enum hk_flags flags) > cpumask_var_t non_housekeeping_mask, housekeeping_staging; > int err = 0; > > + if ((flags & HK_FLAG_TICK) && !(housekeeping_flags & HK_FLAG_TICK)) { > + if (!IS_ENABLED(CONFIG_NO_HZ_FULL)) { > + pr_warn("Housekeeping: nohz unsupported." > + " Build with CONFIG_NO_HZ_FULL\n"); > + return 0; > + } > + } > + > alloc_bootmem_cpumask_var(&non_housekeeping_mask); > if (cpulist_parse(str, non_housekeeping_mask) < 0) { > pr_warn("Housekeeping: nohz_full= or isolcpus= incorrect CPU range\n"); > @@ -123,15 +131,8 @@ static int __init housekeeping_setup(char *str, enum hk_flags flags) > } > } > > - if ((flags & HK_FLAG_TICK) && !(housekeeping_flags & HK_FLAG_TICK)) { > - if (IS_ENABLED(CONFIG_NO_HZ_FULL)) { > - tick_nohz_full_setup(non_housekeeping_mask); > - } else { > - pr_warn("Housekeeping: nohz unsupported." > - " Build with CONFIG_NO_HZ_FULL\n"); > - goto free_housekeeping_staging; > - } > - } > + if ((flags & HK_FLAG_TICK) && !(housekeeping_flags & HK_FLAG_TICK)) > + tick_nohz_full_setup(non_housekeeping_mask); > > housekeeping_flags |= flags; > err = 1; > -- > 2.25.1 >
| |