mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-27 04:25:12 +00:00
Update memory.cpp
This commit is contained in:
parent
21e8fb2e20
commit
fdff2fc47b
@ -214,10 +214,13 @@ int MemoryManager::PoolReserve(void** out_addr, VAddr virtual_addr, size_t size,
|
|||||||
MemoryMapFlags flags, u64 alignment) {
|
MemoryMapFlags flags, u64 alignment) {
|
||||||
std::scoped_lock lk{mutex};
|
std::scoped_lock lk{mutex};
|
||||||
alignment = alignment > 0 ? alignment : 2_MB;
|
alignment = alignment > 0 ? alignment : 2_MB;
|
||||||
VAddr mapped_addr = alignment > 0 ? Common::AlignUp(virtual_addr, alignment) : virtual_addr;
|
VAddr min_address = Common::AlignUp(impl.SystemManagedVirtualBase(), alignment);
|
||||||
|
VAddr mapped_addr = Common::AlignUp(virtual_addr, alignment);
|
||||||
|
|
||||||
// Fixed mapping means the virtual address must exactly match the provided one.
|
// Fixed mapping means the virtual address must exactly match the provided one.
|
||||||
if (True(flags & MemoryMapFlags::Fixed)) {
|
if (True(flags & MemoryMapFlags::Fixed)) {
|
||||||
|
// Make sure we're mapping to a valid address
|
||||||
|
mapped_addr = mapped_addr > min_address ? mapped_addr : min_address;
|
||||||
auto vma = FindVMA(mapped_addr)->second;
|
auto vma = FindVMA(mapped_addr)->second;
|
||||||
size_t remaining_size = vma.base + vma.size - mapped_addr;
|
size_t remaining_size = vma.base + vma.size - mapped_addr;
|
||||||
// If the VMA is mapped or there's not enough space, unmap the region first.
|
// If the VMA is mapped or there's not enough space, unmap the region first.
|
||||||
|
Loading…
Reference in New Issue
Block a user