On 9/22/20 6:08 AM, Frederic Weisbecker wrote: > On Mon, Sep 21, 2020 at 11:16:51PM -0400, Nitesh Narayan Lal wrote: >> 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? > I guess it's up to the user to gather the tick and managed irq housekeeping > together? TBH I don't have a very strong case here at the moment. But still, IMHO, this will force the user to have both managed irqs and nohz_full in their environments to avoid these kinds of issues. Is that how we would like to proceed? The reason why I want to get this clarity is that going forward for any RT related work I can form my thoughts based on this discussion. > > Of course that makes the implementation more complicated. But if this is > called only on drivers initialization for now, this could be just a function > that does: > > cpumask_weight(cpu_online_mask | housekeeping_cpumask(HK_FLAG_MANAGED_IRQ)) Ack, this makes more sense. > > And then can we rename it to housekeeping_num_online()? It could be just me, but does something like hk_num_online_cpus() makes more sense here? > > Thanks. > >>>> free_bootmem_cpumask_var(non_housekeeping_mask); >>>> >>>> return 1; >>>> -- >>>> 2.27.0 >>>> >> -- >> Thanks >> Nitesh >> > > -- Thanks Nitesh
Attachment:
signature.asc
Description: OpenPGP digital signature