これはこの質問に関連して います。
私は Linux デバイス ドライバーやカーネル モジュールの専門家ではありませんが、Rubini & Corbet による「Linux Device Drivers」[O'Reilly] や多数のオンライン ソースを読んでいますが、見つけることができませんでした。この特定の問題についてはまだ何もありません。
カーネルまたはドライバー モジュールが浮動小数点レジスタを使用できるのはいつですか?
もしそうなら、誰がその内容を保存して復元する責任がありますか?
(x86-64 アーキテクチャを想定)
私の理解が正しければ、KM が実行されているときは常に、何らかのアプリケーション スレッドからプリエンプトされたハードウェア コンテキスト (またはハードウェア スレッドまたはレジスタ セット - 任意の名前) を使用しています。KM を c で記述した場合、コンパイラは汎用レジスタが適切に保存および復元されることを (アプリケーションと同様に) 正しく保証しますが、浮動小数点レジスタではそれが自動的に行われません。さらに言えば、多くの KM は、プロセッサに浮動小数点機能があると想定することさえできません。
浮動小数点を使用したい KM は、浮動小数点の状態を慎重に保存して復元する必要があると推測するのは正しいですか? これを行うための標準のカーネル関数はありますか?
このためのコーディング規約はどこかに明記されていますか?
それらは SMP 非 SMP ドライバーとは異なりますか?
古い非プリエンプティブ カーネルと新しいプリエンプティブ カーネルで違いはありますか?