Unreliable Guide To Hacking The Linux Kernelは次のように述べています。
in_irq() が true を返すため、ハードウェア割り込み中であることがわかります。
注意。割り込みが無効になっている場合、これは誤検知を返すことに注意してください (以下を参照)。
in_irq()
x86 の Linux カーネル 2.6.32 以降では、hardirq コンテキストでゼロ以外を返す可能性があるのは本当ですか?
カーネル 2.6.32 (Debian 6) および 3.4 (OpenSUSE 12.1) での私の実験では、プロセス コンテキストから呼び出された場合、 と の間でin_irq()
呼び出された場合でも常に 0 を返しました。の代わりに割り込みを無効にするスピンロック関数を使用した場合、結果は同じでした。local_irq_disable()
local_irq_enable()
local_irq*
in_irq()
カーネルのソース コードから、どのように偽陽性を返すことができるのか、現在のところわかりません。誰でもこれを明確にできますか?
編集:私はまた、スピンロック API と / の両方を試しまし*_irqsave()
た*_irq()
がlocal_irq_save()
、local_irq_restore()
結果は同じでした。つまりin_irq()
、割り込みが無効になっているときに 0 が返されました。x86 でマシン命令を介して明示的に割り込みを無効にしてcli
も、in_irq() がゼロ以外を返すことはありませんでした。