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)
Mon, Nov 11, 9:29 AM
Unknown Object (File)
Mon, Nov 11, 8:56 AM
Unknown Object (File)
Mon, Nov 11, 8:08 AM
Unknown Object (File)
Oct 16 2024, 1:36 PM
Unknown Object (File)
Oct 16 2024, 1:12 PM
Unknown Object (File)
Oct 1 2024, 9:38 AM
Unknown Object (File)
Sep 17 2024, 8:04 PM
Unknown Object (File)
Sep 17 2024, 3:50 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