Skip to content

Commit

Permalink
sched/isolation: Consolidate error handling
Browse files Browse the repository at this point in the history
Centralize the mask freeing and return value for the error path. This
makes potential leaks more visible.

Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Juri Lelli <juri.lelli@redhat.com>
Reviewed-by: Phil Auld <pauld@redhat.com>
Link: https://lore.kernel.org/r/20220207155910.527133-7-frederic@kernel.org
  • Loading branch information
Frederic Weisbecker authored and Peter Zijlstra committed Feb 16, 2022
1 parent 6367b60 commit 0cd3e59
Showing 1 changed file with 9 additions and 10 deletions.
19 changes: 9 additions & 10 deletions kernel/sched/isolation.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,12 @@ void __init housekeeping_init(void)
static int __init housekeeping_setup(char *str, enum hk_flags flags)
{
cpumask_var_t non_housekeeping_mask, housekeeping_staging;
int err = 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");
free_bootmem_cpumask_var(non_housekeeping_mask);
return 0;
goto free_non_housekeeping_mask;
}

alloc_bootmem_cpumask_var(&housekeeping_staging);
Expand All @@ -119,30 +119,29 @@ static int __init housekeeping_setup(char *str, enum hk_flags flags)
} else {
if (!cpumask_equal(housekeeping_staging, housekeeping_mask)) {
pr_warn("Housekeeping: nohz_full= must match isolcpus=\n");
free_bootmem_cpumask_var(housekeeping_staging);
free_bootmem_cpumask_var(non_housekeeping_mask);
return 0;
goto free_housekeeping_staging;
}
}

free_bootmem_cpumask_var(housekeeping_staging);

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");
free_bootmem_cpumask_var(non_housekeeping_mask);
return 0;
goto free_housekeeping_staging;
}
}

housekeeping_flags |= flags;
err = 1;

free_housekeeping_staging:
free_bootmem_cpumask_var(housekeeping_staging);
free_non_housekeeping_mask:
free_bootmem_cpumask_var(non_housekeeping_mask);

return 1;
return err;
}

static int __init housekeeping_nohz_full_setup(char *str)
Expand Down

0 comments on commit 0cd3e59

Please sign in to comment.