diff options
author | Lioncash <mathew1800@gmail.com> | 2018-12-06 16:59:22 +0100 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2018-12-06 21:02:17 +0100 |
commit | d4c1b9d311c978a6354574d09c451522ceb74e82 (patch) | |
tree | 4fd85da1f82ec31892c6645e45d2a04f6e010b9f /src/core/hle/kernel/vm_manager.h | |
parent | Merge pull request #1870 from heapo/pagetable_shrink_to_fit (diff) | |
download | yuzu-d4c1b9d311c978a6354574d09c451522ceb74e82.tar yuzu-d4c1b9d311c978a6354574d09c451522ceb74e82.tar.gz yuzu-d4c1b9d311c978a6354574d09c451522ceb74e82.tar.bz2 yuzu-d4c1b9d311c978a6354574d09c451522ceb74e82.tar.lz yuzu-d4c1b9d311c978a6354574d09c451522ceb74e82.tar.xz yuzu-d4c1b9d311c978a6354574d09c451522ceb74e82.tar.zst yuzu-d4c1b9d311c978a6354574d09c451522ceb74e82.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/kernel/vm_manager.h | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/core/hle/kernel/vm_manager.h b/src/core/hle/kernel/vm_manager.h index d522404fe..a12419d1e 100644 --- a/src/core/hle/kernel/vm_manager.h +++ b/src/core/hle/kernel/vm_manager.h @@ -113,16 +113,10 @@ struct VirtualMemoryArea { * - http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files/ */ class VMManager final { + using VMAMap = std::map<VAddr, VirtualMemoryArea>; + public: - /** - * A map covering the entirety of the managed address space, keyed by the `base` field of each - * VMA. It must always be modified by splitting or merging VMAs, so that the invariant - * `elem.base + elem.size == next.base` is preserved, and mergeable regions must always be - * merged when possible so that no two similar and adjacent regions exist that have not been - * merged. - */ - std::map<VAddr, VirtualMemoryArea> vma_map; - using VMAHandle = decltype(vma_map)::const_iterator; + using VMAHandle = VMAMap::const_iterator; VMManager(); ~VMManager(); @@ -133,6 +127,9 @@ public: /// Finds the VMA in which the given address is included in, or `vma_map.end()`. VMAHandle FindVMA(VAddr target) const; + /// Indicates whether or not the given handle is within the VMA map. + bool IsValidHandle(VMAHandle handle) const; + // TODO(yuriks): Should these functions actually return the handle? /** @@ -281,7 +278,7 @@ public: Memory::PageTable page_table; private: - using VMAIter = decltype(vma_map)::iterator; + using VMAIter = VMAMap::iterator; /// Converts a VMAHandle to a mutable VMAIter. VMAIter StripIterConstness(const VMAHandle& iter); @@ -328,6 +325,15 @@ private: /// Clears out the page table void ClearPageTable(); + /** + * A map covering the entirety of the managed address space, keyed by the `base` field of each + * VMA. It must always be modified by splitting or merging VMAs, so that the invariant + * `elem.base + elem.size == next.base` is preserved, and mergeable regions must always be + * merged when possible so that no two similar and adjacent regions exist that have not been + * merged. + */ + VMAMap vma_map; + u32 address_space_width = 0; VAddr address_space_base = 0; VAddr address_space_end = 0; |