3

独自のネットワーク デバイス ドライバーを作成しました。tx 関数 (で登録された関数) でデータを送信する前に、ハードウェアの準備が整うまで待機する必要がある状況があります.ndo_start_xmit。アトミック コンテキストではスリープ/待機できないため、tx 関数内からワーク キューをスケジュールすることで回避策を実装しました。ワーク キューは、ハードウェアの準備が整うまで待機し、データを送信できます。

これを行うより良い方法はありますか?つまり、.ndo_start_xmit()すぐに戻りますが、同時に、準備ができたらいつでもフレームがハードウェアに送信されるようにスケジュールします。

実装に関する追加情報:ワーク キューをスケジュールする直前netif_stop_queue()から呼び出します。.ndo_start_xmit()ワーク キュー ハンドラが実行されるとnetif_start_queue()、ハードウェアからフレームを送信した直後に内部で呼び出します。これは問題なく動作しますが、時々次のエラーが発生します。

NOHZ: local_softirq_pending 08

もちろん、このプロセスにはレイテンシーがありますが、現在のアプリケーションでは問題なく動作します。当社のネットワーク チップは、SPI 経由でプロセッサに接続されており、SPI 経由でイーサネット フレームをそのまま受信できます。これらのイーサネット フレームは、チップによって物理メディアを介してさらに送信されます。

imx233 でカーネル バージョン 2.6.31 を使用しています。

4

0 に答える 0