我需要循环遍历每个cpu,以便从中获取per_cpu
值,但似乎没有for_each_cpu(i)
宏。 linux内核版本是2.6.26.5
我想做类似的事情:
for_each_cpu(i)
per_cpu(vm_event_states, i)
答案 0 :(得分:7)
回到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()
很可能就是你想要的。