On 9/21/20 7:40 PM, Frederic Weisbecker wrote: > On Wed, Sep 09, 2020 at 11:08:16AM -0400, Nitesh Narayan Lal wrote: >> +/* >> + * num_housekeeping_cpus() - Read the number of housekeeping CPUs. >> + * >> + * This function returns the number of available housekeeping CPUs >> + * based on __num_housekeeping_cpus which is of type atomic_t >> + * and is initialized at the time of the housekeeping setup. >> + */ >> +unsigned int num_housekeeping_cpus(void) >> +{ >> + unsigned int cpus; >> + >> + if (static_branch_unlikely(&housekeeping_overridden)) { >> + cpus = atomic_read(&__num_housekeeping_cpus); >> + /* We should always have at least one housekeeping CPU */ >> + BUG_ON(!cpus); >> + return cpus; >> + } >> + return num_online_cpus(); >> +} >> +EXPORT_SYMBOL_GPL(num_housekeeping_cpus); >> + >> int housekeeping_any_cpu(enum hk_flags flags) >> { >> int cpu; >> @@ -131,6 +153,7 @@ static int __init housekeeping_setup(char *str, enum hk_flags flags) >> >> housekeeping_flags |= flags; >> >> + atomic_set(&__num_housekeeping_cpus, cpumask_weight(housekeeping_mask)); > So the problem here is that it takes the whole cpumask weight but you're only > interested in the housekeepers who take the managed irq duties I guess > (HK_FLAG_MANAGED_IRQ ?). IMHO we should also consider the cases where we only have nohz_full. Otherwise, we may run into the same situation on those setups, do you agree? > >> free_bootmem_cpumask_var(non_housekeeping_mask); >> >> return 1; >> -- >> 2.27.0 >> -- Thanks Nitesh