1
在Linux內核中使用FPU假定FPU塊包含kernel_fpu_begin
和kernel_fpu_end
函數。第一個是這樣的:我們可以在中斷環境中使用FPU嗎?
41 static inline void kernel_fpu_begin(void)
42 {
43 WARN_ON_ONCE(!irq_fpu_usable());
44 preempt_disable();
45 __kernel_fpu_begin();
46 }
內核發出警告,如果FPU不能使用,因爲:
64 bool irq_fpu_usable(void)
65 {
66 return !in_interrupt() ||
67 interrupted_user_mode() ||
68 interrupted_kernel_fpu_idle();
69 }
70 EXPORT_SYMBOL(irq_fpu_usable);
所以,我說的對,我們不能在中斷上下文中使用FPU ?
如果是我想知道爲什麼我們不能?
您*可以*在中斷上下文中使用FPU,但僅限於如果你中斷了一個用戶模式程序,或者你中斷了一些沒有使用FPU的內核代碼。 –
@CL。這是否意味着我不能在'softIRQ'上下文中使用FPU(在'net_rx_action'中,例如)? –
以上限制在硬中斷上下文中沒有區別。 –