summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/vm_manager.h
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2018-12-06 16:59:22 +0100
committerLioncash <mathew1800@gmail.com>2018-12-06 21:02:17 +0100
commitd4c1b9d311c978a6354574d09c451522ceb74e82 (patch)
tree4fd85da1f82ec31892c6645e45d2a04f6e010b9f /src/core/hle/kernel/vm_manager.h
parentMerge pull request #1870 from heapo/pagetable_shrink_to_fit (diff)
downloadyuzu-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.h26
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;