Linux内核模块的处理器关联设置?

时间:2010-06-13 18:53:17

标签: linux-kernel smp affinity

在Windows中,我可以使用KeSetSystemAffinityThread设置驱动程序代码的处理器关联,并使用KeGetCurrentProcessorNumber检查我的代码运行的处理器。

我正在尝试在Linux内核模块中执行类似的操作,但我能看到的唯一关联调用是针对用户空间进程的。有没有办法做到这一点,以便我可以在特定的处理器上运行汇编代码? (即sgdt)

编辑:

我想我已经弄明白了如何获取当前的处理器。 smp_processor_id()似乎应该可以工作。

2 个答案:

答案 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内核函数,该函数将使用处理器间中断在另一个处理器上运行函数。