Page MenuHomeFreeBSD

Start implementing queue state updates using fcmpset loops. [2/5]
ClosedPublic

Authored by markj on Dec 12 2019, 12:51 AM.
Tags
None
Referenced Files
Unknown Object (File)
Sat, Nov 15, 3:26 PM
Unknown Object (File)
Sat, Nov 15, 12:10 AM
Unknown Object (File)
Fri, Nov 14, 7:00 PM
Unknown Object (File)
Wed, Nov 5, 10:49 PM
Unknown Object (File)
Wed, Nov 5, 12:39 PM
Unknown Object (File)
Sun, Nov 2, 5:48 AM
Unknown Object (File)
Sun, Oct 26, 7:11 PM
Unknown Object (File)
Tue, Oct 21, 4:57 PM
Subscribers
None

Details

Reviewers
alc
kib
jeff
Summary

Introduce vm_page_pqstate_commit(), which is a generic function that
handles more cases than the specialized vm_page_pqstate_commit_*()
functions.

Implement vm_page_mvqueue() (the backend for vm_page_activate(),
vm_page_deactivate(), etc.), vm_page_unwire() and vm_page_release_toq()
using the new pqstate operations. Use vm_page_release_toq() as the
common back-end for vm_page_unwire() and vm_page_release(). This has
the side effect that vm_page_unwire() will leave the page in the active
queue if it is already there.

Diff Detail

Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 28089
Build 26233: arc lint + arc unit

Event Timeline

sys/vm/vm_page.c
3892

As I mentioned elsewhere if there is no object ref and this is the last ref we will requeue the page before calling free below.

Really this should not requeue if old == 1 but only if WIRE_COUNT(old) == 1

Would like to see the last unwire requeue avoided but otherwise LGTM.

This revision is now accepted and ready to land.Dec 20 2019, 11:03 PM