Przeglądaj źródła

kernel: memory: page_table: Simplify GetPhysicalAddr impl.

bunnei 6 lat temu
rodzic
commit
a8292f6cd9

+ 0 - 7
src/core/device_memory.cpp

@@ -12,11 +12,4 @@ DeviceMemory::DeviceMemory(System& system) : buffer{DramMemoryMap::Size}, system
 
 DeviceMemory::~DeviceMemory() = default;
 
-PAddr DeviceMemory::GetPhysicalAddr(VAddr addr) {
-    const u8* const base{system.Memory().GetPointer(addr)};
-    ASSERT(base);
-    const uintptr_t offset{static_cast<uintptr_t>(base - GetPointer(DramMemoryMap::Base))};
-    return DramMemoryMap::Base + offset;
-}
-
 } // namespace Core

+ 3 - 7
src/core/device_memory.h

@@ -28,15 +28,11 @@ public:
     ~DeviceMemory();
 
     template <typename T>
-    PAddr GetPhysicalAddr(T* ptr) {
-        const auto ptr_addr{reinterpret_cast<uintptr_t>(ptr)};
-        const auto base_addr{reinterpret_cast<uintptr_t>(buffer.data())};
-        ASSERT(ptr_addr >= base_addr);
-        return ptr_addr - base_addr + DramMemoryMap::Base;
+    constexpr PAddr GetPhysicalAddr(T* ptr) {
+        return (reinterpret_cast<uintptr_t>(ptr) - reinterpret_cast<uintptr_t>(buffer.data())) +
+               DramMemoryMap::Base;
     }
 
-    PAddr GetPhysicalAddr(VAddr addr);
-
     constexpr u8* GetPointer(PAddr addr) {
         return buffer.data() + (addr - DramMemoryMap::Base);
     }

+ 0 - 4
src/core/hle/kernel/memory/page_table.cpp

@@ -936,10 +936,6 @@ ResultVal<VAddr> PageTable::AllocateAndMapMemory(std::size_t needed_num_pages, s
     return MakeResult<VAddr>(addr);
 }
 
-PAddr PageTable::GetPhysicalAddr(VAddr addr) {
-    return system.DeviceMemory().GetPhysicalAddr(addr);
-}
-
 ResultCode PageTable::InitializeMemoryLayout(VAddr start, VAddr end) {
     block_manager = std::make_unique<MemoryBlockManager>(start, end);
 

+ 3 - 1
src/core/hle/kernel/memory/page_table.h

@@ -53,7 +53,6 @@ public:
                                           bool is_map_only, VAddr region_start,
                                           std::size_t region_num_pages, MemoryState state,
                                           MemoryPermission perm, PAddr map_addr = 0);
-    PAddr GetPhysicalAddr(VAddr addr);
 
     Common::PageTable& PageTableImpl() {
         return page_table_impl;
@@ -211,6 +210,9 @@ public:
     constexpr bool IsInsideASLRRegion(VAddr address, std::size_t size) const {
         return !IsOutsideASLRRegion(address, size);
     }
+    constexpr PAddr GetPhysicalAddr(VAddr addr) {
+        return page_table_impl.backing_addr[addr >> Memory::PageBits] + addr;
+    }
 
 private:
     constexpr bool Contains(VAddr addr) const {