Linux驱动程序上下文中的微秒延迟和自旋锁

时间:2016-10-03 19:59:40

标签: linux driver mutex spinlock

我有一个关于螺旋锁和驱动程序上下文延迟的一般问题。我有一个可以在gpio中读写的Linux驱动程序。读写操作在一个引脚内完成,完全基于时序( HDQ协议)。原始驱动程序使用udelay()调用实现,最糟糕的情况是 500 us 。 驱动程序不使用常规 gpio_get_value() gpio_set_value()在特定GPIO中实现任何中断,定期读取和写入。 在这些延迟之间,驱动程序包含自旋锁。这有多安全?我有点担心自旋锁所包含的这些延迟。

1 个答案:

答案 0 :(得分:2)

udelay可以安全地用于原子部分(即在自旋锁或中断内)。查看the kernel timers howto了解所有细节。

你可能会担心性能,因为udelay正忙着等待。但是,当使用可调度睡眠时,很难确保满足时序要求,因为它们不精确。在大多数处理器上,usleep应该足够准确,但不如udelay更确定。此外,在调用usleep时,您无法保持自旋锁,因此必须使用不同的同步机制。