2016-10-03 18 views
0

ドライバコンテキストでのスピンロックと遅延に関する一般的な質問があります。私はgpioで読み書きするLinuxドライバを持っています。読み出しおよび書き込み動作は単一のピンで行われ、完全にタイミングベースである(HDQプロトコル)。元のドライバはudelay()呼び出しを使用して実装されており、最悪のシナリオは約500 usです。 ドライバーは割り込みとして何も実装していません。特定のGPIOで通常の読み取りと書き込みのみを実装しています。gpio_get_value()gpio_set_value()です。 これらの遅延の間に、ドライバにはスピンロックが含まれています。どれくらい安全ですか?私はスピンロックで囲まれたこれらの遅れに少しは関心があります。Linuxドライバコンテキストでのマイクロ秒の遅延とスピンロック

答えて

2

udelayは、アトミックセクション(すなわち、スピンロックまたは割り込み)で安全に使用できます。すべての詳細についてはthe kernel timers howtoをご覧ください。

udelayがビジー待機中であるため、パフォーマンスが懸念される可能性があります。ただし、スケジューリング可能なスリープが使用されている場合、正確ではないため、タイミング要件を満たすことは確実ではありません。 プロセッサの場合、usleepは十分正確である必要がありますが、それはudelayよりは確実ではありません。また、usleepを呼び出すときにスピンロックを保持できないため、別の同期メカニズムを使用する必要があります。

関連する問題