在Windows中,我可以使用KeSetSystemAffinityThread设置驱动程序代码的处理器关联,并使用KeGetCurrentProcessorNumber检查我的代码运行的处理器。
我正在尝试在Linux内核模块中执行类似的操作,但我能看到的唯一关联调用是针对用户空间进程的。有没有办法做到这一点,以便我可以在特定的处理器上运行汇编代码? (即sgdt)
编辑:
我想我已经弄明白了如何获取当前的处理器。 smp_processor_id()似乎应该可以工作。
答案 0 :(得分:3)
我认为你可能不得不修改内核,但改变不是太粗糙。只需将sched_setaffinity
中的sched.c
导出到模块:
long sched_setaffinity(pid_t pid, const struct cpumask *in_mask)
{
...
}
+ EXPORT_SYMBOL_GPL(sched_setaffinity); // Exported, now callable from your code.
答案 1 :(得分:1)
smp_processor_id()
应告诉您正在运行的逻辑处理器。
某些体系结构还支持smp_call_function_single
内核函数,该函数将使用处理器间中断在另一个处理器上运行函数。