如何在每个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的代码 。您需要做的是安排以便离线cpus重新联机时,您的代码能够执行并启用对PMU的访问。

实现该目标的一种方法是使用CPU热插拔通知程序。

以上是 如何在每个CPU上运行代码 的全部内容, 来源链接: utcz.com/qa/416075.html

回到顶部