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 ?).

>       free_bootmem_cpumask_var(non_housekeeping_mask);
>  
>       return 1;
> -- 
> 2.27.0
> 

Reply via email to