From: Tim Chen <tim.c.chen@linux.intel.com>
To: K Prateek Nayak <kprateek.nayak@amd.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>
Cc: Juri Lelli <juri.lelli@redhat.com>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
Valentin Schneider <vschneid@redhat.com>,
Tim Chen <tim.c.chen@intel.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Libo Chen <libo.chen@oracle.com>,
Abel Wu <wuyun.abel@bytedance.com>,
Len Brown <len.brown@intel.com>,
linux-kernel@vger.kernel.org, Chen Yu <yu.c.chen@intel.com>,
"Gautham R . Shenoy" <gautham.shenoy@amd.com>,
Zhao Liu <zhao1.liu@intel.com>,
Vinicius Costa Gomes <vinicius.gomes@intel.com>,
Arjan Van De Ven <arjan.van.de.ven@intel.com>
Subject: Re: [PATCH v3 1/2] sched: Create architecture specific sched domain distances
Date: Mon, 15 Sep 2025 09:44:50 -0700 [thread overview]
Message-ID: <1bccae2c1830daab13cf892ecb1ae7c05edd98f2.camel@linux.intel.com> (raw)
In-Reply-To: <e11163c7-9e23-4556-9a3a-962222978686@amd.com>
On Fri, 2025-09-12 at 08:53 +0530, K Prateek Nayak wrote:
> Hello Tim,
>
> On 9/12/2025 12:00 AM, Tim Chen wrote:
> > +static int sched_record_numa_dist(int offline_node, int (*n_dist)(int, int),
> > + int **dist, int *levels)
> > +
>
> nit. Is the blank line above intentional?
>
> Also personally I prefer breaking the two lines above as:
>
> static int
> sched_record_numa_dist(int offline_node, int (*n_dist)(int, int), int **dist, int *levels)
That would exceed 80 characters. So we would still need to move some parameters to a different
line to keep within the limit.
> {
> ...
> }
>
> > {
> > - struct sched_domain_topology_level *tl;
> > unsigned long *distance_map;
>
> Since we are breaking this out and adding return values, can we also
> cleanup that bitmap_free() before every return with __free(bitmap) like:
>
> (Only build tested)
Yes, __kfree will be better here.
>
> diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
> index 6c0ff62322cb..baa79e79ced8 100644
> --- a/kernel/sched/topology.c
> +++ b/kernel/sched/topology.c
> @@ -1910,9 +1910,8 @@ static int numa_node_dist(int i, int j)
>
> static int sched_record_numa_dist(int offline_node, int (*n_dist)(int, int),
> int **dist, int *levels)
> -
> {
> - unsigned long *distance_map;
> + unsigned long *distance_map __free(bitmap) = NULL;
> int nr_levels = 0;
> int i, j;
> int *distances;
> @@ -1932,7 +1931,6 @@ static int sched_record_numa_dist(int offline_node, int (*n_dist)(int, int),
>
> if (distance < LOCAL_DISTANCE || distance >= NR_DISTANCE_VALUES) {
> sched_numa_warn("Invalid distance value range");
> - bitmap_free(distance_map);
> return -EINVAL;
> }
>
> @@ -1946,19 +1944,17 @@ static int sched_record_numa_dist(int offline_node, int (*n_dist)(int, int),
> nr_levels = bitmap_weight(distance_map, NR_DISTANCE_VALUES);
>
> distances = kcalloc(nr_levels, sizeof(int), GFP_KERNEL);
> - if (!distances) {
> - bitmap_free(distance_map);
> + if (!distances)
> return -ENOMEM;
> - }
> +
> for (i = 0, j = 0; i < nr_levels; i++, j++) {
> j = find_next_bit(distance_map, NR_DISTANCE_VALUES, j);
> distances[i] = j;
> }
> +
> *dist = distances;
> *levels = nr_levels;
>
> - bitmap_free(distance_map);
> -
> return 0;
> }
>
> ---
>
> > int nr_levels = 0;
> > int i, j;
> > int *distances;
> > - struct cpumask ***masks;
> >
> > /*
> > * O(nr_nodes^2) de-duplicating selection sort -- in order to find the
> > @@ -1902,17 +1923,17 @@ void sched_init_numa(int offline_node)
> > */
> > distance_map = bitmap_alloc(NR_DISTANCE_VALUES, GFP_KERNEL);
> > if (!distance_map)
> > - return;
> > + return -ENOMEM;
> >
> > bitmap_zero(distance_map, NR_DISTANCE_VALUES);
> > for_each_cpu_node_but(i, offline_node) {
> > for_each_cpu_node_but(j, offline_node) {
> > - int distance = node_distance(i, j);
> > + int distance = n_dist(i, j);
> >
> > if (distance < LOCAL_DISTANCE || distance >= NR_DISTANCE_VALUES) {
> > sched_numa_warn("Invalid distance value range");
> > bitmap_free(distance_map);
> > - return;
> > + return -EINVAL;
> > }
> >
> > bitmap_set(distance_map, distance, 1);
> > @@ -1927,17 +1948,66 @@ void sched_init_numa(int offline_node)
> > distances = kcalloc(nr_levels, sizeof(int), GFP_KERNEL);
> > if (!distances) {
> > bitmap_free(distance_map);
> > - return;
> > + return -ENOMEM;
> > }
> > -
> > for (i = 0, j = 0; i < nr_levels; i++, j++) {
> > j = find_next_bit(distance_map, NR_DISTANCE_VALUES, j);
> > distances[i] = j;
> > }
> > - rcu_assign_pointer(sched_domains_numa_distance, distances);
> > + *dist = distances;
> > + *levels = nr_levels;
> >
> > bitmap_free(distance_map);
> >
> > + return 0;
> > +}
> > +
> > +static int avg_remote_numa_distance(int offline_node)
> > +{
> > + int i, j;
> > + int distance, nr_remote = 0, total_distance = 0;
> > +
> > + for_each_cpu_node_but(i, offline_node) {
> > + for_each_cpu_node_but(j, offline_node) {
> > + distance = node_distance(i, j);
> > +
> > + if (distance >= REMOTE_DISTANCE) {
> > + nr_remote++;
> > + total_distance += distance;
> > + }
> > + }
> > + }
> > + if (nr_remote)
> > + return total_distance / nr_remote;
> > + else
> > + return REMOTE_DISTANCE;
> > +}
> > +
> > +void sched_init_numa(int offline_node)
> > +{
> > + struct sched_domain_topology_level *tl;
> > + int nr_levels, nr_node_levels;
> > + int i, j;
> > + int *distances, *domain_distances;
> > + struct cpumask ***masks;
> > +
> > + if (sched_record_numa_dist(offline_node, numa_node_dist, &distances,
> > + &nr_node_levels))
> > + return;
> > +
> > + WRITE_ONCE(sched_avg_remote_numa_distance,
> > + avg_remote_numa_distance(offline_node));
>
> nit.
>
> Can add a small comment here saying arch_sched_node_distance() may
> depend on sched_avg_remote_numa_distance and requires it to be
> initialized correctly before computing domain_distances.
Sure.
Thanks for the review.
Tim
>
> Apart from those nitpicks, the changes look good to me. Please feel free
> to include:
>
> Reviewed-by: K Prateek Nayak <kprateek.nayak@amd.com>
next prev parent reply other threads:[~2025-09-15 16:44 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-11 18:30 [PATCH v3 0/2] Fix NUMA sched domain build errors for GNR and CWF Tim Chen
2025-09-11 18:30 ` [PATCH v3 1/2] sched: Create architecture specific sched domain distances Tim Chen
2025-09-12 3:23 ` K Prateek Nayak
2025-09-15 16:44 ` Tim Chen [this message]
2025-09-17 6:45 ` K Prateek Nayak
2025-09-12 5:24 ` Chen, Yu C
2025-09-15 16:49 ` Tim Chen
2025-09-15 17:16 ` Tim Chen
2025-09-15 12:37 ` Peter Zijlstra
2025-09-15 17:13 ` Tim Chen
2025-09-15 20:04 ` Tim Chen
2025-09-11 18:30 ` [PATCH v3 2/2] sched: Fix sched domain build error for GNR, CWF in SNC-3 mode Tim Chen
2025-09-12 5:08 ` K Prateek Nayak
2025-09-15 17:15 ` Tim Chen
2025-09-12 5:39 ` Chen, Yu C
2025-09-12 9:23 ` K Prateek Nayak
2025-09-12 11:59 ` Chen, Yu C
2025-09-15 12:46 ` Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1bccae2c1830daab13cf892ecb1ae7c05edd98f2.camel@linux.intel.com \
--to=tim.c.chen@linux.intel.com \
--cc=arjan.van.de.ven@intel.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=gautham.shenoy@amd.com \
--cc=juri.lelli@redhat.com \
--cc=kprateek.nayak@amd.com \
--cc=len.brown@intel.com \
--cc=libo.chen@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=tim.c.chen@intel.com \
--cc=vincent.guittot@linaro.org \
--cc=vinicius.gomes@intel.com \
--cc=vschneid@redhat.com \
--cc=wuyun.abel@bytedance.com \
--cc=yu.c.chen@intel.com \
--cc=zhao1.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.