There's another reason for not doing it that way: allowing readers to keep
interrupts on even in the presense of interrupt uses of readers.
If you do the "pending writes stop readers" approach, you get
cpu1 cpu2
read_lock() - get
write_lock_irq() - pending
irq happens
- read_lock() - deadlock
and that means that you need to make readers protect against interrupts
even if the interrupts only read themselves.
NOTE! I'm not saying the existing practice is necessarily a good tradeoff,
and maybe we should just make sure to find all such cases and turn the
read_lock() calls into read_lock_irqsave() and then make the rw-locks
block readers on pending writers. But it's certainly more work and cause
for subtler problems than just naively changing the rw implementation.
Linus
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/