【问题标题】:Why should we check irq_fpu_usable before accessing using ASENI instructions为什么我们要在使用 ASENI 指令访问之前检查 irq_fpu_usable
【发布时间】:2014-09-09 09:11:24
【问题描述】:

在内核中,我们在使用任何与 AESNI x86 asm 相关的之前检查 irq_fpu_usable 操作说明。 对应的内核代码。 文件:arch/x86/crypto/aesni-intel_glue.c

static int ablk_encrypt(struct ablkcipher_request *req)
{
  ...
    if (!irq_fpu_usable() { 
         Dont use AESNI instruction. 
    } else {
         USe AESNI instruction. 
    }
}
  1. 我们为什么要检查 FPU 是否可用于使用 AESNI 指令?
  2. AESNI 指令会使用 FPU 吗?

【问题讨论】:

    标签: linux-kernel x86 kernel x86-64


    【解决方案1】:

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

    【讨论】:

    • @GuruswamyBasavaiah 除非您实际上没有接受答案(通过单击它旁边的灰色 V 标记。
    【解决方案2】:

    一般来说,内核在保存和恢复状态时会尽量保持惰性,因为它会在内核和用户空间之间反弹,因为这是一项相当昂贵的活动。对于现代 SIMD 类型指令尤其如此,它可以添加相当数量的要保存的寄存器。因此,它会跟踪用户空间何时使用它们,以便在需要时保存/恢复它们的状态。

    在 irq_fpu_usable() 的情况下,它实际上是在检查它是否处于中断状态,在需要时懒惰地完成保存状态。但是,如果内核在内核空间中获得它的 IRQ,它只能在内核尚未使用 FPU 的情况下安全地执行此操作。

    【讨论】:

    • 如果内核在内核空间中获得 IRQ 并且正在使用 FPU 会发生什么?
    猜你喜欢
    • 2012-10-18
    • 2020-06-15
    • 1970-01-01
    • 2020-04-21
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多