Linux kernel 在使用ASENI指令访问之前,我们为什么要检查irq_fpu_可用性

Linux kernel 在使用ASENI指令访问之前,我们为什么要检查irq_fpu_可用性,linux-kernel,x86,kernel,x86-64,Linux Kernel,X86,Kernel,X86 64,在内核中,在使用任何与AESNI x86 asm相关的组件之前,我们检查irq_fpu_是否可用 指示 相应的内核代码。 文件:arch/x86/crypto/aesni-intel_glue.c 静态int-ablk\u加密(结构ablkcipher\u请求*req) { ... 如果(!irq_fpu_可用(){ 不要使用AESNI指令。 }否则{ 使用AESNI指令。 } } 为什么我们要检查FPU是否可用于使用AESNI指令 AESNI指令是否会使用FPU AES-NI使用XMM寄存器

在内核中,在使用任何与AESNI x86 asm相关的组件之前,我们检查irq_fpu_是否可用 指示 相应的内核代码。 文件:arch/x86/crypto/aesni-intel_glue.c

静态int-ablk\u加密(结构ablkcipher\u请求*req)
{
...
如果(!irq_fpu_可用(){
不要使用AESNI指令。
}否则{
使用AESNI指令。
}
}
  • 为什么我们要检查FPU是否可用于使用AESNI指令
  • AESNI指令是否会使用FPU

  • AES-NI使用XMM寄存器,这是FPU状态的一部分。

    一般来说,内核在保存和恢复状态时会尝试延迟,因为它在内核和用户空间之间跳跃,因为这是一项相当昂贵的活动。现代SIMD类型指令尤其如此,它可以添加相当数量的要保存的寄存器。因此,它当用户空间使用机架时,机架会自动关闭,以便在需要时可以保存/恢复其状态


    irq_fpu_可用()的情况它实际上是在检查它是否处于中断状态,在需要时延迟保存状态。但是,如果内核在内核空间中获得IRQ,则只有在内核尚未使用FPU的情况下,它才能安全地执行该操作。

    如果内核在内核空间中获得IRQ,并且正在使用FPU,会发生什么情况?@guruswamybasaviah,除非您没有这样做t单击答案旁边的灰色V标记,即可接受答案。