From: Wei Yang <weiyang@linux.vnet.ibm.com>
To: akpm@linux-foundation.org, tj@kernel.org
Cc: linux-mm@kvack.org, Wei Yang <weiyang@linux.vnet.ibm.com>
Subject: [PATCH] mm/page: refine the calculation of highest possible node id
Date: Fri, 10 Jul 2015 14:26:21 +0800 [thread overview]
Message-ID: <1436509581-9370-1-git-send-email-weiyang@linux.vnet.ibm.com> (raw)
nr_node_ids records the highest possible node id, which is calculated by
scanning the bitmap node_states[N_POSSIBLE]. Current implementation scan
the bitmap from the beginning, which will scan the whole bitmap.
This patch reverse the order by scanning from the end. By doing so, this
will save some time whose worst case is the best case of current
implementation.
Signed-off-by: Wei Yang <weiyang@linux.vnet.ibm.com>
---
include/linux/nodemask.h | 16 ++++++++++++++++
mm/page_alloc.c | 3 +--
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h
index 6e85889..dfca95f 100644
--- a/include/linux/nodemask.h
+++ b/include/linux/nodemask.h
@@ -253,6 +253,12 @@ static inline int __first_node(const nodemask_t *srcp)
return min_t(int, MAX_NUMNODES, find_first_bit(srcp->bits, MAX_NUMNODES));
}
+#define last_node(src) __last_node(&(src))
+static inline int __last_node(const nodemask_t *srcp)
+{
+ return min_t(int, MAX_NUMNODES, find_last_bit(srcp->bits, MAX_NUMNODES));
+}
+
#define next_node(n, src) __next_node((n), &(src))
static inline int __next_node(int n, const nodemask_t *srcp)
{
@@ -360,10 +366,20 @@ static inline void __nodes_fold(nodemask_t *dstp, const nodemask_t *origp,
for ((node) = first_node(mask); \
(node) < MAX_NUMNODES; \
(node) = next_node((node), (mask)))
+
+static inline int highest_node_id(const nodemask_t possible)
+{
+ return last_node(possible);
+}
#else /* MAX_NUMNODES == 1 */
#define for_each_node_mask(node, mask) \
if (!nodes_empty(mask)) \
for ((node) = 0; (node) < 1; (node)++)
+
+static inline int highest_node_id(const nodemask_t possible)
+{
+ return 0;
+}
#endif /* MAX_NUMNODES */
/*
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 506eac8..b2f75ea 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -5453,8 +5453,7 @@ void __init setup_nr_node_ids(void)
unsigned int node;
unsigned int highest = 0;
- for_each_node_mask(node, node_possible_map)
- highest = node;
+ highest = highest_node_id(node_possible_map);
nr_node_ids = highest + 1;
}
#endif
--
1.7.9.5
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next reply other threads:[~2015-07-10 6:27 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-10 6:26 Wei Yang [this message]
2015-07-10 7:35 ` Andrew Morton
2015-07-10 8:27 ` Wei Yang
2015-07-11 3:08 ` [PATCH V2] " Wei Yang
2015-07-11 4:17 ` [PATCH V3] " Wei Yang
2015-07-16 0:16 ` David Rientjes
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=1436509581-9370-1-git-send-email-weiyang@linux.vnet.ibm.com \
--to=weiyang@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=linux-mm@kvack.org \
--cc=tj@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox