【发布时间】:2010-09-30 16:08:41
【问题描述】:
这与 this question.
我不是 Linux 设备驱动程序或内核模块方面的专家,但我一直在阅读 Rubini & Corbet 的“Linux 设备驱动程序”[O'Reilly] 以及一些在线资源,但我没有能够找到有关此特定问题的任何信息。
什么时候允许内核或驱动模块使用浮点寄存器?
如果是这样,谁负责保存和恢复其内容?
(假设 x86-64 架构)
如果我理解正确,每当 KM 运行时,它使用的硬件上下文(或硬件线程或寄存器集——无论您想调用什么)已被某个应用程序线程抢占。如果您在 c 中编写 KM,编译器将正确确保通用寄存器正确保存和恢复(就像在应用程序中一样),但浮点寄存器不会自动发生这种情况。就此而言,许多 KM 甚至不能假设处理器具有任何浮点能力。
我猜想使用浮点的 KM 必须小心保存和恢复浮点状态,这是否正确?是否有执行此操作的标准内核函数?
是否在任何地方都详细说明了此的编码约定?
对于非 SMP 驱动程序,它们是否不同?
对于较旧的非抢占式内核和较新的抢占式内核,它们有何不同?
【问题讨论】:
标签: linux floating-point linux-device-driver fxsave