lkml.org 
[lkml]   [2022]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [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
    >

    \
     
     \ /
      Last update: 2022-01-06 00:31    [W:2.770 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site