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)
Dec 20 2023, 1:50 AM
Unknown Object (File)
Dec 20 2023, 1:50 AM
Unknown Object (File)
Dec 12 2023, 3:50 PM
Unknown Object (File)
Aug 10 2023, 3:06 AM
Unknown Object (File)
Aug 10 2023, 3:04 AM
Unknown Object (File)
Aug 7 2023, 12:27 AM
Unknown Object (File)
Mar 4 2023, 10:46 AM
Unknown Object (File)
Feb 7 2023, 9:04 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