Răsfoiți Sursa

fixup! core: hle: kernel: KPageTable: Improve Un/MapPhysicalMemory.

bunnei 4 ani în urmă
părinte
comite
92b2e92620
3 a modificat fișierele cu 18 adăugiri și 38 ștergeri
  1. 14 14
      src/common/page_table.cpp
  2. 2 2
      src/common/page_table.h
  3. 2 22
      src/core/hle/kernel/k_page_table.cpp

+ 14 - 14
src/common/page_table.cpp

@@ -10,12 +10,12 @@ PageTable::PageTable() = default;
 
 
 PageTable::~PageTable() noexcept = default;
 PageTable::~PageTable() noexcept = default;
 
 
-bool PageTable::BeginTraversal(TraversalEntry* out_entry, TraversalContext* out_context,
+bool PageTable::BeginTraversal(TraversalEntry& out_entry, TraversalContext& out_context,
                                u64 address) const {
                                u64 address) const {
     // Setup invalid defaults.
     // Setup invalid defaults.
-    out_entry->phys_addr = 0;
-    out_entry->block_size = page_size;
-    out_context->next_page = 0;
+    out_entry.phys_addr = 0;
+    out_entry.block_size = page_size;
+    out_context.next_page = 0;
 
 
     // Validate that we can read the actual entry.
     // Validate that we can read the actual entry.
     const auto page = address / page_size;
     const auto page = address / page_size;
@@ -30,20 +30,20 @@ bool PageTable::BeginTraversal(TraversalEntry* out_entry, TraversalContext* out_
     }
     }
 
 
     // Populate the results.
     // Populate the results.
-    out_entry->phys_addr = phys_addr + address;
-    out_context->next_page = page + 1;
-    out_context->next_offset = address + page_size;
+    out_entry.phys_addr = phys_addr + address;
+    out_context.next_page = page + 1;
+    out_context.next_offset = address + page_size;
 
 
     return true;
     return true;
 }
 }
 
 
-bool PageTable::ContinueTraversal(TraversalEntry* out_entry, TraversalContext* context) const {
+bool PageTable::ContinueTraversal(TraversalEntry& out_entry, TraversalContext& context) const {
     // Setup invalid defaults.
     // Setup invalid defaults.
-    out_entry->phys_addr = 0;
-    out_entry->block_size = page_size;
+    out_entry.phys_addr = 0;
+    out_entry.block_size = page_size;
 
 
     // Validate that we can read the actual entry.
     // Validate that we can read the actual entry.
-    const auto page = context->next_page;
+    const auto page = context.next_page;
     if (page >= backing_addr.size()) {
     if (page >= backing_addr.size()) {
         return false;
         return false;
     }
     }
@@ -55,9 +55,9 @@ bool PageTable::ContinueTraversal(TraversalEntry* out_entry, TraversalContext* c
     }
     }
 
 
     // Populate the results.
     // Populate the results.
-    out_entry->phys_addr = phys_addr + context->next_offset;
-    context->next_page = page + 1;
-    context->next_offset += page_size;
+    out_entry.phys_addr = phys_addr + context.next_offset;
+    context.next_page = page + 1;
+    context.next_offset += page_size;
 
 
     return true;
     return true;
 }
 }

+ 2 - 2
src/common/page_table.h

@@ -99,9 +99,9 @@ struct PageTable {
     PageTable(PageTable&&) noexcept = default;
     PageTable(PageTable&&) noexcept = default;
     PageTable& operator=(PageTable&&) noexcept = default;
     PageTable& operator=(PageTable&&) noexcept = default;
 
 
-    bool BeginTraversal(TraversalEntry* out_entry, TraversalContext* out_context,
+    bool BeginTraversal(TraversalEntry& out_entry, TraversalContext& out_context,
                         u64 address) const;
                         u64 address) const;
-    bool ContinueTraversal(TraversalEntry* out_entry, TraversalContext* context) const;
+    bool ContinueTraversal(TraversalEntry& out_entry, TraversalContext& context) const;
 
 
     /**
     /**
      * Resizes the page table to be able to accommodate enough pages within
      * Resizes the page table to be able to accommodate enough pages within

+ 2 - 22
src/core/hle/kernel/k_page_table.cpp

@@ -41,24 +41,6 @@ constexpr std::size_t GetAddressSpaceWidthFromType(FileSys::ProgramAddressSpaceT
     }
     }
 }
 }
 
 
-constexpr u64 GetAddressInRange(const KMemoryInfo& info, VAddr addr) {
-    if (info.GetAddress() < addr) {
-        return addr;
-    }
-    return info.GetAddress();
-}
-
-constexpr std::size_t GetSizeInRange(const KMemoryInfo& info, VAddr start, VAddr end) {
-    std::size_t size{info.GetSize()};
-    if (info.GetAddress() < start) {
-        size -= start - info.GetAddress();
-    }
-    if (info.GetEndAddress() > end) {
-        size -= info.GetEndAddress() - end;
-    }
-    return size;
-}
-
 } // namespace
 } // namespace
 
 
 KPageTable::KPageTable(Core::System& system_)
 KPageTable::KPageTable(Core::System& system_)
@@ -724,8 +706,7 @@ ResultCode KPageTable::UnmapPhysicalMemory(VAddr address, std::size_t size) {
         size_t tot_size = 0;
         size_t tot_size = 0;
 
 
         cur_address = address;
         cur_address = address;
-        next_valid =
-            impl.BeginTraversal(std::addressof(next_entry), std::addressof(context), cur_address);
+        next_valid = impl.BeginTraversal(next_entry, context, cur_address);
         next_entry.block_size =
         next_entry.block_size =
             (next_entry.block_size - (next_entry.phys_addr & (next_entry.block_size - 1)));
             (next_entry.block_size - (next_entry.phys_addr & (next_entry.block_size - 1)));
 
 
@@ -751,8 +732,7 @@ ResultCode KPageTable::UnmapPhysicalMemory(VAddr address, std::size_t size) {
                 break;
                 break;
             }
             }
 
 
-            next_valid =
-                impl.ContinueTraversal(std::addressof(next_entry), std::addressof(context));
+            next_valid = impl.ContinueTraversal(next_entry, context);
         }
         }
 
 
         // Add the last block.
         // Add the last block.