phy_read
/include/linux/phy.hのメソッドは32ビット値を返します。 phyドライバはこの方法を使用して16ビットMIIレジスタを読み込みます。phy_read
このメソッドは32ビット値を返します。 32ビットフィールドに16ビット値を保存すると、0xFFFFが0x0000FFFFになり、16ビットフィールドでは-1(エラー)として処理され、そのように処理されますが、32ビットに保存すると大きな正の値になります。 、エラーではありません。これにより、ドライバの実行プロセスが変更され、望ましくない方法でリンクパラメータが変更される可能性があります。
このメソッドを観察しましたgenphy_read_status
。ここで、phy_read
isとint(4バイト)は値を返しますが、管理行が削除された場合や一部のエラーが発生した場合は0xFFFFが含まれます。戻り値は4バイトなので、0より小さいことを確認するすべてのチェックは失敗します。この場合、リンク速度と二重性は、そうすることができなくても可能な最大速度(たとえば、1000 Mbps)に変わります。
それでは、phyドライバはこの状況をどのように処理しますか?このようなハードウェア障害が発生した場合、リンクがこのように構成を変更するのは正常ですか?読み取りサイズをintからu16に変更すると、問題が解決する可能性がありますが、なぜできないのですか?
これらすべての問題は、Linuxカーネル3.8.13で観察されました。エラー条件をテストしていませんが、最新のLinuxソースも同様のようです。
16ビットphyレジスタのMIIレジスタ読み出しエラーを処理する方法は?
おすすめ記事
- ソースからnode.jsをアトミックにコンパイルした後、コマンドラインからのみロードできません。
- tmuxはAltを使ってウィンドウを選択します。
- Debian StretchにFlashをインストールする方法は?
- Bashスクリプト:現在のディレクトリの代わりにサブディレクトリを解析します。
- awkで$0=$1はどういう意味ですか?
- 他のディレクトリにないファイルを探す
- ルートグループが所有するファイルに対するグループ権限は重要ですか?
- 文字列内の不均衡特殊文字を検出する方法
- ZFS暗号化ドライブのデータにアクセスする
- 「cut」コマンドで連続する同じ区切り文字を 1 つとして扱うにはどうすればよいでしょうか? 質問する