在x86(_64)irq上下文(软和硬irq)中,保存FPU上下文是一项昂贵的活动。所以在使用FPU之前,完成了irq_fpu_usable检查。
以下是我的问题:
如果处理器支持xsaveopts指令,则仍在保存 FPU是一项昂贵的活动吗?
如果我们在irq上下文中保存FPU上下文,我们可能会遇到什么问题。
答案 0 :(得分:2)
XSAVEOPTS
仅阻止保存整个FPU寄存器集(x87,XMM,YMM),并且很可能需要保存x87和XMM寄存器。所以它仍然是一项昂贵的操作。
请注意,Linux内核函数irq_fpu_usable
的目的是确定是否允许使用FPU。它没有测试使用FPU是否需要像你的问题所暗示的那样节省FPU上下文的昂贵活动。
如果irq_fpu_usable
为真且您在kernel_fpu_begin
和kernel_fpu_end
中使用FPU,那么在IRQ上下文中使用FPU应该是安全的。然而,它可能比根本没有使用FPU的替代代码慢。
如果你的第二个问题是你的意思,你不应该自己尝试保存FPU上下文。