如何在每个CPU上运行代码

我试图在运行mako内核的Nexus 4上的所有cpus上设置性能监视器用户模式启用寄存器。

现在我正在设置一个可加载模块的寄存器:

void enable_registers(void* info) { unsigned int set = 1; /* enable user-mode access to the performance counter*/ asm volatile ("mcr p15, 0, %0, c9, c14, 0\n\t" : : "r" (set)); } int init_module(void) { online = num_online_cpus(); possible = num_possible_cpus(); present = num_present_cpus(); printk (KERN_INFO "Online Cpus=%d\nPossible Cpus=%d\nPresent Cpus=%d\n", online, possible, present); on_each_cpu(enable_registers , NULL, 1); return 0; } 

问题是on_each_cpu只运行Online cpus上的函数,如printk语句所示:

 Online Cpus=1 Possible Cpus=4 Present Cpus=4 

当我打电话给on_each_cpu时,只有一个在线。 所以我的问题是,如何强制一个CPU在线,或者如何强制某个CPU执行代码? 谢谢

你现在不需要在每个CPU上运行代码。 你需要做的是安排,以便当脱机CPU恢复在线时,你的代码能够执行并启用对PMU的访问。

一种方法来实现这将是一个CPU热插拔通知。