On 2023/11/10 14:54, Tang Yizhou wrote:
On Thu, Nov 9, 2023 at 11:17 AM Haifeng Xu <haifeng.xu@xxxxxxxxxx> wrote:Yes, so if rcnt > 1, the RWSEM_WRITER_LOCKED bit couldn't be set?
reader writer readerFor the above example, it won't cause a problem. When the writer
acquire
release
rwsem_write_trylock
set RWSEM_WRITER_LOCKED
rwsem_down_read_slowpath
set owner
If prev lock holder is a reader, when it releases the lock, the owner isn't cleared(CONFIG_DEBUG_RWSEMS isn't enabled).
A writer comes and can set the RWSEM_WRITER_LOCKED bit succsessfully, then a new reader run into slow path, before
the writer set the owner, the new reader will see that both the RWSEM_READER_OWNED bit and RWSEM_WRITER_LOCKED bit are
set.
successfully sets RWSEM_WRITER_LOCKED, the reader, when reading rcnt
through rwsem_down_read_slowpath(), will see that rcnt is 0 and will
jump to the queue label.
Thanks,
Tang