为什么需要IRQ安全版本的seqlock进行读取访问?

当写入访问受seqlock保护的共享资源时,写入者必须在进入关键部分之前获得排他锁。因此,与自旋锁一样,使用seqlock进行写访问具有诸如* _irqsave和* _bh之类的常见变体是有意义的。但是LDD3(第128页)说:

  

如果可以从中断处理程序访问seqlock,则应改用IRQ安全版本:

unsigned int read_seqbegin_irqsave(seqlock_t *lock,unsigned long flags);
int read_seqretry_irqrestore(seqlock_t *lock,unsigned int seq,unsigned long flags);

据我了解,由于它是为读者设计的,因此它可以自由访问共享资源(仅在最后检查一致性并在需要时重试),因此可以通过调度程序或硬件中断读取访问打断。我想念什么吗?谢谢。

csfkk 回答:为什么需要IRQ安全版本的seqlock进行读取访问?

自3.9内核以来,没有此类功能。
一般来说,您是对的: seqlock读取器应该能够处理不一致的数据
因此,如果我们读取计数器,然后会出现一些中断,那么请确保数据处于不一致状态-只需重新读取即可。

P.S。 LDD3-本教程相当不错,但相关性不强。


在这种情况下,您可以进行一些调查。 commit在这里。

本文链接:https://www.f2er.com/2988758.html

大家都在问