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)
Tue, Nov 25, 12:54 AM
Unknown Object (File)
Mon, Nov 24, 6:01 PM
Unknown Object (File)
Wed, Nov 19, 8:55 AM
Unknown Object (File)
Tue, Nov 18, 3:53 PM
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
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