为什么读取访问需要 IRQ 安全版本的 seqlock?
Why need IRQ-safe version of seqlock for read access?
当写访问受seqlock 保护的共享资源时,写入者必须在进入临界区之前获得独占锁。因此,与自旋锁一样,使用 seqlock 进行写访问具有常见变体(如 *_irqsave 和 *_bh)是有意义的。但是 LDD3(第 128 页)说:
If your seqlock might be accessed from an interrupt handler, you should use the IRQ-safe versions instead:
unsigned int read_seqbegin_irqsave(seqlock_t *lock,
unsigned long flags);
int read_seqretry_irqrestore(seqlock_t *lock, unsigned int seq,
unsigned long flags);
据我了解,由于它是为读者能够自由访问共享资源而设计的(仅在最后检查一致性并在需要时重试),因此读取访问被调度程序中断或硬件中断。我错过了什么吗?谢谢
当写访问受seqlock 保护的共享资源时,写入者必须在进入临界区之前获得独占锁。因此,与自旋锁一样,使用 seqlock 进行写访问具有常见变体(如 *_irqsave 和 *_bh)是有意义的。但是 LDD3(第 128 页)说:
If your seqlock might be accessed from an interrupt handler, you should use the IRQ-safe versions instead:
unsigned int read_seqbegin_irqsave(seqlock_t *lock, unsigned long flags); int read_seqretry_irqrestore(seqlock_t *lock, unsigned int seq, unsigned long flags);
据我了解,由于它是为读者能够自由访问共享资源而设计的(仅在最后检查一致性并在需要时重试),因此读取访问被调度程序中断或硬件中断。我错过了什么吗?谢谢