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@xxxxxxxxxxxxxxxxxx> --- 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@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>