lkml.org 
[lkml]   [2023]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v2 3/6] lib/group_cpus: optimize inner loop in grp_spread_init_one()
    On Thu,  7 Dec 2023 12:38:57 -0800 Yury Norov <yury.norov@gmail.com> wrote:

    > The loop starts from the beginning every time we switch to the next
    > sibling mask. This is the Schlemiel the Painter's style of coding
    > because we know for sure that nmsk is clear up to current CPU, and we
    > can just continue from the next CPU.
    >
    > Also, we can do it nicer if leverage the dedicated for_each() iterator.
    >
    > --- a/lib/group_cpus.c
    > +++ b/lib/group_cpus.c
    > @@ -30,13 +30,13 @@ static void grp_spread_init_one(struct cpumask *irqmsk, struct cpumask *nmsk,
    >
    > /* If the cpu has siblings, use them first */
    > siblmsk = topology_sibling_cpumask(cpu);
    > - for (sibl = -1; cpus_per_grp > 0; ) {
    > - sibl = cpumask_next(sibl, siblmsk);
    > - if (sibl >= nr_cpu_ids)
    > - break;

    I assume this test goes away because the iterator takes care of it?

    > + sibl = cpu + 1;
    > +
    > + for_each_cpu_and_from(sibl, siblmsk, nmsk) {
    > __cpumask_clear_cpu(sibl, nmsk);
    > __cpumask_set_cpu(sibl, irqmsk);
    > - cpus_per_grp--;
    > + if (cpus_per_grp-- == 0)
    > + return;
    > }
    > }
    > }

    \
     
     \ /
      Last update: 2023-12-07 22:46    [W:4.533 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site