我需要遍历每个 CPU,以便per_cpu
从它们中获取值,但 Linux 内核 2.6.26.5 版本中似乎没有for_each_cpu(i)
宏。
我怎样才能实现以下目标?
for_each_cpu(i)
per_cpu(vm_event_states, i)
我需要遍历每个 CPU,以便per_cpu
从它们中获取值,但 Linux 内核 2.6.26.5 版本中似乎没有for_each_cpu(i)
宏。
我怎样才能实现以下目标?
for_each_cpu(i)
per_cpu(vm_event_states, i)
回到 2.6.26 内核,for_each_cpu()
被称为for_each_cpu_mask()
. 它在 中定义cpumask.h
,并接受两个参数 - 一个迭代器和一个掩码。掩码是一个cpumask_t
左值,用于定义要迭代的 CPU 集。
有三个只需要一个迭代器的辅助宏——你可能想使用其中之一:
for_each_possible_cpu(cpu)
for_each_present_cpu(cpu)
for_each_online_cpu(cpu)
for_each_possible_cpu()
遍历内核启动时可能存在的所有 CPU;for_each_present_cpu()
迭代当前存在的所有 CPU(在不支持 CPU 热插拔的系统上,这两个是相同的);并for_each_online_cpu()
遍历所有当前已启用且可供调度程序使用的 CPU。
请注意,for_each_online_cpu()
应在get_online_cpus()
/put_online_cpus()
部分中使用,以防止在您迭代时更改在线 CPU 映射。
这很可能for_each_possible_cpu()
就是你想要的。