From nobody Thu Feb 12 06:33:18 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EB55EEE6457 for ; Fri, 15 Sep 2023 12:08:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234498AbjIOMIW (ORCPT ); Fri, 15 Sep 2023 08:08:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53718 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234437AbjIOMIU (ORCPT ); Fri, 15 Sep 2023 08:08:20 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BDF72709; Fri, 15 Sep 2023 05:05:46 -0700 (PDT) Date: Fri, 15 Sep 2023 12:03:29 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1694779410; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=z1faOKlPoZODeUUJCMNadxA5dnwKXkX9advHmwLjgnc=; b=yEyCFgm/V7+/iu3ju/Yr+pYoOFQVpfMCGEZ7C0E9L2OTzAp+fDX7w0P4Gul/s5tZVxDsQT fahx9PA5/wDvRlXUW4OQm3ZK4e3MxGitIjs9zA+n8kv4lcUcIx7s4lKQOKvtcyN+Qg+Czd V379ekBwWvDa0BgmvLwQKcwHI37I1ck87brnRse7MMFgblwI9OQ6ifPCFt+TEfaps5REEa M7RyXvx6xR34QoZwW6zPDFkDjlKWBYnsy64JvIMGmA8DIL3Tqvwf7AsENqJr0QoNJNqc8V O0GhjTB1JNsZNGOCtKGYpCMrU2A2tS1gRdK9JeYKGbCqdoi6oX2f375wE7nsbQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1694779410; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=z1faOKlPoZODeUUJCMNadxA5dnwKXkX9advHmwLjgnc=; b=K04klCqabRNhhPH6c/jxoviBmJ+kdrfuTnGKiXIveqrzyuXIOAnxsERN7urMiCoFAoepw4 38p+7td87FAkB2DA== From: "tip-bot2 for Yury Norov" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: sched/core] numa: Generalize numa_map_to_online_node() Cc: Yury Norov , Ingo Molnar , Mel Gorman , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20230819141239.287290-2-yury.norov@gmail.com> References: <20230819141239.287290-2-yury.norov@gmail.com> MIME-Version: 1.0 Message-ID: <169477940958.27769.18027179711579051058.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the sched/core branch of tip: Commit-ID: b1f099b1cf51d553c510c6c8141c27d9ba7ea1fe Gitweb: https://git.kernel.org/tip/b1f099b1cf51d553c510c6c8141c27d9b= a7ea1fe Author: Yury Norov AuthorDate: Sat, 19 Aug 2023 07:12:33 -07:00 Committer: Ingo Molnar CommitterDate: Fri, 15 Sep 2023 13:48:09 +02:00 numa: Generalize numa_map_to_online_node() The function in fact searches the nearest node for a given one, based on a N_ONLINE state. This is a common pattern to search for a nearest node. This patch converts numa_map_to_online_node() to numa_nearest_node() so that others won't need to opencode the logic. Signed-off-by: Yury Norov Signed-off-by: Ingo Molnar Cc: Mel Gorman Link: https://lore.kernel.org/r/20230819141239.287290-2-yury.norov@gmail.com --- include/linux/numa.h | 7 +++++-- mm/mempolicy.c | 18 +++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/include/linux/numa.h b/include/linux/numa.h index 59df211..fb30a42 100644 --- a/include/linux/numa.h +++ b/include/linux/numa.h @@ -25,7 +25,7 @@ #include =20 /* Generic implementation available */ -int numa_map_to_online_node(int node); +int numa_nearest_node(int node, unsigned int state); =20 #ifndef memory_add_physaddr_to_nid static inline int memory_add_physaddr_to_nid(u64 start) @@ -44,10 +44,11 @@ static inline int phys_to_target_node(u64 start) } #endif #else /* !CONFIG_NUMA */ -static inline int numa_map_to_online_node(int node) +static inline int numa_nearest_node(int node, unsigned int state) { return NUMA_NO_NODE; } + static inline int memory_add_physaddr_to_nid(u64 start) { return 0; @@ -58,6 +59,8 @@ static inline int phys_to_target_node(u64 start) } #endif =20 +#define numa_map_to_online_node(node) numa_nearest_node(node, N_ONLINE) + #ifdef CONFIG_HAVE_ARCH_NODE_DEV_GROUP extern const struct attribute_group arch_node_dev_group; #endif diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 42b5567..d4c0fff 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -131,22 +131,26 @@ static struct mempolicy default_policy =3D { static struct mempolicy preferred_node_policy[MAX_NUMNODES]; =20 /** - * numa_map_to_online_node - Find closest online node + * numa_nearest_node - Find nearest node by state * @node: Node id to start the search + * @state: State to filter the search * - * Lookup the next closest node by distance if @nid is not online. + * Lookup the closest node by distance if @nid is not in state. * - * Return: this @node if it is online, otherwise the closest node by dista= nce + * Return: this @node if it is in state, otherwise the closest node by dis= tance */ -int numa_map_to_online_node(int node) +int numa_nearest_node(int node, unsigned int state) { int min_dist =3D INT_MAX, dist, n, min_node; =20 - if (node =3D=3D NUMA_NO_NODE || node_online(node)) + if (state >=3D NR_NODE_STATES) + return -EINVAL; + + if (node =3D=3D NUMA_NO_NODE || node_state(node, state)) return node; =20 min_node =3D node; - for_each_online_node(n) { + for_each_node_state(n, state) { dist =3D node_distance(node, n); if (dist < min_dist) { min_dist =3D dist; @@ -156,7 +160,7 @@ int numa_map_to_online_node(int node) =20 return min_node; } -EXPORT_SYMBOL_GPL(numa_map_to_online_node); +EXPORT_SYMBOL_GPL(numa_nearest_node); =20 struct mempolicy *get_task_policy(struct task_struct *p) {