如何将中断固定到驱动程序中的 CPU

How to pin a interrupt to a CPU in driver

是否可以将 softirq 或任何其他 bottom half 固定到处理器。我怀疑这是否可以在 softirq 代码中完成。 但是在驱动程序内部是否可以将特定的 IRQ 固定到 核心.

在用户模式下,您可以轻松地通过写入 /proc/irq/N/smp_affinity 来控制中断指向哪个处理器。实现它的代码的符号虽然没有导出,所以很难从内核中执行(至少对于大多数驱动程序的结构方式的可加载模块)。

不导出实现函数符号这一事实表明内核开发人员不想鼓励这样做。大概是因为它夺走了用户的控制权。并且还将有关处理器数量等的假设嵌入到驱动程序中。

所以,要回答你的问题,是的,这是可能的,但不鼓励这样做,你需要做几件事中的一件 "ugly" 来实现它((a)更改内核导出,(b) link 您的驱动程序静态进入主内核,或 (c) open/write 从内核模式进入 proc 文件。

实现此目的的通常方法是编写一个 user-mode 程序(甚至可以是 shell 脚本),将核心 numbers/masks 编程到适当的 proc 文件中.有关详细信息,请参阅内核源目录中的 Documentation/IRQ-affinity.txt