Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

sched/isolation: Consolidate error handling

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

authored by

Frederic Weisbecker and committed by
Peter Zijlstra
0cd3e59d 6367b600

+9 -10
+9 -10
kernel/sched/isolation.c
··· 92 92 static int __init housekeeping_setup(char *str, enum hk_flags flags) 93 93 { 94 94 cpumask_var_t non_housekeeping_mask, housekeeping_staging; 95 + int err = 0; 95 96 96 97 alloc_bootmem_cpumask_var(&non_housekeeping_mask); 97 98 if (cpulist_parse(str, non_housekeeping_mask) < 0) { 98 99 pr_warn("Housekeeping: nohz_full= or isolcpus= incorrect CPU range\n"); 99 - free_bootmem_cpumask_var(non_housekeeping_mask); 100 - return 0; 100 + goto free_non_housekeeping_mask; 101 101 } 102 102 103 103 alloc_bootmem_cpumask_var(&housekeeping_staging); ··· 119 119 } else { 120 120 if (!cpumask_equal(housekeeping_staging, housekeeping_mask)) { 121 121 pr_warn("Housekeeping: nohz_full= must match isolcpus=\n"); 122 - free_bootmem_cpumask_var(housekeeping_staging); 123 - free_bootmem_cpumask_var(non_housekeeping_mask); 124 - return 0; 122 + goto free_housekeeping_staging; 125 123 } 126 124 } 127 - 128 - free_bootmem_cpumask_var(housekeeping_staging); 129 125 130 126 if ((flags & HK_FLAG_TICK) && !(housekeeping_flags & HK_FLAG_TICK)) { 131 127 if (IS_ENABLED(CONFIG_NO_HZ_FULL)) { ··· 129 133 } else { 130 134 pr_warn("Housekeeping: nohz unsupported." 131 135 " Build with CONFIG_NO_HZ_FULL\n"); 132 - free_bootmem_cpumask_var(non_housekeeping_mask); 133 - return 0; 136 + goto free_housekeeping_staging; 134 137 } 135 138 } 136 139 137 140 housekeeping_flags |= flags; 141 + err = 1; 138 142 143 + free_housekeeping_staging: 144 + free_bootmem_cpumask_var(housekeeping_staging); 145 + free_non_housekeeping_mask: 139 146 free_bootmem_cpumask_var(non_housekeeping_mask); 140 147 141 - return 1; 148 + return err; 142 149 } 143 150 144 151 static int __init housekeeping_nohz_full_setup(char *str)