class PriorityChanger
Defined at line 2235 of file ../../zircon/kernel/vm/include/vm/vm_cow_pages.h
PriorityChanger is a transaction object for changing the high priority count of VmCowPages
objects. The high priority count is used to manage page reclamation. This object ensures that a
DeferredOps object is created against the correct VmCowPages, which might be an ancestor of
|target_|. PriorityChanger does the following:
* Manages the lifetime of VmCowPages to ensure they last until the
priority change operation, by holding a RefPtr.
* Handles the construction of the DeferredOps object.
* Clarifies which operations need to be done within the VmCowPages lock and which need to happen
without the lock being held.
* Presents a high-level API to VmMapping and VmObjectPaged.
* Handles traversing up the VmCowPages hierarchy to ensure that high priority status is
propagated.
Callers should prefer |VmMapping::SetMemoryPriorityLocked|,
|VmMapping::SetMemoryPriorityDefaultLockedObject|, or
|VmMapping::SetMemoryPriorityHighAlreadyPositiveLockedObject|, if applicable.
To change the high priority count of a VmCowPages, you should first construct the PriorityChanger
object. Then,
* If |delta|
<
0, you must immediately call one of the Change* methods, which change the high
priority count of |target|.
* If |delta| > 0, you must call an applicable Prepare* method to set up the prerequisites for the
priority change operation, then call one of the Change* methods.
This class is not thread-safe.
Public Methods
void ~PriorityChanger ()
Defined at line 2246 of file ../../zircon/kernel/vm/include/vm/vm_cow_pages.h
void PriorityChanger (const PriorityChanger & )
Defined at line 2251 of file ../../zircon/kernel/vm/include/vm/vm_cow_pages.h
void PriorityChanger (PriorityChanger && )
Defined at line 2251 of file ../../zircon/kernel/vm/include/vm/vm_cow_pages.h
PriorityChanger & operator= (const PriorityChanger & )
Defined at line 2251 of file ../../zircon/kernel/vm/include/vm/vm_cow_pages.h
PriorityChanger & operator= (PriorityChanger && )
Defined at line 2251 of file ../../zircon/kernel/vm/include/vm/vm_cow_pages.h
Lock<CriticalMutex> * lock ()
Defined at line 2253 of file ../../zircon/kernel/vm/include/vm/vm_cow_pages.h
Lock<CriticalMutex> & lock_ref ()
Defined at line 2254 of file ../../zircon/kernel/vm/include/vm/vm_cow_pages.h
void PriorityChanger (int64_t delta, VmCowPages * target)
Construct a priority changer to change the high priority count of |target|. When |delta| is
positive, we go towards high priority. When it's negative, we move towards default
priority.
The constructor may be called with or without |target|'s lock being held.
The caller must ensure that |target| remains valid during the lifetime of PriorityChanger.
Defined at line 5116 of file ../../zircon/kernel/vm/vm_cow_pages.cc
void PrepareHasNoLoanedPagesLocked ()
This method may be called if |target|'s root page source has no loaned pages. Prefer other
Prepare* methods as this is typically hard to reason about.
If you call this method, please leave a comment explaining how you know there are no loaned
pages in the current VmObject hierarchy.
This method must be called with |target|'s lock held.
Defined at line 5128 of file ../../zircon/kernel/vm/vm_cow_pages.cc
void PrepareIsAlreadyHighPriorityLocked ()
This method may be called if |target| already has a |high_priority_count_| > 0.
This method must be called with |target|'s lock held.
Defined at line 5137 of file ../../zircon/kernel/vm/vm_cow_pages.cc
void PrepareMayNotAlreadyBeHighPriority ()
This method must be called *without* holding |target|'s VmCowPages lock. In addition, the
caller must not hold a PriorityChanger or DeferredOps on any other VmCowPages in |target|'s
hierarchy.
Defined at line 5145 of file ../../zircon/kernel/vm/vm_cow_pages.cc
void ChangeHighPriorityCountLocked ()
Increments or decrements the priority count of this VMO. The high priority count is used to
control any page reclamation, and applies to the whole VMO, including its parents. The count is
never allowed to go negative and so callers must only subtract what they have already added.
Further, callers are required to remove any additions before the VMO is destroyed.
Defined at line 5255 of file ../../zircon/kernel/vm/vm_cow_pages.cc
void ChangeSingleHighPriorityCountLocked ()
Internal (to VmCowPages) helper for modifying just this value of |high_priority_count_| without
performing any propagating.
Defined at line 5248 of file ../../zircon/kernel/vm/vm_cow_pages.cc