... otherwise owners of the shared-busy state might get into a deadlock.
Details
Details
The vm_page_busy_downgrade() function is not used in the tree right now, but I have a plan for it.
Diff Detail
Diff Detail
- Repository
- rS FreeBSD src repository - subversion
- Lint
Lint Not Applicable - Unit
Tests Not Applicable
Event Timeline
sys/vm/vm_page.c | ||
---|---|---|
669 ↗ | (On Diff #21183) | I'm confused here. It appears that we're waking up any waiters but leaving the waiters bit set in busy_lock. Do you really want to retain the second use of "| x" here if we're waking the waiters? |
sys/vm/vm_page.c | ||
---|---|---|
669 ↗ | (On Diff #21183) | Hm, we cannot wake up only shared waiters. Indeed, the new value for cmpset() can (and probably should) omit VPB_BIT_WAITERS. If exclusive-busy waiter exists, it must recheck the page state and re-set the VPB_BIT_WAITERS. |
Comment Actions
Do not set VPB_BIT_WAITER for the new value, we are waking every waiting threads and it is their responsibility to detect stray wakeup.