kernel: memory: page_table: Simplify GetPhysicalAddr impl.

merge-requests/60/head
bunnei 2020-04-08 23:37:24 +07:00
parent c629e544a7
commit a8292f6cd9
4 changed files with 6 additions and 19 deletions

@ -12,11 +12,4 @@ DeviceMemory::DeviceMemory(System& system) : buffer{DramMemoryMap::Size}, system
DeviceMemory::~DeviceMemory() = default; 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 } // namespace Core

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

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

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