for_each_node(node)

遍历各个pg_data_t节点。

1.定义在include/linux/nodemask.h中

/*
 * Bitmasks that are kept for all the nodes.
 */
enum node_states {
    N_POSSIBLE,        /* The node could become online at some point */
    N_ONLINE,        /* The node is online */
    N_NORMAL_MEMORY,    /* The node has regular memory */
#ifdef CONFIG_HIGHMEM
    N_HIGH_MEMORY,        /* The node has regular or high memory */
#else
    N_HIGH_MEMORY = N_NORMAL_MEMORY,
#endif
    N_CPU,        /* The node has one or more cpus */
    NR_NODE_STATES
};
#define for_each_node(node) for_each_node_state(node, N_POSSIBLE)

for_each_node_state根据宏开关有不同的定义

#if MAX_NUMNODES 
#define for_each_node_state(__node, __state) \
    for_each_node_mask((__node), node_states[__state])
#else
#define for_each_node_state(node, __state) \
    for ( (node) = 0; (node) == 0; (node) = 1)

2.MAX_NUMNODES

定义在include/linux/numa.h中

#ifdef CONFIG_NODES_SHIFT
#define NODES_SHIFT     CONFIG_NODES_SHIFT
#else
#define NODES_SHIFT     0
#endif

#define MAX_NUMNODES    (1 << NODES_SHIFT)

而CONFIG_NODES_SHIFT定义在不同板子的arch/arm/configs/xxx_defconfig文件中。

3.for_each_node_mask(node, mask)

#if MAX_NUMNODES > 1
#define for_each_node_mask(node, mask)            \
    for ((node) = first_node(mask);            \
        (node) < MAX_NUMNODES;            \
        (node) = next_node((node), (mask)))
#else /* MAX_NUMNODES == 1 */
#define for_each_node_mask(node, mask)            \
    if (!nodes_empty(mask))                \
        for ((node) = 0; (node) < 1; (node)++)
#endif /* MAX_NUMNODES */

 

转载于:https://www.cnblogs.com/yangjiguang/p/9460787.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值